From 86f4b2d751fd865a45b7e29f3b973027e62496f3 Mon Sep 17 00:00:00 2001 From: Martin Felis Date: Tue, 11 Apr 2017 08:16:10 +0200 Subject: [PATCH] Updated bgfx and bx --- 3rdparty/bgfx/3rdparty/.editorconfig | 4 + 3rdparty/bgfx/3rdparty/etc2/ProcessRGB.cpp | 8 +- .../forsythtriangleorderoptimizer.cpp | 2 +- .../glsl-optimizer/src/glsl/ast_to_hir.cpp | 10 +- .../src/glsl/glsl_optimizer.cpp | 18 +- .../src/glsl/ir_print_metal_visitor.cpp | 12 + 3rdparty/bgfx/3rdparty/glslang/.appveyor.yml | 40 + 3rdparty/bgfx/3rdparty/glslang/.clang-format | 12 + 3rdparty/bgfx/3rdparty/glslang/.gitattributes | 17 + 3rdparty/bgfx/3rdparty/glslang/.gitignore | 13 + 3rdparty/bgfx/3rdparty/glslang/.travis.yml | 60 + 3rdparty/bgfx/3rdparty/glslang/CMakeLists.txt | 77 + .../bgfx/3rdparty/glslang/ChooseMSVCCRT.cmake | 105 + .../3rdparty/glslang/External/CMakeLists.txt | 34 + .../glslang/OGLCompilersDLL/CMakeLists.txt | 11 + .../glslang/OGLCompilersDLL/InitializeDll.cpp | 155 + .../glslang/OGLCompilersDLL/InitializeDll.h | 49 + .../3rdparty/glslang/README-spirv-remap.txt | 137 + 3rdparty/bgfx/3rdparty/glslang/README.md | 306 + .../3rdparty/glslang/SPIRV/CMakeLists.txt | 57 + .../3rdparty/glslang/SPIRV/GLSL.ext.AMD.h | 116 + .../3rdparty/glslang/SPIRV/GLSL.ext.KHR.h | 43 + .../bgfx/3rdparty/glslang/SPIRV/GLSL.ext.NV.h | 54 + .../3rdparty/glslang/SPIRV/GLSL.std.450.h | 131 + .../3rdparty/glslang/SPIRV/GlslangToSpv.cpp | 5450 +++++++ .../3rdparty/glslang/SPIRV/GlslangToSpv.h | 54 + .../glslang/SPIRV/InReadableOrder.cpp | 113 + .../bgfx/3rdparty/glslang/SPIRV/Logger.cpp | 68 + 3rdparty/bgfx/3rdparty/glslang/SPIRV/Logger.h | 74 + .../3rdparty/glslang/SPIRV/SPVRemapper.cpp | 1333 ++ .../bgfx/3rdparty/glslang/SPIRV/SPVRemapper.h | 296 + .../3rdparty/glslang/SPIRV/SpvBuilder.cpp | 2584 ++++ .../bgfx/3rdparty/glslang/SPIRV/SpvBuilder.h | 598 + .../bgfx/3rdparty/glslang/SPIRV/bitutils.h | 81 + .../3rdparty/glslang/SPIRV/disassemble.cpp | 695 + .../bgfx/3rdparty/glslang/SPIRV/disassemble.h | 52 + 3rdparty/bgfx/3rdparty/glslang/SPIRV/doc.cpp | 2855 ++++ 3rdparty/bgfx/3rdparty/glslang/SPIRV/doc.h | 260 + .../bgfx/3rdparty/glslang/SPIRV/hex_float.h | 1078 ++ .../bgfx/3rdparty/glslang/SPIRV/spirv.hpp | 952 ++ 3rdparty/bgfx/3rdparty/glslang/SPIRV/spvIR.h | 405 + .../glslang/StandAlone/CMakeLists.txt | 47 + .../glslang/StandAlone/ResourceLimits.cpp | 458 + .../glslang/StandAlone/ResourceLimits.h | 57 + .../glslang/StandAlone/StandAlone.cpp | 1131 ++ .../3rdparty/glslang/StandAlone/Worklist.h | 98 + .../glslang/StandAlone/spirv-remap.cpp | 343 + 3rdparty/bgfx/3rdparty/glslang/Test/100.conf | 28 + 3rdparty/bgfx/3rdparty/glslang/Test/100.frag | 227 + .../bgfx/3rdparty/glslang/Test/100Limits.vert | 76 + .../bgfx/3rdparty/glslang/Test/100scope.vert | 76 + .../bgfx/3rdparty/glslang/Test/110scope.vert | 74 + 3rdparty/bgfx/3rdparty/glslang/Test/120.frag | 248 + 3rdparty/bgfx/3rdparty/glslang/Test/120.vert | 203 + 3rdparty/bgfx/3rdparty/glslang/Test/130.frag | 169 + 3rdparty/bgfx/3rdparty/glslang/Test/130.vert | 78 + 3rdparty/bgfx/3rdparty/glslang/Test/140.frag | 53 + 3rdparty/bgfx/3rdparty/glslang/Test/140.vert | 79 + 3rdparty/bgfx/3rdparty/glslang/Test/150.frag | 50 + 3rdparty/bgfx/3rdparty/glslang/Test/150.geom | 139 + 3rdparty/bgfx/3rdparty/glslang/Test/150.tesc | 34 + 3rdparty/bgfx/3rdparty/glslang/Test/150.tese | 35 + 3rdparty/bgfx/3rdparty/glslang/Test/150.vert | 29 + 3rdparty/bgfx/3rdparty/glslang/Test/300.frag | 161 + 3rdparty/bgfx/3rdparty/glslang/Test/300.vert | 187 + .../3rdparty/glslang/Test/300BuiltIns.frag | 76 + .../bgfx/3rdparty/glslang/Test/300block.frag | 58 + .../bgfx/3rdparty/glslang/Test/300layout.frag | 19 + .../bgfx/3rdparty/glslang/Test/300layout.vert | 57 + .../bgfx/3rdparty/glslang/Test/300link.frag | 8 + .../bgfx/3rdparty/glslang/Test/300link2.frag | 11 + .../bgfx/3rdparty/glslang/Test/300link3.frag | 7 + .../3rdparty/glslang/Test/300operations.frag | 135 + .../bgfx/3rdparty/glslang/Test/300scope.vert | 74 + 3rdparty/bgfx/3rdparty/glslang/Test/310.comp | 256 + 3rdparty/bgfx/3rdparty/glslang/Test/310.frag | 451 + 3rdparty/bgfx/3rdparty/glslang/Test/310.geom | 152 + 3rdparty/bgfx/3rdparty/glslang/Test/310.tesc | 169 + 3rdparty/bgfx/3rdparty/glslang/Test/310.tese | 128 + 3rdparty/bgfx/3rdparty/glslang/Test/310.vert | 403 + .../bgfx/3rdparty/glslang/Test/310AofA.vert | 115 + .../Test/310implicitSizeArrayError.vert | 8 + 3rdparty/bgfx/3rdparty/glslang/Test/330.frag | 152 + .../bgfx/3rdparty/glslang/Test/330comp.frag | 12 + 3rdparty/bgfx/3rdparty/glslang/Test/400.frag | 197 + 3rdparty/bgfx/3rdparty/glslang/Test/400.geom | 330 + 3rdparty/bgfx/3rdparty/glslang/Test/400.tesc | 125 + 3rdparty/bgfx/3rdparty/glslang/Test/400.tese | 125 + 3rdparty/bgfx/3rdparty/glslang/Test/400.vert | 106 + 3rdparty/bgfx/3rdparty/glslang/Test/410.geom | 39 + 3rdparty/bgfx/3rdparty/glslang/Test/410.tesc | 11 + 3rdparty/bgfx/3rdparty/glslang/Test/410.vert | 9 + 3rdparty/bgfx/3rdparty/glslang/Test/420.comp | 30 + 3rdparty/bgfx/3rdparty/glslang/Test/420.frag | 14 + 3rdparty/bgfx/3rdparty/glslang/Test/420.geom | 55 + 3rdparty/bgfx/3rdparty/glslang/Test/420.tesc | 43 + 3rdparty/bgfx/3rdparty/glslang/Test/420.tese | 90 + 3rdparty/bgfx/3rdparty/glslang/Test/420.vert | 161 + .../3rdparty/glslang/Test/420_size_gl_in.geom | 21 + 3rdparty/bgfx/3rdparty/glslang/Test/430.comp | 87 + 3rdparty/bgfx/3rdparty/glslang/Test/430.vert | 223 + .../bgfx/3rdparty/glslang/Test/430AofA.frag | 108 + .../bgfx/3rdparty/glslang/Test/430scope.vert | 74 + 3rdparty/bgfx/3rdparty/glslang/Test/440.frag | 153 + 3rdparty/bgfx/3rdparty/glslang/Test/440.vert | 191 + 3rdparty/bgfx/3rdparty/glslang/Test/450.comp | 1 + 3rdparty/bgfx/3rdparty/glslang/Test/450.frag | 56 + 3rdparty/bgfx/3rdparty/glslang/Test/450.geom | 14 + 3rdparty/bgfx/3rdparty/glslang/Test/450.tesc | 14 + 3rdparty/bgfx/3rdparty/glslang/Test/450.tese | 14 + 3rdparty/bgfx/3rdparty/glslang/Test/450.vert | 28 + .../3rdparty/glslang/Test/Operations.frag | 166 + .../bgfx/3rdparty/glslang/Test/aggOps.frag | 51 + .../3rdparty/glslang/Test/always-discard.frag | 36 + .../glslang/Test/always-discard2.frag | 19 + .../bgfx/3rdparty/glslang/Test/array.frag | 106 + .../bgfx/3rdparty/glslang/Test/array100.frag | 70 + .../3rdparty/glslang/Test/atomic_uint.frag | 48 + .../bgfx/3rdparty/glslang/Test/badChars.frag | 7 + .../3rdparty/glslang/Test/badMacroArgs.frag | 4 + .../glslang/Test/baseResults/100.frag.out | 576 + .../Test/baseResults/100Limits.vert.out | 889 ++ .../Test/baseResults/100LimitsConf.vert.out | 24 + .../Test/baseResults/100scope.vert.out | 228 + .../Test/baseResults/110scope.vert.out | 245 + .../glslang/Test/baseResults/120.frag.out | 694 + .../glslang/Test/baseResults/120.vert.out | 504 + .../glslang/Test/baseResults/130.frag.out | 460 + .../glslang/Test/baseResults/130.vert.out | 286 + .../glslang/Test/baseResults/140.frag.out | 169 + .../glslang/Test/baseResults/140.vert.out | 215 + .../glslang/Test/baseResults/150.frag.out | 158 + .../glslang/Test/baseResults/150.geom.out | 289 + .../glslang/Test/baseResults/150.tesc.out | 1684 ++ .../glslang/Test/baseResults/150.vert.out | 95 + .../glslang/Test/baseResults/300.frag.out | 631 + .../glslang/Test/baseResults/300.vert.out | 486 + .../Test/baseResults/300BuiltIns.frag.out | 418 + .../Test/baseResults/300block.frag.out | 153 + .../Test/baseResults/300layout.frag.out | 69 + .../Test/baseResults/300layout.vert.out | 147 + .../glslang/Test/baseResults/300link.frag.out | 22 + .../Test/baseResults/300link2.frag.out | 25 + .../Test/baseResults/300link3.frag.out | 19 + .../Test/baseResults/300operations.frag.out | 420 + .../Test/baseResults/300scope.vert.out | 231 + .../glslang/Test/baseResults/310.comp.out | 617 + .../glslang/Test/baseResults/310.frag.out | 1238 ++ .../glslang/Test/baseResults/310.geom.out | 278 + .../glslang/Test/baseResults/310.tesc.out | 543 + .../glslang/Test/baseResults/310.tese.out | 302 + .../glslang/Test/baseResults/310.vert.out | 1273 ++ .../glslang/Test/baseResults/310AofA.vert.out | 376 + .../310implicitSizeArrayError.vert.out | 50 + .../glslang/Test/baseResults/330.frag.out | 192 + .../glslang/Test/baseResults/330comp.frag.out | 48 + .../glslang/Test/baseResults/400.frag.out | 688 + .../glslang/Test/baseResults/400.geom.out | 1092 ++ .../glslang/Test/baseResults/400.tesc.out | 401 + .../glslang/Test/baseResults/400.tese.out | 297 + .../glslang/Test/baseResults/400.vert.out | 556 + .../glslang/Test/baseResults/410.geom.out | 83 + .../glslang/Test/baseResults/410.tesc.out | 31 + .../glslang/Test/baseResults/410.vert.out | 29 + .../glslang/Test/baseResults/420.comp.out | 122 + .../glslang/Test/baseResults/420.frag.out | 43 + .../glslang/Test/baseResults/420.geom.out | 153 + .../glslang/Test/baseResults/420.tesc.out | 195 + .../glslang/Test/baseResults/420.tese.out | 365 + .../glslang/Test/baseResults/420.vert.out | 391 + .../Test/baseResults/420_size_gl_in.geom.out | 57 + .../glslang/Test/baseResults/430.comp.out | 210 + .../glslang/Test/baseResults/430.vert.out | 341 + .../glslang/Test/baseResults/430AofA.frag.out | 775 + .../Test/baseResults/430scope.vert.out | 231 + .../glslang/Test/baseResults/440.frag.out | 166 + .../glslang/Test/baseResults/440.vert.out | 241 + .../glslang/Test/baseResults/450.comp.out | 18 + .../glslang/Test/baseResults/450.frag.out | 276 + .../glslang/Test/baseResults/450.geom.out | 72 + .../glslang/Test/baseResults/450.tesc.out | 68 + .../glslang/Test/baseResults/450.tese.out | 68 + .../glslang/Test/baseResults/450.vert.out | 72 + .../Test/baseResults/Operations.frag.out | 1151 ++ .../glslang/Test/baseResults/aggOps.frag.out | 298 + .../Test/baseResults/always-discard.frag.out | 239 + .../Test/baseResults/always-discard2.frag.out | 121 + .../glslang/Test/baseResults/array.frag.out | 465 + .../Test/baseResults/array100.frag.out | 273 + .../Test/baseResults/atomic_uint.frag.out | 113 + .../Test/baseResults/badChars.frag.out | 27 + .../Test/baseResults/badMacroArgs.frag.out | 7 + .../glslang/Test/baseResults/comment.frag.out | 23 + .../baseResults/conditionalDiscard.frag.out | 63 + .../Test/baseResults/constErrors.frag.out | 54 + .../Test/baseResults/constFold.frag.out | 657 + .../Test/baseResults/conversion.frag.out | 955 ++ .../glslang/Test/baseResults/cppBad.vert.out | 23 + .../glslang/Test/baseResults/cppBad2.vert.out | 19 + .../Test/baseResults/cppComplexExpr.vert.out | 181 + .../Test/baseResults/cppIndent.vert.out | 84 + .../glslang/Test/baseResults/cppNest.vert.out | 143 + .../Test/baseResults/cppSimple.vert.out | 304 + .../glslang/Test/baseResults/dataOut.frag.out | 35 + .../Test/baseResults/dataOutIndirect.frag.out | 35 + .../glslang/Test/baseResults/dce.frag.out | 154 + .../glslang/Test/baseResults/decls.frag.out | 515 + .../Test/baseResults/deepRvalue.frag.out | 285 + .../Test/baseResults/depthOut.frag.out | 38 + .../Test/baseResults/discard-dce.frag.out | 239 + .../Test/baseResults/doWhileLoop.frag.out | 65 + .../baseResults/earlyReturnDiscard.frag.out | 257 + .../glslang/Test/baseResults/empty.frag.out | 17 + .../glslang/Test/baseResults/errors.frag.out | 32 + .../Test/baseResults/es-link1.frag.out | 27 + .../Test/baseResults/flowControl.frag.out | 81 + .../glslang/Test/baseResults/forLoop.frag.out | 361 + .../Test/baseResults/forwardRef.frag.out | 125 + .../Test/baseResults/functionCall.frag.out | 183 + .../baseResults/functionSemantics.frag.out | 402 + .../Test/baseResults/glspv.esversion.vert.out | 7 + .../glslang/Test/baseResults/glspv.frag.out | 9 + .../Test/baseResults/glspv.version.frag.out | 20 + .../Test/baseResults/glspv.version.vert.out | 6 + .../glslang/Test/baseResults/glspv.vert.out | 14 + .../Test/baseResults/hlsl.amend.frag.out | 256 + .../baseResults/hlsl.array.flatten.frag.out | 580 + .../Test/baseResults/hlsl.array.frag.out | 275 + .../hlsl.array.implicit-size.frag.out | 265 + .../baseResults/hlsl.array.multidim.frag.out | 223 + .../Test/baseResults/hlsl.assoc.frag.out | 244 + .../hlsl.attribute.expression.comp.out | 151 + .../Test/baseResults/hlsl.attribute.frag.out | 98 + .../Test/baseResults/hlsl.basic.comp.out | 124 + .../Test/baseResults/hlsl.basic.geom.out | 246 + .../Test/baseResults/hlsl.buffer.frag.out | 231 + .../hlsl.calculatelod.dx10.frag.out | 576 + .../hlsl.calculatelodunclamped.dx10.frag.out | 370 + .../Test/baseResults/hlsl.cast.frag.out | 133 + .../baseResults/hlsl.comparison.vec.frag.out | 415 + .../baseResults/hlsl.conditional.frag.out | 402 + .../baseResults/hlsl.constructexpr.frag.out | 163 + .../hlsl.deadFunctionMissingBody.vert.out | 32 + .../baseResults/hlsl.depthGreater.frag.out | 93 + .../Test/baseResults/hlsl.depthLess.frag.out | 74 + .../Test/baseResults/hlsl.discard.frag.out | 186 + .../Test/baseResults/hlsl.doLoop.frag.out | 166 + .../hlsl.emptystructreturn.frag.out | 101 + .../hlsl.emptystructreturn.vert.out | 98 + .../Test/baseResults/hlsl.entry-in.frag.out | 298 + .../Test/baseResults/hlsl.entry-out.frag.out | 399 + .../baseResults/hlsl.entry.rename.frag.out | 132 + .../baseResults/hlsl.flatten.return.frag.out | 199 + .../Test/baseResults/hlsl.float1.frag.out | 110 + .../Test/baseResults/hlsl.float4.frag.out | 95 + .../Test/baseResults/hlsl.forLoop.frag.out | 458 + .../glslang/Test/baseResults/hlsl.frag.out | 161 + .../hlsl.gather.array.dx10.frag.out | 449 + .../hlsl.gather.basic.dx10.frag.out | 463 + .../hlsl.gather.basic.dx10.vert.out | 416 + .../hlsl.gather.offset.dx10.frag.out | 384 + .../hlsl.gather.offsetarray.dx10.frag.out | 349 + .../hlsl.gatherRGBA.array.dx10.frag.out | 1115 ++ .../hlsl.gatherRGBA.basic.dx10.frag.out | 1141 ++ .../hlsl.gatherRGBA.offset.dx10.frag.out | 1788 +++ .../hlsl.gatherRGBA.offsetarray.dx10.frag.out | 1762 +++ .../hlsl.gathercmpRGBA.offset.dx10.frag.out | 586 + .../hlsl.getdimensions.dx10.frag.out | 3194 ++++ .../hlsl.getdimensions.dx10.vert.out | 205 + .../hlsl.getdimensions.rw.dx10.frag.out | 1113 ++ .../hlsl.getsampleposition.dx10.frag.out | 145 + .../Test/baseResults/hlsl.hull.1.tesc.out | 359 + .../Test/baseResults/hlsl.hull.2.tesc.out | 357 + .../Test/baseResults/hlsl.hull.void.tesc.out | 186 + .../hlsl.identifier.sample.frag.out | 138 + .../glslang/Test/baseResults/hlsl.if.frag.out | 365 + .../Test/baseResults/hlsl.init.frag.out | 529 + .../Test/baseResults/hlsl.init2.frag.out | 530 + .../Test/baseResults/hlsl.inoutquals.frag.out | 331 + .../hlsl.intrinsics.barriers.comp.out | 95 + .../Test/baseResults/hlsl.intrinsics.comp.out | 1083 ++ .../hlsl.intrinsics.d3dcolortoubyte4.frag.out | 124 + .../hlsl.intrinsics.double.frag.out | 330 + .../hlsl.intrinsics.evalfns.frag.out | 284 + .../hlsl.intrinsics.f1632.frag.out | 388 + .../hlsl.intrinsics.f3216.frag.out | 401 + .../Test/baseResults/hlsl.intrinsics.frag.out | 8452 ++++++++++ .../baseResults/hlsl.intrinsics.lit.frag.out | 213 + .../hlsl.intrinsics.negative.comp.out | 342 + .../hlsl.intrinsics.negative.frag.out | 985 ++ .../hlsl.intrinsics.negative.vert.out | 549 + .../hlsl.intrinsics.promote.down.frag.out | 197 + .../hlsl.intrinsics.promote.frag.out | 1328 ++ .../hlsl.intrinsics.promote.outputs.frag.out | 354 + .../Test/baseResults/hlsl.intrinsics.vert.out | 4238 +++++ .../Test/baseResults/hlsl.layout.frag.out | 140 + .../baseResults/hlsl.load.2dms.dx10.frag.out | 549 + .../baseResults/hlsl.load.array.dx10.frag.out | 639 + .../baseResults/hlsl.load.basic.dx10.frag.out | 761 + .../baseResults/hlsl.load.basic.dx10.vert.out | 715 + .../hlsl.load.buffer.dx10.frag.out | 302 + .../hlsl.load.buffer.float.dx10.frag.out | 311 + .../hlsl.load.offset.dx10.frag.out | 856 ++ .../hlsl.load.offsetarray.dx10.frag.out | 703 + .../hlsl.load.rwbuffer.dx10.frag.out | 213 + .../hlsl.load.rwtexture.array.dx10.frag.out | 406 + .../hlsl.load.rwtexture.dx10.frag.out | 455 + .../baseResults/hlsl.logical.binary.frag.out | 233 + .../hlsl.logical.binary.vec.frag.out | 425 + .../baseResults/hlsl.logical.unary.frag.out | 305 + .../Test/baseResults/hlsl.matNx1.frag.out | 274 + .../baseResults/hlsl.matType.bool.frag.out | 432 + .../Test/baseResults/hlsl.matType.frag.out | 102 + .../baseResults/hlsl.matType.int.frag.out | 751 + .../baseResults/hlsl.matrixSwizzle.vert.out | 851 + .../baseResults/hlsl.matrixindex.frag.out | 420 + .../Test/baseResults/hlsl.max.frag.out | 128 + .../Test/baseResults/hlsl.mintypes.frag.out | 237 + .../Test/baseResults/hlsl.multiEntry.vert.out | 140 + .../baseResults/hlsl.multiReturn.frag.out | 127 + .../hlsl.nonstaticMemberFunction.frag.out | 435 + .../baseResults/hlsl.numericsuffixes.frag.out | 291 + .../Test/baseResults/hlsl.numthreads.comp.out | 92 + .../Test/baseResults/hlsl.overload.frag.out | 1624 ++ .../baseResults/hlsl.params.default.frag.out | 652 + .../hlsl.params.default.negative.frag.out | 385 + .../baseResults/hlsl.partialInit.frag.out | 566 + .../Test/baseResults/hlsl.pp.line.frag.out | 188 + .../Test/baseResults/hlsl.precedence.frag.out | 256 + .../baseResults/hlsl.precedence2.frag.out | 213 + .../Test/baseResults/hlsl.precise.frag.out | 138 + .../baseResults/hlsl.promote.atomic.frag.out | 122 + .../baseResults/hlsl.promote.binary.frag.out | 293 + .../baseResults/hlsl.promote.vec1.frag.out | 131 + .../Test/baseResults/hlsl.promotions.frag.out | 2380 +++ .../hlsl.reflection.binding.frag.out | 19 + .../hlsl.reflection.binding.vert.out | 15 + .../Test/baseResults/hlsl.reflection.vert.out | 84 + .../Test/baseResults/hlsl.rw.atomics.frag.out | 5274 +++++++ .../Test/baseResults/hlsl.rw.bracket.frag.out | 2664 ++++ .../baseResults/hlsl.rw.register.frag.out | 171 + .../hlsl.rw.scalar.bracket.frag.out | 2573 ++++ .../Test/baseResults/hlsl.rw.swizzle.frag.out | 299 + .../baseResults/hlsl.rw.vec2.bracket.frag.out | 2626 ++++ .../hlsl.sample.array.dx10.frag.out | 537 + .../hlsl.sample.basic.dx10.frag.out | 858 ++ .../hlsl.sample.offset.dx10.frag.out | 599 + .../hlsl.sample.offsetarray.dx10.frag.out | 448 + .../hlsl.sample.sub-vec4.dx10.frag.out | 265 + .../hlsl.samplebias.array.dx10.frag.out | 573 + .../hlsl.samplebias.basic.dx10.frag.out | 674 + .../hlsl.samplebias.offset.dx10.frag.out | 635 + .../hlsl.samplebias.offsetarray.dx10.frag.out | 472 + .../hlsl.samplecmp.array.dx10.frag.out | 706 + .../hlsl.samplecmp.basic.dx10.frag.out | 677 + .../hlsl.samplecmp.offset.dx10.frag.out | 583 + .../hlsl.samplecmp.offsetarray.dx10.frag.out | 606 + ...lsl.samplecmplevelzero.array.dx10.frag.out | 743 + ...lsl.samplecmplevelzero.basic.dx10.frag.out | 714 + ...sl.samplecmplevelzero.offset.dx10.frag.out | 608 + ...mplecmplevelzero.offsetarray.dx10.frag.out | 631 + .../hlsl.samplegrad.array.dx10.frag.out | 639 + .../hlsl.samplegrad.basic.dx10.frag.out | 787 + .../hlsl.samplegrad.basic.dx10.vert.out | 740 + .../hlsl.samplegrad.offset.dx10.frag.out | 712 + .../hlsl.samplegrad.offsetarray.dx10.frag.out | 523 + .../hlsl.samplelevel.array.dx10.frag.out | 574 + .../hlsl.samplelevel.basic.dx10.frag.out | 680 + .../hlsl.samplelevel.basic.dx10.vert.out | 628 + .../hlsl.samplelevel.offset.dx10.frag.out | 636 + ...hlsl.samplelevel.offsetarray.dx10.frag.out | 473 + .../Test/baseResults/hlsl.scope.frag.out | 190 + .../Test/baseResults/hlsl.semantic.geom.out | 246 + .../Test/baseResults/hlsl.semantic.vert.out | 373 + .../Test/baseResults/hlsl.semicolons.frag.out | 130 + .../Test/baseResults/hlsl.shapeConv.frag.out | 346 + .../baseResults/hlsl.shapeConvRet.frag.out | 126 + .../Test/baseResults/hlsl.sin.frag.out | 100 + .../hlsl.staticMemberFunction.frag.out | 199 + .../Test/baseResults/hlsl.string.frag.out | 96 + .../baseResults/hlsl.stringtoken.frag.out | 131 + .../Test/baseResults/hlsl.struct.frag.out | 438 + .../baseResults/hlsl.struct.split-1.vert.out | 332 + .../hlsl.struct.split.array.geom.out | 279 + .../hlsl.struct.split.assign.frag.out | 351 + .../hlsl.struct.split.call.vert.out | 359 + .../hlsl.struct.split.nested.geom.out | 391 + .../hlsl.struct.split.trivial.geom.out | 298 + .../hlsl.struct.split.trivial.vert.out | 183 + .../baseResults/hlsl.structIoFourWay.frag.out | 255 + .../hlsl.structStructName.frag.out | 84 + .../hlsl.structarray.flatten.frag.out | 253 + .../hlsl.structarray.flatten.geom.out | 220 + .../hlsl.structbuffer.atomics.frag.out | 599 + .../hlsl.structbuffer.byte.frag.out | 476 + .../hlsl.structbuffer.coherent.frag.out | 308 + .../baseResults/hlsl.structbuffer.fn.frag.out | 266 + .../baseResults/hlsl.structbuffer.frag.out | 347 + .../baseResults/hlsl.structbuffer.rw.frag.out | 304 + .../hlsl.structbuffer.rwbyte.frag.out | 1307 ++ .../Test/baseResults/hlsl.structin.vert.out | 412 + .../Test/baseResults/hlsl.switch.frag.out | 466 + .../Test/baseResults/hlsl.swizzle.frag.out | 122 + .../baseResults/hlsl.templatetypes.frag.out | 733 + .../Test/baseResults/hlsl.this.frag.out | 378 + .../Test/baseResults/hlsl.tx.bracket.frag.out | 715 + .../Test/baseResults/hlsl.type.half.frag.out | 174 + .../baseResults/hlsl.type.identifier.frag.out | 395 + .../baseResults/hlsl.typeGraphCopy.vert.out | 127 + .../Test/baseResults/hlsl.typedef.frag.out | 133 + .../Test/baseResults/hlsl.void.frag.out | 107 + .../Test/baseResults/hlsl.whileLoop.frag.out | 195 + .../glslang/Test/baseResults/length.frag.out | 61 + .../baseResults/lineContinuation.vert.out | 280 + .../baseResults/lineContinuation100.vert.out | 127 + .../glslang/Test/baseResults/link1.frag.out | 162 + .../Test/baseResults/link1.vk.frag.out | 60 + .../Test/baseResults/localAggregates.frag.out | 414 + .../glslang/Test/baseResults/loops.frag.out | 1935 +++ .../Test/baseResults/loopsArtificial.frag.out | 433 + .../glslang/Test/baseResults/mains1.frag.out | 69 + .../glslang/Test/baseResults/matrix.frag.out | 507 + .../glslang/Test/baseResults/matrix2.frag.out | 347 + .../Test/baseResults/matrixError.vert.out | 71 + .../baseResults/maxClipDistances.vert.out | 21 + .../Test/baseResults/max_vertices_0.geom.out | 35 + .../Test/baseResults/missingBodies.vert.out | 98 + .../baseResults/negativeArraySize.comp.out | 24 + .../Test/baseResults/newTexture.frag.out | 523 + .../glslang/Test/baseResults/noMain.vert.out | 43 + .../Test/baseResults/nonSquare.vert.out | 183 + .../Test/baseResults/nonVulkan.frag.out | 30 + .../glslang/Test/baseResults/nosuffix.out | 15 + .../glslang/Test/baseResults/numeral.frag.out | 829 + .../Test/baseResults/pointCoord.frag.out | 69 + .../glslang/Test/baseResults/precise.tesc.out | 398 + .../baseResults/precise_struct_block.vert.out | 536 + .../Test/baseResults/precision.frag.out | 233 + .../Test/baseResults/precision.vert.out | 99 + .../glslang/Test/baseResults/prepost.frag.out | 271 + .../preprocessor.cpp_style___FILE__.vert.err | 0 .../preprocessor.cpp_style___FILE__.vert.out | 37 + ...rocessor.cpp_style_line_directive.vert.err | 15 + ...rocessor.cpp_style_line_directive.vert.out | 0 .../baseResults/preprocessor.defined.vert.err | 4 + .../baseResults/preprocessor.defined.vert.out | 0 .../preprocessor.edge_cases.vert.err | 2 + .../preprocessor.edge_cases.vert.out | 16 + .../preprocessor.eof_missing.vert.err | 0 .../preprocessor.eof_missing.vert.out | 2 + .../baseResults/preprocessor.errors.vert.err | 8 + .../baseResults/preprocessor.errors.vert.out | 0 .../preprocessor.extensions.vert.err | 3 + .../preprocessor.extensions.vert.out | 12 + .../preprocessor.function_macro.vert.err | 2 + .../preprocessor.function_macro.vert.out | 21 + .../preprocessor.include.disabled.vert.err | 13 + .../preprocessor.include.disabled.vert.out | 0 .../preprocessor.include.enabled.vert.err | 20 + .../preprocessor.include.enabled.vert.out | 0 .../baseResults/preprocessor.line.frag.err | 2 + .../baseResults/preprocessor.line.frag.out | 5 + .../baseResults/preprocessor.line.vert.err | 0 .../baseResults/preprocessor.line.vert.out | 39 + .../preprocessor.many.endif.vert.err | 12 + .../preprocessor.many.endif.vert.out | 0 .../baseResults/preprocessor.pragma.vert.err | 2 + .../baseResults/preprocessor.pragma.vert.out | 12 + .../baseResults/preprocessor.simple.vert.err | 2 + .../baseResults/preprocessor.simple.vert.out | 30 + ...essor.success_if_parse_would_fail.vert.err | 0 ...essor.success_if_parse_would_fail.vert.out | 4 + .../Test/baseResults/recurse1.vert.out | 229 + .../Test/baseResults/reflection.vert.out | 100 + .../baseResults/remap.basic.dcefunc.frag.out | 35 + .../remap.basic.dcevartype.frag.out | 12 + .../remap.basic.everything.frag.out | 27 + .../baseResults/remap.basic.none.frag.out | 40 + .../baseResults/remap.basic.strip.frag.out | 35 + ...emap.hlsl.sample.basic.everything.frag.out | 228 + .../remap.hlsl.sample.basic.none.frag.out | 312 + .../remap.hlsl.sample.basic.strip.frag.out | 261 + ...map.hlsl.templatetypes.everything.frag.out | 38 + .../remap.hlsl.templatetypes.none.frag.out | 239 + .../baseResults/remap.if.everything.frag.out | 43 + .../Test/baseResults/remap.if.none.frag.out | 47 + .../remap.literal64.everything.spv.out | 7 + .../baseResults/remap.literal64.none.spv.out | 25 + .../remap.similar_1a.everything.frag.out | 117 + .../remap.similar_1a.none.frag.out | 131 + .../remap.similar_1b.everything.frag.out | 123 + .../remap.similar_1b.none.frag.out | 137 + .../remap.switch.everything.frag.out | 77 + .../baseResults/remap.switch.none.frag.out | 81 + .../remap.uniformarray.everything.frag.out | 63 + .../remap.uniformarray.none.frag.out | 76 + .../glslang/Test/baseResults/sample.frag.out | 33 + .../glslang/Test/baseResults/sample.vert.out | 43 + .../baseResults/simpleFunctionCall.frag.out | 43 + .../Test/baseResults/specExamples.frag.out | 600 + .../Test/baseResults/specExamples.vert.out | 600 + .../Test/baseResults/spv.100ops.frag.out | 100 + .../glslang/Test/baseResults/spv.130.frag.out | 309 + .../glslang/Test/baseResults/spv.140.frag.out | 166 + .../glslang/Test/baseResults/spv.150.geom.out | 145 + .../glslang/Test/baseResults/spv.150.vert.out | 103 + .../Test/baseResults/spv.300BuiltIns.vert.out | 75 + .../Test/baseResults/spv.300layout.frag.out | 75 + .../Test/baseResults/spv.300layout.vert.out | 250 + .../Test/baseResults/spv.300layoutp.vert.out | 202 + .../Test/baseResults/spv.310.bitcast.frag.out | 230 + .../glslang/Test/baseResults/spv.310.comp.out | 131 + .../glslang/Test/baseResults/spv.330.geom.out | 67 + .../glslang/Test/baseResults/spv.400.frag.out | 1393 ++ .../glslang/Test/baseResults/spv.400.tesc.out | 173 + .../glslang/Test/baseResults/spv.400.tese.out | 185 + .../glslang/Test/baseResults/spv.420.geom.out | 128 + .../glslang/Test/baseResults/spv.430.frag.out | 50 + .../glslang/Test/baseResults/spv.430.vert.out | 138 + .../glslang/Test/baseResults/spv.450.geom.out | 67 + .../baseResults/spv.450.noRedecl.tesc.out | 49 + .../glslang/Test/baseResults/spv.450.tesc.out | 79 + .../Test/baseResults/spv.AofA.frag.out | 152 + .../spv.GeometryShaderPassthrough.geom.out | 46 + .../Test/baseResults/spv.Operations.frag.out | 704 + .../Test/baseResults/spv.accessChain.frag.out | 329 + .../Test/baseResults/spv.aggOps.frag.out | 313 + .../baseResults/spv.always-discard.frag.out | 109 + .../baseResults/spv.always-discard2.frag.out | 62 + .../Test/baseResults/spv.atomic.comp.out | 129 + .../Test/baseResults/spv.bitCast.frag.out | 236 + .../Test/baseResults/spv.bool.vert.out | 79 + .../Test/baseResults/spv.boolInBlock.frag.out | 165 + .../baseResults/spv.branch-return.vert.out | 67 + .../spv.buffer.autoassign.frag.out | 92 + .../spv.conditionalDiscard.frag.out | 59 + .../Test/baseResults/spv.conversion.frag.out | 573 + .../Test/baseResults/spv.dataOut.frag.out | 35 + .../baseResults/spv.dataOutIndirect.frag.out | 47 + .../baseResults/spv.dataOutIndirect.vert.out | 66 + .../Test/baseResults/spv.deepRvalue.frag.out | 194 + .../Test/baseResults/spv.depthOut.frag.out | 36 + .../Test/baseResults/spv.deviceGroup.frag.out | 39 + .../Test/baseResults/spv.discard-dce.frag.out | 126 + .../Test/baseResults/spv.do-simple.vert.out | 42 + .../spv.do-while-continue-break.vert.out | 80 + .../Test/baseResults/spv.doWhileLoop.frag.out | 59 + .../Test/baseResults/spv.double.comp.out | 100 + .../Test/baseResults/spv.drawParams.vert.out | 59 + .../spv.earlyReturnDiscard.frag.out | 169 + .../Test/baseResults/spv.float16.frag.out | 835 + .../Test/baseResults/spv.flowControl.frag.out | 69 + .../spv.for-complex-condition.vert.out | 60 + .../spv.for-continue-break.vert.out | 83 + .../Test/baseResults/spv.for-nobody.vert.out | 50 + .../Test/baseResults/spv.for-notest.vert.out | 44 + .../Test/baseResults/spv.for-simple.vert.out | 48 + .../Test/baseResults/spv.forLoop.frag.out | 211 + .../Test/baseResults/spv.forwardFun.frag.out | 113 + .../baseResults/spv.functionCall.frag.out | 123 + .../spv.functionNestedOpaque.vert.out | 67 + .../spv.functionSemantics.frag.out | 228 + .../Test/baseResults/spv.glFragColor.frag.out | 26 + .../spv.glsl.register.autoassign.frag.out | 224 + .../spv.glsl.register.noautoassign.frag.out | 218 + .../Test/baseResults/spv.image.frag.out | 509 + .../spv.image.load-formatted.frag.out | 352 + .../Test/baseResults/spv.int64.frag.out | 658 + .../Test/baseResults/spv.intOps.vert.out | 349 + .../Test/baseResults/spv.interpOps.frag.out | 139 + .../baseResults/spv.layoutNested.vert.out | 243 + .../Test/baseResults/spv.length.frag.out | 51 + .../baseResults/spv.localAggregates.frag.out | 216 + .../Test/baseResults/spv.loops.frag.out | 1104 ++ .../baseResults/spv.loopsArtificial.frag.out | 239 + .../Test/baseResults/spv.matFun.vert.out | 157 + .../Test/baseResults/spv.matrix.frag.out | 336 + .../Test/baseResults/spv.matrix2.frag.out | 269 + .../baseResults/spv.memoryQualifier.frag.out | 177 + .../spv.merge-unreachable.frag.out | 43 + .../Test/baseResults/spv.multiStruct.comp.out | 264 + .../spv.multiStructFuncall.frag.out | 116 + .../Test/baseResults/spv.multiView.frag.out | 39 + .../spv.multiviewPerViewAttributes.tesc.out | 77 + .../spv.multiviewPerViewAttributes.vert.out | 62 + .../Test/baseResults/spv.newTexture.frag.out | 383 + .../spv.noDeadDecorations.vert.out | 60 + .../Test/baseResults/spv.noWorkgroup.comp.out | 30 + .../Test/baseResults/spv.nonSquare.vert.out | 112 + .../Test/baseResults/spv.offsets.frag.out | 55 + .../Test/baseResults/spv.precise.tesc.out | 118 + .../Test/baseResults/spv.precise.tese.out | 187 + .../Test/baseResults/spv.precision.frag.out | 230 + .../Test/baseResults/spv.prepost.frag.out | 143 + .../baseResults/spv.pushConstant.vert.out | 63 + .../baseResults/spv.pushConstantAnon.vert.out | 66 + .../Test/baseResults/spv.qualifiers.vert.out | 50 + .../Test/baseResults/spv.queryL.frag.out | 314 + .../spv.register.autoassign-2.frag.out | 80 + .../spv.register.autoassign.frag.out | 240 + ...spv.register.autoassign.rangetest.frag.out | 5 + .../spv.register.noautoassign.frag.out | 233 + .../baseResults/spv.rw.autoassign.frag.out | 73 + .../spv.sampleMaskOverrideCoverage.frag.out | 42 + .../Test/baseResults/spv.separate.frag.out | 423 + .../glslang/Test/baseResults/spv.set.vert.out | 47 + .../baseResults/spv.shaderBallot.comp.out | 375 + .../baseResults/spv.shaderBallotAMD.comp.out | 1217 ++ .../baseResults/spv.shaderDrawParams.vert.out | 104 + .../baseResults/spv.shaderGroupVote.comp.out | 64 + .../Test/baseResults/spv.shiftOps.frag.out | 66 + .../baseResults/spv.shortCircuit.frag.out | 237 + .../spv.simpleFunctionCall.frag.out | 35 + .../Test/baseResults/spv.simpleMat.vert.out | 60 + .../baseResults/spv.sparseTexture.frag.out | 589 + .../spv.sparseTextureClamp.frag.out | 467 + .../Test/baseResults/spv.specConst.vert.out | 58 + .../baseResults/spv.specConstant.comp.out | 51 + .../baseResults/spv.specConstant.vert.out | 144 + .../spv.specConstantComposite.vert.out | 89 + .../spv.specConstantOperations.vert.out | 203 + .../baseResults/spv.ssbo.autoassign.frag.out | 153 + .../spv.stereoViewRendering.tesc.out | 85 + .../spv.stereoViewRendering.vert.out | 69 + .../baseResults/spv.structAssignment.frag.out | 98 + .../Test/baseResults/spv.structDeref.frag.out | 187 + .../Test/baseResults/spv.structure.frag.out | 95 + .../Test/baseResults/spv.subpass.frag.out | 114 + .../Test/baseResults/spv.switch.frag.out | 528 + .../Test/baseResults/spv.swizzle.frag.out | 166 + .../baseResults/spv.swizzleInversion.frag.out | 77 + .../Test/baseResults/spv.test.frag.out | 86 + .../Test/baseResults/spv.test.vert.out | 45 + .../Test/baseResults/spv.texture.frag.out | 395 + .../Test/baseResults/spv.texture.vert.out | 201 + .../Test/baseResults/spv.types.frag.out | 336 + .../Test/baseResults/spv.uint.frag.out | 443 + .../baseResults/spv.uniformArray.frag.out | 76 + .../spv.variableArrayIndex.frag.out | 145 + .../baseResults/spv.varyingArray.frag.out | 85 + .../spv.varyingArrayIndirect.frag.out | 98 + .../baseResults/spv.viewportArray2.tesc.out | 58 + .../baseResults/spv.viewportArray2.vert.out | 48 + .../baseResults/spv.voidFunction.frag.out | 73 + .../spv.while-continue-break.vert.out | 75 + .../baseResults/spv.while-simple.vert.out | 44 + .../Test/baseResults/spv.whileLoop.frag.out | 61 + .../baseResults/structAssignment.frag.out | 103 + .../Test/baseResults/structDeref.frag.out | 345 + .../Test/baseResults/structure.frag.out | 165 + .../glslang/Test/baseResults/switch.frag.out | 691 + .../glslang/Test/baseResults/swizzle.frag.out | 423 + .../Test/baseResults/syntaxError.frag.out | 24 + .../glslang/Test/baseResults/test.conf | 92 + .../glslang/Test/baseResults/test.frag.out | 115 + .../glslang/Test/baseResults/texture.frag.out | 564 + .../Test/baseResults/tokenLength.vert.out | 220 + .../Test/baseResults/tokenPaste.vert.out | 119 + .../glslang/Test/baseResults/types.frag.out | 677 + .../glslang/Test/baseResults/uint.frag.out | 607 + .../Test/baseResults/uniformArray.frag.out | 97 + .../baseResults/variableArrayIndex.frag.out | 225 + .../Test/baseResults/varyingArray.frag.out | 118 + .../baseResults/varyingArrayIndirect.frag.out | 124 + .../Test/baseResults/versionsClean.frag.out | 44 + .../Test/baseResults/versionsClean.vert.out | 49 + .../Test/baseResults/versionsErrors.frag.out | 44 + .../Test/baseResults/versionsErrors.vert.out | 58 + .../Test/baseResults/voidFunction.frag.out | 91 + .../Test/baseResults/vulkan.ast.vert.out | 327 + .../glslang/Test/baseResults/vulkan.comp.out | 7 + .../glslang/Test/baseResults/vulkan.frag.out | 48 + .../glslang/Test/baseResults/vulkan.vert.out | 29 + .../Test/baseResults/whileLoop.frag.out | 65 + 3rdparty/bgfx/3rdparty/glslang/Test/bump | 2 + .../bgfx/3rdparty/glslang/Test/comment.frag | 19 + .../glslang/Test/conditionalDiscard.frag | 14 + .../3rdparty/glslang/Test/constErrors.frag | 35 + .../bgfx/3rdparty/glslang/Test/constFold.frag | 148 + .../3rdparty/glslang/Test/conversion.frag | 112 + .../bgfx/3rdparty/glslang/Test/cppBad.vert | 5 + .../bgfx/3rdparty/glslang/Test/cppBad2.vert | 3 + .../3rdparty/glslang/Test/cppComplexExpr.vert | 183 + .../bgfx/3rdparty/glslang/Test/cppIndent.vert | 61 + .../bgfx/3rdparty/glslang/Test/cppNest.vert | 177 + .../bgfx/3rdparty/glslang/Test/cppSimple.vert | 343 + .../bgfx/3rdparty/glslang/Test/dataOut.frag | 8 + .../glslang/Test/dataOutIndirect.frag | 10 + 3rdparty/bgfx/3rdparty/glslang/Test/dce.frag | 56 + .../bgfx/3rdparty/glslang/Test/decls.frag | 49 + .../3rdparty/glslang/Test/deepRvalue.frag | 36 + .../bgfx/3rdparty/glslang/Test/depthOut.frag | 10 + .../3rdparty/glslang/Test/discard-dce.frag | 35 + .../3rdparty/glslang/Test/doWhileLoop.frag | 16 + .../glslang/Test/earlyReturnDiscard.frag | 102 + .../bgfx/3rdparty/glslang/Test/empty.frag | 0 .../bgfx/3rdparty/glslang/Test/empty2.frag | 1 + .../bgfx/3rdparty/glslang/Test/empty3.frag | 1 + .../bgfx/3rdparty/glslang/Test/errors.frag | 4 + .../bgfx/3rdparty/glslang/Test/es-link1.frag | 8 + .../bgfx/3rdparty/glslang/Test/es-link2.frag | 8 + .../3rdparty/glslang/Test/flowControl.frag | 23 + .../bgfx/3rdparty/glslang/Test/forLoop.frag | 41 + .../3rdparty/glslang/Test/forwardRef.frag | 37 + .../3rdparty/glslang/Test/functionCall.frag | 44 + .../glslang/Test/functionSemantics.frag | 75 + .../3rdparty/glslang/Test/glslangValidator | 2 + .../glslang/Test/glspv.esversion.vert | 5 + .../bgfx/3rdparty/glslang/Test/glspv.frag | 14 + .../3rdparty/glslang/Test/glspv.version.frag | 5 + .../3rdparty/glslang/Test/glspv.version.vert | 5 + .../bgfx/3rdparty/glslang/Test/glspv.vert | 20 + .../3rdparty/glslang/Test/hlsl.amend.frag | 28 + .../glslang/Test/hlsl.array.flatten.frag | 38 + .../3rdparty/glslang/Test/hlsl.array.frag | 11 + .../Test/hlsl.array.implicit-size.frag | 32 + .../glslang/Test/hlsl.array.multidim.frag | 20 + .../3rdparty/glslang/Test/hlsl.assoc.frag | 11 + .../Test/hlsl.attribute.expression.comp | 15 + .../3rdparty/glslang/Test/hlsl.attribute.frag | 13 + .../3rdparty/glslang/Test/hlsl.basic.comp | 6 + .../3rdparty/glslang/Test/hlsl.basic.geom | 25 + .../3rdparty/glslang/Test/hlsl.buffer.frag | 32 + .../glslang/Test/hlsl.calculatelod.dx10.frag | 44 + .../Test/hlsl.calculatelodunclamped.dx10.frag | 44 + .../bgfx/3rdparty/glslang/Test/hlsl.cast.frag | 4 + .../glslang/Test/hlsl.comparison.vec.frag | 34 + .../glslang/Test/hlsl.conditional.frag | 16 + .../glslang/Test/hlsl.constructexpr.frag | 17 + .../Test/hlsl.deadFunctionMissingBody.vert | 8 + .../glslang/Test/hlsl.depthGreater.frag | 4 + .../3rdparty/glslang/Test/hlsl.depthLess.frag | 4 + .../3rdparty/glslang/Test/hlsl.discard.frag | 14 + .../3rdparty/glslang/Test/hlsl.doLoop.frag | 6 + .../glslang/Test/hlsl.emptystructreturn.frag | 13 + .../glslang/Test/hlsl.emptystructreturn.vert | 13 + .../3rdparty/glslang/Test/hlsl.entry-in.frag | 20 + .../3rdparty/glslang/Test/hlsl.entry-out.frag | 23 + .../glslang/Test/hlsl.entry.rename.frag | 15 + .../glslang/Test/hlsl.flatten.return.frag | 18 + .../3rdparty/glslang/Test/hlsl.float1.frag | 7 + .../3rdparty/glslang/Test/hlsl.float4.frag | 11 + .../3rdparty/glslang/Test/hlsl.forLoop.frag | 13 + 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.frag | 12 + .../glslang/Test/hlsl.gather.array.dx10.frag | 43 + .../glslang/Test/hlsl.gather.basic.dx10.frag | 48 + .../glslang/Test/hlsl.gather.basic.dx10.vert | 46 + .../glslang/Test/hlsl.gather.offset.dx10.frag | 44 + .../Test/hlsl.gather.offsetarray.dx10.frag | 36 + .../Test/hlsl.gatherRGBA.array.dx10.frag | 71 + .../Test/hlsl.gatherRGBA.basic.dx10.frag | 77 + .../Test/hlsl.gatherRGBA.offset.dx10.frag | 116 + .../hlsl.gatherRGBA.offsetarray.dx10.frag | 110 + .../Test/hlsl.gathercmpRGBA.array.dx10.frag | 70 + .../Test/hlsl.gathercmpRGBA.basic.dx10.frag | 76 + .../Test/hlsl.gathercmpRGBA.offset.dx10.frag | 118 + .../hlsl.gathercmpRGBA.offsetarray.dx10.frag | 109 + .../glslang/Test/hlsl.getdimensions.dx10.frag | 280 + .../glslang/Test/hlsl.getdimensions.dx10.vert | 27 + .../Test/hlsl.getdimensions.rw.dx10.frag | 96 + .../Test/hlsl.getsampleposition.dx10.frag | 23 + .../3rdparty/glslang/Test/hlsl.hull.1.tesc | 39 + .../3rdparty/glslang/Test/hlsl.hull.2.tesc | 39 + .../3rdparty/glslang/Test/hlsl.hull.void.tesc | 34 + .../glslang/Test/hlsl.identifier.sample.frag | 18 + .../bgfx/3rdparty/glslang/Test/hlsl.if.frag | 35 + .../bgfx/3rdparty/glslang/Test/hlsl.init.frag | 41 + .../3rdparty/glslang/Test/hlsl.init2.frag | 51 + .../glslang/Test/hlsl.inoutquals.frag | 25 + .../Test/hlsl.intrinsics.barriers.comp | 13 + .../glslang/Test/hlsl.intrinsics.comp | 129 + .../hlsl.intrinsics.d3dcolortoubyte4.frag | 7 + .../glslang/Test/hlsl.intrinsics.double.frag | 11 + .../glslang/Test/hlsl.intrinsics.evalfns.frag | 10 + .../glslang/Test/hlsl.intrinsics.f1632.frag | 29 + .../glslang/Test/hlsl.intrinsics.f3216.frag | 29 + .../glslang/Test/hlsl.intrinsics.frag | 493 + .../glslang/Test/hlsl.intrinsics.lit.frag | 4 + .../Test/hlsl.intrinsics.negative.comp | 201 + .../Test/hlsl.intrinsics.negative.frag | 136 + .../Test/hlsl.intrinsics.negative.vert | 247 + .../Test/hlsl.intrinsics.promote.down.frag | 22 + .../glslang/Test/hlsl.intrinsics.promote.frag | 79 + .../Test/hlsl.intrinsics.promote.outputs.frag | 49 + .../glslang/Test/hlsl.intrinsics.vert | 419 + .../3rdparty/glslang/Test/hlsl.layout.frag | 18 + .../glslang/Test/hlsl.load.2dms.dx10.frag | 56 + .../glslang/Test/hlsl.load.array.dx10.frag | 71 + .../glslang/Test/hlsl.load.basic.dx10.frag | 76 + .../glslang/Test/hlsl.load.basic.dx10.vert | 70 + .../glslang/Test/hlsl.load.buffer.dx10.frag | 38 + .../Test/hlsl.load.buffer.float.dx10.frag | 38 + .../glslang/Test/hlsl.load.offset.dx10.frag | 76 + .../Test/hlsl.load.offsetarray.dx10.frag | 69 + .../glslang/Test/hlsl.load.rwbuffer.dx10.frag | 32 + .../Test/hlsl.load.rwtexture.array.dx10.frag | 57 + .../Test/hlsl.load.rwtexture.dx10.frag | 62 + .../glslang/Test/hlsl.logical.binary.frag | 21 + .../glslang/Test/hlsl.logical.binary.vec.frag | 24 + .../glslang/Test/hlsl.logical.unary.frag | 29 + .../3rdparty/glslang/Test/hlsl.matNx1.frag | 31 + .../glslang/Test/hlsl.matType.bool.frag | 53 + .../3rdparty/glslang/Test/hlsl.matType.frag | 11 + .../glslang/Test/hlsl.matType.int.frag | 97 + .../glslang/Test/hlsl.matrixSwizzle.vert | 33 + .../glslang/Test/hlsl.matrixindex.frag | 49 + .../bgfx/3rdparty/glslang/Test/hlsl.max.frag | 4 + .../3rdparty/glslang/Test/hlsl.mintypes.frag | 49 + .../glslang/Test/hlsl.multiEntry.vert | 11 + .../glslang/Test/hlsl.multiReturn.frag | 19 + .../Test/hlsl.nonstaticMemberFunction.frag | 35 + .../glslang/Test/hlsl.numericsuffixes.frag | 24 + .../glslang/Test/hlsl.numthreads.comp | 14 + .../3rdparty/glslang/Test/hlsl.overload.frag | 142 + .../glslang/Test/hlsl.params.default.frag | 51 + .../Test/hlsl.params.default.negative.frag | 50 + .../glslang/Test/hlsl.partialInit.frag | 36 + .../3rdparty/glslang/Test/hlsl.pp.line.frag | 24 + .../glslang/Test/hlsl.pp.tokenpasting.frag | 18 + .../glslang/Test/hlsl.precedence.frag | 9 + .../glslang/Test/hlsl.precedence2.frag | 9 + .../3rdparty/glslang/Test/hlsl.precise.frag | 14 + .../glslang/Test/hlsl.promote.atomic.frag | 17 + .../glslang/Test/hlsl.promote.binary.frag | 28 + .../glslang/Test/hlsl.promote.vec1.frag | 16 + .../glslang/Test/hlsl.promotions.frag | 201 + .../glslang/Test/hlsl.reflection.binding.frag | 34 + .../glslang/Test/hlsl.reflection.vert | 165 + .../glslang/Test/hlsl.rw.atomics.frag | 244 + .../glslang/Test/hlsl.rw.bracket.frag | 140 + .../glslang/Test/hlsl.rw.register.frag | 18 + .../glslang/Test/hlsl.rw.scalar.bracket.frag | 140 + .../glslang/Test/hlsl.rw.swizzle.frag | 28 + .../glslang/Test/hlsl.rw.vec2.bracket.frag | 140 + .../glslang/Test/hlsl.sample.array.dx10.frag | 43 + .../glslang/Test/hlsl.sample.basic.dx10.frag | 90 + .../glslang/Test/hlsl.sample.offset.dx10.frag | 49 + .../Test/hlsl.sample.offsetarray.dx10.frag | 37 + .../Test/hlsl.sample.sub-vec4.dx10.frag | 24 + .../Test/hlsl.samplebias.array.dx10.frag | 43 + .../Test/hlsl.samplebias.basic.dx10.frag | 51 + .../Test/hlsl.samplebias.offset.dx10.frag | 49 + .../hlsl.samplebias.offsetarray.dx10.frag | 37 + .../Test/hlsl.samplecmp.array.dx10.frag | 60 + .../Test/hlsl.samplecmp.basic.dx10.frag | 61 + .../Test/hlsl.samplecmp.offset.dx10.frag | 66 + .../Test/hlsl.samplecmp.offsetarray.dx10.frag | 67 + .../hlsl.samplecmplevelzero.array.dx10.frag | 60 + .../hlsl.samplecmplevelzero.basic.dx10.frag | 61 + .../hlsl.samplecmplevelzero.offset.dx10.frag | 66 + ...l.samplecmplevelzero.offsetarray.dx10.frag | 67 + .../Test/hlsl.samplegrad.array.dx10.frag | 43 + .../Test/hlsl.samplegrad.basic.dx10.frag | 51 + .../Test/hlsl.samplegrad.basic.dx10.vert | 49 + .../Test/hlsl.samplegrad.offset.dx10.frag | 49 + .../hlsl.samplegrad.offsetarray.dx10.frag | 39 + .../Test/hlsl.samplelevel.array.dx10.frag | 43 + .../Test/hlsl.samplelevel.basic.dx10.frag | 52 + .../Test/hlsl.samplelevel.basic.dx10.vert | 49 + .../Test/hlsl.samplelevel.offset.dx10.frag | 49 + .../hlsl.samplelevel.offsetarray.dx10.frag | 37 + .../3rdparty/glslang/Test/hlsl.scope.frag | 30 + .../3rdparty/glslang/Test/hlsl.semantic.geom | 15 + .../3rdparty/glslang/Test/hlsl.semantic.vert | 15 + .../glslang/Test/hlsl.semicolons.frag | 19 + .../3rdparty/glslang/Test/hlsl.shapeConv.frag | 32 + .../glslang/Test/hlsl.shapeConvRet.frag | 9 + .../bgfx/3rdparty/glslang/Test/hlsl.sin.frag | 4 + .../Test/hlsl.staticMemberFunction.frag | 22 + .../3rdparty/glslang/Test/hlsl.string.frag | 12 + .../glslang/Test/hlsl.stringtoken.frag | 20 + .../3rdparty/glslang/Test/hlsl.struct.frag | 53 + .../glslang/Test/hlsl.struct.split-1.vert | 25 + .../glslang/Test/hlsl.struct.split.array.geom | 21 + .../Test/hlsl.struct.split.assign.frag | 12 + .../glslang/Test/hlsl.struct.split.call.vert | 32 + .../Test/hlsl.struct.split.nested.geom | 31 + .../Test/hlsl.struct.split.trivial.geom | 21 + .../Test/hlsl.struct.split.trivial.vert | 22 + .../glslang/Test/hlsl.structIoFourWay.frag | 18 + .../glslang/Test/hlsl.structStructName.frag | 7 + .../Test/hlsl.structarray.flatten.frag | 28 + .../Test/hlsl.structarray.flatten.geom | 23 + .../Test/hlsl.structbuffer.atomics.frag | 25 + .../glslang/Test/hlsl.structbuffer.byte.frag | 13 + .../Test/hlsl.structbuffer.coherent.frag | 23 + .../glslang/Test/hlsl.structbuffer.fn.frag | 24 + .../glslang/Test/hlsl.structbuffer.frag | 23 + .../glslang/Test/hlsl.structbuffer.rw.frag | 23 + .../Test/hlsl.structbuffer.rwbyte.frag | 15 + .../3rdparty/glslang/Test/hlsl.structin.vert | 14 + .../3rdparty/glslang/Test/hlsl.switch.frag | 55 + .../3rdparty/glslang/Test/hlsl.swizzle.frag | 6 + .../glslang/Test/hlsl.templatetypes.frag | 47 + .../Test/hlsl.templatetypes.negative.frag | 23 + .../bgfx/3rdparty/glslang/Test/hlsl.this.frag | 29 + .../glslang/Test/hlsl.tx.bracket.frag | 73 + .../3rdparty/glslang/Test/hlsl.type.half.frag | 11 + .../glslang/Test/hlsl.type.identifier.frag | 28 + .../glslang/Test/hlsl.typeGraphCopy.vert | 24 + .../3rdparty/glslang/Test/hlsl.typedef.frag | 11 + .../bgfx/3rdparty/glslang/Test/hlsl.void.frag | 9 + .../3rdparty/glslang/Test/hlsl.whileLoop.frag | 7 + .../bgfx/3rdparty/glslang/Test/length.frag | 18 + .../glslang/Test/lineContinuation.vert | 151 + .../glslang/Test/lineContinuation100.vert | 56 + .../bgfx/3rdparty/glslang/Test/link1.frag | 38 + .../bgfx/3rdparty/glslang/Test/link1.vk.frag | 10 + .../bgfx/3rdparty/glslang/Test/link2.frag | 36 + .../bgfx/3rdparty/glslang/Test/link2.vk.frag | 8 + .../bgfx/3rdparty/glslang/Test/link3.frag | 9 + .../glslang/Test/localAggregates.frag | 72 + .../bgfx/3rdparty/glslang/Test/loops.frag | 320 + .../glslang/Test/loopsArtificial.frag | 96 + .../bgfx/3rdparty/glslang/Test/mains.frag | 9 + .../bgfx/3rdparty/glslang/Test/mains1.frag | 5 + .../bgfx/3rdparty/glslang/Test/mains2.frag | 5 + 3rdparty/bgfx/3rdparty/glslang/Test/makeDoc | 3 + .../bgfx/3rdparty/glslang/Test/matrix.frag | 55 + .../bgfx/3rdparty/glslang/Test/matrix2.frag | 50 + .../3rdparty/glslang/Test/matrixError.vert | 22 + .../glslang/Test/maxClipDistances.vert | 7 + .../3rdparty/glslang/Test/max_vertices_0.geom | 12 + .../3rdparty/glslang/Test/missingBodies.vert | 24 + .../glslang/Test/negativeArraySize.comp | 10 + .../3rdparty/glslang/Test/newTexture.frag | 75 + .../bgfx/3rdparty/glslang/Test/noMain.vert | 5 + .../bgfx/3rdparty/glslang/Test/noMain1.geom | 7 + .../bgfx/3rdparty/glslang/Test/noMain2.geom | 7 + .../bgfx/3rdparty/glslang/Test/nonSquare.vert | 25 + .../bgfx/3rdparty/glslang/Test/nonVulkan.frag | 9 + 3rdparty/bgfx/3rdparty/glslang/Test/nosuffix | 4 + .../bgfx/3rdparty/glslang/Test/numeral.frag | 103 + .../3rdparty/glslang/Test/pointCoord.frag | 15 + .../bgfx/3rdparty/glslang/Test/precise.tesc | 109 + .../glslang/Test/precise_struct_block.vert | 89 + .../bgfx/3rdparty/glslang/Test/precision.frag | 76 + .../bgfx/3rdparty/glslang/Test/precision.vert | 25 + .../bgfx/3rdparty/glslang/Test/prepost.frag | 38 + .../Test/preprocessor.cpp_style___FILE__.vert | 36 + ...preprocessor.cpp_style_line_directive.vert | 36 + .../glslang/Test/preprocessor.defined.vert | 2 + .../glslang/Test/preprocessor.edge_cases.vert | 15 + .../Test/preprocessor.eof_missing.vert | 1 + .../glslang/Test/preprocessor.errors.vert | 20 + .../glslang/Test/preprocessor.extensions.vert | 12 + .../Test/preprocessor.function_macro.vert | 20 + .../Test/preprocessor.include.disabled.vert | 6 + .../Test/preprocessor.include.enabled.vert | 20 + .../glslang/Test/preprocessor.line.frag | 4 + .../glslang/Test/preprocessor.line.vert | 39 + .../glslang/Test/preprocessor.many.endif.vert | 10 + .../glslang/Test/preprocessor.pragma.vert | 11 + .../glslang/Test/preprocessor.simple.vert | 29 + ...processor.success_if_parse_would_fail.vert | 4 + .../bgfx/3rdparty/glslang/Test/recurse1.frag | 48 + .../bgfx/3rdparty/glslang/Test/recurse1.vert | 44 + .../bgfx/3rdparty/glslang/Test/recurse2.frag | 28 + .../3rdparty/glslang/Test/reflection.vert | 182 + .../glslang/Test/remap.basic.dcefunc.frag | 11 + .../glslang/Test/remap.basic.everything.frag | 11 + .../glslang/Test/remap.basic.none.frag | 11 + .../glslang/Test/remap.basic.strip.frag | 11 + .../remap.hlsl.sample.basic.everything.frag | 90 + .../Test/remap.hlsl.sample.basic.none.frag | 90 + .../Test/remap.hlsl.sample.basic.strip.frag | 90 + .../remap.hlsl.templatetypes.everything.frag | 47 + .../Test/remap.hlsl.templatetypes.none.frag | 47 + .../glslang/Test/remap.if.everything.frag | 12 + .../3rdparty/glslang/Test/remap.if.none.frag | 12 + .../Test/remap.literal64.everything.spv | Bin 0 -> 220 bytes .../glslang/Test/remap.literal64.none.spv | Bin 0 -> 220 bytes .../Test/remap.similar_1a.everything.frag | 29 + .../glslang/Test/remap.similar_1a.none.frag | 29 + .../Test/remap.similar_1b.everything.frag | 30 + .../glslang/Test/remap.similar_1b.none.frag | 30 + .../glslang/Test/remap.switch.everything.frag | 16 + .../glslang/Test/remap.switch.none.frag | 16 + .../Test/remap.uniformarray.everything.frag | 17 + .../glslang/Test/remap.uniformarray.none.frag | 17 + 3rdparty/bgfx/3rdparty/glslang/Test/runtests | 83 + .../bgfx/3rdparty/glslang/Test/sample.frag | 41 + .../3rdparty/glslang/Test/sample.frag.out | 15 + .../bgfx/3rdparty/glslang/Test/sample.vert | 43 + .../3rdparty/glslang/Test/sample.vert.out | 20 + .../glslang/Test/simpleFunctionCall.frag | 15 + .../3rdparty/glslang/Test/specExamples.frag | 237 + .../3rdparty/glslang/Test/specExamples.vert | 196 + .../3rdparty/glslang/Test/spv.100ops.frag | 27 + .../bgfx/3rdparty/glslang/Test/spv.130.frag | 93 + .../bgfx/3rdparty/glslang/Test/spv.140.frag | 46 + .../bgfx/3rdparty/glslang/Test/spv.150.geom | 39 + .../bgfx/3rdparty/glslang/Test/spv.150.vert | 38 + .../glslang/Test/spv.300BuiltIns.vert | 14 + .../3rdparty/glslang/Test/spv.300layout.frag | 22 + .../3rdparty/glslang/Test/spv.300layout.vert | 49 + .../3rdparty/glslang/Test/spv.300layoutp.vert | 49 + .../glslang/Test/spv.310.bitcast.frag | 41 + .../bgfx/3rdparty/glslang/Test/spv.310.comp | 40 + .../bgfx/3rdparty/glslang/Test/spv.330.geom | 26 + .../bgfx/3rdparty/glslang/Test/spv.400.frag | 265 + .../bgfx/3rdparty/glslang/Test/spv.400.tesc | 43 + .../bgfx/3rdparty/glslang/Test/spv.400.tese | 52 + .../bgfx/3rdparty/glslang/Test/spv.420.geom | 43 + .../bgfx/3rdparty/glslang/Test/spv.430.frag | 10 + .../bgfx/3rdparty/glslang/Test/spv.430.vert | 37 + .../bgfx/3rdparty/glslang/Test/spv.450.geom | 12 + .../glslang/Test/spv.450.noRedecl.tesc | 10 + .../bgfx/3rdparty/glslang/Test/spv.450.tesc | 32 + .../bgfx/3rdparty/glslang/Test/spv.AofA.frag | 43 + .../Test/spv.GeometryShaderPassthrough.geom | 17 + .../3rdparty/glslang/Test/spv.Operations.frag | 141 + .../glslang/Test/spv.accessChain.frag | 94 + .../3rdparty/glslang/Test/spv.aggOps.frag | 51 + .../glslang/Test/spv.always-discard.frag | 36 + .../glslang/Test/spv.always-discard2.frag | 19 + .../3rdparty/glslang/Test/spv.atomic.comp | 48 + .../3rdparty/glslang/Test/spv.bitCast.frag | 45 + .../bgfx/3rdparty/glslang/Test/spv.bool.vert | 17 + .../glslang/Test/spv.boolInBlock.frag | 31 + .../glslang/Test/spv.branch-return.vert | 10 + .../glslang/Test/spv.buffer.autoassign.frag | 28 + .../glslang/Test/spv.conditionalDiscard.frag | 14 + .../3rdparty/glslang/Test/spv.conversion.frag | 112 + .../3rdparty/glslang/Test/spv.dataOut.frag | 8 + .../glslang/Test/spv.dataOutIndirect.frag | 12 + .../glslang/Test/spv.dataOutIndirect.vert | 12 + .../3rdparty/glslang/Test/spv.deepRvalue.frag | 36 + .../3rdparty/glslang/Test/spv.depthOut.frag | 11 + .../glslang/Test/spv.deviceGroup.frag | 9 + .../glslang/Test/spv.discard-dce.frag | 35 + .../3rdparty/glslang/Test/spv.do-simple.vert | 7 + .../Test/spv.do-while-continue-break.vert | 20 + .../glslang/Test/spv.doWhileLoop.frag | 16 + .../3rdparty/glslang/Test/spv.double.comp | 25 + .../3rdparty/glslang/Test/spv.drawParams.vert | 13 + .../glslang/Test/spv.earlyReturnDiscard.frag | 102 + .../3rdparty/glslang/Test/spv.float16.frag | 306 + .../glslang/Test/spv.flowControl.frag | 23 + .../Test/spv.for-complex-condition.vert | 7 + .../glslang/Test/spv.for-continue-break.vert | 20 + .../3rdparty/glslang/Test/spv.for-nobody.vert | 7 + .../3rdparty/glslang/Test/spv.for-notest.vert | 6 + .../3rdparty/glslang/Test/spv.for-simple.vert | 8 + .../3rdparty/glslang/Test/spv.forLoop.frag | 41 + .../3rdparty/glslang/Test/spv.forwardFun.frag | 39 + .../glslang/Test/spv.functionCall.frag | 44 + .../Test/spv.functionNestedOpaque.vert | 26 + .../glslang/Test/spv.functionSemantics.frag | 63 + .../glslang/Test/spv.glFragColor.frag | 6 + .../Test/spv.glsl.register.autoassign.frag | 68 + .../Test/spv.glsl.register.noautoassign.frag | 68 + .../bgfx/3rdparty/glslang/Test/spv.image.frag | 93 + .../Test/spv.image.load-formatted.frag | 74 + .../bgfx/3rdparty/glslang/Test/spv.int64.frag | 264 + .../3rdparty/glslang/Test/spv.intOps.vert | 72 + .../3rdparty/glslang/Test/spv.interpOps.frag | 32 + .../glslang/Test/spv.layoutNested.vert | 76 + .../3rdparty/glslang/Test/spv.length.frag | 14 + .../glslang/Test/spv.localAggregates.frag | 72 + .../bgfx/3rdparty/glslang/Test/spv.loops.frag | 302 + .../glslang/Test/spv.loopsArtificial.frag | 67 + .../3rdparty/glslang/Test/spv.matFun.vert | 28 + .../3rdparty/glslang/Test/spv.matrix.frag | 49 + .../3rdparty/glslang/Test/spv.matrix2.frag | 50 + .../glslang/Test/spv.memoryQualifier.frag | 38 + .../glslang/Test/spv.merge-unreachable.frag | 8 + .../glslang/Test/spv.multiStruct.comp | 48 + .../glslang/Test/spv.multiStructFuncall.frag | 21 + .../3rdparty/glslang/Test/spv.multiView.frag | 9 + .../Test/spv.multiviewPerViewAttributes.tesc | 14 + .../Test/spv.multiviewPerViewAttributes.vert | 10 + .../3rdparty/glslang/Test/spv.newTexture.frag | 72 + .../glslang/Test/spv.noDeadDecorations.vert | 13 + .../glslang/Test/spv.noWorkgroup.comp | 7 + .../3rdparty/glslang/Test/spv.nonSquare.vert | 25 + .../3rdparty/glslang/Test/spv.offsets.frag | 17 + .../3rdparty/glslang/Test/spv.precise.tesc | 24 + .../3rdparty/glslang/Test/spv.precise.tese | 36 + .../3rdparty/glslang/Test/spv.precision.frag | 60 + .../3rdparty/glslang/Test/spv.prepost.frag | 38 + .../glslang/Test/spv.pushConstant.vert | 17 + .../glslang/Test/spv.pushConstantAnon.vert | 17 + .../3rdparty/glslang/Test/spv.qualifiers.vert | 19 + .../3rdparty/glslang/Test/spv.queryL.frag | 64 + .../Test/spv.register.autoassign-2.frag | 15 + .../glslang/Test/spv.register.autoassign.frag | 71 + .../spv.register.autoassign.rangetest.frag | 15 + .../Test/spv.register.noautoassign.frag | 71 + .../glslang/Test/spv.rw.autoassign.frag | 18 + .../Test/spv.sampleMaskOverrideCoverage.frag | 7 + .../3rdparty/glslang/Test/spv.separate.frag | 95 + .../bgfx/3rdparty/glslang/Test/spv.set.vert | 14 + .../glslang/Test/spv.shaderBallot.comp | 59 + .../glslang/Test/spv.shaderBallotAMD.comp | 165 + .../glslang/Test/spv.shaderDrawParams.vert | 16 + .../glslang/Test/spv.shaderGroupVote.comp | 21 + .../3rdparty/glslang/Test/spv.shiftOps.frag | 18 + .../glslang/Test/spv.shortCircuit.frag | 50 + .../glslang/Test/spv.simpleFunctionCall.frag | 13 + .../3rdparty/glslang/Test/spv.simpleMat.vert | 19 + .../glslang/Test/spv.sparseTexture.frag | 91 + .../glslang/Test/spv.sparseTextureClamp.frag | 70 + .../3rdparty/glslang/Test/spv.specConst.vert | 8 + .../glslang/Test/spv.specConstant.comp | 13 + .../glslang/Test/spv.specConstant.vert | 51 + .../Test/spv.specConstantComposite.vert | 98 + .../Test/spv.specConstantOperations.vert | 124 + .../glslang/Test/spv.ssbo.autoassign.frag | 24 + .../glslang/Test/spv.stereoViewRendering.tesc | 18 + .../glslang/Test/spv.stereoViewRendering.vert | 12 + .../glslang/Test/spv.structAssignment.frag | 41 + .../glslang/Test/spv.structDeref.frag | 71 + .../3rdparty/glslang/Test/spv.structure.frag | 31 + .../3rdparty/glslang/Test/spv.subpass.frag | 29 + .../3rdparty/glslang/Test/spv.switch.frag | 142 + .../3rdparty/glslang/Test/spv.swizzle.frag | 52 + .../glslang/Test/spv.swizzleInversion.frag | 16 + .../bgfx/3rdparty/glslang/Test/spv.test.frag | 22 + .../bgfx/3rdparty/glslang/Test/spv.test.vert | 14 + .../3rdparty/glslang/Test/spv.texture.frag | 73 + .../3rdparty/glslang/Test/spv.texture.vert | 39 + .../bgfx/3rdparty/glslang/Test/spv.types.frag | 78 + .../bgfx/3rdparty/glslang/Test/spv.uint.frag | 102 + .../glslang/Test/spv.uniformArray.frag | 17 + .../glslang/Test/spv.variableArrayIndex.frag | 49 + .../glslang/Test/spv.varyingArray.frag | 19 + .../Test/spv.varyingArrayIndirect.frag | 21 + .../glslang/Test/spv.viewportArray2.tesc | 16 + .../glslang/Test/spv.viewportArray2.vert | 10 + .../glslang/Test/spv.voidFunction.frag | 34 + .../Test/spv.while-continue-break.vert | 20 + .../glslang/Test/spv.while-simple.vert | 7 + .../3rdparty/glslang/Test/spv.whileLoop.frag | 16 + .../glslang/Test/structAssignment.frag | 39 + .../3rdparty/glslang/Test/structDeref.frag | 71 + .../bgfx/3rdparty/glslang/Test/structure.frag | 31 + .../bgfx/3rdparty/glslang/Test/switch.frag | 158 + .../bgfx/3rdparty/glslang/Test/swizzle.frag | 52 + .../3rdparty/glslang/Test/syntaxError.frag | 16 + 3rdparty/bgfx/3rdparty/glslang/Test/test.frag | 22 + .../bgfx/3rdparty/glslang/Test/texture.frag | 73 + .../3rdparty/glslang/Test/tokenLength.vert | 72 + .../3rdparty/glslang/Test/tokenPaste.vert | 82 + .../bgfx/3rdparty/glslang/Test/types.frag | 81 + 3rdparty/bgfx/3rdparty/glslang/Test/uint.frag | 105 + .../3rdparty/glslang/Test/uniformArray.frag | 16 + .../glslang/Test/variableArrayIndex.frag | 48 + .../3rdparty/glslang/Test/varyingArray.frag | 19 + .../glslang/Test/varyingArrayIndirect.frag | 21 + .../3rdparty/glslang/Test/versionsClean.frag | 45 + .../3rdparty/glslang/Test/versionsClean.vert | 43 + .../3rdparty/glslang/Test/versionsErrors.frag | 46 + .../3rdparty/glslang/Test/versionsErrors.vert | 46 + .../3rdparty/glslang/Test/voidFunction.frag | 34 + .../3rdparty/glslang/Test/vulkan.ast.vert | 42 + .../bgfx/3rdparty/glslang/Test/vulkan.comp | 12 + .../bgfx/3rdparty/glslang/Test/vulkan.frag | 97 + .../bgfx/3rdparty/glslang/Test/vulkan.vert | 47 + .../bgfx/3rdparty/glslang/Test/whileLoop.frag | 16 + .../3rdparty/glslang/glslang/CMakeLists.txt | 104 + .../glslang/GenericCodeGen/CodeGen.cpp | 76 + .../glslang/glslang/GenericCodeGen/Link.cpp | 91 + .../glslang/glslang/Include/BaseTypes.h | 368 + .../3rdparty/glslang/glslang/Include/Common.h | 266 + .../glslang/glslang/Include/ConstantUnion.h | 625 + .../glslang/glslang/Include/InfoSink.h | 144 + .../glslang/Include/InitializeGlobals.h | 47 + .../glslang/glslang/Include/PoolAlloc.h | 324 + .../glslang/glslang/Include/ResourceLimits.h | 140 + .../glslang/glslang/Include/ShHandle.h | 173 + .../3rdparty/glslang/glslang/Include/Types.h | 1951 +++ .../3rdparty/glslang/glslang/Include/arrays.h | 318 + .../glslang/glslang/Include/intermediate.h | 1263 ++ .../glslang/glslang/Include/revision.h | 6 + .../glslang/glslang/Include/revision.template | 13 + .../glslang/MachineIndependent/Constant.cpp | 995 ++ .../glslang/MachineIndependent/InfoSink.cpp | 113 + .../glslang/MachineIndependent/Initialize.cpp | 5850 +++++++ .../glslang/MachineIndependent/Initialize.h | 112 + .../MachineIndependent/IntermTraverse.cpp | 302 + .../MachineIndependent/Intermediate.cpp | 2670 ++++ .../MachineIndependent/LiveTraverser.h | 136 + .../MachineIndependent/ParseContextBase.cpp | 583 + .../MachineIndependent/ParseHelper.cpp | 6277 ++++++++ .../glslang/MachineIndependent/ParseHelper.h | 457 + .../glslang/MachineIndependent/PoolAlloc.cpp | 345 + .../glslang/MachineIndependent/RemoveTree.cpp | 118 + .../glslang/MachineIndependent/RemoveTree.h | 39 + .../glslang/MachineIndependent/Scan.cpp | 1399 ++ .../glslang/glslang/MachineIndependent/Scan.h | 275 + .../glslang/MachineIndependent/ScanContext.h | 86 + .../glslang/MachineIndependent/ShaderLang.cpp | 1812 +++ .../MachineIndependent/SymbolTable.cpp | 362 + .../glslang/MachineIndependent/SymbolTable.h | 813 + .../glslang/MachineIndependent/Versions.cpp | 757 + .../glslang/MachineIndependent/Versions.h | 224 + .../glslang/MachineIndependent/gl_types.h | 178 + .../glslang/MachineIndependent/glslang.y | 2833 ++++ .../MachineIndependent/glslang_tab.cpp | 8320 ++++++++++ .../MachineIndependent/glslang_tab.cpp.h | 400 + .../glslang/MachineIndependent/intermOut.cpp | 950 ++ .../glslang/MachineIndependent/iomapper.cpp | 535 + .../glslang/MachineIndependent/iomapper.h | 63 + .../glslang/MachineIndependent/limits.cpp | 198 + .../MachineIndependent/linkValidate.cpp | 1220 ++ .../MachineIndependent/localintermediate.h | 519 + .../glslang/MachineIndependent/parseConst.cpp | 210 + .../MachineIndependent/parseVersions.h | 138 + .../MachineIndependent/preprocessor/Pp.cpp | 1243 ++ .../preprocessor/PpAtom.cpp | 179 + .../preprocessor/PpContext.cpp | 115 + .../preprocessor/PpContext.h | 614 + .../preprocessor/PpMemory.cpp | 81 + .../preprocessor/PpScanner.cpp | 868 ++ .../preprocessor/PpSymbols.cpp | 77 + .../preprocessor/PpTokens.cpp | 349 + .../preprocessor/PpTokens.h | 177 + .../propagateNoContraction.cpp | 866 ++ .../propagateNoContraction.h | 53 + .../glslang/MachineIndependent/reflection.cpp | 768 + .../glslang/MachineIndependent/reflection.h | 168 + .../glslang/OSDependent/Unix/CMakeLists.txt | 5 + .../glslang/OSDependent/Unix/ossource.cpp | 205 + .../OSDependent/Windows/CMakeLists.txt | 17 + .../glslang/OSDependent/Windows/main.cpp | 74 + .../glslang/OSDependent/Windows/ossource.cpp | 162 + .../glslang/glslang/OSDependent/osinclude.h | 66 + .../glslang/glslang/Public/ShaderLang.h | 557 + .../3rdparty/glslang/glslang/updateGrammar | 3 + .../3rdparty/glslang/gtests/AST.FromFile.cpp | 201 + .../gtests/BuiltInResource.FromFile.cpp | 57 + .../3rdparty/glslang/gtests/CMakeLists.txt | 55 + .../glslang/gtests/Config.FromFile.cpp | 107 + .../bgfx/3rdparty/glslang/gtests/HexFloat.cpp | 1231 ++ .../3rdparty/glslang/gtests/Hlsl.FromFile.cpp | 279 + .../3rdparty/glslang/gtests/Initializer.h | 55 + .../glslang/gtests/Link.FromFile.Vk.cpp | 97 + .../3rdparty/glslang/gtests/Link.FromFile.cpp | 108 + .../3rdparty/glslang/gtests/Pp.FromFile.cpp | 75 + .../bgfx/3rdparty/glslang/gtests/README.md | 26 + .../glslang/gtests/Remap.FromFile.cpp | 117 + .../bgfx/3rdparty/glslang/gtests/Settings.cpp | 51 + .../bgfx/3rdparty/glslang/gtests/Settings.h | 58 + .../3rdparty/glslang/gtests/Spv.FromFile.cpp | 411 + .../3rdparty/glslang/gtests/TestFixture.cpp | 162 + .../3rdparty/glslang/gtests/TestFixture.h | 578 + .../bgfx/3rdparty/glslang/gtests/main.cpp | 74 + .../bgfx/3rdparty/glslang/hlsl/CMakeLists.txt | 28 + .../3rdparty/glslang/hlsl/hlslAttributes.cpp | 110 + .../3rdparty/glslang/hlsl/hlslAttributes.h | 108 + .../3rdparty/glslang/hlsl/hlslGrammar.cpp | 3620 +++++ .../bgfx/3rdparty/glslang/hlsl/hlslGrammar.h | 135 + .../bgfx/3rdparty/glslang/hlsl/hlslOpMap.cpp | 173 + .../bgfx/3rdparty/glslang/hlsl/hlslOpMap.h | 69 + .../3rdparty/glslang/hlsl/hlslParseHelper.cpp | 7637 +++++++++ .../3rdparty/glslang/hlsl/hlslParseHelper.h | 413 + .../3rdparty/glslang/hlsl/hlslParseables.cpp | 1223 ++ .../3rdparty/glslang/hlsl/hlslParseables.h | 64 + .../3rdparty/glslang/hlsl/hlslScanContext.cpp | 903 ++ .../3rdparty/glslang/hlsl/hlslScanContext.h | 109 + .../3rdparty/glslang/hlsl/hlslTokenStream.cpp | 150 + .../3rdparty/glslang/hlsl/hlslTokenStream.h | 96 + .../bgfx/3rdparty/glslang/hlsl/hlslTokens.h | 351 + 3rdparty/bgfx/3rdparty/glslang/make-revision | 10 + .../GenerateIconFontCppHeaders.py | 404 +- .../bgfx/3rdparty/iconfontheaders/README.md | 38 +- .../iconfontheaders/icons_font_awesome.h | 77 +- .../3rdparty/iconfontheaders/icons_kenney.h | 3 +- .../iconfontheaders/icons_material_design.h | 3 +- 3rdparty/bgfx/3rdparty/nvtt/nvtt.cpp | 2 +- .../bgfx/3rdparty/ocornut-imgui/imgui.cpp | 194 +- 3rdparty/bgfx/3rdparty/ocornut-imgui/imgui.h | 28 +- .../3rdparty/ocornut-imgui/imgui_demo.cpp | 33 +- .../3rdparty/ocornut-imgui/imgui_draw.cpp | 4 +- .../3rdparty/ocornut-imgui/imgui_internal.h | 13 +- .../bgfx/3rdparty/ocornut-imgui/imgui_user.h | 6 +- .../3rdparty/ocornut-imgui/imgui_user.inl | 7 +- .../ocornut-imgui/widgets/color_picker.h | 24 + .../ocornut-imgui/widgets/color_picker.inl | 122 + .../3rdparty/ocornut-imgui/widgets/gizmo.h | 4 +- .../3rdparty/ocornut-imgui/widgets/gizmo.inl | 275 +- .../ocornut-imgui/widgets/range_slider.h | 5 + .../ocornut-imgui/widgets/range_slider.inl | 210 + .../bgfx/3rdparty/remotery/lib/Remotery.c | 1529 +- .../bgfx/3rdparty/remotery/lib/Remotery.h | 63 +- 3rdparty/bgfx/3rdparty/remotery/readme.md | 23 +- .../3rdparty/remotery/vis/Code/Console.js | 8 +- .../3rdparty/remotery/vis/Code/Remotery.js | 117 +- .../remotery/vis/Code/SampleWindow.js | 34 +- .../3rdparty/remotery/vis/Code/TimelineRow.js | 5 +- .../remotery/vis/Code/WebSocketConnection.js | 17 +- .../bgfx/3rdparty/remotery/vis/index.html | 1 + .../bgfx/3rdparty/renderdoc/renderdoc_app.h | 2 +- 3rdparty/bgfx/3rdparty/tinyexr/tinyexr.h | 7394 +++++---- 3rdparty/bgfx/CMakeLists.txt | 3 +- 3rdparty/bgfx/LICENSE | 2 +- 3rdparty/bgfx/README.md | 83 +- 3rdparty/bgfx/examples/common/aviwriter.h | 2 +- 3rdparty/bgfx/examples/common/bgfx_utils.cpp | 218 +- 3rdparty/bgfx/examples/common/bgfx_utils.h | 42 +- 3rdparty/bgfx/examples/common/bounds.cpp | 104 +- 3rdparty/bgfx/examples/common/bounds.h | 24 +- 3rdparty/bgfx/examples/common/camera.cpp | 28 +- 3rdparty/bgfx/examples/common/common.h | 2 +- 3rdparty/bgfx/examples/common/common.sh | 2 +- 3rdparty/bgfx/examples/common/cube_atlas.cpp | 15 +- .../examples/common/debugdraw/debugdraw.cpp | 490 +- .../examples/common/debugdraw/debugdraw.h | 26 +- .../common/debugdraw/fs_debugdraw_fill.bin.h | 203 +- .../common/debugdraw/fs_debugdraw_fill.sc | 2 +- .../debugdraw/fs_debugdraw_fill_lit.bin.h | 403 +- .../common/debugdraw/fs_debugdraw_fill_lit.sc | 2 +- .../common/debugdraw/fs_debugdraw_lines.bin.h | 147 +- .../common/debugdraw/fs_debugdraw_lines.sc | 4 +- .../fs_debugdraw_lines_stipple.bin.h | 240 +- .../debugdraw/fs_debugdraw_lines_stipple.sc | 4 +- .../bgfx/examples/common/debugdraw/makefile | 4 +- .../examples/common/debugdraw/varying.def.sc | 3 +- .../common/debugdraw/vs_debugdraw_fill.bin.h | 297 +- .../common/debugdraw/vs_debugdraw_fill.sc | 2 +- .../debugdraw/vs_debugdraw_fill_lit.bin.h | 366 +- .../common/debugdraw/vs_debugdraw_fill_lit.sc | 2 +- .../common/debugdraw/vs_debugdraw_lines.bin.h | 287 +- .../common/debugdraw/vs_debugdraw_lines.sc | 4 +- .../vs_debugdraw_lines_stipple.bin.h | 385 +- .../debugdraw/vs_debugdraw_lines_stipple.sc | 8 +- 3rdparty/bgfx/examples/common/entry/cmd.cpp | 13 +- 3rdparty/bgfx/examples/common/entry/cmd.h | 2 +- 3rdparty/bgfx/examples/common/entry/dbg.h | 11 +- 3rdparty/bgfx/examples/common/entry/entry.cpp | 92 +- 3rdparty/bgfx/examples/common/entry/entry.h | 33 +- .../examples/common/entry/entry_android.cpp | 6 +- .../examples/common/entry/entry_asmjs.cpp | 4 +- .../bgfx/examples/common/entry/entry_glfw.cpp | 59 +- .../bgfx/examples/common/entry/entry_ios.mm | 4 +- .../bgfx/examples/common/entry/entry_nacl.cpp | 9 +- .../bgfx/examples/common/entry/entry_noop.cpp | 2 +- .../bgfx/examples/common/entry/entry_osx.mm | 11 +- 3rdparty/bgfx/examples/common/entry/entry_p.h | 9 +- .../bgfx/examples/common/entry/entry_sdl.cpp | 31 +- .../examples/common/entry/entry_windows.cpp | 53 +- .../bgfx/examples/common/entry/entry_winrt.cx | 3 +- .../bgfx/examples/common/entry/entry_x11.cpp | 45 +- 3rdparty/bgfx/examples/common/entry/input.cpp | 14 +- 3rdparty/bgfx/examples/common/entry/input.h | 20 +- .../examples/common/font/font_manager.cpp | 16 +- .../examples/common/font/fs_font_basic.bin.h | 414 +- .../common/font/fs_font_distance_field.bin.h | 539 +- .../fs_font_distance_field_subpixel.bin.h | 600 +- 3rdparty/bgfx/examples/common/font/makefile | 4 +- .../common/font/text_buffer_manager.cpp | 92 +- .../examples/common/font/text_metrics.cpp | 13 +- .../bgfx/examples/common/font/text_metrics.h | 3 + .../examples/common/font/vs_font_basic.bin.h | 231 +- .../common/font/vs_font_distance_field.bin.h | 231 +- .../vs_font_distance_field_subpixel.bin.h | 231 +- .../common/imgui/fs_imgui_color.bin.h | 149 +- .../examples/common/imgui/fs_imgui_color.sc | 2 +- .../common/imgui/fs_imgui_cubemap.bin.h | 329 +- .../examples/common/imgui/fs_imgui_cubemap.sc | 2 +- .../common/imgui/fs_imgui_image.bin.h | 331 +- .../common/imgui/fs_imgui_image_swizz.bin.h | 382 +- .../common/imgui/fs_imgui_latlong.bin.h | 434 +- .../common/imgui/fs_imgui_texture.bin.h | 317 +- .../examples/common/imgui/fs_imgui_texture.sc | 2 +- .../common/imgui/fs_ocornut_imgui.bin.h | 286 +- .../common/imgui/icons_font_awesome.ttf.h | 12790 +++++++++++----- 3rdparty/bgfx/examples/common/imgui/imgui.cpp | 128 +- 3rdparty/bgfx/examples/common/imgui/imgui.h | 2 +- 3rdparty/bgfx/examples/common/imgui/makefile | 4 +- .../examples/common/imgui/ocornut_imgui.cpp | 93 +- .../bgfx/examples/common/imgui/scintilla.cpp | 2 +- .../bgfx/examples/common/imgui/scintilla.h | 2 +- .../common/imgui/vs_imgui_color.bin.h | 204 +- .../examples/common/imgui/vs_imgui_color.sc | 2 +- .../common/imgui/vs_imgui_cubemap.bin.h | 206 +- .../examples/common/imgui/vs_imgui_cubemap.sc | 2 +- .../common/imgui/vs_imgui_image.bin.h | 206 +- .../common/imgui/vs_imgui_latlong.bin.h | 206 +- .../common/imgui/vs_imgui_texture.bin.h | 238 +- .../examples/common/imgui/vs_imgui_texture.sc | 2 +- .../common/imgui/vs_ocornut_imgui.bin.h | 255 +- .../bgfx/examples/common/nanovg/fontstash.h | 22 +- .../common/nanovg/fs_nanovg_fill.bin.h | 1162 +- 3rdparty/bgfx/examples/common/nanovg/makefile | 4 +- .../bgfx/examples/common/nanovg/nanovg.cpp | 84 +- 3rdparty/bgfx/examples/common/nanovg/nanovg.h | 16 +- .../examples/common/nanovg/nanovg_bgfx.cpp | 183 +- .../bgfx/examples/common/nanovg/nanovg_bgfx.h | 5 +- .../common/nanovg/vs_nanovg_fill.bin.h | 253 +- 3rdparty/bgfx/examples/common/packrect.h | 4 +- 3rdparty/bgfx/examples/common/shaderlib.sh | 2 +- 3rdparty/bgfx/examples/makefile | 8 +- 3rdparty/bgfx/include/bgfx/bgfx.h | 341 +- 3rdparty/bgfx/include/bgfx/c99/bgfx.h | 54 +- 3rdparty/bgfx/include/bgfx/c99/platform.h | 207 + 3rdparty/bgfx/include/bgfx/defines.h | 444 + 3rdparty/bgfx/include/bgfx/embedded_shader.h | 139 + 3rdparty/bgfx/include/bgfx/platform.h | 149 + 3rdparty/bgfx/makefile | 20 +- 3rdparty/bgfx/scripts/bgfx.lua | 15 +- 3rdparty/bgfx/scripts/example-common.lua | 2 +- 3rdparty/bgfx/scripts/genie.lua | 16 +- 3rdparty/bgfx/scripts/geometryc.lua | 6 +- 3rdparty/bgfx/scripts/shader-embeded.mk | 16 +- 3rdparty/bgfx/scripts/shader.mk | 15 +- 3rdparty/bgfx/scripts/shaderc.lua | 298 +- 3rdparty/bgfx/scripts/texturec.lua | 12 +- 3rdparty/bgfx/scripts/texturev.lua | 2 +- 3rdparty/bgfx/scripts/tools.mk | 4 +- 3rdparty/bgfx/src/amalgamated.cpp | 2 +- 3rdparty/bgfx/src/amalgamated.mm | 2 +- 3rdparty/bgfx/src/bgfx.cpp | 664 +- 3rdparty/bgfx/src/bgfx_compute.sh | 40 +- 3rdparty/bgfx/src/bgfx_p.h | 337 +- 3rdparty/bgfx/src/bgfx_shader.sh | 22 +- 3rdparty/bgfx/src/charset.h | 2 +- 3rdparty/bgfx/src/config.h | 8 +- 3rdparty/bgfx/src/debug_renderdoc.cpp | 4 +- 3rdparty/bgfx/src/debug_renderdoc.h | 2 +- 3rdparty/bgfx/src/fs_clear0.sc | 2 +- 3rdparty/bgfx/src/fs_clear1.sc | 2 +- 3rdparty/bgfx/src/fs_clear2.sc | 2 +- 3rdparty/bgfx/src/fs_clear3.sc | 2 +- 3rdparty/bgfx/src/fs_clear4.sc | 2 +- 3rdparty/bgfx/src/fs_clear5.sc | 2 +- 3rdparty/bgfx/src/fs_clear6.sc | 2 +- 3rdparty/bgfx/src/fs_clear7.sc | 2 +- 3rdparty/bgfx/src/fs_debugfont.sc | 2 +- 3rdparty/bgfx/src/glcontext_eagl.h | 2 +- 3rdparty/bgfx/src/glcontext_eagl.mm | 5 +- 3rdparty/bgfx/src/glcontext_egl.cpp | 11 +- 3rdparty/bgfx/src/glcontext_egl.h | 2 +- 3rdparty/bgfx/src/glcontext_glx.cpp | 5 +- 3rdparty/bgfx/src/glcontext_glx.h | 2 +- 3rdparty/bgfx/src/glcontext_nsgl.h | 2 +- 3rdparty/bgfx/src/glcontext_nsgl.mm | 48 +- 3rdparty/bgfx/src/glcontext_ppapi.cpp | 4 +- 3rdparty/bgfx/src/glcontext_ppapi.h | 2 +- 3rdparty/bgfx/src/glcontext_wgl.cpp | 7 +- 3rdparty/bgfx/src/glcontext_wgl.h | 2 +- 3rdparty/bgfx/src/glimports.h | 2 +- 3rdparty/bgfx/src/hmd.cpp | 18 +- 3rdparty/bgfx/src/hmd.h | 7 +- 3rdparty/bgfx/src/hmd_openvr.cpp | 2 +- 3rdparty/bgfx/src/hmd_openvr.h | 2 +- 3rdparty/bgfx/src/hmd_ovr.cpp | 21 +- 3rdparty/bgfx/src/hmd_ovr.h | 4 +- 3rdparty/bgfx/src/image.cpp | 1570 +- 3rdparty/bgfx/src/image.h | 339 +- 3rdparty/bgfx/src/makefile | 6 +- 3rdparty/bgfx/src/renderer.h | 98 +- 3rdparty/bgfx/src/renderer_d3d.h | 46 +- 3rdparty/bgfx/src/renderer_d3d11.cpp | 557 +- 3rdparty/bgfx/src/renderer_d3d11.h | 9 +- 3rdparty/bgfx/src/renderer_d3d12.cpp | 244 +- 3rdparty/bgfx/src/renderer_d3d12.h | 16 +- 3rdparty/bgfx/src/renderer_d3d9.cpp | 194 +- 3rdparty/bgfx/src/renderer_d3d9.h | 13 +- 3rdparty/bgfx/src/renderer_gl.cpp | 827 +- 3rdparty/bgfx/src/renderer_gl.h | 34 +- 3rdparty/bgfx/src/renderer_gnm.cpp | 2 +- 3rdparty/bgfx/src/renderer_mtl.h | 40 +- 3rdparty/bgfx/src/renderer_mtl.mm | 365 +- 3rdparty/bgfx/src/renderer_noop.cpp | 8 +- 3rdparty/bgfx/src/renderer_vk.cpp | 4639 +++++- 3rdparty/bgfx/src/renderer_vk.h | 449 + 3rdparty/bgfx/src/shader.cpp | 12 +- 3rdparty/bgfx/src/shader.h | 2 +- 3rdparty/bgfx/src/shader_dx9bc.cpp | 4 +- 3rdparty/bgfx/src/shader_dx9bc.h | 2 +- 3rdparty/bgfx/src/shader_dxbc.cpp | 14 +- 3rdparty/bgfx/src/shader_dxbc.h | 2 +- 3rdparty/bgfx/src/shader_spirv.cpp | 8 +- 3rdparty/bgfx/src/shader_spirv.h | 4 +- 3rdparty/bgfx/src/topology.cpp | 4 +- 3rdparty/bgfx/src/topology.h | 2 +- 3rdparty/bgfx/src/vertexdecl.cpp | 75 +- 3rdparty/bgfx/src/vertexdecl.h | 2 +- 3rdparty/bgfx/src/vs_clear.sc | 2 +- 3rdparty/bgfx/src/vs_debugfont.sc | 2 +- 3rdparty/bgfx/tools/geometryc/geometryc.cpp | 7 +- 3rdparty/bgfx/tools/shaderc/shaderc.cpp | 136 +- 3rdparty/bgfx/tools/shaderc/shaderc.h | 2 +- 3rdparty/bgfx/tools/shaderc/shaderc_glsl.cpp | 25 +- 3rdparty/bgfx/tools/shaderc/shaderc_hlsl.cpp | 14 +- 3rdparty/bgfx/tools/shaderc/shaderc_pssl.cpp | 2 +- 3rdparty/bgfx/tools/shaderc/shaderc_spirv.cpp | 770 +- 3rdparty/bgfx/tools/texturec/texturec.cpp | 159 +- 3rdparty/bgfx/tools/texturev/fs_texture.sc | 4 +- .../tools/texturev/fs_texture_array.bin.h | 11 +- .../bgfx/tools/texturev/fs_texture_array.sc | 4 +- .../bgfx/tools/texturev/fs_texture_cube.sc | 4 +- 3rdparty/bgfx/tools/texturev/makefile | 4 +- 3rdparty/bgfx/tools/texturev/texturev.cpp | 121 +- 3rdparty/bgfx/tools/texturev/vs_texture.sc | 4 +- .../bgfx/tools/texturev/vs_texture_cube.sc | 4 +- 3rdparty/bx/3rdparty/catch/catch.hpp | 1566 +- 3rdparty/bx/LICENSE | 2 +- 3rdparty/bx/README.md | 2 +- 3rdparty/bx/include/bx/allocator.h | 152 +- 3rdparty/bx/include/bx/bx.h | 105 +- 3rdparty/bx/include/bx/commandline.h | 207 +- 3rdparty/bx/include/bx/config.h | 33 +- 3rdparty/bx/include/bx/cpu.h | 2 +- 3rdparty/bx/include/bx/crtimpl.h | 334 +- 3rdparty/bx/include/bx/debug.h | 72 +- 3rdparty/bx/include/bx/easing.h | 198 + 3rdparty/bx/include/bx/endian.h | 75 +- 3rdparty/bx/include/bx/error.h | 71 +- 3rdparty/bx/include/bx/float4x4_t.h | 8 +- 3rdparty/bx/include/bx/fpumath.h | 1727 +-- 3rdparty/bx/include/bx/handlealloc.h | 715 +- 3rdparty/bx/include/bx/hash.h | 170 +- 3rdparty/bx/include/bx/inline/allocator.inl | 104 + 3rdparty/bx/include/bx/inline/bx.inl | 35 + 3rdparty/bx/include/bx/inline/easing.inl | 256 + 3rdparty/bx/include/bx/inline/endian.inl | 78 + 3rdparty/bx/include/bx/inline/error.inl | 73 + 3rdparty/bx/include/bx/inline/fpumath.inl | 1352 ++ 3rdparty/bx/include/bx/inline/handlealloc.inl | 708 + 3rdparty/bx/include/bx/inline/hash.inl | 164 + 3rdparty/bx/include/bx/inline/mpscqueue.inl | 65 + 3rdparty/bx/include/bx/inline/mutex.inl | 23 + 3rdparty/bx/include/bx/inline/pixelformat.inl | 945 ++ .../bx/include/bx/inline/readerwriter.inl | 452 + 3rdparty/bx/include/bx/inline/ringbuffer.inl | 275 + 3rdparty/bx/include/bx/inline/rng.inl | 167 + .../bx/include/bx/inline/simd128_langext.inl | 515 + .../bx/include/bx/inline/simd128_neon.inl | 562 + 3rdparty/bx/include/bx/inline/simd128_ref.inl | 648 + 3rdparty/bx/include/bx/inline/simd128_sse.inl | 647 + .../bx/include/bx/inline/simd128_swizzle.inl | 266 + 3rdparty/bx/include/bx/inline/simd256_avx.inl | 77 + 3rdparty/bx/include/bx/inline/simd256_ref.inl | 87 + 3rdparty/bx/include/bx/inline/simd_ni.inl | 558 + 3rdparty/bx/include/bx/inline/sort.inl | 288 + 3rdparty/bx/include/bx/inline/spscqueue.inl | 158 + 3rdparty/bx/include/bx/inline/string.inl | 190 + 3rdparty/bx/include/bx/inline/uint32_t.inl | 781 + 3rdparty/bx/include/bx/macros.h | 8 +- 3rdparty/bx/include/bx/maputil.h | 2 +- 3rdparty/bx/include/bx/mpscqueue.h | 70 +- 3rdparty/bx/include/bx/mutex.h | 126 +- 3rdparty/bx/include/bx/os.h | 366 +- 3rdparty/bx/include/bx/pixelformat.h | 243 + 3rdparty/bx/include/bx/platform.h | 181 +- 3rdparty/bx/include/bx/readerwriter.h | 582 +- 3rdparty/bx/include/bx/ringbuffer.h | 301 +- 3rdparty/bx/include/bx/rng.h | 161 +- 3rdparty/bx/include/bx/semaphore.h | 40 + 3rdparty/bx/include/bx/simd_t.h | 27 +- 3rdparty/bx/include/bx/sort.h | 62 + 3rdparty/bx/include/bx/spscqueue.h | 206 +- 3rdparty/bx/include/bx/string.h | 837 +- 3rdparty/bx/include/bx/thread.h | 297 +- 3rdparty/bx/include/bx/timer.h | 51 +- 3rdparty/bx/include/bx/uint32_t.h | 839 +- 3rdparty/bx/makefile | 4 +- 3rdparty/bx/scripts/bin2c.lua | 12 +- 3rdparty/bx/scripts/bx.lua | 53 +- 3rdparty/bx/scripts/genie.lua | 26 +- 3rdparty/bx/scripts/toolchain.lua | 219 +- 3rdparty/bx/src/amalgamated.cpp | 19 + 3rdparty/bx/src/bx.cpp | 146 + 3rdparty/bx/src/commandline.cpp | 322 + 3rdparty/bx/src/crtimpl.cpp | 361 + 3rdparty/bx/src/crtnone.cpp | 590 + 3rdparty/bx/src/debug.cpp | 145 + 3rdparty/bx/src/dtoa.cpp | 560 + 3rdparty/bx/src/fpumath.cpp | 166 + 3rdparty/bx/src/mutex.cpp | 102 + 3rdparty/bx/src/os.cpp | 459 + 3rdparty/bx/src/semaphore.cpp | 282 + 3rdparty/bx/src/sort.cpp | 55 + 3rdparty/bx/src/string.cpp | 929 ++ 3rdparty/bx/src/thread.cpp | 330 + 3rdparty/bx/src/timer.cpp | 60 + 3rdparty/bx/tests/dbg.h | 11 +- 3rdparty/bx/tests/fpumath_test.cpp | 24 +- 3rdparty/bx/tests/handle_bench.cpp | 21 +- 3rdparty/bx/tests/handle_test.cpp | 4 +- 3rdparty/bx/tests/macros_test.cpp | 16 +- 3rdparty/bx/tests/main_test.cpp | 9 +- 3rdparty/bx/tests/simd_test.cpp | 48 +- 3rdparty/bx/tests/string_test.cpp | 176 +- 3rdparty/bx/tests/test.h | 11 +- 3rdparty/bx/tests/thread_test.cpp | 18 +- 3rdparty/bx/tests/tokenizecmd_test.cpp | 102 +- 3rdparty/bx/tests/uint32_test.cpp | 67 +- 3rdparty/bx/tests/vector_complex_test.cpp | 8 +- 3rdparty/bx/tools/bin/darwin/genie | Bin 520448 -> 496056 bytes 3rdparty/bx/tools/bin/linux/genie | Bin 499376 -> 478872 bytes 3rdparty/bx/tools/bin/windows/genie.exe | Bin 504832 -> 485888 bytes 3rdparty/bx/tools/bin2c/bin2c.cpp | 8 +- src/modules/RenderModule.cc | 16 +- src/modules/RenderModule.h | 12 +- src/shaderc_compile.cpp | 16 +- tests/CMakeLists.txt | 1 + 1600 files changed, 351592 insertions(+), 20265 deletions(-) create mode 100644 3rdparty/bgfx/3rdparty/glslang/.appveyor.yml create mode 100644 3rdparty/bgfx/3rdparty/glslang/.clang-format create mode 100755 3rdparty/bgfx/3rdparty/glslang/.gitattributes create mode 100644 3rdparty/bgfx/3rdparty/glslang/.gitignore create mode 100644 3rdparty/bgfx/3rdparty/glslang/.travis.yml create mode 100644 3rdparty/bgfx/3rdparty/glslang/CMakeLists.txt create mode 100644 3rdparty/bgfx/3rdparty/glslang/ChooseMSVCCRT.cmake create mode 100644 3rdparty/bgfx/3rdparty/glslang/External/CMakeLists.txt create mode 100644 3rdparty/bgfx/3rdparty/glslang/OGLCompilersDLL/CMakeLists.txt create mode 100644 3rdparty/bgfx/3rdparty/glslang/OGLCompilersDLL/InitializeDll.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/OGLCompilersDLL/InitializeDll.h create mode 100644 3rdparty/bgfx/3rdparty/glslang/README-spirv-remap.txt create mode 100644 3rdparty/bgfx/3rdparty/glslang/README.md create mode 100755 3rdparty/bgfx/3rdparty/glslang/SPIRV/CMakeLists.txt create mode 100644 3rdparty/bgfx/3rdparty/glslang/SPIRV/GLSL.ext.AMD.h create mode 100644 3rdparty/bgfx/3rdparty/glslang/SPIRV/GLSL.ext.KHR.h create mode 100644 3rdparty/bgfx/3rdparty/glslang/SPIRV/GLSL.ext.NV.h create mode 100755 3rdparty/bgfx/3rdparty/glslang/SPIRV/GLSL.std.450.h create mode 100755 3rdparty/bgfx/3rdparty/glslang/SPIRV/GlslangToSpv.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/SPIRV/GlslangToSpv.h create mode 100644 3rdparty/bgfx/3rdparty/glslang/SPIRV/InReadableOrder.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/SPIRV/Logger.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/SPIRV/Logger.h create mode 100755 3rdparty/bgfx/3rdparty/glslang/SPIRV/SPVRemapper.cpp create mode 100755 3rdparty/bgfx/3rdparty/glslang/SPIRV/SPVRemapper.h create mode 100644 3rdparty/bgfx/3rdparty/glslang/SPIRV/SpvBuilder.cpp create mode 100755 3rdparty/bgfx/3rdparty/glslang/SPIRV/SpvBuilder.h create mode 100644 3rdparty/bgfx/3rdparty/glslang/SPIRV/bitutils.h create mode 100644 3rdparty/bgfx/3rdparty/glslang/SPIRV/disassemble.cpp create mode 100755 3rdparty/bgfx/3rdparty/glslang/SPIRV/disassemble.h create mode 100755 3rdparty/bgfx/3rdparty/glslang/SPIRV/doc.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/SPIRV/doc.h create mode 100644 3rdparty/bgfx/3rdparty/glslang/SPIRV/hex_float.h create mode 100755 3rdparty/bgfx/3rdparty/glslang/SPIRV/spirv.hpp create mode 100755 3rdparty/bgfx/3rdparty/glslang/SPIRV/spvIR.h create mode 100644 3rdparty/bgfx/3rdparty/glslang/StandAlone/CMakeLists.txt create mode 100644 3rdparty/bgfx/3rdparty/glslang/StandAlone/ResourceLimits.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/StandAlone/ResourceLimits.h create mode 100644 3rdparty/bgfx/3rdparty/glslang/StandAlone/StandAlone.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/StandAlone/Worklist.h create mode 100644 3rdparty/bgfx/3rdparty/glslang/StandAlone/spirv-remap.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/100.conf create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/100.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/100Limits.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/100scope.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/110scope.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/120.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/120.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/130.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/130.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/140.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/140.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/150.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/150.geom create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/150.tesc create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/150.tese create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/150.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/300.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/300.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/300BuiltIns.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/300block.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/300layout.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/300layout.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/300link.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/300link2.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/300link3.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/300operations.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/300scope.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/310.comp create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/310.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/310.geom create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/310.tesc create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/310.tese create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/310.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/310AofA.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/310implicitSizeArrayError.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/330.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/330comp.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/400.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/400.geom create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/400.tesc create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/400.tese create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/400.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/410.geom create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/410.tesc create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/410.vert create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/420.comp create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/420.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/420.geom create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/420.tesc create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/420.tese create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/420.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/420_size_gl_in.geom create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/430.comp create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/430.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/430AofA.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/430scope.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/440.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/440.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/450.comp create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/450.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/450.geom create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/450.tesc create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/450.tese create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/450.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/Operations.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/aggOps.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/always-discard.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/always-discard2.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/array.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/array100.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/atomic_uint.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/badChars.frag create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/badMacroArgs.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/100.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/100Limits.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/100LimitsConf.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/100scope.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/110scope.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/120.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/120.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/130.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/130.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/140.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/140.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/150.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/150.geom.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/150.tesc.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/150.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300BuiltIns.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300block.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300layout.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300layout.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300link.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300link2.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300link3.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300operations.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300scope.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.comp.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.geom.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.tesc.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.tese.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310AofA.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310implicitSizeArrayError.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/330.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/330comp.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/400.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/400.geom.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/400.tesc.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/400.tese.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/400.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/410.geom.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/410.tesc.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/410.vert.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.comp.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.geom.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.tesc.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.tese.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420_size_gl_in.geom.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/430.comp.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/430.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/430AofA.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/430scope.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/440.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/440.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.comp.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.geom.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.tesc.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.tese.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/Operations.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/aggOps.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/always-discard.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/always-discard2.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/array.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/array100.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/atomic_uint.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/badChars.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/badMacroArgs.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/comment.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/conditionalDiscard.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/constErrors.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/constFold.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/conversion.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppBad.vert.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppBad2.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppComplexExpr.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppIndent.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppNest.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppSimple.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/dataOut.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/dataOutIndirect.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/dce.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/decls.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/deepRvalue.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/depthOut.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/discard-dce.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/doWhileLoop.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/earlyReturnDiscard.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/empty.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/errors.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/es-link1.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/flowControl.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/forLoop.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/forwardRef.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/functionCall.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/functionSemantics.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glspv.esversion.vert.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glspv.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glspv.version.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glspv.version.vert.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glspv.vert.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.amend.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.array.flatten.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.array.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.array.implicit-size.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.array.multidim.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.assoc.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.attribute.expression.comp.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.attribute.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.basic.comp.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.basic.geom.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.buffer.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.calculatelod.dx10.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.cast.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.comparison.vec.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.conditional.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.constructexpr.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.deadFunctionMissingBody.vert.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.depthGreater.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.depthLess.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.discard.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.doLoop.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.emptystructreturn.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.emptystructreturn.vert.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.entry-in.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.entry-out.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.entry.rename.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flatten.return.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.float1.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.float4.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.forLoop.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.array.dx10.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.basic.dx10.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.basic.dx10.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.offset.dx10.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gathercmpRGBA.offset.dx10.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.getdimensions.dx10.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.getdimensions.dx10.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.getsampleposition.dx10.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hull.1.tesc.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hull.2.tesc.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hull.void.tesc.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.identifier.sample.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.if.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.init.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.init2.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.inoutquals.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.barriers.comp.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.comp.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.d3dcolortoubyte4.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.double.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.evalfns.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.f1632.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.f3216.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.lit.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.negative.comp.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.negative.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.negative.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.promote.down.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.promote.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.vert.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.layout.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.2dms.dx10.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.array.dx10.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.basic.dx10.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.basic.dx10.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.buffer.dx10.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.offset.dx10.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.logical.binary.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.logical.binary.vec.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.logical.unary.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matNx1.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matType.bool.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matType.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matType.int.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matrixSwizzle.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matrixindex.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.max.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.mintypes.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.multiEntry.vert.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.multiReturn.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.nonstaticMemberFunction.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.numericsuffixes.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.numthreads.comp.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.overload.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.params.default.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.params.default.negative.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.partialInit.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.pp.line.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.precedence.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.precedence2.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.precise.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.promote.atomic.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.promote.binary.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.promote.vec1.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.promotions.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.reflection.binding.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.reflection.binding.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.reflection.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.atomics.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.bracket.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.register.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.scalar.bracket.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.swizzle.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.vec2.bracket.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.array.dx10.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.basic.dx10.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.offset.dx10.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.sub-vec4.dx10.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplebias.array.dx10.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.scope.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.semantic.geom.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.semantic.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.semicolons.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.shapeConv.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.shapeConvRet.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sin.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.staticMemberFunction.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.string.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.stringtoken.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split-1.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split.array.geom.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split.assign.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split.call.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split.nested.geom.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split.trivial.geom.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split.trivial.vert.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structIoFourWay.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structStructName.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structarray.flatten.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structarray.flatten.geom.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.atomics.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.byte.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.coherent.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.fn.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.rw.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structin.vert.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.switch.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.swizzle.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.templatetypes.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.this.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.tx.bracket.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.type.half.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.type.identifier.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.typeGraphCopy.vert.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.typedef.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.void.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.whileLoop.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/length.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/lineContinuation.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/lineContinuation100.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/link1.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/link1.vk.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/localAggregates.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/loops.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/loopsArtificial.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/mains1.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/matrix.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/matrix2.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/matrixError.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/maxClipDistances.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/max_vertices_0.geom.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/missingBodies.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/negativeArraySize.comp.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/newTexture.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/noMain.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/nonSquare.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/nonVulkan.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/nosuffix.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/numeral.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/pointCoord.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/precise.tesc.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/precise_struct_block.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/precision.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/precision.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/prepost.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.cpp_style___FILE__.vert.err create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.cpp_style___FILE__.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.cpp_style_line_directive.vert.err create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.cpp_style_line_directive.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.defined.vert.err create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.defined.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.edge_cases.vert.err create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.edge_cases.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.eof_missing.vert.err create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.eof_missing.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.errors.vert.err create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.errors.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.extensions.vert.err create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.extensions.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.function_macro.vert.err create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.function_macro.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.include.disabled.vert.err create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.include.disabled.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.include.enabled.vert.err create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.include.enabled.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.line.frag.err create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.line.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.line.vert.err create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.line.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.many.endif.vert.err create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.many.endif.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.pragma.vert.err create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.pragma.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.simple.vert.err create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.simple.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.success_if_parse_would_fail.vert.err create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.success_if_parse_would_fail.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/recurse1.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/reflection.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.basic.dcefunc.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.basic.dcevartype.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.basic.everything.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.basic.none.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.basic.strip.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.sample.basic.everything.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.sample.basic.none.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.sample.basic.strip.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.templatetypes.everything.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.templatetypes.none.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.if.everything.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.if.none.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.literal64.everything.spv.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.literal64.none.spv.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.similar_1a.everything.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.similar_1a.none.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.similar_1b.everything.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.similar_1b.none.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.switch.everything.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.switch.none.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.uniformarray.everything.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.uniformarray.none.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/sample.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/sample.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/simpleFunctionCall.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/specExamples.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/specExamples.vert.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.100ops.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.130.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.140.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.150.geom.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.150.vert.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.300BuiltIns.vert.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.300layout.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.300layout.vert.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.300layoutp.vert.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.310.bitcast.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.310.comp.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.330.geom.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.400.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.400.tesc.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.400.tese.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.420.geom.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.430.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.430.vert.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.450.geom.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.450.noRedecl.tesc.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.450.tesc.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.AofA.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.GeometryShaderPassthrough.geom.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.Operations.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.accessChain.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.aggOps.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.always-discard.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.always-discard2.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.atomic.comp.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bitCast.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bool.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.boolInBlock.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.branch-return.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.buffer.autoassign.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.conditionalDiscard.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.conversion.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.dataOut.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.dataOutIndirect.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.dataOutIndirect.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.deepRvalue.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.depthOut.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.deviceGroup.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.discard-dce.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.do-simple.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.do-while-continue-break.vert.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.doWhileLoop.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.double.comp.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.drawParams.vert.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.earlyReturnDiscard.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.float16.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.flowControl.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.for-complex-condition.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.for-continue-break.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.for-nobody.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.for-notest.vert.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.for-simple.vert.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.forLoop.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.forwardFun.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.functionCall.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.functionNestedOpaque.vert.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.functionSemantics.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.glFragColor.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.glsl.register.autoassign.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.glsl.register.noautoassign.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.image.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.image.load-formatted.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.int64.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.intOps.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.interpOps.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.layoutNested.vert.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.length.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.localAggregates.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.loops.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.loopsArtificial.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.matFun.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.matrix.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.matrix2.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.memoryQualifier.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.merge-unreachable.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiStruct.comp.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiStructFuncall.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiView.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiviewPerViewAttributes.vert.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.newTexture.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.noDeadDecorations.vert.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.noWorkgroup.comp.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.nonSquare.vert.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.offsets.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.precise.tesc.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.precise.tese.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.precision.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.prepost.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.pushConstant.vert.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.pushConstantAnon.vert.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.qualifiers.vert.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.queryL.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.register.autoassign-2.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.register.autoassign.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.register.autoassign.rangetest.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.register.noautoassign.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.rw.autoassign.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.sampleMaskOverrideCoverage.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.separate.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.set.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderBallot.comp.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderBallotAMD.comp.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderDrawParams.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderGroupVote.comp.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shiftOps.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shortCircuit.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.simpleFunctionCall.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.simpleMat.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.sparseTexture.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.sparseTextureClamp.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConst.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConstant.comp.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConstant.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConstantComposite.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConstantOperations.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.ssbo.autoassign.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.stereoViewRendering.tesc.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.stereoViewRendering.vert.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.structAssignment.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.structDeref.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.structure.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subpass.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.switch.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.swizzle.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.swizzleInversion.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.test.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.test.vert.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.texture.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.texture.vert.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.types.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.uint.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.uniformArray.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.variableArrayIndex.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.varyingArray.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.varyingArrayIndirect.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.viewportArray2.tesc.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.viewportArray2.vert.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.voidFunction.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.while-continue-break.vert.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.while-simple.vert.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.whileLoop.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/structAssignment.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/structDeref.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/structure.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/switch.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/swizzle.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/syntaxError.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/test.conf create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/test.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/texture.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/tokenLength.vert.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/tokenPaste.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/types.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/uint.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/uniformArray.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/variableArrayIndex.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/varyingArray.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/varyingArrayIndirect.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/versionsClean.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/versionsClean.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/versionsErrors.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/versionsErrors.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/voidFunction.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/vulkan.ast.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/vulkan.comp.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/vulkan.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/vulkan.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/baseResults/whileLoop.frag.out create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/bump create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/comment.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/conditionalDiscard.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/constErrors.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/constFold.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/conversion.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/cppBad.vert create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/cppBad2.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/cppComplexExpr.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/cppIndent.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/cppNest.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/cppSimple.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/dataOut.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/dataOutIndirect.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/dce.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/decls.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/deepRvalue.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/depthOut.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/discard-dce.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/doWhileLoop.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/earlyReturnDiscard.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/empty.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/empty2.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/empty3.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/errors.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/es-link1.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/es-link2.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/flowControl.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/forLoop.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/forwardRef.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/functionCall.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/functionSemantics.frag create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/glslangValidator create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/glspv.esversion.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/glspv.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/glspv.version.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/glspv.version.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/glspv.vert create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.amend.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.array.flatten.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.array.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.array.implicit-size.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.array.multidim.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.assoc.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.attribute.expression.comp create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.attribute.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.basic.comp create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.basic.geom create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.buffer.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.calculatelod.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.calculatelodunclamped.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.cast.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.comparison.vec.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.conditional.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.constructexpr.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.deadFunctionMissingBody.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.depthGreater.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.depthLess.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.discard.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.doLoop.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.emptystructreturn.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.emptystructreturn.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.entry-in.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.entry-out.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.entry.rename.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.flatten.return.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.float1.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.float4.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.forLoop.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gather.array.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gather.basic.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gather.basic.dx10.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gather.offset.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gather.offsetarray.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gatherRGBA.array.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gatherRGBA.basic.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gatherRGBA.offset.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gatherRGBA.offsetarray.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gathercmpRGBA.array.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gathercmpRGBA.basic.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gathercmpRGBA.offset.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gathercmpRGBA.offsetarray.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.getdimensions.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.getdimensions.dx10.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.getdimensions.rw.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.getsampleposition.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.hull.1.tesc create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.hull.2.tesc create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.hull.void.tesc create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.identifier.sample.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.if.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.init.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.init2.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.inoutquals.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.barriers.comp create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.comp create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.d3dcolortoubyte4.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.double.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.evalfns.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.f1632.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.f3216.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.lit.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.negative.comp create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.negative.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.negative.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.promote.down.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.promote.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.promote.outputs.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.layout.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.load.2dms.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.load.array.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.load.basic.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.load.basic.dx10.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.load.buffer.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.load.buffer.float.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.load.offset.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.load.offsetarray.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.load.rwbuffer.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.load.rwtexture.array.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.load.rwtexture.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.logical.binary.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.logical.binary.vec.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.logical.unary.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.matNx1.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.matType.bool.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.matType.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.matType.int.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.matrixSwizzle.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.matrixindex.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.max.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.mintypes.frag create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.multiEntry.vert create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.multiReturn.frag create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.nonstaticMemberFunction.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.numericsuffixes.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.numthreads.comp create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.overload.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.params.default.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.params.default.negative.frag create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.partialInit.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.pp.line.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.pp.tokenpasting.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.precedence.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.precedence2.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.precise.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.promote.atomic.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.promote.binary.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.promote.vec1.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.promotions.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.reflection.binding.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.reflection.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.rw.atomics.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.rw.bracket.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.rw.register.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.rw.scalar.bracket.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.rw.swizzle.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.rw.vec2.bracket.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.sample.array.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.sample.basic.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.sample.offset.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.sample.offsetarray.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.sample.sub-vec4.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplebias.array.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplebias.basic.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplebias.offset.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplebias.offsetarray.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplecmp.array.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplecmp.basic.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplecmp.offset.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplecmp.offsetarray.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplecmplevelzero.array.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplecmplevelzero.basic.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplecmplevelzero.offset.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplecmplevelzero.offsetarray.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplegrad.array.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplegrad.basic.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplegrad.basic.dx10.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplegrad.offset.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplegrad.offsetarray.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplelevel.array.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplelevel.basic.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplelevel.basic.dx10.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplelevel.offset.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplelevel.offsetarray.dx10.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.scope.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.semantic.geom create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.semantic.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.semicolons.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.shapeConv.frag create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.shapeConvRet.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.sin.frag create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.staticMemberFunction.frag create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.string.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.stringtoken.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.struct.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.struct.split-1.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.struct.split.array.geom create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.struct.split.assign.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.struct.split.call.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.struct.split.nested.geom create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.struct.split.trivial.geom create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.struct.split.trivial.vert create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structIoFourWay.frag create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structStructName.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structarray.flatten.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structarray.flatten.geom create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structbuffer.atomics.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structbuffer.byte.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structbuffer.coherent.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structbuffer.fn.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structbuffer.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structbuffer.rw.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structbuffer.rwbyte.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structin.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.switch.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.swizzle.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.templatetypes.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.templatetypes.negative.frag create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.this.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.tx.bracket.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.type.half.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.type.identifier.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.typeGraphCopy.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.typedef.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.void.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/hlsl.whileLoop.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/length.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/lineContinuation.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/lineContinuation100.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/link1.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/link1.vk.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/link2.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/link2.vk.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/link3.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/localAggregates.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/loops.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/loopsArtificial.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/mains.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/mains1.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/mains2.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/makeDoc create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/matrix.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/matrix2.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/matrixError.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/maxClipDistances.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/max_vertices_0.geom create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/missingBodies.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/negativeArraySize.comp create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/newTexture.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/noMain.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/noMain1.geom create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/noMain2.geom create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/nonSquare.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/nonVulkan.frag create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/nosuffix create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/numeral.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/pointCoord.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/precise.tesc create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/precise_struct_block.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/precision.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/precision.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/prepost.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.cpp_style___FILE__.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.cpp_style_line_directive.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.defined.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.edge_cases.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.eof_missing.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.errors.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.extensions.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.function_macro.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.include.disabled.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.include.enabled.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.line.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.line.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.many.endif.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.pragma.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.simple.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.success_if_parse_would_fail.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/recurse1.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/recurse1.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/recurse2.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/reflection.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/remap.basic.dcefunc.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/remap.basic.everything.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/remap.basic.none.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/remap.basic.strip.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/remap.hlsl.sample.basic.everything.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/remap.hlsl.sample.basic.none.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/remap.hlsl.sample.basic.strip.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/remap.hlsl.templatetypes.everything.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/remap.hlsl.templatetypes.none.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/remap.if.everything.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/remap.if.none.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/remap.literal64.everything.spv create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/remap.literal64.none.spv create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/remap.similar_1a.everything.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/remap.similar_1a.none.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/remap.similar_1b.everything.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/remap.similar_1b.none.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/remap.switch.everything.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/remap.switch.none.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/remap.uniformarray.everything.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/remap.uniformarray.none.frag create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/runtests create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/sample.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/sample.frag.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/sample.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/sample.vert.out create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/simpleFunctionCall.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/specExamples.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/specExamples.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.100ops.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.130.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.140.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.150.geom create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.150.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.300BuiltIns.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.300layout.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.300layout.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.300layoutp.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.310.bitcast.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.310.comp create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.330.geom create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.400.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.400.tesc create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.400.tese create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.420.geom create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.430.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.430.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.450.geom create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.450.noRedecl.tesc create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.450.tesc create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.AofA.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.GeometryShaderPassthrough.geom create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.Operations.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.accessChain.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.aggOps.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.always-discard.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.always-discard2.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.atomic.comp create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.bitCast.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.bool.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.boolInBlock.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.branch-return.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.buffer.autoassign.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.conditionalDiscard.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.conversion.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.dataOut.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.dataOutIndirect.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.dataOutIndirect.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.deepRvalue.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.depthOut.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.deviceGroup.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.discard-dce.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.do-simple.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.do-while-continue-break.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.doWhileLoop.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.double.comp create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.drawParams.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.earlyReturnDiscard.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.float16.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.flowControl.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.for-complex-condition.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.for-continue-break.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.for-nobody.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.for-notest.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.for-simple.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.forLoop.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.forwardFun.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.functionCall.frag create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/spv.functionNestedOpaque.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.functionSemantics.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.glFragColor.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.glsl.register.autoassign.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.glsl.register.noautoassign.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.image.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.image.load-formatted.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.int64.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.intOps.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.interpOps.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.layoutNested.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.length.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.localAggregates.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.loops.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.loopsArtificial.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.matFun.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.matrix.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.matrix2.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.memoryQualifier.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.merge-unreachable.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.multiStruct.comp create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/spv.multiStructFuncall.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.multiView.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.multiviewPerViewAttributes.tesc create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.multiviewPerViewAttributes.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.newTexture.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.noDeadDecorations.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.noWorkgroup.comp create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.nonSquare.vert create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/spv.offsets.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.precise.tesc create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.precise.tese create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.precision.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.prepost.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.pushConstant.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.pushConstantAnon.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.qualifiers.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.queryL.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.register.autoassign-2.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.register.autoassign.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.register.autoassign.rangetest.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.register.noautoassign.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.rw.autoassign.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.sampleMaskOverrideCoverage.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.separate.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.set.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.shaderBallot.comp create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.shaderBallotAMD.comp create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.shaderDrawParams.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.shaderGroupVote.comp create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.shiftOps.frag create mode 100755 3rdparty/bgfx/3rdparty/glslang/Test/spv.shortCircuit.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.simpleFunctionCall.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.simpleMat.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.sparseTexture.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.sparseTextureClamp.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.specConst.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.specConstant.comp create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.specConstant.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.specConstantComposite.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.specConstantOperations.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.ssbo.autoassign.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.stereoViewRendering.tesc create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.stereoViewRendering.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.structAssignment.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.structDeref.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.structure.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.subpass.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.switch.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.swizzle.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.swizzleInversion.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.test.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.test.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.texture.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.texture.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.types.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.uint.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.uniformArray.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.variableArrayIndex.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.varyingArray.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.varyingArrayIndirect.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.viewportArray2.tesc create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.viewportArray2.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.voidFunction.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.while-continue-break.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.while-simple.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/spv.whileLoop.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/structAssignment.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/structDeref.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/structure.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/switch.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/swizzle.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/syntaxError.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/test.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/texture.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/tokenLength.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/tokenPaste.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/types.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/uint.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/uniformArray.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/variableArrayIndex.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/varyingArray.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/varyingArrayIndirect.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/versionsClean.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/versionsClean.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/versionsErrors.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/versionsErrors.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/voidFunction.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/vulkan.ast.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/vulkan.comp create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/vulkan.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/vulkan.vert create mode 100644 3rdparty/bgfx/3rdparty/glslang/Test/whileLoop.frag create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/CMakeLists.txt create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/GenericCodeGen/CodeGen.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/GenericCodeGen/Link.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/Include/BaseTypes.h create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/Include/Common.h create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/Include/ConstantUnion.h create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/Include/InfoSink.h create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/Include/InitializeGlobals.h create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/Include/PoolAlloc.h create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/Include/ResourceLimits.h create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/Include/ShHandle.h create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/Include/Types.h create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/Include/arrays.h create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/Include/intermediate.h create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/Include/revision.h create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/Include/revision.template create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Constant.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/InfoSink.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Initialize.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Initialize.h create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/IntermTraverse.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Intermediate.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/LiveTraverser.h create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseContextBase.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.h create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/PoolAlloc.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/RemoveTree.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/RemoveTree.h create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Scan.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Scan.h create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ScanContext.h create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ShaderLang.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/SymbolTable.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/SymbolTable.h create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Versions.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Versions.h create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/gl_types.h create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang.y create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp.h create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/intermOut.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/iomapper.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/iomapper.h create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/limits.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/linkValidate.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/localintermediate.h create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/parseConst.cpp create mode 100755 3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/parseVersions.h create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/Pp.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpAtom.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpContext.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpContext.h create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpMemory.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpScanner.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpSymbols.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpTokens.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpTokens.h create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/propagateNoContraction.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/propagateNoContraction.h create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/reflection.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/reflection.h create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Unix/CMakeLists.txt create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Unix/ossource.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Windows/CMakeLists.txt create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Windows/main.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Windows/ossource.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/osinclude.h create mode 100644 3rdparty/bgfx/3rdparty/glslang/glslang/Public/ShaderLang.h create mode 100755 3rdparty/bgfx/3rdparty/glslang/glslang/updateGrammar create mode 100644 3rdparty/bgfx/3rdparty/glslang/gtests/AST.FromFile.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/gtests/BuiltInResource.FromFile.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/gtests/CMakeLists.txt create mode 100644 3rdparty/bgfx/3rdparty/glslang/gtests/Config.FromFile.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/gtests/HexFloat.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/gtests/Hlsl.FromFile.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/gtests/Initializer.h create mode 100644 3rdparty/bgfx/3rdparty/glslang/gtests/Link.FromFile.Vk.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/gtests/Link.FromFile.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/gtests/Pp.FromFile.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/gtests/README.md create mode 100644 3rdparty/bgfx/3rdparty/glslang/gtests/Remap.FromFile.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/gtests/Settings.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/gtests/Settings.h create mode 100644 3rdparty/bgfx/3rdparty/glslang/gtests/Spv.FromFile.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/gtests/TestFixture.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/gtests/TestFixture.h create mode 100644 3rdparty/bgfx/3rdparty/glslang/gtests/main.cpp create mode 100755 3rdparty/bgfx/3rdparty/glslang/hlsl/CMakeLists.txt create mode 100644 3rdparty/bgfx/3rdparty/glslang/hlsl/hlslAttributes.cpp create mode 100644 3rdparty/bgfx/3rdparty/glslang/hlsl/hlslAttributes.h create mode 100755 3rdparty/bgfx/3rdparty/glslang/hlsl/hlslGrammar.cpp create mode 100755 3rdparty/bgfx/3rdparty/glslang/hlsl/hlslGrammar.h create mode 100755 3rdparty/bgfx/3rdparty/glslang/hlsl/hlslOpMap.cpp create mode 100755 3rdparty/bgfx/3rdparty/glslang/hlsl/hlslOpMap.h create mode 100755 3rdparty/bgfx/3rdparty/glslang/hlsl/hlslParseHelper.cpp create mode 100755 3rdparty/bgfx/3rdparty/glslang/hlsl/hlslParseHelper.h create mode 100755 3rdparty/bgfx/3rdparty/glslang/hlsl/hlslParseables.cpp create mode 100755 3rdparty/bgfx/3rdparty/glslang/hlsl/hlslParseables.h create mode 100755 3rdparty/bgfx/3rdparty/glslang/hlsl/hlslScanContext.cpp create mode 100755 3rdparty/bgfx/3rdparty/glslang/hlsl/hlslScanContext.h create mode 100755 3rdparty/bgfx/3rdparty/glslang/hlsl/hlslTokenStream.cpp create mode 100755 3rdparty/bgfx/3rdparty/glslang/hlsl/hlslTokenStream.h create mode 100755 3rdparty/bgfx/3rdparty/glslang/hlsl/hlslTokens.h create mode 100755 3rdparty/bgfx/3rdparty/glslang/make-revision mode change 100755 => 100644 3rdparty/bgfx/3rdparty/iconfontheaders/GenerateIconFontCppHeaders.py create mode 100644 3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/color_picker.h create mode 100644 3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/color_picker.inl create mode 100644 3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/range_slider.h create mode 100644 3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/range_slider.inl create mode 100644 3rdparty/bgfx/include/bgfx/c99/platform.h create mode 100644 3rdparty/bgfx/include/bgfx/defines.h create mode 100644 3rdparty/bgfx/include/bgfx/embedded_shader.h create mode 100644 3rdparty/bgfx/include/bgfx/platform.h create mode 100644 3rdparty/bgfx/src/renderer_vk.h create mode 100644 3rdparty/bx/include/bx/easing.h create mode 100644 3rdparty/bx/include/bx/inline/allocator.inl create mode 100644 3rdparty/bx/include/bx/inline/bx.inl create mode 100644 3rdparty/bx/include/bx/inline/easing.inl create mode 100644 3rdparty/bx/include/bx/inline/endian.inl create mode 100644 3rdparty/bx/include/bx/inline/error.inl create mode 100644 3rdparty/bx/include/bx/inline/fpumath.inl create mode 100644 3rdparty/bx/include/bx/inline/handlealloc.inl create mode 100644 3rdparty/bx/include/bx/inline/hash.inl create mode 100644 3rdparty/bx/include/bx/inline/mpscqueue.inl create mode 100644 3rdparty/bx/include/bx/inline/mutex.inl create mode 100644 3rdparty/bx/include/bx/inline/pixelformat.inl create mode 100644 3rdparty/bx/include/bx/inline/readerwriter.inl create mode 100644 3rdparty/bx/include/bx/inline/ringbuffer.inl create mode 100644 3rdparty/bx/include/bx/inline/rng.inl create mode 100644 3rdparty/bx/include/bx/inline/simd128_langext.inl create mode 100644 3rdparty/bx/include/bx/inline/simd128_neon.inl create mode 100644 3rdparty/bx/include/bx/inline/simd128_ref.inl create mode 100644 3rdparty/bx/include/bx/inline/simd128_sse.inl create mode 100644 3rdparty/bx/include/bx/inline/simd128_swizzle.inl create mode 100644 3rdparty/bx/include/bx/inline/simd256_avx.inl create mode 100644 3rdparty/bx/include/bx/inline/simd256_ref.inl create mode 100644 3rdparty/bx/include/bx/inline/simd_ni.inl create mode 100644 3rdparty/bx/include/bx/inline/sort.inl create mode 100644 3rdparty/bx/include/bx/inline/spscqueue.inl create mode 100644 3rdparty/bx/include/bx/inline/string.inl create mode 100644 3rdparty/bx/include/bx/inline/uint32_t.inl create mode 100644 3rdparty/bx/include/bx/pixelformat.h create mode 100644 3rdparty/bx/include/bx/semaphore.h create mode 100644 3rdparty/bx/include/bx/sort.h create mode 100644 3rdparty/bx/src/amalgamated.cpp create mode 100644 3rdparty/bx/src/bx.cpp create mode 100644 3rdparty/bx/src/commandline.cpp create mode 100644 3rdparty/bx/src/crtimpl.cpp create mode 100644 3rdparty/bx/src/crtnone.cpp create mode 100644 3rdparty/bx/src/debug.cpp create mode 100644 3rdparty/bx/src/dtoa.cpp create mode 100644 3rdparty/bx/src/fpumath.cpp create mode 100644 3rdparty/bx/src/mutex.cpp create mode 100644 3rdparty/bx/src/os.cpp create mode 100644 3rdparty/bx/src/semaphore.cpp create mode 100644 3rdparty/bx/src/sort.cpp create mode 100644 3rdparty/bx/src/string.cpp create mode 100644 3rdparty/bx/src/thread.cpp create mode 100644 3rdparty/bx/src/timer.cpp diff --git a/3rdparty/bgfx/3rdparty/.editorconfig b/3rdparty/bgfx/3rdparty/.editorconfig index 25d1029..f88ec27 100644 --- a/3rdparty/bgfx/3rdparty/.editorconfig +++ b/3rdparty/bgfx/3rdparty/.editorconfig @@ -31,3 +31,7 @@ indent_size = 4 [remotery/*] indent_style = space indent_size = 4 + +[glsl-optimizer/*] +indent_style = space +indent_size = 3 diff --git a/3rdparty/bgfx/3rdparty/etc2/ProcessRGB.cpp b/3rdparty/bgfx/3rdparty/etc2/ProcessRGB.cpp index de03845..29f0f7e 100644 --- a/3rdparty/bgfx/3rdparty/etc2/ProcessRGB.cpp +++ b/3rdparty/bgfx/3rdparty/etc2/ProcessRGB.cpp @@ -205,7 +205,7 @@ void ProcessAverages( v4i* a ) #ifdef __SSE4_1__ for( int i=0; i<2; i++ ) { - __m128i d = _mm_loadu_si128((__m128i*)a[i*2].data()); + __m128i d = _mm_loadu_si128((__m128i*)a[i*2]); __m128i t = _mm_add_epi16(_mm_mullo_epi16(d, _mm_set1_epi16(31)), _mm_set1_epi16(128)); @@ -222,19 +222,19 @@ void ProcessAverages( v4i* a ) __m128i a0 = _mm_or_si128(_mm_slli_epi16(c, 3), _mm_srli_epi16(c, 2)); - _mm_storeu_si128((__m128i*)a[4+i*2].data(), a0); + _mm_storeu_si128((__m128i*)a[4+i*2], a0); } for( int i=0; i<2; i++ ) { - __m128i d = _mm_loadu_si128((__m128i*)a[i*2].data()); + __m128i d = _mm_loadu_si128((__m128i*)a[i*2]); __m128i t0 = _mm_add_epi16(_mm_mullo_epi16(d, _mm_set1_epi16(15)), _mm_set1_epi16(128)); __m128i t1 = _mm_srli_epi16(_mm_add_epi16(t0, _mm_srli_epi16(t0, 8)), 8); __m128i t2 = _mm_or_si128(t1, _mm_slli_epi16(t1, 4)); - _mm_storeu_si128((__m128i*)a[i*2].data(), t2); + _mm_storeu_si128((__m128i*)a[i*2], t2); } #else for( int i=0; i<2; i++ ) diff --git a/3rdparty/bgfx/3rdparty/forsyth-too/forsythtriangleorderoptimizer.cpp b/3rdparty/bgfx/3rdparty/forsyth-too/forsythtriangleorderoptimizer.cpp index 3d23d2b..261016f 100644 --- a/3rdparty/bgfx/3rdparty/forsyth-too/forsythtriangleorderoptimizer.cpp +++ b/3rdparty/bgfx/3rdparty/forsyth-too/forsythtriangleorderoptimizer.cpp @@ -135,7 +135,7 @@ namespace Forsyth float FindVertexScore(uint numActiveFaces, uint cachePosition, uint vertexCacheSize) { - assert(s_vertexScoresComputed); + assert(s_vertexScoresComputed); (void)s_vertexScoresComputed; if ( numActiveFaces == 0 ) { diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/ast_to_hir.cpp b/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/ast_to_hir.cpp index d31c534..09b6885 100644 --- a/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/ast_to_hir.cpp +++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/ast_to_hir.cpp @@ -3045,10 +3045,12 @@ process_initializer(ir_variable *var, ast_declaration *decl, /* Propagate precision qualifier for constant value */ if (type->qualifier.flags.q.constant) { ir_constant *constant_value = rhs->constant_expression_value(); - constant_value->set_precision((glsl_precision)type->qualifier.precision); - if (constant_value->type->is_array()) { - for (unsigned i = 0; i < constant_value->type->length; i++) { - constant_value->get_array_element(i)->set_precision((glsl_precision)type->qualifier.precision); + if (NULL != constant_value) { + constant_value->set_precision((glsl_precision)type->qualifier.precision); + if (constant_value->type->is_array()) { + for (unsigned i = 0; i < constant_value->type->length; i++) { + constant_value->get_array_element(i)->set_precision((glsl_precision)type->qualifier.precision); + } } } } diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/glsl_optimizer.cpp b/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/glsl_optimizer.cpp index 5e0b21b..5d790f7 100644 --- a/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/glsl_optimizer.cpp +++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/glsl_optimizer.cpp @@ -280,6 +280,14 @@ static void propagate_precision_texture(ir_instruction *ir, void *data) ((precision_ctx*)data)->res = true; } +static void propagate_precision_texture_metal(ir_instruction* ir, void* data) +{ + // There are no precision specifiers in Metal + ir_texture* tex = ir->as_texture(); + if (tex) + tex->set_precision(glsl_precision_undefined); +} + struct undefined_ass_ctx { ir_variable* var; @@ -386,7 +394,7 @@ static void propagate_precision_call(ir_instruction *ir, void *data) } } -static bool propagate_precision(exec_list* list, bool assign_high_to_undefined) +static bool propagate_precision(exec_list* list, bool metal_target) { bool anyProgress = false; precision_ctx ctx; @@ -396,7 +404,11 @@ static bool propagate_precision(exec_list* list, bool assign_high_to_undefined) ctx.root_ir = list; foreach_in_list(ir_instruction, ir, list) { - visit_tree (ir, propagate_precision_texture, &ctx); + if (metal_target) + visit_tree (ir, propagate_precision_texture_metal, &ctx); + else + visit_tree (ir, propagate_precision_texture, &ctx); + visit_tree (ir, propagate_precision_deref, &ctx); bool hadProgress = ctx.res; ctx.res = false; @@ -417,7 +429,7 @@ static bool propagate_precision(exec_list* list, bool assign_high_to_undefined) anyProgress |= ctx.res; // for globals that have undefined precision, set it to highp - if (assign_high_to_undefined) + if (metal_target) { foreach_in_list(ir_instruction, ir, list) { diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/ir_print_metal_visitor.cpp b/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/ir_print_metal_visitor.cpp index a4fdad2..027e42f 100644 --- a/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/ir_print_metal_visitor.cpp +++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/ir_print_metal_visitor.cpp @@ -1282,6 +1282,12 @@ void ir_print_metal_visitor::visit(ir_texture *ir) sampler_uv_dim += 1; const bool is_proj = (uv_dim > sampler_uv_dim) && !is_array; + // Construct as the expected return type of shadow2D as sample_compare returns a scalar + if (is_shadow) + { + buffer.asprintf_append("float4("); + } + // texture name & call to sample ir->sampler->accept(this); if (is_shadow) @@ -1345,6 +1351,12 @@ void ir_print_metal_visitor::visit(ir_texture *ir) //@TODO: pixel offsets buffer.asprintf_append (")"); + + // Close float4 cast + if (is_shadow) + { + buffer.asprintf_append(")"); + } } diff --git a/3rdparty/bgfx/3rdparty/glslang/.appveyor.yml b/3rdparty/bgfx/3rdparty/glslang/.appveyor.yml new file mode 100644 index 0000000..64e7ae6 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/.appveyor.yml @@ -0,0 +1,40 @@ +# Windows Build Configuration for AppVeyor +# http://www.appveyor.com/docs/appveyor-yml + +# build version format +version: "{build}" + +os: Visual Studio 2013 + +platform: + - Any CPU + +configuration: + - Debug + - Release + +branches: + only: + - master + +clone_depth: 5 + +matrix: + fast_finish: true # Show final status immediately if a test fails. + +# scripts that run after cloning repository +install: + - git clone https://github.com/google/googletest.git External/googletest + +build: + parallel: true # enable MSBuild parallel builds + verbosity: minimal + +build_script: + - mkdir build && cd build + - cmake .. -DCMAKE_INSTALL_PREFIX=install + - cmake --build . --config %CONFIGURATION% --target install + +test_script: + - ctest -C %CONFIGURATION% --output-on-failure + - cd ../Test && bash runtests diff --git a/3rdparty/bgfx/3rdparty/glslang/.clang-format b/3rdparty/bgfx/3rdparty/glslang/.clang-format new file mode 100644 index 0000000..daf8798 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/.clang-format @@ -0,0 +1,12 @@ +Language: Cpp +IndentWidth: 4 +BreakBeforeBraces: Custom +BraceWrapping: { AfterFunction: true, AfterControlStatement: true } +IndentCaseLabels: false +ReflowComments: false +ColumnLimit: 120 +AccessModifierOffset: -4 +AlignTrailingComments: true +AllowShortBlocksOnASingleLine: false +AllowShortIfStatementsOnASingleLine: false +AllowShortLoopsOnASingleLine: false diff --git a/3rdparty/bgfx/3rdparty/glslang/.gitattributes b/3rdparty/bgfx/3rdparty/glslang/.gitattributes new file mode 100755 index 0000000..cade390 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/.gitattributes @@ -0,0 +1,17 @@ +# test files have a mix of lf/crlf, and that's a good thing, for testing, don't mess with it +# bash scripts need lines ending with lf, and that's correct for Windows too, e.g., under Cygwin +# (scripts often don't have a suffix) +* -text +*.sh text eof=lf + +# txt files should be native and normalized +*.txt text + +# source code can be native and normalized, but simpler if lf everywhere; will try that way +*.h text eof=lf +*.c text eof=lf +*.cpp text eof=lf +*.y text eof=lf +*.out text eof=lf +*.conf text eof=lf +*.err text eof=lf diff --git a/3rdparty/bgfx/3rdparty/glslang/.gitignore b/3rdparty/bgfx/3rdparty/glslang/.gitignore new file mode 100644 index 0000000..30889ac --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/.gitignore @@ -0,0 +1,13 @@ +*.o +*.a +*.so +*.exe +tags +TAGS +build/ +Test/localResults/ +Test/multiThread.out +Test/singleThread.out +Test/vert.spv +Test/frag.spv +External/googletest diff --git a/3rdparty/bgfx/3rdparty/glslang/.travis.yml b/3rdparty/bgfx/3rdparty/glslang/.travis.yml new file mode 100644 index 0000000..4a88dce --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/.travis.yml @@ -0,0 +1,60 @@ +# Linux and Mac Build Configuration for Travis + +language: cpp + +os: + - linux + - osx + +# Use Ubuntu 14.04 LTS (Trusty) as the Linux testing environment. +sudo: required +dist: trusty + +env: + - GLSLANG_BUILD_TYPE=Release + - GLSLANG_BUILD_TYPE=Debug + +compiler: + - clang + - gcc + +matrix: + fast_finish: true # Show final status immediately if a test fails. + exclude: + # Skip GCC builds on Mac OS X. + - os: osx + compiler: gcc + +cache: + apt: true + +branches: + only: + - master + +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. + - if [[ "$TRAVIS_OS_NAME" == "linux" && "$CC" == "clang" ]]; then + export CC=clang-3.6 CXX=clang++-3.6; + fi + +before_script: + - git clone https://github.com/google/googletest.git External/googletest + +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 diff --git a/3rdparty/bgfx/3rdparty/glslang/CMakeLists.txt b/3rdparty/bgfx/3rdparty/glslang/CMakeLists.txt new file mode 100644 index 0000000..32395c0 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/CMakeLists.txt @@ -0,0 +1,77 @@ +cmake_minimum_required(VERSION 2.8.11) +set_property(GLOBAL PROPERTY USE_FOLDERS ON) + +option(ENABLE_AMD_EXTENSIONS "Enables support of AMD-specific extensions" ON) +option(ENABLE_GLSLANG_BINARIES "Builds glslangValidator and spirv-remap" ON) + +option(ENABLE_NV_EXTENSIONS "Enables support of Nvidia-specific extensions" ON) + +option(ENABLE_HLSL "Enables HLSL input support" ON) + +enable_testing() + +set(CMAKE_INSTALL_PREFIX "install" CACHE STRING "prefix") + +project(glslang) + +if(ENABLE_AMD_EXTENSIONS) + add_definitions(-DAMD_EXTENSIONS) +endif(ENABLE_AMD_EXTENSIONS) + +if(ENABLE_NV_EXTENSIONS) + add_definitions(-DNV_EXTENSIONS) +endif(ENABLE_NV_EXTENSIONS) + +if(ENABLE_HLSL) + add_definitions(-DENABLE_HLSL) +endif(ENABLE_HLSL) + +if(WIN32) + set(CMAKE_DEBUG_POSTFIX "d") + if(MSVC) + include(ChooseMSVCCRT.cmake) + 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) +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) +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) +endfunction(glslang_set_link_args) + +# We depend on these for later projects, so they should come first. +add_subdirectory(External) + +add_subdirectory(glslang) +add_subdirectory(OGLCompilersDLL) +if(ENABLE_GLSLANG_BINARIES) + add_subdirectory(StandAlone) +endif() +add_subdirectory(SPIRV) +if(ENABLE_HLSL) + add_subdirectory(hlsl) +endif(ENABLE_HLSL) +add_subdirectory(gtests) diff --git a/3rdparty/bgfx/3rdparty/glslang/ChooseMSVCCRT.cmake b/3rdparty/bgfx/3rdparty/glslang/ChooseMSVCCRT.cmake new file mode 100644 index 0000000..2097881 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/ChooseMSVCCRT.cmake @@ -0,0 +1,105 @@ +# The macro choose_msvc_crt() takes a list of possible +# C runtimes to choose from, in the form of compiler flags, +# to present to the user. (MTd for /MTd, etc) +# +# The macro is invoked at the end of the file. +# +# CMake already sets CRT flags in the CMAKE_CXX_FLAGS_* and +# CMAKE_C_FLAGS_* variables by default. To let the user +# override that for each build type: +# 1. Detect which CRT is already selected, and reflect this in +# LLVM_USE_CRT_* so the user can have a better idea of what +# changes they're making. +# 2. Replace the flags in both variables with the new flag via a regex. +# 3. set() the variables back into the cache so the changes +# are user-visible. + +### Helper macros: ### +macro(make_crt_regex regex crts) + set(${regex} "") + foreach(crt ${${crts}}) + # Trying to match the beginning or end of the string with stuff + # like [ ^]+ didn't work, so use a bunch of parentheses instead. + set(${regex} "${${regex}}|(^| +)/${crt}($| +)") + endforeach(crt) + string(REGEX REPLACE "^\\|" "" ${regex} "${${regex}}") +endmacro(make_crt_regex) + +macro(get_current_crt crt_current regex flagsvar) + # Find the selected-by-CMake CRT for each build type, if any. + # Strip off the leading slash and any whitespace. + string(REGEX MATCH "${${regex}}" ${crt_current} "${${flagsvar}}") + string(REPLACE "/" " " ${crt_current} "${${crt_current}}") + string(STRIP "${${crt_current}}" ${crt_current}) +endmacro(get_current_crt) + +# Replaces or adds a flag to a variable. +# Expects 'flag' to be padded with spaces. +macro(set_flag_in_var flagsvar regex flag) + string(REGEX MATCH "${${regex}}" current_flag "${${flagsvar}}") + if("${current_flag}" STREQUAL "") + set(${flagsvar} "${${flagsvar}}${${flag}}") + else() + string(REGEX REPLACE "${${regex}}" "${${flag}}" ${flagsvar} "${${flagsvar}}") + endif() + string(STRIP "${${flagsvar}}" ${flagsvar}) + # Make sure this change gets reflected in the cache/gui. + # CMake requires the docstring parameter whenever set() touches the cache, + # so get the existing docstring and re-use that. + get_property(flagsvar_docs CACHE ${flagsvar} PROPERTY HELPSTRING) + set(${flagsvar} "${${flagsvar}}" CACHE STRING "${flagsvar_docs}" FORCE) +endmacro(set_flag_in_var) + + +macro(choose_msvc_crt MSVC_CRT) + if(LLVM_USE_CRT) + message(FATAL_ERROR + "LLVM_USE_CRT is deprecated. Use the CMAKE_BUILD_TYPE-specific +variables (LLVM_USE_CRT_DEBUG, etc) instead.") + endif() + + make_crt_regex(MSVC_CRT_REGEX ${MSVC_CRT}) + + foreach(build_type ${CMAKE_CONFIGURATION_TYPES} ${CMAKE_BUILD_TYPE}) + string(TOUPPER "${build_type}" build) + if (NOT LLVM_USE_CRT_${build}) + get_current_crt(LLVM_USE_CRT_${build} + MSVC_CRT_REGEX + CMAKE_CXX_FLAGS_${build}) + set(LLVM_USE_CRT_${build} + "${LLVM_USE_CRT_${build}}" + CACHE STRING "Specify VC++ CRT to use for ${build_type} configurations." + FORCE) + set_property(CACHE LLVM_USE_CRT_${build} + PROPERTY STRINGS ;${${MSVC_CRT}}) + endif(NOT LLVM_USE_CRT_${build}) + endforeach(build_type) + + foreach(build_type ${CMAKE_CONFIGURATION_TYPES} ${CMAKE_BUILD_TYPE}) + string(TOUPPER "${build_type}" build) + if ("${LLVM_USE_CRT_${build}}" STREQUAL "") + set(flag_string " ") + else() + set(flag_string " /${LLVM_USE_CRT_${build}} ") + list(FIND ${MSVC_CRT} ${LLVM_USE_CRT_${build}} idx) + if (idx LESS 0) + message(FATAL_ERROR + "Invalid value for LLVM_USE_CRT_${build}: ${LLVM_USE_CRT_${build}}. Valid options are one of: ${${MSVC_CRT}}") + endif (idx LESS 0) + message(STATUS "Using ${build_type} VC++ CRT: ${LLVM_USE_CRT_${build}}") + endif() + foreach(lang C CXX) + set_flag_in_var(CMAKE_${lang}_FLAGS_${build} MSVC_CRT_REGEX flag_string) + endforeach(lang) + endforeach(build_type) +endmacro(choose_msvc_crt MSVC_CRT) + + +# List of valid CRTs for MSVC +set(MSVC_CRT + MD + MDd + MT + MTd) + +choose_msvc_crt(MSVC_CRT) diff --git a/3rdparty/bgfx/3rdparty/glslang/External/CMakeLists.txt b/3rdparty/bgfx/3rdparty/glslang/External/CMakeLists.txt new file mode 100644 index 0000000..5180ea5 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/External/CMakeLists.txt @@ -0,0 +1,34 @@ +# 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") +endif() diff --git a/3rdparty/bgfx/3rdparty/glslang/OGLCompilersDLL/CMakeLists.txt b/3rdparty/bgfx/3rdparty/glslang/OGLCompilersDLL/CMakeLists.txt new file mode 100644 index 0000000..4954db9 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/OGLCompilersDLL/CMakeLists.txt @@ -0,0 +1,11 @@ +set(SOURCES InitializeDll.cpp InitializeDll.h) + +add_library(OGLCompiler STATIC ${SOURCES}) +set_property(TARGET OGLCompiler PROPERTY FOLDER glslang) + +if(WIN32) + source_group("Source" FILES ${SOURCES}) +endif(WIN32) + +install(TARGETS OGLCompiler + ARCHIVE DESTINATION lib) diff --git a/3rdparty/bgfx/3rdparty/glslang/OGLCompilersDLL/InitializeDll.cpp b/3rdparty/bgfx/3rdparty/glslang/OGLCompilersDLL/InitializeDll.cpp new file mode 100644 index 0000000..2eb912c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/OGLCompilersDLL/InitializeDll.cpp @@ -0,0 +1,155 @@ +// +// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +// 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. +// + +#define SH_EXPORTING + +#include + +#include "InitializeDll.h" +#include "../glslang/Include/InitializeGlobals.h" + +#include "../glslang/Public/ShaderLang.h" + +namespace glslang { + +OS_TLSIndex ThreadInitializeIndex = OS_INVALID_TLS_INDEX; + +bool InitProcess() +{ + glslang::GetGlobalLock(); + + if (ThreadInitializeIndex != OS_INVALID_TLS_INDEX) { + // + // Function is re-entrant. + // + + glslang::ReleaseGlobalLock(); + return true; + } + + ThreadInitializeIndex = OS_AllocTLSIndex(); + + if (ThreadInitializeIndex == OS_INVALID_TLS_INDEX) { + assert(0 && "InitProcess(): Failed to allocate TLS area for init flag"); + + glslang::ReleaseGlobalLock(); + return false; + } + + if (! InitializePoolIndex()) { + assert(0 && "InitProcess(): Failed to initialize global pool"); + + glslang::ReleaseGlobalLock(); + return false; + } + + if (! InitThread()) { + assert(0 && "InitProcess(): Failed to initialize thread"); + + glslang::ReleaseGlobalLock(); + return false; + } + + glslang::ReleaseGlobalLock(); + return true; +} + + +bool InitThread() +{ + // + // This function is re-entrant + // + if (ThreadInitializeIndex == OS_INVALID_TLS_INDEX) { + assert(0 && "InitThread(): Process hasn't been initalised."); + return false; + } + + if (OS_GetTLSValue(ThreadInitializeIndex) != 0) + return true; + + InitializeMemoryPools(); + + if (! OS_SetTLSValue(ThreadInitializeIndex, (void *)1)) { + assert(0 && "InitThread(): Unable to set init flag."); + return false; + } + + return true; +} + + +bool DetachThread() +{ + bool success = true; + + if (ThreadInitializeIndex == OS_INVALID_TLS_INDEX) + return true; + + // + // Function is re-entrant and this thread may not have been initialized. + // + if (OS_GetTLSValue(ThreadInitializeIndex) != 0) { + if (!OS_SetTLSValue(ThreadInitializeIndex, (void *)0)) { + assert(0 && "DetachThread(): Unable to clear init flag."); + success = false; + } + + FreeGlobalPools(); + + } + + return success; +} + +bool DetachProcess() +{ + bool success = true; + + if (ThreadInitializeIndex == OS_INVALID_TLS_INDEX) + return true; + + ShFinalize(); + + success = DetachThread(); + + FreePoolIndex(); + + OS_FreeTLSIndex(ThreadInitializeIndex); + ThreadInitializeIndex = OS_INVALID_TLS_INDEX; + + return success; +} + +} // end namespace glslang diff --git a/3rdparty/bgfx/3rdparty/glslang/OGLCompilersDLL/InitializeDll.h b/3rdparty/bgfx/3rdparty/glslang/OGLCompilersDLL/InitializeDll.h new file mode 100644 index 0000000..60b2b15 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/OGLCompilersDLL/InitializeDll.h @@ -0,0 +1,49 @@ +// +// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +// 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. +// +#ifndef __INITIALIZEDLL_H +#define __INITIALIZEDLL_H + +#include "../glslang/OSDependent/osinclude.h" + +namespace glslang { + +bool InitProcess(); +bool InitThread(); +bool DetachThread(); +bool DetachProcess(); + +} // end namespace glslang + +#endif // __INITIALIZEDLL_H + diff --git a/3rdparty/bgfx/3rdparty/glslang/README-spirv-remap.txt b/3rdparty/bgfx/3rdparty/glslang/README-spirv-remap.txt new file mode 100644 index 0000000..3e5288a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/README-spirv-remap.txt @@ -0,0 +1,137 @@ + +VERSION +-------------------------------------------------------------------------------- +spirv-remap 0.97 + +INTRO: +-------------------------------------------------------------------------------- +spirv-remap is a utility to improve compression of SPIR-V binary files via +entropy reduction, plus optional stripping of debug information and +load/store optimization. It transforms SPIR-V to SPIR-V, remapping IDs. The +resulting modules have an increased ID range (IDs are not as tightly packed +around zero), but will compress better when multiple modules are compressed +together, since compressor's dictionary can find better cross module +commonality. + +Remapping is accomplished via canonicalization. Thus, modules can be +compressed one at a time with no loss of quality relative to operating on +many modules at once. The command line tool operates on multiple modules +only in the trivial repetition sense, for ease of use. The remapper API +only accepts a single module at a time. + +There are two modes of use: command line, and a C++11 API. Both are +described below. + +spirv-remap is currently in an alpha state. Although there are no known +remapping defects, it has only been exercised on one real world game shader +workload. + + +FEEDBACK +-------------------------------------------------------------------------------- +Report defects, enhancements requests, code improvements, etc to: + spvremapper@lunarg.com + + +COMMAND LINE USAGE: +-------------------------------------------------------------------------------- +Examples are given with a verbosity of one (-v), but more verbosity can be +had via -vv, -vvv, etc, or an integer parameter to --verbose, such as +"--verbose 4". With no verbosity, the command is silent and returns 0 on +success, and a positive integer error on failure. + +Pre-built binaries for several OSs are available. Examples presented are +for Linux. Command line arguments can be provided in any order. + +1. Basic ID remapping + +Perform ID remapping on all shaders in "*.spv", writing new files with +the same basenames to /tmp/out_dir. + + spirv-remap -v --map all --input *.spv --output /tmp/out_dir + +2. Perform all possible size reductions + + spirv-remap-linux-64 -v --do-everything --input *.spv --output /tmp/out_dir + +Note that --do-everything is a synonym for: + + --map all --dce all --opt all --strip all + +API USAGE: +-------------------------------------------------------------------------------- + +The public interface to the remapper is defined in SPIRV/SPVRemapper.h as follows: + +namespace spv { + +class spirvbin_t +{ +public: + enum Options { ... }; + spirvbin_t(int verbose = 0); // construct + + // remap an existing binary in memory + void remap(std::vector& spv, std::uint32_t opts = DO_EVERYTHING); + + // Type for error/log handler functions + typedef std::function errorfn_t; + typedef std::function logfn_t; + + // Register error/log handling functions (can be c/c++ fn, lambda fn, or functor) + static void registerErrorHandler(errorfn_t handler) { errorHandler = handler; } + static void registerLogHandler(logfn_t handler) { logHandler = handler; } +}; + +} // namespace spv + +The class definition is in SPVRemapper.cpp. + +remap() accepts an std::vector of SPIR-V words, modifies them per the +request given in 'opts', and leaves the 'spv' container with the result. +It is safe to instantiate one spirvbin_t per thread and process a different +SPIR-V in each. + +The "opts" parameter to remap() accepts a bit mask of desired remapping +options. See REMAPPING AND OPTIMIZATION OPTIONS. + +On error, the function supplied to registerErrorHandler() will be invoked. +This can be a standard C/C++ function, a lambda function, or a functor. +The default handler simply calls exit(5); The error handler is a static +member, so need only be set up once, not once per spirvbin_t instance. + +Log messages are supplied to registerLogHandler(). By default, log +messages are eaten silently. The log handler is also a static member. + +BUILD DEPENDENCIES: +-------------------------------------------------------------------------------- + 1. C++11 compatible compiler + 2. cmake + 3. glslang + + +BUILDING +-------------------------------------------------------------------------------- +The standalone remapper is built along side glslangValidator through its +normal build process. + + +REMAPPING AND OPTIMIZATION OPTIONS +-------------------------------------------------------------------------------- +API: + These are bits defined under spv::spirvbin_t::, and can be + bitwise or-ed together as desired. + + MAP_TYPES = canonicalize type IDs + MAP_NAMES = canonicalize named data + MAP_FUNCS = canonicalize function bodies + DCE_FUNCS = remove dead functions + DCE_VARS = remove dead variables + DCE_TYPES = remove dead types + OPT_LOADSTORE = optimize unneeded load/stores + MAP_ALL = (MAP_TYPES | MAP_NAMES | MAP_FUNCS) + DCE_ALL = (DCE_FUNCS | DCE_VARS | DCE_TYPES) + OPT_ALL = (OPT_LOADSTORE) + ALL_BUT_STRIP = (MAP_ALL | DCE_ALL | OPT_ALL) + DO_EVERYTHING = (STRIP | ALL_BUT_STRIP) + diff --git a/3rdparty/bgfx/3rdparty/glslang/README.md b/3rdparty/bgfx/3rdparty/glslang/README.md new file mode 100644 index 0000000..193e38d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/README.md @@ -0,0 +1,306 @@ +Also see the Khronos landing page for glslang as a reference front end: + +https://www.khronos.org/opengles/sdk/tools/Reference-Compiler/ + +The above page includes where to get binaries, and is kept up to date +regarding the feature level of glslang. + +glslang +======= + +[![Build Status](https://travis-ci.org/KhronosGroup/glslang.svg?branch=master)](https://travis-ci.org/KhronosGroup/glslang) +[![Build status](https://ci.appveyor.com/api/projects/status/q6fi9cb0qnhkla68/branch/master?svg=true)](https://ci.appveyor.com/project/Khronoswebmaster/glslang/branch/master) + +An OpenGL and OpenGL ES shader front end and validator. + +There are several components: + +1. A GLSL/ESSL front-end for reference validation and translation of GLSL/ESSL into an AST. + +2. An HLSL front-end for translation of a broad generic HLL into the AST. See [issue 362](https://github.com/KhronosGroup/glslang/issues/362) and [issue 701](https://github.com/KhronosGroup/glslang/issues/701) for current status. + +3. A SPIR-V back end for translating the AST to SPIR-V. + +4. A standalone wrapper, `glslangValidator`, that can be used as a command-line tool for the above. + +How to add a feature protected by a version/extension/stage/profile: See the +comment in `glslang/MachineIndependent/Versions.cpp`. + +Tasks waiting to be done are documented as GitHub issues. + +Execution of Standalone Wrapper +------------------------------- + +To use the standalone binary form, execute `glslangValidator`, and it will print +a usage statement. Basic operation is to give it a file containing a shader, +and it will print out warnings/errors and optionally an AST. + +The applied stage-specific rules are based on the file extension: +* `.vert` for a vertex shader +* `.tesc` for a tessellation control shader +* `.tese` for a tessellation evaluation shader +* `.geom` for a geometry shader +* `.frag` for a fragment shader +* `.comp` for a compute shader + +There is also a non-shader extension +* `.conf` for a configuration file of limits, see usage statement for example + +Building +-------- + +### Dependencies + +* [CMake][cmake]: for generating compilation targets. +* [bison][bison]: _optional_, but needed when changing the grammar (glslang.y). +* [googletest][googletest]: _optional_, but should use if making any changes to glslang. + +### Build steps + +#### 1) Check-Out this project + +```bash +cd +# If using SSH +git clone git@github.com:KhronosGroup/glslang.git +# Or if using HTTPS +git clone https://github.com/KhronosGroup/glslang.git +``` + +#### 2) Check-Out External Projects + +```bash +cd +git clone https://github.com/google/googletest.git External/googletest +``` + +#### 3) Configure + +Assume the source directory is `$SOURCE_DIR` and +the build directory is `$BUILD_DIR`: + +For building on Linux (assuming using the Ninja generator): + +```bash +cd $BUILD_DIR + +cmake -GNinja -DCMAKE_BUILD_TYPE={Debug|Release|RelWithDebInfo} \ + -DCMAKE_INSTALL_PREFIX=`pwd`/install $SOURCE_DIR +``` + +For building on Windows: + +```bash +cmake $SOURCE_DIR -DCMAKE_INSTALL_PREFIX=`pwd`/install +# The CMAKE_INSTALL_PREFIX part is for testing (explained later). +``` + +The CMake GUI also works for Windows (version 3.4.1 tested). + +#### 4) Build and Install + +```bash +# for Linux: +ninja install + +# for Windows: +cmake --build . --config {Release|Debug|MinSizeRel|RelWithDebInfo} \ + --target install +``` + +If using MSVC, after running CMake to configure, use the +Configuration Manager to check the `INSTALL` project. + +### If you need to change the GLSL grammar + +The grammar in `glslang/MachineIndependent/glslang.y` has to be recompiled with +bison if it changes, the output files are committed to the repo to avoid every +developer needing to have bison configured to compile the project when grammar +changes are quite infrequent. For windows you can get binaries from +[GnuWin32][bison-gnu-win32]. + +The command to rebuild is: + +```bash +bison --defines=MachineIndependent/glslang_tab.cpp.h + -t MachineIndependent/glslang.y + -o MachineIndependent/glslang_tab.cpp +``` + +The above command is also available in the bash script at +`glslang/updateGrammar`. + +Testing +------- + +Right now, there are two test harnesses existing in glslang: one is [Google +Test](gtests/), one is the [`runtests` script](Test/runtests). The former +runs unit tests and single-shader single-threaded integration tests, while +the latter runs multiple-shader linking tests and multi-threaded tests. + +### Running tests + +The [`runtests` script](Test/runtests) requires compiled binaries to be +installed into `$BUILD_DIR/install`. Please make sure you have supplied the +correct configuration to CMake (using `-DCMAKE_INSTALL_PREFIX`) when building; +otherwise, you may want to modify the path in the `runtests` script. + +Running Google Test-backed tests: + +```bash +cd $BUILD_DIR + +# for Linux: +ctest + +# for Windows: +ctest -C {Debug|Release|RelWithDebInfo|MinSizeRel} + +# or, run the test binary directly +# (which gives more fine-grained control like filtering): +/glslangtests +``` + +Running `runtests` script-backed tests: + +```bash +cd $SOURCE_DIR/Test && ./runtests +``` + +### Contributing tests + +Test results should always be included with a pull request that modifies +functionality. + +If you are writing unit tests, please use the Google Test framework and +place the tests under the `gtests/` directory. + +Integration tests are placed in the `Test/` directory. It contains test input +and a subdirectory `baseResults/` that contains the expected results of the +tests. Both the tests and `baseResults/` are under source-code control. + +Google Test runs those integration tests by reading the test input, compiling +them, and then compare against the expected results in `baseResults/`. The +integration tests to run via Google Test is registered in various +`gtests/*.FromFile.cpp` source files. `glslangtests` provides a command-line +option `--update-mode`, which, if supplied, will overwrite the golden files +under the `baseResults/` directory with real output from that invocation. +For more information, please check `gtests/` directory's +[README](gtests/README.md). + +For the `runtests` script, it will generate current results in the +`localResults/` directory and `diff` them against the `baseResults/`. +When you want to update the tracked test results, they need to be +copied from `localResults/` to `baseResults/`. This can be done by +the `bump` shell script. + +You can add your own private list of tests, not tracked publicly, by using +`localtestlist` to list non-tracked tests. This is automatically read +by `runtests` and included in the `diff` and `bump` process. + +Programmatic Interfaces +----------------------- + +Another piece of software can programmatically translate shaders to an AST +using one of two different interfaces: +* A new C++ class-oriented interface, or +* The original C functional interface + +The `main()` in `StandAlone/StandAlone.cpp` shows examples using both styles. + +### C++ Class Interface (new, preferred) + +This interface is in roughly the last 1/3 of `ShaderLang.h`. It is in the +glslang namespace and contains the following. + +```cxx +const char* GetEsslVersionString(); +const char* GetGlslVersionString(); +bool InitializeProcess(); +void FinalizeProcess(); + +class TShader + bool parse(...); + void setStrings(...); + const char* getInfoLog(); + +class TProgram + void addShader(...); + bool link(...); + const char* getInfoLog(); + Reflection queries +``` + +See `ShaderLang.h` and the usage of it in `StandAlone/StandAlone.cpp` for more +details. + +### C Functional Interface (orignal) + +This interface is in roughly the first 2/3 of `ShaderLang.h`, and referred to +as the `Sh*()` interface, as all the entry points start `Sh`. + +The `Sh*()` interface takes a "compiler" call-back object, which it calls after +building call back that is passed the AST and can then execute a backend on it. + +The following is a simplified resulting run-time call stack: + +```c +ShCompile(shader, compiler) -> compiler(AST) -> +``` + +In practice, `ShCompile()` takes shader strings, default version, and +warning/error and other options for controlling compilation. + +Basic Internal Operation +------------------------ + +* Initial lexical analysis is done by the preprocessor in + `MachineIndependent/Preprocessor`, and then refined by a GLSL scanner + in `MachineIndependent/Scan.cpp`. There is currently no use of flex. + +* Code is parsed using bison on `MachineIndependent/glslang.y` with the + aid of a symbol table and an AST. The symbol table is not passed on to + the back-end; the intermediate representation stands on its own. + The tree is built by the grammar productions, many of which are + offloaded into `ParseHelper.cpp`, and by `Intermediate.cpp`. + +* The intermediate representation is very high-level, and represented + as an in-memory tree. This serves to lose no information from the + original program, and to have efficient transfer of the result from + parsing to the back-end. In the AST, constants are propogated and + folded, and a very small amount of dead code is eliminated. + + To aid linking and reflection, the last top-level branch in the AST + lists all global symbols. + +* The primary algorithm of the back-end compiler is to traverse the + tree (high-level intermediate representation), and create an internal + object code representation. There is an example of how to do this + in `MachineIndependent/intermOut.cpp`. + +* Reduction of the tree to a linear byte-code style low-level intermediate + representation is likely a good way to generate fully optimized code. + +* There is currently some dead old-style linker-type code still lying around. + +* Memory pool: parsing uses types derived from C++ `std` types, using a + custom allocator that puts them in a memory pool. This makes allocation + of individual container/contents just few cycles and deallocation free. + This pool is popped after the AST is made and processed. + + The use is simple: if you are going to call `new`, there are three cases: + + - the object comes from the pool (its base class has the macro + `POOL_ALLOCATOR_NEW_DELETE` in it) and you do not have to call `delete` + + - it is a `TString`, in which case call `NewPoolTString()`, which gets + it from the pool, and there is no corresponding `delete` + + - the object does not come from the pool, and you have to do normal + C++ memory management of what you `new` + + +[cmake]: https://cmake.org/ +[bison]: https://www.gnu.org/software/bison/ +[googletest]: https://github.com/google/googletest +[bison-gnu-win32]: http://gnuwin32.sourceforge.net/packages/bison.htm diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/CMakeLists.txt b/3rdparty/bgfx/3rdparty/glslang/SPIRV/CMakeLists.txt new file mode 100755 index 0000000..aaf1178 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/CMakeLists.txt @@ -0,0 +1,57 @@ +set(SOURCES + GlslangToSpv.cpp + InReadableOrder.cpp + Logger.cpp + SpvBuilder.cpp + doc.cpp + disassemble.cpp) + +set(SPVREMAP_SOURCES + SPVRemapper.cpp + doc.cpp) + +set(HEADERS + bitutils.h + spirv.hpp + GLSL.std.450.h + GLSL.ext.KHR.h + GlslangToSpv.h + hex_float.h + Logger.h + SpvBuilder.h + spvIR.h + doc.h + disassemble.h) + +set(SPVREMAP_HEADERS + SPVRemapper.h + doc.h) + +if(ENABLE_AMD_EXTENSIONS) + list(APPEND + HEADERS + GLSL.ext.AMD.h) +endif(ENABLE_AMD_EXTENSIONS) + +if(ENABLE_NV_EXTENSIONS) + list(APPEND + HEADERS + GLSL.ext.NV.h) +endif(ENABLE_NV_EXTENSIONS) + +add_library(SPIRV STATIC ${SOURCES} ${HEADERS}) +set_property(TARGET SPIRV PROPERTY FOLDER glslang) +target_link_libraries(SPIRV glslang) + +add_library(SPVRemapper STATIC ${SPVREMAP_SOURCES} ${SPVREMAP_HEADERS}) +set_property(TARGET SPVRemapper PROPERTY FOLDER glslang) + +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) + +install(FILES ${HEADERS} ${SPVREMAP_HEADERS} DESTINATION include/SPIRV/) diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/GLSL.ext.AMD.h b/3rdparty/bgfx/3rdparty/glslang/SPIRV/GLSL.ext.AMD.h new file mode 100644 index 0000000..d2098cc --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/GLSL.ext.AMD.h @@ -0,0 +1,116 @@ +/* +** Copyright (c) 2014-2016 The Khronos Group Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a copy +** of this software and/or associated documentation files (the "Materials"), +** to deal in the Materials without restriction, including without limitation +** the rights to use, copy, modify, merge, publish, distribute, sublicense, +** and/or sell copies of the Materials, and to permit persons to whom the +** Materials are 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 Materials. +** +** MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS +** STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND +** HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ +** +** THE MATERIALS ARE 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 MATERIALS OR THE USE OR OTHER DEALINGS +** IN THE MATERIALS. +*/ + +#ifndef GLSLextAMD_H +#define GLSLextAMD_H + +enum BuiltIn; +enum Decoration; +enum Op; + +static const int GLSLextAMDVersion = 100; +static const int GLSLextAMDRevision = 2; + +// SPV_AMD_shader_ballot +static const char* const E_SPV_AMD_shader_ballot = "SPV_AMD_shader_ballot"; + +static const Op OpGroupIAddNonUniformAMD = static_cast(5000); +static const Op OpGroupFAddNonUniformAMD = static_cast(5001); +static const Op OpGroupFMinNonUniformAMD = static_cast(5002); +static const Op OpGroupUMinNonUniformAMD = static_cast(5003); +static const Op OpGroupSMinNonUniformAMD = static_cast(5004); +static const Op OpGroupFMaxNonUniformAMD = static_cast(5005); +static const Op OpGroupUMaxNonUniformAMD = static_cast(5006); +static const Op OpGroupSMaxNonUniformAMD = static_cast(5007); + +enum ShaderBallotAMD { + ShaderBallotBadAMD = 0, // Don't use + + SwizzleInvocationsAMD = 1, + SwizzleInvocationsMaskedAMD = 2, + WriteInvocationAMD = 3, + MbcntAMD = 4, + + ShaderBallotCountAMD +}; + +// SPV_AMD_shader_trinary_minmax +static const char* const E_SPV_AMD_shader_trinary_minmax = "SPV_AMD_shader_trinary_minmax"; + +enum ShaderTrinaryMinMaxAMD { + ShaderTrinaryMinMaxBadAMD = 0, // Don't use + + FMin3AMD = 1, + UMin3AMD = 2, + SMin3AMD = 3, + FMax3AMD = 4, + UMax3AMD = 5, + SMax3AMD = 6, + FMid3AMD = 7, + UMid3AMD = 8, + SMid3AMD = 9, + + ShaderTrinaryMinMaxCountAMD +}; + +// 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(4992); +static const BuiltIn BuiltInBaryCoordNoPerspCentroidAMD = static_cast(4993); +static const BuiltIn BuiltInBaryCoordNoPerspSampleAMD = static_cast(4994); +static const BuiltIn BuiltInBaryCoordSmoothAMD = static_cast(4995); +static const BuiltIn BuiltInBaryCoordSmoothCentroidAMD = static_cast(4996); +static const BuiltIn BuiltInBaryCoordSmoothSampleAMD = static_cast(4997); +static const BuiltIn BuiltInBaryCoordPullModelAMD = static_cast(4998); + +static const Decoration DecorationExplicitInterpAMD = static_cast(4999); + +enum ShaderExplicitVertexParameterAMD { + ShaderExplicitVertexParameterBadAMD = 0, // Don't use + + InterpolateAtVertexAMD = 1, + + ShaderExplicitVertexParameterCountAMD +}; + +// SPV_AMD_gcn_shader +static const char* const E_SPV_AMD_gcn_shader = "SPV_AMD_gcn_shader"; + +enum GcnShaderAMD { + GcnShaderBadAMD = 0, // Don't use + + CubeFaceIndexAMD = 1, + CubeFaceCoordAMD = 2, + TimeAMD = 3, + + GcnShaderCountAMD +}; + +// SPV_AMD_gpu_shader_half_float +static const char* const E_SPV_AMD_gpu_shader_half_float = "SPV_AMD_gpu_shader_half_float"; + +#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 new file mode 100644 index 0000000..a8f20c3 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/GLSL.ext.KHR.h @@ -0,0 +1,43 @@ +/* +** Copyright (c) 2014-2016 The Khronos Group Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a copy +** of this software and/or associated documentation files (the "Materials"), +** to deal in the Materials without restriction, including without limitation +** the rights to use, copy, modify, merge, publish, distribute, sublicense, +** and/or sell copies of the Materials, and to permit persons to whom the +** Materials are 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 Materials. +** +** MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS +** STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND +** HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ +** +** THE MATERIALS ARE 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 MATERIALS OR THE USE OR OTHER DEALINGS +** IN THE MATERIALS. +*/ + +#ifndef GLSLextKHR_H +#define GLSLextKHR_H + +enum BuiltIn; +enum Op; +enum Capability; + +static const int GLSLextKHRVersion = 100; +static const int GLSLextKHRRevision = 1; + +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"; + +#endif // #ifndef GLSLextKHR_H diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/GLSL.ext.NV.h b/3rdparty/bgfx/3rdparty/glslang/SPIRV/GLSL.ext.NV.h new file mode 100644 index 0000000..c01858b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/GLSL.ext.NV.h @@ -0,0 +1,54 @@ +/* +** Copyright (c) 2014-2017 The Khronos Group Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a copy +** of this software and/or associated documentation files (the "Materials"), +** to deal in the Materials without restriction, including without limitation +** the rights to use, copy, modify, merge, publish, distribute, sublicense, +** and/or sell copies of the Materials, and to permit persons to whom the +** Materials are 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 Materials. +** +** MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS +** STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND +** HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ +** +** THE MATERIALS ARE 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 MATERIALS OR THE USE OR OTHER DEALINGS +** IN THE MATERIALS. +*/ + +#ifndef GLSLextNV_H +#define GLSLextNV_H + +enum BuiltIn; +enum Decoration; +enum Op; +enum Capability; + +static const int GLSLextNVVersion = 100; +static const int GLSLextNVRevision = 5; + +//SPV_NV_sample_mask_override_coverage +const char* const E_SPV_NV_sample_mask_override_coverage = "SPV_NV_sample_mask_override_coverage"; + +//SPV_NV_geometry_shader_passthrough +const char* const E_SPV_NV_geometry_shader_passthrough = "SPV_NV_geometry_shader_passthrough"; + +//SPV_NV_viewport_array2 +const char* const E_SPV_NV_viewport_array2 = "SPV_NV_viewport_array2"; +const char* const E_ARB_shader_viewport_layer_array = "SPV_ARB_shader_viewport_layer_array"; + +//SPV_NV_stereo_view_rendering +const char* const E_SPV_NV_stereo_view_rendering = "SPV_NV_stereo_view_rendering"; + +//SPV_NVX_multiview_per_view_attributes +const char* const E_SPV_NVX_multiview_per_view_attributes = "SPV_NVX_multiview_per_view_attributes"; + +#endif // #ifndef GLSLextNV_H \ No newline at end of file diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/GLSL.std.450.h b/3rdparty/bgfx/3rdparty/glslang/SPIRV/GLSL.std.450.h new file mode 100755 index 0000000..df31092 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/GLSL.std.450.h @@ -0,0 +1,131 @@ +/* +** Copyright (c) 2014-2016 The Khronos Group Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a copy +** of this software and/or associated documentation files (the "Materials"), +** to deal in the Materials without restriction, including without limitation +** the rights to use, copy, modify, merge, publish, distribute, sublicense, +** and/or sell copies of the Materials, and to permit persons to whom the +** Materials are 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 Materials. +** +** MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS +** STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND +** HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ +** +** THE MATERIALS ARE 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 MATERIALS OR THE USE OR OTHER DEALINGS +** IN THE MATERIALS. +*/ + +#ifndef GLSLstd450_H +#define GLSLstd450_H + +static const int GLSLstd450Version = 100; +static const int GLSLstd450Revision = 1; + +enum GLSLstd450 { + GLSLstd450Bad = 0, // Don't use + + GLSLstd450Round = 1, + GLSLstd450RoundEven = 2, + GLSLstd450Trunc = 3, + GLSLstd450FAbs = 4, + GLSLstd450SAbs = 5, + GLSLstd450FSign = 6, + GLSLstd450SSign = 7, + GLSLstd450Floor = 8, + GLSLstd450Ceil = 9, + GLSLstd450Fract = 10, + + GLSLstd450Radians = 11, + GLSLstd450Degrees = 12, + GLSLstd450Sin = 13, + GLSLstd450Cos = 14, + GLSLstd450Tan = 15, + GLSLstd450Asin = 16, + GLSLstd450Acos = 17, + GLSLstd450Atan = 18, + GLSLstd450Sinh = 19, + GLSLstd450Cosh = 20, + GLSLstd450Tanh = 21, + GLSLstd450Asinh = 22, + GLSLstd450Acosh = 23, + GLSLstd450Atanh = 24, + GLSLstd450Atan2 = 25, + + GLSLstd450Pow = 26, + GLSLstd450Exp = 27, + GLSLstd450Log = 28, + GLSLstd450Exp2 = 29, + GLSLstd450Log2 = 30, + GLSLstd450Sqrt = 31, + GLSLstd450InverseSqrt = 32, + + GLSLstd450Determinant = 33, + GLSLstd450MatrixInverse = 34, + + GLSLstd450Modf = 35, // second operand needs an OpVariable to write to + GLSLstd450ModfStruct = 36, // no OpVariable operand + GLSLstd450FMin = 37, + GLSLstd450UMin = 38, + GLSLstd450SMin = 39, + GLSLstd450FMax = 40, + GLSLstd450UMax = 41, + GLSLstd450SMax = 42, + GLSLstd450FClamp = 43, + GLSLstd450UClamp = 44, + GLSLstd450SClamp = 45, + GLSLstd450FMix = 46, + GLSLstd450IMix = 47, // Reserved + GLSLstd450Step = 48, + GLSLstd450SmoothStep = 49, + + GLSLstd450Fma = 50, + GLSLstd450Frexp = 51, // second operand needs an OpVariable to write to + GLSLstd450FrexpStruct = 52, // no OpVariable operand + GLSLstd450Ldexp = 53, + + GLSLstd450PackSnorm4x8 = 54, + GLSLstd450PackUnorm4x8 = 55, + GLSLstd450PackSnorm2x16 = 56, + GLSLstd450PackUnorm2x16 = 57, + GLSLstd450PackHalf2x16 = 58, + GLSLstd450PackDouble2x32 = 59, + GLSLstd450UnpackSnorm2x16 = 60, + GLSLstd450UnpackUnorm2x16 = 61, + GLSLstd450UnpackHalf2x16 = 62, + GLSLstd450UnpackSnorm4x8 = 63, + GLSLstd450UnpackUnorm4x8 = 64, + GLSLstd450UnpackDouble2x32 = 65, + + GLSLstd450Length = 66, + GLSLstd450Distance = 67, + GLSLstd450Cross = 68, + GLSLstd450Normalize = 69, + GLSLstd450FaceForward = 70, + GLSLstd450Reflect = 71, + GLSLstd450Refract = 72, + + GLSLstd450FindILsb = 73, + GLSLstd450FindSMsb = 74, + GLSLstd450FindUMsb = 75, + + GLSLstd450InterpolateAtCentroid = 76, + GLSLstd450InterpolateAtSample = 77, + GLSLstd450InterpolateAtOffset = 78, + + GLSLstd450NMin = 79, + GLSLstd450NMax = 80, + GLSLstd450NClamp = 81, + + GLSLstd450Count +}; + +#endif // #ifndef GLSLstd450_H diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/GlslangToSpv.cpp b/3rdparty/bgfx/3rdparty/glslang/SPIRV/GlslangToSpv.cpp new file mode 100755 index 0000000..cdfb309 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/GlslangToSpv.cpp @@ -0,0 +1,5450 @@ +// +// Copyright (C) 2014-2016 LunarG, Inc. +// Copyright (C) 2015-2016 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. + +// +// Visit the nodes in the glslang intermediate tree representation to +// translate them to SPIR-V. +// + +#include "spirv.hpp" +#include "GlslangToSpv.h" +#include "SpvBuilder.h" +namespace spv { + #include "GLSL.std.450.h" + #include "GLSL.ext.KHR.h" +#ifdef AMD_EXTENSIONS + #include "GLSL.ext.AMD.h" +#endif +#ifdef NV_EXTENSIONS + #include "GLSL.ext.NV.h" +#endif +} + +// Glslang includes +#include "../glslang/MachineIndependent/localintermediate.h" +#include "../glslang/MachineIndependent/SymbolTable.h" +#include "../glslang/Include/Common.h" +#include "../glslang/Include/revision.h" + +#include +#include +#include +#include +#include +#include +#include + +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: + SpecConstantOpModeGuard(spv::Builder* builder) + : builder_(builder) { + previous_flag_ = builder->isInSpecConstCodeGenMode(); + } + ~SpecConstantOpModeGuard() { + previous_flag_ ? builder_->setToSpecConstCodeGenMode() + : builder_->setToNormalCodeGenMode(); + } + void turnOnSpecConstantOpMode() { + builder_->setToSpecConstCodeGenMode(); + } + +private: + spv::Builder* builder_; + bool previous_flag_; +}; +} + +// +// The main holder of information for translating glslang to SPIR-V. +// +// Derives from the AST walking base class. +// +class TGlslangToSpvTraverser : public glslang::TIntermTraverser { +public: + TGlslangToSpvTraverser(const glslang::TIntermediate*, spv::SpvBuildLogger* logger); + virtual ~TGlslangToSpvTraverser() { } + + bool visitAggregate(glslang::TVisit, glslang::TIntermAggregate*); + bool visitBinary(glslang::TVisit, glslang::TIntermBinary*); + void visitConstantUnion(glslang::TIntermConstantUnion*); + bool visitSelection(glslang::TVisit, glslang::TIntermSelection*); + bool visitSwitch(glslang::TVisit, glslang::TIntermSwitch*); + void visitSymbol(glslang::TIntermSymbol* symbol); + bool visitUnary(glslang::TVisit, glslang::TIntermUnary*); + bool visitLoop(glslang::TVisit, glslang::TIntermLoop*); + bool visitBranch(glslang::TVisit visit, glslang::TIntermBranch*); + + void finishSpv(); + void dumpSpv(std::vector& out); + +protected: + spv::Decoration TranslateInterpolationDecoration(const glslang::TQualifier& qualifier); + spv::Decoration TranslateAuxiliaryStorageDecoration(const glslang::TQualifier& qualifier); + spv::BuiltIn TranslateBuiltInDecoration(glslang::TBuiltInVariable, bool memberDeclaration); + spv::ImageFormat TranslateImageFormat(const glslang::TType& type); + spv::Id createSpvVariable(const glslang::TIntermSymbol*); + spv::Id getSampledType(const glslang::TSampler&); + spv::Id getInvertedSwizzleType(const glslang::TIntermTyped&); + spv::Id createInvertedSwizzle(spv::Decoration precision, const glslang::TIntermTyped&, spv::Id parentResult); + void convertSwizzle(const glslang::TIntermAggregate&, std::vector& swizzle); + spv::Id convertGlslangToSpvType(const glslang::TType& type); + spv::Id convertGlslangToSpvType(const glslang::TType& type, glslang::TLayoutPacking, const glslang::TQualifier&); + bool filterMember(const glslang::TType& member); + spv::Id convertGlslangStructToSpvType(const glslang::TType&, const glslang::TTypeList* glslangStruct, + glslang::TLayoutPacking, const glslang::TQualifier&); + void decorateStructType(const glslang::TType&, const glslang::TTypeList* glslangStruct, glslang::TLayoutPacking, + const glslang::TQualifier&, spv::Id); + spv::Id makeArraySizeId(const glslang::TArraySizes&, int dim); + spv::Id accessChainLoad(const glslang::TType& type); + void accessChainStore(const glslang::TType& type, spv::Id rvalue); + void multiTypeStore(const glslang::TType&, spv::Id rValue); + glslang::TLayoutPacking getExplicitLayout(const glslang::TType& type) const; + int getArrayStride(const glslang::TType& arrayType, glslang::TLayoutPacking, glslang::TLayoutMatrix); + int getMatrixStride(const glslang::TType& matrixType, glslang::TLayoutPacking, glslang::TLayoutMatrix); + void updateMemberOffset(const glslang::TType& structType, const glslang::TType& memberType, int& currentOffset, int& nextOffset, glslang::TLayoutPacking, glslang::TLayoutMatrix); + void declareUseOfStructMember(const glslang::TTypeList& members, int glslangMember); + + bool isShaderEntryPoint(const glslang::TIntermAggregate* node); + void makeFunctions(const glslang::TIntermSequence&); + void makeGlobalInitializers(const glslang::TIntermSequence&); + void visitFunctions(const glslang::TIntermSequence&); + void handleFunctionEntry(const glslang::TIntermAggregate* node); + void translateArguments(const glslang::TIntermAggregate& node, std::vector& arguments); + void translateArguments(glslang::TIntermUnary& node, std::vector& arguments); + spv::Id createImageTextureFunctionCall(glslang::TIntermOperator* node); + spv::Id handleUserFunctionCall(const glslang::TIntermAggregate*); + + spv::Id createBinaryOperation(glslang::TOperator op, spv::Decoration precision, spv::Decoration noContraction, spv::Id typeId, spv::Id left, spv::Id right, glslang::TBasicType typeProxy, bool reduceComparison = true); + spv::Id createBinaryMatrixOperation(spv::Op, spv::Decoration precision, spv::Decoration noContraction, spv::Id typeId, spv::Id left, spv::Id right); + spv::Id createUnaryOperation(glslang::TOperator op, spv::Decoration precision, spv::Decoration noContraction, spv::Id typeId, spv::Id operand,glslang::TBasicType typeProxy); + spv::Id createUnaryMatrixOperation(spv::Op op, spv::Decoration precision, spv::Decoration noContraction, spv::Id typeId, spv::Id operand,glslang::TBasicType typeProxy); + spv::Id createConversion(glslang::TOperator op, spv::Decoration precision, spv::Decoration noContraction, spv::Id destTypeId, spv::Id operand, glslang::TBasicType typeProxy); + spv::Id makeSmearedConstant(spv::Id constant, int vectorSize); + spv::Id createAtomicOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId, std::vector& operands, glslang::TBasicType typeProxy); + spv::Id createInvocationsOperation(glslang::TOperator op, spv::Id typeId, std::vector& operands, glslang::TBasicType typeProxy); + spv::Id CreateInvocationsVectorOperation(spv::Op op, spv::GroupOperation groupOperation, spv::Id typeId, std::vector& operands); + spv::Id createMiscOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId, std::vector& operands, glslang::TBasicType typeProxy); + spv::Id createNoArgOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId); + spv::Id getSymbolId(const glslang::TIntermSymbol* node); + void addDecoration(spv::Id id, spv::Decoration dec); + void addDecoration(spv::Id id, spv::Decoration dec, unsigned value); + void addMemberDecoration(spv::Id id, int member, spv::Decoration dec); + void addMemberDecoration(spv::Id id, int member, spv::Decoration dec, unsigned value); + spv::Id createSpvConstant(const glslang::TIntermTyped&); + spv::Id createSpvConstantFromConstUnionArray(const glslang::TType& type, const glslang::TConstUnionArray&, int& nextConst, bool specConstant); + bool isTrivialLeaf(const glslang::TIntermTyped* node); + bool isTrivial(const glslang::TIntermTyped* node); + spv::Id createShortCircuit(glslang::TOperator, glslang::TIntermTyped& left, glslang::TIntermTyped& right); + spv::Id getExtBuiltins(const char* name); + + spv::Function* shaderEntry; + spv::Function* currentFunction; + spv::Instruction* entryPoint; + int sequenceDepth; + + spv::SpvBuildLogger* logger; + + // There is a 1:1 mapping between a spv builder and a module; this is thread safe + spv::Builder builder; + bool inEntryPoint; + bool entryPointTerminated; + bool linkageOnly; // true when visiting the set of objects in the AST present only for establishing interface, whether or not they were statically used + std::set iOSet; // all input/output variables from either static use or declaration of interface + const glslang::TIntermediate* glslangIntermediate; + spv::Id stdBuiltins; + std::unordered_map extBuiltinMap; + + std::unordered_map symbolValues; + std::unordered_set rValueParameters; // set of formal function parameters passed as rValues, rather than a pointer + std::unordered_map functionMap; + std::unordered_map structMap[glslang::ElpCount][glslang::ElmCount]; + std::unordered_map > memberRemapper; // for mapping glslang block indices to spv indices (e.g., due to hidden members) + std::stack breakForLoop; // false means break for switch +}; + +// +// Helper functions for translating glslang representations to SPIR-V enumerants. +// + +// Translate glslang profile to SPIR-V source language. +spv::SourceLanguage TranslateSourceLanguage(glslang::EShSource source, EProfile profile) +{ + switch (source) { + case glslang::EShSourceGlsl: + switch (profile) { + case ENoProfile: + case ECoreProfile: + case ECompatibilityProfile: + return spv::SourceLanguageGLSL; + case EEsProfile: + return spv::SourceLanguageESSL; + default: + return spv::SourceLanguageUnknown; + } + case glslang::EShSourceHlsl: + // Use SourceLanguageUnknown instead of SourceLanguageHLSL for now, until Vulkan knows what HLSL is + return spv::SourceLanguageUnknown; + default: + return spv::SourceLanguageUnknown; + } +} + +// Translate glslang language (stage) to SPIR-V execution model. +spv::ExecutionModel TranslateExecutionModel(EShLanguage stage) +{ + switch (stage) { + case EShLangVertex: return spv::ExecutionModelVertex; + case EShLangTessControl: return spv::ExecutionModelTessellationControl; + case EShLangTessEvaluation: return spv::ExecutionModelTessellationEvaluation; + case EShLangGeometry: return spv::ExecutionModelGeometry; + case EShLangFragment: return spv::ExecutionModelFragment; + case EShLangCompute: return spv::ExecutionModelGLCompute; + default: + assert(0); + return spv::ExecutionModelFragment; + } +} + +// 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) +{ + switch (sampler.dim) { + case glslang::Esd1D: return spv::Dim1D; + case glslang::Esd2D: return spv::Dim2D; + case glslang::Esd3D: return spv::Dim3D; + case glslang::EsdCube: return spv::DimCube; + case glslang::EsdRect: return spv::DimRect; + case glslang::EsdBuffer: return spv::DimBuffer; + case glslang::EsdSubpass: return spv::DimSubpassData; + default: + assert(0); + return spv::Dim2D; + } +} + +// Translate glslang precision to SPIR-V precision decorations. +spv::Decoration TranslatePrecisionDecoration(glslang::TPrecisionQualifier glslangPrecision) +{ + switch (glslangPrecision) { + case glslang::EpqLow: return spv::DecorationRelaxedPrecision; + case glslang::EpqMedium: return spv::DecorationRelaxedPrecision; + default: + return spv::NoPrecision; + } +} + +// Translate glslang type to SPIR-V precision decorations. +spv::Decoration TranslatePrecisionDecoration(const glslang::TType& type) +{ + return TranslatePrecisionDecoration(type.getQualifier().precision); +} + +// Translate glslang type to SPIR-V block decorations. +spv::Decoration TranslateBlockDecoration(const glslang::TType& type) +{ + if (type.getBasicType() == glslang::EbtBlock) { + switch (type.getQualifier().storage) { + case glslang::EvqUniform: return spv::DecorationBlock; + case glslang::EvqBuffer: return spv::DecorationBufferBlock; + case glslang::EvqVaryingIn: return spv::DecorationBlock; + case glslang::EvqVaryingOut: return spv::DecorationBlock; + default: + assert(0); + break; + } + } + + return spv::DecorationMax; +} + +// Translate glslang type to SPIR-V memory decorations. +void TranslateMemoryDecoration(const glslang::TQualifier& qualifier, std::vector& memory) +{ + if (qualifier.coherent) + memory.push_back(spv::DecorationCoherent); + if (qualifier.volatil) + memory.push_back(spv::DecorationVolatile); + if (qualifier.restrict) + memory.push_back(spv::DecorationRestrict); + if (qualifier.readonly) + memory.push_back(spv::DecorationNonWritable); + if (qualifier.writeonly) + memory.push_back(spv::DecorationNonReadable); +} + +// Translate glslang type to SPIR-V layout decorations. +spv::Decoration TranslateLayoutDecoration(const glslang::TType& type, glslang::TLayoutMatrix matrixLayout) +{ + if (type.isMatrix()) { + switch (matrixLayout) { + case glslang::ElmRowMajor: + return spv::DecorationRowMajor; + case glslang::ElmColumnMajor: + return spv::DecorationColMajor; + default: + // opaque layouts don't need a majorness + return spv::DecorationMax; + } + } else { + switch (type.getBasicType()) { + default: + return spv::DecorationMax; + break; + case glslang::EbtBlock: + switch (type.getQualifier().storage) { + case glslang::EvqUniform: + case glslang::EvqBuffer: + switch (type.getQualifier().layoutPacking) { + case glslang::ElpShared: return spv::DecorationGLSLShared; + case glslang::ElpPacked: return spv::DecorationGLSLPacked; + default: + return spv::DecorationMax; + } + case glslang::EvqVaryingIn: + case glslang::EvqVaryingOut: + assert(type.getQualifier().layoutPacking == glslang::ElpNone); + return spv::DecorationMax; + default: + assert(0); + return spv::DecorationMax; + } + } + } +} + +// Translate glslang type to SPIR-V interpolation decorations. +// Returns spv::DecorationMax when no decoration +// should be applied. +spv::Decoration TGlslangToSpvTraverser::TranslateInterpolationDecoration(const glslang::TQualifier& qualifier) +{ + if (qualifier.smooth) + // Smooth decoration doesn't exist in SPIR-V 1.0 + return spv::DecorationMax; + else if (qualifier.nopersp) + return spv::DecorationNoPerspective; + else if (qualifier.flat) + return spv::DecorationFlat; +#ifdef AMD_EXTENSIONS + else if (qualifier.explicitInterp) { + builder.addExtension(spv::E_SPV_AMD_shader_explicit_vertex_parameter); + return spv::DecorationExplicitInterpAMD; + } +#endif + else + return spv::DecorationMax; +} + +// Translate glslang type to SPIR-V auxiliary storage decorations. +// Returns spv::DecorationMax when no decoration +// should be applied. +spv::Decoration TGlslangToSpvTraverser::TranslateAuxiliaryStorageDecoration(const glslang::TQualifier& qualifier) +{ + if (qualifier.patch) + return spv::DecorationPatch; + else if (qualifier.centroid) + return spv::DecorationCentroid; + else if (qualifier.sample) { + builder.addCapability(spv::CapabilitySampleRateShading); + return spv::DecorationSample; + } else + return spv::DecorationMax; +} + +// If glslang type is invariant, return SPIR-V invariant decoration. +spv::Decoration TranslateInvariantDecoration(const glslang::TQualifier& qualifier) +{ + if (qualifier.invariant) + return spv::DecorationInvariant; + else + return spv::DecorationMax; +} + +// If glslang type is noContraction, return SPIR-V NoContraction decoration. +spv::Decoration TranslateNoContractionDecoration(const glslang::TQualifier& qualifier) +{ + if (qualifier.noContraction) + return spv::DecorationNoContraction; + else + return spv::DecorationMax; +} + +// Translate a glslang built-in variable to a SPIR-V built in decoration. Also generate +// associated capabilities when required. For some built-in variables, a capability +// is generated only when using the variable in an executable instruction, but not when +// just declaring a struct member variable with it. This is true for PointSize, +// ClipDistance, and CullDistance. +spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltInVariable builtIn, bool memberDeclaration) +{ + switch (builtIn) { + case glslang::EbvPointSize: + // Defer adding the capability until the built-in is actually used. + if (! memberDeclaration) { + switch (glslangIntermediate->getStage()) { + case EShLangGeometry: + builder.addCapability(spv::CapabilityGeometryPointSize); + break; + case EShLangTessControl: + case EShLangTessEvaluation: + builder.addCapability(spv::CapabilityTessellationPointSize); + break; + default: + break; + } + } + return spv::BuiltInPointSize; + + // These *Distance capabilities logically belong here, but if the member is declared and + // then never used, consumers of SPIR-V prefer the capability not be declared. + // They are now generated when used, rather than here when declared. + // Potentially, the specification should be more clear what the minimum + // use needed is to trigger the capability. + // + case glslang::EbvClipDistance: + if (!memberDeclaration) + builder.addCapability(spv::CapabilityClipDistance); + return spv::BuiltInClipDistance; + + case glslang::EbvCullDistance: + if (!memberDeclaration) + builder.addCapability(spv::CapabilityCullDistance); + 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.addExtension(spv::E_SPV_NV_viewport_array2); + builder.addCapability(spv::CapabilityShaderViewportIndexLayerNV); + } +#endif + } + return spv::BuiltInViewportIndex; + + case glslang::EbvSampleId: + builder.addCapability(spv::CapabilitySampleRateShading); + return spv::BuiltInSampleId; + + case glslang::EbvSamplePosition: + builder.addCapability(spv::CapabilitySampleRateShading); + 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.addExtension(spv::E_SPV_NV_viewport_array2); + builder.addCapability(spv::CapabilityShaderViewportIndexLayerNV); + } +#endif + } + + return spv::BuiltInLayer; + + case glslang::EbvPosition: return spv::BuiltInPosition; + case glslang::EbvVertexId: return spv::BuiltInVertexId; + case glslang::EbvInstanceId: return spv::BuiltInInstanceId; + case glslang::EbvVertexIndex: return spv::BuiltInVertexIndex; + case glslang::EbvInstanceIndex: return spv::BuiltInInstanceIndex; + + case glslang::EbvBaseVertex: + builder.addExtension(spv::E_SPV_KHR_shader_draw_parameters); + builder.addCapability(spv::CapabilityDrawParameters); + return spv::BuiltInBaseVertex; + + case glslang::EbvBaseInstance: + builder.addExtension(spv::E_SPV_KHR_shader_draw_parameters); + builder.addCapability(spv::CapabilityDrawParameters); + return spv::BuiltInBaseInstance; + + case glslang::EbvDrawId: + builder.addExtension(spv::E_SPV_KHR_shader_draw_parameters); + builder.addCapability(spv::CapabilityDrawParameters); + return spv::BuiltInDrawIndex; + + case glslang::EbvPrimitiveId: + if (glslangIntermediate->getStage() == EShLangFragment) + builder.addCapability(spv::CapabilityGeometry); + return spv::BuiltInPrimitiveId; + + case glslang::EbvInvocationId: return spv::BuiltInInvocationId; + case glslang::EbvTessLevelInner: return spv::BuiltInTessLevelInner; + case glslang::EbvTessLevelOuter: return spv::BuiltInTessLevelOuter; + case glslang::EbvTessCoord: return spv::BuiltInTessCoord; + case glslang::EbvPatchVertices: return spv::BuiltInPatchVertices; + case glslang::EbvFragCoord: return spv::BuiltInFragCoord; + case glslang::EbvPointCoord: return spv::BuiltInPointCoord; + case glslang::EbvFace: return spv::BuiltInFrontFacing; + case glslang::EbvFragDepth: return spv::BuiltInFragDepth; + case glslang::EbvHelperInvocation: return spv::BuiltInHelperInvocation; + case glslang::EbvNumWorkGroups: return spv::BuiltInNumWorkgroups; + case glslang::EbvWorkGroupSize: return spv::BuiltInWorkgroupSize; + case glslang::EbvWorkGroupId: return spv::BuiltInWorkgroupId; + case glslang::EbvLocalInvocationId: return spv::BuiltInLocalInvocationId; + case glslang::EbvLocalInvocationIndex: return spv::BuiltInLocalInvocationIndex; + case glslang::EbvGlobalInvocationId: return spv::BuiltInGlobalInvocationId; + + case glslang::EbvSubGroupSize: + builder.addExtension(spv::E_SPV_KHR_shader_ballot); + builder.addCapability(spv::CapabilitySubgroupBallotKHR); + return spv::BuiltInSubgroupSize; + + case glslang::EbvSubGroupInvocation: + builder.addExtension(spv::E_SPV_KHR_shader_ballot); + builder.addCapability(spv::CapabilitySubgroupBallotKHR); + return spv::BuiltInSubgroupLocalInvocationId; + + case glslang::EbvSubGroupEqMask: + builder.addExtension(spv::E_SPV_KHR_shader_ballot); + builder.addCapability(spv::CapabilitySubgroupBallotKHR); + return spv::BuiltInSubgroupEqMaskKHR; + + case glslang::EbvSubGroupGeMask: + builder.addExtension(spv::E_SPV_KHR_shader_ballot); + builder.addCapability(spv::CapabilitySubgroupBallotKHR); + return spv::BuiltInSubgroupGeMaskKHR; + + case glslang::EbvSubGroupGtMask: + builder.addExtension(spv::E_SPV_KHR_shader_ballot); + builder.addCapability(spv::CapabilitySubgroupBallotKHR); + return spv::BuiltInSubgroupGtMaskKHR; + + case glslang::EbvSubGroupLeMask: + builder.addExtension(spv::E_SPV_KHR_shader_ballot); + builder.addCapability(spv::CapabilitySubgroupBallotKHR); + return spv::BuiltInSubgroupLeMaskKHR; + + case glslang::EbvSubGroupLtMask: + builder.addExtension(spv::E_SPV_KHR_shader_ballot); + builder.addCapability(spv::CapabilitySubgroupBallotKHR); + return spv::BuiltInSubgroupLtMaskKHR; + +#ifdef AMD_EXTENSIONS + case glslang::EbvBaryCoordNoPersp: + builder.addExtension(spv::E_SPV_AMD_shader_explicit_vertex_parameter); + return spv::BuiltInBaryCoordNoPerspAMD; + + case glslang::EbvBaryCoordNoPerspCentroid: + builder.addExtension(spv::E_SPV_AMD_shader_explicit_vertex_parameter); + return spv::BuiltInBaryCoordNoPerspCentroidAMD; + + case glslang::EbvBaryCoordNoPerspSample: + builder.addExtension(spv::E_SPV_AMD_shader_explicit_vertex_parameter); + return spv::BuiltInBaryCoordNoPerspSampleAMD; + + case glslang::EbvBaryCoordSmooth: + builder.addExtension(spv::E_SPV_AMD_shader_explicit_vertex_parameter); + return spv::BuiltInBaryCoordSmoothAMD; + + case glslang::EbvBaryCoordSmoothCentroid: + builder.addExtension(spv::E_SPV_AMD_shader_explicit_vertex_parameter); + return spv::BuiltInBaryCoordSmoothCentroidAMD; + + case glslang::EbvBaryCoordSmoothSample: + builder.addExtension(spv::E_SPV_AMD_shader_explicit_vertex_parameter); + return spv::BuiltInBaryCoordSmoothSampleAMD; + + case glslang::EbvBaryCoordPullModel: + builder.addExtension(spv::E_SPV_AMD_shader_explicit_vertex_parameter); + return spv::BuiltInBaryCoordPullModelAMD; +#endif + + case glslang::EbvDeviceIndex: + builder.addExtension(spv::E_SPV_KHR_device_group); + builder.addCapability(spv::CapabilityDeviceGroup); + return spv::BuiltInDeviceIndex; + + case glslang::EbvViewIndex: + builder.addExtension(spv::E_SPV_KHR_multiview); + builder.addCapability(spv::CapabilityMultiView); + return spv::BuiltInViewIndex; + +#ifdef NV_EXTENSIONS + case glslang::EbvViewportMaskNV: + if (!memberDeclaration) { + builder.addExtension(spv::E_SPV_NV_viewport_array2); + builder.addCapability(spv::CapabilityShaderViewportMaskNV); + } + return spv::BuiltInViewportMaskNV; + case glslang::EbvSecondaryPositionNV: + if (!memberDeclaration) { + builder.addExtension(spv::E_SPV_NV_stereo_view_rendering); + builder.addCapability(spv::CapabilityShaderStereoViewNV); + } + return spv::BuiltInSecondaryPositionNV; + case glslang::EbvSecondaryViewportMaskNV: + if (!memberDeclaration) { + builder.addExtension(spv::E_SPV_NV_stereo_view_rendering); + builder.addCapability(spv::CapabilityShaderStereoViewNV); + } + return spv::BuiltInSecondaryViewportMaskNV; + case glslang::EbvPositionPerViewNV: + if (!memberDeclaration) { + builder.addExtension(spv::E_SPV_NVX_multiview_per_view_attributes); + builder.addCapability(spv::CapabilityPerViewAttributesNV); + } + return spv::BuiltInPositionPerViewNV; + case glslang::EbvViewportMaskPerViewNV: + if (!memberDeclaration) { + builder.addExtension(spv::E_SPV_NVX_multiview_per_view_attributes); + builder.addCapability(spv::CapabilityPerViewAttributesNV); + } + return spv::BuiltInViewportMaskPerViewNV; +#endif + default: + return spv::BuiltInMax; + } +} + +// Translate glslang image layout format to SPIR-V image format. +spv::ImageFormat TGlslangToSpvTraverser::TranslateImageFormat(const glslang::TType& type) +{ + assert(type.getBasicType() == glslang::EbtSampler); + + // Check for capabilities + switch (type.getQualifier().layoutFormat) { + case glslang::ElfRg32f: + case glslang::ElfRg16f: + case glslang::ElfR11fG11fB10f: + case glslang::ElfR16f: + case glslang::ElfRgba16: + case glslang::ElfRgb10A2: + case glslang::ElfRg16: + case glslang::ElfRg8: + case glslang::ElfR16: + case glslang::ElfR8: + case glslang::ElfRgba16Snorm: + case glslang::ElfRg16Snorm: + case glslang::ElfRg8Snorm: + case glslang::ElfR16Snorm: + case glslang::ElfR8Snorm: + + case glslang::ElfRg32i: + case glslang::ElfRg16i: + case glslang::ElfRg8i: + case glslang::ElfR16i: + case glslang::ElfR8i: + + case glslang::ElfRgb10a2ui: + case glslang::ElfRg32ui: + case glslang::ElfRg16ui: + case glslang::ElfRg8ui: + case glslang::ElfR16ui: + case glslang::ElfR8ui: + builder.addCapability(spv::CapabilityStorageImageExtendedFormats); + break; + + default: + break; + } + + // do the translation + switch (type.getQualifier().layoutFormat) { + case glslang::ElfNone: return spv::ImageFormatUnknown; + case glslang::ElfRgba32f: return spv::ImageFormatRgba32f; + case glslang::ElfRgba16f: return spv::ImageFormatRgba16f; + case glslang::ElfR32f: return spv::ImageFormatR32f; + case glslang::ElfRgba8: return spv::ImageFormatRgba8; + case glslang::ElfRgba8Snorm: return spv::ImageFormatRgba8Snorm; + case glslang::ElfRg32f: return spv::ImageFormatRg32f; + case glslang::ElfRg16f: return spv::ImageFormatRg16f; + case glslang::ElfR11fG11fB10f: return spv::ImageFormatR11fG11fB10f; + case glslang::ElfR16f: return spv::ImageFormatR16f; + case glslang::ElfRgba16: return spv::ImageFormatRgba16; + case glslang::ElfRgb10A2: return spv::ImageFormatRgb10A2; + case glslang::ElfRg16: return spv::ImageFormatRg16; + case glslang::ElfRg8: return spv::ImageFormatRg8; + case glslang::ElfR16: return spv::ImageFormatR16; + case glslang::ElfR8: return spv::ImageFormatR8; + case glslang::ElfRgba16Snorm: return spv::ImageFormatRgba16Snorm; + case glslang::ElfRg16Snorm: return spv::ImageFormatRg16Snorm; + case glslang::ElfRg8Snorm: return spv::ImageFormatRg8Snorm; + case glslang::ElfR16Snorm: return spv::ImageFormatR16Snorm; + case glslang::ElfR8Snorm: return spv::ImageFormatR8Snorm; + case glslang::ElfRgba32i: return spv::ImageFormatRgba32i; + case glslang::ElfRgba16i: return spv::ImageFormatRgba16i; + case glslang::ElfRgba8i: return spv::ImageFormatRgba8i; + case glslang::ElfR32i: return spv::ImageFormatR32i; + case glslang::ElfRg32i: return spv::ImageFormatRg32i; + case glslang::ElfRg16i: return spv::ImageFormatRg16i; + case glslang::ElfRg8i: return spv::ImageFormatRg8i; + case glslang::ElfR16i: return spv::ImageFormatR16i; + case glslang::ElfR8i: return spv::ImageFormatR8i; + case glslang::ElfRgba32ui: return spv::ImageFormatRgba32ui; + case glslang::ElfRgba16ui: return spv::ImageFormatRgba16ui; + case glslang::ElfRgba8ui: return spv::ImageFormatRgba8ui; + case glslang::ElfR32ui: return spv::ImageFormatR32ui; + case glslang::ElfRg32ui: return spv::ImageFormatRg32ui; + case glslang::ElfRg16ui: return spv::ImageFormatRg16ui; + case glslang::ElfRgb10a2ui: return spv::ImageFormatRgb10a2ui; + case glslang::ElfRg8ui: return spv::ImageFormatRg8ui; + case glslang::ElfR16ui: return spv::ImageFormatR16ui; + case glslang::ElfR8ui: return spv::ImageFormatR8ui; + default: return spv::ImageFormatMax; + } +} + +// Return whether or not the given type is something that should be tied to a +// descriptor set. +bool IsDescriptorResource(const glslang::TType& type) +{ + // uniform and buffer blocks are included, unless it is a push_constant + if (type.getBasicType() == glslang::EbtBlock) + return type.getQualifier().isUniformOrBuffer() && ! type.getQualifier().layoutPushConstant; + + // non block... + // basically samplerXXX/subpass/sampler/texture are all included + // if they are the global-scope-class, not the function parameter + // (or local, if they ever exist) class. + if (type.getBasicType() == glslang::EbtSampler) + return type.getQualifier().isUniformOrBuffer(); + + // None of the above. + return false; +} + +void InheritQualifiers(glslang::TQualifier& child, const glslang::TQualifier& parent) +{ + if (child.layoutMatrix == glslang::ElmNone) + child.layoutMatrix = parent.layoutMatrix; + + if (parent.invariant) + child.invariant = true; + if (parent.nopersp) + child.nopersp = true; +#ifdef AMD_EXTENSIONS + if (parent.explicitInterp) + child.explicitInterp = true; +#endif + if (parent.flat) + child.flat = true; + if (parent.centroid) + child.centroid = true; + if (parent.patch) + child.patch = true; + if (parent.sample) + child.sample = true; + if (parent.coherent) + child.coherent = true; + if (parent.volatil) + child.volatil = true; + if (parent.restrict) + child.restrict = true; + if (parent.readonly) + child.readonly = true; + if (parent.writeonly) + child.writeonly = true; +} + +bool HasNonLayoutQualifiers(const glslang::TType& type, const glslang::TQualifier& qualifier) +{ + // This should list qualifiers that simultaneous satisfy: + // - struct members might inherit from a struct declaration + // (note that non-block structs don't explicitly inherit, + // only implicitly, meaning no decoration involved) + // - affect decorations on the struct members + // (note smooth does not, and expecting something like volatile + // to effect the whole object) + // - are not part of the offset/st430/etc or row/column-major layout + return qualifier.invariant || (qualifier.hasLocation() && type.getBasicType() == glslang::EbtBlock); +} + +// +// Implement the TGlslangToSpvTraverser class. +// + +TGlslangToSpvTraverser::TGlslangToSpvTraverser(const glslang::TIntermediate* glslangIntermediate, spv::SpvBuildLogger* buildLogger) + : TIntermTraverser(true, false, true), shaderEntry(nullptr), currentFunction(nullptr), + sequenceDepth(0), logger(buildLogger), + builder((glslang::GetKhronosToolId() << 16) | GeneratorVersion, 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()); + stdBuiltins = builder.import("GLSL.std.450"); + builder.setMemoryModel(spv::AddressingModelLogical, spv::MemoryModelGLSL450); + shaderEntry = builder.makeEntryPoint(glslangIntermediate->getEntryPointName().c_str()); + entryPoint = builder.addEntryPoint(executionModel, shaderEntry, glslangIntermediate->getEntryPointName().c_str()); + + // Add the source extensions + const auto& sourceExtensions = glslangIntermediate->getRequestedExtensions(); + for (auto it = sourceExtensions.begin(); it != sourceExtensions.end(); ++it) + builder.addSourceExtension(it->c_str()); + + // Add the top-level modes for this shader. + + if (glslangIntermediate->getXfbMode()) { + builder.addCapability(spv::CapabilityTransformFeedback); + builder.addExecutionMode(shaderEntry, spv::ExecutionModeXfb); + } + + unsigned int mode; + switch (glslangIntermediate->getStage()) { + case EShLangVertex: + builder.addCapability(spv::CapabilityShader); + break; + + case EShLangTessControl: + builder.addCapability(spv::CapabilityTessellation); + builder.addExecutionMode(shaderEntry, spv::ExecutionModeOutputVertices, glslangIntermediate->getVertices()); + break; + + case EShLangTessEvaluation: + builder.addCapability(spv::CapabilityTessellation); + switch (glslangIntermediate->getInputPrimitive()) { + case glslang::ElgTriangles: mode = spv::ExecutionModeTriangles; break; + case glslang::ElgQuads: mode = spv::ExecutionModeQuads; break; + case glslang::ElgIsolines: mode = spv::ExecutionModeIsolines; break; + default: mode = spv::ExecutionModeMax; break; + } + if (mode != spv::ExecutionModeMax) + builder.addExecutionMode(shaderEntry, (spv::ExecutionMode)mode); + + switch (glslangIntermediate->getVertexSpacing()) { + case glslang::EvsEqual: mode = spv::ExecutionModeSpacingEqual; break; + case glslang::EvsFractionalEven: mode = spv::ExecutionModeSpacingFractionalEven; break; + case glslang::EvsFractionalOdd: mode = spv::ExecutionModeSpacingFractionalOdd; break; + default: mode = spv::ExecutionModeMax; break; + } + if (mode != spv::ExecutionModeMax) + builder.addExecutionMode(shaderEntry, (spv::ExecutionMode)mode); + + switch (glslangIntermediate->getVertexOrder()) { + case glslang::EvoCw: mode = spv::ExecutionModeVertexOrderCw; break; + case glslang::EvoCcw: mode = spv::ExecutionModeVertexOrderCcw; break; + default: mode = spv::ExecutionModeMax; break; + } + if (mode != spv::ExecutionModeMax) + builder.addExecutionMode(shaderEntry, (spv::ExecutionMode)mode); + + if (glslangIntermediate->getPointMode()) + builder.addExecutionMode(shaderEntry, spv::ExecutionModePointMode); + break; + + case EShLangGeometry: + builder.addCapability(spv::CapabilityGeometry); + switch (glslangIntermediate->getInputPrimitive()) { + case glslang::ElgPoints: mode = spv::ExecutionModeInputPoints; break; + case glslang::ElgLines: mode = spv::ExecutionModeInputLines; break; + case glslang::ElgLinesAdjacency: mode = spv::ExecutionModeInputLinesAdjacency; break; + case glslang::ElgTriangles: mode = spv::ExecutionModeTriangles; break; + case glslang::ElgTrianglesAdjacency: mode = spv::ExecutionModeInputTrianglesAdjacency; break; + default: mode = spv::ExecutionModeMax; break; + } + if (mode != spv::ExecutionModeMax) + builder.addExecutionMode(shaderEntry, (spv::ExecutionMode)mode); + + builder.addExecutionMode(shaderEntry, spv::ExecutionModeInvocations, glslangIntermediate->getInvocations()); + + switch (glslangIntermediate->getOutputPrimitive()) { + case glslang::ElgPoints: mode = spv::ExecutionModeOutputPoints; break; + case glslang::ElgLineStrip: mode = spv::ExecutionModeOutputLineStrip; break; + case glslang::ElgTriangleStrip: mode = spv::ExecutionModeOutputTriangleStrip; break; + default: mode = spv::ExecutionModeMax; break; + } + if (mode != spv::ExecutionModeMax) + builder.addExecutionMode(shaderEntry, (spv::ExecutionMode)mode); + builder.addExecutionMode(shaderEntry, spv::ExecutionModeOutputVertices, glslangIntermediate->getVertices()); + break; + + case EShLangFragment: + builder.addCapability(spv::CapabilityShader); + if (glslangIntermediate->getPixelCenterInteger()) + builder.addExecutionMode(shaderEntry, spv::ExecutionModePixelCenterInteger); + + if (glslangIntermediate->getOriginUpperLeft()) + builder.addExecutionMode(shaderEntry, spv::ExecutionModeOriginUpperLeft); + else + builder.addExecutionMode(shaderEntry, spv::ExecutionModeOriginLowerLeft); + + if (glslangIntermediate->getEarlyFragmentTests()) + builder.addExecutionMode(shaderEntry, spv::ExecutionModeEarlyFragmentTests); + + switch(glslangIntermediate->getDepth()) { + case glslang::EldGreater: mode = spv::ExecutionModeDepthGreater; break; + case glslang::EldLess: mode = spv::ExecutionModeDepthLess; break; + default: mode = spv::ExecutionModeMax; break; + } + if (mode != spv::ExecutionModeMax) + builder.addExecutionMode(shaderEntry, (spv::ExecutionMode)mode); + + if (glslangIntermediate->getDepth() != glslang::EldUnchanged && glslangIntermediate->isDepthReplacing()) + builder.addExecutionMode(shaderEntry, spv::ExecutionModeDepthReplacing); + break; + + case EShLangCompute: + builder.addCapability(spv::CapabilityShader); + builder.addExecutionMode(shaderEntry, spv::ExecutionModeLocalSize, glslangIntermediate->getLocalSize(0), + glslangIntermediate->getLocalSize(1), + glslangIntermediate->getLocalSize(2)); + break; + + default: + break; + } +} + +// Finish creating SPV, after the traversal is complete. +void TGlslangToSpvTraverser::finishSpv() +{ + if (! entryPointTerminated) { + builder.setBuildPoint(shaderEntry->getLastBlock()); + builder.leaveFunction(); + } + + // finish off the entry-point SPV instruction by adding the Input/Output + for (auto it = iOSet.cbegin(); it != iOSet.cend(); ++it) + entryPoint->addIdOperand(*it); + + builder.eliminateDeadDecorations(); +} + +// Write the SPV into 'out'. +void TGlslangToSpvTraverser::dumpSpv(std::vector& out) +{ + builder.dump(out); +} + +// +// Implement the traversal functions. +// +// Return true from interior nodes to have the external traversal +// continue on to children. Return false if children were +// already processed. +// + +// +// Symbols can turn into +// - uniform/input reads +// - output writes +// - complex lvalue base setups: foo.bar[3].... , where we see foo and start up an access chain +// - something simple that degenerates into the last bullet +// +void TGlslangToSpvTraverser::visitSymbol(glslang::TIntermSymbol* symbol) +{ + SpecConstantOpModeGuard spec_constant_op_mode_setter(&builder); + if (symbol->getType().getQualifier().isSpecConstant()) + spec_constant_op_mode_setter.turnOnSpecConstantOpMode(); + + // getSymbolId() will set up all the IO decorations on the first call. + // Formal function parameters were mapped during makeFunctions(). + spv::Id id = getSymbolId(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); + } + + // Only process non-linkage-only nodes for generating actual static uses + if (! linkageOnly || symbol->getQualifier().isSpecConstant()) { + // Prepare to generate code for the access + + // L-value chains will be computed left to right. We're on the symbol now, + // which is the left-most part of the access chain, so now is "clear" time, + // followed by setting the base. + builder.clearAccessChain(); + + // For now, we consider all user variables as being in memory, so they are pointers, + // except for + // A) R-Value arguments to a function, which are an intermediate object. + // See comments in handleUserFunctionCall(). + // B) Specialization constants (normal constants don't even come in as a variable), + // These are also pure R-values. + glslang::TQualifier qualifier = symbol->getQualifier(); + if (qualifier.isSpecConstant() || rValueParameters.find(symbol->getId()) != rValueParameters.end()) + builder.setAccessChainRValue(id); + else + builder.setAccessChainLValue(id); + } +} + +bool TGlslangToSpvTraverser::visitBinary(glslang::TVisit /* visit */, glslang::TIntermBinary* node) +{ + SpecConstantOpModeGuard spec_constant_op_mode_setter(&builder); + if (node->getType().getQualifier().isSpecConstant()) + spec_constant_op_mode_setter.turnOnSpecConstantOpMode(); + + // First, handle special cases + switch (node->getOp()) { + case glslang::EOpAssign: + case glslang::EOpAddAssign: + case glslang::EOpSubAssign: + case glslang::EOpMulAssign: + case glslang::EOpVectorTimesMatrixAssign: + case glslang::EOpVectorTimesScalarAssign: + case glslang::EOpMatrixTimesScalarAssign: + case glslang::EOpMatrixTimesMatrixAssign: + case glslang::EOpDivAssign: + case glslang::EOpModAssign: + case glslang::EOpAndAssign: + case glslang::EOpInclusiveOrAssign: + case glslang::EOpExclusiveOrAssign: + case glslang::EOpLeftShiftAssign: + case glslang::EOpRightShiftAssign: + // A bin-op assign "a += b" means the same thing as "a = a + b" + // where a is evaluated before b. For a simple assignment, GLSL + // says to evaluate the left before the right. So, always, left + // node then right node. + { + // get the left l-value, save it away + builder.clearAccessChain(); + node->getLeft()->traverse(this); + spv::Builder::AccessChain lValue = builder.getAccessChain(); + + // evaluate the right + builder.clearAccessChain(); + node->getRight()->traverse(this); + spv::Id rValue = accessChainLoad(node->getRight()->getType()); + + if (node->getOp() != glslang::EOpAssign) { + // the left is also an r-value + builder.setAccessChain(lValue); + spv::Id leftRValue = accessChainLoad(node->getLeft()->getType()); + + // do the operation + rValue = createBinaryOperation(node->getOp(), TranslatePrecisionDecoration(node->getOperationPrecision()), + TranslateNoContractionDecoration(node->getType().getQualifier()), + convertGlslangToSpvType(node->getType()), leftRValue, rValue, + node->getType().getBasicType()); + + // these all need their counterparts in createBinaryOperation() + assert(rValue != spv::NoResult); + } + + // store the result + builder.setAccessChain(lValue); + multiTypeStore(node->getType(), rValue); + + // assignments are expressions having an rValue after they are evaluated... + builder.clearAccessChain(); + builder.setAccessChainRValue(rValue); + } + return false; + case glslang::EOpIndexDirect: + case glslang::EOpIndexDirectStruct: + { + // Get the left part of the access chain. + node->getLeft()->traverse(this); + + // Add the next element in the chain + + const int glslangIndex = node->getRight()->getAsConstantUnion()->getConstArray()[0].getIConst(); + if (! node->getLeft()->getType().isArray() && + node->getLeft()->getType().isVector() && + node->getOp() == glslang::EOpIndexDirect) { + // This is essentially a hard-coded vector swizzle of size 1, + // so short circuit the access-chain stuff with a swizzle. + std::vector swizzle; + swizzle.push_back(glslangIndex); + builder.accessChainPushSwizzle(swizzle, convertGlslangToSpvType(node->getLeft()->getType())); + } else { + int spvIndex = glslangIndex; + if (node->getLeft()->getBasicType() == glslang::EbtBlock && + node->getOp() == glslang::EOpIndexDirectStruct) + { + // This may be, e.g., an anonymous block-member selection, which generally need + // index remapping due to hidden members in anonymous blocks. + std::vector& remapper = memberRemapper[node->getLeft()->getType().getStruct()]; + assert(remapper.size() > 0); + spvIndex = remapper[glslangIndex]; + } + + // normal case for indexing array or structure or block + builder.accessChainPush(builder.makeIntConstant(spvIndex)); + + // Add capabilities here for accessing PointSize and clip/cull distance. + // We have deferred generation of associated capabilities until now. + if (node->getLeft()->getType().isStruct() && ! node->getLeft()->getType().isArray()) + declareUseOfStructMember(*(node->getLeft()->getType().getStruct()), glslangIndex); + } + } + return false; + case glslang::EOpIndexIndirect: + { + // Structure or array or vector indirection. + // Will use native SPIR-V access-chain for struct and array indirection; + // matrices are arrays of vectors, so will also work for a matrix. + // Will use the access chain's 'component' for variable index into a vector. + + // This adapter is building access chains left to right. + // Set up the access chain to the left. + node->getLeft()->traverse(this); + + // save it so that computing the right side doesn't trash it + spv::Builder::AccessChain partial = builder.getAccessChain(); + + // compute the next index in the chain + builder.clearAccessChain(); + node->getRight()->traverse(this); + spv::Id index = accessChainLoad(node->getRight()->getType()); + + // restore the saved access chain + builder.setAccessChain(partial); + + if (! node->getLeft()->getType().isArray() && node->getLeft()->getType().isVector()) + builder.accessChainPushComponent(index, convertGlslangToSpvType(node->getLeft()->getType())); + else + builder.accessChainPush(index); + } + return false; + case glslang::EOpVectorSwizzle: + { + node->getLeft()->traverse(this); + std::vector swizzle; + convertSwizzle(*node->getRight()->getAsAggregate(), swizzle); + builder.accessChainPushSwizzle(swizzle, convertGlslangToSpvType(node->getLeft()->getType())); + } + return false; + case glslang::EOpMatrixSwizzle: + logger->missingFunctionality("matrix swizzle"); + return true; + case glslang::EOpLogicalOr: + case glslang::EOpLogicalAnd: + { + + // These may require short circuiting, but can sometimes be done as straight + // binary operations. The right operand must be short circuited if it has + // side effects, and should probably be if it is complex. + if (isTrivial(node->getRight()->getAsTyped())) + break; // handle below as a normal binary operation + // otherwise, we need to do dynamic short circuiting on the right operand + spv::Id result = createShortCircuit(node->getOp(), *node->getLeft()->getAsTyped(), *node->getRight()->getAsTyped()); + builder.clearAccessChain(); + builder.setAccessChainRValue(result); + } + return false; + default: + break; + } + + // Assume generic binary op... + + // get right operand + builder.clearAccessChain(); + node->getLeft()->traverse(this); + spv::Id left = accessChainLoad(node->getLeft()->getType()); + + // get left operand + builder.clearAccessChain(); + node->getRight()->traverse(this); + spv::Id right = accessChainLoad(node->getRight()->getType()); + + // get result + spv::Id result = createBinaryOperation(node->getOp(), TranslatePrecisionDecoration(node->getOperationPrecision()), + TranslateNoContractionDecoration(node->getType().getQualifier()), + convertGlslangToSpvType(node->getType()), left, right, + node->getLeft()->getType().getBasicType()); + + builder.clearAccessChain(); + if (! result) { + logger->missingFunctionality("unknown glslang binary operation"); + return true; // pick up a child as the place-holder result + } else { + builder.setAccessChainRValue(result); + return false; + } +} + +bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TIntermUnary* node) +{ + SpecConstantOpModeGuard spec_constant_op_mode_setter(&builder); + if (node->getType().getQualifier().isSpecConstant()) + spec_constant_op_mode_setter.turnOnSpecConstantOpMode(); + + spv::Id result = spv::NoResult; + + // try texturing first + result = createImageTextureFunctionCall(node); + if (result != spv::NoResult) { + builder.clearAccessChain(); + builder.setAccessChainRValue(result); + + return false; // done with this node + } + + // Non-texturing. + + if (node->getOp() == glslang::EOpArrayLength) { + // Quite special; won't want to evaluate the operand. + + // Normal .length() would have been constant folded by the front-end. + // So, this has to be block.lastMember.length(). + // SPV wants "block" and member number as the operands, go get them. + assert(node->getOperand()->getType().isRuntimeSizedArray()); + glslang::TIntermTyped* block = node->getOperand()->getAsBinaryNode()->getLeft(); + block->traverse(this); + unsigned int member = node->getOperand()->getAsBinaryNode()->getRight()->getAsConstantUnion()->getConstArray()[0].getUConst(); + spv::Id length = builder.createArrayLength(builder.accessChainGetLValue(), member); + + builder.clearAccessChain(); + builder.setAccessChainRValue(length); + + return false; + } + + // Start by evaluating the operand + + // Does it need a swizzle inversion? If so, evaluation is inverted; + // operate first on the swizzle base, then apply the swizzle. + spv::Id invertedType = spv::NoType; + auto resultType = [&invertedType, &node, this](){ return invertedType != spv::NoType ? invertedType : convertGlslangToSpvType(node->getType()); }; + if (node->getOp() == glslang::EOpInterpolateAtCentroid) + invertedType = getInvertedSwizzleType(*node->getOperand()); + + builder.clearAccessChain(); + if (invertedType != spv::NoType) + node->getOperand()->getAsBinaryNode()->getLeft()->traverse(this); + else + node->getOperand()->traverse(this); + + spv::Id operand = spv::NoResult; + + if (node->getOp() == glslang::EOpAtomicCounterIncrement || + node->getOp() == glslang::EOpAtomicCounterDecrement || + node->getOp() == glslang::EOpAtomicCounter || + node->getOp() == glslang::EOpInterpolateAtCentroid) + operand = builder.accessChainGetLValue(); // Special case l-value operands + else + operand = accessChainLoad(node->getOperand()->getType()); + + spv::Decoration precision = TranslatePrecisionDecoration(node->getOperationPrecision()); + spv::Decoration noContraction = TranslateNoContractionDecoration(node->getType().getQualifier()); + + // it could be a conversion + if (! result) + result = createConversion(node->getOp(), precision, noContraction, resultType(), operand, node->getOperand()->getBasicType()); + + // if not, then possibly an operation + if (! result) + result = createUnaryOperation(node->getOp(), precision, noContraction, resultType(), operand, node->getOperand()->getBasicType()); + + if (result) { + if (invertedType) + result = createInvertedSwizzle(precision, *node->getOperand(), result); + + builder.clearAccessChain(); + builder.setAccessChainRValue(result); + + return false; // done with this node + } + + // it must be a special case, check... + switch (node->getOp()) { + case glslang::EOpPostIncrement: + case glslang::EOpPostDecrement: + case glslang::EOpPreIncrement: + case glslang::EOpPreDecrement: + { + // we need the integer value "1" or the floating point "1.0" to add/subtract + spv::Id one = 0; + if (node->getBasicType() == glslang::EbtFloat) + one = builder.makeFloatConstant(1.0F); + else if (node->getBasicType() == glslang::EbtDouble) + one = builder.makeDoubleConstant(1.0); +#ifdef AMD_EXTENSIONS + else if (node->getBasicType() == glslang::EbtFloat16) + one = builder.makeFloat16Constant(1.0F); +#endif + else if (node->getBasicType() == glslang::EbtInt64 || node->getBasicType() == glslang::EbtUint64) + one = builder.makeInt64Constant(1); + else + one = builder.makeIntConstant(1); + glslang::TOperator op; + if (node->getOp() == glslang::EOpPreIncrement || + node->getOp() == glslang::EOpPostIncrement) + op = glslang::EOpAdd; + else + op = glslang::EOpSub; + + spv::Id result = createBinaryOperation(op, precision, + TranslateNoContractionDecoration(node->getType().getQualifier()), + convertGlslangToSpvType(node->getType()), operand, one, + node->getType().getBasicType()); + assert(result != spv::NoResult); + + // The result of operation is always stored, but conditionally the + // consumed result. The consumed result is always an r-value. + builder.accessChainStore(result); + builder.clearAccessChain(); + if (node->getOp() == glslang::EOpPreIncrement || + node->getOp() == glslang::EOpPreDecrement) + builder.setAccessChainRValue(result); + else + builder.setAccessChainRValue(operand); + } + + return false; + + case glslang::EOpEmitStreamVertex: + builder.createNoResultOp(spv::OpEmitStreamVertex, operand); + return false; + case glslang::EOpEndStreamPrimitive: + builder.createNoResultOp(spv::OpEndStreamPrimitive, operand); + return false; + + default: + logger->missingFunctionality("unknown glslang unary"); + return true; // pick up operand as placeholder result + } +} + +bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TIntermAggregate* node) +{ + SpecConstantOpModeGuard spec_constant_op_mode_setter(&builder); + if (node->getType().getQualifier().isSpecConstant()) + spec_constant_op_mode_setter.turnOnSpecConstantOpMode(); + + spv::Id result = spv::NoResult; + spv::Id invertedType = spv::NoType; // to use to override the natural type of the node + auto resultType = [&invertedType, &node, this](){ return invertedType != spv::NoType ? invertedType : convertGlslangToSpvType(node->getType()); }; + + // try texturing + result = createImageTextureFunctionCall(node); + if (result != spv::NoResult) { + builder.clearAccessChain(); + builder.setAccessChainRValue(result); + + return false; + } else if (node->getOp() == glslang::EOpImageStore) { + // "imageStore" is a special case, which has no result + return false; + } + + glslang::TOperator binOp = glslang::EOpNull; + bool reduceComparison = true; + bool isMatrix = false; + bool noReturnValue = false; + bool atomic = false; + + assert(node->getOp()); + + spv::Decoration precision = TranslatePrecisionDecoration(node->getOperationPrecision()); + + switch (node->getOp()) { + case glslang::EOpSequence: + { + if (preVisit) + ++sequenceDepth; + else + --sequenceDepth; + + if (sequenceDepth == 1) { + // If this is the parent node of all the functions, we want to see them + // early, so all call points have actual SPIR-V functions to reference. + // In all cases, still let the traverser visit the children for us. + makeFunctions(node->getAsAggregate()->getSequence()); + + // Also, we want all globals initializers to go into the beginning of the entry point, before + // anything else gets there, so visit out of order, doing them all now. + makeGlobalInitializers(node->getAsAggregate()->getSequence()); + + // Initializers are done, don't want to visit again, but functions and link objects need to be processed, + // so do them manually. + visitFunctions(node->getAsAggregate()->getSequence()); + + return false; + } + + return true; + } + case glslang::EOpLinkerObjects: + { + if (visit == glslang::EvPreVisit) + linkageOnly = true; + else + linkageOnly = false; + + return true; + } + case glslang::EOpComma: + { + // processing from left to right naturally leaves the right-most + // lying around in the access chain + glslang::TIntermSequence& glslangOperands = node->getSequence(); + for (int i = 0; i < (int)glslangOperands.size(); ++i) + glslangOperands[i]->traverse(this); + + return false; + } + case glslang::EOpFunction: + if (visit == glslang::EvPreVisit) { + if (isShaderEntryPoint(node)) { + inEntryPoint = true; + builder.setBuildPoint(shaderEntry->getLastBlock()); + currentFunction = shaderEntry; + } else { + handleFunctionEntry(node); + } + } else { + if (inEntryPoint) + entryPointTerminated = true; + builder.leaveFunction(); + inEntryPoint = false; + } + + return true; + case glslang::EOpParameters: + // Parameters will have been consumed by EOpFunction processing, but not + // the body, so we still visited the function node's children, making this + // child redundant. + return false; + case glslang::EOpFunctionCall: + { + if (node->isUserDefined()) + result = handleUserFunctionCall(node); + // assert(result); // this can happen for bad shaders because the call graph completeness checking is not yet done + if (result) { + builder.clearAccessChain(); + builder.setAccessChainRValue(result); + } else + logger->missingFunctionality("missing user function; linker needs to catch that"); + + return false; + } + case glslang::EOpConstructMat2x2: + case glslang::EOpConstructMat2x3: + case glslang::EOpConstructMat2x4: + case glslang::EOpConstructMat3x2: + case glslang::EOpConstructMat3x3: + case glslang::EOpConstructMat3x4: + case glslang::EOpConstructMat4x2: + case glslang::EOpConstructMat4x3: + case glslang::EOpConstructMat4x4: + case glslang::EOpConstructDMat2x2: + case glslang::EOpConstructDMat2x3: + case glslang::EOpConstructDMat2x4: + case glslang::EOpConstructDMat3x2: + case glslang::EOpConstructDMat3x3: + case glslang::EOpConstructDMat3x4: + case glslang::EOpConstructDMat4x2: + case glslang::EOpConstructDMat4x3: + case glslang::EOpConstructDMat4x4: +#ifdef AMD_EXTENSIONS + case glslang::EOpConstructF16Mat2x2: + case glslang::EOpConstructF16Mat2x3: + case glslang::EOpConstructF16Mat2x4: + case glslang::EOpConstructF16Mat3x2: + case glslang::EOpConstructF16Mat3x3: + case glslang::EOpConstructF16Mat3x4: + case glslang::EOpConstructF16Mat4x2: + case glslang::EOpConstructF16Mat4x3: + case glslang::EOpConstructF16Mat4x4: +#endif + isMatrix = true; + // fall through + case glslang::EOpConstructFloat: + case glslang::EOpConstructVec2: + case glslang::EOpConstructVec3: + case glslang::EOpConstructVec4: + case glslang::EOpConstructDouble: + case glslang::EOpConstructDVec2: + case glslang::EOpConstructDVec3: + case glslang::EOpConstructDVec4: +#ifdef AMD_EXTENSIONS + case glslang::EOpConstructFloat16: + case glslang::EOpConstructF16Vec2: + case glslang::EOpConstructF16Vec3: + case glslang::EOpConstructF16Vec4: +#endif + case glslang::EOpConstructBool: + case glslang::EOpConstructBVec2: + case glslang::EOpConstructBVec3: + case glslang::EOpConstructBVec4: + case glslang::EOpConstructInt: + case glslang::EOpConstructIVec2: + case glslang::EOpConstructIVec3: + case glslang::EOpConstructIVec4: + case glslang::EOpConstructUint: + case glslang::EOpConstructUVec2: + case glslang::EOpConstructUVec3: + case glslang::EOpConstructUVec4: + case glslang::EOpConstructInt64: + case glslang::EOpConstructI64Vec2: + case glslang::EOpConstructI64Vec3: + case glslang::EOpConstructI64Vec4: + case glslang::EOpConstructUint64: + case glslang::EOpConstructU64Vec2: + case glslang::EOpConstructU64Vec3: + case glslang::EOpConstructU64Vec4: + case glslang::EOpConstructStruct: + case glslang::EOpConstructTextureSampler: + { + std::vector arguments; + translateArguments(*node, arguments); + spv::Id constructed; + if (node->getOp() == glslang::EOpConstructTextureSampler) + constructed = builder.createOp(spv::OpSampledImage, resultType(), arguments); + else if (node->getOp() == glslang::EOpConstructStruct || node->getType().isArray()) { + std::vector constituents; + for (int c = 0; c < (int)arguments.size(); ++c) + constituents.push_back(arguments[c]); + constructed = builder.createCompositeConstruct(resultType(), constituents); + } else if (isMatrix) + constructed = builder.createMatrixConstructor(precision, arguments, resultType()); + else + constructed = builder.createConstructor(precision, arguments, resultType()); + + builder.clearAccessChain(); + builder.setAccessChainRValue(constructed); + + return false; + } + + // These six are component-wise compares with component-wise results. + // Forward on to createBinaryOperation(), requesting a vector result. + case glslang::EOpLessThan: + case glslang::EOpGreaterThan: + case glslang::EOpLessThanEqual: + case glslang::EOpGreaterThanEqual: + case glslang::EOpVectorEqual: + case glslang::EOpVectorNotEqual: + { + // Map the operation to a binary + binOp = node->getOp(); + reduceComparison = false; + switch (node->getOp()) { + case glslang::EOpVectorEqual: binOp = glslang::EOpVectorEqual; break; + case glslang::EOpVectorNotEqual: binOp = glslang::EOpVectorNotEqual; break; + default: binOp = node->getOp(); break; + } + + break; + } + case glslang::EOpMul: + // component-wise matrix multiply + binOp = glslang::EOpMul; + break; + case glslang::EOpOuterProduct: + // two vectors multiplied to make a matrix + binOp = glslang::EOpOuterProduct; + break; + case glslang::EOpDot: + { + // for scalar dot product, use multiply + glslang::TIntermSequence& glslangOperands = node->getSequence(); + if (glslangOperands[0]->getAsTyped()->getVectorSize() == 1) + binOp = glslang::EOpMul; + break; + } + case glslang::EOpMod: + // when an aggregate, this is the floating-point mod built-in function, + // which can be emitted by the one in createBinaryOperation() + binOp = glslang::EOpMod; + break; + case glslang::EOpEmitVertex: + case glslang::EOpEndPrimitive: + case glslang::EOpBarrier: + case glslang::EOpMemoryBarrier: + case glslang::EOpMemoryBarrierAtomicCounter: + case glslang::EOpMemoryBarrierBuffer: + case glslang::EOpMemoryBarrierImage: + case glslang::EOpMemoryBarrierShared: + case glslang::EOpGroupMemoryBarrier: + case glslang::EOpAllMemoryBarrierWithGroupSync: + case glslang::EOpGroupMemoryBarrierWithGroupSync: + case glslang::EOpWorkgroupMemoryBarrier: + case glslang::EOpWorkgroupMemoryBarrierWithGroupSync: + noReturnValue = true; + // These all have 0 operands and will naturally finish up in the code below for 0 operands + break; + + case glslang::EOpAtomicAdd: + case glslang::EOpAtomicMin: + case glslang::EOpAtomicMax: + case glslang::EOpAtomicAnd: + case glslang::EOpAtomicOr: + case glslang::EOpAtomicXor: + case glslang::EOpAtomicExchange: + case glslang::EOpAtomicCompSwap: + atomic = true; + break; + + default: + break; + } + + // + // See if it maps to a regular operation. + // + if (binOp != glslang::EOpNull) { + glslang::TIntermTyped* left = node->getSequence()[0]->getAsTyped(); + glslang::TIntermTyped* right = node->getSequence()[1]->getAsTyped(); + assert(left && right); + + builder.clearAccessChain(); + left->traverse(this); + spv::Id leftId = accessChainLoad(left->getType()); + + builder.clearAccessChain(); + right->traverse(this); + spv::Id rightId = accessChainLoad(right->getType()); + + result = createBinaryOperation(binOp, precision, TranslateNoContractionDecoration(node->getType().getQualifier()), + resultType(), leftId, rightId, + left->getType().getBasicType(), reduceComparison); + + // code above should only make binOp that exists in createBinaryOperation + assert(result != spv::NoResult); + builder.clearAccessChain(); + builder.setAccessChainRValue(result); + + return false; + } + + // + // Create the list of operands. + // + glslang::TIntermSequence& glslangOperands = node->getSequence(); + std::vector operands; + for (int arg = 0; arg < (int)glslangOperands.size(); ++arg) { + // special case l-value operands; there are just a few + bool lvalue = false; + switch (node->getOp()) { + case glslang::EOpFrexp: + case glslang::EOpModf: + if (arg == 1) + lvalue = true; + break; + case glslang::EOpInterpolateAtSample: + case glslang::EOpInterpolateAtOffset: +#ifdef AMD_EXTENSIONS + case glslang::EOpInterpolateAtVertex: +#endif + if (arg == 0) { + lvalue = true; + + // Does it need a swizzle inversion? If so, evaluation is inverted; + // operate first on the swizzle base, then apply the swizzle. + if (glslangOperands[0]->getAsOperator() && + glslangOperands[0]->getAsOperator()->getOp() == glslang::EOpVectorSwizzle) + invertedType = convertGlslangToSpvType(glslangOperands[0]->getAsBinaryNode()->getLeft()->getType()); + } + break; + case glslang::EOpAtomicAdd: + case glslang::EOpAtomicMin: + case glslang::EOpAtomicMax: + case glslang::EOpAtomicAnd: + case glslang::EOpAtomicOr: + case glslang::EOpAtomicXor: + case glslang::EOpAtomicExchange: + case glslang::EOpAtomicCompSwap: + if (arg == 0) + lvalue = true; + break; + case glslang::EOpAddCarry: + case glslang::EOpSubBorrow: + if (arg == 2) + lvalue = true; + break; + case glslang::EOpUMulExtended: + case glslang::EOpIMulExtended: + if (arg >= 2) + lvalue = true; + break; + default: + break; + } + builder.clearAccessChain(); + if (invertedType != spv::NoType && arg == 0) + glslangOperands[0]->getAsBinaryNode()->getLeft()->traverse(this); + else + glslangOperands[arg]->traverse(this); + if (lvalue) + operands.push_back(builder.accessChainGetLValue()); + else + operands.push_back(accessChainLoad(glslangOperands[arg]->getAsTyped()->getType())); + } + + if (atomic) { + // Handle all atomics + result = createAtomicOperation(node->getOp(), precision, resultType(), operands, node->getBasicType()); + } else { + // Pass through to generic operations. + switch (glslangOperands.size()) { + case 0: + result = createNoArgOperation(node->getOp(), precision, resultType()); + break; + case 1: + result = createUnaryOperation( + node->getOp(), precision, + TranslateNoContractionDecoration(node->getType().getQualifier()), + resultType(), operands.front(), + glslangOperands[0]->getAsTyped()->getBasicType()); + break; + default: + result = createMiscOperation(node->getOp(), precision, resultType(), operands, node->getBasicType()); + break; + } + if (invertedType) + result = createInvertedSwizzle(precision, *glslangOperands[0]->getAsBinaryNode(), result); + } + + if (noReturnValue) + return false; + + if (! result) { + logger->missingFunctionality("unknown glslang aggregate"); + return true; // pick up a child as a placeholder operand + } else { + builder.clearAccessChain(); + builder.setAccessChainRValue(result); + return false; + } +} + +// This path handles both if-then-else and ?: +// The if-then-else has a node type of void, while +// ?: has either a void or a non-void node type +// +// Leaving the result, when not void: +// GLSL only has r-values as the result of a :?, but +// if we have an l-value, that can be more efficient if it will +// become the base of a complex r-value expression, because the +// next layer copies r-values into memory to use the access-chain mechanism +bool TGlslangToSpvTraverser::visitSelection(glslang::TVisit /* visit */, glslang::TIntermSelection* node) +{ + // See if it simple and safe to generate OpSelect instead of using control flow. + // Crucially, side effects must be avoided, and there are performance trade-offs. + // Return true if good idea (and safe) for OpSelect, false otherwise. + const auto selectPolicy = [&]() -> bool { + if ((!node->getType().isScalar() && !node->getType().isVector()) || + node->getBasicType() == glslang::EbtVoid) + return false; + + if (node->getTrueBlock() == nullptr || + node->getFalseBlock() == nullptr) + return false; + + assert(node->getType() == node->getTrueBlock() ->getAsTyped()->getType() && + node->getType() == node->getFalseBlock()->getAsTyped()->getType()); + + // return true if a single operand to ? : is okay for OpSelect + const auto operandOkay = [](glslang::TIntermTyped* node) { + return node->getAsSymbolNode() || node->getType().getQualifier().isConstant(); + }; + + return operandOkay(node->getTrueBlock() ->getAsTyped()) && + operandOkay(node->getFalseBlock()->getAsTyped()); + }; + + // Emit OpSelect for this selection. + const auto handleAsOpSelect = [&]() { + node->getCondition()->traverse(this); + spv::Id condition = accessChainLoad(node->getCondition()->getType()); + node->getTrueBlock()->traverse(this); + spv::Id trueValue = accessChainLoad(node->getTrueBlock()->getAsTyped()->getType()); + 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.clearAccessChain(); + builder.setAccessChainRValue(select); + }; + + // Try for OpSelect + + if (selectPolicy()) { + SpecConstantOpModeGuard spec_constant_op_mode_setter(&builder); + if (node->getType().getQualifier().isSpecConstant()) + spec_constant_op_mode_setter.turnOnSpecConstantOpMode(); + + handleAsOpSelect(); + return false; + } + + // 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) + ? spv::NoResult + : builder.createVariable(spv::StorageClassFunction, convertGlslangToSpvType(node->getType())); + + // emit the condition before doing anything with selection + node->getCondition()->traverse(this); + + // make an "if" based on the value created by the condition + spv::Builder::If ifBuilder(accessChainLoad(node->getCondition()->getType()), builder); + + // emit the "then" statement + if (node->getTrueBlock() != nullptr) { + node->getTrueBlock()->traverse(this); + if (result != spv::NoResult) + builder.createStore(accessChainLoad(node->getTrueBlock()->getAsTyped()->getType()), result); + } + + if (node->getFalseBlock() != nullptr) { + ifBuilder.makeBeginElse(); + // emit the "else" statement + node->getFalseBlock()->traverse(this); + if (result != spv::NoResult) + builder.createStore(accessChainLoad(node->getFalseBlock()->getAsTyped()->getType()), result); + } + + // finish off the control flow + ifBuilder.makeEndIf(); + + if (result != spv::NoResult) { + // GLSL only has r-values as the result of a :?, but + // if we have an l-value, that can be more efficient if it will + // become the base of a complex r-value expression, because the + // next layer copies r-values into memory to use the access-chain mechanism + builder.clearAccessChain(); + builder.setAccessChainLValue(result); + } + + return false; +} + +bool TGlslangToSpvTraverser::visitSwitch(glslang::TVisit /* visit */, glslang::TIntermSwitch* node) +{ + // emit and get the condition before doing anything with switch + node->getCondition()->traverse(this); + spv::Id selector = accessChainLoad(node->getCondition()->getAsTyped()->getType()); + + // browse the children to sort out code segments + int defaultSegment = -1; + std::vector codeSegments; + glslang::TIntermSequence& sequence = node->getBody()->getSequence(); + std::vector caseValues; + std::vector valueIndexToSegment(sequence.size()); // note: probably not all are used, it is an overestimate + for (glslang::TIntermSequence::iterator c = sequence.begin(); c != sequence.end(); ++c) { + TIntermNode* child = *c; + if (child->getAsBranchNode() && child->getAsBranchNode()->getFlowOp() == glslang::EOpDefault) + defaultSegment = (int)codeSegments.size(); + else if (child->getAsBranchNode() && child->getAsBranchNode()->getFlowOp() == glslang::EOpCase) { + valueIndexToSegment[caseValues.size()] = (int)codeSegments.size(); + caseValues.push_back(child->getAsBranchNode()->getExpression()->getAsConstantUnion()->getConstArray()[0].getIConst()); + } else + codeSegments.push_back(child); + } + + // handle the case where the last code segment is missing, due to no code + // statements between the last case and the end of the switch statement + if ((caseValues.size() && (int)codeSegments.size() == valueIndexToSegment[caseValues.size() - 1]) || + (int)codeSegments.size() == defaultSegment) + codeSegments.push_back(nullptr); + + // make the switch statement + std::vector segmentBlocks; // returned, as the blocks allocated in the call + builder.makeSwitch(selector, (int)codeSegments.size(), caseValues, valueIndexToSegment, defaultSegment, segmentBlocks); + + // emit all the code in the segments + breakForLoop.push(false); + for (unsigned int s = 0; s < codeSegments.size(); ++s) { + builder.nextSwitchSegment(segmentBlocks, s); + if (codeSegments[s]) + codeSegments[s]->traverse(this); + else + builder.addSwitchBreak(); + } + breakForLoop.pop(); + + builder.endSwitch(segmentBlocks); + + return false; +} + +void TGlslangToSpvTraverser::visitConstantUnion(glslang::TIntermConstantUnion* node) +{ + int nextConst = 0; + spv::Id constant = createSpvConstantFromConstUnionArray(node->getType(), node->getConstArray(), nextConst, false); + + builder.clearAccessChain(); + builder.setAccessChainRValue(constant); +} + +bool TGlslangToSpvTraverser::visitLoop(glslang::TVisit /* visit */, glslang::TIntermLoop* node) +{ + auto blocks = builder.makeNewLoop(); + builder.createBranch(&blocks.head); + // 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.setBuildPoint(&blocks.head); + builder.createLoopMerge(&blocks.merge, &blocks.continue_target, spv::LoopControlMaskNone); + 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()); + builder.createConditionalBranch(condition, &blocks.body, &blocks.merge); + + builder.setBuildPoint(&blocks.body); + breakForLoop.push(true); + if (node->getBody()) + node->getBody()->traverse(this); + builder.createBranch(&blocks.continue_target); + breakForLoop.pop(); + + builder.setBuildPoint(&blocks.continue_target); + if (node->getTerminal()) + node->getTerminal()->traverse(this); + builder.createBranch(&blocks.head); + } else { + builder.createBranch(&blocks.body); + + breakForLoop.push(true); + builder.setBuildPoint(&blocks.body); + if (node->getBody()) + node->getBody()->traverse(this); + builder.createBranch(&blocks.continue_target); + breakForLoop.pop(); + + builder.setBuildPoint(&blocks.continue_target); + if (node->getTerminal()) + node->getTerminal()->traverse(this); + if (node->getTest()) { + node->getTest()->traverse(this); + spv::Id condition = + accessChainLoad(node->getTest()->getType()); + builder.createConditionalBranch(condition, &blocks.head, &blocks.merge); + } else { + // TODO: unless there was a break/return/discard instruction + // somewhere in the body, this is an infinite loop, so we should + // issue a warning. + builder.createBranch(&blocks.head); + } + } + builder.setBuildPoint(&blocks.merge); + builder.closeLoop(); + return false; +} + +bool TGlslangToSpvTraverser::visitBranch(glslang::TVisit /* visit */, glslang::TIntermBranch* node) +{ + if (node->getExpression()) + node->getExpression()->traverse(this); + + switch (node->getFlowOp()) { + case glslang::EOpKill: + builder.makeDiscard(); + break; + case glslang::EOpBreak: + if (breakForLoop.top()) + builder.createLoopExit(); + else + builder.addSwitchBreak(); + break; + case glslang::EOpContinue: + builder.createLoopContinue(); + break; + case glslang::EOpReturn: + if (node->getExpression()) { + const glslang::TType& glslangReturnType = node->getExpression()->getType(); + spv::Id returnId = accessChainLoad(glslangReturnType); + if (builder.getTypeId(returnId) != currentFunction->getReturnType()) { + builder.clearAccessChain(); + spv::Id copyId = builder.createVariable(spv::StorageClassFunction, currentFunction->getReturnType()); + builder.setAccessChainLValue(copyId); + multiTypeStore(glslangReturnType, returnId); + returnId = builder.createLoad(copyId); + } + builder.makeReturn(false, returnId); + } else + builder.makeReturn(false); + + builder.clearAccessChain(); + break; + + default: + assert(0); + break; + } + + return false; +} + +spv::Id TGlslangToSpvTraverser::createSpvVariable(const glslang::TIntermSymbol* node) +{ + // First, steer off constants, which are not SPIR-V variables, but + // can still have a mapping to a SPIR-V Id. + // This includes specialization constants. + if (node->getQualifier().isConstant()) { + return createSpvConstant(*node); + } + + // Now, handle actual variables + spv::StorageClass storageClass = TranslateStorageClass(node->getType()); + spv::Id spvType = convertGlslangToSpvType(node->getType()); + + const char* name = node->getName().c_str(); + if (glslang::IsAnonymous(name)) + name = ""; + + return builder.createVariable(storageClass, spvType, name); +} + +// Return type Id of the sampled type. +spv::Id TGlslangToSpvTraverser::getSampledType(const glslang::TSampler& sampler) +{ + switch (sampler.type) { + case glslang::EbtFloat: return builder.makeFloatType(32); + case glslang::EbtInt: return builder.makeIntType(32); + case glslang::EbtUint: return builder.makeUintType(32); + default: + assert(0); + return builder.makeFloatType(32); + } +} + +// If node is a swizzle operation, return the type that should be used if +// the swizzle base is first consumed by another operation, before the swizzle +// is applied. +spv::Id TGlslangToSpvTraverser::getInvertedSwizzleType(const glslang::TIntermTyped& node) +{ + if (node.getAsOperator() && + node.getAsOperator()->getOp() == glslang::EOpVectorSwizzle) + return convertGlslangToSpvType(node.getAsBinaryNode()->getLeft()->getType()); + else + return spv::NoType; +} + +// When inverting a swizzle with a parent op, this function +// will apply the swizzle operation to a completed parent operation. +spv::Id TGlslangToSpvTraverser::createInvertedSwizzle(spv::Decoration precision, const glslang::TIntermTyped& node, spv::Id parentResult) +{ + std::vector swizzle; + convertSwizzle(*node.getAsBinaryNode()->getRight()->getAsAggregate(), swizzle); + return builder.createRvalueSwizzle(precision, convertGlslangToSpvType(node.getType()), parentResult, swizzle); +} + +// Convert a glslang AST swizzle node to a swizzle vector for building SPIR-V. +void TGlslangToSpvTraverser::convertSwizzle(const glslang::TIntermAggregate& node, std::vector& swizzle) +{ + const glslang::TIntermSequence& swizzleSequence = node.getSequence(); + for (int i = 0; i < (int)swizzleSequence.size(); ++i) + swizzle.push_back(swizzleSequence[i]->getAsConstantUnion()->getConstArray()[0].getIConst()); +} + +// Convert from a glslang type to an SPV type, by calling into a +// recursive version of this function. This establishes the inherited +// layout state rooted from the top-level type. +spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& type) +{ + return convertGlslangToSpvType(type, getExplicitLayout(type), type.getQualifier()); +} + +// Do full recursive conversion of an arbitrary glslang type to a SPIR-V Id. +// explicitLayout can be kept the same throughout the hierarchical recursive walk. +// Mutually recursive with convertGlslangStructToSpvType(). +spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& type, glslang::TLayoutPacking explicitLayout, const glslang::TQualifier& qualifier) +{ + spv::Id spvType = spv::NoResult; + + switch (type.getBasicType()) { + case glslang::EbtVoid: + spvType = builder.makeVoidType(); + assert (! type.isArray()); + break; + case glslang::EbtFloat: + spvType = builder.makeFloatType(32); + break; + case glslang::EbtDouble: + spvType = builder.makeFloatType(64); + break; +#ifdef AMD_EXTENSIONS + case glslang::EbtFloat16: + builder.addExtension(spv::E_SPV_AMD_gpu_shader_half_float); + spvType = builder.makeFloatType(16); + break; +#endif + case glslang::EbtBool: + // "transparent" bool doesn't exist in SPIR-V. The GLSL convention is + // a 32-bit int where non-0 means true. + if (explicitLayout != glslang::ElpNone) + spvType = builder.makeUintType(32); + else + spvType = builder.makeBoolType(); + break; + case glslang::EbtInt: + spvType = builder.makeIntType(32); + break; + case glslang::EbtUint: + 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; + case glslang::EbtAtomicUint: + builder.addCapability(spv::CapabilityAtomicStorage); + spvType = builder.makeUintType(32); + break; + case glslang::EbtSampler: + { + const glslang::TSampler& sampler = type.getSampler(); + if (sampler.sampler) { + // pure sampler + spvType = builder.makeSamplerType(); + } else { + // an image is present, make its type + spvType = builder.makeImageType(getSampledType(sampler), TranslateDimensionality(sampler), sampler.shadow, sampler.arrayed, sampler.ms, + sampler.image ? 2 : 1, TranslateImageFormat(type)); + if (sampler.combined) { + // already has both image and sampler, make the combined type + spvType = builder.makeSampledImageType(spvType); + } + } + } + break; + case glslang::EbtStruct: + case glslang::EbtBlock: + { + // If we've seen this struct type, return it + const glslang::TTypeList* glslangMembers = type.getStruct(); + + // Try to share structs for different layouts, but not yet for other + // kinds of qualification (primarily not yet including interpolant qualification). + if (! HasNonLayoutQualifiers(type, qualifier)) + spvType = structMap[explicitLayout][qualifier.layoutMatrix][glslangMembers]; + if (spvType != spv::NoResult) + break; + + // else, we haven't seen it... + if (type.getBasicType() == glslang::EbtBlock) + memberRemapper[glslangMembers].resize(glslangMembers->size()); + spvType = convertGlslangStructToSpvType(type, glslangMembers, explicitLayout, qualifier); + } + break; + default: + assert(0); + break; + } + + if (type.isMatrix()) + spvType = builder.makeMatrixType(spvType, type.getMatrixCols(), type.getMatrixRows()); + else { + // If this variable has a vector element count greater than 1, create a SPIR-V vector + if (type.getVectorSize() > 1) + spvType = builder.makeVectorType(spvType, type.getVectorSize()); + } + + if (type.isArray()) { + int stride = 0; // keep this 0 unless doing an explicit layout; 0 will mean no decoration, no stride + + // Do all but the outer dimension + if (type.getArraySizes()->getNumDims() > 1) { + // We need to decorate array strides for types needing explicit layout, except blocks. + if (explicitLayout != glslang::ElpNone && type.getBasicType() != glslang::EbtBlock) { + // Use a dummy glslang type for querying internal strides of + // arrays of arrays, but using just a one-dimensional array. + glslang::TType simpleArrayType(type, 0); // deference type of the array + while (simpleArrayType.getArraySizes().getNumDims() > 1) + simpleArrayType.getArraySizes().dereference(); + + // Will compute the higher-order strides here, rather than making a whole + // pile of types and doing repetitive recursion on their contents. + stride = getArrayStride(simpleArrayType, explicitLayout, qualifier.layoutMatrix); + } + + // make the arrays + for (int dim = type.getArraySizes()->getNumDims() - 1; dim > 0; --dim) { + spvType = builder.makeArrayType(spvType, makeArraySizeId(*type.getArraySizes(), dim), stride); + if (stride > 0) + builder.addDecoration(spvType, spv::DecorationArrayStride, stride); + stride *= type.getArraySizes()->getDimSize(dim); + } + } else { + // single-dimensional array, and don't yet have stride + + // We need to decorate array strides for types needing explicit layout, except blocks. + if (explicitLayout != glslang::ElpNone && type.getBasicType() != glslang::EbtBlock) + stride = getArrayStride(type, explicitLayout, qualifier.layoutMatrix); + } + + // Do the outer dimension, which might not be known for a runtime-sized array + if (type.isRuntimeSizedArray()) { + spvType = builder.makeRuntimeArray(spvType); + } else { + assert(type.getOuterArraySize() > 0); + spvType = builder.makeArrayType(spvType, makeArraySizeId(*type.getArraySizes(), 0), stride); + } + if (stride > 0) + builder.addDecoration(spvType, spv::DecorationArrayStride, stride); + } + + return spvType; +} + +// TODO: this functionality should exist at a higher level, in creating the AST +// +// Identify interface members that don't have their required extension turned on. +// +bool TGlslangToSpvTraverser::filterMember(const glslang::TType& member) +{ + auto& extensions = glslangIntermediate->getRequestedExtensions(); + + 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; + + return false; +}; + +// Do full recursive conversion of a glslang structure (or block) type to a SPIR-V Id. +// explicitLayout can be kept the same throughout the hierarchical recursive walk. +// Mutually recursive with convertGlslangToSpvType(). +spv::Id TGlslangToSpvTraverser::convertGlslangStructToSpvType(const glslang::TType& type, + const glslang::TTypeList* glslangMembers, + glslang::TLayoutPacking explicitLayout, + const glslang::TQualifier& qualifier) +{ + // Create a vector of struct types for SPIR-V to consume + std::vector 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()) { + ++memberDelta; + if (type.getBasicType() == glslang::EbtBlock) + memberRemapper[glslangMembers][i] = -1; + } else { + if (type.getBasicType() == glslang::EbtBlock) { + memberRemapper[glslangMembers][i] = i - memberDelta; + if (filterMember(glslangMember)) + continue; + } + // modify just this child's view of the qualifier + glslang::TQualifier memberQualifier = glslangMember.getQualifier(); + InheritQualifiers(memberQualifier, qualifier); + + // manually inherit location; it's more complex + if (! memberQualifier.hasLocation() && qualifier.hasLocation()) + memberQualifier.layoutLocation = qualifier.layoutLocation + locationOffset; + if (qualifier.hasLocation()) + locationOffset += glslangIntermediate->computeTypeLocationSize(glslangMember); + + // recurse + spvMembers.push_back(convertGlslangToSpvType(glslangMember, explicitLayout, memberQualifier)); + } + } + + // Make the SPIR-V type + spv::Id spvType = builder.makeStructType(spvMembers, type.getTypeName().c_str()); + if (! HasNonLayoutQualifiers(type, qualifier)) + structMap[explicitLayout][qualifier.layoutMatrix][glslangMembers] = spvType; + + // Decorate it + decorateStructType(type, glslangMembers, explicitLayout, qualifier, spvType); + + return spvType; +} + +void TGlslangToSpvTraverser::decorateStructType(const glslang::TType& type, + const glslang::TTypeList* glslangMembers, + glslang::TLayoutPacking explicitLayout, + const glslang::TQualifier& qualifier, + spv::Id spvType) +{ + // Name and decorate the non-hidden members + int offset = -1; + int locationOffset = 0; // for use within the members of this struct + for (int i = 0; i < (int)glslangMembers->size(); i++) { + glslang::TType& glslangMember = *(*glslangMembers)[i].type; + int member = i; + if (type.getBasicType() == glslang::EbtBlock) { + member = memberRemapper[glslangMembers][i]; + if (filterMember(glslangMember)) + continue; + } + + // modify just this child's view of the qualifier + glslang::TQualifier memberQualifier = glslangMember.getQualifier(); + InheritQualifiers(memberQualifier, qualifier); + + // using -1 above to indicate a hidden member + if (member >= 0) { + builder.addMemberName(spvType, member, glslangMember.getFieldName().c_str()); + addMemberDecoration(spvType, member, TranslateLayoutDecoration(glslangMember, memberQualifier.layoutMatrix)); + addMemberDecoration(spvType, member, TranslatePrecisionDecoration(glslangMember)); + // Add interpolation and auxiliary storage decorations only to top-level members of Input and Output storage classes + if (type.getQualifier().storage == glslang::EvqVaryingIn || + type.getQualifier().storage == glslang::EvqVaryingOut) { + if (type.getBasicType() == glslang::EbtBlock || + glslangIntermediate->getSource() == glslang::EShSourceHlsl) { + addMemberDecoration(spvType, member, TranslateInterpolationDecoration(memberQualifier)); + addMemberDecoration(spvType, member, TranslateAuxiliaryStorageDecoration(memberQualifier)); + } + } + addMemberDecoration(spvType, member, TranslateInvariantDecoration(memberQualifier)); + + if (qualifier.storage == glslang::EvqBuffer) { + std::vector 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 + // 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); + + if (qualifier.hasLocation()) // track for upcoming inheritance + locationOffset += glslangIntermediate->computeTypeLocationSize(glslangMember); + + // component, XFB, others + if (glslangMember.getQualifier().hasComponent()) + builder.addMemberDecoration(spvType, member, spv::DecorationComponent, glslangMember.getQualifier().layoutComponent); + if (glslangMember.getQualifier().hasXfbOffset()) + builder.addMemberDecoration(spvType, member, spv::DecorationOffset, glslangMember.getQualifier().layoutXfbOffset); + else if (explicitLayout != glslang::ElpNone) { + // figure out what to do with offset, which is accumulating + int nextOffset; + updateMemberOffset(type, glslangMember, offset, nextOffset, explicitLayout, memberQualifier.layoutMatrix); + if (offset >= 0) + builder.addMemberDecoration(spvType, member, spv::DecorationOffset, offset); + offset = nextOffset; + } + + if (glslangMember.isMatrix() && explicitLayout != glslang::ElpNone) + builder.addMemberDecoration(spvType, member, spv::DecorationMatrixStride, getMatrixStride(glslangMember, explicitLayout, memberQualifier.layoutMatrix)); + + // built-in variable decorations + spv::BuiltIn builtIn = TranslateBuiltInDecoration(glslangMember.getQualifier().builtIn, true); + if (builtIn != spv::BuiltInMax) + addMemberDecoration(spvType, member, spv::DecorationBuiltIn, (int)builtIn); + +#ifdef NV_EXTENSIONS + if (builtIn == spv::BuiltInLayer) { + // SPV_NV_viewport_array2 extension + if (glslangMember.getQualifier().layoutViewportRelative){ + addMemberDecoration(spvType, member, (spv::Decoration)spv::DecorationViewportRelativeNV); + builder.addCapability(spv::CapabilityShaderViewportMaskNV); + builder.addExtension(spv::E_SPV_NV_viewport_array2); + } + if (glslangMember.getQualifier().layoutSecondaryViewportRelativeOffset != -2048){ + addMemberDecoration(spvType, member, (spv::Decoration)spv::DecorationSecondaryViewportRelativeNV, glslangMember.getQualifier().layoutSecondaryViewportRelativeOffset); + builder.addCapability(spv::CapabilityShaderStereoViewNV); + builder.addExtension(spv::E_SPV_NV_stereo_view_rendering); + } + } + if (glslangMember.getQualifier().layoutPassthrough) { + addMemberDecoration(spvType, member, (spv::Decoration)spv::DecorationPassthroughNV); + builder.addCapability(spv::CapabilityGeometryShaderPassthroughNV); + builder.addExtension(spv::E_SPV_NV_geometry_shader_passthrough); + } +#endif + } + } + + // Decorate the structure + addDecoration(spvType, TranslateLayoutDecoration(type, qualifier.layoutMatrix)); + addDecoration(spvType, TranslateBlockDecoration(type)); + if (type.getQualifier().hasStream() && glslangIntermediate->isMultiStream()) { + builder.addCapability(spv::CapabilityGeometryStreams); + builder.addDecoration(spvType, spv::DecorationStream, type.getQualifier().layoutStream); + } + if (glslangIntermediate->getXfbMode()) { + builder.addCapability(spv::CapabilityTransformFeedback); + if (type.getQualifier().hasXfbStride()) + builder.addDecoration(spvType, spv::DecorationXfbStride, type.getQualifier().layoutXfbStride); + if (type.getQualifier().hasXfbBuffer()) + builder.addDecoration(spvType, spv::DecorationXfbBuffer, type.getQualifier().layoutXfbBuffer); + } +} + +// Turn the expression forming the array size into an id. +// This is not quite trivial, because of specialization constants. +// Sometimes, a raw constant is turned into an Id, and sometimes +// a specialization constant expression is. +spv::Id TGlslangToSpvTraverser::makeArraySizeId(const glslang::TArraySizes& arraySizes, int dim) +{ + // First, see if this is sized with a node, meaning a specialization constant: + glslang::TIntermTyped* specNode = arraySizes.getDimNode(dim); + if (specNode != nullptr) { + builder.clearAccessChain(); + specNode->traverse(this); + return accessChainLoad(specNode->getAsTyped()->getType()); + } + + // Otherwise, need a compile-time (front end) size, get it: + int size = arraySizes.getDimSize(dim); + assert(size > 0); + return builder.makeUintConstant(size); +} + +// Wrap the builder's accessChainLoad to: +// - localize handling of RelaxedPrecision +// - use the SPIR-V inferred type instead of another conversion of the glslang type +// (avoids unnecessary work and possible type punning for structures) +// - do conversion of concrete to abstract type +spv::Id TGlslangToSpvTraverser::accessChainLoad(const glslang::TType& type) +{ + spv::Id nominalTypeId = builder.accessChainGetInferredType(); + spv::Id loadedId = builder.accessChainLoad(TranslatePrecisionDecoration(type), nominalTypeId); + + // Need to convert to abstract types when necessary + if (type.getBasicType() == glslang::EbtBool) { + if (builder.isScalarType(nominalTypeId)) { + // Conversion for bool + spv::Id boolType = builder.makeBoolType(); + if (nominalTypeId != boolType) + loadedId = builder.createBinOp(spv::OpINotEqual, boolType, loadedId, 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) + loadedId = builder.createBinOp(spv::OpINotEqual, bvecType, loadedId, makeSmearedConstant(builder.makeUintConstant(0), vecSize)); + } + } + + return loadedId; +} + +// Wrap the builder's accessChainStore to: +// - do conversion of concrete to abstract type +// +// Implicitly uses the existing builder.accessChain as the storage target. +void TGlslangToSpvTraverser::accessChainStore(const glslang::TType& type, spv::Id rvalue) +{ + // Need to convert to abstract types when necessary + if (type.getBasicType() == glslang::EbtBool) { + spv::Id nominalTypeId = builder.accessChainGetInferredType(); + + if (builder.isScalarType(nominalTypeId)) { + // Conversion for bool + spv::Id boolType = builder.makeBoolType(); + if (nominalTypeId != boolType) { + spv::Id zero = builder.makeUintConstant(0); + spv::Id one = builder.makeUintConstant(1); + rvalue = builder.createTriOp(spv::OpSelect, nominalTypeId, rvalue, one, zero); + } + } else if (builder.isVectorType(nominalTypeId)) { + // Conversion for bvec + int vecSize = builder.getNumTypeComponents(nominalTypeId); + spv::Id bvecType = builder.makeVectorType(builder.makeBoolType(), vecSize); + if (nominalTypeId != bvecType) { + 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); + } + } + } + + builder.accessChainStore(rvalue); +} + +// For storing when types match at the glslang level, but not might match at the +// SPIR-V level. +// +// This especially happens when a single glslang type expands to multiple +// SPIR-V types, like a struct that is used in a member-undecorated way as well +// as in a member-decorated way. +// +// NOTE: This function can handle any store request; if it's not special it +// simplifies to a simple OpStore. +// +// Implicitly uses the existing builder.accessChain as the storage target. +void TGlslangToSpvTraverser::multiTypeStore(const glslang::TType& type, spv::Id rValue) +{ + // we only do the complex path here if it's an aggregate + if (! type.isStruct() && ! type.isArray()) { + accessChainStore(type, rValue); + return; + } + + // and, it has to be a case of type aliasing + spv::Id rType = builder.getTypeId(rValue); + spv::Id lValue = builder.accessChainGetLValue(); + spv::Id lType = builder.getContainedTypeId(builder.getTypeId(lValue)); + if (lType == rType) { + accessChainStore(type, rValue); + return; + } + + // Recursively (as needed) copy an aggregate type to a different aggregate type, + // where the two types were the same type in GLSL. This requires member + // by member copy, recursively. + + // If an array, copy element by element. + if (type.isArray()) { + glslang::TType glslangElementType(type, 0); + spv::Id elementRType = builder.getContainedTypeId(rType); + for (int index = 0; index < type.getOuterArraySize(); ++index) { + // get the source member + spv::Id elementRValue = builder.createCompositeExtract(rValue, elementRType, index); + + // set up the target storage + builder.clearAccessChain(); + builder.setAccessChainLValue(lValue); + builder.accessChainPush(builder.makeIntConstant(index)); + + // store the member + multiTypeStore(glslangElementType, elementRValue); + } + } else { + assert(type.isStruct()); + + // loop over structure members + const glslang::TTypeList& members = *type.getStruct(); + for (int m = 0; m < (int)members.size(); ++m) { + const glslang::TType& glslangMemberType = *members[m].type; + + // get the source member + spv::Id memberRType = builder.getContainedTypeId(rType, m); + spv::Id memberRValue = builder.createCompositeExtract(rValue, memberRType, m); + + // set up the target storage + builder.clearAccessChain(); + builder.setAccessChainLValue(lValue); + builder.accessChainPush(builder.makeIntConstant(m)); + + // store the member + multiTypeStore(glslangMemberType, memberRValue); + } + } +} + +// Decide whether or not this type should be +// decorated with offsets and strides, and if so +// whether std140 or std430 rules should be applied. +glslang::TLayoutPacking TGlslangToSpvTraverser::getExplicitLayout(const glslang::TType& type) const +{ + // has to be a block + if (type.getBasicType() != glslang::EbtBlock) + return glslang::ElpNone; + + // has to be a uniform or buffer block + if (type.getQualifier().storage != glslang::EvqUniform && + type.getQualifier().storage != glslang::EvqBuffer) + return glslang::ElpNone; + + // return the layout to use + switch (type.getQualifier().layoutPacking) { + case glslang::ElpStd140: + case glslang::ElpStd430: + return type.getQualifier().layoutPacking; + default: + return glslang::ElpNone; + } +} + +// Given an array type, returns the integer stride required for that array +int TGlslangToSpvTraverser::getArrayStride(const glslang::TType& arrayType, glslang::TLayoutPacking explicitLayout, glslang::TLayoutMatrix matrixLayout) +{ + int size; + int stride; + glslangIntermediate->getBaseAlignment(arrayType, size, stride, explicitLayout == glslang::ElpStd140, matrixLayout == glslang::ElmRowMajor); + + return stride; +} + +// Given a matrix type, or array (of array) of matrixes type, returns the integer stride required for that matrix +// when used as a member of an interface block +int TGlslangToSpvTraverser::getMatrixStride(const glslang::TType& matrixType, glslang::TLayoutPacking explicitLayout, glslang::TLayoutMatrix matrixLayout) +{ + glslang::TType elementType; + elementType.shallowCopy(matrixType); + elementType.clearArraySizes(); + + int size; + int stride; + glslangIntermediate->getBaseAlignment(elementType, size, stride, explicitLayout == glslang::ElpStd140, matrixLayout == glslang::ElmRowMajor); + + return stride; +} + +// Given a member type of a struct, realign the current offset for it, and compute +// the next (not yet aligned) offset for the next member, which will get aligned +// on the next call. +// '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, + glslang::TLayoutPacking explicitLayout, glslang::TLayoutMatrix matrixLayout) +{ + // this will get a positive value when deemed necessary + nextOffset = -1; + + // override anything in currentOffset with user-set offset + if (memberType.getQualifier().hasOffset()) + currentOffset = memberType.getQualifier().layoutOffset; + + // It could be that current linker usage in glslang updated all the layoutOffset, + // in which case the following code does not matter. But, that's not quite right + // once cross-compilation unit GLSL validation is done, as the original user + // settings are needed in layoutOffset, and then the following will come into play. + + if (explicitLayout == glslang::ElpNone) { + if (! memberType.getQualifier().hasOffset()) + currentOffset = -1; + + return; + } + + // Getting this far means we need explicit offsets + if (currentOffset < 0) + currentOffset = 0; + + // Now, currentOffset is valid (either 0, or from a previous nextOffset), + // but possibly not yet correctly aligned. + + int memberSize; + int dummyStride; + int memberAlignment = glslangIntermediate->getBaseAlignment(memberType, memberSize, dummyStride, explicitLayout == glslang::ElpStd140, matrixLayout == glslang::ElmRowMajor); + glslang::RoundToPow2(currentOffset, memberAlignment); + nextOffset = currentOffset + memberSize; +} + +void TGlslangToSpvTraverser::declareUseOfStructMember(const glslang::TTypeList& members, int glslangMember) +{ + const glslang::TBuiltInVariable glslangBuiltIn = members[glslangMember].type->getQualifier().builtIn; + switch (glslangBuiltIn) + { + case glslang::EbvClipDistance: + case glslang::EbvCullDistance: + case glslang::EbvPointSize: +#ifdef NV_EXTENSIONS + case glslang::EbvLayer: + case glslang::EbvViewportIndex: + case glslang::EbvViewportMaskNV: + case glslang::EbvSecondaryPositionNV: + case glslang::EbvSecondaryViewportMaskNV: + case glslang::EbvPositionPerViewNV: + case glslang::EbvViewportMaskPerViewNV: +#endif + // Generate the associated capability. Delegate to TranslateBuiltInDecoration. + // Alternately, we could just call this for any glslang built-in, since the + // capability already guards against duplicates. + TranslateBuiltInDecoration(glslangBuiltIn, false); + break; + default: + // Capabilities were already generated when the struct was declared. + break; + } +} + +bool TGlslangToSpvTraverser::isShaderEntryPoint(const glslang::TIntermAggregate* node) +{ + return node->getName().compare(glslangIntermediate->getEntryPointMangledName().c_str()) == 0; +} + +// Make all the functions, skeletally, without actually visiting their bodies. +void TGlslangToSpvTraverser::makeFunctions(const glslang::TIntermSequence& glslFunctions) +{ + for (int f = 0; f < (int)glslFunctions.size(); ++f) { + glslang::TIntermAggregate* glslFunction = glslFunctions[f]->getAsAggregate(); + if (! glslFunction || glslFunction->getOp() != glslang::EOpFunction || isShaderEntryPoint(glslFunction)) + continue; + + // We're on a user function. Set up the basic interface for the function now, + // so that it's available to call. Translating the body will happen later. + // + // Typically (except for a "const in" parameter), an address will be passed to the + // function. What it is an address of varies: + // + // - "in" parameters not marked as "const" can be written to without modifying the calling + // argument so that write needs to be to a copy, hence the address of a copy works. + // + // - "const in" parameters can just be the r-value, as no writes need occur. + // + // - "out" and "inout" arguments can't be done as pointers to the calling argument, because + // GLSL has copy-in/copy-out semantics. They can be handled though with a pointer to a copy. + + std::vector paramTypes; + std::vector paramPrecisions; + glslang::TIntermSequence& parameters = glslFunction->getSequence()[0]->getAsAggregate()->getSequence(); + + bool implicitThis = (int)parameters.size() > 0 && parameters[0]->getAsSymbolNode()->getName() == glslangIntermediate->implicitThisName; + + 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' + typeId = builder.makePointer(TranslateStorageClass(paramType), typeId); + else if (paramType.getQualifier().storage != glslang::EvqConstReadOnly) + typeId = builder.makePointer(spv::StorageClassFunction, typeId); + else + rValueParameters.insert(parameters[p]->getAsSymbolNode()->getId()); + paramPrecisions.push_back(TranslatePrecisionDecoration(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); + if (implicitThis) + function->setImplicitThis(); + + // Track function to emit/call later + functionMap[glslFunction->getName().c_str()] = function; + + // Set the parameter id's + for (int p = 0; p < (int)parameters.size(); ++p) { + symbolValues[parameters[p]->getAsSymbolNode()->getId()] = function->getParamId(p); + // give a name too + builder.addName(function->getParamId(p), parameters[p]->getAsSymbolNode()->getName().c_str()); + } + } +} + +// Process all the initializers, while skipping the functions and link objects +void TGlslangToSpvTraverser::makeGlobalInitializers(const glslang::TIntermSequence& initializers) +{ + builder.setBuildPoint(shaderEntry->getLastBlock()); + for (int i = 0; i < (int)initializers.size(); ++i) { + glslang::TIntermAggregate* initializer = initializers[i]->getAsAggregate(); + if (initializer && initializer->getOp() != glslang::EOpFunction && initializer->getOp() != glslang::EOpLinkerObjects) { + + // We're on a top-level node that's not a function. Treat as an initializer, whose + // code goes into the beginning of the entry point. + initializer->traverse(this); + } + } +} + +// Process all the functions, while skipping initializers. +void TGlslangToSpvTraverser::visitFunctions(const glslang::TIntermSequence& glslFunctions) +{ + for (int f = 0; f < (int)glslFunctions.size(); ++f) { + glslang::TIntermAggregate* node = glslFunctions[f]->getAsAggregate(); + if (node && (node->getOp() == glslang::EOpFunction || node->getOp() == glslang::EOpLinkerObjects)) + node->traverse(this); + } +} + +void TGlslangToSpvTraverser::handleFunctionEntry(const glslang::TIntermAggregate* node) +{ + // SPIR-V functions should already be in the functionMap from the prepass + // that called makeFunctions(). + currentFunction = functionMap[node->getName().c_str()]; + spv::Block* functionBlock = currentFunction->getEntryBlock(); + builder.setBuildPoint(functionBlock); +} + +void TGlslangToSpvTraverser::translateArguments(const glslang::TIntermAggregate& node, std::vector& arguments) +{ + const glslang::TIntermSequence& glslangArguments = node.getSequence(); + + glslang::TSampler sampler = {}; + bool cubeCompare = false; + if (node.isTexture() || node.isImage()) { + sampler = glslangArguments[0]->getAsTyped()->getType().getSampler(); + cubeCompare = sampler.dim == glslang::EsdCube && sampler.arrayed && sampler.shadow; + } + + for (int i = 0; i < (int)glslangArguments.size(); ++i) { + builder.clearAccessChain(); + glslangArguments[i]->traverse(this); + + // Special case l-value operands + bool lvalue = false; + switch (node.getOp()) { + case glslang::EOpImageAtomicAdd: + case glslang::EOpImageAtomicMin: + case glslang::EOpImageAtomicMax: + case glslang::EOpImageAtomicAnd: + case glslang::EOpImageAtomicOr: + case glslang::EOpImageAtomicXor: + case glslang::EOpImageAtomicExchange: + case glslang::EOpImageAtomicCompSwap: + if (i == 0) + lvalue = true; + break; + case glslang::EOpSparseImageLoad: + if ((sampler.ms && i == 3) || (! sampler.ms && i == 2)) + lvalue = true; + break; + case glslang::EOpSparseTexture: + if ((cubeCompare && i == 3) || (! cubeCompare && i == 2)) + lvalue = true; + break; + case glslang::EOpSparseTextureClamp: + if ((cubeCompare && i == 4) || (! cubeCompare && i == 3)) + lvalue = true; + break; + case glslang::EOpSparseTextureLod: + case glslang::EOpSparseTextureOffset: + if (i == 3) + lvalue = true; + break; + case glslang::EOpSparseTextureFetch: + if ((sampler.dim != glslang::EsdRect && i == 3) || (sampler.dim == glslang::EsdRect && i == 2)) + lvalue = true; + break; + case glslang::EOpSparseTextureFetchOffset: + if ((sampler.dim != glslang::EsdRect && i == 4) || (sampler.dim == glslang::EsdRect && i == 3)) + lvalue = true; + break; + case glslang::EOpSparseTextureLodOffset: + case glslang::EOpSparseTextureGrad: + case glslang::EOpSparseTextureOffsetClamp: + if (i == 4) + lvalue = true; + break; + case glslang::EOpSparseTextureGradOffset: + case glslang::EOpSparseTextureGradClamp: + if (i == 5) + lvalue = true; + break; + case glslang::EOpSparseTextureGradOffsetClamp: + if (i == 6) + lvalue = true; + break; + case glslang::EOpSparseTextureGather: + if ((sampler.shadow && i == 3) || (! sampler.shadow && i == 2)) + lvalue = true; + break; + case glslang::EOpSparseTextureGatherOffset: + case glslang::EOpSparseTextureGatherOffsets: + if ((sampler.shadow && i == 4) || (! sampler.shadow && i == 3)) + lvalue = true; + break; + default: + break; + } + + if (lvalue) + arguments.push_back(builder.accessChainGetLValue()); + else + arguments.push_back(accessChainLoad(glslangArguments[i]->getAsTyped()->getType())); + } +} + +void TGlslangToSpvTraverser::translateArguments(glslang::TIntermUnary& node, std::vector& arguments) +{ + builder.clearAccessChain(); + node.getOperand()->traverse(this); + arguments.push_back(accessChainLoad(node.getOperand()->getType())); +} + +spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermOperator* node) +{ + if (! node->isImage() && ! node->isTexture()) { + return spv::NoResult; + } + auto resultType = [&node,this]{ return convertGlslangToSpvType(node->getType()); }; + + // Process a GLSL texturing op (will be SPV image) + const glslang::TSampler sampler = node->getAsAggregate() ? node->getAsAggregate()->getSequence()[0]->getAsTyped()->getType().getSampler() + : node->getAsUnaryNode()->getOperand()->getAsTyped()->getType().getSampler(); + std::vector arguments; + if (node->getAsAggregate()) + translateArguments(*node->getAsAggregate(), arguments); + else + translateArguments(*node->getAsUnaryNode(), arguments); + spv::Decoration precision = TranslatePrecisionDecoration(node->getOperationPrecision()); + + spv::Builder::TextureParameters params = { }; + params.sampler = arguments[0]; + + glslang::TCrackedTextureOp cracked; + node->crackTexture(sampler, cracked); + + const bool isUnsignedResult = + node->getType().getBasicType() == glslang::EbtUint64 || + node->getType().getBasicType() == glslang::EbtUint; + + // Check for queries + if (cracked.query) { + // OpImageQueryLod works on a sampled image, for other queries the image has to be extracted first + if (node->getOp() != glslang::EOpTextureQueryLod && builder.isSampledImage(params.sampler)) + params.sampler = builder.createUnaryOp(spv::OpImage, builder.getImageType(params.sampler), params.sampler); + + switch (node->getOp()) { + case glslang::EOpImageQuerySize: + case glslang::EOpTextureQuerySize: + if (arguments.size() > 1) { + params.lod = arguments[1]; + return builder.createTextureQueryCall(spv::OpImageQuerySizeLod, params, isUnsignedResult); + } else + return builder.createTextureQueryCall(spv::OpImageQuerySize, params, isUnsignedResult); + case glslang::EOpImageQuerySamples: + case glslang::EOpTextureQuerySamples: + return builder.createTextureQueryCall(spv::OpImageQuerySamples, params, isUnsignedResult); + case glslang::EOpTextureQueryLod: + params.coords = arguments[1]; + return builder.createTextureQueryCall(spv::OpImageQueryLod, params, isUnsignedResult); + case glslang::EOpTextureQueryLevels: + return builder.createTextureQueryCall(spv::OpImageQueryLevels, params, isUnsignedResult); + case glslang::EOpSparseTexelsResident: + return builder.createUnaryOp(spv::OpImageSparseTexelsResident, builder.makeBoolType(), arguments[0]); + default: + assert(0); + break; + } + } + + // Check for image functions other than queries + if (node->isImage()) { + std::vector operands; + auto opIt = arguments.begin(); + operands.push_back(*(opIt++)); + + // Handle subpass operations + // TODO: GLSL should change to have the "MS" only on the type rather than the + // built-in function. + if (cracked.subpass) { + // add on the (0,0) coordinate + spv::Id zero = builder.makeIntConstant(0); + std::vector comps; + comps.push_back(zero); + comps.push_back(zero); + operands.push_back(builder.makeCompositeConstant(builder.makeVectorType(builder.makeIntType(32), 2), comps)); + if (sampler.ms) { + operands.push_back(spv::ImageOperandsSampleMask); + operands.push_back(*(opIt++)); + } + return builder.createOp(spv::OpImageRead, resultType(), operands); + } + + operands.push_back(*(opIt++)); + if (node->getOp() == glslang::EOpImageLoad) { + if (sampler.ms) { + operands.push_back(spv::ImageOperandsSampleMask); + operands.push_back(*opIt); + } + if (builder.getImageTypeFormat(builder.getImageType(operands.front())) == spv::ImageFormatUnknown) + builder.addCapability(spv::CapabilityStorageImageReadWithoutFormat); + return builder.createOp(spv::OpImageRead, resultType(), operands); + } else if (node->getOp() == glslang::EOpImageStore) { + if (sampler.ms) { + operands.push_back(*(opIt + 1)); + operands.push_back(spv::ImageOperandsSampleMask); + operands.push_back(*opIt); + } 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; + } else if (node->getOp() == glslang::EOpSparseImageLoad) { + builder.addCapability(spv::CapabilitySparseResidency); + if (builder.getImageTypeFormat(builder.getImageType(operands.front())) == spv::ImageFormatUnknown) + builder.addCapability(spv::CapabilityStorageImageReadWithoutFormat); + + if (sampler.ms) { + operands.push_back(spv::ImageOperandsSampleMask); + operands.push_back(*opIt++); + } + + // Create the return type that was a special structure + spv::Id texelOut = *opIt; + spv::Id typeId0 = resultType(); + spv::Id typeId1 = builder.getDerefTypeId(texelOut); + spv::Id resultTypeId = builder.makeStructResultType(typeId0, typeId1); + + spv::Id resultId = builder.createOp(spv::OpImageSparseRead, resultTypeId, operands); + + // Decode the return type + builder.createStore(builder.createCompositeExtract(resultId, typeId1, 1), texelOut); + return builder.createCompositeExtract(resultId, typeId0, 0); + } else { + // Process image atomic operations + + // GLSL "IMAGE_PARAMS" will involve in constructing an image texel pointer and this pointer, + // as the first source operand, is required by SPIR-V atomic operations. + operands.push_back(sampler.ms ? *(opIt++) : builder.makeUintConstant(0)); // For non-MS, the value should be 0 + + spv::Id resultTypeId = builder.makePointer(spv::StorageClassImage, resultType()); + spv::Id pointer = builder.createOp(spv::OpImageTexelPointer, resultTypeId, operands); + + std::vector operands; + operands.push_back(pointer); + for (; opIt != arguments.end(); ++opIt) + operands.push_back(*opIt); + + return createAtomicOperation(node->getOp(), precision, resultType(), operands, node->getBasicType()); + } + } + + // 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; + if (! cracked.lod && ! cracked.gather && ! cracked.grad && ! cracked.fetch && ! cubeCompare) { + int nonBiasArgCount = 2; + if (cracked.offset) + ++nonBiasArgCount; + if (cracked.grad) + nonBiasArgCount += 2; + if (cracked.lodClamp) + ++nonBiasArgCount; + if (sparse) + ++nonBiasArgCount; + + if ((int)arguments.size() > nonBiasArgCount) + bias = true; + } + + // See if the sampler param should really be just the SPV image part + if (cracked.fetch) { + // a fetch needs to have the image extracted first + if (builder.isSampledImage(params.sampler)) + params.sampler = builder.createUnaryOp(spv::OpImage, builder.getImageType(params.sampler), params.sampler); + } + + // set the rest of the arguments + + params.coords = arguments[1]; + int extraArgs = 0; + bool noImplicitLod = false; + + // sort out where Dref is coming from + if (cubeCompare) { + params.Dref = arguments[2]; + ++extraArgs; + } else if (sampler.shadow && cracked.gather) { + params.Dref = arguments[2]; + ++extraArgs; + } else if (sampler.shadow) { + std::vector indexes; + int dRefComp; + if (cracked.proj) + dRefComp = 2; // "The resulting 3rd component of P in the shadow forms is used as Dref" + else + dRefComp = builder.getNumComponents(params.coords) - 1; + indexes.push_back(dRefComp); + params.Dref = builder.createCompositeExtract(params.coords, builder.getScalarTypeId(builder.getTypeId(params.coords)), indexes); + } + + // lod + if (cracked.lod) { + params.lod = arguments[2]; + ++extraArgs; + } else if (glslangIntermediate->getStage() != EShLangFragment) { + // we need to invent the default lod for an explicit lod instruction for a non-fragment stage + noImplicitLod = true; + } + + // multisample + if (sampler.ms) { + params.sample = arguments[2]; // For MS, "sample" should be specified + ++extraArgs; + } + + // gradient + if (cracked.grad) { + params.gradX = arguments[2 + extraArgs]; + params.gradY = arguments[3 + extraArgs]; + extraArgs += 2; + } + + // offset and offsets + if (cracked.offset) { + params.offset = arguments[2 + extraArgs]; + ++extraArgs; + } else if (cracked.offsets) { + params.offsets = arguments[2 + extraArgs]; + ++extraArgs; + } + + // lod clamp + if (cracked.lodClamp) { + params.lodClamp = arguments[2 + extraArgs]; + ++extraArgs; + } + + // sparse + if (sparse) { + params.texelOut = arguments[2 + extraArgs]; + ++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 { + params.component = builder.makeIntConstant(0); + } + } + + // projective component (might not to move) + // GLSL: "The texture coordinates consumed from P, not including the last component of P, + // are divided by the last component of P." + // SPIR-V: "... (u [, v] [, w], q)... It may be a vector larger than needed, but all + // unused components will appear after all used components." + if (cracked.proj) { + int projSourceComp = builder.getNumComponents(params.coords) - 1; + int projTargetComp; + switch (sampler.dim) { + case glslang::Esd1D: projTargetComp = 1; break; + case glslang::Esd2D: projTargetComp = 2; break; + case glslang::EsdRect: projTargetComp = 2; break; + default: projTargetComp = projSourceComp; break; + } + // copy the projective coordinate if we have to + if (projTargetComp != projSourceComp) { + spv::Id projComp = builder.createCompositeExtract(params.coords, + builder.getScalarTypeId(builder.getTypeId(params.coords)), + projSourceComp); + params.coords = builder.createCompositeInsert(projComp, params.coords, + builder.getTypeId(params.coords), projTargetComp); + } + } + + return builder.createTextureCall(precision, resultType(), sparse, cracked.fetch, cracked.proj, cracked.gather, noImplicitLod, params); +} + +spv::Id TGlslangToSpvTraverser::handleUserFunctionCall(const glslang::TIntermAggregate* node) +{ + // Grab the function's pointer from the previously created function + spv::Function* function = functionMap[node->getName().c_str()]; + if (! function) + return 0; + + const glslang::TIntermSequence& glslangArgs = node->getSequence(); + const glslang::TQualifierList& qualifiers = node->getQualifierList(); + + // See comments in makeFunctions() for details about the semantics for parameter passing. + // + // These imply we need a four step process: + // 1. Evaluate the arguments + // 2. Allocate and make copies of in, out, and inout arguments + // 3. Make the call + // 4. Copy back the results + + // 1. Evaluate the arguments + std::vector lValues; + std::vector rValues; + std::vector argTypes; + for (int a = 0; a < (int)glslangArgs.size(); ++a) { + const glslang::TType& paramType = glslangArgs[a]->getAsTyped()->getType(); + // build l-value + builder.clearAccessChain(); + glslangArgs[a]->traverse(this); + argTypes.push_back(¶mType); + // keep outputs and opaque objects as l-values, evaluate input-only as r-values + if (qualifiers[a] != glslang::EvqConstReadOnly || paramType.containsOpaque()) { + // save l-value + lValues.push_back(builder.getAccessChain()); + } else { + // process r-value + rValues.push_back(accessChainLoad(*argTypes.back())); + } + } + + // 2. Allocate space for anything needing a copy, and if it's "in" or "inout" + // copy the original into that space. + // + // Also, build up the list of actual arguments to pass in for the call + int lValueCount = 0; + int rValueCount = 0; + std::vector spvArgs; + 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())) { + builder.setAccessChain(lValues[lValueCount]); + arg = builder.accessChainGetLValue(); + ++lValueCount; + } else if (qualifiers[a] != glslang::EvqConstReadOnly) { + // need space to hold the copy + arg = builder.createVariable(spv::StorageClassFunction, convertGlslangToSpvType(paramType), "param"); + if (qualifiers[a] == glslang::EvqIn || qualifiers[a] == glslang::EvqInOut) { + // need to copy the input into output space + builder.setAccessChain(lValues[lValueCount]); + spv::Id copy = accessChainLoad(*argTypes[a]); + builder.clearAccessChain(); + builder.setAccessChainLValue(arg); + multiTypeStore(paramType, copy); + } + ++lValueCount; + } else { + arg = rValues[rValueCount]; + ++rValueCount; + } + spvArgs.push_back(arg); + } + + // 3. Make the call. + spv::Id result = builder.createFunctionCall(function, spvArgs); + builder.setPrecision(result, TranslatePrecisionDecoration(node->getType())); + + // 4. Copy back out an "out" arguments. + 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 (qualifiers[a] == glslang::EvqOut || qualifiers[a] == glslang::EvqInOut) { + spv::Id copy = builder.createLoad(spvArgs[a]); + builder.setAccessChain(lValues[lValueCount]); + multiTypeStore(paramType, copy); + } + ++lValueCount; + } + } + + return result; +} + +// Translate AST operation to SPV operation, already having SPV-based operands/types. +spv::Id TGlslangToSpvTraverser::createBinaryOperation(glslang::TOperator op, spv::Decoration precision, + spv::Decoration noContraction, + 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 isFloat = typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble || typeProxy == glslang::EbtFloat16; +#else + bool isFloat = typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble; +#endif + bool isBool = typeProxy == glslang::EbtBool; + + spv::Op binOp = spv::OpNop; + bool needMatchingVectors = true; // for non-matrix ops, would a scalar need to smear to match a vector? + bool comparison = false; + + switch (op) { + case glslang::EOpAdd: + case glslang::EOpAddAssign: + if (isFloat) + binOp = spv::OpFAdd; + else + binOp = spv::OpIAdd; + break; + case glslang::EOpSub: + case glslang::EOpSubAssign: + if (isFloat) + binOp = spv::OpFSub; + else + binOp = spv::OpISub; + break; + case glslang::EOpMul: + case glslang::EOpMulAssign: + if (isFloat) + binOp = spv::OpFMul; + else + binOp = spv::OpIMul; + break; + case glslang::EOpVectorTimesScalar: + case glslang::EOpVectorTimesScalarAssign: + if (isFloat && (builder.isVector(left) || builder.isVector(right))) { + if (builder.isVector(right)) + std::swap(left, right); + assert(builder.isScalar(right)); + needMatchingVectors = false; + binOp = spv::OpVectorTimesScalar; + } else + binOp = spv::OpIMul; + break; + case glslang::EOpVectorTimesMatrix: + case glslang::EOpVectorTimesMatrixAssign: + binOp = spv::OpVectorTimesMatrix; + break; + case glslang::EOpMatrixTimesVector: + binOp = spv::OpMatrixTimesVector; + break; + case glslang::EOpMatrixTimesScalar: + case glslang::EOpMatrixTimesScalarAssign: + binOp = spv::OpMatrixTimesScalar; + break; + case glslang::EOpMatrixTimesMatrix: + case glslang::EOpMatrixTimesMatrixAssign: + binOp = spv::OpMatrixTimesMatrix; + break; + case glslang::EOpOuterProduct: + binOp = spv::OpOuterProduct; + needMatchingVectors = false; + break; + + case glslang::EOpDiv: + case glslang::EOpDivAssign: + if (isFloat) + binOp = spv::OpFDiv; + else if (isUnsigned) + binOp = spv::OpUDiv; + else + binOp = spv::OpSDiv; + break; + case glslang::EOpMod: + case glslang::EOpModAssign: + if (isFloat) + binOp = spv::OpFMod; + else if (isUnsigned) + binOp = spv::OpUMod; + else + binOp = spv::OpSMod; + break; + case glslang::EOpRightShift: + case glslang::EOpRightShiftAssign: + if (isUnsigned) + binOp = spv::OpShiftRightLogical; + else + binOp = spv::OpShiftRightArithmetic; + break; + case glslang::EOpLeftShift: + case glslang::EOpLeftShiftAssign: + binOp = spv::OpShiftLeftLogical; + break; + case glslang::EOpAnd: + case glslang::EOpAndAssign: + binOp = spv::OpBitwiseAnd; + break; + case glslang::EOpLogicalAnd: + needMatchingVectors = false; + binOp = spv::OpLogicalAnd; + break; + case glslang::EOpInclusiveOr: + case glslang::EOpInclusiveOrAssign: + binOp = spv::OpBitwiseOr; + break; + case glslang::EOpLogicalOr: + needMatchingVectors = false; + binOp = spv::OpLogicalOr; + break; + case glslang::EOpExclusiveOr: + case glslang::EOpExclusiveOrAssign: + binOp = spv::OpBitwiseXor; + break; + case glslang::EOpLogicalXor: + needMatchingVectors = false; + binOp = spv::OpLogicalNotEqual; + break; + + case glslang::EOpLessThan: + case glslang::EOpGreaterThan: + case glslang::EOpLessThanEqual: + case glslang::EOpGreaterThanEqual: + case glslang::EOpEqual: + case glslang::EOpNotEqual: + case glslang::EOpVectorEqual: + case glslang::EOpVectorNotEqual: + comparison = true; + break; + default: + break; + } + + // handle mapped binary operations (should be non-comparison) + if (binOp != spv::OpNop) { + assert(comparison == false); + if (builder.isMatrix(left) || builder.isMatrix(right)) + return createBinaryMatrixOperation(binOp, precision, noContraction, typeId, left, right); + + // No matrix involved; make both operands be the same number of components, if needed + if (needMatchingVectors) + builder.promoteScalar(precision, left, right); + + spv::Id result = builder.createBinOp(binOp, typeId, left, right); + addDecoration(result, noContraction); + return builder.setPrecision(result, precision); + } + + if (! comparison) + return 0; + + // Handle comparison instructions + + if (reduceComparison && (op == glslang::EOpEqual || op == glslang::EOpNotEqual) + && (builder.isVector(left) || builder.isMatrix(left) || builder.isAggregate(left))) + return builder.createCompositeCompare(precision, left, right, op == glslang::EOpEqual); + + switch (op) { + case glslang::EOpLessThan: + if (isFloat) + binOp = spv::OpFOrdLessThan; + else if (isUnsigned) + binOp = spv::OpULessThan; + else + binOp = spv::OpSLessThan; + break; + case glslang::EOpGreaterThan: + if (isFloat) + binOp = spv::OpFOrdGreaterThan; + else if (isUnsigned) + binOp = spv::OpUGreaterThan; + else + binOp = spv::OpSGreaterThan; + break; + case glslang::EOpLessThanEqual: + if (isFloat) + binOp = spv::OpFOrdLessThanEqual; + else if (isUnsigned) + binOp = spv::OpULessThanEqual; + else + binOp = spv::OpSLessThanEqual; + break; + case glslang::EOpGreaterThanEqual: + if (isFloat) + binOp = spv::OpFOrdGreaterThanEqual; + else if (isUnsigned) + binOp = spv::OpUGreaterThanEqual; + else + binOp = spv::OpSGreaterThanEqual; + break; + case glslang::EOpEqual: + case glslang::EOpVectorEqual: + if (isFloat) + binOp = spv::OpFOrdEqual; + else if (isBool) + binOp = spv::OpLogicalEqual; + else + binOp = spv::OpIEqual; + break; + case glslang::EOpNotEqual: + case glslang::EOpVectorNotEqual: + if (isFloat) + binOp = spv::OpFOrdNotEqual; + else if (isBool) + binOp = spv::OpLogicalNotEqual; + else + binOp = spv::OpINotEqual; + break; + default: + break; + } + + if (binOp != spv::OpNop) { + spv::Id result = builder.createBinOp(binOp, typeId, left, right); + addDecoration(result, noContraction); + return builder.setPrecision(result, precision); + } + + return 0; +} + +// +// Translate AST matrix operation to SPV operation, already having SPV-based operands/types. +// These can be any of: +// +// matrix * scalar +// scalar * matrix +// matrix * matrix linear algebraic +// matrix * vector +// vector * matrix +// matrix * matrix componentwise +// matrix op matrix op in {+, -, /} +// matrix op scalar op in {+, -, /} +// scalar op matrix op in {+, -, /} +// +spv::Id TGlslangToSpvTraverser::createBinaryMatrixOperation(spv::Op op, spv::Decoration precision, spv::Decoration noContraction, spv::Id typeId, spv::Id left, spv::Id right) +{ + bool firstClass = true; + + // First, handle first-class matrix operations (* and matrix/scalar) + switch (op) { + case spv::OpFDiv: + if (builder.isMatrix(left) && builder.isScalar(right)) { + // turn matrix / scalar into a multiply... + right = builder.createBinOp(spv::OpFDiv, builder.getTypeId(right), builder.makeFloatConstant(1.0F), right); + op = spv::OpMatrixTimesScalar; + } else + firstClass = false; + break; + case spv::OpMatrixTimesScalar: + if (builder.isMatrix(right)) + std::swap(left, right); + assert(builder.isScalar(right)); + break; + case spv::OpVectorTimesMatrix: + assert(builder.isVector(left)); + assert(builder.isMatrix(right)); + break; + case spv::OpMatrixTimesVector: + assert(builder.isMatrix(left)); + assert(builder.isVector(right)); + break; + case spv::OpMatrixTimesMatrix: + assert(builder.isMatrix(left)); + assert(builder.isMatrix(right)); + break; + default: + firstClass = false; + break; + } + + if (firstClass) { + spv::Id result = builder.createBinOp(op, typeId, left, right); + addDecoration(result, noContraction); + return builder.setPrecision(result, precision); + } + + // Handle component-wise +, -, *, %, and / for all combinations of type. + // The result type of all of them is the same type as the (a) matrix operand. + // The algorithm is to: + // - break the matrix(es) into vectors + // - smear any scalar to a vector + // - do vector operations + // - make a matrix out the vector results + switch (op) { + case spv::OpFAdd: + case spv::OpFSub: + case spv::OpFDiv: + case spv::OpFMod: + case spv::OpFMul: + { + // one time set up... + bool leftMat = builder.isMatrix(left); + bool rightMat = builder.isMatrix(right); + unsigned int numCols = leftMat ? builder.getNumColumns(left) : builder.getNumColumns(right); + int numRows = leftMat ? builder.getNumRows(left) : builder.getNumRows(right); + spv::Id scalarType = builder.getScalarTypeId(typeId); + spv::Id vecType = builder.makeVectorType(scalarType, numRows); + std::vector results; + spv::Id smearVec = spv::NoResult; + if (builder.isScalar(left)) + smearVec = builder.smearScalar(precision, left, vecType); + else if (builder.isScalar(right)) + smearVec = builder.smearScalar(precision, right, vecType); + + // do each vector op + for (unsigned int c = 0; c < numCols; ++c) { + std::vector indexes; + indexes.push_back(c); + spv::Id leftVec = leftMat ? builder.createCompositeExtract( left, vecType, indexes) : smearVec; + spv::Id rightVec = rightMat ? builder.createCompositeExtract(right, vecType, indexes) : smearVec; + spv::Id result = builder.createBinOp(op, vecType, leftVec, rightVec); + addDecoration(result, noContraction); + results.push_back(builder.setPrecision(result, precision)); + } + + // put the pieces together + return builder.setPrecision(builder.createCompositeConstruct(typeId, results), precision); + } + default: + assert(0); + return spv::NoResult; + } +} + +spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, spv::Decoration precision, spv::Decoration noContraction, spv::Id typeId, spv::Id operand, glslang::TBasicType typeProxy) +{ + spv::Op unaryOp = spv::OpNop; + int extBuiltins = -1; + int libCall = -1; + bool isUnsigned = typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64; +#ifdef AMD_EXTENSIONS + bool isFloat = typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble || typeProxy == glslang::EbtFloat16; +#else + bool isFloat = typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble; +#endif + + switch (op) { + case glslang::EOpNegative: + if (isFloat) { + unaryOp = spv::OpFNegate; + if (builder.isMatrixType(typeId)) + return createUnaryMatrixOperation(unaryOp, precision, noContraction, typeId, operand, typeProxy); + } else + unaryOp = spv::OpSNegate; + break; + + case glslang::EOpLogicalNot: + case glslang::EOpVectorLogicalNot: + unaryOp = spv::OpLogicalNot; + break; + case glslang::EOpBitwiseNot: + unaryOp = spv::OpNot; + break; + + case glslang::EOpDeterminant: + libCall = spv::GLSLstd450Determinant; + break; + case glslang::EOpMatrixInverse: + libCall = spv::GLSLstd450MatrixInverse; + break; + case glslang::EOpTranspose: + unaryOp = spv::OpTranspose; + break; + + case glslang::EOpRadians: + libCall = spv::GLSLstd450Radians; + break; + case glslang::EOpDegrees: + libCall = spv::GLSLstd450Degrees; + break; + case glslang::EOpSin: + libCall = spv::GLSLstd450Sin; + break; + case glslang::EOpCos: + libCall = spv::GLSLstd450Cos; + break; + case glslang::EOpTan: + libCall = spv::GLSLstd450Tan; + break; + case glslang::EOpAcos: + libCall = spv::GLSLstd450Acos; + break; + case glslang::EOpAsin: + libCall = spv::GLSLstd450Asin; + break; + case glslang::EOpAtan: + libCall = spv::GLSLstd450Atan; + break; + + case glslang::EOpAcosh: + libCall = spv::GLSLstd450Acosh; + break; + case glslang::EOpAsinh: + libCall = spv::GLSLstd450Asinh; + break; + case glslang::EOpAtanh: + libCall = spv::GLSLstd450Atanh; + break; + case glslang::EOpTanh: + libCall = spv::GLSLstd450Tanh; + break; + case glslang::EOpCosh: + libCall = spv::GLSLstd450Cosh; + break; + case glslang::EOpSinh: + libCall = spv::GLSLstd450Sinh; + break; + + case glslang::EOpLength: + libCall = spv::GLSLstd450Length; + break; + case glslang::EOpNormalize: + libCall = spv::GLSLstd450Normalize; + break; + + case glslang::EOpExp: + libCall = spv::GLSLstd450Exp; + break; + case glslang::EOpLog: + libCall = spv::GLSLstd450Log; + break; + case glslang::EOpExp2: + libCall = spv::GLSLstd450Exp2; + break; + case glslang::EOpLog2: + libCall = spv::GLSLstd450Log2; + break; + case glslang::EOpSqrt: + libCall = spv::GLSLstd450Sqrt; + break; + case glslang::EOpInverseSqrt: + libCall = spv::GLSLstd450InverseSqrt; + break; + + case glslang::EOpFloor: + libCall = spv::GLSLstd450Floor; + break; + case glslang::EOpTrunc: + libCall = spv::GLSLstd450Trunc; + break; + case glslang::EOpRound: + libCall = spv::GLSLstd450Round; + break; + case glslang::EOpRoundEven: + libCall = spv::GLSLstd450RoundEven; + break; + case glslang::EOpCeil: + libCall = spv::GLSLstd450Ceil; + break; + case glslang::EOpFract: + libCall = spv::GLSLstd450Fract; + break; + + case glslang::EOpIsNan: + unaryOp = spv::OpIsNan; + break; + case glslang::EOpIsInf: + unaryOp = spv::OpIsInf; + break; + case glslang::EOpIsFinite: + unaryOp = spv::OpIsFinite; + break; + + case glslang::EOpFloatBitsToInt: + case glslang::EOpFloatBitsToUint: + case glslang::EOpIntBitsToFloat: + case glslang::EOpUintBitsToFloat: + case glslang::EOpDoubleBitsToInt64: + case glslang::EOpDoubleBitsToUint64: + case glslang::EOpInt64BitsToDouble: + case glslang::EOpUint64BitsToDouble: + unaryOp = spv::OpBitcast; + break; + + case glslang::EOpPackSnorm2x16: + libCall = spv::GLSLstd450PackSnorm2x16; + break; + case glslang::EOpUnpackSnorm2x16: + libCall = spv::GLSLstd450UnpackSnorm2x16; + break; + case glslang::EOpPackUnorm2x16: + libCall = spv::GLSLstd450PackUnorm2x16; + break; + case glslang::EOpUnpackUnorm2x16: + libCall = spv::GLSLstd450UnpackUnorm2x16; + break; + case glslang::EOpPackHalf2x16: + libCall = spv::GLSLstd450PackHalf2x16; + break; + case glslang::EOpUnpackHalf2x16: + libCall = spv::GLSLstd450UnpackHalf2x16; + break; + case glslang::EOpPackSnorm4x8: + libCall = spv::GLSLstd450PackSnorm4x8; + break; + case glslang::EOpUnpackSnorm4x8: + libCall = spv::GLSLstd450UnpackSnorm4x8; + break; + case glslang::EOpPackUnorm4x8: + libCall = spv::GLSLstd450PackUnorm4x8; + break; + case glslang::EOpUnpackUnorm4x8: + libCall = spv::GLSLstd450UnpackUnorm4x8; + break; + case glslang::EOpPackDouble2x32: + libCall = spv::GLSLstd450PackDouble2x32; + break; + case glslang::EOpUnpackDouble2x32: + libCall = spv::GLSLstd450UnpackDouble2x32; + break; + + case glslang::EOpPackInt2x32: + case glslang::EOpUnpackInt2x32: + case glslang::EOpPackUint2x32: + case glslang::EOpUnpackUint2x32: + unaryOp = spv::OpBitcast; + break; + +#ifdef AMD_EXTENSIONS + case glslang::EOpPackFloat2x16: + case glslang::EOpUnpackFloat2x16: + unaryOp = spv::OpBitcast; + break; +#endif + + case glslang::EOpDPdx: + unaryOp = spv::OpDPdx; + break; + case glslang::EOpDPdy: + unaryOp = spv::OpDPdy; + break; + case glslang::EOpFwidth: + unaryOp = spv::OpFwidth; + break; + case glslang::EOpDPdxFine: + builder.addCapability(spv::CapabilityDerivativeControl); + unaryOp = spv::OpDPdxFine; + break; + case glslang::EOpDPdyFine: + builder.addCapability(spv::CapabilityDerivativeControl); + unaryOp = spv::OpDPdyFine; + break; + case glslang::EOpFwidthFine: + builder.addCapability(spv::CapabilityDerivativeControl); + unaryOp = spv::OpFwidthFine; + break; + case glslang::EOpDPdxCoarse: + builder.addCapability(spv::CapabilityDerivativeControl); + unaryOp = spv::OpDPdxCoarse; + break; + case glslang::EOpDPdyCoarse: + builder.addCapability(spv::CapabilityDerivativeControl); + unaryOp = spv::OpDPdyCoarse; + break; + case glslang::EOpFwidthCoarse: + builder.addCapability(spv::CapabilityDerivativeControl); + unaryOp = spv::OpFwidthCoarse; + break; + case glslang::EOpInterpolateAtCentroid: + builder.addCapability(spv::CapabilityInterpolationFunction); + libCall = spv::GLSLstd450InterpolateAtCentroid; + break; + case glslang::EOpAny: + unaryOp = spv::OpAny; + break; + case glslang::EOpAll: + unaryOp = spv::OpAll; + break; + + case glslang::EOpAbs: + if (isFloat) + libCall = spv::GLSLstd450FAbs; + else + libCall = spv::GLSLstd450SAbs; + break; + case glslang::EOpSign: + if (isFloat) + libCall = spv::GLSLstd450FSign; + else + libCall = spv::GLSLstd450SSign; + break; + + case glslang::EOpAtomicCounterIncrement: + case glslang::EOpAtomicCounterDecrement: + case glslang::EOpAtomicCounter: + { + // Handle all of the atomics in one place, in createAtomicOperation() + std::vector operands; + operands.push_back(operand); + return createAtomicOperation(op, precision, typeId, operands, typeProxy); + } + + case glslang::EOpBitFieldReverse: + unaryOp = spv::OpBitReverse; + break; + case glslang::EOpBitCount: + unaryOp = spv::OpBitCount; + break; + case glslang::EOpFindLSB: + libCall = spv::GLSLstd450FindILsb; + break; + case glslang::EOpFindMSB: + if (isUnsigned) + libCall = spv::GLSLstd450FindUMsb; + else + libCall = spv::GLSLstd450FindSMsb; + break; + + case glslang::EOpBallot: + case glslang::EOpReadFirstInvocation: + case glslang::EOpAnyInvocation: + case glslang::EOpAllInvocations: + case glslang::EOpAllInvocationsEqual: +#ifdef AMD_EXTENSIONS + case glslang::EOpMinInvocations: + case glslang::EOpMaxInvocations: + case glslang::EOpAddInvocations: + case glslang::EOpMinInvocationsNonUniform: + case glslang::EOpMaxInvocationsNonUniform: + case glslang::EOpAddInvocationsNonUniform: + case glslang::EOpMinInvocationsInclusiveScan: + case glslang::EOpMaxInvocationsInclusiveScan: + case glslang::EOpAddInvocationsInclusiveScan: + case glslang::EOpMinInvocationsInclusiveScanNonUniform: + case glslang::EOpMaxInvocationsInclusiveScanNonUniform: + case glslang::EOpAddInvocationsInclusiveScanNonUniform: + case glslang::EOpMinInvocationsExclusiveScan: + case glslang::EOpMaxInvocationsExclusiveScan: + case glslang::EOpAddInvocationsExclusiveScan: + case glslang::EOpMinInvocationsExclusiveScanNonUniform: + case glslang::EOpMaxInvocationsExclusiveScanNonUniform: + case glslang::EOpAddInvocationsExclusiveScanNonUniform: +#endif + { + std::vector operands; + operands.push_back(operand); + return createInvocationsOperation(op, typeId, operands, typeProxy); + } + +#ifdef AMD_EXTENSIONS + case glslang::EOpMbcnt: + extBuiltins = getExtBuiltins(spv::E_SPV_AMD_shader_ballot); + libCall = spv::MbcntAMD; + break; + + case glslang::EOpCubeFaceIndex: + extBuiltins = getExtBuiltins(spv::E_SPV_AMD_gcn_shader); + libCall = spv::CubeFaceIndexAMD; + break; + + case glslang::EOpCubeFaceCoord: + extBuiltins = getExtBuiltins(spv::E_SPV_AMD_gcn_shader); + libCall = spv::CubeFaceCoordAMD; + break; +#endif + + default: + return 0; + } + + spv::Id id; + if (libCall >= 0) { + std::vector args; + args.push_back(operand); + id = builder.createBuiltinCall(typeId, extBuiltins >= 0 ? extBuiltins : stdBuiltins, libCall, args); + } else { + id = builder.createUnaryOp(unaryOp, typeId, operand); + } + + addDecoration(id, noContraction); + return builder.setPrecision(id, precision); +} + +// Create a unary operation on a matrix +spv::Id TGlslangToSpvTraverser::createUnaryMatrixOperation(spv::Op op, spv::Decoration precision, spv::Decoration noContraction, spv::Id typeId, spv::Id operand, glslang::TBasicType /* typeProxy */) +{ + // Handle unary operations vector by vector. + // The result type is the same type as the original type. + // The algorithm is to: + // - break the matrix into vectors + // - apply the operation to each vector + // - make a matrix out the vector results + + // get the types sorted out + int numCols = builder.getNumColumns(operand); + int numRows = builder.getNumRows(operand); + spv::Id srcVecType = builder.makeVectorType(builder.getScalarTypeId(builder.getTypeId(operand)), numRows); + spv::Id destVecType = builder.makeVectorType(builder.getScalarTypeId(typeId), numRows); + std::vector results; + + // do each vector op + for (int c = 0; c < numCols; ++c) { + std::vector indexes; + indexes.push_back(c); + spv::Id srcVec = builder.createCompositeExtract(operand, srcVecType, indexes); + spv::Id destVec = builder.createUnaryOp(op, destVecType, srcVec); + addDecoration(destVec, noContraction); + results.push_back(builder.setPrecision(destVec, precision)); + } + + // put the pieces together + return builder.setPrecision(builder.createCompositeConstruct(typeId, results), precision); +} + +spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, spv::Decoration precision, spv::Decoration noContraction, spv::Id destType, spv::Id operand, glslang::TBasicType typeProxy) +{ + spv::Op convOp = spv::OpNop; + spv::Id zero = 0; + spv::Id one = 0; + spv::Id type = 0; + + int vectorSize = builder.isVectorType(destType) ? builder.getNumTypeComponents(destType) : 0; + + switch (op) { + case glslang::EOpConvIntToBool: + case glslang::EOpConvUintToBool: + case glslang::EOpConvInt64ToBool: + case glslang::EOpConvUint64ToBool: + zero = (op == glslang::EOpConvInt64ToBool || + op == glslang::EOpConvUint64ToBool) ? builder.makeUint64Constant(0) : builder.makeUintConstant(0); + zero = makeSmearedConstant(zero, vectorSize); + return builder.createBinOp(spv::OpINotEqual, destType, operand, zero); + + case glslang::EOpConvFloatToBool: + zero = builder.makeFloatConstant(0.0F); + zero = makeSmearedConstant(zero, vectorSize); + return builder.createBinOp(spv::OpFOrdNotEqual, destType, operand, zero); + + case glslang::EOpConvDoubleToBool: + zero = builder.makeDoubleConstant(0.0); + zero = makeSmearedConstant(zero, vectorSize); + return builder.createBinOp(spv::OpFOrdNotEqual, destType, operand, zero); + +#ifdef AMD_EXTENSIONS + case glslang::EOpConvFloat16ToBool: + zero = builder.makeFloat16Constant(0.0F); + zero = makeSmearedConstant(zero, vectorSize); + return builder.createBinOp(spv::OpFOrdNotEqual, destType, operand, zero); +#endif + + case glslang::EOpConvBoolToFloat: + convOp = spv::OpSelect; + zero = builder.makeFloatConstant(0.0F); + one = builder.makeFloatConstant(1.0F); + break; + + case glslang::EOpConvBoolToDouble: + convOp = spv::OpSelect; + zero = builder.makeDoubleConstant(0.0); + one = builder.makeDoubleConstant(1.0); + break; + +#ifdef AMD_EXTENSIONS + case glslang::EOpConvBoolToFloat16: + convOp = spv::OpSelect; + zero = builder.makeFloat16Constant(0.0F); + one = builder.makeFloat16Constant(1.0F); + break; +#endif + + 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); + 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); + convOp = spv::OpSelect; + break; + + case glslang::EOpConvIntToFloat: + case glslang::EOpConvIntToDouble: + case glslang::EOpConvInt64ToFloat: + case glslang::EOpConvInt64ToDouble: +#ifdef AMD_EXTENSIONS + case glslang::EOpConvIntToFloat16: + case glslang::EOpConvInt64ToFloat16: +#endif + convOp = spv::OpConvertSToF; + break; + + case glslang::EOpConvUintToFloat: + case glslang::EOpConvUintToDouble: + case glslang::EOpConvUint64ToFloat: + case glslang::EOpConvUint64ToDouble: +#ifdef AMD_EXTENSIONS + case glslang::EOpConvUintToFloat16: + case glslang::EOpConvUint64ToFloat16: +#endif + convOp = spv::OpConvertUToF; + break; + + case glslang::EOpConvDoubleToFloat: + case glslang::EOpConvFloatToDouble: +#ifdef AMD_EXTENSIONS + case glslang::EOpConvDoubleToFloat16: + case glslang::EOpConvFloat16ToDouble: + case glslang::EOpConvFloatToFloat16: + case glslang::EOpConvFloat16ToFloat: +#endif + convOp = spv::OpFConvert; + if (builder.isMatrixType(destType)) + return createUnaryMatrixOperation(convOp, precision, noContraction, destType, operand, typeProxy); + break; + + case glslang::EOpConvFloatToInt: + case glslang::EOpConvDoubleToInt: + case glslang::EOpConvFloatToInt64: + case glslang::EOpConvDoubleToInt64: +#ifdef AMD_EXTENSIONS + case glslang::EOpConvFloat16ToInt: + case glslang::EOpConvFloat16ToInt64: +#endif + convOp = spv::OpConvertFToS; + break; + + case glslang::EOpConvUintToInt: + case glslang::EOpConvIntToUint: + case glslang::EOpConvUint64ToInt64: + case glslang::EOpConvInt64ToUint64: + if (builder.isInSpecConstCodeGenMode()) { + // Build zero scalar or vector for OpIAdd. + zero = (op == glslang::EOpConvUint64ToInt64 || + op == glslang::EOpConvInt64ToUint64) ? builder.makeUint64Constant(0) : builder.makeUintConstant(0); + zero = makeSmearedConstant(zero, vectorSize); + // Use OpIAdd, instead of OpBitcast to do the conversion when + // generating for OpSpecConstantOp instruction. + return builder.createBinOp(spv::OpIAdd, destType, operand, zero); + } + // For normal run-time conversion instruction, use OpBitcast. + convOp = spv::OpBitcast; + break; + + case glslang::EOpConvFloatToUint: + case glslang::EOpConvDoubleToUint: + case glslang::EOpConvFloatToUint64: + case glslang::EOpConvDoubleToUint64: +#ifdef AMD_EXTENSIONS + case glslang::EOpConvFloat16ToUint: + case glslang::EOpConvFloat16ToUint64: +#endif + convOp = spv::OpConvertFToU; + break; + + case glslang::EOpConvIntToInt64: + case glslang::EOpConvInt64ToInt: + convOp = spv::OpSConvert; + break; + + case glslang::EOpConvUintToUint64: + case glslang::EOpConvUint64ToUint: + convOp = spv::OpUConvert; + break; + + case glslang::EOpConvIntToUint64: + case glslang::EOpConvInt64ToUint: + case glslang::EOpConvUint64ToInt: + case glslang::EOpConvUintToInt64: + // OpSConvert/OpUConvert + OpBitCast + switch (op) { + case glslang::EOpConvIntToUint64: + convOp = spv::OpSConvert; + type = builder.makeIntType(64); + break; + case glslang::EOpConvInt64ToUint: + convOp = spv::OpSConvert; + type = builder.makeIntType(32); + break; + case glslang::EOpConvUint64ToInt: + convOp = spv::OpUConvert; + type = builder.makeUintType(32); + break; + case glslang::EOpConvUintToInt64: + convOp = spv::OpUConvert; + type = builder.makeUintType(64); + break; + default: + assert(0); + break; + } + + if (vectorSize > 0) + type = builder.makeVectorType(type, vectorSize); + + operand = builder.createUnaryOp(convOp, type, operand); + + if (builder.isInSpecConstCodeGenMode()) { + // Build zero scalar or vector for OpIAdd. + zero = (op == glslang::EOpConvIntToUint64 || + op == glslang::EOpConvUintToInt64) ? builder.makeUint64Constant(0) : builder.makeUintConstant(0); + zero = makeSmearedConstant(zero, vectorSize); + // Use OpIAdd, instead of OpBitcast to do the conversion when + // generating for OpSpecConstantOp instruction. + return builder.createBinOp(spv::OpIAdd, destType, operand, zero); + } + // For normal run-time conversion instruction, use OpBitcast. + convOp = spv::OpBitcast; + break; + default: + break; + } + + spv::Id result = 0; + if (convOp == spv::OpNop) + return result; + + if (convOp == spv::OpSelect) { + zero = makeSmearedConstant(zero, vectorSize); + one = makeSmearedConstant(one, vectorSize); + result = builder.createTriOp(convOp, destType, operand, one, zero); + } else + result = builder.createUnaryOp(convOp, destType, operand); + + return builder.setPrecision(result, precision); +} + +spv::Id TGlslangToSpvTraverser::makeSmearedConstant(spv::Id constant, int vectorSize) +{ + if (vectorSize == 0) + return constant; + + spv::Id vectorTypeId = builder.makeVectorType(builder.getTypeId(constant), vectorSize); + std::vector components; + for (int c = 0; c < vectorSize; ++c) + components.push_back(constant); + return builder.makeCompositeConstant(vectorTypeId, components); +} + +// For glslang ops that map to SPV atomic opCodes +spv::Id TGlslangToSpvTraverser::createAtomicOperation(glslang::TOperator op, spv::Decoration /*precision*/, spv::Id typeId, std::vector& operands, glslang::TBasicType typeProxy) +{ + spv::Op opCode = spv::OpNop; + + switch (op) { + case glslang::EOpAtomicAdd: + case glslang::EOpImageAtomicAdd: + opCode = spv::OpAtomicIAdd; + break; + case glslang::EOpAtomicMin: + case glslang::EOpImageAtomicMin: + opCode = typeProxy == glslang::EbtUint ? spv::OpAtomicUMin : spv::OpAtomicSMin; + break; + case glslang::EOpAtomicMax: + case glslang::EOpImageAtomicMax: + opCode = typeProxy == glslang::EbtUint ? spv::OpAtomicUMax : spv::OpAtomicSMax; + break; + case glslang::EOpAtomicAnd: + case glslang::EOpImageAtomicAnd: + opCode = spv::OpAtomicAnd; + break; + case glslang::EOpAtomicOr: + case glslang::EOpImageAtomicOr: + opCode = spv::OpAtomicOr; + break; + case glslang::EOpAtomicXor: + case glslang::EOpImageAtomicXor: + opCode = spv::OpAtomicXor; + break; + case glslang::EOpAtomicExchange: + case glslang::EOpImageAtomicExchange: + opCode = spv::OpAtomicExchange; + break; + case glslang::EOpAtomicCompSwap: + case glslang::EOpImageAtomicCompSwap: + opCode = spv::OpAtomicCompareExchange; + break; + case glslang::EOpAtomicCounterIncrement: + opCode = spv::OpAtomicIIncrement; + break; + case glslang::EOpAtomicCounterDecrement: + opCode = spv::OpAtomicIDecrement; + break; + case glslang::EOpAtomicCounter: + opCode = spv::OpAtomicLoad; + break; + default: + assert(0); + break; + } + + // 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 + std::vector spvAtomicOperands; // hold the spv operands + auto opIt = operands.begin(); // walk the glslang operands + spvAtomicOperands.push_back(*(opIt++)); + spvAtomicOperands.push_back(builder.makeUintConstant(spv::ScopeDevice)); // TBD: what is the correct scope? + spvAtomicOperands.push_back(builder.makeUintConstant(spv::MemorySemanticsMaskNone)); // TBD: what are the correct memory semantics? + if (opCode == spv::OpAtomicCompareExchange) { + // There are 2 memory semantics for compare-exchange. And the operand order of "comparator" and "new value" in GLSL + // differs from that in SPIR-V. Hence, special processing is required. + spvAtomicOperands.push_back(builder.makeUintConstant(spv::MemorySemanticsMaskNone)); + spvAtomicOperands.push_back(*(opIt + 1)); + spvAtomicOperands.push_back(*opIt); + opIt += 2; + } + + // Add the rest of the operands, skipping any that were dealt with above. + for (; opIt != operands.end(); ++opIt) + spvAtomicOperands.push_back(*opIt); + + return builder.createOp(opCode, typeId, spvAtomicOperands); +} + +// Create group invocation operations. +spv::Id TGlslangToSpvTraverser::createInvocationsOperation(glslang::TOperator op, spv::Id typeId, std::vector& operands, glslang::TBasicType typeProxy) +{ +#ifdef AMD_EXTENSIONS + bool isUnsigned = typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64; + bool isFloat = typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble || typeProxy == glslang::EbtFloat16; +#endif + + spv::Op opCode = spv::OpNop; + std::vector spvGroupOperands; + spv::GroupOperation groupOperation = spv::GroupOperationMax; + + if (op == glslang::EOpBallot || op == glslang::EOpReadFirstInvocation || + op == glslang::EOpReadInvocation) { + builder.addExtension(spv::E_SPV_KHR_shader_ballot); + builder.addCapability(spv::CapabilitySubgroupBallotKHR); + } else if (op == glslang::EOpAnyInvocation || + op == glslang::EOpAllInvocations || + op == glslang::EOpAllInvocationsEqual) { + builder.addExtension(spv::E_SPV_KHR_subgroup_vote); + builder.addCapability(spv::CapabilitySubgroupVoteKHR); + } else { + builder.addCapability(spv::CapabilityGroups); +#ifdef AMD_EXTENSIONS + if (op == glslang::EOpMinInvocationsNonUniform || + op == glslang::EOpMaxInvocationsNonUniform || + op == glslang::EOpAddInvocationsNonUniform || + op == glslang::EOpMinInvocationsInclusiveScanNonUniform || + op == glslang::EOpMaxInvocationsInclusiveScanNonUniform || + op == glslang::EOpAddInvocationsInclusiveScanNonUniform || + op == glslang::EOpMinInvocationsExclusiveScanNonUniform || + op == glslang::EOpMaxInvocationsExclusiveScanNonUniform || + op == glslang::EOpAddInvocationsExclusiveScanNonUniform) + builder.addExtension(spv::E_SPV_AMD_shader_ballot); +#endif + + spvGroupOperands.push_back(builder.makeUintConstant(spv::ScopeSubgroup)); +#ifdef AMD_EXTENSIONS + switch (op) { + case glslang::EOpMinInvocations: + case glslang::EOpMaxInvocations: + case glslang::EOpAddInvocations: + case glslang::EOpMinInvocationsNonUniform: + case glslang::EOpMaxInvocationsNonUniform: + case glslang::EOpAddInvocationsNonUniform: + groupOperation = spv::GroupOperationReduce; + spvGroupOperands.push_back(groupOperation); + break; + case glslang::EOpMinInvocationsInclusiveScan: + case glslang::EOpMaxInvocationsInclusiveScan: + case glslang::EOpAddInvocationsInclusiveScan: + case glslang::EOpMinInvocationsInclusiveScanNonUniform: + case glslang::EOpMaxInvocationsInclusiveScanNonUniform: + case glslang::EOpAddInvocationsInclusiveScanNonUniform: + groupOperation = spv::GroupOperationInclusiveScan; + spvGroupOperands.push_back(groupOperation); + break; + case glslang::EOpMinInvocationsExclusiveScan: + case glslang::EOpMaxInvocationsExclusiveScan: + case glslang::EOpAddInvocationsExclusiveScan: + case glslang::EOpMinInvocationsExclusiveScanNonUniform: + case glslang::EOpMaxInvocationsExclusiveScanNonUniform: + case glslang::EOpAddInvocationsExclusiveScanNonUniform: + groupOperation = spv::GroupOperationExclusiveScan; + spvGroupOperands.push_back(groupOperation); + break; + default: + break; + } +#endif + } + + for (auto opIt = operands.begin(); opIt != operands.end(); ++opIt) + spvGroupOperands.push_back(*opIt); + + switch (op) { + case glslang::EOpAnyInvocation: + opCode = spv::OpSubgroupAnyKHR; + break; + case glslang::EOpAllInvocations: + opCode = spv::OpSubgroupAllKHR; + break; + case glslang::EOpAllInvocationsEqual: + opCode = spv::OpSubgroupAllEqualKHR; + break; + case glslang::EOpReadInvocation: + opCode = spv::OpSubgroupReadInvocationKHR; + if (builder.isVectorType(typeId)) + return CreateInvocationsVectorOperation(opCode, groupOperation, typeId, operands); + break; + case glslang::EOpReadFirstInvocation: + opCode = spv::OpSubgroupFirstInvocationKHR; + break; + case glslang::EOpBallot: + { + // NOTE: According to the spec, the result type of "OpSubgroupBallotKHR" must be a 4 component vector of 32 + // bit integer types. The GLSL built-in function "ballotARB()" assumes the maximum number of invocations in + // a subgroup is 64. Thus, we have to convert uvec4.xy to uint64_t as follow: + // + // result = Bitcast(SubgroupBallotKHR(Predicate).xy) + // + spv::Id uintType = builder.makeUintType(32); + spv::Id uvec4Type = builder.makeVectorType(uintType, 4); + spv::Id result = builder.createOp(spv::OpSubgroupBallotKHR, uvec4Type, spvGroupOperands); + + std::vector components; + components.push_back(builder.createCompositeExtract(result, uintType, 0)); + components.push_back(builder.createCompositeExtract(result, uintType, 1)); + + spv::Id uvec2Type = builder.makeVectorType(uintType, 2); + return builder.createUnaryOp(spv::OpBitcast, typeId, + builder.createCompositeConstruct(uvec2Type, components)); + } + +#ifdef AMD_EXTENSIONS + case glslang::EOpMinInvocations: + case glslang::EOpMaxInvocations: + case glslang::EOpAddInvocations: + case glslang::EOpMinInvocationsInclusiveScan: + case glslang::EOpMaxInvocationsInclusiveScan: + case glslang::EOpAddInvocationsInclusiveScan: + case glslang::EOpMinInvocationsExclusiveScan: + case glslang::EOpMaxInvocationsExclusiveScan: + case glslang::EOpAddInvocationsExclusiveScan: + if (op == glslang::EOpMinInvocations || + op == glslang::EOpMinInvocationsInclusiveScan || + op == glslang::EOpMinInvocationsExclusiveScan) { + if (isFloat) + opCode = spv::OpGroupFMin; + else { + if (isUnsigned) + opCode = spv::OpGroupUMin; + else + opCode = spv::OpGroupSMin; + } + } else if (op == glslang::EOpMaxInvocations || + op == glslang::EOpMaxInvocationsInclusiveScan || + op == glslang::EOpMaxInvocationsExclusiveScan) { + if (isFloat) + opCode = spv::OpGroupFMax; + else { + if (isUnsigned) + opCode = spv::OpGroupUMax; + else + opCode = spv::OpGroupSMax; + } + } else { + if (isFloat) + opCode = spv::OpGroupFAdd; + else + opCode = spv::OpGroupIAdd; + } + + if (builder.isVectorType(typeId)) + return CreateInvocationsVectorOperation(opCode, groupOperation, typeId, operands); + + break; + case glslang::EOpMinInvocationsNonUniform: + case glslang::EOpMaxInvocationsNonUniform: + case glslang::EOpAddInvocationsNonUniform: + case glslang::EOpMinInvocationsInclusiveScanNonUniform: + case glslang::EOpMaxInvocationsInclusiveScanNonUniform: + case glslang::EOpAddInvocationsInclusiveScanNonUniform: + case glslang::EOpMinInvocationsExclusiveScanNonUniform: + case glslang::EOpMaxInvocationsExclusiveScanNonUniform: + case glslang::EOpAddInvocationsExclusiveScanNonUniform: + if (op == glslang::EOpMinInvocationsNonUniform || + op == glslang::EOpMinInvocationsInclusiveScanNonUniform || + op == glslang::EOpMinInvocationsExclusiveScanNonUniform) { + if (isFloat) + opCode = spv::OpGroupFMinNonUniformAMD; + else { + if (isUnsigned) + opCode = spv::OpGroupUMinNonUniformAMD; + else + opCode = spv::OpGroupSMinNonUniformAMD; + } + } + else if (op == glslang::EOpMaxInvocationsNonUniform || + op == glslang::EOpMaxInvocationsInclusiveScanNonUniform || + op == glslang::EOpMaxInvocationsExclusiveScanNonUniform) { + if (isFloat) + opCode = spv::OpGroupFMaxNonUniformAMD; + else { + if (isUnsigned) + opCode = spv::OpGroupUMaxNonUniformAMD; + else + opCode = spv::OpGroupSMaxNonUniformAMD; + } + } + else { + if (isFloat) + opCode = spv::OpGroupFAddNonUniformAMD; + else + opCode = spv::OpGroupIAddNonUniformAMD; + } + + if (builder.isVectorType(typeId)) + return CreateInvocationsVectorOperation(opCode, groupOperation, typeId, operands); + + break; +#endif + default: + logger->missingFunctionality("invocation operation"); + return spv::NoResult; + } + + assert(opCode != spv::OpNop); + return builder.createOp(opCode, typeId, spvGroupOperands); +} + +// Create group invocation operations on a vector +spv::Id TGlslangToSpvTraverser::CreateInvocationsVectorOperation(spv::Op op, spv::GroupOperation groupOperation, spv::Id typeId, std::vector& operands) +{ +#ifdef AMD_EXTENSIONS + assert(op == spv::OpGroupFMin || op == spv::OpGroupUMin || op == spv::OpGroupSMin || + op == spv::OpGroupFMax || op == spv::OpGroupUMax || op == spv::OpGroupSMax || + op == spv::OpGroupFAdd || op == spv::OpGroupIAdd || op == spv::OpGroupBroadcast || + op == spv::OpSubgroupReadInvocationKHR || + op == spv::OpGroupFMinNonUniformAMD || op == spv::OpGroupUMinNonUniformAMD || op == spv::OpGroupSMinNonUniformAMD || + op == spv::OpGroupFMaxNonUniformAMD || op == spv::OpGroupUMaxNonUniformAMD || op == spv::OpGroupSMaxNonUniformAMD || + op == spv::OpGroupFAddNonUniformAMD || op == spv::OpGroupIAddNonUniformAMD); +#else + assert(op == spv::OpGroupFMin || op == spv::OpGroupUMin || op == spv::OpGroupSMin || + op == spv::OpGroupFMax || op == spv::OpGroupUMax || op == spv::OpGroupSMax || + op == spv::OpGroupFAdd || op == spv::OpGroupIAdd || op == spv::OpGroupBroadcast || + op == spv::OpSubgroupReadInvocationKHR); +#endif + + // Handle group invocation operations scalar by scalar. + // The result type is the same type as the original type. + // The algorithm is to: + // - break the vector into scalars + // - apply the operation to each scalar + // - make a vector out the scalar results + + // get the types sorted out + int numComponents = builder.getNumComponents(operands[0]); + spv::Id scalarType = builder.getScalarTypeId(builder.getTypeId(operands[0])); + std::vector results; + + // do each scalar op + for (int comp = 0; comp < numComponents; ++comp) { + std::vector indexes; + indexes.push_back(comp); + spv::Id scalar = builder.createCompositeExtract(operands[0], scalarType, indexes); + std::vector spvGroupOperands; + if (op == spv::OpSubgroupReadInvocationKHR) { + spvGroupOperands.push_back(scalar); + spvGroupOperands.push_back(operands[1]); + } else if (op == spv::OpGroupBroadcast) { + spvGroupOperands.push_back(builder.makeUintConstant(spv::ScopeSubgroup)); + spvGroupOperands.push_back(scalar); + spvGroupOperands.push_back(operands[1]); + } else { + spvGroupOperands.push_back(builder.makeUintConstant(spv::ScopeSubgroup)); + spvGroupOperands.push_back(groupOperation); + spvGroupOperands.push_back(scalar); + } + + results.push_back(builder.createOp(op, scalarType, spvGroupOperands)); + } + + // put the pieces together + return builder.createCompositeConstruct(typeId, results); +} + +spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId, std::vector& operands, glslang::TBasicType typeProxy) +{ + bool isUnsigned = typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64; +#ifdef AMD_EXTENSIONS + bool isFloat = typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble || typeProxy == glslang::EbtFloat16; +#else + bool isFloat = typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble; +#endif + + spv::Op opCode = spv::OpNop; + int extBuiltins = -1; + int libCall = -1; + size_t consumedOperands = operands.size(); + spv::Id typeId0 = 0; + if (consumedOperands > 0) + typeId0 = builder.getTypeId(operands[0]); + spv::Id frexpIntType = 0; + + switch (op) { + case glslang::EOpMin: + if (isFloat) + libCall = spv::GLSLstd450FMin; + else if (isUnsigned) + libCall = spv::GLSLstd450UMin; + else + libCall = spv::GLSLstd450SMin; + builder.promoteScalar(precision, operands.front(), operands.back()); + break; + case glslang::EOpModf: + libCall = spv::GLSLstd450Modf; + break; + case glslang::EOpMax: + if (isFloat) + libCall = spv::GLSLstd450FMax; + else if (isUnsigned) + libCall = spv::GLSLstd450UMax; + else + libCall = spv::GLSLstd450SMax; + builder.promoteScalar(precision, operands.front(), operands.back()); + break; + case glslang::EOpPow: + libCall = spv::GLSLstd450Pow; + break; + case glslang::EOpDot: + opCode = spv::OpDot; + break; + case glslang::EOpAtan: + libCall = spv::GLSLstd450Atan2; + break; + + case glslang::EOpClamp: + if (isFloat) + libCall = spv::GLSLstd450FClamp; + else if (isUnsigned) + libCall = spv::GLSLstd450UClamp; + else + libCall = spv::GLSLstd450SClamp; + builder.promoteScalar(precision, operands.front(), operands[1]); + builder.promoteScalar(precision, operands.front(), operands[2]); + break; + case glslang::EOpMix: + if (! builder.isBoolType(builder.getScalarTypeId(builder.getTypeId(operands.back())))) { + assert(isFloat); + libCall = spv::GLSLstd450FMix; + } else { + opCode = spv::OpSelect; + std::swap(operands.front(), operands.back()); + } + builder.promoteScalar(precision, operands.front(), operands.back()); + break; + case glslang::EOpStep: + libCall = spv::GLSLstd450Step; + builder.promoteScalar(precision, operands.front(), operands.back()); + break; + case glslang::EOpSmoothStep: + libCall = spv::GLSLstd450SmoothStep; + builder.promoteScalar(precision, operands[0], operands[2]); + builder.promoteScalar(precision, operands[1], operands[2]); + break; + + case glslang::EOpDistance: + libCall = spv::GLSLstd450Distance; + break; + case glslang::EOpCross: + libCall = spv::GLSLstd450Cross; + break; + case glslang::EOpFaceForward: + libCall = spv::GLSLstd450FaceForward; + break; + case glslang::EOpReflect: + libCall = spv::GLSLstd450Reflect; + break; + case glslang::EOpRefract: + libCall = spv::GLSLstd450Refract; + break; + case glslang::EOpInterpolateAtSample: + builder.addCapability(spv::CapabilityInterpolationFunction); + libCall = spv::GLSLstd450InterpolateAtSample; + break; + case glslang::EOpInterpolateAtOffset: + builder.addCapability(spv::CapabilityInterpolationFunction); + libCall = spv::GLSLstd450InterpolateAtOffset; + break; + case glslang::EOpAddCarry: + opCode = spv::OpIAddCarry; + typeId = builder.makeStructResultType(typeId0, typeId0); + consumedOperands = 2; + break; + case glslang::EOpSubBorrow: + opCode = spv::OpISubBorrow; + typeId = builder.makeStructResultType(typeId0, typeId0); + consumedOperands = 2; + break; + case glslang::EOpUMulExtended: + opCode = spv::OpUMulExtended; + typeId = builder.makeStructResultType(typeId0, typeId0); + consumedOperands = 2; + break; + case glslang::EOpIMulExtended: + opCode = spv::OpSMulExtended; + typeId = builder.makeStructResultType(typeId0, typeId0); + consumedOperands = 2; + break; + case glslang::EOpBitfieldExtract: + if (isUnsigned) + opCode = spv::OpBitFieldUExtract; + else + opCode = spv::OpBitFieldSExtract; + break; + case glslang::EOpBitfieldInsert: + opCode = spv::OpBitFieldInsert; + break; + + case glslang::EOpFma: + 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; + break; + case glslang::EOpLdexp: + libCall = spv::GLSLstd450Ldexp; + break; + + case glslang::EOpReadInvocation: + return createInvocationsOperation(op, typeId, operands, typeProxy); + +#ifdef AMD_EXTENSIONS + case glslang::EOpSwizzleInvocations: + extBuiltins = getExtBuiltins(spv::E_SPV_AMD_shader_ballot); + libCall = spv::SwizzleInvocationsAMD; + break; + case glslang::EOpSwizzleInvocationsMasked: + extBuiltins = getExtBuiltins(spv::E_SPV_AMD_shader_ballot); + libCall = spv::SwizzleInvocationsMaskedAMD; + break; + case glslang::EOpWriteInvocation: + extBuiltins = getExtBuiltins(spv::E_SPV_AMD_shader_ballot); + libCall = spv::WriteInvocationAMD; + break; + + case glslang::EOpMin3: + extBuiltins = getExtBuiltins(spv::E_SPV_AMD_shader_trinary_minmax); + if (isFloat) + libCall = spv::FMin3AMD; + else { + if (isUnsigned) + libCall = spv::UMin3AMD; + else + libCall = spv::SMin3AMD; + } + break; + case glslang::EOpMax3: + extBuiltins = getExtBuiltins(spv::E_SPV_AMD_shader_trinary_minmax); + if (isFloat) + libCall = spv::FMax3AMD; + else { + if (isUnsigned) + libCall = spv::UMax3AMD; + else + libCall = spv::SMax3AMD; + } + break; + case glslang::EOpMid3: + extBuiltins = getExtBuiltins(spv::E_SPV_AMD_shader_trinary_minmax); + if (isFloat) + libCall = spv::FMid3AMD; + else { + if (isUnsigned) + libCall = spv::UMid3AMD; + else + libCall = spv::SMid3AMD; + } + break; + + case glslang::EOpInterpolateAtVertex: + extBuiltins = getExtBuiltins(spv::E_SPV_AMD_shader_explicit_vertex_parameter); + libCall = spv::InterpolateAtVertexAMD; + break; +#endif + + default: + return 0; + } + + spv::Id id = 0; + if (libCall >= 0) { + // Use an extended instruction from the standard library. + // Construct the call arguments, without modifying the original operands vector. + // We might need the remaining arguments, e.g. in the EOpFrexp case. + std::vector callArguments(operands.begin(), operands.begin() + consumedOperands); + id = builder.createBuiltinCall(typeId, extBuiltins >= 0 ? extBuiltins : stdBuiltins, libCall, callArguments); + } else { + switch (consumedOperands) { + case 0: + // should all be handled by visitAggregate and createNoArgOperation + assert(0); + return 0; + case 1: + // should all be handled by createUnaryOperation + assert(0); + return 0; + case 2: + id = builder.createBinOp(opCode, typeId, operands[0], operands[1]); + break; + default: + // anything 3 or over doesn't have l-value operands, so all should be consumed + assert(consumedOperands == operands.size()); + id = builder.createOp(opCode, typeId, operands); + break; + } + } + + // Decode the return types that were structures + switch (op) { + case glslang::EOpAddCarry: + case glslang::EOpSubBorrow: + builder.createStore(builder.createCompositeExtract(id, typeId0, 1), operands[2]); + id = builder.createCompositeExtract(id, typeId0, 0); + break; + case glslang::EOpUMulExtended: + case glslang::EOpIMulExtended: + builder.createStore(builder.createCompositeExtract(id, typeId0, 0), operands[3]); + 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); + break; + default: + break; + } + + return builder.setPrecision(id, precision); +} + +// Intrinsics with no arguments (or no return value, and no precision). +spv::Id TGlslangToSpvTraverser::createNoArgOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId) +{ + // TODO: get the barrier operands correct + + switch (op) { + case glslang::EOpEmitVertex: + builder.createNoResultOp(spv::OpEmitVertex); + return 0; + case glslang::EOpEndPrimitive: + builder.createNoResultOp(spv::OpEndPrimitive); + return 0; + case glslang::EOpBarrier: + builder.createControlBarrier(spv::ScopeWorkgroup, spv::ScopeDevice, spv::MemorySemanticsMaskNone); + return 0; + case glslang::EOpMemoryBarrier: + builder.createMemoryBarrier(spv::ScopeDevice, spv::MemorySemanticsAllMemory); + return 0; + case glslang::EOpMemoryBarrierAtomicCounter: + builder.createMemoryBarrier(spv::ScopeDevice, spv::MemorySemanticsAtomicCounterMemoryMask); + return 0; + case glslang::EOpMemoryBarrierBuffer: + builder.createMemoryBarrier(spv::ScopeDevice, spv::MemorySemanticsUniformMemoryMask); + return 0; + case glslang::EOpMemoryBarrierImage: + builder.createMemoryBarrier(spv::ScopeDevice, spv::MemorySemanticsImageMemoryMask); + return 0; + case glslang::EOpMemoryBarrierShared: + builder.createMemoryBarrier(spv::ScopeDevice, spv::MemorySemanticsWorkgroupMemoryMask); + return 0; + case glslang::EOpGroupMemoryBarrier: + builder.createMemoryBarrier(spv::ScopeDevice, spv::MemorySemanticsCrossWorkgroupMemoryMask); + return 0; + case glslang::EOpAllMemoryBarrierWithGroupSync: + // Control barrier with non-"None" semantic is also a memory barrier. + builder.createControlBarrier(spv::ScopeDevice, spv::ScopeDevice, spv::MemorySemanticsAllMemory); + return 0; + case glslang::EOpGroupMemoryBarrierWithGroupSync: + // Control barrier with non-"None" semantic is also a memory barrier. + builder.createControlBarrier(spv::ScopeDevice, spv::ScopeDevice, spv::MemorySemanticsCrossWorkgroupMemoryMask); + return 0; + case glslang::EOpWorkgroupMemoryBarrier: + builder.createMemoryBarrier(spv::ScopeWorkgroup, spv::MemorySemanticsWorkgroupMemoryMask); + return 0; + case glslang::EOpWorkgroupMemoryBarrierWithGroupSync: + // Control barrier with non-"None" semantic is also a memory barrier. + builder.createControlBarrier(spv::ScopeWorkgroup, spv::ScopeWorkgroup, spv::MemorySemanticsWorkgroupMemoryMask); + return 0; +#ifdef AMD_EXTENSIONS + case glslang::EOpTime: + { + std::vector args; // Dummy arguments + spv::Id id = builder.createBuiltinCall(typeId, getExtBuiltins(spv::E_SPV_AMD_gcn_shader), spv::TimeAMD, args); + return builder.setPrecision(id, precision); + } +#endif + default: + logger->missingFunctionality("unknown operation with no arguments"); + return 0; + } +} + +spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol) +{ + auto iter = symbolValues.find(symbol->getId()); + spv::Id id; + if (symbolValues.end() != iter) { + id = iter->second; + return id; + } + + // it was not found, create it + id = createSpvVariable(symbol); + symbolValues[symbol->getId()] = id; + + if (symbol->getBasicType() != glslang::EbtBlock) { + addDecoration(id, TranslatePrecisionDecoration(symbol->getType())); + addDecoration(id, TranslateInterpolationDecoration(symbol->getType().getQualifier())); + addDecoration(id, TranslateAuxiliaryStorageDecoration(symbol->getType().getQualifier())); + if (symbol->getType().getQualifier().hasSpecConstantId()) + addDecoration(id, spv::DecorationSpecId, symbol->getType().getQualifier().layoutSpecConstantId); + if (symbol->getQualifier().hasIndex()) + builder.addDecoration(id, spv::DecorationIndex, symbol->getQualifier().layoutIndex); + if (symbol->getQualifier().hasComponent()) + builder.addDecoration(id, spv::DecorationComponent, symbol->getQualifier().layoutComponent); + if (glslangIntermediate->getXfbMode()) { + builder.addCapability(spv::CapabilityTransformFeedback); + if (symbol->getQualifier().hasXfbStride()) + builder.addDecoration(id, spv::DecorationXfbStride, symbol->getQualifier().layoutXfbStride); + if (symbol->getQualifier().hasXfbBuffer()) + builder.addDecoration(id, spv::DecorationXfbBuffer, symbol->getQualifier().layoutXfbBuffer); + if (symbol->getQualifier().hasXfbOffset()) + builder.addDecoration(id, spv::DecorationOffset, symbol->getQualifier().layoutXfbOffset); + } + // atomic counters use this: + if (symbol->getQualifier().hasOffset()) + builder.addDecoration(id, spv::DecorationOffset, symbol->getQualifier().layoutOffset); + } + + if (symbol->getQualifier().hasLocation()) + builder.addDecoration(id, spv::DecorationLocation, symbol->getQualifier().layoutLocation); + addDecoration(id, TranslateInvariantDecoration(symbol->getType().getQualifier())); + if (symbol->getQualifier().hasStream() && glslangIntermediate->isMultiStream()) { + builder.addCapability(spv::CapabilityGeometryStreams); + builder.addDecoration(id, spv::DecorationStream, symbol->getQualifier().layoutStream); + } + if (symbol->getQualifier().hasSet()) + builder.addDecoration(id, spv::DecorationDescriptorSet, symbol->getQualifier().layoutSet); + else if (IsDescriptorResource(symbol->getType())) { + // default to 0 + builder.addDecoration(id, spv::DecorationDescriptorSet, 0); + } + if (symbol->getQualifier().hasBinding()) + builder.addDecoration(id, spv::DecorationBinding, symbol->getQualifier().layoutBinding); + if (symbol->getQualifier().hasAttachment()) + builder.addDecoration(id, spv::DecorationInputAttachmentIndex, symbol->getQualifier().layoutAttachment); + if (glslangIntermediate->getXfbMode()) { + builder.addCapability(spv::CapabilityTransformFeedback); + if (symbol->getQualifier().hasXfbStride()) + builder.addDecoration(id, spv::DecorationXfbStride, symbol->getQualifier().layoutXfbStride); + if (symbol->getQualifier().hasXfbBuffer()) + builder.addDecoration(id, spv::DecorationXfbBuffer, symbol->getQualifier().layoutXfbBuffer); + } + + if (symbol->getType().isImage()) { + std::vector memory; + TranslateMemoryDecoration(symbol->getType().getQualifier(), memory); + for (unsigned int i = 0; i < memory.size(); ++i) + addDecoration(id, memory[i]); + } + + // built-in variable decorations + spv::BuiltIn builtIn = TranslateBuiltInDecoration(symbol->getQualifier().builtIn, false); + if (builtIn != spv::BuiltInMax) + addDecoration(id, spv::DecorationBuiltIn, (int)builtIn); + +#ifdef NV_EXTENSIONS + if (builtIn == spv::BuiltInSampleMask) { + spv::Decoration decoration; + // GL_NV_sample_mask_override_coverage extension + if (glslangIntermediate->getLayoutOverrideCoverage()) + decoration = (spv::Decoration)spv::DecorationOverrideCoverageNV; + else + decoration = (spv::Decoration)spv::DecorationMax; + addDecoration(id, decoration); + if (decoration != spv::DecorationMax) { + builder.addExtension(spv::E_SPV_NV_sample_mask_override_coverage); + } + } + else if (builtIn == spv::BuiltInLayer) { + // SPV_NV_viewport_array2 extension + 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) + { + addDecoration(id, (spv::Decoration)spv::DecorationSecondaryViewportRelativeNV, symbol->getQualifier().layoutSecondaryViewportRelativeOffset); + builder.addCapability(spv::CapabilityShaderStereoViewNV); + builder.addExtension(spv::E_SPV_NV_stereo_view_rendering); + } + } + + if (symbol->getQualifier().layoutPassthrough) { + addDecoration(id, spv::DecorationPassthroughNV); + builder.addCapability(spv::CapabilityGeometryShaderPassthroughNV); + builder.addExtension(spv::E_SPV_NV_geometry_shader_passthrough); + } +#endif + + return id; +} + +// If 'dec' is valid, add no-operand decoration to an object +void TGlslangToSpvTraverser::addDecoration(spv::Id id, spv::Decoration dec) +{ + if (dec != spv::DecorationMax) + builder.addDecoration(id, dec); +} + +// If 'dec' is valid, add a one-operand decoration to an object +void TGlslangToSpvTraverser::addDecoration(spv::Id id, spv::Decoration dec, unsigned value) +{ + if (dec != spv::DecorationMax) + builder.addDecoration(id, dec, value); +} + +// If 'dec' is valid, add a no-operand decoration to a struct member +void TGlslangToSpvTraverser::addMemberDecoration(spv::Id id, int member, spv::Decoration dec) +{ + if (dec != spv::DecorationMax) + builder.addMemberDecoration(id, (unsigned)member, dec); +} + +// If 'dec' is valid, add a one-operand decoration to a struct member +void TGlslangToSpvTraverser::addMemberDecoration(spv::Id id, int member, spv::Decoration dec, unsigned value) +{ + if (dec != spv::DecorationMax) + builder.addMemberDecoration(id, (unsigned)member, dec, value); +} + +// Make a full tree of instructions to build a SPIR-V specialization constant, +// or regular constant if possible. +// +// TBD: this is not yet done, nor verified to be the best design, it does do the leaf symbols though +// +// Recursively walk the nodes. The nodes form a tree whose leaves are +// regular constants, which themselves are trees that createSpvConstant() +// recursively walks. So, this function walks the "top" of the tree: +// - emit specialization constant-building instructions for specConstant +// - when running into a non-spec-constant, switch to createSpvConstant() +spv::Id TGlslangToSpvTraverser::createSpvConstant(const glslang::TIntermTyped& node) +{ + assert(node.getQualifier().isConstant()); + + // Handle front-end constants first (non-specialization constants). + if (! node.getQualifier().specConstant) { + // hand off to the non-spec-constant path + assert(node.getAsConstantUnion() != nullptr || node.getAsSymbolNode() != nullptr); + int nextConst = 0; + return createSpvConstantFromConstUnionArray(node.getType(), node.getAsConstantUnion() ? node.getAsConstantUnion()->getConstArray() : node.getAsSymbolNode()->getConstArray(), + nextConst, false); + } + + // We now know we have a specialization constant to build + + // gl_WorkGroupSize is a special case until the front-end handles hierarchical specialization constants, + // even then, it's specialization ids are handled by special case syntax in GLSL: layout(local_size_x = ... + if (node.getType().getQualifier().builtIn == glslang::EbvWorkGroupSize) { + std::vector dimConstId; + for (int dim = 0; dim < 3; ++dim) { + bool specConst = (glslangIntermediate->getLocalSizeSpecId(dim) != glslang::TQualifier::layoutNotSet); + dimConstId.push_back(builder.makeUintConstant(glslangIntermediate->getLocalSize(dim), specConst)); + if (specConst) + addDecoration(dimConstId.back(), spv::DecorationSpecId, glslangIntermediate->getLocalSizeSpecId(dim)); + } + return builder.makeCompositeConstant(builder.makeVectorType(builder.makeUintType(32), 3), dimConstId, true); + } + + // An AST node labelled as specialization constant should be a symbol node. + // Its initializer should either be a sub tree with constant nodes, or a constant union array. + if (auto* sn = node.getAsSymbolNode()) { + if (auto* sub_tree = sn->getConstSubtree()) { + // Traverse the constant constructor sub tree like generating normal run-time instructions. + // During the AST traversal, if the node is marked as 'specConstant', SpecConstantOpModeGuard + // will set the builder into spec constant op instruction generating mode. + sub_tree->traverse(this); + return accessChainLoad(sub_tree->getType()); + } else if (auto* const_union_array = &sn->getConstArray()){ + int nextConst = 0; + spv::Id id = createSpvConstantFromConstUnionArray(sn->getType(), *const_union_array, nextConst, true); + builder.addName(id, sn->getName().c_str()); + return id; + } + } + + // Neither a front-end constant node, nor a specialization constant node with constant union array or + // constant sub tree as initializer. + logger->missingFunctionality("Neither a front-end constant nor a spec constant."); + exit(1); + return spv::NoResult; +} + +// Use 'consts' as the flattened glslang source of scalar constants to recursively +// build the aggregate SPIR-V constant. +// +// If there are not enough elements present in 'consts', 0 will be substituted; +// an empty 'consts' can be used to create a fully zeroed SPIR-V constant. +// +spv::Id TGlslangToSpvTraverser::createSpvConstantFromConstUnionArray(const glslang::TType& glslangType, const glslang::TConstUnionArray& consts, int& nextConst, bool specConstant) +{ + // vector of constants for SPIR-V + std::vector spvConsts; + + // Type is used for struct and array constants + spv::Id typeId = convertGlslangToSpvType(glslangType); + + if (glslangType.isArray()) { + glslang::TType elementType(glslangType, 0); + for (int i = 0; i < glslangType.getOuterArraySize(); ++i) + spvConsts.push_back(createSpvConstantFromConstUnionArray(elementType, consts, nextConst, false)); + } else if (glslangType.isMatrix()) { + glslang::TType vectorType(glslangType, 0); + for (int col = 0; col < glslangType.getMatrixCols(); ++col) + spvConsts.push_back(createSpvConstantFromConstUnionArray(vectorType, consts, nextConst, false)); + } else if (glslangType.getStruct()) { + glslang::TVector::const_iterator iter; + for (iter = glslangType.getStruct()->begin(); iter != glslangType.getStruct()->end(); ++iter) + spvConsts.push_back(createSpvConstantFromConstUnionArray(*iter->type, consts, nextConst, false)); + } else if (glslangType.getVectorSize() > 1) { + for (unsigned int i = 0; i < (unsigned int)glslangType.getVectorSize(); ++i) { + bool zero = nextConst >= consts.size(); + switch (glslangType.getBasicType()) { + case glslang::EbtInt: + spvConsts.push_back(builder.makeIntConstant(zero ? 0 : consts[nextConst].getIConst())); + break; + case glslang::EbtUint: + spvConsts.push_back(builder.makeUintConstant(zero ? 0 : consts[nextConst].getUConst())); + break; + case glslang::EbtInt64: + spvConsts.push_back(builder.makeInt64Constant(zero ? 0 : consts[nextConst].getI64Const())); + break; + case glslang::EbtUint64: + spvConsts.push_back(builder.makeUint64Constant(zero ? 0 : consts[nextConst].getU64Const())); + break; + case glslang::EbtFloat: + spvConsts.push_back(builder.makeFloatConstant(zero ? 0.0F : (float)consts[nextConst].getDConst())); + break; + case glslang::EbtDouble: + spvConsts.push_back(builder.makeDoubleConstant(zero ? 0.0 : consts[nextConst].getDConst())); + break; +#ifdef AMD_EXTENSIONS + case glslang::EbtFloat16: + spvConsts.push_back(builder.makeFloat16Constant(zero ? 0.0F : (float)consts[nextConst].getDConst())); + break; +#endif + case glslang::EbtBool: + spvConsts.push_back(builder.makeBoolConstant(zero ? false : consts[nextConst].getBConst())); + break; + default: + assert(0); + break; + } + ++nextConst; + } + } else { + // we have a non-aggregate (scalar) constant + bool zero = nextConst >= consts.size(); + spv::Id scalar = 0; + switch (glslangType.getBasicType()) { + case glslang::EbtInt: + scalar = builder.makeIntConstant(zero ? 0 : consts[nextConst].getIConst(), specConstant); + break; + case glslang::EbtUint: + scalar = builder.makeUintConstant(zero ? 0 : consts[nextConst].getUConst(), specConstant); + break; + case glslang::EbtInt64: + scalar = builder.makeInt64Constant(zero ? 0 : consts[nextConst].getI64Const(), specConstant); + break; + case glslang::EbtUint64: + scalar = builder.makeUint64Constant(zero ? 0 : consts[nextConst].getU64Const(), specConstant); + break; + case glslang::EbtFloat: + scalar = builder.makeFloatConstant(zero ? 0.0F : (float)consts[nextConst].getDConst(), specConstant); + break; + case glslang::EbtDouble: + scalar = builder.makeDoubleConstant(zero ? 0.0 : consts[nextConst].getDConst(), specConstant); + break; +#ifdef AMD_EXTENSIONS + case glslang::EbtFloat16: + scalar = builder.makeFloat16Constant(zero ? 0.0F : (float)consts[nextConst].getDConst(), specConstant); + break; +#endif + case glslang::EbtBool: + scalar = builder.makeBoolConstant(zero ? false : consts[nextConst].getBConst(), specConstant); + break; + default: + assert(0); + break; + } + ++nextConst; + return scalar; + } + + return builder.makeCompositeConstant(typeId, spvConsts); +} + +// Return true if the node is a constant or symbol whose reading has no +// non-trivial observable cost or effect. +bool TGlslangToSpvTraverser::isTrivialLeaf(const glslang::TIntermTyped* node) +{ + // don't know what this is + if (node == nullptr) + return false; + + // a constant is safe + if (node->getAsConstantUnion() != nullptr) + return true; + + // not a symbol means non-trivial + if (node->getAsSymbolNode() == nullptr) + return false; + + // a symbol, depends on what's being read + switch (node->getType().getQualifier().storage) { + case glslang::EvqTemporary: + case glslang::EvqGlobal: + case glslang::EvqIn: + case glslang::EvqInOut: + case glslang::EvqConst: + case glslang::EvqConstReadOnly: + case glslang::EvqUniform: + return true; + default: + return false; + } +} + +// A node is trivial if it is a single operation with no side effects. +// Error on the side of saying non-trivial. +// Return true if trivial. +bool TGlslangToSpvTraverser::isTrivial(const glslang::TIntermTyped* node) +{ + if (node == nullptr) + return false; + + // symbols and constants are trivial + if (isTrivialLeaf(node)) + return true; + + // otherwise, it needs to be a simple operation or one or two leaf nodes + + // not a simple operation + const glslang::TIntermBinary* binaryNode = node->getAsBinaryNode(); + const glslang::TIntermUnary* unaryNode = node->getAsUnaryNode(); + if (binaryNode == nullptr && unaryNode == nullptr) + return false; + + // not on leaf nodes + if (binaryNode && (! isTrivialLeaf(binaryNode->getLeft()) || ! isTrivialLeaf(binaryNode->getRight()))) + return false; + + if (unaryNode && ! isTrivialLeaf(unaryNode->getOperand())) { + return false; + } + + switch (node->getAsOperator()->getOp()) { + case glslang::EOpLogicalNot: + case glslang::EOpConvIntToBool: + case glslang::EOpConvUintToBool: + case glslang::EOpConvFloatToBool: + case glslang::EOpConvDoubleToBool: + case glslang::EOpEqual: + case glslang::EOpNotEqual: + case glslang::EOpLessThan: + case glslang::EOpGreaterThan: + case glslang::EOpLessThanEqual: + case glslang::EOpGreaterThanEqual: + case glslang::EOpIndexDirect: + case glslang::EOpIndexDirectStruct: + case glslang::EOpLogicalXor: + case glslang::EOpAny: + case glslang::EOpAll: + return true; + default: + return false; + } +} + +// Emit short-circuiting code, where 'right' is never evaluated unless +// the left side is true (for &&) or false (for ||). +spv::Id TGlslangToSpvTraverser::createShortCircuit(glslang::TOperator op, glslang::TIntermTyped& left, glslang::TIntermTyped& right) +{ + spv::Id boolTypeId = builder.makeBoolType(); + + // emit left operand + builder.clearAccessChain(); + left.traverse(this); + spv::Id leftId = accessChainLoad(left.getType()); + + // Operands to accumulate OpPhi operands + std::vector phiOperands; + // accumulate left operand's phi information + phiOperands.push_back(leftId); + phiOperands.push_back(builder.getBuildPoint()->getId()); + + // Make the two kinds of operation symmetric with a "!" + // || => emit "if (! left) result = right" + // && => emit "if ( left) result = right" + // + // TODO: this runtime "not" for || could be avoided by adding functionality + // to 'builder' to have an "else" without an "then" + if (op == glslang::EOpLogicalOr) + leftId = builder.createUnaryOp(spv::OpLogicalNot, boolTypeId, leftId); + + // make an "if" based on the left value + spv::Builder::If ifBuilder(leftId, builder); + + // emit right operand as the "then" part of the "if" + builder.clearAccessChain(); + right.traverse(this); + spv::Id rightId = accessChainLoad(right.getType()); + + // accumulate left operand's phi information + phiOperands.push_back(rightId); + phiOperands.push_back(builder.getBuildPoint()->getId()); + + // finish the "if" + ifBuilder.makeEndIf(); + + // phi together the two results + return builder.createOp(spv::OpPhi, boolTypeId, phiOperands); +} + +// Return type Id of the imported set of extended instructions corresponds to the name. +// Import this set if it has not been imported yet. +spv::Id TGlslangToSpvTraverser::getExtBuiltins(const char* name) +{ + if (extBuiltinMap.find(name) != extBuiltinMap.end()) + return extBuiltinMap[name]; + else { + builder.addExtension(name); + spv::Id extBuiltins = builder.import(name); + extBuiltinMap[name] = extBuiltins; + return extBuiltins; + } +} + +}; // end anonymous namespace + +namespace glslang { + +void GetSpirvVersion(std::string& version) +{ + const int bufSize = 100; + char buf[bufSize]; + snprintf(buf, bufSize, "0x%08x, Revision %d", spv::Version, spv::Revision); + version = buf; +} + +// Write SPIR-V out to a binary file +void OutputSpvBin(const std::vector& spirv, const char* baseName) +{ + std::ofstream out; + out.open(baseName, std::ios::binary | std::ios::out); + if (out.fail()) + printf("ERROR: Failed to open file: %s\n", baseName); + for (int i = 0; i < (int)spirv.size(); ++i) { + unsigned int word = spirv[i]; + out.write((const char*)&word, 4); + } + out.close(); +} + +// Write SPIR-V out to a text file with 32-bit hexadecimal words +void OutputSpvHex(const std::vector& spirv, const char* baseName, const char* varName) +{ + std::ofstream out; + out.open(baseName, std::ios::binary | std::ios::out); + if (out.fail()) + printf("ERROR: Failed to open file: %s\n", baseName); + out << "\t// " GLSLANG_REVISION " " GLSLANG_DATE << std::endl; + if (varName != nullptr) { + out << "\t #pragma once" << std::endl; + out << "const uint32_t " << varName << "[] = {" << std::endl; + } + const int WORDS_PER_LINE = 8; + for (int i = 0; i < (int)spirv.size(); i += WORDS_PER_LINE) { + out << "\t"; + for (int j = 0; j < WORDS_PER_LINE && i + j < (int)spirv.size(); ++j) { + const unsigned int word = spirv[i + j]; + out << "0x" << std::hex << std::setw(8) << std::setfill('0') << word; + if (i + j + 1 < (int)spirv.size()) { + out << ","; + } + } + out << std::endl; + } + if (varName != nullptr) { + out << "};"; + } + out.close(); +} + +// +// Set up the glslang traversal +// +void GlslangToSpv(const glslang::TIntermediate& intermediate, std::vector& spirv) +{ + spv::SpvBuildLogger logger; + GlslangToSpv(intermediate, spirv, &logger); +} + +void GlslangToSpv(const glslang::TIntermediate& intermediate, std::vector& spirv, spv::SpvBuildLogger* logger) +{ + TIntermNode* root = intermediate.getTreeRoot(); + + if (root == 0) + return; + + glslang::GetThreadPoolAllocator().push(); + + TGlslangToSpvTraverser it(&intermediate, logger); + root->traverse(&it); + it.finishSpv(); + it.dumpSpv(spirv); + + glslang::GetThreadPoolAllocator().pop(); +} + +}; // end namespace glslang diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/GlslangToSpv.h b/3rdparty/bgfx/3rdparty/glslang/SPIRV/GlslangToSpv.h new file mode 100644 index 0000000..11e22f5 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/GlslangToSpv.h @@ -0,0 +1,54 @@ +// +// Copyright (C) 2014 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. + +#if _MSC_VER >= 1900 + #pragma warning(disable : 4464) // relative include path contains '..' +#endif + +#include "../glslang/Include/intermediate.h" + +#include +#include + +#include "Logger.h" + +namespace glslang { + +void GetSpirvVersion(std::string&); +void GlslangToSpv(const glslang::TIntermediate& intermediate, std::vector& spirv); +void GlslangToSpv(const glslang::TIntermediate& intermediate, std::vector& spirv, spv::SpvBuildLogger* logger); +void OutputSpvBin(const std::vector& spirv, const char* baseName); +void OutputSpvHex(const std::vector& 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 new file mode 100644 index 0000000..4bb3d77 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/InReadableOrder.cpp @@ -0,0 +1,113 @@ +// +// Copyright (C) 2016 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. + +// The SPIR-V spec requires code blocks to appear in an order satisfying the +// dominator-tree direction (ie, dominator before the dominated). This is, +// actually, easy to achieve: any pre-order CFG traversal algorithm will do it. +// Because such algorithms visit a block only after traversing some path to it +// from the root, they necessarily visit the block's idom first. +// +// But not every graph-traversal algorithm outputs blocks in an order that +// appears logical to human readers. The problem is that unrelated branches may +// be interspersed with each other, and merge blocks may come before some of the +// branches being merged. +// +// A good, human-readable order of blocks may be achieved by performing +// depth-first search but delaying merge nodes until after all their branches +// have been visited. This is implemented below by the inReadableOrder() +// function. + +#include "spvIR.h" + +#include +#include + +using spv::Block; +using spv::Id; + +namespace { +// Traverses CFG in a readable order, invoking a pre-set callback on each block. +// Use by calling visit() on the root block. +class ReadableOrderTraverser { +public: + explicit ReadableOrderTraverser(std::function callback) : callback_(callback) {} + // Visits the block if it hasn't been visited already and isn't currently + // being delayed. Invokes callback(block), then descends into its + // successors. Delays merge-block and continue-block processing until all + // the branches have been completed. + void visit(Block* block) + { + assert(block); + if (visited_[block] || delayed_[block]) + return; + callback_(block); + visited_[block] = true; + 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; + if (mergeInst->getOpCode() == spv::OpLoopMerge) { + Id continueId = mergeInst->getIdOperand(1); + continueBlock = + block->getParent().getParent().getInstruction(continueId)->getBlock(); + delayed_[continueBlock] = true; + } + } + const auto successors = block->getSuccessors(); + for (auto it = successors.cbegin(); it != successors.cend(); ++it) + visit(*it); + if (continueBlock) { + delayed_[continueBlock] = false; + visit(continueBlock); + } + if (mergeBlock) { + delayed_[mergeBlock] = false; + visit(mergeBlock); + } + } + +private: + std::function callback_; + // Whether a block has already been visited or is being delayed. + std::unordered_map visited_, delayed_; +}; +} + +void spv::inReadableOrder(Block* root, std::function callback) +{ + ReadableOrderTraverser(callback).visit(root); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/Logger.cpp b/3rdparty/bgfx/3rdparty/glslang/SPIRV/Logger.cpp new file mode 100644 index 0000000..48bd4e3 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/Logger.cpp @@ -0,0 +1,68 @@ +// +// Copyright (C) 2016 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 Google Inc. 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. + +#include "Logger.h" + +#include +#include +#include + +namespace spv { + +void SpvBuildLogger::tbdFunctionality(const std::string& f) +{ + if (std::find(std::begin(tbdFeatures), std::end(tbdFeatures), f) == std::end(tbdFeatures)) + tbdFeatures.push_back(f); +} + +void SpvBuildLogger::missingFunctionality(const std::string& f) +{ + if (std::find(std::begin(missingFeatures), std::end(missingFeatures), f) == std::end(missingFeatures)) + missingFeatures.push_back(f); +} + +std::string SpvBuildLogger::getAllMessages() const { + std::ostringstream messages; + for (auto it = tbdFeatures.cbegin(); it != tbdFeatures.cend(); ++it) + messages << "TBD functionality: " << *it << "\n"; + for (auto it = missingFeatures.cbegin(); it != missingFeatures.cend(); ++it) + messages << "Missing functionality: " << *it << "\n"; + for (auto it = warnings.cbegin(); it != warnings.cend(); ++it) + messages << "warning: " << *it << "\n"; + for (auto it = errors.cbegin(); it != errors.cend(); ++it) + messages << "error: " << *it << "\n"; + return messages.str(); +} + +} // end spv namespace diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/Logger.h b/3rdparty/bgfx/3rdparty/glslang/SPIRV/Logger.h new file mode 100644 index 0000000..2e4ddaf --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/Logger.h @@ -0,0 +1,74 @@ +// +// Copyright (C) 2016 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 Google Inc. 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. + +#ifndef GLSLANG_SPIRV_LOGGER_H +#define GLSLANG_SPIRV_LOGGER_H + +#include +#include + +namespace spv { + +// A class for holding all SPIR-V build status messages, including +// missing/TBD functionalities, warnings, and errors. +class SpvBuildLogger { +public: + SpvBuildLogger() {} + + // Registers a TBD functionality. + void tbdFunctionality(const std::string& f); + // Registers a missing functionality. + void missingFunctionality(const std::string& f); + + // Logs a warning. + void warning(const std::string& w) { warnings.push_back(w); } + // Logs an error. + void error(const std::string& e) { errors.push_back(e); } + + // Returns all messages accumulated in the order of: + // TBD functionalities, missing functionalities, warnings, errors. + std::string getAllMessages() const; + +private: + SpvBuildLogger(const SpvBuildLogger&); + + std::vector tbdFeatures; + std::vector missingFeatures; + std::vector warnings; + std::vector errors; +}; + +} // end spv namespace + +#endif // GLSLANG_SPIRV_LOGGER_H diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/SPVRemapper.cpp b/3rdparty/bgfx/3rdparty/glslang/SPIRV/SPVRemapper.cpp new file mode 100755 index 0000000..9b12705 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/SPVRemapper.cpp @@ -0,0 +1,1333 @@ +// +// Copyright (C) 2015 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. +// + +#include "SPVRemapper.h" +#include "doc.h" + +#if !defined (use_cpp11) +// ... not supported before C++11 +#else // defined (use_cpp11) + +#include +#include +#include "../glslang/Include/Common.h" + +namespace spv { + + // By default, just abort on error. Can be overridden via RegisterErrorHandler + spirvbin_t::errorfn_t spirvbin_t::errorHandler = [](const std::string&) { exit(5); }; + // By default, eat log messages. Can be overridden via RegisterLogHandler + spirvbin_t::logfn_t spirvbin_t::logHandler = [](const std::string&) { }; + + // This can be overridden to provide other message behavior if needed + void spirvbin_t::msg(int minVerbosity, int indent, const std::string& txt) const + { + if (verbose >= minVerbosity) + logHandler(std::string(indent, ' ') + txt); + } + + // hash opcode, with special handling for OpExtInst + std::uint32_t spirvbin_t::asOpCodeHash(unsigned word) + { + const spv::Op opCode = asOpCode(word); + + std::uint32_t offset = 0; + + switch (opCode) { + case spv::OpExtInst: + offset += asId(word + 4); break; + default: + break; + } + + return opCode * 19 + offset; // 19 = small prime + } + + spirvbin_t::range_t spirvbin_t::literalRange(spv::Op opCode) const + { + static const int maxCount = 1<<30; + + switch (opCode) { + case spv::OpTypeFloat: // fall through... + case spv::OpTypePointer: return range_t(2, 3); + case spv::OpTypeInt: return range_t(2, 4); + // TODO: case spv::OpTypeImage: + // TODO: case spv::OpTypeSampledImage: + case spv::OpTypeSampler: return range_t(3, 8); + case spv::OpTypeVector: // fall through + case spv::OpTypeMatrix: // ... + case spv::OpTypePipe: return range_t(3, 4); + case spv::OpConstant: return range_t(3, maxCount); + default: return range_t(0, 0); + } + } + + spirvbin_t::range_t spirvbin_t::typeRange(spv::Op opCode) const + { + static const int maxCount = 1<<30; + + if (isConstOp(opCode)) + return range_t(1, 2); + + switch (opCode) { + case spv::OpTypeVector: // fall through + case spv::OpTypeMatrix: // ... + case spv::OpTypeSampler: // ... + case spv::OpTypeArray: // ... + case spv::OpTypeRuntimeArray: // ... + case spv::OpTypePipe: return range_t(2, 3); + case spv::OpTypeStruct: // fall through + case spv::OpTypeFunction: return range_t(2, maxCount); + case spv::OpTypePointer: return range_t(3, 4); + default: return range_t(0, 0); + } + } + + spirvbin_t::range_t spirvbin_t::constRange(spv::Op opCode) const + { + static const int maxCount = 1<<30; + + switch (opCode) { + case spv::OpTypeArray: // fall through... + case spv::OpTypeRuntimeArray: return range_t(3, 4); + case spv::OpConstantComposite: return range_t(3, maxCount); + default: return range_t(0, 0); + } + } + + // Return the size of a type in 32-bit words. This currently only + // handles ints and floats, and is only invoked by queries which must be + // integer types. If ever needed, it can be generalized. + unsigned spirvbin_t::typeSizeInWords(spv::Id id) const + { + const unsigned typeStart = idPos(id); + const spv::Op opCode = asOpCode(typeStart); + + switch (opCode) { + case spv::OpTypeInt: // fall through... + case spv::OpTypeFloat: return (spv[typeStart+2]+31)/32; + default: + return 0; + } + } + + // Looks up the type of a given const or variable ID, and + // returns its size in 32-bit words. + unsigned spirvbin_t::idTypeSizeInWords(spv::Id id) const + { + const auto tid_it = idTypeSizeMap.find(id); + if (tid_it == idTypeSizeMap.end()) + error("type size for ID not found"); + + return tid_it->second; + } + + // Is this an opcode we should remove when using --strip? + bool spirvbin_t::isStripOp(spv::Op opCode) const + { + switch (opCode) { + case spv::OpSource: + case spv::OpSourceExtension: + case spv::OpName: + case spv::OpMemberName: + case spv::OpLine: return true; + default: return false; + } + } + + // Return true if this opcode is flow control + bool spirvbin_t::isFlowCtrl(spv::Op opCode) const + { + switch (opCode) { + case spv::OpBranchConditional: + case spv::OpBranch: + case spv::OpSwitch: + case spv::OpLoopMerge: + case spv::OpSelectionMerge: + case spv::OpLabel: + case spv::OpFunction: + case spv::OpFunctionEnd: return true; + default: return false; + } + } + + // Return true if this opcode defines a type + bool spirvbin_t::isTypeOp(spv::Op opCode) const + { + switch (opCode) { + case spv::OpTypeVoid: + case spv::OpTypeBool: + case spv::OpTypeInt: + case spv::OpTypeFloat: + case spv::OpTypeVector: + case spv::OpTypeMatrix: + case spv::OpTypeImage: + case spv::OpTypeSampler: + case spv::OpTypeArray: + case spv::OpTypeRuntimeArray: + case spv::OpTypeStruct: + case spv::OpTypeOpaque: + case spv::OpTypePointer: + case spv::OpTypeFunction: + case spv::OpTypeEvent: + case spv::OpTypeDeviceEvent: + case spv::OpTypeReserveId: + case spv::OpTypeQueue: + case spv::OpTypeSampledImage: + case spv::OpTypePipe: return true; + default: return false; + } + } + + // Return true if this opcode defines a constant + 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::OpConstantTrue: + case spv::OpConstantFalse: + case spv::OpConstantComposite: + case spv::OpConstant: return true; + default: return false; + } + } + + const auto inst_fn_nop = [](spv::Op, unsigned) { return false; }; + const auto op_fn_nop = [](spv::Id&) { }; + + // g++ doesn't like these defined in the class proper in an anonymous namespace. + // Dunno why. Also MSVC doesn't like the constexpr keyword. Also dunno why. + // Defining them externally seems to please both compilers, so, here they are. + const spv::Id spirvbin_t::unmapped = spv::Id(-10000); + const spv::Id spirvbin_t::unused = spv::Id(-10001); + const int spirvbin_t::header_size = 5; + + spv::Id spirvbin_t::nextUnusedId(spv::Id id) + { + while (isNewIdMapped(id)) // search for an unused ID + ++id; + + return id; + } + + spv::Id spirvbin_t::localId(spv::Id id, spv::Id newId) + { + assert(id != spv::NoResult && newId != spv::NoResult); + + if (id >= idMapL.size()) + idMapL.resize(id+1, unused); + + if (newId != unmapped && newId != unused) { + if (isOldIdUnused(id)) + error(std::string("ID unused in module: ") + std::to_string(id)); + + if (!isOldIdUnmapped(id)) + error(std::string("ID already mapped: ") + std::to_string(id) + " -> " + + std::to_string(localId(id))); + + if (isNewIdMapped(newId)) + error(std::string("ID already used in module: ") + std::to_string(newId)); + + msg(4, 4, std::string("map: ") + std::to_string(id) + " -> " + std::to_string(newId)); + setMapped(newId); + largestNewId = std::max(largestNewId, newId); + } + + return idMapL[id] = newId; + } + + // Parse a literal string from the SPIR binary and return it as an std::string + // Due to C++11 RValue references, this doesn't copy the result string. + std::string spirvbin_t::literalString(unsigned word) const + { + std::string literal; + + literal.reserve(16); + + const char* bytes = reinterpret_cast(spv.data() + word); + + while (bytes && *bytes) + literal += *bytes++; + + return literal; + } + + void spirvbin_t::applyMap() + { + msg(3, 2, std::string("Applying map: ")); + + // Map local IDs through the ID map + process(inst_fn_nop, // ignore instructions + [this](spv::Id& id) { + id = localId(id); + assert(id != unused && id != unmapped); + } + ); + } + + // Find free IDs for anything we haven't mapped + void spirvbin_t::mapRemainder() + { + msg(3, 2, std::string("Remapping remainder: ")); + + spv::Id unusedId = 1; // can't use 0: that's NoResult + spirword_t maxBound = 0; + + for (spv::Id id = 0; id < idMapL.size(); ++id) { + if (isOldIdUnused(id)) + continue; + + // Find a new mapping for any used but unmapped IDs + if (isOldIdUnmapped(id)) + localId(id, unusedId = nextUnusedId(unusedId)); + + if (isOldIdUnmapped(id)) + error(std::string("old ID not mapped: ") + std::to_string(id)); + + // Track max bound + maxBound = std::max(maxBound, localId(id) + 1); + } + + bound(maxBound); // reset header ID bound to as big as it now needs to be + } + + // Mark debug instructions for stripping + void spirvbin_t::stripDebug() + { + // Strip instructions in the stripOp set: debug info. + process( + [&](spv::Op opCode, unsigned start) { + // remember opcodes we want to strip later + if (isStripOp(opCode)) + stripInst(start); + return true; + }, + op_fn_nop); + } + + // Mark instructions that refer to now-removed IDs for stripping + void spirvbin_t::stripDeadRefs() + { + process( + [&](spv::Op opCode, unsigned start) { + // strip opcodes pointing to removed data + switch (opCode) { + case spv::OpName: + case spv::OpMemberName: + case spv::OpDecorate: + case spv::OpMemberDecorate: + if (idPosR.find(asId(start+1)) == idPosR.end()) + stripInst(start); + break; + default: + break; // leave it alone + } + + return true; + }, + op_fn_nop); + + strip(); + } + + // Update local maps of ID, type, etc positions + void spirvbin_t::buildLocalMaps() + { + msg(2, 2, std::string("build local maps: ")); + + mapped.clear(); + idMapL.clear(); +// preserve nameMap, so we don't clear that. + fnPos.clear(); + fnCalls.clear(); + typeConstPos.clear(); + idPosR.clear(); + entryPoint = spv::NoResult; + largestNewId = 0; + + idMapL.resize(bound(), unused); + + int fnStart = 0; + spv::Id fnRes = spv::NoResult; + + // build local Id and name maps + process( + [&](spv::Op opCode, unsigned start) { + unsigned word = start+1; + spv::Id typeId = spv::NoResult; + + if (spv::InstructionDesc[opCode].hasType()) + typeId = asId(word++); + + // If there's a result ID, remember the size of its type + if (spv::InstructionDesc[opCode].hasResult()) { + const spv::Id resultId = asId(word++); + idPosR[resultId] = start; + + if (typeId != spv::NoResult) { + const unsigned idTypeSize = typeSizeInWords(typeId); + + if (idTypeSize != 0) + idTypeSizeMap[resultId] = idTypeSize; + } + } + + if (opCode == spv::Op::OpName) { + const spv::Id target = asId(start+1); + const std::string name = literalString(start+2); + nameMap[name] = target; + + } else if (opCode == spv::Op::OpFunctionCall) { + ++fnCalls[asId(start + 3)]; + } else if (opCode == spv::Op::OpEntryPoint) { + entryPoint = asId(start + 2); + } else if (opCode == spv::Op::OpFunction) { + if (fnStart != 0) + error("nested function found"); + fnStart = start; + fnRes = asId(start + 2); + } else if (opCode == spv::Op::OpFunctionEnd) { + assert(fnRes != spv::NoResult); + if (fnStart == 0) + error("function end without function start"); + fnPos[fnRes] = range_t(fnStart, start + asWordCount(start)); + fnStart = 0; + } else if (isConstOp(opCode)) { + assert(asId(start + 2) != spv::NoResult); + typeConstPos.insert(start); + } else if (isTypeOp(opCode)) { + assert(asId(start + 1) != spv::NoResult); + typeConstPos.insert(start); + } + + return false; + }, + + [this](spv::Id& id) { localId(id, unmapped); } + ); + } + + // Validate the SPIR header + void spirvbin_t::validate() const + { + msg(2, 2, std::string("validating: ")); + + if (spv.size() < header_size) + error("file too short: "); + + if (magic() != spv::MagicNumber) + error("bad magic number"); + + // field 1 = version + // field 2 = generator magic + // field 3 = result bound + + if (schemaNum() != 0) + error("bad schema, must be 0"); + } + + 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; + + if (nextInst > int(spv.size())) + error("spir instruction terminated too early"); + + // Base for computing number of operands; will be updated as more is learned + unsigned numOperands = wordCount - 1; + + if (instFn(opCode, instructionStart)) + return nextInst; + + // Read type and result ID from instruction desc table + if (spv::InstructionDesc[opCode].hasType()) { + idFn(asId(word++)); + --numOperands; + } + + if (spv::InstructionDesc[opCode].hasResult()) { + idFn(asId(word++)); + --numOperands; + } + + // Extended instructions: currently, assume everything is an ID. + // TODO: add whatever data we need for exceptions to that + if (opCode == spv::OpExtInst) { + word += 2; // instruction set, and instruction from set + numOperands -= 2; + + for (unsigned op=0; op < numOperands; ++op) + idFn(asId(word++)); // ID + + return nextInst; + } + + // Circular buffer so we can look back at previous unmapped values during the mapping pass. + static const unsigned idBufferSize = 4; + spv::Id idBuffer[idBufferSize]; + unsigned idBufferPos = 0; + + // Store IDs from instruction in our map + for (int op = 0; numOperands > 0; ++op, --numOperands) { + switch (spv::InstructionDesc[opCode].operands.getClass(op)) { + case spv::OperandId: + case spv::OperandScope: + case spv::OperandMemorySemantics: + idBuffer[idBufferPos] = asId(word); + idBufferPos = (idBufferPos + 1) % idBufferSize; + idFn(asId(word++)); + break; + + case spv::OperandVariableIds: + for (unsigned i = 0; i < numOperands; ++i) + idFn(asId(word++)); + return nextInst; + + case spv::OperandVariableLiterals: + // for clarity + // if (opCode == spv::OpDecorate && asDecoration(word - 1) == spv::DecorationBuiltIn) { + // ++word; + // --numOperands; + // } + // word += numOperands; + return nextInst; + + case spv::OperandVariableLiteralId: { + if (opCode == OpSwitch) { + // word-2 is the position of the selector ID. OpSwitch Literals match its type. + // In case the IDs are currently being remapped, we get the word[-2] ID from + // the circular idBuffer. + const unsigned literalSizePos = (idBufferPos+idBufferSize-2) % idBufferSize; + const unsigned literalSize = idTypeSizeInWords(idBuffer[literalSizePos]); + const unsigned numLiteralIdPairs = (nextInst-word) / (1+literalSize); + + for (unsigned arg=0; arg instPos; + instPos.reserve(unsigned(spv.size()) / 16); // initial estimate; can grow if needed. + + // Build local table of instruction start positions + process( + [&](spv::Op, unsigned start) { instPos.push_back(start); return true; }, + op_fn_nop); + + // 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, + // to capture the flavor of nearby code, to hopefully match to similar + // code in other modules. + static const unsigned windowSize = 2; + + for (unsigned entry = 0; entry < unsigned(instPos.size()); ++entry) { + const unsigned start = instPos[entry]; + const spv::Op opCode = asOpCode(start); + + if (opCode == spv::OpFunction) + fnId = asId(start + 2); + + if (opCode == spv::OpFunctionEnd) + fnId = spv::NoResult; + + if (fnId != spv::NoResult) { // if inside a function + if (spv::InstructionDesc[opCode].hasResult()) { + const unsigned word = start + (spv::InstructionDesc[opCode].hasType() ? 2 : 1); + const spv::Id resId = asId(word); + std::uint32_t hashval = fnId * 17; // small prime + + for (unsigned i = entry-1; i >= entry-windowSize; --i) { + if (asOpCode(instPos[i]) == spv::OpFunction) + break; + hashval = hashval * 30103 + asOpCodeHash(instPos[i]); // 30103 = semiarbitrary prime + } + + for (unsigned i = entry; i <= entry + windowSize; ++i) { + if (asOpCode(instPos[i]) == spv::OpFunctionEnd) + break; + hashval = hashval * 30103 + asOpCodeHash(instPos[i]); // 30103 = semiarbitrary prime + } + + if (isOldIdUnmapped(resId)) + localId(resId, nextUnusedId(hashval % softTypeIdLimit + firstMappedID)); + } + } + } + + spv::Op thisOpCode(spv::OpNop); + std::unordered_map opCounter; + int idCounter(0); + fnId = spv::NoResult; + + process( + [&](spv::Op opCode, unsigned start) { + switch (opCode) { + case spv::OpFunction: + // Reset counters at each function + idCounter = 0; + opCounter.clear(); + fnId = asId(start + 2); + break; + + case spv::OpImageSampleImplicitLod: + case spv::OpImageSampleExplicitLod: + case spv::OpImageSampleDrefImplicitLod: + case spv::OpImageSampleDrefExplicitLod: + case spv::OpImageSampleProjImplicitLod: + case spv::OpImageSampleProjExplicitLod: + case spv::OpImageSampleProjDrefImplicitLod: + case spv::OpImageSampleProjDrefExplicitLod: + case spv::OpDot: + case spv::OpCompositeExtract: + case spv::OpCompositeInsert: + case spv::OpVectorShuffle: + case spv::OpLabel: + case spv::OpVariable: + + case spv::OpAccessChain: + case spv::OpLoad: + case spv::OpStore: + case spv::OpCompositeConstruct: + case spv::OpFunctionCall: + ++opCounter[opCode]; + idCounter = 0; + thisOpCode = opCode; + break; + default: + thisOpCode = spv::OpNop; + } + + return false; + }, + + [&](spv::Id& id) { + if (thisOpCode != spv::OpNop) { + ++idCounter; + const std::uint32_t hashval = opCounter[thisOpCode] * thisOpCode * 50047 + idCounter + fnId * 117; + + if (isOldIdUnmapped(id)) + localId(id, nextUnusedId(hashval % softTypeIdLimit + firstMappedID)); + } + }); + } + + // EXPERIMENTAL: forward IO and uniform load/stores into operands + // This produces invalid Schema-0 SPIRV + void spirvbin_t::forwardLoadStores() + { + idset_t fnLocalVars; // set of function local vars + idmap_t idMap; // Map of load result IDs to what they load + + // EXPERIMENTAL: Forward input and access chain loads into consumptions + process( + [&](spv::Op opCode, unsigned start) { + // Add inputs and uniforms to the map + if ((opCode == spv::OpVariable && asWordCount(start) == 4) && + (spv[start+3] == spv::StorageClassUniform || + spv[start+3] == spv::StorageClassUniformConstant || + spv[start+3] == spv::StorageClassInput)) + fnLocalVars.insert(asId(start+2)); + + if (opCode == spv::OpAccessChain && fnLocalVars.count(asId(start+3)) > 0) + fnLocalVars.insert(asId(start+2)); + + if (opCode == spv::OpLoad && fnLocalVars.count(asId(start+3)) > 0) { + idMap[asId(start+2)] = asId(start+3); + stripInst(start); + } + + return false; + }, + + [&](spv::Id& id) { if (idMap.find(id) != idMap.end()) id = idMap[id]; } + ); + + // EXPERIMENTAL: Implicit output stores + fnLocalVars.clear(); + idMap.clear(); + + process( + [&](spv::Op opCode, unsigned start) { + // Add inputs and uniforms to the map + if ((opCode == spv::OpVariable && asWordCount(start) == 4) && + (spv[start+3] == spv::StorageClassOutput)) + fnLocalVars.insert(asId(start+2)); + + if (opCode == spv::OpStore && fnLocalVars.count(asId(start+1)) > 0) { + idMap[asId(start+2)] = asId(start+1); + stripInst(start); + } + + return false; + }, + op_fn_nop); + + process( + inst_fn_nop, + [&](spv::Id& id) { if (idMap.find(id) != idMap.end()) id = idMap[id]; } + ); + + strip(); // strip out data we decided to eliminate + } + + // optimize loads and stores + void spirvbin_t::optLoadStore() + { + idset_t fnLocalVars; // candidates for removal (only locals) + idmap_t idMap; // Map of load result IDs to what they load + blockmap_t blockMap; // Map of IDs to blocks they first appear in + int blockNum = 0; // block count, to avoid crossing flow control + + // Find all the function local pointers stored at most once, and not via access chains + process( + [&](spv::Op opCode, unsigned start) { + const int wordCount = asWordCount(start); + + // Count blocks, so we can avoid crossing flow control + if (isFlowCtrl(opCode)) + ++blockNum; + + // Add local variables to the map + if ((opCode == spv::OpVariable && spv[start+3] == spv::StorageClassFunction && asWordCount(start) == 4)) { + fnLocalVars.insert(asId(start+2)); + return true; + } + + // Ignore process vars referenced via access chain + if ((opCode == spv::OpAccessChain || opCode == spv::OpInBoundsAccessChain) && fnLocalVars.count(asId(start+3)) > 0) { + fnLocalVars.erase(asId(start+3)); + idMap.erase(asId(start+3)); + return true; + } + + if (opCode == spv::OpLoad && fnLocalVars.count(asId(start+3)) > 0) { + const spv::Id varId = asId(start+3); + + // Avoid loads before stores + if (idMap.find(varId) == idMap.end()) { + fnLocalVars.erase(varId); + idMap.erase(varId); + } + + // don't do for volatile references + if (wordCount > 4 && (spv[start+4] & spv::MemoryAccessVolatileMask)) { + fnLocalVars.erase(varId); + idMap.erase(varId); + } + + // Handle flow control + if (blockMap.find(varId) == blockMap.end()) { + blockMap[varId] = blockNum; // track block we found it in. + } else if (blockMap[varId] != blockNum) { + fnLocalVars.erase(varId); // Ignore if crosses flow control + idMap.erase(varId); + } + + return true; + } + + if (opCode == spv::OpStore && fnLocalVars.count(asId(start+1)) > 0) { + const spv::Id varId = asId(start+1); + + if (idMap.find(varId) == idMap.end()) { + idMap[varId] = asId(start+2); + } else { + // Remove if it has more than one store to the same pointer + fnLocalVars.erase(varId); + idMap.erase(varId); + } + + // don't do for volatile references + if (wordCount > 3 && (spv[start+3] & spv::MemoryAccessVolatileMask)) { + fnLocalVars.erase(asId(start+3)); + idMap.erase(asId(start+3)); + } + + // Handle flow control + if (blockMap.find(varId) == blockMap.end()) { + blockMap[varId] = blockNum; // track block we found it in. + } else if (blockMap[varId] != blockNum) { + fnLocalVars.erase(varId); // Ignore if crosses flow control + idMap.erase(varId); + } + + return true; + } + + return false; + }, + + // If local var id used anywhere else, don't eliminate + [&](spv::Id& id) { + if (fnLocalVars.count(id) > 0) { + fnLocalVars.erase(id); + idMap.erase(id); + } + } + ); + + process( + [&](spv::Op opCode, unsigned start) { + if (opCode == spv::OpLoad && fnLocalVars.count(asId(start+3)) > 0) + idMap[asId(start+2)] = idMap[asId(start+3)]; + return false; + }, + op_fn_nop); + + // Chase replacements to their origins, in case there is a chain such as: + // 2 = store 1 + // 3 = load 2 + // 4 = store 3 + // 5 = load 4 + // We want to replace uses of 5 with 1. + for (const auto& idPair : idMap) { + spv::Id id = idPair.first; + while (idMap.find(id) != idMap.end()) // Chase to end of chain + id = idMap[id]; + + idMap[idPair.first] = id; // replace with final result + } + + // Remove the load/store/variables for the ones we've discovered + process( + [&](spv::Op opCode, unsigned start) { + if ((opCode == spv::OpLoad && fnLocalVars.count(asId(start+3)) > 0) || + (opCode == spv::OpStore && fnLocalVars.count(asId(start+1)) > 0) || + (opCode == spv::OpVariable && fnLocalVars.count(asId(start+2)) > 0)) { + + stripInst(start); + return true; + } + + return false; + }, + + [&](spv::Id& id) { + if (idMap.find(id) != idMap.end()) id = idMap[id]; + } + ); + + strip(); // strip out data we decided to eliminate + } + + // remove bodies of uncalled functions + void spirvbin_t::dceFuncs() + { + msg(3, 2, std::string("Removing Dead Functions: ")); + + // TODO: There are more efficient ways to do this. + bool changed = true; + + while (changed) { + changed = false; + + for (auto fn = fnPos.begin(); fn != fnPos.end(); ) { + if (fn->first == entryPoint) { // don't DCE away the entry point! + ++fn; + continue; + } + + const auto call_it = fnCalls.find(fn->first); + + if (call_it == fnCalls.end() || call_it->second == 0) { + changed = true; + stripRange.push_back(fn->second); + + // decrease counts of called functions + process( + [&](spv::Op opCode, unsigned start) { + if (opCode == spv::Op::OpFunctionCall) { + const auto call_it = fnCalls.find(asId(start + 3)); + if (call_it != fnCalls.end()) { + if (--call_it->second <= 0) + fnCalls.erase(call_it); + } + } + + return true; + }, + op_fn_nop, + fn->second.first, + fn->second.second); + + fn = fnPos.erase(fn); + } else ++fn; + } + } + } + + // remove unused function variables + decorations + void spirvbin_t::dceVars() + { + msg(3, 2, std::string("DCE Vars: ")); + + std::unordered_map varUseCount; + + // Count function variable use + process( + [&](spv::Op opCode, unsigned start) { + if (opCode == spv::OpVariable) { + ++varUseCount[asId(start+2)]; + return true; + } else if (opCode == spv::OpEntryPoint) { + const int wordCount = asWordCount(start); + for (int i = 4; i < wordCount; i++) { + ++varUseCount[asId(start+i)]; + } + return true; + } else + return false; + }, + + [&](spv::Id& id) { if (varUseCount[id]) ++varUseCount[id]; } + ); + + // Remove single-use function variables + associated decorations and names + process( + [&](spv::Op opCode, unsigned start) { + spv::Id id = spv::NoResult; + if (opCode == spv::OpVariable) + id = asId(start+2); + if (opCode == spv::OpDecorate || opCode == spv::OpName) + id = asId(start+1); + + if (id != spv::NoResult && varUseCount[id] == 1) + stripInst(start); + + return true; + }, + op_fn_nop); + } + + // remove unused types + void spirvbin_t::dceTypes() + { + std::vector isType(bound(), false); + + // for speed, make O(1) way to get to type query (map is log(n)) + for (const auto typeStart : typeConstPos) + isType[asTypeConstId(typeStart)] = true; + + std::unordered_map typeUseCount; + + // This is not the most efficient algorithm, but this is an offline tool, and + // it's easy to write this way. Can be improved opportunistically if needed. + bool changed = true; + while (changed) { + changed = false; + strip(); + typeUseCount.clear(); + + // Count total type usage + process(inst_fn_nop, + [&](spv::Id& id) { if (isType[id]) ++typeUseCount[id]; } + ); + + // Remove single reference types + for (const auto typeStart : typeConstPos) { + const spv::Id typeId = asTypeConstId(typeStart); + if (typeUseCount[typeId] == 1) { + changed = true; + --typeUseCount[typeId]; + stripInst(typeStart); + } + } + } + } + +#ifdef NOTDEF + bool spirvbin_t::matchType(const spirvbin_t::globaltypes_t& globalTypes, spv::Id lt, spv::Id gt) const + { + // Find the local type id "lt" and global type id "gt" + const auto lt_it = typeConstPosR.find(lt); + if (lt_it == typeConstPosR.end()) + return false; + + const auto typeStart = lt_it->second; + + // Search for entry in global table + const auto gtype = globalTypes.find(gt); + if (gtype == globalTypes.end()) + return false; + + const auto& gdata = gtype->second; + + // local wordcount and opcode + const int wordCount = asWordCount(typeStart); + const spv::Op opCode = asOpCode(typeStart); + + // no type match if opcodes don't match, or operand count doesn't match + if (opCode != opOpCode(gdata[0]) || wordCount != opWordCount(gdata[0])) + return false; + + const unsigned numOperands = wordCount - 2; // all types have a result + + const auto cmpIdRange = [&](range_t range) { + for (int x=range.first; xsecond; + } + + // Hash types to canonical values. This can return ID collisions (it's a bit + // inevitable): it's up to the caller to handle that gracefully. + std::uint32_t spirvbin_t::hashType(unsigned typeStart) const + { + const unsigned wordCount = asWordCount(typeStart); + const spv::Op opCode = asOpCode(typeStart); + + switch (opCode) { + case spv::OpTypeVoid: return 0; + case spv::OpTypeBool: return 1; + case spv::OpTypeInt: return 3 + (spv[typeStart+3]); + case spv::OpTypeFloat: return 5; + case spv::OpTypeVector: + return 6 + hashType(idPos(spv[typeStart+2])) * (spv[typeStart+3] - 1); + case spv::OpTypeMatrix: + return 30 + hashType(idPos(spv[typeStart+2])) * (spv[typeStart+3] - 1); + case spv::OpTypeImage: + return 120 + hashType(idPos(spv[typeStart+2])) + + spv[typeStart+3] + // dimensionality + spv[typeStart+4] * 8 * 16 + // depth + spv[typeStart+5] * 4 * 16 + // arrayed + spv[typeStart+6] * 2 * 16 + // multisampled + spv[typeStart+7] * 1 * 16; // format + case spv::OpTypeSampler: + return 500; + case spv::OpTypeSampledImage: + return 502; + case spv::OpTypeArray: + return 501 + hashType(idPos(spv[typeStart+2])) * spv[typeStart+3]; + case spv::OpTypeRuntimeArray: + return 5000 + hashType(idPos(spv[typeStart+2])); + case spv::OpTypeStruct: + { + std::uint32_t hash = 10000; + for (unsigned w=2; w < wordCount; ++w) + hash += w * hashType(idPos(spv[typeStart+w])); + return hash; + } + + case spv::OpTypeOpaque: return 6000 + spv[typeStart+2]; + case spv::OpTypePointer: return 100000 + hashType(idPos(spv[typeStart+3])); + case spv::OpTypeFunction: + { + std::uint32_t hash = 200000; + for (unsigned w=2; w < wordCount; ++w) + hash += w * hashType(idPos(spv[typeStart+w])); + return hash; + } + + case spv::OpTypeEvent: return 300000; + case spv::OpTypeDeviceEvent: return 300001; + case spv::OpTypeReserveId: return 300002; + case spv::OpTypeQueue: return 300003; + case spv::OpTypePipe: return 300004; + + case spv::OpConstantNull: return 300005; + case spv::OpConstantSampler: return 300006; + + case spv::OpConstantTrue: return 300007; + case spv::OpConstantFalse: return 300008; + case spv::OpConstantComposite: + { + std::uint32_t hash = 300011 + hashType(idPos(spv[typeStart+1])); + for (unsigned w=3; w < wordCount; ++w) + hash += w * hashType(idPos(spv[typeStart+w])); + return hash; + } + case spv::OpConstant: + { + std::uint32_t hash = 400011 + hashType(idPos(spv[typeStart+1])); + for (unsigned w=3; w < wordCount; ++w) + hash += w * spv[typeStart+w]; + return hash; + } + + default: + error("unknown type opcode"); + return 0; + } + } + + void spirvbin_t::mapTypeConst() + { + globaltypes_t globalTypeMap; + + msg(3, 2, std::string("Remapping Consts & Types: ")); + + static const std::uint32_t softTypeIdLimit = 3011; // small prime. TODO: get from options + static const std::uint32_t firstMappedID = 8; // offset into ID space + + for (auto& typeStart : typeConstPos) { + const spv::Id resId = asTypeConstId(typeStart); + const std::uint32_t hashval = hashType(typeStart); + + if (isOldIdUnmapped(resId)) + localId(resId, nextUnusedId(hashval % softTypeIdLimit + firstMappedID)); + } + } + + // Strip a single binary by removing ranges given in stripRange + void spirvbin_t::strip() + { + if (stripRange.empty()) // nothing to do + return; + + // Sort strip ranges in order of traversal + std::sort(stripRange.begin(), stripRange.end()); + + // Allocate a new binary big enough to hold old binary + // We'll step this iterator through the strip ranges as we go through the binary + auto strip_it = stripRange.begin(); + + int strippedPos = 0; + for (unsigned word = 0; word < unsigned(spv.size()); ++word) { + if (strip_it != stripRange.end() && word >= strip_it->second) + ++strip_it; + + if (strip_it == stripRange.end() || word < strip_it->first || word >= strip_it->second) + spv[strippedPos++] = spv[word]; + } + + spv.resize(strippedPos); + stripRange.clear(); + + buildLocalMaps(); + } + + // Strip a single binary by removing ranges given in stripRange + void spirvbin_t::remap(std::uint32_t opts) + { + options = opts; + + // Set up opcode tables from SpvDoc + spv::Parameterize(); + + validate(); // validate header + buildLocalMaps(); // build ID maps + + msg(3, 4, std::string("ID bound: ") + std::to_string(bound())); + + if (options & STRIP) stripDebug(); + strip(); // strip out data we decided to eliminate + if (options & OPT_LOADSTORE) optLoadStore(); + if (options & OPT_FWD_LS) forwardLoadStores(); + if (options & DCE_FUNCS) dceFuncs(); + if (options & DCE_VARS) dceVars(); + if (options & DCE_TYPES) dceTypes(); + + strip(); // strip out data we decided to eliminate + stripDeadRefs(); // remove references to things we DCEed + // after the last strip, we must clean any debug info referring to now-deleted data + + if (options & MAP_TYPES) mapTypeConst(); + if (options & MAP_NAMES) mapNames(); + if (options & MAP_FUNCS) mapFnBodies(); + + if (options & MAP_ALL) { + mapRemainder(); // map any unmapped IDs + applyMap(); // Now remap each shader to the new IDs we've come up with + } + } + + // remap from a memory image + void spirvbin_t::remap(std::vector& in_spv, std::uint32_t opts) + { + spv.swap(in_spv); + remap(opts); + spv.swap(in_spv); + } + +} // namespace SPV + +#endif // defined (use_cpp11) + diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/SPVRemapper.h b/3rdparty/bgfx/3rdparty/glslang/SPIRV/SPVRemapper.h new file mode 100755 index 0000000..f9f369a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/SPVRemapper.h @@ -0,0 +1,296 @@ +// +// Copyright (C) 2015 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. +// + +#ifndef SPIRVREMAPPER_H +#define SPIRVREMAPPER_H + +#include +#include +#include + +namespace spv { + +// MSVC defines __cplusplus as an older value, even when it supports almost all of 11. +// We handle that here by making our own symbol. +#if __cplusplus >= 201103L || _MSC_VER >= 1700 +# define use_cpp11 1 +#endif + +class spirvbin_base_t +{ +public: + enum Options { + NONE = 0, + STRIP = (1<<0), + MAP_TYPES = (1<<1), + MAP_NAMES = (1<<2), + MAP_FUNCS = (1<<3), + DCE_FUNCS = (1<<4), + DCE_VARS = (1<<5), + DCE_TYPES = (1<<6), + OPT_LOADSTORE = (1<<7), + OPT_FWD_LS = (1<<8), // EXPERIMENTAL: PRODUCES INVALID SCHEMA-0 SPIRV + MAP_ALL = (MAP_TYPES | MAP_NAMES | MAP_FUNCS), + DCE_ALL = (DCE_FUNCS | DCE_VARS | DCE_TYPES), + OPT_ALL = (OPT_LOADSTORE), + + ALL_BUT_STRIP = (MAP_ALL | DCE_ALL | OPT_ALL), + DO_EVERYTHING = (STRIP | ALL_BUT_STRIP) + }; +}; + +} // namespace SPV + +#if !defined (use_cpp11) +#include +#include + +namespace spv { +class spirvbin_t : public spirvbin_base_t +{ +public: + spirvbin_t(int /*verbose = 0*/) { } + + void remap(std::vector& /*spv*/, unsigned int /*opts = 0*/) + { + printf("Tool not compiled for C++11, which is required for SPIR-V remapping.\n"); + exit(5); + } +}; + +} // namespace SPV + +#else // defined (use_cpp11) + +#include +#include +#include +#include +#include +#include +#include + +#include "spirv.hpp" +#include "spvIR.h" + +namespace spv { + +// class to hold SPIR-V binary data for remapping, DCE, and debug stripping +class spirvbin_t : public spirvbin_base_t +{ +public: + spirvbin_t(int verbose = 0) : entryPoint(spv::NoResult), largestNewId(0), verbose(verbose) { } + virtual ~spirvbin_t() { } + + // remap on an existing binary in memory + void remap(std::vector& spv, std::uint32_t opts = DO_EVERYTHING); + + // Type for error/log handler functions + typedef std::function errorfn_t; + typedef std::function logfn_t; + + // Register error/log handling functions (can be lambda fn / functor / etc) + static void registerErrorHandler(errorfn_t handler) { errorHandler = handler; } + static void registerLogHandler(logfn_t handler) { logHandler = handler; } + +protected: + // This can be overridden to provide other message behavior if needed + virtual void msg(int minVerbosity, int indent, const std::string& txt) const; + +private: + // Local to global, or global to local ID map + typedef std::unordered_map idmap_t; + typedef std::unordered_set idset_t; + typedef std::unordered_map blockmap_t; + + void remap(std::uint32_t opts = DO_EVERYTHING); + + // Map of names to IDs + typedef std::unordered_map namemap_t; + + typedef std::uint32_t spirword_t; + + typedef std::pair range_t; + typedef std::function idfn_t; + typedef std::function instfn_t; + + // Special Values for ID map: + static const spv::Id unmapped; // unchanged from default value + static const spv::Id unused; // unused ID + static const int header_size; // SPIR header = 5 words + + class id_iterator_t; + + // For mapping type entries between different shaders + typedef std::vector typeentry_t; + typedef std::map globaltypes_t; + + // A set that preserves position order, and a reverse map + typedef std::set posmap_t; + typedef std::unordered_map posmap_rev_t; + + // Maps and ID to the size of its base type, if known. + typedef std::unordered_map typesize_map_t; + + // handle error + void error(const std::string& txt) const { errorHandler(txt); } + + bool isConstOp(spv::Op opCode) const; + bool isTypeOp(spv::Op opCode) const; + bool isStripOp(spv::Op opCode) const; + bool isFlowCtrl(spv::Op opCode) const; + range_t literalRange(spv::Op opCode) const; + range_t typeRange(spv::Op opCode) const; + range_t constRange(spv::Op opCode) const; + unsigned typeSizeInWords(spv::Id id) const; + unsigned idTypeSizeInWords(spv::Id id) const; + + spv::Id& asId(unsigned word) { return spv[word]; } + const spv::Id& asId(unsigned word) const { return spv[word]; } + spv::Op asOpCode(unsigned word) const { return opOpCode(spv[word]); } + std::uint32_t asOpCodeHash(unsigned word); + spv::Decoration asDecoration(unsigned word) const { return spv::Decoration(spv[word]); } + unsigned asWordCount(unsigned word) const { return opWordCount(spv[word]); } + spv::Id asTypeConstId(unsigned word) const { return asId(word + (isTypeOp(asOpCode(word)) ? 1 : 2)); } + unsigned idPos(spv::Id id) const; + + static unsigned opWordCount(spirword_t data) { return data >> spv::WordCountShift; } + static spv::Op opOpCode(spirword_t data) { return spv::Op(data & spv::OpCodeMask); } + + // Header access & set methods + spirword_t magic() const { return spv[0]; } // return magic number + spirword_t bound() const { return spv[3]; } // return Id bound from header + spirword_t bound(spirword_t b) { return spv[3] = b; }; + spirword_t genmagic() const { return spv[2]; } // generator magic + spirword_t genmagic(spirword_t m) { return spv[2] = m; } + spirword_t schemaNum() const { return spv[4]; } // schema number from header + + // Mapping fns: get + spv::Id localId(spv::Id id) const { return idMapL[id]; } + + // Mapping fns: set + inline spv::Id localId(spv::Id id, spv::Id newId); + void countIds(spv::Id id); + + // Return next unused new local ID. + // NOTE: boost::dynamic_bitset would be more efficient due to find_next(), + // which std::vector doens't have. + inline spv::Id nextUnusedId(spv::Id id); + + void buildLocalMaps(); + std::string literalString(unsigned word) const; // Return literal as a std::string + int literalStringWords(const std::string& str) const { return (int(str.size())+4)/4; } + + bool isNewIdMapped(spv::Id newId) const { return isMapped(newId); } + bool isOldIdUnmapped(spv::Id oldId) const { return localId(oldId) == unmapped; } + bool isOldIdUnused(spv::Id oldId) const { return localId(oldId) == unused; } + bool isOldIdMapped(spv::Id oldId) const { return !isOldIdUnused(oldId) && !isOldIdUnmapped(oldId); } + bool isFunction(spv::Id oldId) const { return fnPos.find(oldId) != fnPos.end(); } + + // bool matchType(const globaltypes_t& globalTypes, spv::Id lt, spv::Id gt) const; + // spv::Id findType(const globaltypes_t& globalTypes, spv::Id lt) const; + std::uint32_t hashType(unsigned typeStart) const; + + spirvbin_t& process(instfn_t, idfn_t, unsigned begin = 0, unsigned end = 0); + int processInstruction(unsigned word, instfn_t, idfn_t); + + void validate() const; + void mapTypeConst(); + void mapFnBodies(); + void optLoadStore(); + void dceFuncs(); + void dceVars(); + void dceTypes(); + void mapNames(); + void foldIds(); // fold IDs to smallest space + void forwardLoadStores(); // load store forwarding (EXPERIMENTAL) + void offsetIds(); // create relative offset IDs + + void applyMap(); // remap per local name map + void mapRemainder(); // map any IDs we haven't touched yet + void stripDebug(); // strip all debug info + void stripDeadRefs(); // strips debug info for now-dead references after DCE + void strip(); // remove debug symbols + + std::vector spv; // SPIR words + + namemap_t nameMap; // ID names from OpName + + // Since we want to also do binary ops, we can't use std::vector. we could use + // boost::dynamic_bitset, but we're trying to avoid a boost dependency. + typedef std::uint64_t bits_t; + std::vector mapped; // which new IDs have been mapped + static const int mBits = sizeof(bits_t) * 4; + + bool isMapped(spv::Id id) const { return id < maxMappedId() && ((mapped[id/mBits] & (1LL<<(id%mBits))) != 0); } + void setMapped(spv::Id id) { resizeMapped(id); mapped[id/mBits] |= (1LL<<(id%mBits)); } + void resizeMapped(spv::Id id) { if (id >= maxMappedId()) mapped.resize(id/mBits+1, 0); } + size_t maxMappedId() const { return mapped.size() * mBits; } + + // Add a strip range for a given instruction starting at 'start' + // Note: avoiding brace initializers to please older versions os MSVC. + void stripInst(unsigned start) { stripRange.push_back(range_t(start, start + asWordCount(start))); } + + // Function start and end. use unordered_map because we'll have + // many fewer functions than IDs. + std::unordered_map fnPos; + + // Which functions are called, anywhere in the module, with a call count + std::unordered_map fnCalls; + + posmap_t typeConstPos; // word positions that define types & consts (ordered) + posmap_rev_t idPosR; // reverse map from IDs to positions + typesize_map_t idTypeSizeMap; // maps each ID to its type size, if known. + + std::vector idMapL; // ID {M}ap from {L}ocal to {G}lobal IDs + + spv::Id entryPoint; // module entry point + spv::Id largestNewId; // biggest new ID we have mapped anything to + + // Sections of the binary to strip, given as [begin,end) + std::vector stripRange; + + // processing options: + std::uint32_t options; + int verbose; // verbosity level + + static errorfn_t errorHandler; + static logfn_t logHandler; +}; + +} // namespace SPV + +#endif // defined (use_cpp11) +#endif // SPIRVREMAPPER_H diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/SpvBuilder.cpp b/3rdparty/bgfx/3rdparty/glslang/SPIRV/SpvBuilder.cpp new file mode 100644 index 0000000..0add1db --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/SpvBuilder.cpp @@ -0,0 +1,2584 @@ +// +// Copyright (C) 2014-2015 LunarG, Inc. +// Copyright (C) 2015-2016 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. + +// +// Helper for making SPIR-V IR. Generally, this is documented in the header +// SpvBuilder.h. +// + +#include +#include + +#include +#include + +#include "SpvBuilder.h" + +#ifdef AMD_EXTENSIONS + #include "hex_float.h" +#endif + +#ifndef _WIN32 + #include +#endif + +namespace spv { + +Builder::Builder(unsigned int magicNumber, SpvBuildLogger* buildLogger) : + source(SourceLanguageUnknown), + sourceVersion(0), + addressModel(AddressingModelLogical), + memoryModel(MemoryModelGLSL450), + builderNumber(magicNumber), + buildPoint(0), + uniqueId(0), + entryPointFunction(0), + generatingOpCodeForSpecConst(false), + logger(buildLogger) +{ + clearAccessChain(); +} + +Builder::~Builder() +{ +} + +Id Builder::import(const char* name) +{ + Instruction* import = new Instruction(getUniqueId(), NoType, OpExtInstImport); + import->addStringOperand(name); + + imports.push_back(std::unique_ptr(import)); + return import->getResultId(); +} + +// For creating new groupedTypes (will return old type if the requested one was already made). +Id Builder::makeVoidType() +{ + Instruction* type; + if (groupedTypes[OpTypeVoid].size() == 0) { + type = new Instruction(getUniqueId(), NoType, OpTypeVoid); + groupedTypes[OpTypeVoid].push_back(type); + constantsTypesGlobals.push_back(std::unique_ptr(type)); + module.mapInstruction(type); + } else + type = groupedTypes[OpTypeVoid].back(); + + return type->getResultId(); +} + +Id Builder::makeBoolType() +{ + Instruction* type; + if (groupedTypes[OpTypeBool].size() == 0) { + type = new Instruction(getUniqueId(), NoType, OpTypeBool); + groupedTypes[OpTypeBool].push_back(type); + constantsTypesGlobals.push_back(std::unique_ptr(type)); + module.mapInstruction(type); + } else + type = groupedTypes[OpTypeBool].back(); + + return type->getResultId(); +} + +Id Builder::makeSamplerType() +{ + Instruction* type; + if (groupedTypes[OpTypeSampler].size() == 0) { + type = new Instruction(getUniqueId(), NoType, OpTypeSampler); + groupedTypes[OpTypeSampler].push_back(type); + constantsTypesGlobals.push_back(std::unique_ptr(type)); + module.mapInstruction(type); + } else + type = groupedTypes[OpTypeSampler].back(); + + return type->getResultId(); +} + +Id Builder::makePointer(StorageClass storageClass, Id pointee) +{ + // try to find it + Instruction* type; + for (int t = 0; t < (int)groupedTypes[OpTypePointer].size(); ++t) { + type = groupedTypes[OpTypePointer][t]; + if (type->getImmediateOperand(0) == (unsigned)storageClass && + type->getIdOperand(1) == pointee) + return type->getResultId(); + } + + // not found, make it + type = new Instruction(getUniqueId(), NoType, OpTypePointer); + type->addImmediateOperand(storageClass); + type->addIdOperand(pointee); + groupedTypes[OpTypePointer].push_back(type); + constantsTypesGlobals.push_back(std::unique_ptr(type)); + module.mapInstruction(type); + + return type->getResultId(); +} + +Id Builder::makeIntegerType(int width, bool hasSign) +{ + // try to find it + Instruction* type; + for (int t = 0; t < (int)groupedTypes[OpTypeInt].size(); ++t) { + type = groupedTypes[OpTypeInt][t]; + if (type->getImmediateOperand(0) == (unsigned)width && + type->getImmediateOperand(1) == (hasSign ? 1u : 0u)) + return type->getResultId(); + } + + // not found, make it + type = new Instruction(getUniqueId(), NoType, OpTypeInt); + type->addImmediateOperand(width); + type->addImmediateOperand(hasSign ? 1 : 0); + groupedTypes[OpTypeInt].push_back(type); + constantsTypesGlobals.push_back(std::unique_ptr(type)); + module.mapInstruction(type); + + // deal with capabilities + switch (width) { + case 16: + addCapability(CapabilityInt16); + break; + case 64: + addCapability(CapabilityInt64); + break; + default: + break; + } + + return type->getResultId(); +} + +Id Builder::makeFloatType(int width) +{ + // try to find it + Instruction* type; + for (int t = 0; t < (int)groupedTypes[OpTypeFloat].size(); ++t) { + type = groupedTypes[OpTypeFloat][t]; + if (type->getImmediateOperand(0) == (unsigned)width) + return type->getResultId(); + } + + // not found, make it + type = new Instruction(getUniqueId(), NoType, OpTypeFloat); + type->addImmediateOperand(width); + groupedTypes[OpTypeFloat].push_back(type); + constantsTypesGlobals.push_back(std::unique_ptr(type)); + module.mapInstruction(type); + + // deal with capabilities + switch (width) { + case 16: + addCapability(CapabilityFloat16); + break; + case 64: + addCapability(CapabilityFloat64); + break; + default: + break; + } + + return type->getResultId(); +} + +// Make a struct without checking for duplication. +// See makeStructResultType() for non-decorated structs +// needed as the result of some instructions, which does +// check for duplicates. +Id Builder::makeStructType(const std::vector& members, const char* name) +{ + // Don't look for previous one, because in the general case, + // structs can be duplicated except for decorations. + + // not found, make it + Instruction* type = new Instruction(getUniqueId(), NoType, OpTypeStruct); + for (int op = 0; op < (int)members.size(); ++op) + type->addIdOperand(members[op]); + groupedTypes[OpTypeStruct].push_back(type); + constantsTypesGlobals.push_back(std::unique_ptr(type)); + module.mapInstruction(type); + addName(type->getResultId(), name); + + return type->getResultId(); +} + +// Make a struct for the simple results of several instructions, +// checking for duplication. +Id Builder::makeStructResultType(Id type0, Id type1) +{ + // try to find it + Instruction* type; + for (int t = 0; t < (int)groupedTypes[OpTypeStruct].size(); ++t) { + type = groupedTypes[OpTypeStruct][t]; + if (type->getNumOperands() != 2) + continue; + if (type->getIdOperand(0) != type0 || + type->getIdOperand(1) != type1) + continue; + return type->getResultId(); + } + + // not found, make it + std::vector members; + members.push_back(type0); + members.push_back(type1); + + return makeStructType(members, "ResType"); +} + +Id Builder::makeVectorType(Id component, int size) +{ + // try to find it + Instruction* type; + for (int t = 0; t < (int)groupedTypes[OpTypeVector].size(); ++t) { + type = groupedTypes[OpTypeVector][t]; + if (type->getIdOperand(0) == component && + type->getImmediateOperand(1) == (unsigned)size) + return type->getResultId(); + } + + // not found, make it + type = new Instruction(getUniqueId(), NoType, OpTypeVector); + type->addIdOperand(component); + type->addImmediateOperand(size); + groupedTypes[OpTypeVector].push_back(type); + constantsTypesGlobals.push_back(std::unique_ptr(type)); + module.mapInstruction(type); + + return type->getResultId(); +} + +Id Builder::makeMatrixType(Id component, int cols, int rows) +{ + assert(cols <= maxMatrixSize && rows <= maxMatrixSize); + + Id column = makeVectorType(component, rows); + + // try to find it + Instruction* type; + for (int t = 0; t < (int)groupedTypes[OpTypeMatrix].size(); ++t) { + type = groupedTypes[OpTypeMatrix][t]; + if (type->getIdOperand(0) == column && + type->getImmediateOperand(1) == (unsigned)cols) + return type->getResultId(); + } + + // not found, make it + type = new Instruction(getUniqueId(), NoType, OpTypeMatrix); + type->addIdOperand(column); + type->addImmediateOperand(cols); + groupedTypes[OpTypeMatrix].push_back(type); + constantsTypesGlobals.push_back(std::unique_ptr(type)); + module.mapInstruction(type); + + return type->getResultId(); +} + +// TODO: performance: track arrays per stride +// If a stride is supplied (non-zero) make an array. +// If no stride (0), reuse previous array types. +// 'size' is an Id of a constant or specialization constant of the array size +Id Builder::makeArrayType(Id element, Id sizeId, int stride) +{ + Instruction* type; + if (stride == 0) { + // try to find existing type + for (int t = 0; t < (int)groupedTypes[OpTypeArray].size(); ++t) { + type = groupedTypes[OpTypeArray][t]; + if (type->getIdOperand(0) == element && + type->getIdOperand(1) == sizeId) + return type->getResultId(); + } + } + + // not found, make it + type = new Instruction(getUniqueId(), NoType, OpTypeArray); + type->addIdOperand(element); + type->addIdOperand(sizeId); + groupedTypes[OpTypeArray].push_back(type); + constantsTypesGlobals.push_back(std::unique_ptr(type)); + module.mapInstruction(type); + + return type->getResultId(); +} + +Id Builder::makeRuntimeArray(Id element) +{ + Instruction* type = new Instruction(getUniqueId(), NoType, OpTypeRuntimeArray); + type->addIdOperand(element); + constantsTypesGlobals.push_back(std::unique_ptr(type)); + module.mapInstruction(type); + + return type->getResultId(); +} + +Id Builder::makeFunctionType(Id returnType, const std::vector& paramTypes) +{ + // try to find it + Instruction* type; + for (int t = 0; t < (int)groupedTypes[OpTypeFunction].size(); ++t) { + type = groupedTypes[OpTypeFunction][t]; + if (type->getIdOperand(0) != returnType || (int)paramTypes.size() != type->getNumOperands() - 1) + continue; + bool mismatch = false; + for (int p = 0; p < (int)paramTypes.size(); ++p) { + if (paramTypes[p] != type->getIdOperand(p + 1)) { + mismatch = true; + break; + } + } + if (! mismatch) + return type->getResultId(); + } + + // not found, make it + type = new Instruction(getUniqueId(), NoType, OpTypeFunction); + type->addIdOperand(returnType); + for (int p = 0; p < (int)paramTypes.size(); ++p) + type->addIdOperand(paramTypes[p]); + groupedTypes[OpTypeFunction].push_back(type); + constantsTypesGlobals.push_back(std::unique_ptr(type)); + module.mapInstruction(type); + + return type->getResultId(); +} + +Id Builder::makeImageType(Id sampledType, Dim dim, bool depth, bool arrayed, bool ms, unsigned sampled, ImageFormat format) +{ + // try to find it + Instruction* type; + for (int t = 0; t < (int)groupedTypes[OpTypeImage].size(); ++t) { + type = groupedTypes[OpTypeImage][t]; + if (type->getIdOperand(0) == sampledType && + type->getImmediateOperand(1) == (unsigned int)dim && + type->getImmediateOperand(2) == ( depth ? 1u : 0u) && + type->getImmediateOperand(3) == (arrayed ? 1u : 0u) && + type->getImmediateOperand(4) == ( ms ? 1u : 0u) && + type->getImmediateOperand(5) == sampled && + type->getImmediateOperand(6) == (unsigned int)format) + return type->getResultId(); + } + + // not found, make it + type = new Instruction(getUniqueId(), NoType, OpTypeImage); + type->addIdOperand(sampledType); + type->addImmediateOperand( dim); + type->addImmediateOperand( depth ? 1 : 0); + type->addImmediateOperand(arrayed ? 1 : 0); + type->addImmediateOperand( ms ? 1 : 0); + type->addImmediateOperand(sampled); + type->addImmediateOperand((unsigned int)format); + + groupedTypes[OpTypeImage].push_back(type); + constantsTypesGlobals.push_back(std::unique_ptr(type)); + module.mapInstruction(type); + + // deal with capabilities + switch (dim) { + case DimBuffer: + if (sampled) + addCapability(CapabilitySampledBuffer); + else + addCapability(CapabilityImageBuffer); + break; + case Dim1D: + if (sampled) + addCapability(CapabilitySampled1D); + else + addCapability(CapabilityImage1D); + break; + case DimCube: + if (arrayed) { + if (sampled) + addCapability(CapabilitySampledCubeArray); + else + addCapability(CapabilityImageCubeArray); + } + break; + case DimRect: + if (sampled) + addCapability(CapabilitySampledRect); + else + addCapability(CapabilityImageRect); + break; + case DimSubpassData: + addCapability(CapabilityInputAttachment); + break; + default: + break; + } + + if (ms) { + if (arrayed) + addCapability(CapabilityImageMSArray); + if (! sampled) + addCapability(CapabilityStorageImageMultisample); + } + + return type->getResultId(); +} + +Id Builder::makeSampledImageType(Id imageType) +{ + // try to find it + Instruction* type; + for (int t = 0; t < (int)groupedTypes[OpTypeSampledImage].size(); ++t) { + type = groupedTypes[OpTypeSampledImage][t]; + if (type->getIdOperand(0) == imageType) + return type->getResultId(); + } + + // not found, make it + type = new Instruction(getUniqueId(), NoType, OpTypeSampledImage); + type->addIdOperand(imageType); + + groupedTypes[OpTypeSampledImage].push_back(type); + constantsTypesGlobals.push_back(std::unique_ptr(type)); + module.mapInstruction(type); + + return type->getResultId(); +} + +Id Builder::getDerefTypeId(Id resultId) const +{ + Id typeId = getTypeId(resultId); + assert(isPointerType(typeId)); + + return module.getInstruction(typeId)->getImmediateOperand(1); +} + +Op Builder::getMostBasicTypeClass(Id typeId) const +{ + Instruction* instr = module.getInstruction(typeId); + + Op typeClass = instr->getOpCode(); + switch (typeClass) + { + case OpTypeVoid: + case OpTypeBool: + case OpTypeInt: + case OpTypeFloat: + case OpTypeStruct: + return typeClass; + case OpTypeVector: + case OpTypeMatrix: + case OpTypeArray: + case OpTypeRuntimeArray: + return getMostBasicTypeClass(instr->getIdOperand(0)); + case OpTypePointer: + return getMostBasicTypeClass(instr->getIdOperand(1)); + default: + assert(0); + return OpTypeFloat; + } +} + +int Builder::getNumTypeConstituents(Id typeId) const +{ + Instruction* instr = module.getInstruction(typeId); + + switch (instr->getOpCode()) + { + case OpTypeBool: + case OpTypeInt: + case OpTypeFloat: + return 1; + case OpTypeVector: + case OpTypeMatrix: + return instr->getImmediateOperand(1); + case OpTypeArray: + { + Id lengthId = instr->getImmediateOperand(1); + return module.getInstruction(lengthId)->getImmediateOperand(0); + } + case OpTypeStruct: + return instr->getNumOperands(); + default: + assert(0); + return 1; + } +} + +// Return the lowest-level type of scalar that an homogeneous composite is made out of. +// Typically, this is just to find out if something is made out of ints or floats. +// However, it includes returning a structure, if say, it is an array of structure. +Id Builder::getScalarTypeId(Id typeId) const +{ + Instruction* instr = module.getInstruction(typeId); + + Op typeClass = instr->getOpCode(); + switch (typeClass) + { + case OpTypeVoid: + case OpTypeBool: + case OpTypeInt: + case OpTypeFloat: + case OpTypeStruct: + return instr->getResultId(); + case OpTypeVector: + case OpTypeMatrix: + case OpTypeArray: + case OpTypeRuntimeArray: + case OpTypePointer: + return getScalarTypeId(getContainedTypeId(typeId)); + default: + assert(0); + return NoResult; + } +} + +// Return the type of 'member' of a composite. +Id Builder::getContainedTypeId(Id typeId, int member) const +{ + Instruction* instr = module.getInstruction(typeId); + + Op typeClass = instr->getOpCode(); + switch (typeClass) + { + case OpTypeVector: + case OpTypeMatrix: + case OpTypeArray: + case OpTypeRuntimeArray: + return instr->getIdOperand(0); + case OpTypePointer: + return instr->getIdOperand(1); + case OpTypeStruct: + return instr->getIdOperand(member); + default: + assert(0); + return NoResult; + } +} + +// Return the immediately contained type of a given composite type. +Id Builder::getContainedTypeId(Id typeId) const +{ + return getContainedTypeId(typeId, 0); +} + +// See if a scalar constant of this type has already been created, so it +// can be reused rather than duplicated. (Required by the specification). +Id Builder::findScalarConstant(Op typeClass, Op opcode, Id typeId, unsigned value) const +{ + Instruction* constant; + for (int i = 0; i < (int)groupedConstants[typeClass].size(); ++i) { + constant = groupedConstants[typeClass][i]; + if (constant->getOpCode() == opcode && + constant->getTypeId() == typeId && + constant->getImmediateOperand(0) == value) + return constant->getResultId(); + } + + return 0; +} + +// Version of findScalarConstant (see above) for scalars that take two operands (e.g. a 'double' or 'int64'). +Id Builder::findScalarConstant(Op typeClass, Op opcode, Id typeId, unsigned v1, unsigned v2) const +{ + Instruction* constant; + for (int i = 0; i < (int)groupedConstants[typeClass].size(); ++i) { + constant = groupedConstants[typeClass][i]; + if (constant->getOpCode() == opcode && + constant->getTypeId() == typeId && + constant->getImmediateOperand(0) == v1 && + constant->getImmediateOperand(1) == v2) + return constant->getResultId(); + } + + return 0; +} + +// Return true if consuming 'opcode' means consuming a constant. +// "constant" here means after final transform to executable code, +// the value consumed will be a constant, so includes specialization. +bool Builder::isConstantOpCode(Op opcode) const +{ + switch (opcode) { + case OpUndef: + case OpConstantTrue: + case OpConstantFalse: + case OpConstant: + case OpConstantComposite: + case OpConstantSampler: + case OpConstantNull: + case OpSpecConstantTrue: + case OpSpecConstantFalse: + case OpSpecConstant: + case OpSpecConstantComposite: + case OpSpecConstantOp: + return true; + default: + return false; + } +} + +// Return true if consuming 'opcode' means consuming a specialization constant. +bool Builder::isSpecConstantOpCode(Op opcode) const +{ + switch (opcode) { + case OpSpecConstantTrue: + case OpSpecConstantFalse: + case OpSpecConstant: + case OpSpecConstantComposite: + case OpSpecConstantOp: + return true; + default: + return false; + } +} + +Id Builder::makeBoolConstant(bool b, bool specConstant) +{ + Id typeId = makeBoolType(); + Instruction* constant; + Op opcode = specConstant ? (b ? OpSpecConstantTrue : OpSpecConstantFalse) : (b ? OpConstantTrue : OpConstantFalse); + + // See if we already made it. Applies only to regular constants, because specialization constants + // must remain distinct for the purpose of applying a SpecId decoration. + if (! specConstant) { + Id existing = 0; + for (int i = 0; i < (int)groupedConstants[OpTypeBool].size(); ++i) { + constant = groupedConstants[OpTypeBool][i]; + if (constant->getTypeId() == typeId && constant->getOpCode() == opcode) + existing = constant->getResultId(); + } + + if (existing) + return existing; + } + + // Make it + Instruction* c = new Instruction(getUniqueId(), typeId, opcode); + constantsTypesGlobals.push_back(std::unique_ptr(c)); + groupedConstants[OpTypeBool].push_back(c); + module.mapInstruction(c); + + return c->getResultId(); +} + +Id Builder::makeIntConstant(Id typeId, unsigned value, bool specConstant) +{ + Op opcode = specConstant ? OpSpecConstant : OpConstant; + + // See if we already made it. Applies only to regular constants, because specialization constants + // must remain distinct for the purpose of applying a SpecId decoration. + if (! specConstant) { + Id existing = findScalarConstant(OpTypeInt, opcode, typeId, value); + if (existing) + return existing; + } + + Instruction* c = new Instruction(getUniqueId(), typeId, opcode); + c->addImmediateOperand(value); + constantsTypesGlobals.push_back(std::unique_ptr(c)); + groupedConstants[OpTypeInt].push_back(c); + module.mapInstruction(c); + + return c->getResultId(); +} + +Id Builder::makeInt64Constant(Id typeId, unsigned long long value, bool specConstant) +{ + Op opcode = specConstant ? OpSpecConstant : OpConstant; + + unsigned op1 = value & 0xFFFFFFFF; + unsigned op2 = value >> 32; + + // See if we already made it. Applies only to regular constants, because specialization constants + // must remain distinct for the purpose of applying a SpecId decoration. + if (! specConstant) { + Id existing = findScalarConstant(OpTypeInt, opcode, typeId, op1, op2); + if (existing) + return existing; + } + + Instruction* c = new Instruction(getUniqueId(), typeId, opcode); + c->addImmediateOperand(op1); + c->addImmediateOperand(op2); + constantsTypesGlobals.push_back(std::unique_ptr(c)); + groupedConstants[OpTypeInt].push_back(c); + module.mapInstruction(c); + + return c->getResultId(); +} + +Id Builder::makeFloatConstant(float f, bool specConstant) +{ + Op opcode = specConstant ? OpSpecConstant : OpConstant; + Id typeId = makeFloatType(32); + union { float fl; unsigned int ui; } u; + u.fl = f; + unsigned value = u.ui; + + // See if we already made it. Applies only to regular constants, because specialization constants + // must remain distinct for the purpose of applying a SpecId decoration. + if (! specConstant) { + Id existing = findScalarConstant(OpTypeFloat, opcode, typeId, value); + if (existing) + return existing; + } + + Instruction* c = new Instruction(getUniqueId(), typeId, opcode); + c->addImmediateOperand(value); + constantsTypesGlobals.push_back(std::unique_ptr(c)); + groupedConstants[OpTypeFloat].push_back(c); + module.mapInstruction(c); + + return c->getResultId(); +} + +Id Builder::makeDoubleConstant(double d, bool specConstant) +{ + Op opcode = specConstant ? OpSpecConstant : OpConstant; + Id typeId = makeFloatType(64); + union { double db; unsigned long long ull; } u; + u.db = d; + unsigned long long value = u.ull; + unsigned op1 = value & 0xFFFFFFFF; + unsigned op2 = value >> 32; + + // See if we already made it. Applies only to regular constants, because specialization constants + // must remain distinct for the purpose of applying a SpecId decoration. + if (! specConstant) { + Id existing = findScalarConstant(OpTypeFloat, opcode, typeId, op1, op2); + if (existing) + return existing; + } + + Instruction* c = new Instruction(getUniqueId(), typeId, opcode); + c->addImmediateOperand(op1); + c->addImmediateOperand(op2); + constantsTypesGlobals.push_back(std::unique_ptr(c)); + groupedConstants[OpTypeFloat].push_back(c); + module.mapInstruction(c); + + return c->getResultId(); +} + +#ifdef AMD_EXTENSIONS +Id Builder::makeFloat16Constant(float f16, bool specConstant) +{ + Op opcode = specConstant ? OpSpecConstant : OpConstant; + Id typeId = makeFloatType(16); + + spvutils::HexFloat> fVal(f16); + spvutils::HexFloat> f16Val(0); + fVal.castTo(f16Val, spvutils::kRoundToZero); + + unsigned value = f16Val.value().getAsFloat().get_value(); + + // See if we already made it. Applies only to regular constants, because specialization constants + // must remain distinct for the purpose of applying a SpecId decoration. + if (!specConstant) { + Id existing = findScalarConstant(OpTypeFloat, opcode, typeId, value); + if (existing) + return existing; + } + + Instruction* c = new Instruction(getUniqueId(), typeId, opcode); + c->addImmediateOperand(value); + constantsTypesGlobals.push_back(std::unique_ptr(c)); + groupedConstants[OpTypeFloat].push_back(c); + module.mapInstruction(c); + + return c->getResultId(); +} +#endif + +Id Builder::findCompositeConstant(Op typeClass, const std::vector& comps) const +{ + Instruction* constant = 0; + bool found = false; + for (int i = 0; i < (int)groupedConstants[typeClass].size(); ++i) { + constant = groupedConstants[typeClass][i]; + + // same shape? + if (constant->getNumOperands() != (int)comps.size()) + continue; + + // same contents? + bool mismatch = false; + for (int op = 0; op < constant->getNumOperands(); ++op) { + if (constant->getIdOperand(op) != comps[op]) { + mismatch = true; + break; + } + } + if (! mismatch) { + found = true; + break; + } + } + + return found ? constant->getResultId() : NoResult; +} + +// Comments in header +Id Builder::makeCompositeConstant(Id typeId, const std::vector& members, bool specConstant) +{ + Op opcode = specConstant ? OpSpecConstantComposite : OpConstantComposite; + assert(typeId); + Op typeClass = getTypeClass(typeId); + + switch (typeClass) { + case OpTypeVector: + case OpTypeArray: + case OpTypeStruct: + case OpTypeMatrix: + break; + default: + assert(0); + return makeFloatConstant(0.0); + } + + if (! specConstant) { + Id existing = findCompositeConstant(typeClass, members); + if (existing) + return existing; + } + + Instruction* c = new Instruction(getUniqueId(), typeId, opcode); + for (int op = 0; op < (int)members.size(); ++op) + c->addIdOperand(members[op]); + constantsTypesGlobals.push_back(std::unique_ptr(c)); + groupedConstants[typeClass].push_back(c); + module.mapInstruction(c); + + return c->getResultId(); +} + +Instruction* Builder::addEntryPoint(ExecutionModel model, Function* function, const char* name) +{ + Instruction* entryPoint = new Instruction(OpEntryPoint); + entryPoint->addImmediateOperand(model); + entryPoint->addIdOperand(function->getId()); + entryPoint->addStringOperand(name); + + entryPoints.push_back(std::unique_ptr(entryPoint)); + + return entryPoint; +} + +// Currently relying on the fact that all 'value' of interest are small non-negative values. +void Builder::addExecutionMode(Function* entryPoint, ExecutionMode mode, int value1, int value2, int value3) +{ + Instruction* instr = new Instruction(OpExecutionMode); + instr->addIdOperand(entryPoint->getId()); + instr->addImmediateOperand(mode); + if (value1 >= 0) + instr->addImmediateOperand(value1); + if (value2 >= 0) + instr->addImmediateOperand(value2); + if (value3 >= 0) + instr->addImmediateOperand(value3); + + executionModes.push_back(std::unique_ptr(instr)); +} + +void Builder::addName(Id id, const char* string) +{ + Instruction* name = new Instruction(OpName); + name->addIdOperand(id); + name->addStringOperand(string); + + names.push_back(std::unique_ptr(name)); +} + +void Builder::addMemberName(Id id, int memberNumber, const char* string) +{ + Instruction* name = new Instruction(OpMemberName); + name->addIdOperand(id); + name->addImmediateOperand(memberNumber); + name->addStringOperand(string); + + names.push_back(std::unique_ptr(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(line)); +} + +void Builder::addDecoration(Id id, Decoration decoration, int num) +{ + if (decoration == spv::DecorationMax) + return; + Instruction* dec = new Instruction(OpDecorate); + dec->addIdOperand(id); + dec->addImmediateOperand(decoration); + if (num >= 0) + dec->addImmediateOperand(num); + + decorations.push_back(std::unique_ptr(dec)); +} + +void Builder::addMemberDecoration(Id id, unsigned int member, Decoration decoration, int num) +{ + Instruction* dec = new Instruction(OpMemberDecorate); + dec->addIdOperand(id); + dec->addImmediateOperand(member); + dec->addImmediateOperand(decoration); + if (num >= 0) + dec->addImmediateOperand(num); + + decorations.push_back(std::unique_ptr(dec)); +} + +// Comments in header +Function* Builder::makeEntryPoint(const char* entryPoint) +{ + assert(! entryPointFunction); + + Block* entry; + std::vector params; + std::vector precisions; + + entryPointFunction = makeFunctionEntry(NoPrecision, makeVoidType(), entryPoint, params, precisions, &entry); + + return entryPointFunction; +} + +// Comments in header +Function* Builder::makeFunctionEntry(Decoration precision, Id returnType, const char* name, + const std::vector& paramTypes, const std::vector& precisions, Block **entry) +{ + // Make the function and initial instructions in it + Id typeId = makeFunctionType(returnType, paramTypes); + Id firstParamId = paramTypes.size() == 0 ? 0 : getUniqueIds((int)paramTypes.size()); + Function* function = new Function(getUniqueId(), returnType, typeId, firstParamId, module); + + // Set up the precisions + setPrecision(function->getId(), precision); + for (unsigned p = 0; p < (unsigned)precisions.size(); ++p) + setPrecision(firstParamId + p, precisions[p]); + + // CFG + if (entry) { + *entry = new Block(getUniqueId(), *function); + function->addBlock(*entry); + setBuildPoint(*entry); + } + + if (name) + addName(function->getId(), name); + + functions.push_back(std::unique_ptr(function)); + + return function; +} + +// Comments in header +void Builder::makeReturn(bool implicit, Id retVal) +{ + if (retVal) { + Instruction* inst = new Instruction(NoResult, NoType, OpReturnValue); + inst->addIdOperand(retVal); + buildPoint->addInstruction(std::unique_ptr(inst)); + } else + buildPoint->addInstruction(std::unique_ptr(new Instruction(NoResult, NoType, OpReturn))); + + if (! implicit) + createAndSetNoPredecessorBlock("post-return"); +} + +// Comments in header +void Builder::leaveFunction() +{ + Block* block = buildPoint; + Function& function = buildPoint->getParent(); + assert(block); + + // If our function did not contain a return, add a return void now. + if (! block->isTerminated()) { + if (function.getReturnType() == makeVoidType()) + makeReturn(true); + else { + makeReturn(true, createUndefined(function.getReturnType())); + } + } +} + +// Comments in header +void Builder::makeDiscard() +{ + buildPoint->addInstruction(std::unique_ptr(new Instruction(OpKill))); + createAndSetNoPredecessorBlock("post-discard"); +} + +// Comments in header +Id Builder::createVariable(StorageClass storageClass, Id type, const char* name) +{ + Id pointerType = makePointer(storageClass, type); + Instruction* inst = new Instruction(getUniqueId(), pointerType, OpVariable); + inst->addImmediateOperand(storageClass); + + switch (storageClass) { + case StorageClassFunction: + // Validation rules require the declaration in the entry block + buildPoint->getParent().addLocalVariable(std::unique_ptr(inst)); + break; + + default: + constantsTypesGlobals.push_back(std::unique_ptr(inst)); + module.mapInstruction(inst); + break; + } + + if (name) + addName(inst->getResultId(), name); + + return inst->getResultId(); +} + +// Comments in header +Id Builder::createUndefined(Id type) +{ + Instruction* inst = new Instruction(getUniqueId(), type, OpUndef); + buildPoint->addInstruction(std::unique_ptr(inst)); + return inst->getResultId(); +} + +// Comments in header +void Builder::createStore(Id rValue, Id lValue) +{ + Instruction* store = new Instruction(OpStore); + store->addIdOperand(lValue); + store->addIdOperand(rValue); + buildPoint->addInstruction(std::unique_ptr(store)); +} + +// Comments in header +Id Builder::createLoad(Id lValue) +{ + Instruction* load = new Instruction(getUniqueId(), getDerefTypeId(lValue), OpLoad); + load->addIdOperand(lValue); + buildPoint->addInstruction(std::unique_ptr(load)); + + return load->getResultId(); +} + +// Comments in header +Id Builder::createAccessChain(StorageClass storageClass, Id base, const std::vector& offsets) +{ + // Figure out the final resulting type. + spv::Id typeId = getTypeId(base); + assert(isPointerType(typeId) && offsets.size() > 0); + typeId = getContainedTypeId(typeId); + for (int i = 0; i < (int)offsets.size(); ++i) { + if (isStructType(typeId)) { + assert(isConstantScalar(offsets[i])); + typeId = getContainedTypeId(typeId, getConstantScalar(offsets[i])); + } else + typeId = getContainedTypeId(typeId, offsets[i]); + } + typeId = makePointer(storageClass, typeId); + + // Make the instruction + Instruction* chain = new Instruction(getUniqueId(), typeId, OpAccessChain); + chain->addIdOperand(base); + for (int i = 0; i < (int)offsets.size(); ++i) + chain->addIdOperand(offsets[i]); + buildPoint->addInstruction(std::unique_ptr(chain)); + + return chain->getResultId(); +} + +Id Builder::createArrayLength(Id base, unsigned int member) +{ + spv::Id intType = makeIntType(32); + Instruction* length = new Instruction(getUniqueId(), intType, OpArrayLength); + length->addIdOperand(base); + length->addImmediateOperand(member); + buildPoint->addInstruction(std::unique_ptr(length)); + + return length->getResultId(); +} + +Id Builder::createCompositeExtract(Id composite, Id typeId, unsigned index) +{ + // Generate code for spec constants if in spec constant operation + // generation mode. + if (generatingOpCodeForSpecConst) { + return createSpecConstantOp(OpCompositeExtract, typeId, std::vector(1, composite), std::vector(1, index)); + } + Instruction* extract = new Instruction(getUniqueId(), typeId, OpCompositeExtract); + extract->addIdOperand(composite); + extract->addImmediateOperand(index); + buildPoint->addInstruction(std::unique_ptr(extract)); + + return extract->getResultId(); +} + +Id Builder::createCompositeExtract(Id composite, Id typeId, const std::vector& indexes) +{ + // Generate code for spec constants if in spec constant operation + // generation mode. + if (generatingOpCodeForSpecConst) { + return createSpecConstantOp(OpCompositeExtract, typeId, std::vector(1, composite), indexes); + } + Instruction* extract = new Instruction(getUniqueId(), typeId, OpCompositeExtract); + extract->addIdOperand(composite); + for (int i = 0; i < (int)indexes.size(); ++i) + extract->addImmediateOperand(indexes[i]); + buildPoint->addInstruction(std::unique_ptr(extract)); + + return extract->getResultId(); +} + +Id Builder::createCompositeInsert(Id object, Id composite, Id typeId, unsigned index) +{ + Instruction* insert = new Instruction(getUniqueId(), typeId, OpCompositeInsert); + insert->addIdOperand(object); + insert->addIdOperand(composite); + insert->addImmediateOperand(index); + buildPoint->addInstruction(std::unique_ptr(insert)); + + return insert->getResultId(); +} + +Id Builder::createCompositeInsert(Id object, Id composite, Id typeId, const std::vector& indexes) +{ + Instruction* insert = new Instruction(getUniqueId(), typeId, OpCompositeInsert); + insert->addIdOperand(object); + insert->addIdOperand(composite); + for (int i = 0; i < (int)indexes.size(); ++i) + insert->addImmediateOperand(indexes[i]); + buildPoint->addInstruction(std::unique_ptr(insert)); + + return insert->getResultId(); +} + +Id Builder::createVectorExtractDynamic(Id vector, Id typeId, Id componentIndex) +{ + Instruction* extract = new Instruction(getUniqueId(), typeId, OpVectorExtractDynamic); + extract->addIdOperand(vector); + extract->addIdOperand(componentIndex); + buildPoint->addInstruction(std::unique_ptr(extract)); + + return extract->getResultId(); +} + +Id Builder::createVectorInsertDynamic(Id vector, Id typeId, Id component, Id componentIndex) +{ + Instruction* insert = new Instruction(getUniqueId(), typeId, OpVectorInsertDynamic); + insert->addIdOperand(vector); + insert->addIdOperand(component); + insert->addIdOperand(componentIndex); + buildPoint->addInstruction(std::unique_ptr(insert)); + + return insert->getResultId(); +} + +// An opcode that has no operands, no result id, and no type +void Builder::createNoResultOp(Op opCode) +{ + Instruction* op = new Instruction(opCode); + buildPoint->addInstruction(std::unique_ptr(op)); +} + +// An opcode that has one operand, no result id, and no type +void Builder::createNoResultOp(Op opCode, Id operand) +{ + Instruction* op = new Instruction(opCode); + op->addIdOperand(operand); + buildPoint->addInstruction(std::unique_ptr(op)); +} + +// An opcode that has one operand, no result id, and no type +void Builder::createNoResultOp(Op opCode, const std::vector& operands) +{ + Instruction* op = new Instruction(opCode); + for (auto it = operands.cbegin(); it != operands.cend(); ++it) + op->addIdOperand(*it); + buildPoint->addInstruction(std::unique_ptr(op)); +} + +void Builder::createControlBarrier(Scope execution, Scope memory, MemorySemanticsMask semantics) +{ + Instruction* op = new Instruction(OpControlBarrier); + op->addImmediateOperand(makeUintConstant(execution)); + op->addImmediateOperand(makeUintConstant(memory)); + op->addImmediateOperand(makeUintConstant(semantics)); + buildPoint->addInstruction(std::unique_ptr(op)); +} + +void Builder::createMemoryBarrier(unsigned executionScope, unsigned memorySemantics) +{ + Instruction* op = new Instruction(OpMemoryBarrier); + op->addImmediateOperand(makeUintConstant(executionScope)); + op->addImmediateOperand(makeUintConstant(memorySemantics)); + buildPoint->addInstruction(std::unique_ptr(op)); +} + +// An opcode that has one operands, a result id, and a type +Id Builder::createUnaryOp(Op opCode, Id typeId, Id operand) +{ + // Generate code for spec constants if in spec constant operation + // generation mode. + if (generatingOpCodeForSpecConst) { + return createSpecConstantOp(opCode, typeId, std::vector(1, operand), std::vector()); + } + Instruction* op = new Instruction(getUniqueId(), typeId, opCode); + op->addIdOperand(operand); + buildPoint->addInstruction(std::unique_ptr(op)); + + return op->getResultId(); +} + +Id Builder::createBinOp(Op opCode, Id typeId, Id left, Id right) +{ + // Generate code for spec constants if in spec constant operation + // generation mode. + if (generatingOpCodeForSpecConst) { + std::vector operands(2); + operands[0] = left; operands[1] = right; + return createSpecConstantOp(opCode, typeId, operands, std::vector()); + } + Instruction* op = new Instruction(getUniqueId(), typeId, opCode); + op->addIdOperand(left); + op->addIdOperand(right); + buildPoint->addInstruction(std::unique_ptr(op)); + + return op->getResultId(); +} + +Id Builder::createTriOp(Op opCode, Id typeId, Id op1, Id op2, Id op3) +{ + // Generate code for spec constants if in spec constant operation + // generation mode. + if (generatingOpCodeForSpecConst) { + std::vector operands(3); + operands[0] = op1; + operands[1] = op2; + operands[2] = op3; + return createSpecConstantOp( + opCode, typeId, operands, std::vector()); + } + Instruction* op = new Instruction(getUniqueId(), typeId, opCode); + op->addIdOperand(op1); + op->addIdOperand(op2); + op->addIdOperand(op3); + buildPoint->addInstruction(std::unique_ptr(op)); + + return op->getResultId(); +} + +Id Builder::createOp(Op opCode, Id typeId, const std::vector& operands) +{ + Instruction* op = new Instruction(getUniqueId(), typeId, opCode); + for (auto it = operands.cbegin(); it != operands.cend(); ++it) + op->addIdOperand(*it); + buildPoint->addInstruction(std::unique_ptr(op)); + + return op->getResultId(); +} + +Id Builder::createSpecConstantOp(Op opCode, Id typeId, const std::vector& operands, const std::vector& literals) +{ + Instruction* op = new Instruction(getUniqueId(), typeId, OpSpecConstantOp); + op->addImmediateOperand((unsigned) opCode); + for (auto it = operands.cbegin(); it != operands.cend(); ++it) + op->addIdOperand(*it); + for (auto it = literals.cbegin(); it != literals.cend(); ++it) + op->addImmediateOperand(*it); + module.mapInstruction(op); + constantsTypesGlobals.push_back(std::unique_ptr(op)); + + return op->getResultId(); +} + +Id Builder::createFunctionCall(spv::Function* function, const std::vector& args) +{ + Instruction* op = new Instruction(getUniqueId(), function->getReturnType(), OpFunctionCall); + op->addIdOperand(function->getId()); + for (int a = 0; a < (int)args.size(); ++a) + op->addIdOperand(args[a]); + buildPoint->addInstruction(std::unique_ptr(op)); + + return op->getResultId(); +} + +// Comments in header +Id Builder::createRvalueSwizzle(Decoration precision, Id typeId, Id source, const std::vector& channels) +{ + if (channels.size() == 1) + return setPrecision(createCompositeExtract(source, typeId, channels.front()), precision); + + if (generatingOpCodeForSpecConst) { + std::vector operands(2); + operands[0] = operands[1] = source; + return setPrecision(createSpecConstantOp(OpVectorShuffle, typeId, operands, channels), precision); + } + Instruction* swizzle = new Instruction(getUniqueId(), typeId, OpVectorShuffle); + assert(isVector(source)); + swizzle->addIdOperand(source); + swizzle->addIdOperand(source); + for (int i = 0; i < (int)channels.size(); ++i) + swizzle->addImmediateOperand(channels[i]); + buildPoint->addInstruction(std::unique_ptr(swizzle)); + + return setPrecision(swizzle->getResultId(), precision); +} + +// Comments in header +Id Builder::createLvalueSwizzle(Id typeId, Id target, Id source, const std::vector& channels) +{ + if (channels.size() == 1 && getNumComponents(source) == 1) + return createCompositeInsert(source, target, typeId, channels.front()); + + Instruction* swizzle = new Instruction(getUniqueId(), typeId, OpVectorShuffle); + assert(isVector(target)); + swizzle->addIdOperand(target); + if (accessChain.component != NoResult) + // For dynamic component selection, source does not involve in l-value swizzle + swizzle->addIdOperand(target); + else { + assert(getNumComponents(source) == (int)channels.size()); + assert(isVector(source)); + swizzle->addIdOperand(source); + } + + // Set up an identity shuffle from the base value to the result value + unsigned int components[4]; + int numTargetComponents = getNumComponents(target); + for (int i = 0; i < numTargetComponents; ++i) + components[i] = i; + + // Punch in the l-value swizzle + for (int i = 0; i < (int)channels.size(); ++i) { + if (accessChain.component != NoResult) + components[i] = channels[i]; // Only shuffle the base value + else + components[channels[i]] = numTargetComponents + i; + } + + // finish the instruction with these components selectors + for (int i = 0; i < numTargetComponents; ++i) + swizzle->addImmediateOperand(components[i]); + buildPoint->addInstruction(std::unique_ptr(swizzle)); + + return swizzle->getResultId(); +} + +// Comments in header +void Builder::promoteScalar(Decoration precision, Id& left, Id& right) +{ + int direction = getNumComponents(right) - getNumComponents(left); + + if (direction > 0) + left = smearScalar(precision, left, makeVectorType(getTypeId(left), getNumComponents(right))); + else if (direction < 0) + right = smearScalar(precision, right, makeVectorType(getTypeId(right), getNumComponents(left))); + + return; +} + +// Comments in header +Id Builder::smearScalar(Decoration precision, Id scalar, Id vectorType) +{ + assert(getNumComponents(scalar) == 1); + assert(getTypeId(scalar) == getScalarTypeId(vectorType)); + + int numComponents = getNumTypeComponents(vectorType); + if (numComponents == 1) + return scalar; + + Instruction* smear = nullptr; + if (generatingOpCodeForSpecConst) { + auto members = std::vector(numComponents, scalar); + // Sometime even in spec-constant-op mode, the temporary vector created by + // promoting a scalar might not be a spec constant. This should depend on + // the scalar. + // e.g.: + // const vec2 spec_const_result = a_spec_const_vec2 + a_front_end_const_scalar; + // In such cases, the temporary vector created from a_front_end_const_scalar + // is not a spec constant vector, even though the binary operation node is marked + // as 'specConstant' and we are in spec-constant-op mode. + auto result_id = makeCompositeConstant(vectorType, members, isSpecConstant(scalar)); + smear = module.getInstruction(result_id); + } else { + smear = new Instruction(getUniqueId(), vectorType, OpCompositeConstruct); + for (int c = 0; c < numComponents; ++c) + smear->addIdOperand(scalar); + buildPoint->addInstruction(std::unique_ptr(smear)); + } + + return setPrecision(smear->getResultId(), precision); +} + +// Comments in header +Id Builder::createBuiltinCall(Id resultType, Id builtins, int entryPoint, const std::vector& args) +{ + Instruction* inst = new Instruction(getUniqueId(), resultType, OpExtInst); + inst->addIdOperand(builtins); + inst->addImmediateOperand(entryPoint); + for (int arg = 0; arg < (int)args.size(); ++arg) + inst->addIdOperand(args[arg]); + + buildPoint->addInstruction(std::unique_ptr(inst)); + + return inst->getResultId(); +} + +// Accept all parameters needed to create a texture instruction. +// Create the correct instruction based on the inputs, and make the call. +Id Builder::createTextureCall(Decoration precision, Id resultType, bool sparse, bool fetch, bool proj, bool gather, bool noImplicitLod, const TextureParameters& parameters) +{ + static const int maxTextureArgs = 10; + Id texArgs[maxTextureArgs] = {}; + + // + // Set up the fixed arguments + // + int numArgs = 0; + bool explicitLod = false; + texArgs[numArgs++] = parameters.sampler; + texArgs[numArgs++] = parameters.coords; + if (parameters.Dref != NoResult) + texArgs[numArgs++] = parameters.Dref; + if (parameters.component != NoResult) + texArgs[numArgs++] = parameters.component; + + // + // Set up the optional arguments + // + int optArgNum = numArgs; // track which operand, if it exists, is the mask of optional arguments + ++numArgs; // speculatively make room for the mask operand + ImageOperandsMask mask = ImageOperandsMaskNone; // the mask operand + if (parameters.bias) { + mask = (ImageOperandsMask)(mask | ImageOperandsBiasMask); + texArgs[numArgs++] = parameters.bias; + } + if (parameters.lod) { + mask = (ImageOperandsMask)(mask | ImageOperandsLodMask); + texArgs[numArgs++] = parameters.lod; + explicitLod = true; + } else if (parameters.gradX) { + mask = (ImageOperandsMask)(mask | ImageOperandsGradMask); + texArgs[numArgs++] = parameters.gradX; + texArgs[numArgs++] = parameters.gradY; + explicitLod = true; + } else if (noImplicitLod && ! fetch && ! gather) { + // have to explicitly use lod of 0 if not allowed to have them be implicit, and + // we would otherwise be about to issue an implicit instruction + mask = (ImageOperandsMask)(mask | ImageOperandsLodMask); + texArgs[numArgs++] = makeFloatConstant(0.0); + explicitLod = true; + } + if (parameters.offset) { + if (isConstant(parameters.offset)) + mask = (ImageOperandsMask)(mask | ImageOperandsConstOffsetMask); + else { + addCapability(CapabilityImageGatherExtended); + mask = (ImageOperandsMask)(mask | ImageOperandsOffsetMask); + } + texArgs[numArgs++] = parameters.offset; + } + if (parameters.offsets) { + mask = (ImageOperandsMask)(mask | ImageOperandsConstOffsetsMask); + texArgs[numArgs++] = parameters.offsets; + } + if (parameters.sample) { + mask = (ImageOperandsMask)(mask | ImageOperandsSampleMask); + texArgs[numArgs++] = parameters.sample; + } + if (parameters.lodClamp) { + // capability if this bit is used + addCapability(CapabilityMinLod); + + mask = (ImageOperandsMask)(mask | ImageOperandsMinLodMask); + texArgs[numArgs++] = parameters.lodClamp; + } + if (mask == ImageOperandsMaskNone) + --numArgs; // undo speculative reservation for the mask argument + else + texArgs[optArgNum] = mask; + + // + // Set up the instruction + // + Op opCode = OpNop; // All paths below need to set this + if (fetch) { + if (sparse) + opCode = OpImageSparseFetch; + else + opCode = OpImageFetch; + } else if (gather) { + if (parameters.Dref) + if (sparse) + opCode = OpImageSparseDrefGather; + else + opCode = OpImageDrefGather; + else + if (sparse) + opCode = OpImageSparseGather; + else + opCode = OpImageGather; + } else if (explicitLod) { + if (parameters.Dref) { + if (proj) + if (sparse) + opCode = OpImageSparseSampleProjDrefExplicitLod; + else + opCode = OpImageSampleProjDrefExplicitLod; + else + if (sparse) + opCode = OpImageSparseSampleDrefExplicitLod; + else + opCode = OpImageSampleDrefExplicitLod; + } else { + if (proj) + if (sparse) + opCode = OpImageSparseSampleProjExplicitLod; + else + opCode = OpImageSampleProjExplicitLod; + else + if (sparse) + opCode = OpImageSparseSampleExplicitLod; + else + opCode = OpImageSampleExplicitLod; + } + } else { + if (parameters.Dref) { + if (proj) + if (sparse) + opCode = OpImageSparseSampleProjDrefImplicitLod; + else + opCode = OpImageSampleProjDrefImplicitLod; + else + if (sparse) + opCode = OpImageSparseSampleDrefImplicitLod; + else + opCode = OpImageSampleDrefImplicitLod; + } else { + if (proj) + if (sparse) + opCode = OpImageSparseSampleProjImplicitLod; + else + opCode = OpImageSampleProjImplicitLod; + else + if (sparse) + opCode = OpImageSparseSampleImplicitLod; + else + opCode = OpImageSampleImplicitLod; + } + } + + // See if the result type is expecting a smeared result. + // This happens when a legacy shadow*() call is made, which + // gets a vec4 back instead of a float. + Id smearedType = resultType; + if (! isScalarType(resultType)) { + switch (opCode) { + case OpImageSampleDrefImplicitLod: + case OpImageSampleDrefExplicitLod: + case OpImageSampleProjDrefImplicitLod: + case OpImageSampleProjDrefExplicitLod: + resultType = getScalarTypeId(resultType); + break; + default: + break; + } + } + + Id typeId0 = 0; + Id typeId1 = 0; + + if (sparse) { + typeId0 = resultType; + typeId1 = getDerefTypeId(parameters.texelOut); + resultType = makeStructResultType(typeId0, typeId1); + } + + // Build the SPIR-V instruction + Instruction* textureInst = new Instruction(getUniqueId(), resultType, opCode); + for (int op = 0; op < optArgNum; ++op) + textureInst->addIdOperand(texArgs[op]); + if (optArgNum < numArgs) + textureInst->addImmediateOperand(texArgs[optArgNum]); + for (int op = optArgNum + 1; op < numArgs; ++op) + textureInst->addIdOperand(texArgs[op]); + setPrecision(textureInst->getResultId(), precision); + buildPoint->addInstruction(std::unique_ptr(textureInst)); + + Id resultId = textureInst->getResultId(); + + if (sparse) { + // set capability + addCapability(CapabilitySparseResidency); + + // Decode the return type that was a special structure + createStore(createCompositeExtract(resultId, typeId1, 1), parameters.texelOut); + resultId = createCompositeExtract(resultId, typeId0, 0); + setPrecision(resultId, precision); + } else { + // When a smear is needed, do it, as per what was computed + // above when resultType was changed to a scalar type. + if (resultType != smearedType) + resultId = smearScalar(precision, resultId, smearedType); + } + + return resultId; +} + +// Comments in header +Id Builder::createTextureQueryCall(Op opCode, const TextureParameters& parameters, bool isUnsignedResult) +{ + // All these need a capability + addCapability(CapabilityImageQuery); + + // Figure out the result type + Id resultType = 0; + switch (opCode) { + case OpImageQuerySize: + case OpImageQuerySizeLod: + { + int numComponents = 0; + switch (getTypeDimensionality(getImageType(parameters.sampler))) { + case Dim1D: + case DimBuffer: + numComponents = 1; + break; + case Dim2D: + case DimCube: + case DimRect: + case DimSubpassData: + numComponents = 2; + break; + case Dim3D: + numComponents = 3; + break; + + default: + assert(0); + break; + } + if (isArrayedImageType(getImageType(parameters.sampler))) + ++numComponents; + + Id intType = isUnsignedResult ? makeUintType(32) : makeIntType(32); + if (numComponents == 1) + resultType = intType; + else + resultType = makeVectorType(intType, numComponents); + + break; + } + case OpImageQueryLod: + resultType = makeVectorType(makeFloatType(32), 2); + break; + case OpImageQueryLevels: + case OpImageQuerySamples: + resultType = isUnsignedResult ? makeUintType(32) : makeIntType(32); + break; + default: + assert(0); + break; + } + + Instruction* query = new Instruction(getUniqueId(), resultType, opCode); + query->addIdOperand(parameters.sampler); + if (parameters.coords) + query->addIdOperand(parameters.coords); + if (parameters.lod) + query->addIdOperand(parameters.lod); + buildPoint->addInstruction(std::unique_ptr(query)); + + return query->getResultId(); +} + +// External comments in header. +// Operates recursively to visit the composite's hierarchy. +Id Builder::createCompositeCompare(Decoration precision, Id value1, Id value2, bool equal) +{ + Id boolType = makeBoolType(); + Id valueType = getTypeId(value1); + + Id resultId = NoResult; + + int numConstituents = getNumTypeConstituents(valueType); + + // Scalars and Vectors + + if (isScalarType(valueType) || isVectorType(valueType)) { + assert(valueType == getTypeId(value2)); + // These just need a single comparison, just have + // to figure out what it is. + Op op; + switch (getMostBasicTypeClass(valueType)) { + case OpTypeFloat: + op = equal ? OpFOrdEqual : OpFOrdNotEqual; + break; + case OpTypeInt: + default: + op = equal ? OpIEqual : OpINotEqual; + break; + case OpTypeBool: + op = equal ? OpLogicalEqual : OpLogicalNotEqual; + precision = NoPrecision; + break; + } + + if (isScalarType(valueType)) { + // scalar + resultId = createBinOp(op, boolType, value1, value2); + } else { + // vector + resultId = createBinOp(op, makeVectorType(boolType, numConstituents), value1, value2); + setPrecision(resultId, precision); + // reduce vector compares... + resultId = createUnaryOp(equal ? OpAll : OpAny, boolType, resultId); + } + + return setPrecision(resultId, precision); + } + + // Only structs, arrays, and matrices should be left. + // They share in common the reduction operation across their constituents. + assert(isAggregateType(valueType) || isMatrixType(valueType)); + + // Compare each pair of constituents + for (int constituent = 0; constituent < numConstituents; ++constituent) { + std::vector indexes(1, constituent); + Id constituentType1 = getContainedTypeId(getTypeId(value1), constituent); + Id constituentType2 = getContainedTypeId(getTypeId(value2), constituent); + Id constituent1 = createCompositeExtract(value1, constituentType1, indexes); + Id constituent2 = createCompositeExtract(value2, constituentType2, indexes); + + Id subResultId = createCompositeCompare(precision, constituent1, constituent2, equal); + + if (constituent == 0) + resultId = subResultId; + else + resultId = setPrecision(createBinOp(equal ? OpLogicalAnd : OpLogicalOr, boolType, resultId, subResultId), precision); + } + + return resultId; +} + +// OpCompositeConstruct +Id Builder::createCompositeConstruct(Id typeId, const std::vector& constituents) +{ + assert(isAggregateType(typeId) || (getNumTypeConstituents(typeId) > 1 && getNumTypeConstituents(typeId) == (int)constituents.size())); + + if (generatingOpCodeForSpecConst) { + // Sometime, even in spec-constant-op mode, the constant composite to be + // constructed may not be a specialization constant. + // e.g.: + // const mat2 m2 = mat2(a_spec_const, a_front_end_const, another_front_end_const, third_front_end_const); + // The first column vector should be a spec constant one, as a_spec_const is a spec constant. + // The second column vector should NOT be spec constant, as it does not contain any spec constants. + // To handle such cases, we check the constituents of the constant vector to determine whether this + // vector should be created as a spec constant. + return makeCompositeConstant(typeId, constituents, + std::any_of(constituents.begin(), constituents.end(), + [&](spv::Id id) { return isSpecConstant(id); })); + } + + Instruction* op = new Instruction(getUniqueId(), typeId, OpCompositeConstruct); + for (int c = 0; c < (int)constituents.size(); ++c) + op->addIdOperand(constituents[c]); + buildPoint->addInstruction(std::unique_ptr(op)); + + return op->getResultId(); +} + +// Vector or scalar constructor +Id Builder::createConstructor(Decoration precision, const std::vector& sources, Id resultTypeId) +{ + Id result = NoResult; + unsigned int numTargetComponents = getNumTypeComponents(resultTypeId); + unsigned int targetComponent = 0; + + // Special case: when calling a vector constructor with a single scalar + // argument, smear the scalar + if (sources.size() == 1 && isScalar(sources[0]) && numTargetComponents > 1) + return smearScalar(precision, sources[0], resultTypeId); + + // accumulate the arguments for OpCompositeConstruct + std::vector constituents; + Id scalarTypeId = getScalarTypeId(resultTypeId); + + // lambda to store the result of visiting an argument component + const auto latchResult = [&](Id comp) { + if (numTargetComponents > 1) + constituents.push_back(comp); + else + result = comp; + ++targetComponent; + }; + + // lambda to visit a vector argument's components + const auto accumulateVectorConstituents = [&](Id sourceArg) { + unsigned int sourceSize = getNumComponents(sourceArg); + unsigned int sourcesToUse = sourceSize; + if (sourcesToUse + targetComponent > numTargetComponents) + sourcesToUse = numTargetComponents - targetComponent; + + for (unsigned int s = 0; s < sourcesToUse; ++s) { + std::vector swiz; + swiz.push_back(s); + latchResult(createRvalueSwizzle(precision, scalarTypeId, sourceArg, swiz)); + } + }; + + // lambda to visit a matrix argument's components + const auto accumulateMatrixConstituents = [&](Id sourceArg) { + unsigned int sourceSize = getNumColumns(sourceArg) * getNumRows(sourceArg); + unsigned int sourcesToUse = sourceSize; + if (sourcesToUse + targetComponent > numTargetComponents) + sourcesToUse = numTargetComponents - targetComponent; + + int col = 0; + int row = 0; + for (unsigned int s = 0; s < sourcesToUse; ++s) { + if (row >= getNumRows(sourceArg)) { + row = 0; + col++; + } + std::vector indexes; + indexes.push_back(col); + indexes.push_back(row); + latchResult(createCompositeExtract(sourceArg, scalarTypeId, indexes)); + row++; + } + }; + + // Go through the source arguments, each one could have either + // a single or multiple components to contribute. + for (unsigned int i = 0; i < sources.size(); ++i) { + if (isScalar(sources[i])) + latchResult(sources[i]); + else if (isVector(sources[i])) + accumulateVectorConstituents(sources[i]); + else if (isMatrix(sources[i])) + accumulateMatrixConstituents(sources[i]); + else + assert(0); + + if (targetComponent >= numTargetComponents) + break; + } + + // If the result is a vector, make it from the gathered constituents. + if (constituents.size() > 0) + result = createCompositeConstruct(resultTypeId, constituents); + + return setPrecision(result, precision); +} + +// Comments in header +Id Builder::createMatrixConstructor(Decoration precision, const std::vector& sources, Id resultTypeId) +{ + Id componentTypeId = getScalarTypeId(resultTypeId); + int numCols = getTypeNumColumns(resultTypeId); + int numRows = getTypeNumRows(resultTypeId); + + Instruction* instr = module.getInstruction(componentTypeId); + Id bitCount = instr->getIdOperand(0); + + // Will use a two step process + // 1. make a compile-time 2D array of values + // 2. construct a matrix from that array + + // Step 1. + + // initialize the array to the identity matrix + Id ids[maxMatrixSize][maxMatrixSize]; + Id one = (bitCount == 64 ? makeDoubleConstant(1.0) : makeFloatConstant(1.0)); + Id zero = (bitCount == 64 ? makeDoubleConstant(0.0) : makeFloatConstant(0.0)); + for (int col = 0; col < 4; ++col) { + for (int row = 0; row < 4; ++row) { + if (col == row) + ids[col][row] = one; + else + ids[col][row] = zero; + } + } + + // modify components as dictated by the arguments + if (sources.size() == 1 && isScalar(sources[0])) { + // a single scalar; resets the diagonals + for (int col = 0; col < 4; ++col) + ids[col][col] = sources[0]; + } else if (isMatrix(sources[0])) { + // constructing from another matrix; copy over the parts that exist in both the argument and constructee + Id matrix = sources[0]; + int minCols = std::min(numCols, getNumColumns(matrix)); + int minRows = std::min(numRows, getNumRows(matrix)); + for (int col = 0; col < minCols; ++col) { + std::vector indexes; + indexes.push_back(col); + for (int row = 0; row < minRows; ++row) { + indexes.push_back(row); + ids[col][row] = createCompositeExtract(matrix, componentTypeId, indexes); + indexes.pop_back(); + setPrecision(ids[col][row], precision); + } + } + } else { + // fill in the matrix in column-major order with whatever argument components are available + int row = 0; + int col = 0; + + for (int arg = 0; arg < (int)sources.size(); ++arg) { + Id argComp = sources[arg]; + for (int comp = 0; comp < getNumComponents(sources[arg]); ++comp) { + if (getNumComponents(sources[arg]) > 1) { + argComp = createCompositeExtract(sources[arg], componentTypeId, comp); + setPrecision(argComp, precision); + } + ids[col][row++] = argComp; + if (row == numRows) { + row = 0; + col++; + } + } + } + } + + // Step 2: Construct a matrix from that array. + // First make the column vectors, then make the matrix. + + // make the column vectors + Id columnTypeId = getContainedTypeId(resultTypeId); + std::vector matrixColumns; + for (int col = 0; col < numCols; ++col) { + std::vector vectorComponents; + for (int row = 0; row < numRows; ++row) + vectorComponents.push_back(ids[col][row]); + Id column = createCompositeConstruct(columnTypeId, vectorComponents); + setPrecision(column, precision); + matrixColumns.push_back(column); + } + + // make the matrix + return setPrecision(createCompositeConstruct(resultTypeId, matrixColumns), precision); +} + +// Comments in header +Builder::If::If(Id cond, Builder& gb) : + builder(gb), + condition(cond), + elseBlock(0) +{ + function = &builder.getBuildPoint()->getParent(); + + // make the blocks, but only put the then-block into the function, + // the else-block and merge-block will be added later, in order, after + // earlier code is emitted + thenBlock = new Block(builder.getUniqueId(), *function); + mergeBlock = new Block(builder.getUniqueId(), *function); + + // Save the current block, so that we can add in the flow control split when + // makeEndIf is called. + headerBlock = builder.getBuildPoint(); + + function->addBlock(thenBlock); + builder.setBuildPoint(thenBlock); +} + +// Comments in header +void Builder::If::makeBeginElse() +{ + // Close out the "then" by having it jump to the mergeBlock + builder.createBranch(mergeBlock); + + // Make the first else block and add it to the function + elseBlock = new Block(builder.getUniqueId(), *function); + function->addBlock(elseBlock); + + // Start building the else block + builder.setBuildPoint(elseBlock); +} + +// Comments in header +void Builder::If::makeEndIf() +{ + // jump to the merge block + builder.createBranch(mergeBlock); + + // Go back to the headerBlock and make the flow control split + builder.setBuildPoint(headerBlock); + builder.createSelectionMerge(mergeBlock, SelectionControlMaskNone); + if (elseBlock) + builder.createConditionalBranch(condition, thenBlock, elseBlock); + else + builder.createConditionalBranch(condition, thenBlock, mergeBlock); + + // add the merge block to the function + function->addBlock(mergeBlock); + builder.setBuildPoint(mergeBlock); +} + +// Comments in header +void Builder::makeSwitch(Id selector, int numSegments, const std::vector& caseValues, + const std::vector& valueIndexToSegment, int defaultSegment, + std::vector& segmentBlocks) +{ + Function& function = buildPoint->getParent(); + + // make all the blocks + for (int s = 0; s < numSegments; ++s) + segmentBlocks.push_back(new Block(getUniqueId(), function)); + + Block* mergeBlock = new Block(getUniqueId(), function); + + // make and insert the switch's selection-merge instruction + createSelectionMerge(mergeBlock, SelectionControlMaskNone); + + // make the switch instruction + Instruction* switchInst = new Instruction(NoResult, NoType, OpSwitch); + switchInst->addIdOperand(selector); + auto defaultOrMerge = (defaultSegment >= 0) ? segmentBlocks[defaultSegment] : mergeBlock; + switchInst->addIdOperand(defaultOrMerge->getId()); + defaultOrMerge->addPredecessor(buildPoint); + for (int i = 0; i < (int)caseValues.size(); ++i) { + switchInst->addImmediateOperand(caseValues[i]); + switchInst->addIdOperand(segmentBlocks[valueIndexToSegment[i]]->getId()); + segmentBlocks[valueIndexToSegment[i]]->addPredecessor(buildPoint); + } + buildPoint->addInstruction(std::unique_ptr(switchInst)); + + // push the merge block + switchMerges.push(mergeBlock); +} + +// Comments in header +void Builder::addSwitchBreak() +{ + // branch to the top of the merge block stack + createBranch(switchMerges.top()); + createAndSetNoPredecessorBlock("post-switch-break"); +} + +// Comments in header +void Builder::nextSwitchSegment(std::vector& segmentBlock, int nextSegment) +{ + int lastSegment = nextSegment - 1; + if (lastSegment >= 0) { + // Close out previous segment by jumping, if necessary, to next segment + if (! buildPoint->isTerminated()) + createBranch(segmentBlock[nextSegment]); + } + Block* block = segmentBlock[nextSegment]; + block->getParent().addBlock(block); + setBuildPoint(block); +} + +// Comments in header +void Builder::endSwitch(std::vector& /*segmentBlock*/) +{ + // Close out previous segment by jumping, if necessary, to next segment + if (! buildPoint->isTerminated()) + addSwitchBreak(); + + switchMerges.top()->getParent().addBlock(switchMerges.top()); + setBuildPoint(switchMerges.top()); + + switchMerges.pop(); +} + +Block& Builder::makeNewBlock() +{ + Function& function = buildPoint->getParent(); + auto block = new Block(getUniqueId(), function); + function.addBlock(block); + return *block; +} + +Builder::LoopBlocks& Builder::makeNewLoop() +{ + // This verbosity is needed to simultaneously get the same behavior + // everywhere (id's in the same order), have a syntax that works + // across lots of versions of C++, have no warnings from pedantic + // compilation modes, and leave the rest of the code alone. + Block& head = makeNewBlock(); + Block& body = makeNewBlock(); + Block& merge = makeNewBlock(); + Block& continue_target = makeNewBlock(); + LoopBlocks blocks(head, body, merge, continue_target); + loops.push(blocks); + return loops.top(); +} + +void Builder::createLoopContinue() +{ + createBranch(&loops.top().continue_target); + // Set up a block for dead code. + createAndSetNoPredecessorBlock("post-loop-continue"); +} + +void Builder::createLoopExit() +{ + createBranch(&loops.top().merge); + // Set up a block for dead code. + createAndSetNoPredecessorBlock("post-loop-break"); +} + +void Builder::closeLoop() +{ + loops.pop(); +} + +void Builder::clearAccessChain() +{ + accessChain.base = NoResult; + accessChain.indexChain.clear(); + accessChain.instr = NoResult; + accessChain.swizzle.clear(); + accessChain.component = NoResult; + accessChain.preSwizzleBaseType = NoType; + accessChain.isRValue = false; +} + +// Comments in header +void Builder::accessChainPushSwizzle(std::vector& swizzle, Id preSwizzleBaseType) +{ + // swizzles can be stacked in GLSL, but simplified to a single + // one here; the base type doesn't change + if (accessChain.preSwizzleBaseType == NoType) + accessChain.preSwizzleBaseType = preSwizzleBaseType; + + // if needed, propagate the swizzle for the current access chain + if (accessChain.swizzle.size()) { + std::vector oldSwizzle = accessChain.swizzle; + accessChain.swizzle.resize(0); + for (unsigned int i = 0; i < swizzle.size(); ++i) { + assert(swizzle[i] < oldSwizzle.size()); + accessChain.swizzle.push_back(oldSwizzle[swizzle[i]]); + } + } else + accessChain.swizzle = swizzle; + + // determine if we need to track this swizzle anymore + simplifyAccessChainSwizzle(); +} + +// Comments in header +void Builder::accessChainStore(Id rvalue) +{ + assert(accessChain.isRValue == false); + + transferAccessChainSwizzle(true); + Id base = collapseAccessChain(); + + // If swizzle still exists, it is out-of-order or not full, we must load the target vector, + // extract and insert elements to perform writeMask and/or swizzle. + Id source = NoResult; + if (accessChain.swizzle.size()) { + Id tempBaseId = createLoad(base); + source = createLvalueSwizzle(getTypeId(tempBaseId), tempBaseId, rvalue, accessChain.swizzle); + } + + // dynamic component selection + if (accessChain.component != NoResult) { + Id tempBaseId = (source == NoResult) ? createLoad(base) : source; + source = createVectorInsertDynamic(tempBaseId, getTypeId(tempBaseId), rvalue, accessChain.component); + } + + if (source == NoResult) + source = rvalue; + + createStore(source, base); +} + +// Comments in header +Id Builder::accessChainLoad(Decoration precision, Id resultType) +{ + Id id; + + if (accessChain.isRValue) { + // transfer access chain, but keep it static, so we can stay in registers + transferAccessChainSwizzle(false); + if (accessChain.indexChain.size() > 0) { + Id swizzleBase = accessChain.preSwizzleBaseType != NoType ? accessChain.preSwizzleBaseType : resultType; + + // if all the accesses are constants, we can use OpCompositeExtract + std::vector indexes; + bool constant = true; + for (int i = 0; i < (int)accessChain.indexChain.size(); ++i) { + if (isConstantScalar(accessChain.indexChain[i])) + indexes.push_back(getConstantScalar(accessChain.indexChain[i])); + else { + constant = false; + break; + } + } + + if (constant) + id = createCompositeExtract(accessChain.base, swizzleBase, indexes); + else { + // make a new function variable for this r-value + Id lValue = createVariable(StorageClassFunction, getTypeId(accessChain.base), "indexable"); + + // store into it + createStore(accessChain.base, lValue); + + // move base to the new variable + accessChain.base = lValue; + accessChain.isRValue = false; + + // load through the access chain + id = createLoad(collapseAccessChain()); + } + setPrecision(id, precision); + } else + id = accessChain.base; // no precision, it was set when this was defined + } else { + transferAccessChainSwizzle(true); + // load through the access chain + id = createLoad(collapseAccessChain()); + setPrecision(id, precision); + } + + // Done, unless there are swizzles to do + if (accessChain.swizzle.size() == 0 && accessChain.component == NoResult) + return id; + + // Do remaining swizzling + // First, static swizzling + if (accessChain.swizzle.size()) { + // static swizzle + Id swizzledType = getScalarTypeId(getTypeId(id)); + if (accessChain.swizzle.size() > 1) + swizzledType = makeVectorType(swizzledType, (int)accessChain.swizzle.size()); + id = createRvalueSwizzle(precision, swizzledType, id, accessChain.swizzle); + } + + // dynamic single-component selection + if (accessChain.component != NoResult) + id = setPrecision(createVectorExtractDynamic(id, resultType, accessChain.component), precision); + + return id; +} + +Id Builder::accessChainGetLValue() +{ + assert(accessChain.isRValue == false); + + transferAccessChainSwizzle(true); + Id lvalue = collapseAccessChain(); + + // If swizzle exists, it is out-of-order or not full, we must load the target vector, + // extract and insert elements to perform writeMask and/or swizzle. This does not + // go with getting a direct l-value pointer. + assert(accessChain.swizzle.size() == 0); + assert(accessChain.component == NoResult); + + return lvalue; +} + +// comment in header +Id Builder::accessChainGetInferredType() +{ + // anything to operate on? + if (accessChain.base == NoResult) + return NoType; + Id type = getTypeId(accessChain.base); + + // do initial dereference + if (! accessChain.isRValue) + type = getContainedTypeId(type); + + // dereference each index + for (auto it = accessChain.indexChain.cbegin(); it != accessChain.indexChain.cend(); ++it) { + if (isStructType(type)) + type = getContainedTypeId(type, getConstantScalar(*it)); + else + type = getContainedTypeId(type); + } + + // dereference swizzle + if (accessChain.swizzle.size() == 1) + type = getContainedTypeId(type); + else if (accessChain.swizzle.size() > 1) + type = makeVectorType(getContainedTypeId(type), (int)accessChain.swizzle.size()); + + // dereference component selection + if (accessChain.component) + type = getContainedTypeId(type); + + return type; +} + +// comment in header +void Builder::eliminateDeadDecorations() { + std::unordered_set reachable_blocks; + std::unordered_set unreachable_definitions; + // Collect IDs defined in unreachable blocks. For each function, label the + // reachable blocks first. Then for each unreachable block, collect the + // result IDs of the instructions in it. + for (std::vector::const_iterator fi = module.getFunctions().cbegin(); + fi != module.getFunctions().cend(); fi++) { + Function* f = *fi; + Block* entry = f->getEntryBlock(); + inReadableOrder(entry, [&reachable_blocks](const Block* b) { + reachable_blocks.insert(b); + }); + for (std::vector::const_iterator bi = f->getBlocks().cbegin(); + bi != f->getBlocks().cend(); bi++) { + Block* b = *bi; + if (!reachable_blocks.count(b)) { + for (std::vector >::const_iterator + ii = b->getInstructions().cbegin(); + ii != b->getInstructions().cend(); ii++) { + Instruction* i = ii->get(); + unreachable_definitions.insert(i->getResultId()); + } + } + } + } + decorations.erase(std::remove_if(decorations.begin(), decorations.end(), + [&unreachable_definitions](std::unique_ptr& I) -> bool { + Instruction* inst = I.get(); + Id decoration_id = inst->getIdOperand(0); + return unreachable_definitions.count(decoration_id) != 0; + }), + decorations.end()); +} + +void Builder::dump(std::vector& out) const +{ + // Header, before first instructions: + out.push_back(MagicNumber); + out.push_back(Version); + out.push_back(builderNumber); + out.push_back(uniqueId + 1); + out.push_back(0); + + // Capabilities + for (auto it = capabilities.cbegin(); it != capabilities.cend(); ++it) { + Instruction capInst(0, 0, OpCapability); + capInst.addImmediateOperand(*it); + capInst.dump(out); + } + + for (auto it = extensions.cbegin(); it != extensions.cend(); ++it) { + Instruction extInst(0, 0, OpExtension); + extInst.addStringOperand(it->c_str()); + extInst.dump(out); + } + + dumpInstructions(out, imports); + Instruction memInst(0, 0, OpMemoryModel); + memInst.addImmediateOperand(addressModel); + memInst.addImmediateOperand(memoryModel); + memInst.dump(out); + + // Instructions saved up while building: + dumpInstructions(out, entryPoints); + dumpInstructions(out, executionModes); + + // Debug instructions + if (source != SourceLanguageUnknown) { + Instruction sourceInst(0, 0, OpSource); + sourceInst.addImmediateOperand(source); + sourceInst.addImmediateOperand(sourceVersion); + sourceInst.dump(out); + } + for (int e = 0; e < (int)sourceExtensions.size(); ++e) { + Instruction sourceExtInst(0, 0, OpSourceExtension); + sourceExtInst.addStringOperand(sourceExtensions[e]); + sourceExtInst.dump(out); + } + dumpInstructions(out, names); + dumpInstructions(out, lines); + + // Annotation instructions + dumpInstructions(out, decorations); + + dumpInstructions(out, constantsTypesGlobals); + dumpInstructions(out, externals); + + // The functions + module.dump(out); +} + +// +// Protected methods. +// + +// Turn the described access chain in 'accessChain' into an instruction +// computing its address. This *cannot* include complex swizzles, which must +// be handled after this is called, but it does include swizzles that select +// an individual element, as a single address of a scalar type can be +// computed by an OpAccessChain instruction. +Id Builder::collapseAccessChain() +{ + assert(accessChain.isRValue == false); + + if (accessChain.indexChain.size() > 0) { + if (accessChain.instr == 0) { + StorageClass storageClass = (StorageClass)module.getStorageClass(getTypeId(accessChain.base)); + accessChain.instr = createAccessChain(storageClass, accessChain.base, accessChain.indexChain); + } + + return accessChain.instr; + } else + return accessChain.base; + + // note that non-trivial swizzling is left pending... +} + +// clear out swizzle if it is redundant, that is reselecting the same components +// that would be present without the swizzle. +void Builder::simplifyAccessChainSwizzle() +{ + // If the swizzle has fewer components than the vector, it is subsetting, and must stay + // to preserve that fact. + if (getNumTypeComponents(accessChain.preSwizzleBaseType) > (int)accessChain.swizzle.size()) + return; + + // if components are out of order, it is a swizzle + for (unsigned int i = 0; i < accessChain.swizzle.size(); ++i) { + if (i != accessChain.swizzle[i]) + return; + } + + // otherwise, there is no need to track this swizzle + accessChain.swizzle.clear(); + if (accessChain.component == NoResult) + accessChain.preSwizzleBaseType = NoType; +} + +// To the extent any swizzling can become part of the chain +// of accesses instead of a post operation, make it so. +// If 'dynamic' is true, include transferring a non-static component index, +// otherwise, only transfer static indexes. +// +// Also, Boolean vectors are likely to be special. While +// for external storage, they should only be integer types, +// function-local bool vectors could use sub-word indexing, +// so keep that as a separate Insert/Extract on a loaded vector. +void Builder::transferAccessChainSwizzle(bool dynamic) +{ + // too complex? + if (accessChain.swizzle.size() > 1) + return; + + // non existent? + if (accessChain.swizzle.size() == 0 && accessChain.component == NoResult) + return; + + // single component... + + // skip doing it for Boolean vectors + if (isBoolType(getContainedTypeId(accessChain.preSwizzleBaseType))) + return; + + if (accessChain.swizzle.size() == 1) { + // handle static component + accessChain.indexChain.push_back(makeUintConstant(accessChain.swizzle.front())); + accessChain.swizzle.clear(); + // note, the only valid remaining dynamic access would be to this one + // component, so don't bother even looking at accessChain.component + accessChain.preSwizzleBaseType = NoType; + accessChain.component = NoResult; + } else if (dynamic && accessChain.component != NoResult) { + // handle dynamic component + accessChain.indexChain.push_back(accessChain.component); + accessChain.preSwizzleBaseType = NoType; + accessChain.component = NoResult; + } +} + +// Utility method for creating a new block and setting the insert point to +// be in it. This is useful for flow-control operations that need a "dummy" +// block proceeding them (e.g. instructions after a discard, etc). +void Builder::createAndSetNoPredecessorBlock(const char* /*name*/) +{ + Block* block = new Block(getUniqueId(), buildPoint->getParent()); + block->setUnreachable(); + buildPoint->getParent().addBlock(block); + setBuildPoint(block); + + // if (name) + // addName(block->getId(), name); +} + +// Comments in header +void Builder::createBranch(Block* block) +{ + Instruction* branch = new Instruction(OpBranch); + branch->addIdOperand(block->getId()); + buildPoint->addInstruction(std::unique_ptr(branch)); + block->addPredecessor(buildPoint); +} + +void Builder::createSelectionMerge(Block* mergeBlock, unsigned int control) +{ + Instruction* merge = new Instruction(OpSelectionMerge); + merge->addIdOperand(mergeBlock->getId()); + merge->addImmediateOperand(control); + buildPoint->addInstruction(std::unique_ptr(merge)); +} + +void Builder::createLoopMerge(Block* mergeBlock, Block* continueBlock, unsigned int control) +{ + Instruction* merge = new Instruction(OpLoopMerge); + merge->addIdOperand(mergeBlock->getId()); + merge->addIdOperand(continueBlock->getId()); + merge->addImmediateOperand(control); + buildPoint->addInstruction(std::unique_ptr(merge)); +} + +void Builder::createConditionalBranch(Id condition, Block* thenBlock, Block* elseBlock) +{ + Instruction* branch = new Instruction(OpBranchConditional); + branch->addIdOperand(condition); + branch->addIdOperand(thenBlock->getId()); + branch->addIdOperand(elseBlock->getId()); + buildPoint->addInstruction(std::unique_ptr(branch)); + thenBlock->addPredecessor(buildPoint); + elseBlock->addPredecessor(buildPoint); +} + +void Builder::dumpInstructions(std::vector& out, const std::vector >& instructions) const +{ + for (int i = 0; i < (int)instructions.size(); ++i) { + instructions[i]->dump(out); + } +} + +}; // end spv namespace diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/SpvBuilder.h b/3rdparty/bgfx/3rdparty/glslang/SPIRV/SpvBuilder.h new file mode 100755 index 0000000..204d3e7 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/SpvBuilder.h @@ -0,0 +1,598 @@ +// +// Copyright (C) 2014-2015 LunarG, Inc. +// Copyright (C) 2015-2016 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. + +// +// "Builder" is an interface to fully build SPIR-V IR. Allocate one of +// these to build (a thread safe) internal SPIR-V representation (IR), +// and then dump it as a binary stream according to the SPIR-V specification. +// +// A Builder has a 1:1 relationship with a SPIR-V module. +// + +#pragma once +#ifndef SpvBuilder_H +#define SpvBuilder_H + +#include "Logger.h" +#include "spirv.hpp" +#include "spvIR.h" + +#include +#include +#include +#include +#include +#include + +namespace spv { + +class Builder { +public: + Builder(unsigned int userNumber, SpvBuildLogger* logger); + virtual ~Builder(); + + static const int maxMatrixSize = 4; + + void setSource(spv::SourceLanguage lang, int version) + { + source = lang; + sourceVersion = version; + } + void addSourceExtension(const char* ext) { sourceExtensions.push_back(ext); } + void addExtension(const char* ext) { extensions.insert(ext); } + Id import(const char*); + void setMemoryModel(spv::AddressingModel addr, spv::MemoryModel mem) + { + addressModel = addr; + memoryModel = mem; + } + + void addCapability(spv::Capability cap) { capabilities.insert(cap); } + + // To get a new for anything needing a new one. + Id getUniqueId() { return ++uniqueId; } + + // To get a set of new s, e.g., for a set of function parameters + Id getUniqueIds(int numIds) + { + Id id = uniqueId + 1; + uniqueId += numIds; + return id; + } + + // For creating new types (will return old type if the requested one was already made). + Id makeVoidType(); + Id makeBoolType(); + Id makePointer(StorageClass, Id type); + Id makeIntegerType(int width, bool hasSign); // generic + Id makeIntType(int width) { return makeIntegerType(width, true); } + Id makeUintType(int width) { return makeIntegerType(width, false); } + Id makeFloatType(int width); + Id makeStructType(const std::vector& members, const char*); + Id makeStructResultType(Id type0, Id type1); + Id makeVectorType(Id component, int size); + Id makeMatrixType(Id component, int cols, int rows); + Id makeArrayType(Id element, Id sizeId, int stride); // 0 stride means no stride decoration + Id makeRuntimeArray(Id element); + Id makeFunctionType(Id returnType, const std::vector& paramTypes); + Id makeImageType(Id sampledType, Dim, bool depth, bool arrayed, bool ms, unsigned sampled, ImageFormat format); + Id makeSamplerType(); + Id makeSampledImageType(Id imageType); + + // For querying about types. + Id getTypeId(Id resultId) const { return module.getTypeId(resultId); } + Id getDerefTypeId(Id resultId) const; + Op getOpCode(Id id) const { return module.getInstruction(id)->getOpCode(); } + Op getTypeClass(Id typeId) const { return getOpCode(typeId); } + Op getMostBasicTypeClass(Id typeId) const; + int getNumComponents(Id resultId) const { return getNumTypeComponents(getTypeId(resultId)); } + int getNumTypeConstituents(Id typeId) const; + int getNumTypeComponents(Id typeId) const { return getNumTypeConstituents(typeId); } + Id getScalarTypeId(Id typeId) const; + Id getContainedTypeId(Id typeId) const; + Id getContainedTypeId(Id typeId, int) const; + StorageClass getTypeStorageClass(Id typeId) const { return module.getStorageClass(typeId); } + ImageFormat getImageTypeFormat(Id typeId) const { return (ImageFormat)module.getInstruction(typeId)->getImmediateOperand(6); } + + bool isPointer(Id resultId) const { return isPointerType(getTypeId(resultId)); } + bool isScalar(Id resultId) const { return isScalarType(getTypeId(resultId)); } + bool isVector(Id resultId) const { return isVectorType(getTypeId(resultId)); } + bool isMatrix(Id resultId) const { return isMatrixType(getTypeId(resultId)); } + bool isAggregate(Id resultId) const { return isAggregateType(getTypeId(resultId)); } + 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 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; } + bool isMatrixType(Id typeId) const { return getTypeClass(typeId) == OpTypeMatrix; } + bool isStructType(Id typeId) const { return getTypeClass(typeId) == OpTypeStruct; } + bool isArrayType(Id typeId) const { return getTypeClass(typeId) == OpTypeArray; } + bool isAggregateType(Id typeId) const { return isArrayType(typeId) || isStructType(typeId); } + bool isImageType(Id typeId) const { return getTypeClass(typeId) == OpTypeImage; } + bool isSamplerType(Id typeId) const { return getTypeClass(typeId) == OpTypeSampler; } + bool isSampledImageType(Id typeId) const { return getTypeClass(typeId) == OpTypeSampledImage; } + + bool isConstantOpCode(Op opcode) const; + bool isSpecConstantOpCode(Op opcode) const; + bool isConstant(Id resultId) const { return isConstantOpCode(getOpCode(resultId)); } + bool isConstantScalar(Id resultId) const { return getOpCode(resultId) == OpConstant; } + bool isSpecConstant(Id resultId) const { return isSpecConstantOpCode(getOpCode(resultId)); } + unsigned int getConstantScalar(Id resultId) const { return module.getInstruction(resultId)->getImmediateOperand(0); } + StorageClass getStorageClass(Id resultId) const { return getTypeStorageClass(getTypeId(resultId)); } + + int getTypeNumColumns(Id typeId) const + { + assert(isMatrixType(typeId)); + return getNumTypeConstituents(typeId); + } + int getNumColumns(Id resultId) const { return getTypeNumColumns(getTypeId(resultId)); } + int getTypeNumRows(Id typeId) const + { + assert(isMatrixType(typeId)); + return getNumTypeComponents(getContainedTypeId(typeId)); + } + int getNumRows(Id resultId) const { return getTypeNumRows(getTypeId(resultId)); } + + Dim getTypeDimensionality(Id typeId) const + { + assert(isImageType(typeId)); + return (Dim)module.getInstruction(typeId)->getImmediateOperand(1); + } + Id getImageType(Id resultId) const + { + Id typeId = getTypeId(resultId); + assert(isImageType(typeId) || isSampledImageType(typeId)); + return isSampledImageType(typeId) ? module.getInstruction(typeId)->getIdOperand(0) : typeId; + } + bool isArrayedImageType(Id typeId) const + { + assert(isImageType(typeId)); + return module.getInstruction(typeId)->getImmediateOperand(3) != 0; + } + + // For making new constants (will return old constant if the requested one was already made). + Id makeBoolConstant(bool b, bool specConstant = false); + Id makeIntConstant(int i, bool specConstant = false) { return makeIntConstant(makeIntType(32), (unsigned)i, specConstant); } + 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); } + Id makeFloatConstant(float f, bool specConstant = false); + Id makeDoubleConstant(double d, bool specConstant = false); +#ifdef AMD_EXTENSIONS + Id makeFloat16Constant(float f16, bool specConstant = false); +#endif + + // Turn the array of constants into a proper spv constant of the requested type. + Id makeCompositeConstant(Id type, const std::vector& comps, bool specConst = false); + + // Methods for adding information outside the CFG. + Instruction* addEntryPoint(ExecutionModel, Function*, const char* name); + 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); + + // At the end of what block do the next create*() instructions go? + void setBuildPoint(Block* bp) { buildPoint = bp; } + Block* getBuildPoint() const { return buildPoint; } + + // Make the entry-point function. The returned pointer is only valid + // for the lifetime of this builder. + Function* makeEntryPoint(const char*); + + // Make a shader-style function, and create its entry block if entry is non-zero. + // 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& paramTypes, + const std::vector& 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. + void makeReturn(bool implicit, Id retVal = 0); + + // Generate all the code needed to finish up a function. + void leaveFunction(); + + // Create a discard. + void makeDiscard(); + + // Create a global or function local or IO variable. + Id createVariable(StorageClass, Id type, const char* name = 0); + + // Create an intermediate with an undefined value. + Id createUndefined(Id type); + + // Store into an Id and return the l-value + void createStore(Id rValue, Id lValue); + + // Load from an Id and return it + Id createLoad(Id lValue); + + // Create an OpAccessChain instruction + Id createAccessChain(StorageClass, Id base, const std::vector& offsets); + + // Create an OpArrayLength instruction + Id createArrayLength(Id base, unsigned int member); + + // Create an OpCompositeExtract instruction + Id createCompositeExtract(Id composite, Id typeId, unsigned index); + Id createCompositeExtract(Id composite, Id typeId, const std::vector& indexes); + Id createCompositeInsert(Id object, Id composite, Id typeId, unsigned index); + Id createCompositeInsert(Id object, Id composite, Id typeId, const std::vector& indexes); + + Id createVectorExtractDynamic(Id vector, Id typeId, Id componentIndex); + Id createVectorInsertDynamic(Id vector, Id typeId, Id component, Id componentIndex); + + void createNoResultOp(Op); + void createNoResultOp(Op, Id operand); + void createNoResultOp(Op, const std::vector& operands); + void createControlBarrier(Scope execution, Scope memory, MemorySemanticsMask); + void createMemoryBarrier(unsigned executionScope, unsigned memorySemantics); + Id createUnaryOp(Op, Id typeId, Id operand); + Id createBinOp(Op, Id typeId, Id operand1, Id operand2); + Id createTriOp(Op, Id typeId, Id operand1, Id operand2, Id operand3); + Id createOp(Op, Id typeId, const std::vector& operands); + Id createFunctionCall(spv::Function*, const std::vector&); + Id createSpecConstantOp(Op, Id typeId, const std::vector& operands, const std::vector& literals); + + // Take an rvalue (source) and a set of channels to extract from it to + // make a new rvalue, which is returned. + Id createRvalueSwizzle(Decoration precision, Id typeId, Id source, const std::vector& channels); + + // Take a copy of an lvalue (target) and a source of components, and set the + // source components into the lvalue where the 'channels' say to put them. + // An updated version of the target is returned. + // (No true lvalue or stores are used.) + Id createLvalueSwizzle(Id typeId, Id target, Id source, const std::vector& channels); + + // If both the id and precision are valid, the id + // gets tagged with the requested precision. + // The passed in id is always the returned id, to simplify use patterns. + Id setPrecision(Id id, Decoration precision) + { + if (precision != NoPrecision && id != NoResult) + addDecoration(id, precision); + + return id; + } + + // Can smear a scalar to a vector for the following forms: + // - promoteScalar(scalar, vector) // smear scalar to width of vector + // - promoteScalar(vector, scalar) // smear scalar to width of vector + // - promoteScalar(pointer, scalar) // smear scalar to width of what pointer points to + // - promoteScalar(scalar, scalar) // do nothing + // Other forms are not allowed. + // + // Generally, the type of 'scalar' does not need to be the same type as the components in 'vector'. + // The type of the created vector is a vector of components of the same type as the scalar. + // + // Note: One of the arguments will change, with the result coming back that way rather than + // through the return value. + void promoteScalar(Decoration precision, Id& left, Id& right); + + // Make a value by smearing the scalar to fill the type. + // vectorType should be the correct type for making a vector of scalarVal. + // (No conversions are done.) + Id smearScalar(Decoration precision, Id scalarVal, Id vectorType); + + // Create a call to a built-in function. + Id createBuiltinCall(Id resultType, Id builtins, int entryPoint, const std::vector& args); + + // List of parameters used to create a texture operation + struct TextureParameters { + Id sampler; + Id coords; + Id bias; + Id lod; + Id Dref; + Id offset; + Id offsets; + Id gradX; + Id gradY; + Id sample; + Id component; + Id texelOut; + Id lodClamp; + }; + + // Select the correct texture operation based on all inputs, and emit the correct instruction + Id createTextureCall(Decoration precision, Id resultType, bool sparse, bool fetch, bool proj, bool gather, bool noImplicit, const TextureParameters&); + + // Emit the OpTextureQuery* instruction that was passed in. + // Figure out the right return value and type, and return it. + Id createTextureQueryCall(Op, const TextureParameters&, bool isUnsignedResult); + + Id createSamplePositionCall(Decoration precision, Id, Id); + + Id createBitFieldExtractCall(Decoration precision, Id, Id, Id, bool isSigned); + Id createBitFieldInsertCall(Decoration precision, Id, Id, Id, Id); + + // Reduction comparison for composites: For equal and not-equal resulting in a scalar. + Id createCompositeCompare(Decoration precision, Id, Id, bool /* true if for equal, false if for not-equal */); + + // OpCompositeConstruct + Id createCompositeConstruct(Id typeId, const std::vector& constituents); + + // vector or scalar constructor + Id createConstructor(Decoration precision, const std::vector& sources, Id resultTypeId); + + // matrix constructor + Id createMatrixConstructor(Decoration precision, const std::vector& sources, Id constructee); + + // Helper to use for building nested control flow with if-then-else. + class If { + public: + If(Id condition, Builder& builder); + ~If() {} + + void makeBeginElse(); + void makeEndIf(); + + private: + If(const If&); + If& operator=(If&); + + Builder& builder; + Id condition; + Function* function; + Block* headerBlock; + Block* thenBlock; + Block* elseBlock; + Block* mergeBlock; + }; + + // Make a switch statement. A switch has 'numSegments' of pieces of code, not containing + // any case/default labels, all separated by one or more case/default labels. Each possible + // case value v is a jump to the caseValues[v] segment. The defaultSegment is also in this + // number space. How to compute the value is given by 'condition', as in switch(condition). + // + // The SPIR-V Builder will maintain the stack of post-switch merge blocks for nested switches. + // + // Use a defaultSegment < 0 if there is no default segment (to branch to post switch). + // + // 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& caseValues, + const std::vector& valueToSegment, int defaultSegment, std::vector& segmentBB); // return argument + + // Add a branch to the innermost switch's merge block. + void addSwitchBreak(); + + // Move to the next code segment, passing in the return argument in makeSwitch() + void nextSwitchSegment(std::vector& segmentBB, int segment); + + // Finish off the innermost switch. + void endSwitch(std::vector& segmentBB); + + struct LoopBlocks { + LoopBlocks(Block& head, Block& body, Block& merge, Block& continue_target) : + head(head), body(body), merge(merge), continue_target(continue_target) { } + Block &head, &body, &merge, &continue_target; + private: + LoopBlocks(); + LoopBlocks& operator=(const LoopBlocks&); + }; + + // Start a new loop and prepare the builder to generate code for it. Until + // closeLoop() is called for this loop, createLoopContinue() and + // createLoopExit() will target its corresponding blocks. + LoopBlocks& makeNewLoop(); + + // Create a new block in the function containing the build point. Memory is + // owned by the function object. + Block& makeNewBlock(); + + // Add a branch to the continue_target of the current (innermost) loop. + void createLoopContinue(); + + // Add an exit (e.g. "break") from the innermost loop that we're currently + // in. + void createLoopExit(); + + // Close the innermost loop that you're in + void closeLoop(); + + // + // Access chain design for an R-Value vs. L-Value: + // + // There is a single access chain the builder is building at + // any particular time. Such a chain can be used to either to a load or + // a store, when desired. + // + // Expressions can be r-values, l-values, or both, or only r-values: + // a[b.c].d = .... // l-value + // ... = a[b.c].d; // r-value, that also looks like an l-value + // ++a[b.c].d; // r-value and l-value + // (x + y)[2]; // r-value only, can't possibly be l-value + // + // Computing an r-value means generating code. Hence, + // r-values should only be computed when they are needed, not speculatively. + // + // Computing an l-value means saving away information for later use in the compiler, + // no code is generated until the l-value is later dereferenced. It is okay + // to speculatively generate an l-value, just not okay to speculatively dereference it. + // + // The base of the access chain (the left-most variable or expression + // from which everything is based) can be set either as an l-value + // or as an r-value. Most efficient would be to set an l-value if one + // is available. If an expression was evaluated, the resulting r-value + // can be set as the chain base. + // + // The users of this single access chain can save and restore if they + // want to nest or manage multiple chains. + // + + struct AccessChain { + Id base; // for l-values, pointer to the base object, for r-values, the base object + std::vector indexChain; + Id instr; // cache the instruction that generates this access chain + std::vector swizzle; // each std::vector element selects the next GLSL component number + Id component; // a dynamic component index, can coexist with a swizzle, done after the swizzle, NoResult if not present + Id preSwizzleBaseType; // dereferenced type, before swizzle or component is applied; NoType unless a swizzle or component is present + bool isRValue; // true if 'base' is an r-value, otherwise, base is an l-value + }; + + // + // the SPIR-V builder maintains a single active chain that + // the following methods operate on + // + + // for external save and restore + AccessChain getAccessChain() { return accessChain; } + void setAccessChain(AccessChain newChain) { accessChain = newChain; } + + // clear accessChain + void clearAccessChain(); + + // set new base as an l-value base + void setAccessChainLValue(Id lValue) + { + assert(isPointer(lValue)); + accessChain.base = lValue; + } + + // set new base value as an r-value + void setAccessChainRValue(Id rValue) + { + accessChain.isRValue = true; + accessChain.base = rValue; + } + + // push offset onto the end of the chain + void accessChainPush(Id offset) + { + accessChain.indexChain.push_back(offset); + } + + // push new swizzle onto the end of any existing swizzle, merging into a single swizzle + void accessChainPushSwizzle(std::vector& swizzle, Id preSwizzleBaseType); + + // push a variable component selection onto the access chain; supporting only one, so unsided + void accessChainPushComponent(Id component, Id preSwizzleBaseType) + { + accessChain.component = component; + if (accessChain.preSwizzleBaseType == NoType) + accessChain.preSwizzleBaseType = preSwizzleBaseType; + } + + // use accessChain and swizzle to store value + void accessChainStore(Id rvalue); + + // use accessChain and swizzle to load an r-value + Id accessChainLoad(Decoration precision, Id ResultType); + + // get the direct pointer for an l-value + Id accessChainGetLValue(); + + // Get the inferred SPIR-V type of the result of the current access chain, + // based on the type of the base and the chain of dereferences. + Id accessChainGetInferredType(); + + // Remove OpDecorate instructions whose operands are defined in unreachable + // blocks. + void eliminateDeadDecorations(); + void dump(std::vector&) const; + + void createBranch(Block* block); + void createConditionalBranch(Id condition, Block* thenBlock, Block* elseBlock); + void createLoopMerge(Block* mergeBlock, Block* continueBlock, unsigned int control); + + // Sets to generate opcode for specialization constants. + void setToSpecConstCodeGenMode() { generatingOpCodeForSpecConst = true; } + // Sets to generate opcode for non-specialization constants (normal mode). + void setToNormalCodeGenMode() { generatingOpCodeForSpecConst = false; } + // Check if the builder is generating code for spec constants. + bool isInSpecConstCodeGenMode() { return generatingOpCodeForSpecConst; } + + protected: + Id makeIntConstant(Id typeId, unsigned value, bool specConstant); + Id makeInt64Constant(Id typeId, unsigned long long value, bool specConstant); + Id findScalarConstant(Op typeClass, Op opcode, Id typeId, unsigned value) const; + Id findScalarConstant(Op typeClass, Op opcode, Id typeId, unsigned v1, unsigned v2) const; + Id findCompositeConstant(Op typeClass, const std::vector& comps) const; + Id collapseAccessChain(); + void transferAccessChainSwizzle(bool dynamic); + void simplifyAccessChainSwizzle(); + void createAndSetNoPredecessorBlock(const char*); + void createSelectionMerge(Block* mergeBlock, unsigned int control); + void dumpInstructions(std::vector&, const std::vector >&) const; + + SourceLanguage source; + int sourceVersion; + std::set extensions; + std::vector sourceExtensions; + AddressingModel addressModel; + MemoryModel memoryModel; + std::set capabilities; + int builderNumber; + Module module; + Block* buildPoint; + Id uniqueId; + Function* entryPointFunction; + bool generatingOpCodeForSpecConst; + AccessChain accessChain; + + // special blocks of instructions for output + std::vector > imports; + std::vector > entryPoints; + std::vector > executionModes; + std::vector > names; + std::vector > lines; + std::vector > decorations; + std::vector > constantsTypesGlobals; + std::vector > externals; + std::vector > functions; + + // not output, internally used for quick & dirty canonical (unique) creation + std::vector groupedConstants[OpConstant]; // all types appear before OpConstant + std::vector groupedTypes[OpConstant]; + + // stack of switches + std::stack switchMerges; + + // Our loop stack. + std::stack loops; + + // The stream for outputing warnings and errors. + SpvBuildLogger* logger; +}; // end Builder class + +}; // end spv namespace + +#endif // SpvBuilder_H diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/bitutils.h b/3rdparty/bgfx/3rdparty/glslang/SPIRV/bitutils.h new file mode 100644 index 0000000..31288ab --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/bitutils.h @@ -0,0 +1,81 @@ +// Copyright (c) 2015-2016 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. +// 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. + +#ifndef LIBSPIRV_UTIL_BITUTILS_H_ +#define LIBSPIRV_UTIL_BITUTILS_H_ + +#include +#include + +namespace spvutils { + +// Performs a bitwise copy of source to the destination type Dest. +template +Dest BitwiseCast(Src source) { + Dest dest; + static_assert(sizeof(source) == sizeof(dest), + "BitwiseCast: Source and destination must have the same size"); + std::memcpy(&dest, &source, sizeof(dest)); + return dest; +} + +// SetBits returns an integer of type with bits set +// for position through , counting from the least +// significant bit. In particular when Num == 0, no positions are set to 1. +// A static assert will be triggered if First + Num > sizeof(T) * 8, that is, +// a bit that will not fit in the underlying type is set. +template +struct SetBits { + static_assert(First < sizeof(T) * 8, + "Tried to set a bit that is shifted too far."); + const static T get = (T(1) << First) | SetBits::get; +}; + +template +struct SetBits { + const static T get = T(0); +}; + +// This is all compile-time so we can put our tests right here. +static_assert(SetBits::get == uint32_t(0x00000000), + "SetBits failed"); +static_assert(SetBits::get == uint32_t(0x00000001), + "SetBits failed"); +static_assert(SetBits::get == uint32_t(0x80000000), + "SetBits failed"); +static_assert(SetBits::get == uint32_t(0x00000006), + "SetBits failed"); +static_assert(SetBits::get == uint32_t(0xc0000000), + "SetBits failed"); +static_assert(SetBits::get == uint32_t(0x7FFFFFFF), + "SetBits failed"); +static_assert(SetBits::get == uint32_t(0xFFFFFFFF), + "SetBits failed"); +static_assert(SetBits::get == uint32_t(0xFFFF0000), + "SetBits failed"); + +static_assert(SetBits::get == uint64_t(0x0000000000000001LL), + "SetBits failed"); +static_assert(SetBits::get == uint64_t(0x8000000000000000LL), + "SetBits failed"); +static_assert(SetBits::get == uint64_t(0xc000000000000000LL), + "SetBits failed"); +static_assert(SetBits::get == uint64_t(0x0000000080000000LL), + "SetBits failed"); +static_assert(SetBits::get == uint64_t(0x00000000FFFF0000LL), + "SetBits failed"); + +} // namespace spvutils + +#endif // LIBSPIRV_UTIL_BITUTILS_H_ diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/disassemble.cpp b/3rdparty/bgfx/3rdparty/glslang/SPIRV/disassemble.cpp new file mode 100644 index 0000000..c950a66 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/disassemble.cpp @@ -0,0 +1,695 @@ +// +// Copyright (C) 2014-2015 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. + +// +// Disassembler for SPIR-V. +// + +#include +#include +#include +#include +#include +#include +#include + +#include "disassemble.h" +#include "doc.h" + +namespace spv { + extern "C" { + // Include C-based headers that don't have a namespace + #include "GLSL.std.450.h" +#ifdef AMD_EXTENSIONS + #include "GLSL.ext.AMD.h" +#endif +#ifdef NV_EXTENSIONS + #include "GLSL.ext.NV.h" +#endif + } +} +const char* GlslStd450DebugNames[spv::GLSLstd450Count]; + +namespace spv { + +#ifdef AMD_EXTENSIONS +static const char* GLSLextAMDGetDebugNames(const char*, unsigned); +#endif + +#ifdef NV_EXTENSIONS +static const char* GLSLextNVGetDebugNames(const char*, unsigned); +#endif + +static void Kill(std::ostream& out, const char* message) +{ + out << std::endl << "Disassembly failed: " << message << std::endl; + exit(1); +} + +// used to identify the extended instruction library imported when printing +enum ExtInstSet { + GLSL450Inst, +#ifdef AMD_EXTENSIONS + GLSLextAMDInst, +#endif +#ifdef NV_EXTENSIONS + GLSLextNVInst, +#endif + OpenCLExtInst, +}; + +// Container class for a single instance of a SPIR-V stream, with methods for disassembly. +class SpirvStream { +public: + SpirvStream(std::ostream& out, const std::vector& stream) : out(out), stream(stream), word(0), nextNestedControl(0) { } + virtual ~SpirvStream() { } + + void validate(); + void processInstructions(); + +protected: + SpirvStream(const SpirvStream&); + SpirvStream& operator=(const SpirvStream&); + Op getOpCode(int id) const { return idInstruction[id] ? (Op)(stream[idInstruction[id]] & OpCodeMask) : OpNop; } + + // Output methods + void outputIndent(); + void formatId(Id id, std::stringstream&); + void outputResultId(Id id); + void outputTypeId(Id id); + void outputId(Id id); + void outputMask(OperandClass operandClass, unsigned mask); + void disassembleImmediates(int numOperands); + void disassembleIds(int numOperands); + int disassembleString(); + void disassembleInstruction(Id resultId, Id typeId, Op opCode, int numOperands); + + // Data + std::ostream& out; // where to write the disassembly + const std::vector& stream; // the actual word stream + int size; // the size of the word stream + int word; // the next word of the stream to read + + // map each to the instruction that created it + Id bound; + std::vector idInstruction; // the word offset into the stream where the instruction for result [id] starts; 0 if not yet seen (forward reference or function parameter) + + std::vector idDescriptor; // the best text string known for explaining the + + // schema + unsigned int schema; + + // stack of structured-merge points + std::stack nestedControl; + Id nextNestedControl; // need a slight delay for when we are nested +}; + +void SpirvStream::validate() +{ + size = (int)stream.size(); + if (size < 4) + Kill(out, "stream is too short"); + + // Magic number + if (stream[word++] != MagicNumber) { + out << "Bad magic number"; + return; + } + + // Version + out << "// Module Version " << std::hex << stream[word++] << std::endl; + + // Generator's magic number + out << "// Generated by (magic number): " << std::hex << stream[word++] << std::dec << std::endl; + + // Result bound + bound = stream[word++]; + idInstruction.resize(bound); + idDescriptor.resize(bound); + out << "// Id's are bound by " << bound << std::endl; + out << std::endl; + + // Reserved schema, must be 0 for now + schema = stream[word++]; + if (schema != 0) + Kill(out, "bad schema, must be 0"); +} + +// Loop over all the instructions, in order, processing each. +// Boiler plate for each is handled here directly, the rest is dispatched. +void SpirvStream::processInstructions() +{ + // Instructions + while (word < size) { + int instructionStart = word; + + // Instruction wordCount and opcode + unsigned int firstWord = stream[word]; + unsigned wordCount = firstWord >> WordCountShift; + Op opCode = (Op)(firstWord & OpCodeMask); + int nextInst = word + wordCount; + ++word; + + // Presence of full instruction + if (nextInst > size) + Kill(out, "stream instruction terminated too early"); + + // Base for computing number of operands; will be updated as more is learned + unsigned numOperands = wordCount - 1; + + // Type + Id typeId = 0; + if (InstructionDesc[opCode].hasType()) { + typeId = stream[word++]; + --numOperands; + } + + // Result + Id resultId = 0; + if (InstructionDesc[opCode].hasResult()) { + resultId = stream[word++]; + --numOperands; + + // save instruction for future reference + idInstruction[resultId] = instructionStart; + } + + outputResultId(resultId); + outputTypeId(typeId); + outputIndent(); + + // Hand off the Op and all its operands + disassembleInstruction(resultId, typeId, opCode, numOperands); + if (word != nextInst) { + out << " ERROR, incorrect number of operands consumed. At " << word << " instead of " << nextInst << " instruction start was " << instructionStart; + word = nextInst; + } + out << std::endl; + } +} + +void SpirvStream::outputIndent() +{ + for (int i = 0; i < (int)nestedControl.size(); ++i) + out << " "; +} + +void SpirvStream::formatId(Id id, std::stringstream& idStream) +{ + if (id != 0) { + // On instructions with no IDs, this is called with "0", which does not + // have to be within ID bounds on null shaders. + if (id >= bound) + Kill(out, "Bad "); + + idStream << id; + if (idDescriptor[id].size() > 0) + idStream << "(" << idDescriptor[id] << ")"; + } +} + +void SpirvStream::outputResultId(Id id) +{ + const int width = 16; + std::stringstream idStream; + formatId(id, idStream); + out << std::setw(width) << std::right << idStream.str(); + if (id != 0) + out << ":"; + else + out << " "; + + if (nestedControl.size() && id == nestedControl.top()) + nestedControl.pop(); +} + +void SpirvStream::outputTypeId(Id id) +{ + const int width = 12; + std::stringstream idStream; + formatId(id, idStream); + out << std::setw(width) << std::right << idStream.str() << " "; +} + +void SpirvStream::outputId(Id id) +{ + if (id >= bound) + Kill(out, "Bad "); + + out << id; + if (idDescriptor[id].size() > 0) + out << "(" << idDescriptor[id] << ")"; +} + +void SpirvStream::outputMask(OperandClass operandClass, unsigned mask) +{ + if (mask == 0) + out << "None"; + else { + for (int m = 0; m < OperandClassParams[operandClass].ceiling; ++m) { + if (mask & (1 << m)) + out << OperandClassParams[operandClass].getName(m) << " "; + } + } +} + +void SpirvStream::disassembleImmediates(int numOperands) +{ + for (int i = 0; i < numOperands; ++i) { + out << stream[word++]; + if (i < numOperands - 1) + out << " "; + } +} + +void SpirvStream::disassembleIds(int numOperands) +{ + for (int i = 0; i < numOperands; ++i) { + outputId(stream[word++]); + if (i < numOperands - 1) + out << " "; + } +} + +// return the number of operands consumed by the string +int SpirvStream::disassembleString() +{ + int startWord = word; + + out << " \""; + + const char* wordString; + bool done = false; + do { + unsigned int content = stream[word]; + wordString = (const char*)&content; + for (int charCount = 0; charCount < 4; ++charCount) { + if (*wordString == 0) { + done = true; + break; + } + out << *(wordString++); + } + ++word; + } while (! done); + + out << "\""; + + return word - startWord; +} + +void SpirvStream::disassembleInstruction(Id resultId, Id /*typeId*/, Op opCode, int numOperands) +{ + // Process the opcode + + out << (OpcodeString(opCode) + 2); // leave out the "Op" + + if (opCode == OpLoopMerge || opCode == OpSelectionMerge) + nextNestedControl = stream[word]; + else if (opCode == OpBranchConditional || opCode == OpSwitch) { + if (nextNestedControl) { + nestedControl.push(nextNestedControl); + nextNestedControl = 0; + } + } else if (opCode == OpExtInstImport) { + idDescriptor[resultId] = (const char*)(&stream[word]); + } + else { + if (resultId != 0 && idDescriptor[resultId].size() == 0) { + switch (opCode) { + case OpTypeInt: + idDescriptor[resultId] = "int"; + break; + case OpTypeFloat: + idDescriptor[resultId] = "float"; + break; + case OpTypeBool: + idDescriptor[resultId] = "bool"; + break; + case OpTypeStruct: + idDescriptor[resultId] = "struct"; + break; + case OpTypePointer: + idDescriptor[resultId] = "ptr"; + break; + case OpTypeVector: + if (idDescriptor[stream[word]].size() > 0) + idDescriptor[resultId].append(idDescriptor[stream[word]].begin(), idDescriptor[stream[word]].begin() + 1); + idDescriptor[resultId].append("vec"); + switch (stream[word + 1]) { + case 2: idDescriptor[resultId].append("2"); break; + case 3: idDescriptor[resultId].append("3"); break; + case 4: idDescriptor[resultId].append("4"); break; + case 8: idDescriptor[resultId].append("8"); break; + case 16: idDescriptor[resultId].append("16"); break; + case 32: idDescriptor[resultId].append("32"); break; + default: break; + } + break; + default: + break; + } + } + } + + // Process the operands. Note, a new context-dependent set could be + // swapped in mid-traversal. + + // Handle images specially, so can put out helpful strings. + if (opCode == OpTypeImage) { + out << " "; + disassembleIds(1); + out << " " << DimensionString((Dim)stream[word++]); + out << (stream[word++] != 0 ? " depth" : ""); + out << (stream[word++] != 0 ? " array" : ""); + out << (stream[word++] != 0 ? " multi-sampled" : ""); + switch (stream[word++]) { + case 0: out << " runtime"; break; + case 1: out << " sampled"; break; + case 2: out << " nonsampled"; break; + } + out << " format:" << ImageFormatString((ImageFormat)stream[word++]); + + if (numOperands == 8) { + out << " " << AccessQualifierString(stream[word++]); + } + return; + } + + // Handle all the parameterized operands + for (int op = 0; op < InstructionDesc[opCode].operands.getNum() && numOperands > 0; ++op) { + out << " "; + OperandClass operandClass = InstructionDesc[opCode].operands.getClass(op); + switch (operandClass) { + case OperandId: + case OperandScope: + case OperandMemorySemantics: + disassembleIds(1); + --numOperands; + // Get names for printing "(XXX)" for readability, *after* this id + if (opCode == OpName) + idDescriptor[stream[word - 1]] = (const char*)(&stream[word]); + break; + case OperandVariableIds: + disassembleIds(numOperands); + return; + case OperandImageOperands: + outputMask(OperandImageOperands, stream[word++]); + --numOperands; + disassembleIds(numOperands); + return; + case OperandOptionalLiteral: + case OperandVariableLiterals: + if ((opCode == OpDecorate && stream[word - 1] == DecorationBuiltIn) || + (opCode == OpMemberDecorate && stream[word - 1] == DecorationBuiltIn)) { + out << BuiltInString(stream[word++]); + --numOperands; + ++op; + } + disassembleImmediates(numOperands); + return; + case OperandVariableIdLiteral: + while (numOperands > 0) { + out << std::endl; + outputResultId(0); + outputTypeId(0); + outputIndent(); + out << " Type "; + disassembleIds(1); + out << ", member "; + disassembleImmediates(1); + numOperands -= 2; + } + return; + case OperandVariableLiteralId: + while (numOperands > 0) { + out << std::endl; + outputResultId(0); + outputTypeId(0); + outputIndent(); + out << " case "; + disassembleImmediates(1); + out << ": "; + disassembleIds(1); + numOperands -= 2; + } + return; + case OperandLiteralNumber: + disassembleImmediates(1); + --numOperands; + if (opCode == OpExtInst) { + ExtInstSet extInstSet = GLSL450Inst; + const char* name = idDescriptor[stream[word - 2]].c_str(); + if (0 == memcmp("OpenCL", name, 6)) { + extInstSet = OpenCLExtInst; +#ifdef AMD_EXTENSIONS + } else if (strcmp(spv::E_SPV_AMD_shader_ballot, name) == 0 || + strcmp(spv::E_SPV_AMD_shader_trinary_minmax, name) == 0 || + strcmp(spv::E_SPV_AMD_shader_explicit_vertex_parameter, name) == 0 || + strcmp(spv::E_SPV_AMD_gcn_shader, name) == 0) { + extInstSet = GLSLextAMDInst; +#endif +#ifdef NV_EXTENSIONS + }else if (strcmp(spv::E_SPV_NV_sample_mask_override_coverage, name) == 0 || + strcmp(spv::E_SPV_NV_geometry_shader_passthrough, name) == 0 || + strcmp(spv::E_SPV_NV_viewport_array2, name) == 0 || + strcmp(spv::E_SPV_NVX_multiview_per_view_attributes, name) == 0) { + extInstSet = GLSLextNVInst; +#endif + } + unsigned entrypoint = stream[word - 1]; + if (extInstSet == GLSL450Inst) { + if (entrypoint < GLSLstd450Count) { + out << "(" << GlslStd450DebugNames[entrypoint] << ")"; + } +#ifdef AMD_EXTENSIONS + } else if (extInstSet == GLSLextAMDInst) { + out << "(" << GLSLextAMDGetDebugNames(name, entrypoint) << ")"; +#endif +#ifdef NV_EXTENSIONS + } + else if (extInstSet == GLSLextNVInst) { + out << "(" << GLSLextNVGetDebugNames(name, entrypoint) << ")"; +#endif + } + } + break; + case OperandOptionalLiteralString: + case OperandLiteralString: + numOperands -= disassembleString(); + break; + default: + assert(operandClass >= OperandSource && operandClass < OperandOpcode); + + if (OperandClassParams[operandClass].bitmask) + outputMask(operandClass, stream[word++]); + else + out << OperandClassParams[operandClass].getName(stream[word++]); + --numOperands; + + break; + } + } + + return; +} + +static void GLSLstd450GetDebugNames(const char** names) +{ + for (int i = 0; i < GLSLstd450Count; ++i) + names[i] = "Unknown"; + + names[GLSLstd450Round] = "Round"; + names[GLSLstd450RoundEven] = "RoundEven"; + names[GLSLstd450Trunc] = "Trunc"; + names[GLSLstd450FAbs] = "FAbs"; + names[GLSLstd450SAbs] = "SAbs"; + names[GLSLstd450FSign] = "FSign"; + names[GLSLstd450SSign] = "SSign"; + names[GLSLstd450Floor] = "Floor"; + names[GLSLstd450Ceil] = "Ceil"; + names[GLSLstd450Fract] = "Fract"; + names[GLSLstd450Radians] = "Radians"; + names[GLSLstd450Degrees] = "Degrees"; + names[GLSLstd450Sin] = "Sin"; + names[GLSLstd450Cos] = "Cos"; + names[GLSLstd450Tan] = "Tan"; + names[GLSLstd450Asin] = "Asin"; + names[GLSLstd450Acos] = "Acos"; + names[GLSLstd450Atan] = "Atan"; + names[GLSLstd450Sinh] = "Sinh"; + names[GLSLstd450Cosh] = "Cosh"; + names[GLSLstd450Tanh] = "Tanh"; + names[GLSLstd450Asinh] = "Asinh"; + names[GLSLstd450Acosh] = "Acosh"; + names[GLSLstd450Atanh] = "Atanh"; + names[GLSLstd450Atan2] = "Atan2"; + names[GLSLstd450Pow] = "Pow"; + names[GLSLstd450Exp] = "Exp"; + names[GLSLstd450Log] = "Log"; + names[GLSLstd450Exp2] = "Exp2"; + names[GLSLstd450Log2] = "Log2"; + names[GLSLstd450Sqrt] = "Sqrt"; + names[GLSLstd450InverseSqrt] = "InverseSqrt"; + names[GLSLstd450Determinant] = "Determinant"; + names[GLSLstd450MatrixInverse] = "MatrixInverse"; + names[GLSLstd450Modf] = "Modf"; + names[GLSLstd450ModfStruct] = "ModfStruct"; + names[GLSLstd450FMin] = "FMin"; + names[GLSLstd450SMin] = "SMin"; + names[GLSLstd450UMin] = "UMin"; + names[GLSLstd450FMax] = "FMax"; + names[GLSLstd450SMax] = "SMax"; + names[GLSLstd450UMax] = "UMax"; + names[GLSLstd450FClamp] = "FClamp"; + names[GLSLstd450SClamp] = "SClamp"; + names[GLSLstd450UClamp] = "UClamp"; + names[GLSLstd450FMix] = "FMix"; + names[GLSLstd450Step] = "Step"; + names[GLSLstd450SmoothStep] = "SmoothStep"; + names[GLSLstd450Fma] = "Fma"; + names[GLSLstd450Frexp] = "Frexp"; + names[GLSLstd450FrexpStruct] = "FrexpStruct"; + names[GLSLstd450Ldexp] = "Ldexp"; + names[GLSLstd450PackSnorm4x8] = "PackSnorm4x8"; + names[GLSLstd450PackUnorm4x8] = "PackUnorm4x8"; + names[GLSLstd450PackSnorm2x16] = "PackSnorm2x16"; + names[GLSLstd450PackUnorm2x16] = "PackUnorm2x16"; + names[GLSLstd450PackHalf2x16] = "PackHalf2x16"; + names[GLSLstd450PackDouble2x32] = "PackDouble2x32"; + names[GLSLstd450UnpackSnorm2x16] = "UnpackSnorm2x16"; + names[GLSLstd450UnpackUnorm2x16] = "UnpackUnorm2x16"; + names[GLSLstd450UnpackHalf2x16] = "UnpackHalf2x16"; + names[GLSLstd450UnpackSnorm4x8] = "UnpackSnorm4x8"; + names[GLSLstd450UnpackUnorm4x8] = "UnpackUnorm4x8"; + names[GLSLstd450UnpackDouble2x32] = "UnpackDouble2x32"; + names[GLSLstd450Length] = "Length"; + names[GLSLstd450Distance] = "Distance"; + names[GLSLstd450Cross] = "Cross"; + names[GLSLstd450Normalize] = "Normalize"; + names[GLSLstd450FaceForward] = "FaceForward"; + names[GLSLstd450Reflect] = "Reflect"; + names[GLSLstd450Refract] = "Refract"; + names[GLSLstd450FindILsb] = "FindILsb"; + names[GLSLstd450FindSMsb] = "FindSMsb"; + names[GLSLstd450FindUMsb] = "FindUMsb"; + names[GLSLstd450InterpolateAtCentroid] = "InterpolateAtCentroid"; + names[GLSLstd450InterpolateAtSample] = "InterpolateAtSample"; + names[GLSLstd450InterpolateAtOffset] = "InterpolateAtOffset"; +} + +#ifdef AMD_EXTENSIONS +static const char* GLSLextAMDGetDebugNames(const char* name, unsigned entrypoint) +{ + if (strcmp(name, spv::E_SPV_AMD_shader_ballot) == 0) { + switch (entrypoint) { + case SwizzleInvocationsAMD: return "SwizzleInvocationsAMD"; + case SwizzleInvocationsMaskedAMD: return "SwizzleInvocationsMaskedAMD"; + case WriteInvocationAMD: return "WriteInvocationAMD"; + case MbcntAMD: return "MbcntAMD"; + default: return "Bad"; + } + } else if (strcmp(name, spv::E_SPV_AMD_shader_trinary_minmax) == 0) { + switch (entrypoint) { + case FMin3AMD: return "FMin3AMD"; + case UMin3AMD: return "UMin3AMD"; + case SMin3AMD: return "SMin3AMD"; + case FMax3AMD: return "FMax3AMD"; + case UMax3AMD: return "UMax3AMD"; + case SMax3AMD: return "SMax3AMD"; + case FMid3AMD: return "FMid3AMD"; + case UMid3AMD: return "UMid3AMD"; + case SMid3AMD: return "SMid3AMD"; + default: return "Bad"; + } + } else if (strcmp(name, spv::E_SPV_AMD_shader_explicit_vertex_parameter) == 0) { + switch (entrypoint) { + case InterpolateAtVertexAMD: return "InterpolateAtVertexAMD"; + default: return "Bad"; + } + } + else if (strcmp(name, spv::E_SPV_AMD_gcn_shader) == 0) { + switch (entrypoint) { + case CubeFaceIndexAMD: return "CubeFaceIndexAMD"; + case CubeFaceCoordAMD: return "CubeFaceCoordAMD"; + case TimeAMD: return "TimeAMD"; + default: + break; + } + } + + return "Bad"; +} +#endif + + +#ifdef NV_EXTENSIONS +static const char* GLSLextNVGetDebugNames(const char* name, unsigned entrypoint) +{ + if (strcmp(name, spv::E_SPV_NV_sample_mask_override_coverage) == 0 || + strcmp(name, spv::E_SPV_NV_geometry_shader_passthrough) == 0 || + strcmp(name, spv::E_ARB_shader_viewport_layer_array) == 0 || + strcmp(name, spv::E_SPV_NV_viewport_array2) == 0 || + strcmp(spv::E_SPV_NVX_multiview_per_view_attributes, name) == 0) { + switch (entrypoint) { + case DecorationOverrideCoverageNV: return "OverrideCoverageNV"; + case DecorationPassthroughNV: return "PassthroughNV"; + case CapabilityGeometryShaderPassthroughNV: return "GeometryShaderPassthroughNV"; + case DecorationViewportRelativeNV: return "ViewportRelativeNV"; + case BuiltInViewportMaskNV: return "ViewportMaskNV"; + case CapabilityShaderViewportMaskNV: return "ShaderViewportMaskNV"; + case DecorationSecondaryViewportRelativeNV: return "SecondaryViewportRelativeNV"; + case BuiltInSecondaryPositionNV: return "SecondaryPositionNV"; + case BuiltInSecondaryViewportMaskNV: return "SecondaryViewportMaskNV"; + case CapabilityShaderStereoViewNV: return "ShaderStereoViewNV"; + case BuiltInPositionPerViewNV: return "PositionPerViewNV"; + case BuiltInViewportMaskPerViewNV: return "ViewportMaskPerViewNV"; + case CapabilityPerViewAttributesNV: return "PerViewAttributesNV"; + default: return "Bad"; + } + } + return "Bad"; +} +#endif + +void Disassemble(std::ostream& out, const std::vector& stream) +{ + SpirvStream SpirvStream(out, stream); + spv::Parameterize(); + GLSLstd450GetDebugNames(GlslStd450DebugNames); + SpirvStream.validate(); + SpirvStream.processInstructions(); +} + +}; // end namespace spv diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/disassemble.h b/3rdparty/bgfx/3rdparty/glslang/SPIRV/disassemble.h new file mode 100755 index 0000000..47cef65 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/disassemble.h @@ -0,0 +1,52 @@ +// +// Copyright (C) 2014-2015 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. + +// +// Disassembler for SPIR-V. +// + +#pragma once +#ifndef disassembler_H +#define disassembler_H + +#include +#include + +namespace spv { + + void Disassemble(std::ostream& out, const std::vector&); + +}; // end namespace spv + +#endif // disassembler_H diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/doc.cpp b/3rdparty/bgfx/3rdparty/glslang/SPIRV/doc.cpp new file mode 100755 index 0000000..a99522b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/doc.cpp @@ -0,0 +1,2855 @@ +// +// Copyright (C) 2014-2015 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. + +// +// 1) Programmatically fill in instruction/operand information. +// This can be used for disassembly, printing documentation, etc. +// +// 2) Print documentation from this parameterization. +// + +#include "doc.h" + +#include +#include +#include + +namespace spv { + extern "C" { + // Include C-based headers that don't have a namespace + #include "GLSL.ext.KHR.h" +#ifdef AMD_EXTENSIONS + #include "GLSL.ext.AMD.h" +#endif +#ifdef NV_EXTENSIONS + #include "GLSL.ext.NV.h" +#endif + } +} + +namespace spv { + +// +// Whole set of functions that translate enumerants to their text strings for +// the specification (or their sanitized versions for auto-generating the +// spirv headers. +// +// 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) +// - the number of bits consumed by the set of masks +// (for non-sparse mask enums, this is the number of enumurants) +// + +const int SourceLanguageCeiling = 6; // HLSL todo: need official enumerant + +const char* SourceString(int source) +{ + switch (source) { + case 0: return "Unknown"; + case 1: return "ESSL"; + case 2: return "GLSL"; + case 3: return "OpenCL_C"; + case 4: return "OpenCL_CPP"; + case 5: return "HLSL"; + + case SourceLanguageCeiling: + default: return "Bad"; + } +} + +const int ExecutionModelCeiling = 7; + +const char* ExecutionModelString(int model) +{ + switch (model) { + case 0: return "Vertex"; + case 1: return "TessellationControl"; + case 2: return "TessellationEvaluation"; + case 3: return "Geometry"; + case 4: return "Fragment"; + case 5: return "GLCompute"; + case 6: return "Kernel"; + + case ExecutionModelCeiling: + default: return "Bad"; + } +} + +const int AddressingModelCeiling = 3; + +const char* AddressingString(int addr) +{ + switch (addr) { + case 0: return "Logical"; + case 1: return "Physical32"; + case 2: return "Physical64"; + + case AddressingModelCeiling: + default: return "Bad"; + } +} + +const int MemoryModelCeiling = 3; + +const char* MemoryString(int mem) +{ + switch (mem) { + case 0: return "Simple"; + case 1: return "GLSL450"; + case 2: return "OpenCL"; + + case MemoryModelCeiling: + default: return "Bad"; + } +} + +const int ExecutionModeCeiling = 33; + +const char* ExecutionModeString(int mode) +{ + switch (mode) { + case 0: return "Invocations"; + case 1: return "SpacingEqual"; + case 2: return "SpacingFractionalEven"; + case 3: return "SpacingFractionalOdd"; + case 4: return "VertexOrderCw"; + case 5: return "VertexOrderCcw"; + case 6: return "PixelCenterInteger"; + case 7: return "OriginUpperLeft"; + case 8: return "OriginLowerLeft"; + case 9: return "EarlyFragmentTests"; + case 10: return "PointMode"; + case 11: return "Xfb"; + case 12: return "DepthReplacing"; + case 13: return "Bad"; + case 14: return "DepthGreater"; + case 15: return "DepthLess"; + case 16: return "DepthUnchanged"; + case 17: return "LocalSize"; + case 18: return "LocalSizeHint"; + case 19: return "InputPoints"; + case 20: return "InputLines"; + case 21: return "InputLinesAdjacency"; + case 22: return "Triangles"; + case 23: return "InputTrianglesAdjacency"; + case 24: return "Quads"; + case 25: return "Isolines"; + case 26: return "OutputVertices"; + case 27: return "OutputPoints"; + case 28: return "OutputLineStrip"; + case 29: return "OutputTriangleStrip"; + case 30: return "VecTypeHint"; + case 31: return "ContractionOff"; + case 32: return "Bad"; + + case ExecutionModeCeiling: + default: return "Bad"; + } +} + +const int StorageClassCeiling = 12; + +const char* StorageClassString(int StorageClass) +{ + switch (StorageClass) { + case 0: return "UniformConstant"; + case 1: return "Input"; + case 2: return "Uniform"; + case 3: return "Output"; + case 4: return "Workgroup"; + case 5: return "CrossWorkgroup"; + case 6: return "Private"; + case 7: return "Function"; + case 8: return "Generic"; + case 9: return "PushConstant"; + case 10: return "AtomicCounter"; + case 11: return "Image"; + + case StorageClassCeiling: + default: return "Bad"; + } +} + +const int DecorationCeiling = 45; + +const char* DecorationString(int decoration) +{ + switch (decoration) { + case 0: return "RelaxedPrecision"; + case 1: return "SpecId"; + case 2: return "Block"; + case 3: return "BufferBlock"; + case 4: return "RowMajor"; + case 5: return "ColMajor"; + case 6: return "ArrayStride"; + case 7: return "MatrixStride"; + case 8: return "GLSLShared"; + case 9: return "GLSLPacked"; + case 10: return "CPacked"; + case 11: return "BuiltIn"; + case 12: return "Bad"; + case 13: return "NoPerspective"; + case 14: return "Flat"; + case 15: return "Patch"; + case 16: return "Centroid"; + case 17: return "Sample"; + case 18: return "Invariant"; + case 19: return "Restrict"; + case 20: return "Aliased"; + case 21: return "Volatile"; + case 22: return "Constant"; + case 23: return "Coherent"; + case 24: return "NonWritable"; + case 25: return "NonReadable"; + case 26: return "Uniform"; + case 27: return "Bad"; + case 28: return "SaturatedConversion"; + case 29: return "Stream"; + case 30: return "Location"; + case 31: return "Component"; + case 32: return "Index"; + case 33: return "Binding"; + case 34: return "DescriptorSet"; + case 35: return "Offset"; + case 36: return "XfbBuffer"; + case 37: return "XfbStride"; + case 38: return "FuncParamAttr"; + case 39: return "FP Rounding Mode"; + case 40: return "FP Fast Math Mode"; + case 41: return "Linkage Attributes"; + case 42: return "NoContraction"; + case 43: return "InputAttachmentIndex"; + case 44: return "Alignment"; + + case DecorationCeiling: + default: return "Bad"; + +#ifdef AMD_EXTENSIONS + case 4999: return "ExplicitInterpAMD"; +#endif +#ifdef NV_EXTENSIONS + case 5248: return "OverrideCoverageNV"; + case 5250: return "PassthroughNV"; + case 5252: return "ViewportRelativeNV"; + case 5256: return "SecondaryViewportRelativeNV"; +#endif + } +} + +const int BuiltInCeiling = 44; + +const char* BuiltInString(int builtIn) +{ + switch (builtIn) { + case 0: return "Position"; + case 1: return "PointSize"; + case 2: return "Bad"; + case 3: return "ClipDistance"; + case 4: return "CullDistance"; + case 5: return "VertexId"; + case 6: return "InstanceId"; + case 7: return "PrimitiveId"; + case 8: return "InvocationId"; + case 9: return "Layer"; + case 10: return "ViewportIndex"; + case 11: return "TessLevelOuter"; + case 12: return "TessLevelInner"; + case 13: return "TessCoord"; + case 14: return "PatchVertices"; + case 15: return "FragCoord"; + case 16: return "PointCoord"; + case 17: return "FrontFacing"; + case 18: return "SampleId"; + case 19: return "SamplePosition"; + case 20: return "SampleMask"; + case 21: return "Bad"; + case 22: return "FragDepth"; + case 23: return "HelperInvocation"; + case 24: return "NumWorkgroups"; + case 25: return "WorkgroupSize"; + case 26: return "WorkgroupId"; + case 27: return "LocalInvocationId"; + case 28: return "GlobalInvocationId"; + case 29: return "LocalInvocationIndex"; + case 30: return "WorkDim"; + case 31: return "GlobalSize"; + case 32: return "EnqueuedWorkgroupSize"; + case 33: return "GlobalOffset"; + case 34: return "GlobalLinearId"; + case 35: return "Bad"; + case 36: return "SubgroupSize"; + case 37: return "SubgroupMaxSize"; + case 38: return "NumSubgroups"; + case 39: return "NumEnqueuedSubgroups"; + case 40: return "SubgroupId"; + case 41: return "SubgroupLocalInvocationId"; + case 42: return "VertexIndex"; // TBD: put next to VertexId? + case 43: return "InstanceIndex"; // TBD: put next to InstanceId? + + case 4416: return "SubgroupEqMaskKHR"; + case 4417: return "SubgroupGeMaskKHR"; + case 4418: return "SubgroupGtMaskKHR"; + case 4419: return "SubgroupLeMaskKHR"; + case 4420: return "SubgroupLtMaskKHR"; + case 4438: return "DeviceIndex"; + case 4440: return "ViewIndex"; + case 4424: return "BaseVertex"; + case 4425: return "BaseInstance"; + case 4426: return "DrawIndex"; + +#ifdef AMD_EXTENSIONS + case 4992: return "BaryCoordNoPerspAMD"; + case 4993: return "BaryCoordNoPerspCentroidAMD"; + case 4994: return "BaryCoordNoPerspSampleAMD"; + case 4995: return "BaryCoordSmoothAMD"; + case 4996: return "BaryCoordSmoothCentroidAMD"; + case 4997: return "BaryCoordSmoothSampleAMD"; + case 4998: return "BaryCoordPullModelAMD"; +#endif + +#ifdef NV_EXTENSIONS + case 5253: return "ViewportMaskNV"; + case 5257: return "SecondaryPositionNV"; + case 5258: return "SecondaryViewportMaskNV"; + case 5261: return "PositionPerViewNV"; + case 5262: return "ViewportMaskPerViewNV"; +#endif + + case BuiltInCeiling: + default: return "Bad"; + } +} + +const int DimensionCeiling = 7; + +const char* DimensionString(int dim) +{ + switch (dim) { + case 0: return "1D"; + case 1: return "2D"; + case 2: return "3D"; + case 3: return "Cube"; + case 4: return "Rect"; + case 5: return "Buffer"; + case 6: return "SubpassData"; + + case DimensionCeiling: + default: return "Bad"; + } +} + +const int SamplerAddressingModeCeiling = 5; + +const char* SamplerAddressingModeString(int mode) +{ + switch (mode) { + case 0: return "None"; + case 1: return "ClampToEdge"; + case 2: return "Clamp"; + case 3: return "Repeat"; + case 4: return "RepeatMirrored"; + + case SamplerAddressingModeCeiling: + default: return "Bad"; + } +} + +const int SamplerFilterModeCeiling = 2; + +const char* SamplerFilterModeString(int mode) +{ + switch (mode) { + case 0: return "Nearest"; + case 1: return "Linear"; + + case SamplerFilterModeCeiling: + default: return "Bad"; + } +} + +const int ImageFormatCeiling = 40; + +const char* ImageFormatString(int format) +{ + switch (format) { + case 0: return "Unknown"; + + // ES/Desktop float + case 1: return "Rgba32f"; + case 2: return "Rgba16f"; + case 3: return "R32f"; + case 4: return "Rgba8"; + case 5: return "Rgba8Snorm"; + + // Desktop float + case 6: return "Rg32f"; + case 7: return "Rg16f"; + case 8: return "R11fG11fB10f"; + case 9: return "R16f"; + case 10: return "Rgba16"; + case 11: return "Rgb10A2"; + case 12: return "Rg16"; + case 13: return "Rg8"; + case 14: return "R16"; + case 15: return "R8"; + case 16: return "Rgba16Snorm"; + case 17: return "Rg16Snorm"; + case 18: return "Rg8Snorm"; + case 19: return "R16Snorm"; + case 20: return "R8Snorm"; + + // ES/Desktop int + case 21: return "Rgba32i"; + case 22: return "Rgba16i"; + case 23: return "Rgba8i"; + case 24: return "R32i"; + + // Desktop int + case 25: return "Rg32i"; + case 26: return "Rg16i"; + case 27: return "Rg8i"; + case 28: return "R16i"; + case 29: return "R8i"; + + // ES/Desktop uint + case 30: return "Rgba32ui"; + case 31: return "Rgba16ui"; + case 32: return "Rgba8ui"; + case 33: return "R32ui"; + + // Desktop uint + case 34: return "Rgb10a2ui"; + case 35: return "Rg32ui"; + case 36: return "Rg16ui"; + case 37: return "Rg8ui"; + case 38: return "R16ui"; + case 39: return "R8ui"; + + case ImageFormatCeiling: + default: + return "Bad"; + } +} + +const int ImageChannelOrderCeiling = 19; + +const char* ImageChannelOrderString(int format) +{ + switch (format) { + case 0: return "R"; + case 1: return "A"; + case 2: return "RG"; + case 3: return "RA"; + case 4: return "RGB"; + case 5: return "RGBA"; + case 6: return "BGRA"; + case 7: return "ARGB"; + case 8: return "Intensity"; + case 9: return "Luminance"; + case 10: return "Rx"; + case 11: return "RGx"; + case 12: return "RGBx"; + case 13: return "Depth"; + case 14: return "DepthStencil"; + case 15: return "sRGB"; + case 16: return "sRGBx"; + case 17: return "sRGBA"; + case 18: return "sBGRA"; + + case ImageChannelOrderCeiling: + default: + return "Bad"; + } +} + +const int ImageChannelDataTypeCeiling = 17; + +const char* ImageChannelDataTypeString(int type) +{ + switch (type) + { + case 0: return "SnormInt8"; + case 1: return "SnormInt16"; + case 2: return "UnormInt8"; + case 3: return "UnormInt16"; + case 4: return "UnormShort565"; + case 5: return "UnormShort555"; + case 6: return "UnormInt101010"; + case 7: return "SignedInt8"; + case 8: return "SignedInt16"; + case 9: return "SignedInt32"; + case 10: return "UnsignedInt8"; + case 11: return "UnsignedInt16"; + case 12: return "UnsignedInt32"; + case 13: return "HalfFloat"; + case 14: return "Float"; + case 15: return "UnormInt24"; + case 16: return "UnormInt101010_2"; + + case ImageChannelDataTypeCeiling: + default: + return "Bad"; + } +} + +const int ImageOperandsCeiling = 8; + +const char* ImageOperandsString(int format) +{ + switch (format) { + case 0: return "Bias"; + case 1: return "Lod"; + case 2: return "Grad"; + case 3: return "ConstOffset"; + case 4: return "Offset"; + case 5: return "ConstOffsets"; + case 6: return "Sample"; + case 7: return "MinLod"; + + case ImageOperandsCeiling: + default: + return "Bad"; + } +} + +const int FPFastMathCeiling = 5; + +const char* FPFastMathString(int mode) +{ + switch (mode) { + case 0: return "NotNaN"; + case 1: return "NotInf"; + case 2: return "NSZ"; + case 3: return "AllowRecip"; + case 4: return "Fast"; + + case FPFastMathCeiling: + default: return "Bad"; + } +} + +const int FPRoundingModeCeiling = 4; + +const char* FPRoundingModeString(int mode) +{ + switch (mode) { + case 0: return "RTE"; + case 1: return "RTZ"; + case 2: return "RTP"; + case 3: return "RTN"; + + case FPRoundingModeCeiling: + default: return "Bad"; + } +} + +const int LinkageTypeCeiling = 2; + +const char* LinkageTypeString(int type) +{ + switch (type) { + case 0: return "Export"; + case 1: return "Import"; + + case LinkageTypeCeiling: + default: return "Bad"; + } +} + +const int FuncParamAttrCeiling = 8; + +const char* FuncParamAttrString(int attr) +{ + switch (attr) { + case 0: return "Zext"; + case 1: return "Sext"; + case 2: return "ByVal"; + case 3: return "Sret"; + case 4: return "NoAlias"; + case 5: return "NoCapture"; + case 6: return "NoWrite"; + case 7: return "NoReadWrite"; + + case FuncParamAttrCeiling: + default: return "Bad"; + } +} + +const int AccessQualifierCeiling = 3; + +const char* AccessQualifierString(int attr) +{ + switch (attr) { + case 0: return "ReadOnly"; + case 1: return "WriteOnly"; + case 2: return "ReadWrite"; + + case AccessQualifierCeiling: + default: return "Bad"; + } +} + +const int SelectControlCeiling = 2; + +const char* SelectControlString(int cont) +{ + switch (cont) { + case 0: return "Flatten"; + case 1: return "DontFlatten"; + + case SelectControlCeiling: + default: return "Bad"; + } +} + +const int LoopControlCeiling = 2; + +const char* LoopControlString(int cont) +{ + switch (cont) { + case 0: return "Unroll"; + case 1: return "DontUnroll"; + + case LoopControlCeiling: + default: return "Bad"; + } +} + +const int FunctionControlCeiling = 4; + +const char* FunctionControlString(int cont) +{ + switch (cont) { + case 0: return "Inline"; + case 1: return "DontInline"; + case 2: return "Pure"; + case 3: return "Const"; + + case FunctionControlCeiling: + default: return "Bad"; + } +} + +const int MemorySemanticsCeiling = 12; + +const char* MemorySemanticsString(int mem) +{ + // Note: No bits set (None) means "Relaxed" + switch (mem) { + case 0: return "Bad"; // Note: this is a placeholder for 'Consume' + case 1: return "Acquire"; + case 2: return "Release"; + case 3: return "AcquireRelease"; + case 4: return "SequentiallyConsistent"; + case 5: return "Bad"; // Note: reserved for future expansion + case 6: return "UniformMemory"; + case 7: return "SubgroupMemory"; + case 8: return "WorkgroupMemory"; + case 9: return "CrossWorkgroupMemory"; + case 10: return "AtomicCounterMemory"; + case 11: return "ImageMemory"; + + case MemorySemanticsCeiling: + default: return "Bad"; + } +} + +const int MemoryAccessCeiling = 3; + +const char* MemoryAccessString(int mem) +{ + switch (mem) { + case 0: return "Volatile"; + case 1: return "Aligned"; + case 2: return "Nontemporal"; + + case MemoryAccessCeiling: + default: return "Bad"; + } +} + +const int ScopeCeiling = 5; + +const char* ScopeString(int mem) +{ + switch (mem) { + case 0: return "CrossDevice"; + case 1: return "Device"; + case 2: return "Workgroup"; + case 3: return "Subgroup"; + case 4: return "Invocation"; + + case ScopeCeiling: + default: return "Bad"; + } +} + +const int GroupOperationCeiling = 3; + +const char* GroupOperationString(int gop) +{ + + switch (gop) + { + case 0: return "Reduce"; + case 1: return "InclusiveScan"; + case 2: return "ExclusiveScan"; + + case GroupOperationCeiling: + default: return "Bad"; + } +} + +const int KernelEnqueueFlagsCeiling = 3; + +const char* KernelEnqueueFlagsString(int flag) +{ + switch (flag) + { + case 0: return "NoWait"; + case 1: return "WaitKernel"; + case 2: return "WaitWorkGroup"; + + case KernelEnqueueFlagsCeiling: + default: return "Bad"; + } +} + +const int KernelProfilingInfoCeiling = 1; + +const char* KernelProfilingInfoString(int info) +{ + switch (info) + { + case 0: return "CmdExecTime"; + + case KernelProfilingInfoCeiling: + default: return "Bad"; + } +} + +const int CapabilityCeiling = 58; + +const char* CapabilityString(int info) +{ + switch (info) + { + case 0: return "Matrix"; + case 1: return "Shader"; + case 2: return "Geometry"; + case 3: return "Tessellation"; + case 4: return "Addresses"; + case 5: return "Linkage"; + case 6: return "Kernel"; + case 7: return "Vector16"; + case 8: return "Float16Buffer"; + case 9: return "Float16"; + case 10: return "Float64"; + case 11: return "Int64"; + case 12: return "Int64Atomics"; + case 13: return "ImageBasic"; + case 14: return "ImageReadWrite"; + case 15: return "ImageMipmap"; + case 16: return "Bad"; + case 17: return "Pipes"; + case 18: return "Groups"; + case 19: return "DeviceEnqueue"; + case 20: return "LiteralSampler"; + case 21: return "AtomicStorage"; + case 22: return "Int16"; + case 23: return "TessellationPointSize"; + case 24: return "GeometryPointSize"; + case 25: return "ImageGatherExtended"; + case 26: return "Bad"; + case 27: return "StorageImageMultisample"; + case 28: return "UniformBufferArrayDynamicIndexing"; + case 29: return "SampledImageArrayDynamicIndexing"; + case 30: return "StorageBufferArrayDynamicIndexing"; + case 31: return "StorageImageArrayDynamicIndexing"; + case 32: return "ClipDistance"; + case 33: return "CullDistance"; + case 34: return "ImageCubeArray"; + case 35: return "SampleRateShading"; + case 36: return "ImageRect"; + case 37: return "SampledRect"; + case 38: return "GenericPointer"; + case 39: return "Int8"; + case 40: return "InputAttachment"; + case 41: return "SparseResidency"; + case 42: return "MinLod"; + case 43: return "Sampled1D"; + case 44: return "Image1D"; + case 45: return "SampledCubeArray"; + case 46: return "SampledBuffer"; + case 47: return "ImageBuffer"; + case 48: return "ImageMSArray"; + case 49: return "StorageImageExtendedFormats"; + case 50: return "ImageQuery"; + case 51: return "DerivativeControl"; + case 52: return "InterpolationFunction"; + case 53: return "TransformFeedback"; + case 54: return "GeometryStreams"; + case 55: return "StorageImageReadWithoutFormat"; + case 56: return "StorageImageWriteWithoutFormat"; + case 57: return "MultiViewport"; + + case 4423: return "SubgroupBallotKHR"; + case 4427: return "DrawParameters"; + case 4431: return "SubgroupVoteKHR"; + + case 4437: return "DeviceGroup"; + case 4439: return "MultiView"; + +#ifdef NV_EXTENSIONS + case 5251: return "GeometryShaderPassthroughNV"; + case 5254: return "ShaderViewportIndexLayerNV"; + case 5255: return "ShaderViewportMaskNV"; + case 5259: return "ShaderStereoViewNV"; + case 5260: return "PerViewAttributesNV"; +#endif + + case CapabilityCeiling: + default: return "Bad"; + } +} + +const char* OpcodeString(int op) +{ + switch (op) { + case 0: return "OpNop"; + case 1: return "OpUndef"; + case 2: return "OpSourceContinued"; + case 3: return "OpSource"; + case 4: return "OpSourceExtension"; + case 5: return "OpName"; + case 6: return "OpMemberName"; + case 7: return "OpString"; + case 8: return "OpLine"; + case 9: return "Bad"; + case 10: return "OpExtension"; + case 11: return "OpExtInstImport"; + case 12: return "OpExtInst"; + case 13: return "Bad"; + case 14: return "OpMemoryModel"; + case 15: return "OpEntryPoint"; + case 16: return "OpExecutionMode"; + case 17: return "OpCapability"; + case 18: return "Bad"; + case 19: return "OpTypeVoid"; + case 20: return "OpTypeBool"; + case 21: return "OpTypeInt"; + case 22: return "OpTypeFloat"; + case 23: return "OpTypeVector"; + case 24: return "OpTypeMatrix"; + case 25: return "OpTypeImage"; + case 26: return "OpTypeSampler"; + case 27: return "OpTypeSampledImage"; + case 28: return "OpTypeArray"; + case 29: return "OpTypeRuntimeArray"; + case 30: return "OpTypeStruct"; + case 31: return "OpTypeOpaque"; + case 32: return "OpTypePointer"; + case 33: return "OpTypeFunction"; + case 34: return "OpTypeEvent"; + case 35: return "OpTypeDeviceEvent"; + case 36: return "OpTypeReserveId"; + case 37: return "OpTypeQueue"; + case 38: return "OpTypePipe"; + case 39: return "OpTypeForwardPointer"; + case 40: return "Bad"; + case 41: return "OpConstantTrue"; + case 42: return "OpConstantFalse"; + case 43: return "OpConstant"; + case 44: return "OpConstantComposite"; + case 45: return "OpConstantSampler"; + case 46: return "OpConstantNull"; + case 47: return "Bad"; + case 48: return "OpSpecConstantTrue"; + case 49: return "OpSpecConstantFalse"; + case 50: return "OpSpecConstant"; + case 51: return "OpSpecConstantComposite"; + case 52: return "OpSpecConstantOp"; + case 53: return "Bad"; + case 54: return "OpFunction"; + case 55: return "OpFunctionParameter"; + case 56: return "OpFunctionEnd"; + case 57: return "OpFunctionCall"; + case 58: return "Bad"; + case 59: return "OpVariable"; + case 60: return "OpImageTexelPointer"; + case 61: return "OpLoad"; + case 62: return "OpStore"; + case 63: return "OpCopyMemory"; + case 64: return "OpCopyMemorySized"; + case 65: return "OpAccessChain"; + case 66: return "OpInBoundsAccessChain"; + case 67: return "OpPtrAccessChain"; + case 68: return "OpArrayLength"; + case 69: return "OpGenericPtrMemSemantics"; + case 70: return "OpInBoundsPtrAccessChain"; + case 71: return "OpDecorate"; + case 72: return "OpMemberDecorate"; + case 73: return "OpDecorationGroup"; + case 74: return "OpGroupDecorate"; + case 75: return "OpGroupMemberDecorate"; + case 76: return "Bad"; + case 77: return "OpVectorExtractDynamic"; + case 78: return "OpVectorInsertDynamic"; + case 79: return "OpVectorShuffle"; + case 80: return "OpCompositeConstruct"; + case 81: return "OpCompositeExtract"; + case 82: return "OpCompositeInsert"; + case 83: return "OpCopyObject"; + case 84: return "OpTranspose"; + case 85: return "Bad"; + case 86: return "OpSampledImage"; + case 87: return "OpImageSampleImplicitLod"; + case 88: return "OpImageSampleExplicitLod"; + case 89: return "OpImageSampleDrefImplicitLod"; + case 90: return "OpImageSampleDrefExplicitLod"; + case 91: return "OpImageSampleProjImplicitLod"; + case 92: return "OpImageSampleProjExplicitLod"; + case 93: return "OpImageSampleProjDrefImplicitLod"; + case 94: return "OpImageSampleProjDrefExplicitLod"; + case 95: return "OpImageFetch"; + case 96: return "OpImageGather"; + case 97: return "OpImageDrefGather"; + case 98: return "OpImageRead"; + case 99: return "OpImageWrite"; + case 100: return "OpImage"; + case 101: return "OpImageQueryFormat"; + case 102: return "OpImageQueryOrder"; + case 103: return "OpImageQuerySizeLod"; + case 104: return "OpImageQuerySize"; + case 105: return "OpImageQueryLod"; + case 106: return "OpImageQueryLevels"; + case 107: return "OpImageQuerySamples"; + case 108: return "Bad"; + case 109: return "OpConvertFToU"; + case 110: return "OpConvertFToS"; + case 111: return "OpConvertSToF"; + case 112: return "OpConvertUToF"; + case 113: return "OpUConvert"; + case 114: return "OpSConvert"; + case 115: return "OpFConvert"; + case 116: return "OpQuantizeToF16"; + case 117: return "OpConvertPtrToU"; + case 118: return "OpSatConvertSToU"; + case 119: return "OpSatConvertUToS"; + case 120: return "OpConvertUToPtr"; + case 121: return "OpPtrCastToGeneric"; + case 122: return "OpGenericCastToPtr"; + case 123: return "OpGenericCastToPtrExplicit"; + case 124: return "OpBitcast"; + case 125: return "Bad"; + case 126: return "OpSNegate"; + case 127: return "OpFNegate"; + case 128: return "OpIAdd"; + case 129: return "OpFAdd"; + case 130: return "OpISub"; + case 131: return "OpFSub"; + case 132: return "OpIMul"; + case 133: return "OpFMul"; + case 134: return "OpUDiv"; + case 135: return "OpSDiv"; + case 136: return "OpFDiv"; + case 137: return "OpUMod"; + case 138: return "OpSRem"; + case 139: return "OpSMod"; + case 140: return "OpFRem"; + case 141: return "OpFMod"; + case 142: return "OpVectorTimesScalar"; + case 143: return "OpMatrixTimesScalar"; + case 144: return "OpVectorTimesMatrix"; + case 145: return "OpMatrixTimesVector"; + case 146: return "OpMatrixTimesMatrix"; + case 147: return "OpOuterProduct"; + case 148: return "OpDot"; + case 149: return "OpIAddCarry"; + case 150: return "OpISubBorrow"; + case 151: return "OpUMulExtended"; + case 152: return "OpSMulExtended"; + case 153: return "Bad"; + case 154: return "OpAny"; + case 155: return "OpAll"; + case 156: return "OpIsNan"; + case 157: return "OpIsInf"; + case 158: return "OpIsFinite"; + case 159: return "OpIsNormal"; + case 160: return "OpSignBitSet"; + case 161: return "OpLessOrGreater"; + case 162: return "OpOrdered"; + case 163: return "OpUnordered"; + case 164: return "OpLogicalEqual"; + case 165: return "OpLogicalNotEqual"; + case 166: return "OpLogicalOr"; + case 167: return "OpLogicalAnd"; + case 168: return "OpLogicalNot"; + case 169: return "OpSelect"; + case 170: return "OpIEqual"; + case 171: return "OpINotEqual"; + case 172: return "OpUGreaterThan"; + case 173: return "OpSGreaterThan"; + case 174: return "OpUGreaterThanEqual"; + case 175: return "OpSGreaterThanEqual"; + case 176: return "OpULessThan"; + case 177: return "OpSLessThan"; + case 178: return "OpULessThanEqual"; + case 179: return "OpSLessThanEqual"; + case 180: return "OpFOrdEqual"; + case 181: return "OpFUnordEqual"; + case 182: return "OpFOrdNotEqual"; + case 183: return "OpFUnordNotEqual"; + case 184: return "OpFOrdLessThan"; + case 185: return "OpFUnordLessThan"; + case 186: return "OpFOrdGreaterThan"; + case 187: return "OpFUnordGreaterThan"; + case 188: return "OpFOrdLessThanEqual"; + case 189: return "OpFUnordLessThanEqual"; + case 190: return "OpFOrdGreaterThanEqual"; + case 191: return "OpFUnordGreaterThanEqual"; + case 192: return "Bad"; + case 193: return "Bad"; + case 194: return "OpShiftRightLogical"; + case 195: return "OpShiftRightArithmetic"; + case 196: return "OpShiftLeftLogical"; + case 197: return "OpBitwiseOr"; + case 198: return "OpBitwiseXor"; + case 199: return "OpBitwiseAnd"; + case 200: return "OpNot"; + case 201: return "OpBitFieldInsert"; + case 202: return "OpBitFieldSExtract"; + case 203: return "OpBitFieldUExtract"; + case 204: return "OpBitReverse"; + case 205: return "OpBitCount"; + case 206: return "Bad"; + case 207: return "OpDPdx"; + case 208: return "OpDPdy"; + case 209: return "OpFwidth"; + case 210: return "OpDPdxFine"; + case 211: return "OpDPdyFine"; + case 212: return "OpFwidthFine"; + case 213: return "OpDPdxCoarse"; + case 214: return "OpDPdyCoarse"; + case 215: return "OpFwidthCoarse"; + case 216: return "Bad"; + case 217: return "Bad"; + case 218: return "OpEmitVertex"; + case 219: return "OpEndPrimitive"; + case 220: return "OpEmitStreamVertex"; + case 221: return "OpEndStreamPrimitive"; + case 222: return "Bad"; + case 223: return "Bad"; + case 224: return "OpControlBarrier"; + case 225: return "OpMemoryBarrier"; + case 226: return "Bad"; + case 227: return "OpAtomicLoad"; + case 228: return "OpAtomicStore"; + case 229: return "OpAtomicExchange"; + case 230: return "OpAtomicCompareExchange"; + case 231: return "OpAtomicCompareExchangeWeak"; + case 232: return "OpAtomicIIncrement"; + case 233: return "OpAtomicIDecrement"; + case 234: return "OpAtomicIAdd"; + case 235: return "OpAtomicISub"; + case 236: return "OpAtomicSMin"; + case 237: return "OpAtomicUMin"; + case 238: return "OpAtomicSMax"; + case 239: return "OpAtomicUMax"; + case 240: return "OpAtomicAnd"; + case 241: return "OpAtomicOr"; + case 242: return "OpAtomicXor"; + case 243: return "Bad"; + case 244: return "Bad"; + case 245: return "OpPhi"; + case 246: return "OpLoopMerge"; + case 247: return "OpSelectionMerge"; + case 248: return "OpLabel"; + case 249: return "OpBranch"; + case 250: return "OpBranchConditional"; + case 251: return "OpSwitch"; + case 252: return "OpKill"; + case 253: return "OpReturn"; + case 254: return "OpReturnValue"; + case 255: return "OpUnreachable"; + case 256: return "OpLifetimeStart"; + case 257: return "OpLifetimeStop"; + case 258: return "Bad"; + case 259: return "OpGroupAsyncCopy"; + case 260: return "OpGroupWaitEvents"; + case 261: return "OpGroupAll"; + case 262: return "OpGroupAny"; + case 263: return "OpGroupBroadcast"; + case 264: return "OpGroupIAdd"; + case 265: return "OpGroupFAdd"; + case 266: return "OpGroupFMin"; + case 267: return "OpGroupUMin"; + case 268: return "OpGroupSMin"; + case 269: return "OpGroupFMax"; + case 270: return "OpGroupUMax"; + case 271: return "OpGroupSMax"; + case 272: return "Bad"; + case 273: return "Bad"; + case 274: return "OpReadPipe"; + case 275: return "OpWritePipe"; + case 276: return "OpReservedReadPipe"; + case 277: return "OpReservedWritePipe"; + case 278: return "OpReserveReadPipePackets"; + case 279: return "OpReserveWritePipePackets"; + case 280: return "OpCommitReadPipe"; + case 281: return "OpCommitWritePipe"; + case 282: return "OpIsValidReserveId"; + case 283: return "OpGetNumPipePackets"; + case 284: return "OpGetMaxPipePackets"; + case 285: return "OpGroupReserveReadPipePackets"; + case 286: return "OpGroupReserveWritePipePackets"; + case 287: return "OpGroupCommitReadPipe"; + case 288: return "OpGroupCommitWritePipe"; + case 289: return "Bad"; + case 290: return "Bad"; + case 291: return "OpEnqueueMarker"; + case 292: return "OpEnqueueKernel"; + case 293: return "OpGetKernelNDrangeSubGroupCount"; + case 294: return "OpGetKernelNDrangeMaxSubGroupSize"; + case 295: return "OpGetKernelWorkGroupSize"; + case 296: return "OpGetKernelPreferredWorkGroupSizeMultiple"; + case 297: return "OpRetainEvent"; + case 298: return "OpReleaseEvent"; + case 299: return "OpCreateUserEvent"; + case 300: return "OpIsValidEvent"; + case 301: return "OpSetUserEventStatus"; + case 302: return "OpCaptureEventProfilingInfo"; + case 303: return "OpGetDefaultQueue"; + case 304: return "OpBuildNDRange"; + case 305: return "OpImageSparseSampleImplicitLod"; + case 306: return "OpImageSparseSampleExplicitLod"; + case 307: return "OpImageSparseSampleDrefImplicitLod"; + case 308: return "OpImageSparseSampleDrefExplicitLod"; + case 309: return "OpImageSparseSampleProjImplicitLod"; + case 310: return "OpImageSparseSampleProjExplicitLod"; + case 311: return "OpImageSparseSampleProjDrefImplicitLod"; + case 312: return "OpImageSparseSampleProjDrefExplicitLod"; + case 313: return "OpImageSparseFetch"; + case 314: return "OpImageSparseGather"; + case 315: return "OpImageSparseDrefGather"; + case 316: return "OpImageSparseTexelsResident"; + case 317: return "OpNoLine"; + case 318: return "OpAtomicFlagTestAndSet"; + case 319: return "OpAtomicFlagClear"; + case 320: return "OpImageSparseRead"; + + case 4421: return "OpSubgroupBallotKHR"; + case 4422: return "OpSubgroupFirstInvocationKHR"; + case 4428: return "OpSubgroupAllKHR"; + case 4429: return "OpSubgroupAnyKHR"; + case 4430: return "OpSubgroupAllEqualKHR"; + case 4432: return "OpSubgroupReadInvocationKHR"; + +#ifdef AMD_EXTENSIONS + case 5000: return "OpGroupIAddNonUniformAMD"; + case 5001: return "OpGroupFAddNonUniformAMD"; + case 5002: return "OpGroupFMinNonUniformAMD"; + case 5003: return "OpGroupUMinNonUniformAMD"; + case 5004: return "OpGroupSMinNonUniformAMD"; + case 5005: return "OpGroupFMaxNonUniformAMD"; + case 5006: return "OpGroupUMaxNonUniformAMD"; + case 5007: return "OpGroupSMaxNonUniformAMD"; +#endif + + case OpcodeCeiling: + default: + return "Bad"; + } +} + +// The set of objects that hold all the instruction/operand +// parameterization information. +InstructionParameters InstructionDesc[OpCodeMask + 1]; +OperandParameters ExecutionModeOperands[ExecutionModeCeiling]; +OperandParameters DecorationOperands[DecorationCeiling]; + +EnumDefinition OperandClassParams[OperandCount]; +EnumParameters ExecutionModelParams[ExecutionModelCeiling]; +EnumParameters AddressingParams[AddressingModelCeiling]; +EnumParameters MemoryParams[MemoryModelCeiling]; +EnumParameters ExecutionModeParams[ExecutionModeCeiling]; +EnumParameters StorageParams[StorageClassCeiling]; +EnumParameters SamplerAddressingModeParams[SamplerAddressingModeCeiling]; +EnumParameters SamplerFilterModeParams[SamplerFilterModeCeiling]; +EnumParameters ImageFormatParams[ImageFormatCeiling]; +EnumParameters ImageChannelOrderParams[ImageChannelOrderCeiling]; +EnumParameters ImageChannelDataTypeParams[ImageChannelDataTypeCeiling]; +EnumParameters ImageOperandsParams[ImageOperandsCeiling]; +EnumParameters FPFastMathParams[FPFastMathCeiling]; +EnumParameters FPRoundingModeParams[FPRoundingModeCeiling]; +EnumParameters LinkageTypeParams[LinkageTypeCeiling]; +EnumParameters DecorationParams[DecorationCeiling]; +EnumParameters BuiltInParams[BuiltInCeiling]; +EnumParameters DimensionalityParams[DimensionCeiling]; +EnumParameters FuncParamAttrParams[FuncParamAttrCeiling]; +EnumParameters AccessQualifierParams[AccessQualifierCeiling]; +EnumParameters GroupOperationParams[GroupOperationCeiling]; +EnumParameters LoopControlParams[FunctionControlCeiling]; +EnumParameters SelectionControlParams[SelectControlCeiling]; +EnumParameters FunctionControlParams[FunctionControlCeiling]; +EnumParameters MemorySemanticsParams[MemorySemanticsCeiling]; +EnumParameters MemoryAccessParams[MemoryAccessCeiling]; +EnumParameters ScopeParams[ScopeCeiling]; +EnumParameters KernelEnqueueFlagsParams[KernelEnqueueFlagsCeiling]; +EnumParameters KernelProfilingInfoParams[KernelProfilingInfoCeiling]; +EnumParameters CapabilityParams[CapabilityCeiling]; + +// Set up all the parameterizing descriptions of the opcodes, operands, etc. +void Parameterize() +{ + // only do this once. + static bool initialized = false; + if (initialized) + return; + initialized = true; + + // Exceptions to having a result and a resulting type . + // (Everything is initialized to have both). + + InstructionDesc[OpNop].setResultAndType(false, false); + InstructionDesc[OpSource].setResultAndType(false, false); + InstructionDesc[OpSourceContinued].setResultAndType(false, false); + InstructionDesc[OpSourceExtension].setResultAndType(false, false); + InstructionDesc[OpExtension].setResultAndType(false, false); + InstructionDesc[OpExtInstImport].setResultAndType(true, false); + InstructionDesc[OpCapability].setResultAndType(false, false); + InstructionDesc[OpMemoryModel].setResultAndType(false, false); + InstructionDesc[OpEntryPoint].setResultAndType(false, false); + InstructionDesc[OpExecutionMode].setResultAndType(false, false); + InstructionDesc[OpTypeVoid].setResultAndType(true, false); + InstructionDesc[OpTypeBool].setResultAndType(true, false); + InstructionDesc[OpTypeInt].setResultAndType(true, false); + InstructionDesc[OpTypeFloat].setResultAndType(true, false); + InstructionDesc[OpTypeVector].setResultAndType(true, false); + InstructionDesc[OpTypeMatrix].setResultAndType(true, false); + InstructionDesc[OpTypeImage].setResultAndType(true, false); + InstructionDesc[OpTypeSampler].setResultAndType(true, false); + InstructionDesc[OpTypeSampledImage].setResultAndType(true, false); + InstructionDesc[OpTypeArray].setResultAndType(true, false); + InstructionDesc[OpTypeRuntimeArray].setResultAndType(true, false); + InstructionDesc[OpTypeStruct].setResultAndType(true, false); + InstructionDesc[OpTypeOpaque].setResultAndType(true, false); + InstructionDesc[OpTypePointer].setResultAndType(true, false); + InstructionDesc[OpTypeForwardPointer].setResultAndType(false, false); + InstructionDesc[OpTypeFunction].setResultAndType(true, false); + InstructionDesc[OpTypeEvent].setResultAndType(true, false); + InstructionDesc[OpTypeDeviceEvent].setResultAndType(true, false); + InstructionDesc[OpTypeReserveId].setResultAndType(true, false); + InstructionDesc[OpTypeQueue].setResultAndType(true, false); + InstructionDesc[OpTypePipe].setResultAndType(true, false); + InstructionDesc[OpFunctionEnd].setResultAndType(false, false); + InstructionDesc[OpStore].setResultAndType(false, false); + InstructionDesc[OpImageWrite].setResultAndType(false, false); + InstructionDesc[OpDecorationGroup].setResultAndType(true, false); + InstructionDesc[OpDecorate].setResultAndType(false, false); + InstructionDesc[OpMemberDecorate].setResultAndType(false, false); + InstructionDesc[OpGroupDecorate].setResultAndType(false, false); + InstructionDesc[OpGroupMemberDecorate].setResultAndType(false, false); + InstructionDesc[OpName].setResultAndType(false, false); + InstructionDesc[OpMemberName].setResultAndType(false, false); + InstructionDesc[OpString].setResultAndType(true, false); + InstructionDesc[OpLine].setResultAndType(false, false); + InstructionDesc[OpNoLine].setResultAndType(false, false); + InstructionDesc[OpCopyMemory].setResultAndType(false, false); + InstructionDesc[OpCopyMemorySized].setResultAndType(false, false); + InstructionDesc[OpEmitVertex].setResultAndType(false, false); + InstructionDesc[OpEndPrimitive].setResultAndType(false, false); + InstructionDesc[OpEmitStreamVertex].setResultAndType(false, false); + InstructionDesc[OpEndStreamPrimitive].setResultAndType(false, false); + InstructionDesc[OpControlBarrier].setResultAndType(false, false); + InstructionDesc[OpMemoryBarrier].setResultAndType(false, false); + InstructionDesc[OpAtomicStore].setResultAndType(false, false); + InstructionDesc[OpLoopMerge].setResultAndType(false, false); + InstructionDesc[OpSelectionMerge].setResultAndType(false, false); + InstructionDesc[OpLabel].setResultAndType(true, false); + InstructionDesc[OpBranch].setResultAndType(false, false); + InstructionDesc[OpBranchConditional].setResultAndType(false, false); + InstructionDesc[OpSwitch].setResultAndType(false, false); + InstructionDesc[OpKill].setResultAndType(false, false); + InstructionDesc[OpReturn].setResultAndType(false, false); + InstructionDesc[OpReturnValue].setResultAndType(false, false); + InstructionDesc[OpUnreachable].setResultAndType(false, false); + InstructionDesc[OpLifetimeStart].setResultAndType(false, false); + InstructionDesc[OpLifetimeStop].setResultAndType(false, false); + InstructionDesc[OpCommitReadPipe].setResultAndType(false, false); + InstructionDesc[OpCommitWritePipe].setResultAndType(false, false); + InstructionDesc[OpGroupCommitWritePipe].setResultAndType(false, false); + InstructionDesc[OpGroupCommitReadPipe].setResultAndType(false, false); + InstructionDesc[OpCaptureEventProfilingInfo].setResultAndType(false, false); + InstructionDesc[OpSetUserEventStatus].setResultAndType(false, false); + InstructionDesc[OpRetainEvent].setResultAndType(false, false); + InstructionDesc[OpReleaseEvent].setResultAndType(false, false); + InstructionDesc[OpGroupWaitEvents].setResultAndType(false, false); + InstructionDesc[OpAtomicFlagClear].setResultAndType(false, false); + + // Specific additional context-dependent operands + + ExecutionModeOperands[ExecutionModeInvocations].push(OperandLiteralNumber, "'Number of <>'"); + + ExecutionModeOperands[ExecutionModeLocalSize].push(OperandLiteralNumber, "'x size'"); + ExecutionModeOperands[ExecutionModeLocalSize].push(OperandLiteralNumber, "'y size'"); + ExecutionModeOperands[ExecutionModeLocalSize].push(OperandLiteralNumber, "'z size'"); + + ExecutionModeOperands[ExecutionModeLocalSizeHint].push(OperandLiteralNumber, "'x size'"); + ExecutionModeOperands[ExecutionModeLocalSizeHint].push(OperandLiteralNumber, "'y size'"); + ExecutionModeOperands[ExecutionModeLocalSizeHint].push(OperandLiteralNumber, "'z size'"); + + ExecutionModeOperands[ExecutionModeOutputVertices].push(OperandLiteralNumber, "'Vertex count'"); + ExecutionModeOperands[ExecutionModeVecTypeHint].push(OperandLiteralNumber, "'Vector type'"); + + DecorationOperands[DecorationStream].push(OperandLiteralNumber, "'Stream Number'"); + DecorationOperands[DecorationLocation].push(OperandLiteralNumber, "'Location'"); + DecorationOperands[DecorationComponent].push(OperandLiteralNumber, "'Component'"); + DecorationOperands[DecorationIndex].push(OperandLiteralNumber, "'Index'"); + DecorationOperands[DecorationBinding].push(OperandLiteralNumber, "'Binding Point'"); + DecorationOperands[DecorationDescriptorSet].push(OperandLiteralNumber, "'Descriptor Set'"); + DecorationOperands[DecorationOffset].push(OperandLiteralNumber, "'Byte Offset'"); + DecorationOperands[DecorationXfbBuffer].push(OperandLiteralNumber, "'XFB Buffer Number'"); + DecorationOperands[DecorationXfbStride].push(OperandLiteralNumber, "'XFB Stride'"); + DecorationOperands[DecorationArrayStride].push(OperandLiteralNumber, "'Array Stride'"); + DecorationOperands[DecorationMatrixStride].push(OperandLiteralNumber, "'Matrix Stride'"); + DecorationOperands[DecorationBuiltIn].push(OperandLiteralNumber, "See <>"); + DecorationOperands[DecorationFPRoundingMode].push(OperandFPRoundingMode, "'Floating-Point Rounding Mode'"); + DecorationOperands[DecorationFPFastMathMode].push(OperandFPFastMath, "'Fast-Math Mode'"); + DecorationOperands[DecorationLinkageAttributes].push(OperandLiteralString, "'Name'"); + DecorationOperands[DecorationLinkageAttributes].push(OperandLinkageType, "'Linkage Type'"); + DecorationOperands[DecorationFuncParamAttr].push(OperandFuncParamAttr, "'Function Parameter Attribute'"); + DecorationOperands[DecorationSpecId].push(OperandLiteralNumber, "'Specialization Constant ID'"); + DecorationOperands[DecorationInputAttachmentIndex].push(OperandLiteralNumber, "'Attachment Index'"); + DecorationOperands[DecorationAlignment].push(OperandLiteralNumber, "'Alignment'"); + + OperandClassParams[OperandSource].set(SourceLanguageCeiling, SourceString, 0); + OperandClassParams[OperandExecutionModel].set(ExecutionModelCeiling, ExecutionModelString, ExecutionModelParams); + OperandClassParams[OperandAddressing].set(AddressingModelCeiling, AddressingString, AddressingParams); + OperandClassParams[OperandMemory].set(MemoryModelCeiling, MemoryString, MemoryParams); + OperandClassParams[OperandExecutionMode].set(ExecutionModeCeiling, ExecutionModeString, ExecutionModeParams); + OperandClassParams[OperandExecutionMode].setOperands(ExecutionModeOperands); + OperandClassParams[OperandStorage].set(StorageClassCeiling, StorageClassString, StorageParams); + OperandClassParams[OperandDimensionality].set(DimensionCeiling, DimensionString, DimensionalityParams); + OperandClassParams[OperandSamplerAddressingMode].set(SamplerAddressingModeCeiling, SamplerAddressingModeString, SamplerAddressingModeParams); + OperandClassParams[OperandSamplerFilterMode].set(SamplerFilterModeCeiling, SamplerFilterModeString, SamplerFilterModeParams); + OperandClassParams[OperandSamplerImageFormat].set(ImageFormatCeiling, ImageFormatString, ImageFormatParams); + OperandClassParams[OperandImageChannelOrder].set(ImageChannelOrderCeiling, ImageChannelOrderString, ImageChannelOrderParams); + OperandClassParams[OperandImageChannelDataType].set(ImageChannelDataTypeCeiling, ImageChannelDataTypeString, ImageChannelDataTypeParams); + OperandClassParams[OperandImageOperands].set(ImageOperandsCeiling, ImageOperandsString, ImageOperandsParams, true); + OperandClassParams[OperandFPFastMath].set(FPFastMathCeiling, FPFastMathString, FPFastMathParams, true); + OperandClassParams[OperandFPRoundingMode].set(FPRoundingModeCeiling, FPRoundingModeString, FPRoundingModeParams); + OperandClassParams[OperandLinkageType].set(LinkageTypeCeiling, LinkageTypeString, LinkageTypeParams); + OperandClassParams[OperandFuncParamAttr].set(FuncParamAttrCeiling, FuncParamAttrString, FuncParamAttrParams); + OperandClassParams[OperandAccessQualifier].set(AccessQualifierCeiling, AccessQualifierString, AccessQualifierParams); + OperandClassParams[OperandDecoration].set(DecorationCeiling, DecorationString, DecorationParams); + OperandClassParams[OperandDecoration].setOperands(DecorationOperands); + OperandClassParams[OperandBuiltIn].set(BuiltInCeiling, BuiltInString, BuiltInParams); + OperandClassParams[OperandSelect].set(SelectControlCeiling, SelectControlString, SelectionControlParams, true); + OperandClassParams[OperandLoop].set(LoopControlCeiling, LoopControlString, LoopControlParams, true); + OperandClassParams[OperandFunction].set(FunctionControlCeiling, FunctionControlString, FunctionControlParams, true); + OperandClassParams[OperandMemorySemantics].set(MemorySemanticsCeiling, MemorySemanticsString, MemorySemanticsParams, true); + OperandClassParams[OperandMemoryAccess].set(MemoryAccessCeiling, MemoryAccessString, MemoryAccessParams, true); + OperandClassParams[OperandScope].set(ScopeCeiling, ScopeString, ScopeParams); + OperandClassParams[OperandGroupOperation].set(GroupOperationCeiling, GroupOperationString, GroupOperationParams); + OperandClassParams[OperandKernelEnqueueFlags].set(KernelEnqueueFlagsCeiling, KernelEnqueueFlagsString, KernelEnqueueFlagsParams); + OperandClassParams[OperandKernelProfilingInfo].set(KernelProfilingInfoCeiling, KernelProfilingInfoString, KernelProfilingInfoParams, true); + OperandClassParams[OperandCapability].set(CapabilityCeiling, CapabilityString, CapabilityParams); + OperandClassParams[OperandOpcode].set(OpcodeCeiling, OpcodeString, 0); + + CapabilityParams[CapabilityShader].caps.push_back(CapabilityMatrix); + CapabilityParams[CapabilityGeometry].caps.push_back(CapabilityShader); + CapabilityParams[CapabilityTessellation].caps.push_back(CapabilityShader); + CapabilityParams[CapabilityVector16].caps.push_back(CapabilityKernel); + CapabilityParams[CapabilityFloat16Buffer].caps.push_back(CapabilityKernel); + CapabilityParams[CapabilityInt64Atomics].caps.push_back(CapabilityInt64); + CapabilityParams[CapabilityImageBasic].caps.push_back(CapabilityKernel); + CapabilityParams[CapabilityImageReadWrite].caps.push_back(CapabilityImageBasic); + CapabilityParams[CapabilityImageMipmap].caps.push_back(CapabilityImageBasic); + CapabilityParams[CapabilityPipes].caps.push_back(CapabilityKernel); + CapabilityParams[CapabilityDeviceEnqueue].caps.push_back(CapabilityKernel); + CapabilityParams[CapabilityLiteralSampler].caps.push_back(CapabilityKernel); + CapabilityParams[CapabilityAtomicStorage].caps.push_back(CapabilityShader); + CapabilityParams[CapabilitySampleRateShading].caps.push_back(CapabilityShader); + CapabilityParams[CapabilityTessellationPointSize].caps.push_back(CapabilityTessellation); + CapabilityParams[CapabilityGeometryPointSize].caps.push_back(CapabilityGeometry); + CapabilityParams[CapabilityImageGatherExtended].caps.push_back(CapabilityShader); + CapabilityParams[CapabilityStorageImageExtendedFormats].caps.push_back(CapabilityShader); + CapabilityParams[CapabilityStorageImageMultisample].caps.push_back(CapabilityShader); + CapabilityParams[CapabilityUniformBufferArrayDynamicIndexing].caps.push_back(CapabilityShader); + CapabilityParams[CapabilitySampledImageArrayDynamicIndexing].caps.push_back(CapabilityShader); + CapabilityParams[CapabilityStorageBufferArrayDynamicIndexing].caps.push_back(CapabilityShader); + CapabilityParams[CapabilityStorageImageArrayDynamicIndexing].caps.push_back(CapabilityShader); + CapabilityParams[CapabilityClipDistance].caps.push_back(CapabilityShader); + CapabilityParams[CapabilityCullDistance].caps.push_back(CapabilityShader); + CapabilityParams[CapabilityGenericPointer].caps.push_back(CapabilityAddresses); + CapabilityParams[CapabilityInt8].caps.push_back(CapabilityKernel); + CapabilityParams[CapabilityInputAttachment].caps.push_back(CapabilityShader); + CapabilityParams[CapabilityMinLod].caps.push_back(CapabilityShader); + CapabilityParams[CapabilitySparseResidency].caps.push_back(CapabilityShader); + CapabilityParams[CapabilitySampled1D].caps.push_back(CapabilityShader); + CapabilityParams[CapabilitySampledRect].caps.push_back(CapabilityShader); + CapabilityParams[CapabilitySampledBuffer].caps.push_back(CapabilityShader); + CapabilityParams[CapabilitySampledCubeArray].caps.push_back(CapabilityShader); + CapabilityParams[CapabilityImageMSArray].caps.push_back(CapabilityShader); + CapabilityParams[CapabilityImage1D].caps.push_back(CapabilitySampled1D); + CapabilityParams[CapabilityImageRect].caps.push_back(CapabilitySampledRect); + CapabilityParams[CapabilityImageBuffer].caps.push_back(CapabilitySampledBuffer); + CapabilityParams[CapabilityImageCubeArray].caps.push_back(CapabilitySampledCubeArray); + CapabilityParams[CapabilityImageQuery].caps.push_back(CapabilityShader); + CapabilityParams[CapabilityDerivativeControl].caps.push_back(CapabilityShader); + CapabilityParams[CapabilityInterpolationFunction].caps.push_back(CapabilityShader); + CapabilityParams[CapabilityTransformFeedback].caps.push_back(CapabilityShader); + CapabilityParams[CapabilityGeometryStreams].caps.push_back(CapabilityGeometry); + CapabilityParams[CapabilityStorageImageReadWithoutFormat].caps.push_back(CapabilityShader); + CapabilityParams[CapabilityStorageImageWriteWithoutFormat].caps.push_back(CapabilityShader); + CapabilityParams[CapabilityMultiViewport].caps.push_back(CapabilityGeometry); + + AddressingParams[AddressingModelPhysical32].caps.push_back(CapabilityAddresses); + AddressingParams[AddressingModelPhysical64].caps.push_back(CapabilityAddresses); + + MemoryParams[MemoryModelSimple].caps.push_back(CapabilityShader); + MemoryParams[MemoryModelGLSL450].caps.push_back(CapabilityShader); + MemoryParams[MemoryModelOpenCL].caps.push_back(CapabilityKernel); + + MemorySemanticsParams[MemorySemanticsUniformMemoryShift].caps.push_back(CapabilityShader); + MemorySemanticsParams[MemorySemanticsAtomicCounterMemoryShift].caps.push_back(CapabilityAtomicStorage); + + ExecutionModelParams[ExecutionModelVertex].caps.push_back(CapabilityShader); + ExecutionModelParams[ExecutionModelTessellationControl].caps.push_back(CapabilityTessellation); + ExecutionModelParams[ExecutionModelTessellationEvaluation].caps.push_back(CapabilityTessellation); + ExecutionModelParams[ExecutionModelGeometry].caps.push_back(CapabilityGeometry); + ExecutionModelParams[ExecutionModelFragment].caps.push_back(CapabilityShader); + ExecutionModelParams[ExecutionModelGLCompute].caps.push_back(CapabilityShader); + ExecutionModelParams[ExecutionModelKernel].caps.push_back(CapabilityKernel); + + // Storage capabilites + StorageParams[StorageClassInput].caps.push_back(CapabilityShader); + StorageParams[StorageClassUniform].caps.push_back(CapabilityShader); + StorageParams[StorageClassOutput].caps.push_back(CapabilityShader); + StorageParams[StorageClassPrivate].caps.push_back(CapabilityShader); + StorageParams[StorageClassGeneric].caps.push_back(CapabilityKernel); + StorageParams[StorageClassAtomicCounter].caps.push_back(CapabilityAtomicStorage); + StorageParams[StorageClassPushConstant].caps.push_back(CapabilityShader); + + // Sampler Filter & Addressing mode capabilities + SamplerAddressingModeParams[SamplerAddressingModeNone].caps.push_back(CapabilityKernel); + SamplerAddressingModeParams[SamplerAddressingModeClampToEdge].caps.push_back(CapabilityKernel); + SamplerAddressingModeParams[SamplerAddressingModeClamp].caps.push_back(CapabilityKernel); + SamplerAddressingModeParams[SamplerAddressingModeRepeat].caps.push_back(CapabilityKernel); + SamplerAddressingModeParams[SamplerAddressingModeRepeatMirrored].caps.push_back(CapabilityKernel); + + SamplerFilterModeParams[SamplerFilterModeNearest].caps.push_back(CapabilityKernel); + SamplerFilterModeParams[SamplerFilterModeLinear].caps.push_back(CapabilityKernel); + + // image format capabilities + + // ES/Desktop float + ImageFormatParams[ImageFormatRgba32f].caps.push_back(CapabilityShader); + ImageFormatParams[ImageFormatRgba16f].caps.push_back(CapabilityShader); + ImageFormatParams[ImageFormatR32f].caps.push_back(CapabilityShader); + ImageFormatParams[ImageFormatRgba8].caps.push_back(CapabilityShader); + ImageFormatParams[ImageFormatRgba8Snorm].caps.push_back(CapabilityShader); + + // Desktop float + ImageFormatParams[ImageFormatRg32f].caps.push_back(CapabilityStorageImageExtendedFormats); + ImageFormatParams[ImageFormatRg16f].caps.push_back(CapabilityStorageImageExtendedFormats); + ImageFormatParams[ImageFormatR11fG11fB10f].caps.push_back(CapabilityStorageImageExtendedFormats); + ImageFormatParams[ImageFormatR16f].caps.push_back(CapabilityStorageImageExtendedFormats); + ImageFormatParams[ImageFormatRgba16].caps.push_back(CapabilityStorageImageExtendedFormats); + ImageFormatParams[ImageFormatRgb10A2].caps.push_back(CapabilityStorageImageExtendedFormats); + ImageFormatParams[ImageFormatRg16].caps.push_back(CapabilityStorageImageExtendedFormats); + ImageFormatParams[ImageFormatRg8].caps.push_back(CapabilityStorageImageExtendedFormats); + ImageFormatParams[ImageFormatR16].caps.push_back(CapabilityStorageImageExtendedFormats); + ImageFormatParams[ImageFormatR8].caps.push_back(CapabilityStorageImageExtendedFormats); + ImageFormatParams[ImageFormatRgba16Snorm].caps.push_back(CapabilityStorageImageExtendedFormats); + ImageFormatParams[ImageFormatRg16Snorm].caps.push_back(CapabilityStorageImageExtendedFormats); + ImageFormatParams[ImageFormatRg8Snorm].caps.push_back(CapabilityStorageImageExtendedFormats); + ImageFormatParams[ImageFormatR16Snorm].caps.push_back(CapabilityStorageImageExtendedFormats); + ImageFormatParams[ImageFormatR8Snorm].caps.push_back(CapabilityStorageImageExtendedFormats); + + // ES/Desktop int + ImageFormatParams[ImageFormatRgba32i].caps.push_back(CapabilityShader); + ImageFormatParams[ImageFormatRgba16i].caps.push_back(CapabilityShader); + ImageFormatParams[ImageFormatRgba8i].caps.push_back(CapabilityShader); + ImageFormatParams[ImageFormatR32i].caps.push_back(CapabilityShader); + + // Desktop int + ImageFormatParams[ImageFormatRg32i].caps.push_back(CapabilityStorageImageExtendedFormats); + ImageFormatParams[ImageFormatRg16i].caps.push_back(CapabilityStorageImageExtendedFormats); + ImageFormatParams[ImageFormatRg8i].caps.push_back(CapabilityStorageImageExtendedFormats); + ImageFormatParams[ImageFormatR16i].caps.push_back(CapabilityStorageImageExtendedFormats); + ImageFormatParams[ImageFormatR8i].caps.push_back(CapabilityStorageImageExtendedFormats); + + // ES/Desktop uint + ImageFormatParams[ImageFormatRgba32ui].caps.push_back(CapabilityShader); + ImageFormatParams[ImageFormatRgba16ui].caps.push_back(CapabilityShader); + ImageFormatParams[ImageFormatRgba8ui].caps.push_back(CapabilityShader); + ImageFormatParams[ImageFormatR32ui].caps.push_back(CapabilityShader); + + // Desktop uint + ImageFormatParams[ImageFormatRgb10a2ui].caps.push_back(CapabilityStorageImageExtendedFormats); + ImageFormatParams[ImageFormatRg32ui].caps.push_back(CapabilityStorageImageExtendedFormats); + ImageFormatParams[ImageFormatRg16ui].caps.push_back(CapabilityStorageImageExtendedFormats); + ImageFormatParams[ImageFormatRg8ui].caps.push_back(CapabilityStorageImageExtendedFormats); + ImageFormatParams[ImageFormatR16ui].caps.push_back(CapabilityStorageImageExtendedFormats); + ImageFormatParams[ImageFormatR8ui].caps.push_back(CapabilityStorageImageExtendedFormats); + + // image channel order capabilities + for (int i = 0; i < ImageChannelOrderCeiling; ++i) { + ImageChannelOrderParams[i].caps.push_back(CapabilityKernel); + } + + // image channel type capabilities + for (int i = 0; i < ImageChannelDataTypeCeiling; ++i) { + ImageChannelDataTypeParams[i].caps.push_back(CapabilityKernel); + } + + // image lookup operands + ImageOperandsParams[ImageOperandsBiasShift].caps.push_back(CapabilityShader); + ImageOperandsParams[ImageOperandsOffsetShift].caps.push_back(CapabilityImageGatherExtended); + ImageOperandsParams[ImageOperandsMinLodShift].caps.push_back(CapabilityMinLod); + + // fast math flags capabilities + for (int i = 0; i < FPFastMathCeiling; ++i) { + FPFastMathParams[i].caps.push_back(CapabilityKernel); + } + + // fp rounding mode capabilities + for (int i = 0; i < FPRoundingModeCeiling; ++i) { + FPRoundingModeParams[i].caps.push_back(CapabilityKernel); + } + + // linkage types + for (int i = 0; i < LinkageTypeCeiling; ++i) { + LinkageTypeParams[i].caps.push_back(CapabilityLinkage); + } + + // function argument types + for (int i = 0; i < FuncParamAttrCeiling; ++i) { + FuncParamAttrParams[i].caps.push_back(CapabilityKernel); + } + + // function argument types + for (int i = 0; i < AccessQualifierCeiling; ++i) { + AccessQualifierParams[i].caps.push_back(CapabilityKernel); + } + + ExecutionModeParams[ExecutionModeInvocations].caps.push_back(CapabilityGeometry); + ExecutionModeParams[ExecutionModeSpacingEqual].caps.push_back(CapabilityTessellation); + ExecutionModeParams[ExecutionModeSpacingFractionalEven].caps.push_back(CapabilityTessellation); + ExecutionModeParams[ExecutionModeSpacingFractionalOdd].caps.push_back(CapabilityTessellation); + ExecutionModeParams[ExecutionModeVertexOrderCw].caps.push_back(CapabilityTessellation); + ExecutionModeParams[ExecutionModeVertexOrderCcw].caps.push_back(CapabilityTessellation); + ExecutionModeParams[ExecutionModePixelCenterInteger].caps.push_back(CapabilityShader); + ExecutionModeParams[ExecutionModeOriginUpperLeft].caps.push_back(CapabilityShader); + ExecutionModeParams[ExecutionModeOriginLowerLeft].caps.push_back(CapabilityShader); + ExecutionModeParams[ExecutionModeEarlyFragmentTests].caps.push_back(CapabilityShader); + ExecutionModeParams[ExecutionModePointMode].caps.push_back(CapabilityTessellation); + ExecutionModeParams[ExecutionModeXfb].caps.push_back(CapabilityTransformFeedback); + ExecutionModeParams[ExecutionModeDepthReplacing].caps.push_back(CapabilityShader); + ExecutionModeParams[ExecutionModeDepthGreater].caps.push_back(CapabilityShader); + ExecutionModeParams[ExecutionModeDepthLess].caps.push_back(CapabilityShader); + ExecutionModeParams[ExecutionModeDepthUnchanged].caps.push_back(CapabilityShader); + ExecutionModeParams[ExecutionModeLocalSizeHint].caps.push_back(CapabilityKernel); + ExecutionModeParams[ExecutionModeInputPoints].caps.push_back(CapabilityGeometry); + ExecutionModeParams[ExecutionModeInputLines].caps.push_back(CapabilityGeometry); + ExecutionModeParams[ExecutionModeInputLinesAdjacency].caps.push_back(CapabilityGeometry); + ExecutionModeParams[ExecutionModeTriangles].caps.push_back(CapabilityGeometry); + ExecutionModeParams[ExecutionModeTriangles].caps.push_back(CapabilityTessellation); + ExecutionModeParams[ExecutionModeInputTrianglesAdjacency].caps.push_back(CapabilityGeometry); + ExecutionModeParams[ExecutionModeQuads].caps.push_back(CapabilityTessellation); + ExecutionModeParams[ExecutionModeIsolines].caps.push_back(CapabilityTessellation); + ExecutionModeParams[ExecutionModeOutputVertices].caps.push_back(CapabilityGeometry); + ExecutionModeParams[ExecutionModeOutputVertices].caps.push_back(CapabilityTessellation); + ExecutionModeParams[ExecutionModeOutputPoints].caps.push_back(CapabilityGeometry); + ExecutionModeParams[ExecutionModeOutputLineStrip].caps.push_back(CapabilityGeometry); + ExecutionModeParams[ExecutionModeOutputTriangleStrip].caps.push_back(CapabilityGeometry); + ExecutionModeParams[ExecutionModeVecTypeHint].caps.push_back(CapabilityKernel); + ExecutionModeParams[ExecutionModeContractionOff].caps.push_back(CapabilityKernel); + + DecorationParams[DecorationRelaxedPrecision].caps.push_back(CapabilityShader); + DecorationParams[DecorationBlock].caps.push_back(CapabilityShader); + DecorationParams[DecorationBufferBlock].caps.push_back(CapabilityShader); + DecorationParams[DecorationRowMajor].caps.push_back(CapabilityMatrix); + DecorationParams[DecorationColMajor].caps.push_back(CapabilityMatrix); + DecorationParams[DecorationGLSLShared].caps.push_back(CapabilityShader); + DecorationParams[DecorationGLSLPacked].caps.push_back(CapabilityShader); + DecorationParams[DecorationNoPerspective].caps.push_back(CapabilityShader); + DecorationParams[DecorationFlat].caps.push_back(CapabilityShader); + DecorationParams[DecorationPatch].caps.push_back(CapabilityTessellation); + DecorationParams[DecorationCentroid].caps.push_back(CapabilityShader); + DecorationParams[DecorationSample].caps.push_back(CapabilitySampleRateShading); + DecorationParams[DecorationInvariant].caps.push_back(CapabilityShader); + DecorationParams[DecorationConstant].caps.push_back(CapabilityKernel); + DecorationParams[DecorationUniform].caps.push_back(CapabilityShader); + DecorationParams[DecorationCPacked].caps.push_back(CapabilityKernel); + DecorationParams[DecorationSaturatedConversion].caps.push_back(CapabilityKernel); + DecorationParams[DecorationStream].caps.push_back(CapabilityGeometryStreams); + DecorationParams[DecorationLocation].caps.push_back(CapabilityShader); + DecorationParams[DecorationComponent].caps.push_back(CapabilityShader); + DecorationParams[DecorationOffset].caps.push_back(CapabilityShader); + DecorationParams[DecorationIndex].caps.push_back(CapabilityShader); + DecorationParams[DecorationBinding].caps.push_back(CapabilityShader); + DecorationParams[DecorationDescriptorSet].caps.push_back(CapabilityShader); + DecorationParams[DecorationXfbBuffer].caps.push_back(CapabilityTransformFeedback); + DecorationParams[DecorationXfbStride].caps.push_back(CapabilityTransformFeedback); + DecorationParams[DecorationArrayStride].caps.push_back(CapabilityShader); + DecorationParams[DecorationMatrixStride].caps.push_back(CapabilityMatrix); + DecorationParams[DecorationFuncParamAttr].caps.push_back(CapabilityKernel); + DecorationParams[DecorationFPRoundingMode].caps.push_back(CapabilityKernel); + DecorationParams[DecorationFPFastMathMode].caps.push_back(CapabilityKernel); + DecorationParams[DecorationLinkageAttributes].caps.push_back(CapabilityLinkage); + DecorationParams[DecorationSpecId].caps.push_back(CapabilityShader); + DecorationParams[DecorationNoContraction].caps.push_back(CapabilityShader); + DecorationParams[DecorationInputAttachmentIndex].caps.push_back(CapabilityInputAttachment); + DecorationParams[DecorationAlignment].caps.push_back(CapabilityKernel); + + BuiltInParams[BuiltInPosition].caps.push_back(CapabilityShader); + BuiltInParams[BuiltInPointSize].caps.push_back(CapabilityShader); + BuiltInParams[BuiltInClipDistance].caps.push_back(CapabilityClipDistance); + BuiltInParams[BuiltInCullDistance].caps.push_back(CapabilityCullDistance); + + BuiltInParams[BuiltInVertexId].caps.push_back(CapabilityShader); + BuiltInParams[BuiltInVertexId].desc = "Vertex ID, which takes on values 0, 1, 2, . . . ."; + + BuiltInParams[BuiltInInstanceId].caps.push_back(CapabilityShader); + BuiltInParams[BuiltInInstanceId].desc = "Instance ID, which takes on values 0, 1, 2, . . . ."; + + BuiltInParams[BuiltInVertexIndex].caps.push_back(CapabilityShader); + BuiltInParams[BuiltInVertexIndex].desc = "Vertex index, which takes on values base, base+1, base+2, . . . ."; + + BuiltInParams[BuiltInInstanceIndex].caps.push_back(CapabilityShader); + BuiltInParams[BuiltInInstanceIndex].desc = "Instance index, which takes on values base, base+1, base+2, . . . ."; + + BuiltInParams[BuiltInPrimitiveId].caps.push_back(CapabilityGeometry); + BuiltInParams[BuiltInPrimitiveId].caps.push_back(CapabilityTessellation); + BuiltInParams[BuiltInInvocationId].caps.push_back(CapabilityGeometry); + BuiltInParams[BuiltInInvocationId].caps.push_back(CapabilityTessellation); + BuiltInParams[BuiltInLayer].caps.push_back(CapabilityGeometry); + BuiltInParams[BuiltInViewportIndex].caps.push_back(CapabilityMultiViewport); + BuiltInParams[BuiltInTessLevelOuter].caps.push_back(CapabilityTessellation); + BuiltInParams[BuiltInTessLevelInner].caps.push_back(CapabilityTessellation); + BuiltInParams[BuiltInTessCoord].caps.push_back(CapabilityTessellation); + BuiltInParams[BuiltInPatchVertices].caps.push_back(CapabilityTessellation); + BuiltInParams[BuiltInFragCoord].caps.push_back(CapabilityShader); + BuiltInParams[BuiltInPointCoord].caps.push_back(CapabilityShader); + BuiltInParams[BuiltInFrontFacing].caps.push_back(CapabilityShader); + BuiltInParams[BuiltInSampleId].caps.push_back(CapabilitySampleRateShading); + BuiltInParams[BuiltInSamplePosition].caps.push_back(CapabilitySampleRateShading); + BuiltInParams[BuiltInSampleMask].caps.push_back(CapabilitySampleRateShading); + BuiltInParams[BuiltInFragDepth].caps.push_back(CapabilityShader); + BuiltInParams[BuiltInHelperInvocation].caps.push_back(CapabilityShader); + BuiltInParams[BuiltInWorkDim].caps.push_back(CapabilityKernel); + BuiltInParams[BuiltInGlobalSize].caps.push_back(CapabilityKernel); + BuiltInParams[BuiltInEnqueuedWorkgroupSize].caps.push_back(CapabilityKernel); + BuiltInParams[BuiltInGlobalOffset].caps.push_back(CapabilityKernel); + BuiltInParams[BuiltInGlobalLinearId].caps.push_back(CapabilityKernel); + + BuiltInParams[BuiltInSubgroupSize].caps.push_back(CapabilityKernel); + BuiltInParams[BuiltInSubgroupMaxSize].caps.push_back(CapabilityKernel); + BuiltInParams[BuiltInNumSubgroups].caps.push_back(CapabilityKernel); + BuiltInParams[BuiltInNumEnqueuedSubgroups].caps.push_back(CapabilityKernel); + BuiltInParams[BuiltInSubgroupId].caps.push_back(CapabilityKernel); + BuiltInParams[BuiltInSubgroupLocalInvocationId].caps.push_back(CapabilityKernel); + + DimensionalityParams[Dim1D].caps.push_back(CapabilitySampled1D); + DimensionalityParams[DimCube].caps.push_back(CapabilityShader); + DimensionalityParams[DimRect].caps.push_back(CapabilitySampledRect); + DimensionalityParams[DimBuffer].caps.push_back(CapabilitySampledBuffer); + DimensionalityParams[DimSubpassData].caps.push_back(CapabilityInputAttachment); + + // Group Operations + for (int i = 0; i < GroupOperationCeiling; ++i) { + GroupOperationParams[i].caps.push_back(CapabilityKernel); + } + + // Enqueue flags + for (int i = 0; i < KernelEnqueueFlagsCeiling; ++i) { + KernelEnqueueFlagsParams[i].caps.push_back(CapabilityKernel); + } + + // Profiling info + KernelProfilingInfoParams[0].caps.push_back(CapabilityKernel); + + // set name of operator, an initial set of style operands, and the description + + InstructionDesc[OpSource].operands.push(OperandSource, ""); + InstructionDesc[OpSource].operands.push(OperandLiteralNumber, "'Version'"); + InstructionDesc[OpSource].operands.push(OperandId, "'File'", true); + InstructionDesc[OpSource].operands.push(OperandLiteralString, "'Source'", true); + + InstructionDesc[OpSourceContinued].operands.push(OperandLiteralString, "'Continued Source'"); + + InstructionDesc[OpSourceExtension].operands.push(OperandLiteralString, "'Extension'"); + + InstructionDesc[OpName].operands.push(OperandId, "'Target'"); + InstructionDesc[OpName].operands.push(OperandLiteralString, "'Name'"); + + InstructionDesc[OpMemberName].operands.push(OperandId, "'Type'"); + InstructionDesc[OpMemberName].operands.push(OperandLiteralNumber, "'Member'"); + InstructionDesc[OpMemberName].operands.push(OperandLiteralString, "'Name'"); + + InstructionDesc[OpString].operands.push(OperandLiteralString, "'String'"); + + InstructionDesc[OpLine].operands.push(OperandId, "'File'"); + InstructionDesc[OpLine].operands.push(OperandLiteralNumber, "'Line'"); + InstructionDesc[OpLine].operands.push(OperandLiteralNumber, "'Column'"); + + InstructionDesc[OpExtension].operands.push(OperandLiteralString, "'Name'"); + + InstructionDesc[OpExtInstImport].operands.push(OperandLiteralString, "'Name'"); + + InstructionDesc[OpCapability].operands.push(OperandCapability, "'Capability'"); + + InstructionDesc[OpMemoryModel].operands.push(OperandAddressing, ""); + InstructionDesc[OpMemoryModel].operands.push(OperandMemory, ""); + + InstructionDesc[OpEntryPoint].operands.push(OperandExecutionModel, ""); + InstructionDesc[OpEntryPoint].operands.push(OperandId, "'Entry Point'"); + InstructionDesc[OpEntryPoint].operands.push(OperandLiteralString, "'Name'"); + InstructionDesc[OpEntryPoint].operands.push(OperandVariableIds, "'Interface'"); + + InstructionDesc[OpExecutionMode].operands.push(OperandId, "'Entry Point'"); + InstructionDesc[OpExecutionMode].operands.push(OperandExecutionMode, "'Mode'"); + InstructionDesc[OpExecutionMode].operands.push(OperandOptionalLiteral, "See <>"); + + InstructionDesc[OpTypeInt].operands.push(OperandLiteralNumber, "'Width'"); + InstructionDesc[OpTypeInt].operands.push(OperandLiteralNumber, "'Signedness'"); + + InstructionDesc[OpTypeFloat].operands.push(OperandLiteralNumber, "'Width'"); + + InstructionDesc[OpTypeVector].operands.push(OperandId, "'Component Type'"); + InstructionDesc[OpTypeVector].operands.push(OperandLiteralNumber, "'Component Count'"); + + InstructionDesc[OpTypeMatrix].capabilities.push_back(CapabilityMatrix); + InstructionDesc[OpTypeMatrix].operands.push(OperandId, "'Column Type'"); + InstructionDesc[OpTypeMatrix].operands.push(OperandLiteralNumber, "'Column Count'"); + + InstructionDesc[OpTypeImage].operands.push(OperandId, "'Sampled Type'"); + InstructionDesc[OpTypeImage].operands.push(OperandDimensionality, ""); + InstructionDesc[OpTypeImage].operands.push(OperandLiteralNumber, "'Depth'"); + InstructionDesc[OpTypeImage].operands.push(OperandLiteralNumber, "'Arrayed'"); + InstructionDesc[OpTypeImage].operands.push(OperandLiteralNumber, "'MS'"); + InstructionDesc[OpTypeImage].operands.push(OperandLiteralNumber, "'Sampled'"); + InstructionDesc[OpTypeImage].operands.push(OperandSamplerImageFormat, ""); + InstructionDesc[OpTypeImage].operands.push(OperandAccessQualifier, "", true); + + InstructionDesc[OpTypeSampledImage].operands.push(OperandId, "'Image Type'"); + + InstructionDesc[OpTypeArray].operands.push(OperandId, "'Element Type'"); + InstructionDesc[OpTypeArray].operands.push(OperandId, "'Length'"); + + InstructionDesc[OpTypeRuntimeArray].capabilities.push_back(CapabilityShader); + InstructionDesc[OpTypeRuntimeArray].operands.push(OperandId, "'Element Type'"); + + InstructionDesc[OpTypeStruct].operands.push(OperandVariableIds, "'Member 0 type', +\n'member 1 type', +\n..."); + + InstructionDesc[OpTypeOpaque].capabilities.push_back(CapabilityKernel); + InstructionDesc[OpTypeOpaque].operands.push(OperandLiteralString, "The name of the opaque type."); + + InstructionDesc[OpTypePointer].operands.push(OperandStorage, ""); + InstructionDesc[OpTypePointer].operands.push(OperandId, "'Type'"); + + InstructionDesc[OpTypeForwardPointer].capabilities.push_back(CapabilityAddresses); + InstructionDesc[OpTypeForwardPointer].operands.push(OperandId, "'Pointer Type'"); + InstructionDesc[OpTypeForwardPointer].operands.push(OperandStorage, ""); + + InstructionDesc[OpTypeEvent].capabilities.push_back(CapabilityKernel); + + InstructionDesc[OpTypeDeviceEvent].capabilities.push_back(CapabilityDeviceEnqueue); + + InstructionDesc[OpTypeReserveId].capabilities.push_back(CapabilityPipes); + + InstructionDesc[OpTypeQueue].capabilities.push_back(CapabilityDeviceEnqueue); + + InstructionDesc[OpTypePipe].operands.push(OperandAccessQualifier, "'Qualifier'"); + InstructionDesc[OpTypePipe].capabilities.push_back(CapabilityPipes); + + InstructionDesc[OpTypeFunction].operands.push(OperandId, "'Return Type'"); + InstructionDesc[OpTypeFunction].operands.push(OperandVariableIds, "'Parameter 0 Type', +\n'Parameter 1 Type', +\n..."); + + InstructionDesc[OpConstant].operands.push(OperandVariableLiterals, "'Value'"); + + InstructionDesc[OpConstantComposite].operands.push(OperandVariableIds, "'Constituents'"); + + InstructionDesc[OpConstantSampler].capabilities.push_back(CapabilityLiteralSampler); + InstructionDesc[OpConstantSampler].operands.push(OperandSamplerAddressingMode, ""); + InstructionDesc[OpConstantSampler].operands.push(OperandLiteralNumber, "'Param'"); + InstructionDesc[OpConstantSampler].operands.push(OperandSamplerFilterMode, ""); + + InstructionDesc[OpSpecConstant].operands.push(OperandVariableLiterals, "'Value'"); + + InstructionDesc[OpSpecConstantComposite].operands.push(OperandVariableIds, "'Constituents'"); + + InstructionDesc[OpSpecConstantOp].operands.push(OperandLiteralNumber, "'Opcode'"); + InstructionDesc[OpSpecConstantOp].operands.push(OperandVariableIds, "'Operands'"); + + InstructionDesc[OpVariable].operands.push(OperandStorage, ""); + InstructionDesc[OpVariable].operands.push(OperandId, "'Initializer'", true); + + InstructionDesc[OpFunction].operands.push(OperandFunction, ""); + InstructionDesc[OpFunction].operands.push(OperandId, "'Function Type'"); + + InstructionDesc[OpFunctionCall].operands.push(OperandId, "'Function'"); + InstructionDesc[OpFunctionCall].operands.push(OperandVariableIds, "'Argument 0', +\n'Argument 1', +\n..."); + + InstructionDesc[OpExtInst].operands.push(OperandId, "'Set'"); + InstructionDesc[OpExtInst].operands.push(OperandLiteralNumber, "'Instruction'"); + InstructionDesc[OpExtInst].operands.push(OperandVariableIds, "'Operand 1', +\n'Operand 2', +\n..."); + + InstructionDesc[OpLoad].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpLoad].operands.push(OperandMemoryAccess, "", true); + + InstructionDesc[OpStore].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpStore].operands.push(OperandId, "'Object'"); + InstructionDesc[OpStore].operands.push(OperandMemoryAccess, "", true); + + InstructionDesc[OpPhi].operands.push(OperandVariableIds, "'Variable, Parent, ...'"); + + InstructionDesc[OpDecorate].operands.push(OperandId, "'Target'"); + InstructionDesc[OpDecorate].operands.push(OperandDecoration, ""); + InstructionDesc[OpDecorate].operands.push(OperandVariableLiterals, "See <>."); + + InstructionDesc[OpMemberDecorate].operands.push(OperandId, "'Structure Type'"); + InstructionDesc[OpMemberDecorate].operands.push(OperandLiteralNumber, "'Member'"); + InstructionDesc[OpMemberDecorate].operands.push(OperandDecoration, ""); + InstructionDesc[OpMemberDecorate].operands.push(OperandVariableLiterals, "See <>."); + + InstructionDesc[OpGroupDecorate].operands.push(OperandId, "'Decoration Group'"); + InstructionDesc[OpGroupDecorate].operands.push(OperandVariableIds, "'Targets'"); + + InstructionDesc[OpGroupMemberDecorate].operands.push(OperandId, "'Decoration Group'"); + InstructionDesc[OpGroupMemberDecorate].operands.push(OperandVariableIdLiteral, "'Targets'"); + + InstructionDesc[OpVectorExtractDynamic].operands.push(OperandId, "'Vector'"); + InstructionDesc[OpVectorExtractDynamic].operands.push(OperandId, "'Index'"); + + InstructionDesc[OpVectorInsertDynamic].operands.push(OperandId, "'Vector'"); + InstructionDesc[OpVectorInsertDynamic].operands.push(OperandId, "'Component'"); + InstructionDesc[OpVectorInsertDynamic].operands.push(OperandId, "'Index'"); + + InstructionDesc[OpVectorShuffle].operands.push(OperandId, "'Vector 1'"); + InstructionDesc[OpVectorShuffle].operands.push(OperandId, "'Vector 2'"); + InstructionDesc[OpVectorShuffle].operands.push(OperandVariableLiterals, "'Components'"); + + InstructionDesc[OpCompositeConstruct].operands.push(OperandVariableIds, "'Constituents'"); + + InstructionDesc[OpCompositeExtract].operands.push(OperandId, "'Composite'"); + InstructionDesc[OpCompositeExtract].operands.push(OperandVariableLiterals, "'Indexes'"); + + InstructionDesc[OpCompositeInsert].operands.push(OperandId, "'Object'"); + InstructionDesc[OpCompositeInsert].operands.push(OperandId, "'Composite'"); + InstructionDesc[OpCompositeInsert].operands.push(OperandVariableLiterals, "'Indexes'"); + + InstructionDesc[OpCopyObject].operands.push(OperandId, "'Operand'"); + + InstructionDesc[OpCopyMemory].operands.push(OperandId, "'Target'"); + InstructionDesc[OpCopyMemory].operands.push(OperandId, "'Source'"); + InstructionDesc[OpCopyMemory].operands.push(OperandMemoryAccess, "", true); + + InstructionDesc[OpCopyMemorySized].operands.push(OperandId, "'Target'"); + InstructionDesc[OpCopyMemorySized].operands.push(OperandId, "'Source'"); + InstructionDesc[OpCopyMemorySized].operands.push(OperandId, "'Size'"); + InstructionDesc[OpCopyMemorySized].operands.push(OperandMemoryAccess, "", true); + + InstructionDesc[OpCopyMemorySized].capabilities.push_back(CapabilityAddresses); + + InstructionDesc[OpSampledImage].operands.push(OperandId, "'Image'"); + InstructionDesc[OpSampledImage].operands.push(OperandId, "'Sampler'"); + + InstructionDesc[OpImage].operands.push(OperandId, "'Sampled Image'"); + + InstructionDesc[OpImageRead].operands.push(OperandId, "'Image'"); + InstructionDesc[OpImageRead].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageRead].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageRead].operands.push(OperandVariableIds, "", true); + + InstructionDesc[OpImageWrite].operands.push(OperandId, "'Image'"); + InstructionDesc[OpImageWrite].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageWrite].operands.push(OperandId, "'Texel'"); + InstructionDesc[OpImageWrite].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageWrite].operands.push(OperandVariableIds, "", true); + + InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandVariableIds, "", true); + InstructionDesc[OpImageSampleImplicitLod].capabilities.push_back(CapabilityShader); + + InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandVariableIds, "", true); + + InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandId, "'D~ref~'"); + InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandVariableIds, "", true); + InstructionDesc[OpImageSampleDrefImplicitLod].capabilities.push_back(CapabilityShader); + + InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandId, "'D~ref~'"); + InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandVariableIds, "", true); + InstructionDesc[OpImageSampleDrefExplicitLod].capabilities.push_back(CapabilityShader); + + InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandVariableIds, "", true); + InstructionDesc[OpImageSampleProjImplicitLod].capabilities.push_back(CapabilityShader); + + InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandVariableIds, "", true); + InstructionDesc[OpImageSampleProjExplicitLod].capabilities.push_back(CapabilityShader); + + InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandId, "'D~ref~'"); + InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandVariableIds, "", true); + InstructionDesc[OpImageSampleProjDrefImplicitLod].capabilities.push_back(CapabilityShader); + + InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandId, "'D~ref~'"); + InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandVariableIds, "", true); + InstructionDesc[OpImageSampleProjDrefExplicitLod].capabilities.push_back(CapabilityShader); + + InstructionDesc[OpImageFetch].operands.push(OperandId, "'Image'"); + InstructionDesc[OpImageFetch].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageFetch].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageFetch].operands.push(OperandVariableIds, "", true); + + InstructionDesc[OpImageGather].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[OpImageGather].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageGather].operands.push(OperandId, "'Component'"); + InstructionDesc[OpImageGather].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageGather].operands.push(OperandVariableIds, "", true); + InstructionDesc[OpImageGather].capabilities.push_back(CapabilityShader); + + InstructionDesc[OpImageDrefGather].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[OpImageDrefGather].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageDrefGather].operands.push(OperandId, "'D~ref~'"); + InstructionDesc[OpImageDrefGather].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageDrefGather].operands.push(OperandVariableIds, "", true); + InstructionDesc[OpImageDrefGather].capabilities.push_back(CapabilityShader); + + InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandVariableIds, "", true); + InstructionDesc[OpImageSparseSampleImplicitLod].capabilities.push_back(CapabilitySparseResidency); + + InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandVariableIds, "", true); + InstructionDesc[OpImageSparseSampleExplicitLod].capabilities.push_back(CapabilitySparseResidency); + + InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandId, "'D~ref~'"); + InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandVariableIds, "", true); + InstructionDesc[OpImageSparseSampleDrefImplicitLod].capabilities.push_back(CapabilitySparseResidency); + + InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandId, "'D~ref~'"); + InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandVariableIds, "", true); + InstructionDesc[OpImageSparseSampleDrefExplicitLod].capabilities.push_back(CapabilitySparseResidency); + + InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandVariableIds, "", true); + InstructionDesc[OpImageSparseSampleProjImplicitLod].capabilities.push_back(CapabilitySparseResidency); + + InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandVariableIds, "", true); + InstructionDesc[OpImageSparseSampleProjExplicitLod].capabilities.push_back(CapabilitySparseResidency); + + InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandId, "'D~ref~'"); + InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandVariableIds, "", true); + InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].capabilities.push_back(CapabilitySparseResidency); + + InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandId, "'D~ref~'"); + InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandVariableIds, "", true); + InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].capabilities.push_back(CapabilitySparseResidency); + + InstructionDesc[OpImageSparseFetch].operands.push(OperandId, "'Image'"); + InstructionDesc[OpImageSparseFetch].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageSparseFetch].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageSparseFetch].operands.push(OperandVariableIds, "", true); + InstructionDesc[OpImageSparseFetch].capabilities.push_back(CapabilitySparseResidency); + + InstructionDesc[OpImageSparseGather].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[OpImageSparseGather].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageSparseGather].operands.push(OperandId, "'Component'"); + InstructionDesc[OpImageSparseGather].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageSparseGather].operands.push(OperandVariableIds, "", true); + InstructionDesc[OpImageSparseGather].capabilities.push_back(CapabilitySparseResidency); + + InstructionDesc[OpImageSparseDrefGather].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[OpImageSparseDrefGather].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageSparseDrefGather].operands.push(OperandId, "'D~ref~'"); + InstructionDesc[OpImageSparseDrefGather].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageSparseDrefGather].operands.push(OperandVariableIds, "", true); + InstructionDesc[OpImageSparseDrefGather].capabilities.push_back(CapabilitySparseResidency); + + InstructionDesc[OpImageSparseRead].operands.push(OperandId, "'Image'"); + InstructionDesc[OpImageSparseRead].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageSparseRead].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageSparseRead].operands.push(OperandVariableIds, "", true); + InstructionDesc[OpImageSparseRead].capabilities.push_back(CapabilitySparseResidency); + + InstructionDesc[OpImageSparseTexelsResident].operands.push(OperandId, "'Resident Code'"); + InstructionDesc[OpImageSparseTexelsResident].capabilities.push_back(CapabilitySparseResidency); + + InstructionDesc[OpImageQuerySizeLod].operands.push(OperandId, "'Image'"); + InstructionDesc[OpImageQuerySizeLod].operands.push(OperandId, "'Level of Detail'"); + InstructionDesc[OpImageQuerySizeLod].capabilities.push_back(CapabilityKernel); + InstructionDesc[OpImageQuerySizeLod].capabilities.push_back(CapabilityImageQuery); + + InstructionDesc[OpImageQuerySize].operands.push(OperandId, "'Image'"); + InstructionDesc[OpImageQuerySize].capabilities.push_back(CapabilityKernel); + InstructionDesc[OpImageQuerySize].capabilities.push_back(CapabilityImageQuery); + + InstructionDesc[OpImageQueryLod].operands.push(OperandId, "'Image'"); + InstructionDesc[OpImageQueryLod].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageQueryLod].capabilities.push_back(CapabilityImageQuery); + + InstructionDesc[OpImageQueryLevels].operands.push(OperandId, "'Image'"); + InstructionDesc[OpImageQueryLevels].capabilities.push_back(CapabilityKernel); + InstructionDesc[OpImageQueryLevels].capabilities.push_back(CapabilityImageQuery); + + InstructionDesc[OpImageQuerySamples].operands.push(OperandId, "'Image'"); + InstructionDesc[OpImageQuerySamples].capabilities.push_back(CapabilityKernel); + InstructionDesc[OpImageQuerySamples].capabilities.push_back(CapabilityImageQuery); + + InstructionDesc[OpImageQueryFormat].operands.push(OperandId, "'Image'"); + InstructionDesc[OpImageQueryFormat].capabilities.push_back(CapabilityKernel); + + InstructionDesc[OpImageQueryOrder].operands.push(OperandId, "'Image'"); + InstructionDesc[OpImageQueryOrder].capabilities.push_back(CapabilityKernel); + + InstructionDesc[OpAccessChain].operands.push(OperandId, "'Base'"); + InstructionDesc[OpAccessChain].operands.push(OperandVariableIds, "'Indexes'"); + + InstructionDesc[OpInBoundsAccessChain].operands.push(OperandId, "'Base'"); + InstructionDesc[OpInBoundsAccessChain].operands.push(OperandVariableIds, "'Indexes'"); + + InstructionDesc[OpPtrAccessChain].operands.push(OperandId, "'Base'"); + InstructionDesc[OpPtrAccessChain].operands.push(OperandId, "'Element'"); + InstructionDesc[OpPtrAccessChain].operands.push(OperandVariableIds, "'Indexes'"); + InstructionDesc[OpPtrAccessChain].capabilities.push_back(CapabilityAddresses); + + InstructionDesc[OpInBoundsPtrAccessChain].operands.push(OperandId, "'Base'"); + InstructionDesc[OpInBoundsPtrAccessChain].operands.push(OperandId, "'Element'"); + InstructionDesc[OpInBoundsPtrAccessChain].operands.push(OperandVariableIds, "'Indexes'"); + InstructionDesc[OpInBoundsPtrAccessChain].capabilities.push_back(CapabilityAddresses); + + InstructionDesc[OpSNegate].operands.push(OperandId, "'Operand'"); + + InstructionDesc[OpFNegate].operands.push(OperandId, "'Operand'"); + + InstructionDesc[OpNot].operands.push(OperandId, "'Operand'"); + + InstructionDesc[OpAny].operands.push(OperandId, "'Vector'"); + + InstructionDesc[OpAll].operands.push(OperandId, "'Vector'"); + + InstructionDesc[OpConvertFToU].operands.push(OperandId, "'Float Value'"); + + InstructionDesc[OpConvertFToS].operands.push(OperandId, "'Float Value'"); + + InstructionDesc[OpConvertSToF].operands.push(OperandId, "'Signed Value'"); + + InstructionDesc[OpConvertUToF].operands.push(OperandId, "'Unsigned Value'"); + + InstructionDesc[OpUConvert].operands.push(OperandId, "'Unsigned Value'"); + + InstructionDesc[OpSConvert].operands.push(OperandId, "'Signed Value'"); + + InstructionDesc[OpFConvert].operands.push(OperandId, "'Float Value'"); + + InstructionDesc[OpSatConvertSToU].operands.push(OperandId, "'Signed Value'"); + InstructionDesc[OpSatConvertSToU].capabilities.push_back(CapabilityKernel); + + InstructionDesc[OpSatConvertUToS].operands.push(OperandId, "'Unsigned Value'"); + InstructionDesc[OpSatConvertUToS].capabilities.push_back(CapabilityKernel); + + InstructionDesc[OpConvertPtrToU].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpConvertPtrToU].capabilities.push_back(CapabilityAddresses); + + InstructionDesc[OpConvertUToPtr].operands.push(OperandId, "'Integer Value'"); + InstructionDesc[OpConvertUToPtr].capabilities.push_back(CapabilityAddresses); + + InstructionDesc[OpPtrCastToGeneric].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpPtrCastToGeneric].capabilities.push_back(CapabilityKernel); + + InstructionDesc[OpGenericCastToPtr].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpGenericCastToPtr].capabilities.push_back(CapabilityKernel); + + InstructionDesc[OpGenericCastToPtrExplicit].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpGenericCastToPtrExplicit].operands.push(OperandStorage, "'Storage'"); + InstructionDesc[OpGenericCastToPtrExplicit].capabilities.push_back(CapabilityKernel); + + InstructionDesc[OpGenericPtrMemSemantics].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpGenericPtrMemSemantics].capabilities.push_back(CapabilityKernel); + + InstructionDesc[OpBitcast].operands.push(OperandId, "'Operand'"); + + InstructionDesc[OpQuantizeToF16].operands.push(OperandId, "'Value'"); + + InstructionDesc[OpTranspose].capabilities.push_back(CapabilityMatrix); + InstructionDesc[OpTranspose].operands.push(OperandId, "'Matrix'"); + + InstructionDesc[OpIsNan].operands.push(OperandId, "'x'"); + + InstructionDesc[OpIsInf].operands.push(OperandId, "'x'"); + + InstructionDesc[OpIsFinite].capabilities.push_back(CapabilityKernel); + InstructionDesc[OpIsFinite].operands.push(OperandId, "'x'"); + + InstructionDesc[OpIsNormal].capabilities.push_back(CapabilityKernel); + InstructionDesc[OpIsNormal].operands.push(OperandId, "'x'"); + + InstructionDesc[OpSignBitSet].capabilities.push_back(CapabilityKernel); + InstructionDesc[OpSignBitSet].operands.push(OperandId, "'x'"); + + InstructionDesc[OpLessOrGreater].capabilities.push_back(CapabilityKernel); + InstructionDesc[OpLessOrGreater].operands.push(OperandId, "'x'"); + InstructionDesc[OpLessOrGreater].operands.push(OperandId, "'y'"); + + InstructionDesc[OpOrdered].capabilities.push_back(CapabilityKernel); + InstructionDesc[OpOrdered].operands.push(OperandId, "'x'"); + InstructionDesc[OpOrdered].operands.push(OperandId, "'y'"); + + InstructionDesc[OpUnordered].capabilities.push_back(CapabilityKernel); + InstructionDesc[OpUnordered].operands.push(OperandId, "'x'"); + InstructionDesc[OpUnordered].operands.push(OperandId, "'y'"); + + InstructionDesc[OpArrayLength].operands.push(OperandId, "'Structure'"); + InstructionDesc[OpArrayLength].operands.push(OperandLiteralNumber, "'Array member'"); + InstructionDesc[OpArrayLength].capabilities.push_back(CapabilityShader); + + InstructionDesc[OpIAdd].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpIAdd].operands.push(OperandId, "'Operand 2'"); + + InstructionDesc[OpFAdd].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpFAdd].operands.push(OperandId, "'Operand 2'"); + + InstructionDesc[OpISub].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpISub].operands.push(OperandId, "'Operand 2'"); + + InstructionDesc[OpFSub].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpFSub].operands.push(OperandId, "'Operand 2'"); + + InstructionDesc[OpIMul].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpIMul].operands.push(OperandId, "'Operand 2'"); + + InstructionDesc[OpFMul].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpFMul].operands.push(OperandId, "'Operand 2'"); + + InstructionDesc[OpUDiv].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpUDiv].operands.push(OperandId, "'Operand 2'"); + + InstructionDesc[OpSDiv].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpSDiv].operands.push(OperandId, "'Operand 2'"); + + InstructionDesc[OpFDiv].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpFDiv].operands.push(OperandId, "'Operand 2'"); + + InstructionDesc[OpUMod].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpUMod].operands.push(OperandId, "'Operand 2'"); + + InstructionDesc[OpSRem].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpSRem].operands.push(OperandId, "'Operand 2'"); + + InstructionDesc[OpSMod].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpSMod].operands.push(OperandId, "'Operand 2'"); + + InstructionDesc[OpFRem].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpFRem].operands.push(OperandId, "'Operand 2'"); + + InstructionDesc[OpFMod].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpFMod].operands.push(OperandId, "'Operand 2'"); + + InstructionDesc[OpVectorTimesScalar].operands.push(OperandId, "'Vector'"); + InstructionDesc[OpVectorTimesScalar].operands.push(OperandId, "'Scalar'"); + + InstructionDesc[OpMatrixTimesScalar].capabilities.push_back(CapabilityMatrix); + InstructionDesc[OpMatrixTimesScalar].operands.push(OperandId, "'Matrix'"); + InstructionDesc[OpMatrixTimesScalar].operands.push(OperandId, "'Scalar'"); + + InstructionDesc[OpVectorTimesMatrix].capabilities.push_back(CapabilityMatrix); + InstructionDesc[OpVectorTimesMatrix].operands.push(OperandId, "'Vector'"); + InstructionDesc[OpVectorTimesMatrix].operands.push(OperandId, "'Matrix'"); + + InstructionDesc[OpMatrixTimesVector].capabilities.push_back(CapabilityMatrix); + InstructionDesc[OpMatrixTimesVector].operands.push(OperandId, "'Matrix'"); + InstructionDesc[OpMatrixTimesVector].operands.push(OperandId, "'Vector'"); + + InstructionDesc[OpMatrixTimesMatrix].capabilities.push_back(CapabilityMatrix); + InstructionDesc[OpMatrixTimesMatrix].operands.push(OperandId, "'LeftMatrix'"); + InstructionDesc[OpMatrixTimesMatrix].operands.push(OperandId, "'RightMatrix'"); + + InstructionDesc[OpOuterProduct].capabilities.push_back(CapabilityMatrix); + InstructionDesc[OpOuterProduct].operands.push(OperandId, "'Vector 1'"); + InstructionDesc[OpOuterProduct].operands.push(OperandId, "'Vector 2'"); + + InstructionDesc[OpDot].operands.push(OperandId, "'Vector 1'"); + InstructionDesc[OpDot].operands.push(OperandId, "'Vector 2'"); + + InstructionDesc[OpIAddCarry].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpIAddCarry].operands.push(OperandId, "'Operand 2'"); + + InstructionDesc[OpISubBorrow].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpISubBorrow].operands.push(OperandId, "'Operand 2'"); + + InstructionDesc[OpUMulExtended].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpUMulExtended].operands.push(OperandId, "'Operand 2'"); + + InstructionDesc[OpSMulExtended].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpSMulExtended].operands.push(OperandId, "'Operand 2'"); + + InstructionDesc[OpShiftRightLogical].operands.push(OperandId, "'Base'"); + InstructionDesc[OpShiftRightLogical].operands.push(OperandId, "'Shift'"); + + InstructionDesc[OpShiftRightArithmetic].operands.push(OperandId, "'Base'"); + InstructionDesc[OpShiftRightArithmetic].operands.push(OperandId, "'Shift'"); + + InstructionDesc[OpShiftLeftLogical].operands.push(OperandId, "'Base'"); + InstructionDesc[OpShiftLeftLogical].operands.push(OperandId, "'Shift'"); + + InstructionDesc[OpLogicalOr].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpLogicalOr].operands.push(OperandId, "'Operand 2'"); + + InstructionDesc[OpLogicalAnd].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpLogicalAnd].operands.push(OperandId, "'Operand 2'"); + + InstructionDesc[OpLogicalEqual].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpLogicalEqual].operands.push(OperandId, "'Operand 2'"); + + InstructionDesc[OpLogicalNotEqual].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpLogicalNotEqual].operands.push(OperandId, "'Operand 2'"); + + InstructionDesc[OpLogicalNot].operands.push(OperandId, "'Operand'"); + + InstructionDesc[OpBitwiseOr].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpBitwiseOr].operands.push(OperandId, "'Operand 2'"); + + InstructionDesc[OpBitwiseXor].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpBitwiseXor].operands.push(OperandId, "'Operand 2'"); + + InstructionDesc[OpBitwiseAnd].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpBitwiseAnd].operands.push(OperandId, "'Operand 2'"); + + InstructionDesc[OpBitFieldInsert].capabilities.push_back(CapabilityShader); + InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Base'"); + InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Insert'"); + InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Offset'"); + InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Count'"); + + InstructionDesc[OpBitFieldSExtract].capabilities.push_back(CapabilityShader); + InstructionDesc[OpBitFieldSExtract].operands.push(OperandId, "'Base'"); + InstructionDesc[OpBitFieldSExtract].operands.push(OperandId, "'Offset'"); + InstructionDesc[OpBitFieldSExtract].operands.push(OperandId, "'Count'"); + + InstructionDesc[OpBitFieldUExtract].capabilities.push_back(CapabilityShader); + InstructionDesc[OpBitFieldUExtract].operands.push(OperandId, "'Base'"); + InstructionDesc[OpBitFieldUExtract].operands.push(OperandId, "'Offset'"); + InstructionDesc[OpBitFieldUExtract].operands.push(OperandId, "'Count'"); + + InstructionDesc[OpBitReverse].capabilities.push_back(CapabilityShader); + InstructionDesc[OpBitReverse].operands.push(OperandId, "'Base'"); + + InstructionDesc[OpBitCount].operands.push(OperandId, "'Base'"); + + InstructionDesc[OpSelect].operands.push(OperandId, "'Condition'"); + InstructionDesc[OpSelect].operands.push(OperandId, "'Object 1'"); + InstructionDesc[OpSelect].operands.push(OperandId, "'Object 2'"); + + InstructionDesc[OpIEqual].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpIEqual].operands.push(OperandId, "'Operand 2'"); + + InstructionDesc[OpFOrdEqual].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpFOrdEqual].operands.push(OperandId, "'Operand 2'"); + + InstructionDesc[OpFUnordEqual].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpFUnordEqual].operands.push(OperandId, "'Operand 2'"); + + InstructionDesc[OpINotEqual].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpINotEqual].operands.push(OperandId, "'Operand 2'"); + + InstructionDesc[OpFOrdNotEqual].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpFOrdNotEqual].operands.push(OperandId, "'Operand 2'"); + + InstructionDesc[OpFUnordNotEqual].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpFUnordNotEqual].operands.push(OperandId, "'Operand 2'"); + + InstructionDesc[OpULessThan].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpULessThan].operands.push(OperandId, "'Operand 2'"); + + InstructionDesc[OpSLessThan].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpSLessThan].operands.push(OperandId, "'Operand 2'"); + + InstructionDesc[OpFOrdLessThan].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpFOrdLessThan].operands.push(OperandId, "'Operand 2'"); + + InstructionDesc[OpFUnordLessThan].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpFUnordLessThan].operands.push(OperandId, "'Operand 2'"); + + InstructionDesc[OpUGreaterThan].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpUGreaterThan].operands.push(OperandId, "'Operand 2'"); + + InstructionDesc[OpSGreaterThan].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpSGreaterThan].operands.push(OperandId, "'Operand 2'"); + + InstructionDesc[OpFOrdGreaterThan].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpFOrdGreaterThan].operands.push(OperandId, "'Operand 2'"); + + InstructionDesc[OpFUnordGreaterThan].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpFUnordGreaterThan].operands.push(OperandId, "'Operand 2'"); + + InstructionDesc[OpULessThanEqual].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpULessThanEqual].operands.push(OperandId, "'Operand 2'"); + + InstructionDesc[OpSLessThanEqual].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpSLessThanEqual].operands.push(OperandId, "'Operand 2'"); + + InstructionDesc[OpFOrdLessThanEqual].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpFOrdLessThanEqual].operands.push(OperandId, "'Operand 2'"); + + InstructionDesc[OpFUnordLessThanEqual].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpFUnordLessThanEqual].operands.push(OperandId, "'Operand 2'"); + + InstructionDesc[OpUGreaterThanEqual].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpUGreaterThanEqual].operands.push(OperandId, "'Operand 2'"); + + InstructionDesc[OpSGreaterThanEqual].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpSGreaterThanEqual].operands.push(OperandId, "'Operand 2'"); + + InstructionDesc[OpFOrdGreaterThanEqual].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpFOrdGreaterThanEqual].operands.push(OperandId, "'Operand 2'"); + + InstructionDesc[OpFUnordGreaterThanEqual].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpFUnordGreaterThanEqual].operands.push(OperandId, "'Operand 2'"); + + InstructionDesc[OpDPdx].capabilities.push_back(CapabilityShader); + InstructionDesc[OpDPdx].operands.push(OperandId, "'P'"); + + InstructionDesc[OpDPdy].capabilities.push_back(CapabilityShader); + InstructionDesc[OpDPdy].operands.push(OperandId, "'P'"); + + InstructionDesc[OpFwidth].capabilities.push_back(CapabilityShader); + InstructionDesc[OpFwidth].operands.push(OperandId, "'P'"); + + InstructionDesc[OpDPdxFine].capabilities.push_back(CapabilityDerivativeControl); + InstructionDesc[OpDPdxFine].operands.push(OperandId, "'P'"); + + InstructionDesc[OpDPdyFine].capabilities.push_back(CapabilityDerivativeControl); + InstructionDesc[OpDPdyFine].operands.push(OperandId, "'P'"); + + InstructionDesc[OpFwidthFine].capabilities.push_back(CapabilityDerivativeControl); + InstructionDesc[OpFwidthFine].operands.push(OperandId, "'P'"); + + InstructionDesc[OpDPdxCoarse].capabilities.push_back(CapabilityDerivativeControl); + InstructionDesc[OpDPdxCoarse].operands.push(OperandId, "'P'"); + + InstructionDesc[OpDPdyCoarse].capabilities.push_back(CapabilityDerivativeControl); + InstructionDesc[OpDPdyCoarse].operands.push(OperandId, "'P'"); + + InstructionDesc[OpFwidthCoarse].capabilities.push_back(CapabilityDerivativeControl); + InstructionDesc[OpFwidthCoarse].operands.push(OperandId, "'P'"); + + InstructionDesc[OpEmitVertex].capabilities.push_back(CapabilityGeometry); + + InstructionDesc[OpEndPrimitive].capabilities.push_back(CapabilityGeometry); + + InstructionDesc[OpEmitStreamVertex].operands.push(OperandId, "'Stream'"); + InstructionDesc[OpEmitStreamVertex].capabilities.push_back(CapabilityGeometryStreams); + + InstructionDesc[OpEndStreamPrimitive].operands.push(OperandId, "'Stream'"); + InstructionDesc[OpEndStreamPrimitive].capabilities.push_back(CapabilityGeometryStreams); + + InstructionDesc[OpControlBarrier].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpControlBarrier].operands.push(OperandScope, "'Memory'"); + InstructionDesc[OpControlBarrier].operands.push(OperandMemorySemantics, "'Semantics'"); + + InstructionDesc[OpMemoryBarrier].operands.push(OperandScope, "'Memory'"); + InstructionDesc[OpMemoryBarrier].operands.push(OperandMemorySemantics, "'Semantics'"); + + InstructionDesc[OpImageTexelPointer].operands.push(OperandId, "'Image'"); + InstructionDesc[OpImageTexelPointer].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageTexelPointer].operands.push(OperandId, "'Sample'"); + + InstructionDesc[OpAtomicLoad].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpAtomicLoad].operands.push(OperandScope, "'Scope'"); + InstructionDesc[OpAtomicLoad].operands.push(OperandMemorySemantics, "'Semantics'"); + + InstructionDesc[OpAtomicStore].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpAtomicStore].operands.push(OperandScope, "'Scope'"); + InstructionDesc[OpAtomicStore].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[OpAtomicStore].operands.push(OperandId, "'Value'"); + + InstructionDesc[OpAtomicExchange].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpAtomicExchange].operands.push(OperandScope, "'Scope'"); + InstructionDesc[OpAtomicExchange].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[OpAtomicExchange].operands.push(OperandId, "'Value'"); + + InstructionDesc[OpAtomicCompareExchange].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpAtomicCompareExchange].operands.push(OperandScope, "'Scope'"); + InstructionDesc[OpAtomicCompareExchange].operands.push(OperandMemorySemantics, "'Equal'"); + InstructionDesc[OpAtomicCompareExchange].operands.push(OperandMemorySemantics, "'Unequal'"); + InstructionDesc[OpAtomicCompareExchange].operands.push(OperandId, "'Value'"); + InstructionDesc[OpAtomicCompareExchange].operands.push(OperandId, "'Comparator'"); + + InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandScope, "'Scope'"); + InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandMemorySemantics, "'Equal'"); + InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandMemorySemantics, "'Unequal'"); + InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandId, "'Value'"); + InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandId, "'Comparator'"); + InstructionDesc[OpAtomicCompareExchangeWeak].capabilities.push_back(CapabilityKernel); + + InstructionDesc[OpAtomicIIncrement].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpAtomicIIncrement].operands.push(OperandScope, "'Scope'"); + InstructionDesc[OpAtomicIIncrement].operands.push(OperandMemorySemantics, "'Semantics'"); + + InstructionDesc[OpAtomicIDecrement].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpAtomicIDecrement].operands.push(OperandScope, "'Scope'"); + InstructionDesc[OpAtomicIDecrement].operands.push(OperandMemorySemantics, "'Semantics'"); + + InstructionDesc[OpAtomicIAdd].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpAtomicIAdd].operands.push(OperandScope, "'Scope'"); + InstructionDesc[OpAtomicIAdd].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[OpAtomicIAdd].operands.push(OperandId, "'Value'"); + + InstructionDesc[OpAtomicISub].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpAtomicISub].operands.push(OperandScope, "'Scope'"); + InstructionDesc[OpAtomicISub].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[OpAtomicISub].operands.push(OperandId, "'Value'"); + + InstructionDesc[OpAtomicUMin].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpAtomicUMin].operands.push(OperandScope, "'Scope'"); + InstructionDesc[OpAtomicUMin].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[OpAtomicUMin].operands.push(OperandId, "'Value'"); + + InstructionDesc[OpAtomicUMax].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpAtomicUMax].operands.push(OperandScope, "'Scope'"); + InstructionDesc[OpAtomicUMax].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[OpAtomicUMax].operands.push(OperandId, "'Value'"); + + InstructionDesc[OpAtomicSMin].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpAtomicSMin].operands.push(OperandScope, "'Scope'"); + InstructionDesc[OpAtomicSMin].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[OpAtomicSMin].operands.push(OperandId, "'Value'"); + + InstructionDesc[OpAtomicSMax].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpAtomicSMax].operands.push(OperandScope, "'Scope'"); + InstructionDesc[OpAtomicSMax].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[OpAtomicSMax].operands.push(OperandId, "'Value'"); + + InstructionDesc[OpAtomicAnd].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpAtomicAnd].operands.push(OperandScope, "'Scope'"); + InstructionDesc[OpAtomicAnd].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[OpAtomicAnd].operands.push(OperandId, "'Value'"); + + InstructionDesc[OpAtomicOr].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpAtomicOr].operands.push(OperandScope, "'Scope'"); + InstructionDesc[OpAtomicOr].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[OpAtomicOr].operands.push(OperandId, "'Value'"); + + InstructionDesc[OpAtomicXor].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpAtomicXor].operands.push(OperandScope, "'Scope'"); + InstructionDesc[OpAtomicXor].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[OpAtomicXor].operands.push(OperandId, "'Value'"); + + InstructionDesc[OpAtomicFlagTestAndSet].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpAtomicFlagTestAndSet].operands.push(OperandScope, "'Scope'"); + InstructionDesc[OpAtomicFlagTestAndSet].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[OpAtomicFlagTestAndSet].capabilities.push_back(CapabilityKernel); + + InstructionDesc[OpAtomicFlagClear].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpAtomicFlagClear].operands.push(OperandScope, "'Scope'"); + InstructionDesc[OpAtomicFlagClear].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[OpAtomicFlagClear].capabilities.push_back(CapabilityKernel); + + InstructionDesc[OpLoopMerge].operands.push(OperandId, "'Merge Block'"); + InstructionDesc[OpLoopMerge].operands.push(OperandId, "'Continue Target'"); + InstructionDesc[OpLoopMerge].operands.push(OperandLoop, ""); + + InstructionDesc[OpSelectionMerge].operands.push(OperandId, "'Merge Block'"); + InstructionDesc[OpSelectionMerge].operands.push(OperandSelect, ""); + + InstructionDesc[OpBranch].operands.push(OperandId, "'Target Label'"); + + InstructionDesc[OpBranchConditional].operands.push(OperandId, "'Condition'"); + InstructionDesc[OpBranchConditional].operands.push(OperandId, "'True Label'"); + InstructionDesc[OpBranchConditional].operands.push(OperandId, "'False Label'"); + InstructionDesc[OpBranchConditional].operands.push(OperandVariableLiterals, "'Branch weights'"); + + InstructionDesc[OpSwitch].operands.push(OperandId, "'Selector'"); + InstructionDesc[OpSwitch].operands.push(OperandId, "'Default'"); + InstructionDesc[OpSwitch].operands.push(OperandVariableLiteralId, "'Target'"); + + InstructionDesc[OpKill].capabilities.push_back(CapabilityShader); + + InstructionDesc[OpReturnValue].operands.push(OperandId, "'Value'"); + + InstructionDesc[OpLifetimeStart].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpLifetimeStart].operands.push(OperandLiteralNumber, "'Size'"); + InstructionDesc[OpLifetimeStart].capabilities.push_back(CapabilityKernel); + + InstructionDesc[OpLifetimeStop].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpLifetimeStop].operands.push(OperandLiteralNumber, "'Size'"); + InstructionDesc[OpLifetimeStop].capabilities.push_back(CapabilityKernel); + + InstructionDesc[OpGroupAsyncCopy].capabilities.push_back(CapabilityKernel); + InstructionDesc[OpGroupAsyncCopy].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Destination'"); + InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Source'"); + InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Num Elements'"); + InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Stride'"); + InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Event'"); + + InstructionDesc[OpGroupWaitEvents].capabilities.push_back(CapabilityKernel); + InstructionDesc[OpGroupWaitEvents].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupWaitEvents].operands.push(OperandId, "'Num Events'"); + InstructionDesc[OpGroupWaitEvents].operands.push(OperandId, "'Events List'"); + + InstructionDesc[OpGroupAll].capabilities.push_back(CapabilityGroups); + InstructionDesc[OpGroupAll].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupAll].operands.push(OperandId, "'Predicate'"); + + InstructionDesc[OpGroupAny].capabilities.push_back(CapabilityGroups); + InstructionDesc[OpGroupAny].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupAny].operands.push(OperandId, "'Predicate'"); + + InstructionDesc[OpGroupBroadcast].capabilities.push_back(CapabilityGroups); + InstructionDesc[OpGroupBroadcast].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupBroadcast].operands.push(OperandId, "'Value'"); + InstructionDesc[OpGroupBroadcast].operands.push(OperandId, "'LocalId'"); + + InstructionDesc[OpGroupIAdd].capabilities.push_back(CapabilityGroups); + InstructionDesc[OpGroupIAdd].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupIAdd].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[OpGroupIAdd].operands.push(OperandId, "'X'"); + + InstructionDesc[OpGroupFAdd].capabilities.push_back(CapabilityGroups); + InstructionDesc[OpGroupFAdd].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupFAdd].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[OpGroupFAdd].operands.push(OperandId, "'X'"); + + InstructionDesc[OpGroupUMin].capabilities.push_back(CapabilityGroups); + InstructionDesc[OpGroupUMin].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupUMin].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[OpGroupUMin].operands.push(OperandId, "'X'"); + + InstructionDesc[OpGroupSMin].capabilities.push_back(CapabilityGroups); + InstructionDesc[OpGroupSMin].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupSMin].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[OpGroupSMin].operands.push(OperandId, "X"); + + InstructionDesc[OpGroupFMin].capabilities.push_back(CapabilityGroups); + InstructionDesc[OpGroupFMin].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupFMin].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[OpGroupFMin].operands.push(OperandId, "X"); + + InstructionDesc[OpGroupUMax].capabilities.push_back(CapabilityGroups); + InstructionDesc[OpGroupUMax].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupUMax].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[OpGroupUMax].operands.push(OperandId, "X"); + + InstructionDesc[OpGroupSMax].capabilities.push_back(CapabilityGroups); + InstructionDesc[OpGroupSMax].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupSMax].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[OpGroupSMax].operands.push(OperandId, "X"); + + InstructionDesc[OpGroupFMax].capabilities.push_back(CapabilityGroups); + InstructionDesc[OpGroupFMax].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupFMax].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[OpGroupFMax].operands.push(OperandId, "X"); + + InstructionDesc[OpReadPipe].capabilities.push_back(CapabilityPipes); + InstructionDesc[OpReadPipe].operands.push(OperandId, "'Pipe'"); + InstructionDesc[OpReadPipe].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpReadPipe].operands.push(OperandId, "'Packet Size'"); + InstructionDesc[OpReadPipe].operands.push(OperandId, "'Packet Alignment'"); + + InstructionDesc[OpWritePipe].capabilities.push_back(CapabilityPipes); + InstructionDesc[OpWritePipe].operands.push(OperandId, "'Pipe'"); + InstructionDesc[OpWritePipe].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpWritePipe].operands.push(OperandId, "'Packet Size'"); + InstructionDesc[OpWritePipe].operands.push(OperandId, "'Packet Alignment'"); + + InstructionDesc[OpReservedReadPipe].capabilities.push_back(CapabilityPipes); + InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Pipe'"); + InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Reserve Id'"); + InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Index'"); + InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Packet Size'"); + InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Packet Alignment'"); + + InstructionDesc[OpReservedWritePipe].capabilities.push_back(CapabilityPipes); + InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Pipe'"); + InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Reserve Id'"); + InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Index'"); + InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Packet Size'"); + InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Packet Alignment'"); + + InstructionDesc[OpReserveReadPipePackets].capabilities.push_back(CapabilityPipes); + InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Pipe'"); + InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Num Packets'"); + InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Packet Size'"); + InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Packet Alignment'"); + + InstructionDesc[OpReserveWritePipePackets].capabilities.push_back(CapabilityPipes); + InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Pipe'"); + InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Num Packets'"); + InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Packet Size'"); + InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Packet Alignment'"); + + InstructionDesc[OpCommitReadPipe].capabilities.push_back(CapabilityPipes); + InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Pipe'"); + InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Reserve Id'"); + InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Packet Size'"); + InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Packet Alignment'"); + + InstructionDesc[OpCommitWritePipe].capabilities.push_back(CapabilityPipes); + InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Pipe'"); + InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Reserve Id'"); + InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Packet Size'"); + InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Packet Alignment'"); + + InstructionDesc[OpIsValidReserveId].capabilities.push_back(CapabilityPipes); + InstructionDesc[OpIsValidReserveId].operands.push(OperandId, "'Reserve Id'"); + + InstructionDesc[OpGetNumPipePackets].capabilities.push_back(CapabilityPipes); + InstructionDesc[OpGetNumPipePackets].operands.push(OperandId, "'Pipe'"); + InstructionDesc[OpGetNumPipePackets].operands.push(OperandId, "'Packet Size'"); + InstructionDesc[OpGetNumPipePackets].operands.push(OperandId, "'Packet Alignment'"); + + InstructionDesc[OpGetMaxPipePackets].capabilities.push_back(CapabilityPipes); + InstructionDesc[OpGetMaxPipePackets].operands.push(OperandId, "'Pipe'"); + InstructionDesc[OpGetMaxPipePackets].operands.push(OperandId, "'Packet Size'"); + InstructionDesc[OpGetMaxPipePackets].operands.push(OperandId, "'Packet Alignment'"); + + InstructionDesc[OpGroupReserveReadPipePackets].capabilities.push_back(CapabilityPipes); + InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Pipe'"); + InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Num Packets'"); + InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Packet Size'"); + InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Packet Alignment'"); + + InstructionDesc[OpGroupReserveWritePipePackets].capabilities.push_back(CapabilityPipes); + InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Pipe'"); + InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Num Packets'"); + InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Packet Size'"); + InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Packet Alignment'"); + + InstructionDesc[OpGroupCommitReadPipe].capabilities.push_back(CapabilityPipes); + InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Pipe'"); + InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Reserve Id'"); + InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Packet Size'"); + InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Packet Alignment'"); + + InstructionDesc[OpGroupCommitWritePipe].capabilities.push_back(CapabilityPipes); + InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Pipe'"); + InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Reserve Id'"); + InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Packet Size'"); + InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Packet Alignment'"); + + InstructionDesc[OpBuildNDRange].capabilities.push_back(CapabilityDeviceEnqueue); + InstructionDesc[OpBuildNDRange].operands.push(OperandId, "'GlobalWorkSize'"); + InstructionDesc[OpBuildNDRange].operands.push(OperandId, "'LocalWorkSize'"); + InstructionDesc[OpBuildNDRange].operands.push(OperandId, "'GlobalWorkOffset'"); + + InstructionDesc[OpGetDefaultQueue].capabilities.push_back(CapabilityDeviceEnqueue); + + InstructionDesc[OpCaptureEventProfilingInfo].capabilities.push_back(CapabilityDeviceEnqueue); + + InstructionDesc[OpCaptureEventProfilingInfo].operands.push(OperandId, "'Event'"); + InstructionDesc[OpCaptureEventProfilingInfo].operands.push(OperandId, "'Profiling Info'"); + InstructionDesc[OpCaptureEventProfilingInfo].operands.push(OperandId, "'Value'"); + + InstructionDesc[OpSetUserEventStatus].capabilities.push_back(CapabilityDeviceEnqueue); + + InstructionDesc[OpSetUserEventStatus].operands.push(OperandId, "'Event'"); + InstructionDesc[OpSetUserEventStatus].operands.push(OperandId, "'Status'"); + + InstructionDesc[OpIsValidEvent].capabilities.push_back(CapabilityDeviceEnqueue); + InstructionDesc[OpIsValidEvent].operands.push(OperandId, "'Event'"); + + InstructionDesc[OpCreateUserEvent].capabilities.push_back(CapabilityDeviceEnqueue); + + InstructionDesc[OpRetainEvent].capabilities.push_back(CapabilityDeviceEnqueue); + InstructionDesc[OpRetainEvent].operands.push(OperandId, "'Event'"); + + InstructionDesc[OpReleaseEvent].capabilities.push_back(CapabilityDeviceEnqueue); + InstructionDesc[OpReleaseEvent].operands.push(OperandId, "'Event'"); + + InstructionDesc[OpGetKernelWorkGroupSize].capabilities.push_back(CapabilityDeviceEnqueue); + InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Invoke'"); + InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Param'"); + InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Param Size'"); + InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Param Align'"); + + InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].capabilities.push_back(CapabilityDeviceEnqueue); + InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Invoke'"); + InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Param'"); + InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Param Size'"); + InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Param Align'"); + + InstructionDesc[OpGetKernelNDrangeSubGroupCount].capabilities.push_back(CapabilityDeviceEnqueue); + InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'ND Range'"); + InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Invoke'"); + InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Param'"); + InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Param Size'"); + InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Param Align'"); + + InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].capabilities.push_back(CapabilityDeviceEnqueue); + InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'ND Range'"); + InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Invoke'"); + InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Param'"); + InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Param Size'"); + InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Param Align'"); + + InstructionDesc[OpEnqueueKernel].capabilities.push_back(CapabilityDeviceEnqueue); + InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Queue'"); + InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Flags'"); + InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'ND Range'"); + InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Num Events'"); + InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Wait Events'"); + InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Ret Event'"); + InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Invoke'"); + InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Param'"); + InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Param Size'"); + InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Param Align'"); + InstructionDesc[OpEnqueueKernel].operands.push(OperandVariableIds, "'Local Size'"); + + InstructionDesc[OpEnqueueMarker].capabilities.push_back(CapabilityDeviceEnqueue); + InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Queue'"); + InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Num Events'"); + InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Wait Events'"); + InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Ret Event'"); + + InstructionDesc[OpSubgroupBallotKHR].operands.push(OperandId, "'Predicate'"); + + InstructionDesc[OpSubgroupFirstInvocationKHR].operands.push(OperandId, "'Value'"); + + InstructionDesc[OpSubgroupAnyKHR].capabilities.push_back(CapabilitySubgroupVoteKHR); + InstructionDesc[OpSubgroupAnyKHR].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpSubgroupAnyKHR].operands.push(OperandId, "'Predicate'"); + + InstructionDesc[OpSubgroupAllKHR].capabilities.push_back(CapabilitySubgroupVoteKHR); + InstructionDesc[OpSubgroupAllKHR].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpSubgroupAllKHR].operands.push(OperandId, "'Predicate'"); + + InstructionDesc[OpSubgroupAllEqualKHR].capabilities.push_back(CapabilitySubgroupVoteKHR); + InstructionDesc[OpSubgroupAllEqualKHR].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpSubgroupAllEqualKHR].operands.push(OperandId, "'Predicate'"); + + InstructionDesc[OpSubgroupReadInvocationKHR].capabilities.push_back(CapabilityGroups); + InstructionDesc[OpSubgroupReadInvocationKHR].operands.push(OperandId, "'Value'"); + InstructionDesc[OpSubgroupReadInvocationKHR].operands.push(OperandId, "'Index'"); + +#ifdef AMD_EXTENSIONS + InstructionDesc[OpGroupIAddNonUniformAMD].capabilities.push_back(CapabilityGroups); + InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandId, "'X'"); + + InstructionDesc[OpGroupFAddNonUniformAMD].capabilities.push_back(CapabilityGroups); + InstructionDesc[OpGroupFAddNonUniformAMD].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupFAddNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[OpGroupFAddNonUniformAMD].operands.push(OperandId, "'X'"); + + InstructionDesc[OpGroupUMinNonUniformAMD].capabilities.push_back(CapabilityGroups); + InstructionDesc[OpGroupUMinNonUniformAMD].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupUMinNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[OpGroupUMinNonUniformAMD].operands.push(OperandId, "'X'"); + + InstructionDesc[OpGroupSMinNonUniformAMD].capabilities.push_back(CapabilityGroups); + InstructionDesc[OpGroupSMinNonUniformAMD].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupSMinNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[OpGroupSMinNonUniformAMD].operands.push(OperandId, "X"); + + InstructionDesc[OpGroupFMinNonUniformAMD].capabilities.push_back(CapabilityGroups); + InstructionDesc[OpGroupFMinNonUniformAMD].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupFMinNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[OpGroupFMinNonUniformAMD].operands.push(OperandId, "X"); + + InstructionDesc[OpGroupUMaxNonUniformAMD].capabilities.push_back(CapabilityGroups); + InstructionDesc[OpGroupUMaxNonUniformAMD].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupUMaxNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[OpGroupUMaxNonUniformAMD].operands.push(OperandId, "X"); + + InstructionDesc[OpGroupSMaxNonUniformAMD].capabilities.push_back(CapabilityGroups); + InstructionDesc[OpGroupSMaxNonUniformAMD].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupSMaxNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[OpGroupSMaxNonUniformAMD].operands.push(OperandId, "X"); + + InstructionDesc[OpGroupFMaxNonUniformAMD].capabilities.push_back(CapabilityGroups); + InstructionDesc[OpGroupFMaxNonUniformAMD].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupFMaxNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[OpGroupFMaxNonUniformAMD].operands.push(OperandId, "X"); +#endif +} + +}; // end spv namespace diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/doc.h b/3rdparty/bgfx/3rdparty/glslang/SPIRV/doc.h new file mode 100644 index 0000000..7dcc51d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/doc.h @@ -0,0 +1,260 @@ +// +// Copyright (C) 2014-2015 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. + +// +// Parameterize the SPIR-V enumerants. +// + +#include "spirv.hpp" + +#include + +namespace spv { + +// Fill in all the parameters +void Parameterize(); + +// Return the English names of all the enums. +const char* SourceString(int); +const char* AddressingString(int); +const char* MemoryString(int); +const char* ExecutionModelString(int); +const char* ExecutionModeString(int); +const char* StorageClassString(int); +const char* DecorationString(int); +const char* BuiltInString(int); +const char* DimensionString(int); +const char* SelectControlString(int); +const char* LoopControlString(int); +const char* FunctionControlString(int); +const char* SamplerAddressingModeString(int); +const char* SamplerFilterModeString(int); +const char* ImageFormatString(int); +const char* ImageChannelOrderString(int); +const char* ImageChannelTypeString(int); +const char* ImageChannelDataTypeString(int type); +const char* ImageOperandsString(int format); +const char* ImageOperands(int); +const char* FPFastMathString(int); +const char* FPRoundingModeString(int); +const char* LinkageTypeString(int); +const char* FuncParamAttrString(int); +const char* AccessQualifierString(int); +const char* MemorySemanticsString(int); +const char* MemoryAccessString(int); +const char* ExecutionScopeString(int); +const char* GroupOperationString(int); +const char* KernelEnqueueFlagsString(int); +const char* KernelProfilingInfoString(int); +const char* CapabilityString(int); +const char* OpcodeString(int); +const char* ScopeString(int mem); + +// For grouping opcodes into subsections +enum OpcodeClass { + OpClassMisc, + OpClassDebug, + OpClassAnnotate, + OpClassExtension, + OpClassMode, + OpClassType, + OpClassConstant, + OpClassMemory, + OpClassFunction, + OpClassImage, + OpClassConvert, + OpClassComposite, + OpClassArithmetic, + OpClassBit, + OpClassRelationalLogical, + OpClassDerivative, + OpClassFlowControl, + OpClassAtomic, + OpClassPrimitive, + OpClassBarrier, + OpClassGroup, + OpClassDeviceSideEnqueue, + OpClassPipe, + + OpClassCount, + OpClassMissing // all instructions start out as missing +}; + +// For parameterizing operands. +enum OperandClass { + OperandNone, + OperandId, + OperandVariableIds, + OperandOptionalLiteral, + OperandOptionalLiteralString, + OperandVariableLiterals, + OperandVariableIdLiteral, + OperandVariableLiteralId, + OperandLiteralNumber, + OperandLiteralString, + OperandSource, + OperandExecutionModel, + OperandAddressing, + OperandMemory, + OperandExecutionMode, + OperandStorage, + OperandDimensionality, + OperandSamplerAddressingMode, + OperandSamplerFilterMode, + OperandSamplerImageFormat, + OperandImageChannelOrder, + OperandImageChannelDataType, + OperandImageOperands, + OperandFPFastMath, + OperandFPRoundingMode, + OperandLinkageType, + OperandAccessQualifier, + OperandFuncParamAttr, + OperandDecoration, + OperandBuiltIn, + OperandSelect, + OperandLoop, + OperandFunction, + OperandMemorySemantics, + OperandMemoryAccess, + OperandScope, + OperandGroupOperation, + OperandKernelEnqueueFlags, + OperandKernelProfilingInfo, + OperandCapability, + + OperandOpcode, + + OperandCount +}; + +// Any specific enum can have a set of capabilities that allow it: +typedef std::vector EnumCaps; + +// Parameterize a set of operands with their OperandClass(es) and descriptions. +class OperandParameters { +public: + OperandParameters() { } + void push(OperandClass oc, const char* d, bool opt = false) + { + opClass.push_back(oc); + desc.push_back(d); + optional.push_back(opt); + } + void setOptional(); + OperandClass getClass(int op) const { return opClass[op]; } + const char* getDesc(int op) const { return desc[op]; } + bool isOptional(int op) const { return optional[op]; } + int getNum() const { return (int)opClass.size(); } + +protected: + std::vector opClass; + std::vector desc; + std::vector optional; +}; + +// Parameterize an enumerant +class EnumParameters { +public: + EnumParameters() : desc(0) { } + EnumCaps caps; + const char* desc; +}; + +// Parameterize a set of enumerants that form an enum +class EnumDefinition : public EnumParameters { +public: + EnumDefinition() : + ceiling(0), bitmask(false), getName(0), enumParams(0), operandParams(0) { } + void set(int ceil, const char* (*name)(int), EnumParameters* ep, bool mask = false) + { + ceiling = ceil; + getName = name; + bitmask = mask; + enumParams = ep; + } + void setOperands(OperandParameters* op) { operandParams = op; } + int ceiling; // ceiling of enumerants + bool bitmask; // true if these enumerants combine into a bitmask + const char* (*getName)(int); // a function that returns the name for each enumerant value (or shift) + EnumParameters* enumParams; // parameters for each individual enumerant + OperandParameters* operandParams; // sets of operands +}; + +// Parameterize an instruction's logical format, including its known set of operands, +// per OperandParameters above. +class InstructionParameters { +public: + InstructionParameters() : + opDesc("TBD"), + opClass(OpClassMissing), + typePresent(true), // most normal, only exceptions have to be spelled out + resultPresent(true) // most normal, only exceptions have to be spelled out + { } + + void setResultAndType(bool r, bool t) + { + resultPresent = r; + typePresent = t; + } + + bool hasResult() const { return resultPresent != 0; } + bool hasType() const { return typePresent != 0; } + + const char* opDesc; + EnumCaps capabilities; + OpcodeClass opClass; + OperandParameters operands; + +protected: + int typePresent : 1; + int resultPresent : 1; +}; + +const int OpcodeCeiling = 321; + +// The set of objects that hold all the instruction/operand +// parameterization information. +extern InstructionParameters InstructionDesc[]; + +// These hold definitions of the enumerants used for operands +extern EnumDefinition OperandClassParams[]; + +const char* GetOperandDesc(OperandClass operand); +void PrintImmediateRow(int imm, const char* name, const EnumParameters* enumParams, bool caps, bool hex = false); +const char* AccessQualifierString(int attr); + +void PrintOperands(const OperandParameters& operands, int reservedOperands); + +}; // end namespace spv diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/hex_float.h b/3rdparty/bgfx/3rdparty/glslang/SPIRV/hex_float.h new file mode 100644 index 0000000..31b9f9e --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/hex_float.h @@ -0,0 +1,1078 @@ +// Copyright (c) 2015-2016 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. +// 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. + +#ifndef LIBSPIRV_UTIL_HEX_FLOAT_H_ +#define LIBSPIRV_UTIL_HEX_FLOAT_H_ + +#include +#include +#include +#include +#include +#include +#include + +#if defined(_MSC_VER) && _MSC_VER < 1700 +namespace std { +bool isnan(double f) +{ + return ::_isnan(f) != 0; +} +bool isinf(double f) +{ + return ::_finite(f) == 0; +} +} +#endif + +#include "bitutils.h" + +namespace spvutils { + +class Float16 { + public: + Float16(uint16_t v) : val(v) {} + Float16() {} + static bool isNan(const Float16& val) { + return ((val.val & 0x7C00) == 0x7C00) && ((val.val & 0x3FF) != 0); + } + // Returns true if the given value is any kind of infinity. + static bool isInfinity(const Float16& val) { + return ((val.val & 0x7C00) == 0x7C00) && ((val.val & 0x3FF) == 0); + } + Float16(const Float16& other) { val = other.val; } + uint16_t get_value() const { return val; } + + // Returns the maximum normal value. + static Float16 max() { return Float16(0x7bff); } + // Returns the lowest normal value. + static Float16 lowest() { return Float16(0xfbff); } + + private: + uint16_t val; +}; + +// To specialize this type, you must override uint_type to define +// an unsigned integer that can fit your floating point type. +// You must also add a isNan function that returns true if +// a value is Nan. +template +struct FloatProxyTraits { + typedef void uint_type; +}; + +template <> +struct FloatProxyTraits { + typedef uint32_t uint_type; + static bool isNan(float f) { return std::isnan(f); } + // Returns true if the given value is any kind of infinity. + static bool isInfinity(float f) { return std::isinf(f); } + // Returns the maximum normal value. + static float max() { return std::numeric_limits::max(); } + // Returns the lowest normal value. + static float lowest() { return std::numeric_limits::lowest(); } +}; + +template <> +struct FloatProxyTraits { + typedef uint64_t uint_type; + static bool isNan(double f) { return std::isnan(f); } + // Returns true if the given value is any kind of infinity. + static bool isInfinity(double f) { return std::isinf(f); } + // Returns the maximum normal value. + static double max() { return std::numeric_limits::max(); } + // Returns the lowest normal value. + static double lowest() { return std::numeric_limits::lowest(); } +}; + +template <> +struct FloatProxyTraits { + typedef uint16_t uint_type; + static bool isNan(Float16 f) { return Float16::isNan(f); } + // Returns true if the given value is any kind of infinity. + static bool isInfinity(Float16 f) { return Float16::isInfinity(f); } + // Returns the maximum normal value. + static Float16 max() { return Float16::max(); } + // Returns the lowest normal value. + static Float16 lowest() { return Float16::lowest(); } +}; + +// Since copying a floating point number (especially if it is NaN) +// does not guarantee that bits are preserved, this class lets us +// store the type and use it as a float when necessary. +template +class FloatProxy { + public: + typedef typename FloatProxyTraits::uint_type uint_type; + + // Since this is to act similar to the normal floats, + // do not initialize the data by default. + FloatProxy() {} + + // Intentionally non-explicit. This is a proxy type so + // implicit conversions allow us to use it more transparently. + FloatProxy(T val) { data_ = BitwiseCast(val); } + + // Intentionally non-explicit. This is a proxy type so + // implicit conversions allow us to use it more transparently. + FloatProxy(uint_type val) { data_ = val; } + + // This is helpful to have and is guaranteed not to stomp bits. + FloatProxy operator-() const { + return static_cast(data_ ^ + (uint_type(0x1) << (sizeof(T) * 8 - 1))); + } + + // Returns the data as a floating point value. + T getAsFloat() const { return BitwiseCast(data_); } + + // Returns the raw data. + uint_type data() const { return data_; } + + // Returns true if the value represents any type of NaN. + bool isNan() { return FloatProxyTraits::isNan(getAsFloat()); } + // Returns true if the value represents any type of infinity. + bool isInfinity() { return FloatProxyTraits::isInfinity(getAsFloat()); } + + // Returns the maximum normal value. + static FloatProxy max() { + return FloatProxy(FloatProxyTraits::max()); + } + // Returns the lowest normal value. + static FloatProxy lowest() { + return FloatProxy(FloatProxyTraits::lowest()); + } + + private: + uint_type data_; +}; + +template +bool operator==(const FloatProxy& first, const FloatProxy& second) { + return first.data() == second.data(); +} + +// Reads a FloatProxy value as a normal float from a stream. +template +std::istream& operator>>(std::istream& is, FloatProxy& value) { + T float_val; + is >> float_val; + value = FloatProxy(float_val); + return is; +} + +// This is an example traits. It is not meant to be used in practice, but will +// be the default for any non-specialized type. +template +struct HexFloatTraits { + // Integer type that can store this hex-float. + typedef void uint_type; + // Signed integer type that can store this hex-float. + typedef void int_type; + // The numerical type that this HexFloat represents. + typedef void underlying_type; + // The type needed to construct the underlying type. + typedef void native_type; + // The number of bits that are actually relevant in the uint_type. + // This allows us to deal with, for example, 24-bit values in a 32-bit + // integer. + static const uint32_t num_used_bits = 0; + // Number of bits that represent the exponent. + static const uint32_t num_exponent_bits = 0; + // Number of bits that represent the fractional part. + static const uint32_t num_fraction_bits = 0; + // The bias of the exponent. (How much we need to subtract from the stored + // value to get the correct value.) + static const uint32_t exponent_bias = 0; +}; + +// Traits for IEEE float. +// 1 sign bit, 8 exponent bits, 23 fractional bits. +template <> +struct HexFloatTraits> { + typedef uint32_t uint_type; + typedef int32_t int_type; + typedef FloatProxy underlying_type; + typedef float native_type; + static const uint_type num_used_bits = 32; + static const uint_type num_exponent_bits = 8; + static const uint_type num_fraction_bits = 23; + static const uint_type exponent_bias = 127; +}; + +// Traits for IEEE double. +// 1 sign bit, 11 exponent bits, 52 fractional bits. +template <> +struct HexFloatTraits> { + typedef uint64_t uint_type; + typedef int64_t int_type; + typedef FloatProxy underlying_type; + typedef double native_type; + static const uint_type num_used_bits = 64; + static const uint_type num_exponent_bits = 11; + static const uint_type num_fraction_bits = 52; + static const uint_type exponent_bias = 1023; +}; + +// Traits for IEEE half. +// 1 sign bit, 5 exponent bits, 10 fractional bits. +template <> +struct HexFloatTraits> { + typedef uint16_t uint_type; + typedef int16_t int_type; + typedef uint16_t underlying_type; + typedef uint16_t native_type; + static const uint_type num_used_bits = 16; + static const uint_type num_exponent_bits = 5; + static const uint_type num_fraction_bits = 10; + static const uint_type exponent_bias = 15; +}; + +enum round_direction { + kRoundToZero, + kRoundToNearestEven, + kRoundToPositiveInfinity, + kRoundToNegativeInfinity +}; + +// Template class that houses a floating pointer number. +// It exposes a number of constants based on the provided traits to +// assist in interpreting the bits of the value. +template > +class HexFloat { + public: + typedef typename Traits::uint_type uint_type; + typedef typename Traits::int_type int_type; + typedef typename Traits::underlying_type underlying_type; + typedef typename Traits::native_type native_type; + + explicit HexFloat(T f) : value_(f) {} + + T value() const { return value_; } + void set_value(T f) { value_ = f; } + + // These are all written like this because it is convenient to have + // compile-time constants for all of these values. + + // Pass-through values to save typing. + static const uint32_t num_used_bits = Traits::num_used_bits; + static const uint32_t exponent_bias = Traits::exponent_bias; + static const uint32_t num_exponent_bits = Traits::num_exponent_bits; + static const uint32_t num_fraction_bits = Traits::num_fraction_bits; + + // Number of bits to shift left to set the highest relevant bit. + static const uint32_t top_bit_left_shift = num_used_bits - 1; + // How many nibbles (hex characters) the fractional part takes up. + static const uint32_t fraction_nibbles = (num_fraction_bits + 3) / 4; + // If the fractional part does not fit evenly into a hex character (4-bits) + // then we have to left-shift to get rid of leading 0s. This is the amount + // we have to shift (might be 0). + static const uint32_t num_overflow_bits = + fraction_nibbles * 4 - num_fraction_bits; + + // The representation of the fraction, not the actual bits. This + // includes the leading bit that is usually implicit. + static const uint_type fraction_represent_mask = + spvutils::SetBits::get; + + // The topmost bit in the nibble-aligned fraction. + static const uint_type fraction_top_bit = + uint_type(1) << (num_fraction_bits + num_overflow_bits - 1); + + // The least significant bit in the exponent, which is also the bit + // immediately to the left of the significand. + static const uint_type first_exponent_bit = uint_type(1) + << (num_fraction_bits); + + // The mask for the encoded fraction. It does not include the + // implicit bit. + static const uint_type fraction_encode_mask = + spvutils::SetBits::get; + + // The bit that is used as a sign. + static const uint_type sign_mask = uint_type(1) << top_bit_left_shift; + + // The bits that represent the exponent. + static const uint_type exponent_mask = + spvutils::SetBits::get; + + // How far left the exponent is shifted. + static const uint32_t exponent_left_shift = num_fraction_bits; + + // How far from the right edge the fraction is shifted. + static const uint32_t fraction_right_shift = + static_cast(sizeof(uint_type) * 8) - num_fraction_bits; + + // The maximum representable unbiased exponent. + static const int_type max_exponent = + (exponent_mask >> num_fraction_bits) - exponent_bias; + // The minimum representable exponent for normalized numbers. + static const int_type min_exponent = -static_cast(exponent_bias); + + // Returns the bits associated with the value. + uint_type getBits() const { return spvutils::BitwiseCast(value_); } + + // Returns the bits associated with the value, without the leading sign bit. + uint_type getUnsignedBits() const { + return static_cast(spvutils::BitwiseCast(value_) & + ~sign_mask); + } + + // Returns the bits associated with the exponent, shifted to start at the + // lsb of the type. + const uint_type getExponentBits() const { + return static_cast((getBits() & exponent_mask) >> + num_fraction_bits); + } + + // Returns the exponent in unbiased form. This is the exponent in the + // human-friendly form. + const int_type getUnbiasedExponent() const { + return static_cast(getExponentBits() - exponent_bias); + } + + // Returns just the significand bits from the value. + const uint_type getSignificandBits() const { + return getBits() & fraction_encode_mask; + } + + // If the number was normalized, returns the unbiased exponent. + // If the number was denormal, normalize the exponent first. + const int_type getUnbiasedNormalizedExponent() const { + if ((getBits() & ~sign_mask) == 0) { // special case if everything is 0 + return 0; + } + int_type exp = getUnbiasedExponent(); + if (exp == min_exponent) { // We are in denorm land. + uint_type significand_bits = getSignificandBits(); + while ((significand_bits & (first_exponent_bit >> 1)) == 0) { + significand_bits = static_cast(significand_bits << 1); + exp = static_cast(exp - 1); + } + significand_bits &= fraction_encode_mask; + } + return exp; + } + + // Returns the signficand after it has been normalized. + const uint_type getNormalizedSignificand() const { + int_type unbiased_exponent = getUnbiasedNormalizedExponent(); + uint_type significand = getSignificandBits(); + for (int_type i = unbiased_exponent; i <= min_exponent; ++i) { + significand = static_cast(significand << 1); + } + significand &= fraction_encode_mask; + return significand; + } + + // Returns true if this number represents a negative value. + bool isNegative() const { return (getBits() & sign_mask) != 0; } + + // Sets this HexFloat from the individual components. + // Note this assumes EVERY significand is normalized, and has an implicit + // leading one. This means that the only way that this method will set 0, + // is if you set a number so denormalized that it underflows. + // Do not use this method with raw bits extracted from a subnormal number, + // since subnormals do not have an implicit leading 1 in the significand. + // The significand is also expected to be in the + // lowest-most num_fraction_bits of the uint_type. + // The exponent is expected to be unbiased, meaning an exponent of + // 0 actually means 0. + // If underflow_round_up is set, then on underflow, if a number is non-0 + // and would underflow, we round up to the smallest denorm. + void setFromSignUnbiasedExponentAndNormalizedSignificand( + bool negative, int_type exponent, uint_type significand, + bool round_denorm_up) { + bool significand_is_zero = significand == 0; + + if (exponent <= min_exponent) { + // If this was denormalized, then we have to shift the bit on, meaning + // the significand is not zero. + significand_is_zero = false; + significand |= first_exponent_bit; + significand = static_cast(significand >> 1); + } + + while (exponent < min_exponent) { + significand = static_cast(significand >> 1); + ++exponent; + } + + if (exponent == min_exponent) { + if (significand == 0 && !significand_is_zero && round_denorm_up) { + significand = static_cast(0x1); + } + } + + uint_type new_value = 0; + if (negative) { + new_value = static_cast(new_value | sign_mask); + } + exponent = static_cast(exponent + exponent_bias); + assert(exponent >= 0); + + // put it all together + exponent = static_cast((exponent << exponent_left_shift) & + exponent_mask); + significand = static_cast(significand & fraction_encode_mask); + new_value = static_cast(new_value | (exponent | significand)); + value_ = BitwiseCast(new_value); + } + + // Increments the significand of this number by the given amount. + // If this would spill the significand into the implicit bit, + // carry is set to true and the significand is shifted to fit into + // the correct location, otherwise carry is set to false. + // All significands and to_increment are assumed to be within the bounds + // for a valid significand. + static uint_type incrementSignificand(uint_type significand, + uint_type to_increment, bool* carry) { + significand = static_cast(significand + to_increment); + *carry = false; + if (significand & first_exponent_bit) { + *carry = true; + // The implicit 1-bit will have carried, so we should zero-out the + // top bit and shift back. + significand = static_cast(significand & ~first_exponent_bit); + significand = static_cast(significand >> 1); + } + return significand; + } + + // These exist because MSVC throws warnings on negative right-shifts + // even if they are not going to be executed. Eg: + // constant_number < 0? 0: constant_number + // These convert the negative left-shifts into right shifts. + + template + uint_type negatable_left_shift(int_type N, uint_type val) + { + if(N >= 0) + return val << N; + + return val >> -N; + } + + template + uint_type negatable_right_shift(int_type N, uint_type val) + { + if(N >= 0) + return val >> N; + + return val << -N; + } + + // Returns the significand, rounded to fit in a significand in + // other_T. This is shifted so that the most significant + // bit of the rounded number lines up with the most significant bit + // of the returned significand. + template + typename other_T::uint_type getRoundedNormalizedSignificand( + round_direction dir, bool* carry_bit) { + typedef typename other_T::uint_type other_uint_type; + static const int_type num_throwaway_bits = + static_cast(num_fraction_bits) - + static_cast(other_T::num_fraction_bits); + + static const uint_type last_significant_bit = + (num_throwaway_bits < 0) + ? 0 + : negatable_left_shift(num_throwaway_bits, 1u); + static const uint_type first_rounded_bit = + (num_throwaway_bits < 1) + ? 0 + : negatable_left_shift(num_throwaway_bits - 1, 1u); + + static const uint_type throwaway_mask_bits = + num_throwaway_bits > 0 ? num_throwaway_bits : 0; + static const uint_type throwaway_mask = + spvutils::SetBits::get; + + *carry_bit = false; + other_uint_type out_val = 0; + uint_type significand = getNormalizedSignificand(); + // If we are up-casting, then we just have to shift to the right location. + if (num_throwaway_bits <= 0) { + out_val = static_cast(significand); + uint_type shift_amount = static_cast(-num_throwaway_bits); + out_val = static_cast(out_val << shift_amount); + return out_val; + } + + // If every non-representable bit is 0, then we don't have any casting to + // do. + if ((significand & throwaway_mask) == 0) { + return static_cast( + negatable_right_shift(num_throwaway_bits, significand)); + } + + bool round_away_from_zero = false; + // We actually have to narrow the significand here, so we have to follow the + // rounding rules. + switch (dir) { + case kRoundToZero: + break; + case kRoundToPositiveInfinity: + round_away_from_zero = !isNegative(); + break; + case kRoundToNegativeInfinity: + round_away_from_zero = isNegative(); + break; + case kRoundToNearestEven: + // Have to round down, round bit is 0 + if ((first_rounded_bit & significand) == 0) { + break; + } + if (((significand & throwaway_mask) & ~first_rounded_bit) != 0) { + // If any subsequent bit of the rounded portion is non-0 then we round + // up. + round_away_from_zero = true; + break; + } + // We are exactly half-way between 2 numbers, pick even. + if ((significand & last_significant_bit) != 0) { + // 1 for our last bit, round up. + round_away_from_zero = true; + break; + } + break; + } + + if (round_away_from_zero) { + return static_cast( + negatable_right_shift(num_throwaway_bits, incrementSignificand( + significand, last_significant_bit, carry_bit))); + } else { + return static_cast( + negatable_right_shift(num_throwaway_bits, significand)); + } + } + + // Casts this value to another HexFloat. If the cast is widening, + // then round_dir is ignored. If the cast is narrowing, then + // the result is rounded in the direction specified. + // This number will retain Nan and Inf values. + // It will also saturate to Inf if the number overflows, and + // underflow to (0 or min depending on rounding) if the number underflows. + template + void castTo(other_T& other, round_direction round_dir) { + other = other_T(static_cast(0)); + bool negate = isNegative(); + if (getUnsignedBits() == 0) { + if (negate) { + other.set_value(-other.value()); + } + return; + } + uint_type significand = getSignificandBits(); + bool carried = false; + typename other_T::uint_type rounded_significand = + getRoundedNormalizedSignificand(round_dir, &carried); + + int_type exponent = getUnbiasedExponent(); + if (exponent == min_exponent) { + // If we are denormal, normalize the exponent, so that we can encode + // easily. + exponent = static_cast(exponent + 1); + for (uint_type check_bit = first_exponent_bit >> 1; check_bit != 0; + check_bit = static_cast(check_bit >> 1)) { + exponent = static_cast(exponent - 1); + if (check_bit & significand) break; + } + } + + bool is_nan = + (getBits() & exponent_mask) == exponent_mask && significand != 0; + bool is_inf = + !is_nan && + ((exponent + carried) > static_cast(other_T::exponent_bias) || + (significand == 0 && (getBits() & exponent_mask) == exponent_mask)); + + // If we are Nan or Inf we should pass that through. + if (is_inf) { + other.set_value(BitwiseCast( + static_cast( + (negate ? other_T::sign_mask : 0) | other_T::exponent_mask))); + return; + } + if (is_nan) { + typename other_T::uint_type shifted_significand; + shifted_significand = static_cast( + negatable_left_shift( + static_cast(other_T::num_fraction_bits) - + static_cast(num_fraction_bits), significand)); + + // We are some sort of Nan. We try to keep the bit-pattern of the Nan + // as close as possible. If we had to shift off bits so we are 0, then we + // just set the last bit. + other.set_value(BitwiseCast( + static_cast( + (negate ? other_T::sign_mask : 0) | other_T::exponent_mask | + (shifted_significand == 0 ? 0x1 : shifted_significand)))); + return; + } + + bool round_underflow_up = + isNegative() ? round_dir == kRoundToNegativeInfinity + : round_dir == kRoundToPositiveInfinity; + typedef typename other_T::int_type other_int_type; + // setFromSignUnbiasedExponentAndNormalizedSignificand will + // zero out any underflowing value (but retain the sign). + other.setFromSignUnbiasedExponentAndNormalizedSignificand( + negate, static_cast(exponent), rounded_significand, + round_underflow_up); + return; + } + + private: + T value_; + + static_assert(num_used_bits == + Traits::num_exponent_bits + Traits::num_fraction_bits + 1, + "The number of bits do not fit"); + static_assert(sizeof(T) == sizeof(uint_type), "The type sizes do not match"); +}; + +// Returns 4 bits represented by the hex character. +inline uint8_t get_nibble_from_character(int character) { + const char* dec = "0123456789"; + const char* lower = "abcdef"; + const char* upper = "ABCDEF"; + const char* p = nullptr; + if ((p = strchr(dec, character))) { + return static_cast(p - dec); + } else if ((p = strchr(lower, character))) { + return static_cast(p - lower + 0xa); + } else if ((p = strchr(upper, character))) { + return static_cast(p - upper + 0xa); + } + + assert(false && "This was called with a non-hex character"); + return 0; +} + +// Outputs the given HexFloat to the stream. +template +std::ostream& operator<<(std::ostream& os, const HexFloat& value) { + typedef HexFloat HF; + typedef typename HF::uint_type uint_type; + typedef typename HF::int_type int_type; + + static_assert(HF::num_used_bits != 0, + "num_used_bits must be non-zero for a valid float"); + static_assert(HF::num_exponent_bits != 0, + "num_exponent_bits must be non-zero for a valid float"); + static_assert(HF::num_fraction_bits != 0, + "num_fractin_bits must be non-zero for a valid float"); + + const uint_type bits = spvutils::BitwiseCast(value.value()); + const char* const sign = (bits & HF::sign_mask) ? "-" : ""; + const uint_type exponent = static_cast( + (bits & HF::exponent_mask) >> HF::num_fraction_bits); + + uint_type fraction = static_cast((bits & HF::fraction_encode_mask) + << HF::num_overflow_bits); + + const bool is_zero = exponent == 0 && fraction == 0; + const bool is_denorm = exponent == 0 && !is_zero; + + // exponent contains the biased exponent we have to convert it back into + // the normal range. + int_type int_exponent = static_cast(exponent - HF::exponent_bias); + // If the number is all zeros, then we actually have to NOT shift the + // exponent. + int_exponent = is_zero ? 0 : int_exponent; + + // If we are denorm, then start shifting, and decreasing the exponent until + // our leading bit is 1. + + if (is_denorm) { + while ((fraction & HF::fraction_top_bit) == 0) { + fraction = static_cast(fraction << 1); + int_exponent = static_cast(int_exponent - 1); + } + // Since this is denormalized, we have to consume the leading 1 since it + // will end up being implicit. + fraction = static_cast(fraction << 1); // eat the leading 1 + fraction &= HF::fraction_represent_mask; + } + + uint_type fraction_nibbles = HF::fraction_nibbles; + // We do not have to display any trailing 0s, since this represents the + // fractional part. + while (fraction_nibbles > 0 && (fraction & 0xF) == 0) { + // Shift off any trailing values; + fraction = static_cast(fraction >> 4); + --fraction_nibbles; + } + + const auto saved_flags = os.flags(); + const auto saved_fill = os.fill(); + + os << sign << "0x" << (is_zero ? '0' : '1'); + if (fraction_nibbles) { + // Make sure to keep the leading 0s in place, since this is the fractional + // part. + os << "." << std::setw(static_cast(fraction_nibbles)) + << std::setfill('0') << std::hex << fraction; + } + os << "p" << std::dec << (int_exponent >= 0 ? "+" : "") << int_exponent; + + os.flags(saved_flags); + os.fill(saved_fill); + + return os; +} + +// Returns true if negate_value is true and the next character on the +// input stream is a plus or minus sign. In that case we also set the fail bit +// on the stream and set the value to the zero value for its type. +template +inline bool RejectParseDueToLeadingSign(std::istream& is, bool negate_value, + HexFloat& value) { + if (negate_value) { + auto next_char = is.peek(); + if (next_char == '-' || next_char == '+') { + // Fail the parse. Emulate standard behaviour by setting the value to + // the zero value, and set the fail bit on the stream. + value = HexFloat(typename HexFloat::uint_type(0)); + is.setstate(std::ios_base::failbit); + return true; + } + } + return false; +} + +// Parses a floating point number from the given stream and stores it into the +// value parameter. +// If negate_value is true then the number may not have a leading minus or +// plus, and if it successfully parses, then the number is negated before +// being stored into the value parameter. +// If the value cannot be correctly parsed or overflows the target floating +// point type, then set the fail bit on the stream. +// TODO(dneto): Promise C++11 standard behavior in how the value is set in +// the error case, but only after all target platforms implement it correctly. +// In particular, the Microsoft C++ runtime appears to be out of spec. +template +inline std::istream& ParseNormalFloat(std::istream& is, bool negate_value, + HexFloat& value) { + if (RejectParseDueToLeadingSign(is, negate_value, value)) { + return is; + } + T val; + is >> val; + if (negate_value) { + val = -val; + } + value.set_value(val); + // In the failure case, map -0.0 to 0.0. + if (is.fail() && value.getUnsignedBits() == 0u) { + value = HexFloat(typename HexFloat::uint_type(0)); + } + if (val.isInfinity()) { + // Fail the parse. Emulate standard behaviour by setting the value to + // the closest normal value, and set the fail bit on the stream. + value.set_value((value.isNegative() | negate_value) ? T::lowest() + : T::max()); + is.setstate(std::ios_base::failbit); + } + return is; +} + +// Specialization of ParseNormalFloat for FloatProxy values. +// This will parse the float as it were a 32-bit floating point number, +// and then round it down to fit into a Float16 value. +// The number is rounded towards zero. +// If negate_value is true then the number may not have a leading minus or +// plus, and if it successfully parses, then the number is negated before +// being stored into the value parameter. +// If the value cannot be correctly parsed or overflows the target floating +// point type, then set the fail bit on the stream. +// TODO(dneto): Promise C++11 standard behavior in how the value is set in +// the error case, but only after all target platforms implement it correctly. +// In particular, the Microsoft C++ runtime appears to be out of spec. +template <> +inline std::istream& +ParseNormalFloat, HexFloatTraits>>( + std::istream& is, bool negate_value, + HexFloat, HexFloatTraits>>& value) { + // First parse as a 32-bit float. + HexFloat> float_val(0.0f); + ParseNormalFloat(is, negate_value, float_val); + + // Then convert to 16-bit float, saturating at infinities, and + // rounding toward zero. + float_val.castTo(value, kRoundToZero); + + // Overflow on 16-bit behaves the same as for 32- and 64-bit: set the + // fail bit and set the lowest or highest value. + if (Float16::isInfinity(value.value().getAsFloat())) { + value.set_value(value.isNegative() ? Float16::lowest() : Float16::max()); + is.setstate(std::ios_base::failbit); + } + return is; +} + +// Reads a HexFloat from the given stream. +// If the float is not encoded as a hex-float then it will be parsed +// as a regular float. +// This may fail if your stream does not support at least one unget. +// Nan values can be encoded with "0x1.p+exponent_bias". +// This would normally overflow a float and round to +// infinity but this special pattern is the exact representation for a NaN, +// and therefore is actually encoded as the correct NaN. To encode inf, +// either 0x0p+exponent_bias can be specified or any exponent greater than +// exponent_bias. +// Examples using IEEE 32-bit float encoding. +// 0x1.0p+128 (+inf) +// -0x1.0p-128 (-inf) +// +// 0x1.1p+128 (+Nan) +// -0x1.1p+128 (-Nan) +// +// 0x1p+129 (+inf) +// -0x1p+129 (-inf) +template +std::istream& operator>>(std::istream& is, HexFloat& value) { + using HF = HexFloat; + using uint_type = typename HF::uint_type; + using int_type = typename HF::int_type; + + value.set_value(static_cast(0.f)); + + if (is.flags() & std::ios::skipws) { + // If the user wants to skip whitespace , then we should obey that. + while (std::isspace(is.peek())) { + is.get(); + } + } + + auto next_char = is.peek(); + bool negate_value = false; + + if (next_char != '-' && next_char != '0') { + return ParseNormalFloat(is, negate_value, value); + } + + if (next_char == '-') { + negate_value = true; + is.get(); + next_char = is.peek(); + } + + if (next_char == '0') { + is.get(); // We may have to unget this. + auto maybe_hex_start = is.peek(); + if (maybe_hex_start != 'x' && maybe_hex_start != 'X') { + is.unget(); + return ParseNormalFloat(is, negate_value, value); + } else { + is.get(); // Throw away the 'x'; + } + } else { + return ParseNormalFloat(is, negate_value, value); + } + + // This "looks" like a hex-float so treat it as one. + bool seen_p = false; + bool seen_dot = false; + uint_type fraction_index = 0; + + uint_type fraction = 0; + int_type exponent = HF::exponent_bias; + + // Strip off leading zeros so we don't have to special-case them later. + while ((next_char = is.peek()) == '0') { + is.get(); + } + + bool is_denorm = + true; // Assume denorm "representation" until we hear otherwise. + // NB: This does not mean the value is actually denorm, + // it just means that it was written 0. + bool bits_written = false; // Stays false until we write a bit. + while (!seen_p && !seen_dot) { + // Handle characters that are left of the fractional part. + if (next_char == '.') { + seen_dot = true; + } else if (next_char == 'p') { + seen_p = true; + } else if (::isxdigit(next_char)) { + // We know this is not denormalized since we have stripped all leading + // zeroes and we are not a ".". + is_denorm = false; + int number = get_nibble_from_character(next_char); + for (int i = 0; i < 4; ++i, number <<= 1) { + uint_type write_bit = (number & 0x8) ? 0x1 : 0x0; + if (bits_written) { + // If we are here the bits represented belong in the fractional + // part of the float, and we have to adjust the exponent accordingly. + fraction = static_cast( + fraction | + static_cast( + write_bit << (HF::top_bit_left_shift - fraction_index++))); + exponent = static_cast(exponent + 1); + } + bits_written |= write_bit != 0; + } + } else { + // We have not found our exponent yet, so we have to fail. + is.setstate(std::ios::failbit); + return is; + } + is.get(); + next_char = is.peek(); + } + bits_written = false; + while (seen_dot && !seen_p) { + // Handle only fractional parts now. + if (next_char == 'p') { + seen_p = true; + } else if (::isxdigit(next_char)) { + int number = get_nibble_from_character(next_char); + for (int i = 0; i < 4; ++i, number <<= 1) { + uint_type write_bit = (number & 0x8) ? 0x01 : 0x00; + bits_written |= write_bit != 0; + if (is_denorm && !bits_written) { + // Handle modifying the exponent here this way we can handle + // an arbitrary number of hex values without overflowing our + // integer. + exponent = static_cast(exponent - 1); + } else { + fraction = static_cast( + fraction | + static_cast( + write_bit << (HF::top_bit_left_shift - fraction_index++))); + } + } + } else { + // We still have not found our 'p' exponent yet, so this is not a valid + // hex-float. + is.setstate(std::ios::failbit); + return is; + } + is.get(); + next_char = is.peek(); + } + + bool seen_sign = false; + int8_t exponent_sign = 1; + int_type written_exponent = 0; + while (true) { + if ((next_char == '-' || next_char == '+')) { + if (seen_sign) { + is.setstate(std::ios::failbit); + return is; + } + seen_sign = true; + exponent_sign = (next_char == '-') ? -1 : 1; + } else if (::isdigit(next_char)) { + // Hex-floats express their exponent as decimal. + written_exponent = static_cast(written_exponent * 10); + written_exponent = + static_cast(written_exponent + (next_char - '0')); + } else { + break; + } + is.get(); + next_char = is.peek(); + } + + written_exponent = static_cast(written_exponent * exponent_sign); + exponent = static_cast(exponent + written_exponent); + + bool is_zero = is_denorm && (fraction == 0); + if (is_denorm && !is_zero) { + fraction = static_cast(fraction << 1); + exponent = static_cast(exponent - 1); + } else if (is_zero) { + exponent = 0; + } + + if (exponent <= 0 && !is_zero) { + fraction = static_cast(fraction >> 1); + fraction |= static_cast(1) << HF::top_bit_left_shift; + } + + fraction = (fraction >> HF::fraction_right_shift) & HF::fraction_encode_mask; + + const int_type max_exponent = + SetBits::get; + + // Handle actual denorm numbers + while (exponent < 0 && !is_zero) { + fraction = static_cast(fraction >> 1); + exponent = static_cast(exponent + 1); + + fraction &= HF::fraction_encode_mask; + if (fraction == 0) { + // We have underflowed our fraction. We should clamp to zero. + is_zero = true; + exponent = 0; + } + } + + // We have overflowed so we should be inf/-inf. + if (exponent > max_exponent) { + exponent = max_exponent; + fraction = 0; + } + + uint_type output_bits = static_cast( + static_cast(negate_value ? 1 : 0) << HF::top_bit_left_shift); + output_bits |= fraction; + + uint_type shifted_exponent = static_cast( + static_cast(exponent << HF::exponent_left_shift) & + HF::exponent_mask); + output_bits |= shifted_exponent; + + T output_float = spvutils::BitwiseCast(output_bits); + value.set_value(output_float); + + return is; +} + +// Writes a FloatProxy value to a stream. +// Zero and normal numbers are printed in the usual notation, but with +// enough digits to fully reproduce the value. Other values (subnormal, +// NaN, and infinity) are printed as a hex float. +template +std::ostream& operator<<(std::ostream& os, const FloatProxy& value) { + auto float_val = value.getAsFloat(); + switch (std::fpclassify(float_val)) { + case FP_ZERO: + case FP_NORMAL: { + auto saved_precision = os.precision(); + os.precision(std::numeric_limits::digits10); + os << float_val; + os.precision(saved_precision); + } break; + default: + os << HexFloat>(value); + break; + } + return os; +} + +template <> +inline std::ostream& operator<<(std::ostream& os, + const FloatProxy& value) { + os << HexFloat>(value); + return os; +} +} + +#endif // LIBSPIRV_UTIL_HEX_FLOAT_H_ diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/spirv.hpp b/3rdparty/bgfx/3rdparty/glslang/SPIRV/spirv.hpp new file mode 100755 index 0000000..5580c40 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/spirv.hpp @@ -0,0 +1,952 @@ +// Copyright (c) 2014-2017 The Khronos Group Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and/or associated documentation files (the "Materials"), +// to deal in the Materials without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Materials, and to permit persons to whom the +// Materials are 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 Materials. +// +// MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS +// STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND +// HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ +// +// THE MATERIALS ARE 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 MATERIALS OR THE USE OR OTHER DEALINGS +// IN THE MATERIALS. + +// This header is automatically generated by the same tool that creates +// the Binary Section of the SPIR-V specification. + +// Enumeration tokens for SPIR-V, in various styles: +// C, C++, C++11, JSON, Lua, Python +// +// - C will have tokens with a "Spv" prefix, e.g.: SpvSourceLanguageGLSL +// - C++ will have tokens in the "spv" name space, e.g.: spv::SourceLanguageGLSL +// - C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL +// - Lua will use tables, e.g.: spv.SourceLanguage.GLSL +// - Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL'] +// +// Some tokens act like mask values, which can be OR'd together, +// while others are mutually exclusive. The mask-like ones have +// "Mask" in their name, and a parallel enum that has the shift +// amount (1 << x) for each corresponding enumerant. + +#ifndef spirv_HPP +#define spirv_HPP + +namespace spv { + +typedef unsigned int Id; + +#define SPV_VERSION 0x10000 +#define SPV_REVISION 10 + +static const unsigned int MagicNumber = 0x07230203; +static const unsigned int Version = 0x00010000; +static const unsigned int Revision = 10; +static const unsigned int OpCodeMask = 0xffff; +static const unsigned int WordCountShift = 16; + +enum SourceLanguage { + SourceLanguageUnknown = 0, + SourceLanguageESSL = 1, + SourceLanguageGLSL = 2, + SourceLanguageOpenCL_C = 3, + SourceLanguageOpenCL_CPP = 4, + SourceLanguageMax = 0x7fffffff, +}; + +enum ExecutionModel { + ExecutionModelVertex = 0, + ExecutionModelTessellationControl = 1, + ExecutionModelTessellationEvaluation = 2, + ExecutionModelGeometry = 3, + ExecutionModelFragment = 4, + ExecutionModelGLCompute = 5, + ExecutionModelKernel = 6, + ExecutionModelMax = 0x7fffffff, +}; + +enum AddressingModel { + AddressingModelLogical = 0, + AddressingModelPhysical32 = 1, + AddressingModelPhysical64 = 2, + AddressingModelMax = 0x7fffffff, +}; + +enum MemoryModel { + MemoryModelSimple = 0, + MemoryModelGLSL450 = 1, + MemoryModelOpenCL = 2, + MemoryModelMax = 0x7fffffff, +}; + +enum ExecutionMode { + ExecutionModeInvocations = 0, + ExecutionModeSpacingEqual = 1, + ExecutionModeSpacingFractionalEven = 2, + ExecutionModeSpacingFractionalOdd = 3, + ExecutionModeVertexOrderCw = 4, + ExecutionModeVertexOrderCcw = 5, + ExecutionModePixelCenterInteger = 6, + ExecutionModeOriginUpperLeft = 7, + ExecutionModeOriginLowerLeft = 8, + ExecutionModeEarlyFragmentTests = 9, + ExecutionModePointMode = 10, + ExecutionModeXfb = 11, + ExecutionModeDepthReplacing = 12, + ExecutionModeDepthGreater = 14, + ExecutionModeDepthLess = 15, + ExecutionModeDepthUnchanged = 16, + ExecutionModeLocalSize = 17, + ExecutionModeLocalSizeHint = 18, + ExecutionModeInputPoints = 19, + ExecutionModeInputLines = 20, + ExecutionModeInputLinesAdjacency = 21, + ExecutionModeTriangles = 22, + ExecutionModeInputTrianglesAdjacency = 23, + ExecutionModeQuads = 24, + ExecutionModeIsolines = 25, + ExecutionModeOutputVertices = 26, + ExecutionModeOutputPoints = 27, + ExecutionModeOutputLineStrip = 28, + ExecutionModeOutputTriangleStrip = 29, + ExecutionModeVecTypeHint = 30, + ExecutionModeContractionOff = 31, + ExecutionModeMax = 0x7fffffff, +}; + +enum StorageClass { + StorageClassUniformConstant = 0, + StorageClassInput = 1, + StorageClassUniform = 2, + StorageClassOutput = 3, + StorageClassWorkgroup = 4, + StorageClassCrossWorkgroup = 5, + StorageClassPrivate = 6, + StorageClassFunction = 7, + StorageClassGeneric = 8, + StorageClassPushConstant = 9, + StorageClassAtomicCounter = 10, + StorageClassImage = 11, + StorageClassMax = 0x7fffffff, +}; + +enum Dim { + Dim1D = 0, + Dim2D = 1, + Dim3D = 2, + DimCube = 3, + DimRect = 4, + DimBuffer = 5, + DimSubpassData = 6, + DimMax = 0x7fffffff, +}; + +enum SamplerAddressingMode { + SamplerAddressingModeNone = 0, + SamplerAddressingModeClampToEdge = 1, + SamplerAddressingModeClamp = 2, + SamplerAddressingModeRepeat = 3, + SamplerAddressingModeRepeatMirrored = 4, + SamplerAddressingModeMax = 0x7fffffff, +}; + +enum SamplerFilterMode { + SamplerFilterModeNearest = 0, + SamplerFilterModeLinear = 1, + SamplerFilterModeMax = 0x7fffffff, +}; + +enum ImageFormat { + ImageFormatUnknown = 0, + ImageFormatRgba32f = 1, + ImageFormatRgba16f = 2, + ImageFormatR32f = 3, + ImageFormatRgba8 = 4, + ImageFormatRgba8Snorm = 5, + ImageFormatRg32f = 6, + ImageFormatRg16f = 7, + ImageFormatR11fG11fB10f = 8, + ImageFormatR16f = 9, + ImageFormatRgba16 = 10, + ImageFormatRgb10A2 = 11, + ImageFormatRg16 = 12, + ImageFormatRg8 = 13, + ImageFormatR16 = 14, + ImageFormatR8 = 15, + ImageFormatRgba16Snorm = 16, + ImageFormatRg16Snorm = 17, + ImageFormatRg8Snorm = 18, + ImageFormatR16Snorm = 19, + ImageFormatR8Snorm = 20, + ImageFormatRgba32i = 21, + ImageFormatRgba16i = 22, + ImageFormatRgba8i = 23, + ImageFormatR32i = 24, + ImageFormatRg32i = 25, + ImageFormatRg16i = 26, + ImageFormatRg8i = 27, + ImageFormatR16i = 28, + ImageFormatR8i = 29, + ImageFormatRgba32ui = 30, + ImageFormatRgba16ui = 31, + ImageFormatRgba8ui = 32, + ImageFormatR32ui = 33, + ImageFormatRgb10a2ui = 34, + ImageFormatRg32ui = 35, + ImageFormatRg16ui = 36, + ImageFormatRg8ui = 37, + ImageFormatR16ui = 38, + ImageFormatR8ui = 39, + ImageFormatMax = 0x7fffffff, +}; + +enum ImageChannelOrder { + ImageChannelOrderR = 0, + ImageChannelOrderA = 1, + ImageChannelOrderRG = 2, + ImageChannelOrderRA = 3, + ImageChannelOrderRGB = 4, + ImageChannelOrderRGBA = 5, + ImageChannelOrderBGRA = 6, + ImageChannelOrderARGB = 7, + ImageChannelOrderIntensity = 8, + ImageChannelOrderLuminance = 9, + ImageChannelOrderRx = 10, + ImageChannelOrderRGx = 11, + ImageChannelOrderRGBx = 12, + ImageChannelOrderDepth = 13, + ImageChannelOrderDepthStencil = 14, + ImageChannelOrdersRGB = 15, + ImageChannelOrdersRGBx = 16, + ImageChannelOrdersRGBA = 17, + ImageChannelOrdersBGRA = 18, + ImageChannelOrderABGR = 19, + ImageChannelOrderMax = 0x7fffffff, +}; + +enum ImageChannelDataType { + ImageChannelDataTypeSnormInt8 = 0, + ImageChannelDataTypeSnormInt16 = 1, + ImageChannelDataTypeUnormInt8 = 2, + ImageChannelDataTypeUnormInt16 = 3, + ImageChannelDataTypeUnormShort565 = 4, + ImageChannelDataTypeUnormShort555 = 5, + ImageChannelDataTypeUnormInt101010 = 6, + ImageChannelDataTypeSignedInt8 = 7, + ImageChannelDataTypeSignedInt16 = 8, + ImageChannelDataTypeSignedInt32 = 9, + ImageChannelDataTypeUnsignedInt8 = 10, + ImageChannelDataTypeUnsignedInt16 = 11, + ImageChannelDataTypeUnsignedInt32 = 12, + ImageChannelDataTypeHalfFloat = 13, + ImageChannelDataTypeFloat = 14, + ImageChannelDataTypeUnormInt24 = 15, + ImageChannelDataTypeUnormInt101010_2 = 16, + ImageChannelDataTypeMax = 0x7fffffff, +}; + +enum ImageOperandsShift { + ImageOperandsBiasShift = 0, + ImageOperandsLodShift = 1, + ImageOperandsGradShift = 2, + ImageOperandsConstOffsetShift = 3, + ImageOperandsOffsetShift = 4, + ImageOperandsConstOffsetsShift = 5, + ImageOperandsSampleShift = 6, + ImageOperandsMinLodShift = 7, + ImageOperandsMax = 0x7fffffff, +}; + +enum ImageOperandsMask { + ImageOperandsMaskNone = 0, + ImageOperandsBiasMask = 0x00000001, + ImageOperandsLodMask = 0x00000002, + ImageOperandsGradMask = 0x00000004, + ImageOperandsConstOffsetMask = 0x00000008, + ImageOperandsOffsetMask = 0x00000010, + ImageOperandsConstOffsetsMask = 0x00000020, + ImageOperandsSampleMask = 0x00000040, + ImageOperandsMinLodMask = 0x00000080, +}; + +enum FPFastMathModeShift { + FPFastMathModeNotNaNShift = 0, + FPFastMathModeNotInfShift = 1, + FPFastMathModeNSZShift = 2, + FPFastMathModeAllowRecipShift = 3, + FPFastMathModeFastShift = 4, + FPFastMathModeMax = 0x7fffffff, +}; + +enum FPFastMathModeMask { + FPFastMathModeMaskNone = 0, + FPFastMathModeNotNaNMask = 0x00000001, + FPFastMathModeNotInfMask = 0x00000002, + FPFastMathModeNSZMask = 0x00000004, + FPFastMathModeAllowRecipMask = 0x00000008, + FPFastMathModeFastMask = 0x00000010, +}; + +enum FPRoundingMode { + FPRoundingModeRTE = 0, + FPRoundingModeRTZ = 1, + FPRoundingModeRTP = 2, + FPRoundingModeRTN = 3, + FPRoundingModeMax = 0x7fffffff, +}; + +enum LinkageType { + LinkageTypeExport = 0, + LinkageTypeImport = 1, + LinkageTypeMax = 0x7fffffff, +}; + +enum AccessQualifier { + AccessQualifierReadOnly = 0, + AccessQualifierWriteOnly = 1, + AccessQualifierReadWrite = 2, + AccessQualifierMax = 0x7fffffff, +}; + +enum FunctionParameterAttribute { + FunctionParameterAttributeZext = 0, + FunctionParameterAttributeSext = 1, + FunctionParameterAttributeByVal = 2, + FunctionParameterAttributeSret = 3, + FunctionParameterAttributeNoAlias = 4, + FunctionParameterAttributeNoCapture = 5, + FunctionParameterAttributeNoWrite = 6, + FunctionParameterAttributeNoReadWrite = 7, + FunctionParameterAttributeMax = 0x7fffffff, +}; + +enum Decoration { + DecorationRelaxedPrecision = 0, + DecorationSpecId = 1, + DecorationBlock = 2, + DecorationBufferBlock = 3, + DecorationRowMajor = 4, + DecorationColMajor = 5, + DecorationArrayStride = 6, + DecorationMatrixStride = 7, + DecorationGLSLShared = 8, + DecorationGLSLPacked = 9, + DecorationCPacked = 10, + DecorationBuiltIn = 11, + DecorationNoPerspective = 13, + DecorationFlat = 14, + DecorationPatch = 15, + DecorationCentroid = 16, + DecorationSample = 17, + DecorationInvariant = 18, + DecorationRestrict = 19, + DecorationAliased = 20, + DecorationVolatile = 21, + DecorationConstant = 22, + DecorationCoherent = 23, + DecorationNonWritable = 24, + DecorationNonReadable = 25, + DecorationUniform = 26, + DecorationSaturatedConversion = 28, + DecorationStream = 29, + DecorationLocation = 30, + DecorationComponent = 31, + DecorationIndex = 32, + DecorationBinding = 33, + DecorationDescriptorSet = 34, + DecorationOffset = 35, + DecorationXfbBuffer = 36, + DecorationXfbStride = 37, + DecorationFuncParamAttr = 38, + DecorationFPRoundingMode = 39, + DecorationFPFastMathMode = 40, + DecorationLinkageAttributes = 41, + DecorationNoContraction = 42, + DecorationInputAttachmentIndex = 43, + DecorationAlignment = 44, + DecorationOverrideCoverageNV = 5248, + DecorationPassthroughNV = 5250, + DecorationViewportRelativeNV = 5252, + DecorationSecondaryViewportRelativeNV = 5256, + DecorationMax = 0x7fffffff, +}; + +enum BuiltIn { + BuiltInPosition = 0, + BuiltInPointSize = 1, + BuiltInClipDistance = 3, + BuiltInCullDistance = 4, + BuiltInVertexId = 5, + BuiltInInstanceId = 6, + BuiltInPrimitiveId = 7, + BuiltInInvocationId = 8, + BuiltInLayer = 9, + BuiltInViewportIndex = 10, + BuiltInTessLevelOuter = 11, + BuiltInTessLevelInner = 12, + BuiltInTessCoord = 13, + BuiltInPatchVertices = 14, + BuiltInFragCoord = 15, + BuiltInPointCoord = 16, + BuiltInFrontFacing = 17, + BuiltInSampleId = 18, + BuiltInSamplePosition = 19, + BuiltInSampleMask = 20, + BuiltInFragDepth = 22, + BuiltInHelperInvocation = 23, + BuiltInNumWorkgroups = 24, + BuiltInWorkgroupSize = 25, + BuiltInWorkgroupId = 26, + BuiltInLocalInvocationId = 27, + BuiltInGlobalInvocationId = 28, + BuiltInLocalInvocationIndex = 29, + BuiltInWorkDim = 30, + BuiltInGlobalSize = 31, + BuiltInEnqueuedWorkgroupSize = 32, + BuiltInGlobalOffset = 33, + BuiltInGlobalLinearId = 34, + BuiltInSubgroupSize = 36, + BuiltInSubgroupMaxSize = 37, + BuiltInNumSubgroups = 38, + BuiltInNumEnqueuedSubgroups = 39, + BuiltInSubgroupId = 40, + BuiltInSubgroupLocalInvocationId = 41, + BuiltInVertexIndex = 42, + BuiltInInstanceIndex = 43, + BuiltInSubgroupEqMaskKHR = 4416, + BuiltInSubgroupGeMaskKHR = 4417, + BuiltInSubgroupGtMaskKHR = 4418, + BuiltInSubgroupLeMaskKHR = 4419, + BuiltInSubgroupLtMaskKHR = 4420, + BuiltInBaseVertex = 4424, + BuiltInBaseInstance = 4425, + BuiltInDrawIndex = 4426, + BuiltInDeviceIndex = 4438, + BuiltInViewIndex = 4440, + BuiltInViewportMaskNV = 5253, + BuiltInSecondaryPositionNV = 5257, + BuiltInSecondaryViewportMaskNV = 5258, + BuiltInPositionPerViewNV = 5261, + BuiltInViewportMaskPerViewNV = 5262, + BuiltInMax = 0x7fffffff, +}; + +enum SelectionControlShift { + SelectionControlFlattenShift = 0, + SelectionControlDontFlattenShift = 1, + SelectionControlMax = 0x7fffffff, +}; + +enum SelectionControlMask { + SelectionControlMaskNone = 0, + SelectionControlFlattenMask = 0x00000001, + SelectionControlDontFlattenMask = 0x00000002, +}; + +enum LoopControlShift { + LoopControlUnrollShift = 0, + LoopControlDontUnrollShift = 1, + LoopControlMax = 0x7fffffff, +}; + +enum LoopControlMask { + LoopControlMaskNone = 0, + LoopControlUnrollMask = 0x00000001, + LoopControlDontUnrollMask = 0x00000002, +}; + +enum FunctionControlShift { + FunctionControlInlineShift = 0, + FunctionControlDontInlineShift = 1, + FunctionControlPureShift = 2, + FunctionControlConstShift = 3, + FunctionControlMax = 0x7fffffff, +}; + +enum FunctionControlMask { + FunctionControlMaskNone = 0, + FunctionControlInlineMask = 0x00000001, + FunctionControlDontInlineMask = 0x00000002, + FunctionControlPureMask = 0x00000004, + FunctionControlConstMask = 0x00000008, +}; + +enum MemorySemanticsShift { + MemorySemanticsAcquireShift = 1, + MemorySemanticsReleaseShift = 2, + MemorySemanticsAcquireReleaseShift = 3, + MemorySemanticsSequentiallyConsistentShift = 4, + MemorySemanticsUniformMemoryShift = 6, + MemorySemanticsSubgroupMemoryShift = 7, + MemorySemanticsWorkgroupMemoryShift = 8, + MemorySemanticsCrossWorkgroupMemoryShift = 9, + MemorySemanticsAtomicCounterMemoryShift = 10, + MemorySemanticsImageMemoryShift = 11, + MemorySemanticsMax = 0x7fffffff, +}; + +enum MemorySemanticsMask { + MemorySemanticsMaskNone = 0, + MemorySemanticsAcquireMask = 0x00000002, + MemorySemanticsReleaseMask = 0x00000004, + MemorySemanticsAcquireReleaseMask = 0x00000008, + MemorySemanticsSequentiallyConsistentMask = 0x00000010, + MemorySemanticsUniformMemoryMask = 0x00000040, + MemorySemanticsSubgroupMemoryMask = 0x00000080, + MemorySemanticsWorkgroupMemoryMask = 0x00000100, + MemorySemanticsCrossWorkgroupMemoryMask = 0x00000200, + MemorySemanticsAtomicCounterMemoryMask = 0x00000400, + MemorySemanticsImageMemoryMask = 0x00000800, +}; + +enum MemoryAccessShift { + MemoryAccessVolatileShift = 0, + MemoryAccessAlignedShift = 1, + MemoryAccessNontemporalShift = 2, + MemoryAccessMax = 0x7fffffff, +}; + +enum MemoryAccessMask { + MemoryAccessMaskNone = 0, + MemoryAccessVolatileMask = 0x00000001, + MemoryAccessAlignedMask = 0x00000002, + MemoryAccessNontemporalMask = 0x00000004, +}; + +enum Scope { + ScopeCrossDevice = 0, + ScopeDevice = 1, + ScopeWorkgroup = 2, + ScopeSubgroup = 3, + ScopeInvocation = 4, + ScopeMax = 0x7fffffff, +}; + +enum GroupOperation { + GroupOperationReduce = 0, + GroupOperationInclusiveScan = 1, + GroupOperationExclusiveScan = 2, + GroupOperationMax = 0x7fffffff, +}; + +enum KernelEnqueueFlags { + KernelEnqueueFlagsNoWait = 0, + KernelEnqueueFlagsWaitKernel = 1, + KernelEnqueueFlagsWaitWorkGroup = 2, + KernelEnqueueFlagsMax = 0x7fffffff, +}; + +enum KernelProfilingInfoShift { + KernelProfilingInfoCmdExecTimeShift = 0, + KernelProfilingInfoMax = 0x7fffffff, +}; + +enum KernelProfilingInfoMask { + KernelProfilingInfoMaskNone = 0, + KernelProfilingInfoCmdExecTimeMask = 0x00000001, +}; + +enum Capability { + CapabilityMatrix = 0, + CapabilityShader = 1, + CapabilityGeometry = 2, + CapabilityTessellation = 3, + CapabilityAddresses = 4, + CapabilityLinkage = 5, + CapabilityKernel = 6, + CapabilityVector16 = 7, + CapabilityFloat16Buffer = 8, + CapabilityFloat16 = 9, + CapabilityFloat64 = 10, + CapabilityInt64 = 11, + CapabilityInt64Atomics = 12, + CapabilityImageBasic = 13, + CapabilityImageReadWrite = 14, + CapabilityImageMipmap = 15, + CapabilityPipes = 17, + CapabilityGroups = 18, + CapabilityDeviceEnqueue = 19, + CapabilityLiteralSampler = 20, + CapabilityAtomicStorage = 21, + CapabilityInt16 = 22, + CapabilityTessellationPointSize = 23, + CapabilityGeometryPointSize = 24, + CapabilityImageGatherExtended = 25, + CapabilityStorageImageMultisample = 27, + CapabilityUniformBufferArrayDynamicIndexing = 28, + CapabilitySampledImageArrayDynamicIndexing = 29, + CapabilityStorageBufferArrayDynamicIndexing = 30, + CapabilityStorageImageArrayDynamicIndexing = 31, + CapabilityClipDistance = 32, + CapabilityCullDistance = 33, + CapabilityImageCubeArray = 34, + CapabilitySampleRateShading = 35, + CapabilityImageRect = 36, + CapabilitySampledRect = 37, + CapabilityGenericPointer = 38, + CapabilityInt8 = 39, + CapabilityInputAttachment = 40, + CapabilitySparseResidency = 41, + CapabilityMinLod = 42, + CapabilitySampled1D = 43, + CapabilityImage1D = 44, + CapabilitySampledCubeArray = 45, + CapabilitySampledBuffer = 46, + CapabilityImageBuffer = 47, + CapabilityImageMSArray = 48, + CapabilityStorageImageExtendedFormats = 49, + CapabilityImageQuery = 50, + CapabilityDerivativeControl = 51, + CapabilityInterpolationFunction = 52, + CapabilityTransformFeedback = 53, + CapabilityGeometryStreams = 54, + CapabilityStorageImageReadWithoutFormat = 55, + CapabilityStorageImageWriteWithoutFormat = 56, + CapabilityMultiViewport = 57, + CapabilitySubgroupBallotKHR = 4423, + CapabilityDrawParameters = 4427, + CapabilitySubgroupVoteKHR = 4431, + CapabilityStorageUniformBufferBlock16 = 4433, + CapabilityStorageUniform16 = 4434, + CapabilityStoragePushConstant16 = 4435, + CapabilityStorageInputOutput16 = 4436, + CapabilityDeviceGroup = 4437, + CapabilityMultiView = 4439, + CapabilitySampleMaskOverrideCoverageNV = 5249, + CapabilityGeometryShaderPassthroughNV = 5251, + CapabilityShaderViewportIndexLayerNV = 5254, + CapabilityShaderViewportMaskNV = 5255, + CapabilityShaderStereoViewNV = 5259, + CapabilityPerViewAttributesNV = 5260, + CapabilityMax = 0x7fffffff, +}; + +enum Op { + OpNop = 0, + OpUndef = 1, + OpSourceContinued = 2, + OpSource = 3, + OpSourceExtension = 4, + OpName = 5, + OpMemberName = 6, + OpString = 7, + OpLine = 8, + OpExtension = 10, + OpExtInstImport = 11, + OpExtInst = 12, + OpMemoryModel = 14, + OpEntryPoint = 15, + OpExecutionMode = 16, + OpCapability = 17, + OpTypeVoid = 19, + OpTypeBool = 20, + OpTypeInt = 21, + OpTypeFloat = 22, + OpTypeVector = 23, + OpTypeMatrix = 24, + OpTypeImage = 25, + OpTypeSampler = 26, + OpTypeSampledImage = 27, + OpTypeArray = 28, + OpTypeRuntimeArray = 29, + OpTypeStruct = 30, + OpTypeOpaque = 31, + OpTypePointer = 32, + OpTypeFunction = 33, + OpTypeEvent = 34, + OpTypeDeviceEvent = 35, + OpTypeReserveId = 36, + OpTypeQueue = 37, + OpTypePipe = 38, + OpTypeForwardPointer = 39, + OpConstantTrue = 41, + OpConstantFalse = 42, + OpConstant = 43, + OpConstantComposite = 44, + OpConstantSampler = 45, + OpConstantNull = 46, + OpSpecConstantTrue = 48, + OpSpecConstantFalse = 49, + OpSpecConstant = 50, + OpSpecConstantComposite = 51, + OpSpecConstantOp = 52, + OpFunction = 54, + OpFunctionParameter = 55, + OpFunctionEnd = 56, + OpFunctionCall = 57, + OpVariable = 59, + OpImageTexelPointer = 60, + OpLoad = 61, + OpStore = 62, + OpCopyMemory = 63, + OpCopyMemorySized = 64, + OpAccessChain = 65, + OpInBoundsAccessChain = 66, + OpPtrAccessChain = 67, + OpArrayLength = 68, + OpGenericPtrMemSemantics = 69, + OpInBoundsPtrAccessChain = 70, + OpDecorate = 71, + OpMemberDecorate = 72, + OpDecorationGroup = 73, + OpGroupDecorate = 74, + OpGroupMemberDecorate = 75, + OpVectorExtractDynamic = 77, + OpVectorInsertDynamic = 78, + OpVectorShuffle = 79, + OpCompositeConstruct = 80, + OpCompositeExtract = 81, + OpCompositeInsert = 82, + OpCopyObject = 83, + OpTranspose = 84, + OpSampledImage = 86, + OpImageSampleImplicitLod = 87, + OpImageSampleExplicitLod = 88, + OpImageSampleDrefImplicitLod = 89, + OpImageSampleDrefExplicitLod = 90, + OpImageSampleProjImplicitLod = 91, + OpImageSampleProjExplicitLod = 92, + OpImageSampleProjDrefImplicitLod = 93, + OpImageSampleProjDrefExplicitLod = 94, + OpImageFetch = 95, + OpImageGather = 96, + OpImageDrefGather = 97, + OpImageRead = 98, + OpImageWrite = 99, + OpImage = 100, + OpImageQueryFormat = 101, + OpImageQueryOrder = 102, + OpImageQuerySizeLod = 103, + OpImageQuerySize = 104, + OpImageQueryLod = 105, + OpImageQueryLevels = 106, + OpImageQuerySamples = 107, + OpConvertFToU = 109, + OpConvertFToS = 110, + OpConvertSToF = 111, + OpConvertUToF = 112, + OpUConvert = 113, + OpSConvert = 114, + OpFConvert = 115, + OpQuantizeToF16 = 116, + OpConvertPtrToU = 117, + OpSatConvertSToU = 118, + OpSatConvertUToS = 119, + OpConvertUToPtr = 120, + OpPtrCastToGeneric = 121, + OpGenericCastToPtr = 122, + OpGenericCastToPtrExplicit = 123, + OpBitcast = 124, + OpSNegate = 126, + OpFNegate = 127, + OpIAdd = 128, + OpFAdd = 129, + OpISub = 130, + OpFSub = 131, + OpIMul = 132, + OpFMul = 133, + OpUDiv = 134, + OpSDiv = 135, + OpFDiv = 136, + OpUMod = 137, + OpSRem = 138, + OpSMod = 139, + OpFRem = 140, + OpFMod = 141, + OpVectorTimesScalar = 142, + OpMatrixTimesScalar = 143, + OpVectorTimesMatrix = 144, + OpMatrixTimesVector = 145, + OpMatrixTimesMatrix = 146, + OpOuterProduct = 147, + OpDot = 148, + OpIAddCarry = 149, + OpISubBorrow = 150, + OpUMulExtended = 151, + OpSMulExtended = 152, + OpAny = 154, + OpAll = 155, + OpIsNan = 156, + OpIsInf = 157, + OpIsFinite = 158, + OpIsNormal = 159, + OpSignBitSet = 160, + OpLessOrGreater = 161, + OpOrdered = 162, + OpUnordered = 163, + OpLogicalEqual = 164, + OpLogicalNotEqual = 165, + OpLogicalOr = 166, + OpLogicalAnd = 167, + OpLogicalNot = 168, + OpSelect = 169, + OpIEqual = 170, + OpINotEqual = 171, + OpUGreaterThan = 172, + OpSGreaterThan = 173, + OpUGreaterThanEqual = 174, + OpSGreaterThanEqual = 175, + OpULessThan = 176, + OpSLessThan = 177, + OpULessThanEqual = 178, + OpSLessThanEqual = 179, + OpFOrdEqual = 180, + OpFUnordEqual = 181, + OpFOrdNotEqual = 182, + OpFUnordNotEqual = 183, + OpFOrdLessThan = 184, + OpFUnordLessThan = 185, + OpFOrdGreaterThan = 186, + OpFUnordGreaterThan = 187, + OpFOrdLessThanEqual = 188, + OpFUnordLessThanEqual = 189, + OpFOrdGreaterThanEqual = 190, + OpFUnordGreaterThanEqual = 191, + OpShiftRightLogical = 194, + OpShiftRightArithmetic = 195, + OpShiftLeftLogical = 196, + OpBitwiseOr = 197, + OpBitwiseXor = 198, + OpBitwiseAnd = 199, + OpNot = 200, + OpBitFieldInsert = 201, + OpBitFieldSExtract = 202, + OpBitFieldUExtract = 203, + OpBitReverse = 204, + OpBitCount = 205, + OpDPdx = 207, + OpDPdy = 208, + OpFwidth = 209, + OpDPdxFine = 210, + OpDPdyFine = 211, + OpFwidthFine = 212, + OpDPdxCoarse = 213, + OpDPdyCoarse = 214, + OpFwidthCoarse = 215, + OpEmitVertex = 218, + OpEndPrimitive = 219, + OpEmitStreamVertex = 220, + OpEndStreamPrimitive = 221, + OpControlBarrier = 224, + OpMemoryBarrier = 225, + OpAtomicLoad = 227, + OpAtomicStore = 228, + OpAtomicExchange = 229, + OpAtomicCompareExchange = 230, + OpAtomicCompareExchangeWeak = 231, + OpAtomicIIncrement = 232, + OpAtomicIDecrement = 233, + OpAtomicIAdd = 234, + OpAtomicISub = 235, + OpAtomicSMin = 236, + OpAtomicUMin = 237, + OpAtomicSMax = 238, + OpAtomicUMax = 239, + OpAtomicAnd = 240, + OpAtomicOr = 241, + OpAtomicXor = 242, + OpPhi = 245, + OpLoopMerge = 246, + OpSelectionMerge = 247, + OpLabel = 248, + OpBranch = 249, + OpBranchConditional = 250, + OpSwitch = 251, + OpKill = 252, + OpReturn = 253, + OpReturnValue = 254, + OpUnreachable = 255, + OpLifetimeStart = 256, + OpLifetimeStop = 257, + OpGroupAsyncCopy = 259, + OpGroupWaitEvents = 260, + OpGroupAll = 261, + OpGroupAny = 262, + OpGroupBroadcast = 263, + OpGroupIAdd = 264, + OpGroupFAdd = 265, + OpGroupFMin = 266, + OpGroupUMin = 267, + OpGroupSMin = 268, + OpGroupFMax = 269, + OpGroupUMax = 270, + OpGroupSMax = 271, + OpReadPipe = 274, + OpWritePipe = 275, + OpReservedReadPipe = 276, + OpReservedWritePipe = 277, + OpReserveReadPipePackets = 278, + OpReserveWritePipePackets = 279, + OpCommitReadPipe = 280, + OpCommitWritePipe = 281, + OpIsValidReserveId = 282, + OpGetNumPipePackets = 283, + OpGetMaxPipePackets = 284, + OpGroupReserveReadPipePackets = 285, + OpGroupReserveWritePipePackets = 286, + OpGroupCommitReadPipe = 287, + OpGroupCommitWritePipe = 288, + OpEnqueueMarker = 291, + OpEnqueueKernel = 292, + OpGetKernelNDrangeSubGroupCount = 293, + OpGetKernelNDrangeMaxSubGroupSize = 294, + OpGetKernelWorkGroupSize = 295, + OpGetKernelPreferredWorkGroupSizeMultiple = 296, + OpRetainEvent = 297, + OpReleaseEvent = 298, + OpCreateUserEvent = 299, + OpIsValidEvent = 300, + OpSetUserEventStatus = 301, + OpCaptureEventProfilingInfo = 302, + OpGetDefaultQueue = 303, + OpBuildNDRange = 304, + OpImageSparseSampleImplicitLod = 305, + OpImageSparseSampleExplicitLod = 306, + OpImageSparseSampleDrefImplicitLod = 307, + OpImageSparseSampleDrefExplicitLod = 308, + OpImageSparseSampleProjImplicitLod = 309, + OpImageSparseSampleProjExplicitLod = 310, + OpImageSparseSampleProjDrefImplicitLod = 311, + OpImageSparseSampleProjDrefExplicitLod = 312, + OpImageSparseFetch = 313, + OpImageSparseGather = 314, + OpImageSparseDrefGather = 315, + OpImageSparseTexelsResident = 316, + OpNoLine = 317, + OpAtomicFlagTestAndSet = 318, + OpAtomicFlagClear = 319, + OpImageSparseRead = 320, + OpSubgroupBallotKHR = 4421, + OpSubgroupFirstInvocationKHR = 4422, + OpSubgroupAllKHR = 4428, + OpSubgroupAnyKHR = 4429, + OpSubgroupAllEqualKHR = 4430, + OpSubgroupReadInvocationKHR = 4432, + OpMax = 0x7fffffff, +}; + +// Overload operator| for mask bit combining + +inline ImageOperandsMask operator|(ImageOperandsMask a, ImageOperandsMask b) { return ImageOperandsMask(unsigned(a) | unsigned(b)); } +inline FPFastMathModeMask operator|(FPFastMathModeMask a, FPFastMathModeMask b) { return FPFastMathModeMask(unsigned(a) | unsigned(b)); } +inline SelectionControlMask operator|(SelectionControlMask a, SelectionControlMask b) { return SelectionControlMask(unsigned(a) | unsigned(b)); } +inline LoopControlMask operator|(LoopControlMask a, LoopControlMask b) { return LoopControlMask(unsigned(a) | unsigned(b)); } +inline FunctionControlMask operator|(FunctionControlMask a, FunctionControlMask b) { return FunctionControlMask(unsigned(a) | unsigned(b)); } +inline MemorySemanticsMask operator|(MemorySemanticsMask a, MemorySemanticsMask b) { return MemorySemanticsMask(unsigned(a) | unsigned(b)); } +inline MemoryAccessMask operator|(MemoryAccessMask a, MemoryAccessMask b) { return MemoryAccessMask(unsigned(a) | unsigned(b)); } +inline KernelProfilingInfoMask operator|(KernelProfilingInfoMask a, KernelProfilingInfoMask b) { return KernelProfilingInfoMask(unsigned(a) | unsigned(b)); } + +} // end namespace spv + +#endif // #ifndef spirv_HPP + diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/spvIR.h b/3rdparty/bgfx/3rdparty/glslang/SPIRV/spvIR.h new file mode 100755 index 0000000..ce8b4b8 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/spvIR.h @@ -0,0 +1,405 @@ +// +// Copyright (C) 2014 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. + +// SPIRV-IR +// +// Simple in-memory representation (IR) of SPIRV. Just for holding +// Each function's CFG of blocks. Has this hierarchy: +// - Module, which is a list of +// - Function, which is a list of +// - Block, which is a list of +// - Instruction +// + +#pragma once +#ifndef spvIR_H +#define spvIR_H + +#include "spirv.hpp" + +#include +#include +#include +#include +#include +#include + +namespace spv { + +class Block; +class Function; +class Module; + +const Id NoResult = 0; +const Id NoType = 0; + +const Decoration NoPrecision = DecorationMax; +const MemorySemanticsMask MemorySemanticsAllMemory = + (MemorySemanticsMask)(MemorySemanticsSequentiallyConsistentMask | + MemorySemanticsUniformMemoryMask | + MemorySemanticsSubgroupMemoryMask | + MemorySemanticsWorkgroupMemoryMask | + MemorySemanticsCrossWorkgroupMemoryMask | + MemorySemanticsAtomicCounterMemoryMask | + MemorySemanticsImageMemoryMask); + +// +// SPIR-V IR instruction. +// + +class Instruction { +public: + Instruction(Id resultId, Id typeId, Op opCode) : resultId(resultId), typeId(typeId), opCode(opCode), block(nullptr) { } + explicit Instruction(Op opCode) : resultId(NoResult), typeId(NoType), opCode(opCode), block(nullptr) { } + virtual ~Instruction() {} + void addIdOperand(Id id) { operands.push_back(id); } + 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; + int charCount = 0; + char c; + do { + c = *(str++); + *(wordPtr++) = c; + ++charCount; + if (charCount == 4) { + addImmediateOperand(word); + wordPtr = wordString; + charCount = 0; + } + } while (c != 0); + + // deal with partial last word + if (charCount > 0) { + // pad with 0s + for (; charCount < 4; ++charCount) + *(wordPtr++) = 0; + addImmediateOperand(word); + } + } + void setBlock(Block* b) { block = b; } + Block* getBlock() const { return block; } + Op getOpCode() const { return opCode; } + int getNumOperands() const { return (int)operands.size(); } + Id getResultId() const { return resultId; } + 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& out) const + { + // Compute the wordCount + unsigned int wordCount = 1; + if (typeId) + ++wordCount; + if (resultId) + ++wordCount; + wordCount += (unsigned int)operands.size(); + + // Write out the beginning of the instruction + out.push_back(((wordCount) << WordCountShift) | opCode); + if (typeId) + out.push_back(typeId); + if (resultId) + out.push_back(resultId); + + // Write out the operands + for (int op = 0; op < (int)operands.size(); ++op) + out.push_back(operands[op]); + } + +protected: + Instruction(const Instruction&); + Id resultId; + Id typeId; + Op opCode; + std::vector operands; + std::string originalString; // could be optimized away; convenience for getting string operand + Block* block; +}; + +// +// SPIR-V IR block. +// + +class Block { +public: + Block(Id id, Function& parent); + virtual ~Block() + { + } + + Id getId() { return instructions.front()->getResultId(); } + + Function& getParent() const { return parent; } + void addInstruction(std::unique_ptr inst); + void addPredecessor(Block* pred) { predecessors.push_back(pred); pred->successors.push_back(this);} + void addLocalVariable(std::unique_ptr inst) { localVariables.push_back(std::move(inst)); } + const std::vector& getPredecessors() const { return predecessors; } + const std::vector& getSuccessors() const { return successors; } + const std::vector >& getInstructions() const { + return instructions; + } + void setUnreachable() { unreachable = true; } + bool isUnreachable() const { return unreachable; } + // Returns the block's merge instruction, if one exists (otherwise null). + const Instruction* getMergeInstruction() const { + if (instructions.size() < 2) return nullptr; + const Instruction* nextToLast = (instructions.cend() - 2)->get(); + switch (nextToLast->getOpCode()) { + case OpSelectionMerge: + case OpLoopMerge: + return nextToLast; + default: + return nullptr; + } + return nullptr; + } + + bool isTerminated() const + { + switch (instructions.back()->getOpCode()) { + case OpBranch: + case OpBranchConditional: + case OpSwitch: + case OpKill: + case OpReturn: + case OpReturnValue: + return true; + default: + return false; + } + } + + void dump(std::vector& out) const + { + instructions[0]->dump(out); + for (int i = 0; i < (int)localVariables.size(); ++i) + localVariables[i]->dump(out); + for (int i = 1; i < (int)instructions.size(); ++i) + instructions[i]->dump(out); + } + +protected: + Block(const Block&); + Block& operator=(Block&); + + // To enforce keeping parent and ownership in sync: + friend Function; + + std::vector > instructions; + std::vector predecessors, successors; + std::vector > localVariables; + Function& parent; + + // track whether this block is known to be uncreachable (not necessarily + // true for all unreachable blocks, but should be set at least + // for the extraneous ones introduced by the builder). + bool unreachable; +}; + +// Traverses the control-flow graph rooted at root in an order suited for +// readable code generation. Invokes callback at every node in the traversal +// order. +void inReadableOrder(Block* root, std::function callback); + +// +// SPIR-V IR Function. +// + +class Function { +public: + Function(Id id, Id resultType, Id functionType, Id firstParam, Module& parent); + virtual ~Function() + { + for (int i = 0; i < (int)parameterInstructions.size(); ++i) + delete parameterInstructions[i]; + + for (int i = 0; i < (int)blocks.size(); ++i) + delete blocks[i]; + } + Id getId() const { return functionInstruction.getResultId(); } + Id getParamId(int p) { return parameterInstructions[p]->getResultId(); } + + void addBlock(Block* block) { blocks.push_back(block); } + void removeBlock(Block* block) + { + auto found = find(blocks.begin(), blocks.end(), block); + assert(found != blocks.end()); + blocks.erase(found); + delete block; + } + + Module& getParent() const { return parent; } + Block* getEntryBlock() const { return blocks.front(); } + Block* getLastBlock() const { return blocks.back(); } + const std::vector& getBlocks() const { return blocks; } + void addLocalVariable(std::unique_ptr inst); + Id getReturnType() const { return functionInstruction.getTypeId(); } + + void setImplicitThis() { implicitThis = true; } + bool hasImplicitThis() const { return implicitThis; } + + void dump(std::vector& out) const + { + // OpFunction + functionInstruction.dump(out); + + // OpFunctionParameter + for (int p = 0; p < (int)parameterInstructions.size(); ++p) + parameterInstructions[p]->dump(out); + + // Blocks + inReadableOrder(blocks[0], [&out](const Block* b) { b->dump(out); }); + Instruction end(0, 0, OpFunctionEnd); + end.dump(out); + } + +protected: + Function(const Function&); + Function& operator=(Function&); + + Module& parent; + Instruction functionInstruction; + std::vector parameterInstructions; + std::vector blocks; + bool implicitThis; // true if this is a member function expecting to be passed a 'this' as the first argument +}; + +// +// SPIR-V IR Module. +// + +class Module { +public: + Module() {} + virtual ~Module() + { + // TODO delete things + } + + void addFunction(Function *fun) { functions.push_back(fun); } + + void mapInstruction(Instruction *instruction) + { + spv::Id resultId = instruction->getResultId(); + // map the instruction's result id + if (resultId >= idToInstruction.size()) + idToInstruction.resize(resultId + 16); + idToInstruction[resultId] = instruction; + } + + Instruction* getInstruction(Id id) const { return idToInstruction[id]; } + const std::vector& getFunctions() const { return functions; } + spv::Id getTypeId(Id resultId) const { return idToInstruction[resultId]->getTypeId(); } + StorageClass getStorageClass(Id typeId) const + { + assert(idToInstruction[typeId]->getOpCode() == spv::OpTypePointer); + return (StorageClass)idToInstruction[typeId]->getImmediateOperand(0); + } + + void dump(std::vector& out) const + { + for (int f = 0; f < (int)functions.size(); ++f) + functions[f]->dump(out); + } + +protected: + Module(const Module&); + std::vector functions; + + // map from result id to instruction having that result id + std::vector idToInstruction; + + // map from a result id to its type id +}; + +// +// Implementation (it's here due to circular type definitions). +// + +// Add both +// - the OpFunction instruction +// - all the OpFunctionParameter instructions +__inline Function::Function(Id id, Id resultType, Id functionType, Id firstParamId, Module& parent) + : parent(parent), functionInstruction(id, resultType, OpFunction), implicitThis(false) +{ + // OpFunction + functionInstruction.addImmediateOperand(FunctionControlMaskNone); + functionInstruction.addIdOperand(functionType); + parent.mapInstruction(&functionInstruction); + parent.addFunction(this); + + // OpFunctionParameter + Instruction* typeInst = parent.getInstruction(functionType); + int numParams = typeInst->getNumOperands() - 1; + for (int p = 0; p < numParams; ++p) { + Instruction* param = new Instruction(firstParamId + p, typeInst->getIdOperand(p + 1), OpFunctionParameter); + parent.mapInstruction(param); + parameterInstructions.push_back(param); + } +} + +__inline void Function::addLocalVariable(std::unique_ptr inst) +{ + Instruction* raw_instruction = inst.get(); + blocks[0]->addLocalVariable(std::move(inst)); + parent.mapInstruction(raw_instruction); +} + +__inline Block::Block(Id id, Function& parent) : parent(parent), unreachable(false) +{ + instructions.push_back(std::unique_ptr(new Instruction(id, NoType, OpLabel))); + instructions.back()->setBlock(this); + parent.getParent().mapInstruction(instructions.back().get()); +} + +__inline void Block::addInstruction(std::unique_ptr inst) +{ + Instruction* raw_instruction = inst.get(); + instructions.push_back(std::move(inst)); + raw_instruction->setBlock(this); + if (raw_instruction->getResultId()) + parent.getParent().mapInstruction(raw_instruction); +} + +}; // end spv namespace + +#endif // spvIR_H diff --git a/3rdparty/bgfx/3rdparty/glslang/StandAlone/CMakeLists.txt b/3rdparty/bgfx/3rdparty/glslang/StandAlone/CMakeLists.txt new file mode 100644 index 0000000..2a9a3c4 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/StandAlone/CMakeLists.txt @@ -0,0 +1,47 @@ +add_library(glslang-default-resource-limits + ${CMAKE_CURRENT_SOURCE_DIR}/ResourceLimits.cpp +) +set_property(TARGET glslang-default-resource-limits PROPERTY FOLDER glslang) + +target_include_directories(glslang-default-resource-limits + PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} + PUBLIC ${PROJECT_SOURCE_DIR} +) + +set(SOURCES StandAlone.cpp) +set(REMAPPER_SOURCES spirv-remap.cpp) + +add_executable(glslangValidator ${SOURCES}) +add_executable(spirv-remap ${REMAPPER_SOURCES}) +set_property(TARGET glslangValidator PROPERTY FOLDER tools) +set_property(TARGET spirv-remap PROPERTY FOLDER tools) +glslang_set_link_args(glslangValidator) +glslang_set_link_args(spirv-remap) + +set(LIBRARIES + glslang + SPIRV + SPVRemapper + glslang-default-resource-limits) + + +if(WIN32) + set(LIBRARIES ${LIBRARIES} psapi) +elseif(UNIX) + if(NOT ANDROID) + set(LIBRARIES ${LIBRARIES} pthread) + endif() +endif(WIN32) + +target_link_libraries(glslangValidator ${LIBRARIES}) +target_link_libraries(spirv-remap ${LIBRARIES}) + +if(WIN32) + source_group("Source" FILES ${SOURCES}) +endif(WIN32) + +install(TARGETS glslangValidator + RUNTIME DESTINATION bin) + +install(TARGETS spirv-remap + RUNTIME DESTINATION bin) diff --git a/3rdparty/bgfx/3rdparty/glslang/StandAlone/ResourceLimits.cpp b/3rdparty/bgfx/3rdparty/glslang/StandAlone/ResourceLimits.cpp new file mode 100644 index 0000000..e22ec80 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/StandAlone/ResourceLimits.cpp @@ -0,0 +1,458 @@ +// +// Copyright (C) 2016 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 Google Inc. 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. + +#include +#include +#include +#include + +#include "ResourceLimits.h" + +namespace glslang { + +const TBuiltInResource DefaultTBuiltInResource = { + /* .MaxLights = */ 32, + /* .MaxClipPlanes = */ 6, + /* .MaxTextureUnits = */ 32, + /* .MaxTextureCoords = */ 32, + /* .MaxVertexAttribs = */ 64, + /* .MaxVertexUniformComponents = */ 4096, + /* .MaxVaryingFloats = */ 64, + /* .MaxVertexTextureImageUnits = */ 32, + /* .MaxCombinedTextureImageUnits = */ 80, + /* .MaxTextureImageUnits = */ 32, + /* .MaxFragmentUniformComponents = */ 4096, + /* .MaxDrawBuffers = */ 32, + /* .MaxVertexUniformVectors = */ 128, + /* .MaxVaryingVectors = */ 8, + /* .MaxFragmentUniformVectors = */ 16, + /* .MaxVertexOutputVectors = */ 16, + /* .MaxFragmentInputVectors = */ 15, + /* .MinProgramTexelOffset = */ -8, + /* .MaxProgramTexelOffset = */ 7, + /* .MaxClipDistances = */ 8, + /* .MaxComputeWorkGroupCountX = */ 65535, + /* .MaxComputeWorkGroupCountY = */ 65535, + /* .MaxComputeWorkGroupCountZ = */ 65535, + /* .MaxComputeWorkGroupSizeX = */ 1024, + /* .MaxComputeWorkGroupSizeY = */ 1024, + /* .MaxComputeWorkGroupSizeZ = */ 64, + /* .MaxComputeUniformComponents = */ 1024, + /* .MaxComputeTextureImageUnits = */ 16, + /* .MaxComputeImageUniforms = */ 8, + /* .MaxComputeAtomicCounters = */ 8, + /* .MaxComputeAtomicCounterBuffers = */ 1, + /* .MaxVaryingComponents = */ 60, + /* .MaxVertexOutputComponents = */ 64, + /* .MaxGeometryInputComponents = */ 64, + /* .MaxGeometryOutputComponents = */ 128, + /* .MaxFragmentInputComponents = */ 128, + /* .MaxImageUnits = */ 8, + /* .MaxCombinedImageUnitsAndFragmentOutputs = */ 8, + /* .MaxCombinedShaderOutputResources = */ 8, + /* .MaxImageSamples = */ 0, + /* .MaxVertexImageUniforms = */ 0, + /* .MaxTessControlImageUniforms = */ 0, + /* .MaxTessEvaluationImageUniforms = */ 0, + /* .MaxGeometryImageUniforms = */ 0, + /* .MaxFragmentImageUniforms = */ 8, + /* .MaxCombinedImageUniforms = */ 8, + /* .MaxGeometryTextureImageUnits = */ 16, + /* .MaxGeometryOutputVertices = */ 256, + /* .MaxGeometryTotalOutputComponents = */ 1024, + /* .MaxGeometryUniformComponents = */ 1024, + /* .MaxGeometryVaryingComponents = */ 64, + /* .MaxTessControlInputComponents = */ 128, + /* .MaxTessControlOutputComponents = */ 128, + /* .MaxTessControlTextureImageUnits = */ 16, + /* .MaxTessControlUniformComponents = */ 1024, + /* .MaxTessControlTotalOutputComponents = */ 4096, + /* .MaxTessEvaluationInputComponents = */ 128, + /* .MaxTessEvaluationOutputComponents = */ 128, + /* .MaxTessEvaluationTextureImageUnits = */ 16, + /* .MaxTessEvaluationUniformComponents = */ 1024, + /* .MaxTessPatchComponents = */ 120, + /* .MaxPatchVertices = */ 32, + /* .MaxTessGenLevel = */ 64, + /* .MaxViewports = */ 16, + /* .MaxVertexAtomicCounters = */ 0, + /* .MaxTessControlAtomicCounters = */ 0, + /* .MaxTessEvaluationAtomicCounters = */ 0, + /* .MaxGeometryAtomicCounters = */ 0, + /* .MaxFragmentAtomicCounters = */ 8, + /* .MaxCombinedAtomicCounters = */ 8, + /* .MaxAtomicCounterBindings = */ 1, + /* .MaxVertexAtomicCounterBuffers = */ 0, + /* .MaxTessControlAtomicCounterBuffers = */ 0, + /* .MaxTessEvaluationAtomicCounterBuffers = */ 0, + /* .MaxGeometryAtomicCounterBuffers = */ 0, + /* .MaxFragmentAtomicCounterBuffers = */ 1, + /* .MaxCombinedAtomicCounterBuffers = */ 1, + /* .MaxAtomicCounterBufferSize = */ 16384, + /* .MaxTransformFeedbackBuffers = */ 4, + /* .MaxTransformFeedbackInterleavedComponents = */ 64, + /* .MaxCullDistances = */ 8, + /* .MaxCombinedClipAndCullDistances = */ 8, + /* .MaxSamples = */ 4, + /* .limits = */ { + /* .nonInductiveForLoops = */ 1, + /* .whileLoops = */ 1, + /* .doWhileLoops = */ 1, + /* .generalUniformIndexing = */ 1, + /* .generalAttributeMatrixVectorIndexing = */ 1, + /* .generalVaryingIndexing = */ 1, + /* .generalSamplerIndexing = */ 1, + /* .generalVariableIndexing = */ 1, + /* .generalConstantMatrixVectorIndexing = */ 1, + }}; + +std::string GetDefaultTBuiltInResourceString() +{ + std::ostringstream ostream; + + ostream << "MaxLights " << DefaultTBuiltInResource.maxLights << "\n" + << "MaxClipPlanes " << DefaultTBuiltInResource.maxClipPlanes << "\n" + << "MaxTextureUnits " << DefaultTBuiltInResource.maxTextureUnits << "\n" + << "MaxTextureCoords " << DefaultTBuiltInResource.maxTextureCoords << "\n" + << "MaxVertexAttribs " << DefaultTBuiltInResource.maxVertexAttribs << "\n" + << "MaxVertexUniformComponents " << DefaultTBuiltInResource.maxVertexUniformComponents << "\n" + << "MaxVaryingFloats " << DefaultTBuiltInResource.maxVaryingFloats << "\n" + << "MaxVertexTextureImageUnits " << DefaultTBuiltInResource.maxVertexTextureImageUnits << "\n" + << "MaxCombinedTextureImageUnits " << DefaultTBuiltInResource.maxCombinedTextureImageUnits << "\n" + << "MaxTextureImageUnits " << DefaultTBuiltInResource.maxTextureImageUnits << "\n" + << "MaxFragmentUniformComponents " << DefaultTBuiltInResource.maxFragmentUniformComponents << "\n" + << "MaxDrawBuffers " << DefaultTBuiltInResource.maxDrawBuffers << "\n" + << "MaxVertexUniformVectors " << DefaultTBuiltInResource.maxVertexUniformVectors << "\n" + << "MaxVaryingVectors " << DefaultTBuiltInResource.maxVaryingVectors << "\n" + << "MaxFragmentUniformVectors " << DefaultTBuiltInResource.maxFragmentUniformVectors << "\n" + << "MaxVertexOutputVectors " << DefaultTBuiltInResource.maxVertexOutputVectors << "\n" + << "MaxFragmentInputVectors " << DefaultTBuiltInResource.maxFragmentInputVectors << "\n" + << "MinProgramTexelOffset " << DefaultTBuiltInResource.minProgramTexelOffset << "\n" + << "MaxProgramTexelOffset " << DefaultTBuiltInResource.maxProgramTexelOffset << "\n" + << "MaxClipDistances " << DefaultTBuiltInResource.maxClipDistances << "\n" + << "MaxComputeWorkGroupCountX " << DefaultTBuiltInResource.maxComputeWorkGroupCountX << "\n" + << "MaxComputeWorkGroupCountY " << DefaultTBuiltInResource.maxComputeWorkGroupCountY << "\n" + << "MaxComputeWorkGroupCountZ " << DefaultTBuiltInResource.maxComputeWorkGroupCountZ << "\n" + << "MaxComputeWorkGroupSizeX " << DefaultTBuiltInResource.maxComputeWorkGroupSizeX << "\n" + << "MaxComputeWorkGroupSizeY " << DefaultTBuiltInResource.maxComputeWorkGroupSizeY << "\n" + << "MaxComputeWorkGroupSizeZ " << DefaultTBuiltInResource.maxComputeWorkGroupSizeZ << "\n" + << "MaxComputeUniformComponents " << DefaultTBuiltInResource.maxComputeUniformComponents << "\n" + << "MaxComputeTextureImageUnits " << DefaultTBuiltInResource.maxComputeTextureImageUnits << "\n" + << "MaxComputeImageUniforms " << DefaultTBuiltInResource.maxComputeImageUniforms << "\n" + << "MaxComputeAtomicCounters " << DefaultTBuiltInResource.maxComputeAtomicCounters << "\n" + << "MaxComputeAtomicCounterBuffers " << DefaultTBuiltInResource.maxComputeAtomicCounterBuffers << "\n" + << "MaxVaryingComponents " << DefaultTBuiltInResource.maxVaryingComponents << "\n" + << "MaxVertexOutputComponents " << DefaultTBuiltInResource.maxVertexOutputComponents << "\n" + << "MaxGeometryInputComponents " << DefaultTBuiltInResource.maxGeometryInputComponents << "\n" + << "MaxGeometryOutputComponents " << DefaultTBuiltInResource.maxGeometryOutputComponents << "\n" + << "MaxFragmentInputComponents " << DefaultTBuiltInResource.maxFragmentInputComponents << "\n" + << "MaxImageUnits " << DefaultTBuiltInResource.maxImageUnits << "\n" + << "MaxCombinedImageUnitsAndFragmentOutputs " << DefaultTBuiltInResource.maxCombinedImageUnitsAndFragmentOutputs << "\n" + << "MaxCombinedShaderOutputResources " << DefaultTBuiltInResource.maxCombinedShaderOutputResources << "\n" + << "MaxImageSamples " << DefaultTBuiltInResource.maxImageSamples << "\n" + << "MaxVertexImageUniforms " << DefaultTBuiltInResource.maxVertexImageUniforms << "\n" + << "MaxTessControlImageUniforms " << DefaultTBuiltInResource.maxTessControlImageUniforms << "\n" + << "MaxTessEvaluationImageUniforms " << DefaultTBuiltInResource.maxTessEvaluationImageUniforms << "\n" + << "MaxGeometryImageUniforms " << DefaultTBuiltInResource.maxGeometryImageUniforms << "\n" + << "MaxFragmentImageUniforms " << DefaultTBuiltInResource.maxFragmentImageUniforms << "\n" + << "MaxCombinedImageUniforms " << DefaultTBuiltInResource.maxCombinedImageUniforms << "\n" + << "MaxGeometryTextureImageUnits " << DefaultTBuiltInResource.maxGeometryTextureImageUnits << "\n" + << "MaxGeometryOutputVertices " << DefaultTBuiltInResource.maxGeometryOutputVertices << "\n" + << "MaxGeometryTotalOutputComponents " << DefaultTBuiltInResource.maxGeometryTotalOutputComponents << "\n" + << "MaxGeometryUniformComponents " << DefaultTBuiltInResource.maxGeometryUniformComponents << "\n" + << "MaxGeometryVaryingComponents " << DefaultTBuiltInResource.maxGeometryVaryingComponents << "\n" + << "MaxTessControlInputComponents " << DefaultTBuiltInResource.maxTessControlInputComponents << "\n" + << "MaxTessControlOutputComponents " << DefaultTBuiltInResource.maxTessControlOutputComponents << "\n" + << "MaxTessControlTextureImageUnits " << DefaultTBuiltInResource.maxTessControlTextureImageUnits << "\n" + << "MaxTessControlUniformComponents " << DefaultTBuiltInResource.maxTessControlUniformComponents << "\n" + << "MaxTessControlTotalOutputComponents " << DefaultTBuiltInResource.maxTessControlTotalOutputComponents << "\n" + << "MaxTessEvaluationInputComponents " << DefaultTBuiltInResource.maxTessEvaluationInputComponents << "\n" + << "MaxTessEvaluationOutputComponents " << DefaultTBuiltInResource.maxTessEvaluationOutputComponents << "\n" + << "MaxTessEvaluationTextureImageUnits " << DefaultTBuiltInResource.maxTessEvaluationTextureImageUnits << "\n" + << "MaxTessEvaluationUniformComponents " << DefaultTBuiltInResource.maxTessEvaluationUniformComponents << "\n" + << "MaxTessPatchComponents " << DefaultTBuiltInResource.maxTessPatchComponents << "\n" + << "MaxPatchVertices " << DefaultTBuiltInResource.maxPatchVertices << "\n" + << "MaxTessGenLevel " << DefaultTBuiltInResource.maxTessGenLevel << "\n" + << "MaxViewports " << DefaultTBuiltInResource.maxViewports << "\n" + << "MaxVertexAtomicCounters " << DefaultTBuiltInResource.maxVertexAtomicCounters << "\n" + << "MaxTessControlAtomicCounters " << DefaultTBuiltInResource.maxTessControlAtomicCounters << "\n" + << "MaxTessEvaluationAtomicCounters " << DefaultTBuiltInResource.maxTessEvaluationAtomicCounters << "\n" + << "MaxGeometryAtomicCounters " << DefaultTBuiltInResource.maxGeometryAtomicCounters << "\n" + << "MaxFragmentAtomicCounters " << DefaultTBuiltInResource.maxFragmentAtomicCounters << "\n" + << "MaxCombinedAtomicCounters " << DefaultTBuiltInResource.maxCombinedAtomicCounters << "\n" + << "MaxAtomicCounterBindings " << DefaultTBuiltInResource.maxAtomicCounterBindings << "\n" + << "MaxVertexAtomicCounterBuffers " << DefaultTBuiltInResource.maxVertexAtomicCounterBuffers << "\n" + << "MaxTessControlAtomicCounterBuffers " << DefaultTBuiltInResource.maxTessControlAtomicCounterBuffers << "\n" + << "MaxTessEvaluationAtomicCounterBuffers " << DefaultTBuiltInResource.maxTessEvaluationAtomicCounterBuffers << "\n" + << "MaxGeometryAtomicCounterBuffers " << DefaultTBuiltInResource.maxGeometryAtomicCounterBuffers << "\n" + << "MaxFragmentAtomicCounterBuffers " << DefaultTBuiltInResource.maxFragmentAtomicCounterBuffers << "\n" + << "MaxCombinedAtomicCounterBuffers " << DefaultTBuiltInResource.maxCombinedAtomicCounterBuffers << "\n" + << "MaxAtomicCounterBufferSize " << DefaultTBuiltInResource.maxAtomicCounterBufferSize << "\n" + << "MaxTransformFeedbackBuffers " << DefaultTBuiltInResource.maxTransformFeedbackBuffers << "\n" + << "MaxTransformFeedbackInterleavedComponents " << DefaultTBuiltInResource.maxTransformFeedbackInterleavedComponents << "\n" + << "MaxCullDistances " << DefaultTBuiltInResource.maxCullDistances << "\n" + << "MaxCombinedClipAndCullDistances " << DefaultTBuiltInResource.maxCombinedClipAndCullDistances << "\n" + << "MaxSamples " << DefaultTBuiltInResource.maxSamples << "\n" + + << "nonInductiveForLoops " << DefaultTBuiltInResource.limits.nonInductiveForLoops << "\n" + << "whileLoops " << DefaultTBuiltInResource.limits.whileLoops << "\n" + << "doWhileLoops " << DefaultTBuiltInResource.limits.doWhileLoops << "\n" + << "generalUniformIndexing " << DefaultTBuiltInResource.limits.generalUniformIndexing << "\n" + << "generalAttributeMatrixVectorIndexing " << DefaultTBuiltInResource.limits.generalAttributeMatrixVectorIndexing << "\n" + << "generalVaryingIndexing " << DefaultTBuiltInResource.limits.generalVaryingIndexing << "\n" + << "generalSamplerIndexing " << DefaultTBuiltInResource.limits.generalSamplerIndexing << "\n" + << "generalVariableIndexing " << DefaultTBuiltInResource.limits.generalVariableIndexing << "\n" + << "generalConstantMatrixVectorIndexing " << DefaultTBuiltInResource.limits.generalConstantMatrixVectorIndexing << "\n" + ; + + return ostream.str(); +} + +void DecodeResourceLimits(TBuiltInResource* resources, char* config) +{ + static const char* delims = " \t\n\r"; + + size_t pos = 0; + std::string configStr(config); + + while ((pos = configStr.find_first_not_of(delims, pos)) != std::string::npos) { + const size_t token_s = pos; + const size_t token_e = configStr.find_first_of(delims, token_s); + const size_t value_s = configStr.find_first_not_of(delims, token_e); + const size_t value_e = configStr.find_first_of(delims, value_s); + pos = value_e; + + // Faster to use compare(), but prefering readability. + const std::string tokenStr = configStr.substr(token_s, token_e-token_s); + const std::string valueStr = configStr.substr(value_s, value_e-value_s); + + if (value_s == std::string::npos || ! (valueStr[0] == '-' || isdigit(valueStr[0]))) { + printf("Error: '%s' bad .conf file. Each name must be followed by one number.\n", + valueStr.c_str()); + return; + } + + const int value = std::atoi(valueStr.c_str()); + + if (tokenStr == "MaxLights") + resources->maxLights = value; + else if (tokenStr == "MaxClipPlanes") + resources->maxClipPlanes = value; + else if (tokenStr == "MaxTextureUnits") + resources->maxTextureUnits = value; + else if (tokenStr == "MaxTextureCoords") + resources->maxTextureCoords = value; + else if (tokenStr == "MaxVertexAttribs") + resources->maxVertexAttribs = value; + else if (tokenStr == "MaxVertexUniformComponents") + resources->maxVertexUniformComponents = value; + else if (tokenStr == "MaxVaryingFloats") + resources->maxVaryingFloats = value; + else if (tokenStr == "MaxVertexTextureImageUnits") + resources->maxVertexTextureImageUnits = value; + else if (tokenStr == "MaxCombinedTextureImageUnits") + resources->maxCombinedTextureImageUnits = value; + else if (tokenStr == "MaxTextureImageUnits") + resources->maxTextureImageUnits = value; + else if (tokenStr == "MaxFragmentUniformComponents") + resources->maxFragmentUniformComponents = value; + else if (tokenStr == "MaxDrawBuffers") + resources->maxDrawBuffers = value; + else if (tokenStr == "MaxVertexUniformVectors") + resources->maxVertexUniformVectors = value; + else if (tokenStr == "MaxVaryingVectors") + resources->maxVaryingVectors = value; + else if (tokenStr == "MaxFragmentUniformVectors") + resources->maxFragmentUniformVectors = value; + else if (tokenStr == "MaxVertexOutputVectors") + resources->maxVertexOutputVectors = value; + else if (tokenStr == "MaxFragmentInputVectors") + resources->maxFragmentInputVectors = value; + else if (tokenStr == "MinProgramTexelOffset") + resources->minProgramTexelOffset = value; + else if (tokenStr == "MaxProgramTexelOffset") + resources->maxProgramTexelOffset = value; + else if (tokenStr == "MaxClipDistances") + resources->maxClipDistances = value; + else if (tokenStr == "MaxComputeWorkGroupCountX") + resources->maxComputeWorkGroupCountX = value; + else if (tokenStr == "MaxComputeWorkGroupCountY") + resources->maxComputeWorkGroupCountY = value; + else if (tokenStr == "MaxComputeWorkGroupCountZ") + resources->maxComputeWorkGroupCountZ = value; + else if (tokenStr == "MaxComputeWorkGroupSizeX") + resources->maxComputeWorkGroupSizeX = value; + else if (tokenStr == "MaxComputeWorkGroupSizeY") + resources->maxComputeWorkGroupSizeY = value; + else if (tokenStr == "MaxComputeWorkGroupSizeZ") + resources->maxComputeWorkGroupSizeZ = value; + else if (tokenStr == "MaxComputeUniformComponents") + resources->maxComputeUniformComponents = value; + else if (tokenStr == "MaxComputeTextureImageUnits") + resources->maxComputeTextureImageUnits = value; + else if (tokenStr == "MaxComputeImageUniforms") + resources->maxComputeImageUniforms = value; + else if (tokenStr == "MaxComputeAtomicCounters") + resources->maxComputeAtomicCounters = value; + else if (tokenStr == "MaxComputeAtomicCounterBuffers") + resources->maxComputeAtomicCounterBuffers = value; + else if (tokenStr == "MaxVaryingComponents") + resources->maxVaryingComponents = value; + else if (tokenStr == "MaxVertexOutputComponents") + resources->maxVertexOutputComponents = value; + else if (tokenStr == "MaxGeometryInputComponents") + resources->maxGeometryInputComponents = value; + else if (tokenStr == "MaxGeometryOutputComponents") + resources->maxGeometryOutputComponents = value; + else if (tokenStr == "MaxFragmentInputComponents") + resources->maxFragmentInputComponents = value; + else if (tokenStr == "MaxImageUnits") + resources->maxImageUnits = value; + else if (tokenStr == "MaxCombinedImageUnitsAndFragmentOutputs") + resources->maxCombinedImageUnitsAndFragmentOutputs = value; + else if (tokenStr == "MaxCombinedShaderOutputResources") + resources->maxCombinedShaderOutputResources = value; + else if (tokenStr == "MaxImageSamples") + resources->maxImageSamples = value; + else if (tokenStr == "MaxVertexImageUniforms") + resources->maxVertexImageUniforms = value; + else if (tokenStr == "MaxTessControlImageUniforms") + resources->maxTessControlImageUniforms = value; + else if (tokenStr == "MaxTessEvaluationImageUniforms") + resources->maxTessEvaluationImageUniforms = value; + else if (tokenStr == "MaxGeometryImageUniforms") + resources->maxGeometryImageUniforms = value; + else if (tokenStr == "MaxFragmentImageUniforms") + resources->maxFragmentImageUniforms = value; + else if (tokenStr == "MaxCombinedImageUniforms") + resources->maxCombinedImageUniforms = value; + else if (tokenStr == "MaxGeometryTextureImageUnits") + resources->maxGeometryTextureImageUnits = value; + else if (tokenStr == "MaxGeometryOutputVertices") + resources->maxGeometryOutputVertices = value; + else if (tokenStr == "MaxGeometryTotalOutputComponents") + resources->maxGeometryTotalOutputComponents = value; + else if (tokenStr == "MaxGeometryUniformComponents") + resources->maxGeometryUniformComponents = value; + else if (tokenStr == "MaxGeometryVaryingComponents") + resources->maxGeometryVaryingComponents = value; + else if (tokenStr == "MaxTessControlInputComponents") + resources->maxTessControlInputComponents = value; + else if (tokenStr == "MaxTessControlOutputComponents") + resources->maxTessControlOutputComponents = value; + else if (tokenStr == "MaxTessControlTextureImageUnits") + resources->maxTessControlTextureImageUnits = value; + else if (tokenStr == "MaxTessControlUniformComponents") + resources->maxTessControlUniformComponents = value; + else if (tokenStr == "MaxTessControlTotalOutputComponents") + resources->maxTessControlTotalOutputComponents = value; + else if (tokenStr == "MaxTessEvaluationInputComponents") + resources->maxTessEvaluationInputComponents = value; + else if (tokenStr == "MaxTessEvaluationOutputComponents") + resources->maxTessEvaluationOutputComponents = value; + else if (tokenStr == "MaxTessEvaluationTextureImageUnits") + resources->maxTessEvaluationTextureImageUnits = value; + else if (tokenStr == "MaxTessEvaluationUniformComponents") + resources->maxTessEvaluationUniformComponents = value; + else if (tokenStr == "MaxTessPatchComponents") + resources->maxTessPatchComponents = value; + else if (tokenStr == "MaxPatchVertices") + resources->maxPatchVertices = value; + else if (tokenStr == "MaxTessGenLevel") + resources->maxTessGenLevel = value; + else if (tokenStr == "MaxViewports") + resources->maxViewports = value; + else if (tokenStr == "MaxVertexAtomicCounters") + resources->maxVertexAtomicCounters = value; + else if (tokenStr == "MaxTessControlAtomicCounters") + resources->maxTessControlAtomicCounters = value; + else if (tokenStr == "MaxTessEvaluationAtomicCounters") + resources->maxTessEvaluationAtomicCounters = value; + else if (tokenStr == "MaxGeometryAtomicCounters") + resources->maxGeometryAtomicCounters = value; + else if (tokenStr == "MaxFragmentAtomicCounters") + resources->maxFragmentAtomicCounters = value; + else if (tokenStr == "MaxCombinedAtomicCounters") + resources->maxCombinedAtomicCounters = value; + else if (tokenStr == "MaxAtomicCounterBindings") + resources->maxAtomicCounterBindings = value; + else if (tokenStr == "MaxVertexAtomicCounterBuffers") + resources->maxVertexAtomicCounterBuffers = value; + else if (tokenStr == "MaxTessControlAtomicCounterBuffers") + resources->maxTessControlAtomicCounterBuffers = value; + else if (tokenStr == "MaxTessEvaluationAtomicCounterBuffers") + resources->maxTessEvaluationAtomicCounterBuffers = value; + else if (tokenStr == "MaxGeometryAtomicCounterBuffers") + resources->maxGeometryAtomicCounterBuffers = value; + else if (tokenStr == "MaxFragmentAtomicCounterBuffers") + resources->maxFragmentAtomicCounterBuffers = value; + else if (tokenStr == "MaxCombinedAtomicCounterBuffers") + resources->maxCombinedAtomicCounterBuffers = value; + else if (tokenStr == "MaxAtomicCounterBufferSize") + resources->maxAtomicCounterBufferSize = value; + else if (tokenStr == "MaxTransformFeedbackBuffers") + resources->maxTransformFeedbackBuffers = value; + else if (tokenStr == "MaxTransformFeedbackInterleavedComponents") + resources->maxTransformFeedbackInterleavedComponents = value; + else if (tokenStr == "MaxCullDistances") + resources->maxCullDistances = value; + else if (tokenStr == "MaxCombinedClipAndCullDistances") + resources->maxCombinedClipAndCullDistances = value; + else if (tokenStr == "MaxSamples") + resources->maxSamples = value; + else if (tokenStr == "nonInductiveForLoops") + resources->limits.nonInductiveForLoops = (value != 0); + else if (tokenStr == "whileLoops") + resources->limits.whileLoops = (value != 0); + else if (tokenStr == "doWhileLoops") + resources->limits.doWhileLoops = (value != 0); + else if (tokenStr == "generalUniformIndexing") + resources->limits.generalUniformIndexing = (value != 0); + else if (tokenStr == "generalAttributeMatrixVectorIndexing") + resources->limits.generalAttributeMatrixVectorIndexing = (value != 0); + else if (tokenStr == "generalVaryingIndexing") + resources->limits.generalVaryingIndexing = (value != 0); + else if (tokenStr == "generalSamplerIndexing") + resources->limits.generalSamplerIndexing = (value != 0); + else if (tokenStr == "generalVariableIndexing") + resources->limits.generalVariableIndexing = (value != 0); + else if (tokenStr == "generalConstantMatrixVectorIndexing") + resources->limits.generalConstantMatrixVectorIndexing = (value != 0); + else + printf("Warning: unrecognized limit (%s) in configuration file.\n", tokenStr.c_str()); + + } +} + +} // end namespace glslang diff --git a/3rdparty/bgfx/3rdparty/glslang/StandAlone/ResourceLimits.h b/3rdparty/bgfx/3rdparty/glslang/StandAlone/ResourceLimits.h new file mode 100644 index 0000000..9c3eb3e --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/StandAlone/ResourceLimits.h @@ -0,0 +1,57 @@ +// +// Copyright (C) 2016 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 Google Inc. 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. + +#ifndef _STAND_ALONE_RESOURCE_LIMITS_INCLUDED_ +#define _STAND_ALONE_RESOURCE_LIMITS_INCLUDED_ + +#include + +#include "glslang/Include/ResourceLimits.h" + +namespace glslang { + +// These are the default resources for TBuiltInResources, used for both +// - parsing this string for the case where the user didn't supply one, +// - dumping out a template for user construction of a config file. +extern const TBuiltInResource DefaultTBuiltInResource; + +// Returns the DefaultTBuiltInResource as a human-readable string. +std::string GetDefaultTBuiltInResourceString(); + +// Decodes the resource limits from |config| to |resources|. +void DecodeResourceLimits(TBuiltInResource* resources, char* config); + +} // end namespace glslang + +#endif // _STAND_ALONE_RESOURCE_LIMITS_INCLUDED_ diff --git a/3rdparty/bgfx/3rdparty/glslang/StandAlone/StandAlone.cpp b/3rdparty/bgfx/3rdparty/glslang/StandAlone/StandAlone.cpp new file mode 100644 index 0000000..0da690e --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/StandAlone/StandAlone.cpp @@ -0,0 +1,1131 @@ +// +// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +// Copyright (C) 2013-2016 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. +// + +// this only applies to the standalone wrapper, not the front end in general +#define _CRT_SECURE_NO_WARNINGS + +#include "ResourceLimits.h" +#include "Worklist.h" +#include "./../glslang/Include/ShHandle.h" +#include "./../glslang/Include/revision.h" +#include "./../glslang/Public/ShaderLang.h" +#include "../SPIRV/GlslangToSpv.h" +#include "../SPIRV/GLSL.std.450.h" +#include "../SPIRV/doc.h" +#include "../SPIRV/disassemble.h" +#include +#include +#include +#include +#include + +#include "../glslang/OSDependent/osinclude.h" + +extern "C" { + SH_IMPORT_EXPORT void ShOutputHtml(); +} + +// Command-line options +enum TOptions { + EOptionNone = 0, + EOptionIntermediate = (1 << 0), + EOptionSuppressInfolog = (1 << 1), + EOptionMemoryLeakMode = (1 << 2), + EOptionRelaxedErrors = (1 << 3), + EOptionGiveWarnings = (1 << 4), + EOptionLinkProgram = (1 << 5), + EOptionMultiThreaded = (1 << 6), + EOptionDumpConfig = (1 << 7), + EOptionDumpReflection = (1 << 8), + EOptionSuppressWarnings = (1 << 9), + EOptionDumpVersions = (1 << 10), + EOptionSpv = (1 << 11), + EOptionHumanReadableSpv = (1 << 12), + EOptionVulkanRules = (1 << 13), + EOptionDefaultDesktop = (1 << 14), + EOptionOutputPreprocessed = (1 << 15), + EOptionOutputHexadecimal = (1 << 16), + EOptionReadHlsl = (1 << 17), + EOptionCascadingErrors = (1 << 18), + EOptionAutoMapBindings = (1 << 19), + EOptionFlattenUniformArrays = (1 << 20), + EOptionNoStorageFormat = (1 << 21), + EOptionKeepUncalled = (1 << 22), +}; + +// +// Return codes from main/exit(). +// +enum TFailCode { + ESuccess = 0, + EFailUsage, + EFailCompile, + EFailLink, + EFailCompilerCreate, + EFailThreadCreate, + EFailLinkerCreate +}; + +// +// Forward declarations. +// +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); +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; + +TBuiltInResource Resources; +std::string ConfigFile; + +// +// Parse either a .conf file provided by the user or the default from glslang::DefaultTBuiltInResource +// +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) { + Resources = glslang::DefaultTBuiltInResource; + return; + } + + 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; +const char* entryPointName = nullptr; +const char* sourceEntryPointName = nullptr; +const char* shaderStageName = nullptr; +const char* variableName = nullptr; + +std::array baseSamplerBinding; +std::array baseTextureBinding; +std::array baseImageBinding; +std::array baseUboBinding; +std::array baseSsboBinding; + +// +// Create the default name for saving a binary if -o is not provided. +// +const char* GetBinaryName(EShLanguage stage) +{ + const char* name; + if (binaryFileName == nullptr) { + switch (stage) { + case EShLangVertex: name = "vert.spv"; break; + case EShLangTessControl: name = "tesc.spv"; break; + case EShLangTessEvaluation: name = "tese.spv"; break; + case EShLangGeometry: name = "geom.spv"; break; + case EShLangFragment: name = "frag.spv"; break; + case EShLangCompute: name = "comp.spv"; break; + default: name = "unknown"; break; + } + } else + name = binaryFileName; + + return name; +} + +// +// *.conf => this is a config file that can set limits/resources +// +bool SetConfigFile(const std::string& name) +{ + if (name.size() < 5) + return false; + + if (name.compare(name.size() - 5, 5, ".conf") == 0) { + ConfigFile = name; + return true; + } + + return false; +} + +// +// Give error and exit with failure code. +// +void Error(const char* message) +{ + printf("%s: Error %s (use -h for usage)\n", ExecutableName, message); + exit(EFailUsage); +} + +// +// Process an optional binding base of the form: +// --argname [stage] base +// Where stage is one of the forms accepted by FindLanguage, and base is an integer +// +void ProcessBindingBase(int& argc, char**& argv, std::array& base) +{ + if (argc < 2) + usage(); + + if (!isdigit(argv[1][0])) { + if (argc < 3) // this form needs one more argument + usage(); + + // Parse form: --argname stage base + const EShLanguage lang = FindLanguage(argv[1], false); + base[lang] = atoi(argv[2]); + argc-= 2; + argv+= 2; + } else { + // Parse form: --argname base + for (int lang=0; lang= 1; argc--, argv++) { + if (argv[0][0] == '-') { + switch (argv[0][1]) { + case '-': + { + std::string lowerword(argv[0]+2); + std::transform(lowerword.begin(), lowerword.end(), lowerword.begin(), ::tolower); + + // handle --word style options + if (lowerword == "shift-sampler-bindings" || // synonyms + lowerword == "shift-sampler-binding" || + lowerword == "ssb") { + ProcessBindingBase(argc, argv, baseSamplerBinding); + } 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); + } else if (lowerword == "shift-ubo-bindings" || // synonyms + lowerword == "shift-ubo-binding" || + lowerword == "sub") { + ProcessBindingBase(argc, argv, baseUboBinding); + } 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; + } else if (lowerword == "variable-name" || // synonyms + lowerword == "vn") { + Options |= EOptionOutputHexadecimal; + variableName = argv[1]; + if (argc > 0) { + argc--; + argv++; + } else + Error("no provided for --variable-name"); + break; + } + else if (lowerword == "source-entrypoint" || // synonyms + lowerword == "sep") { + sourceEntryPointName = argv[1]; + if (argc > 0) { + argc--; + argv++; + } else + Error("no provided for --source-entrypoint"); + break; + } else if (lowerword == "keep-uncalled" || // synonyms + lowerword == "ku") { + Options |= EOptionKeepUncalled; + } else { + usage(); + } + } + break; + case 'H': + Options |= EOptionHumanReadableSpv; + if ((Options & EOptionSpv) == 0) { + // default to Vulkan + Options |= EOptionSpv; + Options |= EOptionVulkanRules; + Options |= EOptionLinkProgram; + } + break; + case 'V': + Options |= EOptionSpv; + Options |= EOptionVulkanRules; + Options |= EOptionLinkProgram; + break; + case 'S': + shaderStageName = argv[1]; + if (argc > 0) { + argc--; + argv++; + } else + Error("no specified for -S"); + break; + case 'G': + Options |= EOptionSpv; + Options |= EOptionLinkProgram; + // undo a -H default to Vulkan + Options &= ~EOptionVulkanRules; + break; + case 'E': + Options |= EOptionOutputPreprocessed; + 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 provided for -e"); + break; + case 'h': + usage(); + break; + case 'i': + Options |= EOptionIntermediate; + break; + case 'l': + Options |= EOptionLinkProgram; + break; + case 'm': + Options |= EOptionMemoryLeakMode; + break; + case 'o': + binaryFileName = argv[1]; + if (argc > 0) { + argc--; + argv++; + } else + Error("no provided for -o"); + break; + case 'q': + Options |= EOptionDumpReflection; + break; + case 'r': + Options |= EOptionRelaxedErrors; + break; + case 's': + Options |= EOptionSuppressInfolog; + break; + case 't': + #ifdef _WIN32 + Options |= EOptionMultiThreaded; + #endif + break; + case 'v': + Options |= EOptionDumpVersions; + break; + case 'w': + Options |= EOptionSuppressWarnings; + break; + case 'x': + Options |= EOptionOutputHexadecimal; + break; + default: + usage(); + break; + } + } else { + std::string name(argv[0]); + if (! SetConfigFile(name)) { + Work[argc] = new glslang::TWorkItem(name); + Worklist.add(Work[argc]); + } + } + } + + // 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"); + + // -o or -x makes no sense if there is no target binary + if (binaryFileName && (Options & EOptionSpv) == 0) + Error("no binary generation requested (e.g., -V)"); + + if ((Options & EOptionFlattenUniformArrays) != 0 && + (Options & EOptionReadHlsl) == 0) + Error("uniform array flattening only valid when compiling HLSL source."); +} + +// +// Translate the meaningful subset of command-line options to parser-behavior options. +// +void SetMessageOptions(EShMessages& messages) +{ + if (Options & EOptionRelaxedErrors) + messages = (EShMessages)(messages | EShMsgRelaxedErrors); + if (Options & EOptionIntermediate) + messages = (EShMessages)(messages | EShMsgAST); + if (Options & EOptionSuppressWarnings) + messages = (EShMessages)(messages | EShMsgSuppressWarnings); + if (Options & EOptionSpv) + messages = (EShMessages)(messages | EShMsgSpvRules); + if (Options & EOptionVulkanRules) + messages = (EShMessages)(messages | EShMsgVulkanRules); + if (Options & EOptionOutputPreprocessed) + messages = (EShMessages)(messages | EShMsgOnlyPreprocessor); + if (Options & EOptionReadHlsl) + messages = (EShMessages)(messages | EShMsgReadHlsl); + if (Options & EOptionCascadingErrors) + messages = (EShMessages)(messages | EShMsgCascadingErrors); + if (Options & EOptionKeepUncalled) + messages = (EShMessages)(messages | EShMsgKeepUncalled); +} + +// +// Thread entry point, for non-linking asynchronous mode. +// +// Return 0 for failure, 1 for success. +// +unsigned int CompileShaders(void*) +{ + glslang::TWorkItem* workItem; + while (Worklist.remove(workItem)) { + ShHandle compiler = ShConstructCompiler(FindLanguage(workItem->name), Options); + if (compiler == 0) + return 0; + + CompileFile(workItem->name.c_str(), compiler); + + if (! (Options & EOptionSuppressInfolog)) + workItem->results = ShGetInfoLog(compiler); + + ShDestruct(compiler); + } + + return 0; +} + +// Outputs the given string, but only if it is non-null and non-empty. +// This prevents erroneous newlines from appearing. +void PutsIfNonEmpty(const char* str) +{ + if (str && str[0]) { + puts(str); + } +} + +// Outputs the given string to stderr, but only if it is non-null and non-empty. +// This prevents erroneous newlines from appearing. +void StderrIfNonEmpty(const char* 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]; + + // 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(const ShaderCompUnit &rhs) + { + stage = rhs.stage; + fileName = rhs.fileName; + text = rhs.text; + fileNameList[0] = fileName.c_str(); + } + +}; + +// +// For linking mode: Will independently parse each compilation unit, but then put them +// in the same program and link them together, making at most one linked module per +// pipeline stage. +// +// Uses the new C++ interface instead of the old handle-based interface. +// + +void CompileAndLinkShaderUnits(std::vector compUnits) +{ + // keep track of what to free + std::list shaders; + + EShMessages messages = EShMsgDefault; + SetMessageOptions(messages); + + // + // Per-shader processing... + // + + glslang::TProgram& program = *new glslang::TProgram; + 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); + if (entryPointName) // HLSL todo: this needs to be tracked per compUnits + shader->setEntryPoint(entryPointName); + if (sourceEntryPointName) + shader->setSourceEntryPoint(sourceEntryPointName); + + 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); + + if (Options & EOptionAutoMapBindings) + shader->setAutoMapBindings(true); + + shaders.push_back(shader); + + const int defaultVersion = Options & EOptionDefaultDesktop? 110: 100; + + 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()); + } else { + CompileFailed = true; + } + StderrIfNonEmpty(shader->getInfoLog()); + StderrIfNonEmpty(shader->getInfoDebugLog()); + continue; + } + if (! shader->parse(&Resources, defaultVersion, false, messages)) + CompileFailed = true; + + program.addShader(shader); + + if (! (Options & EOptionSuppressInfolog) && + ! (Options & EOptionMemoryLeakMode)) { + PutsIfNonEmpty(compUnit.fileName.c_str()); + PutsIfNonEmpty(shader->getInfoLog()); + PutsIfNonEmpty(shader->getInfoDebugLog()); + } + } + + // + // Program-level processing... + // + + // Link + if (! (Options & EOptionOutputPreprocessed) && ! program.link(messages)) + LinkFailed = true; + + // Map IO + if (Options & EOptionSpv) { + if (!program.mapIO()) + LinkFailed = true; + } + + // Report + if (! (Options & EOptionSuppressInfolog) && + ! (Options & EOptionMemoryLeakMode)) { + PutsIfNonEmpty(program.getInfoLog()); + PutsIfNonEmpty(program.getInfoDebugLog()); + } + + // Reflect + if (Options & EOptionDumpReflection) { + program.buildReflection(); + program.dumpReflection(); + } + + // Dump SPIR-V + if (Options & EOptionSpv) { + if (CompileFailed || LinkFailed) + printf("SPIR-V is not generated for failed compile or link\n"); + else { + for (int stage = 0; stage < EShLangCount; ++stage) { + if (program.getIntermediate((EShLanguage)stage)) { + std::vector spirv; + std::string warningsErrors; + spv::SpvBuildLogger logger; + glslang::GlslangToSpv(*program.getIntermediate((EShLanguage)stage), spirv, &logger); + + // 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. + if (! (Options & EOptionMemoryLeakMode)) { + printf("%s", logger.getAllMessages().c_str()); + if (Options & EOptionOutputHexadecimal) { + glslang::OutputSpvHex(spirv, GetBinaryName((EShLanguage)stage), variableName); + } else { + glslang::OutputSpvBin(spirv, GetBinaryName((EShLanguage)stage)); + } + if (Options & EOptionHumanReadableSpv) { + spv::Disassemble(std::cout, spirv); + } + } + } + } + } + } + + // Free everything up, program has to go before the shaders + // because it might have merged stuff from the shaders, and + // the stuff from the shaders has to have its destructors called + // before the pools holding the memory in the shaders is freed. + delete &program; + while (shaders.size() > 0) { + delete shaders.back(); + shaders.pop_back(); + } +} + +// +// Do file IO part of compile and link, handing off the pure +// API/programmatic mode to CompileAndLinkShaderUnits(), which can +// be put in a loop for testing memory footprint and performance. +// +// This is just for linking mode: meaning all the shaders will be put into the +// the same program linked together. +// +// This means there are a limited number of work items (not multi-threading mode) +// and that the point is testing at the linking level. Hence, to enable +// 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() +{ + std::vector 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; + } + + compUnits.push_back(compUnit); + } + + // Actual call to programmatic processing of compile and link, + // in a loop for testing memory and performance. This part contains + // all the perf/memory that a programmatic consumer will care about. + for (int i = 0; i < ((Options & EOptionMemoryLeakMode) ? 100 : 1); ++i) { + for (int j = 0; j < ((Options & EOptionMemoryLeakMode) ? 100 : 1); ++j) + CompileAndLinkShaderUnits(compUnits); + + if (Options & EOptionMemoryLeakMode) + glslang::OS_DumpMemoryCounters(); + } + + for (auto it = compUnits.begin(); it != compUnits.end(); ++it) + FreeFileData(it->text); +} + +int C_DECL main(int argc, char* argv[]) +{ + ProcessArguments(argc, argv); + + if (Options & EOptionDumpConfig) { + printf("%s", glslang::GetDefaultTBuiltInResourceString().c_str()); + if (Worklist.empty()) + return ESuccess; + } + + if (Options & EOptionDumpVersions) { + printf("Glslang Version: %s %s\n", GLSLANG_REVISION, GLSLANG_DATE); + printf("ESSL Version: %s\n", glslang::GetEsslVersionString()); + printf("GLSL Version: %s\n", glslang::GetGlslVersionString()); + std::string spirvVersion; + glslang::GetSpirvVersion(spirvVersion); + 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("GL_KHR_vulkan_glsl version %d\n", 100); + printf("ARB_GL_gl_spirv version %d\n", 100); + if (Worklist.empty()) + return ESuccess; + } + + if (Worklist.empty()) { + usage(); + } + + ProcessConfigFile(); + + // + // Two modes: + // 1) linking all arguments together, single-threaded, new C++ interface + // 2) independent arguments, can be tackled by multiple asynchronous threads, for testing thread safety, using the old handle interface + // + if (Options & EOptionLinkProgram || + Options & EOptionOutputPreprocessed) { + glslang::InitializeProcess(); + CompileAndLinkShaderFiles(); + glslang::FinalizeProcess(); + for (int w = 0; w < NumWorkItems; ++w) { + if (Work[w]) { + delete Work[w]; + } + } + } else { + ShInitialize(); + + 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"); + return EFailThreadCreate; + } + } + glslang::OS_WaitForAllThreads(threads, NumThreads); + } else + CompileShaders(0); + + // 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]; + } + } + + ShFinalize(); + } + + delete[] Work; + + if (CompileFailed) + return EFailCompile; + if (LinkFailed) + return EFailLink; + + return 0; +} + +// +// Deduce the language from the filename. Files must end in one of the +// following extensions: +// +// .vert = vertex +// .tesc = tessellation control +// .tese = tessellation evaluation +// .geom = geometry +// .frag = fragment +// .comp = compute +// +EShLanguage FindLanguage(const std::string& name, bool parseSuffix) +{ + size_t ext = 0; + std::string suffix; + + if (shaderStageName) + suffix = shaderStageName; + else { + // Search for a suffix on a filename: e.g, "myfile.frag". If given + // the suffix directly, we skip looking for the '.' + if (parseSuffix) { + ext = name.rfind('.'); + if (ext == std::string::npos) { + usage(); + return EShLangVertex; + } + ++ext; + } + suffix = name.substr(ext, std::string::npos); + } + + if (suffix == "vert") + return EShLangVertex; + else if (suffix == "tesc") + return EShLangTessControl; + else if (suffix == "tese") + return EShLangTessEvaluation; + else if (suffix == "geom") + return EShLangGeometry; + else if (suffix == "frag") + return EShLangFragment; + else if (suffix == "comp") + return EShLangCompute; + + usage(); + return EShLangVertex; +} + +// +// Read a file's data into a string, and compile it using the old interface ShCompile, +// for non-linkable results. +// +void CompileFile(const char* fileName, ShHandle compiler) +{ + int ret = 0; + char** shaderStrings = ReadFileData(fileName); + if (! shaderStrings) { + usage(); + } + + 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; + } + + EShMessages messages = EShMsgDefault; + SetMessageOptions(messages); + + 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); + // 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;}" }; + // const char* multi[7] = { "/", "/", "\\", "\n", "\n", "#", "version 300 es" }; + // ret = ShCompile(compiler, multi, 7, nullptr, EShOptNone, &Resources, Options, (Options & EOptionDefaultDesktop) ? 110 : 100, false, messages); + } + + if (Options & EOptionMemoryLeakMode) + glslang::OS_DumpMemoryCounters(); + } + + delete [] lengths; + FreeFileData(shaderStrings); + + if (ret == 0) + CompileFailed = true; +} + +// +// print usage to stdout +// +void usage() +{ + printf("Usage: glslangValidator [option]... [file]...\n" + "\n" + "Where: each 'file' ends in ., where is one of\n" + " .conf to provide an optional 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" + " .tese for a tessellation evaluation shader\n" + " .geom for a geometry shader\n" + " .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 .spv (-o overrides this)\n" + " -G create SPIR-V binary, under OpenGL semantics; turns on -l;\n" + " default file name is .spv (-o overrides this)\n" + " -H print human readable form of SPIR-V; turns on -V\n" + " -E print pre-processed GLSL; cannot be used with -l;\n" + " errors will appear on stderr.\n" + " -S uses specified stage rather than parsing the file extension\n" + " valid choices for are vert, tesc, tese, geom, frag, or comp\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" + " -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 save binary to , 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" + " -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 Creates a C header file that contains a uint32_t array named initialized with the shader binary code.\n" + " --vn synonym for --variable-name .\n" + ); + + exit(EFailUsage); +} + +#if !defined _MSC_VER && !defined MINGW_HAS_SECURE_API + +#include + +int fopen_s( + FILE** pFile, + const char* filename, + const char* mode +) +{ + if (!pFile || !filename || !mode) { + return EINVAL; + } + + FILE* f = fopen(filename, mode); + if (! f) { + if (errno != 0) { + return errno; + } else { + return ENOENT; + } + } + *pFile = f; + + return 0; +} + +#endif + +// +// Malloc a string of sufficient size and read a string into it. +// +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"); + + 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); + Error("can't read input file"); + } + + fdata[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) +{ + for(int i = 0; i < NumShaderStrings; i++) + free(data[i]); + + free(data); +} + +void InfoLogMsg(const char* msg, const char* name, const int num) +{ + if (num >= 0 ) + printf("#### %s %s %d INFO LOG ####\n", msg, name, num); + else + printf("#### %s %s INFO LOG ####\n", msg, name); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/StandAlone/Worklist.h b/3rdparty/bgfx/3rdparty/glslang/StandAlone/Worklist.h new file mode 100644 index 0000000..2a14294 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/StandAlone/Worklist.h @@ -0,0 +1,98 @@ +// +// 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. +// +#ifndef WORKLIST_H_INCLUDED +#define WORKLIST_H_INCLUDED + +#include "../glslang/OSDependent/osinclude.h" +#include +#include + +namespace glslang { + + class TWorkItem { + public: + TWorkItem() { } + explicit TWorkItem(const std::string& s) : + name(s) { } + std::string name; + std::string results; + std::string resultsIndex; + }; + + class TWorklist { + public: + TWorklist() { } + virtual ~TWorklist() { } + + void add(TWorkItem* item) + { + GetGlobalLock(); + + worklist.push_back(item); + + ReleaseGlobalLock(); + } + + bool remove(TWorkItem*& item) + { + GetGlobalLock(); + + if (worklist.empty()) + return false; + item = worklist.front(); + worklist.pop_front(); + + ReleaseGlobalLock(); + + return true; + } + + int size() + { + return (int)worklist.size(); + } + + bool empty() + { + return worklist.empty(); + } + + protected: + std::list worklist; + }; + +} // end namespace glslang + +#endif // WORKLIST_H_INCLUDED diff --git a/3rdparty/bgfx/3rdparty/glslang/StandAlone/spirv-remap.cpp b/3rdparty/bgfx/3rdparty/glslang/StandAlone/spirv-remap.cpp new file mode 100644 index 0000000..998f742 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/StandAlone/spirv-remap.cpp @@ -0,0 +1,343 @@ +// +// Copyright (C) 2015 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. +// + +#include +#include +#include +#include + +#include "../SPIRV/SPVRemapper.h" + +namespace { + + typedef unsigned int SpvWord; + + // Poor man's basename: given a complete path, return file portion. + // E.g: + // Linux: /foo/bar/test -> test + // Win: c:\foo\bar\test -> test + // It's not very efficient, but that doesn't matter for our minimal-duty use. + // Using boost::filesystem would be better in many ways, but want to avoid that dependency. + + // OS dependent path separator (avoiding boost::filesystem dependency) +#if defined(_WIN32) + char path_sep_char() { return '\\'; } +#else + char path_sep_char() { return '/'; } +#endif + + std::string basename(const std::string filename) + { + const size_t sepLoc = filename.find_last_of(path_sep_char()); + + return (sepLoc == filename.npos) ? filename : filename.substr(sepLoc+1); + } + + void errHandler(const std::string& str) { + std::cout << str << std::endl; + exit(5); + } + + void logHandler(const std::string& str) { + std::cout << str << std::endl; + } + + // Read word stream from disk + void read(std::vector& spv, const std::string& inFilename, int verbosity) + { + std::ifstream fp; + + if (verbosity > 0) + logHandler(std::string(" reading: ") + inFilename); + + spv.clear(); + fp.open(inFilename, std::fstream::in | std::fstream::binary); + + if (fp.fail()) + errHandler("error opening file for read: "); + + // Reserve space (for efficiency, not for correctness) + fp.seekg(0, fp.end); + spv.reserve(size_t(fp.tellg()) / sizeof(SpvWord)); + fp.seekg(0, fp.beg); + + while (!fp.eof()) { + SpvWord inWord; + fp.read((char *)&inWord, sizeof(inWord)); + + if (!fp.eof()) { + spv.push_back(inWord); + if (fp.fail()) + errHandler(std::string("error reading file: ") + inFilename); + } + } + } + + void write(std::vector& spv, const std::string& outFile, int verbosity) + { + if (outFile.empty()) + errHandler("missing output filename."); + + std::ofstream fp; + + if (verbosity > 0) + logHandler(std::string(" writing: ") + outFile); + + fp.open(outFile, std::fstream::out | std::fstream::binary); + + if (fp.fail()) + errHandler(std::string("error opening file for write: ") + outFile); + + for (auto it = spv.cbegin(); it != spv.cend(); ++it) { + SpvWord word = *it; + fp.write((char *)&word, sizeof(word)); + if (fp.fail()) + errHandler(std::string("error writing file: ") + outFile); + } + + // file is closed by destructor + } + + // Print helpful usage message to stdout, and exit + void usage(const char* const name, const char* const msg = 0) + { + if (msg) + std::cout << msg << std::endl << std::endl; + + std::cout << "Usage: " << std::endl; + + std::cout << " " << basename(name) + << " [-v[v[...]] | --verbose [int]]" + << " [--map (all|types|names|funcs)]" + << " [--dce (all|types|funcs)]" + << " [--opt (all|loadstore)]" + << " [--strip-all | --strip all | -s]" + << " [--do-everything]" + << " --input | -i file1 [file2...] --output|-o DESTDIR" + << std::endl; + + std::cout << " " << basename(name) << " [--version | -V]" << std::endl; + std::cout << " " << basename(name) << " [--help | -?]" << std::endl; + + exit(5); + } + + // grind through each SPIR in turn + void execute(const std::vector& inputFile, const std::string& outputDir, + int opts, int verbosity) + { + for (auto it = inputFile.cbegin(); it != inputFile.cend(); ++it) { + const std::string &filename = *it; + std::vector spv; + read(spv, filename, verbosity); + spv::spirvbin_t(verbosity).remap(spv, opts); + + const std::string outfile = outputDir + path_sep_char() + basename(filename); + + write(spv, outfile, verbosity); + } + + if (verbosity > 0) + std::cout << "Done: " << inputFile.size() << " file(s) processed" << std::endl; + } + + // Parse command line options + void parseCmdLine(int argc, char** argv, std::vector& inputFile, + std::string& outputDir, + int& options, + int& verbosity) + { + if (argc < 2) + usage(argv[0]); + + verbosity = 0; + options = spv::spirvbin_t::NONE; + + // Parse command line. + // boost::program_options would be quite a bit nicer, but we don't want to + // introduce a dependency on boost. + for (int a=1; a= argc) + usage(argv[0], "--output requires an argument"); + if (!outputDir.empty()) + usage(argv[0], "--output can be provided only once"); + + outputDir = argv[a++]; + + // Remove trailing directory separator characters + while (!outputDir.empty() && outputDir.back() == path_sep_char()) + outputDir.pop_back(); + + } + else if (arg == "-vv") { verbosity = 2; ++a; } // verbosity shortcuts + else if (arg == "-vvv") { verbosity = 3; ++a; } // ... + else if (arg == "-vvvv") { verbosity = 4; ++a; } // ... + else if (arg == "-vvvvv") { verbosity = 5; ++a; } // ... + + else if (arg == "--verbose" || arg == "-v") { + ++a; + verbosity = 1; + + if (a < argc) { + char* end_ptr = 0; + int verb = ::strtol(argv[a], &end_ptr, 10); + // If we have not read to the end of the string or + // the string contained no elements, then we do not want to + // store the value. + if (*end_ptr == '\0' && end_ptr != argv[a]) { + verbosity = verb; + ++a; + } + } + } + else if (arg == "--version" || arg == "-V") { + std::cout << basename(argv[0]) << " version 0.97 " << __DATE__ << " " << __TIME__ << std::endl; + exit(0); + } else if (arg == "--input" || arg == "-i") { + // Collect input files + for (++a; a < argc && argv[a][0] != '-'; ++a) + inputFile.push_back(argv[a]); + } else if (arg == "--do-everything") { + ++a; + options = options | spv::spirvbin_t::DO_EVERYTHING; + } else if (arg == "--strip-all" || arg == "-s") { + ++a; + options = options | spv::spirvbin_t::STRIP; + } else if (arg == "--strip") { + ++a; + if (strncmp(argv[a], "all", 3) == 0) { + options = options | spv::spirvbin_t::STRIP; + ++a; + } + } else if (arg == "--dce") { + // Parse comma (or colon, etc) separated list of things to dce + ++a; + for (const char* c = argv[a]; *c; ++c) { + if (strncmp(c, "all", 3) == 0) { + options = (options | spv::spirvbin_t::DCE_ALL); + c += 3; + } else if (strncmp(c, "*", 1) == 0) { + options = (options | spv::spirvbin_t::DCE_ALL); + c += 1; + } else if (strncmp(c, "funcs", 5) == 0) { + options = (options | spv::spirvbin_t::DCE_FUNCS); + c += 5; + } else if (strncmp(c, "types", 5) == 0) { + options = (options | spv::spirvbin_t::DCE_TYPES); + c += 5; + } + } + ++a; + } else if (arg == "--map") { + // Parse comma (or colon, etc) separated list of things to map + ++a; + for (const char* c = argv[a]; *c; ++c) { + if (strncmp(c, "all", 3) == 0) { + options = (options | spv::spirvbin_t::MAP_ALL); + c += 3; + } else if (strncmp(c, "*", 1) == 0) { + options = (options | spv::spirvbin_t::MAP_ALL); + c += 1; + } else if (strncmp(c, "types", 5) == 0) { + options = (options | spv::spirvbin_t::MAP_TYPES); + c += 5; + } else if (strncmp(c, "names", 5) == 0) { + options = (options | spv::spirvbin_t::MAP_NAMES); + c += 5; + } else if (strncmp(c, "funcs", 5) == 0) { + options = (options | spv::spirvbin_t::MAP_FUNCS); + c += 5; + } + } + ++a; + } else if (arg == "--opt") { + ++a; + for (const char* c = argv[a]; *c; ++c) { + if (strncmp(c, "all", 3) == 0) { + options = (options | spv::spirvbin_t::OPT_ALL); + c += 3; + } else if (strncmp(c, "*", 1) == 0) { + options = (options | spv::spirvbin_t::OPT_ALL); + c += 1; + } else if (strncmp(c, "loadstore", 9) == 0) { + options = (options | spv::spirvbin_t::OPT_LOADSTORE); + c += 9; + } + } + ++a; + } else if (arg == "--help" || arg == "-?") { + usage(argv[0]); + } else { + usage(argv[0], "Unknown command line option"); + } + } + } + +} // namespace + +int main(int argc, char** argv) +{ + std::vector inputFile; + std::string outputDir; + int opts; + int verbosity; + +#ifdef use_cpp11 + // handle errors by exiting + spv::spirvbin_t::registerErrorHandler(errHandler); + + // Log messages to std::cout + spv::spirvbin_t::registerLogHandler(logHandler); +#endif + + if (argc < 2) + usage(argv[0]); + + parseCmdLine(argc, argv, inputFile, outputDir, opts, verbosity); + + if (outputDir.empty()) + usage(argv[0], "Output directory required"); + + std::string errmsg; + + // Main operations: read, remap, and write. + execute(inputFile, outputDir, opts, verbosity); + + // If we get here, everything went OK! Nothing more to be done. +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/100.conf b/3rdparty/bgfx/3rdparty/glslang/Test/100.conf new file mode 100644 index 0000000..3899d34 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/100.conf @@ -0,0 +1,28 @@ +MaxLights 32 +MaxClipPlanes 6 +MaxTextureUnits 32 +MaxTextureCoords 32 +MaxVertexAttribs 8 +MaxVertexUniformComponents 4096 +MaxVaryingFloats 64 +MaxVertexTextureImageUnits 0 +MaxCombinedTextureImageUnits 8 +MaxTextureImageUnits 8 +MaxFragmentUniformComponents 4096 +MaxDrawBuffers 1 +MaxVertexUniformVectors 16 +MaxVaryingVectors 8 +MaxFragmentUniformVectors 16 +MaxVertexOutputVectors 16 +MaxFragmentInputVectors 15 +MinProgramTexelOffset -8 +MaxProgramTexelOffset 7 +nonInductiveForLoops 0 +whileLoops 0 +doWhileLoops 0 +generalUniformIndexing 0 +generalAttributeMatrixVectorIndexing 0 +generalVaryingIndexing 0 +generalSamplerIndexing 0 +generalVariableIndexing 0 +generalConstantMatrixVectorIndexing 0 diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/100.frag b/3rdparty/bgfx/3rdparty/glslang/Test/100.frag new file mode 100644 index 0000000..4f0c69b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/100.frag @@ -0,0 +1,227 @@ +// okay +#version 100 +int a[3] = { 2, 3, 4, }; // ERROR (lots) +#version 100 +int uint; + +attribute vec4 v[3]; // ERROR + +float f = 2; // ERROR + +uniform block { // ERROR + int x; +}; + +void foo(float); + +void main() +{ + foo(3); // ERROR + int s = 1 << 4; // ERROR + s = 16 >> 2; // ERROR + if (a == a); // ERROR + int b, c; + b = c & 4; // ERROR + b = c % 4; // ERROR + b = c | 4; // ERROR + b >>= 2; // ERROR + b <<= 2; // ERROR + b %= 3; // ERROR + + struct S { + float f; + float a[10]; + } s1, s2; + + s1 = s2; // ERROR + if (s1 == s2); // ERROR + if (s1 != s2); // ERROR + + switch(b) { // ERROR + } +} + +invariant gl_FragColor; +float fa[]; // ERROR +float f13; +invariant f13; // ERROR +struct S { int a; }; +invariant S; // ERROR, not an input or output +invariant float fi; // ERROR +varying vec4 av; +invariant av; // okay in v100 + +void foo10() +{ + invariant f; // ERROR + invariant float f2; // ERROR + float f3; + invariant f3; // ERROR +} + +uniform vec2 uv2; +invariant uv2; // ERROR +invariant uniform vec3 uv3; // ERROR + +sampler2D glob2D; // ERROR +void f11(sampler2D p2d) +{ + sampler2D v2D; // ERROR +} +varying sampler2D vary2D; // ERROR + +struct sp { + highp float f; + in float g; // ERROR + uniform float h; // ERROR + invariant float i; // ERROR +}; + +uniform sampler3D s3D; // ERROR + +#extension GL_OES_texture_3D : enable + +precision highp sampler3D; +uniform sampler3D s3D2; + +void foo234() +{ + texture3D(s3D2, vec3(0.2), 0.2); + texture3DProj(s3D2, v[1], 0.4); + dFdx(v[0]); // ERROR + dFdy(3.2); // ERROR + fwidth(f13); // ERROR +} + +#extension GL_OES_standard_derivatives : enable + +void foo236() +{ + dFdx(v[0]); + dFdy(3.2); + fwidth(f13); + gl_FragDepth = f13; // ERROR + gl_FragDepthEXT = f13; // ERROR +} + +#extension GL_EXT_frag_depth : enable + +void foo239() +{ + gl_FragDepth = f13; // ERROR + gl_FragDepthEXT = f13; +} + +#extension GL_OES_EGL_image_external : enable + +uniform samplerExternalOES sExt; + +void foo245() +{ + texture2D(sExt, vec2(0.2)); + texture2DProj(sExt, vec3(f13)); + texture2DProj(sExt, v[2]); +} + +precision mediump samplerExternalOES; +uniform samplerExternalOES mediumExt; +uniform highp samplerExternalOES highExt; + +void foo246() +{ + texture2D(mediumExt, vec2(0.2)); + texture2DProj(highExt, v[2]); + texture3D(sExt, vec3(f13)); // ERROR + texture2DProjLod(sExt, vec3(f13), f13); // ERROR + int a; + ~a; // ERROR + a | a; // ERROR + a & a; // ERROR +} + +#extension GL_OES_EGL_image_external : disable +uniform sampler2D s2Dg; + +int foo203940(int a, float b, float a) // ERROR, a redefined +{ + texture2DProjGradEXT(s2Dg, vec3(f13), uv2, uv2); // ERROR, extension not enabled + return a; +} + +float f123 = 4.0f; // ERROR +float f124 = 5e10F; // ERROR + +#extension GL_EXT_shader_texture_lod : enable + +uniform samplerCube sCube; + +void foo323433() +{ + texture2DLodEXT(s2Dg, uv2, f13); + texture2DProjGradEXT(s2Dg, vec3(f13), uv2, uv2); + texture2DGradEXT(s2Dg, uv2, uv2, uv2); + textureCubeGradEXT(sCube, vec3(f13), vec3(f13), vec3(f13)); +} + +int fgfg(float f, mediump int i); +int fgfg(float f, highp int i) { return 2; } // ERROR, precision qualifier difference + +int fffg(float f); +int fffg(float f); // ERROR, can't have multiple prototypes + +int gggf(float f); +int gggf(float f) { return 2; } + +int agggf(float f) { return 2; } +int agggf(float f); +int agggf(float f); // ERROR, second prototype + +varying struct SSS { float f; } s; // ERROR + +int vf(void); +int vf2(); +int vf3(void v); // ERROR +int vf4(int, void); // ERROR +int vf5(int, void v); // ERROR + +void badswizzle() +{ + vec3 a[5]; + a.y; // ERROR, no array swizzle + a.zy; // ERROR, no array swizzle + a.nothing; // ERROR + a.length(); // ERROR, not this version + a.method(); // ERROR +} + +float fooinit(); + +float fooinittest() +{ + return fooinit(); +} + +// Test extra-function initializers +const float fi1 = 3.0; +const float fi2 = 4.0; +const float fi3 = 5.0; + +float fooinit() +{ + return fi1 + fi2 + fi3; // should make a constant of 12.0 +} + +int init1 = gl_FrontFacing ? 1 : 2; // ERROR, non-const initializer + +#ifdef GL_EXT_shader_non_constant_global_initializers +#extension GL_EXT_shader_non_constant_global_initializers : enable +#endif + +int init2 = gl_FrontFacing ? 1 : 2; + +#pragma STDGL invariant(all) + +#line 3000 +#error line of this error should be 3000 + +uniform samplerExternalOES badExt; // syntax ERROR diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/100Limits.vert b/3rdparty/bgfx/3rdparty/glslang/Test/100Limits.vert new file mode 100644 index 0000000..d23b7e8 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/100Limits.vert @@ -0,0 +1,76 @@ +#version 100 + +int ga, gb; +float f; + +uniform sampler2D fsa[3]; +uniform float fua[10]; +attribute mat3 am3; +attribute vec2 av2; +varying vec4 va[4]; + +const mat2 m2 = mat2(1.0); +const vec3 v3 = vec3(2.0); + +void foo(inout float a) {} + +int bar() +{ + return 1; +} + +void main() +{ + while (ga < gb) { } + + do { } while (false); + + for ( ; ; ); // ERROR + for ( ; ga==gb; ); // ERROR + for ( ; ; f++); // ERROR + for ( ga = 0; ; ); // ERROR + for ( bool a = false; ; ); // ERROR + for (float a = 0.0; a == sin(f); ); // ERROR + for ( int a = 0; a < 10; a *= 2); // ERROR + for ( int a = 0; a <= 20; a++) --a; // ERROR + for ( int a = 0; a <= 20; a++) { if (ga==0) a = 4; } // ERROR + for (float a = 0.0; a <= 20.0; a += 2.0); + for (float a = 0.0; a != 20.0; a -= 2.0) { if (ga==0) ga = 4; } + for (float a = 0.0; a == 20.0; a--) for (float a = 0.0; a == 20.0; a--); // two different 'a's, everything okay + for (float a = 0.0; a <= 20.0; a += 2.0); + for (float a = 0.0; a <= 20.0; a += 2.0); + for (float a = 0.0; a > 2.0 * 20.0; a += v3.y); + for (float a = 0.0; a >= 20.0; a += 2.0) foo(a); // ERROR + + int ia[9]; + + fsa[ga]; // ERROR + fua[ga]; + am3[ga]; // ERROR + av2[ga]; // ERROR + va[2+ga]; // ERROR + m2[ga]; // ERROR + v3[ga/2]; // ERROR + ia[ga]; // ERROR + + for (int a = 3; a >= 0; a--) { + fsa[a]; + fua[a+2]; + am3[3*a]; + av2[3*a]; + va[a-1]; + m2[a/2]; + v3[a]; + ia[a]; + ia[bar()]; // ERROR + } + + fsa[2]; + fua[3]; + am3[2]; + av2[1]; + va[1]; + m2[1]; + v3[1]; + ia[3]; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/100scope.vert b/3rdparty/bgfx/3rdparty/glslang/Test/100scope.vert new file mode 100644 index 0000000..b0a72d1 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/100scope.vert @@ -0,0 +1,76 @@ +#version 100 + +int f(int a, int b, int c) +{ + int a = b; // ERROR, redefinition + + { + float a = float(a) + 1.0; + } + + return a; +} + +int f(int a, int b, int c); // okay to redeclare + +bool b; +float b(int a); // ERROR: redefinition + +float c(int a); +bool c; // ERROR: redefinition + +float f; // ERROR: redefinition +float tan; // okay, built-in is in an outer scope +float sin(float x); // ERROR: can't redefine built-in functions +float cos(float x) // ERROR: can't redefine built-in functions +{ + return 1.0; +} +bool radians(bool x) // okay, can overload built-in functions +{ + return true; +} + +invariant gl_Position; + +void main() +{ + int g(); // ERROR: no local function declarations + g(); + + float sin; // okay + sin; + sin(0.7); // ERROR, use of hidden function + f(1,2,3); + + float f; // hides f() + f = 3.0; + + gl_Position = vec4(f); + + for (int f = 0; f < 10; ++f) + ++f; + + int x = 1; + { + float x = 2.0, /* 2nd x visible here */ y = x; // y is initialized to 2 + int z = z; // ERROR: z not previously defined. + } + { + int x = x; // x is initialized to '1' + } + + struct S + { + int x; + }; + { + S S = S(0); // 'S' is only visible as a struct and constructor + S.x; // 'S' is now visible as a variable + } + + int degrees; + degrees(3.2); // ERROR, use of hidden built-in function +} + +varying struct SSS { float f; } s; // ERROR diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/110scope.vert b/3rdparty/bgfx/3rdparty/glslang/Test/110scope.vert new file mode 100644 index 0000000..e28db0f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/110scope.vert @@ -0,0 +1,74 @@ +#version 110 + +int f(int a, int b, int c) +{ + int a = b; // ERROR, redefinition + + { + float a = float(a) + 1.0; // okay + } + + return a; +} + +int f(int a, int b, int c); // okay to redeclare + +bool b; +float b(int a); // okay, b and b() are different + +float c(int a); +bool c; // okay, and c() are different + +float f; // okay f and f() are different +float tan; // okay, hides built-in function +float sin(float x); // okay, can redefine built-in functions +float cos(float x) // okay, can redefine built-in functions +{ + return 1.0; +} +bool radians(bool x) // okay, can overload built-in functions +{ + return true; +} + +int gi = f(1,2,3); // ERROR, can't call user-defined function from global scope + +void main() +{ + int g(); // okay + g(); + + float sin; // okay + sin; + sin(0.7); // okay + f(1,2,3); + + float f; + f = 3.0; + + gl_Position = vec4(f); + + for (int f = 0; f < 10; ++f) + ++f; + + int x = 1; + { + float x = 2.0, /* 2nd x visible here */ y = x; // y is initialized to 2 + int z = z; // ERROR: z not previously defined. + } + { + int x = x; // x is initialized to '1' + } + + struct S + { + int x; + }; + { + S S = S(0); // 'S' is only visible as a struct and constructor + S.x; // 'S' is now visible as a variable + } + + int degrees; + degrees(3.2); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/120.frag b/3rdparty/bgfx/3rdparty/glslang/Test/120.frag new file mode 100644 index 0000000..ea35b80 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/120.frag @@ -0,0 +1,248 @@ +#version 120 + +float lowp; +float mediump; +float highp; + +float precision; + +in vec4 i; +out vec4 o; + +uniform sampler2D s2D; +centroid varying vec2 centTexCoord; + +uniform mat4x2 m; + +struct s { + float f; +}; + +void main() +{ + mat2x3 m23 = mat2x3(m); + + int a; + bool b; + s sv = s(a); + float[2] ia = float[2](3, i.y); + float f1 = 1; + float f = a; + f = a; + ivec3 iv3; + vec3 v3 = iv3; + f = f + a; + f = a - f; + f += a; + f = a - f; + v3 *= iv3; + v3 = iv3 / 2.0f; + v3 = 3.0 * iv3; + v3 = 2 * v3; + v3 = v3 - 2; + if (f < a || + a <= f || + f > a || + f >= a || + a == f || + f != a); + f = b ? a : f; + f = b ? f : a; + f = b ? a : a; + s news = sv; + + i.xy + i.xyz; // ERROR + m * i.xyz; // ERROR + m + i; // ERROR + int aoeu = 1.0; // ERROR + f = b; // ERROR + f = a + b; // ERROR + f = b * a; // ERROR + b = a; // ERROR + b = b + f; // ERROR + f |= b; // ERROR + + gl_FragColor = texture2D(s2D, centTexCoord); + + float flat; + float smooth; + float noperspective; + float uvec2; + float uvec3; + float uvec4; + //packed; // ERROR, reserved word + + { + mat4 m; + vec4 v; + bool b; + gl_FragColor += b ? v : m; // ERROR, types don't match around ":" + } + + gl_FragColor.xr; // ERROR, swizzlers not from same field space + gl_FragColor.xyxyx.xy; // ERROR, cannot make a vec5, even temporarily + centTexCoord.z; // ERROR, swizzler out of range + (a,b) = true; // ERROR, not an l-value +} + +float imageBuffer; +float uimage2DRect; + +int main() {} // ERROR +void main(int a) {} // ERROR + +const int a; // ERROR + +int foo(in float a); +int foo(out float a) // ERROR +{ + return 3.2; // ERROR + foo(a); // ERROR +} + +bool gen(vec3 v) +{ + if (abs(v[0]) < 1e-4F && abs(v[1]) < 1e-4) + return true; +} + +void v1() +{ +} + +void v2() +{ + return v1(); // ERROR, no expression allowed, even though void +} + +void atest() +{ + vec4 v = gl_TexCoord[1]; + v += gl_TexCoord[3]; +} + +varying vec4 gl_TexCoord[6]; // okay, assigning a size +varying vec4 gl_TexCoord[5]; // ERROR, changing size + +mat2x2 m22; +mat2x3 m23; +mat2x4 m24; + +mat3x2 m32; +mat3x3 m33; +mat3x4 m34; + +mat4x2 m42; +mat4x3 m43; +mat4x4 m44; + +void foo123() +{ + mat2 r2 = matrixCompMult(m22, m22); + mat3 r3 = matrixCompMult(m33, m33); + mat4 r4 = matrixCompMult(m44, m44); + + mat2x3 r23 = matrixCompMult(m23, m23); + mat2x4 r24 = matrixCompMult(m24, m24); + mat3x2 r32 = matrixCompMult(m32, m32); + mat3x4 r34 = matrixCompMult(m34, m34); + mat4x2 r42 = matrixCompMult(m42, m42); + mat4x3 r43 = matrixCompMult(m43, m43); + + mat3x2 rfoo1 = matrixCompMult(m23, m32); // ERROR + mat3x4 rfoo2 = matrixCompMult(m34, m44); // ERROR +} + +void matConst() +{ + vec2 v2; + vec3 v3; + mat4 m4b1 = mat4(v2, v3); // ERROR, not enough + mat4 m4b2 = mat4(v2, v3, v3, v3, v3, v2, v2); // ERROR, too much + mat4 m4g = mat4(v2, v3, v3, v3, v3, v3); + mat4 m4 = mat4(v2, v3, v3, v3, v3, v2); + mat3 m3 = mat3(m4); + mat3 m3b1 = mat3(m4, v2); // ERROR, extra arg + mat3 m3b2 = mat3(m4, m4); // ERROR, extra arg + mat3x2 m32 = mat3x2(m4); + mat4 m4c = mat4(m32); + mat3 m3s = mat3(v2.x); + + mat3 m3a1[2] = mat3[2](m3s, m3s); + mat3 m3a2[2] = mat3[2](m3s, m3s, m3s); // ERROR, too many args +} + +uniform sampler3D s3D; +uniform sampler1D s1D; +uniform sampler2DShadow s2DS; + +void foo2323() +{ + vec4 v; + vec2 v2; + float f; + v = texture2DLod(s2D, v2, f); // ERROR + v = texture3DProjLod(s3D, v, f); // ERROR + v = texture1DProjLod(s1D, v, f); // ERROR + v = shadow2DProjLod(s2DS, v, f); // ERROR + + v = texture1DGradARB(s1D, f, f, f); // ERROR + v = texture2DProjGradARB(s2D, v, v2, v2); // ERROR + v = shadow2DProjGradARB(s2DS, v, v2, v2); // ERROR +} + +#extension GL_ARB_shader_texture_lod : require + +void foo2324() +{ + vec4 v; + vec2 v2; + float f; + v = texture2DLod(s2D, v2, f); + v = texture3DProjLod(s3D, v, f); + v = texture1DProjLod(s1D, v, f); + v = shadow2DProjLod(s2DS, v, f); + + v = texture1DGradARB(s1D, f, f, f); + v = texture2DProjGradARB(s2D, v, v2, v2); + v = shadow2DProjGradARB(s2DS, v, v2, v2); + v = shadow2DRectProjGradARB(s2DS, v, v2, v2); // ERROR +} + +uniform sampler2DRect s2DRbad; // ERROR + +void foo121111() +{ + vec2 v2; + vec4 v = texture2DRect(s2DRbad, v2); +} + +#extension GL_ARB_texture_rectangle : enable + +uniform sampler2DRect s2DR; +uniform sampler2DRectShadow s2DRS; + +void foo12111() +{ + vec2 v2; + vec3 v3; + vec4 v4; + vec4 v; + v = texture2DRect(s2DR, v2); + v = texture2DRectProj(s2DR, v3); + v = texture2DRectProj(s2DR, v4); + v = shadow2DRect(s2DRS, v3); + v = shadow2DRectProj(s2DRS, v4); + + v = shadow2DRectProjGradARB(s2DRS, v, v2, v2); +} + +void voidTernary() +{ + bool b; + b ? foo121111() : foo12111(); + b ? foo121111() : 4; // ERROR + b ? 3 : foo12111(); // ERROR +} + +float halfFloat1 = 1.0h; // syntax ERROR diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/120.vert b/3rdparty/bgfx/3rdparty/glslang/Test/120.vert new file mode 100644 index 0000000..d276557 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/120.vert @@ -0,0 +1,203 @@ +#version 120 + +in vec4 i; // ERROR +out vec4 o; // ERROR + +attribute vec2 attv2; +attribute vec4 attv4; +uniform sampler2D s2D; +invariant varying vec2 centTexCoord; +invariant gl_Position; +centroid gl_Position; // ERROR +centroid centroid foo; // ERROR +invariant gl_Position, gl_PointSize; + +void main() +{ + centTexCoord = attv2; + gl_Position = attv4; + + gl_ClipVertex = attv4; + gl_ClipDistance[1] = 0.2; // ERROR + + vec3[12] a; + vec4[a.length()] b; + gl_Position = b[b.length()-1]; + + float f[]; + int a1 = f.length(); // ERROR + float f[7]; + int aa = f.length(); + int a2 = f.length; // ERROR + int a3 = f.length(a); // ERROR + int a4 = f.flizbit; // ERROR + int a4 = f.flizbit(); // ERROR + float md[2][4]; // ERROR + float[2] md2[4]; // ERROR + float[2][4] md3; // ERROR + float md5, md6[2][3]; // ERROR + float[2] md4, md7[4]; // ERROR + float md9[2][3] = float[2][3](1, 2, 3, 4, 5, 6); // ERROR + float md10, md11[2][3] = float[2][3](1, 2, 3, 4, 5, 6); // ERROR + + gl_PointSize = 3.8; +} + +uniform float initted = 3.4; // okay + +const float concall = sin(0.3); + +int[2][3] foo( // ERROR + float[2][3] a, // ERROR + float[2] b[3], // ERROR + float c[2][3]); // ERROR + +int overloadA(in float f); +int overloadA(out float f); // ERROR, different qualifiers +float overloadA(float); // ERROR, different return value for same signature +float overloadA(out float f, int); +float overloadA(int i); + +void overloadB(float, const in float) { } + +vec2 overloadC(int, int); +vec2 overloadC(const in int, float); +vec2 overloadC(float, int); +vec2 overloadC(vec2, vec2); + +vec3 overloadD(int, float); +vec3 overloadD(float, in int); + +vec3 overloadE(float[2]); +vec3 overloadE(mat2 m); +vec3 overloadE(vec2 v); + +vec3 overloadF(int); +vec3 overloadF(float); + +void foo() +{ + float f; + int i; + + overloadB(f, f); + overloadB(f, 2); + overloadB(1, i); + + overloadC(1); // ERROR + overloadC(1, i); + overloadC(vec2(1), vec2(2)); + overloadC(f, 3.0); // ERROR, no way + overloadC(ivec2(1), vec2(2)); + + overloadD(i, f); + overloadD(f, i); + overloadD(i, i); // ERROR, ambiguous + + int overloadB; // hiding + overloadB(1, i); // ERROR + + sin(1); + texture2D(s2D, ivec2(0)); + clamp(attv4, 0, 1); + clamp(ivec4(attv4), 0, 1); + + int a[2]; + overloadC(a, 3); // ERROR + overloadE(a); // ERROR + overloadE(3.3); // ERROR + overloadE(vec2(3.3)); + overloadE(mat2(0.5)); + overloadE(ivec4(1)); // ERROR + overloadE(ivec2(1)); + + float b[2]; + overloadE(b); + + overloadF(1, 1); // ERROR + overloadF(1); +} + +varying vec4 gl_TexCoord[35]; // ERROR, size too big + +// tests for output conversions +void outFun(in float, out ivec2, in int, out float); +int outFunRet(in float, out int, const in int, out ivec4); +ivec2 outFunRet(in float, out ivec4, in int, out ivec4); + +void foo2() +{ + vec2 v2; + vec4 v4; + float f; + int i; + + outFun(i, v2, i, f); + outFunRet(i, f, i, v4); + float ret = outFunRet(i, f, i, v4); + vec2 ret2 = outFunRet(i, v4, i, v4); + bool b = any(lessThan(v4, attv4)); // tests aggregate arg to unary built-in +} + +void noise() +{ + float f1 = noise1(1.0); + vec2 f2 = noise2(vec2(1.0)); + vec3 f3 = noise3(vec3(1.0)); + vec4 f4 = noise4(vec4(1.0)); +} + +// version 130 features + +uniform int c; + +attribute ivec2 x; +attribute vec2 v2a; +attribute float c1D; +attribute vec2 c2D; +attribute vec3 c3D; + +uniform vec4 v4; + +void foo213() +{ + float f = 3; + switch (c) { // ERRORs... + case 1: + f = sin(f); + break; + case 2: + f = f * f; + default: + f = 3.0; + } + + int i; + i << 3 | 0x8A >> 1 & 0xFF; // ERRORs... + + vec3 modfOut, modfIn; + vec3 v11 = modf(modfIn, modfOut); // ERRORS... + float t = trunc(f); + vec2 v12 = round(v2a); + vec2 v13 = roundEven(v2a); + bvec2 b10 = isnan(v2a); + bvec4 b11 = isinf(v4); + + sinh(c1D) + // ERRORS... + cosh(c1D) * tanh(c2D); + asinh(c4D) + acosh(c4D); + atanh(c3D); + + int id = gl_VertexID; // ERROR + gl_ClipDistance[1] = 0.3; // ERROR +} + +int gl_ModelViewMatrix[] = 0; + +// token pasting (ERRORS...) + +#define mac abc##def +int mac; + +#define macr(A,B) A ## B +int macr(qrs,tuv); diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/130.frag b/3rdparty/bgfx/3rdparty/glslang/Test/130.frag new file mode 100644 index 0000000..3e39411 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/130.frag @@ -0,0 +1,169 @@ +#version 130 + +lowp vec3 a; +mediump float b; +highp int c; + +precision highp float; + +in vec4 i; +out vec4 o; + +flat in float fflat; +smooth in float fsmooth; +noperspective in float fnop; + +void main() +{ + float clip = gl_ClipDistance[3]; +} + +uniform samplerCube sampC; + +void foo() +{ + vec4 s = textureGather(sampC, vec3(0.2)); +} + +#extension GL_ARB_texture_gather : enable + +void bar() +{ + vec4 s = textureGather(sampC, vec3(0.2)); +} + +flat in vec3 gl_Color; // ERROR, type +in vec4 gl_Color; +flat in vec4 gl_Color; +flat in vec4 gl_Color[2]; // ERROR, array +vec4 gl_Color; // ERROR, storage + +#extension GL_ARB_texture_gather : warn + +void bar2() +{ + vec4 s = textureGather(sampC, vec3(0.2)); + + uvec3 uv3; + bvec3 b3; + b3 = lessThan(uv3, uv3); + b3 = equal(uv3, uv3); + const bvec2 bl1 = greaterThanEqual(uvec2(2, 3), uvec2(3,3)); + const bvec2 bl2 = equal(uvec2(2, 3), uvec2(3,3)); + const bvec2 bl3 = equal(bl1, bl2); // yes, equal + int a1[int(bl3.x)]; + int a2[int(bl3.y)]; + a1[0]; // size 1 + a2[0]; // size 1 + const bvec4 bl4 = notEqual(greaterThan(uvec4(1,2,3,4), uvec4(0,2,0,6)), lessThanEqual(uvec4(7,8,9,10), uvec4(6, 8, 0, 11))); // compare (t,f,t,f) with (f,t,f,t) + int a3[int(bl4.x)+int(bl4.y)+int(bl4.z)+int(bl4.w)]; + a3[3]; // size 4 + b3 != b3; + b3 < b3; // ERROR + uv3 > uv3; // ERROR + uvec2(2, 3) >= uvec2(3,3); // ERROR + int(bl4) <= int(bl4); // true + int(bl4.x) > int(bl4.y); // false +} + +#extension GL_ARB_texture_gather : enable +#extension GL_ARB_texture_rectangle : enable + +uniform sampler2D samp2D; +uniform sampler2DShadow samp2DS; +uniform sampler2DRect samp2DR; +uniform sampler2DArray samp2DA; + +void bar23() +{ + vec4 s; + s = textureGatherOffset(sampC, vec3(0.3), ivec2(1)); // ERROR + s = textureGatherOffset(samp2DR, vec2(0.3), ivec2(1)); // ERROR + s = textureGatherOffset(samp2D, vec2(0.3), ivec2(1)); + s = textureGatherOffset(samp2DA, vec3(0.3), ivec2(1)); + s = textureGatherOffset(samp2DS, vec2(0.3), 1.3, ivec2(1)); // ERROR + s = textureGatherOffset(samp2D, vec2(0.3), ivec2(1), 2); // ERROR +} + +#extension GL_ARB_gpu_shader5 : enable + +void bar234() +{ + vec4 s; + s = textureGatherOffset(samp2D, vec2(0.3), ivec2(1)); + s = textureGatherOffset(samp2DA, vec3(0.3), ivec2(1)); + s = textureGatherOffset(samp2DR, vec2(0.3), ivec2(1)); + s = textureGatherOffset(samp2DS, vec2(0.3), 1.3, ivec2(1)); + s = textureGatherOffset(samp2D, vec2(0.3), ivec2(1), 2); +} + +#extension GL_ARB_texture_cube_map_array : enable + +uniform samplerCubeArray Sca; +uniform isamplerCubeArray Isca; +uniform usamplerCubeArray Usca; +uniform samplerCubeArrayShadow Scas; + +void bar235() +{ + ivec3 a = textureSize(Sca, 3); + vec4 b = texture(Sca, i); + ivec4 c = texture(Isca, i, 0.7); + uvec4 d = texture(Usca, i); + + b = textureLod(Sca, i, 1.7); + a = textureSize(Scas, a.x); + float f = texture(Scas, i, b.y); + c = textureGrad(Isca, i, vec3(0.1), vec3(0.2)); +} + +int \ + x; // ERROR until 420pack is turned on + +#extension GL_ARB_shading_language_420pack : enable + +const int ai[3] = { 10, 23, 32 }; +layout(binding=0) uniform blockname { int a; } instanceName; // ERROR +uniform layout(binding=0) sampler2D bounds; + +void bar23444() +{ + mat4x3 m43; \ + float a1 = m43[3].y; + vec3 v3; + int a2 = m43.length(); + a2 += m43[1].length(); + a2 += v3.length(); + const float b = 2 * a1; + a.x = gl_MinProgramTexelOffset + gl_MaxProgramTexelOffset; + bool boolb; + boolb.length(); // ERROR + m43[3][1].length(); // ERROR + v3.length; // ERROR + v3.length(b); // ERROR +} + +in float gl_FogFragCoord; + +#extension GL_ARB_separate_shader_objects : enable + +in float gl_FogFragCoord; +in int gl_FogFragCoord; // ERROR + +layout(early_fragment_tests) in; // ERROR +layout(r32i) uniform iimage2D iimg2Dbad; // ERROR + +#extension GL_ARB_shader_image_load_store : enable + +layout(early_fragment_tests) in; + +layout(r32i) uniform iimage2D iimg2D; + +void qux2() +{ + int i; + imageAtomicCompSwap(iimg2D, ivec2(i,i), i, i); + ivec4 pos = imageLoad(iimg2D, ivec2(i,i)); +} + +layout(early_fragment_tests) out; // ERROR diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/130.vert b/3rdparty/bgfx/3rdparty/glslang/Test/130.vert new file mode 100644 index 0000000..d5208cb --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/130.vert @@ -0,0 +1,78 @@ +#version 130 + +uniform int c; +uniform usampler2D us2D; + +in ivec2 x; +in vec2 v2a; +in float c1D; +in vec2 c2D; +in vec3 c3D; +smooth vec4 c4D; // ?? + +uniform vec4 v4; + +void main() +{ + float f = 3; + switch (c) { // full switch testing in switch.frag + case 1: + f = sin(f); + break; + case 2: + f = f * f; + default: + f = 3.0; + } + + uint i; + i = texture(us2D, x).w; // full uint testing in uint.frag + i << 3u | 0x8Au >> 1u & 0xFFu; + + vec3 modfOut, modfIn; + vec3 v11 = modf(modfIn, modfOut); + float t = trunc(f); + vec2 v12 = round(v2a); + vec2 v13 = roundEven(v2a); + bvec2 b10 = isnan(v2a); + bvec4 b11 = isinf(v4); + + sinh(c1D) + + cosh(c1D) * tanh(c2D); + asinh(c4D) + acosh(c4D); + atanh(c3D); + + int id = gl_VertexID; + gl_ClipDistance[1] = 0.3; +} + +// version 140 features + +//uniform isamplerBuffer sbuf; + +//layout(std140) uniform blockName { +// int anonMem; +//}; + +void foo88() +{ + int id = gl_InstanceID; // ERROR + //id += anonMem; + id += texelFetch(id, 8); + + gl_ClipVertex; // these are all present... + gl_Color; + gl_LightSource[0]; + gl_DepthRange.far; + gl_TexCoord; + gl_FogFragCoord; + gl_FrontColor; +} + +// token pasting + +#define mac abc##def +int mac; + +#define macr(A,B) A##B +int macr(qrs,tuv); diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/140.frag b/3rdparty/bgfx/3rdparty/glslang/Test/140.frag new file mode 100644 index 0000000..2bc2f59 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/140.frag @@ -0,0 +1,53 @@ +#version 140 + +varying vec4 v; + +in vec4 i; +out vec4 o; + +in float gl_ClipDistance[5]; + +void main() +{ + float clip = gl_ClipDistance[2]; +} +#ifdef GL_ES +#error GL_ES is set +#else +#error GL_ES is not set +#endif + +in struct S { float f; } s; // ERROR + +float patch = 3.1; + +layout(location=3) in vec4 vl; // ERROR + +layout(location = 3) out vec4 factorBad; // ERROR + +#extension GL_ARB_explicit_attrib_location : enable + +layout(location = 5) out vec4 factor; + +#extension GL_ARB_separate_shader_objects : enable + +layout(location=4) in vec4 vl2; + +float fooi(); + +void foo() +{ + vec2 r1 = modf(v.xy, v.zw); // ERROR, v.zw not l-value + vec2 r2 = modf(o.xy, o.zw); + o.z = fooi(); +} + +// Test extra-function initializers + +float i1 = gl_FrontFacing ? -2.0 : 2.0; +float i2 = 102; + +float fooi() +{ + return i1 + i2; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/140.vert b/3rdparty/bgfx/3rdparty/glslang/Test/140.vert new file mode 100644 index 0000000..914e672 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/140.vert @@ -0,0 +1,79 @@ +#version 140 + +uniform isamplerBuffer sbuf; + +layout(std140) uniform blockName { + int anonMem; +}; + +void main() +{ + int id = gl_InstanceID; + id += anonMem; + id += texelFetch(sbuf, 8).w; + gl_ClipVertex; // could be ERROR, but compiling under compatibility profile + gl_Color; // could be ERROR, but compiling under compatibility profile + gl_LightSource[0]; // could be ERROR, but compiling under compatibility profile + gl_DepthRange.far; + gl_TexCoord; // could be ERROR, but compiling under compatibility profile + gl_FogFragCoord; // could be ERROR, but compiling under compatibility profile + gl_FrontColor; // could be ERROR, but compiling under compatibility profile +} + +out vec4 gl_Position; // ERROR + +layout(location = 9) in vec4 locBad; // ERROR + +#extension GL_ARB_explicit_attrib_location : enable + +layout(location = 9) in vec4 loc; + +#extension GL_ARB_separate_shader_objects : enable + +out vec4 gl_Position; +in vec4 gl_Position; // ERROR +out vec3 gl_Position; // ERROR + +out float gl_PointSize; +out vec4 gl_ClipVertex; +out float gl_FogFragCoord; + +uniform sampler2DRect s2dr; +uniform sampler2DRectShadow s2drs; +in ivec2 itloc2; +in vec2 tloc2; +in vec3 tloc3; +in vec4 tloc4; + +void foo() +{ + vec4 v = texelFetch(s2dr, itloc2); + v += texelFetch(s2dr, itloc2, 0.2); // ERROR, no lod + v += texture(s2dr, tloc2); + v += texture(s2dr, tloc2, 0.3); // ERROR, no bias + v += texture(s2drs, tloc3); + v += textureProj(s2dr, tloc3); + v += textureProj(s2dr, tloc4); + v += textureProjGradOffset(s2dr, tloc4, ivec2(0.0), ivec2(0.0), ivec2(1,2)); + v += textureProjGradOffset(s2drs, tloc4, ivec2(0.0), ivec2(0.0), ivec2(1,2)); +} + +void devi() +{ + gl_DeviceIndex; // ERROR, no extension + gl_ViewIndex; // ERROR, no extension +} + +#ifdef GL_EXT_device_group +#extension GL_EXT_device_group : enable +#endif + +#ifdef GL_EXT_device_group +#extension GL_EXT_multiview : enable +#endif + +void devie() +{ + gl_DeviceIndex; + gl_ViewIndex; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/150.frag b/3rdparty/bgfx/3rdparty/glslang/Test/150.frag new file mode 100644 index 0000000..16963af --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/150.frag @@ -0,0 +1,50 @@ +#version 150 core + +in vec4 gl_FragCoord; +layout(origin_upper_left, pixel_center_integer) in vec4 gl_FragCoord; // ERROR +layout(pixel_center_integer) in vec4 gl_FragCoord; // ERROR +layout(origin_upper_left) in vec4 foo; // ERROR +layout(origin_upper_left, pixel_center_integer) in vec4 gl_FragCoord; + +void main() +{ + vec4 c = gl_FragCoord; +} + +layout(origin_upper_left, pixel_center_integer) in vec4 gl_FragCoord; // ERROR, declared after use + +in struct S { float f; } s; + +float patch = 3.1; + +uniform sampler2DMS sms; +uniform isampler2DMS isms; +uniform usampler2DMS usms; +uniform sampler2DMSArray smsa; +uniform isampler2DMSArray ismsa; +uniform usampler2DMSArray usmsa; + +flat in ivec2 p2; +flat in ivec3 p3; +flat in int samp; + +void barWxyz() +{ + ivec2 t11 = textureSize( sms); + ivec2 t12 = textureSize(isms); + ivec2 t13 = textureSize(usms); + ivec3 t21 = textureSize( smsa); + ivec3 t22 = textureSize(ismsa); + ivec3 t23 = textureSize(usmsa); + vec4 t31 = texelFetch( sms, p2, samp); + ivec4 t32 = texelFetch(isms, p2, samp); + uvec4 t33 = texelFetch(usms, p2, 3); + vec4 t41 = texelFetch( smsa, p3, samp); + ivec4 t42 = texelFetch(ismsa, ivec3(2), samp); + uvec4 t43 = texelFetch(usmsa, p3, samp); +} + +int primitiveID() +{ + return gl_PrimitiveID; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/150.geom b/3rdparty/bgfx/3rdparty/glslang/Test/150.geom new file mode 100644 index 0000000..d5b3c9b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/150.geom @@ -0,0 +1,139 @@ +#version 150 core + +in fromVertex { + in vec3 color; +} fromV[]; + +out toFragment { + out vec3 color; +} toF; + +out fromVertex { // okay to reuse a block name for another block name + vec3 color; +}; + +out fooB { + vec2 color; +} fromVertex; // ERROR, cannot reuse block name as block instance + +int fromVertex; // ERROR, cannot reuse a block name for something else + +out fooC { + vec2 color; +} fooC; // ERROR, cannot have same name for block and instance name + +void main() +{ + EmitVertex(); + EndPrimitive(); + EmitStreamVertex(1); // ERROR + EndStreamPrimitive(0); // ERROR + + color = fromV[0].color; + gl_ClipDistance[3] = gl_in[1].gl_ClipDistance[2]; + gl_Position = gl_in[0].gl_Position; + gl_PointSize = gl_in[3].gl_PointSize; + gl_PrimitiveID = gl_PrimitiveIDIn; + gl_Layer = 2; +} + +out vec4 ov0; // stream should be 0 +layout(stream = 4) out vec4 ov4; +out vec4 o1v0; // stream should be 0 + +layout(stream = 3) uniform; // ERROR +layout(stream = 3) in; // ERROR +layout(stream = 3) uniform int ua; // ERROR +layout(stream = 3) uniform ubb { int ua; } ibb; // ERROR + +layout(line_strip, points, triangle_strip, stream = 3, points, triangle_strip) out; // just means "stream = 3, triangle_strip" +layout(stream = 3, triangle_strip) out; +out vec4 ov3; // stream should be 3 + +layout(stream = 6) out ooutb { vec4 a; } ouuaa6; + +layout(stream = 6) out ooutb2 { + layout(stream = 6) vec4 a; +} ouua6; + +layout(stream = 7) out ooutb3 { + layout(stream = 6) vec4 a; // ERROR +} ouua7; + +out vec4 ov2s3; // stream should be 3 + +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, stream = 3, points) out; // ERROR, changing output primitive +layout(line_strip, points, stream = 3) 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; // ERROR, not until 4.0 + +in inbn { + layout(stream = 2) int a; // ERROR, stream on input +} inbi[]; + +in sameName { + int a15; +} insn[]; + +out sameName { + float f15; +}; + +uniform sameName { + bool b15; +}; + +float summ = gl_MaxVertexAttribs + + gl_MaxVertexUniformComponents + + gl_MaxVaryingFloats + + gl_MaxVaryingComponents + + gl_MaxVertexOutputComponents + + gl_MaxGeometryInputComponents + + gl_MaxGeometryOutputComponents + + gl_MaxFragmentInputComponents + + gl_MaxVertexTextureImageUnits + + gl_MaxCombinedTextureImageUnits + + gl_MaxTextureImageUnits + + gl_MaxFragmentUniformComponents + + gl_MaxDrawBuffers + + gl_MaxClipDistances + + gl_MaxGeometryTextureImageUnits + + gl_MaxGeometryOutputVertices + + gl_MaxGeometryTotalOutputComponents + + gl_MaxGeometryUniformComponents + + gl_MaxGeometryVaryingComponents; + +void fooe1() +{ + gl_ViewportIndex = gl_MaxViewports - 1; +} + +#extension GL_ARB_viewport_array : enable + +void fooe2() +{ + gl_ViewportIndex = gl_MaxViewports - 1; +} + +out int gl_ViewportIndex; diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/150.tesc b/3rdparty/bgfx/3rdparty/glslang/Test/150.tesc new file mode 100644 index 0000000..66c0f3e --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/150.tesc @@ -0,0 +1,34 @@ +#version 150 + +#extension GL_ARB_tessellation_shader : enable + +layout(vertices = 4) out; +int outa[gl_out.length()]; + +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; + float cd = gl_in[1].gl_ClipDistance[2]; + + 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; + gl_out[gl_InvocationID].gl_ClipDistance[1] = cd; + + gl_TessLevelOuter[3] = 3.2; + gl_TessLevelInner[1] = 1.3; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/150.tese b/3rdparty/bgfx/3rdparty/glslang/Test/150.tese new file mode 100644 index 0000000..aea65e8 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/150.tese @@ -0,0 +1,35 @@ +#version 150 + +#extension GL_ARB_tessellation_shader : enable + +layout(quads, cw) in; +layout(fractional_odd_spacing) in; +layout(point_mode) in; +patch in vec4 patchIn; + +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; + float cd = gl_in[1].gl_ClipDistance[2]; + + 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; + gl_ClipDistance[2] = cd; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/150.vert b/3rdparty/bgfx/3rdparty/glslang/Test/150.vert new file mode 100644 index 0000000..4dd9e5c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/150.vert @@ -0,0 +1,29 @@ +#version 150 core + +#ifndef GL_core_profile +# error standard macro GL_core_profile not defined +#endif + +in vec4 iv4; + +uniform float ps; + +invariant gl_Position; + +void main() +{ + gl_Position = iv4; + gl_PointSize = ps; + gl_ClipDistance[2] = iv4.x; + gl_ClipVertex = iv4; +} + +out float gl_ClipDistance[4]; + +uniform foob { + int a[]; +}; +int a[5]; // ERROR, resizing user-block member + +#line 3000 +#error line of this error should be 3001 diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/300.frag b/3rdparty/bgfx/3rdparty/glslang/Test/300.frag new file mode 100644 index 0000000..ca2e2cb --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/300.frag @@ -0,0 +1,161 @@ +#version 300 es +void nodef1(float f); // ERROR, no default precision +uniform sampler2D s2D; +uniform lowp sampler3D s3D; +uniform samplerCube sCube; +uniform lowp samplerCubeShadow sCubeShadow; +uniform lowp sampler2DShadow s2DShadow; +uniform lowp sampler2DArray s2DArray; +uniform lowp sampler2DArrayShadow s2DArrayShadow; + +uniform lowp isampler2D is2D; +uniform lowp isampler3D is3D; +uniform lowp isamplerCube isCube; +uniform lowp isampler2DArray is2DArray; + +uniform lowp usampler2D us2D; +uniform lowp usampler3D us3D; +uniform lowp usamplerCube usCube; +uniform lowp usampler2DArray us2DArray; +precision lowp float; +in float c1D; +in vec2 c2D; +in vec3 c3D; +smooth vec4 c4D; + +flat in int ic1D; +flat in ivec2 ic2D; +flat in ivec3 ic3D; +flat in ivec4 ic4D; +noperspective in vec4 badv; // ERROR +in sampler2D bads; // ERROR +precision lowp uint; // ERROR + +struct s { + int i; + sampler2D s; +}; + +in s badout; // ERROR, can't contain a sampler + // ERROR, can't have int in struct without flat +struct S2 { + vec3 c; + float f; +}; + +in S2 s2; + +out vec3 sc; +out float sf; + +uniform sampler2D arrayedSampler[5]; + +void main() +{ + float f; + vec4 v; + v = texture(s2D, c2D); + v = textureProj(s3D, c4D); + v = textureLod(s2DArray, c3D, 1.2); + f = textureOffset(s2DShadow, c3D, ic2D, c1D); // ERROR, offset argument not constant + v = texelFetch(s3D, ic3D, ic1D); + v = texelFetchOffset(arrayedSampler[2], ic2D, 4, ic2D); // ERROR, offset argument not constant + f = textureLodOffset(s2DShadow, c3D, c1D, ic2D); + v = textureProjLodOffset(s2D, c3D, c1D, ic2D); + v = textureGrad(sCube, c3D, c3D, c3D); + f = textureGradOffset(s2DArrayShadow, c4D, c2D, c2D, ic2D); + v = textureProjGrad(s3D, c4D, c3D, c3D); + v = textureProjGradOffset(s2D, c3D, c2D, c2D, ic2D); + v = texture(arrayedSampler[ic1D], c2D); // ERROR + + ivec4 iv; + iv = texture(is2D, c2D); + iv = textureProjOffset(is2D, c4D, ic2D); + iv = textureProjLod(is2D, c3D, c1D); + iv = textureProjGrad(is2D, c3D, c2D, c2D); + iv = texture(is3D, c3D, 4.2); + iv = textureLod(isCube, c3D, c1D); + iv = texelFetch(is2DArray, ic3D, ic1D); + + iv.xy = textureSize(sCubeShadow, 2); + + float precise; + double boo; // ERROR + dvec2 boo2; // ERROR + dvec3 boo3; // ERROR + dvec4 boo4; // ERROR + + f += gl_FragCoord.y; + gl_FragDepth = f; + + sc = s2.c; + sf = s2.f; + + sinh(c1D) + + cosh(c1D) * tanh(c2D); + asinh(c4D) + acosh(c4D); + atanh(c3D); +} + +uniform multi { + int[2] a[3]; // ERROR + int[2][3] b; // ERROR + int c[2][3]; // ERROR +} multiInst[2][3]; // ERROR + +out vec4 colors[4]; + +void foo() +{ + colors[2] = c4D; + colors[ic1D] = c4D; // ERROR +} + +uniform s st1; +uniform s st2; + +void foo13(s inSt2) +{ + if (st1 == st2); // ERROR + if (st1 != st2); // ERROR + st1.s == st2.s; // ERROR + inSt2 = st1; // ERROR + inSt2 == st1; // ERROR +} + +void foo23() +{ + textureOffset(s2DShadow, c3D, ivec2(-8, 7), c1D); + textureOffset(s2DShadow, c3D, ivec2(-9, 8), c1D); +} + +void foo324(void) +{ + float p = pow(3.2, 4.6); + p += sin(0.4); + p += distance(vec2(10.0, 11.0), vec2(13.0, 15.0)); // 5 + p += dot(vec3(2,3,5), vec3(-2,-1,4)); // 13 + vec3 c3 = cross(vec3(3,-3,1), vec3(4,9,2)); // (-15, -2, 39) + c3 += faceforward(vec3(1,2,3), vec3(2,3,5), vec3(-2,-1,4)); // (-1,-2,-3) + c3 += faceforward(vec3(1,2,3), vec3(-2,-3,-5), vec3(-2,-1,4)); // (1,2,3) + vec2 c2 = reflect(vec2(1,3), vec2(0,1)); // (1,-3) + c2 += refract(vec2(1,3), vec2(0,1), 1.0); // (1,-3) + c2 += refract(vec2(1,3), vec2(0,1), 3.0); + c2 += refract(vec2(1,0.1), vec2(0,1), 5.0); // (0,0) + mat3x2 m32 = outerProduct(vec2(2,3), vec3(5,7,11));// rows: (10, 14, 22), (15, 21, 33) +} + +uniform mediump; // ERROR + +layout(early_fragment_tests) in; // ERROR + +#ifndef GL_FRAGMENT_PRECISION_HIGH +#error missing GL_FRAGMENT_PRECISION_HIGH +#endif + +invariant in; // ERROR +invariant in vec4; // ERROR +invariant in vec4 fooinv; // ERROR + +float imageBuffer; // ERROR, reserved +float uimage2DRect; // ERROR, reserved diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/300.vert b/3rdparty/bgfx/3rdparty/glslang/Test/300.vert new file mode 100644 index 0000000..83b9bb1 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/300.vert @@ -0,0 +1,187 @@ +#version 300 es + +uniform mat4x3 m43; +uniform mat3x3 m33; +uniform mat4x4 m44; + +in vec3 v3; +varying vec2 v2; // ERROR, varying reserved +in vec4 bad[10]; // ERROR, no arrayed inputs +highp in vec4 badorder; // ERROR, incorrect qualifier order +out invariant vec4 badorder2; // ERROR, incorrect qualifier order +in centroid vec4 badorder4; // ERROR, incorrect qualifier order +out flat vec4 badorder3; // ERROR, incorrect qualifier order +void bar(in const float a); // ERROR, incorrect qualifier order +void bar2(highp in float b); // ERROR, incorrect qualifier order +smooth flat out vec4 rep; // ERROR, replicating interpolation qualification +centroid sample out vec4 rep2; // ERROR, replicating auxiliary qualification +in uniform vec4 rep3; // ERROR, replicating storage qualification + +struct S { + vec3 c; + float f; +}; + +out S s; + +void main() +{ + int id = gl_VertexID + gl_InstanceID; + + int c0 = gl_MaxVertexAttribs; + int c1 = gl_MaxVertexUniformVectors; + int c2 = gl_MaxVertexOutputVectors; + int c3 = gl_MaxFragmentInputVectors; + int c4 = gl_MaxVertexTextureImageUnits; + int c5 = gl_MaxCombinedTextureImageUnits; + int c6 = gl_MaxTextureImageUnits; + int c7 = gl_MaxFragmentUniformVectors; + int c8 = gl_MaxDrawBuffers; + int c9 = gl_MinProgramTexelOffset; + int c10 = gl_MaxProgramTexelOffset; + + mat3x4 tm = transpose(m43); + highp float dm = determinant(m44); + mat3x3 im = inverse(m33); + + mat3x2 op = outerProduct(v2, v3); + + gl_Position = m44[2]; + gl_PointSize = v2.y; + + s.c = v3; + s.f = dm; + +#ifdef GL_ES +#error GL_ES is set +#else +#error GL_ES is not set +#endif +} + +float badsize[]; // ERROR +float[] badsize2; // ERROR +uniform ub { + int a[]; // ERROR +} ubInst[]; // ERROR +void foo(int a[]); // ERROR +float okayA[] = float[](3.0f, 4.0F); // Okay + +out vec3 newV; +void newVFun() +{ + newV = v3; +} + +invariant newV; // ERROR, variable already used +in vec4 invIn; +invariant invIn; // ERROR, in v300 +out S s2; +invariant s2; +invariant out S s3; +flat out int; + +uniform ub2 { + float f; +} a; + +uniform ub2 { // ERROR redeclaration of block name (same instance name) + float g; +} a; + +uniform ub2 { // ERROR redeclaration of block name (different instance name) + float f; +} c; + +uniform ub2 { // ERROR redeclaration of block name (no instance name) + float f123; +}; + +uniform ub3 { + bool b23; +}; + +uniform ub3 { // ERROR redeclaration of block name (no instance name in first or declared) + bool b234; +}; + +precision lowp sampler3D; +precision lowp sampler2DShadow; +precision lowp sampler2DArrayShadow; + +uniform sampler2D s2D; +uniform sampler3D s3D; +uniform sampler2DShadow s2DS; +uniform sampler2DArrayShadow s2DAS; +in vec2 c2D; + +void foo23() +{ + ivec2 x1 = textureSize(s2D, 2); + textureSize(s2D); // ERROR, no lod + ivec3 x3 = textureSize(s2DAS, -1); + textureSize(s2DAS); // ERROR, no lod + vec4 x4 = texture(s2D, c2D); + texture(s2D, c2D, 0.2); // ERROR, bias + vec4 x5 = textureProjOffset(s3D, vec4(0.2), ivec3(1)); + textureProjOffset(s3D, vec4(0.2), ivec3(1), .03); // ERROR, bias + float x6 = textureProjGradOffset(s2DS, invIn, vec2(4.2), vec2(5.3), ivec2(1)); +} + +int fgfg(float f, mediump int i); +int fgfg(float f, highp int i); // ERROR, precision qualifier difference + +int fgfgh(float f, const in mediump int i); +int fgfgh(float f, in mediump int i); // ERROR, precision qualifier difference + +void foo2349() +{ + float[] x = float[] (1.0, 2.0, 3.0); + float[] y = x; + float[3] z = x; + float[3] w; + w = y; +} + +int[] foo213234(); // ERROR +int foo234234(float[]); // ERROR +int foo234235(vec2[] v); // ERROR +precision highp float[2]; // ERROR + +int fffg(float f); +int fffg(float f); + +int gggf(float f); +int gggf(float f) { return 2; } +int gggf(float f); + +int agggf(float f) { return 2; } +int agggf(float f); + +out struct Ssss { float f; } ssss; + +uniform Bblock { + int a; +} Binst; +int Bfoo; + +layout(std140) Binst; // ERROR +layout(std140) Bblock; // ERROR +layout(std140) Bfoo; // ERROR + +layout(std430) uniform B430 { int a; } B430i; // ERROR + +struct SNA { + int a[]; // ERROR +}; + +void fooDeeparray() +{ + float[] x = float[] (1.0, 2.0, 3.0), + y = float[] (1.0, 2.0, 3.0, 4.0); + float xp[3], yp[4]; + xp = x; + yp = y; + xp = y; // ERROR, wrong size + yp = x; // ERROR, wrong size +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/300BuiltIns.frag b/3rdparty/bgfx/3rdparty/glslang/Test/300BuiltIns.frag new file mode 100644 index 0000000..89233e2 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/300BuiltIns.frag @@ -0,0 +1,76 @@ +#version 300 es + +int imax, imin; +uint umax, umin; + +vec3 x, y; // ERROR, needs default precision +bvec3 bv; + +uint uy; +uvec2 uv2c; +uvec2 uv2y; +uvec2 uv2x; +uvec4 uv4y; + +ivec3 iv3a; +ivec3 iv3b; + +ivec4 iv4a; +ivec4 iv4b; + +float f; + +vec2 v2a, v2b; +vec4 v4; + +void main() +{ + // 1.3 int + vec3 v = mix(x, y, bv); + ivec4 iv10 = abs(iv4a); + ivec4 iv11 = sign(iv4a); + ivec4 iv12 = min(iv4a, iv4b); + ivec4 iv13 = min(iv4a, imin); + uvec2 u = min(uv2x, uv2y); + uvec4 uv = min(uv4y, uy); + ivec3 iv14 = max(iv3a, iv3b); + ivec4 iv15 = max(iv4a, imax); + uvec2 u10 = max(uv2x, uv2y); + uvec2 u11 = max(uv2x, uy); + ivec4 iv16 = clamp(iv4a, iv4a, iv4b); + ivec4 iv17 = clamp(iv4a, imin, imax); + uvec2 u12 = clamp(uv2x, uv2y, uv2c); + uvec4 uv10 = clamp(uv4y, umin, umax); + + // 1.3 float + vec3 modfOut; + vec3 v11 = modf(x, modfOut); + + float t = trunc(f); + vec2 v12 = round(v2a); + vec2 v13 = roundEven(v2a); + bvec2 b10 = isnan(v2a); + bvec4 b11 = isinf(v4); + + // 3.3 float + int i = floatBitsToInt(f); + uvec4 uv11 = floatBitsToUint(v4); + vec4 v14 = intBitsToFloat(iv4a); + vec2 v15 = uintBitsToFloat(uv2c); + + // 4.0 pack + uint u19 = packSnorm2x16(v2a); + vec2 v20 = unpackSnorm2x16(uy); + uint u15 = packUnorm2x16(v2a); + vec2 v16 = unpackUnorm2x16(uy); + uint u17 = packHalf2x16(v2b); + vec2 v18 = unpackHalf2x16(uy); + + // not present + noise2(v18); // ERROR, not present + + float t__; // ERROR, no __ until revision 310 + + // ERROR, no __ until revision 310 + #define __D +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/300block.frag b/3rdparty/bgfx/3rdparty/glslang/Test/300block.frag new file mode 100644 index 0000000..9820e2a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/300block.frag @@ -0,0 +1,58 @@ +#version 300 es + +precision mediump float; + +struct S { + vec4 u; + uvec4 v; + lowp isampler3D sampler; + vec3 w; + struct T1 { // ERROR + int a; + } t; +}; + +uniform S s; + +uniform fooBlock { + uvec4 bv; + uniform mat2 bm2; + lowp isampler2D sampler; // ERROR + struct T2 { // ERROR + int a; + } t; + S fbs; // ERROR, contains a sampler +}; + +uniform barBlock { + uvec4 nbv; + int ni; +} inst; + +uniform barBlockArray { + uvec4 nbv; + int ni; +} insts[4]; + +uniform unreferenced { + float f; + uint u; +}; + +void main() +{ + texture(s.sampler, vec3(inst.ni, bv.y, insts[2].nbv.z)); + insts[s.v.x]; // ERROR + fooBlock; // ERROR + mat4(s); // ERROR + int insts; + float barBlock; + mat4(barBlock); + mat4(unreferenced); // ERROR, bad type + ++s; // ERROR + inst - 1; // ERROR + ++barBlock; + 2 * barBlockArray; // ERROR +} + +int fooBlock; // ERROR, redef. diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/300layout.frag b/3rdparty/bgfx/3rdparty/glslang/Test/300layout.frag new file mode 100644 index 0000000..32a6b02 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/300layout.frag @@ -0,0 +1,19 @@ +#version 300 es +precision mediump float; +in vec4 pos; +layout (location = 2) in vec4 color; // ERROR + +layout(location = 1) out vec4 c; +layout(location = 3) out vec4 p; +layout(location = 4) out vec4 q[2]; + +void main() +{ + c = color; + p = pos; + q[1] = pos; +} + +layout(location = 40) out float ca[4]; // ERROR, overlap, ERROR too big +layout(location = 41) out float cb[2]; // ERROR, overlap, ERROR too big +layout(location = 39) out float cc[6]; // ERROR, overlap, ERROR too big diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/300layout.vert b/3rdparty/bgfx/3rdparty/glslang/Test/300layout.vert new file mode 100644 index 0000000..06d1206 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/300layout.vert @@ -0,0 +1,57 @@ +#version 300 es + +struct s { vec4 v; }; + +layout(location = 7) in vec3 c; +layout(LocatioN = 3) in vec4 p; +layout(LocatioN = 9) in vec4 q[4]; // ERROR, no array +layout(LocatioN = 10) in s r[4]; // ERROR, no struct, ERROR, location overlap +out vec4 pos; +out vec3 color; + +layout(shared, column_major) uniform mat4 badm4; // ERROR +layout(shared, column_major, row_major) uniform; // default is now shared and row_major + +layout(std140) uniform Transform { // layout of this block is std140 + mat4 M1; // row_major + layout(column_major) mat4 M2; // column major + mat3 N1; // row_major + centroid float badf; // ERROR + in float badg; // ERROR + layout(std140) float bad1; + layout(shared) float bad2; + layout(packed) float bad3; +} tblock; + +uniform T2 { // layout of this block is shared + bool b; + mat4 t2m; +}; + +layout(column_major) uniform T3 { // shared and column_major + mat4 M3; // column_major + layout(row_major) mat4 M4; // row major + mat3 N2; // column_major + int b; // ERROR, redefinition (needs to be last member of block for testing, following members are skipped) +}; + +out badout { // ERROR + float f; +}; + +layout (location = 10) out vec4 badoutA; // ERROR + +void main() +{ + pos = p * (tblock.M1 + tblock.M2 + M4 + M3 + t2m); + color = c * tblock.N1; +} + +shared vec4 compute_only; // ERROR + +layout(packed) uniform; + +layout(packed) uniform float aoeuntaoeu; // ERROR, packed on variable + +layout(location = 40) in float cd; +layout(location = 37) in mat4x3 ce; // ERROR, overlap diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/300link.frag b/3rdparty/bgfx/3rdparty/glslang/Test/300link.frag new file mode 100644 index 0000000..5d39cc0 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/300link.frag @@ -0,0 +1,8 @@ +#version 300 es + +precision highp float; + +out vec4 color1; +out vec4 color2; + +void main() {} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/300link2.frag b/3rdparty/bgfx/3rdparty/glslang/Test/300link2.frag new file mode 100644 index 0000000..7800ac9 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/300link2.frag @@ -0,0 +1,11 @@ +#version 300 es +precision mediump float; +in vec4 pos; + +layout(location = 1) out vec4 c; +layout(location = 5) out vec4 p; +layout(location = 9) out vec4 q[2]; + +void main() +{ +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/300link3.frag b/3rdparty/bgfx/3rdparty/glslang/Test/300link3.frag new file mode 100644 index 0000000..410592c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/300link3.frag @@ -0,0 +1,7 @@ +#version 300 es + +precision highp float; + +out vec4 color1; + +void main() {} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/300operations.frag b/3rdparty/bgfx/3rdparty/glslang/Test/300operations.frag new file mode 100644 index 0000000..5992987 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/300operations.frag @@ -0,0 +1,135 @@ +#version 300 es + +uniform block { + mediump float f; +} instanceName; + +struct S { + int i; +} s; + +float a[5]; + +void main() +{ + bool b; + float f; + int i; + uint u; + bvec3 b3; + vec3 v3; + ivec3 iv3; + uvec3 uv3; + vec4 v4; + ivec4 iv4; + uvec4 uv4; + mat2 m2; + mat4 m4; + + // These are all errors: + instanceName + instanceName; + s + s; + i + f; + u + f; + u + i; + iv3 *= iv4; + iv4 / uv4; + i - v3; + iv3 + uv3; + a * a; + b / b; + + f % f; + i % f; + f % u; + instanceName++; + ++s; + a--; + ++b3; + + iv3 < uv3; + m2 > m2; + m2 != m4; + i >= u; + a <= a; + b > b; + + b && b3; + b3 ^^ b3; + b3 || b; + i && i; + u || u; + m2 ^^ m2; + + !u; + !i; + !m2; + !v3; + !a; + + ~f; + ~m4; + ~v3; + ~a; + ~instanceName; + + i << iv3; + u << uv3; + i >> f; + f >> i; + m4 >> i; + a >> u; + iv3 >> iv4; + + i & u; + u &= uv3; + i | uv3; + u & f; + m2 | m2; + s ^ s; + (f = f) = f; + + // These are all okay: + f * v4; + u + u; + uv4 / u; + iv3 -= iv3; + + i %= 3; + uv3 % 4u; + --m2; + iv4++; + + m4 != m4; + m2 == m2; + i <= i; + a == a; + s != s; + + b && b; + b || b; + b ^^ b; + + !b, uv3; + + ~i; + ~u; + ~uv3; + ~iv3; + + uv3 <<= i; + i >> i; + u << u; + iv3 >> iv3; + + i & i; + u | u; + iv3 ^ iv3; + u & uv3; + uv3 | u; + uv3 &= u; + int arr[0x222 & 0xf]; + arr[1]; // size 2 + int arr2[(uvec2(0, 0x2) | 0x1u).y]; + arr2[2]; // size 3 +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/300scope.vert b/3rdparty/bgfx/3rdparty/glslang/Test/300scope.vert new file mode 100644 index 0000000..162e998 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/300scope.vert @@ -0,0 +1,74 @@ +#version 300 es + +int f(int a, int b, int c) +{ + int a = b; // ERROR, redefinition + + { + float a = float(a) + 1.0; + } + + return a; +} + +int f(int a, int b, int c); // okay to redeclare + +bool b; +float b(int a); // ERROR: redefinition + +float c(int a); +bool c; // ERROR: redefinition + +float f; // ERROR: redefinition +float tan; // ERROR: redefines built-in function +float sin(float x); // ERROR: can't redefine built-in functions +float cos(float x) // ERROR: can't redefine built-in functions +{ + return 1.0; +} +bool radians(bool x) // ERROR: can't overload built-in functions +{ + return true; +} + +invariant gl_Position; + +void main() +{ + int g(); // ERROR: no local function declarations + g(); + + float sin; // okay + sin; + sin(0.7); // ERROR, use of hidden function + f(1,2,3); + + float f; // hides f() + f = 3.0; + + gl_Position = vec4(f); + + for (int f = 0; f < 10; ++f) + ++f; + + int x = 1; + { + float x = 2.0, /* 2nd x visible here */ y = x; // y is initialized to 2 + int z = z; // ERROR: z not previously defined. + } + { + int x = x; // x is initialized to '1' + } + + struct S + { + int x; + }; + { + S S = S(0); // 'S' is only visible as a struct and constructor + S.x; // 'S' is now visible as a variable + } + + int degrees; + degrees(3.2); // ERROR, use of hidden built-in function +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/310.comp b/3rdparty/bgfx/3rdparty/glslang/Test/310.comp new file mode 100644 index 0000000..9575b6f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/310.comp @@ -0,0 +1,256 @@ +#version 310 es + +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; + +const int total = gl_MaxComputeWorkGroupCount.y + + gl_MaxComputeUniformComponents + + gl_MaxComputeTextureImageUnits + + gl_MaxComputeImageUniforms + + gl_MaxComputeAtomicCounters + + gl_MaxComputeAtomicCounterBuffers; + +buffer ShaderStorageBlock +{ + int value; + float values[]; +}; + +buffer InvalidShaderStorageBlock +{ + float values[]; // ERROR + int value; +} invalid; + +void main() +{ + barrier(); + memoryBarrier(); + memoryBarrierAtomicCounter(); + memoryBarrierBuffer(); + memoryBarrierShared(); + memoryBarrierImage(); + groupMemoryBarrier(); + value = int(values[gl_LocalInvocationIndex]); +} + +layout(location = 2) in vec3 v3; // ERROR +in float f; // ERROR +out float fo; // ERROR + +shared vec4 s; +layout(location = 2) shared vec4 sl; // ERROR +shared float fs = 4.2; // ERROR + +layout(local_size_x = 2, local_size_y = 3, local_size_z = 4) out; // ERROR + +int arrX[gl_WorkGroupSize.x]; +int arrY[gl_WorkGroupSize.y]; +int arrZ[gl_WorkGroupSize.z]; + +readonly buffer roblock +{ + int value; + float values[]; +} ro; + +void foo() +{ + ro.values[2] = 4.7; // ERROR, readonly + ro.values.length(); + ++s; +} + +buffer vec4 v; // ERROR + +uniform usampler2D us2dbad; // ERROR, default precision + +precision highp usampler2D; +precision highp iimage2DArray; +precision highp iimage2D; + +uniform usampler2D us2d; + +uniform iimage2DArray ii2dabad; // ERROR, not writeonly +uniform writeonly iimage2DArray ii2da; + +layout(r32i) uniform iimage2D iimg2D; +layout(rgba32i) uniform readonly iimage2D iimg2Drgba; +layout(rgba32f) uniform readonly image2D img2Drgba; // ERROR, no default +layout(r32ui) uniform uimage2D uimg2D; // ERROR, no default + +void qux() +{ + int i = 4; + imageAtomicCompSwap(iimg2D, ivec2(i,i), i, i);// ERROR no longer in 310 + imageAtomicAdd(uimg2D, ivec2(i,i), uint(i)); // ERROR no longer in 310 + imageAtomicMin(iimg2Drgba, ivec2(i,i), i); // ERROR no longer in 310 // ERROR iimg2Drgba does not have r32i layout + imageAtomicMax(img2Drgba, ivec2(i,i), i); // ERROR no longer in 310 // ERROR img2Drgba is not integer image + ivec4 pos = imageLoad(iimg2D, ivec2(i,i)); + imageStore(ii2da, ivec3(i,i,i), ivec4(0)); + imageLoad(img2Drgba, ivec2(i,i)); + imageLoad(ii2da, ivec3(i,i,i)); // ERROR, drops writeonly +} + +volatile float vol; // ERROR, not an image +readonly int vol2; // ERROR, not an image + +void passr(coherent readonly iimage2D image) +{ +} + +layout(r32i) coherent readonly uniform iimage2D qualim1; +layout(r32i) coherent restrict readonly uniform iimage2D qualim2; + +void passrc() +{ + passr(qualim1); + passr(qualim2); // ERROR, drops restrict + passr(iimg2D); +} + +highp layout(rg8i) uniform readonly uimage2D i1bad; // ERROR, type mismatch +highp layout(rgba32i) uniform readonly image2D i2bad; // ERROR, type mismatch +highp layout(rgba32f) uniform readonly uimage2D i3bad; // ERROR, type mismatch +layout(r8_snorm) uniform readonly iimage2D i4bad; // ERROR, type mismatch +layout(rgba32ui) uniform readonly iimage2D i5bad; // ERROR, type mismatch +layout(r8ui) uniform readonly iimage2D i6bad; // ERROR, type mismatch + +layout(binding = 0) uniform atomic_uint counter; + +uint func(atomic_uint c) +{ + return atomicCounterIncrement(c); +} + +uint func2(out atomic_uint c) // ERROR, output +{ + return counter; // ERROR, type mismatch + return atomicCounter(counter); +} + +void mainAC() +{ + atomic_uint non_uniform_counter; // ERROR + uint val = atomicCounter(counter); + atomicCounterDecrement(counter); +} + +layout(binding = 1) uniform mediump atomic_uint counterBad; // ERROR, not highp + +layout(binding = 2, offset = 4) uniform atomic_uint countArr[4]; +uniform int i; + +void opac() +{ + int a[3]; + a[counter]; // ERROR, non-integer + countArr[2]; + countArr[i]; +} + +shared int atomi; +shared uint atomu; + +void atoms() +{ + int origi = atomicAdd(atomi, 3); + uint origu = atomicAnd(atomu, 7u); + origi = atomicExchange(atomi, 4); + origu = atomicCompSwap(atomu, 10u, 8u); +} + +precision highp atomic_uint; +precision lowp atomic_uint; // ERROR + +precise int pfoo; // ERROR, reserved + +dmat2x4 dm; // ERROR +uniform samplerCubeArray sca; // ERROR +uniform iimage2DRect i2dr; // ERROR +highp uniform image2DMS i2dms; // ERROR +uniform uimage2DMSArray u2dmsa; // ERROR + +highp layout(r32f) coherent volatile restrict readonly writeonly uniform image2D okay1; + layout(r32i) coherent volatile restrict readonly uniform iimage2D okay2; +highp layout(r32ui) coherent volatile restrict writeonly uniform uimage2D okay3; +highp layout(r32f) coherent volatile restrict uniform image2D okay4; + +highp layout(rgba32f) coherent volatile restrict uniform image2D badQ1; // ERROR, bad qualifiers + layout(rgba8i) coherent volatile restrict uniform iimage2D badQ2; // ERROR, bad qualifiers +highp layout(rgba16ui) coherent volatile restrict uniform uimage2D badQ3; // ERROR, bad qualifiers + +writeonly buffer woblock +{ + int value; + float values[]; +} wo; + +void foowo() +{ + float g; + g = wo.values[2]; // ERROR, writeonly + float f = wo.values[2]; // ERROR, writeonly + ++wo.values[2]; // ERROR, writeonly + wo.values[2]--; // ERROR, writeonly + f + wo.values[2]; // ERROR, writeonly + wo.values[2] - f; // ERROR, writeonly + bool b; + b ? f : wo.values[2]; // ERROR, writeonly + b ? wo.values[2] : f; // ERROR, writeonly + if (f == wo.values[2]) // ERROR, writeonly + ++f; + if (f >= wo.values[2]) // ERROR, writeonly + ++f; + f = vec3(wo.values[2]).x; // ERROR, writeonly + ~wo.value; // ERROR, writeonly + wo.values[2] = 3.4; +} + +buffer multioblock +{ + readonly int value; + writeonly float values[]; +} multio; + +void foomultio() +{ + float g; + g = wo.values[2]; // ERROR, writeonly + ~wo.value; + wo.values[2] = 3.4; + wo.value = 2; // ERROR, readonly +} + +in inb { // ERROR + int a; +} inbi; + +out outb { // ERROR + int a; +} outbi; + +float t__; // ERROR, no __ until revision 310 + + // ERROR, no __ until revision 310 +#define __D + +shared vec4 arr[2][3][4]; + +void devi() +{ + gl_DeviceIndex; // ERROR, no extension + gl_ViewIndex; // ERROR, never this stage +} + +#ifdef GL_EXT_device_group +#extension GL_EXT_device_group : enable +#endif + +void devie() +{ + gl_DeviceIndex; + gl_ViewIndex; // ERROR, never this stage +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/310.frag b/3rdparty/bgfx/3rdparty/glslang/Test/310.frag new file mode 100644 index 0000000..6814e6c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/310.frag @@ -0,0 +1,451 @@ +#version 310 es +highp float nodef3(float); // ERROR, no default precision +precision mediump float; +precision highp usampler2D; +precision highp sampler2D; +precision highp isampler2DArray; + +layout(origin_upper_left, pixel_center_integer) in vec4 gl_FragCoord; // ERROR, not supported + +layout(location = 2) in vec3 v3; +layout(location = 2) in mat4 yi; // ERROR, locations conflict with xi + +uniform sampler2D arrayedSampler[5]; +uniform usampler2D usamp2d; +uniform usampler2DRect samp2dr; // ERROR, reserved +uniform isampler2DArray isamp2DA; + +in vec2 c2D; +uniform int i; + +void main() +{ + vec4 v = texture(arrayedSampler[i], c2D); // ERROR + + ivec2 offsets[4]; + const ivec2 constOffsets[4] = ivec2[4](ivec2(1,2), ivec2(3,4), ivec2(15,16), ivec2(-2,0)); + uvec4 uv4 = textureGatherOffsets(samp2dr, c2D, offsets, 2); // ERROR, not supported + vec4 v4 = textureGather(arrayedSampler[0], c2D); + ivec4 iv4 = textureGatherOffset(isamp2DA, vec3(0.1), ivec2(1), 3); + iv4 = textureGatherOffset(isamp2DA, vec3(0.1), ivec2(1), i); // ERROR, last argument not const + iv4 = textureGatherOffset(isamp2DA, vec3(0.1), ivec2(1), 4); // ERROR, last argument out of range + iv4 = textureGatherOffset(isamp2DA, vec3(0.1), ivec2(1), 1+2); + iv4 = textureGatherOffset(isamp2DA, vec3(0.1), ivec2(0.5)); + iv4 = textureGatherOffset(isamp2DA, vec3(0.1), ivec2(i)); // ERROR, offset not constant +} + +out vec4 outp; +void foo23() +{ + const ivec2[3] offsets = ivec2[3](ivec2(1,2), ivec2(3,4), ivec2(15,16)); + + textureProjGradOffset(usamp2d, outp, vec2(0.0), vec2(0.0), ivec2(c2D)); // ERROR, offset not constant + textureProjGradOffset(usamp2d, outp, vec2(0.0), vec2(0.0), offsets[1]); + textureProjGradOffset(usamp2d, outp, vec2(0.0), vec2(0.0), offsets[2]); // ERROR, offset out of range + textureProjGradOffset(usamp2d, outp, vec2(0.0), vec2(0.0), ivec2(-10, 20)); // ERROR, offset out of range + + if (gl_HelperInvocation) + ++outp; + + int sum = gl_MaxVertexImageUniforms + + gl_MaxFragmentImageUniforms + + gl_MaxComputeImageUniforms + + gl_MaxCombinedImageUniforms + + gl_MaxCombinedShaderOutputResources; + + bool b1, b2, b3, b; + + b1 = mix(b2, b3, b); + uvec3 um3 = mix(uvec3(i), uvec3(i), bvec3(b)); + ivec4 im4 = mix(ivec4(i), ivec4(i), bvec4(b)); +} + +layout(binding=3) uniform sampler2D s1; +layout(binding=3) uniform sampler2D s2; // ERROR: overlapping bindings? Don't see that in the 310 spec. +highp layout(binding=2) uniform writeonly image2D i2D; + layout(binding=4) uniform readonly image3D i3D; // ERROR, no default precision + layout(binding=5) uniform imageCube iCube; // ERROR, no default precision + layout(binding=6) uniform image2DArray i2DA; // ERROR, no default precision + layout(binding=6) uniform coherent volatile restrict image2D i2Dqualified; // ERROR, no default precision + +layout(binding = 1) uniform bb { + int foo; + layout(binding = 2) float f; // ERROR +} bbi; + +in centroid vec4 centroidIn; +layout(location = 200000) uniform vec4 bigl; // ERROR, location too big + +layout(early_fragment_tests) in; + +layout(location = 40) out vec4 bigout1; // ERROR, too big +layout(location = 40) out vec4 bigout2; // ERROR, overlap +layout(location = -2) out vec4 neg; // ERROR, negative + +layout(std430) buffer b430 { + int i; +} b430i; + +layout(shared) uniform bshar { + int i; +} bshari; + +in smooth vec4 smoothIn; +in flat int flatIn; + +uniform sampler2DMS s2dms; // ERROR, no default precision qualifier + +void foots() +{ + highp ivec2 v2 = textureSize(s1, 2); + highp ivec3 v3 = textureSize(isamp2DA, 3); + v2 = textureSize(s2dms); + v2 = imageSize(i2D); + v3 = imageSize(i3D); + v2 = imageSize(iCube); + v3 = imageSize(i2DA); + v2 = imageSize(i2Dqualified); +} + +out bool bout; // ERROR +highp out image2D imageOut; // ERROR +out mat2x3 mout; // ERROR + +in bool inb; // ERROR +in sampler2D ino; // ERROR +in float ina[4]; +in float inaa[4][2]; // ERROR +struct S { float f; }; +in S ins; +in S[4] inasa; // ERROR +in S insa[4]; // ERROR +struct SA { float f[4]; }; +in SA inSA; // ERROR +struct SS { float f; S s; }; +in SS inSS; // ERROR + +#ifndef GL_EXT_shader_io_blocks +#error GL_EXT_shader_io_blocks not defined +#endif + +#extension GL_EXT_shader_io_blocks : enable + +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]; + +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 foo_IO() +{ + gl_FragDepth = 0.2; // ERROR, early_fragment_tests declared + gl_Layer; // ERROR, not present + gl_PrimitiveID; // ERROR, not present + bool f = gl_FrontFacing; +} + +out float gl_FragDepth; + +#extension GL_OES_geometry_shader : enable + +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 pfooBad() +{ + precise vec2 h; // ERROR reserved + h = fma(inf, ing, h); // ERROR, not available + textureGatherOffset(sArray[0], vec2(0.1), ivec2(inf)); // ERROR, offset not constant + textureGatherOffsets(sArray[0], vec2(0.1), constOffsets); // ERROR, not available +} + +#extension GL_OES_gpu_shader5 : enable + +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 +} + +#extension GL_EXT_texture_cube_map_array : enable + +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 badSample() +{ + lowp int a1 = gl_SampleID; // ERROR, need extension + mediump vec2 a2 = gl_SamplePosition; // ERROR, need extension + highp int a3 = gl_SampleMaskIn[0]; // ERROR, need extension + gl_SampleMask[0] = a3; // ERROR, need extension + mediump int n = gl_NumSamples; // ERROR, need extension +} + +#ifdef GL_OES_sample_variables +#extension GL_OES_sample_variables : enable +#endif + +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; + +void badImageAtom() +{ + float datf; + int dati; + uint datu; + + imageAtomicAdd( im2Di, P, dati); // ERROR, need extension + imageAtomicAdd( im2Du, P, datu); // ERROR, need extension + imageAtomicMin( im2Di, P, dati); // ERROR, need extension + imageAtomicMin( im2Du, P, datu); // ERROR, need extension + imageAtomicMax( im2Di, P, dati); // ERROR, need extension + imageAtomicMax( im2Du, P, datu); // ERROR, need extension + imageAtomicAnd( im2Di, P, dati); // ERROR, need extension + imageAtomicAnd( im2Du, P, datu); // ERROR, need extension + imageAtomicOr( im2Di, P, dati); // ERROR, need extension + imageAtomicOr( im2Du, P, datu); // ERROR, need extension + imageAtomicXor( im2Di, P, dati); // ERROR, need extension + imageAtomicXor( im2Du, P, datu); // ERROR, need extension + imageAtomicExchange(im2Di, P, dati); // ERROR, need extension + imageAtomicExchange(im2Du, P, datu); // ERROR, need extension + imageAtomicExchange(im2Df, P, datf); // ERROR, need extension + imageAtomicCompSwap(im2Di, P, 3, dati); // ERROR, need extension + imageAtomicCompSwap(im2Du, P, 5u, datu); // ERROR, need extension +} + +#ifdef GL_OES_shader_image_atomic +#extension GL_OES_shader_image_atomic : enable +#endif + +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 +} + +sample in vec4 colorSampInBad; // ERROR, reserved +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; + +void badInterp() +{ + interpolateAtCentroid(colorfc); // ERROR, need extension + interpolateAtSample(colorfc, 1); // ERROR, need extension + interpolateAtOffset(colorfc, vec2(0.2)); // ERROR, need extension +} + +#if defined GL_OES_shader_multisample_interpolation +#extension GL_OES_shader_multisample_interpolation : enable +#endif + +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_softlight) out; // ERROR, need extension + +#ifdef GL_KHR_blend_equation_advanced +#extension GL_KHR_blend_equation_advanced : enable +#endif + +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 + +void devi() +{ + gl_DeviceIndex; // ERROR, no extension + gl_ViewIndex; // ERROR, no extension +} + +#ifdef GL_EXT_device_group +#extension GL_EXT_device_group : enable +#endif + +#ifdef GL_EXT_device_group +#extension GL_EXT_multiview : enable +#endif + +void devie() +{ + gl_DeviceIndex; + gl_ViewIndex; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/310.geom b/3rdparty/bgfx/3rdparty/glslang/Test/310.geom new file mode 100644 index 0000000..bf0b1ae --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/310.geom @@ -0,0 +1,152 @@ +#version 310 es + +#ifdef GL_EXT_geometry_shader +#extension GL_EXT_geometry_shader : enable +#else +#error no GL_EXT_geometry_shader +#endif + +#ifndef GL_OES_geometry_shader +#error no GL_OES_geometry_shader +#endif + +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 pointSize1() +{ + highp float ps = gl_in[3].gl_PointSize; // ERROR, need point_size extension + gl_PointSize = ps; // ERROR, need point_size extension +} + +#extension GL_OES_geometry_point_size : enable + +void pointSize2() +{ + highp float ps = gl_in[3].gl_PointSize; + gl_PointSize = ps; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/310.tesc b/3rdparty/bgfx/3rdparty/glslang/Test/310.tesc new file mode 100644 index 0000000..29c3932 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/310.tesc @@ -0,0 +1,169 @@ +#version 310 es + +#extension GL_OES_tessellation_shader : enable + +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 + +void foop() +{ + precise float d; // ERROR without gpu_shader5 + d = fma(d, d, d); // ERROR without gpu_shader5 +} + +patch out pinbn { + int a; +} pinbi; + +centroid out vec3 myColor2[]; +centroid in vec3 centr[]; +sample out vec4 perSampleColor[]; // ERROR without sample extensions + +layout(vertices = 4) out float badlay[]; // ERROR, not on a variable +out float misSized[5]; // ERROR, size doesn't match +out float okaySize[4]; + +#extension GL_OES_tessellation_point_size : enable + +void pointSize2() +{ + float ps = gl_in[1].gl_PointSize; + gl_out[gl_InvocationID].gl_PointSize = ps; +} + +#extension GL_OES_gpu_shader5 : enable + +precise vec3 pv3; + +void goodfoop() +{ + precise float d; + + pv3 *= pv3; + pv3 = fma(pv3, pv3, pv3); + d = fma(d, d, d); +} + +void bbBad() +{ + gl_BoundingBoxOES; // ERROR without GL_OES_primitive_bounding_box +} + +#extension GL_OES_primitive_bounding_box : enable + +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/310.tese b/3rdparty/bgfx/3rdparty/glslang/Test/310.tese new file mode 100644 index 0000000..63b1daa --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/310.tese @@ -0,0 +1,128 @@ +#version 310 es + +#extension GL_EXT_tessellation_shader : enable +#extension GL_OES_tessellation_shader : enable +#extension GL_EXT_tessellation_shader : disable + +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; // ERROR without sample extensions + +#extension GL_OES_tessellation_point_size : enable + +void pointSize2() +{ + float ps = gl_in[1].gl_PointSize; // ERROR, not in the redeclaration, but no error on use of gl_PointSize + gl_PointSize = ps; +} + +#extension GL_EXT_primitive_bounding_box : enable + +void bbbad() +{ + gl_BoundingBoxOES; // ERROR, wrong stage +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/310.vert b/3rdparty/bgfx/3rdparty/glslang/Test/310.vert new file mode 100644 index 0000000..92a50e2 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/310.vert @@ -0,0 +1,403 @@ +#version 310 es + +shared vec4 s; // ERROR +layout(local_size_x = 2) out; // ERROR +buffer vec4 v; // ERROR +in int ini; +layout(location = 2) uniform mat4 x; +layout(location = 3) uniform mat4 y; +layout(location = 2) out mat4 xi; +layout(location = 3) out mat4 yi; // ERROR, locations conflict with xi + +void main() +{ + uvec2 u2; + u2 = uaddCarry(u2, u2, u2); + uint u1; + u1 = usubBorrow(u1, u1, u1); + uvec4 u4; + umulExtended(u4, u4, u4, u4); + ivec4 i4; + imulExtended(i4, i4, i4, i4); + int i1; + i1 = bitfieldExtract(i1, 4, 5); + uvec3 u3; + u3 = bitfieldExtract(u3, 4, 5); + ivec3 i3; + i3 = bitfieldInsert(i3, i3, 4, 5); + u1 = bitfieldInsert(u1, u1, 4, 5); + ivec2 i2; + i2 = bitfieldReverse(i2); + u4 = bitfieldReverse(u4); + i1 = bitCount(i1); + i3 = bitCount(u3); + i2 = findLSB(i2); + i4 = findLSB(u4); + i1 = findMSB(i1); + i2 = findMSB(u2); + + vec3 v3; + v3 = frexp(v3, i3); + vec2 v2; + v2 = ldexp(v2, i2); + + mediump vec4 v4; + u1 = packUnorm4x8(v4); + u1 = packSnorm4x8(v4); + v4 = unpackUnorm4x8(u1); + v4 = unpackSnorm4x8(u1); +} + +precision highp sampler2DMS; +precision highp isampler2DMS; +precision highp usampler2DMS; + +uniform sampler2DMS s2dms; +uniform isampler2DMS is2dms; +uniform usampler2DMS us2dms; +uniform usampler2DMSArray us2dmsa; // ERROR + +void foo() +{ + ivec2 v2; + v2 = textureSize(s2dms); + v2 = textureSize(us2dms); + vec4 v4 = texelFetch(s2dms, v2, 2); + ivec4 iv4 = texelFetch(is2dms, v2, 2); + textureSamples(s2dms); // ERROR + float f; + frexp(f, ini); // ERROR, i not writable +} + +out bool outb; // ERROR +out sampler2D outo; // ERROR +out float outa[4]; +out float outaa[4][2]; // ERROR +struct S { float f; }; +out S outs; +out S[4] outasa; // ERROR +out S outsa[4]; // ERROR +struct SA { float f[4]; }; +out SA outSA; // ERROR +struct SS { float f; S s; }; +out SS outSS; // ERROR + +layout(std430) uniform U430 { int a; } U430i; // ERROR +layout(std430) buffer B430 { int a; } B430i; + +#ifndef GL_OES_shader_io_blocks +#error GL_OES_shader_io_blocks not defined +#endif + +#extension GL_OES_shader_io_blocks : enable + +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 foo_IO() +{ + 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 pfooBad() +{ + precise vec2 h; // ERROR reserved + h = fma(inf, ing, h); // ERROR, not available + sArray[sIndex + 1]; // ERRRO, not supported + auArray[sIndex + 1]; + ubInst[1]; + bbInst[2]; + ubInst[sIndex + 1]; // ERROR, not supported + bbInst[sIndex]; // ERROR, not supported + iArray[2]; + iArray[sIndex * 2]; // ERROR, not supported + textureGatherOffset(sArray[0], vec2(0.1), ivec2(inf)); // ERROR, offset not constant + textureGatherOffsets(sArray[0], vec2(0.1), constOffsets); // ERROR, not available +} + +#extension GL_OES_gpu_shader5 : enable + +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 badSamp1; // ERROR, reserved +uniform isamplerBuffer badSamp2; // ERROR, reserved +uniform usamplerBuffer badSamp3; // ERROR, reserved +uniform writeonly imageBuffer badSamp4; // ERROR, reserved +uniform writeonly iimageBuffer badSamp5; // ERROR, reserved +uniform writeonly uimageBuffer badSamp6; // ERROR, reserved + +#extension GL_OES_texture_buffer : enable +#extension GL_EXT_texture_buffer : enable + +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 badCA1; // ERROR, reserved +uniform writeonly iimageCubeArray badCA2; // ERROR, reserved +uniform writeonly uimageCubeArray badCA3; // ERROR, reserved + +uniform samplerCubeArray badCA4; // ERROR, reserved +uniform samplerCubeArrayShadow badCA5; // ERROR, reserved +uniform isamplerCubeArray badCA6; // ERROR, reserved +uniform usamplerCubeArray badCA7; // ERROR, reserved + +#extension GL_OES_texture_cube_map_array : enable + +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 bad2DMS; // ERROR, reserved +uniform isampler2DMSArray bad2DMSi; // ERROR, reserved +uniform usampler2DMSArray bad2DMSu; // ERROR, reserved + +#extension GL_OES_texture_storage_multisample_2d_array : enable + +#ifdef GL_OES_texture_storage_multisample_2d_array + +uniform sampler2DMSArray noPrec2DMS; // ERROR, no default +uniform isampler2DMSArray noPrec2DMSi; // ERROR, no default +uniform usampler2DMSArray noPrec2DMSu; // ERROR, no default + +#endif + +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); +} + +#ifdef GL_OES_shader_image_atomic +#extension GL_OES_shader_image_atomic : enable +#endif + +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 colorSampInBad; // ERROR, reserved + +#extension GL_OES_shader_multisample_interpolation : enable + +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/310AofA.vert b/3rdparty/bgfx/3rdparty/glslang/Test/310AofA.vert new file mode 100644 index 0000000..a196388 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/310AofA.vert @@ -0,0 +1,115 @@ +#version 310 es + +// Check name mangling of functions with parameters that are multi-dimensional arrays. + +#define NX 2 +#define NY 3 +#define NZ 4 +void f(bool a, float b, uint[4] c, int[NY][NX] d) { +} + +void main() { + int[NY][NX] d; + f(false, 12.1, uint[NZ](uint(0),uint(1),uint(1),uint(2)), d); +} + +buffer b { + float u[]; // ERROR + vec4 v[]; +} name[3]; + +uniform ub { + float u; + vec4 v[]; // ERROR +} uname[3]; + +buffer b2 { + float u; + vec4 v[][]; // ERROR +} name2[3]; + +buffer b3 { + float u; + vec4 v[][7]; +} name3[3]; + +// General arrays of arrays + +float[4][5][6] many[1][2][3]; + +float gu[][7]; // ERROR, size required +float g4[4][7]; +float g5[5][7]; + +float[4][7] foo(float a[5][7]) +{ + float r[7]; + r = a[2]; + float[](a[0], a[1], r, a[3]); // ERROR, too few dims + float[4][7][4](a[0], a[1], r, a[3]); // ERROR, too many dims + return float[4][7](a[0], a[1], r, a[3]); + return float[][](a[0], a[1], r, a[3]); + return float[][7](a[0], a[1], a[2], a[3]); +} + +void bar(float[5][7]) {} + +void foo2() +{ + { + float gu[3][4][2]; + + gu[2][4][1] = 4.0; // ERROR, overflow + } + vec4 ca4[3][2] = vec4[][](vec4[2](vec4(0.0), vec4(1.0)), + vec4[2](vec4(0.0), vec4(1.0)), + vec4[2](vec4(0.0), vec4(1.0))); + vec4 caim[][2] = vec4[][](vec4[2](vec4(4.0), vec4(2.0)), + vec4[2](vec4(4.0), vec4(2.0)), + vec4[2](vec4(4.0), vec4(2.0))); + vec4 caim2[][] = vec4[][](vec4[2](vec4(4.0), vec4(2.0)), + vec4[2](vec4(4.0), vec4(2.0)), + vec4[2](vec4(4.0), vec4(2.0))); + vec4 caim3[3][] = vec4[][](vec4[2](vec4(4.0), vec4(2.0)), + vec4[2](vec4(4.0), vec4(2.0)), + vec4[2](vec4(4.0), vec4(2.0))); + + g4 = foo(g5); + g5 = g4; // ERROR, wrong types + gu = g4; // ERROR, not yet sized + + foo(gu); // ERROR, not yet sized + bar(g5); + + if (foo(g5) == g4) + ; + if (foo(g5) == g5) // ERROR, different types + ; + + float u[5][7]; + u[5][2] = 5.0; // ERROR + foo(u); + + vec4 badAss[3]; + name[1].v[-1]; // ERROR + name[1].v[1] = vec4(4.3); + name[1].v = badAss; // ERROR, bad assignemnt + + name3[0].v[1].length(); // 7 + name3[0].v.length(); // run time +} + +struct badS { + int sa[]; // ERROR + int a[][]; // ERROR + int b[][2]; // ERROR + int c[2][]; // ERROR + int d[][4]; // ERROR +}; + +in float inArray[2][3]; // ERROR +out float outArray[2][3]; // ERROR + +uniform ubaa { + int a; +} ubaaname[2][3]; // ERROR diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/310implicitSizeArrayError.vert b/3rdparty/bgfx/3rdparty/glslang/Test/310implicitSizeArrayError.vert new file mode 100644 index 0000000..72c403e --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/310implicitSizeArrayError.vert @@ -0,0 +1,8 @@ +#version 310 es +layout (location=0) uniform Block { + highp int a[]; +} uni; +layout (location=0) out highp int o; +void main() { + o = uni.a[2]; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/330.frag b/3rdparty/bgfx/3rdparty/glslang/Test/330.frag new file mode 100644 index 0000000..9afa8f8 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/330.frag @@ -0,0 +1,152 @@ +#version 330 compatibility + +in vec4 inVar; +layout(location=0, index=0) out vec4 outVar; + +varying vec4 varyingVar; + +void main() +{ + gl_FragColor = varyingVar; // link ERROR: user output was used + gl_FragData[1] = inVar; // link ERROR: user output was used + int buffer = 4; +} + +#extension GL_ARB_separate_shader_objects : enable + +in gl_PerFragment { + vec4 gl_Color; +}; + +void foo() +{ + vec4 c = gl_Color; + outVar = inVar; +} + +in gl_block { // ERROR + int gl_i; +} gl_name; + +in myBlock { + int gl_i; // ERROR +} gl_name; // ERROR + +in gl_PerVertex { // ERROR + vec4 gl_FragCoord; +} gl_in[]; + +in gl_PerVertex { // ERROR + vec4 gl_FragCoord; +}; // ERROR + +const int start = 6; +layout(location = -2) in vec4 v1; // ERROR +layout(location = start + 2) in vec4 v2; // ERROR +layout(location = 4.7e10) in vec4 v20; // ERROR +layout(location = +60) in float v21; // ERROR +layout(location = (2)) in float v22; // ERROR + +struct S { + float f1; + layout(location = 3) float f2; // ERROR +}; + +layout(location = 1) in inblock { // ERROR + float f1; + layout(location = 3) float f2; // ERROR +}; + +layout(location = 1) uniform ublock { // ERROR + float f1; + layout(location = 3) float f2; // ERROR +} uinst; + +#extension GL_ARB_enhanced_layouts : enable + +layout(location = start) in vec4 v3; +layout(location = -2) in vec4 v4; // ERROR +layout(location = -start) in vec4 v5; // ERROR +layout(location = start*start - 2 - 4) in vec4 v6; +layout(location = +61) in float v23; +layout(location = (62)) in float v24; + +struct S2 { + float f1; + layout(location = 3) float f2; // ERROR +}; + +layout(location = 28) in inblock2 { + bool b1; + float f1; + layout(location = 25) float f2; + vec4 f3; + layout(location = 21) S2 s2; + vec4 f4; + vec4 f5; +} ininst2; + +layout(location = 13) uniform ublock2 { // ERROR + float f1; + layout(location = 3) float f2; // ERROR +} uinst2; + +in inblock3 { // ERROR, mix of location internal with no location external + float f1; + layout(location = 40) float f2; +} in3; + +in ublock4 { + layout(location = 50) float f1; + layout(location = 51) float f2; +} in4; + +layout(location = 33) in struct SS { + vec3 a; // gets location 33 + mat2 b; // gets locations 34 and 35 + vec4 c[2]; // gets locations 36 and 37 + layout (location = 38) vec2 A; // ERROR, can't use on struct member +} s; + +layout(location = 44) in block { + vec4 d; // gets location 44 + vec4 e; // gets location 45 + layout(location = 47) vec4 f; // gets location 47 + vec4 g; // gets location 48 + layout (location = 41) vec4 h; // gets location 41 + vec4 i; // gets location 42 + vec4 j; // gets location 43 + vec4 k; // ERROR, location 44 already used +}; + +layout(index=0) out vec4 outVar2; // ERROR: missing explicit location +layout(location=0, index=1) out vec4 outVar3; // no error even though location is overlapping +layout(location=0, index=1) out vec4 outVar4; // ERROR overlapping +layout(location=27, index=0) in vec4 indexIn; // ERROR, not on in +layout(location=0, index=0) in; // ERROR, not just on in +layout(location=0, index=0) out; // ERROR, need a variable +layout(location=26, index=0) out indexBlock { int a; } indexBlockI; // ERROR, not on a block + +uniform sampler1D samp1D; +uniform sampler2DShadow samp2Ds; + +void qlod() +{ + vec2 lod; + float pf; + vec2 pf2; + vec3 pf3; + + lod = textureQueryLod(samp1D, pf); // ERROR, not until 400 + lod = textureQueryLod(samp2Ds, pf2); // ERROR, not until 400 +} + +int precise; // okay, not a keyword yet +struct SKeyMem { int precise; } KeyMem; // okay, not a keyword yet + +void fooKeyMem() +{ + KeyMem.precise; +} + +layout(location=28, index=2) out vec4 outIndex2; // ERROR index out of range \ No newline at end of file diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/330comp.frag b/3rdparty/bgfx/3rdparty/glslang/Test/330comp.frag new file mode 100644 index 0000000..50b037d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/330comp.frag @@ -0,0 +1,12 @@ +#version 330 compatibility + +in vec4 inVar; +out vec4 outVar; + +varying vec4 varyingVar; + +void main() +{ + gl_FragColor = varyingVar; + gl_FragData[1] = inVar * gl_ModelViewMatrix; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/400.frag b/3rdparty/bgfx/3rdparty/glslang/Test/400.frag new file mode 100644 index 0000000..b7460b4 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/400.frag @@ -0,0 +1,197 @@ +#version 400 core + +in vec2 c2D; +flat in int i; +out vec4 outp; +uniform sampler2D arrayedSampler[5]; +uniform usampler2DRect samp2dr; +uniform isampler2DArray isamp2DA; + +void main() +{ + vec4 v; + v = texture(arrayedSampler[i], c2D); + outp.x = gl_ClipDistance[1]; + + ivec2 offsets[4]; + const ivec2 constOffsets[4] = ivec2[4](ivec2(1,2), ivec2(3,4), ivec2(15,16), ivec2(-2,0)); + uvec4 uv4 = textureGatherOffsets(samp2dr, c2D, offsets, 2); // ERROR, offsets not constant + uv4 = textureGatherOffsets(samp2dr, c2D, constOffsets, 2); + vec4 v4 = textureGather(arrayedSampler[0], c2D); + ivec4 iv4 = textureGatherOffset(isamp2DA, vec3(0.1), ivec2(1), 3); + iv4 = textureGatherOffset(isamp2DA, vec3(0.1), ivec2(1), i); // ERROR, last argument not const + iv4 = textureGatherOffset(isamp2DA, vec3(0.1), ivec2(1), 4); // ERROR, last argument out of range + iv4 = textureGatherOffset(isamp2DA, vec3(0.1), ivec2(1), 1+2); + iv4 = textureGatherOffset(isamp2DA, vec3(0.1), ivec2(i)); + + vec4 c = gl_FragCoord; +} + +layout(location = 4) in vec4 vl; // ERROR, not supported + +#ifdef GL_ARB_separate_shader_objects +#extension GL_ARB_separate_shader_objects : enable +#endif + +layout(location = 6) in vec4 vl2; + +layout(location = 3) uniform vec3 uv3; + +layout(location = 5) in vec4 gl_Color; // ERROR, layout +noperspective in float gl_ClipDistance[4]; // ERROR, can't change qualifier + +layout(origin_upper_left, pixel_center_integer) in vec4 gl_FragCoord; // ERROR, declared after use + +uniform sampler2DRectShadow u2drs; + +void foo23() +{ + const ivec2[3] offsets = ivec2[3](ivec2(1,2), ivec2(3,4), ivec2(15,16)); + + textureProjGradOffset(u2drs, outp, vec2(0.0), vec2(0.0), ivec2(c2D)); // ERROR, offset not constant + textureProjGradOffset(u2drs, outp, vec2(0.0), vec2(0.0), offsets[1]); + textureProjGradOffset(u2drs, outp, vec2(0.0), vec2(0.0), offsets[2]); // ERROR, offset out of range + textureProjGradOffset(u2drs, outp, vec2(0.0), vec2(0.0), ivec2(-10, 20)); // ERROR, offset out of range +} + +patch in vec4 patchIn; // ERROR +patch out vec4 patchOut; // ERROR + +void foo24() +{ + dvec3 df, di; + df = modf(dvec3(outp.xyz), di); +} + +in float in1; +in vec2 in2; +in vec3 in3; +in vec4 in4; + +void foodc1() +{ + vec2 v2 = dFdxFine(in2); // ERROR + vec3 v3 = dFdyCoarse(in3); // ERROR + vec4 v4 = fwidthCoarse(in4) + fwidthFine(in4); // ERROR +} + +#extension GL_ARB_derivative_control : enable + +void foodc2() +{ + vec2 v2 = dFdxFine(in2); + vec3 v3 = dFdyCoarse(in3); + vec4 v4 = fwidthCoarse(in4) + fwidthFine(in4); + + uint u1; + ivec3 i3; + ivec2 i2; + v2 = frexp(v2, i2); + v3 = ldexp(v3, i3); + + u1 = packUnorm4x8(v4); + u1 = packSnorm4x8(v4); + v4 = unpackUnorm4x8(u1); + v4 = unpackSnorm4x8(u1); + + double d; + uvec2 u2; + d = packDouble2x32(u2); + u2 = unpackDouble2x32(d); +} + +sample in vec4 colorSampIn; +sample out vec4 colorSampleBad; // ERROR +noperspective in vec4 colorfsi; +sample in vec3 sampInArray[4]; +smooth in float scalarIn; +flat centroid in vec2 colorfc; + +struct S { + float x; +}; + +in S s1; +sample S s2; + +void interp() +{ + interpolateAtCentroid(colorfc); + interpolateAtCentroid(colorSampIn); + interpolateAtCentroid(colorfsi); + interpolateAtCentroid(scalarIn); + interpolateAtCentroid(sampInArray); // ERROR + interpolateAtCentroid(sampInArray[2]); + interpolateAtCentroid(sampInArray[2].xy); // ERROR + + interpolateAtSample(sampInArray, 1); // ERROR + interpolateAtSample(sampInArray[i], 0); + interpolateAtSample(s1.x, 2); + interpolateAtSample(scalarIn, 1); + + interpolateAtOffset(sampInArray, vec2(0.2)); // ERROR + interpolateAtOffset(sampInArray[2], vec2(0.2)); + interpolateAtOffset(sampInArray[2].xy, vec2(0.2)); // ERROR, no swizzle + interpolateAtOffset(scalarIn + scalarIn, vec2(0.2)); // ERROR, no binary ops other than dereference + interpolateAtOffset(s2.x, vec2(0.2)); // ERROR + + float f; + interpolateAtCentroid(f); // ERROR, not interpolant + interpolateAtSample(outp, 0); // ERROR, not interpolant +} + +uniform sampler1D samp1D; +uniform isampler2D isamp2D; +uniform usampler3D usamp3D; +uniform samplerCube sampCube; +uniform isampler1DArray isamp1DA; +uniform usampler2DArray usamp2DA; +uniform isamplerCubeArray isampCubeA; + +uniform sampler1DShadow samp1Ds; +uniform sampler2DShadow samp2Ds; +uniform samplerCubeShadow sampCubes; +uniform sampler1DArrayShadow samp1DAs; +uniform sampler2DArrayShadow samp2DAs; +uniform samplerCubeArrayShadow sampCubeAs; + +uniform samplerBuffer sampBuf; +uniform sampler2DRect sampRect; + +void qlod() +{ + vec2 lod; + float pf; + vec2 pf2; + vec3 pf3; + + lod = textureQueryLod(samp1D, pf); + lod = textureQueryLod(isamp2D, pf2); + lod = textureQueryLod(usamp3D, pf3); + lod = textureQueryLod(sampCube, pf3); + lod = textureQueryLod(isamp1DA, pf); + lod = textureQueryLod(usamp2DA, pf2); + lod = textureQueryLod(isampCubeA, pf3); + + lod = textureQueryLod(samp1Ds, pf); + lod = textureQueryLod(samp2Ds, pf2); + lod = textureQueryLod(sampCubes, pf3); + lod = textureQueryLod(samp1DAs, pf); + lod = textureQueryLod(samp2DAs, pf2); + lod = textureQueryLod(sampCubeAs, pf3); + + lod = textureQueryLod(sampBuf, pf); // ERROR + lod = textureQueryLod(sampRect, pf2); // ERROR +} + +struct SKeyMem { int precise; } KeyMem; // ERROR, keyword can't be a member + +uniform uint uu; +out int iout; + +void bitwiseConv() +{ + iout = uu & i; + iout += uu ^ i; + iout += i | uu; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/400.geom b/3rdparty/bgfx/3rdparty/glslang/Test/400.geom new file mode 100644 index 0000000..0b77e12 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/400.geom @@ -0,0 +1,330 @@ +#version 400 core + +void main() +{ + EmitStreamVertex(1); + EndStreamPrimitive(0); + EmitVertex(); + EndPrimitive(); + int id = gl_InvocationID; +} + +layout(invocations = 4) in outbn { int a; } bn[]; // ERROR, not on a block +layout(max_vertices = 127) out; +layout(invocations = 4) in; + +#extension GL_ARB_separate_shader_objects : enable + +in gl_PerVertex { // testing input arrays with a block redeclaration, see 420.geom for without + vec4 gl_Position; + layout(std140, location = 3) patch float gl_PointSize; // ERRORs... +} gl_in[]; + +void foo() +{ + gl_in.length(); // ERROR + gl_in[1].gl_Position; +} + +in vec4 color[]; +in vec4 color2[]; +in vec4 colorS[3]; +in vec4 colorBad[4]; + +void foo2() +{ + color.length(); // ERROR + colorS.length(); +} + +layout(triangles) in; // give ERROR just for colorBad + +in vec4 color[3]; +in vec4 color2[3]; +in vec4 colorbad2[2]; // ERROR + +void foo3() +{ + gl_in.length(); + color.length(); + color2.length(); + colorS.length(); +} + +layout(location = 4) in vec4 cva[3]; +layout(location = 5) in vec4 cvb[3]; +layout(location = 2) in mat3 cmc[3]; // ERROR, collision + +patch in vec4 patchIn[]; // ERROR +patch out vec4 patchOut; // ERROR + +in float scalar; // ERROR, no array + +layout(max_vertices = 127, invocations = 4) out; // ERROR +layout(invocations = 4, max_vertices = 127) in; // ERROR +layout(max_vertices = 127, invocations = 4) uniform; // 2 ERRORs + +in inblockscalar { + int a; +} inbls; // ERROR, not an array + +in inblocka { + int a; +} inbla[17]; // ERROR, wrong array size + +void bits() +{ + uvec2 u2; + u2 = uaddCarry(u2, u2, u2); + uint u1; + u1 = usubBorrow(u1, u1, u1); + uvec4 u4; + umulExtended(u4, u4, u4, u4); + ivec4 i4; + imulExtended(i4, i4, i4, i4); + int i1; + i1 = bitfieldExtract(i1, 4, 5); + uvec3 u3; + u3 = bitfieldExtract(u3, 4, 5); + ivec3 i3; + i3 = bitfieldInsert(i3, i3, 4, 5); + u1 = bitfieldInsert(u1, u1, 4, 5); + ivec2 i2; + i2 = bitfieldReverse(i2); + u4 = bitfieldReverse(u4); + i1 = bitCount(i1); + i3 = bitCount(u3); + i2 = findLSB(i2); + i4 = findLSB(u4); + i1 = findMSB(i1); + i2 = findMSB(u2); +} + +layout(location = 7, index = 1) out vec4 indexedOut; + +uniform sampler1D samp1D; +uniform sampler2DShadow samp2Ds; + +void qlod() +{ + vec2 lod; + float pf; + vec2 pf2; + vec3 pf3; + + lod = textureQueryLod(samp1D, pf); // ERROR, only in fragment + lod = textureQueryLod(samp2Ds, pf2); // ERROR, only in fragment +} + +void doubles() +{ + double doublev; + dvec2 dvec2v; + dvec3 dvec3v; + dvec4 dvec4v; + + bool boolv; + bvec2 bvec2v; + bvec3 bvec3v; + bvec4 bvec4v; + + doublev = sqrt(2.9); + dvec2v = sqrt(dvec2(2.7)); + dvec3v = sqrt(dvec3(2.0)); + dvec4v = sqrt(dvec4(2.1)); + + doublev += inversesqrt(doublev); + dvec2v += inversesqrt(dvec2v); + dvec3v += inversesqrt(dvec3v); + dvec4v += inversesqrt(dvec4v); + + doublev += abs(doublev); + dvec2v += abs(dvec2v); + dvec3v += abs(dvec3v); + dvec4v += abs(dvec4v); + + doublev += sign(doublev); + dvec2v += sign(dvec2v); + dvec3v += sign(dvec3v); + dvec4v += sign(dvec4v); + + doublev += floor(doublev); + dvec2v += floor(dvec2v); + dvec3v += floor(dvec3v); + dvec4v += floor(dvec4v); + + doublev += trunc(doublev); + dvec2v += trunc(dvec2v); + dvec3v += trunc(dvec3v); + dvec4v += trunc(dvec4v); + + doublev += round(doublev); + dvec2v += round(dvec2v); + dvec3v += round(dvec3v); + dvec4v += round(dvec4v); + + doublev += roundEven(doublev); + dvec2v += roundEven(dvec2v); + dvec3v += roundEven(dvec3v); + dvec4v += roundEven(dvec4v); + + doublev += ceil(doublev); + dvec2v += ceil(dvec2v); + dvec3v += ceil(dvec3v); + dvec4v += ceil(dvec4v); + + doublev += fract(doublev); + dvec2v += fract(dvec2v); + dvec3v += fract(dvec3v); + dvec4v += fract(dvec4v); + + doublev += mod(doublev, doublev); + dvec2v += mod(dvec2v, doublev); + dvec3v += mod(dvec3v, doublev); + dvec4v += mod(dvec4v, doublev); + dvec2v += mod(dvec2v, dvec2v); + dvec3v += mod(dvec3v, dvec3v); + dvec4v += mod(dvec4v, dvec4v); + + doublev += modf(doublev, doublev); + dvec2v += modf(dvec2v, dvec2v); + dvec3v += modf(dvec3v, dvec3v); + dvec4v += modf(dvec4v, dvec4v); + + doublev += min(doublev, doublev); + dvec2v += min(dvec2v, doublev); + dvec3v += min(dvec3v, doublev); + dvec4v += min(dvec4v, doublev); + dvec2v += min(dvec2v, dvec2v); + dvec3v += min(dvec3v, dvec3v); + dvec4v += min(dvec4v, dvec4v); + + doublev += max(doublev, doublev); + dvec2v += max(dvec2v, doublev); + dvec3v += max(dvec3v, doublev); + dvec4v += max(dvec4v, doublev); + dvec2v += max(dvec2v, dvec2v); + dvec3v += max(dvec3v, dvec3v); + dvec4v += max(dvec4v, dvec4v); + + doublev += clamp(doublev, doublev, doublev); + dvec2v += clamp(dvec2v, doublev, doublev); + dvec3v += clamp(dvec3v, doublev, doublev); + dvec4v += clamp(dvec4v, doublev, doublev); + dvec2v += clamp(dvec2v, dvec2v, dvec2v); + dvec3v += clamp(dvec3v, dvec3v, dvec3v); + dvec4v += clamp(dvec4v, dvec4v, dvec4v); + + doublev += mix(doublev, doublev, doublev); + dvec2v += mix(dvec2v, dvec2v, doublev); + dvec3v += mix(dvec3v, dvec3v, doublev); + dvec4v += mix(dvec4v, dvec4v, doublev); + dvec2v += mix(dvec2v, dvec2v, dvec2v); + dvec3v += mix(dvec3v, dvec3v, dvec3v); + dvec4v += mix(dvec4v, dvec4v, dvec4v); + doublev += mix(doublev, doublev, boolv); + dvec2v += mix(dvec2v, dvec2v, bvec2v); + dvec3v += mix(dvec3v, dvec3v, bvec3v); + dvec4v += mix(dvec4v, dvec4v, bvec4v); + + doublev += step(doublev, doublev); + dvec2v += step(dvec2v, dvec2v); + dvec3v += step(dvec3v, dvec3v); + dvec4v += step(dvec4v, dvec4v); + dvec2v += step(doublev, dvec2v); + dvec3v += step(doublev, dvec3v); + dvec4v += step(doublev, dvec4v); + + doublev += smoothstep(doublev, doublev, doublev); + dvec2v += smoothstep(dvec2v, dvec2v, dvec2v); + dvec3v += smoothstep(dvec3v, dvec3v, dvec3v); + dvec4v += smoothstep(dvec4v, dvec4v, dvec4v); + dvec2v += smoothstep(doublev, doublev, dvec2v); + dvec3v += smoothstep(doublev, doublev, dvec3v); + dvec4v += smoothstep(doublev, doublev, dvec4v); + + boolv = isnan(doublev); + bvec2v = isnan(dvec2v); + bvec3v = isnan(dvec3v); + bvec4v = isnan(dvec4v); + + boolv = boolv ? isinf(doublev) : false; + bvec2v = boolv ? isinf(dvec2v) : bvec2(false); + bvec3v = boolv ? isinf(dvec3v) : bvec3(false); + bvec4v = boolv ? isinf(dvec4v) : bvec4(false); + + doublev += length(doublev); + doublev += length(dvec2v); + doublev += length(dvec3v); + doublev += length(dvec4v); + + doublev += distance(doublev, doublev); + doublev += distance(dvec2v, dvec2v); + doublev += distance(dvec3v, dvec3v); + doublev += distance(dvec4v, dvec4v); + + doublev += dot(doublev, doublev); + doublev += dot(dvec2v, dvec2v); + doublev += dot(dvec3v, dvec3v); + doublev += dot(dvec4v, dvec4v); + + dvec3v += cross(dvec3v, dvec3v); + + doublev += normalize(doublev); + dvec2v += normalize(dvec2v); + dvec3v += normalize(dvec3v); + dvec4v += normalize(dvec4v); + + doublev += faceforward(doublev, doublev, doublev); + dvec2v += faceforward(dvec2v, dvec2v, dvec2v); + dvec3v += faceforward(dvec3v, dvec3v, dvec3v); + dvec4v += faceforward(dvec4v, dvec4v, dvec4v); + + doublev += reflect(doublev, doublev); + dvec2v += reflect(dvec2v, dvec2v); + dvec3v += reflect(dvec3v, dvec3v); + dvec4v += reflect(dvec4v, dvec4v); + + doublev += refract(doublev, doublev, doublev); + dvec2v += refract(dvec2v, dvec2v, doublev); + dvec3v += refract(dvec3v, dvec3v, doublev); + dvec4v += refract(dvec4v, dvec4v, doublev); + + dmat2 dmat2v = outerProduct(dvec2v, dvec2v); + dmat3 dmat3v = outerProduct(dvec3v, dvec3v); + dmat4 dmat4v = outerProduct(dvec4v, dvec4v); + dmat2x3 dmat2x3v = outerProduct(dvec3v, dvec2v); + dmat3x2 dmat3x2v = outerProduct(dvec2v, dvec3v); + dmat2x4 dmat2x4v = outerProduct(dvec4v, dvec2v); + dmat4x2 dmat4x2v = outerProduct(dvec2v, dvec4v); + dmat3x4 dmat3x4v = outerProduct(dvec4v, dvec3v); + dmat4x3 dmat4x3v = outerProduct(dvec3v, dvec4v); + + dmat2v *= matrixCompMult(dmat2v, dmat2v); + dmat3v *= matrixCompMult(dmat3v, dmat3v); + dmat4v *= matrixCompMult(dmat4v, dmat4v); + dmat2x3v = matrixCompMult(dmat2x3v, dmat2x3v); + dmat2x4v = matrixCompMult(dmat2x4v, dmat2x4v); + dmat3x2v = matrixCompMult(dmat3x2v, dmat3x2v); + dmat3x4v = matrixCompMult(dmat3x4v, dmat3x4v); + dmat4x2v = matrixCompMult(dmat4x2v, dmat4x2v); + dmat4x3v = matrixCompMult(dmat4x3v, dmat4x3v); + + dmat2v *= transpose(dmat2v); + dmat3v *= transpose(dmat3v); + dmat4v *= transpose(dmat4v); + dmat2x3v = transpose(dmat3x2v); + dmat3x2v = transpose(dmat2x3v); + dmat2x4v = transpose(dmat4x2v); + dmat4x2v = transpose(dmat2x4v); + dmat3x4v = transpose(dmat4x3v); + dmat4x3v = transpose(dmat3x4v); + + doublev += determinant(dmat2v); + doublev += determinant(dmat3v); + doublev += determinant(dmat4v); + + dmat2v *= inverse(dmat2v); + dmat3v *= inverse(dmat3v); + dmat4v *= inverse(dmat4v); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/400.tesc b/3rdparty/bgfx/3rdparty/glslang/Test/400.tesc new file mode 100644 index 0000000..415d7f7 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/400.tesc @@ -0,0 +1,125 @@ +#version 400 core + +layout(vertices = 4) 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; + float cd = gl_in[1].gl_ClipDistance[2]; + + 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; + gl_out[gl_InvocationID].gl_ClipDistance[1] = cd; + + 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 +layout(vertices = 5) out; // ERROR + +void foo() +{ + gl_out[4].gl_PointSize; // ERROR + + barrier(); // ERROR +} + +in vec2 ina; // ERROR, not array +in vec2 inb[]; +in vec2 inc[18]; // ERROR, wrong size +in vec2 ind[gl_MaxPatchVertices]; + +#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 + +precise vec3 pv3; + +void foop() +{ + precise double d; + + pv3 *= pv3; + pv3 = fma(pv3, pv3, pv3); + d = fma(d, d, d); +} + +patch out pinbn { + int a; +} pinbi; + +invariant precise out vec4 badOrder[]; // ERROR, precise must appear first +void badp(out precise float f); // ERROR, precise must appear first + +void devi() +{ + gl_DeviceIndex; // ERROR, no extension + gl_ViewIndex; // ERROR, no extension +} + +#ifdef GL_EXT_device_group +#extension GL_EXT_device_group : enable +#endif + +#ifdef GL_EXT_device_group +#extension GL_EXT_multiview : enable +#endif + +void devie() +{ + gl_DeviceIndex; + gl_ViewIndex; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/400.tese b/3rdparty/bgfx/3rdparty/glslang/Test/400.tese new file mode 100644 index 0000000..aea4546 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/400.tese @@ -0,0 +1,125 @@ +#version 400 core + +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; + float cd = gl_in[1].gl_ClipDistance[2]; + + 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; + gl_ClipDistance[2] = cd; +} + +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 +{ + float gl_ClipDistance[1]; +} gl_in[]; + +in gl_PerVertex // ERROR, second redeclaration of gl_in +{ + float gl_ClipDistance[1]; +} 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 { + int f; +} bla; // ERROR, not array + +in testblb { + int f; +} blb[]; + +in testblc { + int f; +} blc[18]; // ERROR wrong size + +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 + +layout(location = 23) out vec4 ovla[2]; +layout(location = 24) out vec4 ovlb[2]; // ERROR + +in float gl_TessLevelOuter[4]; // ERROR, can't redeclare + +patch in pinbn { + int a; +} pinbi; + +void devi() +{ + gl_DeviceIndex; // ERROR, no extension + gl_ViewIndex; // ERROR, no extension +} + +#ifdef GL_EXT_device_group +#extension GL_EXT_device_group : enable +#endif + +#ifdef GL_EXT_device_group +#extension GL_EXT_multiview : enable +#endif + +void devie() +{ + gl_DeviceIndex; + gl_ViewIndex; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/400.vert b/3rdparty/bgfx/3rdparty/glslang/Test/400.vert new file mode 100644 index 0000000..315c7ea --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/400.vert @@ -0,0 +1,106 @@ +#version 400 core + +in double d; // ERROR, no doubles +in dvec3 d3; // ERROR, no doubles +in dmat4 dm4; // ERROR, no doubles + +// function selection under type conversion +void foo1(double a, uint b) {} +void foo1(double a, int b) {} +void foo1(double a, float b) {} +void foo1(double a, double b){} + +void foo2(double a, float b) {} +void foo2(double a, double b){} + +void foo3(double a, float b) {} +void foo3(float a, double b) {} + +void ftd( int, float, double) {} +void ftd( uint, float, double) {} +void ftd(float, double, double) {} + +void main() +{ + double d; + uint u; + int i; + float f; + + foo1(d, d); + foo1(d, u); + foo1(d, i); + foo1(d, f); + + foo1(f, d); + foo1(f, u); + foo1(f, i); + foo1(f, f); + + foo1(u, d); + foo1(u, u); + foo1(u, i); + foo1(u, f); + + foo1(i, d); + foo1(i, u); + foo1(i, i); + foo1(i, f); + + foo2(d, d); + foo2(d, u); + foo2(d, i); + foo2(d, f); + + foo2(f, d); + foo2(f, u); + foo2(f, i); + foo2(f, f); + + foo2(u, d); + foo2(u, u); + foo2(u, i); + foo2(u, f); + + foo2(i, d); + foo2(i, u); + foo2(i, i); + foo2(i, f); + + foo3(d, d); // ERROR, no match + foo3(d, u); + foo3(d, i); + foo3(d, f); + + foo3(f, d); + foo3(f, u); // ERROR, ambiguous + foo3(f, i); // ERROR, ambiguous + foo3(f, f); // ERROR, ambiguous + + foo3(u, d); + foo3(u, u); // ERROR, ambiguous + foo3(u, i); // ERROR, ambiguous + foo3(u, f); // ERROR, ambiguous + + foo3(i, d); + foo3(i, u); // ERROR, ambiguous + foo3(i, i); // ERROR, ambiguous + foo3(i, f); // ERROR, ambiguous + + ftd(i, f, f); + ftd(u, f, f); +} + +void itf(int, float, int); +void itf(int, double, int); + +void tf() +{ + double d; + uint u; + int i; + float f; + + itf(i, i, i); + itf(i, u, i); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/410.geom b/3rdparty/bgfx/3rdparty/glslang/Test/410.geom new file mode 100644 index 0000000..8775aeb --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/410.geom @@ -0,0 +1,39 @@ +#version 410 core + +void main() +{ + gl_ViewportIndex = 7; +} + +in gl_PerVertex { + float gl_PointSize; +} myIn[]; // ERROR, can't redeclare a different name + +in gl_PerVertex { + float gl_PointSize; +} gl_myIn[]; // ERROR, can't redeclare a different name + +in gl_PerVertex { + float gl_PointSize; +} gl_in[]; + +in gl_PerVertex { + float gl_PointSize; +} gl_in[]; // ERROR, can't do it again + +out gl_PerVertex { + float gl_PointSize; +}; + +void foo() +{ + float p = gl_in[1].gl_PointSize; // use of redeclared + gl_PointSize = p; // use of redeclared + vec4 v = gl_in[1].gl_Position; // ERROR, not included in the redeclaration + gl_Position = vec4(1.0); // ERROR, not included in the redeclaration +} + +float foo5() +{ + return 4; // implicit conversion of return type +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/410.tesc b/3rdparty/bgfx/3rdparty/glslang/Test/410.tesc new file mode 100644 index 0000000..d96a270 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/410.tesc @@ -0,0 +1,11 @@ +#version 400 core + +// no layout(vertices = ...) out; +int outa[gl_out.length()]; // ERROR + +patch out vec4 patchOut; + +void main() +{ + +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/410.vert b/3rdparty/bgfx/3rdparty/glslang/Test/410.vert new file mode 100644 index 0000000..0ecf476 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/410.vert @@ -0,0 +1,9 @@ +#version 410 core + +in double d; +in dvec3 d3; +in dmat4 dm4; + +void main() +{ +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/420.comp b/3rdparty/bgfx/3rdparty/glslang/Test/420.comp new file mode 100755 index 0000000..d92e6f0 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/420.comp @@ -0,0 +1,30 @@ +#version 420 + +layout(local_size_x = 2) in; // ERROR, no compute + +#extension GL_ARB_compute_shader : enable + +layout(local_size_x = 2, local_size_y = 4, local_size_z = 6) in; + +shared vec3 sfoo; + +void main() +{ + sfoo = vec3(gl_WorkGroupSize.x, gl_WorkGroupSize.y, gl_WorkGroupSize.z); + sfoo += gl_WorkGroupSize + gl_NumWorkGroups + gl_WorkGroupID + gl_LocalInvocationID + gl_GlobalInvocationID; + sfoo *= gl_LocalInvocationIndex; + sfoo += gl_MaxComputeWorkGroupCount + gl_MaxComputeWorkGroupSize; + sfoo *= gl_MaxComputeUniformComponents + + gl_MaxComputeTextureImageUnits + + gl_MaxComputeImageUniforms + + gl_MaxComputeAtomicCounters + + gl_MaxComputeAtomicCounterBuffers; + + barrier(); + memoryBarrier(); + memoryBarrierAtomicCounter(); + memoryBarrierBuffer(); + memoryBarrierImage(); + memoryBarrierShared(); + groupMemoryBarrier(); +} \ No newline at end of file diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/420.frag b/3rdparty/bgfx/3rdparty/glslang/Test/420.frag new file mode 100644 index 0000000..1444758 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/420.frag @@ -0,0 +1,14 @@ +#version 420 core + +layout(depth_any) out float gl_FragDepth; +layout(depth_greater) out float gl_FragDepth; // ERROR: redeclaration with different qualifier + +void main() +{ + gl_FragDepth = 0.3; +} + +layout(depth_less) in float depth; // ERROR: depth_less only applies to gl_FragDepth +layout(depth_any) out float gl_FragDepth; // ERROR, done after use + +layout(binding=0) uniform atomic_uint a[]; diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/420.geom b/3rdparty/bgfx/3rdparty/glslang/Test/420.geom new file mode 100644 index 0000000..43903bc --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/420.geom @@ -0,0 +1,55 @@ +#version 420 core + +// testing input arrays without a gl_in[] block redeclaration, see 400.geom for with + +int i; + +void foo() +{ + gl_in.length(); // ERROR + gl_in[1].gl_Position; + gl_in[i].gl_Position; // ERROR +} + +layout(triangles) in; + +in vec4 color3[3]; + +void foo3() +{ + gl_in.length(); + gl_in[i].gl_Position; + color3.length(); +} + +uniform sampler2D s2D; +in vec2 coord[]; +uniform vec4 v4; + +void foo4() +{ + const ivec2 offsets[5] = + { + ivec2(0,1), + ivec2(1,-2), + ivec2(0,3), + ivec2(-3,0), + ivec2(2,1) + }; + + vec4 v = textureGatherOffset(s2D, coord[0], offsets[i].xy); + + offsets[i].xy = ivec2(3); // ERROR + v4.x = 3.2; // ERROR + v4.xy; // should have non-uniform type +} + +out gl_PerVertex { + float gl_PointSize[1]; // ERROR, adding array + float gl_ClipDistance; // ERROR, removing array +}; + +float foo5() +{ + return i; // implicit conversion of return type +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/420.tesc b/3rdparty/bgfx/3rdparty/glslang/Test/420.tesc new file mode 100644 index 0000000..b9fd21c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/420.tesc @@ -0,0 +1,43 @@ +#version 420 core + +#extension GL_ARB_separate_shader_objects : enable + +layout(vertices = 4) out; + +out gl_PerVertex { + vec4 gl_Position; +} gl_out[3]; // ERROR, wrong size + +out int a[gl_out.length()]; +out int outb[5]; // ERROR, wrong size +out int outc[]; + +void main() +{ + vec4 p = gl_in[1].gl_Position; + float ps = gl_in[1].gl_PointSize; + float cd = gl_in[1].gl_ClipDistance[2]; + + 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 +} + +out float outf; // ERROR, no array + +layout (location = 0) in dmat2x4 vs_tcs_first[]; +layout (location = 12) in dmat2x4 vs_tcs_last[]; + +void foo() +{ + if ((dmat2x4(dvec4(-0.625, -0.5, -0.375lf, -0.25), dvec4(-0.375, -0.25, -0.125, 0)) != vs_tcs_first[0]) || + (dmat2x4(dvec4(0.375, 0.5, 0.625, 0.75), dvec4(0.625, 0.75, 0.875, -0.625)) != vs_tcs_last[0])) + { + ; + } +} + +layout(vertices = 0) out; // ERROR, can't be 0 diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/420.tese b/3rdparty/bgfx/3rdparty/glslang/Test/420.tese new file mode 100644 index 0000000..4c3693a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/420.tese @@ -0,0 +1,90 @@ +#version 420 core + +const mat2x2 a = mat2( vec2( 1.0, 0.0 ), vec2( 0.0, 1.0 ) ); +mat2x2 b = { vec2( 1.0, 0.0 ), vec2( 0.0, 1.0 ) }; +const mat2x2 c = { { 1.0, 0.0, }, { 0.0, 1.0 } }; + +float a2[2] = { 3.4, 4.2, 5.0 }; // illegal +vec2 b2 = { 1.0, 2.0, 3.0 }; // illegal +mat3x3 c2 = { vec3(0.0), vec3(1.0), vec3(2.0), vec3(3.0) }; // illegal +mat2x2 d = { 1.0, 0.0, 0.0, 1.0 }; // illegal, can't flatten nesting + +struct { + float a; + int b; +} e = { 1.2, 2, }; + +struct { + float a; + int b; +} e2 = { 1, 3 }; // legal, first initializer is converted + +struct { + float a; + int b; +} e3 = { 1.2, 2, 3 }; // illegal + +int a3 = true; // illegal +vec4 b3[2] = { vec4(0.0), 1.0 }; // illegal +vec4 b4[2] = vec4[2](vec4(0.0), mat2x2(1.0)); // illegal +mat4x2 c3 = { vec3(0.0), vec3(1.0) }; // illegal + +struct S1 { + vec4 a; + vec4 b; +}; + +struct { + float s; + float t; +} d2[] = { S1(vec4(0.0), vec4(1.1)) }; // illegal + +float b5[] = { 3.4, 4.2, 5.0, 5.2, 1.1 }; + +struct S3 { + float f; + mat2x3 m23; +}; + +struct S4 { + uvec2 uv2; + S3 s[2]; +}; + +struct Single1 { int f; }; +Single1 single1 = { 10 }; + +struct Single2 { uvec2 v; }; +Single2 single2 = { { 1, 2 } }; + +struct Single3 { Single1 s1; }; +Single3 single3 = { { 3 } }; + +struct Single4 { Single2 s1; }; +Single4 single4 = { { { 4u, 5u } } }; + +const S4 constructed = S4(uvec2(1, 2), + S3[2](S3(3.0, mat2x3(4.0)), + S3(5.0, mat2x3(6.0)))); + +const S4 curlybad1 = { {1, 2}, + { {3, {4.0, 0, 0.0}, {0.0, 4.0, 0.0 } }, // ERROR, the mat2x3 isn't isolated + {5.0, {6, 0.0, 0.0}, {0.0, 6.0, 0.0 } } } }; + +const S4 curlyInit = { {1, 2}, + { {3, { {4.0, 0, 0.0}, {0.0, 4.0, 0.0 } } }, + {5.0, { {6, 0.0, 0.0}, {0.0, 6.0, 0.0 } } } } }; + +float vc1, vc2, vc3; +vec3 av3 = vec3(vc1, vc2, vc3); +vec3 bv3 = { vc1, vc2, vc3 }; + +void main() +{ + memoryBarrier(); + + if (constructed == curlybad1) + ; + if (constructed == curlyInit) + ; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/420.vert b/3rdparty/bgfx/3rdparty/glslang/Test/420.vert new file mode 100644 index 0000000..ab28140 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/420.vert @@ -0,0 +1,161 @@ +#version 420 core +#version 420 core +varying vec2 v2; // ERROR, varying reserved +in vec4 bad[10]; +highp in vec4 badorder; +out invariant vec4 badorder2; +in centroid vec4 badorder4; // ERROR, no centroid input to vertex stage +out flat vec4 badorder3; +void bar(in const float a); +void bar2(highp in float b); +smooth flat out vec4 rep; // ERROR, replicating interpolation qualification +centroid sample out vec4 rep2; // ERROR, replicating auxiliary qualification +in uniform vec4 rep3; // ERROR, replicating storage qualification + +int anonconst; +const int aconst = 5; +const int a = aconst; +const int b = anonconst; // ERROR at global scope + +const int foo() // ERROR, no const functions +{ + const int a = aconst; + const int b = anonconst; + const int c = a; // still compile-time const + const int d = b; // not a compile-time const + float x[c]; // okay + float y[d]; // ERROR + + return b; +} + +void main() +{ + int i; + if (i == 3) + int j = i; + else + int k = j; // ERROR, j is undeclared + int m = k; // ERROR, k is undeclared + int n = j; // ERROR, j is undeclared + + while (true) + int jj; + int kk = jj; // ERROR, jj is undeclared +} + +const float cx = 4.20; +const float dx = 4.20; + +void bar(in highp volatile vec4 v) +{ + int s; + s.x; // okay + s.y; // ERROR + if (bad[0].x == cx.x) + ; + if (cx.x == dx.x) + badorder3 = bad[0]; + + float f; + vec3 smeared = f.xxx; + f.xxxxx; // ERROR + f.xxy; // ERROR +} + +layout(binding = 3) uniform; // ERROR +layout(binding = 3) uniform boundblock { int aoeu; } boundInst; +layout(binding = 7) uniform anonblock { int aoeu; } ; +layout(location = 1) in; // ERROR +layout(binding = 1) in inblock { int aoeua; }; // ERROR +layout(binding = 100000) uniform anonblock2 { int aooeu; } ; +layout(binding = 4) uniform sampler2D sampb1; +layout(binding = 5) uniform sampler2D sampb2[10]; +layout(binding = 80) uniform sampler2D sampb3; // ERROR, binding too big +layout(binding = 31) uniform sampler2D sampb4; +layout(binding = 79) uniform sampler2D sampb5[2]; // ERROR, binding too big + +int fgfg(float f, mediump int i); +int fgfg(float f, highp int i); + +out gl_PerVertex { + float gl_ClipDistance[4]; +}; + +patch in vec4 patchIn; // ERROR +patch out vec4 patchOut; // ERROR + +void bar23444() +{ + mat4x3 m43; \ + float a1 = m43[3].y; + vec3 v3; + int a2 = m43.length(); + a2 += m43[1].length(); + a2 += v3.length(); + const float b = 2 * a1; + int a = gl_MinProgramTexelOffset + gl_MaxProgramTexelOffset; +} + +const int comma0 = (2, 3); // ERROR +int comma1[(2, 3)]; // ERROR + +layout(r32i) uniform iimage2D iimg2D; +layout(rgba32i) uniform iimage2D iimg2Drgba; +layout(rgba32f) uniform image2D img2Drgba; +layout(r32ui) uniform uimage2D uimg2D; +uniform image2DMS img2DMS; // ERROR image variables not declared writeonly must have format layout qualifier +uniform writeonly image2DMS img2DMSWO; +void qux() +{ + int i = aoeu; + imageAtomicCompSwap(iimg2D, ivec2(i,i), i, i); + imageAtomicAdd(uimg2D, ivec2(i,i), uint(i)); + imageAtomicMin(iimg2Drgba, ivec2(i,i), i); // ERROR iimg2Drgba does not have r32i layout + imageAtomicMax(img2Drgba, ivec2(i,i), i); // ERROR img2Drgba is not integer image + ivec4 pos = imageLoad(iimg2D, ivec2(i,i)); + vec4 col = imageLoad(img2DMS, ivec2(i,i), i); + imageStore(img2DMSWO, ivec2(i,i), i, vec4(0)); + imageLoad(img2DMSWO, ivec2(i,i), i); // ERROR, drops writeonly +} + +volatile float vol; // ERROR, not an image +readonly int vol2; // ERROR, not an image + +void passr(coherent readonly iimage2D image) +{ +} + +layout(r32i) coherent readonly uniform iimage2D qualim1; +layout(r32i) coherent volatile readonly uniform iimage2D qualim2; + +void passrc() +{ + passr(qualim1); + passr(qualim2); // ERROR, drops volatile + passr(iimg2D); +} + +layout(rg8i) uniform uimage2D i1bad; // ERROR, type mismatch +layout(rgba32i) uniform image2D i2bad; // ERROR, type mismatch +layout(rgba32f) uniform uimage2D i3bad; // ERROR, type mismatch +layout(r8_snorm) uniform iimage2D i4bad; // ERROR, type mismatch +layout(rgba32ui) uniform iimage2D i5bad; // ERROR, type mismatch +layout(r8ui) uniform iimage2D i6bad; // ERROR, type mismatch + +uniform offcheck { + layout(offset = 16) int foo; // ERROR +} offcheckI; + +uniform sampler1D samp1D; +uniform sampler1DShadow samp1Ds; + +void qlod() +{ + int levels; + + levels = textureQueryLevels(samp1D); // ERROR, not until 430 + levels = textureQueryLevels(samp1Ds); // ERROR, not until 430 +} + +layout(binding=0) writeonly uniform image1D badArray[]; diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/420_size_gl_in.geom b/3rdparty/bgfx/3rdparty/glslang/Test/420_size_gl_in.geom new file mode 100644 index 0000000..b709d5a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/420_size_gl_in.geom @@ -0,0 +1,21 @@ +#version 420 core + +// testing input arrays without a gl_in[] block redeclaration, see 400.geom for with + +int i; + +layout(triangles) in; +in vec4 colorun[]; +in vec4 color3[3]; + +void foo() +{ + gl_in.length(); + gl_in[1].gl_Position; + gl_in.length(); + gl_in[i].gl_Position; // should be sized to 3 by 'triangles' +} + +in gl_PerVertex { // ERROR, already used + vec4 gl_Position; +} gl_in[]; diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/430.comp b/3rdparty/bgfx/3rdparty/glslang/Test/430.comp new file mode 100644 index 0000000..0929432 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/430.comp @@ -0,0 +1,87 @@ +#version 430 core + +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; + +const int total = gl_MaxComputeWorkGroupCount.y + + gl_MaxComputeUniformComponents + + gl_MaxComputeTextureImageUnits + + gl_MaxComputeImageUniforms + + gl_MaxComputeAtomicCounters + + gl_MaxComputeAtomicCounterBuffers; + +buffer ShaderStorageBlock +{ + int value; + float values[]; +}; + +buffer InvalidShaderStorageBlock +{ + float values[]; + int value; +} invalid; + +void main() +{ + barrier(); + memoryBarrier(); + memoryBarrierAtomicCounter(); + memoryBarrierBuffer(); + memoryBarrierShared(); + memoryBarrierImage(); + groupMemoryBarrier(); + value = int(values[gl_LocalInvocationIndex]); + + int a; + if (a > 10) + barrier(); +} + +layout(location = 2) in vec3 v3; // ERROR +in float f; // ERROR +out float fo; // ERROR + +shared vec4 s; +layout(location = 2) shared vec4 sl; // ERROR +shared float fs = 4.2; // ERROR + +layout(local_size_x = 2, local_size_y = 3, local_size_z = 4) out; // ERROR + +int arrX[gl_WorkGroupSize.x]; +int arrY[gl_WorkGroupSize.y]; +int arrZ[gl_WorkGroupSize.z]; + +readonly buffer roblock +{ + int value; + float values[]; +} ro; + +void foo() +{ + ro.values[2] = 4.7; // ERROR, readonly + ro.values.length(); + barrier(); +} + +uniform double roll; +uniform writeonly image2D destTex; +void fooaoeu() { + ivec2 storePos = ivec2(gl_GlobalInvocationID.xy); + double localCoef = length(vec2(ivec2(gl_LocalInvocationID.xy)-8)/8.0); + dvec4 aa = dvec4(0.4, 0.2, 0.3, 0.4); + double globalCoef = 1.0; + int i = globalCoef; // ERROR, can't convert from double to int + double di = i; +} + +in inb { // ERROR + int a; +} inbi; + +out outb { // ERROR + int a; +} outbi; diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/430.vert b/3rdparty/bgfx/3rdparty/glslang/Test/430.vert new file mode 100644 index 0000000..84c3220 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/430.vert @@ -0,0 +1,223 @@ +#version 430 core + +layout(location = 3) vec4 v4; // ERROR + +layout(location = 4) uniform vec4 uv4; + +layout(location = 2) in inb1 { vec4 v; } b1; // ERROR +layout(location = 2) out outb1 { vec4 v; } b2; // ERROR + +out gl_PerVertex { + float gl_ClipDistance[]; +}; + +void foo() +{ + gl_ClipDistance[2] = 3.7; +} + +struct sp { + highp float f; + in float g; // ERROR + uniform float h; // ERROR + invariant float i; // ERROR + volatile float j; // ERROR + layout(row_major) mat3 m3; // ERROR +}; + +void foo3(invariant vec4 v4, // ERROR + volatile vec3 v3, + layout(location = 3) vec2 v2, // ERROR + centroid vec3 cv3) // ERROR +{ +} + +struct S { + mat3x2 m[7]; // needs 7*3 locations + float f; // needs 1 location +}; // needs 22 locations + +layout(location = 10) out S cs[2]; // 10 through 10 + 2 * 22 - 1 = 53 +layout(location = 54) out float cf; +layout(location = 53) out float cg; // ERROR, collision at 31 + +layout(location = 10) in vec4 alias1; +layout(location = 10) in vec4 alias2; // okay for vertex input on desktop + +out float gl_ClipDistance[17]; // ERROR, size too big + +// enhanced_layouts (most tests are in 440.*) + +layout(location = start*start - 2 - 4) in vec4 v6e; // ERROR + +layout(location = 28) in inblock2e { + layout(location = 25) float f2; // ERROR +} ininst2e; + +in ublock4e { + layout(location = 50) float f1; // ERROR + layout(location = 51) float f2; // ERROR +} in4e; + +layout(align=16, std140) uniform ubl4e { int a; } inst4e;// ERROR + +layout(align=32) uniform ubl9e { // ERROR + layout(offset=12, align=4) float f; // ERROR + layout(offset=20) float g; // ERROR +} inst9e; + +layout(std140) uniform blocke { + vec4 a; + layout(offset = 32) vec3 b; // ERROR +} spinste; + +int aconste[gl_MaxTransformFeedbackBuffers]; // ERROR +int bconste[gl_MaxTransformFeedbackInterleavedComponents]; // ERROR + +out bblck2 { + layout(xfb_offset=64) vec4 bbv; // ERROR +} bbinst2; + +layout(xfb_buffer = 3, xfb_stride = 64) out; // ERROR + +layout(xfb_buffer=2, xfb_offset=48, xfb_stride=80) out vec4 bge; // ERROR +layout( xfb_offset=32, xfb_stride=64) out vec4 bhe; // ERROR + +layout(xfb_stride=80, xfb_buffer=2, xfb_offset=16) out bblck4e { // ERROR + vec4 bbv1; + vec4 bbv2; +} bbinst4e; + +out bblck5e { + layout(xfb_offset=0) vec4 bbv1; // ERROR + layout(xfb_stride=64, xfb_buffer=3, xfb_offset=48) vec4 bbv2; // ERROR +} bbinst5e; + +#extension GL_ARB_enhanced_layouts : enable + +layout(align=16, std140) uniform ubl4 { int a; } inst4; +layout(std430) uniform; + +layout(align=32) uniform ubl9 { + layout(offset=12, align=4) float f; + layout(offset=20) float g; +} inst9; + +layout(std140) uniform block { + vec4 a; // a takes offsets 0-15 + layout(offset = 32) vec3 b; // b takes offsets 32-43 +} spinst; + +int aconst[gl_MaxTransformFeedbackBuffers]; +int bconst[gl_MaxTransformFeedbackInterleavedComponents]; + +const int start2 = 5; +layout(location = start2 * start2 - 2 - 4) in vec4 v6; + +layout(location = 28) in inblock2 { // ERROR, input block in vertex shader, other errors are valid checks still... + bool b1; + float f1; + layout(location = 25) float f2; +} ininst2; + +in ublock4 { // ERROR, input block in vertex shader, other errors are valid checks still... + layout(location = 50) float f1; + layout(location = 51) float f2; +} in4; + +out bblck2g { + layout(xfb_offset=64) vec4 bbv; +} bbinst2g; + +layout(xfb_buffer = 1, xfb_stride = 80) out; // default buffer is 3 + +layout(xfb_buffer=1, xfb_offset=48, xfb_stride=80) out vec4 bg; +layout( xfb_offset=32, xfb_stride=80) out vec4 bh; + +layout(xfb_stride=80, xfb_buffer=1, xfb_offset=16) out bblck4 { + vec4 bbv1; +} bbinst4; + +out bblck5 { + layout(xfb_offset=0) vec4 bbv1; + layout(xfb_stride=80, xfb_buffer=1, xfb_offset=64) vec4 bbv2; +} bbinst5; + +shared vec4 sharedv; // ERROR + +void fooBarrier() +{ + barrier(); // ERROR + memoryBarrier(); + memoryBarrierAtomicCounter(); + memoryBarrierBuffer(); + memoryBarrierShared(); // ERROR + memoryBarrierImage(); + groupMemoryBarrier(); // ERROR +} + +buffer vec4 v; // ERROR + +uniform sampler2DMS s2dms; +uniform usampler2DMSArray us2dmsa; +layout(rgba32i) uniform iimage2DMS ii2dms; +layout(rgba32f) uniform image2DMSArray i2dmsa; + +void fooq() +{ + int s = textureSamples(s2dms); // ERROR + s += textureSamples(us2dmsa); // ERROR + s += imageSamples(ii2dms); // ERROR + s += imageSamples(i2dmsa); // ERROR +} + +#extension GL_ARB_shader_texture_image_samples : enable + +void fooq2() +{ + int s = textureSamples(s2dms); + s += textureSamples(us2dmsa); + s += imageSamples(ii2dms); + s += imageSamples(i2dmsa); +} + +uniform sampler1D samp1D; +uniform usampler2D usamp2D; +uniform isampler3D isamp3D; +uniform isamplerCube isampCube; +uniform isampler1DArray isamp1DA; +uniform sampler2DArray samp2DA; +uniform usamplerCubeArray usampCubeA; + +uniform sampler1DShadow samp1Ds; +uniform sampler2DShadow samp2Ds; +uniform samplerCubeShadow sampCubes; +uniform sampler1DArrayShadow samp1DAs; +uniform sampler2DArrayShadow samp2DAs; +uniform samplerCubeArrayShadow sampCubeAs; + +uniform samplerBuffer sampBuf; +uniform sampler2DRect sampRect; + +void qlod() +{ + int levels; + + levels = textureQueryLevels(samp1D); + levels = textureQueryLevels(usamp2D); + levels = textureQueryLevels(isamp3D); + levels = textureQueryLevels(isampCube); + levels = textureQueryLevels(isamp1DA); + levels = textureQueryLevels(samp2DA); + levels = textureQueryLevels(usampCubeA); + + levels = textureQueryLevels(samp1Ds); + levels = textureQueryLevels(samp2Ds); + levels = textureQueryLevels(sampCubes); + levels = textureQueryLevels(samp1DAs); + levels = textureQueryLevels(samp2DAs); + levels = textureQueryLevels(sampCubeAs); + + levels = textureQueryLevels(sampBuf); // ERROR + levels = textureQueryLevels(sampRect); // ERROR +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/430AofA.frag b/3rdparty/bgfx/3rdparty/glslang/Test/430AofA.frag new file mode 100644 index 0000000..54d0923 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/430AofA.frag @@ -0,0 +1,108 @@ +#version 430 + +float[4][5][6] many[1][2][3]; + +float gu[][7]; +float gimp[][]; // ERROR, implicit inner +float g4[4][7]; +float g5[5][7]; + +float[4][7] foo(float a[5][7]) +{ + float r[7]; + r = a[2]; + float[](a[0], a[1], r, a[3]); // ERROR, too few dims + float[4][7][4](a[0], a[1], r, a[3]); // ERROR, too many dims + return float[4][7](a[0], a[1], r, a[3]); + return float[][](a[0], a[1], r, a[3]); + return float[][7](a[0], a[1], a[2], a[3]); +} + +void bar(float[5][7]) {} + +void main() +{ + { + float gu[3][4][2]; + + gu[2][4][1] = 4.0; // ERROR, overflow + } + vec4 ca4[3][2] = vec4[][](vec4[2](vec4(0.0), vec4(1.0)), + vec4[2](vec4(0.0), vec4(1.0)), + vec4[2](vec4(0.0), vec4(1.0))); + vec4 caim[][2] = vec4[][](vec4[2](vec4(4.0), vec4(2.0)), + vec4[2](vec4(4.0), vec4(2.0)), + vec4[2](vec4(4.0), vec4(2.0))); + vec4 caim2[][] = vec4[][](vec4[2](vec4(4.0), vec4(2.0)), + vec4[2](vec4(4.0), vec4(2.0)), + vec4[2](vec4(4.0), vec4(2.0))); + vec4 caim3[3][] = vec4[][](vec4[2](vec4(4.0), vec4(2.0)), + vec4[2](vec4(4.0), vec4(2.0)), + vec4[2](vec4(4.0), vec4(2.0))); + + vec4 a4[3][2] = {vec4[](vec4(0.0), vec4(1.0)), + vec4[2](vec4(0.0), vec4(1.0)), + vec4[2](vec4(0.0), vec4(1.0)) }; + vec4 aim[][2] = {vec4[2](vec4(4.0), vec4(2.0)), + vec4[](vec4(4.0), vec4(2.0)), + vec4[2](vec4(4.0), vec4(2.0)) }; + vec4 aim2[][] = {vec4[2](vec4(4.0), vec4(2.0)), + vec4[2](vec4(4.0), vec4(2.0)), + vec4[](vec4(4.0), vec4(2.0)) }; + vec4 aim3[3][] = {vec4[2](vec4(4.0), vec4(2.0)), + vec4[2](vec4(4.0), vec4(2.0)), + vec4[2](vec4(4.0), vec4(2.0)) }; + + vec4 bad2[3][] = {vec4[2](vec4(4.0), vec4(2.0)), // ERROR + vec4[3](vec4(4.0), vec4(2.0), vec4(5.0)), + vec4[2](vec4(4.0), vec4(2.0)) }; + + vec4 bad3[3][] = {vec4[3](vec4(4.0), vec4(2.0), vec4(5.0)), // ERROR + vec4[2](vec4(4.0), vec4(2.0)), + vec4[2](vec4(4.0), vec4(2.0)) }; + + vec4 bad4[4][] = {vec4[2](vec4(4.0), vec4(2.0)), // ERROR + vec4[2](vec4(4.0), vec4(2.0)), + vec4[2](vec4(4.0), vec4(2.0)) }; + + + g4 = foo(g5); + g5 = g4; // ERROR, wrong types + gu = g4; // ERROR, not yet sized + + foo(gu); // ERROR, not yet sized + bar(g5); + + if (foo(g5) == g4) + ; + if (foo(g5) == g5) // ERROR, different types + ; + + float u[][7]; + u[2][2] = 3.0; + float u[5][7]; + u[5][2] = 5.0; // ERROR + foo(u); +} + +void foo3() +{ + float resize1[][5][7]; + resize1.length(); // ERROR + resize1[1][4][5] = 2.0; + resize1.length(); // ERROR + float resize1[3][5][7]; + resize1.length(); // 3 in AST + resize1[1].length(); // 5 in AST + resize1[1][1].length(); // 7 in AST + resize1[1][1][1].length(); // ERROR + + float resize2[][5][7]; + float resize2[3][4][7]; // ERROR, inner dim change + + float resize3[][5][7]; + float resize3[3][5][9]; // ERROR, inner dim changed + + float resize4[][5][7]; + int resize4[3][5][7]; // ERROR, element type +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/430scope.vert b/3rdparty/bgfx/3rdparty/glslang/Test/430scope.vert new file mode 100644 index 0000000..7efa162 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/430scope.vert @@ -0,0 +1,74 @@ +#version 430 core + +int f(int a, int b, int c) +{ + int a = b; // ERROR, redefinition + + { + float a = float(a) + 1.0; // okay + } + + return a; +} + +int f(int a, int b, int c); // okay to redeclare + +bool b; +float b(int a); // ERROR: redefinition + +float c(int a); +bool c; // ERROR: redefinition + +float f; // ERROR: redefinition +float tan; // okay, hides built-in function +float sin(float x); // okay, can redefine built-in functions +float cos(float x) // okay, can redefine built-in functions +{ + return 1.0; +} +bool radians(bool x) // okay, can overload built-in functions +{ + return true; +} + +invariant gl_Position; + +void main() +{ + int g(); // okay + g(); + + float sin; // okay + sin; + sin(0.7); // ERROR, use of hidden function + f(1,2,3); + + float f; // hides f() + f = 3.0; + + gl_Position = vec4(f); + + for (int f = 0; f < 10; ++f) + ++f; + + int x = 1; + { + float x = 2.0, /* 2nd x visible here */ y = x; // y is initialized to 2 + int z = z; // ERROR: z not previously defined. + } + { + int x = x; // x is initialized to '1' + } + + struct S + { + int x; + }; + { + S S = S(0); // 'S' is only visible as a struct and constructor + S.x; // 'S' is now visible as a variable + } + + int degrees; + degrees(3.2); // ERROR, use of hidden built-in function +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/440.frag b/3rdparty/bgfx/3rdparty/glslang/Test/440.frag new file mode 100644 index 0000000..4eb1a3f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/440.frag @@ -0,0 +1,153 @@ +#version 440 + +// Note 'location'-only tests for enhanced layouts are in 330.frag +// Generic 'component' tests are in 440.vert + +// a consumes components 2 and 3 of location 4 +layout(location = 4, component = 2) in vec2 a; + +// b consumes component 1 of location 4 +layout(location = 4, component = 1) in float b; +layout(location = 4, component = 2) in vec2 h; // ERROR, component overlap not okay for fragment in + +layout(location = 3, component = 2) in vec3 c; // ERROR: c overflows components 2 and 3 + +// e consumes beginning (components 0, 1 and 2) of each of 6 slots +layout(location = 20, component = 0) in vec3 e[6]; + +// f consumes last component of the same 6 slots +layout(location = 20, component = 3) in float f[6]; + +layout(location = 30, component = 3) out int be; +layout(location = 30, component = 0) out vec3 bf; // ERROR, not the same basic type + +writeonly uniform; // ERROR +readonly in; // ERROR +flat out; // ERROR +mediump uniform; + +layout(offset=12) uniform; // ERROR +layout(offset=12) in; // ERROR +layout(offset=12) out; // ERROR + +layout(align=16) uniform; // ERROR +layout(align=16) in; // ERROR +layout(align=16) out; // ERROR + +layout(offset=12) uniform ubl1 { int a; } inst1; // ERROR +layout(offset=12) in inbl2 { int a; } inst2; // ERROR +layout(offset=12) out inbl3 { int a; } inst3; // ERROR + +layout(align=16, std140) uniform ubl4 { int a; } inst4; +layout(align=16) uniform ubl8 { int a; } inst8; // ERROR, no packing +layout(align=16) in inbl5 { int a; } inst5; // ERROR +layout(align=16) out inbl6 { int a; } inst6; // ERROR + +layout(offset=12) uniform vec4 v1; // ERROR +layout(offset=12) in vec4 v2; // ERROR +layout(offset=12) out vec4 v3; // ERROR + +layout(align=16) uniform vec4 v4; // ERROR +layout(align=16) in vec4 v5; // ERROR +layout(align=16) out vec4 v6; // ERROR + +layout(std140) in; // ERROR +layout(std140) uniform vec4 v7; // ERROR + +layout(align=48) uniform ubl7 { // ERROR, not power of 2 + layout(offset=12, align=4) float f; // ERROR, no packing +} inst7; + +in ibl10 { + layout(offset=12) float f; // ERROR + layout(align=4) float g; // ERROR +} inst10; + +layout(std430) uniform; + +layout(align=32) uniform ubl9 { + float e; + layout(offset=12, align=4) float f; + layout(offset=20) float g; + float h; +} inst9; + +uniform ubl11 { + layout(offset=12, align=4) float f; + float g; +} inst11; + +layout(std140) uniform block { + vec4 a; // a takes offsets 0-15 + layout(offset = 32) vec3 b; // b takes offsets 32-43 + layout(offset = 40) vec2 c; // ERROR, lies within previous member + layout(align = 6) double g; // ERROR, 6 is not a power of 2 + layout(offset=68) double h; // ERROR, offset not aligned +} specExampleErrors; + +layout(std140) uniform block2 { + vec4 a; // a takes offsets 0-15 + layout(offset = 32) vec3 b; // b takes offsets 32-43 + layout(offset = 48) vec2 d; // d takes offsets 48-55 + layout(align = 16) float e; // e takes offsets 64-67 + layout(align = 2) double f; // f takes offsets 72-79 + layout(offset = 80) float h; // h takes offsets 80-83 + layout(align = 64) dvec3 i; // i takes offsets 128-151 + layout(offset = 164, align = 8) float j; // j takes offsets 168-171 +} specExample; + +layout(std430) buffer block430 { + vec4 a; // a takes offsets 0-15 + layout(offset = 32) vec3 b; // b takes offsets 32-43 + layout(offset = 40) vec2 c; // ERROR, lies within previous member + layout(align = 6) double g; // ERROR, 6 is not a power of 2 + layout(offset=68) double h; // ERROR, offset not aligned + layout(align = 0) double i; // ERROR, 0 not a power of 2 +} specExampleErrors430; + +layout(std430) buffer block2430 { + vec4 a; // a takes offsets 0-15 + layout(offset = 32) vec3 b; // b takes offsets 32-43 + layout(offset = 48) vec2 d; // d takes offsets 48-55 + layout(align = 16) float e; // e takes offsets 64-67 + layout(align = 2) double f; // f takes offsets 72-79 + layout(offset = 80) float h; // h takes offsets 80-83 + layout(align = 64) dvec3 i; // i takes offsets 128-151 + layout(offset = 164, align = 8) float j; // j takes offsets 168-171 +} specExample430; + +layout(std430, align = 128) buffer block24300 { + vec4 a; + vec3 b; + vec2 d; + float e; + double f; + float h; + dvec3 i; +} specExample4300; + +layout(std430, align = 128) buffer block24301 { + vec4 a; + vec3 b; + vec2 d; + layout(offset=388) float e; + layout(align=8) double f; + float h; + dvec3 i; +} specExample4301; + +int aconst[gl_MaxTransformFeedbackBuffers]; +int bconst[gl_MaxTransformFeedbackInterleavedComponents]; + +sample in vec3 sampInArray[4]; + +void interp() +{ + interpolateAtCentroid(sampInArray[2].xy); + interpolateAtSample(sampInArray[2].x.x, 2); +} + +int layer() +{ + return gl_Layer; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/440.vert b/3rdparty/bgfx/3rdparty/glslang/Test/440.vert new file mode 100644 index 0000000..2e61f79 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/440.vert @@ -0,0 +1,191 @@ +#version 440 + +// Note 'location' tests for enhanced layouts are in 330.frag + +layout(location = 2, component = 2) in vec2 a; +layout(location = 2, component = 1) in float b; + +layout(location = 3, component = 2) in vec3 c; // ERROR: c overflows components 2 and 3 + +layout(location = 0, component = 3) in float d[4]; + +layout(location = 4, component = 0) in vec3 e[5]; +layout(location = 4, component = 3) in float f[5]; + +layout(location = 9, component = 4) in float g[6]; // ERROR, component too big + +layout(location = 4, component = 2) in vec2 h; // component overlap okay for vertex in + +layout(location = 3, component = 2) out vec2 i; +layout(location = 3, component = 0) out vec2 j; + +layout(location = 4, component = 2) out vec2 k; +layout(location = 4, component = 2) out vec2 m; // ERROR, component overlap + +layout(location = 2, component = 2) out vec2 n; +layout(location = 2, component = 0) out vec3 p; // ERROR, component overlap + +layout(location = 10, component = 3) out float q[6]; +layout(location = 10, component = 0) out vec3 r[6]; + +layout(location = 15, component = 3) out float s; // ERROR, overlap +layout(location = 10, component = 1) out float t; // ERROR, overlap + +layout(location = 20, component = 2) out float u; +layout(location = 20, component = 0) out float v; +layout(location = 20, component = 3) out float w; +layout(location = 20, component = 1) out vec2 x; // ERROR, overlap + +layout(location = 30, component = 3) out vec2 y; // ERROR, goes to component 4 +layout(location = 31, component = 1) out vec4 z; // ERROR, goes to component 4 + +layout(location = 32, component = 1) out mat4 ba; // ERROR +layout(location = 33, component = 1) out struct S {int a;} Ss; // ERROR +layout(location = 34, component = 1) out bn { int a;} bb; // ERROR + +layout(component = 1) out float bc; // ERROR, no location + +out blockname { + layout(location = 40, component = 2) out float u; + layout(location = 40, component = 0) out float v; + layout(location = 40, component = 3) out float w; + layout(location = 40, component = 1) out vec2 x; // ERROR, overlap + + layout(location = 41, component = 3) out vec2 y; // ERROR, goes to component 4 + layout(location = 42, component = 1) out vec4 z; // ERROR, goes to component 4 + + layout(location = 42, component = 1) out mat4 ba; // ERROR + layout(location = 43, component = 1) out S Ss; // ERROR +} bd; + +layout(location = 1, component = 1) out; // ERROR, no global setting + +layout(location = 50, component = 3) out int be; +layout(location = 50, component = 0) out vec3 bf; + +layout(location = 51, component = 1) out double dfo; // ERROR, odd component +layout(location = 52, component = 2) out dvec2 dvo; // ERROR, overflow +layout(location = 53) out double dfo2; +layout(location = 53, component = 2) out vec2 ffv2; // okay, fits +layout(location = 54) out dvec4 dvec4out; // uses up location 55 too +layout(location = 55) out float overf; // ERROR, collides with previous dvec4 +layout(location = 56, component = 1) out vec2 df2o; +layout(location = 56, component = 3) out float sf2o; +layout(location = 57, component = 2) out vec2 dv3o; +layout(location = 57, component = 3) out float sf4o; // ERROR, overlapping component +layout(location=58) out flat dvec3 dv3o2; // uses part of location 59 +layout(location=59, component=2) out flat double dfo3; // okay, fits +layout(location=59, component=0) out flat double dfo4; // ERROR, overlaps the dvec3 in starting in 58 + +out bblck1 { + vec4 bbv; +} bbinst1; + +out bblck2 { + layout(xfb_offset=64) vec4 bbv; +} bbinst2; + +layout(xfb_buffer = 3, xfb_stride = 64) out; // default buffer is 3 + +out bblck3 { + layout(xfb_offset=16) vec4 bbv; // in xfb_buffer 3 +} bbinst3; + +uniform ubblck3 { + layout(xfb_offset=16) vec4 bbv; // ERROR, not in a uniform +} ubbinst3; + +layout(xfb_buffer=2, xfb_offset=48, xfb_stride=80) out vec4 bg; +layout( xfb_offset=32, xfb_stride=64) out vec4 bh; + +layout(xfb_offset=48) out; // ERROR + +layout(xfb_stride=80, xfb_buffer=2, xfb_offset=16) out bblck4 { + vec4 bbv1; + vec4 bbv2; +} bbinst4; + +out bblck5 { + layout(xfb_offset=0) vec4 bbv1; + layout(xfb_stride=64, xfb_buffer=3, xfb_offset=48) vec4 bbv2; + layout(xfb_buffer=2) vec4 bbv3; // ERROR, wrong buffer +} bbinst5; + +out layout(xfb_buffer=2) bblck6 { + layout(xfb_offset=0) vec4 bbv1; + layout(xfb_stride=64, xfb_buffer=3, xfb_offset=32) vec4 bbv2; // ERROR, overlap 32 from bh, and buffer contradiction + layout(xfb_buffer=2, xfb_offset=0) vec4 bbv3; // ERROR, overlap 0 from bbinst5 + layout(xfb_buffer=2) vec4 bbv5; + layout(xfb_offset=24) float bbf6; // ERROR, overlap 24 from bbv1 in bbinst4 +} bbinst6; + +layout(xfb_stride=48) out; // ERROR, stride of buffer 3 + +layout(xfb_buffer=1) out; // default buffer is 1 +layout(xfb_offset=4) out float bj; +layout(xfb_offset=0) out ivec2 bk; // ERROR, overlap 4 + +layout(xfb_buffer=3, xfb_stride=48) out; // ERROR, stride of buffer 3 (default is now 3) +layout(xfb_stride=48) out float bl; // ERROR, stride of buffer 3 + +layout(xfb_stride=48) out bblck7 { // ERROR, stride of buffer 3 + layout(xfb_stride=64) vec4 bbv1; + layout(xfb_stride=32) vec4 bbv2; // ERROR, stride of buffer 3 +} bbinst7; + +struct S5 { + int i; // 4 bytes plus 4 byte hole + double d; // 8 bytes + float f; // 4 bytes +}; // total size = 20 + +struct T { + bool b; // 4 plus 4 byte hole + S5 s; // 20 + vec2 v2; // 8 +}; // total size = 36 + +out layout(xfb_buffer=0, xfb_offset=0, xfb_stride=92) bblck8 { // ERROR, stride not multiple of 8 + bool b; // offset 0 + T t; // offset 8, size 40 + int i; // offset 40 + 4 = 48 + mat3x3 m3; // offset 52 + float f; // offset 52 + 9*4 = 88 + float g; // ERROR, overflow stride +} bbinst8; + +out layout(xfb_buffer=4) bblck9 { + layout(xfb_offset=1) bool b; // ERROR + layout(xfb_offset=12) T t; // ERROR + layout(xfb_offset=52) mat3x3 m3; // non-multiple of 8 okay + layout(xfb_offset=90) int i; // ERROR + layout(xfb_offset=98) double d; // ERROR + layout(xfb_offset=108) S s; // non-multiple of 8 okay +} bbinst9; + +layout(xfb_buffer=5, xfb_stride=6) out; // link ERROR, stride not multiple of 4 +layout(xfb_offset=0) out float bm; + +layout(xfb_buffer=6, xfb_stride=2000) out; // ERROR, stride too big + +out layout(xfb_buffer=7, xfb_offset=0) bblck10 { // link ERROR, implicit stride too big + dmat4x4 m1; + dmat4x4 m2; + float f; +} bbinst10; + +int drawParamsBad() +{ + return gl_BaseVertexARB + gl_BaseInstanceARB + gl_DrawIDARB; // ERROR, extension not requested +} + +#extension GL_ARB_shader_draw_parameters: enable + +int drawParams() +{ + return gl_BaseVertexARB + gl_BaseInstanceARB + gl_DrawIDARB; + gl_BaseVertexARB = 3; // ERROR, can't write to shader 'in' + gl_BaseInstanceARB = 3; // ERROR, can't write to shader 'in' + gl_DrawIDARB = 3; // ERROR, can't write to shader 'in' + glBaseInstanceARB; // ERROR, not defined +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/450.comp b/3rdparty/bgfx/3rdparty/glslang/Test/450.comp new file mode 100644 index 0000000..7f723ec --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/450.comp @@ -0,0 +1 @@ +#version 450 core diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/450.frag b/3rdparty/bgfx/3rdparty/glslang/Test/450.frag new file mode 100644 index 0000000..04f3aa1 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/450.frag @@ -0,0 +1,56 @@ +#version 450 core + +in float in1; +in vec2 in2; +in vec3 in3; +in vec4 in4; + +void main() +{ + vec2 v2 = dFdxFine(in2); + vec3 v3 = dFdyCoarse(in3); + vec4 v4 = fwidth(in4); + v4 = dFdyFine(in4); + v3 = dFdyFine(in3); + float f = dFdx(in1) + dFdxFine(in1) + dFdxCoarse(in1); + v4 = fwidthCoarse(in4) + fwidthFine(in4); + + float cull = gl_CullDistance[2]; + float consts = gl_MaxCullDistances + gl_MaxCombinedClipAndCullDistances + gl_MaxSamples; + + if (gl_HelperInvocation) + ++v4; + + int sum = gl_MaxVertexImageUniforms + + gl_MaxFragmentImageUniforms + + gl_MaxComputeImageUniforms + + gl_MaxCombinedImageUniforms + + gl_MaxCombinedShaderOutputResources; + + bool b1, b3, b; + uint uin; + bvec2 b2 = mix(bvec2(b1), bvec2(b3), bvec2(b)); + uint um = mix(uin, uin, b); + ivec3 im3 = mix(ivec3(uin), ivec3(uin), bvec3(b)); +} + +uniform sampler2DMS s2dms; +uniform usampler2DMSArray us2dmsa; +layout(rgba32i) uniform iimage2DMS ii2dms; +layout(rgba32f) uniform image2DMSArray i2dmsa; + +void foo() +{ + int s = textureSamples(s2dms); + s += textureSamples(us2dmsa); + s += imageSamples(ii2dms); + s += imageSamples(i2dmsa); + float f = imageAtomicExchange(i2dmsa, ivec3(in3), 2, 4.5); +} + +in float gl_CullDistance[6]; + +float cull(int i) +{ + return (i >= 6) ? gl_CullDistance[5] : gl_CullDistance[i]; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/450.geom b/3rdparty/bgfx/3rdparty/glslang/Test/450.geom new file mode 100644 index 0000000..af67681 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/450.geom @@ -0,0 +1,14 @@ +#version 450 core + +in gl_PerVertex { + float gl_CullDistance[3]; +} gl_in[]; + +out gl_PerVertex { + float gl_CullDistance[3]; +}; + +void main() +{ + gl_CullDistance[2] = gl_in[1].gl_CullDistance[2]; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/450.tesc b/3rdparty/bgfx/3rdparty/glslang/Test/450.tesc new file mode 100644 index 0000000..75a9bf4 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/450.tesc @@ -0,0 +1,14 @@ +#version 450 core + +in gl_PerVertex { + float gl_CullDistance[3]; +} gl_in[gl_MaxPatchVertices]; + +out gl_PerVertex { + float gl_CullDistance[3]; +} gl_out[4]; + +void main() +{ + gl_out[gl_InvocationID].gl_CullDistance[2] = gl_in[1].gl_CullDistance[2]; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/450.tese b/3rdparty/bgfx/3rdparty/glslang/Test/450.tese new file mode 100644 index 0000000..6144793 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/450.tese @@ -0,0 +1,14 @@ +#version 450 core + +in gl_PerVertex { + float gl_CullDistance[3]; +} gl_in[gl_MaxPatchVertices]; + +out gl_PerVertex { + float gl_CullDistance[3]; +}; + +void main() +{ + gl_CullDistance[2] = gl_in[1].gl_CullDistance[2]; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/450.vert b/3rdparty/bgfx/3rdparty/glslang/Test/450.vert new file mode 100644 index 0000000..0834d16 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/450.vert @@ -0,0 +1,28 @@ +#version 450 core + +out gl_PerVertex { + float gl_CullDistance[3]; +}; + +void main() +{ + gl_CullDistance[2] = 4.5; +} + +out bool outb; // ERROR +out sampler2D outo; // ERROR +out float outa[4]; +out float outaa[4][2]; +struct S { float f; }; +out S outs; +out S[4] outasa; +out S outsa[4]; +struct SA { float f[4]; }; +out SA outSA; +struct SS { float f; S s; }; +out SS outSS; + +void foo() +{ + SS::f; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/Operations.frag b/3rdparty/bgfx/3rdparty/glslang/Test/Operations.frag new file mode 100644 index 0000000..ca06a75 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/Operations.frag @@ -0,0 +1,166 @@ +#version 130 + +uniform ivec4 uiv4; +uniform vec4 uv4; +uniform bool ub; +uniform bvec4 ub41, ub42; +uniform float uf; +uniform int ui; + + +uniform uvec4 uuv4; +uniform uint uui; + + +void main() +{ + vec4 v; + float f; + bool b; + bvec4 bv4; + int i; + + uint u; + + + // floating point + v = radians(uv4); + v += degrees(v); + v += (i = ui*ui, sin(v)); + v += cos(v); + v += tan(v); + v += asin(v); + v += acos(v); + + v += atan(v); + v += sinh(v); + v += cosh(v); + v += tanh(v); + v += asinh(v); + v += acosh(v); + v += atanh(v); + + v += pow(v, v); + v += exp(v); + v += log(v); + v += exp2(v); + v += log2(v); + v += sqrt(v); + v += inversesqrt(v); + v += abs(v); + v += sign(v); + v += floor(v); + + + v += trunc(v); + v += round(v); + v += roundEven(v); + + + v += ceil(v); + v += fract(v); + v += mod(v, v); + v += mod(v, v.x); + + + v += modf(v, v); + + + v += min(v, uv4); + v += max(v, uv4); + v += clamp(v, uv4, uv4); + v += mix(v,v,v); + + + v += mix(v,v,bv4); + v += intBitsToFloat(ivec4(i)); + v += uintBitsToFloat(uv4); + v += fma(v,v,v); + v += frexp(v); + v += ldexp(v); + v += unpackUnorm2x16(v); + v += unpackUnorm4x8(v); + v += unpackSnorm4x8(v); + + + v += step(v,v); + v += smoothstep(v,v,v); + v += step(uf,v); + v += smoothstep(uf,uf,v); + v += normalize(v); + v += faceforward(v, v, v); + v += reflect(v, v); + v += refract(v, v, uf); + v += dFdx(v); + v += dFdy(v); + v += fwidth(v); + //noise*(v); + + + // signed integer + i += abs(ui); + i += sign(i); + i += min(i, ui); + i += max(i, ui); + i += clamp(i, ui, ui); + + floatsBitsToInt(v); + packUnorm2x16(v); + packUnorm4x8(v); + packSnorm4x8(v); + + // unsigned integer + u = abs(uui); + u += sign(u); + u += min(u, uui); + u += max(u, uui); + u += clamp(u, uui, uui); + u += floatsBitToInt(v); + u += packUnorm2x16(v); + u += packUnorm4x8(v); + i += uui & i; // ERRORs, no int/uint conversions before 400 + i += uui ^ i; + i += i | uui; + + // bool + + b = isnan(uf); + b = isinf(v.y); + + b = any(lessThan(v, uv4)); + b = (b && any(lessThanEqual(v, uv4))); + b = (b && any(greaterThan(v, uv4))); + b = (b && any(greaterThanEqual(v, uv4))); + b = (b && any(equal(ub41, ub42))); + b = (b && any(notEqual(ub41, ub42))); + b = (b && any(ub41)); + b = (b && all(ub41)); + b = (b && any(not(ub41))); + + i = ((i + ui) * i - ui) / i; + i = i % ui; + if (i == ui || i != ui && i == ui ^^ i != 2) + ++i; + + f = ((uf + uf) * uf - uf) / uf; + + f += length(v); + f += distance(v, v); + f += dot(v, v); + f += dot(f, uf); + f += cross(v.xyz, v.xyz).x; + + if (f == uf || f != uf && f != 2.0) + ++f; + + i &= ui; + i |= 0x42; + i ^= ui; + i %= 17; + i >>= 2; + i <<= ui; + i = ~i; + b = !b; + + gl_FragColor = b ? vec4(i) + vec4(f) + v : v; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/aggOps.frag b/3rdparty/bgfx/3rdparty/glslang/Test/aggOps.frag new file mode 100644 index 0000000..a0450dc --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/aggOps.frag @@ -0,0 +1,51 @@ +#version 130 + +uniform sampler2D sampler; +varying mediump vec2 coord; + +varying vec4 u, w; + +struct s1 { + int i; + float f; +}; + +struct s2 { + int i; + float f; + s1 s1_1; +}; + +uniform s1 foo1; +uniform s2 foo2a; +uniform s2 foo2b; + +void main() +{ + vec4 v; + s1 a[3], b[3]; + a = s1[3](s1(int(u.x), u.y), s1(int(u.z), u.w), s1(14, 14.0)); + b = s1[3](s1(17, 17.0), s1(int(w.x), w.y), s1(int(w.z), w.w)); + + if (foo2a == foo2b) + v = texture2D(sampler, coord); + else + v = texture2D(sampler, 2.0*coord); + + if (u == v) + v *= 3.0; + + if (u != v) + v *= 4.0; + + if (coord == v.yw) + v *= 5.0; + + if (a == b) + v *= 6.0; + + if (a != b) + v *= 7.0; + + gl_FragColor = v; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/always-discard.frag b/3rdparty/bgfx/3rdparty/glslang/Test/always-discard.frag new file mode 100644 index 0000000..cea4cee --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/always-discard.frag @@ -0,0 +1,36 @@ +#version 110 +varying vec2 tex_coord; + +void main (void) +{ + vec4 white = vec4(1.0); + vec4 black = vec4(0.2); + vec4 color = white; + + // First, cut out our circle + float x = tex_coord.x*2.0 - 1.0; + float y = tex_coord.y*2.0 - 1.0; + + float radius = sqrt(x*x + y*y); + if (radius > 1.0) { + if (radius > 1.1) { + ++color; + } + + gl_FragColor = color; + + if (radius > 1.2) { + ++color; + } + + } + + discard; + + // If we're near an edge, darken us a tiny bit + if (radius >= 0.75) + color -= abs(pow(radius, 16.0)/2.0); + + gl_FragColor = color; + +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/always-discard2.frag b/3rdparty/bgfx/3rdparty/glslang/Test/always-discard2.frag new file mode 100644 index 0000000..a619369 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/always-discard2.frag @@ -0,0 +1,19 @@ +#version 110 +varying vec2 tex_coord; + +void main (void) +{ + vec4 white = vec4(1.0); + vec4 black = vec4(0.2); + vec4 color = white; + + // First, cut out our circle + float x = tex_coord.x*2.0 - 1.0; + float y = tex_coord.y*2.0 - 1.0; + + discard; + + + gl_FragColor = color; + +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/array.frag b/3rdparty/bgfx/3rdparty/glslang/Test/array.frag new file mode 100644 index 0000000..4ccb00c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/array.frag @@ -0,0 +1,106 @@ +#version 130 + +float gu[]; +float g4[4]; +float g5[5]; + +uniform int a; + +float[4] foo(float a[5]) +{ + return float[](a[0], a[1], a[2], a[3]); +} + +void bar(float[5]) {} + +void main() +{ + { + float gu[2]; // okay, new scope + + gu[2] = 4.0; // ERROR, overflow + } + + gu[2] = 4.0; // okay + + gu[3] = 3.0; + gu[a] = 5.0; // ERROR + + g4 = foo(g5); + g5 = g4; // ERROR + gu = g4; // ERROR + + foo(gu); // ERROR + bar(g5); + + if (float[4](1.0, 2.0, 3.0, 4.0) == g4) + gu[0] = 2.0; + + float u[]; + u[2] = 3.0; // okay + float u[5]; + u[5] = 5.0; // ERROR + foo(u); // okay + + gl_FragData[1000] = vec4(1.0); // ERROR + gl_FragData[-1] = vec4(1.0); // ERROR + gl_FragData[3] = vec4(1.0); + + const int ca[] = int[](3, 2); + int sum = ca[0]; + sum += ca[1]; + sum += ca[2]; // ERROR + + const int ca3[3] = int[](3, 2); // ERROR + int ica[] = int[](3, 2); + int ica3[3] = int[](3, 2); // ERROR + ica[3.1] = 3; // ERROR + ica[u[1]] = 4; // ERROR +} + +int[] foo213234(); // ERROR +int foo234234(float[]); // ERROR +int foo234235(vec2[] v); // ERROR + +vec3 guns[]; +float f = guns[7]; + +void foo() +{ + int uns[]; + uns[3] = 40; + uns[1] = 30; + guns[2] = vec3(2.4); + + float unsf[]; + bar(unsf); // ERROR +} + +float[] foo2() // ERROR +{ + float f[]; + return f; + float g[9]; + return g; // ERROR +} + +float gUnusedUnsized[]; + +void foo3() +{ + float resize1[]; + resize1[2] = 4.0; + resize1.length(); // ERROR + float resize1[3]; + resize1.length(); + + float resize2[]; + resize2[5] = 4.0; + float resize2[5]; // should be ERROR, but is not + resize2.length(); + resize2[5] = 4.0; // ERROR +} + +int[] i = int[](); // ERROR, need constructor arguments +float emptyA[]; +float b = vec4(emptyA); // ERROR, array can't be a constructor argument diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/array100.frag b/3rdparty/bgfx/3rdparty/glslang/Test/array100.frag new file mode 100644 index 0000000..b77aedf --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/array100.frag @@ -0,0 +1,70 @@ +#version 100 + +float gu[]; // ERROR +float g4[4]; +float g5[5]; + +uniform int a; + +float[4] foo(float[5] a) // ERROR // ERROR +{ + return float[](a[0], a[1], a[2], a[3]); // ERROR +} + +void bar(float[5]) {} + +void main() +{ + { + float gu[2]; // okay, new scope + + gu[2] = 4.0; // ERROR, overflow + } + + g4 = foo(g5); // ERROR + g5 = g4; // ERROR + gu = g4; // ERROR + + foo(gu); // ERROR + bar(g5); + + if (float[4](1.0, 2.0, 3.0, 4.0) == g4) // ERROR + gu[0] = 2.0; + + float u[5]; + u[5] = 5.0; // ERROR + foo(u); // okay + + gl_FragData[1000] = vec4(1.0); // ERROR + gl_FragData[-1] = vec4(1.0); // ERROR + gl_FragData[3] = vec4(1.0); +} + +struct SA { + vec3 v3; + vec2 v2[4]; +}; + +struct SB { + vec4 v4; + SA sa; +}; + +SB bar9() +{ + SB s; + return s; // ERROR +} + +void bar10(SB s) // okay +{ +} + +void bar11() +{ + SB s1, s2; + s1 = s2; // ERROR + bar10(s1); + s2 = bar9(); // ERROR + SB initSb = s1; // ERROR +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/atomic_uint.frag b/3rdparty/bgfx/3rdparty/glslang/Test/atomic_uint.frag new file mode 100644 index 0000000..9a95a48 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/atomic_uint.frag @@ -0,0 +1,48 @@ +#version 420 core + +layout(binding = 0) uniform atomic_uint counter; + +uint func(atomic_uint c) +{ + return atomicCounterIncrement(c); +} + +uint func2(out atomic_uint c) // ERROR +{ + return counter; // ERROR, type mismatch + return atomicCounter(counter); +} + +void main() +{ + atomic_uint non_uniform_counter; // ERROR + uint val = atomicCounter(counter); + atomicCounterDecrement(counter); +} + +layout(binding = 1, offset = 3) uniform atomic_uint countArr[4]; +uniform int i; + +void opac() +{ + counter + counter; // ERROR + -counter; // ERROR + int a[3]; + a[counter]; // ERROR + countArr[2]; + countArr[i]; + counter = 4; // ERROR +} + +in atomic_uint acin; // ERROR +atomic_uint acg; // ERROR +uniform atomic_uint; +uniform atomic_uint aNoBind; // ERROR, no binding +layout(binding=0, offset=32) uniform atomic_uint aOffset; +layout(binding=0, offset=4) uniform atomic_uint; +layout(binding=0) uniform atomic_uint bar3; // offset is 4 +layout(binding=0) uniform atomic_uint ac[3]; // offset = 8 +layout(binding=0) uniform atomic_uint ad; // offset = 20 +layout(offset=8) uniform atomic_uint bar4; // ERROR, no binding +layout(binding = 0, offset = 12) uniform atomic_uint overlap; // ERROR, overlapping offsets +layout(binding = 20) uniform atomic_uint bigBind; // ERROR, binding too big diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/badChars.frag b/3rdparty/bgfx/3rdparty/glslang/Test/badChars.frag new file mode 100644 index 0000000..3e9700d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/badChars.frag @@ -0,0 +1,7 @@ +#ifþ +#endif +#error AÿB +#if +#endif +int aÿ +#define A "ÿ \ No newline at end of file diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/badMacroArgs.frag b/3rdparty/bgfx/3rdparty/glslang/Test/badMacroArgs.frag new file mode 100755 index 0000000..7d7de87 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/badMacroArgs.frag @@ -0,0 +1,4 @@ +#version 400 + +#define m(a) a +m() \ No newline at end of file diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/100.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/100.frag.out new file mode 100644 index 0000000..67be9e0 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/100.frag.out @@ -0,0 +1,576 @@ +100.frag +ERROR: 0:3: '{ } style initializers' : not supported with this profile: es +ERROR: 0:3: 'initializer' : not supported for this version or the enabled extensions +ERROR: 0:3: 'array initializer' : not supported for this version or the enabled extensions +ERROR: 0:4: '#version' : must occur first in shader +ERROR: 0:7: 'attribute' : not supported in this stage: fragment +ERROR: 0:7: 'float' : type requires declaration of default precision qualifier +ERROR: 0:9: '=' : cannot convert from ' const int' to ' global mediump float' +ERROR: 0:11: 'uniform block' : not supported for this version or the enabled extensions +ERROR: 0:19: 'foo' : no matching overloaded function found +ERROR: 0:20: 'bit shift left' : not supported for this version or the enabled extensions +ERROR: 0:21: 'bit shift right' : not supported for this version or the enabled extensions +ERROR: 0:22: 'array comparison' : not supported for this version or the enabled extensions +ERROR: 0:24: 'bitwise and' : not supported for this version or the enabled extensions +ERROR: 0:25: '%' : not supported for this version or the enabled extensions +ERROR: 0:26: 'bitwise inclusive or' : not supported for this version or the enabled extensions +ERROR: 0:27: 'bit-shift right assign' : not supported for this version or the enabled extensions +ERROR: 0:28: 'bit-shift left assign' : not supported for this version or the enabled extensions +ERROR: 0:29: '%=' : not supported for this version or the enabled extensions +ERROR: 0:36: 'array assignment' : not supported for this version or the enabled extensions +ERROR: 0:37: 'array comparison' : not supported for this version or the enabled extensions +ERROR: 0:38: 'array comparison' : not supported for this version or the enabled extensions +ERROR: 0:40: 'switch' : Reserved word. +ERROR: 0:40: 'switch statements' : not supported for this version or the enabled extensions +ERROR: 0:45: '' : array size required +ERROR: 0:47: 'invariant' : can only apply to an output, or to an input in a non-vertex stage + +ERROR: 0:49: 'invariant' : can only apply to an output, or to an input in a non-vertex stage + +ERROR: 0:50: 'invariant' : can only apply to an output, or to an input in a non-vertex stage + +ERROR: 0:56: 'invariant' : not allowed in nested scope +ERROR: 0:56: 'invariant' : can only apply to an output, or to an input in a non-vertex stage + +ERROR: 0:57: 'invariant' : not allowed in nested scope +ERROR: 0:57: 'invariant' : can only apply to an output, or to an input in a non-vertex stage + +ERROR: 0:59: 'invariant' : not allowed in nested scope +ERROR: 0:59: 'invariant' : can only apply to an output, or to an input in a non-vertex stage + +ERROR: 0:63: 'invariant' : can only apply to an output, or to an input in a non-vertex stage + +ERROR: 0:64: 'invariant' : can only apply to an output, or to an input in a non-vertex stage + +ERROR: 0:66: 'sampler2D' : sampler/image types can only be used in uniform variables or function parameters: glob2D +ERROR: 0:69: 'sampler2D' : sampler/image types can only be used in uniform variables or function parameters: v2D +ERROR: 0:71: 'sampler2D' : sampler/image types can only be used in uniform variables or function parameters: vary2D +ERROR: 0:75: 'in for stage inputs' : not supported for this version or the enabled extensions +ERROR: 0:77: 'invariant' : can only apply to an output, or to an input in a non-vertex stage + +ERROR: 0:75: 'g' : cannot use storage or interpolation qualifiers on structure members +ERROR: 0:76: 'h' : cannot use storage or interpolation qualifiers on structure members +ERROR: 0:77: 'i' : cannot use invariant qualifier on structure members +ERROR: 0:80: 'sampler3D' : Reserved word. +ERROR: 0:80: 'sampler/image' : type requires declaration of default precision qualifier +ERROR: 0:91: 'dFdx' : required extension not requested: GL_OES_standard_derivatives +ERROR: 0:92: 'dFdy' : required extension not requested: GL_OES_standard_derivatives +ERROR: 0:93: 'fwidth' : required extension not requested: GL_OES_standard_derivatives +ERROR: 0:103: 'gl_FragDepth' : undeclared identifier +ERROR: 0:104: 'gl_FragDepthEXT' : required extension not requested: GL_EXT_frag_depth +ERROR: 0:111: 'gl_FragDepth' : undeclared identifier +ERROR: 0:134: 'texture3D' : no matching overloaded function found +ERROR: 0:135: 'texture2DProjLod' : no matching overloaded function found +ERROR: 0:137: 'bitwise not' : not supported for this version or the enabled extensions +ERROR: 0:138: 'bitwise inclusive or' : not supported for this version or the enabled extensions +ERROR: 0:139: 'bitwise and' : not supported for this version or the enabled extensions +ERROR: 0:145: 'a' : redefinition +ERROR: 0:147: 'texture2DProjGradEXT' : required extension not requested: GL_EXT_shader_texture_lod +ERROR: 0:151: 'floating-point suffix' : not supported for this version or the enabled extensions +ERROR: 0:152: 'floating-point suffix' : not supported for this version or the enabled extensions +ERROR: 0:167: 'highp' : overloaded functions must have the same parameter precision qualifiers for argument 2 +ERROR: 0:170: 'multiple prototypes for same function' : not supported for this version or the enabled extensions +ERROR: 0:177: 'multiple prototypes for same function' : not supported for this version or the enabled extensions +ERROR: 0:179: 'fragment-shader struct input' : not supported for this version or the enabled extensions +ERROR: 0:183: 'v' : illegal use of type 'void' +ERROR: 0:184: 'void' : cannot be an argument type except for '(void)' +ERROR: 0:185: 'v' : illegal use of type 'void' +ERROR: 0:185: 'void' : cannot be an argument type except for '(void)' +ERROR: 0:190: '.' : cannot apply to an array: y +ERROR: 0:191: '.' : cannot apply to an array: zy +ERROR: 0:192: '.' : cannot apply to an array: nothing +ERROR: 0:193: '.length' : not supported for this version or the enabled extensions +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: 77 compilation errors. No code generated. + + +Shader version: 100 +Requested GL_EXT_frag_depth +Requested GL_EXT_shader_non_constant_global_initializers +Requested GL_EXT_shader_texture_lod +Requested GL_OES_EGL_image_external +Requested GL_OES_standard_derivatives +Requested GL_OES_texture_3D +ERROR: node is still EOpNull! +0:3 Sequence +0:3 move second child to first child ( temp 3-element array of mediump int) +0:3 'a' ( global 3-element array of mediump int) +0:3 Constant: +0:3 2 (const int) +0:3 3 (const int) +0:3 4 (const int) +0:17 Function Definition: main( ( global void) +0:17 Function Parameters: +0:19 Sequence +0:19 Constant: +0:19 0.000000 +0:20 Sequence +0:20 move second child to first child ( temp mediump int) +0:20 's' ( temp mediump int) +0:20 Constant: +0:20 16 (const int) +0:21 move second child to first child ( temp mediump int) +0:21 's' ( temp mediump int) +0:21 Constant: +0:21 4 (const int) +0:22 Test condition and select ( temp void) +0:22 Condition +0:22 Compare Equal ( temp bool) +0:22 'a' ( global 3-element array of mediump int) +0:22 'a' ( global 3-element array of mediump int) +0:22 true case is null +0:24 move second child to first child ( temp mediump int) +0:24 'b' ( temp mediump int) +0:24 bitwise and ( temp mediump int) +0:24 'c' ( temp mediump int) +0:24 Constant: +0:24 4 (const int) +0:25 move second child to first child ( temp mediump int) +0:25 'b' ( temp mediump int) +0:25 mod ( temp mediump int) +0:25 'c' ( temp mediump int) +0:25 Constant: +0:25 4 (const int) +0:26 move second child to first child ( temp mediump int) +0:26 'b' ( temp mediump int) +0:26 inclusive-or ( temp mediump int) +0:26 'c' ( temp mediump int) +0:26 Constant: +0:26 4 (const int) +0:27 right shift second child into first child ( temp mediump int) +0:27 'b' ( temp mediump int) +0:27 Constant: +0:27 2 (const int) +0:28 left shift second child into first child ( temp mediump int) +0:28 'b' ( temp mediump int) +0:28 Constant: +0:28 2 (const int) +0:29 mod second child into first child ( temp mediump int) +0:29 'b' ( temp mediump int) +0:29 Constant: +0:29 3 (const int) +0:36 move second child to first child ( temp structure{ temp mediump float f, temp 10-element array of mediump float a}) +0:36 's1' ( temp structure{ temp mediump float f, temp 10-element array of mediump float a}) +0:36 's2' ( temp structure{ temp mediump float f, temp 10-element array of mediump float a}) +0:37 Test condition and select ( temp void) +0:37 Condition +0:37 Compare Equal ( temp bool) +0:37 's1' ( temp structure{ temp mediump float f, temp 10-element array of mediump float a}) +0:37 's2' ( temp structure{ temp mediump float f, temp 10-element array of mediump float a}) +0:37 true case is null +0:38 Test condition and select ( temp void) +0:38 Condition +0:38 Compare Not Equal ( temp bool) +0:38 's1' ( temp structure{ temp mediump float f, temp 10-element array of mediump float a}) +0:38 's2' ( temp structure{ temp mediump float f, temp 10-element array of mediump float a}) +0:38 true case is null +0:40 'b' ( temp mediump int) +0:54 Function Definition: foo10( ( global void) +0:54 Function Parameters: +0:67 Function Definition: f11(s21; ( global void) +0:67 Function Parameters: +0:67 'p2d' ( in lowp sampler2D) +0:87 Function Definition: foo234( ( global void) +0:87 Function Parameters: +0:89 Sequence +0:89 texture ( global highp 4-component vector of float) +0:89 's3D2' ( uniform highp sampler3D) +0:89 Constant: +0:89 0.200000 +0:89 0.200000 +0:89 0.200000 +0:89 Constant: +0:89 0.200000 +0:90 textureProj ( global highp 4-component vector of float) +0:90 's3D2' ( uniform highp sampler3D) +0:90 direct index ( smooth temp mediump 4-component vector of float) +0:90 'v' ( smooth in 3-element array of mediump 4-component vector of float) +0:90 Constant: +0:90 1 (const int) +0:90 Constant: +0:90 0.400000 +0:91 dPdx ( global mediump 4-component vector of float) +0:91 direct index ( smooth temp mediump 4-component vector of float) +0:91 'v' ( smooth in 3-element array of mediump 4-component vector of float) +0:91 Constant: +0:91 0 (const int) +0:92 Constant: +0:92 0.000000 +0:93 fwidth ( global mediump float) +0:93 'f13' ( invariant global mediump float) +0:98 Function Definition: foo236( ( global void) +0:98 Function Parameters: +0:100 Sequence +0:100 dPdx ( global mediump 4-component vector of float) +0:100 direct index ( smooth temp mediump 4-component vector of float) +0:100 'v' ( smooth in 3-element array of mediump 4-component vector of float) +0:100 Constant: +0:100 0 (const int) +0:101 Constant: +0:101 0.000000 +0:102 fwidth ( global mediump float) +0:102 'f13' ( invariant global mediump float) +0:103 move second child to first child ( temp mediump float) +0:103 'gl_FragDepth' ( temp mediump float) +0:103 'f13' ( invariant global mediump float) +0:104 move second child to first child ( temp highp float) +0:104 'gl_FragDepthEXT' ( gl_FragDepth highp float FragDepth) +0:104 'f13' ( invariant global mediump float) +0:109 Function Definition: foo239( ( global void) +0:109 Function Parameters: +0:111 Sequence +0:111 move second child to first child ( temp mediump float) +0:111 'gl_FragDepth' ( temp mediump float) +0:111 'f13' ( invariant global mediump float) +0:112 move second child to first child ( temp highp float) +0:112 'gl_FragDepthEXT' ( gl_FragDepth highp float FragDepth) +0:112 'f13' ( invariant global mediump float) +0:119 Function Definition: foo245( ( global void) +0:119 Function Parameters: +0:121 Sequence +0:121 texture ( global lowp 4-component vector of float) +0:121 'sExt' ( uniform lowp samplerExternalOES) +0:121 Constant: +0:121 0.200000 +0:121 0.200000 +0:122 textureProj ( global lowp 4-component vector of float) +0:122 'sExt' ( uniform lowp samplerExternalOES) +0:122 Construct vec3 ( temp lowp 3-component vector of float) +0:122 'f13' ( invariant global mediump float) +0:123 textureProj ( global lowp 4-component vector of float, operation at mediump) +0:123 'sExt' ( uniform lowp samplerExternalOES) +0:123 direct index ( smooth temp mediump 4-component vector of float) +0:123 'v' ( smooth in 3-element array of mediump 4-component vector of float) +0:123 Constant: +0:123 2 (const int) +0:130 Function Definition: foo246( ( global void) +0:130 Function Parameters: +0:132 Sequence +0:132 texture ( global mediump 4-component vector of float) +0:132 'mediumExt' ( uniform mediump samplerExternalOES) +0:132 Constant: +0:132 0.200000 +0:132 0.200000 +0:133 textureProj ( global highp 4-component vector of float) +0:133 'highExt' ( uniform highp samplerExternalOES) +0:133 direct index ( smooth temp mediump 4-component vector of float) +0:133 'v' ( smooth in 3-element array of mediump 4-component vector of float) +0:133 Constant: +0:133 2 (const int) +0:134 Constant: +0:134 0.000000 +0:135 Constant: +0:135 0.000000 +0:137 Bitwise not ( temp mediump int) +0:137 'a' ( temp mediump int) +0:138 inclusive-or ( temp mediump int) +0:138 'a' ( temp mediump int) +0:138 'a' ( temp mediump int) +0:139 bitwise and ( temp mediump int) +0:139 'a' ( temp mediump int) +0:139 'a' ( temp mediump int) +0:145 Function Definition: foo203940(i1;f1;f1; ( global mediump int) +0:145 Function Parameters: +0:145 'a' ( in mediump int) +0:145 'b' ( in mediump float) +0:147 Sequence +0:147 textureProjGrad ( global lowp 4-component vector of float, operation at mediump) +0:147 's2Dg' ( uniform lowp sampler2D) +0:147 Construct vec3 ( temp mediump 3-component vector of float) +0:147 'f13' ( invariant global mediump float) +0:147 'uv2' ( invariant uniform mediump 2-component vector of float) +0:147 'uv2' ( invariant uniform mediump 2-component vector of float) +0:148 Branch: Return with expression +0:148 'a' ( in mediump int) +0:151 Sequence +0:151 move second child to first child ( temp mediump float) +0:151 'f123' ( global mediump float) +0:151 Constant: +0:151 4.000000 +0:152 Sequence +0:152 move second child to first child ( temp mediump float) +0:152 'f124' ( global mediump float) +0:152 Constant: +0:152 50000000000.000000 +0:158 Function Definition: foo323433( ( global void) +0:158 Function Parameters: +0:160 Sequence +0:160 textureLod ( global lowp 4-component vector of float, operation at mediump) +0:160 's2Dg' ( uniform lowp sampler2D) +0:160 'uv2' ( invariant uniform mediump 2-component vector of float) +0:160 'f13' ( invariant global mediump float) +0:161 textureProjGrad ( global lowp 4-component vector of float, operation at mediump) +0:161 's2Dg' ( uniform lowp sampler2D) +0:161 Construct vec3 ( temp mediump 3-component vector of float) +0:161 'f13' ( invariant global mediump float) +0:161 'uv2' ( invariant uniform mediump 2-component vector of float) +0:161 'uv2' ( invariant uniform mediump 2-component vector of float) +0:162 textureGrad ( global lowp 4-component vector of float, operation at mediump) +0:162 's2Dg' ( uniform lowp sampler2D) +0:162 'uv2' ( invariant uniform mediump 2-component vector of float) +0:162 'uv2' ( invariant uniform mediump 2-component vector of float) +0:162 'uv2' ( invariant uniform mediump 2-component vector of float) +0:163 textureGrad ( global lowp 4-component vector of float) +0:163 'sCube' ( uniform lowp samplerCube) +0:163 Construct vec3 ( temp lowp 3-component vector of float) +0:163 'f13' ( invariant global mediump float) +0:163 Construct vec3 ( temp lowp 3-component vector of float) +0:163 'f13' ( invariant global mediump float) +0:163 Construct vec3 ( temp lowp 3-component vector of float) +0:163 'f13' ( invariant global mediump float) +0:167 Function Definition: fgfg(f1;i1; ( global mediump int) +0:167 Function Parameters: +0:167 'f' ( in mediump float) +0:167 'i' ( in highp int) +0:167 Sequence +0:167 Branch: Return with expression +0:167 Constant: +0:167 2 (const int) +0:173 Function Definition: gggf(f1; ( global mediump int) +0:173 Function Parameters: +0:173 'f' ( in mediump float) +0:173 Sequence +0:173 Branch: Return with expression +0:173 Constant: +0:173 2 (const int) +0:175 Function Definition: agggf(f1; ( global mediump int) +0:175 Function Parameters: +0:175 'f' ( in mediump float) +0:175 Sequence +0:175 Branch: Return with expression +0:175 Constant: +0:175 2 (const int) +0:187 Function Definition: badswizzle( ( global void) +0:187 Function Parameters: +0:? Sequence +0:190 'a' ( temp 5-element array of mediump 3-component vector of float) +0:191 'a' ( temp 5-element array of mediump 3-component vector of float) +0:192 'a' ( temp 5-element array of mediump 3-component vector of float) +0:193 Constant: +0:193 5 (const int) +0:194 Constant: +0:194 0.000000 +0:199 Function Definition: fooinittest( ( global mediump float) +0:199 Function Parameters: +0:201 Sequence +0:201 Branch: Return with expression +0:201 Function Call: fooinit( ( global mediump float) +0:209 Function Definition: fooinit( ( global mediump float) +0:209 Function Parameters: +0:211 Sequence +0:211 Branch: Return with expression +0:211 Constant: +0:211 12.000000 +0:214 Sequence +0:214 move second child to first child ( temp mediump int) +0:214 'init1' ( global mediump int) +0:214 Test condition and select ( temp mediump int) +0:214 Condition +0:214 'gl_FrontFacing' ( gl_FrontFacing bool Face) +0:214 true case +0:214 Constant: +0:214 1 (const int) +0:214 false case +0:214 Constant: +0:214 2 (const int) +0:220 Sequence +0:220 move second child to first child ( temp mediump int) +0:220 'init2' ( global mediump int) +0:220 Test condition and select ( temp mediump int) +0:220 Condition +0:220 'gl_FrontFacing' ( gl_FrontFacing bool Face) +0:220 true case +0:220 Constant: +0:220 1 (const int) +0:220 false case +0:220 Constant: +0:220 2 (const int) +0:? Linker Objects +0:? 'a' ( global 3-element array of mediump int) +0:? 'uint' ( global mediump int) +0:? 'v' ( smooth in 3-element array of mediump 4-component vector of float) +0:? 'f' ( invariant global mediump float) +0:? 'anon@0' (layout( column_major shared) uniform block{layout( column_major shared) uniform mediump int x}) +0:? 'fa' ( global implicitly-sized array of mediump float) +0:? 'f13' ( invariant global mediump float) +0:? 'fi' ( invariant temp mediump float) +0:? 'av' ( invariant smooth in mediump 4-component vector of float) +0:? 'uv2' ( invariant uniform mediump 2-component vector of float) +0:? 'uv3' ( invariant uniform mediump 3-component vector of float) +0:? 'glob2D' ( global lowp sampler2D) +0:? 'vary2D' ( smooth in lowp sampler2D) +0:? 's3D' ( uniform mediump sampler3D) +0:? 's3D2' ( uniform highp sampler3D) +0:? 'sExt' ( uniform lowp samplerExternalOES) +0:? 'mediumExt' ( uniform mediump samplerExternalOES) +0:? 'highExt' ( uniform highp samplerExternalOES) +0:? 's2Dg' ( uniform lowp sampler2D) +0:? 'f123' ( global mediump float) +0:? 'f124' ( global mediump float) +0:? 'sCube' ( uniform lowp samplerCube) +0:? 's' ( smooth in structure{ global mediump float f}) +0:? 'fi1' ( const mediump float) +0:? 3.000000 +0:? 'fi2' ( const mediump float) +0:? 4.000000 +0:? 'fi3' ( const mediump float) +0:? 5.000000 +0:? 'init1' ( global mediump int) +0:? 'init2' ( global mediump int) + + +Linked fragment stage: + + +Shader version: 100 +Requested GL_EXT_frag_depth +Requested GL_EXT_shader_non_constant_global_initializers +Requested GL_EXT_shader_texture_lod +Requested GL_OES_EGL_image_external +Requested GL_OES_standard_derivatives +Requested GL_OES_texture_3D +ERROR: node is still EOpNull! +0:3 Sequence +0:3 move second child to first child ( temp 3-element array of mediump int) +0:3 'a' ( global 3-element array of mediump int) +0:3 Constant: +0:3 2 (const int) +0:3 3 (const int) +0:3 4 (const int) +0:17 Function Definition: main( ( global void) +0:17 Function Parameters: +0:19 Sequence +0:19 Constant: +0:19 0.000000 +0:20 Sequence +0:20 move second child to first child ( temp mediump int) +0:20 's' ( temp mediump int) +0:20 Constant: +0:20 16 (const int) +0:21 move second child to first child ( temp mediump int) +0:21 's' ( temp mediump int) +0:21 Constant: +0:21 4 (const int) +0:22 Test condition and select ( temp void) +0:22 Condition +0:22 Compare Equal ( temp bool) +0:22 'a' ( global 3-element array of mediump int) +0:22 'a' ( global 3-element array of mediump int) +0:22 true case is null +0:24 move second child to first child ( temp mediump int) +0:24 'b' ( temp mediump int) +0:24 bitwise and ( temp mediump int) +0:24 'c' ( temp mediump int) +0:24 Constant: +0:24 4 (const int) +0:25 move second child to first child ( temp mediump int) +0:25 'b' ( temp mediump int) +0:25 mod ( temp mediump int) +0:25 'c' ( temp mediump int) +0:25 Constant: +0:25 4 (const int) +0:26 move second child to first child ( temp mediump int) +0:26 'b' ( temp mediump int) +0:26 inclusive-or ( temp mediump int) +0:26 'c' ( temp mediump int) +0:26 Constant: +0:26 4 (const int) +0:27 right shift second child into first child ( temp mediump int) +0:27 'b' ( temp mediump int) +0:27 Constant: +0:27 2 (const int) +0:28 left shift second child into first child ( temp mediump int) +0:28 'b' ( temp mediump int) +0:28 Constant: +0:28 2 (const int) +0:29 mod second child into first child ( temp mediump int) +0:29 'b' ( temp mediump int) +0:29 Constant: +0:29 3 (const int) +0:36 move second child to first child ( temp structure{ temp mediump float f, temp 10-element array of mediump float a}) +0:36 's1' ( temp structure{ temp mediump float f, temp 10-element array of mediump float a}) +0:36 's2' ( temp structure{ temp mediump float f, temp 10-element array of mediump float a}) +0:37 Test condition and select ( temp void) +0:37 Condition +0:37 Compare Equal ( temp bool) +0:37 's1' ( temp structure{ temp mediump float f, temp 10-element array of mediump float a}) +0:37 's2' ( temp structure{ temp mediump float f, temp 10-element array of mediump float a}) +0:37 true case is null +0:38 Test condition and select ( temp void) +0:38 Condition +0:38 Compare Not Equal ( temp bool) +0:38 's1' ( temp structure{ temp mediump float f, temp 10-element array of mediump float a}) +0:38 's2' ( temp structure{ temp mediump float f, temp 10-element array of mediump float a}) +0:38 true case is null +0:40 'b' ( temp mediump int) +0:151 Sequence +0:151 move second child to first child ( temp mediump float) +0:151 'f123' ( global mediump float) +0:151 Constant: +0:151 4.000000 +0:152 Sequence +0:152 move second child to first child ( temp mediump float) +0:152 'f124' ( global mediump float) +0:152 Constant: +0:152 50000000000.000000 +0:214 Sequence +0:214 move second child to first child ( temp mediump int) +0:214 'init1' ( global mediump int) +0:214 Test condition and select ( temp mediump int) +0:214 Condition +0:214 'gl_FrontFacing' ( gl_FrontFacing bool Face) +0:214 true case +0:214 Constant: +0:214 1 (const int) +0:214 false case +0:214 Constant: +0:214 2 (const int) +0:220 Sequence +0:220 move second child to first child ( temp mediump int) +0:220 'init2' ( global mediump int) +0:220 Test condition and select ( temp mediump int) +0:220 Condition +0:220 'gl_FrontFacing' ( gl_FrontFacing bool Face) +0:220 true case +0:220 Constant: +0:220 1 (const int) +0:220 false case +0:220 Constant: +0:220 2 (const int) +0:? Linker Objects +0:? 'a' ( global 3-element array of mediump int) +0:? 'uint' ( global mediump int) +0:? 'v' ( smooth in 3-element array of mediump 4-component vector of float) +0:? 'f' ( invariant global mediump float) +0:? 'anon@0' (layout( column_major shared) uniform block{layout( column_major shared) uniform mediump int x}) +0:? 'fa' ( global 1-element array of mediump float) +0:? 'f13' ( invariant global mediump float) +0:? 'fi' ( invariant temp mediump float) +0:? 'av' ( invariant smooth in mediump 4-component vector of float) +0:? 'uv2' ( invariant uniform mediump 2-component vector of float) +0:? 'uv3' ( invariant uniform mediump 3-component vector of float) +0:? 'glob2D' ( global lowp sampler2D) +0:? 'vary2D' ( smooth in lowp sampler2D) +0:? 's3D' ( uniform mediump sampler3D) +0:? 's3D2' ( uniform highp sampler3D) +0:? 'sExt' ( uniform lowp samplerExternalOES) +0:? 'mediumExt' ( uniform mediump samplerExternalOES) +0:? 'highExt' ( uniform highp samplerExternalOES) +0:? 's2Dg' ( uniform lowp sampler2D) +0:? 'f123' ( global mediump float) +0:? 'f124' ( global mediump float) +0:? 'sCube' ( uniform lowp samplerCube) +0:? 's' ( smooth in structure{ global mediump float f}) +0:? 'fi1' ( const mediump float) +0:? 3.000000 +0:? 'fi2' ( const mediump float) +0:? 4.000000 +0:? 'fi3' ( const mediump float) +0:? 5.000000 +0:? 'init1' ( global mediump int) +0:? 'init2' ( global mediump int) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/100Limits.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/100Limits.vert.out new file mode 100644 index 0000000..ab0ff1e --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/100Limits.vert.out @@ -0,0 +1,889 @@ +100Limits.vert +Shader version: 100 +0:? Sequence +0:15 Function Definition: foo(f1; ( global void) +0:15 Function Parameters: +0:15 'a' ( inout highp float) +0:17 Function Definition: bar( ( global highp int) +0:17 Function Parameters: +0:19 Sequence +0:19 Branch: Return with expression +0:19 Constant: +0:19 1 (const int) +0:22 Function Definition: main( ( global void) +0:22 Function Parameters: +0:24 Sequence +0:24 Loop with condition tested first +0:24 Loop Condition +0:24 Compare Less Than ( temp bool) +0:24 'ga' ( global highp int) +0:24 'gb' ( global highp int) +0:24 No loop body +0:26 Loop with condition not tested first +0:26 Loop Condition +0:26 Constant: +0:26 false (const bool) +0:26 No loop body +0:28 Sequence +0:28 Loop with condition tested first +0:28 No loop condition +0:28 No loop body +0:29 Sequence +0:29 Loop with condition tested first +0:29 Loop Condition +0:29 Compare Equal ( temp bool) +0:29 'ga' ( global highp int) +0:29 'gb' ( global highp int) +0:29 No loop body +0:30 Sequence +0:30 Loop with condition tested first +0:30 No loop condition +0:30 No loop body +0:30 Loop Terminal Expression +0:30 Post-Increment ( temp highp float) +0:30 'f' ( global highp float) +0:31 Sequence +0:31 move second child to first child ( temp highp int) +0:31 'ga' ( global highp int) +0:31 Constant: +0:31 0 (const int) +0:31 Loop with condition tested first +0:31 No loop condition +0:31 No loop body +0:32 Sequence +0:32 Sequence +0:32 move second child to first child ( temp bool) +0:32 'a' ( temp bool) +0:32 Constant: +0:32 false (const bool) +0:32 Loop with condition tested first +0:32 No loop condition +0:32 No loop body +0:33 Sequence +0:33 Sequence +0:33 move second child to first child ( temp highp float) +0:33 'a' ( temp highp float) +0:33 Constant: +0:33 0.000000 +0:33 Loop with condition tested first +0:33 Loop Condition +0:33 Compare Equal ( temp bool) +0:33 'a' ( temp highp float) +0:33 sine ( global highp float) +0:33 'f' ( global highp float) +0:33 No loop body +0:34 Sequence +0:34 Sequence +0:34 move second child to first child ( temp highp int) +0:34 'a' ( temp highp int) +0:34 Constant: +0:34 0 (const int) +0:34 Loop with condition tested first +0:34 Loop Condition +0:34 Compare Less Than ( temp bool) +0:34 'a' ( temp highp int) +0:34 Constant: +0:34 10 (const int) +0:34 No loop body +0:34 Loop Terminal Expression +0:34 multiply second child into first child ( temp highp int) +0:34 'a' ( temp highp int) +0:34 Constant: +0:34 2 (const int) +0:35 Sequence +0:35 Sequence +0:35 move second child to first child ( temp highp int) +0:35 'a' ( temp highp int) +0:35 Constant: +0:35 0 (const int) +0:35 Loop with condition tested first +0:35 Loop Condition +0:35 Compare Less Than or Equal ( temp bool) +0:35 'a' ( temp highp int) +0:35 Constant: +0:35 20 (const int) +0:35 Loop Body +0:35 Pre-Decrement ( temp highp int) +0:35 'a' ( temp highp int) +0:35 Loop Terminal Expression +0:35 Post-Increment ( temp highp int) +0:35 'a' ( temp highp int) +0:36 Sequence +0:36 Sequence +0:36 move second child to first child ( temp highp int) +0:36 'a' ( temp highp int) +0:36 Constant: +0:36 0 (const int) +0:36 Loop with condition tested first +0:36 Loop Condition +0:36 Compare Less Than or Equal ( temp bool) +0:36 'a' ( temp highp int) +0:36 Constant: +0:36 20 (const int) +0:36 Loop Body +0:36 Sequence +0:36 Test condition and select ( temp void) +0:36 Condition +0:36 Compare Equal ( temp bool) +0:36 'ga' ( global highp int) +0:36 Constant: +0:36 0 (const int) +0:36 true case +0:36 move second child to first child ( temp highp int) +0:36 'a' ( temp highp int) +0:36 Constant: +0:36 4 (const int) +0:36 Loop Terminal Expression +0:36 Post-Increment ( temp highp int) +0:36 'a' ( temp highp int) +0:37 Sequence +0:37 Sequence +0:37 move second child to first child ( temp highp float) +0:37 'a' ( temp highp float) +0:37 Constant: +0:37 0.000000 +0:37 Loop with condition tested first +0:37 Loop Condition +0:37 Compare Less Than or Equal ( temp bool) +0:37 'a' ( temp highp float) +0:37 Constant: +0:37 20.000000 +0:37 No loop body +0:37 Loop Terminal Expression +0:37 add second child into first child ( temp highp float) +0:37 'a' ( temp highp float) +0:37 Constant: +0:37 2.000000 +0:38 Sequence +0:38 Sequence +0:38 move second child to first child ( temp highp float) +0:38 'a' ( temp highp float) +0:38 Constant: +0:38 0.000000 +0:38 Loop with condition tested first +0:38 Loop Condition +0:38 Compare Not Equal ( temp bool) +0:38 'a' ( temp highp float) +0:38 Constant: +0:38 20.000000 +0:38 Loop Body +0:38 Sequence +0:38 Test condition and select ( temp void) +0:38 Condition +0:38 Compare Equal ( temp bool) +0:38 'ga' ( global highp int) +0:38 Constant: +0:38 0 (const int) +0:38 true case +0:38 move second child to first child ( temp highp int) +0:38 'ga' ( global highp int) +0:38 Constant: +0:38 4 (const int) +0:38 Loop Terminal Expression +0:38 subtract second child into first child ( temp highp float) +0:38 'a' ( temp highp float) +0:38 Constant: +0:38 2.000000 +0:39 Sequence +0:39 Sequence +0:39 move second child to first child ( temp highp float) +0:39 'a' ( temp highp float) +0:39 Constant: +0:39 0.000000 +0:39 Loop with condition tested first +0:39 Loop Condition +0:39 Compare Equal ( temp bool) +0:39 'a' ( temp highp float) +0:39 Constant: +0:39 20.000000 +0:39 Loop Body +0:39 Sequence +0:39 Sequence +0:39 move second child to first child ( temp highp float) +0:39 'a' ( temp highp float) +0:39 Constant: +0:39 0.000000 +0:39 Loop with condition tested first +0:39 Loop Condition +0:39 Compare Equal ( temp bool) +0:39 'a' ( temp highp float) +0:39 Constant: +0:39 20.000000 +0:39 No loop body +0:39 Loop Terminal Expression +0:39 Post-Decrement ( temp highp float) +0:39 'a' ( temp highp float) +0:39 Loop Terminal Expression +0:39 Post-Decrement ( temp highp float) +0:39 'a' ( temp highp float) +0:40 Sequence +0:40 Sequence +0:40 move second child to first child ( temp highp float) +0:40 'a' ( temp highp float) +0:40 Constant: +0:40 0.000000 +0:40 Loop with condition tested first +0:40 Loop Condition +0:40 Compare Less Than or Equal ( temp bool) +0:40 'a' ( temp highp float) +0:40 Constant: +0:40 20.000000 +0:40 No loop body +0:40 Loop Terminal Expression +0:40 add second child into first child ( temp highp float) +0:40 'a' ( temp highp float) +0:40 Constant: +0:40 2.000000 +0:41 Sequence +0:41 Sequence +0:41 move second child to first child ( temp highp float) +0:41 'a' ( temp highp float) +0:41 Constant: +0:41 0.000000 +0:41 Loop with condition tested first +0:41 Loop Condition +0:41 Compare Less Than or Equal ( temp bool) +0:41 'a' ( temp highp float) +0:41 Constant: +0:41 20.000000 +0:41 No loop body +0:41 Loop Terminal Expression +0:41 add second child into first child ( temp highp float) +0:41 'a' ( temp highp float) +0:41 Constant: +0:41 2.000000 +0:42 Sequence +0:42 Sequence +0:42 move second child to first child ( temp highp float) +0:42 'a' ( temp highp float) +0:42 Constant: +0:42 0.000000 +0:42 Loop with condition tested first +0:42 Loop Condition +0:42 Compare Greater Than ( temp bool) +0:42 'a' ( temp highp float) +0:42 Constant: +0:42 40.000000 +0:42 No loop body +0:42 Loop Terminal Expression +0:42 add second child into first child ( temp highp float) +0:42 'a' ( temp highp float) +0:42 Constant: +0:42 2.000000 +0:43 Sequence +0:43 Sequence +0:43 move second child to first child ( temp highp float) +0:43 'a' ( temp highp float) +0:43 Constant: +0:43 0.000000 +0:43 Loop with condition tested first +0:43 Loop Condition +0:43 Compare Greater Than or Equal ( temp bool) +0:43 'a' ( temp highp float) +0:43 Constant: +0:43 20.000000 +0:43 Loop Body +0:43 Function Call: foo(f1; ( global void) +0:43 'a' ( temp highp float) +0:43 Loop Terminal Expression +0:43 add second child into first child ( temp highp float) +0:43 'a' ( temp highp float) +0:43 Constant: +0:43 2.000000 +0:47 indirect index ( temp lowp sampler2D) +0:47 'fsa' ( uniform 3-element array of lowp sampler2D) +0:47 'ga' ( global highp int) +0:48 indirect index ( temp highp float) +0:48 'fua' ( uniform 10-element array of highp float) +0:48 'ga' ( global highp int) +0:49 indirect index ( temp highp 3-component vector of float) +0:49 'am3' ( in highp 3X3 matrix of float) +0:49 'ga' ( global highp int) +0:50 indirect index ( temp highp float) +0:50 'av2' ( in highp 2-component vector of float) +0:50 'ga' ( global highp int) +0:51 indirect index ( smooth temp highp 4-component vector of float) +0:51 'va' ( smooth out 4-element array of highp 4-component vector of float) +0:51 add ( temp highp int) +0:51 Constant: +0:51 2 (const int) +0:51 'ga' ( global highp int) +0:52 indirect index ( temp highp 2-component vector of float) +0:52 Constant: +0:52 1.000000 +0:52 0.000000 +0:52 0.000000 +0:52 1.000000 +0:52 'ga' ( global highp int) +0:53 indirect index ( temp highp float) +0:53 Constant: +0:53 2.000000 +0:53 2.000000 +0:53 2.000000 +0:53 divide ( temp highp int) +0:53 'ga' ( global highp int) +0:53 Constant: +0:53 2 (const int) +0:54 indirect index ( temp highp int) +0:54 'ia' ( temp 9-element array of highp int) +0:54 'ga' ( global highp int) +0:56 Sequence +0:56 Sequence +0:56 move second child to first child ( temp highp int) +0:56 'a' ( temp highp int) +0:56 Constant: +0:56 3 (const int) +0:56 Loop with condition tested first +0:56 Loop Condition +0:56 Compare Greater Than or Equal ( temp bool) +0:56 'a' ( temp highp int) +0:56 Constant: +0:56 0 (const int) +0:56 Loop Body +0:57 Sequence +0:57 indirect index ( temp lowp sampler2D) +0:57 'fsa' ( uniform 3-element array of lowp sampler2D) +0:57 'a' ( temp highp int) +0:58 indirect index ( temp highp float) +0:58 'fua' ( uniform 10-element array of highp float) +0:58 add ( temp highp int) +0:58 'a' ( temp highp int) +0:58 Constant: +0:58 2 (const int) +0:59 indirect index ( temp highp 3-component vector of float) +0:59 'am3' ( in highp 3X3 matrix of float) +0:59 component-wise multiply ( temp highp int) +0:59 Constant: +0:59 3 (const int) +0:59 'a' ( temp highp int) +0:60 indirect index ( temp highp float) +0:60 'av2' ( in highp 2-component vector of float) +0:60 component-wise multiply ( temp highp int) +0:60 Constant: +0:60 3 (const int) +0:60 'a' ( temp highp int) +0:61 indirect index ( smooth temp highp 4-component vector of float) +0:61 'va' ( smooth out 4-element array of highp 4-component vector of float) +0:61 subtract ( temp highp int) +0:61 'a' ( temp highp int) +0:61 Constant: +0:61 1 (const int) +0:62 indirect index ( temp highp 2-component vector of float) +0:62 Constant: +0:62 1.000000 +0:62 0.000000 +0:62 0.000000 +0:62 1.000000 +0:62 divide ( temp highp int) +0:62 'a' ( temp highp int) +0:62 Constant: +0:62 2 (const int) +0:63 indirect index ( temp highp float) +0:63 Constant: +0:63 2.000000 +0:63 2.000000 +0:63 2.000000 +0:63 'a' ( temp highp int) +0:64 indirect index ( temp highp int) +0:64 'ia' ( temp 9-element array of highp int) +0:64 'a' ( temp highp int) +0:65 indirect index ( temp highp int) +0:65 'ia' ( temp 9-element array of highp int) +0:65 Function Call: bar( ( global highp int) +0:56 Loop Terminal Expression +0:56 Post-Decrement ( temp highp int) +0:56 'a' ( temp highp int) +0:68 direct index ( temp lowp sampler2D) +0:68 'fsa' ( uniform 3-element array of lowp sampler2D) +0:68 Constant: +0:68 2 (const int) +0:69 direct index ( temp highp float) +0:69 'fua' ( uniform 10-element array of highp float) +0:69 Constant: +0:69 3 (const int) +0:70 direct index ( temp highp 3-component vector of float) +0:70 'am3' ( in highp 3X3 matrix of float) +0:70 Constant: +0:70 2 (const int) +0:71 direct index ( temp highp float) +0:71 'av2' ( in highp 2-component vector of float) +0:71 Constant: +0:71 1 (const int) +0:72 direct index ( smooth temp highp 4-component vector of float) +0:72 'va' ( smooth out 4-element array of highp 4-component vector of float) +0:72 Constant: +0:72 1 (const int) +0:73 Constant: +0:73 0.000000 +0:73 1.000000 +0:74 Constant: +0:74 2.000000 +0:75 direct index ( temp highp int) +0:75 'ia' ( temp 9-element array of highp int) +0:75 Constant: +0:75 3 (const int) +0:? Linker Objects +0:? 'ga' ( global highp int) +0:? 'gb' ( global highp int) +0:? 'f' ( global highp float) +0:? 'fsa' ( uniform 3-element array of lowp sampler2D) +0:? 'fua' ( uniform 10-element array of highp float) +0:? 'am3' ( in highp 3X3 matrix of float) +0:? 'av2' ( in highp 2-component vector of float) +0:? 'va' ( smooth out 4-element array of highp 4-component vector of float) +0:? 'm2' ( const highp 2X2 matrix of float) +0:? 1.000000 +0:? 0.000000 +0:? 0.000000 +0:? 1.000000 +0:? 'v3' ( const highp 3-component vector of float) +0:? 2.000000 +0:? 2.000000 +0:? 2.000000 + + +Linked vertex stage: + + +Shader version: 100 +0:? Sequence +0:15 Function Definition: foo(f1; ( global void) +0:15 Function Parameters: +0:15 'a' ( inout highp float) +0:17 Function Definition: bar( ( global highp int) +0:17 Function Parameters: +0:19 Sequence +0:19 Branch: Return with expression +0:19 Constant: +0:19 1 (const int) +0:22 Function Definition: main( ( global void) +0:22 Function Parameters: +0:24 Sequence +0:24 Loop with condition tested first +0:24 Loop Condition +0:24 Compare Less Than ( temp bool) +0:24 'ga' ( global highp int) +0:24 'gb' ( global highp int) +0:24 No loop body +0:26 Loop with condition not tested first +0:26 Loop Condition +0:26 Constant: +0:26 false (const bool) +0:26 No loop body +0:28 Sequence +0:28 Loop with condition tested first +0:28 No loop condition +0:28 No loop body +0:29 Sequence +0:29 Loop with condition tested first +0:29 Loop Condition +0:29 Compare Equal ( temp bool) +0:29 'ga' ( global highp int) +0:29 'gb' ( global highp int) +0:29 No loop body +0:30 Sequence +0:30 Loop with condition tested first +0:30 No loop condition +0:30 No loop body +0:30 Loop Terminal Expression +0:30 Post-Increment ( temp highp float) +0:30 'f' ( global highp float) +0:31 Sequence +0:31 move second child to first child ( temp highp int) +0:31 'ga' ( global highp int) +0:31 Constant: +0:31 0 (const int) +0:31 Loop with condition tested first +0:31 No loop condition +0:31 No loop body +0:32 Sequence +0:32 Sequence +0:32 move second child to first child ( temp bool) +0:32 'a' ( temp bool) +0:32 Constant: +0:32 false (const bool) +0:32 Loop with condition tested first +0:32 No loop condition +0:32 No loop body +0:33 Sequence +0:33 Sequence +0:33 move second child to first child ( temp highp float) +0:33 'a' ( temp highp float) +0:33 Constant: +0:33 0.000000 +0:33 Loop with condition tested first +0:33 Loop Condition +0:33 Compare Equal ( temp bool) +0:33 'a' ( temp highp float) +0:33 sine ( global highp float) +0:33 'f' ( global highp float) +0:33 No loop body +0:34 Sequence +0:34 Sequence +0:34 move second child to first child ( temp highp int) +0:34 'a' ( temp highp int) +0:34 Constant: +0:34 0 (const int) +0:34 Loop with condition tested first +0:34 Loop Condition +0:34 Compare Less Than ( temp bool) +0:34 'a' ( temp highp int) +0:34 Constant: +0:34 10 (const int) +0:34 No loop body +0:34 Loop Terminal Expression +0:34 multiply second child into first child ( temp highp int) +0:34 'a' ( temp highp int) +0:34 Constant: +0:34 2 (const int) +0:35 Sequence +0:35 Sequence +0:35 move second child to first child ( temp highp int) +0:35 'a' ( temp highp int) +0:35 Constant: +0:35 0 (const int) +0:35 Loop with condition tested first +0:35 Loop Condition +0:35 Compare Less Than or Equal ( temp bool) +0:35 'a' ( temp highp int) +0:35 Constant: +0:35 20 (const int) +0:35 Loop Body +0:35 Pre-Decrement ( temp highp int) +0:35 'a' ( temp highp int) +0:35 Loop Terminal Expression +0:35 Post-Increment ( temp highp int) +0:35 'a' ( temp highp int) +0:36 Sequence +0:36 Sequence +0:36 move second child to first child ( temp highp int) +0:36 'a' ( temp highp int) +0:36 Constant: +0:36 0 (const int) +0:36 Loop with condition tested first +0:36 Loop Condition +0:36 Compare Less Than or Equal ( temp bool) +0:36 'a' ( temp highp int) +0:36 Constant: +0:36 20 (const int) +0:36 Loop Body +0:36 Sequence +0:36 Test condition and select ( temp void) +0:36 Condition +0:36 Compare Equal ( temp bool) +0:36 'ga' ( global highp int) +0:36 Constant: +0:36 0 (const int) +0:36 true case +0:36 move second child to first child ( temp highp int) +0:36 'a' ( temp highp int) +0:36 Constant: +0:36 4 (const int) +0:36 Loop Terminal Expression +0:36 Post-Increment ( temp highp int) +0:36 'a' ( temp highp int) +0:37 Sequence +0:37 Sequence +0:37 move second child to first child ( temp highp float) +0:37 'a' ( temp highp float) +0:37 Constant: +0:37 0.000000 +0:37 Loop with condition tested first +0:37 Loop Condition +0:37 Compare Less Than or Equal ( temp bool) +0:37 'a' ( temp highp float) +0:37 Constant: +0:37 20.000000 +0:37 No loop body +0:37 Loop Terminal Expression +0:37 add second child into first child ( temp highp float) +0:37 'a' ( temp highp float) +0:37 Constant: +0:37 2.000000 +0:38 Sequence +0:38 Sequence +0:38 move second child to first child ( temp highp float) +0:38 'a' ( temp highp float) +0:38 Constant: +0:38 0.000000 +0:38 Loop with condition tested first +0:38 Loop Condition +0:38 Compare Not Equal ( temp bool) +0:38 'a' ( temp highp float) +0:38 Constant: +0:38 20.000000 +0:38 Loop Body +0:38 Sequence +0:38 Test condition and select ( temp void) +0:38 Condition +0:38 Compare Equal ( temp bool) +0:38 'ga' ( global highp int) +0:38 Constant: +0:38 0 (const int) +0:38 true case +0:38 move second child to first child ( temp highp int) +0:38 'ga' ( global highp int) +0:38 Constant: +0:38 4 (const int) +0:38 Loop Terminal Expression +0:38 subtract second child into first child ( temp highp float) +0:38 'a' ( temp highp float) +0:38 Constant: +0:38 2.000000 +0:39 Sequence +0:39 Sequence +0:39 move second child to first child ( temp highp float) +0:39 'a' ( temp highp float) +0:39 Constant: +0:39 0.000000 +0:39 Loop with condition tested first +0:39 Loop Condition +0:39 Compare Equal ( temp bool) +0:39 'a' ( temp highp float) +0:39 Constant: +0:39 20.000000 +0:39 Loop Body +0:39 Sequence +0:39 Sequence +0:39 move second child to first child ( temp highp float) +0:39 'a' ( temp highp float) +0:39 Constant: +0:39 0.000000 +0:39 Loop with condition tested first +0:39 Loop Condition +0:39 Compare Equal ( temp bool) +0:39 'a' ( temp highp float) +0:39 Constant: +0:39 20.000000 +0:39 No loop body +0:39 Loop Terminal Expression +0:39 Post-Decrement ( temp highp float) +0:39 'a' ( temp highp float) +0:39 Loop Terminal Expression +0:39 Post-Decrement ( temp highp float) +0:39 'a' ( temp highp float) +0:40 Sequence +0:40 Sequence +0:40 move second child to first child ( temp highp float) +0:40 'a' ( temp highp float) +0:40 Constant: +0:40 0.000000 +0:40 Loop with condition tested first +0:40 Loop Condition +0:40 Compare Less Than or Equal ( temp bool) +0:40 'a' ( temp highp float) +0:40 Constant: +0:40 20.000000 +0:40 No loop body +0:40 Loop Terminal Expression +0:40 add second child into first child ( temp highp float) +0:40 'a' ( temp highp float) +0:40 Constant: +0:40 2.000000 +0:41 Sequence +0:41 Sequence +0:41 move second child to first child ( temp highp float) +0:41 'a' ( temp highp float) +0:41 Constant: +0:41 0.000000 +0:41 Loop with condition tested first +0:41 Loop Condition +0:41 Compare Less Than or Equal ( temp bool) +0:41 'a' ( temp highp float) +0:41 Constant: +0:41 20.000000 +0:41 No loop body +0:41 Loop Terminal Expression +0:41 add second child into first child ( temp highp float) +0:41 'a' ( temp highp float) +0:41 Constant: +0:41 2.000000 +0:42 Sequence +0:42 Sequence +0:42 move second child to first child ( temp highp float) +0:42 'a' ( temp highp float) +0:42 Constant: +0:42 0.000000 +0:42 Loop with condition tested first +0:42 Loop Condition +0:42 Compare Greater Than ( temp bool) +0:42 'a' ( temp highp float) +0:42 Constant: +0:42 40.000000 +0:42 No loop body +0:42 Loop Terminal Expression +0:42 add second child into first child ( temp highp float) +0:42 'a' ( temp highp float) +0:42 Constant: +0:42 2.000000 +0:43 Sequence +0:43 Sequence +0:43 move second child to first child ( temp highp float) +0:43 'a' ( temp highp float) +0:43 Constant: +0:43 0.000000 +0:43 Loop with condition tested first +0:43 Loop Condition +0:43 Compare Greater Than or Equal ( temp bool) +0:43 'a' ( temp highp float) +0:43 Constant: +0:43 20.000000 +0:43 Loop Body +0:43 Function Call: foo(f1; ( global void) +0:43 'a' ( temp highp float) +0:43 Loop Terminal Expression +0:43 add second child into first child ( temp highp float) +0:43 'a' ( temp highp float) +0:43 Constant: +0:43 2.000000 +0:47 indirect index ( temp lowp sampler2D) +0:47 'fsa' ( uniform 3-element array of lowp sampler2D) +0:47 'ga' ( global highp int) +0:48 indirect index ( temp highp float) +0:48 'fua' ( uniform 10-element array of highp float) +0:48 'ga' ( global highp int) +0:49 indirect index ( temp highp 3-component vector of float) +0:49 'am3' ( in highp 3X3 matrix of float) +0:49 'ga' ( global highp int) +0:50 indirect index ( temp highp float) +0:50 'av2' ( in highp 2-component vector of float) +0:50 'ga' ( global highp int) +0:51 indirect index ( smooth temp highp 4-component vector of float) +0:51 'va' ( smooth out 4-element array of highp 4-component vector of float) +0:51 add ( temp highp int) +0:51 Constant: +0:51 2 (const int) +0:51 'ga' ( global highp int) +0:52 indirect index ( temp highp 2-component vector of float) +0:52 Constant: +0:52 1.000000 +0:52 0.000000 +0:52 0.000000 +0:52 1.000000 +0:52 'ga' ( global highp int) +0:53 indirect index ( temp highp float) +0:53 Constant: +0:53 2.000000 +0:53 2.000000 +0:53 2.000000 +0:53 divide ( temp highp int) +0:53 'ga' ( global highp int) +0:53 Constant: +0:53 2 (const int) +0:54 indirect index ( temp highp int) +0:54 'ia' ( temp 9-element array of highp int) +0:54 'ga' ( global highp int) +0:56 Sequence +0:56 Sequence +0:56 move second child to first child ( temp highp int) +0:56 'a' ( temp highp int) +0:56 Constant: +0:56 3 (const int) +0:56 Loop with condition tested first +0:56 Loop Condition +0:56 Compare Greater Than or Equal ( temp bool) +0:56 'a' ( temp highp int) +0:56 Constant: +0:56 0 (const int) +0:56 Loop Body +0:57 Sequence +0:57 indirect index ( temp lowp sampler2D) +0:57 'fsa' ( uniform 3-element array of lowp sampler2D) +0:57 'a' ( temp highp int) +0:58 indirect index ( temp highp float) +0:58 'fua' ( uniform 10-element array of highp float) +0:58 add ( temp highp int) +0:58 'a' ( temp highp int) +0:58 Constant: +0:58 2 (const int) +0:59 indirect index ( temp highp 3-component vector of float) +0:59 'am3' ( in highp 3X3 matrix of float) +0:59 component-wise multiply ( temp highp int) +0:59 Constant: +0:59 3 (const int) +0:59 'a' ( temp highp int) +0:60 indirect index ( temp highp float) +0:60 'av2' ( in highp 2-component vector of float) +0:60 component-wise multiply ( temp highp int) +0:60 Constant: +0:60 3 (const int) +0:60 'a' ( temp highp int) +0:61 indirect index ( smooth temp highp 4-component vector of float) +0:61 'va' ( smooth out 4-element array of highp 4-component vector of float) +0:61 subtract ( temp highp int) +0:61 'a' ( temp highp int) +0:61 Constant: +0:61 1 (const int) +0:62 indirect index ( temp highp 2-component vector of float) +0:62 Constant: +0:62 1.000000 +0:62 0.000000 +0:62 0.000000 +0:62 1.000000 +0:62 divide ( temp highp int) +0:62 'a' ( temp highp int) +0:62 Constant: +0:62 2 (const int) +0:63 indirect index ( temp highp float) +0:63 Constant: +0:63 2.000000 +0:63 2.000000 +0:63 2.000000 +0:63 'a' ( temp highp int) +0:64 indirect index ( temp highp int) +0:64 'ia' ( temp 9-element array of highp int) +0:64 'a' ( temp highp int) +0:65 indirect index ( temp highp int) +0:65 'ia' ( temp 9-element array of highp int) +0:65 Function Call: bar( ( global highp int) +0:56 Loop Terminal Expression +0:56 Post-Decrement ( temp highp int) +0:56 'a' ( temp highp int) +0:68 direct index ( temp lowp sampler2D) +0:68 'fsa' ( uniform 3-element array of lowp sampler2D) +0:68 Constant: +0:68 2 (const int) +0:69 direct index ( temp highp float) +0:69 'fua' ( uniform 10-element array of highp float) +0:69 Constant: +0:69 3 (const int) +0:70 direct index ( temp highp 3-component vector of float) +0:70 'am3' ( in highp 3X3 matrix of float) +0:70 Constant: +0:70 2 (const int) +0:71 direct index ( temp highp float) +0:71 'av2' ( in highp 2-component vector of float) +0:71 Constant: +0:71 1 (const int) +0:72 direct index ( smooth temp highp 4-component vector of float) +0:72 'va' ( smooth out 4-element array of highp 4-component vector of float) +0:72 Constant: +0:72 1 (const int) +0:73 Constant: +0:73 0.000000 +0:73 1.000000 +0:74 Constant: +0:74 2.000000 +0:75 direct index ( temp highp int) +0:75 'ia' ( temp 9-element array of highp int) +0:75 Constant: +0:75 3 (const int) +0:? Linker Objects +0:? 'ga' ( global highp int) +0:? 'gb' ( global highp int) +0:? 'f' ( global highp float) +0:? 'fsa' ( uniform 3-element array of lowp sampler2D) +0:? 'fua' ( uniform 10-element array of highp float) +0:? 'am3' ( in highp 3X3 matrix of float) +0:? 'av2' ( in highp 2-component vector of float) +0:? 'va' ( smooth out 4-element array of highp 4-component vector of float) +0:? 'm2' ( const highp 2X2 matrix of float) +0:? 1.000000 +0:? 0.000000 +0:? 0.000000 +0:? 1.000000 +0:? 'v3' ( const highp 3-component vector of float) +0:? 2.000000 +0:? 2.000000 +0:? 2.000000 + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/100LimitsConf.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/100LimitsConf.vert.out new file mode 100644 index 0000000..46cb845 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/100LimitsConf.vert.out @@ -0,0 +1,24 @@ +100Limits.vert +ERROR: 0:24: 'limitation' : while loops not available +ERROR: 0:26: 'limitation' : do-while loops not available +ERROR: 0:28: 'limitations' : inductive-loop init-declaration requires the form "type-specifier loop-index = constant-expression" +ERROR: 0:29: 'limitations' : inductive-loop init-declaration requires the form "type-specifier loop-index = constant-expression" +ERROR: 0:30: 'limitations' : inductive-loop init-declaration requires the form "type-specifier loop-index = constant-expression" +ERROR: 0:31: 'limitations' : inductive-loop init-declaration requires the form "type-specifier loop-index = constant-expression" +ERROR: 0:32: 'limitations' : inductive loop requires a scalar 'int' or 'float' loop index +ERROR: 0:33: 'limitations' : inductive-loop condition requires the form "loop-index constant-expression" +ERROR: 0:34: 'limitations' : inductive-loop termination requires the form "loop-index++, loop-index--, loop-index += constant-expression, or loop-index -= constant-expression" +ERROR: 0:35: 'limitations' : inductive loop index modified +ERROR: 0:36: 'limitations' : inductive loop index modified +ERROR: 0:43: 'limitations' : inductive loop index modified +ERROR: 0:47: 'limitations' : Non-constant-index-expression +ERROR: 0:49: 'limitations' : Non-constant-index-expression +ERROR: 0:50: 'limitations' : Non-constant-index-expression +ERROR: 0:51: 'limitations' : Non-constant-index-expression +ERROR: 0:52: 'limitations' : Non-constant-index-expression +ERROR: 0:53: 'limitations' : Non-constant-index-expression +ERROR: 0:54: 'limitations' : Non-constant-index-expression +ERROR: 0:65: 'limitations' : Non-constant-index-expression +ERROR: 20 compilation errors. No code generated. + + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/100scope.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/100scope.vert.out new file mode 100644 index 0000000..c59c8fd --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/100scope.vert.out @@ -0,0 +1,228 @@ +100scope.vert +ERROR: 0:5: 'a' : redefinition +ERROR: 0:17: 'b' : function name is redeclaration of existing name +ERROR: 0:20: 'c' : redefinition +ERROR: 0:22: 'f' : redefinition +ERROR: 0:24: 'redefinition of built-in function' : not supported with this profile: es +ERROR: 0:24: 'highp' : overloaded functions must have the same parameter precision qualifiers for argument 1 +ERROR: 0:25: 'redefinition of built-in function' : not supported with this profile: es +ERROR: 0:25: 'highp' : overloaded functions must have the same parameter precision qualifiers for argument 1 +ERROR: 0:38: 'local function declaration' : not supported with this profile: es +ERROR: 0:43: 'sin' : can't use function syntax on variable +ERROR: 0:57: 'z' : undeclared identifier +ERROR: 0:57: 'z' : redefinition +ERROR: 0:73: 'degrees' : can't use function syntax on variable +ERROR: 0:76: 'vertex-shader struct output' : not supported for this version or the enabled extensions +ERROR: 14 compilation errors. No code generated. + + +Shader version: 100 +ERROR: node is still EOpNull! +0:3 Function Definition: f(i1;i1;i1; ( global highp int) +0:3 Function Parameters: +0:3 'a' ( in highp int) +0:3 'b' ( in highp int) +0:3 'c' ( in highp int) +0:? Sequence +0:8 Sequence +0:8 Sequence +0:8 move second child to first child ( temp highp float) +0:8 'a' ( temp highp float) +0:8 add ( temp highp float) +0:8 Convert int to float ( temp highp float) +0:8 'a' ( in highp int) +0:8 Constant: +0:8 1.000000 +0:11 Branch: Return with expression +0:11 'a' ( in highp int) +0:25 Function Definition: cos(f1; ( global highp float) +0:25 Function Parameters: +0:25 'x' ( in highp float) +0:27 Sequence +0:27 Branch: Return with expression +0:27 Constant: +0:27 1.000000 +0:29 Function Definition: radians(b1; ( global bool) +0:29 Function Parameters: +0:29 'x' ( in bool) +0:31 Sequence +0:31 Branch: Return with expression +0:31 Constant: +0:31 true (const bool) +0:36 Function Definition: main( ( global void) +0:36 Function Parameters: +0:? Sequence +0:39 Function Call: g( ( temp highp int) +0:42 'sin' ( temp highp float) +0:43 Constant: +0:43 0.000000 +0:44 Function Call: f(i1;i1;i1; ( global highp int) +0:44 Constant: +0:44 1 (const int) +0:44 Constant: +0:44 2 (const int) +0:44 Constant: +0:44 3 (const int) +0:47 move second child to first child ( temp highp float) +0:47 'f' ( temp highp float) +0:47 Constant: +0:47 3.000000 +0:49 move second child to first child ( temp highp 4-component vector of float) +0:49 'gl_Position' ( invariant gl_Position highp 4-component vector of float Position) +0:49 Construct vec4 ( temp highp 4-component vector of float) +0:49 'f' ( temp highp float) +0:51 Sequence +0:51 Sequence +0:51 move second child to first child ( temp highp int) +0:51 'f' ( temp highp int) +0:51 Constant: +0:51 0 (const int) +0:51 Loop with condition tested first +0:51 Loop Condition +0:51 Compare Less Than ( temp bool) +0:51 'f' ( temp highp int) +0:51 Constant: +0:51 10 (const int) +0:51 Loop Body +0:52 Pre-Increment ( temp highp int) +0:52 'f' ( temp highp int) +0:51 Loop Terminal Expression +0:51 Pre-Increment ( temp highp int) +0:51 'f' ( temp highp int) +0:54 Sequence +0:54 move second child to first child ( temp highp int) +0:54 'x' ( temp highp int) +0:54 Constant: +0:54 1 (const int) +0:56 Sequence +0:56 Sequence +0:56 move second child to first child ( temp highp float) +0:56 'x' ( temp highp float) +0:56 Constant: +0:56 2.000000 +0:56 move second child to first child ( temp highp float) +0:56 'y' ( temp highp float) +0:56 'x' ( temp highp float) +0:60 Sequence +0:60 Sequence +0:60 move second child to first child ( temp highp int) +0:60 'x' ( temp highp int) +0:60 'x' ( temp highp int) +0:68 Sequence +0:68 Sequence +0:68 move second child to first child ( temp structure{ temp highp int x}) +0:68 'S' ( temp structure{ temp highp int x}) +0:68 Constant: +0:68 0 (const int) +0:69 x: direct index for structure ( temp highp int) +0:69 'S' ( temp structure{ temp highp int x}) +0:69 Constant: +0:69 0 (const int) +0:73 Constant: +0:73 0.000000 +0:? Linker Objects +0:? 'b' ( global bool) +0:? 'tan' ( global highp float) +0:? 's' ( smooth out structure{ global highp float f}) + + +Linked vertex stage: + +ERROR: Linking vertex stage: No function definition (body) found: + g( + +Shader version: 100 +ERROR: node is still EOpNull! +0:3 Function Definition: f(i1;i1;i1; ( global highp int) +0:3 Function Parameters: +0:3 'a' ( in highp int) +0:3 'b' ( in highp int) +0:3 'c' ( in highp int) +0:? Sequence +0:8 Sequence +0:8 Sequence +0:8 move second child to first child ( temp highp float) +0:8 'a' ( temp highp float) +0:8 add ( temp highp float) +0:8 Convert int to float ( temp highp float) +0:8 'a' ( in highp int) +0:8 Constant: +0:8 1.000000 +0:11 Branch: Return with expression +0:11 'a' ( in highp int) +0:36 Function Definition: main( ( global void) +0:36 Function Parameters: +0:? Sequence +0:39 Function Call: g( ( temp highp int) +0:42 'sin' ( temp highp float) +0:43 Constant: +0:43 0.000000 +0:44 Function Call: f(i1;i1;i1; ( global highp int) +0:44 Constant: +0:44 1 (const int) +0:44 Constant: +0:44 2 (const int) +0:44 Constant: +0:44 3 (const int) +0:47 move second child to first child ( temp highp float) +0:47 'f' ( temp highp float) +0:47 Constant: +0:47 3.000000 +0:49 move second child to first child ( temp highp 4-component vector of float) +0:49 'gl_Position' ( invariant gl_Position highp 4-component vector of float Position) +0:49 Construct vec4 ( temp highp 4-component vector of float) +0:49 'f' ( temp highp float) +0:51 Sequence +0:51 Sequence +0:51 move second child to first child ( temp highp int) +0:51 'f' ( temp highp int) +0:51 Constant: +0:51 0 (const int) +0:51 Loop with condition tested first +0:51 Loop Condition +0:51 Compare Less Than ( temp bool) +0:51 'f' ( temp highp int) +0:51 Constant: +0:51 10 (const int) +0:51 Loop Body +0:52 Pre-Increment ( temp highp int) +0:52 'f' ( temp highp int) +0:51 Loop Terminal Expression +0:51 Pre-Increment ( temp highp int) +0:51 'f' ( temp highp int) +0:54 Sequence +0:54 move second child to first child ( temp highp int) +0:54 'x' ( temp highp int) +0:54 Constant: +0:54 1 (const int) +0:56 Sequence +0:56 Sequence +0:56 move second child to first child ( temp highp float) +0:56 'x' ( temp highp float) +0:56 Constant: +0:56 2.000000 +0:56 move second child to first child ( temp highp float) +0:56 'y' ( temp highp float) +0:56 'x' ( temp highp float) +0:60 Sequence +0:60 Sequence +0:60 move second child to first child ( temp highp int) +0:60 'x' ( temp highp int) +0:60 'x' ( temp highp int) +0:68 Sequence +0:68 Sequence +0:68 move second child to first child ( temp structure{ temp highp int x}) +0:68 'S' ( temp structure{ temp highp int x}) +0:68 Constant: +0:68 0 (const int) +0:69 x: direct index for structure ( temp highp int) +0:69 'S' ( temp structure{ temp highp int x}) +0:69 Constant: +0:69 0 (const int) +0:73 Constant: +0:73 0.000000 +0:? Linker Objects +0:? 'b' ( global bool) +0:? 'tan' ( global highp float) +0:? 's' ( smooth out structure{ global highp float f}) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/110scope.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/110scope.vert.out new file mode 100644 index 0000000..a07de4f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/110scope.vert.out @@ -0,0 +1,245 @@ +110scope.vert +ERROR: 0:5: 'a' : redefinition +ERROR: 0:57: 'z' : undeclared identifier +ERROR: 0:57: 'z' : redefinition +ERROR: 3 compilation errors. No code generated. + + +Shader version: 110 +ERROR: node is still EOpNull! +0:3 Function Definition: f(i1;i1;i1; ( global int) +0:3 Function Parameters: +0:3 'a' ( in int) +0:3 'b' ( in int) +0:3 'c' ( in int) +0:? Sequence +0:8 Sequence +0:8 Sequence +0:8 move second child to first child ( temp float) +0:8 'a' ( temp float) +0:8 add ( temp float) +0:8 Convert int to float ( temp float) +0:8 'a' ( in int) +0:8 Constant: +0:8 1.000000 +0:11 Branch: Return with expression +0:11 'a' ( in int) +0:25 Function Definition: cos(f1; ( global float) +0:25 Function Parameters: +0:25 'x' ( in float) +0:27 Sequence +0:27 Branch: Return with expression +0:27 Constant: +0:27 1.000000 +0:29 Function Definition: radians(b1; ( global bool) +0:29 Function Parameters: +0:29 'x' ( in bool) +0:31 Sequence +0:31 Branch: Return with expression +0:31 Constant: +0:31 true (const bool) +0:34 Sequence +0:34 move second child to first child ( temp int) +0:34 'gi' ( global int) +0:34 Function Call: f(i1;i1;i1; ( global int) +0:34 Constant: +0:34 1 (const int) +0:34 Constant: +0:34 2 (const int) +0:34 Constant: +0:34 3 (const int) +0:36 Function Definition: main( ( global void) +0:36 Function Parameters: +0:? Sequence +0:39 Function Call: g( ( temp int) +0:42 'sin' ( temp float) +0:43 Function Call: sin(f1; ( global float) +0:43 Constant: +0:43 0.700000 +0:44 Function Call: f(i1;i1;i1; ( global int) +0:44 Constant: +0:44 1 (const int) +0:44 Constant: +0:44 2 (const int) +0:44 Constant: +0:44 3 (const int) +0:47 move second child to first child ( temp float) +0:47 'f' ( temp float) +0:47 Constant: +0:47 3.000000 +0:49 move second child to first child ( temp 4-component vector of float) +0:49 'gl_Position' ( gl_Position 4-component vector of float Position) +0:49 Construct vec4 ( temp 4-component vector of float) +0:49 'f' ( temp float) +0:51 Sequence +0:51 Sequence +0:51 move second child to first child ( temp int) +0:51 'f' ( temp int) +0:51 Constant: +0:51 0 (const int) +0:51 Loop with condition tested first +0:51 Loop Condition +0:51 Compare Less Than ( temp bool) +0:51 'f' ( temp int) +0:51 Constant: +0:51 10 (const int) +0:51 Loop Body +0:52 Pre-Increment ( temp int) +0:52 'f' ( temp int) +0:51 Loop Terminal Expression +0:51 Pre-Increment ( temp int) +0:51 'f' ( temp int) +0:54 Sequence +0:54 move second child to first child ( temp int) +0:54 'x' ( temp int) +0:54 Constant: +0:54 1 (const int) +0:56 Sequence +0:56 Sequence +0:56 move second child to first child ( temp float) +0:56 'x' ( temp float) +0:56 Constant: +0:56 2.000000 +0:56 move second child to first child ( temp float) +0:56 'y' ( temp float) +0:56 'x' ( temp float) +0:60 Sequence +0:60 Sequence +0:60 move second child to first child ( temp int) +0:60 'x' ( temp int) +0:60 'x' ( temp int) +0:68 Sequence +0:68 Sequence +0:68 move second child to first child ( temp structure{ temp int x}) +0:68 'S' ( temp structure{ temp int x}) +0:68 Constant: +0:68 0 (const int) +0:69 x: direct index for structure ( temp int) +0:69 'S' ( temp structure{ temp int x}) +0:69 Constant: +0:69 0 (const int) +0:73 Constant: +0:73 183.346494 +0:? Linker Objects +0:? 'b' ( global bool) +0:? 'c' ( global bool) +0:? 'f' ( global float) +0:? 'tan' ( global float) +0:? 'gi' ( global int) + + +Linked vertex stage: + +ERROR: Linking vertex stage: No function definition (body) found: + sin(f1; +ERROR: Linking vertex stage: No function definition (body) found: + g( + +Shader version: 110 +ERROR: node is still EOpNull! +0:3 Function Definition: f(i1;i1;i1; ( global int) +0:3 Function Parameters: +0:3 'a' ( in int) +0:3 'b' ( in int) +0:3 'c' ( in int) +0:? Sequence +0:8 Sequence +0:8 Sequence +0:8 move second child to first child ( temp float) +0:8 'a' ( temp float) +0:8 add ( temp float) +0:8 Convert int to float ( temp float) +0:8 'a' ( in int) +0:8 Constant: +0:8 1.000000 +0:11 Branch: Return with expression +0:11 'a' ( in int) +0:34 Sequence +0:34 move second child to first child ( temp int) +0:34 'gi' ( global int) +0:34 Function Call: f(i1;i1;i1; ( global int) +0:34 Constant: +0:34 1 (const int) +0:34 Constant: +0:34 2 (const int) +0:34 Constant: +0:34 3 (const int) +0:36 Function Definition: main( ( global void) +0:36 Function Parameters: +0:? Sequence +0:39 Function Call: g( ( temp int) +0:42 'sin' ( temp float) +0:43 Function Call: sin(f1; ( global float) +0:43 Constant: +0:43 0.700000 +0:44 Function Call: f(i1;i1;i1; ( global int) +0:44 Constant: +0:44 1 (const int) +0:44 Constant: +0:44 2 (const int) +0:44 Constant: +0:44 3 (const int) +0:47 move second child to first child ( temp float) +0:47 'f' ( temp float) +0:47 Constant: +0:47 3.000000 +0:49 move second child to first child ( temp 4-component vector of float) +0:49 'gl_Position' ( gl_Position 4-component vector of float Position) +0:49 Construct vec4 ( temp 4-component vector of float) +0:49 'f' ( temp float) +0:51 Sequence +0:51 Sequence +0:51 move second child to first child ( temp int) +0:51 'f' ( temp int) +0:51 Constant: +0:51 0 (const int) +0:51 Loop with condition tested first +0:51 Loop Condition +0:51 Compare Less Than ( temp bool) +0:51 'f' ( temp int) +0:51 Constant: +0:51 10 (const int) +0:51 Loop Body +0:52 Pre-Increment ( temp int) +0:52 'f' ( temp int) +0:51 Loop Terminal Expression +0:51 Pre-Increment ( temp int) +0:51 'f' ( temp int) +0:54 Sequence +0:54 move second child to first child ( temp int) +0:54 'x' ( temp int) +0:54 Constant: +0:54 1 (const int) +0:56 Sequence +0:56 Sequence +0:56 move second child to first child ( temp float) +0:56 'x' ( temp float) +0:56 Constant: +0:56 2.000000 +0:56 move second child to first child ( temp float) +0:56 'y' ( temp float) +0:56 'x' ( temp float) +0:60 Sequence +0:60 Sequence +0:60 move second child to first child ( temp int) +0:60 'x' ( temp int) +0:60 'x' ( temp int) +0:68 Sequence +0:68 Sequence +0:68 move second child to first child ( temp structure{ temp int x}) +0:68 'S' ( temp structure{ temp int x}) +0:68 Constant: +0:68 0 (const int) +0:69 x: direct index for structure ( temp int) +0:69 'S' ( temp structure{ temp int x}) +0:69 Constant: +0:69 0 (const int) +0:73 Constant: +0:73 183.346494 +0:? Linker Objects +0:? 'b' ( global bool) +0:? 'c' ( global bool) +0:? 'f' ( global float) +0:? 'tan' ( global float) +0:? 'gi' ( global int) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/120.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/120.frag.out new file mode 100644 index 0000000..6a635ec --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/120.frag.out @@ -0,0 +1,694 @@ +120.frag +ERROR: 0:9: 'in for stage inputs' : not supported for this version or the enabled extensions +ERROR: 0:10: 'out for stage outputs' : not supported for this version or the enabled extensions +ERROR: 0:54: '+' : wrong operand types: no operation '+' exists that takes a left-hand operand of type ' temp 2-component vector of float' and a right operand of type ' temp 3-component vector of float' (or there is no acceptable conversion) +ERROR: 0:55: '*' : wrong operand types: no operation '*' exists that takes a left-hand operand of type ' uniform 4X2 matrix of float' and a right operand of type ' temp 3-component vector of float' (or there is no acceptable conversion) +ERROR: 0:56: '+' : wrong operand types: no operation '+' exists that takes a left-hand operand of type ' uniform 4X2 matrix of float' and a right operand of type ' smooth in 4-component vector of float' (or there is no acceptable conversion) +ERROR: 0:57: '=' : cannot convert from ' const float' to ' temp int' +ERROR: 0:58: 'assign' : cannot convert from ' temp bool' to ' temp float' +ERROR: 0:59: '+' : wrong operand types: no operation '+' exists that takes a left-hand operand of type ' temp int' and a right operand of type ' temp bool' (or there is no acceptable conversion) +ERROR: 0:60: '*' : wrong operand types: no operation '*' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp int' (or there is no acceptable conversion) +ERROR: 0:60: 'assign' : cannot convert from ' temp bool' to ' temp float' +ERROR: 0:61: 'assign' : cannot convert from ' temp int' to ' temp bool' +ERROR: 0:62: '+' : wrong operand types: no operation '+' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp float' (or there is no acceptable conversion) +ERROR: 0:63: 'bitwise-or assign' : not supported for this version or the enabled extensions +ERROR: 0:63: 'assign' : cannot convert from ' temp bool' to ' temp float' +ERROR: 0:79: ':' : wrong operand types: no operation ':' exists that takes a left-hand operand of type ' temp 4-component vector of float' and a right operand of type ' temp 4X4 matrix of float' (or there is no acceptable conversion) +ERROR: 0:79: 'assign' : cannot convert from ' temp 4X4 matrix of float' to ' fragColor 4-component vector of float FragColor' +ERROR: 0:82: 'xr' : vector swizzle selectors not from the same set +ERROR: 0:83: 'xyxyx' : vector swizzle too long +ERROR: 0:84: 'z' : vector swizzle selection out of range +ERROR: 0:85: 'assign' : l-value required +ERROR: 0:91: 'int' : overloaded functions must have the same return type +ERROR: 0:91: 'main' : function already has a body +ERROR: 0:91: 'int' : entry point cannot return a value +ERROR: 0:92: 'main' : function cannot take any parameter(s) +ERROR: 0:94: 'a' : variables with qualifier 'const' must be initialized +ERROR: 0:97: 'out' : overloaded functions must have the same parameter storage qualifiers for argument 1 +ERROR: 0:99: 'return' : type does not match, or is not convertible to, the function's return type +ERROR: 0:115: 'return' : void function cannot return a value +ERROR: 0:125: 'gl_TexCoord' : redeclaration of array with size +ERROR: 0:152: 'matrixCompMult' : no matching overloaded function found +ERROR: 0:152: '=' : cannot convert from ' const float' to ' temp 3X2 matrix of float' +ERROR: 0:153: 'matrixCompMult' : no matching overloaded function found +ERROR: 0:153: '=' : cannot convert from ' const float' to ' temp 3X4 matrix of float' +ERROR: 0:160: 'constructor' : not enough data provided for construction +ERROR: 0:160: '=' : cannot convert from ' const float' to ' temp 4X4 matrix of float' +ERROR: 0:161: 'constructor' : too many arguments +ERROR: 0:161: '=' : cannot convert from ' const float' to ' temp 4X4 matrix of float' +ERROR: 0:165: 'constructor' : matrix constructed from matrix can only have one argument +ERROR: 0:166: 'constructor' : matrix constructed from matrix can only have one argument +ERROR: 0:172: 'constructor' : array constructor needs one argument per array element +ERROR: 0:172: '=' : cannot convert from ' const float' to ' temp 2-element array of 3X3 matrix of float' +ERROR: 0:184: 'texture2DLod' : required extension not requested: GL_ARB_shader_texture_lod +ERROR: 0:185: 'texture3DProjLod' : required extension not requested: GL_ARB_shader_texture_lod +ERROR: 0:186: 'texture1DProjLod' : required extension not requested: GL_ARB_shader_texture_lod +ERROR: 0:187: 'shadow2DProjLod' : required extension not requested: GL_ARB_shader_texture_lod +ERROR: 0:189: 'texture1DGradARB' : required extension not requested: GL_ARB_shader_texture_lod +ERROR: 0:190: 'texture2DProjGradARB' : required extension not requested: GL_ARB_shader_texture_lod +ERROR: 0:191: 'shadow2DProjGradARB' : required extension not requested: GL_ARB_shader_texture_lod +ERROR: 0:209: 'shadow2DRectProjGradARB' : no matching overloaded function found +ERROR: 0:209: 'assign' : cannot convert from ' const float' to ' temp 4-component vector of float' +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: 54 compilation errors. No code generated. + + +Shader version: 120 +Requested GL_ARB_shader_texture_lod +Requested GL_ARB_texture_rectangle +ERROR: node is still EOpNull! +0:21 Function Definition: main( ( global void) +0:21 Function Parameters: +0:23 Sequence +0:23 Sequence +0:23 move second child to first child ( temp 2X3 matrix of float) +0:23 'm23' ( temp 2X3 matrix of float) +0:23 Construct mat2x3 ( temp 2X3 matrix of float) +0:23 'm' ( uniform 4X2 matrix of float) +0:27 Sequence +0:27 move second child to first child ( temp structure{ global float f}) +0:27 'sv' ( temp structure{ global float f}) +0:27 Construct structure ( temp structure{ global float f}) +0:27 Convert int to float ( temp float) +0:27 'a' ( temp int) +0:28 Sequence +0:28 move second child to first child ( temp 2-element array of float) +0:28 'ia' ( temp 2-element array of float) +0:28 Construct float ( temp 2-element array of float) +0:28 Constant: +0:28 3.000000 +0:28 direct index ( temp float) +0:28 'i' ( smooth in 4-component vector of float) +0:28 Constant: +0:28 1 (const int) +0:29 Sequence +0:29 move second child to first child ( temp float) +0:29 'f1' ( temp float) +0:29 Constant: +0:29 1.000000 +0:30 Sequence +0:30 move second child to first child ( temp float) +0:30 'f' ( temp float) +0:30 Convert int to float ( temp float) +0:30 'a' ( temp int) +0:31 move second child to first child ( temp float) +0:31 'f' ( temp float) +0:31 Convert int to float ( temp float) +0:31 'a' ( temp int) +0:33 Sequence +0:33 move second child to first child ( temp 3-component vector of float) +0:33 'v3' ( temp 3-component vector of float) +0:33 Convert int to float ( temp 3-component vector of float) +0:33 'iv3' ( temp 3-component vector of int) +0:34 move second child to first child ( temp float) +0:34 'f' ( temp float) +0:34 add ( temp float) +0:34 'f' ( temp float) +0:34 Convert int to float ( temp float) +0:34 'a' ( temp int) +0:35 move second child to first child ( temp float) +0:35 'f' ( temp float) +0:35 subtract ( temp float) +0:35 Convert int to float ( temp float) +0:35 'a' ( temp int) +0:35 'f' ( temp float) +0:36 add second child into first child ( temp float) +0:36 'f' ( temp float) +0:36 Convert int to float ( temp float) +0:36 'a' ( temp int) +0:37 move second child to first child ( temp float) +0:37 'f' ( temp float) +0:37 subtract ( temp float) +0:37 Convert int to float ( temp float) +0:37 'a' ( temp int) +0:37 'f' ( temp float) +0:38 multiply second child into first child ( temp 3-component vector of float) +0:38 'v3' ( temp 3-component vector of float) +0:38 Convert int to float ( temp 3-component vector of float) +0:38 'iv3' ( temp 3-component vector of int) +0:39 move second child to first child ( temp 3-component vector of float) +0:39 'v3' ( temp 3-component vector of float) +0:39 divide ( temp 3-component vector of float) +0:39 Convert int to float ( temp 3-component vector of float) +0:39 'iv3' ( temp 3-component vector of int) +0:39 Constant: +0:39 2.000000 +0:40 move second child to first child ( temp 3-component vector of float) +0:40 'v3' ( temp 3-component vector of float) +0:40 vector-scale ( temp 3-component vector of float) +0:40 Constant: +0:40 3.000000 +0:40 Convert int to float ( temp 3-component vector of float) +0:40 'iv3' ( temp 3-component vector of int) +0:41 move second child to first child ( temp 3-component vector of float) +0:41 'v3' ( temp 3-component vector of float) +0:41 vector-scale ( temp 3-component vector of float) +0:41 Constant: +0:41 2.000000 +0:41 'v3' ( temp 3-component vector of float) +0:42 move second child to first child ( temp 3-component vector of float) +0:42 'v3' ( temp 3-component vector of float) +0:42 subtract ( temp 3-component vector of float) +0:42 'v3' ( temp 3-component vector of float) +0:42 Constant: +0:42 2.000000 +0:43 Test condition and select ( temp void) +0:43 Condition +0:47 logical-or ( temp bool) +0:46 logical-or ( temp bool) +0:45 logical-or ( temp bool) +0:44 logical-or ( temp bool) +0:43 logical-or ( temp bool) +0:43 Compare Less Than ( temp bool) +0:43 'f' ( temp float) +0:43 Convert int to float ( temp float) +0:43 'a' ( temp int) +0:44 Compare Less Than or Equal ( temp bool) +0:44 Convert int to float ( temp float) +0:44 'a' ( temp int) +0:44 'f' ( temp float) +0:45 Compare Greater Than ( temp bool) +0:45 'f' ( temp float) +0:45 Convert int to float ( temp float) +0:45 'a' ( temp int) +0:46 Compare Greater Than or Equal ( temp bool) +0:46 'f' ( temp float) +0:46 Convert int to float ( temp float) +0:46 'a' ( temp int) +0:47 Compare Equal ( temp bool) +0:47 Convert int to float ( temp float) +0:47 'a' ( temp int) +0:47 'f' ( temp float) +0:48 Compare Not Equal ( temp bool) +0:48 'f' ( temp float) +0:48 Convert int to float ( temp float) +0:48 'a' ( temp int) +0:43 true case is null +0:49 move second child to first child ( temp float) +0:49 'f' ( temp float) +0:49 Test condition and select ( temp float) +0:49 Condition +0:49 'b' ( temp bool) +0:49 true case +0:49 Convert int to float ( temp float) +0:49 'a' ( temp int) +0:49 false case +0:49 'f' ( temp float) +0:50 move second child to first child ( temp float) +0:50 'f' ( temp float) +0:50 Test condition and select ( temp float) +0:50 Condition +0:50 'b' ( temp bool) +0:50 true case +0:50 'f' ( temp float) +0:50 false case +0:50 Convert int to float ( temp float) +0:50 'a' ( temp int) +0:51 move second child to first child ( temp float) +0:51 'f' ( temp float) +0:51 Convert int to float ( temp float) +0:51 Test condition and select ( temp int) +0:51 Condition +0:51 'b' ( temp bool) +0:51 true case +0:51 'a' ( temp int) +0:51 false case +0:51 'a' ( temp int) +0:52 Sequence +0:52 move second child to first child ( temp structure{ global float f}) +0:52 'news' ( temp structure{ global float f}) +0:52 'sv' ( temp structure{ global float f}) +0:54 vector swizzle ( temp 2-component vector of float) +0:54 'i' ( smooth in 4-component vector of float) +0:54 Sequence +0:54 Constant: +0:54 0 (const int) +0:54 Constant: +0:54 1 (const int) +0:55 'm' ( uniform 4X2 matrix of float) +0:56 'm' ( uniform 4X2 matrix of float) +0:58 'f' ( temp float) +0:59 move second child to first child ( temp float) +0:59 'f' ( temp float) +0:59 Convert int to float ( temp float) +0:59 'a' ( temp int) +0:60 'f' ( temp float) +0:61 'b' ( temp bool) +0:62 move second child to first child ( temp bool) +0:62 'b' ( temp bool) +0:62 'b' ( temp bool) +0:63 'f' ( temp float) +0:65 move second child to first child ( temp 4-component vector of float) +0:65 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:65 texture ( global 4-component vector of float) +0:65 's2D' ( uniform sampler2D) +0:65 'centTexCoord' ( centroid smooth in 2-component vector of float) +0:? Sequence +0:79 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:82 direct index ( temp float) +0:82 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:82 Constant: +0:82 0 (const int) +0:83 vector swizzle ( temp 2-component vector of float) +0:83 vector swizzle ( temp 4-component vector of float) +0:83 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:83 Sequence +0:83 Constant: +0:83 0 (const int) +0:83 Constant: +0:83 1 (const int) +0:83 Constant: +0:83 0 (const int) +0:83 Constant: +0:83 1 (const int) +0:83 Sequence +0:83 Constant: +0:83 0 (const int) +0:83 Constant: +0:83 1 (const int) +0:84 direct index ( temp float) +0:84 'centTexCoord' ( centroid smooth in 2-component vector of float) +0:84 Constant: +0:84 0 (const int) +0:85 move second child to first child ( temp bool) +0:85 Comma ( temp bool) +0:85 'a' ( temp int) +0:85 'b' ( temp bool) +0:85 Constant: +0:85 true (const bool) +0:91 Function Definition: main( ( global int) +0:91 Function Parameters: +0:92 Function Definition: main(i1; ( global void) +0:92 Function Parameters: +0:92 'a' ( in int) +0:97 Function Definition: foo(f1; ( global int) +0:97 Function Parameters: +0:97 'a' ( out float) +0:99 Sequence +0:99 Branch: Return with expression +0:99 Constant: +0:99 3.200000 +0:100 Function Call: foo(f1; ( global int) +0:100 'a' ( out float) +0:103 Function Definition: gen(vf3; ( global bool) +0:103 Function Parameters: +0:103 'v' ( in 3-component vector of float) +0:105 Sequence +0:105 Test condition and select ( temp void) +0:105 Condition +0:105 logical-and ( temp bool) +0:105 Compare Less Than ( temp bool) +0:105 Absolute value ( global float) +0:105 direct index ( temp float) +0:105 'v' ( in 3-component vector of float) +0:105 Constant: +0:105 0 (const int) +0:105 Constant: +0:105 0.000100 +0:105 Compare Less Than ( temp bool) +0:105 Absolute value ( global float) +0:105 direct index ( temp float) +0:105 'v' ( in 3-component vector of float) +0:105 Constant: +0:105 1 (const int) +0:105 Constant: +0:105 0.000100 +0:105 true case +0:106 Branch: Return with expression +0:106 Constant: +0:106 true (const bool) +0:109 Function Definition: v1( ( global void) +0:109 Function Parameters: +0:113 Function Definition: v2( ( global void) +0:113 Function Parameters: +0:115 Sequence +0:115 Branch: Return +0:118 Function Definition: atest( ( global void) +0:118 Function Parameters: +0:120 Sequence +0:120 Sequence +0:120 move second child to first child ( temp 4-component vector of float) +0:120 'v' ( temp 4-component vector of float) +0:120 direct index ( smooth temp 4-component vector of float TexCoord) +0:120 'gl_TexCoord' ( smooth in 6-element array of 4-component vector of float TexCoord) +0:120 Constant: +0:120 1 (const int) +0:121 add second child into first child ( temp 4-component vector of float) +0:121 'v' ( temp 4-component vector of float) +0:121 direct index ( smooth temp 4-component vector of float TexCoord) +0:121 'gl_TexCoord' ( smooth in 6-element array of 4-component vector of float TexCoord) +0:121 Constant: +0:121 3 (const int) +0:139 Function Definition: foo123( ( global void) +0:139 Function Parameters: +0:141 Sequence +0:141 Sequence +0:141 move second child to first child ( temp 2X2 matrix of float) +0:141 'r2' ( temp 2X2 matrix of float) +0:141 component-wise multiply ( global 2X2 matrix of float) +0:141 'm22' ( global 2X2 matrix of float) +0:141 'm22' ( global 2X2 matrix of float) +0:142 Sequence +0:142 move second child to first child ( temp 3X3 matrix of float) +0:142 'r3' ( temp 3X3 matrix of float) +0:142 component-wise multiply ( global 3X3 matrix of float) +0:142 'm33' ( global 3X3 matrix of float) +0:142 'm33' ( global 3X3 matrix of float) +0:143 Sequence +0:143 move second child to first child ( temp 4X4 matrix of float) +0:143 'r4' ( temp 4X4 matrix of float) +0:143 component-wise multiply ( global 4X4 matrix of float) +0:143 'm44' ( global 4X4 matrix of float) +0:143 'm44' ( global 4X4 matrix of float) +0:145 Sequence +0:145 move second child to first child ( temp 2X3 matrix of float) +0:145 'r23' ( temp 2X3 matrix of float) +0:145 component-wise multiply ( global 2X3 matrix of float) +0:145 'm23' ( global 2X3 matrix of float) +0:145 'm23' ( global 2X3 matrix of float) +0:146 Sequence +0:146 move second child to first child ( temp 2X4 matrix of float) +0:146 'r24' ( temp 2X4 matrix of float) +0:146 component-wise multiply ( global 2X4 matrix of float) +0:146 'm24' ( global 2X4 matrix of float) +0:146 'm24' ( global 2X4 matrix of float) +0:147 Sequence +0:147 move second child to first child ( temp 3X2 matrix of float) +0:147 'r32' ( temp 3X2 matrix of float) +0:147 component-wise multiply ( global 3X2 matrix of float) +0:147 'm32' ( global 3X2 matrix of float) +0:147 'm32' ( global 3X2 matrix of float) +0:148 Sequence +0:148 move second child to first child ( temp 3X4 matrix of float) +0:148 'r34' ( temp 3X4 matrix of float) +0:148 component-wise multiply ( global 3X4 matrix of float) +0:148 'm34' ( global 3X4 matrix of float) +0:148 'm34' ( global 3X4 matrix of float) +0:149 Sequence +0:149 move second child to first child ( temp 4X2 matrix of float) +0:149 'r42' ( temp 4X2 matrix of float) +0:149 component-wise multiply ( global 4X2 matrix of float) +0:149 'm42' ( global 4X2 matrix of float) +0:149 'm42' ( global 4X2 matrix of float) +0:150 Sequence +0:150 move second child to first child ( temp 4X3 matrix of float) +0:150 'r43' ( temp 4X3 matrix of float) +0:150 component-wise multiply ( global 4X3 matrix of float) +0:150 'm43' ( global 4X3 matrix of float) +0:150 'm43' ( global 4X3 matrix of float) +0:156 Function Definition: matConst( ( global void) +0:156 Function Parameters: +0:? Sequence +0:162 Sequence +0:162 move second child to first child ( temp 4X4 matrix of float) +0:162 'm4g' ( temp 4X4 matrix of float) +0:162 Construct mat4 ( temp 4X4 matrix of float) +0:162 'v2' ( temp 2-component vector of float) +0:162 'v3' ( temp 3-component vector of float) +0:162 'v3' ( temp 3-component vector of float) +0:162 'v3' ( temp 3-component vector of float) +0:162 'v3' ( temp 3-component vector of float) +0:162 'v3' ( temp 3-component vector of float) +0:163 Sequence +0:163 move second child to first child ( temp 4X4 matrix of float) +0:163 'm4' ( temp 4X4 matrix of float) +0:163 Construct mat4 ( temp 4X4 matrix of float) +0:163 'v2' ( temp 2-component vector of float) +0:163 'v3' ( temp 3-component vector of float) +0:163 'v3' ( temp 3-component vector of float) +0:163 'v3' ( temp 3-component vector of float) +0:163 'v3' ( temp 3-component vector of float) +0:163 'v2' ( temp 2-component vector of float) +0:164 Sequence +0:164 move second child to first child ( temp 3X3 matrix of float) +0:164 'm3' ( temp 3X3 matrix of float) +0:164 Construct mat3 ( temp 3X3 matrix of float) +0:164 'm4' ( temp 4X4 matrix of float) +0:165 Sequence +0:165 move second child to first child ( temp 3X3 matrix of float) +0:165 'm3b1' ( temp 3X3 matrix of float) +0:165 Construct mat3 ( temp 3X3 matrix of float) +0:165 'm4' ( temp 4X4 matrix of float) +0:165 'v2' ( temp 2-component vector of float) +0:166 Sequence +0:166 move second child to first child ( temp 3X3 matrix of float) +0:166 'm3b2' ( temp 3X3 matrix of float) +0:166 Construct mat3 ( temp 3X3 matrix of float) +0:166 'm4' ( temp 4X4 matrix of float) +0:166 'm4' ( temp 4X4 matrix of float) +0:167 Sequence +0:167 move second child to first child ( temp 3X2 matrix of float) +0:167 'm32' ( temp 3X2 matrix of float) +0:167 Construct mat3x2 ( temp 3X2 matrix of float) +0:167 'm4' ( temp 4X4 matrix of float) +0:168 Sequence +0:168 move second child to first child ( temp 4X4 matrix of float) +0:168 'm4c' ( temp 4X4 matrix of float) +0:168 Construct mat4 ( temp 4X4 matrix of float) +0:168 'm32' ( temp 3X2 matrix of float) +0:169 Sequence +0:169 move second child to first child ( temp 3X3 matrix of float) +0:169 'm3s' ( temp 3X3 matrix of float) +0:169 Construct mat3 ( temp 3X3 matrix of float) +0:169 direct index ( temp float) +0:169 'v2' ( temp 2-component vector of float) +0:169 Constant: +0:169 0 (const int) +0:171 Sequence +0:171 move second child to first child ( temp 2-element array of 3X3 matrix of float) +0:171 'm3a1' ( temp 2-element array of 3X3 matrix of float) +0:171 Construct mat3 ( temp 2-element array of 3X3 matrix of float) +0:171 'm3s' ( temp 3X3 matrix of float) +0:171 'm3s' ( temp 3X3 matrix of float) +0:179 Function Definition: foo2323( ( global void) +0:179 Function Parameters: +0:? Sequence +0:184 move second child to first child ( temp 4-component vector of float) +0:184 'v' ( temp 4-component vector of float) +0:184 textureLod ( global 4-component vector of float) +0:184 's2D' ( uniform sampler2D) +0:184 'v2' ( temp 2-component vector of float) +0:184 'f' ( temp float) +0:185 move second child to first child ( temp 4-component vector of float) +0:185 'v' ( temp 4-component vector of float) +0:185 textureProjLod ( global 4-component vector of float) +0:185 's3D' ( uniform sampler3D) +0:185 'v' ( temp 4-component vector of float) +0:185 'f' ( temp float) +0:186 move second child to first child ( temp 4-component vector of float) +0:186 'v' ( temp 4-component vector of float) +0:186 textureProjLod ( global 4-component vector of float) +0:186 's1D' ( uniform sampler1D) +0:186 'v' ( temp 4-component vector of float) +0:186 'f' ( temp float) +0:187 move second child to first child ( temp 4-component vector of float) +0:187 'v' ( temp 4-component vector of float) +0:187 textureProjLod ( global 4-component vector of float) +0:187 's2DS' ( uniform sampler2DShadow) +0:187 'v' ( temp 4-component vector of float) +0:187 'f' ( temp float) +0:189 move second child to first child ( temp 4-component vector of float) +0:189 'v' ( temp 4-component vector of float) +0:189 textureGrad ( global 4-component vector of float) +0:189 's1D' ( uniform sampler1D) +0:189 'f' ( temp float) +0:189 'f' ( temp float) +0:189 'f' ( temp float) +0:190 move second child to first child ( temp 4-component vector of float) +0:190 'v' ( temp 4-component vector of float) +0:190 textureProjGrad ( global 4-component vector of float) +0:190 's2D' ( uniform sampler2D) +0:190 'v' ( temp 4-component vector of float) +0:190 'v2' ( temp 2-component vector of float) +0:190 'v2' ( temp 2-component vector of float) +0:191 move second child to first child ( temp 4-component vector of float) +0:191 'v' ( temp 4-component vector of float) +0:191 textureProjGrad ( global 4-component vector of float) +0:191 's2DS' ( uniform sampler2DShadow) +0:191 'v' ( temp 4-component vector of float) +0:191 'v2' ( temp 2-component vector of float) +0:191 'v2' ( temp 2-component vector of float) +0:196 Function Definition: foo2324( ( global void) +0:196 Function Parameters: +0:? Sequence +0:201 move second child to first child ( temp 4-component vector of float) +0:201 'v' ( temp 4-component vector of float) +0:201 textureLod ( global 4-component vector of float) +0:201 's2D' ( uniform sampler2D) +0:201 'v2' ( temp 2-component vector of float) +0:201 'f' ( temp float) +0:202 move second child to first child ( temp 4-component vector of float) +0:202 'v' ( temp 4-component vector of float) +0:202 textureProjLod ( global 4-component vector of float) +0:202 's3D' ( uniform sampler3D) +0:202 'v' ( temp 4-component vector of float) +0:202 'f' ( temp float) +0:203 move second child to first child ( temp 4-component vector of float) +0:203 'v' ( temp 4-component vector of float) +0:203 textureProjLod ( global 4-component vector of float) +0:203 's1D' ( uniform sampler1D) +0:203 'v' ( temp 4-component vector of float) +0:203 'f' ( temp float) +0:204 move second child to first child ( temp 4-component vector of float) +0:204 'v' ( temp 4-component vector of float) +0:204 textureProjLod ( global 4-component vector of float) +0:204 's2DS' ( uniform sampler2DShadow) +0:204 'v' ( temp 4-component vector of float) +0:204 'f' ( temp float) +0:206 move second child to first child ( temp 4-component vector of float) +0:206 'v' ( temp 4-component vector of float) +0:206 textureGrad ( global 4-component vector of float) +0:206 's1D' ( uniform sampler1D) +0:206 'f' ( temp float) +0:206 'f' ( temp float) +0:206 'f' ( temp float) +0:207 move second child to first child ( temp 4-component vector of float) +0:207 'v' ( temp 4-component vector of float) +0:207 textureProjGrad ( global 4-component vector of float) +0:207 's2D' ( uniform sampler2D) +0:207 'v' ( temp 4-component vector of float) +0:207 'v2' ( temp 2-component vector of float) +0:207 'v2' ( temp 2-component vector of float) +0:208 move second child to first child ( temp 4-component vector of float) +0:208 'v' ( temp 4-component vector of float) +0:208 textureProjGrad ( global 4-component vector of float) +0:208 's2DS' ( uniform sampler2DShadow) +0:208 'v' ( temp 4-component vector of float) +0:208 'v2' ( temp 2-component vector of float) +0:208 'v2' ( temp 2-component vector of float) +0:209 'v' ( temp 4-component vector of float) +0:214 Function Definition: foo121111( ( global void) +0:214 Function Parameters: +0:? Sequence +0:217 Sequence +0:217 move second child to first child ( temp 4-component vector of float) +0:217 'v' ( temp 4-component vector of float) +0:217 texture ( global 4-component vector of float) +0:217 's2DRbad' ( uniform sampler2DRect) +0:217 'v2' ( temp 2-component vector of float) +0:225 Function Definition: foo12111( ( global void) +0:225 Function Parameters: +0:? Sequence +0:231 move second child to first child ( temp 4-component vector of float) +0:231 'v' ( temp 4-component vector of float) +0:231 texture ( global 4-component vector of float) +0:231 's2DR' ( uniform sampler2DRect) +0:231 'v2' ( temp 2-component vector of float) +0:232 move second child to first child ( temp 4-component vector of float) +0:232 'v' ( temp 4-component vector of float) +0:232 textureProj ( global 4-component vector of float) +0:232 's2DR' ( uniform sampler2DRect) +0:232 'v3' ( temp 3-component vector of float) +0:233 move second child to first child ( temp 4-component vector of float) +0:233 'v' ( temp 4-component vector of float) +0:233 textureProj ( global 4-component vector of float) +0:233 's2DR' ( uniform sampler2DRect) +0:233 'v4' ( temp 4-component vector of float) +0:234 move second child to first child ( temp 4-component vector of float) +0:234 'v' ( temp 4-component vector of float) +0:234 texture ( global 4-component vector of float) +0:234 's2DRS' ( uniform sampler2DRectShadow) +0:234 'v3' ( temp 3-component vector of float) +0:235 move second child to first child ( temp 4-component vector of float) +0:235 'v' ( temp 4-component vector of float) +0:235 textureProj ( global 4-component vector of float) +0:235 's2DRS' ( uniform sampler2DRectShadow) +0:235 'v4' ( temp 4-component vector of float) +0:237 move second child to first child ( temp 4-component vector of float) +0:237 'v' ( temp 4-component vector of float) +0:237 textureProjGrad ( global 4-component vector of float) +0:237 's2DRS' ( uniform sampler2DRectShadow) +0:237 'v' ( temp 4-component vector of float) +0:237 'v2' ( temp 2-component vector of float) +0:237 'v2' ( temp 2-component vector of float) +0:240 Function Definition: voidTernary( ( global void) +0:240 Function Parameters: +0:? Sequence +0:243 Test condition and select ( temp void) +0:243 Condition +0:243 'b' ( temp bool) +0:243 true case +0:243 Function Call: foo121111( ( global void) +0:243 false case +0:243 Function Call: foo12111( ( global void) +0:244 Constant: +0:244 4 (const int) +0:245 Function Call: foo12111( ( global void) +0:? Linker Objects +0:? 'lowp' ( global float) +0:? 'mediump' ( global float) +0:? 'highp' ( global float) +0:? 'precision' ( global float) +0:? 'i' ( smooth in 4-component vector of float) +0:? 'o' ( out 4-component vector of float) +0:? 's2D' ( uniform sampler2D) +0:? 'centTexCoord' ( centroid smooth in 2-component vector of float) +0:? 'm' ( uniform 4X2 matrix of float) +0:? 'imageBuffer' ( global float) +0:? 'uimage2DRect' ( global float) +0:? 'a' ( temp int) +0:? 'gl_TexCoord' ( smooth in 6-element array of 4-component vector of float TexCoord) +0:? 'm22' ( global 2X2 matrix of float) +0:? 'm23' ( global 2X3 matrix of float) +0:? 'm24' ( global 2X4 matrix of float) +0:? 'm32' ( global 3X2 matrix of float) +0:? 'm33' ( global 3X3 matrix of float) +0:? 'm34' ( global 3X4 matrix of float) +0:? 'm42' ( global 4X2 matrix of float) +0:? 'm43' ( global 4X3 matrix of float) +0:? 'm44' ( global 4X4 matrix of float) +0:? 's3D' ( uniform sampler3D) +0:? 's1D' ( uniform sampler1D) +0:? 's2DS' ( uniform sampler2DShadow) +0:? 's2DRbad' ( uniform sampler2DRect) +0:? 's2DR' ( uniform sampler2DRect) +0:? 's2DRS' ( uniform sampler2DRectShadow) +0:? 'halfFloat1' ( global float) + + +Linked fragment stage: + +ERROR: Linking fragment stage: Recursion detected: + foo(f1; calling foo(f1; + +Shader version: 120 +Requested GL_ARB_shader_texture_lod +Requested GL_ARB_texture_rectangle +ERROR: node is still EOpNull! +0:92 Function Definition: main(i1; ( global void) +0:92 Function Parameters: +0:92 'a' ( in int) +0:? Linker Objects +0:? 'lowp' ( global float) +0:? 'mediump' ( global float) +0:? 'highp' ( global float) +0:? 'precision' ( global float) +0:? 'i' ( smooth in 4-component vector of float) +0:? 'o' ( out 4-component vector of float) +0:? 's2D' ( uniform sampler2D) +0:? 'centTexCoord' ( centroid smooth in 2-component vector of float) +0:? 'm' ( uniform 4X2 matrix of float) +0:? 'imageBuffer' ( global float) +0:? 'uimage2DRect' ( global float) +0:? 'a' ( temp int) +0:? 'gl_TexCoord' ( smooth in 6-element array of 4-component vector of float TexCoord) +0:? 'm22' ( global 2X2 matrix of float) +0:? 'm23' ( global 2X3 matrix of float) +0:? 'm24' ( global 2X4 matrix of float) +0:? 'm32' ( global 3X2 matrix of float) +0:? 'm33' ( global 3X3 matrix of float) +0:? 'm34' ( global 3X4 matrix of float) +0:? 'm42' ( global 4X2 matrix of float) +0:? 'm43' ( global 4X3 matrix of float) +0:? 'm44' ( global 4X4 matrix of float) +0:? 's3D' ( uniform sampler3D) +0:? 's1D' ( uniform sampler1D) +0:? 's2DS' ( uniform sampler2DShadow) +0:? 's2DRbad' ( uniform sampler2DRect) +0:? 's2DR' ( uniform sampler2DRect) +0:? 's2DRS' ( uniform sampler2DRectShadow) +0:? 'halfFloat1' ( global float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/120.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/120.vert.out new file mode 100644 index 0000000..c89be98 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/120.vert.out @@ -0,0 +1,504 @@ +120.vert +ERROR: 0:3: 'in for stage inputs' : not supported for this version or the enabled extensions +ERROR: 0:4: 'out for stage outputs' : not supported for this version or the enabled extensions +ERROR: 0:11: 'gl_Position' : cannot add storage, auxiliary, memory, interpolation, layout, or precision qualifier to an existing variable +ERROR: 0:12: '' : can only have one auxiliary qualifier (centroid, patch, and sample) +ERROR: 0:12: '' : replicated qualifiers +ERROR: 0:12: 'foo' : identifier not previously declared +ERROR: 0:21: 'gl_ClipDistance' : undeclared identifier +ERROR: 0:21: 'gl_ClipDistance' : left of '[' is not of type array, matrix, or vector +ERROR: 0:21: 'assign' : l-value required (can't modify a const) +ERROR: 0:28: 'length' : array must be declared with a size before using this method +ERROR: 0:31: 'length' : incomplete method syntax +ERROR: 0:32: 'length' : method does not accept any arguments +ERROR: 0:33: '.' : cannot apply to an array: flizbit +ERROR: 0:33: '=' : cannot convert from ' temp 7-element array of float' to ' temp int' +ERROR: 0:34: '.' : cannot apply to an array: flizbit +ERROR: 0:34: 'f' : can't use function syntax on variable +ERROR: 0:34: 'a4' : redefinition +ERROR: 0:35: 'arrays of arrays' : not supported with this profile: none +ERROR: 0:36: 'arrays of arrays' : not supported with this profile: none +ERROR: 0:37: 'arrays of arrays' : not supported with this profile: none +ERROR: 0:38: 'arrays of arrays' : not supported with this profile: none +ERROR: 0:39: 'arrays of arrays' : not supported with this profile: none +ERROR: 0:40: 'arrays of arrays' : not supported with this profile: none +ERROR: 0:40: 'constructor' : array constructor needs one argument per array element +ERROR: 0:40: 'arrays of arrays' : not supported with this profile: none +ERROR: 0:40: '=' : cannot convert from ' const float' to ' temp 2-element array of 3-element array of float' +ERROR: 0:41: 'arrays of arrays' : not supported with this profile: none +ERROR: 0:41: 'constructor' : array constructor needs one argument per array element +ERROR: 0:41: 'arrays of arrays' : not supported with this profile: none +ERROR: 0:41: '=' : cannot convert from ' const float' to ' temp 2-element array of 3-element array of float' +ERROR: 0:50: 'arrays of arrays' : not supported with this profile: none +ERROR: 0:51: 'arrays of arrays' : not supported with this profile: none +ERROR: 0:52: 'arrays of arrays' : not supported with this profile: none +ERROR: 0:53: 'arrays of arrays' : not supported with this profile: none +ERROR: 0:56: 'out' : overloaded functions must have the same parameter storage qualifiers for argument 1 +ERROR: 0:57: 'float' : overloaded functions must have the same return type +ERROR: 0:87: 'overloadC' : no matching overloaded function found +ERROR: 0:90: 'overloadC' : no matching overloaded function found +ERROR: 0:95: 'overloadD' : ambiguous function signature match: multiple signatures match under implicit type conversion +ERROR: 0:98: 'overloadB' : can't use function syntax on variable +ERROR: 0:106: 'overloadC' : no matching overloaded function found +ERROR: 0:107: 'overloadE' : no matching overloaded function found +ERROR: 0:108: 'overloadE' : no matching overloaded function found +ERROR: 0:111: 'overloadE' : no matching overloaded function found +ERROR: 0:117: 'overloadF' : no matching overloaded function found +ERROR: 0:121: 'gl_TexCoord array size' : must be less than or equal to gl_MaxTextureCoords (32) +ERROR: 0:165: 'switch' : Reserved word. +ERROR: 0:171: 'default' : Reserved word. +ERROR: 0:165: 'switch statements' : not supported for this version or the enabled extensions +ERROR: 0:176: 'bit shift left' : not supported for this version or the enabled extensions +ERROR: 0:176: 'bit shift right' : not supported for this version or the enabled extensions +ERROR: 0:176: 'bitwise and' : not supported for this version or the enabled extensions +ERROR: 0:176: 'bitwise inclusive or' : not supported for this version or the enabled extensions +ERROR: 0:179: 'modf' : no matching overloaded function found +ERROR: 0:179: '=' : cannot convert from ' const float' to ' temp 3-component vector of float' +ERROR: 0:180: 'trunc' : no matching overloaded function found +ERROR: 0:181: 'round' : no matching overloaded function found +ERROR: 0:181: '=' : cannot convert from ' const float' to ' temp 2-component vector of float' +ERROR: 0:182: 'roundEven' : no matching overloaded function found +ERROR: 0:182: '=' : cannot convert from ' const float' to ' temp 2-component vector of float' +ERROR: 0:183: 'isnan' : no matching overloaded function found +ERROR: 0:183: '=' : cannot convert from ' const float' to ' temp 2-component vector of bool' +ERROR: 0:184: 'isinf' : no matching overloaded function found +ERROR: 0:184: '=' : cannot convert from ' const float' to ' temp 4-component vector of bool' +ERROR: 0:186: 'sinh' : no matching overloaded function found +ERROR: 0:187: 'cosh' : no matching overloaded function found +ERROR: 0:187: 'tanh' : no matching overloaded function found +ERROR: 0:188: 'c4D' : undeclared identifier +ERROR: 0:188: 'asinh' : no matching overloaded function found +ERROR: 0:188: 'acosh' : no matching overloaded function found +ERROR: 0:189: 'atanh' : no matching overloaded function found +ERROR: 0:191: 'gl_VertexID' : undeclared identifier +ERROR: 0:191: '=' : cannot convert from ' temp float' to ' temp int' +ERROR: 0:192: 'gl_ClipDistance' : undeclared identifier +ERROR: 0:192: 'gl_ClipDistance' : left of '[' is not of type array, matrix, or vector +ERROR: 0:192: 'assign' : l-value required (can't modify a const) +ERROR: 0:195: 'gl_ModelViewMatrix' : identifiers starting with "gl_" are reserved +ERROR: 0:200: 'token pasting (##)' : not supported for this version or the enabled extensions +ERROR: 0:203: 'token pasting (##)' : not supported for this version or the enabled extensions +ERROR: 79 compilation errors. No code generated. + + +Shader version: 120 +ERROR: node is still EOpNull! +0:15 Function Definition: main( ( global void) +0:15 Function Parameters: +0:17 Sequence +0:17 move second child to first child ( temp 2-component vector of float) +0:17 'centTexCoord' ( invariant smooth out 2-component vector of float) +0:17 'attv2' ( in 2-component vector of float) +0:18 move second child to first child ( temp 4-component vector of float) +0:18 'gl_Position' ( invariant gl_Position 4-component vector of float Position) +0:18 'attv4' ( in 4-component vector of float) +0:20 move second child to first child ( temp 4-component vector of float) +0:20 'gl_ClipVertex' ( gl_ClipVertex 4-component vector of float ClipVertex) +0:20 'attv4' ( in 4-component vector of float) +0:21 move second child to first child ( temp float) +0:21 Constant: +0:21 0.000000 +0:21 Constant: +0:21 0.200000 +0:25 move second child to first child ( temp 4-component vector of float) +0:25 'gl_Position' ( invariant gl_Position 4-component vector of float Position) +0:25 direct index ( temp 4-component vector of float) +0:25 'b' ( temp 12-element array of 4-component vector of float) +0:25 Constant: +0:25 11 (const int) +0:28 Sequence +0:28 move second child to first child ( temp int) +0:28 'a1' ( temp int) +0:28 Constant: +0:28 1 (const int) +0:30 Sequence +0:30 move second child to first child ( temp int) +0:30 'aa' ( 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 'a2' ( temp int) +0:32 Sequence +0:32 move second child to first child ( temp int) +0:32 'a3' ( temp int) +0:32 Constant: +0:32 1 (const int) +0:43 move second child to first child ( temp float) +0:43 'gl_PointSize' ( invariant gl_PointSize float PointSize) +0:43 Constant: +0:43 3.800000 +0:61 Function Definition: overloadB(f1;f1; ( global void) +0:61 Function Parameters: +0:61 '' ( in float) +0:61 '' ( const (read only) float) +0:78 Function Definition: foo( ( global void) +0:78 Function Parameters: +0:? Sequence +0:83 Function Call: overloadB(f1;f1; ( global void) +0:83 'f' ( temp float) +0:83 'f' ( temp float) +0:84 Function Call: overloadB(f1;f1; ( global void) +0:84 'f' ( temp float) +0:84 Constant: +0:84 2.000000 +0:85 Function Call: overloadB(f1;f1; ( global void) +0:85 Constant: +0:85 1.000000 +0:85 Convert int to float ( temp float) +0:85 'i' ( temp int) +0:87 Constant: +0:87 0.000000 +0:88 Function Call: overloadC(i1;i1; ( global 2-component vector of float) +0:88 Constant: +0:88 1 (const int) +0:88 'i' ( temp int) +0:89 Function Call: overloadC(vf2;vf2; ( global 2-component vector of float) +0:89 Constant: +0:89 1.000000 +0:89 1.000000 +0:89 Constant: +0:89 2.000000 +0:89 2.000000 +0:90 Constant: +0:90 0.000000 +0:91 Function Call: overloadC(vf2;vf2; ( global 2-component vector of float) +0:91 Constant: +0:91 1.000000 +0:91 1.000000 +0:91 Constant: +0:91 2.000000 +0:91 2.000000 +0:93 Function Call: overloadD(i1;f1; ( global 3-component vector of float) +0:93 'i' ( temp int) +0:93 'f' ( temp float) +0:94 Function Call: overloadD(f1;i1; ( global 3-component vector of float) +0:94 'f' ( temp float) +0:94 'i' ( temp int) +0:95 Function Call: overloadD(f1;i1; ( global 3-component vector of float) +0:95 Convert int to float ( temp float) +0:95 'i' ( temp int) +0:95 'i' ( temp int) +0:98 Constant: +0:98 0.000000 +0:100 Constant: +0:100 0.841471 +0:101 texture ( global 4-component vector of float) +0:101 's2D' ( uniform sampler2D) +0:101 Constant: +0:101 0.000000 +0:101 0.000000 +0:102 clamp ( global 4-component vector of float) +0:102 'attv4' ( in 4-component vector of float) +0:102 Constant: +0:102 0.000000 +0:102 Constant: +0:102 1.000000 +0:103 clamp ( global 4-component vector of float) +0:103 Convert int to float ( temp 4-component vector of float) +0:103 Convert float to int ( temp 4-component vector of int) +0:103 'attv4' ( in 4-component vector of float) +0:103 Constant: +0:103 0.000000 +0:103 Constant: +0:103 1.000000 +0:106 Constant: +0:106 0.000000 +0:107 Constant: +0:107 0.000000 +0:108 Constant: +0:108 0.000000 +0:109 Function Call: overloadE(vf2; ( global 3-component vector of float) +0:109 Constant: +0:109 3.300000 +0:109 3.300000 +0:110 Function Call: overloadE(mf22; ( global 3-component vector of float) +0:110 Constant: +0:110 0.500000 +0:110 0.000000 +0:110 0.000000 +0:110 0.500000 +0:111 Constant: +0:111 0.000000 +0:112 Function Call: overloadE(vf2; ( global 3-component vector of float) +0:112 Constant: +0:112 1.000000 +0:112 1.000000 +0:115 Function Call: overloadE(f1[2]; ( global 3-component vector of float) +0:115 'b' ( temp 2-element array of float) +0:117 Constant: +0:117 0.000000 +0:118 Function Call: overloadF(i1; ( global 3-component vector of float) +0:118 Constant: +0:118 1 (const int) +0:128 Function Definition: foo2( ( global void) +0:128 Function Parameters: +0:? Sequence +0:135 Comma ( global void) +0:135 Function Call: outFun(f1;vi2;i1;f1; ( global void) +0:135 Convert int to float ( temp float) +0:135 'i' ( temp int) +0:135 'tempArg' ( temp 2-component vector of int) +0:135 'i' ( temp int) +0:135 'f' ( temp float) +0:135 move second child to first child ( temp 2-component vector of float) +0:135 'v2' ( temp 2-component vector of float) +0:135 Convert int to float ( temp 2-component vector of float) +0:135 'tempArg' ( temp 2-component vector of int) +0:136 Comma ( global int) +0:136 move second child to first child ( temp int) +0:136 'tempReturn' ( global int) +0:136 Function Call: outFunRet(f1;i1;i1;vi4; ( global int) +0:136 Convert int to float ( temp float) +0:136 'i' ( temp int) +0:136 'tempArg' ( temp int) +0:136 'i' ( temp int) +0:136 'tempArg' ( temp 4-component vector of int) +0:136 move second child to first child ( temp float) +0:136 'f' ( temp float) +0:136 Convert int to float ( temp float) +0:136 'tempArg' ( temp int) +0:136 move second child to first child ( temp 4-component vector of float) +0:136 'v4' ( temp 4-component vector of float) +0:136 Convert int to float ( temp 4-component vector of float) +0:136 'tempArg' ( temp 4-component vector of int) +0:136 'tempReturn' ( global int) +0:137 Sequence +0:137 move second child to first child ( temp float) +0:137 'ret' ( temp float) +0:137 Convert int to float ( temp float) +0:137 Comma ( global int) +0:137 move second child to first child ( temp int) +0:137 'tempReturn' ( global int) +0:137 Function Call: outFunRet(f1;i1;i1;vi4; ( global int) +0:137 Convert int to float ( temp float) +0:137 'i' ( temp int) +0:137 'tempArg' ( temp int) +0:137 'i' ( temp int) +0:137 'tempArg' ( temp 4-component vector of int) +0:137 move second child to first child ( temp float) +0:137 'f' ( temp float) +0:137 Convert int to float ( temp float) +0:137 'tempArg' ( temp int) +0:137 move second child to first child ( temp 4-component vector of float) +0:137 'v4' ( temp 4-component vector of float) +0:137 Convert int to float ( temp 4-component vector of float) +0:137 'tempArg' ( temp 4-component vector of int) +0:137 'tempReturn' ( global int) +0:138 Sequence +0:138 move second child to first child ( temp 2-component vector of float) +0:138 'ret2' ( temp 2-component vector of float) +0:138 Convert int to float ( temp 2-component vector of float) +0:138 Comma ( global 2-component vector of int) +0:138 move second child to first child ( temp 2-component vector of int) +0:138 'tempReturn' ( global 2-component vector of int) +0:138 Function Call: outFunRet(f1;vi4;i1;vi4; ( global 2-component vector of int) +0:138 Convert int to float ( temp float) +0:138 'i' ( temp int) +0:138 'tempArg' ( temp 4-component vector of int) +0:138 'i' ( temp int) +0:138 'tempArg' ( temp 4-component vector of int) +0:138 move second child to first child ( temp 4-component vector of float) +0:138 'v4' ( temp 4-component vector of float) +0:138 Convert int to float ( temp 4-component vector of float) +0:138 'tempArg' ( temp 4-component vector of int) +0:138 move second child to first child ( temp 4-component vector of float) +0:138 'v4' ( temp 4-component vector of float) +0:138 Convert int to float ( temp 4-component vector of float) +0:138 'tempArg' ( temp 4-component vector of int) +0:138 'tempReturn' ( global 2-component vector of int) +0:139 Sequence +0:139 move second child to first child ( temp bool) +0:139 'b' ( temp bool) +0:139 any ( global bool) +0:139 Compare Less Than ( global 4-component vector of bool) +0:139 'v4' ( temp 4-component vector of float) +0:139 'attv4' ( in 4-component vector of float) +0:142 Function Definition: noise( ( global void) +0:142 Function Parameters: +0:144 Sequence +0:144 Sequence +0:144 move second child to first child ( temp float) +0:144 'f1' ( temp float) +0:144 noise ( global float) +0:144 Constant: +0:144 1.000000 +0:145 Sequence +0:145 move second child to first child ( temp 2-component vector of float) +0:145 'f2' ( temp 2-component vector of float) +0:145 noise ( global 2-component vector of float) +0:145 Constant: +0:145 1.000000 +0:145 1.000000 +0:146 Sequence +0:146 move second child to first child ( temp 3-component vector of float) +0:146 'f3' ( temp 3-component vector of float) +0:146 noise ( global 3-component vector of float) +0:146 Constant: +0:146 1.000000 +0:146 1.000000 +0:146 1.000000 +0:147 Sequence +0:147 move second child to first child ( temp 4-component vector of float) +0:147 'f4' ( temp 4-component vector of float) +0:147 noise ( global 4-component vector of float) +0:147 Constant: +0:147 1.000000 +0:147 1.000000 +0:147 1.000000 +0:147 1.000000 +0:162 Function Definition: foo213( ( global void) +0:162 Function Parameters: +0:164 Sequence +0:164 Sequence +0:164 move second child to first child ( temp float) +0:164 'f' ( temp float) +0:164 Constant: +0:164 3.000000 +0:165 switch +0:165 condition +0:165 'c' ( uniform int) +0:165 body +0:165 Sequence +0:166 case: with expression +0:166 Constant: +0:166 1 (const int) +0:? Sequence +0:167 move second child to first child ( temp float) +0:167 'f' ( temp float) +0:167 sine ( global float) +0:167 'f' ( temp float) +0:168 Branch: Break +0:169 case: with expression +0:169 Constant: +0:169 2 (const int) +0:? Sequence +0:170 move second child to first child ( temp float) +0:170 'f' ( temp float) +0:170 component-wise multiply ( temp float) +0:170 'f' ( temp float) +0:170 'f' ( temp float) +0:171 default: +0:? Sequence +0:172 move second child to first child ( temp float) +0:172 'f' ( temp float) +0:172 Constant: +0:172 3.000000 +0:176 inclusive-or ( temp int) +0:176 left-shift ( temp int) +0:176 'i' ( temp int) +0:176 Constant: +0:176 3 (const int) +0:176 Constant: +0:176 69 (const int) +0:180 Sequence +0:180 move second child to first child ( temp float) +0:180 't' ( temp float) +0:180 Constant: +0:180 0.000000 +0:186 Constant: +0:186 0.000000 +0:188 Constant: +0:188 0.000000 +0:189 Constant: +0:189 0.000000 +0:192 move second child to first child ( temp float) +0:192 Constant: +0:192 0.000000 +0:192 Constant: +0:192 0.300000 +0:? Linker Objects +0:? 'i' ( in 4-component vector of float) +0:? 'o' ( smooth out 4-component vector of float) +0:? 'attv2' ( in 2-component vector of float) +0:? 'attv4' ( in 4-component vector of float) +0:? 's2D' ( uniform sampler2D) +0:? 'centTexCoord' ( invariant smooth out 2-component vector of float) +0:? 'initted' ( uniform float) +0:? 3.400000 +0:? 'concall' ( const float) +0:? 0.295520 +0:? 'gl_TexCoord' ( smooth out 35-element array of 4-component vector of float TexCoord) +0:? 'c' ( uniform int) +0:? 'x' ( in 2-component vector of int) +0:? 'v2a' ( in 2-component vector of float) +0:? 'c1D' ( in float) +0:? 'c2D' ( in 2-component vector of float) +0:? 'c3D' ( in 3-component vector of float) +0:? 'v4' ( uniform 4-component vector of float) +0:? 'abcdef' ( global int) +0:? 'qrstuv' ( global int) + + +Linked vertex stage: + + +Shader version: 120 +ERROR: node is still EOpNull! +0:15 Function Definition: main( ( global void) +0:15 Function Parameters: +0:17 Sequence +0:17 move second child to first child ( temp 2-component vector of float) +0:17 'centTexCoord' ( invariant smooth out 2-component vector of float) +0:17 'attv2' ( in 2-component vector of float) +0:18 move second child to first child ( temp 4-component vector of float) +0:18 'gl_Position' ( invariant gl_Position 4-component vector of float Position) +0:18 'attv4' ( in 4-component vector of float) +0:20 move second child to first child ( temp 4-component vector of float) +0:20 'gl_ClipVertex' ( gl_ClipVertex 4-component vector of float ClipVertex) +0:20 'attv4' ( in 4-component vector of float) +0:21 move second child to first child ( temp float) +0:21 Constant: +0:21 0.000000 +0:21 Constant: +0:21 0.200000 +0:25 move second child to first child ( temp 4-component vector of float) +0:25 'gl_Position' ( invariant gl_Position 4-component vector of float Position) +0:25 direct index ( temp 4-component vector of float) +0:25 'b' ( temp 12-element array of 4-component vector of float) +0:25 Constant: +0:25 11 (const int) +0:28 Sequence +0:28 move second child to first child ( temp int) +0:28 'a1' ( temp int) +0:28 Constant: +0:28 1 (const int) +0:30 Sequence +0:30 move second child to first child ( temp int) +0:30 'aa' ( 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 'a2' ( temp int) +0:32 Sequence +0:32 move second child to first child ( temp int) +0:32 'a3' ( temp int) +0:32 Constant: +0:32 1 (const int) +0:43 move second child to first child ( temp float) +0:43 'gl_PointSize' ( invariant gl_PointSize float PointSize) +0:43 Constant: +0:43 3.800000 +0:? Linker Objects +0:? 'i' ( in 4-component vector of float) +0:? 'o' ( smooth out 4-component vector of float) +0:? 'attv2' ( in 2-component vector of float) +0:? 'attv4' ( in 4-component vector of float) +0:? 's2D' ( uniform sampler2D) +0:? 'centTexCoord' ( invariant smooth out 2-component vector of float) +0:? 'initted' ( uniform float) +0:? 3.400000 +0:? 'concall' ( const float) +0:? 0.295520 +0:? 'gl_TexCoord' ( smooth out 35-element array of 4-component vector of float TexCoord) +0:? 'c' ( uniform int) +0:? 'x' ( in 2-component vector of int) +0:? 'v2a' ( in 2-component vector of float) +0:? 'c1D' ( in float) +0:? 'c2D' ( in 2-component vector of float) +0:? 'c3D' ( in 3-component vector of float) +0:? 'v4' ( uniform 4-component vector of float) +0:? 'abcdef' ( global int) +0:? 'qrstuv' ( global int) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/130.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/130.frag.out new file mode 100644 index 0000000..c1c479a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/130.frag.out @@ -0,0 +1,460 @@ +130.frag +ERROR: 0:25: 'textureGather(...)' : not supported for this version or the enabled extensions +ERROR: 0:35: 'redeclaration' : cannot change the type of gl_Color +ERROR: 0:38: 'gl_Color' : redeclaring non-array as array +ERROR: 0:39: 'redeclaration' : cannot change storage, memory, or auxiliary qualification of gl_Color +WARNING: 0:45: extension GL_ARB_texture_gather is being used for textureGather(...) +ERROR: 0:62: '<' : wrong operand types: no operation '<' exists that takes a left-hand operand of type ' temp 3-component vector of bool' and a right operand of type ' temp 3-component vector of bool' (or there is no acceptable conversion) +ERROR: 0:63: '>' : wrong operand types: no operation '>' exists that takes a left-hand operand of type ' temp 3-component vector of uint' and a right operand of type ' temp 3-component vector of uint' (or there is no acceptable conversion) +ERROR: 0:64: '>=' : wrong operand types: no operation '>=' exists that takes a left-hand operand of type ' const 2-component vector of uint' and a right operand of type ' const 2-component vector of uint' (or there is no acceptable conversion) +ERROR: 0:80: 'textureGatherOffset' : no matching overloaded function found +ERROR: 0:80: 'assign' : cannot convert from ' const float' to ' temp 4-component vector of float' +ERROR: 0:81: 'textureGatherOffset(...)' : not supported for this version or the enabled extensions +ERROR: 0:84: 'textureGatherOffset(...)' : not supported for this version or the enabled extensions +ERROR: 0:85: 'textureGatherOffset(...)' : not supported for this version or the enabled extensions +WARNING: 0:88: '#extension' : extension is only partially supported: GL_ARB_gpu_shader5 +ERROR: 0:120: 'line continuation' : not supported for this version or the enabled extensions +ERROR: 0:126: 'uniform block' : not supported for this version or the enabled extensions +ERROR: 0:140: 'length' : does not operate on this type: temp bool +ERROR: 0:140: 'boolb' : can't use function syntax on variable +ERROR: 0:141: 'length' : does not operate on this type: temp float +ERROR: 0:141: '' : function call, method, or subroutine call expected +ERROR: 0:141: '' : no matching overloaded function found +ERROR: 0:142: 'length' : incomplete method syntax +ERROR: 0:143: 'length' : method does not accept any arguments +ERROR: 0:146: 'gl_FogFragCoord' : identifiers starting with "gl_" are reserved +ERROR: 0:151: 'int' : must be qualified as flat in +ERROR: 0:151: 'redeclaration' : cannot change the type of gl_FogFragCoord +ERROR: 0:153: 'early_fragment_tests' : not supported for this version or the enabled extensions +ERROR: 0:154: 'image load store' : not supported for this version or the enabled extensions +ERROR: 0:154: 'iimage2D' : Reserved word. +ERROR: 0:169: 'early_fragment_tests' : can only apply to 'in' +ERROR: 28 compilation errors. No code generated. + + +Shader version: 130 +Requested GL_ARB_gpu_shader5 +Requested GL_ARB_separate_shader_objects +Requested GL_ARB_shader_image_load_store +Requested GL_ARB_shading_language_420pack +Requested GL_ARB_texture_cube_map_array +Requested GL_ARB_texture_gather +Requested GL_ARB_texture_rectangle +using early_fragment_tests +ERROR: node is still EOpNull! +0:16 Function Definition: main( ( global void) +0:16 Function Parameters: +0:18 Sequence +0:18 Sequence +0:18 move second child to first child ( temp float) +0:18 'clip' ( temp float) +0:18 direct index ( smooth temp float ClipDistance) +0:18 'gl_ClipDistance' ( smooth in implicitly-sized array of float ClipDistance) +0:18 Constant: +0:18 3 (const int) +0:23 Function Definition: foo( ( global void) +0:23 Function Parameters: +0:25 Sequence +0:25 Sequence +0:25 move second child to first child ( temp 4-component vector of float) +0:25 's' ( temp 4-component vector of float) +0:25 textureGather ( global 4-component vector of float) +0:25 'sampC' ( uniform samplerCube) +0:25 Constant: +0:25 0.200000 +0:25 0.200000 +0:25 0.200000 +0:30 Function Definition: bar( ( global void) +0:30 Function Parameters: +0:32 Sequence +0:32 Sequence +0:32 move second child to first child ( temp 4-component vector of float) +0:32 's' ( temp 4-component vector of float) +0:32 textureGather ( global 4-component vector of float) +0:32 'sampC' ( uniform samplerCube) +0:32 Constant: +0:32 0.200000 +0:32 0.200000 +0:32 0.200000 +0:43 Function Definition: bar2( ( global void) +0:43 Function Parameters: +0:45 Sequence +0:45 Sequence +0:45 move second child to first child ( temp 4-component vector of float) +0:45 's' ( temp 4-component vector of float) +0:45 textureGather ( global 4-component vector of float) +0:45 'sampC' ( uniform samplerCube) +0:45 Constant: +0:45 0.200000 +0:45 0.200000 +0:45 0.200000 +0:49 move second child to first child ( temp 3-component vector of bool) +0:49 'b3' ( temp 3-component vector of bool) +0:49 Compare Less Than ( global 3-component vector of bool) +0:49 'uv3' ( temp 3-component vector of uint) +0:49 'uv3' ( temp 3-component vector of uint) +0:50 move second child to first child ( temp 3-component vector of bool) +0:50 'b3' ( temp 3-component vector of bool) +0:50 Equal ( global 3-component vector of bool) +0:50 'uv3' ( temp 3-component vector of uint) +0:50 'uv3' ( temp 3-component vector of uint) +0:56 direct index ( temp int) +0:56 'a1' ( temp 1-element array of int) +0:56 Constant: +0:56 0 (const int) +0:57 direct index ( temp int) +0:57 'a2' ( temp 1-element array of int) +0:57 Constant: +0:57 0 (const int) +0:60 direct index ( temp int) +0:60 'a3' ( temp 4-element array of int) +0:60 Constant: +0:60 3 (const int) +0:61 Compare Not Equal ( temp bool) +0:61 'b3' ( temp 3-component vector of bool) +0:61 'b3' ( temp 3-component vector of bool) +0:62 Constant: +0:62 false (const bool) +0:63 Constant: +0:63 false (const bool) +0:64 Constant: +0:64 false (const bool) +0:65 Constant: +0:65 true (const bool) +0:66 Constant: +0:66 false (const bool) +0:77 Function Definition: bar23( ( global void) +0:77 Function Parameters: +0:? Sequence +0:80 's' ( temp 4-component vector of float) +0:81 move second child to first child ( temp 4-component vector of float) +0:81 's' ( temp 4-component vector of float) +0:81 textureGatherOffset ( global 4-component vector of float) +0:81 'samp2DR' ( uniform sampler2DRect) +0:81 Constant: +0:81 0.300000 +0:81 0.300000 +0:81 Constant: +0:81 1 (const int) +0:81 1 (const int) +0:82 move second child to first child ( temp 4-component vector of float) +0:82 's' ( temp 4-component vector of float) +0:82 textureGatherOffset ( global 4-component vector of float) +0:82 'samp2D' ( uniform sampler2D) +0:82 Constant: +0:82 0.300000 +0:82 0.300000 +0:82 Constant: +0:82 1 (const int) +0:82 1 (const int) +0:83 move second child to first child ( temp 4-component vector of float) +0:83 's' ( temp 4-component vector of float) +0:83 textureGatherOffset ( global 4-component vector of float) +0:83 'samp2DA' ( uniform sampler2DArray) +0:83 Constant: +0:83 0.300000 +0:83 0.300000 +0:83 0.300000 +0:83 Constant: +0:83 1 (const int) +0:83 1 (const int) +0:84 move second child to first child ( temp 4-component vector of float) +0:84 's' ( temp 4-component vector of float) +0:84 textureGatherOffset ( global 4-component vector of float) +0:84 'samp2DS' ( uniform sampler2DShadow) +0:84 Constant: +0:84 0.300000 +0:84 0.300000 +0:84 Constant: +0:84 1.300000 +0:84 Constant: +0:84 1 (const int) +0:84 1 (const int) +0:85 move second child to first child ( temp 4-component vector of float) +0:85 's' ( temp 4-component vector of float) +0:85 textureGatherOffset ( global 4-component vector of float) +0:85 'samp2D' ( uniform sampler2D) +0:85 Constant: +0:85 0.300000 +0:85 0.300000 +0:85 Constant: +0:85 1 (const int) +0:85 1 (const int) +0:85 Constant: +0:85 2 (const int) +0:90 Function Definition: bar234( ( global void) +0:90 Function Parameters: +0:? Sequence +0:93 move second child to first child ( temp 4-component vector of float) +0:93 's' ( temp 4-component vector of float) +0:93 textureGatherOffset ( global 4-component vector of float) +0:93 'samp2D' ( uniform sampler2D) +0:93 Constant: +0:93 0.300000 +0:93 0.300000 +0:93 Constant: +0:93 1 (const int) +0:93 1 (const int) +0:94 move second child to first child ( temp 4-component vector of float) +0:94 's' ( temp 4-component vector of float) +0:94 textureGatherOffset ( global 4-component vector of float) +0:94 'samp2DA' ( uniform sampler2DArray) +0:94 Constant: +0:94 0.300000 +0:94 0.300000 +0:94 0.300000 +0:94 Constant: +0:94 1 (const int) +0:94 1 (const int) +0:95 move second child to first child ( temp 4-component vector of float) +0:95 's' ( temp 4-component vector of float) +0:95 textureGatherOffset ( global 4-component vector of float) +0:95 'samp2DR' ( uniform sampler2DRect) +0:95 Constant: +0:95 0.300000 +0:95 0.300000 +0:95 Constant: +0:95 1 (const int) +0:95 1 (const int) +0:96 move second child to first child ( temp 4-component vector of float) +0:96 's' ( temp 4-component vector of float) +0:96 textureGatherOffset ( global 4-component vector of float) +0:96 'samp2DS' ( uniform sampler2DShadow) +0:96 Constant: +0:96 0.300000 +0:96 0.300000 +0:96 Constant: +0:96 1.300000 +0:96 Constant: +0:96 1 (const int) +0:96 1 (const int) +0:97 move second child to first child ( temp 4-component vector of float) +0:97 's' ( temp 4-component vector of float) +0:97 textureGatherOffset ( global 4-component vector of float) +0:97 'samp2D' ( uniform sampler2D) +0:97 Constant: +0:97 0.300000 +0:97 0.300000 +0:97 Constant: +0:97 1 (const int) +0:97 1 (const int) +0:97 Constant: +0:97 2 (const int) +0:107 Function Definition: bar235( ( global void) +0:107 Function Parameters: +0:109 Sequence +0:109 Sequence +0:109 move second child to first child ( temp 3-component vector of int) +0:109 'a' ( temp 3-component vector of int) +0:109 textureSize ( global 3-component vector of int) +0:109 'Sca' ( uniform samplerCubeArray) +0:109 Constant: +0:109 3 (const int) +0:110 Sequence +0:110 move second child to first child ( temp 4-component vector of float) +0:110 'b' ( temp 4-component vector of float) +0:110 texture ( global 4-component vector of float) +0:110 'Sca' ( uniform samplerCubeArray) +0:110 'i' ( smooth in 4-component vector of float) +0:111 Sequence +0:111 move second child to first child ( temp 4-component vector of int) +0:111 'c' ( temp 4-component vector of int) +0:111 texture ( global 4-component vector of int) +0:111 'Isca' ( uniform isamplerCubeArray) +0:111 'i' ( smooth in 4-component vector of float) +0:111 Constant: +0:111 0.700000 +0:112 Sequence +0:112 move second child to first child ( temp 4-component vector of uint) +0:112 'd' ( temp 4-component vector of uint) +0:112 texture ( global 4-component vector of uint) +0:112 'Usca' ( uniform usamplerCubeArray) +0:112 'i' ( smooth in 4-component vector of float) +0:114 move second child to first child ( temp 4-component vector of float) +0:114 'b' ( temp 4-component vector of float) +0:114 textureLod ( global 4-component vector of float) +0:114 'Sca' ( uniform samplerCubeArray) +0:114 'i' ( smooth in 4-component vector of float) +0:114 Constant: +0:114 1.700000 +0:115 move second child to first child ( temp 3-component vector of int) +0:115 'a' ( temp 3-component vector of int) +0:115 textureSize ( global 3-component vector of int) +0:115 'Scas' ( uniform samplerCubeArrayShadow) +0:115 direct index ( temp int) +0:115 'a' ( temp 3-component vector of int) +0:115 Constant: +0:115 0 (const int) +0:116 Sequence +0:116 move second child to first child ( temp float) +0:116 'f' ( temp float) +0:116 texture ( global float) +0:116 'Scas' ( uniform samplerCubeArrayShadow) +0:116 'i' ( smooth in 4-component vector of float) +0:116 direct index ( temp float) +0:116 'b' ( temp 4-component vector of float) +0:116 Constant: +0:116 1 (const int) +0:117 move second child to first child ( temp 4-component vector of int) +0:117 'c' ( temp 4-component vector of int) +0:117 textureGrad ( global 4-component vector of int) +0:117 'Isca' ( uniform isamplerCubeArray) +0:117 'i' ( smooth in 4-component vector of float) +0:117 Constant: +0:117 0.100000 +0:117 0.100000 +0:117 0.100000 +0:117 Constant: +0:117 0.200000 +0:117 0.200000 +0:117 0.200000 +0:129 Function Definition: bar23444( ( global void) +0:129 Function Parameters: +0:? Sequence +0:132 Sequence +0:132 move second child to first child ( temp float) +0:132 'a1' ( temp float) +0:132 direct index ( temp float) +0:132 direct index ( temp 3-component vector of float) +0:132 'm43' ( temp 4X3 matrix of float) +0:132 Constant: +0:132 3 (const int) +0:132 Constant: +0:132 1 (const int) +0:134 Sequence +0:134 move second child to first child ( temp int) +0:134 'a2' ( temp int) +0:134 Constant: +0:134 4 (const int) +0:135 add second child into first child ( temp int) +0:135 'a2' ( temp int) +0:135 Constant: +0:135 3 (const int) +0:136 add second child into first child ( temp int) +0:136 'a2' ( temp int) +0:136 Constant: +0:136 3 (const int) +0:137 Sequence +0:137 move second child to first child ( temp float) +0:137 'b' ( const (read only) float) +0:137 component-wise multiply ( temp float) +0:137 Constant: +0:137 2.000000 +0:137 'a1' ( temp float) +0:138 move second child to first child ( temp float) +0:138 direct index ( temp float) +0:138 'a' ( global 3-component vector of float) +0:138 Constant: +0:138 0 (const int) +0:138 Constant: +0:138 -1.000000 +0:140 Constant: +0:140 0.000000 +0:141 Constant: +0:141 0.000000 +0:143 Constant: +0:143 1 (const int) +0:162 Function Definition: qux2( ( global void) +0:162 Function Parameters: +0:? Sequence +0:165 imageAtomicCompSwap ( global int) +0:165 'iimg2D' (layout( r32i) uniform iimage2D) +0:165 Construct ivec2 ( temp 2-component vector of int) +0:165 'i' ( temp int) +0:165 'i' ( temp int) +0:165 'i' ( temp int) +0:165 'i' ( temp int) +0:166 Sequence +0:166 move second child to first child ( temp 4-component vector of int) +0:166 'pos' ( temp 4-component vector of int) +0:166 imageLoad ( global 4-component vector of int) +0:166 'iimg2D' (layout( r32i) uniform iimage2D) +0:166 Construct ivec2 ( temp 2-component vector of int) +0:166 'i' ( temp int) +0:166 'i' ( temp int) +0:? Linker Objects +0:? 'a' ( global 3-component vector of float) +0:? 'b' ( global float) +0:? 'c' ( global int) +0:? 'i' ( smooth in 4-component vector of float) +0:? 'o' ( out 4-component vector of float) +0:? 'fflat' ( flat in float) +0:? 'fsmooth' ( smooth in float) +0:? 'fnop' ( noperspective in float) +0:? 'gl_ClipDistance' ( smooth in implicitly-sized array of float ClipDistance) +0:? 'sampC' ( uniform samplerCube) +0:? 'gl_Color' ( in 4-component vector of float Color) +0:? 'samp2D' ( uniform sampler2D) +0:? 'samp2DS' ( uniform sampler2DShadow) +0:? 'samp2DR' ( uniform sampler2DRect) +0:? 'samp2DA' ( uniform sampler2DArray) +0:? 'Sca' ( uniform samplerCubeArray) +0:? 'Isca' ( uniform isamplerCubeArray) +0:? 'Usca' ( uniform usamplerCubeArray) +0:? 'Scas' ( uniform samplerCubeArrayShadow) +0:? 'x' ( global int) +0:? 'ai' ( const 3-element array of int) +0:? 10 (const int) +0:? 23 (const int) +0:? 32 (const int) +0:? 'instanceName' (layout( binding=0 column_major shared) uniform block{layout( column_major shared) uniform int a}) +0:? 'bounds' (layout( binding=0) uniform sampler2D) +0:? 'gl_FogFragCoord' ( smooth in float) +0:? 'iimg2Dbad' (layout( r32i) uniform iimage2D) +0:? 'iimg2D' (layout( r32i) uniform iimage2D) + + +Linked fragment stage: + + +Shader version: 130 +Requested GL_ARB_gpu_shader5 +Requested GL_ARB_separate_shader_objects +Requested GL_ARB_shader_image_load_store +Requested GL_ARB_shading_language_420pack +Requested GL_ARB_texture_cube_map_array +Requested GL_ARB_texture_gather +Requested GL_ARB_texture_rectangle +using early_fragment_tests +ERROR: node is still EOpNull! +0:16 Function Definition: main( ( global void) +0:16 Function Parameters: +0:18 Sequence +0:18 Sequence +0:18 move second child to first child ( temp float) +0:18 'clip' ( temp float) +0:18 direct index ( smooth temp float ClipDistance) +0:18 'gl_ClipDistance' ( smooth in 4-element array of float ClipDistance) +0:18 Constant: +0:18 3 (const int) +0:? Linker Objects +0:? 'a' ( global 3-component vector of float) +0:? 'b' ( global float) +0:? 'c' ( global int) +0:? 'i' ( smooth in 4-component vector of float) +0:? 'o' ( out 4-component vector of float) +0:? 'fflat' ( flat in float) +0:? 'fsmooth' ( smooth in float) +0:? 'fnop' ( noperspective in float) +0:? 'gl_ClipDistance' ( smooth in 4-element array of float ClipDistance) +0:? 'sampC' ( uniform samplerCube) +0:? 'gl_Color' ( in 4-component vector of float Color) +0:? 'samp2D' ( uniform sampler2D) +0:? 'samp2DS' ( uniform sampler2DShadow) +0:? 'samp2DR' ( uniform sampler2DRect) +0:? 'samp2DA' ( uniform sampler2DArray) +0:? 'Sca' ( uniform samplerCubeArray) +0:? 'Isca' ( uniform isamplerCubeArray) +0:? 'Usca' ( uniform usamplerCubeArray) +0:? 'Scas' ( uniform samplerCubeArrayShadow) +0:? 'x' ( global int) +0:? 'ai' ( const 3-element array of int) +0:? 10 (const int) +0:? 23 (const int) +0:? 32 (const int) +0:? 'instanceName' (layout( binding=0 column_major shared) uniform block{layout( column_major shared) uniform int a}) +0:? 'bounds' (layout( binding=0) uniform sampler2D) +0:? 'gl_FogFragCoord' ( smooth in float) +0:? 'iimg2Dbad' (layout( r32i) uniform iimage2D) +0:? 'iimg2D' (layout( r32i) uniform iimage2D) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/130.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/130.vert.out new file mode 100644 index 0000000..7ec82ad --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/130.vert.out @@ -0,0 +1,286 @@ +130.vert +ERROR: 0:59: 'gl_InstanceID' : undeclared identifier +ERROR: 0:59: '=' : cannot convert from ' temp float' to ' temp int' +ERROR: 0:61: 'texelFetch' : no matching overloaded function found +ERROR: 0:61: 'assign' : cannot convert from ' const float' to ' temp int' +ERROR: 4 compilation errors. No code generated. + + +Shader version: 130 +ERROR: node is still EOpNull! +0:15 Function Definition: main( ( global void) +0:15 Function Parameters: +0:17 Sequence +0:17 Sequence +0:17 move second child to first child ( temp float) +0:17 'f' ( temp float) +0:17 Constant: +0:17 3.000000 +0:18 switch +0:18 condition +0:18 'c' ( uniform int) +0:18 body +0:18 Sequence +0:19 case: with expression +0:19 Constant: +0:19 1 (const int) +0:? Sequence +0:20 move second child to first child ( temp float) +0:20 'f' ( temp float) +0:20 sine ( global float) +0:20 'f' ( temp float) +0:21 Branch: Break +0:22 case: with expression +0:22 Constant: +0:22 2 (const int) +0:? Sequence +0:23 move second child to first child ( temp float) +0:23 'f' ( temp float) +0:23 component-wise multiply ( temp float) +0:23 'f' ( temp float) +0:23 'f' ( temp float) +0:24 default: +0:? Sequence +0:25 move second child to first child ( temp float) +0:25 'f' ( temp float) +0:25 Constant: +0:25 3.000000 +0:29 move second child to first child ( temp uint) +0:29 'i' ( temp uint) +0:29 direct index ( temp uint) +0:29 texture ( global 4-component vector of uint) +0:29 'us2D' ( uniform usampler2D) +0:29 Convert int to float ( temp 2-component vector of float) +0:29 'x' ( in 2-component vector of int) +0:29 Constant: +0:29 3 (const int) +0:30 inclusive-or ( temp uint) +0:30 left-shift ( temp uint) +0:30 'i' ( temp uint) +0:30 Constant: +0:30 3 (const uint) +0:30 Constant: +0:30 69 (const uint) +0:33 Sequence +0:33 move second child to first child ( temp 3-component vector of float) +0:33 'v11' ( temp 3-component vector of float) +0:33 modf ( global 3-component vector of float) +0:33 'modfIn' ( temp 3-component vector of float) +0:33 'modfOut' ( temp 3-component vector of float) +0:34 Sequence +0:34 move second child to first child ( temp float) +0:34 't' ( temp float) +0:34 trunc ( global float) +0:34 'f' ( temp float) +0:35 Sequence +0:35 move second child to first child ( temp 2-component vector of float) +0:35 'v12' ( temp 2-component vector of float) +0:35 round ( global 2-component vector of float) +0:35 'v2a' ( in 2-component vector of float) +0:36 Sequence +0:36 move second child to first child ( temp 2-component vector of float) +0:36 'v13' ( temp 2-component vector of float) +0:36 roundEven ( global 2-component vector of float) +0:36 'v2a' ( in 2-component vector of float) +0:37 Sequence +0:37 move second child to first child ( temp 2-component vector of bool) +0:37 'b10' ( temp 2-component vector of bool) +0:37 isnan ( global 2-component vector of bool) +0:37 'v2a' ( in 2-component vector of float) +0:38 Sequence +0:38 move second child to first child ( temp 4-component vector of bool) +0:38 'b11' ( temp 4-component vector of bool) +0:38 isinf ( global 4-component vector of bool) +0:38 'v4' ( uniform 4-component vector of float) +0:40 add ( temp 2-component vector of float) +0:40 hyp. sine ( global float) +0:40 'c1D' ( in float) +0:41 vector-scale ( temp 2-component vector of float) +0:41 hyp. cosine ( global float) +0:41 'c1D' ( in float) +0:41 hyp. tangent ( global 2-component vector of float) +0:41 'c2D' ( in 2-component vector of float) +0:42 add ( temp 4-component vector of float) +0:42 arc hyp. sine ( global 4-component vector of float) +0:42 'c4D' ( smooth temp 4-component vector of float) +0:42 arc hyp. cosine ( global 4-component vector of float) +0:42 'c4D' ( smooth temp 4-component vector of float) +0:43 arc hyp. tangent ( global 3-component vector of float) +0:43 'c3D' ( in 3-component vector of float) +0:45 Sequence +0:45 move second child to first child ( temp int) +0:45 'id' ( temp int) +0:45 'gl_VertexID' ( gl_VertexId int VertexId) +0:46 move second child to first child ( temp float) +0:46 direct index ( smooth temp float ClipDistance) +0:46 'gl_ClipDistance' ( smooth out implicitly-sized array of float ClipDistance) +0:46 Constant: +0:46 1 (const int) +0:46 Constant: +0:46 0.300000 +0:57 Function Definition: foo88( ( global void) +0:57 Function Parameters: +0:? Sequence +0:61 'id' ( temp int) +0:63 'gl_ClipVertex' ( gl_ClipVertex 4-component vector of float ClipVertex) +0:64 'gl_Color' ( in 4-component vector of float Color) +0:65 direct index ( temp structure{ global 4-component vector of float ambient, global 4-component vector of float diffuse, global 4-component vector of float specular, global 4-component vector of float position, global 4-component vector of float halfVector, global 3-component vector of float spotDirection, global float spotExponent, global float spotCutoff, global float spotCosCutoff, global float constantAttenuation, global float linearAttenuation, global float quadraticAttenuation}) +0:65 'gl_LightSource' ( uniform 32-element array of structure{ global 4-component vector of float ambient, global 4-component vector of float diffuse, global 4-component vector of float specular, global 4-component vector of float position, global 4-component vector of float halfVector, global 3-component vector of float spotDirection, global float spotExponent, global float spotCutoff, global float spotCosCutoff, global float constantAttenuation, global float linearAttenuation, global float quadraticAttenuation}) +0:65 Constant: +0:65 0 (const int) +0:66 far: direct index for structure ( global float) +0:66 'gl_DepthRange' ( uniform structure{ global float near, global float far, global float diff}) +0:66 Constant: +0:66 1 (const int) +0:67 'gl_TexCoord' ( smooth out implicitly-sized array of 4-component vector of float TexCoord) +0:68 'gl_FogFragCoord' ( smooth out float FogFragCoord) +0:69 'gl_FrontColor' ( smooth out 4-component vector of float FrontColor) +0:? Linker Objects +0:? 'c' ( uniform int) +0:? 'us2D' ( uniform usampler2D) +0:? 'x' ( in 2-component vector of int) +0:? 'v2a' ( in 2-component vector of float) +0:? 'c1D' ( in float) +0:? 'c2D' ( in 2-component vector of float) +0:? 'c3D' ( in 3-component vector of float) +0:? 'c4D' ( smooth temp 4-component vector of float) +0:? 'v4' ( uniform 4-component vector of float) +0:? 'gl_ClipDistance' ( smooth out implicitly-sized array of float ClipDistance) +0:? 'gl_TexCoord' ( smooth out implicitly-sized array of 4-component vector of float TexCoord) +0:? 'abcdef' ( global int) +0:? 'qrstuv' ( global int) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) + + +Linked vertex stage: + +ERROR: Linking vertex stage: Can only use one of gl_ClipDistance or gl_ClipVertex (gl_ClipDistance is preferred) + +Shader version: 130 +ERROR: node is still EOpNull! +0:15 Function Definition: main( ( global void) +0:15 Function Parameters: +0:17 Sequence +0:17 Sequence +0:17 move second child to first child ( temp float) +0:17 'f' ( temp float) +0:17 Constant: +0:17 3.000000 +0:18 switch +0:18 condition +0:18 'c' ( uniform int) +0:18 body +0:18 Sequence +0:19 case: with expression +0:19 Constant: +0:19 1 (const int) +0:? Sequence +0:20 move second child to first child ( temp float) +0:20 'f' ( temp float) +0:20 sine ( global float) +0:20 'f' ( temp float) +0:21 Branch: Break +0:22 case: with expression +0:22 Constant: +0:22 2 (const int) +0:? Sequence +0:23 move second child to first child ( temp float) +0:23 'f' ( temp float) +0:23 component-wise multiply ( temp float) +0:23 'f' ( temp float) +0:23 'f' ( temp float) +0:24 default: +0:? Sequence +0:25 move second child to first child ( temp float) +0:25 'f' ( temp float) +0:25 Constant: +0:25 3.000000 +0:29 move second child to first child ( temp uint) +0:29 'i' ( temp uint) +0:29 direct index ( temp uint) +0:29 texture ( global 4-component vector of uint) +0:29 'us2D' ( uniform usampler2D) +0:29 Convert int to float ( temp 2-component vector of float) +0:29 'x' ( in 2-component vector of int) +0:29 Constant: +0:29 3 (const int) +0:30 inclusive-or ( temp uint) +0:30 left-shift ( temp uint) +0:30 'i' ( temp uint) +0:30 Constant: +0:30 3 (const uint) +0:30 Constant: +0:30 69 (const uint) +0:33 Sequence +0:33 move second child to first child ( temp 3-component vector of float) +0:33 'v11' ( temp 3-component vector of float) +0:33 modf ( global 3-component vector of float) +0:33 'modfIn' ( temp 3-component vector of float) +0:33 'modfOut' ( temp 3-component vector of float) +0:34 Sequence +0:34 move second child to first child ( temp float) +0:34 't' ( temp float) +0:34 trunc ( global float) +0:34 'f' ( temp float) +0:35 Sequence +0:35 move second child to first child ( temp 2-component vector of float) +0:35 'v12' ( temp 2-component vector of float) +0:35 round ( global 2-component vector of float) +0:35 'v2a' ( in 2-component vector of float) +0:36 Sequence +0:36 move second child to first child ( temp 2-component vector of float) +0:36 'v13' ( temp 2-component vector of float) +0:36 roundEven ( global 2-component vector of float) +0:36 'v2a' ( in 2-component vector of float) +0:37 Sequence +0:37 move second child to first child ( temp 2-component vector of bool) +0:37 'b10' ( temp 2-component vector of bool) +0:37 isnan ( global 2-component vector of bool) +0:37 'v2a' ( in 2-component vector of float) +0:38 Sequence +0:38 move second child to first child ( temp 4-component vector of bool) +0:38 'b11' ( temp 4-component vector of bool) +0:38 isinf ( global 4-component vector of bool) +0:38 'v4' ( uniform 4-component vector of float) +0:40 add ( temp 2-component vector of float) +0:40 hyp. sine ( global float) +0:40 'c1D' ( in float) +0:41 vector-scale ( temp 2-component vector of float) +0:41 hyp. cosine ( global float) +0:41 'c1D' ( in float) +0:41 hyp. tangent ( global 2-component vector of float) +0:41 'c2D' ( in 2-component vector of float) +0:42 add ( temp 4-component vector of float) +0:42 arc hyp. sine ( global 4-component vector of float) +0:42 'c4D' ( smooth temp 4-component vector of float) +0:42 arc hyp. cosine ( global 4-component vector of float) +0:42 'c4D' ( smooth temp 4-component vector of float) +0:43 arc hyp. tangent ( global 3-component vector of float) +0:43 'c3D' ( in 3-component vector of float) +0:45 Sequence +0:45 move second child to first child ( temp int) +0:45 'id' ( temp int) +0:45 'gl_VertexID' ( gl_VertexId int VertexId) +0:46 move second child to first child ( temp float) +0:46 direct index ( smooth temp float ClipDistance) +0:46 'gl_ClipDistance' ( smooth out 2-element array of float ClipDistance) +0:46 Constant: +0:46 1 (const int) +0:46 Constant: +0:46 0.300000 +0:? Linker Objects +0:? 'c' ( uniform int) +0:? 'us2D' ( uniform usampler2D) +0:? 'x' ( in 2-component vector of int) +0:? 'v2a' ( in 2-component vector of float) +0:? 'c1D' ( in float) +0:? 'c2D' ( in 2-component vector of float) +0:? 'c3D' ( in 3-component vector of float) +0:? 'c4D' ( smooth temp 4-component vector of float) +0:? 'v4' ( uniform 4-component vector of float) +0:? 'gl_ClipDistance' ( smooth out 2-element array of float ClipDistance) +0:? 'gl_TexCoord' ( smooth out 1-element array of 4-component vector of float TexCoord) +0:? 'abcdef' ( global int) +0:? 'qrstuv' ( global int) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/140.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/140.frag.out new file mode 100644 index 0000000..7ce2170 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/140.frag.out @@ -0,0 +1,169 @@ +140.frag +WARNING: 0:3: varying deprecated in version 130; may be removed in future release +ERROR: 0:17: '#error' : GL_ES is not set +ERROR: 0:20: 'fragment-shader struct input' : not supported for this version or the enabled extensions +ERROR: 0:24: 'location' : not supported for this version or the enabled extensions +ERROR: 0:24: 'location qualifier on input' : not supported for this version or the enabled extensions +ERROR: 0:26: 'location' : not supported for this version or the enabled extensions +ERROR: 0:26: 'location qualifier on output' : not supported for this version or the enabled extensions +ERROR: 0:40: 'assign' : l-value required "v" (can't modify shader input) +ERROR: 0:40: 'out' : Non-L-value cannot be passed for 'out' or 'inout' parameters. +ERROR: 8 compilation errors. No code generated. + + +Shader version: 140 +Requested GL_ARB_explicit_attrib_location +Requested GL_ARB_separate_shader_objects +ERROR: node is still EOpNull! +0:10 Function Definition: main( ( global void) +0:10 Function Parameters: +0:12 Sequence +0:12 Sequence +0:12 move second child to first child ( temp float) +0:12 'clip' ( temp float) +0:12 direct index ( smooth temp float ClipDistance) +0:12 'gl_ClipDistance' ( smooth in 5-element array of float ClipDistance) +0:12 Constant: +0:12 2 (const int) +0:22 Sequence +0:22 move second child to first child ( temp float) +0:22 'patch' ( global float) +0:22 Constant: +0:22 3.100000 +0:38 Function Definition: foo( ( global void) +0:38 Function Parameters: +0:40 Sequence +0:40 Sequence +0:40 move second child to first child ( temp 2-component vector of float) +0:40 'r1' ( temp 2-component vector of float) +0:40 modf ( global 2-component vector of float) +0:40 vector swizzle ( temp 2-component vector of float) +0:40 'v' ( smooth in 4-component vector of float) +0:40 Sequence +0:40 Constant: +0:40 0 (const int) +0:40 Constant: +0:40 1 (const int) +0:40 vector swizzle ( temp 2-component vector of float) +0:40 'v' ( smooth in 4-component vector of float) +0:40 Sequence +0:40 Constant: +0:40 2 (const int) +0:40 Constant: +0:40 3 (const int) +0:41 Sequence +0:41 move second child to first child ( temp 2-component vector of float) +0:41 'r2' ( temp 2-component vector of float) +0:41 modf ( global 2-component vector of float) +0:41 vector swizzle ( temp 2-component vector of float) +0:41 'o' ( out 4-component vector of float) +0:41 Sequence +0:41 Constant: +0:41 0 (const int) +0:41 Constant: +0:41 1 (const int) +0:41 vector swizzle ( temp 2-component vector of float) +0:41 'o' ( out 4-component vector of float) +0:41 Sequence +0:41 Constant: +0:41 2 (const int) +0:41 Constant: +0:41 3 (const int) +0:42 move second child to first child ( temp float) +0:42 direct index ( temp float) +0:42 'o' ( out 4-component vector of float) +0:42 Constant: +0:42 2 (const int) +0:42 Function Call: fooi( ( global float) +0:47 Sequence +0:47 move second child to first child ( temp float) +0:47 'i1' ( global float) +0:47 Test condition and select ( temp float) +0:47 Condition +0:47 'gl_FrontFacing' ( gl_FrontFacing bool Face) +0:47 true case +0:47 Constant: +0:47 -2.000000 +0:47 false case +0:47 Constant: +0:47 2.000000 +0:48 Sequence +0:48 move second child to first child ( temp float) +0:48 'i2' ( global float) +0:48 Constant: +0:48 102.000000 +0:50 Function Definition: fooi( ( global float) +0:50 Function Parameters: +0:52 Sequence +0:52 Branch: Return with expression +0:52 add ( temp float) +0:52 'i1' ( global float) +0:52 'i2' ( global float) +0:? Linker Objects +0:? 'v' ( smooth in 4-component vector of float) +0:? 'i' ( smooth in 4-component vector of float) +0:? 'o' ( out 4-component vector of float) +0:? 'gl_ClipDistance' ( smooth in 5-element array of float ClipDistance) +0:? 's' ( smooth in structure{ global float f}) +0:? 'patch' ( global float) +0:? 'vl' (layout( location=3) smooth in 4-component vector of float) +0:? 'factorBad' (layout( location=3) out 4-component vector of float) +0:? 'factor' (layout( location=5) out 4-component vector of float) +0:? 'vl2' (layout( location=4) smooth in 4-component vector of float) +0:? 'i1' ( global float) +0:? 'i2' ( global float) + + +Linked fragment stage: + + +Shader version: 140 +Requested GL_ARB_explicit_attrib_location +Requested GL_ARB_separate_shader_objects +ERROR: node is still EOpNull! +0:10 Function Definition: main( ( global void) +0:10 Function Parameters: +0:12 Sequence +0:12 Sequence +0:12 move second child to first child ( temp float) +0:12 'clip' ( temp float) +0:12 direct index ( smooth temp float ClipDistance) +0:12 'gl_ClipDistance' ( smooth in 5-element array of float ClipDistance) +0:12 Constant: +0:12 2 (const int) +0:22 Sequence +0:22 move second child to first child ( temp float) +0:22 'patch' ( global float) +0:22 Constant: +0:22 3.100000 +0:47 Sequence +0:47 move second child to first child ( temp float) +0:47 'i1' ( global float) +0:47 Test condition and select ( temp float) +0:47 Condition +0:47 'gl_FrontFacing' ( gl_FrontFacing bool Face) +0:47 true case +0:47 Constant: +0:47 -2.000000 +0:47 false case +0:47 Constant: +0:47 2.000000 +0:48 Sequence +0:48 move second child to first child ( temp float) +0:48 'i2' ( global float) +0:48 Constant: +0:48 102.000000 +0:? Linker Objects +0:? 'v' ( smooth in 4-component vector of float) +0:? 'i' ( smooth in 4-component vector of float) +0:? 'o' ( out 4-component vector of float) +0:? 'gl_ClipDistance' ( smooth in 5-element array of float ClipDistance) +0:? 's' ( smooth in structure{ global float f}) +0:? 'patch' ( global float) +0:? 'vl' (layout( location=3) smooth in 4-component vector of float) +0:? 'factorBad' (layout( location=3) out 4-component vector of float) +0:? 'factor' (layout( location=5) out 4-component vector of float) +0:? 'vl2' (layout( location=4) smooth in 4-component vector of float) +0:? 'i1' ( global float) +0:? 'i2' ( global float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/140.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/140.vert.out new file mode 100644 index 0000000..975c932 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/140.vert.out @@ -0,0 +1,215 @@ +140.vert +ERROR: 0:23: 'gl_Position' : identifiers starting with "gl_" are reserved +ERROR: 0:25: 'location' : not supported for this version or the enabled extensions +ERROR: 0:25: 'location qualifier on input' : not supported for this version or the enabled extensions +ERROR: 0:34: 'redeclaration' : cannot change storage, memory, or auxiliary qualification of gl_Position +ERROR: 0:34: 'redeclaration' : cannot change interpolation qualification of gl_Position +ERROR: 0:35: 'redeclaration' : cannot change the type of gl_Position +ERROR: 0:38: 'gl_ClipVertex' : cannot redeclare after use +ERROR: 0:39: 'gl_FogFragCoord' : cannot redeclare after use +ERROR: 0:51: 'texelFetch' : no matching overloaded function found +ERROR: 0:53: 'texture' : no matching overloaded function found +ERROR: 0:63: 'gl_DeviceIndex' : required extension not requested: GL_EXT_device_group +ERROR: 0:64: 'gl_ViewIndex' : required extension not requested: GL_EXT_multiview +ERROR: 12 compilation errors. No code generated. + + +Shader version: 140 +Requested GL_ARB_explicit_attrib_location +Requested GL_ARB_separate_shader_objects +Requested GL_EXT_device_group +Requested GL_EXT_multiview +ERROR: node is still EOpNull! +0:9 Function Definition: main( ( global void) +0:9 Function Parameters: +0:11 Sequence +0:11 Sequence +0:11 move second child to first child ( temp int) +0:11 'id' ( temp int) +0:11 'gl_InstanceID' ( gl_InstanceId int InstanceId) +0:12 add second child into first child ( temp int) +0:12 'id' ( temp int) +0:12 anonMem: direct index for structure (layout( column_major std140 offset=0) uniform int) +0:12 'anon@0' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform int anonMem}) +0:12 Constant: +0:12 0 (const uint) +0:13 add second child into first child ( temp int) +0:13 'id' ( temp int) +0:13 direct index ( temp int) +0:13 textureFetch ( global 4-component vector of int) +0:13 'sbuf' ( uniform isamplerBuffer) +0:13 Constant: +0:13 8 (const int) +0:13 Constant: +0:13 3 (const int) +0:14 'gl_ClipVertex' ( gl_ClipVertex 4-component vector of float ClipVertex) +0:15 'gl_Color' ( in 4-component vector of float Color) +0:16 direct index ( temp structure{ global 4-component vector of float ambient, global 4-component vector of float diffuse, global 4-component vector of float specular, global 4-component vector of float position, global 4-component vector of float halfVector, global 3-component vector of float spotDirection, global float spotExponent, global float spotCutoff, global float spotCosCutoff, global float constantAttenuation, global float linearAttenuation, global float quadraticAttenuation}) +0:16 'gl_LightSource' ( uniform 32-element array of structure{ global 4-component vector of float ambient, global 4-component vector of float diffuse, global 4-component vector of float specular, global 4-component vector of float position, global 4-component vector of float halfVector, global 3-component vector of float spotDirection, global float spotExponent, global float spotCutoff, global float spotCosCutoff, global float constantAttenuation, global float linearAttenuation, global float quadraticAttenuation}) +0:16 Constant: +0:16 0 (const int) +0:17 far: direct index for structure ( global float) +0:17 'gl_DepthRange' ( uniform structure{ global float near, global float far, global float diff}) +0:17 Constant: +0:17 1 (const int) +0:18 'gl_TexCoord' ( smooth out implicitly-sized array of 4-component vector of float TexCoord) +0:19 'gl_FogFragCoord' ( smooth out float FogFragCoord) +0:20 'gl_FrontColor' ( smooth out 4-component vector of float FrontColor) +0:48 Function Definition: foo( ( global void) +0:48 Function Parameters: +0:50 Sequence +0:50 Sequence +0:50 move second child to first child ( temp 4-component vector of float) +0:50 'v' ( temp 4-component vector of float) +0:50 textureFetch ( global 4-component vector of float) +0:50 's2dr' ( uniform sampler2DRect) +0:50 'itloc2' ( in 2-component vector of int) +0:51 add second child into first child ( temp 4-component vector of float) +0:51 'v' ( temp 4-component vector of float) +0:51 Constant: +0:51 0.000000 +0:52 add second child into first child ( temp 4-component vector of float) +0:52 'v' ( temp 4-component vector of float) +0:52 texture ( global 4-component vector of float) +0:52 's2dr' ( uniform sampler2DRect) +0:52 'tloc2' ( in 2-component vector of float) +0:53 add second child into first child ( temp 4-component vector of float) +0:53 'v' ( temp 4-component vector of float) +0:53 Constant: +0:53 0.000000 +0:54 add second child into first child ( temp 4-component vector of float) +0:54 'v' ( temp 4-component vector of float) +0:54 texture ( global float) +0:54 's2drs' ( uniform sampler2DRectShadow) +0:54 'tloc3' ( in 3-component vector of float) +0:55 add second child into first child ( temp 4-component vector of float) +0:55 'v' ( temp 4-component vector of float) +0:55 textureProj ( global 4-component vector of float) +0:55 's2dr' ( uniform sampler2DRect) +0:55 'tloc3' ( in 3-component vector of float) +0:56 add second child into first child ( temp 4-component vector of float) +0:56 'v' ( temp 4-component vector of float) +0:56 textureProj ( global 4-component vector of float) +0:56 's2dr' ( uniform sampler2DRect) +0:56 'tloc4' ( in 4-component vector of float) +0:57 add second child into first child ( temp 4-component vector of float) +0:57 'v' ( temp 4-component vector of float) +0:57 textureProjGradOffset ( global 4-component vector of float) +0:57 's2dr' ( uniform sampler2DRect) +0:57 'tloc4' ( in 4-component vector of float) +0:57 Constant: +0:57 0.000000 +0:57 0.000000 +0:57 Constant: +0:57 0.000000 +0:57 0.000000 +0:57 Constant: +0:57 1 (const int) +0:57 2 (const int) +0:58 add second child into first child ( temp 4-component vector of float) +0:58 'v' ( temp 4-component vector of float) +0:58 textureProjGradOffset ( global float) +0:58 's2drs' ( uniform sampler2DRectShadow) +0:58 'tloc4' ( in 4-component vector of float) +0:58 Constant: +0:58 0.000000 +0:58 0.000000 +0:58 Constant: +0:58 0.000000 +0:58 0.000000 +0:58 Constant: +0:58 1 (const int) +0:58 2 (const int) +0:61 Function Definition: devi( ( global void) +0:61 Function Parameters: +0:63 Sequence +0:63 'gl_DeviceIndex' ( in int DeviceIndex) +0:64 'gl_ViewIndex' ( in int ViewIndex) +0:75 Function Definition: devie( ( global void) +0:75 Function Parameters: +0:77 Sequence +0:77 'gl_DeviceIndex' ( in int DeviceIndex) +0:78 'gl_ViewIndex' ( in int ViewIndex) +0:? Linker Objects +0:? 'sbuf' ( uniform isamplerBuffer) +0:? 'anon@0' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform int anonMem}) +0:? 'gl_TexCoord' ( smooth out implicitly-sized array of 4-component vector of float TexCoord) +0:? 'gl_Position' ( smooth out 4-component vector of float) +0:? 'locBad' (layout( location=9) in 4-component vector of float) +0:? 'loc' (layout( location=9) in 4-component vector of float) +0:? 'gl_PointSize' ( gl_PointSize float PointSize) +0:? 'gl_ClipVertex' ( gl_ClipVertex 4-component vector of float ClipVertex) +0:? 'gl_FogFragCoord' ( smooth out float FogFragCoord) +0:? 's2dr' ( uniform sampler2DRect) +0:? 's2drs' ( uniform sampler2DRectShadow) +0:? 'itloc2' ( in 2-component vector of int) +0:? 'tloc2' ( in 2-component vector of float) +0:? 'tloc3' ( in 3-component vector of float) +0:? 'tloc4' ( in 4-component vector of float) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + + +Linked vertex stage: + + +Shader version: 140 +Requested GL_ARB_explicit_attrib_location +Requested GL_ARB_separate_shader_objects +Requested GL_EXT_device_group +Requested GL_EXT_multiview +ERROR: node is still EOpNull! +0:9 Function Definition: main( ( global void) +0:9 Function Parameters: +0:11 Sequence +0:11 Sequence +0:11 move second child to first child ( temp int) +0:11 'id' ( temp int) +0:11 'gl_InstanceID' ( gl_InstanceId int InstanceId) +0:12 add second child into first child ( temp int) +0:12 'id' ( temp int) +0:12 anonMem: direct index for structure (layout( column_major std140 offset=0) uniform int) +0:12 'anon@0' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform int anonMem}) +0:12 Constant: +0:12 0 (const uint) +0:13 add second child into first child ( temp int) +0:13 'id' ( temp int) +0:13 direct index ( temp int) +0:13 textureFetch ( global 4-component vector of int) +0:13 'sbuf' ( uniform isamplerBuffer) +0:13 Constant: +0:13 8 (const int) +0:13 Constant: +0:13 3 (const int) +0:14 'gl_ClipVertex' ( gl_ClipVertex 4-component vector of float ClipVertex) +0:15 'gl_Color' ( in 4-component vector of float Color) +0:16 direct index ( temp structure{ global 4-component vector of float ambient, global 4-component vector of float diffuse, global 4-component vector of float specular, global 4-component vector of float position, global 4-component vector of float halfVector, global 3-component vector of float spotDirection, global float spotExponent, global float spotCutoff, global float spotCosCutoff, global float constantAttenuation, global float linearAttenuation, global float quadraticAttenuation}) +0:16 'gl_LightSource' ( uniform 32-element array of structure{ global 4-component vector of float ambient, global 4-component vector of float diffuse, global 4-component vector of float specular, global 4-component vector of float position, global 4-component vector of float halfVector, global 3-component vector of float spotDirection, global float spotExponent, global float spotCutoff, global float spotCosCutoff, global float constantAttenuation, global float linearAttenuation, global float quadraticAttenuation}) +0:16 Constant: +0:16 0 (const int) +0:17 far: direct index for structure ( global float) +0:17 'gl_DepthRange' ( uniform structure{ global float near, global float far, global float diff}) +0:17 Constant: +0:17 1 (const int) +0:18 'gl_TexCoord' ( smooth out 1-element array of 4-component vector of float TexCoord) +0:19 'gl_FogFragCoord' ( smooth out float FogFragCoord) +0:20 'gl_FrontColor' ( smooth out 4-component vector of float FrontColor) +0:? Linker Objects +0:? 'sbuf' ( uniform isamplerBuffer) +0:? 'anon@0' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform int anonMem}) +0:? 'gl_TexCoord' ( smooth out 1-element array of 4-component vector of float TexCoord) +0:? 'gl_Position' ( smooth out 4-component vector of float) +0:? 'locBad' (layout( location=9) in 4-component vector of float) +0:? 'loc' (layout( location=9) in 4-component vector of float) +0:? 'gl_PointSize' ( gl_PointSize float PointSize) +0:? 'gl_ClipVertex' ( gl_ClipVertex 4-component vector of float ClipVertex) +0:? 'gl_FogFragCoord' ( smooth out float FogFragCoord) +0:? 's2dr' ( uniform sampler2DRect) +0:? 's2drs' ( uniform sampler2DRectShadow) +0:? 'itloc2' ( in 2-component vector of int) +0:? 'tloc2' ( in 2-component vector of float) +0:? 'tloc3' ( in 3-component vector of float) +0:? 'tloc4' ( in 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/150.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/150.frag.out new file mode 100644 index 0000000..1454b55 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/150.frag.out @@ -0,0 +1,158 @@ +150.frag +ERROR: 0:4: 'redeclaration' : cannot redeclare with different qualification: gl_FragCoord +ERROR: 0:5: 'redeclaration' : cannot redeclare with different qualification: gl_FragCoord +ERROR: 0:6: 'layout qualifier' : can only apply origin_upper_left and pixel_center_origin to gl_FragCoord +ERROR: 0:14: 'gl_FragCoord' : cannot redeclare after use +ERROR: 4 compilation errors. No code generated. + + +Shader version: 150 +gl_FragCoord pixel center is integer +gl_FragCoord origin is upper left +ERROR: node is still EOpNull! +0:9 Function Definition: main( ( global void) +0:9 Function Parameters: +0:11 Sequence +0:11 Sequence +0:11 move second child to first child ( temp 4-component vector of float) +0:11 'c' ( temp 4-component vector of float) +0:11 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:18 Sequence +0:18 move second child to first child ( temp float) +0:18 'patch' ( global float) +0:18 Constant: +0:18 3.100000 +0:31 Function Definition: barWxyz( ( global void) +0:31 Function Parameters: +0:33 Sequence +0:33 Sequence +0:33 move second child to first child ( temp 2-component vector of int) +0:33 't11' ( temp 2-component vector of int) +0:33 textureSize ( global 2-component vector of int) +0:33 'sms' ( uniform sampler2DMS) +0:34 Sequence +0:34 move second child to first child ( temp 2-component vector of int) +0:34 't12' ( temp 2-component vector of int) +0:34 textureSize ( global 2-component vector of int) +0:34 'isms' ( uniform isampler2DMS) +0:35 Sequence +0:35 move second child to first child ( temp 2-component vector of int) +0:35 't13' ( temp 2-component vector of int) +0:35 textureSize ( global 2-component vector of int) +0:35 'usms' ( uniform usampler2DMS) +0:36 Sequence +0:36 move second child to first child ( temp 3-component vector of int) +0:36 't21' ( temp 3-component vector of int) +0:36 textureSize ( global 3-component vector of int) +0:36 'smsa' ( uniform sampler2DMSArray) +0:37 Sequence +0:37 move second child to first child ( temp 3-component vector of int) +0:37 't22' ( temp 3-component vector of int) +0:37 textureSize ( global 3-component vector of int) +0:37 'ismsa' ( uniform isampler2DMSArray) +0:38 Sequence +0:38 move second child to first child ( temp 3-component vector of int) +0:38 't23' ( temp 3-component vector of int) +0:38 textureSize ( global 3-component vector of int) +0:38 'usmsa' ( uniform usampler2DMSArray) +0:39 Sequence +0:39 move second child to first child ( temp 4-component vector of float) +0:39 't31' ( temp 4-component vector of float) +0:39 textureFetch ( global 4-component vector of float) +0:39 'sms' ( uniform sampler2DMS) +0:39 'p2' ( flat in 2-component vector of int) +0:39 'samp' ( flat in int) +0:40 Sequence +0:40 move second child to first child ( temp 4-component vector of int) +0:40 't32' ( temp 4-component vector of int) +0:40 textureFetch ( global 4-component vector of int) +0:40 'isms' ( uniform isampler2DMS) +0:40 'p2' ( flat in 2-component vector of int) +0:40 'samp' ( flat in int) +0:41 Sequence +0:41 move second child to first child ( temp 4-component vector of uint) +0:41 't33' ( temp 4-component vector of uint) +0:41 textureFetch ( global 4-component vector of uint) +0:41 'usms' ( uniform usampler2DMS) +0:41 'p2' ( flat in 2-component vector of int) +0:41 Constant: +0:41 3 (const int) +0:42 Sequence +0:42 move second child to first child ( temp 4-component vector of float) +0:42 't41' ( temp 4-component vector of float) +0:42 textureFetch ( global 4-component vector of float) +0:42 'smsa' ( uniform sampler2DMSArray) +0:42 'p3' ( flat in 3-component vector of int) +0:42 'samp' ( flat in int) +0:43 Sequence +0:43 move second child to first child ( temp 4-component vector of int) +0:43 't42' ( temp 4-component vector of int) +0:43 textureFetch ( global 4-component vector of int) +0:43 'ismsa' ( uniform isampler2DMSArray) +0:43 Constant: +0:43 2 (const int) +0:43 2 (const int) +0:43 2 (const int) +0:43 'samp' ( flat in int) +0:44 Sequence +0:44 move second child to first child ( temp 4-component vector of uint) +0:44 't43' ( temp 4-component vector of uint) +0:44 textureFetch ( global 4-component vector of uint) +0:44 'usmsa' ( uniform usampler2DMSArray) +0:44 'p3' ( flat in 3-component vector of int) +0:44 'samp' ( flat in int) +0:47 Function Definition: primitiveID( ( global int) +0:47 Function Parameters: +0:49 Sequence +0:49 Branch: Return with expression +0:49 'gl_PrimitiveID' ( flat in int PrimitiveID) +0:? Linker Objects +0:? 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:? 'foo' ( smooth in 4-component vector of float) +0:? 's' ( smooth in structure{ global float f}) +0:? 'patch' ( global float) +0:? 'sms' ( uniform sampler2DMS) +0:? 'isms' ( uniform isampler2DMS) +0:? 'usms' ( uniform usampler2DMS) +0:? 'smsa' ( uniform sampler2DMSArray) +0:? 'ismsa' ( uniform isampler2DMSArray) +0:? 'usmsa' ( uniform usampler2DMSArray) +0:? 'p2' ( flat in 2-component vector of int) +0:? 'p3' ( flat in 3-component vector of int) +0:? 'samp' ( flat in int) + + +Linked fragment stage: + + +Shader version: 150 +gl_FragCoord pixel center is integer +gl_FragCoord origin is upper left +ERROR: node is still EOpNull! +0:9 Function Definition: main( ( global void) +0:9 Function Parameters: +0:11 Sequence +0:11 Sequence +0:11 move second child to first child ( temp 4-component vector of float) +0:11 'c' ( temp 4-component vector of float) +0:11 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:18 Sequence +0:18 move second child to first child ( temp float) +0:18 'patch' ( global float) +0:18 Constant: +0:18 3.100000 +0:? Linker Objects +0:? 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:? 'foo' ( smooth in 4-component vector of float) +0:? 's' ( smooth in structure{ global float f}) +0:? 'patch' ( global float) +0:? 'sms' ( uniform sampler2DMS) +0:? 'isms' ( uniform isampler2DMS) +0:? 'usms' ( uniform usampler2DMS) +0:? 'smsa' ( uniform sampler2DMSArray) +0:? 'ismsa' ( uniform isampler2DMSArray) +0:? 'usmsa' ( uniform usampler2DMSArray) +0:? 'p2' ( flat in 2-component vector of int) +0:? 'p3' ( flat in 3-component vector of int) +0:? 'samp' ( flat in int) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/150.geom.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/150.geom.out new file mode 100644 index 0000000..e3a78c9 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/150.geom.out @@ -0,0 +1,289 @@ +150.geom +ERROR: 0:15: 'fromVertex' : block instance name redefinition +ERROR: 0:19: 'fromVertex' : redefinition +ERROR: 0:21: 'fooC' : block instance name redefinition +ERROR: 0:29: 'EmitStreamVertex' : no matching overloaded function found +ERROR: 0:30: 'EndStreamPrimitive' : no matching overloaded function found +ERROR: 0:44: 'stream' : can only be used on an output +ERROR: 0:45: 'stream' : can only be used on an output +ERROR: 0:46: 'stream' : can only be used on an output +ERROR: 0:47: 'stream' : can only be used on an output +ERROR: 0:47: 'stream' : can only be used on an output +ERROR: 0:60: 'stream' : member cannot contradict block +ERROR: 0:66: 'max_vertices' : too large, must be less than gl_MaxGeometryOutputVertices +ERROR: 0:66: 'max_vertices' : cannot change previously set layout value +ERROR: 0:67: 'max_vertices' : can only apply to a standalone qualifier +ERROR: 0:72: 'points' : cannot change previously set output primitive +ERROR: 0:73: 'points' : cannot change previously set output primitive +ERROR: 0:74: 'triangle_strip' : cannot apply to input +ERROR: 0:75: 'triangle_strip' : cannot apply to: uniform +ERROR: 0:76: 'triangle_strip' : can only apply to a standalone qualifier +ERROR: 0:77: 'triangle_strip' : can only apply to a standalone qualifier +ERROR: 0:78: 'invocations' : not supported for this version or the enabled extensions +ERROR: 0:78: 'invocations' : can only apply to a standalone qualifier +ERROR: 0:80: 'invocations' : not supported for this version or the enabled extensions +ERROR: 0:80: 'invocations' : can only apply to a standalone qualifier +ERROR: 0:81: 'max_vertices' : can only apply to a standalone qualifier +ERROR: 0:82: 'triangle_strip' : can only apply to a standalone qualifier +ERROR: 0:85: 'lines' : cannot apply to 'out' +ERROR: 0:87: 'triangles' : cannot change previously set input primitive +ERROR: 0:88: 'triangles_adjacency' : cannot change previously set input primitive +ERROR: 0:89: 'invocations' : not supported for this version or the enabled extensions +ERROR: 0:92: 'stream' : member cannot contradict block +ERROR: 0:92: 'stream' : can only be used on an output +ERROR: 0:129: 'gl_ViewportIndex' : required extension not requested: GL_ARB_viewport_array +ERROR: 0:129: 'gl_MaxViewports' : required extension not requested: GL_ARB_viewport_array +ERROR: 0:139: 'gl_ViewportIndex' : identifiers starting with "gl_" are reserved +ERROR: 35 compilation errors. No code generated. + + +Shader version: 150 +Requested GL_ARB_viewport_array +invocations = 4 +max_vertices = 200 +input primitive = lines_adjacency +output primitive = triangle_strip +ERROR: node is still EOpNull! +0:25 Function Definition: main( ( global void) +0:25 Function Parameters: +0:27 Sequence +0:27 EmitVertex ( global void) +0:28 EndPrimitive ( global void) +0:29 Constant: +0:29 0.000000 +0:30 Constant: +0:30 0.000000 +0:32 move second child to first child ( temp 3-component vector of float) +0:32 color: direct index for structure (layout( stream=0) out 3-component vector of float) +0:32 'anon@0' (layout( stream=0) out block{layout( stream=0) out 3-component vector of float color}) +0:32 Constant: +0:32 0 (const uint) +0:32 color: direct index for structure ( in 3-component vector of float) +0:32 direct index ( temp block{ in 3-component vector of float color}) +0:32 'fromV' ( in 4-element array of block{ in 3-component vector of float color}) +0:32 Constant: +0:32 0 (const int) +0:32 Constant: +0:32 0 (const int) +0:33 move second child to first child ( temp float) +0:33 direct index (layout( stream=0) temp float ClipDistance) +0:33 gl_ClipDistance: direct index for structure (layout( stream=0) out implicitly-sized array of float ClipDistance) +0:33 'anon@1' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:33 Constant: +0:33 2 (const uint) +0:33 Constant: +0:33 3 (const int) +0:33 direct index ( temp float ClipDistance) +0:33 gl_ClipDistance: direct index for structure ( in implicitly-sized array of float ClipDistance) +0:33 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:33 'gl_in' ( in 4-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:33 Constant: +0:33 1 (const int) +0:33 Constant: +0:33 2 (const int) +0:33 Constant: +0:33 2 (const int) +0:34 move second child to first child ( temp 4-component vector of float) +0:34 gl_Position: direct index for structure (layout( stream=0) gl_Position 4-component vector of float Position) +0:34 'anon@1' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:34 Constant: +0:34 0 (const uint) +0:34 gl_Position: direct index for structure ( in 4-component vector of float Position) +0:34 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:34 'gl_in' ( in 4-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:34 Constant: +0:34 0 (const int) +0:34 Constant: +0:34 0 (const int) +0:35 move second child to first child ( temp float) +0:35 gl_PointSize: direct index for structure (layout( stream=0) gl_PointSize float PointSize) +0:35 'anon@1' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:35 Constant: +0:35 1 (const uint) +0:35 gl_PointSize: direct index for structure ( in float PointSize) +0:35 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:35 'gl_in' ( in 4-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:35 Constant: +0:35 3 (const int) +0:35 Constant: +0:35 1 (const int) +0:36 move second child to first child ( temp int) +0:36 'gl_PrimitiveID' (layout( stream=0) out int PrimitiveID) +0:36 'gl_PrimitiveIDIn' ( in int PrimitiveID) +0:37 move second child to first child ( temp int) +0:37 'gl_Layer' (layout( stream=0) out int Layer) +0:37 Constant: +0:37 2 (const int) +0:67 Function Definition: foo(i1; ( global void) +0:67 Function Parameters: +0:67 'a' ( in int) +0:69 Sequence +0:69 move second child to first child ( temp 4-component vector of float) +0:69 a: direct index for structure (layout( stream=6) out 4-component vector of float) +0:69 'ouuaa6' (layout( stream=6) out block{layout( stream=6) out 4-component vector of float a}) +0:69 Constant: +0:69 0 (const int) +0:69 Constant: +0:69 1.000000 +0:69 1.000000 +0:69 1.000000 +0:69 1.000000 +0:107 Sequence +0:107 move second child to first child ( temp float) +0:107 'summ' ( global float) +0:107 Constant: +0:107 11332.000000 +0:127 Function Definition: fooe1( ( global void) +0:127 Function Parameters: +0:129 Sequence +0:129 move second child to first child ( temp int) +0:129 'gl_ViewportIndex' (layout( stream=0) out int ViewportIndex) +0:129 Constant: +0:129 15 (const int) +0:134 Function Definition: fooe2( ( global void) +0:134 Function Parameters: +0:136 Sequence +0:136 move second child to first child ( temp int) +0:136 'gl_ViewportIndex' (layout( stream=0) out int ViewportIndex) +0:136 Constant: +0:136 15 (const int) +0:? Linker Objects +0:? 'fromV' ( in 4-element array of block{ in 3-component vector of float color}) +0:? 'toF' (layout( stream=0) out block{layout( stream=0) out 3-component vector of float color}) +0:? 'anon@0' (layout( stream=0) out block{layout( stream=0) out 3-component vector of float color}) +0:? 'anon@1' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:? 'gl_in' ( in 4-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:? 'ov0' (layout( stream=0) out 4-component vector of float) +0:? 'ov4' (layout( stream=4) out 4-component vector of float) +0:? 'o1v0' (layout( stream=0) out 4-component vector of float) +0:? 'ua' (layout( stream=3) uniform int) +0:? 'ibb' (layout( stream=3 column_major shared) uniform block{layout( stream=3 column_major shared) uniform int ua}) +0:? 'ov3' (layout( stream=3) out 4-component vector of float) +0:? 'ouuaa6' (layout( stream=6) out block{layout( stream=6) out 4-component vector of float a}) +0:? 'ouua6' (layout( stream=6) out block{layout( stream=6) out 4-component vector of float a}) +0:? 'ouua7' (layout( stream=7) out block{layout( stream=6) out 4-component vector of float a}) +0:? 'ov2s3' (layout( stream=3) out 4-component vector of float) +0:? 'badv4' (layout( stream=3) out 4-component vector of float) +0:? 'bad2v4' ( in 4-element array of 4-component vector of float) +0:? 'anon@2' (layout( stream=3) out block{layout( stream=3) out int a}) +0:? 'outbi' (layout( stream=3) out block{layout( stream=3) out int a, layout( stream=3) out int b, layout( stream=3) out int c}) +0:? 'inbi' ( in 4-element array of block{layout( stream=2) in int a}) +0:? 'insn' ( in 4-element array of block{ in int a15}) +0:? 'anon@3' (layout( stream=3) out block{layout( stream=3) out float f15}) +0:? 'anon@4' (layout( column_major shared) uniform block{layout( column_major shared) uniform bool b15}) +0:? 'summ' ( global float) +0:? 'gl_ViewportIndex' (layout( stream=3) out int) + + +Linked geometry stage: + + +Shader version: 150 +Requested GL_ARB_viewport_array +invocations = 4 +max_vertices = 200 +input primitive = lines_adjacency +output primitive = triangle_strip +ERROR: node is still EOpNull! +0:25 Function Definition: main( ( global void) +0:25 Function Parameters: +0:27 Sequence +0:27 EmitVertex ( global void) +0:28 EndPrimitive ( global void) +0:29 Constant: +0:29 0.000000 +0:30 Constant: +0:30 0.000000 +0:32 move second child to first child ( temp 3-component vector of float) +0:32 color: direct index for structure (layout( stream=0) out 3-component vector of float) +0:32 'anon@0' (layout( stream=0) out block{layout( stream=0) out 3-component vector of float color}) +0:32 Constant: +0:32 0 (const uint) +0:32 color: direct index for structure ( in 3-component vector of float) +0:32 direct index ( temp block{ in 3-component vector of float color}) +0:32 'fromV' ( in 4-element array of block{ in 3-component vector of float color}) +0:32 Constant: +0:32 0 (const int) +0:32 Constant: +0:32 0 (const int) +0:33 move second child to first child ( temp float) +0:33 direct index (layout( stream=0) temp float ClipDistance) +0:33 gl_ClipDistance: direct index for structure (layout( stream=0) out 4-element array of float ClipDistance) +0:33 'anon@1' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out 4-element array of float ClipDistance gl_ClipDistance}) +0:33 Constant: +0:33 2 (const uint) +0:33 Constant: +0:33 3 (const int) +0:33 direct index ( temp float ClipDistance) +0:33 gl_ClipDistance: direct index for structure ( in 3-element array of float ClipDistance) +0:33 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +0:33 'gl_in' ( in 4-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +0:33 Constant: +0:33 1 (const int) +0:33 Constant: +0:33 2 (const int) +0:33 Constant: +0:33 2 (const int) +0:34 move second child to first child ( temp 4-component vector of float) +0:34 gl_Position: direct index for structure (layout( stream=0) gl_Position 4-component vector of float Position) +0:34 'anon@1' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out 4-element array of float ClipDistance gl_ClipDistance}) +0:34 Constant: +0:34 0 (const uint) +0:34 gl_Position: direct index for structure ( in 4-component vector of float Position) +0:34 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +0:34 'gl_in' ( in 4-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +0:34 Constant: +0:34 0 (const int) +0:34 Constant: +0:34 0 (const int) +0:35 move second child to first child ( temp float) +0:35 gl_PointSize: direct index for structure (layout( stream=0) gl_PointSize float PointSize) +0:35 'anon@1' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out 4-element array of float ClipDistance gl_ClipDistance}) +0:35 Constant: +0:35 1 (const uint) +0:35 gl_PointSize: direct index for structure ( in float PointSize) +0:35 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +0:35 'gl_in' ( in 4-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +0:35 Constant: +0:35 3 (const int) +0:35 Constant: +0:35 1 (const int) +0:36 move second child to first child ( temp int) +0:36 'gl_PrimitiveID' (layout( stream=0) out int PrimitiveID) +0:36 'gl_PrimitiveIDIn' ( in int PrimitiveID) +0:37 move second child to first child ( temp int) +0:37 'gl_Layer' (layout( stream=0) out int Layer) +0:37 Constant: +0:37 2 (const int) +0:107 Sequence +0:107 move second child to first child ( temp float) +0:107 'summ' ( global float) +0:107 Constant: +0:107 11332.000000 +0:? Linker Objects +0:? 'fromV' ( in 4-element array of block{ in 3-component vector of float color}) +0:? 'toF' (layout( stream=0) out block{layout( stream=0) out 3-component vector of float color}) +0:? 'anon@0' (layout( stream=0) out block{layout( stream=0) out 3-component vector of float color}) +0:? 'anon@1' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out 4-element array of float ClipDistance gl_ClipDistance}) +0:? 'gl_in' ( in 4-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +0:? 'ov0' (layout( stream=0) out 4-component vector of float) +0:? 'ov4' (layout( stream=4) out 4-component vector of float) +0:? 'o1v0' (layout( stream=0) out 4-component vector of float) +0:? 'ua' (layout( stream=3) uniform int) +0:? 'ibb' (layout( stream=3 column_major shared) uniform block{layout( stream=3 column_major shared) uniform int ua}) +0:? 'ov3' (layout( stream=3) out 4-component vector of float) +0:? 'ouuaa6' (layout( stream=6) out block{layout( stream=6) out 4-component vector of float a}) +0:? 'ouua6' (layout( stream=6) out block{layout( stream=6) out 4-component vector of float a}) +0:? 'ouua7' (layout( stream=7) out block{layout( stream=6) out 4-component vector of float a}) +0:? 'ov2s3' (layout( stream=3) out 4-component vector of float) +0:? 'badv4' (layout( stream=3) out 4-component vector of float) +0:? 'bad2v4' ( in 4-element array of 4-component vector of float) +0:? 'anon@2' (layout( stream=3) out block{layout( stream=3) out int a}) +0:? 'outbi' (layout( stream=3) out block{layout( stream=3) out int a, layout( stream=3) out int b, layout( stream=3) out int c}) +0:? 'inbi' ( in 4-element array of block{layout( stream=2) in int a}) +0:? 'insn' ( in 4-element array of block{ in int a15}) +0:? 'anon@3' (layout( stream=3) out block{layout( stream=3) out float f15}) +0:? 'anon@4' (layout( column_major shared) uniform block{layout( column_major shared) uniform bool b15}) +0:? 'summ' ( global float) +0:? 'gl_ViewportIndex' (layout( stream=3) out int) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/150.tesc.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/150.tesc.out new file mode 100644 index 0000000..526b6e7 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/150.tesc.out @@ -0,0 +1,1684 @@ +150.tesc +Shader version: 150 +Requested GL_ARB_tessellation_shader +vertices = 4 +0:? Sequence +0:10 Function Definition: main( ( global void) +0:10 Function Parameters: +0:12 Sequence +0:12 Barrier ( global void) +0:14 Sequence +0:14 move second child to first child ( temp int) +0:14 'a' ( temp int) +0:14 Constant: +0:14 5392 (const int) +0:20 Sequence +0:20 move second child to first child ( temp 4-component vector of float) +0:20 'p' ( temp 4-component vector of float) +0:20 gl_Position: direct index for structure ( in 4-component vector of float Position) +0:20 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:20 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:20 Constant: +0:20 1 (const int) +0:20 Constant: +0:20 0 (const int) +0:21 Sequence +0:21 move second child to first child ( temp float) +0:21 'ps' ( temp float) +0:21 gl_PointSize: direct index for structure ( in float PointSize) +0:21 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:21 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:21 Constant: +0:21 1 (const int) +0:21 Constant: +0:21 1 (const int) +0:22 Sequence +0:22 move second child to first child ( temp float) +0:22 'cd' ( temp float) +0:22 direct index ( temp float ClipDistance) +0:22 gl_ClipDistance: direct index for structure ( in implicitly-sized array of float ClipDistance) +0:22 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:22 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:22 Constant: +0:22 1 (const int) +0:22 Constant: +0:22 2 (const int) +0:22 Constant: +0:22 2 (const int) +0:24 Sequence +0:24 move second child to first child ( temp int) +0:24 'pvi' ( temp int) +0:24 'gl_PatchVerticesIn' ( in int PatchVertices) +0:25 Sequence +0:25 move second child to first child ( temp int) +0:25 'pid' ( temp int) +0:25 'gl_PrimitiveID' ( in int PrimitiveID) +0:26 Sequence +0:26 move second child to first child ( temp int) +0:26 'iid' ( temp int) +0:26 'gl_InvocationID' ( in int InvocationID) +0:28 move second child to first child ( temp 4-component vector of float) +0:28 gl_Position: direct index for structure ( out 4-component vector of float Position) +0:28 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:28 'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:28 'gl_InvocationID' ( in int InvocationID) +0:28 Constant: +0:28 0 (const int) +0:28 'p' ( temp 4-component vector of float) +0:29 move second child to first child ( temp float) +0:29 gl_PointSize: direct index for structure ( out float PointSize) +0:29 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:29 'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:29 'gl_InvocationID' ( in int InvocationID) +0:29 Constant: +0:29 1 (const int) +0:29 'ps' ( temp float) +0:30 move second child to first child ( temp float) +0:30 direct index ( temp float ClipDistance) +0:30 gl_ClipDistance: direct index for structure ( out implicitly-sized array of float ClipDistance) +0:30 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:30 'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:30 'gl_InvocationID' ( in int InvocationID) +0:30 Constant: +0:30 2 (const int) +0:30 Constant: +0:30 1 (const int) +0:30 'cd' ( temp float) +0:32 move second child to first child ( temp float) +0:32 direct index ( patch temp float TessLevelOuter) +0:32 'gl_TessLevelOuter' ( patch out 4-element array of float TessLevelOuter) +0:32 Constant: +0:32 3 (const int) +0:32 Constant: +0:32 3.200000 +0:33 move second child to first child ( temp float) +0:33 direct index ( patch temp float TessLevelInner) +0:33 'gl_TessLevelInner' ( patch out 2-element array of float TessLevelInner) +0:33 Constant: +0:33 1 (const int) +0:33 Constant: +0:33 1.300000 +0:? Linker Objects +0:? 'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:? 'outa' ( global 4-element array of int) +0:? 'patchOut' ( patch out 4-component vector of float) + +150.tese +ERROR: 0:12: 'barrier' : no matching overloaded function found +ERROR: 1 compilation errors. No code generated. + + +Shader version: 150 +Requested GL_ARB_tessellation_shader +input primitive = quads +vertex spacing = fractional_odd_spacing +triangle order = cw +using point mode +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:14 Sequence +0:14 move second child to first child ( temp int) +0:14 'a' ( temp int) +0:14 Constant: +0:14 1512 (const int) +0:22 Sequence +0:22 move second child to first child ( temp 4-component vector of float) +0:22 'p' ( temp 4-component vector of float) +0:22 gl_Position: direct index for structure ( in 4-component vector of float Position) +0:22 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:22 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:22 Constant: +0:22 1 (const int) +0:22 Constant: +0:22 0 (const int) +0:23 Sequence +0:23 move second child to first child ( temp float) +0:23 'ps' ( temp float) +0:23 gl_PointSize: direct index for structure ( in float PointSize) +0:23 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:23 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:23 Constant: +0:23 1 (const int) +0:23 Constant: +0:23 1 (const int) +0:24 Sequence +0:24 move second child to first child ( temp float) +0:24 'cd' ( temp float) +0:24 direct index ( temp float ClipDistance) +0:24 gl_ClipDistance: direct index for structure ( in implicitly-sized array of float ClipDistance) +0:24 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:24 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:24 Constant: +0:24 1 (const int) +0:24 Constant: +0:24 2 (const int) +0:24 Constant: +0:24 2 (const int) +0:26 Sequence +0:26 move second child to first child ( temp int) +0:26 'pvi' ( temp int) +0:26 'gl_PatchVerticesIn' ( in int PatchVertices) +0:27 Sequence +0:27 move second child to first child ( temp int) +0:27 'pid' ( temp int) +0:27 'gl_PrimitiveID' ( in int PrimitiveID) +0:28 Sequence +0:28 move second child to first child ( temp 3-component vector of float) +0:28 'tc' ( temp 3-component vector of float) +0:28 'gl_TessCoord' ( in 3-component vector of float TessCoord) +0:29 Sequence +0:29 move second child to first child ( temp float) +0:29 'tlo' ( temp float) +0:29 direct index ( patch temp float TessLevelOuter) +0:29 'gl_TessLevelOuter' ( patch in 4-element array of float TessLevelOuter) +0:29 Constant: +0:29 3 (const int) +0:30 Sequence +0:30 move second child to first child ( temp float) +0:30 'tli' ( temp float) +0:30 direct index ( patch temp float TessLevelInner) +0:30 'gl_TessLevelInner' ( patch in 2-element array of float TessLevelInner) +0:30 Constant: +0:30 1 (const int) +0:32 move second child to first child ( temp 4-component vector of float) +0:32 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) +0:32 '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}) +0:32 Constant: +0:32 0 (const uint) +0:32 'p' ( temp 4-component vector of float) +0:33 move second child to first child ( temp float) +0:33 gl_PointSize: direct index for structure ( gl_PointSize float PointSize) +0:33 '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}) +0:33 Constant: +0:33 1 (const uint) +0:33 'ps' ( temp float) +0:34 move second child to first child ( temp float) +0:34 direct index ( temp float ClipDistance) +0:34 gl_ClipDistance: direct index for structure ( out implicitly-sized array of float ClipDistance) +0:34 '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}) +0:34 Constant: +0:34 2 (const uint) +0:34 Constant: +0:34 2 (const int) +0:34 'cd' ( temp float) +0:? Linker Objects +0:? 'patchIn' ( patch in 4-component vector of float) +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) +ERROR: 0:10: 'patch' : can only use on output in tessellation-control shader +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:83: 'location' : overlapping use of location 4 +ERROR: 0:87: 'location' : overlapping use of location 4 +ERROR: 0:104: '' : precise qualifier must appear first +ERROR: 0:105: '' : precise qualifier must appear first +ERROR: 0:105: '' : precise qualifier must appear first +ERROR: 0:109: 'gl_DeviceIndex' : required extension not requested: GL_EXT_device_group +ERROR: 0:110: 'gl_ViewIndex' : required extension not requested: GL_EXT_multiview +ERROR: 23 compilation errors. No code generated. + + +Shader version: 400 +Requested GL_ARB_separate_shader_objects +Requested GL_EXT_device_group +Requested GL_EXT_multiview +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 int) +0:17 'a' ( temp int) +0:17 Constant: +0:17 5392 (const int) +0:23 Sequence +0:23 move second child to first child ( temp 4-component vector of float) +0:23 'p' ( temp 4-component vector of float) +0:23 gl_Position: direct index for structure ( in 4-component vector of float Position) +0:23 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:23 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +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 float) +0:24 'ps' ( temp float) +0:24 gl_PointSize: direct index for structure ( in float PointSize) +0:24 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:24 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +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 float) +0:25 'cd' ( temp float) +0:25 direct index ( temp float ClipDistance) +0:25 gl_ClipDistance: direct index for structure ( in implicitly-sized array of float ClipDistance) +0:25 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:25 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:25 Constant: +0:25 1 (const int) +0:25 Constant: +0:25 2 (const int) +0:25 Constant: +0:25 2 (const int) +0:27 Sequence +0:27 move second child to first child ( temp int) +0:27 'pvi' ( temp int) +0:27 'gl_PatchVerticesIn' ( in int PatchVertices) +0:28 Sequence +0:28 move second child to first child ( temp int) +0:28 'pid' ( temp int) +0:28 'gl_PrimitiveID' ( in int PrimitiveID) +0:29 Sequence +0:29 move second child to first child ( temp int) +0:29 'iid' ( temp int) +0:29 'gl_InvocationID' ( in int InvocationID) +0:31 move second child to first child ( temp 4-component vector of float) +0:31 gl_Position: direct index for structure ( out 4-component vector of float Position) +0:31 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:31 'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:31 'gl_InvocationID' ( in int InvocationID) +0:31 Constant: +0:31 0 (const int) +0:31 'p' ( temp 4-component vector of float) +0:32 move second child to first child ( temp float) +0:32 gl_PointSize: direct index for structure ( out float PointSize) +0:32 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:32 'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:32 'gl_InvocationID' ( in int InvocationID) +0:32 Constant: +0:32 1 (const int) +0:32 'ps' ( temp float) +0:33 move second child to first child ( temp float) +0:33 direct index ( temp float ClipDistance) +0:33 gl_ClipDistance: direct index for structure ( out implicitly-sized array of float ClipDistance) +0:33 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:33 'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:33 'gl_InvocationID' ( in int InvocationID) +0:33 Constant: +0:33 2 (const int) +0:33 Constant: +0:33 1 (const int) +0:33 'cd' ( temp float) +0:35 move second child to first child ( temp float) +0:35 direct index ( patch temp float TessLevelOuter) +0:35 'gl_TessLevelOuter' ( patch out 4-element array of 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 float) +0:36 direct index ( patch temp float TessLevelInner) +0:36 'gl_TessLevelInner' ( patch out 2-element array of 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 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 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 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 int) +0:54 Condition +0:54 Compare Less Than ( temp bool) +0:54 'a' ( temp int) +0:54 Constant: +0:54 12 (const int) +0:54 true case +0:54 'a' ( temp int) +0:54 false case +0:54 Comma ( temp int) +0:54 Barrier ( global void) +0:54 'a' ( temp 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_PointSize: direct index for structure ( out float PointSize) +0:69 direct index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:69 'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:69 Constant: +0:69 4 (const int) +0:69 Constant: +0:69 1 (const int) +0:71 Barrier ( global void) +0:91 Function Definition: foop( ( global void) +0:91 Function Parameters: +0:? Sequence +0:95 multiply second child into first child ( temp 3-component vector of float) +0:95 'pv3' ( noContraction temp 3-component vector of float) +0:95 'pv3' ( noContraction temp 3-component vector of float) +0:96 move second child to first child ( temp 3-component vector of float) +0:96 'pv3' ( noContraction temp 3-component vector of float) +0:96 fma ( global 3-component vector of float) +0:96 'pv3' ( noContraction temp 3-component vector of float) +0:96 'pv3' ( noContraction temp 3-component vector of float) +0:96 'pv3' ( noContraction temp 3-component vector of float) +0:97 move second child to first child ( temp double) +0:97 'd' ( noContraction temp double) +0:97 fma ( global double) +0:97 'd' ( noContraction temp double) +0:97 'd' ( noContraction temp double) +0:97 'd' ( noContraction temp double) +0:107 Function Definition: devi( ( global void) +0:107 Function Parameters: +0:109 Sequence +0:109 'gl_DeviceIndex' ( in int DeviceIndex) +0:110 'gl_ViewIndex' ( in int ViewIndex) +0:121 Function Definition: devie( ( global void) +0:121 Function Parameters: +0:123 Sequence +0:123 'gl_DeviceIndex' ( in int DeviceIndex) +0:124 'gl_ViewIndex' ( in int ViewIndex) +0:? Linker Objects +0:? 'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:? 'outa' ( global 4-element array of int) +0:? 'patchIn' ( patch in 4-component vector of float) +0:? 'patchOut' ( patch out 4-component vector of float) +0:? 'ina' ( in 2-component vector of float) +0:? 'inb' ( in 32-element array of 2-component vector of float) +0:? 'inc' ( in 32-element array of 2-component vector of float) +0:? 'ind' ( in 32-element array of 2-component vector of float) +0:? 'ivla' (layout( location=3) in 32-element array of 4-component vector of float) +0:? 'ivlb' (layout( location=4) in 32-element array of 4-component vector of float) +0:? 'ivlc' (layout( location=4) in 32-element array of 4-component vector of float) +0:? 'ovla' (layout( location=3) out 4-element array of 4-component vector of float) +0:? 'ovlb' (layout( location=4) out 4-element array of 4-component vector of float) +0:? 'ovlc' (layout( location=4) out 4-element array of 4-component vector of float) +0:? 'pv3' ( noContraction temp 3-component vector of float) +0:? 'pinbi' ( patch out block{ out int a}) +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 +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:47: 'patch' : cannot use interpolation qualifiers with patch +ERROR: 0:48: 'patch' : cannot use interpolation qualifiers with patch +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:109: 'gl_DeviceIndex' : required extension not requested: GL_EXT_device_group +ERROR: 0:110: 'gl_ViewIndex' : required extension not requested: GL_EXT_multiview +ERROR: 32 compilation errors. No code generated. + + +Shader version: 400 +Requested GL_ARB_separate_shader_objects +Requested GL_EXT_device_group +Requested GL_EXT_multiview +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 int) +0:24 'a' ( temp int) +0:24 Constant: +0:24 1512 (const int) +0:32 Sequence +0:32 move second child to first child ( temp 4-component vector of float) +0:32 'p' ( temp 4-component vector of float) +0:32 gl_Position: direct index for structure ( in 4-component vector of float Position) +0:32 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:32 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +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 float) +0:33 'ps' ( temp float) +0:33 gl_PointSize: direct index for structure ( in float PointSize) +0:33 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:33 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +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 float) +0:34 'cd' ( temp float) +0:34 direct index ( temp float ClipDistance) +0:34 gl_ClipDistance: direct index for structure ( in implicitly-sized array of float ClipDistance) +0:34 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:34 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:34 Constant: +0:34 1 (const int) +0:34 Constant: +0:34 2 (const int) +0:34 Constant: +0:34 2 (const int) +0:36 Sequence +0:36 move second child to first child ( temp int) +0:36 'pvi' ( temp int) +0:36 'gl_PatchVerticesIn' ( in int PatchVertices) +0:37 Sequence +0:37 move second child to first child ( temp int) +0:37 'pid' ( temp int) +0:37 'gl_PrimitiveID' ( in int PrimitiveID) +0:38 Sequence +0:38 move second child to first child ( temp 3-component vector of float) +0:38 'tc' ( temp 3-component vector of float) +0:38 'gl_TessCoord' ( in 3-component vector of float TessCoord) +0:39 Sequence +0:39 move second child to first child ( temp float) +0:39 'tlo' ( temp float) +0:39 direct index ( patch temp float TessLevelOuter) +0:39 'gl_TessLevelOuter' ( patch in 4-element array of float TessLevelOuter) +0:39 Constant: +0:39 3 (const int) +0:40 Sequence +0:40 move second child to first child ( temp float) +0:40 'tli' ( temp float) +0:40 direct index ( patch temp float TessLevelInner) +0:40 'gl_TessLevelInner' ( patch in 2-element array of float TessLevelInner) +0:40 Constant: +0:40 1 (const int) +0:42 move second child to first child ( temp 4-component vector of float) +0:42 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) +0:42 '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}) +0:42 Constant: +0:42 0 (const uint) +0:42 'p' ( temp 4-component vector of float) +0:43 move second child to first child ( temp float) +0:43 gl_PointSize: direct index for structure ( gl_PointSize float PointSize) +0:43 '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}) +0:43 Constant: +0:43 1 (const uint) +0:43 'ps' ( temp float) +0:44 move second child to first child ( temp float) +0:44 direct index ( temp float ClipDistance) +0:44 gl_ClipDistance: direct index for structure ( out implicitly-sized array of float ClipDistance) +0:44 '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}) +0:44 Constant: +0:44 2 (const uint) +0:44 Constant: +0:44 2 (const int) +0:44 'cd' ( temp float) +0:107 Function Definition: devi( ( global void) +0:107 Function Parameters: +0:109 Sequence +0:109 'gl_DeviceIndex' ( in int DeviceIndex) +0:110 'gl_ViewIndex' ( in int ViewIndex) +0:121 Function Definition: devie( ( global void) +0:121 Function Parameters: +0:123 Sequence +0:123 'gl_DeviceIndex' ( in int DeviceIndex) +0:124 'gl_ViewIndex' ( in int ViewIndex) +0:? Linker Objects +0:? 'patchIn' ( patch in 4-component vector of float) +0:? 'patchOut' ( patch out 4-component vector of float) +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}) +0:? 'badp1' ( smooth patch in 4-component vector of float) +0:? 'badp2' ( flat patch in 4-component vector of float) +0:? 'badp3' ( noperspective patch in 4-component vector of float) +0:? 'badp4' ( patch sample in 3-component vector of float) +0:? 'gl_in' ( in 32-element array of block{ in 1-element array of float ClipDistance gl_ClipDistance}) +0:? 'ina' ( in 2-component vector of float) +0:? 'inb' ( in 32-element array of 2-component vector of float) +0:? 'inc' ( in 32-element array of 2-component vector of float) +0:? 'ind' ( in 32-element array of 2-component vector of float) +0:? 'bla' ( in block{ in int f}) +0:? 'blb' ( in 32-element array of block{ in int f}) +0:? 'blc' ( in 32-element array of block{ in int f}) +0:? 'bld' ( in 32-element array of block{ in int f}) +0:? 'ivla' (layout( location=23) in 32-element array of 4-component vector of float) +0:? 'ivlb' (layout( location=24) in 32-element array of 4-component vector of float) +0:? 'ivlc' (layout( location=24) in 32-element array of 4-component vector of float) +0:? 'ovla' (layout( location=23) out 2-element array of 4-component vector of float) +0:? 'ovlb' (layout( location=24) out 2-element array of 4-component vector of float) +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. + + +Shader version: 400 +vertices = -1 +ERROR: node is still EOpNull! +0:8 Function Definition: main( ( global void) +0:8 Function Parameters: +0:? Linker Objects +0:? 'gl_out' ( out implicitly-sized array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:? 'outa' ( global 1-element array of int) +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 +ERROR: 0:26: 'gl_PointSize' : no such field in structure +ERROR: 0:26: 'assign' : cannot convert from ' temp float' to ' temp block{ out 4-component vector of float Position gl_Position}' +ERROR: 0:29: 'out' : type must be an array: outf +ERROR: 0:43: 'vertices' : must be greater than 0 +ERROR: 7 compilation errors. No code generated. + + +Shader version: 420 +Requested GL_ARB_separate_shader_objects +vertices = 4 +ERROR: node is still EOpNull! +0:15 Function Definition: main( ( global void) +0:15 Function Parameters: +0:17 Sequence +0:17 Sequence +0:17 move second child to first child ( temp 4-component vector of float) +0:17 'p' ( temp 4-component vector of float) +0:17 gl_Position: direct index for structure ( in 4-component vector of float Position) +0:17 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:17 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:17 Constant: +0:17 1 (const int) +0:17 Constant: +0:17 0 (const int) +0:18 Sequence +0:18 move second child to first child ( temp float) +0:18 'ps' ( temp float) +0:18 gl_PointSize: direct index for structure ( in float PointSize) +0:18 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:18 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:18 Constant: +0:18 1 (const int) +0:18 Constant: +0:18 1 (const int) +0:19 Sequence +0:19 move second child to first child ( temp float) +0:19 'cd' ( temp float) +0:19 direct index ( temp float ClipDistance) +0:19 gl_ClipDistance: direct index for structure ( in implicitly-sized array of float ClipDistance) +0:19 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:19 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:19 Constant: +0:19 1 (const int) +0:19 Constant: +0:19 2 (const int) +0:19 Constant: +0:19 2 (const int) +0:21 Sequence +0:21 move second child to first child ( temp int) +0:21 'pvi' ( temp int) +0:21 'gl_PatchVerticesIn' ( in int PatchVertices) +0:22 Sequence +0:22 move second child to first child ( temp int) +0:22 'pid' ( temp int) +0:22 'gl_PrimitiveID' ( in int PrimitiveID) +0:23 Sequence +0:23 move second child to first child ( temp int) +0:23 'iid' ( temp int) +0:23 'gl_InvocationID' ( in int InvocationID) +0:25 move second child to first child ( temp 4-component vector of float) +0:25 gl_Position: direct index for structure ( out 4-component vector of float Position) +0:25 indirect index ( temp block{ out 4-component vector of float Position gl_Position}) +0:25 'gl_out' ( out 3-element array of block{ out 4-component vector of float Position gl_Position}) +0:25 'gl_InvocationID' ( in int InvocationID) +0:25 Constant: +0:25 0 (const int) +0:25 'p' ( temp 4-component vector of float) +0:26 indirect index ( temp block{ out 4-component vector of float Position gl_Position}) +0:26 'gl_out' ( out 3-element array of block{ out 4-component vector of float Position gl_Position}) +0:26 'gl_InvocationID' ( in int InvocationID) +0:34 Function Definition: foo( ( global void) +0:34 Function Parameters: +0:36 Sequence +0:36 Test condition and select ( temp void) +0:36 Condition +0:36 logical-or ( temp bool) +0:36 Compare Not Equal ( temp bool) +0:36 Constant: +0:36 -0.625000 +0:36 -0.500000 +0:36 -0.375000 +0:36 -0.250000 +0:36 -0.375000 +0:36 -0.250000 +0:36 -0.125000 +0:36 0.000000 +0:36 direct index (layout( location=0) temp 2X4 matrix of double) +0:36 'vs_tcs_first' (layout( location=0) in 32-element array of 2X4 matrix of double) +0:36 Constant: +0:36 0 (const int) +0:37 Compare Not Equal ( temp bool) +0:37 Constant: +0:37 0.375000 +0:37 0.500000 +0:37 0.625000 +0:37 0.750000 +0:37 0.625000 +0:37 0.750000 +0:37 0.875000 +0:37 -0.625000 +0:37 direct index (layout( location=12) temp 2X4 matrix of double) +0:37 'vs_tcs_last' (layout( location=12) in 32-element array of 2X4 matrix of double) +0:37 Constant: +0:37 0 (const int) +0:36 true case is null +0:? Linker Objects +0:? 'gl_out' ( out 3-element array of block{ out 4-component vector of float Position gl_Position}) +0:? 'a' ( out 3-element array of int) +0:? 'outb' ( out 5-element array of int) +0:? 'outc' ( out 4-element array of int) +0:? 'outf' ( out float) +0:? 'vs_tcs_first' (layout( location=0) in 32-element array of 2X4 matrix of double) +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 +ERROR: 0:10: 'initializer list' : wrong number of matrix columns: temp 2X2 matrix of float +ERROR: 0:25: 'initializer list' : wrong number of structure members +ERROR: 0:27: '=' : cannot convert from ' const bool' to ' global int' +ERROR: 0:28: 'constructor' : cannot convert parameter 2 from ' const float' to ' temp 4-component vector of float' +ERROR: 0:29: 'constructor' : cannot convert parameter 2 from ' const 2X2 matrix of float' to ' const 4-component vector of float' +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:70: 'initializer list' : wrong number of structure members +ERROR: 13 compilation errors. No code generated. + + +Shader version: 420 +input primitive = none +vertex spacing = none +triangle order = none +ERROR: node is still EOpNull! +0:4 Sequence +0:4 move second child to first child ( temp 2X2 matrix of float) +0:4 'b' ( global 2X2 matrix of float) +0:4 Constant: +0:4 1.000000 +0:4 0.000000 +0:4 0.000000 +0:4 1.000000 +0:15 Sequence +0:15 move second child to first child ( temp structure{ global float a, global int b}) +0:15 'e' ( global structure{ global float a, global int b}) +0:15 Constant: +0:15 1.200000 +0:15 2 (const int) +0:20 Sequence +0:20 move second child to first child ( temp structure{ global float a, global int b}) +0:20 'e2' ( global structure{ global float a, global int b}) +0:20 Constant: +0:20 1.000000 +0:20 3 (const int) +0:42 Sequence +0:42 move second child to first child ( temp 5-element array of float) +0:42 'b5' ( global 5-element array of float) +0:42 Constant: +0:42 3.400000 +0:42 4.200000 +0:42 5.000000 +0:42 5.200000 +0:42 1.100000 +0:55 Sequence +0:55 move second child to first child ( temp structure{ global int f}) +0:55 'single1' ( global structure{ global int f}) +0:55 Constant: +0:55 10 (const int) +0:58 Sequence +0:58 move second child to first child ( temp structure{ global 2-component vector of uint v}) +0:58 'single2' ( global structure{ global 2-component vector of uint v}) +0:58 Constant: +0:58 1 (const uint) +0:58 2 (const uint) +0:61 Sequence +0:61 move second child to first child ( temp structure{ global structure{ global int f} s1}) +0:61 'single3' ( global structure{ global structure{ global int f} s1}) +0:61 Constant: +0:61 3 (const int) +0:64 Sequence +0:64 move second child to first child ( temp structure{ global structure{ global 2-component vector of uint v} s1}) +0:64 'single4' ( global structure{ global structure{ global 2-component vector of uint v} s1}) +0:64 Constant: +0:64 4 (const uint) +0:64 5 (const uint) +0:79 Sequence +0:79 move second child to first child ( temp 3-component vector of float) +0:79 'av3' ( global 3-component vector of float) +0:79 Construct vec3 ( global 3-component vector of float) +0:79 'vc1' ( global float) +0:79 'vc2' ( global float) +0:79 'vc3' ( global float) +0:80 Sequence +0:80 move second child to first child ( temp 3-component vector of float) +0:80 'bv3' ( global 3-component vector of float) +0:80 Construct vec3 ( temp 3-component vector of float) +0:80 'vc1' ( global float) +0:80 'vc2' ( global float) +0:80 'vc3' ( global float) +0:82 Function Definition: main( ( global void) +0:82 Function Parameters: +0:84 Sequence +0:84 MemoryBarrier ( global void) +0:86 Test condition and select ( temp void) +0:86 Condition +0:86 Compare Equal ( temp bool) +0:86 Constant: +0:86 1 (const uint) +0:86 2 (const uint) +0:86 3.000000 +0:86 4.000000 +0:86 0.000000 +0:86 0.000000 +0:86 0.000000 +0:86 4.000000 +0:86 0.000000 +0:86 5.000000 +0:86 6.000000 +0:86 0.000000 +0:86 0.000000 +0:86 0.000000 +0:86 6.000000 +0:86 0.000000 +0:86 'curlybad1' ( temp structure{ global 2-component vector of uint uv2, global 2-element array of structure{ global float f, global 2X3 matrix of float m23} s}) +0:86 true case is null +0:88 Test condition and select ( temp void) +0:88 Condition +0:88 Constant: +0:88 true (const bool) +0:88 true case is null +0:? Linker Objects +0:? 'a' ( const 2X2 matrix of float) +0:? 1.000000 +0:? 0.000000 +0:? 0.000000 +0:? 1.000000 +0:? 'b' ( global 2X2 matrix of float) +0:? 'c' ( const 2X2 matrix of float) +0:? 1.000000 +0:? 0.000000 +0:? 0.000000 +0:? 1.000000 +0:? 'a2' ( global 2-element array of float) +0:? 'b2' ( global 2-component vector of float) +0:? 'c2' ( global 3X3 matrix of float) +0:? 'd' ( global 2X2 matrix of float) +0:? 'e' ( global structure{ global float a, global int b}) +0:? 'e2' ( global structure{ global float a, global int b}) +0:? 'e3' ( global structure{ global float a, global int b}) +0:? 'a3' ( global int) +0:? 'b3' ( global 2-element array of 4-component vector of float) +0:? 'b4' ( global 2-element array of 4-component vector of float) +0:? 'c3' ( global 4X2 matrix of float) +0:? 'd2' ( global implicitly-sized array of structure{ global float s, global float t}) +0:? 'b5' ( global 5-element array of float) +0:? 'single1' ( global structure{ global int f}) +0:? 'single2' ( global structure{ global 2-component vector of uint v}) +0:? 'single3' ( global structure{ global structure{ global int f} s1}) +0:? 'single4' ( global structure{ global structure{ global 2-component vector of uint v} s1}) +0:? 'constructed' ( const structure{ global 2-component vector of uint uv2, global 2-element array of structure{ global float f, global 2X3 matrix of float m23} s}) +0:? 1 (const uint) +0:? 2 (const uint) +0:? 3.000000 +0:? 4.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 4.000000 +0:? 0.000000 +0:? 5.000000 +0:? 6.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 6.000000 +0:? 0.000000 +0:? 'curlybad1' ( temp structure{ global 2-component vector of uint uv2, global 2-element array of structure{ global float f, global 2X3 matrix of float m23} s}) +0:? 'curlyInit' ( const structure{ global 2-component vector of uint uv2, global 2-element array of structure{ global float f, global 2X3 matrix of float m23} s}) +0:? 1 (const uint) +0:? 2 (const uint) +0:? 3.000000 +0:? 4.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 4.000000 +0:? 0.000000 +0:? 5.000000 +0:? 6.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 6.000000 +0:? 0.000000 +0:? 'vc1' ( global float) +0:? 'vc2' ( global float) +0:? 'vc3' ( global float) +0:? 'av3' ( global 3-component vector of float) +0:? 'bv3' ( global 3-component vector of float) + + +Linked tessellation control stage: + +ERROR: Linking tessellation control stage: can't handle multiple entry points per stage +ERROR: Linking tessellation control stage: Multiple function bodies in multiple compilation units for the same signature in the same stage: + main( +ERROR: Linking tessellation control stage: can't handle multiple entry points per stage +ERROR: Linking tessellation control stage: Contradictory layout vertices values +ERROR: Linking tessellation control stage: Multiple function bodies in multiple compilation units for the same signature in the same stage: + main( +ERROR: Linking tessellation control stage: Multiple function bodies in multiple compilation units for the same signature in the same stage: + main( +ERROR: Linking tessellation control stage: Types must match: + gl_out: " out 4-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance}" versus " out implicitly-sized array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance}" +ERROR: Linking tessellation control stage: Types must match: + outa: " global 4-element array of int" versus " global 1-element array of int" +ERROR: Linking tessellation control stage: can't handle multiple entry points per stage +ERROR: Linking tessellation control stage: Multiple function bodies in multiple compilation units for the same signature in the same stage: + main( +ERROR: Linking tessellation control stage: Multiple function bodies in multiple compilation units for the same signature in the same stage: + main( +ERROR: Linking tessellation control stage: Multiple function bodies in multiple compilation units for the same signature in the same stage: + foo( +ERROR: Linking tessellation control stage: Multiple function bodies in multiple compilation units for the same signature in the same stage: + main( +ERROR: Linking tessellation control stage: Types must match: + gl_out: " out 4-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance}" versus " out 3-element array of block{ out 4-component vector of float Position gl_Position}" + +Linked tessellation evaluation stage: + +ERROR: Linking tessellation evaluation stage: can't handle multiple entry points per stage +ERROR: Linking tessellation evaluation stage: Multiple function bodies in multiple compilation units for the same signature in the same stage: + main( +ERROR: Linking tessellation evaluation stage: can't handle multiple entry points per stage +ERROR: Linking tessellation evaluation stage: Contradictory input layout primitives +ERROR: Linking tessellation evaluation stage: Contradictory input vertex spacing +ERROR: Linking tessellation evaluation stage: Contradictory triangle ordering +ERROR: Linking tessellation evaluation stage: Multiple function bodies in multiple compilation units for the same signature in the same stage: + main( +ERROR: Linking tessellation evaluation stage: Multiple function bodies in multiple compilation units for the same signature in the same stage: + main( + +Shader version: 420 +Requested GL_ARB_separate_shader_objects +Requested GL_ARB_tessellation_shader +Requested GL_EXT_device_group +Requested GL_EXT_multiview +vertices = 4 +0:? Sequence +0:10 Function Definition: main( ( global void) +0:10 Function Parameters: +0:12 Sequence +0:12 Barrier ( global void) +0:14 Sequence +0:14 move second child to first child ( temp int) +0:14 'a' ( temp int) +0:14 Constant: +0:14 5392 (const int) +0:20 Sequence +0:20 move second child to first child ( temp 4-component vector of float) +0:20 'p' ( temp 4-component vector of float) +0:20 gl_Position: direct index for structure ( in 4-component vector of float Position) +0:20 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +0:20 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +0:20 Constant: +0:20 1 (const int) +0:20 Constant: +0:20 0 (const int) +0:21 Sequence +0:21 move second child to first child ( temp float) +0:21 'ps' ( temp float) +0:21 gl_PointSize: direct index for structure ( in float PointSize) +0:21 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +0:21 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +0:21 Constant: +0:21 1 (const int) +0:21 Constant: +0:21 1 (const int) +0:22 Sequence +0:22 move second child to first child ( temp float) +0:22 'cd' ( temp float) +0:22 direct index ( temp float ClipDistance) +0:22 gl_ClipDistance: direct index for structure ( in 3-element array of float ClipDistance) +0:22 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +0:22 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +0:22 Constant: +0:22 1 (const int) +0:22 Constant: +0:22 2 (const int) +0:22 Constant: +0:22 2 (const int) +0:24 Sequence +0:24 move second child to first child ( temp int) +0:24 'pvi' ( temp int) +0:24 'gl_PatchVerticesIn' ( in int PatchVertices) +0:25 Sequence +0:25 move second child to first child ( temp int) +0:25 'pid' ( temp int) +0:25 'gl_PrimitiveID' ( in int PrimitiveID) +0:26 Sequence +0:26 move second child to first child ( temp int) +0:26 'iid' ( temp int) +0:26 'gl_InvocationID' ( in int InvocationID) +0:28 move second child to first child ( temp 4-component vector of float) +0:28 gl_Position: direct index for structure ( out 4-component vector of float Position) +0:28 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 2-element array of float ClipDistance gl_ClipDistance}) +0:28 'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 2-element array of float ClipDistance gl_ClipDistance}) +0:28 'gl_InvocationID' ( in int InvocationID) +0:28 Constant: +0:28 0 (const int) +0:28 'p' ( temp 4-component vector of float) +0:29 move second child to first child ( temp float) +0:29 gl_PointSize: direct index for structure ( out float PointSize) +0:29 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 2-element array of float ClipDistance gl_ClipDistance}) +0:29 'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 2-element array of float ClipDistance gl_ClipDistance}) +0:29 'gl_InvocationID' ( in int InvocationID) +0:29 Constant: +0:29 1 (const int) +0:29 'ps' ( temp float) +0:30 move second child to first child ( temp float) +0:30 direct index ( temp float ClipDistance) +0:30 gl_ClipDistance: direct index for structure ( out 2-element array of float ClipDistance) +0:30 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 2-element array of float ClipDistance gl_ClipDistance}) +0:30 'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 2-element array of float ClipDistance gl_ClipDistance}) +0:30 'gl_InvocationID' ( in int InvocationID) +0:30 Constant: +0:30 2 (const int) +0:30 Constant: +0:30 1 (const int) +0:30 'cd' ( temp float) +0:32 move second child to first child ( temp float) +0:32 direct index ( patch temp float TessLevelOuter) +0:32 'gl_TessLevelOuter' ( patch out 4-element array of float TessLevelOuter) +0:32 Constant: +0:32 3 (const int) +0:32 Constant: +0:32 3.200000 +0:33 move second child to first child ( temp float) +0:33 direct index ( patch temp float TessLevelInner) +0:33 'gl_TessLevelInner' ( patch out 2-element array of float TessLevelInner) +0:33 Constant: +0:33 1 (const int) +0:33 Constant: +0:33 1.300000 +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 int) +0:17 'a' ( temp int) +0:17 Constant: +0:17 5392 (const int) +0:23 Sequence +0:23 move second child to first child ( temp 4-component vector of float) +0:23 'p' ( temp 4-component vector of float) +0:23 gl_Position: direct index for structure ( in 4-component vector of float Position) +0:23 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +0:23 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +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 float) +0:24 'ps' ( temp float) +0:24 gl_PointSize: direct index for structure ( in float PointSize) +0:24 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +0:24 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +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 float) +0:25 'cd' ( temp float) +0:25 direct index ( temp float ClipDistance) +0:25 gl_ClipDistance: direct index for structure ( in 3-element array of float ClipDistance) +0:25 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +0:25 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +0:25 Constant: +0:25 1 (const int) +0:25 Constant: +0:25 2 (const int) +0:25 Constant: +0:25 2 (const int) +0:27 Sequence +0:27 move second child to first child ( temp int) +0:27 'pvi' ( temp int) +0:27 'gl_PatchVerticesIn' ( in int PatchVertices) +0:28 Sequence +0:28 move second child to first child ( temp int) +0:28 'pid' ( temp int) +0:28 'gl_PrimitiveID' ( in int PrimitiveID) +0:29 Sequence +0:29 move second child to first child ( temp int) +0:29 'iid' ( temp int) +0:29 'gl_InvocationID' ( in int InvocationID) +0:31 move second child to first child ( temp 4-component vector of float) +0:31 gl_Position: direct index for structure ( out 4-component vector of float Position) +0:31 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 2-element array of float ClipDistance gl_ClipDistance}) +0:31 'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 2-element array of float ClipDistance gl_ClipDistance}) +0:31 'gl_InvocationID' ( in int InvocationID) +0:31 Constant: +0:31 0 (const int) +0:31 'p' ( temp 4-component vector of float) +0:32 move second child to first child ( temp float) +0:32 gl_PointSize: direct index for structure ( out float PointSize) +0:32 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 2-element array of float ClipDistance gl_ClipDistance}) +0:32 'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 2-element array of float ClipDistance gl_ClipDistance}) +0:32 'gl_InvocationID' ( in int InvocationID) +0:32 Constant: +0:32 1 (const int) +0:32 'ps' ( temp float) +0:33 move second child to first child ( temp float) +0:33 direct index ( temp float ClipDistance) +0:33 gl_ClipDistance: direct index for structure ( out 2-element array of float ClipDistance) +0:33 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 2-element array of float ClipDistance gl_ClipDistance}) +0:33 'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 2-element array of float ClipDistance gl_ClipDistance}) +0:33 'gl_InvocationID' ( in int InvocationID) +0:33 Constant: +0:33 2 (const int) +0:33 Constant: +0:33 1 (const int) +0:33 'cd' ( temp float) +0:35 move second child to first child ( temp float) +0:35 direct index ( patch temp float TessLevelOuter) +0:35 'gl_TessLevelOuter' ( patch out 4-element array of 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 float) +0:36 direct index ( patch temp float TessLevelInner) +0:36 'gl_TessLevelInner' ( patch out 2-element array of 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 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 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 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 int) +0:54 Condition +0:54 Compare Less Than ( temp bool) +0:54 'a' ( temp int) +0:54 Constant: +0:54 12 (const int) +0:54 true case +0:54 'a' ( temp int) +0:54 false case +0:54 Comma ( temp int) +0:54 Barrier ( global void) +0:54 'a' ( temp int) +0:56 Sequence +0:56 Barrier ( global void) +0:59 Branch: Return +0:61 Barrier ( global void) +0:8 Function Definition: main( ( global void) +0:8 Function Parameters: +0:15 Function Definition: main( ( global void) +0:15 Function Parameters: +0:17 Sequence +0:17 Sequence +0:17 move second child to first child ( temp 4-component vector of float) +0:17 'p' ( temp 4-component vector of float) +0:17 gl_Position: direct index for structure ( in 4-component vector of float Position) +0:17 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +0:17 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +0:17 Constant: +0:17 1 (const int) +0:17 Constant: +0:17 0 (const int) +0:18 Sequence +0:18 move second child to first child ( temp float) +0:18 'ps' ( temp float) +0:18 gl_PointSize: direct index for structure ( in float PointSize) +0:18 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +0:18 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +0:18 Constant: +0:18 1 (const int) +0:18 Constant: +0:18 1 (const int) +0:19 Sequence +0:19 move second child to first child ( temp float) +0:19 'cd' ( temp float) +0:19 direct index ( temp float ClipDistance) +0:19 gl_ClipDistance: direct index for structure ( in 3-element array of float ClipDistance) +0:19 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +0:19 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +0:19 Constant: +0:19 1 (const int) +0:19 Constant: +0:19 2 (const int) +0:19 Constant: +0:19 2 (const int) +0:21 Sequence +0:21 move second child to first child ( temp int) +0:21 'pvi' ( temp int) +0:21 'gl_PatchVerticesIn' ( in int PatchVertices) +0:22 Sequence +0:22 move second child to first child ( temp int) +0:22 'pid' ( temp int) +0:22 'gl_PrimitiveID' ( in int PrimitiveID) +0:23 Sequence +0:23 move second child to first child ( temp int) +0:23 'iid' ( temp int) +0:23 'gl_InvocationID' ( in int InvocationID) +0:25 move second child to first child ( temp 4-component vector of float) +0:25 gl_Position: direct index for structure ( out 4-component vector of float Position) +0:25 indirect index ( temp block{ out 4-component vector of float Position gl_Position}) +0:25 'gl_out' ( out 3-element array of block{ out 4-component vector of float Position gl_Position}) +0:25 'gl_InvocationID' ( in int InvocationID) +0:25 Constant: +0:25 0 (const int) +0:25 'p' ( temp 4-component vector of float) +0:26 indirect index ( temp block{ out 4-component vector of float Position gl_Position}) +0:26 'gl_out' ( out 3-element array of block{ out 4-component vector of float Position gl_Position}) +0:26 'gl_InvocationID' ( in int InvocationID) +0:? Linker Objects +0:? 'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 2-element array of float ClipDistance gl_ClipDistance}) +0:? 'outa' ( global 4-element array of int) +0:? 'patchOut' ( patch out 4-component vector of float) +0:? 'patchIn' ( patch in 4-component vector of float) +0:? 'ina' ( in 2-component vector of float) +0:? 'inb' ( in 32-element array of 2-component vector of float) +0:? 'inc' ( in 32-element array of 2-component vector of float) +0:? 'ind' ( in 32-element array of 2-component vector of float) +0:? 'ivla' (layout( location=3) in 32-element array of 4-component vector of float) +0:? 'ivlb' (layout( location=4) in 32-element array of 4-component vector of float) +0:? 'ivlc' (layout( location=4) in 32-element array of 4-component vector of float) +0:? 'ovla' (layout( location=3) out 4-element array of 4-component vector of float) +0:? 'ovlb' (layout( location=4) out 4-element array of 4-component vector of float) +0:? 'ovlc' (layout( location=4) out 4-element array of 4-component vector of float) +0:? 'pv3' ( noContraction temp 3-component vector of float) +0:? 'pinbi' ( patch out block{ out int a}) +0:? 'badOrder' ( invariant noContraction out 4-element array of 4-component vector of float) +0:? 'a' ( out 3-element array of int) +0:? 'outb' ( out 5-element array of int) +0:? 'outc' ( out 4-element array of int) +0:? 'outf' ( out float) +0:? 'vs_tcs_first' (layout( location=0) in 32-element array of 2X4 matrix of double) +0:? 'vs_tcs_last' (layout( location=12) in 32-element array of 2X4 matrix of double) +Shader version: 420 +Requested GL_ARB_separate_shader_objects +Requested GL_ARB_tessellation_shader +Requested GL_EXT_device_group +Requested GL_EXT_multiview +input primitive = quads +vertex spacing = fractional_odd_spacing +triangle order = cw +using point mode +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:14 Sequence +0:14 move second child to first child ( temp int) +0:14 'a' ( temp int) +0:14 Constant: +0:14 1512 (const int) +0:22 Sequence +0:22 move second child to first child ( temp 4-component vector of float) +0:22 'p' ( temp 4-component vector of float) +0:22 gl_Position: direct index for structure ( in 4-component vector of float Position) +0:22 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +0:22 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +0:22 Constant: +0:22 1 (const int) +0:22 Constant: +0:22 0 (const int) +0:23 Sequence +0:23 move second child to first child ( temp float) +0:23 'ps' ( temp float) +0:23 gl_PointSize: direct index for structure ( in float PointSize) +0:23 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +0:23 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +0:23 Constant: +0:23 1 (const int) +0:23 Constant: +0:23 1 (const int) +0:24 Sequence +0:24 move second child to first child ( temp float) +0:24 'cd' ( temp float) +0:24 direct index ( temp float ClipDistance) +0:24 gl_ClipDistance: direct index for structure ( in 3-element array of float ClipDistance) +0:24 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +0:24 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +0:24 Constant: +0:24 1 (const int) +0:24 Constant: +0:24 2 (const int) +0:24 Constant: +0:24 2 (const int) +0:26 Sequence +0:26 move second child to first child ( temp int) +0:26 'pvi' ( temp int) +0:26 'gl_PatchVerticesIn' ( in int PatchVertices) +0:27 Sequence +0:27 move second child to first child ( temp int) +0:27 'pid' ( temp int) +0:27 'gl_PrimitiveID' ( in int PrimitiveID) +0:28 Sequence +0:28 move second child to first child ( temp 3-component vector of float) +0:28 'tc' ( temp 3-component vector of float) +0:28 'gl_TessCoord' ( in 3-component vector of float TessCoord) +0:29 Sequence +0:29 move second child to first child ( temp float) +0:29 'tlo' ( temp float) +0:29 direct index ( patch temp float TessLevelOuter) +0:29 'gl_TessLevelOuter' ( patch in 4-element array of float TessLevelOuter) +0:29 Constant: +0:29 3 (const int) +0:30 Sequence +0:30 move second child to first child ( temp float) +0:30 'tli' ( temp float) +0:30 direct index ( patch temp float TessLevelInner) +0:30 'gl_TessLevelInner' ( patch in 2-element array of float TessLevelInner) +0:30 Constant: +0:30 1 (const int) +0:32 move second child to first child ( temp 4-component vector of float) +0:32 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) +0:32 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 3-element array of float ClipDistance gl_ClipDistance}) +0:32 Constant: +0:32 0 (const uint) +0:32 'p' ( temp 4-component vector of float) +0:33 move second child to first child ( temp float) +0:33 gl_PointSize: direct index for structure ( gl_PointSize float PointSize) +0:33 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 3-element array of float ClipDistance gl_ClipDistance}) +0:33 Constant: +0:33 1 (const uint) +0:33 'ps' ( temp float) +0:34 move second child to first child ( temp float) +0:34 direct index ( temp float ClipDistance) +0:34 gl_ClipDistance: direct index for structure ( out 3-element array of float ClipDistance) +0:34 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 3-element array of float ClipDistance gl_ClipDistance}) +0:34 Constant: +0:34 2 (const uint) +0:34 Constant: +0:34 2 (const int) +0:34 'cd' ( temp float) +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 int) +0:24 'a' ( temp int) +0:24 Constant: +0:24 1512 (const int) +0:32 Sequence +0:32 move second child to first child ( temp 4-component vector of float) +0:32 'p' ( temp 4-component vector of float) +0:32 gl_Position: direct index for structure ( in 4-component vector of float Position) +0:32 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +0:32 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +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 float) +0:33 'ps' ( temp float) +0:33 gl_PointSize: direct index for structure ( in float PointSize) +0:33 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +0:33 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +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 float) +0:34 'cd' ( temp float) +0:34 direct index ( temp float ClipDistance) +0:34 gl_ClipDistance: direct index for structure ( in 3-element array of float ClipDistance) +0:34 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +0:34 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +0:34 Constant: +0:34 1 (const int) +0:34 Constant: +0:34 2 (const int) +0:34 Constant: +0:34 2 (const int) +0:36 Sequence +0:36 move second child to first child ( temp int) +0:36 'pvi' ( temp int) +0:36 'gl_PatchVerticesIn' ( in int PatchVertices) +0:37 Sequence +0:37 move second child to first child ( temp int) +0:37 'pid' ( temp int) +0:37 'gl_PrimitiveID' ( in int PrimitiveID) +0:38 Sequence +0:38 move second child to first child ( temp 3-component vector of float) +0:38 'tc' ( temp 3-component vector of float) +0:38 'gl_TessCoord' ( in 3-component vector of float TessCoord) +0:39 Sequence +0:39 move second child to first child ( temp float) +0:39 'tlo' ( temp float) +0:39 direct index ( patch temp float TessLevelOuter) +0:39 'gl_TessLevelOuter' ( patch in 4-element array of float TessLevelOuter) +0:39 Constant: +0:39 3 (const int) +0:40 Sequence +0:40 move second child to first child ( temp float) +0:40 'tli' ( temp float) +0:40 direct index ( patch temp float TessLevelInner) +0:40 'gl_TessLevelInner' ( patch in 2-element array of float TessLevelInner) +0:40 Constant: +0:40 1 (const int) +0:42 move second child to first child ( temp 4-component vector of float) +0:42 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) +0:42 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 3-element array of float ClipDistance gl_ClipDistance}) +0:42 Constant: +0:42 0 (const uint) +0:42 'p' ( temp 4-component vector of float) +0:43 move second child to first child ( temp float) +0:43 gl_PointSize: direct index for structure ( gl_PointSize float PointSize) +0:43 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 3-element array of float ClipDistance gl_ClipDistance}) +0:43 Constant: +0:43 1 (const uint) +0:43 'ps' ( temp float) +0:44 move second child to first child ( temp float) +0:44 direct index ( temp float ClipDistance) +0:44 gl_ClipDistance: direct index for structure ( out 3-element array of float ClipDistance) +0:44 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 3-element array of float ClipDistance gl_ClipDistance}) +0:44 Constant: +0:44 2 (const uint) +0:44 Constant: +0:44 2 (const int) +0:44 'cd' ( temp float) +0:4 Sequence +0:4 move second child to first child ( temp 2X2 matrix of float) +0:4 'b' ( global 2X2 matrix of float) +0:4 Constant: +0:4 1.000000 +0:4 0.000000 +0:4 0.000000 +0:4 1.000000 +0:15 Sequence +0:15 move second child to first child ( temp structure{ global float a, global int b}) +0:15 'e' ( global structure{ global float a, global int b}) +0:15 Constant: +0:15 1.200000 +0:15 2 (const int) +0:20 Sequence +0:20 move second child to first child ( temp structure{ global float a, global int b}) +0:20 'e2' ( global structure{ global float a, global int b}) +0:20 Constant: +0:20 1.000000 +0:20 3 (const int) +0:42 Sequence +0:42 move second child to first child ( temp 5-element array of float) +0:42 'b5' ( global 5-element array of float) +0:42 Constant: +0:42 3.400000 +0:42 4.200000 +0:42 5.000000 +0:42 5.200000 +0:42 1.100000 +0:55 Sequence +0:55 move second child to first child ( temp structure{ global int f}) +0:55 'single1' ( global structure{ global int f}) +0:55 Constant: +0:55 10 (const int) +0:58 Sequence +0:58 move second child to first child ( temp structure{ global 2-component vector of uint v}) +0:58 'single2' ( global structure{ global 2-component vector of uint v}) +0:58 Constant: +0:58 1 (const uint) +0:58 2 (const uint) +0:61 Sequence +0:61 move second child to first child ( temp structure{ global structure{ global int f} s1}) +0:61 'single3' ( global structure{ global structure{ global int f} s1}) +0:61 Constant: +0:61 3 (const int) +0:64 Sequence +0:64 move second child to first child ( temp structure{ global structure{ global 2-component vector of uint v} s1}) +0:64 'single4' ( global structure{ global structure{ global 2-component vector of uint v} s1}) +0:64 Constant: +0:64 4 (const uint) +0:64 5 (const uint) +0:79 Sequence +0:79 move second child to first child ( temp 3-component vector of float) +0:79 'av3' ( global 3-component vector of float) +0:79 Construct vec3 ( global 3-component vector of float) +0:79 'vc1' ( global float) +0:79 'vc2' ( global float) +0:79 'vc3' ( global float) +0:80 Sequence +0:80 move second child to first child ( temp 3-component vector of float) +0:80 'bv3' ( global 3-component vector of float) +0:80 Construct vec3 ( temp 3-component vector of float) +0:80 'vc1' ( global float) +0:80 'vc2' ( global float) +0:80 'vc3' ( global float) +0:82 Function Definition: main( ( global void) +0:82 Function Parameters: +0:84 Sequence +0:84 MemoryBarrier ( global void) +0:86 Test condition and select ( temp void) +0:86 Condition +0:86 Compare Equal ( temp bool) +0:86 Constant: +0:86 1 (const uint) +0:86 2 (const uint) +0:86 3.000000 +0:86 4.000000 +0:86 0.000000 +0:86 0.000000 +0:86 0.000000 +0:86 4.000000 +0:86 0.000000 +0:86 5.000000 +0:86 6.000000 +0:86 0.000000 +0:86 0.000000 +0:86 0.000000 +0:86 6.000000 +0:86 0.000000 +0:86 'curlybad1' ( temp structure{ global 2-component vector of uint uv2, global 2-element array of structure{ global float f, global 2X3 matrix of float m23} s}) +0:86 true case is null +0:88 Test condition and select ( temp void) +0:88 Condition +0:88 Constant: +0:88 true (const bool) +0:88 true case is null +0:? Linker Objects +0:? 'patchIn' ( patch in 4-component vector of float) +0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 3-element array of float ClipDistance gl_ClipDistance}) +0:? 'patchOut' ( patch out 4-component vector of float) +0:? 'badp1' ( smooth patch in 4-component vector of float) +0:? 'badp2' ( flat patch in 4-component vector of float) +0:? 'badp3' ( noperspective patch in 4-component vector of float) +0:? 'badp4' ( patch sample in 3-component vector of float) +0:? 'gl_in' ( in 32-element array of block{ in 1-element array of float ClipDistance gl_ClipDistance}) +0:? 'ina' ( in 2-component vector of float) +0:? 'inb' ( in 32-element array of 2-component vector of float) +0:? 'inc' ( in 32-element array of 2-component vector of float) +0:? 'ind' ( in 32-element array of 2-component vector of float) +0:? 'bla' ( in block{ in int f}) +0:? 'blb' ( in 32-element array of block{ in int f}) +0:? 'blc' ( in 32-element array of block{ in int f}) +0:? 'bld' ( in 32-element array of block{ in int f}) +0:? 'ivla' (layout( location=23) in 32-element array of 4-component vector of float) +0:? 'ivlb' (layout( location=24) in 32-element array of 4-component vector of float) +0:? 'ivlc' (layout( location=24) in 32-element array of 4-component vector of float) +0:? 'ovla' (layout( location=23) out 2-element array of 4-component vector of float) +0:? 'ovlb' (layout( location=24) out 2-element array of 4-component vector of float) +0:? 'pinbi' ( patch in block{ in int a}) +0:? 'a' ( const 2X2 matrix of float) +0:? 1.000000 +0:? 0.000000 +0:? 0.000000 +0:? 1.000000 +0:? 'b' ( global 2X2 matrix of float) +0:? 'c' ( const 2X2 matrix of float) +0:? 1.000000 +0:? 0.000000 +0:? 0.000000 +0:? 1.000000 +0:? 'a2' ( global 2-element array of float) +0:? 'b2' ( global 2-component vector of float) +0:? 'c2' ( global 3X3 matrix of float) +0:? 'd' ( global 2X2 matrix of float) +0:? 'e' ( global structure{ global float a, global int b}) +0:? 'e2' ( global structure{ global float a, global int b}) +0:? 'e3' ( global structure{ global float a, global int b}) +0:? 'a3' ( global int) +0:? 'b3' ( global 2-element array of 4-component vector of float) +0:? 'b4' ( global 2-element array of 4-component vector of float) +0:? 'c3' ( global 4X2 matrix of float) +0:? 'd2' ( global 1-element array of structure{ global float s, global float t}) +0:? 'b5' ( global 5-element array of float) +0:? 'single1' ( global structure{ global int f}) +0:? 'single2' ( global structure{ global 2-component vector of uint v}) +0:? 'single3' ( global structure{ global structure{ global int f} s1}) +0:? 'single4' ( global structure{ global structure{ global 2-component vector of uint v} s1}) +0:? 'constructed' ( const structure{ global 2-component vector of uint uv2, global 2-element array of structure{ global float f, global 2X3 matrix of float m23} s}) +0:? 1 (const uint) +0:? 2 (const uint) +0:? 3.000000 +0:? 4.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 4.000000 +0:? 0.000000 +0:? 5.000000 +0:? 6.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 6.000000 +0:? 0.000000 +0:? 'curlybad1' ( temp structure{ global 2-component vector of uint uv2, global 2-element array of structure{ global float f, global 2X3 matrix of float m23} s}) +0:? 'curlyInit' ( const structure{ global 2-component vector of uint uv2, global 2-element array of structure{ global float f, global 2X3 matrix of float m23} s}) +0:? 1 (const uint) +0:? 2 (const uint) +0:? 3.000000 +0:? 4.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 4.000000 +0:? 0.000000 +0:? 5.000000 +0:? 6.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 6.000000 +0:? 0.000000 +0:? 'vc1' ( global float) +0:? 'vc2' ( global float) +0:? 'vc3' ( global float) +0:? 'av3' ( global 3-component vector of float) +0:? 'bv3' ( global 3-component vector of float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/150.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/150.vert.out new file mode 100644 index 0000000..61a558a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/150.vert.out @@ -0,0 +1,95 @@ +150.vert +ERROR: 0:26: 'a' : cannot redeclare a user-block member array +ERROR: 0:3001: '#error' : line of this error should be 3001 +ERROR: 2 compilation errors. No code generated. + + +Shader version: 150 +ERROR: node is still EOpNull! +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 gl_Position: direct index for structure ( invariant gl_Position 4-component vector of float Position) +0:15 'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:15 Constant: +0:15 0 (const uint) +0:15 'iv4' ( in 4-component vector of float) +0:16 move second child to first child ( temp float) +0:16 gl_PointSize: direct index for structure ( gl_PointSize float PointSize) +0:16 'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:16 Constant: +0:16 1 (const uint) +0:16 'ps' ( uniform float) +0:17 move second child to first child ( temp float) +0:17 direct index ( temp float ClipDistance) +0:17 gl_ClipDistance: direct index for structure ( out 4-element array of float ClipDistance) +0:17 'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:17 Constant: +0:17 2 (const uint) +0:17 Constant: +0:17 2 (const int) +0:17 direct index ( temp float) +0:17 'iv4' ( in 4-component vector of float) +0:17 Constant: +0:17 0 (const int) +0:18 move second child to first child ( temp 4-component vector of float) +0:18 gl_ClipVertex: direct index for structure ( gl_ClipVertex 4-component vector of float ClipVertex) +0:18 'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:18 Constant: +0:18 3 (const uint) +0:18 'iv4' ( in 4-component vector of float) +0:? Linker Objects +0:? 'iv4' ( in 4-component vector of float) +0:? 'ps' ( uniform float) +0:? 'anon@1' (layout( column_major shared) uniform block{layout( column_major shared) uniform implicitly-sized array of int a}) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + + +Linked vertex stage: + +ERROR: Linking vertex stage: Can only use one of gl_ClipDistance or gl_ClipVertex (gl_ClipDistance is preferred) + +Shader version: 150 +ERROR: node is still EOpNull! +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 gl_Position: direct index for structure ( invariant gl_Position 4-component vector of float Position) +0:15 'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:15 Constant: +0:15 0 (const uint) +0:15 'iv4' ( in 4-component vector of float) +0:16 move second child to first child ( temp float) +0:16 gl_PointSize: direct index for structure ( gl_PointSize float PointSize) +0:16 'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:16 Constant: +0:16 1 (const uint) +0:16 'ps' ( uniform float) +0:17 move second child to first child ( temp float) +0:17 direct index ( temp float ClipDistance) +0:17 gl_ClipDistance: direct index for structure ( out 4-element array of float ClipDistance) +0:17 'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:17 Constant: +0:17 2 (const uint) +0:17 Constant: +0:17 2 (const int) +0:17 direct index ( temp float) +0:17 'iv4' ( in 4-component vector of float) +0:17 Constant: +0:17 0 (const int) +0:18 move second child to first child ( temp 4-component vector of float) +0:18 gl_ClipVertex: direct index for structure ( gl_ClipVertex 4-component vector of float ClipVertex) +0:18 'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:18 Constant: +0:18 3 (const uint) +0:18 'iv4' ( in 4-component vector of float) +0:? Linker Objects +0:? 'iv4' ( in 4-component vector of float) +0:? 'ps' ( uniform float) +0:? 'anon@1' (layout( column_major shared) uniform block{layout( column_major shared) uniform 1-element array of int a}) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300.frag.out new file mode 100644 index 0000000..371d9c2 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300.frag.out @@ -0,0 +1,631 @@ +300.frag +ERROR: 0:2: 'float' : type requires declaration of default precision qualifier +ERROR: 0:30: 'noperspective' : Reserved word. +ERROR: 0:30: 'noperspective' : not supported with this profile: es +ERROR: 0:31: 'sampler2D' : sampler/image types can only be used in uniform variables or function parameters: bads +ERROR: 0:32: 'uint' : cannot apply precision statement to this type; use 'float', 'int' or a sampler type +ERROR: 0:39: 'structure' : must be qualified as flat in +ERROR: 0:39: 'structure' : non-uniform struct contains a sampler or image: badout +ERROR: 0:60: 'texel offset' : argument must be compile-time constant +ERROR: 0:62: 'texel offset' : argument must be compile-time constant +ERROR: 0:63: 'texel offset' : argument must be compile-time constant +ERROR: 0:64: 'texel offset' : argument must be compile-time constant +ERROR: 0:66: 'texel offset' : argument must be compile-time constant +ERROR: 0:68: 'texel offset' : argument must be compile-time constant +ERROR: 0:69: 'variable indexing sampler array' : not supported for this version or the enabled extensions +ERROR: 0:73: 'texel offset' : argument must be compile-time constant +ERROR: 0:83: 'double' : Reserved word. +ERROR: 0:83: 'double' : not supported with this profile: es +ERROR: 0:84: 'dvec2' : Reserved word. +ERROR: 0:84: 'double vector' : not supported with this profile: es +ERROR: 0:85: 'dvec3' : Reserved word. +ERROR: 0:85: 'double vector' : not supported with this profile: es +ERROR: 0:86: 'dvec4' : Reserved word. +ERROR: 0:86: 'double vector' : not supported with this profile: es +ERROR: 0:101: 'arrays of arrays' : not supported for this version or the enabled extensions +ERROR: 0:102: 'arrays of arrays' : not supported for this version or the enabled extensions +ERROR: 0:102: 'arrays of arrays' : not supported for this version or the enabled extensions +ERROR: 0:103: 'arrays of arrays' : not supported for this version or the enabled extensions +ERROR: 0:100: 'arrays of arrays' : not supported for this version or the enabled extensions +ERROR: 0:100: 'array-of-array of block' : not supported with this profile: es +ERROR: 0:111: 'variable indexing fragment shader output array' : not supported with this profile: es +ERROR: 0:119: '==' : can't use with samplers or structs containing samplers +ERROR: 0:120: '!=' : can't use with samplers or structs containing samplers +ERROR: 0:121: '==' : can't use with samplers or structs containing samplers +ERROR: 0:121: '==' : wrong operand types: no operation '==' exists that takes a left-hand operand of type ' global lowp sampler2D' and a right operand of type ' global lowp sampler2D' (or there is no acceptable conversion) +ERROR: 0:122: '=' : can't use with samplers or structs containing samplers +ERROR: 0:123: '==' : can't use with samplers or structs containing samplers +ERROR: 0:129: 'texel offset' : value is out of range: [gl_MinProgramTexelOffset, gl_MaxProgramTexelOffset] +ERROR: 0:129: 'texel offset' : value is out of range: [gl_MinProgramTexelOffset, gl_MaxProgramTexelOffset] +ERROR: 0:148: 'qualifier' : cannot use auxiliary, memory, interpolation, or precision qualifier in a default qualifier declaration (declaration with no type) +ERROR: 0:150: 'early_fragment_tests' : not supported for this version or the enabled extensions +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: 45 compilation errors. No code generated. + + +Shader version: 300 +using early_fragment_tests +ERROR: node is still EOpNull! +0:53 Function Definition: main( ( global void) +0:53 Function Parameters: +0:? Sequence +0:57 move second child to first child ( temp lowp 4-component vector of float) +0:57 'v' ( temp lowp 4-component vector of float) +0:57 texture ( global lowp 4-component vector of float) +0:57 's2D' ( uniform lowp sampler2D) +0:57 'c2D' ( smooth in lowp 2-component vector of float) +0:58 move second child to first child ( temp lowp 4-component vector of float) +0:58 'v' ( temp lowp 4-component vector of float) +0:58 textureProj ( global lowp 4-component vector of float) +0:58 's3D' ( uniform lowp sampler3D) +0:58 'c4D' ( smooth temp lowp 4-component vector of float) +0:59 move second child to first child ( temp lowp 4-component vector of float) +0:59 'v' ( temp lowp 4-component vector of float) +0:59 textureLod ( global lowp 4-component vector of float) +0:59 's2DArray' ( uniform lowp sampler2DArray) +0:59 'c3D' ( smooth in lowp 3-component vector of float) +0:59 Constant: +0:59 1.200000 +0:60 move second child to first child ( temp lowp float) +0:60 'f' ( temp lowp float) +0:60 textureOffset ( global lowp float, operation at mediump) +0:60 's2DShadow' ( uniform lowp sampler2DShadow) +0:60 'c3D' ( smooth in lowp 3-component vector of float) +0:60 'ic2D' ( flat in mediump 2-component vector of int) +0:60 'c1D' ( smooth in lowp float) +0:61 move second child to first child ( temp lowp 4-component vector of float) +0:61 'v' ( temp lowp 4-component vector of float) +0:61 textureFetch ( global lowp 4-component vector of float, operation at mediump) +0:61 's3D' ( uniform lowp sampler3D) +0:61 'ic3D' ( flat in mediump 3-component vector of int) +0:61 'ic1D' ( flat in mediump int) +0:62 move second child to first child ( temp lowp 4-component vector of float) +0:62 'v' ( temp lowp 4-component vector of float) +0:62 textureFetchOffset ( global lowp 4-component vector of float, operation at mediump) +0:62 direct index ( temp lowp sampler2D) +0:62 'arrayedSampler' ( uniform 5-element array of lowp sampler2D) +0:62 Constant: +0:62 2 (const int) +0:62 'ic2D' ( flat in mediump 2-component vector of int) +0:62 Constant: +0:62 4 (const int) +0:62 'ic2D' ( flat in mediump 2-component vector of int) +0:63 move second child to first child ( temp lowp float) +0:63 'f' ( temp lowp float) +0:63 textureLodOffset ( global lowp float, operation at mediump) +0:63 's2DShadow' ( uniform lowp sampler2DShadow) +0:63 'c3D' ( smooth in lowp 3-component vector of float) +0:63 'c1D' ( smooth in lowp float) +0:63 'ic2D' ( flat in mediump 2-component vector of int) +0:64 move second child to first child ( temp lowp 4-component vector of float) +0:64 'v' ( temp lowp 4-component vector of float) +0:64 textureProjLodOffset ( global lowp 4-component vector of float, operation at mediump) +0:64 's2D' ( uniform lowp sampler2D) +0:64 'c3D' ( smooth in lowp 3-component vector of float) +0:64 'c1D' ( smooth in lowp float) +0:64 'ic2D' ( flat in mediump 2-component vector of int) +0:65 move second child to first child ( temp lowp 4-component vector of float) +0:65 'v' ( temp lowp 4-component vector of float) +0:65 textureGrad ( global lowp 4-component vector of float) +0:65 'sCube' ( uniform lowp samplerCube) +0:65 'c3D' ( smooth in lowp 3-component vector of float) +0:65 'c3D' ( smooth in lowp 3-component vector of float) +0:65 'c3D' ( smooth in lowp 3-component vector of float) +0:66 move second child to first child ( temp lowp float) +0:66 'f' ( temp lowp float) +0:66 textureGradOffset ( global lowp float, operation at mediump) +0:66 's2DArrayShadow' ( uniform lowp sampler2DArrayShadow) +0:66 'c4D' ( smooth temp lowp 4-component vector of float) +0:66 'c2D' ( smooth in lowp 2-component vector of float) +0:66 'c2D' ( smooth in lowp 2-component vector of float) +0:66 'ic2D' ( flat in mediump 2-component vector of int) +0:67 move second child to first child ( temp lowp 4-component vector of float) +0:67 'v' ( temp lowp 4-component vector of float) +0:67 textureProjGrad ( global lowp 4-component vector of float) +0:67 's3D' ( uniform lowp sampler3D) +0:67 'c4D' ( smooth temp lowp 4-component vector of float) +0:67 'c3D' ( smooth in lowp 3-component vector of float) +0:67 'c3D' ( smooth in lowp 3-component vector of float) +0:68 move second child to first child ( temp lowp 4-component vector of float) +0:68 'v' ( temp lowp 4-component vector of float) +0:68 textureProjGradOffset ( global lowp 4-component vector of float, operation at mediump) +0:68 's2D' ( uniform lowp sampler2D) +0:68 'c3D' ( smooth in lowp 3-component vector of float) +0:68 'c2D' ( smooth in lowp 2-component vector of float) +0:68 'c2D' ( smooth in lowp 2-component vector of float) +0:68 'ic2D' ( flat in mediump 2-component vector of int) +0:69 move second child to first child ( temp lowp 4-component vector of float) +0:69 'v' ( temp lowp 4-component vector of float) +0:69 texture ( global lowp 4-component vector of float) +0:69 indirect index ( temp lowp sampler2D) +0:69 'arrayedSampler' ( uniform 5-element array of lowp sampler2D) +0:69 'ic1D' ( flat in mediump int) +0:69 'c2D' ( smooth in lowp 2-component vector of float) +0:72 move second child to first child ( temp mediump 4-component vector of int) +0:72 'iv' ( temp mediump 4-component vector of int) +0:72 texture ( global lowp 4-component vector of int) +0:72 'is2D' ( uniform lowp isampler2D) +0:72 'c2D' ( smooth in lowp 2-component vector of float) +0:73 move second child to first child ( temp mediump 4-component vector of int) +0:73 'iv' ( temp mediump 4-component vector of int) +0:73 textureProjOffset ( global lowp 4-component vector of int, operation at mediump) +0:73 'is2D' ( uniform lowp isampler2D) +0:73 'c4D' ( smooth temp lowp 4-component vector of float) +0:73 'ic2D' ( flat in mediump 2-component vector of int) +0:74 move second child to first child ( temp mediump 4-component vector of int) +0:74 'iv' ( temp mediump 4-component vector of int) +0:74 textureProjLod ( global lowp 4-component vector of int) +0:74 'is2D' ( uniform lowp isampler2D) +0:74 'c3D' ( smooth in lowp 3-component vector of float) +0:74 'c1D' ( smooth in lowp float) +0:75 move second child to first child ( temp mediump 4-component vector of int) +0:75 'iv' ( temp mediump 4-component vector of int) +0:75 textureProjGrad ( global lowp 4-component vector of int) +0:75 'is2D' ( uniform lowp isampler2D) +0:75 'c3D' ( smooth in lowp 3-component vector of float) +0:75 'c2D' ( smooth in lowp 2-component vector of float) +0:75 'c2D' ( smooth in lowp 2-component vector of float) +0:76 move second child to first child ( temp mediump 4-component vector of int) +0:76 'iv' ( temp mediump 4-component vector of int) +0:76 texture ( global lowp 4-component vector of int) +0:76 'is3D' ( uniform lowp isampler3D) +0:76 'c3D' ( smooth in lowp 3-component vector of float) +0:76 Constant: +0:76 4.200000 +0:77 move second child to first child ( temp mediump 4-component vector of int) +0:77 'iv' ( temp mediump 4-component vector of int) +0:77 textureLod ( global lowp 4-component vector of int) +0:77 'isCube' ( uniform lowp isamplerCube) +0:77 'c3D' ( smooth in lowp 3-component vector of float) +0:77 'c1D' ( smooth in lowp float) +0:78 move second child to first child ( temp mediump 4-component vector of int) +0:78 'iv' ( temp mediump 4-component vector of int) +0:78 textureFetch ( global lowp 4-component vector of int, operation at mediump) +0:78 'is2DArray' ( uniform lowp isampler2DArray) +0:78 'ic3D' ( flat in mediump 3-component vector of int) +0:78 'ic1D' ( flat in mediump int) +0:80 move second child to first child ( temp highp 2-component vector of int) +0:80 vector swizzle ( temp mediump 2-component vector of int) +0:80 'iv' ( temp mediump 4-component vector of int) +0:80 Sequence +0:80 Constant: +0:80 0 (const int) +0:80 Constant: +0:80 1 (const int) +0:80 textureSize ( global highp 2-component vector of int, operation at lowp) +0:80 'sCubeShadow' ( uniform lowp samplerCubeShadow) +0:80 Constant: +0:80 2 (const int) +0:88 add second child into first child ( temp highp float) +0:88 'f' ( temp lowp float) +0:88 direct index ( temp highp float) +0:88 'gl_FragCoord' ( gl_FragCoord highp 4-component vector of float FragCoord) +0:88 Constant: +0:88 1 (const int) +0:89 move second child to first child ( temp highp float) +0:89 'gl_FragDepth' ( gl_FragDepth highp float FragDepth) +0:89 'f' ( temp lowp float) +0:91 move second child to first child ( temp lowp 3-component vector of float) +0:91 'sc' ( out lowp 3-component vector of float) +0:91 c: direct index for structure ( global lowp 3-component vector of float) +0:91 's2' ( smooth in structure{ global lowp 3-component vector of float c, global lowp float f}) +0:91 Constant: +0:91 0 (const int) +0:92 move second child to first child ( temp lowp float) +0:92 'sf' ( out lowp float) +0:92 f: direct index for structure ( global lowp float) +0:92 's2' ( smooth in structure{ global lowp 3-component vector of float c, global lowp float f}) +0:92 Constant: +0:92 1 (const int) +0:94 add ( temp lowp 2-component vector of float) +0:94 hyp. sine ( global lowp float) +0:94 'c1D' ( smooth in lowp float) +0:95 vector-scale ( temp lowp 2-component vector of float) +0:95 hyp. cosine ( global lowp float) +0:95 'c1D' ( smooth in lowp float) +0:95 hyp. tangent ( global lowp 2-component vector of float) +0:95 'c2D' ( smooth in lowp 2-component vector of float) +0:96 add ( temp lowp 4-component vector of float) +0:96 arc hyp. sine ( global lowp 4-component vector of float) +0:96 'c4D' ( smooth temp lowp 4-component vector of float) +0:96 arc hyp. cosine ( global lowp 4-component vector of float) +0:96 'c4D' ( smooth temp lowp 4-component vector of float) +0:97 arc hyp. tangent ( global lowp 3-component vector of float) +0:97 'c3D' ( smooth in lowp 3-component vector of float) +0:108 Function Definition: foo( ( global void) +0:108 Function Parameters: +0:110 Sequence +0:110 move second child to first child ( temp lowp 4-component vector of float) +0:110 direct index ( temp lowp 4-component vector of float) +0:110 'colors' ( out 4-element array of lowp 4-component vector of float) +0:110 Constant: +0:110 2 (const int) +0:110 'c4D' ( smooth temp lowp 4-component vector of float) +0:111 move second child to first child ( temp lowp 4-component vector of float) +0:111 indirect index ( temp lowp 4-component vector of float) +0:111 'colors' ( out 4-element array of lowp 4-component vector of float) +0:111 'ic1D' ( flat in mediump int) +0:111 'c4D' ( smooth temp lowp 4-component vector of float) +0:117 Function Definition: foo13(struct-s-i1-s211; ( global void) +0:117 Function Parameters: +0:117 'inSt2' ( in structure{ global mediump int i, global lowp sampler2D s}) +0:119 Sequence +0:119 Test condition and select ( temp void) +0:119 Condition +0:119 Compare Equal ( temp bool) +0:119 'st1' ( uniform structure{ global mediump int i, global lowp sampler2D s}) +0:119 'st2' ( uniform structure{ global mediump int i, global lowp sampler2D s}) +0:119 true case is null +0:120 Test condition and select ( temp void) +0:120 Condition +0:120 Compare Not Equal ( temp bool) +0:120 'st1' ( uniform structure{ global mediump int i, global lowp sampler2D s}) +0:120 'st2' ( uniform structure{ global mediump int i, global lowp sampler2D s}) +0:120 true case is null +0:121 Constant: +0:121 false (const bool) +0:122 move second child to first child ( temp structure{ global mediump int i, global lowp sampler2D s}) +0:122 'inSt2' ( in structure{ global mediump int i, global lowp sampler2D s}) +0:122 'st1' ( uniform structure{ global mediump int i, global lowp sampler2D s}) +0:123 Compare Equal ( temp bool) +0:123 'inSt2' ( in structure{ global mediump int i, global lowp sampler2D s}) +0:123 'st1' ( uniform structure{ global mediump int i, global lowp sampler2D s}) +0:126 Function Definition: foo23( ( global void) +0:126 Function Parameters: +0:128 Sequence +0:128 textureOffset ( global lowp float) +0:128 's2DShadow' ( uniform lowp sampler2DShadow) +0:128 'c3D' ( smooth in lowp 3-component vector of float) +0:128 Constant: +0:128 -8 (const int) +0:128 7 (const int) +0:128 'c1D' ( smooth in lowp float) +0:129 textureOffset ( global lowp float) +0:129 's2DShadow' ( uniform lowp sampler2DShadow) +0:129 'c3D' ( smooth in lowp 3-component vector of float) +0:129 Constant: +0:129 -9 (const int) +0:129 8 (const int) +0:129 'c1D' ( smooth in lowp float) +0:132 Function Definition: foo324( ( global void) +0:132 Function Parameters: +0:134 Sequence +0:134 Sequence +0:134 move second child to first child ( temp lowp float) +0:134 'p' ( temp lowp float) +0:134 Constant: +0:134 210.712306 +0:135 add second child into first child ( temp lowp float) +0:135 'p' ( temp lowp float) +0:135 Constant: +0:135 0.389418 +0:136 add second child into first child ( temp lowp float) +0:136 'p' ( temp lowp float) +0:136 Constant: +0:136 5.000000 +0:137 add second child into first child ( temp lowp float) +0:137 'p' ( temp lowp float) +0:137 Constant: +0:137 13.000000 +0:138 Sequence +0:138 move second child to first child ( temp lowp 3-component vector of float) +0:138 'c3' ( temp lowp 3-component vector of float) +0:138 Constant: +0:138 -15.000000 +0:138 -2.000000 +0:138 39.000000 +0:139 add second child into first child ( temp lowp 3-component vector of float) +0:139 'c3' ( temp lowp 3-component vector of float) +0:139 Constant: +0:139 -1.000000 +0:139 -2.000000 +0:139 -3.000000 +0:140 add second child into first child ( temp lowp 3-component vector of float) +0:140 'c3' ( temp lowp 3-component vector of float) +0:140 Constant: +0:140 1.000000 +0:140 2.000000 +0:140 3.000000 +0:141 Sequence +0:141 move second child to first child ( temp lowp 2-component vector of float) +0:141 'c2' ( temp lowp 2-component vector of float) +0:141 Constant: +0:141 1.000000 +0:141 -3.000000 +0:142 add second child into first child ( temp lowp 2-component vector of float) +0:142 'c2' ( temp lowp 2-component vector of float) +0:142 Constant: +0:142 1.000000 +0:142 -3.000000 +0:143 add second child into first child ( temp lowp 2-component vector of float) +0:143 'c2' ( temp lowp 2-component vector of float) +0:143 Constant: +0:143 3.000000 +0:143 -8.544004 +0:144 add second child into first child ( temp lowp 2-component vector of float) +0:144 'c2' ( temp lowp 2-component vector of float) +0:144 Constant: +0:144 0.000000 +0:144 0.000000 +0:145 Sequence +0:145 move second child to first child ( temp lowp 3X2 matrix of float) +0:145 'm32' ( temp lowp 3X2 matrix of float) +0:145 Constant: +0:145 10.000000 +0:145 15.000000 +0:145 14.000000 +0:145 21.000000 +0:145 22.000000 +0:145 33.000000 +0:? Linker Objects +0:? 's2D' ( uniform lowp sampler2D) +0:? 's3D' ( uniform lowp sampler3D) +0:? 'sCube' ( uniform lowp samplerCube) +0:? 'sCubeShadow' ( uniform lowp samplerCubeShadow) +0:? 's2DShadow' ( uniform lowp sampler2DShadow) +0:? 's2DArray' ( uniform lowp sampler2DArray) +0:? 's2DArrayShadow' ( uniform lowp sampler2DArrayShadow) +0:? 'is2D' ( uniform lowp isampler2D) +0:? 'is3D' ( uniform lowp isampler3D) +0:? 'isCube' ( uniform lowp isamplerCube) +0:? 'is2DArray' ( uniform lowp isampler2DArray) +0:? 'us2D' ( uniform lowp usampler2D) +0:? 'us3D' ( uniform lowp usampler3D) +0:? 'usCube' ( uniform lowp usamplerCube) +0:? 'us2DArray' ( uniform lowp usampler2DArray) +0:? 'c1D' ( smooth in lowp float) +0:? 'c2D' ( smooth in lowp 2-component vector of float) +0:? 'c3D' ( smooth in lowp 3-component vector of float) +0:? 'c4D' ( smooth temp lowp 4-component vector of float) +0:? 'ic1D' ( flat in mediump int) +0:? 'ic2D' ( flat in mediump 2-component vector of int) +0:? 'ic3D' ( flat in mediump 3-component vector of int) +0:? 'ic4D' ( flat in mediump 4-component vector of int) +0:? 'badv' ( noperspective in lowp 4-component vector of float) +0:? 'bads' ( smooth in lowp sampler2D) +0:? 'badout' ( smooth in structure{ global mediump int i, global lowp sampler2D s}) +0:? 's2' ( smooth in structure{ global lowp 3-component vector of float c, global lowp float f}) +0:? 'sc' ( out lowp 3-component vector of float) +0:? 'sf' ( out lowp float) +0:? 'arrayedSampler' ( uniform 5-element array of lowp sampler2D) +0:? 'multiInst' (layout( column_major shared) uniform 2-element array of 3-element array of block{layout( column_major shared) uniform 2-element array of mediump int a, layout( column_major shared) uniform 2-element array of 3-element array of mediump int b, layout( column_major shared) uniform 2-element array of 3-element array of mediump int c}) +0:? 'colors' ( out 4-element array of lowp 4-component vector of float) +0:? 'st1' ( uniform structure{ global mediump int i, global lowp sampler2D s}) +0:? 'st2' ( uniform structure{ global mediump int i, global lowp sampler2D s}) +0:? 'fooinv' ( invariant smooth in lowp 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: 300 +using early_fragment_tests +ERROR: node is still EOpNull! +0:53 Function Definition: main( ( global void) +0:53 Function Parameters: +0:? Sequence +0:57 move second child to first child ( temp lowp 4-component vector of float) +0:57 'v' ( temp lowp 4-component vector of float) +0:57 texture ( global lowp 4-component vector of float) +0:57 's2D' ( uniform lowp sampler2D) +0:57 'c2D' ( smooth in lowp 2-component vector of float) +0:58 move second child to first child ( temp lowp 4-component vector of float) +0:58 'v' ( temp lowp 4-component vector of float) +0:58 textureProj ( global lowp 4-component vector of float) +0:58 's3D' ( uniform lowp sampler3D) +0:58 'c4D' ( smooth temp lowp 4-component vector of float) +0:59 move second child to first child ( temp lowp 4-component vector of float) +0:59 'v' ( temp lowp 4-component vector of float) +0:59 textureLod ( global lowp 4-component vector of float) +0:59 's2DArray' ( uniform lowp sampler2DArray) +0:59 'c3D' ( smooth in lowp 3-component vector of float) +0:59 Constant: +0:59 1.200000 +0:60 move second child to first child ( temp lowp float) +0:60 'f' ( temp lowp float) +0:60 textureOffset ( global lowp float, operation at mediump) +0:60 's2DShadow' ( uniform lowp sampler2DShadow) +0:60 'c3D' ( smooth in lowp 3-component vector of float) +0:60 'ic2D' ( flat in mediump 2-component vector of int) +0:60 'c1D' ( smooth in lowp float) +0:61 move second child to first child ( temp lowp 4-component vector of float) +0:61 'v' ( temp lowp 4-component vector of float) +0:61 textureFetch ( global lowp 4-component vector of float, operation at mediump) +0:61 's3D' ( uniform lowp sampler3D) +0:61 'ic3D' ( flat in mediump 3-component vector of int) +0:61 'ic1D' ( flat in mediump int) +0:62 move second child to first child ( temp lowp 4-component vector of float) +0:62 'v' ( temp lowp 4-component vector of float) +0:62 textureFetchOffset ( global lowp 4-component vector of float, operation at mediump) +0:62 direct index ( temp lowp sampler2D) +0:62 'arrayedSampler' ( uniform 5-element array of lowp sampler2D) +0:62 Constant: +0:62 2 (const int) +0:62 'ic2D' ( flat in mediump 2-component vector of int) +0:62 Constant: +0:62 4 (const int) +0:62 'ic2D' ( flat in mediump 2-component vector of int) +0:63 move second child to first child ( temp lowp float) +0:63 'f' ( temp lowp float) +0:63 textureLodOffset ( global lowp float, operation at mediump) +0:63 's2DShadow' ( uniform lowp sampler2DShadow) +0:63 'c3D' ( smooth in lowp 3-component vector of float) +0:63 'c1D' ( smooth in lowp float) +0:63 'ic2D' ( flat in mediump 2-component vector of int) +0:64 move second child to first child ( temp lowp 4-component vector of float) +0:64 'v' ( temp lowp 4-component vector of float) +0:64 textureProjLodOffset ( global lowp 4-component vector of float, operation at mediump) +0:64 's2D' ( uniform lowp sampler2D) +0:64 'c3D' ( smooth in lowp 3-component vector of float) +0:64 'c1D' ( smooth in lowp float) +0:64 'ic2D' ( flat in mediump 2-component vector of int) +0:65 move second child to first child ( temp lowp 4-component vector of float) +0:65 'v' ( temp lowp 4-component vector of float) +0:65 textureGrad ( global lowp 4-component vector of float) +0:65 'sCube' ( uniform lowp samplerCube) +0:65 'c3D' ( smooth in lowp 3-component vector of float) +0:65 'c3D' ( smooth in lowp 3-component vector of float) +0:65 'c3D' ( smooth in lowp 3-component vector of float) +0:66 move second child to first child ( temp lowp float) +0:66 'f' ( temp lowp float) +0:66 textureGradOffset ( global lowp float, operation at mediump) +0:66 's2DArrayShadow' ( uniform lowp sampler2DArrayShadow) +0:66 'c4D' ( smooth temp lowp 4-component vector of float) +0:66 'c2D' ( smooth in lowp 2-component vector of float) +0:66 'c2D' ( smooth in lowp 2-component vector of float) +0:66 'ic2D' ( flat in mediump 2-component vector of int) +0:67 move second child to first child ( temp lowp 4-component vector of float) +0:67 'v' ( temp lowp 4-component vector of float) +0:67 textureProjGrad ( global lowp 4-component vector of float) +0:67 's3D' ( uniform lowp sampler3D) +0:67 'c4D' ( smooth temp lowp 4-component vector of float) +0:67 'c3D' ( smooth in lowp 3-component vector of float) +0:67 'c3D' ( smooth in lowp 3-component vector of float) +0:68 move second child to first child ( temp lowp 4-component vector of float) +0:68 'v' ( temp lowp 4-component vector of float) +0:68 textureProjGradOffset ( global lowp 4-component vector of float, operation at mediump) +0:68 's2D' ( uniform lowp sampler2D) +0:68 'c3D' ( smooth in lowp 3-component vector of float) +0:68 'c2D' ( smooth in lowp 2-component vector of float) +0:68 'c2D' ( smooth in lowp 2-component vector of float) +0:68 'ic2D' ( flat in mediump 2-component vector of int) +0:69 move second child to first child ( temp lowp 4-component vector of float) +0:69 'v' ( temp lowp 4-component vector of float) +0:69 texture ( global lowp 4-component vector of float) +0:69 indirect index ( temp lowp sampler2D) +0:69 'arrayedSampler' ( uniform 5-element array of lowp sampler2D) +0:69 'ic1D' ( flat in mediump int) +0:69 'c2D' ( smooth in lowp 2-component vector of float) +0:72 move second child to first child ( temp mediump 4-component vector of int) +0:72 'iv' ( temp mediump 4-component vector of int) +0:72 texture ( global lowp 4-component vector of int) +0:72 'is2D' ( uniform lowp isampler2D) +0:72 'c2D' ( smooth in lowp 2-component vector of float) +0:73 move second child to first child ( temp mediump 4-component vector of int) +0:73 'iv' ( temp mediump 4-component vector of int) +0:73 textureProjOffset ( global lowp 4-component vector of int, operation at mediump) +0:73 'is2D' ( uniform lowp isampler2D) +0:73 'c4D' ( smooth temp lowp 4-component vector of float) +0:73 'ic2D' ( flat in mediump 2-component vector of int) +0:74 move second child to first child ( temp mediump 4-component vector of int) +0:74 'iv' ( temp mediump 4-component vector of int) +0:74 textureProjLod ( global lowp 4-component vector of int) +0:74 'is2D' ( uniform lowp isampler2D) +0:74 'c3D' ( smooth in lowp 3-component vector of float) +0:74 'c1D' ( smooth in lowp float) +0:75 move second child to first child ( temp mediump 4-component vector of int) +0:75 'iv' ( temp mediump 4-component vector of int) +0:75 textureProjGrad ( global lowp 4-component vector of int) +0:75 'is2D' ( uniform lowp isampler2D) +0:75 'c3D' ( smooth in lowp 3-component vector of float) +0:75 'c2D' ( smooth in lowp 2-component vector of float) +0:75 'c2D' ( smooth in lowp 2-component vector of float) +0:76 move second child to first child ( temp mediump 4-component vector of int) +0:76 'iv' ( temp mediump 4-component vector of int) +0:76 texture ( global lowp 4-component vector of int) +0:76 'is3D' ( uniform lowp isampler3D) +0:76 'c3D' ( smooth in lowp 3-component vector of float) +0:76 Constant: +0:76 4.200000 +0:77 move second child to first child ( temp mediump 4-component vector of int) +0:77 'iv' ( temp mediump 4-component vector of int) +0:77 textureLod ( global lowp 4-component vector of int) +0:77 'isCube' ( uniform lowp isamplerCube) +0:77 'c3D' ( smooth in lowp 3-component vector of float) +0:77 'c1D' ( smooth in lowp float) +0:78 move second child to first child ( temp mediump 4-component vector of int) +0:78 'iv' ( temp mediump 4-component vector of int) +0:78 textureFetch ( global lowp 4-component vector of int, operation at mediump) +0:78 'is2DArray' ( uniform lowp isampler2DArray) +0:78 'ic3D' ( flat in mediump 3-component vector of int) +0:78 'ic1D' ( flat in mediump int) +0:80 move second child to first child ( temp highp 2-component vector of int) +0:80 vector swizzle ( temp mediump 2-component vector of int) +0:80 'iv' ( temp mediump 4-component vector of int) +0:80 Sequence +0:80 Constant: +0:80 0 (const int) +0:80 Constant: +0:80 1 (const int) +0:80 textureSize ( global highp 2-component vector of int, operation at lowp) +0:80 'sCubeShadow' ( uniform lowp samplerCubeShadow) +0:80 Constant: +0:80 2 (const int) +0:88 add second child into first child ( temp highp float) +0:88 'f' ( temp lowp float) +0:88 direct index ( temp highp float) +0:88 'gl_FragCoord' ( gl_FragCoord highp 4-component vector of float FragCoord) +0:88 Constant: +0:88 1 (const int) +0:89 move second child to first child ( temp highp float) +0:89 'gl_FragDepth' ( gl_FragDepth highp float FragDepth) +0:89 'f' ( temp lowp float) +0:91 move second child to first child ( temp lowp 3-component vector of float) +0:91 'sc' ( out lowp 3-component vector of float) +0:91 c: direct index for structure ( global lowp 3-component vector of float) +0:91 's2' ( smooth in structure{ global lowp 3-component vector of float c, global lowp float f}) +0:91 Constant: +0:91 0 (const int) +0:92 move second child to first child ( temp lowp float) +0:92 'sf' ( out lowp float) +0:92 f: direct index for structure ( global lowp float) +0:92 's2' ( smooth in structure{ global lowp 3-component vector of float c, global lowp float f}) +0:92 Constant: +0:92 1 (const int) +0:94 add ( temp lowp 2-component vector of float) +0:94 hyp. sine ( global lowp float) +0:94 'c1D' ( smooth in lowp float) +0:95 vector-scale ( temp lowp 2-component vector of float) +0:95 hyp. cosine ( global lowp float) +0:95 'c1D' ( smooth in lowp float) +0:95 hyp. tangent ( global lowp 2-component vector of float) +0:95 'c2D' ( smooth in lowp 2-component vector of float) +0:96 add ( temp lowp 4-component vector of float) +0:96 arc hyp. sine ( global lowp 4-component vector of float) +0:96 'c4D' ( smooth temp lowp 4-component vector of float) +0:96 arc hyp. cosine ( global lowp 4-component vector of float) +0:96 'c4D' ( smooth temp lowp 4-component vector of float) +0:97 arc hyp. tangent ( global lowp 3-component vector of float) +0:97 'c3D' ( smooth in lowp 3-component vector of float) +0:? Linker Objects +0:? 's2D' ( uniform lowp sampler2D) +0:? 's3D' ( uniform lowp sampler3D) +0:? 'sCube' ( uniform lowp samplerCube) +0:? 'sCubeShadow' ( uniform lowp samplerCubeShadow) +0:? 's2DShadow' ( uniform lowp sampler2DShadow) +0:? 's2DArray' ( uniform lowp sampler2DArray) +0:? 's2DArrayShadow' ( uniform lowp sampler2DArrayShadow) +0:? 'is2D' ( uniform lowp isampler2D) +0:? 'is3D' ( uniform lowp isampler3D) +0:? 'isCube' ( uniform lowp isamplerCube) +0:? 'is2DArray' ( uniform lowp isampler2DArray) +0:? 'us2D' ( uniform lowp usampler2D) +0:? 'us3D' ( uniform lowp usampler3D) +0:? 'usCube' ( uniform lowp usamplerCube) +0:? 'us2DArray' ( uniform lowp usampler2DArray) +0:? 'c1D' ( smooth in lowp float) +0:? 'c2D' ( smooth in lowp 2-component vector of float) +0:? 'c3D' ( smooth in lowp 3-component vector of float) +0:? 'c4D' ( smooth temp lowp 4-component vector of float) +0:? 'ic1D' ( flat in mediump int) +0:? 'ic2D' ( flat in mediump 2-component vector of int) +0:? 'ic3D' ( flat in mediump 3-component vector of int) +0:? 'ic4D' ( flat in mediump 4-component vector of int) +0:? 'badv' ( noperspective in lowp 4-component vector of float) +0:? 'bads' ( smooth in lowp sampler2D) +0:? 'badout' ( smooth in structure{ global mediump int i, global lowp sampler2D s}) +0:? 's2' ( smooth in structure{ global lowp 3-component vector of float c, global lowp float f}) +0:? 'sc' ( out lowp 3-component vector of float) +0:? 'sf' ( out lowp float) +0:? 'arrayedSampler' ( uniform 5-element array of lowp sampler2D) +0:? 'multiInst' (layout( column_major shared) uniform 2-element array of 3-element array of block{layout( column_major shared) uniform 2-element array of mediump int a, layout( column_major shared) uniform 2-element array of 3-element array of mediump int b, layout( column_major shared) uniform 2-element array of 3-element array of mediump int c}) +0:? 'colors' ( out 4-element array of lowp 4-component vector of float) +0:? 'st1' ( uniform structure{ global mediump int i, global lowp sampler2D s}) +0:? 'st2' ( uniform structure{ global mediump int i, global lowp sampler2D s}) +0:? 'fooinv' ( invariant smooth in lowp 4-component vector of float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300.vert.out new file mode 100644 index 0000000..ec5d5d0 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300.vert.out @@ -0,0 +1,486 @@ +300.vert +ERROR: 0:8: 'varying' : Reserved word. +ERROR: 0:8: 'varying' : no longer supported in es profile; removed in version 300 +ERROR: 0:9: 'vertex input arrays' : not supported with this profile: es +ERROR: 0:10: '' : precision qualifier must appear as last qualifier +ERROR: 0:11: '' : invariant qualifier must appear before interpolation, storage, and precision qualifiers +ERROR: 0:12: '' : Auxiliary qualifiers (centroid, patch, and sample) must appear before storage and precision qualifiers +ERROR: 0:12: '' : vertex input cannot be further qualified +ERROR: 0:13: '' : interpolation qualifiers must appear before storage and precision qualifiers +ERROR: 0:14: '' : in/out must appear before const +ERROR: 0:15: '' : precision qualifier must appear as last qualifier +ERROR: 0:16: '' : can only have one interpolation qualifier (flat, smooth, noperspective, __explicitInterpAMD) +ERROR: 0:17: 'sample' : Reserved word. +ERROR: 0:17: '' : can only have one auxiliary qualifier (centroid, patch, and sample) +ERROR: 0:18: 'uniform' : too many storage qualifiers +ERROR: 0:56: '#error' : GL_ES is set +ERROR: 0:62: '' : array size required +ERROR: 0:63: '' : array size required +ERROR: 0:64: '' : array size required +ERROR: 0:65: '' : array size required +ERROR: 0:67: '' : array size required +ERROR: 0:76: 'invariant' : cannot change qualification after use +ERROR: 0:78: 'invariant' : can only apply to an output +ERROR: 0:88: 'ub2' : Cannot reuse block name within the same interface: uniform +ERROR: 0:92: 'ub2' : Cannot reuse block name within the same interface: uniform +ERROR: 0:96: 'ub2' : Cannot reuse block name within the same interface: uniform +ERROR: 0:104: 'ub3' : Cannot reuse block name within the same interface: uniform +ERROR: 0:121: 'textureSize' : no matching overloaded function found +ERROR: 0:123: 'textureSize' : no matching overloaded function found +ERROR: 0:125: 'texture' : no matching overloaded function found +ERROR: 0:127: 'textureProjOffset' : no matching overloaded function found +ERROR: 0:132: 'highp' : overloaded functions must have the same parameter precision qualifiers for argument 2 +ERROR: 0:135: 'in' : overloaded functions must have the same parameter storage qualifiers for argument 2 +ERROR: 0:146: '' : array size required +ERROR: 0:147: '' : array size required +ERROR: 0:148: '' : array size required +ERROR: 0:149: 'float' : cannot apply precision statement to this type; use 'float', 'int' or a sampler type +ERROR: 0:168: 'Binst' : cannot add storage, auxiliary, memory, interpolation, layout, or precision qualifier to an existing variable +ERROR: 0:169: 'Bblock' : cannot add storage, auxiliary, memory, interpolation, layout, or precision qualifier to an existing variable +ERROR: 0:170: 'Bfoo' : cannot add storage, auxiliary, memory, interpolation, layout, or precision qualifier to an existing variable +ERROR: 0:172: 'std430' : not supported for this version or the enabled extensions +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. + + +Shader version: 300 +ERROR: node is still EOpNull! +0:27 Function Definition: main( ( global void) +0:27 Function Parameters: +0:29 Sequence +0:29 Sequence +0:29 move second child to first child ( temp highp int) +0:29 'id' ( temp highp int) +0:29 add ( temp highp int) +0:29 'gl_VertexID' ( gl_VertexId highp int VertexId) +0:29 'gl_InstanceID' ( gl_InstanceId highp int InstanceId) +0:31 Sequence +0:31 move second child to first child ( temp highp int) +0:31 'c0' ( temp highp int) +0:31 Constant: +0:31 64 (const int) +0:32 Sequence +0:32 move second child to first child ( temp highp int) +0:32 'c1' ( temp highp int) +0:32 Constant: +0:32 128 (const int) +0:33 Sequence +0:33 move second child to first child ( temp highp int) +0:33 'c2' ( temp highp int) +0:33 Constant: +0:33 16 (const int) +0:34 Sequence +0:34 move second child to first child ( temp highp int) +0:34 'c3' ( temp highp int) +0:34 Constant: +0:34 15 (const int) +0:35 Sequence +0:35 move second child to first child ( temp highp int) +0:35 'c4' ( temp highp int) +0:35 Constant: +0:35 32 (const int) +0:36 Sequence +0:36 move second child to first child ( temp highp int) +0:36 'c5' ( temp highp int) +0:36 Constant: +0:36 80 (const int) +0:37 Sequence +0:37 move second child to first child ( temp highp int) +0:37 'c6' ( temp highp int) +0:37 Constant: +0:37 32 (const int) +0:38 Sequence +0:38 move second child to first child ( temp highp int) +0:38 'c7' ( temp highp int) +0:38 Constant: +0:38 16 (const int) +0:39 Sequence +0:39 move second child to first child ( temp highp int) +0:39 'c8' ( temp highp int) +0:39 Constant: +0:39 32 (const int) +0:40 Sequence +0:40 move second child to first child ( temp highp int) +0:40 'c9' ( temp highp int) +0:40 Constant: +0:40 -8 (const int) +0:41 Sequence +0:41 move second child to first child ( temp highp int) +0:41 'c10' ( temp highp int) +0:41 Constant: +0:41 7 (const int) +0:43 Sequence +0:43 move second child to first child ( temp highp 3X4 matrix of float) +0:43 'tm' ( temp highp 3X4 matrix of float) +0:43 transpose ( global highp 3X4 matrix of float) +0:43 'm43' ( uniform highp 4X3 matrix of float) +0:44 Sequence +0:44 move second child to first child ( temp highp float) +0:44 'dm' ( temp highp float) +0:44 determinant ( global highp float) +0:44 'm44' ( uniform highp 4X4 matrix of float) +0:45 Sequence +0:45 move second child to first child ( temp highp 3X3 matrix of float) +0:45 'im' ( temp highp 3X3 matrix of float) +0:45 inverse ( global highp 3X3 matrix of float) +0:45 'm33' ( uniform highp 3X3 matrix of float) +0:47 Sequence +0:47 move second child to first child ( temp highp 3X2 matrix of float) +0:47 'op' ( temp highp 3X2 matrix of float) +0:47 outer product ( global highp 3X2 matrix of float) +0:47 'v2' ( smooth out highp 2-component vector of float) +0:47 'v3' ( in highp 3-component vector of float) +0:49 move second child to first child ( temp highp 4-component vector of float) +0:49 'gl_Position' ( gl_Position highp 4-component vector of float Position) +0:49 direct index ( temp highp 4-component vector of float) +0:49 'm44' ( uniform highp 4X4 matrix of float) +0:49 Constant: +0:49 2 (const int) +0:50 move second child to first child ( temp highp float) +0:50 'gl_PointSize' ( gl_PointSize highp float PointSize) +0:50 direct index ( temp highp float) +0:50 'v2' ( smooth out highp 2-component vector of float) +0:50 Constant: +0:50 1 (const int) +0:52 move second child to first child ( temp highp 3-component vector of float) +0:52 c: direct index for structure ( global highp 3-component vector of float) +0:52 's' ( smooth out structure{ global highp 3-component vector of float c, global highp float f}) +0:52 Constant: +0:52 0 (const int) +0:52 'v3' ( in highp 3-component vector of float) +0:53 move second child to first child ( temp highp float) +0:53 f: direct index for structure ( global highp float) +0:53 's' ( smooth out structure{ global highp 3-component vector of float c, global highp float f}) +0:53 Constant: +0:53 1 (const int) +0:53 'dm' ( temp highp float) +0:68 Sequence +0:68 move second child to first child ( temp 2-element array of highp float) +0:68 'okayA' ( global 2-element array of highp float) +0:68 Constant: +0:68 3.000000 +0:68 4.000000 +0:71 Function Definition: newVFun( ( global void) +0:71 Function Parameters: +0:73 Sequence +0:73 move second child to first child ( temp highp 3-component vector of float) +0:73 'newV' ( smooth out highp 3-component vector of float) +0:73 'v3' ( in highp 3-component vector of float) +0:118 Function Definition: foo23( ( global void) +0:118 Function Parameters: +0:120 Sequence +0:120 Sequence +0:120 move second child to first child ( temp highp 2-component vector of int) +0:120 'x1' ( temp highp 2-component vector of int) +0:120 textureSize ( global highp 2-component vector of int, operation at lowp) +0:120 's2D' ( uniform lowp sampler2D) +0:120 Constant: +0:120 2 (const int) +0:121 Constant: +0:121 0.000000 +0:122 Sequence +0:122 move second child to first child ( temp highp 3-component vector of int) +0:122 'x3' ( temp highp 3-component vector of int) +0:122 textureSize ( global highp 3-component vector of int, operation at lowp) +0:122 's2DAS' ( uniform lowp sampler2DArrayShadow) +0:122 Constant: +0:122 -1 (const int) +0:123 Constant: +0:123 0.000000 +0:124 Sequence +0:124 move second child to first child ( temp highp 4-component vector of float) +0:124 'x4' ( temp highp 4-component vector of float) +0:124 texture ( global lowp 4-component vector of float, operation at highp) +0:124 's2D' ( uniform lowp sampler2D) +0:124 'c2D' ( in highp 2-component vector of float) +0:125 Constant: +0:125 0.000000 +0:126 Sequence +0:126 move second child to first child ( temp highp 4-component vector of float) +0:126 'x5' ( temp highp 4-component vector of float) +0:126 textureProjOffset ( global lowp 4-component vector of float) +0:126 's3D' ( uniform lowp sampler3D) +0:126 Constant: +0:126 0.200000 +0:126 0.200000 +0:126 0.200000 +0:126 0.200000 +0:126 Constant: +0:126 1 (const int) +0:126 1 (const int) +0:126 1 (const int) +0:127 Constant: +0:127 0.000000 +0:128 Sequence +0:128 move second child to first child ( temp highp float) +0:128 'x6' ( temp highp float) +0:128 textureProjGradOffset ( global lowp float, operation at highp) +0:128 's2DS' ( uniform lowp sampler2DShadow) +0:128 'invIn' ( invariant in highp 4-component vector of float) +0:128 Constant: +0:128 4.200000 +0:128 4.200000 +0:128 Constant: +0:128 5.300000 +0:128 5.300000 +0:128 Constant: +0:128 1 (const int) +0:128 1 (const int) +0:137 Function Definition: foo2349( ( global void) +0:137 Function Parameters: +0:139 Sequence +0:139 Sequence +0:139 move second child to first child ( temp 3-element array of highp float) +0:139 'x' ( temp 3-element array of highp float) +0:139 Constant: +0:139 1.000000 +0:139 2.000000 +0:139 3.000000 +0:140 Sequence +0:140 move second child to first child ( temp 3-element array of highp float) +0:140 'y' ( temp 3-element array of highp float) +0:140 'x' ( temp 3-element array of highp float) +0:141 Sequence +0:141 move second child to first child ( temp 3-element array of highp float) +0:141 'z' ( temp 3-element array of highp float) +0:141 'x' ( temp 3-element array of highp float) +0:143 move second child to first child ( temp 3-element array of highp float) +0:143 'w' ( temp 3-element array of highp float) +0:143 'y' ( temp 3-element array of highp float) +0:155 Function Definition: gggf(f1; ( global highp int) +0:155 Function Parameters: +0:155 'f' ( in highp float) +0:155 Sequence +0:155 Branch: Return with expression +0:155 Constant: +0:155 2 (const int) +0:158 Function Definition: agggf(f1; ( global highp int) +0:158 Function Parameters: +0:158 'f' ( in highp float) +0:158 Sequence +0:158 Branch: Return with expression +0:158 Constant: +0:158 2 (const int) +0:178 Function Definition: fooDeeparray( ( global void) +0:178 Function Parameters: +0:181 Sequence +0:181 Sequence +0:180 move second child to first child ( temp 3-element array of highp float) +0:180 'x' ( temp 3-element array of highp float) +0:180 Constant: +0:180 1.000000 +0:180 2.000000 +0:180 3.000000 +0:181 move second child to first child ( temp 4-element array of highp float) +0:181 'y' ( temp 4-element array of highp float) +0:181 Constant: +0:181 1.000000 +0:181 2.000000 +0:181 3.000000 +0:181 4.000000 +0:183 move second child to first child ( temp 3-element array of highp float) +0:183 'xp' ( temp 3-element array of highp float) +0:183 'x' ( temp 3-element array of highp float) +0:184 move second child to first child ( temp 4-element array of highp float) +0:184 'yp' ( temp 4-element array of highp float) +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:? Linker Objects +0:? 'm43' ( uniform highp 4X3 matrix of float) +0:? 'm33' ( uniform highp 3X3 matrix of float) +0:? 'm44' ( uniform highp 4X4 matrix of float) +0:? 'v3' ( in highp 3-component vector of float) +0:? 'v2' ( smooth out highp 2-component vector of float) +0:? 'bad' ( in 10-element array of highp 4-component vector of float) +0:? 'badorder' ( in highp 4-component vector of float) +0:? 'badorder2' ( invariant smooth out highp 4-component vector of float) +0:? 'badorder4' ( centroid in highp 4-component vector of float) +0:? 'badorder3' ( flat out highp 4-component vector of float) +0:? 'rep' ( smooth flat out highp 4-component vector of float) +0:? 'rep2' ( centroid smooth sample out highp 4-component vector of float) +0:? 'rep3' ( in highp 4-component vector of float) +0:? 's' ( smooth out structure{ global highp 3-component vector of float c, global highp float f}) +0:? 'badsize' ( global implicitly-sized array of highp float) +0:? 'badsize2' ( global implicitly-sized array of highp float) +0:? 'ubInst' (layout( column_major shared) uniform implicitly-sized array of block{layout( column_major shared) uniform implicitly-sized array of highp int a}) +0:? 'okayA' ( global 2-element array of highp float) +0:? 'newV' ( invariant smooth out highp 3-component vector of float) +0:? 'invIn' ( invariant in highp 4-component vector of float) +0:? 's2' ( invariant smooth out structure{ global highp 3-component vector of float c, global highp float f}) +0:? 's3' ( invariant smooth out structure{ global highp 3-component vector of float c, global highp float f}) +0:? 'a' (layout( column_major shared) uniform block{layout( column_major shared) uniform highp float f}) +0:? 'anon@0' (layout( column_major shared) uniform block{layout( column_major shared) uniform bool b23}) +0:? 's2D' ( uniform lowp sampler2D) +0:? 's3D' ( uniform lowp sampler3D) +0:? 's2DS' ( uniform lowp sampler2DShadow) +0:? 's2DAS' ( uniform lowp sampler2DArrayShadow) +0:? 'c2D' ( in highp 2-component vector of float) +0:? 'ssss' ( smooth out structure{ global highp float f}) +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:? 'gl_VertexID' ( gl_VertexId highp int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId highp int InstanceId) + + +Linked vertex stage: + + +Shader version: 300 +ERROR: node is still EOpNull! +0:27 Function Definition: main( ( global void) +0:27 Function Parameters: +0:29 Sequence +0:29 Sequence +0:29 move second child to first child ( temp highp int) +0:29 'id' ( temp highp int) +0:29 add ( temp highp int) +0:29 'gl_VertexID' ( gl_VertexId highp int VertexId) +0:29 'gl_InstanceID' ( gl_InstanceId highp int InstanceId) +0:31 Sequence +0:31 move second child to first child ( temp highp int) +0:31 'c0' ( temp highp int) +0:31 Constant: +0:31 64 (const int) +0:32 Sequence +0:32 move second child to first child ( temp highp int) +0:32 'c1' ( temp highp int) +0:32 Constant: +0:32 128 (const int) +0:33 Sequence +0:33 move second child to first child ( temp highp int) +0:33 'c2' ( temp highp int) +0:33 Constant: +0:33 16 (const int) +0:34 Sequence +0:34 move second child to first child ( temp highp int) +0:34 'c3' ( temp highp int) +0:34 Constant: +0:34 15 (const int) +0:35 Sequence +0:35 move second child to first child ( temp highp int) +0:35 'c4' ( temp highp int) +0:35 Constant: +0:35 32 (const int) +0:36 Sequence +0:36 move second child to first child ( temp highp int) +0:36 'c5' ( temp highp int) +0:36 Constant: +0:36 80 (const int) +0:37 Sequence +0:37 move second child to first child ( temp highp int) +0:37 'c6' ( temp highp int) +0:37 Constant: +0:37 32 (const int) +0:38 Sequence +0:38 move second child to first child ( temp highp int) +0:38 'c7' ( temp highp int) +0:38 Constant: +0:38 16 (const int) +0:39 Sequence +0:39 move second child to first child ( temp highp int) +0:39 'c8' ( temp highp int) +0:39 Constant: +0:39 32 (const int) +0:40 Sequence +0:40 move second child to first child ( temp highp int) +0:40 'c9' ( temp highp int) +0:40 Constant: +0:40 -8 (const int) +0:41 Sequence +0:41 move second child to first child ( temp highp int) +0:41 'c10' ( temp highp int) +0:41 Constant: +0:41 7 (const int) +0:43 Sequence +0:43 move second child to first child ( temp highp 3X4 matrix of float) +0:43 'tm' ( temp highp 3X4 matrix of float) +0:43 transpose ( global highp 3X4 matrix of float) +0:43 'm43' ( uniform highp 4X3 matrix of float) +0:44 Sequence +0:44 move second child to first child ( temp highp float) +0:44 'dm' ( temp highp float) +0:44 determinant ( global highp float) +0:44 'm44' ( uniform highp 4X4 matrix of float) +0:45 Sequence +0:45 move second child to first child ( temp highp 3X3 matrix of float) +0:45 'im' ( temp highp 3X3 matrix of float) +0:45 inverse ( global highp 3X3 matrix of float) +0:45 'm33' ( uniform highp 3X3 matrix of float) +0:47 Sequence +0:47 move second child to first child ( temp highp 3X2 matrix of float) +0:47 'op' ( temp highp 3X2 matrix of float) +0:47 outer product ( global highp 3X2 matrix of float) +0:47 'v2' ( smooth out highp 2-component vector of float) +0:47 'v3' ( in highp 3-component vector of float) +0:49 move second child to first child ( temp highp 4-component vector of float) +0:49 'gl_Position' ( gl_Position highp 4-component vector of float Position) +0:49 direct index ( temp highp 4-component vector of float) +0:49 'm44' ( uniform highp 4X4 matrix of float) +0:49 Constant: +0:49 2 (const int) +0:50 move second child to first child ( temp highp float) +0:50 'gl_PointSize' ( gl_PointSize highp float PointSize) +0:50 direct index ( temp highp float) +0:50 'v2' ( smooth out highp 2-component vector of float) +0:50 Constant: +0:50 1 (const int) +0:52 move second child to first child ( temp highp 3-component vector of float) +0:52 c: direct index for structure ( global highp 3-component vector of float) +0:52 's' ( smooth out structure{ global highp 3-component vector of float c, global highp float f}) +0:52 Constant: +0:52 0 (const int) +0:52 'v3' ( in highp 3-component vector of float) +0:53 move second child to first child ( temp highp float) +0:53 f: direct index for structure ( global highp float) +0:53 's' ( smooth out structure{ global highp 3-component vector of float c, global highp float f}) +0:53 Constant: +0:53 1 (const int) +0:53 'dm' ( temp highp float) +0:68 Sequence +0:68 move second child to first child ( temp 2-element array of highp float) +0:68 'okayA' ( global 2-element array of highp float) +0:68 Constant: +0:68 3.000000 +0:68 4.000000 +0:? Linker Objects +0:? 'm43' ( uniform highp 4X3 matrix of float) +0:? 'm33' ( uniform highp 3X3 matrix of float) +0:? 'm44' ( uniform highp 4X4 matrix of float) +0:? 'v3' ( in highp 3-component vector of float) +0:? 'v2' ( smooth out highp 2-component vector of float) +0:? 'bad' ( in 10-element array of highp 4-component vector of float) +0:? 'badorder' ( in highp 4-component vector of float) +0:? 'badorder2' ( invariant smooth out highp 4-component vector of float) +0:? 'badorder4' ( centroid in highp 4-component vector of float) +0:? 'badorder3' ( flat out highp 4-component vector of float) +0:? 'rep' ( smooth flat out highp 4-component vector of float) +0:? 'rep2' ( centroid smooth sample out highp 4-component vector of float) +0:? 'rep3' ( in highp 4-component vector of float) +0:? 's' ( smooth out structure{ global highp 3-component vector of float c, global highp float f}) +0:? 'badsize' ( global 1-element array of highp float) +0:? 'badsize2' ( global 1-element array of highp float) +0:? 'ubInst' (layout( column_major shared) uniform 1-element array of block{layout( column_major shared) uniform 1-element array of highp int a}) +0:? 'okayA' ( global 2-element array of highp float) +0:? 'newV' ( invariant smooth out highp 3-component vector of float) +0:? 'invIn' ( invariant in highp 4-component vector of float) +0:? 's2' ( invariant smooth out structure{ global highp 3-component vector of float c, global highp float f}) +0:? 's3' ( invariant smooth out structure{ global highp 3-component vector of float c, global highp float f}) +0:? 'a' (layout( column_major shared) uniform block{layout( column_major shared) uniform highp float f}) +0:? 'anon@0' (layout( column_major shared) uniform block{layout( column_major shared) uniform bool b23}) +0:? 's2D' ( uniform lowp sampler2D) +0:? 's3D' ( uniform lowp sampler3D) +0:? 's2DS' ( uniform lowp sampler2DShadow) +0:? 's2DAS' ( uniform lowp sampler2DArrayShadow) +0:? 'c2D' ( in highp 2-component vector of float) +0:? 'ssss' ( smooth out structure{ global highp float f}) +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:? 'gl_VertexID' ( gl_VertexId highp int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId highp int InstanceId) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300BuiltIns.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300BuiltIns.frag.out new file mode 100644 index 0000000..84d4d08 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300BuiltIns.frag.out @@ -0,0 +1,418 @@ +300BuiltIns.frag +ERROR: 0:6: 'float' : type requires declaration of default precision qualifier +ERROR: 0:70: 'noise2' : no matching overloaded function found +ERROR: 0:72: 't__' : identifiers containing consecutive underscores ("__") are reserved, and an error if version <= 300 +ERROR: 0:75: '#define' : names containing consecutive underscores are reserved, and an error if version <= 300: __D +ERROR: 4 compilation errors. No code generated. + + +Shader version: 300 +ERROR: node is still EOpNull! +0:26 Function Definition: main( ( global void) +0:26 Function Parameters: +0:29 Sequence +0:29 Sequence +0:29 move second child to first child ( temp mediump 3-component vector of float) +0:29 'v' ( temp mediump 3-component vector of float) +0:29 mix ( global mediump 3-component vector of float) +0:29 'x' ( global mediump 3-component vector of float) +0:29 'y' ( global mediump 3-component vector of float) +0:29 'bv' ( global 3-component vector of bool) +0:30 Sequence +0:30 move second child to first child ( temp mediump 4-component vector of int) +0:30 'iv10' ( temp mediump 4-component vector of int) +0:30 Absolute value ( global mediump 4-component vector of int) +0:30 'iv4a' ( global mediump 4-component vector of int) +0:31 Sequence +0:31 move second child to first child ( temp mediump 4-component vector of int) +0:31 'iv11' ( temp mediump 4-component vector of int) +0:31 Sign ( global mediump 4-component vector of int) +0:31 'iv4a' ( global mediump 4-component vector of int) +0:32 Sequence +0:32 move second child to first child ( temp mediump 4-component vector of int) +0:32 'iv12' ( temp mediump 4-component vector of int) +0:32 min ( global mediump 4-component vector of int) +0:32 'iv4a' ( global mediump 4-component vector of int) +0:32 'iv4b' ( global mediump 4-component vector of int) +0:33 Sequence +0:33 move second child to first child ( temp mediump 4-component vector of int) +0:33 'iv13' ( temp mediump 4-component vector of int) +0:33 min ( global mediump 4-component vector of int) +0:33 'iv4a' ( global mediump 4-component vector of int) +0:33 'imin' ( global mediump int) +0:34 Sequence +0:34 move second child to first child ( temp mediump 2-component vector of uint) +0:34 'u' ( temp mediump 2-component vector of uint) +0:34 min ( global mediump 2-component vector of uint) +0:34 'uv2x' ( global mediump 2-component vector of uint) +0:34 'uv2y' ( global mediump 2-component vector of uint) +0:35 Sequence +0:35 move second child to first child ( temp mediump 4-component vector of uint) +0:35 'uv' ( temp mediump 4-component vector of uint) +0:35 min ( global mediump 4-component vector of uint) +0:35 'uv4y' ( global mediump 4-component vector of uint) +0:35 'uy' ( global mediump uint) +0:36 Sequence +0:36 move second child to first child ( temp mediump 3-component vector of int) +0:36 'iv14' ( temp mediump 3-component vector of int) +0:36 max ( global mediump 3-component vector of int) +0:36 'iv3a' ( global mediump 3-component vector of int) +0:36 'iv3b' ( global mediump 3-component vector of int) +0:37 Sequence +0:37 move second child to first child ( temp mediump 4-component vector of int) +0:37 'iv15' ( temp mediump 4-component vector of int) +0:37 max ( global mediump 4-component vector of int) +0:37 'iv4a' ( global mediump 4-component vector of int) +0:37 'imax' ( global mediump int) +0:38 Sequence +0:38 move second child to first child ( temp mediump 2-component vector of uint) +0:38 'u10' ( temp mediump 2-component vector of uint) +0:38 max ( global mediump 2-component vector of uint) +0:38 'uv2x' ( global mediump 2-component vector of uint) +0:38 'uv2y' ( global mediump 2-component vector of uint) +0:39 Sequence +0:39 move second child to first child ( temp mediump 2-component vector of uint) +0:39 'u11' ( temp mediump 2-component vector of uint) +0:39 max ( global mediump 2-component vector of uint) +0:39 'uv2x' ( global mediump 2-component vector of uint) +0:39 'uy' ( global mediump uint) +0:40 Sequence +0:40 move second child to first child ( temp mediump 4-component vector of int) +0:40 'iv16' ( temp mediump 4-component vector of int) +0:40 clamp ( global mediump 4-component vector of int) +0:40 'iv4a' ( global mediump 4-component vector of int) +0:40 'iv4a' ( global mediump 4-component vector of int) +0:40 'iv4b' ( global mediump 4-component vector of int) +0:41 Sequence +0:41 move second child to first child ( temp mediump 4-component vector of int) +0:41 'iv17' ( temp mediump 4-component vector of int) +0:41 clamp ( global mediump 4-component vector of int) +0:41 'iv4a' ( global mediump 4-component vector of int) +0:41 'imin' ( global mediump int) +0:41 'imax' ( global mediump int) +0:42 Sequence +0:42 move second child to first child ( temp mediump 2-component vector of uint) +0:42 'u12' ( temp mediump 2-component vector of uint) +0:42 clamp ( global mediump 2-component vector of uint) +0:42 'uv2x' ( global mediump 2-component vector of uint) +0:42 'uv2y' ( global mediump 2-component vector of uint) +0:42 'uv2c' ( global mediump 2-component vector of uint) +0:43 Sequence +0:43 move second child to first child ( temp mediump 4-component vector of uint) +0:43 'uv10' ( temp mediump 4-component vector of uint) +0:43 clamp ( global mediump 4-component vector of uint) +0:43 'uv4y' ( global mediump 4-component vector of uint) +0:43 'umin' ( global mediump uint) +0:43 'umax' ( global mediump uint) +0:47 Sequence +0:47 move second child to first child ( temp mediump 3-component vector of float) +0:47 'v11' ( temp mediump 3-component vector of float) +0:47 modf ( global mediump 3-component vector of float) +0:47 'x' ( global mediump 3-component vector of float) +0:47 'modfOut' ( temp mediump 3-component vector of float) +0:49 Sequence +0:49 move second child to first child ( temp mediump float) +0:49 't' ( temp mediump float) +0:49 trunc ( global mediump float) +0:49 'f' ( global mediump float) +0:50 Sequence +0:50 move second child to first child ( temp mediump 2-component vector of float) +0:50 'v12' ( temp mediump 2-component vector of float) +0:50 round ( global mediump 2-component vector of float) +0:50 'v2a' ( global mediump 2-component vector of float) +0:51 Sequence +0:51 move second child to first child ( temp mediump 2-component vector of float) +0:51 'v13' ( temp mediump 2-component vector of float) +0:51 roundEven ( global mediump 2-component vector of float) +0:51 'v2a' ( global mediump 2-component vector of float) +0:52 Sequence +0:52 move second child to first child ( temp 2-component vector of bool) +0:52 'b10' ( temp 2-component vector of bool) +0:52 isnan ( global 2-component vector of bool, operation at mediump) +0:52 'v2a' ( global mediump 2-component vector of float) +0:53 Sequence +0:53 move second child to first child ( temp 4-component vector of bool) +0:53 'b11' ( temp 4-component vector of bool) +0:53 isinf ( global 4-component vector of bool, operation at mediump) +0:53 'v4' ( global mediump 4-component vector of float) +0:56 Sequence +0:56 move second child to first child ( temp highp int) +0:56 'i' ( temp mediump int) +0:56 floatBitsToInt ( global highp int) +0:56 'f' ( global mediump float) +0:57 Sequence +0:57 move second child to first child ( temp highp 4-component vector of uint) +0:57 'uv11' ( temp mediump 4-component vector of uint) +0:57 floatBitsToUint ( global highp 4-component vector of uint) +0:57 'v4' ( global mediump 4-component vector of float) +0:58 Sequence +0:58 move second child to first child ( temp highp 4-component vector of float) +0:58 'v14' ( temp mediump 4-component vector of float) +0:58 intBitsToFloat ( global highp 4-component vector of float) +0:58 'iv4a' ( global mediump 4-component vector of int) +0:59 Sequence +0:59 move second child to first child ( temp highp 2-component vector of float) +0:59 'v15' ( temp mediump 2-component vector of float) +0:59 uintBitsToFloat ( global highp 2-component vector of float) +0:59 'uv2c' ( global mediump 2-component vector of uint) +0:62 Sequence +0:62 move second child to first child ( temp highp uint) +0:62 'u19' ( temp mediump uint) +0:62 packSnorm2x16 ( global highp uint, operation at mediump) +0:62 'v2a' ( global mediump 2-component vector of float) +0:63 Sequence +0:63 move second child to first child ( temp highp 2-component vector of float) +0:63 'v20' ( temp mediump 2-component vector of float) +0:63 unpackSnorm2x16 ( global highp 2-component vector of float) +0:63 'uy' ( global mediump uint) +0:64 Sequence +0:64 move second child to first child ( temp highp uint) +0:64 'u15' ( temp mediump uint) +0:64 packUnorm2x16 ( global highp uint, operation at mediump) +0:64 'v2a' ( global mediump 2-component vector of float) +0:65 Sequence +0:65 move second child to first child ( temp highp 2-component vector of float) +0:65 'v16' ( temp mediump 2-component vector of float) +0:65 unpackUnorm2x16 ( global highp 2-component vector of float) +0:65 'uy' ( global mediump uint) +0:66 Sequence +0:66 move second child to first child ( temp highp uint) +0:66 'u17' ( temp mediump uint) +0:66 packHalf2x16 ( global highp uint, operation at mediump) +0:66 'v2b' ( global mediump 2-component vector of float) +0:67 Sequence +0:67 move second child to first child ( temp mediump 2-component vector of float) +0:67 'v18' ( temp mediump 2-component vector of float) +0:67 unpackHalf2x16 ( global mediump 2-component vector of float, operation at highp) +0:67 'uy' ( global mediump uint) +0:70 Constant: +0:70 0.000000 +0:? Linker Objects +0:? 'imax' ( global mediump int) +0:? 'imin' ( global mediump int) +0:? 'umax' ( global mediump uint) +0:? 'umin' ( global mediump uint) +0:? 'x' ( global mediump 3-component vector of float) +0:? 'y' ( global mediump 3-component vector of float) +0:? 'bv' ( global 3-component vector of bool) +0:? 'uy' ( global mediump uint) +0:? 'uv2c' ( global mediump 2-component vector of uint) +0:? 'uv2y' ( global mediump 2-component vector of uint) +0:? 'uv2x' ( global mediump 2-component vector of uint) +0:? 'uv4y' ( global mediump 4-component vector of uint) +0:? 'iv3a' ( global mediump 3-component vector of int) +0:? 'iv3b' ( global mediump 3-component vector of int) +0:? 'iv4a' ( global mediump 4-component vector of int) +0:? 'iv4b' ( global mediump 4-component vector of int) +0:? 'f' ( global mediump float) +0:? 'v2a' ( global mediump 2-component vector of float) +0:? 'v2b' ( global mediump 2-component vector of float) +0:? 'v4' ( global mediump 4-component vector of float) + + +Linked fragment stage: + + +Shader version: 300 +ERROR: node is still EOpNull! +0:26 Function Definition: main( ( global void) +0:26 Function Parameters: +0:29 Sequence +0:29 Sequence +0:29 move second child to first child ( temp mediump 3-component vector of float) +0:29 'v' ( temp mediump 3-component vector of float) +0:29 mix ( global mediump 3-component vector of float) +0:29 'x' ( global mediump 3-component vector of float) +0:29 'y' ( global mediump 3-component vector of float) +0:29 'bv' ( global 3-component vector of bool) +0:30 Sequence +0:30 move second child to first child ( temp mediump 4-component vector of int) +0:30 'iv10' ( temp mediump 4-component vector of int) +0:30 Absolute value ( global mediump 4-component vector of int) +0:30 'iv4a' ( global mediump 4-component vector of int) +0:31 Sequence +0:31 move second child to first child ( temp mediump 4-component vector of int) +0:31 'iv11' ( temp mediump 4-component vector of int) +0:31 Sign ( global mediump 4-component vector of int) +0:31 'iv4a' ( global mediump 4-component vector of int) +0:32 Sequence +0:32 move second child to first child ( temp mediump 4-component vector of int) +0:32 'iv12' ( temp mediump 4-component vector of int) +0:32 min ( global mediump 4-component vector of int) +0:32 'iv4a' ( global mediump 4-component vector of int) +0:32 'iv4b' ( global mediump 4-component vector of int) +0:33 Sequence +0:33 move second child to first child ( temp mediump 4-component vector of int) +0:33 'iv13' ( temp mediump 4-component vector of int) +0:33 min ( global mediump 4-component vector of int) +0:33 'iv4a' ( global mediump 4-component vector of int) +0:33 'imin' ( global mediump int) +0:34 Sequence +0:34 move second child to first child ( temp mediump 2-component vector of uint) +0:34 'u' ( temp mediump 2-component vector of uint) +0:34 min ( global mediump 2-component vector of uint) +0:34 'uv2x' ( global mediump 2-component vector of uint) +0:34 'uv2y' ( global mediump 2-component vector of uint) +0:35 Sequence +0:35 move second child to first child ( temp mediump 4-component vector of uint) +0:35 'uv' ( temp mediump 4-component vector of uint) +0:35 min ( global mediump 4-component vector of uint) +0:35 'uv4y' ( global mediump 4-component vector of uint) +0:35 'uy' ( global mediump uint) +0:36 Sequence +0:36 move second child to first child ( temp mediump 3-component vector of int) +0:36 'iv14' ( temp mediump 3-component vector of int) +0:36 max ( global mediump 3-component vector of int) +0:36 'iv3a' ( global mediump 3-component vector of int) +0:36 'iv3b' ( global mediump 3-component vector of int) +0:37 Sequence +0:37 move second child to first child ( temp mediump 4-component vector of int) +0:37 'iv15' ( temp mediump 4-component vector of int) +0:37 max ( global mediump 4-component vector of int) +0:37 'iv4a' ( global mediump 4-component vector of int) +0:37 'imax' ( global mediump int) +0:38 Sequence +0:38 move second child to first child ( temp mediump 2-component vector of uint) +0:38 'u10' ( temp mediump 2-component vector of uint) +0:38 max ( global mediump 2-component vector of uint) +0:38 'uv2x' ( global mediump 2-component vector of uint) +0:38 'uv2y' ( global mediump 2-component vector of uint) +0:39 Sequence +0:39 move second child to first child ( temp mediump 2-component vector of uint) +0:39 'u11' ( temp mediump 2-component vector of uint) +0:39 max ( global mediump 2-component vector of uint) +0:39 'uv2x' ( global mediump 2-component vector of uint) +0:39 'uy' ( global mediump uint) +0:40 Sequence +0:40 move second child to first child ( temp mediump 4-component vector of int) +0:40 'iv16' ( temp mediump 4-component vector of int) +0:40 clamp ( global mediump 4-component vector of int) +0:40 'iv4a' ( global mediump 4-component vector of int) +0:40 'iv4a' ( global mediump 4-component vector of int) +0:40 'iv4b' ( global mediump 4-component vector of int) +0:41 Sequence +0:41 move second child to first child ( temp mediump 4-component vector of int) +0:41 'iv17' ( temp mediump 4-component vector of int) +0:41 clamp ( global mediump 4-component vector of int) +0:41 'iv4a' ( global mediump 4-component vector of int) +0:41 'imin' ( global mediump int) +0:41 'imax' ( global mediump int) +0:42 Sequence +0:42 move second child to first child ( temp mediump 2-component vector of uint) +0:42 'u12' ( temp mediump 2-component vector of uint) +0:42 clamp ( global mediump 2-component vector of uint) +0:42 'uv2x' ( global mediump 2-component vector of uint) +0:42 'uv2y' ( global mediump 2-component vector of uint) +0:42 'uv2c' ( global mediump 2-component vector of uint) +0:43 Sequence +0:43 move second child to first child ( temp mediump 4-component vector of uint) +0:43 'uv10' ( temp mediump 4-component vector of uint) +0:43 clamp ( global mediump 4-component vector of uint) +0:43 'uv4y' ( global mediump 4-component vector of uint) +0:43 'umin' ( global mediump uint) +0:43 'umax' ( global mediump uint) +0:47 Sequence +0:47 move second child to first child ( temp mediump 3-component vector of float) +0:47 'v11' ( temp mediump 3-component vector of float) +0:47 modf ( global mediump 3-component vector of float) +0:47 'x' ( global mediump 3-component vector of float) +0:47 'modfOut' ( temp mediump 3-component vector of float) +0:49 Sequence +0:49 move second child to first child ( temp mediump float) +0:49 't' ( temp mediump float) +0:49 trunc ( global mediump float) +0:49 'f' ( global mediump float) +0:50 Sequence +0:50 move second child to first child ( temp mediump 2-component vector of float) +0:50 'v12' ( temp mediump 2-component vector of float) +0:50 round ( global mediump 2-component vector of float) +0:50 'v2a' ( global mediump 2-component vector of float) +0:51 Sequence +0:51 move second child to first child ( temp mediump 2-component vector of float) +0:51 'v13' ( temp mediump 2-component vector of float) +0:51 roundEven ( global mediump 2-component vector of float) +0:51 'v2a' ( global mediump 2-component vector of float) +0:52 Sequence +0:52 move second child to first child ( temp 2-component vector of bool) +0:52 'b10' ( temp 2-component vector of bool) +0:52 isnan ( global 2-component vector of bool, operation at mediump) +0:52 'v2a' ( global mediump 2-component vector of float) +0:53 Sequence +0:53 move second child to first child ( temp 4-component vector of bool) +0:53 'b11' ( temp 4-component vector of bool) +0:53 isinf ( global 4-component vector of bool, operation at mediump) +0:53 'v4' ( global mediump 4-component vector of float) +0:56 Sequence +0:56 move second child to first child ( temp highp int) +0:56 'i' ( temp mediump int) +0:56 floatBitsToInt ( global highp int) +0:56 'f' ( global mediump float) +0:57 Sequence +0:57 move second child to first child ( temp highp 4-component vector of uint) +0:57 'uv11' ( temp mediump 4-component vector of uint) +0:57 floatBitsToUint ( global highp 4-component vector of uint) +0:57 'v4' ( global mediump 4-component vector of float) +0:58 Sequence +0:58 move second child to first child ( temp highp 4-component vector of float) +0:58 'v14' ( temp mediump 4-component vector of float) +0:58 intBitsToFloat ( global highp 4-component vector of float) +0:58 'iv4a' ( global mediump 4-component vector of int) +0:59 Sequence +0:59 move second child to first child ( temp highp 2-component vector of float) +0:59 'v15' ( temp mediump 2-component vector of float) +0:59 uintBitsToFloat ( global highp 2-component vector of float) +0:59 'uv2c' ( global mediump 2-component vector of uint) +0:62 Sequence +0:62 move second child to first child ( temp highp uint) +0:62 'u19' ( temp mediump uint) +0:62 packSnorm2x16 ( global highp uint, operation at mediump) +0:62 'v2a' ( global mediump 2-component vector of float) +0:63 Sequence +0:63 move second child to first child ( temp highp 2-component vector of float) +0:63 'v20' ( temp mediump 2-component vector of float) +0:63 unpackSnorm2x16 ( global highp 2-component vector of float) +0:63 'uy' ( global mediump uint) +0:64 Sequence +0:64 move second child to first child ( temp highp uint) +0:64 'u15' ( temp mediump uint) +0:64 packUnorm2x16 ( global highp uint, operation at mediump) +0:64 'v2a' ( global mediump 2-component vector of float) +0:65 Sequence +0:65 move second child to first child ( temp highp 2-component vector of float) +0:65 'v16' ( temp mediump 2-component vector of float) +0:65 unpackUnorm2x16 ( global highp 2-component vector of float) +0:65 'uy' ( global mediump uint) +0:66 Sequence +0:66 move second child to first child ( temp highp uint) +0:66 'u17' ( temp mediump uint) +0:66 packHalf2x16 ( global highp uint, operation at mediump) +0:66 'v2b' ( global mediump 2-component vector of float) +0:67 Sequence +0:67 move second child to first child ( temp mediump 2-component vector of float) +0:67 'v18' ( temp mediump 2-component vector of float) +0:67 unpackHalf2x16 ( global mediump 2-component vector of float, operation at highp) +0:67 'uy' ( global mediump uint) +0:70 Constant: +0:70 0.000000 +0:? Linker Objects +0:? 'imax' ( global mediump int) +0:? 'imin' ( global mediump int) +0:? 'umax' ( global mediump uint) +0:? 'umin' ( global mediump uint) +0:? 'x' ( global mediump 3-component vector of float) +0:? 'y' ( global mediump 3-component vector of float) +0:? 'bv' ( global 3-component vector of bool) +0:? 'uy' ( global mediump uint) +0:? 'uv2c' ( global mediump 2-component vector of uint) +0:? 'uv2y' ( global mediump 2-component vector of uint) +0:? 'uv2x' ( global mediump 2-component vector of uint) +0:? 'uv4y' ( global mediump 4-component vector of uint) +0:? 'iv3a' ( global mediump 3-component vector of int) +0:? 'iv3b' ( global mediump 3-component vector of int) +0:? 'iv4a' ( global mediump 4-component vector of int) +0:? 'iv4b' ( global mediump 4-component vector of int) +0:? 'f' ( global mediump float) +0:? 'v2a' ( global mediump 2-component vector of float) +0:? 'v2b' ( global mediump 2-component vector of float) +0:? 'v4' ( global mediump 4-component vector of float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300block.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300block.frag.out new file mode 100644 index 0000000..6f7de91 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300block.frag.out @@ -0,0 +1,153 @@ +300block.frag +ERROR: 0:10: '' : cannot nest a structure definition inside a structure or block +ERROR: 0:21: '' : cannot nest a structure definition inside a structure or block +ERROR: 0:20: 'sampler' : member of block cannot be or contain a sampler, image, or atomic_uint type +ERROR: 0:24: 'fbs' : member of block cannot be or contain a sampler, image, or atomic_uint type +ERROR: 0:45: 'variable indexing uniform block array' : not supported for this version or the enabled extensions +ERROR: 0:46: 'fooBlock' : cannot be used (maybe an instance name is needed) +ERROR: 0:46: 'fooBlock' : undeclared identifier +ERROR: 0:47: 'constructor' : not enough data provided for construction +ERROR: 0:51: 'unreferenced' : cannot be used (maybe an instance name is needed) +ERROR: 0:51: 'unreferenced' : undeclared identifier +ERROR: 0:52: '++' : l-value required "s" (can't modify a uniform) +ERROR: 0:52: '++' : wrong operand type no operation '++' exists that takes an operand of type uniform structure{ global mediump 4-component vector of float u, global mediump 4-component vector of uint v, global lowp isampler3D sampler, global mediump 3-component vector of float w, global structure{ global mediump int a} t} (or there is no acceptable conversion) +ERROR: 0:53: '-' : wrong operand types: no operation '-' exists that takes a left-hand operand of type 'layout( column_major shared) uniform block{layout( column_major shared) uniform mediump 4-component vector of uint nbv, layout( column_major shared) uniform mediump int ni}' and a right operand of type ' const int' (or there is no acceptable conversion) +ERROR: 0:55: 'barBlockArray' : cannot be used (maybe an instance name is needed) +ERROR: 0:55: 'barBlockArray' : undeclared identifier +ERROR: 0:55: '*' : wrong operand types: no operation '*' exists that takes a left-hand operand of type ' const int' and a right operand of type ' temp float' (or there is no acceptable conversion) +ERROR: 0:58: 'fooBlock' : redefinition +ERROR: 17 compilation errors. No code generated. + + +Shader version: 300 +ERROR: node is still EOpNull! +0:42 Function Definition: main( ( global void) +0:42 Function Parameters: +0:44 Sequence +0:44 texture ( global lowp 4-component vector of int) +0:44 sampler: direct index for structure ( global lowp isampler3D) +0:44 's' ( uniform structure{ global mediump 4-component vector of float u, global mediump 4-component vector of uint v, global lowp isampler3D sampler, global mediump 3-component vector of float w, global structure{ global mediump int a} t}) +0:44 Constant: +0:44 2 (const int) +0:44 Construct vec3 ( temp lowp 3-component vector of float) +0:44 Convert int to float ( temp lowp float) +0:44 ni: direct index for structure (layout( column_major shared) uniform mediump int) +0:44 'inst' (layout( column_major shared) uniform block{layout( column_major shared) uniform mediump 4-component vector of uint nbv, layout( column_major shared) uniform mediump int ni}) +0:44 Constant: +0:44 1 (const int) +0:44 Convert uint to float ( temp lowp float) +0:44 direct index ( temp mediump uint) +0:44 bv: direct index for structure (layout( column_major shared) uniform mediump 4-component vector of uint) +0:44 'anon@0' (layout( column_major shared) uniform block{layout( column_major shared) uniform mediump 4-component vector of uint bv, layout( column_major shared) uniform mediump 2X2 matrix of float bm2, layout( column_major shared) uniform lowp isampler2D sampler, layout( column_major shared) uniform structure{ global mediump int a} t, layout( column_major shared) uniform structure{ global mediump 4-component vector of float u, global mediump 4-component vector of uint v, global lowp isampler3D sampler, global mediump 3-component vector of float w, global structure{ global mediump int a} t} fbs}) +0:44 Constant: +0:44 0 (const uint) +0:44 Constant: +0:44 1 (const int) +0:44 Convert uint to float ( temp lowp float) +0:44 direct index ( temp mediump uint) +0:44 nbv: direct index for structure (layout( column_major shared) uniform mediump 4-component vector of uint) +0:44 direct index (layout( column_major shared) temp block{layout( column_major shared) uniform mediump 4-component vector of uint nbv, layout( column_major shared) uniform mediump int ni}) +0:44 'insts' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform mediump 4-component vector of uint nbv, layout( column_major shared) uniform mediump int ni}) +0:44 Constant: +0:44 2 (const int) +0:44 Constant: +0:44 0 (const int) +0:44 Constant: +0:44 2 (const int) +0:45 indirect index (layout( column_major shared) temp block{layout( column_major shared) uniform mediump 4-component vector of uint nbv, layout( column_major shared) uniform mediump int ni}) +0:45 'insts' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform mediump 4-component vector of uint nbv, layout( column_major shared) uniform mediump int ni}) +0:45 direct index ( temp mediump uint) +0:45 v: direct index for structure ( global mediump 4-component vector of uint) +0:45 's' ( uniform structure{ global mediump 4-component vector of float u, global mediump 4-component vector of uint v, global lowp isampler3D sampler, global mediump 3-component vector of float w, global structure{ global mediump int a} t}) +0:45 Constant: +0:45 1 (const int) +0:45 Constant: +0:45 0 (const int) +0:46 'fooBlock' ( temp float) +0:47 Constant: +0:47 0.000000 +0:50 Construct mat4 ( temp 4X4 matrix of float) +0:50 'barBlock' ( temp mediump float) +0:51 Construct mat4 ( temp 4X4 matrix of float) +0:51 'unreferenced' ( temp float) +0:52 's' ( uniform structure{ global mediump 4-component vector of float u, global mediump 4-component vector of uint v, global lowp isampler3D sampler, global mediump 3-component vector of float w, global structure{ global mediump int a} t}) +0:53 'inst' (layout( column_major shared) uniform block{layout( column_major shared) uniform mediump 4-component vector of uint nbv, layout( column_major shared) uniform mediump int ni}) +0:54 Pre-Increment ( temp mediump float) +0:54 'barBlock' ( temp mediump float) +0:55 Constant: +0:55 2 (const int) +0:? Linker Objects +0:? 's' ( uniform structure{ global mediump 4-component vector of float u, global mediump 4-component vector of uint v, global lowp isampler3D sampler, global mediump 3-component vector of float w, global structure{ global mediump int a} t}) +0:? 'anon@0' (layout( column_major shared) uniform block{layout( column_major shared) uniform mediump 4-component vector of uint bv, layout( column_major shared) uniform mediump 2X2 matrix of float bm2, layout( column_major shared) uniform lowp isampler2D sampler, layout( column_major shared) uniform structure{ global mediump int a} t, layout( column_major shared) uniform structure{ global mediump 4-component vector of float u, global mediump 4-component vector of uint v, global lowp isampler3D sampler, global mediump 3-component vector of float w, global structure{ global mediump int a} t} fbs}) +0:? 'inst' (layout( column_major shared) uniform block{layout( column_major shared) uniform mediump 4-component vector of uint nbv, layout( column_major shared) uniform mediump int ni}) +0:? 'insts' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform mediump 4-component vector of uint nbv, layout( column_major shared) uniform mediump int ni}) +0:? 'anon@1' (layout( column_major shared) uniform block{layout( column_major shared) uniform mediump float f, layout( column_major shared) uniform mediump uint u}) + + +Linked fragment stage: + + +Shader version: 300 +ERROR: node is still EOpNull! +0:42 Function Definition: main( ( global void) +0:42 Function Parameters: +0:44 Sequence +0:44 texture ( global lowp 4-component vector of int) +0:44 sampler: direct index for structure ( global lowp isampler3D) +0:44 's' ( uniform structure{ global mediump 4-component vector of float u, global mediump 4-component vector of uint v, global lowp isampler3D sampler, global mediump 3-component vector of float w, global structure{ global mediump int a} t}) +0:44 Constant: +0:44 2 (const int) +0:44 Construct vec3 ( temp lowp 3-component vector of float) +0:44 Convert int to float ( temp lowp float) +0:44 ni: direct index for structure (layout( column_major shared) uniform mediump int) +0:44 'inst' (layout( column_major shared) uniform block{layout( column_major shared) uniform mediump 4-component vector of uint nbv, layout( column_major shared) uniform mediump int ni}) +0:44 Constant: +0:44 1 (const int) +0:44 Convert uint to float ( temp lowp float) +0:44 direct index ( temp mediump uint) +0:44 bv: direct index for structure (layout( column_major shared) uniform mediump 4-component vector of uint) +0:44 'anon@0' (layout( column_major shared) uniform block{layout( column_major shared) uniform mediump 4-component vector of uint bv, layout( column_major shared) uniform mediump 2X2 matrix of float bm2, layout( column_major shared) uniform lowp isampler2D sampler, layout( column_major shared) uniform structure{ global mediump int a} t, layout( column_major shared) uniform structure{ global mediump 4-component vector of float u, global mediump 4-component vector of uint v, global lowp isampler3D sampler, global mediump 3-component vector of float w, global structure{ global mediump int a} t} fbs}) +0:44 Constant: +0:44 0 (const uint) +0:44 Constant: +0:44 1 (const int) +0:44 Convert uint to float ( temp lowp float) +0:44 direct index ( temp mediump uint) +0:44 nbv: direct index for structure (layout( column_major shared) uniform mediump 4-component vector of uint) +0:44 direct index (layout( column_major shared) temp block{layout( column_major shared) uniform mediump 4-component vector of uint nbv, layout( column_major shared) uniform mediump int ni}) +0:44 'insts' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform mediump 4-component vector of uint nbv, layout( column_major shared) uniform mediump int ni}) +0:44 Constant: +0:44 2 (const int) +0:44 Constant: +0:44 0 (const int) +0:44 Constant: +0:44 2 (const int) +0:45 indirect index (layout( column_major shared) temp block{layout( column_major shared) uniform mediump 4-component vector of uint nbv, layout( column_major shared) uniform mediump int ni}) +0:45 'insts' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform mediump 4-component vector of uint nbv, layout( column_major shared) uniform mediump int ni}) +0:45 direct index ( temp mediump uint) +0:45 v: direct index for structure ( global mediump 4-component vector of uint) +0:45 's' ( uniform structure{ global mediump 4-component vector of float u, global mediump 4-component vector of uint v, global lowp isampler3D sampler, global mediump 3-component vector of float w, global structure{ global mediump int a} t}) +0:45 Constant: +0:45 1 (const int) +0:45 Constant: +0:45 0 (const int) +0:46 'fooBlock' ( temp float) +0:47 Constant: +0:47 0.000000 +0:50 Construct mat4 ( temp 4X4 matrix of float) +0:50 'barBlock' ( temp mediump float) +0:51 Construct mat4 ( temp 4X4 matrix of float) +0:51 'unreferenced' ( temp float) +0:52 's' ( uniform structure{ global mediump 4-component vector of float u, global mediump 4-component vector of uint v, global lowp isampler3D sampler, global mediump 3-component vector of float w, global structure{ global mediump int a} t}) +0:53 'inst' (layout( column_major shared) uniform block{layout( column_major shared) uniform mediump 4-component vector of uint nbv, layout( column_major shared) uniform mediump int ni}) +0:54 Pre-Increment ( temp mediump float) +0:54 'barBlock' ( temp mediump float) +0:55 Constant: +0:55 2 (const int) +0:? Linker Objects +0:? 's' ( uniform structure{ global mediump 4-component vector of float u, global mediump 4-component vector of uint v, global lowp isampler3D sampler, global mediump 3-component vector of float w, global structure{ global mediump int a} t}) +0:? 'anon@0' (layout( column_major shared) uniform block{layout( column_major shared) uniform mediump 4-component vector of uint bv, layout( column_major shared) uniform mediump 2X2 matrix of float bm2, layout( column_major shared) uniform lowp isampler2D sampler, layout( column_major shared) uniform structure{ global mediump int a} t, layout( column_major shared) uniform structure{ global mediump 4-component vector of float u, global mediump 4-component vector of uint v, global lowp isampler3D sampler, global mediump 3-component vector of float w, global structure{ global mediump int a} t} fbs}) +0:? 'inst' (layout( column_major shared) uniform block{layout( column_major shared) uniform mediump 4-component vector of uint nbv, layout( column_major shared) uniform mediump int ni}) +0:? 'insts' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform mediump 4-component vector of uint nbv, layout( column_major shared) uniform mediump int ni}) +0:? 'anon@1' (layout( column_major shared) uniform block{layout( column_major shared) uniform mediump float f, layout( column_major shared) uniform mediump uint u}) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300layout.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300layout.frag.out new file mode 100644 index 0000000..3266d9b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300layout.frag.out @@ -0,0 +1,69 @@ +300layout.frag +ERROR: 0:4: 'location qualifier on input' : not supported in this stage: fragment +ERROR: 0:4: 'location qualifier on input' : not supported for this version or the enabled extensions +ERROR: 0:17: 'location' : too large for fragment output +ERROR: 0:18: 'location' : too large for fragment output +ERROR: 0:18: 'location' : overlapping use of location 41 +ERROR: 0:19: 'location' : too large for fragment output +ERROR: 0:19: 'location' : overlapping use of location 40 +ERROR: 7 compilation errors. No code generated. + + +Shader version: 300 +ERROR: node is still EOpNull! +0:10 Function Definition: main( ( global void) +0:10 Function Parameters: +0:12 Sequence +0:12 move second child to first child ( temp mediump 4-component vector of float) +0:12 'c' (layout( location=1) out mediump 4-component vector of float) +0:12 'color' (layout( location=2) smooth in mediump 4-component vector of float) +0:13 move second child to first child ( temp mediump 4-component vector of float) +0:13 'p' (layout( location=3) out mediump 4-component vector of float) +0:13 'pos' ( smooth in mediump 4-component vector of float) +0:14 move second child to first child ( temp mediump 4-component vector of float) +0:14 direct index (layout( location=4) temp mediump 4-component vector of float) +0:14 'q' (layout( location=4) out 2-element array of mediump 4-component vector of float) +0:14 Constant: +0:14 1 (const int) +0:14 'pos' ( smooth in mediump 4-component vector of float) +0:? Linker Objects +0:? 'pos' ( smooth in mediump 4-component vector of float) +0:? 'color' (layout( location=2) smooth in mediump 4-component vector of float) +0:? 'c' (layout( location=1) out mediump 4-component vector of float) +0:? 'p' (layout( location=3) out mediump 4-component vector of float) +0:? 'q' (layout( location=4) out 2-element array of mediump 4-component vector of float) +0:? 'ca' (layout( location=40) out 4-element array of mediump float) +0:? 'cb' (layout( location=41) out 2-element array of mediump float) +0:? 'cc' (layout( location=39) out 6-element array of mediump float) + + +Linked fragment stage: + + +Shader version: 300 +ERROR: node is still EOpNull! +0:10 Function Definition: main( ( global void) +0:10 Function Parameters: +0:12 Sequence +0:12 move second child to first child ( temp mediump 4-component vector of float) +0:12 'c' (layout( location=1) out mediump 4-component vector of float) +0:12 'color' (layout( location=2) smooth in mediump 4-component vector of float) +0:13 move second child to first child ( temp mediump 4-component vector of float) +0:13 'p' (layout( location=3) out mediump 4-component vector of float) +0:13 'pos' ( smooth in mediump 4-component vector of float) +0:14 move second child to first child ( temp mediump 4-component vector of float) +0:14 direct index (layout( location=4) temp mediump 4-component vector of float) +0:14 'q' (layout( location=4) out 2-element array of mediump 4-component vector of float) +0:14 Constant: +0:14 1 (const int) +0:14 'pos' ( smooth in mediump 4-component vector of float) +0:? Linker Objects +0:? 'pos' ( smooth in mediump 4-component vector of float) +0:? 'color' (layout( location=2) smooth in mediump 4-component vector of float) +0:? 'c' (layout( location=1) out mediump 4-component vector of float) +0:? 'p' (layout( location=3) out mediump 4-component vector of float) +0:? 'q' (layout( location=4) out 2-element array of mediump 4-component vector of float) +0:? 'ca' (layout( location=40) out 4-element array of mediump float) +0:? 'cb' (layout( location=41) out 2-element array of mediump float) +0:? 'cc' (layout( location=39) out 6-element array of mediump float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300layout.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300layout.vert.out new file mode 100644 index 0000000..e245cbc --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300layout.vert.out @@ -0,0 +1,147 @@ +300layout.vert +ERROR: 0:7: 'vertex input arrays' : not supported with this profile: es +ERROR: 0:8: 'in' : cannot be a structure or array +ERROR: 0:8: 'vertex input arrays' : not supported with this profile: es +ERROR: 0:8: 'location' : overlapping use of location 10 +ERROR: 0:12: 'layout' : cannot specify matrix layout on a variable declaration +ERROR: 0:12: 'layout' : cannot specify packing on a variable declaration +ERROR: 0:19: 'badf' : member of uniform or buffer block cannot have an auxiliary or interpolation qualifier +ERROR: 0:20: 'badg' : member storage qualifier cannot contradict block storage qualifier +ERROR: 0:21: 'bad1' : member of block cannot have a packing layout qualifier +ERROR: 0:22: 'bad2' : member of block cannot have a packing layout qualifier +ERROR: 0:23: 'bad3' : member of block cannot have a packing layout qualifier +ERROR: 0:31: 'T3' : nameless block contains a member that already has a name at global scope +ERROR: 0:38: 'vertex output block' : not supported for this version or the enabled extensions +ERROR: 0:42: 'location qualifier on output' : not supported in this stage: vertex +ERROR: 0:42: 'location qualifier on output' : not supported for this version or the enabled extensions +ERROR: 0:50: 'shared' : not supported for this version or the enabled extensions +ERROR: 0:50: 'shared' : not supported in this stage: vertex +ERROR: 0:54: 'layout' : cannot specify packing on a variable declaration +ERROR: 0:57: 'location' : overlapping use of location 40 +ERROR: 19 compilation errors. No code generated. + + +Shader version: 300 +ERROR: node is still EOpNull! +0:44 Function Definition: main( ( global void) +0:44 Function Parameters: +0:46 Sequence +0:46 move second child to first child ( temp highp 4-component vector of float) +0:46 'pos' ( smooth out highp 4-component vector of float) +0:46 vector-times-matrix ( temp highp 4-component vector of float) +0:46 'p' (layout( location=3) in highp 4-component vector of float) +0:46 add ( temp highp 4X4 matrix of float) +0:46 add ( temp highp 4X4 matrix of float) +0:46 add ( temp highp 4X4 matrix of float) +0:46 add ( temp highp 4X4 matrix of float) +0:46 M1: direct index for structure (layout( row_major std140 offset=0) uniform highp 4X4 matrix of float) +0:46 'tblock' (layout( row_major std140) uniform block{layout( row_major std140 offset=0) uniform highp 4X4 matrix of float M1, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float M2, layout( row_major std140 offset=128) uniform highp 3X3 matrix of float N1, layout( row_major std140 offset=176) centroid uniform highp float badf, layout( row_major std140 offset=180) uniform highp float badg, layout( row_major std140 offset=184) uniform highp float bad1, layout( row_major shared offset=188) uniform highp float bad2, layout( row_major packed offset=192) uniform highp float bad3}) +0:46 Constant: +0:46 0 (const int) +0:46 M2: direct index for structure (layout( column_major std140 offset=64) uniform highp 4X4 matrix of float) +0:46 'tblock' (layout( row_major std140) uniform block{layout( row_major std140 offset=0) uniform highp 4X4 matrix of float M1, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float M2, layout( row_major std140 offset=128) uniform highp 3X3 matrix of float N1, layout( row_major std140 offset=176) centroid uniform highp float badf, layout( row_major std140 offset=180) uniform highp float badg, layout( row_major std140 offset=184) uniform highp float bad1, layout( row_major shared offset=188) uniform highp float bad2, layout( row_major packed offset=192) uniform highp float bad3}) +0:46 Constant: +0:46 1 (const int) +0:46 M4: direct index for structure (layout( row_major shared) uniform highp 4X4 matrix of float) +0:46 'anon@1' (layout( column_major shared) uniform block{layout( column_major shared) uniform highp 4X4 matrix of float M3, layout( row_major shared) uniform highp 4X4 matrix of float M4, layout( column_major shared) uniform highp 3X3 matrix of float N2, layout( column_major shared) uniform highp int b}) +0:46 Constant: +0:46 1 (const uint) +0:46 M3: direct index for structure (layout( column_major shared) uniform highp 4X4 matrix of float) +0:46 'anon@1' (layout( column_major shared) uniform block{layout( column_major shared) uniform highp 4X4 matrix of float M3, layout( row_major shared) uniform highp 4X4 matrix of float M4, layout( column_major shared) uniform highp 3X3 matrix of float N2, layout( column_major shared) uniform highp int b}) +0:46 Constant: +0:46 0 (const uint) +0:46 t2m: direct index for structure (layout( row_major shared) uniform highp 4X4 matrix of float) +0:46 'anon@0' (layout( row_major shared) uniform block{layout( row_major shared) uniform bool b, layout( row_major shared) uniform highp 4X4 matrix of float t2m}) +0:46 Constant: +0:46 1 (const uint) +0:47 move second child to first child ( temp highp 3-component vector of float) +0:47 'color' ( smooth out highp 3-component vector of float) +0:47 vector-times-matrix ( temp highp 3-component vector of float) +0:47 'c' (layout( location=7) in highp 3-component vector of float) +0:47 N1: direct index for structure (layout( row_major std140 offset=128) uniform highp 3X3 matrix of float) +0:47 'tblock' (layout( row_major std140) uniform block{layout( row_major std140 offset=0) uniform highp 4X4 matrix of float M1, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float M2, layout( row_major std140 offset=128) uniform highp 3X3 matrix of float N1, layout( row_major std140 offset=176) centroid uniform highp float badf, layout( row_major std140 offset=180) uniform highp float badg, layout( row_major std140 offset=184) uniform highp float bad1, layout( row_major shared offset=188) uniform highp float bad2, layout( row_major packed offset=192) uniform highp float bad3}) +0:47 Constant: +0:47 2 (const int) +0:? Linker Objects +0:? 'c' (layout( location=7) in highp 3-component vector of float) +0:? 'p' (layout( location=3) in highp 4-component vector of float) +0:? 'q' (layout( location=9) in 4-element array of highp 4-component vector of float) +0:? 'r' (layout( location=10) in 4-element array of structure{ global highp 4-component vector of float v}) +0:? 'pos' ( smooth out highp 4-component vector of float) +0:? 'color' ( smooth out highp 3-component vector of float) +0:? 'badm4' (layout( column_major shared) uniform highp 4X4 matrix of float) +0:? 'tblock' (layout( row_major std140) uniform block{layout( row_major std140 offset=0) uniform highp 4X4 matrix of float M1, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float M2, layout( row_major std140 offset=128) uniform highp 3X3 matrix of float N1, layout( row_major std140 offset=176) centroid uniform highp float badf, layout( row_major std140 offset=180) uniform highp float badg, layout( row_major std140 offset=184) uniform highp float bad1, layout( row_major shared offset=188) uniform highp float bad2, layout( row_major packed offset=192) uniform highp float bad3}) +0:? 'anon@0' (layout( row_major shared) uniform block{layout( row_major shared) uniform bool b, layout( row_major shared) uniform highp 4X4 matrix of float t2m}) +0:? 'anon@2' ( out block{ out highp float f}) +0:? 'badoutA' (layout( location=10) smooth out highp 4-component vector of float) +0:? 'compute_only' ( shared highp 4-component vector of float) +0:? 'aoeuntaoeu' (layout( packed) uniform highp float) +0:? 'cd' (layout( location=40) in highp float) +0:? 'ce' (layout( location=37) in highp 4X3 matrix of float) +0:? 'gl_VertexID' ( gl_VertexId highp int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId highp int InstanceId) + + +Linked vertex stage: + + +Shader version: 300 +ERROR: node is still EOpNull! +0:44 Function Definition: main( ( global void) +0:44 Function Parameters: +0:46 Sequence +0:46 move second child to first child ( temp highp 4-component vector of float) +0:46 'pos' ( smooth out highp 4-component vector of float) +0:46 vector-times-matrix ( temp highp 4-component vector of float) +0:46 'p' (layout( location=3) in highp 4-component vector of float) +0:46 add ( temp highp 4X4 matrix of float) +0:46 add ( temp highp 4X4 matrix of float) +0:46 add ( temp highp 4X4 matrix of float) +0:46 add ( temp highp 4X4 matrix of float) +0:46 M1: direct index for structure (layout( row_major std140 offset=0) uniform highp 4X4 matrix of float) +0:46 'tblock' (layout( row_major std140) uniform block{layout( row_major std140 offset=0) uniform highp 4X4 matrix of float M1, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float M2, layout( row_major std140 offset=128) uniform highp 3X3 matrix of float N1, layout( row_major std140 offset=176) centroid uniform highp float badf, layout( row_major std140 offset=180) uniform highp float badg, layout( row_major std140 offset=184) uniform highp float bad1, layout( row_major shared offset=188) uniform highp float bad2, layout( row_major packed offset=192) uniform highp float bad3}) +0:46 Constant: +0:46 0 (const int) +0:46 M2: direct index for structure (layout( column_major std140 offset=64) uniform highp 4X4 matrix of float) +0:46 'tblock' (layout( row_major std140) uniform block{layout( row_major std140 offset=0) uniform highp 4X4 matrix of float M1, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float M2, layout( row_major std140 offset=128) uniform highp 3X3 matrix of float N1, layout( row_major std140 offset=176) centroid uniform highp float badf, layout( row_major std140 offset=180) uniform highp float badg, layout( row_major std140 offset=184) uniform highp float bad1, layout( row_major shared offset=188) uniform highp float bad2, layout( row_major packed offset=192) uniform highp float bad3}) +0:46 Constant: +0:46 1 (const int) +0:46 M4: direct index for structure (layout( row_major shared) uniform highp 4X4 matrix of float) +0:46 'anon@1' (layout( column_major shared) uniform block{layout( column_major shared) uniform highp 4X4 matrix of float M3, layout( row_major shared) uniform highp 4X4 matrix of float M4, layout( column_major shared) uniform highp 3X3 matrix of float N2, layout( column_major shared) uniform highp int b}) +0:46 Constant: +0:46 1 (const uint) +0:46 M3: direct index for structure (layout( column_major shared) uniform highp 4X4 matrix of float) +0:46 'anon@1' (layout( column_major shared) uniform block{layout( column_major shared) uniform highp 4X4 matrix of float M3, layout( row_major shared) uniform highp 4X4 matrix of float M4, layout( column_major shared) uniform highp 3X3 matrix of float N2, layout( column_major shared) uniform highp int b}) +0:46 Constant: +0:46 0 (const uint) +0:46 t2m: direct index for structure (layout( row_major shared) uniform highp 4X4 matrix of float) +0:46 'anon@0' (layout( row_major shared) uniform block{layout( row_major shared) uniform bool b, layout( row_major shared) uniform highp 4X4 matrix of float t2m}) +0:46 Constant: +0:46 1 (const uint) +0:47 move second child to first child ( temp highp 3-component vector of float) +0:47 'color' ( smooth out highp 3-component vector of float) +0:47 vector-times-matrix ( temp highp 3-component vector of float) +0:47 'c' (layout( location=7) in highp 3-component vector of float) +0:47 N1: direct index for structure (layout( row_major std140 offset=128) uniform highp 3X3 matrix of float) +0:47 'tblock' (layout( row_major std140) uniform block{layout( row_major std140 offset=0) uniform highp 4X4 matrix of float M1, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float M2, layout( row_major std140 offset=128) uniform highp 3X3 matrix of float N1, layout( row_major std140 offset=176) centroid uniform highp float badf, layout( row_major std140 offset=180) uniform highp float badg, layout( row_major std140 offset=184) uniform highp float bad1, layout( row_major shared offset=188) uniform highp float bad2, layout( row_major packed offset=192) uniform highp float bad3}) +0:47 Constant: +0:47 2 (const int) +0:? Linker Objects +0:? 'c' (layout( location=7) in highp 3-component vector of float) +0:? 'p' (layout( location=3) in highp 4-component vector of float) +0:? 'q' (layout( location=9) in 4-element array of highp 4-component vector of float) +0:? 'r' (layout( location=10) in 4-element array of structure{ global highp 4-component vector of float v}) +0:? 'pos' ( smooth out highp 4-component vector of float) +0:? 'color' ( smooth out highp 3-component vector of float) +0:? 'badm4' (layout( column_major shared) uniform highp 4X4 matrix of float) +0:? 'tblock' (layout( row_major std140) uniform block{layout( row_major std140 offset=0) uniform highp 4X4 matrix of float M1, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float M2, layout( row_major std140 offset=128) uniform highp 3X3 matrix of float N1, layout( row_major std140 offset=176) centroid uniform highp float badf, layout( row_major std140 offset=180) uniform highp float badg, layout( row_major std140 offset=184) uniform highp float bad1, layout( row_major shared offset=188) uniform highp float bad2, layout( row_major packed offset=192) uniform highp float bad3}) +0:? 'anon@0' (layout( row_major shared) uniform block{layout( row_major shared) uniform bool b, layout( row_major shared) uniform highp 4X4 matrix of float t2m}) +0:? 'anon@2' ( out block{ out highp float f}) +0:? 'badoutA' (layout( location=10) smooth out highp 4-component vector of float) +0:? 'compute_only' ( shared highp 4-component vector of float) +0:? 'aoeuntaoeu' (layout( packed) uniform highp float) +0:? 'cd' (layout( location=40) in highp float) +0:? 'ce' (layout( location=37) in highp 4X3 matrix 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/300link.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300link.frag.out new file mode 100644 index 0000000..dc54e76 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300link.frag.out @@ -0,0 +1,22 @@ +300link.frag +Shader version: 300 +0:? Sequence +0:8 Function Definition: main( ( global void) +0:8 Function Parameters: +0:? Linker Objects +0:? 'color1' ( out highp 4-component vector of float) +0:? 'color2' ( out highp 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: 300 +0:? Sequence +0:8 Function Definition: main( ( global void) +0:8 Function Parameters: +0:? Linker Objects +0:? 'color1' ( out highp 4-component vector of float) +0:? 'color2' ( out highp 4-component vector of float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300link2.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300link2.frag.out new file mode 100644 index 0000000..6bbb287 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300link2.frag.out @@ -0,0 +1,25 @@ +300link2.frag +Shader version: 300 +0:? Sequence +0:9 Function Definition: main( ( global void) +0:9 Function Parameters: +0:? Linker Objects +0:? 'pos' ( smooth in mediump 4-component vector of float) +0:? 'c' (layout( location=1) out mediump 4-component vector of float) +0:? 'p' (layout( location=5) out mediump 4-component vector of float) +0:? 'q' (layout( location=9) out 2-element array of mediump 4-component vector of float) + + +Linked fragment stage: + + +Shader version: 300 +0:? Sequence +0:9 Function Definition: main( ( global void) +0:9 Function Parameters: +0:? Linker Objects +0:? 'pos' ( smooth in mediump 4-component vector of float) +0:? 'c' (layout( location=1) out mediump 4-component vector of float) +0:? 'p' (layout( location=5) out mediump 4-component vector of float) +0:? 'q' (layout( location=9) out 2-element array of mediump 4-component vector of float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300link3.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300link3.frag.out new file mode 100644 index 0000000..e6114c5 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300link3.frag.out @@ -0,0 +1,19 @@ +300link3.frag +Shader version: 300 +0:? Sequence +0:7 Function Definition: main( ( global void) +0:7 Function Parameters: +0:? Linker Objects +0:? 'color1' ( out highp 4-component vector of float) + + +Linked fragment stage: + + +Shader version: 300 +0:? Sequence +0:7 Function Definition: main( ( global void) +0:7 Function Parameters: +0:? Linker Objects +0:? 'color1' ( out highp 4-component vector of float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300operations.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300operations.frag.out new file mode 100644 index 0000000..27772cb --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300operations.frag.out @@ -0,0 +1,420 @@ +300operations.frag +ERROR: 0:11: 'float' : type requires declaration of default precision qualifier +ERROR: 0:30: '+' : wrong operand types: no operation '+' exists that takes a left-hand operand of type 'layout( column_major shared) uniform block{layout( column_major shared) uniform mediump float f}' and a right operand of type 'layout( column_major shared) uniform block{layout( column_major shared) uniform mediump float f}' (or there is no acceptable conversion) +ERROR: 0:31: '+' : wrong operand types: no operation '+' exists that takes a left-hand operand of type ' global structure{ global mediump int i}' and a right operand of type ' global structure{ global mediump int i}' (or there is no acceptable conversion) +ERROR: 0:32: '+' : wrong operand types: no operation '+' exists that takes a left-hand operand of type ' temp mediump int' and a right operand of type ' temp mediump float' (or there is no acceptable conversion) +ERROR: 0:33: '+' : wrong operand types: no operation '+' exists that takes a left-hand operand of type ' temp mediump uint' and a right operand of type ' temp mediump float' (or there is no acceptable conversion) +ERROR: 0:34: '+' : wrong operand types: no operation '+' exists that takes a left-hand operand of type ' temp mediump uint' and a right operand of type ' temp mediump int' (or there is no acceptable conversion) +ERROR: 0:35: 'assign' : cannot convert from ' temp mediump 4-component vector of int' to ' temp mediump 3-component vector of int' +ERROR: 0:36: '/' : wrong operand types: no operation '/' exists that takes a left-hand operand of type ' temp mediump 4-component vector of int' and a right operand of type ' temp mediump 4-component vector of uint' (or there is no acceptable conversion) +ERROR: 0:37: '-' : wrong operand types: no operation '-' exists that takes a left-hand operand of type ' temp mediump int' and a right operand of type ' temp mediump 3-component vector of float' (or there is no acceptable conversion) +ERROR: 0:38: '+' : wrong operand types: no operation '+' exists that takes a left-hand operand of type ' temp mediump 3-component vector of int' and a right operand of type ' temp mediump 3-component vector of uint' (or there is no acceptable conversion) +ERROR: 0:39: '*' : wrong operand types: no operation '*' exists that takes a left-hand operand of type ' global 5-element array of mediump float' and a right operand of type ' global 5-element array of mediump float' (or there is no acceptable conversion) +ERROR: 0:40: '/' : wrong operand types: no operation '/' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion) +ERROR: 0:42: '%' : wrong operand types: no operation '%' exists that takes a left-hand operand of type ' temp mediump float' and a right operand of type ' temp mediump float' (or there is no acceptable conversion) +ERROR: 0:43: '%' : wrong operand types: no operation '%' exists that takes a left-hand operand of type ' temp mediump int' and a right operand of type ' temp mediump float' (or there is no acceptable conversion) +ERROR: 0:44: '%' : wrong operand types: no operation '%' exists that takes a left-hand operand of type ' temp mediump float' and a right operand of type ' temp mediump uint' (or there is no acceptable conversion) +ERROR: 0:45: '++' : l-value required "instanceName" (can't modify a uniform) +ERROR: 0:45: '++' : wrong operand type no operation '++' exists that takes an operand of type layout( column_major shared) uniform block{layout( column_major shared) uniform mediump float f} (or there is no acceptable conversion) +ERROR: 0:46: '++' : wrong operand type no operation '++' exists that takes an operand of type global structure{ global mediump int i} (or there is no acceptable conversion) +ERROR: 0:47: '--' : wrong operand type no operation '--' exists that takes an operand of type global 5-element array of mediump float (or there is no acceptable conversion) +ERROR: 0:48: '++' : wrong operand type no operation '++' exists that takes an operand of type temp 3-component vector of bool (or there is no acceptable conversion) +ERROR: 0:50: '<' : wrong operand types: no operation '<' exists that takes a left-hand operand of type ' temp mediump 3-component vector of int' and a right operand of type ' temp mediump 3-component vector of uint' (or there is no acceptable conversion) +ERROR: 0:51: '>' : wrong operand types: no operation '>' exists that takes a left-hand operand of type ' temp mediump 2X2 matrix of float' and a right operand of type ' temp mediump 2X2 matrix of float' (or there is no acceptable conversion) +ERROR: 0:52: '!=' : wrong operand types: no operation '!=' exists that takes a left-hand operand of type ' temp mediump 2X2 matrix of float' and a right operand of type ' temp mediump 4X4 matrix of float' (or there is no acceptable conversion) +ERROR: 0:53: '>=' : wrong operand types: no operation '>=' exists that takes a left-hand operand of type ' temp mediump int' and a right operand of type ' temp mediump uint' (or there is no acceptable conversion) +ERROR: 0:54: '<=' : wrong operand types: no operation '<=' exists that takes a left-hand operand of type ' global 5-element array of mediump float' and a right operand of type ' global 5-element array of mediump float' (or there is no acceptable conversion) +ERROR: 0:55: '>' : wrong operand types: no operation '>' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion) +ERROR: 0:57: '&&' : wrong operand types: no operation '&&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp 3-component vector of bool' (or there is no acceptable conversion) +ERROR: 0:58: '^^' : wrong operand types: no operation '^^' exists that takes a left-hand operand of type ' temp 3-component vector of bool' and a right operand of type ' temp 3-component vector of bool' (or there is no acceptable conversion) +ERROR: 0:59: '||' : wrong operand types: no operation '||' exists that takes a left-hand operand of type ' temp 3-component vector of bool' and a right operand of type ' temp bool' (or there is no acceptable conversion) +ERROR: 0:60: '&&' : wrong operand types: no operation '&&' exists that takes a left-hand operand of type ' temp mediump int' and a right operand of type ' temp mediump int' (or there is no acceptable conversion) +ERROR: 0:61: '||' : wrong operand types: no operation '||' exists that takes a left-hand operand of type ' temp mediump uint' and a right operand of type ' temp mediump uint' (or there is no acceptable conversion) +ERROR: 0:62: '^^' : wrong operand types: no operation '^^' exists that takes a left-hand operand of type ' temp mediump 2X2 matrix of float' and a right operand of type ' temp mediump 2X2 matrix of float' (or there is no acceptable conversion) +ERROR: 0:64: '!' : wrong operand type no operation '!' exists that takes an operand of type temp mediump uint (or there is no acceptable conversion) +ERROR: 0:65: '!' : wrong operand type no operation '!' exists that takes an operand of type temp mediump int (or there is no acceptable conversion) +ERROR: 0:66: '!' : wrong operand type no operation '!' exists that takes an operand of type temp mediump 2X2 matrix of float (or there is no acceptable conversion) +ERROR: 0:67: '!' : wrong operand type no operation '!' exists that takes an operand of type temp mediump 3-component vector of float (or there is no acceptable conversion) +ERROR: 0:68: '!' : wrong operand type no operation '!' exists that takes an operand of type global 5-element array of mediump float (or there is no acceptable conversion) +ERROR: 0:70: '~' : wrong operand type no operation '~' exists that takes an operand of type temp mediump float (or there is no acceptable conversion) +ERROR: 0:71: '~' : wrong operand type no operation '~' exists that takes an operand of type temp mediump 4X4 matrix of float (or there is no acceptable conversion) +ERROR: 0:72: '~' : wrong operand type no operation '~' exists that takes an operand of type temp mediump 3-component vector of float (or there is no acceptable conversion) +ERROR: 0:73: '~' : wrong operand type no operation '~' exists that takes an operand of type global 5-element array of mediump float (or there is no acceptable conversion) +ERROR: 0:74: '~' : wrong operand type no operation '~' exists that takes an operand of type layout( column_major shared) uniform block{layout( column_major shared) uniform mediump float f} (or there is no acceptable conversion) +ERROR: 0:76: '<<' : wrong operand types: no operation '<<' exists that takes a left-hand operand of type ' temp mediump int' and a right operand of type ' temp mediump 3-component vector of int' (or there is no acceptable conversion) +ERROR: 0:77: '<<' : wrong operand types: no operation '<<' exists that takes a left-hand operand of type ' temp mediump uint' and a right operand of type ' temp mediump 3-component vector of uint' (or there is no acceptable conversion) +ERROR: 0:78: '>>' : wrong operand types: no operation '>>' exists that takes a left-hand operand of type ' temp mediump int' and a right operand of type ' temp mediump float' (or there is no acceptable conversion) +ERROR: 0:79: '>>' : wrong operand types: no operation '>>' exists that takes a left-hand operand of type ' temp mediump float' and a right operand of type ' temp mediump int' (or there is no acceptable conversion) +ERROR: 0:80: '>>' : wrong operand types: no operation '>>' exists that takes a left-hand operand of type ' temp mediump 4X4 matrix of float' and a right operand of type ' temp mediump int' (or there is no acceptable conversion) +ERROR: 0:81: '>>' : wrong operand types: no operation '>>' exists that takes a left-hand operand of type ' global 5-element array of mediump float' and a right operand of type ' temp mediump uint' (or there is no acceptable conversion) +ERROR: 0:82: '>>' : wrong operand types: no operation '>>' exists that takes a left-hand operand of type ' temp mediump 3-component vector of int' and a right operand of type ' temp mediump 4-component vector of int' (or there is no acceptable conversion) +ERROR: 0:84: '&' : wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp mediump int' and a right operand of type ' temp mediump uint' (or there is no acceptable conversion) +ERROR: 0:85: 'assign' : cannot convert from ' temp mediump 3-component vector of uint' to ' temp mediump uint' +ERROR: 0:86: '|' : wrong operand types: no operation '|' exists that takes a left-hand operand of type ' temp mediump int' and a right operand of type ' temp mediump 3-component vector of uint' (or there is no acceptable conversion) +ERROR: 0:87: '&' : wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp mediump uint' and a right operand of type ' temp mediump float' (or there is no acceptable conversion) +ERROR: 0:88: '|' : wrong operand types: no operation '|' exists that takes a left-hand operand of type ' temp mediump 2X2 matrix of float' and a right operand of type ' temp mediump 2X2 matrix of float' (or there is no acceptable conversion) +ERROR: 0:89: '^' : wrong operand types: no operation '^' exists that takes a left-hand operand of type ' global structure{ global mediump int i}' and a right operand of type ' global structure{ global mediump int i}' (or there is no acceptable conversion) +ERROR: 0:90: 'assign' : l-value required +ERROR: 56 compilation errors. No code generated. + + +Shader version: 300 +ERROR: node is still EOpNull! +0:13 Function Definition: main( ( global void) +0:13 Function Parameters: +0:? Sequence +0:30 'instanceName' (layout( column_major shared) uniform block{layout( column_major shared) uniform mediump float f}) +0:31 's' ( global structure{ global mediump int i}) +0:32 'i' ( temp mediump int) +0:33 'u' ( temp mediump uint) +0:34 'u' ( temp mediump uint) +0:35 'iv3' ( temp mediump 3-component vector of int) +0:36 'iv4' ( temp mediump 4-component vector of int) +0:37 'i' ( temp mediump int) +0:38 'iv3' ( temp mediump 3-component vector of int) +0:39 'a' ( global 5-element array of mediump float) +0:40 'b' ( temp bool) +0:42 'f' ( temp mediump float) +0:43 'i' ( temp mediump int) +0:44 'f' ( temp mediump float) +0:45 'instanceName' (layout( column_major shared) uniform block{layout( column_major shared) uniform mediump float f}) +0:46 's' ( global structure{ global mediump int i}) +0:47 'a' ( global 5-element array of mediump float) +0:48 'b3' ( temp 3-component vector of bool) +0:50 Constant: +0:50 false (const bool) +0:51 Constant: +0:51 false (const bool) +0:52 Constant: +0:52 false (const bool) +0:53 Constant: +0:53 false (const bool) +0:54 Constant: +0:54 false (const bool) +0:55 Constant: +0:55 false (const bool) +0:57 Constant: +0:57 false (const bool) +0:58 Constant: +0:58 false (const bool) +0:59 Constant: +0:59 false (const bool) +0:60 Constant: +0:60 false (const bool) +0:61 Constant: +0:61 false (const bool) +0:62 Constant: +0:62 false (const bool) +0:64 'u' ( temp mediump uint) +0:65 'i' ( temp mediump int) +0:66 'm2' ( temp mediump 2X2 matrix of float) +0:67 'v3' ( temp mediump 3-component vector of float) +0:68 'a' ( global 5-element array of mediump float) +0:70 'f' ( temp mediump float) +0:71 'm4' ( temp mediump 4X4 matrix of float) +0:72 'v3' ( temp mediump 3-component vector of float) +0:73 'a' ( global 5-element array of mediump float) +0:74 'instanceName' (layout( column_major shared) uniform block{layout( column_major shared) uniform mediump float f}) +0:76 'i' ( temp mediump int) +0:77 'u' ( temp mediump uint) +0:78 'i' ( temp mediump int) +0:79 'f' ( temp mediump float) +0:80 'm4' ( temp mediump 4X4 matrix of float) +0:81 'a' ( global 5-element array of mediump float) +0:82 'iv3' ( temp mediump 3-component vector of int) +0:84 'i' ( temp mediump int) +0:85 'u' ( temp mediump uint) +0:86 'i' ( temp mediump int) +0:87 'u' ( temp mediump uint) +0:88 'm2' ( temp mediump 2X2 matrix of float) +0:89 's' ( global structure{ global mediump int i}) +0:90 move second child to first child ( temp mediump float) +0:90 move second child to first child ( temp mediump float) +0:90 'f' ( temp mediump float) +0:90 'f' ( temp mediump float) +0:90 'f' ( temp mediump float) +0:93 vector-scale ( temp mediump 4-component vector of float) +0:93 'f' ( temp mediump float) +0:93 'v4' ( temp mediump 4-component vector of float) +0:94 add ( temp mediump uint) +0:94 'u' ( temp mediump uint) +0:94 'u' ( temp mediump uint) +0:95 divide ( temp mediump 4-component vector of uint) +0:95 'uv4' ( temp mediump 4-component vector of uint) +0:95 'u' ( temp mediump uint) +0:96 subtract second child into first child ( temp mediump 3-component vector of int) +0:96 'iv3' ( temp mediump 3-component vector of int) +0:96 'iv3' ( temp mediump 3-component vector of int) +0:98 mod second child into first child ( temp mediump int) +0:98 'i' ( temp mediump int) +0:98 Constant: +0:98 3 (const int) +0:99 mod ( temp mediump 3-component vector of uint) +0:99 'uv3' ( temp mediump 3-component vector of uint) +0:99 Constant: +0:99 4 (const uint) +0:100 Pre-Decrement ( temp mediump 2X2 matrix of float) +0:100 'm2' ( temp mediump 2X2 matrix of float) +0:101 Post-Increment ( temp mediump 4-component vector of int) +0:101 'iv4' ( temp mediump 4-component vector of int) +0:103 Compare Not Equal ( temp bool) +0:103 'm4' ( temp mediump 4X4 matrix of float) +0:103 'm4' ( temp mediump 4X4 matrix of float) +0:104 Compare Equal ( temp bool) +0:104 'm2' ( temp mediump 2X2 matrix of float) +0:104 'm2' ( temp mediump 2X2 matrix of float) +0:105 Compare Less Than or Equal ( temp bool) +0:105 'i' ( temp mediump int) +0:105 'i' ( temp mediump int) +0:106 Compare Equal ( temp bool) +0:106 'a' ( global 5-element array of mediump float) +0:106 'a' ( global 5-element array of mediump float) +0:107 Compare Not Equal ( temp bool) +0:107 's' ( global structure{ global mediump int i}) +0:107 's' ( global structure{ global mediump int i}) +0:109 logical-and ( temp bool) +0:109 'b' ( temp bool) +0:109 'b' ( temp bool) +0:110 logical-or ( temp bool) +0:110 'b' ( temp bool) +0:110 'b' ( temp bool) +0:111 logical-xor ( temp bool) +0:111 'b' ( temp bool) +0:111 'b' ( temp bool) +0:113 Comma ( temp mediump 3-component vector of uint) +0:113 Negate conditional ( temp bool) +0:113 'b' ( temp bool) +0:113 'uv3' ( temp mediump 3-component vector of uint) +0:115 Bitwise not ( temp mediump int) +0:115 'i' ( temp mediump int) +0:116 Bitwise not ( temp mediump uint) +0:116 'u' ( temp mediump uint) +0:117 Bitwise not ( temp mediump 3-component vector of uint) +0:117 'uv3' ( temp mediump 3-component vector of uint) +0:118 Bitwise not ( temp mediump 3-component vector of int) +0:118 'iv3' ( temp mediump 3-component vector of int) +0:120 left shift second child into first child ( temp mediump 3-component vector of uint) +0:120 'uv3' ( temp mediump 3-component vector of uint) +0:120 'i' ( temp mediump int) +0:121 right-shift ( temp mediump int) +0:121 'i' ( temp mediump int) +0:121 'i' ( temp mediump int) +0:122 left-shift ( temp mediump uint) +0:122 'u' ( temp mediump uint) +0:122 'u' ( temp mediump uint) +0:123 right-shift ( temp mediump 3-component vector of int) +0:123 'iv3' ( temp mediump 3-component vector of int) +0:123 'iv3' ( temp mediump 3-component vector of int) +0:125 bitwise and ( temp mediump int) +0:125 'i' ( temp mediump int) +0:125 'i' ( temp mediump int) +0:126 inclusive-or ( temp mediump uint) +0:126 'u' ( temp mediump uint) +0:126 'u' ( temp mediump uint) +0:127 exclusive-or ( temp mediump 3-component vector of int) +0:127 'iv3' ( temp mediump 3-component vector of int) +0:127 'iv3' ( temp mediump 3-component vector of int) +0:128 bitwise and ( temp mediump 3-component vector of uint) +0:128 'u' ( temp mediump uint) +0:128 'uv3' ( temp mediump 3-component vector of uint) +0:129 inclusive-or ( temp mediump 3-component vector of uint) +0:129 'uv3' ( temp mediump 3-component vector of uint) +0:129 'u' ( temp mediump uint) +0:130 and second child into first child ( temp mediump 3-component vector of uint) +0:130 'uv3' ( temp mediump 3-component vector of uint) +0:130 'u' ( temp mediump uint) +0:132 direct index ( temp mediump int) +0:132 'arr' ( temp 2-element array of mediump int) +0:132 Constant: +0:132 1 (const int) +0:134 direct index ( temp mediump int) +0:134 'arr2' ( temp 3-element array of mediump int) +0:134 Constant: +0:134 2 (const int) +0:? Linker Objects +0:? 'instanceName' (layout( column_major shared) uniform block{layout( column_major shared) uniform mediump float f}) +0:? 's' ( global structure{ global mediump int i}) +0:? 'a' ( global 5-element array of mediump float) + + +Linked fragment stage: + + +Shader version: 300 +ERROR: node is still EOpNull! +0:13 Function Definition: main( ( global void) +0:13 Function Parameters: +0:? Sequence +0:30 'instanceName' (layout( column_major shared) uniform block{layout( column_major shared) uniform mediump float f}) +0:31 's' ( global structure{ global mediump int i}) +0:32 'i' ( temp mediump int) +0:33 'u' ( temp mediump uint) +0:34 'u' ( temp mediump uint) +0:35 'iv3' ( temp mediump 3-component vector of int) +0:36 'iv4' ( temp mediump 4-component vector of int) +0:37 'i' ( temp mediump int) +0:38 'iv3' ( temp mediump 3-component vector of int) +0:39 'a' ( global 5-element array of mediump float) +0:40 'b' ( temp bool) +0:42 'f' ( temp mediump float) +0:43 'i' ( temp mediump int) +0:44 'f' ( temp mediump float) +0:45 'instanceName' (layout( column_major shared) uniform block{layout( column_major shared) uniform mediump float f}) +0:46 's' ( global structure{ global mediump int i}) +0:47 'a' ( global 5-element array of mediump float) +0:48 'b3' ( temp 3-component vector of bool) +0:50 Constant: +0:50 false (const bool) +0:51 Constant: +0:51 false (const bool) +0:52 Constant: +0:52 false (const bool) +0:53 Constant: +0:53 false (const bool) +0:54 Constant: +0:54 false (const bool) +0:55 Constant: +0:55 false (const bool) +0:57 Constant: +0:57 false (const bool) +0:58 Constant: +0:58 false (const bool) +0:59 Constant: +0:59 false (const bool) +0:60 Constant: +0:60 false (const bool) +0:61 Constant: +0:61 false (const bool) +0:62 Constant: +0:62 false (const bool) +0:64 'u' ( temp mediump uint) +0:65 'i' ( temp mediump int) +0:66 'm2' ( temp mediump 2X2 matrix of float) +0:67 'v3' ( temp mediump 3-component vector of float) +0:68 'a' ( global 5-element array of mediump float) +0:70 'f' ( temp mediump float) +0:71 'm4' ( temp mediump 4X4 matrix of float) +0:72 'v3' ( temp mediump 3-component vector of float) +0:73 'a' ( global 5-element array of mediump float) +0:74 'instanceName' (layout( column_major shared) uniform block{layout( column_major shared) uniform mediump float f}) +0:76 'i' ( temp mediump int) +0:77 'u' ( temp mediump uint) +0:78 'i' ( temp mediump int) +0:79 'f' ( temp mediump float) +0:80 'm4' ( temp mediump 4X4 matrix of float) +0:81 'a' ( global 5-element array of mediump float) +0:82 'iv3' ( temp mediump 3-component vector of int) +0:84 'i' ( temp mediump int) +0:85 'u' ( temp mediump uint) +0:86 'i' ( temp mediump int) +0:87 'u' ( temp mediump uint) +0:88 'm2' ( temp mediump 2X2 matrix of float) +0:89 's' ( global structure{ global mediump int i}) +0:90 move second child to first child ( temp mediump float) +0:90 move second child to first child ( temp mediump float) +0:90 'f' ( temp mediump float) +0:90 'f' ( temp mediump float) +0:90 'f' ( temp mediump float) +0:93 vector-scale ( temp mediump 4-component vector of float) +0:93 'f' ( temp mediump float) +0:93 'v4' ( temp mediump 4-component vector of float) +0:94 add ( temp mediump uint) +0:94 'u' ( temp mediump uint) +0:94 'u' ( temp mediump uint) +0:95 divide ( temp mediump 4-component vector of uint) +0:95 'uv4' ( temp mediump 4-component vector of uint) +0:95 'u' ( temp mediump uint) +0:96 subtract second child into first child ( temp mediump 3-component vector of int) +0:96 'iv3' ( temp mediump 3-component vector of int) +0:96 'iv3' ( temp mediump 3-component vector of int) +0:98 mod second child into first child ( temp mediump int) +0:98 'i' ( temp mediump int) +0:98 Constant: +0:98 3 (const int) +0:99 mod ( temp mediump 3-component vector of uint) +0:99 'uv3' ( temp mediump 3-component vector of uint) +0:99 Constant: +0:99 4 (const uint) +0:100 Pre-Decrement ( temp mediump 2X2 matrix of float) +0:100 'm2' ( temp mediump 2X2 matrix of float) +0:101 Post-Increment ( temp mediump 4-component vector of int) +0:101 'iv4' ( temp mediump 4-component vector of int) +0:103 Compare Not Equal ( temp bool) +0:103 'm4' ( temp mediump 4X4 matrix of float) +0:103 'm4' ( temp mediump 4X4 matrix of float) +0:104 Compare Equal ( temp bool) +0:104 'm2' ( temp mediump 2X2 matrix of float) +0:104 'm2' ( temp mediump 2X2 matrix of float) +0:105 Compare Less Than or Equal ( temp bool) +0:105 'i' ( temp mediump int) +0:105 'i' ( temp mediump int) +0:106 Compare Equal ( temp bool) +0:106 'a' ( global 5-element array of mediump float) +0:106 'a' ( global 5-element array of mediump float) +0:107 Compare Not Equal ( temp bool) +0:107 's' ( global structure{ global mediump int i}) +0:107 's' ( global structure{ global mediump int i}) +0:109 logical-and ( temp bool) +0:109 'b' ( temp bool) +0:109 'b' ( temp bool) +0:110 logical-or ( temp bool) +0:110 'b' ( temp bool) +0:110 'b' ( temp bool) +0:111 logical-xor ( temp bool) +0:111 'b' ( temp bool) +0:111 'b' ( temp bool) +0:113 Comma ( temp mediump 3-component vector of uint) +0:113 Negate conditional ( temp bool) +0:113 'b' ( temp bool) +0:113 'uv3' ( temp mediump 3-component vector of uint) +0:115 Bitwise not ( temp mediump int) +0:115 'i' ( temp mediump int) +0:116 Bitwise not ( temp mediump uint) +0:116 'u' ( temp mediump uint) +0:117 Bitwise not ( temp mediump 3-component vector of uint) +0:117 'uv3' ( temp mediump 3-component vector of uint) +0:118 Bitwise not ( temp mediump 3-component vector of int) +0:118 'iv3' ( temp mediump 3-component vector of int) +0:120 left shift second child into first child ( temp mediump 3-component vector of uint) +0:120 'uv3' ( temp mediump 3-component vector of uint) +0:120 'i' ( temp mediump int) +0:121 right-shift ( temp mediump int) +0:121 'i' ( temp mediump int) +0:121 'i' ( temp mediump int) +0:122 left-shift ( temp mediump uint) +0:122 'u' ( temp mediump uint) +0:122 'u' ( temp mediump uint) +0:123 right-shift ( temp mediump 3-component vector of int) +0:123 'iv3' ( temp mediump 3-component vector of int) +0:123 'iv3' ( temp mediump 3-component vector of int) +0:125 bitwise and ( temp mediump int) +0:125 'i' ( temp mediump int) +0:125 'i' ( temp mediump int) +0:126 inclusive-or ( temp mediump uint) +0:126 'u' ( temp mediump uint) +0:126 'u' ( temp mediump uint) +0:127 exclusive-or ( temp mediump 3-component vector of int) +0:127 'iv3' ( temp mediump 3-component vector of int) +0:127 'iv3' ( temp mediump 3-component vector of int) +0:128 bitwise and ( temp mediump 3-component vector of uint) +0:128 'u' ( temp mediump uint) +0:128 'uv3' ( temp mediump 3-component vector of uint) +0:129 inclusive-or ( temp mediump 3-component vector of uint) +0:129 'uv3' ( temp mediump 3-component vector of uint) +0:129 'u' ( temp mediump uint) +0:130 and second child into first child ( temp mediump 3-component vector of uint) +0:130 'uv3' ( temp mediump 3-component vector of uint) +0:130 'u' ( temp mediump uint) +0:132 direct index ( temp mediump int) +0:132 'arr' ( temp 2-element array of mediump int) +0:132 Constant: +0:132 1 (const int) +0:134 direct index ( temp mediump int) +0:134 'arr2' ( temp 3-element array of mediump int) +0:134 Constant: +0:134 2 (const int) +0:? Linker Objects +0:? 'instanceName' (layout( column_major shared) uniform block{layout( column_major shared) uniform mediump float f}) +0:? 's' ( global structure{ global mediump int i}) +0:? 'a' ( global 5-element array of mediump float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300scope.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300scope.vert.out new file mode 100644 index 0000000..5a12020 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300scope.vert.out @@ -0,0 +1,231 @@ +300scope.vert +ERROR: 0:5: 'a' : redefinition +ERROR: 0:17: 'b' : function name is redeclaration of existing name +ERROR: 0:20: 'c' : redefinition +ERROR: 0:22: 'f' : redefinition +ERROR: 0:23: 'tan' : redefinition +ERROR: 0:24: 'redefinition of built-in function' : not supported with this profile: es +ERROR: 0:24: 'highp' : overloaded functions must have the same parameter precision qualifiers for argument 1 +ERROR: 0:24: 'sin' : function name is redeclaration of existing name +ERROR: 0:25: 'redefinition of built-in function' : not supported with this profile: es +ERROR: 0:25: 'highp' : overloaded functions must have the same parameter precision qualifiers for argument 1 +ERROR: 0:25: 'cos' : function name is redeclaration of existing name +ERROR: 0:25: 'cos' : function already has a body +ERROR: 0:27: 'return' : void function cannot return a value +ERROR: 0:29: 'radians' : function name is redeclaration of existing name +ERROR: 0:29: 'radians' : can't find function +ERROR: 0:31: 'return' : void function cannot return a value +ERROR: 0:38: 'local function declaration' : not supported with this profile: es +ERROR: 0:43: 'sin' : can't use function syntax on variable +ERROR: 0:57: 'z' : undeclared identifier +ERROR: 0:57: 'z' : redefinition +ERROR: 0:73: 'degrees' : can't use function syntax on variable +ERROR: 21 compilation errors. No code generated. + + +Shader version: 300 +ERROR: node is still EOpNull! +0:3 Function Definition: f(i1;i1;i1; ( global highp int) +0:3 Function Parameters: +0:3 'a' ( in highp int) +0:3 'b' ( in highp int) +0:3 'c' ( in highp int) +0:? Sequence +0:8 Sequence +0:8 Sequence +0:8 move second child to first child ( temp highp float) +0:8 'a' ( temp highp float) +0:8 add ( temp highp float) +0:8 Convert int to float ( temp highp float) +0:8 'a' ( in highp int) +0:8 Constant: +0:8 1.000000 +0:11 Branch: Return with expression +0:11 'a' ( in highp int) +0:25 Function Definition: cos(f1; ( global highp float) +0:25 Function Parameters: +0:25 'x' ( in highp float) +0:27 Sequence +0:27 Branch: Return +0:29 Function Definition: radians(b1; ( global bool) +0:29 Function Parameters: +0:29 'x' ( in bool) +0:31 Sequence +0:31 Branch: Return +0:36 Function Definition: main( ( global void) +0:36 Function Parameters: +0:? Sequence +0:39 Function Call: g( ( temp highp int) +0:42 'sin' ( temp highp float) +0:43 Constant: +0:43 0.000000 +0:44 Function Call: f(i1;i1;i1; ( global highp int) +0:44 Constant: +0:44 1 (const int) +0:44 Constant: +0:44 2 (const int) +0:44 Constant: +0:44 3 (const int) +0:47 move second child to first child ( temp highp float) +0:47 'f' ( temp highp float) +0:47 Constant: +0:47 3.000000 +0:49 move second child to first child ( temp highp 4-component vector of float) +0:49 'gl_Position' ( invariant gl_Position highp 4-component vector of float Position) +0:49 Construct vec4 ( temp highp 4-component vector of float) +0:49 'f' ( temp highp float) +0:51 Sequence +0:51 Sequence +0:51 move second child to first child ( temp highp int) +0:51 'f' ( temp highp int) +0:51 Constant: +0:51 0 (const int) +0:51 Loop with condition tested first +0:51 Loop Condition +0:51 Compare Less Than ( temp bool) +0:51 'f' ( temp highp int) +0:51 Constant: +0:51 10 (const int) +0:51 Loop Body +0:52 Pre-Increment ( temp highp int) +0:52 'f' ( temp highp int) +0:51 Loop Terminal Expression +0:51 Pre-Increment ( temp highp int) +0:51 'f' ( temp highp int) +0:54 Sequence +0:54 move second child to first child ( temp highp int) +0:54 'x' ( temp highp int) +0:54 Constant: +0:54 1 (const int) +0:56 Sequence +0:56 Sequence +0:56 move second child to first child ( temp highp float) +0:56 'x' ( temp highp float) +0:56 Constant: +0:56 2.000000 +0:56 move second child to first child ( temp highp float) +0:56 'y' ( temp highp float) +0:56 'x' ( temp highp float) +0:60 Sequence +0:60 Sequence +0:60 move second child to first child ( temp highp int) +0:60 'x' ( temp highp int) +0:60 'x' ( temp highp int) +0:68 Sequence +0:68 Sequence +0:68 move second child to first child ( temp structure{ temp highp int x}) +0:68 'S' ( temp structure{ temp highp int x}) +0:68 Constant: +0:68 0 (const int) +0:69 x: direct index for structure ( temp highp int) +0:69 'S' ( temp structure{ temp highp int x}) +0:69 Constant: +0:69 0 (const int) +0:73 Constant: +0:73 0.000000 +0:? Linker Objects +0:? 'b' ( global bool) +0:? 'gl_VertexID' ( gl_VertexId highp int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId highp int InstanceId) + + +Linked vertex stage: + +ERROR: Linking vertex stage: No function definition (body) found: + g( + +Shader version: 300 +ERROR: node is still EOpNull! +0:3 Function Definition: f(i1;i1;i1; ( global highp int) +0:3 Function Parameters: +0:3 'a' ( in highp int) +0:3 'b' ( in highp int) +0:3 'c' ( in highp int) +0:? Sequence +0:8 Sequence +0:8 Sequence +0:8 move second child to first child ( temp highp float) +0:8 'a' ( temp highp float) +0:8 add ( temp highp float) +0:8 Convert int to float ( temp highp float) +0:8 'a' ( in highp int) +0:8 Constant: +0:8 1.000000 +0:11 Branch: Return with expression +0:11 'a' ( in highp int) +0:36 Function Definition: main( ( global void) +0:36 Function Parameters: +0:? Sequence +0:39 Function Call: g( ( temp highp int) +0:42 'sin' ( temp highp float) +0:43 Constant: +0:43 0.000000 +0:44 Function Call: f(i1;i1;i1; ( global highp int) +0:44 Constant: +0:44 1 (const int) +0:44 Constant: +0:44 2 (const int) +0:44 Constant: +0:44 3 (const int) +0:47 move second child to first child ( temp highp float) +0:47 'f' ( temp highp float) +0:47 Constant: +0:47 3.000000 +0:49 move second child to first child ( temp highp 4-component vector of float) +0:49 'gl_Position' ( invariant gl_Position highp 4-component vector of float Position) +0:49 Construct vec4 ( temp highp 4-component vector of float) +0:49 'f' ( temp highp float) +0:51 Sequence +0:51 Sequence +0:51 move second child to first child ( temp highp int) +0:51 'f' ( temp highp int) +0:51 Constant: +0:51 0 (const int) +0:51 Loop with condition tested first +0:51 Loop Condition +0:51 Compare Less Than ( temp bool) +0:51 'f' ( temp highp int) +0:51 Constant: +0:51 10 (const int) +0:51 Loop Body +0:52 Pre-Increment ( temp highp int) +0:52 'f' ( temp highp int) +0:51 Loop Terminal Expression +0:51 Pre-Increment ( temp highp int) +0:51 'f' ( temp highp int) +0:54 Sequence +0:54 move second child to first child ( temp highp int) +0:54 'x' ( temp highp int) +0:54 Constant: +0:54 1 (const int) +0:56 Sequence +0:56 Sequence +0:56 move second child to first child ( temp highp float) +0:56 'x' ( temp highp float) +0:56 Constant: +0:56 2.000000 +0:56 move second child to first child ( temp highp float) +0:56 'y' ( temp highp float) +0:56 'x' ( temp highp float) +0:60 Sequence +0:60 Sequence +0:60 move second child to first child ( temp highp int) +0:60 'x' ( temp highp int) +0:60 'x' ( temp highp int) +0:68 Sequence +0:68 Sequence +0:68 move second child to first child ( temp structure{ temp highp int x}) +0:68 'S' ( temp structure{ temp highp int x}) +0:68 Constant: +0:68 0 (const int) +0:69 x: direct index for structure ( temp highp int) +0:69 'S' ( temp structure{ temp highp int x}) +0:69 Constant: +0:69 0 (const int) +0:73 Constant: +0:73 0.000000 +0:? Linker Objects +0:? 'b' ( global bool) +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/310.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.comp.out new file mode 100644 index 0000000..3246622 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.comp.out @@ -0,0 +1,617 @@ +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: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 +ERROR: 0:40: 'in' : global storage input qualifier cannot be used in a compute shader +ERROR: 0:41: 'out' : global storage output qualifier cannot be used in a compute shader +ERROR: 0:44: 'shared' : cannot apply layout qualifiers to a shared variable +ERROR: 0:44: 'location' : can only apply to uniform, buffer, in, or out storage qualifiers +ERROR: 0:45: 'shared' : cannot initialize this type of qualifier +ERROR: 0:47: 'local_size' : can only apply to 'in' +ERROR: 0:47: 'local_size' : can only apply to 'in' +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: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 +ERROR: 0:88: 'imageAtomicAdd' : required extension not requested: GL_OES_shader_image_atomic +ERROR: 0:89: 'imageAtomicMin' : required extension not requested: GL_OES_shader_image_atomic +ERROR: 0:89: 'readonly' : argument cannot drop memory qualifier when passed to formal parameter +ERROR: 0:89: 'imageAtomicMin' : only supported on image with format r32i or r32ui +ERROR: 0:90: 'imageAtomicMax' : no matching overloaded function found +ERROR: 0:94: 'writeonly' : argument cannot drop memory qualifier when passed to formal parameter +ERROR: 0:97: '' : memory qualifiers cannot be used on this type +ERROR: 0:98: '' : memory qualifiers cannot be used on this type +ERROR: 0:114: 'image load-store format' : not supported with this profile: es +ERROR: 0:114: 'rg8i' : does not apply to unsigned integer images +ERROR: 0:115: 'rgba32i' : does not apply to floating point images +ERROR: 0:116: 'rgba32f' : does not apply to unsigned integer images +ERROR: 0:117: 'image load-store format' : not supported with this profile: es +ERROR: 0:117: 'r8_snorm' : does not apply to signed integer images +ERROR: 0:118: 'rgba32ui' : does not apply to signed integer images +ERROR: 0:119: 'image load-store format' : not supported with this profile: es +ERROR: 0:119: 'r8ui' : does not apply to signed integer images +ERROR: 0:128: 'atomic_uint' : samplers and atomic_uints cannot be output parameters +ERROR: 0:130: 'return' : type does not match, or is not convertible to, the function's return type +ERROR: 0:136: 'atomic_uint' : atomic_uints can only be used in uniform variables or function parameters: non_uniform_counter +ERROR: 0:136: 'atomic_uint' : layout(binding=X) is required +ERROR: 0:141: 'atomic_uint' : atomic counters can only be highp +ERROR: 0:141: 'binding' : atomic_uint binding is too large; see gl_MaxAtomicCounterBindings +ERROR: 0:143: 'binding' : atomic_uint binding is too large; see gl_MaxAtomicCounterBindings +ERROR: 0:149: '[]' : scalar integer expression required +ERROR: 0:166: 'precision' : can only apply highp to atomic_uint +ERROR: 0:168: 'precise' : Reserved word. +ERROR: 0:168: 'precise' : not supported for this version or the enabled extensions +ERROR: 0:170: 'dmat2x4' : Reserved word. +ERROR: 0:170: 'double matrix' : not supported with this profile: es +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:173: 'image2DMS' : Reserved word. +ERROR: 0:173: 'image variables declared 'writeonly' 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: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 +ERROR: 0:194: 'assign' : can't read from writeonly object: wo +ERROR: 0:195: 'initializer' : can't read from writeonly object: wo +ERROR: 0:196: '++' : can't read from writeonly object: wo +ERROR: 0:197: '--' : can't read from writeonly object: wo +ERROR: 0:198: '+' : can't read from writeonly object: wo +ERROR: 0:199: '-' : can't read from writeonly object: wo +ERROR: 0:201: ':' : can't read from writeonly object: wo +ERROR: 0:202: ':' : can't read from writeonly object: wo +ERROR: 0:203: '==' : can't read from writeonly object: wo +ERROR: 0:205: '>=' : can't read from writeonly object: wo +ERROR: 0:207: 'constructor' : can't read from writeonly object: wo +ERROR: 0:208: '~' : can't read from writeonly object: wo +ERROR: 0:221: 'assign' : can't read from writeonly object: wo +ERROR: 0:222: '~' : can't read from writeonly object: wo +ERROR: 0:227: 'input block' : not supported in this stage: compute +ERROR: 0:231: 'output block' : not supported in this stage: compute +WARNING: 0:235: 't__' : identifiers containing consecutive underscores ("__") are reserved +WARNING: 0:238: '#define' : names containing consecutive underscores are reserved: __D +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. + + +Shader version: 310 +Requested GL_EXT_device_group +local_size = (2, 1, 4096) +ERROR: node is still EOpNull! +0:27 Function Definition: main( ( global void) +0:27 Function Parameters: +0:29 Sequence +0:29 Barrier ( global void) +0:30 MemoryBarrier ( global void) +0:31 MemoryBarrierAtomicCounter ( global void) +0:32 MemoryBarrierBuffer ( global void) +0:33 MemoryBarrierShared ( global void) +0:34 MemoryBarrierImage ( global void) +0:35 GroupMemoryBarrier ( global void) +0:36 move second child to first child ( temp highp int) +0:36 value: direct index for structure (layout( column_major shared) buffer highp int) +0:36 'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values}) +0:36 Constant: +0:36 0 (const uint) +0:36 Convert float to int ( temp highp int) +0:36 indirect index (layout( column_major shared) temp highp float) +0:36 values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float) +0:36 'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values}) +0:36 Constant: +0:36 1 (const uint) +0:36 'gl_LocalInvocationIndex' ( in highp uint LocalInvocationIndex) +0:59 Function Definition: foo( ( global void) +0:59 Function Parameters: +0:61 Sequence +0:61 move second child to first child ( temp highp float) +0:61 direct index (layout( column_major shared) temp highp float) +0:61 values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float) +0:61 'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values}) +0:61 Constant: +0:61 1 (const int) +0:61 Constant: +0:61 2 (const int) +0:61 Constant: +0:61 4.700000 +0:62 array length ( temp int) +0:62 values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float) +0:62 'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values}) +0:62 Constant: +0:62 1 (const int) +0:63 Pre-Increment ( temp highp 4-component vector of float) +0:63 's' ( shared highp 4-component vector of float) +0:84 Function Definition: qux( ( global void) +0:84 Function Parameters: +0:86 Sequence +0:86 Sequence +0:86 move second child to first child ( temp highp int) +0:86 'i' ( temp highp int) +0:86 Constant: +0:86 4 (const int) +0:87 imageAtomicCompSwap ( global highp int) +0:87 'iimg2D' (layout( r32i) uniform highp iimage2D) +0:87 Construct ivec2 ( temp highp 2-component vector of int) +0:87 'i' ( temp highp int) +0:87 'i' ( temp highp int) +0:87 'i' ( temp highp int) +0:87 'i' ( temp highp int) +0:88 imageAtomicAdd ( global highp uint) +0:88 'uimg2D' (layout( r32ui) uniform mediump uimage2D) +0:88 Construct ivec2 ( temp highp 2-component vector of int) +0:88 'i' ( temp highp int) +0:88 'i' ( temp highp int) +0:88 Convert int to uint ( temp highp uint) +0:88 'i' ( temp highp int) +0:89 imageAtomicMin ( global highp int) +0:89 'iimg2Drgba' (layout( rgba32i) readonly uniform highp iimage2D) +0:89 Construct ivec2 ( temp highp 2-component vector of int) +0:89 'i' ( temp highp int) +0:89 'i' ( temp highp int) +0:89 'i' ( temp highp int) +0:90 Constant: +0:90 0.000000 +0:91 Sequence +0:91 move second child to first child ( temp highp 4-component vector of int) +0:91 'pos' ( temp highp 4-component vector of int) +0:91 imageLoad ( global highp 4-component vector of int) +0:91 'iimg2D' (layout( r32i) uniform highp iimage2D) +0:91 Construct ivec2 ( temp highp 2-component vector of int) +0:91 'i' ( temp highp int) +0:91 'i' ( temp highp int) +0:92 imageStore ( global highp void) +0:92 'ii2da' ( writeonly uniform highp iimage2DArray) +0:92 Construct ivec3 ( temp 3-component vector of int) +0:92 'i' ( temp highp int) +0:92 'i' ( temp highp int) +0:92 'i' ( temp highp int) +0:92 Constant: +0:92 0 (const int) +0:92 0 (const int) +0:92 0 (const int) +0:92 0 (const int) +0:93 imageLoad ( global mediump 4-component vector of float) +0:93 'img2Drgba' (layout( rgba32f) readonly uniform mediump image2D) +0:93 Construct ivec2 ( temp mediump 2-component vector of int) +0:93 'i' ( temp highp int) +0:93 'i' ( temp highp int) +0:94 imageLoad ( global highp 4-component vector of int) +0:94 'ii2da' ( writeonly uniform highp iimage2DArray) +0:94 Construct ivec3 ( temp highp 3-component vector of int) +0:94 'i' ( temp highp int) +0:94 'i' ( temp highp int) +0:94 'i' ( temp highp int) +0:100 Function Definition: passr(iI21; ( global void) +0:100 Function Parameters: +0:100 'image' ( coherent readonly in highp iimage2D) +0:107 Function Definition: passrc( ( global void) +0:107 Function Parameters: +0:109 Sequence +0:109 Function Call: passr(iI21; ( global void) +0:109 'qualim1' (layout( r32i) coherent readonly uniform highp iimage2D) +0:110 Function Call: passr(iI21; ( global void) +0:110 'qualim2' (layout( r32i) coherent restrict readonly uniform highp iimage2D) +0:111 Function Call: passr(iI21; ( global void) +0:111 'iimg2D' (layout( r32i) uniform highp iimage2D) +0:123 Function Definition: func(au1; ( global highp uint) +0:123 Function Parameters: +0:123 'c' ( in highp atomic_uint) +0:125 Sequence +0:125 Branch: Return with expression +0:125 AtomicCounterIncrement ( global highp uint) +0:125 'c' ( in highp atomic_uint) +0:128 Function Definition: func2(au1; ( global highp uint) +0:128 Function Parameters: +0:128 'c' ( out highp atomic_uint) +0:130 Sequence +0:130 Branch: Return with expression +0:130 'counter' (layout( binding=0 offset=0) uniform highp atomic_uint) +0:131 Branch: Return with expression +0:131 AtomicCounter ( global highp uint) +0:131 'counter' (layout( binding=0 offset=0) uniform highp atomic_uint) +0:134 Function Definition: mainAC( ( global void) +0:134 Function Parameters: +0:? Sequence +0:137 Sequence +0:137 move second child to first child ( temp highp uint) +0:137 'val' ( temp highp uint) +0:137 AtomicCounter ( global highp uint) +0:137 'counter' (layout( binding=0 offset=0) uniform highp atomic_uint) +0:138 AtomicCounterDecrement ( global highp uint) +0:138 'counter' (layout( binding=0 offset=0) uniform highp atomic_uint) +0:146 Function Definition: opac( ( global void) +0:146 Function Parameters: +0:? Sequence +0:149 indirect index ( temp highp int) +0:149 'a' ( temp 3-element array of highp int) +0:149 'counter' (layout( binding=0 offset=0) uniform highp atomic_uint) +0:150 direct index (layout( binding=2 offset=4) temp highp atomic_uint) +0:150 'countArr' (layout( binding=2 offset=4) uniform 4-element array of highp atomic_uint) +0:150 Constant: +0:150 2 (const int) +0:151 indirect index (layout( binding=2 offset=4) temp highp atomic_uint) +0:151 'countArr' (layout( binding=2 offset=4) uniform 4-element array of highp atomic_uint) +0:151 'i' ( uniform highp int) +0:157 Function Definition: atoms( ( global void) +0:157 Function Parameters: +0:159 Sequence +0:159 Sequence +0:159 move second child to first child ( temp highp int) +0:159 'origi' ( temp highp int) +0:159 AtomicAdd ( global highp int) +0:159 'atomi' ( shared highp int) +0:159 Constant: +0:159 3 (const int) +0:160 Sequence +0:160 move second child to first child ( temp highp uint) +0:160 'origu' ( temp highp uint) +0:160 AtomicAnd ( global highp uint) +0:160 'atomu' ( shared highp uint) +0:160 Constant: +0:160 7 (const uint) +0:161 move second child to first child ( temp highp int) +0:161 'origi' ( temp highp int) +0:161 AtomicExchange ( global highp int) +0:161 'atomi' ( shared highp int) +0:161 Constant: +0:161 4 (const int) +0:162 move second child to first child ( temp highp uint) +0:162 'origu' ( temp highp uint) +0:162 AtomicCompSwap ( global highp uint) +0:162 'atomu' ( shared highp uint) +0:162 Constant: +0:162 10 (const uint) +0:162 Constant: +0:162 8 (const uint) +0:191 Function Definition: foowo( ( global void) +0:191 Function Parameters: +0:? Sequence +0:194 move second child to first child ( temp highp float) +0:194 'g' ( temp highp float) +0:194 direct index (layout( column_major shared) temp highp float) +0:194 values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float) +0:194 'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values}) +0:194 Constant: +0:194 1 (const int) +0:194 Constant: +0:194 2 (const int) +0:195 Sequence +0:195 move second child to first child ( temp highp float) +0:195 'f' ( temp highp float) +0:195 direct index (layout( column_major shared) temp highp float) +0:195 values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float) +0:195 'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values}) +0:195 Constant: +0:195 1 (const int) +0:195 Constant: +0:195 2 (const int) +0:196 Pre-Increment ( temp highp float) +0:196 direct index (layout( column_major shared) temp highp float) +0:196 values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float) +0:196 'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values}) +0:196 Constant: +0:196 1 (const int) +0:196 Constant: +0:196 2 (const int) +0:197 Post-Decrement ( temp highp float) +0:197 direct index (layout( column_major shared) temp highp float) +0:197 values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float) +0:197 'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values}) +0:197 Constant: +0:197 1 (const int) +0:197 Constant: +0:197 2 (const int) +0:198 add ( temp highp float) +0:198 'f' ( temp highp float) +0:198 direct index (layout( column_major shared) temp highp float) +0:198 values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float) +0:198 'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values}) +0:198 Constant: +0:198 1 (const int) +0:198 Constant: +0:198 2 (const int) +0:199 subtract ( temp highp float) +0:199 direct index (layout( column_major shared) temp highp float) +0:199 values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float) +0:199 'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values}) +0:199 Constant: +0:199 1 (const int) +0:199 Constant: +0:199 2 (const int) +0:199 'f' ( temp highp float) +0:201 Test condition and select ( temp highp float) +0:201 Condition +0:201 'b' ( temp bool) +0:201 true case +0:201 'f' ( temp highp float) +0:201 false case +0:201 direct index (layout( column_major shared) temp highp float) +0:201 values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float) +0:201 'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values}) +0:201 Constant: +0:201 1 (const int) +0:201 Constant: +0:201 2 (const int) +0:202 Test condition and select ( temp highp float) +0:202 Condition +0:202 'b' ( temp bool) +0:202 true case +0:202 direct index (layout( column_major shared) temp highp float) +0:202 values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float) +0:202 'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values}) +0:202 Constant: +0:202 1 (const int) +0:202 Constant: +0:202 2 (const int) +0:202 false case +0:202 'f' ( temp highp float) +0:203 Test condition and select ( temp void) +0:203 Condition +0:203 Compare Equal ( temp bool) +0:203 'f' ( temp highp float) +0:203 direct index (layout( column_major shared) temp highp float) +0:203 values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float) +0:203 'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values}) +0:203 Constant: +0:203 1 (const int) +0:203 Constant: +0:203 2 (const int) +0:203 true case +0:204 Pre-Increment ( temp highp float) +0:204 'f' ( temp highp float) +0:205 Test condition and select ( temp void) +0:205 Condition +0:205 Compare Greater Than or Equal ( temp bool) +0:205 'f' ( temp highp float) +0:205 direct index (layout( column_major shared) temp highp float) +0:205 values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float) +0:205 'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values}) +0:205 Constant: +0:205 1 (const int) +0:205 Constant: +0:205 2 (const int) +0:205 true case +0:206 Pre-Increment ( temp highp float) +0:206 'f' ( temp highp float) +0:207 move second child to first child ( temp highp float) +0:207 'f' ( temp highp float) +0:207 direct index ( temp highp float) +0:207 Construct vec3 ( temp highp 3-component vector of float) +0:207 direct index (layout( column_major shared) temp highp float) +0:207 values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float) +0:207 'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values}) +0:207 Constant: +0:207 1 (const int) +0:207 Constant: +0:207 2 (const int) +0:207 Constant: +0:207 0 (const int) +0:208 Bitwise not ( temp highp int) +0:208 value: direct index for structure (layout( column_major shared) buffer highp int) +0:208 'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values}) +0:208 Constant: +0:208 0 (const int) +0:209 move second child to first child ( temp highp float) +0:209 direct index (layout( column_major shared) temp highp float) +0:209 values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float) +0:209 'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values}) +0:209 Constant: +0:209 1 (const int) +0:209 Constant: +0:209 2 (const int) +0:209 Constant: +0:209 3.400000 +0:218 Function Definition: foomultio( ( global void) +0:218 Function Parameters: +0:? Sequence +0:221 move second child to first child ( temp highp float) +0:221 'g' ( temp highp float) +0:221 direct index (layout( column_major shared) temp highp float) +0:221 values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float) +0:221 'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values}) +0:221 Constant: +0:221 1 (const int) +0:221 Constant: +0:221 2 (const int) +0:222 Bitwise not ( temp highp int) +0:222 value: direct index for structure (layout( column_major shared) buffer highp int) +0:222 'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values}) +0:222 Constant: +0:222 0 (const int) +0:223 move second child to first child ( temp highp float) +0:223 direct index (layout( column_major shared) temp highp float) +0:223 values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float) +0:223 'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values}) +0:223 Constant: +0:223 1 (const int) +0:223 Constant: +0:223 2 (const int) +0:223 Constant: +0:223 3.400000 +0:224 move second child to first child ( temp highp int) +0:224 value: direct index for structure (layout( column_major shared) buffer highp int) +0:224 'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values}) +0:224 Constant: +0:224 0 (const int) +0:224 Constant: +0:224 2 (const int) +0:242 Function Definition: devi( ( global void) +0:242 Function Parameters: +0:244 Sequence +0:244 'gl_DeviceIndex' ( in highp int DeviceIndex) +0:245 'gl_ViewIndex' ( temp float) +0:252 Function Definition: devie( ( global void) +0:252 Function Parameters: +0:254 Sequence +0:254 'gl_DeviceIndex' ( in highp int DeviceIndex) +0:255 'gl_ViewIndex' ( temp float) +0:? Linker Objects +0:? 'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize) +0:? 2 (const uint) +0:? 1 (const uint) +0:? 4096 (const uint) +0:? 'total' ( const highp int) +0:? 66592 (const int) +0:? 'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values}) +0:? 'invalid' (layout( column_major shared) buffer block{layout( column_major shared) buffer implicitly-sized array of highp float values, layout( column_major shared) buffer highp int value}) +0:? 'v3' (layout( location=2) in highp 3-component vector of float) +0:? 'f' ( in highp float) +0:? 'fo' ( out highp float) +0:? 's' ( shared highp 4-component vector of float) +0:? 'sl' (layout( location=2) shared highp 4-component vector of float) +0:? 'fs' ( shared highp float) +0:? 'arrX' ( global 2-element array of highp int) +0:? 'arrY' ( global 1-element array of highp int) +0:? 'arrZ' ( global 4096-element array of highp int) +0:? 'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values}) +0:? 'v' ( buffer highp 4-component vector of float) +0:? 'us2dbad' ( uniform mediump usampler2D) +0:? 'us2d' ( uniform highp usampler2D) +0:? 'ii2dabad' ( uniform highp iimage2DArray) +0:? 'ii2da' ( writeonly uniform highp iimage2DArray) +0:? 'iimg2D' (layout( r32i) uniform highp iimage2D) +0:? 'iimg2Drgba' (layout( rgba32i) readonly uniform highp iimage2D) +0:? 'img2Drgba' (layout( rgba32f) readonly uniform mediump image2D) +0:? 'uimg2D' (layout( r32ui) uniform mediump uimage2D) +0:? 'vol' ( volatile temp highp float) +0:? 'vol2' ( readonly temp highp int) +0:? 'qualim1' (layout( r32i) coherent readonly uniform highp iimage2D) +0:? 'qualim2' (layout( r32i) coherent restrict readonly uniform highp iimage2D) +0:? 'i1bad' (layout( rg8i) readonly uniform highp uimage2D) +0:? 'i2bad' (layout( rgba32i) readonly uniform highp image2D) +0:? 'i3bad' (layout( rgba32f) readonly uniform highp uimage2D) +0:? 'i4bad' (layout( r8_snorm) readonly uniform highp iimage2D) +0:? 'i5bad' (layout( rgba32ui) readonly uniform highp iimage2D) +0:? 'i6bad' (layout( r8ui) readonly uniform highp iimage2D) +0:? 'counter' (layout( binding=0 offset=0) uniform highp atomic_uint) +0:? 'counterBad' (layout( binding=1) uniform mediump atomic_uint) +0:? 'countArr' (layout( binding=2 offset=4) uniform 4-element array of highp atomic_uint) +0:? 'i' ( uniform highp int) +0:? 'atomi' ( shared highp int) +0:? 'atomu' ( shared highp uint) +0:? 'pfoo' ( noContraction temp highp int) +0:? 'dm' ( global 2X4 matrix of double) +0:? 'sca' ( uniform mediump samplerCubeArray) +0:? 'i2dr' ( uniform mediump iimage2DRect) +0:? 'i2dms' ( uniform highp image2DMS) +0:? 'u2dmsa' ( uniform mediump uimage2DMSArray) +0:? 'okay1' (layout( r32f) coherent volatile restrict readonly writeonly uniform highp image2D) +0:? 'okay2' (layout( r32i) coherent volatile restrict readonly uniform highp iimage2D) +0:? 'okay3' (layout( r32ui) coherent volatile restrict writeonly uniform highp uimage2D) +0:? 'okay4' (layout( r32f) coherent volatile restrict uniform highp image2D) +0:? 'badQ1' (layout( rgba32f) coherent volatile restrict uniform highp image2D) +0:? 'badQ2' (layout( rgba8i) coherent volatile restrict uniform highp iimage2D) +0:? 'badQ3' (layout( rgba16ui) coherent volatile restrict uniform highp uimage2D) +0:? 'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values}) +0:? 'multio' (layout( column_major shared) buffer block{layout( column_major shared) readonly buffer highp int value, layout( column_major shared) writeonly buffer implicitly-sized array of highp float values}) +0:? 'inbi' ( in block{ in highp int a}) +0:? 'outbi' ( out block{ out highp int a}) +0:? 't__' ( global highp float) +0:? 'arr' ( shared 2-element array of 3-element array of 4-element array of highp 4-component vector of float) + + +Linked compute stage: + + +Shader version: 310 +Requested GL_EXT_device_group +local_size = (2, 1, 4096) +ERROR: node is still EOpNull! +0:27 Function Definition: main( ( global void) +0:27 Function Parameters: +0:29 Sequence +0:29 Barrier ( global void) +0:30 MemoryBarrier ( global void) +0:31 MemoryBarrierAtomicCounter ( global void) +0:32 MemoryBarrierBuffer ( global void) +0:33 MemoryBarrierShared ( global void) +0:34 MemoryBarrierImage ( global void) +0:35 GroupMemoryBarrier ( global void) +0:36 move second child to first child ( temp highp int) +0:36 value: direct index for structure (layout( column_major shared) buffer highp int) +0:36 'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values}) +0:36 Constant: +0:36 0 (const uint) +0:36 Convert float to int ( temp highp int) +0:36 indirect index (layout( column_major shared) temp highp float) +0:36 values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float) +0:36 'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values}) +0:36 Constant: +0:36 1 (const uint) +0:36 'gl_LocalInvocationIndex' ( in highp uint LocalInvocationIndex) +0:? Linker Objects +0:? 'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize) +0:? 2 (const uint) +0:? 1 (const uint) +0:? 4096 (const uint) +0:? 'total' ( const highp int) +0:? 66592 (const int) +0:? 'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values}) +0:? 'invalid' (layout( column_major shared) buffer block{layout( column_major shared) buffer implicitly-sized array of highp float values, layout( column_major shared) buffer highp int value}) +0:? 'v3' (layout( location=2) in highp 3-component vector of float) +0:? 'f' ( in highp float) +0:? 'fo' ( out highp float) +0:? 's' ( shared highp 4-component vector of float) +0:? 'sl' (layout( location=2) shared highp 4-component vector of float) +0:? 'fs' ( shared highp float) +0:? 'arrX' ( global 2-element array of highp int) +0:? 'arrY' ( global 1-element array of highp int) +0:? 'arrZ' ( global 4096-element array of highp int) +0:? 'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values}) +0:? 'v' ( buffer highp 4-component vector of float) +0:? 'us2dbad' ( uniform mediump usampler2D) +0:? 'us2d' ( uniform highp usampler2D) +0:? 'ii2dabad' ( uniform highp iimage2DArray) +0:? 'ii2da' ( writeonly uniform highp iimage2DArray) +0:? 'iimg2D' (layout( r32i) uniform highp iimage2D) +0:? 'iimg2Drgba' (layout( rgba32i) readonly uniform highp iimage2D) +0:? 'img2Drgba' (layout( rgba32f) readonly uniform mediump image2D) +0:? 'uimg2D' (layout( r32ui) uniform mediump uimage2D) +0:? 'vol' ( volatile temp highp float) +0:? 'vol2' ( readonly temp highp int) +0:? 'qualim1' (layout( r32i) coherent readonly uniform highp iimage2D) +0:? 'qualim2' (layout( r32i) coherent restrict readonly uniform highp iimage2D) +0:? 'i1bad' (layout( rg8i) readonly uniform highp uimage2D) +0:? 'i2bad' (layout( rgba32i) readonly uniform highp image2D) +0:? 'i3bad' (layout( rgba32f) readonly uniform highp uimage2D) +0:? 'i4bad' (layout( r8_snorm) readonly uniform highp iimage2D) +0:? 'i5bad' (layout( rgba32ui) readonly uniform highp iimage2D) +0:? 'i6bad' (layout( r8ui) readonly uniform highp iimage2D) +0:? 'counter' (layout( binding=0 offset=0) uniform highp atomic_uint) +0:? 'counterBad' (layout( binding=1) uniform mediump atomic_uint) +0:? 'countArr' (layout( binding=2 offset=4) uniform 4-element array of highp atomic_uint) +0:? 'i' ( uniform highp int) +0:? 'atomi' ( shared highp int) +0:? 'atomu' ( shared highp uint) +0:? 'pfoo' ( noContraction temp highp int) +0:? 'dm' ( global 2X4 matrix of double) +0:? 'sca' ( uniform mediump samplerCubeArray) +0:? 'i2dr' ( uniform mediump iimage2DRect) +0:? 'i2dms' ( uniform highp image2DMS) +0:? 'u2dmsa' ( uniform mediump uimage2DMSArray) +0:? 'okay1' (layout( r32f) coherent volatile restrict readonly writeonly uniform highp image2D) +0:? 'okay2' (layout( r32i) coherent volatile restrict readonly uniform highp iimage2D) +0:? 'okay3' (layout( r32ui) coherent volatile restrict writeonly uniform highp uimage2D) +0:? 'okay4' (layout( r32f) coherent volatile restrict uniform highp image2D) +0:? 'badQ1' (layout( rgba32f) coherent volatile restrict uniform highp image2D) +0:? 'badQ2' (layout( rgba8i) coherent volatile restrict uniform highp iimage2D) +0:? 'badQ3' (layout( rgba16ui) coherent volatile restrict uniform highp uimage2D) +0:? 'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values}) +0:? 'multio' (layout( column_major shared) buffer block{layout( column_major shared) readonly buffer highp int value, layout( column_major shared) writeonly buffer implicitly-sized array of highp float values}) +0:? 'inbi' ( in block{ in highp int a}) +0:? 'outbi' ( out block{ out highp int a}) +0:? 't__' ( global highp float) +0:? 'arr' ( shared 2-element array of 3-element array of 4-element array of highp 4-component vector of float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.frag.out new file mode 100644 index 0000000..3b2fdd0 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.frag.out @@ -0,0 +1,1238 @@ +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 +ERROR: 0:8: 'gl_FragCoord' : identifiers starting with "gl_" are reserved +ERROR: 0:11: 'location' : overlapping use of location 2 +ERROR: 0:15: 'usampler2DRect' : Reserved word. +ERROR: 0:15: 'sampler/image' : type requires declaration of default precision qualifier +ERROR: 0:23: 'variable indexing sampler array' : not supported for this version or the enabled extensions +ERROR: 0:27: 'textureGatherOffsets' : no matching overloaded function found +ERROR: 0:27: '=' : cannot convert from ' const float' to ' temp mediump 4-component vector of uint' +ERROR: 0:30: 'textureGatherOffset(...)' : must be a compile-time constant: component argument +ERROR: 0:31: 'textureGatherOffset(...)' : must be 0, 1, 2, or 3: component argument +ERROR: 0:34: 'non-constant offset argument' : not supported for this version or the enabled extensions +ERROR: 0:42: 'texel offset' : argument must be compile-time constant +ERROR: 0:44: 'texel offset' : value is out of range: [gl_MinProgramTexelOffset, gl_MaxProgramTexelOffset] +ERROR: 0:44: '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: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: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: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: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: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 +ERROR: 0:82: 'location' : too large for fragment output +ERROR: 0:82: 'location' : overlapping use of location 40 +ERROR: 0:83: 'non-literal layout-id value' : not supported with this profile: es +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: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 +ERROR: 0:117: 'fragment-shader array-of-array input' : not supported with this profile: es +ERROR: 0:120: 'fragment-shader array-of-struct input' : not supported with this profile: es +ERROR: 0:121: 'fragment-shader array-of-struct input' : not supported with this profile: es +ERROR: 0:123: 'fragment-shader struct input containing an array' : not supported with this profile: es +ERROR: 0:125: 'fragment-shader struct input containing structure' : not supported with this profile: es +ERROR: 0:133: 'output block' : not supported in this stage: fragment +ERROR: 0:138: '' : cannot nest a structure definition inside a structure or block +ERROR: 0:146: 'location' : overlapping use of location 13 +ERROR: 0:148: 'inbname2' : Cannot reuse block name within the same interface: in +ERROR: 0:153: 'badmember' : nameless block contains a member that already has a name at global scope +ERROR: 0:157: 'inbname' : redefinition +ERROR: 0:159: 'vAnon' : redefinition +ERROR: 0:173: 'origin_upper_left' : not supported with this profile: es +ERROR: 0:173: 'pixel_center_integer' : not supported with this profile: es +ERROR: 0:173: 'redeclaration' : cannot redeclare with different qualification: gl_FragCoord +ERROR: 0:177: 'depth layout qualifier' : not supported with this profile: es +ERROR: 0:181: 'assign' : l-value required "gl_FragDepth" (can't modify gl_FragDepth if using early_fragment_tests) +ERROR: 0:182: 'gl_Layer' : required extension not requested: Possible extensions include: +GL_EXT_geometry_shader +GL_OES_geometry_shader +ERROR: 0:183: 'gl_PrimitiveID' : required extension not requested: Possible extensions include: +GL_EXT_geometry_shader +GL_OES_geometry_shader +ERROR: 0:209: 'precise' : Reserved word. +ERROR: 0:209: 'precise' : not supported for this version or the enabled extensions +ERROR: 0:210: 'fma' : required extension not requested: Possible extensions include: +GL_EXT_gpu_shader5 +GL_OES_gpu_shader5 +ERROR: 0:211: 'non-constant offset argument' : not supported for this version or the enabled extensions +ERROR: 0:212: 'textureGatherOffsets' : required extension not requested: Possible extensions include: +GL_EXT_gpu_shader5 +GL_OES_gpu_shader5 +ERROR: 0:223: 'textureGatherOffsets(...)' : must be a compile-time constant: offsets argument +ERROR: 0:257: 'gl_SampleID' : required extension not requested: GL_OES_sample_variables +ERROR: 0:258: 'gl_SamplePosition' : required extension not requested: GL_OES_sample_variables +ERROR: 0:259: 'gl_SampleMaskIn' : required extension not requested: GL_OES_sample_variables +ERROR: 0:260: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables +ERROR: 0:261: 'gl_NumSamples' : required extension not requested: GL_OES_sample_variables +ERROR: 0:289: 'imageAtomicAdd' : required extension not requested: GL_OES_shader_image_atomic +ERROR: 0:290: 'imageAtomicAdd' : required extension not requested: GL_OES_shader_image_atomic +ERROR: 0:291: 'imageAtomicMin' : required extension not requested: GL_OES_shader_image_atomic +ERROR: 0:292: 'imageAtomicMin' : required extension not requested: GL_OES_shader_image_atomic +ERROR: 0:293: 'imageAtomicMax' : required extension not requested: GL_OES_shader_image_atomic +ERROR: 0:294: 'imageAtomicMax' : required extension not requested: GL_OES_shader_image_atomic +ERROR: 0:295: 'imageAtomicAnd' : required extension not requested: GL_OES_shader_image_atomic +ERROR: 0:296: 'imageAtomicAnd' : required extension not requested: GL_OES_shader_image_atomic +ERROR: 0:297: 'imageAtomicOr' : required extension not requested: GL_OES_shader_image_atomic +ERROR: 0:298: 'imageAtomicOr' : required extension not requested: GL_OES_shader_image_atomic +ERROR: 0:299: 'imageAtomicXor' : required extension not requested: GL_OES_shader_image_atomic +ERROR: 0:300: 'imageAtomicXor' : required extension not requested: GL_OES_shader_image_atomic +ERROR: 0:301: 'imageAtomicExchange' : required extension not requested: GL_OES_shader_image_atomic +ERROR: 0:302: 'imageAtomicExchange' : required extension not requested: GL_OES_shader_image_atomic +ERROR: 0:303: 'imageAtomicExchange' : required extension not requested: GL_OES_shader_image_atomic +ERROR: 0:304: 'imageAtomicCompSwap' : required extension not requested: GL_OES_shader_image_atomic +ERROR: 0:305: 'imageAtomicCompSwap' : required extension not requested: GL_OES_shader_image_atomic +ERROR: 0:312: 'rgba32f' : format requires readonly or writeonly memory qualifier +ERROR: 0:313: 'rgba8ui' : format requires readonly or writeonly memory qualifier +ERROR: 0:314: 'rgba16i' : format requires readonly or writeonly memory qualifier +ERROR: 0:340: 'imageAtomicMax' : only supported on image with format r32i or r32ui +ERROR: 0:341: 'imageAtomicMax' : only supported on image with format r32i or r32ui +ERROR: 0:342: 'imageAtomicExchange' : only supported on image with format r32f +ERROR: 0:345: 'sample' : Reserved word. +ERROR: 0:346: 'centroid/sample/patch' : can't use auxiliary qualifier on a fragment output +ERROR: 0:347: 'flat/smooth/noperspective' : can't use interpolation qualifier on a fragment output +ERROR: 0:348: 'flat/smooth/noperspective' : can't use interpolation qualifier on a fragment output +ERROR: 0:349: 'noperspective' : Reserved word. +ERROR: 0:349: 'noperspective' : not supported with this profile: es +ERROR: 0:349: 'flat/smooth/noperspective' : can't use interpolation qualifier on a fragment output +ERROR: 0:355: 'interpolateAtCentroid' : required extension not requested: GL_OES_shader_multisample_interpolation +ERROR: 0:356: 'interpolateAtSample' : required extension not requested: GL_OES_shader_multisample_interpolation +ERROR: 0:357: 'interpolateAtOffset' : required extension not requested: GL_OES_shader_multisample_interpolation +ERROR: 0:365: 'centroid/sample/patch' : can't use auxiliary qualifier on a fragment output +ERROR: 0:380: 'interpolateAtCentroid' : no matching overloaded function found +ERROR: 0:380: 'assign' : cannot convert from ' const float' to ' temp mediump 3-component vector of float' +ERROR: 0:382: 'interpolateAtCentroid' : first argument must be an interpolant, or interpolant-array element +ERROR: 0:384: 'interpolateAtSample' : no matching overloaded function found +ERROR: 0:384: 'assign' : cannot convert from ' const float' to ' temp mediump 3-component vector of float' +ERROR: 0:386: 'interpolateAtSample' : first argument must be an interpolant, or interpolant-array element +ERROR: 0:389: 'interpolateAtOffset' : no matching overloaded function found +ERROR: 0:389: 'assign' : cannot convert from ' const float' to ' temp mediump 3-component vector of float' +ERROR: 0:391: 'interpolateAtOffset' : first argument must be an interpolant, or interpolant-array element +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: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 +ERROR: 0:426: 'blend equation' : can only apply to a standalone qualifier +ERROR: 0:427: 'blend equation' : can only apply to a standalone qualifier +ERROR: 0:428: 'blend equation' : can only apply to a standalone qualifier +ERROR: 0:429: 'blend_support' : unknown blend equation +ERROR: 0:431: 'fragment-shader array-of-array output' : not supported with this profile: es +ERROR: 0:435: 'gl_DeviceIndex' : required extension not requested: GL_EXT_device_group +ERROR: 0:436: 'gl_ViewIndex' : required extension not requested: GL_EXT_multiview +ERROR: 127 compilation errors. No code generated. + + +Shader version: 310 +Requested GL_EXT_device_group +Requested GL_EXT_multiview +Requested GL_EXT_shader_io_blocks +Requested GL_EXT_texture_cube_map_array +Requested GL_KHR_blend_equation_advanced +Requested GL_OES_geometry_shader +Requested GL_OES_gpu_shader5 +Requested GL_OES_sample_variables +Requested GL_OES_shader_image_atomic +Requested GL_OES_shader_io_blocks +Requested GL_OES_shader_multisample_interpolation +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:21 Function Definition: main( ( global void) +0:21 Function Parameters: +0:23 Sequence +0:23 Sequence +0:23 move second child to first child ( temp highp 4-component vector of float) +0:23 'v' ( temp mediump 4-component vector of float) +0:23 texture ( global highp 4-component vector of float) +0:23 indirect index ( temp highp sampler2D) +0:23 'arrayedSampler' ( uniform 5-element array of highp sampler2D) +0:23 'i' ( uniform mediump int) +0:23 'c2D' ( smooth in mediump 2-component vector of float) +0:28 Sequence +0:28 move second child to first child ( temp highp 4-component vector of float) +0:28 'v4' ( temp mediump 4-component vector of float) +0:28 textureGather ( global highp 4-component vector of float) +0:28 direct index ( temp highp sampler2D) +0:28 'arrayedSampler' ( uniform 5-element array of highp sampler2D) +0:28 Constant: +0:28 0 (const int) +0:28 'c2D' ( smooth in mediump 2-component vector of float) +0:29 Sequence +0:29 move second child to first child ( temp highp 4-component vector of int) +0:29 'iv4' ( temp mediump 4-component vector of int) +0:29 textureGatherOffset ( global highp 4-component vector of int) +0:29 'isamp2DA' ( uniform highp isampler2DArray) +0:29 Constant: +0:29 0.100000 +0:29 0.100000 +0:29 0.100000 +0:29 Constant: +0:29 1 (const int) +0:29 1 (const int) +0:29 Constant: +0:29 3 (const int) +0:30 move second child to first child ( temp highp 4-component vector of int) +0:30 'iv4' ( temp mediump 4-component vector of int) +0:30 textureGatherOffset ( global highp 4-component vector of int) +0:30 'isamp2DA' ( uniform highp isampler2DArray) +0:30 Constant: +0:30 0.100000 +0:30 0.100000 +0:30 0.100000 +0:30 Constant: +0:30 1 (const int) +0:30 1 (const int) +0:30 'i' ( uniform mediump int) +0:31 move second child to first child ( temp highp 4-component vector of int) +0:31 'iv4' ( temp mediump 4-component vector of int) +0:31 textureGatherOffset ( global highp 4-component vector of int) +0:31 'isamp2DA' ( uniform highp isampler2DArray) +0:31 Constant: +0:31 0.100000 +0:31 0.100000 +0:31 0.100000 +0:31 Constant: +0:31 1 (const int) +0:31 1 (const int) +0:31 Constant: +0:31 4 (const int) +0:32 move second child to first child ( temp highp 4-component vector of int) +0:32 'iv4' ( temp mediump 4-component vector of int) +0:32 textureGatherOffset ( global highp 4-component vector of int) +0:32 'isamp2DA' ( uniform highp isampler2DArray) +0:32 Constant: +0:32 0.100000 +0:32 0.100000 +0:32 0.100000 +0:32 Constant: +0:32 1 (const int) +0:32 1 (const int) +0:32 Constant: +0:32 3 (const int) +0:33 move second child to first child ( temp highp 4-component vector of int) +0:33 'iv4' ( temp mediump 4-component vector of int) +0:33 textureGatherOffset ( global highp 4-component vector of int) +0:33 'isamp2DA' ( uniform highp isampler2DArray) +0:33 Constant: +0:33 0.100000 +0:33 0.100000 +0:33 0.100000 +0:33 Constant: +0:33 0 (const int) +0:33 0 (const int) +0:34 move second child to first child ( temp highp 4-component vector of int) +0:34 'iv4' ( temp mediump 4-component vector of int) +0:34 textureGatherOffset ( global highp 4-component vector of int) +0:34 'isamp2DA' ( uniform highp isampler2DArray) +0:34 Constant: +0:34 0.100000 +0:34 0.100000 +0:34 0.100000 +0:34 Construct ivec2 ( temp highp 2-component vector of int) +0:34 'i' ( uniform mediump int) +0:38 Function Definition: foo23( ( global void) +0:38 Function Parameters: +0:? Sequence +0:42 textureProjGradOffset ( global highp 4-component vector of uint) +0:42 'usamp2d' ( uniform highp usampler2D) +0:42 'outp' ( out mediump 4-component vector of float) +0:42 Constant: +0:42 0.000000 +0:42 0.000000 +0:42 Constant: +0:42 0.000000 +0:42 0.000000 +0:42 Convert float to int ( temp highp 2-component vector of int) +0:42 'c2D' ( smooth in mediump 2-component vector of float) +0:43 textureProjGradOffset ( global highp 4-component vector of uint) +0:43 'usamp2d' ( uniform highp usampler2D) +0:43 'outp' ( out mediump 4-component vector of float) +0:43 Constant: +0:43 0.000000 +0:43 0.000000 +0:43 Constant: +0:43 0.000000 +0:43 0.000000 +0:43 Constant: +0:43 3 (const int) +0:43 4 (const int) +0:44 textureProjGradOffset ( global highp 4-component vector of uint) +0:44 'usamp2d' ( uniform highp usampler2D) +0:44 'outp' ( out mediump 4-component vector of float) +0:44 Constant: +0:44 0.000000 +0:44 0.000000 +0:44 Constant: +0:44 0.000000 +0:44 0.000000 +0:44 Constant: +0:44 15 (const int) +0:44 16 (const int) +0:45 textureProjGradOffset ( global highp 4-component vector of uint) +0:45 'usamp2d' ( uniform highp usampler2D) +0:45 'outp' ( out mediump 4-component vector of float) +0:45 Constant: +0:45 0.000000 +0:45 0.000000 +0:45 Constant: +0:45 0.000000 +0:45 0.000000 +0:45 Constant: +0:45 -10 (const int) +0:45 20 (const int) +0:47 Test condition and select ( temp void) +0:47 Condition +0:47 'gl_HelperInvocation' ( in bool HelperInvocation) +0:47 true case +0:48 Pre-Increment ( temp mediump 4-component vector of float) +0:48 'outp' ( out mediump 4-component vector of float) +0:50 Sequence +0:50 move second child to first child ( temp mediump int) +0:50 'sum' ( temp mediump int) +0:50 Constant: +0:50 32 (const int) +0:58 move second child to first child ( temp bool) +0:58 'b1' ( temp bool) +0:58 mix ( global bool) +0:58 'b2' ( temp bool) +0:58 'b3' ( temp bool) +0:58 'b' ( temp bool) +0:59 Sequence +0:59 move second child to first child ( temp mediump 3-component vector of uint) +0:59 'um3' ( temp mediump 3-component vector of uint) +0:59 mix ( global mediump 3-component vector of uint) +0:59 Construct uvec3 ( temp mediump 3-component vector of uint) +0:59 Convert int to uint ( temp mediump uint) +0:59 'i' ( uniform mediump int) +0:59 Construct uvec3 ( temp mediump 3-component vector of uint) +0:59 Convert int to uint ( temp mediump uint) +0:59 'i' ( uniform mediump int) +0:59 Construct bvec3 ( temp 3-component vector of bool) +0:59 'b' ( temp bool) +0:60 Sequence +0:60 move second child to first child ( temp mediump 4-component vector of int) +0:60 'im4' ( temp mediump 4-component vector of int) +0:60 mix ( global mediump 4-component vector of int) +0:60 Construct ivec4 ( temp mediump 4-component vector of int) +0:60 'i' ( uniform mediump int) +0:60 Construct ivec4 ( temp mediump 4-component vector of int) +0:60 'i' ( uniform mediump int) +0:60 Construct bvec4 ( temp 4-component vector of bool) +0:60 'b' ( temp bool) +0:98 Function Definition: foots( ( global void) +0:98 Function Parameters: +0:100 Sequence +0:100 Sequence +0:100 move second child to first child ( temp highp 2-component vector of int) +0:100 'v2' ( temp highp 2-component vector of int) +0:100 textureSize ( global highp 2-component vector of int) +0:100 's1' (layout( binding=3) uniform highp sampler2D) +0:100 Constant: +0:100 2 (const int) +0:101 Sequence +0:101 move second child to first child ( temp highp 3-component vector of int) +0:101 'v3' ( temp highp 3-component vector of int) +0:101 textureSize ( global highp 3-component vector of int) +0:101 'isamp2DA' ( uniform highp isampler2DArray) +0:101 Constant: +0:101 3 (const int) +0:102 move second child to first child ( temp highp 2-component vector of int) +0:102 'v2' ( temp highp 2-component vector of int) +0:102 textureSize ( global highp 2-component vector of int, operation at mediump) +0:102 's2dms' ( uniform mediump sampler2DMS) +0:103 move second child to first child ( temp highp 2-component vector of int) +0:103 'v2' ( temp highp 2-component vector of int) +0:103 imageQuerySize ( global highp 2-component vector of int) +0:103 'i2D' (layout( binding=2) writeonly uniform highp image2D) +0:104 move second child to first child ( temp highp 3-component vector of int) +0:104 'v3' ( temp highp 3-component vector of int) +0:104 imageQuerySize ( global highp 3-component vector of int, operation at mediump) +0:104 'i3D' (layout( binding=4) readonly uniform mediump image3D) +0:105 move second child to first child ( temp highp 2-component vector of int) +0:105 'v2' ( temp highp 2-component vector of int) +0:105 imageQuerySize ( global highp 2-component vector of int, operation at mediump) +0:105 'iCube' (layout( binding=5) uniform mediump imageCube) +0:106 move second child to first child ( temp highp 3-component vector of int) +0:106 'v3' ( temp highp 3-component vector of int) +0:106 imageQuerySize ( global highp 3-component vector of int, operation at mediump) +0:106 'i2DA' (layout( binding=6) uniform mediump image2DArray) +0:107 move second child to first child ( temp highp 2-component vector of int) +0:107 'v2' ( temp highp 2-component vector of int) +0:107 imageQuerySize ( global highp 2-component vector of int, operation at mediump) +0:107 'i2Dqualified' (layout( binding=6) coherent volatile restrict uniform mediump image2D) +0:165 Function Definition: fooIO( ( global void) +0:165 Function Parameters: +0:167 Sequence +0:167 Sequence +0:167 move second child to first child ( temp mediump 4-component vector of float) +0:167 'v' ( temp mediump 4-component vector of float) +0:167 add ( temp mediump 4-component vector of float) +0:167 v: direct index for structure ( in mediump 4-component vector of float) +0:167 'inbinst' ( in block{ in mediump int a, in mediump 4-component vector of float v, in structure{ global mediump int b} s}) +0:167 Constant: +0:167 1 (const int) +0:167 vAnon: direct index for structure (layout( location=13) centroid in mediump 4-component vector of float) +0:167 'anon@0' ( in block{layout( location=12) in mediump int aAnon, layout( location=13) centroid in mediump 4-component vector of float vAnon}) +0:167 Constant: +0:167 1 (const uint) +0:168 vector scale second child into first child ( temp mediump 4-component vector of float) +0:168 'v' ( temp mediump 4-component vector of float) +0:168 f: direct index for structure ( in mediump float) +0:168 direct index ( temp block{ in mediump float f}) +0:168 'arrayedInst' ( in 4-element array of block{ in mediump float f}) +0:168 Constant: +0:168 2 (const int) +0:168 Constant: +0:168 0 (const int) +0:169 vector scale second child into first child ( temp mediump 4-component vector of float) +0:169 'v' ( temp mediump 4-component vector of float) +0:169 f: direct index for structure ( in mediump float) +0:169 indirect index ( temp block{ in mediump float f}) +0:169 'arrayedInst' ( in 4-element array of block{ in mediump float f}) +0:169 'i' ( uniform mediump int) +0:169 Constant: +0:169 0 (const int) +0:179 Function Definition: foo_IO( ( global void) +0:179 Function Parameters: +0:181 Sequence +0:181 move second child to first child ( temp highp float) +0:181 'gl_FragDepth' ( gl_FragDepth highp float FragDepth) +0:181 Constant: +0:181 0.200000 +0:182 'gl_Layer' ( flat in highp int Layer) +0:183 'gl_PrimitiveID' ( flat in highp int PrimitiveID) +0:184 Sequence +0:184 move second child to first child ( temp bool) +0:184 'f' ( temp bool) +0:184 'gl_FrontFacing' ( gl_FrontFacing bool Face) +0:191 Function Definition: foo_GS( ( global void) +0:191 Function Parameters: +0:193 Sequence +0:193 Sequence +0:193 move second child to first child ( temp highp int) +0:193 'l' ( temp highp int) +0:193 'gl_Layer' ( flat in highp int Layer) +0:194 Sequence +0:194 move second child to first child ( temp highp int) +0:194 'p' ( temp highp int) +0:194 'gl_PrimitiveID' ( flat in highp int PrimitiveID) +0:207 Function Definition: pfooBad( ( global void) +0:207 Function Parameters: +0:? Sequence +0:210 move second child to first child ( temp mediump 2-component vector of float) +0:210 'h' ( noContraction temp mediump 2-component vector of float) +0:210 fma ( global mediump 2-component vector of float) +0:210 'inf' ( smooth in mediump 2-component vector of float) +0:210 'ing' ( smooth in mediump 2-component vector of float) +0:210 'h' ( noContraction temp mediump 2-component vector of float) +0:211 textureGatherOffset ( global highp 4-component vector of float) +0:211 direct index ( temp highp sampler2D) +0:211 'sArray' ( uniform 4-element array of highp sampler2D) +0:211 Constant: +0:211 0 (const int) +0:211 Constant: +0:211 0.100000 +0:211 0.100000 +0:211 Convert float to int ( temp highp 2-component vector of int) +0:211 'inf' ( smooth in mediump 2-component vector of float) +0:212 textureGatherOffsets ( global highp 4-component vector of float) +0:212 direct index ( temp highp sampler2D) +0:212 'sArray' ( uniform 4-element array of highp sampler2D) +0:212 Constant: +0:212 0 (const int) +0:212 Constant: +0:212 0.100000 +0:212 0.100000 +0:212 Constant: +0:212 0 (const int) +0:212 0 (const int) +0:212 0 (const int) +0:212 0 (const int) +0:212 0 (const int) +0:212 0 (const int) +0:212 0 (const int) +0:212 0 (const int) +0:217 Function Definition: pfoo( ( global void) +0:217 Function Parameters: +0:? Sequence +0:220 move second child to first child ( temp mediump 2-component vector of float) +0:220 'h' ( noContraction temp mediump 2-component vector of float) +0:220 fma ( global mediump 2-component vector of float) +0:220 'inf' ( smooth in mediump 2-component vector of float) +0:220 'ing' ( smooth in mediump 2-component vector of float) +0:220 'h' ( noContraction temp mediump 2-component vector of float) +0:221 textureGatherOffset ( global highp 4-component vector of float) +0:221 direct index ( temp highp sampler2D) +0:221 'sArray' ( uniform 4-element array of highp sampler2D) +0:221 Constant: +0:221 0 (const int) +0:221 Constant: +0:221 0.100000 +0:221 0.100000 +0:221 Convert float to int ( temp highp 2-component vector of int) +0:221 'inf' ( smooth in mediump 2-component vector of float) +0:222 textureGatherOffsets ( global highp 4-component vector of float) +0:222 direct index ( temp highp sampler2D) +0:222 'sArray' ( uniform 4-element array of highp sampler2D) +0:222 Constant: +0:222 0 (const int) +0:222 Constant: +0:222 0.100000 +0:222 0.100000 +0:222 Constant: +0:222 0 (const int) +0:222 0 (const int) +0:222 0 (const int) +0:222 0 (const int) +0:222 0 (const int) +0:222 0 (const int) +0:222 0 (const int) +0:222 0 (const int) +0:223 textureGatherOffsets ( global highp 4-component vector of float) +0:223 direct index ( temp highp sampler2D) +0:223 'sArray' ( uniform 4-element array of highp sampler2D) +0:223 Constant: +0:223 0 (const int) +0:223 Constant: +0:223 0.100000 +0:223 0.100000 +0:223 'offsets' ( uniform 4-element array of mediump 2-component vector of int) +0:248 Function Definition: CAT( ( global void) +0:248 Function Parameters: +0:250 Sequence +0:250 Sequence +0:250 move second child to first child ( temp highp 4-component vector of float) +0:250 'b4' ( temp highp 4-component vector of float) +0:250 texture ( global highp 4-component vector of float) +0:250 'CA4' ( uniform highp samplerCubeArray) +0:250 Constant: +0:250 0.500000 +0:250 0.500000 +0:250 0.500000 +0:250 0.500000 +0:250 Constant: +0:250 0.240000 +0:251 Sequence +0:251 move second child to first child ( temp highp 4-component vector of int) +0:251 'b6' ( temp highp 4-component vector of int) +0:251 texture ( global highp 4-component vector of int) +0:251 'CA6' ( uniform highp isamplerCubeArray) +0:251 Constant: +0:251 0.500000 +0:251 0.500000 +0:251 0.500000 +0:251 0.500000 +0:251 Constant: +0:251 0.260000 +0:252 Sequence +0:252 move second child to first child ( temp highp 4-component vector of uint) +0:252 'b7' ( temp highp 4-component vector of uint) +0:252 texture ( global highp 4-component vector of uint) +0:252 'CA7' ( uniform highp usamplerCubeArray) +0:252 Constant: +0:252 0.500000 +0:252 0.500000 +0:252 0.500000 +0:252 0.500000 +0:252 Constant: +0:252 0.270000 +0:255 Function Definition: badSample( ( global void) +0:255 Function Parameters: +0:257 Sequence +0:257 Sequence +0:257 move second child to first child ( temp lowp int) +0:257 'a1' ( temp lowp int) +0:257 'gl_SampleID' ( flat in lowp int SampleId) +0:258 Sequence +0:258 move second child to first child ( temp mediump 2-component vector of float) +0:258 'a2' ( temp mediump 2-component vector of float) +0:258 'gl_SamplePosition' ( smooth in mediump 2-component vector of float SamplePosition) +0:259 Sequence +0:259 move second child to first child ( temp highp int) +0:259 'a3' ( temp highp int) +0:259 direct index ( flat temp highp int SampleMaskIn) +0:259 'gl_SampleMaskIn' ( flat in implicitly-sized array of highp int SampleMaskIn) +0:259 Constant: +0:259 0 (const int) +0:260 move second child to first child ( temp highp int) +0:260 direct index ( temp highp int SampleMaskIn) +0:260 'gl_SampleMask' ( out implicitly-sized array of highp int SampleMaskIn) +0:260 Constant: +0:260 0 (const int) +0:260 'a3' ( temp highp int) +0:261 Sequence +0:261 move second child to first child ( temp mediump int) +0:261 'n' ( temp mediump int) +0:261 'gl_NumSamples' ( uniform lowp int) +0:268 Function Definition: goodSample( ( global void) +0:268 Function Parameters: +0:270 Sequence +0:270 Sequence +0:270 move second child to first child ( temp lowp int) +0:270 'a1' ( temp lowp int) +0:270 'gl_SampleID' ( flat in lowp int SampleId) +0:271 Sequence +0:271 move second child to first child ( temp mediump 2-component vector of float) +0:271 'a2' ( temp mediump 2-component vector of float) +0:271 'gl_SamplePosition' ( smooth in mediump 2-component vector of float SamplePosition) +0:272 Sequence +0:272 move second child to first child ( temp highp int) +0:272 'a3' ( temp highp int) +0:272 direct index ( flat temp highp int SampleMaskIn) +0:272 'gl_SampleMaskIn' ( flat in implicitly-sized array of highp int SampleMaskIn) +0:272 Constant: +0:272 0 (const int) +0:273 move second child to first child ( temp highp int) +0:273 direct index ( temp highp int SampleMaskIn) +0:273 'gl_SampleMask' ( out implicitly-sized array of highp int SampleMaskIn) +0:273 Constant: +0:273 0 (const int) +0:273 'a3' ( temp highp int) +0:274 Sequence +0:274 move second child to first child ( temp mediump int) +0:274 'n1' ( temp mediump int) +0:274 Constant: +0:274 4 (const int) +0:275 Sequence +0:275 move second child to first child ( temp mediump int) +0:275 'n2' ( temp mediump int) +0:275 'gl_NumSamples' ( uniform lowp int) +0:283 Function Definition: badImageAtom( ( global void) +0:283 Function Parameters: +0:? Sequence +0:289 imageAtomicAdd ( global highp int) +0:289 'im2Di' (layout( r32i) uniform highp iimage2D) +0:289 'P' ( uniform mediump 2-component vector of int) +0:289 'dati' ( temp mediump int) +0:290 imageAtomicAdd ( global highp uint) +0:290 'im2Du' (layout( r32ui) uniform highp uimage2D) +0:290 'P' ( uniform mediump 2-component vector of int) +0:290 'datu' ( temp mediump uint) +0:291 imageAtomicMin ( global highp int) +0:291 'im2Di' (layout( r32i) uniform highp iimage2D) +0:291 'P' ( uniform mediump 2-component vector of int) +0:291 'dati' ( temp mediump int) +0:292 imageAtomicMin ( global highp uint) +0:292 'im2Du' (layout( r32ui) uniform highp uimage2D) +0:292 'P' ( uniform mediump 2-component vector of int) +0:292 'datu' ( temp mediump uint) +0:293 imageAtomicMax ( global highp int) +0:293 'im2Di' (layout( r32i) uniform highp iimage2D) +0:293 'P' ( uniform mediump 2-component vector of int) +0:293 'dati' ( temp mediump int) +0:294 imageAtomicMax ( global highp uint) +0:294 'im2Du' (layout( r32ui) uniform highp uimage2D) +0:294 'P' ( uniform mediump 2-component vector of int) +0:294 'datu' ( temp mediump uint) +0:295 imageAtomicAnd ( global highp int) +0:295 'im2Di' (layout( r32i) uniform highp iimage2D) +0:295 'P' ( uniform mediump 2-component vector of int) +0:295 'dati' ( temp mediump int) +0:296 imageAtomicAnd ( global highp uint) +0:296 'im2Du' (layout( r32ui) uniform highp uimage2D) +0:296 'P' ( uniform mediump 2-component vector of int) +0:296 'datu' ( temp mediump uint) +0:297 imageAtomicOr ( global highp int) +0:297 'im2Di' (layout( r32i) uniform highp iimage2D) +0:297 'P' ( uniform mediump 2-component vector of int) +0:297 'dati' ( temp mediump int) +0:298 imageAtomicOr ( global highp uint) +0:298 'im2Du' (layout( r32ui) uniform highp uimage2D) +0:298 'P' ( uniform mediump 2-component vector of int) +0:298 'datu' ( temp mediump uint) +0:299 imageAtomicXor ( global highp int) +0:299 'im2Di' (layout( r32i) uniform highp iimage2D) +0:299 'P' ( uniform mediump 2-component vector of int) +0:299 'dati' ( temp mediump int) +0:300 imageAtomicXor ( global highp uint) +0:300 'im2Du' (layout( r32ui) uniform highp uimage2D) +0:300 'P' ( uniform mediump 2-component vector of int) +0:300 'datu' ( temp mediump uint) +0:301 imageAtomicExchange ( global highp int) +0:301 'im2Di' (layout( r32i) uniform highp iimage2D) +0:301 'P' ( uniform mediump 2-component vector of int) +0:301 'dati' ( temp mediump int) +0:302 imageAtomicExchange ( global highp uint) +0:302 'im2Du' (layout( r32ui) uniform highp uimage2D) +0:302 'P' ( uniform mediump 2-component vector of int) +0:302 'datu' ( temp mediump uint) +0:303 imageAtomicExchange ( global highp float) +0:303 'im2Df' (layout( r32f) uniform highp image2D) +0:303 'P' ( uniform mediump 2-component vector of int) +0:303 'datf' ( temp mediump float) +0:304 imageAtomicCompSwap ( global highp int) +0:304 'im2Di' (layout( r32i) uniform highp iimage2D) +0:304 'P' ( uniform mediump 2-component vector of int) +0:304 Constant: +0:304 3 (const int) +0:304 'dati' ( temp mediump int) +0:305 imageAtomicCompSwap ( global highp uint) +0:305 'im2Du' (layout( r32ui) uniform highp uimage2D) +0:305 'P' ( uniform mediump 2-component vector of int) +0:305 Constant: +0:305 5 (const uint) +0:305 'datu' ( temp mediump uint) +0:316 Function Definition: goodImageAtom( ( global void) +0:316 Function Parameters: +0:? Sequence +0:322 imageAtomicAdd ( global highp int) +0:322 'im2Di' (layout( r32i) uniform highp iimage2D) +0:322 'P' ( uniform mediump 2-component vector of int) +0:322 'dati' ( temp mediump int) +0:323 imageAtomicAdd ( global highp uint) +0:323 'im2Du' (layout( r32ui) uniform highp uimage2D) +0:323 'P' ( uniform mediump 2-component vector of int) +0:323 'datu' ( temp mediump uint) +0:324 imageAtomicMin ( global highp int) +0:324 'im2Di' (layout( r32i) uniform highp iimage2D) +0:324 'P' ( uniform mediump 2-component vector of int) +0:324 'dati' ( temp mediump int) +0:325 imageAtomicMin ( global highp uint) +0:325 'im2Du' (layout( r32ui) uniform highp uimage2D) +0:325 'P' ( uniform mediump 2-component vector of int) +0:325 'datu' ( temp mediump uint) +0:326 imageAtomicMax ( global highp int) +0:326 'im2Di' (layout( r32i) uniform highp iimage2D) +0:326 'P' ( uniform mediump 2-component vector of int) +0:326 'dati' ( temp mediump int) +0:327 imageAtomicMax ( global highp uint) +0:327 'im2Du' (layout( r32ui) uniform highp uimage2D) +0:327 'P' ( uniform mediump 2-component vector of int) +0:327 'datu' ( temp mediump uint) +0:328 imageAtomicAnd ( global highp int) +0:328 'im2Di' (layout( r32i) uniform highp iimage2D) +0:328 'P' ( uniform mediump 2-component vector of int) +0:328 'dati' ( temp mediump int) +0:329 imageAtomicAnd ( global highp uint) +0:329 'im2Du' (layout( r32ui) uniform highp uimage2D) +0:329 'P' ( uniform mediump 2-component vector of int) +0:329 'datu' ( temp mediump uint) +0:330 imageAtomicOr ( global highp int) +0:330 'im2Di' (layout( r32i) uniform highp iimage2D) +0:330 'P' ( uniform mediump 2-component vector of int) +0:330 'dati' ( temp mediump int) +0:331 imageAtomicOr ( global highp uint) +0:331 'im2Du' (layout( r32ui) uniform highp uimage2D) +0:331 'P' ( uniform mediump 2-component vector of int) +0:331 'datu' ( temp mediump uint) +0:332 imageAtomicXor ( global highp int) +0:332 'im2Di' (layout( r32i) uniform highp iimage2D) +0:332 'P' ( uniform mediump 2-component vector of int) +0:332 'dati' ( temp mediump int) +0:333 imageAtomicXor ( global highp uint) +0:333 'im2Du' (layout( r32ui) uniform highp uimage2D) +0:333 'P' ( uniform mediump 2-component vector of int) +0:333 'datu' ( temp mediump uint) +0:334 imageAtomicExchange ( global highp int) +0:334 'im2Di' (layout( r32i) uniform highp iimage2D) +0:334 'P' ( uniform mediump 2-component vector of int) +0:334 'dati' ( temp mediump int) +0:335 imageAtomicExchange ( global highp uint) +0:335 'im2Du' (layout( r32ui) uniform highp uimage2D) +0:335 'P' ( uniform mediump 2-component vector of int) +0:335 'datu' ( temp mediump uint) +0:336 imageAtomicExchange ( global highp float) +0:336 'im2Df' (layout( r32f) uniform highp image2D) +0:336 'P' ( uniform mediump 2-component vector of int) +0:336 'datf' ( temp mediump float) +0:337 imageAtomicCompSwap ( global highp int) +0:337 'im2Di' (layout( r32i) uniform highp iimage2D) +0:337 'P' ( uniform mediump 2-component vector of int) +0:337 Constant: +0:337 3 (const int) +0:337 'dati' ( temp mediump int) +0:338 imageAtomicCompSwap ( global highp uint) +0:338 'im2Du' (layout( r32ui) uniform highp uimage2D) +0:338 'P' ( uniform mediump 2-component vector of int) +0:338 Constant: +0:338 5 (const uint) +0:338 'datu' ( temp mediump uint) +0:340 imageAtomicMax ( global highp int) +0:340 'badIm2Di' (layout( rgba16i) uniform highp iimage2D) +0:340 'P' ( uniform mediump 2-component vector of int) +0:340 'dati' ( temp mediump int) +0:341 imageAtomicMax ( global highp uint) +0:341 'badIm2Du' (layout( rgba8ui) uniform highp uimage2D) +0:341 'P' ( uniform mediump 2-component vector of int) +0:341 'datu' ( temp mediump uint) +0:342 imageAtomicExchange ( global highp float) +0:342 'badIm2Df' (layout( rgba32f) uniform highp image2D) +0:342 'P' ( uniform mediump 2-component vector of int) +0:342 'datf' ( temp mediump float) +0:353 Function Definition: badInterp( ( global void) +0:353 Function Parameters: +0:355 Sequence +0:355 interpolateAtCentroid ( global mediump 2-component vector of float) +0:355 'colorfc' ( centroid flat in mediump 2-component vector of float) +0:356 interpolateAtSample ( global mediump 2-component vector of float) +0:356 'colorfc' ( centroid flat in mediump 2-component vector of float) +0:356 Constant: +0:356 1 (const int) +0:357 interpolateAtOffset ( global mediump 2-component vector of float) +0:357 'colorfc' ( centroid flat in mediump 2-component vector of float) +0:357 Constant: +0:357 0.200000 +0:357 0.200000 +0:369 Function Definition: interp( ( global void) +0:369 Function Parameters: +0:? Sequence +0:376 move second child to first child ( temp mediump 2-component vector of float) +0:376 'res2' ( temp mediump 2-component vector of float) +0:376 interpolateAtCentroid ( global mediump 2-component vector of float) +0:376 'colorfc' ( centroid flat in mediump 2-component vector of float) +0:377 move second child to first child ( temp mediump 4-component vector of float) +0:377 'res4' ( temp mediump 4-component vector of float) +0:377 interpolateAtCentroid ( global mediump 4-component vector of float) +0:377 'colorSampIn' ( smooth sample in mediump 4-component vector of float) +0:378 move second child to first child ( temp mediump 4-component vector of float) +0:378 'res4' ( temp mediump 4-component vector of float) +0:378 interpolateAtCentroid ( global mediump 4-component vector of float) +0:378 'colorfsi' ( flat sample in mediump 4-component vector of float) +0:379 move second child to first child ( temp mediump float) +0:379 'res' ( temp mediump float) +0:379 interpolateAtCentroid ( global mediump float) +0:379 'scalarIn' ( smooth in mediump float) +0:380 'res3' ( temp mediump 3-component vector of float) +0:381 move second child to first child ( temp mediump 3-component vector of float) +0:381 'res3' ( temp mediump 3-component vector of float) +0:381 interpolateAtCentroid ( global mediump 3-component vector of float) +0:381 direct index ( smooth sample temp mediump 3-component vector of float) +0:381 'sampInArray' ( smooth sample in 4-element array of mediump 3-component vector of float) +0:381 Constant: +0:381 2 (const int) +0:382 move second child to first child ( temp mediump 2-component vector of float) +0:382 'res2' ( temp mediump 2-component vector of float) +0:382 interpolateAtCentroid ( global mediump 2-component vector of float) +0:382 vector swizzle ( temp mediump 2-component vector of float) +0:382 direct index ( smooth sample temp mediump 3-component vector of float) +0:382 'sampInArray' ( smooth sample in 4-element array of mediump 3-component vector of float) +0:382 Constant: +0:382 2 (const int) +0:382 Sequence +0:382 Constant: +0:382 0 (const int) +0:382 Constant: +0:382 1 (const int) +0:384 'res3' ( temp mediump 3-component vector of float) +0:385 move second child to first child ( temp mediump 3-component vector of float) +0:385 'res3' ( temp mediump 3-component vector of float) +0:385 interpolateAtSample ( global mediump 3-component vector of float) +0:385 indirect index ( smooth sample temp mediump 3-component vector of float) +0:385 'sampInArray' ( smooth sample in 4-element array of mediump 3-component vector of float) +0:385 'i' ( uniform mediump int) +0:385 Constant: +0:385 0 (const int) +0:386 move second child to first child ( temp mediump 2-component vector of float) +0:386 'res2' ( temp mediump 2-component vector of float) +0:386 interpolateAtSample ( global mediump 2-component vector of float) +0:386 vector swizzle ( temp mediump 2-component vector of float) +0:386 direct index ( smooth sample temp mediump 3-component vector of float) +0:386 'sampInArray' ( smooth sample in 4-element array of mediump 3-component vector of float) +0:386 Constant: +0:386 2 (const int) +0:386 Sequence +0:386 Constant: +0:386 0 (const int) +0:386 Constant: +0:386 1 (const int) +0:386 Constant: +0:386 2 (const int) +0:387 move second child to first child ( temp mediump float) +0:387 'res' ( temp mediump float) +0:387 interpolateAtSample ( global mediump float) +0:387 'scalarIn' ( smooth in mediump float) +0:387 Constant: +0:387 1 (const int) +0:389 'res3' ( temp mediump 3-component vector of float) +0:390 move second child to first child ( temp mediump 3-component vector of float) +0:390 'res3' ( temp mediump 3-component vector of float) +0:390 interpolateAtOffset ( global mediump 3-component vector of float) +0:390 direct index ( smooth sample temp mediump 3-component vector of float) +0:390 'sampInArray' ( smooth sample in 4-element array of mediump 3-component vector of float) +0:390 Constant: +0:390 2 (const int) +0:390 Constant: +0:390 0.200000 +0:390 0.200000 +0:391 move second child to first child ( temp mediump 2-component vector of float) +0:391 'res2' ( temp mediump 2-component vector of float) +0:391 interpolateAtOffset ( global mediump 2-component vector of float) +0:391 vector swizzle ( temp mediump 2-component vector of float) +0:391 direct index ( smooth sample temp mediump 3-component vector of float) +0:391 'sampInArray' ( smooth sample in 4-element array of mediump 3-component vector of float) +0:391 Constant: +0:391 2 (const int) +0:391 Sequence +0:391 Constant: +0:391 0 (const int) +0:391 Constant: +0:391 1 (const int) +0:391 Constant: +0:391 0.200000 +0:391 0.200000 +0:392 move second child to first child ( temp mediump float) +0:392 'res' ( temp mediump float) +0:392 interpolateAtOffset ( global mediump float) +0:392 add ( temp mediump float) +0:392 'scalarIn' ( smooth in mediump float) +0:392 'scalarIn' ( smooth in mediump float) +0:392 Constant: +0:392 0.200000 +0:392 0.200000 +0:393 move second child to first child ( temp mediump float) +0:393 'res' ( temp mediump float) +0:393 interpolateAtOffset ( global mediump float) +0:393 'scalarIn' ( smooth in mediump float) +0:393 Constant: +0:393 0.200000 +0:393 0.200000 +0:396 move second child to first child ( temp mediump float) +0:396 'res' ( temp mediump float) +0:396 interpolateAtCentroid ( global mediump float) +0:396 'f' ( temp mediump float) +0:397 move second child to first child ( temp mediump 4-component vector of float) +0:397 'res4' ( temp mediump 4-component vector of float) +0:397 interpolateAtSample ( global mediump 4-component vector of float) +0:397 'outp' ( out mediump 4-component vector of float) +0:397 Constant: +0:397 0 (const int) +0:427 Function Definition: blendFoo( ( temp void) +0:427 Function Parameters: +0:428 Function Definition: blendFoo(vf3; ( global void) +0:428 Function Parameters: +0:428 'v' ( in mediump 3-component vector of float) +0:433 Function Definition: devi( ( global void) +0:433 Function Parameters: +0:435 Sequence +0:435 'gl_DeviceIndex' ( flat in highp int DeviceIndex) +0:436 'gl_ViewIndex' ( flat in highp int ViewIndex) +0:447 Function Definition: devie( ( global void) +0:447 Function Parameters: +0:449 Sequence +0:449 'gl_DeviceIndex' ( flat in highp int DeviceIndex) +0:450 'gl_ViewIndex' ( flat in highp int ViewIndex) +0:? Linker Objects +0:? 'gl_FragCoord' ( smooth in mediump 4-component vector of float) +0:? 'v3' (layout( location=2) smooth in mediump 3-component vector of float) +0:? 'yi' (layout( location=2) smooth in mediump 4X4 matrix of float) +0:? 'arrayedSampler' ( uniform 5-element array of highp sampler2D) +0:? 'usamp2d' ( uniform highp usampler2D) +0:? 'samp2dr' ( uniform mediump usampler2DRect) +0:? 'isamp2DA' ( uniform highp isampler2DArray) +0:? 'c2D' ( smooth in mediump 2-component vector of float) +0:? 'i' ( uniform mediump int) +0:? 'outp' ( out mediump 4-component vector of float) +0:? 's1' (layout( binding=3) uniform highp sampler2D) +0:? 's2' (layout( binding=3) uniform highp sampler2D) +0:? 'i2D' (layout( binding=2) writeonly uniform highp image2D) +0:? 'i3D' (layout( binding=4) readonly uniform mediump image3D) +0:? 'iCube' (layout( binding=5) uniform mediump imageCube) +0:? 'i2DA' (layout( binding=6) uniform mediump image2DArray) +0:? 'i2Dqualified' (layout( binding=6) coherent volatile restrict uniform mediump image2D) +0:? 'bbi' (layout( binding=1 column_major shared) uniform block{layout( column_major shared) uniform mediump int foo, layout( binding=2 column_major shared) uniform mediump float f}) +0:? 'centroidIn' ( centroid smooth in mediump 4-component vector of float) +0:? 'bigl' ( uniform mediump 4-component vector of float) +0:? 'bigout1' (layout( location=40) out mediump 4-component vector of float) +0:? 'bigout2' (layout( location=40) out mediump 4-component vector of float) +0:? 'neg' ( out mediump 4-component vector of float) +0:? 'b430i' (layout( column_major std430) buffer block{layout( column_major std430 offset=0) buffer mediump int i}) +0:? 'bshari' (layout( column_major shared) uniform block{layout( column_major shared) uniform mediump int i}) +0:? 'smoothIn' ( smooth in mediump 4-component vector of float) +0:? 'flatIn' ( flat in mediump int) +0:? 's2dms' ( uniform mediump sampler2DMS) +0:? 'bout' ( out bool) +0:? 'imageOut' ( out highp image2D) +0:? 'mout' ( out mediump 2X3 matrix of float) +0:? 'inb' ( smooth in bool) +0:? 'ino' ( smooth in highp sampler2D) +0:? 'ina' ( smooth in 4-element array of mediump float) +0:? 'inaa' ( smooth in 4-element array of 2-element array of mediump float) +0:? 'ins' ( smooth in structure{ global mediump float f}) +0:? 'inasa' ( smooth in 4-element array of structure{ global mediump float f}) +0:? 'insa' ( smooth in 4-element array of structure{ global mediump float f}) +0:? 'inSA' ( smooth in structure{ global 4-element array of mediump float f}) +0:? 'inSS' ( smooth in structure{ global mediump float f, global structure{ global mediump float f} s}) +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:? '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 highp 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:? 'colorSampInBad' ( smooth sample in mediump 4-component vector of float) +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: 310 +Requested GL_EXT_device_group +Requested GL_EXT_multiview +Requested GL_EXT_shader_io_blocks +Requested GL_EXT_texture_cube_map_array +Requested GL_KHR_blend_equation_advanced +Requested GL_OES_geometry_shader +Requested GL_OES_gpu_shader5 +Requested GL_OES_sample_variables +Requested GL_OES_shader_image_atomic +Requested GL_OES_shader_io_blocks +Requested GL_OES_shader_multisample_interpolation +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:21 Function Definition: main( ( global void) +0:21 Function Parameters: +0:23 Sequence +0:23 Sequence +0:23 move second child to first child ( temp highp 4-component vector of float) +0:23 'v' ( temp mediump 4-component vector of float) +0:23 texture ( global highp 4-component vector of float) +0:23 indirect index ( temp highp sampler2D) +0:23 'arrayedSampler' ( uniform 5-element array of highp sampler2D) +0:23 'i' ( uniform mediump int) +0:23 'c2D' ( smooth in mediump 2-component vector of float) +0:28 Sequence +0:28 move second child to first child ( temp highp 4-component vector of float) +0:28 'v4' ( temp mediump 4-component vector of float) +0:28 textureGather ( global highp 4-component vector of float) +0:28 direct index ( temp highp sampler2D) +0:28 'arrayedSampler' ( uniform 5-element array of highp sampler2D) +0:28 Constant: +0:28 0 (const int) +0:28 'c2D' ( smooth in mediump 2-component vector of float) +0:29 Sequence +0:29 move second child to first child ( temp highp 4-component vector of int) +0:29 'iv4' ( temp mediump 4-component vector of int) +0:29 textureGatherOffset ( global highp 4-component vector of int) +0:29 'isamp2DA' ( uniform highp isampler2DArray) +0:29 Constant: +0:29 0.100000 +0:29 0.100000 +0:29 0.100000 +0:29 Constant: +0:29 1 (const int) +0:29 1 (const int) +0:29 Constant: +0:29 3 (const int) +0:30 move second child to first child ( temp highp 4-component vector of int) +0:30 'iv4' ( temp mediump 4-component vector of int) +0:30 textureGatherOffset ( global highp 4-component vector of int) +0:30 'isamp2DA' ( uniform highp isampler2DArray) +0:30 Constant: +0:30 0.100000 +0:30 0.100000 +0:30 0.100000 +0:30 Constant: +0:30 1 (const int) +0:30 1 (const int) +0:30 'i' ( uniform mediump int) +0:31 move second child to first child ( temp highp 4-component vector of int) +0:31 'iv4' ( temp mediump 4-component vector of int) +0:31 textureGatherOffset ( global highp 4-component vector of int) +0:31 'isamp2DA' ( uniform highp isampler2DArray) +0:31 Constant: +0:31 0.100000 +0:31 0.100000 +0:31 0.100000 +0:31 Constant: +0:31 1 (const int) +0:31 1 (const int) +0:31 Constant: +0:31 4 (const int) +0:32 move second child to first child ( temp highp 4-component vector of int) +0:32 'iv4' ( temp mediump 4-component vector of int) +0:32 textureGatherOffset ( global highp 4-component vector of int) +0:32 'isamp2DA' ( uniform highp isampler2DArray) +0:32 Constant: +0:32 0.100000 +0:32 0.100000 +0:32 0.100000 +0:32 Constant: +0:32 1 (const int) +0:32 1 (const int) +0:32 Constant: +0:32 3 (const int) +0:33 move second child to first child ( temp highp 4-component vector of int) +0:33 'iv4' ( temp mediump 4-component vector of int) +0:33 textureGatherOffset ( global highp 4-component vector of int) +0:33 'isamp2DA' ( uniform highp isampler2DArray) +0:33 Constant: +0:33 0.100000 +0:33 0.100000 +0:33 0.100000 +0:33 Constant: +0:33 0 (const int) +0:33 0 (const int) +0:34 move second child to first child ( temp highp 4-component vector of int) +0:34 'iv4' ( temp mediump 4-component vector of int) +0:34 textureGatherOffset ( global highp 4-component vector of int) +0:34 'isamp2DA' ( uniform highp isampler2DArray) +0:34 Constant: +0:34 0.100000 +0:34 0.100000 +0:34 0.100000 +0:34 Construct ivec2 ( temp highp 2-component vector of int) +0:34 'i' ( uniform mediump int) +0:? Linker Objects +0:? 'gl_FragCoord' ( smooth in mediump 4-component vector of float) +0:? 'v3' (layout( location=2) smooth in mediump 3-component vector of float) +0:? 'yi' (layout( location=2) smooth in mediump 4X4 matrix of float) +0:? 'arrayedSampler' ( uniform 5-element array of highp sampler2D) +0:? 'usamp2d' ( uniform highp usampler2D) +0:? 'samp2dr' ( uniform mediump usampler2DRect) +0:? 'isamp2DA' ( uniform highp isampler2DArray) +0:? 'c2D' ( smooth in mediump 2-component vector of float) +0:? 'i' ( uniform mediump int) +0:? 'outp' ( out mediump 4-component vector of float) +0:? 's1' (layout( binding=3) uniform highp sampler2D) +0:? 's2' (layout( binding=3) uniform highp sampler2D) +0:? 'i2D' (layout( binding=2) writeonly uniform highp image2D) +0:? 'i3D' (layout( binding=4) readonly uniform mediump image3D) +0:? 'iCube' (layout( binding=5) uniform mediump imageCube) +0:? 'i2DA' (layout( binding=6) uniform mediump image2DArray) +0:? 'i2Dqualified' (layout( binding=6) coherent volatile restrict uniform mediump image2D) +0:? 'bbi' (layout( binding=1 column_major shared) uniform block{layout( column_major shared) uniform mediump int foo, layout( binding=2 column_major shared) uniform mediump float f}) +0:? 'centroidIn' ( centroid smooth in mediump 4-component vector of float) +0:? 'bigl' ( uniform mediump 4-component vector of float) +0:? 'bigout1' (layout( location=40) out mediump 4-component vector of float) +0:? 'bigout2' (layout( location=40) out mediump 4-component vector of float) +0:? 'neg' ( out mediump 4-component vector of float) +0:? 'b430i' (layout( column_major std430) buffer block{layout( column_major std430 offset=0) buffer mediump int i}) +0:? 'bshari' (layout( column_major shared) uniform block{layout( column_major shared) uniform mediump int i}) +0:? 'smoothIn' ( smooth in mediump 4-component vector of float) +0:? 'flatIn' ( flat in mediump int) +0:? 's2dms' ( uniform mediump sampler2DMS) +0:? 'bout' ( out bool) +0:? 'imageOut' ( out highp image2D) +0:? 'mout' ( out mediump 2X3 matrix of float) +0:? 'inb' ( smooth in bool) +0:? 'ino' ( smooth in highp sampler2D) +0:? 'ina' ( smooth in 4-element array of mediump float) +0:? 'inaa' ( smooth in 4-element array of 2-element array of mediump float) +0:? 'ins' ( smooth in structure{ global mediump float f}) +0:? 'inasa' ( smooth in 4-element array of structure{ global mediump float f}) +0:? 'insa' ( smooth in 4-element array of structure{ global mediump float f}) +0:? 'inSA' ( smooth in structure{ global 4-element array of mediump float f}) +0:? 'inSS' ( smooth in structure{ global mediump float f, global structure{ global mediump float f} s}) +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:? '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 highp 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:? 'colorSampInBad' ( smooth sample in mediump 4-component vector of float) +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/310.geom.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.geom.out new file mode 100644 index 0000000..e57c822 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.geom.out @@ -0,0 +1,278 @@ +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 +ERROR: 0:43: 'EmitStreamVertex' : no matching overloaded function found +ERROR: 0:44: 'EndStreamPrimitive' : no matching overloaded function found +ERROR: 0:47: 'gl_ClipDistance' : undeclared identifier +ERROR: 0:47: 'gl_ClipDistance' : left of '[' is not of type array, matrix, or vector +ERROR: 0:48: 'gl_ClipDistance' : no such field in structure +ERROR: 0:48: 'expression' : left of '[' is not of type array, matrix, or vector +ERROR: 0:47: 'assign' : l-value required (can't modify a const) +ERROR: 0:55: 'selecting output stream' : not supported with this profile: es +ERROR: 0:62: 'max_vertices' : too large, must be less than gl_MaxGeometryOutputVertices +ERROR: 0:62: 'max_vertices' : cannot change previously set layout value +ERROR: 0:63: 'max_vertices' : can only apply to a standalone qualifier +ERROR: 0:68: 'points' : cannot change previously set output primitive +ERROR: 0:69: 'points' : cannot change previously set output primitive +ERROR: 0:70: 'triangle_strip' : cannot apply to input +ERROR: 0:71: 'triangle_strip' : cannot apply to: uniform +ERROR: 0:72: 'triangle_strip' : can only apply to a standalone qualifier +ERROR: 0:73: 'triangle_strip' : can only apply to a standalone qualifier +ERROR: 0:74: 'invocations' : can only apply to a standalone qualifier +ERROR: 0:76: 'invocations' : can only apply to a standalone qualifier +ERROR: 0:77: 'max_vertices' : can only apply to a standalone qualifier +ERROR: 0:78: 'triangle_strip' : can only apply to a standalone qualifier +ERROR: 0:81: 'lines' : cannot apply to 'out' +ERROR: 0:83: 'triangles' : cannot change previously set input primitive +ERROR: 0:84: 'triangles_adjacency' : cannot change previously set input primitive +ERROR: 0:116: 'gl_ViewportIndex' : undeclared identifier +ERROR: 0:117: 'gl_MaxViewports' : undeclared identifier +ERROR: 0:123: 'lines_adjacency' : inconsistent input primitive for array size of explArrayBad +ERROR: 0:124: 'in' : type must be an array: nonArrayed +ERROR: 0:128: 'sample' : Reserved word. +ERROR: 0:132: 'component' : not supported with this profile: es +ERROR: 0:136: 'gl_MaxGeometryVaryingComponents' : undeclared identifier +ERROR: 0:137: 'gl_VerticesIn' : undeclared identifier +ERROR: 0:142: 'gl_PointSize' : required extension not requested: Possible extensions include: +GL_EXT_geometry_point_size +GL_OES_geometry_point_size +ERROR: 0:143: 'gl_PointSize' : required extension not requested: Possible extensions include: +GL_EXT_geometry_point_size +GL_OES_geometry_point_size +ERROR: 37 compilation errors. No code generated. + + +Shader version: 310 +Requested GL_EXT_geometry_shader +Requested GL_EXT_shader_io_blocks +Requested GL_OES_geometry_point_size +invocations = 4 +max_vertices = 200 +input primitive = lines_adjacency +output primitive = triangle_strip +ERROR: node is still EOpNull! +0:39 Function Definition: main( ( global void) +0:39 Function Parameters: +0:41 Sequence +0:41 EmitVertex ( global void) +0:42 EndPrimitive ( global void) +0:43 Constant: +0:43 0.000000 +0:44 Constant: +0:44 0.000000 +0:46 move second child to first child ( temp mediump 3-component vector of float) +0:46 color: direct index for structure (layout( stream=0) out mediump 3-component vector of float) +0:46 'anon@0' (layout( stream=0) out block{layout( stream=0) out mediump 3-component vector of float color}) +0:46 Constant: +0:46 0 (const uint) +0:46 color: direct index for structure ( in mediump 3-component vector of float) +0:46 direct index ( temp block{ in mediump 3-component vector of float color}) +0:46 'fromV' ( in 4-element array of block{ in mediump 3-component vector of float color}) +0:46 Constant: +0:46 0 (const int) +0:46 Constant: +0:46 0 (const int) +0:47 move second child to first child ( temp float) +0:47 Constant: +0:47 0.000000 +0:48 Constant: +0:48 0.000000 +0:49 move second child to first child ( temp highp 4-component vector of float) +0:49 gl_Position: direct index for structure (layout( stream=0) gl_Position highp 4-component vector of float Position) +0:49 '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:49 Constant: +0:49 0 (const uint) +0:49 gl_Position: direct index for structure ( in highp 4-component vector of float Position) +0:49 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize}) +0:49 '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:49 Constant: +0:49 0 (const int) +0:49 Constant: +0:49 0 (const int) +0:51 move second child to first child ( temp highp int) +0:51 'gl_PrimitiveID' (layout( stream=0) out highp int PrimitiveID) +0:51 'gl_PrimitiveIDIn' ( in highp int PrimitiveID) +0:52 move second child to first child ( temp highp int) +0:52 'gl_Layer' (layout( stream=0) out highp int Layer) +0:52 Constant: +0:52 2 (const int) +0:63 Function Definition: foo(i1; ( global void) +0:63 Function Parameters: +0:63 'a' ( in highp int) +0:65 Sequence +0:65 move second child to first child ( temp mediump 4-component vector of float) +0:65 a: direct index for structure (layout( stream=0) out mediump 4-component vector of float) +0:65 'ouuaa6' (layout( stream=0) out block{layout( stream=0) out mediump 4-component vector of float a}) +0:65 Constant: +0:65 0 (const int) +0:65 Constant: +0:65 1.000000 +0:65 1.000000 +0:65 1.000000 +0:65 1.000000 +0:114 Function Definition: fooe1( ( global void) +0:114 Function Parameters: +0:116 Sequence +0:116 'gl_ViewportIndex' ( temp float) +0:117 'gl_MaxViewports' ( temp float) +0:118 Constant: +0:118 4 (const int) +0:119 Sequence +0:119 move second child to first child ( temp highp int) +0:119 'inv' ( temp highp int) +0:119 'gl_InvocationID' ( in highp int InvocationID) +0:134 Function Definition: notHere( ( global void) +0:134 Function Parameters: +0:136 Sequence +0:136 'gl_MaxGeometryVaryingComponents' ( temp float) +0:137 'gl_VerticesIn' ( temp float) +0:140 Function Definition: pointSize1( ( global void) +0:140 Function Parameters: +0:142 Sequence +0:142 Sequence +0:142 move second child to first child ( temp highp float) +0:142 'ps' ( temp highp float) +0:142 gl_PointSize: direct index for structure ( in highp float PointSize) +0:142 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize}) +0:142 '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:142 Constant: +0:142 3 (const int) +0:142 Constant: +0:142 1 (const int) +0:143 move second child to first child ( temp highp float) +0:143 gl_PointSize: direct index for structure (layout( stream=0) gl_PointSize highp float PointSize) +0:143 '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:143 Constant: +0:143 1 (const uint) +0:143 'ps' ( temp highp float) +0:148 Function Definition: pointSize2( ( global void) +0:148 Function Parameters: +0:150 Sequence +0:150 Sequence +0:150 move second child to first child ( temp highp float) +0:150 'ps' ( temp highp float) +0:150 gl_PointSize: direct index for structure ( in highp float PointSize) +0:150 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize}) +0:150 '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:150 Constant: +0:150 3 (const int) +0:150 Constant: +0:150 1 (const int) +0:151 move second child to first child ( temp highp float) +0:151 gl_PointSize: direct index for structure (layout( stream=0) gl_PointSize highp float PointSize) +0:151 '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:151 Constant: +0:151 1 (const uint) +0:151 '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: 310 +Requested GL_EXT_geometry_shader +Requested GL_EXT_shader_io_blocks +Requested GL_OES_geometry_point_size +invocations = 4 +max_vertices = 200 +input primitive = lines_adjacency +output primitive = triangle_strip +ERROR: node is still EOpNull! +0:39 Function Definition: main( ( global void) +0:39 Function Parameters: +0:41 Sequence +0:41 EmitVertex ( global void) +0:42 EndPrimitive ( global void) +0:43 Constant: +0:43 0.000000 +0:44 Constant: +0:44 0.000000 +0:46 move second child to first child ( temp mediump 3-component vector of float) +0:46 color: direct index for structure (layout( stream=0) out mediump 3-component vector of float) +0:46 'anon@0' (layout( stream=0) out block{layout( stream=0) out mediump 3-component vector of float color}) +0:46 Constant: +0:46 0 (const uint) +0:46 color: direct index for structure ( in mediump 3-component vector of float) +0:46 direct index ( temp block{ in mediump 3-component vector of float color}) +0:46 'fromV' ( in 4-element array of block{ in mediump 3-component vector of float color}) +0:46 Constant: +0:46 0 (const int) +0:46 Constant: +0:46 0 (const int) +0:47 move second child to first child ( temp float) +0:47 Constant: +0:47 0.000000 +0:48 Constant: +0:48 0.000000 +0:49 move second child to first child ( temp highp 4-component vector of float) +0:49 gl_Position: direct index for structure (layout( stream=0) gl_Position highp 4-component vector of float Position) +0:49 '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:49 Constant: +0:49 0 (const uint) +0:49 gl_Position: direct index for structure ( in highp 4-component vector of float Position) +0:49 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize}) +0:49 '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:49 Constant: +0:49 0 (const int) +0:49 Constant: +0:49 0 (const int) +0:51 move second child to first child ( temp highp int) +0:51 'gl_PrimitiveID' (layout( stream=0) out highp int PrimitiveID) +0:51 'gl_PrimitiveIDIn' ( in highp int PrimitiveID) +0:52 move second child to first child ( temp highp int) +0:52 'gl_Layer' (layout( stream=0) out highp int Layer) +0:52 Constant: +0:52 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/310.tesc.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.tesc.out new file mode 100644 index 0000000..9c3d1d5 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.tesc.out @@ -0,0 +1,543 @@ +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) +ERROR: 0:12: 'patch' : can only use on output in tessellation-control shader +ERROR: 0:26: 'gl_PointSize' : required extension not requested: Possible extensions include: +GL_EXT_tessellation_point_size +GL_OES_tessellation_point_size +ERROR: 0:27: 'gl_ClipDistance' : no such field in structure +ERROR: 0:27: 'expression' : left of '[' is not of type array, matrix, or vector +ERROR: 0:34: 'gl_PointSize' : required extension not requested: Possible extensions include: +GL_EXT_tessellation_point_size +GL_OES_tessellation_point_size +ERROR: 0:35: 'gl_ClipDistance' : no such field in structure +ERROR: 0:35: 'expression' : left of '[' is not of type array, matrix, or vector +ERROR: 0:35: 'assign' : l-value required (can't modify a const) +ERROR: 0:41: '' : tessellation control barrier() cannot be placed within flow control +ERROR: 0:43: '' : tessellation control barrier() cannot be placed within flow control +ERROR: 0:48: '' : tessellation control barrier() cannot be placed within flow control +ERROR: 0:53: '' : tessellation control barrier() cannot be placed within flow control +ERROR: 0:56: '' : tessellation control barrier() cannot be placed within flow control +ERROR: 0:63: '' : tessellation control barrier() cannot be placed after a return from main() +ERROR: 0:66: 'vertices' : can only apply to 'out' +ERROR: 0:67: 'vertices' : cannot change previously set layout value +ERROR: 0:71: '[' : array index out of range '4' +ERROR: 0:73: '' : tessellation control barrier() must be in main() +ERROR: 0:76: 'in' : type must be an array: ina +ERROR: 0:78: '[]' : tessellation input array size must be gl_MaxPatchVertices or implicitly sized +ERROR: 0:80: '' : array size required +ERROR: 0:86: 'location' : overlapping use of location 4 +ERROR: 0:90: 'location' : overlapping use of location 4 +ERROR: 0:94: 'precise' : Reserved word. +ERROR: 0:94: 'precise' : not supported for this version or the enabled extensions +ERROR: 0:95: 'fma' : required extension not requested: Possible extensions include: +GL_EXT_gpu_shader5 +GL_OES_gpu_shader5 +ERROR: 0:104: 'sample' : Reserved word. +ERROR: 0:106: 'vertices' : can only apply to a standalone qualifier +ERROR: 0:107: 'vertices' : inconsistent output number of vertices for array size of misSized +ERROR: 0:133: 'gl_BoundingBoxOES' : required extension not requested: Possible extensions include: +GL_EXT_primitive_bounding_box +GL_OES_primitive_bounding_box +ERROR: 0:142: '[' : array index out of range '2' +ERROR: 0:145: '' : array size required +ERROR: 0:161: '[]' : tessellation-control per-vertex output l-value must be indexed with gl_InvocationID +ERROR: 0:162: '[]' : tessellation-control per-vertex output l-value must be indexed with gl_InvocationID +ERROR: 0:165: '[]' : tessellation-control per-vertex output l-value must be indexed with gl_InvocationID +ERROR: 38 compilation errors. No code generated. + + +Shader version: 310 +Requested GL_ARB_separate_shader_objects +Requested GL_OES_gpu_shader5 +Requested GL_OES_primitive_bounding_box +Requested GL_OES_shader_io_blocks +Requested GL_OES_tessellation_point_size +Requested GL_OES_tessellation_shader +vertices = 4 +ERROR: node is still EOpNull! +0:15 Function Definition: main( ( global void) +0:15 Function Parameters: +0:17 Sequence +0:17 Barrier ( global void) +0:19 Sequence +0:19 move second child to first child ( temp highp int) +0:19 'a' ( temp highp int) +0:19 Constant: +0:19 5392 (const int) +0:25 Sequence +0:25 move second child to first child ( temp highp 4-component vector of float) +0:25 'p' ( temp highp 4-component vector of float) +0:25 gl_Position: direct index for structure ( in highp 4-component vector of float Position) +0:25 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:25 '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:25 Constant: +0:25 1 (const int) +0:25 Constant: +0:25 0 (const int) +0:26 Sequence +0:26 move second child to first child ( temp highp float) +0:26 'ps' ( temp highp float) +0:26 gl_PointSize: direct index for structure ( in highp float PointSize) +0:26 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:26 '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:26 Constant: +0:26 1 (const int) +0:26 Constant: +0:26 1 (const int) +0:27 Sequence +0:27 move second child to first child ( temp highp float) +0:27 'cd' ( temp highp float) +0:27 Constant: +0:27 0.000000 +0:29 Sequence +0:29 move second child to first child ( temp highp int) +0:29 'pvi' ( temp highp int) +0:29 'gl_PatchVerticesIn' ( in highp int PatchVertices) +0:30 Sequence +0:30 move second child to first child ( temp highp int) +0:30 'pid' ( temp highp int) +0:30 'gl_PrimitiveID' ( in highp int PrimitiveID) +0:31 Sequence +0:31 move second child to first child ( temp highp int) +0:31 'iid' ( temp highp int) +0:31 'gl_InvocationID' ( in highp int InvocationID) +0:33 move second child to first child ( temp highp 4-component vector of float) +0:33 gl_Position: direct index for structure ( out highp 4-component vector of float Position) +0:33 indirect index ( temp block{ out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize}) +0:33 '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:33 'gl_InvocationID' ( in highp int InvocationID) +0:33 Constant: +0:33 0 (const int) +0:33 'p' ( temp highp 4-component vector of float) +0:34 move second child to first child ( temp highp float) +0:34 gl_PointSize: direct index for structure ( out highp float PointSize) +0:34 indirect index ( temp block{ out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize}) +0:34 '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:34 'gl_InvocationID' ( in highp int InvocationID) +0:34 Constant: +0:34 1 (const int) +0:34 'ps' ( temp highp float) +0:35 move second child to first child ( temp highp float) +0:35 Constant: +0:35 0.000000 +0:35 'cd' ( temp highp float) +0:37 move second child to first child ( temp highp float) +0:37 direct index ( patch temp highp float TessLevelOuter) +0:37 'gl_TessLevelOuter' ( patch out 4-element array of highp float TessLevelOuter) +0:37 Constant: +0:37 3 (const int) +0:37 Constant: +0:37 3.200000 +0:38 move second child to first child ( temp highp float) +0:38 direct index ( patch temp highp float TessLevelInner) +0:38 'gl_TessLevelInner' ( patch out 2-element array of highp float TessLevelInner) +0:38 Constant: +0:38 1 (const int) +0:38 Constant: +0:38 1.300000 +0:40 Test condition and select ( temp void) +0:40 Condition +0:40 Compare Greater Than ( temp bool) +0:40 'a' ( temp highp int) +0:40 Constant: +0:40 10 (const int) +0:40 true case +0:41 Barrier ( global void) +0:40 false case +0:43 Barrier ( global void) +0:45 Barrier ( global void) +0:49 Loop with condition not tested first +0:49 Loop Condition +0:49 Compare Greater Than ( temp bool) +0:49 'a' ( temp highp int) +0:49 Constant: +0:49 10 (const int) +0:49 Loop Body +0:48 Sequence +0:48 Barrier ( global void) +0:51 switch +0:51 condition +0:51 'a' ( temp highp int) +0:51 body +0:51 Sequence +0:52 default: +0:? Sequence +0:53 Barrier ( global void) +0:54 Branch: Break +0:56 Test condition and select ( temp highp int) +0:56 Condition +0:56 Compare Less Than ( temp bool) +0:56 'a' ( temp highp int) +0:56 Constant: +0:56 12 (const int) +0:56 true case +0:56 'a' ( temp highp int) +0:56 false case +0:56 Comma ( temp highp int) +0:56 Barrier ( global void) +0:56 'a' ( temp highp int) +0:58 Sequence +0:58 Barrier ( global void) +0:61 Branch: Return +0:63 Barrier ( global void) +0:69 Function Definition: foo( ( global void) +0:69 Function Parameters: +0:71 Sequence +0:71 gl_Position: direct index for structure ( out highp 4-component vector of float Position) +0:71 direct index ( temp block{ out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize}) +0:71 '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:71 Constant: +0:71 4 (const int) +0:71 Constant: +0:71 0 (const int) +0:73 Barrier ( global void) +0:92 Function Definition: foop( ( global void) +0:92 Function Parameters: +0:? Sequence +0:95 move second child to first child ( temp highp float) +0:95 'd' ( noContraction temp highp float) +0:95 fma ( global highp float) +0:95 'd' ( noContraction temp highp float) +0:95 'd' ( noContraction temp highp float) +0:95 'd' ( noContraction temp highp float) +0:112 Function Definition: pointSize2( ( global void) +0:112 Function Parameters: +0:114 Sequence +0:114 Sequence +0:114 move second child to first child ( temp highp float) +0:114 'ps' ( temp highp float) +0:114 gl_PointSize: direct index for structure ( in highp float PointSize) +0:114 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:114 '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:114 Constant: +0:114 1 (const int) +0:114 Constant: +0:114 1 (const int) +0:115 move second child to first child ( temp highp float) +0:115 gl_PointSize: direct index for structure ( out highp float PointSize) +0:115 indirect index ( temp block{ out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize}) +0:115 '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:115 'gl_InvocationID' ( in highp int InvocationID) +0:115 Constant: +0:115 1 (const int) +0:115 'ps' ( temp highp float) +0:122 Function Definition: goodfoop( ( global void) +0:122 Function Parameters: +0:? Sequence +0:126 multiply second child into first child ( temp highp 3-component vector of float) +0:126 'pv3' ( noContraction temp highp 3-component vector of float) +0:126 'pv3' ( noContraction temp highp 3-component vector of float) +0:127 move second child to first child ( temp highp 3-component vector of float) +0:127 'pv3' ( noContraction temp highp 3-component vector of float) +0:127 fma ( global highp 3-component vector of float) +0:127 'pv3' ( noContraction temp highp 3-component vector of float) +0:127 'pv3' ( noContraction temp highp 3-component vector of float) +0:127 'pv3' ( noContraction temp highp 3-component vector of float) +0:128 move second child to first child ( temp highp float) +0:128 'd' ( noContraction temp highp float) +0:128 fma ( global highp float) +0:128 'd' ( noContraction temp highp float) +0:128 'd' ( noContraction temp highp float) +0:128 'd' ( noContraction temp highp float) +0:131 Function Definition: bbBad( ( global void) +0:131 Function Parameters: +0:133 Sequence +0:133 'gl_BoundingBoxOES' ( patch out 2-element array of highp 4-component vector of float BoundingBox) +0:138 Function Definition: bb( ( global void) +0:138 Function Parameters: +0:140 Sequence +0:140 move second child to first child ( temp highp 4-component vector of float) +0:140 direct index ( patch temp highp 4-component vector of float BoundingBox) +0:140 'gl_BoundingBoxOES' ( patch out 2-element array of highp 4-component vector of float BoundingBox) +0:140 Constant: +0:140 0 (const int) +0:140 Constant: +0:140 0.000000 +0:140 0.000000 +0:140 0.000000 +0:140 0.000000 +0:141 move second child to first child ( temp highp 4-component vector of float) +0:141 direct index ( patch temp highp 4-component vector of float BoundingBox) +0:141 'gl_BoundingBoxOES' ( patch out 2-element array of highp 4-component vector of float BoundingBox) +0:141 Constant: +0:141 1 (const int) +0:141 Constant: +0:141 1.000000 +0:141 1.000000 +0:141 1.000000 +0:141 1.000000 +0:142 move second child to first child ( temp highp 4-component vector of float) +0:142 direct index ( patch temp highp 4-component vector of float BoundingBox) +0:142 'gl_BoundingBoxOES' ( patch out 2-element array of highp 4-component vector of float BoundingBox) +0:142 Constant: +0:142 2 (const int) +0:142 Constant: +0:142 2.000000 +0:142 2.000000 +0:142 2.000000 +0:142 2.000000 +0:153 Function Definition: outputtingOutparam(i1; ( global void) +0:153 Function Parameters: +0:153 'a' ( out highp int) +0:155 Sequence +0:155 move second child to first child ( temp highp int) +0:155 'a' ( out highp int) +0:155 Constant: +0:155 2 (const int) +0:158 Function Definition: outputting( ( global void) +0:158 Function Parameters: +0:160 Sequence +0:160 move second child to first child ( temp highp int) +0:160 indirect index ( temp highp int) +0:160 'outa' ( out 4-element array of highp int) +0:160 'gl_InvocationID' ( in highp int InvocationID) +0:160 Constant: +0:160 2 (const int) +0:161 move second child to first child ( temp highp int) +0:161 direct index ( temp highp int) +0:161 'outa' ( out 4-element array of highp int) +0:161 Constant: +0:161 1 (const int) +0:161 Constant: +0:161 2 (const int) +0:162 move second child to first child ( temp highp 4-component vector of float) +0:162 gl_Position: direct index for structure ( out highp 4-component vector of float Position) +0:162 direct index ( temp block{ out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize}) +0:162 '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:162 Constant: +0:162 0 (const int) +0:162 Constant: +0:162 0 (const int) +0:162 Constant: +0:162 1.000000 +0:162 1.000000 +0:162 1.000000 +0:162 1.000000 +0:163 direct index ( temp highp int) +0:163 'outa' ( out 4-element array of highp int) +0:163 Constant: +0:163 1 (const int) +0:164 direct index ( temp block{ out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize}) +0:164 '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:164 Constant: +0:164 0 (const int) +0:165 Function Call: outputtingOutparam(i1; ( global void) +0:165 direct index ( temp highp int) +0:165 'outa' ( out 4-element array of highp int) +0:165 Constant: +0:165 0 (const int) +0:166 Function Call: outputtingOutparam(i1; ( global void) +0:166 indirect index ( temp highp int) +0:166 'outa' ( out 4-element array of highp int) +0:166 'gl_InvocationID' ( in highp int InvocationID) +0:167 move second child to first child ( temp highp float) +0:167 f: direct index for structure ( out highp float) +0:167 direct index ( patch temp block{ out highp float f}) +0:167 'patchIName' ( patch out 4-element array of block{ out highp float f}) +0:167 Constant: +0:167 1 (const int) +0:167 Constant: +0:167 0 (const int) +0:167 Constant: +0:167 3.140000 +0:168 move second child to first child ( temp highp int) +0:168 indirect index ( temp highp int) +0:168 'outa' ( out 4-element array of highp int) +0:168 'gl_InvocationID' ( in highp int InvocationID) +0:168 Constant: +0:168 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: 310 +Requested GL_ARB_separate_shader_objects +Requested GL_OES_gpu_shader5 +Requested GL_OES_primitive_bounding_box +Requested GL_OES_shader_io_blocks +Requested GL_OES_tessellation_point_size +Requested GL_OES_tessellation_shader +vertices = 4 +ERROR: node is still EOpNull! +0:15 Function Definition: main( ( global void) +0:15 Function Parameters: +0:17 Sequence +0:17 Barrier ( global void) +0:19 Sequence +0:19 move second child to first child ( temp highp int) +0:19 'a' ( temp highp int) +0:19 Constant: +0:19 5392 (const int) +0:25 Sequence +0:25 move second child to first child ( temp highp 4-component vector of float) +0:25 'p' ( temp highp 4-component vector of float) +0:25 gl_Position: direct index for structure ( in highp 4-component vector of float Position) +0:25 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:25 '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:25 Constant: +0:25 1 (const int) +0:25 Constant: +0:25 0 (const int) +0:26 Sequence +0:26 move second child to first child ( temp highp float) +0:26 'ps' ( temp highp float) +0:26 gl_PointSize: direct index for structure ( in highp float PointSize) +0:26 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:26 '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:26 Constant: +0:26 1 (const int) +0:26 Constant: +0:26 1 (const int) +0:27 Sequence +0:27 move second child to first child ( temp highp float) +0:27 'cd' ( temp highp float) +0:27 Constant: +0:27 0.000000 +0:29 Sequence +0:29 move second child to first child ( temp highp int) +0:29 'pvi' ( temp highp int) +0:29 'gl_PatchVerticesIn' ( in highp int PatchVertices) +0:30 Sequence +0:30 move second child to first child ( temp highp int) +0:30 'pid' ( temp highp int) +0:30 'gl_PrimitiveID' ( in highp int PrimitiveID) +0:31 Sequence +0:31 move second child to first child ( temp highp int) +0:31 'iid' ( temp highp int) +0:31 'gl_InvocationID' ( in highp int InvocationID) +0:33 move second child to first child ( temp highp 4-component vector of float) +0:33 gl_Position: direct index for structure ( out highp 4-component vector of float Position) +0:33 indirect index ( temp block{ out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize}) +0:33 '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:33 'gl_InvocationID' ( in highp int InvocationID) +0:33 Constant: +0:33 0 (const int) +0:33 'p' ( temp highp 4-component vector of float) +0:34 move second child to first child ( temp highp float) +0:34 gl_PointSize: direct index for structure ( out highp float PointSize) +0:34 indirect index ( temp block{ out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize}) +0:34 '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:34 'gl_InvocationID' ( in highp int InvocationID) +0:34 Constant: +0:34 1 (const int) +0:34 'ps' ( temp highp float) +0:35 move second child to first child ( temp highp float) +0:35 Constant: +0:35 0.000000 +0:35 'cd' ( temp highp float) +0:37 move second child to first child ( temp highp float) +0:37 direct index ( patch temp highp float TessLevelOuter) +0:37 'gl_TessLevelOuter' ( patch out 4-element array of highp float TessLevelOuter) +0:37 Constant: +0:37 3 (const int) +0:37 Constant: +0:37 3.200000 +0:38 move second child to first child ( temp highp float) +0:38 direct index ( patch temp highp float TessLevelInner) +0:38 'gl_TessLevelInner' ( patch out 2-element array of highp float TessLevelInner) +0:38 Constant: +0:38 1 (const int) +0:38 Constant: +0:38 1.300000 +0:40 Test condition and select ( temp void) +0:40 Condition +0:40 Compare Greater Than ( temp bool) +0:40 'a' ( temp highp int) +0:40 Constant: +0:40 10 (const int) +0:40 true case +0:41 Barrier ( global void) +0:40 false case +0:43 Barrier ( global void) +0:45 Barrier ( global void) +0:49 Loop with condition not tested first +0:49 Loop Condition +0:49 Compare Greater Than ( temp bool) +0:49 'a' ( temp highp int) +0:49 Constant: +0:49 10 (const int) +0:49 Loop Body +0:48 Sequence +0:48 Barrier ( global void) +0:51 switch +0:51 condition +0:51 'a' ( temp highp int) +0:51 body +0:51 Sequence +0:52 default: +0:? Sequence +0:53 Barrier ( global void) +0:54 Branch: Break +0:56 Test condition and select ( temp highp int) +0:56 Condition +0:56 Compare Less Than ( temp bool) +0:56 'a' ( temp highp int) +0:56 Constant: +0:56 12 (const int) +0:56 true case +0:56 'a' ( temp highp int) +0:56 false case +0:56 Comma ( temp highp int) +0:56 Barrier ( global void) +0:56 'a' ( temp highp int) +0:58 Sequence +0:58 Barrier ( global void) +0:61 Branch: Return +0:63 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/310.tese.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.tese.out new file mode 100644 index 0000000..4550230 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.tese.out @@ -0,0 +1,302 @@ +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 +ERROR: 0:12: 'ccw' : cannot change previously set vertex order +ERROR: 0:16: 'equal_spacing' : cannot change previously set vertex spacing +ERROR: 0:17: 'fractional_even_spacing' : cannot change previously set vertex spacing +ERROR: 0:22: 'patch' : can only use on input in tessellation-evaluation shader +ERROR: 0:26: 'barrier' : no matching overloaded function found +ERROR: 0:37: 'gl_PointSize' : required extension not requested: Possible extensions include: +GL_EXT_tessellation_point_size +GL_OES_tessellation_point_size +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:47: 'gl_PointSize' : required extension not requested: Possible extensions include: +GL_EXT_tessellation_point_size +GL_OES_tessellation_point_size +ERROR: 0:48: 'gl_ClipDistance' : undeclared identifier +ERROR: 0:48: 'gl_ClipDistance' : left of '[' is not of type array, matrix, or vector +ERROR: 0:48: 'assign' : l-value required (can't modify a const) +ERROR: 0:51: 'patch' : cannot use interpolation qualifiers with patch +ERROR: 0:52: 'patch' : cannot use interpolation qualifiers with patch +ERROR: 0:53: 'noperspective' : Reserved word. +ERROR: 0:53: 'noperspective' : not supported with this profile: es +ERROR: 0:53: 'patch' : cannot use interpolation qualifiers with patch +ERROR: 0:54: 'sample' : Reserved word. +ERROR: 0:54: '' : can only have one auxiliary qualifier (centroid, patch, and sample) +ERROR: 0:58: 'gl_PerVertex' : block already declared with size, can't redeclare as implicitly-sized +ERROR: 0:63: 'gl_PerVertex' : can only redeclare a built-in block once, and before any use +ERROR: 0:68: 'quads' : cannot apply to 'out' +ERROR: 0:68: 'cw' : can only apply to 'in' +ERROR: 0:69: 'triangles' : cannot apply to 'out' +ERROR: 0:70: 'isolines' : cannot apply to 'out' +ERROR: 0:71: 'cw' : can only apply to 'in' +ERROR: 0:72: 'fractional_odd_spacing' : can only apply to 'in' +ERROR: 0:73: 'equal_spacing' : can only apply to 'in' +ERROR: 0:74: 'fractional_even_spacing' : can only apply to 'in' +ERROR: 0:75: 'point_mode' : can only apply to 'in' +ERROR: 0:77: 'in' : type must be an array: ina +ERROR: 0:79: '[]' : tessellation input array size must be gl_MaxPatchVertices or implicitly sized +ERROR: 0:82: 'in' : type must be an array: bla +ERROR: 0:90: '[]' : tessellation input array size must be gl_MaxPatchVertices or implicitly sized +ERROR: 0:100: 'location' : overlapping use of location 24 +ERROR: 0:103: 'location' : overlapping use of location 24 +ERROR: 0:105: 'gl_TessLevelOuter' : identifiers starting with "gl_" are reserved +ERROR: 0:113: 'sample' : Reserved word. +ERROR: 0:119: 'gl_PointSize' : no such field in structure +ERROR: 0:119: '=' : cannot convert from ' temp block{ in highp 4-component vector of float Position gl_Position}' to ' temp highp float' +ERROR: 0:127: 'gl_BoundingBoxOES' : undeclared identifier +ERROR: 44 compilation errors. No code generated. + + +Shader version: 310 +Requested GL_ARB_separate_shader_objects +Requested GL_EXT_primitive_bounding_box +Requested GL_EXT_shader_io_blocks +Requested GL_EXT_tessellation_shader +Requested GL_OES_shader_io_blocks +Requested GL_OES_tessellation_point_size +Requested GL_OES_tessellation_shader +input primitive = quads +vertex spacing = fractional_odd_spacing +triangle order = cw +using point mode +ERROR: node is still EOpNull! +0:24 Function Definition: main( ( global void) +0:24 Function Parameters: +0:26 Sequence +0:26 Constant: +0:26 0.000000 +0:28 Sequence +0:28 move second child to first child ( temp highp int) +0:28 'a' ( temp highp int) +0:28 Constant: +0:28 1512 (const int) +0:36 Sequence +0:36 move second child to first child ( temp highp 4-component vector of float) +0:36 'p' ( temp highp 4-component vector of float) +0:36 gl_Position: direct index for structure ( in highp 4-component vector of float Position) +0:36 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:36 '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:36 Constant: +0:36 1 (const int) +0:36 Constant: +0:36 0 (const int) +0:37 Sequence +0:37 move second child to first child ( temp highp float) +0:37 'ps' ( temp highp float) +0:37 gl_PointSize: direct index for structure ( in highp float PointSize) +0:37 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:37 '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:37 Constant: +0:37 1 (const int) +0:37 Constant: +0:37 1 (const int) +0:38 Sequence +0:38 move second child to first child ( temp highp float) +0:38 'cd' ( temp highp float) +0:38 Constant: +0:38 0.000000 +0:40 Sequence +0:40 move second child to first child ( temp highp int) +0:40 'pvi' ( temp highp int) +0:40 'gl_PatchVerticesIn' ( in highp int PatchVertices) +0:41 Sequence +0:41 move second child to first child ( temp highp int) +0:41 'pid' ( temp highp int) +0:41 'gl_PrimitiveID' ( in highp int PrimitiveID) +0:42 Sequence +0:42 move second child to first child ( temp highp 3-component vector of float) +0:42 'tc' ( temp highp 3-component vector of float) +0:42 'gl_TessCoord' ( in highp 3-component vector of float TessCoord) +0:43 Sequence +0:43 move second child to first child ( temp highp float) +0:43 'tlo' ( temp highp float) +0:43 direct index ( patch temp highp float TessLevelOuter) +0:43 'gl_TessLevelOuter' ( patch in 4-element array of highp float TessLevelOuter) +0:43 Constant: +0:43 3 (const int) +0:44 Sequence +0:44 move second child to first child ( temp highp float) +0:44 'tli' ( temp highp float) +0:44 direct index ( patch temp highp float TessLevelInner) +0:44 'gl_TessLevelInner' ( patch in 2-element array of highp float TessLevelInner) +0:44 Constant: +0:44 1 (const int) +0:46 move second child to first child ( temp highp 4-component vector of float) +0:46 gl_Position: direct index for structure ( gl_Position highp 4-component vector of float Position) +0:46 'anon@1' ( out block{ gl_Position highp 4-component vector of float Position gl_Position, gl_PointSize highp float PointSize gl_PointSize}) +0:46 Constant: +0:46 0 (const uint) +0:46 'p' ( temp highp 4-component vector of float) +0:47 move second child to first child ( temp highp float) +0:47 gl_PointSize: direct index for structure ( gl_PointSize highp float PointSize) +0:47 'anon@1' ( out block{ gl_Position highp 4-component vector of float Position gl_Position, gl_PointSize highp float PointSize gl_PointSize}) +0:47 Constant: +0:47 1 (const uint) +0:47 'ps' ( temp highp float) +0:48 move second child to first child ( temp highp float) +0:48 Constant: +0:48 0.000000 +0:48 'cd' ( temp highp float) +0:117 Function Definition: pointSize2( ( global void) +0:117 Function Parameters: +0:? Sequence +0:120 move second child to first child ( temp highp float) +0:120 gl_PointSize: direct index for structure ( gl_PointSize highp float PointSize) +0:120 'anon@1' ( out block{ gl_Position highp 4-component vector of float Position gl_Position, gl_PointSize highp float PointSize gl_PointSize}) +0:120 Constant: +0:120 1 (const uint) +0:120 'ps' ( temp highp float) +0:125 Function Definition: bbbad( ( global void) +0:125 Function Parameters: +0:127 Sequence +0:127 '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: 310 +Requested GL_ARB_separate_shader_objects +Requested GL_EXT_primitive_bounding_box +Requested GL_EXT_shader_io_blocks +Requested GL_EXT_tessellation_shader +Requested GL_OES_shader_io_blocks +Requested GL_OES_tessellation_point_size +Requested GL_OES_tessellation_shader +input primitive = quads +vertex spacing = fractional_odd_spacing +triangle order = cw +using point mode +ERROR: node is still EOpNull! +0:24 Function Definition: main( ( global void) +0:24 Function Parameters: +0:26 Sequence +0:26 Constant: +0:26 0.000000 +0:28 Sequence +0:28 move second child to first child ( temp highp int) +0:28 'a' ( temp highp int) +0:28 Constant: +0:28 1512 (const int) +0:36 Sequence +0:36 move second child to first child ( temp highp 4-component vector of float) +0:36 'p' ( temp highp 4-component vector of float) +0:36 gl_Position: direct index for structure ( in highp 4-component vector of float Position) +0:36 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:36 '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:36 Constant: +0:36 1 (const int) +0:36 Constant: +0:36 0 (const int) +0:37 Sequence +0:37 move second child to first child ( temp highp float) +0:37 'ps' ( temp highp float) +0:37 gl_PointSize: direct index for structure ( in highp float PointSize) +0:37 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:37 '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:37 Constant: +0:37 1 (const int) +0:37 Constant: +0:37 1 (const int) +0:38 Sequence +0:38 move second child to first child ( temp highp float) +0:38 'cd' ( temp highp float) +0:38 Constant: +0:38 0.000000 +0:40 Sequence +0:40 move second child to first child ( temp highp int) +0:40 'pvi' ( temp highp int) +0:40 'gl_PatchVerticesIn' ( in highp int PatchVertices) +0:41 Sequence +0:41 move second child to first child ( temp highp int) +0:41 'pid' ( temp highp int) +0:41 'gl_PrimitiveID' ( in highp int PrimitiveID) +0:42 Sequence +0:42 move second child to first child ( temp highp 3-component vector of float) +0:42 'tc' ( temp highp 3-component vector of float) +0:42 'gl_TessCoord' ( in highp 3-component vector of float TessCoord) +0:43 Sequence +0:43 move second child to first child ( temp highp float) +0:43 'tlo' ( temp highp float) +0:43 direct index ( patch temp highp float TessLevelOuter) +0:43 'gl_TessLevelOuter' ( patch in 4-element array of highp float TessLevelOuter) +0:43 Constant: +0:43 3 (const int) +0:44 Sequence +0:44 move second child to first child ( temp highp float) +0:44 'tli' ( temp highp float) +0:44 direct index ( patch temp highp float TessLevelInner) +0:44 'gl_TessLevelInner' ( patch in 2-element array of highp float TessLevelInner) +0:44 Constant: +0:44 1 (const int) +0:46 move second child to first child ( temp highp 4-component vector of float) +0:46 gl_Position: direct index for structure ( gl_Position highp 4-component vector of float Position) +0:46 'anon@1' ( out block{ gl_Position highp 4-component vector of float Position gl_Position, gl_PointSize highp float PointSize gl_PointSize}) +0:46 Constant: +0:46 0 (const uint) +0:46 'p' ( temp highp 4-component vector of float) +0:47 move second child to first child ( temp highp float) +0:47 gl_PointSize: direct index for structure ( gl_PointSize highp float PointSize) +0:47 'anon@1' ( out block{ gl_Position highp 4-component vector of float Position gl_Position, gl_PointSize highp float PointSize gl_PointSize}) +0:47 Constant: +0:47 1 (const uint) +0:47 'ps' ( temp highp float) +0:48 move second child to first child ( temp highp float) +0:48 Constant: +0:48 0.000000 +0:48 '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/310.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.vert.out new file mode 100644 index 0000000..6d4599c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.vert.out @@ -0,0 +1,1273 @@ +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 +ERROR: 0:10: 'location' : overlapping use of location 3 +ERROR: 0:58: 'usampler2DMSArray' : Reserved word. +ERROR: 0:58: 'sampler/image' : type requires declaration of default precision qualifier +ERROR: 0:67: 'textureSamples' : no matching overloaded function found +ERROR: 0:69: 'assign' : l-value required "ini" (can't modify shader input) +ERROR: 0:69: 'out' : Non-L-value cannot be passed for 'out' or 'inout' parameters. +ERROR: 0:72: 'out' : cannot be bool +ERROR: 0:73: 'sampler2D' : sampler/image types can only be used in uniform variables or function parameters: outo +ERROR: 0:75: 'vertex-shader array-of-array output' : not supported with this profile: es +ERROR: 0:78: 'vertex-shader array-of-struct output' : not supported with this profile: es +ERROR: 0:79: 'vertex-shader array-of-struct output' : not supported with this profile: es +ERROR: 0:81: 'vertex-shader struct output containing an array' : not supported with this profile: es +ERROR: 0:83: 'vertex-shader struct output containing structure' : not supported with this profile: es +ERROR: 0:85: 'std430' : requires the 'buffer' storage qualifier +ERROR: 0:97: 's' : member of block cannot be or contain a sampler, image, or atomic_uint type +ERROR: 0:105: 'location' : overlapping use of location 12 +ERROR: 0:107: 'input block' : not supported in this stage: vertex +ERROR: 0:109: 'gl_PerVertex' : block redeclaration has extra members +ERROR: 0:119: 'gl_PointSize' : member of nameless block was not redeclared +ERROR: 0:119: 'assign' : cannot convert from ' const float' to ' gl_PointSize highp void PointSize' +ERROR: 0:122: 'gl_PerVertex' : can only redeclare a built-in block once, and before any use +ERROR: 0:127: 'flat/smooth/noperspective' : cannot use interpolation qualifiers on an interface block +ERROR: 0:131: 'flat/smooth/noperspective' : cannot use interpolation qualifiers on an interface block +ERROR: 0:135: 'centroid' : cannot use centroid qualifier on an interface block +ERROR: 0:139: 'invariant' : cannot use invariant qualifier on an interface block +ERROR: 0:155: 'precise' : Reserved word. +ERROR: 0:155: 'precise' : not supported for this version or the enabled extensions +ERROR: 0:156: 'fma' : required extension not requested: Possible extensions include: +GL_EXT_gpu_shader5 +GL_OES_gpu_shader5 +ERROR: 0:157: 'variable indexing sampler array' : not supported for this version or the enabled extensions +ERROR: 0:161: 'variable indexing uniform block array' : not supported for this version or the enabled extensions +ERROR: 0:162: 'variable indexing buffer block array' : not supported with this profile: es +ERROR: 0:164: 'variable indexing sampler array' : not supported for this version or the enabled extensions +ERROR: 0:165: 'non-constant offset argument' : not supported for this version or the enabled extensions +ERROR: 0:166: 'textureGatherOffsets' : required extension not requested: Possible extensions include: +GL_EXT_gpu_shader5 +GL_OES_gpu_shader5 +ERROR: 0:177: 'variable indexing buffer block array' : not supported with this profile: es +ERROR: 0:182: 'textureGatherOffsets(...)' : must be a compile-time constant: offsets argument +ERROR: 0:185: 'samplerBuffer' : Reserved word. +ERROR: 0:185: 'sampler/image' : type requires declaration of default precision qualifier +ERROR: 0:186: 'isamplerBuffer' : Reserved word. +ERROR: 0:186: 'sampler/image' : type requires declaration of default precision qualifier +ERROR: 0:187: 'usamplerBuffer' : Reserved word. +ERROR: 0:187: 'sampler/image' : type requires declaration of default precision qualifier +ERROR: 0:188: 'imageBuffer' : Reserved word. +ERROR: 0:188: 'sampler/image' : type requires declaration of default precision qualifier +ERROR: 0:189: 'iimageBuffer' : Reserved word. +ERROR: 0:189: 'sampler/image' : type requires declaration of default precision qualifier +ERROR: 0:190: 'uimageBuffer' : Reserved word. +ERROR: 0:190: 'sampler/image' : type requires declaration of default precision qualifier +ERROR: 0:195: 'sampler/image' : type requires declaration of default precision qualifier +ERROR: 0:196: 'sampler/image' : type requires declaration of default precision qualifier +ERROR: 0:197: 'sampler/image' : type requires declaration of default precision qualifier +ERROR: 0:198: 'sampler/image' : type requires declaration of default precision qualifier +ERROR: 0:199: 'sampler/image' : type requires declaration of default precision qualifier +ERROR: 0:200: 'sampler/image' : type requires declaration of default precision qualifier +ERROR: 0:235: 'imageCubeArray' : Reserved word. +ERROR: 0:235: 'sampler/image' : type requires declaration of default precision qualifier +ERROR: 0:236: 'iimageCubeArray' : Reserved word. +ERROR: 0:236: 'sampler/image' : type requires declaration of default precision qualifier +ERROR: 0:237: 'uimageCubeArray' : Reserved word. +ERROR: 0:237: 'sampler/image' : type requires declaration of default precision qualifier +ERROR: 0:239: 'samplerCubeArray' : Reserved word. +ERROR: 0:239: 'sampler/image' : type requires declaration of default precision qualifier +ERROR: 0:240: 'samplerCubeArrayShadow' : Reserved word. +ERROR: 0:240: 'sampler/image' : type requires declaration of default precision qualifier +ERROR: 0:241: 'isamplerCubeArray' : Reserved word. +ERROR: 0:241: 'sampler/image' : type requires declaration of default precision qualifier +ERROR: 0:242: 'usamplerCubeArray' : Reserved word. +ERROR: 0:242: 'sampler/image' : type requires declaration of default precision qualifier +ERROR: 0:246: 'sampler/image' : type requires declaration of default precision qualifier +ERROR: 0:247: 'sampler/image' : type requires declaration of default precision qualifier +ERROR: 0:248: 'sampler/image' : type requires declaration of default precision qualifier +ERROR: 0:250: 'sampler/image' : type requires declaration of default precision qualifier +ERROR: 0:251: 'sampler/image' : type requires declaration of default precision qualifier +ERROR: 0:252: 'sampler/image' : type requires declaration of default precision qualifier +ERROR: 0:253: 'sampler/image' : type requires declaration of default precision qualifier +ERROR: 0:321: 'sampler2DMSArray' : Reserved word. +ERROR: 0:321: 'sampler/image' : type requires declaration of default precision qualifier +ERROR: 0:322: 'isampler2DMSArray' : Reserved word. +ERROR: 0:322: 'sampler/image' : type requires declaration of default precision qualifier +ERROR: 0:323: 'usampler2DMSArray' : Reserved word. +ERROR: 0:323: 'sampler/image' : type requires declaration of default precision qualifier +ERROR: 0:329: 'sampler/image' : type requires declaration of default precision qualifier +ERROR: 0:330: 'sampler/image' : type requires declaration of default precision qualifier +ERROR: 0:331: 'sampler/image' : type requires declaration of default precision qualifier +ERROR: 0:351: 'textureSize' : no matching overloaded function found +ERROR: 0:351: '=' : cannot convert from ' const float' to ' temp highp 3-component vector of int' +ERROR: 0:389: 'sample' : Reserved word. +ERROR: 0:400: 'interpolateAtCentroid' : no matching overloaded function found +ERROR: 0:401: 'interpolateAtSample' : no matching overloaded function found +ERROR: 0:402: 'interpolateAtOffset' : no matching overloaded function found +ERROR: 93 compilation errors. No code generated. + + +Shader version: 310 +Requested GL_EXT_texture_buffer +Requested GL_OES_gpu_shader5 +Requested GL_OES_shader_image_atomic +Requested GL_OES_shader_io_blocks +Requested GL_OES_shader_multisample_interpolation +Requested GL_OES_texture_buffer +Requested GL_OES_texture_cube_map_array +Requested GL_OES_texture_storage_multisample_2d_array +ERROR: node is still EOpNull! +0:12 Function Definition: main( ( global void) +0:12 Function Parameters: +0:? Sequence +0:15 move second child to first child ( temp highp 2-component vector of uint) +0:15 'u2' ( temp highp 2-component vector of uint) +0:15 addCarry ( global highp 2-component vector of uint) +0:15 'u2' ( temp highp 2-component vector of uint) +0:15 'u2' ( temp highp 2-component vector of uint) +0:15 'u2' ( temp highp 2-component vector of uint) +0:17 move second child to first child ( temp highp uint) +0:17 'u1' ( temp highp uint) +0:17 subBorrow ( global highp uint) +0:17 'u1' ( temp highp uint) +0:17 'u1' ( temp highp uint) +0:17 'u1' ( temp highp uint) +0:19 uMulExtended ( global highp void) +0:19 'u4' ( temp highp 4-component vector of uint) +0:19 'u4' ( temp highp 4-component vector of uint) +0:19 'u4' ( temp highp 4-component vector of uint) +0:19 'u4' ( temp highp 4-component vector of uint) +0:21 iMulExtended ( global highp void) +0:21 'i4' ( temp highp 4-component vector of int) +0:21 'i4' ( temp highp 4-component vector of int) +0:21 'i4' ( temp highp 4-component vector of int) +0:21 'i4' ( temp highp 4-component vector of int) +0:23 move second child to first child ( temp highp int) +0:23 'i1' ( temp highp int) +0:23 bitfieldExtract ( global highp int) +0:23 'i1' ( temp highp int) +0:23 Constant: +0:23 4 (const int) +0:23 Constant: +0:23 5 (const int) +0:25 move second child to first child ( temp highp 3-component vector of uint) +0:25 'u3' ( temp highp 3-component vector of uint) +0:25 bitfieldExtract ( global highp 3-component vector of uint) +0:25 'u3' ( temp highp 3-component vector of uint) +0:25 Constant: +0:25 4 (const int) +0:25 Constant: +0:25 5 (const int) +0:27 move second child to first child ( temp highp 3-component vector of int) +0:27 'i3' ( temp highp 3-component vector of int) +0:27 bitfieldInsert ( global highp 3-component vector of int) +0:27 'i3' ( temp highp 3-component vector of int) +0:27 'i3' ( temp highp 3-component vector of int) +0:27 Constant: +0:27 4 (const int) +0:27 Constant: +0:27 5 (const int) +0:28 move second child to first child ( temp highp uint) +0:28 'u1' ( temp highp uint) +0:28 bitfieldInsert ( global highp uint) +0:28 'u1' ( temp highp uint) +0:28 'u1' ( temp highp uint) +0:28 Constant: +0:28 4 (const int) +0:28 Constant: +0:28 5 (const int) +0:30 move second child to first child ( temp highp 2-component vector of int) +0:30 'i2' ( temp highp 2-component vector of int) +0:30 bitFieldReverse ( global highp 2-component vector of int) +0:30 'i2' ( temp highp 2-component vector of int) +0:31 move second child to first child ( temp highp 4-component vector of uint) +0:31 'u4' ( temp highp 4-component vector of uint) +0:31 bitFieldReverse ( global highp 4-component vector of uint) +0:31 'u4' ( temp highp 4-component vector of uint) +0:32 move second child to first child ( temp highp int) +0:32 'i1' ( temp highp int) +0:32 bitCount ( global lowp int, operation at highp) +0:32 'i1' ( temp highp int) +0:33 move second child to first child ( temp highp 3-component vector of int) +0:33 'i3' ( temp highp 3-component vector of int) +0:33 bitCount ( global lowp 3-component vector of int, operation at highp) +0:33 'u3' ( temp highp 3-component vector of uint) +0:34 move second child to first child ( temp highp 2-component vector of int) +0:34 'i2' ( temp highp 2-component vector of int) +0:34 findLSB ( global lowp 2-component vector of int, operation at highp) +0:34 'i2' ( temp highp 2-component vector of int) +0:35 move second child to first child ( temp highp 4-component vector of int) +0:35 'i4' ( temp highp 4-component vector of int) +0:35 findLSB ( global lowp 4-component vector of int, operation at highp) +0:35 'u4' ( temp highp 4-component vector of uint) +0:36 move second child to first child ( temp highp int) +0:36 'i1' ( temp highp int) +0:36 findMSB ( global lowp int, operation at highp) +0:36 'i1' ( temp highp int) +0:37 move second child to first child ( temp highp 2-component vector of int) +0:37 'i2' ( temp highp 2-component vector of int) +0:37 findMSB ( global lowp 2-component vector of int, operation at highp) +0:37 'u2' ( temp highp 2-component vector of uint) +0:40 move second child to first child ( temp highp 3-component vector of float) +0:40 'v3' ( temp highp 3-component vector of float) +0:40 frexp ( global highp 3-component vector of float) +0:40 'v3' ( temp highp 3-component vector of float) +0:40 'i3' ( temp highp 3-component vector of int) +0:42 move second child to first child ( temp highp 2-component vector of float) +0:42 'v2' ( temp highp 2-component vector of float) +0:42 ldexp ( global highp 2-component vector of float) +0:42 'v2' ( temp highp 2-component vector of float) +0:42 'i2' ( temp highp 2-component vector of int) +0:45 move second child to first child ( temp highp uint) +0:45 'u1' ( temp highp uint) +0:45 PackUnorm4x8 ( global highp uint, operation at mediump) +0:45 'v4' ( temp mediump 4-component vector of float) +0:46 move second child to first child ( temp highp uint) +0:46 'u1' ( temp highp uint) +0:46 PackSnorm4x8 ( global highp uint, operation at mediump) +0:46 'v4' ( temp mediump 4-component vector of float) +0:47 move second child to first child ( temp mediump 4-component vector of float) +0:47 'v4' ( temp mediump 4-component vector of float) +0:47 UnpackUnorm4x8 ( global mediump 4-component vector of float, operation at highp) +0:47 'u1' ( temp highp uint) +0:48 move second child to first child ( temp mediump 4-component vector of float) +0:48 'v4' ( temp mediump 4-component vector of float) +0:48 UnpackSnorm4x8 ( global mediump 4-component vector of float, operation at highp) +0:48 'u1' ( temp highp uint) +0:60 Function Definition: foo( ( global void) +0:60 Function Parameters: +0:? Sequence +0:63 move second child to first child ( temp highp 2-component vector of int) +0:63 'v2' ( temp highp 2-component vector of int) +0:63 textureSize ( global highp 2-component vector of int) +0:63 's2dms' ( uniform highp sampler2DMS) +0:64 move second child to first child ( temp highp 2-component vector of int) +0:64 'v2' ( temp highp 2-component vector of int) +0:64 textureSize ( global highp 2-component vector of int) +0:64 'us2dms' ( uniform highp usampler2DMS) +0:65 Sequence +0:65 move second child to first child ( temp highp 4-component vector of float) +0:65 'v4' ( temp highp 4-component vector of float) +0:65 textureFetch ( global highp 4-component vector of float) +0:65 's2dms' ( uniform highp sampler2DMS) +0:65 'v2' ( temp highp 2-component vector of int) +0:65 Constant: +0:65 2 (const int) +0:66 Sequence +0:66 move second child to first child ( temp highp 4-component vector of int) +0:66 'iv4' ( temp highp 4-component vector of int) +0:66 textureFetch ( global highp 4-component vector of int) +0:66 'is2dms' ( uniform highp isampler2DMS) +0:66 'v2' ( temp highp 2-component vector of int) +0:66 Constant: +0:66 2 (const int) +0:67 Constant: +0:67 0.000000 +0:69 frexp ( global highp float) +0:69 'f' ( temp highp float) +0:69 'ini' ( in highp int) +0:114 Function Definition: foo_IO( ( global void) +0:114 Function Parameters: +0:116 Sequence +0:116 Sequence +0:116 move second child to first child ( temp highp int) +0:116 'sum' ( temp highp int) +0:116 add ( temp highp int) +0:116 'gl_VertexID' ( gl_VertexId highp int VertexId) +0:117 'gl_InstanceID' ( gl_InstanceId highp int InstanceId) +0:118 move second child to first child ( temp highp 4-component vector of float) +0:118 gl_Position: direct index for structure ( gl_Position highp 4-component vector of float Position) +0:118 'anon@1' ( out block{ gl_Position highp 4-component vector of float Position gl_Position, }) +0:118 Constant: +0:118 0 (const uint) +0:118 Constant: +0:118 1.000000 +0:118 1.000000 +0:118 1.000000 +0:118 1.000000 +0:119 gl_PointSize: direct index for structure ( gl_PointSize highp void PointSize) +0:119 'anon@1' ( out block{ gl_Position highp 4-component vector of float Position gl_Position, }) +0:119 Constant: +0:119 1 (const uint) +0:153 Function Definition: pfooBad( ( global void) +0:153 Function Parameters: +0:? Sequence +0:156 move second child to first child ( temp highp 2-component vector of float) +0:156 'h' ( noContraction temp highp 2-component vector of float) +0:156 fma ( global highp 2-component vector of float) +0:156 'inf' ( in highp 2-component vector of float) +0:156 'ing' ( in highp 2-component vector of float) +0:156 'h' ( noContraction temp highp 2-component vector of float) +0:157 indirect index ( temp lowp sampler2D) +0:157 'sArray' ( uniform 4-element array of lowp sampler2D) +0:157 add ( temp highp int) +0:157 'sIndex' ( uniform highp int) +0:157 Constant: +0:157 1 (const int) +0:158 indirect index (layout( binding=0 offset=0) temp highp atomic_uint) +0:158 'auArray' (layout( binding=0 offset=0) uniform 2-element array of highp atomic_uint) +0:158 add ( temp highp int) +0:158 'sIndex' ( uniform highp int) +0:158 Constant: +0:158 1 (const int) +0:159 direct index (layout( column_major shared) temp block{layout( column_major shared) uniform highp int i}) +0:159 'ubInst' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform highp int i}) +0:159 Constant: +0:159 1 (const int) +0:160 direct index (layout( column_major shared) temp block{layout( column_major shared) buffer highp int i}) +0:160 'bbInst' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp int i}) +0:160 Constant: +0:160 2 (const int) +0:161 indirect index (layout( column_major shared) temp block{layout( column_major shared) uniform highp int i}) +0:161 'ubInst' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform highp int i}) +0:161 add ( temp highp int) +0:161 'sIndex' ( uniform highp int) +0:161 Constant: +0:161 1 (const int) +0:162 indirect index (layout( column_major shared) temp block{layout( column_major shared) buffer highp int i}) +0:162 'bbInst' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp int i}) +0:162 'sIndex' ( uniform highp int) +0:163 direct index ( writeonly temp highp image2D) +0:163 'iArray' ( writeonly uniform 5-element array of highp image2D) +0:163 Constant: +0:163 2 (const int) +0:164 indirect index ( writeonly temp highp image2D) +0:164 'iArray' ( writeonly uniform 5-element array of highp image2D) +0:164 component-wise multiply ( temp highp int) +0:164 'sIndex' ( uniform highp int) +0:164 Constant: +0:164 2 (const int) +0:165 textureGatherOffset ( global lowp 4-component vector of float) +0:165 direct index ( temp lowp sampler2D) +0:165 'sArray' ( uniform 4-element array of lowp sampler2D) +0:165 Constant: +0:165 0 (const int) +0:165 Constant: +0:165 0.100000 +0:165 0.100000 +0:165 Convert float to int ( temp lowp 2-component vector of int) +0:165 'inf' ( in highp 2-component vector of float) +0:166 textureGatherOffsets ( global lowp 4-component vector of float, operation at highp) +0:166 direct index ( temp lowp sampler2D) +0:166 'sArray' ( uniform 4-element array of lowp sampler2D) +0:166 Constant: +0:166 0 (const int) +0:166 Constant: +0:166 0.100000 +0:166 0.100000 +0:166 Constant: +0:166 0 (const int) +0:166 0 (const int) +0:166 0 (const int) +0:166 0 (const int) +0:166 0 (const int) +0:166 0 (const int) +0:166 0 (const int) +0:166 0 (const int) +0:171 Function Definition: pfoo( ( global void) +0:171 Function Parameters: +0:? Sequence +0:174 move second child to first child ( temp highp 2-component vector of float) +0:174 'h' ( noContraction temp highp 2-component vector of float) +0:174 fma ( global highp 2-component vector of float) +0:174 'inf' ( in highp 2-component vector of float) +0:174 'ing' ( in highp 2-component vector of float) +0:174 'h' ( noContraction temp highp 2-component vector of float) +0:175 indirect index ( temp lowp sampler2D) +0:175 'sArray' ( uniform 4-element array of lowp sampler2D) +0:175 add ( temp highp int) +0:175 'sIndex' ( uniform highp int) +0:175 Constant: +0:175 1 (const int) +0:176 indirect index (layout( column_major shared) temp block{layout( column_major shared) uniform highp int i}) +0:176 'ubInst' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform highp int i}) +0:176 add ( temp highp int) +0:176 'sIndex' ( uniform highp int) +0:176 Constant: +0:176 1 (const int) +0:177 indirect index (layout( column_major shared) temp block{layout( column_major shared) buffer highp int i}) +0:177 'bbInst' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp int i}) +0:177 subtract ( temp highp int) +0:177 'sIndex' ( uniform highp int) +0:177 Constant: +0:177 2 (const int) +0:178 direct index ( writeonly temp highp image2D) +0:178 'iArray' ( writeonly uniform 5-element array of highp image2D) +0:178 Constant: +0:178 2 (const int) +0:179 indirect index ( writeonly temp highp image2D) +0:179 'iArray' ( writeonly uniform 5-element array of highp image2D) +0:179 subtract ( temp highp int) +0:179 'sIndex' ( uniform highp int) +0:179 Constant: +0:179 2 (const int) +0:180 textureGatherOffset ( global lowp 4-component vector of float) +0:180 direct index ( temp lowp sampler2D) +0:180 'sArray' ( uniform 4-element array of lowp sampler2D) +0:180 Constant: +0:180 0 (const int) +0:180 Constant: +0:180 0.100000 +0:180 0.100000 +0:180 Convert float to int ( temp lowp 2-component vector of int) +0:180 'inf' ( in highp 2-component vector of float) +0:181 textureGatherOffsets ( global lowp 4-component vector of float, operation at highp) +0:181 direct index ( temp lowp sampler2D) +0:181 'sArray' ( uniform 4-element array of lowp sampler2D) +0:181 Constant: +0:181 0 (const int) +0:181 Constant: +0:181 0.100000 +0:181 0.100000 +0:181 Constant: +0:181 0 (const int) +0:181 0 (const int) +0:181 0 (const int) +0:181 0 (const int) +0:181 0 (const int) +0:181 0 (const int) +0:181 0 (const int) +0:181 0 (const int) +0:182 textureGatherOffsets ( global lowp 4-component vector of float, operation at highp) +0:182 direct index ( temp lowp sampler2D) +0:182 'sArray' ( uniform 4-element array of lowp sampler2D) +0:182 Constant: +0:182 0 (const int) +0:182 Constant: +0:182 0.100000 +0:182 0.100000 +0:182 'offsets' ( uniform 4-element array of highp 2-component vector of int) +0:220 Function Definition: bufferT( ( global void) +0:220 Function Parameters: +0:222 Sequence +0:222 Sequence +0:222 move second child to first child ( temp highp int) +0:222 's1' ( temp highp int) +0:222 textureSize ( global highp int) +0:222 'bufSamp1' ( uniform highp samplerBuffer) +0:223 Sequence +0:223 move second child to first child ( temp highp int) +0:223 's2' ( temp highp int) +0:223 textureSize ( global highp int) +0:223 'bufSamp2' ( uniform highp isamplerBuffer) +0:224 Sequence +0:224 move second child to first child ( temp highp int) +0:224 's3' ( temp highp int) +0:224 textureSize ( global highp int) +0:224 'bufSamp3' ( uniform highp usamplerBuffer) +0:226 Sequence +0:226 move second child to first child ( temp highp int) +0:226 's4' ( temp highp int) +0:226 imageQuerySize ( global highp int) +0:226 'bufSamp4' ( writeonly uniform highp imageBuffer) +0:227 Sequence +0:227 move second child to first child ( temp highp int) +0:227 's5' ( temp highp int) +0:227 imageQuerySize ( global highp int) +0:227 'bufSamp5' ( writeonly uniform highp iimageBuffer) +0:228 Sequence +0:228 move second child to first child ( temp highp int) +0:228 's6' ( temp highp int) +0:228 imageQuerySize ( global highp int) +0:228 'bufSamp6' ( writeonly uniform highp uimageBuffer) +0:230 Sequence +0:230 move second child to first child ( temp highp 4-component vector of float) +0:230 'f1' ( temp highp 4-component vector of float) +0:230 textureFetch ( global highp 4-component vector of float) +0:230 'bufSamp1' ( uniform highp samplerBuffer) +0:230 's1' ( temp highp int) +0:231 Sequence +0:231 move second child to first child ( temp highp 4-component vector of int) +0:231 'f2' ( temp highp 4-component vector of int) +0:231 textureFetch ( global highp 4-component vector of int) +0:231 'bufSamp2' ( uniform highp isamplerBuffer) +0:231 's2' ( temp highp int) +0:232 Sequence +0:232 move second child to first child ( temp highp 4-component vector of uint) +0:232 'f3' ( temp highp 4-component vector of uint) +0:232 textureFetch ( global highp 4-component vector of uint) +0:232 'bufSamp3' ( uniform highp usamplerBuffer) +0:232 's3' ( temp highp int) +0:279 Function Definition: CAT( ( global void) +0:279 Function Parameters: +0:281 Sequence +0:281 Sequence +0:281 move second child to first child ( temp highp 3-component vector of int) +0:281 's4' ( temp highp 3-component vector of int) +0:281 textureSize ( global highp 3-component vector of int) +0:281 'CA4' ( uniform highp samplerCubeArray) +0:281 Constant: +0:281 1 (const int) +0:282 Sequence +0:282 move second child to first child ( temp highp 3-component vector of int) +0:282 's5' ( temp highp 3-component vector of int) +0:282 textureSize ( global highp 3-component vector of int) +0:282 'CA5' ( uniform highp samplerCubeArrayShadow) +0:282 Constant: +0:282 1 (const int) +0:283 Sequence +0:283 move second child to first child ( temp highp 3-component vector of int) +0:283 's6' ( temp highp 3-component vector of int) +0:283 textureSize ( global highp 3-component vector of int) +0:283 'CA6' ( uniform highp isamplerCubeArray) +0:283 Constant: +0:283 1 (const int) +0:284 Sequence +0:284 move second child to first child ( temp highp 3-component vector of int) +0:284 's7' ( temp highp 3-component vector of int) +0:284 textureSize ( global highp 3-component vector of int) +0:284 'CA7' ( uniform highp usamplerCubeArray) +0:284 Constant: +0:284 1 (const int) +0:286 Sequence +0:286 move second child to first child ( temp highp 4-component vector of float) +0:286 't4' ( temp highp 4-component vector of float) +0:286 texture ( global highp 4-component vector of float) +0:286 'CA4' ( uniform highp samplerCubeArray) +0:286 Constant: +0:286 0.500000 +0:286 0.500000 +0:286 0.500000 +0:286 0.500000 +0:287 Sequence +0:287 move second child to first child ( temp highp float) +0:287 't5' ( temp highp float) +0:287 texture ( global highp float) +0:287 'CA5' ( uniform highp samplerCubeArrayShadow) +0:287 Constant: +0:287 0.500000 +0:287 0.500000 +0:287 0.500000 +0:287 0.500000 +0:287 Constant: +0:287 3.000000 +0:288 Sequence +0:288 move second child to first child ( temp highp 4-component vector of int) +0:288 't6' ( temp highp 4-component vector of int) +0:288 texture ( global highp 4-component vector of int) +0:288 'CA6' ( uniform highp isamplerCubeArray) +0:288 Constant: +0:288 0.500000 +0:288 0.500000 +0:288 0.500000 +0:288 0.500000 +0:289 Sequence +0:289 move second child to first child ( temp highp 4-component vector of uint) +0:289 't7' ( temp highp 4-component vector of uint) +0:289 texture ( global highp 4-component vector of uint) +0:289 'CA7' ( uniform highp usamplerCubeArray) +0:289 Constant: +0:289 0.500000 +0:289 0.500000 +0:289 0.500000 +0:289 0.500000 +0:291 Sequence +0:291 move second child to first child ( temp highp 4-component vector of float) +0:291 'L4' ( temp highp 4-component vector of float) +0:291 textureLod ( global highp 4-component vector of float) +0:291 'CA4' ( uniform highp samplerCubeArray) +0:291 Constant: +0:291 0.500000 +0:291 0.500000 +0:291 0.500000 +0:291 0.500000 +0:291 Constant: +0:291 0.240000 +0:292 Sequence +0:292 move second child to first child ( temp highp 4-component vector of int) +0:292 'L6' ( temp highp 4-component vector of int) +0:292 textureLod ( global highp 4-component vector of int) +0:292 'CA6' ( uniform highp isamplerCubeArray) +0:292 Constant: +0:292 0.500000 +0:292 0.500000 +0:292 0.500000 +0:292 0.500000 +0:292 Constant: +0:292 0.260000 +0:293 Sequence +0:293 move second child to first child ( temp highp 4-component vector of uint) +0:293 'L7' ( temp highp 4-component vector of uint) +0:293 textureLod ( global highp 4-component vector of uint) +0:293 'CA7' ( uniform highp usamplerCubeArray) +0:293 Constant: +0:293 0.500000 +0:293 0.500000 +0:293 0.500000 +0:293 0.500000 +0:293 Constant: +0:293 0.270000 +0:295 Sequence +0:295 move second child to first child ( temp highp 4-component vector of float) +0:295 'g4' ( temp highp 4-component vector of float) +0:295 textureGrad ( global highp 4-component vector of float) +0:295 'CA4' ( uniform highp samplerCubeArray) +0:295 Constant: +0:295 0.500000 +0:295 0.500000 +0:295 0.500000 +0:295 0.500000 +0:295 Constant: +0:295 0.100000 +0:295 0.100000 +0:295 0.100000 +0:295 Constant: +0:295 0.200000 +0:295 0.200000 +0:295 0.200000 +0:296 Sequence +0:296 move second child to first child ( temp highp 4-component vector of int) +0:296 'g6' ( temp highp 4-component vector of int) +0:296 textureGrad ( global highp 4-component vector of int) +0:296 'CA6' ( uniform highp isamplerCubeArray) +0:296 Constant: +0:296 0.500000 +0:296 0.500000 +0:296 0.500000 +0:296 0.500000 +0:296 Constant: +0:296 0.100000 +0:296 0.100000 +0:296 0.100000 +0:296 Constant: +0:296 0.200000 +0:296 0.200000 +0:296 0.200000 +0:297 Sequence +0:297 move second child to first child ( temp highp 4-component vector of uint) +0:297 'g7' ( temp highp 4-component vector of uint) +0:297 textureGrad ( global highp 4-component vector of uint) +0:297 'CA7' ( uniform highp usamplerCubeArray) +0:297 Constant: +0:297 0.500000 +0:297 0.500000 +0:297 0.500000 +0:297 0.500000 +0:297 Constant: +0:297 0.100000 +0:297 0.100000 +0:297 0.100000 +0:297 Constant: +0:297 0.200000 +0:297 0.200000 +0:297 0.200000 +0:299 Sequence +0:299 move second child to first child ( temp highp 4-component vector of float) +0:299 'gath4' ( temp highp 4-component vector of float) +0:299 textureGather ( global highp 4-component vector of float) +0:299 'CA4' ( uniform highp samplerCubeArray) +0:299 Constant: +0:299 0.500000 +0:299 0.500000 +0:299 0.500000 +0:299 0.500000 +0:300 Sequence +0:300 move second child to first child ( temp highp 4-component vector of float) +0:300 'gathC4' ( temp highp 4-component vector of float) +0:300 textureGather ( global highp 4-component vector of float) +0:300 'CA4' ( uniform highp samplerCubeArray) +0:300 Constant: +0:300 0.500000 +0:300 0.500000 +0:300 0.500000 +0:300 0.500000 +0:300 Constant: +0:300 2 (const int) +0:301 Sequence +0:301 move second child to first child ( temp highp 4-component vector of int) +0:301 'gath6' ( temp highp 4-component vector of int) +0:301 textureGather ( global highp 4-component vector of int) +0:301 'CA6' ( uniform highp isamplerCubeArray) +0:301 Constant: +0:301 0.500000 +0:301 0.500000 +0:301 0.500000 +0:301 0.500000 +0:302 Sequence +0:302 move second child to first child ( temp highp 4-component vector of int) +0:302 'gathC6' ( temp highp 4-component vector of int) +0:302 textureGather ( global highp 4-component vector of int) +0:302 'CA6' ( uniform highp isamplerCubeArray) +0:302 Constant: +0:302 0.500000 +0:302 0.500000 +0:302 0.500000 +0:302 0.500000 +0:302 Constant: +0:302 1 (const int) +0:303 Sequence +0:303 move second child to first child ( temp highp 4-component vector of uint) +0:303 'gath7' ( temp highp 4-component vector of uint) +0:303 textureGather ( global highp 4-component vector of uint) +0:303 'CA7' ( uniform highp usamplerCubeArray) +0:303 Constant: +0:303 0.500000 +0:303 0.500000 +0:303 0.500000 +0:303 0.500000 +0:304 Sequence +0:304 move second child to first child ( temp highp 4-component vector of uint) +0:304 'gathC7' ( temp highp 4-component vector of uint) +0:304 textureGather ( global highp 4-component vector of uint) +0:304 'CA7' ( uniform highp usamplerCubeArray) +0:304 Constant: +0:304 0.500000 +0:304 0.500000 +0:304 0.500000 +0:304 0.500000 +0:304 Constant: +0:304 0 (const int) +0:306 Sequence +0:306 move second child to first child ( temp highp 4-component vector of float) +0:306 'gath5' ( temp highp 4-component vector of float) +0:306 textureGather ( global highp 4-component vector of float) +0:306 'CA5' ( uniform highp samplerCubeArrayShadow) +0:306 Constant: +0:306 0.500000 +0:306 0.500000 +0:306 0.500000 +0:306 0.500000 +0:306 Constant: +0:306 2.500000 +0:308 Sequence +0:308 move second child to first child ( temp highp 3-component vector of int) +0:308 's1' ( temp highp 3-component vector of int) +0:308 imageQuerySize ( global highp 3-component vector of int) +0:308 'CA1' ( writeonly uniform highp imageCubeArray) +0:309 Sequence +0:309 move second child to first child ( temp highp 3-component vector of int) +0:309 's2' ( temp highp 3-component vector of int) +0:309 imageQuerySize ( global highp 3-component vector of int) +0:309 'CA2' ( writeonly uniform highp iimageCubeArray) +0:310 Sequence +0:310 move second child to first child ( temp highp 3-component vector of int) +0:310 's3' ( temp highp 3-component vector of int) +0:310 imageQuerySize ( global highp 3-component vector of int) +0:310 'CA3' ( writeonly uniform highp uimageCubeArray) +0:312 imageStore ( global highp void) +0:312 'CA1' ( writeonly uniform highp imageCubeArray) +0:312 's3' ( temp highp 3-component vector of int) +0:312 Constant: +0:312 1.000000 +0:312 1.000000 +0:312 1.000000 +0:312 1.000000 +0:313 imageStore ( global highp void) +0:313 'CA2' ( writeonly uniform highp iimageCubeArray) +0:313 's3' ( temp highp 3-component vector of int) +0:313 Constant: +0:313 1 (const int) +0:313 1 (const int) +0:313 1 (const int) +0:313 1 (const int) +0:314 imageStore ( global highp void) +0:314 'CA3' ( writeonly uniform highp uimageCubeArray) +0:314 's3' ( temp highp 3-component vector of int) +0:314 Constant: +0:314 1 (const uint) +0:314 1 (const uint) +0:314 1 (const uint) +0:314 1 (const uint) +0:316 Sequence +0:316 move second child to first child ( temp highp 4-component vector of float) +0:316 'cl1' ( temp highp 4-component vector of float) +0:316 imageLoad ( global highp 4-component vector of float) +0:316 'rCA1' (layout( rgba16f) readonly uniform highp imageCubeArray) +0:316 's3' ( temp highp 3-component vector of int) +0:317 Sequence +0:317 move second child to first child ( temp highp 4-component vector of int) +0:317 'cl2' ( temp highp 4-component vector of int) +0:317 imageLoad ( global highp 4-component vector of int) +0:317 'rCA2' (layout( rgba32i) readonly uniform highp iimageCubeArray) +0:317 's3' ( temp highp 3-component vector of int) +0:318 Sequence +0:318 move second child to first child ( temp highp 4-component vector of uint) +0:318 'cl3' ( temp highp 4-component vector of uint) +0:318 imageLoad ( global highp 4-component vector of uint) +0:318 'rCA3' (layout( r32ui) readonly uniform highp uimageCubeArray) +0:318 's3' ( temp highp 3-component vector of int) +0:343 Function Definition: MSA( ( global void) +0:343 Function Parameters: +0:345 Sequence +0:345 Sequence +0:345 move second child to first child ( temp highp 4-component vector of float) +0:345 'tf' ( temp highp 4-component vector of float) +0:345 textureFetch ( global highp 4-component vector of float) +0:345 'samp2DMSA' ( uniform highp sampler2DMSArray) +0:345 Constant: +0:345 5 (const int) +0:345 5 (const int) +0:345 5 (const int) +0:345 Constant: +0:345 2 (const int) +0:346 Sequence +0:346 move second child to first child ( temp highp 4-component vector of int) +0:346 'tfi' ( temp highp 4-component vector of int) +0:346 textureFetch ( global highp 4-component vector of int) +0:346 'samp2DMSAi' ( uniform highp isampler2DMSArray) +0:346 Constant: +0:346 5 (const int) +0:346 5 (const int) +0:346 5 (const int) +0:346 Constant: +0:346 2 (const int) +0:347 Sequence +0:347 move second child to first child ( temp highp 4-component vector of uint) +0:347 'tfu' ( temp highp 4-component vector of uint) +0:347 textureFetch ( global highp 4-component vector of uint) +0:347 'samp2DMSAu' ( uniform highp usampler2DMSArray) +0:347 Constant: +0:347 5 (const int) +0:347 5 (const int) +0:347 5 (const int) +0:347 Constant: +0:347 2 (const int) +0:349 Sequence +0:349 move second child to first child ( temp highp 3-component vector of int) +0:349 'tfs' ( temp highp 3-component vector of int) +0:349 textureSize ( global highp 3-component vector of int) +0:349 'samp2DMSA' ( uniform highp sampler2DMSArray) +0:350 Sequence +0:350 move second child to first child ( temp highp 3-component vector of int) +0:350 'tfsi' ( temp highp 3-component vector of int) +0:350 textureSize ( global highp 3-component vector of int) +0:350 'samp2DMSAi' ( uniform highp isampler2DMSArray) +0:352 Sequence +0:352 move second child to first child ( temp highp 3-component vector of int) +0:352 'tfsu' ( temp highp 3-component vector of int) +0:352 textureSize ( global highp 3-component vector of int) +0:352 'samp2DMSAu' ( uniform highp usampler2DMSArray) +0:364 Function Definition: goodImageAtom( ( global void) +0:364 Function Parameters: +0:? Sequence +0:370 imageAtomicAdd ( global highp int) +0:370 'im2Di' (layout( r32i) uniform highp iimage2D) +0:370 'P' ( uniform highp 2-component vector of int) +0:370 'dati' ( temp highp int) +0:371 imageAtomicAdd ( global highp uint) +0:371 'im2Du' (layout( r32ui) uniform highp uimage2D) +0:371 'P' ( uniform highp 2-component vector of int) +0:371 'datu' ( temp highp uint) +0:372 imageAtomicMin ( global highp int) +0:372 'im2Di' (layout( r32i) uniform highp iimage2D) +0:372 'P' ( uniform highp 2-component vector of int) +0:372 'dati' ( temp highp int) +0:373 imageAtomicMin ( global highp uint) +0:373 'im2Du' (layout( r32ui) uniform highp uimage2D) +0:373 'P' ( uniform highp 2-component vector of int) +0:373 'datu' ( temp highp uint) +0:374 imageAtomicMax ( global highp int) +0:374 'im2Di' (layout( r32i) uniform highp iimage2D) +0:374 'P' ( uniform highp 2-component vector of int) +0:374 'dati' ( temp highp int) +0:375 imageAtomicMax ( global highp uint) +0:375 'im2Du' (layout( r32ui) uniform highp uimage2D) +0:375 'P' ( uniform highp 2-component vector of int) +0:375 'datu' ( temp highp uint) +0:376 imageAtomicAnd ( global highp int) +0:376 'im2Di' (layout( r32i) uniform highp iimage2D) +0:376 'P' ( uniform highp 2-component vector of int) +0:376 'dati' ( temp highp int) +0:377 imageAtomicAnd ( global highp uint) +0:377 'im2Du' (layout( r32ui) uniform highp uimage2D) +0:377 'P' ( uniform highp 2-component vector of int) +0:377 'datu' ( temp highp uint) +0:378 imageAtomicOr ( global highp int) +0:378 'im2Di' (layout( r32i) uniform highp iimage2D) +0:378 'P' ( uniform highp 2-component vector of int) +0:378 'dati' ( temp highp int) +0:379 imageAtomicOr ( global highp uint) +0:379 'im2Du' (layout( r32ui) uniform highp uimage2D) +0:379 'P' ( uniform highp 2-component vector of int) +0:379 'datu' ( temp highp uint) +0:380 imageAtomicXor ( global highp int) +0:380 'im2Di' (layout( r32i) uniform highp iimage2D) +0:380 'P' ( uniform highp 2-component vector of int) +0:380 'dati' ( temp highp int) +0:381 imageAtomicXor ( global highp uint) +0:381 'im2Du' (layout( r32ui) uniform highp uimage2D) +0:381 'P' ( uniform highp 2-component vector of int) +0:381 'datu' ( temp highp uint) +0:382 imageAtomicExchange ( global highp int) +0:382 'im2Di' (layout( r32i) uniform highp iimage2D) +0:382 'P' ( uniform highp 2-component vector of int) +0:382 'dati' ( temp highp int) +0:383 imageAtomicExchange ( global highp uint) +0:383 'im2Du' (layout( r32ui) uniform highp uimage2D) +0:383 'P' ( uniform highp 2-component vector of int) +0:383 'datu' ( temp highp uint) +0:384 imageAtomicExchange ( global highp float) +0:384 'im2Df' (layout( r32f) uniform highp image2D) +0:384 'P' ( uniform highp 2-component vector of int) +0:384 'datf' ( temp highp float) +0:385 imageAtomicCompSwap ( global highp int) +0:385 'im2Di' (layout( r32i) uniform highp iimage2D) +0:385 'P' ( uniform highp 2-component vector of int) +0:385 Constant: +0:385 3 (const int) +0:385 'dati' ( temp highp int) +0:386 imageAtomicCompSwap ( global highp uint) +0:386 'im2Du' (layout( r32ui) uniform highp uimage2D) +0:386 'P' ( uniform highp 2-component vector of int) +0:386 Constant: +0:386 5 (const uint) +0:386 'datu' ( temp highp uint) +0:398 Function Definition: badInterp( ( global void) +0:398 Function Parameters: +0:400 Sequence +0:400 Constant: +0:400 0.000000 +0:401 Constant: +0:401 0.000000 +0:402 Constant: +0:402 0.000000 +0:? Linker Objects +0:? 's' ( shared highp 4-component vector of float) +0:? 'v' ( buffer highp 4-component vector of float) +0:? 'ini' ( in highp int) +0:? 'x' (layout( location=2) uniform highp 4X4 matrix of float) +0:? 'y' (layout( location=3) uniform highp 4X4 matrix of float) +0:? 'xi' (layout( location=2) smooth out highp 4X4 matrix of float) +0:? 'yi' (layout( location=3) smooth out highp 4X4 matrix of float) +0:? 's2dms' ( uniform highp sampler2DMS) +0:? 'is2dms' ( uniform highp isampler2DMS) +0:? 'us2dms' ( uniform highp usampler2DMS) +0:? 'us2dmsa' ( uniform mediump usampler2DMSArray) +0:? 'outb' ( smooth out bool) +0:? 'outo' ( smooth out lowp sampler2D) +0:? 'outa' ( smooth out 4-element array of highp float) +0:? 'outaa' ( smooth out 4-element array of 2-element array of highp float) +0:? 'outs' ( smooth out structure{ global highp float f}) +0:? 'outasa' ( smooth out 4-element array of structure{ global highp float f}) +0:? 'outsa' ( smooth out 4-element array of structure{ global highp float f}) +0:? 'outSA' ( smooth out structure{ global 4-element array of highp float f}) +0:? 'outSS' ( smooth out structure{ global highp float f, global structure{ global highp float f} s}) +0:? 'U430i' (layout( column_major std430) uniform block{layout( column_major std430 offset=0) uniform highp int a}) +0:? 'B430i' (layout( column_major std430) buffer block{layout( column_major std430 offset=0) buffer highp int a}) +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:? 'badSamp1' ( uniform mediump samplerBuffer) +0:? 'badSamp2' ( uniform mediump isamplerBuffer) +0:? 'badSamp3' ( uniform mediump usamplerBuffer) +0:? 'badSamp4' ( writeonly uniform mediump imageBuffer) +0:? 'badSamp5' ( writeonly uniform mediump iimageBuffer) +0:? 'badSamp6' ( writeonly uniform mediump uimageBuffer) +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:? 'badCA1' ( writeonly uniform mediump imageCubeArray) +0:? 'badCA2' ( writeonly uniform mediump iimageCubeArray) +0:? 'badCA3' ( writeonly uniform mediump uimageCubeArray) +0:? 'badCA4' ( uniform mediump samplerCubeArray) +0:? 'badCA5' ( uniform mediump samplerCubeArrayShadow) +0:? 'badCA6' ( uniform mediump isamplerCubeArray) +0:? 'badCA7' ( uniform mediump usamplerCubeArray) +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:? 'bad2DMS' ( uniform mediump sampler2DMSArray) +0:? 'bad2DMSi' ( uniform mediump isampler2DMSArray) +0:? 'bad2DMSu' ( uniform mediump usampler2DMSArray) +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:? 'colorSampInBad' ( smooth sample out highp 4-component vector of float) +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: 310 +Requested GL_EXT_texture_buffer +Requested GL_OES_gpu_shader5 +Requested GL_OES_shader_image_atomic +Requested GL_OES_shader_io_blocks +Requested GL_OES_shader_multisample_interpolation +Requested GL_OES_texture_buffer +Requested GL_OES_texture_cube_map_array +Requested GL_OES_texture_storage_multisample_2d_array +ERROR: node is still EOpNull! +0:12 Function Definition: main( ( global void) +0:12 Function Parameters: +0:? Sequence +0:15 move second child to first child ( temp highp 2-component vector of uint) +0:15 'u2' ( temp highp 2-component vector of uint) +0:15 addCarry ( global highp 2-component vector of uint) +0:15 'u2' ( temp highp 2-component vector of uint) +0:15 'u2' ( temp highp 2-component vector of uint) +0:15 'u2' ( temp highp 2-component vector of uint) +0:17 move second child to first child ( temp highp uint) +0:17 'u1' ( temp highp uint) +0:17 subBorrow ( global highp uint) +0:17 'u1' ( temp highp uint) +0:17 'u1' ( temp highp uint) +0:17 'u1' ( temp highp uint) +0:19 uMulExtended ( global highp void) +0:19 'u4' ( temp highp 4-component vector of uint) +0:19 'u4' ( temp highp 4-component vector of uint) +0:19 'u4' ( temp highp 4-component vector of uint) +0:19 'u4' ( temp highp 4-component vector of uint) +0:21 iMulExtended ( global highp void) +0:21 'i4' ( temp highp 4-component vector of int) +0:21 'i4' ( temp highp 4-component vector of int) +0:21 'i4' ( temp highp 4-component vector of int) +0:21 'i4' ( temp highp 4-component vector of int) +0:23 move second child to first child ( temp highp int) +0:23 'i1' ( temp highp int) +0:23 bitfieldExtract ( global highp int) +0:23 'i1' ( temp highp int) +0:23 Constant: +0:23 4 (const int) +0:23 Constant: +0:23 5 (const int) +0:25 move second child to first child ( temp highp 3-component vector of uint) +0:25 'u3' ( temp highp 3-component vector of uint) +0:25 bitfieldExtract ( global highp 3-component vector of uint) +0:25 'u3' ( temp highp 3-component vector of uint) +0:25 Constant: +0:25 4 (const int) +0:25 Constant: +0:25 5 (const int) +0:27 move second child to first child ( temp highp 3-component vector of int) +0:27 'i3' ( temp highp 3-component vector of int) +0:27 bitfieldInsert ( global highp 3-component vector of int) +0:27 'i3' ( temp highp 3-component vector of int) +0:27 'i3' ( temp highp 3-component vector of int) +0:27 Constant: +0:27 4 (const int) +0:27 Constant: +0:27 5 (const int) +0:28 move second child to first child ( temp highp uint) +0:28 'u1' ( temp highp uint) +0:28 bitfieldInsert ( global highp uint) +0:28 'u1' ( temp highp uint) +0:28 'u1' ( temp highp uint) +0:28 Constant: +0:28 4 (const int) +0:28 Constant: +0:28 5 (const int) +0:30 move second child to first child ( temp highp 2-component vector of int) +0:30 'i2' ( temp highp 2-component vector of int) +0:30 bitFieldReverse ( global highp 2-component vector of int) +0:30 'i2' ( temp highp 2-component vector of int) +0:31 move second child to first child ( temp highp 4-component vector of uint) +0:31 'u4' ( temp highp 4-component vector of uint) +0:31 bitFieldReverse ( global highp 4-component vector of uint) +0:31 'u4' ( temp highp 4-component vector of uint) +0:32 move second child to first child ( temp highp int) +0:32 'i1' ( temp highp int) +0:32 bitCount ( global lowp int, operation at highp) +0:32 'i1' ( temp highp int) +0:33 move second child to first child ( temp highp 3-component vector of int) +0:33 'i3' ( temp highp 3-component vector of int) +0:33 bitCount ( global lowp 3-component vector of int, operation at highp) +0:33 'u3' ( temp highp 3-component vector of uint) +0:34 move second child to first child ( temp highp 2-component vector of int) +0:34 'i2' ( temp highp 2-component vector of int) +0:34 findLSB ( global lowp 2-component vector of int, operation at highp) +0:34 'i2' ( temp highp 2-component vector of int) +0:35 move second child to first child ( temp highp 4-component vector of int) +0:35 'i4' ( temp highp 4-component vector of int) +0:35 findLSB ( global lowp 4-component vector of int, operation at highp) +0:35 'u4' ( temp highp 4-component vector of uint) +0:36 move second child to first child ( temp highp int) +0:36 'i1' ( temp highp int) +0:36 findMSB ( global lowp int, operation at highp) +0:36 'i1' ( temp highp int) +0:37 move second child to first child ( temp highp 2-component vector of int) +0:37 'i2' ( temp highp 2-component vector of int) +0:37 findMSB ( global lowp 2-component vector of int, operation at highp) +0:37 'u2' ( temp highp 2-component vector of uint) +0:40 move second child to first child ( temp highp 3-component vector of float) +0:40 'v3' ( temp highp 3-component vector of float) +0:40 frexp ( global highp 3-component vector of float) +0:40 'v3' ( temp highp 3-component vector of float) +0:40 'i3' ( temp highp 3-component vector of int) +0:42 move second child to first child ( temp highp 2-component vector of float) +0:42 'v2' ( temp highp 2-component vector of float) +0:42 ldexp ( global highp 2-component vector of float) +0:42 'v2' ( temp highp 2-component vector of float) +0:42 'i2' ( temp highp 2-component vector of int) +0:45 move second child to first child ( temp highp uint) +0:45 'u1' ( temp highp uint) +0:45 PackUnorm4x8 ( global highp uint, operation at mediump) +0:45 'v4' ( temp mediump 4-component vector of float) +0:46 move second child to first child ( temp highp uint) +0:46 'u1' ( temp highp uint) +0:46 PackSnorm4x8 ( global highp uint, operation at mediump) +0:46 'v4' ( temp mediump 4-component vector of float) +0:47 move second child to first child ( temp mediump 4-component vector of float) +0:47 'v4' ( temp mediump 4-component vector of float) +0:47 UnpackUnorm4x8 ( global mediump 4-component vector of float, operation at highp) +0:47 'u1' ( temp highp uint) +0:48 move second child to first child ( temp mediump 4-component vector of float) +0:48 'v4' ( temp mediump 4-component vector of float) +0:48 UnpackSnorm4x8 ( global mediump 4-component vector of float, operation at highp) +0:48 'u1' ( temp highp uint) +0:? Linker Objects +0:? 's' ( shared highp 4-component vector of float) +0:? 'v' ( buffer highp 4-component vector of float) +0:? 'ini' ( in highp int) +0:? 'x' (layout( location=2) uniform highp 4X4 matrix of float) +0:? 'y' (layout( location=3) uniform highp 4X4 matrix of float) +0:? 'xi' (layout( location=2) smooth out highp 4X4 matrix of float) +0:? 'yi' (layout( location=3) smooth out highp 4X4 matrix of float) +0:? 's2dms' ( uniform highp sampler2DMS) +0:? 'is2dms' ( uniform highp isampler2DMS) +0:? 'us2dms' ( uniform highp usampler2DMS) +0:? 'us2dmsa' ( uniform mediump usampler2DMSArray) +0:? 'outb' ( smooth out bool) +0:? 'outo' ( smooth out lowp sampler2D) +0:? 'outa' ( smooth out 4-element array of highp float) +0:? 'outaa' ( smooth out 4-element array of 2-element array of highp float) +0:? 'outs' ( smooth out structure{ global highp float f}) +0:? 'outasa' ( smooth out 4-element array of structure{ global highp float f}) +0:? 'outsa' ( smooth out 4-element array of structure{ global highp float f}) +0:? 'outSA' ( smooth out structure{ global 4-element array of highp float f}) +0:? 'outSS' ( smooth out structure{ global highp float f, global structure{ global highp float f} s}) +0:? 'U430i' (layout( column_major std430) uniform block{layout( column_major std430 offset=0) uniform highp int a}) +0:? 'B430i' (layout( column_major std430) buffer block{layout( column_major std430 offset=0) buffer highp int a}) +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:? 'badSamp1' ( uniform mediump samplerBuffer) +0:? 'badSamp2' ( uniform mediump isamplerBuffer) +0:? 'badSamp3' ( uniform mediump usamplerBuffer) +0:? 'badSamp4' ( writeonly uniform mediump imageBuffer) +0:? 'badSamp5' ( writeonly uniform mediump iimageBuffer) +0:? 'badSamp6' ( writeonly uniform mediump uimageBuffer) +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:? 'badCA1' ( writeonly uniform mediump imageCubeArray) +0:? 'badCA2' ( writeonly uniform mediump iimageCubeArray) +0:? 'badCA3' ( writeonly uniform mediump uimageCubeArray) +0:? 'badCA4' ( uniform mediump samplerCubeArray) +0:? 'badCA5' ( uniform mediump samplerCubeArrayShadow) +0:? 'badCA6' ( uniform mediump isamplerCubeArray) +0:? 'badCA7' ( uniform mediump usamplerCubeArray) +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:? 'bad2DMS' ( uniform mediump sampler2DMSArray) +0:? 'bad2DMSi' ( uniform mediump isampler2DMSArray) +0:? 'bad2DMSu' ( uniform mediump usampler2DMSArray) +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:? 'colorSampInBad' ( smooth sample out highp 4-component vector of float) +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/310AofA.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310AofA.vert.out new file mode 100644 index 0000000..ffba25f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310AofA.vert.out @@ -0,0 +1,376 @@ +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 +ERROR: 0:40: '' : array size required +ERROR: 0:48: 'constructor' : constructing non-array constituent from array argument +ERROR: 0:49: 'constructor' : array constructor argument not correct type to construct array element +ERROR: 0:62: '[' : array index out of range '4' +ERROR: 0:78: 'assign' : cannot convert from ' global 4-element array of 7-element array of highp float' to ' global 5-element array of 7-element array of highp float' +ERROR: 0:79: 'assign' : cannot convert from ' global 4-element array of 7-element array of highp float' to ' global implicitly-sized array of 7-element array of highp float' +ERROR: 0:81: 'foo' : no matching overloaded function found +ERROR: 0:86: '==' : wrong operand types: no operation '==' exists that takes a left-hand operand of type ' global 4-element array of 7-element array of highp float' and a right operand of type ' global 5-element array of 7-element array of highp float' (or there is no acceptable conversion) +ERROR: 0:90: '[' : array index out of range '5' +ERROR: 0:94: '[' : index out of range '-1' +ERROR: 0:96: 'assign' : cannot convert from ' temp 3-element array of highp 4-component vector of float' to 'layout( column_major shared) buffer implicitly-sized array of highp 4-component vector of float' +ERROR: 0:103: '' : array size required +ERROR: 0:104: '' : array size required +ERROR: 0:105: '' : array size required +ERROR: 0:106: '' : array size required +ERROR: 0:107: '' : array size required +ERROR: 0:110: 'vertex input arrays' : not supported with this profile: es +ERROR: 0:111: 'vertex-shader array-of-array output' : not supported with this profile: es +ERROR: 0:113: 'array-of-array of block' : not supported with this profile: es +ERROR: 22 compilation errors. No code generated. + + +Shader version: 310 +ERROR: node is still EOpNull! +0:8 Function Definition: f(b1;f1;u1[4];i1[3][2]; ( global void) +0:8 Function Parameters: +0:8 'a' ( in bool) +0:8 'b' ( in highp float) +0:8 'c' ( in 4-element array of highp uint) +0:8 'd' ( in 3-element array of 2-element array of highp int) +0:11 Function Definition: main( ( global void) +0:11 Function Parameters: +0:? Sequence +0:13 Function Call: f(b1;f1;u1[4];i1[3][2]; ( global void) +0:13 Constant: +0:13 false (const bool) +0:13 Constant: +0:13 12.100000 +0:13 Constant: +0:13 0 (const uint) +0:13 1 (const uint) +0:13 1 (const uint) +0:13 2 (const uint) +0:13 'd' ( temp 3-element array of 2-element array of highp int) +0:44 Function Definition: foo(f1[5][7]; ( global 4-element array of 7-element array of highp float) +0:44 Function Parameters: +0:44 'a' ( in 5-element array of 7-element array of highp float) +0:? Sequence +0:47 move second child to first child ( temp 7-element array of highp float) +0:47 'r' ( temp 7-element array of highp float) +0:47 direct index ( temp 7-element array of highp float) +0:47 'a' ( in 5-element array of 7-element array of highp float) +0:47 Constant: +0:47 2 (const int) +0:48 Constant: +0:48 0.000000 +0:49 Constant: +0:49 0.000000 +0:50 Branch: Return with expression +0:50 Construct float ( temp 4-element array of 7-element array of float) +0:50 direct index ( temp 7-element array of highp float) +0:50 'a' ( in 5-element array of 7-element array of highp float) +0:50 Constant: +0:50 0 (const int) +0:50 direct index ( temp 7-element array of highp float) +0:50 'a' ( in 5-element array of 7-element array of highp float) +0:50 Constant: +0:50 1 (const int) +0:50 'r' ( temp 7-element array of highp float) +0:50 direct index ( temp 7-element array of highp float) +0:50 'a' ( in 5-element array of 7-element array of highp float) +0:50 Constant: +0:50 3 (const int) +0:51 Branch: Return with expression +0:51 Construct float ( temp 4-element array of 7-element array of float) +0:51 direct index ( temp 7-element array of highp float) +0:51 'a' ( in 5-element array of 7-element array of highp float) +0:51 Constant: +0:51 0 (const int) +0:51 direct index ( temp 7-element array of highp float) +0:51 'a' ( in 5-element array of 7-element array of highp float) +0:51 Constant: +0:51 1 (const int) +0:51 'r' ( temp 7-element array of highp float) +0:51 direct index ( temp 7-element array of highp float) +0:51 'a' ( in 5-element array of 7-element array of highp float) +0:51 Constant: +0:51 3 (const int) +0:52 Branch: Return with expression +0:52 Construct float ( temp 4-element array of 7-element array of float) +0:52 direct index ( temp 7-element array of highp float) +0:52 'a' ( in 5-element array of 7-element array of highp float) +0:52 Constant: +0:52 0 (const int) +0:52 direct index ( temp 7-element array of highp float) +0:52 'a' ( in 5-element array of 7-element array of highp float) +0:52 Constant: +0:52 1 (const int) +0:52 direct index ( temp 7-element array of highp float) +0:52 'a' ( in 5-element array of 7-element array of highp float) +0:52 Constant: +0:52 2 (const int) +0:52 direct index ( temp 7-element array of highp float) +0:52 'a' ( in 5-element array of 7-element array of highp float) +0:52 Constant: +0:52 3 (const int) +0:55 Function Definition: bar(f1[5][7]; ( global void) +0:55 Function Parameters: +0:55 '' ( in 5-element array of 7-element array of highp float) +0:57 Function Definition: foo2( ( global void) +0:57 Function Parameters: +0:? Sequence +0:? Sequence +0:62 move second child to first child ( temp highp float) +0:62 direct index ( temp highp float) +0:62 direct index ( temp 2-element array of highp float) +0:62 direct index ( temp 4-element array of 2-element array of highp float) +0:62 'gu' ( temp 3-element array of 4-element array of 2-element array of highp float) +0:62 Constant: +0:62 2 (const int) +0:62 Constant: +0:62 4 (const int) +0:62 Constant: +0:62 1 (const int) +0:62 Constant: +0:62 4.000000 +0:64 Sequence +0:64 move second child to first child ( temp 3-element array of 2-element array of highp 4-component vector of float) +0:64 'ca4' ( temp 3-element array of 2-element array of highp 4-component vector of float) +0:66 Constant: +0:66 0.000000 +0:66 0.000000 +0:66 0.000000 +0:66 0.000000 +0:66 1.000000 +0:66 1.000000 +0:66 1.000000 +0:66 1.000000 +0:66 0.000000 +0:66 0.000000 +0:66 0.000000 +0:66 0.000000 +0:66 1.000000 +0:66 1.000000 +0:66 1.000000 +0:66 1.000000 +0:66 0.000000 +0:66 0.000000 +0:66 0.000000 +0:66 0.000000 +0:66 1.000000 +0:66 1.000000 +0:66 1.000000 +0:66 1.000000 +0:67 Sequence +0:67 move second child to first child ( temp 3-element array of 2-element array of highp 4-component vector of float) +0:67 'caim' ( temp 3-element array of 2-element array of highp 4-component vector of float) +0:69 Constant: +0:69 4.000000 +0:69 4.000000 +0:69 4.000000 +0:69 4.000000 +0:69 2.000000 +0:69 2.000000 +0:69 2.000000 +0:69 2.000000 +0:69 4.000000 +0:69 4.000000 +0:69 4.000000 +0:69 4.000000 +0:69 2.000000 +0:69 2.000000 +0:69 2.000000 +0:69 2.000000 +0:69 4.000000 +0:69 4.000000 +0:69 4.000000 +0:69 4.000000 +0:69 2.000000 +0:69 2.000000 +0:69 2.000000 +0:69 2.000000 +0:70 Sequence +0:70 move second child to first child ( temp 3-element array of 2-element array of highp 4-component vector of float) +0:70 'caim2' ( temp 3-element array of 2-element array of highp 4-component vector of float) +0:72 Constant: +0:72 4.000000 +0:72 4.000000 +0:72 4.000000 +0:72 4.000000 +0:72 2.000000 +0:72 2.000000 +0:72 2.000000 +0:72 2.000000 +0:72 4.000000 +0:72 4.000000 +0:72 4.000000 +0:72 4.000000 +0:72 2.000000 +0:72 2.000000 +0:72 2.000000 +0:72 2.000000 +0:72 4.000000 +0:72 4.000000 +0:72 4.000000 +0:72 4.000000 +0:72 2.000000 +0:72 2.000000 +0:72 2.000000 +0:72 2.000000 +0:73 Sequence +0:73 move second child to first child ( temp 3-element array of 2-element array of highp 4-component vector of float) +0:73 'caim3' ( temp 3-element array of 2-element array of highp 4-component vector of float) +0:75 Constant: +0:75 4.000000 +0:75 4.000000 +0:75 4.000000 +0:75 4.000000 +0:75 2.000000 +0:75 2.000000 +0:75 2.000000 +0:75 2.000000 +0:75 4.000000 +0:75 4.000000 +0:75 4.000000 +0:75 4.000000 +0:75 2.000000 +0:75 2.000000 +0:75 2.000000 +0:75 2.000000 +0:75 4.000000 +0:75 4.000000 +0:75 4.000000 +0:75 4.000000 +0:75 2.000000 +0:75 2.000000 +0:75 2.000000 +0:75 2.000000 +0:77 move second child to first child ( temp 4-element array of 7-element array of highp float) +0:77 'g4' ( global 4-element array of 7-element array of highp float) +0:77 Function Call: foo(f1[5][7]; ( global 4-element array of 7-element array of highp float) +0:77 'g5' ( global 5-element array of 7-element array of highp float) +0:78 'g5' ( global 5-element array of 7-element array of highp float) +0:79 'gu' ( global implicitly-sized array of 7-element array of highp float) +0:81 Constant: +0:81 0.000000 +0:82 Function Call: bar(f1[5][7]; ( global void) +0:82 'g5' ( global 5-element array of 7-element array of highp float) +0:84 Test condition and select ( temp void) +0:84 Condition +0:84 Compare Equal ( temp bool) +0:84 Function Call: foo(f1[5][7]; ( global 4-element array of 7-element array of highp float) +0:84 'g5' ( global 5-element array of 7-element array of highp float) +0:84 'g4' ( global 4-element array of 7-element array of highp float) +0:84 true case is null +0:86 Test condition and select ( temp void) +0:86 Condition +0:86 Constant: +0:86 false (const bool) +0:86 true case is null +0:90 move second child to first child ( temp highp float) +0:90 direct index ( temp highp float) +0:90 direct index ( temp 7-element array of highp float) +0:90 'u' ( temp 5-element array of 7-element array of highp float) +0:90 Constant: +0:90 5 (const int) +0:90 Constant: +0:90 2 (const int) +0:90 Constant: +0:90 5.000000 +0:91 Function Call: foo(f1[5][7]; ( global 4-element array of 7-element array of highp float) +0:91 'u' ( temp 5-element array of 7-element array of highp float) +0:94 direct index (layout( column_major shared) temp highp 4-component vector of float) +0:94 v: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp 4-component vector of float) +0:94 direct index (layout( column_major shared) temp 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:94 '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:94 Constant: +0:94 1 (const int) +0:94 Constant: +0:94 1 (const int) +0:94 Constant: +0:94 -1 (const int) +0:95 move second child to first child ( temp highp 4-component vector of float) +0:95 direct index (layout( column_major shared) temp highp 4-component vector of float) +0:95 v: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp 4-component vector of float) +0:95 direct index (layout( column_major shared) temp 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:95 '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:95 Constant: +0:95 1 (const int) +0:95 Constant: +0:95 1 (const int) +0:95 Constant: +0:95 1 (const int) +0:95 Constant: +0:95 4.300000 +0:95 4.300000 +0:95 4.300000 +0:95 4.300000 +0:96 v: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp 4-component vector of float) +0:96 direct index (layout( column_major shared) temp 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:96 '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:96 Constant: +0:96 1 (const int) +0:96 Constant: +0:96 1 (const int) +0:98 Constant: +0:98 7 (const int) +0:99 array length ( temp int) +0:99 v: direct index for structure (layout( column_major shared) buffer implicitly-sized array of 7-element array of highp 4-component vector of float) +0:99 direct index (layout( column_major shared) temp 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:99 '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:99 Constant: +0:99 0 (const int) +0:99 Constant: +0:99 1 (const int) +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:? '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) +0:? 'g4' ( global 4-element array of 7-element array of highp float) +0:? 'g5' ( global 5-element array of 7-element array of highp float) +0:? 'inArray' ( in 2-element array of 3-element array of highp float) +0:? 'outArray' ( smooth out 2-element array of 3-element array of highp float) +0:? 'ubaaname' (layout( column_major shared) uniform 2-element array of 3-element array of block{layout( column_major shared) uniform highp int a}) +0:? 'gl_VertexID' ( gl_VertexId highp int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId highp int InstanceId) + + +Linked vertex stage: + + +Shader version: 310 +ERROR: node is still EOpNull! +0:8 Function Definition: f(b1;f1;u1[4];i1[3][2]; ( global void) +0:8 Function Parameters: +0:8 'a' ( in bool) +0:8 'b' ( in highp float) +0:8 'c' ( in 4-element array of highp uint) +0:8 'd' ( in 3-element array of 2-element array of highp int) +0:11 Function Definition: main( ( global void) +0:11 Function Parameters: +0:? Sequence +0:13 Function Call: f(b1;f1;u1[4];i1[3][2]; ( global void) +0:13 Constant: +0:13 false (const bool) +0:13 Constant: +0:13 12.100000 +0:13 Constant: +0:13 0 (const uint) +0:13 1 (const uint) +0:13 1 (const uint) +0:13 2 (const uint) +0:13 'd' ( temp 3-element array of 2-element array of highp int) +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:? '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) +0:? 'g4' ( global 4-element array of 7-element array of highp float) +0:? 'g5' ( global 5-element array of 7-element array of highp float) +0:? 'inArray' ( in 2-element array of 3-element array of highp float) +0:? 'outArray' ( smooth out 2-element array of 3-element array of highp float) +0:? 'ubaaname' (layout( column_major shared) uniform 2-element array of 3-element array of block{layout( column_major shared) uniform highp int a}) +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/310implicitSizeArrayError.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310implicitSizeArrayError.vert.out new file mode 100644 index 0000000..07ac523 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310implicitSizeArrayError.vert.out @@ -0,0 +1,50 @@ +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. + + +Shader version: 310 +ERROR: node is still EOpNull! +0:6 Function Definition: main( ( global void) +0:6 Function Parameters: +0:7 Sequence +0:7 move second child to first child ( temp highp int) +0:7 'o' (layout( location=0) smooth out highp int) +0:7 direct index (layout( column_major shared) temp highp int) +0:7 a: direct index for structure (layout( column_major shared) uniform implicitly-sized array of highp int) +0:7 'uni' (layout( location=0 column_major shared) uniform block{layout( column_major shared) uniform implicitly-sized array of highp int a}) +0:7 Constant: +0:7 0 (const int) +0:7 Constant: +0:7 2 (const int) +0:? Linker Objects +0:? 'uni' (layout( location=0 column_major shared) uniform block{layout( column_major shared) uniform implicitly-sized array of highp int a}) +0:? 'o' (layout( location=0) smooth out highp int) +0:? 'gl_VertexID' ( gl_VertexId highp int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId highp int InstanceId) + + +Linked vertex stage: + + +Shader version: 310 +ERROR: node is still EOpNull! +0:6 Function Definition: main( ( global void) +0:6 Function Parameters: +0:7 Sequence +0:7 move second child to first child ( temp highp int) +0:7 'o' (layout( location=0) smooth out highp int) +0:7 direct index (layout( column_major shared) temp highp int) +0:7 a: direct index for structure (layout( column_major shared) uniform 1-element array of highp int) +0:7 'uni' (layout( location=0 column_major shared) uniform block{layout( column_major shared) uniform 1-element array of highp int a}) +0:7 Constant: +0:7 0 (const int) +0:7 Constant: +0:7 2 (const int) +0:? Linker Objects +0:? 'uni' (layout( location=0 column_major shared) uniform block{layout( column_major shared) uniform 1-element array of highp int a}) +0:? 'o' (layout( location=0) smooth out highp int) +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 new file mode 100644 index 0000000..4b5a84b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/330.frag.out @@ -0,0 +1,192 @@ +330.frag +ERROR: 0:27: 'block declaration' : cannot redeclare block: gl_block +ERROR: 0:31: 'gl_name' : identifiers starting with "gl_" are reserved +ERROR: 0:32: 'gl_i' : identifiers starting with "gl_" are reserved +ERROR: 0:35: 'gl_in' : no declaration found for redeclaration +ERROR: 0:39: 'gl_FragCoord' : cannot redeclare a non block as a block +ERROR: 0:44: 'non-literal layout-id value' : not supported for this version or the enabled extensions +ERROR: 0:44: 'layout-id value' : cannot be negative +ERROR: 0:45: 'non-literal layout-id value' : not supported for this version or the enabled extensions +ERROR: 0:46: 'layout-id value' : scalar integer expression required +ERROR: 0:46: 'location' : location is too large +ERROR: 0:47: 'non-literal layout-id value' : not supported for this version or the enabled extensions +ERROR: 0:48: 'non-literal layout-id value' : not supported for this version or the enabled extensions +ERROR: 0:52: 'f2' : cannot use layout qualifiers on structure members +ERROR: 0:57: 'location on block member' : not supported for this version or the enabled extensions +ERROR: 0:62: 'location on block member' : can only use in an in/out block +ERROR: 0:62: 'location qualifier on uniform or buffer' : not supported for this version or the enabled extensions +ERROR: 0:60: 'location qualifier on uniform or buffer' : not supported for this version or the enabled extensions +ERROR: 0:68: 'layout-id value' : cannot be negative +ERROR: 0:69: 'layout-id value' : cannot be negative +ERROR: 0:76: 'f2' : cannot use layout qualifiers on structure members +ERROR: 0:91: 'location on block member' : can only use in an in/out block +ERROR: 0:91: 'location qualifier on uniform or buffer' : not supported for this version or the enabled extensions +ERROR: 0:91: 'location' : overlapping use of location 3 +ERROR: 0:89: 'location qualifier on uniform or buffer' : not supported for this version or the enabled extensions +ERROR: 0:94: 'location' : either the block needs a location, or all members need a location, or no members have a location +ERROR: 0:108: 'A' : cannot use layout qualifiers on structure members +ERROR: 0:119: 'location' : overlapping use of location 44 +ERROR: 0:122: 'index' : can only be used with an explicit location +ERROR: 0:124: 'location' : overlapping use of location 0 +ERROR: 0:125: 'index' : can only be used on an output +ERROR: 0:126: 'index' : can only be used on an output +ERROR: 0:126: 'location/component/index' : cannot declare a default, use a full declaration +ERROR: 0:127: 'location/component/index' : cannot declare a default, use a full declaration +ERROR: 0:128: 'output block' : not supported in this stage: fragment +ERROR: 0:140: 'textureQueryLod' : no matching overloaded function found +ERROR: 0:140: 'assign' : cannot convert from ' const float' to ' temp 2-component vector of float' +ERROR: 0:141: 'textureQueryLod' : no matching overloaded function found +ERROR: 0:141: 'assign' : cannot convert from ' const float' to ' temp 2-component vector of float' +ERROR: 0:152: 'index' : value must be 0 or 1 +ERROR: 39 compilation errors. No code generated. + + +Shader version: 330 +Requested GL_ARB_enhanced_layouts +Requested GL_ARB_separate_shader_objects +ERROR: node is still EOpNull! +0:8 Function Definition: main( ( global void) +0:8 Function Parameters: +0:10 Sequence +0:10 move second child to first child ( temp 4-component vector of float) +0:10 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:10 'varyingVar' ( smooth in 4-component vector of float) +0:11 move second child to first child ( temp 4-component vector of float) +0:11 direct index ( temp 4-component vector of float FragData) +0:11 'gl_FragData' ( fragColor 32-element array of 4-component vector of float FragData) +0:11 Constant: +0:11 1 (const int) +0:11 'inVar' ( smooth in 4-component vector of float) +0:12 Sequence +0:12 move second child to first child ( temp int) +0:12 'buffer' ( temp int) +0:12 Constant: +0:12 4 (const int) +0:21 Function Definition: foo( ( global void) +0:21 Function Parameters: +0:23 Sequence +0:23 Sequence +0:23 move second child to first child ( temp 4-component vector of float) +0:23 'c' ( temp 4-component vector of float) +0:23 gl_Color: direct index for structure ( in 4-component vector of float Color) +0:23 'anon@0' ( in block{ in 4-component vector of float Color gl_Color, }) +0:23 Constant: +0:23 2 (const uint) +0:24 move second child to first child ( temp 4-component vector of float) +0:24 'outVar' (layout( location=0 index=0) out 4-component vector of float) +0:24 'inVar' ( smooth in 4-component vector of float) +0:133 Function Definition: qlod( ( global void) +0:133 Function Parameters: +0:? Sequence +0:140 'lod' ( temp 2-component vector of float) +0:141 'lod' ( temp 2-component vector of float) +0:147 Function Definition: fooKeyMem( ( global void) +0:147 Function Parameters: +0:149 Sequence +0:149 precise: direct index for structure ( global int) +0:149 'KeyMem' ( global structure{ global int precise}) +0:149 Constant: +0:149 0 (const int) +0:? Linker Objects +0:? 'inVar' ( smooth in 4-component vector of float) +0:? 'outVar' (layout( location=0 index=0) out 4-component vector of float) +0:? 'varyingVar' ( smooth in 4-component vector of float) +0:? 'anon@0' ( in block{ in 4-component vector of float Color gl_Color, }) +0:? 'gl_name' ( in block{ in int gl_i}) +0:? 'start' ( const int) +0:? 6 (const int) +0:? 'v1' ( smooth in 4-component vector of float) +0:? 'v2' (layout( location=8) smooth in 4-component vector of float) +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:? '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) +0:? 'v5' ( smooth in 4-component vector of float) +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:? '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:? '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) +0:? 'indexIn' (layout( location=27 index=0) smooth in 4-component vector of float) +0:? 'indexBlockI' (layout( location=26 index=0) out block{ out int a}) +0:? 'samp1D' ( uniform sampler1D) +0:? 'samp2Ds' ( uniform sampler2DShadow) +0:? 'precise' ( global int) +0:? 'KeyMem' ( global structure{ global int precise}) +0:? 'outIndex2' (layout( location=28 index=0) out 4-component vector of float) + + +Linked fragment stage: + +ERROR: Linking fragment stage: Cannot use gl_FragColor or gl_FragData when using user-defined outputs +ERROR: Linking fragment stage: Cannot use both gl_FragColor and gl_FragData + +Shader version: 330 +Requested GL_ARB_enhanced_layouts +Requested GL_ARB_separate_shader_objects +ERROR: node is still EOpNull! +0:8 Function Definition: main( ( global void) +0:8 Function Parameters: +0:10 Sequence +0:10 move second child to first child ( temp 4-component vector of float) +0:10 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:10 'varyingVar' ( smooth in 4-component vector of float) +0:11 move second child to first child ( temp 4-component vector of float) +0:11 direct index ( temp 4-component vector of float FragData) +0:11 'gl_FragData' ( fragColor 32-element array of 4-component vector of float FragData) +0:11 Constant: +0:11 1 (const int) +0:11 'inVar' ( smooth in 4-component vector of float) +0:12 Sequence +0:12 move second child to first child ( temp int) +0:12 'buffer' ( temp int) +0:12 Constant: +0:12 4 (const int) +0:? Linker Objects +0:? 'inVar' ( smooth in 4-component vector of float) +0:? 'outVar' (layout( location=0 index=0) out 4-component vector of float) +0:? 'varyingVar' ( smooth in 4-component vector of float) +0:? 'anon@0' ( in block{ in 4-component vector of float Color gl_Color, }) +0:? 'gl_name' ( in block{ in int gl_i}) +0:? 'start' ( const int) +0:? 6 (const int) +0:? 'v1' ( smooth in 4-component vector of float) +0:? 'v2' (layout( location=8) smooth in 4-component vector of float) +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:? '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) +0:? 'v5' ( smooth in 4-component vector of float) +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:? '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:? '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) +0:? 'indexIn' (layout( location=27 index=0) smooth in 4-component vector of float) +0:? 'indexBlockI' (layout( location=26 index=0) out block{ out int a}) +0:? 'samp1D' ( uniform sampler1D) +0:? 'samp2Ds' ( uniform sampler2DShadow) +0:? 'precise' ( global int) +0:? 'KeyMem' ( global structure{ global int precise}) +0:? 'outIndex2' (layout( location=28 index=0) out 4-component vector of float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/330comp.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/330comp.frag.out new file mode 100644 index 0000000..1b8ded1 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/330comp.frag.out @@ -0,0 +1,48 @@ +330comp.frag +Shader version: 330 +0:? Sequence +0:8 Function Definition: main( ( global void) +0:8 Function Parameters: +0:10 Sequence +0:10 move second child to first child ( temp 4-component vector of float) +0:10 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:10 'varyingVar' ( smooth in 4-component vector of float) +0:11 move second child to first child ( temp 4-component vector of float) +0:11 direct index ( temp 4-component vector of float FragData) +0:11 'gl_FragData' ( fragColor 32-element array of 4-component vector of float FragData) +0:11 Constant: +0:11 1 (const int) +0:11 vector-times-matrix ( temp 4-component vector of float) +0:11 'inVar' ( smooth in 4-component vector of float) +0:11 'gl_ModelViewMatrix' ( uniform 4X4 matrix of float) +0:? Linker Objects +0:? 'inVar' ( smooth in 4-component vector of float) +0:? 'outVar' ( out 4-component vector of float) +0:? 'varyingVar' ( smooth in 4-component vector of float) + + +Linked fragment stage: + +ERROR: Linking fragment stage: Cannot use both gl_FragColor and gl_FragData + +Shader version: 330 +0:? Sequence +0:8 Function Definition: main( ( global void) +0:8 Function Parameters: +0:10 Sequence +0:10 move second child to first child ( temp 4-component vector of float) +0:10 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:10 'varyingVar' ( smooth in 4-component vector of float) +0:11 move second child to first child ( temp 4-component vector of float) +0:11 direct index ( temp 4-component vector of float FragData) +0:11 'gl_FragData' ( fragColor 32-element array of 4-component vector of float FragData) +0:11 Constant: +0:11 1 (const int) +0:11 vector-times-matrix ( temp 4-component vector of float) +0:11 'inVar' ( smooth in 4-component vector of float) +0:11 'gl_ModelViewMatrix' ( uniform 4X4 matrix of float) +0:? Linker Objects +0:? 'inVar' ( smooth in 4-component vector of float) +0:? 'outVar' ( out 4-component vector of float) +0:? 'varyingVar' ( smooth in 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 new file mode 100644 index 0000000..bd936c7 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/400.frag.out @@ -0,0 +1,688 @@ +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 +ERROR: 0:30: 'location qualifier on input' : not supported for this version or the enabled extensions +ERROR: 0:38: 'location qualifier on uniform or buffer' : not supported for this version or the enabled extensions +ERROR: 0:40: 'redeclaration' : cannot apply layout qualifier to gl_Color +ERROR: 0:41: 'redeclaration' : cannot change qualification of gl_ClipDistance +ERROR: 0:43: 'gl_FragCoord' : cannot redeclare after use +ERROR: 0:51: 'texel offset' : argument must be compile-time constant +ERROR: 0:53: 'texel offset' : value is out of range: [gl_MinProgramTexelOffset, gl_MaxProgramTexelOffset] +ERROR: 0:53: 'texel offset' : value is out of range: [gl_MinProgramTexelOffset, gl_MaxProgramTexelOffset] +ERROR: 0:54: 'texel offset' : value is out of range: [gl_MinProgramTexelOffset, gl_MaxProgramTexelOffset] +ERROR: 0:54: 'texel offset' : value is out of range: [gl_MinProgramTexelOffset, gl_MaxProgramTexelOffset] +ERROR: 0:57: 'patch' : not supported in this stage: fragment +ERROR: 0:58: 'patch' : not supported in this stage: fragment +ERROR: 0:58: 'centroid/sample/patch' : can't use auxiliary qualifier on a fragment output +ERROR: 0:73: 'dFdxFine' : required extension not requested: GL_ARB_derivative_control +ERROR: 0:74: 'dFdyCoarse' : required extension not requested: GL_ARB_derivative_control +ERROR: 0:75: 'fwidthCoarse' : required extension not requested: GL_ARB_derivative_control +ERROR: 0:75: 'fwidthFine' : required extension not requested: GL_ARB_derivative_control +ERROR: 0:104: 'centroid/sample/patch' : can't use auxiliary qualifier on a fragment output +ERROR: 0:123: 'interpolateAtCentroid' : no matching overloaded function found +ERROR: 0:125: 'interpolateAtCentroid' : first argument must be an interpolant, or interpolant-array element +ERROR: 0:127: 'interpolateAtSample' : no matching overloaded function found +ERROR: 0:132: 'interpolateAtOffset' : no matching overloaded function found +ERROR: 0:134: 'interpolateAtOffset' : first argument must be an interpolant, or interpolant-array element +ERROR: 0:135: 'interpolateAtOffset' : first argument must be an interpolant, or interpolant-array element +ERROR: 0:136: 'interpolateAtOffset' : first argument must be an interpolant, or interpolant-array element +ERROR: 0:139: 'interpolateAtCentroid' : first argument must be an interpolant, or interpolant-array element +ERROR: 0:140: 'interpolateAtSample' : first argument must be an interpolant, or interpolant-array element +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. + + +Shader version: 400 +Requested GL_ARB_derivative_control +Requested GL_ARB_separate_shader_objects +gl_FragCoord pixel center is integer +gl_FragCoord origin is upper left +ERROR: node is still EOpNull! +0:10 Function Definition: main( ( global void) +0:10 Function Parameters: +0:? Sequence +0:13 move second child to first child ( temp 4-component vector of float) +0:13 'v' ( temp 4-component vector of float) +0:13 texture ( global 4-component vector of float) +0:13 indirect index ( temp sampler2D) +0:13 'arrayedSampler' ( uniform 5-element array of sampler2D) +0:13 'i' ( flat in int) +0:13 'c2D' ( smooth in 2-component vector of float) +0:14 move second child to first child ( temp float) +0:14 direct index ( temp float) +0:14 'outp' ( out 4-component vector of float) +0:14 Constant: +0:14 0 (const int) +0:14 direct index ( smooth temp float ClipDistance) +0:14 'gl_ClipDistance' ( smooth in 4-element array of float ClipDistance) +0:14 Constant: +0:14 1 (const int) +0:18 Sequence +0:18 move second child to first child ( temp 4-component vector of uint) +0:18 'uv4' ( temp 4-component vector of uint) +0:18 textureGatherOffsets ( global 4-component vector of uint) +0:18 'samp2dr' ( uniform usampler2DRect) +0:18 'c2D' ( smooth in 2-component vector of float) +0:18 'offsets' ( temp 4-element array of 2-component vector of int) +0:18 Constant: +0:18 2 (const int) +0:19 move second child to first child ( temp 4-component vector of uint) +0:19 'uv4' ( temp 4-component vector of uint) +0:19 textureGatherOffsets ( global 4-component vector of uint) +0:19 'samp2dr' ( uniform usampler2DRect) +0:19 'c2D' ( smooth in 2-component vector of float) +0:19 Constant: +0:19 1 (const int) +0:19 2 (const int) +0:19 3 (const int) +0:19 4 (const int) +0:19 15 (const int) +0:19 16 (const int) +0:19 -2 (const int) +0:19 0 (const int) +0:19 Constant: +0:19 2 (const int) +0:20 Sequence +0:20 move second child to first child ( temp 4-component vector of float) +0:20 'v4' ( temp 4-component vector of float) +0:20 textureGather ( global 4-component vector of float) +0:20 direct index ( temp sampler2D) +0:20 'arrayedSampler' ( uniform 5-element array of sampler2D) +0:20 Constant: +0:20 0 (const int) +0:20 'c2D' ( smooth in 2-component vector of float) +0:21 Sequence +0:21 move second child to first child ( temp 4-component vector of int) +0:21 'iv4' ( temp 4-component vector of int) +0:21 textureGatherOffset ( global 4-component vector of int) +0:21 'isamp2DA' ( uniform isampler2DArray) +0:21 Constant: +0:21 0.100000 +0:21 0.100000 +0:21 0.100000 +0:21 Constant: +0:21 1 (const int) +0:21 1 (const int) +0:21 Constant: +0:21 3 (const int) +0:22 move second child to first child ( temp 4-component vector of int) +0:22 'iv4' ( temp 4-component vector of int) +0:22 textureGatherOffset ( global 4-component vector of int) +0:22 'isamp2DA' ( uniform isampler2DArray) +0:22 Constant: +0:22 0.100000 +0:22 0.100000 +0:22 0.100000 +0:22 Constant: +0:22 1 (const int) +0:22 1 (const int) +0:22 'i' ( flat in int) +0:23 move second child to first child ( temp 4-component vector of int) +0:23 'iv4' ( temp 4-component vector of int) +0:23 textureGatherOffset ( global 4-component vector of int) +0:23 'isamp2DA' ( uniform isampler2DArray) +0:23 Constant: +0:23 0.100000 +0:23 0.100000 +0:23 0.100000 +0:23 Constant: +0:23 1 (const int) +0:23 1 (const int) +0:23 Constant: +0:23 4 (const int) +0:24 move second child to first child ( temp 4-component vector of int) +0:24 'iv4' ( temp 4-component vector of int) +0:24 textureGatherOffset ( global 4-component vector of int) +0:24 'isamp2DA' ( uniform isampler2DArray) +0:24 Constant: +0:24 0.100000 +0:24 0.100000 +0:24 0.100000 +0:24 Constant: +0:24 1 (const int) +0:24 1 (const int) +0:24 Constant: +0:24 3 (const int) +0:25 move second child to first child ( temp 4-component vector of int) +0:25 'iv4' ( temp 4-component vector of int) +0:25 textureGatherOffset ( global 4-component vector of int) +0:25 'isamp2DA' ( uniform isampler2DArray) +0:25 Constant: +0:25 0.100000 +0:25 0.100000 +0:25 0.100000 +0:25 Construct ivec2 ( temp 2-component vector of int) +0:25 'i' ( flat in int) +0:27 Sequence +0:27 move second child to first child ( temp 4-component vector of float) +0:27 'c' ( temp 4-component vector of float) +0:27 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:47 Function Definition: foo23( ( global void) +0:47 Function Parameters: +0:? Sequence +0:51 textureProjGradOffset ( global float) +0:51 'u2drs' ( uniform sampler2DRectShadow) +0:51 'outp' ( out 4-component vector of float) +0:51 Constant: +0:51 0.000000 +0:51 0.000000 +0:51 Constant: +0:51 0.000000 +0:51 0.000000 +0:51 Convert float to int ( temp 2-component vector of int) +0:51 'c2D' ( smooth in 2-component vector of float) +0:52 textureProjGradOffset ( global float) +0:52 'u2drs' ( uniform sampler2DRectShadow) +0:52 'outp' ( out 4-component vector of float) +0:52 Constant: +0:52 0.000000 +0:52 0.000000 +0:52 Constant: +0:52 0.000000 +0:52 0.000000 +0:52 Constant: +0:52 3 (const int) +0:52 4 (const int) +0:53 textureProjGradOffset ( global float) +0:53 'u2drs' ( uniform sampler2DRectShadow) +0:53 'outp' ( out 4-component vector of float) +0:53 Constant: +0:53 0.000000 +0:53 0.000000 +0:53 Constant: +0:53 0.000000 +0:53 0.000000 +0:53 Constant: +0:53 15 (const int) +0:53 16 (const int) +0:54 textureProjGradOffset ( global float) +0:54 'u2drs' ( uniform sampler2DRectShadow) +0:54 'outp' ( out 4-component vector of float) +0:54 Constant: +0:54 0.000000 +0:54 0.000000 +0:54 Constant: +0:54 0.000000 +0:54 0.000000 +0:54 Constant: +0:54 -10 (const int) +0:54 20 (const int) +0:60 Function Definition: foo24( ( global void) +0:60 Function Parameters: +0:? Sequence +0:63 move second child to first child ( temp 3-component vector of double) +0:63 'df' ( temp 3-component vector of double) +0:63 modf ( global 3-component vector of double) +0:63 Convert float to double ( temp 3-component vector of double) +0:63 vector swizzle ( temp 3-component vector of float) +0:63 'outp' ( out 4-component vector of float) +0:63 Sequence +0:63 Constant: +0:63 0 (const int) +0:63 Constant: +0:63 1 (const int) +0:63 Constant: +0:63 2 (const int) +0:63 'di' ( temp 3-component vector of double) +0:71 Function Definition: foodc1( ( global void) +0:71 Function Parameters: +0:73 Sequence +0:73 Sequence +0:73 move second child to first child ( temp 2-component vector of float) +0:73 'v2' ( temp 2-component vector of float) +0:73 dPdxFine ( global 2-component vector of float) +0:73 'in2' ( smooth in 2-component vector of float) +0:74 Sequence +0:74 move second child to first child ( temp 3-component vector of float) +0:74 'v3' ( temp 3-component vector of float) +0:74 dPdyCoarse ( global 3-component vector of float) +0:74 'in3' ( smooth in 3-component vector of float) +0:75 Sequence +0:75 move second child to first child ( temp 4-component vector of float) +0:75 'v4' ( temp 4-component vector of float) +0:75 add ( temp 4-component vector of float) +0:75 fwidthCoarse ( global 4-component vector of float) +0:75 'in4' ( smooth in 4-component vector of float) +0:75 fwidthFine ( global 4-component vector of float) +0:75 'in4' ( smooth in 4-component vector of float) +0:80 Function Definition: foodc2( ( global void) +0:80 Function Parameters: +0:82 Sequence +0:82 Sequence +0:82 move second child to first child ( temp 2-component vector of float) +0:82 'v2' ( temp 2-component vector of float) +0:82 dPdxFine ( global 2-component vector of float) +0:82 'in2' ( smooth in 2-component vector of float) +0:83 Sequence +0:83 move second child to first child ( temp 3-component vector of float) +0:83 'v3' ( temp 3-component vector of float) +0:83 dPdyCoarse ( global 3-component vector of float) +0:83 'in3' ( smooth in 3-component vector of float) +0:84 Sequence +0:84 move second child to first child ( temp 4-component vector of float) +0:84 'v4' ( temp 4-component vector of float) +0:84 add ( temp 4-component vector of float) +0:84 fwidthCoarse ( global 4-component vector of float) +0:84 'in4' ( smooth in 4-component vector of float) +0:84 fwidthFine ( global 4-component vector of float) +0:84 'in4' ( smooth in 4-component vector of float) +0:89 move second child to first child ( temp 2-component vector of float) +0:89 'v2' ( temp 2-component vector of float) +0:89 frexp ( global 2-component vector of float) +0:89 'v2' ( temp 2-component vector of float) +0:89 'i2' ( temp 2-component vector of int) +0:90 move second child to first child ( temp 3-component vector of float) +0:90 'v3' ( temp 3-component vector of float) +0:90 ldexp ( global 3-component vector of float) +0:90 'v3' ( temp 3-component vector of float) +0:90 'i3' ( temp 3-component vector of int) +0:92 move second child to first child ( temp uint) +0:92 'u1' ( temp uint) +0:92 PackUnorm4x8 ( global uint) +0:92 'v4' ( temp 4-component vector of float) +0:93 move second child to first child ( temp uint) +0:93 'u1' ( temp uint) +0:93 PackSnorm4x8 ( global uint) +0:93 'v4' ( temp 4-component vector of float) +0:94 move second child to first child ( temp 4-component vector of float) +0:94 'v4' ( temp 4-component vector of float) +0:94 UnpackUnorm4x8 ( global 4-component vector of float) +0:94 'u1' ( temp uint) +0:95 move second child to first child ( temp 4-component vector of float) +0:95 'v4' ( temp 4-component vector of float) +0:95 UnpackSnorm4x8 ( global 4-component vector of float) +0:95 'u1' ( temp uint) +0:99 move second child to first child ( temp double) +0:99 'd' ( temp double) +0:99 PackDouble2x32 ( global double) +0:99 'u2' ( temp 2-component vector of uint) +0:100 move second child to first child ( temp 2-component vector of uint) +0:100 'u2' ( temp 2-component vector of uint) +0:100 UnpackDouble2x32 ( global 2-component vector of uint) +0:100 'd' ( temp double) +0:117 Function Definition: interp( ( global void) +0:117 Function Parameters: +0:119 Sequence +0:119 interpolateAtCentroid ( global 2-component vector of float) +0:119 'colorfc' ( centroid flat in 2-component vector of float) +0:120 interpolateAtCentroid ( global 4-component vector of float) +0:120 'colorSampIn' ( smooth sample in 4-component vector of float) +0:121 interpolateAtCentroid ( global 4-component vector of float) +0:121 'colorfsi' ( noperspective in 4-component vector of float) +0:122 interpolateAtCentroid ( global float) +0:122 'scalarIn' ( smooth in float) +0:123 Constant: +0:123 0.000000 +0:124 interpolateAtCentroid ( global 3-component vector of float) +0:124 direct index ( smooth sample temp 3-component vector of float) +0:124 'sampInArray' ( smooth sample in 4-element array of 3-component vector of float) +0:124 Constant: +0:124 2 (const int) +0:125 interpolateAtCentroid ( global 2-component vector of float) +0:125 vector swizzle ( temp 2-component vector of float) +0:125 direct index ( smooth sample temp 3-component vector of float) +0:125 'sampInArray' ( smooth sample in 4-element array of 3-component vector of float) +0:125 Constant: +0:125 2 (const int) +0:125 Sequence +0:125 Constant: +0:125 0 (const int) +0:125 Constant: +0:125 1 (const int) +0:127 Constant: +0:127 0.000000 +0:128 interpolateAtSample ( global 3-component vector of float) +0:128 indirect index ( smooth sample temp 3-component vector of float) +0:128 'sampInArray' ( smooth sample in 4-element array of 3-component vector of float) +0:128 'i' ( flat in int) +0:128 Constant: +0:128 0 (const int) +0:129 interpolateAtSample ( global float) +0:129 x: direct index for structure ( global float) +0:129 's1' ( smooth in structure{ global float x}) +0:129 Constant: +0:129 0 (const int) +0:129 Constant: +0:129 2 (const int) +0:130 interpolateAtSample ( global float) +0:130 'scalarIn' ( smooth in float) +0:130 Constant: +0:130 1 (const int) +0:132 Constant: +0:132 0.000000 +0:133 interpolateAtOffset ( global 3-component vector of float) +0:133 direct index ( smooth sample temp 3-component vector of float) +0:133 'sampInArray' ( smooth sample in 4-element array of 3-component vector of float) +0:133 Constant: +0:133 2 (const int) +0:133 Constant: +0:133 0.200000 +0:133 0.200000 +0:134 interpolateAtOffset ( global 2-component vector of float) +0:134 vector swizzle ( temp 2-component vector of float) +0:134 direct index ( smooth sample temp 3-component vector of float) +0:134 'sampInArray' ( smooth sample in 4-element array of 3-component vector of float) +0:134 Constant: +0:134 2 (const int) +0:134 Sequence +0:134 Constant: +0:134 0 (const int) +0:134 Constant: +0:134 1 (const int) +0:134 Constant: +0:134 0.200000 +0:134 0.200000 +0:135 interpolateAtOffset ( global float) +0:135 add ( temp float) +0:135 'scalarIn' ( smooth in float) +0:135 'scalarIn' ( smooth in float) +0:135 Constant: +0:135 0.200000 +0:135 0.200000 +0:136 interpolateAtOffset ( global float) +0:136 x: direct index for structure ( global float) +0:136 's2' ( sample temp structure{ global float x}) +0:136 Constant: +0:136 0 (const int) +0:136 Constant: +0:136 0.200000 +0:136 0.200000 +0:139 interpolateAtCentroid ( global float) +0:139 'f' ( temp float) +0:140 interpolateAtSample ( global 4-component vector of float) +0:140 'outp' ( out 4-component vector of float) +0:140 Constant: +0:140 0 (const int) +0:161 Function Definition: qlod( ( global void) +0:161 Function Parameters: +0:? Sequence +0:168 move second child to first child ( temp 2-component vector of float) +0:168 'lod' ( temp 2-component vector of float) +0:168 textureQueryLod ( global 2-component vector of float) +0:168 'samp1D' ( uniform sampler1D) +0:168 'pf' ( temp float) +0:169 move second child to first child ( temp 2-component vector of float) +0:169 'lod' ( temp 2-component vector of float) +0:169 textureQueryLod ( global 2-component vector of float) +0:169 'isamp2D' ( uniform isampler2D) +0:169 'pf2' ( temp 2-component vector of float) +0:170 move second child to first child ( temp 2-component vector of float) +0:170 'lod' ( temp 2-component vector of float) +0:170 textureQueryLod ( global 2-component vector of float) +0:170 'usamp3D' ( uniform usampler3D) +0:170 'pf3' ( temp 3-component vector of float) +0:171 move second child to first child ( temp 2-component vector of float) +0:171 'lod' ( temp 2-component vector of float) +0:171 textureQueryLod ( global 2-component vector of float) +0:171 'sampCube' ( uniform samplerCube) +0:171 'pf3' ( temp 3-component vector of float) +0:172 move second child to first child ( temp 2-component vector of float) +0:172 'lod' ( temp 2-component vector of float) +0:172 textureQueryLod ( global 2-component vector of float) +0:172 'isamp1DA' ( uniform isampler1DArray) +0:172 'pf' ( temp float) +0:173 move second child to first child ( temp 2-component vector of float) +0:173 'lod' ( temp 2-component vector of float) +0:173 textureQueryLod ( global 2-component vector of float) +0:173 'usamp2DA' ( uniform usampler2DArray) +0:173 'pf2' ( temp 2-component vector of float) +0:174 move second child to first child ( temp 2-component vector of float) +0:174 'lod' ( temp 2-component vector of float) +0:174 textureQueryLod ( global 2-component vector of float) +0:174 'isampCubeA' ( uniform isamplerCubeArray) +0:174 'pf3' ( temp 3-component vector of float) +0:176 move second child to first child ( temp 2-component vector of float) +0:176 'lod' ( temp 2-component vector of float) +0:176 textureQueryLod ( global 2-component vector of float) +0:176 'samp1Ds' ( uniform sampler1DShadow) +0:176 'pf' ( temp float) +0:177 move second child to first child ( temp 2-component vector of float) +0:177 'lod' ( temp 2-component vector of float) +0:177 textureQueryLod ( global 2-component vector of float) +0:177 'samp2Ds' ( uniform sampler2DShadow) +0:177 'pf2' ( temp 2-component vector of float) +0:178 move second child to first child ( temp 2-component vector of float) +0:178 'lod' ( temp 2-component vector of float) +0:178 textureQueryLod ( global 2-component vector of float) +0:178 'sampCubes' ( uniform samplerCubeShadow) +0:178 'pf3' ( temp 3-component vector of float) +0:179 move second child to first child ( temp 2-component vector of float) +0:179 'lod' ( temp 2-component vector of float) +0:179 textureQueryLod ( global 2-component vector of float) +0:179 'samp1DAs' ( uniform sampler1DArrayShadow) +0:179 'pf' ( temp float) +0:180 move second child to first child ( temp 2-component vector of float) +0:180 'lod' ( temp 2-component vector of float) +0:180 textureQueryLod ( global 2-component vector of float) +0:180 'samp2DAs' ( uniform sampler2DArrayShadow) +0:180 'pf2' ( temp 2-component vector of float) +0:181 move second child to first child ( temp 2-component vector of float) +0:181 'lod' ( temp 2-component vector of float) +0:181 textureQueryLod ( global 2-component vector of float) +0:181 'sampCubeAs' ( uniform samplerCubeArrayShadow) +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:? Linker Objects +0:? 'c2D' ( smooth in 2-component vector of float) +0:? 'i' ( flat in int) +0:? 'outp' ( out 4-component vector of float) +0:? 'arrayedSampler' ( uniform 5-element array of sampler2D) +0:? 'samp2dr' ( uniform usampler2DRect) +0:? 'isamp2DA' ( uniform isampler2DArray) +0:? 'gl_ClipDistance' ( smooth in 4-element array of float ClipDistance) +0:? 'vl' (layout( location=4) smooth in 4-component vector of float) +0:? 'vl2' (layout( location=6) smooth in 4-component vector of float) +0:? 'uv3' (layout( location=3) uniform 3-component vector of float) +0:? 'anon@0' ( in block{ in float FogFragCoord gl_FogFragCoord, in implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord, smooth in 4-component vector of float Color gl_Color, in 4-component vector of float SecondaryColor gl_SecondaryColor}) +0:? 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:? 'u2drs' ( uniform sampler2DRectShadow) +0:? 'patchIn' ( smooth patch in 4-component vector of float) +0:? 'patchOut' ( patch out 4-component vector of float) +0:? 'in1' ( smooth in float) +0:? 'in2' ( smooth in 2-component vector of float) +0:? 'in3' ( smooth in 3-component vector of float) +0:? 'in4' ( smooth in 4-component vector of float) +0:? 'colorSampIn' ( smooth sample in 4-component vector of float) +0:? 'colorSampleBad' ( sample out 4-component vector of float) +0:? 'colorfsi' ( noperspective in 4-component vector of float) +0:? 'sampInArray' ( smooth sample in 4-element array of 3-component vector of float) +0:? 'scalarIn' ( smooth in float) +0:? 'colorfc' ( centroid flat in 2-component vector of float) +0:? 's1' ( smooth in structure{ global float x}) +0:? 's2' ( sample temp structure{ global float x}) +0:? 'samp1D' ( uniform sampler1D) +0:? 'isamp2D' ( uniform isampler2D) +0:? 'usamp3D' ( uniform usampler3D) +0:? 'sampCube' ( uniform samplerCube) +0:? 'isamp1DA' ( uniform isampler1DArray) +0:? 'usamp2DA' ( uniform usampler2DArray) +0:? 'isampCubeA' ( uniform isamplerCubeArray) +0:? 'samp1Ds' ( uniform sampler1DShadow) +0:? 'samp2Ds' ( uniform sampler2DShadow) +0:? 'sampCubes' ( uniform samplerCubeShadow) +0:? 'samp1DAs' ( uniform sampler1DArrayShadow) +0:? 'samp2DAs' ( uniform sampler2DArrayShadow) +0:? 'sampCubeAs' ( uniform samplerCubeArrayShadow) +0:? 'sampBuf' ( uniform samplerBuffer) +0:? 'sampRect' ( uniform sampler2DRect) + + +Linked fragment stage: + + +Shader version: 400 +Requested GL_ARB_derivative_control +Requested GL_ARB_separate_shader_objects +gl_FragCoord pixel center is integer +gl_FragCoord origin is upper left +ERROR: node is still EOpNull! +0:10 Function Definition: main( ( global void) +0:10 Function Parameters: +0:? Sequence +0:13 move second child to first child ( temp 4-component vector of float) +0:13 'v' ( temp 4-component vector of float) +0:13 texture ( global 4-component vector of float) +0:13 indirect index ( temp sampler2D) +0:13 'arrayedSampler' ( uniform 5-element array of sampler2D) +0:13 'i' ( flat in int) +0:13 'c2D' ( smooth in 2-component vector of float) +0:14 move second child to first child ( temp float) +0:14 direct index ( temp float) +0:14 'outp' ( out 4-component vector of float) +0:14 Constant: +0:14 0 (const int) +0:14 direct index ( smooth temp float ClipDistance) +0:14 'gl_ClipDistance' ( smooth in 4-element array of float ClipDistance) +0:14 Constant: +0:14 1 (const int) +0:18 Sequence +0:18 move second child to first child ( temp 4-component vector of uint) +0:18 'uv4' ( temp 4-component vector of uint) +0:18 textureGatherOffsets ( global 4-component vector of uint) +0:18 'samp2dr' ( uniform usampler2DRect) +0:18 'c2D' ( smooth in 2-component vector of float) +0:18 'offsets' ( temp 4-element array of 2-component vector of int) +0:18 Constant: +0:18 2 (const int) +0:19 move second child to first child ( temp 4-component vector of uint) +0:19 'uv4' ( temp 4-component vector of uint) +0:19 textureGatherOffsets ( global 4-component vector of uint) +0:19 'samp2dr' ( uniform usampler2DRect) +0:19 'c2D' ( smooth in 2-component vector of float) +0:19 Constant: +0:19 1 (const int) +0:19 2 (const int) +0:19 3 (const int) +0:19 4 (const int) +0:19 15 (const int) +0:19 16 (const int) +0:19 -2 (const int) +0:19 0 (const int) +0:19 Constant: +0:19 2 (const int) +0:20 Sequence +0:20 move second child to first child ( temp 4-component vector of float) +0:20 'v4' ( temp 4-component vector of float) +0:20 textureGather ( global 4-component vector of float) +0:20 direct index ( temp sampler2D) +0:20 'arrayedSampler' ( uniform 5-element array of sampler2D) +0:20 Constant: +0:20 0 (const int) +0:20 'c2D' ( smooth in 2-component vector of float) +0:21 Sequence +0:21 move second child to first child ( temp 4-component vector of int) +0:21 'iv4' ( temp 4-component vector of int) +0:21 textureGatherOffset ( global 4-component vector of int) +0:21 'isamp2DA' ( uniform isampler2DArray) +0:21 Constant: +0:21 0.100000 +0:21 0.100000 +0:21 0.100000 +0:21 Constant: +0:21 1 (const int) +0:21 1 (const int) +0:21 Constant: +0:21 3 (const int) +0:22 move second child to first child ( temp 4-component vector of int) +0:22 'iv4' ( temp 4-component vector of int) +0:22 textureGatherOffset ( global 4-component vector of int) +0:22 'isamp2DA' ( uniform isampler2DArray) +0:22 Constant: +0:22 0.100000 +0:22 0.100000 +0:22 0.100000 +0:22 Constant: +0:22 1 (const int) +0:22 1 (const int) +0:22 'i' ( flat in int) +0:23 move second child to first child ( temp 4-component vector of int) +0:23 'iv4' ( temp 4-component vector of int) +0:23 textureGatherOffset ( global 4-component vector of int) +0:23 'isamp2DA' ( uniform isampler2DArray) +0:23 Constant: +0:23 0.100000 +0:23 0.100000 +0:23 0.100000 +0:23 Constant: +0:23 1 (const int) +0:23 1 (const int) +0:23 Constant: +0:23 4 (const int) +0:24 move second child to first child ( temp 4-component vector of int) +0:24 'iv4' ( temp 4-component vector of int) +0:24 textureGatherOffset ( global 4-component vector of int) +0:24 'isamp2DA' ( uniform isampler2DArray) +0:24 Constant: +0:24 0.100000 +0:24 0.100000 +0:24 0.100000 +0:24 Constant: +0:24 1 (const int) +0:24 1 (const int) +0:24 Constant: +0:24 3 (const int) +0:25 move second child to first child ( temp 4-component vector of int) +0:25 'iv4' ( temp 4-component vector of int) +0:25 textureGatherOffset ( global 4-component vector of int) +0:25 'isamp2DA' ( uniform isampler2DArray) +0:25 Constant: +0:25 0.100000 +0:25 0.100000 +0:25 0.100000 +0:25 Construct ivec2 ( temp 2-component vector of int) +0:25 'i' ( flat in int) +0:27 Sequence +0:27 move second child to first child ( temp 4-component vector of float) +0:27 'c' ( temp 4-component vector of float) +0:27 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:? Linker Objects +0:? 'c2D' ( smooth in 2-component vector of float) +0:? 'i' ( flat in int) +0:? 'outp' ( out 4-component vector of float) +0:? 'arrayedSampler' ( uniform 5-element array of sampler2D) +0:? 'samp2dr' ( uniform usampler2DRect) +0:? 'isamp2DA' ( uniform isampler2DArray) +0:? 'gl_ClipDistance' ( smooth in 4-element array of float ClipDistance) +0:? 'vl' (layout( location=4) smooth in 4-component vector of float) +0:? 'vl2' (layout( location=6) smooth in 4-component vector of float) +0:? 'uv3' (layout( location=3) uniform 3-component vector of float) +0:? 'anon@0' ( in block{ in float FogFragCoord gl_FogFragCoord, in 1-element array of 4-component vector of float TexCoord gl_TexCoord, smooth in 4-component vector of float Color gl_Color, in 4-component vector of float SecondaryColor gl_SecondaryColor}) +0:? 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:? 'u2drs' ( uniform sampler2DRectShadow) +0:? 'patchIn' ( smooth patch in 4-component vector of float) +0:? 'patchOut' ( patch out 4-component vector of float) +0:? 'in1' ( smooth in float) +0:? 'in2' ( smooth in 2-component vector of float) +0:? 'in3' ( smooth in 3-component vector of float) +0:? 'in4' ( smooth in 4-component vector of float) +0:? 'colorSampIn' ( smooth sample in 4-component vector of float) +0:? 'colorSampleBad' ( sample out 4-component vector of float) +0:? 'colorfsi' ( noperspective in 4-component vector of float) +0:? 'sampInArray' ( smooth sample in 4-element array of 3-component vector of float) +0:? 'scalarIn' ( smooth in float) +0:? 'colorfc' ( centroid flat in 2-component vector of float) +0:? 's1' ( smooth in structure{ global float x}) +0:? 's2' ( sample temp structure{ global float x}) +0:? 'samp1D' ( uniform sampler1D) +0:? 'isamp2D' ( uniform isampler2D) +0:? 'usamp3D' ( uniform usampler3D) +0:? 'sampCube' ( uniform samplerCube) +0:? 'isamp1DA' ( uniform isampler1DArray) +0:? 'usamp2DA' ( uniform usampler2DArray) +0:? 'isampCubeA' ( uniform isamplerCubeArray) +0:? 'samp1Ds' ( uniform sampler1DShadow) +0:? 'samp2Ds' ( uniform sampler2DShadow) +0:? 'sampCubes' ( uniform samplerCubeShadow) +0:? 'samp1DAs' ( uniform sampler1DArrayShadow) +0:? 'samp2DAs' ( uniform sampler2DArrayShadow) +0:? 'sampCubeAs' ( uniform samplerCubeArrayShadow) +0:? 'sampBuf' ( uniform samplerBuffer) +0:? 'sampRect' ( uniform sampler2DRect) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/400.geom.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/400.geom.out new file mode 100644 index 0000000..989b439 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/400.geom.out @@ -0,0 +1,1092 @@ +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 +ERROR: 0:20: 'gl_PointSize' : cannot add patch to redeclared block member +ERROR: 0:25: 'length' : array must first be sized by a redeclaration or layout qualifier +ERROR: 0:36: 'length' : array must first be sized by a redeclaration or layout qualifier +ERROR: 0:40: 'triangles' : inconsistent input primitive for array size of colorBad +ERROR: 0:44: 'triangles' : inconsistent input primitive for array size of colorbad2 +ERROR: 0:56: 'location' : overlapping use of location 4 +ERROR: 0:58: 'patch' : not supported in this stage: geometry +ERROR: 0:59: 'patch' : not supported in this stage: geometry +ERROR: 0:61: 'in' : type must be an array: scalar +ERROR: 0:63: 'invocations' : can only apply to 'in' +ERROR: 0:64: 'max_vertices' : can only apply to 'out' +ERROR: 0:65: 'max_vertices' : can only apply to 'out' +ERROR: 0:65: 'invocations' : can only apply to 'in' +ERROR: 0:67: 'in' : type must be an array: inbls +ERROR: 0:71: 'triangles' : inconsistent input primitive for array size of inbla +ERROR: 0:103: 'index' : there is no such layout identifier for this stage taking an assigned value +ERROR: 0:115: 'textureQueryLod' : no matching overloaded function found +ERROR: 0:115: 'assign' : cannot convert from ' const float' to ' temp 2-component vector of float' +ERROR: 0:116: 'textureQueryLod' : no matching overloaded function found +ERROR: 0:116: 'assign' : cannot convert from ' const float' to ' temp 2-component vector of float' +ERROR: 23 compilation errors. No code generated. + + +Shader version: 400 +Requested GL_ARB_separate_shader_objects +invocations = 4 +max_vertices = 127 +input primitive = triangles +output primitive = none +ERROR: node is still EOpNull! +0:3 Function Definition: main( ( global void) +0:3 Function Parameters: +0:5 Sequence +0:5 EmitStreamVertex ( global void) +0:5 Constant: +0:5 1 (const int) +0:6 EndStreamPrimitive ( global void) +0:6 Constant: +0:6 0 (const int) +0:7 EmitVertex ( global void) +0:8 EndPrimitive ( global void) +0:9 Sequence +0:9 move second child to first child ( temp int) +0:9 'id' ( temp int) +0:9 'gl_InvocationID' ( in int InvocationID) +0:23 Function Definition: foo( ( global void) +0:23 Function Parameters: +0:25 Sequence +0:25 Constant: +0:25 1 (const int) +0:26 gl_Position: direct index for structure ( in 4-component vector of float Position) +0:26 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize}) +0:26 'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize}) +0:26 Constant: +0:26 1 (const int) +0:26 Constant: +0:26 0 (const int) +0:34 Function Definition: foo2( ( global void) +0:34 Function Parameters: +0:36 Sequence +0:36 Constant: +0:36 1 (const int) +0:37 Constant: +0:37 3 (const int) +0:46 Function Definition: foo3( ( global void) +0:46 Function Parameters: +0:48 Sequence +0:48 Constant: +0:48 3 (const int) +0:49 Constant: +0:49 3 (const int) +0:50 Constant: +0:50 3 (const int) +0:51 Constant: +0:51 3 (const int) +0:75 Function Definition: bits( ( global void) +0:75 Function Parameters: +0:? Sequence +0:78 move second child to first child ( temp 2-component vector of uint) +0:78 'u2' ( temp 2-component vector of uint) +0:78 addCarry ( global 2-component vector of uint) +0:78 'u2' ( temp 2-component vector of uint) +0:78 'u2' ( temp 2-component vector of uint) +0:78 'u2' ( temp 2-component vector of uint) +0:80 move second child to first child ( temp uint) +0:80 'u1' ( temp uint) +0:80 subBorrow ( global uint) +0:80 'u1' ( temp uint) +0:80 'u1' ( temp uint) +0:80 'u1' ( temp uint) +0:82 uMulExtended ( global void) +0:82 'u4' ( temp 4-component vector of uint) +0:82 'u4' ( temp 4-component vector of uint) +0:82 'u4' ( temp 4-component vector of uint) +0:82 'u4' ( temp 4-component vector of uint) +0:84 iMulExtended ( global void) +0:84 'i4' ( temp 4-component vector of int) +0:84 'i4' ( temp 4-component vector of int) +0:84 'i4' ( temp 4-component vector of int) +0:84 'i4' ( temp 4-component vector of int) +0:86 move second child to first child ( temp int) +0:86 'i1' ( temp int) +0:86 bitfieldExtract ( global int) +0:86 'i1' ( temp int) +0:86 Constant: +0:86 4 (const int) +0:86 Constant: +0:86 5 (const int) +0:88 move second child to first child ( temp 3-component vector of uint) +0:88 'u3' ( temp 3-component vector of uint) +0:88 bitfieldExtract ( global 3-component vector of uint) +0:88 'u3' ( temp 3-component vector of uint) +0:88 Constant: +0:88 4 (const int) +0:88 Constant: +0:88 5 (const int) +0:90 move second child to first child ( temp 3-component vector of int) +0:90 'i3' ( temp 3-component vector of int) +0:90 bitfieldInsert ( global 3-component vector of int) +0:90 'i3' ( temp 3-component vector of int) +0:90 'i3' ( temp 3-component vector of int) +0:90 Constant: +0:90 4 (const int) +0:90 Constant: +0:90 5 (const int) +0:91 move second child to first child ( temp uint) +0:91 'u1' ( temp uint) +0:91 bitfieldInsert ( global uint) +0:91 'u1' ( temp uint) +0:91 'u1' ( temp uint) +0:91 Constant: +0:91 4 (const int) +0:91 Constant: +0:91 5 (const int) +0:93 move second child to first child ( temp 2-component vector of int) +0:93 'i2' ( temp 2-component vector of int) +0:93 bitFieldReverse ( global 2-component vector of int) +0:93 'i2' ( temp 2-component vector of int) +0:94 move second child to first child ( temp 4-component vector of uint) +0:94 'u4' ( temp 4-component vector of uint) +0:94 bitFieldReverse ( global 4-component vector of uint) +0:94 'u4' ( temp 4-component vector of uint) +0:95 move second child to first child ( temp int) +0:95 'i1' ( temp int) +0:95 bitCount ( global int) +0:95 'i1' ( temp int) +0:96 move second child to first child ( temp 3-component vector of int) +0:96 'i3' ( temp 3-component vector of int) +0:96 bitCount ( global 3-component vector of int) +0:96 'u3' ( temp 3-component vector of uint) +0:97 move second child to first child ( temp 2-component vector of int) +0:97 'i2' ( temp 2-component vector of int) +0:97 findLSB ( global 2-component vector of int) +0:97 'i2' ( temp 2-component vector of int) +0:98 move second child to first child ( temp 4-component vector of int) +0:98 'i4' ( temp 4-component vector of int) +0:98 findLSB ( global 4-component vector of int) +0:98 'u4' ( temp 4-component vector of uint) +0:99 move second child to first child ( temp int) +0:99 'i1' ( temp int) +0:99 findMSB ( global int) +0:99 'i1' ( temp int) +0:100 move second child to first child ( temp 2-component vector of int) +0:100 'i2' ( temp 2-component vector of int) +0:100 findMSB ( global 2-component vector of int) +0:100 'u2' ( temp 2-component vector of uint) +0:108 Function Definition: qlod( ( global void) +0:108 Function Parameters: +0:? Sequence +0:115 'lod' ( temp 2-component vector of float) +0:116 'lod' ( temp 2-component vector of float) +0:119 Function Definition: doubles( ( global void) +0:119 Function Parameters: +0:? Sequence +0:131 move second child to first child ( temp double) +0:131 'doublev' ( temp double) +0:131 Constant: +0:131 1.702939 +0:132 move second child to first child ( temp 2-component vector of double) +0:132 'dvec2v' ( temp 2-component vector of double) +0:132 Constant: +0:132 1.643168 +0:132 1.643168 +0:133 move second child to first child ( temp 3-component vector of double) +0:133 'dvec3v' ( temp 3-component vector of double) +0:133 Constant: +0:133 1.414214 +0:133 1.414214 +0:133 1.414214 +0:134 move second child to first child ( temp 4-component vector of double) +0:134 'dvec4v' ( temp 4-component vector of double) +0:134 Constant: +0:134 1.449138 +0:134 1.449138 +0:134 1.449138 +0:134 1.449138 +0:136 add second child into first child ( temp double) +0:136 'doublev' ( temp double) +0:136 inverse sqrt ( global double) +0:136 'doublev' ( temp double) +0:137 add second child into first child ( temp 2-component vector of double) +0:137 'dvec2v' ( temp 2-component vector of double) +0:137 inverse sqrt ( global 2-component vector of double) +0:137 'dvec2v' ( temp 2-component vector of double) +0:138 add second child into first child ( temp 3-component vector of double) +0:138 'dvec3v' ( temp 3-component vector of double) +0:138 inverse sqrt ( global 3-component vector of double) +0:138 'dvec3v' ( temp 3-component vector of double) +0:139 add second child into first child ( temp 4-component vector of double) +0:139 'dvec4v' ( temp 4-component vector of double) +0:139 inverse sqrt ( global 4-component vector of double) +0:139 'dvec4v' ( temp 4-component vector of double) +0:141 add second child into first child ( temp double) +0:141 'doublev' ( temp double) +0:141 Absolute value ( global double) +0:141 'doublev' ( temp double) +0:142 add second child into first child ( temp 2-component vector of double) +0:142 'dvec2v' ( temp 2-component vector of double) +0:142 Absolute value ( global 2-component vector of double) +0:142 'dvec2v' ( temp 2-component vector of double) +0:143 add second child into first child ( temp 3-component vector of double) +0:143 'dvec3v' ( temp 3-component vector of double) +0:143 Absolute value ( global 3-component vector of double) +0:143 'dvec3v' ( temp 3-component vector of double) +0:144 add second child into first child ( temp 4-component vector of double) +0:144 'dvec4v' ( temp 4-component vector of double) +0:144 Absolute value ( global 4-component vector of double) +0:144 'dvec4v' ( temp 4-component vector of double) +0:146 add second child into first child ( temp double) +0:146 'doublev' ( temp double) +0:146 Sign ( global double) +0:146 'doublev' ( temp double) +0:147 add second child into first child ( temp 2-component vector of double) +0:147 'dvec2v' ( temp 2-component vector of double) +0:147 Sign ( global 2-component vector of double) +0:147 'dvec2v' ( temp 2-component vector of double) +0:148 add second child into first child ( temp 3-component vector of double) +0:148 'dvec3v' ( temp 3-component vector of double) +0:148 Sign ( global 3-component vector of double) +0:148 'dvec3v' ( temp 3-component vector of double) +0:149 add second child into first child ( temp 4-component vector of double) +0:149 'dvec4v' ( temp 4-component vector of double) +0:149 Sign ( global 4-component vector of double) +0:149 'dvec4v' ( temp 4-component vector of double) +0:151 add second child into first child ( temp double) +0:151 'doublev' ( temp double) +0:151 Floor ( global double) +0:151 'doublev' ( temp double) +0:152 add second child into first child ( temp 2-component vector of double) +0:152 'dvec2v' ( temp 2-component vector of double) +0:152 Floor ( global 2-component vector of double) +0:152 'dvec2v' ( temp 2-component vector of double) +0:153 add second child into first child ( temp 3-component vector of double) +0:153 'dvec3v' ( temp 3-component vector of double) +0:153 Floor ( global 3-component vector of double) +0:153 'dvec3v' ( temp 3-component vector of double) +0:154 add second child into first child ( temp 4-component vector of double) +0:154 'dvec4v' ( temp 4-component vector of double) +0:154 Floor ( global 4-component vector of double) +0:154 'dvec4v' ( temp 4-component vector of double) +0:156 add second child into first child ( temp double) +0:156 'doublev' ( temp double) +0:156 trunc ( global double) +0:156 'doublev' ( temp double) +0:157 add second child into first child ( temp 2-component vector of double) +0:157 'dvec2v' ( temp 2-component vector of double) +0:157 trunc ( global 2-component vector of double) +0:157 'dvec2v' ( temp 2-component vector of double) +0:158 add second child into first child ( temp 3-component vector of double) +0:158 'dvec3v' ( temp 3-component vector of double) +0:158 trunc ( global 3-component vector of double) +0:158 'dvec3v' ( temp 3-component vector of double) +0:159 add second child into first child ( temp 4-component vector of double) +0:159 'dvec4v' ( temp 4-component vector of double) +0:159 trunc ( global 4-component vector of double) +0:159 'dvec4v' ( temp 4-component vector of double) +0:161 add second child into first child ( temp double) +0:161 'doublev' ( temp double) +0:161 round ( global double) +0:161 'doublev' ( temp double) +0:162 add second child into first child ( temp 2-component vector of double) +0:162 'dvec2v' ( temp 2-component vector of double) +0:162 round ( global 2-component vector of double) +0:162 'dvec2v' ( temp 2-component vector of double) +0:163 add second child into first child ( temp 3-component vector of double) +0:163 'dvec3v' ( temp 3-component vector of double) +0:163 round ( global 3-component vector of double) +0:163 'dvec3v' ( temp 3-component vector of double) +0:164 add second child into first child ( temp 4-component vector of double) +0:164 'dvec4v' ( temp 4-component vector of double) +0:164 round ( global 4-component vector of double) +0:164 'dvec4v' ( temp 4-component vector of double) +0:166 add second child into first child ( temp double) +0:166 'doublev' ( temp double) +0:166 roundEven ( global double) +0:166 'doublev' ( temp double) +0:167 add second child into first child ( temp 2-component vector of double) +0:167 'dvec2v' ( temp 2-component vector of double) +0:167 roundEven ( global 2-component vector of double) +0:167 'dvec2v' ( temp 2-component vector of double) +0:168 add second child into first child ( temp 3-component vector of double) +0:168 'dvec3v' ( temp 3-component vector of double) +0:168 roundEven ( global 3-component vector of double) +0:168 'dvec3v' ( temp 3-component vector of double) +0:169 add second child into first child ( temp 4-component vector of double) +0:169 'dvec4v' ( temp 4-component vector of double) +0:169 roundEven ( global 4-component vector of double) +0:169 'dvec4v' ( temp 4-component vector of double) +0:171 add second child into first child ( temp double) +0:171 'doublev' ( temp double) +0:171 Ceiling ( global double) +0:171 'doublev' ( temp double) +0:172 add second child into first child ( temp 2-component vector of double) +0:172 'dvec2v' ( temp 2-component vector of double) +0:172 Ceiling ( global 2-component vector of double) +0:172 'dvec2v' ( temp 2-component vector of double) +0:173 add second child into first child ( temp 3-component vector of double) +0:173 'dvec3v' ( temp 3-component vector of double) +0:173 Ceiling ( global 3-component vector of double) +0:173 'dvec3v' ( temp 3-component vector of double) +0:174 add second child into first child ( temp 4-component vector of double) +0:174 'dvec4v' ( temp 4-component vector of double) +0:174 Ceiling ( global 4-component vector of double) +0:174 'dvec4v' ( temp 4-component vector of double) +0:176 add second child into first child ( temp double) +0:176 'doublev' ( temp double) +0:176 Fraction ( global double) +0:176 'doublev' ( temp double) +0:177 add second child into first child ( temp 2-component vector of double) +0:177 'dvec2v' ( temp 2-component vector of double) +0:177 Fraction ( global 2-component vector of double) +0:177 'dvec2v' ( temp 2-component vector of double) +0:178 add second child into first child ( temp 3-component vector of double) +0:178 'dvec3v' ( temp 3-component vector of double) +0:178 Fraction ( global 3-component vector of double) +0:178 'dvec3v' ( temp 3-component vector of double) +0:179 add second child into first child ( temp 4-component vector of double) +0:179 'dvec4v' ( temp 4-component vector of double) +0:179 Fraction ( global 4-component vector of double) +0:179 'dvec4v' ( temp 4-component vector of double) +0:181 add second child into first child ( temp double) +0:181 'doublev' ( temp double) +0:181 mod ( global double) +0:181 'doublev' ( temp double) +0:181 'doublev' ( temp double) +0:182 add second child into first child ( temp 2-component vector of double) +0:182 'dvec2v' ( temp 2-component vector of double) +0:182 mod ( global 2-component vector of double) +0:182 'dvec2v' ( temp 2-component vector of double) +0:182 'doublev' ( temp double) +0:183 add second child into first child ( temp 3-component vector of double) +0:183 'dvec3v' ( temp 3-component vector of double) +0:183 mod ( global 3-component vector of double) +0:183 'dvec3v' ( temp 3-component vector of double) +0:183 'doublev' ( temp double) +0:184 add second child into first child ( temp 4-component vector of double) +0:184 'dvec4v' ( temp 4-component vector of double) +0:184 mod ( global 4-component vector of double) +0:184 'dvec4v' ( temp 4-component vector of double) +0:184 'doublev' ( temp double) +0:185 add second child into first child ( temp 2-component vector of double) +0:185 'dvec2v' ( temp 2-component vector of double) +0:185 mod ( global 2-component vector of double) +0:185 'dvec2v' ( temp 2-component vector of double) +0:185 'dvec2v' ( temp 2-component vector of double) +0:186 add second child into first child ( temp 3-component vector of double) +0:186 'dvec3v' ( temp 3-component vector of double) +0:186 mod ( global 3-component vector of double) +0:186 'dvec3v' ( temp 3-component vector of double) +0:186 'dvec3v' ( temp 3-component vector of double) +0:187 add second child into first child ( temp 4-component vector of double) +0:187 'dvec4v' ( temp 4-component vector of double) +0:187 mod ( global 4-component vector of double) +0:187 'dvec4v' ( temp 4-component vector of double) +0:187 'dvec4v' ( temp 4-component vector of double) +0:189 add second child into first child ( temp double) +0:189 'doublev' ( temp double) +0:189 modf ( global double) +0:189 'doublev' ( temp double) +0:189 'doublev' ( temp double) +0:190 add second child into first child ( temp 2-component vector of double) +0:190 'dvec2v' ( temp 2-component vector of double) +0:190 modf ( global 2-component vector of double) +0:190 'dvec2v' ( temp 2-component vector of double) +0:190 'dvec2v' ( temp 2-component vector of double) +0:191 add second child into first child ( temp 3-component vector of double) +0:191 'dvec3v' ( temp 3-component vector of double) +0:191 modf ( global 3-component vector of double) +0:191 'dvec3v' ( temp 3-component vector of double) +0:191 'dvec3v' ( temp 3-component vector of double) +0:192 add second child into first child ( temp 4-component vector of double) +0:192 'dvec4v' ( temp 4-component vector of double) +0:192 modf ( global 4-component vector of double) +0:192 'dvec4v' ( temp 4-component vector of double) +0:192 'dvec4v' ( temp 4-component vector of double) +0:194 add second child into first child ( temp double) +0:194 'doublev' ( temp double) +0:194 min ( global double) +0:194 'doublev' ( temp double) +0:194 'doublev' ( temp double) +0:195 add second child into first child ( temp 2-component vector of double) +0:195 'dvec2v' ( temp 2-component vector of double) +0:195 min ( global 2-component vector of double) +0:195 'dvec2v' ( temp 2-component vector of double) +0:195 'doublev' ( temp double) +0:196 add second child into first child ( temp 3-component vector of double) +0:196 'dvec3v' ( temp 3-component vector of double) +0:196 min ( global 3-component vector of double) +0:196 'dvec3v' ( temp 3-component vector of double) +0:196 'doublev' ( temp double) +0:197 add second child into first child ( temp 4-component vector of double) +0:197 'dvec4v' ( temp 4-component vector of double) +0:197 min ( global 4-component vector of double) +0:197 'dvec4v' ( temp 4-component vector of double) +0:197 'doublev' ( temp double) +0:198 add second child into first child ( temp 2-component vector of double) +0:198 'dvec2v' ( temp 2-component vector of double) +0:198 min ( global 2-component vector of double) +0:198 'dvec2v' ( temp 2-component vector of double) +0:198 'dvec2v' ( temp 2-component vector of double) +0:199 add second child into first child ( temp 3-component vector of double) +0:199 'dvec3v' ( temp 3-component vector of double) +0:199 min ( global 3-component vector of double) +0:199 'dvec3v' ( temp 3-component vector of double) +0:199 'dvec3v' ( temp 3-component vector of double) +0:200 add second child into first child ( temp 4-component vector of double) +0:200 'dvec4v' ( temp 4-component vector of double) +0:200 min ( global 4-component vector of double) +0:200 'dvec4v' ( temp 4-component vector of double) +0:200 'dvec4v' ( temp 4-component vector of double) +0:202 add second child into first child ( temp double) +0:202 'doublev' ( temp double) +0:202 max ( global double) +0:202 'doublev' ( temp double) +0:202 'doublev' ( temp double) +0:203 add second child into first child ( temp 2-component vector of double) +0:203 'dvec2v' ( temp 2-component vector of double) +0:203 max ( global 2-component vector of double) +0:203 'dvec2v' ( temp 2-component vector of double) +0:203 'doublev' ( temp double) +0:204 add second child into first child ( temp 3-component vector of double) +0:204 'dvec3v' ( temp 3-component vector of double) +0:204 max ( global 3-component vector of double) +0:204 'dvec3v' ( temp 3-component vector of double) +0:204 'doublev' ( temp double) +0:205 add second child into first child ( temp 4-component vector of double) +0:205 'dvec4v' ( temp 4-component vector of double) +0:205 max ( global 4-component vector of double) +0:205 'dvec4v' ( temp 4-component vector of double) +0:205 'doublev' ( temp double) +0:206 add second child into first child ( temp 2-component vector of double) +0:206 'dvec2v' ( temp 2-component vector of double) +0:206 max ( global 2-component vector of double) +0:206 'dvec2v' ( temp 2-component vector of double) +0:206 'dvec2v' ( temp 2-component vector of double) +0:207 add second child into first child ( temp 3-component vector of double) +0:207 'dvec3v' ( temp 3-component vector of double) +0:207 max ( global 3-component vector of double) +0:207 'dvec3v' ( temp 3-component vector of double) +0:207 'dvec3v' ( temp 3-component vector of double) +0:208 add second child into first child ( temp 4-component vector of double) +0:208 'dvec4v' ( temp 4-component vector of double) +0:208 max ( global 4-component vector of double) +0:208 'dvec4v' ( temp 4-component vector of double) +0:208 'dvec4v' ( temp 4-component vector of double) +0:210 add second child into first child ( temp double) +0:210 'doublev' ( temp double) +0:210 clamp ( global double) +0:210 'doublev' ( temp double) +0:210 'doublev' ( temp double) +0:210 'doublev' ( temp double) +0:211 add second child into first child ( temp 2-component vector of double) +0:211 'dvec2v' ( temp 2-component vector of double) +0:211 clamp ( global 2-component vector of double) +0:211 'dvec2v' ( temp 2-component vector of double) +0:211 'doublev' ( temp double) +0:211 'doublev' ( temp double) +0:212 add second child into first child ( temp 3-component vector of double) +0:212 'dvec3v' ( temp 3-component vector of double) +0:212 clamp ( global 3-component vector of double) +0:212 'dvec3v' ( temp 3-component vector of double) +0:212 'doublev' ( temp double) +0:212 'doublev' ( temp double) +0:213 add second child into first child ( temp 4-component vector of double) +0:213 'dvec4v' ( temp 4-component vector of double) +0:213 clamp ( global 4-component vector of double) +0:213 'dvec4v' ( temp 4-component vector of double) +0:213 'doublev' ( temp double) +0:213 'doublev' ( temp double) +0:214 add second child into first child ( temp 2-component vector of double) +0:214 'dvec2v' ( temp 2-component vector of double) +0:214 clamp ( global 2-component vector of double) +0:214 'dvec2v' ( temp 2-component vector of double) +0:214 'dvec2v' ( temp 2-component vector of double) +0:214 'dvec2v' ( temp 2-component vector of double) +0:215 add second child into first child ( temp 3-component vector of double) +0:215 'dvec3v' ( temp 3-component vector of double) +0:215 clamp ( global 3-component vector of double) +0:215 'dvec3v' ( temp 3-component vector of double) +0:215 'dvec3v' ( temp 3-component vector of double) +0:215 'dvec3v' ( temp 3-component vector of double) +0:216 add second child into first child ( temp 4-component vector of double) +0:216 'dvec4v' ( temp 4-component vector of double) +0:216 clamp ( global 4-component vector of double) +0:216 'dvec4v' ( temp 4-component vector of double) +0:216 'dvec4v' ( temp 4-component vector of double) +0:216 'dvec4v' ( temp 4-component vector of double) +0:218 add second child into first child ( temp double) +0:218 'doublev' ( temp double) +0:218 mix ( global double) +0:218 'doublev' ( temp double) +0:218 'doublev' ( temp double) +0:218 'doublev' ( temp double) +0:219 add second child into first child ( temp 2-component vector of double) +0:219 'dvec2v' ( temp 2-component vector of double) +0:219 mix ( global 2-component vector of double) +0:219 'dvec2v' ( temp 2-component vector of double) +0:219 'dvec2v' ( temp 2-component vector of double) +0:219 'doublev' ( temp double) +0:220 add second child into first child ( temp 3-component vector of double) +0:220 'dvec3v' ( temp 3-component vector of double) +0:220 mix ( global 3-component vector of double) +0:220 'dvec3v' ( temp 3-component vector of double) +0:220 'dvec3v' ( temp 3-component vector of double) +0:220 'doublev' ( temp double) +0:221 add second child into first child ( temp 4-component vector of double) +0:221 'dvec4v' ( temp 4-component vector of double) +0:221 mix ( global 4-component vector of double) +0:221 'dvec4v' ( temp 4-component vector of double) +0:221 'dvec4v' ( temp 4-component vector of double) +0:221 'doublev' ( temp double) +0:222 add second child into first child ( temp 2-component vector of double) +0:222 'dvec2v' ( temp 2-component vector of double) +0:222 mix ( global 2-component vector of double) +0:222 'dvec2v' ( temp 2-component vector of double) +0:222 'dvec2v' ( temp 2-component vector of double) +0:222 'dvec2v' ( temp 2-component vector of double) +0:223 add second child into first child ( temp 3-component vector of double) +0:223 'dvec3v' ( temp 3-component vector of double) +0:223 mix ( global 3-component vector of double) +0:223 'dvec3v' ( temp 3-component vector of double) +0:223 'dvec3v' ( temp 3-component vector of double) +0:223 'dvec3v' ( temp 3-component vector of double) +0:224 add second child into first child ( temp 4-component vector of double) +0:224 'dvec4v' ( temp 4-component vector of double) +0:224 mix ( global 4-component vector of double) +0:224 'dvec4v' ( temp 4-component vector of double) +0:224 'dvec4v' ( temp 4-component vector of double) +0:224 'dvec4v' ( temp 4-component vector of double) +0:225 add second child into first child ( temp double) +0:225 'doublev' ( temp double) +0:225 mix ( global double) +0:225 'doublev' ( temp double) +0:225 'doublev' ( temp double) +0:225 'boolv' ( temp bool) +0:226 add second child into first child ( temp 2-component vector of double) +0:226 'dvec2v' ( temp 2-component vector of double) +0:226 mix ( global 2-component vector of double) +0:226 'dvec2v' ( temp 2-component vector of double) +0:226 'dvec2v' ( temp 2-component vector of double) +0:226 'bvec2v' ( temp 2-component vector of bool) +0:227 add second child into first child ( temp 3-component vector of double) +0:227 'dvec3v' ( temp 3-component vector of double) +0:227 mix ( global 3-component vector of double) +0:227 'dvec3v' ( temp 3-component vector of double) +0:227 'dvec3v' ( temp 3-component vector of double) +0:227 'bvec3v' ( temp 3-component vector of bool) +0:228 add second child into first child ( temp 4-component vector of double) +0:228 'dvec4v' ( temp 4-component vector of double) +0:228 mix ( global 4-component vector of double) +0:228 'dvec4v' ( temp 4-component vector of double) +0:228 'dvec4v' ( temp 4-component vector of double) +0:228 'bvec4v' ( temp 4-component vector of bool) +0:230 add second child into first child ( temp double) +0:230 'doublev' ( temp double) +0:230 step ( global double) +0:230 'doublev' ( temp double) +0:230 'doublev' ( temp double) +0:231 add second child into first child ( temp 2-component vector of double) +0:231 'dvec2v' ( temp 2-component vector of double) +0:231 step ( global 2-component vector of double) +0:231 'dvec2v' ( temp 2-component vector of double) +0:231 'dvec2v' ( temp 2-component vector of double) +0:232 add second child into first child ( temp 3-component vector of double) +0:232 'dvec3v' ( temp 3-component vector of double) +0:232 step ( global 3-component vector of double) +0:232 'dvec3v' ( temp 3-component vector of double) +0:232 'dvec3v' ( temp 3-component vector of double) +0:233 add second child into first child ( temp 4-component vector of double) +0:233 'dvec4v' ( temp 4-component vector of double) +0:233 step ( global 4-component vector of double) +0:233 'dvec4v' ( temp 4-component vector of double) +0:233 'dvec4v' ( temp 4-component vector of double) +0:234 add second child into first child ( temp 2-component vector of double) +0:234 'dvec2v' ( temp 2-component vector of double) +0:234 step ( global 2-component vector of double) +0:234 'doublev' ( temp double) +0:234 'dvec2v' ( temp 2-component vector of double) +0:235 add second child into first child ( temp 3-component vector of double) +0:235 'dvec3v' ( temp 3-component vector of double) +0:235 step ( global 3-component vector of double) +0:235 'doublev' ( temp double) +0:235 'dvec3v' ( temp 3-component vector of double) +0:236 add second child into first child ( temp 4-component vector of double) +0:236 'dvec4v' ( temp 4-component vector of double) +0:236 step ( global 4-component vector of double) +0:236 'doublev' ( temp double) +0:236 'dvec4v' ( temp 4-component vector of double) +0:238 add second child into first child ( temp double) +0:238 'doublev' ( temp double) +0:238 smoothstep ( global double) +0:238 'doublev' ( temp double) +0:238 'doublev' ( temp double) +0:238 'doublev' ( temp double) +0:239 add second child into first child ( temp 2-component vector of double) +0:239 'dvec2v' ( temp 2-component vector of double) +0:239 smoothstep ( global 2-component vector of double) +0:239 'dvec2v' ( temp 2-component vector of double) +0:239 'dvec2v' ( temp 2-component vector of double) +0:239 'dvec2v' ( temp 2-component vector of double) +0:240 add second child into first child ( temp 3-component vector of double) +0:240 'dvec3v' ( temp 3-component vector of double) +0:240 smoothstep ( global 3-component vector of double) +0:240 'dvec3v' ( temp 3-component vector of double) +0:240 'dvec3v' ( temp 3-component vector of double) +0:240 'dvec3v' ( temp 3-component vector of double) +0:241 add second child into first child ( temp 4-component vector of double) +0:241 'dvec4v' ( temp 4-component vector of double) +0:241 smoothstep ( global 4-component vector of double) +0:241 'dvec4v' ( temp 4-component vector of double) +0:241 'dvec4v' ( temp 4-component vector of double) +0:241 'dvec4v' ( temp 4-component vector of double) +0:242 add second child into first child ( temp 2-component vector of double) +0:242 'dvec2v' ( temp 2-component vector of double) +0:242 smoothstep ( global 2-component vector of double) +0:242 'doublev' ( temp double) +0:242 'doublev' ( temp double) +0:242 'dvec2v' ( temp 2-component vector of double) +0:243 add second child into first child ( temp 3-component vector of double) +0:243 'dvec3v' ( temp 3-component vector of double) +0:243 smoothstep ( global 3-component vector of double) +0:243 'doublev' ( temp double) +0:243 'doublev' ( temp double) +0:243 'dvec3v' ( temp 3-component vector of double) +0:244 add second child into first child ( temp 4-component vector of double) +0:244 'dvec4v' ( temp 4-component vector of double) +0:244 smoothstep ( global 4-component vector of double) +0:244 'doublev' ( temp double) +0:244 'doublev' ( temp double) +0:244 'dvec4v' ( temp 4-component vector of double) +0:246 move second child to first child ( temp bool) +0:246 'boolv' ( temp bool) +0:246 isnan ( global bool) +0:246 'doublev' ( temp double) +0:247 move second child to first child ( temp 2-component vector of bool) +0:247 'bvec2v' ( temp 2-component vector of bool) +0:247 isnan ( global 2-component vector of bool) +0:247 'dvec2v' ( temp 2-component vector of double) +0:248 move second child to first child ( temp 3-component vector of bool) +0:248 'bvec3v' ( temp 3-component vector of bool) +0:248 isnan ( global 3-component vector of bool) +0:248 'dvec3v' ( temp 3-component vector of double) +0:249 move second child to first child ( temp 4-component vector of bool) +0:249 'bvec4v' ( temp 4-component vector of bool) +0:249 isnan ( global 4-component vector of bool) +0:249 'dvec4v' ( temp 4-component vector of double) +0:251 move second child to first child ( temp bool) +0:251 'boolv' ( temp bool) +0:251 Test condition and select ( temp bool) +0:251 Condition +0:251 'boolv' ( temp bool) +0:251 true case +0:251 isinf ( global bool) +0:251 'doublev' ( temp double) +0:251 false case +0:251 Constant: +0:251 false (const bool) +0:252 move second child to first child ( temp 2-component vector of bool) +0:252 'bvec2v' ( temp 2-component vector of bool) +0:252 Test condition and select ( temp 2-component vector of bool) +0:252 Condition +0:252 'boolv' ( temp bool) +0:252 true case +0:252 isinf ( global 2-component vector of bool) +0:252 'dvec2v' ( temp 2-component vector of double) +0:252 false case +0:252 Constant: +0:252 false (const bool) +0:252 false (const bool) +0:253 move second child to first child ( temp 3-component vector of bool) +0:253 'bvec3v' ( temp 3-component vector of bool) +0:253 Test condition and select ( temp 3-component vector of bool) +0:253 Condition +0:253 'boolv' ( temp bool) +0:253 true case +0:253 isinf ( global 3-component vector of bool) +0:253 'dvec3v' ( temp 3-component vector of double) +0:253 false case +0:253 Constant: +0:253 false (const bool) +0:253 false (const bool) +0:253 false (const bool) +0:254 move second child to first child ( temp 4-component vector of bool) +0:254 'bvec4v' ( temp 4-component vector of bool) +0:254 Test condition and select ( temp 4-component vector of bool) +0:254 Condition +0:254 'boolv' ( temp bool) +0:254 true case +0:254 isinf ( global 4-component vector of bool) +0:254 'dvec4v' ( temp 4-component vector of double) +0:254 false case +0:254 Constant: +0:254 false (const bool) +0:254 false (const bool) +0:254 false (const bool) +0:254 false (const bool) +0:256 add second child into first child ( temp double) +0:256 'doublev' ( temp double) +0:256 length ( global double) +0:256 'doublev' ( temp double) +0:257 add second child into first child ( temp double) +0:257 'doublev' ( temp double) +0:257 length ( global double) +0:257 'dvec2v' ( temp 2-component vector of double) +0:258 add second child into first child ( temp double) +0:258 'doublev' ( temp double) +0:258 length ( global double) +0:258 'dvec3v' ( temp 3-component vector of double) +0:259 add second child into first child ( temp double) +0:259 'doublev' ( temp double) +0:259 length ( global double) +0:259 'dvec4v' ( temp 4-component vector of double) +0:261 add second child into first child ( temp double) +0:261 'doublev' ( temp double) +0:261 distance ( global double) +0:261 'doublev' ( temp double) +0:261 'doublev' ( temp double) +0:262 add second child into first child ( temp double) +0:262 'doublev' ( temp double) +0:262 distance ( global double) +0:262 'dvec2v' ( temp 2-component vector of double) +0:262 'dvec2v' ( temp 2-component vector of double) +0:263 add second child into first child ( temp double) +0:263 'doublev' ( temp double) +0:263 distance ( global double) +0:263 'dvec3v' ( temp 3-component vector of double) +0:263 'dvec3v' ( temp 3-component vector of double) +0:264 add second child into first child ( temp double) +0:264 'doublev' ( temp double) +0:264 distance ( global double) +0:264 'dvec4v' ( temp 4-component vector of double) +0:264 'dvec4v' ( temp 4-component vector of double) +0:266 add second child into first child ( temp double) +0:266 'doublev' ( temp double) +0:266 dot-product ( global double) +0:266 'doublev' ( temp double) +0:266 'doublev' ( temp double) +0:267 add second child into first child ( temp double) +0:267 'doublev' ( temp double) +0:267 dot-product ( global double) +0:267 'dvec2v' ( temp 2-component vector of double) +0:267 'dvec2v' ( temp 2-component vector of double) +0:268 add second child into first child ( temp double) +0:268 'doublev' ( temp double) +0:268 dot-product ( global double) +0:268 'dvec3v' ( temp 3-component vector of double) +0:268 'dvec3v' ( temp 3-component vector of double) +0:269 add second child into first child ( temp double) +0:269 'doublev' ( temp double) +0:269 dot-product ( global double) +0:269 'dvec4v' ( temp 4-component vector of double) +0:269 'dvec4v' ( temp 4-component vector of double) +0:271 add second child into first child ( temp 3-component vector of double) +0:271 'dvec3v' ( temp 3-component vector of double) +0:271 cross-product ( global 3-component vector of double) +0:271 'dvec3v' ( temp 3-component vector of double) +0:271 'dvec3v' ( temp 3-component vector of double) +0:273 add second child into first child ( temp double) +0:273 'doublev' ( temp double) +0:273 normalize ( global double) +0:273 'doublev' ( temp double) +0:274 add second child into first child ( temp 2-component vector of double) +0:274 'dvec2v' ( temp 2-component vector of double) +0:274 normalize ( global 2-component vector of double) +0:274 'dvec2v' ( temp 2-component vector of double) +0:275 add second child into first child ( temp 3-component vector of double) +0:275 'dvec3v' ( temp 3-component vector of double) +0:275 normalize ( global 3-component vector of double) +0:275 'dvec3v' ( temp 3-component vector of double) +0:276 add second child into first child ( temp 4-component vector of double) +0:276 'dvec4v' ( temp 4-component vector of double) +0:276 normalize ( global 4-component vector of double) +0:276 'dvec4v' ( temp 4-component vector of double) +0:278 add second child into first child ( temp double) +0:278 'doublev' ( temp double) +0:278 face-forward ( global double) +0:278 'doublev' ( temp double) +0:278 'doublev' ( temp double) +0:278 'doublev' ( temp double) +0:279 add second child into first child ( temp 2-component vector of double) +0:279 'dvec2v' ( temp 2-component vector of double) +0:279 face-forward ( global 2-component vector of double) +0:279 'dvec2v' ( temp 2-component vector of double) +0:279 'dvec2v' ( temp 2-component vector of double) +0:279 'dvec2v' ( temp 2-component vector of double) +0:280 add second child into first child ( temp 3-component vector of double) +0:280 'dvec3v' ( temp 3-component vector of double) +0:280 face-forward ( global 3-component vector of double) +0:280 'dvec3v' ( temp 3-component vector of double) +0:280 'dvec3v' ( temp 3-component vector of double) +0:280 'dvec3v' ( temp 3-component vector of double) +0:281 add second child into first child ( temp 4-component vector of double) +0:281 'dvec4v' ( temp 4-component vector of double) +0:281 face-forward ( global 4-component vector of double) +0:281 'dvec4v' ( temp 4-component vector of double) +0:281 'dvec4v' ( temp 4-component vector of double) +0:281 'dvec4v' ( temp 4-component vector of double) +0:283 add second child into first child ( temp double) +0:283 'doublev' ( temp double) +0:283 reflect ( global double) +0:283 'doublev' ( temp double) +0:283 'doublev' ( temp double) +0:284 add second child into first child ( temp 2-component vector of double) +0:284 'dvec2v' ( temp 2-component vector of double) +0:284 reflect ( global 2-component vector of double) +0:284 'dvec2v' ( temp 2-component vector of double) +0:284 'dvec2v' ( temp 2-component vector of double) +0:285 add second child into first child ( temp 3-component vector of double) +0:285 'dvec3v' ( temp 3-component vector of double) +0:285 reflect ( global 3-component vector of double) +0:285 'dvec3v' ( temp 3-component vector of double) +0:285 'dvec3v' ( temp 3-component vector of double) +0:286 add second child into first child ( temp 4-component vector of double) +0:286 'dvec4v' ( temp 4-component vector of double) +0:286 reflect ( global 4-component vector of double) +0:286 'dvec4v' ( temp 4-component vector of double) +0:286 'dvec4v' ( temp 4-component vector of double) +0:288 add second child into first child ( temp double) +0:288 'doublev' ( temp double) +0:288 refract ( global double) +0:288 'doublev' ( temp double) +0:288 'doublev' ( temp double) +0:288 'doublev' ( temp double) +0:289 add second child into first child ( temp 2-component vector of double) +0:289 'dvec2v' ( temp 2-component vector of double) +0:289 refract ( global 2-component vector of double) +0:289 'dvec2v' ( temp 2-component vector of double) +0:289 'dvec2v' ( temp 2-component vector of double) +0:289 'doublev' ( temp double) +0:290 add second child into first child ( temp 3-component vector of double) +0:290 'dvec3v' ( temp 3-component vector of double) +0:290 refract ( global 3-component vector of double) +0:290 'dvec3v' ( temp 3-component vector of double) +0:290 'dvec3v' ( temp 3-component vector of double) +0:290 'doublev' ( temp double) +0:291 add second child into first child ( temp 4-component vector of double) +0:291 'dvec4v' ( temp 4-component vector of double) +0:291 refract ( global 4-component vector of double) +0:291 'dvec4v' ( temp 4-component vector of double) +0:291 'dvec4v' ( temp 4-component vector of double) +0:291 'doublev' ( temp double) +0:293 Sequence +0:293 move second child to first child ( temp 2X2 matrix of double) +0:293 'dmat2v' ( temp 2X2 matrix of double) +0:293 outer product ( global 2X2 matrix of double) +0:293 'dvec2v' ( temp 2-component vector of double) +0:293 'dvec2v' ( temp 2-component vector of double) +0:294 Sequence +0:294 move second child to first child ( temp 3X3 matrix of double) +0:294 'dmat3v' ( temp 3X3 matrix of double) +0:294 outer product ( global 3X3 matrix of double) +0:294 'dvec3v' ( temp 3-component vector of double) +0:294 'dvec3v' ( temp 3-component vector of double) +0:295 Sequence +0:295 move second child to first child ( temp 4X4 matrix of double) +0:295 'dmat4v' ( temp 4X4 matrix of double) +0:295 outer product ( global 4X4 matrix of double) +0:295 'dvec4v' ( temp 4-component vector of double) +0:295 'dvec4v' ( temp 4-component vector of double) +0:296 Sequence +0:296 move second child to first child ( temp 2X3 matrix of double) +0:296 'dmat2x3v' ( temp 2X3 matrix of double) +0:296 outer product ( global 2X3 matrix of double) +0:296 'dvec3v' ( temp 3-component vector of double) +0:296 'dvec2v' ( temp 2-component vector of double) +0:297 Sequence +0:297 move second child to first child ( temp 3X2 matrix of double) +0:297 'dmat3x2v' ( temp 3X2 matrix of double) +0:297 outer product ( global 3X2 matrix of double) +0:297 'dvec2v' ( temp 2-component vector of double) +0:297 'dvec3v' ( temp 3-component vector of double) +0:298 Sequence +0:298 move second child to first child ( temp 2X4 matrix of double) +0:298 'dmat2x4v' ( temp 2X4 matrix of double) +0:298 outer product ( global 2X4 matrix of double) +0:298 'dvec4v' ( temp 4-component vector of double) +0:298 'dvec2v' ( temp 2-component vector of double) +0:299 Sequence +0:299 move second child to first child ( temp 4X2 matrix of double) +0:299 'dmat4x2v' ( temp 4X2 matrix of double) +0:299 outer product ( global 4X2 matrix of double) +0:299 'dvec2v' ( temp 2-component vector of double) +0:299 'dvec4v' ( temp 4-component vector of double) +0:300 Sequence +0:300 move second child to first child ( temp 3X4 matrix of double) +0:300 'dmat3x4v' ( temp 3X4 matrix of double) +0:300 outer product ( global 3X4 matrix of double) +0:300 'dvec4v' ( temp 4-component vector of double) +0:300 'dvec3v' ( temp 3-component vector of double) +0:301 Sequence +0:301 move second child to first child ( temp 4X3 matrix of double) +0:301 'dmat4x3v' ( temp 4X3 matrix of double) +0:301 outer product ( global 4X3 matrix of double) +0:301 'dvec3v' ( temp 3-component vector of double) +0:301 'dvec4v' ( temp 4-component vector of double) +0:303 matrix mult second child into first child ( temp 2X2 matrix of double) +0:303 'dmat2v' ( temp 2X2 matrix of double) +0:303 component-wise multiply ( global 2X2 matrix of double) +0:303 'dmat2v' ( temp 2X2 matrix of double) +0:303 'dmat2v' ( temp 2X2 matrix of double) +0:304 matrix mult second child into first child ( temp 3X3 matrix of double) +0:304 'dmat3v' ( temp 3X3 matrix of double) +0:304 component-wise multiply ( global 3X3 matrix of double) +0:304 'dmat3v' ( temp 3X3 matrix of double) +0:304 'dmat3v' ( temp 3X3 matrix of double) +0:305 matrix mult second child into first child ( temp 4X4 matrix of double) +0:305 'dmat4v' ( temp 4X4 matrix of double) +0:305 component-wise multiply ( global 4X4 matrix of double) +0:305 'dmat4v' ( temp 4X4 matrix of double) +0:305 'dmat4v' ( temp 4X4 matrix of double) +0:306 move second child to first child ( temp 2X3 matrix of double) +0:306 'dmat2x3v' ( temp 2X3 matrix of double) +0:306 component-wise multiply ( global 2X3 matrix of double) +0:306 'dmat2x3v' ( temp 2X3 matrix of double) +0:306 'dmat2x3v' ( temp 2X3 matrix of double) +0:307 move second child to first child ( temp 2X4 matrix of double) +0:307 'dmat2x4v' ( temp 2X4 matrix of double) +0:307 component-wise multiply ( global 2X4 matrix of double) +0:307 'dmat2x4v' ( temp 2X4 matrix of double) +0:307 'dmat2x4v' ( temp 2X4 matrix of double) +0:308 move second child to first child ( temp 3X2 matrix of double) +0:308 'dmat3x2v' ( temp 3X2 matrix of double) +0:308 component-wise multiply ( global 3X2 matrix of double) +0:308 'dmat3x2v' ( temp 3X2 matrix of double) +0:308 'dmat3x2v' ( temp 3X2 matrix of double) +0:309 move second child to first child ( temp 3X4 matrix of double) +0:309 'dmat3x4v' ( temp 3X4 matrix of double) +0:309 component-wise multiply ( global 3X4 matrix of double) +0:309 'dmat3x4v' ( temp 3X4 matrix of double) +0:309 'dmat3x4v' ( temp 3X4 matrix of double) +0:310 move second child to first child ( temp 4X2 matrix of double) +0:310 'dmat4x2v' ( temp 4X2 matrix of double) +0:310 component-wise multiply ( global 4X2 matrix of double) +0:310 'dmat4x2v' ( temp 4X2 matrix of double) +0:310 'dmat4x2v' ( temp 4X2 matrix of double) +0:311 move second child to first child ( temp 4X3 matrix of double) +0:311 'dmat4x3v' ( temp 4X3 matrix of double) +0:311 component-wise multiply ( global 4X3 matrix of double) +0:311 'dmat4x3v' ( temp 4X3 matrix of double) +0:311 'dmat4x3v' ( temp 4X3 matrix of double) +0:313 matrix mult second child into first child ( temp 2X2 matrix of double) +0:313 'dmat2v' ( temp 2X2 matrix of double) +0:313 transpose ( global 2X2 matrix of double) +0:313 'dmat2v' ( temp 2X2 matrix of double) +0:314 matrix mult second child into first child ( temp 3X3 matrix of double) +0:314 'dmat3v' ( temp 3X3 matrix of double) +0:314 transpose ( global 3X3 matrix of double) +0:314 'dmat3v' ( temp 3X3 matrix of double) +0:315 matrix mult second child into first child ( temp 4X4 matrix of double) +0:315 'dmat4v' ( temp 4X4 matrix of double) +0:315 transpose ( global 4X4 matrix of double) +0:315 'dmat4v' ( temp 4X4 matrix of double) +0:316 move second child to first child ( temp 2X3 matrix of double) +0:316 'dmat2x3v' ( temp 2X3 matrix of double) +0:316 transpose ( global 2X3 matrix of double) +0:316 'dmat3x2v' ( temp 3X2 matrix of double) +0:317 move second child to first child ( temp 3X2 matrix of double) +0:317 'dmat3x2v' ( temp 3X2 matrix of double) +0:317 transpose ( global 3X2 matrix of double) +0:317 'dmat2x3v' ( temp 2X3 matrix of double) +0:318 move second child to first child ( temp 2X4 matrix of double) +0:318 'dmat2x4v' ( temp 2X4 matrix of double) +0:318 transpose ( global 2X4 matrix of double) +0:318 'dmat4x2v' ( temp 4X2 matrix of double) +0:319 move second child to first child ( temp 4X2 matrix of double) +0:319 'dmat4x2v' ( temp 4X2 matrix of double) +0:319 transpose ( global 4X2 matrix of double) +0:319 'dmat2x4v' ( temp 2X4 matrix of double) +0:320 move second child to first child ( temp 3X4 matrix of double) +0:320 'dmat3x4v' ( temp 3X4 matrix of double) +0:320 transpose ( global 3X4 matrix of double) +0:320 'dmat4x3v' ( temp 4X3 matrix of double) +0:321 move second child to first child ( temp 4X3 matrix of double) +0:321 'dmat4x3v' ( temp 4X3 matrix of double) +0:321 transpose ( global 4X3 matrix of double) +0:321 'dmat3x4v' ( temp 3X4 matrix of double) +0:323 add second child into first child ( temp double) +0:323 'doublev' ( temp double) +0:323 determinant ( global double) +0:323 'dmat2v' ( temp 2X2 matrix of double) +0:324 add second child into first child ( temp double) +0:324 'doublev' ( temp double) +0:324 determinant ( global double) +0:324 'dmat3v' ( temp 3X3 matrix of double) +0:325 add second child into first child ( temp double) +0:325 'doublev' ( temp double) +0:325 determinant ( global double) +0:325 'dmat4v' ( temp 4X4 matrix of double) +0:327 matrix mult second child into first child ( temp 2X2 matrix of double) +0:327 'dmat2v' ( temp 2X2 matrix of double) +0:327 inverse ( global 2X2 matrix of double) +0:327 'dmat2v' ( temp 2X2 matrix of double) +0:328 matrix mult second child into first child ( temp 3X3 matrix of double) +0:328 'dmat3v' ( temp 3X3 matrix of double) +0:328 inverse ( global 3X3 matrix of double) +0:328 'dmat3v' ( temp 3X3 matrix of double) +0:329 matrix mult second child into first child ( temp 4X4 matrix of double) +0:329 'dmat4v' ( temp 4X4 matrix of double) +0:329 inverse ( global 4X4 matrix of double) +0:329 'dmat4v' ( temp 4X4 matrix of double) +0:? Linker Objects +0:? 'bn' ( in 3-element array of block{ in int a}) +0:? 'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize}) +0:? 'color' ( in 3-element array of 4-component vector of float) +0:? 'color2' ( in 3-element array of 4-component vector of float) +0:? 'colorS' ( in 3-element array of 4-component vector of float) +0:? 'colorBad' ( in 4-element array of 4-component vector of float) +0:? 'colorbad2' ( in 2-element array of 4-component vector of float) +0:? 'cva' (layout( location=4) in 3-element array of 4-component vector of float) +0:? 'cvb' (layout( location=5) in 3-element array of 4-component vector of float) +0:? 'cmc' (layout( location=2) in 3-element array of 3X3 matrix of float) +0:? 'patchIn' ( patch in 3-element array of 4-component vector of float) +0:? 'patchOut' (layout( stream=0) patch out 4-component vector of float) +0:? 'scalar' ( in float) +0:? 'inbls' ( in block{ in int a}) +0:? 'inbla' ( in 17-element array of block{ in int a}) +0:? 'indexedOut' (layout( location=7 stream=0) out 4-component vector of float) +0:? 'samp1D' ( uniform sampler1D) +0:? 'samp2Ds' ( uniform sampler2DShadow) + + +Linked geometry stage: + +ERROR: Linking geometry stage: At least one shader must specify an output layout primitive + +Shader version: 400 +Requested GL_ARB_separate_shader_objects +invocations = 4 +max_vertices = 127 +input primitive = triangles +output primitive = none +ERROR: node is still EOpNull! +0:3 Function Definition: main( ( global void) +0:3 Function Parameters: +0:5 Sequence +0:5 EmitStreamVertex ( global void) +0:5 Constant: +0:5 1 (const int) +0:6 EndStreamPrimitive ( global void) +0:6 Constant: +0:6 0 (const int) +0:7 EmitVertex ( global void) +0:8 EndPrimitive ( global void) +0:9 Sequence +0:9 move second child to first child ( temp int) +0:9 'id' ( temp int) +0:9 'gl_InvocationID' ( in int InvocationID) +0:? Linker Objects +0:? 'bn' ( in 3-element array of block{ in int a}) +0:? 'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize}) +0:? 'color' ( in 3-element array of 4-component vector of float) +0:? 'color2' ( in 3-element array of 4-component vector of float) +0:? 'colorS' ( in 3-element array of 4-component vector of float) +0:? 'colorBad' ( in 4-element array of 4-component vector of float) +0:? 'colorbad2' ( in 2-element array of 4-component vector of float) +0:? 'cva' (layout( location=4) in 3-element array of 4-component vector of float) +0:? 'cvb' (layout( location=5) in 3-element array of 4-component vector of float) +0:? 'cmc' (layout( location=2) in 3-element array of 3X3 matrix of float) +0:? 'patchIn' ( patch in 3-element array of 4-component vector of float) +0:? 'patchOut' (layout( stream=0) patch out 4-component vector of float) +0:? 'scalar' ( in float) +0:? 'inbls' ( in block{ in int a}) +0:? 'inbla' ( in 17-element array of block{ in int a}) +0:? 'indexedOut' (layout( location=7 stream=0) out 4-component vector of float) +0:? 'samp1D' ( uniform sampler1D) +0:? 'samp2Ds' ( uniform sampler2DShadow) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/400.tesc.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/400.tesc.out new file mode 100644 index 0000000..434079e --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/400.tesc.out @@ -0,0 +1,401 @@ +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) +ERROR: 0:10: 'patch' : can only use on output in tessellation-control shader +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:83: 'location' : overlapping use of location 4 +ERROR: 0:87: 'location' : overlapping use of location 4 +ERROR: 0:104: '' : precise qualifier must appear first +ERROR: 0:105: '' : precise qualifier must appear first +ERROR: 0:105: '' : precise qualifier must appear first +ERROR: 0:109: 'gl_DeviceIndex' : required extension not requested: GL_EXT_device_group +ERROR: 0:110: 'gl_ViewIndex' : required extension not requested: GL_EXT_multiview +ERROR: 23 compilation errors. No code generated. + + +Shader version: 400 +Requested GL_ARB_separate_shader_objects +Requested GL_EXT_device_group +Requested GL_EXT_multiview +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 int) +0:17 'a' ( temp int) +0:17 Constant: +0:17 5392 (const int) +0:23 Sequence +0:23 move second child to first child ( temp 4-component vector of float) +0:23 'p' ( temp 4-component vector of float) +0:23 gl_Position: direct index for structure ( in 4-component vector of float Position) +0:23 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:23 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +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 float) +0:24 'ps' ( temp float) +0:24 gl_PointSize: direct index for structure ( in float PointSize) +0:24 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:24 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +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 float) +0:25 'cd' ( temp float) +0:25 direct index ( temp float ClipDistance) +0:25 gl_ClipDistance: direct index for structure ( in implicitly-sized array of float ClipDistance) +0:25 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:25 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:25 Constant: +0:25 1 (const int) +0:25 Constant: +0:25 2 (const int) +0:25 Constant: +0:25 2 (const int) +0:27 Sequence +0:27 move second child to first child ( temp int) +0:27 'pvi' ( temp int) +0:27 'gl_PatchVerticesIn' ( in int PatchVertices) +0:28 Sequence +0:28 move second child to first child ( temp int) +0:28 'pid' ( temp int) +0:28 'gl_PrimitiveID' ( in int PrimitiveID) +0:29 Sequence +0:29 move second child to first child ( temp int) +0:29 'iid' ( temp int) +0:29 'gl_InvocationID' ( in int InvocationID) +0:31 move second child to first child ( temp 4-component vector of float) +0:31 gl_Position: direct index for structure ( out 4-component vector of float Position) +0:31 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:31 'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:31 'gl_InvocationID' ( in int InvocationID) +0:31 Constant: +0:31 0 (const int) +0:31 'p' ( temp 4-component vector of float) +0:32 move second child to first child ( temp float) +0:32 gl_PointSize: direct index for structure ( out float PointSize) +0:32 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:32 'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:32 'gl_InvocationID' ( in int InvocationID) +0:32 Constant: +0:32 1 (const int) +0:32 'ps' ( temp float) +0:33 move second child to first child ( temp float) +0:33 direct index ( temp float ClipDistance) +0:33 gl_ClipDistance: direct index for structure ( out implicitly-sized array of float ClipDistance) +0:33 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:33 'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:33 'gl_InvocationID' ( in int InvocationID) +0:33 Constant: +0:33 2 (const int) +0:33 Constant: +0:33 1 (const int) +0:33 'cd' ( temp float) +0:35 move second child to first child ( temp float) +0:35 direct index ( patch temp float TessLevelOuter) +0:35 'gl_TessLevelOuter' ( patch out 4-element array of 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 float) +0:36 direct index ( patch temp float TessLevelInner) +0:36 'gl_TessLevelInner' ( patch out 2-element array of 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 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 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 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 int) +0:54 Condition +0:54 Compare Less Than ( temp bool) +0:54 'a' ( temp int) +0:54 Constant: +0:54 12 (const int) +0:54 true case +0:54 'a' ( temp int) +0:54 false case +0:54 Comma ( temp int) +0:54 Barrier ( global void) +0:54 'a' ( temp 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_PointSize: direct index for structure ( out float PointSize) +0:69 direct index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:69 'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:69 Constant: +0:69 4 (const int) +0:69 Constant: +0:69 1 (const int) +0:71 Barrier ( global void) +0:91 Function Definition: foop( ( global void) +0:91 Function Parameters: +0:? Sequence +0:95 multiply second child into first child ( temp 3-component vector of float) +0:95 'pv3' ( noContraction temp 3-component vector of float) +0:95 'pv3' ( noContraction temp 3-component vector of float) +0:96 move second child to first child ( temp 3-component vector of float) +0:96 'pv3' ( noContraction temp 3-component vector of float) +0:96 fma ( global 3-component vector of float) +0:96 'pv3' ( noContraction temp 3-component vector of float) +0:96 'pv3' ( noContraction temp 3-component vector of float) +0:96 'pv3' ( noContraction temp 3-component vector of float) +0:97 move second child to first child ( temp double) +0:97 'd' ( noContraction temp double) +0:97 fma ( global double) +0:97 'd' ( noContraction temp double) +0:97 'd' ( noContraction temp double) +0:97 'd' ( noContraction temp double) +0:107 Function Definition: devi( ( global void) +0:107 Function Parameters: +0:109 Sequence +0:109 'gl_DeviceIndex' ( in int DeviceIndex) +0:110 'gl_ViewIndex' ( in int ViewIndex) +0:121 Function Definition: devie( ( global void) +0:121 Function Parameters: +0:123 Sequence +0:123 'gl_DeviceIndex' ( in int DeviceIndex) +0:124 'gl_ViewIndex' ( in int ViewIndex) +0:? Linker Objects +0:? 'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:? 'outa' ( global 4-element array of int) +0:? 'patchIn' ( patch in 4-component vector of float) +0:? 'patchOut' ( patch out 4-component vector of float) +0:? 'ina' ( in 2-component vector of float) +0:? 'inb' ( in 32-element array of 2-component vector of float) +0:? 'inc' ( in 32-element array of 2-component vector of float) +0:? 'ind' ( in 32-element array of 2-component vector of float) +0:? 'ivla' (layout( location=3) in 32-element array of 4-component vector of float) +0:? 'ivlb' (layout( location=4) in 32-element array of 4-component vector of float) +0:? 'ivlc' (layout( location=4) in 32-element array of 4-component vector of float) +0:? 'ovla' (layout( location=3) out 4-element array of 4-component vector of float) +0:? 'ovlb' (layout( location=4) out 4-element array of 4-component vector of float) +0:? 'ovlc' (layout( location=4) out 4-element array of 4-component vector of float) +0:? 'pv3' ( noContraction temp 3-component vector of float) +0:? 'pinbi' ( patch out block{ out int a}) +0:? 'badOrder' ( invariant noContraction out 4-element array of 4-component vector of float) + + +Linked tessellation control stage: + + +Shader version: 400 +Requested GL_ARB_separate_shader_objects +Requested GL_EXT_device_group +Requested GL_EXT_multiview +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 int) +0:17 'a' ( temp int) +0:17 Constant: +0:17 5392 (const int) +0:23 Sequence +0:23 move second child to first child ( temp 4-component vector of float) +0:23 'p' ( temp 4-component vector of float) +0:23 gl_Position: direct index for structure ( in 4-component vector of float Position) +0:23 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +0:23 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +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 float) +0:24 'ps' ( temp float) +0:24 gl_PointSize: direct index for structure ( in float PointSize) +0:24 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +0:24 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +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 float) +0:25 'cd' ( temp float) +0:25 direct index ( temp float ClipDistance) +0:25 gl_ClipDistance: direct index for structure ( in 3-element array of float ClipDistance) +0:25 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +0:25 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +0:25 Constant: +0:25 1 (const int) +0:25 Constant: +0:25 2 (const int) +0:25 Constant: +0:25 2 (const int) +0:27 Sequence +0:27 move second child to first child ( temp int) +0:27 'pvi' ( temp int) +0:27 'gl_PatchVerticesIn' ( in int PatchVertices) +0:28 Sequence +0:28 move second child to first child ( temp int) +0:28 'pid' ( temp int) +0:28 'gl_PrimitiveID' ( in int PrimitiveID) +0:29 Sequence +0:29 move second child to first child ( temp int) +0:29 'iid' ( temp int) +0:29 'gl_InvocationID' ( in int InvocationID) +0:31 move second child to first child ( temp 4-component vector of float) +0:31 gl_Position: direct index for structure ( out 4-component vector of float Position) +0:31 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 2-element array of float ClipDistance gl_ClipDistance}) +0:31 'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 2-element array of float ClipDistance gl_ClipDistance}) +0:31 'gl_InvocationID' ( in int InvocationID) +0:31 Constant: +0:31 0 (const int) +0:31 'p' ( temp 4-component vector of float) +0:32 move second child to first child ( temp float) +0:32 gl_PointSize: direct index for structure ( out float PointSize) +0:32 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 2-element array of float ClipDistance gl_ClipDistance}) +0:32 'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 2-element array of float ClipDistance gl_ClipDistance}) +0:32 'gl_InvocationID' ( in int InvocationID) +0:32 Constant: +0:32 1 (const int) +0:32 'ps' ( temp float) +0:33 move second child to first child ( temp float) +0:33 direct index ( temp float ClipDistance) +0:33 gl_ClipDistance: direct index for structure ( out 2-element array of float ClipDistance) +0:33 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 2-element array of float ClipDistance gl_ClipDistance}) +0:33 'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 2-element array of float ClipDistance gl_ClipDistance}) +0:33 'gl_InvocationID' ( in int InvocationID) +0:33 Constant: +0:33 2 (const int) +0:33 Constant: +0:33 1 (const int) +0:33 'cd' ( temp float) +0:35 move second child to first child ( temp float) +0:35 direct index ( patch temp float TessLevelOuter) +0:35 'gl_TessLevelOuter' ( patch out 4-element array of 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 float) +0:36 direct index ( patch temp float TessLevelInner) +0:36 'gl_TessLevelInner' ( patch out 2-element array of 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 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 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 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 int) +0:54 Condition +0:54 Compare Less Than ( temp bool) +0:54 'a' ( temp int) +0:54 Constant: +0:54 12 (const int) +0:54 true case +0:54 'a' ( temp int) +0:54 false case +0:54 Comma ( temp int) +0:54 Barrier ( global void) +0:54 'a' ( temp 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 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 2-element array of float ClipDistance gl_ClipDistance}) +0:? 'outa' ( global 4-element array of int) +0:? 'patchIn' ( patch in 4-component vector of float) +0:? 'patchOut' ( patch out 4-component vector of float) +0:? 'ina' ( in 2-component vector of float) +0:? 'inb' ( in 32-element array of 2-component vector of float) +0:? 'inc' ( in 32-element array of 2-component vector of float) +0:? 'ind' ( in 32-element array of 2-component vector of float) +0:? 'ivla' (layout( location=3) in 32-element array of 4-component vector of float) +0:? 'ivlb' (layout( location=4) in 32-element array of 4-component vector of float) +0:? 'ivlc' (layout( location=4) in 32-element array of 4-component vector of float) +0:? 'ovla' (layout( location=3) out 4-element array of 4-component vector of float) +0:? 'ovlb' (layout( location=4) out 4-element array of 4-component vector of float) +0:? 'ovlc' (layout( location=4) out 4-element array of 4-component vector of float) +0:? 'pv3' ( noContraction temp 3-component vector of float) +0:? 'pinbi' ( patch out block{ out int a}) +0:? 'badOrder' ( invariant noContraction out 4-element array of 4-component vector of float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/400.tese.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/400.tese.out new file mode 100644 index 0000000..2f1c97c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/400.tese.out @@ -0,0 +1,297 @@ +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 +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:47: 'patch' : cannot use interpolation qualifiers with patch +ERROR: 0:48: 'patch' : cannot use interpolation qualifiers with patch +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:109: 'gl_DeviceIndex' : required extension not requested: GL_EXT_device_group +ERROR: 0:110: 'gl_ViewIndex' : required extension not requested: GL_EXT_multiview +ERROR: 32 compilation errors. No code generated. + + +Shader version: 400 +Requested GL_ARB_separate_shader_objects +Requested GL_EXT_device_group +Requested GL_EXT_multiview +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 int) +0:24 'a' ( temp int) +0:24 Constant: +0:24 1512 (const int) +0:32 Sequence +0:32 move second child to first child ( temp 4-component vector of float) +0:32 'p' ( temp 4-component vector of float) +0:32 gl_Position: direct index for structure ( in 4-component vector of float Position) +0:32 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:32 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +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 float) +0:33 'ps' ( temp float) +0:33 gl_PointSize: direct index for structure ( in float PointSize) +0:33 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:33 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +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 float) +0:34 'cd' ( temp float) +0:34 direct index ( temp float ClipDistance) +0:34 gl_ClipDistance: direct index for structure ( in implicitly-sized array of float ClipDistance) +0:34 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:34 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:34 Constant: +0:34 1 (const int) +0:34 Constant: +0:34 2 (const int) +0:34 Constant: +0:34 2 (const int) +0:36 Sequence +0:36 move second child to first child ( temp int) +0:36 'pvi' ( temp int) +0:36 'gl_PatchVerticesIn' ( in int PatchVertices) +0:37 Sequence +0:37 move second child to first child ( temp int) +0:37 'pid' ( temp int) +0:37 'gl_PrimitiveID' ( in int PrimitiveID) +0:38 Sequence +0:38 move second child to first child ( temp 3-component vector of float) +0:38 'tc' ( temp 3-component vector of float) +0:38 'gl_TessCoord' ( in 3-component vector of float TessCoord) +0:39 Sequence +0:39 move second child to first child ( temp float) +0:39 'tlo' ( temp float) +0:39 direct index ( patch temp float TessLevelOuter) +0:39 'gl_TessLevelOuter' ( patch in 4-element array of float TessLevelOuter) +0:39 Constant: +0:39 3 (const int) +0:40 Sequence +0:40 move second child to first child ( temp float) +0:40 'tli' ( temp float) +0:40 direct index ( patch temp float TessLevelInner) +0:40 'gl_TessLevelInner' ( patch in 2-element array of float TessLevelInner) +0:40 Constant: +0:40 1 (const int) +0:42 move second child to first child ( temp 4-component vector of float) +0:42 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) +0:42 '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}) +0:42 Constant: +0:42 0 (const uint) +0:42 'p' ( temp 4-component vector of float) +0:43 move second child to first child ( temp float) +0:43 gl_PointSize: direct index for structure ( gl_PointSize float PointSize) +0:43 '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}) +0:43 Constant: +0:43 1 (const uint) +0:43 'ps' ( temp float) +0:44 move second child to first child ( temp float) +0:44 direct index ( temp float ClipDistance) +0:44 gl_ClipDistance: direct index for structure ( out implicitly-sized array of float ClipDistance) +0:44 '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}) +0:44 Constant: +0:44 2 (const uint) +0:44 Constant: +0:44 2 (const int) +0:44 'cd' ( temp float) +0:107 Function Definition: devi( ( global void) +0:107 Function Parameters: +0:109 Sequence +0:109 'gl_DeviceIndex' ( in int DeviceIndex) +0:110 'gl_ViewIndex' ( in int ViewIndex) +0:121 Function Definition: devie( ( global void) +0:121 Function Parameters: +0:123 Sequence +0:123 'gl_DeviceIndex' ( in int DeviceIndex) +0:124 'gl_ViewIndex' ( in int ViewIndex) +0:? Linker Objects +0:? 'patchIn' ( patch in 4-component vector of float) +0:? 'patchOut' ( patch out 4-component vector of float) +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}) +0:? 'badp1' ( smooth patch in 4-component vector of float) +0:? 'badp2' ( flat patch in 4-component vector of float) +0:? 'badp3' ( noperspective patch in 4-component vector of float) +0:? 'badp4' ( patch sample in 3-component vector of float) +0:? 'gl_in' ( in 32-element array of block{ in 1-element array of float ClipDistance gl_ClipDistance}) +0:? 'ina' ( in 2-component vector of float) +0:? 'inb' ( in 32-element array of 2-component vector of float) +0:? 'inc' ( in 32-element array of 2-component vector of float) +0:? 'ind' ( in 32-element array of 2-component vector of float) +0:? 'bla' ( in block{ in int f}) +0:? 'blb' ( in 32-element array of block{ in int f}) +0:? 'blc' ( in 32-element array of block{ in int f}) +0:? 'bld' ( in 32-element array of block{ in int f}) +0:? 'ivla' (layout( location=23) in 32-element array of 4-component vector of float) +0:? 'ivlb' (layout( location=24) in 32-element array of 4-component vector of float) +0:? 'ivlc' (layout( location=24) in 32-element array of 4-component vector of float) +0:? 'ovla' (layout( location=23) out 2-element array of 4-component vector of float) +0:? 'ovlb' (layout( location=24) out 2-element array of 4-component vector of float) +0:? 'pinbi' ( patch in block{ in int a}) + + +Linked tessellation evaluation stage: + + +Shader version: 400 +Requested GL_ARB_separate_shader_objects +Requested GL_EXT_device_group +Requested GL_EXT_multiview +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 int) +0:24 'a' ( temp int) +0:24 Constant: +0:24 1512 (const int) +0:32 Sequence +0:32 move second child to first child ( temp 4-component vector of float) +0:32 'p' ( temp 4-component vector of float) +0:32 gl_Position: direct index for structure ( in 4-component vector of float Position) +0:32 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +0:32 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +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 float) +0:33 'ps' ( temp float) +0:33 gl_PointSize: direct index for structure ( in float PointSize) +0:33 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +0:33 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +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 float) +0:34 'cd' ( temp float) +0:34 direct index ( temp float ClipDistance) +0:34 gl_ClipDistance: direct index for structure ( in 3-element array of float ClipDistance) +0:34 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +0:34 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +0:34 Constant: +0:34 1 (const int) +0:34 Constant: +0:34 2 (const int) +0:34 Constant: +0:34 2 (const int) +0:36 Sequence +0:36 move second child to first child ( temp int) +0:36 'pvi' ( temp int) +0:36 'gl_PatchVerticesIn' ( in int PatchVertices) +0:37 Sequence +0:37 move second child to first child ( temp int) +0:37 'pid' ( temp int) +0:37 'gl_PrimitiveID' ( in int PrimitiveID) +0:38 Sequence +0:38 move second child to first child ( temp 3-component vector of float) +0:38 'tc' ( temp 3-component vector of float) +0:38 'gl_TessCoord' ( in 3-component vector of float TessCoord) +0:39 Sequence +0:39 move second child to first child ( temp float) +0:39 'tlo' ( temp float) +0:39 direct index ( patch temp float TessLevelOuter) +0:39 'gl_TessLevelOuter' ( patch in 4-element array of float TessLevelOuter) +0:39 Constant: +0:39 3 (const int) +0:40 Sequence +0:40 move second child to first child ( temp float) +0:40 'tli' ( temp float) +0:40 direct index ( patch temp float TessLevelInner) +0:40 'gl_TessLevelInner' ( patch in 2-element array of float TessLevelInner) +0:40 Constant: +0:40 1 (const int) +0:42 move second child to first child ( temp 4-component vector of float) +0:42 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) +0:42 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 3-element array of float ClipDistance gl_ClipDistance}) +0:42 Constant: +0:42 0 (const uint) +0:42 'p' ( temp 4-component vector of float) +0:43 move second child to first child ( temp float) +0:43 gl_PointSize: direct index for structure ( gl_PointSize float PointSize) +0:43 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 3-element array of float ClipDistance gl_ClipDistance}) +0:43 Constant: +0:43 1 (const uint) +0:43 'ps' ( temp float) +0:44 move second child to first child ( temp float) +0:44 direct index ( temp float ClipDistance) +0:44 gl_ClipDistance: direct index for structure ( out 3-element array of float ClipDistance) +0:44 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 3-element array of float ClipDistance gl_ClipDistance}) +0:44 Constant: +0:44 2 (const uint) +0:44 Constant: +0:44 2 (const int) +0:44 'cd' ( temp float) +0:? Linker Objects +0:? 'patchIn' ( patch in 4-component vector of float) +0:? 'patchOut' ( patch out 4-component vector of float) +0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 3-element array of float ClipDistance gl_ClipDistance}) +0:? 'badp1' ( smooth patch in 4-component vector of float) +0:? 'badp2' ( flat patch in 4-component vector of float) +0:? 'badp3' ( noperspective patch in 4-component vector of float) +0:? 'badp4' ( patch sample in 3-component vector of float) +0:? 'gl_in' ( in 32-element array of block{ in 1-element array of float ClipDistance gl_ClipDistance}) +0:? 'ina' ( in 2-component vector of float) +0:? 'inb' ( in 32-element array of 2-component vector of float) +0:? 'inc' ( in 32-element array of 2-component vector of float) +0:? 'ind' ( in 32-element array of 2-component vector of float) +0:? 'bla' ( in block{ in int f}) +0:? 'blb' ( in 32-element array of block{ in int f}) +0:? 'blc' ( in 32-element array of block{ in int f}) +0:? 'bld' ( in 32-element array of block{ in int f}) +0:? 'ivla' (layout( location=23) in 32-element array of 4-component vector of float) +0:? 'ivlb' (layout( location=24) in 32-element array of 4-component vector of float) +0:? 'ivlc' (layout( location=24) in 32-element array of 4-component vector of float) +0:? 'ovla' (layout( location=23) out 2-element array of 4-component vector of float) +0:? 'ovlb' (layout( location=24) out 2-element array of 4-component vector of float) +0:? 'pinbi' ( patch in block{ in int a}) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/400.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/400.vert.out new file mode 100755 index 0000000..0fd453d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/400.vert.out @@ -0,0 +1,556 @@ +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 +ERROR: 0:70: 'foo3' : no matching overloaded function found +ERROR: 0:76: 'foo3' : ambiguous best function under implicit type conversion +ERROR: 0:77: 'foo3' : ambiguous best function under implicit type conversion +ERROR: 0:78: 'foo3' : ambiguous best function under implicit type conversion +ERROR: 0:81: 'foo3' : ambiguous best function under implicit type conversion +ERROR: 0:82: 'foo3' : ambiguous best function under implicit type conversion +ERROR: 0:83: 'foo3' : ambiguous best function under implicit type conversion +ERROR: 0:86: 'foo3' : ambiguous best function under implicit type conversion +ERROR: 0:87: 'foo3' : ambiguous best function under implicit type conversion +ERROR: 0:88: 'foo3' : ambiguous best function under implicit type conversion +ERROR: 13 compilation errors. No code generated. + + +Shader version: 400 +ERROR: node is still EOpNull! +0:8 Function Definition: foo1(d1;u1; ( global void) +0:8 Function Parameters: +0:8 'a' ( in double) +0:8 'b' ( in uint) +0:9 Function Definition: foo1(d1;i1; ( global void) +0:9 Function Parameters: +0:9 'a' ( in double) +0:9 'b' ( in int) +0:10 Function Definition: foo1(d1;f1; ( global void) +0:10 Function Parameters: +0:10 'a' ( in double) +0:10 'b' ( in float) +0:11 Function Definition: foo1(d1;d1; ( global void) +0:11 Function Parameters: +0:11 'a' ( in double) +0:11 'b' ( in double) +0:13 Function Definition: foo2(d1;f1; ( global void) +0:13 Function Parameters: +0:13 'a' ( in double) +0:13 'b' ( in float) +0:14 Function Definition: foo2(d1;d1; ( global void) +0:14 Function Parameters: +0:14 'a' ( in double) +0:14 'b' ( in double) +0:16 Function Definition: foo3(d1;f1; ( global void) +0:16 Function Parameters: +0:16 'a' ( in double) +0:16 'b' ( in float) +0:17 Function Definition: foo3(f1;d1; ( global void) +0:17 Function Parameters: +0:17 'a' ( in float) +0:17 'b' ( in double) +0:19 Function Definition: ftd(i1;f1;d1; ( global void) +0:19 Function Parameters: +0:19 '' ( in int) +0:19 '' ( in float) +0:19 '' ( in double) +0:20 Function Definition: ftd(u1;f1;d1; ( global void) +0:20 Function Parameters: +0:20 '' ( in uint) +0:20 '' ( in float) +0:20 '' ( in double) +0:21 Function Definition: ftd(f1;d1;d1; ( global void) +0:21 Function Parameters: +0:21 '' ( in float) +0:21 '' ( in double) +0:21 '' ( in double) +0:23 Function Definition: main( ( global void) +0:23 Function Parameters: +0:? Sequence +0:30 Function Call: foo1(d1;d1; ( global void) +0:30 'd' ( temp double) +0:30 'd' ( temp double) +0:31 Function Call: foo1(d1;u1; ( global void) +0:31 'd' ( temp double) +0:31 'u' ( temp uint) +0:32 Function Call: foo1(d1;i1; ( global void) +0:32 'd' ( temp double) +0:32 'i' ( temp int) +0:33 Function Call: foo1(d1;f1; ( global void) +0:33 'd' ( temp double) +0:33 'f' ( temp float) +0:35 Function Call: foo1(d1;d1; ( global void) +0:35 Convert float to double ( temp double) +0:35 'f' ( temp float) +0:35 'd' ( temp double) +0:36 Function Call: foo1(d1;u1; ( global void) +0:36 Convert float to double ( temp double) +0:36 'f' ( temp float) +0:36 'u' ( temp uint) +0:37 Function Call: foo1(d1;i1; ( global void) +0:37 Convert float to double ( temp double) +0:37 'f' ( temp float) +0:37 'i' ( temp int) +0:38 Function Call: foo1(d1;f1; ( global void) +0:38 Convert float to double ( temp double) +0:38 'f' ( temp float) +0:38 'f' ( temp float) +0:40 Function Call: foo1(d1;d1; ( global void) +0:40 Convert uint to double ( temp double) +0:40 'u' ( temp uint) +0:40 'd' ( temp double) +0:41 Function Call: foo1(d1;u1; ( global void) +0:41 Convert uint to double ( temp double) +0:41 'u' ( temp uint) +0:41 'u' ( temp uint) +0:42 Function Call: foo1(d1;i1; ( global void) +0:42 Convert uint to double ( temp double) +0:42 'u' ( temp uint) +0:42 'i' ( temp int) +0:43 Function Call: foo1(d1;f1; ( global void) +0:43 Convert uint to double ( temp double) +0:43 'u' ( temp uint) +0:43 'f' ( temp float) +0:45 Function Call: foo1(d1;d1; ( global void) +0:45 Convert int to double ( temp double) +0:45 'i' ( temp int) +0:45 'd' ( temp double) +0:46 Function Call: foo1(d1;u1; ( global void) +0:46 Convert int to double ( temp double) +0:46 'i' ( temp int) +0:46 'u' ( temp uint) +0:47 Function Call: foo1(d1;i1; ( global void) +0:47 Convert int to double ( temp double) +0:47 'i' ( temp int) +0:47 'i' ( temp int) +0:48 Function Call: foo1(d1;f1; ( global void) +0:48 Convert int to double ( temp double) +0:48 'i' ( temp int) +0:48 'f' ( temp float) +0:50 Function Call: foo2(d1;d1; ( global void) +0:50 'd' ( temp double) +0:50 'd' ( temp double) +0:51 Function Call: foo2(d1;f1; ( global void) +0:51 'd' ( temp double) +0:51 Convert uint to float ( temp float) +0:51 'u' ( temp uint) +0:52 Function Call: foo2(d1;f1; ( global void) +0:52 'd' ( temp double) +0:52 Convert int to float ( temp float) +0:52 'i' ( temp int) +0:53 Function Call: foo2(d1;f1; ( global void) +0:53 'd' ( temp double) +0:53 'f' ( temp float) +0:55 Function Call: foo2(d1;d1; ( global void) +0:55 Convert float to double ( temp double) +0:55 'f' ( temp float) +0:55 'd' ( temp double) +0:56 Function Call: foo2(d1;f1; ( global void) +0:56 Convert float to double ( temp double) +0:56 'f' ( temp float) +0:56 Convert uint to float ( temp float) +0:56 'u' ( temp uint) +0:57 Function Call: foo2(d1;f1; ( global void) +0:57 Convert float to double ( temp double) +0:57 'f' ( temp float) +0:57 Convert int to float ( temp float) +0:57 'i' ( temp int) +0:58 Function Call: foo2(d1;f1; ( global void) +0:58 Convert float to double ( temp double) +0:58 'f' ( temp float) +0:58 'f' ( temp float) +0:60 Function Call: foo2(d1;d1; ( global void) +0:60 Convert uint to double ( temp double) +0:60 'u' ( temp uint) +0:60 'd' ( temp double) +0:61 Function Call: foo2(d1;f1; ( global void) +0:61 Convert uint to double ( temp double) +0:61 'u' ( temp uint) +0:61 Convert uint to float ( temp float) +0:61 'u' ( temp uint) +0:62 Function Call: foo2(d1;f1; ( global void) +0:62 Convert uint to double ( temp double) +0:62 'u' ( temp uint) +0:62 Convert int to float ( temp float) +0:62 'i' ( temp int) +0:63 Function Call: foo2(d1;f1; ( global void) +0:63 Convert uint to double ( temp double) +0:63 'u' ( temp uint) +0:63 'f' ( temp float) +0:65 Function Call: foo2(d1;d1; ( global void) +0:65 Convert int to double ( temp double) +0:65 'i' ( temp int) +0:65 'd' ( temp double) +0:66 Function Call: foo2(d1;f1; ( global void) +0:66 Convert int to double ( temp double) +0:66 'i' ( temp int) +0:66 Convert uint to float ( temp float) +0:66 'u' ( temp uint) +0:67 Function Call: foo2(d1;f1; ( global void) +0:67 Convert int to double ( temp double) +0:67 'i' ( temp int) +0:67 Convert int to float ( temp float) +0:67 'i' ( temp int) +0:68 Function Call: foo2(d1;f1; ( global void) +0:68 Convert int to double ( temp double) +0:68 'i' ( temp int) +0:68 'f' ( temp float) +0:70 Constant: +0:70 0.000000 +0:71 Function Call: foo3(d1;f1; ( global void) +0:71 'd' ( temp double) +0:71 Convert uint to float ( temp float) +0:71 'u' ( temp uint) +0:72 Function Call: foo3(d1;f1; ( global void) +0:72 'd' ( temp double) +0:72 Convert int to float ( temp float) +0:72 'i' ( temp int) +0:73 Function Call: foo3(d1;f1; ( global void) +0:73 'd' ( temp double) +0:73 'f' ( temp float) +0:75 Function Call: foo3(f1;d1; ( global void) +0:75 'f' ( temp float) +0:75 'd' ( temp double) +0:76 Function Call: foo3(d1;f1; ( global void) +0:76 Convert float to double ( temp double) +0:76 'f' ( temp float) +0:76 Convert uint to float ( temp float) +0:76 'u' ( temp uint) +0:77 Function Call: foo3(d1;f1; ( global void) +0:77 Convert float to double ( temp double) +0:77 'f' ( temp float) +0:77 Convert int to float ( temp float) +0:77 'i' ( temp int) +0:78 Function Call: foo3(d1;f1; ( global void) +0:78 Convert float to double ( temp double) +0:78 'f' ( temp float) +0:78 'f' ( temp float) +0:80 Function Call: foo3(f1;d1; ( global void) +0:80 Convert uint to float ( temp float) +0:80 'u' ( temp uint) +0:80 'd' ( temp double) +0:81 Function Call: foo3(d1;f1; ( global void) +0:81 Convert uint to double ( temp double) +0:81 'u' ( temp uint) +0:81 Convert uint to float ( temp float) +0:81 'u' ( temp uint) +0:82 Function Call: foo3(d1;f1; ( global void) +0:82 Convert uint to double ( temp double) +0:82 'u' ( temp uint) +0:82 Convert int to float ( temp float) +0:82 'i' ( temp int) +0:83 Function Call: foo3(d1;f1; ( global void) +0:83 Convert uint to double ( temp double) +0:83 'u' ( temp uint) +0:83 'f' ( temp float) +0:85 Function Call: foo3(f1;d1; ( global void) +0:85 Convert int to float ( temp float) +0:85 'i' ( temp int) +0:85 'd' ( temp double) +0:86 Function Call: foo3(d1;f1; ( global void) +0:86 Convert int to double ( temp double) +0:86 'i' ( temp int) +0:86 Convert uint to float ( temp float) +0:86 'u' ( temp uint) +0:87 Function Call: foo3(d1;f1; ( global void) +0:87 Convert int to double ( temp double) +0:87 'i' ( temp int) +0:87 Convert int to float ( temp float) +0:87 'i' ( temp int) +0:88 Function Call: foo3(d1;f1; ( global void) +0:88 Convert int to double ( temp double) +0:88 'i' ( temp int) +0:88 'f' ( temp float) +0:90 Function Call: ftd(i1;f1;d1; ( global void) +0:90 'i' ( temp int) +0:90 'f' ( temp float) +0:90 Convert float to double ( temp double) +0:90 'f' ( temp float) +0:91 Function Call: ftd(u1;f1;d1; ( global void) +0:91 'u' ( temp uint) +0:91 'f' ( temp float) +0:91 Convert float to double ( temp double) +0:91 'f' ( temp float) +0:97 Function Definition: tf( ( global void) +0:97 Function Parameters: +0:? Sequence +0:104 Function Call: itf(i1;f1;i1; ( global void) +0:104 'i' ( temp int) +0:104 Convert int to float ( temp float) +0:104 'i' ( temp int) +0:104 'i' ( temp int) +0:105 Function Call: itf(i1;f1;i1; ( global void) +0:105 'i' ( temp int) +0:105 Convert uint to float ( temp float) +0:105 'u' ( temp uint) +0:105 'i' ( temp int) +0:? Linker Objects +0:? 'd' ( in double) +0:? 'd3' ( in 3-component vector of double) +0:? 'dm4' ( in 4X4 matrix of double) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + + +Linked vertex stage: + + +Shader version: 400 +ERROR: node is still EOpNull! +0:8 Function Definition: foo1(d1;u1; ( global void) +0:8 Function Parameters: +0:8 'a' ( in double) +0:8 'b' ( in uint) +0:9 Function Definition: foo1(d1;i1; ( global void) +0:9 Function Parameters: +0:9 'a' ( in double) +0:9 'b' ( in int) +0:10 Function Definition: foo1(d1;f1; ( global void) +0:10 Function Parameters: +0:10 'a' ( in double) +0:10 'b' ( in float) +0:11 Function Definition: foo1(d1;d1; ( global void) +0:11 Function Parameters: +0:11 'a' ( in double) +0:11 'b' ( in double) +0:13 Function Definition: foo2(d1;f1; ( global void) +0:13 Function Parameters: +0:13 'a' ( in double) +0:13 'b' ( in float) +0:14 Function Definition: foo2(d1;d1; ( global void) +0:14 Function Parameters: +0:14 'a' ( in double) +0:14 'b' ( in double) +0:16 Function Definition: foo3(d1;f1; ( global void) +0:16 Function Parameters: +0:16 'a' ( in double) +0:16 'b' ( in float) +0:17 Function Definition: foo3(f1;d1; ( global void) +0:17 Function Parameters: +0:17 'a' ( in float) +0:17 'b' ( in double) +0:19 Function Definition: ftd(i1;f1;d1; ( global void) +0:19 Function Parameters: +0:19 '' ( in int) +0:19 '' ( in float) +0:19 '' ( in double) +0:20 Function Definition: ftd(u1;f1;d1; ( global void) +0:20 Function Parameters: +0:20 '' ( in uint) +0:20 '' ( in float) +0:20 '' ( in double) +0:23 Function Definition: main( ( global void) +0:23 Function Parameters: +0:? Sequence +0:30 Function Call: foo1(d1;d1; ( global void) +0:30 'd' ( temp double) +0:30 'd' ( temp double) +0:31 Function Call: foo1(d1;u1; ( global void) +0:31 'd' ( temp double) +0:31 'u' ( temp uint) +0:32 Function Call: foo1(d1;i1; ( global void) +0:32 'd' ( temp double) +0:32 'i' ( temp int) +0:33 Function Call: foo1(d1;f1; ( global void) +0:33 'd' ( temp double) +0:33 'f' ( temp float) +0:35 Function Call: foo1(d1;d1; ( global void) +0:35 Convert float to double ( temp double) +0:35 'f' ( temp float) +0:35 'd' ( temp double) +0:36 Function Call: foo1(d1;u1; ( global void) +0:36 Convert float to double ( temp double) +0:36 'f' ( temp float) +0:36 'u' ( temp uint) +0:37 Function Call: foo1(d1;i1; ( global void) +0:37 Convert float to double ( temp double) +0:37 'f' ( temp float) +0:37 'i' ( temp int) +0:38 Function Call: foo1(d1;f1; ( global void) +0:38 Convert float to double ( temp double) +0:38 'f' ( temp float) +0:38 'f' ( temp float) +0:40 Function Call: foo1(d1;d1; ( global void) +0:40 Convert uint to double ( temp double) +0:40 'u' ( temp uint) +0:40 'd' ( temp double) +0:41 Function Call: foo1(d1;u1; ( global void) +0:41 Convert uint to double ( temp double) +0:41 'u' ( temp uint) +0:41 'u' ( temp uint) +0:42 Function Call: foo1(d1;i1; ( global void) +0:42 Convert uint to double ( temp double) +0:42 'u' ( temp uint) +0:42 'i' ( temp int) +0:43 Function Call: foo1(d1;f1; ( global void) +0:43 Convert uint to double ( temp double) +0:43 'u' ( temp uint) +0:43 'f' ( temp float) +0:45 Function Call: foo1(d1;d1; ( global void) +0:45 Convert int to double ( temp double) +0:45 'i' ( temp int) +0:45 'd' ( temp double) +0:46 Function Call: foo1(d1;u1; ( global void) +0:46 Convert int to double ( temp double) +0:46 'i' ( temp int) +0:46 'u' ( temp uint) +0:47 Function Call: foo1(d1;i1; ( global void) +0:47 Convert int to double ( temp double) +0:47 'i' ( temp int) +0:47 'i' ( temp int) +0:48 Function Call: foo1(d1;f1; ( global void) +0:48 Convert int to double ( temp double) +0:48 'i' ( temp int) +0:48 'f' ( temp float) +0:50 Function Call: foo2(d1;d1; ( global void) +0:50 'd' ( temp double) +0:50 'd' ( temp double) +0:51 Function Call: foo2(d1;f1; ( global void) +0:51 'd' ( temp double) +0:51 Convert uint to float ( temp float) +0:51 'u' ( temp uint) +0:52 Function Call: foo2(d1;f1; ( global void) +0:52 'd' ( temp double) +0:52 Convert int to float ( temp float) +0:52 'i' ( temp int) +0:53 Function Call: foo2(d1;f1; ( global void) +0:53 'd' ( temp double) +0:53 'f' ( temp float) +0:55 Function Call: foo2(d1;d1; ( global void) +0:55 Convert float to double ( temp double) +0:55 'f' ( temp float) +0:55 'd' ( temp double) +0:56 Function Call: foo2(d1;f1; ( global void) +0:56 Convert float to double ( temp double) +0:56 'f' ( temp float) +0:56 Convert uint to float ( temp float) +0:56 'u' ( temp uint) +0:57 Function Call: foo2(d1;f1; ( global void) +0:57 Convert float to double ( temp double) +0:57 'f' ( temp float) +0:57 Convert int to float ( temp float) +0:57 'i' ( temp int) +0:58 Function Call: foo2(d1;f1; ( global void) +0:58 Convert float to double ( temp double) +0:58 'f' ( temp float) +0:58 'f' ( temp float) +0:60 Function Call: foo2(d1;d1; ( global void) +0:60 Convert uint to double ( temp double) +0:60 'u' ( temp uint) +0:60 'd' ( temp double) +0:61 Function Call: foo2(d1;f1; ( global void) +0:61 Convert uint to double ( temp double) +0:61 'u' ( temp uint) +0:61 Convert uint to float ( temp float) +0:61 'u' ( temp uint) +0:62 Function Call: foo2(d1;f1; ( global void) +0:62 Convert uint to double ( temp double) +0:62 'u' ( temp uint) +0:62 Convert int to float ( temp float) +0:62 'i' ( temp int) +0:63 Function Call: foo2(d1;f1; ( global void) +0:63 Convert uint to double ( temp double) +0:63 'u' ( temp uint) +0:63 'f' ( temp float) +0:65 Function Call: foo2(d1;d1; ( global void) +0:65 Convert int to double ( temp double) +0:65 'i' ( temp int) +0:65 'd' ( temp double) +0:66 Function Call: foo2(d1;f1; ( global void) +0:66 Convert int to double ( temp double) +0:66 'i' ( temp int) +0:66 Convert uint to float ( temp float) +0:66 'u' ( temp uint) +0:67 Function Call: foo2(d1;f1; ( global void) +0:67 Convert int to double ( temp double) +0:67 'i' ( temp int) +0:67 Convert int to float ( temp float) +0:67 'i' ( temp int) +0:68 Function Call: foo2(d1;f1; ( global void) +0:68 Convert int to double ( temp double) +0:68 'i' ( temp int) +0:68 'f' ( temp float) +0:70 Constant: +0:70 0.000000 +0:71 Function Call: foo3(d1;f1; ( global void) +0:71 'd' ( temp double) +0:71 Convert uint to float ( temp float) +0:71 'u' ( temp uint) +0:72 Function Call: foo3(d1;f1; ( global void) +0:72 'd' ( temp double) +0:72 Convert int to float ( temp float) +0:72 'i' ( temp int) +0:73 Function Call: foo3(d1;f1; ( global void) +0:73 'd' ( temp double) +0:73 'f' ( temp float) +0:75 Function Call: foo3(f1;d1; ( global void) +0:75 'f' ( temp float) +0:75 'd' ( temp double) +0:76 Function Call: foo3(d1;f1; ( global void) +0:76 Convert float to double ( temp double) +0:76 'f' ( temp float) +0:76 Convert uint to float ( temp float) +0:76 'u' ( temp uint) +0:77 Function Call: foo3(d1;f1; ( global void) +0:77 Convert float to double ( temp double) +0:77 'f' ( temp float) +0:77 Convert int to float ( temp float) +0:77 'i' ( temp int) +0:78 Function Call: foo3(d1;f1; ( global void) +0:78 Convert float to double ( temp double) +0:78 'f' ( temp float) +0:78 'f' ( temp float) +0:80 Function Call: foo3(f1;d1; ( global void) +0:80 Convert uint to float ( temp float) +0:80 'u' ( temp uint) +0:80 'd' ( temp double) +0:81 Function Call: foo3(d1;f1; ( global void) +0:81 Convert uint to double ( temp double) +0:81 'u' ( temp uint) +0:81 Convert uint to float ( temp float) +0:81 'u' ( temp uint) +0:82 Function Call: foo3(d1;f1; ( global void) +0:82 Convert uint to double ( temp double) +0:82 'u' ( temp uint) +0:82 Convert int to float ( temp float) +0:82 'i' ( temp int) +0:83 Function Call: foo3(d1;f1; ( global void) +0:83 Convert uint to double ( temp double) +0:83 'u' ( temp uint) +0:83 'f' ( temp float) +0:85 Function Call: foo3(f1;d1; ( global void) +0:85 Convert int to float ( temp float) +0:85 'i' ( temp int) +0:85 'd' ( temp double) +0:86 Function Call: foo3(d1;f1; ( global void) +0:86 Convert int to double ( temp double) +0:86 'i' ( temp int) +0:86 Convert uint to float ( temp float) +0:86 'u' ( temp uint) +0:87 Function Call: foo3(d1;f1; ( global void) +0:87 Convert int to double ( temp double) +0:87 'i' ( temp int) +0:87 Convert int to float ( temp float) +0:87 'i' ( temp int) +0:88 Function Call: foo3(d1;f1; ( global void) +0:88 Convert int to double ( temp double) +0:88 'i' ( temp int) +0:88 'f' ( temp float) +0:90 Function Call: ftd(i1;f1;d1; ( global void) +0:90 'i' ( temp int) +0:90 'f' ( temp float) +0:90 Convert float to double ( temp double) +0:90 'f' ( temp float) +0:91 Function Call: ftd(u1;f1;d1; ( global void) +0:91 'u' ( temp uint) +0:91 'f' ( temp float) +0:91 Convert float to double ( temp double) +0:91 'f' ( temp float) +0:? Linker Objects +0:? 'd' ( in double) +0:? 'd3' ( in 3-component vector of double) +0:? 'dm4' ( in 4X4 matrix of double) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/410.geom.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/410.geom.out new file mode 100644 index 0000000..7219e4d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/410.geom.out @@ -0,0 +1,83 @@ +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 +ERROR: 0:32: 'gl_Position' : no such field in structure +ERROR: 0:32: '=' : cannot convert from ' temp block{ in float PointSize gl_PointSize}' to ' temp 4-component vector of float' +ERROR: 0:33: 'gl_Position' : member of nameless block was not redeclared +ERROR: 0:33: 'assign' : cannot convert from ' const 4-component vector of float' to 'layout( stream=0) gl_Position void Position' +WARNING: 0:38: 'return' : type conversion on return values was not explicitly allowed until version 420 +ERROR: 7 compilation errors. No code generated. + + +Shader version: 410 +invocations = -1 +max_vertices = -1 +input primitive = none +output primitive = none +ERROR: node is still EOpNull! +0:3 Function Definition: main( ( global void) +0:3 Function Parameters: +0:5 Sequence +0:5 move second child to first child ( temp int) +0:5 'gl_ViewportIndex' (layout( stream=0) out int ViewportIndex) +0:5 Constant: +0:5 7 (const int) +0:28 Function Definition: foo( ( global void) +0:28 Function Parameters: +0:30 Sequence +0:30 Sequence +0:30 move second child to first child ( temp float) +0:30 'p' ( temp float) +0:30 gl_PointSize: direct index for structure ( in float PointSize) +0:30 direct index ( temp block{ in float PointSize gl_PointSize}) +0:30 'gl_in' ( in implicitly-sized array of block{ in float PointSize gl_PointSize}) +0:30 Constant: +0:30 1 (const int) +0:30 Constant: +0:30 0 (const int) +0:31 move second child to first child ( temp float) +0:31 gl_PointSize: direct index for structure (layout( stream=0) gl_PointSize float PointSize) +0:31 'anon@0' (layout( stream=0) out block{layout( stream=0) gl_PointSize float PointSize gl_PointSize, }) +0:31 Constant: +0:31 1 (const uint) +0:31 'p' ( temp float) +0:33 gl_Position: direct index for structure (layout( stream=0) gl_Position void Position) +0:33 'anon@0' (layout( stream=0) out block{layout( stream=0) gl_PointSize float PointSize gl_PointSize, }) +0:33 Constant: +0:33 0 (const uint) +0:36 Function Definition: foo5( ( global float) +0:36 Function Parameters: +0:38 Sequence +0:38 Branch: Return with expression +0:38 Constant: +0:38 4.000000 +0:? Linker Objects +0:? 'gl_in' ( in implicitly-sized array of block{ in float PointSize gl_PointSize}) +0:? 'anon@0' (layout( stream=0) out block{layout( stream=0) gl_PointSize float PointSize gl_PointSize, }) + + +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: 410 +invocations = 1 +max_vertices = -1 +input primitive = none +output primitive = none +ERROR: node is still EOpNull! +0:3 Function Definition: main( ( global void) +0:3 Function Parameters: +0:5 Sequence +0:5 move second child to first child ( temp int) +0:5 'gl_ViewportIndex' (layout( stream=0) out int ViewportIndex) +0:5 Constant: +0:5 7 (const int) +0:? Linker Objects +0:? 'gl_in' ( in 2-element array of block{ in float PointSize gl_PointSize}) +0:? 'anon@0' (layout( stream=0) out block{layout( stream=0) gl_PointSize float PointSize gl_PointSize, }) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/410.tesc.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/410.tesc.out new file mode 100644 index 0000000..9b459b1 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/410.tesc.out @@ -0,0 +1,31 @@ +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. + + +Shader version: 400 +vertices = -1 +ERROR: node is still EOpNull! +0:8 Function Definition: main( ( global void) +0:8 Function Parameters: +0:? Linker Objects +0:? 'gl_out' ( out implicitly-sized array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:? 'outa' ( global 1-element array of int) +0:? 'patchOut' ( patch out 4-component vector of float) + + +Linked tessellation control stage: + +ERROR: Linking tessellation control stage: At least one shader must specify an output layout(vertices=...) + +Shader version: 400 +vertices = -1 +ERROR: node is still EOpNull! +0:8 Function Definition: main( ( global void) +0:8 Function Parameters: +0:? Linker Objects +0:? 'gl_out' ( out 1-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance}) +0:? 'outa' ( global 1-element array of int) +0:? 'patchOut' ( patch out 4-component vector of float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/410.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/410.vert.out new file mode 100755 index 0000000..0e2c87e --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/410.vert.out @@ -0,0 +1,29 @@ +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) +0:7 Function Parameters: +0:? Linker Objects +0:? 'd' ( in double) +0:? 'd3' ( in 3-component vector of double) +0:? 'dm4' ( in 4X4 matrix of double) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + + +Linked vertex stage: + + +Shader version: 410 +0:? Sequence +0:7 Function Definition: main( ( global void) +0:7 Function Parameters: +0:? Linker Objects +0:? 'd' ( in double) +0:? 'd3' ( in 3-component vector of double) +0:? 'dm4' ( in 4X4 matrix of double) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.comp.out new file mode 100755 index 0000000..07944de --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.comp.out @@ -0,0 +1,122 @@ +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. + + +Shader version: 420 +Requested GL_ARB_compute_shader +local_size = (2, 4, 6) +ERROR: node is still EOpNull! +0:11 Function Definition: main( ( global void) +0:11 Function Parameters: +0:13 Sequence +0:13 move second child to first child ( temp 3-component vector of float) +0:13 'sfoo' ( shared 3-component vector of float) +0:13 Constant: +0:13 2.000000 +0:13 4.000000 +0:13 6.000000 +0:14 add second child into first child ( temp 3-component vector of float) +0:14 'sfoo' ( shared 3-component vector of float) +0:14 Convert uint to float ( temp 3-component vector of float) +0:14 add ( temp 3-component vector of uint) +0:14 add ( temp 3-component vector of uint) +0:14 add ( temp 3-component vector of uint) +0:14 add ( temp 3-component vector of uint) +0:14 Constant: +0:14 2 (const uint) +0:14 4 (const uint) +0:14 6 (const uint) +0:14 'gl_NumWorkGroups' ( in 3-component vector of uint NumWorkGroups) +0:14 'gl_WorkGroupID' ( in 3-component vector of uint WorkGroupID) +0:14 'gl_LocalInvocationID' ( in 3-component vector of uint LocalInvocationID) +0:14 'gl_GlobalInvocationID' ( in 3-component vector of uint GlobalInvocationID) +0:15 vector scale second child into first child ( temp 3-component vector of float) +0:15 'sfoo' ( shared 3-component vector of float) +0:15 Convert uint to float ( temp float) +0:15 'gl_LocalInvocationIndex' ( in uint LocalInvocationIndex) +0:16 add second child into first child ( temp 3-component vector of float) +0:16 'sfoo' ( shared 3-component vector of float) +0:16 Constant: +0:16 66559.000000 +0:16 66559.000000 +0:16 65599.000000 +0:17 vector scale second child into first child ( temp 3-component vector of float) +0:17 'sfoo' ( shared 3-component vector of float) +0:17 Constant: +0:17 1057.000000 +0:23 Barrier ( global void) +0:24 MemoryBarrier ( global void) +0:25 MemoryBarrierAtomicCounter ( global void) +0:26 MemoryBarrierBuffer ( global void) +0:27 MemoryBarrierImage ( global void) +0:28 MemoryBarrierShared ( global void) +0:29 GroupMemoryBarrier ( global void) +0:? Linker Objects +0:? 'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize) +0:? 2 (const uint) +0:? 4 (const uint) +0:? 6 (const uint) +0:? 'sfoo' ( shared 3-component vector of float) + + +Linked compute stage: + + +Shader version: 420 +Requested GL_ARB_compute_shader +local_size = (2, 4, 6) +ERROR: node is still EOpNull! +0:11 Function Definition: main( ( global void) +0:11 Function Parameters: +0:13 Sequence +0:13 move second child to first child ( temp 3-component vector of float) +0:13 'sfoo' ( shared 3-component vector of float) +0:13 Constant: +0:13 2.000000 +0:13 4.000000 +0:13 6.000000 +0:14 add second child into first child ( temp 3-component vector of float) +0:14 'sfoo' ( shared 3-component vector of float) +0:14 Convert uint to float ( temp 3-component vector of float) +0:14 add ( temp 3-component vector of uint) +0:14 add ( temp 3-component vector of uint) +0:14 add ( temp 3-component vector of uint) +0:14 add ( temp 3-component vector of uint) +0:14 Constant: +0:14 2 (const uint) +0:14 4 (const uint) +0:14 6 (const uint) +0:14 'gl_NumWorkGroups' ( in 3-component vector of uint NumWorkGroups) +0:14 'gl_WorkGroupID' ( in 3-component vector of uint WorkGroupID) +0:14 'gl_LocalInvocationID' ( in 3-component vector of uint LocalInvocationID) +0:14 'gl_GlobalInvocationID' ( in 3-component vector of uint GlobalInvocationID) +0:15 vector scale second child into first child ( temp 3-component vector of float) +0:15 'sfoo' ( shared 3-component vector of float) +0:15 Convert uint to float ( temp float) +0:15 'gl_LocalInvocationIndex' ( in uint LocalInvocationIndex) +0:16 add second child into first child ( temp 3-component vector of float) +0:16 'sfoo' ( shared 3-component vector of float) +0:16 Constant: +0:16 66559.000000 +0:16 66559.000000 +0:16 65599.000000 +0:17 vector scale second child into first child ( temp 3-component vector of float) +0:17 'sfoo' ( shared 3-component vector of float) +0:17 Constant: +0:17 1057.000000 +0:23 Barrier ( global void) +0:24 MemoryBarrier ( global void) +0:25 MemoryBarrierAtomicCounter ( global void) +0:26 MemoryBarrierBuffer ( global void) +0:27 MemoryBarrierImage ( global void) +0:28 MemoryBarrierShared ( global void) +0:29 GroupMemoryBarrier ( global void) +0:? Linker Objects +0:? 'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize) +0:? 2 (const uint) +0:? 4 (const uint) +0:? 6 (const uint) +0:? 'sfoo' ( shared 3-component vector of float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.frag.out new file mode 100644 index 0000000..31fe7f9 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.frag.out @@ -0,0 +1,43 @@ +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. + + +Shader version: 420 +using depth_any +ERROR: node is still EOpNull! +0:6 Function Definition: main( ( global void) +0:6 Function Parameters: +0:8 Sequence +0:8 move second child to first child ( temp float) +0:8 'gl_FragDepth' ( gl_FragDepth float FragDepth) +0:8 Constant: +0:8 0.300000 +0:? Linker Objects +0:? 'gl_FragDepth' ( gl_FragDepth float FragDepth) +0:? 'depth' ( smooth in float) +0:? 'a' (layout( binding=0 offset=0) uniform implicitly-sized array of atomic_uint) + + +Linked fragment stage: + + +Shader version: 420 +using depth_any +ERROR: node is still EOpNull! +0:6 Function Definition: main( ( global void) +0:6 Function Parameters: +0:8 Sequence +0:8 move second child to first child ( temp float) +0:8 'gl_FragDepth' ( gl_FragDepth float FragDepth) +0:8 Constant: +0:8 0.300000 +0:? Linker Objects +0:? 'gl_FragDepth' ( gl_FragDepth float FragDepth) +0:? 'depth' ( smooth in float) +0:? 'a' (layout( binding=0 offset=0) uniform 1-element array of atomic_uint) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.geom.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.geom.out new file mode 100644 index 0000000..0fccfe0 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.geom.out @@ -0,0 +1,153 @@ +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) +ERROR: 0:43: 'assign' : l-value required "v4" (can't modify a uniform) +ERROR: 0:48: 'gl_PointSize' : cannot change arrayness of redeclared block member +ERROR: 0:49: 'gl_ClipDistance' : cannot change arrayness of redeclared block member +ERROR: 6 compilation errors. No code generated. + + +Shader version: 420 +invocations = -1 +max_vertices = -1 +input primitive = triangles +output primitive = none +ERROR: node is still EOpNull! +0:7 Function Definition: foo( ( global void) +0:7 Function Parameters: +0:9 Sequence +0:9 Constant: +0:9 1 (const int) +0:10 gl_Position: direct index for structure ( in 4-component vector of float Position) +0:10 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:10 'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:10 Constant: +0:10 1 (const int) +0:10 Constant: +0:10 0 (const int) +0:11 gl_Position: direct index for structure ( in 4-component vector of float Position) +0:11 indirect index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:11 'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:11 'i' ( global int) +0:11 Constant: +0:11 0 (const int) +0:18 Function Definition: foo3( ( global void) +0:18 Function Parameters: +0:20 Sequence +0:20 Constant: +0:20 3 (const int) +0:21 gl_Position: direct index for structure ( in 4-component vector of float Position) +0:21 indirect index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:21 'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:21 'i' ( global int) +0:21 Constant: +0:21 0 (const int) +0:22 Constant: +0:22 3 (const int) +0:29 Function Definition: foo4( ( global void) +0:29 Function Parameters: +0:? Sequence +0:40 Sequence +0:40 move second child to first child ( temp 4-component vector of float) +0:40 'v' ( temp 4-component vector of float) +0:40 textureGatherOffset ( global 4-component vector of float) +0:40 's2D' ( uniform sampler2D) +0:40 direct index ( temp 2-component vector of float) +0:40 'coord' ( in 3-element array of 2-component vector of float) +0:40 Constant: +0:40 0 (const int) +0:40 vector swizzle ( temp 2-component vector of int) +0:40 indirect index ( temp 2-component vector of int) +0:40 Constant: +0:40 0 (const int) +0:40 1 (const int) +0:40 1 (const int) +0:40 -2 (const int) +0:40 0 (const int) +0:40 3 (const int) +0:40 -3 (const int) +0:40 0 (const int) +0:40 2 (const int) +0:40 1 (const int) +0:40 'i' ( global int) +0:40 Sequence +0:40 Constant: +0:40 0 (const int) +0:40 Constant: +0:40 1 (const int) +0:42 move second child to first child ( temp 2-component vector of int) +0:42 vector swizzle ( temp 2-component vector of int) +0:42 indirect index ( temp 2-component vector of int) +0:42 Constant: +0:42 0 (const int) +0:42 1 (const int) +0:42 1 (const int) +0:42 -2 (const int) +0:42 0 (const int) +0:42 3 (const int) +0:42 -3 (const int) +0:42 0 (const int) +0:42 2 (const int) +0:42 1 (const int) +0:42 'i' ( global int) +0:42 Sequence +0:42 Constant: +0:42 0 (const int) +0:42 Constant: +0:42 1 (const int) +0:42 Constant: +0:42 3 (const int) +0:42 3 (const int) +0:43 move second child to first child ( temp float) +0:43 direct index ( temp float) +0:43 'v4' ( uniform 4-component vector of float) +0:43 Constant: +0:43 0 (const int) +0:43 Constant: +0:43 3.200000 +0:44 vector swizzle ( temp 2-component vector of float) +0:44 'v4' ( uniform 4-component vector of float) +0:44 Sequence +0:44 Constant: +0:44 0 (const int) +0:44 Constant: +0:44 1 (const int) +0:52 Function Definition: foo5( ( global float) +0:52 Function Parameters: +0:54 Sequence +0:54 Branch: Return with expression +0:54 Convert int to float ( temp float) +0:54 'i' ( global int) +0:? Linker Objects +0:? 'i' ( global int) +0:? 'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:? 'color3' ( in 3-element array of 4-component vector of float) +0:? 's2D' ( uniform sampler2D) +0:? 'coord' ( in 3-element array of 2-component vector of float) +0:? 'v4' ( uniform 4-component vector of float) +0:? 'anon@0' (layout( stream=0) out block{layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out implicitly-sized array of float ClipDistance gl_ClipDistance}) + + +Linked geometry stage: + +ERROR: Linking geometry stage: Missing entry point: Each stage requires one entry point +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: 420 +invocations = 1 +max_vertices = -1 +input primitive = triangles +output primitive = none +ERROR: node is still EOpNull! +0:? Linker Objects +0:? 'i' ( global int) +0:? 'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 1-element array of float ClipDistance gl_ClipDistance}) +0:? 'color3' ( in 3-element array of 4-component vector of float) +0:? 's2D' ( uniform sampler2D) +0:? 'coord' ( in 3-element array of 2-component vector of float) +0:? 'v4' ( uniform 4-component vector of float) +0:? 'anon@0' (layout( stream=0) out block{layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out 1-element array of float ClipDistance gl_ClipDistance}) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.tesc.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.tesc.out new file mode 100644 index 0000000..83816f3 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.tesc.out @@ -0,0 +1,195 @@ +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 +ERROR: 0:26: 'gl_PointSize' : no such field in structure +ERROR: 0:26: 'assign' : cannot convert from ' temp float' to ' temp block{ out 4-component vector of float Position gl_Position}' +ERROR: 0:29: 'out' : type must be an array: outf +ERROR: 0:43: 'vertices' : must be greater than 0 +ERROR: 7 compilation errors. No code generated. + + +Shader version: 420 +Requested GL_ARB_separate_shader_objects +vertices = 4 +ERROR: node is still EOpNull! +0:15 Function Definition: main( ( global void) +0:15 Function Parameters: +0:17 Sequence +0:17 Sequence +0:17 move second child to first child ( temp 4-component vector of float) +0:17 'p' ( temp 4-component vector of float) +0:17 gl_Position: direct index for structure ( in 4-component vector of float Position) +0:17 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:17 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:17 Constant: +0:17 1 (const int) +0:17 Constant: +0:17 0 (const int) +0:18 Sequence +0:18 move second child to first child ( temp float) +0:18 'ps' ( temp float) +0:18 gl_PointSize: direct index for structure ( in float PointSize) +0:18 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:18 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:18 Constant: +0:18 1 (const int) +0:18 Constant: +0:18 1 (const int) +0:19 Sequence +0:19 move second child to first child ( temp float) +0:19 'cd' ( temp float) +0:19 direct index ( temp float ClipDistance) +0:19 gl_ClipDistance: direct index for structure ( in implicitly-sized array of float ClipDistance) +0:19 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:19 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:19 Constant: +0:19 1 (const int) +0:19 Constant: +0:19 2 (const int) +0:19 Constant: +0:19 2 (const int) +0:21 Sequence +0:21 move second child to first child ( temp int) +0:21 'pvi' ( temp int) +0:21 'gl_PatchVerticesIn' ( in int PatchVertices) +0:22 Sequence +0:22 move second child to first child ( temp int) +0:22 'pid' ( temp int) +0:22 'gl_PrimitiveID' ( in int PrimitiveID) +0:23 Sequence +0:23 move second child to first child ( temp int) +0:23 'iid' ( temp int) +0:23 'gl_InvocationID' ( in int InvocationID) +0:25 move second child to first child ( temp 4-component vector of float) +0:25 gl_Position: direct index for structure ( out 4-component vector of float Position) +0:25 indirect index ( temp block{ out 4-component vector of float Position gl_Position}) +0:25 'gl_out' ( out 3-element array of block{ out 4-component vector of float Position gl_Position}) +0:25 'gl_InvocationID' ( in int InvocationID) +0:25 Constant: +0:25 0 (const int) +0:25 'p' ( temp 4-component vector of float) +0:26 indirect index ( temp block{ out 4-component vector of float Position gl_Position}) +0:26 'gl_out' ( out 3-element array of block{ out 4-component vector of float Position gl_Position}) +0:26 'gl_InvocationID' ( in int InvocationID) +0:34 Function Definition: foo( ( global void) +0:34 Function Parameters: +0:36 Sequence +0:36 Test condition and select ( temp void) +0:36 Condition +0:36 logical-or ( temp bool) +0:36 Compare Not Equal ( temp bool) +0:36 Constant: +0:36 -0.625000 +0:36 -0.500000 +0:36 -0.375000 +0:36 -0.250000 +0:36 -0.375000 +0:36 -0.250000 +0:36 -0.125000 +0:36 0.000000 +0:36 direct index (layout( location=0) temp 2X4 matrix of double) +0:36 'vs_tcs_first' (layout( location=0) in 32-element array of 2X4 matrix of double) +0:36 Constant: +0:36 0 (const int) +0:37 Compare Not Equal ( temp bool) +0:37 Constant: +0:37 0.375000 +0:37 0.500000 +0:37 0.625000 +0:37 0.750000 +0:37 0.625000 +0:37 0.750000 +0:37 0.875000 +0:37 -0.625000 +0:37 direct index (layout( location=12) temp 2X4 matrix of double) +0:37 'vs_tcs_last' (layout( location=12) in 32-element array of 2X4 matrix of double) +0:37 Constant: +0:37 0 (const int) +0:36 true case is null +0:? Linker Objects +0:? 'gl_out' ( out 3-element array of block{ out 4-component vector of float Position gl_Position}) +0:? 'a' ( out 3-element array of int) +0:? 'outb' ( out 5-element array of int) +0:? 'outc' ( out 4-element array of int) +0:? 'outf' ( out float) +0:? 'vs_tcs_first' (layout( location=0) in 32-element array of 2X4 matrix of double) +0:? 'vs_tcs_last' (layout( location=12) in 32-element array of 2X4 matrix of double) + + +Linked tessellation control stage: + + +Shader version: 420 +Requested GL_ARB_separate_shader_objects +vertices = 4 +ERROR: node is still EOpNull! +0:15 Function Definition: main( ( global void) +0:15 Function Parameters: +0:17 Sequence +0:17 Sequence +0:17 move second child to first child ( temp 4-component vector of float) +0:17 'p' ( temp 4-component vector of float) +0:17 gl_Position: direct index for structure ( in 4-component vector of float Position) +0:17 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +0:17 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +0:17 Constant: +0:17 1 (const int) +0:17 Constant: +0:17 0 (const int) +0:18 Sequence +0:18 move second child to first child ( temp float) +0:18 'ps' ( temp float) +0:18 gl_PointSize: direct index for structure ( in float PointSize) +0:18 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +0:18 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +0:18 Constant: +0:18 1 (const int) +0:18 Constant: +0:18 1 (const int) +0:19 Sequence +0:19 move second child to first child ( temp float) +0:19 'cd' ( temp float) +0:19 direct index ( temp float ClipDistance) +0:19 gl_ClipDistance: direct index for structure ( in 3-element array of float ClipDistance) +0:19 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +0:19 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 3-element array of float ClipDistance gl_ClipDistance}) +0:19 Constant: +0:19 1 (const int) +0:19 Constant: +0:19 2 (const int) +0:19 Constant: +0:19 2 (const int) +0:21 Sequence +0:21 move second child to first child ( temp int) +0:21 'pvi' ( temp int) +0:21 'gl_PatchVerticesIn' ( in int PatchVertices) +0:22 Sequence +0:22 move second child to first child ( temp int) +0:22 'pid' ( temp int) +0:22 'gl_PrimitiveID' ( in int PrimitiveID) +0:23 Sequence +0:23 move second child to first child ( temp int) +0:23 'iid' ( temp int) +0:23 'gl_InvocationID' ( in int InvocationID) +0:25 move second child to first child ( temp 4-component vector of float) +0:25 gl_Position: direct index for structure ( out 4-component vector of float Position) +0:25 indirect index ( temp block{ out 4-component vector of float Position gl_Position}) +0:25 'gl_out' ( out 3-element array of block{ out 4-component vector of float Position gl_Position}) +0:25 'gl_InvocationID' ( in int InvocationID) +0:25 Constant: +0:25 0 (const int) +0:25 'p' ( temp 4-component vector of float) +0:26 indirect index ( temp block{ out 4-component vector of float Position gl_Position}) +0:26 'gl_out' ( out 3-element array of block{ out 4-component vector of float Position gl_Position}) +0:26 'gl_InvocationID' ( in int InvocationID) +0:? Linker Objects +0:? 'gl_out' ( out 3-element array of block{ out 4-component vector of float Position gl_Position}) +0:? 'a' ( out 3-element array of int) +0:? 'outb' ( out 5-element array of int) +0:? 'outc' ( out 4-element array of int) +0:? 'outf' ( out float) +0:? 'vs_tcs_first' (layout( location=0) in 32-element array of 2X4 matrix of double) +0:? 'vs_tcs_last' (layout( location=12) in 32-element array of 2X4 matrix of double) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.tese.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.tese.out new file mode 100644 index 0000000..9986c2a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.tese.out @@ -0,0 +1,365 @@ +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 +ERROR: 0:10: 'initializer list' : wrong number of matrix columns: temp 2X2 matrix of float +ERROR: 0:25: 'initializer list' : wrong number of structure members +ERROR: 0:27: '=' : cannot convert from ' const bool' to ' global int' +ERROR: 0:28: 'constructor' : cannot convert parameter 2 from ' const float' to ' temp 4-component vector of float' +ERROR: 0:29: 'constructor' : cannot convert parameter 2 from ' const 2X2 matrix of float' to ' const 4-component vector of float' +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:70: 'initializer list' : wrong number of structure members +ERROR: 13 compilation errors. No code generated. + + +Shader version: 420 +input primitive = none +vertex spacing = none +triangle order = none +ERROR: node is still EOpNull! +0:4 Sequence +0:4 move second child to first child ( temp 2X2 matrix of float) +0:4 'b' ( global 2X2 matrix of float) +0:4 Constant: +0:4 1.000000 +0:4 0.000000 +0:4 0.000000 +0:4 1.000000 +0:15 Sequence +0:15 move second child to first child ( temp structure{ global float a, global int b}) +0:15 'e' ( global structure{ global float a, global int b}) +0:15 Constant: +0:15 1.200000 +0:15 2 (const int) +0:20 Sequence +0:20 move second child to first child ( temp structure{ global float a, global int b}) +0:20 'e2' ( global structure{ global float a, global int b}) +0:20 Constant: +0:20 1.000000 +0:20 3 (const int) +0:42 Sequence +0:42 move second child to first child ( temp 5-element array of float) +0:42 'b5' ( global 5-element array of float) +0:42 Constant: +0:42 3.400000 +0:42 4.200000 +0:42 5.000000 +0:42 5.200000 +0:42 1.100000 +0:55 Sequence +0:55 move second child to first child ( temp structure{ global int f}) +0:55 'single1' ( global structure{ global int f}) +0:55 Constant: +0:55 10 (const int) +0:58 Sequence +0:58 move second child to first child ( temp structure{ global 2-component vector of uint v}) +0:58 'single2' ( global structure{ global 2-component vector of uint v}) +0:58 Constant: +0:58 1 (const uint) +0:58 2 (const uint) +0:61 Sequence +0:61 move second child to first child ( temp structure{ global structure{ global int f} s1}) +0:61 'single3' ( global structure{ global structure{ global int f} s1}) +0:61 Constant: +0:61 3 (const int) +0:64 Sequence +0:64 move second child to first child ( temp structure{ global structure{ global 2-component vector of uint v} s1}) +0:64 'single4' ( global structure{ global structure{ global 2-component vector of uint v} s1}) +0:64 Constant: +0:64 4 (const uint) +0:64 5 (const uint) +0:79 Sequence +0:79 move second child to first child ( temp 3-component vector of float) +0:79 'av3' ( global 3-component vector of float) +0:79 Construct vec3 ( global 3-component vector of float) +0:79 'vc1' ( global float) +0:79 'vc2' ( global float) +0:79 'vc3' ( global float) +0:80 Sequence +0:80 move second child to first child ( temp 3-component vector of float) +0:80 'bv3' ( global 3-component vector of float) +0:80 Construct vec3 ( temp 3-component vector of float) +0:80 'vc1' ( global float) +0:80 'vc2' ( global float) +0:80 'vc3' ( global float) +0:82 Function Definition: main( ( global void) +0:82 Function Parameters: +0:84 Sequence +0:84 MemoryBarrier ( global void) +0:86 Test condition and select ( temp void) +0:86 Condition +0:86 Compare Equal ( temp bool) +0:86 Constant: +0:86 1 (const uint) +0:86 2 (const uint) +0:86 3.000000 +0:86 4.000000 +0:86 0.000000 +0:86 0.000000 +0:86 0.000000 +0:86 4.000000 +0:86 0.000000 +0:86 5.000000 +0:86 6.000000 +0:86 0.000000 +0:86 0.000000 +0:86 0.000000 +0:86 6.000000 +0:86 0.000000 +0:86 'curlybad1' ( temp structure{ global 2-component vector of uint uv2, global 2-element array of structure{ global float f, global 2X3 matrix of float m23} s}) +0:86 true case is null +0:88 Test condition and select ( temp void) +0:88 Condition +0:88 Constant: +0:88 true (const bool) +0:88 true case is null +0:? Linker Objects +0:? 'a' ( const 2X2 matrix of float) +0:? 1.000000 +0:? 0.000000 +0:? 0.000000 +0:? 1.000000 +0:? 'b' ( global 2X2 matrix of float) +0:? 'c' ( const 2X2 matrix of float) +0:? 1.000000 +0:? 0.000000 +0:? 0.000000 +0:? 1.000000 +0:? 'a2' ( global 2-element array of float) +0:? 'b2' ( global 2-component vector of float) +0:? 'c2' ( global 3X3 matrix of float) +0:? 'd' ( global 2X2 matrix of float) +0:? 'e' ( global structure{ global float a, global int b}) +0:? 'e2' ( global structure{ global float a, global int b}) +0:? 'e3' ( global structure{ global float a, global int b}) +0:? 'a3' ( global int) +0:? 'b3' ( global 2-element array of 4-component vector of float) +0:? 'b4' ( global 2-element array of 4-component vector of float) +0:? 'c3' ( global 4X2 matrix of float) +0:? 'd2' ( global implicitly-sized array of structure{ global float s, global float t}) +0:? 'b5' ( global 5-element array of float) +0:? 'single1' ( global structure{ global int f}) +0:? 'single2' ( global structure{ global 2-component vector of uint v}) +0:? 'single3' ( global structure{ global structure{ global int f} s1}) +0:? 'single4' ( global structure{ global structure{ global 2-component vector of uint v} s1}) +0:? 'constructed' ( const structure{ global 2-component vector of uint uv2, global 2-element array of structure{ global float f, global 2X3 matrix of float m23} s}) +0:? 1 (const uint) +0:? 2 (const uint) +0:? 3.000000 +0:? 4.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 4.000000 +0:? 0.000000 +0:? 5.000000 +0:? 6.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 6.000000 +0:? 0.000000 +0:? 'curlybad1' ( temp structure{ global 2-component vector of uint uv2, global 2-element array of structure{ global float f, global 2X3 matrix of float m23} s}) +0:? 'curlyInit' ( const structure{ global 2-component vector of uint uv2, global 2-element array of structure{ global float f, global 2X3 matrix of float m23} s}) +0:? 1 (const uint) +0:? 2 (const uint) +0:? 3.000000 +0:? 4.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 4.000000 +0:? 0.000000 +0:? 5.000000 +0:? 6.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 6.000000 +0:? 0.000000 +0:? 'vc1' ( global float) +0:? 'vc2' ( global float) +0:? 'vc3' ( global float) +0:? 'av3' ( global 3-component vector of float) +0:? 'bv3' ( global 3-component vector of float) + + +Linked tessellation evaluation stage: + +ERROR: Linking tessellation evaluation stage: At least one shader must specify an input layout primitive + +Shader version: 420 +input primitive = none +vertex spacing = equal_spacing +triangle order = ccw +ERROR: node is still EOpNull! +0:4 Sequence +0:4 move second child to first child ( temp 2X2 matrix of float) +0:4 'b' ( global 2X2 matrix of float) +0:4 Constant: +0:4 1.000000 +0:4 0.000000 +0:4 0.000000 +0:4 1.000000 +0:15 Sequence +0:15 move second child to first child ( temp structure{ global float a, global int b}) +0:15 'e' ( global structure{ global float a, global int b}) +0:15 Constant: +0:15 1.200000 +0:15 2 (const int) +0:20 Sequence +0:20 move second child to first child ( temp structure{ global float a, global int b}) +0:20 'e2' ( global structure{ global float a, global int b}) +0:20 Constant: +0:20 1.000000 +0:20 3 (const int) +0:42 Sequence +0:42 move second child to first child ( temp 5-element array of float) +0:42 'b5' ( global 5-element array of float) +0:42 Constant: +0:42 3.400000 +0:42 4.200000 +0:42 5.000000 +0:42 5.200000 +0:42 1.100000 +0:55 Sequence +0:55 move second child to first child ( temp structure{ global int f}) +0:55 'single1' ( global structure{ global int f}) +0:55 Constant: +0:55 10 (const int) +0:58 Sequence +0:58 move second child to first child ( temp structure{ global 2-component vector of uint v}) +0:58 'single2' ( global structure{ global 2-component vector of uint v}) +0:58 Constant: +0:58 1 (const uint) +0:58 2 (const uint) +0:61 Sequence +0:61 move second child to first child ( temp structure{ global structure{ global int f} s1}) +0:61 'single3' ( global structure{ global structure{ global int f} s1}) +0:61 Constant: +0:61 3 (const int) +0:64 Sequence +0:64 move second child to first child ( temp structure{ global structure{ global 2-component vector of uint v} s1}) +0:64 'single4' ( global structure{ global structure{ global 2-component vector of uint v} s1}) +0:64 Constant: +0:64 4 (const uint) +0:64 5 (const uint) +0:79 Sequence +0:79 move second child to first child ( temp 3-component vector of float) +0:79 'av3' ( global 3-component vector of float) +0:79 Construct vec3 ( global 3-component vector of float) +0:79 'vc1' ( global float) +0:79 'vc2' ( global float) +0:79 'vc3' ( global float) +0:80 Sequence +0:80 move second child to first child ( temp 3-component vector of float) +0:80 'bv3' ( global 3-component vector of float) +0:80 Construct vec3 ( temp 3-component vector of float) +0:80 'vc1' ( global float) +0:80 'vc2' ( global float) +0:80 'vc3' ( global float) +0:82 Function Definition: main( ( global void) +0:82 Function Parameters: +0:84 Sequence +0:84 MemoryBarrier ( global void) +0:86 Test condition and select ( temp void) +0:86 Condition +0:86 Compare Equal ( temp bool) +0:86 Constant: +0:86 1 (const uint) +0:86 2 (const uint) +0:86 3.000000 +0:86 4.000000 +0:86 0.000000 +0:86 0.000000 +0:86 0.000000 +0:86 4.000000 +0:86 0.000000 +0:86 5.000000 +0:86 6.000000 +0:86 0.000000 +0:86 0.000000 +0:86 0.000000 +0:86 6.000000 +0:86 0.000000 +0:86 'curlybad1' ( temp structure{ global 2-component vector of uint uv2, global 2-element array of structure{ global float f, global 2X3 matrix of float m23} s}) +0:86 true case is null +0:88 Test condition and select ( temp void) +0:88 Condition +0:88 Constant: +0:88 true (const bool) +0:88 true case is null +0:? Linker Objects +0:? 'a' ( const 2X2 matrix of float) +0:? 1.000000 +0:? 0.000000 +0:? 0.000000 +0:? 1.000000 +0:? 'b' ( global 2X2 matrix of float) +0:? 'c' ( const 2X2 matrix of float) +0:? 1.000000 +0:? 0.000000 +0:? 0.000000 +0:? 1.000000 +0:? 'a2' ( global 2-element array of float) +0:? 'b2' ( global 2-component vector of float) +0:? 'c2' ( global 3X3 matrix of float) +0:? 'd' ( global 2X2 matrix of float) +0:? 'e' ( global structure{ global float a, global int b}) +0:? 'e2' ( global structure{ global float a, global int b}) +0:? 'e3' ( global structure{ global float a, global int b}) +0:? 'a3' ( global int) +0:? 'b3' ( global 2-element array of 4-component vector of float) +0:? 'b4' ( global 2-element array of 4-component vector of float) +0:? 'c3' ( global 4X2 matrix of float) +0:? 'd2' ( global 1-element array of structure{ global float s, global float t}) +0:? 'b5' ( global 5-element array of float) +0:? 'single1' ( global structure{ global int f}) +0:? 'single2' ( global structure{ global 2-component vector of uint v}) +0:? 'single3' ( global structure{ global structure{ global int f} s1}) +0:? 'single4' ( global structure{ global structure{ global 2-component vector of uint v} s1}) +0:? 'constructed' ( const structure{ global 2-component vector of uint uv2, global 2-element array of structure{ global float f, global 2X3 matrix of float m23} s}) +0:? 1 (const uint) +0:? 2 (const uint) +0:? 3.000000 +0:? 4.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 4.000000 +0:? 0.000000 +0:? 5.000000 +0:? 6.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 6.000000 +0:? 0.000000 +0:? 'curlybad1' ( temp structure{ global 2-component vector of uint uv2, global 2-element array of structure{ global float f, global 2X3 matrix of float m23} s}) +0:? 'curlyInit' ( const structure{ global 2-component vector of uint uv2, global 2-element array of structure{ global float f, global 2X3 matrix of float m23} s}) +0:? 1 (const uint) +0:? 2 (const uint) +0:? 3.000000 +0:? 4.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 4.000000 +0:? 0.000000 +0:? 5.000000 +0:? 6.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 6.000000 +0:? 0.000000 +0:? 'vc1' ( global float) +0:? 'vc2' ( global float) +0:? 'vc3' ( global float) +0:? 'av3' ( global 3-component vector of float) +0:? 'bv3' ( global 3-component vector of float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.vert.out new file mode 100644 index 0000000..8fb8546 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.vert.out @@ -0,0 +1,391 @@ +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 +ERROR: 0:7: '' : vertex input cannot be further qualified +ERROR: 0:11: '' : can only have one interpolation qualifier (flat, smooth, noperspective, __explicitInterpAMD) +ERROR: 0:12: '' : can only have one auxiliary qualifier (centroid, patch, and sample) +ERROR: 0:13: 'uniform' : too many storage qualifiers +ERROR: 0:18: '=' : global const initializers must be constant ' const int' +ERROR: 0:20: 'const' : no qualifiers allowed for function return +ERROR: 0:27: '' : array size must be a constant integer expression +ERROR: 0:38: 'j' : undeclared identifier +ERROR: 0:38: '=' : cannot convert from ' temp float' to ' temp int' +ERROR: 0:39: 'k' : undeclared identifier +ERROR: 0:39: '=' : cannot convert from ' temp float' to ' temp int' +ERROR: 0:40: 'j' : undeclared identifier +ERROR: 0:40: '=' : cannot convert from ' temp float' to ' temp int' +ERROR: 0:44: 'jj' : undeclared identifier +ERROR: 0:44: '=' : cannot convert from ' temp float' to ' temp int' +ERROR: 0:54: 'y' : vector swizzle selection out of range +ERROR: 0:62: 'xxxxx' : vector swizzle too long +ERROR: 0:63: 'xxy' : vector swizzle selection out of range +ERROR: 0:66: 'binding' : cannot declare a default, include a type or full declaration +ERROR: 0:69: 'location/component/index' : cannot declare a default, use a full declaration +ERROR: 0:70: 'input block' : not supported in this stage: vertex +ERROR: 0:70: 'binding' : requires uniform or buffer storage qualifier +ERROR: 0:71: 'binding' : binding is too large +ERROR: 0:74: 'binding' : sampler binding not less than gl_MaxCombinedTextureImageUnits +ERROR: 0:76: 'binding' : sampler binding not less than gl_MaxCombinedTextureImageUnits (using array) +ERROR: 0:85: 'patch' : not supported in this stage: vertex +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: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 +ERROR: 0:122: '' : memory qualifiers cannot be used on this type +ERROR: 0:123: '' : memory qualifiers cannot be used on this type +ERROR: 0:135: 'volatile' : argument cannot drop memory qualifier when passed to formal parameter +ERROR: 0:139: 'rg8i' : does not apply to unsigned integer images +ERROR: 0:140: 'rgba32i' : does not apply to floating point images +ERROR: 0:141: 'rgba32f' : does not apply to unsigned integer images +ERROR: 0:142: 'r8_snorm' : does not apply to signed integer images +ERROR: 0:143: 'rgba32ui' : does not apply to signed integer images +ERROR: 0:144: 'r8ui' : does not apply to signed integer images +ERROR: 0:147: 'offset on block member' : not supported for this version or the enabled extensions +ERROR: 0:147: 'offset/align' : can only be used with std140 or std430 layout packing +ERROR: 0:157: 'textureQueryLevels' : no matching overloaded function found +ERROR: 0:157: 'assign' : cannot convert from ' const float' to ' temp int' +ERROR: 0:158: 'textureQueryLevels' : no matching overloaded function found +ERROR: 0:158: 'assign' : cannot convert from ' const float' to ' temp int' +WARNING: 0:161: '[]' : assuming array size of one for compile-time checking of binding numbers for implicitly-sized array +ERROR: 51 compilation errors. No code generated. + + +Shader version: 420 +ERROR: node is still EOpNull! +0:20 Function Definition: foo( ( const int) +0:20 Function Parameters: +0:? Sequence +0:23 Sequence +0:23 move second child to first child ( temp int) +0:23 'b' ( const (read only) int) +0:23 'anonconst' ( global int) +0:25 Sequence +0:25 move second child to first child ( temp int) +0:25 'd' ( const (read only) int) +0:25 'b' ( const (read only) int) +0:29 Branch: Return with expression +0:29 'b' ( const (read only) int) +0:32 Function Definition: main( ( global void) +0:32 Function Parameters: +0:? Sequence +0:35 Test condition and select ( temp void) +0:35 Condition +0:35 Compare Equal ( temp bool) +0:35 'i' ( temp int) +0:35 Constant: +0:35 3 (const int) +0:35 true case +0:36 Sequence +0:36 move second child to first child ( temp int) +0:36 'j' ( temp int) +0:36 'i' ( temp int) +0:42 Loop with condition tested first +0:42 Loop Condition +0:42 Constant: +0:42 true (const bool) +0:42 No loop body +0:50 Function Definition: bar(vf4; ( global void) +0:50 Function Parameters: +0:50 'v' ( volatile in 4-component vector of float) +0:? Sequence +0:53 's' ( temp int) +0:54 's' ( temp int) +0:55 Test condition and select ( temp void) +0:55 Condition +0:55 Compare Equal ( temp bool) +0:55 direct index ( temp float) +0:55 direct index ( temp 4-component vector of float) +0:55 'bad' ( in 10-element array of 4-component vector of float) +0:55 Constant: +0:55 0 (const int) +0:55 Constant: +0:55 0 (const int) +0:55 Constant: +0:55 4.200000 +0:55 true case is null +0:57 Test condition and select ( temp void) +0:57 Condition +0:57 Constant: +0:57 true (const bool) +0:57 true case +0:58 move second child to first child ( temp 4-component vector of float) +0:58 'badorder3' ( flat out 4-component vector of float) +0:58 direct index ( temp 4-component vector of float) +0:58 'bad' ( in 10-element array of 4-component vector of float) +0:58 Constant: +0:58 0 (const int) +0:61 Sequence +0:61 move second child to first child ( temp 3-component vector of float) +0:61 'smeared' ( temp 3-component vector of float) +0:61 Construct vec3 ( temp 3-component vector of float) +0:61 'f' ( temp float) +0:62 Construct vec4 ( temp 4-component vector of float) +0:62 'f' ( temp float) +0:63 Construct vec2 ( temp 2-component vector of float) +0:63 'f' ( temp float) +0:88 Function Definition: bar23444( ( global void) +0:88 Function Parameters: +0:? Sequence +0:91 Sequence +0:91 move second child to first child ( temp float) +0:91 'a1' ( temp float) +0:91 direct index ( temp float) +0:91 direct index ( temp 3-component vector of float) +0:91 'm43' ( temp 4X3 matrix of float) +0:91 Constant: +0:91 3 (const int) +0:91 Constant: +0:91 1 (const int) +0:93 Sequence +0:93 move second child to first child ( temp int) +0:93 'a2' ( temp int) +0:93 Constant: +0:93 4 (const int) +0:94 add second child into first child ( temp int) +0:94 'a2' ( temp int) +0:94 Constant: +0:94 3 (const int) +0:95 add second child into first child ( temp int) +0:95 'a2' ( temp int) +0:95 Constant: +0:95 3 (const int) +0:96 Sequence +0:96 move second child to first child ( temp float) +0:96 'b' ( const (read only) float) +0:96 component-wise multiply ( temp float) +0:96 Constant: +0:96 2.000000 +0:96 'a1' ( temp float) +0:97 Sequence +0:97 move second child to first child ( temp int) +0:97 'a' ( temp int) +0:97 Constant: +0:97 -1 (const int) +0:109 Function Definition: qux( ( global void) +0:109 Function Parameters: +0:111 Sequence +0:111 Sequence +0:111 move second child to first child ( temp int) +0:111 'i' ( temp int) +0:111 aoeu: direct index for structure (layout( column_major shared) uniform int) +0:111 'anon@0' (layout( binding=7 column_major shared) uniform block{layout( column_major shared) uniform int aoeu}) +0:111 Constant: +0:111 0 (const uint) +0:112 imageAtomicCompSwap ( global int) +0:112 'iimg2D' (layout( r32i) uniform iimage2D) +0:112 Construct ivec2 ( temp 2-component vector of int) +0:112 'i' ( temp int) +0:112 'i' ( temp int) +0:112 'i' ( temp int) +0:112 'i' ( temp int) +0:113 imageAtomicAdd ( global uint) +0:113 'uimg2D' (layout( r32ui) uniform uimage2D) +0:113 Construct ivec2 ( temp 2-component vector of int) +0:113 'i' ( temp int) +0:113 'i' ( temp int) +0:113 Convert int to uint ( temp uint) +0:113 'i' ( temp int) +0:114 imageAtomicMin ( global int) +0:114 'iimg2Drgba' (layout( rgba32i) uniform iimage2D) +0:114 Construct ivec2 ( temp 2-component vector of int) +0:114 'i' ( temp int) +0:114 'i' ( temp int) +0:114 'i' ( temp int) +0:115 Constant: +0:115 0.000000 +0:116 Sequence +0:116 move second child to first child ( temp 4-component vector of int) +0:116 'pos' ( temp 4-component vector of int) +0:116 imageLoad ( global 4-component vector of int) +0:116 'iimg2D' (layout( r32i) uniform iimage2D) +0:116 Construct ivec2 ( temp 2-component vector of int) +0:116 'i' ( temp int) +0:116 'i' ( temp int) +0:117 Sequence +0:117 move second child to first child ( temp 4-component vector of float) +0:117 'col' ( temp 4-component vector of float) +0:117 imageLoad ( global 4-component vector of float) +0:117 'img2DMS' ( uniform image2DMS) +0:117 Construct ivec2 ( temp 2-component vector of int) +0:117 'i' ( temp int) +0:117 'i' ( temp int) +0:117 'i' ( temp int) +0:118 imageStore ( global void) +0:118 'img2DMSWO' ( writeonly uniform image2DMS) +0:118 Construct ivec2 ( temp 2-component vector of int) +0:118 'i' ( temp int) +0:118 'i' ( temp int) +0:118 'i' ( temp int) +0:118 Constant: +0:118 0.000000 +0:118 0.000000 +0:118 0.000000 +0:118 0.000000 +0:119 imageLoad ( global 4-component vector of float) +0:119 'img2DMSWO' ( writeonly uniform image2DMS) +0:119 Construct ivec2 ( temp 2-component vector of int) +0:119 'i' ( temp int) +0:119 'i' ( temp int) +0:119 'i' ( temp int) +0:125 Function Definition: passr(iI21; ( global void) +0:125 Function Parameters: +0:125 'image' ( coherent readonly in iimage2D) +0:132 Function Definition: passrc( ( global void) +0:132 Function Parameters: +0:134 Sequence +0:134 Function Call: passr(iI21; ( global void) +0:134 'qualim1' (layout( r32i) coherent readonly uniform iimage2D) +0:135 Function Call: passr(iI21; ( global void) +0:135 'qualim2' (layout( r32i) coherent volatile readonly uniform iimage2D) +0:136 Function Call: passr(iI21; ( global void) +0:136 'iimg2D' (layout( r32i) uniform iimage2D) +0:153 Function Definition: qlod( ( global void) +0:153 Function Parameters: +0:? Sequence +0:157 'levels' ( temp int) +0:158 'levels' ( temp int) +0:? Linker Objects +0:? 'v2' ( smooth out 2-component vector of float) +0:? 'bad' ( in 10-element array of 4-component vector of float) +0:? 'badorder' ( in 4-component vector of float) +0:? 'badorder2' ( invariant smooth out 4-component vector of float) +0:? 'badorder4' ( centroid in 4-component vector of float) +0:? 'badorder3' ( flat out 4-component vector of float) +0:? 'rep' ( smooth flat out 4-component vector of float) +0:? 'rep2' ( centroid smooth sample out 4-component vector of float) +0:? 'rep3' ( in 4-component vector of float) +0:? 'anonconst' ( global int) +0:? 'aconst' ( const int) +0:? 5 (const int) +0:? 'a' ( const int) +0:? 5 (const int) +0:? 'b' ( temp int) +0:? 'cx' ( const float) +0:? 4.200000 +0:? 'dx' ( const float) +0:? 4.200000 +0:? 'boundInst' (layout( binding=3 column_major shared) uniform block{layout( column_major shared) uniform int aoeu}) +0:? 'anon@0' (layout( binding=7 column_major shared) uniform block{layout( column_major shared) uniform int aoeu}) +0:? 'anon@1' (layout( binding=1) in block{ in int aoeua}) +0:? 'anon@2' (layout( column_major shared) uniform block{layout( column_major shared) uniform int aooeu}) +0:? 'sampb1' (layout( binding=4) uniform sampler2D) +0:? 'sampb2' (layout( binding=5) uniform 10-element array of sampler2D) +0:? 'sampb3' (layout( binding=80) uniform sampler2D) +0:? 'sampb4' (layout( binding=31) uniform sampler2D) +0:? 'sampb5' (layout( binding=79) uniform 2-element array of sampler2D) +0:? 'anon@3' ( out block{ out 4-element array of float ClipDistance gl_ClipDistance, }) +0:? 'patchIn' ( patch in 4-component vector of float) +0:? 'patchOut' ( smooth patch out 4-component vector of float) +0:? 'comma0' ( temp int) +0:? 'comma1' ( global 1-element array of int) +0:? 'iimg2D' (layout( r32i) uniform iimage2D) +0:? 'iimg2Drgba' (layout( rgba32i) uniform iimage2D) +0:? 'img2Drgba' (layout( rgba32f) uniform image2D) +0:? 'uimg2D' (layout( r32ui) uniform uimage2D) +0:? 'img2DMS' ( uniform image2DMS) +0:? 'img2DMSWO' ( writeonly uniform image2DMS) +0:? 'vol' ( volatile temp float) +0:? 'vol2' ( readonly temp int) +0:? 'qualim1' (layout( r32i) coherent readonly uniform iimage2D) +0:? 'qualim2' (layout( r32i) coherent volatile readonly uniform iimage2D) +0:? 'i1bad' (layout( rg8i) uniform uimage2D) +0:? 'i2bad' (layout( rgba32i) uniform image2D) +0:? 'i3bad' (layout( rgba32f) uniform uimage2D) +0:? 'i4bad' (layout( r8_snorm) uniform iimage2D) +0:? 'i5bad' (layout( rgba32ui) uniform iimage2D) +0:? 'i6bad' (layout( r8ui) uniform iimage2D) +0:? 'offcheckI' (layout( column_major shared) uniform block{layout( column_major shared offset=16) uniform int foo}) +0:? 'samp1D' ( uniform sampler1D) +0:? 'samp1Ds' ( uniform sampler1DShadow) +0:? 'badArray' (layout( binding=0) writeonly uniform implicitly-sized array of image1D) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + + +Linked vertex stage: + + +Shader version: 420 +ERROR: node is still EOpNull! +0:32 Function Definition: main( ( global void) +0:32 Function Parameters: +0:? Sequence +0:35 Test condition and select ( temp void) +0:35 Condition +0:35 Compare Equal ( temp bool) +0:35 'i' ( temp int) +0:35 Constant: +0:35 3 (const int) +0:35 true case +0:36 Sequence +0:36 move second child to first child ( temp int) +0:36 'j' ( temp int) +0:36 'i' ( temp int) +0:42 Loop with condition tested first +0:42 Loop Condition +0:42 Constant: +0:42 true (const bool) +0:42 No loop body +0:? Linker Objects +0:? 'v2' ( smooth out 2-component vector of float) +0:? 'bad' ( in 10-element array of 4-component vector of float) +0:? 'badorder' ( in 4-component vector of float) +0:? 'badorder2' ( invariant smooth out 4-component vector of float) +0:? 'badorder4' ( centroid in 4-component vector of float) +0:? 'badorder3' ( flat out 4-component vector of float) +0:? 'rep' ( smooth flat out 4-component vector of float) +0:? 'rep2' ( centroid smooth sample out 4-component vector of float) +0:? 'rep3' ( in 4-component vector of float) +0:? 'anonconst' ( global int) +0:? 'aconst' ( const int) +0:? 5 (const int) +0:? 'a' ( const int) +0:? 5 (const int) +0:? 'b' ( temp int) +0:? 'cx' ( const float) +0:? 4.200000 +0:? 'dx' ( const float) +0:? 4.200000 +0:? 'boundInst' (layout( binding=3 column_major shared) uniform block{layout( column_major shared) uniform int aoeu}) +0:? 'anon@0' (layout( binding=7 column_major shared) uniform block{layout( column_major shared) uniform int aoeu}) +0:? 'anon@1' (layout( binding=1) in block{ in int aoeua}) +0:? 'anon@2' (layout( column_major shared) uniform block{layout( column_major shared) uniform int aooeu}) +0:? 'sampb1' (layout( binding=4) uniform sampler2D) +0:? 'sampb2' (layout( binding=5) uniform 10-element array of sampler2D) +0:? 'sampb3' (layout( binding=80) uniform sampler2D) +0:? 'sampb4' (layout( binding=31) uniform sampler2D) +0:? 'sampb5' (layout( binding=79) uniform 2-element array of sampler2D) +0:? 'anon@3' ( out block{ out 4-element array of float ClipDistance gl_ClipDistance, }) +0:? 'patchIn' ( patch in 4-component vector of float) +0:? 'patchOut' ( smooth patch out 4-component vector of float) +0:? 'comma0' ( temp int) +0:? 'comma1' ( global 1-element array of int) +0:? 'iimg2D' (layout( r32i) uniform iimage2D) +0:? 'iimg2Drgba' (layout( rgba32i) uniform iimage2D) +0:? 'img2Drgba' (layout( rgba32f) uniform image2D) +0:? 'uimg2D' (layout( r32ui) uniform uimage2D) +0:? 'img2DMS' ( uniform image2DMS) +0:? 'img2DMSWO' ( writeonly uniform image2DMS) +0:? 'vol' ( volatile temp float) +0:? 'vol2' ( readonly temp int) +0:? 'qualim1' (layout( r32i) coherent readonly uniform iimage2D) +0:? 'qualim2' (layout( r32i) coherent volatile readonly uniform iimage2D) +0:? 'i1bad' (layout( rg8i) uniform uimage2D) +0:? 'i2bad' (layout( rgba32i) uniform image2D) +0:? 'i3bad' (layout( rgba32f) uniform uimage2D) +0:? 'i4bad' (layout( r8_snorm) uniform iimage2D) +0:? 'i5bad' (layout( rgba32ui) uniform iimage2D) +0:? 'i6bad' (layout( r8ui) uniform iimage2D) +0:? 'offcheckI' (layout( column_major shared) uniform block{layout( column_major shared offset=16) uniform int foo}) +0:? 'samp1D' ( uniform sampler1D) +0:? 'samp1Ds' ( uniform sampler1DShadow) +0:? 'badArray' (layout( binding=0) writeonly uniform 1-element array of image1D) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + 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 new file mode 100644 index 0000000..3c3b810 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420_size_gl_in.geom.out @@ -0,0 +1,57 @@ +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. + + +Shader version: 420 +invocations = -1 +max_vertices = -1 +input primitive = triangles +output primitive = none +ERROR: node is still EOpNull! +0:11 Function Definition: foo( ( global void) +0:11 Function Parameters: +0:13 Sequence +0:13 Constant: +0:13 3 (const int) +0:14 gl_Position: direct index for structure ( in 4-component vector of float Position) +0:14 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:14 'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:14 Constant: +0:14 1 (const int) +0:14 Constant: +0:14 0 (const int) +0:15 Constant: +0:15 3 (const int) +0:16 gl_Position: direct index for structure ( in 4-component vector of float Position) +0:16 indirect index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:16 'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) +0:16 'i' ( global int) +0:16 Constant: +0:16 0 (const int) +0:? Linker Objects +0:? 'i' ( global int) +0:? 'colorun' ( in 3-element array of 4-component vector of float) +0:? 'color3' ( in 3-element array of 4-component vector of float) +0:? 'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in implicitly-sized array of float ClipDistance gl_ClipDistance}) + + +Linked geometry stage: + +ERROR: Linking geometry stage: Missing entry point: Each stage requires one entry point +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: 420 +invocations = 1 +max_vertices = -1 +input primitive = triangles +output primitive = none +ERROR: node is still EOpNull! +0:? Linker Objects +0:? 'i' ( global int) +0:? 'colorun' ( in 3-element array of 4-component vector of float) +0:? 'color3' ( in 3-element array of 4-component vector of float) +0:? 'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 1-element array of float ClipDistance gl_ClipDistance}) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/430.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/430.comp.out new file mode 100644 index 0000000..91aaf78 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/430.comp.out @@ -0,0 +1,210 @@ +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 +ERROR: 0:43: 'location qualifier on input' : not supported in this stage: compute +ERROR: 0:44: 'in' : global storage input qualifier cannot be used in a compute shader +ERROR: 0:45: 'out' : global storage output qualifier cannot be used in a compute shader +ERROR: 0:48: 'shared' : cannot apply layout qualifiers to a shared variable +ERROR: 0:48: 'location' : can only apply to uniform, buffer, in, or out storage qualifiers +ERROR: 0:49: 'shared' : cannot initialize this type of qualifier +ERROR: 0:51: 'local_size' : can only apply to 'in' +ERROR: 0:51: 'local_size' : can only apply to 'in' +ERROR: 0:51: 'local_size' : can only apply to 'in' +ERROR: 0:65: 'assign' : l-value required "ro" (can't modify a readonly buffer) +ERROR: 0:77: '=' : cannot convert from ' temp double' to ' temp int' +ERROR: 0:81: 'input block' : not supported in this stage: compute +ERROR: 0:85: 'output block' : not supported in this stage: compute +ERROR: 16 compilation errors. No code generated. + + +Shader version: 430 +local_size = (2, 1, 4096) +ERROR: node is still EOpNull! +0:27 Function Definition: main( ( global void) +0:27 Function Parameters: +0:29 Sequence +0:29 Barrier ( global void) +0:30 MemoryBarrier ( global void) +0:31 MemoryBarrierAtomicCounter ( global void) +0:32 MemoryBarrierBuffer ( global void) +0:33 MemoryBarrierShared ( global void) +0:34 MemoryBarrierImage ( global void) +0:35 GroupMemoryBarrier ( global void) +0:36 move second child to first child ( temp int) +0:36 value: direct index for structure (layout( column_major shared) buffer int) +0:36 'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer implicitly-sized array of float values}) +0:36 Constant: +0:36 0 (const uint) +0:36 Convert float to int ( temp int) +0:36 indirect index (layout( column_major shared) temp float) +0:36 values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of float) +0:36 'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer implicitly-sized array of float values}) +0:36 Constant: +0:36 1 (const uint) +0:36 'gl_LocalInvocationIndex' ( in uint LocalInvocationIndex) +0:39 Test condition and select ( temp void) +0:39 Condition +0:39 Compare Greater Than ( temp bool) +0:39 'a' ( temp int) +0:39 Constant: +0:39 10 (const int) +0:39 true case +0:40 Barrier ( global void) +0:63 Function Definition: foo( ( global void) +0:63 Function Parameters: +0:65 Sequence +0:65 move second child to first child ( temp float) +0:65 direct index (layout( column_major shared) temp float) +0:65 values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of float) +0:65 'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer implicitly-sized array of float values}) +0:65 Constant: +0:65 1 (const int) +0:65 Constant: +0:65 2 (const int) +0:65 Constant: +0:65 4.700000 +0:66 array length ( temp int) +0:66 values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of float) +0:66 'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer implicitly-sized array of float values}) +0:66 Constant: +0:66 1 (const int) +0:67 Barrier ( global void) +0:72 Function Definition: fooaoeu( ( global void) +0:72 Function Parameters: +0:73 Sequence +0:73 Sequence +0:73 move second child to first child ( temp 2-component vector of int) +0:73 'storePos' ( temp 2-component vector of int) +0:73 Convert uint to int ( temp 2-component vector of int) +0:73 vector swizzle ( temp 2-component vector of uint) +0:73 'gl_GlobalInvocationID' ( in 3-component vector of uint GlobalInvocationID) +0:73 Sequence +0:73 Constant: +0:73 0 (const int) +0:73 Constant: +0:73 1 (const int) +0:74 Sequence +0:74 move second child to first child ( temp double) +0:74 'localCoef' ( temp double) +0:74 Convert float to double ( temp double) +0:74 length ( global float) +0:74 divide ( temp 2-component vector of float) +0:74 Convert int to float ( temp 2-component vector of float) +0:74 subtract ( temp 2-component vector of int) +0:74 Convert uint to int ( temp 2-component vector of int) +0:74 vector swizzle ( temp 2-component vector of uint) +0:74 'gl_LocalInvocationID' ( in 3-component vector of uint LocalInvocationID) +0:74 Sequence +0:74 Constant: +0:74 0 (const int) +0:74 Constant: +0:74 1 (const int) +0:74 Constant: +0:74 8 (const int) +0:74 Constant: +0:74 8.000000 +0:75 Sequence +0:75 move second child to first child ( temp 4-component vector of double) +0:75 'aa' ( temp 4-component vector of double) +0:75 Constant: +0:75 0.400000 +0:75 0.200000 +0:75 0.300000 +0:75 0.400000 +0:76 Sequence +0:76 move second child to first child ( temp double) +0:76 'globalCoef' ( temp double) +0:76 Constant: +0:76 1.000000 +0:78 Sequence +0:78 move second child to first child ( temp double) +0:78 'di' ( temp double) +0:78 Convert int to double ( temp double) +0:78 'i' ( temp int) +0:? Linker Objects +0:? 'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize) +0:? 2 (const uint) +0:? 1 (const uint) +0:? 4096 (const uint) +0:? 'total' ( const int) +0:? 66592 (const int) +0:? 'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer implicitly-sized array of float values}) +0:? 'invalid' (layout( column_major shared) buffer block{layout( column_major shared) buffer implicitly-sized array of float values, layout( column_major shared) buffer int value}) +0:? 'v3' (layout( location=2) in 3-component vector of float) +0:? 'f' ( in float) +0:? 'fo' ( out float) +0:? 's' ( shared 4-component vector of float) +0:? 'sl' (layout( location=2) shared 4-component vector of float) +0:? 'fs' ( shared float) +0:? 'arrX' ( global 2-element array of int) +0:? 'arrY' ( global 1-element array of int) +0:? 'arrZ' ( global 4096-element array of int) +0:? 'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer implicitly-sized array of float values}) +0:? 'roll' ( uniform double) +0:? 'destTex' ( writeonly uniform image2D) +0:? 'inbi' ( in block{ in int a}) +0:? 'outbi' ( out block{ out int a}) + + +Linked compute stage: + + +Shader version: 430 +local_size = (2, 1, 4096) +ERROR: node is still EOpNull! +0:27 Function Definition: main( ( global void) +0:27 Function Parameters: +0:29 Sequence +0:29 Barrier ( global void) +0:30 MemoryBarrier ( global void) +0:31 MemoryBarrierAtomicCounter ( global void) +0:32 MemoryBarrierBuffer ( global void) +0:33 MemoryBarrierShared ( global void) +0:34 MemoryBarrierImage ( global void) +0:35 GroupMemoryBarrier ( global void) +0:36 move second child to first child ( temp int) +0:36 value: direct index for structure (layout( column_major shared) buffer int) +0:36 'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer implicitly-sized array of float values}) +0:36 Constant: +0:36 0 (const uint) +0:36 Convert float to int ( temp int) +0:36 indirect index (layout( column_major shared) temp float) +0:36 values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of float) +0:36 'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer implicitly-sized array of float values}) +0:36 Constant: +0:36 1 (const uint) +0:36 'gl_LocalInvocationIndex' ( in uint LocalInvocationIndex) +0:39 Test condition and select ( temp void) +0:39 Condition +0:39 Compare Greater Than ( temp bool) +0:39 'a' ( temp int) +0:39 Constant: +0:39 10 (const int) +0:39 true case +0:40 Barrier ( global void) +0:? Linker Objects +0:? 'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize) +0:? 2 (const uint) +0:? 1 (const uint) +0:? 4096 (const uint) +0:? 'total' ( const int) +0:? 66592 (const int) +0:? 'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer implicitly-sized array of float values}) +0:? 'invalid' (layout( column_major shared) buffer block{layout( column_major shared) buffer implicitly-sized array of float values, layout( column_major shared) buffer int value}) +0:? 'v3' (layout( location=2) in 3-component vector of float) +0:? 'f' ( in float) +0:? 'fo' ( out float) +0:? 's' ( shared 4-component vector of float) +0:? 'sl' (layout( location=2) shared 4-component vector of float) +0:? 'fs' ( shared float) +0:? 'arrX' ( global 2-element array of int) +0:? 'arrY' ( global 1-element array of int) +0:? 'arrZ' ( global 4096-element array of int) +0:? 'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer implicitly-sized array of float values}) +0:? 'roll' ( uniform double) +0:? 'destTex' ( writeonly uniform image2D) +0:? 'inbi' ( in block{ in int a}) +0:? 'outbi' ( out block{ out int a}) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/430.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/430.vert.out new file mode 100644 index 0000000..a5898f2 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/430.vert.out @@ -0,0 +1,341 @@ +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 +ERROR: 0:8: 'location qualifier on in/out block' : not supported for this version or the enabled extensions +ERROR: 0:23: 'invariant' : can only apply to an output +ERROR: 0:21: 'g' : cannot use storage or interpolation qualifiers on structure members +ERROR: 0:22: 'h' : cannot use storage or interpolation qualifiers on structure members +ERROR: 0:23: 'i' : cannot use invariant qualifier on structure members +ERROR: 0:24: 'j' : cannot use memory qualifiers on structure members +ERROR: 0:25: 'm3' : cannot use layout qualifiers on structure members +ERROR: 0:28: '' : cannot use invariant qualifier on a function parameter +ERROR: 0:30: '' : cannot use layout qualifiers on a function parameter +ERROR: 0:31: '' : cannot use auxiliary or interpolation qualifiers on a function parameter +ERROR: 0:42: 'location' : overlapping use of location 53 +ERROR: 0:47: 'gl_ClipDistance array size' : must be less than or equal to gl_MaxClipDistances (8) +ERROR: 0:51: 'start' : undeclared identifier +ERROR: 0:51: '' : constant expression required +ERROR: 0:51: 'layout-id value' : scalar integer expression required +ERROR: 0:53: 'input block' : not supported in this stage: vertex +ERROR: 0:54: 'location on block member' : not supported for this version or the enabled extensions +ERROR: 0:57: 'input block' : not supported in this stage: vertex +ERROR: 0:58: 'location on block member' : not supported for this version or the enabled extensions +ERROR: 0:59: 'location on block member' : not supported for this version or the enabled extensions +ERROR: 0:62: 'uniform buffer-member align' : not supported for this version or the enabled extensions +ERROR: 0:64: 'uniform buffer-member align' : not supported for this version or the enabled extensions +ERROR: 0:65: 'uniform buffer-member align' : not supported for this version or the enabled extensions +ERROR: 0:65: 'offset on block member' : not supported for this version or the enabled extensions +ERROR: 0:66: 'offset on block member' : not supported for this version or the enabled extensions +ERROR: 0:64: 'align' : can only be used with std140 or std430 layout packing +ERROR: 0:65: 'offset/align' : can only be used with std140 or std430 layout packing +ERROR: 0:66: 'offset/align' : can only be used with std140 or std430 layout packing +ERROR: 0:71: 'offset on block member' : not supported for this version or the enabled extensions +ERROR: 0:74: 'gl_MaxTransformFeedbackBuffers' : required extension not requested: GL_ARB_enhanced_layouts +ERROR: 0:75: 'gl_MaxTransformFeedbackInterleavedComponents' : required extension not requested: GL_ARB_enhanced_layouts +ERROR: 0:78: 'transform feedback qualifier' : not supported for this version or the enabled extensions +ERROR: 0:81: 'transform feedback qualifier' : not supported for this version or the enabled extensions +ERROR: 0:81: 'transform feedback qualifier' : not supported for this version or the enabled extensions +ERROR: 0:83: 'transform feedback qualifier' : not supported for this version or the enabled extensions +ERROR: 0:83: 'transform feedback qualifier' : not supported for this version or the enabled extensions +ERROR: 0:83: 'transform feedback qualifier' : not supported for this version or the enabled extensions +ERROR: 0:84: 'transform feedback qualifier' : not supported for this version or the enabled extensions +ERROR: 0:84: 'transform feedback qualifier' : not supported for this version or the enabled extensions +ERROR: 0:86: 'transform feedback qualifier' : not supported for this version or the enabled extensions +ERROR: 0:86: 'transform feedback qualifier' : not supported for this version or the enabled extensions +ERROR: 0:86: 'transform feedback qualifier' : not supported for this version or the enabled extensions +ERROR: 0:92: 'transform feedback qualifier' : not supported for this version or the enabled extensions +ERROR: 0:93: 'transform feedback qualifier' : not supported for this version or the enabled extensions +ERROR: 0:93: 'transform feedback qualifier' : not supported for this version or the enabled extensions +ERROR: 0:93: 'transform feedback qualifier' : not supported for this version or the enabled extensions +ERROR: 0:117: 'input block' : not supported in this stage: vertex +ERROR: 0:123: 'input block' : not supported in this stage: vertex +ERROR: 0:146: 'shared' : not supported in this stage: vertex +ERROR: 0:150: 'barrier' : no matching overloaded function found +ERROR: 0:154: 'memoryBarrierShared' : no matching overloaded function found +ERROR: 0:156: 'groupMemoryBarrier' : no matching overloaded function found +ERROR: 0:159: 'buffer' : buffers can be declared only as blocks +ERROR: 0:168: 'textureSamples and imageSamples' : not supported for this version or the enabled extensions +ERROR: 0:169: 'textureSamples and imageSamples' : not supported for this version or the enabled extensions +ERROR: 0:170: 'textureSamples and imageSamples' : not supported for this version or the enabled extensions +ERROR: 0:171: 'textureSamples and imageSamples' : not supported for this version or the enabled extensions +ERROR: 0:221: 'textureQueryLevels' : no matching overloaded function found +ERROR: 0:221: 'assign' : cannot convert from ' const float' to ' temp int' +ERROR: 0:222: 'textureQueryLevels' : no matching overloaded function found +ERROR: 0:222: 'assign' : cannot convert from ' const float' to ' temp int' +ERROR: 64 compilation errors. No code generated. + + +Shader version: 430 +Requested GL_ARB_enhanced_layouts +Requested GL_ARB_shader_texture_image_samples +in xfb mode +ERROR: node is still EOpNull! +0:14 Function Definition: foo( ( global void) +0:14 Function Parameters: +0:16 Sequence +0:16 move second child to first child ( temp float) +0:16 direct index ( temp float ClipDistance) +0:16 gl_ClipDistance: direct index for structure ( out 17-element array of float ClipDistance) +0:16 'anon@0' ( out block{ out 17-element array of float ClipDistance gl_ClipDistance, }) +0:16 Constant: +0:16 2 (const uint) +0:16 Constant: +0:16 2 (const int) +0:16 Constant: +0:16 3.700000 +0:31 Function Definition: foo3(vf4;vf3;vf2;vf3; ( global void) +0:31 Function Parameters: +0:31 'v4' ( in 4-component vector of float) +0:31 'v3' ( volatile in 3-component vector of float) +0:31 'v2' ( in 2-component vector of float) +0:31 'cv3' ( in 3-component vector of float) +0:148 Function Definition: fooBarrier( ( global void) +0:148 Function Parameters: +0:150 Sequence +0:150 Constant: +0:150 0.000000 +0:151 MemoryBarrier ( global void) +0:152 MemoryBarrierAtomicCounter ( global void) +0:153 MemoryBarrierBuffer ( global void) +0:154 Constant: +0:154 0.000000 +0:155 MemoryBarrierImage ( global void) +0:156 Constant: +0:156 0.000000 +0:166 Function Definition: fooq( ( global void) +0:166 Function Parameters: +0:168 Sequence +0:168 Sequence +0:168 move second child to first child ( temp int) +0:168 's' ( temp int) +0:168 textureSamples ( global int) +0:168 's2dms' ( uniform sampler2DMS) +0:169 add second child into first child ( temp int) +0:169 's' ( temp int) +0:169 textureSamples ( global int) +0:169 'us2dmsa' ( uniform usampler2DMSArray) +0:170 add second child into first child ( temp int) +0:170 's' ( temp int) +0:170 imageQuerySamples ( global int) +0:170 'ii2dms' (layout( rgba32i) uniform iimage2DMS) +0:171 add second child into first child ( temp int) +0:171 's' ( temp int) +0:171 imageQuerySamples ( global int) +0:171 'i2dmsa' (layout( rgba32f) uniform image2DMSArray) +0:176 Function Definition: fooq2( ( global void) +0:176 Function Parameters: +0:178 Sequence +0:178 Sequence +0:178 move second child to first child ( temp int) +0:178 's' ( temp int) +0:178 textureSamples ( global int) +0:178 's2dms' ( uniform sampler2DMS) +0:179 add second child into first child ( temp int) +0:179 's' ( temp int) +0:179 textureSamples ( global int) +0:179 'us2dmsa' ( uniform usampler2DMSArray) +0:180 add second child into first child ( temp int) +0:180 's' ( temp int) +0:180 imageQuerySamples ( global int) +0:180 'ii2dms' (layout( rgba32i) uniform iimage2DMS) +0:181 add second child into first child ( temp int) +0:181 's' ( temp int) +0:181 imageQuerySamples ( global int) +0:181 'i2dmsa' (layout( rgba32f) uniform image2DMSArray) +0:202 Function Definition: qlod( ( global void) +0:202 Function Parameters: +0:? Sequence +0:206 move second child to first child ( temp int) +0:206 'levels' ( temp int) +0:206 textureQueryLevels ( global int) +0:206 'samp1D' ( uniform sampler1D) +0:207 move second child to first child ( temp int) +0:207 'levels' ( temp int) +0:207 textureQueryLevels ( global int) +0:207 'usamp2D' ( uniform usampler2D) +0:208 move second child to first child ( temp int) +0:208 'levels' ( temp int) +0:208 textureQueryLevels ( global int) +0:208 'isamp3D' ( uniform isampler3D) +0:209 move second child to first child ( temp int) +0:209 'levels' ( temp int) +0:209 textureQueryLevels ( global int) +0:209 'isampCube' ( uniform isamplerCube) +0:210 move second child to first child ( temp int) +0:210 'levels' ( temp int) +0:210 textureQueryLevels ( global int) +0:210 'isamp1DA' ( uniform isampler1DArray) +0:211 move second child to first child ( temp int) +0:211 'levels' ( temp int) +0:211 textureQueryLevels ( global int) +0:211 'samp2DA' ( uniform sampler2DArray) +0:212 move second child to first child ( temp int) +0:212 'levels' ( temp int) +0:212 textureQueryLevels ( global int) +0:212 'usampCubeA' ( uniform usamplerCubeArray) +0:214 move second child to first child ( temp int) +0:214 'levels' ( temp int) +0:214 textureQueryLevels ( global int) +0:214 'samp1Ds' ( uniform sampler1DShadow) +0:215 move second child to first child ( temp int) +0:215 'levels' ( temp int) +0:215 textureQueryLevels ( global int) +0:215 'samp2Ds' ( uniform sampler2DShadow) +0:216 move second child to first child ( temp int) +0:216 'levels' ( temp int) +0:216 textureQueryLevels ( global int) +0:216 'sampCubes' ( uniform samplerCubeShadow) +0:217 move second child to first child ( temp int) +0:217 'levels' ( temp int) +0:217 textureQueryLevels ( global int) +0:217 'samp1DAs' ( uniform sampler1DArrayShadow) +0:218 move second child to first child ( temp int) +0:218 'levels' ( temp int) +0:218 textureQueryLevels ( global int) +0:218 'samp2DAs' ( uniform sampler2DArrayShadow) +0:219 move second child to first child ( temp int) +0:219 'levels' ( temp int) +0:219 textureQueryLevels ( global int) +0:219 'sampCubeAs' ( uniform samplerCubeArrayShadow) +0:221 'levels' ( temp int) +0:222 'levels' ( temp int) +0:? Linker Objects +0:? 'v4' (layout( location=3) temp 4-component vector of float) +0:? 'uv4' (layout( location=4) uniform 4-component vector of float) +0:? 'b1' (layout( location=2) in block{ in 4-component vector of float v}) +0:? 'b2' (layout( location=2) out block{ out 4-component vector of float v}) +0:? 'anon@0' ( out block{ out 17-element array of float ClipDistance gl_ClipDistance, }) +0:? 'cs' (layout( location=10) smooth out 2-element array of structure{ global 7-element array of 3X2 matrix of float m, global float f}) +0:? 'cf' (layout( location=54) smooth out float) +0:? 'cg' (layout( location=53) smooth out float) +0:? 'alias1' (layout( location=10) in 4-component vector of float) +0:? 'alias2' (layout( location=10) in 4-component vector of float) +0:? 'v6e' (layout( location=0) in 4-component vector of float) +0:? 'ininst2e' ( in block{layout( location=25) in float f2}) +0:? 'in4e' ( in block{layout( location=50) in float f1, layout( location=51) in float f2}) +0:? 'inst4e' (layout( column_major std140 align=16) uniform block{layout( column_major std140 offset=0 align=16) uniform int a}) +0:? 'inst9e' (layout( column_major shared align=32) uniform block{layout( column_major shared offset=12 align=4) uniform float f, layout( column_major shared offset=20) uniform float g}) +0:? 'spinste' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float a, layout( column_major std140 offset=32) uniform 3-component vector of float b}) +0:? 'aconste' ( global 4-element array of int) +0:? 'bconste' ( global 64-element array of int) +0:? 'bbinst2' ( out block{layout( xfb_buffer=0 xfb_offset=64) out 4-component vector of float bbv}) +0:? 'bge' (layout( xfb_buffer=2 xfb_offset=48 xfb_stride=80) smooth out 4-component vector of float) +0:? 'bhe' (layout( xfb_buffer=3 xfb_offset=32 xfb_stride=64) smooth out 4-component vector of float) +0:? 'bbinst4e' (layout( xfb_stride=80) out block{layout( xfb_buffer=2 xfb_offset=16) out 4-component vector of float bbv1, layout( xfb_buffer=2 xfb_offset=32) out 4-component vector of float bbv2}) +0:? 'bbinst5e' ( out block{layout( xfb_buffer=3 xfb_offset=0) out 4-component vector of float bbv1, layout( xfb_buffer=3 xfb_offset=48 xfb_stride=64) out 4-component vector of float bbv2}) +0:? 'inst4' (layout( column_major std140 align=16) uniform block{layout( column_major std140 offset=0 align=16) uniform int a}) +0:? 'inst9' (layout( column_major std430 align=32) uniform block{layout( column_major std430 offset=12 align=4) uniform float f, layout( column_major std430 offset=20 align=32) uniform float g}) +0:? 'spinst' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float a, layout( column_major std140 offset=32) uniform 3-component vector of float b}) +0:? 'aconst' ( global 4-element array of int) +0:? 'bconst' ( global 64-element array of int) +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:? '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) +0:? 'bh' (layout( xfb_buffer=1 xfb_offset=32 xfb_stride=80) smooth out 4-component vector of float) +0:? 'bbinst4' (layout( xfb_stride=80) out block{layout( xfb_buffer=1 xfb_offset=16) out 4-component vector of float bbv1}) +0:? 'bbinst5' ( out block{layout( xfb_buffer=1 xfb_offset=0) out 4-component vector of float bbv1, layout( xfb_buffer=1 xfb_offset=64 xfb_stride=80) out 4-component vector of float bbv2}) +0:? 'sharedv' ( shared 4-component vector of float) +0:? 'v' ( buffer 4-component vector of float) +0:? 's2dms' ( uniform sampler2DMS) +0:? 'us2dmsa' ( uniform usampler2DMSArray) +0:? 'ii2dms' (layout( rgba32i) uniform iimage2DMS) +0:? 'i2dmsa' (layout( rgba32f) uniform image2DMSArray) +0:? 'samp1D' ( uniform sampler1D) +0:? 'usamp2D' ( uniform usampler2D) +0:? 'isamp3D' ( uniform isampler3D) +0:? 'isampCube' ( uniform isamplerCube) +0:? 'isamp1DA' ( uniform isampler1DArray) +0:? 'samp2DA' ( uniform sampler2DArray) +0:? 'usampCubeA' ( uniform usamplerCubeArray) +0:? 'samp1Ds' ( uniform sampler1DShadow) +0:? 'samp2Ds' ( uniform sampler2DShadow) +0:? 'sampCubes' ( uniform samplerCubeShadow) +0:? 'samp1DAs' ( uniform sampler1DArrayShadow) +0:? 'samp2DAs' ( uniform sampler2DArrayShadow) +0:? 'sampCubeAs' ( uniform samplerCubeArrayShadow) +0:? 'sampBuf' ( uniform samplerBuffer) +0:? 'sampRect' ( uniform sampler2DRect) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + + +Linked vertex stage: + +ERROR: Linking vertex stage: Missing entry point: Each stage requires one entry point +ERROR: Linking vertex stage: xfb_stride is too small to hold all buffer entries: +ERROR: xfb_buffer 3, xfb_stride 64, minimum stride needed: 80 + +Shader version: 430 +Requested GL_ARB_enhanced_layouts +Requested GL_ARB_shader_texture_image_samples +in xfb mode +ERROR: node is still EOpNull! +0:? Linker Objects +0:? 'v4' (layout( location=3) temp 4-component vector of float) +0:? 'uv4' (layout( location=4) uniform 4-component vector of float) +0:? 'b1' (layout( location=2) in block{ in 4-component vector of float v}) +0:? 'b2' (layout( location=2) out block{ out 4-component vector of float v}) +0:? 'anon@0' ( out block{ out 17-element array of float ClipDistance gl_ClipDistance, }) +0:? 'cs' (layout( location=10) smooth out 2-element array of structure{ global 7-element array of 3X2 matrix of float m, global float f}) +0:? 'cf' (layout( location=54) smooth out float) +0:? 'cg' (layout( location=53) smooth out float) +0:? 'alias1' (layout( location=10) in 4-component vector of float) +0:? 'alias2' (layout( location=10) in 4-component vector of float) +0:? 'v6e' (layout( location=0) in 4-component vector of float) +0:? 'ininst2e' ( in block{layout( location=25) in float f2}) +0:? 'in4e' ( in block{layout( location=50) in float f1, layout( location=51) in float f2}) +0:? 'inst4e' (layout( column_major std140 align=16) uniform block{layout( column_major std140 offset=0 align=16) uniform int a}) +0:? 'inst9e' (layout( column_major shared align=32) uniform block{layout( column_major shared offset=12 align=4) uniform float f, layout( column_major shared offset=20) uniform float g}) +0:? 'spinste' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float a, layout( column_major std140 offset=32) uniform 3-component vector of float b}) +0:? 'aconste' ( global 4-element array of int) +0:? 'bconste' ( global 64-element array of int) +0:? 'bbinst2' ( out block{layout( xfb_buffer=0 xfb_offset=64) out 4-component vector of float bbv}) +0:? 'bge' (layout( xfb_buffer=2 xfb_offset=48 xfb_stride=80) smooth out 4-component vector of float) +0:? 'bhe' (layout( xfb_buffer=3 xfb_offset=32 xfb_stride=64) smooth out 4-component vector of float) +0:? 'bbinst4e' (layout( xfb_stride=80) out block{layout( xfb_buffer=2 xfb_offset=16) out 4-component vector of float bbv1, layout( xfb_buffer=2 xfb_offset=32) out 4-component vector of float bbv2}) +0:? 'bbinst5e' ( out block{layout( xfb_buffer=3 xfb_offset=0) out 4-component vector of float bbv1, layout( xfb_buffer=3 xfb_offset=48 xfb_stride=64) out 4-component vector of float bbv2}) +0:? 'inst4' (layout( column_major std140 align=16) uniform block{layout( column_major std140 offset=0 align=16) uniform int a}) +0:? 'inst9' (layout( column_major std430 align=32) uniform block{layout( column_major std430 offset=12 align=4) uniform float f, layout( column_major std430 offset=20 align=32) uniform float g}) +0:? 'spinst' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float a, layout( column_major std140 offset=32) uniform 3-component vector of float b}) +0:? 'aconst' ( global 4-element array of int) +0:? 'bconst' ( global 64-element array of int) +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:? '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) +0:? 'bh' (layout( xfb_buffer=1 xfb_offset=32 xfb_stride=80) smooth out 4-component vector of float) +0:? 'bbinst4' (layout( xfb_stride=80) out block{layout( xfb_buffer=1 xfb_offset=16) out 4-component vector of float bbv1}) +0:? 'bbinst5' ( out block{layout( xfb_buffer=1 xfb_offset=0) out 4-component vector of float bbv1, layout( xfb_buffer=1 xfb_offset=64 xfb_stride=80) out 4-component vector of float bbv2}) +0:? 'sharedv' ( shared 4-component vector of float) +0:? 'v' ( buffer 4-component vector of float) +0:? 's2dms' ( uniform sampler2DMS) +0:? 'us2dmsa' ( uniform usampler2DMSArray) +0:? 'ii2dms' (layout( rgba32i) uniform iimage2DMS) +0:? 'i2dmsa' (layout( rgba32f) uniform image2DMSArray) +0:? 'samp1D' ( uniform sampler1D) +0:? 'usamp2D' ( uniform usampler2D) +0:? 'isamp3D' ( uniform isampler3D) +0:? 'isampCube' ( uniform isamplerCube) +0:? 'isamp1DA' ( uniform isampler1DArray) +0:? 'samp2DA' ( uniform sampler2DArray) +0:? 'usampCubeA' ( uniform usamplerCubeArray) +0:? 'samp1Ds' ( uniform sampler1DShadow) +0:? 'samp2Ds' ( uniform sampler2DShadow) +0:? 'sampCubes' ( uniform samplerCubeShadow) +0:? 'samp1DAs' ( uniform sampler1DArrayShadow) +0:? 'samp2DAs' ( uniform sampler2DArrayShadow) +0:? 'sampCubeAs' ( uniform samplerCubeArrayShadow) +0:? 'sampBuf' ( uniform samplerBuffer) +0:? 'sampRect' ( uniform sampler2DRect) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/430AofA.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/430AofA.frag.out new file mode 100644 index 0000000..3d53280 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/430AofA.frag.out @@ -0,0 +1,775 @@ +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 +ERROR: 0:28: '[' : array index out of range '4' +ERROR: 0:56: 'constructor' : cannot convert parameter 2 from ' const 3-element array of 4-component vector of float' to ' temp 2-element array of 4-component vector of float' +ERROR: 0:60: 'constructor' : cannot convert parameter 2 from ' const 2-element array of 4-component vector of float' to ' temp 3-element array of 4-component vector of float' +ERROR: 0:64: '=' : cannot convert from ' const 3-element array of 2-element array of 4-component vector of float' to ' temp 4-element array of 2-element array of 4-component vector of float' +ERROR: 0:70: 'assign' : cannot convert from ' global 4-element array of 7-element array of float' to ' global 5-element array of 7-element array of float' +ERROR: 0:71: 'assign' : cannot convert from ' global 4-element array of 7-element array of float' to ' global implicitly-sized array of 7-element array of float' +ERROR: 0:73: 'foo' : no matching overloaded function found +ERROR: 0:78: '==' : wrong operand types: no operation '==' exists that takes a left-hand operand of type ' global 4-element array of 7-element array of float' and a right operand of type ' global 5-element array of 7-element array of float' (or there is no acceptable conversion) +ERROR: 0:84: '[' : array index out of range '5' +ERROR: 0:91: 'length' : array must be declared with a size before using this method +ERROR: 0:93: 'length' : array must be declared with a size before using this method +ERROR: 0:98: 'length' : does not operate on this type: temp float +ERROR: 0:98: '' : function call, method, or subroutine call expected +ERROR: 0:98: '' : no matching overloaded function found +ERROR: 0:101: 'resize2' : redeclaration of array with a different array dimensions or sizes +ERROR: 0:104: 'resize3' : redeclaration of array with a different array dimensions or sizes +ERROR: 0:107: 'resize4' : redeclaration of array with a different element type +ERROR: 20 compilation errors. No code generated. + + +Shader version: 430 +ERROR: node is still EOpNull! +0:10 Function Definition: foo(f1[5][7]; ( global 4-element array of 7-element array of float) +0:10 Function Parameters: +0:10 'a' ( in 5-element array of 7-element array of float) +0:? Sequence +0:13 move second child to first child ( temp 7-element array of float) +0:13 'r' ( temp 7-element array of float) +0:13 direct index ( temp 7-element array of float) +0:13 'a' ( in 5-element array of 7-element array of float) +0:13 Constant: +0:13 2 (const int) +0:14 Constant: +0:14 0.000000 +0:15 Constant: +0:15 0.000000 +0:16 Branch: Return with expression +0:16 Construct float ( temp 4-element array of 7-element array of float) +0:16 direct index ( temp 7-element array of float) +0:16 'a' ( in 5-element array of 7-element array of float) +0:16 Constant: +0:16 0 (const int) +0:16 direct index ( temp 7-element array of float) +0:16 'a' ( in 5-element array of 7-element array of float) +0:16 Constant: +0:16 1 (const int) +0:16 'r' ( temp 7-element array of float) +0:16 direct index ( temp 7-element array of float) +0:16 'a' ( in 5-element array of 7-element array of float) +0:16 Constant: +0:16 3 (const int) +0:17 Branch: Return with expression +0:17 Construct float ( temp 4-element array of 7-element array of float) +0:17 direct index ( temp 7-element array of float) +0:17 'a' ( in 5-element array of 7-element array of float) +0:17 Constant: +0:17 0 (const int) +0:17 direct index ( temp 7-element array of float) +0:17 'a' ( in 5-element array of 7-element array of float) +0:17 Constant: +0:17 1 (const int) +0:17 'r' ( temp 7-element array of float) +0:17 direct index ( temp 7-element array of float) +0:17 'a' ( in 5-element array of 7-element array of float) +0:17 Constant: +0:17 3 (const int) +0:18 Branch: Return with expression +0:18 Construct float ( temp 4-element array of 7-element array of float) +0:18 direct index ( temp 7-element array of float) +0:18 'a' ( in 5-element array of 7-element array of float) +0:18 Constant: +0:18 0 (const int) +0:18 direct index ( temp 7-element array of float) +0:18 'a' ( in 5-element array of 7-element array of float) +0:18 Constant: +0:18 1 (const int) +0:18 direct index ( temp 7-element array of float) +0:18 'a' ( in 5-element array of 7-element array of float) +0:18 Constant: +0:18 2 (const int) +0:18 direct index ( temp 7-element array of float) +0:18 'a' ( in 5-element array of 7-element array of float) +0:18 Constant: +0:18 3 (const int) +0:21 Function Definition: bar(f1[5][7]; ( global void) +0:21 Function Parameters: +0:21 '' ( in 5-element array of 7-element array of float) +0:23 Function Definition: main( ( global void) +0:23 Function Parameters: +0:? Sequence +0:? Sequence +0:28 move second child to first child ( temp float) +0:28 direct index ( temp float) +0:28 direct index ( temp 2-element array of float) +0:28 direct index ( temp 4-element array of 2-element array of float) +0:28 'gu' ( temp 3-element array of 4-element array of 2-element array of float) +0:28 Constant: +0:28 2 (const int) +0:28 Constant: +0:28 4 (const int) +0:28 Constant: +0:28 1 (const int) +0:28 Constant: +0:28 4.000000 +0:30 Sequence +0:30 move second child to first child ( temp 3-element array of 2-element array of 4-component vector of float) +0:30 'ca4' ( temp 3-element array of 2-element array of 4-component vector of float) +0:32 Constant: +0:32 0.000000 +0:32 0.000000 +0:32 0.000000 +0:32 0.000000 +0:32 1.000000 +0:32 1.000000 +0:32 1.000000 +0:32 1.000000 +0:32 0.000000 +0:32 0.000000 +0:32 0.000000 +0:32 0.000000 +0:32 1.000000 +0:32 1.000000 +0:32 1.000000 +0:32 1.000000 +0:32 0.000000 +0:32 0.000000 +0:32 0.000000 +0:32 0.000000 +0:32 1.000000 +0:32 1.000000 +0:32 1.000000 +0:32 1.000000 +0:33 Sequence +0:33 move second child to first child ( temp 3-element array of 2-element array of 4-component vector of float) +0:33 'caim' ( temp 3-element array of 2-element array of 4-component vector of float) +0:35 Constant: +0:35 4.000000 +0:35 4.000000 +0:35 4.000000 +0:35 4.000000 +0:35 2.000000 +0:35 2.000000 +0:35 2.000000 +0:35 2.000000 +0:35 4.000000 +0:35 4.000000 +0:35 4.000000 +0:35 4.000000 +0:35 2.000000 +0:35 2.000000 +0:35 2.000000 +0:35 2.000000 +0:35 4.000000 +0:35 4.000000 +0:35 4.000000 +0:35 4.000000 +0:35 2.000000 +0:35 2.000000 +0:35 2.000000 +0:35 2.000000 +0:36 Sequence +0:36 move second child to first child ( temp 3-element array of 2-element array of 4-component vector of float) +0:36 'caim2' ( temp 3-element array of 2-element array of 4-component vector of float) +0:38 Constant: +0:38 4.000000 +0:38 4.000000 +0:38 4.000000 +0:38 4.000000 +0:38 2.000000 +0:38 2.000000 +0:38 2.000000 +0:38 2.000000 +0:38 4.000000 +0:38 4.000000 +0:38 4.000000 +0:38 4.000000 +0:38 2.000000 +0:38 2.000000 +0:38 2.000000 +0:38 2.000000 +0:38 4.000000 +0:38 4.000000 +0:38 4.000000 +0:38 4.000000 +0:38 2.000000 +0:38 2.000000 +0:38 2.000000 +0:38 2.000000 +0:39 Sequence +0:39 move second child to first child ( temp 3-element array of 2-element array of 4-component vector of float) +0:39 'caim3' ( temp 3-element array of 2-element array of 4-component vector of float) +0:41 Constant: +0:41 4.000000 +0:41 4.000000 +0:41 4.000000 +0:41 4.000000 +0:41 2.000000 +0:41 2.000000 +0:41 2.000000 +0:41 2.000000 +0:41 4.000000 +0:41 4.000000 +0:41 4.000000 +0:41 4.000000 +0:41 2.000000 +0:41 2.000000 +0:41 2.000000 +0:41 2.000000 +0:41 4.000000 +0:41 4.000000 +0:41 4.000000 +0:41 4.000000 +0:41 2.000000 +0:41 2.000000 +0:41 2.000000 +0:41 2.000000 +0:43 Sequence +0:43 move second child to first child ( temp 3-element array of 2-element array of 4-component vector of float) +0:43 'a4' ( temp 3-element array of 2-element array of 4-component vector of float) +0:43 Constant: +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 1.000000 +0:43 1.000000 +0:43 1.000000 +0:43 1.000000 +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 1.000000 +0:43 1.000000 +0:43 1.000000 +0:43 1.000000 +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 1.000000 +0:43 1.000000 +0:43 1.000000 +0:43 1.000000 +0:46 Sequence +0:46 move second child to first child ( temp 3-element array of 2-element array of 4-component vector of float) +0:46 'aim' ( temp 3-element array of 2-element array of 4-component vector of float) +0:46 Constant: +0:46 4.000000 +0:46 4.000000 +0:46 4.000000 +0:46 4.000000 +0:46 2.000000 +0:46 2.000000 +0:46 2.000000 +0:46 2.000000 +0:46 4.000000 +0:46 4.000000 +0:46 4.000000 +0:46 4.000000 +0:46 2.000000 +0:46 2.000000 +0:46 2.000000 +0:46 2.000000 +0:46 4.000000 +0:46 4.000000 +0:46 4.000000 +0:46 4.000000 +0:46 2.000000 +0:46 2.000000 +0:46 2.000000 +0:46 2.000000 +0:49 Sequence +0:49 move second child to first child ( temp 3-element array of 2-element array of 4-component vector of float) +0:49 'aim2' ( temp 3-element array of 2-element array of 4-component vector of float) +0:49 Constant: +0:49 4.000000 +0:49 4.000000 +0:49 4.000000 +0:49 4.000000 +0:49 2.000000 +0:49 2.000000 +0:49 2.000000 +0:49 2.000000 +0:49 4.000000 +0:49 4.000000 +0:49 4.000000 +0:49 4.000000 +0:49 2.000000 +0:49 2.000000 +0:49 2.000000 +0:49 2.000000 +0:49 4.000000 +0:49 4.000000 +0:49 4.000000 +0:49 4.000000 +0:49 2.000000 +0:49 2.000000 +0:49 2.000000 +0:49 2.000000 +0:52 Sequence +0:52 move second child to first child ( temp 3-element array of 2-element array of 4-component vector of float) +0:52 'aim3' ( temp 3-element array of 2-element array of 4-component vector of float) +0:52 Constant: +0:52 4.000000 +0:52 4.000000 +0:52 4.000000 +0:52 4.000000 +0:52 2.000000 +0:52 2.000000 +0:52 2.000000 +0:52 2.000000 +0:52 4.000000 +0:52 4.000000 +0:52 4.000000 +0:52 4.000000 +0:52 2.000000 +0:52 2.000000 +0:52 2.000000 +0:52 2.000000 +0:52 4.000000 +0:52 4.000000 +0:52 4.000000 +0:52 4.000000 +0:52 2.000000 +0:52 2.000000 +0:52 2.000000 +0:52 2.000000 +0:69 move second child to first child ( temp 4-element array of 7-element array of float) +0:69 'g4' ( global 4-element array of 7-element array of float) +0:69 Function Call: foo(f1[5][7]; ( global 4-element array of 7-element array of float) +0:69 'g5' ( global 5-element array of 7-element array of float) +0:70 'g5' ( global 5-element array of 7-element array of float) +0:71 'gu' ( global implicitly-sized array of 7-element array of float) +0:73 Constant: +0:73 0.000000 +0:74 Function Call: bar(f1[5][7]; ( global void) +0:74 'g5' ( global 5-element array of 7-element array of float) +0:76 Test condition and select ( temp void) +0:76 Condition +0:76 Compare Equal ( temp bool) +0:76 Function Call: foo(f1[5][7]; ( global 4-element array of 7-element array of float) +0:76 'g5' ( global 5-element array of 7-element array of float) +0:76 'g4' ( global 4-element array of 7-element array of float) +0:76 true case is null +0:78 Test condition and select ( temp void) +0:78 Condition +0:78 Constant: +0:78 false (const bool) +0:78 true case is null +0:82 move second child to first child ( temp float) +0:82 direct index ( temp float) +0:82 direct index ( temp 7-element array of float) +0:82 'u' ( temp 5-element array of 7-element array of float) +0:82 Constant: +0:82 2 (const int) +0:82 Constant: +0:82 2 (const int) +0:82 Constant: +0:82 3.000000 +0:84 move second child to first child ( temp float) +0:84 direct index ( temp float) +0:84 direct index ( temp 7-element array of float) +0:84 'u' ( temp 5-element array of 7-element array of float) +0:84 Constant: +0:84 5 (const int) +0:84 Constant: +0:84 2 (const int) +0:84 Constant: +0:84 5.000000 +0:85 Function Call: foo(f1[5][7]; ( global 4-element array of 7-element array of float) +0:85 'u' ( temp 5-element array of 7-element array of float) +0:88 Function Definition: foo3( ( global void) +0:88 Function Parameters: +0:? Sequence +0:91 Constant: +0:91 1 (const int) +0:92 move second child to first child ( temp float) +0:92 direct index ( temp float) +0:92 direct index ( temp 7-element array of float) +0:92 direct index ( temp 5-element array of 7-element array of float) +0:92 'resize1' ( temp 3-element array of 5-element array of 7-element array of float) +0:92 Constant: +0:92 1 (const int) +0:92 Constant: +0:92 4 (const int) +0:92 Constant: +0:92 5 (const int) +0:92 Constant: +0:92 2.000000 +0:93 Constant: +0:93 1 (const int) +0:95 Constant: +0:95 3 (const int) +0:96 Constant: +0:96 5 (const int) +0:97 Constant: +0:97 7 (const int) +0:98 Constant: +0:98 0.000000 +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:? 'g4' ( global 4-element array of 7-element array of float) +0:? 'g5' ( global 5-element array of 7-element array of float) + + +Linked fragment stage: + + +Shader version: 430 +ERROR: node is still EOpNull! +0:10 Function Definition: foo(f1[5][7]; ( global 4-element array of 7-element array of float) +0:10 Function Parameters: +0:10 'a' ( in 5-element array of 7-element array of float) +0:? Sequence +0:13 move second child to first child ( temp 7-element array of float) +0:13 'r' ( temp 7-element array of float) +0:13 direct index ( temp 7-element array of float) +0:13 'a' ( in 5-element array of 7-element array of float) +0:13 Constant: +0:13 2 (const int) +0:14 Constant: +0:14 0.000000 +0:15 Constant: +0:15 0.000000 +0:16 Branch: Return with expression +0:16 Construct float ( temp 4-element array of 7-element array of float) +0:16 direct index ( temp 7-element array of float) +0:16 'a' ( in 5-element array of 7-element array of float) +0:16 Constant: +0:16 0 (const int) +0:16 direct index ( temp 7-element array of float) +0:16 'a' ( in 5-element array of 7-element array of float) +0:16 Constant: +0:16 1 (const int) +0:16 'r' ( temp 7-element array of float) +0:16 direct index ( temp 7-element array of float) +0:16 'a' ( in 5-element array of 7-element array of float) +0:16 Constant: +0:16 3 (const int) +0:17 Branch: Return with expression +0:17 Construct float ( temp 4-element array of 7-element array of float) +0:17 direct index ( temp 7-element array of float) +0:17 'a' ( in 5-element array of 7-element array of float) +0:17 Constant: +0:17 0 (const int) +0:17 direct index ( temp 7-element array of float) +0:17 'a' ( in 5-element array of 7-element array of float) +0:17 Constant: +0:17 1 (const int) +0:17 'r' ( temp 7-element array of float) +0:17 direct index ( temp 7-element array of float) +0:17 'a' ( in 5-element array of 7-element array of float) +0:17 Constant: +0:17 3 (const int) +0:18 Branch: Return with expression +0:18 Construct float ( temp 4-element array of 7-element array of float) +0:18 direct index ( temp 7-element array of float) +0:18 'a' ( in 5-element array of 7-element array of float) +0:18 Constant: +0:18 0 (const int) +0:18 direct index ( temp 7-element array of float) +0:18 'a' ( in 5-element array of 7-element array of float) +0:18 Constant: +0:18 1 (const int) +0:18 direct index ( temp 7-element array of float) +0:18 'a' ( in 5-element array of 7-element array of float) +0:18 Constant: +0:18 2 (const int) +0:18 direct index ( temp 7-element array of float) +0:18 'a' ( in 5-element array of 7-element array of float) +0:18 Constant: +0:18 3 (const int) +0:21 Function Definition: bar(f1[5][7]; ( global void) +0:21 Function Parameters: +0:21 '' ( in 5-element array of 7-element array of float) +0:23 Function Definition: main( ( global void) +0:23 Function Parameters: +0:? Sequence +0:? Sequence +0:28 move second child to first child ( temp float) +0:28 direct index ( temp float) +0:28 direct index ( temp 2-element array of float) +0:28 direct index ( temp 4-element array of 2-element array of float) +0:28 'gu' ( temp 3-element array of 4-element array of 2-element array of float) +0:28 Constant: +0:28 2 (const int) +0:28 Constant: +0:28 4 (const int) +0:28 Constant: +0:28 1 (const int) +0:28 Constant: +0:28 4.000000 +0:30 Sequence +0:30 move second child to first child ( temp 3-element array of 2-element array of 4-component vector of float) +0:30 'ca4' ( temp 3-element array of 2-element array of 4-component vector of float) +0:32 Constant: +0:32 0.000000 +0:32 0.000000 +0:32 0.000000 +0:32 0.000000 +0:32 1.000000 +0:32 1.000000 +0:32 1.000000 +0:32 1.000000 +0:32 0.000000 +0:32 0.000000 +0:32 0.000000 +0:32 0.000000 +0:32 1.000000 +0:32 1.000000 +0:32 1.000000 +0:32 1.000000 +0:32 0.000000 +0:32 0.000000 +0:32 0.000000 +0:32 0.000000 +0:32 1.000000 +0:32 1.000000 +0:32 1.000000 +0:32 1.000000 +0:33 Sequence +0:33 move second child to first child ( temp 3-element array of 2-element array of 4-component vector of float) +0:33 'caim' ( temp 3-element array of 2-element array of 4-component vector of float) +0:35 Constant: +0:35 4.000000 +0:35 4.000000 +0:35 4.000000 +0:35 4.000000 +0:35 2.000000 +0:35 2.000000 +0:35 2.000000 +0:35 2.000000 +0:35 4.000000 +0:35 4.000000 +0:35 4.000000 +0:35 4.000000 +0:35 2.000000 +0:35 2.000000 +0:35 2.000000 +0:35 2.000000 +0:35 4.000000 +0:35 4.000000 +0:35 4.000000 +0:35 4.000000 +0:35 2.000000 +0:35 2.000000 +0:35 2.000000 +0:35 2.000000 +0:36 Sequence +0:36 move second child to first child ( temp 3-element array of 2-element array of 4-component vector of float) +0:36 'caim2' ( temp 3-element array of 2-element array of 4-component vector of float) +0:38 Constant: +0:38 4.000000 +0:38 4.000000 +0:38 4.000000 +0:38 4.000000 +0:38 2.000000 +0:38 2.000000 +0:38 2.000000 +0:38 2.000000 +0:38 4.000000 +0:38 4.000000 +0:38 4.000000 +0:38 4.000000 +0:38 2.000000 +0:38 2.000000 +0:38 2.000000 +0:38 2.000000 +0:38 4.000000 +0:38 4.000000 +0:38 4.000000 +0:38 4.000000 +0:38 2.000000 +0:38 2.000000 +0:38 2.000000 +0:38 2.000000 +0:39 Sequence +0:39 move second child to first child ( temp 3-element array of 2-element array of 4-component vector of float) +0:39 'caim3' ( temp 3-element array of 2-element array of 4-component vector of float) +0:41 Constant: +0:41 4.000000 +0:41 4.000000 +0:41 4.000000 +0:41 4.000000 +0:41 2.000000 +0:41 2.000000 +0:41 2.000000 +0:41 2.000000 +0:41 4.000000 +0:41 4.000000 +0:41 4.000000 +0:41 4.000000 +0:41 2.000000 +0:41 2.000000 +0:41 2.000000 +0:41 2.000000 +0:41 4.000000 +0:41 4.000000 +0:41 4.000000 +0:41 4.000000 +0:41 2.000000 +0:41 2.000000 +0:41 2.000000 +0:41 2.000000 +0:43 Sequence +0:43 move second child to first child ( temp 3-element array of 2-element array of 4-component vector of float) +0:43 'a4' ( temp 3-element array of 2-element array of 4-component vector of float) +0:43 Constant: +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 1.000000 +0:43 1.000000 +0:43 1.000000 +0:43 1.000000 +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 1.000000 +0:43 1.000000 +0:43 1.000000 +0:43 1.000000 +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 1.000000 +0:43 1.000000 +0:43 1.000000 +0:43 1.000000 +0:46 Sequence +0:46 move second child to first child ( temp 3-element array of 2-element array of 4-component vector of float) +0:46 'aim' ( temp 3-element array of 2-element array of 4-component vector of float) +0:46 Constant: +0:46 4.000000 +0:46 4.000000 +0:46 4.000000 +0:46 4.000000 +0:46 2.000000 +0:46 2.000000 +0:46 2.000000 +0:46 2.000000 +0:46 4.000000 +0:46 4.000000 +0:46 4.000000 +0:46 4.000000 +0:46 2.000000 +0:46 2.000000 +0:46 2.000000 +0:46 2.000000 +0:46 4.000000 +0:46 4.000000 +0:46 4.000000 +0:46 4.000000 +0:46 2.000000 +0:46 2.000000 +0:46 2.000000 +0:46 2.000000 +0:49 Sequence +0:49 move second child to first child ( temp 3-element array of 2-element array of 4-component vector of float) +0:49 'aim2' ( temp 3-element array of 2-element array of 4-component vector of float) +0:49 Constant: +0:49 4.000000 +0:49 4.000000 +0:49 4.000000 +0:49 4.000000 +0:49 2.000000 +0:49 2.000000 +0:49 2.000000 +0:49 2.000000 +0:49 4.000000 +0:49 4.000000 +0:49 4.000000 +0:49 4.000000 +0:49 2.000000 +0:49 2.000000 +0:49 2.000000 +0:49 2.000000 +0:49 4.000000 +0:49 4.000000 +0:49 4.000000 +0:49 4.000000 +0:49 2.000000 +0:49 2.000000 +0:49 2.000000 +0:49 2.000000 +0:52 Sequence +0:52 move second child to first child ( temp 3-element array of 2-element array of 4-component vector of float) +0:52 'aim3' ( temp 3-element array of 2-element array of 4-component vector of float) +0:52 Constant: +0:52 4.000000 +0:52 4.000000 +0:52 4.000000 +0:52 4.000000 +0:52 2.000000 +0:52 2.000000 +0:52 2.000000 +0:52 2.000000 +0:52 4.000000 +0:52 4.000000 +0:52 4.000000 +0:52 4.000000 +0:52 2.000000 +0:52 2.000000 +0:52 2.000000 +0:52 2.000000 +0:52 4.000000 +0:52 4.000000 +0:52 4.000000 +0:52 4.000000 +0:52 2.000000 +0:52 2.000000 +0:52 2.000000 +0:52 2.000000 +0:69 move second child to first child ( temp 4-element array of 7-element array of float) +0:69 'g4' ( global 4-element array of 7-element array of float) +0:69 Function Call: foo(f1[5][7]; ( global 4-element array of 7-element array of float) +0:69 'g5' ( global 5-element array of 7-element array of float) +0:70 'g5' ( global 5-element array of 7-element array of float) +0:71 'gu' ( global 1-element array of 7-element array of float) +0:73 Constant: +0:73 0.000000 +0:74 Function Call: bar(f1[5][7]; ( global void) +0:74 'g5' ( global 5-element array of 7-element array of float) +0:76 Test condition and select ( temp void) +0:76 Condition +0:76 Compare Equal ( temp bool) +0:76 Function Call: foo(f1[5][7]; ( global 4-element array of 7-element array of float) +0:76 'g5' ( global 5-element array of 7-element array of float) +0:76 'g4' ( global 4-element array of 7-element array of float) +0:76 true case is null +0:78 Test condition and select ( temp void) +0:78 Condition +0:78 Constant: +0:78 false (const bool) +0:78 true case is null +0:82 move second child to first child ( temp float) +0:82 direct index ( temp float) +0:82 direct index ( temp 7-element array of float) +0:82 'u' ( temp 5-element array of 7-element array of float) +0:82 Constant: +0:82 2 (const int) +0:82 Constant: +0:82 2 (const int) +0:82 Constant: +0:82 3.000000 +0:84 move second child to first child ( temp float) +0:84 direct index ( temp float) +0:84 direct index ( temp 7-element array of float) +0:84 'u' ( temp 5-element array of 7-element array of float) +0:84 Constant: +0:84 5 (const int) +0:84 Constant: +0:84 2 (const int) +0:84 Constant: +0:84 5.000000 +0:85 Function Call: foo(f1[5][7]; ( global 4-element array of 7-element array of float) +0:85 'u' ( temp 5-element array of 7-element array of float) +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:? '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 new file mode 100644 index 0000000..3e71002 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/430scope.vert.out @@ -0,0 +1,231 @@ +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 +ERROR: 0:22: 'f' : redefinition +ERROR: 0:43: 'sin' : can't use function syntax on variable +ERROR: 0:57: 'z' : undeclared identifier +ERROR: 0:57: 'z' : redefinition +ERROR: 0:73: 'degrees' : can't use function syntax on variable +ERROR: 8 compilation errors. No code generated. + + +Shader version: 430 +ERROR: node is still EOpNull! +0:3 Function Definition: f(i1;i1;i1; ( global int) +0:3 Function Parameters: +0:3 'a' ( in int) +0:3 'b' ( in int) +0:3 'c' ( in int) +0:? Sequence +0:8 Sequence +0:8 Sequence +0:8 move second child to first child ( temp float) +0:8 'a' ( temp float) +0:8 add ( temp float) +0:8 Convert int to float ( temp float) +0:8 'a' ( in int) +0:8 Constant: +0:8 1.000000 +0:11 Branch: Return with expression +0:11 'a' ( in int) +0:25 Function Definition: cos(f1; ( global float) +0:25 Function Parameters: +0:25 'x' ( in float) +0:27 Sequence +0:27 Branch: Return with expression +0:27 Constant: +0:27 1.000000 +0:29 Function Definition: radians(b1; ( global bool) +0:29 Function Parameters: +0:29 'x' ( in bool) +0:31 Sequence +0:31 Branch: Return with expression +0:31 Constant: +0:31 true (const bool) +0:36 Function Definition: main( ( global void) +0:36 Function Parameters: +0:? Sequence +0:39 Function Call: g( ( temp int) +0:42 'sin' ( temp float) +0:43 Constant: +0:43 0.000000 +0:44 Function Call: f(i1;i1;i1; ( global int) +0:44 Constant: +0:44 1 (const int) +0:44 Constant: +0:44 2 (const int) +0:44 Constant: +0:44 3 (const int) +0:47 move second child to first child ( temp float) +0:47 'f' ( temp float) +0:47 Constant: +0:47 3.000000 +0:49 move second child to first child ( temp 4-component vector of float) +0:49 gl_Position: direct index for structure ( invariant gl_Position 4-component vector of float Position) +0:49 'anon@0' ( out block{ invariant 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, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:49 Constant: +0:49 0 (const uint) +0:49 Construct vec4 ( temp 4-component vector of float) +0:49 'f' ( temp float) +0:51 Sequence +0:51 Sequence +0:51 move second child to first child ( temp int) +0:51 'f' ( temp int) +0:51 Constant: +0:51 0 (const int) +0:51 Loop with condition tested first +0:51 Loop Condition +0:51 Compare Less Than ( temp bool) +0:51 'f' ( temp int) +0:51 Constant: +0:51 10 (const int) +0:51 Loop Body +0:52 Pre-Increment ( temp int) +0:52 'f' ( temp int) +0:51 Loop Terminal Expression +0:51 Pre-Increment ( temp int) +0:51 'f' ( temp int) +0:54 Sequence +0:54 move second child to first child ( temp int) +0:54 'x' ( temp int) +0:54 Constant: +0:54 1 (const int) +0:56 Sequence +0:56 Sequence +0:56 move second child to first child ( temp float) +0:56 'x' ( temp float) +0:56 Constant: +0:56 2.000000 +0:56 move second child to first child ( temp float) +0:56 'y' ( temp float) +0:56 'x' ( temp float) +0:60 Sequence +0:60 Sequence +0:60 move second child to first child ( temp int) +0:60 'x' ( temp int) +0:60 'x' ( temp int) +0:68 Sequence +0:68 Sequence +0:68 move second child to first child ( temp structure{ temp int x}) +0:68 'S' ( temp structure{ temp int x}) +0:68 Constant: +0:68 0 (const int) +0:69 x: direct index for structure ( temp int) +0:69 'S' ( temp structure{ temp int x}) +0:69 Constant: +0:69 0 (const int) +0:73 Constant: +0:73 0.000000 +0:? Linker Objects +0:? 'b' ( global bool) +0:? 'tan' ( global float) +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: + g( + +Shader version: 430 +ERROR: node is still EOpNull! +0:3 Function Definition: f(i1;i1;i1; ( global int) +0:3 Function Parameters: +0:3 'a' ( in int) +0:3 'b' ( in int) +0:3 'c' ( in int) +0:? Sequence +0:8 Sequence +0:8 Sequence +0:8 move second child to first child ( temp float) +0:8 'a' ( temp float) +0:8 add ( temp float) +0:8 Convert int to float ( temp float) +0:8 'a' ( in int) +0:8 Constant: +0:8 1.000000 +0:11 Branch: Return with expression +0:11 'a' ( in int) +0:36 Function Definition: main( ( global void) +0:36 Function Parameters: +0:? Sequence +0:39 Function Call: g( ( temp int) +0:42 'sin' ( temp float) +0:43 Constant: +0:43 0.000000 +0:44 Function Call: f(i1;i1;i1; ( global int) +0:44 Constant: +0:44 1 (const int) +0:44 Constant: +0:44 2 (const int) +0:44 Constant: +0:44 3 (const int) +0:47 move second child to first child ( temp float) +0:47 'f' ( temp float) +0:47 Constant: +0:47 3.000000 +0:49 move second child to first child ( temp 4-component vector of float) +0:49 gl_Position: direct index for structure ( invariant gl_Position 4-component vector of float Position) +0:49 'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:49 Constant: +0:49 0 (const uint) +0:49 Construct vec4 ( temp 4-component vector of float) +0:49 'f' ( temp float) +0:51 Sequence +0:51 Sequence +0:51 move second child to first child ( temp int) +0:51 'f' ( temp int) +0:51 Constant: +0:51 0 (const int) +0:51 Loop with condition tested first +0:51 Loop Condition +0:51 Compare Less Than ( temp bool) +0:51 'f' ( temp int) +0:51 Constant: +0:51 10 (const int) +0:51 Loop Body +0:52 Pre-Increment ( temp int) +0:52 'f' ( temp int) +0:51 Loop Terminal Expression +0:51 Pre-Increment ( temp int) +0:51 'f' ( temp int) +0:54 Sequence +0:54 move second child to first child ( temp int) +0:54 'x' ( temp int) +0:54 Constant: +0:54 1 (const int) +0:56 Sequence +0:56 Sequence +0:56 move second child to first child ( temp float) +0:56 'x' ( temp float) +0:56 Constant: +0:56 2.000000 +0:56 move second child to first child ( temp float) +0:56 'y' ( temp float) +0:56 'x' ( temp float) +0:60 Sequence +0:60 Sequence +0:60 move second child to first child ( temp int) +0:60 'x' ( temp int) +0:60 'x' ( temp int) +0:68 Sequence +0:68 Sequence +0:68 move second child to first child ( temp structure{ temp int x}) +0:68 'S' ( temp structure{ temp int x}) +0:68 Constant: +0:68 0 (const int) +0:69 x: direct index for structure ( temp int) +0:69 'S' ( temp structure{ temp int x}) +0:69 Constant: +0:69 0 (const int) +0:73 Constant: +0:73 0.000000 +0:? Linker Objects +0:? 'b' ( global bool) +0:? 'tan' ( 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/440.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/440.frag.out new file mode 100644 index 0000000..ff27641 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/440.frag.out @@ -0,0 +1,166 @@ +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 +ERROR: 0:24: 'qualifier' : cannot use auxiliary, memory, interpolation, or precision qualifier in a default qualifier declaration (declaration with no type) +ERROR: 0:25: 'qualifier' : cannot use auxiliary, memory, interpolation, or precision qualifier in a default qualifier declaration (declaration with no type) +ERROR: 0:26: 'qualifier' : cannot use auxiliary, memory, interpolation, or precision qualifier in a default qualifier declaration (declaration with no type) +ERROR: 0:29: 'layout qualifier' : cannot use offset or align qualifiers in a default qualifier declaration (declaration with no type) +ERROR: 0:30: 'layout qualifier' : cannot use offset or align qualifiers in a default qualifier declaration (declaration with no type) +ERROR: 0:30: 'layout' : offset/align can only be used on a uniform or buffer +ERROR: 0:31: 'layout qualifier' : cannot use offset or align qualifiers in a default qualifier declaration (declaration with no type) +ERROR: 0:31: 'layout' : offset/align can only be used on a uniform or buffer +ERROR: 0:33: 'layout qualifier' : cannot use offset or align qualifiers in a default qualifier declaration (declaration with no type) +ERROR: 0:34: 'layout qualifier' : cannot use offset or align qualifiers in a default qualifier declaration (declaration with no type) +ERROR: 0:34: 'layout' : offset/align can only be used on a uniform or buffer +ERROR: 0:35: 'layout qualifier' : cannot use offset or align qualifiers in a default qualifier declaration (declaration with no type) +ERROR: 0:35: 'layout' : offset/align can only be used on a uniform or buffer +ERROR: 0:37: 'offset' : only applies to block members, not blocks +ERROR: 0:38: 'layout' : offset/align can only be used on a uniform or buffer +ERROR: 0:38: 'offset' : only applies to block members, not blocks +ERROR: 0:39: 'output block' : not supported in this stage: fragment +ERROR: 0:39: 'layout' : offset/align can only be used on a uniform or buffer +ERROR: 0:39: 'offset' : only applies to block members, not blocks +ERROR: 0:42: 'align' : can only be used with std140 or std430 layout packing +ERROR: 0:43: 'align' : can only be used with std140 or std430 layout packing +ERROR: 0:43: 'layout' : offset/align can only be used on a uniform or buffer +ERROR: 0:44: 'output block' : not supported in this stage: fragment +ERROR: 0:44: 'align' : can only be used with std140 or std430 layout packing +ERROR: 0:44: 'layout' : offset/align can only be used on a uniform or buffer +ERROR: 0:46: 'offset' : cannot specify on a variable declaration +ERROR: 0:47: 'layout' : offset/align can only be used on a uniform or buffer +ERROR: 0:48: 'layout' : offset/align can only be used on a uniform or buffer +ERROR: 0:50: 'align' : cannot specify on a variable declaration +ERROR: 0:51: 'layout' : offset/align can only be used on a uniform or buffer +ERROR: 0:52: 'layout' : offset/align can only be used on a uniform or buffer +ERROR: 0:54: 'layout' : matrix or packing qualifiers can only be used on a uniform or buffer +ERROR: 0:55: 'layout' : cannot specify packing on a variable declaration +ERROR: 0:57: 'align' : must be a power of 2 +ERROR: 0:58: 'offset/align' : can only be used with std140 or std430 layout packing +ERROR: 0:62: 'offset/align' : can only be used with std140 or std430 layout packing +ERROR: 0:63: 'offset/align' : can only be used with std140 or std430 layout packing +ERROR: 0:62: 'layout' : offset/align can only be used on a uniform or buffer +ERROR: 0:63: 'layout' : offset/align can only be used on a uniform or buffer +ERROR: 0:84: 'align' : must be a power of 2 +ERROR: 0:83: 'offset' : cannot lie in previous members +ERROR: 0:85: 'offset' : must be a multiple of the member's alignment +ERROR: 0:103: 'align' : must be a power of 2 +ERROR: 0:105: 'align' : must be a power of 2 +ERROR: 0:102: 'offset' : cannot lie in previous members +ERROR: 0:104: 'offset' : must be a multiple of the member's alignment +ERROR: 49 compilation errors. No code generated. + + +Shader version: 440 +ERROR: node is still EOpNull! +0:144 Function Definition: interp( ( global void) +0:144 Function Parameters: +0:146 Sequence +0:146 interpolateAtCentroid ( global 2-component vector of float) +0:146 vector swizzle ( temp 2-component vector of float) +0:146 direct index ( smooth sample temp 3-component vector of float) +0:146 'sampInArray' ( smooth sample in 4-element array of 3-component vector of float) +0:146 Constant: +0:146 2 (const int) +0:146 Sequence +0:146 Constant: +0:146 0 (const int) +0:146 Constant: +0:146 1 (const int) +0:147 interpolateAtSample ( global float) +0:147 direct index ( temp float) +0:147 direct index ( smooth sample temp 3-component vector of float) +0:147 'sampInArray' ( smooth sample in 4-element array of 3-component vector of float) +0:147 Constant: +0:147 2 (const int) +0:147 Constant: +0:147 0 (const int) +0:147 Constant: +0:147 2 (const int) +0:150 Function Definition: layer( ( global int) +0:150 Function Parameters: +0:152 Sequence +0:152 Branch: Return with expression +0:152 'gl_Layer' ( flat in int Layer) +0:? Linker Objects +0:? 'a' (layout( location=4 component=2) smooth in 2-component vector of float) +0:? 'b' (layout( location=4 component=1) smooth in float) +0:? 'h' (layout( location=4 component=2) smooth in 2-component vector of float) +0:? 'c' (layout( location=3 component=2) smooth in 3-component vector of float) +0:? 'e' (layout( location=20 component=0) smooth in 6-element array of 3-component vector of float) +0:? 'f' (layout( location=20 component=3) smooth in 6-element array of float) +0:? 'be' (layout( location=30 component=3) out int) +0:? 'bf' (layout( location=30 component=0) out 3-component vector of float) +0:? 'inst1' (layout( column_major shared offset=12) uniform block{layout( column_major shared) uniform int a}) +0:? 'inst2' (layout( offset=12) in block{ in int a}) +0:? 'inst3' (layout( offset=12) out block{ out int a}) +0:? 'inst4' (layout( column_major std140 align=16) uniform block{layout( column_major std140 offset=0 align=16) uniform int a}) +0:? 'inst8' (layout( column_major shared align=16) uniform block{layout( column_major shared) uniform int a}) +0:? 'inst5' (layout( align=16) in block{ in int a}) +0:? 'inst6' (layout( align=16) out block{ out int a}) +0:? 'v1' (layout( offset=12) uniform 4-component vector of float) +0:? 'v2' (layout( offset=12) smooth in 4-component vector of float) +0:? 'v3' (layout( offset=12) out 4-component vector of float) +0:? 'v4' (layout( align=16) uniform 4-component vector of float) +0:? 'v5' (layout( align=16) smooth in 4-component vector of float) +0:? 'v6' (layout( align=16) out 4-component vector of float) +0:? 'v7' (layout( std140) uniform 4-component vector of float) +0:? 'inst7' (layout( column_major shared) uniform block{layout( column_major shared offset=12 align=4) uniform float f}) +0:? 'inst10' ( in block{layout( offset=12) in float f, layout( align=4) in float g}) +0:? 'inst9' (layout( column_major std430 align=32) uniform block{layout( column_major std430 align=32) uniform float e, layout( column_major std430 offset=12 align=4) uniform float f, layout( column_major std430 offset=20 align=32) uniform float g, layout( column_major std430 align=32) uniform float h}) +0:? 'inst11' (layout( column_major std430) uniform block{layout( column_major std430 offset=12 align=4) uniform float f, layout( column_major std430) uniform float g}) +0:? 'specExampleErrors' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float a, layout( column_major std140 offset=32) uniform 3-component vector of float b, layout( column_major std140 offset=48) uniform 2-component vector of float c, layout( column_major std140 offset=56) uniform double g, layout( column_major std140 offset=72) uniform double h}) +0:? 'specExample' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float a, layout( column_major std140 offset=32) uniform 3-component vector of float b, layout( column_major std140 offset=48) uniform 2-component vector of float d, layout( column_major std140 offset=64 align=16) uniform float e, layout( column_major std140 offset=72 align=2) uniform double f, layout( column_major std140 offset=80) uniform float h, layout( column_major std140 offset=128 align=64) uniform 3-component vector of double i, layout( column_major std140 offset=168 align=8) uniform float j}) +0:? 'specExampleErrors430' (layout( column_major std430) buffer block{layout( column_major std430 offset=0) buffer 4-component vector of float a, layout( column_major std430 offset=32) buffer 3-component vector of float b, layout( column_major std430 offset=48) buffer 2-component vector of float c, layout( column_major std430 offset=56) buffer double g, layout( column_major std430 offset=72) buffer double h, layout( column_major std430 offset=80) buffer double i}) +0:? 'specExample430' (layout( column_major std430) buffer block{layout( column_major std430 offset=0) buffer 4-component vector of float a, layout( column_major std430 offset=32) buffer 3-component vector of float b, layout( column_major std430 offset=48) buffer 2-component vector of float d, layout( column_major std430 offset=64 align=16) buffer float e, layout( column_major std430 offset=72 align=2) buffer double f, layout( column_major std430 offset=80) buffer float h, layout( column_major std430 offset=128 align=64) buffer 3-component vector of double i, layout( column_major std430 offset=168 align=8) buffer float j}) +0:? 'specExample4300' (layout( column_major std430 align=128) buffer block{layout( column_major std430 offset=0 align=128) buffer 4-component vector of float a, layout( column_major std430 offset=128 align=128) buffer 3-component vector of float b, layout( column_major std430 offset=256 align=128) buffer 2-component vector of float d, layout( column_major std430 offset=384 align=128) buffer float e, layout( column_major std430 offset=512 align=128) buffer double f, layout( column_major std430 offset=640 align=128) buffer float h, layout( column_major std430 offset=768 align=128) buffer 3-component vector of double i}) +0:? 'specExample4301' (layout( column_major std430 align=128) buffer block{layout( column_major std430 offset=0 align=128) buffer 4-component vector of float a, layout( column_major std430 offset=128 align=128) buffer 3-component vector of float b, layout( column_major std430 offset=256 align=128) buffer 2-component vector of float d, layout( column_major std430 offset=512 align=128) buffer float e, layout( column_major std430 offset=520 align=8) buffer double f, layout( column_major std430 offset=640 align=128) buffer float h, layout( column_major std430 offset=768 align=128) buffer 3-component vector of double i}) +0:? 'aconst' ( global 4-element array of int) +0:? 'bconst' ( global 64-element array of int) +0:? 'sampInArray' ( smooth sample in 4-element array of 3-component vector of float) + + +Linked fragment stage: + +ERROR: Linking fragment stage: Missing entry point: Each stage requires one entry point + +Shader version: 440 +ERROR: node is still EOpNull! +0:? Linker Objects +0:? 'a' (layout( location=4 component=2) smooth in 2-component vector of float) +0:? 'b' (layout( location=4 component=1) smooth in float) +0:? 'h' (layout( location=4 component=2) smooth in 2-component vector of float) +0:? 'c' (layout( location=3 component=2) smooth in 3-component vector of float) +0:? 'e' (layout( location=20 component=0) smooth in 6-element array of 3-component vector of float) +0:? 'f' (layout( location=20 component=3) smooth in 6-element array of float) +0:? 'be' (layout( location=30 component=3) out int) +0:? 'bf' (layout( location=30 component=0) out 3-component vector of float) +0:? 'inst1' (layout( column_major shared offset=12) uniform block{layout( column_major shared) uniform int a}) +0:? 'inst2' (layout( offset=12) in block{ in int a}) +0:? 'inst3' (layout( offset=12) out block{ out int a}) +0:? 'inst4' (layout( column_major std140 align=16) uniform block{layout( column_major std140 offset=0 align=16) uniform int a}) +0:? 'inst8' (layout( column_major shared align=16) uniform block{layout( column_major shared) uniform int a}) +0:? 'inst5' (layout( align=16) in block{ in int a}) +0:? 'inst6' (layout( align=16) out block{ out int a}) +0:? 'v1' (layout( offset=12) uniform 4-component vector of float) +0:? 'v2' (layout( offset=12) smooth in 4-component vector of float) +0:? 'v3' (layout( offset=12) out 4-component vector of float) +0:? 'v4' (layout( align=16) uniform 4-component vector of float) +0:? 'v5' (layout( align=16) smooth in 4-component vector of float) +0:? 'v6' (layout( align=16) out 4-component vector of float) +0:? 'v7' (layout( std140) uniform 4-component vector of float) +0:? 'inst7' (layout( column_major shared) uniform block{layout( column_major shared offset=12 align=4) uniform float f}) +0:? 'inst10' ( in block{layout( offset=12) in float f, layout( align=4) in float g}) +0:? 'inst9' (layout( column_major std430 align=32) uniform block{layout( column_major std430 align=32) uniform float e, layout( column_major std430 offset=12 align=4) uniform float f, layout( column_major std430 offset=20 align=32) uniform float g, layout( column_major std430 align=32) uniform float h}) +0:? 'inst11' (layout( column_major std430) uniform block{layout( column_major std430 offset=12 align=4) uniform float f, layout( column_major std430) uniform float g}) +0:? 'specExampleErrors' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float a, layout( column_major std140 offset=32) uniform 3-component vector of float b, layout( column_major std140 offset=48) uniform 2-component vector of float c, layout( column_major std140 offset=56) uniform double g, layout( column_major std140 offset=72) uniform double h}) +0:? 'specExample' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float a, layout( column_major std140 offset=32) uniform 3-component vector of float b, layout( column_major std140 offset=48) uniform 2-component vector of float d, layout( column_major std140 offset=64 align=16) uniform float e, layout( column_major std140 offset=72 align=2) uniform double f, layout( column_major std140 offset=80) uniform float h, layout( column_major std140 offset=128 align=64) uniform 3-component vector of double i, layout( column_major std140 offset=168 align=8) uniform float j}) +0:? 'specExampleErrors430' (layout( column_major std430) buffer block{layout( column_major std430 offset=0) buffer 4-component vector of float a, layout( column_major std430 offset=32) buffer 3-component vector of float b, layout( column_major std430 offset=48) buffer 2-component vector of float c, layout( column_major std430 offset=56) buffer double g, layout( column_major std430 offset=72) buffer double h, layout( column_major std430 offset=80) buffer double i}) +0:? 'specExample430' (layout( column_major std430) buffer block{layout( column_major std430 offset=0) buffer 4-component vector of float a, layout( column_major std430 offset=32) buffer 3-component vector of float b, layout( column_major std430 offset=48) buffer 2-component vector of float d, layout( column_major std430 offset=64 align=16) buffer float e, layout( column_major std430 offset=72 align=2) buffer double f, layout( column_major std430 offset=80) buffer float h, layout( column_major std430 offset=128 align=64) buffer 3-component vector of double i, layout( column_major std430 offset=168 align=8) buffer float j}) +0:? 'specExample4300' (layout( column_major std430 align=128) buffer block{layout( column_major std430 offset=0 align=128) buffer 4-component vector of float a, layout( column_major std430 offset=128 align=128) buffer 3-component vector of float b, layout( column_major std430 offset=256 align=128) buffer 2-component vector of float d, layout( column_major std430 offset=384 align=128) buffer float e, layout( column_major std430 offset=512 align=128) buffer double f, layout( column_major std430 offset=640 align=128) buffer float h, layout( column_major std430 offset=768 align=128) buffer 3-component vector of double i}) +0:? 'specExample4301' (layout( column_major std430 align=128) buffer block{layout( column_major std430 offset=0 align=128) buffer 4-component vector of float a, layout( column_major std430 offset=128 align=128) buffer 3-component vector of float b, layout( column_major std430 offset=256 align=128) buffer 2-component vector of float d, layout( column_major std430 offset=512 align=128) buffer float e, layout( column_major std430 offset=520 align=8) buffer double f, layout( column_major std430 offset=640 align=128) buffer float h, layout( column_major std430 offset=768 align=128) buffer 3-component vector of double i}) +0:? 'aconst' ( global 4-element array of int) +0:? 'bconst' ( global 64-element array of int) +0:? 'sampInArray' ( smooth sample in 4-element array of 3-component vector of float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/440.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/440.vert.out new file mode 100644 index 0000000..3448113 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/440.vert.out @@ -0,0 +1,241 @@ +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 +ERROR: 0:26: 'location' : overlapping use of location 2 +ERROR: 0:31: 'location' : overlapping use of location 15 +ERROR: 0:32: 'location' : overlapping use of location 10 +ERROR: 0:37: 'location' : overlapping use of location 20 +ERROR: 0:39: 'component' : type overflows the available 4 components +ERROR: 0:40: 'component' : type overflows the available 4 components +ERROR: 0:42: 'component' : cannot apply to a matrix, structure, or block +ERROR: 0:43: 'component' : cannot apply to a matrix, structure, or block +ERROR: 0:44: 'component' : cannot apply to a matrix, structure, or block +ERROR: 0:46: 'component' : must specify 'location' to use 'component' +ERROR: 0:52: 'location' : overlapping use of location 40 +ERROR: 0:54: 'component' : type overflows the available 4 components +ERROR: 0:55: 'component' : type overflows the available 4 components +ERROR: 0:57: 'component' : cannot apply to a matrix, structure, or block +ERROR: 0:58: 'component' : cannot apply to a matrix, structure, or block +ERROR: 0:61: 'location/component/index' : cannot declare a default, use a full declaration +ERROR: 0:66: 'component' : doubles cannot start on an odd-numbered component +ERROR: 0:67: 'component' : type overflows the available 4 components +ERROR: 0:71: 'location' : overlapping use of location 55 +ERROR: 0:75: 'location' : overlapping use of location 57 +ERROR: 0:78: 'location' : overlapping use of location 59 +ERROR: 0:95: 'xfb layout qualifier' : can only be used on an output +ERROR: 0:101: 'xfb_offset' : cannot declare a default, use a full declaration +ERROR: 0:111: 'xfb_buffer' : member cannot contradict block (or what block inherited from global) +ERROR: 0:116: 'xfb_buffer' : member cannot contradict block (or what block inherited from global) +ERROR: 0:116: 'xfb_offset' : overlapping offsets at offset 32 in buffer 3 +ERROR: 0:117: 'xfb_offset' : overlapping offsets at offset 0 in buffer 2 +ERROR: 0:119: 'xfb_offset' : overlapping offsets at offset 24 in buffer 2 +ERROR: 0:122: 'xfb_stride' : all stride settings must match for xfb buffer 15 +ERROR: 0:126: 'xfb_offset' : overlapping offsets at offset 4 in buffer 1 +ERROR: 0:128: 'xfb_stride' : all stride settings must match for xfb buffer 3 +ERROR: 0:129: 'xfb_stride' : all stride settings must match for xfb buffer 3 +ERROR: 0:133: 'xfb_stride' : all stride settings must match for xfb buffer 3 +ERROR: 0:131: 'xfb_stride' : all stride settings must match for xfb buffer 3 +ERROR: 0:152: 'xfb_offset' : overlapping offsets at offset 64 in buffer 0 +ERROR: 0:157: 'xfb_buffer' : buffer is too large: gl_MaxTransformFeedbackBuffers is 4 +ERROR: 0:158: 'xfb_offset' : must be a multiple of size of first component +ERROR: 0:159: 'xfb_offset' : type contains double; xfb_offset must be a multiple of 8 +ERROR: 0:161: 'xfb_offset' : must be a multiple of size of first component +ERROR: 0:162: 'xfb_offset' : type contains double; xfb_offset must be a multiple of 8 +ERROR: 0:166: 'xfb_buffer' : buffer is too large: gl_MaxTransformFeedbackBuffers is 4 +ERROR: 0:169: 'xfb_buffer' : buffer is too large: gl_MaxTransformFeedbackBuffers is 4 +ERROR: 0:169: 'xfb_stride' : 1/4 stride is too large: gl_MaxTransformFeedbackInterleavedComponents is 64 +ERROR: 0:171: 'xfb_buffer' : buffer is too large: gl_MaxTransformFeedbackBuffers is 4 +ERROR: 0:179: 'gl_BaseVertexARB' : required extension not requested: GL_ARB_shader_draw_parameters +ERROR: 0:179: 'gl_BaseInstanceARB' : required extension not requested: GL_ARB_shader_draw_parameters +ERROR: 0:179: 'gl_DrawIDARB' : required extension not requested: GL_ARB_shader_draw_parameters +ERROR: 0:187: 'assign' : l-value required "gl_BaseVertexARB" (can't modify shader input) +ERROR: 0:188: 'assign' : l-value required "gl_BaseInstanceARB" (can't modify shader input) +ERROR: 0:189: 'assign' : l-value required "gl_DrawIDARB" (can't modify shader input) +ERROR: 0:190: 'glBaseInstanceARB' : undeclared identifier +ERROR: 54 compilation errors. No code generated. + + +Shader version: 440 +Requested GL_ARB_shader_draw_parameters +in xfb mode +ERROR: node is still EOpNull! +0:177 Function Definition: drawParamsBad( ( global int) +0:177 Function Parameters: +0:179 Sequence +0:179 Branch: Return with expression +0:179 add ( temp int) +0:179 add ( temp int) +0:179 'gl_BaseVertexARB' ( in int BaseVertex) +0:179 'gl_BaseInstanceARB' ( in int BaseInstance) +0:179 'gl_DrawIDARB' ( in int DrawId) +0:184 Function Definition: drawParams( ( global int) +0:184 Function Parameters: +0:186 Sequence +0:186 Branch: Return with expression +0:186 add ( temp int) +0:186 add ( temp int) +0:186 'gl_BaseVertexARB' ( in int BaseVertex) +0:186 'gl_BaseInstanceARB' ( in int BaseInstance) +0:186 'gl_DrawIDARB' ( in int DrawId) +0:187 move second child to first child ( temp int) +0:187 'gl_BaseVertexARB' ( in int BaseVertex) +0:187 Constant: +0:187 3 (const int) +0:188 move second child to first child ( temp int) +0:188 'gl_BaseInstanceARB' ( in int BaseInstance) +0:188 Constant: +0:188 3 (const int) +0:189 move second child to first child ( temp int) +0:189 'gl_DrawIDARB' ( in int DrawId) +0:189 Constant: +0:189 3 (const int) +0:190 'glBaseInstanceARB' ( temp float) +0:? Linker Objects +0:? 'a' (layout( location=2 component=2) in 2-component vector of float) +0:? 'b' (layout( location=2 component=1) in float) +0:? 'c' (layout( location=3 component=2) in 3-component vector of float) +0:? 'd' (layout( location=0 component=3) in 4-element array of float) +0:? 'e' (layout( location=4 component=0) in 5-element array of 3-component vector of float) +0:? 'f' (layout( location=4 component=3) in 5-element array of float) +0:? 'g' (layout( location=9) in 6-element array of float) +0:? 'h' (layout( location=4 component=2) in 2-component vector of float) +0:? 'i' (layout( location=3 component=2) smooth out 2-component vector of float) +0:? 'j' (layout( location=3 component=0) smooth out 2-component vector of float) +0:? 'k' (layout( location=4 component=2) smooth out 2-component vector of float) +0:? 'm' (layout( location=4 component=2) smooth out 2-component vector of float) +0:? 'n' (layout( location=2 component=2) smooth out 2-component vector of float) +0:? 'p' (layout( location=2 component=0) smooth out 3-component vector of float) +0:? 'q' (layout( location=10 component=3) smooth out 6-element array of float) +0:? 'r' (layout( location=10 component=0) smooth out 6-element array of 3-component vector of float) +0:? 's' (layout( location=15 component=3) smooth out float) +0:? 't' (layout( location=10 component=1) smooth out float) +0:? 'u' (layout( location=20 component=2) smooth out float) +0:? 'v' (layout( location=20 component=0) smooth out float) +0:? 'w' (layout( location=20 component=3) smooth out float) +0:? 'x' (layout( location=20 component=1) smooth out 2-component vector of float) +0:? 'y' (layout( location=30 component=3) smooth out 2-component vector of float) +0:? 'z' (layout( location=31 component=1) smooth out 4-component vector of float) +0:? 'ba' (layout( location=32 component=1) smooth out 4X4 matrix of float) +0:? 'Ss' (layout( location=33 component=1) smooth out structure{ global int a}) +0:? 'bb' (layout( location=34 component=1) out block{ out int a}) +0:? 'bc' (layout( location=4095 component=1) smooth out float) +0:? 'bd' ( out block{layout( location=40 component=2) out float u, layout( location=40 component=0) out float v, layout( location=40 component=3) out float w, layout( location=40 component=1) out 2-component vector of float x, layout( location=41 component=3) out 2-component vector of float y, layout( location=42 component=1) out 4-component vector of float z, layout( location=42 component=1) out 4X4 matrix of float ba, layout( location=43 component=1) out structure{ global int a} Ss}) +0:? 'be' (layout( location=50 component=3) smooth out int) +0:? 'bf' (layout( location=50 component=0) smooth out 3-component vector of float) +0:? 'dfo' (layout( location=51 component=1) smooth out double) +0:? 'dvo' (layout( location=52 component=2) smooth out 2-component vector of double) +0:? 'dfo2' (layout( location=53) smooth out double) +0:? 'ffv2' (layout( location=53 component=2) smooth out 2-component vector of float) +0:? 'dvec4out' (layout( location=54) smooth out 4-component vector of double) +0:? 'overf' (layout( location=55) smooth out float) +0:? 'df2o' (layout( location=56 component=1) smooth out 2-component vector of float) +0:? 'sf2o' (layout( location=56 component=3) smooth out float) +0:? 'dv3o' (layout( location=57 component=2) smooth out 2-component vector of float) +0:? 'sf4o' (layout( location=57 component=3) smooth out float) +0:? 'dv3o2' (layout( location=58) flat out 3-component vector of double) +0:? 'dfo3' (layout( location=59 component=2) flat out double) +0:? 'dfo4' (layout( location=59 component=0) flat out double) +0:? 'bbinst1' ( out block{ out 4-component vector of float bbv}) +0:? 'bbinst2' ( out block{layout( xfb_buffer=0 xfb_offset=64) out 4-component vector of float bbv}) +0:? 'bbinst3' ( out block{layout( xfb_buffer=3 xfb_offset=16) out 4-component vector of float bbv}) +0:? 'ubbinst3' (layout( column_major shared) uniform block{layout( column_major shared xfb_offset=16) uniform 4-component vector of float bbv}) +0:? 'bg' (layout( xfb_buffer=2 xfb_offset=48 xfb_stride=80) smooth out 4-component vector of float) +0:? 'bh' (layout( xfb_buffer=3 xfb_offset=32 xfb_stride=64) smooth out 4-component vector of float) +0:? 'bbinst4' (layout( xfb_stride=80) out block{layout( xfb_buffer=2 xfb_offset=16) out 4-component vector of float bbv1, layout( xfb_buffer=2 xfb_offset=32) out 4-component vector of float bbv2}) +0:? 'bbinst5' ( out block{layout( xfb_buffer=3 xfb_offset=0) out 4-component vector of float bbv1, layout( xfb_buffer=3 xfb_offset=48 xfb_stride=64) out 4-component vector of float bbv2, out 4-component vector of float bbv3}) +0:? 'bbinst6' ( out block{layout( xfb_buffer=2 xfb_offset=0) out 4-component vector of float bbv1, layout( xfb_buffer=3 xfb_offset=32 xfb_stride=64) out 4-component vector of float bbv2, layout( xfb_buffer=2 xfb_offset=0) out 4-component vector of float bbv3, out 4-component vector of float bbv5, layout( xfb_buffer=2 xfb_offset=24) out float bbf6}) +0:? 'bj' (layout( xfb_buffer=1 xfb_offset=4) smooth out float) +0:? 'bk' (layout( xfb_buffer=1 xfb_offset=0) smooth out 2-component vector of int) +0:? 'bl' (layout( xfb_stride=48) smooth out float) +0:? 'bbinst7' (layout( xfb_stride=48) out block{layout( xfb_stride=64) out 4-component vector of float bbv1, layout( xfb_stride=32) out 4-component vector of float bbv2}) +0:? 'bbinst8' (layout( xfb_stride=92) out block{layout( xfb_buffer=0 xfb_offset=0) out bool b, layout( xfb_buffer=0 xfb_offset=8) out structure{ global bool b, global structure{ global int i, global double d, global float f} s, global 2-component vector of float v2} t, layout( xfb_buffer=0 xfb_offset=48) out int i, layout( xfb_buffer=0 xfb_offset=52) out 3X3 matrix of float m3, layout( xfb_buffer=0 xfb_offset=88) out float f, layout( xfb_buffer=0 xfb_offset=92) out float g}) +0:? 'bbinst9' ( out block{layout( xfb_buffer=4 xfb_offset=1) out bool b, layout( xfb_buffer=4 xfb_offset=12) out structure{ global bool b, global structure{ global int i, global double d, global float f} s, global 2-component vector of float v2} t, layout( xfb_buffer=4 xfb_offset=52) out 3X3 matrix of float m3, layout( xfb_buffer=4 xfb_offset=90) out int i, layout( xfb_buffer=4 xfb_offset=98) out double d, layout( xfb_buffer=4 xfb_offset=108) out structure{ global int a} s}) +0:? 'bm' (layout( xfb_buffer=5 xfb_offset=0) smooth out float) +0:? 'bbinst10' ( out block{layout( xfb_buffer=7 xfb_offset=0) out 4X4 matrix of double m1, layout( xfb_buffer=7 xfb_offset=128) out 4X4 matrix of double m2, layout( xfb_buffer=7 xfb_offset=256) out float f}) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + + +Linked vertex stage: + +ERROR: Linking vertex stage: Missing entry point: Each stage requires one entry point +ERROR: Linking vertex stage: xfb_stride is too small to hold all buffer entries: +ERROR: xfb_buffer 0, xfb_stride 92, minimum stride needed: 96 +ERROR: Linking vertex stage: xfb_stride must be multiple of 8 for buffer holding a double: +ERROR: xfb_buffer 0, xfb_stride 92 +ERROR: Linking vertex stage: xfb_stride must be multiple of 4: +ERROR: xfb_buffer 5, xfb_stride 6 +ERROR: Linking vertex stage: xfb_stride is too large: +ERROR: xfb_buffer 7, components (1/4 stride) needed are 66, gl_MaxTransformFeedbackInterleavedComponents is 64 + +Shader version: 440 +Requested GL_ARB_shader_draw_parameters +in xfb mode +ERROR: node is still EOpNull! +0:? Linker Objects +0:? 'a' (layout( location=2 component=2) in 2-component vector of float) +0:? 'b' (layout( location=2 component=1) in float) +0:? 'c' (layout( location=3 component=2) in 3-component vector of float) +0:? 'd' (layout( location=0 component=3) in 4-element array of float) +0:? 'e' (layout( location=4 component=0) in 5-element array of 3-component vector of float) +0:? 'f' (layout( location=4 component=3) in 5-element array of float) +0:? 'g' (layout( location=9) in 6-element array of float) +0:? 'h' (layout( location=4 component=2) in 2-component vector of float) +0:? 'i' (layout( location=3 component=2) smooth out 2-component vector of float) +0:? 'j' (layout( location=3 component=0) smooth out 2-component vector of float) +0:? 'k' (layout( location=4 component=2) smooth out 2-component vector of float) +0:? 'm' (layout( location=4 component=2) smooth out 2-component vector of float) +0:? 'n' (layout( location=2 component=2) smooth out 2-component vector of float) +0:? 'p' (layout( location=2 component=0) smooth out 3-component vector of float) +0:? 'q' (layout( location=10 component=3) smooth out 6-element array of float) +0:? 'r' (layout( location=10 component=0) smooth out 6-element array of 3-component vector of float) +0:? 's' (layout( location=15 component=3) smooth out float) +0:? 't' (layout( location=10 component=1) smooth out float) +0:? 'u' (layout( location=20 component=2) smooth out float) +0:? 'v' (layout( location=20 component=0) smooth out float) +0:? 'w' (layout( location=20 component=3) smooth out float) +0:? 'x' (layout( location=20 component=1) smooth out 2-component vector of float) +0:? 'y' (layout( location=30 component=3) smooth out 2-component vector of float) +0:? 'z' (layout( location=31 component=1) smooth out 4-component vector of float) +0:? 'ba' (layout( location=32 component=1) smooth out 4X4 matrix of float) +0:? 'Ss' (layout( location=33 component=1) smooth out structure{ global int a}) +0:? 'bb' (layout( location=34 component=1) out block{ out int a}) +0:? 'bc' (layout( location=4095 component=1) smooth out float) +0:? 'bd' ( out block{layout( location=40 component=2) out float u, layout( location=40 component=0) out float v, layout( location=40 component=3) out float w, layout( location=40 component=1) out 2-component vector of float x, layout( location=41 component=3) out 2-component vector of float y, layout( location=42 component=1) out 4-component vector of float z, layout( location=42 component=1) out 4X4 matrix of float ba, layout( location=43 component=1) out structure{ global int a} Ss}) +0:? 'be' (layout( location=50 component=3) smooth out int) +0:? 'bf' (layout( location=50 component=0) smooth out 3-component vector of float) +0:? 'dfo' (layout( location=51 component=1) smooth out double) +0:? 'dvo' (layout( location=52 component=2) smooth out 2-component vector of double) +0:? 'dfo2' (layout( location=53) smooth out double) +0:? 'ffv2' (layout( location=53 component=2) smooth out 2-component vector of float) +0:? 'dvec4out' (layout( location=54) smooth out 4-component vector of double) +0:? 'overf' (layout( location=55) smooth out float) +0:? 'df2o' (layout( location=56 component=1) smooth out 2-component vector of float) +0:? 'sf2o' (layout( location=56 component=3) smooth out float) +0:? 'dv3o' (layout( location=57 component=2) smooth out 2-component vector of float) +0:? 'sf4o' (layout( location=57 component=3) smooth out float) +0:? 'dv3o2' (layout( location=58) flat out 3-component vector of double) +0:? 'dfo3' (layout( location=59 component=2) flat out double) +0:? 'dfo4' (layout( location=59 component=0) flat out double) +0:? 'bbinst1' ( out block{ out 4-component vector of float bbv}) +0:? 'bbinst2' ( out block{layout( xfb_buffer=0 xfb_offset=64) out 4-component vector of float bbv}) +0:? 'bbinst3' ( out block{layout( xfb_buffer=3 xfb_offset=16) out 4-component vector of float bbv}) +0:? 'ubbinst3' (layout( column_major shared) uniform block{layout( column_major shared xfb_offset=16) uniform 4-component vector of float bbv}) +0:? 'bg' (layout( xfb_buffer=2 xfb_offset=48 xfb_stride=80) smooth out 4-component vector of float) +0:? 'bh' (layout( xfb_buffer=3 xfb_offset=32 xfb_stride=64) smooth out 4-component vector of float) +0:? 'bbinst4' (layout( xfb_stride=80) out block{layout( xfb_buffer=2 xfb_offset=16) out 4-component vector of float bbv1, layout( xfb_buffer=2 xfb_offset=32) out 4-component vector of float bbv2}) +0:? 'bbinst5' ( out block{layout( xfb_buffer=3 xfb_offset=0) out 4-component vector of float bbv1, layout( xfb_buffer=3 xfb_offset=48 xfb_stride=64) out 4-component vector of float bbv2, out 4-component vector of float bbv3}) +0:? 'bbinst6' ( out block{layout( xfb_buffer=2 xfb_offset=0) out 4-component vector of float bbv1, layout( xfb_buffer=3 xfb_offset=32 xfb_stride=64) out 4-component vector of float bbv2, layout( xfb_buffer=2 xfb_offset=0) out 4-component vector of float bbv3, out 4-component vector of float bbv5, layout( xfb_buffer=2 xfb_offset=24) out float bbf6}) +0:? 'bj' (layout( xfb_buffer=1 xfb_offset=4) smooth out float) +0:? 'bk' (layout( xfb_buffer=1 xfb_offset=0) smooth out 2-component vector of int) +0:? 'bl' (layout( xfb_stride=48) smooth out float) +0:? 'bbinst7' (layout( xfb_stride=48) out block{layout( xfb_stride=64) out 4-component vector of float bbv1, layout( xfb_stride=32) out 4-component vector of float bbv2}) +0:? 'bbinst8' (layout( xfb_stride=92) out block{layout( xfb_buffer=0 xfb_offset=0) out bool b, layout( xfb_buffer=0 xfb_offset=8) out structure{ global bool b, global structure{ global int i, global double d, global float f} s, global 2-component vector of float v2} t, layout( xfb_buffer=0 xfb_offset=48) out int i, layout( xfb_buffer=0 xfb_offset=52) out 3X3 matrix of float m3, layout( xfb_buffer=0 xfb_offset=88) out float f, layout( xfb_buffer=0 xfb_offset=92) out float g}) +0:? 'bbinst9' ( out block{layout( xfb_buffer=4 xfb_offset=1) out bool b, layout( xfb_buffer=4 xfb_offset=12) out structure{ global bool b, global structure{ global int i, global double d, global float f} s, global 2-component vector of float v2} t, layout( xfb_buffer=4 xfb_offset=52) out 3X3 matrix of float m3, layout( xfb_buffer=4 xfb_offset=90) out int i, layout( xfb_buffer=4 xfb_offset=98) out double d, layout( xfb_buffer=4 xfb_offset=108) out structure{ global int a} s}) +0:? 'bm' (layout( xfb_buffer=5 xfb_offset=0) smooth out float) +0:? 'bbinst10' ( out block{layout( xfb_buffer=7 xfb_offset=0) out 4X4 matrix of double m1, layout( xfb_buffer=7 xfb_offset=128) out 4X4 matrix of double m2, layout( xfb_buffer=7 xfb_offset=256) out float f}) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.comp.out new file mode 100644 index 0000000..203c4b2 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.comp.out @@ -0,0 +1,18 @@ +450.comp +Warning, version 450 is not yet complete; most version-specific features are present, but some are missing. + +Shader version: 450 +local_size = (1, 1, 1) +0:? Sequence +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 +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 new file mode 100644 index 0000000..297ae63 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.frag.out @@ -0,0 +1,276 @@ +450.frag +Warning, version 450 is not yet complete; most version-specific features are present, but some are missing. + +Shader version: 450 +0:? Sequence +0:8 Function Definition: main( ( global void) +0:8 Function Parameters: +0:10 Sequence +0:10 Sequence +0:10 move second child to first child ( temp 2-component vector of float) +0:10 'v2' ( temp 2-component vector of float) +0:10 dPdxFine ( global 2-component vector of float) +0:10 'in2' ( smooth in 2-component vector of float) +0:11 Sequence +0:11 move second child to first child ( temp 3-component vector of float) +0:11 'v3' ( temp 3-component vector of float) +0:11 dPdyCoarse ( global 3-component vector of float) +0:11 'in3' ( smooth in 3-component vector of float) +0:12 Sequence +0:12 move second child to first child ( temp 4-component vector of float) +0:12 'v4' ( temp 4-component vector of float) +0:12 fwidth ( global 4-component vector of float) +0:12 'in4' ( smooth in 4-component vector of float) +0:13 move second child to first child ( temp 4-component vector of float) +0:13 'v4' ( temp 4-component vector of float) +0:13 dPdyFine ( global 4-component vector of float) +0:13 'in4' ( smooth in 4-component vector of float) +0:14 move second child to first child ( temp 3-component vector of float) +0:14 'v3' ( temp 3-component vector of float) +0:14 dPdyFine ( global 3-component vector of float) +0:14 'in3' ( smooth in 3-component vector of float) +0:15 Sequence +0:15 move second child to first child ( temp float) +0:15 'f' ( temp float) +0:15 add ( temp float) +0:15 add ( temp float) +0:15 dPdx ( global float) +0:15 'in1' ( smooth in float) +0:15 dPdxFine ( global float) +0:15 'in1' ( smooth in float) +0:15 dPdxCoarse ( global float) +0:15 'in1' ( smooth in float) +0:16 move second child to first child ( temp 4-component vector of float) +0:16 'v4' ( temp 4-component vector of float) +0:16 add ( temp 4-component vector of float) +0:16 fwidthCoarse ( global 4-component vector of float) +0:16 'in4' ( smooth in 4-component vector of float) +0:16 fwidthFine ( global 4-component vector of float) +0:16 'in4' ( smooth in 4-component vector of float) +0:18 Sequence +0:18 move second child to first child ( temp float) +0:18 'cull' ( temp float) +0:18 direct index ( smooth temp float CullDistance) +0:18 'gl_CullDistance' ( smooth in 6-element array of float CullDistance) +0:18 Constant: +0:18 2 (const int) +0:19 Sequence +0:19 move second child to first child ( temp float) +0:19 'consts' ( temp float) +0:19 Constant: +0:19 20.000000 +0:21 Test condition and select ( temp void) +0:21 Condition +0:21 'gl_HelperInvocation' ( in bool HelperInvocation) +0:21 true case +0:22 Pre-Increment ( temp 4-component vector of float) +0:22 'v4' ( temp 4-component vector of float) +0:24 Sequence +0:24 move second child to first child ( temp int) +0:24 'sum' ( temp int) +0:24 Constant: +0:24 32 (const int) +0:32 Sequence +0:32 move second child to first child ( temp 2-component vector of bool) +0:32 'b2' ( temp 2-component vector of bool) +0:32 mix ( global 2-component vector of bool) +0:32 Construct bvec2 ( temp 2-component vector of bool) +0:32 'b1' ( temp bool) +0:32 Construct bvec2 ( temp 2-component vector of bool) +0:32 'b3' ( temp bool) +0:32 Construct bvec2 ( temp 2-component vector of bool) +0:32 'b' ( temp bool) +0:33 Sequence +0:33 move second child to first child ( temp uint) +0:33 'um' ( temp uint) +0:33 mix ( global uint) +0:33 'uin' ( temp uint) +0:33 'uin' ( temp uint) +0:33 'b' ( temp bool) +0:34 Sequence +0:34 move second child to first child ( temp 3-component vector of int) +0:34 'im3' ( temp 3-component vector of int) +0:34 mix ( global 3-component vector of int) +0:34 Construct ivec3 ( temp 3-component vector of int) +0:34 Convert uint to int ( temp int) +0:34 'uin' ( temp uint) +0:34 Construct ivec3 ( temp 3-component vector of int) +0:34 Convert uint to int ( temp int) +0:34 'uin' ( temp uint) +0:34 Construct bvec3 ( temp 3-component vector of bool) +0:34 'b' ( temp bool) +0:42 Function Definition: foo( ( global void) +0:42 Function Parameters: +0:44 Sequence +0:44 Sequence +0:44 move second child to first child ( temp int) +0:44 's' ( temp int) +0:44 textureSamples ( global int) +0:44 's2dms' ( uniform sampler2DMS) +0:45 add second child into first child ( temp int) +0:45 's' ( temp int) +0:45 textureSamples ( global int) +0:45 'us2dmsa' ( uniform usampler2DMSArray) +0:46 add second child into first child ( temp int) +0:46 's' ( temp int) +0:46 imageQuerySamples ( global int) +0:46 'ii2dms' (layout( rgba32i) uniform iimage2DMS) +0:47 add second child into first child ( temp int) +0:47 's' ( temp int) +0:47 imageQuerySamples ( global int) +0:47 'i2dmsa' (layout( rgba32f) uniform image2DMSArray) +0:48 Sequence +0:48 move second child to first child ( temp float) +0:48 'f' ( temp float) +0:48 imageAtomicExchange ( global float) +0:48 'i2dmsa' (layout( rgba32f) uniform image2DMSArray) +0:48 Convert float to int ( temp 3-component vector of int) +0:48 'in3' ( smooth in 3-component vector of float) +0:48 Constant: +0:48 2 (const int) +0:48 Constant: +0:48 4.500000 +0:53 Function Definition: cull(i1; ( global float) +0:53 Function Parameters: +0:53 'i' ( in int) +0:55 Sequence +0:55 Branch: Return with expression +0:55 Test condition and select ( temp float) +0:55 Condition +0:55 Compare Greater Than or Equal ( temp bool) +0:55 'i' ( in int) +0:55 Constant: +0:55 6 (const int) +0:55 true case +0:55 direct index ( smooth temp float CullDistance) +0:55 'gl_CullDistance' ( smooth in 6-element array of float CullDistance) +0:55 Constant: +0:55 5 (const int) +0:55 false case +0:55 indirect index ( smooth temp float CullDistance) +0:55 'gl_CullDistance' ( smooth in 6-element array of float CullDistance) +0:55 'i' ( in int) +0:? Linker Objects +0:? 'in1' ( smooth in float) +0:? 'in2' ( smooth in 2-component vector of float) +0:? 'in3' ( smooth in 3-component vector of float) +0:? 'in4' ( smooth in 4-component vector of float) +0:? 'gl_CullDistance' ( smooth in 6-element array of float CullDistance) +0:? 's2dms' ( uniform sampler2DMS) +0:? 'us2dmsa' ( uniform usampler2DMSArray) +0:? 'ii2dms' (layout( rgba32i) uniform iimage2DMS) +0:? 'i2dmsa' (layout( rgba32f) uniform image2DMSArray) + + +Linked fragment stage: + + +Shader version: 450 +0:? Sequence +0:8 Function Definition: main( ( global void) +0:8 Function Parameters: +0:10 Sequence +0:10 Sequence +0:10 move second child to first child ( temp 2-component vector of float) +0:10 'v2' ( temp 2-component vector of float) +0:10 dPdxFine ( global 2-component vector of float) +0:10 'in2' ( smooth in 2-component vector of float) +0:11 Sequence +0:11 move second child to first child ( temp 3-component vector of float) +0:11 'v3' ( temp 3-component vector of float) +0:11 dPdyCoarse ( global 3-component vector of float) +0:11 'in3' ( smooth in 3-component vector of float) +0:12 Sequence +0:12 move second child to first child ( temp 4-component vector of float) +0:12 'v4' ( temp 4-component vector of float) +0:12 fwidth ( global 4-component vector of float) +0:12 'in4' ( smooth in 4-component vector of float) +0:13 move second child to first child ( temp 4-component vector of float) +0:13 'v4' ( temp 4-component vector of float) +0:13 dPdyFine ( global 4-component vector of float) +0:13 'in4' ( smooth in 4-component vector of float) +0:14 move second child to first child ( temp 3-component vector of float) +0:14 'v3' ( temp 3-component vector of float) +0:14 dPdyFine ( global 3-component vector of float) +0:14 'in3' ( smooth in 3-component vector of float) +0:15 Sequence +0:15 move second child to first child ( temp float) +0:15 'f' ( temp float) +0:15 add ( temp float) +0:15 add ( temp float) +0:15 dPdx ( global float) +0:15 'in1' ( smooth in float) +0:15 dPdxFine ( global float) +0:15 'in1' ( smooth in float) +0:15 dPdxCoarse ( global float) +0:15 'in1' ( smooth in float) +0:16 move second child to first child ( temp 4-component vector of float) +0:16 'v4' ( temp 4-component vector of float) +0:16 add ( temp 4-component vector of float) +0:16 fwidthCoarse ( global 4-component vector of float) +0:16 'in4' ( smooth in 4-component vector of float) +0:16 fwidthFine ( global 4-component vector of float) +0:16 'in4' ( smooth in 4-component vector of float) +0:18 Sequence +0:18 move second child to first child ( temp float) +0:18 'cull' ( temp float) +0:18 direct index ( smooth temp float CullDistance) +0:18 'gl_CullDistance' ( smooth in 6-element array of float CullDistance) +0:18 Constant: +0:18 2 (const int) +0:19 Sequence +0:19 move second child to first child ( temp float) +0:19 'consts' ( temp float) +0:19 Constant: +0:19 20.000000 +0:21 Test condition and select ( temp void) +0:21 Condition +0:21 'gl_HelperInvocation' ( in bool HelperInvocation) +0:21 true case +0:22 Pre-Increment ( temp 4-component vector of float) +0:22 'v4' ( temp 4-component vector of float) +0:24 Sequence +0:24 move second child to first child ( temp int) +0:24 'sum' ( temp int) +0:24 Constant: +0:24 32 (const int) +0:32 Sequence +0:32 move second child to first child ( temp 2-component vector of bool) +0:32 'b2' ( temp 2-component vector of bool) +0:32 mix ( global 2-component vector of bool) +0:32 Construct bvec2 ( temp 2-component vector of bool) +0:32 'b1' ( temp bool) +0:32 Construct bvec2 ( temp 2-component vector of bool) +0:32 'b3' ( temp bool) +0:32 Construct bvec2 ( temp 2-component vector of bool) +0:32 'b' ( temp bool) +0:33 Sequence +0:33 move second child to first child ( temp uint) +0:33 'um' ( temp uint) +0:33 mix ( global uint) +0:33 'uin' ( temp uint) +0:33 'uin' ( temp uint) +0:33 'b' ( temp bool) +0:34 Sequence +0:34 move second child to first child ( temp 3-component vector of int) +0:34 'im3' ( temp 3-component vector of int) +0:34 mix ( global 3-component vector of int) +0:34 Construct ivec3 ( temp 3-component vector of int) +0:34 Convert uint to int ( temp int) +0:34 'uin' ( temp uint) +0:34 Construct ivec3 ( temp 3-component vector of int) +0:34 Convert uint to int ( temp int) +0:34 'uin' ( temp uint) +0:34 Construct bvec3 ( temp 3-component vector of bool) +0:34 'b' ( temp bool) +0:? Linker Objects +0:? 'in1' ( smooth in float) +0:? 'in2' ( smooth in 2-component vector of float) +0:? 'in3' ( smooth in 3-component vector of float) +0:? 'in4' ( smooth in 4-component vector of float) +0:? 'gl_CullDistance' ( smooth in 6-element array of float CullDistance) +0:? 's2dms' ( uniform sampler2DMS) +0:? 'us2dmsa' ( uniform usampler2DMSArray) +0:? 'ii2dms' (layout( rgba32i) uniform iimage2DMS) +0:? 'i2dmsa' (layout( rgba32f) uniform image2DMSArray) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.geom.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.geom.out new file mode 100644 index 0000000..5e6c88f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.geom.out @@ -0,0 +1,72 @@ +450.geom +Warning, version 450 is not yet complete; most version-specific features are present, but some are missing. + +Shader version: 450 +invocations = -1 +max_vertices = -1 +input primitive = none +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) +0:? Linker Objects +0:? 'gl_in' ( in implicitly-sized 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}) + + +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 +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) +0:? Linker Objects +0:? 'gl_in' ( in 2-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}) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.tesc.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.tesc.out new file mode 100644 index 0000000..29da425 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.tesc.out @@ -0,0 +1,68 @@ +450.tesc +Warning, version 450 is not yet complete; most version-specific features are present, but some are missing. + +Shader version: 450 +vertices = -1 +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 ( temp float CullDistance) +0:13 gl_CullDistance: direct index for structure ( out 3-element array of float CullDistance) +0:13 indirect index ( temp block{ out 3-element array of float CullDistance gl_CullDistance}) +0:13 'gl_out' ( out 4-element array of block{ out 3-element array of float CullDistance gl_CullDistance}) +0:13 'gl_InvocationID' ( in int InvocationID) +0:13 Constant: +0:13 0 (const int) +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 32-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) +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}) + + +Linked tessellation control stage: + +ERROR: Linking tessellation control stage: At least one shader must specify an output layout(vertices=...) + +Shader version: 450 +vertices = -1 +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 ( temp float CullDistance) +0:13 gl_CullDistance: direct index for structure ( out 3-element array of float CullDistance) +0:13 indirect index ( temp block{ out 3-element array of float CullDistance gl_CullDistance}) +0:13 'gl_out' ( out 4-element array of block{ out 3-element array of float CullDistance gl_CullDistance}) +0:13 'gl_InvocationID' ( in int InvocationID) +0:13 Constant: +0:13 0 (const int) +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 32-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) +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}) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.tese.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.tese.out new file mode 100644 index 0000000..b7735e6 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.tese.out @@ -0,0 +1,68 @@ +450.tese +Warning, version 450 is not yet complete; most version-specific features are present, but some are missing. + +Shader version: 450 +input primitive = none +vertex spacing = none +triangle order = 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 ( temp float CullDistance) +0:13 gl_CullDistance: direct index for structure ( out 3-element array of float CullDistance) +0:13 'anon@0' ( out block{ 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 32-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) +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}) + + +Linked tessellation evaluation stage: + +ERROR: Linking tessellation evaluation stage: At least one shader must specify an input layout primitive + +Shader version: 450 +input primitive = none +vertex spacing = equal_spacing +triangle order = ccw +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 ( temp float CullDistance) +0:13 gl_CullDistance: direct index for structure ( out 3-element array of float CullDistance) +0:13 'anon@0' ( out block{ 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 32-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) +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}) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.vert.out new file mode 100644 index 0000000..cc300d9 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.vert.out @@ -0,0 +1,72 @@ +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. + + +Shader version: 450 +ERROR: node is still EOpNull! +0:7 Function Definition: main( ( global void) +0:7 Function Parameters: +0:9 Sequence +0:9 move second child to first child ( temp float) +0:9 direct index ( temp float CullDistance) +0:9 gl_CullDistance: direct index for structure ( out 3-element array of float CullDistance) +0:9 'anon@0' ( out block{ out 3-element array of float CullDistance gl_CullDistance}) +0:9 Constant: +0:9 10 (const uint) +0:9 Constant: +0:9 2 (const int) +0:9 Constant: +0:9 4.500000 +0:25 Function Definition: foo( ( global void) +0:25 Function Parameters: +0:? Linker Objects +0:? 'anon@0' ( out block{ out 3-element array of float CullDistance gl_CullDistance}) +0:? 'outb' ( smooth out bool) +0:? 'outo' ( smooth out sampler2D) +0:? 'outa' ( smooth out 4-element array of float) +0:? 'outaa' ( smooth out 4-element array of 2-element array of float) +0:? 'outs' ( smooth out structure{ global float f}) +0:? 'outasa' ( smooth out 4-element array of structure{ global float f}) +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:? '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:7 Function Definition: main( ( global void) +0:7 Function Parameters: +0:9 Sequence +0:9 move second child to first child ( temp float) +0:9 direct index ( temp float CullDistance) +0:9 gl_CullDistance: direct index for structure ( out 3-element array of float CullDistance) +0:9 'anon@0' ( out block{ out 3-element array of float CullDistance gl_CullDistance}) +0:9 Constant: +0:9 10 (const uint) +0:9 Constant: +0:9 2 (const int) +0:9 Constant: +0:9 4.500000 +0:? Linker Objects +0:? 'anon@0' ( out block{ out 3-element array of float CullDistance gl_CullDistance}) +0:? 'outb' ( smooth out bool) +0:? 'outo' ( smooth out sampler2D) +0:? 'outa' ( smooth out 4-element array of float) +0:? 'outaa' ( smooth out 4-element array of 2-element array of float) +0:? 'outs' ( smooth out structure{ global float f}) +0:? 'outasa' ( smooth out 4-element array of structure{ global float f}) +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:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/Operations.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/Operations.frag.out new file mode 100644 index 0000000..680eb26 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/Operations.frag.out @@ -0,0 +1,1151 @@ +Operations.frag +ERROR: 0:76: 'intBitsToFloat' : no matching overloaded function found +ERROR: 0:77: 'uintBitsToFloat' : no matching overloaded function found +ERROR: 0:78: 'fma' : no matching overloaded function found +ERROR: 0:79: 'frexp' : no matching overloaded function found +ERROR: 0:80: 'ldexp' : no matching overloaded function found +ERROR: 0:81: 'unpackUnorm2x16' : no matching overloaded function found +ERROR: 0:82: 'unpackUnorm4x8' : no matching overloaded function found +ERROR: 0:83: 'unpackSnorm4x8' : no matching overloaded function found +ERROR: 0:107: 'floatsBitsToInt' : no matching overloaded function found +ERROR: 0:108: 'packUnorm2x16' : no matching overloaded function found +ERROR: 0:109: 'packUnorm4x8' : no matching overloaded function found +ERROR: 0:110: 'packSnorm4x8' : no matching overloaded function found +ERROR: 0:113: 'assign' : cannot convert from ' global float' to ' temp uint' +ERROR: 0:114: 'assign' : cannot convert from ' global float' to ' temp uint' +ERROR: 0:118: 'floatsBitToInt' : no matching overloaded function found +ERROR: 0:118: 'assign' : cannot convert from ' const float' to ' temp uint' +ERROR: 0:119: 'packUnorm2x16' : no matching overloaded function found +ERROR: 0:119: 'assign' : cannot convert from ' const float' to ' temp uint' +ERROR: 0:120: 'packUnorm4x8' : no matching overloaded function found +ERROR: 0:120: 'assign' : cannot convert from ' const float' to ' temp uint' +ERROR: 0:121: '&' : wrong operand types: no operation '&' exists that takes a left-hand operand of type ' uniform uint' and a right operand of type ' temp int' (or there is no acceptable conversion) +ERROR: 0:121: 'assign' : cannot convert from ' uniform uint' to ' temp int' +ERROR: 0:122: '^' : wrong operand types: no operation '^' exists that takes a left-hand operand of type ' uniform uint' and a right operand of type ' temp int' (or there is no acceptable conversion) +ERROR: 0:122: 'assign' : cannot convert from ' uniform uint' to ' temp int' +ERROR: 0:123: '|' : wrong operand types: no operation '|' exists that takes a left-hand operand of type ' temp int' and a right operand of type ' uniform uint' (or there is no acceptable conversion) +ERROR: 25 compilation errors. No code generated. + + +Shader version: 130 +ERROR: node is still EOpNull! +0:15 Function Definition: main( ( global void) +0:15 Function Parameters: +0:? Sequence +0:27 move second child to first child ( temp 4-component vector of float) +0:27 'v' ( temp 4-component vector of float) +0:27 radians ( global 4-component vector of float) +0:27 'uv4' ( uniform 4-component vector of float) +0:28 add second child into first child ( temp 4-component vector of float) +0:28 'v' ( temp 4-component vector of float) +0:28 degrees ( global 4-component vector of float) +0:28 'v' ( temp 4-component vector of float) +0:29 add second child into first child ( temp 4-component vector of float) +0:29 'v' ( temp 4-component vector of float) +0:29 Comma ( temp 4-component vector of float) +0:29 move second child to first child ( temp int) +0:29 'i' ( temp int) +0:29 component-wise multiply ( temp int) +0:29 'ui' ( uniform int) +0:29 'ui' ( uniform int) +0:29 sine ( global 4-component vector of float) +0:29 'v' ( temp 4-component vector of float) +0:30 add second child into first child ( temp 4-component vector of float) +0:30 'v' ( temp 4-component vector of float) +0:30 cosine ( global 4-component vector of float) +0:30 'v' ( temp 4-component vector of float) +0:31 add second child into first child ( temp 4-component vector of float) +0:31 'v' ( temp 4-component vector of float) +0:31 tangent ( global 4-component vector of float) +0:31 'v' ( temp 4-component vector of float) +0:32 add second child into first child ( temp 4-component vector of float) +0:32 'v' ( temp 4-component vector of float) +0:32 arc sine ( global 4-component vector of float) +0:32 'v' ( temp 4-component vector of float) +0:33 add second child into first child ( temp 4-component vector of float) +0:33 'v' ( temp 4-component vector of float) +0:33 arc cosine ( global 4-component vector of float) +0:33 'v' ( temp 4-component vector of float) +0:35 add second child into first child ( temp 4-component vector of float) +0:35 'v' ( temp 4-component vector of float) +0:35 arc tangent ( global 4-component vector of float) +0:35 'v' ( temp 4-component vector of float) +0:36 add second child into first child ( temp 4-component vector of float) +0:36 'v' ( temp 4-component vector of float) +0:36 hyp. sine ( global 4-component vector of float) +0:36 'v' ( temp 4-component vector of float) +0:37 add second child into first child ( temp 4-component vector of float) +0:37 'v' ( temp 4-component vector of float) +0:37 hyp. cosine ( global 4-component vector of float) +0:37 'v' ( temp 4-component vector of float) +0:38 add second child into first child ( temp 4-component vector of float) +0:38 'v' ( temp 4-component vector of float) +0:38 hyp. tangent ( global 4-component vector of float) +0:38 'v' ( temp 4-component vector of float) +0:39 add second child into first child ( temp 4-component vector of float) +0:39 'v' ( temp 4-component vector of float) +0:39 arc hyp. sine ( global 4-component vector of float) +0:39 'v' ( temp 4-component vector of float) +0:40 add second child into first child ( temp 4-component vector of float) +0:40 'v' ( temp 4-component vector of float) +0:40 arc hyp. cosine ( global 4-component vector of float) +0:40 'v' ( temp 4-component vector of float) +0:41 add second child into first child ( temp 4-component vector of float) +0:41 'v' ( temp 4-component vector of float) +0:41 arc hyp. tangent ( global 4-component vector of float) +0:41 'v' ( temp 4-component vector of float) +0:43 add second child into first child ( temp 4-component vector of float) +0:43 'v' ( temp 4-component vector of float) +0:43 pow ( global 4-component vector of float) +0:43 'v' ( temp 4-component vector of float) +0:43 'v' ( temp 4-component vector of float) +0:44 add second child into first child ( temp 4-component vector of float) +0:44 'v' ( temp 4-component vector of float) +0:44 exp ( global 4-component vector of float) +0:44 'v' ( temp 4-component vector of float) +0:45 add second child into first child ( temp 4-component vector of float) +0:45 'v' ( temp 4-component vector of float) +0:45 log ( global 4-component vector of float) +0:45 'v' ( temp 4-component vector of float) +0:46 add second child into first child ( temp 4-component vector of float) +0:46 'v' ( temp 4-component vector of float) +0:46 exp2 ( global 4-component vector of float) +0:46 'v' ( temp 4-component vector of float) +0:47 add second child into first child ( temp 4-component vector of float) +0:47 'v' ( temp 4-component vector of float) +0:47 log2 ( global 4-component vector of float) +0:47 'v' ( temp 4-component vector of float) +0:48 add second child into first child ( temp 4-component vector of float) +0:48 'v' ( temp 4-component vector of float) +0:48 sqrt ( global 4-component vector of float) +0:48 'v' ( temp 4-component vector of float) +0:49 add second child into first child ( temp 4-component vector of float) +0:49 'v' ( temp 4-component vector of float) +0:49 inverse sqrt ( global 4-component vector of float) +0:49 'v' ( temp 4-component vector of float) +0:50 add second child into first child ( temp 4-component vector of float) +0:50 'v' ( temp 4-component vector of float) +0:50 Absolute value ( global 4-component vector of float) +0:50 'v' ( temp 4-component vector of float) +0:51 add second child into first child ( temp 4-component vector of float) +0:51 'v' ( temp 4-component vector of float) +0:51 Sign ( global 4-component vector of float) +0:51 'v' ( temp 4-component vector of float) +0:52 add second child into first child ( temp 4-component vector of float) +0:52 'v' ( temp 4-component vector of float) +0:52 Floor ( global 4-component vector of float) +0:52 'v' ( temp 4-component vector of float) +0:55 add second child into first child ( temp 4-component vector of float) +0:55 'v' ( temp 4-component vector of float) +0:55 trunc ( global 4-component vector of float) +0:55 'v' ( temp 4-component vector of float) +0:56 add second child into first child ( temp 4-component vector of float) +0:56 'v' ( temp 4-component vector of float) +0:56 round ( global 4-component vector of float) +0:56 'v' ( temp 4-component vector of float) +0:57 add second child into first child ( temp 4-component vector of float) +0:57 'v' ( temp 4-component vector of float) +0:57 roundEven ( global 4-component vector of float) +0:57 'v' ( temp 4-component vector of float) +0:60 add second child into first child ( temp 4-component vector of float) +0:60 'v' ( temp 4-component vector of float) +0:60 Ceiling ( global 4-component vector of float) +0:60 'v' ( temp 4-component vector of float) +0:61 add second child into first child ( temp 4-component vector of float) +0:61 'v' ( temp 4-component vector of float) +0:61 Fraction ( global 4-component vector of float) +0:61 'v' ( temp 4-component vector of float) +0:62 add second child into first child ( temp 4-component vector of float) +0:62 'v' ( temp 4-component vector of float) +0:62 mod ( global 4-component vector of float) +0:62 'v' ( temp 4-component vector of float) +0:62 'v' ( temp 4-component vector of float) +0:63 add second child into first child ( temp 4-component vector of float) +0:63 'v' ( temp 4-component vector of float) +0:63 mod ( global 4-component vector of float) +0:63 'v' ( temp 4-component vector of float) +0:63 direct index ( temp float) +0:63 'v' ( temp 4-component vector of float) +0:63 Constant: +0:63 0 (const int) +0:66 add second child into first child ( temp 4-component vector of float) +0:66 'v' ( temp 4-component vector of float) +0:66 modf ( global 4-component vector of float) +0:66 'v' ( temp 4-component vector of float) +0:66 'v' ( temp 4-component vector of float) +0:69 add second child into first child ( temp 4-component vector of float) +0:69 'v' ( temp 4-component vector of float) +0:69 min ( global 4-component vector of float) +0:69 'v' ( temp 4-component vector of float) +0:69 'uv4' ( uniform 4-component vector of float) +0:70 add second child into first child ( temp 4-component vector of float) +0:70 'v' ( temp 4-component vector of float) +0:70 max ( global 4-component vector of float) +0:70 'v' ( temp 4-component vector of float) +0:70 'uv4' ( uniform 4-component vector of float) +0:71 add second child into first child ( temp 4-component vector of float) +0:71 'v' ( temp 4-component vector of float) +0:71 clamp ( global 4-component vector of float) +0:71 'v' ( temp 4-component vector of float) +0:71 'uv4' ( uniform 4-component vector of float) +0:71 'uv4' ( uniform 4-component vector of float) +0:72 add second child into first child ( temp 4-component vector of float) +0:72 'v' ( temp 4-component vector of float) +0:72 mix ( global 4-component vector of float) +0:72 'v' ( temp 4-component vector of float) +0:72 'v' ( temp 4-component vector of float) +0:72 'v' ( temp 4-component vector of float) +0:75 add second child into first child ( temp 4-component vector of float) +0:75 'v' ( temp 4-component vector of float) +0:75 mix ( global 4-component vector of float) +0:75 'v' ( temp 4-component vector of float) +0:75 'v' ( temp 4-component vector of float) +0:75 'bv4' ( temp 4-component vector of bool) +0:76 add second child into first child ( temp 4-component vector of float) +0:76 'v' ( temp 4-component vector of float) +0:76 Constant: +0:76 0.000000 +0:77 add second child into first child ( temp 4-component vector of float) +0:77 'v' ( temp 4-component vector of float) +0:77 Constant: +0:77 0.000000 +0:78 add second child into first child ( temp 4-component vector of float) +0:78 'v' ( temp 4-component vector of float) +0:78 Constant: +0:78 0.000000 +0:79 add second child into first child ( temp 4-component vector of float) +0:79 'v' ( temp 4-component vector of float) +0:79 Constant: +0:79 0.000000 +0:80 add second child into first child ( temp 4-component vector of float) +0:80 'v' ( temp 4-component vector of float) +0:80 Constant: +0:80 0.000000 +0:81 add second child into first child ( temp 4-component vector of float) +0:81 'v' ( temp 4-component vector of float) +0:81 Constant: +0:81 0.000000 +0:82 add second child into first child ( temp 4-component vector of float) +0:82 'v' ( temp 4-component vector of float) +0:82 Constant: +0:82 0.000000 +0:83 add second child into first child ( temp 4-component vector of float) +0:83 'v' ( temp 4-component vector of float) +0:83 Constant: +0:83 0.000000 +0:86 add second child into first child ( temp 4-component vector of float) +0:86 'v' ( temp 4-component vector of float) +0:86 step ( global 4-component vector of float) +0:86 'v' ( temp 4-component vector of float) +0:86 'v' ( temp 4-component vector of float) +0:87 add second child into first child ( temp 4-component vector of float) +0:87 'v' ( temp 4-component vector of float) +0:87 smoothstep ( global 4-component vector of float) +0:87 'v' ( temp 4-component vector of float) +0:87 'v' ( temp 4-component vector of float) +0:87 'v' ( temp 4-component vector of float) +0:88 add second child into first child ( temp 4-component vector of float) +0:88 'v' ( temp 4-component vector of float) +0:88 step ( global 4-component vector of float) +0:88 'uf' ( uniform float) +0:88 'v' ( temp 4-component vector of float) +0:89 add second child into first child ( temp 4-component vector of float) +0:89 'v' ( temp 4-component vector of float) +0:89 smoothstep ( global 4-component vector of float) +0:89 'uf' ( uniform float) +0:89 'uf' ( uniform float) +0:89 'v' ( temp 4-component vector of float) +0:90 add second child into first child ( temp 4-component vector of float) +0:90 'v' ( temp 4-component vector of float) +0:90 normalize ( global 4-component vector of float) +0:90 'v' ( temp 4-component vector of float) +0:91 add second child into first child ( temp 4-component vector of float) +0:91 'v' ( temp 4-component vector of float) +0:91 face-forward ( global 4-component vector of float) +0:91 'v' ( temp 4-component vector of float) +0:91 'v' ( temp 4-component vector of float) +0:91 'v' ( temp 4-component vector of float) +0:92 add second child into first child ( temp 4-component vector of float) +0:92 'v' ( temp 4-component vector of float) +0:92 reflect ( global 4-component vector of float) +0:92 'v' ( temp 4-component vector of float) +0:92 'v' ( temp 4-component vector of float) +0:93 add second child into first child ( temp 4-component vector of float) +0:93 'v' ( temp 4-component vector of float) +0:93 refract ( global 4-component vector of float) +0:93 'v' ( temp 4-component vector of float) +0:93 'v' ( temp 4-component vector of float) +0:93 'uf' ( uniform float) +0:94 add second child into first child ( temp 4-component vector of float) +0:94 'v' ( temp 4-component vector of float) +0:94 dPdx ( global 4-component vector of float) +0:94 'v' ( temp 4-component vector of float) +0:95 add second child into first child ( temp 4-component vector of float) +0:95 'v' ( temp 4-component vector of float) +0:95 dPdy ( global 4-component vector of float) +0:95 'v' ( temp 4-component vector of float) +0:96 add second child into first child ( temp 4-component vector of float) +0:96 'v' ( temp 4-component vector of float) +0:96 fwidth ( global 4-component vector of float) +0:96 'v' ( temp 4-component vector of float) +0:101 add second child into first child ( temp int) +0:101 'i' ( temp int) +0:101 Absolute value ( global int) +0:101 'ui' ( uniform int) +0:102 add second child into first child ( temp int) +0:102 'i' ( temp int) +0:102 Sign ( global int) +0:102 'i' ( temp int) +0:103 add second child into first child ( temp int) +0:103 'i' ( temp int) +0:103 min ( global int) +0:103 'i' ( temp int) +0:103 'ui' ( uniform int) +0:104 add second child into first child ( temp int) +0:104 'i' ( temp int) +0:104 max ( global int) +0:104 'i' ( temp int) +0:104 'ui' ( uniform int) +0:105 add second child into first child ( temp int) +0:105 'i' ( temp int) +0:105 clamp ( global int) +0:105 'i' ( temp int) +0:105 'ui' ( uniform int) +0:105 'ui' ( uniform int) +0:107 Constant: +0:107 0.000000 +0:108 Constant: +0:108 0.000000 +0:109 Constant: +0:109 0.000000 +0:110 Constant: +0:110 0.000000 +0:113 'u' ( temp uint) +0:114 'u' ( temp uint) +0:115 add second child into first child ( temp uint) +0:115 'u' ( temp uint) +0:115 min ( global uint) +0:115 'u' ( temp uint) +0:115 'uui' ( uniform uint) +0:116 add second child into first child ( temp uint) +0:116 'u' ( temp uint) +0:116 max ( global uint) +0:116 'u' ( temp uint) +0:116 'uui' ( uniform uint) +0:117 add second child into first child ( temp uint) +0:117 'u' ( temp uint) +0:117 clamp ( global uint) +0:117 'u' ( temp uint) +0:117 'uui' ( uniform uint) +0:117 'uui' ( uniform uint) +0:118 'u' ( temp uint) +0:119 'u' ( temp uint) +0:120 'u' ( temp uint) +0:121 'i' ( temp int) +0:122 'i' ( temp int) +0:123 add second child into first child ( temp int) +0:123 'i' ( temp int) +0:123 'i' ( temp int) +0:127 move second child to first child ( temp bool) +0:127 'b' ( temp bool) +0:127 isnan ( global bool) +0:127 'uf' ( uniform float) +0:128 move second child to first child ( temp bool) +0:128 'b' ( temp bool) +0:128 isinf ( global bool) +0:128 direct index ( temp float) +0:128 'v' ( temp 4-component vector of float) +0:128 Constant: +0:128 1 (const int) +0:130 move second child to first child ( temp bool) +0:130 'b' ( temp bool) +0:130 any ( global bool) +0:130 Compare Less Than ( global 4-component vector of bool) +0:130 'v' ( temp 4-component vector of float) +0:130 'uv4' ( uniform 4-component vector of float) +0:131 move second child to first child ( temp bool) +0:131 'b' ( temp bool) +0:131 logical-and ( temp bool) +0:131 'b' ( temp bool) +0:131 any ( global bool) +0:131 Compare Less Than or Equal ( global 4-component vector of bool) +0:131 'v' ( temp 4-component vector of float) +0:131 'uv4' ( uniform 4-component vector of float) +0:132 move second child to first child ( temp bool) +0:132 'b' ( temp bool) +0:132 logical-and ( temp bool) +0:132 'b' ( temp bool) +0:132 any ( global bool) +0:132 Compare Greater Than ( global 4-component vector of bool) +0:132 'v' ( temp 4-component vector of float) +0:132 'uv4' ( uniform 4-component vector of float) +0:133 move second child to first child ( temp bool) +0:133 'b' ( temp bool) +0:133 logical-and ( temp bool) +0:133 'b' ( temp bool) +0:133 any ( global bool) +0:133 Compare Greater Than or Equal ( global 4-component vector of bool) +0:133 'v' ( temp 4-component vector of float) +0:133 'uv4' ( uniform 4-component vector of float) +0:134 move second child to first child ( temp bool) +0:134 'b' ( temp bool) +0:134 logical-and ( temp bool) +0:134 'b' ( temp bool) +0:134 any ( global bool) +0:134 Equal ( global 4-component vector of bool) +0:134 'ub41' ( uniform 4-component vector of bool) +0:134 'ub42' ( uniform 4-component vector of bool) +0:135 move second child to first child ( temp bool) +0:135 'b' ( temp bool) +0:135 logical-and ( temp bool) +0:135 'b' ( temp bool) +0:135 any ( global bool) +0:135 NotEqual ( global 4-component vector of bool) +0:135 'ub41' ( uniform 4-component vector of bool) +0:135 'ub42' ( uniform 4-component vector of bool) +0:136 move second child to first child ( temp bool) +0:136 'b' ( temp bool) +0:136 logical-and ( temp bool) +0:136 'b' ( temp bool) +0:136 any ( global bool) +0:136 'ub41' ( uniform 4-component vector of bool) +0:137 move second child to first child ( temp bool) +0:137 'b' ( temp bool) +0:137 logical-and ( temp bool) +0:137 'b' ( temp bool) +0:137 all ( global bool) +0:137 'ub41' ( uniform 4-component vector of bool) +0:138 move second child to first child ( temp bool) +0:138 'b' ( temp bool) +0:138 logical-and ( temp bool) +0:138 'b' ( temp bool) +0:138 any ( global bool) +0:138 Negate conditional ( global 4-component vector of bool) +0:138 'ub41' ( uniform 4-component vector of bool) +0:140 move second child to first child ( temp int) +0:140 'i' ( temp int) +0:140 divide ( temp int) +0:140 subtract ( temp int) +0:140 component-wise multiply ( temp int) +0:140 add ( temp int) +0:140 'i' ( temp int) +0:140 'ui' ( uniform int) +0:140 'i' ( temp int) +0:140 'ui' ( uniform int) +0:140 'i' ( temp int) +0:141 move second child to first child ( temp int) +0:141 'i' ( temp int) +0:141 mod ( temp int) +0:141 'i' ( temp int) +0:141 'ui' ( uniform int) +0:142 Test condition and select ( temp void) +0:142 Condition +0:142 logical-or ( temp bool) +0:142 Compare Equal ( temp bool) +0:142 'i' ( temp int) +0:142 'ui' ( uniform int) +0:142 logical-xor ( temp bool) +0:142 logical-and ( temp bool) +0:142 Compare Not Equal ( temp bool) +0:142 'i' ( temp int) +0:142 'ui' ( uniform int) +0:142 Compare Equal ( temp bool) +0:142 'i' ( temp int) +0:142 'ui' ( uniform int) +0:142 Compare Not Equal ( temp bool) +0:142 'i' ( temp int) +0:142 Constant: +0:142 2 (const int) +0:142 true case +0:143 Pre-Increment ( temp int) +0:143 'i' ( temp int) +0:145 move second child to first child ( temp float) +0:145 'f' ( temp float) +0:145 divide ( temp float) +0:145 subtract ( temp float) +0:145 component-wise multiply ( temp float) +0:145 add ( temp float) +0:145 'uf' ( uniform float) +0:145 'uf' ( uniform float) +0:145 'uf' ( uniform float) +0:145 'uf' ( uniform float) +0:145 'uf' ( uniform float) +0:147 add second child into first child ( temp float) +0:147 'f' ( temp float) +0:147 length ( global float) +0:147 'v' ( temp 4-component vector of float) +0:148 add second child into first child ( temp float) +0:148 'f' ( temp float) +0:148 distance ( global float) +0:148 'v' ( temp 4-component vector of float) +0:148 'v' ( temp 4-component vector of float) +0:149 add second child into first child ( temp float) +0:149 'f' ( temp float) +0:149 dot-product ( global float) +0:149 'v' ( temp 4-component vector of float) +0:149 'v' ( temp 4-component vector of float) +0:150 add second child into first child ( temp float) +0:150 'f' ( temp float) +0:150 dot-product ( global float) +0:150 'f' ( temp float) +0:150 'uf' ( uniform float) +0:151 add second child into first child ( temp float) +0:151 'f' ( temp float) +0:151 direct index ( temp float) +0:151 cross-product ( global 3-component vector of float) +0:151 vector swizzle ( temp 3-component vector of float) +0:151 'v' ( temp 4-component vector of float) +0:151 Sequence +0:151 Constant: +0:151 0 (const int) +0:151 Constant: +0:151 1 (const int) +0:151 Constant: +0:151 2 (const int) +0:151 vector swizzle ( temp 3-component vector of float) +0:151 'v' ( temp 4-component vector of float) +0:151 Sequence +0:151 Constant: +0:151 0 (const int) +0:151 Constant: +0:151 1 (const int) +0:151 Constant: +0:151 2 (const int) +0:151 Constant: +0:151 0 (const int) +0:153 Test condition and select ( temp void) +0:153 Condition +0:153 logical-or ( temp bool) +0:153 Compare Equal ( temp bool) +0:153 'f' ( temp float) +0:153 'uf' ( uniform float) +0:153 logical-and ( temp bool) +0:153 Compare Not Equal ( temp bool) +0:153 'f' ( temp float) +0:153 'uf' ( uniform float) +0:153 Compare Not Equal ( temp bool) +0:153 'f' ( temp float) +0:153 Constant: +0:153 2.000000 +0:153 true case +0:154 Pre-Increment ( temp float) +0:154 'f' ( temp float) +0:156 and second child into first child ( temp int) +0:156 'i' ( temp int) +0:156 'ui' ( uniform int) +0:157 or second child into first child ( temp int) +0:157 'i' ( temp int) +0:157 Constant: +0:157 66 (const int) +0:158 exclusive or second child into first child ( temp int) +0:158 'i' ( temp int) +0:158 'ui' ( uniform int) +0:159 mod second child into first child ( temp int) +0:159 'i' ( temp int) +0:159 Constant: +0:159 17 (const int) +0:160 right shift second child into first child ( temp int) +0:160 'i' ( temp int) +0:160 Constant: +0:160 2 (const int) +0:161 left shift second child into first child ( temp int) +0:161 'i' ( temp int) +0:161 'ui' ( uniform int) +0:162 move second child to first child ( temp int) +0:162 'i' ( temp int) +0:162 Bitwise not ( temp int) +0:162 'i' ( temp int) +0:163 move second child to first child ( temp bool) +0:163 'b' ( temp bool) +0:163 Negate conditional ( temp bool) +0:163 'b' ( temp bool) +0:165 move second child to first child ( temp 4-component vector of float) +0:165 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:165 Test condition and select ( temp 4-component vector of float) +0:165 Condition +0:165 'b' ( temp bool) +0:165 true case +0:165 add ( temp 4-component vector of float) +0:165 add ( temp 4-component vector of float) +0:165 Construct vec4 ( temp 4-component vector of float) +0:165 Convert int to float ( temp float) +0:165 'i' ( temp int) +0:165 Construct vec4 ( temp 4-component vector of float) +0:165 'f' ( temp float) +0:165 'v' ( temp 4-component vector of float) +0:165 false case +0:165 'v' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'uiv4' ( uniform 4-component vector of int) +0:? 'uv4' ( uniform 4-component vector of float) +0:? 'ub' ( uniform bool) +0:? 'ub41' ( uniform 4-component vector of bool) +0:? 'ub42' ( uniform 4-component vector of bool) +0:? 'uf' ( uniform float) +0:? 'ui' ( uniform int) +0:? 'uuv4' ( uniform 4-component vector of uint) +0:? 'uui' ( uniform uint) + + +Linked fragment stage: + + +Shader version: 130 +ERROR: node is still EOpNull! +0:15 Function Definition: main( ( global void) +0:15 Function Parameters: +0:? Sequence +0:27 move second child to first child ( temp 4-component vector of float) +0:27 'v' ( temp 4-component vector of float) +0:27 radians ( global 4-component vector of float) +0:27 'uv4' ( uniform 4-component vector of float) +0:28 add second child into first child ( temp 4-component vector of float) +0:28 'v' ( temp 4-component vector of float) +0:28 degrees ( global 4-component vector of float) +0:28 'v' ( temp 4-component vector of float) +0:29 add second child into first child ( temp 4-component vector of float) +0:29 'v' ( temp 4-component vector of float) +0:29 Comma ( temp 4-component vector of float) +0:29 move second child to first child ( temp int) +0:29 'i' ( temp int) +0:29 component-wise multiply ( temp int) +0:29 'ui' ( uniform int) +0:29 'ui' ( uniform int) +0:29 sine ( global 4-component vector of float) +0:29 'v' ( temp 4-component vector of float) +0:30 add second child into first child ( temp 4-component vector of float) +0:30 'v' ( temp 4-component vector of float) +0:30 cosine ( global 4-component vector of float) +0:30 'v' ( temp 4-component vector of float) +0:31 add second child into first child ( temp 4-component vector of float) +0:31 'v' ( temp 4-component vector of float) +0:31 tangent ( global 4-component vector of float) +0:31 'v' ( temp 4-component vector of float) +0:32 add second child into first child ( temp 4-component vector of float) +0:32 'v' ( temp 4-component vector of float) +0:32 arc sine ( global 4-component vector of float) +0:32 'v' ( temp 4-component vector of float) +0:33 add second child into first child ( temp 4-component vector of float) +0:33 'v' ( temp 4-component vector of float) +0:33 arc cosine ( global 4-component vector of float) +0:33 'v' ( temp 4-component vector of float) +0:35 add second child into first child ( temp 4-component vector of float) +0:35 'v' ( temp 4-component vector of float) +0:35 arc tangent ( global 4-component vector of float) +0:35 'v' ( temp 4-component vector of float) +0:36 add second child into first child ( temp 4-component vector of float) +0:36 'v' ( temp 4-component vector of float) +0:36 hyp. sine ( global 4-component vector of float) +0:36 'v' ( temp 4-component vector of float) +0:37 add second child into first child ( temp 4-component vector of float) +0:37 'v' ( temp 4-component vector of float) +0:37 hyp. cosine ( global 4-component vector of float) +0:37 'v' ( temp 4-component vector of float) +0:38 add second child into first child ( temp 4-component vector of float) +0:38 'v' ( temp 4-component vector of float) +0:38 hyp. tangent ( global 4-component vector of float) +0:38 'v' ( temp 4-component vector of float) +0:39 add second child into first child ( temp 4-component vector of float) +0:39 'v' ( temp 4-component vector of float) +0:39 arc hyp. sine ( global 4-component vector of float) +0:39 'v' ( temp 4-component vector of float) +0:40 add second child into first child ( temp 4-component vector of float) +0:40 'v' ( temp 4-component vector of float) +0:40 arc hyp. cosine ( global 4-component vector of float) +0:40 'v' ( temp 4-component vector of float) +0:41 add second child into first child ( temp 4-component vector of float) +0:41 'v' ( temp 4-component vector of float) +0:41 arc hyp. tangent ( global 4-component vector of float) +0:41 'v' ( temp 4-component vector of float) +0:43 add second child into first child ( temp 4-component vector of float) +0:43 'v' ( temp 4-component vector of float) +0:43 pow ( global 4-component vector of float) +0:43 'v' ( temp 4-component vector of float) +0:43 'v' ( temp 4-component vector of float) +0:44 add second child into first child ( temp 4-component vector of float) +0:44 'v' ( temp 4-component vector of float) +0:44 exp ( global 4-component vector of float) +0:44 'v' ( temp 4-component vector of float) +0:45 add second child into first child ( temp 4-component vector of float) +0:45 'v' ( temp 4-component vector of float) +0:45 log ( global 4-component vector of float) +0:45 'v' ( temp 4-component vector of float) +0:46 add second child into first child ( temp 4-component vector of float) +0:46 'v' ( temp 4-component vector of float) +0:46 exp2 ( global 4-component vector of float) +0:46 'v' ( temp 4-component vector of float) +0:47 add second child into first child ( temp 4-component vector of float) +0:47 'v' ( temp 4-component vector of float) +0:47 log2 ( global 4-component vector of float) +0:47 'v' ( temp 4-component vector of float) +0:48 add second child into first child ( temp 4-component vector of float) +0:48 'v' ( temp 4-component vector of float) +0:48 sqrt ( global 4-component vector of float) +0:48 'v' ( temp 4-component vector of float) +0:49 add second child into first child ( temp 4-component vector of float) +0:49 'v' ( temp 4-component vector of float) +0:49 inverse sqrt ( global 4-component vector of float) +0:49 'v' ( temp 4-component vector of float) +0:50 add second child into first child ( temp 4-component vector of float) +0:50 'v' ( temp 4-component vector of float) +0:50 Absolute value ( global 4-component vector of float) +0:50 'v' ( temp 4-component vector of float) +0:51 add second child into first child ( temp 4-component vector of float) +0:51 'v' ( temp 4-component vector of float) +0:51 Sign ( global 4-component vector of float) +0:51 'v' ( temp 4-component vector of float) +0:52 add second child into first child ( temp 4-component vector of float) +0:52 'v' ( temp 4-component vector of float) +0:52 Floor ( global 4-component vector of float) +0:52 'v' ( temp 4-component vector of float) +0:55 add second child into first child ( temp 4-component vector of float) +0:55 'v' ( temp 4-component vector of float) +0:55 trunc ( global 4-component vector of float) +0:55 'v' ( temp 4-component vector of float) +0:56 add second child into first child ( temp 4-component vector of float) +0:56 'v' ( temp 4-component vector of float) +0:56 round ( global 4-component vector of float) +0:56 'v' ( temp 4-component vector of float) +0:57 add second child into first child ( temp 4-component vector of float) +0:57 'v' ( temp 4-component vector of float) +0:57 roundEven ( global 4-component vector of float) +0:57 'v' ( temp 4-component vector of float) +0:60 add second child into first child ( temp 4-component vector of float) +0:60 'v' ( temp 4-component vector of float) +0:60 Ceiling ( global 4-component vector of float) +0:60 'v' ( temp 4-component vector of float) +0:61 add second child into first child ( temp 4-component vector of float) +0:61 'v' ( temp 4-component vector of float) +0:61 Fraction ( global 4-component vector of float) +0:61 'v' ( temp 4-component vector of float) +0:62 add second child into first child ( temp 4-component vector of float) +0:62 'v' ( temp 4-component vector of float) +0:62 mod ( global 4-component vector of float) +0:62 'v' ( temp 4-component vector of float) +0:62 'v' ( temp 4-component vector of float) +0:63 add second child into first child ( temp 4-component vector of float) +0:63 'v' ( temp 4-component vector of float) +0:63 mod ( global 4-component vector of float) +0:63 'v' ( temp 4-component vector of float) +0:63 direct index ( temp float) +0:63 'v' ( temp 4-component vector of float) +0:63 Constant: +0:63 0 (const int) +0:66 add second child into first child ( temp 4-component vector of float) +0:66 'v' ( temp 4-component vector of float) +0:66 modf ( global 4-component vector of float) +0:66 'v' ( temp 4-component vector of float) +0:66 'v' ( temp 4-component vector of float) +0:69 add second child into first child ( temp 4-component vector of float) +0:69 'v' ( temp 4-component vector of float) +0:69 min ( global 4-component vector of float) +0:69 'v' ( temp 4-component vector of float) +0:69 'uv4' ( uniform 4-component vector of float) +0:70 add second child into first child ( temp 4-component vector of float) +0:70 'v' ( temp 4-component vector of float) +0:70 max ( global 4-component vector of float) +0:70 'v' ( temp 4-component vector of float) +0:70 'uv4' ( uniform 4-component vector of float) +0:71 add second child into first child ( temp 4-component vector of float) +0:71 'v' ( temp 4-component vector of float) +0:71 clamp ( global 4-component vector of float) +0:71 'v' ( temp 4-component vector of float) +0:71 'uv4' ( uniform 4-component vector of float) +0:71 'uv4' ( uniform 4-component vector of float) +0:72 add second child into first child ( temp 4-component vector of float) +0:72 'v' ( temp 4-component vector of float) +0:72 mix ( global 4-component vector of float) +0:72 'v' ( temp 4-component vector of float) +0:72 'v' ( temp 4-component vector of float) +0:72 'v' ( temp 4-component vector of float) +0:75 add second child into first child ( temp 4-component vector of float) +0:75 'v' ( temp 4-component vector of float) +0:75 mix ( global 4-component vector of float) +0:75 'v' ( temp 4-component vector of float) +0:75 'v' ( temp 4-component vector of float) +0:75 'bv4' ( temp 4-component vector of bool) +0:76 add second child into first child ( temp 4-component vector of float) +0:76 'v' ( temp 4-component vector of float) +0:76 Constant: +0:76 0.000000 +0:77 add second child into first child ( temp 4-component vector of float) +0:77 'v' ( temp 4-component vector of float) +0:77 Constant: +0:77 0.000000 +0:78 add second child into first child ( temp 4-component vector of float) +0:78 'v' ( temp 4-component vector of float) +0:78 Constant: +0:78 0.000000 +0:79 add second child into first child ( temp 4-component vector of float) +0:79 'v' ( temp 4-component vector of float) +0:79 Constant: +0:79 0.000000 +0:80 add second child into first child ( temp 4-component vector of float) +0:80 'v' ( temp 4-component vector of float) +0:80 Constant: +0:80 0.000000 +0:81 add second child into first child ( temp 4-component vector of float) +0:81 'v' ( temp 4-component vector of float) +0:81 Constant: +0:81 0.000000 +0:82 add second child into first child ( temp 4-component vector of float) +0:82 'v' ( temp 4-component vector of float) +0:82 Constant: +0:82 0.000000 +0:83 add second child into first child ( temp 4-component vector of float) +0:83 'v' ( temp 4-component vector of float) +0:83 Constant: +0:83 0.000000 +0:86 add second child into first child ( temp 4-component vector of float) +0:86 'v' ( temp 4-component vector of float) +0:86 step ( global 4-component vector of float) +0:86 'v' ( temp 4-component vector of float) +0:86 'v' ( temp 4-component vector of float) +0:87 add second child into first child ( temp 4-component vector of float) +0:87 'v' ( temp 4-component vector of float) +0:87 smoothstep ( global 4-component vector of float) +0:87 'v' ( temp 4-component vector of float) +0:87 'v' ( temp 4-component vector of float) +0:87 'v' ( temp 4-component vector of float) +0:88 add second child into first child ( temp 4-component vector of float) +0:88 'v' ( temp 4-component vector of float) +0:88 step ( global 4-component vector of float) +0:88 'uf' ( uniform float) +0:88 'v' ( temp 4-component vector of float) +0:89 add second child into first child ( temp 4-component vector of float) +0:89 'v' ( temp 4-component vector of float) +0:89 smoothstep ( global 4-component vector of float) +0:89 'uf' ( uniform float) +0:89 'uf' ( uniform float) +0:89 'v' ( temp 4-component vector of float) +0:90 add second child into first child ( temp 4-component vector of float) +0:90 'v' ( temp 4-component vector of float) +0:90 normalize ( global 4-component vector of float) +0:90 'v' ( temp 4-component vector of float) +0:91 add second child into first child ( temp 4-component vector of float) +0:91 'v' ( temp 4-component vector of float) +0:91 face-forward ( global 4-component vector of float) +0:91 'v' ( temp 4-component vector of float) +0:91 'v' ( temp 4-component vector of float) +0:91 'v' ( temp 4-component vector of float) +0:92 add second child into first child ( temp 4-component vector of float) +0:92 'v' ( temp 4-component vector of float) +0:92 reflect ( global 4-component vector of float) +0:92 'v' ( temp 4-component vector of float) +0:92 'v' ( temp 4-component vector of float) +0:93 add second child into first child ( temp 4-component vector of float) +0:93 'v' ( temp 4-component vector of float) +0:93 refract ( global 4-component vector of float) +0:93 'v' ( temp 4-component vector of float) +0:93 'v' ( temp 4-component vector of float) +0:93 'uf' ( uniform float) +0:94 add second child into first child ( temp 4-component vector of float) +0:94 'v' ( temp 4-component vector of float) +0:94 dPdx ( global 4-component vector of float) +0:94 'v' ( temp 4-component vector of float) +0:95 add second child into first child ( temp 4-component vector of float) +0:95 'v' ( temp 4-component vector of float) +0:95 dPdy ( global 4-component vector of float) +0:95 'v' ( temp 4-component vector of float) +0:96 add second child into first child ( temp 4-component vector of float) +0:96 'v' ( temp 4-component vector of float) +0:96 fwidth ( global 4-component vector of float) +0:96 'v' ( temp 4-component vector of float) +0:101 add second child into first child ( temp int) +0:101 'i' ( temp int) +0:101 Absolute value ( global int) +0:101 'ui' ( uniform int) +0:102 add second child into first child ( temp int) +0:102 'i' ( temp int) +0:102 Sign ( global int) +0:102 'i' ( temp int) +0:103 add second child into first child ( temp int) +0:103 'i' ( temp int) +0:103 min ( global int) +0:103 'i' ( temp int) +0:103 'ui' ( uniform int) +0:104 add second child into first child ( temp int) +0:104 'i' ( temp int) +0:104 max ( global int) +0:104 'i' ( temp int) +0:104 'ui' ( uniform int) +0:105 add second child into first child ( temp int) +0:105 'i' ( temp int) +0:105 clamp ( global int) +0:105 'i' ( temp int) +0:105 'ui' ( uniform int) +0:105 'ui' ( uniform int) +0:107 Constant: +0:107 0.000000 +0:108 Constant: +0:108 0.000000 +0:109 Constant: +0:109 0.000000 +0:110 Constant: +0:110 0.000000 +0:113 'u' ( temp uint) +0:114 'u' ( temp uint) +0:115 add second child into first child ( temp uint) +0:115 'u' ( temp uint) +0:115 min ( global uint) +0:115 'u' ( temp uint) +0:115 'uui' ( uniform uint) +0:116 add second child into first child ( temp uint) +0:116 'u' ( temp uint) +0:116 max ( global uint) +0:116 'u' ( temp uint) +0:116 'uui' ( uniform uint) +0:117 add second child into first child ( temp uint) +0:117 'u' ( temp uint) +0:117 clamp ( global uint) +0:117 'u' ( temp uint) +0:117 'uui' ( uniform uint) +0:117 'uui' ( uniform uint) +0:118 'u' ( temp uint) +0:119 'u' ( temp uint) +0:120 'u' ( temp uint) +0:121 'i' ( temp int) +0:122 'i' ( temp int) +0:123 add second child into first child ( temp int) +0:123 'i' ( temp int) +0:123 'i' ( temp int) +0:127 move second child to first child ( temp bool) +0:127 'b' ( temp bool) +0:127 isnan ( global bool) +0:127 'uf' ( uniform float) +0:128 move second child to first child ( temp bool) +0:128 'b' ( temp bool) +0:128 isinf ( global bool) +0:128 direct index ( temp float) +0:128 'v' ( temp 4-component vector of float) +0:128 Constant: +0:128 1 (const int) +0:130 move second child to first child ( temp bool) +0:130 'b' ( temp bool) +0:130 any ( global bool) +0:130 Compare Less Than ( global 4-component vector of bool) +0:130 'v' ( temp 4-component vector of float) +0:130 'uv4' ( uniform 4-component vector of float) +0:131 move second child to first child ( temp bool) +0:131 'b' ( temp bool) +0:131 logical-and ( temp bool) +0:131 'b' ( temp bool) +0:131 any ( global bool) +0:131 Compare Less Than or Equal ( global 4-component vector of bool) +0:131 'v' ( temp 4-component vector of float) +0:131 'uv4' ( uniform 4-component vector of float) +0:132 move second child to first child ( temp bool) +0:132 'b' ( temp bool) +0:132 logical-and ( temp bool) +0:132 'b' ( temp bool) +0:132 any ( global bool) +0:132 Compare Greater Than ( global 4-component vector of bool) +0:132 'v' ( temp 4-component vector of float) +0:132 'uv4' ( uniform 4-component vector of float) +0:133 move second child to first child ( temp bool) +0:133 'b' ( temp bool) +0:133 logical-and ( temp bool) +0:133 'b' ( temp bool) +0:133 any ( global bool) +0:133 Compare Greater Than or Equal ( global 4-component vector of bool) +0:133 'v' ( temp 4-component vector of float) +0:133 'uv4' ( uniform 4-component vector of float) +0:134 move second child to first child ( temp bool) +0:134 'b' ( temp bool) +0:134 logical-and ( temp bool) +0:134 'b' ( temp bool) +0:134 any ( global bool) +0:134 Equal ( global 4-component vector of bool) +0:134 'ub41' ( uniform 4-component vector of bool) +0:134 'ub42' ( uniform 4-component vector of bool) +0:135 move second child to first child ( temp bool) +0:135 'b' ( temp bool) +0:135 logical-and ( temp bool) +0:135 'b' ( temp bool) +0:135 any ( global bool) +0:135 NotEqual ( global 4-component vector of bool) +0:135 'ub41' ( uniform 4-component vector of bool) +0:135 'ub42' ( uniform 4-component vector of bool) +0:136 move second child to first child ( temp bool) +0:136 'b' ( temp bool) +0:136 logical-and ( temp bool) +0:136 'b' ( temp bool) +0:136 any ( global bool) +0:136 'ub41' ( uniform 4-component vector of bool) +0:137 move second child to first child ( temp bool) +0:137 'b' ( temp bool) +0:137 logical-and ( temp bool) +0:137 'b' ( temp bool) +0:137 all ( global bool) +0:137 'ub41' ( uniform 4-component vector of bool) +0:138 move second child to first child ( temp bool) +0:138 'b' ( temp bool) +0:138 logical-and ( temp bool) +0:138 'b' ( temp bool) +0:138 any ( global bool) +0:138 Negate conditional ( global 4-component vector of bool) +0:138 'ub41' ( uniform 4-component vector of bool) +0:140 move second child to first child ( temp int) +0:140 'i' ( temp int) +0:140 divide ( temp int) +0:140 subtract ( temp int) +0:140 component-wise multiply ( temp int) +0:140 add ( temp int) +0:140 'i' ( temp int) +0:140 'ui' ( uniform int) +0:140 'i' ( temp int) +0:140 'ui' ( uniform int) +0:140 'i' ( temp int) +0:141 move second child to first child ( temp int) +0:141 'i' ( temp int) +0:141 mod ( temp int) +0:141 'i' ( temp int) +0:141 'ui' ( uniform int) +0:142 Test condition and select ( temp void) +0:142 Condition +0:142 logical-or ( temp bool) +0:142 Compare Equal ( temp bool) +0:142 'i' ( temp int) +0:142 'ui' ( uniform int) +0:142 logical-xor ( temp bool) +0:142 logical-and ( temp bool) +0:142 Compare Not Equal ( temp bool) +0:142 'i' ( temp int) +0:142 'ui' ( uniform int) +0:142 Compare Equal ( temp bool) +0:142 'i' ( temp int) +0:142 'ui' ( uniform int) +0:142 Compare Not Equal ( temp bool) +0:142 'i' ( temp int) +0:142 Constant: +0:142 2 (const int) +0:142 true case +0:143 Pre-Increment ( temp int) +0:143 'i' ( temp int) +0:145 move second child to first child ( temp float) +0:145 'f' ( temp float) +0:145 divide ( temp float) +0:145 subtract ( temp float) +0:145 component-wise multiply ( temp float) +0:145 add ( temp float) +0:145 'uf' ( uniform float) +0:145 'uf' ( uniform float) +0:145 'uf' ( uniform float) +0:145 'uf' ( uniform float) +0:145 'uf' ( uniform float) +0:147 add second child into first child ( temp float) +0:147 'f' ( temp float) +0:147 length ( global float) +0:147 'v' ( temp 4-component vector of float) +0:148 add second child into first child ( temp float) +0:148 'f' ( temp float) +0:148 distance ( global float) +0:148 'v' ( temp 4-component vector of float) +0:148 'v' ( temp 4-component vector of float) +0:149 add second child into first child ( temp float) +0:149 'f' ( temp float) +0:149 dot-product ( global float) +0:149 'v' ( temp 4-component vector of float) +0:149 'v' ( temp 4-component vector of float) +0:150 add second child into first child ( temp float) +0:150 'f' ( temp float) +0:150 dot-product ( global float) +0:150 'f' ( temp float) +0:150 'uf' ( uniform float) +0:151 add second child into first child ( temp float) +0:151 'f' ( temp float) +0:151 direct index ( temp float) +0:151 cross-product ( global 3-component vector of float) +0:151 vector swizzle ( temp 3-component vector of float) +0:151 'v' ( temp 4-component vector of float) +0:151 Sequence +0:151 Constant: +0:151 0 (const int) +0:151 Constant: +0:151 1 (const int) +0:151 Constant: +0:151 2 (const int) +0:151 vector swizzle ( temp 3-component vector of float) +0:151 'v' ( temp 4-component vector of float) +0:151 Sequence +0:151 Constant: +0:151 0 (const int) +0:151 Constant: +0:151 1 (const int) +0:151 Constant: +0:151 2 (const int) +0:151 Constant: +0:151 0 (const int) +0:153 Test condition and select ( temp void) +0:153 Condition +0:153 logical-or ( temp bool) +0:153 Compare Equal ( temp bool) +0:153 'f' ( temp float) +0:153 'uf' ( uniform float) +0:153 logical-and ( temp bool) +0:153 Compare Not Equal ( temp bool) +0:153 'f' ( temp float) +0:153 'uf' ( uniform float) +0:153 Compare Not Equal ( temp bool) +0:153 'f' ( temp float) +0:153 Constant: +0:153 2.000000 +0:153 true case +0:154 Pre-Increment ( temp float) +0:154 'f' ( temp float) +0:156 and second child into first child ( temp int) +0:156 'i' ( temp int) +0:156 'ui' ( uniform int) +0:157 or second child into first child ( temp int) +0:157 'i' ( temp int) +0:157 Constant: +0:157 66 (const int) +0:158 exclusive or second child into first child ( temp int) +0:158 'i' ( temp int) +0:158 'ui' ( uniform int) +0:159 mod second child into first child ( temp int) +0:159 'i' ( temp int) +0:159 Constant: +0:159 17 (const int) +0:160 right shift second child into first child ( temp int) +0:160 'i' ( temp int) +0:160 Constant: +0:160 2 (const int) +0:161 left shift second child into first child ( temp int) +0:161 'i' ( temp int) +0:161 'ui' ( uniform int) +0:162 move second child to first child ( temp int) +0:162 'i' ( temp int) +0:162 Bitwise not ( temp int) +0:162 'i' ( temp int) +0:163 move second child to first child ( temp bool) +0:163 'b' ( temp bool) +0:163 Negate conditional ( temp bool) +0:163 'b' ( temp bool) +0:165 move second child to first child ( temp 4-component vector of float) +0:165 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:165 Test condition and select ( temp 4-component vector of float) +0:165 Condition +0:165 'b' ( temp bool) +0:165 true case +0:165 add ( temp 4-component vector of float) +0:165 add ( temp 4-component vector of float) +0:165 Construct vec4 ( temp 4-component vector of float) +0:165 Convert int to float ( temp float) +0:165 'i' ( temp int) +0:165 Construct vec4 ( temp 4-component vector of float) +0:165 'f' ( temp float) +0:165 'v' ( temp 4-component vector of float) +0:165 false case +0:165 'v' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'uiv4' ( uniform 4-component vector of int) +0:? 'uv4' ( uniform 4-component vector of float) +0:? 'ub' ( uniform bool) +0:? 'ub41' ( uniform 4-component vector of bool) +0:? 'ub42' ( uniform 4-component vector of bool) +0:? 'uf' ( uniform float) +0:? 'ui' ( uniform int) +0:? 'uuv4' ( uniform 4-component vector of uint) +0:? 'uui' ( uniform uint) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/aggOps.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/aggOps.frag.out new file mode 100644 index 0000000..eba1bf7 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/aggOps.frag.out @@ -0,0 +1,298 @@ +aggOps.frag +WARNING: 0:4: varying deprecated in version 130; may be removed in future release +WARNING: 0:6: varying deprecated in version 130; may be removed in future release + +Shader version: 130 +0:? Sequence +0:23 Function Definition: main( ( global void) +0:23 Function Parameters: +0:? Sequence +0:27 move second child to first child ( temp 3-element array of structure{ global int i, global float f}) +0:27 'a' ( temp 3-element array of structure{ global int i, global float f}) +0:27 Construct structure ( temp 3-element array of structure{ global int i, global float f}) +0:27 Construct structure ( temp structure{ global int i, global float f}) +0:27 Convert float to int ( temp int) +0:27 direct index ( temp float) +0:27 'u' ( smooth in 4-component vector of float) +0:27 Constant: +0:27 0 (const int) +0:27 direct index ( temp float) +0:27 'u' ( smooth in 4-component vector of float) +0:27 Constant: +0:27 1 (const int) +0:27 Construct structure ( temp structure{ global int i, global float f}) +0:27 Convert float to int ( temp int) +0:27 direct index ( temp float) +0:27 'u' ( smooth in 4-component vector of float) +0:27 Constant: +0:27 2 (const int) +0:27 direct index ( temp float) +0:27 'u' ( smooth in 4-component vector of float) +0:27 Constant: +0:27 3 (const int) +0:27 Constant: +0:27 14 (const int) +0:27 14.000000 +0:28 move second child to first child ( temp 3-element array of structure{ global int i, global float f}) +0:28 'b' ( temp 3-element array of structure{ global int i, global float f}) +0:28 Construct structure ( temp 3-element array of structure{ global int i, global float f}) +0:28 Constant: +0:28 17 (const int) +0:28 17.000000 +0:28 Construct structure ( temp structure{ global int i, global float f}) +0:28 Convert float to int ( temp int) +0:28 direct index ( temp float) +0:28 'w' ( smooth in 4-component vector of float) +0:28 Constant: +0:28 0 (const int) +0:28 direct index ( temp float) +0:28 'w' ( smooth in 4-component vector of float) +0:28 Constant: +0:28 1 (const int) +0:28 Construct structure ( temp structure{ global int i, global float f}) +0:28 Convert float to int ( temp int) +0:28 direct index ( temp float) +0:28 'w' ( smooth in 4-component vector of float) +0:28 Constant: +0:28 2 (const int) +0:28 direct index ( temp float) +0:28 'w' ( smooth in 4-component vector of float) +0:28 Constant: +0:28 3 (const int) +0:30 Test condition and select ( temp void) +0:30 Condition +0:30 Compare Equal ( temp bool) +0:30 'foo2a' ( uniform structure{ global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:30 'foo2b' ( uniform structure{ global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:30 true case +0:31 move second child to first child ( temp 4-component vector of float) +0:31 'v' ( temp 4-component vector of float) +0:31 texture ( global 4-component vector of float) +0:31 'sampler' ( uniform sampler2D) +0:31 'coord' ( smooth in 2-component vector of float) +0:30 false case +0:33 move second child to first child ( temp 4-component vector of float) +0:33 'v' ( temp 4-component vector of float) +0:33 texture ( global 4-component vector of float) +0:33 'sampler' ( uniform sampler2D) +0:33 vector-scale ( temp 2-component vector of float) +0:33 Constant: +0:33 2.000000 +0:33 'coord' ( smooth in 2-component vector of float) +0:35 Test condition and select ( temp void) +0:35 Condition +0:35 Compare Equal ( temp bool) +0:35 'u' ( smooth in 4-component vector of float) +0:35 'v' ( temp 4-component vector of float) +0:35 true case +0:36 vector scale second child into first child ( temp 4-component vector of float) +0:36 'v' ( temp 4-component vector of float) +0:36 Constant: +0:36 3.000000 +0:38 Test condition and select ( temp void) +0:38 Condition +0:38 Compare Not Equal ( temp bool) +0:38 'u' ( smooth in 4-component vector of float) +0:38 'v' ( temp 4-component vector of float) +0:38 true case +0:39 vector scale second child into first child ( temp 4-component vector of float) +0:39 'v' ( temp 4-component vector of float) +0:39 Constant: +0:39 4.000000 +0:41 Test condition and select ( temp void) +0:41 Condition +0:41 Compare Equal ( temp bool) +0:41 'coord' ( smooth in 2-component vector of float) +0:41 vector swizzle ( temp 2-component vector of float) +0:41 'v' ( temp 4-component vector of float) +0:41 Sequence +0:41 Constant: +0:41 1 (const int) +0:41 Constant: +0:41 3 (const int) +0:41 true case +0:42 vector scale second child into first child ( temp 4-component vector of float) +0:42 'v' ( temp 4-component vector of float) +0:42 Constant: +0:42 5.000000 +0:44 Test condition and select ( temp void) +0:44 Condition +0:44 Compare Equal ( temp bool) +0:44 'a' ( temp 3-element array of structure{ global int i, global float f}) +0:44 'b' ( temp 3-element array of structure{ global int i, global float f}) +0:44 true case +0:45 vector scale second child into first child ( temp 4-component vector of float) +0:45 'v' ( temp 4-component vector of float) +0:45 Constant: +0:45 6.000000 +0:47 Test condition and select ( temp void) +0:47 Condition +0:47 Compare Not Equal ( temp bool) +0:47 'a' ( temp 3-element array of structure{ global int i, global float f}) +0:47 'b' ( temp 3-element array of structure{ global int i, global float f}) +0:47 true case +0:48 vector scale second child into first child ( temp 4-component vector of float) +0:48 'v' ( temp 4-component vector of float) +0:48 Constant: +0:48 7.000000 +0:50 move second child to first child ( temp 4-component vector of float) +0:50 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:50 'v' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'sampler' ( uniform sampler2D) +0:? 'coord' ( smooth in 2-component vector of float) +0:? 'u' ( smooth in 4-component vector of float) +0:? 'w' ( smooth in 4-component vector of float) +0:? 'foo1' ( uniform structure{ global int i, global float f}) +0:? 'foo2a' ( uniform structure{ global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:? 'foo2b' ( uniform structure{ global int i, global float f, global structure{ global int i, global float f} s1_1}) + + +Linked fragment stage: + + +Shader version: 130 +0:? Sequence +0:23 Function Definition: main( ( global void) +0:23 Function Parameters: +0:? Sequence +0:27 move second child to first child ( temp 3-element array of structure{ global int i, global float f}) +0:27 'a' ( temp 3-element array of structure{ global int i, global float f}) +0:27 Construct structure ( temp 3-element array of structure{ global int i, global float f}) +0:27 Construct structure ( temp structure{ global int i, global float f}) +0:27 Convert float to int ( temp int) +0:27 direct index ( temp float) +0:27 'u' ( smooth in 4-component vector of float) +0:27 Constant: +0:27 0 (const int) +0:27 direct index ( temp float) +0:27 'u' ( smooth in 4-component vector of float) +0:27 Constant: +0:27 1 (const int) +0:27 Construct structure ( temp structure{ global int i, global float f}) +0:27 Convert float to int ( temp int) +0:27 direct index ( temp float) +0:27 'u' ( smooth in 4-component vector of float) +0:27 Constant: +0:27 2 (const int) +0:27 direct index ( temp float) +0:27 'u' ( smooth in 4-component vector of float) +0:27 Constant: +0:27 3 (const int) +0:27 Constant: +0:27 14 (const int) +0:27 14.000000 +0:28 move second child to first child ( temp 3-element array of structure{ global int i, global float f}) +0:28 'b' ( temp 3-element array of structure{ global int i, global float f}) +0:28 Construct structure ( temp 3-element array of structure{ global int i, global float f}) +0:28 Constant: +0:28 17 (const int) +0:28 17.000000 +0:28 Construct structure ( temp structure{ global int i, global float f}) +0:28 Convert float to int ( temp int) +0:28 direct index ( temp float) +0:28 'w' ( smooth in 4-component vector of float) +0:28 Constant: +0:28 0 (const int) +0:28 direct index ( temp float) +0:28 'w' ( smooth in 4-component vector of float) +0:28 Constant: +0:28 1 (const int) +0:28 Construct structure ( temp structure{ global int i, global float f}) +0:28 Convert float to int ( temp int) +0:28 direct index ( temp float) +0:28 'w' ( smooth in 4-component vector of float) +0:28 Constant: +0:28 2 (const int) +0:28 direct index ( temp float) +0:28 'w' ( smooth in 4-component vector of float) +0:28 Constant: +0:28 3 (const int) +0:30 Test condition and select ( temp void) +0:30 Condition +0:30 Compare Equal ( temp bool) +0:30 'foo2a' ( uniform structure{ global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:30 'foo2b' ( uniform structure{ global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:30 true case +0:31 move second child to first child ( temp 4-component vector of float) +0:31 'v' ( temp 4-component vector of float) +0:31 texture ( global 4-component vector of float) +0:31 'sampler' ( uniform sampler2D) +0:31 'coord' ( smooth in 2-component vector of float) +0:30 false case +0:33 move second child to first child ( temp 4-component vector of float) +0:33 'v' ( temp 4-component vector of float) +0:33 texture ( global 4-component vector of float) +0:33 'sampler' ( uniform sampler2D) +0:33 vector-scale ( temp 2-component vector of float) +0:33 Constant: +0:33 2.000000 +0:33 'coord' ( smooth in 2-component vector of float) +0:35 Test condition and select ( temp void) +0:35 Condition +0:35 Compare Equal ( temp bool) +0:35 'u' ( smooth in 4-component vector of float) +0:35 'v' ( temp 4-component vector of float) +0:35 true case +0:36 vector scale second child into first child ( temp 4-component vector of float) +0:36 'v' ( temp 4-component vector of float) +0:36 Constant: +0:36 3.000000 +0:38 Test condition and select ( temp void) +0:38 Condition +0:38 Compare Not Equal ( temp bool) +0:38 'u' ( smooth in 4-component vector of float) +0:38 'v' ( temp 4-component vector of float) +0:38 true case +0:39 vector scale second child into first child ( temp 4-component vector of float) +0:39 'v' ( temp 4-component vector of float) +0:39 Constant: +0:39 4.000000 +0:41 Test condition and select ( temp void) +0:41 Condition +0:41 Compare Equal ( temp bool) +0:41 'coord' ( smooth in 2-component vector of float) +0:41 vector swizzle ( temp 2-component vector of float) +0:41 'v' ( temp 4-component vector of float) +0:41 Sequence +0:41 Constant: +0:41 1 (const int) +0:41 Constant: +0:41 3 (const int) +0:41 true case +0:42 vector scale second child into first child ( temp 4-component vector of float) +0:42 'v' ( temp 4-component vector of float) +0:42 Constant: +0:42 5.000000 +0:44 Test condition and select ( temp void) +0:44 Condition +0:44 Compare Equal ( temp bool) +0:44 'a' ( temp 3-element array of structure{ global int i, global float f}) +0:44 'b' ( temp 3-element array of structure{ global int i, global float f}) +0:44 true case +0:45 vector scale second child into first child ( temp 4-component vector of float) +0:45 'v' ( temp 4-component vector of float) +0:45 Constant: +0:45 6.000000 +0:47 Test condition and select ( temp void) +0:47 Condition +0:47 Compare Not Equal ( temp bool) +0:47 'a' ( temp 3-element array of structure{ global int i, global float f}) +0:47 'b' ( temp 3-element array of structure{ global int i, global float f}) +0:47 true case +0:48 vector scale second child into first child ( temp 4-component vector of float) +0:48 'v' ( temp 4-component vector of float) +0:48 Constant: +0:48 7.000000 +0:50 move second child to first child ( temp 4-component vector of float) +0:50 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:50 'v' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'sampler' ( uniform sampler2D) +0:? 'coord' ( smooth in 2-component vector of float) +0:? 'u' ( smooth in 4-component vector of float) +0:? 'w' ( smooth in 4-component vector of float) +0:? 'foo1' ( uniform structure{ global int i, global float f}) +0:? 'foo2a' ( uniform structure{ global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:? 'foo2b' ( uniform structure{ global int i, global float f, global structure{ global int i, global float f} s1_1}) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/always-discard.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/always-discard.frag.out new file mode 100644 index 0000000..17cd443 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/always-discard.frag.out @@ -0,0 +1,239 @@ +always-discard.frag +Shader version: 110 +0:? Sequence +0:4 Function Definition: main( ( global void) +0:4 Function Parameters: +0:6 Sequence +0:6 Sequence +0:6 move second child to first child ( temp 4-component vector of float) +0:6 'white' ( temp 4-component vector of float) +0:6 Constant: +0:6 1.000000 +0:6 1.000000 +0:6 1.000000 +0:6 1.000000 +0:7 Sequence +0:7 move second child to first child ( temp 4-component vector of float) +0:7 'black' ( temp 4-component vector of float) +0:7 Constant: +0:7 0.200000 +0:7 0.200000 +0:7 0.200000 +0:7 0.200000 +0:8 Sequence +0:8 move second child to first child ( temp 4-component vector of float) +0:8 'color' ( temp 4-component vector of float) +0:8 'white' ( temp 4-component vector of float) +0:11 Sequence +0:11 move second child to first child ( temp float) +0:11 'x' ( temp float) +0:11 subtract ( temp float) +0:11 component-wise multiply ( temp float) +0:11 direct index ( temp float) +0:11 'tex_coord' ( smooth in 2-component vector of float) +0:11 Constant: +0:11 0 (const int) +0:11 Constant: +0:11 2.000000 +0:11 Constant: +0:11 1.000000 +0:12 Sequence +0:12 move second child to first child ( temp float) +0:12 'y' ( temp float) +0:12 subtract ( temp float) +0:12 component-wise multiply ( temp float) +0:12 direct index ( temp float) +0:12 'tex_coord' ( smooth in 2-component vector of float) +0:12 Constant: +0:12 1 (const int) +0:12 Constant: +0:12 2.000000 +0:12 Constant: +0:12 1.000000 +0:14 Sequence +0:14 move second child to first child ( temp float) +0:14 'radius' ( temp float) +0:14 sqrt ( global float) +0:14 add ( temp float) +0:14 component-wise multiply ( temp float) +0:14 'x' ( temp float) +0:14 'x' ( temp float) +0:14 component-wise multiply ( temp float) +0:14 'y' ( temp float) +0:14 'y' ( temp float) +0:15 Test condition and select ( temp void) +0:15 Condition +0:15 Compare Greater Than ( temp bool) +0:15 'radius' ( temp float) +0:15 Constant: +0:15 1.000000 +0:15 true case +0:16 Sequence +0:16 Test condition and select ( temp void) +0:16 Condition +0:16 Compare Greater Than ( temp bool) +0:16 'radius' ( temp float) +0:16 Constant: +0:16 1.100000 +0:16 true case +0:17 Sequence +0:17 Pre-Increment ( temp 4-component vector of float) +0:17 'color' ( temp 4-component vector of float) +0:20 move second child to first child ( temp 4-component vector of float) +0:20 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:20 'color' ( temp 4-component vector of float) +0:22 Test condition and select ( temp void) +0:22 Condition +0:22 Compare Greater Than ( temp bool) +0:22 'radius' ( temp float) +0:22 Constant: +0:22 1.200000 +0:22 true case +0:23 Sequence +0:23 Pre-Increment ( temp 4-component vector of float) +0:23 'color' ( temp 4-component vector of float) +0:28 Branch: Kill +0:31 Test condition and select ( temp void) +0:31 Condition +0:31 Compare Greater Than or Equal ( temp bool) +0:31 'radius' ( temp float) +0:31 Constant: +0:31 0.750000 +0:31 true case +0:32 subtract second child into first child ( temp 4-component vector of float) +0:32 'color' ( temp 4-component vector of float) +0:32 Absolute value ( global float) +0:32 divide ( temp float) +0:32 pow ( global float) +0:32 'radius' ( temp float) +0:32 Constant: +0:32 16.000000 +0:32 Constant: +0:32 2.000000 +0:34 move second child to first child ( temp 4-component vector of float) +0:34 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:34 'color' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'tex_coord' ( smooth in 2-component vector of float) + + +Linked fragment stage: + + +Shader version: 110 +0:? Sequence +0:4 Function Definition: main( ( global void) +0:4 Function Parameters: +0:6 Sequence +0:6 Sequence +0:6 move second child to first child ( temp 4-component vector of float) +0:6 'white' ( temp 4-component vector of float) +0:6 Constant: +0:6 1.000000 +0:6 1.000000 +0:6 1.000000 +0:6 1.000000 +0:7 Sequence +0:7 move second child to first child ( temp 4-component vector of float) +0:7 'black' ( temp 4-component vector of float) +0:7 Constant: +0:7 0.200000 +0:7 0.200000 +0:7 0.200000 +0:7 0.200000 +0:8 Sequence +0:8 move second child to first child ( temp 4-component vector of float) +0:8 'color' ( temp 4-component vector of float) +0:8 'white' ( temp 4-component vector of float) +0:11 Sequence +0:11 move second child to first child ( temp float) +0:11 'x' ( temp float) +0:11 subtract ( temp float) +0:11 component-wise multiply ( temp float) +0:11 direct index ( temp float) +0:11 'tex_coord' ( smooth in 2-component vector of float) +0:11 Constant: +0:11 0 (const int) +0:11 Constant: +0:11 2.000000 +0:11 Constant: +0:11 1.000000 +0:12 Sequence +0:12 move second child to first child ( temp float) +0:12 'y' ( temp float) +0:12 subtract ( temp float) +0:12 component-wise multiply ( temp float) +0:12 direct index ( temp float) +0:12 'tex_coord' ( smooth in 2-component vector of float) +0:12 Constant: +0:12 1 (const int) +0:12 Constant: +0:12 2.000000 +0:12 Constant: +0:12 1.000000 +0:14 Sequence +0:14 move second child to first child ( temp float) +0:14 'radius' ( temp float) +0:14 sqrt ( global float) +0:14 add ( temp float) +0:14 component-wise multiply ( temp float) +0:14 'x' ( temp float) +0:14 'x' ( temp float) +0:14 component-wise multiply ( temp float) +0:14 'y' ( temp float) +0:14 'y' ( temp float) +0:15 Test condition and select ( temp void) +0:15 Condition +0:15 Compare Greater Than ( temp bool) +0:15 'radius' ( temp float) +0:15 Constant: +0:15 1.000000 +0:15 true case +0:16 Sequence +0:16 Test condition and select ( temp void) +0:16 Condition +0:16 Compare Greater Than ( temp bool) +0:16 'radius' ( temp float) +0:16 Constant: +0:16 1.100000 +0:16 true case +0:17 Sequence +0:17 Pre-Increment ( temp 4-component vector of float) +0:17 'color' ( temp 4-component vector of float) +0:20 move second child to first child ( temp 4-component vector of float) +0:20 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:20 'color' ( temp 4-component vector of float) +0:22 Test condition and select ( temp void) +0:22 Condition +0:22 Compare Greater Than ( temp bool) +0:22 'radius' ( temp float) +0:22 Constant: +0:22 1.200000 +0:22 true case +0:23 Sequence +0:23 Pre-Increment ( temp 4-component vector of float) +0:23 'color' ( temp 4-component vector of float) +0:28 Branch: Kill +0:31 Test condition and select ( temp void) +0:31 Condition +0:31 Compare Greater Than or Equal ( temp bool) +0:31 'radius' ( temp float) +0:31 Constant: +0:31 0.750000 +0:31 true case +0:32 subtract second child into first child ( temp 4-component vector of float) +0:32 'color' ( temp 4-component vector of float) +0:32 Absolute value ( global float) +0:32 divide ( temp float) +0:32 pow ( global float) +0:32 'radius' ( temp float) +0:32 Constant: +0:32 16.000000 +0:32 Constant: +0:32 2.000000 +0:34 move second child to first child ( temp 4-component vector of float) +0:34 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:34 'color' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'tex_coord' ( smooth in 2-component vector of float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/always-discard2.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/always-discard2.frag.out new file mode 100644 index 0000000..3c7c06f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/always-discard2.frag.out @@ -0,0 +1,121 @@ +always-discard2.frag +Shader version: 110 +0:? Sequence +0:4 Function Definition: main( ( global void) +0:4 Function Parameters: +0:6 Sequence +0:6 Sequence +0:6 move second child to first child ( temp 4-component vector of float) +0:6 'white' ( temp 4-component vector of float) +0:6 Constant: +0:6 1.000000 +0:6 1.000000 +0:6 1.000000 +0:6 1.000000 +0:7 Sequence +0:7 move second child to first child ( temp 4-component vector of float) +0:7 'black' ( temp 4-component vector of float) +0:7 Constant: +0:7 0.200000 +0:7 0.200000 +0:7 0.200000 +0:7 0.200000 +0:8 Sequence +0:8 move second child to first child ( temp 4-component vector of float) +0:8 'color' ( temp 4-component vector of float) +0:8 'white' ( temp 4-component vector of float) +0:11 Sequence +0:11 move second child to first child ( temp float) +0:11 'x' ( temp float) +0:11 subtract ( temp float) +0:11 component-wise multiply ( temp float) +0:11 direct index ( temp float) +0:11 'tex_coord' ( smooth in 2-component vector of float) +0:11 Constant: +0:11 0 (const int) +0:11 Constant: +0:11 2.000000 +0:11 Constant: +0:11 1.000000 +0:12 Sequence +0:12 move second child to first child ( temp float) +0:12 'y' ( temp float) +0:12 subtract ( temp float) +0:12 component-wise multiply ( temp float) +0:12 direct index ( temp float) +0:12 'tex_coord' ( smooth in 2-component vector of float) +0:12 Constant: +0:12 1 (const int) +0:12 Constant: +0:12 2.000000 +0:12 Constant: +0:12 1.000000 +0:14 Branch: Kill +0:17 move second child to first child ( temp 4-component vector of float) +0:17 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:17 'color' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'tex_coord' ( smooth in 2-component vector of float) + + +Linked fragment stage: + + +Shader version: 110 +0:? Sequence +0:4 Function Definition: main( ( global void) +0:4 Function Parameters: +0:6 Sequence +0:6 Sequence +0:6 move second child to first child ( temp 4-component vector of float) +0:6 'white' ( temp 4-component vector of float) +0:6 Constant: +0:6 1.000000 +0:6 1.000000 +0:6 1.000000 +0:6 1.000000 +0:7 Sequence +0:7 move second child to first child ( temp 4-component vector of float) +0:7 'black' ( temp 4-component vector of float) +0:7 Constant: +0:7 0.200000 +0:7 0.200000 +0:7 0.200000 +0:7 0.200000 +0:8 Sequence +0:8 move second child to first child ( temp 4-component vector of float) +0:8 'color' ( temp 4-component vector of float) +0:8 'white' ( temp 4-component vector of float) +0:11 Sequence +0:11 move second child to first child ( temp float) +0:11 'x' ( temp float) +0:11 subtract ( temp float) +0:11 component-wise multiply ( temp float) +0:11 direct index ( temp float) +0:11 'tex_coord' ( smooth in 2-component vector of float) +0:11 Constant: +0:11 0 (const int) +0:11 Constant: +0:11 2.000000 +0:11 Constant: +0:11 1.000000 +0:12 Sequence +0:12 move second child to first child ( temp float) +0:12 'y' ( temp float) +0:12 subtract ( temp float) +0:12 component-wise multiply ( temp float) +0:12 direct index ( temp float) +0:12 'tex_coord' ( smooth in 2-component vector of float) +0:12 Constant: +0:12 1 (const int) +0:12 Constant: +0:12 2.000000 +0:12 Constant: +0:12 1.000000 +0:14 Branch: Kill +0:17 move second child to first child ( temp 4-component vector of float) +0:17 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:17 'color' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'tex_coord' ( smooth in 2-component vector of float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/array.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/array.frag.out new file mode 100644 index 0000000..f41f0af --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/array.frag.out @@ -0,0 +1,465 @@ +array.frag +ERROR: 0:21: '[' : array index out of range '2' +ERROR: 0:27: '[' : array must be redeclared with a size before being indexed with a variable +ERROR: 0:30: 'assign' : cannot convert from ' global 4-element array of float' to ' global 5-element array of float' +ERROR: 0:31: 'assign' : cannot convert from ' global 4-element array of float' to ' global implicitly-sized array of float' +ERROR: 0:33: 'foo' : no matching overloaded function found +ERROR: 0:42: '[' : array index out of range '5' +ERROR: 0:45: '[' : array index out of range '1000' +ERROR: 0:46: '[' : index out of range '-1' +ERROR: 0:52: '[' : array index out of range '2' +ERROR: 0:54: 'const' : non-matching or non-convertible constant type for const initializer +ERROR: 0:56: '=' : cannot convert from ' const 2-element array of int' to ' temp 3-element array of int' +ERROR: 0:57: '[]' : scalar integer expression required +ERROR: 0:57: '[' : index out of range '-858993459' +ERROR: 0:58: '[]' : scalar integer expression required +ERROR: 0:61: '' : array size required +ERROR: 0:62: '' : array size required +ERROR: 0:63: '' : array size required +ERROR: 0:66: '=' : cannot convert from ' temp 3-component vector of float' to ' global float' +ERROR: 0:76: 'bar' : no matching overloaded function found +ERROR: 0:79: '' : array size required +ERROR: 0:84: 'return' : type does not match, or is not convertible to, the function's return type +ERROR: 0:93: 'length' : array must be declared with a size before using this method +ERROR: 0:101: '[' : array index out of range '5' +ERROR: 0:104: 'constructor' : array constructor must have at least one argument +ERROR: 0:104: '=' : cannot convert from ' const float' to ' global implicitly-sized array of int' +ERROR: 0:106: 'constructor' : array argument must be sized +ERROR: 26 compilation errors. No code generated. + + +Shader version: 130 +ERROR: node is still EOpNull! +0:9 Function Definition: foo(f1[5]; ( global 4-element array of float) +0:9 Function Parameters: +0:9 'a' ( in 5-element array of float) +0:11 Sequence +0:11 Branch: Return with expression +0:11 Construct float ( temp 4-element array of float) +0:11 direct index ( temp float) +0:11 'a' ( in 5-element array of float) +0:11 Constant: +0:11 0 (const int) +0:11 direct index ( temp float) +0:11 'a' ( in 5-element array of float) +0:11 Constant: +0:11 1 (const int) +0:11 direct index ( temp float) +0:11 'a' ( in 5-element array of float) +0:11 Constant: +0:11 2 (const int) +0:11 direct index ( temp float) +0:11 'a' ( in 5-element array of float) +0:11 Constant: +0:11 3 (const int) +0:14 Function Definition: bar(f1[5]; ( global void) +0:14 Function Parameters: +0:14 '' ( in 5-element array of float) +0:16 Function Definition: main( ( global void) +0:16 Function Parameters: +0:? Sequence +0:? Sequence +0:21 move second child to first child ( temp float) +0:21 direct index ( temp float) +0:21 'gu' ( temp 2-element array of float) +0:21 Constant: +0:21 2 (const int) +0:21 Constant: +0:21 4.000000 +0:24 move second child to first child ( temp float) +0:24 direct index ( temp float) +0:24 'gu' ( global implicitly-sized array of float) +0:24 Constant: +0:24 2 (const int) +0:24 Constant: +0:24 4.000000 +0:26 move second child to first child ( temp float) +0:26 direct index ( temp float) +0:26 'gu' ( global implicitly-sized array of float) +0:26 Constant: +0:26 3 (const int) +0:26 Constant: +0:26 3.000000 +0:27 move second child to first child ( temp float) +0:27 indirect index ( temp float) +0:27 'gu' ( global implicitly-sized array of float) +0:27 'a' ( uniform int) +0:27 Constant: +0:27 5.000000 +0:29 move second child to first child ( temp 4-element array of float) +0:29 'g4' ( global 4-element array of float) +0:29 Function Call: foo(f1[5]; ( global 4-element array of float) +0:29 'g5' ( global 5-element array of float) +0:30 'g5' ( global 5-element array of float) +0:31 'gu' ( global implicitly-sized array of float) +0:33 Constant: +0:33 0.000000 +0:34 Function Call: bar(f1[5]; ( global void) +0:34 'g5' ( global 5-element array of float) +0:36 Test condition and select ( temp void) +0:36 Condition +0:36 Compare Equal ( temp bool) +0:36 Constant: +0:36 1.000000 +0:36 2.000000 +0:36 3.000000 +0:36 4.000000 +0:36 'g4' ( global 4-element array of float) +0:36 true case +0:37 move second child to first child ( temp float) +0:37 direct index ( temp float) +0:37 'gu' ( global implicitly-sized array of float) +0:37 Constant: +0:37 0 (const int) +0:37 Constant: +0:37 2.000000 +0:40 move second child to first child ( temp float) +0:40 direct index ( temp float) +0:40 'u' ( temp 5-element array of float) +0:40 Constant: +0:40 2 (const int) +0:40 Constant: +0:40 3.000000 +0:42 move second child to first child ( temp float) +0:42 direct index ( temp float) +0:42 'u' ( temp 5-element array of float) +0:42 Constant: +0:42 5 (const int) +0:42 Constant: +0:42 5.000000 +0:43 Function Call: foo(f1[5]; ( global 4-element array of float) +0:43 'u' ( temp 5-element array of float) +0:45 move second child to first child ( temp 4-component vector of float) +0:45 direct index ( temp 4-component vector of float FragData) +0:45 'gl_FragData' ( fragColor 32-element array of 4-component vector of float FragData) +0:45 Constant: +0:45 1000 (const int) +0:45 Constant: +0:45 1.000000 +0:45 1.000000 +0:45 1.000000 +0:45 1.000000 +0:46 move second child to first child ( temp 4-component vector of float) +0:46 direct index ( temp 4-component vector of float FragData) +0:46 'gl_FragData' ( fragColor 32-element array of 4-component vector of float FragData) +0:46 Constant: +0:46 -1 (const int) +0:46 Constant: +0:46 1.000000 +0:46 1.000000 +0:46 1.000000 +0:46 1.000000 +0:47 move second child to first child ( temp 4-component vector of float) +0:47 direct index ( temp 4-component vector of float FragData) +0:47 'gl_FragData' ( fragColor 32-element array of 4-component vector of float FragData) +0:47 Constant: +0:47 3 (const int) +0:47 Constant: +0:47 1.000000 +0:47 1.000000 +0:47 1.000000 +0:47 1.000000 +0:50 Sequence +0:50 move second child to first child ( temp int) +0:50 'sum' ( temp int) +0:50 Constant: +0:50 3 (const int) +0:51 add second child into first child ( temp int) +0:51 'sum' ( temp int) +0:51 Constant: +0:51 2 (const int) +0:52 add second child into first child ( temp int) +0:52 'sum' ( temp int) +0:52 Constant: +0:52 2 (const int) +0:55 Sequence +0:55 move second child to first child ( temp 2-element array of int) +0:55 'ica' ( temp 2-element array of int) +0:55 Constant: +0:55 3 (const int) +0:55 2 (const int) +0:57 move second child to first child ( temp int) +0:57 direct index ( temp int) +0:57 'ica' ( temp 2-element array of int) +0:57 Constant: +0:57 3.100000 +0:57 Constant: +0:57 3 (const int) +0:58 move second child to first child ( temp int) +0:58 indirect index ( temp int) +0:58 'ica' ( temp 2-element array of int) +0:58 direct index ( temp float) +0:58 'u' ( temp 5-element array of float) +0:58 Constant: +0:58 1 (const int) +0:58 Constant: +0:58 4 (const int) +0:68 Function Definition: foo( ( global void) +0:68 Function Parameters: +0:? Sequence +0:71 move second child to first child ( temp int) +0:71 direct index ( temp int) +0:71 'uns' ( temp implicitly-sized array of int) +0:71 Constant: +0:71 3 (const int) +0:71 Constant: +0:71 40 (const int) +0:72 move second child to first child ( temp int) +0:72 direct index ( temp int) +0:72 'uns' ( temp implicitly-sized array of int) +0:72 Constant: +0:72 1 (const int) +0:72 Constant: +0:72 30 (const int) +0:73 move second child to first child ( temp 3-component vector of float) +0:73 direct index ( temp 3-component vector of float) +0:73 'guns' ( global implicitly-sized array of 3-component vector of float) +0:73 Constant: +0:73 2 (const int) +0:73 Constant: +0:73 2.400000 +0:73 2.400000 +0:73 2.400000 +0:76 Constant: +0:76 0.000000 +0:79 Function Definition: foo2( ( global implicitly-sized array of float) +0:79 Function Parameters: +0:? Sequence +0:82 Branch: Return with expression +0:82 'f' ( temp implicitly-sized array of float) +0:84 Branch: Return with expression +0:84 'g' ( temp 9-element array of float) +0:89 Function Definition: foo3( ( global void) +0:89 Function Parameters: +0:? Sequence +0:92 move second child to first child ( temp float) +0:92 direct index ( temp float) +0:92 'resize1' ( temp 3-element array of float) +0:92 Constant: +0:92 2 (const int) +0:92 Constant: +0:92 4.000000 +0:93 Constant: +0:93 1 (const int) +0:95 Constant: +0:95 3 (const int) +0:98 move second child to first child ( temp float) +0:98 direct index ( temp float) +0:98 'resize2' ( temp 5-element array of float) +0:98 Constant: +0:98 5 (const int) +0:98 Constant: +0:98 4.000000 +0:100 Constant: +0:100 5 (const int) +0:101 move second child to first child ( temp float) +0:101 direct index ( temp float) +0:101 'resize2' ( temp 5-element array of float) +0:101 Constant: +0:101 5 (const int) +0:101 Constant: +0:101 4.000000 +0:106 Sequence +0:106 move second child to first child ( temp float) +0:106 'b' ( global float) +0:106 Constant: +0:106 0.000000 +0:? Linker Objects +0:? 'gu' ( global implicitly-sized array of float) +0:? 'g4' ( global 4-element array of float) +0:? 'g5' ( global 5-element array of float) +0:? 'a' ( uniform int) +0:? 'guns' ( global implicitly-sized array of 3-component vector of float) +0:? 'f' ( global float) +0:? 'gUnusedUnsized' ( global implicitly-sized array of float) +0:? 'i' ( global implicitly-sized array of int) +0:? 'emptyA' ( global implicitly-sized array of float) +0:? 'b' ( global float) + + +Linked fragment stage: + + +Shader version: 130 +ERROR: node is still EOpNull! +0:9 Function Definition: foo(f1[5]; ( global 4-element array of float) +0:9 Function Parameters: +0:9 'a' ( in 5-element array of float) +0:11 Sequence +0:11 Branch: Return with expression +0:11 Construct float ( temp 4-element array of float) +0:11 direct index ( temp float) +0:11 'a' ( in 5-element array of float) +0:11 Constant: +0:11 0 (const int) +0:11 direct index ( temp float) +0:11 'a' ( in 5-element array of float) +0:11 Constant: +0:11 1 (const int) +0:11 direct index ( temp float) +0:11 'a' ( in 5-element array of float) +0:11 Constant: +0:11 2 (const int) +0:11 direct index ( temp float) +0:11 'a' ( in 5-element array of float) +0:11 Constant: +0:11 3 (const int) +0:14 Function Definition: bar(f1[5]; ( global void) +0:14 Function Parameters: +0:14 '' ( in 5-element array of float) +0:16 Function Definition: main( ( global void) +0:16 Function Parameters: +0:? Sequence +0:? Sequence +0:21 move second child to first child ( temp float) +0:21 direct index ( temp float) +0:21 'gu' ( temp 2-element array of float) +0:21 Constant: +0:21 2 (const int) +0:21 Constant: +0:21 4.000000 +0:24 move second child to first child ( temp float) +0:24 direct index ( temp float) +0:24 'gu' ( global 4-element array of float) +0:24 Constant: +0:24 2 (const int) +0:24 Constant: +0:24 4.000000 +0:26 move second child to first child ( temp float) +0:26 direct index ( temp float) +0:26 'gu' ( global 4-element array of float) +0:26 Constant: +0:26 3 (const int) +0:26 Constant: +0:26 3.000000 +0:27 move second child to first child ( temp float) +0:27 indirect index ( temp float) +0:27 'gu' ( global 4-element array of float) +0:27 'a' ( uniform int) +0:27 Constant: +0:27 5.000000 +0:29 move second child to first child ( temp 4-element array of float) +0:29 'g4' ( global 4-element array of float) +0:29 Function Call: foo(f1[5]; ( global 4-element array of float) +0:29 'g5' ( global 5-element array of float) +0:30 'g5' ( global 5-element array of float) +0:31 'gu' ( global 4-element array of float) +0:33 Constant: +0:33 0.000000 +0:34 Function Call: bar(f1[5]; ( global void) +0:34 'g5' ( global 5-element array of float) +0:36 Test condition and select ( temp void) +0:36 Condition +0:36 Compare Equal ( temp bool) +0:36 Constant: +0:36 1.000000 +0:36 2.000000 +0:36 3.000000 +0:36 4.000000 +0:36 'g4' ( global 4-element array of float) +0:36 true case +0:37 move second child to first child ( temp float) +0:37 direct index ( temp float) +0:37 'gu' ( global 4-element array of float) +0:37 Constant: +0:37 0 (const int) +0:37 Constant: +0:37 2.000000 +0:40 move second child to first child ( temp float) +0:40 direct index ( temp float) +0:40 'u' ( temp 5-element array of float) +0:40 Constant: +0:40 2 (const int) +0:40 Constant: +0:40 3.000000 +0:42 move second child to first child ( temp float) +0:42 direct index ( temp float) +0:42 'u' ( temp 5-element array of float) +0:42 Constant: +0:42 5 (const int) +0:42 Constant: +0:42 5.000000 +0:43 Function Call: foo(f1[5]; ( global 4-element array of float) +0:43 'u' ( temp 5-element array of float) +0:45 move second child to first child ( temp 4-component vector of float) +0:45 direct index ( temp 4-component vector of float FragData) +0:45 'gl_FragData' ( fragColor 32-element array of 4-component vector of float FragData) +0:45 Constant: +0:45 1000 (const int) +0:45 Constant: +0:45 1.000000 +0:45 1.000000 +0:45 1.000000 +0:45 1.000000 +0:46 move second child to first child ( temp 4-component vector of float) +0:46 direct index ( temp 4-component vector of float FragData) +0:46 'gl_FragData' ( fragColor 32-element array of 4-component vector of float FragData) +0:46 Constant: +0:46 -1 (const int) +0:46 Constant: +0:46 1.000000 +0:46 1.000000 +0:46 1.000000 +0:46 1.000000 +0:47 move second child to first child ( temp 4-component vector of float) +0:47 direct index ( temp 4-component vector of float FragData) +0:47 'gl_FragData' ( fragColor 32-element array of 4-component vector of float FragData) +0:47 Constant: +0:47 3 (const int) +0:47 Constant: +0:47 1.000000 +0:47 1.000000 +0:47 1.000000 +0:47 1.000000 +0:50 Sequence +0:50 move second child to first child ( temp int) +0:50 'sum' ( temp int) +0:50 Constant: +0:50 3 (const int) +0:51 add second child into first child ( temp int) +0:51 'sum' ( temp int) +0:51 Constant: +0:51 2 (const int) +0:52 add second child into first child ( temp int) +0:52 'sum' ( temp int) +0:52 Constant: +0:52 2 (const int) +0:55 Sequence +0:55 move second child to first child ( temp 2-element array of int) +0:55 'ica' ( temp 2-element array of int) +0:55 Constant: +0:55 3 (const int) +0:55 2 (const int) +0:57 move second child to first child ( temp int) +0:57 direct index ( temp int) +0:57 'ica' ( temp 2-element array of int) +0:57 Constant: +0:57 3.100000 +0:57 Constant: +0:57 3 (const int) +0:58 move second child to first child ( temp int) +0:58 indirect index ( temp int) +0:58 'ica' ( temp 2-element array of int) +0:58 direct index ( temp float) +0:58 'u' ( temp 5-element array of float) +0:58 Constant: +0:58 1 (const int) +0:58 Constant: +0:58 4 (const int) +0:106 Sequence +0:106 move second child to first child ( temp float) +0:106 'b' ( global float) +0:106 Constant: +0:106 0.000000 +0:? Linker Objects +0:? 'gu' ( global 4-element array of float) +0:? 'g4' ( global 4-element array of float) +0:? 'g5' ( global 5-element array of float) +0:? 'a' ( uniform int) +0:? 'guns' ( global 8-element array of 3-component vector of float) +0:? 'f' ( global float) +0:? 'gUnusedUnsized' ( global 1-element array of float) +0:? 'i' ( global 1-element array of int) +0:? 'emptyA' ( global 1-element array of float) +0:? 'b' ( global float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/array100.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/array100.frag.out new file mode 100644 index 0000000..b99d817 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/array100.frag.out @@ -0,0 +1,273 @@ +array100.frag +ERROR: 0:3: 'float' : type requires declaration of default precision qualifier +ERROR: 0:3: '' : array size required +ERROR: 0:9: 'arrayed type' : not supported for this version or the enabled extensions +ERROR: 0:9: 'arrayed type' : not supported for this version or the enabled extensions +ERROR: 0:9: 'array in function return type' : not supported for this version or the enabled extensions +ERROR: 0:11: 'arrayed constructor' : not supported for this version or the enabled extensions +ERROR: 0:21: '[' : array index out of range '2' +ERROR: 0:24: 'array assignment' : not supported for this version or the enabled extensions +ERROR: 0:25: 'array assignment' : not supported for this version or the enabled extensions +ERROR: 0:25: 'assign' : cannot convert from ' global 4-element array of mediump float' to ' global 5-element array of mediump float' +ERROR: 0:26: 'array assignment' : not supported for this version or the enabled extensions +ERROR: 0:26: 'assign' : cannot convert from ' global 4-element array of mediump float' to ' global implicitly-sized array of mediump float' +ERROR: 0:28: 'foo' : no matching overloaded function found +ERROR: 0:31: 'arrayed constructor' : not supported for this version or the enabled extensions +ERROR: 0:31: 'array comparison' : not supported for this version or the enabled extensions +ERROR: 0:35: '[' : array index out of range '5' +ERROR: 0:38: '[' : array index out of range '1000' +ERROR: 0:39: '[' : index out of range '-1' +ERROR: 0:53: 'array in function return type' : not supported for this version or the enabled extensions +ERROR: 0:66: 'array assignment' : not supported for this version or the enabled extensions +ERROR: 0:68: 'array assignment' : not supported for this version or the enabled extensions +ERROR: 0:69: 'array initializer' : not supported for this version or the enabled extensions +ERROR: 22 compilation errors. No code generated. + + +Shader version: 100 +ERROR: node is still EOpNull! +0:9 Function Definition: foo(f1[5]; ( global 4-element array of mediump float) +0:9 Function Parameters: +0:9 'a' ( in 5-element array of mediump float) +0:11 Sequence +0:11 Branch: Return with expression +0:11 Construct float ( temp 4-element array of float) +0:11 direct index ( temp mediump float) +0:11 'a' ( in 5-element array of mediump float) +0:11 Constant: +0:11 0 (const int) +0:11 direct index ( temp mediump float) +0:11 'a' ( in 5-element array of mediump float) +0:11 Constant: +0:11 1 (const int) +0:11 direct index ( temp mediump float) +0:11 'a' ( in 5-element array of mediump float) +0:11 Constant: +0:11 2 (const int) +0:11 direct index ( temp mediump float) +0:11 'a' ( in 5-element array of mediump float) +0:11 Constant: +0:11 3 (const int) +0:14 Function Definition: bar(f1[5]; ( global void) +0:14 Function Parameters: +0:14 '' ( in 5-element array of mediump float) +0:16 Function Definition: main( ( global void) +0:16 Function Parameters: +0:? Sequence +0:? Sequence +0:21 move second child to first child ( temp mediump float) +0:21 direct index ( temp mediump float) +0:21 'gu' ( temp 2-element array of mediump float) +0:21 Constant: +0:21 2 (const int) +0:21 Constant: +0:21 4.000000 +0:24 move second child to first child ( temp 4-element array of mediump float) +0:24 'g4' ( global 4-element array of mediump float) +0:24 Function Call: foo(f1[5]; ( global 4-element array of mediump float) +0:24 'g5' ( global 5-element array of mediump float) +0:25 'g5' ( global 5-element array of mediump float) +0:26 'gu' ( global implicitly-sized array of mediump float) +0:28 Constant: +0:28 0.000000 +0:29 Function Call: bar(f1[5]; ( global void) +0:29 'g5' ( global 5-element array of mediump float) +0:31 Test condition and select ( temp void) +0:31 Condition +0:31 Compare Equal ( temp bool) +0:31 Constant: +0:31 1.000000 +0:31 2.000000 +0:31 3.000000 +0:31 4.000000 +0:31 'g4' ( global 4-element array of mediump float) +0:31 true case +0:32 move second child to first child ( temp mediump float) +0:32 direct index ( temp mediump float) +0:32 'gu' ( global implicitly-sized array of mediump float) +0:32 Constant: +0:32 0 (const int) +0:32 Constant: +0:32 2.000000 +0:35 move second child to first child ( temp mediump float) +0:35 direct index ( temp mediump float) +0:35 'u' ( temp 5-element array of mediump float) +0:35 Constant: +0:35 5 (const int) +0:35 Constant: +0:35 5.000000 +0:36 Function Call: foo(f1[5]; ( global 4-element array of mediump float) +0:36 'u' ( temp 5-element array of mediump float) +0:38 move second child to first child ( temp mediump 4-component vector of float) +0:38 direct index ( temp mediump 4-component vector of float FragData) +0:38 'gl_FragData' ( fragColor 32-element array of mediump 4-component vector of float FragData) +0:38 Constant: +0:38 1000 (const int) +0:38 Constant: +0:38 1.000000 +0:38 1.000000 +0:38 1.000000 +0:38 1.000000 +0:39 move second child to first child ( temp mediump 4-component vector of float) +0:39 direct index ( temp mediump 4-component vector of float FragData) +0:39 'gl_FragData' ( fragColor 32-element array of mediump 4-component vector of float FragData) +0:39 Constant: +0:39 -1 (const int) +0:39 Constant: +0:39 1.000000 +0:39 1.000000 +0:39 1.000000 +0:39 1.000000 +0:40 move second child to first child ( temp mediump 4-component vector of float) +0:40 direct index ( temp mediump 4-component vector of float FragData) +0:40 'gl_FragData' ( fragColor 32-element array of mediump 4-component vector of float FragData) +0:40 Constant: +0:40 3 (const int) +0:40 Constant: +0:40 1.000000 +0:40 1.000000 +0:40 1.000000 +0:40 1.000000 +0:53 Function Definition: bar9( ( global structure{ global mediump 4-component vector of float v4, global structure{ global mediump 3-component vector of float v3, global 4-element array of mediump 2-component vector of float v2} sa}) +0:53 Function Parameters: +0:? Sequence +0:56 Branch: Return with expression +0:56 's' ( temp structure{ global mediump 4-component vector of float v4, global structure{ global mediump 3-component vector of float v3, global 4-element array of mediump 2-component vector of float v2} sa}) +0:59 Function Definition: bar10(struct-SB-vf4-struct-SA-vf3-vf2[4]11; ( global void) +0:59 Function Parameters: +0:59 's' ( in structure{ global mediump 4-component vector of float v4, global structure{ global mediump 3-component vector of float v3, global 4-element array of mediump 2-component vector of float v2} sa}) +0:63 Function Definition: bar11( ( global void) +0:63 Function Parameters: +0:? Sequence +0:66 move second child to first child ( temp structure{ global mediump 4-component vector of float v4, global structure{ global mediump 3-component vector of float v3, global 4-element array of mediump 2-component vector of float v2} sa}) +0:66 's1' ( temp structure{ global mediump 4-component vector of float v4, global structure{ global mediump 3-component vector of float v3, global 4-element array of mediump 2-component vector of float v2} sa}) +0:66 's2' ( temp structure{ global mediump 4-component vector of float v4, global structure{ global mediump 3-component vector of float v3, global 4-element array of mediump 2-component vector of float v2} sa}) +0:67 Function Call: bar10(struct-SB-vf4-struct-SA-vf3-vf2[4]11; ( global void) +0:67 's1' ( temp structure{ global mediump 4-component vector of float v4, global structure{ global mediump 3-component vector of float v3, global 4-element array of mediump 2-component vector of float v2} sa}) +0:68 move second child to first child ( temp structure{ global mediump 4-component vector of float v4, global structure{ global mediump 3-component vector of float v3, global 4-element array of mediump 2-component vector of float v2} sa}) +0:68 's2' ( temp structure{ global mediump 4-component vector of float v4, global structure{ global mediump 3-component vector of float v3, global 4-element array of mediump 2-component vector of float v2} sa}) +0:68 Function Call: bar9( ( global structure{ global mediump 4-component vector of float v4, global structure{ global mediump 3-component vector of float v3, global 4-element array of mediump 2-component vector of float v2} sa}) +0:69 Sequence +0:69 move second child to first child ( temp structure{ global mediump 4-component vector of float v4, global structure{ global mediump 3-component vector of float v3, global 4-element array of mediump 2-component vector of float v2} sa}) +0:69 'initSb' ( temp structure{ global mediump 4-component vector of float v4, global structure{ global mediump 3-component vector of float v3, global 4-element array of mediump 2-component vector of float v2} sa}) +0:69 's1' ( temp structure{ global mediump 4-component vector of float v4, global structure{ global mediump 3-component vector of float v3, global 4-element array of mediump 2-component vector of float v2} sa}) +0:? Linker Objects +0:? 'gu' ( global implicitly-sized array of mediump float) +0:? 'g4' ( global 4-element array of mediump float) +0:? 'g5' ( global 5-element array of mediump float) +0:? 'a' ( uniform mediump int) + + +Linked fragment stage: + + +Shader version: 100 +ERROR: node is still EOpNull! +0:9 Function Definition: foo(f1[5]; ( global 4-element array of mediump float) +0:9 Function Parameters: +0:9 'a' ( in 5-element array of mediump float) +0:11 Sequence +0:11 Branch: Return with expression +0:11 Construct float ( temp 4-element array of float) +0:11 direct index ( temp mediump float) +0:11 'a' ( in 5-element array of mediump float) +0:11 Constant: +0:11 0 (const int) +0:11 direct index ( temp mediump float) +0:11 'a' ( in 5-element array of mediump float) +0:11 Constant: +0:11 1 (const int) +0:11 direct index ( temp mediump float) +0:11 'a' ( in 5-element array of mediump float) +0:11 Constant: +0:11 2 (const int) +0:11 direct index ( temp mediump float) +0:11 'a' ( in 5-element array of mediump float) +0:11 Constant: +0:11 3 (const int) +0:14 Function Definition: bar(f1[5]; ( global void) +0:14 Function Parameters: +0:14 '' ( in 5-element array of mediump float) +0:16 Function Definition: main( ( global void) +0:16 Function Parameters: +0:? Sequence +0:? Sequence +0:21 move second child to first child ( temp mediump float) +0:21 direct index ( temp mediump float) +0:21 'gu' ( temp 2-element array of mediump float) +0:21 Constant: +0:21 2 (const int) +0:21 Constant: +0:21 4.000000 +0:24 move second child to first child ( temp 4-element array of mediump float) +0:24 'g4' ( global 4-element array of mediump float) +0:24 Function Call: foo(f1[5]; ( global 4-element array of mediump float) +0:24 'g5' ( global 5-element array of mediump float) +0:25 'g5' ( global 5-element array of mediump float) +0:26 'gu' ( global 1-element array of mediump float) +0:28 Constant: +0:28 0.000000 +0:29 Function Call: bar(f1[5]; ( global void) +0:29 'g5' ( global 5-element array of mediump float) +0:31 Test condition and select ( temp void) +0:31 Condition +0:31 Compare Equal ( temp bool) +0:31 Constant: +0:31 1.000000 +0:31 2.000000 +0:31 3.000000 +0:31 4.000000 +0:31 'g4' ( global 4-element array of mediump float) +0:31 true case +0:32 move second child to first child ( temp mediump float) +0:32 direct index ( temp mediump float) +0:32 'gu' ( global 1-element array of mediump float) +0:32 Constant: +0:32 0 (const int) +0:32 Constant: +0:32 2.000000 +0:35 move second child to first child ( temp mediump float) +0:35 direct index ( temp mediump float) +0:35 'u' ( temp 5-element array of mediump float) +0:35 Constant: +0:35 5 (const int) +0:35 Constant: +0:35 5.000000 +0:36 Function Call: foo(f1[5]; ( global 4-element array of mediump float) +0:36 'u' ( temp 5-element array of mediump float) +0:38 move second child to first child ( temp mediump 4-component vector of float) +0:38 direct index ( temp mediump 4-component vector of float FragData) +0:38 'gl_FragData' ( fragColor 32-element array of mediump 4-component vector of float FragData) +0:38 Constant: +0:38 1000 (const int) +0:38 Constant: +0:38 1.000000 +0:38 1.000000 +0:38 1.000000 +0:38 1.000000 +0:39 move second child to first child ( temp mediump 4-component vector of float) +0:39 direct index ( temp mediump 4-component vector of float FragData) +0:39 'gl_FragData' ( fragColor 32-element array of mediump 4-component vector of float FragData) +0:39 Constant: +0:39 -1 (const int) +0:39 Constant: +0:39 1.000000 +0:39 1.000000 +0:39 1.000000 +0:39 1.000000 +0:40 move second child to first child ( temp mediump 4-component vector of float) +0:40 direct index ( temp mediump 4-component vector of float FragData) +0:40 'gl_FragData' ( fragColor 32-element array of mediump 4-component vector of float FragData) +0:40 Constant: +0:40 3 (const int) +0:40 Constant: +0:40 1.000000 +0:40 1.000000 +0:40 1.000000 +0:40 1.000000 +0:? Linker Objects +0:? 'gu' ( global 1-element array of mediump float) +0:? 'g4' ( global 4-element array of mediump float) +0:? 'g5' ( global 5-element array of mediump float) +0:? 'a' ( uniform mediump int) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/atomic_uint.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/atomic_uint.frag.out new file mode 100644 index 0000000..e0ba099 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/atomic_uint.frag.out @@ -0,0 +1,113 @@ +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 +ERROR: 0:18: 'atomic_uint' : layout(binding=X) is required +ERROR: 0:23: 'binding' : atomic_uint binding is too large; see gl_MaxAtomicCounterBindings +ERROR: 0:28: '+' : wrong operand types: no operation '+' exists that takes a left-hand operand of type 'layout( binding=0 offset=0) uniform atomic_uint' and a right operand of type 'layout( binding=0 offset=0) uniform atomic_uint' (or there is no acceptable conversion) +ERROR: 0:29: '-' : wrong operand type no operation '-' exists that takes an operand of type layout( binding=0 offset=0) uniform atomic_uint (or there is no acceptable conversion) +ERROR: 0:31: '[]' : scalar integer expression required +ERROR: 0:34: 'assign' : l-value required "counter" (can't modify a uniform) +ERROR: 0:34: 'assign' : cannot convert from ' const int' to 'layout( binding=0 offset=0) uniform atomic_uint' +ERROR: 0:37: 'atomic_uint' : atomic_uints can only be used in uniform variables or function parameters: acin +ERROR: 0:37: 'atomic_uint' : layout(binding=X) is required +ERROR: 0:38: 'atomic_uint' : atomic_uints can only be used in uniform variables or function parameters: acg +ERROR: 0:38: 'atomic_uint' : layout(binding=X) is required +ERROR: 0:40: 'atomic_uint' : layout(binding=X) is required +ERROR: 0:46: 'atomic_uint' : layout(binding=X) is required +ERROR: 0:47: 'offset' : atomic counters sharing the same offset: 12 +ERROR: 0:48: 'binding' : atomic_uint binding is too large; see gl_MaxAtomicCounterBindings +ERROR: 18 compilation errors. No code generated. + + +Shader version: 420 +ERROR: node is still EOpNull! +0:5 Function Definition: func(au1; ( global uint) +0:5 Function Parameters: +0:5 'c' ( in atomic_uint) +0:7 Sequence +0:7 Branch: Return with expression +0:7 AtomicCounterIncrement ( global uint) +0:7 'c' ( in atomic_uint) +0:10 Function Definition: func2(au1; ( global uint) +0:10 Function Parameters: +0:10 'c' ( out atomic_uint) +0:12 Sequence +0:12 Branch: Return with expression +0:12 'counter' (layout( binding=0 offset=0) uniform atomic_uint) +0:13 Branch: Return with expression +0:13 AtomicCounter ( global uint) +0:13 'counter' (layout( binding=0 offset=0) uniform atomic_uint) +0:16 Function Definition: main( ( global void) +0:16 Function Parameters: +0:? Sequence +0:19 Sequence +0:19 move second child to first child ( temp uint) +0:19 'val' ( temp uint) +0:19 AtomicCounter ( global uint) +0:19 'counter' (layout( binding=0 offset=0) uniform atomic_uint) +0:20 AtomicCounterDecrement ( global uint) +0:20 'counter' (layout( binding=0 offset=0) uniform atomic_uint) +0:26 Function Definition: opac( ( global void) +0:26 Function Parameters: +0:28 Sequence +0:28 'counter' (layout( binding=0 offset=0) uniform atomic_uint) +0:29 'counter' (layout( binding=0 offset=0) uniform atomic_uint) +0:31 indirect index ( temp int) +0:31 'a' ( temp 3-element array of int) +0:31 'counter' (layout( binding=0 offset=0) uniform atomic_uint) +0:32 direct index (layout( binding=1 offset=3) temp atomic_uint) +0:32 'countArr' (layout( binding=1 offset=3) uniform 4-element array of atomic_uint) +0:32 Constant: +0:32 2 (const int) +0:33 indirect index (layout( binding=1 offset=3) temp atomic_uint) +0:33 'countArr' (layout( binding=1 offset=3) uniform 4-element array of atomic_uint) +0:33 'i' ( uniform int) +0:34 'counter' (layout( binding=0 offset=0) uniform atomic_uint) +0:? Linker Objects +0:? 'counter' (layout( binding=0 offset=0) uniform atomic_uint) +0:? 'countArr' (layout( binding=1 offset=3) uniform 4-element array of atomic_uint) +0:? 'i' ( uniform int) +0:? 'acin' ( smooth in atomic_uint) +0:? 'acg' ( global atomic_uint) +0:? 'aNoBind' ( uniform atomic_uint) +0:? 'aOffset' (layout( binding=0 offset=32) uniform atomic_uint) +0:? 'bar3' (layout( binding=0 offset=4) uniform atomic_uint) +0:? 'ac' (layout( binding=0 offset=8) uniform 3-element array of atomic_uint) +0:? 'ad' (layout( binding=0 offset=20) uniform atomic_uint) +0:? 'bar4' (layout( offset=8) uniform atomic_uint) +0:? 'overlap' (layout( binding=0 offset=12) uniform atomic_uint) +0:? 'bigBind' (layout( binding=20) uniform atomic_uint) + + +Linked fragment stage: + + +Shader version: 420 +ERROR: node is still EOpNull! +0:16 Function Definition: main( ( global void) +0:16 Function Parameters: +0:? Sequence +0:19 Sequence +0:19 move second child to first child ( temp uint) +0:19 'val' ( temp uint) +0:19 AtomicCounter ( global uint) +0:19 'counter' (layout( binding=0 offset=0) uniform atomic_uint) +0:20 AtomicCounterDecrement ( global uint) +0:20 'counter' (layout( binding=0 offset=0) uniform atomic_uint) +0:? Linker Objects +0:? 'counter' (layout( binding=0 offset=0) uniform atomic_uint) +0:? 'countArr' (layout( binding=1 offset=3) uniform 4-element array of atomic_uint) +0:? 'i' ( uniform int) +0:? 'acin' ( smooth in atomic_uint) +0:? 'acg' ( global atomic_uint) +0:? 'aNoBind' ( uniform atomic_uint) +0:? 'aOffset' (layout( binding=0 offset=32) uniform atomic_uint) +0:? 'bar3' (layout( binding=0 offset=4) uniform atomic_uint) +0:? 'ac' (layout( binding=0 offset=8) uniform 3-element array of atomic_uint) +0:? 'ad' (layout( binding=0 offset=20) uniform atomic_uint) +0:? 'bar4' (layout( offset=8) uniform atomic_uint) +0:? 'overlap' (layout( binding=0 offset=12) uniform atomic_uint) +0:? 'bigBind' (layout( binding=20) uniform atomic_uint) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/badChars.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/badChars.frag.out new file mode 100644 index 0000000..de9af0d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/badChars.frag.out @@ -0,0 +1,27 @@ +badChars.frag +ERROR: 0:1: 'preprocessor evaluation' : bad expression +ERROR: 0:1: '#if' : unexpected tokens following directive +ERROR: 0:3: '#error' : A B +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: 8 compilation errors. No code generated. + + +Shader version: 100 +ERROR: node is still EOpNull! +0:? Linker Objects +0:? 'a' ( global mediump int) + + +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 +0:? 'a' ( global mediump int) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/badMacroArgs.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/badMacroArgs.frag.out new file mode 100644 index 0000000..95937ce --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/badMacroArgs.frag.out @@ -0,0 +1,7 @@ +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 new file mode 100644 index 0000000..57f2a1d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/comment.frag.out @@ -0,0 +1,23 @@ +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 + +Shader version: 430 +0:? Sequence +0:17 Function Definition: main( ( global void) +0:17 Function Parameters: +0:? Linker Objects +0:? 'v' ( smooth in 4-component vector of float) + + +Linked fragment stage: + + +Shader version: 430 +0:? Sequence +0:17 Function Definition: main( ( global void) +0:17 Function Parameters: +0:? Linker Objects +0:? 'v' ( smooth in 4-component vector of float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/conditionalDiscard.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/conditionalDiscard.frag.out new file mode 100644 index 0000000..255d9c4 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/conditionalDiscard.frag.out @@ -0,0 +1,63 @@ +conditionalDiscard.frag +Shader version: 110 +0:? Sequence +0:6 Function Definition: main( ( global void) +0:6 Function Parameters: +0:8 Sequence +0:8 Sequence +0:8 move second child to first child ( temp 4-component vector of float) +0:8 'v' ( temp 4-component vector of float) +0:8 texture ( global 4-component vector of float) +0:8 'tex' ( uniform sampler2D) +0:8 'coord' ( smooth in 2-component vector of float) +0:10 Test condition and select ( temp void) +0:10 Condition +0:10 Compare Equal ( temp bool) +0:10 'v' ( temp 4-component vector of float) +0:10 Constant: +0:10 0.100000 +0:10 0.200000 +0:10 0.300000 +0:10 0.400000 +0:10 true case +0:11 Branch: Kill +0:13 move second child to first child ( temp 4-component vector of float) +0:13 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:13 'v' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'tex' ( uniform sampler2D) +0:? 'coord' ( smooth in 2-component vector of float) + + +Linked fragment stage: + + +Shader version: 110 +0:? Sequence +0:6 Function Definition: main( ( global void) +0:6 Function Parameters: +0:8 Sequence +0:8 Sequence +0:8 move second child to first child ( temp 4-component vector of float) +0:8 'v' ( temp 4-component vector of float) +0:8 texture ( global 4-component vector of float) +0:8 'tex' ( uniform sampler2D) +0:8 'coord' ( smooth in 2-component vector of float) +0:10 Test condition and select ( temp void) +0:10 Condition +0:10 Compare Equal ( temp bool) +0:10 'v' ( temp 4-component vector of float) +0:10 Constant: +0:10 0.100000 +0:10 0.200000 +0:10 0.300000 +0:10 0.400000 +0:10 true case +0:11 Branch: Kill +0:13 move second child to first child ( temp 4-component vector of float) +0:13 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:13 'v' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'tex' ( uniform sampler2D) +0:? 'coord' ( smooth in 2-component vector of float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/constErrors.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/constErrors.frag.out new file mode 100644 index 0000000..0b2dc62 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/constErrors.frag.out @@ -0,0 +1,54 @@ +constErrors.frag +ERROR: 0:14: 'non-constant initializer' : not supported for this version or the enabled extensions +ERROR: 0:17: '' : array size must be a constant integer expression +ERROR: 0:18: '' : array size must be a constant integer expression +ERROR: 0:19: '' : array size must be a constant integer expression +ERROR: 0:27: '=' : global const initializers must be constant ' const structure{ global 3-component vector of float v3, global 2-component vector of int iv2}' +ERROR: 0:33: '=' : global const initializers must be constant ' const structure{ global 3-component vector of float v3, global 2-component vector of int iv2, global 2X4 matrix of float m}' +ERROR: 6 compilation errors. No code generated. + + +Shader version: 330 +ERROR: node is still EOpNull! +0:10 Function Definition: main( ( global void) +0:10 Function Parameters: +0:? Sequence +0:14 Sequence +0:14 move second child to first child ( temp int) +0:14 'a3' ( const (read only) int) +0:14 'uniformInt' ( uniform int) +0:? Linker Objects +0:? 'inVar' ( smooth in 4-component vector of float) +0:? 'outVar' ( out 4-component vector of float) +0:? 'constInt' ( const int) +0:? 3 (const int) +0:? 'uniformInt' ( uniform int) +0:? 's' ( temp structure{ global 3-component vector of float v3, global 2-component vector of int iv2}) +0:? 's2' ( temp structure{ global 3-component vector of float v3, global 2-component vector of int iv2, global 2X4 matrix of float m}) +0:? 'f' ( const float) +0:? 3.000000 + + +Linked fragment stage: + + +Shader version: 330 +ERROR: node is still EOpNull! +0:10 Function Definition: main( ( global void) +0:10 Function Parameters: +0:? Sequence +0:14 Sequence +0:14 move second child to first child ( temp int) +0:14 'a3' ( const (read only) int) +0:14 'uniformInt' ( uniform int) +0:? Linker Objects +0:? 'inVar' ( smooth in 4-component vector of float) +0:? 'outVar' ( out 4-component vector of float) +0:? 'constInt' ( const int) +0:? 3 (const int) +0:? 'uniformInt' ( uniform int) +0:? 's' ( temp structure{ global 3-component vector of float v3, global 2-component vector of int iv2}) +0:? 's2' ( temp structure{ global 3-component vector of float v3, global 2-component vector of int iv2, global 2X4 matrix of float m}) +0:? 'f' ( const float) +0:? 3.000000 + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/constFold.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/constFold.frag.out new file mode 100644 index 0000000..8c01468 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/constFold.frag.out @@ -0,0 +1,657 @@ +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' +ERROR: 0:112: '[' : index out of range '-1' +ERROR: 0:113: '[' : vector index out of range '3' +ERROR: 0:114: '[' : matrix index out of range '3' +ERROR: 6 compilation errors. No code generated. + + +Shader version: 430 +ERROR: node is still EOpNull! +0:28 Function Definition: main( ( global void) +0:28 Function Parameters: +0:30 Sequence +0:30 Sequence +0:30 move second child to first child ( temp 4-component vector of float) +0:30 'dx' ( temp 4-component vector of float) +0:30 dPdx ( global 4-component vector of float) +0:30 'inv' ( smooth in 4-component vector of float) +0:37 move second child to first child ( temp 4-component vector of float) +0:37 'FragColor' ( out 4-component vector of float) +0:37 Constant: +0:37 2.000000 +0:37 6.000000 +0:37 3.000000 +0:37 171.887339 +0:42 move second child to first child ( temp 4-component vector of float) +0:42 'FragColor' ( out 4-component vector of float) +0:42 Constant: +0:42 3.000000 +0:42 2.000000 +0:42 0.001593 +0:42 -0.999999 +0:43 move second child to first child ( temp 2-component vector of float) +0:43 'out2' ( out 2-component vector of float) +0:43 Constant: +0:43 5.600000 +0:43 5.800000 +0:44 move second child to first child ( temp 4-component vector of float) +0:44 'out3' ( out 4-component vector of float) +0:44 Constant: +0:44 20.085537 +0:44 2.302585 +0:44 16.000000 +0:44 8.000000 +0:45 move second child to first child ( temp 4-component vector of float) +0:45 'out4' ( out 4-component vector of float) +0:45 Constant: +0:45 10.000000 +0:45 0.100000 +0:45 4.700000 +0:45 10.900000 +0:46 move second child to first child ( temp 4-component vector of int) +0:46 'out5' ( out 4-component vector of int) +0:46 Constant: +0:46 8 (const int) +0:46 17 (const int) +0:46 -1 (const int) +0:46 1 (const int) +0:47 move second child to first child ( temp 3-component vector of float) +0:47 'out6' ( out 3-component vector of float) +0:47 Constant: +0:47 -1.000000 +0:47 1.000000 +0:47 0.000000 +0:48 move second child to first child ( temp 4-component vector of float) +0:48 'out7' ( out 4-component vector of float) +0:48 Constant: +0:48 4.000000 +0:48 -4.000000 +0:48 5.000000 +0:48 -5.000000 +0:49 move second child to first child ( temp 4-component vector of float) +0:49 'out8' ( out 4-component vector of float) +0:49 Constant: +0:49 4.000000 +0:49 5.000000 +0:49 4.000000 +0:49 -6.000000 +0:50 move second child to first child ( temp 4-component vector of float) +0:50 'out9' ( out 4-component vector of float) +0:50 Constant: +0:50 8.000000 +0:50 -4.000000 +0:50 0.345000 +0:50 0.400000 +0:51 move second child to first child ( temp 4-component vector of float) +0:51 'out10' ( out 4-component vector of float) +0:51 Constant: +0:51 1.000000 +0:51 1.000000 +0:51 0.000000 +0:51 0.000000 +0:52 move second child to first child ( temp 4-component vector of float) +0:52 'out11' ( out 4-component vector of float) +0:52 Constant: +0:52 0.000000 +0:52 0.000000 +0:52 1.000000 +0:52 0.000000 +0:53 move second child to first child ( temp 4-component vector of float) +0:53 'out11' ( out 4-component vector of float) +0:53 Constant: +0:53 1.029639 +0:53 0.799690 +0:53 0.674741 +0:53 1.570696 +0:54 move second child to first child ( temp 4-component vector of float) +0:54 'out11' ( out 4-component vector of float) +0:54 Constant: +0:54 0.000000 +0:54 0.523599 +0:54 1.570796 +0:54 1.047198 +0:58 move second child to first child ( temp 4-component vector of float) +0:58 'out11' ( out 4-component vector of float) +0:58 Constant: +0:58 1.373401 +0:58 0.000000 +0:58 0.896055 +0:58 -0.380506 +0:62 move second child to first child ( temp 2-component vector of int) +0:62 'out12' ( out 2-component vector of int) +0:62 Constant: +0:62 15 (const int) +0:62 16 (const int) +0:63 move second child to first child ( temp 2-component vector of int) +0:63 'out12' ( out 2-component vector of int) +0:63 Constant: +0:63 17 (const int) +0:63 17 (const int) +0:64 move second child to first child ( temp 2-component vector of float) +0:64 'out2' ( out 2-component vector of float) +0:64 Constant: +0:64 871.421253 +0:64 4913.000000 +0:65 move second child to first child ( temp 3-component vector of uint) +0:65 'out13' ( out 3-component vector of uint) +0:65 Constant: +0:65 10 (const uint) +0:65 20 (const uint) +0:65 30 (const uint) +0:66 move second child to first child ( temp 2-component vector of float) +0:66 'out2' ( out 2-component vector of float) +0:66 Constant: +0:66 3.000000 +0:66 6.000000 +0:67 move second child to first child ( temp 2-component vector of float) +0:67 'out2' ( out 2-component vector of float) +0:67 Constant: +0:67 3.500000 +0:67 4.500000 +0:68 move second child to first child ( temp 2-component vector of float) +0:68 'out2' ( out 2-component vector of float) +0:68 Constant: +0:68 0.000000 +0:68 1.000000 +0:69 move second child to first child ( temp 4-component vector of float) +0:69 'out11' ( out 4-component vector of float) +0:69 Constant: +0:69 0.000000 +0:69 0.028000 +0:69 0.500000 +0:69 1.000000 +0:78 Function Definition: foo( ( global void) +0:78 Function Parameters: +0:? Sequence +0:81 move second child to first child ( temp float) +0:81 direct index ( temp float) +0:81 'a' ( temp 3-element array of float) +0:81 Constant: +0:81 0 (const int) +0:81 Constant: +0:81 7.000000 +0:82 Constant: +0:82 2 (const int) +0:83 Constant: +0:83 2147483647 (const int) +0:84 Constant: +0:84 inf +0:88 Constant: +0:88 2 (const uint) +0:88 3 (const uint) +0:89 Constant: +0:89 0 (const uint) +0:90 Constant: +0:90 6 (const uint) +0:90 7 (const uint) +0:103 Function Definition: foo2( ( global void) +0:103 Function Parameters: +0:105 Sequence +0:105 direct index ( temp float) +0:105 'a1' ( global 1-element array of float) +0:105 Constant: +0:105 0 (const int) +0:106 direct index ( temp float) +0:106 'a2' ( global 2-element array of float) +0:106 Constant: +0:106 0 (const int) +0:107 direct index ( temp float) +0:107 'a3' ( global 4-element array of float) +0:107 Constant: +0:107 0 (const int) +0:108 direct index ( temp float) +0:108 'a4' ( global 2-element array of float) +0:108 Constant: +0:108 0 (const int) +0:109 Constant: +0:109 1.000000 +0:110 Constant: +0:110 5.000000 +0:111 Constant: +0:111 2.000000 +0:112 Constant: +0:112 3.000000 +0:113 Constant: +0:113 0.000000 +0:114 Constant: +0:114 0.000000 +0:116 move second child to first child ( temp int) +0:116 'p' ( temp int) +0:116 Constant: +0:116 2147483647 (const int) +0:117 move second child to first child ( temp int) +0:117 'p' ( temp int) +0:117 Constant: +0:117 -2147483648 (const int) +0:118 move second child to first child ( temp int) +0:118 'p' ( temp int) +0:118 Constant: +0:118 -2147483647 (const int) +0:119 Sequence +0:119 move second child to first child ( temp float) +0:119 'f' ( temp float) +0:119 Constant: +0:119 1.444000 +0:120 move second child to first child ( temp float) +0:120 'f' ( temp float) +0:120 direct index ( temp float) +0:120 Construct vec4 ( temp 4-component vector of float) +0:120 Test condition and select ( temp float) +0:120 Condition +0:120 Compare Less Than ( temp bool) +0:120 direct index ( temp float) +0:120 'inv' ( smooth in 4-component vector of float) +0:120 Constant: +0:120 0 (const int) +0:120 Constant: +0:120 2.400000 +0:120 true case +0:120 Constant: +0:120 -1.000000 +0:120 false case +0:120 Constant: +0:120 1.000000 +0:120 Constant: +0:120 3 (const int) +0:126 Function Definition: foo3( ( global void) +0:126 Function Parameters: +0:128 Sequence +0:128 Sequence +0:128 move second child to first child ( temp 3X2 matrix of float) +0:128 'r32' ( temp 3X2 matrix of float) +0:128 Constant: +0:128 43.000000 +0:128 64.000000 +0:128 51.000000 +0:128 76.000000 +0:128 59.000000 +0:128 88.000000 +0:138 Function Definition: foo4( ( global void) +0:138 Function Parameters: +0:140 Sequence +0:140 Sequence +0:140 move second child to first child ( temp int) +0:140 'a' ( temp int) +0:140 Constant: +0:140 9 (const int) +0:? Linker Objects +0:? 'a' ( const int) +0:? 1 (const int) +0:? 'b' ( const int) +0:? 2 (const int) +0:? 'c' ( const int) +0:? 3 (const int) +0:? 'd' ( const int) +0:? 2 (const int) +0:? 'e' ( const float) +0:? 2.000000 +0:? 'f' ( const float) +0:? 6.000000 +0:? 'g' ( const float) +0:? 3.000000 +0:? 'pytho' ( const 2-component vector of float) +0:? 3.000000 +0:? 4.000000 +0:? 'inv' ( smooth in 4-component vector of float) +0:? 'FragColor' ( out 4-component vector of float) +0:? 'out2' ( out 2-component vector of float) +0:? 'out3' ( out 4-component vector of float) +0:? 'out4' ( out 4-component vector of float) +0:? 'out5' ( out 4-component vector of int) +0:? 'out6' ( out 3-component vector of float) +0:? 'out7' ( out 4-component vector of float) +0:? 'out8' ( out 4-component vector of float) +0:? 'out9' ( out 4-component vector of float) +0:? 'out10' ( out 4-component vector of float) +0:? 'out11' ( out 4-component vector of float) +0:? 'out12' ( out 2-component vector of int) +0:? 'out13' ( out 3-component vector of uint) +0:? 's' ( const structure{ global 3-component vector of float v3, global 2-component vector of int iv2, global 2X4 matrix of float m}) +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3 (const int) +0:? 3 (const int) +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:? 5.000000 +0:? 6.000000 +0:? 7.000000 +0:? 8.000000 +0:? 'm2' ( const 2X2 matrix of float) +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:? 5.000000 +0:? 'm3' ( const 3X3 matrix of float) +0:? 2.000000 +0:? 3.000000 +0:? 0.000000 +0:? 4.000000 +0:? 5.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 1.000000 +0:? 'mc' ( const int) +0:? 1 (const int) +0:? 'a1' ( global 1-element array of float) +0:? 'a2' ( global 2-element array of float) +0:? 'a3' ( global 4-element array of float) +0:? 'v2' ( const 2-component vector of float) +0:? 1.000000 +0:? 2.000000 +0:? 'v3' ( const 3-component vector of float) +0:? 3.000000 +0:? 4.000000 +0:? 5.000000 +0:? 'a4' ( global 2-element array of float) +0:? 'mm2' ( const 2X2 matrix of float) +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:? 'mm32' ( const 3X2 matrix of float) +0:? 10.000000 +0:? 11.000000 +0:? 12.000000 +0:? 13.000000 +0:? 14.000000 +0:? 15.000000 +0:? 'a0' ( const 3-element array of structure{ global int i, global float f, global bool b}) +0:? 3 (const int) +0:? 2.000000 +0:? true (const bool) +0:? 1 (const int) +0:? 5.000000 +0:? true (const bool) +0:? 1 (const int) +0:? 9.000000 +0:? false (const bool) +0:? 'cval1' ( const bool) +0:? true (const bool) +0:? 'cval2' ( const bool) +0:? false (const bool) +0:? 'cval3' ( const bool) +0:? false (const bool) +0:? 'cval4' ( const bool) +0:? true (const bool) +0:? 'cval5' ( const bool) +0:? false (const bool) +0:? 'cval6' ( const bool) +0:? true (const bool) + + +Linked fragment stage: + + +Shader version: 430 +ERROR: node is still EOpNull! +0:28 Function Definition: main( ( global void) +0:28 Function Parameters: +0:30 Sequence +0:30 Sequence +0:30 move second child to first child ( temp 4-component vector of float) +0:30 'dx' ( temp 4-component vector of float) +0:30 dPdx ( global 4-component vector of float) +0:30 'inv' ( smooth in 4-component vector of float) +0:37 move second child to first child ( temp 4-component vector of float) +0:37 'FragColor' ( out 4-component vector of float) +0:37 Constant: +0:37 2.000000 +0:37 6.000000 +0:37 3.000000 +0:37 171.887339 +0:42 move second child to first child ( temp 4-component vector of float) +0:42 'FragColor' ( out 4-component vector of float) +0:42 Constant: +0:42 3.000000 +0:42 2.000000 +0:42 0.001593 +0:42 -0.999999 +0:43 move second child to first child ( temp 2-component vector of float) +0:43 'out2' ( out 2-component vector of float) +0:43 Constant: +0:43 5.600000 +0:43 5.800000 +0:44 move second child to first child ( temp 4-component vector of float) +0:44 'out3' ( out 4-component vector of float) +0:44 Constant: +0:44 20.085537 +0:44 2.302585 +0:44 16.000000 +0:44 8.000000 +0:45 move second child to first child ( temp 4-component vector of float) +0:45 'out4' ( out 4-component vector of float) +0:45 Constant: +0:45 10.000000 +0:45 0.100000 +0:45 4.700000 +0:45 10.900000 +0:46 move second child to first child ( temp 4-component vector of int) +0:46 'out5' ( out 4-component vector of int) +0:46 Constant: +0:46 8 (const int) +0:46 17 (const int) +0:46 -1 (const int) +0:46 1 (const int) +0:47 move second child to first child ( temp 3-component vector of float) +0:47 'out6' ( out 3-component vector of float) +0:47 Constant: +0:47 -1.000000 +0:47 1.000000 +0:47 0.000000 +0:48 move second child to first child ( temp 4-component vector of float) +0:48 'out7' ( out 4-component vector of float) +0:48 Constant: +0:48 4.000000 +0:48 -4.000000 +0:48 5.000000 +0:48 -5.000000 +0:49 move second child to first child ( temp 4-component vector of float) +0:49 'out8' ( out 4-component vector of float) +0:49 Constant: +0:49 4.000000 +0:49 5.000000 +0:49 4.000000 +0:49 -6.000000 +0:50 move second child to first child ( temp 4-component vector of float) +0:50 'out9' ( out 4-component vector of float) +0:50 Constant: +0:50 8.000000 +0:50 -4.000000 +0:50 0.345000 +0:50 0.400000 +0:51 move second child to first child ( temp 4-component vector of float) +0:51 'out10' ( out 4-component vector of float) +0:51 Constant: +0:51 1.000000 +0:51 1.000000 +0:51 0.000000 +0:51 0.000000 +0:52 move second child to first child ( temp 4-component vector of float) +0:52 'out11' ( out 4-component vector of float) +0:52 Constant: +0:52 0.000000 +0:52 0.000000 +0:52 1.000000 +0:52 0.000000 +0:53 move second child to first child ( temp 4-component vector of float) +0:53 'out11' ( out 4-component vector of float) +0:53 Constant: +0:53 1.029639 +0:53 0.799690 +0:53 0.674741 +0:53 1.570696 +0:54 move second child to first child ( temp 4-component vector of float) +0:54 'out11' ( out 4-component vector of float) +0:54 Constant: +0:54 0.000000 +0:54 0.523599 +0:54 1.570796 +0:54 1.047198 +0:58 move second child to first child ( temp 4-component vector of float) +0:58 'out11' ( out 4-component vector of float) +0:58 Constant: +0:58 1.373401 +0:58 0.000000 +0:58 0.896055 +0:58 -0.380506 +0:62 move second child to first child ( temp 2-component vector of int) +0:62 'out12' ( out 2-component vector of int) +0:62 Constant: +0:62 15 (const int) +0:62 16 (const int) +0:63 move second child to first child ( temp 2-component vector of int) +0:63 'out12' ( out 2-component vector of int) +0:63 Constant: +0:63 17 (const int) +0:63 17 (const int) +0:64 move second child to first child ( temp 2-component vector of float) +0:64 'out2' ( out 2-component vector of float) +0:64 Constant: +0:64 871.421253 +0:64 4913.000000 +0:65 move second child to first child ( temp 3-component vector of uint) +0:65 'out13' ( out 3-component vector of uint) +0:65 Constant: +0:65 10 (const uint) +0:65 20 (const uint) +0:65 30 (const uint) +0:66 move second child to first child ( temp 2-component vector of float) +0:66 'out2' ( out 2-component vector of float) +0:66 Constant: +0:66 3.000000 +0:66 6.000000 +0:67 move second child to first child ( temp 2-component vector of float) +0:67 'out2' ( out 2-component vector of float) +0:67 Constant: +0:67 3.500000 +0:67 4.500000 +0:68 move second child to first child ( temp 2-component vector of float) +0:68 'out2' ( out 2-component vector of float) +0:68 Constant: +0:68 0.000000 +0:68 1.000000 +0:69 move second child to first child ( temp 4-component vector of float) +0:69 'out11' ( out 4-component vector of float) +0:69 Constant: +0:69 0.000000 +0:69 0.028000 +0:69 0.500000 +0:69 1.000000 +0:? Linker Objects +0:? 'a' ( const int) +0:? 1 (const int) +0:? 'b' ( const int) +0:? 2 (const int) +0:? 'c' ( const int) +0:? 3 (const int) +0:? 'd' ( const int) +0:? 2 (const int) +0:? 'e' ( const float) +0:? 2.000000 +0:? 'f' ( const float) +0:? 6.000000 +0:? 'g' ( const float) +0:? 3.000000 +0:? 'pytho' ( const 2-component vector of float) +0:? 3.000000 +0:? 4.000000 +0:? 'inv' ( smooth in 4-component vector of float) +0:? 'FragColor' ( out 4-component vector of float) +0:? 'out2' ( out 2-component vector of float) +0:? 'out3' ( out 4-component vector of float) +0:? 'out4' ( out 4-component vector of float) +0:? 'out5' ( out 4-component vector of int) +0:? 'out6' ( out 3-component vector of float) +0:? 'out7' ( out 4-component vector of float) +0:? 'out8' ( out 4-component vector of float) +0:? 'out9' ( out 4-component vector of float) +0:? 'out10' ( out 4-component vector of float) +0:? 'out11' ( out 4-component vector of float) +0:? 'out12' ( out 2-component vector of int) +0:? 'out13' ( out 3-component vector of uint) +0:? 's' ( const structure{ global 3-component vector of float v3, global 2-component vector of int iv2, global 2X4 matrix of float m}) +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3 (const int) +0:? 3 (const int) +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:? 5.000000 +0:? 6.000000 +0:? 7.000000 +0:? 8.000000 +0:? 'm2' ( const 2X2 matrix of float) +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:? 5.000000 +0:? 'm3' ( const 3X3 matrix of float) +0:? 2.000000 +0:? 3.000000 +0:? 0.000000 +0:? 4.000000 +0:? 5.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 1.000000 +0:? 'mc' ( const int) +0:? 1 (const int) +0:? 'a1' ( global 1-element array of float) +0:? 'a2' ( global 2-element array of float) +0:? 'a3' ( global 4-element array of float) +0:? 'v2' ( const 2-component vector of float) +0:? 1.000000 +0:? 2.000000 +0:? 'v3' ( const 3-component vector of float) +0:? 3.000000 +0:? 4.000000 +0:? 5.000000 +0:? 'a4' ( global 2-element array of float) +0:? 'mm2' ( const 2X2 matrix of float) +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:? 'mm32' ( const 3X2 matrix of float) +0:? 10.000000 +0:? 11.000000 +0:? 12.000000 +0:? 13.000000 +0:? 14.000000 +0:? 15.000000 +0:? 'a0' ( const 3-element array of structure{ global int i, global float f, global bool b}) +0:? 3 (const int) +0:? 2.000000 +0:? true (const bool) +0:? 1 (const int) +0:? 5.000000 +0:? true (const bool) +0:? 1 (const int) +0:? 9.000000 +0:? false (const bool) +0:? 'cval1' ( const bool) +0:? true (const bool) +0:? 'cval2' ( const bool) +0:? false (const bool) +0:? 'cval3' ( const bool) +0:? false (const bool) +0:? 'cval4' ( const bool) +0:? true (const bool) +0:? 'cval5' ( const bool) +0:? false (const bool) +0:? 'cval6' ( const bool) +0:? true (const bool) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/conversion.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/conversion.frag.out new file mode 100644 index 0000000..73875d1 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/conversion.frag.out @@ -0,0 +1,955 @@ +conversion.frag +Shader version: 130 +0:? Sequence +0:33 Function Definition: main( ( global void) +0:33 Function Parameters: +0:35 Sequence +0:35 Sequence +0:35 move second child to first child ( temp bool) +0:35 'b' ( temp bool) +0:35 logical-xor ( temp bool) +0:35 Convert int to bool ( temp bool) +0:35 'u_i' ( uniform int) +0:35 Convert float to bool ( temp bool) +0:35 'u_f' ( uniform float) +0:36 Sequence +0:36 move second child to first child ( temp 2-component vector of bool) +0:36 'b2' ( temp 2-component vector of bool) +0:36 Construct bvec2 ( temp 2-component vector of bool) +0:36 Convert int to bool ( temp bool) +0:36 'u_i' ( uniform int) +0:36 Convert float to bool ( temp bool) +0:36 'u_f' ( uniform float) +0:37 Sequence +0:37 move second child to first child ( temp 3-component vector of bool) +0:37 'b3' ( temp 3-component vector of bool) +0:37 Construct bvec3 ( temp 3-component vector of bool) +0:37 Convert int to bool ( temp bool) +0:37 'u_i' ( uniform int) +0:37 Convert float to bool ( temp bool) +0:37 'u_f' ( uniform float) +0:37 Convert int to bool ( temp bool) +0:37 'i_i' ( flat in int) +0:38 Sequence +0:38 move second child to first child ( temp 4-component vector of bool) +0:38 'b4' ( temp 4-component vector of bool) +0:38 Construct bvec4 ( temp 4-component vector of bool) +0:38 Convert int to bool ( temp bool) +0:38 'u_i' ( uniform int) +0:38 Convert float to bool ( temp bool) +0:38 'u_f' ( uniform float) +0:38 Convert int to bool ( temp bool) +0:38 'i_i' ( flat in int) +0:38 Convert float to bool ( temp bool) +0:38 'i_f' ( smooth in float) +0:40 Sequence +0:40 move second child to first child ( temp int) +0:40 'i' ( temp int) +0:40 add ( temp int) +0:40 Convert float to int ( temp int) +0:40 'u_f' ( uniform float) +0:40 Convert bool to int ( temp int) +0:40 'b' ( temp bool) +0:41 Sequence +0:41 move second child to first child ( temp 2-component vector of int) +0:41 'i2' ( temp 2-component vector of int) +0:41 add ( temp 2-component vector of int) +0:41 Convert float to int ( temp 2-component vector of int) +0:41 'u_f2' ( uniform 2-component vector of float) +0:41 Convert bool to int ( temp 2-component vector of int) +0:41 'b2' ( temp 2-component vector of bool) +0:42 Sequence +0:42 move second child to first child ( temp 3-component vector of int) +0:42 'i3' ( temp 3-component vector of int) +0:42 add ( temp 3-component vector of int) +0:42 Convert float to int ( temp 3-component vector of int) +0:42 'u_f3' ( uniform 3-component vector of float) +0:42 Convert bool to int ( temp 3-component vector of int) +0:42 'b3' ( temp 3-component vector of bool) +0:43 Sequence +0:43 move second child to first child ( temp 4-component vector of int) +0:43 'i4' ( temp 4-component vector of int) +0:43 add ( temp 4-component vector of int) +0:43 Convert float to int ( temp 4-component vector of int) +0:43 'u_f4' ( uniform 4-component vector of float) +0:43 Convert bool to int ( temp 4-component vector of int) +0:43 'b4' ( temp 4-component vector of bool) +0:45 Sequence +0:45 move second child to first child ( temp float) +0:45 'f' ( temp float) +0:45 Convert int to float ( temp float) +0:45 'i' ( temp int) +0:46 Sequence +0:46 move second child to first child ( temp 2-component vector of float) +0:46 'f2' ( temp 2-component vector of float) +0:46 Convert int to float ( temp 2-component vector of float) +0:46 'i2' ( temp 2-component vector of int) +0:47 Sequence +0:47 move second child to first child ( temp 3-component vector of float) +0:47 'f3' ( temp 3-component vector of float) +0:47 Convert int to float ( temp 3-component vector of float) +0:47 'i3' ( temp 3-component vector of int) +0:48 Sequence +0:48 move second child to first child ( temp 4-component vector of float) +0:48 'f4' ( temp 4-component vector of float) +0:48 Convert int to float ( temp 4-component vector of float) +0:48 'i4' ( temp 4-component vector of int) +0:50 add second child into first child ( temp float) +0:50 'f' ( temp float) +0:50 add ( temp float) +0:50 Convert int to float ( temp float) +0:50 'i' ( temp int) +0:50 Convert bool to float ( temp float) +0:50 'b' ( temp bool) +0:51 subtract second child into first child ( temp 2-component vector of float) +0:51 'f2' ( temp 2-component vector of float) +0:51 add ( temp 2-component vector of float) +0:51 Convert int to float ( temp 2-component vector of float) +0:51 'i2' ( temp 2-component vector of int) +0:51 Convert bool to float ( temp 2-component vector of float) +0:51 'b2' ( temp 2-component vector of bool) +0:52 divide second child into first child ( temp 3-component vector of float) +0:52 'f3' ( temp 3-component vector of float) +0:52 add ( temp 3-component vector of float) +0:52 Convert int to float ( temp 3-component vector of float) +0:52 'i3' ( temp 3-component vector of int) +0:52 Convert bool to float ( temp 3-component vector of float) +0:52 'b3' ( temp 3-component vector of bool) +0:53 add second child into first child ( temp 4-component vector of float) +0:53 'f4' ( temp 4-component vector of float) +0:53 add ( temp 4-component vector of float) +0:53 Convert int to float ( temp 4-component vector of float) +0:53 'i4' ( temp 4-component vector of int) +0:53 Convert bool to float ( temp 4-component vector of float) +0:53 'b4' ( temp 4-component vector of bool) +0:55 add second child into first child ( temp 4-component vector of float) +0:55 'f4' ( temp 4-component vector of float) +0:55 Convert bool to float ( temp 4-component vector of float) +0:55 Convert int to bool ( temp 4-component vector of bool) +0:55 'i_i4' ( flat in 4-component vector of int) +0:56 add second child into first child ( temp 4-component vector of float) +0:56 'f4' ( temp 4-component vector of float) +0:56 Convert bool to float ( temp 4-component vector of float) +0:56 Convert float to bool ( temp 4-component vector of bool) +0:56 'u_f4' ( uniform 4-component vector of float) +0:58 add second child into first child ( temp float) +0:58 'f' ( temp float) +0:58 subtract ( temp float) +0:58 'f' ( temp float) +0:58 Convert int to float ( temp float) +0:58 'i' ( temp int) +0:59 add second child into first child ( temp 2-component vector of float) +0:59 'f2' ( temp 2-component vector of float) +0:59 add ( temp 2-component vector of float) +0:59 Construct vec2 ( temp 2-component vector of float) +0:59 'f' ( temp float) +0:59 Convert int to float ( temp float) +0:59 'i' ( temp int) +0:59 Convert int to float ( temp 2-component vector of float) +0:59 'i2' ( temp 2-component vector of int) +0:60 add second child into first child ( temp 3-component vector of float) +0:60 'f3' ( temp 3-component vector of float) +0:60 add ( temp 3-component vector of float) +0:60 Convert int to float ( temp 3-component vector of float) +0:60 'i3' ( temp 3-component vector of int) +0:60 Construct vec3 ( temp 3-component vector of float) +0:60 'f' ( temp float) +0:60 Convert int to float ( temp float) +0:60 'i' ( temp int) +0:60 'f' ( temp float) +0:61 add second child into first child ( temp 4-component vector of float) +0:61 'f4' ( temp 4-component vector of float) +0:61 add ( temp 4-component vector of float) +0:61 Construct vec4 ( temp 4-component vector of float) +0:61 Convert bool to float ( temp float) +0:61 'b' ( temp bool) +0:61 Convert int to float ( temp float) +0:61 'i' ( temp int) +0:61 'f' ( temp float) +0:61 Convert int to float ( temp float) +0:61 'i' ( temp int) +0:61 Convert int to float ( temp 4-component vector of float) +0:61 'i4' ( temp 4-component vector of int) +0:63 add second child into first child ( temp 2-component vector of float) +0:63 'f2' ( temp 2-component vector of float) +0:63 vector-scale ( temp 2-component vector of float) +0:63 Construct vec2 ( temp 2-component vector of float) +0:63 'f' ( temp float) +0:63 Convert int to float ( temp float) +0:63 'i' ( temp int) +0:63 Convert int to float ( temp float) +0:63 'i' ( temp int) +0:64 add second child into first child ( temp 3-component vector of float) +0:64 'f3' ( temp 3-component vector of float) +0:64 add ( temp 3-component vector of float) +0:64 Construct vec3 ( temp 3-component vector of float) +0:64 'f' ( temp float) +0:64 Convert int to float ( temp float) +0:64 'i' ( temp int) +0:64 'f' ( temp float) +0:64 Convert int to float ( temp float) +0:64 'i' ( temp int) +0:65 add second child into first child ( temp 4-component vector of float) +0:65 'f4' ( temp 4-component vector of float) +0:65 subtract ( temp 4-component vector of float) +0:65 Convert int to float ( temp float) +0:65 'i' ( temp int) +0:65 Construct vec4 ( temp 4-component vector of float) +0:65 Convert bool to float ( temp float) +0:65 'b' ( temp bool) +0:65 Convert int to float ( temp float) +0:65 'i' ( temp int) +0:65 'f' ( temp float) +0:65 Convert int to float ( temp float) +0:65 'i' ( temp int) +0:67 add second child into first child ( temp 2-component vector of int) +0:67 'i2' ( temp 2-component vector of int) +0:67 Construct ivec2 ( temp 2-component vector of int) +0:67 Convert float to int ( temp int) +0:67 'f' ( temp float) +0:67 'i' ( temp int) +0:68 add second child into first child ( temp 3-component vector of int) +0:68 'i3' ( temp 3-component vector of int) +0:68 Construct ivec3 ( temp 3-component vector of int) +0:68 Convert float to int ( temp int) +0:68 'f' ( temp float) +0:68 'i' ( temp int) +0:68 Convert float to int ( temp int) +0:68 'f' ( temp float) +0:69 add second child into first child ( temp 4-component vector of int) +0:69 'i4' ( temp 4-component vector of int) +0:69 Construct ivec4 ( temp 4-component vector of int) +0:69 Convert bool to int ( temp int) +0:69 'b' ( temp bool) +0:69 'i' ( temp int) +0:69 Convert float to int ( temp int) +0:69 'f' ( temp float) +0:69 'i' ( temp int) +0:71 Test condition and select ( temp void) +0:71 Condition +0:72 logical-or ( temp bool) +0:71 logical-or ( temp bool) +0:71 logical-or ( temp bool) +0:71 Compare Less Than ( temp bool) +0:71 'f' ( temp float) +0:71 Convert int to float ( temp float) +0:71 'i' ( temp int) +0:71 Compare Less Than ( temp bool) +0:71 Convert int to float ( temp float) +0:71 'i' ( temp int) +0:71 'f' ( temp float) +0:72 Compare Equal ( temp bool) +0:72 'f2' ( temp 2-component vector of float) +0:72 Convert int to float ( temp 2-component vector of float) +0:72 'i2' ( temp 2-component vector of int) +0:73 Compare Not Equal ( temp bool) +0:73 Convert int to float ( temp 3-component vector of float) +0:73 'i3' ( temp 3-component vector of int) +0:73 'f3' ( temp 3-component vector of float) +0:71 true case +0:74 move second child to first child ( temp float) +0:74 'f' ( temp float) +0:74 add ( temp float) +0:74 Test condition and select ( temp float) +0:74 Condition +0:74 'b' ( temp bool) +0:74 true case +0:74 Convert int to float ( temp float) +0:74 'i' ( temp int) +0:74 false case +0:74 direct index ( temp float) +0:74 'f2' ( temp 2-component vector of float) +0:74 Constant: +0:74 0 (const int) +0:74 Test condition and select ( temp float) +0:74 Condition +0:74 direct index ( temp bool) +0:74 'b2' ( temp 2-component vector of bool) +0:74 Constant: +0:74 0 (const int) +0:74 true case +0:74 direct index ( temp float) +0:74 'f3' ( temp 3-component vector of float) +0:74 Constant: +0:74 0 (const int) +0:74 false case +0:74 Convert int to float ( temp float) +0:74 direct index ( temp int) +0:74 'i2' ( temp 2-component vector of int) +0:74 Constant: +0:74 1 (const int) +0:76 move second child to first child ( temp 4-component vector of float) +0:76 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:86 Test condition and select ( temp 4-component vector of float) +0:86 Condition +0:85 logical-or ( temp bool) +0:84 logical-or ( temp bool) +0:83 logical-or ( temp bool) +0:82 logical-or ( temp bool) +0:81 logical-or ( temp bool) +0:80 logical-or ( temp bool) +0:79 logical-or ( temp bool) +0:78 logical-or ( temp bool) +0:77 logical-or ( temp bool) +0:77 'b' ( temp bool) +0:78 direct index ( temp bool) +0:78 'b2' ( temp 2-component vector of bool) +0:78 Constant: +0:78 0 (const int) +0:79 direct index ( temp bool) +0:79 'b2' ( temp 2-component vector of bool) +0:79 Constant: +0:79 1 (const int) +0:80 direct index ( temp bool) +0:80 'b3' ( temp 3-component vector of bool) +0:80 Constant: +0:80 0 (const int) +0:81 direct index ( temp bool) +0:81 'b3' ( temp 3-component vector of bool) +0:81 Constant: +0:81 1 (const int) +0:82 direct index ( temp bool) +0:82 'b3' ( temp 3-component vector of bool) +0:82 Constant: +0:82 2 (const int) +0:83 direct index ( temp bool) +0:83 'b4' ( temp 4-component vector of bool) +0:83 Constant: +0:83 0 (const int) +0:84 direct index ( temp bool) +0:84 'b4' ( temp 4-component vector of bool) +0:84 Constant: +0:84 1 (const int) +0:85 direct index ( temp bool) +0:85 'b4' ( temp 4-component vector of bool) +0:85 Constant: +0:85 2 (const int) +0:86 direct index ( temp bool) +0:86 'b4' ( temp 4-component vector of bool) +0:86 Constant: +0:86 3 (const int) +0:86 true case +0:105 Construct vec4 ( temp 4-component vector of float) +0:105 add ( temp float) +0:104 add ( temp float) +0:103 add ( temp float) +0:102 add ( temp float) +0:101 add ( temp float) +0:100 add ( temp float) +0:99 add ( temp float) +0:98 add ( temp float) +0:97 add ( temp float) +0:96 add ( temp float) +0:95 Convert int to float ( temp float) +0:95 add ( temp int) +0:94 add ( temp int) +0:93 add ( temp int) +0:92 add ( temp int) +0:91 add ( temp int) +0:90 add ( temp int) +0:89 add ( temp int) +0:88 add ( temp int) +0:87 add ( temp int) +0:87 'i' ( temp int) +0:88 direct index ( temp int) +0:88 'i2' ( temp 2-component vector of int) +0:88 Constant: +0:88 0 (const int) +0:89 direct index ( temp int) +0:89 'i2' ( temp 2-component vector of int) +0:89 Constant: +0:89 1 (const int) +0:90 direct index ( temp int) +0:90 'i3' ( temp 3-component vector of int) +0:90 Constant: +0:90 0 (const int) +0:91 direct index ( temp int) +0:91 'i3' ( temp 3-component vector of int) +0:91 Constant: +0:91 1 (const int) +0:92 direct index ( temp int) +0:92 'i3' ( temp 3-component vector of int) +0:92 Constant: +0:92 2 (const int) +0:93 direct index ( temp int) +0:93 'i4' ( temp 4-component vector of int) +0:93 Constant: +0:93 0 (const int) +0:94 direct index ( temp int) +0:94 'i4' ( temp 4-component vector of int) +0:94 Constant: +0:94 1 (const int) +0:95 direct index ( temp int) +0:95 'i4' ( temp 4-component vector of int) +0:95 Constant: +0:95 2 (const int) +0:96 direct index ( temp int) +0:96 'i4' ( temp 4-component vector of int) +0:96 Constant: +0:96 3 (const int) +0:97 'f' ( temp float) +0:98 direct index ( temp float) +0:98 'f2' ( temp 2-component vector of float) +0:98 Constant: +0:98 0 (const int) +0:99 direct index ( temp float) +0:99 'f2' ( temp 2-component vector of float) +0:99 Constant: +0:99 1 (const int) +0:100 direct index ( temp float) +0:100 'f3' ( temp 3-component vector of float) +0:100 Constant: +0:100 0 (const int) +0:101 direct index ( temp float) +0:101 'f3' ( temp 3-component vector of float) +0:101 Constant: +0:101 1 (const int) +0:102 direct index ( temp float) +0:102 'f3' ( temp 3-component vector of float) +0:102 Constant: +0:102 2 (const int) +0:103 direct index ( temp float) +0:103 'f4' ( temp 4-component vector of float) +0:103 Constant: +0:103 0 (const int) +0:104 direct index ( temp float) +0:104 'f4' ( temp 4-component vector of float) +0:104 Constant: +0:104 1 (const int) +0:105 direct index ( temp float) +0:105 'f4' ( temp 4-component vector of float) +0:105 Constant: +0:105 2 (const int) +0:106 direct index ( temp float) +0:106 'f4' ( temp 4-component vector of float) +0:106 Constant: +0:106 3 (const int) +0:86 false case +0:106 Constant: +0:106 1.000000 +0:106 1.000000 +0:106 1.000000 +0:106 1.000000 +0:109 Sequence +0:109 move second child to first child ( temp 4-component vector of int) +0:109 'cv2' ( temp 4-component vector of int) +0:109 Constant: +0:109 1 (const int) +0:109 1 (const int) +0:109 1 (const int) +0:109 1 (const int) +0:110 Sequence +0:110 move second child to first child ( temp 4-component vector of bool) +0:110 'cv5' ( temp 4-component vector of bool) +0:110 Convert int to bool ( temp 4-component vector of bool) +0:110 'cv2' ( temp 4-component vector of int) +0:111 add second child into first child ( temp 4-component vector of float) +0:111 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:111 Construct float ( temp float) +0:111 Convert bool to float ( temp 4-component vector of float) +0:111 'cv5' ( temp 4-component vector of bool) +0:? Linker Objects +0:? 'u_b' ( uniform bool) +0:? 'u_b2' ( uniform 2-component vector of bool) +0:? 'u_b3' ( uniform 3-component vector of bool) +0:? 'u_b4' ( uniform 4-component vector of bool) +0:? 'u_i' ( uniform int) +0:? 'u_i2' ( uniform 2-component vector of int) +0:? 'u_i3' ( uniform 3-component vector of int) +0:? 'u_i4' ( uniform 4-component vector of int) +0:? 'u_f' ( uniform float) +0:? 'u_f2' ( uniform 2-component vector of float) +0:? 'u_f3' ( uniform 3-component vector of float) +0:? 'u_f4' ( uniform 4-component vector of float) +0:? 'i_b' ( uniform bool) +0:? 'i_b2' ( uniform 2-component vector of bool) +0:? 'i_b3' ( uniform 3-component vector of bool) +0:? 'i_b4' ( uniform 4-component vector of bool) +0:? 'i_i' ( flat in int) +0:? 'i_i2' ( flat in 2-component vector of int) +0:? 'i_i3' ( flat in 3-component vector of int) +0:? 'i_i4' ( flat in 4-component vector of int) +0:? 'i_f' ( smooth in float) +0:? 'i_f2' ( smooth in 2-component vector of float) +0:? 'i_f3' ( smooth in 3-component vector of float) +0:? 'i_f4' ( smooth in 4-component vector of float) + + +Linked fragment stage: + + +Shader version: 130 +0:? Sequence +0:33 Function Definition: main( ( global void) +0:33 Function Parameters: +0:35 Sequence +0:35 Sequence +0:35 move second child to first child ( temp bool) +0:35 'b' ( temp bool) +0:35 logical-xor ( temp bool) +0:35 Convert int to bool ( temp bool) +0:35 'u_i' ( uniform int) +0:35 Convert float to bool ( temp bool) +0:35 'u_f' ( uniform float) +0:36 Sequence +0:36 move second child to first child ( temp 2-component vector of bool) +0:36 'b2' ( temp 2-component vector of bool) +0:36 Construct bvec2 ( temp 2-component vector of bool) +0:36 Convert int to bool ( temp bool) +0:36 'u_i' ( uniform int) +0:36 Convert float to bool ( temp bool) +0:36 'u_f' ( uniform float) +0:37 Sequence +0:37 move second child to first child ( temp 3-component vector of bool) +0:37 'b3' ( temp 3-component vector of bool) +0:37 Construct bvec3 ( temp 3-component vector of bool) +0:37 Convert int to bool ( temp bool) +0:37 'u_i' ( uniform int) +0:37 Convert float to bool ( temp bool) +0:37 'u_f' ( uniform float) +0:37 Convert int to bool ( temp bool) +0:37 'i_i' ( flat in int) +0:38 Sequence +0:38 move second child to first child ( temp 4-component vector of bool) +0:38 'b4' ( temp 4-component vector of bool) +0:38 Construct bvec4 ( temp 4-component vector of bool) +0:38 Convert int to bool ( temp bool) +0:38 'u_i' ( uniform int) +0:38 Convert float to bool ( temp bool) +0:38 'u_f' ( uniform float) +0:38 Convert int to bool ( temp bool) +0:38 'i_i' ( flat in int) +0:38 Convert float to bool ( temp bool) +0:38 'i_f' ( smooth in float) +0:40 Sequence +0:40 move second child to first child ( temp int) +0:40 'i' ( temp int) +0:40 add ( temp int) +0:40 Convert float to int ( temp int) +0:40 'u_f' ( uniform float) +0:40 Convert bool to int ( temp int) +0:40 'b' ( temp bool) +0:41 Sequence +0:41 move second child to first child ( temp 2-component vector of int) +0:41 'i2' ( temp 2-component vector of int) +0:41 add ( temp 2-component vector of int) +0:41 Convert float to int ( temp 2-component vector of int) +0:41 'u_f2' ( uniform 2-component vector of float) +0:41 Convert bool to int ( temp 2-component vector of int) +0:41 'b2' ( temp 2-component vector of bool) +0:42 Sequence +0:42 move second child to first child ( temp 3-component vector of int) +0:42 'i3' ( temp 3-component vector of int) +0:42 add ( temp 3-component vector of int) +0:42 Convert float to int ( temp 3-component vector of int) +0:42 'u_f3' ( uniform 3-component vector of float) +0:42 Convert bool to int ( temp 3-component vector of int) +0:42 'b3' ( temp 3-component vector of bool) +0:43 Sequence +0:43 move second child to first child ( temp 4-component vector of int) +0:43 'i4' ( temp 4-component vector of int) +0:43 add ( temp 4-component vector of int) +0:43 Convert float to int ( temp 4-component vector of int) +0:43 'u_f4' ( uniform 4-component vector of float) +0:43 Convert bool to int ( temp 4-component vector of int) +0:43 'b4' ( temp 4-component vector of bool) +0:45 Sequence +0:45 move second child to first child ( temp float) +0:45 'f' ( temp float) +0:45 Convert int to float ( temp float) +0:45 'i' ( temp int) +0:46 Sequence +0:46 move second child to first child ( temp 2-component vector of float) +0:46 'f2' ( temp 2-component vector of float) +0:46 Convert int to float ( temp 2-component vector of float) +0:46 'i2' ( temp 2-component vector of int) +0:47 Sequence +0:47 move second child to first child ( temp 3-component vector of float) +0:47 'f3' ( temp 3-component vector of float) +0:47 Convert int to float ( temp 3-component vector of float) +0:47 'i3' ( temp 3-component vector of int) +0:48 Sequence +0:48 move second child to first child ( temp 4-component vector of float) +0:48 'f4' ( temp 4-component vector of float) +0:48 Convert int to float ( temp 4-component vector of float) +0:48 'i4' ( temp 4-component vector of int) +0:50 add second child into first child ( temp float) +0:50 'f' ( temp float) +0:50 add ( temp float) +0:50 Convert int to float ( temp float) +0:50 'i' ( temp int) +0:50 Convert bool to float ( temp float) +0:50 'b' ( temp bool) +0:51 subtract second child into first child ( temp 2-component vector of float) +0:51 'f2' ( temp 2-component vector of float) +0:51 add ( temp 2-component vector of float) +0:51 Convert int to float ( temp 2-component vector of float) +0:51 'i2' ( temp 2-component vector of int) +0:51 Convert bool to float ( temp 2-component vector of float) +0:51 'b2' ( temp 2-component vector of bool) +0:52 divide second child into first child ( temp 3-component vector of float) +0:52 'f3' ( temp 3-component vector of float) +0:52 add ( temp 3-component vector of float) +0:52 Convert int to float ( temp 3-component vector of float) +0:52 'i3' ( temp 3-component vector of int) +0:52 Convert bool to float ( temp 3-component vector of float) +0:52 'b3' ( temp 3-component vector of bool) +0:53 add second child into first child ( temp 4-component vector of float) +0:53 'f4' ( temp 4-component vector of float) +0:53 add ( temp 4-component vector of float) +0:53 Convert int to float ( temp 4-component vector of float) +0:53 'i4' ( temp 4-component vector of int) +0:53 Convert bool to float ( temp 4-component vector of float) +0:53 'b4' ( temp 4-component vector of bool) +0:55 add second child into first child ( temp 4-component vector of float) +0:55 'f4' ( temp 4-component vector of float) +0:55 Convert bool to float ( temp 4-component vector of float) +0:55 Convert int to bool ( temp 4-component vector of bool) +0:55 'i_i4' ( flat in 4-component vector of int) +0:56 add second child into first child ( temp 4-component vector of float) +0:56 'f4' ( temp 4-component vector of float) +0:56 Convert bool to float ( temp 4-component vector of float) +0:56 Convert float to bool ( temp 4-component vector of bool) +0:56 'u_f4' ( uniform 4-component vector of float) +0:58 add second child into first child ( temp float) +0:58 'f' ( temp float) +0:58 subtract ( temp float) +0:58 'f' ( temp float) +0:58 Convert int to float ( temp float) +0:58 'i' ( temp int) +0:59 add second child into first child ( temp 2-component vector of float) +0:59 'f2' ( temp 2-component vector of float) +0:59 add ( temp 2-component vector of float) +0:59 Construct vec2 ( temp 2-component vector of float) +0:59 'f' ( temp float) +0:59 Convert int to float ( temp float) +0:59 'i' ( temp int) +0:59 Convert int to float ( temp 2-component vector of float) +0:59 'i2' ( temp 2-component vector of int) +0:60 add second child into first child ( temp 3-component vector of float) +0:60 'f3' ( temp 3-component vector of float) +0:60 add ( temp 3-component vector of float) +0:60 Convert int to float ( temp 3-component vector of float) +0:60 'i3' ( temp 3-component vector of int) +0:60 Construct vec3 ( temp 3-component vector of float) +0:60 'f' ( temp float) +0:60 Convert int to float ( temp float) +0:60 'i' ( temp int) +0:60 'f' ( temp float) +0:61 add second child into first child ( temp 4-component vector of float) +0:61 'f4' ( temp 4-component vector of float) +0:61 add ( temp 4-component vector of float) +0:61 Construct vec4 ( temp 4-component vector of float) +0:61 Convert bool to float ( temp float) +0:61 'b' ( temp bool) +0:61 Convert int to float ( temp float) +0:61 'i' ( temp int) +0:61 'f' ( temp float) +0:61 Convert int to float ( temp float) +0:61 'i' ( temp int) +0:61 Convert int to float ( temp 4-component vector of float) +0:61 'i4' ( temp 4-component vector of int) +0:63 add second child into first child ( temp 2-component vector of float) +0:63 'f2' ( temp 2-component vector of float) +0:63 vector-scale ( temp 2-component vector of float) +0:63 Construct vec2 ( temp 2-component vector of float) +0:63 'f' ( temp float) +0:63 Convert int to float ( temp float) +0:63 'i' ( temp int) +0:63 Convert int to float ( temp float) +0:63 'i' ( temp int) +0:64 add second child into first child ( temp 3-component vector of float) +0:64 'f3' ( temp 3-component vector of float) +0:64 add ( temp 3-component vector of float) +0:64 Construct vec3 ( temp 3-component vector of float) +0:64 'f' ( temp float) +0:64 Convert int to float ( temp float) +0:64 'i' ( temp int) +0:64 'f' ( temp float) +0:64 Convert int to float ( temp float) +0:64 'i' ( temp int) +0:65 add second child into first child ( temp 4-component vector of float) +0:65 'f4' ( temp 4-component vector of float) +0:65 subtract ( temp 4-component vector of float) +0:65 Convert int to float ( temp float) +0:65 'i' ( temp int) +0:65 Construct vec4 ( temp 4-component vector of float) +0:65 Convert bool to float ( temp float) +0:65 'b' ( temp bool) +0:65 Convert int to float ( temp float) +0:65 'i' ( temp int) +0:65 'f' ( temp float) +0:65 Convert int to float ( temp float) +0:65 'i' ( temp int) +0:67 add second child into first child ( temp 2-component vector of int) +0:67 'i2' ( temp 2-component vector of int) +0:67 Construct ivec2 ( temp 2-component vector of int) +0:67 Convert float to int ( temp int) +0:67 'f' ( temp float) +0:67 'i' ( temp int) +0:68 add second child into first child ( temp 3-component vector of int) +0:68 'i3' ( temp 3-component vector of int) +0:68 Construct ivec3 ( temp 3-component vector of int) +0:68 Convert float to int ( temp int) +0:68 'f' ( temp float) +0:68 'i' ( temp int) +0:68 Convert float to int ( temp int) +0:68 'f' ( temp float) +0:69 add second child into first child ( temp 4-component vector of int) +0:69 'i4' ( temp 4-component vector of int) +0:69 Construct ivec4 ( temp 4-component vector of int) +0:69 Convert bool to int ( temp int) +0:69 'b' ( temp bool) +0:69 'i' ( temp int) +0:69 Convert float to int ( temp int) +0:69 'f' ( temp float) +0:69 'i' ( temp int) +0:71 Test condition and select ( temp void) +0:71 Condition +0:72 logical-or ( temp bool) +0:71 logical-or ( temp bool) +0:71 logical-or ( temp bool) +0:71 Compare Less Than ( temp bool) +0:71 'f' ( temp float) +0:71 Convert int to float ( temp float) +0:71 'i' ( temp int) +0:71 Compare Less Than ( temp bool) +0:71 Convert int to float ( temp float) +0:71 'i' ( temp int) +0:71 'f' ( temp float) +0:72 Compare Equal ( temp bool) +0:72 'f2' ( temp 2-component vector of float) +0:72 Convert int to float ( temp 2-component vector of float) +0:72 'i2' ( temp 2-component vector of int) +0:73 Compare Not Equal ( temp bool) +0:73 Convert int to float ( temp 3-component vector of float) +0:73 'i3' ( temp 3-component vector of int) +0:73 'f3' ( temp 3-component vector of float) +0:71 true case +0:74 move second child to first child ( temp float) +0:74 'f' ( temp float) +0:74 add ( temp float) +0:74 Test condition and select ( temp float) +0:74 Condition +0:74 'b' ( temp bool) +0:74 true case +0:74 Convert int to float ( temp float) +0:74 'i' ( temp int) +0:74 false case +0:74 direct index ( temp float) +0:74 'f2' ( temp 2-component vector of float) +0:74 Constant: +0:74 0 (const int) +0:74 Test condition and select ( temp float) +0:74 Condition +0:74 direct index ( temp bool) +0:74 'b2' ( temp 2-component vector of bool) +0:74 Constant: +0:74 0 (const int) +0:74 true case +0:74 direct index ( temp float) +0:74 'f3' ( temp 3-component vector of float) +0:74 Constant: +0:74 0 (const int) +0:74 false case +0:74 Convert int to float ( temp float) +0:74 direct index ( temp int) +0:74 'i2' ( temp 2-component vector of int) +0:74 Constant: +0:74 1 (const int) +0:76 move second child to first child ( temp 4-component vector of float) +0:76 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:86 Test condition and select ( temp 4-component vector of float) +0:86 Condition +0:85 logical-or ( temp bool) +0:84 logical-or ( temp bool) +0:83 logical-or ( temp bool) +0:82 logical-or ( temp bool) +0:81 logical-or ( temp bool) +0:80 logical-or ( temp bool) +0:79 logical-or ( temp bool) +0:78 logical-or ( temp bool) +0:77 logical-or ( temp bool) +0:77 'b' ( temp bool) +0:78 direct index ( temp bool) +0:78 'b2' ( temp 2-component vector of bool) +0:78 Constant: +0:78 0 (const int) +0:79 direct index ( temp bool) +0:79 'b2' ( temp 2-component vector of bool) +0:79 Constant: +0:79 1 (const int) +0:80 direct index ( temp bool) +0:80 'b3' ( temp 3-component vector of bool) +0:80 Constant: +0:80 0 (const int) +0:81 direct index ( temp bool) +0:81 'b3' ( temp 3-component vector of bool) +0:81 Constant: +0:81 1 (const int) +0:82 direct index ( temp bool) +0:82 'b3' ( temp 3-component vector of bool) +0:82 Constant: +0:82 2 (const int) +0:83 direct index ( temp bool) +0:83 'b4' ( temp 4-component vector of bool) +0:83 Constant: +0:83 0 (const int) +0:84 direct index ( temp bool) +0:84 'b4' ( temp 4-component vector of bool) +0:84 Constant: +0:84 1 (const int) +0:85 direct index ( temp bool) +0:85 'b4' ( temp 4-component vector of bool) +0:85 Constant: +0:85 2 (const int) +0:86 direct index ( temp bool) +0:86 'b4' ( temp 4-component vector of bool) +0:86 Constant: +0:86 3 (const int) +0:86 true case +0:105 Construct vec4 ( temp 4-component vector of float) +0:105 add ( temp float) +0:104 add ( temp float) +0:103 add ( temp float) +0:102 add ( temp float) +0:101 add ( temp float) +0:100 add ( temp float) +0:99 add ( temp float) +0:98 add ( temp float) +0:97 add ( temp float) +0:96 add ( temp float) +0:95 Convert int to float ( temp float) +0:95 add ( temp int) +0:94 add ( temp int) +0:93 add ( temp int) +0:92 add ( temp int) +0:91 add ( temp int) +0:90 add ( temp int) +0:89 add ( temp int) +0:88 add ( temp int) +0:87 add ( temp int) +0:87 'i' ( temp int) +0:88 direct index ( temp int) +0:88 'i2' ( temp 2-component vector of int) +0:88 Constant: +0:88 0 (const int) +0:89 direct index ( temp int) +0:89 'i2' ( temp 2-component vector of int) +0:89 Constant: +0:89 1 (const int) +0:90 direct index ( temp int) +0:90 'i3' ( temp 3-component vector of int) +0:90 Constant: +0:90 0 (const int) +0:91 direct index ( temp int) +0:91 'i3' ( temp 3-component vector of int) +0:91 Constant: +0:91 1 (const int) +0:92 direct index ( temp int) +0:92 'i3' ( temp 3-component vector of int) +0:92 Constant: +0:92 2 (const int) +0:93 direct index ( temp int) +0:93 'i4' ( temp 4-component vector of int) +0:93 Constant: +0:93 0 (const int) +0:94 direct index ( temp int) +0:94 'i4' ( temp 4-component vector of int) +0:94 Constant: +0:94 1 (const int) +0:95 direct index ( temp int) +0:95 'i4' ( temp 4-component vector of int) +0:95 Constant: +0:95 2 (const int) +0:96 direct index ( temp int) +0:96 'i4' ( temp 4-component vector of int) +0:96 Constant: +0:96 3 (const int) +0:97 'f' ( temp float) +0:98 direct index ( temp float) +0:98 'f2' ( temp 2-component vector of float) +0:98 Constant: +0:98 0 (const int) +0:99 direct index ( temp float) +0:99 'f2' ( temp 2-component vector of float) +0:99 Constant: +0:99 1 (const int) +0:100 direct index ( temp float) +0:100 'f3' ( temp 3-component vector of float) +0:100 Constant: +0:100 0 (const int) +0:101 direct index ( temp float) +0:101 'f3' ( temp 3-component vector of float) +0:101 Constant: +0:101 1 (const int) +0:102 direct index ( temp float) +0:102 'f3' ( temp 3-component vector of float) +0:102 Constant: +0:102 2 (const int) +0:103 direct index ( temp float) +0:103 'f4' ( temp 4-component vector of float) +0:103 Constant: +0:103 0 (const int) +0:104 direct index ( temp float) +0:104 'f4' ( temp 4-component vector of float) +0:104 Constant: +0:104 1 (const int) +0:105 direct index ( temp float) +0:105 'f4' ( temp 4-component vector of float) +0:105 Constant: +0:105 2 (const int) +0:106 direct index ( temp float) +0:106 'f4' ( temp 4-component vector of float) +0:106 Constant: +0:106 3 (const int) +0:86 false case +0:106 Constant: +0:106 1.000000 +0:106 1.000000 +0:106 1.000000 +0:106 1.000000 +0:109 Sequence +0:109 move second child to first child ( temp 4-component vector of int) +0:109 'cv2' ( temp 4-component vector of int) +0:109 Constant: +0:109 1 (const int) +0:109 1 (const int) +0:109 1 (const int) +0:109 1 (const int) +0:110 Sequence +0:110 move second child to first child ( temp 4-component vector of bool) +0:110 'cv5' ( temp 4-component vector of bool) +0:110 Convert int to bool ( temp 4-component vector of bool) +0:110 'cv2' ( temp 4-component vector of int) +0:111 add second child into first child ( temp 4-component vector of float) +0:111 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:111 Construct float ( temp float) +0:111 Convert bool to float ( temp 4-component vector of float) +0:111 'cv5' ( temp 4-component vector of bool) +0:? Linker Objects +0:? 'u_b' ( uniform bool) +0:? 'u_b2' ( uniform 2-component vector of bool) +0:? 'u_b3' ( uniform 3-component vector of bool) +0:? 'u_b4' ( uniform 4-component vector of bool) +0:? 'u_i' ( uniform int) +0:? 'u_i2' ( uniform 2-component vector of int) +0:? 'u_i3' ( uniform 3-component vector of int) +0:? 'u_i4' ( uniform 4-component vector of int) +0:? 'u_f' ( uniform float) +0:? 'u_f2' ( uniform 2-component vector of float) +0:? 'u_f3' ( uniform 3-component vector of float) +0:? 'u_f4' ( uniform 4-component vector of float) +0:? 'i_b' ( uniform bool) +0:? 'i_b2' ( uniform 2-component vector of bool) +0:? 'i_b3' ( uniform 3-component vector of bool) +0:? 'i_b4' ( uniform 4-component vector of bool) +0:? 'i_i' ( flat in int) +0:? 'i_i2' ( flat in 2-component vector of int) +0:? 'i_i3' ( flat in 3-component vector of int) +0:? 'i_i4' ( flat in 4-component vector of int) +0:? 'i_f' ( smooth in float) +0:? 'i_f2' ( smooth in 2-component vector of float) +0:? 'i_f3' ( smooth in 3-component vector of float) +0:? 'i_f4' ( smooth in 4-component vector of float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppBad.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppBad.vert.out new file mode 100755 index 0000000..d808e72 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppBad.vert.out @@ -0,0 +1,23 @@ +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. + + +Shader version: 100 +ERROR: node is still EOpNull! +0:? Linker Objects + + +Linked vertex stage: + +ERROR: Linking vertex 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/cppBad2.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppBad2.vert.out new file mode 100755 index 0000000..0398e5e --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppBad2.vert.out @@ -0,0 +1,19 @@ +cppBad2.vert +ERROR: 0:3: 'macro expansion' : End of input in macro b +ERROR: 0:3: '' : compilation terminated +ERROR: 2 compilation errors. No code generated. + + +Shader version: 100 +ERROR: node is still EOpNull! +0:? Linker Objects + + +Linked vertex stage: + +ERROR: Linking vertex 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/cppComplexExpr.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppComplexExpr.vert.out new file mode 100644 index 0000000..6bfcd9c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppComplexExpr.vert.out @@ -0,0 +1,181 @@ +cppComplexExpr.vert +ERROR: 0:46: 'xyxwx' : vector swizzle too long +ERROR: 0:46: 'xyxwx' : vector swizzle too long +ERROR: 0:46: 'return' : cannot convert return value to function return type +WARNING: 0:46: 'return' : type conversion on return values was not explicitly allowed until version 420 +ERROR: 0:66: '#define' : Macro redefined; different substitutions: BIG +ERROR: 0:81: 'preprocessor evaluation' : bad expression +ERROR: 0:81: '#if' : unexpected tokens following directive +ERROR: 0:82: '#error' : good macro +ERROR: 0:87: 'macro expansion' : End of line in macro substitution: foobar +ERROR: 0:88: 'preprocessor evaluation' : can't evaluate expression +ERROR: 0:88: 'preprocessor evaluation' : bad expression +ERROR: 0:88: '#if' : unexpected tokens following directive +ERROR: 0:92: 'macro expansion' : End of line in macro substitution: foobar +ERROR: 0:93: 'preprocessor evaluation' : can't evaluate expression +ERROR: 0:93: 'preprocessor evaluation' : bad expression +ERROR: 0:93: '#if' : unexpected tokens following directive +ERROR: 0:99: 'macro expansion' : End of line in macro substitution: foobar +ERROR: 0:100: 'preprocessor evaluation' : can't evaluate expression +ERROR: 0:100: 'preprocessor evaluation' : bad expression +ERROR: 0:100: '#if' : unexpected tokens following directive +ERROR: 0:101: 'macro expansion' : End of line in macro substitution: foobar +ERROR: 0:102: 'preprocessor evaluation' : can't evaluate expression +ERROR: 0:102: 'preprocessor evaluation' : bad expression +ERROR: 0:102: '#if' : unexpected tokens following directive +ERROR: 0:108: 'preprocessor evaluation' : undefined macro in expression not allowed in es profile UNDEF +ERROR: 0:111: '#error' : good 0 +ERROR: 0:115: '#error' : good 1 +ERROR: 0:120: 'preprocessor evaluation' : undefined macro in expression not allowed in es profile UNDEF +ERROR: 0:123: 'preprocessor evaluation' : undefined macro in expression not allowed in es profile UNDEF +ERROR: 0:129: '#error' : good 1 +ERROR: 0:133: '#error' : good 3 +ERROR: 0:139: '#error' : good 4 +ERROR: 0:144: 'preprocessor evaluation' : undefined macro in expression not allowed in es profile UNDEF +ERROR: 0:153: 'preprocessor evaluation' : undefined macro in expression not allowed in es profile UNDEF +ERROR: 0:156: 'preprocessor evaluation' : undefined macro in expression not allowed in es profile UNDEF2 +ERROR: 0:159: 'preprocessor evaluation' : undefined macro in expression not allowed in es profile UNDEF2 +ERROR: 0:3000: '#error' : line of this error should be 3000 +ERROR: 0:3002: '#define' : predefined names can't be (un)defined: __LINE__ +ERROR: 0:3003: '#define' : predefined names can't be (un)defined: __FILE__ +ERROR: 0:3004: '#define' : predefined names can't be (un)defined: __VERSION__ +ERROR: 0:3005: '#define' : names beginning with "GL_" can't be (un)defined: GL_SOME_EXTENSION +ERROR: 0:3006: '#undef' : predefined names can't be (un)defined: __LINE__ +ERROR: 0:3007: '#undef' : predefined names can't be (un)defined: __FILE__ +ERROR: 0:3008: '#undef' : predefined names can't be (un)defined: __VERSION__ +ERROR: 0:3009: '#undef' : names beginning with "GL_" can't be (un)defined: GL_SOME_EXTENSION +ERROR: 0:4000: 'preprocessor evaluation' : division by 0 +ERROR: 0:0: 'preprocessor evaluation' : division by 0 +ERROR: 0:3: 'preprocessor evaluation' : bad expression +ERROR: 0:3: 'preprocessor evaluation' : division by 0 +ERROR: 0:10001: '' : missing #endif +ERROR: 49 compilation errors. No code generated. + + +Shader version: 300 +ERROR: node is still EOpNull! +0:4 Sequence +0:4 move second child to first child ( temp highp float) +0:4 'sum' ( global highp float) +0:4 Constant: +0:4 0.000000 +0:6 Function Definition: main( ( global void) +0:6 Function Parameters: +0:10 Sequence +0:10 add second child into first child ( temp highp float) +0:10 'sum' ( global highp float) +0:10 Constant: +0:10 1.000000 +0:15 add second child into first child ( temp highp float) +0:15 'sum' ( global highp float) +0:15 Constant: +0:15 20.000000 +0:30 add second child into first child ( temp highp float) +0:30 'sum' ( global highp float) +0:30 Constant: +0:30 300.000000 +0:39 move second child to first child ( temp highp 4-component vector of float) +0:39 'gl_Position' ( gl_Position highp 4-component vector of float Position) +0:39 Construct vec4 ( temp highp 4-component vector of float) +0:39 'sum' ( global highp float) +0:44 Function Definition: foo( ( global highp float) +0:44 Function Parameters: +0:46 Sequence +0:46 Branch: Return with expression +0:46 add ( temp highp 4-component vector of float) +0:46 add ( temp highp 4-component vector of float) +0:46 vector swizzle ( temp highp 4-component vector of float) +0:46 'gl_Position' ( gl_Position highp 4-component vector of float Position) +0:46 Sequence +0:46 Constant: +0:46 0 (const int) +0:46 Constant: +0:46 1 (const int) +0:46 Constant: +0:46 0 (const int) +0:46 Constant: +0:46 3 (const int) +0:46 Constant: +0:46 3.000000 +0:46 add ( temp highp 4-component vector of float) +0:46 vector swizzle ( temp highp 4-component vector of float) +0:46 'gl_Position' ( gl_Position highp 4-component vector of float Position) +0:46 Sequence +0:46 Constant: +0:46 0 (const int) +0:46 Constant: +0:46 1 (const int) +0:46 Constant: +0:46 0 (const int) +0:46 Constant: +0:46 3 (const int) +0:46 Constant: +0:46 3.000000 +0:47 Branch: Return with expression +0:47 add ( temp highp float) +0:47 add ( temp highp float) +0:47 direct index ( temp highp float) +0:47 'gl_Position' ( gl_Position highp 4-component vector of float Position) +0:47 Constant: +0:47 1 (const int) +0:47 Constant: +0:47 3.000000 +0:47 add ( temp highp float) +0:47 direct index ( temp highp float) +0:47 'gl_Position' ( gl_Position highp 4-component vector of float Position) +0:47 Constant: +0:47 1 (const int) +0:47 Constant: +0:47 3.000000 +0:97 Sequence +0:97 move second child to first child ( temp highp float) +0:97 'c' ( global highp float) +0:98 Constant: +0:98 3.300000 +0:? Linker Objects +0:? 'sum' ( global highp float) +0:? 'c' ( global highp float) +0:? 'gl_VertexID' ( gl_VertexId highp int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId highp int InstanceId) + + +Linked vertex stage: + + +Shader version: 300 +ERROR: node is still EOpNull! +0:4 Sequence +0:4 move second child to first child ( temp highp float) +0:4 'sum' ( global highp float) +0:4 Constant: +0:4 0.000000 +0:6 Function Definition: main( ( global void) +0:6 Function Parameters: +0:10 Sequence +0:10 add second child into first child ( temp highp float) +0:10 'sum' ( global highp float) +0:10 Constant: +0:10 1.000000 +0:15 add second child into first child ( temp highp float) +0:15 'sum' ( global highp float) +0:15 Constant: +0:15 20.000000 +0:30 add second child into first child ( temp highp float) +0:30 'sum' ( global highp float) +0:30 Constant: +0:30 300.000000 +0:39 move second child to first child ( temp highp 4-component vector of float) +0:39 'gl_Position' ( gl_Position highp 4-component vector of float Position) +0:39 Construct vec4 ( temp highp 4-component vector of float) +0:39 'sum' ( global highp float) +0:97 Sequence +0:97 move second child to first child ( temp highp float) +0:97 'c' ( global highp float) +0:98 Constant: +0:98 3.300000 +0:? Linker Objects +0:? 'sum' ( global highp float) +0:? 'c' ( global 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/cppIndent.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppIndent.vert.out new file mode 100644 index 0000000..e6ff046 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppIndent.vert.out @@ -0,0 +1,84 @@ +cppIndent.vert +ERROR: 0:61: 'macro expansion' : Too few args in Macro FUNC +ERROR: 0:61: '' : syntax error +ERROR: 2 compilation errors. No code generated. + + +Shader version: 110 +ERROR: node is still EOpNull! +0:5 Sequence +0:5 move second child to first child ( temp float) +0:5 'sum' ( global float) +0:5 Constant: +0:5 0.000000 +0:7 Function Definition: main( ( global void) +0:7 Function Parameters: +0:12 Sequence +0:12 add second child into first child ( temp float) +0:12 'sum' ( global float) +0:12 Constant: +0:12 1.000000 +0:22 add second child into first child ( temp float) +0:22 'sum' ( global float) +0:22 Constant: +0:22 300.000000 +0:37 add second child into first child ( temp float) +0:37 'sum' ( global float) +0:37 Constant: +0:37 600000.000000 +0:47 add second child into first child ( temp float) +0:47 'sum' ( global float) +0:47 Constant: +0:47 80000000.000000 +0:52 add second child into first child ( temp float) +0:52 'sum' ( global float) +0:52 Constant: +0:52 900000000.000000 +0:56 move second child to first child ( temp 4-component vector of float) +0:56 'gl_Position' ( gl_Position 4-component vector of float Position) +0:56 Construct vec4 ( temp 4-component vector of float) +0:56 'sum' ( global float) +0:? Linker Objects +0:? 'sum' ( global float) + + +Linked vertex stage: + + +Shader version: 110 +ERROR: node is still EOpNull! +0:5 Sequence +0:5 move second child to first child ( temp float) +0:5 'sum' ( global float) +0:5 Constant: +0:5 0.000000 +0:7 Function Definition: main( ( global void) +0:7 Function Parameters: +0:12 Sequence +0:12 add second child into first child ( temp float) +0:12 'sum' ( global float) +0:12 Constant: +0:12 1.000000 +0:22 add second child into first child ( temp float) +0:22 'sum' ( global float) +0:22 Constant: +0:22 300.000000 +0:37 add second child into first child ( temp float) +0:37 'sum' ( global float) +0:37 Constant: +0:37 600000.000000 +0:47 add second child into first child ( temp float) +0:47 'sum' ( global float) +0:47 Constant: +0:47 80000000.000000 +0:52 add second child into first child ( temp float) +0:52 'sum' ( global float) +0:52 Constant: +0:52 900000000.000000 +0:56 move second child to first child ( temp 4-component vector of float) +0:56 'gl_Position' ( gl_Position 4-component vector of float Position) +0:56 Construct vec4 ( temp 4-component vector of float) +0:56 'sum' ( global float) +0:? Linker Objects +0:? 'sum' ( global float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppNest.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppNest.vert.out new file mode 100644 index 0000000..afd0370 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppNest.vert.out @@ -0,0 +1,143 @@ +cppNest.vert +ERROR: 0:144: '#elif' : #elif after #else +ERROR: 0:152: '#else' : #else after #else +ERROR: 0:161: '#elif' : #elif after #else +ERROR: 0:169: '#else' : #else after #else +ERROR: 0:177: 'macro expansion' : End of input in macro FUNC +ERROR: 0:178: '' : compilation terminated +ERROR: 6 compilation errors. No code generated. + + +Shader version: 110 +ERROR: node is still EOpNull! +0:5 Sequence +0:5 move second child to first child ( temp float) +0:5 'sum' ( global float) +0:5 Constant: +0:5 0.000000 +0:7 Function Definition: main( ( global void) +0:7 Function Parameters: +0:12 Sequence +0:12 add second child into first child ( temp float) +0:12 'sum' ( global float) +0:12 Constant: +0:12 1.000000 +0:21 add second child into first child ( temp float) +0:21 'sum' ( global float) +0:21 Constant: +0:21 300.000000 +0:61 add second child into first child ( temp float) +0:61 'sum' ( global float) +0:61 Constant: +0:61 600000.000000 +0:65 add second child into first child ( temp float) +0:65 'sum' ( global float) +0:65 Constant: +0:65 80000000.000000 +0:69 add second child into first child ( temp float) +0:69 'sum' ( global float) +0:69 Constant: +0:69 900000000.000000 +0:76 add second child into first child ( temp float) +0:76 'sum' ( global float) +0:76 Constant: +0:76 7000000.000000 +0:86 move second child to first child ( temp 4-component vector of float) +0:86 'gl_Position' ( gl_Position 4-component vector of float Position) +0:86 Construct vec4 ( temp 4-component vector of float) +0:86 'sum' ( global float) +0:103 Sequence +0:103 move second child to first child ( temp int) +0:103 'selected4' ( global int) +0:103 Constant: +0:103 4 (const int) +0:115 Sequence +0:115 move second child to first child ( temp int) +0:115 'selected2' ( global int) +0:115 Constant: +0:115 2 (const int) +0:133 Sequence +0:133 move second child to first child ( temp int) +0:133 'selected3' ( global int) +0:133 Constant: +0:133 3 (const int) +0:175 Function Definition: foo985( ( global void) +0:175 Function Parameters: +0:175 Sequence +0:175 add ( temp int) +0:175 Constant: +0:175 2 (const int) +0:175 Comma ( temp int) +0:175 Constant: +0:175 3 (const int) +0:175 Constant: +0:175 4 (const int) +0:? Linker Objects +0:? 'sum' ( global float) +0:? 'selected4' ( global int) +0:? 'selected2' ( global int) +0:? 'selected3' ( global int) + + +Linked vertex stage: + + +Shader version: 110 +ERROR: node is still EOpNull! +0:5 Sequence +0:5 move second child to first child ( temp float) +0:5 'sum' ( global float) +0:5 Constant: +0:5 0.000000 +0:7 Function Definition: main( ( global void) +0:7 Function Parameters: +0:12 Sequence +0:12 add second child into first child ( temp float) +0:12 'sum' ( global float) +0:12 Constant: +0:12 1.000000 +0:21 add second child into first child ( temp float) +0:21 'sum' ( global float) +0:21 Constant: +0:21 300.000000 +0:61 add second child into first child ( temp float) +0:61 'sum' ( global float) +0:61 Constant: +0:61 600000.000000 +0:65 add second child into first child ( temp float) +0:65 'sum' ( global float) +0:65 Constant: +0:65 80000000.000000 +0:69 add second child into first child ( temp float) +0:69 'sum' ( global float) +0:69 Constant: +0:69 900000000.000000 +0:76 add second child into first child ( temp float) +0:76 'sum' ( global float) +0:76 Constant: +0:76 7000000.000000 +0:86 move second child to first child ( temp 4-component vector of float) +0:86 'gl_Position' ( gl_Position 4-component vector of float Position) +0:86 Construct vec4 ( temp 4-component vector of float) +0:86 'sum' ( global float) +0:103 Sequence +0:103 move second child to first child ( temp int) +0:103 'selected4' ( global int) +0:103 Constant: +0:103 4 (const int) +0:115 Sequence +0:115 move second child to first child ( temp int) +0:115 'selected2' ( global int) +0:115 Constant: +0:115 2 (const int) +0:133 Sequence +0:133 move second child to first child ( temp int) +0:133 'selected3' ( global int) +0:133 Constant: +0:133 3 (const int) +0:? Linker Objects +0:? 'sum' ( global float) +0:? 'selected4' ( global int) +0:? 'selected2' ( global int) +0:? 'selected3' ( global int) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppSimple.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppSimple.vert.out new file mode 100644 index 0000000..0696c74 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppSimple.vert.out @@ -0,0 +1,304 @@ +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 +ERROR: 0:89: '#error' : good4 +ERROR: 0:93: '#error' : good5 +ERROR: 0:97: '#error' : good6 +ERROR: 0:100: 'preprocessor evaluation' : expected ')' +ERROR: 0:101: '#error' : bad1 +ERROR: 0:104: '#if' : unexpected tokens following directive +ERROR: 0:105: '#error' : bad2 +ERROR: 0:108: 'preprocessor evaluation' : expected ')' +ERROR: 0:109: '#error' : bad3 +ERROR: 0:112: '#if' : unexpected tokens following directive +ERROR: 0:113: '#error' : bad4 +ERROR: 0:116: 'preprocessor evaluation' : expected ')' +ERROR: 0:117: '#error' : bad5 +ERROR: 0:120: '#if' : unexpected tokens following directive +ERROR: 0:121: '#error' : bad6 +ERROR: 0:122: '#endif' : unexpected tokens following directive +ERROR: 0:135: '""' : string literals not supported +ERROR: 0:136: '""' : string literals not supported +ERROR: 0:136: 'length' : no matching overloaded function found +ERROR: 0:136: '=' : cannot convert from ' const float' to ' global int' +ERROR: 0:138: ''' : character literals not supported +ERROR: 0:138: ''' : character literals not supported +ERROR: 0:141: '#define' : names beginning with "GL_" can't be (un)defined: GL_ +ERROR: 0:142: '#define' : names beginning with "GL_" can't be (un)defined: GL_Macro +WARNING: 0:143: '#define' : names containing consecutive underscores are reserved: __M +WARNING: 0:144: '#define' : names containing consecutive underscores are reserved: M__ +WARNING: 0:145: '#define' : names containing consecutive underscores are reserved: ABC__DE +ERROR: 0:148: '#else' : unexpected tokens following directive +ERROR: 0:149: '#elif' : #elif after #else +ERROR: 0:155: '#else' : unexpected tokens following directive +ERROR: 0:158: '#else' : #else after #else +ERROR: 0:160: '#endif' : unexpected tokens following directive +ERROR: 0:164: '#define' : duplicate macro parameter +ERROR: 0:173: '#define' : Macro redefined; different number of arguments: m4 +ERROR: 0:178: '#define' : Macro redefined; different number of arguments: m5 +ERROR: 0:182: '#define' : Macro redefined; different number of arguments: m6 +ERROR: 0:185: '#define' : Macro redefined; different substitutions: m7 +ERROR: 0:192: '#define' : Macro redefined; different substitutions: m8 +ERROR: 0:196: '#define' : Macro redefined; different argument names: m9 +WARNING: 0:204: '#undef' : names containing consecutive underscores are reserved: __VERSION__ +ERROR: 0:205: '#undef' : names beginning with "GL_" can't be (un)defined: GL_ARB_texture_rectangle +ERROR: 0:210: '#' : invalid directive +ERROR: 0:211: '#' : invalid directive +ERROR: 0:212: '#' : invalid directive +ERROR: 0:213: '#' : invalid directive +ERROR: 0:214: '#' : invalid directive +ERROR: 0:215: '#' : invalid directive +ERROR: 0:224: '#pragma' : optimize pragma syntax is incorrect +ERROR: 0:225: '#pragma' : optimize pragma syntax is incorrect +ERROR: 0:226: '#pragma' : debug pragma syntax is incorrect +ERROR: 0:227: '#pragma' : debug pragma syntax is incorrect +ERROR: 0:229: '#pragma' : optimize pragma syntax is incorrect +ERROR: 0:230: '#pragma' : debug pragma syntax is incorrect +ERROR: 0:233: 'line continuation' : not supported for this version or the enabled extensions +ERROR: 0:235: 'line continuation' : not supported for this version or the enabled extensions +ERROR: 0:236: '#error' : good continuation +ERROR: 0:238: '#' : invalid directive: flizbit +ERROR: 0:242: '#' : invalid directive: directive +ERROR: 0:12000: '#error' : line should be 12000 +ERROR: 7:13000: '#error' : line should be 13000 , string 7 +ERROR: 7:14013: '#error' : line should be 14013 , string 7 +ERROR: 12:14013: '#error' : line should be 14013 , string 12 +ERROR: 12:14025: '#error' : line should be 14025 , string 12 +ERROR: 12:1233: '#line' : unexpected tokens following directive +ERROR: 12:1236: '#line' : unexpected tokens following directive +ERROR: 12:20000: '#error' : line should be 20000 +ERROR: 12:20010: '#error' : line should be 20010 +ERROR: 12:20020: '#error' : line should be 20020 +ERROR: 12:20045: '#define' : Macro redefined; different substitutions: SPACE_IN_MIDDLE +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 +ERROR: 12:9500: '#if' : unexpected tokens following directive +ERROR: 12:9502: 'preprocessor evaluation' : bad expression +ERROR: 12:9502: '#if' : unexpected tokens following directive +ERROR: 12:9504: 'preprocessor evaluation' : bad expression +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:10002: '' : missing #endif +ERROR: 88 compilation errors. No code generated. + + +Shader version: 400 +ERROR: node is still EOpNull! +0:5 Sequence +0:5 move second child to first child ( temp float) +0:5 'sum' ( global float) +0:5 Constant: +0:5 0.000000 +0:7 Function Definition: main( ( global void) +0:7 Function Parameters: +0:12 Sequence +0:12 add second child into first child ( temp float) +0:12 'sum' ( global float) +0:12 Constant: +0:12 1.000000 +0:22 add second child into first child ( temp float) +0:22 'sum' ( global float) +0:22 Constant: +0:22 300.000000 +0:37 add second child into first child ( temp float) +0:37 'sum' ( global float) +0:37 Constant: +0:37 600000.000000 +0:48 add second child into first child ( temp float) +0:48 'sum' ( global float) +0:48 Constant: +0:48 7000000.000000 +0:53 add second child into first child ( temp float) +0:53 'sum' ( global float) +0:53 Constant: +0:53 80000000.000000 +0:58 add second child into first child ( temp float) +0:58 'sum' ( global float) +0:58 Constant: +0:58 900000000.000000 +0:65 add second child into first child ( temp float) +0:65 'sum' ( global float) +0:65 Constant: +0:65 0.050000 +0:69 move second child to first child ( temp 4-component vector of float) +0:69 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) +0:69 '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, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:69 Constant: +0:69 0 (const uint) +0:69 Construct vec4 ( temp 4-component vector of float) +0:69 'sum' ( global float) +0:124 Sequence +0:124 move second child to first child ( temp int) +0:124 'linenumber' ( global int) +0:124 Constant: +0:124 124 (const int) +0:125 Sequence +0:125 move second child to first child ( temp int) +0:125 'filenumber' ( global int) +0:125 Constant: +0:125 0 (const int) +0:126 Sequence +0:126 move second child to first child ( temp int) +0:126 'version' ( global int) +0:126 Constant: +0:126 400 (const int) +0:130 Sequence +0:130 move second child to first child ( temp float) +0:130 'twoPi' ( global float) +0:130 Constant: +0:130 6.280000 +0:199 Sequence +0:199 move second child to first child ( temp int) +0:199 'n' ( global int) +0:199 Constant: +0:199 15 (const int) +0:202 Sequence +0:202 move second child to first child ( temp double) +0:202 'f' ( global double) +0:202 Constant: +0:202 0.000800 +12:20031 Function Definition: foo234( ( global void) +12:20031 Function Parameters: +12:20033 Sequence +12:20033 move second child to first child ( temp 4-component vector of float) +12:20033 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) +12:20033 '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, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +12:20033 Constant: +12:20033 0 (const uint) +12:20033 Constant: +12:20033 6.000000 +12:20033 6.000000 +12:20033 6.000000 +12:20033 6.000000 +12:9011 Sequence +12:9011 move second child to first child ( temp int) +12:9011 'R1' ( global int) +12:9011 'RECURSE' ( global int) +0:? Linker Objects +0:? 'sum' ( global float) +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, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:? 'linenumber' ( global int) +0:? 'filenumber' ( global int) +0:? 'version' ( global int) +0:? 'twoPi' ( global float) +0:? 'a' ( global int) +0:? 'n' ( global int) +0:? 'f' ( global double) +0:? 'RECURSE' ( global int) +0:? 'R1' ( global int) +0:? 'aoeua' ( global int) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + + +Linked vertex stage: + + +Shader version: 400 +ERROR: node is still EOpNull! +0:5 Sequence +0:5 move second child to first child ( temp float) +0:5 'sum' ( global float) +0:5 Constant: +0:5 0.000000 +0:7 Function Definition: main( ( global void) +0:7 Function Parameters: +0:12 Sequence +0:12 add second child into first child ( temp float) +0:12 'sum' ( global float) +0:12 Constant: +0:12 1.000000 +0:22 add second child into first child ( temp float) +0:22 'sum' ( global float) +0:22 Constant: +0:22 300.000000 +0:37 add second child into first child ( temp float) +0:37 'sum' ( global float) +0:37 Constant: +0:37 600000.000000 +0:48 add second child into first child ( temp float) +0:48 'sum' ( global float) +0:48 Constant: +0:48 7000000.000000 +0:53 add second child into first child ( temp float) +0:53 'sum' ( global float) +0:53 Constant: +0:53 80000000.000000 +0:58 add second child into first child ( temp float) +0:58 'sum' ( global float) +0:58 Constant: +0:58 900000000.000000 +0:65 add second child into first child ( temp float) +0:65 'sum' ( global float) +0:65 Constant: +0:65 0.050000 +0:69 move second child to first child ( temp 4-component vector of float) +0:69 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) +0:69 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:69 Constant: +0:69 0 (const uint) +0:69 Construct vec4 ( temp 4-component vector of float) +0:69 'sum' ( global float) +0:124 Sequence +0:124 move second child to first child ( temp int) +0:124 'linenumber' ( global int) +0:124 Constant: +0:124 124 (const int) +0:125 Sequence +0:125 move second child to first child ( temp int) +0:125 'filenumber' ( global int) +0:125 Constant: +0:125 0 (const int) +0:126 Sequence +0:126 move second child to first child ( temp int) +0:126 'version' ( global int) +0:126 Constant: +0:126 400 (const int) +0:130 Sequence +0:130 move second child to first child ( temp float) +0:130 'twoPi' ( global float) +0:130 Constant: +0:130 6.280000 +0:199 Sequence +0:199 move second child to first child ( temp int) +0:199 'n' ( global int) +0:199 Constant: +0:199 15 (const int) +0:202 Sequence +0:202 move second child to first child ( temp double) +0:202 'f' ( global double) +0:202 Constant: +0:202 0.000800 +12:9011 Sequence +12:9011 move second child to first child ( temp int) +12:9011 'R1' ( global int) +12:9011 'RECURSE' ( global int) +0:? Linker Objects +0:? 'sum' ( global float) +0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:? 'linenumber' ( global int) +0:? 'filenumber' ( global int) +0:? 'version' ( global int) +0:? 'twoPi' ( global float) +0:? 'a' ( global int) +0:? 'n' ( global int) +0:? 'f' ( global double) +0:? 'RECURSE' ( global int) +0:? 'R1' ( global int) +0:? 'aoeua' ( global int) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/dataOut.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/dataOut.frag.out new file mode 100644 index 0000000..7897616 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/dataOut.frag.out @@ -0,0 +1,35 @@ +dataOut.frag +WARNING: 0:3: varying deprecated in version 130; may be removed in future release + +Shader version: 130 +0:? Sequence +0:5 Function Definition: main( ( global void) +0:5 Function Parameters: +0:7 Sequence +0:7 move second child to first child ( temp 4-component vector of float) +0:7 direct index ( temp 4-component vector of float FragData) +0:7 'gl_FragData' ( fragColor 32-element array of 4-component vector of float FragData) +0:7 Constant: +0:7 1 (const int) +0:7 'Color' ( smooth in 4-component vector of float) +0:? Linker Objects +0:? 'Color' ( smooth in 4-component vector of float) + + +Linked fragment stage: + + +Shader version: 130 +0:? Sequence +0:5 Function Definition: main( ( global void) +0:5 Function Parameters: +0:7 Sequence +0:7 move second child to first child ( temp 4-component vector of float) +0:7 direct index ( temp 4-component vector of float FragData) +0:7 'gl_FragData' ( fragColor 32-element array of 4-component vector of float FragData) +0:7 Constant: +0:7 1 (const int) +0:7 'Color' ( smooth in 4-component vector of float) +0:? Linker Objects +0:? 'Color' ( smooth in 4-component vector of float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/dataOutIndirect.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/dataOutIndirect.frag.out new file mode 100644 index 0000000..dbadb03 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/dataOutIndirect.frag.out @@ -0,0 +1,35 @@ +dataOutIndirect.frag +WARNING: 0:3: varying deprecated in version 130; may be removed in future release + +Shader version: 130 +0:? Sequence +0:7 Function Definition: main( ( global void) +0:7 Function Parameters: +0:9 Sequence +0:9 move second child to first child ( temp 4-component vector of float) +0:9 indirect index ( temp 4-component vector of float FragData) +0:9 'gl_FragData' ( fragColor 32-element array of 4-component vector of float FragData) +0:9 'i' ( uniform int) +0:9 'Color' ( smooth in 4-component vector of float) +0:? Linker Objects +0:? 'Color' ( smooth in 4-component vector of float) +0:? 'i' ( uniform int) + + +Linked fragment stage: + + +Shader version: 130 +0:? Sequence +0:7 Function Definition: main( ( global void) +0:7 Function Parameters: +0:9 Sequence +0:9 move second child to first child ( temp 4-component vector of float) +0:9 indirect index ( temp 4-component vector of float FragData) +0:9 'gl_FragData' ( fragColor 32-element array of 4-component vector of float FragData) +0:9 'i' ( uniform int) +0:9 'Color' ( smooth in 4-component vector of float) +0:? Linker Objects +0:? 'Color' ( smooth in 4-component vector of float) +0:? 'i' ( uniform int) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/dce.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/dce.frag.out new file mode 100644 index 0000000..63d194c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/dce.frag.out @@ -0,0 +1,154 @@ +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 +0:5 move second child to first child ( temp int) +0:5 'c' ( global int) +0:5 Constant: +0:5 0 (const int) +0:7 Function Definition: bar( ( global void) +0:7 Function Parameters: +0:9 Sequence +0:9 Test condition and select ( temp void) +0:9 Condition +0:9 Constant: +0:9 false (const bool) +0:9 true case +0:10 Pre-Increment ( temp int) +0:10 'c' ( global int) +0:9 false case +0:12 Pre-Increment ( temp int) +0:12 'c' ( global int) +0:14 Test condition and select ( temp int) +0:14 Condition +0:14 Constant: +0:14 false (const bool) +0:14 true case +0:14 Pre-Increment ( temp int) +0:14 'c' ( global int) +0:14 false case +0:14 Pre-Increment ( temp int) +0:14 'c' ( global int) +0:16 switch +0:16 condition +0:16 'c' ( global int) +0:16 body +0:16 Sequence +0:17 case: with expression +0:17 Constant: +0:17 1 (const int) +0:? Sequence +0:18 Pre-Increment ( temp int) +0:18 'c' ( global int) +0:19 Branch: Break +0:20 Pre-Increment ( temp int) +0:20 'c' ( global int) +0:21 case: with expression +0:21 Constant: +0:21 2 (const int) +0:? Sequence +0:22 Branch: Break +0:23 Pre-Increment ( temp int) +0:23 'c' ( global int) +0:24 default: +0:? Sequence +0:25 Branch: Break +0:28 Sequence +0:28 Sequence +0:28 move second child to first child ( temp int) +0:28 'i' ( temp int) +0:28 Constant: +0:28 0 (const int) +0:28 Loop with condition tested first +0:28 Loop Condition +0:28 Compare Less Than ( temp bool) +0:28 'i' ( temp int) +0:28 Constant: +0:28 0 (const int) +0:28 Loop Body +0:29 Pre-Increment ( temp int) +0:29 'c' ( global int) +0:28 Loop Terminal Expression +0:28 Pre-Increment ( temp int) +0:28 'i' ( temp int) +0:31 Sequence +0:31 Sequence +0:31 move second child to first child ( temp int) +0:31 'i' ( temp int) +0:31 Constant: +0:31 0 (const int) +0:31 Loop with condition tested first +0:31 Loop Condition +0:31 Compare Less Than ( temp bool) +0:31 'i' ( temp int) +0:31 Constant: +0:31 10 (const int) +0:31 Loop Body +0:32 Sequence +0:32 Test condition and select ( temp void) +0:32 Condition +0:32 Compare Less Than ( temp bool) +0:32 'c' ( global int) +0:32 Constant: +0:32 3 (const int) +0:32 true case +0:33 Sequence +0:33 Branch: Break +0:34 Pre-Increment ( temp int) +0:34 'c' ( global int) +0:32 false case +0:36 Sequence +0:36 Branch: Continue +0:37 Pre-Increment ( temp int) +0:37 'c' ( global int) +0:31 Loop Terminal Expression +0:31 Pre-Increment ( temp int) +0:31 'i' ( temp int) +0:41 Branch: Return +0:43 Pre-Increment ( temp int) +0:43 'c' ( global int) +0:46 Function Definition: foo( ( global int) +0:46 Function Parameters: +0:48 Sequence +0:48 Test condition and select ( temp void) +0:48 Condition +0:48 Compare Greater Than ( temp bool) +0:48 'c' ( global int) +0:48 Constant: +0:48 4 (const int) +0:48 true case +0:49 Sequence +0:49 Branch: Return with expression +0:49 Constant: +0:49 4 (const int) +0:50 Pre-Increment ( temp int) +0:50 'c' ( global int) +0:53 Branch: Return with expression +0:53 Constant: +0:53 5 (const int) +0:55 Pre-Increment ( temp int) +0:55 'c' ( global int) +0:? Linker Objects +0:? 'flag' ( const bool) +0:? false (const bool) +0:? 'c' ( global int) + + +Linked fragment stage: + +ERROR: Linking fragment stage: Missing entry point: Each stage requires one entry point + +Shader version: 400 +0:? Sequence +0:5 Sequence +0:5 move second child to first child ( temp int) +0:5 'c' ( global int) +0:5 Constant: +0:5 0 (const int) +0:? Linker Objects +0:? 'flag' ( const bool) +0:? false (const bool) +0:? 'c' ( global int) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/decls.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/decls.frag.out new file mode 100644 index 0000000..72ad11c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/decls.frag.out @@ -0,0 +1,515 @@ +decls.frag +ERROR: 0:19: 'vi4' : illegal use of type 'void' +ERROR: 0:20: 'vj' : illegal use of type 'void' +ERROR: 0:20: 'vk5' : illegal use of type 'void' +ERROR: 0:21: 'vm2' : illegal use of type 'void' +ERROR: 0:21: 'vm3' : illegal use of type 'void' +ERROR: 0:22: 'vn8' : illegal use of type 'void' +ERROR: 0:22: 'vp' : illegal use of type 'void' +ERROR: 0:25: 'cij' : variables with qualifier 'const' must be initialized +ERROR: 0:27: 'cip' : variables with qualifier 'const' must be initialized +ERROR: 0:34: 'gl_vi4' : identifiers starting with "gl_" are reserved +ERROR: 0:35: 'gl_vj' : identifiers starting with "gl_" are reserved +ERROR: 0:35: 'gl_vk5' : identifiers starting with "gl_" are reserved +ERROR: 0:36: 'gl_vm2' : identifiers starting with "gl_" are reserved +ERROR: 0:36: 'gl_vm3' : identifiers starting with "gl_" are reserved +ERROR: 0:37: 'gl_vn8' : identifiers starting with "gl_" are reserved +ERROR: 0:37: 'gl_vp' : identifiers starting with "gl_" are reserved +ERROR: 0:42: '' : boolean expression expected +ERROR: 0:43: 'gl_cond' : identifiers starting with "gl_" are reserved +WARNING: 0:46: 'foob__vi4' : identifiers containing consecutive underscores ("__") are reserved +WARNING: 0:47: 'foob__vj' : identifiers containing consecutive underscores ("__") are reserved +WARNING: 0:47: 'foob__vk5' : identifiers containing consecutive underscores ("__") are reserved +WARNING: 0:48: '__foobvm2' : identifiers containing consecutive underscores ("__") are reserved +WARNING: 0:48: '__foobvm3' : identifiers containing consecutive underscores ("__") are reserved +WARNING: 0:49: 'foob__vn8' : identifiers containing consecutive underscores ("__") are reserved +WARNING: 0:49: 'foob__vp' : identifiers containing consecutive underscores ("__") are reserved +ERROR: 18 compilation errors. No code generated. + + +Shader version: 120 +ERROR: node is still EOpNull! +0:5 Sequence +0:5 move second child to first child ( temp int) +0:5 'd1' ( global int) +0:5 Constant: +0:5 1 (const int) +0:6 Sequence +0:6 move second child to first child ( temp int) +0:6 'e2' ( global int) +0:6 Constant: +0:6 2 (const int) +0:7 Sequence +0:7 move second child to first child ( temp int) +0:7 'h3' ( global int) +0:7 Constant: +0:7 3 (const int) +0:14 Sequence +0:14 move second child to first child ( temp 4-element array of int) +0:14 'ii4' ( global 4-element array of int) +0:14 Constant: +0:14 1 (const int) +0:14 2 (const int) +0:14 3 (const int) +0:14 4 (const int) +0:15 Sequence +0:15 move second child to first child ( temp 5-element array of int) +0:15 'ik5' ( global 5-element array of int) +0:15 Constant: +0:15 5 (const int) +0:15 6 (const int) +0:15 7 (const int) +0:15 8 (const int) +0:15 9 (const int) +0:16 Sequence +0:16 move second child to first child ( temp 2-element array of int) +0:16 'im2' ( global 2-element array of int) +0:16 Constant: +0:16 10 (const int) +0:16 11 (const int) +0:16 move second child to first child ( temp 3-element array of int) +0:16 'im3' ( global 3-element array of int) +0:16 Constant: +0:16 12 (const int) +0:16 13 (const int) +0:16 14 (const int) +0:17 Sequence +0:17 move second child to first child ( temp 4-element array of int) +0:17 'in8' ( global 4-element array of int) +0:17 Constant: +0:17 21 (const int) +0:17 22 (const int) +0:17 23 (const int) +0:17 24 (const int) +0:34 Sequence +0:34 move second child to first child ( temp 4-element array of int) +0:34 'gl_vi4' ( global 4-element array of int) +0:34 Constant: +0:34 1 (const int) +0:34 2 (const int) +0:34 3 (const int) +0:34 4 (const int) +0:35 Sequence +0:35 move second child to first child ( temp 5-element array of int) +0:35 'gl_vk5' ( global 5-element array of int) +0:35 Constant: +0:35 5 (const int) +0:35 6 (const int) +0:35 7 (const int) +0:35 8 (const int) +0:35 9 (const int) +0:36 Sequence +0:36 move second child to first child ( temp 2-element array of int) +0:36 'gl_vm2' ( global 2-element array of int) +0:36 Constant: +0:36 10 (const int) +0:36 11 (const int) +0:36 move second child to first child ( temp 3-element array of int) +0:36 'gl_vm3' ( global 3-element array of int) +0:36 Constant: +0:36 12 (const int) +0:36 13 (const int) +0:36 14 (const int) +0:37 Sequence +0:37 move second child to first child ( temp 4-element array of int) +0:37 'gl_vn8' ( global 4-element array of int) +0:37 Constant: +0:37 21 (const int) +0:37 22 (const int) +0:37 23 (const int) +0:37 24 (const int) +0:39 Function Definition: main( ( global void) +0:39 Function Parameters: +0:41 Sequence +0:41 Loop with condition tested first +0:41 Loop Condition +0:41 move second child to first child ( temp bool) +0:41 'cond' ( temp bool) +0:41 Compare Less Than ( temp bool) +0:41 'b' ( global int) +0:41 'c' ( global int) +0:41 No loop body +0:42 Loop with condition tested first +0:42 Loop Condition +0:42 move second child to first child ( temp int) +0:42 'icond' ( temp int) +0:42 'b' ( global int) +0:42 No loop body +0:43 Loop with condition tested first +0:43 Loop Condition +0:43 move second child to first child ( temp bool) +0:43 'gl_cond' ( temp bool) +0:43 Compare Less Than ( temp bool) +0:43 'b' ( global int) +0:43 'c' ( global int) +0:43 No loop body +0:46 Sequence +0:46 move second child to first child ( temp 4-element array of int) +0:46 'foob__vi4' ( global 4-element array of int) +0:46 Constant: +0:46 1 (const int) +0:46 2 (const int) +0:46 3 (const int) +0:46 4 (const int) +0:47 Sequence +0:47 move second child to first child ( temp 5-element array of int) +0:47 'foob__vk5' ( global 5-element array of int) +0:47 Constant: +0:47 5 (const int) +0:47 6 (const int) +0:47 7 (const int) +0:47 8 (const int) +0:47 9 (const int) +0:48 Sequence +0:48 move second child to first child ( temp 2-element array of int) +0:48 '__foobvm2' ( global 2-element array of int) +0:48 Constant: +0:48 10 (const int) +0:48 11 (const int) +0:48 move second child to first child ( temp 3-element array of int) +0:48 '__foobvm3' ( global 3-element array of int) +0:48 Constant: +0:48 12 (const int) +0:48 13 (const int) +0:48 14 (const int) +0:49 Sequence +0:49 move second child to first child ( temp 4-element array of int) +0:49 'foob__vn8' ( global 4-element array of int) +0:49 Constant: +0:49 21 (const int) +0:49 22 (const int) +0:49 23 (const int) +0:49 24 (const int) +0:? Linker Objects +0:? 'a' ( global int) +0:? 'b' ( global int) +0:? 'c' ( global int) +0:? 'd1' ( global int) +0:? 'e2' ( global int) +0:? 'f' ( global int) +0:? 'g' ( global int) +0:? 'h3' ( global int) +0:? 'i4' ( global 4-element array of int) +0:? 'j' ( global int) +0:? 'k5' ( global 5-element array of int) +0:? 'm6' ( global 6-element array of int) +0:? 'm7' ( global 7-element array of int) +0:? 'n8' ( global 8-element array of int) +0:? 'p' ( global int) +0:? 'ii4' ( global 4-element array of int) +0:? 'ij' ( global int) +0:? 'ik5' ( global 5-element array of int) +0:? 'im2' ( global 2-element array of int) +0:? 'im3' ( global 3-element array of int) +0:? 'in8' ( global 4-element array of int) +0:? 'ip' ( global int) +0:? 'cii4' ( const 4-element array of int) +0:? 1 (const int) +0:? 2 (const int) +0:? 3 (const int) +0:? 4 (const int) +0:? 'cij' ( temp int) +0:? 'cik5' ( const 5-element array of int) +0:? 5 (const int) +0:? 6 (const int) +0:? 7 (const int) +0:? 8 (const int) +0:? 9 (const int) +0:? 'cim2' ( const 2-element array of int) +0:? 10 (const int) +0:? 11 (const int) +0:? 'cim3' ( const 3-element array of int) +0:? 12 (const int) +0:? 13 (const int) +0:? 14 (const int) +0:? 'cin8' ( const 4-element array of int) +0:? 21 (const int) +0:? 22 (const int) +0:? 23 (const int) +0:? 24 (const int) +0:? 'cip' ( temp int) +0:? 'uii4' ( uniform 4-element array of int) +0:? 1 (const int) +0:? 2 (const int) +0:? 3 (const int) +0:? 4 (const int) +0:? 'uij' ( uniform int) +0:? 'uik5' ( uniform 5-element array of int) +0:? 5 (const int) +0:? 6 (const int) +0:? 7 (const int) +0:? 8 (const int) +0:? 9 (const int) +0:? 'uim2' ( uniform 2-element array of int) +0:? 10 (const int) +0:? 11 (const int) +0:? 'uim3' ( uniform 3-element array of int) +0:? 12 (const int) +0:? 13 (const int) +0:? 14 (const int) +0:? 'uin8' ( uniform 4-element array of int) +0:? 21 (const int) +0:? 22 (const int) +0:? 23 (const int) +0:? 24 (const int) +0:? 'uip' ( uniform int) +0:? 'gl_vi4' ( global 4-element array of int) +0:? 'gl_vj' ( global int) +0:? 'gl_vk5' ( global 5-element array of int) +0:? 'gl_vm2' ( global 2-element array of int) +0:? 'gl_vm3' ( global 3-element array of int) +0:? 'gl_vn8' ( global 4-element array of int) +0:? 'gl_vp' ( global int) +0:? 'foob__vi4' ( global 4-element array of int) +0:? 'foob__vj' ( global int) +0:? 'foob__vk5' ( global 5-element array of int) +0:? '__foobvm2' ( global 2-element array of int) +0:? '__foobvm3' ( global 3-element array of int) +0:? 'foob__vn8' ( global 4-element array of int) +0:? 'foob__vp' ( global int) + + +Linked fragment stage: + + +Shader version: 120 +ERROR: node is still EOpNull! +0:5 Sequence +0:5 move second child to first child ( temp int) +0:5 'd1' ( global int) +0:5 Constant: +0:5 1 (const int) +0:6 Sequence +0:6 move second child to first child ( temp int) +0:6 'e2' ( global int) +0:6 Constant: +0:6 2 (const int) +0:7 Sequence +0:7 move second child to first child ( temp int) +0:7 'h3' ( global int) +0:7 Constant: +0:7 3 (const int) +0:14 Sequence +0:14 move second child to first child ( temp 4-element array of int) +0:14 'ii4' ( global 4-element array of int) +0:14 Constant: +0:14 1 (const int) +0:14 2 (const int) +0:14 3 (const int) +0:14 4 (const int) +0:15 Sequence +0:15 move second child to first child ( temp 5-element array of int) +0:15 'ik5' ( global 5-element array of int) +0:15 Constant: +0:15 5 (const int) +0:15 6 (const int) +0:15 7 (const int) +0:15 8 (const int) +0:15 9 (const int) +0:16 Sequence +0:16 move second child to first child ( temp 2-element array of int) +0:16 'im2' ( global 2-element array of int) +0:16 Constant: +0:16 10 (const int) +0:16 11 (const int) +0:16 move second child to first child ( temp 3-element array of int) +0:16 'im3' ( global 3-element array of int) +0:16 Constant: +0:16 12 (const int) +0:16 13 (const int) +0:16 14 (const int) +0:17 Sequence +0:17 move second child to first child ( temp 4-element array of int) +0:17 'in8' ( global 4-element array of int) +0:17 Constant: +0:17 21 (const int) +0:17 22 (const int) +0:17 23 (const int) +0:17 24 (const int) +0:34 Sequence +0:34 move second child to first child ( temp 4-element array of int) +0:34 'gl_vi4' ( global 4-element array of int) +0:34 Constant: +0:34 1 (const int) +0:34 2 (const int) +0:34 3 (const int) +0:34 4 (const int) +0:35 Sequence +0:35 move second child to first child ( temp 5-element array of int) +0:35 'gl_vk5' ( global 5-element array of int) +0:35 Constant: +0:35 5 (const int) +0:35 6 (const int) +0:35 7 (const int) +0:35 8 (const int) +0:35 9 (const int) +0:36 Sequence +0:36 move second child to first child ( temp 2-element array of int) +0:36 'gl_vm2' ( global 2-element array of int) +0:36 Constant: +0:36 10 (const int) +0:36 11 (const int) +0:36 move second child to first child ( temp 3-element array of int) +0:36 'gl_vm3' ( global 3-element array of int) +0:36 Constant: +0:36 12 (const int) +0:36 13 (const int) +0:36 14 (const int) +0:37 Sequence +0:37 move second child to first child ( temp 4-element array of int) +0:37 'gl_vn8' ( global 4-element array of int) +0:37 Constant: +0:37 21 (const int) +0:37 22 (const int) +0:37 23 (const int) +0:37 24 (const int) +0:39 Function Definition: main( ( global void) +0:39 Function Parameters: +0:41 Sequence +0:41 Loop with condition tested first +0:41 Loop Condition +0:41 move second child to first child ( temp bool) +0:41 'cond' ( temp bool) +0:41 Compare Less Than ( temp bool) +0:41 'b' ( global int) +0:41 'c' ( global int) +0:41 No loop body +0:42 Loop with condition tested first +0:42 Loop Condition +0:42 move second child to first child ( temp int) +0:42 'icond' ( temp int) +0:42 'b' ( global int) +0:42 No loop body +0:43 Loop with condition tested first +0:43 Loop Condition +0:43 move second child to first child ( temp bool) +0:43 'gl_cond' ( temp bool) +0:43 Compare Less Than ( temp bool) +0:43 'b' ( global int) +0:43 'c' ( global int) +0:43 No loop body +0:46 Sequence +0:46 move second child to first child ( temp 4-element array of int) +0:46 'foob__vi4' ( global 4-element array of int) +0:46 Constant: +0:46 1 (const int) +0:46 2 (const int) +0:46 3 (const int) +0:46 4 (const int) +0:47 Sequence +0:47 move second child to first child ( temp 5-element array of int) +0:47 'foob__vk5' ( global 5-element array of int) +0:47 Constant: +0:47 5 (const int) +0:47 6 (const int) +0:47 7 (const int) +0:47 8 (const int) +0:47 9 (const int) +0:48 Sequence +0:48 move second child to first child ( temp 2-element array of int) +0:48 '__foobvm2' ( global 2-element array of int) +0:48 Constant: +0:48 10 (const int) +0:48 11 (const int) +0:48 move second child to first child ( temp 3-element array of int) +0:48 '__foobvm3' ( global 3-element array of int) +0:48 Constant: +0:48 12 (const int) +0:48 13 (const int) +0:48 14 (const int) +0:49 Sequence +0:49 move second child to first child ( temp 4-element array of int) +0:49 'foob__vn8' ( global 4-element array of int) +0:49 Constant: +0:49 21 (const int) +0:49 22 (const int) +0:49 23 (const int) +0:49 24 (const int) +0:? Linker Objects +0:? 'a' ( global int) +0:? 'b' ( global int) +0:? 'c' ( global int) +0:? 'd1' ( global int) +0:? 'e2' ( global int) +0:? 'f' ( global int) +0:? 'g' ( global int) +0:? 'h3' ( global int) +0:? 'i4' ( global 4-element array of int) +0:? 'j' ( global int) +0:? 'k5' ( global 5-element array of int) +0:? 'm6' ( global 6-element array of int) +0:? 'm7' ( global 7-element array of int) +0:? 'n8' ( global 8-element array of int) +0:? 'p' ( global int) +0:? 'ii4' ( global 4-element array of int) +0:? 'ij' ( global int) +0:? 'ik5' ( global 5-element array of int) +0:? 'im2' ( global 2-element array of int) +0:? 'im3' ( global 3-element array of int) +0:? 'in8' ( global 4-element array of int) +0:? 'ip' ( global int) +0:? 'cii4' ( const 4-element array of int) +0:? 1 (const int) +0:? 2 (const int) +0:? 3 (const int) +0:? 4 (const int) +0:? 'cij' ( temp int) +0:? 'cik5' ( const 5-element array of int) +0:? 5 (const int) +0:? 6 (const int) +0:? 7 (const int) +0:? 8 (const int) +0:? 9 (const int) +0:? 'cim2' ( const 2-element array of int) +0:? 10 (const int) +0:? 11 (const int) +0:? 'cim3' ( const 3-element array of int) +0:? 12 (const int) +0:? 13 (const int) +0:? 14 (const int) +0:? 'cin8' ( const 4-element array of int) +0:? 21 (const int) +0:? 22 (const int) +0:? 23 (const int) +0:? 24 (const int) +0:? 'cip' ( temp int) +0:? 'uii4' ( uniform 4-element array of int) +0:? 1 (const int) +0:? 2 (const int) +0:? 3 (const int) +0:? 4 (const int) +0:? 'uij' ( uniform int) +0:? 'uik5' ( uniform 5-element array of int) +0:? 5 (const int) +0:? 6 (const int) +0:? 7 (const int) +0:? 8 (const int) +0:? 9 (const int) +0:? 'uim2' ( uniform 2-element array of int) +0:? 10 (const int) +0:? 11 (const int) +0:? 'uim3' ( uniform 3-element array of int) +0:? 12 (const int) +0:? 13 (const int) +0:? 14 (const int) +0:? 'uin8' ( uniform 4-element array of int) +0:? 21 (const int) +0:? 22 (const int) +0:? 23 (const int) +0:? 24 (const int) +0:? 'uip' ( uniform int) +0:? 'gl_vi4' ( global 4-element array of int) +0:? 'gl_vj' ( global int) +0:? 'gl_vk5' ( global 5-element array of int) +0:? 'gl_vm2' ( global 2-element array of int) +0:? 'gl_vm3' ( global 3-element array of int) +0:? 'gl_vn8' ( global 4-element array of int) +0:? 'gl_vp' ( global int) +0:? 'foob__vi4' ( global 4-element array of int) +0:? 'foob__vj' ( global int) +0:? 'foob__vk5' ( global 5-element array of int) +0:? '__foobvm2' ( global 2-element array of int) +0:? '__foobvm3' ( global 3-element array of int) +0:? 'foob__vn8' ( global 4-element array of int) +0:? 'foob__vp' ( global int) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/deepRvalue.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/deepRvalue.frag.out new file mode 100644 index 0000000..a4fdf5a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/deepRvalue.frag.out @@ -0,0 +1,285 @@ +deepRvalue.frag +Shader version: 120 +0:? Sequence +0:5 Sequence +0:5 move second child to first child ( temp 4-component vector of float) +0:5 'v1' ( global 4-component vector of float) +0:5 Constant: +0:5 2.000000 +0:5 3.000000 +0:5 5.000000 +0:5 7.000000 +0:6 Sequence +0:6 move second child to first child ( temp 4-component vector of float) +0:6 'v2' ( global 4-component vector of float) +0:6 Constant: +0:6 11.000000 +0:6 13.000000 +0:6 17.000000 +0:6 19.000000 +0:7 Sequence +0:7 move second child to first child ( temp 4-component vector of float) +0:7 'v3' ( global 4-component vector of float) +0:7 Constant: +0:7 23.000000 +0:7 29.000000 +0:7 31.000000 +0:7 37.000000 +0:8 Sequence +0:8 move second child to first child ( temp 4-component vector of float) +0:8 'v4' ( global 4-component vector of float) +0:8 Constant: +0:8 41.000000 +0:8 43.000000 +0:8 47.000000 +0:8 53.000000 +0:16 Function Definition: main( ( global void) +0:16 Function Parameters: +0:18 Sequence +0:18 Sequence +0:18 move second child to first child ( temp 4X4 matrix of float) +0:18 'm' ( temp 4X4 matrix of float) +0:18 Construct mat4 ( temp 4X4 matrix of float) +0:18 'v1' ( global 4-component vector of float) +0:18 'v2' ( global 4-component vector of float) +0:18 'v3' ( global 4-component vector of float) +0:18 'v4' ( global 4-component vector of float) +0:20 Sequence +0:20 move second child to first child ( temp 4X4 matrix of float) +0:20 'mm' ( temp 4X4 matrix of float) +0:20 component-wise multiply ( global 4X4 matrix of float) +0:20 'm' ( temp 4X4 matrix of float) +0:20 'm' ( temp 4X4 matrix of float) +0:21 Sequence +0:21 move second child to first child ( temp float) +0:21 'f' ( temp float) +0:21 direct index ( temp float) +0:21 direct index ( temp 4-component vector of float) +0:21 'mm' ( temp 4X4 matrix of float) +0:21 Constant: +0:21 1 (const int) +0:21 Constant: +0:21 3 (const int) +0:24 Sequence +0:24 move second child to first child ( temp float) +0:24 'g' ( temp float) +0:24 direct index ( temp float) +0:24 direct index ( temp 4-component vector of float) +0:24 component-wise multiply ( global 4X4 matrix of float) +0:24 'm' ( temp 4X4 matrix of float) +0:24 'm' ( temp 4X4 matrix of float) +0:24 Constant: +0:24 2 (const int) +0:24 Constant: +0:24 1 (const int) +0:26 Sequence +0:26 move second child to first child ( temp float) +0:26 'h' ( temp float) +0:26 Constant: +0:26 5.000000 +0:28 Sequence +0:28 move second child to first child ( temp float) +0:28 'i' ( temp float) +0:28 direct index ( temp float) +0:28 texture ( global 4-component vector of float) +0:28 'sampler' ( uniform sampler2D) +0:28 Constant: +0:28 0.500000 +0:28 0.500000 +0:28 Constant: +0:28 1 (const int) +0:30 add second child into first child ( temp float) +0:30 'i' ( temp float) +0:30 direct index ( temp float) +0:30 Test condition and select ( temp 4-component vector of float) +0:30 Condition +0:30 Compare Greater Than ( temp bool) +0:30 'i' ( temp float) +0:30 Constant: +0:30 0.100000 +0:30 true case +0:30 'v1' ( global 4-component vector of float) +0:30 false case +0:30 'v2' ( global 4-component vector of float) +0:30 Constant: +0:30 3 (const int) +0:33 add second child into first child ( temp float) +0:33 'i' ( temp float) +0:33 direct index ( temp float) +0:33 direct index ( temp 2-component vector of float) +0:33 b: direct index for structure ( global 3-element array of 2-component vector of float) +0:33 move second child to first child ( temp structure{ global int a, global 3-element array of 2-component vector of float b, global bool c}) +0:33 't' ( temp structure{ global int a, global 3-element array of 2-component vector of float b, global bool c}) +0:33 Constant: +0:33 1 (const int) +0:33 2.000000 +0:33 3.000000 +0:33 4.000000 +0:33 5.000000 +0:33 6.000000 +0:33 7.000000 +0:33 true (const bool) +0:33 Constant: +0:33 1 (const int) +0:33 Constant: +0:33 2 (const int) +0:33 Constant: +0:33 1 (const int) +0:35 move second child to first child ( temp 4-component vector of float) +0:35 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:35 Construct vec4 ( temp 4-component vector of float) +0:35 'f' ( temp float) +0:35 'g' ( temp float) +0:35 'h' ( temp float) +0:35 'i' ( temp float) +0:? Linker Objects +0:? 'sampler' ( uniform sampler2D) +0:? 'v1' ( global 4-component vector of float) +0:? 'v2' ( global 4-component vector of float) +0:? 'v3' ( global 4-component vector of float) +0:? 'v4' ( global 4-component vector of float) + + +Linked fragment stage: + + +Shader version: 120 +0:? Sequence +0:5 Sequence +0:5 move second child to first child ( temp 4-component vector of float) +0:5 'v1' ( global 4-component vector of float) +0:5 Constant: +0:5 2.000000 +0:5 3.000000 +0:5 5.000000 +0:5 7.000000 +0:6 Sequence +0:6 move second child to first child ( temp 4-component vector of float) +0:6 'v2' ( global 4-component vector of float) +0:6 Constant: +0:6 11.000000 +0:6 13.000000 +0:6 17.000000 +0:6 19.000000 +0:7 Sequence +0:7 move second child to first child ( temp 4-component vector of float) +0:7 'v3' ( global 4-component vector of float) +0:7 Constant: +0:7 23.000000 +0:7 29.000000 +0:7 31.000000 +0:7 37.000000 +0:8 Sequence +0:8 move second child to first child ( temp 4-component vector of float) +0:8 'v4' ( global 4-component vector of float) +0:8 Constant: +0:8 41.000000 +0:8 43.000000 +0:8 47.000000 +0:8 53.000000 +0:16 Function Definition: main( ( global void) +0:16 Function Parameters: +0:18 Sequence +0:18 Sequence +0:18 move second child to first child ( temp 4X4 matrix of float) +0:18 'm' ( temp 4X4 matrix of float) +0:18 Construct mat4 ( temp 4X4 matrix of float) +0:18 'v1' ( global 4-component vector of float) +0:18 'v2' ( global 4-component vector of float) +0:18 'v3' ( global 4-component vector of float) +0:18 'v4' ( global 4-component vector of float) +0:20 Sequence +0:20 move second child to first child ( temp 4X4 matrix of float) +0:20 'mm' ( temp 4X4 matrix of float) +0:20 component-wise multiply ( global 4X4 matrix of float) +0:20 'm' ( temp 4X4 matrix of float) +0:20 'm' ( temp 4X4 matrix of float) +0:21 Sequence +0:21 move second child to first child ( temp float) +0:21 'f' ( temp float) +0:21 direct index ( temp float) +0:21 direct index ( temp 4-component vector of float) +0:21 'mm' ( temp 4X4 matrix of float) +0:21 Constant: +0:21 1 (const int) +0:21 Constant: +0:21 3 (const int) +0:24 Sequence +0:24 move second child to first child ( temp float) +0:24 'g' ( temp float) +0:24 direct index ( temp float) +0:24 direct index ( temp 4-component vector of float) +0:24 component-wise multiply ( global 4X4 matrix of float) +0:24 'm' ( temp 4X4 matrix of float) +0:24 'm' ( temp 4X4 matrix of float) +0:24 Constant: +0:24 2 (const int) +0:24 Constant: +0:24 1 (const int) +0:26 Sequence +0:26 move second child to first child ( temp float) +0:26 'h' ( temp float) +0:26 Constant: +0:26 5.000000 +0:28 Sequence +0:28 move second child to first child ( temp float) +0:28 'i' ( temp float) +0:28 direct index ( temp float) +0:28 texture ( global 4-component vector of float) +0:28 'sampler' ( uniform sampler2D) +0:28 Constant: +0:28 0.500000 +0:28 0.500000 +0:28 Constant: +0:28 1 (const int) +0:30 add second child into first child ( temp float) +0:30 'i' ( temp float) +0:30 direct index ( temp float) +0:30 Test condition and select ( temp 4-component vector of float) +0:30 Condition +0:30 Compare Greater Than ( temp bool) +0:30 'i' ( temp float) +0:30 Constant: +0:30 0.100000 +0:30 true case +0:30 'v1' ( global 4-component vector of float) +0:30 false case +0:30 'v2' ( global 4-component vector of float) +0:30 Constant: +0:30 3 (const int) +0:33 add second child into first child ( temp float) +0:33 'i' ( temp float) +0:33 direct index ( temp float) +0:33 direct index ( temp 2-component vector of float) +0:33 b: direct index for structure ( global 3-element array of 2-component vector of float) +0:33 move second child to first child ( temp structure{ global int a, global 3-element array of 2-component vector of float b, global bool c}) +0:33 't' ( temp structure{ global int a, global 3-element array of 2-component vector of float b, global bool c}) +0:33 Constant: +0:33 1 (const int) +0:33 2.000000 +0:33 3.000000 +0:33 4.000000 +0:33 5.000000 +0:33 6.000000 +0:33 7.000000 +0:33 true (const bool) +0:33 Constant: +0:33 1 (const int) +0:33 Constant: +0:33 2 (const int) +0:33 Constant: +0:33 1 (const int) +0:35 move second child to first child ( temp 4-component vector of float) +0:35 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:35 Construct vec4 ( temp 4-component vector of float) +0:35 'f' ( temp float) +0:35 'g' ( temp float) +0:35 'h' ( temp float) +0:35 'i' ( temp float) +0:? Linker Objects +0:? 'sampler' ( uniform sampler2D) +0:? 'v1' ( global 4-component vector of float) +0:? 'v2' ( global 4-component vector of float) +0:? 'v3' ( global 4-component vector of float) +0:? 'v4' ( global 4-component vector of float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/depthOut.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/depthOut.frag.out new file mode 100644 index 0000000..91c1fc2 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/depthOut.frag.out @@ -0,0 +1,38 @@ +depthOut.frag +WARNING: 0:3: varying deprecated in version 130; may be removed in future release +WARNING: 0:4: varying deprecated in version 130; may be removed in future release + +Shader version: 130 +0:? Sequence +0:6 Function Definition: main( ( global void) +0:6 Function Parameters: +0:8 Sequence +0:8 move second child to first child ( temp float) +0:8 'gl_FragDepth' ( gl_FragDepth float FragDepth) +0:8 'Depth' ( smooth in float) +0:9 move second child to first child ( temp 4-component vector of float) +0:9 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:9 'Color' ( smooth in 4-component vector of float) +0:? Linker Objects +0:? 'Color' ( smooth in 4-component vector of float) +0:? 'Depth' ( smooth in float) + + +Linked fragment stage: + + +Shader version: 130 +0:? Sequence +0:6 Function Definition: main( ( global void) +0:6 Function Parameters: +0:8 Sequence +0:8 move second child to first child ( temp float) +0:8 'gl_FragDepth' ( gl_FragDepth float FragDepth) +0:8 'Depth' ( smooth in float) +0:9 move second child to first child ( temp 4-component vector of float) +0:9 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:9 'Color' ( smooth in 4-component vector of float) +0:? Linker Objects +0:? 'Color' ( smooth in 4-component vector of float) +0:? 'Depth' ( smooth in float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/discard-dce.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/discard-dce.frag.out new file mode 100644 index 0000000..5f5e889 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/discard-dce.frag.out @@ -0,0 +1,239 @@ +discard-dce.frag +Shader version: 110 +0:? Sequence +0:4 Function Definition: main( ( global void) +0:4 Function Parameters: +0:6 Sequence +0:6 Sequence +0:6 move second child to first child ( temp 4-component vector of float) +0:6 'white' ( temp 4-component vector of float) +0:6 Constant: +0:6 1.000000 +0:6 1.000000 +0:6 1.000000 +0:6 1.000000 +0:7 Sequence +0:7 move second child to first child ( temp 4-component vector of float) +0:7 'black' ( temp 4-component vector of float) +0:7 Constant: +0:7 0.200000 +0:7 0.200000 +0:7 0.200000 +0:7 0.200000 +0:8 Sequence +0:8 move second child to first child ( temp 4-component vector of float) +0:8 'color' ( temp 4-component vector of float) +0:8 'white' ( temp 4-component vector of float) +0:11 Sequence +0:11 move second child to first child ( temp float) +0:11 'x' ( temp float) +0:11 subtract ( temp float) +0:11 component-wise multiply ( temp float) +0:11 direct index ( temp float) +0:11 'tex_coord' ( smooth in 2-component vector of float) +0:11 Constant: +0:11 0 (const int) +0:11 Constant: +0:11 2.000000 +0:11 Constant: +0:11 1.000000 +0:12 Sequence +0:12 move second child to first child ( temp float) +0:12 'y' ( temp float) +0:12 subtract ( temp float) +0:12 component-wise multiply ( temp float) +0:12 direct index ( temp float) +0:12 'tex_coord' ( smooth in 2-component vector of float) +0:12 Constant: +0:12 1 (const int) +0:12 Constant: +0:12 2.000000 +0:12 Constant: +0:12 1.000000 +0:14 Sequence +0:14 move second child to first child ( temp float) +0:14 'radius' ( temp float) +0:14 sqrt ( global float) +0:14 add ( temp float) +0:14 component-wise multiply ( temp float) +0:14 'x' ( temp float) +0:14 'x' ( temp float) +0:14 component-wise multiply ( temp float) +0:14 'y' ( temp float) +0:14 'y' ( temp float) +0:15 Test condition and select ( temp void) +0:15 Condition +0:15 Compare Greater Than ( temp bool) +0:15 'radius' ( temp float) +0:15 Constant: +0:15 1.000000 +0:15 true case +0:16 Sequence +0:16 Test condition and select ( temp void) +0:16 Condition +0:16 Compare Greater Than ( temp bool) +0:16 'radius' ( temp float) +0:16 Constant: +0:16 1.100000 +0:16 true case +0:17 Sequence +0:17 Pre-Increment ( temp 4-component vector of float) +0:17 'color' ( temp 4-component vector of float) +0:20 move second child to first child ( temp 4-component vector of float) +0:20 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:20 'color' ( temp 4-component vector of float) +0:22 Test condition and select ( temp void) +0:22 Condition +0:22 Compare Greater Than ( temp bool) +0:22 'radius' ( temp float) +0:22 Constant: +0:22 1.200000 +0:22 true case +0:23 Sequence +0:23 Pre-Increment ( temp 4-component vector of float) +0:23 'color' ( temp 4-component vector of float) +0:26 Branch: Kill +0:30 Test condition and select ( temp void) +0:30 Condition +0:30 Compare Greater Than or Equal ( temp bool) +0:30 'radius' ( temp float) +0:30 Constant: +0:30 0.750000 +0:30 true case +0:31 subtract second child into first child ( temp 4-component vector of float) +0:31 'color' ( temp 4-component vector of float) +0:31 Absolute value ( global float) +0:31 divide ( temp float) +0:31 pow ( global float) +0:31 'radius' ( temp float) +0:31 Constant: +0:31 16.000000 +0:31 Constant: +0:31 2.000000 +0:33 move second child to first child ( temp 4-component vector of float) +0:33 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:33 'color' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'tex_coord' ( smooth in 2-component vector of float) + + +Linked fragment stage: + + +Shader version: 110 +0:? Sequence +0:4 Function Definition: main( ( global void) +0:4 Function Parameters: +0:6 Sequence +0:6 Sequence +0:6 move second child to first child ( temp 4-component vector of float) +0:6 'white' ( temp 4-component vector of float) +0:6 Constant: +0:6 1.000000 +0:6 1.000000 +0:6 1.000000 +0:6 1.000000 +0:7 Sequence +0:7 move second child to first child ( temp 4-component vector of float) +0:7 'black' ( temp 4-component vector of float) +0:7 Constant: +0:7 0.200000 +0:7 0.200000 +0:7 0.200000 +0:7 0.200000 +0:8 Sequence +0:8 move second child to first child ( temp 4-component vector of float) +0:8 'color' ( temp 4-component vector of float) +0:8 'white' ( temp 4-component vector of float) +0:11 Sequence +0:11 move second child to first child ( temp float) +0:11 'x' ( temp float) +0:11 subtract ( temp float) +0:11 component-wise multiply ( temp float) +0:11 direct index ( temp float) +0:11 'tex_coord' ( smooth in 2-component vector of float) +0:11 Constant: +0:11 0 (const int) +0:11 Constant: +0:11 2.000000 +0:11 Constant: +0:11 1.000000 +0:12 Sequence +0:12 move second child to first child ( temp float) +0:12 'y' ( temp float) +0:12 subtract ( temp float) +0:12 component-wise multiply ( temp float) +0:12 direct index ( temp float) +0:12 'tex_coord' ( smooth in 2-component vector of float) +0:12 Constant: +0:12 1 (const int) +0:12 Constant: +0:12 2.000000 +0:12 Constant: +0:12 1.000000 +0:14 Sequence +0:14 move second child to first child ( temp float) +0:14 'radius' ( temp float) +0:14 sqrt ( global float) +0:14 add ( temp float) +0:14 component-wise multiply ( temp float) +0:14 'x' ( temp float) +0:14 'x' ( temp float) +0:14 component-wise multiply ( temp float) +0:14 'y' ( temp float) +0:14 'y' ( temp float) +0:15 Test condition and select ( temp void) +0:15 Condition +0:15 Compare Greater Than ( temp bool) +0:15 'radius' ( temp float) +0:15 Constant: +0:15 1.000000 +0:15 true case +0:16 Sequence +0:16 Test condition and select ( temp void) +0:16 Condition +0:16 Compare Greater Than ( temp bool) +0:16 'radius' ( temp float) +0:16 Constant: +0:16 1.100000 +0:16 true case +0:17 Sequence +0:17 Pre-Increment ( temp 4-component vector of float) +0:17 'color' ( temp 4-component vector of float) +0:20 move second child to first child ( temp 4-component vector of float) +0:20 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:20 'color' ( temp 4-component vector of float) +0:22 Test condition and select ( temp void) +0:22 Condition +0:22 Compare Greater Than ( temp bool) +0:22 'radius' ( temp float) +0:22 Constant: +0:22 1.200000 +0:22 true case +0:23 Sequence +0:23 Pre-Increment ( temp 4-component vector of float) +0:23 'color' ( temp 4-component vector of float) +0:26 Branch: Kill +0:30 Test condition and select ( temp void) +0:30 Condition +0:30 Compare Greater Than or Equal ( temp bool) +0:30 'radius' ( temp float) +0:30 Constant: +0:30 0.750000 +0:30 true case +0:31 subtract second child into first child ( temp 4-component vector of float) +0:31 'color' ( temp 4-component vector of float) +0:31 Absolute value ( global float) +0:31 divide ( temp float) +0:31 pow ( global float) +0:31 'radius' ( temp float) +0:31 Constant: +0:31 16.000000 +0:31 Constant: +0:31 2.000000 +0:33 move second child to first child ( temp 4-component vector of float) +0:33 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:33 'color' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'tex_coord' ( smooth in 2-component vector of float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/doWhileLoop.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/doWhileLoop.frag.out new file mode 100644 index 0000000..5302cb9 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/doWhileLoop.frag.out @@ -0,0 +1,65 @@ +doWhileLoop.frag +Shader version: 110 +0:? Sequence +0:7 Function Definition: main( ( global void) +0:7 Function Parameters: +0:9 Sequence +0:9 Sequence +0:9 move second child to first child ( temp 4-component vector of float) +0:9 'color' ( temp 4-component vector of float) +0:9 'BaseColor' ( smooth in 4-component vector of float) +0:13 Loop with condition not tested first +0:13 Loop Condition +0:13 Compare Less Than ( temp bool) +0:13 direct index ( temp float) +0:13 'color' ( temp 4-component vector of float) +0:13 Constant: +0:13 0 (const int) +0:13 'd' ( uniform float) +0:13 Loop Body +0:12 Sequence +0:12 add second child into first child ( temp 4-component vector of float) +0:12 'color' ( temp 4-component vector of float) +0:12 'bigColor' ( uniform 4-component vector of float) +0:15 move second child to first child ( temp 4-component vector of float) +0:15 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:15 'color' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'bigColor' ( uniform 4-component vector of float) +0:? 'BaseColor' ( smooth in 4-component vector of float) +0:? 'd' ( uniform float) + + +Linked fragment stage: + + +Shader version: 110 +0:? Sequence +0:7 Function Definition: main( ( global void) +0:7 Function Parameters: +0:9 Sequence +0:9 Sequence +0:9 move second child to first child ( temp 4-component vector of float) +0:9 'color' ( temp 4-component vector of float) +0:9 'BaseColor' ( smooth in 4-component vector of float) +0:13 Loop with condition not tested first +0:13 Loop Condition +0:13 Compare Less Than ( temp bool) +0:13 direct index ( temp float) +0:13 'color' ( temp 4-component vector of float) +0:13 Constant: +0:13 0 (const int) +0:13 'd' ( uniform float) +0:13 Loop Body +0:12 Sequence +0:12 add second child into first child ( temp 4-component vector of float) +0:12 'color' ( temp 4-component vector of float) +0:12 'bigColor' ( uniform 4-component vector of float) +0:15 move second child to first child ( temp 4-component vector of float) +0:15 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:15 'color' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'bigColor' ( uniform 4-component vector of float) +0:? 'BaseColor' ( smooth in 4-component vector of float) +0:? 'd' ( uniform float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/earlyReturnDiscard.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/earlyReturnDiscard.frag.out new file mode 100644 index 0000000..8c9e4d9 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/earlyReturnDiscard.frag.out @@ -0,0 +1,257 @@ +earlyReturnDiscard.frag +Shader version: 110 +0:? Sequence +0:19 Function Definition: main( ( global void) +0:19 Function Parameters: +0:21 Sequence +0:21 Sequence +0:21 move second child to first child ( temp 4-component vector of float) +0:21 'color' ( temp 4-component vector of float) +0:21 'BaseColor' ( smooth in 4-component vector of float) +0:24 move second child to first child ( temp 4-component vector of float) +0:24 'color2' ( temp 4-component vector of float) +0:24 'otherColor' ( uniform 4-component vector of float) +0:26 Test condition and select ( temp void) +0:26 Condition +0:26 Compare Greater Than ( temp bool) +0:26 'c' ( smooth in float) +0:26 'd' ( uniform float) +0:26 true case +0:27 add second child into first child ( temp 4-component vector of float) +0:27 'color' ( temp 4-component vector of float) +0:27 'bigColor' ( uniform 4-component vector of float) +0:26 false case +0:29 add second child into first child ( temp 4-component vector of float) +0:29 'color' ( temp 4-component vector of float) +0:29 'smallColor' ( uniform 4-component vector of float) +0:31 Test condition and select ( temp void) +0:31 Condition +0:31 Compare Less Than ( temp bool) +0:31 direct index ( temp float) +0:31 'color' ( temp 4-component vector of float) +0:31 Constant: +0:31 2 (const int) +0:31 'minimum' ( uniform float) +0:31 true case +0:32 Branch: Return +0:34 Post-Increment ( temp float) +0:34 direct index ( temp float) +0:34 'color' ( temp 4-component vector of float) +0:34 Constant: +0:34 2 (const int) +0:36 Test condition and select ( temp void) +0:36 Condition +0:36 Compare Greater Than ( temp bool) +0:36 direct index ( temp float) +0:36 'color' ( temp 4-component vector of float) +0:36 Constant: +0:36 2 (const int) +0:36 'threshhold' ( uniform float) +0:36 true case +0:37 Branch: Kill +0:39 Post-Increment ( temp 4-component vector of float) +0:39 'color' ( temp 4-component vector of float) +0:42 Test condition and select ( temp void) +0:42 Condition +0:42 Compare Greater Than ( temp bool) +0:42 direct index ( temp float) +0:42 'color' ( temp 4-component vector of float) +0:42 Constant: +0:42 3 (const int) +0:42 'threshhold2' ( uniform float) +0:42 true case +0:43 Sequence +0:43 Test condition and select ( temp void) +0:43 Condition +0:43 Compare Greater Than ( temp bool) +0:43 direct index ( temp float) +0:43 'color' ( temp 4-component vector of float) +0:43 Constant: +0:43 2 (const int) +0:43 'threshhold2' ( uniform float) +0:43 true case +0:44 Branch: Return +0:43 false case +0:45 Test condition and select ( temp void) +0:45 Condition +0:45 'b' ( uniform bool) +0:45 true case +0:46 Post-Increment ( temp float) +0:46 direct index ( temp float) +0:46 'color' ( temp 4-component vector of float) +0:46 Constant: +0:46 2 (const int) +0:45 false case +0:48 Sequence +0:48 Test condition and select ( temp void) +0:48 Condition +0:48 Compare Less Than ( temp bool) +0:48 direct index ( temp float) +0:48 'color' ( temp 4-component vector of float) +0:48 Constant: +0:48 0 (const int) +0:48 'minimum' ( uniform float) +0:48 true case +0:49 Sequence +0:49 Branch: Kill +0:48 false case +0:51 Sequence +0:51 Post-Increment ( temp 4-component vector of float) +0:51 'color' ( temp 4-component vector of float) +0:42 false case +0:55 Sequence +0:55 Test condition and select ( temp void) +0:55 Condition +0:55 'b' ( uniform bool) +0:55 true case +0:56 Branch: Kill +0:55 false case +0:58 Branch: Return +0:101 move second child to first child ( temp 4-component vector of float) +0:101 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:101 component-wise multiply ( temp 4-component vector of float) +0:101 'color' ( temp 4-component vector of float) +0:101 'color2' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'd' ( uniform float) +0:? 'bigColor' ( uniform 4-component vector of float) +0:? 'smallColor' ( uniform 4-component vector of float) +0:? 'otherColor' ( uniform 4-component vector of float) +0:? 'c' ( smooth in float) +0:? 'threshhold' ( uniform float) +0:? 'threshhold2' ( uniform float) +0:? 'threshhold3' ( uniform float) +0:? 'minimum' ( uniform float) +0:? 'BaseColor' ( smooth in 4-component vector of float) +0:? 'b' ( uniform bool) + + +Linked fragment stage: + + +Shader version: 110 +0:? Sequence +0:19 Function Definition: main( ( global void) +0:19 Function Parameters: +0:21 Sequence +0:21 Sequence +0:21 move second child to first child ( temp 4-component vector of float) +0:21 'color' ( temp 4-component vector of float) +0:21 'BaseColor' ( smooth in 4-component vector of float) +0:24 move second child to first child ( temp 4-component vector of float) +0:24 'color2' ( temp 4-component vector of float) +0:24 'otherColor' ( uniform 4-component vector of float) +0:26 Test condition and select ( temp void) +0:26 Condition +0:26 Compare Greater Than ( temp bool) +0:26 'c' ( smooth in float) +0:26 'd' ( uniform float) +0:26 true case +0:27 add second child into first child ( temp 4-component vector of float) +0:27 'color' ( temp 4-component vector of float) +0:27 'bigColor' ( uniform 4-component vector of float) +0:26 false case +0:29 add second child into first child ( temp 4-component vector of float) +0:29 'color' ( temp 4-component vector of float) +0:29 'smallColor' ( uniform 4-component vector of float) +0:31 Test condition and select ( temp void) +0:31 Condition +0:31 Compare Less Than ( temp bool) +0:31 direct index ( temp float) +0:31 'color' ( temp 4-component vector of float) +0:31 Constant: +0:31 2 (const int) +0:31 'minimum' ( uniform float) +0:31 true case +0:32 Branch: Return +0:34 Post-Increment ( temp float) +0:34 direct index ( temp float) +0:34 'color' ( temp 4-component vector of float) +0:34 Constant: +0:34 2 (const int) +0:36 Test condition and select ( temp void) +0:36 Condition +0:36 Compare Greater Than ( temp bool) +0:36 direct index ( temp float) +0:36 'color' ( temp 4-component vector of float) +0:36 Constant: +0:36 2 (const int) +0:36 'threshhold' ( uniform float) +0:36 true case +0:37 Branch: Kill +0:39 Post-Increment ( temp 4-component vector of float) +0:39 'color' ( temp 4-component vector of float) +0:42 Test condition and select ( temp void) +0:42 Condition +0:42 Compare Greater Than ( temp bool) +0:42 direct index ( temp float) +0:42 'color' ( temp 4-component vector of float) +0:42 Constant: +0:42 3 (const int) +0:42 'threshhold2' ( uniform float) +0:42 true case +0:43 Sequence +0:43 Test condition and select ( temp void) +0:43 Condition +0:43 Compare Greater Than ( temp bool) +0:43 direct index ( temp float) +0:43 'color' ( temp 4-component vector of float) +0:43 Constant: +0:43 2 (const int) +0:43 'threshhold2' ( uniform float) +0:43 true case +0:44 Branch: Return +0:43 false case +0:45 Test condition and select ( temp void) +0:45 Condition +0:45 'b' ( uniform bool) +0:45 true case +0:46 Post-Increment ( temp float) +0:46 direct index ( temp float) +0:46 'color' ( temp 4-component vector of float) +0:46 Constant: +0:46 2 (const int) +0:45 false case +0:48 Sequence +0:48 Test condition and select ( temp void) +0:48 Condition +0:48 Compare Less Than ( temp bool) +0:48 direct index ( temp float) +0:48 'color' ( temp 4-component vector of float) +0:48 Constant: +0:48 0 (const int) +0:48 'minimum' ( uniform float) +0:48 true case +0:49 Sequence +0:49 Branch: Kill +0:48 false case +0:51 Sequence +0:51 Post-Increment ( temp 4-component vector of float) +0:51 'color' ( temp 4-component vector of float) +0:42 false case +0:55 Sequence +0:55 Test condition and select ( temp void) +0:55 Condition +0:55 'b' ( uniform bool) +0:55 true case +0:56 Branch: Kill +0:55 false case +0:58 Branch: Return +0:101 move second child to first child ( temp 4-component vector of float) +0:101 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:101 component-wise multiply ( temp 4-component vector of float) +0:101 'color' ( temp 4-component vector of float) +0:101 'color2' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'd' ( uniform float) +0:? 'bigColor' ( uniform 4-component vector of float) +0:? 'smallColor' ( uniform 4-component vector of float) +0:? 'otherColor' ( uniform 4-component vector of float) +0:? 'c' ( smooth in float) +0:? 'threshhold' ( uniform float) +0:? 'threshhold2' ( uniform float) +0:? 'threshhold3' ( uniform float) +0:? 'minimum' ( uniform float) +0:? 'BaseColor' ( smooth in 4-component vector of float) +0:? 'b' ( uniform bool) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/empty.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/empty.frag.out new file mode 100644 index 0000000..be186bb --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/empty.frag.out @@ -0,0 +1,17 @@ +empty.frag +Shader version: 100 +0:? Sequence +0:? Linker Objects + +empty2.frag +Shader version: 100 +0:? Sequence +0:? Linker Objects + +empty3.frag +Shader version: 110 +0:? Sequence +0:? Linker Objects + +ERROR: Cannot mix ES profile with non-ES profile shaders + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/errors.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/errors.frag.out new file mode 100644 index 0000000..7271107 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/errors.frag.out @@ -0,0 +1,32 @@ +errors.frag +ERROR: 0:1: 'main' : function cannot take any parameter(s) +ERROR: 0:1: 'int' : entry point cannot return a value +ERROR: 2 compilation errors. No code generated. + + +Shader version: 100 +ERROR: node is still EOpNull! +0:1 Function Definition: main(i1; ( global mediump int) +0:1 Function Parameters: +0:1 'foo' ( in mediump int) +0:3 Sequence +0:3 Branch: Return with expression +0:3 Constant: +0:3 1 (const int) +0:? Linker Objects + + +Linked fragment stage: + + +Shader version: 100 +ERROR: node is still EOpNull! +0:1 Function Definition: main(i1; ( global mediump int) +0:1 Function Parameters: +0:1 'foo' ( in mediump int) +0:3 Sequence +0:3 Branch: Return with expression +0:3 Constant: +0:3 1 (const int) +0:? Linker Objects + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/es-link1.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/es-link1.frag.out new file mode 100644 index 0000000..8e662c3 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/es-link1.frag.out @@ -0,0 +1,27 @@ +es-link1.frag +Shader version: 100 +0:? Sequence +0:5 Function Definition: main( ( global void) +0:5 Function Parameters: +0:7 Sequence +0:7 move second child to first child ( temp mediump 4-component vector of float) +0:7 'gl_FragColor' ( fragColor mediump 4-component vector of float FragColor) +0:7 Function Call: calculateColor( ( global mediump 4-component vector of float) +0:? Linker Objects + +es-link2.frag +Shader version: 100 +0:? Sequence +0:5 Function Definition: calculateColor( ( global mediump 4-component vector of float) +0:5 Function Parameters: +0:7 Sequence +0:7 Branch: Return with expression +0:7 vector-scale ( temp mediump 4-component vector of float) +0:7 'varyingColor' ( smooth in mediump 4-component vector of float) +0:7 Constant: +0:7 0.500000 +0:? Linker Objects +0:? 'varyingColor' ( smooth in mediump 4-component vector of float) + +ERROR: Cannot attach multiple ES shaders of the same type to a single program + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/flowControl.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/flowControl.frag.out new file mode 100644 index 0000000..4f5fc8b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/flowControl.frag.out @@ -0,0 +1,81 @@ +flowControl.frag +Shader version: 120 +0:? Sequence +0:10 Function Definition: main( ( global void) +0:10 Function Parameters: +0:12 Sequence +0:12 Sequence +0:12 move second child to first child ( temp 4-component vector of float) +0:12 'color' ( temp 4-component vector of float) +0:12 'BaseColor' ( smooth in 4-component vector of float) +0:15 move second child to first child ( temp 4-component vector of float) +0:15 'color2' ( temp 4-component vector of float) +0:15 'otherColor' ( uniform 4-component vector of float) +0:17 Test condition and select ( temp void) +0:17 Condition +0:17 Compare Greater Than ( temp bool) +0:17 'c' ( smooth in float) +0:17 'd' ( uniform float) +0:17 true case +0:18 add second child into first child ( temp 4-component vector of float) +0:18 'color' ( temp 4-component vector of float) +0:18 'bigColor' ( uniform 4-component vector of float) +0:17 false case +0:20 add second child into first child ( temp 4-component vector of float) +0:20 'color' ( temp 4-component vector of float) +0:20 'smallColor' ( uniform 4-component vector of float) +0:22 move second child to first child ( temp 4-component vector of float) +0:22 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:22 component-wise multiply ( temp 4-component vector of float) +0:22 'color' ( temp 4-component vector of float) +0:22 'color2' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'd' ( uniform float) +0:? 'bigColor' ( uniform 4-component vector of float) +0:? 'smallColor' ( uniform 4-component vector of float) +0:? 'otherColor' ( uniform 4-component vector of float) +0:? 'c' ( smooth in float) +0:? 'BaseColor' ( smooth in 4-component vector of float) + + +Linked fragment stage: + + +Shader version: 120 +0:? Sequence +0:10 Function Definition: main( ( global void) +0:10 Function Parameters: +0:12 Sequence +0:12 Sequence +0:12 move second child to first child ( temp 4-component vector of float) +0:12 'color' ( temp 4-component vector of float) +0:12 'BaseColor' ( smooth in 4-component vector of float) +0:15 move second child to first child ( temp 4-component vector of float) +0:15 'color2' ( temp 4-component vector of float) +0:15 'otherColor' ( uniform 4-component vector of float) +0:17 Test condition and select ( temp void) +0:17 Condition +0:17 Compare Greater Than ( temp bool) +0:17 'c' ( smooth in float) +0:17 'd' ( uniform float) +0:17 true case +0:18 add second child into first child ( temp 4-component vector of float) +0:18 'color' ( temp 4-component vector of float) +0:18 'bigColor' ( uniform 4-component vector of float) +0:17 false case +0:20 add second child into first child ( temp 4-component vector of float) +0:20 'color' ( temp 4-component vector of float) +0:20 'smallColor' ( uniform 4-component vector of float) +0:22 move second child to first child ( temp 4-component vector of float) +0:22 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:22 component-wise multiply ( temp 4-component vector of float) +0:22 'color' ( temp 4-component vector of float) +0:22 'color2' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'd' ( uniform float) +0:? 'bigColor' ( uniform 4-component vector of float) +0:? 'smallColor' ( uniform 4-component vector of float) +0:? 'otherColor' ( uniform 4-component vector of float) +0:? 'c' ( smooth in float) +0:? 'BaseColor' ( smooth in 4-component vector of float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/forLoop.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/forLoop.frag.out new file mode 100644 index 0000000..e6a1517 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/forLoop.frag.out @@ -0,0 +1,361 @@ +forLoop.frag +Shader version: 130 +0:? Sequence +0:10 Function Definition: main( ( global void) +0:10 Function Parameters: +0:12 Sequence +0:12 Sequence +0:12 move second child to first child ( temp 4-component vector of float) +0:12 'color' ( temp 4-component vector of float) +0:12 'BaseColor' ( smooth in 4-component vector of float) +0:14 Sequence +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 Loop with condition tested first +0:14 Loop Condition +0:14 Compare Less Than ( temp bool) +0:14 'i' ( temp int) +0:14 'Count' ( uniform int) +0:14 Loop Body +0:15 Sequence +0:15 add second child into first child ( temp 4-component vector of float) +0:15 'color' ( temp 4-component vector of float) +0:15 'bigColor' ( uniform 4-component vector of float) +0:14 Loop Terminal Expression +0:14 Pre-Increment ( temp int) +0:14 'i' ( temp int) +0:18 move second child to first child ( temp 4-component vector of float) +0:18 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:18 'color' ( temp 4-component vector of float) +0:20 Sequence +0:20 move second child to first child ( temp float) +0:20 'sum' ( temp float) +0:20 Constant: +0:20 0.000000 +0:21 Sequence +0:21 Sequence +0:21 move second child to first child ( temp int) +0:21 'i' ( temp int) +0:21 Constant: +0:21 0 (const int) +0:21 Loop with condition tested first +0:21 Loop Condition +0:21 Compare Less Than ( temp bool) +0:21 'i' ( temp int) +0:21 Constant: +0:21 4 (const int) +0:21 Loop Body +0:22 add second child into first child ( temp float) +0:22 'sum' ( temp float) +0:22 Convert uint to float ( temp float) +0:22 indirect index ( temp uint) +0:22 'v4' ( uniform 4-component vector of uint) +0:22 'i' ( temp int) +0:21 Loop Terminal Expression +0:21 Pre-Increment ( temp int) +0:21 'i' ( temp int) +0:26 Sequence +0:26 Sequence +0:26 move second child to first child ( temp int) +0:26 'i' ( temp int) +0:26 Constant: +0:26 0 (const int) +0:26 Loop with condition tested first +0:26 Loop Condition +0:26 Compare Less Than ( temp bool) +0:26 'i' ( temp int) +0:26 Constant: +0:26 4 (const int) +0:26 Loop Body +0:27 move second child to first child ( temp float) +0:27 indirect index ( temp float) +0:27 'tv4' ( temp 4-component vector of float) +0:27 'i' ( temp int) +0:27 Convert uint to float ( temp float) +0:27 component-wise multiply ( temp uint) +0:27 indirect index ( temp uint) +0:27 'v4' ( uniform 4-component vector of uint) +0:27 'i' ( temp int) +0:27 Constant: +0:27 4 (const uint) +0:26 Loop Terminal Expression +0:26 Pre-Increment ( temp int) +0:26 'i' ( temp int) +0:29 add second child into first child ( temp 4-component vector of float) +0:29 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:29 add ( temp 4-component vector of float) +0:29 Construct vec4 ( temp 4-component vector of float) +0:29 'sum' ( temp float) +0:29 'tv4' ( temp 4-component vector of float) +0:32 move second child to first child ( temp 3-component vector of float) +0:32 vector swizzle ( temp 3-component vector of float) +0:32 'r' ( temp 4-component vector of float) +0:32 Sequence +0:32 Constant: +0:32 0 (const int) +0:32 Constant: +0:32 1 (const int) +0:32 Constant: +0:32 2 (const int) +0:32 vector swizzle ( temp 3-component vector of float) +0:32 'BaseColor' ( smooth in 4-component vector of float) +0:32 Sequence +0:32 Constant: +0:32 0 (const int) +0:32 Constant: +0:32 1 (const int) +0:32 Constant: +0:32 2 (const int) +0:34 Sequence +0:34 Sequence +0:34 move second child to first child ( temp int) +0:34 'i' ( temp int) +0:34 Constant: +0:34 0 (const int) +0:34 Loop with condition tested first +0:34 Loop Condition +0:34 Compare Less Than ( temp bool) +0:34 'i' ( temp int) +0:34 'Count' ( uniform int) +0:34 Loop Body +0:35 move second child to first child ( temp float) +0:35 direct index ( temp float) +0:35 'r' ( temp 4-component vector of float) +0:35 Constant: +0:35 3 (const int) +0:35 'f' ( smooth in float) +0:34 Loop Terminal Expression +0:34 Pre-Increment ( temp int) +0:34 'i' ( temp int) +0:37 add second child into first child ( temp 3-component vector of float) +0:37 vector swizzle ( temp 3-component vector of float) +0:37 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:37 Sequence +0:37 Constant: +0:37 0 (const int) +0:37 Constant: +0:37 1 (const int) +0:37 Constant: +0:37 2 (const int) +0:37 vector swizzle ( temp 3-component vector of float) +0:37 'r' ( temp 4-component vector of float) +0:37 Sequence +0:37 Constant: +0:37 0 (const int) +0:37 Constant: +0:37 1 (const int) +0:37 Constant: +0:37 2 (const int) +0:39 Sequence +0:39 Sequence +0:39 move second child to first child ( temp int) +0:39 'i' ( temp int) +0:39 Constant: +0:39 0 (const int) +0:39 Loop with condition tested first +0:39 Loop Condition +0:39 Compare Less Than ( temp bool) +0:39 'i' ( temp int) +0:39 Constant: +0:39 16 (const int) +0:39 Loop Body +0:40 vector scale second child into first child ( temp 4-component vector of float) +0:40 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:40 'f' ( smooth in float) +0:39 Loop Terminal Expression +0:39 add second child into first child ( temp int) +0:39 'i' ( temp int) +0:39 Constant: +0:39 4 (const int) +0:? Linker Objects +0:? 'bigColor' ( uniform 4-component vector of float) +0:? 'BaseColor' ( smooth in 4-component vector of float) +0:? 'f' ( smooth in float) +0:? 'Count' ( uniform int) +0:? 'v4' ( uniform 4-component vector of uint) + + +Linked fragment stage: + + +Shader version: 130 +0:? Sequence +0:10 Function Definition: main( ( global void) +0:10 Function Parameters: +0:12 Sequence +0:12 Sequence +0:12 move second child to first child ( temp 4-component vector of float) +0:12 'color' ( temp 4-component vector of float) +0:12 'BaseColor' ( smooth in 4-component vector of float) +0:14 Sequence +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 Loop with condition tested first +0:14 Loop Condition +0:14 Compare Less Than ( temp bool) +0:14 'i' ( temp int) +0:14 'Count' ( uniform int) +0:14 Loop Body +0:15 Sequence +0:15 add second child into first child ( temp 4-component vector of float) +0:15 'color' ( temp 4-component vector of float) +0:15 'bigColor' ( uniform 4-component vector of float) +0:14 Loop Terminal Expression +0:14 Pre-Increment ( temp int) +0:14 'i' ( temp int) +0:18 move second child to first child ( temp 4-component vector of float) +0:18 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:18 'color' ( temp 4-component vector of float) +0:20 Sequence +0:20 move second child to first child ( temp float) +0:20 'sum' ( temp float) +0:20 Constant: +0:20 0.000000 +0:21 Sequence +0:21 Sequence +0:21 move second child to first child ( temp int) +0:21 'i' ( temp int) +0:21 Constant: +0:21 0 (const int) +0:21 Loop with condition tested first +0:21 Loop Condition +0:21 Compare Less Than ( temp bool) +0:21 'i' ( temp int) +0:21 Constant: +0:21 4 (const int) +0:21 Loop Body +0:22 add second child into first child ( temp float) +0:22 'sum' ( temp float) +0:22 Convert uint to float ( temp float) +0:22 indirect index ( temp uint) +0:22 'v4' ( uniform 4-component vector of uint) +0:22 'i' ( temp int) +0:21 Loop Terminal Expression +0:21 Pre-Increment ( temp int) +0:21 'i' ( temp int) +0:26 Sequence +0:26 Sequence +0:26 move second child to first child ( temp int) +0:26 'i' ( temp int) +0:26 Constant: +0:26 0 (const int) +0:26 Loop with condition tested first +0:26 Loop Condition +0:26 Compare Less Than ( temp bool) +0:26 'i' ( temp int) +0:26 Constant: +0:26 4 (const int) +0:26 Loop Body +0:27 move second child to first child ( temp float) +0:27 indirect index ( temp float) +0:27 'tv4' ( temp 4-component vector of float) +0:27 'i' ( temp int) +0:27 Convert uint to float ( temp float) +0:27 component-wise multiply ( temp uint) +0:27 indirect index ( temp uint) +0:27 'v4' ( uniform 4-component vector of uint) +0:27 'i' ( temp int) +0:27 Constant: +0:27 4 (const uint) +0:26 Loop Terminal Expression +0:26 Pre-Increment ( temp int) +0:26 'i' ( temp int) +0:29 add second child into first child ( temp 4-component vector of float) +0:29 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:29 add ( temp 4-component vector of float) +0:29 Construct vec4 ( temp 4-component vector of float) +0:29 'sum' ( temp float) +0:29 'tv4' ( temp 4-component vector of float) +0:32 move second child to first child ( temp 3-component vector of float) +0:32 vector swizzle ( temp 3-component vector of float) +0:32 'r' ( temp 4-component vector of float) +0:32 Sequence +0:32 Constant: +0:32 0 (const int) +0:32 Constant: +0:32 1 (const int) +0:32 Constant: +0:32 2 (const int) +0:32 vector swizzle ( temp 3-component vector of float) +0:32 'BaseColor' ( smooth in 4-component vector of float) +0:32 Sequence +0:32 Constant: +0:32 0 (const int) +0:32 Constant: +0:32 1 (const int) +0:32 Constant: +0:32 2 (const int) +0:34 Sequence +0:34 Sequence +0:34 move second child to first child ( temp int) +0:34 'i' ( temp int) +0:34 Constant: +0:34 0 (const int) +0:34 Loop with condition tested first +0:34 Loop Condition +0:34 Compare Less Than ( temp bool) +0:34 'i' ( temp int) +0:34 'Count' ( uniform int) +0:34 Loop Body +0:35 move second child to first child ( temp float) +0:35 direct index ( temp float) +0:35 'r' ( temp 4-component vector of float) +0:35 Constant: +0:35 3 (const int) +0:35 'f' ( smooth in float) +0:34 Loop Terminal Expression +0:34 Pre-Increment ( temp int) +0:34 'i' ( temp int) +0:37 add second child into first child ( temp 3-component vector of float) +0:37 vector swizzle ( temp 3-component vector of float) +0:37 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:37 Sequence +0:37 Constant: +0:37 0 (const int) +0:37 Constant: +0:37 1 (const int) +0:37 Constant: +0:37 2 (const int) +0:37 vector swizzle ( temp 3-component vector of float) +0:37 'r' ( temp 4-component vector of float) +0:37 Sequence +0:37 Constant: +0:37 0 (const int) +0:37 Constant: +0:37 1 (const int) +0:37 Constant: +0:37 2 (const int) +0:39 Sequence +0:39 Sequence +0:39 move second child to first child ( temp int) +0:39 'i' ( temp int) +0:39 Constant: +0:39 0 (const int) +0:39 Loop with condition tested first +0:39 Loop Condition +0:39 Compare Less Than ( temp bool) +0:39 'i' ( temp int) +0:39 Constant: +0:39 16 (const int) +0:39 Loop Body +0:40 vector scale second child into first child ( temp 4-component vector of float) +0:40 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:40 'f' ( smooth in float) +0:39 Loop Terminal Expression +0:39 add second child into first child ( temp int) +0:39 'i' ( temp int) +0:39 Constant: +0:39 4 (const int) +0:? Linker Objects +0:? 'bigColor' ( uniform 4-component vector of float) +0:? 'BaseColor' ( smooth in 4-component vector of float) +0:? 'f' ( smooth in float) +0:? 'Count' ( uniform int) +0:? 'v4' ( uniform 4-component vector of uint) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/forwardRef.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/forwardRef.frag.out new file mode 100644 index 0000000..22e77c5 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/forwardRef.frag.out @@ -0,0 +1,125 @@ +forwardRef.frag +Shader version: 110 +0:? Sequence +0:11 Function Definition: main( ( global void) +0:11 Function Parameters: +0:13 Sequence +0:13 Sequence +0:13 move second child to first child ( temp 4-component vector of float) +0:13 'color' ( temp 4-component vector of float) +0:13 Construct vec4 ( temp 4-component vector of float) +0:13 Function Call: foo(vf4; ( global float) +0:13 'BaseColor' ( smooth in 4-component vector of float) +0:15 Function Call: bar( ( global void) +0:16 Sequence +0:16 move second child to first child ( temp float) +0:16 'f' ( temp float) +0:16 Function Call: unreachableReturn( ( global float) +0:18 move second child to first child ( temp 4-component vector of float) +0:18 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:18 vector-scale ( temp 4-component vector of float) +0:18 'color' ( temp 4-component vector of float) +0:18 'f' ( temp float) +0:21 Function Definition: bar( ( global void) +0:21 Function Parameters: +0:25 Function Definition: unreachableReturn( ( global float) +0:25 Function Parameters: +0:27 Sequence +0:27 Function Call: bar( ( global void) +0:28 Test condition and select ( temp void) +0:28 Condition +0:28 Compare Less Than ( temp bool) +0:28 'd' ( uniform float) +0:28 Constant: +0:28 4.200000 +0:28 true case +0:29 Branch: Return with expression +0:29 Constant: +0:29 1.200000 +0:28 false case +0:31 Branch: Return with expression +0:31 Constant: +0:31 4.500000 +0:34 Function Definition: foo(vf4; ( global float) +0:34 Function Parameters: +0:34 'bar' ( in 4-component vector of float) +0:36 Sequence +0:36 Branch: Return with expression +0:36 add ( temp float) +0:36 direct index ( temp float) +0:36 'bar' ( in 4-component vector of float) +0:36 Constant: +0:36 0 (const int) +0:36 direct index ( temp float) +0:36 'bar' ( in 4-component vector of float) +0:36 Constant: +0:36 1 (const int) +0:? Linker Objects +0:? 'bigColor' ( uniform 4-component vector of float) +0:? 'BaseColor' ( smooth in 4-component vector of float) +0:? 'd' ( uniform float) + + +Linked fragment stage: + + +Shader version: 110 +0:? Sequence +0:11 Function Definition: main( ( global void) +0:11 Function Parameters: +0:13 Sequence +0:13 Sequence +0:13 move second child to first child ( temp 4-component vector of float) +0:13 'color' ( temp 4-component vector of float) +0:13 Construct vec4 ( temp 4-component vector of float) +0:13 Function Call: foo(vf4; ( global float) +0:13 'BaseColor' ( smooth in 4-component vector of float) +0:15 Function Call: bar( ( global void) +0:16 Sequence +0:16 move second child to first child ( temp float) +0:16 'f' ( temp float) +0:16 Function Call: unreachableReturn( ( global float) +0:18 move second child to first child ( temp 4-component vector of float) +0:18 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:18 vector-scale ( temp 4-component vector of float) +0:18 'color' ( temp 4-component vector of float) +0:18 'f' ( temp float) +0:21 Function Definition: bar( ( global void) +0:21 Function Parameters: +0:25 Function Definition: unreachableReturn( ( global float) +0:25 Function Parameters: +0:27 Sequence +0:27 Function Call: bar( ( global void) +0:28 Test condition and select ( temp void) +0:28 Condition +0:28 Compare Less Than ( temp bool) +0:28 'd' ( uniform float) +0:28 Constant: +0:28 4.200000 +0:28 true case +0:29 Branch: Return with expression +0:29 Constant: +0:29 1.200000 +0:28 false case +0:31 Branch: Return with expression +0:31 Constant: +0:31 4.500000 +0:34 Function Definition: foo(vf4; ( global float) +0:34 Function Parameters: +0:34 'bar' ( in 4-component vector of float) +0:36 Sequence +0:36 Branch: Return with expression +0:36 add ( temp float) +0:36 direct index ( temp float) +0:36 'bar' ( in 4-component vector of float) +0:36 Constant: +0:36 0 (const int) +0:36 direct index ( temp float) +0:36 'bar' ( in 4-component vector of float) +0:36 Constant: +0:36 1 (const int) +0:? Linker Objects +0:? 'bigColor' ( uniform 4-component vector of float) +0:? 'BaseColor' ( smooth in 4-component vector of float) +0:? 'd' ( uniform float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/functionCall.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/functionCall.frag.out new file mode 100644 index 0000000..902208f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/functionCall.frag.out @@ -0,0 +1,183 @@ +functionCall.frag +WARNING: 0:4: varying deprecated in version 130; may be removed in future release + +Shader version: 130 +0:? Sequence +0:7 Sequence +0:7 move second child to first child ( temp float) +0:7 'h' ( global float) +0:7 Constant: +0:7 0.000000 +0:9 Function Definition: foo(vf4; ( global float) +0:9 Function Parameters: +0:9 'bar' ( in 4-component vector of float) +0:11 Sequence +0:11 Branch: Return with expression +0:11 add ( temp float) +0:11 direct index ( temp float) +0:11 'bar' ( in 4-component vector of float) +0:11 Constant: +0:11 0 (const int) +0:11 direct index ( temp float) +0:11 'bar' ( in 4-component vector of float) +0:11 Constant: +0:11 1 (const int) +0:14 Function Definition: bar( ( global void) +0:14 Function Parameters: +0:18 Function Definition: unreachableReturn( ( global float) +0:18 Function Parameters: +0:20 Sequence +0:20 Test condition and select ( temp void) +0:20 Condition +0:20 Compare Less Than ( temp bool) +0:20 'd' ( uniform float) +0:20 Constant: +0:20 4.200000 +0:20 true case +0:21 Branch: Return with expression +0:21 Constant: +0:21 1.200000 +0:20 false case +0:23 Branch: Return with expression +0:23 Constant: +0:23 4.500000 +0:27 Function Definition: missingReturn( ( global float) +0:27 Function Parameters: +0:29 Sequence +0:29 Test condition and select ( temp void) +0:29 Condition +0:29 Compare Less Than ( temp bool) +0:29 'd' ( uniform float) +0:29 Constant: +0:29 4.500000 +0:29 true case +0:30 Sequence +0:30 move second child to first child ( temp float) +0:30 'h' ( global float) +0:30 'd' ( uniform float) +0:31 Branch: Return with expression +0:31 Constant: +0:31 3.900000 +0:35 Function Definition: main( ( global void) +0:35 Function Parameters: +0:37 Sequence +0:37 Sequence +0:37 move second child to first child ( temp 4-component vector of float) +0:37 'color' ( temp 4-component vector of float) +0:37 Construct vec4 ( temp 4-component vector of float) +0:37 Function Call: foo(vf4; ( global float) +0:37 'BaseColor' ( smooth in 4-component vector of float) +0:39 Function Call: bar( ( global void) +0:40 Sequence +0:40 move second child to first child ( temp float) +0:40 'f' ( temp float) +0:40 Function Call: unreachableReturn( ( global float) +0:41 Sequence +0:41 move second child to first child ( temp float) +0:41 'g' ( temp float) +0:41 Function Call: missingReturn( ( global float) +0:43 move second child to first child ( temp 4-component vector of float) +0:43 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:43 vector-scale ( temp 4-component vector of float) +0:43 vector-scale ( temp 4-component vector of float) +0:43 'color' ( temp 4-component vector of float) +0:43 'f' ( temp float) +0:43 'h' ( global float) +0:? Linker Objects +0:? 'bigColor' ( uniform 4-component vector of float) +0:? 'BaseColor' ( smooth in 4-component vector of float) +0:? 'd' ( uniform float) +0:? 'h' ( global float) + + +Linked fragment stage: + + +Shader version: 130 +0:? Sequence +0:7 Sequence +0:7 move second child to first child ( temp float) +0:7 'h' ( global float) +0:7 Constant: +0:7 0.000000 +0:9 Function Definition: foo(vf4; ( global float) +0:9 Function Parameters: +0:9 'bar' ( in 4-component vector of float) +0:11 Sequence +0:11 Branch: Return with expression +0:11 add ( temp float) +0:11 direct index ( temp float) +0:11 'bar' ( in 4-component vector of float) +0:11 Constant: +0:11 0 (const int) +0:11 direct index ( temp float) +0:11 'bar' ( in 4-component vector of float) +0:11 Constant: +0:11 1 (const int) +0:14 Function Definition: bar( ( global void) +0:14 Function Parameters: +0:18 Function Definition: unreachableReturn( ( global float) +0:18 Function Parameters: +0:20 Sequence +0:20 Test condition and select ( temp void) +0:20 Condition +0:20 Compare Less Than ( temp bool) +0:20 'd' ( uniform float) +0:20 Constant: +0:20 4.200000 +0:20 true case +0:21 Branch: Return with expression +0:21 Constant: +0:21 1.200000 +0:20 false case +0:23 Branch: Return with expression +0:23 Constant: +0:23 4.500000 +0:27 Function Definition: missingReturn( ( global float) +0:27 Function Parameters: +0:29 Sequence +0:29 Test condition and select ( temp void) +0:29 Condition +0:29 Compare Less Than ( temp bool) +0:29 'd' ( uniform float) +0:29 Constant: +0:29 4.500000 +0:29 true case +0:30 Sequence +0:30 move second child to first child ( temp float) +0:30 'h' ( global float) +0:30 'd' ( uniform float) +0:31 Branch: Return with expression +0:31 Constant: +0:31 3.900000 +0:35 Function Definition: main( ( global void) +0:35 Function Parameters: +0:37 Sequence +0:37 Sequence +0:37 move second child to first child ( temp 4-component vector of float) +0:37 'color' ( temp 4-component vector of float) +0:37 Construct vec4 ( temp 4-component vector of float) +0:37 Function Call: foo(vf4; ( global float) +0:37 'BaseColor' ( smooth in 4-component vector of float) +0:39 Function Call: bar( ( global void) +0:40 Sequence +0:40 move second child to first child ( temp float) +0:40 'f' ( temp float) +0:40 Function Call: unreachableReturn( ( global float) +0:41 Sequence +0:41 move second child to first child ( temp float) +0:41 'g' ( temp float) +0:41 Function Call: missingReturn( ( global float) +0:43 move second child to first child ( temp 4-component vector of float) +0:43 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:43 vector-scale ( temp 4-component vector of float) +0:43 vector-scale ( temp 4-component vector of float) +0:43 'color' ( temp 4-component vector of float) +0:43 'f' ( temp float) +0:43 'h' ( global float) +0:? Linker Objects +0:? 'bigColor' ( uniform 4-component vector of float) +0:? 'BaseColor' ( smooth in 4-component vector of float) +0:? 'd' ( uniform float) +0:? 'h' ( global float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/functionSemantics.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/functionSemantics.frag.out new file mode 100644 index 0000000..6c5ebdc --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/functionSemantics.frag.out @@ -0,0 +1,402 @@ +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. + + +Shader version: 400 +ERROR: node is still EOpNull! +0:5 Function Definition: foo(i1;i1;i1;i1;i1;i1; ( global int) +0:5 Function Parameters: +0:5 'a' ( in int) +0:5 'b' ( const (read only) int) +0:5 'c' ( in int) +0:5 'd' ( const (read only) int) +0:5 'e' ( out int) +0:5 'f' ( inout int) +0:7 Sequence +0:7 Sequence +0:7 move second child to first child ( temp int) +0:7 'sum' ( temp int) +0:7 add ( temp int) +0:7 add ( temp int) +0:7 add ( temp int) +0:7 add ( temp int) +0:7 'a' ( in int) +0:7 'b' ( const (read only) int) +0:7 'c' ( in int) +0:7 'd' ( const (read only) int) +0:7 'f' ( inout int) +0:10 multiply second child into first child ( temp int) +0:10 'a' ( in int) +0:10 Constant: +0:10 64 (const int) +0:12 multiply second child into first child ( temp int) +0:12 'c' ( in int) +0:12 Constant: +0:12 64 (const int) +0:14 move second child to first child ( temp int) +0:14 'e' ( out int) +0:14 Constant: +0:14 1024 (const int) +0:15 multiply second child into first child ( temp int) +0:15 'f' ( inout int) +0:15 Constant: +0:15 64 (const int) +0:17 add second child into first child ( temp int) +0:17 'sum' ( temp int) +0:17 add ( temp int) +0:17 add ( temp int) +0:17 add ( temp int) +0:17 add ( temp int) +0:17 add ( temp int) +0:17 'a' ( in int) +0:17 component-wise multiply ( temp int) +0:17 Constant: +0:17 64 (const int) +0:17 'b' ( const (read only) int) +0:17 'c' ( in int) +0:17 component-wise multiply ( temp int) +0:17 Constant: +0:17 64 (const int) +0:17 'd' ( const (read only) int) +0:17 'e' ( out int) +0:17 'f' ( inout int) +0:20 Branch: Return with expression +0:20 'sum' ( temp int) +0:23 Function Definition: foo2(f1;vf3;i1; ( global int) +0:23 Function Parameters: +0:23 'a' ( in float) +0:23 'b' ( in 3-component vector of float) +0:23 'r' ( out int) +0:25 Sequence +0:25 move second child to first child ( temp int) +0:25 'r' ( out int) +0:25 Convert float to int ( temp int) +0:25 component-wise multiply ( temp float) +0:25 Constant: +0:25 3.000000 +0:25 'a' ( in float) +0:26 Branch: Return with expression +0:26 Convert float to int ( temp int) +0:26 component-wise multiply ( temp float) +0:26 Constant: +0:26 5.000000 +0:26 direct index ( temp float) +0:26 'b' ( in 3-component vector of float) +0:26 Constant: +0:26 1 (const int) +0:29 Function Definition: foo3( ( global int) +0:29 Function Parameters: +0:31 Sequence +0:31 Test condition and select ( temp void) +0:31 Condition +0:31 Compare Greater Than ( temp bool) +0:31 'u' ( uniform float) +0:31 Constant: +0:31 3.200000 +0:31 true case +0:32 Sequence +0:32 Branch: Kill +0:33 Branch: Return with expression +0:33 Constant: +0:33 1000000 (const int) +0:36 Branch: Return with expression +0:36 Constant: +0:36 2000000 (const int) +0:39 Function Definition: main( ( global void) +0:39 Function Parameters: +0:? Sequence +0:42 Sequence +0:42 move second child to first child ( temp int) +0:42 't' ( temp int) +0:42 Constant: +0:42 2 (const int) +0:46 move second child to first child ( temp int) +0:46 direct index ( temp int) +0:46 t: direct index for structure ( temp 4-component vector of int) +0:46 'f' ( temp structure{ temp 4-component vector of int t}) +0:46 Constant: +0:46 0 (const int) +0:46 Constant: +0:46 1 (const int) +0:46 Constant: +0:46 32 (const int) +0:49 Sequence +0:49 move second child to first child ( temp int) +0:49 'color' ( temp int) +0:49 Function Call: foo(i1;i1;i1;i1;i1;i1; ( global int) +0:49 Constant: +0:49 1 (const int) +0:49 Constant: +0:49 2 (const int) +0:49 add ( temp int) +0:49 't' ( temp int) +0:49 't' ( temp int) +0:49 Constant: +0:49 8 (const int) +0:49 'e' ( temp int) +0:49 direct index ( temp int) +0:49 t: direct index for structure ( temp 4-component vector of int) +0:49 'f' ( temp structure{ temp 4-component vector of int t}) +0:49 Constant: +0:49 0 (const int) +0:49 Constant: +0:49 1 (const int) +0:51 add second child into first child ( temp int) +0:51 'color' ( temp int) +0:51 component-wise multiply ( temp int) +0:51 Constant: +0:51 128 (const int) +0:51 add ( temp int) +0:51 'e' ( temp int) +0:51 direct index ( temp int) +0:51 t: direct index for structure ( temp 4-component vector of int) +0:51 'f' ( temp structure{ temp 4-component vector of int t}) +0:51 Constant: +0:51 0 (const int) +0:51 Constant: +0:51 1 (const int) +0:57 move second child to first child ( temp float) +0:57 'ret' ( temp float) +0:57 Convert int to float ( temp float) +0:57 Comma ( global int) +0:57 move second child to first child ( temp int) +0:57 'tempReturn' ( global int) +0:57 Function Call: foo2(f1;vf3;i1; ( global int) +0:57 Constant: +0:57 4.000000 +0:57 Constant: +0:57 1.000000 +0:57 2.000000 +0:57 3.000000 +0:57 'tempArg' ( temp int) +0:57 move second child to first child ( temp float) +0:57 'arg' ( temp float) +0:57 Convert int to float ( temp float) +0:57 'tempArg' ( temp int) +0:57 'tempReturn' ( global int) +0:58 add second child into first child ( temp int) +0:58 'color' ( temp int) +0:58 Convert float to int ( temp int) +0:58 add ( temp float) +0:58 'ret' ( temp float) +0:58 'arg' ( temp float) +0:60 add second child into first child ( temp int) +0:60 'color' ( temp int) +0:60 Function Call: foo3( ( global int) +0:62 move second child to first child ( temp 4-component vector of float) +0:62 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:62 Construct vec4 ( temp 4-component vector of float) +0:62 Convert int to float ( temp float) +0:62 'color' ( temp int) +0:66 Function Definition: aggCall( ( global void) +0:66 Function Parameters: +0:? Sequence +0:69 Function Call: m(vf2; ( global 3-component vector of float) +0:69 Convert int to float ( temp 2-component vector of float) +0:69 Construct ivec2 ( temp 2-component vector of int) +0:69 Convert float to int ( temp int) +0:69 'F' ( temp float) +0:72 Function Definition: badConv( ( global 4-component vector of float) +0:72 Function Parameters: +0:74 Sequence +0:74 Branch: Return with expression +0:74 'u' ( uniform float) +0:? Linker Objects +0:? 'u' ( uniform float) + + +Linked fragment stage: + + +Shader version: 400 +ERROR: node is still EOpNull! +0:5 Function Definition: foo(i1;i1;i1;i1;i1;i1; ( global int) +0:5 Function Parameters: +0:5 'a' ( in int) +0:5 'b' ( const (read only) int) +0:5 'c' ( in int) +0:5 'd' ( const (read only) int) +0:5 'e' ( out int) +0:5 'f' ( inout int) +0:7 Sequence +0:7 Sequence +0:7 move second child to first child ( temp int) +0:7 'sum' ( temp int) +0:7 add ( temp int) +0:7 add ( temp int) +0:7 add ( temp int) +0:7 add ( temp int) +0:7 'a' ( in int) +0:7 'b' ( const (read only) int) +0:7 'c' ( in int) +0:7 'd' ( const (read only) int) +0:7 'f' ( inout int) +0:10 multiply second child into first child ( temp int) +0:10 'a' ( in int) +0:10 Constant: +0:10 64 (const int) +0:12 multiply second child into first child ( temp int) +0:12 'c' ( in int) +0:12 Constant: +0:12 64 (const int) +0:14 move second child to first child ( temp int) +0:14 'e' ( out int) +0:14 Constant: +0:14 1024 (const int) +0:15 multiply second child into first child ( temp int) +0:15 'f' ( inout int) +0:15 Constant: +0:15 64 (const int) +0:17 add second child into first child ( temp int) +0:17 'sum' ( temp int) +0:17 add ( temp int) +0:17 add ( temp int) +0:17 add ( temp int) +0:17 add ( temp int) +0:17 add ( temp int) +0:17 'a' ( in int) +0:17 component-wise multiply ( temp int) +0:17 Constant: +0:17 64 (const int) +0:17 'b' ( const (read only) int) +0:17 'c' ( in int) +0:17 component-wise multiply ( temp int) +0:17 Constant: +0:17 64 (const int) +0:17 'd' ( const (read only) int) +0:17 'e' ( out int) +0:17 'f' ( inout int) +0:20 Branch: Return with expression +0:20 'sum' ( temp int) +0:23 Function Definition: foo2(f1;vf3;i1; ( global int) +0:23 Function Parameters: +0:23 'a' ( in float) +0:23 'b' ( in 3-component vector of float) +0:23 'r' ( out int) +0:25 Sequence +0:25 move second child to first child ( temp int) +0:25 'r' ( out int) +0:25 Convert float to int ( temp int) +0:25 component-wise multiply ( temp float) +0:25 Constant: +0:25 3.000000 +0:25 'a' ( in float) +0:26 Branch: Return with expression +0:26 Convert float to int ( temp int) +0:26 component-wise multiply ( temp float) +0:26 Constant: +0:26 5.000000 +0:26 direct index ( temp float) +0:26 'b' ( in 3-component vector of float) +0:26 Constant: +0:26 1 (const int) +0:29 Function Definition: foo3( ( global int) +0:29 Function Parameters: +0:31 Sequence +0:31 Test condition and select ( temp void) +0:31 Condition +0:31 Compare Greater Than ( temp bool) +0:31 'u' ( uniform float) +0:31 Constant: +0:31 3.200000 +0:31 true case +0:32 Sequence +0:32 Branch: Kill +0:33 Branch: Return with expression +0:33 Constant: +0:33 1000000 (const int) +0:36 Branch: Return with expression +0:36 Constant: +0:36 2000000 (const int) +0:39 Function Definition: main( ( global void) +0:39 Function Parameters: +0:? Sequence +0:42 Sequence +0:42 move second child to first child ( temp int) +0:42 't' ( temp int) +0:42 Constant: +0:42 2 (const int) +0:46 move second child to first child ( temp int) +0:46 direct index ( temp int) +0:46 t: direct index for structure ( temp 4-component vector of int) +0:46 'f' ( temp structure{ temp 4-component vector of int t}) +0:46 Constant: +0:46 0 (const int) +0:46 Constant: +0:46 1 (const int) +0:46 Constant: +0:46 32 (const int) +0:49 Sequence +0:49 move second child to first child ( temp int) +0:49 'color' ( temp int) +0:49 Function Call: foo(i1;i1;i1;i1;i1;i1; ( global int) +0:49 Constant: +0:49 1 (const int) +0:49 Constant: +0:49 2 (const int) +0:49 add ( temp int) +0:49 't' ( temp int) +0:49 't' ( temp int) +0:49 Constant: +0:49 8 (const int) +0:49 'e' ( temp int) +0:49 direct index ( temp int) +0:49 t: direct index for structure ( temp 4-component vector of int) +0:49 'f' ( temp structure{ temp 4-component vector of int t}) +0:49 Constant: +0:49 0 (const int) +0:49 Constant: +0:49 1 (const int) +0:51 add second child into first child ( temp int) +0:51 'color' ( temp int) +0:51 component-wise multiply ( temp int) +0:51 Constant: +0:51 128 (const int) +0:51 add ( temp int) +0:51 'e' ( temp int) +0:51 direct index ( temp int) +0:51 t: direct index for structure ( temp 4-component vector of int) +0:51 'f' ( temp structure{ temp 4-component vector of int t}) +0:51 Constant: +0:51 0 (const int) +0:51 Constant: +0:51 1 (const int) +0:57 move second child to first child ( temp float) +0:57 'ret' ( temp float) +0:57 Convert int to float ( temp float) +0:57 Comma ( global int) +0:57 move second child to first child ( temp int) +0:57 'tempReturn' ( global int) +0:57 Function Call: foo2(f1;vf3;i1; ( global int) +0:57 Constant: +0:57 4.000000 +0:57 Constant: +0:57 1.000000 +0:57 2.000000 +0:57 3.000000 +0:57 'tempArg' ( temp int) +0:57 move second child to first child ( temp float) +0:57 'arg' ( temp float) +0:57 Convert int to float ( temp float) +0:57 'tempArg' ( temp int) +0:57 'tempReturn' ( global int) +0:58 add second child into first child ( temp int) +0:58 'color' ( temp int) +0:58 Convert float to int ( temp int) +0:58 add ( temp float) +0:58 'ret' ( temp float) +0:58 'arg' ( temp float) +0:60 add second child into first child ( temp int) +0:60 'color' ( temp int) +0:60 Function Call: foo3( ( global int) +0:62 move second child to first child ( temp 4-component vector of float) +0:62 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:62 Construct vec4 ( temp 4-component vector of float) +0:62 Convert int to float ( temp float) +0:62 'color' ( temp int) +0:? Linker Objects +0:? 'u' ( uniform float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glspv.esversion.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glspv.esversion.vert.out new file mode 100755 index 0000000..8e4b3b8 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glspv.esversion.vert.out @@ -0,0 +1,7 @@ +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. + + +SPIR-V is not generated for failed compile or link diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glspv.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glspv.frag.out new file mode 100755 index 0000000..daa1dc1 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glspv.frag.out @@ -0,0 +1,9 @@ +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. + + +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 new file mode 100755 index 0000000..3e8e8c4 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glspv.version.frag.out @@ -0,0 +1,20 @@ +glspv.version.frag +ERROR: #version: compilation for SPIR-V does not support the compatibility profile + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 6 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" + ExecutionMode 4 OriginLowerLeft + Source GLSL 330 + 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/glspv.version.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glspv.version.vert.out new file mode 100755 index 0000000..9683b3b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glspv.version.vert.out @@ -0,0 +1,6 @@ +glspv.version.vert +ERROR: #version: Desktop shaders for OpenGL SPIR-V require version 330 or higher +ERROR: 1 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.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glspv.vert.out new file mode 100755 index 0000000..5f6d9bb --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glspv.vert.out @@ -0,0 +1,14 @@ +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 +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: 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/hlsl.amend.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.amend.frag.out new file mode 100755 index 0000000..a93643e --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.amend.frag.out @@ -0,0 +1,256 @@ +hlsl.amend.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:3 Sequence +0:3 move second child to first child ( temp 4-component vector of float) +0:3 'm' ( global 4-component vector of float) +0:3 vector-scale ( temp 4-component vector of float) +0:3 a: direct index for structure ( uniform 4-component vector of float) +0:3 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float a, uniform float b, uniform 3-component vector of float c, uniform int d, uniform int e}) +0:3 Constant: +0:3 0 (const uint) +0:3 b: direct index for structure ( uniform float) +0:3 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float a, uniform float b, uniform 3-component vector of float c, uniform int d, uniform int e}) +0:3 Constant: +0:3 1 (const uint) +0:5 Function Definition: @f1( ( temp void) +0:5 Function Parameters: +0:? Sequence +0:6 vector-scale ( temp 4-component vector of float) +0:6 a: direct index for structure ( uniform 4-component vector of float) +0:6 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float a, uniform float b, uniform 3-component vector of float c, uniform int d, uniform int e}) +0:6 Constant: +0:6 0 (const uint) +0:6 b: direct index for structure ( uniform float) +0:6 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float a, uniform float b, uniform 3-component vector of float c, uniform int d, uniform int e}) +0:6 Constant: +0:6 1 (const uint) +0:5 Function Definition: f1( ( temp void) +0:5 Function Parameters: +0:? Sequence +0:5 Function Call: @f1( ( temp void) +0:12 Function Definition: f2( ( temp void) +0:12 Function Parameters: +0:? Sequence +0:13 add ( temp float) +0:13 add ( temp float) +0:13 direct index ( temp float) +0:13 a: 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 a, uniform float b, uniform 3-component vector of float c, uniform int d, uniform int e}) +0:13 Constant: +0:13 0 (const uint) +0:13 Constant: +0:13 0 (const int) +0:13 b: direct index for structure ( uniform float) +0:13 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float a, uniform float b, uniform 3-component vector of float c, uniform int d, uniform int e}) +0:13 Constant: +0:13 1 (const uint) +0:13 direct index ( temp float) +0:13 c: direct index for structure ( uniform 3-component vector of float) +0:13 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float a, uniform float b, uniform 3-component vector of float c, uniform int d, uniform int e}) +0:13 Constant: +0:13 2 (const uint) +0:13 Constant: +0:13 0 (const int) +0:17 Function Definition: f3( ( temp void) +0:17 Function Parameters: +0:? Sequence +0:18 c: direct index for structure ( uniform 3-component vector of float) +0:18 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float a, uniform float b, uniform 3-component vector of float c, uniform int d, uniform int e}) +0:18 Constant: +0:18 2 (const uint) +0:24 Function Definition: f4( ( temp void) +0:24 Function Parameters: +0:? Sequence +0:25 vector-scale ( temp 4-component vector of float) +0:25 Convert int to float ( temp float) +0:25 d: direct index for structure ( uniform int) +0:25 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float a, uniform float b, uniform 3-component vector of float c, uniform int d, uniform int e}) +0:25 Constant: +0:25 3 (const uint) +0:25 a: direct index for structure ( uniform 4-component vector of float) +0:25 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float a, uniform float b, uniform 3-component vector of float c, uniform int d, uniform int e}) +0:25 Constant: +0:25 0 (const uint) +0:? Linker Objects +0:? 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float a, uniform float b, uniform 3-component vector of float c, uniform int d, uniform int e}) +0:? 'm' ( global 4-component vector of float) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:3 Sequence +0:3 move second child to first child ( temp 4-component vector of float) +0:3 'm' ( global 4-component vector of float) +0:3 vector-scale ( temp 4-component vector of float) +0:3 a: direct index for structure ( uniform 4-component vector of float) +0:3 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float a, uniform float b, uniform 3-component vector of float c, uniform int d, uniform int e}) +0:3 Constant: +0:3 0 (const uint) +0:3 b: direct index for structure ( uniform float) +0:3 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float a, uniform float b, uniform 3-component vector of float c, uniform int d, uniform int e}) +0:3 Constant: +0:3 1 (const uint) +0:5 Function Definition: @f1( ( temp void) +0:5 Function Parameters: +0:? Sequence +0:6 vector-scale ( temp 4-component vector of float) +0:6 a: direct index for structure ( uniform 4-component vector of float) +0:6 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float a, uniform float b, uniform 3-component vector of float c, uniform int d, uniform int e}) +0:6 Constant: +0:6 0 (const uint) +0:6 b: direct index for structure ( uniform float) +0:6 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float a, uniform float b, uniform 3-component vector of float c, uniform int d, uniform int e}) +0:6 Constant: +0:6 1 (const uint) +0:5 Function Definition: f1( ( temp void) +0:5 Function Parameters: +0:? Sequence +0:5 Function Call: @f1( ( temp void) +0:12 Function Definition: f2( ( temp void) +0:12 Function Parameters: +0:? Sequence +0:13 add ( temp float) +0:13 add ( temp float) +0:13 direct index ( temp float) +0:13 a: 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 a, uniform float b, uniform 3-component vector of float c, uniform int d, uniform int e}) +0:13 Constant: +0:13 0 (const uint) +0:13 Constant: +0:13 0 (const int) +0:13 b: direct index for structure ( uniform float) +0:13 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float a, uniform float b, uniform 3-component vector of float c, uniform int d, uniform int e}) +0:13 Constant: +0:13 1 (const uint) +0:13 direct index ( temp float) +0:13 c: direct index for structure ( uniform 3-component vector of float) +0:13 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float a, uniform float b, uniform 3-component vector of float c, uniform int d, uniform int e}) +0:13 Constant: +0:13 2 (const uint) +0:13 Constant: +0:13 0 (const int) +0:17 Function Definition: f3( ( temp void) +0:17 Function Parameters: +0:? Sequence +0:18 c: direct index for structure ( uniform 3-component vector of float) +0:18 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float a, uniform float b, uniform 3-component vector of float c, uniform int d, uniform int e}) +0:18 Constant: +0:18 2 (const uint) +0:24 Function Definition: f4( ( temp void) +0:24 Function Parameters: +0:? Sequence +0:25 vector-scale ( temp 4-component vector of float) +0:25 Convert int to float ( temp float) +0:25 d: direct index for structure ( uniform int) +0:25 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float a, uniform float b, uniform 3-component vector of float c, uniform int d, uniform int e}) +0:25 Constant: +0:25 3 (const uint) +0:25 a: direct index for structure ( uniform 4-component vector of float) +0:25 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float a, uniform float b, uniform 3-component vector of float c, uniform int d, uniform int e}) +0:25 Constant: +0:25 0 (const uint) +0:? Linker Objects +0:? 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float a, uniform float b, uniform 3-component vector of float c, uniform int d, uniform int e}) +0:? 'm' ( global 4-component vector of float) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 57 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "f1" + ExecutionMode 4 OriginUpperLeft + Name 4 "f1" + Name 6 "@f1(" + Name 8 "f2(" + Name 10 "f3(" + Name 12 "f4(" + Name 17 "m" + Name 20 "$Global" + MemberName 20($Global) 0 "a" + MemberName 20($Global) 1 "b" + MemberName 20($Global) 2 "c" + MemberName 20($Global) 3 "d" + MemberName 20($Global) 4 "e" + Name 22 "" + MemberDecorate 20($Global) 0 Offset 0 + MemberDecorate 20($Global) 1 Offset 16 + MemberDecorate 20($Global) 2 Offset 32 + MemberDecorate 20($Global) 3 Offset 44 + MemberDecorate 20($Global) 4 Offset 48 + Decorate 20($Global) Block + Decorate 22 DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 14: TypeFloat 32 + 15: TypeVector 14(float) 4 + 16: TypePointer Private 15(fvec4) + 17(m): 16(ptr) Variable Private + 18: TypeVector 14(float) 3 + 19: TypeInt 32 1 + 20($Global): TypeStruct 15(fvec4) 14(float) 18(fvec3) 19(int) 19(int) + 21: TypePointer Uniform 20($Global) + 22: 21(ptr) Variable Uniform + 23: 19(int) Constant 0 + 24: TypePointer Uniform 15(fvec4) + 27: 19(int) Constant 1 + 28: TypePointer Uniform 14(float) + 38: TypeInt 32 0 + 39: 38(int) Constant 0 + 45: 19(int) Constant 2 + 49: 19(int) Constant 3 + 50: TypePointer Uniform 19(int) + 4(f1): 2 Function None 3 + 5: Label + 25: 24(ptr) AccessChain 22 23 + 26: 15(fvec4) Load 25 + 29: 28(ptr) AccessChain 22 27 + 30: 14(float) Load 29 + 31: 15(fvec4) VectorTimesScalar 26 30 + Store 17(m) 31 + 37: 2 FunctionCall 6(@f1() + Return + FunctionEnd + 6(@f1(): 2 Function None 3 + 7: Label + 32: 24(ptr) AccessChain 22 23 + 33: 15(fvec4) Load 32 + 34: 28(ptr) AccessChain 22 27 + 35: 14(float) Load 34 + 36: 15(fvec4) VectorTimesScalar 33 35 + Return + FunctionEnd + 8(f2(): 2 Function None 3 + 9: Label + 40: 28(ptr) AccessChain 22 23 39 + 41: 14(float) Load 40 + 42: 28(ptr) AccessChain 22 27 + 43: 14(float) Load 42 + 44: 14(float) FAdd 41 43 + 46: 28(ptr) AccessChain 22 45 39 + 47: 14(float) Load 46 + 48: 14(float) FAdd 44 47 + Return + FunctionEnd + 10(f3(): 2 Function None 3 + 11: Label + Return + FunctionEnd + 12(f4(): 2 Function None 3 + 13: Label + 51: 50(ptr) AccessChain 22 49 + 52: 19(int) Load 51 + 53: 14(float) ConvertSToF 52 + 54: 24(ptr) AccessChain 22 23 + 55: 15(fvec4) Load 54 + 56: 15(fvec4) VectorTimesScalar 55 53 + Return + FunctionEnd 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 new file mode 100644 index 0000000..1beb71f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.array.flatten.frag.out @@ -0,0 +1,580 @@ +hlsl.array.flatten.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:17 Function Definition: TestFn1( ( temp 4-component vector of float) +0:17 Function Parameters: +0:? Sequence +0:18 Branch: Return with expression +0:18 texture ( temp 4-component vector of float) +0:18 Construct combined texture-sampler ( temp sampler1D) +0:? 'g_tex[1]' ( uniform texture1D) +0:? 'g_samp[1]' ( uniform sampler) +0:18 Constant: +0:18 0.200000 +0:22 Function Definition: TestFn2(t11[3];p1[3]; ( temp 4-component vector of float) +0:22 Function Parameters: +0:22 'l_tex' ( in 3-element array of texture1D) +0:22 'l_samp' ( in 3-element array of sampler) +0:? Sequence +0:23 Branch: Return with expression +0:23 texture ( temp 4-component vector of float) +0:23 Construct combined texture-sampler ( temp sampler1D) +0:23 direct index ( temp texture1D) +0:23 'l_tex' ( in 3-element array of texture1D) +0:23 Constant: +0:23 2 (const int) +0:23 direct index ( temp sampler) +0:23 'l_samp' ( in 3-element array of sampler) +0:23 Constant: +0:23 2 (const int) +0:23 Constant: +0:23 0.200000 +0:26 Sequence +0:26 move second child to first child ( temp 5-element array of int) +0:26 'not_flattened_a' ( global 5-element array of int) +0:26 Constant: +0:26 1 (const int) +0:26 2 (const int) +0:26 3 (const int) +0:26 4 (const int) +0:26 5 (const int) +0:31 Function Definition: @main(struct-PS_OUTPUT-vf41; ( temp void) +0:31 Function Parameters: +0:31 'ps_output' ( out structure{ temp 4-component vector of float color}) +0:? Sequence +0:33 Sequence +0:33 Sequence +0:33 move second child to first child ( temp sampler) +0:33 direct index ( temp sampler) +0:33 'local_sampler_array' ( temp 3-element array of sampler) +0:33 Constant: +0:33 0 (const int) +0:? 'g_samp[0]' ( uniform sampler) +0:33 move second child to first child ( temp sampler) +0:33 direct index ( temp sampler) +0:33 'local_sampler_array' ( temp 3-element array of sampler) +0:33 Constant: +0:33 1 (const int) +0:? 'g_samp[1]' ( uniform sampler) +0:33 move second child to first child ( temp sampler) +0:33 direct index ( temp sampler) +0:33 'local_sampler_array' ( temp 3-element array of sampler) +0:33 Constant: +0:33 2 (const int) +0:? 'g_samp[2]' ( uniform sampler) +0:34 Sequence +0:34 Sequence +0:34 move second child to first child ( temp texture1D) +0:34 direct index ( temp texture1D) +0:34 'local_texture_array' ( temp 3-element array of texture1D) +0:34 Constant: +0:34 0 (const int) +0:? 'g_tex[0]' ( uniform texture1D) +0:34 move second child to first child ( temp texture1D) +0:34 direct index ( temp texture1D) +0:34 'local_texture_array' ( temp 3-element array of texture1D) +0:34 Constant: +0:34 1 (const int) +0:? 'g_tex[1]' ( uniform texture1D) +0:34 move second child to first child ( temp texture1D) +0:34 direct index ( temp texture1D) +0:34 'local_texture_array' ( temp 3-element array of texture1D) +0:34 Constant: +0:34 2 (const int) +0:? 'g_tex[2]' ( uniform texture1D) +0:35 Sequence +0:35 move second child to first child ( temp 4-element array of float) +0:35 'local_float_array' ( temp 4-element array of float) +0:35 g_floats: direct index for structure ( uniform 4-element array of float) +0:35 '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:35 Constant: +0:35 2 (const uint) +0:37 move second child to first child ( temp 4-component vector of float) +0:37 color: direct index for structure ( temp 4-component vector of float) +0:37 'ps_output' ( out structure{ temp 4-component vector of float color}) +0:37 Constant: +0:37 0 (const int) +0:37 add ( temp 4-component vector of float) +0:37 Function Call: TestFn1( ( temp 4-component vector of float) +0:37 Function Call: TestFn2(t11[3];p1[3]; ( temp 4-component vector of float) +0:37 Comma ( temp 3-element array of texture1D) +0:37 Sequence +0:37 move second child to first child ( temp texture1D) +0:37 direct index ( temp texture1D) +0:37 'aggShadow' ( temp 3-element array of texture1D) +0:37 Constant: +0:37 0 (const int) +0:? 'g_tex[0]' ( uniform texture1D) +0:37 move second child to first child ( temp texture1D) +0:37 direct index ( temp texture1D) +0:37 'aggShadow' ( temp 3-element array of texture1D) +0:37 Constant: +0:37 1 (const int) +0:? 'g_tex[1]' ( uniform texture1D) +0:37 move second child to first child ( temp texture1D) +0:37 direct index ( temp texture1D) +0:37 'aggShadow' ( temp 3-element array of texture1D) +0:37 Constant: +0:37 2 (const int) +0:? 'g_tex[2]' ( uniform texture1D) +0:37 'aggShadow' ( temp 3-element array of texture1D) +0:37 Comma ( temp 3-element array of sampler) +0:37 Sequence +0:37 move second child to first child ( temp sampler) +0:37 direct index ( temp sampler) +0:37 'aggShadow' ( temp 3-element array of sampler) +0:37 Constant: +0:37 0 (const int) +0:? 'g_samp[0]' ( uniform sampler) +0:37 move second child to first child ( temp sampler) +0:37 direct index ( temp sampler) +0:37 'aggShadow' ( temp 3-element array of sampler) +0:37 Constant: +0:37 1 (const int) +0:? 'g_samp[1]' ( uniform sampler) +0:37 move second child to first child ( temp sampler) +0:37 direct index ( temp sampler) +0:37 'aggShadow' ( temp 3-element array of sampler) +0:37 Constant: +0:37 2 (const int) +0:? 'g_samp[2]' ( uniform sampler) +0:37 'aggShadow' ( temp 3-element array of sampler) +0:31 Function Definition: main( ( temp void) +0:31 Function Parameters: +0:? Sequence +0:31 Function Call: @main(struct-PS_OUTPUT-vf41; ( temp void) +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: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: +0:31 0 (const int) +0:? Linker Objects +0:? 'g_tex[0]' ( uniform texture1D) +0:? 'g_tex[1]' ( uniform texture1D) +0:? 'g_tex[2]' ( uniform texture1D) +0:? 'g_tex_explicit[0]' (layout( binding=1) uniform texture1D) +0:? 'g_tex_explicit[1]' (layout( binding=2) uniform texture1D) +0:? 'g_tex_explicit[2]' (layout( binding=3) uniform texture1D) +0:? 'g_samp[0]' ( uniform sampler) +0:? 'g_samp[1]' ( uniform sampler) +0:? 'g_samp[2]' ( uniform sampler) +0:? 'g_samp_explicit[0]' (layout( binding=5) uniform sampler) +0:? 'g_samp_explicit[1]' (layout( binding=6) uniform sampler) +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) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:17 Function Definition: TestFn1( ( temp 4-component vector of float) +0:17 Function Parameters: +0:? Sequence +0:18 Branch: Return with expression +0:18 texture ( temp 4-component vector of float) +0:18 Construct combined texture-sampler ( temp sampler1D) +0:? 'g_tex[1]' ( uniform texture1D) +0:? 'g_samp[1]' ( uniform sampler) +0:18 Constant: +0:18 0.200000 +0:22 Function Definition: TestFn2(t11[3];p1[3]; ( temp 4-component vector of float) +0:22 Function Parameters: +0:22 'l_tex' ( in 3-element array of texture1D) +0:22 'l_samp' ( in 3-element array of sampler) +0:? Sequence +0:23 Branch: Return with expression +0:23 texture ( temp 4-component vector of float) +0:23 Construct combined texture-sampler ( temp sampler1D) +0:23 direct index ( temp texture1D) +0:23 'l_tex' ( in 3-element array of texture1D) +0:23 Constant: +0:23 2 (const int) +0:23 direct index ( temp sampler) +0:23 'l_samp' ( in 3-element array of sampler) +0:23 Constant: +0:23 2 (const int) +0:23 Constant: +0:23 0.200000 +0:26 Sequence +0:26 move second child to first child ( temp 5-element array of int) +0:26 'not_flattened_a' ( global 5-element array of int) +0:26 Constant: +0:26 1 (const int) +0:26 2 (const int) +0:26 3 (const int) +0:26 4 (const int) +0:26 5 (const int) +0:31 Function Definition: @main(struct-PS_OUTPUT-vf41; ( temp void) +0:31 Function Parameters: +0:31 'ps_output' ( out structure{ temp 4-component vector of float color}) +0:? Sequence +0:33 Sequence +0:33 Sequence +0:33 move second child to first child ( temp sampler) +0:33 direct index ( temp sampler) +0:33 'local_sampler_array' ( temp 3-element array of sampler) +0:33 Constant: +0:33 0 (const int) +0:? 'g_samp[0]' ( uniform sampler) +0:33 move second child to first child ( temp sampler) +0:33 direct index ( temp sampler) +0:33 'local_sampler_array' ( temp 3-element array of sampler) +0:33 Constant: +0:33 1 (const int) +0:? 'g_samp[1]' ( uniform sampler) +0:33 move second child to first child ( temp sampler) +0:33 direct index ( temp sampler) +0:33 'local_sampler_array' ( temp 3-element array of sampler) +0:33 Constant: +0:33 2 (const int) +0:? 'g_samp[2]' ( uniform sampler) +0:34 Sequence +0:34 Sequence +0:34 move second child to first child ( temp texture1D) +0:34 direct index ( temp texture1D) +0:34 'local_texture_array' ( temp 3-element array of texture1D) +0:34 Constant: +0:34 0 (const int) +0:? 'g_tex[0]' ( uniform texture1D) +0:34 move second child to first child ( temp texture1D) +0:34 direct index ( temp texture1D) +0:34 'local_texture_array' ( temp 3-element array of texture1D) +0:34 Constant: +0:34 1 (const int) +0:? 'g_tex[1]' ( uniform texture1D) +0:34 move second child to first child ( temp texture1D) +0:34 direct index ( temp texture1D) +0:34 'local_texture_array' ( temp 3-element array of texture1D) +0:34 Constant: +0:34 2 (const int) +0:? 'g_tex[2]' ( uniform texture1D) +0:35 Sequence +0:35 move second child to first child ( temp 4-element array of float) +0:35 'local_float_array' ( temp 4-element array of float) +0:35 g_floats: direct index for structure ( uniform 4-element array of float) +0:35 '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:35 Constant: +0:35 2 (const uint) +0:37 move second child to first child ( temp 4-component vector of float) +0:37 color: direct index for structure ( temp 4-component vector of float) +0:37 'ps_output' ( out structure{ temp 4-component vector of float color}) +0:37 Constant: +0:37 0 (const int) +0:37 add ( temp 4-component vector of float) +0:37 Function Call: TestFn1( ( temp 4-component vector of float) +0:37 Function Call: TestFn2(t11[3];p1[3]; ( temp 4-component vector of float) +0:37 Comma ( temp 3-element array of texture1D) +0:37 Sequence +0:37 move second child to first child ( temp texture1D) +0:37 direct index ( temp texture1D) +0:37 'aggShadow' ( temp 3-element array of texture1D) +0:37 Constant: +0:37 0 (const int) +0:? 'g_tex[0]' ( uniform texture1D) +0:37 move second child to first child ( temp texture1D) +0:37 direct index ( temp texture1D) +0:37 'aggShadow' ( temp 3-element array of texture1D) +0:37 Constant: +0:37 1 (const int) +0:? 'g_tex[1]' ( uniform texture1D) +0:37 move second child to first child ( temp texture1D) +0:37 direct index ( temp texture1D) +0:37 'aggShadow' ( temp 3-element array of texture1D) +0:37 Constant: +0:37 2 (const int) +0:? 'g_tex[2]' ( uniform texture1D) +0:37 'aggShadow' ( temp 3-element array of texture1D) +0:37 Comma ( temp 3-element array of sampler) +0:37 Sequence +0:37 move second child to first child ( temp sampler) +0:37 direct index ( temp sampler) +0:37 'aggShadow' ( temp 3-element array of sampler) +0:37 Constant: +0:37 0 (const int) +0:? 'g_samp[0]' ( uniform sampler) +0:37 move second child to first child ( temp sampler) +0:37 direct index ( temp sampler) +0:37 'aggShadow' ( temp 3-element array of sampler) +0:37 Constant: +0:37 1 (const int) +0:? 'g_samp[1]' ( uniform sampler) +0:37 move second child to first child ( temp sampler) +0:37 direct index ( temp sampler) +0:37 'aggShadow' ( temp 3-element array of sampler) +0:37 Constant: +0:37 2 (const int) +0:? 'g_samp[2]' ( uniform sampler) +0:37 'aggShadow' ( temp 3-element array of sampler) +0:31 Function Definition: main( ( temp void) +0:31 Function Parameters: +0:? Sequence +0:31 Function Call: @main(struct-PS_OUTPUT-vf41; ( temp void) +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: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: +0:31 0 (const int) +0:? Linker Objects +0:? 'g_tex[0]' ( uniform texture1D) +0:? 'g_tex[1]' ( uniform texture1D) +0:? 'g_tex[2]' ( uniform texture1D) +0:? 'g_tex_explicit[0]' (layout( binding=1) uniform texture1D) +0:? 'g_tex_explicit[1]' (layout( binding=2) uniform texture1D) +0:? 'g_tex_explicit[2]' (layout( binding=3) uniform texture1D) +0:? 'g_samp[0]' ( uniform sampler) +0:? 'g_samp[1]' ( uniform sampler) +0:? 'g_samp[2]' ( uniform sampler) +0:? 'g_samp_explicit[0]' (layout( binding=5) uniform sampler) +0:? 'g_samp_explicit[1]' (layout( binding=6) uniform sampler) +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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 137 + + Capability Shader + Capability Sampled1D + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 128 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 9 "TestFn1(" + Name 22 "TestFn2(t11[3];p1[3];" + Name 20 "l_tex" + Name 21 "l_samp" + Name 24 "PS_OUTPUT" + MemberName 24(PS_OUTPUT) 0 "color" + Name 28 "@main(struct-PS_OUTPUT-vf41;" + Name 27 "ps_output" + 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]" + 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 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypeFunction 7(fvec4) + 11: TypeImage 6(float) 1D sampled format:Unknown + 12: TypeInt 32 0 + 13: 12(int) Constant 3 + 14: TypeArray 11 13 + 15: TypePointer UniformConstant 14 + 16: TypeSampler + 17: TypeArray 16 13 + 18: TypePointer UniformConstant 17 + 19: TypeFunction 7(fvec4) 15(ptr) 18(ptr) + 24(PS_OUTPUT): TypeStruct 7(fvec4) + 25: TypePointer Function 24(PS_OUTPUT) + 26: TypeFunction 2 25(ptr) + 30: TypeInt 32 1 + 31: 12(int) Constant 5 + 32: TypeArray 30(int) 31 + 33: TypePointer Private 32 +34(not_flattened_a): 33(ptr) Variable Private + 35: 30(int) Constant 1 + 36: 30(int) Constant 2 + 37: 30(int) Constant 3 + 38: 30(int) Constant 4 + 39: 30(int) Constant 5 + 40: 32 ConstantComposite 35 36 37 38 39 + 41: TypePointer UniformConstant 11 + 42(g_tex[1]): 41(ptr) Variable UniformConstant + 44: TypePointer UniformConstant 16 + 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 + 4(main): 2 Function None 3 + 5: Label + 123(ps_output): 25(ptr) Variable Function + 124(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 + Return + FunctionEnd + 9(TestFn1(): 7(fvec4) Function None 8 + 10: Label + 43: 11 Load 42(g_tex[1]) + 46: 16 Load 45(g_samp[1]) + 48: 47 SampledImage 43 46 + 50: 7(fvec4) ImageSampleImplicitLod 48 49 + ReturnValue 50 + FunctionEnd +22(TestFn2(t11[3];p1[3];): 7(fvec4) Function None 19 + 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 + 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 + 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 + 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 + Store 101 100 + 102: 6(float) CompositeExtract 94 3 + 103: 96(ptr) AccessChain 83(local_float_array) 37 + 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 + Store 109 108 + 110: 11 Load 77(g_tex[2]) + 111: 41(ptr) AccessChain 105(aggShadow) 36 + 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 + Store 116 115 + 117: 16 Load 68(g_samp[2]) + 118: 44(ptr) AccessChain 112(aggShadow) 36 + 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 + 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 new file mode 100755 index 0000000..58fa077 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.array.frag.out @@ -0,0 +1,275 @@ +hlsl.array.frag +Shader version: 450 +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:? 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:? Sequence +0:8 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:? '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:? '@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:? '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:? '@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 4-component vector of float) + + +Linked fragment stage: + + +Shader version: 450 +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:? 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:? Sequence +0:8 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:? '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:? '@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:? '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:? '@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 4-component vector of float) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 81 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "PixelShaderFunction" 68 72 75 + ExecutionMode 4 OriginUpperLeft + 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 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypePointer Function 6(int) + 8: TypeFloat 32 + 9: TypeVector 8(float) 4 + 10: TypeInt 32 0 + 11: 10(int) Constant 3 + 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 +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 + 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 + 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 new file mode 100644 index 0000000..efe1240 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.array.implicit-size.frag.out @@ -0,0 +1,265 @@ +hlsl.array.implicit-size.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:3 Sequence +0:3 move second child to first child ( temp 5-element array of float) +0:3 'g_array' ( global 5-element array of float) +0:3 Constant: +0:3 1.000000 +0:3 2.000000 +0:3 3.000000 +0:3 4.000000 +0:3 5.000000 +0:6 Sequence +0:6 move second child to first child ( temp 7-element array of float) +0:6 'g_array_unused' ( global 7-element array of float) +0:6 Constant: +0:6 1.000000 +0:6 2.000000 +0:6 3.000000 +0:6 4.000000 +0:6 5.000000 +0:6 6.000000 +0:6 7.000000 +0:12 Sequence +0:12 move second child to first child ( temp 2-element array of structure{ temp int i, temp float f}) +0:12 'g_mystruct' ( global 2-element array of structure{ temp int i, temp float f}) +0:12 Constant: +0:12 1 (const int) +0:12 2.000000 +0:12 3 (const int) +0:12 4.000000 +0:26 Function Definition: main(struct-PS_OUTPUT-vf41; ( temp void) +0:26 Function Parameters: +0:26 'ps_output' ( out structure{ temp 4-component vector of float color}) +0:? Sequence +0:28 Sequence +0:28 move second child to first child ( temp 3-element array of float) +0:28 'l_array' ( temp 3-element array of float) +0:28 Constant: +0:28 1.000000 +0:28 2.000000 +0:28 3.000000 +0:31 move second child to first child ( temp 4-component vector of float) +0:31 color: direct index for structure ( temp 4-component vector of float) +0:31 'ps_output' ( out structure{ temp 4-component vector of float color}) +0:31 Constant: +0:31 0 (const int) +0:31 Construct vec4 ( temp 4-component vector of float) +0:31 add ( temp float) +0:31 add ( temp float) +0:31 add ( temp float) +0:31 add ( temp float) +0:31 direct index ( temp float) +0:31 'g_array' ( global 5-element array of float) +0:31 Constant: +0:31 0 (const int) +0:31 direct index ( temp float) +0:31 'g_array' ( global 5-element array of float) +0:31 Constant: +0:31 4 (const int) +0:31 direct index ( temp float) +0:31 'l_array' ( temp 3-element array of float) +0:31 Constant: +0:31 1 (const int) +0:31 f: direct index for structure ( temp float) +0:31 direct index ( temp structure{ temp int i, temp float f}) +0:31 'g_mystruct' ( global 2-element array of structure{ temp int i, temp float f}) +0:31 Constant: +0:31 0 (const int) +0:31 Constant: +0:31 1 (const int) +0:31 indirect index ( temp float) +0:31 'g_array' ( global 5-element array of float) +0:31 'idx' ( temp int) +0:? Linker Objects +0:? 'g_array' ( global 5-element array of float) +0:? 'g_array_unused' ( global 7-element array of float) +0:? 'g_mystruct' ( global 2-element array of structure{ temp int i, temp float f}) + + +Linked fragment stage: + +WARNING: Linking fragment stage: Entry point not found + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:3 Sequence +0:3 move second child to first child ( temp 5-element array of float) +0:3 'g_array' ( global 5-element array of float) +0:3 Constant: +0:3 1.000000 +0:3 2.000000 +0:3 3.000000 +0:3 4.000000 +0:3 5.000000 +0:6 Sequence +0:6 move second child to first child ( temp 7-element array of float) +0:6 'g_array_unused' ( global 7-element array of float) +0:6 Constant: +0:6 1.000000 +0:6 2.000000 +0:6 3.000000 +0:6 4.000000 +0:6 5.000000 +0:6 6.000000 +0:6 7.000000 +0:12 Sequence +0:12 move second child to first child ( temp 2-element array of structure{ temp int i, temp float f}) +0:12 'g_mystruct' ( global 2-element array of structure{ temp int i, temp float f}) +0:12 Constant: +0:12 1 (const int) +0:12 2.000000 +0:12 3 (const int) +0:12 4.000000 +0:26 Function Definition: main(struct-PS_OUTPUT-vf41; ( temp void) +0:26 Function Parameters: +0:26 'ps_output' ( out structure{ temp 4-component vector of float color}) +0:? Sequence +0:28 Sequence +0:28 move second child to first child ( temp 3-element array of float) +0:28 'l_array' ( temp 3-element array of float) +0:28 Constant: +0:28 1.000000 +0:28 2.000000 +0:28 3.000000 +0:31 move second child to first child ( temp 4-component vector of float) +0:31 color: direct index for structure ( temp 4-component vector of float) +0:31 'ps_output' ( out structure{ temp 4-component vector of float color}) +0:31 Constant: +0:31 0 (const int) +0:31 Construct vec4 ( temp 4-component vector of float) +0:31 add ( temp float) +0:31 add ( temp float) +0:31 add ( temp float) +0:31 add ( temp float) +0:31 direct index ( temp float) +0:31 'g_array' ( global 5-element array of float) +0:31 Constant: +0:31 0 (const int) +0:31 direct index ( temp float) +0:31 'g_array' ( global 5-element array of float) +0:31 Constant: +0:31 4 (const int) +0:31 direct index ( temp float) +0:31 'l_array' ( temp 3-element array of float) +0:31 Constant: +0:31 1 (const int) +0:31 f: direct index for structure ( temp float) +0:31 direct index ( temp structure{ temp int i, temp float f}) +0:31 'g_mystruct' ( global 2-element array of structure{ temp int i, temp float f}) +0:31 Constant: +0:31 0 (const int) +0:31 Constant: +0:31 1 (const int) +0:31 indirect index ( temp float) +0:31 'g_array' ( global 5-element array of float) +0:31 'idx' ( temp int) +0:? Linker Objects +0:? 'g_array' ( global 5-element array of float) +0:? 'g_array_unused' ( global 7-element array of float) +0:? 'g_mystruct' ( global 2-element array of structure{ temp int i, temp float f}) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 72 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "PixelShaderFunction" + ExecutionMode 4 OriginUpperLeft + Name 4 "PixelShaderFunction" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "color" + Name 12 "main(struct-PS_OUTPUT-vf41;" + Name 11 "ps_output" + Name 18 "g_array" + Name 28 "g_array_unused" + Name 33 "mystruct" + MemberName 33(mystruct) 0 "i" + MemberName 33(mystruct) 1 "f" + Name 37 "g_mystruct" + Name 46 "l_array" + Name 64 "idx" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8(PS_OUTPUT): TypeStruct 7(fvec4) + 9: TypePointer Function 8(PS_OUTPUT) + 10: TypeFunction 2 9(ptr) + 14: TypeInt 32 0 + 15: 14(int) Constant 5 + 16: TypeArray 6(float) 15 + 17: TypePointer Private 16 + 18(g_array): 17(ptr) Variable Private + 19: 6(float) Constant 1065353216 + 20: 6(float) Constant 1073741824 + 21: 6(float) Constant 1077936128 + 22: 6(float) Constant 1082130432 + 23: 6(float) Constant 1084227584 + 24: 16 ConstantComposite 19 20 21 22 23 + 25: 14(int) Constant 7 + 26: TypeArray 6(float) 25 + 27: TypePointer Private 26 +28(g_array_unused): 27(ptr) Variable Private + 29: 6(float) Constant 1086324736 + 30: 6(float) Constant 1088421888 + 31: 26 ConstantComposite 19 20 21 22 23 29 30 + 32: TypeInt 32 1 + 33(mystruct): TypeStruct 32(int) 6(float) + 34: 14(int) Constant 2 + 35: TypeArray 33(mystruct) 34 + 36: TypePointer Private 35 + 37(g_mystruct): 36(ptr) Variable Private + 38: 32(int) Constant 1 + 39:33(mystruct) ConstantComposite 38 20 + 40: 32(int) Constant 3 + 41:33(mystruct) ConstantComposite 40 22 + 42: 35 ConstantComposite 39 41 + 43: 14(int) Constant 3 + 44: TypeArray 6(float) 43 + 45: TypePointer Function 44 + 47: 44 ConstantComposite 19 20 21 + 48: 32(int) Constant 0 + 49: TypePointer Private 6(float) + 52: 32(int) Constant 4 + 56: TypePointer Function 6(float) + 63: TypePointer Function 32(int) + 70: TypePointer Function 7(fvec4) +4(PixelShaderFunction): 2 Function None 3 + 5: Label + Store 18(g_array) 24 + Store 28(g_array_unused) 31 + Store 37(g_mystruct) 42 + Return + FunctionEnd +12(main(struct-PS_OUTPUT-vf41;): 2 Function None 10 + 11(ps_output): 9(ptr) FunctionParameter + 13: Label + 46(l_array): 45(ptr) Variable Function + 64(idx): 63(ptr) Variable Function + Store 46(l_array) 47 + 50: 49(ptr) AccessChain 18(g_array) 48 + 51: 6(float) Load 50 + 53: 49(ptr) AccessChain 18(g_array) 52 + 54: 6(float) Load 53 + 55: 6(float) FAdd 51 54 + 57: 56(ptr) AccessChain 46(l_array) 38 + 58: 6(float) Load 57 + 59: 6(float) FAdd 55 58 + 60: 49(ptr) AccessChain 37(g_mystruct) 48 38 + 61: 6(float) Load 60 + 62: 6(float) FAdd 59 61 + 65: 32(int) Load 64(idx) + 66: 49(ptr) AccessChain 18(g_array) 65 + 67: 6(float) Load 66 + 68: 6(float) FAdd 62 67 + 69: 7(fvec4) CompositeConstruct 68 68 68 68 + 71: 70(ptr) AccessChain 11(ps_output) 48 + Store 71 69 + Return + FunctionEnd 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 new file mode 100644 index 0000000..e13399e --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.array.multidim.frag.out @@ -0,0 +1,223 @@ +hlsl.array.multidim.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:10 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color}) +0:10 Function Parameters: +0:? Sequence +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 direct index ( temp 3-element array of 4-component vector of float) +0:14 'float4_array_1' ( temp 2-element array of 3-element array of 4-component vector of float) +0:14 Constant: +0:14 1 (const int) +0:14 Constant: +0:14 2 (const int) +0:14 Construct vec4 ( temp 4-component vector of float) +0:14 direct index ( temp float) +0:14 direct index ( temp 3-element array of float) +0:14 direct index ( temp 4-element array of 3-element array of float) +0:14 float_array: direct index for structure ( uniform 5-element array of 4-element array of 3-element array of float) +0:14 '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:14 Constant: +0:14 0 (const uint) +0:14 Constant: +0:14 2 (const int) +0:14 Constant: +0:14 3 (const int) +0:14 Constant: +0:14 1 (const int) +0:15 move second child to first child ( temp 3-element array of 4-component vector of float) +0:15 direct index ( temp 3-element array of 4-component vector of float) +0:15 'float4_array_2' ( temp 5-element array of 3-element array of 4-component vector of float) +0:15 Constant: +0:15 1 (const int) +0:15 direct index ( temp 3-element array of 4-component vector of float) +0:15 'float4_array_1' ( temp 2-element array of 3-element array of 4-component vector of float) +0:15 Constant: +0:15 0 (const int) +0:18 move second child to first child ( temp 4-component vector of float) +0:18 Color: direct index for structure ( temp 4-component vector of float) +0:18 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:18 Constant: +0:18 0 (const int) +0:18 direct index ( temp 4-component vector of float) +0:18 direct index ( temp 3-element array of 4-component vector of float) +0:18 'float4_array_1' ( temp 2-element array of 3-element array of 4-component vector of float) +0:18 Constant: +0:18 1 (const int) +0:18 Constant: +0:18 2 (const int) +0:19 Branch: Return with expression +0:19 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:10 Function Definition: main( ( temp void) +0:10 Function Parameters: +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: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) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:10 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color}) +0:10 Function Parameters: +0:? Sequence +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 direct index ( temp 3-element array of 4-component vector of float) +0:14 'float4_array_1' ( temp 2-element array of 3-element array of 4-component vector of float) +0:14 Constant: +0:14 1 (const int) +0:14 Constant: +0:14 2 (const int) +0:14 Construct vec4 ( temp 4-component vector of float) +0:14 direct index ( temp float) +0:14 direct index ( temp 3-element array of float) +0:14 direct index ( temp 4-element array of 3-element array of float) +0:14 float_array: direct index for structure ( uniform 5-element array of 4-element array of 3-element array of float) +0:14 '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:14 Constant: +0:14 0 (const uint) +0:14 Constant: +0:14 2 (const int) +0:14 Constant: +0:14 3 (const int) +0:14 Constant: +0:14 1 (const int) +0:15 move second child to first child ( temp 3-element array of 4-component vector of float) +0:15 direct index ( temp 3-element array of 4-component vector of float) +0:15 'float4_array_2' ( temp 5-element array of 3-element array of 4-component vector of float) +0:15 Constant: +0:15 1 (const int) +0:15 direct index ( temp 3-element array of 4-component vector of float) +0:15 'float4_array_1' ( temp 2-element array of 3-element array of 4-component vector of float) +0:15 Constant: +0:15 0 (const int) +0:18 move second child to first child ( temp 4-component vector of float) +0:18 Color: direct index for structure ( temp 4-component vector of float) +0:18 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:18 Constant: +0:18 0 (const int) +0:18 direct index ( temp 4-component vector of float) +0:18 direct index ( temp 3-element array of 4-component vector of float) +0:18 'float4_array_1' ( temp 2-element array of 3-element array of 4-component vector of float) +0:18 Constant: +0:18 1 (const int) +0:18 Constant: +0:18 2 (const int) +0:19 Branch: Return with expression +0:19 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:10 Function Definition: main( ( temp void) +0:10 Function Parameters: +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: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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 57 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 54 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + Name 10 "@main(" + Name 18 "float4_array_1" + Name 27 "$Global" + MemberName 27($Global) 0 "float_array" + Name 29 "" + Name 40 "float4_array_2" + Name 46 "psout" + Name 54 "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 + 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: TypeInt 32 0 + 13: 12(int) Constant 3 + 14: TypeArray 7(fvec4) 13 + 15: 12(int) Constant 2 + 16: TypeArray 14 15 + 17: TypePointer Function 16 + 19: TypeInt 32 1 + 20: 19(int) Constant 1 + 21: 19(int) Constant 2 + 22: TypeArray 6(float) 13 + 23: 12(int) Constant 4 + 24: TypeArray 22 23 + 25: 12(int) Constant 5 + 26: TypeArray 24 25 + 27($Global): TypeStruct 26 + 28: TypePointer Uniform 27($Global) + 29: 28(ptr) Variable Uniform + 30: 19(int) Constant 0 + 31: 19(int) Constant 3 + 32: TypePointer Uniform 6(float) + 36: TypePointer Function 7(fvec4) + 38: TypeArray 14 25 + 39: TypePointer Function 38 + 41: TypePointer Function 14 + 45: TypePointer Function 8(PS_OUTPUT) + 53: TypePointer Output 7(fvec4) + 54(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 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label +18(float4_array_1): 17(ptr) Variable Function +40(float4_array_2): 39(ptr) Variable Function + 46(psout): 45(ptr) Variable Function + 33: 32(ptr) AccessChain 29 30 21 31 20 + 34: 6(float) Load 33 + 35: 7(fvec4) CompositeConstruct 34 34 34 34 + 37: 36(ptr) AccessChain 18(float4_array_1) 20 21 + Store 37 35 + 42: 41(ptr) AccessChain 18(float4_array_1) 30 + 43: 14 Load 42 + 44: 41(ptr) AccessChain 40(float4_array_2) 20 + Store 44 43 + 47: 36(ptr) AccessChain 18(float4_array_1) 20 21 + 48: 7(fvec4) Load 47 + 49: 36(ptr) AccessChain 46(psout) 30 + Store 49 48 + 50:8(PS_OUTPUT) Load 46(psout) + ReturnValue 50 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.assoc.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.assoc.frag.out new file mode 100755 index 0000000..0a48528 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.assoc.frag.out @@ -0,0 +1,244 @@ +hlsl.assoc.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:8 Function Definition: @PixelShaderFunction(vf4;vf4;vf4;vf4;vf4; ( temp 4-component vector of float) +0:8 Function Parameters: +0:8 'a1' ( in 4-component vector of float) +0:8 'a2' ( in 4-component vector of float) +0:8 'a3' ( in 4-component vector of float) +0:8 'a4' ( in 4-component vector of float) +0:8 'a5' ( in 4-component vector of float) +0:? Sequence +0:9 move second child to first child ( temp 4-component vector of float) +0:9 'a1' ( in 4-component vector of float) +0:9 move second child to first child ( temp 4-component vector of float) +0:9 'a2' ( in 4-component vector of float) +0:9 move second child to first child ( temp 4-component vector of float) +0:9 'a3' ( in 4-component vector of float) +0:9 move second child to first child ( temp 4-component vector of float) +0:9 'a4' ( in 4-component vector of float) +0:9 'a5' ( in 4-component vector of float) +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 'a1' ( in 4-component vector of float) +0:10 'a2' ( in 4-component vector of float) +0:10 'a3' ( in 4-component vector of float) +0:10 'a4' ( in 4-component vector of float) +0:10 'a5' ( in 4-component vector of float) +0:8 Function Definition: PixelShaderFunction( ( temp void) +0:8 Function Parameters: +0:? Sequence +0:8 move second child to first child ( temp 4-component vector of float) +0:? 'a1' ( temp 4-component vector of float) +0:? 'a1' (layout( location=0) in 4-component vector of float) +0:8 move second child to first child ( temp 4-component vector of float) +0:? 'a2' ( temp 4-component vector of float) +0:? 'a2' (layout( location=1) in 4-component vector of float) +0:8 move second child to first child ( temp 4-component vector of float) +0:? 'a3' ( temp 4-component vector of float) +0:? 'a3' (layout( location=2) in 4-component vector of float) +0:8 move second child to first child ( temp 4-component vector of float) +0:? 'a4' ( temp 4-component vector of float) +0:? 'a4' (layout( location=3) in 4-component vector of float) +0:8 move second child to first child ( temp 4-component vector of float) +0:? 'a5' ( temp 4-component vector of float) +0:? 'a5' (layout( location=4) 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: @PixelShaderFunction(vf4;vf4;vf4;vf4;vf4; ( temp 4-component vector of float) +0:? 'a1' ( temp 4-component vector of float) +0:? 'a2' ( temp 4-component vector of float) +0:? 'a3' ( temp 4-component vector of float) +0:? 'a4' ( temp 4-component vector of float) +0:? 'a5' ( temp 4-component vector of float) +0:? Linker Objects +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) +0:? 'a1' (layout( location=0) in 4-component vector of float) +0:? 'a2' (layout( location=1) in 4-component vector of float) +0:? 'a3' (layout( location=2) in 4-component vector of float) +0:? 'a4' (layout( location=3) in 4-component vector of float) +0:? 'a5' (layout( location=4) in 4-component vector of float) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:8 Function Definition: @PixelShaderFunction(vf4;vf4;vf4;vf4;vf4; ( temp 4-component vector of float) +0:8 Function Parameters: +0:8 'a1' ( in 4-component vector of float) +0:8 'a2' ( in 4-component vector of float) +0:8 'a3' ( in 4-component vector of float) +0:8 'a4' ( in 4-component vector of float) +0:8 'a5' ( in 4-component vector of float) +0:? Sequence +0:9 move second child to first child ( temp 4-component vector of float) +0:9 'a1' ( in 4-component vector of float) +0:9 move second child to first child ( temp 4-component vector of float) +0:9 'a2' ( in 4-component vector of float) +0:9 move second child to first child ( temp 4-component vector of float) +0:9 'a3' ( in 4-component vector of float) +0:9 move second child to first child ( temp 4-component vector of float) +0:9 'a4' ( in 4-component vector of float) +0:9 'a5' ( in 4-component vector of float) +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 'a1' ( in 4-component vector of float) +0:10 'a2' ( in 4-component vector of float) +0:10 'a3' ( in 4-component vector of float) +0:10 'a4' ( in 4-component vector of float) +0:10 'a5' ( in 4-component vector of float) +0:8 Function Definition: PixelShaderFunction( ( temp void) +0:8 Function Parameters: +0:? Sequence +0:8 move second child to first child ( temp 4-component vector of float) +0:? 'a1' ( temp 4-component vector of float) +0:? 'a1' (layout( location=0) in 4-component vector of float) +0:8 move second child to first child ( temp 4-component vector of float) +0:? 'a2' ( temp 4-component vector of float) +0:? 'a2' (layout( location=1) in 4-component vector of float) +0:8 move second child to first child ( temp 4-component vector of float) +0:? 'a3' ( temp 4-component vector of float) +0:? 'a3' (layout( location=2) in 4-component vector of float) +0:8 move second child to first child ( temp 4-component vector of float) +0:? 'a4' ( temp 4-component vector of float) +0:? 'a4' (layout( location=3) in 4-component vector of float) +0:8 move second child to first child ( temp 4-component vector of float) +0:? 'a5' ( temp 4-component vector of float) +0:? 'a5' (layout( location=4) 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: @PixelShaderFunction(vf4;vf4;vf4;vf4;vf4; ( temp 4-component vector of float) +0:? 'a1' ( temp 4-component vector of float) +0:? 'a2' ( temp 4-component vector of float) +0:? 'a3' ( temp 4-component vector of float) +0:? 'a4' ( temp 4-component vector of float) +0:? 'a5' ( temp 4-component vector of float) +0:? Linker Objects +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) +0:? 'a1' (layout( location=0) in 4-component vector of float) +0:? 'a2' (layout( location=1) in 4-component vector of float) +0:? 'a3' (layout( location=2) in 4-component vector of float) +0:? 'a4' (layout( location=3) in 4-component vector of float) +0:? 'a5' (layout( location=4) in 4-component vector of float) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 58 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "PixelShaderFunction" 31 34 37 40 43 46 + ExecutionMode 4 OriginUpperLeft + Name 4 "PixelShaderFunction" + Name 15 "@PixelShaderFunction(vf4;vf4;vf4;vf4;vf4;" + Name 10 "a1" + Name 11 "a2" + Name 12 "a3" + Name 13 "a4" + Name 14 "a5" + Name 29 "a1" + Name 31 "a1" + Name 33 "a2" + Name 34 "a2" + Name 36 "a3" + Name 37 "a3" + Name 39 "a4" + Name 40 "a4" + Name 42 "a5" + Name 43 "a5" + Name 46 "@entryPointOutput" + Name 47 "param" + Name 49 "param" + Name 51 "param" + Name 53 "param" + Name 55 "param" + Decorate 31(a1) Location 0 + Decorate 34(a2) Location 1 + Decorate 37(a3) Location 2 + Decorate 40(a4) Location 3 + Decorate 43(a5) Location 4 + Decorate 46(@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) 8(ptr) 8(ptr) 8(ptr) 8(ptr) + 30: TypePointer Input 7(fvec4) + 31(a1): 30(ptr) Variable Input + 34(a2): 30(ptr) Variable Input + 37(a3): 30(ptr) Variable Input + 40(a4): 30(ptr) Variable Input + 43(a5): 30(ptr) Variable Input + 45: TypePointer Output 7(fvec4) +46(@entryPointOutput): 45(ptr) Variable Output +4(PixelShaderFunction): 2 Function None 3 + 5: Label + 29(a1): 8(ptr) Variable Function + 33(a2): 8(ptr) Variable Function + 36(a3): 8(ptr) Variable Function + 39(a4): 8(ptr) Variable Function + 42(a5): 8(ptr) Variable Function + 47(param): 8(ptr) Variable Function + 49(param): 8(ptr) Variable Function + 51(param): 8(ptr) Variable Function + 53(param): 8(ptr) Variable Function + 55(param): 8(ptr) Variable Function + 32: 7(fvec4) Load 31(a1) + Store 29(a1) 32 + 35: 7(fvec4) Load 34(a2) + Store 33(a2) 35 + 38: 7(fvec4) Load 37(a3) + Store 36(a3) 38 + 41: 7(fvec4) Load 40(a4) + Store 39(a4) 41 + 44: 7(fvec4) Load 43(a5) + Store 42(a5) 44 + 48: 7(fvec4) Load 29(a1) + Store 47(param) 48 + 50: 7(fvec4) Load 33(a2) + Store 49(param) 50 + 52: 7(fvec4) Load 36(a3) + Store 51(param) 52 + 54: 7(fvec4) Load 39(a4) + Store 53(param) 54 + 56: 7(fvec4) Load 42(a5) + Store 55(param) 56 + 57: 7(fvec4) FunctionCall 15(@PixelShaderFunction(vf4;vf4;vf4;vf4;vf4;) 47(param) 49(param) 51(param) 53(param) 55(param) + Store 46(@entryPointOutput) 57 + Return + FunctionEnd +15(@PixelShaderFunction(vf4;vf4;vf4;vf4;vf4;): 7(fvec4) Function None 9 + 10(a1): 8(ptr) FunctionParameter + 11(a2): 8(ptr) FunctionParameter + 12(a3): 8(ptr) FunctionParameter + 13(a4): 8(ptr) FunctionParameter + 14(a5): 8(ptr) FunctionParameter + 16: Label + 17: 7(fvec4) Load 14(a5) + Store 13(a4) 17 + Store 12(a3) 17 + Store 11(a2) 17 + Store 10(a1) 17 + 18: 7(fvec4) Load 10(a1) + 19: 7(fvec4) Load 11(a2) + 20: 7(fvec4) FAdd 18 19 + 21: 7(fvec4) Load 12(a3) + 22: 7(fvec4) FAdd 20 21 + 23: 7(fvec4) Load 13(a4) + 24: 7(fvec4) FAdd 22 23 + 25: 7(fvec4) Load 14(a5) + 26: 7(fvec4) FAdd 24 25 + ReturnValue 26 + FunctionEnd 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 new file mode 100644 index 0000000..bd4e96b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.attribute.expression.comp.out @@ -0,0 +1,151 @@ +hlsl.attribute.expression.comp +Shader version: 450 +local_size = (4, 6, 8) +0:? Sequence +0:9 Function Definition: @main( ( temp 4-component vector of float) +0:9 Function Parameters: +0:? Sequence +0:11 Sequence +0:11 move second child to first child ( temp int) +0:11 'x' ( 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 'x' ( temp int) +0:11 bound: direct index for structure ( uniform int) +0:11 'anon@0' (layout( row_major std140) uniform block{ uniform int bound}) +0:11 Constant: +0:11 0 (const uint) +0:11 No loop body +0:11 Loop Terminal Expression +0:11 Pre-Increment ( temp int) +0:11 'x' ( temp int) +0:14 Branch: Return with expression +0:? Constant: +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +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:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) +0:9 Function Call: @main( ( temp 4-component vector of float) +0:? Linker Objects +0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int bound}) +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) + + +Linked compute stage: + + +Shader version: 450 +local_size = (4, 6, 8) +0:? Sequence +0:9 Function Definition: @main( ( temp 4-component vector of float) +0:9 Function Parameters: +0:? Sequence +0:11 Sequence +0:11 move second child to first child ( temp int) +0:11 'x' ( 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 'x' ( temp int) +0:11 bound: direct index for structure ( uniform int) +0:11 'anon@0' (layout( row_major std140) uniform block{ uniform int bound}) +0:11 Constant: +0:11 0 (const uint) +0:11 No loop body +0:11 Loop Terminal Expression +0:11 Pre-Increment ( temp int) +0:11 'x' ( temp int) +0:14 Branch: Return with expression +0:? Constant: +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +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:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) +0:9 Function Call: @main( ( temp 4-component vector of float) +0:? Linker Objects +0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int bound}) +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 39 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "main" 37 + ExecutionMode 4 LocalSize 4 6 8 + Name 4 "main" + Name 9 "@main(" + Name 13 "x" + Name 21 "$Global" + MemberName 21($Global) 0 "bound" + Name 23 "" + Name 37 "@entryPointOutput" + MemberDecorate 21($Global) 0 Offset 0 + Decorate 21($Global) Block + Decorate 23 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: TypeInt 32 1 + 12: TypePointer Function 11(int) + 14: 11(int) Constant 0 + 21($Global): TypeStruct 11(int) + 22: TypePointer Uniform 21($Global) + 23: 22(ptr) Variable Uniform + 24: TypePointer Uniform 11(int) + 27: TypeBool + 30: 11(int) Constant 1 + 32: 6(float) Constant 0 + 33: 7(fvec4) ConstantComposite 32 32 32 32 + 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 + 13(x): 12(ptr) Variable Function + Store 13(x) 14 + Branch 15 + 15: Label + LoopMerge 17 18 None + Branch 19 + 19: Label + 20: 11(int) Load 13(x) + 25: 24(ptr) AccessChain 23 14 + 26: 11(int) Load 25 + 28: 27(bool) SLessThan 20 26 + BranchConditional 28 16 17 + 16: Label + Branch 18 + 18: Label + 29: 11(int) Load 13(x) + 31: 11(int) IAdd 29 30 + Store 13(x) 31 + Branch 15 + 17: Label + ReturnValue 33 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.attribute.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.attribute.frag.out new file mode 100755 index 0000000..7a26416 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.attribute.frag.out @@ -0,0 +1,98 @@ +hlsl.attribute.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:2 Function Definition: @PixelShaderFunction(vf4; ( temp void) +0:2 Function Parameters: +0:2 'input' ( in 4-component vector of float) +0:? Sequence +0:11 Test condition and select ( temp void) +0:11 Condition +0:11 Constant: +0:11 0 (const int) +0:11 true case is null +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 Function Call: @PixelShaderFunction(vf4; ( temp void) +0:? 'input' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'input' (layout( location=0) in 4-component vector of float) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:2 Function Definition: @PixelShaderFunction(vf4; ( temp void) +0:2 Function Parameters: +0:2 'input' ( in 4-component vector of float) +0:? Sequence +0:11 Test condition and select ( temp void) +0:11 Condition +0:11 Constant: +0:11 0 (const int) +0:11 true case is null +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 Function Call: @PixelShaderFunction(vf4; ( temp void) +0:? 'input' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'input' (layout( location=0) in 4-component vector of float) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 24 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "PixelShaderFunction" 19 + ExecutionMode 4 OriginUpperLeft + Name 4 "PixelShaderFunction" + Name 11 "@PixelShaderFunction(vf4;" + Name 10 "input" + Name 17 "input" + Name 19 "input" + Name 21 "param" + Decorate 19(input) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 9: TypeFunction 2 8(ptr) + 13: TypeInt 32 1 + 14: 13(int) Constant 0 + 18: TypePointer Input 7(fvec4) + 19(input): 18(ptr) Variable Input +4(PixelShaderFunction): 2 Function None 3 + 5: Label + 17(input): 8(ptr) Variable Function + 21(param): 8(ptr) Variable Function + 20: 7(fvec4) Load 19(input) + Store 17(input) 20 + 22: 7(fvec4) Load 17(input) + Store 21(param) 22 + 23: 2 FunctionCall 11(@PixelShaderFunction(vf4;) 21(param) + Return + FunctionEnd +11(@PixelShaderFunction(vf4;): 2 Function None 9 + 10(input): 8(ptr) FunctionParameter + 12: Label + SelectionMerge 16 None + BranchConditional 14 15 16 + 15: Label + Branch 16 + 16: Label + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.basic.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.basic.comp.out new file mode 100755 index 0000000..172dfef --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.basic.comp.out @@ -0,0 +1,124 @@ +hlsl.basic.comp +Shader version: 450 +local_size = (1, 1, 1) +0:? Sequence +0:4 Function Definition: @main(i1;i1; ( temp void) +0:4 Function Parameters: +0:4 'dti' ( in int) +0:4 'gti' ( in int) +0:? Sequence +0:5 subtract ( temp int) +0:5 'dti' ( in int) +0:5 'gti' ( in int) +0:4 Function Definition: main( ( temp void) +0:4 Function Parameters: +0:? Sequence +0:4 move second child to first child ( temp int) +0:? 'dti' ( temp int) +0:? 'dti' ( in int GlobalInvocationID) +0:4 move second child to first child ( temp int) +0:? 'gti' ( temp int) +0:? 'gti' ( in int LocalInvocationID) +0:4 Function Call: @main(i1;i1; ( temp void) +0:? 'dti' ( temp int) +0:? 'gti' ( temp int) +0:? Linker Objects +0:? 'a' ( shared 100-element array of 4-component vector of float) +0:? 'dti' ( in int GlobalInvocationID) +0:? 'gti' ( in int LocalInvocationID) + + +Linked compute stage: + + +Shader version: 450 +local_size = (1, 1, 1) +0:? Sequence +0:4 Function Definition: @main(i1;i1; ( temp void) +0:4 Function Parameters: +0:4 'dti' ( in int) +0:4 'gti' ( in int) +0:? Sequence +0:5 subtract ( temp int) +0:5 'dti' ( in int) +0:5 'gti' ( in int) +0:4 Function Definition: main( ( temp void) +0:4 Function Parameters: +0:? Sequence +0:4 move second child to first child ( temp int) +0:? 'dti' ( temp int) +0:? 'dti' ( in int GlobalInvocationID) +0:4 move second child to first child ( temp int) +0:? 'gti' ( temp int) +0:? 'gti' ( in int LocalInvocationID) +0:4 Function Call: @main(i1;i1; ( temp void) +0:? 'dti' ( temp int) +0:? 'gti' ( temp int) +0:? Linker Objects +0:? 'a' ( shared 100-element array of 4-component vector of float) +0:? 'dti' ( in int GlobalInvocationID) +0:? 'gti' ( in int LocalInvocationID) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 35 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "main" 18 21 + ExecutionMode 4 LocalSize 1 1 1 + Name 4 "main" + Name 11 "@main(i1;i1;" + Name 9 "dti" + Name 10 "gti" + Name 16 "dti" + Name 18 "dti" + Name 20 "gti" + Name 21 "gti" + Name 23 "param" + Name 25 "param" + Name 34 "a" + Decorate 18(dti) BuiltIn GlobalInvocationId + Decorate 21(gti) BuiltIn LocalInvocationId + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypePointer Function 6(int) + 8: TypeFunction 2 7(ptr) 7(ptr) + 17: TypePointer Input 6(int) + 18(dti): 17(ptr) Variable Input + 21(gti): 17(ptr) Variable Input + 28: TypeFloat 32 + 29: TypeVector 28(float) 4 + 30: TypeInt 32 0 + 31: 30(int) Constant 100 + 32: TypeArray 29(fvec4) 31 + 33: TypePointer Workgroup 32 + 34(a): 33(ptr) Variable Workgroup + 4(main): 2 Function None 3 + 5: Label + 16(dti): 7(ptr) Variable Function + 20(gti): 7(ptr) Variable Function + 23(param): 7(ptr) Variable Function + 25(param): 7(ptr) Variable Function + 19: 6(int) Load 18(dti) + Store 16(dti) 19 + 22: 6(int) Load 21(gti) + Store 20(gti) 22 + 24: 6(int) Load 16(dti) + Store 23(param) 24 + 26: 6(int) Load 20(gti) + Store 25(param) 26 + 27: 2 FunctionCall 11(@main(i1;i1;) 23(param) 25(param) + Return + FunctionEnd +11(@main(i1;i1;): 2 Function None 8 + 9(dti): 7(ptr) FunctionParameter + 10(gti): 7(ptr) FunctionParameter + 12: Label + 13: 6(int) Load 9(dti) + 14: 6(int) Load 10(gti) + 15: 6(int) ISub 13 14 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.basic.geom.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.basic.geom.out new file mode 100644 index 0000000..24250b3 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.basic.geom.out @@ -0,0 +1,246 @@ +hlsl.basic.geom +Shader version: 450 +invocations = -1 +max_vertices = 4 +input primitive = triangles +output primitive = line_strip +0:? Sequence +0:16 Function Definition: @main(u1[3];u1[3];struct-PSInput-f1-i11; ( temp void) +0:16 Function Parameters: +0:16 'VertexID' ( in 3-element array of uint) +0:16 'test' ( in 3-element array of uint) +0:16 'OutputStream' ( out structure{ temp float myfloat, temp int something}) +0:? Sequence +0:19 move second child to first child ( temp float) +0:19 myfloat: direct index for structure ( temp float) +0:19 'Vert' ( temp structure{ temp float myfloat, temp int something}) +0:19 Constant: +0:19 0 (const int) +0:19 Convert uint to float ( temp float) +0:19 add ( temp uint) +0:19 add ( temp uint) +0:19 direct index ( temp uint) +0:19 'test' ( in 3-element array of uint) +0:19 Constant: +0:19 0 (const int) +0:19 direct index ( temp uint) +0:19 'test' ( in 3-element array of uint) +0:19 Constant: +0:19 1 (const int) +0:19 direct index ( temp uint) +0:19 'test' ( in 3-element array of uint) +0:19 Constant: +0:19 2 (const int) +0:20 move second child to first child ( temp int) +0:20 something: direct index for structure ( temp int) +0:20 'Vert' ( temp structure{ temp float myfloat, temp int something}) +0:20 Constant: +0:20 1 (const int) +0:20 Convert uint to int ( temp int) +0:20 direct index ( temp uint) +0:20 'VertexID' ( in 3-element array of uint) +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 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 EmitVertex ( temp void) +0:24 EndPrimitive ( temp void) +0:16 Function Definition: main( ( temp void) +0:16 Function Parameters: +0:? Sequence +0:16 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: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: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) + + +Linked geometry stage: + + +Shader version: 450 +invocations = 1 +max_vertices = 4 +input primitive = triangles +output primitive = line_strip +0:? Sequence +0:16 Function Definition: @main(u1[3];u1[3];struct-PSInput-f1-i11; ( temp void) +0:16 Function Parameters: +0:16 'VertexID' ( in 3-element array of uint) +0:16 'test' ( in 3-element array of uint) +0:16 'OutputStream' ( out structure{ temp float myfloat, temp int something}) +0:? Sequence +0:19 move second child to first child ( temp float) +0:19 myfloat: direct index for structure ( temp float) +0:19 'Vert' ( temp structure{ temp float myfloat, temp int something}) +0:19 Constant: +0:19 0 (const int) +0:19 Convert uint to float ( temp float) +0:19 add ( temp uint) +0:19 add ( temp uint) +0:19 direct index ( temp uint) +0:19 'test' ( in 3-element array of uint) +0:19 Constant: +0:19 0 (const int) +0:19 direct index ( temp uint) +0:19 'test' ( in 3-element array of uint) +0:19 Constant: +0:19 1 (const int) +0:19 direct index ( temp uint) +0:19 'test' ( in 3-element array of uint) +0:19 Constant: +0:19 2 (const int) +0:20 move second child to first child ( temp int) +0:20 something: direct index for structure ( temp int) +0:20 'Vert' ( temp structure{ temp float myfloat, temp int something}) +0:20 Constant: +0:20 1 (const int) +0:20 Convert uint to int ( temp int) +0:20 direct index ( temp uint) +0:20 'VertexID' ( in 3-element array of uint) +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 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 EmitVertex ( temp void) +0:24 EndPrimitive ( temp void) +0:16 Function Definition: main( ( temp void) +0:16 Function Parameters: +0:? Sequence +0:16 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: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: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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 57 + + Capability Geometry + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Geometry 4 "main" 45 48 + ExecutionMode 4 Triangles + ExecutionMode 4 Invocations 1 + ExecutionMode 4 OutputLineStrip + ExecutionMode 4 OutputVertices 4 + Name 4 "main" + Name 12 "PSInput" + MemberName 12(PSInput) 0 "myfloat" + MemberName 12(PSInput) 1 "something" + Name 18 "@main(u1[3];u1[3];struct-PSInput-f1-i11;" + Name 15 "VertexID" + 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 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: 6(int) Constant 3 + 8: TypeArray 6(int) 7 + 9: TypePointer Function 8 + 10: TypeFloat 32 + 11: TypeInt 32 1 + 12(PSInput): TypeStruct 10(float) 11(int) + 13: TypePointer Function 12(PSInput) + 14: TypeFunction 2 9(ptr) 9(ptr) 13(ptr) + 21: 11(int) Constant 0 + 22: TypePointer Function 6(int) + 25: 11(int) Constant 1 + 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 + 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) + Return + FunctionEnd +18(@main(u1[3];u1[3];struct-PSInput-f1-i11;): 2 Function None 14 + 15(VertexID): 9(ptr) FunctionParameter + 16(test): 9(ptr) FunctionParameter +17(OutputStream): 13(ptr) FunctionParameter + 19: Label + 20(Vert): 13(ptr) Variable Function + 23: 22(ptr) AccessChain 16(test) 21 + 24: 6(int) Load 23 + 26: 22(ptr) AccessChain 16(test) 25 + 27: 6(int) Load 26 + 28: 6(int) IAdd 24 27 + 30: 22(ptr) AccessChain 16(test) 29 + 31: 6(int) Load 30 + 32: 6(int) IAdd 28 31 + 33: 10(float) ConvertUToF 32 + 35: 34(ptr) AccessChain 20(Vert) 21 + Store 35 33 + 36: 22(ptr) AccessChain 15(VertexID) 21 + 37: 6(int) Load 36 + 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 + EmitVertex + 42: 12(PSInput) Load 20(Vert) + Store 17(OutputStream) 42 + EmitVertex + EndPrimitive + Return + 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 new file mode 100755 index 0000000..c406f24 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.buffer.frag.out @@ -0,0 +1,231 @@ +hlsl.buffer.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:30 Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of 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:? Sequence +0:30 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:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) +0:30 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:? '@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: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:30 Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of 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:? Sequence +0:30 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:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) +0:30 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:? '@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 53 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "PixelShaderFunction" 46 49 + ExecutionMode 4 OriginUpperLeft + 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 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 + 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) + 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 +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 + 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 + 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 new file mode 100644 index 0000000..f018984 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.calculatelod.dx10.frag.out @@ -0,0 +1,576 @@ +hlsl.calculatelod.dx10.frag +Shader version: 450 +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}) +0:24 Function Parameters: +0:? Sequence +0:28 Sequence +0:28 move second child to first child ( temp float) +0:28 'txval10' ( temp float) +0:28 direct index ( temp float) +0:? textureQueryLod ( temp float) +0:28 Construct combined texture-sampler ( temp sampler1DArray) +0:28 'g_tTex1df4a' (layout( binding=1) uniform texture1DArray) +0:28 'g_sSamp' (layout( binding=0) uniform sampler) +0:28 Constant: +0:28 0.100000 +0:28 Constant: +0:28 0 (const int) +0:29 Sequence +0:29 move second child to first child ( temp float) +0:29 'txval11' ( temp float) +0:29 direct index ( temp float) +0:? textureQueryLod ( temp float) +0:29 Construct combined texture-sampler ( temp isampler1DArray) +0:29 'g_tTex1di4a' ( uniform itexture1DArray) +0:29 'g_sSamp' (layout( binding=0) uniform sampler) +0:29 Constant: +0:29 0.200000 +0:29 Constant: +0:29 0 (const int) +0:30 Sequence +0:30 move second child to first child ( temp float) +0:30 'txval12' ( temp float) +0:30 direct index ( temp float) +0:? textureQueryLod ( temp float) +0:30 Construct combined texture-sampler ( temp usampler1DArray) +0:30 'g_tTex1du4a' ( uniform utexture1DArray) +0:30 'g_sSamp' (layout( binding=0) uniform sampler) +0:30 Constant: +0:30 0.300000 +0:30 Constant: +0:30 0 (const int) +0:32 Sequence +0:32 move second child to first child ( temp float) +0:32 'txval20' ( temp float) +0:32 direct index ( temp float) +0:? textureQueryLod ( temp float) +0:32 Construct combined texture-sampler ( temp sampler2DArray) +0:32 'g_tTex2df4a' ( uniform texture2DArray) +0:32 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:32 Constant: +0:32 0 (const int) +0:33 Sequence +0:33 move second child to first child ( temp float) +0:33 'txval21' ( temp float) +0:33 direct index ( temp float) +0:? textureQueryLod ( temp float) +0:33 Construct combined texture-sampler ( temp isampler2DArray) +0:33 'g_tTex2di4a' ( uniform itexture2DArray) +0:33 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:33 Constant: +0:33 0 (const int) +0:34 Sequence +0:34 move second child to first child ( temp float) +0:34 'txval22' ( temp float) +0:34 direct index ( temp float) +0:? textureQueryLod ( temp float) +0:34 Construct combined texture-sampler ( temp usampler2DArray) +0:34 'g_tTex2du4a' ( uniform utexture2DArray) +0:34 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:34 Constant: +0:34 0 (const int) +0:36 Sequence +0:36 move second child to first child ( temp float) +0:36 'txval40' ( temp float) +0:36 direct index ( temp float) +0:? textureQueryLod ( temp float) +0:36 Construct combined texture-sampler ( temp samplerCubeArray) +0:36 'g_tTexcdf4a' ( uniform textureCubeArray) +0:36 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:36 Constant: +0:36 0 (const int) +0:37 Sequence +0:37 move second child to first child ( temp float) +0:37 'txval41' ( temp float) +0:37 direct index ( temp float) +0:? textureQueryLod ( temp float) +0:37 Construct combined texture-sampler ( temp isamplerCubeArray) +0:37 'g_tTexcdi4a' ( uniform itextureCubeArray) +0:37 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:37 Constant: +0:37 0 (const int) +0:38 Sequence +0:38 move second child to first child ( temp float) +0:38 'txval42' ( temp float) +0:38 direct index ( temp float) +0:? textureQueryLod ( temp float) +0:38 Construct combined texture-sampler ( temp usamplerCubeArray) +0:38 'g_tTexcdu4a' ( uniform utextureCubeArray) +0:38 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:38 Constant: +0:38 0 (const int) +0:40 move second child to first child ( temp 4-component vector of float) +0:40 Color: direct index for structure ( temp 4-component vector of float) +0:40 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:40 Constant: +0:40 0 (const int) +0:40 Constant: +0:40 1.000000 +0:40 1.000000 +0:40 1.000000 +0:40 1.000000 +0:41 move second child to first child ( temp float) +0:41 Depth: direct index for structure ( temp float) +0:41 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:41 Constant: +0:41 1 (const int) +0:41 Constant: +0:41 1.000000 +0:43 Branch: Return with expression +0:43 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:24 Function Definition: main( ( temp void) +0:24 Function Parameters: +0:? Sequence +0:24 Sequence +0:24 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1DArray) +0:? 'g_tTex1df4' (layout( binding=0) 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) + + +Linked fragment stage: + + +Shader version: 450 +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}) +0:24 Function Parameters: +0:? Sequence +0:28 Sequence +0:28 move second child to first child ( temp float) +0:28 'txval10' ( temp float) +0:28 direct index ( temp float) +0:? textureQueryLod ( temp float) +0:28 Construct combined texture-sampler ( temp sampler1DArray) +0:28 'g_tTex1df4a' (layout( binding=1) uniform texture1DArray) +0:28 'g_sSamp' (layout( binding=0) uniform sampler) +0:28 Constant: +0:28 0.100000 +0:28 Constant: +0:28 0 (const int) +0:29 Sequence +0:29 move second child to first child ( temp float) +0:29 'txval11' ( temp float) +0:29 direct index ( temp float) +0:? textureQueryLod ( temp float) +0:29 Construct combined texture-sampler ( temp isampler1DArray) +0:29 'g_tTex1di4a' ( uniform itexture1DArray) +0:29 'g_sSamp' (layout( binding=0) uniform sampler) +0:29 Constant: +0:29 0.200000 +0:29 Constant: +0:29 0 (const int) +0:30 Sequence +0:30 move second child to first child ( temp float) +0:30 'txval12' ( temp float) +0:30 direct index ( temp float) +0:? textureQueryLod ( temp float) +0:30 Construct combined texture-sampler ( temp usampler1DArray) +0:30 'g_tTex1du4a' ( uniform utexture1DArray) +0:30 'g_sSamp' (layout( binding=0) uniform sampler) +0:30 Constant: +0:30 0.300000 +0:30 Constant: +0:30 0 (const int) +0:32 Sequence +0:32 move second child to first child ( temp float) +0:32 'txval20' ( temp float) +0:32 direct index ( temp float) +0:? textureQueryLod ( temp float) +0:32 Construct combined texture-sampler ( temp sampler2DArray) +0:32 'g_tTex2df4a' ( uniform texture2DArray) +0:32 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:32 Constant: +0:32 0 (const int) +0:33 Sequence +0:33 move second child to first child ( temp float) +0:33 'txval21' ( temp float) +0:33 direct index ( temp float) +0:? textureQueryLod ( temp float) +0:33 Construct combined texture-sampler ( temp isampler2DArray) +0:33 'g_tTex2di4a' ( uniform itexture2DArray) +0:33 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:33 Constant: +0:33 0 (const int) +0:34 Sequence +0:34 move second child to first child ( temp float) +0:34 'txval22' ( temp float) +0:34 direct index ( temp float) +0:? textureQueryLod ( temp float) +0:34 Construct combined texture-sampler ( temp usampler2DArray) +0:34 'g_tTex2du4a' ( uniform utexture2DArray) +0:34 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:34 Constant: +0:34 0 (const int) +0:36 Sequence +0:36 move second child to first child ( temp float) +0:36 'txval40' ( temp float) +0:36 direct index ( temp float) +0:? textureQueryLod ( temp float) +0:36 Construct combined texture-sampler ( temp samplerCubeArray) +0:36 'g_tTexcdf4a' ( uniform textureCubeArray) +0:36 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:36 Constant: +0:36 0 (const int) +0:37 Sequence +0:37 move second child to first child ( temp float) +0:37 'txval41' ( temp float) +0:37 direct index ( temp float) +0:? textureQueryLod ( temp float) +0:37 Construct combined texture-sampler ( temp isamplerCubeArray) +0:37 'g_tTexcdi4a' ( uniform itextureCubeArray) +0:37 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:37 Constant: +0:37 0 (const int) +0:38 Sequence +0:38 move second child to first child ( temp float) +0:38 'txval42' ( temp float) +0:38 direct index ( temp float) +0:? textureQueryLod ( temp float) +0:38 Construct combined texture-sampler ( temp usamplerCubeArray) +0:38 'g_tTexcdu4a' ( uniform utextureCubeArray) +0:38 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:38 Constant: +0:38 0 (const int) +0:40 move second child to first child ( temp 4-component vector of float) +0:40 Color: direct index for structure ( temp 4-component vector of float) +0:40 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:40 Constant: +0:40 0 (const int) +0:40 Constant: +0:40 1.000000 +0:40 1.000000 +0:40 1.000000 +0:40 1.000000 +0:41 move second child to first child ( temp float) +0:41 Depth: direct index for structure ( temp float) +0:41 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:41 Constant: +0:41 1 (const int) +0:41 Constant: +0:41 1.000000 +0:43 Branch: Return with expression +0:43 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:24 Function Definition: main( ( temp void) +0:24 Function Parameters: +0:? Sequence +0:24 Sequence +0:24 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1DArray) +0:? 'g_tTex1df4' (layout( binding=0) 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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 148 + + Capability Shader + Capability Sampled1D + Capability SampledCubeArray + Capability ImageQuery + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 140 144 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + MemberName 8(PS_OUTPUT) 1 "Depth" + Name 10 "@main(" + Name 13 "txval10" + Name 16 "g_tTex1df4a" + Name 20 "g_sSamp" + Name 30 "txval11" + Name 33 "g_tTex1di4a" + Name 41 "txval12" + Name 45 "g_tTex1du4a" + Name 53 "txval20" + Name 56 "g_tTex2df4a" + Name 64 "txval21" + Name 67 "g_tTex2di4a" + Name 76 "txval22" + Name 79 "g_tTex2du4a" + Name 89 "txval40" + Name 92 "g_tTexcdf4a" + Name 101 "txval41" + Name 104 "g_tTexcdi4a" + Name 112 "txval42" + Name 115 "g_tTexcdu4a" + Name 127 "psout" + Name 137 "flattenTemp" + Name 140 "Color" + Name 144 "Depth" + Name 147 "g_tTex1df4" + Decorate 16(g_tTex1df4a) DescriptorSet 0 + Decorate 16(g_tTex1df4a) Binding 1 + Decorate 20(g_sSamp) DescriptorSet 0 + Decorate 20(g_sSamp) Binding 0 + Decorate 33(g_tTex1di4a) DescriptorSet 0 + Decorate 45(g_tTex1du4a) DescriptorSet 0 + Decorate 56(g_tTex2df4a) DescriptorSet 0 + Decorate 67(g_tTex2di4a) DescriptorSet 0 + Decorate 79(g_tTex2du4a) DescriptorSet 0 + 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 147(g_tTex1df4) DescriptorSet 0 + Decorate 147(g_tTex1df4) Binding 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 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 + 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: TypeSampledImage 14 + 24: 6(float) Constant 1036831949 + 25: TypeVector 6(float) 2 + 27: TypeInt 32 1 + 28: 27(int) Constant 0 + 31: TypeImage 27(int) 1D array sampled format:Unknown + 32: TypePointer UniformConstant 31 + 33(g_tTex1di4a): 32(ptr) Variable UniformConstant + 36: TypeSampledImage 31 + 38: 6(float) Constant 1045220557 + 42: TypeInt 32 0 + 43: TypeImage 42(int) 1D array sampled format:Unknown + 44: TypePointer UniformConstant 43 + 45(g_tTex1du4a): 44(ptr) Variable UniformConstant + 48: TypeSampledImage 43 + 50: 6(float) Constant 1050253722 + 54: TypeImage 6(float) 2D array sampled format:Unknown + 55: TypePointer UniformConstant 54 + 56(g_tTex2df4a): 55(ptr) Variable UniformConstant + 59: TypeSampledImage 54 + 61: 25(fvec2) ConstantComposite 24 38 + 65: TypeImage 27(int) 2D array sampled format:Unknown + 66: TypePointer UniformConstant 65 + 67(g_tTex2di4a): 66(ptr) Variable UniformConstant + 70: TypeSampledImage 65 + 72: 6(float) Constant 1053609165 + 73: 25(fvec2) ConstantComposite 50 72 + 77: TypeImage 42(int) 2D array sampled format:Unknown + 78: TypePointer UniformConstant 77 + 79(g_tTex2du4a): 78(ptr) Variable UniformConstant + 82: TypeSampledImage 77 + 84: 6(float) Constant 1056964608 + 85: 6(float) Constant 1058642330 + 86: 25(fvec2) ConstantComposite 84 85 + 90: TypeImage 6(float) Cube array sampled format:Unknown + 91: TypePointer UniformConstant 90 + 92(g_tTexcdf4a): 91(ptr) Variable UniformConstant + 95: TypeSampledImage 90 + 97: TypeVector 6(float) 3 + 98: 97(fvec3) ConstantComposite 24 38 50 + 102: TypeImage 27(int) Cube array sampled format:Unknown + 103: TypePointer UniformConstant 102 +104(g_tTexcdi4a): 103(ptr) Variable UniformConstant + 107: TypeSampledImage 102 + 109: 97(fvec3) ConstantComposite 72 84 85 + 113: TypeImage 42(int) Cube array sampled format:Unknown + 114: TypePointer UniformConstant 113 +115(g_tTexcdu4a): 114(ptr) Variable UniformConstant + 118: TypeSampledImage 113 + 120: 6(float) Constant 1060320051 + 121: 6(float) Constant 1061997773 + 122: 6(float) Constant 1063675494 + 123: 97(fvec3) ConstantComposite 120 121 122 + 126: TypePointer Function 8(PS_OUTPUT) + 128: 6(float) Constant 1065353216 + 129: 7(fvec4) ConstantComposite 128 128 128 128 + 130: TypePointer Function 7(fvec4) + 132: 27(int) Constant 1 + 139: TypePointer Output 7(fvec4) + 140(Color): 139(ptr) Variable Output + 143: TypePointer Output 6(float) + 144(Depth): 143(ptr) Variable Output + 147(g_tTex1df4): 15(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label +137(flattenTemp): 126(ptr) Variable Function + 138:8(PS_OUTPUT) FunctionCall 10(@main() + Store 137(flattenTemp) 138 + 141: 130(ptr) AccessChain 137(flattenTemp) 28 + 142: 7(fvec4) Load 141 + Store 140(Color) 142 + 145: 12(ptr) AccessChain 137(flattenTemp) 132 + 146: 6(float) Load 145 + Store 144(Depth) 146 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 13(txval10): 12(ptr) Variable Function + 30(txval11): 12(ptr) Variable Function + 41(txval12): 12(ptr) Variable Function + 53(txval20): 12(ptr) Variable Function + 64(txval21): 12(ptr) Variable Function + 76(txval22): 12(ptr) Variable Function + 89(txval40): 12(ptr) Variable Function + 101(txval41): 12(ptr) Variable Function + 112(txval42): 12(ptr) Variable Function + 127(psout): 126(ptr) Variable Function + 17: 14 Load 16(g_tTex1df4a) + 21: 18 Load 20(g_sSamp) + 23: 22 SampledImage 17 21 + 26: 25(fvec2) ImageQueryLod 23 24 + 29: 6(float) CompositeExtract 26 0 + Store 13(txval10) 29 + 34: 31 Load 33(g_tTex1di4a) + 35: 18 Load 20(g_sSamp) + 37: 36 SampledImage 34 35 + 39: 25(fvec2) ImageQueryLod 37 38 + 40: 6(float) CompositeExtract 39 0 + Store 30(txval11) 40 + 46: 43 Load 45(g_tTex1du4a) + 47: 18 Load 20(g_sSamp) + 49: 48 SampledImage 46 47 + 51: 25(fvec2) ImageQueryLod 49 50 + 52: 6(float) CompositeExtract 51 0 + Store 41(txval12) 52 + 57: 54 Load 56(g_tTex2df4a) + 58: 18 Load 20(g_sSamp) + 60: 59 SampledImage 57 58 + 62: 25(fvec2) ImageQueryLod 60 61 + 63: 6(float) CompositeExtract 62 0 + Store 53(txval20) 63 + 68: 65 Load 67(g_tTex2di4a) + 69: 18 Load 20(g_sSamp) + 71: 70 SampledImage 68 69 + 74: 25(fvec2) ImageQueryLod 71 73 + 75: 6(float) CompositeExtract 74 0 + Store 64(txval21) 75 + 80: 77 Load 79(g_tTex2du4a) + 81: 18 Load 20(g_sSamp) + 83: 82 SampledImage 80 81 + 87: 25(fvec2) ImageQueryLod 83 86 + 88: 6(float) CompositeExtract 87 0 + Store 76(txval22) 88 + 93: 90 Load 92(g_tTexcdf4a) + 94: 18 Load 20(g_sSamp) + 96: 95 SampledImage 93 94 + 99: 25(fvec2) ImageQueryLod 96 98 + 100: 6(float) CompositeExtract 99 0 + Store 89(txval40) 100 + 105: 102 Load 104(g_tTexcdi4a) + 106: 18 Load 20(g_sSamp) + 108: 107 SampledImage 105 106 + 110: 25(fvec2) ImageQueryLod 108 109 + 111: 6(float) CompositeExtract 110 0 + Store 101(txval41) 111 + 116: 113 Load 115(g_tTexcdu4a) + 117: 18 Load 20(g_sSamp) + 119: 118 SampledImage 116 117 + 124: 25(fvec2) ImageQueryLod 119 123 + 125: 6(float) CompositeExtract 124 0 + Store 112(txval42) 125 + 131: 130(ptr) AccessChain 127(psout) 28 + Store 131 129 + 133: 12(ptr) AccessChain 127(psout) 132 + Store 133 128 + 134:8(PS_OUTPUT) Load 127(psout) + ReturnValue 134 + FunctionEnd 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 new file mode 100644 index 0000000..4e2e886 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out @@ -0,0 +1,370 @@ +hlsl.calculatelodunclamped.dx10.frag +ERROR: 0:28: '' : unimplemented: CalculateLevelOfDetailUnclamped +ERROR: 0:29: '' : unimplemented: CalculateLevelOfDetailUnclamped +ERROR: 0:30: '' : unimplemented: CalculateLevelOfDetailUnclamped +ERROR: 0:32: '' : unimplemented: CalculateLevelOfDetailUnclamped +ERROR: 0:33: '' : unimplemented: CalculateLevelOfDetailUnclamped +ERROR: 0:34: '' : unimplemented: CalculateLevelOfDetailUnclamped +ERROR: 0:36: '' : unimplemented: CalculateLevelOfDetailUnclamped +ERROR: 0:37: '' : unimplemented: CalculateLevelOfDetailUnclamped +ERROR: 0:38: '' : unimplemented: CalculateLevelOfDetailUnclamped +ERROR: 9 compilation errors. No code generated. + + +Shader version: 450 +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}) +0:24 Function Parameters: +0:? Sequence +0:28 Sequence +0:28 move second child to first child ( temp float) +0:28 'txval10' ( temp float) +0:28 direct index ( temp float) +0:? textureQueryLod ( temp float) +0:28 Construct combined texture-sampler ( temp sampler1DArray) +0:28 'g_tTex1df4a' (layout( binding=1) uniform texture1DArray) +0:28 'g_sSamp' (layout( binding=0) uniform sampler) +0:28 Constant: +0:28 0.100000 +0:28 Constant: +0:28 0 (const int) +0:29 Sequence +0:29 move second child to first child ( temp float) +0:29 'txval11' ( temp float) +0:29 direct index ( temp float) +0:? textureQueryLod ( temp float) +0:29 Construct combined texture-sampler ( temp isampler1DArray) +0:29 'g_tTex1di4a' ( uniform itexture1DArray) +0:29 'g_sSamp' (layout( binding=0) uniform sampler) +0:29 Constant: +0:29 0.200000 +0:29 Constant: +0:29 0 (const int) +0:30 Sequence +0:30 move second child to first child ( temp float) +0:30 'txval12' ( temp float) +0:30 direct index ( temp float) +0:? textureQueryLod ( temp float) +0:30 Construct combined texture-sampler ( temp usampler1DArray) +0:30 'g_tTex1du4a' ( uniform utexture1DArray) +0:30 'g_sSamp' (layout( binding=0) uniform sampler) +0:30 Constant: +0:30 0.300000 +0:30 Constant: +0:30 0 (const int) +0:32 Sequence +0:32 move second child to first child ( temp float) +0:32 'txval20' ( temp float) +0:32 direct index ( temp float) +0:? textureQueryLod ( temp float) +0:32 Construct combined texture-sampler ( temp sampler2DArray) +0:32 'g_tTex2df4a' ( uniform texture2DArray) +0:32 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:32 Constant: +0:32 0 (const int) +0:33 Sequence +0:33 move second child to first child ( temp float) +0:33 'txval21' ( temp float) +0:33 direct index ( temp float) +0:? textureQueryLod ( temp float) +0:33 Construct combined texture-sampler ( temp isampler2DArray) +0:33 'g_tTex2di4a' ( uniform itexture2DArray) +0:33 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:33 Constant: +0:33 0 (const int) +0:34 Sequence +0:34 move second child to first child ( temp float) +0:34 'txval22' ( temp float) +0:34 direct index ( temp float) +0:? textureQueryLod ( temp float) +0:34 Construct combined texture-sampler ( temp usampler2DArray) +0:34 'g_tTex2du4a' ( uniform utexture2DArray) +0:34 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:34 Constant: +0:34 0 (const int) +0:36 Sequence +0:36 move second child to first child ( temp float) +0:36 'txval40' ( temp float) +0:36 direct index ( temp float) +0:? textureQueryLod ( temp float) +0:36 Construct combined texture-sampler ( temp samplerCubeArray) +0:36 'g_tTexcdf4a' ( uniform textureCubeArray) +0:36 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:36 Constant: +0:36 0 (const int) +0:37 Sequence +0:37 move second child to first child ( temp float) +0:37 'txval41' ( temp float) +0:37 direct index ( temp float) +0:? textureQueryLod ( temp float) +0:37 Construct combined texture-sampler ( temp isamplerCubeArray) +0:37 'g_tTexcdi4a' ( uniform itextureCubeArray) +0:37 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:37 Constant: +0:37 0 (const int) +0:38 Sequence +0:38 move second child to first child ( temp float) +0:38 'txval42' ( temp float) +0:38 direct index ( temp float) +0:? textureQueryLod ( temp float) +0:38 Construct combined texture-sampler ( temp usamplerCubeArray) +0:38 'g_tTexcdu4a' ( uniform utextureCubeArray) +0:38 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:38 Constant: +0:38 0 (const int) +0:40 move second child to first child ( temp 4-component vector of float) +0:40 Color: direct index for structure ( temp 4-component vector of float) +0:40 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:40 Constant: +0:40 0 (const int) +0:40 Constant: +0:40 1.000000 +0:40 1.000000 +0:40 1.000000 +0:40 1.000000 +0:41 move second child to first child ( temp float) +0:41 Depth: direct index for structure ( temp float) +0:41 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:41 Constant: +0:41 1 (const int) +0:41 Constant: +0:41 1.000000 +0:43 Branch: Return with expression +0:43 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:24 Function Definition: main( ( temp void) +0:24 Function Parameters: +0:? Sequence +0:24 Sequence +0:24 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1DArray) +0:? 'g_tTex1df4' (layout( binding=0) 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) + + +Linked fragment stage: + + +Shader version: 450 +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}) +0:24 Function Parameters: +0:? Sequence +0:28 Sequence +0:28 move second child to first child ( temp float) +0:28 'txval10' ( temp float) +0:28 direct index ( temp float) +0:? textureQueryLod ( temp float) +0:28 Construct combined texture-sampler ( temp sampler1DArray) +0:28 'g_tTex1df4a' (layout( binding=1) uniform texture1DArray) +0:28 'g_sSamp' (layout( binding=0) uniform sampler) +0:28 Constant: +0:28 0.100000 +0:28 Constant: +0:28 0 (const int) +0:29 Sequence +0:29 move second child to first child ( temp float) +0:29 'txval11' ( temp float) +0:29 direct index ( temp float) +0:? textureQueryLod ( temp float) +0:29 Construct combined texture-sampler ( temp isampler1DArray) +0:29 'g_tTex1di4a' ( uniform itexture1DArray) +0:29 'g_sSamp' (layout( binding=0) uniform sampler) +0:29 Constant: +0:29 0.200000 +0:29 Constant: +0:29 0 (const int) +0:30 Sequence +0:30 move second child to first child ( temp float) +0:30 'txval12' ( temp float) +0:30 direct index ( temp float) +0:? textureQueryLod ( temp float) +0:30 Construct combined texture-sampler ( temp usampler1DArray) +0:30 'g_tTex1du4a' ( uniform utexture1DArray) +0:30 'g_sSamp' (layout( binding=0) uniform sampler) +0:30 Constant: +0:30 0.300000 +0:30 Constant: +0:30 0 (const int) +0:32 Sequence +0:32 move second child to first child ( temp float) +0:32 'txval20' ( temp float) +0:32 direct index ( temp float) +0:? textureQueryLod ( temp float) +0:32 Construct combined texture-sampler ( temp sampler2DArray) +0:32 'g_tTex2df4a' ( uniform texture2DArray) +0:32 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:32 Constant: +0:32 0 (const int) +0:33 Sequence +0:33 move second child to first child ( temp float) +0:33 'txval21' ( temp float) +0:33 direct index ( temp float) +0:? textureQueryLod ( temp float) +0:33 Construct combined texture-sampler ( temp isampler2DArray) +0:33 'g_tTex2di4a' ( uniform itexture2DArray) +0:33 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:33 Constant: +0:33 0 (const int) +0:34 Sequence +0:34 move second child to first child ( temp float) +0:34 'txval22' ( temp float) +0:34 direct index ( temp float) +0:? textureQueryLod ( temp float) +0:34 Construct combined texture-sampler ( temp usampler2DArray) +0:34 'g_tTex2du4a' ( uniform utexture2DArray) +0:34 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:34 Constant: +0:34 0 (const int) +0:36 Sequence +0:36 move second child to first child ( temp float) +0:36 'txval40' ( temp float) +0:36 direct index ( temp float) +0:? textureQueryLod ( temp float) +0:36 Construct combined texture-sampler ( temp samplerCubeArray) +0:36 'g_tTexcdf4a' ( uniform textureCubeArray) +0:36 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:36 Constant: +0:36 0 (const int) +0:37 Sequence +0:37 move second child to first child ( temp float) +0:37 'txval41' ( temp float) +0:37 direct index ( temp float) +0:? textureQueryLod ( temp float) +0:37 Construct combined texture-sampler ( temp isamplerCubeArray) +0:37 'g_tTexcdi4a' ( uniform itextureCubeArray) +0:37 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:37 Constant: +0:37 0 (const int) +0:38 Sequence +0:38 move second child to first child ( temp float) +0:38 'txval42' ( temp float) +0:38 direct index ( temp float) +0:? textureQueryLod ( temp float) +0:38 Construct combined texture-sampler ( temp usamplerCubeArray) +0:38 'g_tTexcdu4a' ( uniform utextureCubeArray) +0:38 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:38 Constant: +0:38 0 (const int) +0:40 move second child to first child ( temp 4-component vector of float) +0:40 Color: direct index for structure ( temp 4-component vector of float) +0:40 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:40 Constant: +0:40 0 (const int) +0:40 Constant: +0:40 1.000000 +0:40 1.000000 +0:40 1.000000 +0:40 1.000000 +0:41 move second child to first child ( temp float) +0:41 Depth: direct index for structure ( temp float) +0:41 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:41 Constant: +0:41 1 (const int) +0:41 Constant: +0:41 1.000000 +0:43 Branch: Return with expression +0:43 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:24 Function Definition: main( ( temp void) +0:24 Function Parameters: +0:? Sequence +0:24 Sequence +0:24 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1DArray) +0:? 'g_tTex1df4' (layout( binding=0) 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) + +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 new file mode 100755 index 0000000..d17251d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.cast.frag.out @@ -0,0 +1,133 @@ +hlsl.cast.frag +Shader version: 450 +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:? Sequence +0:3 Branch: Return with expression +0:3 add ( temp 4-component vector of float) +0:3 add ( temp 4-component vector of float) +0:3 Construct vec4 ( temp 4-component vector of float) +0:3 'input' ( in 4-component vector of float) +0:3 Convert int to float ( temp 4-component vector of float) +0:3 Convert float to int ( temp 4-component vector of int) +0:3 'input' ( in 4-component vector of float) +0:3 Constant: +0:3 1.198000 +0:3 1.198000 +0:3 1.198000 +0:3 1.198000 +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 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:? Linker Objects +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: 450 +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:? Sequence +0:3 Branch: Return with expression +0:3 add ( temp 4-component vector of float) +0:3 add ( temp 4-component vector of float) +0:3 Construct vec4 ( temp 4-component vector of float) +0:3 'input' ( in 4-component vector of float) +0:3 Convert int to float ( temp 4-component vector of float) +0:3 Convert float to int ( temp 4-component vector of int) +0:3 'input' ( in 4-component vector of float) +0:3 Constant: +0:3 1.198000 +0:3 1.198000 +0:3 1.198000 +0:3 1.198000 +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 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:? Linker Objects +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 39 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "PixelShaderFunction" 32 35 + ExecutionMode 4 OriginUpperLeft + Name 4 "PixelShaderFunction" + Name 11 "@PixelShaderFunction(vf4;" + Name 10 "input" + 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: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 9: TypeFunction 7(fvec4) 8(ptr) + 20: TypeInt 32 1 + 21: TypeVector 20(int) 4 + 25: 6(float) Constant 1067014160 + 26: 7(fvec4) ConstantComposite 25 25 25 25 + 31: TypePointer Input 7(fvec4) + 32(input): 31(ptr) Variable Input + 34: TypePointer Output 7(fvec4) +35(@entryPointOutput): 34(ptr) Variable Output +4(PixelShaderFunction): 2 Function None 3 + 5: Label + 30(input): 8(ptr) Variable Function + 36(param): 8(ptr) Variable Function + 33: 7(fvec4) Load 32(input) + Store 30(input) 33 + 37: 7(fvec4) Load 30(input) + Store 36(param) 37 + 38: 7(fvec4) FunctionCall 11(@PixelShaderFunction(vf4;) 36(param) + Store 35(@entryPointOutput) 38 + Return + FunctionEnd +11(@PixelShaderFunction(vf4;): 7(fvec4) Function None 9 + 10(input): 8(ptr) FunctionParameter + 12: Label + 13: 7(fvec4) Load 10(input) + 14: 6(float) CompositeExtract 13 0 + 15: 6(float) CompositeExtract 13 1 + 16: 6(float) CompositeExtract 13 2 + 17: 6(float) CompositeExtract 13 3 + 18: 7(fvec4) CompositeConstruct 14 15 16 17 + 19: 7(fvec4) Load 10(input) + 22: 21(ivec4) ConvertFToS 19 + 23: 7(fvec4) ConvertSToF 22 + 24: 7(fvec4) FAdd 18 23 + 27: 7(fvec4) FAdd 24 26 + ReturnValue 27 + 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 new file mode 100644 index 0000000..dacdb77 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.comparison.vec.frag.out @@ -0,0 +1,415 @@ +hlsl.comparison.vec.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:4 Function Definition: Bug1(vf4; ( temp void) +0:4 Function Parameters: +0:4 'a' ( in 4-component vector of float) +0:? Sequence +0:5 Sequence +0:5 move second child to first child ( temp 4-component vector of float) +0:5 'v04' ( temp 4-component vector of float) +0:? Constant: +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:6 Sequence +0:6 move second child to first child ( temp float) +0:6 'v01' ( temp float) +0:6 Constant: +0:6 0.000000 +0:8 Sequence +0:8 move second child to first child ( temp 4-component vector of bool) +0:8 'r00' ( temp 4-component vector of bool) +0:8 Equal ( temp 4-component vector of bool) +0:8 'a' ( in 4-component vector of float) +0:8 'v04' ( temp 4-component vector of float) +0:9 Sequence +0:9 move second child to first child ( temp 4-component vector of bool) +0:9 'r01' ( temp 4-component vector of bool) +0:9 NotEqual ( temp 4-component vector of bool) +0:9 'a' ( in 4-component vector of float) +0:9 'v04' ( temp 4-component vector of float) +0:10 Sequence +0:10 move second child to first child ( temp 4-component vector of bool) +0:10 'r02' ( temp 4-component vector of bool) +0:10 Compare Less Than ( temp 4-component vector of bool) +0:10 'a' ( in 4-component vector of float) +0:10 'v04' ( temp 4-component vector of float) +0:11 Sequence +0:11 move second child to first child ( temp 4-component vector of bool) +0:11 'r03' ( temp 4-component vector of bool) +0:11 Compare Greater Than ( temp 4-component vector of bool) +0:11 'a' ( in 4-component vector of float) +0:11 'v04' ( temp 4-component vector of float) +0:13 Sequence +0:13 move second child to first child ( temp 4-component vector of bool) +0:13 'r10' ( temp 4-component vector of bool) +0:13 Equal ( temp 4-component vector of bool) +0:13 'a' ( in 4-component vector of float) +0:13 Construct vec4 ( in 4-component vector of float) +0:13 'v01' ( temp float) +0:14 Sequence +0:14 move second child to first child ( temp 4-component vector of bool) +0:14 'r11' ( temp 4-component vector of bool) +0:14 NotEqual ( temp 4-component vector of bool) +0:14 'a' ( in 4-component vector of float) +0:14 Construct vec4 ( in 4-component vector of float) +0:14 'v01' ( temp float) +0:15 Sequence +0:15 move second child to first child ( temp 4-component vector of bool) +0:15 'r12' ( temp 4-component vector of bool) +0:15 Compare Less Than ( temp 4-component vector of bool) +0:15 'a' ( in 4-component vector of float) +0:15 Construct vec4 ( in 4-component vector of float) +0:15 'v01' ( temp float) +0:16 Sequence +0:16 move second child to first child ( temp 4-component vector of bool) +0:16 'r13' ( temp 4-component vector of bool) +0:16 Compare Greater Than ( temp 4-component vector of bool) +0:16 'a' ( in 4-component vector of float) +0:16 Construct vec4 ( in 4-component vector of float) +0:16 'v01' ( temp float) +0:18 Sequence +0:18 move second child to first child ( temp 4-component vector of bool) +0:18 'r20' ( temp 4-component vector of bool) +0:18 Equal ( temp 4-component vector of bool) +0:18 Construct vec4 ( in 4-component vector of float) +0:18 'v01' ( temp float) +0:18 'a' ( in 4-component vector of float) +0:19 Sequence +0:19 move second child to first child ( temp 4-component vector of bool) +0:19 'r21' ( temp 4-component vector of bool) +0:19 NotEqual ( temp 4-component vector of bool) +0:19 Construct vec4 ( in 4-component vector of float) +0:19 'v01' ( temp float) +0:19 'a' ( in 4-component vector of float) +0:20 Sequence +0:20 move second child to first child ( temp 4-component vector of bool) +0:20 'r22' ( temp 4-component vector of bool) +0:20 Compare Less Than ( temp 4-component vector of bool) +0:20 Construct vec4 ( in 4-component vector of float) +0:20 'v01' ( temp float) +0:20 'a' ( in 4-component vector of float) +0:21 Sequence +0:21 move second child to first child ( temp 4-component vector of bool) +0:21 'r23' ( temp 4-component vector of bool) +0:21 Compare Greater Than ( temp 4-component vector of bool) +0:21 Construct vec4 ( in 4-component vector of float) +0:21 'v01' ( temp float) +0:21 'a' ( in 4-component vector of float) +0:30 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color}) +0:30 Function Parameters: +0:? Sequence +0:32 move second child to first child ( temp 4-component vector of float) +0:32 Color: direct index for structure ( temp 4-component vector of float) +0:32 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:32 Constant: +0:32 0 (const int) +0:32 Constant: +0:32 0.000000 +0:32 0.000000 +0:32 0.000000 +0:32 0.000000 +0:33 Branch: Return with expression +0:33 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:30 Function Definition: main( ( temp void) +0:30 Function Parameters: +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: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) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:4 Function Definition: Bug1(vf4; ( temp void) +0:4 Function Parameters: +0:4 'a' ( in 4-component vector of float) +0:? Sequence +0:5 Sequence +0:5 move second child to first child ( temp 4-component vector of float) +0:5 'v04' ( temp 4-component vector of float) +0:? Constant: +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:6 Sequence +0:6 move second child to first child ( temp float) +0:6 'v01' ( temp float) +0:6 Constant: +0:6 0.000000 +0:8 Sequence +0:8 move second child to first child ( temp 4-component vector of bool) +0:8 'r00' ( temp 4-component vector of bool) +0:8 Equal ( temp 4-component vector of bool) +0:8 'a' ( in 4-component vector of float) +0:8 'v04' ( temp 4-component vector of float) +0:9 Sequence +0:9 move second child to first child ( temp 4-component vector of bool) +0:9 'r01' ( temp 4-component vector of bool) +0:9 NotEqual ( temp 4-component vector of bool) +0:9 'a' ( in 4-component vector of float) +0:9 'v04' ( temp 4-component vector of float) +0:10 Sequence +0:10 move second child to first child ( temp 4-component vector of bool) +0:10 'r02' ( temp 4-component vector of bool) +0:10 Compare Less Than ( temp 4-component vector of bool) +0:10 'a' ( in 4-component vector of float) +0:10 'v04' ( temp 4-component vector of float) +0:11 Sequence +0:11 move second child to first child ( temp 4-component vector of bool) +0:11 'r03' ( temp 4-component vector of bool) +0:11 Compare Greater Than ( temp 4-component vector of bool) +0:11 'a' ( in 4-component vector of float) +0:11 'v04' ( temp 4-component vector of float) +0:13 Sequence +0:13 move second child to first child ( temp 4-component vector of bool) +0:13 'r10' ( temp 4-component vector of bool) +0:13 Equal ( temp 4-component vector of bool) +0:13 'a' ( in 4-component vector of float) +0:13 Construct vec4 ( in 4-component vector of float) +0:13 'v01' ( temp float) +0:14 Sequence +0:14 move second child to first child ( temp 4-component vector of bool) +0:14 'r11' ( temp 4-component vector of bool) +0:14 NotEqual ( temp 4-component vector of bool) +0:14 'a' ( in 4-component vector of float) +0:14 Construct vec4 ( in 4-component vector of float) +0:14 'v01' ( temp float) +0:15 Sequence +0:15 move second child to first child ( temp 4-component vector of bool) +0:15 'r12' ( temp 4-component vector of bool) +0:15 Compare Less Than ( temp 4-component vector of bool) +0:15 'a' ( in 4-component vector of float) +0:15 Construct vec4 ( in 4-component vector of float) +0:15 'v01' ( temp float) +0:16 Sequence +0:16 move second child to first child ( temp 4-component vector of bool) +0:16 'r13' ( temp 4-component vector of bool) +0:16 Compare Greater Than ( temp 4-component vector of bool) +0:16 'a' ( in 4-component vector of float) +0:16 Construct vec4 ( in 4-component vector of float) +0:16 'v01' ( temp float) +0:18 Sequence +0:18 move second child to first child ( temp 4-component vector of bool) +0:18 'r20' ( temp 4-component vector of bool) +0:18 Equal ( temp 4-component vector of bool) +0:18 Construct vec4 ( in 4-component vector of float) +0:18 'v01' ( temp float) +0:18 'a' ( in 4-component vector of float) +0:19 Sequence +0:19 move second child to first child ( temp 4-component vector of bool) +0:19 'r21' ( temp 4-component vector of bool) +0:19 NotEqual ( temp 4-component vector of bool) +0:19 Construct vec4 ( in 4-component vector of float) +0:19 'v01' ( temp float) +0:19 'a' ( in 4-component vector of float) +0:20 Sequence +0:20 move second child to first child ( temp 4-component vector of bool) +0:20 'r22' ( temp 4-component vector of bool) +0:20 Compare Less Than ( temp 4-component vector of bool) +0:20 Construct vec4 ( in 4-component vector of float) +0:20 'v01' ( temp float) +0:20 'a' ( in 4-component vector of float) +0:21 Sequence +0:21 move second child to first child ( temp 4-component vector of bool) +0:21 'r23' ( temp 4-component vector of bool) +0:21 Compare Greater Than ( temp 4-component vector of bool) +0:21 Construct vec4 ( in 4-component vector of float) +0:21 'v01' ( temp float) +0:21 'a' ( in 4-component vector of float) +0:30 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color}) +0:30 Function Parameters: +0:? Sequence +0:32 move second child to first child ( temp 4-component vector of float) +0:32 Color: direct index for structure ( temp 4-component vector of float) +0:32 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:32 Constant: +0:32 0 (const int) +0:32 Constant: +0:32 0.000000 +0:32 0.000000 +0:32 0.000000 +0:32 0.000000 +0:33 Branch: Return with expression +0:33 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:30 Function Definition: main( ( temp void) +0:30 Function Parameters: +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: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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 96 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 90 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 11 "Bug1(vf4;" + Name 10 "a" + Name 13 "PS_OUTPUT" + MemberName 13(PS_OUTPUT) 0 "Color" + Name 15 "@main(" + Name 17 "v04" + Name 21 "v01" + Name 25 "r00" + Name 29 "r01" + Name 33 "r02" + Name 37 "r03" + Name 41 "r10" + Name 46 "r11" + Name 51 "r12" + Name 56 "r13" + Name 61 "r20" + Name 66 "r21" + Name 71 "r22" + Name 76 "r23" + Name 82 "psout" + Name 90 "Color" + Name 93 "$Global" + MemberName 93($Global) 0 "uf4" + Name 95 "" + Decorate 90(Color) Location 0 + MemberDecorate 93($Global) 0 Offset 0 + Decorate 93($Global) Block + Decorate 95 DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 9: TypeFunction 2 8(ptr) + 13(PS_OUTPUT): TypeStruct 7(fvec4) + 14: TypeFunction 13(PS_OUTPUT) + 18: 6(float) Constant 0 + 19: 7(fvec4) ConstantComposite 18 18 18 18 + 20: TypePointer Function 6(float) + 22: TypeBool + 23: TypeVector 22(bool) 4 + 24: TypePointer Function 23(bvec4) + 81: TypePointer Function 13(PS_OUTPUT) + 83: TypeInt 32 1 + 84: 83(int) Constant 0 + 89: TypePointer Output 7(fvec4) + 90(Color): 89(ptr) Variable Output + 93($Global): TypeStruct 7(fvec4) + 94: TypePointer Uniform 93($Global) + 95: 94(ptr) Variable Uniform + 4(main): 2 Function None 3 + 5: Label + 91:13(PS_OUTPUT) FunctionCall 15(@main() + 92: 7(fvec4) CompositeExtract 91 0 + Store 90(Color) 92 + Return + FunctionEnd + 11(Bug1(vf4;): 2 Function None 9 + 10(a): 8(ptr) FunctionParameter + 12: Label + 17(v04): 8(ptr) Variable Function + 21(v01): 20(ptr) Variable Function + 25(r00): 24(ptr) Variable Function + 29(r01): 24(ptr) Variable Function + 33(r02): 24(ptr) Variable Function + 37(r03): 24(ptr) Variable Function + 41(r10): 24(ptr) Variable Function + 46(r11): 24(ptr) Variable Function + 51(r12): 24(ptr) Variable Function + 56(r13): 24(ptr) Variable Function + 61(r20): 24(ptr) Variable Function + 66(r21): 24(ptr) Variable Function + 71(r22): 24(ptr) Variable Function + 76(r23): 24(ptr) Variable Function + Store 17(v04) 19 + Store 21(v01) 18 + 26: 7(fvec4) Load 10(a) + 27: 7(fvec4) Load 17(v04) + 28: 23(bvec4) FOrdEqual 26 27 + Store 25(r00) 28 + 30: 7(fvec4) Load 10(a) + 31: 7(fvec4) Load 17(v04) + 32: 23(bvec4) FOrdNotEqual 30 31 + Store 29(r01) 32 + 34: 7(fvec4) Load 10(a) + 35: 7(fvec4) Load 17(v04) + 36: 23(bvec4) FOrdLessThan 34 35 + Store 33(r02) 36 + 38: 7(fvec4) Load 10(a) + 39: 7(fvec4) Load 17(v04) + 40: 23(bvec4) FOrdGreaterThan 38 39 + Store 37(r03) 40 + 42: 7(fvec4) Load 10(a) + 43: 6(float) Load 21(v01) + 44: 7(fvec4) CompositeConstruct 43 43 43 43 + 45: 23(bvec4) FOrdEqual 42 44 + Store 41(r10) 45 + 47: 7(fvec4) Load 10(a) + 48: 6(float) Load 21(v01) + 49: 7(fvec4) CompositeConstruct 48 48 48 48 + 50: 23(bvec4) FOrdNotEqual 47 49 + Store 46(r11) 50 + 52: 7(fvec4) Load 10(a) + 53: 6(float) Load 21(v01) + 54: 7(fvec4) CompositeConstruct 53 53 53 53 + 55: 23(bvec4) FOrdLessThan 52 54 + Store 51(r12) 55 + 57: 7(fvec4) Load 10(a) + 58: 6(float) Load 21(v01) + 59: 7(fvec4) CompositeConstruct 58 58 58 58 + 60: 23(bvec4) FOrdGreaterThan 57 59 + Store 56(r13) 60 + 62: 6(float) Load 21(v01) + 63: 7(fvec4) CompositeConstruct 62 62 62 62 + 64: 7(fvec4) Load 10(a) + 65: 23(bvec4) FOrdEqual 63 64 + Store 61(r20) 65 + 67: 6(float) Load 21(v01) + 68: 7(fvec4) CompositeConstruct 67 67 67 67 + 69: 7(fvec4) Load 10(a) + 70: 23(bvec4) FOrdNotEqual 68 69 + Store 66(r21) 70 + 72: 6(float) Load 21(v01) + 73: 7(fvec4) CompositeConstruct 72 72 72 72 + 74: 7(fvec4) Load 10(a) + 75: 23(bvec4) FOrdLessThan 73 74 + Store 71(r22) 75 + 77: 6(float) Load 21(v01) + 78: 7(fvec4) CompositeConstruct 77 77 77 77 + 79: 7(fvec4) Load 10(a) + 80: 23(bvec4) FOrdGreaterThan 78 79 + Store 76(r23) 80 + Return + FunctionEnd + 15(@main():13(PS_OUTPUT) Function None 14 + 16: Label + 82(psout): 81(ptr) Variable Function + 85: 8(ptr) AccessChain 82(psout) 84 + Store 85 19 + 86:13(PS_OUTPUT) Load 82(psout) + ReturnValue 86 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.conditional.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.conditional.frag.out new file mode 100755 index 0000000..cd0abf8 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.conditional.frag.out @@ -0,0 +1,402 @@ +hlsl.conditional.frag +Shader version: 450 +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:? 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 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:? 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 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:? Linker Objects +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: 450 +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:? 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 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:? 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 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:? Linker Objects +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 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "PixelShaderFunction" 93 96 + ExecutionMode 4 OriginUpperLeft + 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 + 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 +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 + Return + FunctionEnd +11(@PixelShaderFunction(vf4;): 7(fvec4) Function None 9 + 10(input): 8(ptr) FunctionParameter + 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 + 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 new file mode 100644 index 0000000..eed1694 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.constructexpr.frag.out @@ -0,0 +1,163 @@ +hlsl.constructexpr.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:4 Function Definition: @main( ( temp structure{ temp 4-component vector of float color}) +0:4 Function Parameters: +0:? Sequence +0:6 Constant: +0:6 3 (const int) +0:7 Constant: +0:7 4 (const int) +0:8 Constant: +0:8 5 (const int) +0:9 Constant: +0:9 6 (const int) +0:10 Constant: +0:10 7 (const int) +0:11 Constant: +0:11 8 (const int) +0:12 Comma ( temp 2-component vector of float) +0:? Constant: +0:? 9.000000 +0:? 10.000000 +0:? Constant: +0:? 11.000000 +0:? 12.000000 +0:15 move second child to first child ( temp 4-component vector of float) +0:15 color: direct index for structure ( temp 4-component vector of float) +0:15 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:15 Constant: +0:15 0 (const int) +0:15 Constant: +0:15 1.000000 +0:15 1.000000 +0:15 1.000000 +0:15 1.000000 +0:16 Branch: Return with expression +0:16 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:4 Function Definition: main( ( temp void) +0:4 Function Parameters: +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: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) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:4 Function Definition: @main( ( temp structure{ temp 4-component vector of float color}) +0:4 Function Parameters: +0:? Sequence +0:6 Constant: +0:6 3 (const int) +0:7 Constant: +0:7 4 (const int) +0:8 Constant: +0:8 5 (const int) +0:9 Constant: +0:9 6 (const int) +0:10 Constant: +0:10 7 (const int) +0:11 Constant: +0:11 8 (const int) +0:12 Comma ( temp 2-component vector of float) +0:? Constant: +0:? 9.000000 +0:? 10.000000 +0:? Constant: +0:? 11.000000 +0:? 12.000000 +0:15 move second child to first child ( temp 4-component vector of float) +0:15 color: direct index for structure ( temp 4-component vector of float) +0:15 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:15 Constant: +0:15 0 (const int) +0:15 Constant: +0:15 1.000000 +0:15 1.000000 +0:15 1.000000 +0:15 1.000000 +0:16 Branch: Return with expression +0:16 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:4 Function Definition: main( ( temp void) +0:4 Function Parameters: +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: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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 40 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 37 + ExecutionMode 4 OriginUpperLeft + 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 + 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: TypeInt 32 1 + 13: 12(int) Constant 3 + 14: 12(int) Constant 4 + 15: 12(int) Constant 5 + 16: 12(int) Constant 6 + 17: 12(int) Constant 7 + 18: 12(int) Constant 8 + 19: TypeVector 6(float) 2 + 20: 6(float) Constant 1091567616 + 21: 6(float) Constant 1092616192 + 22: 19(fvec2) ConstantComposite 20 21 + 23: 6(float) Constant 1093664768 + 24: 6(float) Constant 1094713344 + 25: 19(fvec2) ConstantComposite 23 24 + 26: TypePointer Function 8(PS_OUTPUT) + 28: 12(int) Constant 0 + 29: 6(float) Constant 1065353216 + 30: 7(fvec4) ConstantComposite 29 29 29 29 + 31: TypePointer Function 7(fvec4) + 36: TypePointer Output 7(fvec4) + 37(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 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 27(ps_output): 26(ptr) Variable Function + 32: 31(ptr) AccessChain 27(ps_output) 28 + Store 32 30 + 33:8(PS_OUTPUT) Load 27(ps_output) + ReturnValue 33 + 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 new file mode 100644 index 0000000..24e6982 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.deadFunctionMissingBody.vert.out @@ -0,0 +1,32 @@ +hlsl.deadFunctionMissingBody.vert +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 18 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 16 + Name 4 "main" + Name 9 "@main(" + Name 16 "@entryPointOutput" + Decorate 16(@entryPointOutput) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypeFunction 7(fvec4) + 11: 6(float) Constant 0 + 12: 7(fvec4) ConstantComposite 11 11 11 11 + 15: TypePointer Output 7(fvec4) +16(@entryPointOutput): 15(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 17: 7(fvec4) FunctionCall 9(@main() + Store 16(@entryPointOutput) 17 + Return + FunctionEnd + 9(@main(): 7(fvec4) Function None 8 + 10: Label + ReturnValue 12 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.depthGreater.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.depthGreater.frag.out new file mode 100755 index 0000000..8ff7e73 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.depthGreater.frag.out @@ -0,0 +1,93 @@ +hlsl.depthGreater.frag +Shader version: 450 +gl_FragCoord origin is upper left +using depth_greater +0:? Sequence +0:2 Function Definition: @PixelShaderFunction(f1; ( temp void) +0:2 Function Parameters: +0:2 'depth' ( out float) +0:? Sequence +0:3 move second child to first child ( temp float) +0:3 'depth' ( out float) +0:3 Constant: +0:3 0.200000 +0:2 Function Definition: PixelShaderFunction( ( temp void) +0:2 Function Parameters: +0:? Sequence +0:2 Function Call: @PixelShaderFunction(f1; ( temp void) +0:? 'depth' ( temp float) +0:2 move second child to first child ( temp float) +0:? 'depth' ( out float FragDepth) +0:? 'depth' ( temp float) +0:? Linker Objects +0:? 'depth' ( out float FragDepth) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +using depth_greater +0:? Sequence +0:2 Function Definition: @PixelShaderFunction(f1; ( temp void) +0:2 Function Parameters: +0:2 'depth' ( out float) +0:? Sequence +0:3 move second child to first child ( temp float) +0:3 'depth' ( out float) +0:3 Constant: +0:3 0.200000 +0:2 Function Definition: PixelShaderFunction( ( temp void) +0:2 Function Parameters: +0:? Sequence +0:2 Function Call: @PixelShaderFunction(f1; ( temp void) +0:? 'depth' ( temp float) +0:2 move second child to first child ( temp float) +0:? 'depth' ( out float FragDepth) +0:? 'depth' ( temp float) +0:? Linker Objects +0:? 'depth' ( out float FragDepth) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 20 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "PixelShaderFunction" 18 + ExecutionMode 4 OriginUpperLeft + ExecutionMode 4 DepthGreater + Name 4 "PixelShaderFunction" + Name 10 "@PixelShaderFunction(f1;" + Name 9 "depth" + Name 13 "depth" + Name 14 "param" + Name 18 "depth" + Decorate 18(depth) BuiltIn FragDepth + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypePointer Function 6(float) + 8: TypeFunction 2 7(ptr) + 12: 6(float) Constant 1045220557 + 17: TypePointer Output 6(float) + 18(depth): 17(ptr) Variable Output +4(PixelShaderFunction): 2 Function None 3 + 5: Label + 13(depth): 7(ptr) Variable Function + 14(param): 7(ptr) Variable Function + 15: 2 FunctionCall 10(@PixelShaderFunction(f1;) 14(param) + 16: 6(float) Load 14(param) + Store 13(depth) 16 + 19: 6(float) Load 13(depth) + Store 18(depth) 19 + Return + FunctionEnd +10(@PixelShaderFunction(f1;): 2 Function None 8 + 9(depth): 7(ptr) FunctionParameter + 11: Label + Store 9(depth) 12 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.depthLess.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.depthLess.frag.out new file mode 100755 index 0000000..ef81b4a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.depthLess.frag.out @@ -0,0 +1,74 @@ +hlsl.depthLess.frag +Shader version: 450 +gl_FragCoord origin is upper left +using depth_less +0:? Sequence +0:2 Function Definition: @PixelShaderFunction( ( temp float) +0:2 Function Parameters: +0:? Sequence +0:3 Branch: Return with expression +0:3 Constant: +0:3 0.200000 +0:2 Function Definition: PixelShaderFunction( ( temp void) +0:2 Function Parameters: +0:? Sequence +0:2 move second child to first child ( temp float) +0:? '@entryPointOutput' ( out float FragDepth) +0:2 Function Call: @PixelShaderFunction( ( temp float) +0:? Linker Objects +0:? '@entryPointOutput' ( out float FragDepth) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +using depth_less +0:? Sequence +0:2 Function Definition: @PixelShaderFunction( ( temp float) +0:2 Function Parameters: +0:? Sequence +0:3 Branch: Return with expression +0:3 Constant: +0:3 0.200000 +0:2 Function Definition: PixelShaderFunction( ( temp void) +0:2 Function Parameters: +0:? Sequence +0:2 move second child to first child ( temp float) +0:? '@entryPointOutput' ( out float FragDepth) +0:2 Function Call: @PixelShaderFunction( ( temp float) +0:? Linker Objects +0:? '@entryPointOutput' ( out float FragDepth) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 16 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "PixelShaderFunction" 14 + ExecutionMode 4 OriginUpperLeft + ExecutionMode 4 DepthLess + Name 4 "PixelShaderFunction" + Name 8 "@PixelShaderFunction(" + Name 14 "@entryPointOutput" + Decorate 14(@entryPointOutput) BuiltIn FragDepth + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeFunction 6(float) + 10: 6(float) Constant 1045220557 + 13: TypePointer Output 6(float) +14(@entryPointOutput): 13(ptr) Variable Output +4(PixelShaderFunction): 2 Function None 3 + 5: Label + 15: 6(float) FunctionCall 8(@PixelShaderFunction() + Store 14(@entryPointOutput) 15 + Return + FunctionEnd +8(@PixelShaderFunction(): 6(float) Function None 7 + 9: Label + ReturnValue 10 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.discard.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.discard.frag.out new file mode 100755 index 0000000..6baea90 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.discard.frag.out @@ -0,0 +1,186 @@ +hlsl.discard.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:2 Function Definition: foo(f1; ( temp void) +0:2 Function Parameters: +0:2 'f' ( in float) +0:? Sequence +0:3 Test condition and select ( temp void) +0:3 Condition +0:3 Compare Less Than ( temp bool) +0:3 'f' ( in float) +0:3 Constant: +0:3 1.000000 +0:3 true case +0:4 Branch: Kill +0:8 Function Definition: @PixelShaderFunction(vf4; ( temp void) +0:8 Function Parameters: +0:8 'input' ( in 4-component vector of float) +0:? Sequence +0:9 Function Call: foo(f1; ( temp void) +0:9 direct index ( temp float) +0:9 'input' ( in 4-component vector of float) +0:9 Constant: +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 true case +0:11 Branch: Kill +0:12 Sequence +0:12 move second child to first child ( temp float) +0:12 'f' ( temp float) +0:12 direct index ( temp float) +0:12 'input' ( in 4-component vector of float) +0:12 Constant: +0:12 0 (const int) +0:13 Branch: Kill +0:8 Function Definition: PixelShaderFunction( ( temp void) +0:8 Function Parameters: +0:? Sequence +0:8 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:8 Function Call: @PixelShaderFunction(vf4; ( temp void) +0:? 'input' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'input' (layout( location=0) in 4-component vector of float) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:2 Function Definition: foo(f1; ( temp void) +0:2 Function Parameters: +0:2 'f' ( in float) +0:? Sequence +0:3 Test condition and select ( temp void) +0:3 Condition +0:3 Compare Less Than ( temp bool) +0:3 'f' ( in float) +0:3 Constant: +0:3 1.000000 +0:3 true case +0:4 Branch: Kill +0:8 Function Definition: @PixelShaderFunction(vf4; ( temp void) +0:8 Function Parameters: +0:8 'input' ( in 4-component vector of float) +0:? Sequence +0:9 Function Call: foo(f1; ( temp void) +0:9 direct index ( temp float) +0:9 'input' ( in 4-component vector of float) +0:9 Constant: +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 true case +0:11 Branch: Kill +0:12 Sequence +0:12 move second child to first child ( temp float) +0:12 'f' ( temp float) +0:12 direct index ( temp float) +0:12 'input' ( in 4-component vector of float) +0:12 Constant: +0:12 0 (const int) +0:13 Branch: Kill +0:8 Function Definition: PixelShaderFunction( ( temp void) +0:8 Function Parameters: +0:? Sequence +0:8 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:8 Function Call: @PixelShaderFunction(vf4; ( temp void) +0:? 'input' ( temp 4-component vector of float) +0:? Linker Objects +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 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "PixelShaderFunction" 43 + ExecutionMode 4 OriginUpperLeft + 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 43 "input" + Name 45 "param" + Decorate 43(input) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypePointer Function 6(float) + 8: TypeFunction 2 7(ptr) + 12: TypeVector 6(float) 4 + 13: TypePointer Function 12(fvec4) + 14: TypeFunction 2 13(ptr) + 19: 6(float) Constant 1065353216 + 20: TypeBool + 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 +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) + Return + FunctionEnd + 10(foo(f1;): 2 Function None 8 + 9(f): 7(ptr) FunctionParameter + 11: Label + 18: 6(float) Load 9(f) + 21: 20(bool) FOrdLessThan 18 19 + SelectionMerge 23 None + BranchConditional 21 22 23 + 22: Label + Kill + 23: Label + Return + FunctionEnd +16(@PixelShaderFunction(vf4;): 2 Function None 14 + 15(input): 13(ptr) FunctionParameter + 17: Label + 25(param): 7(ptr) Variable Function + 37(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 + Kill + 35: Label + 38: 7(ptr) AccessChain 15(input) 31 + 39: 6(float) Load 38 + Store 37(f) 39 + 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 new file mode 100755 index 0000000..35cf748 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.doLoop.frag.out @@ -0,0 +1,166 @@ +hlsl.doLoop.frag +Shader version: 450 +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:? Sequence +0:3 Loop with condition not tested first +0:3 Loop Condition +0:3 Constant: +0:3 false (const bool) +0:3 No loop body +0:4 Loop with condition not tested first +0:4 Loop Condition +0:4 Constant: +0:4 false (const bool) +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 Loop Body +0:5 Branch: Return with expression +0:5 'input' ( in 4-component vector of 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 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:? Linker Objects +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: 450 +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:? Sequence +0:3 Loop with condition not tested first +0:3 Loop Condition +0:3 Constant: +0:3 false (const bool) +0:3 No loop body +0:4 Loop with condition not tested first +0:4 Loop Condition +0:4 Constant: +0:4 false (const bool) +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 Loop Body +0:5 Branch: Return with expression +0:5 'input' ( in 4-component vector of 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 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:? Linker Objects +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 44 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "PixelShaderFunction" 37 40 + ExecutionMode 4 OriginUpperLeft + Name 4 "PixelShaderFunction" + Name 11 "@PixelShaderFunction(vf4;" + 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 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 9: TypeFunction 7(fvec4) 8(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 +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 + Return + FunctionEnd +11(@PixelShaderFunction(vf4;): 7(fvec4) Function None 9 + 10(input): 8(ptr) FunctionParameter + 12: Label + Branch 13 + 13: Label + LoopMerge 15 16 None + Branch 14 + 14: Label + Branch 16 + 16: Label + BranchConditional 18 13 15 + 15: Label + Branch 19 + 19: Label + LoopMerge 21 22 None + Branch 20 + 20: Label + Branch 22 + 22: Label + BranchConditional 18 19 21 + 21: Label + Branch 23 + 23: Label + LoopMerge 25 26 None + Branch 24 + 24: Label + 27: 7(fvec4) Load 10(input) + ReturnValue 27 + 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 + 25: Label + 34: 7(fvec4) Undef + ReturnValue 34 + 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 new file mode 100644 index 0000000..e0da985 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.emptystructreturn.frag.out @@ -0,0 +1,101 @@ +hlsl.emptystructreturn.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:10 Function Definition: @main(struct-ps_in1; ( temp structure{}) +0:10 Function Parameters: +0:10 'i' ( in structure{}) +0:? Sequence +0:12 Branch: Return with expression +0:12 'o' ( temp structure{}) +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:? '@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 +gl_FragCoord origin is upper left +0:? Sequence +0:10 Function Definition: @main(struct-ps_in1; ( temp structure{}) +0:10 Function Parameters: +0:10 'i' ( in structure{}) +0:? Sequence +0:12 Branch: Return with expression +0:12 'o' ( temp structure{}) +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:? '@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 +// Id's are bound by 27 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 20 23 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 6 "ps_in" + Name 8 "ps_out" + Name 11 "@main(struct-ps_in1;" + Name 10 "i" + Name 14 "o" + Name 18 "i" + Name 20 "i" + Name 23 "@entryPointOutput" + Name 24 "param" + Decorate 20(i) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6(ps_in): TypeStruct + 7: TypePointer Function 6(ps_in) + 8(ps_out): TypeStruct + 9: TypeFunction 8(ps_out) 7(ptr) + 13: TypePointer Function 8(ps_out) + 19: TypePointer Input 6(ps_in) + 20(i): 19(ptr) Variable Input + 22: TypePointer Output 8(ps_out) +23(@entryPointOutput): 22(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 18(i): 7(ptr) Variable Function + 24(param): 7(ptr) Variable Function + 21: 6(ps_in) Load 20(i) + Store 18(i) 21 + 25: 6(ps_in) Load 18(i) + Store 24(param) 25 + 26: 8(ps_out) FunctionCall 11(@main(struct-ps_in1;) 24(param) + Store 23(@entryPointOutput) 26 + Return + FunctionEnd +11(@main(struct-ps_in1;): 8(ps_out) Function None 9 + 10(i): 7(ptr) FunctionParameter + 12: Label + 14(o): 13(ptr) Variable Function + 15: 8(ps_out) Load 14(o) + ReturnValue 15 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.emptystructreturn.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.emptystructreturn.vert.out new file mode 100644 index 0000000..ff89352 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.emptystructreturn.vert.out @@ -0,0 +1,98 @@ +hlsl.emptystructreturn.vert +Shader version: 450 +0:? Sequence +0:10 Function Definition: @main(struct-vs_in1; ( temp structure{}) +0:10 Function Parameters: +0:10 'i' ( in structure{}) +0:? Sequence +0:12 Branch: Return with expression +0:12 'o' ( temp structure{}) +0:10 Function Definition: main( ( temp void) +0:10 Function Parameters: +0:? Sequence +0:10 Sequence +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:? Linker Objects +0:? '@entryPointOutput' (layout( location=0) out structure{}) + + +Linked vertex stage: + + +Shader version: 450 +0:? Sequence +0:10 Function Definition: @main(struct-vs_in1; ( temp structure{}) +0:10 Function Parameters: +0:10 'i' ( in structure{}) +0:? Sequence +0:12 Branch: Return with expression +0:12 'o' ( temp structure{}) +0:10 Function Definition: main( ( temp void) +0:10 Function Parameters: +0:? Sequence +0:10 Sequence +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:? Linker Objects +0:? '@entryPointOutput' (layout( location=0) out structure{}) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 27 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 20 23 + Name 4 "main" + Name 6 "vs_in" + Name 8 "vs_out" + Name 11 "@main(struct-vs_in1;" + Name 10 "i" + Name 14 "o" + Name 18 "i" + Name 20 "i" + Name 23 "@entryPointOutput" + Name 24 "param" + Decorate 23(@entryPointOutput) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6(vs_in): TypeStruct + 7: TypePointer Function 6(vs_in) + 8(vs_out): TypeStruct + 9: TypeFunction 8(vs_out) 7(ptr) + 13: TypePointer Function 8(vs_out) + 19: TypePointer Input 6(vs_in) + 20(i): 19(ptr) Variable Input + 22: TypePointer Output 8(vs_out) +23(@entryPointOutput): 22(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 18(i): 7(ptr) Variable Function + 24(param): 7(ptr) Variable Function + 21: 6(vs_in) Load 20(i) + Store 18(i) 21 + 25: 6(vs_in) Load 18(i) + Store 24(param) 25 + 26: 8(vs_out) FunctionCall 11(@main(struct-vs_in1;) 24(param) + Store 23(@entryPointOutput) 26 + Return + FunctionEnd +11(@main(struct-vs_in1;): 8(vs_out) Function None 9 + 10(i): 7(ptr) FunctionParameter + 12: Label + 14(o): 13(ptr) Variable Function + 15: 8(vs_out) Load 14(o) + ReturnValue 15 + FunctionEnd 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 new file mode 100755 index 0000000..7c15616 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.entry-in.frag.out @@ -0,0 +1,298 @@ +hlsl.entry-in.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:8 Function Definition: fun(struct-InParam-vf2-vf4-vi21; ( temp float) +0:8 Function Parameters: +0:8 'p' ( in structure{ temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2}) +0:? Sequence +0:9 Branch: Return with expression +0:9 add ( temp float) +0:9 direct index ( temp float) +0:9 v: direct index for structure ( temp 2-component vector of float) +0:9 'p' ( in structure{ temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2}) +0:9 Constant: +0:9 0 (const int) +0:9 Constant: +0:9 1 (const int) +0:9 direct index ( temp float) +0:9 fragCoord: direct index for structure ( temp 4-component vector of float) +0:9 'p' ( in structure{ temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2}) +0:9 Constant: +0:9 1 (const int) +0:9 Constant: +0:9 0 (const int) +0:13 Function Definition: @PixelShaderFunction(struct-InParam-vf2-vf4-vi21; ( temp 4-component vector of float) +0:13 Function Parameters: +0:13 'i' ( in structure{ temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2}) +0:? Sequence +0:15 move second child to first child ( temp structure{ temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2}) +0:15 'local' ( temp structure{ temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2}) +0:15 'i' ( in structure{ temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2}) +0:16 Sequence +0:16 move second child to first child ( temp float) +0:16 'ret1' ( temp float) +0:16 Function Call: fun(struct-InParam-vf2-vf4-vi21; ( temp float) +0:16 'local' ( temp structure{ temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2}) +0:17 Sequence +0:17 move second child to first child ( temp float) +0:17 'ret2' ( temp float) +0:17 Function Call: fun(struct-InParam-vf2-vf4-vi21; ( temp float) +0:17 'i' ( in structure{ temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2}) +0:19 Branch: Return with expression +0:19 vector-scale ( temp 4-component vector of float) +0:19 vector-scale ( temp 4-component vector of float) +0:19 fragCoord: direct index for structure ( temp 4-component vector of float) +0:19 'local' ( temp structure{ temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2}) +0:19 Constant: +0:19 1 (const int) +0:19 'ret1' ( temp float) +0:19 'ret2' ( temp float) +0:13 Function Definition: PixelShaderFunction( ( temp void) +0:13 Function Parameters: +0:? Sequence +0:13 Sequence +0:13 move second child to first child ( temp 2-component vector of float) +0:13 v: direct index for structure ( temp 2-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 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: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: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: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) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:8 Function Definition: fun(struct-InParam-vf2-vf4-vi21; ( temp float) +0:8 Function Parameters: +0:8 'p' ( in structure{ temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2}) +0:? Sequence +0:9 Branch: Return with expression +0:9 add ( temp float) +0:9 direct index ( temp float) +0:9 v: direct index for structure ( temp 2-component vector of float) +0:9 'p' ( in structure{ temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2}) +0:9 Constant: +0:9 0 (const int) +0:9 Constant: +0:9 1 (const int) +0:9 direct index ( temp float) +0:9 fragCoord: direct index for structure ( temp 4-component vector of float) +0:9 'p' ( in structure{ temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2}) +0:9 Constant: +0:9 1 (const int) +0:9 Constant: +0:9 0 (const int) +0:13 Function Definition: @PixelShaderFunction(struct-InParam-vf2-vf4-vi21; ( temp 4-component vector of float) +0:13 Function Parameters: +0:13 'i' ( in structure{ temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2}) +0:? Sequence +0:15 move second child to first child ( temp structure{ temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2}) +0:15 'local' ( temp structure{ temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2}) +0:15 'i' ( in structure{ temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2}) +0:16 Sequence +0:16 move second child to first child ( temp float) +0:16 'ret1' ( temp float) +0:16 Function Call: fun(struct-InParam-vf2-vf4-vi21; ( temp float) +0:16 'local' ( temp structure{ temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2}) +0:17 Sequence +0:17 move second child to first child ( temp float) +0:17 'ret2' ( temp float) +0:17 Function Call: fun(struct-InParam-vf2-vf4-vi21; ( temp float) +0:17 'i' ( in structure{ temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2}) +0:19 Branch: Return with expression +0:19 vector-scale ( temp 4-component vector of float) +0:19 vector-scale ( temp 4-component vector of float) +0:19 fragCoord: direct index for structure ( temp 4-component vector of float) +0:19 'local' ( temp structure{ temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2}) +0:19 Constant: +0:19 1 (const int) +0:19 'ret1' ( temp float) +0:19 'ret2' ( temp float) +0:13 Function Definition: PixelShaderFunction( ( temp void) +0:13 Function Parameters: +0:? Sequence +0:13 Sequence +0:13 move second child to first child ( temp 2-component vector of float) +0:13 v: direct index for structure ( temp 2-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 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: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: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: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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 77 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "PixelShaderFunction" 56 63 73 + ExecutionMode 4 OriginUpperLeft + Name 4 "PixelShaderFunction" + Name 11 "InParam" + MemberName 11(InParam) 0 "v" + MemberName 11(InParam) 1 "fragCoord" + MemberName 11(InParam) 2 "i2" + Name 15 "fun(struct-InParam-vf2-vf4-vi21;" + Name 14 "p" + Name 19 "@PixelShaderFunction(struct-InParam-vf2-vf4-vi21;" + Name 18 "i" + Name 34 "local" + Name 36 "ret1" + Name 37 "param" + 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 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 2 + 8: TypeVector 6(float) 4 + 9: TypeInt 32 1 + 10: TypeVector 9(int) 2 + 11(InParam): TypeStruct 7(fvec2) 8(fvec4) 10(ivec2) + 12: TypePointer Function 11(InParam) + 13: TypeFunction 6(float) 12(ptr) + 17: TypeFunction 8(fvec4) 12(ptr) + 21: 9(int) Constant 0 + 22: TypeInt 32 0 + 23: 22(int) Constant 1 + 24: TypePointer Function 6(float) + 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 +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 + Return + FunctionEnd +15(fun(struct-InParam-vf2-vf4-vi21;): 6(float) Function None 13 + 14(p): 12(ptr) FunctionParameter + 16: Label + 25: 24(ptr) AccessChain 14(p) 21 23 + 26: 6(float) Load 25 + 29: 24(ptr) AccessChain 14(p) 27 28 + 30: 6(float) Load 29 + 31: 6(float) FAdd 26 30 + ReturnValue 31 + FunctionEnd +19(@PixelShaderFunction(struct-InParam-vf2-vf4-vi21;): 8(fvec4) Function None 17 + 18(i): 12(ptr) FunctionParameter + 20: Label + 34(local): 12(ptr) Variable Function + 36(ret1): 24(ptr) Variable Function + 37(param): 12(ptr) Variable Function + 40(ret2): 24(ptr) Variable Function + 41(param): 12(ptr) Variable Function + 35: 11(InParam) Load 18(i) + Store 34(local) 35 + 38: 11(InParam) Load 34(local) + Store 37(param) 38 + 39: 6(float) FunctionCall 15(fun(struct-InParam-vf2-vf4-vi21;) 37(param) + Store 36(ret1) 39 + 42: 11(InParam) Load 18(i) + Store 41(param) 42 + 43: 6(float) FunctionCall 15(fun(struct-InParam-vf2-vf4-vi21;) 41(param) + Store 40(ret2) 43 + 45: 44(ptr) AccessChain 34(local) 27 + 46: 8(fvec4) Load 45 + 47: 6(float) Load 36(ret1) + 48: 8(fvec4) VectorTimesScalar 46 47 + 49: 6(float) Load 40(ret2) + 50: 8(fvec4) VectorTimesScalar 48 49 + ReturnValue 50 + FunctionEnd 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 new file mode 100755 index 0000000..f92605f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.entry-out.frag.out @@ -0,0 +1,399 @@ +hlsl.entry-out.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:7 Function Definition: fun(struct-OutParam-vf2-vi21; ( temp void) +0:7 Function Parameters: +0:7 'op' ( out structure{ temp 2-component vector of float v, temp 2-component vector of int i}) +0:? Sequence +0:8 move second child to first child ( temp 2-component vector of float) +0:8 v: direct index for structure ( temp 2-component vector of float) +0:8 'op' ( out structure{ temp 2-component vector of float v, temp 2-component vector of int i}) +0:8 Constant: +0:8 0 (const int) +0:8 Constant: +0:8 0.400000 +0:8 0.400000 +0:9 move second child to first child ( temp 2-component vector of int) +0:9 i: direct index for structure ( temp 2-component vector of int) +0:9 'op' ( out structure{ temp 2-component vector of float v, temp 2-component vector of int i}) +0:9 Constant: +0:9 1 (const int) +0:9 Constant: +0:9 7 (const int) +0:9 7 (const int) +0:13 Function Definition: @PixelShaderFunction(vf4;vf4;struct-OutParam-vf2-vi21;struct-OutParam-vf2-vi21; ( temp 4-component vector of float) +0:13 Function Parameters: +0:13 'input' ( in 4-component vector of float) +0:13 'out1' ( out 4-component vector of float) +0:13 'out2' ( out structure{ temp 2-component vector of float v, temp 2-component vector of int i}) +0:13 'out3' ( out structure{ temp 2-component vector of float v, temp 2-component vector of int i}) +0:? Sequence +0:14 move second child to first child ( temp 4-component vector of float) +0:14 'out1' ( out 4-component vector of float) +0:14 'input' ( in 4-component vector of float) +0:15 move second child to first child ( temp 2-component vector of float) +0:15 v: direct index for structure ( temp 2-component vector of float) +0:15 'out2' ( out structure{ temp 2-component vector of float v, temp 2-component vector of int i}) +0:15 Constant: +0:15 0 (const int) +0:15 Constant: +0:15 2.000000 +0:15 2.000000 +0:16 move second child to first child ( temp 2-component vector of int) +0:16 i: direct index for structure ( temp 2-component vector of int) +0:16 'out2' ( out structure{ temp 2-component vector of float v, temp 2-component vector of int i}) +0:16 Constant: +0:16 1 (const int) +0:16 Constant: +0:16 3 (const int) +0:16 3 (const int) +0:18 move second child to first child ( temp 2-component vector of float) +0:18 v: direct index for structure ( temp 2-component vector of float) +0:18 'local' ( temp structure{ temp 2-component vector of float v, temp 2-component vector of int i}) +0:18 Constant: +0:18 0 (const int) +0:18 Constant: +0:18 12.000000 +0:18 12.000000 +0:19 move second child to first child ( temp 2-component vector of int) +0:19 i: direct index for structure ( temp 2-component vector of int) +0:19 'local' ( temp structure{ temp 2-component vector of float v, temp 2-component vector of int i}) +0:19 Constant: +0:19 1 (const int) +0:19 Constant: +0:19 13 (const int) +0:19 13 (const int) +0:20 Function Call: fun(struct-OutParam-vf2-vi21; ( temp void) +0:20 'out3' ( out structure{ temp 2-component vector of float v, temp 2-component vector of int i}) +0:22 Branch: Return with expression +0:22 'out1' ( out 4-component vector of float) +0:13 Function Definition: PixelShaderFunction( ( temp void) +0:13 Function Parameters: +0:? Sequence +0:13 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: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(vf4;vf4;struct-OutParam-vf2-vi21;struct-OutParam-vf2-vi21; ( temp 4-component vector of float) +0:? 'input' ( temp 4-component vector of float) +0:? 'out1' ( temp 4-component vector of float) +0:? 'out2' ( temp structure{ temp 2-component vector of float v, temp 2-component vector of int i}) +0:? 'out3' ( temp structure{ temp 2-component vector of float v, temp 2-component vector of int i}) +0:13 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: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: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: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: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: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: +0:13 1 (const int) +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:? '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) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:7 Function Definition: fun(struct-OutParam-vf2-vi21; ( temp void) +0:7 Function Parameters: +0:7 'op' ( out structure{ temp 2-component vector of float v, temp 2-component vector of int i}) +0:? Sequence +0:8 move second child to first child ( temp 2-component vector of float) +0:8 v: direct index for structure ( temp 2-component vector of float) +0:8 'op' ( out structure{ temp 2-component vector of float v, temp 2-component vector of int i}) +0:8 Constant: +0:8 0 (const int) +0:8 Constant: +0:8 0.400000 +0:8 0.400000 +0:9 move second child to first child ( temp 2-component vector of int) +0:9 i: direct index for structure ( temp 2-component vector of int) +0:9 'op' ( out structure{ temp 2-component vector of float v, temp 2-component vector of int i}) +0:9 Constant: +0:9 1 (const int) +0:9 Constant: +0:9 7 (const int) +0:9 7 (const int) +0:13 Function Definition: @PixelShaderFunction(vf4;vf4;struct-OutParam-vf2-vi21;struct-OutParam-vf2-vi21; ( temp 4-component vector of float) +0:13 Function Parameters: +0:13 'input' ( in 4-component vector of float) +0:13 'out1' ( out 4-component vector of float) +0:13 'out2' ( out structure{ temp 2-component vector of float v, temp 2-component vector of int i}) +0:13 'out3' ( out structure{ temp 2-component vector of float v, temp 2-component vector of int i}) +0:? Sequence +0:14 move second child to first child ( temp 4-component vector of float) +0:14 'out1' ( out 4-component vector of float) +0:14 'input' ( in 4-component vector of float) +0:15 move second child to first child ( temp 2-component vector of float) +0:15 v: direct index for structure ( temp 2-component vector of float) +0:15 'out2' ( out structure{ temp 2-component vector of float v, temp 2-component vector of int i}) +0:15 Constant: +0:15 0 (const int) +0:15 Constant: +0:15 2.000000 +0:15 2.000000 +0:16 move second child to first child ( temp 2-component vector of int) +0:16 i: direct index for structure ( temp 2-component vector of int) +0:16 'out2' ( out structure{ temp 2-component vector of float v, temp 2-component vector of int i}) +0:16 Constant: +0:16 1 (const int) +0:16 Constant: +0:16 3 (const int) +0:16 3 (const int) +0:18 move second child to first child ( temp 2-component vector of float) +0:18 v: direct index for structure ( temp 2-component vector of float) +0:18 'local' ( temp structure{ temp 2-component vector of float v, temp 2-component vector of int i}) +0:18 Constant: +0:18 0 (const int) +0:18 Constant: +0:18 12.000000 +0:18 12.000000 +0:19 move second child to first child ( temp 2-component vector of int) +0:19 i: direct index for structure ( temp 2-component vector of int) +0:19 'local' ( temp structure{ temp 2-component vector of float v, temp 2-component vector of int i}) +0:19 Constant: +0:19 1 (const int) +0:19 Constant: +0:19 13 (const int) +0:19 13 (const int) +0:20 Function Call: fun(struct-OutParam-vf2-vi21; ( temp void) +0:20 'out3' ( out structure{ temp 2-component vector of float v, temp 2-component vector of int i}) +0:22 Branch: Return with expression +0:22 'out1' ( out 4-component vector of float) +0:13 Function Definition: PixelShaderFunction( ( temp void) +0:13 Function Parameters: +0:? Sequence +0:13 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: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(vf4;vf4;struct-OutParam-vf2-vi21;struct-OutParam-vf2-vi21; ( temp 4-component vector of float) +0:? 'input' ( temp 4-component vector of float) +0:? 'out1' ( temp 4-component vector of float) +0:? 'out2' ( temp structure{ temp 2-component vector of float v, temp 2-component vector of int i}) +0:? 'out3' ( temp structure{ temp 2-component vector of float v, temp 2-component vector of int i}) +0:13 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: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: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: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: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: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: +0:13 1 (const int) +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:? '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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 89 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "PixelShaderFunction" 57 60 73 76 80 83 86 + ExecutionMode 4 OriginUpperLeft + Name 4 "PixelShaderFunction" + Name 10 "OutParam" + MemberName 10(OutParam) 0 "v" + MemberName 10(OutParam) 1 "i" + Name 14 "fun(struct-OutParam-vf2-vi21;" + Name 13 "op" + Name 23 "@PixelShaderFunction(vf4;vf4;struct-OutParam-vf2-vi21;struct-OutParam-vf2-vi21;" + Name 19 "input" + Name 20 "out1" + Name 21 "out2" + Name 22 "out3" + Name 42 "local" + Name 49 "param" + Name 55 "input" + Name 57 "input" + Name 60 "@entryPointOutput" + Name 61 "out1" + Name 62 "out2" + Name 63 "out3" + Name 64 "param" + Name 66 "param" + Name 67 "param" + Name 68 "param" + Name 73 "out1" + Name 76 "v" + Name 80 "i" + Name 83 "v" + Name 86 "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 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 2 + 8: TypeInt 32 1 + 9: TypeVector 8(int) 2 + 10(OutParam): TypeStruct 7(fvec2) 9(ivec2) + 11: TypePointer Function 10(OutParam) + 12: TypeFunction 2 11(ptr) + 16: TypeVector 6(float) 4 + 17: TypePointer Function 16(fvec4) + 18: TypeFunction 16(fvec4) 17(ptr) 17(ptr) 11(ptr) 11(ptr) + 25: 8(int) Constant 0 + 26: 6(float) Constant 1053609165 + 27: 7(fvec2) ConstantComposite 26 26 + 28: TypePointer Function 7(fvec2) + 30: 8(int) Constant 1 + 31: 8(int) Constant 7 + 32: 9(ivec2) ConstantComposite 31 31 + 33: TypePointer Function 9(ivec2) + 36: 6(float) Constant 1073741824 + 37: 7(fvec2) ConstantComposite 36 36 + 39: 8(int) Constant 3 + 40: 9(ivec2) ConstantComposite 39 39 + 43: 6(float) Constant 1094713344 + 44: 7(fvec2) ConstantComposite 43 43 + 46: 8(int) Constant 13 + 47: 9(ivec2) ConstantComposite 46 46 + 56: TypePointer Input 16(fvec4) + 57(input): 56(ptr) Variable Input + 59: TypePointer Output 16(fvec4) +60(@entryPointOutput): 59(ptr) Variable Output + 73(out1): 59(ptr) Variable Output + 75: TypePointer Output 7(fvec2) + 76(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 +4(PixelShaderFunction): 2 Function None 3 + 5: Label + 55(input): 17(ptr) Variable Function + 61(out1): 17(ptr) Variable Function + 62(out2): 11(ptr) Variable Function + 63(out3): 11(ptr) Variable Function + 64(param): 17(ptr) Variable Function + 66(param): 17(ptr) Variable Function + 67(param): 11(ptr) Variable Function + 68(param): 11(ptr) Variable Function + 58: 16(fvec4) Load 57(input) + Store 55(input) 58 + 65: 16(fvec4) Load 55(input) + Store 64(param) 65 + 69: 16(fvec4) FunctionCall 23(@PixelShaderFunction(vf4;vf4;struct-OutParam-vf2-vi21;struct-OutParam-vf2-vi21;) 64(param) 66(param) 67(param) 68(param) + 70: 16(fvec4) Load 66(param) + Store 61(out1) 70 + 71:10(OutParam) Load 67(param) + Store 62(out2) 71 + 72:10(OutParam) Load 68(param) + Store 63(out3) 72 + Store 60(@entryPointOutput) 69 + 74: 16(fvec4) Load 61(out1) + Store 73(out1) 74 + 77: 28(ptr) AccessChain 62(out2) 25 + 78: 7(fvec2) Load 77 + Store 76(v) 78 + 81: 33(ptr) AccessChain 62(out2) 30 + 82: 9(ivec2) Load 81 + Store 80(i) 82 + 84: 28(ptr) AccessChain 63(out3) 25 + 85: 7(fvec2) Load 84 + Store 83(v) 85 + 87: 33(ptr) AccessChain 63(out3) 30 + 88: 9(ivec2) Load 87 + Store 86(i) 88 + Return + FunctionEnd +14(fun(struct-OutParam-vf2-vi21;): 2 Function None 12 + 13(op): 11(ptr) FunctionParameter + 15: Label + 29: 28(ptr) AccessChain 13(op) 25 + Store 29 27 + 34: 33(ptr) AccessChain 13(op) 30 + Store 34 32 + Return + FunctionEnd +23(@PixelShaderFunction(vf4;vf4;struct-OutParam-vf2-vi21;struct-OutParam-vf2-vi21;): 16(fvec4) Function None 18 + 19(input): 17(ptr) FunctionParameter + 20(out1): 17(ptr) FunctionParameter + 21(out2): 11(ptr) FunctionParameter + 22(out3): 11(ptr) FunctionParameter + 24: Label + 42(local): 11(ptr) Variable Function + 49(param): 11(ptr) Variable Function + 35: 16(fvec4) Load 19(input) + Store 20(out1) 35 + 38: 28(ptr) AccessChain 21(out2) 25 + Store 38 37 + 41: 33(ptr) AccessChain 21(out2) 30 + Store 41 40 + 45: 28(ptr) AccessChain 42(local) 25 + Store 45 44 + 48: 33(ptr) AccessChain 42(local) 30 + Store 48 47 + 50: 2 FunctionCall 14(fun(struct-OutParam-vf2-vi21;) 49(param) + 51:10(OutParam) Load 49(param) + Store 22(out3) 51 + 52: 16(fvec4) Load 20(out1) + ReturnValue 52 + FunctionEnd 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 new file mode 100644 index 0000000..293592f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.entry.rename.frag.out @@ -0,0 +1,132 @@ +hlsl.entry.rename.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:7 Function Definition: not_the_entry_point( ( temp void) +0:7 Function Parameters: +0:11 Function Definition: @main_in_spv( ( temp structure{ temp 4-component vector of float Color}) +0:11 Function Parameters: +0:? Sequence +0:13 move second child to first child ( temp 4-component vector of float) +0:13 Color: direct index for structure ( temp 4-component vector of float) +0:13 'psout' ( temp structure{ temp 4-component vector of float Color}) +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:14 Branch: Return with expression +0:14 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:11 Function Definition: main_in_spv( ( 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:? '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) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:7 Function Definition: not_the_entry_point( ( temp void) +0:7 Function Parameters: +0:11 Function Definition: @main_in_spv( ( temp structure{ temp 4-component vector of float Color}) +0:11 Function Parameters: +0:? Sequence +0:13 move second child to first child ( temp 4-component vector of float) +0:13 Color: direct index for structure ( temp 4-component vector of float) +0:13 'psout' ( temp structure{ temp 4-component vector of float Color}) +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:14 Branch: Return with expression +0:14 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:11 Function Definition: main_in_spv( ( 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:? '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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 32 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main_in_spv" 26 + ExecutionMode 4 OriginUpperLeft + 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 29 "$Global" + MemberName 29($Global) 0 "also_not_the_entry_point" + Name 31 "" + Decorate 26(Color) Location 0 + MemberDecorate 29($Global) 0 Offset 0 + Decorate 29($Global) Block + Decorate 31 DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 8: TypeFloat 32 + 9: TypeVector 8(float) 4 + 10(PS_OUTPUT): TypeStruct 9(fvec4) + 11: TypeFunction 10(PS_OUTPUT) + 14: TypePointer Function 10(PS_OUTPUT) + 16: TypeInt 32 1 + 17: 16(int) Constant 0 + 18: 8(float) Constant 0 + 19: 9(fvec4) ConstantComposite 18 18 18 18 + 20: TypePointer Function 9(fvec4) + 25: TypePointer Output 9(fvec4) + 26(Color): 25(ptr) Variable Output + 29($Global): TypeStruct 16(int) + 30: TypePointer Uniform 29($Global) + 31: 30(ptr) Variable Uniform + 4(main_in_spv): 2 Function None 3 + 5: Label + 27:10(PS_OUTPUT) FunctionCall 12(@main_in_spv() + 28: 9(fvec4) CompositeExtract 27 0 + Store 26(Color) 28 + Return + FunctionEnd +6(not_the_entry_point(): 2 Function None 3 + 7: Label + Return + FunctionEnd +12(@main_in_spv():10(PS_OUTPUT) Function None 11 + 13: Label + 15(psout): 14(ptr) Variable Function + 21: 20(ptr) AccessChain 15(psout) 17 + Store 21 19 + 22:10(PS_OUTPUT) Load 15(psout) + ReturnValue 22 + 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 new file mode 100644 index 0000000..9b28695 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flatten.return.frag.out @@ -0,0 +1,199 @@ +hlsl.flatten.return.frag +Shader version: 450 +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}) +0:11 Function Parameters: +0:? Sequence +0:12 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 1.000000 +0:? 1.000000 +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:16 Function Definition: @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 Function Parameters: +0:? Sequence +0:17 Branch: Return with expression +0:17 Function Call: 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}) +0:16 Function Definition: main( ( temp void) +0:16 Function Parameters: +0:? Sequence +0:16 Sequence +0:16 move second child to first child ( 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 '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: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: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: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: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) + + +Linked fragment stage: + + +Shader version: 450 +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}) +0:11 Function Parameters: +0:? Sequence +0:12 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 1.000000 +0:? 1.000000 +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:16 Function Definition: @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 Function Parameters: +0:? Sequence +0:17 Branch: Return with expression +0:17 Function Call: 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}) +0:16 Function Definition: main( ( temp void) +0:16 Function Parameters: +0:? Sequence +0:16 Sequence +0:16 move second child to first child ( 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 '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: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: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: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: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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 49 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 29 36 41 45 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "color" + MemberName 8(PS_OUTPUT) 1 "other_struct_member1" + MemberName 8(PS_OUTPUT) 2 "other_struct_member2" + MemberName 8(PS_OUTPUT) 3 "other_struct_member3" + 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 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8(PS_OUTPUT): TypeStruct 7(fvec4) 6(float) 6(float) 6(float) + 9: TypeFunction 8(PS_OUTPUT) + 14: 6(float) Constant 1065353216 + 15: 7(fvec4) ConstantComposite 14 14 14 14 + 16: 6(float) Constant 1073741824 + 17: 6(float) Constant 1077936128 + 18: 6(float) Constant 1082130432 + 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 + 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 + 37: 30(int) Constant 1 + 38: TypePointer Function 6(float) +41(other_struct_member2): 35(ptr) Variable Output + 42: 30(int) Constant 2 +45(other_struct_member3): 35(ptr) Variable Output + 46: 30(int) Constant 3 + 4(main): 2 Function None 3 + 5: Label + 26(flattenTemp): 25(ptr) Variable Function + 27:8(PS_OUTPUT) FunctionCall 12(@main() + Store 26(flattenTemp) 27 + 33: 32(ptr) AccessChain 26(flattenTemp) 31 + 34: 7(fvec4) Load 33 + Store 29(color) 34 + 39: 38(ptr) AccessChain 26(flattenTemp) 37 + 40: 6(float) Load 39 + Store 36(other_struct_member1) 40 + 43: 38(ptr) AccessChain 26(flattenTemp) 42 + 44: 6(float) Load 43 + Store 41(other_struct_member2) 44 + 47: 38(ptr) AccessChain 26(flattenTemp) 46 + 48: 6(float) Load 47 + Store 45(other_struct_member3) 48 + Return + FunctionEnd + 10(Func1():8(PS_OUTPUT) Function None 9 + 11: Label + ReturnValue 19 + FunctionEnd + 12(@main():8(PS_OUTPUT) Function None 9 + 13: Label + 22:8(PS_OUTPUT) FunctionCall 10(Func1() + ReturnValue 22 + 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 new file mode 100755 index 0000000..ad29daa --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.float1.frag.out @@ -0,0 +1,110 @@ +hlsl.float1.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:1 Sequence +0:1 move second child to first child ( temp 1-component vector of float) +0:1 'f1' ( global 1-component vector of float) +0:1 Constant: +0:1 1.000000 +0:2 Sequence +0:2 move second child to first child ( temp float) +0:2 'scalar' ( global float) +0:2 Constant: +0:2 2.000000 +0:5 Function Definition: ShaderFunction(vf1;f1; ( temp 1-component vector of float) +0:5 Function Parameters: +0:5 'inFloat1' ( in 1-component vector of float) +0:5 'inScalar' ( in float) +0:? Sequence +0:6 Branch: Return with expression +0:6 add ( temp 1-component vector of float) +0:6 vector-scale ( temp 1-component vector of float) +0:6 'f1' ( global 1-component vector of float) +0:6 'scalar' ( global float) +0:6 vector-scale ( temp 1-component vector of float) +0:6 'inFloat1' ( in 1-component vector of float) +0:6 'inScalar' ( in float) +0:? Linker Objects +0:? 'f1' ( global 1-component vector of float) +0:? 'scalar' ( global float) + + +Linked fragment stage: + +WARNING: Linking fragment stage: Entry point not found + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:1 Sequence +0:1 move second child to first child ( temp 1-component vector of float) +0:1 'f1' ( global 1-component vector of float) +0:1 Constant: +0:1 1.000000 +0:2 Sequence +0:2 move second child to first child ( temp float) +0:2 'scalar' ( global float) +0:2 Constant: +0:2 2.000000 +0:5 Function Definition: ShaderFunction(vf1;f1; ( temp 1-component vector of float) +0:5 Function Parameters: +0:5 'inFloat1' ( in 1-component vector of float) +0:5 'inScalar' ( in float) +0:? Sequence +0:6 Branch: Return with expression +0:6 add ( temp 1-component vector of float) +0:6 vector-scale ( temp 1-component vector of float) +0:6 'f1' ( global 1-component vector of float) +0:6 'scalar' ( global float) +0:6 vector-scale ( temp 1-component vector of float) +0:6 'inFloat1' ( in 1-component vector of float) +0:6 'inScalar' ( in float) +0:? Linker Objects +0:? 'f1' ( global 1-component vector of float) +0:? 'scalar' ( global float) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 27 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "PixelShaderFunction" + ExecutionMode 4 OriginUpperLeft + Name 4 "PixelShaderFunction" + Name 11 "ShaderFunction(vf1;f1;" + Name 9 "inFloat1" + Name 10 "inScalar" + Name 14 "f1" + Name 16 "scalar" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypePointer Function 6(float) + 8: TypeFunction 6(float) 7(ptr) 7(ptr) + 13: TypePointer Private 6(float) + 14(f1): 13(ptr) Variable Private + 15: 6(float) Constant 1065353216 + 16(scalar): 13(ptr) Variable Private + 17: 6(float) Constant 1073741824 +4(PixelShaderFunction): 2 Function None 3 + 5: Label + Store 14(f1) 15 + Store 16(scalar) 17 + Return + FunctionEnd +11(ShaderFunction(vf1;f1;): 6(float) Function None 8 + 9(inFloat1): 7(ptr) FunctionParameter + 10(inScalar): 7(ptr) FunctionParameter + 12: Label + 18: 6(float) Load 14(f1) + 19: 6(float) Load 16(scalar) + 20: 6(float) IMul 18 19 + 21: 6(float) Load 9(inFloat1) + 22: 6(float) Load 10(inScalar) + 23: 6(float) IMul 21 22 + 24: 6(float) FAdd 20 23 + ReturnValue 24 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.float4.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.float4.frag.out new file mode 100755 index 0000000..d14de7b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.float4.frag.out @@ -0,0 +1,95 @@ +hlsl.float4.frag +WARNING: 0:5: 'register' : ignoring shader_profile +WARNING: 0:6: 'register' : ignoring shader_profile + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:9 Function Definition: ShaderFunction(vf4; ( temp 4-component vector of float) +0:9 Function Parameters: +0:9 'input' ( in 4-component vector of float) +0:? Sequence +0:10 Branch: Return with expression +0:10 component-wise multiply ( temp 4-component vector of float) +0:10 'input' ( in 4-component vector of float) +0:10 AmbientColor: 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 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}) +0:10 Constant: +0:10 0 (const uint) +0:? Linker Objects +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}) + + +Linked fragment stage: + +WARNING: Linking fragment stage: Entry point not found + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:9 Function Definition: ShaderFunction(vf4; ( temp 4-component vector of float) +0:9 Function Parameters: +0:9 'input' ( in 4-component vector of float) +0:? Sequence +0:10 Branch: Return with expression +0:10 component-wise multiply ( temp 4-component vector of float) +0:10 'input' ( in 4-component vector of float) +0:10 AmbientColor: 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 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}) +0:10 Constant: +0:10 0 (const uint) +0:? Linker Objects +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 +// Id's are bound by 26 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "PixelShaderFunction" + ExecutionMode 4 OriginUpperLeft + Name 4 "PixelShaderFunction" + Name 11 "ShaderFunction(vf4;" + Name 10 "input" + Name 15 "$Global" + MemberName 15($Global) 0 "AmbientColor" + MemberName 15($Global) 1 "ff1" + MemberName 15($Global) 2 "ff2" + MemberName 15($Global) 3 "ff3" + MemberName 15($Global) 4 "ff4" + Name 17 "" + MemberDecorate 15($Global) 0 Offset 0 + MemberDecorate 15($Global) 1 Offset 16 + MemberDecorate 15($Global) 2 Offset 20 + MemberDecorate 15($Global) 3 Offset 32 + MemberDecorate 15($Global) 4 Offset 48 + Decorate 15($Global) Block + Decorate 17 DescriptorSet 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: TypeInt 32 0 + 15($Global): TypeStruct 7(fvec4) 14(int) 6(float) 7(fvec4) 7(fvec4) + 16: TypePointer Uniform 15($Global) + 17: 16(ptr) Variable Uniform + 18: TypeInt 32 1 + 19: 18(int) Constant 0 + 20: TypePointer Uniform 7(fvec4) +4(PixelShaderFunction): 2 Function None 3 + 5: Label + Return + FunctionEnd +11(ShaderFunction(vf4;): 7(fvec4) Function None 9 + 10(input): 8(ptr) FunctionParameter + 12: Label + 13: 7(fvec4) Load 10(input) + 21: 20(ptr) AccessChain 17 19 + 22: 7(fvec4) Load 21 + 23: 7(fvec4) FMul 13 22 + ReturnValue 23 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.forLoop.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.forLoop.frag.out new file mode 100755 index 0000000..a14b9ac --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.forLoop.frag.out @@ -0,0 +1,458 @@ +hlsl.forLoop.frag +Shader version: 450 +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:? Sequence +0:? Sequence +0:3 Loop with condition tested first +0:3 No loop condition +0:3 No loop body +0:4 Sequence +0:4 Pre-Increment ( temp 4-component vector of float) +0:4 'input' ( in 4-component vector of float) +0:4 Loop with condition tested first +0:4 No loop condition +0:4 No loop body +0:? Sequence +0:5 Loop with condition tested first +0:5 Loop Condition +0:5 any ( temp bool) +0:5 NotEqual ( 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 No loop body +0:? Sequence +0:6 Loop with condition tested first +0:6 Loop Condition +0:6 any ( temp bool) +0:6 NotEqual ( temp 4-component vector of bool) +0:6 'input' ( in 4-component vector of float) +0:6 'input' ( in 4-component vector of float) +0:6 Loop Body +0:? Sequence +0:6 Branch: Return with expression +0:6 Negate value ( temp 4-component vector of float) +0:6 'input' ( in 4-component vector of float) +0:7 Sequence +0:7 Pre-Decrement ( temp 4-component vector of float) +0:7 'input' ( in 4-component vector of float) +0:7 Loop with condition tested first +0:7 Loop Condition +0:7 any ( temp bool) +0:7 NotEqual ( temp 4-component vector of bool) +0:7 'input' ( in 4-component vector of float) +0:7 'input' ( in 4-component vector of float) +0:7 Loop Body +0:? Sequence +0:7 Branch: Return with expression +0:7 Negate value ( temp 4-component vector of float) +0:7 'input' ( in 4-component vector of float) +0:7 Loop Terminal Expression +0:7 add second child into first child ( temp 4-component vector of float) +0:7 'input' ( in 4-component vector of float) +0:7 Constant: +0:7 2.000000 +0:? Sequence +0:8 Loop with condition tested first +0:8 No loop condition +0:8 Loop Body +0:8 Test condition and select ( temp void) +0:8 Condition +0:8 Compare Greater Than ( temp bool) +0:8 direct index ( temp float) +0:8 'input' ( in 4-component vector of float) +0:8 Constant: +0:8 0 (const int) +0:8 Constant: +0:8 2.000000 +0:8 true case +0:8 Branch: Break +0:? Sequence +0:9 Loop with condition tested first +0:9 No loop condition +0:9 Loop Body +0:9 Test condition and select ( temp void) +0:9 Condition +0:9 Compare Greater Than ( temp bool) +0:9 direct index ( temp float) +0:9 'input' ( in 4-component vector of float) +0:9 Constant: +0:9 0 (const int) +0:9 Constant: +0:9 2.000000 +0:9 true case +0:9 Branch: Continue +0:11 Sequence +0:11 move second child to first child ( temp int) +0:11 'ii' ( temp int) +0:11 Constant: +0:11 -1 (const int) +0:11 Loop with condition tested first +0:11 Loop Condition +0:11 Compare Less Than ( temp bool) +0:11 'ii' ( temp int) +0:11 Constant: +0:11 3 (const int) +0:11 Loop Body +0:11 Test condition and select ( temp void) +0:11 Condition +0:11 Compare Equal ( temp bool) +0:11 'ii' ( temp int) +0:11 Constant: +0:11 2 (const int) +0:11 true case +0:11 Branch: Continue +0:11 Loop Terminal Expression +0:11 Pre-Increment ( temp int) +0:11 'ii' ( temp int) +0:12 Pre-Decrement ( temp float) +0:12 'ii' ( temp 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 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:? Linker Objects +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: 450 +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:? Sequence +0:? Sequence +0:3 Loop with condition tested first +0:3 No loop condition +0:3 No loop body +0:4 Sequence +0:4 Pre-Increment ( temp 4-component vector of float) +0:4 'input' ( in 4-component vector of float) +0:4 Loop with condition tested first +0:4 No loop condition +0:4 No loop body +0:? Sequence +0:5 Loop with condition tested first +0:5 Loop Condition +0:5 any ( temp bool) +0:5 NotEqual ( 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 No loop body +0:? Sequence +0:6 Loop with condition tested first +0:6 Loop Condition +0:6 any ( temp bool) +0:6 NotEqual ( temp 4-component vector of bool) +0:6 'input' ( in 4-component vector of float) +0:6 'input' ( in 4-component vector of float) +0:6 Loop Body +0:? Sequence +0:6 Branch: Return with expression +0:6 Negate value ( temp 4-component vector of float) +0:6 'input' ( in 4-component vector of float) +0:7 Sequence +0:7 Pre-Decrement ( temp 4-component vector of float) +0:7 'input' ( in 4-component vector of float) +0:7 Loop with condition tested first +0:7 Loop Condition +0:7 any ( temp bool) +0:7 NotEqual ( temp 4-component vector of bool) +0:7 'input' ( in 4-component vector of float) +0:7 'input' ( in 4-component vector of float) +0:7 Loop Body +0:? Sequence +0:7 Branch: Return with expression +0:7 Negate value ( temp 4-component vector of float) +0:7 'input' ( in 4-component vector of float) +0:7 Loop Terminal Expression +0:7 add second child into first child ( temp 4-component vector of float) +0:7 'input' ( in 4-component vector of float) +0:7 Constant: +0:7 2.000000 +0:? Sequence +0:8 Loop with condition tested first +0:8 No loop condition +0:8 Loop Body +0:8 Test condition and select ( temp void) +0:8 Condition +0:8 Compare Greater Than ( temp bool) +0:8 direct index ( temp float) +0:8 'input' ( in 4-component vector of float) +0:8 Constant: +0:8 0 (const int) +0:8 Constant: +0:8 2.000000 +0:8 true case +0:8 Branch: Break +0:? Sequence +0:9 Loop with condition tested first +0:9 No loop condition +0:9 Loop Body +0:9 Test condition and select ( temp void) +0:9 Condition +0:9 Compare Greater Than ( temp bool) +0:9 direct index ( temp float) +0:9 'input' ( in 4-component vector of float) +0:9 Constant: +0:9 0 (const int) +0:9 Constant: +0:9 2.000000 +0:9 true case +0:9 Branch: Continue +0:11 Sequence +0:11 move second child to first child ( temp int) +0:11 'ii' ( temp int) +0:11 Constant: +0:11 -1 (const int) +0:11 Loop with condition tested first +0:11 Loop Condition +0:11 Compare Less Than ( temp bool) +0:11 'ii' ( temp int) +0:11 Constant: +0:11 3 (const int) +0:11 Loop Body +0:11 Test condition and select ( temp void) +0:11 Condition +0:11 Compare Equal ( temp bool) +0:11 'ii' ( temp int) +0:11 Constant: +0:11 2 (const int) +0:11 true case +0:11 Branch: Continue +0:11 Loop Terminal Expression +0:11 Pre-Increment ( temp int) +0:11 'ii' ( temp int) +0:12 Pre-Decrement ( temp float) +0:12 'ii' ( temp 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 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:? Linker Objects +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 124 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "PixelShaderFunction" 117 120 + ExecutionMode 4 OriginUpperLeft + 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 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 9: TypeFunction 7(fvec4) 8(ptr) + 18: 6(float) Constant 1065353216 + 32: TypeBool + 33: TypeVector 32(bool) 4 + 63: 6(float) Constant 1073741824 + 71: TypeInt 32 0 + 72: 71(int) Constant 0 + 73: TypePointer Function 6(float) + 90: TypeInt 32 1 + 91: TypePointer Function 90(int) + 93: 90(int) Constant 4294967295 + 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 +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 + Return + FunctionEnd +11(@PixelShaderFunction(vf4;): 7(fvec4) Function None 9 + 10(input): 8(ptr) FunctionParameter + 12: Label + 92(ii): 91(ptr) Variable Function + 111(ii): 73(ptr) Variable Function + Branch 13 + 13: Label + LoopMerge 15 16 None + Branch 14 + 14: Label + Branch 16 + 16: Label + Branch 13 + 15: Label + 17: 7(fvec4) Load 10(input) + 19: 7(fvec4) CompositeConstruct 18 18 18 18 + 20: 7(fvec4) FAdd 17 19 + Store 10(input) 20 + Branch 21 + 21: Label + LoopMerge 23 24 None + Branch 22 + 22: Label + Branch 24 + 24: Label + Branch 21 + 23: Label + Branch 25 + 25: Label + LoopMerge 27 28 None + Branch 29 + 29: Label + 30: 7(fvec4) Load 10(input) + 31: 7(fvec4) Load 10(input) + 34: 33(bvec4) FOrdNotEqual 30 31 + 35: 32(bool) Any 34 + BranchConditional 35 26 27 + 26: Label + Branch 28 + 28: Label + Branch 25 + 27: Label + Branch 36 + 36: Label + LoopMerge 38 39 None + Branch 40 + 40: Label + 41: 7(fvec4) Load 10(input) + 42: 7(fvec4) Load 10(input) + 43: 33(bvec4) FOrdNotEqual 41 42 + 44: 32(bool) Any 43 + BranchConditional 44 37 38 + 37: Label + 45: 7(fvec4) Load 10(input) + 46: 7(fvec4) FNegate 45 + ReturnValue 46 + 39: Label + Branch 36 + 38: Label + 48: 7(fvec4) Load 10(input) + 49: 7(fvec4) CompositeConstruct 18 18 18 18 + 50: 7(fvec4) FSub 48 49 + Store 10(input) 50 + Branch 51 + 51: Label + LoopMerge 53 54 None + Branch 55 + 55: Label + 56: 7(fvec4) Load 10(input) + 57: 7(fvec4) Load 10(input) + 58: 33(bvec4) FOrdNotEqual 56 57 + 59: 32(bool) Any 58 + BranchConditional 59 52 53 + 52: Label + 60: 7(fvec4) Load 10(input) + 61: 7(fvec4) FNegate 60 + ReturnValue 61 + 54: Label + 64: 7(fvec4) Load 10(input) + 65: 7(fvec4) CompositeConstruct 63 63 63 63 + 66: 7(fvec4) FAdd 64 65 + Store 10(input) 66 + Branch 51 + 53: Label + Branch 67 + 67: Label + LoopMerge 69 70 None + Branch 68 + 68: Label + 74: 73(ptr) AccessChain 10(input) 72 + 75: 6(float) Load 74 + 76: 32(bool) FOrdGreaterThan 75 63 + SelectionMerge 78 None + BranchConditional 76 77 78 + 77: Label + Branch 69 + 78: Label + Branch 70 + 70: Label + Branch 67 + 69: Label + Branch 80 + 80: Label + LoopMerge 82 83 None + Branch 81 + 81: Label + 84: 73(ptr) AccessChain 10(input) 72 + 85: 6(float) Load 84 + 86: 32(bool) FOrdGreaterThan 85 63 + SelectionMerge 88 None + BranchConditional 86 87 88 + 87: Label + Branch 83 + 88: Label + Branch 83 + 83: Label + Branch 80 + 82: Label + Store 92(ii) 93 + Branch 94 + 94: Label + LoopMerge 96 97 None + Branch 98 + 98: Label + 99: 90(int) Load 92(ii) + 101: 32(bool) SLessThan 99 100 + BranchConditional 101 95 96 + 95: Label + 102: 90(int) Load 92(ii) + 104: 32(bool) IEqual 102 103 + SelectionMerge 106 None + BranchConditional 104 105 106 + 105: Label + Branch 97 + 106: Label + Branch 97 + 97: Label + 108: 90(int) Load 92(ii) + 110: 90(int) IAdd 108 109 + Store 92(ii) 110 + Branch 94 + 96: Label + 112: 6(float) Load 111(ii) + 113: 6(float) FSub 112 18 + Store 111(ii) 113 + 114: 7(fvec4) Undef + ReturnValue 114 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.frag.out new file mode 100644 index 0000000..b0e6e4d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.frag.out @@ -0,0 +1,161 @@ +hlsl.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:1 move second child to first child (temp 4-component vector of float) +0:1 'AmbientColor' (temp 4-component vector of float) +0:? Constant: +0:? 1.000000 +0:? 0.500000 +0:? 0.000000 +0:? 1.000000 +0:2 move second child to first child (temp float) +0:2 'AmbientIntensity' (temp float) +0:2 Constant: +0:2 0.100000 +0:13 Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float) +0:5 Function Parameters: +0:5 'input' (in 4-component vector of float) +0:? Sequence +0:6 Branch: Return with expression +0:6 add (temp 4-component vector of float) +0:6 vector-scale (temp 4-component vector of float) +0:6 'input' (in 4-component vector of float) +0:6 'AmbientIntensity' (temp float) +0:6 'AmbientColor' (temp 4-component vector of float) +0:7 Branch: Return with expression +0:7 add (temp 4-component vector of float) +0:7 component-wise multiply (temp 4-component vector of float) +0:7 'input' (in 4-component vector of float) +0:7 'input' (in 4-component vector of float) +0:7 component-wise multiply (temp 4-component vector of float) +0:7 'input' (in 4-component vector of float) +0:7 'input' (in 4-component vector of float) +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 'input' (in 4-component vector of float) +0:8 component-wise multiply (temp 4-component vector of float) +0:8 'input' (in 4-component vector of float) +0:8 'input' (in 4-component vector of float) +0:8 'input' (in 4-component vector of float) +0:9 Branch: Return with expression +0:9 component-wise multiply (temp 4-component vector of float) +0:9 Pre-Increment (temp 4-component vector of float) +0:9 'input' (in 4-component vector of float) +0:9 Negate value (temp 4-component vector of float) +0:9 Negate value (temp 4-component vector of float) +0:9 Pre-Decrement (temp 4-component vector of float) +0:9 'input' (in 4-component vector of float) +0:10 Branch: Return with expression +0:10 add (temp 4-component vector of float) +0:10 Post-Increment (temp 4-component vector of float) +0:10 'input' (in 4-component vector of float) +0:10 Pre-Increment (temp 4-component vector of float) +0:10 'input' (in 4-component vector of float) +0:11 Branch: Return with expression +0:11 sine (global 4-component vector of float) +0:11 'input' (in 4-component vector of float) +0:? Linker Objects +0:? 'AmbientColor' (temp 4-component vector of float) +0:? 'AmbientIntensity' (temp float) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:1 move second child to first child (temp 4-component vector of float) +0:1 'AmbientColor' (temp 4-component vector of float) +0:? Constant: +0:? 1.000000 +0:? 0.500000 +0:? 0.000000 +0:? 1.000000 +0:2 move second child to first child (temp float) +0:2 'AmbientIntensity' (temp float) +0:2 Constant: +0:2 0.100000 +0:13 Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float) +0:5 Function Parameters: +0:5 'input' (in 4-component vector of float) +0:? Sequence +0:6 Branch: Return with expression +0:6 add (temp 4-component vector of float) +0:6 vector-scale (temp 4-component vector of float) +0:6 'input' (in 4-component vector of float) +0:6 'AmbientIntensity' (temp float) +0:6 'AmbientColor' (temp 4-component vector of float) +0:7 Branch: Return with expression +0:7 add (temp 4-component vector of float) +0:7 component-wise multiply (temp 4-component vector of float) +0:7 'input' (in 4-component vector of float) +0:7 'input' (in 4-component vector of float) +0:7 component-wise multiply (temp 4-component vector of float) +0:7 'input' (in 4-component vector of float) +0:7 'input' (in 4-component vector of float) +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 'input' (in 4-component vector of float) +0:8 component-wise multiply (temp 4-component vector of float) +0:8 'input' (in 4-component vector of float) +0:8 'input' (in 4-component vector of float) +0:8 'input' (in 4-component vector of float) +0:9 Branch: Return with expression +0:9 component-wise multiply (temp 4-component vector of float) +0:9 Pre-Increment (temp 4-component vector of float) +0:9 'input' (in 4-component vector of float) +0:9 Negate value (temp 4-component vector of float) +0:9 Negate value (temp 4-component vector of float) +0:9 Pre-Decrement (temp 4-component vector of float) +0:9 'input' (in 4-component vector of float) +0:10 Branch: Return with expression +0:10 add (temp 4-component vector of float) +0:10 Post-Increment (temp 4-component vector of float) +0:10 'input' (in 4-component vector of float) +0:10 Pre-Increment (temp 4-component vector of float) +0:10 'input' (in 4-component vector of float) +0:11 Branch: Return with expression +0:11 sine (global 4-component vector of float) +0:11 'input' (in 4-component vector of float) +0:? Linker Objects +0:? 'AmbientColor' (temp 4-component vector of float) +0:? 'AmbientIntensity' (temp float) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 58 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "PixelShaderFunction" 9 + ExecutionMode 4 OriginUpperLeft + Source HLSL 450 + Name 4 "PixelShaderFunction" + Name 9 "input" + Name 12 "AmbientIntensity" + Name 16 "AmbientColor" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Input 7(fvec4) + 9(input): 8(ptr) Variable Input + 11: TypePointer Function 6(float) + 15: TypePointer Function 7(fvec4) + 37: 6(float) Constant 1065353216 +4(PixelShaderFunction): 2 Function None 3 + 5: Label +12(AmbientIntensity): 11(ptr) Variable Function +16(AmbientColor): 15(ptr) Variable Function + 10: 7(fvec4) Load 9(input) + 13: 6(float) Load 12(AmbientIntensity) + 14: 7(fvec4) VectorTimesScalar 10 13 + 17: 7(fvec4) Load 16(AmbientColor) + 18: 7(fvec4) FAdd 14 17 + ReturnValue 18 + FunctionEnd 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 new file mode 100644 index 0000000..69f8e3d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.array.dx10.frag.out @@ -0,0 +1,449 @@ +hlsl.gather.array.dx10.frag +Shader version: 450 +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}) +0:24 Function Parameters: +0:? Sequence +0:29 Sequence +0:29 move second child to first child ( temp 4-component vector of float) +0:29 'txval20' ( temp 4-component vector of float) +0:29 textureGather ( temp 4-component vector of float) +0:29 Construct combined texture-sampler ( temp sampler2DArray) +0:29 'g_tTex2df4a' ( uniform texture2DArray) +0:29 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:30 Sequence +0:30 move second child to first child ( temp 4-component vector of int) +0:30 'txval21' ( temp 4-component vector of int) +0:30 textureGather ( temp 4-component vector of int) +0:30 Construct combined texture-sampler ( temp isampler2DArray) +0:30 'g_tTex2di4a' ( uniform itexture2DArray) +0:30 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:? 0.500000 +0:31 Sequence +0:31 move second child to first child ( temp 4-component vector of uint) +0:31 'txval22' ( temp 4-component vector of uint) +0:31 textureGather ( temp 4-component vector of uint) +0:31 Construct combined texture-sampler ( temp usampler2DArray) +0:31 'g_tTex2du4a' ( uniform utexture2DArray) +0:31 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:? 0.700000 +0:35 Sequence +0:35 move second child to first child ( temp 4-component vector of float) +0:35 'txval40' ( temp 4-component vector of float) +0:35 textureGather ( temp 4-component vector of float) +0:35 Construct combined texture-sampler ( temp samplerCubeArray) +0:35 'g_tTexcdf4a' ( uniform textureCubeArray) +0:35 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? 0.400000 +0:36 Sequence +0:36 move second child to first child ( temp 4-component vector of int) +0:36 'txval41' ( temp 4-component vector of int) +0:36 textureGather ( temp 4-component vector of int) +0:36 Construct combined texture-sampler ( temp isamplerCubeArray) +0:36 'g_tTexcdi4a' ( uniform itextureCubeArray) +0:36 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:? 0.700000 +0:37 Sequence +0:37 move second child to first child ( temp 4-component vector of uint) +0:37 'txval42' ( temp 4-component vector of uint) +0:37 textureGather ( temp 4-component vector of uint) +0:37 Construct combined texture-sampler ( temp usamplerCubeArray) +0:37 'g_tTexcdu4a' ( uniform utextureCubeArray) +0:37 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:? 1.000000 +0:39 move second child to first child ( temp 4-component vector of float) +0:39 Color: direct index for structure ( temp 4-component vector of float) +0:39 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:39 Constant: +0:39 0 (const int) +0:39 Constant: +0:39 1.000000 +0:39 1.000000 +0:39 1.000000 +0:39 1.000000 +0:40 move second child to first child ( temp float) +0:40 Depth: direct index for structure ( temp float) +0:40 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:40 Constant: +0:40 1 (const int) +0:40 Constant: +0:40 1.000000 +0:42 Branch: Return with expression +0:42 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:24 Function Definition: main( ( temp void) +0:24 Function Parameters: +0:? Sequence +0:24 Sequence +0:24 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1DArray) +0:? 'g_tTex1df4' (layout( binding=0) 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) + + +Linked fragment stage: + + +Shader version: 450 +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}) +0:24 Function Parameters: +0:? Sequence +0:29 Sequence +0:29 move second child to first child ( temp 4-component vector of float) +0:29 'txval20' ( temp 4-component vector of float) +0:29 textureGather ( temp 4-component vector of float) +0:29 Construct combined texture-sampler ( temp sampler2DArray) +0:29 'g_tTex2df4a' ( uniform texture2DArray) +0:29 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:30 Sequence +0:30 move second child to first child ( temp 4-component vector of int) +0:30 'txval21' ( temp 4-component vector of int) +0:30 textureGather ( temp 4-component vector of int) +0:30 Construct combined texture-sampler ( temp isampler2DArray) +0:30 'g_tTex2di4a' ( uniform itexture2DArray) +0:30 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:? 0.500000 +0:31 Sequence +0:31 move second child to first child ( temp 4-component vector of uint) +0:31 'txval22' ( temp 4-component vector of uint) +0:31 textureGather ( temp 4-component vector of uint) +0:31 Construct combined texture-sampler ( temp usampler2DArray) +0:31 'g_tTex2du4a' ( uniform utexture2DArray) +0:31 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:? 0.700000 +0:35 Sequence +0:35 move second child to first child ( temp 4-component vector of float) +0:35 'txval40' ( temp 4-component vector of float) +0:35 textureGather ( temp 4-component vector of float) +0:35 Construct combined texture-sampler ( temp samplerCubeArray) +0:35 'g_tTexcdf4a' ( uniform textureCubeArray) +0:35 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? 0.400000 +0:36 Sequence +0:36 move second child to first child ( temp 4-component vector of int) +0:36 'txval41' ( temp 4-component vector of int) +0:36 textureGather ( temp 4-component vector of int) +0:36 Construct combined texture-sampler ( temp isamplerCubeArray) +0:36 'g_tTexcdi4a' ( uniform itextureCubeArray) +0:36 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:? 0.700000 +0:37 Sequence +0:37 move second child to first child ( temp 4-component vector of uint) +0:37 'txval42' ( temp 4-component vector of uint) +0:37 textureGather ( temp 4-component vector of uint) +0:37 Construct combined texture-sampler ( temp usamplerCubeArray) +0:37 'g_tTexcdu4a' ( uniform utextureCubeArray) +0:37 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:? 1.000000 +0:39 move second child to first child ( temp 4-component vector of float) +0:39 Color: direct index for structure ( temp 4-component vector of float) +0:39 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:39 Constant: +0:39 0 (const int) +0:39 Constant: +0:39 1.000000 +0:39 1.000000 +0:39 1.000000 +0:39 1.000000 +0:40 move second child to first child ( temp float) +0:40 Depth: direct index for structure ( temp float) +0:40 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:40 Constant: +0:40 1 (const int) +0:40 Constant: +0:40 1.000000 +0:42 Branch: Return with expression +0:42 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:24 Function Definition: main( ( temp void) +0:24 Function Parameters: +0:? Sequence +0:24 Sequence +0:24 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1DArray) +0:? 'g_tTex1df4' (layout( binding=0) 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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 124 + + Capability Shader + Capability Sampled1D + Capability SampledCubeArray + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 107 111 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + MemberName 8(PS_OUTPUT) 1 "Depth" + Name 10 "@main(" + Name 13 "txval20" + Name 16 "g_tTex2df4a" + Name 20 "g_sSamp" + Name 34 "txval21" + Name 37 "g_tTex2di4a" + Name 49 "txval22" + Name 52 "g_tTex2du4a" + Name 61 "txval40" + Name 64 "g_tTexcdf4a" + Name 71 "txval41" + Name 74 "g_tTexcdi4a" + Name 81 "txval42" + Name 84 "g_tTexcdu4a" + Name 95 "psout" + Name 104 "flattenTemp" + Name 107 "Color" + Name 111 "Depth" + Name 116 "g_tTex1df4a" + Name 117 "g_tTex1df4" + Name 120 "g_tTex1di4a" + Name 123 "g_tTex1du4a" + Decorate 16(g_tTex2df4a) DescriptorSet 0 + Decorate 20(g_sSamp) DescriptorSet 0 + Decorate 20(g_sSamp) Binding 0 + Decorate 37(g_tTex2di4a) DescriptorSet 0 + Decorate 52(g_tTex2du4a) DescriptorSet 0 + 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 116(g_tTex1df4a) DescriptorSet 0 + Decorate 116(g_tTex1df4a) Binding 1 + Decorate 117(g_tTex1df4) DescriptorSet 0 + Decorate 117(g_tTex1df4) Binding 0 + Decorate 120(g_tTex1di4a) DescriptorSet 0 + Decorate 123(g_tTex1du4a) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8(PS_OUTPUT): TypeStruct 7(fvec4) 6(float) + 9: TypeFunction 8(PS_OUTPUT) + 12: TypePointer Function 7(fvec4) + 14: TypeImage 6(float) 2D array sampled format:Unknown + 15: TypePointer UniformConstant 14 + 16(g_tTex2df4a): 15(ptr) Variable UniformConstant + 18: TypeSampler + 19: TypePointer UniformConstant 18 + 20(g_sSamp): 19(ptr) Variable UniformConstant + 22: TypeSampledImage 14 + 24: TypeVector 6(float) 3 + 25: 6(float) Constant 1036831949 + 26: 6(float) Constant 1045220557 + 27: 6(float) Constant 1050253722 + 28: 24(fvec3) ConstantComposite 25 26 27 + 29: TypeInt 32 1 + 30: 29(int) Constant 0 + 32: TypeVector 29(int) 4 + 33: TypePointer Function 32(ivec4) + 35: TypeImage 29(int) 2D array sampled format:Unknown + 36: TypePointer UniformConstant 35 + 37(g_tTex2di4a): 36(ptr) Variable UniformConstant + 40: TypeSampledImage 35 + 42: 6(float) Constant 1053609165 + 43: 6(float) Constant 1056964608 + 44: 24(fvec3) ConstantComposite 27 42 43 + 46: TypeInt 32 0 + 47: TypeVector 46(int) 4 + 48: TypePointer Function 47(ivec4) + 50: TypeImage 46(int) 2D array sampled format:Unknown + 51: TypePointer UniformConstant 50 + 52(g_tTex2du4a): 51(ptr) Variable UniformConstant + 55: TypeSampledImage 50 + 57: 6(float) Constant 1058642330 + 58: 6(float) Constant 1060320051 + 59: 24(fvec3) ConstantComposite 43 57 58 + 62: TypeImage 6(float) Cube array sampled format:Unknown + 63: TypePointer UniformConstant 62 + 64(g_tTexcdf4a): 63(ptr) Variable UniformConstant + 67: TypeSampledImage 62 + 69: 7(fvec4) ConstantComposite 25 26 27 42 + 72: TypeImage 29(int) Cube array sampled format:Unknown + 73: TypePointer UniformConstant 72 + 74(g_tTexcdi4a): 73(ptr) Variable UniformConstant + 77: TypeSampledImage 72 + 79: 7(fvec4) ConstantComposite 42 43 57 58 + 82: TypeImage 46(int) Cube array sampled format:Unknown + 83: TypePointer UniformConstant 82 + 84(g_tTexcdu4a): 83(ptr) Variable UniformConstant + 87: TypeSampledImage 82 + 89: 6(float) Constant 1061997773 + 90: 6(float) Constant 1063675494 + 91: 6(float) Constant 1065353216 + 92: 7(fvec4) ConstantComposite 58 89 90 91 + 94: TypePointer Function 8(PS_OUTPUT) + 96: 7(fvec4) ConstantComposite 91 91 91 91 + 98: 29(int) Constant 1 + 99: TypePointer Function 6(float) + 106: TypePointer Output 7(fvec4) + 107(Color): 106(ptr) Variable Output + 110: TypePointer Output 6(float) + 111(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 + 117(g_tTex1df4): 115(ptr) Variable UniformConstant + 118: TypeImage 29(int) 1D array sampled format:Unknown + 119: TypePointer UniformConstant 118 +120(g_tTex1di4a): 119(ptr) Variable UniformConstant + 121: TypeImage 46(int) 1D array sampled format:Unknown + 122: TypePointer UniformConstant 121 +123(g_tTex1du4a): 122(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label +104(flattenTemp): 94(ptr) Variable Function + 105:8(PS_OUTPUT) FunctionCall 10(@main() + Store 104(flattenTemp) 105 + 108: 12(ptr) AccessChain 104(flattenTemp) 30 + 109: 7(fvec4) Load 108 + Store 107(Color) 109 + 112: 99(ptr) AccessChain 104(flattenTemp) 98 + 113: 6(float) Load 112 + Store 111(Depth) 113 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 13(txval20): 12(ptr) Variable Function + 34(txval21): 33(ptr) Variable Function + 49(txval22): 48(ptr) Variable Function + 61(txval40): 12(ptr) Variable Function + 71(txval41): 33(ptr) Variable Function + 81(txval42): 48(ptr) Variable Function + 95(psout): 94(ptr) Variable Function + 17: 14 Load 16(g_tTex2df4a) + 21: 18 Load 20(g_sSamp) + 23: 22 SampledImage 17 21 + 31: 7(fvec4) ImageGather 23 28 30 + Store 13(txval20) 31 + 38: 35 Load 37(g_tTex2di4a) + 39: 18 Load 20(g_sSamp) + 41: 40 SampledImage 38 39 + 45: 32(ivec4) ImageGather 41 44 30 + Store 34(txval21) 45 + 53: 50 Load 52(g_tTex2du4a) + 54: 18 Load 20(g_sSamp) + 56: 55 SampledImage 53 54 + 60: 47(ivec4) ImageGather 56 59 30 + Store 49(txval22) 60 + 65: 62 Load 64(g_tTexcdf4a) + 66: 18 Load 20(g_sSamp) + 68: 67 SampledImage 65 66 + 70: 7(fvec4) ImageGather 68 69 30 + Store 61(txval40) 70 + 75: 72 Load 74(g_tTexcdi4a) + 76: 18 Load 20(g_sSamp) + 78: 77 SampledImage 75 76 + 80: 32(ivec4) ImageGather 78 79 30 + Store 71(txval41) 80 + 85: 82 Load 84(g_tTexcdu4a) + 86: 18 Load 20(g_sSamp) + 88: 87 SampledImage 85 86 + 93: 47(ivec4) ImageGather 88 92 30 + Store 81(txval42) 93 + 97: 12(ptr) AccessChain 95(psout) 30 + Store 97 96 + 100: 99(ptr) AccessChain 95(psout) 98 + Store 100 91 + 101:8(PS_OUTPUT) Load 95(psout) + ReturnValue 101 + FunctionEnd 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 new file mode 100644 index 0000000..6d2526d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.basic.dx10.frag.out @@ -0,0 +1,463 @@ +hlsl.gather.basic.dx10.frag +Shader version: 450 +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}) +0:29 Function Parameters: +0:? Sequence +0:34 Sequence +0:34 move second child to first child ( temp 4-component vector of float) +0:34 'txval20' ( temp 4-component vector of float) +0:34 textureGather ( temp 4-component vector of float) +0:34 Construct combined texture-sampler ( temp sampler2D) +0:34 'g_tTex2df4' ( uniform texture2D) +0:34 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:35 Sequence +0:35 move second child to first child ( temp 4-component vector of int) +0:35 'txval21' ( temp 4-component vector of int) +0:35 textureGather ( temp 4-component vector of int) +0:35 Construct combined texture-sampler ( temp isampler2D) +0:35 'g_tTex2di4' ( uniform itexture2D) +0:35 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:36 Sequence +0:36 move second child to first child ( temp 4-component vector of uint) +0:36 'txval22' ( temp 4-component vector of uint) +0:36 textureGather ( temp 4-component vector of uint) +0:36 Construct combined texture-sampler ( temp usampler2D) +0:36 'g_tTex2du4' ( uniform utexture2D) +0:36 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:40 Sequence +0:40 move second child to first child ( temp 4-component vector of float) +0:40 'txval40' ( temp 4-component vector of float) +0:40 textureGather ( temp 4-component vector of float) +0:40 Construct combined texture-sampler ( temp samplerCube) +0:40 'g_tTexcdf4' ( uniform textureCube) +0:40 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:41 Sequence +0:41 move second child to first child ( temp 4-component vector of int) +0:41 'txval41' ( temp 4-component vector of int) +0:41 textureGather ( temp 4-component vector of int) +0:41 Construct combined texture-sampler ( temp isamplerCube) +0:41 'g_tTexcdi4' ( uniform itextureCube) +0:41 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:42 Sequence +0:42 move second child to first child ( temp 4-component vector of uint) +0:42 'txval42' ( temp 4-component vector of uint) +0:42 textureGather ( temp 4-component vector of uint) +0:42 Construct combined texture-sampler ( temp usamplerCube) +0:42 'g_tTexcdu4' ( uniform utextureCube) +0:42 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:44 move second child to first child ( temp 4-component vector of float) +0:44 Color: direct index for structure ( temp 4-component vector of float) +0:44 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:44 Constant: +0:44 0 (const int) +0:44 Constant: +0:44 1.000000 +0:44 1.000000 +0:44 1.000000 +0:44 1.000000 +0:45 move second child to first child ( temp float) +0:45 Depth: direct index for structure ( temp float) +0:45 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:45 Constant: +0:45 1 (const int) +0:45 Constant: +0:45 1.000000 +0:47 Branch: Return with expression +0:47 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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 Color, temp float Depth}) +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: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: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: +0:29 1 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_sSamp2d' ( uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1D) +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_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:? 'Color' (layout( location=0) out 4-component vector of float) +0:? 'Depth' ( out float FragDepth) + + +Linked fragment stage: + + +Shader version: 450 +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}) +0:29 Function Parameters: +0:? Sequence +0:34 Sequence +0:34 move second child to first child ( temp 4-component vector of float) +0:34 'txval20' ( temp 4-component vector of float) +0:34 textureGather ( temp 4-component vector of float) +0:34 Construct combined texture-sampler ( temp sampler2D) +0:34 'g_tTex2df4' ( uniform texture2D) +0:34 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:35 Sequence +0:35 move second child to first child ( temp 4-component vector of int) +0:35 'txval21' ( temp 4-component vector of int) +0:35 textureGather ( temp 4-component vector of int) +0:35 Construct combined texture-sampler ( temp isampler2D) +0:35 'g_tTex2di4' ( uniform itexture2D) +0:35 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:36 Sequence +0:36 move second child to first child ( temp 4-component vector of uint) +0:36 'txval22' ( temp 4-component vector of uint) +0:36 textureGather ( temp 4-component vector of uint) +0:36 Construct combined texture-sampler ( temp usampler2D) +0:36 'g_tTex2du4' ( uniform utexture2D) +0:36 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:40 Sequence +0:40 move second child to first child ( temp 4-component vector of float) +0:40 'txval40' ( temp 4-component vector of float) +0:40 textureGather ( temp 4-component vector of float) +0:40 Construct combined texture-sampler ( temp samplerCube) +0:40 'g_tTexcdf4' ( uniform textureCube) +0:40 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:41 Sequence +0:41 move second child to first child ( temp 4-component vector of int) +0:41 'txval41' ( temp 4-component vector of int) +0:41 textureGather ( temp 4-component vector of int) +0:41 Construct combined texture-sampler ( temp isamplerCube) +0:41 'g_tTexcdi4' ( uniform itextureCube) +0:41 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:42 Sequence +0:42 move second child to first child ( temp 4-component vector of uint) +0:42 'txval42' ( temp 4-component vector of uint) +0:42 textureGather ( temp 4-component vector of uint) +0:42 Construct combined texture-sampler ( temp usamplerCube) +0:42 'g_tTexcdu4' ( uniform utextureCube) +0:42 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:44 move second child to first child ( temp 4-component vector of float) +0:44 Color: direct index for structure ( temp 4-component vector of float) +0:44 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:44 Constant: +0:44 0 (const int) +0:44 Constant: +0:44 1.000000 +0:44 1.000000 +0:44 1.000000 +0:44 1.000000 +0:45 move second child to first child ( temp float) +0:45 Depth: direct index for structure ( temp float) +0:45 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:45 Constant: +0:45 1 (const int) +0:45 Constant: +0:45 1.000000 +0:47 Branch: Return with expression +0:47 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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 Color, temp float Depth}) +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: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: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: +0:29 1 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_sSamp2d' ( uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1D) +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_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:? 'Color' (layout( location=0) out 4-component vector of float) +0:? 'Depth' ( out float FragDepth) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 135 + + Capability Shader + Capability Sampled1D + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 108 112 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + MemberName 8(PS_OUTPUT) 1 "Depth" + Name 10 "@main(" + Name 13 "txval20" + Name 16 "g_tTex2df4" + Name 20 "g_sSamp" + Name 33 "txval21" + Name 36 "g_tTex2di4" + Name 48 "txval22" + Name 51 "g_tTex2du4" + Name 60 "txval40" + Name 63 "g_tTexcdf4" + Name 71 "txval41" + Name 74 "g_tTexcdi4" + Name 81 "txval42" + Name 84 "g_tTexcdu4" + Name 95 "psout" + Name 105 "flattenTemp" + Name 108 "Color" + Name 112 "Depth" + Name 115 "g_sSamp2d" + Name 118 "g_tTex1df4a" + Name 119 "g_tTex1df4" + Name 122 "g_tTex1di4" + Name 125 "g_tTex1du4" + Name 128 "g_tTex3df4" + Name 131 "g_tTex3di4" + Name 134 "g_tTex3du4" + Decorate 16(g_tTex2df4) DescriptorSet 0 + Decorate 20(g_sSamp) DescriptorSet 0 + Decorate 20(g_sSamp) Binding 0 + Decorate 36(g_tTex2di4) DescriptorSet 0 + Decorate 51(g_tTex2du4) DescriptorSet 0 + 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 115(g_sSamp2d) DescriptorSet 0 + Decorate 118(g_tTex1df4a) DescriptorSet 0 + Decorate 118(g_tTex1df4a) Binding 1 + Decorate 119(g_tTex1df4) DescriptorSet 0 + Decorate 119(g_tTex1df4) Binding 0 + Decorate 122(g_tTex1di4) DescriptorSet 0 + Decorate 125(g_tTex1du4) DescriptorSet 0 + Decorate 128(g_tTex3df4) DescriptorSet 0 + Decorate 131(g_tTex3di4) DescriptorSet 0 + Decorate 134(g_tTex3du4) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 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 + 15: TypePointer UniformConstant 14 + 16(g_tTex2df4): 15(ptr) Variable UniformConstant + 18: TypeSampler + 19: TypePointer UniformConstant 18 + 20(g_sSamp): 19(ptr) Variable UniformConstant + 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: TypeInt 32 1 + 29: 28(int) Constant 0 + 31: TypeVector 28(int) 4 + 32: TypePointer Function 31(ivec4) + 34: TypeImage 28(int) 2D sampled format:Unknown + 35: TypePointer UniformConstant 34 + 36(g_tTex2di4): 35(ptr) Variable UniformConstant + 39: TypeSampledImage 34 + 41: 6(float) Constant 1050253722 + 42: 6(float) Constant 1053609165 + 43: 24(fvec2) ConstantComposite 41 42 + 45: TypeInt 32 0 + 46: TypeVector 45(int) 4 + 47: TypePointer Function 46(ivec4) + 49: TypeImage 45(int) 2D sampled format:Unknown + 50: TypePointer UniformConstant 49 + 51(g_tTex2du4): 50(ptr) Variable UniformConstant + 54: TypeSampledImage 49 + 56: 6(float) Constant 1056964608 + 57: 6(float) Constant 1058642330 + 58: 24(fvec2) ConstantComposite 56 57 + 61: TypeImage 6(float) Cube sampled format:Unknown + 62: TypePointer UniformConstant 61 + 63(g_tTexcdf4): 62(ptr) Variable UniformConstant + 66: TypeSampledImage 61 + 68: TypeVector 6(float) 3 + 69: 68(fvec3) ConstantComposite 25 26 41 + 72: TypeImage 28(int) Cube sampled format:Unknown + 73: TypePointer UniformConstant 72 + 74(g_tTexcdi4): 73(ptr) Variable UniformConstant + 77: TypeSampledImage 72 + 79: 68(fvec3) ConstantComposite 42 56 57 + 82: TypeImage 45(int) Cube sampled format:Unknown + 83: TypePointer UniformConstant 82 + 84(g_tTexcdu4): 83(ptr) Variable UniformConstant + 87: TypeSampledImage 82 + 89: 6(float) Constant 1060320051 + 90: 6(float) Constant 1061997773 + 91: 6(float) Constant 1063675494 + 92: 68(fvec3) ConstantComposite 89 90 91 + 94: TypePointer Function 8(PS_OUTPUT) + 96: 6(float) Constant 1065353216 + 97: 7(fvec4) ConstantComposite 96 96 96 96 + 99: 28(int) Constant 1 + 100: TypePointer Function 6(float) + 107: TypePointer Output 7(fvec4) + 108(Color): 107(ptr) Variable Output + 111: TypePointer Output 6(float) + 112(Depth): 111(ptr) Variable Output + 115(g_sSamp2d): 19(ptr) Variable UniformConstant + 116: TypeImage 6(float) 1D sampled format:Unknown + 117: TypePointer UniformConstant 116 +118(g_tTex1df4a): 117(ptr) Variable UniformConstant + 119(g_tTex1df4): 117(ptr) Variable UniformConstant + 120: TypeImage 28(int) 1D sampled format:Unknown + 121: TypePointer UniformConstant 120 + 122(g_tTex1di4): 121(ptr) Variable UniformConstant + 123: TypeImage 45(int) 1D sampled format:Unknown + 124: TypePointer UniformConstant 123 + 125(g_tTex1du4): 124(ptr) Variable UniformConstant + 126: TypeImage 6(float) 3D sampled format:Unknown + 127: TypePointer UniformConstant 126 + 128(g_tTex3df4): 127(ptr) Variable UniformConstant + 129: TypeImage 28(int) 3D sampled format:Unknown + 130: TypePointer UniformConstant 129 + 131(g_tTex3di4): 130(ptr) Variable UniformConstant + 132: TypeImage 45(int) 3D sampled format:Unknown + 133: TypePointer UniformConstant 132 + 134(g_tTex3du4): 133(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label +105(flattenTemp): 94(ptr) Variable Function + 106:8(PS_OUTPUT) FunctionCall 10(@main() + Store 105(flattenTemp) 106 + 109: 12(ptr) AccessChain 105(flattenTemp) 29 + 110: 7(fvec4) Load 109 + Store 108(Color) 110 + 113: 100(ptr) AccessChain 105(flattenTemp) 99 + 114: 6(float) Load 113 + Store 112(Depth) 114 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 13(txval20): 12(ptr) Variable Function + 33(txval21): 32(ptr) Variable Function + 48(txval22): 47(ptr) Variable Function + 60(txval40): 12(ptr) Variable Function + 71(txval41): 32(ptr) Variable Function + 81(txval42): 47(ptr) Variable Function + 95(psout): 94(ptr) Variable Function + 17: 14 Load 16(g_tTex2df4) + 21: 18 Load 20(g_sSamp) + 23: 22 SampledImage 17 21 + 30: 7(fvec4) ImageGather 23 27 29 + Store 13(txval20) 30 + 37: 34 Load 36(g_tTex2di4) + 38: 18 Load 20(g_sSamp) + 40: 39 SampledImage 37 38 + 44: 31(ivec4) ImageGather 40 43 29 + Store 33(txval21) 44 + 52: 49 Load 51(g_tTex2du4) + 53: 18 Load 20(g_sSamp) + 55: 54 SampledImage 52 53 + 59: 46(ivec4) ImageGather 55 58 29 + Store 48(txval22) 59 + 64: 61 Load 63(g_tTexcdf4) + 65: 18 Load 20(g_sSamp) + 67: 66 SampledImage 64 65 + 70: 7(fvec4) ImageGather 67 69 29 + Store 60(txval40) 70 + 75: 72 Load 74(g_tTexcdi4) + 76: 18 Load 20(g_sSamp) + 78: 77 SampledImage 75 76 + 80: 31(ivec4) ImageGather 78 79 29 + Store 71(txval41) 80 + 85: 82 Load 84(g_tTexcdu4) + 86: 18 Load 20(g_sSamp) + 88: 87 SampledImage 85 86 + 93: 46(ivec4) ImageGather 88 92 29 + Store 81(txval42) 93 + 98: 12(ptr) AccessChain 95(psout) 29 + Store 98 97 + 101: 100(ptr) AccessChain 95(psout) 99 + Store 101 96 + 102:8(PS_OUTPUT) Load 95(psout) + ReturnValue 102 + FunctionEnd 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 new file mode 100644 index 0000000..9eec1ca --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.basic.dx10.vert.out @@ -0,0 +1,416 @@ +hlsl.gather.basic.dx10.vert +Shader version: 450 +0:? Sequence +0:28 Function Definition: @main( ( temp structure{ temp 4-component vector of float Pos}) +0:28 Function Parameters: +0:? Sequence +0:33 Sequence +0:33 move second child to first child ( temp 4-component vector of float) +0:33 'txval20' ( temp 4-component vector of float) +0:33 textureGather ( temp 4-component vector of float) +0:33 Construct combined texture-sampler ( temp sampler2D) +0:33 'g_tTex2df4' ( uniform texture2D) +0:33 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:34 Sequence +0:34 move second child to first child ( temp 4-component vector of int) +0:34 'txval21' ( temp 4-component vector of int) +0:34 textureGather ( temp 4-component vector of int) +0:34 Construct combined texture-sampler ( temp isampler2D) +0:34 'g_tTex2di4' ( uniform itexture2D) +0:34 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:35 Sequence +0:35 move second child to first child ( temp 4-component vector of uint) +0:35 'txval22' ( temp 4-component vector of uint) +0:35 textureGather ( temp 4-component vector of uint) +0:35 Construct combined texture-sampler ( temp usampler2D) +0:35 'g_tTex2du4' ( uniform utexture2D) +0:35 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:39 Sequence +0:39 move second child to first child ( temp 4-component vector of float) +0:39 'txval40' ( temp 4-component vector of float) +0:39 textureGather ( temp 4-component vector of float) +0:39 Construct combined texture-sampler ( temp samplerCube) +0:39 'g_tTexcdf4' ( uniform textureCube) +0:39 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:40 Sequence +0:40 move second child to first child ( temp 4-component vector of int) +0:40 'txval41' ( temp 4-component vector of int) +0:40 textureGather ( temp 4-component vector of int) +0:40 Construct combined texture-sampler ( temp isamplerCube) +0:40 'g_tTexcdi4' ( uniform itextureCube) +0:40 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:41 Sequence +0:41 move second child to first child ( temp 4-component vector of uint) +0:41 'txval42' ( temp 4-component vector of uint) +0:41 textureGather ( temp 4-component vector of uint) +0:41 Construct combined texture-sampler ( temp usamplerCube) +0:41 'g_tTexcdu4' ( uniform utextureCube) +0:41 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:43 move second child to first child ( temp 4-component vector of float) +0:43 Pos: direct index for structure ( temp 4-component vector of float) +0:43 'vsout' ( temp structure{ temp 4-component vector of float Pos}) +0:43 Constant: +0:43 0 (const int) +0:? Constant: +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:45 Branch: Return with expression +0:45 'vsout' ( temp structure{ temp 4-component vector of float Pos}) +0:28 Function Definition: main( ( temp void) +0:28 Function Parameters: +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: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: +0:28 0 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_sSamp2d' ( uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1D) +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_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:? '@entryPointOutput' (layout( location=0) out structure{}) + + +Linked vertex stage: + + +Shader version: 450 +0:? Sequence +0:28 Function Definition: @main( ( temp structure{ temp 4-component vector of float Pos}) +0:28 Function Parameters: +0:? Sequence +0:33 Sequence +0:33 move second child to first child ( temp 4-component vector of float) +0:33 'txval20' ( temp 4-component vector of float) +0:33 textureGather ( temp 4-component vector of float) +0:33 Construct combined texture-sampler ( temp sampler2D) +0:33 'g_tTex2df4' ( uniform texture2D) +0:33 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:34 Sequence +0:34 move second child to first child ( temp 4-component vector of int) +0:34 'txval21' ( temp 4-component vector of int) +0:34 textureGather ( temp 4-component vector of int) +0:34 Construct combined texture-sampler ( temp isampler2D) +0:34 'g_tTex2di4' ( uniform itexture2D) +0:34 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:35 Sequence +0:35 move second child to first child ( temp 4-component vector of uint) +0:35 'txval22' ( temp 4-component vector of uint) +0:35 textureGather ( temp 4-component vector of uint) +0:35 Construct combined texture-sampler ( temp usampler2D) +0:35 'g_tTex2du4' ( uniform utexture2D) +0:35 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:39 Sequence +0:39 move second child to first child ( temp 4-component vector of float) +0:39 'txval40' ( temp 4-component vector of float) +0:39 textureGather ( temp 4-component vector of float) +0:39 Construct combined texture-sampler ( temp samplerCube) +0:39 'g_tTexcdf4' ( uniform textureCube) +0:39 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:40 Sequence +0:40 move second child to first child ( temp 4-component vector of int) +0:40 'txval41' ( temp 4-component vector of int) +0:40 textureGather ( temp 4-component vector of int) +0:40 Construct combined texture-sampler ( temp isamplerCube) +0:40 'g_tTexcdi4' ( uniform itextureCube) +0:40 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:41 Sequence +0:41 move second child to first child ( temp 4-component vector of uint) +0:41 'txval42' ( temp 4-component vector of uint) +0:41 textureGather ( temp 4-component vector of uint) +0:41 Construct combined texture-sampler ( temp usamplerCube) +0:41 'g_tTexcdu4' ( uniform utextureCube) +0:41 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:43 move second child to first child ( temp 4-component vector of float) +0:43 Pos: direct index for structure ( temp 4-component vector of float) +0:43 'vsout' ( temp structure{ temp 4-component vector of float Pos}) +0:43 Constant: +0:43 0 (const int) +0:? Constant: +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:45 Branch: Return with expression +0:45 'vsout' ( temp structure{ temp 4-component vector of float Pos}) +0:28 Function Definition: main( ( temp void) +0:28 Function Parameters: +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: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: +0:28 0 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_sSamp2d' ( uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1D) +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_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:? '@entryPointOutput' (layout( location=0) out structure{}) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 129 + + Capability Shader + Capability Sampled1D + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 103 128 + Name 4 "main" + Name 8 "VS_OUTPUT" + MemberName 8(VS_OUTPUT) 0 "Pos" + Name 10 "@main(" + Name 13 "txval20" + Name 16 "g_tTex2df4" + Name 20 "g_sSamp" + Name 33 "txval21" + Name 36 "g_tTex2di4" + Name 48 "txval22" + Name 51 "g_tTex2du4" + Name 60 "txval40" + Name 63 "g_tTexcdf4" + Name 71 "txval41" + Name 74 "g_tTexcdi4" + Name 81 "txval42" + Name 84 "g_tTexcdu4" + Name 95 "vsout" + Name 103 "@entryPointOutput_Pos" + Name 106 "g_sSamp2d" + Name 109 "g_tTex1df4a" + Name 110 "g_tTex1df4" + Name 113 "g_tTex1di4" + Name 116 "g_tTex1du4" + 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 + Decorate 36(g_tTex2di4) DescriptorSet 0 + Decorate 51(g_tTex2du4) DescriptorSet 0 + 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 106(g_sSamp2d) DescriptorSet 0 + Decorate 109(g_tTex1df4a) DescriptorSet 0 + Decorate 109(g_tTex1df4a) Binding 1 + Decorate 110(g_tTex1df4) DescriptorSet 0 + Decorate 110(g_tTex1df4) Binding 0 + Decorate 113(g_tTex1di4) DescriptorSet 0 + Decorate 116(g_tTex1du4) DescriptorSet 0 + 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 + 7: TypeVector 6(float) 4 + 8(VS_OUTPUT): TypeStruct 7(fvec4) + 9: TypeFunction 8(VS_OUTPUT) + 12: TypePointer Function 7(fvec4) + 14: TypeImage 6(float) 2D sampled format:Unknown + 15: TypePointer UniformConstant 14 + 16(g_tTex2df4): 15(ptr) Variable UniformConstant + 18: TypeSampler + 19: TypePointer UniformConstant 18 + 20(g_sSamp): 19(ptr) Variable UniformConstant + 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: TypeInt 32 1 + 29: 28(int) Constant 0 + 31: TypeVector 28(int) 4 + 32: TypePointer Function 31(ivec4) + 34: TypeImage 28(int) 2D sampled format:Unknown + 35: TypePointer UniformConstant 34 + 36(g_tTex2di4): 35(ptr) Variable UniformConstant + 39: TypeSampledImage 34 + 41: 6(float) Constant 1050253722 + 42: 6(float) Constant 1053609165 + 43: 24(fvec2) ConstantComposite 41 42 + 45: TypeInt 32 0 + 46: TypeVector 45(int) 4 + 47: TypePointer Function 46(ivec4) + 49: TypeImage 45(int) 2D sampled format:Unknown + 50: TypePointer UniformConstant 49 + 51(g_tTex2du4): 50(ptr) Variable UniformConstant + 54: TypeSampledImage 49 + 56: 6(float) Constant 1056964608 + 57: 6(float) Constant 1058642330 + 58: 24(fvec2) ConstantComposite 56 57 + 61: TypeImage 6(float) Cube sampled format:Unknown + 62: TypePointer UniformConstant 61 + 63(g_tTexcdf4): 62(ptr) Variable UniformConstant + 66: TypeSampledImage 61 + 68: TypeVector 6(float) 3 + 69: 68(fvec3) ConstantComposite 25 26 41 + 72: TypeImage 28(int) Cube sampled format:Unknown + 73: TypePointer UniformConstant 72 + 74(g_tTexcdi4): 73(ptr) Variable UniformConstant + 77: TypeSampledImage 72 + 79: 68(fvec3) ConstantComposite 42 56 57 + 82: TypeImage 45(int) Cube sampled format:Unknown + 83: TypePointer UniformConstant 82 + 84(g_tTexcdu4): 83(ptr) Variable UniformConstant + 87: TypeSampledImage 82 + 89: 6(float) Constant 1060320051 + 90: 6(float) Constant 1061997773 + 91: 6(float) Constant 1063675494 + 92: 68(fvec3) ConstantComposite 89 90 91 + 94: TypePointer Function 8(VS_OUTPUT) + 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 + 106(g_sSamp2d): 19(ptr) Variable UniformConstant + 107: TypeImage 6(float) 1D sampled format:Unknown + 108: TypePointer UniformConstant 107 +109(g_tTex1df4a): 108(ptr) Variable UniformConstant + 110(g_tTex1df4): 108(ptr) Variable UniformConstant + 111: TypeImage 28(int) 1D sampled format:Unknown + 112: TypePointer UniformConstant 111 + 113(g_tTex1di4): 112(ptr) Variable UniformConstant + 114: TypeImage 45(int) 1D sampled format:Unknown + 115: TypePointer UniformConstant 114 + 116(g_tTex1du4): 115(ptr) Variable UniformConstant + 117: TypeImage 6(float) 3D sampled format:Unknown + 118: TypePointer UniformConstant 117 + 119(g_tTex3df4): 118(ptr) Variable UniformConstant + 120: TypeImage 28(int) 3D sampled format:Unknown + 121: TypePointer UniformConstant 120 + 122(g_tTex3di4): 121(ptr) Variable UniformConstant + 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 + Return + FunctionEnd + 10(@main():8(VS_OUTPUT) Function None 9 + 11: Label + 13(txval20): 12(ptr) Variable Function + 33(txval21): 32(ptr) Variable Function + 48(txval22): 47(ptr) Variable Function + 60(txval40): 12(ptr) Variable Function + 71(txval41): 32(ptr) Variable Function + 81(txval42): 47(ptr) Variable Function + 95(vsout): 94(ptr) Variable Function + 17: 14 Load 16(g_tTex2df4) + 21: 18 Load 20(g_sSamp) + 23: 22 SampledImage 17 21 + 30: 7(fvec4) ImageGather 23 27 29 + Store 13(txval20) 30 + 37: 34 Load 36(g_tTex2di4) + 38: 18 Load 20(g_sSamp) + 40: 39 SampledImage 37 38 + 44: 31(ivec4) ImageGather 40 43 29 + Store 33(txval21) 44 + 52: 49 Load 51(g_tTex2du4) + 53: 18 Load 20(g_sSamp) + 55: 54 SampledImage 52 53 + 59: 46(ivec4) ImageGather 55 58 29 + Store 48(txval22) 59 + 64: 61 Load 63(g_tTexcdf4) + 65: 18 Load 20(g_sSamp) + 67: 66 SampledImage 64 65 + 70: 7(fvec4) ImageGather 67 69 29 + Store 60(txval40) 70 + 75: 72 Load 74(g_tTexcdi4) + 76: 18 Load 20(g_sSamp) + 78: 77 SampledImage 75 76 + 80: 31(ivec4) ImageGather 78 79 29 + Store 71(txval41) 80 + 85: 82 Load 84(g_tTexcdu4) + 86: 18 Load 20(g_sSamp) + 88: 87 SampledImage 85 86 + 93: 46(ivec4) ImageGather 88 92 29 + Store 81(txval42) 93 + 98: 12(ptr) AccessChain 95(vsout) 29 + Store 98 97 + 99:8(VS_OUTPUT) Load 95(vsout) + ReturnValue 99 + FunctionEnd 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 new file mode 100644 index 0000000..c921313 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.offset.dx10.frag.out @@ -0,0 +1,384 @@ +hlsl.gather.offset.dx10.frag +Shader version: 450 +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}) +0:28 Function Parameters: +0:? Sequence +0:33 Sequence +0:33 move second child to first child ( temp 4-component vector of float) +0:33 'txval20' ( temp 4-component vector of float) +0:33 textureGatherOffset ( temp 4-component vector of float) +0:33 Construct combined texture-sampler ( temp sampler2D) +0:33 'g_tTex2df4' ( uniform texture2D) +0:33 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? Constant: +0:? 1 (const int) +0:? 0 (const int) +0:34 Sequence +0:34 move second child to first child ( temp 4-component vector of int) +0:34 'txval21' ( temp 4-component vector of int) +0:34 textureGatherOffset ( temp 4-component vector of int) +0:34 Construct combined texture-sampler ( temp isampler2D) +0:34 'g_tTex2di4' ( uniform itexture2D) +0:34 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:? Constant: +0:? 1 (const int) +0:? 1 (const int) +0:35 Sequence +0:35 move second child to first child ( temp 4-component vector of uint) +0:35 'txval22' ( temp 4-component vector of uint) +0:35 textureGatherOffset ( temp 4-component vector of uint) +0:35 Construct combined texture-sampler ( temp usampler2D) +0:35 'g_tTex2du4' ( uniform utexture2D) +0:35 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:? Constant: +0:? 1 (const int) +0:? -1 (const int) +0:40 move second child to first child ( temp 4-component vector of float) +0:40 Color: direct index for structure ( temp 4-component vector of float) +0:40 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:40 Constant: +0:40 0 (const int) +0:40 Constant: +0:40 1.000000 +0:40 1.000000 +0:40 1.000000 +0:40 1.000000 +0:41 move second child to first child ( temp float) +0:41 Depth: direct index for structure ( temp float) +0:41 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:41 Constant: +0:41 1 (const int) +0:41 Constant: +0:41 1.000000 +0:43 Branch: Return with expression +0:43 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:28 Function Definition: main( ( temp void) +0:28 Function Parameters: +0:? Sequence +0:28 Sequence +0:28 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:28 1 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1D) +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_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:? 'Color' (layout( location=0) out 4-component vector of float) +0:? 'Depth' ( out float FragDepth) + + +Linked fragment stage: + + +Shader version: 450 +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}) +0:28 Function Parameters: +0:? Sequence +0:33 Sequence +0:33 move second child to first child ( temp 4-component vector of float) +0:33 'txval20' ( temp 4-component vector of float) +0:33 textureGatherOffset ( temp 4-component vector of float) +0:33 Construct combined texture-sampler ( temp sampler2D) +0:33 'g_tTex2df4' ( uniform texture2D) +0:33 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? Constant: +0:? 1 (const int) +0:? 0 (const int) +0:34 Sequence +0:34 move second child to first child ( temp 4-component vector of int) +0:34 'txval21' ( temp 4-component vector of int) +0:34 textureGatherOffset ( temp 4-component vector of int) +0:34 Construct combined texture-sampler ( temp isampler2D) +0:34 'g_tTex2di4' ( uniform itexture2D) +0:34 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:? Constant: +0:? 1 (const int) +0:? 1 (const int) +0:35 Sequence +0:35 move second child to first child ( temp 4-component vector of uint) +0:35 'txval22' ( temp 4-component vector of uint) +0:35 textureGatherOffset ( temp 4-component vector of uint) +0:35 Construct combined texture-sampler ( temp usampler2D) +0:35 'g_tTex2du4' ( uniform utexture2D) +0:35 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:? Constant: +0:? 1 (const int) +0:? -1 (const int) +0:40 move second child to first child ( temp 4-component vector of float) +0:40 Color: direct index for structure ( temp 4-component vector of float) +0:40 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:40 Constant: +0:40 0 (const int) +0:40 Constant: +0:40 1.000000 +0:40 1.000000 +0:40 1.000000 +0:40 1.000000 +0:41 move second child to first child ( temp float) +0:41 Depth: direct index for structure ( temp float) +0:41 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:41 Constant: +0:41 1 (const int) +0:41 Constant: +0:41 1.000000 +0:43 Branch: Return with expression +0:43 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:28 Function Definition: main( ( temp void) +0:28 Function Parameters: +0:? Sequence +0:28 Sequence +0:28 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:28 1 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1D) +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_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:? 'Color' (layout( location=0) out 4-component vector of float) +0:? 'Depth' ( out float FragDepth) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 114 + + Capability Shader + Capability Sampled1D + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 79 83 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + MemberName 8(PS_OUTPUT) 1 "Depth" + Name 10 "@main(" + Name 13 "txval20" + Name 16 "g_tTex2df4" + Name 20 "g_sSamp" + Name 36 "txval21" + Name 39 "g_tTex2di4" + Name 52 "txval22" + Name 55 "g_tTex2du4" + Name 67 "psout" + Name 76 "flattenTemp" + Name 79 "Color" + Name 83 "Depth" + Name 88 "g_tTex1df4a" + Name 89 "g_tTex1df4" + Name 92 "g_tTex1di4" + Name 95 "g_tTex1du4" + Name 98 "g_tTex3df4" + Name 101 "g_tTex3di4" + Name 104 "g_tTex3du4" + Name 107 "g_tTexcdf4" + Name 110 "g_tTexcdi4" + Name 113 "g_tTexcdu4" + Decorate 16(g_tTex2df4) DescriptorSet 0 + Decorate 20(g_sSamp) DescriptorSet 0 + 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 88(g_tTex1df4a) DescriptorSet 0 + Decorate 88(g_tTex1df4a) Binding 1 + Decorate 89(g_tTex1df4) DescriptorSet 0 + Decorate 89(g_tTex1df4) Binding 0 + Decorate 92(g_tTex1di4) DescriptorSet 0 + Decorate 95(g_tTex1du4) DescriptorSet 0 + Decorate 98(g_tTex3df4) DescriptorSet 0 + Decorate 101(g_tTex3di4) DescriptorSet 0 + Decorate 104(g_tTex3du4) DescriptorSet 0 + Decorate 107(g_tTexcdf4) DescriptorSet 0 + Decorate 110(g_tTexcdi4) DescriptorSet 0 + Decorate 113(g_tTexcdu4) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 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 + 15: TypePointer UniformConstant 14 + 16(g_tTex2df4): 15(ptr) Variable UniformConstant + 18: TypeSampler + 19: TypePointer UniformConstant 18 + 20(g_sSamp): 19(ptr) Variable UniformConstant + 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: TypeInt 32 1 + 29: TypeVector 28(int) 2 + 30: 28(int) Constant 1 + 31: 28(int) Constant 0 + 32: 29(ivec2) ConstantComposite 30 31 + 34: TypeVector 28(int) 4 + 35: TypePointer Function 34(ivec4) + 37: TypeImage 28(int) 2D sampled format:Unknown + 38: TypePointer UniformConstant 37 + 39(g_tTex2di4): 38(ptr) Variable UniformConstant + 42: TypeSampledImage 37 + 44: 6(float) Constant 1050253722 + 45: 6(float) Constant 1053609165 + 46: 24(fvec2) ConstantComposite 44 45 + 47: 29(ivec2) ConstantComposite 30 30 + 49: TypeInt 32 0 + 50: TypeVector 49(int) 4 + 51: TypePointer Function 50(ivec4) + 53: TypeImage 49(int) 2D sampled format:Unknown + 54: TypePointer UniformConstant 53 + 55(g_tTex2du4): 54(ptr) Variable UniformConstant + 58: TypeSampledImage 53 + 60: 6(float) Constant 1056964608 + 61: 6(float) Constant 1058642330 + 62: 24(fvec2) ConstantComposite 60 61 + 63: 28(int) Constant 4294967295 + 64: 29(ivec2) ConstantComposite 30 63 + 66: TypePointer Function 8(PS_OUTPUT) + 68: 6(float) Constant 1065353216 + 69: 7(fvec4) ConstantComposite 68 68 68 68 + 71: TypePointer Function 6(float) + 78: TypePointer Output 7(fvec4) + 79(Color): 78(ptr) Variable Output + 82: TypePointer Output 6(float) + 83(Depth): 82(ptr) Variable Output + 86: TypeImage 6(float) 1D sampled format:Unknown + 87: TypePointer UniformConstant 86 + 88(g_tTex1df4a): 87(ptr) Variable UniformConstant + 89(g_tTex1df4): 87(ptr) Variable UniformConstant + 90: TypeImage 28(int) 1D sampled format:Unknown + 91: TypePointer UniformConstant 90 + 92(g_tTex1di4): 91(ptr) Variable UniformConstant + 93: TypeImage 49(int) 1D sampled format:Unknown + 94: TypePointer UniformConstant 93 + 95(g_tTex1du4): 94(ptr) Variable UniformConstant + 96: TypeImage 6(float) 3D sampled format:Unknown + 97: TypePointer UniformConstant 96 + 98(g_tTex3df4): 97(ptr) Variable UniformConstant + 99: TypeImage 28(int) 3D sampled format:Unknown + 100: TypePointer UniformConstant 99 + 101(g_tTex3di4): 100(ptr) Variable UniformConstant + 102: TypeImage 49(int) 3D sampled format:Unknown + 103: TypePointer UniformConstant 102 + 104(g_tTex3du4): 103(ptr) Variable UniformConstant + 105: TypeImage 6(float) Cube sampled format:Unknown + 106: TypePointer UniformConstant 105 + 107(g_tTexcdf4): 106(ptr) Variable UniformConstant + 108: TypeImage 28(int) Cube sampled format:Unknown + 109: TypePointer UniformConstant 108 + 110(g_tTexcdi4): 109(ptr) Variable UniformConstant + 111: TypeImage 49(int) Cube sampled format:Unknown + 112: TypePointer UniformConstant 111 + 113(g_tTexcdu4): 112(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label + 76(flattenTemp): 66(ptr) Variable Function + 77:8(PS_OUTPUT) FunctionCall 10(@main() + Store 76(flattenTemp) 77 + 80: 12(ptr) AccessChain 76(flattenTemp) 31 + 81: 7(fvec4) Load 80 + Store 79(Color) 81 + 84: 71(ptr) AccessChain 76(flattenTemp) 30 + 85: 6(float) Load 84 + Store 83(Depth) 85 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 13(txval20): 12(ptr) Variable Function + 36(txval21): 35(ptr) Variable Function + 52(txval22): 51(ptr) Variable Function + 67(psout): 66(ptr) Variable Function + 17: 14 Load 16(g_tTex2df4) + 21: 18 Load 20(g_sSamp) + 23: 22 SampledImage 17 21 + 33: 7(fvec4) ImageGather 23 27 31 ConstOffset 32 + Store 13(txval20) 33 + 40: 37 Load 39(g_tTex2di4) + 41: 18 Load 20(g_sSamp) + 43: 42 SampledImage 40 41 + 48: 34(ivec4) ImageGather 43 46 31 ConstOffset 47 + Store 36(txval21) 48 + 56: 53 Load 55(g_tTex2du4) + 57: 18 Load 20(g_sSamp) + 59: 58 SampledImage 56 57 + 65: 50(ivec4) ImageGather 59 62 31 ConstOffset 64 + Store 52(txval22) 65 + 70: 12(ptr) AccessChain 67(psout) 31 + Store 70 69 + 72: 71(ptr) AccessChain 67(psout) 30 + Store 72 68 + 73:8(PS_OUTPUT) Load 67(psout) + ReturnValue 73 + FunctionEnd 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 new file mode 100644 index 0000000..6b1cac3 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out @@ -0,0 +1,349 @@ +hlsl.gather.offsetarray.dx10.frag +Shader version: 450 +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}) +0:20 Function Parameters: +0:? Sequence +0:25 Sequence +0:25 move second child to first child ( temp 4-component vector of float) +0:25 'txval20' ( temp 4-component vector of float) +0:25 textureGatherOffset ( temp 4-component vector of float) +0:25 Construct combined texture-sampler ( temp sampler2DArray) +0:25 'g_tTex2df4' ( uniform texture2DArray) +0:25 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? Constant: +0:? 1 (const int) +0:? 0 (const int) +0:26 Sequence +0:26 move second child to first child ( temp 4-component vector of int) +0:26 'txval21' ( temp 4-component vector of int) +0:26 textureGatherOffset ( temp 4-component vector of int) +0:26 Construct combined texture-sampler ( temp isampler2DArray) +0:26 'g_tTex2di4' ( uniform itexture2DArray) +0:26 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:? 0.400000 +0:? Constant: +0:? 1 (const int) +0:? 1 (const int) +0:27 Sequence +0:27 move second child to first child ( temp 4-component vector of uint) +0:27 'txval22' ( temp 4-component vector of uint) +0:27 textureGatherOffset ( temp 4-component vector of uint) +0:27 Construct combined texture-sampler ( temp usampler2DArray) +0:27 'g_tTex2du4' ( uniform utexture2DArray) +0:27 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:? 0.700000 +0:? Constant: +0:? 1 (const int) +0:? -1 (const int) +0:32 move second child to first child ( temp 4-component vector of float) +0:32 Color: direct index for structure ( temp 4-component vector of float) +0:32 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:32 Constant: +0:32 0 (const int) +0:32 Constant: +0:32 1.000000 +0:32 1.000000 +0:32 1.000000 +0:32 1.000000 +0:33 move second child to first child ( temp float) +0:33 Depth: direct index for structure ( temp float) +0:33 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:33 Constant: +0:33 1 (const int) +0:33 Constant: +0:33 1.000000 +0:35 Branch: Return with expression +0:35 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:20 Function Definition: main( ( temp void) +0:20 Function Parameters: +0:? Sequence +0:20 Sequence +0:20 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:20 1 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1DArray) +0:? 'g_tTex1df4' (layout( binding=0) uniform texture1DArray) +0:? 'g_tTex1di4' ( uniform itexture1DArray) +0:? 'g_tTex1du4' ( uniform utexture1DArray) +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) + + +Linked fragment stage: + + +Shader version: 450 +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}) +0:20 Function Parameters: +0:? Sequence +0:25 Sequence +0:25 move second child to first child ( temp 4-component vector of float) +0:25 'txval20' ( temp 4-component vector of float) +0:25 textureGatherOffset ( temp 4-component vector of float) +0:25 Construct combined texture-sampler ( temp sampler2DArray) +0:25 'g_tTex2df4' ( uniform texture2DArray) +0:25 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? Constant: +0:? 1 (const int) +0:? 0 (const int) +0:26 Sequence +0:26 move second child to first child ( temp 4-component vector of int) +0:26 'txval21' ( temp 4-component vector of int) +0:26 textureGatherOffset ( temp 4-component vector of int) +0:26 Construct combined texture-sampler ( temp isampler2DArray) +0:26 'g_tTex2di4' ( uniform itexture2DArray) +0:26 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:? 0.400000 +0:? Constant: +0:? 1 (const int) +0:? 1 (const int) +0:27 Sequence +0:27 move second child to first child ( temp 4-component vector of uint) +0:27 'txval22' ( temp 4-component vector of uint) +0:27 textureGatherOffset ( temp 4-component vector of uint) +0:27 Construct combined texture-sampler ( temp usampler2DArray) +0:27 'g_tTex2du4' ( uniform utexture2DArray) +0:27 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:? 0.700000 +0:? Constant: +0:? 1 (const int) +0:? -1 (const int) +0:32 move second child to first child ( temp 4-component vector of float) +0:32 Color: direct index for structure ( temp 4-component vector of float) +0:32 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:32 Constant: +0:32 0 (const int) +0:32 Constant: +0:32 1.000000 +0:32 1.000000 +0:32 1.000000 +0:32 1.000000 +0:33 move second child to first child ( temp float) +0:33 Depth: direct index for structure ( temp float) +0:33 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:33 Constant: +0:33 1 (const int) +0:33 Constant: +0:33 1.000000 +0:35 Branch: Return with expression +0:35 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:20 Function Definition: main( ( temp void) +0:20 Function Parameters: +0:? Sequence +0:20 Sequence +0:20 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:20 1 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1DArray) +0:? 'g_tTex1df4' (layout( binding=0) uniform texture1DArray) +0:? 'g_tTex1di4' ( uniform itexture1DArray) +0:? 'g_tTex1du4' ( uniform utexture1DArray) +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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 97 + + Capability Shader + Capability Sampled1D + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 80 84 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + MemberName 8(PS_OUTPUT) 1 "Depth" + Name 10 "@main(" + Name 13 "txval20" + Name 16 "g_tTex2df4" + Name 20 "g_sSamp" + Name 37 "txval21" + Name 40 "g_tTex2di4" + Name 52 "txval22" + Name 55 "g_tTex2du4" + Name 68 "psout" + Name 77 "flattenTemp" + Name 80 "Color" + Name 84 "Depth" + Name 89 "g_tTex1df4a" + Name 90 "g_tTex1df4" + Name 93 "g_tTex1di4" + Name 96 "g_tTex1du4" + Decorate 16(g_tTex2df4) DescriptorSet 0 + Decorate 20(g_sSamp) DescriptorSet 0 + 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 89(g_tTex1df4a) DescriptorSet 0 + Decorate 89(g_tTex1df4a) Binding 1 + Decorate 90(g_tTex1df4) DescriptorSet 0 + Decorate 90(g_tTex1df4) Binding 0 + Decorate 93(g_tTex1di4) DescriptorSet 0 + Decorate 96(g_tTex1du4) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8(PS_OUTPUT): TypeStruct 7(fvec4) 6(float) + 9: TypeFunction 8(PS_OUTPUT) + 12: TypePointer Function 7(fvec4) + 14: TypeImage 6(float) 2D array sampled format:Unknown + 15: TypePointer UniformConstant 14 + 16(g_tTex2df4): 15(ptr) Variable UniformConstant + 18: TypeSampler + 19: TypePointer UniformConstant 18 + 20(g_sSamp): 19(ptr) Variable UniformConstant + 22: TypeSampledImage 14 + 24: TypeVector 6(float) 3 + 25: 6(float) Constant 1036831949 + 26: 6(float) Constant 1045220557 + 27: 6(float) Constant 1050253722 + 28: 24(fvec3) ConstantComposite 25 26 27 + 29: TypeInt 32 1 + 30: TypeVector 29(int) 2 + 31: 29(int) Constant 1 + 32: 29(int) Constant 0 + 33: 30(ivec2) ConstantComposite 31 32 + 35: TypeVector 29(int) 4 + 36: TypePointer Function 35(ivec4) + 38: TypeImage 29(int) 2D array sampled format:Unknown + 39: TypePointer UniformConstant 38 + 40(g_tTex2di4): 39(ptr) Variable UniformConstant + 43: TypeSampledImage 38 + 45: 6(float) Constant 1053609165 + 46: 24(fvec3) ConstantComposite 27 45 45 + 47: 30(ivec2) ConstantComposite 31 31 + 49: TypeInt 32 0 + 50: TypeVector 49(int) 4 + 51: TypePointer Function 50(ivec4) + 53: TypeImage 49(int) 2D array sampled format:Unknown + 54: TypePointer UniformConstant 53 + 55(g_tTex2du4): 54(ptr) Variable UniformConstant + 58: TypeSampledImage 53 + 60: 6(float) Constant 1056964608 + 61: 6(float) Constant 1058642330 + 62: 6(float) Constant 1060320051 + 63: 24(fvec3) ConstantComposite 60 61 62 + 64: 29(int) Constant 4294967295 + 65: 30(ivec2) ConstantComposite 31 64 + 67: TypePointer Function 8(PS_OUTPUT) + 69: 6(float) Constant 1065353216 + 70: 7(fvec4) ConstantComposite 69 69 69 69 + 72: TypePointer Function 6(float) + 79: TypePointer Output 7(fvec4) + 80(Color): 79(ptr) Variable Output + 83: TypePointer Output 6(float) + 84(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 + 90(g_tTex1df4): 88(ptr) Variable UniformConstant + 91: TypeImage 29(int) 1D array sampled format:Unknown + 92: TypePointer UniformConstant 91 + 93(g_tTex1di4): 92(ptr) Variable UniformConstant + 94: TypeImage 49(int) 1D array sampled format:Unknown + 95: TypePointer UniformConstant 94 + 96(g_tTex1du4): 95(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label + 77(flattenTemp): 67(ptr) Variable Function + 78:8(PS_OUTPUT) FunctionCall 10(@main() + Store 77(flattenTemp) 78 + 81: 12(ptr) AccessChain 77(flattenTemp) 32 + 82: 7(fvec4) Load 81 + Store 80(Color) 82 + 85: 72(ptr) AccessChain 77(flattenTemp) 31 + 86: 6(float) Load 85 + Store 84(Depth) 86 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 13(txval20): 12(ptr) Variable Function + 37(txval21): 36(ptr) Variable Function + 52(txval22): 51(ptr) Variable Function + 68(psout): 67(ptr) Variable Function + 17: 14 Load 16(g_tTex2df4) + 21: 18 Load 20(g_sSamp) + 23: 22 SampledImage 17 21 + 34: 7(fvec4) ImageGather 23 28 32 ConstOffset 33 + Store 13(txval20) 34 + 41: 38 Load 40(g_tTex2di4) + 42: 18 Load 20(g_sSamp) + 44: 43 SampledImage 41 42 + 48: 35(ivec4) ImageGather 44 46 32 ConstOffset 47 + Store 37(txval21) 48 + 56: 53 Load 55(g_tTex2du4) + 57: 18 Load 20(g_sSamp) + 59: 58 SampledImage 56 57 + 66: 50(ivec4) ImageGather 59 63 32 ConstOffset 65 + Store 52(txval22) 66 + 71: 12(ptr) AccessChain 68(psout) 32 + Store 71 70 + 73: 72(ptr) AccessChain 68(psout) 31 + Store 73 69 + 74:8(PS_OUTPUT) Load 68(psout) + ReturnValue 74 + FunctionEnd 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 new file mode 100644 index 0000000..c918d99 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out @@ -0,0 +1,1115 @@ +hlsl.gatherRGBA.array.dx10.frag +Shader version: 450 +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}) +0:28 Function Parameters: +0:? Sequence +0:33 Sequence +0:33 move second child to first child ( temp 4-component vector of float) +0:33 'txval00' ( temp 4-component vector of float) +0:33 textureGather ( temp 4-component vector of float) +0:33 Construct combined texture-sampler ( temp sampler2DArray) +0:33 'g_tTex2df4a' ( uniform texture2DArray) +0:33 'g_sSamp' (layout( binding=0) uniform sampler) +0:33 c3: direct index for structure ( uniform 3-component vector of float) +0:33 '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:33 Constant: +0:33 2 (const uint) +0:33 Constant: +0:33 0 (const int) +0:34 Sequence +0:34 move second child to first child ( temp 4-component vector of int) +0:34 'txval01' ( temp 4-component vector of int) +0:34 textureGather ( temp 4-component vector of int) +0:34 Construct combined texture-sampler ( temp isampler2DArray) +0:34 'g_tTex2di4a' ( uniform itexture2DArray) +0:34 'g_sSamp' (layout( binding=0) uniform sampler) +0:34 c3: direct index for structure ( uniform 3-component vector of float) +0:34 '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:34 Constant: +0:34 2 (const uint) +0:34 Constant: +0:34 0 (const int) +0:35 Sequence +0:35 move second child to first child ( temp 4-component vector of uint) +0:35 'txval02' ( temp 4-component vector of uint) +0:35 textureGather ( temp 4-component vector of uint) +0:35 Construct combined texture-sampler ( temp usampler2DArray) +0:35 'g_tTex2du4a' ( uniform utexture2DArray) +0:35 'g_sSamp' (layout( binding=0) uniform sampler) +0:35 c3: direct index for structure ( uniform 3-component vector of float) +0:35 '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:35 Constant: +0:35 2 (const uint) +0:35 Constant: +0:35 0 (const int) +0:37 Sequence +0:37 move second child to first child ( temp 4-component vector of float) +0:37 'txval10' ( temp 4-component vector of float) +0:37 textureGather ( temp 4-component vector of float) +0:37 Construct combined texture-sampler ( temp sampler2DArray) +0:37 'g_tTex2df4a' ( uniform texture2DArray) +0:37 'g_sSamp' (layout( binding=0) uniform sampler) +0:37 c3: direct index for structure ( uniform 3-component vector of float) +0:37 '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:37 Constant: +0:37 2 (const uint) +0:37 Constant: +0:37 1 (const int) +0:38 Sequence +0:38 move second child to first child ( temp 4-component vector of int) +0:38 'txval11' ( temp 4-component vector of int) +0:38 textureGather ( temp 4-component vector of int) +0:38 Construct combined texture-sampler ( temp isampler2DArray) +0:38 'g_tTex2di4a' ( uniform itexture2DArray) +0:38 'g_sSamp' (layout( binding=0) uniform sampler) +0:38 c3: direct index for structure ( uniform 3-component vector of float) +0:38 '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:38 Constant: +0:38 2 (const uint) +0:38 Constant: +0:38 1 (const int) +0:39 Sequence +0:39 move second child to first child ( temp 4-component vector of uint) +0:39 'txval12' ( temp 4-component vector of uint) +0:39 textureGather ( temp 4-component vector of uint) +0:39 Construct combined texture-sampler ( temp usampler2DArray) +0:39 'g_tTex2du4a' ( uniform utexture2DArray) +0:39 'g_sSamp' (layout( binding=0) uniform sampler) +0:39 c3: direct index for structure ( uniform 3-component vector of float) +0:39 '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:39 Constant: +0:39 2 (const uint) +0:39 Constant: +0:39 1 (const int) +0:41 Sequence +0:41 move second child to first child ( temp 4-component vector of float) +0:41 'txval20' ( temp 4-component vector of float) +0:41 textureGather ( temp 4-component vector of float) +0:41 Construct combined texture-sampler ( temp sampler2DArray) +0:41 'g_tTex2df4a' ( uniform texture2DArray) +0:41 'g_sSamp' (layout( binding=0) uniform sampler) +0:41 c3: direct index for structure ( uniform 3-component vector of float) +0:41 '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:41 Constant: +0:41 2 (const uint) +0:41 Constant: +0:41 2 (const int) +0:42 Sequence +0:42 move second child to first child ( temp 4-component vector of int) +0:42 'txval21' ( temp 4-component vector of int) +0:42 textureGather ( temp 4-component vector of int) +0:42 Construct combined texture-sampler ( temp isampler2DArray) +0:42 'g_tTex2di4a' ( uniform itexture2DArray) +0:42 'g_sSamp' (layout( binding=0) uniform sampler) +0:42 c3: direct index for structure ( uniform 3-component vector of float) +0:42 '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:42 Constant: +0:42 2 (const uint) +0:42 Constant: +0:42 2 (const int) +0:43 Sequence +0:43 move second child to first child ( temp 4-component vector of uint) +0:43 'txval22' ( temp 4-component vector of uint) +0:43 textureGather ( temp 4-component vector of uint) +0:43 Construct combined texture-sampler ( temp usampler2DArray) +0:43 'g_tTex2du4a' ( uniform utexture2DArray) +0:43 'g_sSamp' (layout( binding=0) uniform sampler) +0:43 c3: direct index for structure ( uniform 3-component vector of float) +0:43 '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:43 Constant: +0:43 2 (const uint) +0:43 Constant: +0:43 2 (const int) +0:45 Sequence +0:45 move second child to first child ( temp 4-component vector of float) +0:45 'txval30' ( temp 4-component vector of float) +0:45 textureGather ( temp 4-component vector of float) +0:45 Construct combined texture-sampler ( temp sampler2DArray) +0:45 'g_tTex2df4a' ( uniform texture2DArray) +0:45 'g_sSamp' (layout( binding=0) uniform sampler) +0:45 c3: direct index for structure ( uniform 3-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}) +0:45 Constant: +0:45 2 (const uint) +0:45 Constant: +0:45 3 (const int) +0:46 Sequence +0:46 move second child to first child ( temp 4-component vector of int) +0:46 'txval31' ( temp 4-component vector of int) +0:46 textureGather ( temp 4-component vector of int) +0:46 Construct combined texture-sampler ( temp isampler2DArray) +0:46 'g_tTex2di4a' ( uniform itexture2DArray) +0:46 'g_sSamp' (layout( binding=0) uniform sampler) +0:46 c3: direct index for structure ( uniform 3-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}) +0:46 Constant: +0:46 2 (const uint) +0:46 Constant: +0:46 3 (const int) +0:47 Sequence +0:47 move second child to first child ( temp 4-component vector of uint) +0:47 'txval32' ( temp 4-component vector of uint) +0:47 textureGather ( temp 4-component vector of uint) +0:47 Construct combined texture-sampler ( temp usampler2DArray) +0:47 'g_tTex2du4a' ( uniform utexture2DArray) +0:47 'g_sSamp' (layout( binding=0) uniform sampler) +0:47 c3: direct index for structure ( uniform 3-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}) +0:47 Constant: +0:47 2 (const uint) +0:47 Constant: +0:47 3 (const int) +0:51 Sequence +0:51 move second child to first child ( temp 4-component vector of float) +0:51 'txval40' ( temp 4-component vector of float) +0:51 textureGather ( temp 4-component vector of float) +0:51 Construct combined texture-sampler ( temp samplerCubeArray) +0:51 'g_tTexcdf4a' ( uniform textureCubeArray) +0:51 'g_sSamp' (layout( binding=0) uniform sampler) +0:51 c4: direct index for structure ( uniform 4-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}) +0:51 Constant: +0:51 3 (const uint) +0:51 Constant: +0:51 0 (const int) +0:52 Sequence +0:52 move second child to first child ( temp 4-component vector of int) +0:52 'txval41' ( temp 4-component vector of int) +0:52 textureGather ( temp 4-component vector of int) +0:52 Construct combined texture-sampler ( temp isamplerCubeArray) +0:52 'g_tTexcdi4a' ( uniform itextureCubeArray) +0:52 'g_sSamp' (layout( binding=0) uniform sampler) +0:52 c4: direct index for structure ( uniform 4-component vector of float) +0:52 '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:52 Constant: +0:52 3 (const uint) +0:52 Constant: +0:52 0 (const int) +0:53 Sequence +0:53 move second child to first child ( temp 4-component vector of uint) +0:53 'txval42' ( temp 4-component vector of uint) +0:53 textureGather ( temp 4-component vector of uint) +0:53 Construct combined texture-sampler ( temp usamplerCubeArray) +0:53 'g_tTexcdu4a' ( uniform utextureCubeArray) +0:53 'g_sSamp' (layout( binding=0) uniform sampler) +0:53 c4: direct index for structure ( uniform 4-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 3 (const uint) +0:53 Constant: +0:53 0 (const int) +0:55 Sequence +0:55 move second child to first child ( temp 4-component vector of float) +0:55 'txval50' ( temp 4-component vector of float) +0:55 textureGather ( temp 4-component vector of float) +0:55 Construct combined texture-sampler ( temp samplerCubeArray) +0:55 'g_tTexcdf4a' ( uniform textureCubeArray) +0:55 'g_sSamp' (layout( binding=0) uniform sampler) +0:55 c4: direct index for structure ( uniform 4-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 3 (const uint) +0:55 Constant: +0:55 1 (const int) +0:56 Sequence +0:56 move second child to first child ( temp 4-component vector of int) +0:56 'txval51' ( temp 4-component vector of int) +0:56 textureGather ( temp 4-component vector of int) +0:56 Construct combined texture-sampler ( temp isamplerCubeArray) +0:56 'g_tTexcdi4a' ( uniform itextureCubeArray) +0:56 'g_sSamp' (layout( binding=0) uniform sampler) +0:56 c4: direct index for structure ( uniform 4-component vector of float) +0:56 '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:56 Constant: +0:56 3 (const uint) +0:56 Constant: +0:56 1 (const int) +0:57 Sequence +0:57 move second child to first child ( temp 4-component vector of uint) +0:57 'txval52' ( temp 4-component vector of uint) +0:57 textureGather ( temp 4-component vector of uint) +0:57 Construct combined texture-sampler ( temp usamplerCubeArray) +0:57 'g_tTexcdu4a' ( uniform utextureCubeArray) +0:57 'g_sSamp' (layout( binding=0) uniform sampler) +0:57 c4: direct index for structure ( uniform 4-component vector of float) +0:57 '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:57 Constant: +0:57 3 (const uint) +0:57 Constant: +0:57 1 (const int) +0:59 Sequence +0:59 move second child to first child ( temp 4-component vector of float) +0:59 'txval60' ( temp 4-component vector of float) +0:59 textureGather ( temp 4-component vector of float) +0:59 Construct combined texture-sampler ( temp samplerCubeArray) +0:59 'g_tTexcdf4a' ( uniform textureCubeArray) +0:59 'g_sSamp' (layout( binding=0) uniform sampler) +0:59 c4: direct index for structure ( uniform 4-component vector of float) +0:59 '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:59 Constant: +0:59 3 (const uint) +0:59 Constant: +0:59 2 (const int) +0:60 Sequence +0:60 move second child to first child ( temp 4-component vector of int) +0:60 'txval61' ( temp 4-component vector of int) +0:60 textureGather ( temp 4-component vector of int) +0:60 Construct combined texture-sampler ( temp isamplerCubeArray) +0:60 'g_tTexcdi4a' ( uniform itextureCubeArray) +0:60 'g_sSamp' (layout( binding=0) uniform sampler) +0:60 c4: direct index for structure ( uniform 4-component vector of float) +0:60 '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:60 Constant: +0:60 3 (const uint) +0:60 Constant: +0:60 2 (const int) +0:61 Sequence +0:61 move second child to first child ( temp 4-component vector of uint) +0:61 'txval62' ( temp 4-component vector of uint) +0:61 textureGather ( temp 4-component vector of uint) +0:61 Construct combined texture-sampler ( temp usamplerCubeArray) +0:61 'g_tTexcdu4a' ( uniform utextureCubeArray) +0:61 'g_sSamp' (layout( binding=0) uniform sampler) +0:61 c4: direct index for structure ( uniform 4-component vector of float) +0:61 '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:61 Constant: +0:61 3 (const uint) +0:61 Constant: +0:61 2 (const int) +0:63 Sequence +0:63 move second child to first child ( temp 4-component vector of float) +0:63 'txval70' ( temp 4-component vector of float) +0:63 textureGather ( temp 4-component vector of float) +0:63 Construct combined texture-sampler ( temp samplerCubeArray) +0:63 'g_tTexcdf4a' ( uniform textureCubeArray) +0:63 'g_sSamp' (layout( binding=0) uniform sampler) +0:63 c4: direct index for structure ( uniform 4-component vector of float) +0:63 '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:63 Constant: +0:63 3 (const uint) +0:63 Constant: +0:63 3 (const int) +0:64 Sequence +0:64 move second child to first child ( temp 4-component vector of int) +0:64 'txval71' ( temp 4-component vector of int) +0:64 textureGather ( temp 4-component vector of int) +0:64 Construct combined texture-sampler ( temp isamplerCubeArray) +0:64 'g_tTexcdi4a' ( uniform itextureCubeArray) +0:64 'g_sSamp' (layout( binding=0) uniform sampler) +0:64 c4: direct index for structure ( uniform 4-component vector of float) +0:64 '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:64 Constant: +0:64 3 (const uint) +0:64 Constant: +0:64 3 (const int) +0:65 Sequence +0:65 move second child to first child ( temp 4-component vector of uint) +0:65 'txval72' ( temp 4-component vector of uint) +0:65 textureGather ( temp 4-component vector of uint) +0:65 Construct combined texture-sampler ( temp usamplerCubeArray) +0:65 'g_tTexcdu4a' ( uniform utextureCubeArray) +0:65 'g_sSamp' (layout( binding=0) uniform sampler) +0:65 c4: direct index for structure ( uniform 4-component vector of float) +0:65 '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:65 Constant: +0:65 3 (const uint) +0:65 Constant: +0:65 3 (const int) +0:67 move second child to first child ( temp 4-component vector of float) +0:67 Color: direct index for structure ( temp 4-component vector of float) +0:67 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:67 Constant: +0:67 0 (const int) +0:67 Constant: +0:67 1.000000 +0:67 1.000000 +0:67 1.000000 +0:67 1.000000 +0:68 move second child to first child ( temp float) +0:68 Depth: direct index for structure ( temp float) +0:68 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:68 Constant: +0:68 1 (const int) +0:68 Constant: +0:68 1.000000 +0:70 Branch: Return with expression +0:70 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:28 Function Definition: main( ( temp void) +0:28 Function Parameters: +0:? Sequence +0:28 Sequence +0:28 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:28 1 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_sSamp2d' ( uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=0) 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:? '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) + + +Linked fragment stage: + + +Shader version: 450 +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}) +0:28 Function Parameters: +0:? Sequence +0:33 Sequence +0:33 move second child to first child ( temp 4-component vector of float) +0:33 'txval00' ( temp 4-component vector of float) +0:33 textureGather ( temp 4-component vector of float) +0:33 Construct combined texture-sampler ( temp sampler2DArray) +0:33 'g_tTex2df4a' ( uniform texture2DArray) +0:33 'g_sSamp' (layout( binding=0) uniform sampler) +0:33 c3: direct index for structure ( uniform 3-component vector of float) +0:33 '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:33 Constant: +0:33 2 (const uint) +0:33 Constant: +0:33 0 (const int) +0:34 Sequence +0:34 move second child to first child ( temp 4-component vector of int) +0:34 'txval01' ( temp 4-component vector of int) +0:34 textureGather ( temp 4-component vector of int) +0:34 Construct combined texture-sampler ( temp isampler2DArray) +0:34 'g_tTex2di4a' ( uniform itexture2DArray) +0:34 'g_sSamp' (layout( binding=0) uniform sampler) +0:34 c3: direct index for structure ( uniform 3-component vector of float) +0:34 '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:34 Constant: +0:34 2 (const uint) +0:34 Constant: +0:34 0 (const int) +0:35 Sequence +0:35 move second child to first child ( temp 4-component vector of uint) +0:35 'txval02' ( temp 4-component vector of uint) +0:35 textureGather ( temp 4-component vector of uint) +0:35 Construct combined texture-sampler ( temp usampler2DArray) +0:35 'g_tTex2du4a' ( uniform utexture2DArray) +0:35 'g_sSamp' (layout( binding=0) uniform sampler) +0:35 c3: direct index for structure ( uniform 3-component vector of float) +0:35 '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:35 Constant: +0:35 2 (const uint) +0:35 Constant: +0:35 0 (const int) +0:37 Sequence +0:37 move second child to first child ( temp 4-component vector of float) +0:37 'txval10' ( temp 4-component vector of float) +0:37 textureGather ( temp 4-component vector of float) +0:37 Construct combined texture-sampler ( temp sampler2DArray) +0:37 'g_tTex2df4a' ( uniform texture2DArray) +0:37 'g_sSamp' (layout( binding=0) uniform sampler) +0:37 c3: direct index for structure ( uniform 3-component vector of float) +0:37 '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:37 Constant: +0:37 2 (const uint) +0:37 Constant: +0:37 1 (const int) +0:38 Sequence +0:38 move second child to first child ( temp 4-component vector of int) +0:38 'txval11' ( temp 4-component vector of int) +0:38 textureGather ( temp 4-component vector of int) +0:38 Construct combined texture-sampler ( temp isampler2DArray) +0:38 'g_tTex2di4a' ( uniform itexture2DArray) +0:38 'g_sSamp' (layout( binding=0) uniform sampler) +0:38 c3: direct index for structure ( uniform 3-component vector of float) +0:38 '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:38 Constant: +0:38 2 (const uint) +0:38 Constant: +0:38 1 (const int) +0:39 Sequence +0:39 move second child to first child ( temp 4-component vector of uint) +0:39 'txval12' ( temp 4-component vector of uint) +0:39 textureGather ( temp 4-component vector of uint) +0:39 Construct combined texture-sampler ( temp usampler2DArray) +0:39 'g_tTex2du4a' ( uniform utexture2DArray) +0:39 'g_sSamp' (layout( binding=0) uniform sampler) +0:39 c3: direct index for structure ( uniform 3-component vector of float) +0:39 '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:39 Constant: +0:39 2 (const uint) +0:39 Constant: +0:39 1 (const int) +0:41 Sequence +0:41 move second child to first child ( temp 4-component vector of float) +0:41 'txval20' ( temp 4-component vector of float) +0:41 textureGather ( temp 4-component vector of float) +0:41 Construct combined texture-sampler ( temp sampler2DArray) +0:41 'g_tTex2df4a' ( uniform texture2DArray) +0:41 'g_sSamp' (layout( binding=0) uniform sampler) +0:41 c3: direct index for structure ( uniform 3-component vector of float) +0:41 '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:41 Constant: +0:41 2 (const uint) +0:41 Constant: +0:41 2 (const int) +0:42 Sequence +0:42 move second child to first child ( temp 4-component vector of int) +0:42 'txval21' ( temp 4-component vector of int) +0:42 textureGather ( temp 4-component vector of int) +0:42 Construct combined texture-sampler ( temp isampler2DArray) +0:42 'g_tTex2di4a' ( uniform itexture2DArray) +0:42 'g_sSamp' (layout( binding=0) uniform sampler) +0:42 c3: direct index for structure ( uniform 3-component vector of float) +0:42 '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:42 Constant: +0:42 2 (const uint) +0:42 Constant: +0:42 2 (const int) +0:43 Sequence +0:43 move second child to first child ( temp 4-component vector of uint) +0:43 'txval22' ( temp 4-component vector of uint) +0:43 textureGather ( temp 4-component vector of uint) +0:43 Construct combined texture-sampler ( temp usampler2DArray) +0:43 'g_tTex2du4a' ( uniform utexture2DArray) +0:43 'g_sSamp' (layout( binding=0) uniform sampler) +0:43 c3: direct index for structure ( uniform 3-component vector of float) +0:43 '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:43 Constant: +0:43 2 (const uint) +0:43 Constant: +0:43 2 (const int) +0:45 Sequence +0:45 move second child to first child ( temp 4-component vector of float) +0:45 'txval30' ( temp 4-component vector of float) +0:45 textureGather ( temp 4-component vector of float) +0:45 Construct combined texture-sampler ( temp sampler2DArray) +0:45 'g_tTex2df4a' ( uniform texture2DArray) +0:45 'g_sSamp' (layout( binding=0) uniform sampler) +0:45 c3: direct index for structure ( uniform 3-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}) +0:45 Constant: +0:45 2 (const uint) +0:45 Constant: +0:45 3 (const int) +0:46 Sequence +0:46 move second child to first child ( temp 4-component vector of int) +0:46 'txval31' ( temp 4-component vector of int) +0:46 textureGather ( temp 4-component vector of int) +0:46 Construct combined texture-sampler ( temp isampler2DArray) +0:46 'g_tTex2di4a' ( uniform itexture2DArray) +0:46 'g_sSamp' (layout( binding=0) uniform sampler) +0:46 c3: direct index for structure ( uniform 3-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}) +0:46 Constant: +0:46 2 (const uint) +0:46 Constant: +0:46 3 (const int) +0:47 Sequence +0:47 move second child to first child ( temp 4-component vector of uint) +0:47 'txval32' ( temp 4-component vector of uint) +0:47 textureGather ( temp 4-component vector of uint) +0:47 Construct combined texture-sampler ( temp usampler2DArray) +0:47 'g_tTex2du4a' ( uniform utexture2DArray) +0:47 'g_sSamp' (layout( binding=0) uniform sampler) +0:47 c3: direct index for structure ( uniform 3-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}) +0:47 Constant: +0:47 2 (const uint) +0:47 Constant: +0:47 3 (const int) +0:51 Sequence +0:51 move second child to first child ( temp 4-component vector of float) +0:51 'txval40' ( temp 4-component vector of float) +0:51 textureGather ( temp 4-component vector of float) +0:51 Construct combined texture-sampler ( temp samplerCubeArray) +0:51 'g_tTexcdf4a' ( uniform textureCubeArray) +0:51 'g_sSamp' (layout( binding=0) uniform sampler) +0:51 c4: direct index for structure ( uniform 4-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}) +0:51 Constant: +0:51 3 (const uint) +0:51 Constant: +0:51 0 (const int) +0:52 Sequence +0:52 move second child to first child ( temp 4-component vector of int) +0:52 'txval41' ( temp 4-component vector of int) +0:52 textureGather ( temp 4-component vector of int) +0:52 Construct combined texture-sampler ( temp isamplerCubeArray) +0:52 'g_tTexcdi4a' ( uniform itextureCubeArray) +0:52 'g_sSamp' (layout( binding=0) uniform sampler) +0:52 c4: direct index for structure ( uniform 4-component vector of float) +0:52 '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:52 Constant: +0:52 3 (const uint) +0:52 Constant: +0:52 0 (const int) +0:53 Sequence +0:53 move second child to first child ( temp 4-component vector of uint) +0:53 'txval42' ( temp 4-component vector of uint) +0:53 textureGather ( temp 4-component vector of uint) +0:53 Construct combined texture-sampler ( temp usamplerCubeArray) +0:53 'g_tTexcdu4a' ( uniform utextureCubeArray) +0:53 'g_sSamp' (layout( binding=0) uniform sampler) +0:53 c4: direct index for structure ( uniform 4-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 3 (const uint) +0:53 Constant: +0:53 0 (const int) +0:55 Sequence +0:55 move second child to first child ( temp 4-component vector of float) +0:55 'txval50' ( temp 4-component vector of float) +0:55 textureGather ( temp 4-component vector of float) +0:55 Construct combined texture-sampler ( temp samplerCubeArray) +0:55 'g_tTexcdf4a' ( uniform textureCubeArray) +0:55 'g_sSamp' (layout( binding=0) uniform sampler) +0:55 c4: direct index for structure ( uniform 4-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 3 (const uint) +0:55 Constant: +0:55 1 (const int) +0:56 Sequence +0:56 move second child to first child ( temp 4-component vector of int) +0:56 'txval51' ( temp 4-component vector of int) +0:56 textureGather ( temp 4-component vector of int) +0:56 Construct combined texture-sampler ( temp isamplerCubeArray) +0:56 'g_tTexcdi4a' ( uniform itextureCubeArray) +0:56 'g_sSamp' (layout( binding=0) uniform sampler) +0:56 c4: direct index for structure ( uniform 4-component vector of float) +0:56 '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:56 Constant: +0:56 3 (const uint) +0:56 Constant: +0:56 1 (const int) +0:57 Sequence +0:57 move second child to first child ( temp 4-component vector of uint) +0:57 'txval52' ( temp 4-component vector of uint) +0:57 textureGather ( temp 4-component vector of uint) +0:57 Construct combined texture-sampler ( temp usamplerCubeArray) +0:57 'g_tTexcdu4a' ( uniform utextureCubeArray) +0:57 'g_sSamp' (layout( binding=0) uniform sampler) +0:57 c4: direct index for structure ( uniform 4-component vector of float) +0:57 '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:57 Constant: +0:57 3 (const uint) +0:57 Constant: +0:57 1 (const int) +0:59 Sequence +0:59 move second child to first child ( temp 4-component vector of float) +0:59 'txval60' ( temp 4-component vector of float) +0:59 textureGather ( temp 4-component vector of float) +0:59 Construct combined texture-sampler ( temp samplerCubeArray) +0:59 'g_tTexcdf4a' ( uniform textureCubeArray) +0:59 'g_sSamp' (layout( binding=0) uniform sampler) +0:59 c4: direct index for structure ( uniform 4-component vector of float) +0:59 '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:59 Constant: +0:59 3 (const uint) +0:59 Constant: +0:59 2 (const int) +0:60 Sequence +0:60 move second child to first child ( temp 4-component vector of int) +0:60 'txval61' ( temp 4-component vector of int) +0:60 textureGather ( temp 4-component vector of int) +0:60 Construct combined texture-sampler ( temp isamplerCubeArray) +0:60 'g_tTexcdi4a' ( uniform itextureCubeArray) +0:60 'g_sSamp' (layout( binding=0) uniform sampler) +0:60 c4: direct index for structure ( uniform 4-component vector of float) +0:60 '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:60 Constant: +0:60 3 (const uint) +0:60 Constant: +0:60 2 (const int) +0:61 Sequence +0:61 move second child to first child ( temp 4-component vector of uint) +0:61 'txval62' ( temp 4-component vector of uint) +0:61 textureGather ( temp 4-component vector of uint) +0:61 Construct combined texture-sampler ( temp usamplerCubeArray) +0:61 'g_tTexcdu4a' ( uniform utextureCubeArray) +0:61 'g_sSamp' (layout( binding=0) uniform sampler) +0:61 c4: direct index for structure ( uniform 4-component vector of float) +0:61 '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:61 Constant: +0:61 3 (const uint) +0:61 Constant: +0:61 2 (const int) +0:63 Sequence +0:63 move second child to first child ( temp 4-component vector of float) +0:63 'txval70' ( temp 4-component vector of float) +0:63 textureGather ( temp 4-component vector of float) +0:63 Construct combined texture-sampler ( temp samplerCubeArray) +0:63 'g_tTexcdf4a' ( uniform textureCubeArray) +0:63 'g_sSamp' (layout( binding=0) uniform sampler) +0:63 c4: direct index for structure ( uniform 4-component vector of float) +0:63 '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:63 Constant: +0:63 3 (const uint) +0:63 Constant: +0:63 3 (const int) +0:64 Sequence +0:64 move second child to first child ( temp 4-component vector of int) +0:64 'txval71' ( temp 4-component vector of int) +0:64 textureGather ( temp 4-component vector of int) +0:64 Construct combined texture-sampler ( temp isamplerCubeArray) +0:64 'g_tTexcdi4a' ( uniform itextureCubeArray) +0:64 'g_sSamp' (layout( binding=0) uniform sampler) +0:64 c4: direct index for structure ( uniform 4-component vector of float) +0:64 '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:64 Constant: +0:64 3 (const uint) +0:64 Constant: +0:64 3 (const int) +0:65 Sequence +0:65 move second child to first child ( temp 4-component vector of uint) +0:65 'txval72' ( temp 4-component vector of uint) +0:65 textureGather ( temp 4-component vector of uint) +0:65 Construct combined texture-sampler ( temp usamplerCubeArray) +0:65 'g_tTexcdu4a' ( uniform utextureCubeArray) +0:65 'g_sSamp' (layout( binding=0) uniform sampler) +0:65 c4: direct index for structure ( uniform 4-component vector of float) +0:65 '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:65 Constant: +0:65 3 (const uint) +0:65 Constant: +0:65 3 (const int) +0:67 move second child to first child ( temp 4-component vector of float) +0:67 Color: direct index for structure ( temp 4-component vector of float) +0:67 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:67 Constant: +0:67 0 (const int) +0:67 Constant: +0:67 1.000000 +0:67 1.000000 +0:67 1.000000 +0:67 1.000000 +0:68 move second child to first child ( temp float) +0:68 Depth: direct index for structure ( temp float) +0:68 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:68 Constant: +0:68 1 (const int) +0:68 Constant: +0:68 1.000000 +0:70 Branch: Return with expression +0:70 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:28 Function Definition: main( ( temp void) +0:28 Function Parameters: +0:? Sequence +0:28 Sequence +0:28 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:28 1 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_sSamp2d' ( uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=0) 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:? '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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 255 + + Capability Shader + Capability Sampled1D + Capability SampledCubeArray + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 238 242 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + MemberName 8(PS_OUTPUT) 1 "Depth" + Name 10 "@main(" + Name 13 "txval00" + Name 16 "g_tTex2df4a" + Name 20 "g_sSamp" + 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 38 "txval01" + Name 41 "g_tTex2di4a" + Name 52 "txval02" + Name 55 "g_tTex2du4a" + Name 63 "txval10" + Name 71 "txval11" + Name 78 "txval12" + Name 85 "txval20" + Name 92 "txval21" + Name 99 "txval22" + Name 106 "txval30" + Name 114 "txval31" + Name 121 "txval32" + Name 128 "txval40" + Name 131 "g_tTexcdf4a" + Name 140 "txval41" + Name 143 "g_tTexcdi4a" + Name 151 "txval42" + Name 154 "g_tTexcdu4a" + Name 162 "txval50" + Name 169 "txval51" + Name 176 "txval52" + Name 183 "txval60" + Name 190 "txval61" + Name 197 "txval62" + Name 204 "txval70" + Name 211 "txval71" + Name 218 "txval72" + Name 226 "psout" + Name 235 "flattenTemp" + Name 238 "Color" + Name 242 "Depth" + Name 245 "g_sSamp2d" + Name 248 "g_tTex1df4a" + Name 251 "g_tTex1di4a" + Name 254 "g_tTex1du4a" + Decorate 16(g_tTex2df4a) DescriptorSet 0 + Decorate 20(g_sSamp) DescriptorSet 0 + Decorate 20(g_sSamp) Binding 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 41(g_tTex2di4a) DescriptorSet 0 + Decorate 55(g_tTex2du4a) DescriptorSet 0 + 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 245(g_sSamp2d) DescriptorSet 0 + Decorate 248(g_tTex1df4a) DescriptorSet 0 + Decorate 248(g_tTex1df4a) Binding 0 + Decorate 251(g_tTex1di4a) DescriptorSet 0 + Decorate 254(g_tTex1du4a) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8(PS_OUTPUT): TypeStruct 7(fvec4) 6(float) + 9: TypeFunction 8(PS_OUTPUT) + 12: TypePointer Function 7(fvec4) + 14: TypeImage 6(float) 2D array sampled format:Unknown + 15: TypePointer UniformConstant 14 + 16(g_tTex2df4a): 15(ptr) Variable UniformConstant + 18: TypeSampler + 19: TypePointer UniformConstant 18 + 20(g_sSamp): 19(ptr) Variable UniformConstant + 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 2 + 31: TypePointer Uniform 25(fvec3) + 34: 29(int) Constant 0 + 36: TypeVector 29(int) 4 + 37: TypePointer Function 36(ivec4) + 39: TypeImage 29(int) 2D array sampled format:Unknown + 40: TypePointer UniformConstant 39 + 41(g_tTex2di4a): 40(ptr) Variable UniformConstant + 44: TypeSampledImage 39 + 49: TypeInt 32 0 + 50: TypeVector 49(int) 4 + 51: TypePointer Function 50(ivec4) + 53: TypeImage 49(int) 2D array sampled format:Unknown + 54: TypePointer UniformConstant 53 + 55(g_tTex2du4a): 54(ptr) Variable UniformConstant + 58: TypeSampledImage 53 + 69: 29(int) Constant 1 + 112: 29(int) Constant 3 + 129: TypeImage 6(float) Cube array sampled format:Unknown + 130: TypePointer UniformConstant 129 +131(g_tTexcdf4a): 130(ptr) Variable UniformConstant + 134: TypeSampledImage 129 + 136: TypePointer Uniform 7(fvec4) + 141: TypeImage 29(int) Cube array sampled format:Unknown + 142: TypePointer UniformConstant 141 +143(g_tTexcdi4a): 142(ptr) Variable UniformConstant + 146: TypeSampledImage 141 + 152: TypeImage 49(int) Cube array sampled format:Unknown + 153: TypePointer UniformConstant 152 +154(g_tTexcdu4a): 153(ptr) Variable UniformConstant + 157: TypeSampledImage 152 + 225: TypePointer Function 8(PS_OUTPUT) + 227: 6(float) Constant 1065353216 + 228: 7(fvec4) ConstantComposite 227 227 227 227 + 230: TypePointer Function 6(float) + 237: TypePointer Output 7(fvec4) + 238(Color): 237(ptr) Variable Output + 241: TypePointer Output 6(float) + 242(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 +248(g_tTex1df4a): 247(ptr) Variable UniformConstant + 249: TypeImage 29(int) 1D array sampled format:Unknown + 250: TypePointer UniformConstant 249 +251(g_tTex1di4a): 250(ptr) Variable UniformConstant + 252: TypeImage 49(int) 1D array sampled format:Unknown + 253: TypePointer UniformConstant 252 +254(g_tTex1du4a): 253(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label +235(flattenTemp): 225(ptr) Variable Function + 236:8(PS_OUTPUT) FunctionCall 10(@main() + Store 235(flattenTemp) 236 + 239: 12(ptr) AccessChain 235(flattenTemp) 34 + 240: 7(fvec4) Load 239 + Store 238(Color) 240 + 243: 230(ptr) AccessChain 235(flattenTemp) 69 + 244: 6(float) Load 243 + Store 242(Depth) 244 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 13(txval00): 12(ptr) Variable Function + 38(txval01): 37(ptr) Variable Function + 52(txval02): 51(ptr) Variable Function + 63(txval10): 12(ptr) Variable Function + 71(txval11): 37(ptr) Variable Function + 78(txval12): 51(ptr) Variable Function + 85(txval20): 12(ptr) Variable Function + 92(txval21): 37(ptr) Variable Function + 99(txval22): 51(ptr) Variable Function + 106(txval30): 12(ptr) Variable Function + 114(txval31): 37(ptr) Variable Function + 121(txval32): 51(ptr) Variable Function + 128(txval40): 12(ptr) Variable Function + 140(txval41): 37(ptr) Variable Function + 151(txval42): 51(ptr) Variable Function + 162(txval50): 12(ptr) Variable Function + 169(txval51): 37(ptr) Variable Function + 176(txval52): 51(ptr) Variable Function + 183(txval60): 12(ptr) Variable Function + 190(txval61): 37(ptr) Variable Function + 197(txval62): 51(ptr) Variable Function + 204(txval70): 12(ptr) Variable Function + 211(txval71): 37(ptr) Variable Function + 218(txval72): 51(ptr) Variable Function + 226(psout): 225(ptr) Variable Function + 17: 14 Load 16(g_tTex2df4a) + 21: 18 Load 20(g_sSamp) + 23: 22 SampledImage 17 21 + 32: 31(ptr) AccessChain 28 30 + 33: 25(fvec3) Load 32 + 35: 7(fvec4) ImageGather 23 33 34 + Store 13(txval00) 35 + 42: 39 Load 41(g_tTex2di4a) + 43: 18 Load 20(g_sSamp) + 45: 44 SampledImage 42 43 + 46: 31(ptr) AccessChain 28 30 + 47: 25(fvec3) Load 46 + 48: 36(ivec4) ImageGather 45 47 34 + Store 38(txval01) 48 + 56: 53 Load 55(g_tTex2du4a) + 57: 18 Load 20(g_sSamp) + 59: 58 SampledImage 56 57 + 60: 31(ptr) AccessChain 28 30 + 61: 25(fvec3) Load 60 + 62: 50(ivec4) ImageGather 59 61 34 + Store 52(txval02) 62 + 64: 14 Load 16(g_tTex2df4a) + 65: 18 Load 20(g_sSamp) + 66: 22 SampledImage 64 65 + 67: 31(ptr) AccessChain 28 30 + 68: 25(fvec3) Load 67 + 70: 7(fvec4) ImageGather 66 68 69 + Store 63(txval10) 70 + 72: 39 Load 41(g_tTex2di4a) + 73: 18 Load 20(g_sSamp) + 74: 44 SampledImage 72 73 + 75: 31(ptr) AccessChain 28 30 + 76: 25(fvec3) Load 75 + 77: 36(ivec4) ImageGather 74 76 69 + Store 71(txval11) 77 + 79: 53 Load 55(g_tTex2du4a) + 80: 18 Load 20(g_sSamp) + 81: 58 SampledImage 79 80 + 82: 31(ptr) AccessChain 28 30 + 83: 25(fvec3) Load 82 + 84: 50(ivec4) ImageGather 81 83 69 + Store 78(txval12) 84 + 86: 14 Load 16(g_tTex2df4a) + 87: 18 Load 20(g_sSamp) + 88: 22 SampledImage 86 87 + 89: 31(ptr) AccessChain 28 30 + 90: 25(fvec3) Load 89 + 91: 7(fvec4) ImageGather 88 90 30 + Store 85(txval20) 91 + 93: 39 Load 41(g_tTex2di4a) + 94: 18 Load 20(g_sSamp) + 95: 44 SampledImage 93 94 + 96: 31(ptr) AccessChain 28 30 + 97: 25(fvec3) Load 96 + 98: 36(ivec4) ImageGather 95 97 30 + Store 92(txval21) 98 + 100: 53 Load 55(g_tTex2du4a) + 101: 18 Load 20(g_sSamp) + 102: 58 SampledImage 100 101 + 103: 31(ptr) AccessChain 28 30 + 104: 25(fvec3) Load 103 + 105: 50(ivec4) ImageGather 102 104 30 + Store 99(txval22) 105 + 107: 14 Load 16(g_tTex2df4a) + 108: 18 Load 20(g_sSamp) + 109: 22 SampledImage 107 108 + 110: 31(ptr) AccessChain 28 30 + 111: 25(fvec3) Load 110 + 113: 7(fvec4) ImageGather 109 111 112 + Store 106(txval30) 113 + 115: 39 Load 41(g_tTex2di4a) + 116: 18 Load 20(g_sSamp) + 117: 44 SampledImage 115 116 + 118: 31(ptr) AccessChain 28 30 + 119: 25(fvec3) Load 118 + 120: 36(ivec4) ImageGather 117 119 112 + Store 114(txval31) 120 + 122: 53 Load 55(g_tTex2du4a) + 123: 18 Load 20(g_sSamp) + 124: 58 SampledImage 122 123 + 125: 31(ptr) AccessChain 28 30 + 126: 25(fvec3) Load 125 + 127: 50(ivec4) ImageGather 124 126 112 + Store 121(txval32) 127 + 132: 129 Load 131(g_tTexcdf4a) + 133: 18 Load 20(g_sSamp) + 135: 134 SampledImage 132 133 + 137: 136(ptr) AccessChain 28 112 + 138: 7(fvec4) Load 137 + 139: 7(fvec4) ImageGather 135 138 34 + Store 128(txval40) 139 + 144: 141 Load 143(g_tTexcdi4a) + 145: 18 Load 20(g_sSamp) + 147: 146 SampledImage 144 145 + 148: 136(ptr) AccessChain 28 112 + 149: 7(fvec4) Load 148 + 150: 36(ivec4) ImageGather 147 149 34 + Store 140(txval41) 150 + 155: 152 Load 154(g_tTexcdu4a) + 156: 18 Load 20(g_sSamp) + 158: 157 SampledImage 155 156 + 159: 136(ptr) AccessChain 28 112 + 160: 7(fvec4) Load 159 + 161: 50(ivec4) ImageGather 158 160 34 + Store 151(txval42) 161 + 163: 129 Load 131(g_tTexcdf4a) + 164: 18 Load 20(g_sSamp) + 165: 134 SampledImage 163 164 + 166: 136(ptr) AccessChain 28 112 + 167: 7(fvec4) Load 166 + 168: 7(fvec4) ImageGather 165 167 69 + Store 162(txval50) 168 + 170: 141 Load 143(g_tTexcdi4a) + 171: 18 Load 20(g_sSamp) + 172: 146 SampledImage 170 171 + 173: 136(ptr) AccessChain 28 112 + 174: 7(fvec4) Load 173 + 175: 36(ivec4) ImageGather 172 174 69 + Store 169(txval51) 175 + 177: 152 Load 154(g_tTexcdu4a) + 178: 18 Load 20(g_sSamp) + 179: 157 SampledImage 177 178 + 180: 136(ptr) AccessChain 28 112 + 181: 7(fvec4) Load 180 + 182: 50(ivec4) ImageGather 179 181 69 + Store 176(txval52) 182 + 184: 129 Load 131(g_tTexcdf4a) + 185: 18 Load 20(g_sSamp) + 186: 134 SampledImage 184 185 + 187: 136(ptr) AccessChain 28 112 + 188: 7(fvec4) Load 187 + 189: 7(fvec4) ImageGather 186 188 30 + Store 183(txval60) 189 + 191: 141 Load 143(g_tTexcdi4a) + 192: 18 Load 20(g_sSamp) + 193: 146 SampledImage 191 192 + 194: 136(ptr) AccessChain 28 112 + 195: 7(fvec4) Load 194 + 196: 36(ivec4) ImageGather 193 195 30 + Store 190(txval61) 196 + 198: 152 Load 154(g_tTexcdu4a) + 199: 18 Load 20(g_sSamp) + 200: 157 SampledImage 198 199 + 201: 136(ptr) AccessChain 28 112 + 202: 7(fvec4) Load 201 + 203: 50(ivec4) ImageGather 200 202 30 + Store 197(txval62) 203 + 205: 129 Load 131(g_tTexcdf4a) + 206: 18 Load 20(g_sSamp) + 207: 134 SampledImage 205 206 + 208: 136(ptr) AccessChain 28 112 + 209: 7(fvec4) Load 208 + 210: 7(fvec4) ImageGather 207 209 112 + Store 204(txval70) 210 + 212: 141 Load 143(g_tTexcdi4a) + 213: 18 Load 20(g_sSamp) + 214: 146 SampledImage 212 213 + 215: 136(ptr) AccessChain 28 112 + 216: 7(fvec4) Load 215 + 217: 36(ivec4) ImageGather 214 216 112 + Store 211(txval71) 217 + 219: 152 Load 154(g_tTexcdu4a) + 220: 18 Load 20(g_sSamp) + 221: 157 SampledImage 219 220 + 222: 136(ptr) AccessChain 28 112 + 223: 7(fvec4) Load 222 + 224: 50(ivec4) ImageGather 221 223 112 + Store 218(txval72) 224 + 229: 12(ptr) AccessChain 226(psout) 34 + Store 229 228 + 231: 230(ptr) AccessChain 226(psout) 69 + Store 231 227 + 232:8(PS_OUTPUT) Load 226(psout) + ReturnValue 232 + FunctionEnd 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 new file mode 100644 index 0000000..7bd005a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out @@ -0,0 +1,1141 @@ +hlsl.gatherRGBA.basic.dx10.frag +Shader version: 450 +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}) +0:34 Function Parameters: +0:? Sequence +0:39 Sequence +0:39 move second child to first child ( temp 4-component vector of float) +0:39 'txval00' ( temp 4-component vector of float) +0:39 textureGather ( temp 4-component vector of float) +0:39 Construct combined texture-sampler ( temp sampler2D) +0:39 'g_tTex2df4' ( uniform texture2D) +0:39 'g_sSamp' (layout( binding=0) uniform sampler) +0:39 c2: direct index for structure ( uniform 2-component vector of float) +0:39 '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:39 Constant: +0:39 1 (const uint) +0:39 Constant: +0:39 0 (const int) +0:40 Sequence +0:40 move second child to first child ( temp 4-component vector of int) +0:40 'txval01' ( temp 4-component vector of int) +0:40 textureGather ( temp 4-component vector of int) +0:40 Construct combined texture-sampler ( temp isampler2D) +0:40 'g_tTex2di4' ( uniform itexture2D) +0:40 'g_sSamp' (layout( binding=0) uniform sampler) +0:40 c2: direct index for structure ( uniform 2-component vector of float) +0:40 '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:40 Constant: +0:40 1 (const uint) +0:40 Constant: +0:40 0 (const int) +0:41 Sequence +0:41 move second child to first child ( temp 4-component vector of uint) +0:41 'txval02' ( temp 4-component vector of uint) +0:41 textureGather ( temp 4-component vector of uint) +0:41 Construct combined texture-sampler ( temp usampler2D) +0:41 'g_tTex2du4' ( uniform utexture2D) +0:41 'g_sSamp' (layout( binding=0) uniform sampler) +0:41 c2: direct index for structure ( uniform 2-component vector of float) +0:41 '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:41 Constant: +0:41 1 (const uint) +0:41 Constant: +0:41 0 (const int) +0:43 Sequence +0:43 move second child to first child ( temp 4-component vector of float) +0:43 'txval10' ( temp 4-component vector of float) +0:43 textureGather ( temp 4-component vector of float) +0:43 Construct combined texture-sampler ( temp sampler2D) +0:43 'g_tTex2df4' ( uniform texture2D) +0:43 'g_sSamp' (layout( binding=0) uniform sampler) +0:43 c2: direct index for structure ( uniform 2-component vector of float) +0:43 '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:43 Constant: +0:43 1 (const uint) +0:43 Constant: +0:43 1 (const int) +0:44 Sequence +0:44 move second child to first child ( temp 4-component vector of int) +0:44 'txval11' ( temp 4-component vector of int) +0:44 textureGather ( temp 4-component vector of int) +0:44 Construct combined texture-sampler ( temp isampler2D) +0:44 'g_tTex2di4' ( uniform itexture2D) +0:44 'g_sSamp' (layout( binding=0) uniform sampler) +0:44 c2: direct index for structure ( uniform 2-component vector of float) +0:44 '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:44 Constant: +0:44 1 (const uint) +0:44 Constant: +0:44 1 (const int) +0:45 Sequence +0:45 move second child to first child ( temp 4-component vector of uint) +0:45 'txval12' ( temp 4-component vector of uint) +0:45 textureGather ( temp 4-component vector of uint) +0:45 Construct combined texture-sampler ( temp usampler2D) +0:45 'g_tTex2du4' ( uniform utexture2D) +0:45 'g_sSamp' (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}) +0:45 Constant: +0:45 1 (const uint) +0:45 Constant: +0:45 1 (const int) +0:47 Sequence +0:47 move second child to first child ( temp 4-component vector of float) +0:47 'txval20' ( temp 4-component vector of float) +0:47 textureGather ( temp 4-component vector of float) +0:47 Construct combined texture-sampler ( temp sampler2D) +0:47 'g_tTex2df4' ( uniform texture2D) +0:47 'g_sSamp' (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}) +0:47 Constant: +0:47 1 (const uint) +0:47 Constant: +0:47 2 (const int) +0:48 Sequence +0:48 move second child to first child ( temp 4-component vector of int) +0:48 'txval21' ( temp 4-component vector of int) +0:48 textureGather ( temp 4-component vector of int) +0:48 Construct combined texture-sampler ( temp isampler2D) +0:48 'g_tTex2di4' ( uniform itexture2D) +0:48 'g_sSamp' (layout( binding=0) uniform sampler) +0:48 c2: direct index for structure ( uniform 2-component vector of float) +0:48 '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:48 Constant: +0:48 1 (const uint) +0:48 Constant: +0:48 2 (const int) +0:49 Sequence +0:49 move second child to first child ( temp 4-component vector of uint) +0:49 'txval22' ( temp 4-component vector of uint) +0:49 textureGather ( temp 4-component vector of uint) +0:49 Construct combined texture-sampler ( temp usampler2D) +0:49 'g_tTex2du4' ( uniform utexture2D) +0:49 'g_sSamp' (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}) +0:49 Constant: +0:49 1 (const uint) +0:49 Constant: +0:49 2 (const int) +0:51 Sequence +0:51 move second child to first child ( temp 4-component vector of float) +0:51 'txval30' ( temp 4-component vector of float) +0:51 textureGather ( temp 4-component vector of float) +0:51 Construct combined texture-sampler ( temp sampler2D) +0:51 'g_tTex2df4' ( uniform texture2D) +0:51 'g_sSamp' (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}) +0:51 Constant: +0:51 1 (const uint) +0:51 Constant: +0:51 3 (const int) +0:52 Sequence +0:52 move second child to first child ( temp 4-component vector of int) +0:52 'txval31' ( temp 4-component vector of int) +0:52 textureGather ( temp 4-component vector of int) +0:52 Construct combined texture-sampler ( temp isampler2D) +0:52 'g_tTex2di4' ( uniform itexture2D) +0:52 'g_sSamp' (layout( binding=0) uniform sampler) +0:52 c2: direct index for structure ( uniform 2-component vector of float) +0:52 '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:52 Constant: +0:52 1 (const uint) +0:52 Constant: +0:52 3 (const int) +0:53 Sequence +0:53 move second child to first child ( temp 4-component vector of uint) +0:53 'txval32' ( temp 4-component vector of uint) +0:53 textureGather ( temp 4-component vector of uint) +0:53 Construct combined texture-sampler ( temp usampler2D) +0:53 'g_tTex2du4' ( uniform utexture2D) +0:53 'g_sSamp' (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 3 (const int) +0:57 Sequence +0:57 move second child to first child ( temp 4-component vector of float) +0:57 'txval40' ( temp 4-component vector of float) +0:57 textureGather ( temp 4-component vector of float) +0:57 Construct combined texture-sampler ( temp samplerCube) +0:57 'g_tTexcdf4' ( uniform textureCube) +0:57 'g_sSamp' (layout( binding=0) uniform sampler) +0:57 c3: direct index for structure ( uniform 3-component vector of float) +0:57 '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:57 Constant: +0:57 2 (const uint) +0:57 Constant: +0:57 0 (const int) +0:58 Sequence +0:58 move second child to first child ( temp 4-component vector of int) +0:58 'txval41' ( temp 4-component vector of int) +0:58 textureGather ( temp 4-component vector of int) +0:58 Construct combined texture-sampler ( temp isamplerCube) +0:58 'g_tTexcdi4' ( uniform itextureCube) +0:58 'g_sSamp' (layout( binding=0) uniform sampler) +0:58 c3: direct index for structure ( uniform 3-component vector of float) +0:58 '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:58 Constant: +0:58 2 (const uint) +0:58 Constant: +0:58 0 (const int) +0:59 Sequence +0:59 move second child to first child ( temp 4-component vector of uint) +0:59 'txval42' ( temp 4-component vector of uint) +0:59 textureGather ( temp 4-component vector of uint) +0:59 Construct combined texture-sampler ( temp usamplerCube) +0:59 'g_tTexcdu4' ( uniform utextureCube) +0:59 'g_sSamp' (layout( binding=0) uniform sampler) +0:59 c3: direct index for structure ( uniform 3-component vector of float) +0:59 '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:59 Constant: +0:59 2 (const uint) +0:59 Constant: +0:59 0 (const int) +0:61 Sequence +0:61 move second child to first child ( temp 4-component vector of float) +0:61 'txval50' ( temp 4-component vector of float) +0:61 textureGather ( temp 4-component vector of float) +0:61 Construct combined texture-sampler ( temp samplerCube) +0:61 'g_tTexcdf4' ( uniform textureCube) +0:61 'g_sSamp' (layout( binding=0) uniform sampler) +0:61 c3: direct index for structure ( uniform 3-component vector of float) +0:61 '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:61 Constant: +0:61 2 (const uint) +0:61 Constant: +0:61 1 (const int) +0:62 Sequence +0:62 move second child to first child ( temp 4-component vector of int) +0:62 'txval51' ( temp 4-component vector of int) +0:62 textureGather ( temp 4-component vector of int) +0:62 Construct combined texture-sampler ( temp isamplerCube) +0:62 'g_tTexcdi4' ( uniform itextureCube) +0:62 'g_sSamp' (layout( binding=0) uniform sampler) +0:62 c3: direct index for structure ( uniform 3-component vector of float) +0:62 '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:62 Constant: +0:62 2 (const uint) +0:62 Constant: +0:62 1 (const int) +0:63 Sequence +0:63 move second child to first child ( temp 4-component vector of uint) +0:63 'txval52' ( temp 4-component vector of uint) +0:63 textureGather ( temp 4-component vector of uint) +0:63 Construct combined texture-sampler ( temp usamplerCube) +0:63 'g_tTexcdu4' ( uniform utextureCube) +0:63 'g_sSamp' (layout( binding=0) uniform sampler) +0:63 c3: direct index for structure ( uniform 3-component vector of float) +0:63 '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:63 Constant: +0:63 2 (const uint) +0:63 Constant: +0:63 1 (const int) +0:65 Sequence +0:65 move second child to first child ( temp 4-component vector of float) +0:65 'txval60' ( temp 4-component vector of float) +0:65 textureGather ( temp 4-component vector of float) +0:65 Construct combined texture-sampler ( temp samplerCube) +0:65 'g_tTexcdf4' ( uniform textureCube) +0:65 'g_sSamp' (layout( binding=0) uniform sampler) +0:65 c3: direct index for structure ( uniform 3-component vector of float) +0:65 '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:65 Constant: +0:65 2 (const uint) +0:65 Constant: +0:65 2 (const int) +0:66 Sequence +0:66 move second child to first child ( temp 4-component vector of int) +0:66 'txval61' ( temp 4-component vector of int) +0:66 textureGather ( temp 4-component vector of int) +0:66 Construct combined texture-sampler ( temp isamplerCube) +0:66 'g_tTexcdi4' ( uniform itextureCube) +0:66 'g_sSamp' (layout( binding=0) uniform sampler) +0:66 c3: direct index for structure ( uniform 3-component vector of float) +0:66 '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:66 Constant: +0:66 2 (const uint) +0:66 Constant: +0:66 2 (const int) +0:67 Sequence +0:67 move second child to first child ( temp 4-component vector of uint) +0:67 'txval62' ( temp 4-component vector of uint) +0:67 textureGather ( temp 4-component vector of uint) +0:67 Construct combined texture-sampler ( temp usamplerCube) +0:67 'g_tTexcdu4' ( uniform utextureCube) +0:67 'g_sSamp' (layout( binding=0) uniform sampler) +0:67 c3: direct index for structure ( uniform 3-component vector of float) +0:67 '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:67 Constant: +0:67 2 (const uint) +0:67 Constant: +0:67 2 (const int) +0:69 Sequence +0:69 move second child to first child ( temp 4-component vector of float) +0:69 'txval70' ( temp 4-component vector of float) +0:69 textureGather ( temp 4-component vector of float) +0:69 Construct combined texture-sampler ( temp samplerCube) +0:69 'g_tTexcdf4' ( uniform textureCube) +0:69 'g_sSamp' (layout( binding=0) uniform sampler) +0:69 c3: direct index for structure ( uniform 3-component vector of float) +0:69 '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:69 Constant: +0:69 2 (const uint) +0:69 Constant: +0:69 3 (const int) +0:70 Sequence +0:70 move second child to first child ( temp 4-component vector of int) +0:70 'txval71' ( temp 4-component vector of int) +0:70 textureGather ( temp 4-component vector of int) +0:70 Construct combined texture-sampler ( temp isamplerCube) +0:70 'g_tTexcdi4' ( uniform itextureCube) +0:70 'g_sSamp' (layout( binding=0) uniform sampler) +0:70 c3: direct index for structure ( uniform 3-component vector of float) +0:70 '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:70 Constant: +0:70 2 (const uint) +0:70 Constant: +0:70 3 (const int) +0:71 Sequence +0:71 move second child to first child ( temp 4-component vector of uint) +0:71 'txval72' ( temp 4-component vector of uint) +0:71 textureGather ( temp 4-component vector of uint) +0:71 Construct combined texture-sampler ( temp usamplerCube) +0:71 'g_tTexcdu4' ( uniform utextureCube) +0:71 'g_sSamp' (layout( binding=0) uniform sampler) +0:71 c3: direct index for structure ( uniform 3-component vector of float) +0:71 '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:71 Constant: +0:71 2 (const uint) +0:71 Constant: +0:71 3 (const int) +0:73 move second child to first child ( temp 4-component vector of float) +0:73 Color: direct index for structure ( temp 4-component vector of float) +0:73 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:73 Constant: +0:73 0 (const int) +0:73 Constant: +0:73 1.000000 +0:73 1.000000 +0:73 1.000000 +0:73 1.000000 +0:74 move second child to first child ( temp float) +0:74 Depth: direct index for structure ( temp float) +0:74 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:74 Constant: +0:74 1 (const int) +0:74 Constant: +0:74 1.000000 +0:76 Branch: Return with expression +0:76 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:34 Function Definition: main( ( temp void) +0:34 Function Parameters: +0:? Sequence +0:34 Sequence +0:34 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:34 1 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_sSamp2d' ( uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1D) +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_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:? '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) + + +Linked fragment stage: + + +Shader version: 450 +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}) +0:34 Function Parameters: +0:? Sequence +0:39 Sequence +0:39 move second child to first child ( temp 4-component vector of float) +0:39 'txval00' ( temp 4-component vector of float) +0:39 textureGather ( temp 4-component vector of float) +0:39 Construct combined texture-sampler ( temp sampler2D) +0:39 'g_tTex2df4' ( uniform texture2D) +0:39 'g_sSamp' (layout( binding=0) uniform sampler) +0:39 c2: direct index for structure ( uniform 2-component vector of float) +0:39 '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:39 Constant: +0:39 1 (const uint) +0:39 Constant: +0:39 0 (const int) +0:40 Sequence +0:40 move second child to first child ( temp 4-component vector of int) +0:40 'txval01' ( temp 4-component vector of int) +0:40 textureGather ( temp 4-component vector of int) +0:40 Construct combined texture-sampler ( temp isampler2D) +0:40 'g_tTex2di4' ( uniform itexture2D) +0:40 'g_sSamp' (layout( binding=0) uniform sampler) +0:40 c2: direct index for structure ( uniform 2-component vector of float) +0:40 '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:40 Constant: +0:40 1 (const uint) +0:40 Constant: +0:40 0 (const int) +0:41 Sequence +0:41 move second child to first child ( temp 4-component vector of uint) +0:41 'txval02' ( temp 4-component vector of uint) +0:41 textureGather ( temp 4-component vector of uint) +0:41 Construct combined texture-sampler ( temp usampler2D) +0:41 'g_tTex2du4' ( uniform utexture2D) +0:41 'g_sSamp' (layout( binding=0) uniform sampler) +0:41 c2: direct index for structure ( uniform 2-component vector of float) +0:41 '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:41 Constant: +0:41 1 (const uint) +0:41 Constant: +0:41 0 (const int) +0:43 Sequence +0:43 move second child to first child ( temp 4-component vector of float) +0:43 'txval10' ( temp 4-component vector of float) +0:43 textureGather ( temp 4-component vector of float) +0:43 Construct combined texture-sampler ( temp sampler2D) +0:43 'g_tTex2df4' ( uniform texture2D) +0:43 'g_sSamp' (layout( binding=0) uniform sampler) +0:43 c2: direct index for structure ( uniform 2-component vector of float) +0:43 '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:43 Constant: +0:43 1 (const uint) +0:43 Constant: +0:43 1 (const int) +0:44 Sequence +0:44 move second child to first child ( temp 4-component vector of int) +0:44 'txval11' ( temp 4-component vector of int) +0:44 textureGather ( temp 4-component vector of int) +0:44 Construct combined texture-sampler ( temp isampler2D) +0:44 'g_tTex2di4' ( uniform itexture2D) +0:44 'g_sSamp' (layout( binding=0) uniform sampler) +0:44 c2: direct index for structure ( uniform 2-component vector of float) +0:44 '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:44 Constant: +0:44 1 (const uint) +0:44 Constant: +0:44 1 (const int) +0:45 Sequence +0:45 move second child to first child ( temp 4-component vector of uint) +0:45 'txval12' ( temp 4-component vector of uint) +0:45 textureGather ( temp 4-component vector of uint) +0:45 Construct combined texture-sampler ( temp usampler2D) +0:45 'g_tTex2du4' ( uniform utexture2D) +0:45 'g_sSamp' (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}) +0:45 Constant: +0:45 1 (const uint) +0:45 Constant: +0:45 1 (const int) +0:47 Sequence +0:47 move second child to first child ( temp 4-component vector of float) +0:47 'txval20' ( temp 4-component vector of float) +0:47 textureGather ( temp 4-component vector of float) +0:47 Construct combined texture-sampler ( temp sampler2D) +0:47 'g_tTex2df4' ( uniform texture2D) +0:47 'g_sSamp' (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}) +0:47 Constant: +0:47 1 (const uint) +0:47 Constant: +0:47 2 (const int) +0:48 Sequence +0:48 move second child to first child ( temp 4-component vector of int) +0:48 'txval21' ( temp 4-component vector of int) +0:48 textureGather ( temp 4-component vector of int) +0:48 Construct combined texture-sampler ( temp isampler2D) +0:48 'g_tTex2di4' ( uniform itexture2D) +0:48 'g_sSamp' (layout( binding=0) uniform sampler) +0:48 c2: direct index for structure ( uniform 2-component vector of float) +0:48 '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:48 Constant: +0:48 1 (const uint) +0:48 Constant: +0:48 2 (const int) +0:49 Sequence +0:49 move second child to first child ( temp 4-component vector of uint) +0:49 'txval22' ( temp 4-component vector of uint) +0:49 textureGather ( temp 4-component vector of uint) +0:49 Construct combined texture-sampler ( temp usampler2D) +0:49 'g_tTex2du4' ( uniform utexture2D) +0:49 'g_sSamp' (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}) +0:49 Constant: +0:49 1 (const uint) +0:49 Constant: +0:49 2 (const int) +0:51 Sequence +0:51 move second child to first child ( temp 4-component vector of float) +0:51 'txval30' ( temp 4-component vector of float) +0:51 textureGather ( temp 4-component vector of float) +0:51 Construct combined texture-sampler ( temp sampler2D) +0:51 'g_tTex2df4' ( uniform texture2D) +0:51 'g_sSamp' (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}) +0:51 Constant: +0:51 1 (const uint) +0:51 Constant: +0:51 3 (const int) +0:52 Sequence +0:52 move second child to first child ( temp 4-component vector of int) +0:52 'txval31' ( temp 4-component vector of int) +0:52 textureGather ( temp 4-component vector of int) +0:52 Construct combined texture-sampler ( temp isampler2D) +0:52 'g_tTex2di4' ( uniform itexture2D) +0:52 'g_sSamp' (layout( binding=0) uniform sampler) +0:52 c2: direct index for structure ( uniform 2-component vector of float) +0:52 '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:52 Constant: +0:52 1 (const uint) +0:52 Constant: +0:52 3 (const int) +0:53 Sequence +0:53 move second child to first child ( temp 4-component vector of uint) +0:53 'txval32' ( temp 4-component vector of uint) +0:53 textureGather ( temp 4-component vector of uint) +0:53 Construct combined texture-sampler ( temp usampler2D) +0:53 'g_tTex2du4' ( uniform utexture2D) +0:53 'g_sSamp' (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 3 (const int) +0:57 Sequence +0:57 move second child to first child ( temp 4-component vector of float) +0:57 'txval40' ( temp 4-component vector of float) +0:57 textureGather ( temp 4-component vector of float) +0:57 Construct combined texture-sampler ( temp samplerCube) +0:57 'g_tTexcdf4' ( uniform textureCube) +0:57 'g_sSamp' (layout( binding=0) uniform sampler) +0:57 c3: direct index for structure ( uniform 3-component vector of float) +0:57 '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:57 Constant: +0:57 2 (const uint) +0:57 Constant: +0:57 0 (const int) +0:58 Sequence +0:58 move second child to first child ( temp 4-component vector of int) +0:58 'txval41' ( temp 4-component vector of int) +0:58 textureGather ( temp 4-component vector of int) +0:58 Construct combined texture-sampler ( temp isamplerCube) +0:58 'g_tTexcdi4' ( uniform itextureCube) +0:58 'g_sSamp' (layout( binding=0) uniform sampler) +0:58 c3: direct index for structure ( uniform 3-component vector of float) +0:58 '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:58 Constant: +0:58 2 (const uint) +0:58 Constant: +0:58 0 (const int) +0:59 Sequence +0:59 move second child to first child ( temp 4-component vector of uint) +0:59 'txval42' ( temp 4-component vector of uint) +0:59 textureGather ( temp 4-component vector of uint) +0:59 Construct combined texture-sampler ( temp usamplerCube) +0:59 'g_tTexcdu4' ( uniform utextureCube) +0:59 'g_sSamp' (layout( binding=0) uniform sampler) +0:59 c3: direct index for structure ( uniform 3-component vector of float) +0:59 '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:59 Constant: +0:59 2 (const uint) +0:59 Constant: +0:59 0 (const int) +0:61 Sequence +0:61 move second child to first child ( temp 4-component vector of float) +0:61 'txval50' ( temp 4-component vector of float) +0:61 textureGather ( temp 4-component vector of float) +0:61 Construct combined texture-sampler ( temp samplerCube) +0:61 'g_tTexcdf4' ( uniform textureCube) +0:61 'g_sSamp' (layout( binding=0) uniform sampler) +0:61 c3: direct index for structure ( uniform 3-component vector of float) +0:61 '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:61 Constant: +0:61 2 (const uint) +0:61 Constant: +0:61 1 (const int) +0:62 Sequence +0:62 move second child to first child ( temp 4-component vector of int) +0:62 'txval51' ( temp 4-component vector of int) +0:62 textureGather ( temp 4-component vector of int) +0:62 Construct combined texture-sampler ( temp isamplerCube) +0:62 'g_tTexcdi4' ( uniform itextureCube) +0:62 'g_sSamp' (layout( binding=0) uniform sampler) +0:62 c3: direct index for structure ( uniform 3-component vector of float) +0:62 '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:62 Constant: +0:62 2 (const uint) +0:62 Constant: +0:62 1 (const int) +0:63 Sequence +0:63 move second child to first child ( temp 4-component vector of uint) +0:63 'txval52' ( temp 4-component vector of uint) +0:63 textureGather ( temp 4-component vector of uint) +0:63 Construct combined texture-sampler ( temp usamplerCube) +0:63 'g_tTexcdu4' ( uniform utextureCube) +0:63 'g_sSamp' (layout( binding=0) uniform sampler) +0:63 c3: direct index for structure ( uniform 3-component vector of float) +0:63 '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:63 Constant: +0:63 2 (const uint) +0:63 Constant: +0:63 1 (const int) +0:65 Sequence +0:65 move second child to first child ( temp 4-component vector of float) +0:65 'txval60' ( temp 4-component vector of float) +0:65 textureGather ( temp 4-component vector of float) +0:65 Construct combined texture-sampler ( temp samplerCube) +0:65 'g_tTexcdf4' ( uniform textureCube) +0:65 'g_sSamp' (layout( binding=0) uniform sampler) +0:65 c3: direct index for structure ( uniform 3-component vector of float) +0:65 '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:65 Constant: +0:65 2 (const uint) +0:65 Constant: +0:65 2 (const int) +0:66 Sequence +0:66 move second child to first child ( temp 4-component vector of int) +0:66 'txval61' ( temp 4-component vector of int) +0:66 textureGather ( temp 4-component vector of int) +0:66 Construct combined texture-sampler ( temp isamplerCube) +0:66 'g_tTexcdi4' ( uniform itextureCube) +0:66 'g_sSamp' (layout( binding=0) uniform sampler) +0:66 c3: direct index for structure ( uniform 3-component vector of float) +0:66 '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:66 Constant: +0:66 2 (const uint) +0:66 Constant: +0:66 2 (const int) +0:67 Sequence +0:67 move second child to first child ( temp 4-component vector of uint) +0:67 'txval62' ( temp 4-component vector of uint) +0:67 textureGather ( temp 4-component vector of uint) +0:67 Construct combined texture-sampler ( temp usamplerCube) +0:67 'g_tTexcdu4' ( uniform utextureCube) +0:67 'g_sSamp' (layout( binding=0) uniform sampler) +0:67 c3: direct index for structure ( uniform 3-component vector of float) +0:67 '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:67 Constant: +0:67 2 (const uint) +0:67 Constant: +0:67 2 (const int) +0:69 Sequence +0:69 move second child to first child ( temp 4-component vector of float) +0:69 'txval70' ( temp 4-component vector of float) +0:69 textureGather ( temp 4-component vector of float) +0:69 Construct combined texture-sampler ( temp samplerCube) +0:69 'g_tTexcdf4' ( uniform textureCube) +0:69 'g_sSamp' (layout( binding=0) uniform sampler) +0:69 c3: direct index for structure ( uniform 3-component vector of float) +0:69 '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:69 Constant: +0:69 2 (const uint) +0:69 Constant: +0:69 3 (const int) +0:70 Sequence +0:70 move second child to first child ( temp 4-component vector of int) +0:70 'txval71' ( temp 4-component vector of int) +0:70 textureGather ( temp 4-component vector of int) +0:70 Construct combined texture-sampler ( temp isamplerCube) +0:70 'g_tTexcdi4' ( uniform itextureCube) +0:70 'g_sSamp' (layout( binding=0) uniform sampler) +0:70 c3: direct index for structure ( uniform 3-component vector of float) +0:70 '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:70 Constant: +0:70 2 (const uint) +0:70 Constant: +0:70 3 (const int) +0:71 Sequence +0:71 move second child to first child ( temp 4-component vector of uint) +0:71 'txval72' ( temp 4-component vector of uint) +0:71 textureGather ( temp 4-component vector of uint) +0:71 Construct combined texture-sampler ( temp usamplerCube) +0:71 'g_tTexcdu4' ( uniform utextureCube) +0:71 'g_sSamp' (layout( binding=0) uniform sampler) +0:71 c3: direct index for structure ( uniform 3-component vector of float) +0:71 '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:71 Constant: +0:71 2 (const uint) +0:71 Constant: +0:71 3 (const int) +0:73 move second child to first child ( temp 4-component vector of float) +0:73 Color: direct index for structure ( temp 4-component vector of float) +0:73 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:73 Constant: +0:73 0 (const int) +0:73 Constant: +0:73 1.000000 +0:73 1.000000 +0:73 1.000000 +0:73 1.000000 +0:74 move second child to first child ( temp float) +0:74 Depth: direct index for structure ( temp float) +0:74 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:74 Constant: +0:74 1 (const int) +0:74 Constant: +0:74 1.000000 +0:76 Branch: Return with expression +0:76 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:34 Function Definition: main( ( temp void) +0:34 Function Parameters: +0:? Sequence +0:34 Sequence +0:34 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:34 1 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_sSamp2d' ( uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1D) +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_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:? '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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 265 + + Capability Shader + Capability Sampled1D + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 238 242 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + MemberName 8(PS_OUTPUT) 1 "Depth" + Name 10 "@main(" + Name 13 "txval00" + Name 16 "g_tTex2df4" + Name 20 "g_sSamp" + 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 38 "txval01" + Name 41 "g_tTex2di4" + Name 52 "txval02" + Name 55 "g_tTex2du4" + Name 63 "txval10" + Name 70 "txval11" + Name 77 "txval12" + Name 84 "txval20" + Name 92 "txval21" + Name 99 "txval22" + Name 106 "txval30" + Name 114 "txval31" + Name 121 "txval32" + Name 128 "txval40" + Name 131 "g_tTexcdf4" + Name 140 "txval41" + Name 143 "g_tTexcdi4" + Name 151 "txval42" + Name 154 "g_tTexcdu4" + Name 162 "txval50" + Name 169 "txval51" + Name 176 "txval52" + Name 183 "txval60" + Name 190 "txval61" + Name 197 "txval62" + Name 204 "txval70" + Name 211 "txval71" + Name 218 "txval72" + Name 226 "psout" + Name 235 "flattenTemp" + Name 238 "Color" + Name 242 "Depth" + Name 245 "g_sSamp2d" + Name 248 "g_tTex1df4a" + Name 249 "g_tTex1df4" + Name 252 "g_tTex1di4" + Name 255 "g_tTex1du4" + Name 258 "g_tTex3df4" + Name 261 "g_tTex3di4" + Name 264 "g_tTex3du4" + Decorate 16(g_tTex2df4) DescriptorSet 0 + Decorate 20(g_sSamp) DescriptorSet 0 + Decorate 20(g_sSamp) Binding 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 41(g_tTex2di4) DescriptorSet 0 + Decorate 55(g_tTex2du4) DescriptorSet 0 + 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 245(g_sSamp2d) DescriptorSet 0 + Decorate 248(g_tTex1df4a) DescriptorSet 0 + Decorate 248(g_tTex1df4a) Binding 1 + Decorate 249(g_tTex1df4) DescriptorSet 0 + Decorate 249(g_tTex1df4) Binding 0 + Decorate 252(g_tTex1di4) DescriptorSet 0 + Decorate 255(g_tTex1du4) DescriptorSet 0 + Decorate 258(g_tTex3df4) DescriptorSet 0 + Decorate 261(g_tTex3di4) DescriptorSet 0 + Decorate 264(g_tTex3du4) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 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 + 15: TypePointer UniformConstant 14 + 16(g_tTex2df4): 15(ptr) Variable UniformConstant + 18: TypeSampler + 19: TypePointer UniformConstant 18 + 20(g_sSamp): 19(ptr) Variable UniformConstant + 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: 29(int) Constant 0 + 36: TypeVector 29(int) 4 + 37: TypePointer Function 36(ivec4) + 39: TypeImage 29(int) 2D sampled format:Unknown + 40: TypePointer UniformConstant 39 + 41(g_tTex2di4): 40(ptr) Variable UniformConstant + 44: TypeSampledImage 39 + 49: TypeInt 32 0 + 50: TypeVector 49(int) 4 + 51: TypePointer Function 50(ivec4) + 53: TypeImage 49(int) 2D sampled format:Unknown + 54: TypePointer UniformConstant 53 + 55(g_tTex2du4): 54(ptr) Variable UniformConstant + 58: TypeSampledImage 53 + 90: 29(int) Constant 2 + 112: 29(int) Constant 3 + 129: TypeImage 6(float) Cube sampled format:Unknown + 130: TypePointer UniformConstant 129 + 131(g_tTexcdf4): 130(ptr) Variable UniformConstant + 134: TypeSampledImage 129 + 136: TypePointer Uniform 25(fvec3) + 141: TypeImage 29(int) Cube sampled format:Unknown + 142: TypePointer UniformConstant 141 + 143(g_tTexcdi4): 142(ptr) Variable UniformConstant + 146: TypeSampledImage 141 + 152: TypeImage 49(int) Cube sampled format:Unknown + 153: TypePointer UniformConstant 152 + 154(g_tTexcdu4): 153(ptr) Variable UniformConstant + 157: TypeSampledImage 152 + 225: TypePointer Function 8(PS_OUTPUT) + 227: 6(float) Constant 1065353216 + 228: 7(fvec4) ConstantComposite 227 227 227 227 + 230: TypePointer Function 6(float) + 237: TypePointer Output 7(fvec4) + 238(Color): 237(ptr) Variable Output + 241: TypePointer Output 6(float) + 242(Depth): 241(ptr) Variable Output + 245(g_sSamp2d): 19(ptr) Variable UniformConstant + 246: TypeImage 6(float) 1D sampled format:Unknown + 247: TypePointer UniformConstant 246 +248(g_tTex1df4a): 247(ptr) Variable UniformConstant + 249(g_tTex1df4): 247(ptr) Variable UniformConstant + 250: TypeImage 29(int) 1D sampled format:Unknown + 251: TypePointer UniformConstant 250 + 252(g_tTex1di4): 251(ptr) Variable UniformConstant + 253: TypeImage 49(int) 1D sampled format:Unknown + 254: TypePointer UniformConstant 253 + 255(g_tTex1du4): 254(ptr) Variable UniformConstant + 256: TypeImage 6(float) 3D sampled format:Unknown + 257: TypePointer UniformConstant 256 + 258(g_tTex3df4): 257(ptr) Variable UniformConstant + 259: TypeImage 29(int) 3D sampled format:Unknown + 260: TypePointer UniformConstant 259 + 261(g_tTex3di4): 260(ptr) Variable UniformConstant + 262: TypeImage 49(int) 3D sampled format:Unknown + 263: TypePointer UniformConstant 262 + 264(g_tTex3du4): 263(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label +235(flattenTemp): 225(ptr) Variable Function + 236:8(PS_OUTPUT) FunctionCall 10(@main() + Store 235(flattenTemp) 236 + 239: 12(ptr) AccessChain 235(flattenTemp) 34 + 240: 7(fvec4) Load 239 + Store 238(Color) 240 + 243: 230(ptr) AccessChain 235(flattenTemp) 30 + 244: 6(float) Load 243 + Store 242(Depth) 244 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 13(txval00): 12(ptr) Variable Function + 38(txval01): 37(ptr) Variable Function + 52(txval02): 51(ptr) Variable Function + 63(txval10): 12(ptr) Variable Function + 70(txval11): 37(ptr) Variable Function + 77(txval12): 51(ptr) Variable Function + 84(txval20): 12(ptr) Variable Function + 92(txval21): 37(ptr) Variable Function + 99(txval22): 51(ptr) Variable Function + 106(txval30): 12(ptr) Variable Function + 114(txval31): 37(ptr) Variable Function + 121(txval32): 51(ptr) Variable Function + 128(txval40): 12(ptr) Variable Function + 140(txval41): 37(ptr) Variable Function + 151(txval42): 51(ptr) Variable Function + 162(txval50): 12(ptr) Variable Function + 169(txval51): 37(ptr) Variable Function + 176(txval52): 51(ptr) Variable Function + 183(txval60): 12(ptr) Variable Function + 190(txval61): 37(ptr) Variable Function + 197(txval62): 51(ptr) Variable Function + 204(txval70): 12(ptr) Variable Function + 211(txval71): 37(ptr) Variable Function + 218(txval72): 51(ptr) Variable Function + 226(psout): 225(ptr) Variable Function + 17: 14 Load 16(g_tTex2df4) + 21: 18 Load 20(g_sSamp) + 23: 22 SampledImage 17 21 + 32: 31(ptr) AccessChain 28 30 + 33: 24(fvec2) Load 32 + 35: 7(fvec4) ImageGather 23 33 34 + Store 13(txval00) 35 + 42: 39 Load 41(g_tTex2di4) + 43: 18 Load 20(g_sSamp) + 45: 44 SampledImage 42 43 + 46: 31(ptr) AccessChain 28 30 + 47: 24(fvec2) Load 46 + 48: 36(ivec4) ImageGather 45 47 34 + Store 38(txval01) 48 + 56: 53 Load 55(g_tTex2du4) + 57: 18 Load 20(g_sSamp) + 59: 58 SampledImage 56 57 + 60: 31(ptr) AccessChain 28 30 + 61: 24(fvec2) Load 60 + 62: 50(ivec4) ImageGather 59 61 34 + Store 52(txval02) 62 + 64: 14 Load 16(g_tTex2df4) + 65: 18 Load 20(g_sSamp) + 66: 22 SampledImage 64 65 + 67: 31(ptr) AccessChain 28 30 + 68: 24(fvec2) Load 67 + 69: 7(fvec4) ImageGather 66 68 30 + Store 63(txval10) 69 + 71: 39 Load 41(g_tTex2di4) + 72: 18 Load 20(g_sSamp) + 73: 44 SampledImage 71 72 + 74: 31(ptr) AccessChain 28 30 + 75: 24(fvec2) Load 74 + 76: 36(ivec4) ImageGather 73 75 30 + Store 70(txval11) 76 + 78: 53 Load 55(g_tTex2du4) + 79: 18 Load 20(g_sSamp) + 80: 58 SampledImage 78 79 + 81: 31(ptr) AccessChain 28 30 + 82: 24(fvec2) Load 81 + 83: 50(ivec4) ImageGather 80 82 30 + Store 77(txval12) 83 + 85: 14 Load 16(g_tTex2df4) + 86: 18 Load 20(g_sSamp) + 87: 22 SampledImage 85 86 + 88: 31(ptr) AccessChain 28 30 + 89: 24(fvec2) Load 88 + 91: 7(fvec4) ImageGather 87 89 90 + Store 84(txval20) 91 + 93: 39 Load 41(g_tTex2di4) + 94: 18 Load 20(g_sSamp) + 95: 44 SampledImage 93 94 + 96: 31(ptr) AccessChain 28 30 + 97: 24(fvec2) Load 96 + 98: 36(ivec4) ImageGather 95 97 90 + Store 92(txval21) 98 + 100: 53 Load 55(g_tTex2du4) + 101: 18 Load 20(g_sSamp) + 102: 58 SampledImage 100 101 + 103: 31(ptr) AccessChain 28 30 + 104: 24(fvec2) Load 103 + 105: 50(ivec4) ImageGather 102 104 90 + Store 99(txval22) 105 + 107: 14 Load 16(g_tTex2df4) + 108: 18 Load 20(g_sSamp) + 109: 22 SampledImage 107 108 + 110: 31(ptr) AccessChain 28 30 + 111: 24(fvec2) Load 110 + 113: 7(fvec4) ImageGather 109 111 112 + Store 106(txval30) 113 + 115: 39 Load 41(g_tTex2di4) + 116: 18 Load 20(g_sSamp) + 117: 44 SampledImage 115 116 + 118: 31(ptr) AccessChain 28 30 + 119: 24(fvec2) Load 118 + 120: 36(ivec4) ImageGather 117 119 112 + Store 114(txval31) 120 + 122: 53 Load 55(g_tTex2du4) + 123: 18 Load 20(g_sSamp) + 124: 58 SampledImage 122 123 + 125: 31(ptr) AccessChain 28 30 + 126: 24(fvec2) Load 125 + 127: 50(ivec4) ImageGather 124 126 112 + Store 121(txval32) 127 + 132: 129 Load 131(g_tTexcdf4) + 133: 18 Load 20(g_sSamp) + 135: 134 SampledImage 132 133 + 137: 136(ptr) AccessChain 28 90 + 138: 25(fvec3) Load 137 + 139: 7(fvec4) ImageGather 135 138 34 + Store 128(txval40) 139 + 144: 141 Load 143(g_tTexcdi4) + 145: 18 Load 20(g_sSamp) + 147: 146 SampledImage 144 145 + 148: 136(ptr) AccessChain 28 90 + 149: 25(fvec3) Load 148 + 150: 36(ivec4) ImageGather 147 149 34 + Store 140(txval41) 150 + 155: 152 Load 154(g_tTexcdu4) + 156: 18 Load 20(g_sSamp) + 158: 157 SampledImage 155 156 + 159: 136(ptr) AccessChain 28 90 + 160: 25(fvec3) Load 159 + 161: 50(ivec4) ImageGather 158 160 34 + Store 151(txval42) 161 + 163: 129 Load 131(g_tTexcdf4) + 164: 18 Load 20(g_sSamp) + 165: 134 SampledImage 163 164 + 166: 136(ptr) AccessChain 28 90 + 167: 25(fvec3) Load 166 + 168: 7(fvec4) ImageGather 165 167 30 + Store 162(txval50) 168 + 170: 141 Load 143(g_tTexcdi4) + 171: 18 Load 20(g_sSamp) + 172: 146 SampledImage 170 171 + 173: 136(ptr) AccessChain 28 90 + 174: 25(fvec3) Load 173 + 175: 36(ivec4) ImageGather 172 174 30 + Store 169(txval51) 175 + 177: 152 Load 154(g_tTexcdu4) + 178: 18 Load 20(g_sSamp) + 179: 157 SampledImage 177 178 + 180: 136(ptr) AccessChain 28 90 + 181: 25(fvec3) Load 180 + 182: 50(ivec4) ImageGather 179 181 30 + Store 176(txval52) 182 + 184: 129 Load 131(g_tTexcdf4) + 185: 18 Load 20(g_sSamp) + 186: 134 SampledImage 184 185 + 187: 136(ptr) AccessChain 28 90 + 188: 25(fvec3) Load 187 + 189: 7(fvec4) ImageGather 186 188 90 + Store 183(txval60) 189 + 191: 141 Load 143(g_tTexcdi4) + 192: 18 Load 20(g_sSamp) + 193: 146 SampledImage 191 192 + 194: 136(ptr) AccessChain 28 90 + 195: 25(fvec3) Load 194 + 196: 36(ivec4) ImageGather 193 195 90 + Store 190(txval61) 196 + 198: 152 Load 154(g_tTexcdu4) + 199: 18 Load 20(g_sSamp) + 200: 157 SampledImage 198 199 + 201: 136(ptr) AccessChain 28 90 + 202: 25(fvec3) Load 201 + 203: 50(ivec4) ImageGather 200 202 90 + Store 197(txval62) 203 + 205: 129 Load 131(g_tTexcdf4) + 206: 18 Load 20(g_sSamp) + 207: 134 SampledImage 205 206 + 208: 136(ptr) AccessChain 28 90 + 209: 25(fvec3) Load 208 + 210: 7(fvec4) ImageGather 207 209 112 + Store 204(txval70) 210 + 212: 141 Load 143(g_tTexcdi4) + 213: 18 Load 20(g_sSamp) + 214: 146 SampledImage 212 213 + 215: 136(ptr) AccessChain 28 90 + 216: 25(fvec3) Load 215 + 217: 36(ivec4) ImageGather 214 216 112 + Store 211(txval71) 217 + 219: 152 Load 154(g_tTexcdu4) + 220: 18 Load 20(g_sSamp) + 221: 157 SampledImage 219 220 + 222: 136(ptr) AccessChain 28 90 + 223: 25(fvec3) Load 222 + 224: 50(ivec4) ImageGather 221 223 112 + Store 218(txval72) 224 + 229: 12(ptr) AccessChain 226(psout) 34 + Store 229 228 + 231: 230(ptr) AccessChain 226(psout) 30 + Store 231 227 + 232:8(PS_OUTPUT) Load 226(psout) + ReturnValue 232 + FunctionEnd 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 new file mode 100644 index 0000000..1d3fe46 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out @@ -0,0 +1,1788 @@ +hlsl.gatherRGBA.offset.dx10.frag +Shader version: 450 +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}) +0:39 Function Parameters: +0:? Sequence +0:46 Sequence +0:46 move second child to first child ( temp 4-component vector of float) +0:46 'txval001' ( temp 4-component vector of float) +0:46 textureGatherOffset ( temp 4-component vector of float) +0:46 Construct combined texture-sampler ( temp sampler2D) +0:46 'g_tTex2df4' ( uniform texture2D) +0:46 'g_sSamp' (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, 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:46 Constant: +0:46 1 (const uint) +0:46 o2: direct index for structure ( uniform 2-component vector of int) +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, 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:46 Constant: +0:46 5 (const uint) +0:46 Constant: +0:46 0 (const int) +0:47 Sequence +0:47 move second child to first child ( temp 4-component vector of int) +0:47 'txval011' ( temp 4-component vector of int) +0:47 textureGatherOffset ( temp 4-component vector of int) +0:47 Construct combined texture-sampler ( temp isampler2D) +0:47 'g_tTex2di4' ( uniform itexture2D) +0:47 'g_sSamp' (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, 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:47 Constant: +0:47 1 (const uint) +0:47 o2: direct index for structure ( uniform 2-component vector of int) +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, 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:47 Constant: +0:47 5 (const uint) +0:47 Constant: +0:47 0 (const int) +0:48 Sequence +0:48 move second child to first child ( temp 4-component vector of uint) +0:48 'txval021' ( temp 4-component vector of uint) +0:48 textureGatherOffset ( temp 4-component vector of uint) +0:48 Construct combined texture-sampler ( temp usampler2D) +0:48 'g_tTex2du4' ( uniform utexture2D) +0:48 'g_sSamp' (layout( binding=0) uniform sampler) +0:48 c2: direct index for structure ( uniform 2-component vector of float) +0:48 '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:48 Constant: +0:48 1 (const uint) +0:48 o2: direct index for structure ( uniform 2-component vector of int) +0:48 '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:48 Constant: +0:48 5 (const uint) +0:48 Constant: +0:48 0 (const int) +0:50 Sequence +0:50 move second child to first child ( temp 4-component vector of float) +0:50 'txval004' ( temp 4-component vector of float) +0:50 textureGatherOffsets ( temp 4-component vector of float) +0:50 Construct combined texture-sampler ( temp sampler2D) +0:50 'g_tTex2df4' ( uniform texture2D) +0:50 'g_sSamp' (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, 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:50 Constant: +0:50 1 (const uint) +0:50 Construct ivec2 ( temp 4-element array of 2-component vector of int) +0:50 o2: direct index for structure ( uniform 2-component vector of int) +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, 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:50 Constant: +0:50 5 (const uint) +0:50 o2: direct index for structure ( uniform 2-component vector of int) +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, 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:50 Constant: +0:50 5 (const uint) +0:50 o2: direct index for structure ( uniform 2-component vector of int) +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, 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:50 Constant: +0:50 5 (const uint) +0:50 o2: direct index for structure ( uniform 2-component vector of int) +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, 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:50 Constant: +0:50 5 (const uint) +0:50 Constant: +0:50 0 (const int) +0:51 Sequence +0:51 move second child to first child ( temp 4-component vector of int) +0:51 'txval014' ( temp 4-component vector of int) +0:51 textureGatherOffsets ( temp 4-component vector of int) +0:51 Construct combined texture-sampler ( temp isampler2D) +0:51 'g_tTex2di4' ( uniform itexture2D) +0:51 'g_sSamp' (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, 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:51 Constant: +0:51 1 (const uint) +0:51 Construct ivec2 ( temp 4-element array of 2-component vector of int) +0:51 o2: direct index for structure ( uniform 2-component vector of int) +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, 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:51 Constant: +0:51 5 (const uint) +0:51 o2: direct index for structure ( uniform 2-component vector of int) +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, 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:51 Constant: +0:51 5 (const uint) +0:51 o2: direct index for structure ( uniform 2-component vector of int) +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, 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:51 Constant: +0:51 5 (const uint) +0:51 o2: direct index for structure ( uniform 2-component vector of int) +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, 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:51 Constant: +0:51 5 (const uint) +0:51 Constant: +0:51 0 (const int) +0:52 Sequence +0:52 move second child to first child ( temp 4-component vector of uint) +0:52 'txval024' ( temp 4-component vector of uint) +0:52 textureGatherOffsets ( temp 4-component vector of uint) +0:52 Construct combined texture-sampler ( temp usampler2D) +0:52 'g_tTex2du4' ( uniform utexture2D) +0:52 'g_sSamp' (layout( binding=0) uniform sampler) +0:52 c2: direct index for structure ( uniform 2-component vector of float) +0:52 '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:52 Constant: +0:52 1 (const uint) +0:52 Construct ivec2 ( temp 4-element array of 2-component vector of int) +0:52 o2: direct index for structure ( uniform 2-component vector of int) +0:52 '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:52 Constant: +0:52 5 (const uint) +0:52 o2: direct index for structure ( uniform 2-component vector of int) +0:52 '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:52 Constant: +0:52 5 (const uint) +0:52 o2: direct index for structure ( uniform 2-component vector of int) +0:52 '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:52 Constant: +0:52 5 (const uint) +0:52 o2: direct index for structure ( uniform 2-component vector of int) +0:52 '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:52 Constant: +0:52 5 (const uint) +0:52 Constant: +0:52 0 (const int) +0:62 Sequence +0:62 move second child to first child ( temp 4-component vector of float) +0:62 'txval101' ( temp 4-component vector of float) +0:62 textureGatherOffset ( temp 4-component vector of float) +0:62 Construct combined texture-sampler ( temp sampler2D) +0:62 'g_tTex2df4' ( uniform texture2D) +0:62 'g_sSamp' (layout( binding=0) uniform sampler) +0:62 c2: direct index for structure ( uniform 2-component vector of float) +0:62 '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:62 Constant: +0:62 1 (const uint) +0:62 o2: direct index for structure ( uniform 2-component vector of int) +0:62 '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:62 Constant: +0:62 5 (const uint) +0:62 Constant: +0:62 1 (const int) +0:63 Sequence +0:63 move second child to first child ( temp 4-component vector of int) +0:63 'txval111' ( temp 4-component vector of int) +0:63 textureGatherOffset ( temp 4-component vector of int) +0:63 Construct combined texture-sampler ( temp isampler2D) +0:63 'g_tTex2di4' ( uniform itexture2D) +0:63 'g_sSamp' (layout( binding=0) uniform sampler) +0:63 c2: direct index for structure ( uniform 2-component vector of float) +0:63 '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:63 Constant: +0:63 1 (const uint) +0:63 o2: direct index for structure ( uniform 2-component vector of int) +0:63 '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:63 Constant: +0:63 5 (const uint) +0:63 Constant: +0:63 1 (const int) +0:64 Sequence +0:64 move second child to first child ( temp 4-component vector of uint) +0:64 'txval121' ( temp 4-component vector of uint) +0:64 textureGatherOffset ( temp 4-component vector of uint) +0:64 Construct combined texture-sampler ( temp usampler2D) +0:64 'g_tTex2du4' ( uniform utexture2D) +0:64 'g_sSamp' (layout( binding=0) uniform sampler) +0:64 c2: direct index for structure ( uniform 2-component vector of float) +0:64 '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:64 Constant: +0:64 1 (const uint) +0:64 o2: direct index for structure ( uniform 2-component vector of int) +0:64 '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:64 Constant: +0:64 5 (const uint) +0:64 Constant: +0:64 1 (const int) +0:66 Sequence +0:66 move second child to first child ( temp 4-component vector of float) +0:66 'txval104' ( temp 4-component vector of float) +0:66 textureGatherOffsets ( temp 4-component vector of float) +0:66 Construct combined texture-sampler ( temp sampler2D) +0:66 'g_tTex2df4' ( uniform texture2D) +0:66 'g_sSamp' (layout( binding=0) uniform sampler) +0:66 c2: direct index for structure ( uniform 2-component vector of float) +0:66 '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:66 Constant: +0:66 1 (const uint) +0:66 Construct ivec2 ( temp 4-element array of 2-component vector of int) +0:66 o2: direct index for structure ( uniform 2-component vector of int) +0:66 '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:66 Constant: +0:66 5 (const uint) +0:66 o2: direct index for structure ( uniform 2-component vector of int) +0:66 '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:66 Constant: +0:66 5 (const uint) +0:66 o2: direct index for structure ( uniform 2-component vector of int) +0:66 '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:66 Constant: +0:66 5 (const uint) +0:66 o2: direct index for structure ( uniform 2-component vector of int) +0:66 '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:66 Constant: +0:66 5 (const uint) +0:66 Constant: +0:66 1 (const int) +0:67 Sequence +0:67 move second child to first child ( temp 4-component vector of int) +0:67 'txval114' ( temp 4-component vector of int) +0:67 textureGatherOffsets ( temp 4-component vector of int) +0:67 Construct combined texture-sampler ( temp isampler2D) +0:67 'g_tTex2di4' ( uniform itexture2D) +0:67 'g_sSamp' (layout( binding=0) uniform sampler) +0:67 c2: direct index for structure ( uniform 2-component vector of float) +0:67 '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:67 Constant: +0:67 1 (const uint) +0:67 Construct ivec2 ( temp 4-element array of 2-component vector of int) +0:67 o2: direct index for structure ( uniform 2-component vector of int) +0:67 '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:67 Constant: +0:67 5 (const uint) +0:67 o2: direct index for structure ( uniform 2-component vector of int) +0:67 '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:67 Constant: +0:67 5 (const uint) +0:67 o2: direct index for structure ( uniform 2-component vector of int) +0:67 '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:67 Constant: +0:67 5 (const uint) +0:67 o2: direct index for structure ( uniform 2-component vector of int) +0:67 '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:67 Constant: +0:67 5 (const uint) +0:67 Constant: +0:67 1 (const int) +0:68 Sequence +0:68 move second child to first child ( temp 4-component vector of uint) +0:68 'txval124' ( temp 4-component vector of uint) +0:68 textureGatherOffsets ( temp 4-component vector of uint) +0:68 Construct combined texture-sampler ( temp usampler2D) +0:68 'g_tTex2du4' ( uniform utexture2D) +0:68 'g_sSamp' (layout( binding=0) uniform sampler) +0:68 c2: direct index for structure ( uniform 2-component vector of float) +0:68 '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:68 Constant: +0:68 1 (const uint) +0:68 Construct ivec2 ( temp 4-element array of 2-component vector of int) +0:68 o2: direct index for structure ( uniform 2-component vector of int) +0:68 '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:68 Constant: +0:68 5 (const uint) +0:68 o2: direct index for structure ( uniform 2-component vector of int) +0:68 '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:68 Constant: +0:68 5 (const uint) +0:68 o2: direct index for structure ( uniform 2-component vector of int) +0:68 '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:68 Constant: +0:68 5 (const uint) +0:68 o2: direct index for structure ( uniform 2-component vector of int) +0:68 '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:68 Constant: +0:68 5 (const uint) +0:68 Constant: +0:68 1 (const int) +0:78 Sequence +0:78 move second child to first child ( temp 4-component vector of float) +0:78 'txval201' ( temp 4-component vector of float) +0:78 textureGatherOffset ( temp 4-component vector of float) +0:78 Construct combined texture-sampler ( temp sampler2D) +0:78 'g_tTex2df4' ( uniform texture2D) +0:78 'g_sSamp' (layout( binding=0) uniform sampler) +0:78 c2: direct index for structure ( uniform 2-component vector of float) +0:78 '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:78 Constant: +0:78 1 (const uint) +0:78 o2: direct index for structure ( uniform 2-component vector of int) +0:78 '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:78 Constant: +0:78 5 (const uint) +0:78 Constant: +0:78 2 (const int) +0:79 Sequence +0:79 move second child to first child ( temp 4-component vector of int) +0:79 'txval211' ( temp 4-component vector of int) +0:79 textureGatherOffset ( temp 4-component vector of int) +0:79 Construct combined texture-sampler ( temp isampler2D) +0:79 'g_tTex2di4' ( uniform itexture2D) +0:79 'g_sSamp' (layout( binding=0) uniform sampler) +0:79 c2: direct index for structure ( uniform 2-component vector of float) +0:79 '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:79 Constant: +0:79 1 (const uint) +0:79 o2: direct index for structure ( uniform 2-component vector of int) +0:79 '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:79 Constant: +0:79 5 (const uint) +0:79 Constant: +0:79 2 (const int) +0:80 Sequence +0:80 move second child to first child ( temp 4-component vector of uint) +0:80 'txval221' ( temp 4-component vector of uint) +0:80 textureGatherOffset ( temp 4-component vector of uint) +0:80 Construct combined texture-sampler ( temp usampler2D) +0:80 'g_tTex2du4' ( uniform utexture2D) +0:80 'g_sSamp' (layout( binding=0) uniform sampler) +0:80 c2: direct index for structure ( uniform 2-component vector of float) +0:80 '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:80 Constant: +0:80 1 (const uint) +0:80 o2: direct index for structure ( uniform 2-component vector of int) +0:80 '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:80 Constant: +0:80 5 (const uint) +0:80 Constant: +0:80 2 (const int) +0:82 Sequence +0:82 move second child to first child ( temp 4-component vector of float) +0:82 'txval204' ( temp 4-component vector of float) +0:82 textureGatherOffsets ( temp 4-component vector of float) +0:82 Construct combined texture-sampler ( temp sampler2D) +0:82 'g_tTex2df4' ( uniform texture2D) +0:82 'g_sSamp' (layout( binding=0) uniform sampler) +0:82 c2: direct index for structure ( uniform 2-component vector of float) +0:82 '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:82 Constant: +0:82 1 (const uint) +0:82 Construct ivec2 ( temp 4-element array of 2-component vector of int) +0:82 o2: direct index for structure ( uniform 2-component vector of int) +0:82 '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:82 Constant: +0:82 5 (const uint) +0:82 o2: direct index for structure ( uniform 2-component vector of int) +0:82 '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:82 Constant: +0:82 5 (const uint) +0:82 o2: direct index for structure ( uniform 2-component vector of int) +0:82 '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:82 Constant: +0:82 5 (const uint) +0:82 o2: direct index for structure ( uniform 2-component vector of int) +0:82 '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:82 Constant: +0:82 5 (const uint) +0:82 Constant: +0:82 2 (const int) +0:83 Sequence +0:83 move second child to first child ( temp 4-component vector of int) +0:83 'txval214' ( temp 4-component vector of int) +0:83 textureGatherOffsets ( temp 4-component vector of int) +0:83 Construct combined texture-sampler ( temp isampler2D) +0:83 'g_tTex2di4' ( uniform itexture2D) +0:83 'g_sSamp' (layout( binding=0) uniform sampler) +0:83 c2: direct index for structure ( uniform 2-component vector of float) +0:83 '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:83 Constant: +0:83 1 (const uint) +0:83 Construct ivec2 ( temp 4-element array of 2-component vector of int) +0:83 o2: direct index for structure ( uniform 2-component vector of int) +0:83 '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:83 Constant: +0:83 5 (const uint) +0:83 o2: direct index for structure ( uniform 2-component vector of int) +0:83 '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:83 Constant: +0:83 5 (const uint) +0:83 o2: direct index for structure ( uniform 2-component vector of int) +0:83 '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:83 Constant: +0:83 5 (const uint) +0:83 o2: direct index for structure ( uniform 2-component vector of int) +0:83 '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:83 Constant: +0:83 5 (const uint) +0:83 Constant: +0:83 2 (const int) +0:84 Sequence +0:84 move second child to first child ( temp 4-component vector of uint) +0:84 'txval224' ( temp 4-component vector of uint) +0:84 textureGatherOffsets ( temp 4-component vector of uint) +0:84 Construct combined texture-sampler ( temp usampler2D) +0:84 'g_tTex2du4' ( uniform utexture2D) +0:84 'g_sSamp' (layout( binding=0) uniform sampler) +0:84 c2: direct index for structure ( uniform 2-component vector of float) +0:84 '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:84 Constant: +0:84 1 (const uint) +0:84 Construct ivec2 ( temp 4-element array of 2-component vector of int) +0:84 o2: direct index for structure ( uniform 2-component vector of int) +0:84 '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:84 Constant: +0:84 5 (const uint) +0:84 o2: direct index for structure ( uniform 2-component vector of int) +0:84 '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:84 Constant: +0:84 5 (const uint) +0:84 o2: direct index for structure ( uniform 2-component vector of int) +0:84 '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:84 Constant: +0:84 5 (const uint) +0:84 o2: direct index for structure ( uniform 2-component vector of int) +0:84 '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:84 Constant: +0:84 5 (const uint) +0:84 Constant: +0:84 2 (const int) +0:94 Sequence +0:94 move second child to first child ( temp 4-component vector of float) +0:94 'txval301' ( temp 4-component vector of float) +0:94 textureGatherOffset ( temp 4-component vector of float) +0:94 Construct combined texture-sampler ( temp sampler2D) +0:94 'g_tTex2df4' ( uniform texture2D) +0:94 'g_sSamp' (layout( binding=0) uniform sampler) +0:94 c2: direct index for structure ( uniform 2-component vector of float) +0:94 '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:94 Constant: +0:94 1 (const uint) +0:94 o2: direct index for structure ( uniform 2-component vector of int) +0:94 '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:94 Constant: +0:94 5 (const uint) +0:94 Constant: +0:94 3 (const int) +0:95 Sequence +0:95 move second child to first child ( temp 4-component vector of int) +0:95 'txval311' ( temp 4-component vector of int) +0:95 textureGatherOffset ( temp 4-component vector of int) +0:95 Construct combined texture-sampler ( temp isampler2D) +0:95 'g_tTex2di4' ( uniform itexture2D) +0:95 'g_sSamp' (layout( binding=0) uniform sampler) +0:95 c2: direct index for structure ( uniform 2-component vector of float) +0:95 '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:95 Constant: +0:95 1 (const uint) +0:95 o2: direct index for structure ( uniform 2-component vector of int) +0:95 '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:95 Constant: +0:95 5 (const uint) +0:95 Constant: +0:95 3 (const int) +0:96 Sequence +0:96 move second child to first child ( temp 4-component vector of uint) +0:96 'txval321' ( temp 4-component vector of uint) +0:96 textureGatherOffset ( temp 4-component vector of uint) +0:96 Construct combined texture-sampler ( temp usampler2D) +0:96 'g_tTex2du4' ( uniform utexture2D) +0:96 'g_sSamp' (layout( binding=0) uniform sampler) +0:96 c2: direct index for structure ( uniform 2-component vector of float) +0:96 '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:96 Constant: +0:96 1 (const uint) +0:96 o2: direct index for structure ( uniform 2-component vector of int) +0:96 '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:96 Constant: +0:96 5 (const uint) +0:96 Constant: +0:96 3 (const int) +0:98 Sequence +0:98 move second child to first child ( temp 4-component vector of float) +0:98 'txval304' ( temp 4-component vector of float) +0:98 textureGatherOffsets ( temp 4-component vector of float) +0:98 Construct combined texture-sampler ( temp sampler2D) +0:98 'g_tTex2df4' ( uniform texture2D) +0:98 'g_sSamp' (layout( binding=0) uniform sampler) +0:98 c2: direct index for structure ( uniform 2-component vector of float) +0:98 '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:98 Constant: +0:98 1 (const uint) +0:98 Construct ivec2 ( temp 4-element array of 2-component vector of int) +0:98 o2: direct index for structure ( uniform 2-component vector of int) +0:98 '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:98 Constant: +0:98 5 (const uint) +0:98 o2: direct index for structure ( uniform 2-component vector of int) +0:98 '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:98 Constant: +0:98 5 (const uint) +0:98 o2: direct index for structure ( uniform 2-component vector of int) +0:98 '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:98 Constant: +0:98 5 (const uint) +0:98 o2: direct index for structure ( uniform 2-component vector of int) +0:98 '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:98 Constant: +0:98 5 (const uint) +0:98 Constant: +0:98 3 (const int) +0:99 Sequence +0:99 move second child to first child ( temp 4-component vector of int) +0:99 'txval314' ( temp 4-component vector of int) +0:99 textureGatherOffsets ( temp 4-component vector of int) +0:99 Construct combined texture-sampler ( temp isampler2D) +0:99 'g_tTex2di4' ( uniform itexture2D) +0:99 'g_sSamp' (layout( binding=0) uniform sampler) +0:99 c2: direct index for structure ( uniform 2-component vector of float) +0:99 '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:99 Constant: +0:99 1 (const uint) +0:99 Construct ivec2 ( temp 4-element array of 2-component vector of int) +0:99 o2: direct index for structure ( uniform 2-component vector of int) +0:99 '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:99 Constant: +0:99 5 (const uint) +0:99 o2: direct index for structure ( uniform 2-component vector of int) +0:99 '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:99 Constant: +0:99 5 (const uint) +0:99 o2: direct index for structure ( uniform 2-component vector of int) +0:99 '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:99 Constant: +0:99 5 (const uint) +0:99 o2: direct index for structure ( uniform 2-component vector of int) +0:99 '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:99 Constant: +0:99 5 (const uint) +0:99 Constant: +0:99 3 (const int) +0:100 Sequence +0:100 move second child to first child ( temp 4-component vector of uint) +0:100 'txval324' ( temp 4-component vector of uint) +0:100 textureGatherOffsets ( temp 4-component vector of uint) +0:100 Construct combined texture-sampler ( temp usampler2D) +0:100 'g_tTex2du4' ( uniform utexture2D) +0:100 'g_sSamp' (layout( binding=0) uniform sampler) +0:100 c2: direct index for structure ( uniform 2-component vector of float) +0:100 '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:100 Constant: +0:100 1 (const uint) +0:100 Construct ivec2 ( temp 4-element array of 2-component vector of int) +0:100 o2: direct index for structure ( uniform 2-component vector of int) +0:100 '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:100 Constant: +0:100 5 (const uint) +0:100 o2: direct index for structure ( uniform 2-component vector of int) +0:100 '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:100 Constant: +0:100 5 (const uint) +0:100 o2: direct index for structure ( uniform 2-component vector of int) +0:100 '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:100 Constant: +0:100 5 (const uint) +0:100 o2: direct index for structure ( uniform 2-component vector of int) +0:100 '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:100 Constant: +0:100 5 (const uint) +0:100 Constant: +0:100 3 (const int) +0:112 move second child to first child ( temp 4-component vector of float) +0:112 Color: direct index for structure ( temp 4-component vector of float) +0:112 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:112 Constant: +0:112 0 (const int) +0:112 Constant: +0:112 1.000000 +0:112 1.000000 +0:112 1.000000 +0:112 1.000000 +0:113 move second child to first child ( temp float) +0:113 Depth: direct index for structure ( temp float) +0:113 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:113 Constant: +0:113 1 (const int) +0:113 Constant: +0:113 1.000000 +0:115 Branch: Return with expression +0:115 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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 structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:39 1 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_sSamp2d' ( uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1D) +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_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:? '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) + + +Linked fragment stage: + + +Shader version: 450 +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}) +0:39 Function Parameters: +0:? Sequence +0:46 Sequence +0:46 move second child to first child ( temp 4-component vector of float) +0:46 'txval001' ( temp 4-component vector of float) +0:46 textureGatherOffset ( temp 4-component vector of float) +0:46 Construct combined texture-sampler ( temp sampler2D) +0:46 'g_tTex2df4' ( uniform texture2D) +0:46 'g_sSamp' (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, 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:46 Constant: +0:46 1 (const uint) +0:46 o2: direct index for structure ( uniform 2-component vector of int) +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, 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:46 Constant: +0:46 5 (const uint) +0:46 Constant: +0:46 0 (const int) +0:47 Sequence +0:47 move second child to first child ( temp 4-component vector of int) +0:47 'txval011' ( temp 4-component vector of int) +0:47 textureGatherOffset ( temp 4-component vector of int) +0:47 Construct combined texture-sampler ( temp isampler2D) +0:47 'g_tTex2di4' ( uniform itexture2D) +0:47 'g_sSamp' (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, 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:47 Constant: +0:47 1 (const uint) +0:47 o2: direct index for structure ( uniform 2-component vector of int) +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, 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:47 Constant: +0:47 5 (const uint) +0:47 Constant: +0:47 0 (const int) +0:48 Sequence +0:48 move second child to first child ( temp 4-component vector of uint) +0:48 'txval021' ( temp 4-component vector of uint) +0:48 textureGatherOffset ( temp 4-component vector of uint) +0:48 Construct combined texture-sampler ( temp usampler2D) +0:48 'g_tTex2du4' ( uniform utexture2D) +0:48 'g_sSamp' (layout( binding=0) uniform sampler) +0:48 c2: direct index for structure ( uniform 2-component vector of float) +0:48 '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:48 Constant: +0:48 1 (const uint) +0:48 o2: direct index for structure ( uniform 2-component vector of int) +0:48 '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:48 Constant: +0:48 5 (const uint) +0:48 Constant: +0:48 0 (const int) +0:50 Sequence +0:50 move second child to first child ( temp 4-component vector of float) +0:50 'txval004' ( temp 4-component vector of float) +0:50 textureGatherOffsets ( temp 4-component vector of float) +0:50 Construct combined texture-sampler ( temp sampler2D) +0:50 'g_tTex2df4' ( uniform texture2D) +0:50 'g_sSamp' (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, 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:50 Constant: +0:50 1 (const uint) +0:50 Construct ivec2 ( temp 4-element array of 2-component vector of int) +0:50 o2: direct index for structure ( uniform 2-component vector of int) +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, 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:50 Constant: +0:50 5 (const uint) +0:50 o2: direct index for structure ( uniform 2-component vector of int) +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, 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:50 Constant: +0:50 5 (const uint) +0:50 o2: direct index for structure ( uniform 2-component vector of int) +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, 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:50 Constant: +0:50 5 (const uint) +0:50 o2: direct index for structure ( uniform 2-component vector of int) +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, 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:50 Constant: +0:50 5 (const uint) +0:50 Constant: +0:50 0 (const int) +0:51 Sequence +0:51 move second child to first child ( temp 4-component vector of int) +0:51 'txval014' ( temp 4-component vector of int) +0:51 textureGatherOffsets ( temp 4-component vector of int) +0:51 Construct combined texture-sampler ( temp isampler2D) +0:51 'g_tTex2di4' ( uniform itexture2D) +0:51 'g_sSamp' (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, 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:51 Constant: +0:51 1 (const uint) +0:51 Construct ivec2 ( temp 4-element array of 2-component vector of int) +0:51 o2: direct index for structure ( uniform 2-component vector of int) +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, 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:51 Constant: +0:51 5 (const uint) +0:51 o2: direct index for structure ( uniform 2-component vector of int) +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, 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:51 Constant: +0:51 5 (const uint) +0:51 o2: direct index for structure ( uniform 2-component vector of int) +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, 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:51 Constant: +0:51 5 (const uint) +0:51 o2: direct index for structure ( uniform 2-component vector of int) +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, 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:51 Constant: +0:51 5 (const uint) +0:51 Constant: +0:51 0 (const int) +0:52 Sequence +0:52 move second child to first child ( temp 4-component vector of uint) +0:52 'txval024' ( temp 4-component vector of uint) +0:52 textureGatherOffsets ( temp 4-component vector of uint) +0:52 Construct combined texture-sampler ( temp usampler2D) +0:52 'g_tTex2du4' ( uniform utexture2D) +0:52 'g_sSamp' (layout( binding=0) uniform sampler) +0:52 c2: direct index for structure ( uniform 2-component vector of float) +0:52 '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:52 Constant: +0:52 1 (const uint) +0:52 Construct ivec2 ( temp 4-element array of 2-component vector of int) +0:52 o2: direct index for structure ( uniform 2-component vector of int) +0:52 '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:52 Constant: +0:52 5 (const uint) +0:52 o2: direct index for structure ( uniform 2-component vector of int) +0:52 '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:52 Constant: +0:52 5 (const uint) +0:52 o2: direct index for structure ( uniform 2-component vector of int) +0:52 '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:52 Constant: +0:52 5 (const uint) +0:52 o2: direct index for structure ( uniform 2-component vector of int) +0:52 '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:52 Constant: +0:52 5 (const uint) +0:52 Constant: +0:52 0 (const int) +0:62 Sequence +0:62 move second child to first child ( temp 4-component vector of float) +0:62 'txval101' ( temp 4-component vector of float) +0:62 textureGatherOffset ( temp 4-component vector of float) +0:62 Construct combined texture-sampler ( temp sampler2D) +0:62 'g_tTex2df4' ( uniform texture2D) +0:62 'g_sSamp' (layout( binding=0) uniform sampler) +0:62 c2: direct index for structure ( uniform 2-component vector of float) +0:62 '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:62 Constant: +0:62 1 (const uint) +0:62 o2: direct index for structure ( uniform 2-component vector of int) +0:62 '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:62 Constant: +0:62 5 (const uint) +0:62 Constant: +0:62 1 (const int) +0:63 Sequence +0:63 move second child to first child ( temp 4-component vector of int) +0:63 'txval111' ( temp 4-component vector of int) +0:63 textureGatherOffset ( temp 4-component vector of int) +0:63 Construct combined texture-sampler ( temp isampler2D) +0:63 'g_tTex2di4' ( uniform itexture2D) +0:63 'g_sSamp' (layout( binding=0) uniform sampler) +0:63 c2: direct index for structure ( uniform 2-component vector of float) +0:63 '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:63 Constant: +0:63 1 (const uint) +0:63 o2: direct index for structure ( uniform 2-component vector of int) +0:63 '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:63 Constant: +0:63 5 (const uint) +0:63 Constant: +0:63 1 (const int) +0:64 Sequence +0:64 move second child to first child ( temp 4-component vector of uint) +0:64 'txval121' ( temp 4-component vector of uint) +0:64 textureGatherOffset ( temp 4-component vector of uint) +0:64 Construct combined texture-sampler ( temp usampler2D) +0:64 'g_tTex2du4' ( uniform utexture2D) +0:64 'g_sSamp' (layout( binding=0) uniform sampler) +0:64 c2: direct index for structure ( uniform 2-component vector of float) +0:64 '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:64 Constant: +0:64 1 (const uint) +0:64 o2: direct index for structure ( uniform 2-component vector of int) +0:64 '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:64 Constant: +0:64 5 (const uint) +0:64 Constant: +0:64 1 (const int) +0:66 Sequence +0:66 move second child to first child ( temp 4-component vector of float) +0:66 'txval104' ( temp 4-component vector of float) +0:66 textureGatherOffsets ( temp 4-component vector of float) +0:66 Construct combined texture-sampler ( temp sampler2D) +0:66 'g_tTex2df4' ( uniform texture2D) +0:66 'g_sSamp' (layout( binding=0) uniform sampler) +0:66 c2: direct index for structure ( uniform 2-component vector of float) +0:66 '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:66 Constant: +0:66 1 (const uint) +0:66 Construct ivec2 ( temp 4-element array of 2-component vector of int) +0:66 o2: direct index for structure ( uniform 2-component vector of int) +0:66 '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:66 Constant: +0:66 5 (const uint) +0:66 o2: direct index for structure ( uniform 2-component vector of int) +0:66 '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:66 Constant: +0:66 5 (const uint) +0:66 o2: direct index for structure ( uniform 2-component vector of int) +0:66 '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:66 Constant: +0:66 5 (const uint) +0:66 o2: direct index for structure ( uniform 2-component vector of int) +0:66 '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:66 Constant: +0:66 5 (const uint) +0:66 Constant: +0:66 1 (const int) +0:67 Sequence +0:67 move second child to first child ( temp 4-component vector of int) +0:67 'txval114' ( temp 4-component vector of int) +0:67 textureGatherOffsets ( temp 4-component vector of int) +0:67 Construct combined texture-sampler ( temp isampler2D) +0:67 'g_tTex2di4' ( uniform itexture2D) +0:67 'g_sSamp' (layout( binding=0) uniform sampler) +0:67 c2: direct index for structure ( uniform 2-component vector of float) +0:67 '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:67 Constant: +0:67 1 (const uint) +0:67 Construct ivec2 ( temp 4-element array of 2-component vector of int) +0:67 o2: direct index for structure ( uniform 2-component vector of int) +0:67 '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:67 Constant: +0:67 5 (const uint) +0:67 o2: direct index for structure ( uniform 2-component vector of int) +0:67 '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:67 Constant: +0:67 5 (const uint) +0:67 o2: direct index for structure ( uniform 2-component vector of int) +0:67 '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:67 Constant: +0:67 5 (const uint) +0:67 o2: direct index for structure ( uniform 2-component vector of int) +0:67 '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:67 Constant: +0:67 5 (const uint) +0:67 Constant: +0:67 1 (const int) +0:68 Sequence +0:68 move second child to first child ( temp 4-component vector of uint) +0:68 'txval124' ( temp 4-component vector of uint) +0:68 textureGatherOffsets ( temp 4-component vector of uint) +0:68 Construct combined texture-sampler ( temp usampler2D) +0:68 'g_tTex2du4' ( uniform utexture2D) +0:68 'g_sSamp' (layout( binding=0) uniform sampler) +0:68 c2: direct index for structure ( uniform 2-component vector of float) +0:68 '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:68 Constant: +0:68 1 (const uint) +0:68 Construct ivec2 ( temp 4-element array of 2-component vector of int) +0:68 o2: direct index for structure ( uniform 2-component vector of int) +0:68 '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:68 Constant: +0:68 5 (const uint) +0:68 o2: direct index for structure ( uniform 2-component vector of int) +0:68 '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:68 Constant: +0:68 5 (const uint) +0:68 o2: direct index for structure ( uniform 2-component vector of int) +0:68 '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:68 Constant: +0:68 5 (const uint) +0:68 o2: direct index for structure ( uniform 2-component vector of int) +0:68 '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:68 Constant: +0:68 5 (const uint) +0:68 Constant: +0:68 1 (const int) +0:78 Sequence +0:78 move second child to first child ( temp 4-component vector of float) +0:78 'txval201' ( temp 4-component vector of float) +0:78 textureGatherOffset ( temp 4-component vector of float) +0:78 Construct combined texture-sampler ( temp sampler2D) +0:78 'g_tTex2df4' ( uniform texture2D) +0:78 'g_sSamp' (layout( binding=0) uniform sampler) +0:78 c2: direct index for structure ( uniform 2-component vector of float) +0:78 '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:78 Constant: +0:78 1 (const uint) +0:78 o2: direct index for structure ( uniform 2-component vector of int) +0:78 '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:78 Constant: +0:78 5 (const uint) +0:78 Constant: +0:78 2 (const int) +0:79 Sequence +0:79 move second child to first child ( temp 4-component vector of int) +0:79 'txval211' ( temp 4-component vector of int) +0:79 textureGatherOffset ( temp 4-component vector of int) +0:79 Construct combined texture-sampler ( temp isampler2D) +0:79 'g_tTex2di4' ( uniform itexture2D) +0:79 'g_sSamp' (layout( binding=0) uniform sampler) +0:79 c2: direct index for structure ( uniform 2-component vector of float) +0:79 '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:79 Constant: +0:79 1 (const uint) +0:79 o2: direct index for structure ( uniform 2-component vector of int) +0:79 '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:79 Constant: +0:79 5 (const uint) +0:79 Constant: +0:79 2 (const int) +0:80 Sequence +0:80 move second child to first child ( temp 4-component vector of uint) +0:80 'txval221' ( temp 4-component vector of uint) +0:80 textureGatherOffset ( temp 4-component vector of uint) +0:80 Construct combined texture-sampler ( temp usampler2D) +0:80 'g_tTex2du4' ( uniform utexture2D) +0:80 'g_sSamp' (layout( binding=0) uniform sampler) +0:80 c2: direct index for structure ( uniform 2-component vector of float) +0:80 '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:80 Constant: +0:80 1 (const uint) +0:80 o2: direct index for structure ( uniform 2-component vector of int) +0:80 '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:80 Constant: +0:80 5 (const uint) +0:80 Constant: +0:80 2 (const int) +0:82 Sequence +0:82 move second child to first child ( temp 4-component vector of float) +0:82 'txval204' ( temp 4-component vector of float) +0:82 textureGatherOffsets ( temp 4-component vector of float) +0:82 Construct combined texture-sampler ( temp sampler2D) +0:82 'g_tTex2df4' ( uniform texture2D) +0:82 'g_sSamp' (layout( binding=0) uniform sampler) +0:82 c2: direct index for structure ( uniform 2-component vector of float) +0:82 '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:82 Constant: +0:82 1 (const uint) +0:82 Construct ivec2 ( temp 4-element array of 2-component vector of int) +0:82 o2: direct index for structure ( uniform 2-component vector of int) +0:82 '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:82 Constant: +0:82 5 (const uint) +0:82 o2: direct index for structure ( uniform 2-component vector of int) +0:82 '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:82 Constant: +0:82 5 (const uint) +0:82 o2: direct index for structure ( uniform 2-component vector of int) +0:82 '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:82 Constant: +0:82 5 (const uint) +0:82 o2: direct index for structure ( uniform 2-component vector of int) +0:82 '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:82 Constant: +0:82 5 (const uint) +0:82 Constant: +0:82 2 (const int) +0:83 Sequence +0:83 move second child to first child ( temp 4-component vector of int) +0:83 'txval214' ( temp 4-component vector of int) +0:83 textureGatherOffsets ( temp 4-component vector of int) +0:83 Construct combined texture-sampler ( temp isampler2D) +0:83 'g_tTex2di4' ( uniform itexture2D) +0:83 'g_sSamp' (layout( binding=0) uniform sampler) +0:83 c2: direct index for structure ( uniform 2-component vector of float) +0:83 '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:83 Constant: +0:83 1 (const uint) +0:83 Construct ivec2 ( temp 4-element array of 2-component vector of int) +0:83 o2: direct index for structure ( uniform 2-component vector of int) +0:83 '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:83 Constant: +0:83 5 (const uint) +0:83 o2: direct index for structure ( uniform 2-component vector of int) +0:83 '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:83 Constant: +0:83 5 (const uint) +0:83 o2: direct index for structure ( uniform 2-component vector of int) +0:83 '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:83 Constant: +0:83 5 (const uint) +0:83 o2: direct index for structure ( uniform 2-component vector of int) +0:83 '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:83 Constant: +0:83 5 (const uint) +0:83 Constant: +0:83 2 (const int) +0:84 Sequence +0:84 move second child to first child ( temp 4-component vector of uint) +0:84 'txval224' ( temp 4-component vector of uint) +0:84 textureGatherOffsets ( temp 4-component vector of uint) +0:84 Construct combined texture-sampler ( temp usampler2D) +0:84 'g_tTex2du4' ( uniform utexture2D) +0:84 'g_sSamp' (layout( binding=0) uniform sampler) +0:84 c2: direct index for structure ( uniform 2-component vector of float) +0:84 '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:84 Constant: +0:84 1 (const uint) +0:84 Construct ivec2 ( temp 4-element array of 2-component vector of int) +0:84 o2: direct index for structure ( uniform 2-component vector of int) +0:84 '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:84 Constant: +0:84 5 (const uint) +0:84 o2: direct index for structure ( uniform 2-component vector of int) +0:84 '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:84 Constant: +0:84 5 (const uint) +0:84 o2: direct index for structure ( uniform 2-component vector of int) +0:84 '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:84 Constant: +0:84 5 (const uint) +0:84 o2: direct index for structure ( uniform 2-component vector of int) +0:84 '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:84 Constant: +0:84 5 (const uint) +0:84 Constant: +0:84 2 (const int) +0:94 Sequence +0:94 move second child to first child ( temp 4-component vector of float) +0:94 'txval301' ( temp 4-component vector of float) +0:94 textureGatherOffset ( temp 4-component vector of float) +0:94 Construct combined texture-sampler ( temp sampler2D) +0:94 'g_tTex2df4' ( uniform texture2D) +0:94 'g_sSamp' (layout( binding=0) uniform sampler) +0:94 c2: direct index for structure ( uniform 2-component vector of float) +0:94 '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:94 Constant: +0:94 1 (const uint) +0:94 o2: direct index for structure ( uniform 2-component vector of int) +0:94 '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:94 Constant: +0:94 5 (const uint) +0:94 Constant: +0:94 3 (const int) +0:95 Sequence +0:95 move second child to first child ( temp 4-component vector of int) +0:95 'txval311' ( temp 4-component vector of int) +0:95 textureGatherOffset ( temp 4-component vector of int) +0:95 Construct combined texture-sampler ( temp isampler2D) +0:95 'g_tTex2di4' ( uniform itexture2D) +0:95 'g_sSamp' (layout( binding=0) uniform sampler) +0:95 c2: direct index for structure ( uniform 2-component vector of float) +0:95 '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:95 Constant: +0:95 1 (const uint) +0:95 o2: direct index for structure ( uniform 2-component vector of int) +0:95 '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:95 Constant: +0:95 5 (const uint) +0:95 Constant: +0:95 3 (const int) +0:96 Sequence +0:96 move second child to first child ( temp 4-component vector of uint) +0:96 'txval321' ( temp 4-component vector of uint) +0:96 textureGatherOffset ( temp 4-component vector of uint) +0:96 Construct combined texture-sampler ( temp usampler2D) +0:96 'g_tTex2du4' ( uniform utexture2D) +0:96 'g_sSamp' (layout( binding=0) uniform sampler) +0:96 c2: direct index for structure ( uniform 2-component vector of float) +0:96 '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:96 Constant: +0:96 1 (const uint) +0:96 o2: direct index for structure ( uniform 2-component vector of int) +0:96 '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:96 Constant: +0:96 5 (const uint) +0:96 Constant: +0:96 3 (const int) +0:98 Sequence +0:98 move second child to first child ( temp 4-component vector of float) +0:98 'txval304' ( temp 4-component vector of float) +0:98 textureGatherOffsets ( temp 4-component vector of float) +0:98 Construct combined texture-sampler ( temp sampler2D) +0:98 'g_tTex2df4' ( uniform texture2D) +0:98 'g_sSamp' (layout( binding=0) uniform sampler) +0:98 c2: direct index for structure ( uniform 2-component vector of float) +0:98 '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:98 Constant: +0:98 1 (const uint) +0:98 Construct ivec2 ( temp 4-element array of 2-component vector of int) +0:98 o2: direct index for structure ( uniform 2-component vector of int) +0:98 '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:98 Constant: +0:98 5 (const uint) +0:98 o2: direct index for structure ( uniform 2-component vector of int) +0:98 '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:98 Constant: +0:98 5 (const uint) +0:98 o2: direct index for structure ( uniform 2-component vector of int) +0:98 '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:98 Constant: +0:98 5 (const uint) +0:98 o2: direct index for structure ( uniform 2-component vector of int) +0:98 '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:98 Constant: +0:98 5 (const uint) +0:98 Constant: +0:98 3 (const int) +0:99 Sequence +0:99 move second child to first child ( temp 4-component vector of int) +0:99 'txval314' ( temp 4-component vector of int) +0:99 textureGatherOffsets ( temp 4-component vector of int) +0:99 Construct combined texture-sampler ( temp isampler2D) +0:99 'g_tTex2di4' ( uniform itexture2D) +0:99 'g_sSamp' (layout( binding=0) uniform sampler) +0:99 c2: direct index for structure ( uniform 2-component vector of float) +0:99 '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:99 Constant: +0:99 1 (const uint) +0:99 Construct ivec2 ( temp 4-element array of 2-component vector of int) +0:99 o2: direct index for structure ( uniform 2-component vector of int) +0:99 '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:99 Constant: +0:99 5 (const uint) +0:99 o2: direct index for structure ( uniform 2-component vector of int) +0:99 '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:99 Constant: +0:99 5 (const uint) +0:99 o2: direct index for structure ( uniform 2-component vector of int) +0:99 '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:99 Constant: +0:99 5 (const uint) +0:99 o2: direct index for structure ( uniform 2-component vector of int) +0:99 '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:99 Constant: +0:99 5 (const uint) +0:99 Constant: +0:99 3 (const int) +0:100 Sequence +0:100 move second child to first child ( temp 4-component vector of uint) +0:100 'txval324' ( temp 4-component vector of uint) +0:100 textureGatherOffsets ( temp 4-component vector of uint) +0:100 Construct combined texture-sampler ( temp usampler2D) +0:100 'g_tTex2du4' ( uniform utexture2D) +0:100 'g_sSamp' (layout( binding=0) uniform sampler) +0:100 c2: direct index for structure ( uniform 2-component vector of float) +0:100 '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:100 Constant: +0:100 1 (const uint) +0:100 Construct ivec2 ( temp 4-element array of 2-component vector of int) +0:100 o2: direct index for structure ( uniform 2-component vector of int) +0:100 '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:100 Constant: +0:100 5 (const uint) +0:100 o2: direct index for structure ( uniform 2-component vector of int) +0:100 '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:100 Constant: +0:100 5 (const uint) +0:100 o2: direct index for structure ( uniform 2-component vector of int) +0:100 '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:100 Constant: +0:100 5 (const uint) +0:100 o2: direct index for structure ( uniform 2-component vector of int) +0:100 '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:100 Constant: +0:100 5 (const uint) +0:100 Constant: +0:100 3 (const int) +0:112 move second child to first child ( temp 4-component vector of float) +0:112 Color: direct index for structure ( temp 4-component vector of float) +0:112 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:112 Constant: +0:112 0 (const int) +0:112 Constant: +0:112 1.000000 +0:112 1.000000 +0:112 1.000000 +0:112 1.000000 +0:113 move second child to first child ( temp float) +0:113 Depth: direct index for structure ( temp float) +0:113 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:113 Constant: +0:113 1 (const int) +0:113 Constant: +0:113 1.000000 +0:115 Branch: Return with expression +0:115 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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 structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:39 1 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_sSamp2d' ( uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1D) +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_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:? '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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 399 + + Capability Shader + Capability ImageGatherExtended + Capability Sampled1D + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 363 367 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + MemberName 8(PS_OUTPUT) 1 "Depth" + Name 10 "@main(" + Name 13 "txval001" + Name 16 "g_tTex2df4" + Name 20 "g_sSamp" + Name 30 "$Global" + MemberName 30($Global) 0 "c1" + MemberName 30($Global) 1 "c2" + MemberName 30($Global) 2 "c3" + MemberName 30($Global) 3 "c4" + MemberName 30($Global) 4 "o1" + MemberName 30($Global) 5 "o2" + MemberName 30($Global) 6 "o3" + MemberName 30($Global) 7 "o4" + Name 32 "" + Name 44 "txval011" + Name 47 "g_tTex2di4" + Name 60 "txval021" + Name 63 "g_tTex2du4" + Name 73 "txval004" + Name 91 "txval014" + Name 107 "txval024" + Name 123 "txval101" + Name 132 "txval111" + Name 141 "txval121" + Name 150 "txval104" + Name 166 "txval114" + Name 182 "txval124" + Name 198 "txval201" + Name 208 "txval211" + Name 217 "txval221" + Name 226 "txval204" + Name 242 "txval214" + Name 258 "txval224" + Name 274 "txval301" + Name 284 "txval311" + Name 293 "txval321" + Name 302 "txval304" + Name 318 "txval314" + Name 334 "txval324" + Name 351 "psout" + Name 360 "flattenTemp" + Name 363 "Color" + Name 367 "Depth" + Name 370 "g_sSamp2d" + Name 373 "g_tTex1df4a" + Name 374 "g_tTex1df4" + Name 377 "g_tTex1di4" + Name 380 "g_tTex1du4" + Name 383 "g_tTex3df4" + Name 386 "g_tTex3di4" + Name 389 "g_tTex3du4" + Name 392 "g_tTexcdf4" + Name 395 "g_tTexcdi4" + Name 398 "g_tTexcdu4" + Decorate 16(g_tTex2df4) DescriptorSet 0 + Decorate 20(g_sSamp) DescriptorSet 0 + Decorate 20(g_sSamp) Binding 0 + MemberDecorate 30($Global) 0 Offset 0 + MemberDecorate 30($Global) 1 Offset 8 + MemberDecorate 30($Global) 2 Offset 16 + MemberDecorate 30($Global) 3 Offset 32 + MemberDecorate 30($Global) 4 Offset 48 + MemberDecorate 30($Global) 5 Offset 56 + MemberDecorate 30($Global) 6 Offset 64 + MemberDecorate 30($Global) 7 Offset 80 + Decorate 30($Global) Block + 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 370(g_sSamp2d) DescriptorSet 0 + Decorate 373(g_tTex1df4a) DescriptorSet 0 + Decorate 373(g_tTex1df4a) Binding 1 + Decorate 374(g_tTex1df4) DescriptorSet 0 + Decorate 374(g_tTex1df4) Binding 0 + Decorate 377(g_tTex1di4) DescriptorSet 0 + Decorate 380(g_tTex1du4) DescriptorSet 0 + Decorate 383(g_tTex3df4) DescriptorSet 0 + Decorate 386(g_tTex3di4) DescriptorSet 0 + Decorate 389(g_tTex3du4) DescriptorSet 0 + Decorate 392(g_tTexcdf4) DescriptorSet 0 + Decorate 395(g_tTexcdi4) DescriptorSet 0 + Decorate 398(g_tTexcdu4) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 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 + 15: TypePointer UniformConstant 14 + 16(g_tTex2df4): 15(ptr) Variable UniformConstant + 18: TypeSampler + 19: TypePointer UniformConstant 18 + 20(g_sSamp): 19(ptr) Variable UniformConstant + 22: TypeSampledImage 14 + 24: TypeVector 6(float) 2 + 25: TypeVector 6(float) 3 + 26: TypeInt 32 1 + 27: TypeVector 26(int) 2 + 28: TypeVector 26(int) 3 + 29: TypeVector 26(int) 4 + 30($Global): TypeStruct 6(float) 24(fvec2) 25(fvec3) 7(fvec4) 26(int) 27(ivec2) 28(ivec3) 29(ivec4) + 31: TypePointer Uniform 30($Global) + 32: 31(ptr) Variable Uniform + 33: 26(int) Constant 1 + 34: TypePointer Uniform 24(fvec2) + 37: 26(int) Constant 5 + 38: TypePointer Uniform 27(ivec2) + 41: 26(int) Constant 0 + 43: TypePointer Function 29(ivec4) + 45: TypeImage 26(int) 2D sampled format:Unknown + 46: TypePointer UniformConstant 45 + 47(g_tTex2di4): 46(ptr) Variable UniformConstant + 50: TypeSampledImage 45 + 57: TypeInt 32 0 + 58: TypeVector 57(int) 4 + 59: TypePointer Function 58(ivec4) + 61: TypeImage 57(int) 2D sampled format:Unknown + 62: TypePointer UniformConstant 61 + 63(g_tTex2du4): 62(ptr) Variable UniformConstant + 66: TypeSampledImage 61 + 87: 57(int) Constant 4 + 88: TypeArray 27(ivec2) 87 + 206: 26(int) Constant 2 + 282: 26(int) Constant 3 + 350: TypePointer Function 8(PS_OUTPUT) + 352: 6(float) Constant 1065353216 + 353: 7(fvec4) ConstantComposite 352 352 352 352 + 355: TypePointer Function 6(float) + 362: TypePointer Output 7(fvec4) + 363(Color): 362(ptr) Variable Output + 366: TypePointer Output 6(float) + 367(Depth): 366(ptr) Variable Output + 370(g_sSamp2d): 19(ptr) Variable UniformConstant + 371: TypeImage 6(float) 1D sampled format:Unknown + 372: TypePointer UniformConstant 371 +373(g_tTex1df4a): 372(ptr) Variable UniformConstant + 374(g_tTex1df4): 372(ptr) Variable UniformConstant + 375: TypeImage 26(int) 1D sampled format:Unknown + 376: TypePointer UniformConstant 375 + 377(g_tTex1di4): 376(ptr) Variable UniformConstant + 378: TypeImage 57(int) 1D sampled format:Unknown + 379: TypePointer UniformConstant 378 + 380(g_tTex1du4): 379(ptr) Variable UniformConstant + 381: TypeImage 6(float) 3D sampled format:Unknown + 382: TypePointer UniformConstant 381 + 383(g_tTex3df4): 382(ptr) Variable UniformConstant + 384: TypeImage 26(int) 3D sampled format:Unknown + 385: TypePointer UniformConstant 384 + 386(g_tTex3di4): 385(ptr) Variable UniformConstant + 387: TypeImage 57(int) 3D sampled format:Unknown + 388: TypePointer UniformConstant 387 + 389(g_tTex3du4): 388(ptr) Variable UniformConstant + 390: TypeImage 6(float) Cube sampled format:Unknown + 391: TypePointer UniformConstant 390 + 392(g_tTexcdf4): 391(ptr) Variable UniformConstant + 393: TypeImage 26(int) Cube sampled format:Unknown + 394: TypePointer UniformConstant 393 + 395(g_tTexcdi4): 394(ptr) Variable UniformConstant + 396: TypeImage 57(int) Cube sampled format:Unknown + 397: TypePointer UniformConstant 396 + 398(g_tTexcdu4): 397(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label +360(flattenTemp): 350(ptr) Variable Function + 361:8(PS_OUTPUT) FunctionCall 10(@main() + Store 360(flattenTemp) 361 + 364: 12(ptr) AccessChain 360(flattenTemp) 41 + 365: 7(fvec4) Load 364 + Store 363(Color) 365 + 368: 355(ptr) AccessChain 360(flattenTemp) 33 + 369: 6(float) Load 368 + Store 367(Depth) 369 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 13(txval001): 12(ptr) Variable Function + 44(txval011): 43(ptr) Variable Function + 60(txval021): 59(ptr) Variable Function + 73(txval004): 12(ptr) Variable Function + 91(txval014): 43(ptr) Variable Function + 107(txval024): 59(ptr) Variable Function + 123(txval101): 12(ptr) Variable Function + 132(txval111): 43(ptr) Variable Function + 141(txval121): 59(ptr) Variable Function + 150(txval104): 12(ptr) Variable Function + 166(txval114): 43(ptr) Variable Function + 182(txval124): 59(ptr) Variable Function + 198(txval201): 12(ptr) Variable Function + 208(txval211): 43(ptr) Variable Function + 217(txval221): 59(ptr) Variable Function + 226(txval204): 12(ptr) Variable Function + 242(txval214): 43(ptr) Variable Function + 258(txval224): 59(ptr) Variable Function + 274(txval301): 12(ptr) Variable Function + 284(txval311): 43(ptr) Variable Function + 293(txval321): 59(ptr) Variable Function + 302(txval304): 12(ptr) Variable Function + 318(txval314): 43(ptr) Variable Function + 334(txval324): 59(ptr) Variable Function + 351(psout): 350(ptr) Variable Function + 17: 14 Load 16(g_tTex2df4) + 21: 18 Load 20(g_sSamp) + 23: 22 SampledImage 17 21 + 35: 34(ptr) AccessChain 32 33 + 36: 24(fvec2) Load 35 + 39: 38(ptr) AccessChain 32 37 + 40: 27(ivec2) Load 39 + 42: 7(fvec4) ImageGather 23 36 41 Offset 40 + Store 13(txval001) 42 + 48: 45 Load 47(g_tTex2di4) + 49: 18 Load 20(g_sSamp) + 51: 50 SampledImage 48 49 + 52: 34(ptr) AccessChain 32 33 + 53: 24(fvec2) Load 52 + 54: 38(ptr) AccessChain 32 37 + 55: 27(ivec2) Load 54 + 56: 29(ivec4) ImageGather 51 53 41 Offset 55 + Store 44(txval011) 56 + 64: 61 Load 63(g_tTex2du4) + 65: 18 Load 20(g_sSamp) + 67: 66 SampledImage 64 65 + 68: 34(ptr) AccessChain 32 33 + 69: 24(fvec2) Load 68 + 70: 38(ptr) AccessChain 32 37 + 71: 27(ivec2) Load 70 + 72: 58(ivec4) ImageGather 67 69 41 Offset 71 + Store 60(txval021) 72 + 74: 14 Load 16(g_tTex2df4) + 75: 18 Load 20(g_sSamp) + 76: 22 SampledImage 74 75 + 77: 34(ptr) AccessChain 32 33 + 78: 24(fvec2) Load 77 + 79: 38(ptr) AccessChain 32 37 + 80: 27(ivec2) Load 79 + 81: 38(ptr) AccessChain 32 37 + 82: 27(ivec2) Load 81 + 83: 38(ptr) AccessChain 32 37 + 84: 27(ivec2) Load 83 + 85: 38(ptr) AccessChain 32 37 + 86: 27(ivec2) Load 85 + 89: 88 CompositeConstruct 80 82 84 86 + 90: 7(fvec4) ImageGather 76 78 41 ConstOffsets 89 + Store 73(txval004) 90 + 92: 45 Load 47(g_tTex2di4) + 93: 18 Load 20(g_sSamp) + 94: 50 SampledImage 92 93 + 95: 34(ptr) AccessChain 32 33 + 96: 24(fvec2) Load 95 + 97: 38(ptr) AccessChain 32 37 + 98: 27(ivec2) Load 97 + 99: 38(ptr) AccessChain 32 37 + 100: 27(ivec2) Load 99 + 101: 38(ptr) AccessChain 32 37 + 102: 27(ivec2) Load 101 + 103: 38(ptr) AccessChain 32 37 + 104: 27(ivec2) Load 103 + 105: 88 CompositeConstruct 98 100 102 104 + 106: 29(ivec4) ImageGather 94 96 41 ConstOffsets 105 + Store 91(txval014) 106 + 108: 61 Load 63(g_tTex2du4) + 109: 18 Load 20(g_sSamp) + 110: 66 SampledImage 108 109 + 111: 34(ptr) AccessChain 32 33 + 112: 24(fvec2) Load 111 + 113: 38(ptr) AccessChain 32 37 + 114: 27(ivec2) Load 113 + 115: 38(ptr) AccessChain 32 37 + 116: 27(ivec2) Load 115 + 117: 38(ptr) AccessChain 32 37 + 118: 27(ivec2) Load 117 + 119: 38(ptr) AccessChain 32 37 + 120: 27(ivec2) Load 119 + 121: 88 CompositeConstruct 114 116 118 120 + 122: 58(ivec4) ImageGather 110 112 41 ConstOffsets 121 + Store 107(txval024) 122 + 124: 14 Load 16(g_tTex2df4) + 125: 18 Load 20(g_sSamp) + 126: 22 SampledImage 124 125 + 127: 34(ptr) AccessChain 32 33 + 128: 24(fvec2) Load 127 + 129: 38(ptr) AccessChain 32 37 + 130: 27(ivec2) Load 129 + 131: 7(fvec4) ImageGather 126 128 33 Offset 130 + Store 123(txval101) 131 + 133: 45 Load 47(g_tTex2di4) + 134: 18 Load 20(g_sSamp) + 135: 50 SampledImage 133 134 + 136: 34(ptr) AccessChain 32 33 + 137: 24(fvec2) Load 136 + 138: 38(ptr) AccessChain 32 37 + 139: 27(ivec2) Load 138 + 140: 29(ivec4) ImageGather 135 137 33 Offset 139 + Store 132(txval111) 140 + 142: 61 Load 63(g_tTex2du4) + 143: 18 Load 20(g_sSamp) + 144: 66 SampledImage 142 143 + 145: 34(ptr) AccessChain 32 33 + 146: 24(fvec2) Load 145 + 147: 38(ptr) AccessChain 32 37 + 148: 27(ivec2) Load 147 + 149: 58(ivec4) ImageGather 144 146 33 Offset 148 + Store 141(txval121) 149 + 151: 14 Load 16(g_tTex2df4) + 152: 18 Load 20(g_sSamp) + 153: 22 SampledImage 151 152 + 154: 34(ptr) AccessChain 32 33 + 155: 24(fvec2) Load 154 + 156: 38(ptr) AccessChain 32 37 + 157: 27(ivec2) Load 156 + 158: 38(ptr) AccessChain 32 37 + 159: 27(ivec2) Load 158 + 160: 38(ptr) AccessChain 32 37 + 161: 27(ivec2) Load 160 + 162: 38(ptr) AccessChain 32 37 + 163: 27(ivec2) Load 162 + 164: 88 CompositeConstruct 157 159 161 163 + 165: 7(fvec4) ImageGather 153 155 33 ConstOffsets 164 + Store 150(txval104) 165 + 167: 45 Load 47(g_tTex2di4) + 168: 18 Load 20(g_sSamp) + 169: 50 SampledImage 167 168 + 170: 34(ptr) AccessChain 32 33 + 171: 24(fvec2) Load 170 + 172: 38(ptr) AccessChain 32 37 + 173: 27(ivec2) Load 172 + 174: 38(ptr) AccessChain 32 37 + 175: 27(ivec2) Load 174 + 176: 38(ptr) AccessChain 32 37 + 177: 27(ivec2) Load 176 + 178: 38(ptr) AccessChain 32 37 + 179: 27(ivec2) Load 178 + 180: 88 CompositeConstruct 173 175 177 179 + 181: 29(ivec4) ImageGather 169 171 33 ConstOffsets 180 + Store 166(txval114) 181 + 183: 61 Load 63(g_tTex2du4) + 184: 18 Load 20(g_sSamp) + 185: 66 SampledImage 183 184 + 186: 34(ptr) AccessChain 32 33 + 187: 24(fvec2) Load 186 + 188: 38(ptr) AccessChain 32 37 + 189: 27(ivec2) Load 188 + 190: 38(ptr) AccessChain 32 37 + 191: 27(ivec2) Load 190 + 192: 38(ptr) AccessChain 32 37 + 193: 27(ivec2) Load 192 + 194: 38(ptr) AccessChain 32 37 + 195: 27(ivec2) Load 194 + 196: 88 CompositeConstruct 189 191 193 195 + 197: 58(ivec4) ImageGather 185 187 33 ConstOffsets 196 + Store 182(txval124) 197 + 199: 14 Load 16(g_tTex2df4) + 200: 18 Load 20(g_sSamp) + 201: 22 SampledImage 199 200 + 202: 34(ptr) AccessChain 32 33 + 203: 24(fvec2) Load 202 + 204: 38(ptr) AccessChain 32 37 + 205: 27(ivec2) Load 204 + 207: 7(fvec4) ImageGather 201 203 206 Offset 205 + Store 198(txval201) 207 + 209: 45 Load 47(g_tTex2di4) + 210: 18 Load 20(g_sSamp) + 211: 50 SampledImage 209 210 + 212: 34(ptr) AccessChain 32 33 + 213: 24(fvec2) Load 212 + 214: 38(ptr) AccessChain 32 37 + 215: 27(ivec2) Load 214 + 216: 29(ivec4) ImageGather 211 213 206 Offset 215 + Store 208(txval211) 216 + 218: 61 Load 63(g_tTex2du4) + 219: 18 Load 20(g_sSamp) + 220: 66 SampledImage 218 219 + 221: 34(ptr) AccessChain 32 33 + 222: 24(fvec2) Load 221 + 223: 38(ptr) AccessChain 32 37 + 224: 27(ivec2) Load 223 + 225: 58(ivec4) ImageGather 220 222 206 Offset 224 + Store 217(txval221) 225 + 227: 14 Load 16(g_tTex2df4) + 228: 18 Load 20(g_sSamp) + 229: 22 SampledImage 227 228 + 230: 34(ptr) AccessChain 32 33 + 231: 24(fvec2) Load 230 + 232: 38(ptr) AccessChain 32 37 + 233: 27(ivec2) Load 232 + 234: 38(ptr) AccessChain 32 37 + 235: 27(ivec2) Load 234 + 236: 38(ptr) AccessChain 32 37 + 237: 27(ivec2) Load 236 + 238: 38(ptr) AccessChain 32 37 + 239: 27(ivec2) Load 238 + 240: 88 CompositeConstruct 233 235 237 239 + 241: 7(fvec4) ImageGather 229 231 206 ConstOffsets 240 + Store 226(txval204) 241 + 243: 45 Load 47(g_tTex2di4) + 244: 18 Load 20(g_sSamp) + 245: 50 SampledImage 243 244 + 246: 34(ptr) AccessChain 32 33 + 247: 24(fvec2) Load 246 + 248: 38(ptr) AccessChain 32 37 + 249: 27(ivec2) Load 248 + 250: 38(ptr) AccessChain 32 37 + 251: 27(ivec2) Load 250 + 252: 38(ptr) AccessChain 32 37 + 253: 27(ivec2) Load 252 + 254: 38(ptr) AccessChain 32 37 + 255: 27(ivec2) Load 254 + 256: 88 CompositeConstruct 249 251 253 255 + 257: 29(ivec4) ImageGather 245 247 206 ConstOffsets 256 + Store 242(txval214) 257 + 259: 61 Load 63(g_tTex2du4) + 260: 18 Load 20(g_sSamp) + 261: 66 SampledImage 259 260 + 262: 34(ptr) AccessChain 32 33 + 263: 24(fvec2) Load 262 + 264: 38(ptr) AccessChain 32 37 + 265: 27(ivec2) Load 264 + 266: 38(ptr) AccessChain 32 37 + 267: 27(ivec2) Load 266 + 268: 38(ptr) AccessChain 32 37 + 269: 27(ivec2) Load 268 + 270: 38(ptr) AccessChain 32 37 + 271: 27(ivec2) Load 270 + 272: 88 CompositeConstruct 265 267 269 271 + 273: 58(ivec4) ImageGather 261 263 206 ConstOffsets 272 + Store 258(txval224) 273 + 275: 14 Load 16(g_tTex2df4) + 276: 18 Load 20(g_sSamp) + 277: 22 SampledImage 275 276 + 278: 34(ptr) AccessChain 32 33 + 279: 24(fvec2) Load 278 + 280: 38(ptr) AccessChain 32 37 + 281: 27(ivec2) Load 280 + 283: 7(fvec4) ImageGather 277 279 282 Offset 281 + Store 274(txval301) 283 + 285: 45 Load 47(g_tTex2di4) + 286: 18 Load 20(g_sSamp) + 287: 50 SampledImage 285 286 + 288: 34(ptr) AccessChain 32 33 + 289: 24(fvec2) Load 288 + 290: 38(ptr) AccessChain 32 37 + 291: 27(ivec2) Load 290 + 292: 29(ivec4) ImageGather 287 289 282 Offset 291 + Store 284(txval311) 292 + 294: 61 Load 63(g_tTex2du4) + 295: 18 Load 20(g_sSamp) + 296: 66 SampledImage 294 295 + 297: 34(ptr) AccessChain 32 33 + 298: 24(fvec2) Load 297 + 299: 38(ptr) AccessChain 32 37 + 300: 27(ivec2) Load 299 + 301: 58(ivec4) ImageGather 296 298 282 Offset 300 + Store 293(txval321) 301 + 303: 14 Load 16(g_tTex2df4) + 304: 18 Load 20(g_sSamp) + 305: 22 SampledImage 303 304 + 306: 34(ptr) AccessChain 32 33 + 307: 24(fvec2) Load 306 + 308: 38(ptr) AccessChain 32 37 + 309: 27(ivec2) Load 308 + 310: 38(ptr) AccessChain 32 37 + 311: 27(ivec2) Load 310 + 312: 38(ptr) AccessChain 32 37 + 313: 27(ivec2) Load 312 + 314: 38(ptr) AccessChain 32 37 + 315: 27(ivec2) Load 314 + 316: 88 CompositeConstruct 309 311 313 315 + 317: 7(fvec4) ImageGather 305 307 282 ConstOffsets 316 + Store 302(txval304) 317 + 319: 45 Load 47(g_tTex2di4) + 320: 18 Load 20(g_sSamp) + 321: 50 SampledImage 319 320 + 322: 34(ptr) AccessChain 32 33 + 323: 24(fvec2) Load 322 + 324: 38(ptr) AccessChain 32 37 + 325: 27(ivec2) Load 324 + 326: 38(ptr) AccessChain 32 37 + 327: 27(ivec2) Load 326 + 328: 38(ptr) AccessChain 32 37 + 329: 27(ivec2) Load 328 + 330: 38(ptr) AccessChain 32 37 + 331: 27(ivec2) Load 330 + 332: 88 CompositeConstruct 325 327 329 331 + 333: 29(ivec4) ImageGather 321 323 282 ConstOffsets 332 + Store 318(txval314) 333 + 335: 61 Load 63(g_tTex2du4) + 336: 18 Load 20(g_sSamp) + 337: 66 SampledImage 335 336 + 338: 34(ptr) AccessChain 32 33 + 339: 24(fvec2) Load 338 + 340: 38(ptr) AccessChain 32 37 + 341: 27(ivec2) Load 340 + 342: 38(ptr) AccessChain 32 37 + 343: 27(ivec2) Load 342 + 344: 38(ptr) AccessChain 32 37 + 345: 27(ivec2) Load 344 + 346: 38(ptr) AccessChain 32 37 + 347: 27(ivec2) Load 346 + 348: 88 CompositeConstruct 341 343 345 347 + 349: 58(ivec4) ImageGather 337 339 282 ConstOffsets 348 + Store 334(txval324) 349 + 354: 12(ptr) AccessChain 351(psout) 41 + Store 354 353 + 356: 355(ptr) AccessChain 351(psout) 33 + Store 356 352 + 357:8(PS_OUTPUT) Load 351(psout) + ReturnValue 357 + FunctionEnd 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 new file mode 100644 index 0000000..86e0a99 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out @@ -0,0 +1,1762 @@ +hlsl.gatherRGBA.offsetarray.dx10.frag +Shader version: 450 +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}) +0:33 Function Parameters: +0:? Sequence +0:40 Sequence +0:40 move second child to first child ( temp 4-component vector of float) +0:40 'txval001' ( temp 4-component vector of float) +0:40 textureGatherOffset ( temp 4-component vector of float) +0:40 Construct combined texture-sampler ( temp sampler2DArray) +0:40 'g_tTex2df4a' ( uniform texture2DArray) +0:40 'g_sSamp' (layout( binding=0) uniform sampler) +0:40 c3: direct index for structure ( uniform 3-component vector of float) +0:40 '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:40 Constant: +0:40 2 (const uint) +0:40 o2: direct index for structure ( uniform 2-component vector of int) +0:40 '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:40 Constant: +0:40 5 (const uint) +0:40 Constant: +0:40 0 (const int) +0:41 Sequence +0:41 move second child to first child ( temp 4-component vector of int) +0:41 'txval011' ( temp 4-component vector of int) +0:41 textureGatherOffset ( temp 4-component vector of int) +0:41 Construct combined texture-sampler ( temp isampler2DArray) +0:41 'g_tTex2di4a' ( uniform itexture2DArray) +0:41 'g_sSamp' (layout( binding=0) uniform sampler) +0:41 c3: direct index for structure ( uniform 3-component vector of float) +0:41 '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:41 Constant: +0:41 2 (const uint) +0:41 o2: direct index for structure ( uniform 2-component vector of int) +0:41 '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:41 Constant: +0:41 5 (const uint) +0:41 Constant: +0:41 0 (const int) +0:42 Sequence +0:42 move second child to first child ( temp 4-component vector of uint) +0:42 'txval021' ( temp 4-component vector of uint) +0:42 textureGatherOffset ( temp 4-component vector of uint) +0:42 Construct combined texture-sampler ( temp usampler2DArray) +0:42 'g_tTex2du4a' ( uniform utexture2DArray) +0:42 'g_sSamp' (layout( binding=0) uniform sampler) +0:42 c3: direct index for structure ( uniform 3-component vector of float) +0:42 '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:42 Constant: +0:42 2 (const uint) +0:42 o2: direct index for structure ( uniform 2-component vector of int) +0:42 '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:42 Constant: +0:42 5 (const uint) +0:42 Constant: +0:42 0 (const int) +0:44 Sequence +0:44 move second child to first child ( temp 4-component vector of float) +0:44 'txval004' ( temp 4-component vector of float) +0:44 textureGatherOffsets ( temp 4-component vector of float) +0:44 Construct combined texture-sampler ( temp sampler2DArray) +0:44 'g_tTex2df4a' ( uniform texture2DArray) +0:44 'g_sSamp' (layout( binding=0) uniform sampler) +0:44 c3: direct index for structure ( uniform 3-component vector of float) +0:44 '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:44 Constant: +0:44 2 (const uint) +0:44 Construct ivec2 ( temp 4-element array of 2-component vector of int) +0:44 o2: direct index for structure ( uniform 2-component vector of int) +0:44 '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:44 Constant: +0:44 5 (const uint) +0:44 o2: direct index for structure ( uniform 2-component vector of int) +0:44 '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:44 Constant: +0:44 5 (const uint) +0:44 o2: direct index for structure ( uniform 2-component vector of int) +0:44 '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:44 Constant: +0:44 5 (const uint) +0:44 o2: direct index for structure ( uniform 2-component vector of int) +0:44 '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:44 Constant: +0:44 5 (const uint) +0:44 Constant: +0:44 0 (const int) +0:45 Sequence +0:45 move second child to first child ( temp 4-component vector of int) +0:45 'txval014' ( temp 4-component vector of int) +0:45 textureGatherOffsets ( temp 4-component vector of int) +0:45 Construct combined texture-sampler ( temp isampler2DArray) +0:45 'g_tTex2di4a' ( uniform itexture2DArray) +0:45 'g_sSamp' (layout( binding=0) uniform sampler) +0:45 c3: direct index for structure ( uniform 3-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, 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:45 Constant: +0:45 2 (const uint) +0:45 Construct ivec2 ( temp 4-element array of 2-component vector of int) +0:45 o2: direct index for structure ( uniform 2-component vector of int) +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, 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:45 Constant: +0:45 5 (const uint) +0:45 o2: direct index for structure ( uniform 2-component vector of int) +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, 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:45 Constant: +0:45 5 (const uint) +0:45 o2: direct index for structure ( uniform 2-component vector of int) +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, 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:45 Constant: +0:45 5 (const uint) +0:45 o2: direct index for structure ( uniform 2-component vector of int) +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, 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:45 Constant: +0:45 5 (const uint) +0:45 Constant: +0:45 0 (const int) +0:46 Sequence +0:46 move second child to first child ( temp 4-component vector of uint) +0:46 'txval024' ( temp 4-component vector of uint) +0:46 textureGatherOffsets ( temp 4-component vector of uint) +0:46 Construct combined texture-sampler ( temp usampler2DArray) +0:46 'g_tTex2du4a' ( uniform utexture2DArray) +0:46 'g_sSamp' (layout( binding=0) uniform sampler) +0:46 c3: direct index for structure ( uniform 3-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, 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:46 Constant: +0:46 2 (const uint) +0:46 Construct ivec2 ( temp 4-element array of 2-component vector of int) +0:46 o2: direct index for structure ( uniform 2-component vector of int) +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, 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:46 Constant: +0:46 5 (const uint) +0:46 o2: direct index for structure ( uniform 2-component vector of int) +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, 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:46 Constant: +0:46 5 (const uint) +0:46 o2: direct index for structure ( uniform 2-component vector of int) +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, 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:46 Constant: +0:46 5 (const uint) +0:46 o2: direct index for structure ( uniform 2-component vector of int) +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, 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:46 Constant: +0:46 5 (const uint) +0:46 Constant: +0:46 0 (const int) +0:56 Sequence +0:56 move second child to first child ( temp 4-component vector of float) +0:56 'txval101' ( temp 4-component vector of float) +0:56 textureGatherOffset ( temp 4-component vector of float) +0:56 Construct combined texture-sampler ( temp sampler2DArray) +0:56 'g_tTex2df4a' ( uniform texture2DArray) +0:56 'g_sSamp' (layout( binding=0) uniform sampler) +0:56 c3: direct index for structure ( uniform 3-component vector of float) +0:56 '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:56 Constant: +0:56 2 (const uint) +0:56 o2: direct index for structure ( uniform 2-component vector of int) +0:56 '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:56 Constant: +0:56 5 (const uint) +0:56 Constant: +0:56 1 (const int) +0:57 Sequence +0:57 move second child to first child ( temp 4-component vector of int) +0:57 'txval111' ( temp 4-component vector of int) +0:57 textureGatherOffset ( temp 4-component vector of int) +0:57 Construct combined texture-sampler ( temp isampler2DArray) +0:57 'g_tTex2di4a' ( uniform itexture2DArray) +0:57 'g_sSamp' (layout( binding=0) uniform sampler) +0:57 c3: direct index for structure ( uniform 3-component vector of float) +0:57 '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:57 Constant: +0:57 2 (const uint) +0:57 o2: direct index for structure ( uniform 2-component vector of int) +0:57 '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:57 Constant: +0:57 5 (const uint) +0:57 Constant: +0:57 1 (const int) +0:58 Sequence +0:58 move second child to first child ( temp 4-component vector of uint) +0:58 'txval121' ( temp 4-component vector of uint) +0:58 textureGatherOffset ( temp 4-component vector of uint) +0:58 Construct combined texture-sampler ( temp usampler2DArray) +0:58 'g_tTex2du4a' ( uniform utexture2DArray) +0:58 'g_sSamp' (layout( binding=0) uniform sampler) +0:58 c3: direct index for structure ( uniform 3-component vector of float) +0:58 '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:58 Constant: +0:58 2 (const uint) +0:58 o2: direct index for structure ( uniform 2-component vector of int) +0:58 '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:58 Constant: +0:58 5 (const uint) +0:58 Constant: +0:58 1 (const int) +0:60 Sequence +0:60 move second child to first child ( temp 4-component vector of float) +0:60 'txval104' ( temp 4-component vector of float) +0:60 textureGatherOffsets ( temp 4-component vector of float) +0:60 Construct combined texture-sampler ( temp sampler2DArray) +0:60 'g_tTex2df4a' ( uniform texture2DArray) +0:60 'g_sSamp' (layout( binding=0) uniform sampler) +0:60 c3: direct index for structure ( uniform 3-component vector of float) +0:60 '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:60 Constant: +0:60 2 (const uint) +0:60 Construct ivec2 ( temp 4-element array of 2-component vector of int) +0:60 o2: direct index for structure ( uniform 2-component vector of int) +0:60 '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:60 Constant: +0:60 5 (const uint) +0:60 o2: direct index for structure ( uniform 2-component vector of int) +0:60 '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:60 Constant: +0:60 5 (const uint) +0:60 o2: direct index for structure ( uniform 2-component vector of int) +0:60 '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:60 Constant: +0:60 5 (const uint) +0:60 o2: direct index for structure ( uniform 2-component vector of int) +0:60 '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:60 Constant: +0:60 5 (const uint) +0:60 Constant: +0:60 1 (const int) +0:61 Sequence +0:61 move second child to first child ( temp 4-component vector of int) +0:61 'txval114' ( temp 4-component vector of int) +0:61 textureGatherOffsets ( temp 4-component vector of int) +0:61 Construct combined texture-sampler ( temp isampler2DArray) +0:61 'g_tTex2di4a' ( uniform itexture2DArray) +0:61 'g_sSamp' (layout( binding=0) uniform sampler) +0:61 c3: direct index for structure ( uniform 3-component vector of float) +0:61 '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:61 Constant: +0:61 2 (const uint) +0:61 Construct ivec2 ( temp 4-element array of 2-component vector of int) +0:61 o2: direct index for structure ( uniform 2-component vector of int) +0:61 '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:61 Constant: +0:61 5 (const uint) +0:61 o2: direct index for structure ( uniform 2-component vector of int) +0:61 '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:61 Constant: +0:61 5 (const uint) +0:61 o2: direct index for structure ( uniform 2-component vector of int) +0:61 '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:61 Constant: +0:61 5 (const uint) +0:61 o2: direct index for structure ( uniform 2-component vector of int) +0:61 '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:61 Constant: +0:61 5 (const uint) +0:61 Constant: +0:61 1 (const int) +0:62 Sequence +0:62 move second child to first child ( temp 4-component vector of uint) +0:62 'txval124' ( temp 4-component vector of uint) +0:62 textureGatherOffsets ( temp 4-component vector of uint) +0:62 Construct combined texture-sampler ( temp usampler2DArray) +0:62 'g_tTex2du4a' ( uniform utexture2DArray) +0:62 'g_sSamp' (layout( binding=0) uniform sampler) +0:62 c3: direct index for structure ( uniform 3-component vector of float) +0:62 '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:62 Constant: +0:62 2 (const uint) +0:62 Construct ivec2 ( temp 4-element array of 2-component vector of int) +0:62 o2: direct index for structure ( uniform 2-component vector of int) +0:62 '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:62 Constant: +0:62 5 (const uint) +0:62 o2: direct index for structure ( uniform 2-component vector of int) +0:62 '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:62 Constant: +0:62 5 (const uint) +0:62 o2: direct index for structure ( uniform 2-component vector of int) +0:62 '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:62 Constant: +0:62 5 (const uint) +0:62 o2: direct index for structure ( uniform 2-component vector of int) +0:62 '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:62 Constant: +0:62 5 (const uint) +0:62 Constant: +0:62 1 (const int) +0:72 Sequence +0:72 move second child to first child ( temp 4-component vector of float) +0:72 'txval201' ( temp 4-component vector of float) +0:72 textureGatherOffset ( temp 4-component vector of float) +0:72 Construct combined texture-sampler ( temp sampler2DArray) +0:72 'g_tTex2df4a' ( uniform texture2DArray) +0:72 'g_sSamp' (layout( binding=0) uniform sampler) +0:72 c3: direct index for structure ( uniform 3-component vector of float) +0:72 '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:72 Constant: +0:72 2 (const uint) +0:72 o2: direct index for structure ( uniform 2-component vector of int) +0:72 '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:72 Constant: +0:72 5 (const uint) +0:72 Constant: +0:72 2 (const int) +0:73 Sequence +0:73 move second child to first child ( temp 4-component vector of int) +0:73 'txval211' ( temp 4-component vector of int) +0:73 textureGatherOffset ( temp 4-component vector of int) +0:73 Construct combined texture-sampler ( temp isampler2DArray) +0:73 'g_tTex2di4a' ( uniform itexture2DArray) +0:73 'g_sSamp' (layout( binding=0) uniform sampler) +0:73 c3: direct index for structure ( uniform 3-component vector of float) +0:73 '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:73 Constant: +0:73 2 (const uint) +0:73 o2: direct index for structure ( uniform 2-component vector of int) +0:73 '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:73 Constant: +0:73 5 (const uint) +0:73 Constant: +0:73 2 (const int) +0:74 Sequence +0:74 move second child to first child ( temp 4-component vector of uint) +0:74 'txval221' ( temp 4-component vector of uint) +0:74 textureGatherOffset ( temp 4-component vector of uint) +0:74 Construct combined texture-sampler ( temp usampler2DArray) +0:74 'g_tTex2du4a' ( uniform utexture2DArray) +0:74 'g_sSamp' (layout( binding=0) uniform sampler) +0:74 c3: direct index for structure ( uniform 3-component vector of float) +0:74 '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:74 Constant: +0:74 2 (const uint) +0:74 o2: direct index for structure ( uniform 2-component vector of int) +0:74 '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:74 Constant: +0:74 5 (const uint) +0:74 Constant: +0:74 2 (const int) +0:76 Sequence +0:76 move second child to first child ( temp 4-component vector of float) +0:76 'txval204' ( temp 4-component vector of float) +0:76 textureGatherOffsets ( temp 4-component vector of float) +0:76 Construct combined texture-sampler ( temp sampler2DArray) +0:76 'g_tTex2df4a' ( uniform texture2DArray) +0:76 'g_sSamp' (layout( binding=0) uniform sampler) +0:76 c3: direct index for structure ( uniform 3-component vector of float) +0:76 '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:76 Constant: +0:76 2 (const uint) +0:76 Construct ivec2 ( temp 4-element array of 2-component vector of int) +0:76 o2: direct index for structure ( uniform 2-component vector of int) +0:76 '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:76 Constant: +0:76 5 (const uint) +0:76 o2: direct index for structure ( uniform 2-component vector of int) +0:76 '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:76 Constant: +0:76 5 (const uint) +0:76 o2: direct index for structure ( uniform 2-component vector of int) +0:76 '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:76 Constant: +0:76 5 (const uint) +0:76 o2: direct index for structure ( uniform 2-component vector of int) +0:76 '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:76 Constant: +0:76 5 (const uint) +0:76 Constant: +0:76 2 (const int) +0:77 Sequence +0:77 move second child to first child ( temp 4-component vector of int) +0:77 'txval214' ( temp 4-component vector of int) +0:77 textureGatherOffsets ( temp 4-component vector of int) +0:77 Construct combined texture-sampler ( temp isampler2DArray) +0:77 'g_tTex2di4a' ( uniform itexture2DArray) +0:77 'g_sSamp' (layout( binding=0) uniform sampler) +0:77 c3: direct index for structure ( uniform 3-component vector of float) +0:77 '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:77 Constant: +0:77 2 (const uint) +0:77 Construct ivec2 ( temp 4-element array of 2-component vector of int) +0:77 o2: direct index for structure ( uniform 2-component vector of int) +0:77 '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:77 Constant: +0:77 5 (const uint) +0:77 o2: direct index for structure ( uniform 2-component vector of int) +0:77 '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:77 Constant: +0:77 5 (const uint) +0:77 o2: direct index for structure ( uniform 2-component vector of int) +0:77 '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:77 Constant: +0:77 5 (const uint) +0:77 o2: direct index for structure ( uniform 2-component vector of int) +0:77 '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:77 Constant: +0:77 5 (const uint) +0:77 Constant: +0:77 2 (const int) +0:78 Sequence +0:78 move second child to first child ( temp 4-component vector of uint) +0:78 'txval224' ( temp 4-component vector of uint) +0:78 textureGatherOffsets ( temp 4-component vector of uint) +0:78 Construct combined texture-sampler ( temp usampler2DArray) +0:78 'g_tTex2du4a' ( uniform utexture2DArray) +0:78 'g_sSamp' (layout( binding=0) uniform sampler) +0:78 c3: direct index for structure ( uniform 3-component vector of float) +0:78 '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:78 Constant: +0:78 2 (const uint) +0:78 Construct ivec2 ( temp 4-element array of 2-component vector of int) +0:78 o2: direct index for structure ( uniform 2-component vector of int) +0:78 '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:78 Constant: +0:78 5 (const uint) +0:78 o2: direct index for structure ( uniform 2-component vector of int) +0:78 '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:78 Constant: +0:78 5 (const uint) +0:78 o2: direct index for structure ( uniform 2-component vector of int) +0:78 '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:78 Constant: +0:78 5 (const uint) +0:78 o2: direct index for structure ( uniform 2-component vector of int) +0:78 '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:78 Constant: +0:78 5 (const uint) +0:78 Constant: +0:78 2 (const int) +0:88 Sequence +0:88 move second child to first child ( temp 4-component vector of float) +0:88 'txval301' ( temp 4-component vector of float) +0:88 textureGatherOffset ( temp 4-component vector of float) +0:88 Construct combined texture-sampler ( temp sampler2DArray) +0:88 'g_tTex2df4a' ( uniform texture2DArray) +0:88 'g_sSamp' (layout( binding=0) uniform sampler) +0:88 c3: direct index for structure ( uniform 3-component vector of float) +0:88 '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:88 Constant: +0:88 2 (const uint) +0:88 o2: direct index for structure ( uniform 2-component vector of int) +0:88 '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:88 Constant: +0:88 5 (const uint) +0:88 Constant: +0:88 3 (const int) +0:89 Sequence +0:89 move second child to first child ( temp 4-component vector of int) +0:89 'txval311' ( temp 4-component vector of int) +0:89 textureGatherOffset ( temp 4-component vector of int) +0:89 Construct combined texture-sampler ( temp isampler2DArray) +0:89 'g_tTex2di4a' ( uniform itexture2DArray) +0:89 'g_sSamp' (layout( binding=0) uniform sampler) +0:89 c3: direct index for structure ( uniform 3-component vector of float) +0:89 '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:89 Constant: +0:89 2 (const uint) +0:89 o2: direct index for structure ( uniform 2-component vector of int) +0:89 '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:89 Constant: +0:89 5 (const uint) +0:89 Constant: +0:89 3 (const int) +0:90 Sequence +0:90 move second child to first child ( temp 4-component vector of uint) +0:90 'txval321' ( temp 4-component vector of uint) +0:90 textureGatherOffset ( temp 4-component vector of uint) +0:90 Construct combined texture-sampler ( temp usampler2DArray) +0:90 'g_tTex2du4a' ( uniform utexture2DArray) +0:90 'g_sSamp' (layout( binding=0) uniform sampler) +0:90 c3: direct index for structure ( uniform 3-component vector of float) +0:90 '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:90 Constant: +0:90 2 (const uint) +0:90 o2: direct index for structure ( uniform 2-component vector of int) +0:90 '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:90 Constant: +0:90 5 (const uint) +0:90 Constant: +0:90 3 (const int) +0:92 Sequence +0:92 move second child to first child ( temp 4-component vector of float) +0:92 'txval304' ( temp 4-component vector of float) +0:92 textureGatherOffsets ( temp 4-component vector of float) +0:92 Construct combined texture-sampler ( temp sampler2DArray) +0:92 'g_tTex2df4a' ( uniform texture2DArray) +0:92 'g_sSamp' (layout( binding=0) uniform sampler) +0:92 c3: direct index for structure ( uniform 3-component vector of float) +0:92 '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:92 Constant: +0:92 2 (const uint) +0:92 Construct ivec2 ( temp 4-element array of 2-component vector of int) +0:92 o2: direct index for structure ( uniform 2-component vector of int) +0:92 '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:92 Constant: +0:92 5 (const uint) +0:92 o2: direct index for structure ( uniform 2-component vector of int) +0:92 '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:92 Constant: +0:92 5 (const uint) +0:92 o2: direct index for structure ( uniform 2-component vector of int) +0:92 '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:92 Constant: +0:92 5 (const uint) +0:92 o2: direct index for structure ( uniform 2-component vector of int) +0:92 '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:92 Constant: +0:92 5 (const uint) +0:92 Constant: +0:92 3 (const int) +0:93 Sequence +0:93 move second child to first child ( temp 4-component vector of int) +0:93 'txval314' ( temp 4-component vector of int) +0:93 textureGatherOffsets ( temp 4-component vector of int) +0:93 Construct combined texture-sampler ( temp isampler2DArray) +0:93 'g_tTex2di4a' ( uniform itexture2DArray) +0:93 'g_sSamp' (layout( binding=0) uniform sampler) +0:93 c3: direct index for structure ( uniform 3-component vector of float) +0:93 '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:93 Constant: +0:93 2 (const uint) +0:93 Construct ivec2 ( temp 4-element array of 2-component vector of int) +0:93 o2: direct index for structure ( uniform 2-component vector of int) +0:93 '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:93 Constant: +0:93 5 (const uint) +0:93 o2: direct index for structure ( uniform 2-component vector of int) +0:93 '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:93 Constant: +0:93 5 (const uint) +0:93 o2: direct index for structure ( uniform 2-component vector of int) +0:93 '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:93 Constant: +0:93 5 (const uint) +0:93 o2: direct index for structure ( uniform 2-component vector of int) +0:93 '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:93 Constant: +0:93 5 (const uint) +0:93 Constant: +0:93 3 (const int) +0:94 Sequence +0:94 move second child to first child ( temp 4-component vector of uint) +0:94 'txval324' ( temp 4-component vector of uint) +0:94 textureGatherOffsets ( temp 4-component vector of uint) +0:94 Construct combined texture-sampler ( temp usampler2DArray) +0:94 'g_tTex2du4a' ( uniform utexture2DArray) +0:94 'g_sSamp' (layout( binding=0) uniform sampler) +0:94 c3: direct index for structure ( uniform 3-component vector of float) +0:94 '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:94 Constant: +0:94 2 (const uint) +0:94 Construct ivec2 ( temp 4-element array of 2-component vector of int) +0:94 o2: direct index for structure ( uniform 2-component vector of int) +0:94 '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:94 Constant: +0:94 5 (const uint) +0:94 o2: direct index for structure ( uniform 2-component vector of int) +0:94 '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:94 Constant: +0:94 5 (const uint) +0:94 o2: direct index for structure ( uniform 2-component vector of int) +0:94 '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:94 Constant: +0:94 5 (const uint) +0:94 o2: direct index for structure ( uniform 2-component vector of int) +0:94 '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:94 Constant: +0:94 5 (const uint) +0:94 Constant: +0:94 3 (const int) +0:106 move second child to first child ( temp 4-component vector of float) +0:106 Color: direct index for structure ( temp 4-component vector of float) +0:106 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:106 Constant: +0:106 0 (const int) +0:106 Constant: +0:106 1.000000 +0:106 1.000000 +0:106 1.000000 +0:106 1.000000 +0:107 move second child to first child ( temp float) +0:107 Depth: direct index for structure ( temp float) +0:107 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:107 Constant: +0:107 1 (const int) +0:107 Constant: +0:107 1.000000 +0:109 Branch: Return with expression +0:109 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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 structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:33 1 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_sSamp2d' ( uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=0) 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:? '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) + + +Linked fragment stage: + + +Shader version: 450 +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}) +0:33 Function Parameters: +0:? Sequence +0:40 Sequence +0:40 move second child to first child ( temp 4-component vector of float) +0:40 'txval001' ( temp 4-component vector of float) +0:40 textureGatherOffset ( temp 4-component vector of float) +0:40 Construct combined texture-sampler ( temp sampler2DArray) +0:40 'g_tTex2df4a' ( uniform texture2DArray) +0:40 'g_sSamp' (layout( binding=0) uniform sampler) +0:40 c3: direct index for structure ( uniform 3-component vector of float) +0:40 '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:40 Constant: +0:40 2 (const uint) +0:40 o2: direct index for structure ( uniform 2-component vector of int) +0:40 '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:40 Constant: +0:40 5 (const uint) +0:40 Constant: +0:40 0 (const int) +0:41 Sequence +0:41 move second child to first child ( temp 4-component vector of int) +0:41 'txval011' ( temp 4-component vector of int) +0:41 textureGatherOffset ( temp 4-component vector of int) +0:41 Construct combined texture-sampler ( temp isampler2DArray) +0:41 'g_tTex2di4a' ( uniform itexture2DArray) +0:41 'g_sSamp' (layout( binding=0) uniform sampler) +0:41 c3: direct index for structure ( uniform 3-component vector of float) +0:41 '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:41 Constant: +0:41 2 (const uint) +0:41 o2: direct index for structure ( uniform 2-component vector of int) +0:41 '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:41 Constant: +0:41 5 (const uint) +0:41 Constant: +0:41 0 (const int) +0:42 Sequence +0:42 move second child to first child ( temp 4-component vector of uint) +0:42 'txval021' ( temp 4-component vector of uint) +0:42 textureGatherOffset ( temp 4-component vector of uint) +0:42 Construct combined texture-sampler ( temp usampler2DArray) +0:42 'g_tTex2du4a' ( uniform utexture2DArray) +0:42 'g_sSamp' (layout( binding=0) uniform sampler) +0:42 c3: direct index for structure ( uniform 3-component vector of float) +0:42 '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:42 Constant: +0:42 2 (const uint) +0:42 o2: direct index for structure ( uniform 2-component vector of int) +0:42 '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:42 Constant: +0:42 5 (const uint) +0:42 Constant: +0:42 0 (const int) +0:44 Sequence +0:44 move second child to first child ( temp 4-component vector of float) +0:44 'txval004' ( temp 4-component vector of float) +0:44 textureGatherOffsets ( temp 4-component vector of float) +0:44 Construct combined texture-sampler ( temp sampler2DArray) +0:44 'g_tTex2df4a' ( uniform texture2DArray) +0:44 'g_sSamp' (layout( binding=0) uniform sampler) +0:44 c3: direct index for structure ( uniform 3-component vector of float) +0:44 '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:44 Constant: +0:44 2 (const uint) +0:44 Construct ivec2 ( temp 4-element array of 2-component vector of int) +0:44 o2: direct index for structure ( uniform 2-component vector of int) +0:44 '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:44 Constant: +0:44 5 (const uint) +0:44 o2: direct index for structure ( uniform 2-component vector of int) +0:44 '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:44 Constant: +0:44 5 (const uint) +0:44 o2: direct index for structure ( uniform 2-component vector of int) +0:44 '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:44 Constant: +0:44 5 (const uint) +0:44 o2: direct index for structure ( uniform 2-component vector of int) +0:44 '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:44 Constant: +0:44 5 (const uint) +0:44 Constant: +0:44 0 (const int) +0:45 Sequence +0:45 move second child to first child ( temp 4-component vector of int) +0:45 'txval014' ( temp 4-component vector of int) +0:45 textureGatherOffsets ( temp 4-component vector of int) +0:45 Construct combined texture-sampler ( temp isampler2DArray) +0:45 'g_tTex2di4a' ( uniform itexture2DArray) +0:45 'g_sSamp' (layout( binding=0) uniform sampler) +0:45 c3: direct index for structure ( uniform 3-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, 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:45 Constant: +0:45 2 (const uint) +0:45 Construct ivec2 ( temp 4-element array of 2-component vector of int) +0:45 o2: direct index for structure ( uniform 2-component vector of int) +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, 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:45 Constant: +0:45 5 (const uint) +0:45 o2: direct index for structure ( uniform 2-component vector of int) +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, 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:45 Constant: +0:45 5 (const uint) +0:45 o2: direct index for structure ( uniform 2-component vector of int) +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, 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:45 Constant: +0:45 5 (const uint) +0:45 o2: direct index for structure ( uniform 2-component vector of int) +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, 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:45 Constant: +0:45 5 (const uint) +0:45 Constant: +0:45 0 (const int) +0:46 Sequence +0:46 move second child to first child ( temp 4-component vector of uint) +0:46 'txval024' ( temp 4-component vector of uint) +0:46 textureGatherOffsets ( temp 4-component vector of uint) +0:46 Construct combined texture-sampler ( temp usampler2DArray) +0:46 'g_tTex2du4a' ( uniform utexture2DArray) +0:46 'g_sSamp' (layout( binding=0) uniform sampler) +0:46 c3: direct index for structure ( uniform 3-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, 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:46 Constant: +0:46 2 (const uint) +0:46 Construct ivec2 ( temp 4-element array of 2-component vector of int) +0:46 o2: direct index for structure ( uniform 2-component vector of int) +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, 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:46 Constant: +0:46 5 (const uint) +0:46 o2: direct index for structure ( uniform 2-component vector of int) +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, 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:46 Constant: +0:46 5 (const uint) +0:46 o2: direct index for structure ( uniform 2-component vector of int) +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, 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:46 Constant: +0:46 5 (const uint) +0:46 o2: direct index for structure ( uniform 2-component vector of int) +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, 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:46 Constant: +0:46 5 (const uint) +0:46 Constant: +0:46 0 (const int) +0:56 Sequence +0:56 move second child to first child ( temp 4-component vector of float) +0:56 'txval101' ( temp 4-component vector of float) +0:56 textureGatherOffset ( temp 4-component vector of float) +0:56 Construct combined texture-sampler ( temp sampler2DArray) +0:56 'g_tTex2df4a' ( uniform texture2DArray) +0:56 'g_sSamp' (layout( binding=0) uniform sampler) +0:56 c3: direct index for structure ( uniform 3-component vector of float) +0:56 '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:56 Constant: +0:56 2 (const uint) +0:56 o2: direct index for structure ( uniform 2-component vector of int) +0:56 '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:56 Constant: +0:56 5 (const uint) +0:56 Constant: +0:56 1 (const int) +0:57 Sequence +0:57 move second child to first child ( temp 4-component vector of int) +0:57 'txval111' ( temp 4-component vector of int) +0:57 textureGatherOffset ( temp 4-component vector of int) +0:57 Construct combined texture-sampler ( temp isampler2DArray) +0:57 'g_tTex2di4a' ( uniform itexture2DArray) +0:57 'g_sSamp' (layout( binding=0) uniform sampler) +0:57 c3: direct index for structure ( uniform 3-component vector of float) +0:57 '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:57 Constant: +0:57 2 (const uint) +0:57 o2: direct index for structure ( uniform 2-component vector of int) +0:57 '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:57 Constant: +0:57 5 (const uint) +0:57 Constant: +0:57 1 (const int) +0:58 Sequence +0:58 move second child to first child ( temp 4-component vector of uint) +0:58 'txval121' ( temp 4-component vector of uint) +0:58 textureGatherOffset ( temp 4-component vector of uint) +0:58 Construct combined texture-sampler ( temp usampler2DArray) +0:58 'g_tTex2du4a' ( uniform utexture2DArray) +0:58 'g_sSamp' (layout( binding=0) uniform sampler) +0:58 c3: direct index for structure ( uniform 3-component vector of float) +0:58 '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:58 Constant: +0:58 2 (const uint) +0:58 o2: direct index for structure ( uniform 2-component vector of int) +0:58 '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:58 Constant: +0:58 5 (const uint) +0:58 Constant: +0:58 1 (const int) +0:60 Sequence +0:60 move second child to first child ( temp 4-component vector of float) +0:60 'txval104' ( temp 4-component vector of float) +0:60 textureGatherOffsets ( temp 4-component vector of float) +0:60 Construct combined texture-sampler ( temp sampler2DArray) +0:60 'g_tTex2df4a' ( uniform texture2DArray) +0:60 'g_sSamp' (layout( binding=0) uniform sampler) +0:60 c3: direct index for structure ( uniform 3-component vector of float) +0:60 '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:60 Constant: +0:60 2 (const uint) +0:60 Construct ivec2 ( temp 4-element array of 2-component vector of int) +0:60 o2: direct index for structure ( uniform 2-component vector of int) +0:60 '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:60 Constant: +0:60 5 (const uint) +0:60 o2: direct index for structure ( uniform 2-component vector of int) +0:60 '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:60 Constant: +0:60 5 (const uint) +0:60 o2: direct index for structure ( uniform 2-component vector of int) +0:60 '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:60 Constant: +0:60 5 (const uint) +0:60 o2: direct index for structure ( uniform 2-component vector of int) +0:60 '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:60 Constant: +0:60 5 (const uint) +0:60 Constant: +0:60 1 (const int) +0:61 Sequence +0:61 move second child to first child ( temp 4-component vector of int) +0:61 'txval114' ( temp 4-component vector of int) +0:61 textureGatherOffsets ( temp 4-component vector of int) +0:61 Construct combined texture-sampler ( temp isampler2DArray) +0:61 'g_tTex2di4a' ( uniform itexture2DArray) +0:61 'g_sSamp' (layout( binding=0) uniform sampler) +0:61 c3: direct index for structure ( uniform 3-component vector of float) +0:61 '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:61 Constant: +0:61 2 (const uint) +0:61 Construct ivec2 ( temp 4-element array of 2-component vector of int) +0:61 o2: direct index for structure ( uniform 2-component vector of int) +0:61 '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:61 Constant: +0:61 5 (const uint) +0:61 o2: direct index for structure ( uniform 2-component vector of int) +0:61 '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:61 Constant: +0:61 5 (const uint) +0:61 o2: direct index for structure ( uniform 2-component vector of int) +0:61 '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:61 Constant: +0:61 5 (const uint) +0:61 o2: direct index for structure ( uniform 2-component vector of int) +0:61 '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:61 Constant: +0:61 5 (const uint) +0:61 Constant: +0:61 1 (const int) +0:62 Sequence +0:62 move second child to first child ( temp 4-component vector of uint) +0:62 'txval124' ( temp 4-component vector of uint) +0:62 textureGatherOffsets ( temp 4-component vector of uint) +0:62 Construct combined texture-sampler ( temp usampler2DArray) +0:62 'g_tTex2du4a' ( uniform utexture2DArray) +0:62 'g_sSamp' (layout( binding=0) uniform sampler) +0:62 c3: direct index for structure ( uniform 3-component vector of float) +0:62 '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:62 Constant: +0:62 2 (const uint) +0:62 Construct ivec2 ( temp 4-element array of 2-component vector of int) +0:62 o2: direct index for structure ( uniform 2-component vector of int) +0:62 '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:62 Constant: +0:62 5 (const uint) +0:62 o2: direct index for structure ( uniform 2-component vector of int) +0:62 '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:62 Constant: +0:62 5 (const uint) +0:62 o2: direct index for structure ( uniform 2-component vector of int) +0:62 '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:62 Constant: +0:62 5 (const uint) +0:62 o2: direct index for structure ( uniform 2-component vector of int) +0:62 '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:62 Constant: +0:62 5 (const uint) +0:62 Constant: +0:62 1 (const int) +0:72 Sequence +0:72 move second child to first child ( temp 4-component vector of float) +0:72 'txval201' ( temp 4-component vector of float) +0:72 textureGatherOffset ( temp 4-component vector of float) +0:72 Construct combined texture-sampler ( temp sampler2DArray) +0:72 'g_tTex2df4a' ( uniform texture2DArray) +0:72 'g_sSamp' (layout( binding=0) uniform sampler) +0:72 c3: direct index for structure ( uniform 3-component vector of float) +0:72 '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:72 Constant: +0:72 2 (const uint) +0:72 o2: direct index for structure ( uniform 2-component vector of int) +0:72 '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:72 Constant: +0:72 5 (const uint) +0:72 Constant: +0:72 2 (const int) +0:73 Sequence +0:73 move second child to first child ( temp 4-component vector of int) +0:73 'txval211' ( temp 4-component vector of int) +0:73 textureGatherOffset ( temp 4-component vector of int) +0:73 Construct combined texture-sampler ( temp isampler2DArray) +0:73 'g_tTex2di4a' ( uniform itexture2DArray) +0:73 'g_sSamp' (layout( binding=0) uniform sampler) +0:73 c3: direct index for structure ( uniform 3-component vector of float) +0:73 '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:73 Constant: +0:73 2 (const uint) +0:73 o2: direct index for structure ( uniform 2-component vector of int) +0:73 '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:73 Constant: +0:73 5 (const uint) +0:73 Constant: +0:73 2 (const int) +0:74 Sequence +0:74 move second child to first child ( temp 4-component vector of uint) +0:74 'txval221' ( temp 4-component vector of uint) +0:74 textureGatherOffset ( temp 4-component vector of uint) +0:74 Construct combined texture-sampler ( temp usampler2DArray) +0:74 'g_tTex2du4a' ( uniform utexture2DArray) +0:74 'g_sSamp' (layout( binding=0) uniform sampler) +0:74 c3: direct index for structure ( uniform 3-component vector of float) +0:74 '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:74 Constant: +0:74 2 (const uint) +0:74 o2: direct index for structure ( uniform 2-component vector of int) +0:74 '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:74 Constant: +0:74 5 (const uint) +0:74 Constant: +0:74 2 (const int) +0:76 Sequence +0:76 move second child to first child ( temp 4-component vector of float) +0:76 'txval204' ( temp 4-component vector of float) +0:76 textureGatherOffsets ( temp 4-component vector of float) +0:76 Construct combined texture-sampler ( temp sampler2DArray) +0:76 'g_tTex2df4a' ( uniform texture2DArray) +0:76 'g_sSamp' (layout( binding=0) uniform sampler) +0:76 c3: direct index for structure ( uniform 3-component vector of float) +0:76 '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:76 Constant: +0:76 2 (const uint) +0:76 Construct ivec2 ( temp 4-element array of 2-component vector of int) +0:76 o2: direct index for structure ( uniform 2-component vector of int) +0:76 '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:76 Constant: +0:76 5 (const uint) +0:76 o2: direct index for structure ( uniform 2-component vector of int) +0:76 '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:76 Constant: +0:76 5 (const uint) +0:76 o2: direct index for structure ( uniform 2-component vector of int) +0:76 '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:76 Constant: +0:76 5 (const uint) +0:76 o2: direct index for structure ( uniform 2-component vector of int) +0:76 '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:76 Constant: +0:76 5 (const uint) +0:76 Constant: +0:76 2 (const int) +0:77 Sequence +0:77 move second child to first child ( temp 4-component vector of int) +0:77 'txval214' ( temp 4-component vector of int) +0:77 textureGatherOffsets ( temp 4-component vector of int) +0:77 Construct combined texture-sampler ( temp isampler2DArray) +0:77 'g_tTex2di4a' ( uniform itexture2DArray) +0:77 'g_sSamp' (layout( binding=0) uniform sampler) +0:77 c3: direct index for structure ( uniform 3-component vector of float) +0:77 '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:77 Constant: +0:77 2 (const uint) +0:77 Construct ivec2 ( temp 4-element array of 2-component vector of int) +0:77 o2: direct index for structure ( uniform 2-component vector of int) +0:77 '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:77 Constant: +0:77 5 (const uint) +0:77 o2: direct index for structure ( uniform 2-component vector of int) +0:77 '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:77 Constant: +0:77 5 (const uint) +0:77 o2: direct index for structure ( uniform 2-component vector of int) +0:77 '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:77 Constant: +0:77 5 (const uint) +0:77 o2: direct index for structure ( uniform 2-component vector of int) +0:77 '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:77 Constant: +0:77 5 (const uint) +0:77 Constant: +0:77 2 (const int) +0:78 Sequence +0:78 move second child to first child ( temp 4-component vector of uint) +0:78 'txval224' ( temp 4-component vector of uint) +0:78 textureGatherOffsets ( temp 4-component vector of uint) +0:78 Construct combined texture-sampler ( temp usampler2DArray) +0:78 'g_tTex2du4a' ( uniform utexture2DArray) +0:78 'g_sSamp' (layout( binding=0) uniform sampler) +0:78 c3: direct index for structure ( uniform 3-component vector of float) +0:78 '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:78 Constant: +0:78 2 (const uint) +0:78 Construct ivec2 ( temp 4-element array of 2-component vector of int) +0:78 o2: direct index for structure ( uniform 2-component vector of int) +0:78 '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:78 Constant: +0:78 5 (const uint) +0:78 o2: direct index for structure ( uniform 2-component vector of int) +0:78 '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:78 Constant: +0:78 5 (const uint) +0:78 o2: direct index for structure ( uniform 2-component vector of int) +0:78 '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:78 Constant: +0:78 5 (const uint) +0:78 o2: direct index for structure ( uniform 2-component vector of int) +0:78 '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:78 Constant: +0:78 5 (const uint) +0:78 Constant: +0:78 2 (const int) +0:88 Sequence +0:88 move second child to first child ( temp 4-component vector of float) +0:88 'txval301' ( temp 4-component vector of float) +0:88 textureGatherOffset ( temp 4-component vector of float) +0:88 Construct combined texture-sampler ( temp sampler2DArray) +0:88 'g_tTex2df4a' ( uniform texture2DArray) +0:88 'g_sSamp' (layout( binding=0) uniform sampler) +0:88 c3: direct index for structure ( uniform 3-component vector of float) +0:88 '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:88 Constant: +0:88 2 (const uint) +0:88 o2: direct index for structure ( uniform 2-component vector of int) +0:88 '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:88 Constant: +0:88 5 (const uint) +0:88 Constant: +0:88 3 (const int) +0:89 Sequence +0:89 move second child to first child ( temp 4-component vector of int) +0:89 'txval311' ( temp 4-component vector of int) +0:89 textureGatherOffset ( temp 4-component vector of int) +0:89 Construct combined texture-sampler ( temp isampler2DArray) +0:89 'g_tTex2di4a' ( uniform itexture2DArray) +0:89 'g_sSamp' (layout( binding=0) uniform sampler) +0:89 c3: direct index for structure ( uniform 3-component vector of float) +0:89 '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:89 Constant: +0:89 2 (const uint) +0:89 o2: direct index for structure ( uniform 2-component vector of int) +0:89 '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:89 Constant: +0:89 5 (const uint) +0:89 Constant: +0:89 3 (const int) +0:90 Sequence +0:90 move second child to first child ( temp 4-component vector of uint) +0:90 'txval321' ( temp 4-component vector of uint) +0:90 textureGatherOffset ( temp 4-component vector of uint) +0:90 Construct combined texture-sampler ( temp usampler2DArray) +0:90 'g_tTex2du4a' ( uniform utexture2DArray) +0:90 'g_sSamp' (layout( binding=0) uniform sampler) +0:90 c3: direct index for structure ( uniform 3-component vector of float) +0:90 '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:90 Constant: +0:90 2 (const uint) +0:90 o2: direct index for structure ( uniform 2-component vector of int) +0:90 '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:90 Constant: +0:90 5 (const uint) +0:90 Constant: +0:90 3 (const int) +0:92 Sequence +0:92 move second child to first child ( temp 4-component vector of float) +0:92 'txval304' ( temp 4-component vector of float) +0:92 textureGatherOffsets ( temp 4-component vector of float) +0:92 Construct combined texture-sampler ( temp sampler2DArray) +0:92 'g_tTex2df4a' ( uniform texture2DArray) +0:92 'g_sSamp' (layout( binding=0) uniform sampler) +0:92 c3: direct index for structure ( uniform 3-component vector of float) +0:92 '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:92 Constant: +0:92 2 (const uint) +0:92 Construct ivec2 ( temp 4-element array of 2-component vector of int) +0:92 o2: direct index for structure ( uniform 2-component vector of int) +0:92 '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:92 Constant: +0:92 5 (const uint) +0:92 o2: direct index for structure ( uniform 2-component vector of int) +0:92 '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:92 Constant: +0:92 5 (const uint) +0:92 o2: direct index for structure ( uniform 2-component vector of int) +0:92 '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:92 Constant: +0:92 5 (const uint) +0:92 o2: direct index for structure ( uniform 2-component vector of int) +0:92 '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:92 Constant: +0:92 5 (const uint) +0:92 Constant: +0:92 3 (const int) +0:93 Sequence +0:93 move second child to first child ( temp 4-component vector of int) +0:93 'txval314' ( temp 4-component vector of int) +0:93 textureGatherOffsets ( temp 4-component vector of int) +0:93 Construct combined texture-sampler ( temp isampler2DArray) +0:93 'g_tTex2di4a' ( uniform itexture2DArray) +0:93 'g_sSamp' (layout( binding=0) uniform sampler) +0:93 c3: direct index for structure ( uniform 3-component vector of float) +0:93 '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:93 Constant: +0:93 2 (const uint) +0:93 Construct ivec2 ( temp 4-element array of 2-component vector of int) +0:93 o2: direct index for structure ( uniform 2-component vector of int) +0:93 '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:93 Constant: +0:93 5 (const uint) +0:93 o2: direct index for structure ( uniform 2-component vector of int) +0:93 '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:93 Constant: +0:93 5 (const uint) +0:93 o2: direct index for structure ( uniform 2-component vector of int) +0:93 '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:93 Constant: +0:93 5 (const uint) +0:93 o2: direct index for structure ( uniform 2-component vector of int) +0:93 '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:93 Constant: +0:93 5 (const uint) +0:93 Constant: +0:93 3 (const int) +0:94 Sequence +0:94 move second child to first child ( temp 4-component vector of uint) +0:94 'txval324' ( temp 4-component vector of uint) +0:94 textureGatherOffsets ( temp 4-component vector of uint) +0:94 Construct combined texture-sampler ( temp usampler2DArray) +0:94 'g_tTex2du4a' ( uniform utexture2DArray) +0:94 'g_sSamp' (layout( binding=0) uniform sampler) +0:94 c3: direct index for structure ( uniform 3-component vector of float) +0:94 '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:94 Constant: +0:94 2 (const uint) +0:94 Construct ivec2 ( temp 4-element array of 2-component vector of int) +0:94 o2: direct index for structure ( uniform 2-component vector of int) +0:94 '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:94 Constant: +0:94 5 (const uint) +0:94 o2: direct index for structure ( uniform 2-component vector of int) +0:94 '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:94 Constant: +0:94 5 (const uint) +0:94 o2: direct index for structure ( uniform 2-component vector of int) +0:94 '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:94 Constant: +0:94 5 (const uint) +0:94 o2: direct index for structure ( uniform 2-component vector of int) +0:94 '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:94 Constant: +0:94 5 (const uint) +0:94 Constant: +0:94 3 (const int) +0:106 move second child to first child ( temp 4-component vector of float) +0:106 Color: direct index for structure ( temp 4-component vector of float) +0:106 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:106 Constant: +0:106 0 (const int) +0:106 Constant: +0:106 1.000000 +0:106 1.000000 +0:106 1.000000 +0:106 1.000000 +0:107 move second child to first child ( temp float) +0:107 Depth: direct index for structure ( temp float) +0:107 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:107 Constant: +0:107 1 (const int) +0:107 Constant: +0:107 1.000000 +0:109 Branch: Return with expression +0:109 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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 structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:33 1 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_sSamp2d' ( uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=0) 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:? '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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 389 + + Capability Shader + Capability ImageGatherExtended + Capability Sampled1D + Capability SampledCubeArray + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 363 367 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + MemberName 8(PS_OUTPUT) 1 "Depth" + Name 10 "@main(" + Name 13 "txval001" + Name 16 "g_tTex2df4a" + Name 20 "g_sSamp" + Name 30 "$Global" + MemberName 30($Global) 0 "c1" + MemberName 30($Global) 1 "c2" + MemberName 30($Global) 2 "c3" + MemberName 30($Global) 3 "c4" + MemberName 30($Global) 4 "o1" + MemberName 30($Global) 5 "o2" + MemberName 30($Global) 6 "o3" + MemberName 30($Global) 7 "o4" + Name 32 "" + Name 44 "txval011" + Name 47 "g_tTex2di4a" + Name 60 "txval021" + Name 63 "g_tTex2du4a" + Name 73 "txval004" + Name 91 "txval014" + Name 107 "txval024" + Name 123 "txval101" + Name 133 "txval111" + Name 142 "txval121" + Name 151 "txval104" + Name 167 "txval114" + Name 183 "txval124" + Name 199 "txval201" + Name 208 "txval211" + Name 217 "txval221" + Name 226 "txval204" + Name 242 "txval214" + Name 258 "txval224" + Name 274 "txval301" + Name 284 "txval311" + Name 293 "txval321" + Name 302 "txval304" + Name 318 "txval314" + Name 334 "txval324" + Name 351 "psout" + Name 360 "flattenTemp" + Name 363 "Color" + Name 367 "Depth" + Name 370 "g_sSamp2d" + Name 373 "g_tTex1df4a" + Name 376 "g_tTex1di4a" + Name 379 "g_tTex1du4a" + Name 382 "g_tTexcdf4a" + Name 385 "g_tTexcdi4a" + Name 388 "g_tTexcdu4a" + Decorate 16(g_tTex2df4a) DescriptorSet 0 + Decorate 20(g_sSamp) DescriptorSet 0 + Decorate 20(g_sSamp) Binding 0 + MemberDecorate 30($Global) 0 Offset 0 + MemberDecorate 30($Global) 1 Offset 8 + MemberDecorate 30($Global) 2 Offset 16 + MemberDecorate 30($Global) 3 Offset 32 + MemberDecorate 30($Global) 4 Offset 48 + MemberDecorate 30($Global) 5 Offset 56 + MemberDecorate 30($Global) 6 Offset 64 + MemberDecorate 30($Global) 7 Offset 80 + Decorate 30($Global) Block + 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 370(g_sSamp2d) DescriptorSet 0 + Decorate 373(g_tTex1df4a) DescriptorSet 0 + Decorate 373(g_tTex1df4a) Binding 0 + Decorate 376(g_tTex1di4a) DescriptorSet 0 + Decorate 379(g_tTex1du4a) DescriptorSet 0 + Decorate 382(g_tTexcdf4a) DescriptorSet 0 + Decorate 385(g_tTexcdi4a) DescriptorSet 0 + Decorate 388(g_tTexcdu4a) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8(PS_OUTPUT): TypeStruct 7(fvec4) 6(float) + 9: TypeFunction 8(PS_OUTPUT) + 12: TypePointer Function 7(fvec4) + 14: TypeImage 6(float) 2D array sampled format:Unknown + 15: TypePointer UniformConstant 14 + 16(g_tTex2df4a): 15(ptr) Variable UniformConstant + 18: TypeSampler + 19: TypePointer UniformConstant 18 + 20(g_sSamp): 19(ptr) Variable UniformConstant + 22: TypeSampledImage 14 + 24: TypeVector 6(float) 2 + 25: TypeVector 6(float) 3 + 26: TypeInt 32 1 + 27: TypeVector 26(int) 2 + 28: TypeVector 26(int) 3 + 29: TypeVector 26(int) 4 + 30($Global): TypeStruct 6(float) 24(fvec2) 25(fvec3) 7(fvec4) 26(int) 27(ivec2) 28(ivec3) 29(ivec4) + 31: TypePointer Uniform 30($Global) + 32: 31(ptr) Variable Uniform + 33: 26(int) Constant 2 + 34: TypePointer Uniform 25(fvec3) + 37: 26(int) Constant 5 + 38: TypePointer Uniform 27(ivec2) + 41: 26(int) Constant 0 + 43: TypePointer Function 29(ivec4) + 45: TypeImage 26(int) 2D array sampled format:Unknown + 46: TypePointer UniformConstant 45 + 47(g_tTex2di4a): 46(ptr) Variable UniformConstant + 50: TypeSampledImage 45 + 57: TypeInt 32 0 + 58: TypeVector 57(int) 4 + 59: TypePointer Function 58(ivec4) + 61: TypeImage 57(int) 2D array sampled format:Unknown + 62: TypePointer UniformConstant 61 + 63(g_tTex2du4a): 62(ptr) Variable UniformConstant + 66: TypeSampledImage 61 + 87: 57(int) Constant 4 + 88: TypeArray 27(ivec2) 87 + 131: 26(int) Constant 1 + 282: 26(int) Constant 3 + 350: TypePointer Function 8(PS_OUTPUT) + 352: 6(float) Constant 1065353216 + 353: 7(fvec4) ConstantComposite 352 352 352 352 + 355: TypePointer Function 6(float) + 362: TypePointer Output 7(fvec4) + 363(Color): 362(ptr) Variable Output + 366: TypePointer Output 6(float) + 367(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 +373(g_tTex1df4a): 372(ptr) Variable UniformConstant + 374: TypeImage 26(int) 1D array sampled format:Unknown + 375: TypePointer UniformConstant 374 +376(g_tTex1di4a): 375(ptr) Variable UniformConstant + 377: TypeImage 57(int) 1D array sampled format:Unknown + 378: TypePointer UniformConstant 377 +379(g_tTex1du4a): 378(ptr) Variable UniformConstant + 380: TypeImage 6(float) Cube array sampled format:Unknown + 381: TypePointer UniformConstant 380 +382(g_tTexcdf4a): 381(ptr) Variable UniformConstant + 383: TypeImage 26(int) Cube array sampled format:Unknown + 384: TypePointer UniformConstant 383 +385(g_tTexcdi4a): 384(ptr) Variable UniformConstant + 386: TypeImage 57(int) Cube array sampled format:Unknown + 387: TypePointer UniformConstant 386 +388(g_tTexcdu4a): 387(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label +360(flattenTemp): 350(ptr) Variable Function + 361:8(PS_OUTPUT) FunctionCall 10(@main() + Store 360(flattenTemp) 361 + 364: 12(ptr) AccessChain 360(flattenTemp) 41 + 365: 7(fvec4) Load 364 + Store 363(Color) 365 + 368: 355(ptr) AccessChain 360(flattenTemp) 131 + 369: 6(float) Load 368 + Store 367(Depth) 369 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 13(txval001): 12(ptr) Variable Function + 44(txval011): 43(ptr) Variable Function + 60(txval021): 59(ptr) Variable Function + 73(txval004): 12(ptr) Variable Function + 91(txval014): 43(ptr) Variable Function + 107(txval024): 59(ptr) Variable Function + 123(txval101): 12(ptr) Variable Function + 133(txval111): 43(ptr) Variable Function + 142(txval121): 59(ptr) Variable Function + 151(txval104): 12(ptr) Variable Function + 167(txval114): 43(ptr) Variable Function + 183(txval124): 59(ptr) Variable Function + 199(txval201): 12(ptr) Variable Function + 208(txval211): 43(ptr) Variable Function + 217(txval221): 59(ptr) Variable Function + 226(txval204): 12(ptr) Variable Function + 242(txval214): 43(ptr) Variable Function + 258(txval224): 59(ptr) Variable Function + 274(txval301): 12(ptr) Variable Function + 284(txval311): 43(ptr) Variable Function + 293(txval321): 59(ptr) Variable Function + 302(txval304): 12(ptr) Variable Function + 318(txval314): 43(ptr) Variable Function + 334(txval324): 59(ptr) Variable Function + 351(psout): 350(ptr) Variable Function + 17: 14 Load 16(g_tTex2df4a) + 21: 18 Load 20(g_sSamp) + 23: 22 SampledImage 17 21 + 35: 34(ptr) AccessChain 32 33 + 36: 25(fvec3) Load 35 + 39: 38(ptr) AccessChain 32 37 + 40: 27(ivec2) Load 39 + 42: 7(fvec4) ImageGather 23 36 41 Offset 40 + Store 13(txval001) 42 + 48: 45 Load 47(g_tTex2di4a) + 49: 18 Load 20(g_sSamp) + 51: 50 SampledImage 48 49 + 52: 34(ptr) AccessChain 32 33 + 53: 25(fvec3) Load 52 + 54: 38(ptr) AccessChain 32 37 + 55: 27(ivec2) Load 54 + 56: 29(ivec4) ImageGather 51 53 41 Offset 55 + Store 44(txval011) 56 + 64: 61 Load 63(g_tTex2du4a) + 65: 18 Load 20(g_sSamp) + 67: 66 SampledImage 64 65 + 68: 34(ptr) AccessChain 32 33 + 69: 25(fvec3) Load 68 + 70: 38(ptr) AccessChain 32 37 + 71: 27(ivec2) Load 70 + 72: 58(ivec4) ImageGather 67 69 41 Offset 71 + Store 60(txval021) 72 + 74: 14 Load 16(g_tTex2df4a) + 75: 18 Load 20(g_sSamp) + 76: 22 SampledImage 74 75 + 77: 34(ptr) AccessChain 32 33 + 78: 25(fvec3) Load 77 + 79: 38(ptr) AccessChain 32 37 + 80: 27(ivec2) Load 79 + 81: 38(ptr) AccessChain 32 37 + 82: 27(ivec2) Load 81 + 83: 38(ptr) AccessChain 32 37 + 84: 27(ivec2) Load 83 + 85: 38(ptr) AccessChain 32 37 + 86: 27(ivec2) Load 85 + 89: 88 CompositeConstruct 80 82 84 86 + 90: 7(fvec4) ImageGather 76 78 41 ConstOffsets 89 + Store 73(txval004) 90 + 92: 45 Load 47(g_tTex2di4a) + 93: 18 Load 20(g_sSamp) + 94: 50 SampledImage 92 93 + 95: 34(ptr) AccessChain 32 33 + 96: 25(fvec3) Load 95 + 97: 38(ptr) AccessChain 32 37 + 98: 27(ivec2) Load 97 + 99: 38(ptr) AccessChain 32 37 + 100: 27(ivec2) Load 99 + 101: 38(ptr) AccessChain 32 37 + 102: 27(ivec2) Load 101 + 103: 38(ptr) AccessChain 32 37 + 104: 27(ivec2) Load 103 + 105: 88 CompositeConstruct 98 100 102 104 + 106: 29(ivec4) ImageGather 94 96 41 ConstOffsets 105 + Store 91(txval014) 106 + 108: 61 Load 63(g_tTex2du4a) + 109: 18 Load 20(g_sSamp) + 110: 66 SampledImage 108 109 + 111: 34(ptr) AccessChain 32 33 + 112: 25(fvec3) Load 111 + 113: 38(ptr) AccessChain 32 37 + 114: 27(ivec2) Load 113 + 115: 38(ptr) AccessChain 32 37 + 116: 27(ivec2) Load 115 + 117: 38(ptr) AccessChain 32 37 + 118: 27(ivec2) Load 117 + 119: 38(ptr) AccessChain 32 37 + 120: 27(ivec2) Load 119 + 121: 88 CompositeConstruct 114 116 118 120 + 122: 58(ivec4) ImageGather 110 112 41 ConstOffsets 121 + Store 107(txval024) 122 + 124: 14 Load 16(g_tTex2df4a) + 125: 18 Load 20(g_sSamp) + 126: 22 SampledImage 124 125 + 127: 34(ptr) AccessChain 32 33 + 128: 25(fvec3) Load 127 + 129: 38(ptr) AccessChain 32 37 + 130: 27(ivec2) Load 129 + 132: 7(fvec4) ImageGather 126 128 131 Offset 130 + Store 123(txval101) 132 + 134: 45 Load 47(g_tTex2di4a) + 135: 18 Load 20(g_sSamp) + 136: 50 SampledImage 134 135 + 137: 34(ptr) AccessChain 32 33 + 138: 25(fvec3) Load 137 + 139: 38(ptr) AccessChain 32 37 + 140: 27(ivec2) Load 139 + 141: 29(ivec4) ImageGather 136 138 131 Offset 140 + Store 133(txval111) 141 + 143: 61 Load 63(g_tTex2du4a) + 144: 18 Load 20(g_sSamp) + 145: 66 SampledImage 143 144 + 146: 34(ptr) AccessChain 32 33 + 147: 25(fvec3) Load 146 + 148: 38(ptr) AccessChain 32 37 + 149: 27(ivec2) Load 148 + 150: 58(ivec4) ImageGather 145 147 131 Offset 149 + Store 142(txval121) 150 + 152: 14 Load 16(g_tTex2df4a) + 153: 18 Load 20(g_sSamp) + 154: 22 SampledImage 152 153 + 155: 34(ptr) AccessChain 32 33 + 156: 25(fvec3) Load 155 + 157: 38(ptr) AccessChain 32 37 + 158: 27(ivec2) Load 157 + 159: 38(ptr) AccessChain 32 37 + 160: 27(ivec2) Load 159 + 161: 38(ptr) AccessChain 32 37 + 162: 27(ivec2) Load 161 + 163: 38(ptr) AccessChain 32 37 + 164: 27(ivec2) Load 163 + 165: 88 CompositeConstruct 158 160 162 164 + 166: 7(fvec4) ImageGather 154 156 131 ConstOffsets 165 + Store 151(txval104) 166 + 168: 45 Load 47(g_tTex2di4a) + 169: 18 Load 20(g_sSamp) + 170: 50 SampledImage 168 169 + 171: 34(ptr) AccessChain 32 33 + 172: 25(fvec3) Load 171 + 173: 38(ptr) AccessChain 32 37 + 174: 27(ivec2) Load 173 + 175: 38(ptr) AccessChain 32 37 + 176: 27(ivec2) Load 175 + 177: 38(ptr) AccessChain 32 37 + 178: 27(ivec2) Load 177 + 179: 38(ptr) AccessChain 32 37 + 180: 27(ivec2) Load 179 + 181: 88 CompositeConstruct 174 176 178 180 + 182: 29(ivec4) ImageGather 170 172 131 ConstOffsets 181 + Store 167(txval114) 182 + 184: 61 Load 63(g_tTex2du4a) + 185: 18 Load 20(g_sSamp) + 186: 66 SampledImage 184 185 + 187: 34(ptr) AccessChain 32 33 + 188: 25(fvec3) Load 187 + 189: 38(ptr) AccessChain 32 37 + 190: 27(ivec2) Load 189 + 191: 38(ptr) AccessChain 32 37 + 192: 27(ivec2) Load 191 + 193: 38(ptr) AccessChain 32 37 + 194: 27(ivec2) Load 193 + 195: 38(ptr) AccessChain 32 37 + 196: 27(ivec2) Load 195 + 197: 88 CompositeConstruct 190 192 194 196 + 198: 58(ivec4) ImageGather 186 188 131 ConstOffsets 197 + Store 183(txval124) 198 + 200: 14 Load 16(g_tTex2df4a) + 201: 18 Load 20(g_sSamp) + 202: 22 SampledImage 200 201 + 203: 34(ptr) AccessChain 32 33 + 204: 25(fvec3) Load 203 + 205: 38(ptr) AccessChain 32 37 + 206: 27(ivec2) Load 205 + 207: 7(fvec4) ImageGather 202 204 33 Offset 206 + Store 199(txval201) 207 + 209: 45 Load 47(g_tTex2di4a) + 210: 18 Load 20(g_sSamp) + 211: 50 SampledImage 209 210 + 212: 34(ptr) AccessChain 32 33 + 213: 25(fvec3) Load 212 + 214: 38(ptr) AccessChain 32 37 + 215: 27(ivec2) Load 214 + 216: 29(ivec4) ImageGather 211 213 33 Offset 215 + Store 208(txval211) 216 + 218: 61 Load 63(g_tTex2du4a) + 219: 18 Load 20(g_sSamp) + 220: 66 SampledImage 218 219 + 221: 34(ptr) AccessChain 32 33 + 222: 25(fvec3) Load 221 + 223: 38(ptr) AccessChain 32 37 + 224: 27(ivec2) Load 223 + 225: 58(ivec4) ImageGather 220 222 33 Offset 224 + Store 217(txval221) 225 + 227: 14 Load 16(g_tTex2df4a) + 228: 18 Load 20(g_sSamp) + 229: 22 SampledImage 227 228 + 230: 34(ptr) AccessChain 32 33 + 231: 25(fvec3) Load 230 + 232: 38(ptr) AccessChain 32 37 + 233: 27(ivec2) Load 232 + 234: 38(ptr) AccessChain 32 37 + 235: 27(ivec2) Load 234 + 236: 38(ptr) AccessChain 32 37 + 237: 27(ivec2) Load 236 + 238: 38(ptr) AccessChain 32 37 + 239: 27(ivec2) Load 238 + 240: 88 CompositeConstruct 233 235 237 239 + 241: 7(fvec4) ImageGather 229 231 33 ConstOffsets 240 + Store 226(txval204) 241 + 243: 45 Load 47(g_tTex2di4a) + 244: 18 Load 20(g_sSamp) + 245: 50 SampledImage 243 244 + 246: 34(ptr) AccessChain 32 33 + 247: 25(fvec3) Load 246 + 248: 38(ptr) AccessChain 32 37 + 249: 27(ivec2) Load 248 + 250: 38(ptr) AccessChain 32 37 + 251: 27(ivec2) Load 250 + 252: 38(ptr) AccessChain 32 37 + 253: 27(ivec2) Load 252 + 254: 38(ptr) AccessChain 32 37 + 255: 27(ivec2) Load 254 + 256: 88 CompositeConstruct 249 251 253 255 + 257: 29(ivec4) ImageGather 245 247 33 ConstOffsets 256 + Store 242(txval214) 257 + 259: 61 Load 63(g_tTex2du4a) + 260: 18 Load 20(g_sSamp) + 261: 66 SampledImage 259 260 + 262: 34(ptr) AccessChain 32 33 + 263: 25(fvec3) Load 262 + 264: 38(ptr) AccessChain 32 37 + 265: 27(ivec2) Load 264 + 266: 38(ptr) AccessChain 32 37 + 267: 27(ivec2) Load 266 + 268: 38(ptr) AccessChain 32 37 + 269: 27(ivec2) Load 268 + 270: 38(ptr) AccessChain 32 37 + 271: 27(ivec2) Load 270 + 272: 88 CompositeConstruct 265 267 269 271 + 273: 58(ivec4) ImageGather 261 263 33 ConstOffsets 272 + Store 258(txval224) 273 + 275: 14 Load 16(g_tTex2df4a) + 276: 18 Load 20(g_sSamp) + 277: 22 SampledImage 275 276 + 278: 34(ptr) AccessChain 32 33 + 279: 25(fvec3) Load 278 + 280: 38(ptr) AccessChain 32 37 + 281: 27(ivec2) Load 280 + 283: 7(fvec4) ImageGather 277 279 282 Offset 281 + Store 274(txval301) 283 + 285: 45 Load 47(g_tTex2di4a) + 286: 18 Load 20(g_sSamp) + 287: 50 SampledImage 285 286 + 288: 34(ptr) AccessChain 32 33 + 289: 25(fvec3) Load 288 + 290: 38(ptr) AccessChain 32 37 + 291: 27(ivec2) Load 290 + 292: 29(ivec4) ImageGather 287 289 282 Offset 291 + Store 284(txval311) 292 + 294: 61 Load 63(g_tTex2du4a) + 295: 18 Load 20(g_sSamp) + 296: 66 SampledImage 294 295 + 297: 34(ptr) AccessChain 32 33 + 298: 25(fvec3) Load 297 + 299: 38(ptr) AccessChain 32 37 + 300: 27(ivec2) Load 299 + 301: 58(ivec4) ImageGather 296 298 282 Offset 300 + Store 293(txval321) 301 + 303: 14 Load 16(g_tTex2df4a) + 304: 18 Load 20(g_sSamp) + 305: 22 SampledImage 303 304 + 306: 34(ptr) AccessChain 32 33 + 307: 25(fvec3) Load 306 + 308: 38(ptr) AccessChain 32 37 + 309: 27(ivec2) Load 308 + 310: 38(ptr) AccessChain 32 37 + 311: 27(ivec2) Load 310 + 312: 38(ptr) AccessChain 32 37 + 313: 27(ivec2) Load 312 + 314: 38(ptr) AccessChain 32 37 + 315: 27(ivec2) Load 314 + 316: 88 CompositeConstruct 309 311 313 315 + 317: 7(fvec4) ImageGather 305 307 282 ConstOffsets 316 + Store 302(txval304) 317 + 319: 45 Load 47(g_tTex2di4a) + 320: 18 Load 20(g_sSamp) + 321: 50 SampledImage 319 320 + 322: 34(ptr) AccessChain 32 33 + 323: 25(fvec3) Load 322 + 324: 38(ptr) AccessChain 32 37 + 325: 27(ivec2) Load 324 + 326: 38(ptr) AccessChain 32 37 + 327: 27(ivec2) Load 326 + 328: 38(ptr) AccessChain 32 37 + 329: 27(ivec2) Load 328 + 330: 38(ptr) AccessChain 32 37 + 331: 27(ivec2) Load 330 + 332: 88 CompositeConstruct 325 327 329 331 + 333: 29(ivec4) ImageGather 321 323 282 ConstOffsets 332 + Store 318(txval314) 333 + 335: 61 Load 63(g_tTex2du4a) + 336: 18 Load 20(g_sSamp) + 337: 66 SampledImage 335 336 + 338: 34(ptr) AccessChain 32 33 + 339: 25(fvec3) Load 338 + 340: 38(ptr) AccessChain 32 37 + 341: 27(ivec2) Load 340 + 342: 38(ptr) AccessChain 32 37 + 343: 27(ivec2) Load 342 + 344: 38(ptr) AccessChain 32 37 + 345: 27(ivec2) Load 344 + 346: 38(ptr) AccessChain 32 37 + 347: 27(ivec2) Load 346 + 348: 88 CompositeConstruct 341 343 345 347 + 349: 58(ivec4) ImageGather 337 339 282 ConstOffsets 348 + Store 334(txval324) 349 + 354: 12(ptr) AccessChain 351(psout) 41 + Store 354 353 + 356: 355(ptr) AccessChain 351(psout) 131 + Store 356 352 + 357:8(PS_OUTPUT) Load 351(psout) + ReturnValue 357 + FunctionEnd 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 new file mode 100644 index 0000000..1c7487d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gathercmpRGBA.offset.dx10.frag.out @@ -0,0 +1,586 @@ +hlsl.gathercmpRGBA.offset.dx10.frag +Shader version: 450 +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}) +0:38 Function Parameters: +0:? Sequence +0:45 Sequence +0:45 move second child to first child ( temp 4-component vector of float) +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_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}) +0:45 Constant: +0:45 1 (const uint) +0:45 Constant: +0:45 0.750000 +0:? Constant: +0:? 1 (const int) +0:? 0 (const int) +0:46 Sequence +0:46 move second child to first child ( temp 4-component vector of int) +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_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}) +0:46 Constant: +0:46 1 (const uint) +0:46 Constant: +0:46 0.750000 +0:? Constant: +0:? 1 (const int) +0:? -1 (const int) +0:47 Sequence +0:47 move second child to first child ( temp 4-component vector of uint) +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_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}) +0:47 Constant: +0:47 1 (const uint) +0:47 Constant: +0:47 0.750000 +0:? Constant: +0:? 1 (const int) +0:? 1 (const int) +0:49 Sequence +0:49 move second child to first child ( temp 4-component vector of float) +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_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}) +0:49 Constant: +0:49 1 (const uint) +0:49 Constant: +0:49 0.750000 +0:49 Constant: +0:49 1 (const int) +0:49 0 (const int) +0:49 1 (const int) +0:49 0 (const int) +0:49 1 (const int) +0:49 0 (const int) +0:49 1 (const int) +0:49 0 (const int) +0:50 Sequence +0:50 move second child to first child ( temp 4-component vector of int) +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_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}) +0:50 Constant: +0:50 1 (const uint) +0:50 Constant: +0:50 0.750000 +0:50 Constant: +0:50 1 (const int) +0:50 -1 (const int) +0:50 1 (const int) +0:50 -1 (const int) +0:50 1 (const int) +0:50 -1 (const int) +0:50 1 (const int) +0:50 -1 (const int) +0:51 Sequence +0:51 move second child to first child ( temp 4-component vector of uint) +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_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}) +0:51 Constant: +0:51 1 (const uint) +0:51 Constant: +0:51 0.750000 +0:51 Constant: +0:51 1 (const int) +0:51 1 (const int) +0:51 1 (const int) +0:51 1 (const int) +0:51 1 (const int) +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:38 Function Definition: main( ( temp void) +0:38 Function Parameters: +0:? Sequence +0:38 Sequence +0:38 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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_sSampCmp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1D) +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_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:? '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) + + +Linked fragment stage: + + +Shader version: 450 +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}) +0:38 Function Parameters: +0:? Sequence +0:45 Sequence +0:45 move second child to first child ( temp 4-component vector of float) +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_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}) +0:45 Constant: +0:45 1 (const uint) +0:45 Constant: +0:45 0.750000 +0:? Constant: +0:? 1 (const int) +0:? 0 (const int) +0:46 Sequence +0:46 move second child to first child ( temp 4-component vector of int) +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_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}) +0:46 Constant: +0:46 1 (const uint) +0:46 Constant: +0:46 0.750000 +0:? Constant: +0:? 1 (const int) +0:? -1 (const int) +0:47 Sequence +0:47 move second child to first child ( temp 4-component vector of uint) +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_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}) +0:47 Constant: +0:47 1 (const uint) +0:47 Constant: +0:47 0.750000 +0:? Constant: +0:? 1 (const int) +0:? 1 (const int) +0:49 Sequence +0:49 move second child to first child ( temp 4-component vector of float) +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_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}) +0:49 Constant: +0:49 1 (const uint) +0:49 Constant: +0:49 0.750000 +0:49 Constant: +0:49 1 (const int) +0:49 0 (const int) +0:49 1 (const int) +0:49 0 (const int) +0:49 1 (const int) +0:49 0 (const int) +0:49 1 (const int) +0:49 0 (const int) +0:50 Sequence +0:50 move second child to first child ( temp 4-component vector of int) +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_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}) +0:50 Constant: +0:50 1 (const uint) +0:50 Constant: +0:50 0.750000 +0:50 Constant: +0:50 1 (const int) +0:50 -1 (const int) +0:50 1 (const int) +0:50 -1 (const int) +0:50 1 (const int) +0:50 -1 (const int) +0:50 1 (const int) +0:50 -1 (const int) +0:51 Sequence +0:51 move second child to first child ( temp 4-component vector of uint) +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_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}) +0:51 Constant: +0:51 1 (const uint) +0:51 Constant: +0:51 0.750000 +0:51 Constant: +0:51 1 (const int) +0:51 1 (const int) +0:51 1 (const int) +0:51 1 (const int) +0:51 1 (const int) +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:38 Function Definition: main( ( temp void) +0:38 Function Parameters: +0:? Sequence +0:38 Sequence +0:38 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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_sSampCmp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1D) +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_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:? '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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 146 + + Capability Shader + Capability Sampled1D + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 111 115 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + MemberName 8(PS_OUTPUT) 1 "Depth" + Name 10 "@main(" + 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" + 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 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 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 + 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 + 141: TypePointer UniformConstant 140 + 142(g_tTexcdi4): 141(ptr) Variable UniformConstant + 143: TypeImage 56(int) Cube sampled format:Unknown + 144: TypePointer UniformConstant 143 + 145(g_tTexcdu4): 144(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 + 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 + 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 + 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 new file mode 100644 index 0000000..30483db --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.getdimensions.dx10.frag.out @@ -0,0 +1,3194 @@ +hlsl.getdimensions.dx10.frag +Shader version: 450 +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}) +0:46 Function Parameters: +0:? Sequence +0:65 Sequence +0:65 move second child to first child ( temp uint) +0:65 'sizeQueryTemp' ( temp uint) +0:65 textureSize ( temp uint) +0:65 'g_tTex1df4' (layout( binding=0) uniform texture1D) +0:65 Constant: +0:65 0 (const int) +0:65 move second child to first child ( temp uint) +0:65 'WidthU' ( temp uint) +0:65 'sizeQueryTemp' ( temp uint) +0:66 Sequence +0:66 move second child to first child ( temp uint) +0:66 'sizeQueryTemp' ( temp uint) +0:66 textureSize ( temp uint) +0:66 'g_tTex1df4' (layout( binding=0) uniform texture1D) +0:66 Constant: +0:66 6 (const uint) +0:66 move second child to first child ( temp uint) +0:66 'WidthU' ( temp uint) +0:66 'sizeQueryTemp' ( temp uint) +0:66 move second child to first child ( temp uint) +0:66 'NumberOfLevelsU' ( temp uint) +0:66 textureQueryLevels ( temp uint) +0:66 'g_tTex1df4' (layout( binding=0) uniform texture1D) +0:69 Sequence +0:69 move second child to first child ( temp uint) +0:69 'sizeQueryTemp' ( temp uint) +0:69 textureSize ( temp uint) +0:69 'g_tTex1di4' ( uniform itexture1D) +0:69 Constant: +0:69 0 (const int) +0:69 move second child to first child ( temp uint) +0:69 'WidthU' ( temp uint) +0:69 'sizeQueryTemp' ( temp uint) +0:70 Sequence +0:70 move second child to first child ( temp uint) +0:70 'sizeQueryTemp' ( temp uint) +0:70 textureSize ( temp uint) +0:70 'g_tTex1di4' ( uniform itexture1D) +0:70 Constant: +0:70 6 (const uint) +0:70 move second child to first child ( temp uint) +0:70 'WidthU' ( temp uint) +0:70 'sizeQueryTemp' ( temp uint) +0:70 move second child to first child ( temp uint) +0:70 'NumberOfLevelsU' ( temp uint) +0:70 textureQueryLevels ( temp uint) +0:70 'g_tTex1di4' ( uniform itexture1D) +0:73 Sequence +0:73 move second child to first child ( temp uint) +0:73 'sizeQueryTemp' ( temp uint) +0:73 textureSize ( temp uint) +0:73 'g_tTex1du4' ( uniform utexture1D) +0:73 Constant: +0:73 0 (const int) +0:73 move second child to first child ( temp uint) +0:73 'WidthU' ( temp uint) +0:73 'sizeQueryTemp' ( temp uint) +0:74 Sequence +0:74 move second child to first child ( temp uint) +0:74 'sizeQueryTemp' ( temp uint) +0:74 textureSize ( temp uint) +0:74 'g_tTex1du4' ( uniform utexture1D) +0:74 Constant: +0:74 6 (const uint) +0:74 move second child to first child ( temp uint) +0:74 'WidthU' ( temp uint) +0:74 'sizeQueryTemp' ( temp uint) +0:74 move second child to first child ( temp uint) +0:74 'NumberOfLevelsU' ( temp uint) +0:74 textureQueryLevels ( temp uint) +0:74 'g_tTex1du4' ( uniform utexture1D) +0:77 Sequence +0:77 move second child to first child ( temp 2-component vector of uint) +0:77 'sizeQueryTemp' ( temp 2-component vector of uint) +0:77 textureSize ( temp 2-component vector of uint) +0:77 'g_tTex1df4a' ( uniform texture1DArray) +0:77 Constant: +0:77 0 (const int) +0:77 move second child to first child ( temp uint) +0:77 'WidthU' ( temp uint) +0:77 direct index ( temp uint) +0:77 'sizeQueryTemp' ( temp 2-component vector of uint) +0:77 Constant: +0:77 0 (const int) +0:77 move second child to first child ( temp uint) +0:77 'ElementsU' ( temp uint) +0:77 direct index ( temp uint) +0:77 'sizeQueryTemp' ( temp 2-component vector of uint) +0:77 Constant: +0:77 1 (const int) +0:78 Sequence +0:78 move second child to first child ( temp 2-component vector of uint) +0:78 'sizeQueryTemp' ( temp 2-component vector of uint) +0:78 textureSize ( temp 2-component vector of uint) +0:78 'g_tTex1df4a' ( uniform texture1DArray) +0:78 Constant: +0:78 6 (const uint) +0:78 move second child to first child ( temp uint) +0:78 'WidthU' ( temp uint) +0:78 direct index ( temp uint) +0:78 'sizeQueryTemp' ( temp 2-component vector of uint) +0:78 Constant: +0:78 0 (const int) +0:78 move second child to first child ( temp uint) +0:78 'ElementsU' ( temp uint) +0:78 direct index ( temp uint) +0:78 'sizeQueryTemp' ( temp 2-component vector of uint) +0:78 Constant: +0:78 1 (const int) +0:78 move second child to first child ( temp uint) +0:78 'NumberOfLevelsU' ( temp uint) +0:78 textureQueryLevels ( temp uint) +0:78 'g_tTex1df4a' ( uniform texture1DArray) +0:81 Sequence +0:81 move second child to first child ( temp 2-component vector of uint) +0:81 'sizeQueryTemp' ( temp 2-component vector of uint) +0:81 textureSize ( temp 2-component vector of uint) +0:81 'g_tTex1di4a' ( uniform itexture1DArray) +0:81 Constant: +0:81 0 (const int) +0:81 move second child to first child ( temp uint) +0:81 'WidthU' ( temp uint) +0:81 direct index ( temp uint) +0:81 'sizeQueryTemp' ( temp 2-component vector of uint) +0:81 Constant: +0:81 0 (const int) +0:81 move second child to first child ( temp uint) +0:81 'ElementsU' ( temp uint) +0:81 direct index ( temp uint) +0:81 'sizeQueryTemp' ( temp 2-component vector of uint) +0:81 Constant: +0:81 1 (const int) +0:82 Sequence +0:82 move second child to first child ( temp 2-component vector of uint) +0:82 'sizeQueryTemp' ( temp 2-component vector of uint) +0:82 textureSize ( temp 2-component vector of uint) +0:82 'g_tTex1di4a' ( uniform itexture1DArray) +0:82 Constant: +0:82 6 (const uint) +0:82 move second child to first child ( temp uint) +0:82 'WidthU' ( temp uint) +0:82 direct index ( temp uint) +0:82 'sizeQueryTemp' ( temp 2-component vector of uint) +0:82 Constant: +0:82 0 (const int) +0:82 move second child to first child ( temp uint) +0:82 'ElementsU' ( temp uint) +0:82 direct index ( temp uint) +0:82 'sizeQueryTemp' ( temp 2-component vector of uint) +0:82 Constant: +0:82 1 (const int) +0:82 move second child to first child ( temp uint) +0:82 'NumberOfLevelsU' ( temp uint) +0:82 textureQueryLevels ( temp uint) +0:82 'g_tTex1di4a' ( uniform itexture1DArray) +0:85 Sequence +0:85 move second child to first child ( temp 2-component vector of uint) +0:85 'sizeQueryTemp' ( temp 2-component vector of uint) +0:85 textureSize ( temp 2-component vector of uint) +0:85 'g_tTex1du4a' ( uniform utexture1DArray) +0:85 Constant: +0:85 0 (const int) +0:85 move second child to first child ( temp uint) +0:85 'WidthU' ( temp uint) +0:85 direct index ( temp uint) +0:85 'sizeQueryTemp' ( temp 2-component vector of uint) +0:85 Constant: +0:85 0 (const int) +0:85 move second child to first child ( temp uint) +0:85 'ElementsU' ( temp uint) +0:85 direct index ( temp uint) +0:85 'sizeQueryTemp' ( temp 2-component vector of uint) +0:85 Constant: +0:85 1 (const int) +0:86 Sequence +0:86 move second child to first child ( temp 2-component vector of uint) +0:86 'sizeQueryTemp' ( temp 2-component vector of uint) +0:86 textureSize ( temp 2-component vector of uint) +0:86 'g_tTex1du4a' ( uniform utexture1DArray) +0:86 Constant: +0:86 6 (const uint) +0:86 move second child to first child ( temp uint) +0:86 'WidthU' ( temp uint) +0:86 direct index ( temp uint) +0:86 'sizeQueryTemp' ( temp 2-component vector of uint) +0:86 Constant: +0:86 0 (const int) +0:86 move second child to first child ( temp uint) +0:86 'ElementsU' ( temp uint) +0:86 direct index ( temp uint) +0:86 'sizeQueryTemp' ( temp 2-component vector of uint) +0:86 Constant: +0:86 1 (const int) +0:86 move second child to first child ( temp uint) +0:86 'NumberOfLevelsU' ( temp uint) +0:86 textureQueryLevels ( temp uint) +0:86 'g_tTex1du4a' ( uniform utexture1DArray) +0:89 Sequence +0:89 move second child to first child ( temp 2-component vector of uint) +0:89 'sizeQueryTemp' ( temp 2-component vector of uint) +0:89 textureSize ( temp 2-component vector of uint) +0:89 'g_tTex2df4' ( uniform texture2D) +0:89 Constant: +0:89 0 (const int) +0:89 move second child to first child ( temp uint) +0:89 'WidthU' ( temp uint) +0:89 direct index ( temp uint) +0:89 'sizeQueryTemp' ( temp 2-component vector of uint) +0:89 Constant: +0:89 0 (const int) +0:89 move second child to first child ( temp uint) +0:89 'HeightU' ( temp uint) +0:89 direct index ( temp uint) +0:89 'sizeQueryTemp' ( temp 2-component vector of uint) +0:89 Constant: +0:89 1 (const int) +0:90 Sequence +0:90 move second child to first child ( temp 2-component vector of uint) +0:90 'sizeQueryTemp' ( temp 2-component vector of uint) +0:90 textureSize ( temp 2-component vector of uint) +0:90 'g_tTex2df4' ( uniform texture2D) +0:90 Constant: +0:90 6 (const uint) +0:90 move second child to first child ( temp uint) +0:90 'WidthU' ( temp uint) +0:90 direct index ( temp uint) +0:90 'sizeQueryTemp' ( temp 2-component vector of uint) +0:90 Constant: +0:90 0 (const int) +0:90 move second child to first child ( temp uint) +0:90 'HeightU' ( temp uint) +0:90 direct index ( temp uint) +0:90 'sizeQueryTemp' ( temp 2-component vector of uint) +0:90 Constant: +0:90 1 (const int) +0:90 move second child to first child ( temp uint) +0:90 'NumberOfLevelsU' ( temp uint) +0:90 textureQueryLevels ( temp uint) +0:90 'g_tTex2df4' ( uniform texture2D) +0:93 Sequence +0:93 move second child to first child ( temp 2-component vector of uint) +0:93 'sizeQueryTemp' ( temp 2-component vector of uint) +0:93 textureSize ( temp 2-component vector of uint) +0:93 'g_tTex2di4' ( uniform itexture2D) +0:93 Constant: +0:93 0 (const int) +0:93 move second child to first child ( temp uint) +0:93 'WidthU' ( temp uint) +0:93 direct index ( temp uint) +0:93 'sizeQueryTemp' ( temp 2-component vector of uint) +0:93 Constant: +0:93 0 (const int) +0:93 move second child to first child ( temp uint) +0:93 'HeightU' ( temp uint) +0:93 direct index ( temp uint) +0:93 'sizeQueryTemp' ( temp 2-component vector of uint) +0:93 Constant: +0:93 1 (const int) +0:94 Sequence +0:94 move second child to first child ( temp 2-component vector of uint) +0:94 'sizeQueryTemp' ( temp 2-component vector of uint) +0:94 textureSize ( temp 2-component vector of uint) +0:94 'g_tTex2di4' ( uniform itexture2D) +0:94 Constant: +0:94 6 (const uint) +0:94 move second child to first child ( temp uint) +0:94 'WidthU' ( temp uint) +0:94 direct index ( temp uint) +0:94 'sizeQueryTemp' ( temp 2-component vector of uint) +0:94 Constant: +0:94 0 (const int) +0:94 move second child to first child ( temp uint) +0:94 'HeightU' ( temp uint) +0:94 direct index ( temp uint) +0:94 'sizeQueryTemp' ( temp 2-component vector of uint) +0:94 Constant: +0:94 1 (const int) +0:94 move second child to first child ( temp uint) +0:94 'NumberOfLevelsU' ( temp uint) +0:94 textureQueryLevels ( temp uint) +0:94 'g_tTex2di4' ( uniform itexture2D) +0:97 Sequence +0:97 move second child to first child ( temp 2-component vector of uint) +0:97 'sizeQueryTemp' ( temp 2-component vector of uint) +0:97 textureSize ( temp 2-component vector of uint) +0:97 'g_tTex2du4' ( uniform utexture2D) +0:97 Constant: +0:97 0 (const int) +0:97 move second child to first child ( temp uint) +0:97 'WidthU' ( temp uint) +0:97 direct index ( temp uint) +0:97 'sizeQueryTemp' ( temp 2-component vector of uint) +0:97 Constant: +0:97 0 (const int) +0:97 move second child to first child ( temp uint) +0:97 'HeightU' ( temp uint) +0:97 direct index ( temp uint) +0:97 'sizeQueryTemp' ( temp 2-component vector of uint) +0:97 Constant: +0:97 1 (const int) +0:98 Sequence +0:98 move second child to first child ( temp 2-component vector of uint) +0:98 'sizeQueryTemp' ( temp 2-component vector of uint) +0:98 textureSize ( temp 2-component vector of uint) +0:98 'g_tTex2du4' ( uniform utexture2D) +0:98 Constant: +0:98 6 (const uint) +0:98 move second child to first child ( temp uint) +0:98 'WidthU' ( temp uint) +0:98 direct index ( temp uint) +0:98 'sizeQueryTemp' ( temp 2-component vector of uint) +0:98 Constant: +0:98 0 (const int) +0:98 move second child to first child ( temp uint) +0:98 'HeightU' ( temp uint) +0:98 direct index ( temp uint) +0:98 'sizeQueryTemp' ( temp 2-component vector of uint) +0:98 Constant: +0:98 1 (const int) +0:98 move second child to first child ( temp uint) +0:98 'NumberOfLevelsU' ( temp uint) +0:98 textureQueryLevels ( temp uint) +0:98 'g_tTex2du4' ( uniform utexture2D) +0:101 Sequence +0:101 move second child to first child ( temp 3-component vector of uint) +0:101 'sizeQueryTemp' ( temp 3-component vector of uint) +0:101 textureSize ( temp 3-component vector of uint) +0:101 'g_tTex2df4a' ( uniform texture2DArray) +0:101 Constant: +0:101 0 (const int) +0:101 move second child to first child ( temp uint) +0:101 'WidthU' ( temp uint) +0:101 direct index ( temp uint) +0:101 'sizeQueryTemp' ( temp 3-component vector of uint) +0:101 Constant: +0:101 0 (const int) +0:101 move second child to first child ( temp uint) +0:101 'HeightU' ( temp uint) +0:101 direct index ( temp uint) +0:101 'sizeQueryTemp' ( temp 3-component vector of uint) +0:101 Constant: +0:101 1 (const int) +0:101 move second child to first child ( temp uint) +0:101 'ElementsU' ( temp uint) +0:101 direct index ( temp uint) +0:101 'sizeQueryTemp' ( temp 3-component vector of uint) +0:101 Constant: +0:101 2 (const int) +0:102 Sequence +0:102 move second child to first child ( temp 3-component vector of uint) +0:102 'sizeQueryTemp' ( temp 3-component vector of uint) +0:102 textureSize ( temp 3-component vector of uint) +0:102 'g_tTex2df4a' ( uniform texture2DArray) +0:102 Constant: +0:102 6 (const uint) +0:102 move second child to first child ( temp uint) +0:102 'WidthU' ( temp uint) +0:102 direct index ( temp uint) +0:102 'sizeQueryTemp' ( temp 3-component vector of uint) +0:102 Constant: +0:102 0 (const int) +0:102 move second child to first child ( temp uint) +0:102 'HeightU' ( temp uint) +0:102 direct index ( temp uint) +0:102 'sizeQueryTemp' ( temp 3-component vector of uint) +0:102 Constant: +0:102 1 (const int) +0:102 move second child to first child ( temp uint) +0:102 'ElementsU' ( temp uint) +0:102 direct index ( temp uint) +0:102 'sizeQueryTemp' ( temp 3-component vector of uint) +0:102 Constant: +0:102 2 (const int) +0:102 move second child to first child ( temp uint) +0:102 'NumberOfLevelsU' ( temp uint) +0:102 textureQueryLevels ( temp uint) +0:102 'g_tTex2df4a' ( uniform texture2DArray) +0:105 Sequence +0:105 move second child to first child ( temp 3-component vector of uint) +0:105 'sizeQueryTemp' ( temp 3-component vector of uint) +0:105 textureSize ( temp 3-component vector of uint) +0:105 'g_tTex2di4a' ( uniform itexture2DArray) +0:105 Constant: +0:105 0 (const int) +0:105 move second child to first child ( temp uint) +0:105 'WidthU' ( temp uint) +0:105 direct index ( temp uint) +0:105 'sizeQueryTemp' ( temp 3-component vector of uint) +0:105 Constant: +0:105 0 (const int) +0:105 move second child to first child ( temp uint) +0:105 'HeightU' ( temp uint) +0:105 direct index ( temp uint) +0:105 'sizeQueryTemp' ( temp 3-component vector of uint) +0:105 Constant: +0:105 1 (const int) +0:105 move second child to first child ( temp uint) +0:105 'ElementsU' ( temp uint) +0:105 direct index ( temp uint) +0:105 'sizeQueryTemp' ( temp 3-component vector of uint) +0:105 Constant: +0:105 2 (const int) +0:106 Sequence +0:106 move second child to first child ( temp 3-component vector of uint) +0:106 'sizeQueryTemp' ( temp 3-component vector of uint) +0:106 textureSize ( temp 3-component vector of uint) +0:106 'g_tTex2di4a' ( uniform itexture2DArray) +0:106 Constant: +0:106 6 (const uint) +0:106 move second child to first child ( temp uint) +0:106 'WidthU' ( temp uint) +0:106 direct index ( temp uint) +0:106 'sizeQueryTemp' ( temp 3-component vector of uint) +0:106 Constant: +0:106 0 (const int) +0:106 move second child to first child ( temp uint) +0:106 'HeightU' ( temp uint) +0:106 direct index ( temp uint) +0:106 'sizeQueryTemp' ( temp 3-component vector of uint) +0:106 Constant: +0:106 1 (const int) +0:106 move second child to first child ( temp uint) +0:106 'ElementsU' ( temp uint) +0:106 direct index ( temp uint) +0:106 'sizeQueryTemp' ( temp 3-component vector of uint) +0:106 Constant: +0:106 2 (const int) +0:106 move second child to first child ( temp uint) +0:106 'NumberOfLevelsU' ( temp uint) +0:106 textureQueryLevels ( temp uint) +0:106 'g_tTex2di4a' ( uniform itexture2DArray) +0:109 Sequence +0:109 move second child to first child ( temp 3-component vector of uint) +0:109 'sizeQueryTemp' ( temp 3-component vector of uint) +0:109 textureSize ( temp 3-component vector of uint) +0:109 'g_tTex2du4a' ( uniform utexture2DArray) +0:109 Constant: +0:109 0 (const int) +0:109 move second child to first child ( temp uint) +0:109 'WidthU' ( temp uint) +0:109 direct index ( temp uint) +0:109 'sizeQueryTemp' ( temp 3-component vector of uint) +0:109 Constant: +0:109 0 (const int) +0:109 move second child to first child ( temp uint) +0:109 'HeightU' ( temp uint) +0:109 direct index ( temp uint) +0:109 'sizeQueryTemp' ( temp 3-component vector of uint) +0:109 Constant: +0:109 1 (const int) +0:109 move second child to first child ( temp uint) +0:109 'ElementsU' ( temp uint) +0:109 direct index ( temp uint) +0:109 'sizeQueryTemp' ( temp 3-component vector of uint) +0:109 Constant: +0:109 2 (const int) +0:110 Sequence +0:110 move second child to first child ( temp 3-component vector of uint) +0:110 'sizeQueryTemp' ( temp 3-component vector of uint) +0:110 textureSize ( temp 3-component vector of uint) +0:110 'g_tTex2du4a' ( uniform utexture2DArray) +0:110 Constant: +0:110 6 (const uint) +0:110 move second child to first child ( temp uint) +0:110 'WidthU' ( temp uint) +0:110 direct index ( temp uint) +0:110 'sizeQueryTemp' ( temp 3-component vector of uint) +0:110 Constant: +0:110 0 (const int) +0:110 move second child to first child ( temp uint) +0:110 'HeightU' ( temp uint) +0:110 direct index ( temp uint) +0:110 'sizeQueryTemp' ( temp 3-component vector of uint) +0:110 Constant: +0:110 1 (const int) +0:110 move second child to first child ( temp uint) +0:110 'ElementsU' ( temp uint) +0:110 direct index ( temp uint) +0:110 'sizeQueryTemp' ( temp 3-component vector of uint) +0:110 Constant: +0:110 2 (const int) +0:110 move second child to first child ( temp uint) +0:110 'NumberOfLevelsU' ( temp uint) +0:110 textureQueryLevels ( temp uint) +0:110 'g_tTex2du4a' ( uniform utexture2DArray) +0:113 Sequence +0:113 move second child to first child ( temp 3-component vector of uint) +0:113 'sizeQueryTemp' ( temp 3-component vector of uint) +0:113 textureSize ( temp 3-component vector of uint) +0:113 'g_tTex3df4' ( uniform texture3D) +0:113 Constant: +0:113 0 (const int) +0:113 move second child to first child ( temp uint) +0:113 'WidthU' ( temp uint) +0:113 direct index ( temp uint) +0:113 'sizeQueryTemp' ( temp 3-component vector of uint) +0:113 Constant: +0:113 0 (const int) +0:113 move second child to first child ( temp uint) +0:113 'HeightU' ( temp uint) +0:113 direct index ( temp uint) +0:113 'sizeQueryTemp' ( temp 3-component vector of uint) +0:113 Constant: +0:113 1 (const int) +0:113 move second child to first child ( temp uint) +0:113 'DepthU' ( temp uint) +0:113 direct index ( temp uint) +0:113 'sizeQueryTemp' ( temp 3-component vector of uint) +0:113 Constant: +0:113 2 (const int) +0:114 Sequence +0:114 move second child to first child ( temp 3-component vector of uint) +0:114 'sizeQueryTemp' ( temp 3-component vector of uint) +0:114 textureSize ( temp 3-component vector of uint) +0:114 'g_tTex3df4' ( uniform texture3D) +0:114 Constant: +0:114 6 (const uint) +0:114 move second child to first child ( temp uint) +0:114 'WidthU' ( temp uint) +0:114 direct index ( temp uint) +0:114 'sizeQueryTemp' ( temp 3-component vector of uint) +0:114 Constant: +0:114 0 (const int) +0:114 move second child to first child ( temp uint) +0:114 'HeightU' ( temp uint) +0:114 direct index ( temp uint) +0:114 'sizeQueryTemp' ( temp 3-component vector of uint) +0:114 Constant: +0:114 1 (const int) +0:114 move second child to first child ( temp uint) +0:114 'DepthU' ( temp uint) +0:114 direct index ( temp uint) +0:114 'sizeQueryTemp' ( temp 3-component vector of uint) +0:114 Constant: +0:114 2 (const int) +0:114 move second child to first child ( temp uint) +0:114 'NumberOfLevelsU' ( temp uint) +0:114 textureQueryLevels ( temp uint) +0:114 'g_tTex3df4' ( uniform texture3D) +0:117 Sequence +0:117 move second child to first child ( temp 3-component vector of uint) +0:117 'sizeQueryTemp' ( temp 3-component vector of uint) +0:117 textureSize ( temp 3-component vector of uint) +0:117 'g_tTex3di4' ( uniform itexture3D) +0:117 Constant: +0:117 0 (const int) +0:117 move second child to first child ( temp uint) +0:117 'WidthU' ( temp uint) +0:117 direct index ( temp uint) +0:117 'sizeQueryTemp' ( temp 3-component vector of uint) +0:117 Constant: +0:117 0 (const int) +0:117 move second child to first child ( temp uint) +0:117 'HeightU' ( temp uint) +0:117 direct index ( temp uint) +0:117 'sizeQueryTemp' ( temp 3-component vector of uint) +0:117 Constant: +0:117 1 (const int) +0:117 move second child to first child ( temp uint) +0:117 'DepthU' ( temp uint) +0:117 direct index ( temp uint) +0:117 'sizeQueryTemp' ( temp 3-component vector of uint) +0:117 Constant: +0:117 2 (const int) +0:118 Sequence +0:118 move second child to first child ( temp 3-component vector of uint) +0:118 'sizeQueryTemp' ( temp 3-component vector of uint) +0:118 textureSize ( temp 3-component vector of uint) +0:118 'g_tTex3di4' ( uniform itexture3D) +0:118 Constant: +0:118 6 (const uint) +0:118 move second child to first child ( temp uint) +0:118 'WidthU' ( temp uint) +0:118 direct index ( temp uint) +0:118 'sizeQueryTemp' ( temp 3-component vector of uint) +0:118 Constant: +0:118 0 (const int) +0:118 move second child to first child ( temp uint) +0:118 'HeightU' ( temp uint) +0:118 direct index ( temp uint) +0:118 'sizeQueryTemp' ( temp 3-component vector of uint) +0:118 Constant: +0:118 1 (const int) +0:118 move second child to first child ( temp uint) +0:118 'DepthU' ( temp uint) +0:118 direct index ( temp uint) +0:118 'sizeQueryTemp' ( temp 3-component vector of uint) +0:118 Constant: +0:118 2 (const int) +0:118 move second child to first child ( temp uint) +0:118 'NumberOfLevelsU' ( temp uint) +0:118 textureQueryLevels ( temp uint) +0:118 'g_tTex3di4' ( uniform itexture3D) +0:121 Sequence +0:121 move second child to first child ( temp 3-component vector of uint) +0:121 'sizeQueryTemp' ( temp 3-component vector of uint) +0:121 textureSize ( temp 3-component vector of uint) +0:121 'g_tTex3du4' ( uniform utexture3D) +0:121 Constant: +0:121 0 (const int) +0:121 move second child to first child ( temp uint) +0:121 'WidthU' ( temp uint) +0:121 direct index ( temp uint) +0:121 'sizeQueryTemp' ( temp 3-component vector of uint) +0:121 Constant: +0:121 0 (const int) +0:121 move second child to first child ( temp uint) +0:121 'HeightU' ( temp uint) +0:121 direct index ( temp uint) +0:121 'sizeQueryTemp' ( temp 3-component vector of uint) +0:121 Constant: +0:121 1 (const int) +0:121 move second child to first child ( temp uint) +0:121 'DepthU' ( temp uint) +0:121 direct index ( temp uint) +0:121 'sizeQueryTemp' ( temp 3-component vector of uint) +0:121 Constant: +0:121 2 (const int) +0:122 Sequence +0:122 move second child to first child ( temp 3-component vector of uint) +0:122 'sizeQueryTemp' ( temp 3-component vector of uint) +0:122 textureSize ( temp 3-component vector of uint) +0:122 'g_tTex3du4' ( uniform utexture3D) +0:122 Constant: +0:122 6 (const uint) +0:122 move second child to first child ( temp uint) +0:122 'WidthU' ( temp uint) +0:122 direct index ( temp uint) +0:122 'sizeQueryTemp' ( temp 3-component vector of uint) +0:122 Constant: +0:122 0 (const int) +0:122 move second child to first child ( temp uint) +0:122 'HeightU' ( temp uint) +0:122 direct index ( temp uint) +0:122 'sizeQueryTemp' ( temp 3-component vector of uint) +0:122 Constant: +0:122 1 (const int) +0:122 move second child to first child ( temp uint) +0:122 'DepthU' ( temp uint) +0:122 direct index ( temp uint) +0:122 'sizeQueryTemp' ( temp 3-component vector of uint) +0:122 Constant: +0:122 2 (const int) +0:122 move second child to first child ( temp uint) +0:122 'NumberOfLevelsU' ( temp uint) +0:122 textureQueryLevels ( temp uint) +0:122 'g_tTex3du4' ( uniform utexture3D) +0:125 Sequence +0:125 move second child to first child ( temp 2-component vector of uint) +0:125 'sizeQueryTemp' ( temp 2-component vector of uint) +0:125 textureSize ( temp 2-component vector of uint) +0:125 'g_tTexcdf4' ( uniform textureCube) +0:125 Constant: +0:125 0 (const int) +0:125 move second child to first child ( temp uint) +0:125 'WidthU' ( temp uint) +0:125 direct index ( temp uint) +0:125 'sizeQueryTemp' ( temp 2-component vector of uint) +0:125 Constant: +0:125 0 (const int) +0:125 move second child to first child ( temp uint) +0:125 'HeightU' ( temp uint) +0:125 direct index ( temp uint) +0:125 'sizeQueryTemp' ( temp 2-component vector of uint) +0:125 Constant: +0:125 1 (const int) +0:126 Sequence +0:126 move second child to first child ( temp 2-component vector of uint) +0:126 'sizeQueryTemp' ( temp 2-component vector of uint) +0:126 textureSize ( temp 2-component vector of uint) +0:126 'g_tTexcdf4' ( uniform textureCube) +0:126 Constant: +0:126 6 (const uint) +0:126 move second child to first child ( temp uint) +0:126 'WidthU' ( temp uint) +0:126 direct index ( temp uint) +0:126 'sizeQueryTemp' ( temp 2-component vector of uint) +0:126 Constant: +0:126 0 (const int) +0:126 move second child to first child ( temp uint) +0:126 'HeightU' ( temp uint) +0:126 direct index ( temp uint) +0:126 'sizeQueryTemp' ( temp 2-component vector of uint) +0:126 Constant: +0:126 1 (const int) +0:126 move second child to first child ( temp uint) +0:126 'NumberOfLevelsU' ( temp uint) +0:126 textureQueryLevels ( temp uint) +0:126 'g_tTexcdf4' ( uniform textureCube) +0:129 Sequence +0:129 move second child to first child ( temp 2-component vector of uint) +0:129 'sizeQueryTemp' ( temp 2-component vector of uint) +0:129 textureSize ( temp 2-component vector of uint) +0:129 'g_tTexcdi4' ( uniform itextureCube) +0:129 Constant: +0:129 0 (const int) +0:129 move second child to first child ( temp uint) +0:129 'WidthU' ( temp uint) +0:129 direct index ( temp uint) +0:129 'sizeQueryTemp' ( temp 2-component vector of uint) +0:129 Constant: +0:129 0 (const int) +0:129 move second child to first child ( temp uint) +0:129 'HeightU' ( temp uint) +0:129 direct index ( temp uint) +0:129 'sizeQueryTemp' ( temp 2-component vector of uint) +0:129 Constant: +0:129 1 (const int) +0:130 Sequence +0:130 move second child to first child ( temp 2-component vector of uint) +0:130 'sizeQueryTemp' ( temp 2-component vector of uint) +0:130 textureSize ( temp 2-component vector of uint) +0:130 'g_tTexcdi4' ( uniform itextureCube) +0:130 Constant: +0:130 6 (const uint) +0:130 move second child to first child ( temp uint) +0:130 'WidthU' ( temp uint) +0:130 direct index ( temp uint) +0:130 'sizeQueryTemp' ( temp 2-component vector of uint) +0:130 Constant: +0:130 0 (const int) +0:130 move second child to first child ( temp uint) +0:130 'HeightU' ( temp uint) +0:130 direct index ( temp uint) +0:130 'sizeQueryTemp' ( temp 2-component vector of uint) +0:130 Constant: +0:130 1 (const int) +0:130 move second child to first child ( temp uint) +0:130 'NumberOfLevelsU' ( temp uint) +0:130 textureQueryLevels ( temp uint) +0:130 'g_tTexcdi4' ( uniform itextureCube) +0:133 Sequence +0:133 move second child to first child ( temp 2-component vector of uint) +0:133 'sizeQueryTemp' ( temp 2-component vector of uint) +0:133 textureSize ( temp 2-component vector of uint) +0:133 'g_tTexcdu4' ( uniform utextureCube) +0:133 Constant: +0:133 0 (const int) +0:133 move second child to first child ( temp uint) +0:133 'WidthU' ( temp uint) +0:133 direct index ( temp uint) +0:133 'sizeQueryTemp' ( temp 2-component vector of uint) +0:133 Constant: +0:133 0 (const int) +0:133 move second child to first child ( temp uint) +0:133 'HeightU' ( temp uint) +0:133 direct index ( temp uint) +0:133 'sizeQueryTemp' ( temp 2-component vector of uint) +0:133 Constant: +0:133 1 (const int) +0:134 Sequence +0:134 move second child to first child ( temp 2-component vector of uint) +0:134 'sizeQueryTemp' ( temp 2-component vector of uint) +0:134 textureSize ( temp 2-component vector of uint) +0:134 'g_tTexcdu4' ( uniform utextureCube) +0:134 Constant: +0:134 6 (const uint) +0:134 move second child to first child ( temp uint) +0:134 'WidthU' ( temp uint) +0:134 direct index ( temp uint) +0:134 'sizeQueryTemp' ( temp 2-component vector of uint) +0:134 Constant: +0:134 0 (const int) +0:134 move second child to first child ( temp uint) +0:134 'HeightU' ( temp uint) +0:134 direct index ( temp uint) +0:134 'sizeQueryTemp' ( temp 2-component vector of uint) +0:134 Constant: +0:134 1 (const int) +0:134 move second child to first child ( temp uint) +0:134 'NumberOfLevelsU' ( temp uint) +0:134 textureQueryLevels ( temp uint) +0:134 'g_tTexcdu4' ( uniform utextureCube) +0:137 Sequence +0:137 move second child to first child ( temp 3-component vector of uint) +0:137 'sizeQueryTemp' ( temp 3-component vector of uint) +0:137 textureSize ( temp 3-component vector of uint) +0:137 'g_tTexcdf4a' ( uniform textureCubeArray) +0:137 Constant: +0:137 0 (const int) +0:137 move second child to first child ( temp uint) +0:137 'WidthU' ( temp uint) +0:137 direct index ( temp uint) +0:137 'sizeQueryTemp' ( temp 3-component vector of uint) +0:137 Constant: +0:137 0 (const int) +0:137 move second child to first child ( temp uint) +0:137 'HeightU' ( temp uint) +0:137 direct index ( temp uint) +0:137 'sizeQueryTemp' ( temp 3-component vector of uint) +0:137 Constant: +0:137 1 (const int) +0:137 move second child to first child ( temp uint) +0:137 'ElementsU' ( temp uint) +0:137 direct index ( temp uint) +0:137 'sizeQueryTemp' ( temp 3-component vector of uint) +0:137 Constant: +0:137 2 (const int) +0:138 Sequence +0:138 move second child to first child ( temp 3-component vector of uint) +0:138 'sizeQueryTemp' ( temp 3-component vector of uint) +0:138 textureSize ( temp 3-component vector of uint) +0:138 'g_tTexcdf4a' ( uniform textureCubeArray) +0:138 Constant: +0:138 6 (const uint) +0:138 move second child to first child ( temp uint) +0:138 'WidthU' ( temp uint) +0:138 direct index ( temp uint) +0:138 'sizeQueryTemp' ( temp 3-component vector of uint) +0:138 Constant: +0:138 0 (const int) +0:138 move second child to first child ( temp uint) +0:138 'HeightU' ( temp uint) +0:138 direct index ( temp uint) +0:138 'sizeQueryTemp' ( temp 3-component vector of uint) +0:138 Constant: +0:138 1 (const int) +0:138 move second child to first child ( temp uint) +0:138 'ElementsU' ( temp uint) +0:138 direct index ( temp uint) +0:138 'sizeQueryTemp' ( temp 3-component vector of uint) +0:138 Constant: +0:138 2 (const int) +0:138 move second child to first child ( temp uint) +0:138 'NumberOfLevelsU' ( temp uint) +0:138 textureQueryLevels ( temp uint) +0:138 'g_tTexcdf4a' ( uniform textureCubeArray) +0:141 Sequence +0:141 move second child to first child ( temp 3-component vector of uint) +0:141 'sizeQueryTemp' ( temp 3-component vector of uint) +0:141 textureSize ( temp 3-component vector of uint) +0:141 'g_tTexcdi4a' ( uniform itextureCubeArray) +0:141 Constant: +0:141 0 (const int) +0:141 move second child to first child ( temp uint) +0:141 'WidthU' ( temp uint) +0:141 direct index ( temp uint) +0:141 'sizeQueryTemp' ( temp 3-component vector of uint) +0:141 Constant: +0:141 0 (const int) +0:141 move second child to first child ( temp uint) +0:141 'HeightU' ( temp uint) +0:141 direct index ( temp uint) +0:141 'sizeQueryTemp' ( temp 3-component vector of uint) +0:141 Constant: +0:141 1 (const int) +0:141 move second child to first child ( temp uint) +0:141 'ElementsU' ( temp uint) +0:141 direct index ( temp uint) +0:141 'sizeQueryTemp' ( temp 3-component vector of uint) +0:141 Constant: +0:141 2 (const int) +0:142 Sequence +0:142 move second child to first child ( temp 3-component vector of uint) +0:142 'sizeQueryTemp' ( temp 3-component vector of uint) +0:142 textureSize ( temp 3-component vector of uint) +0:142 'g_tTexcdi4a' ( uniform itextureCubeArray) +0:142 Constant: +0:142 6 (const uint) +0:142 move second child to first child ( temp uint) +0:142 'WidthU' ( temp uint) +0:142 direct index ( temp uint) +0:142 'sizeQueryTemp' ( temp 3-component vector of uint) +0:142 Constant: +0:142 0 (const int) +0:142 move second child to first child ( temp uint) +0:142 'HeightU' ( temp uint) +0:142 direct index ( temp uint) +0:142 'sizeQueryTemp' ( temp 3-component vector of uint) +0:142 Constant: +0:142 1 (const int) +0:142 move second child to first child ( temp uint) +0:142 'ElementsU' ( temp uint) +0:142 direct index ( temp uint) +0:142 'sizeQueryTemp' ( temp 3-component vector of uint) +0:142 Constant: +0:142 2 (const int) +0:142 move second child to first child ( temp uint) +0:142 'NumberOfLevelsU' ( temp uint) +0:142 textureQueryLevels ( temp uint) +0:142 'g_tTexcdi4a' ( uniform itextureCubeArray) +0:145 Sequence +0:145 move second child to first child ( temp 3-component vector of uint) +0:145 'sizeQueryTemp' ( temp 3-component vector of uint) +0:145 textureSize ( temp 3-component vector of uint) +0:145 'g_tTexcdu4a' ( uniform utextureCubeArray) +0:145 Constant: +0:145 0 (const int) +0:145 move second child to first child ( temp uint) +0:145 'WidthU' ( temp uint) +0:145 direct index ( temp uint) +0:145 'sizeQueryTemp' ( temp 3-component vector of uint) +0:145 Constant: +0:145 0 (const int) +0:145 move second child to first child ( temp uint) +0:145 'HeightU' ( temp uint) +0:145 direct index ( temp uint) +0:145 'sizeQueryTemp' ( temp 3-component vector of uint) +0:145 Constant: +0:145 1 (const int) +0:145 move second child to first child ( temp uint) +0:145 'ElementsU' ( temp uint) +0:145 direct index ( temp uint) +0:145 'sizeQueryTemp' ( temp 3-component vector of uint) +0:145 Constant: +0:145 2 (const int) +0:146 Sequence +0:146 move second child to first child ( temp 3-component vector of uint) +0:146 'sizeQueryTemp' ( temp 3-component vector of uint) +0:146 textureSize ( temp 3-component vector of uint) +0:146 'g_tTexcdu4a' ( uniform utextureCubeArray) +0:146 Constant: +0:146 6 (const uint) +0:146 move second child to first child ( temp uint) +0:146 'WidthU' ( temp uint) +0:146 direct index ( temp uint) +0:146 'sizeQueryTemp' ( temp 3-component vector of uint) +0:146 Constant: +0:146 0 (const int) +0:146 move second child to first child ( temp uint) +0:146 'HeightU' ( temp uint) +0:146 direct index ( temp uint) +0:146 'sizeQueryTemp' ( temp 3-component vector of uint) +0:146 Constant: +0:146 1 (const int) +0:146 move second child to first child ( temp uint) +0:146 'ElementsU' ( temp uint) +0:146 direct index ( temp uint) +0:146 'sizeQueryTemp' ( temp 3-component vector of uint) +0:146 Constant: +0:146 2 (const int) +0:146 move second child to first child ( temp uint) +0:146 'NumberOfLevelsU' ( temp uint) +0:146 textureQueryLevels ( temp uint) +0:146 'g_tTexcdu4a' ( uniform utextureCubeArray) +0:149 Sequence +0:149 move second child to first child ( temp 2-component vector of uint) +0:149 'sizeQueryTemp' ( temp 2-component vector of uint) +0:149 textureSize ( temp 2-component vector of uint) +0:149 'g_tTex2dmsf4' ( uniform texture2DMS) +0:149 move second child to first child ( temp uint) +0:149 'WidthU' ( temp uint) +0:149 direct index ( temp uint) +0:149 'sizeQueryTemp' ( temp 2-component vector of uint) +0:149 Constant: +0:149 0 (const int) +0:149 move second child to first child ( temp uint) +0:149 'HeightU' ( temp uint) +0:149 direct index ( temp uint) +0:149 'sizeQueryTemp' ( temp 2-component vector of uint) +0:149 Constant: +0:149 1 (const int) +0:149 move second child to first child ( temp uint) +0:149 'NumberOfSamplesU' ( temp uint) +0:149 imageQuerySamples ( temp uint) +0:149 'g_tTex2dmsf4' ( uniform texture2DMS) +0:152 Sequence +0:152 move second child to first child ( temp 2-component vector of uint) +0:152 'sizeQueryTemp' ( temp 2-component vector of uint) +0:152 textureSize ( temp 2-component vector of uint) +0:152 'g_tTex2dmsi4' ( uniform itexture2DMS) +0:152 move second child to first child ( temp uint) +0:152 'WidthU' ( temp uint) +0:152 direct index ( temp uint) +0:152 'sizeQueryTemp' ( temp 2-component vector of uint) +0:152 Constant: +0:152 0 (const int) +0:152 move second child to first child ( temp uint) +0:152 'HeightU' ( temp uint) +0:152 direct index ( temp uint) +0:152 'sizeQueryTemp' ( temp 2-component vector of uint) +0:152 Constant: +0:152 1 (const int) +0:152 move second child to first child ( temp uint) +0:152 'NumberOfSamplesU' ( temp uint) +0:152 imageQuerySamples ( temp uint) +0:152 'g_tTex2dmsi4' ( uniform itexture2DMS) +0:155 Sequence +0:155 move second child to first child ( temp 2-component vector of uint) +0:155 'sizeQueryTemp' ( temp 2-component vector of uint) +0:155 textureSize ( temp 2-component vector of uint) +0:155 'g_tTex2dmsu4' ( uniform utexture2DMS) +0:155 move second child to first child ( temp uint) +0:155 'WidthU' ( temp uint) +0:155 direct index ( temp uint) +0:155 'sizeQueryTemp' ( temp 2-component vector of uint) +0:155 Constant: +0:155 0 (const int) +0:155 move second child to first child ( temp uint) +0:155 'HeightU' ( temp uint) +0:155 direct index ( temp uint) +0:155 'sizeQueryTemp' ( temp 2-component vector of uint) +0:155 Constant: +0:155 1 (const int) +0:155 move second child to first child ( temp uint) +0:155 'NumberOfSamplesU' ( temp uint) +0:155 imageQuerySamples ( temp uint) +0:155 'g_tTex2dmsu4' ( uniform utexture2DMS) +0:158 Sequence +0:158 move second child to first child ( temp 3-component vector of uint) +0:158 'sizeQueryTemp' ( temp 3-component vector of uint) +0:158 textureSize ( temp 3-component vector of uint) +0:158 'g_tTex2dmsf4a' ( uniform texture2DMSArray) +0:158 move second child to first child ( temp uint) +0:158 'WidthU' ( temp uint) +0:158 direct index ( temp uint) +0:158 'sizeQueryTemp' ( temp 3-component vector of uint) +0:158 Constant: +0:158 0 (const int) +0:158 move second child to first child ( temp uint) +0:158 'HeightU' ( temp uint) +0:158 direct index ( temp uint) +0:158 'sizeQueryTemp' ( temp 3-component vector of uint) +0:158 Constant: +0:158 1 (const int) +0:158 move second child to first child ( temp uint) +0:158 'ElementsU' ( temp uint) +0:158 direct index ( temp uint) +0:158 'sizeQueryTemp' ( temp 3-component vector of uint) +0:158 Constant: +0:158 2 (const int) +0:158 move second child to first child ( temp uint) +0:158 'NumberOfSamplesU' ( temp uint) +0:158 imageQuerySamples ( temp uint) +0:158 'g_tTex2dmsf4a' ( uniform texture2DMSArray) +0:161 Sequence +0:161 move second child to first child ( temp 3-component vector of uint) +0:161 'sizeQueryTemp' ( temp 3-component vector of uint) +0:161 textureSize ( temp 3-component vector of uint) +0:161 'g_tTex2dmsi4a' ( uniform itexture2DMSArray) +0:161 move second child to first child ( temp uint) +0:161 'WidthU' ( temp uint) +0:161 direct index ( temp uint) +0:161 'sizeQueryTemp' ( temp 3-component vector of uint) +0:161 Constant: +0:161 0 (const int) +0:161 move second child to first child ( temp uint) +0:161 'HeightU' ( temp uint) +0:161 direct index ( temp uint) +0:161 'sizeQueryTemp' ( temp 3-component vector of uint) +0:161 Constant: +0:161 1 (const int) +0:161 move second child to first child ( temp uint) +0:161 'ElementsU' ( temp uint) +0:161 direct index ( temp uint) +0:161 'sizeQueryTemp' ( temp 3-component vector of uint) +0:161 Constant: +0:161 2 (const int) +0:161 move second child to first child ( temp uint) +0:161 'NumberOfSamplesU' ( temp uint) +0:161 imageQuerySamples ( temp uint) +0:161 'g_tTex2dmsi4a' ( uniform itexture2DMSArray) +0:164 Sequence +0:164 move second child to first child ( temp 3-component vector of uint) +0:164 'sizeQueryTemp' ( temp 3-component vector of uint) +0:164 textureSize ( temp 3-component vector of uint) +0:164 'g_tTex2dmsu4a' ( uniform utexture2DMSArray) +0:164 move second child to first child ( temp uint) +0:164 'WidthU' ( temp uint) +0:164 direct index ( temp uint) +0:164 'sizeQueryTemp' ( temp 3-component vector of uint) +0:164 Constant: +0:164 0 (const int) +0:164 move second child to first child ( temp uint) +0:164 'HeightU' ( temp uint) +0:164 direct index ( temp uint) +0:164 'sizeQueryTemp' ( temp 3-component vector of uint) +0:164 Constant: +0:164 1 (const int) +0:164 move second child to first child ( temp uint) +0:164 'ElementsU' ( temp uint) +0:164 direct index ( temp uint) +0:164 'sizeQueryTemp' ( temp 3-component vector of uint) +0:164 Constant: +0:164 2 (const int) +0:164 move second child to first child ( temp uint) +0:164 'NumberOfSamplesU' ( temp uint) +0:164 imageQuerySamples ( temp uint) +0:164 'g_tTex2dmsu4a' ( uniform utexture2DMSArray) +0:276 move second child to first child ( temp 4-component vector of float) +0:276 Color: direct index for structure ( temp 4-component vector of float) +0:276 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:276 Constant: +0:276 0 (const int) +0:276 Constant: +0:276 1.000000 +0:276 1.000000 +0:276 1.000000 +0:276 1.000000 +0:277 move second child to first child ( temp float) +0:277 Depth: direct index for structure ( temp float) +0:277 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:277 Constant: +0:277 1 (const int) +0:277 Constant: +0:277 1.000000 +0:279 Branch: Return with expression +0:279 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:46 Function Definition: main( ( temp void) +0:46 Function Parameters: +0:? Sequence +0:46 Sequence +0:46 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:46 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_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_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:? 'g_tTex2dmsf4' ( uniform texture2DMS) +0:? 'g_tTex2dmsi4' ( uniform itexture2DMS) +0:? 'g_tTex2dmsu4' ( uniform utexture2DMS) +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) + + +Linked fragment stage: + + +Shader version: 450 +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}) +0:46 Function Parameters: +0:? Sequence +0:65 Sequence +0:65 move second child to first child ( temp uint) +0:65 'sizeQueryTemp' ( temp uint) +0:65 textureSize ( temp uint) +0:65 'g_tTex1df4' (layout( binding=0) uniform texture1D) +0:65 Constant: +0:65 0 (const int) +0:65 move second child to first child ( temp uint) +0:65 'WidthU' ( temp uint) +0:65 'sizeQueryTemp' ( temp uint) +0:66 Sequence +0:66 move second child to first child ( temp uint) +0:66 'sizeQueryTemp' ( temp uint) +0:66 textureSize ( temp uint) +0:66 'g_tTex1df4' (layout( binding=0) uniform texture1D) +0:66 Constant: +0:66 6 (const uint) +0:66 move second child to first child ( temp uint) +0:66 'WidthU' ( temp uint) +0:66 'sizeQueryTemp' ( temp uint) +0:66 move second child to first child ( temp uint) +0:66 'NumberOfLevelsU' ( temp uint) +0:66 textureQueryLevels ( temp uint) +0:66 'g_tTex1df4' (layout( binding=0) uniform texture1D) +0:69 Sequence +0:69 move second child to first child ( temp uint) +0:69 'sizeQueryTemp' ( temp uint) +0:69 textureSize ( temp uint) +0:69 'g_tTex1di4' ( uniform itexture1D) +0:69 Constant: +0:69 0 (const int) +0:69 move second child to first child ( temp uint) +0:69 'WidthU' ( temp uint) +0:69 'sizeQueryTemp' ( temp uint) +0:70 Sequence +0:70 move second child to first child ( temp uint) +0:70 'sizeQueryTemp' ( temp uint) +0:70 textureSize ( temp uint) +0:70 'g_tTex1di4' ( uniform itexture1D) +0:70 Constant: +0:70 6 (const uint) +0:70 move second child to first child ( temp uint) +0:70 'WidthU' ( temp uint) +0:70 'sizeQueryTemp' ( temp uint) +0:70 move second child to first child ( temp uint) +0:70 'NumberOfLevelsU' ( temp uint) +0:70 textureQueryLevels ( temp uint) +0:70 'g_tTex1di4' ( uniform itexture1D) +0:73 Sequence +0:73 move second child to first child ( temp uint) +0:73 'sizeQueryTemp' ( temp uint) +0:73 textureSize ( temp uint) +0:73 'g_tTex1du4' ( uniform utexture1D) +0:73 Constant: +0:73 0 (const int) +0:73 move second child to first child ( temp uint) +0:73 'WidthU' ( temp uint) +0:73 'sizeQueryTemp' ( temp uint) +0:74 Sequence +0:74 move second child to first child ( temp uint) +0:74 'sizeQueryTemp' ( temp uint) +0:74 textureSize ( temp uint) +0:74 'g_tTex1du4' ( uniform utexture1D) +0:74 Constant: +0:74 6 (const uint) +0:74 move second child to first child ( temp uint) +0:74 'WidthU' ( temp uint) +0:74 'sizeQueryTemp' ( temp uint) +0:74 move second child to first child ( temp uint) +0:74 'NumberOfLevelsU' ( temp uint) +0:74 textureQueryLevels ( temp uint) +0:74 'g_tTex1du4' ( uniform utexture1D) +0:77 Sequence +0:77 move second child to first child ( temp 2-component vector of uint) +0:77 'sizeQueryTemp' ( temp 2-component vector of uint) +0:77 textureSize ( temp 2-component vector of uint) +0:77 'g_tTex1df4a' ( uniform texture1DArray) +0:77 Constant: +0:77 0 (const int) +0:77 move second child to first child ( temp uint) +0:77 'WidthU' ( temp uint) +0:77 direct index ( temp uint) +0:77 'sizeQueryTemp' ( temp 2-component vector of uint) +0:77 Constant: +0:77 0 (const int) +0:77 move second child to first child ( temp uint) +0:77 'ElementsU' ( temp uint) +0:77 direct index ( temp uint) +0:77 'sizeQueryTemp' ( temp 2-component vector of uint) +0:77 Constant: +0:77 1 (const int) +0:78 Sequence +0:78 move second child to first child ( temp 2-component vector of uint) +0:78 'sizeQueryTemp' ( temp 2-component vector of uint) +0:78 textureSize ( temp 2-component vector of uint) +0:78 'g_tTex1df4a' ( uniform texture1DArray) +0:78 Constant: +0:78 6 (const uint) +0:78 move second child to first child ( temp uint) +0:78 'WidthU' ( temp uint) +0:78 direct index ( temp uint) +0:78 'sizeQueryTemp' ( temp 2-component vector of uint) +0:78 Constant: +0:78 0 (const int) +0:78 move second child to first child ( temp uint) +0:78 'ElementsU' ( temp uint) +0:78 direct index ( temp uint) +0:78 'sizeQueryTemp' ( temp 2-component vector of uint) +0:78 Constant: +0:78 1 (const int) +0:78 move second child to first child ( temp uint) +0:78 'NumberOfLevelsU' ( temp uint) +0:78 textureQueryLevels ( temp uint) +0:78 'g_tTex1df4a' ( uniform texture1DArray) +0:81 Sequence +0:81 move second child to first child ( temp 2-component vector of uint) +0:81 'sizeQueryTemp' ( temp 2-component vector of uint) +0:81 textureSize ( temp 2-component vector of uint) +0:81 'g_tTex1di4a' ( uniform itexture1DArray) +0:81 Constant: +0:81 0 (const int) +0:81 move second child to first child ( temp uint) +0:81 'WidthU' ( temp uint) +0:81 direct index ( temp uint) +0:81 'sizeQueryTemp' ( temp 2-component vector of uint) +0:81 Constant: +0:81 0 (const int) +0:81 move second child to first child ( temp uint) +0:81 'ElementsU' ( temp uint) +0:81 direct index ( temp uint) +0:81 'sizeQueryTemp' ( temp 2-component vector of uint) +0:81 Constant: +0:81 1 (const int) +0:82 Sequence +0:82 move second child to first child ( temp 2-component vector of uint) +0:82 'sizeQueryTemp' ( temp 2-component vector of uint) +0:82 textureSize ( temp 2-component vector of uint) +0:82 'g_tTex1di4a' ( uniform itexture1DArray) +0:82 Constant: +0:82 6 (const uint) +0:82 move second child to first child ( temp uint) +0:82 'WidthU' ( temp uint) +0:82 direct index ( temp uint) +0:82 'sizeQueryTemp' ( temp 2-component vector of uint) +0:82 Constant: +0:82 0 (const int) +0:82 move second child to first child ( temp uint) +0:82 'ElementsU' ( temp uint) +0:82 direct index ( temp uint) +0:82 'sizeQueryTemp' ( temp 2-component vector of uint) +0:82 Constant: +0:82 1 (const int) +0:82 move second child to first child ( temp uint) +0:82 'NumberOfLevelsU' ( temp uint) +0:82 textureQueryLevels ( temp uint) +0:82 'g_tTex1di4a' ( uniform itexture1DArray) +0:85 Sequence +0:85 move second child to first child ( temp 2-component vector of uint) +0:85 'sizeQueryTemp' ( temp 2-component vector of uint) +0:85 textureSize ( temp 2-component vector of uint) +0:85 'g_tTex1du4a' ( uniform utexture1DArray) +0:85 Constant: +0:85 0 (const int) +0:85 move second child to first child ( temp uint) +0:85 'WidthU' ( temp uint) +0:85 direct index ( temp uint) +0:85 'sizeQueryTemp' ( temp 2-component vector of uint) +0:85 Constant: +0:85 0 (const int) +0:85 move second child to first child ( temp uint) +0:85 'ElementsU' ( temp uint) +0:85 direct index ( temp uint) +0:85 'sizeQueryTemp' ( temp 2-component vector of uint) +0:85 Constant: +0:85 1 (const int) +0:86 Sequence +0:86 move second child to first child ( temp 2-component vector of uint) +0:86 'sizeQueryTemp' ( temp 2-component vector of uint) +0:86 textureSize ( temp 2-component vector of uint) +0:86 'g_tTex1du4a' ( uniform utexture1DArray) +0:86 Constant: +0:86 6 (const uint) +0:86 move second child to first child ( temp uint) +0:86 'WidthU' ( temp uint) +0:86 direct index ( temp uint) +0:86 'sizeQueryTemp' ( temp 2-component vector of uint) +0:86 Constant: +0:86 0 (const int) +0:86 move second child to first child ( temp uint) +0:86 'ElementsU' ( temp uint) +0:86 direct index ( temp uint) +0:86 'sizeQueryTemp' ( temp 2-component vector of uint) +0:86 Constant: +0:86 1 (const int) +0:86 move second child to first child ( temp uint) +0:86 'NumberOfLevelsU' ( temp uint) +0:86 textureQueryLevels ( temp uint) +0:86 'g_tTex1du4a' ( uniform utexture1DArray) +0:89 Sequence +0:89 move second child to first child ( temp 2-component vector of uint) +0:89 'sizeQueryTemp' ( temp 2-component vector of uint) +0:89 textureSize ( temp 2-component vector of uint) +0:89 'g_tTex2df4' ( uniform texture2D) +0:89 Constant: +0:89 0 (const int) +0:89 move second child to first child ( temp uint) +0:89 'WidthU' ( temp uint) +0:89 direct index ( temp uint) +0:89 'sizeQueryTemp' ( temp 2-component vector of uint) +0:89 Constant: +0:89 0 (const int) +0:89 move second child to first child ( temp uint) +0:89 'HeightU' ( temp uint) +0:89 direct index ( temp uint) +0:89 'sizeQueryTemp' ( temp 2-component vector of uint) +0:89 Constant: +0:89 1 (const int) +0:90 Sequence +0:90 move second child to first child ( temp 2-component vector of uint) +0:90 'sizeQueryTemp' ( temp 2-component vector of uint) +0:90 textureSize ( temp 2-component vector of uint) +0:90 'g_tTex2df4' ( uniform texture2D) +0:90 Constant: +0:90 6 (const uint) +0:90 move second child to first child ( temp uint) +0:90 'WidthU' ( temp uint) +0:90 direct index ( temp uint) +0:90 'sizeQueryTemp' ( temp 2-component vector of uint) +0:90 Constant: +0:90 0 (const int) +0:90 move second child to first child ( temp uint) +0:90 'HeightU' ( temp uint) +0:90 direct index ( temp uint) +0:90 'sizeQueryTemp' ( temp 2-component vector of uint) +0:90 Constant: +0:90 1 (const int) +0:90 move second child to first child ( temp uint) +0:90 'NumberOfLevelsU' ( temp uint) +0:90 textureQueryLevels ( temp uint) +0:90 'g_tTex2df4' ( uniform texture2D) +0:93 Sequence +0:93 move second child to first child ( temp 2-component vector of uint) +0:93 'sizeQueryTemp' ( temp 2-component vector of uint) +0:93 textureSize ( temp 2-component vector of uint) +0:93 'g_tTex2di4' ( uniform itexture2D) +0:93 Constant: +0:93 0 (const int) +0:93 move second child to first child ( temp uint) +0:93 'WidthU' ( temp uint) +0:93 direct index ( temp uint) +0:93 'sizeQueryTemp' ( temp 2-component vector of uint) +0:93 Constant: +0:93 0 (const int) +0:93 move second child to first child ( temp uint) +0:93 'HeightU' ( temp uint) +0:93 direct index ( temp uint) +0:93 'sizeQueryTemp' ( temp 2-component vector of uint) +0:93 Constant: +0:93 1 (const int) +0:94 Sequence +0:94 move second child to first child ( temp 2-component vector of uint) +0:94 'sizeQueryTemp' ( temp 2-component vector of uint) +0:94 textureSize ( temp 2-component vector of uint) +0:94 'g_tTex2di4' ( uniform itexture2D) +0:94 Constant: +0:94 6 (const uint) +0:94 move second child to first child ( temp uint) +0:94 'WidthU' ( temp uint) +0:94 direct index ( temp uint) +0:94 'sizeQueryTemp' ( temp 2-component vector of uint) +0:94 Constant: +0:94 0 (const int) +0:94 move second child to first child ( temp uint) +0:94 'HeightU' ( temp uint) +0:94 direct index ( temp uint) +0:94 'sizeQueryTemp' ( temp 2-component vector of uint) +0:94 Constant: +0:94 1 (const int) +0:94 move second child to first child ( temp uint) +0:94 'NumberOfLevelsU' ( temp uint) +0:94 textureQueryLevels ( temp uint) +0:94 'g_tTex2di4' ( uniform itexture2D) +0:97 Sequence +0:97 move second child to first child ( temp 2-component vector of uint) +0:97 'sizeQueryTemp' ( temp 2-component vector of uint) +0:97 textureSize ( temp 2-component vector of uint) +0:97 'g_tTex2du4' ( uniform utexture2D) +0:97 Constant: +0:97 0 (const int) +0:97 move second child to first child ( temp uint) +0:97 'WidthU' ( temp uint) +0:97 direct index ( temp uint) +0:97 'sizeQueryTemp' ( temp 2-component vector of uint) +0:97 Constant: +0:97 0 (const int) +0:97 move second child to first child ( temp uint) +0:97 'HeightU' ( temp uint) +0:97 direct index ( temp uint) +0:97 'sizeQueryTemp' ( temp 2-component vector of uint) +0:97 Constant: +0:97 1 (const int) +0:98 Sequence +0:98 move second child to first child ( temp 2-component vector of uint) +0:98 'sizeQueryTemp' ( temp 2-component vector of uint) +0:98 textureSize ( temp 2-component vector of uint) +0:98 'g_tTex2du4' ( uniform utexture2D) +0:98 Constant: +0:98 6 (const uint) +0:98 move second child to first child ( temp uint) +0:98 'WidthU' ( temp uint) +0:98 direct index ( temp uint) +0:98 'sizeQueryTemp' ( temp 2-component vector of uint) +0:98 Constant: +0:98 0 (const int) +0:98 move second child to first child ( temp uint) +0:98 'HeightU' ( temp uint) +0:98 direct index ( temp uint) +0:98 'sizeQueryTemp' ( temp 2-component vector of uint) +0:98 Constant: +0:98 1 (const int) +0:98 move second child to first child ( temp uint) +0:98 'NumberOfLevelsU' ( temp uint) +0:98 textureQueryLevels ( temp uint) +0:98 'g_tTex2du4' ( uniform utexture2D) +0:101 Sequence +0:101 move second child to first child ( temp 3-component vector of uint) +0:101 'sizeQueryTemp' ( temp 3-component vector of uint) +0:101 textureSize ( temp 3-component vector of uint) +0:101 'g_tTex2df4a' ( uniform texture2DArray) +0:101 Constant: +0:101 0 (const int) +0:101 move second child to first child ( temp uint) +0:101 'WidthU' ( temp uint) +0:101 direct index ( temp uint) +0:101 'sizeQueryTemp' ( temp 3-component vector of uint) +0:101 Constant: +0:101 0 (const int) +0:101 move second child to first child ( temp uint) +0:101 'HeightU' ( temp uint) +0:101 direct index ( temp uint) +0:101 'sizeQueryTemp' ( temp 3-component vector of uint) +0:101 Constant: +0:101 1 (const int) +0:101 move second child to first child ( temp uint) +0:101 'ElementsU' ( temp uint) +0:101 direct index ( temp uint) +0:101 'sizeQueryTemp' ( temp 3-component vector of uint) +0:101 Constant: +0:101 2 (const int) +0:102 Sequence +0:102 move second child to first child ( temp 3-component vector of uint) +0:102 'sizeQueryTemp' ( temp 3-component vector of uint) +0:102 textureSize ( temp 3-component vector of uint) +0:102 'g_tTex2df4a' ( uniform texture2DArray) +0:102 Constant: +0:102 6 (const uint) +0:102 move second child to first child ( temp uint) +0:102 'WidthU' ( temp uint) +0:102 direct index ( temp uint) +0:102 'sizeQueryTemp' ( temp 3-component vector of uint) +0:102 Constant: +0:102 0 (const int) +0:102 move second child to first child ( temp uint) +0:102 'HeightU' ( temp uint) +0:102 direct index ( temp uint) +0:102 'sizeQueryTemp' ( temp 3-component vector of uint) +0:102 Constant: +0:102 1 (const int) +0:102 move second child to first child ( temp uint) +0:102 'ElementsU' ( temp uint) +0:102 direct index ( temp uint) +0:102 'sizeQueryTemp' ( temp 3-component vector of uint) +0:102 Constant: +0:102 2 (const int) +0:102 move second child to first child ( temp uint) +0:102 'NumberOfLevelsU' ( temp uint) +0:102 textureQueryLevels ( temp uint) +0:102 'g_tTex2df4a' ( uniform texture2DArray) +0:105 Sequence +0:105 move second child to first child ( temp 3-component vector of uint) +0:105 'sizeQueryTemp' ( temp 3-component vector of uint) +0:105 textureSize ( temp 3-component vector of uint) +0:105 'g_tTex2di4a' ( uniform itexture2DArray) +0:105 Constant: +0:105 0 (const int) +0:105 move second child to first child ( temp uint) +0:105 'WidthU' ( temp uint) +0:105 direct index ( temp uint) +0:105 'sizeQueryTemp' ( temp 3-component vector of uint) +0:105 Constant: +0:105 0 (const int) +0:105 move second child to first child ( temp uint) +0:105 'HeightU' ( temp uint) +0:105 direct index ( temp uint) +0:105 'sizeQueryTemp' ( temp 3-component vector of uint) +0:105 Constant: +0:105 1 (const int) +0:105 move second child to first child ( temp uint) +0:105 'ElementsU' ( temp uint) +0:105 direct index ( temp uint) +0:105 'sizeQueryTemp' ( temp 3-component vector of uint) +0:105 Constant: +0:105 2 (const int) +0:106 Sequence +0:106 move second child to first child ( temp 3-component vector of uint) +0:106 'sizeQueryTemp' ( temp 3-component vector of uint) +0:106 textureSize ( temp 3-component vector of uint) +0:106 'g_tTex2di4a' ( uniform itexture2DArray) +0:106 Constant: +0:106 6 (const uint) +0:106 move second child to first child ( temp uint) +0:106 'WidthU' ( temp uint) +0:106 direct index ( temp uint) +0:106 'sizeQueryTemp' ( temp 3-component vector of uint) +0:106 Constant: +0:106 0 (const int) +0:106 move second child to first child ( temp uint) +0:106 'HeightU' ( temp uint) +0:106 direct index ( temp uint) +0:106 'sizeQueryTemp' ( temp 3-component vector of uint) +0:106 Constant: +0:106 1 (const int) +0:106 move second child to first child ( temp uint) +0:106 'ElementsU' ( temp uint) +0:106 direct index ( temp uint) +0:106 'sizeQueryTemp' ( temp 3-component vector of uint) +0:106 Constant: +0:106 2 (const int) +0:106 move second child to first child ( temp uint) +0:106 'NumberOfLevelsU' ( temp uint) +0:106 textureQueryLevels ( temp uint) +0:106 'g_tTex2di4a' ( uniform itexture2DArray) +0:109 Sequence +0:109 move second child to first child ( temp 3-component vector of uint) +0:109 'sizeQueryTemp' ( temp 3-component vector of uint) +0:109 textureSize ( temp 3-component vector of uint) +0:109 'g_tTex2du4a' ( uniform utexture2DArray) +0:109 Constant: +0:109 0 (const int) +0:109 move second child to first child ( temp uint) +0:109 'WidthU' ( temp uint) +0:109 direct index ( temp uint) +0:109 'sizeQueryTemp' ( temp 3-component vector of uint) +0:109 Constant: +0:109 0 (const int) +0:109 move second child to first child ( temp uint) +0:109 'HeightU' ( temp uint) +0:109 direct index ( temp uint) +0:109 'sizeQueryTemp' ( temp 3-component vector of uint) +0:109 Constant: +0:109 1 (const int) +0:109 move second child to first child ( temp uint) +0:109 'ElementsU' ( temp uint) +0:109 direct index ( temp uint) +0:109 'sizeQueryTemp' ( temp 3-component vector of uint) +0:109 Constant: +0:109 2 (const int) +0:110 Sequence +0:110 move second child to first child ( temp 3-component vector of uint) +0:110 'sizeQueryTemp' ( temp 3-component vector of uint) +0:110 textureSize ( temp 3-component vector of uint) +0:110 'g_tTex2du4a' ( uniform utexture2DArray) +0:110 Constant: +0:110 6 (const uint) +0:110 move second child to first child ( temp uint) +0:110 'WidthU' ( temp uint) +0:110 direct index ( temp uint) +0:110 'sizeQueryTemp' ( temp 3-component vector of uint) +0:110 Constant: +0:110 0 (const int) +0:110 move second child to first child ( temp uint) +0:110 'HeightU' ( temp uint) +0:110 direct index ( temp uint) +0:110 'sizeQueryTemp' ( temp 3-component vector of uint) +0:110 Constant: +0:110 1 (const int) +0:110 move second child to first child ( temp uint) +0:110 'ElementsU' ( temp uint) +0:110 direct index ( temp uint) +0:110 'sizeQueryTemp' ( temp 3-component vector of uint) +0:110 Constant: +0:110 2 (const int) +0:110 move second child to first child ( temp uint) +0:110 'NumberOfLevelsU' ( temp uint) +0:110 textureQueryLevels ( temp uint) +0:110 'g_tTex2du4a' ( uniform utexture2DArray) +0:113 Sequence +0:113 move second child to first child ( temp 3-component vector of uint) +0:113 'sizeQueryTemp' ( temp 3-component vector of uint) +0:113 textureSize ( temp 3-component vector of uint) +0:113 'g_tTex3df4' ( uniform texture3D) +0:113 Constant: +0:113 0 (const int) +0:113 move second child to first child ( temp uint) +0:113 'WidthU' ( temp uint) +0:113 direct index ( temp uint) +0:113 'sizeQueryTemp' ( temp 3-component vector of uint) +0:113 Constant: +0:113 0 (const int) +0:113 move second child to first child ( temp uint) +0:113 'HeightU' ( temp uint) +0:113 direct index ( temp uint) +0:113 'sizeQueryTemp' ( temp 3-component vector of uint) +0:113 Constant: +0:113 1 (const int) +0:113 move second child to first child ( temp uint) +0:113 'DepthU' ( temp uint) +0:113 direct index ( temp uint) +0:113 'sizeQueryTemp' ( temp 3-component vector of uint) +0:113 Constant: +0:113 2 (const int) +0:114 Sequence +0:114 move second child to first child ( temp 3-component vector of uint) +0:114 'sizeQueryTemp' ( temp 3-component vector of uint) +0:114 textureSize ( temp 3-component vector of uint) +0:114 'g_tTex3df4' ( uniform texture3D) +0:114 Constant: +0:114 6 (const uint) +0:114 move second child to first child ( temp uint) +0:114 'WidthU' ( temp uint) +0:114 direct index ( temp uint) +0:114 'sizeQueryTemp' ( temp 3-component vector of uint) +0:114 Constant: +0:114 0 (const int) +0:114 move second child to first child ( temp uint) +0:114 'HeightU' ( temp uint) +0:114 direct index ( temp uint) +0:114 'sizeQueryTemp' ( temp 3-component vector of uint) +0:114 Constant: +0:114 1 (const int) +0:114 move second child to first child ( temp uint) +0:114 'DepthU' ( temp uint) +0:114 direct index ( temp uint) +0:114 'sizeQueryTemp' ( temp 3-component vector of uint) +0:114 Constant: +0:114 2 (const int) +0:114 move second child to first child ( temp uint) +0:114 'NumberOfLevelsU' ( temp uint) +0:114 textureQueryLevels ( temp uint) +0:114 'g_tTex3df4' ( uniform texture3D) +0:117 Sequence +0:117 move second child to first child ( temp 3-component vector of uint) +0:117 'sizeQueryTemp' ( temp 3-component vector of uint) +0:117 textureSize ( temp 3-component vector of uint) +0:117 'g_tTex3di4' ( uniform itexture3D) +0:117 Constant: +0:117 0 (const int) +0:117 move second child to first child ( temp uint) +0:117 'WidthU' ( temp uint) +0:117 direct index ( temp uint) +0:117 'sizeQueryTemp' ( temp 3-component vector of uint) +0:117 Constant: +0:117 0 (const int) +0:117 move second child to first child ( temp uint) +0:117 'HeightU' ( temp uint) +0:117 direct index ( temp uint) +0:117 'sizeQueryTemp' ( temp 3-component vector of uint) +0:117 Constant: +0:117 1 (const int) +0:117 move second child to first child ( temp uint) +0:117 'DepthU' ( temp uint) +0:117 direct index ( temp uint) +0:117 'sizeQueryTemp' ( temp 3-component vector of uint) +0:117 Constant: +0:117 2 (const int) +0:118 Sequence +0:118 move second child to first child ( temp 3-component vector of uint) +0:118 'sizeQueryTemp' ( temp 3-component vector of uint) +0:118 textureSize ( temp 3-component vector of uint) +0:118 'g_tTex3di4' ( uniform itexture3D) +0:118 Constant: +0:118 6 (const uint) +0:118 move second child to first child ( temp uint) +0:118 'WidthU' ( temp uint) +0:118 direct index ( temp uint) +0:118 'sizeQueryTemp' ( temp 3-component vector of uint) +0:118 Constant: +0:118 0 (const int) +0:118 move second child to first child ( temp uint) +0:118 'HeightU' ( temp uint) +0:118 direct index ( temp uint) +0:118 'sizeQueryTemp' ( temp 3-component vector of uint) +0:118 Constant: +0:118 1 (const int) +0:118 move second child to first child ( temp uint) +0:118 'DepthU' ( temp uint) +0:118 direct index ( temp uint) +0:118 'sizeQueryTemp' ( temp 3-component vector of uint) +0:118 Constant: +0:118 2 (const int) +0:118 move second child to first child ( temp uint) +0:118 'NumberOfLevelsU' ( temp uint) +0:118 textureQueryLevels ( temp uint) +0:118 'g_tTex3di4' ( uniform itexture3D) +0:121 Sequence +0:121 move second child to first child ( temp 3-component vector of uint) +0:121 'sizeQueryTemp' ( temp 3-component vector of uint) +0:121 textureSize ( temp 3-component vector of uint) +0:121 'g_tTex3du4' ( uniform utexture3D) +0:121 Constant: +0:121 0 (const int) +0:121 move second child to first child ( temp uint) +0:121 'WidthU' ( temp uint) +0:121 direct index ( temp uint) +0:121 'sizeQueryTemp' ( temp 3-component vector of uint) +0:121 Constant: +0:121 0 (const int) +0:121 move second child to first child ( temp uint) +0:121 'HeightU' ( temp uint) +0:121 direct index ( temp uint) +0:121 'sizeQueryTemp' ( temp 3-component vector of uint) +0:121 Constant: +0:121 1 (const int) +0:121 move second child to first child ( temp uint) +0:121 'DepthU' ( temp uint) +0:121 direct index ( temp uint) +0:121 'sizeQueryTemp' ( temp 3-component vector of uint) +0:121 Constant: +0:121 2 (const int) +0:122 Sequence +0:122 move second child to first child ( temp 3-component vector of uint) +0:122 'sizeQueryTemp' ( temp 3-component vector of uint) +0:122 textureSize ( temp 3-component vector of uint) +0:122 'g_tTex3du4' ( uniform utexture3D) +0:122 Constant: +0:122 6 (const uint) +0:122 move second child to first child ( temp uint) +0:122 'WidthU' ( temp uint) +0:122 direct index ( temp uint) +0:122 'sizeQueryTemp' ( temp 3-component vector of uint) +0:122 Constant: +0:122 0 (const int) +0:122 move second child to first child ( temp uint) +0:122 'HeightU' ( temp uint) +0:122 direct index ( temp uint) +0:122 'sizeQueryTemp' ( temp 3-component vector of uint) +0:122 Constant: +0:122 1 (const int) +0:122 move second child to first child ( temp uint) +0:122 'DepthU' ( temp uint) +0:122 direct index ( temp uint) +0:122 'sizeQueryTemp' ( temp 3-component vector of uint) +0:122 Constant: +0:122 2 (const int) +0:122 move second child to first child ( temp uint) +0:122 'NumberOfLevelsU' ( temp uint) +0:122 textureQueryLevels ( temp uint) +0:122 'g_tTex3du4' ( uniform utexture3D) +0:125 Sequence +0:125 move second child to first child ( temp 2-component vector of uint) +0:125 'sizeQueryTemp' ( temp 2-component vector of uint) +0:125 textureSize ( temp 2-component vector of uint) +0:125 'g_tTexcdf4' ( uniform textureCube) +0:125 Constant: +0:125 0 (const int) +0:125 move second child to first child ( temp uint) +0:125 'WidthU' ( temp uint) +0:125 direct index ( temp uint) +0:125 'sizeQueryTemp' ( temp 2-component vector of uint) +0:125 Constant: +0:125 0 (const int) +0:125 move second child to first child ( temp uint) +0:125 'HeightU' ( temp uint) +0:125 direct index ( temp uint) +0:125 'sizeQueryTemp' ( temp 2-component vector of uint) +0:125 Constant: +0:125 1 (const int) +0:126 Sequence +0:126 move second child to first child ( temp 2-component vector of uint) +0:126 'sizeQueryTemp' ( temp 2-component vector of uint) +0:126 textureSize ( temp 2-component vector of uint) +0:126 'g_tTexcdf4' ( uniform textureCube) +0:126 Constant: +0:126 6 (const uint) +0:126 move second child to first child ( temp uint) +0:126 'WidthU' ( temp uint) +0:126 direct index ( temp uint) +0:126 'sizeQueryTemp' ( temp 2-component vector of uint) +0:126 Constant: +0:126 0 (const int) +0:126 move second child to first child ( temp uint) +0:126 'HeightU' ( temp uint) +0:126 direct index ( temp uint) +0:126 'sizeQueryTemp' ( temp 2-component vector of uint) +0:126 Constant: +0:126 1 (const int) +0:126 move second child to first child ( temp uint) +0:126 'NumberOfLevelsU' ( temp uint) +0:126 textureQueryLevels ( temp uint) +0:126 'g_tTexcdf4' ( uniform textureCube) +0:129 Sequence +0:129 move second child to first child ( temp 2-component vector of uint) +0:129 'sizeQueryTemp' ( temp 2-component vector of uint) +0:129 textureSize ( temp 2-component vector of uint) +0:129 'g_tTexcdi4' ( uniform itextureCube) +0:129 Constant: +0:129 0 (const int) +0:129 move second child to first child ( temp uint) +0:129 'WidthU' ( temp uint) +0:129 direct index ( temp uint) +0:129 'sizeQueryTemp' ( temp 2-component vector of uint) +0:129 Constant: +0:129 0 (const int) +0:129 move second child to first child ( temp uint) +0:129 'HeightU' ( temp uint) +0:129 direct index ( temp uint) +0:129 'sizeQueryTemp' ( temp 2-component vector of uint) +0:129 Constant: +0:129 1 (const int) +0:130 Sequence +0:130 move second child to first child ( temp 2-component vector of uint) +0:130 'sizeQueryTemp' ( temp 2-component vector of uint) +0:130 textureSize ( temp 2-component vector of uint) +0:130 'g_tTexcdi4' ( uniform itextureCube) +0:130 Constant: +0:130 6 (const uint) +0:130 move second child to first child ( temp uint) +0:130 'WidthU' ( temp uint) +0:130 direct index ( temp uint) +0:130 'sizeQueryTemp' ( temp 2-component vector of uint) +0:130 Constant: +0:130 0 (const int) +0:130 move second child to first child ( temp uint) +0:130 'HeightU' ( temp uint) +0:130 direct index ( temp uint) +0:130 'sizeQueryTemp' ( temp 2-component vector of uint) +0:130 Constant: +0:130 1 (const int) +0:130 move second child to first child ( temp uint) +0:130 'NumberOfLevelsU' ( temp uint) +0:130 textureQueryLevels ( temp uint) +0:130 'g_tTexcdi4' ( uniform itextureCube) +0:133 Sequence +0:133 move second child to first child ( temp 2-component vector of uint) +0:133 'sizeQueryTemp' ( temp 2-component vector of uint) +0:133 textureSize ( temp 2-component vector of uint) +0:133 'g_tTexcdu4' ( uniform utextureCube) +0:133 Constant: +0:133 0 (const int) +0:133 move second child to first child ( temp uint) +0:133 'WidthU' ( temp uint) +0:133 direct index ( temp uint) +0:133 'sizeQueryTemp' ( temp 2-component vector of uint) +0:133 Constant: +0:133 0 (const int) +0:133 move second child to first child ( temp uint) +0:133 'HeightU' ( temp uint) +0:133 direct index ( temp uint) +0:133 'sizeQueryTemp' ( temp 2-component vector of uint) +0:133 Constant: +0:133 1 (const int) +0:134 Sequence +0:134 move second child to first child ( temp 2-component vector of uint) +0:134 'sizeQueryTemp' ( temp 2-component vector of uint) +0:134 textureSize ( temp 2-component vector of uint) +0:134 'g_tTexcdu4' ( uniform utextureCube) +0:134 Constant: +0:134 6 (const uint) +0:134 move second child to first child ( temp uint) +0:134 'WidthU' ( temp uint) +0:134 direct index ( temp uint) +0:134 'sizeQueryTemp' ( temp 2-component vector of uint) +0:134 Constant: +0:134 0 (const int) +0:134 move second child to first child ( temp uint) +0:134 'HeightU' ( temp uint) +0:134 direct index ( temp uint) +0:134 'sizeQueryTemp' ( temp 2-component vector of uint) +0:134 Constant: +0:134 1 (const int) +0:134 move second child to first child ( temp uint) +0:134 'NumberOfLevelsU' ( temp uint) +0:134 textureQueryLevels ( temp uint) +0:134 'g_tTexcdu4' ( uniform utextureCube) +0:137 Sequence +0:137 move second child to first child ( temp 3-component vector of uint) +0:137 'sizeQueryTemp' ( temp 3-component vector of uint) +0:137 textureSize ( temp 3-component vector of uint) +0:137 'g_tTexcdf4a' ( uniform textureCubeArray) +0:137 Constant: +0:137 0 (const int) +0:137 move second child to first child ( temp uint) +0:137 'WidthU' ( temp uint) +0:137 direct index ( temp uint) +0:137 'sizeQueryTemp' ( temp 3-component vector of uint) +0:137 Constant: +0:137 0 (const int) +0:137 move second child to first child ( temp uint) +0:137 'HeightU' ( temp uint) +0:137 direct index ( temp uint) +0:137 'sizeQueryTemp' ( temp 3-component vector of uint) +0:137 Constant: +0:137 1 (const int) +0:137 move second child to first child ( temp uint) +0:137 'ElementsU' ( temp uint) +0:137 direct index ( temp uint) +0:137 'sizeQueryTemp' ( temp 3-component vector of uint) +0:137 Constant: +0:137 2 (const int) +0:138 Sequence +0:138 move second child to first child ( temp 3-component vector of uint) +0:138 'sizeQueryTemp' ( temp 3-component vector of uint) +0:138 textureSize ( temp 3-component vector of uint) +0:138 'g_tTexcdf4a' ( uniform textureCubeArray) +0:138 Constant: +0:138 6 (const uint) +0:138 move second child to first child ( temp uint) +0:138 'WidthU' ( temp uint) +0:138 direct index ( temp uint) +0:138 'sizeQueryTemp' ( temp 3-component vector of uint) +0:138 Constant: +0:138 0 (const int) +0:138 move second child to first child ( temp uint) +0:138 'HeightU' ( temp uint) +0:138 direct index ( temp uint) +0:138 'sizeQueryTemp' ( temp 3-component vector of uint) +0:138 Constant: +0:138 1 (const int) +0:138 move second child to first child ( temp uint) +0:138 'ElementsU' ( temp uint) +0:138 direct index ( temp uint) +0:138 'sizeQueryTemp' ( temp 3-component vector of uint) +0:138 Constant: +0:138 2 (const int) +0:138 move second child to first child ( temp uint) +0:138 'NumberOfLevelsU' ( temp uint) +0:138 textureQueryLevels ( temp uint) +0:138 'g_tTexcdf4a' ( uniform textureCubeArray) +0:141 Sequence +0:141 move second child to first child ( temp 3-component vector of uint) +0:141 'sizeQueryTemp' ( temp 3-component vector of uint) +0:141 textureSize ( temp 3-component vector of uint) +0:141 'g_tTexcdi4a' ( uniform itextureCubeArray) +0:141 Constant: +0:141 0 (const int) +0:141 move second child to first child ( temp uint) +0:141 'WidthU' ( temp uint) +0:141 direct index ( temp uint) +0:141 'sizeQueryTemp' ( temp 3-component vector of uint) +0:141 Constant: +0:141 0 (const int) +0:141 move second child to first child ( temp uint) +0:141 'HeightU' ( temp uint) +0:141 direct index ( temp uint) +0:141 'sizeQueryTemp' ( temp 3-component vector of uint) +0:141 Constant: +0:141 1 (const int) +0:141 move second child to first child ( temp uint) +0:141 'ElementsU' ( temp uint) +0:141 direct index ( temp uint) +0:141 'sizeQueryTemp' ( temp 3-component vector of uint) +0:141 Constant: +0:141 2 (const int) +0:142 Sequence +0:142 move second child to first child ( temp 3-component vector of uint) +0:142 'sizeQueryTemp' ( temp 3-component vector of uint) +0:142 textureSize ( temp 3-component vector of uint) +0:142 'g_tTexcdi4a' ( uniform itextureCubeArray) +0:142 Constant: +0:142 6 (const uint) +0:142 move second child to first child ( temp uint) +0:142 'WidthU' ( temp uint) +0:142 direct index ( temp uint) +0:142 'sizeQueryTemp' ( temp 3-component vector of uint) +0:142 Constant: +0:142 0 (const int) +0:142 move second child to first child ( temp uint) +0:142 'HeightU' ( temp uint) +0:142 direct index ( temp uint) +0:142 'sizeQueryTemp' ( temp 3-component vector of uint) +0:142 Constant: +0:142 1 (const int) +0:142 move second child to first child ( temp uint) +0:142 'ElementsU' ( temp uint) +0:142 direct index ( temp uint) +0:142 'sizeQueryTemp' ( temp 3-component vector of uint) +0:142 Constant: +0:142 2 (const int) +0:142 move second child to first child ( temp uint) +0:142 'NumberOfLevelsU' ( temp uint) +0:142 textureQueryLevels ( temp uint) +0:142 'g_tTexcdi4a' ( uniform itextureCubeArray) +0:145 Sequence +0:145 move second child to first child ( temp 3-component vector of uint) +0:145 'sizeQueryTemp' ( temp 3-component vector of uint) +0:145 textureSize ( temp 3-component vector of uint) +0:145 'g_tTexcdu4a' ( uniform utextureCubeArray) +0:145 Constant: +0:145 0 (const int) +0:145 move second child to first child ( temp uint) +0:145 'WidthU' ( temp uint) +0:145 direct index ( temp uint) +0:145 'sizeQueryTemp' ( temp 3-component vector of uint) +0:145 Constant: +0:145 0 (const int) +0:145 move second child to first child ( temp uint) +0:145 'HeightU' ( temp uint) +0:145 direct index ( temp uint) +0:145 'sizeQueryTemp' ( temp 3-component vector of uint) +0:145 Constant: +0:145 1 (const int) +0:145 move second child to first child ( temp uint) +0:145 'ElementsU' ( temp uint) +0:145 direct index ( temp uint) +0:145 'sizeQueryTemp' ( temp 3-component vector of uint) +0:145 Constant: +0:145 2 (const int) +0:146 Sequence +0:146 move second child to first child ( temp 3-component vector of uint) +0:146 'sizeQueryTemp' ( temp 3-component vector of uint) +0:146 textureSize ( temp 3-component vector of uint) +0:146 'g_tTexcdu4a' ( uniform utextureCubeArray) +0:146 Constant: +0:146 6 (const uint) +0:146 move second child to first child ( temp uint) +0:146 'WidthU' ( temp uint) +0:146 direct index ( temp uint) +0:146 'sizeQueryTemp' ( temp 3-component vector of uint) +0:146 Constant: +0:146 0 (const int) +0:146 move second child to first child ( temp uint) +0:146 'HeightU' ( temp uint) +0:146 direct index ( temp uint) +0:146 'sizeQueryTemp' ( temp 3-component vector of uint) +0:146 Constant: +0:146 1 (const int) +0:146 move second child to first child ( temp uint) +0:146 'ElementsU' ( temp uint) +0:146 direct index ( temp uint) +0:146 'sizeQueryTemp' ( temp 3-component vector of uint) +0:146 Constant: +0:146 2 (const int) +0:146 move second child to first child ( temp uint) +0:146 'NumberOfLevelsU' ( temp uint) +0:146 textureQueryLevels ( temp uint) +0:146 'g_tTexcdu4a' ( uniform utextureCubeArray) +0:149 Sequence +0:149 move second child to first child ( temp 2-component vector of uint) +0:149 'sizeQueryTemp' ( temp 2-component vector of uint) +0:149 textureSize ( temp 2-component vector of uint) +0:149 'g_tTex2dmsf4' ( uniform texture2DMS) +0:149 move second child to first child ( temp uint) +0:149 'WidthU' ( temp uint) +0:149 direct index ( temp uint) +0:149 'sizeQueryTemp' ( temp 2-component vector of uint) +0:149 Constant: +0:149 0 (const int) +0:149 move second child to first child ( temp uint) +0:149 'HeightU' ( temp uint) +0:149 direct index ( temp uint) +0:149 'sizeQueryTemp' ( temp 2-component vector of uint) +0:149 Constant: +0:149 1 (const int) +0:149 move second child to first child ( temp uint) +0:149 'NumberOfSamplesU' ( temp uint) +0:149 imageQuerySamples ( temp uint) +0:149 'g_tTex2dmsf4' ( uniform texture2DMS) +0:152 Sequence +0:152 move second child to first child ( temp 2-component vector of uint) +0:152 'sizeQueryTemp' ( temp 2-component vector of uint) +0:152 textureSize ( temp 2-component vector of uint) +0:152 'g_tTex2dmsi4' ( uniform itexture2DMS) +0:152 move second child to first child ( temp uint) +0:152 'WidthU' ( temp uint) +0:152 direct index ( temp uint) +0:152 'sizeQueryTemp' ( temp 2-component vector of uint) +0:152 Constant: +0:152 0 (const int) +0:152 move second child to first child ( temp uint) +0:152 'HeightU' ( temp uint) +0:152 direct index ( temp uint) +0:152 'sizeQueryTemp' ( temp 2-component vector of uint) +0:152 Constant: +0:152 1 (const int) +0:152 move second child to first child ( temp uint) +0:152 'NumberOfSamplesU' ( temp uint) +0:152 imageQuerySamples ( temp uint) +0:152 'g_tTex2dmsi4' ( uniform itexture2DMS) +0:155 Sequence +0:155 move second child to first child ( temp 2-component vector of uint) +0:155 'sizeQueryTemp' ( temp 2-component vector of uint) +0:155 textureSize ( temp 2-component vector of uint) +0:155 'g_tTex2dmsu4' ( uniform utexture2DMS) +0:155 move second child to first child ( temp uint) +0:155 'WidthU' ( temp uint) +0:155 direct index ( temp uint) +0:155 'sizeQueryTemp' ( temp 2-component vector of uint) +0:155 Constant: +0:155 0 (const int) +0:155 move second child to first child ( temp uint) +0:155 'HeightU' ( temp uint) +0:155 direct index ( temp uint) +0:155 'sizeQueryTemp' ( temp 2-component vector of uint) +0:155 Constant: +0:155 1 (const int) +0:155 move second child to first child ( temp uint) +0:155 'NumberOfSamplesU' ( temp uint) +0:155 imageQuerySamples ( temp uint) +0:155 'g_tTex2dmsu4' ( uniform utexture2DMS) +0:158 Sequence +0:158 move second child to first child ( temp 3-component vector of uint) +0:158 'sizeQueryTemp' ( temp 3-component vector of uint) +0:158 textureSize ( temp 3-component vector of uint) +0:158 'g_tTex2dmsf4a' ( uniform texture2DMSArray) +0:158 move second child to first child ( temp uint) +0:158 'WidthU' ( temp uint) +0:158 direct index ( temp uint) +0:158 'sizeQueryTemp' ( temp 3-component vector of uint) +0:158 Constant: +0:158 0 (const int) +0:158 move second child to first child ( temp uint) +0:158 'HeightU' ( temp uint) +0:158 direct index ( temp uint) +0:158 'sizeQueryTemp' ( temp 3-component vector of uint) +0:158 Constant: +0:158 1 (const int) +0:158 move second child to first child ( temp uint) +0:158 'ElementsU' ( temp uint) +0:158 direct index ( temp uint) +0:158 'sizeQueryTemp' ( temp 3-component vector of uint) +0:158 Constant: +0:158 2 (const int) +0:158 move second child to first child ( temp uint) +0:158 'NumberOfSamplesU' ( temp uint) +0:158 imageQuerySamples ( temp uint) +0:158 'g_tTex2dmsf4a' ( uniform texture2DMSArray) +0:161 Sequence +0:161 move second child to first child ( temp 3-component vector of uint) +0:161 'sizeQueryTemp' ( temp 3-component vector of uint) +0:161 textureSize ( temp 3-component vector of uint) +0:161 'g_tTex2dmsi4a' ( uniform itexture2DMSArray) +0:161 move second child to first child ( temp uint) +0:161 'WidthU' ( temp uint) +0:161 direct index ( temp uint) +0:161 'sizeQueryTemp' ( temp 3-component vector of uint) +0:161 Constant: +0:161 0 (const int) +0:161 move second child to first child ( temp uint) +0:161 'HeightU' ( temp uint) +0:161 direct index ( temp uint) +0:161 'sizeQueryTemp' ( temp 3-component vector of uint) +0:161 Constant: +0:161 1 (const int) +0:161 move second child to first child ( temp uint) +0:161 'ElementsU' ( temp uint) +0:161 direct index ( temp uint) +0:161 'sizeQueryTemp' ( temp 3-component vector of uint) +0:161 Constant: +0:161 2 (const int) +0:161 move second child to first child ( temp uint) +0:161 'NumberOfSamplesU' ( temp uint) +0:161 imageQuerySamples ( temp uint) +0:161 'g_tTex2dmsi4a' ( uniform itexture2DMSArray) +0:164 Sequence +0:164 move second child to first child ( temp 3-component vector of uint) +0:164 'sizeQueryTemp' ( temp 3-component vector of uint) +0:164 textureSize ( temp 3-component vector of uint) +0:164 'g_tTex2dmsu4a' ( uniform utexture2DMSArray) +0:164 move second child to first child ( temp uint) +0:164 'WidthU' ( temp uint) +0:164 direct index ( temp uint) +0:164 'sizeQueryTemp' ( temp 3-component vector of uint) +0:164 Constant: +0:164 0 (const int) +0:164 move second child to first child ( temp uint) +0:164 'HeightU' ( temp uint) +0:164 direct index ( temp uint) +0:164 'sizeQueryTemp' ( temp 3-component vector of uint) +0:164 Constant: +0:164 1 (const int) +0:164 move second child to first child ( temp uint) +0:164 'ElementsU' ( temp uint) +0:164 direct index ( temp uint) +0:164 'sizeQueryTemp' ( temp 3-component vector of uint) +0:164 Constant: +0:164 2 (const int) +0:164 move second child to first child ( temp uint) +0:164 'NumberOfSamplesU' ( temp uint) +0:164 imageQuerySamples ( temp uint) +0:164 'g_tTex2dmsu4a' ( uniform utexture2DMSArray) +0:276 move second child to first child ( temp 4-component vector of float) +0:276 Color: direct index for structure ( temp 4-component vector of float) +0:276 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:276 Constant: +0:276 0 (const int) +0:276 Constant: +0:276 1.000000 +0:276 1.000000 +0:276 1.000000 +0:276 1.000000 +0:277 move second child to first child ( temp float) +0:277 Depth: direct index for structure ( temp float) +0:277 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:277 Constant: +0:277 1 (const int) +0:277 Constant: +0:277 1.000000 +0:279 Branch: Return with expression +0:279 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:46 Function Definition: main( ( temp void) +0:46 Function Parameters: +0:? Sequence +0:46 Sequence +0:46 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:46 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_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_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:? 'g_tTex2dmsf4' ( uniform texture2DMS) +0:? 'g_tTex2dmsi4' ( uniform itexture2DMS) +0:? 'g_tTex2dmsu4' ( uniform utexture2DMS) +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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// 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 + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + MemberName 8(PS_OUTPUT) 1 "Depth" + Name 10 "@main(" + Name 14 "sizeQueryTemp" + Name 17 "g_tTex1df4" + Name 22 "WidthU" + Name 24 "sizeQueryTemp" + Name 29 "NumberOfLevelsU" + Name 32 "sizeQueryTemp" + Name 35 "g_tTex1di4" + Name 39 "sizeQueryTemp" + Name 45 "sizeQueryTemp" + Name 48 "g_tTex1du4" + Name 52 "sizeQueryTemp" + Name 60 "sizeQueryTemp" + Name 63 "g_tTex1df4a" + Name 69 "ElementsU" + Name 73 "sizeQueryTemp" + Name 82 "sizeQueryTemp" + Name 85 "g_tTex1di4a" + Name 92 "sizeQueryTemp" + Name 101 "sizeQueryTemp" + Name 104 "g_tTex1du4a" + Name 111 "sizeQueryTemp" + Name 120 "sizeQueryTemp" + Name 123 "g_tTex2df4" + Name 128 "HeightU" + Name 131 "sizeQueryTemp" + Name 140 "sizeQueryTemp" + Name 143 "g_tTex2di4" + Name 150 "sizeQueryTemp" + Name 159 "sizeQueryTemp" + Name 162 "g_tTex2du4" + Name 169 "sizeQueryTemp" + Name 180 "sizeQueryTemp" + Name 183 "g_tTex2df4a" + Name 193 "sizeQueryTemp" + Name 204 "sizeQueryTemp" + Name 207 "g_tTex2di4a" + Name 216 "sizeQueryTemp" + Name 227 "sizeQueryTemp" + Name 230 "g_tTex2du4a" + Name 239 "sizeQueryTemp" + Name 250 "sizeQueryTemp" + Name 253 "g_tTex3df4" + Name 260 "DepthU" + Name 263 "sizeQueryTemp" + Name 274 "sizeQueryTemp" + Name 277 "g_tTex3di4" + Name 286 "sizeQueryTemp" + Name 297 "sizeQueryTemp" + Name 300 "g_tTex3du4" + Name 309 "sizeQueryTemp" + Name 320 "sizeQueryTemp" + Name 323 "g_tTexcdf4" + Name 330 "sizeQueryTemp" + Name 339 "sizeQueryTemp" + Name 342 "g_tTexcdi4" + Name 349 "sizeQueryTemp" + Name 358 "sizeQueryTemp" + Name 361 "g_tTexcdu4" + Name 368 "sizeQueryTemp" + Name 377 "sizeQueryTemp" + Name 380 "g_tTexcdf4a" + Name 389 "sizeQueryTemp" + Name 400 "sizeQueryTemp" + Name 403 "g_tTexcdi4a" + Name 412 "sizeQueryTemp" + Name 423 "sizeQueryTemp" + Name 426 "g_tTexcdu4a" + Name 435 "sizeQueryTemp" + Name 446 "sizeQueryTemp" + Name 449 "g_tTex2dmsf4" + Name 456 "NumberOfSamplesU" + Name 459 "sizeQueryTemp" + Name 462 "g_tTex2dmsi4" + Name 471 "sizeQueryTemp" + Name 474 "g_tTex2dmsu4" + Name 483 "sizeQueryTemp" + Name 486 "g_tTex2dmsf4a" + Name 497 "sizeQueryTemp" + Name 500 "g_tTex2dmsi4a" + Name 511 "sizeQueryTemp" + Name 514 "g_tTex2dmsu4a" + Name 526 "psout" + Name 537 "flattenTemp" + Name 540 "Color" + Name 544 "Depth" + Name 549 "g_sSamp" + Decorate 17(g_tTex1df4) DescriptorSet 0 + Decorate 17(g_tTex1df4) Binding 0 + Decorate 35(g_tTex1di4) DescriptorSet 0 + Decorate 48(g_tTex1du4) DescriptorSet 0 + Decorate 63(g_tTex1df4a) DescriptorSet 0 + Decorate 85(g_tTex1di4a) DescriptorSet 0 + Decorate 104(g_tTex1du4a) DescriptorSet 0 + Decorate 123(g_tTex2df4) DescriptorSet 0 + Decorate 143(g_tTex2di4) DescriptorSet 0 + Decorate 162(g_tTex2du4) DescriptorSet 0 + Decorate 183(g_tTex2df4a) DescriptorSet 0 + Decorate 207(g_tTex2di4a) DescriptorSet 0 + Decorate 230(g_tTex2du4a) DescriptorSet 0 + Decorate 253(g_tTex3df4) DescriptorSet 0 + Decorate 277(g_tTex3di4) DescriptorSet 0 + Decorate 300(g_tTex3du4) DescriptorSet 0 + Decorate 323(g_tTexcdf4) DescriptorSet 0 + Decorate 342(g_tTexcdi4) DescriptorSet 0 + Decorate 361(g_tTexcdu4) DescriptorSet 0 + Decorate 380(g_tTexcdf4a) DescriptorSet 0 + Decorate 403(g_tTexcdi4a) DescriptorSet 0 + Decorate 426(g_tTexcdu4a) DescriptorSet 0 + Decorate 449(g_tTex2dmsf4) DescriptorSet 0 + Decorate 462(g_tTex2dmsi4) DescriptorSet 0 + Decorate 474(g_tTex2dmsu4) DescriptorSet 0 + 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 549(g_sSamp) DescriptorSet 0 + Decorate 549(g_sSamp) Binding 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8(PS_OUTPUT): TypeStruct 7(fvec4) 6(float) + 9: TypeFunction 8(PS_OUTPUT) + 12: TypeInt 32 0 + 13: TypePointer Function 12(int) + 15: TypeImage 6(float) 1D sampled format:Unknown + 16: TypePointer UniformConstant 15 + 17(g_tTex1df4): 16(ptr) Variable UniformConstant + 19: TypeInt 32 1 + 20: 19(int) Constant 0 + 26: 12(int) Constant 6 + 33: TypeImage 19(int) 1D sampled format:Unknown + 34: TypePointer UniformConstant 33 + 35(g_tTex1di4): 34(ptr) Variable UniformConstant + 46: TypeImage 12(int) 1D sampled format:Unknown + 47: TypePointer UniformConstant 46 + 48(g_tTex1du4): 47(ptr) Variable UniformConstant + 58: TypeVector 12(int) 2 + 59: TypePointer Function 58(ivec2) + 61: TypeImage 6(float) 1D array sampled format:Unknown + 62: TypePointer UniformConstant 61 + 63(g_tTex1df4a): 62(ptr) Variable UniformConstant + 66: 12(int) Constant 0 + 70: 12(int) Constant 1 + 83: TypeImage 19(int) 1D array sampled format:Unknown + 84: TypePointer UniformConstant 83 + 85(g_tTex1di4a): 84(ptr) Variable UniformConstant + 102: TypeImage 12(int) 1D array sampled format:Unknown + 103: TypePointer UniformConstant 102 +104(g_tTex1du4a): 103(ptr) Variable UniformConstant + 121: TypeImage 6(float) 2D sampled format:Unknown + 122: TypePointer UniformConstant 121 + 123(g_tTex2df4): 122(ptr) Variable UniformConstant + 141: TypeImage 19(int) 2D sampled format:Unknown + 142: TypePointer UniformConstant 141 + 143(g_tTex2di4): 142(ptr) Variable UniformConstant + 160: TypeImage 12(int) 2D sampled format:Unknown + 161: TypePointer UniformConstant 160 + 162(g_tTex2du4): 161(ptr) Variable UniformConstant + 178: TypeVector 12(int) 3 + 179: TypePointer Function 178(ivec3) + 181: TypeImage 6(float) 2D array sampled format:Unknown + 182: TypePointer UniformConstant 181 +183(g_tTex2df4a): 182(ptr) Variable UniformConstant + 190: 12(int) Constant 2 + 205: TypeImage 19(int) 2D array sampled format:Unknown + 206: TypePointer UniformConstant 205 +207(g_tTex2di4a): 206(ptr) Variable UniformConstant + 228: TypeImage 12(int) 2D array sampled format:Unknown + 229: TypePointer UniformConstant 228 +230(g_tTex2du4a): 229(ptr) Variable UniformConstant + 251: TypeImage 6(float) 3D sampled format:Unknown + 252: TypePointer UniformConstant 251 + 253(g_tTex3df4): 252(ptr) Variable UniformConstant + 275: TypeImage 19(int) 3D sampled format:Unknown + 276: TypePointer UniformConstant 275 + 277(g_tTex3di4): 276(ptr) Variable UniformConstant + 298: TypeImage 12(int) 3D sampled format:Unknown + 299: TypePointer UniformConstant 298 + 300(g_tTex3du4): 299(ptr) Variable UniformConstant + 321: TypeImage 6(float) Cube sampled format:Unknown + 322: TypePointer UniformConstant 321 + 323(g_tTexcdf4): 322(ptr) Variable UniformConstant + 340: TypeImage 19(int) Cube sampled format:Unknown + 341: TypePointer UniformConstant 340 + 342(g_tTexcdi4): 341(ptr) Variable UniformConstant + 359: TypeImage 12(int) Cube sampled format:Unknown + 360: TypePointer UniformConstant 359 + 361(g_tTexcdu4): 360(ptr) Variable UniformConstant + 378: TypeImage 6(float) Cube array sampled format:Unknown + 379: TypePointer UniformConstant 378 +380(g_tTexcdf4a): 379(ptr) Variable UniformConstant + 401: TypeImage 19(int) Cube array sampled format:Unknown + 402: TypePointer UniformConstant 401 +403(g_tTexcdi4a): 402(ptr) Variable UniformConstant + 424: TypeImage 12(int) Cube array sampled format:Unknown + 425: TypePointer UniformConstant 424 +426(g_tTexcdu4a): 425(ptr) Variable UniformConstant + 447: TypeImage 6(float) 2D multi-sampled sampled format:Unknown + 448: TypePointer UniformConstant 447 +449(g_tTex2dmsf4): 448(ptr) Variable UniformConstant + 460: TypeImage 19(int) 2D multi-sampled sampled format:Unknown + 461: TypePointer UniformConstant 460 +462(g_tTex2dmsi4): 461(ptr) Variable UniformConstant + 472: TypeImage 12(int) 2D multi-sampled sampled format:Unknown + 473: TypePointer UniformConstant 472 +474(g_tTex2dmsu4): 473(ptr) Variable UniformConstant + 484: TypeImage 6(float) 2D array multi-sampled sampled format:Unknown + 485: TypePointer UniformConstant 484 +486(g_tTex2dmsf4a): 485(ptr) Variable UniformConstant + 498: TypeImage 19(int) 2D array multi-sampled sampled format:Unknown + 499: TypePointer UniformConstant 498 +500(g_tTex2dmsi4a): 499(ptr) Variable UniformConstant + 512: TypeImage 12(int) 2D array multi-sampled sampled format:Unknown + 513: TypePointer UniformConstant 512 +514(g_tTex2dmsu4a): 513(ptr) Variable UniformConstant + 525: TypePointer Function 8(PS_OUTPUT) + 527: 6(float) Constant 1065353216 + 528: 7(fvec4) ConstantComposite 527 527 527 527 + 529: TypePointer Function 7(fvec4) + 531: 19(int) Constant 1 + 532: TypePointer Function 6(float) + 539: TypePointer Output 7(fvec4) + 540(Color): 539(ptr) Variable Output + 543: TypePointer Output 6(float) + 544(Depth): 543(ptr) Variable Output + 547: TypeSampler + 548: TypePointer UniformConstant 547 + 549(g_sSamp): 548(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label +537(flattenTemp): 525(ptr) Variable Function + 538:8(PS_OUTPUT) FunctionCall 10(@main() + Store 537(flattenTemp) 538 + 541: 529(ptr) AccessChain 537(flattenTemp) 20 + 542: 7(fvec4) Load 541 + Store 540(Color) 542 + 545: 532(ptr) AccessChain 537(flattenTemp) 531 + 546: 6(float) Load 545 + Store 544(Depth) 546 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label +14(sizeQueryTemp): 13(ptr) Variable Function + 22(WidthU): 13(ptr) Variable Function +24(sizeQueryTemp): 13(ptr) Variable Function +29(NumberOfLevelsU): 13(ptr) Variable Function +32(sizeQueryTemp): 13(ptr) Variable Function +39(sizeQueryTemp): 13(ptr) Variable Function +45(sizeQueryTemp): 13(ptr) Variable Function +52(sizeQueryTemp): 13(ptr) Variable Function +60(sizeQueryTemp): 59(ptr) Variable Function + 69(ElementsU): 13(ptr) Variable Function +73(sizeQueryTemp): 59(ptr) Variable Function +82(sizeQueryTemp): 59(ptr) Variable Function +92(sizeQueryTemp): 59(ptr) Variable Function +101(sizeQueryTemp): 59(ptr) Variable Function +111(sizeQueryTemp): 59(ptr) Variable Function +120(sizeQueryTemp): 59(ptr) Variable Function + 128(HeightU): 13(ptr) Variable Function +131(sizeQueryTemp): 59(ptr) Variable Function +140(sizeQueryTemp): 59(ptr) Variable Function +150(sizeQueryTemp): 59(ptr) Variable Function +159(sizeQueryTemp): 59(ptr) Variable Function +169(sizeQueryTemp): 59(ptr) Variable Function +180(sizeQueryTemp): 179(ptr) Variable Function +193(sizeQueryTemp): 179(ptr) Variable Function +204(sizeQueryTemp): 179(ptr) Variable Function +216(sizeQueryTemp): 179(ptr) Variable Function +227(sizeQueryTemp): 179(ptr) Variable Function +239(sizeQueryTemp): 179(ptr) Variable Function +250(sizeQueryTemp): 179(ptr) Variable Function + 260(DepthU): 13(ptr) Variable Function +263(sizeQueryTemp): 179(ptr) Variable Function +274(sizeQueryTemp): 179(ptr) Variable Function +286(sizeQueryTemp): 179(ptr) Variable Function +297(sizeQueryTemp): 179(ptr) Variable Function +309(sizeQueryTemp): 179(ptr) Variable Function +320(sizeQueryTemp): 59(ptr) Variable Function +330(sizeQueryTemp): 59(ptr) Variable Function +339(sizeQueryTemp): 59(ptr) Variable Function +349(sizeQueryTemp): 59(ptr) Variable Function +358(sizeQueryTemp): 59(ptr) Variable Function +368(sizeQueryTemp): 59(ptr) Variable Function +377(sizeQueryTemp): 179(ptr) Variable Function +389(sizeQueryTemp): 179(ptr) Variable Function +400(sizeQueryTemp): 179(ptr) Variable Function +412(sizeQueryTemp): 179(ptr) Variable Function +423(sizeQueryTemp): 179(ptr) Variable Function +435(sizeQueryTemp): 179(ptr) Variable Function +446(sizeQueryTemp): 59(ptr) Variable Function +456(NumberOfSamplesU): 13(ptr) Variable Function +459(sizeQueryTemp): 59(ptr) Variable Function +471(sizeQueryTemp): 59(ptr) Variable Function +483(sizeQueryTemp): 179(ptr) Variable Function +497(sizeQueryTemp): 179(ptr) Variable Function +511(sizeQueryTemp): 179(ptr) Variable Function + 526(psout): 525(ptr) Variable Function + 18: 15 Load 17(g_tTex1df4) + 21: 12(int) ImageQuerySizeLod 18 20 + Store 14(sizeQueryTemp) 21 + 23: 12(int) Load 14(sizeQueryTemp) + Store 22(WidthU) 23 + 25: 15 Load 17(g_tTex1df4) + 27: 12(int) ImageQuerySizeLod 25 26 + Store 24(sizeQueryTemp) 27 + 28: 12(int) Load 24(sizeQueryTemp) + Store 22(WidthU) 28 + 30: 15 Load 17(g_tTex1df4) + 31: 12(int) ImageQueryLevels 30 + Store 29(NumberOfLevelsU) 31 + 36: 33 Load 35(g_tTex1di4) + 37: 12(int) ImageQuerySizeLod 36 20 + Store 32(sizeQueryTemp) 37 + 38: 12(int) Load 32(sizeQueryTemp) + Store 22(WidthU) 38 + 40: 33 Load 35(g_tTex1di4) + 41: 12(int) ImageQuerySizeLod 40 26 + Store 39(sizeQueryTemp) 41 + 42: 12(int) Load 39(sizeQueryTemp) + Store 22(WidthU) 42 + 43: 33 Load 35(g_tTex1di4) + 44: 12(int) ImageQueryLevels 43 + Store 29(NumberOfLevelsU) 44 + 49: 46 Load 48(g_tTex1du4) + 50: 12(int) ImageQuerySizeLod 49 20 + Store 45(sizeQueryTemp) 50 + 51: 12(int) Load 45(sizeQueryTemp) + Store 22(WidthU) 51 + 53: 46 Load 48(g_tTex1du4) + 54: 12(int) ImageQuerySizeLod 53 26 + Store 52(sizeQueryTemp) 54 + 55: 12(int) Load 52(sizeQueryTemp) + Store 22(WidthU) 55 + 56: 46 Load 48(g_tTex1du4) + 57: 12(int) ImageQueryLevels 56 + Store 29(NumberOfLevelsU) 57 + 64: 61 Load 63(g_tTex1df4a) + 65: 58(ivec2) ImageQuerySizeLod 64 20 + Store 60(sizeQueryTemp) 65 + 67: 13(ptr) AccessChain 60(sizeQueryTemp) 66 + 68: 12(int) Load 67 + Store 22(WidthU) 68 + 71: 13(ptr) AccessChain 60(sizeQueryTemp) 70 + 72: 12(int) Load 71 + Store 69(ElementsU) 72 + 74: 61 Load 63(g_tTex1df4a) + 75: 58(ivec2) ImageQuerySizeLod 74 26 + Store 73(sizeQueryTemp) 75 + 76: 13(ptr) AccessChain 73(sizeQueryTemp) 66 + 77: 12(int) Load 76 + Store 22(WidthU) 77 + 78: 13(ptr) AccessChain 73(sizeQueryTemp) 70 + 79: 12(int) Load 78 + Store 69(ElementsU) 79 + 80: 61 Load 63(g_tTex1df4a) + 81: 12(int) ImageQueryLevels 80 + Store 29(NumberOfLevelsU) 81 + 86: 83 Load 85(g_tTex1di4a) + 87: 58(ivec2) ImageQuerySizeLod 86 20 + Store 82(sizeQueryTemp) 87 + 88: 13(ptr) AccessChain 82(sizeQueryTemp) 66 + 89: 12(int) Load 88 + Store 22(WidthU) 89 + 90: 13(ptr) AccessChain 82(sizeQueryTemp) 70 + 91: 12(int) Load 90 + Store 69(ElementsU) 91 + 93: 83 Load 85(g_tTex1di4a) + 94: 58(ivec2) ImageQuerySizeLod 93 26 + Store 92(sizeQueryTemp) 94 + 95: 13(ptr) AccessChain 92(sizeQueryTemp) 66 + 96: 12(int) Load 95 + Store 22(WidthU) 96 + 97: 13(ptr) AccessChain 92(sizeQueryTemp) 70 + 98: 12(int) Load 97 + Store 69(ElementsU) 98 + 99: 83 Load 85(g_tTex1di4a) + 100: 12(int) ImageQueryLevels 99 + Store 29(NumberOfLevelsU) 100 + 105: 102 Load 104(g_tTex1du4a) + 106: 58(ivec2) ImageQuerySizeLod 105 20 + Store 101(sizeQueryTemp) 106 + 107: 13(ptr) AccessChain 101(sizeQueryTemp) 66 + 108: 12(int) Load 107 + Store 22(WidthU) 108 + 109: 13(ptr) AccessChain 101(sizeQueryTemp) 70 + 110: 12(int) Load 109 + Store 69(ElementsU) 110 + 112: 102 Load 104(g_tTex1du4a) + 113: 58(ivec2) ImageQuerySizeLod 112 26 + Store 111(sizeQueryTemp) 113 + 114: 13(ptr) AccessChain 111(sizeQueryTemp) 66 + 115: 12(int) Load 114 + Store 22(WidthU) 115 + 116: 13(ptr) AccessChain 111(sizeQueryTemp) 70 + 117: 12(int) Load 116 + Store 69(ElementsU) 117 + 118: 102 Load 104(g_tTex1du4a) + 119: 12(int) ImageQueryLevels 118 + Store 29(NumberOfLevelsU) 119 + 124: 121 Load 123(g_tTex2df4) + 125: 58(ivec2) ImageQuerySizeLod 124 20 + Store 120(sizeQueryTemp) 125 + 126: 13(ptr) AccessChain 120(sizeQueryTemp) 66 + 127: 12(int) Load 126 + Store 22(WidthU) 127 + 129: 13(ptr) AccessChain 120(sizeQueryTemp) 70 + 130: 12(int) Load 129 + Store 128(HeightU) 130 + 132: 121 Load 123(g_tTex2df4) + 133: 58(ivec2) ImageQuerySizeLod 132 26 + Store 131(sizeQueryTemp) 133 + 134: 13(ptr) AccessChain 131(sizeQueryTemp) 66 + 135: 12(int) Load 134 + Store 22(WidthU) 135 + 136: 13(ptr) AccessChain 131(sizeQueryTemp) 70 + 137: 12(int) Load 136 + Store 128(HeightU) 137 + 138: 121 Load 123(g_tTex2df4) + 139: 12(int) ImageQueryLevels 138 + Store 29(NumberOfLevelsU) 139 + 144: 141 Load 143(g_tTex2di4) + 145: 58(ivec2) ImageQuerySizeLod 144 20 + Store 140(sizeQueryTemp) 145 + 146: 13(ptr) AccessChain 140(sizeQueryTemp) 66 + 147: 12(int) Load 146 + Store 22(WidthU) 147 + 148: 13(ptr) AccessChain 140(sizeQueryTemp) 70 + 149: 12(int) Load 148 + Store 128(HeightU) 149 + 151: 141 Load 143(g_tTex2di4) + 152: 58(ivec2) ImageQuerySizeLod 151 26 + Store 150(sizeQueryTemp) 152 + 153: 13(ptr) AccessChain 150(sizeQueryTemp) 66 + 154: 12(int) Load 153 + Store 22(WidthU) 154 + 155: 13(ptr) AccessChain 150(sizeQueryTemp) 70 + 156: 12(int) Load 155 + Store 128(HeightU) 156 + 157: 141 Load 143(g_tTex2di4) + 158: 12(int) ImageQueryLevels 157 + Store 29(NumberOfLevelsU) 158 + 163: 160 Load 162(g_tTex2du4) + 164: 58(ivec2) ImageQuerySizeLod 163 20 + Store 159(sizeQueryTemp) 164 + 165: 13(ptr) AccessChain 159(sizeQueryTemp) 66 + 166: 12(int) Load 165 + Store 22(WidthU) 166 + 167: 13(ptr) AccessChain 159(sizeQueryTemp) 70 + 168: 12(int) Load 167 + Store 128(HeightU) 168 + 170: 160 Load 162(g_tTex2du4) + 171: 58(ivec2) ImageQuerySizeLod 170 26 + Store 169(sizeQueryTemp) 171 + 172: 13(ptr) AccessChain 169(sizeQueryTemp) 66 + 173: 12(int) Load 172 + Store 22(WidthU) 173 + 174: 13(ptr) AccessChain 169(sizeQueryTemp) 70 + 175: 12(int) Load 174 + Store 128(HeightU) 175 + 176: 160 Load 162(g_tTex2du4) + 177: 12(int) ImageQueryLevels 176 + Store 29(NumberOfLevelsU) 177 + 184: 181 Load 183(g_tTex2df4a) + 185: 178(ivec3) ImageQuerySizeLod 184 20 + Store 180(sizeQueryTemp) 185 + 186: 13(ptr) AccessChain 180(sizeQueryTemp) 66 + 187: 12(int) Load 186 + Store 22(WidthU) 187 + 188: 13(ptr) AccessChain 180(sizeQueryTemp) 70 + 189: 12(int) Load 188 + Store 128(HeightU) 189 + 191: 13(ptr) AccessChain 180(sizeQueryTemp) 190 + 192: 12(int) Load 191 + Store 69(ElementsU) 192 + 194: 181 Load 183(g_tTex2df4a) + 195: 178(ivec3) ImageQuerySizeLod 194 26 + Store 193(sizeQueryTemp) 195 + 196: 13(ptr) AccessChain 193(sizeQueryTemp) 66 + 197: 12(int) Load 196 + Store 22(WidthU) 197 + 198: 13(ptr) AccessChain 193(sizeQueryTemp) 70 + 199: 12(int) Load 198 + Store 128(HeightU) 199 + 200: 13(ptr) AccessChain 193(sizeQueryTemp) 190 + 201: 12(int) Load 200 + Store 69(ElementsU) 201 + 202: 181 Load 183(g_tTex2df4a) + 203: 12(int) ImageQueryLevels 202 + Store 29(NumberOfLevelsU) 203 + 208: 205 Load 207(g_tTex2di4a) + 209: 178(ivec3) ImageQuerySizeLod 208 20 + Store 204(sizeQueryTemp) 209 + 210: 13(ptr) AccessChain 204(sizeQueryTemp) 66 + 211: 12(int) Load 210 + Store 22(WidthU) 211 + 212: 13(ptr) AccessChain 204(sizeQueryTemp) 70 + 213: 12(int) Load 212 + Store 128(HeightU) 213 + 214: 13(ptr) AccessChain 204(sizeQueryTemp) 190 + 215: 12(int) Load 214 + Store 69(ElementsU) 215 + 217: 205 Load 207(g_tTex2di4a) + 218: 178(ivec3) ImageQuerySizeLod 217 26 + Store 216(sizeQueryTemp) 218 + 219: 13(ptr) AccessChain 216(sizeQueryTemp) 66 + 220: 12(int) Load 219 + Store 22(WidthU) 220 + 221: 13(ptr) AccessChain 216(sizeQueryTemp) 70 + 222: 12(int) Load 221 + Store 128(HeightU) 222 + 223: 13(ptr) AccessChain 216(sizeQueryTemp) 190 + 224: 12(int) Load 223 + Store 69(ElementsU) 224 + 225: 205 Load 207(g_tTex2di4a) + 226: 12(int) ImageQueryLevels 225 + Store 29(NumberOfLevelsU) 226 + 231: 228 Load 230(g_tTex2du4a) + 232: 178(ivec3) ImageQuerySizeLod 231 20 + Store 227(sizeQueryTemp) 232 + 233: 13(ptr) AccessChain 227(sizeQueryTemp) 66 + 234: 12(int) Load 233 + Store 22(WidthU) 234 + 235: 13(ptr) AccessChain 227(sizeQueryTemp) 70 + 236: 12(int) Load 235 + Store 128(HeightU) 236 + 237: 13(ptr) AccessChain 227(sizeQueryTemp) 190 + 238: 12(int) Load 237 + Store 69(ElementsU) 238 + 240: 228 Load 230(g_tTex2du4a) + 241: 178(ivec3) ImageQuerySizeLod 240 26 + Store 239(sizeQueryTemp) 241 + 242: 13(ptr) AccessChain 239(sizeQueryTemp) 66 + 243: 12(int) Load 242 + Store 22(WidthU) 243 + 244: 13(ptr) AccessChain 239(sizeQueryTemp) 70 + 245: 12(int) Load 244 + Store 128(HeightU) 245 + 246: 13(ptr) AccessChain 239(sizeQueryTemp) 190 + 247: 12(int) Load 246 + Store 69(ElementsU) 247 + 248: 228 Load 230(g_tTex2du4a) + 249: 12(int) ImageQueryLevels 248 + Store 29(NumberOfLevelsU) 249 + 254: 251 Load 253(g_tTex3df4) + 255: 178(ivec3) ImageQuerySizeLod 254 20 + Store 250(sizeQueryTemp) 255 + 256: 13(ptr) AccessChain 250(sizeQueryTemp) 66 + 257: 12(int) Load 256 + Store 22(WidthU) 257 + 258: 13(ptr) AccessChain 250(sizeQueryTemp) 70 + 259: 12(int) Load 258 + Store 128(HeightU) 259 + 261: 13(ptr) AccessChain 250(sizeQueryTemp) 190 + 262: 12(int) Load 261 + Store 260(DepthU) 262 + 264: 251 Load 253(g_tTex3df4) + 265: 178(ivec3) ImageQuerySizeLod 264 26 + Store 263(sizeQueryTemp) 265 + 266: 13(ptr) AccessChain 263(sizeQueryTemp) 66 + 267: 12(int) Load 266 + Store 22(WidthU) 267 + 268: 13(ptr) AccessChain 263(sizeQueryTemp) 70 + 269: 12(int) Load 268 + Store 128(HeightU) 269 + 270: 13(ptr) AccessChain 263(sizeQueryTemp) 190 + 271: 12(int) Load 270 + Store 260(DepthU) 271 + 272: 251 Load 253(g_tTex3df4) + 273: 12(int) ImageQueryLevels 272 + Store 29(NumberOfLevelsU) 273 + 278: 275 Load 277(g_tTex3di4) + 279: 178(ivec3) ImageQuerySizeLod 278 20 + Store 274(sizeQueryTemp) 279 + 280: 13(ptr) AccessChain 274(sizeQueryTemp) 66 + 281: 12(int) Load 280 + Store 22(WidthU) 281 + 282: 13(ptr) AccessChain 274(sizeQueryTemp) 70 + 283: 12(int) Load 282 + Store 128(HeightU) 283 + 284: 13(ptr) AccessChain 274(sizeQueryTemp) 190 + 285: 12(int) Load 284 + Store 260(DepthU) 285 + 287: 275 Load 277(g_tTex3di4) + 288: 178(ivec3) ImageQuerySizeLod 287 26 + Store 286(sizeQueryTemp) 288 + 289: 13(ptr) AccessChain 286(sizeQueryTemp) 66 + 290: 12(int) Load 289 + Store 22(WidthU) 290 + 291: 13(ptr) AccessChain 286(sizeQueryTemp) 70 + 292: 12(int) Load 291 + Store 128(HeightU) 292 + 293: 13(ptr) AccessChain 286(sizeQueryTemp) 190 + 294: 12(int) Load 293 + Store 260(DepthU) 294 + 295: 275 Load 277(g_tTex3di4) + 296: 12(int) ImageQueryLevels 295 + Store 29(NumberOfLevelsU) 296 + 301: 298 Load 300(g_tTex3du4) + 302: 178(ivec3) ImageQuerySizeLod 301 20 + Store 297(sizeQueryTemp) 302 + 303: 13(ptr) AccessChain 297(sizeQueryTemp) 66 + 304: 12(int) Load 303 + Store 22(WidthU) 304 + 305: 13(ptr) AccessChain 297(sizeQueryTemp) 70 + 306: 12(int) Load 305 + Store 128(HeightU) 306 + 307: 13(ptr) AccessChain 297(sizeQueryTemp) 190 + 308: 12(int) Load 307 + Store 260(DepthU) 308 + 310: 298 Load 300(g_tTex3du4) + 311: 178(ivec3) ImageQuerySizeLod 310 26 + Store 309(sizeQueryTemp) 311 + 312: 13(ptr) AccessChain 309(sizeQueryTemp) 66 + 313: 12(int) Load 312 + Store 22(WidthU) 313 + 314: 13(ptr) AccessChain 309(sizeQueryTemp) 70 + 315: 12(int) Load 314 + Store 128(HeightU) 315 + 316: 13(ptr) AccessChain 309(sizeQueryTemp) 190 + 317: 12(int) Load 316 + Store 260(DepthU) 317 + 318: 298 Load 300(g_tTex3du4) + 319: 12(int) ImageQueryLevels 318 + Store 29(NumberOfLevelsU) 319 + 324: 321 Load 323(g_tTexcdf4) + 325: 58(ivec2) ImageQuerySizeLod 324 20 + Store 320(sizeQueryTemp) 325 + 326: 13(ptr) AccessChain 320(sizeQueryTemp) 66 + 327: 12(int) Load 326 + Store 22(WidthU) 327 + 328: 13(ptr) AccessChain 320(sizeQueryTemp) 70 + 329: 12(int) Load 328 + Store 128(HeightU) 329 + 331: 321 Load 323(g_tTexcdf4) + 332: 58(ivec2) ImageQuerySizeLod 331 26 + Store 330(sizeQueryTemp) 332 + 333: 13(ptr) AccessChain 330(sizeQueryTemp) 66 + 334: 12(int) Load 333 + Store 22(WidthU) 334 + 335: 13(ptr) AccessChain 330(sizeQueryTemp) 70 + 336: 12(int) Load 335 + Store 128(HeightU) 336 + 337: 321 Load 323(g_tTexcdf4) + 338: 12(int) ImageQueryLevels 337 + Store 29(NumberOfLevelsU) 338 + 343: 340 Load 342(g_tTexcdi4) + 344: 58(ivec2) ImageQuerySizeLod 343 20 + Store 339(sizeQueryTemp) 344 + 345: 13(ptr) AccessChain 339(sizeQueryTemp) 66 + 346: 12(int) Load 345 + Store 22(WidthU) 346 + 347: 13(ptr) AccessChain 339(sizeQueryTemp) 70 + 348: 12(int) Load 347 + Store 128(HeightU) 348 + 350: 340 Load 342(g_tTexcdi4) + 351: 58(ivec2) ImageQuerySizeLod 350 26 + Store 349(sizeQueryTemp) 351 + 352: 13(ptr) AccessChain 349(sizeQueryTemp) 66 + 353: 12(int) Load 352 + Store 22(WidthU) 353 + 354: 13(ptr) AccessChain 349(sizeQueryTemp) 70 + 355: 12(int) Load 354 + Store 128(HeightU) 355 + 356: 340 Load 342(g_tTexcdi4) + 357: 12(int) ImageQueryLevels 356 + Store 29(NumberOfLevelsU) 357 + 362: 359 Load 361(g_tTexcdu4) + 363: 58(ivec2) ImageQuerySizeLod 362 20 + Store 358(sizeQueryTemp) 363 + 364: 13(ptr) AccessChain 358(sizeQueryTemp) 66 + 365: 12(int) Load 364 + Store 22(WidthU) 365 + 366: 13(ptr) AccessChain 358(sizeQueryTemp) 70 + 367: 12(int) Load 366 + Store 128(HeightU) 367 + 369: 359 Load 361(g_tTexcdu4) + 370: 58(ivec2) ImageQuerySizeLod 369 26 + Store 368(sizeQueryTemp) 370 + 371: 13(ptr) AccessChain 368(sizeQueryTemp) 66 + 372: 12(int) Load 371 + Store 22(WidthU) 372 + 373: 13(ptr) AccessChain 368(sizeQueryTemp) 70 + 374: 12(int) Load 373 + Store 128(HeightU) 374 + 375: 359 Load 361(g_tTexcdu4) + 376: 12(int) ImageQueryLevels 375 + Store 29(NumberOfLevelsU) 376 + 381: 378 Load 380(g_tTexcdf4a) + 382: 178(ivec3) ImageQuerySizeLod 381 20 + Store 377(sizeQueryTemp) 382 + 383: 13(ptr) AccessChain 377(sizeQueryTemp) 66 + 384: 12(int) Load 383 + Store 22(WidthU) 384 + 385: 13(ptr) AccessChain 377(sizeQueryTemp) 70 + 386: 12(int) Load 385 + Store 128(HeightU) 386 + 387: 13(ptr) AccessChain 377(sizeQueryTemp) 190 + 388: 12(int) Load 387 + Store 69(ElementsU) 388 + 390: 378 Load 380(g_tTexcdf4a) + 391: 178(ivec3) ImageQuerySizeLod 390 26 + Store 389(sizeQueryTemp) 391 + 392: 13(ptr) AccessChain 389(sizeQueryTemp) 66 + 393: 12(int) Load 392 + Store 22(WidthU) 393 + 394: 13(ptr) AccessChain 389(sizeQueryTemp) 70 + 395: 12(int) Load 394 + Store 128(HeightU) 395 + 396: 13(ptr) AccessChain 389(sizeQueryTemp) 190 + 397: 12(int) Load 396 + Store 69(ElementsU) 397 + 398: 378 Load 380(g_tTexcdf4a) + 399: 12(int) ImageQueryLevels 398 + Store 29(NumberOfLevelsU) 399 + 404: 401 Load 403(g_tTexcdi4a) + 405: 178(ivec3) ImageQuerySizeLod 404 20 + Store 400(sizeQueryTemp) 405 + 406: 13(ptr) AccessChain 400(sizeQueryTemp) 66 + 407: 12(int) Load 406 + Store 22(WidthU) 407 + 408: 13(ptr) AccessChain 400(sizeQueryTemp) 70 + 409: 12(int) Load 408 + Store 128(HeightU) 409 + 410: 13(ptr) AccessChain 400(sizeQueryTemp) 190 + 411: 12(int) Load 410 + Store 69(ElementsU) 411 + 413: 401 Load 403(g_tTexcdi4a) + 414: 178(ivec3) ImageQuerySizeLod 413 26 + Store 412(sizeQueryTemp) 414 + 415: 13(ptr) AccessChain 412(sizeQueryTemp) 66 + 416: 12(int) Load 415 + Store 22(WidthU) 416 + 417: 13(ptr) AccessChain 412(sizeQueryTemp) 70 + 418: 12(int) Load 417 + Store 128(HeightU) 418 + 419: 13(ptr) AccessChain 412(sizeQueryTemp) 190 + 420: 12(int) Load 419 + Store 69(ElementsU) 420 + 421: 401 Load 403(g_tTexcdi4a) + 422: 12(int) ImageQueryLevels 421 + Store 29(NumberOfLevelsU) 422 + 427: 424 Load 426(g_tTexcdu4a) + 428: 178(ivec3) ImageQuerySizeLod 427 20 + Store 423(sizeQueryTemp) 428 + 429: 13(ptr) AccessChain 423(sizeQueryTemp) 66 + 430: 12(int) Load 429 + Store 22(WidthU) 430 + 431: 13(ptr) AccessChain 423(sizeQueryTemp) 70 + 432: 12(int) Load 431 + Store 128(HeightU) 432 + 433: 13(ptr) AccessChain 423(sizeQueryTemp) 190 + 434: 12(int) Load 433 + Store 69(ElementsU) 434 + 436: 424 Load 426(g_tTexcdu4a) + 437: 178(ivec3) ImageQuerySizeLod 436 26 + Store 435(sizeQueryTemp) 437 + 438: 13(ptr) AccessChain 435(sizeQueryTemp) 66 + 439: 12(int) Load 438 + Store 22(WidthU) 439 + 440: 13(ptr) AccessChain 435(sizeQueryTemp) 70 + 441: 12(int) Load 440 + Store 128(HeightU) 441 + 442: 13(ptr) AccessChain 435(sizeQueryTemp) 190 + 443: 12(int) Load 442 + Store 69(ElementsU) 443 + 444: 424 Load 426(g_tTexcdu4a) + 445: 12(int) ImageQueryLevels 444 + Store 29(NumberOfLevelsU) 445 + 450: 447 Load 449(g_tTex2dmsf4) + 451: 58(ivec2) ImageQuerySize 450 + Store 446(sizeQueryTemp) 451 + 452: 13(ptr) AccessChain 446(sizeQueryTemp) 66 + 453: 12(int) Load 452 + Store 22(WidthU) 453 + 454: 13(ptr) AccessChain 446(sizeQueryTemp) 70 + 455: 12(int) Load 454 + Store 128(HeightU) 455 + 457: 447 Load 449(g_tTex2dmsf4) + 458: 12(int) ImageQuerySamples 457 + Store 456(NumberOfSamplesU) 458 + 463: 460 Load 462(g_tTex2dmsi4) + 464: 58(ivec2) ImageQuerySize 463 + Store 459(sizeQueryTemp) 464 + 465: 13(ptr) AccessChain 459(sizeQueryTemp) 66 + 466: 12(int) Load 465 + Store 22(WidthU) 466 + 467: 13(ptr) AccessChain 459(sizeQueryTemp) 70 + 468: 12(int) Load 467 + Store 128(HeightU) 468 + 469: 460 Load 462(g_tTex2dmsi4) + 470: 12(int) ImageQuerySamples 469 + Store 456(NumberOfSamplesU) 470 + 475: 472 Load 474(g_tTex2dmsu4) + 476: 58(ivec2) ImageQuerySize 475 + Store 471(sizeQueryTemp) 476 + 477: 13(ptr) AccessChain 471(sizeQueryTemp) 66 + 478: 12(int) Load 477 + Store 22(WidthU) 478 + 479: 13(ptr) AccessChain 471(sizeQueryTemp) 70 + 480: 12(int) Load 479 + Store 128(HeightU) 480 + 481: 472 Load 474(g_tTex2dmsu4) + 482: 12(int) ImageQuerySamples 481 + Store 456(NumberOfSamplesU) 482 + 487: 484 Load 486(g_tTex2dmsf4a) + 488: 178(ivec3) ImageQuerySize 487 + Store 483(sizeQueryTemp) 488 + 489: 13(ptr) AccessChain 483(sizeQueryTemp) 66 + 490: 12(int) Load 489 + Store 22(WidthU) 490 + 491: 13(ptr) AccessChain 483(sizeQueryTemp) 70 + 492: 12(int) Load 491 + Store 128(HeightU) 492 + 493: 13(ptr) AccessChain 483(sizeQueryTemp) 190 + 494: 12(int) Load 493 + Store 69(ElementsU) 494 + 495: 484 Load 486(g_tTex2dmsf4a) + 496: 12(int) ImageQuerySamples 495 + Store 456(NumberOfSamplesU) 496 + 501: 498 Load 500(g_tTex2dmsi4a) + 502: 178(ivec3) ImageQuerySize 501 + Store 497(sizeQueryTemp) 502 + 503: 13(ptr) AccessChain 497(sizeQueryTemp) 66 + 504: 12(int) Load 503 + Store 22(WidthU) 504 + 505: 13(ptr) AccessChain 497(sizeQueryTemp) 70 + 506: 12(int) Load 505 + Store 128(HeightU) 506 + 507: 13(ptr) AccessChain 497(sizeQueryTemp) 190 + 508: 12(int) Load 507 + Store 69(ElementsU) 508 + 509: 498 Load 500(g_tTex2dmsi4a) + 510: 12(int) ImageQuerySamples 509 + Store 456(NumberOfSamplesU) 510 + 515: 512 Load 514(g_tTex2dmsu4a) + 516: 178(ivec3) ImageQuerySize 515 + Store 511(sizeQueryTemp) 516 + 517: 13(ptr) AccessChain 511(sizeQueryTemp) 66 + 518: 12(int) Load 517 + Store 22(WidthU) 518 + 519: 13(ptr) AccessChain 511(sizeQueryTemp) 70 + 520: 12(int) Load 519 + Store 128(HeightU) 520 + 521: 13(ptr) AccessChain 511(sizeQueryTemp) 190 + 522: 12(int) Load 521 + Store 69(ElementsU) 522 + 523: 512 Load 514(g_tTex2dmsu4a) + 524: 12(int) ImageQuerySamples 523 + Store 456(NumberOfSamplesU) 524 + 530: 529(ptr) AccessChain 526(psout) 20 + Store 530 528 + 533: 532(ptr) AccessChain 526(psout) 531 + Store 533 527 + 534:8(PS_OUTPUT) Load 526(psout) + ReturnValue 534 + FunctionEnd 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 new file mode 100644 index 0000000..2faa744 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.getdimensions.dx10.vert.out @@ -0,0 +1,205 @@ +hlsl.getdimensions.dx10.vert +Shader version: 450 +0:? Sequence +0:11 Function Definition: @main( ( temp structure{ temp 4-component vector of float Pos}) +0:11 Function Parameters: +0:? Sequence +0:21 Sequence +0:21 move second child to first child ( temp uint) +0:21 'sizeQueryTemp' ( temp uint) +0:21 textureSize ( temp uint) +0:21 'g_tTex1df4' (layout( binding=0) uniform texture1D) +0:21 Constant: +0:21 0 (const int) +0:21 move second child to first child ( temp uint) +0:21 'WidthU' ( temp uint) +0:21 'sizeQueryTemp' ( temp uint) +0:22 Sequence +0:22 move second child to first child ( temp uint) +0:22 'sizeQueryTemp' ( temp uint) +0:22 textureSize ( temp uint) +0:22 'g_tTex1df4' (layout( binding=0) uniform texture1D) +0:22 Constant: +0:22 6 (const uint) +0:22 move second child to first child ( temp uint) +0:22 'WidthU' ( temp uint) +0:22 'sizeQueryTemp' ( temp uint) +0:22 move second child to first child ( temp uint) +0:22 'NumberOfLevelsU' ( temp uint) +0:22 textureQueryLevels ( temp uint) +0:22 'g_tTex1df4' (layout( binding=0) uniform texture1D) +0:24 move second child to first child ( temp 4-component vector of float) +0:24 Pos: direct index for structure ( temp 4-component vector of float) +0:24 'vsout' ( temp structure{ temp 4-component vector of float Pos}) +0:24 Constant: +0:24 0 (const int) +0:? Constant: +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:26 Branch: Return with expression +0:26 'vsout' ( temp structure{ temp 4-component vector of float Pos}) +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:? '@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: +0:11 0 (const int) +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{}) + + +Linked vertex stage: + + +Shader version: 450 +0:? Sequence +0:11 Function Definition: @main( ( temp structure{ temp 4-component vector of float Pos}) +0:11 Function Parameters: +0:? Sequence +0:21 Sequence +0:21 move second child to first child ( temp uint) +0:21 'sizeQueryTemp' ( temp uint) +0:21 textureSize ( temp uint) +0:21 'g_tTex1df4' (layout( binding=0) uniform texture1D) +0:21 Constant: +0:21 0 (const int) +0:21 move second child to first child ( temp uint) +0:21 'WidthU' ( temp uint) +0:21 'sizeQueryTemp' ( temp uint) +0:22 Sequence +0:22 move second child to first child ( temp uint) +0:22 'sizeQueryTemp' ( temp uint) +0:22 textureSize ( temp uint) +0:22 'g_tTex1df4' (layout( binding=0) uniform texture1D) +0:22 Constant: +0:22 6 (const uint) +0:22 move second child to first child ( temp uint) +0:22 'WidthU' ( temp uint) +0:22 'sizeQueryTemp' ( temp uint) +0:22 move second child to first child ( temp uint) +0:22 'NumberOfLevelsU' ( temp uint) +0:22 textureQueryLevels ( temp uint) +0:22 'g_tTex1df4' (layout( binding=0) uniform texture1D) +0:24 move second child to first child ( temp 4-component vector of float) +0:24 Pos: direct index for structure ( temp 4-component vector of float) +0:24 'vsout' ( temp structure{ temp 4-component vector of float Pos}) +0:24 Constant: +0:24 0 (const int) +0:? Constant: +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:26 Branch: Return with expression +0:26 'vsout' ( temp structure{ temp 4-component vector of float Pos}) +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:? '@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: +0:11 0 (const int) +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{}) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 51 + + Capability Shader + Capability Sampled1D + Capability ImageQuery + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 42 50 + Name 4 "main" + Name 8 "VS_OUTPUT" + MemberName 8(VS_OUTPUT) 0 "Pos" + Name 10 "@main(" + Name 14 "sizeQueryTemp" + Name 17 "g_tTex1df4" + Name 22 "WidthU" + Name 24 "sizeQueryTemp" + Name 29 "NumberOfLevelsU" + Name 33 "vsout" + 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 47(g_sSamp) DescriptorSet 0 + Decorate 47(g_sSamp) Binding 0 + Decorate 50(@entryPointOutput) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8(VS_OUTPUT): TypeStruct 7(fvec4) + 9: TypeFunction 8(VS_OUTPUT) + 12: TypeInt 32 0 + 13: TypePointer Function 12(int) + 15: TypeImage 6(float) 1D sampled format:Unknown + 16: TypePointer UniformConstant 15 + 17(g_tTex1df4): 16(ptr) Variable UniformConstant + 19: TypeInt 32 1 + 20: 19(int) Constant 0 + 26: 12(int) Constant 6 + 32: TypePointer Function 8(VS_OUTPUT) + 34: 6(float) Constant 0 + 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 + 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 + Return + FunctionEnd + 10(@main():8(VS_OUTPUT) Function None 9 + 11: Label +14(sizeQueryTemp): 13(ptr) Variable Function + 22(WidthU): 13(ptr) Variable Function +24(sizeQueryTemp): 13(ptr) Variable Function +29(NumberOfLevelsU): 13(ptr) Variable Function + 33(vsout): 32(ptr) Variable Function + 18: 15 Load 17(g_tTex1df4) + 21: 12(int) ImageQuerySizeLod 18 20 + Store 14(sizeQueryTemp) 21 + 23: 12(int) Load 14(sizeQueryTemp) + Store 22(WidthU) 23 + 25: 15 Load 17(g_tTex1df4) + 27: 12(int) ImageQuerySizeLod 25 26 + Store 24(sizeQueryTemp) 27 + 28: 12(int) Load 24(sizeQueryTemp) + Store 22(WidthU) 28 + 30: 15 Load 17(g_tTex1df4) + 31: 12(int) ImageQueryLevels 30 + Store 29(NumberOfLevelsU) 31 + 37: 36(ptr) AccessChain 33(vsout) 20 + Store 37 35 + 38:8(VS_OUTPUT) Load 33(vsout) + ReturnValue 38 + FunctionEnd 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 new file mode 100644 index 0000000..781ed90 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out @@ -0,0 +1,1113 @@ +hlsl.getdimensions.rw.dx10.frag +Shader version: 450 +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}) +0:44 Function Parameters: +0:? Sequence +0:63 Sequence +0:63 move second child to first child ( temp uint) +0:63 'sizeQueryTemp' ( temp uint) +0:63 imageQuerySize ( temp uint) +0:63 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:63 move second child to first child ( temp uint) +0:63 'WidthU' ( temp uint) +0:63 'sizeQueryTemp' ( temp uint) +0:64 Sequence +0:64 move second child to first child ( temp uint) +0:64 'sizeQueryTemp' ( temp uint) +0:64 imageQuerySize ( temp uint) +0:64 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:64 move second child to first child ( temp uint) +0:64 'WidthU' ( temp uint) +0:64 'sizeQueryTemp' ( temp uint) +0:65 Sequence +0:65 move second child to first child ( temp uint) +0:65 'sizeQueryTemp' ( temp uint) +0:65 imageQuerySize ( temp uint) +0:65 'g_tTex1du4' (layout( rgba32ui) uniform uimage1D) +0:65 move second child to first child ( temp uint) +0:65 'WidthU' ( temp uint) +0:65 'sizeQueryTemp' ( temp uint) +0:68 Sequence +0:68 move second child to first child ( temp uint) +0:68 'sizeQueryTemp' ( temp uint) +0:68 imageQuerySize ( temp uint) +0:68 'g_tBuffF' (layout( rgba32f) uniform imageBuffer) +0:68 move second child to first child ( temp uint) +0:68 'WidthU' ( temp uint) +0:68 'sizeQueryTemp' ( temp uint) +0:69 Sequence +0:69 move second child to first child ( temp uint) +0:69 'sizeQueryTemp' ( temp uint) +0:69 imageQuerySize ( temp uint) +0:69 'g_tBuffI' (layout( rgba32i) uniform iimageBuffer) +0:69 move second child to first child ( temp uint) +0:69 'WidthU' ( temp uint) +0:69 'sizeQueryTemp' ( temp uint) +0:70 Sequence +0:70 move second child to first child ( temp uint) +0:70 'sizeQueryTemp' ( temp uint) +0:70 imageQuerySize ( temp uint) +0:70 'g_tBuffU' (layout( rgba32ui) uniform uimageBuffer) +0:70 move second child to first child ( temp uint) +0:70 'WidthU' ( temp uint) +0:70 'sizeQueryTemp' ( temp uint) +0:73 Sequence +0:73 move second child to first child ( temp 2-component vector of uint) +0:73 'sizeQueryTemp' ( temp 2-component vector of uint) +0:73 imageQuerySize ( temp 2-component vector of uint) +0:73 'g_tTex1df4a' (layout( rgba32f) uniform image1DArray) +0:73 move second child to first child ( temp uint) +0:73 'WidthU' ( temp uint) +0:73 direct index ( temp uint) +0:73 'sizeQueryTemp' ( temp 2-component vector of uint) +0:73 Constant: +0:73 0 (const int) +0:73 move second child to first child ( temp uint) +0:73 'ElementsU' ( temp uint) +0:73 direct index ( temp uint) +0:73 'sizeQueryTemp' ( temp 2-component vector of uint) +0:73 Constant: +0:73 1 (const int) +0:74 Sequence +0:74 move second child to first child ( temp 2-component vector of uint) +0:74 'sizeQueryTemp' ( temp 2-component vector of uint) +0:74 imageQuerySize ( temp 2-component vector of uint) +0:74 'g_tTex1di4a' (layout( rgba32i) uniform iimage1DArray) +0:74 move second child to first child ( temp uint) +0:74 'WidthU' ( temp uint) +0:74 direct index ( temp uint) +0:74 'sizeQueryTemp' ( temp 2-component vector of uint) +0:74 Constant: +0:74 0 (const int) +0:74 move second child to first child ( temp uint) +0:74 'ElementsU' ( temp uint) +0:74 direct index ( temp uint) +0:74 'sizeQueryTemp' ( temp 2-component vector of uint) +0:74 Constant: +0:74 1 (const int) +0:75 Sequence +0:75 move second child to first child ( temp 2-component vector of uint) +0:75 'sizeQueryTemp' ( temp 2-component vector of uint) +0:75 imageQuerySize ( temp 2-component vector of uint) +0:75 'g_tTex1du4a' (layout( rgba32ui) uniform uimage1DArray) +0:75 move second child to first child ( temp uint) +0:75 'WidthU' ( temp uint) +0:75 direct index ( temp uint) +0:75 'sizeQueryTemp' ( temp 2-component vector of uint) +0:75 Constant: +0:75 0 (const int) +0:75 move second child to first child ( temp uint) +0:75 'ElementsU' ( temp uint) +0:75 direct index ( temp uint) +0:75 'sizeQueryTemp' ( temp 2-component vector of uint) +0:75 Constant: +0:75 1 (const int) +0:78 Sequence +0:78 move second child to first child ( temp 2-component vector of uint) +0:78 'sizeQueryTemp' ( temp 2-component vector of uint) +0:78 imageQuerySize ( temp 2-component vector of uint) +0:78 'g_tTex2df4' (layout( rgba32f) uniform image2D) +0:78 move second child to first child ( temp uint) +0:78 'WidthU' ( temp uint) +0:78 direct index ( temp uint) +0:78 'sizeQueryTemp' ( temp 2-component vector of uint) +0:78 Constant: +0:78 0 (const int) +0:78 move second child to first child ( temp uint) +0:78 'HeightU' ( temp uint) +0:78 direct index ( temp uint) +0:78 'sizeQueryTemp' ( temp 2-component vector of uint) +0:78 Constant: +0:78 1 (const int) +0:79 Sequence +0:79 move second child to first child ( temp 2-component vector of uint) +0:79 'sizeQueryTemp' ( temp 2-component vector of uint) +0:79 imageQuerySize ( temp 2-component vector of uint) +0:79 'g_tTex2di4' (layout( rgba32i) uniform iimage2D) +0:79 move second child to first child ( temp uint) +0:79 'WidthU' ( temp uint) +0:79 direct index ( temp uint) +0:79 'sizeQueryTemp' ( temp 2-component vector of uint) +0:79 Constant: +0:79 0 (const int) +0:79 move second child to first child ( temp uint) +0:79 'HeightU' ( temp uint) +0:79 direct index ( temp uint) +0:79 'sizeQueryTemp' ( temp 2-component vector of uint) +0:79 Constant: +0:79 1 (const int) +0:80 Sequence +0:80 move second child to first child ( temp 2-component vector of uint) +0:80 'sizeQueryTemp' ( temp 2-component vector of uint) +0:80 imageQuerySize ( temp 2-component vector of uint) +0:80 'g_tTex2du4' (layout( rgba32ui) uniform uimage2D) +0:80 move second child to first child ( temp uint) +0:80 'WidthU' ( temp uint) +0:80 direct index ( temp uint) +0:80 'sizeQueryTemp' ( temp 2-component vector of uint) +0:80 Constant: +0:80 0 (const int) +0:80 move second child to first child ( temp uint) +0:80 'HeightU' ( temp uint) +0:80 direct index ( temp uint) +0:80 'sizeQueryTemp' ( temp 2-component vector of uint) +0:80 Constant: +0:80 1 (const int) +0:83 Sequence +0:83 move second child to first child ( temp 3-component vector of uint) +0:83 'sizeQueryTemp' ( temp 3-component vector of uint) +0:83 imageQuerySize ( temp 3-component vector of uint) +0:83 'g_tTex2df4a' (layout( rgba32f) uniform image2DArray) +0:83 move second child to first child ( temp uint) +0:83 'WidthU' ( temp uint) +0:83 direct index ( temp uint) +0:83 'sizeQueryTemp' ( temp 3-component vector of uint) +0:83 Constant: +0:83 0 (const int) +0:83 move second child to first child ( temp uint) +0:83 'HeightU' ( temp uint) +0:83 direct index ( temp uint) +0:83 'sizeQueryTemp' ( temp 3-component vector of uint) +0:83 Constant: +0:83 1 (const int) +0:83 move second child to first child ( temp uint) +0:83 'ElementsU' ( temp uint) +0:83 direct index ( temp uint) +0:83 'sizeQueryTemp' ( temp 3-component vector of uint) +0:83 Constant: +0:83 2 (const int) +0:84 Sequence +0:84 move second child to first child ( temp 3-component vector of uint) +0:84 'sizeQueryTemp' ( temp 3-component vector of uint) +0:84 imageQuerySize ( temp 3-component vector of uint) +0:84 'g_tTex2di4a' (layout( rgba32i) uniform iimage2DArray) +0:84 move second child to first child ( temp uint) +0:84 'WidthU' ( temp uint) +0:84 direct index ( temp uint) +0:84 'sizeQueryTemp' ( temp 3-component vector of uint) +0:84 Constant: +0:84 0 (const int) +0:84 move second child to first child ( temp uint) +0:84 'HeightU' ( temp uint) +0:84 direct index ( temp uint) +0:84 'sizeQueryTemp' ( temp 3-component vector of uint) +0:84 Constant: +0:84 1 (const int) +0:84 move second child to first child ( temp uint) +0:84 'ElementsU' ( temp uint) +0:84 direct index ( temp uint) +0:84 'sizeQueryTemp' ( temp 3-component vector of uint) +0:84 Constant: +0:84 2 (const int) +0:85 Sequence +0:85 move second child to first child ( temp 3-component vector of uint) +0:85 'sizeQueryTemp' ( temp 3-component vector of uint) +0:85 imageQuerySize ( temp 3-component vector of uint) +0:85 'g_tTex2du4a' (layout( rgba32ui) uniform uimage2DArray) +0:85 move second child to first child ( temp uint) +0:85 'WidthU' ( temp uint) +0:85 direct index ( temp uint) +0:85 'sizeQueryTemp' ( temp 3-component vector of uint) +0:85 Constant: +0:85 0 (const int) +0:85 move second child to first child ( temp uint) +0:85 'HeightU' ( temp uint) +0:85 direct index ( temp uint) +0:85 'sizeQueryTemp' ( temp 3-component vector of uint) +0:85 Constant: +0:85 1 (const int) +0:85 move second child to first child ( temp uint) +0:85 'ElementsU' ( temp uint) +0:85 direct index ( temp uint) +0:85 'sizeQueryTemp' ( temp 3-component vector of uint) +0:85 Constant: +0:85 2 (const int) +0:88 Sequence +0:88 move second child to first child ( temp 3-component vector of uint) +0:88 'sizeQueryTemp' ( temp 3-component vector of uint) +0:88 imageQuerySize ( temp 3-component vector of uint) +0:88 'g_tTex3df4' (layout( rgba32f) uniform image3D) +0:88 move second child to first child ( temp uint) +0:88 'WidthU' ( temp uint) +0:88 direct index ( temp uint) +0:88 'sizeQueryTemp' ( temp 3-component vector of uint) +0:88 Constant: +0:88 0 (const int) +0:88 move second child to first child ( temp uint) +0:88 'HeightU' ( temp uint) +0:88 direct index ( temp uint) +0:88 'sizeQueryTemp' ( temp 3-component vector of uint) +0:88 Constant: +0:88 1 (const int) +0:88 move second child to first child ( temp uint) +0:88 'DepthU' ( temp uint) +0:88 direct index ( temp uint) +0:88 'sizeQueryTemp' ( temp 3-component vector of uint) +0:88 Constant: +0:88 2 (const int) +0:89 Sequence +0:89 move second child to first child ( temp 3-component vector of uint) +0:89 'sizeQueryTemp' ( temp 3-component vector of uint) +0:89 imageQuerySize ( temp 3-component vector of uint) +0:89 'g_tTex3di4' (layout( rgba32i) uniform iimage3D) +0:89 move second child to first child ( temp uint) +0:89 'WidthU' ( temp uint) +0:89 direct index ( temp uint) +0:89 'sizeQueryTemp' ( temp 3-component vector of uint) +0:89 Constant: +0:89 0 (const int) +0:89 move second child to first child ( temp uint) +0:89 'HeightU' ( temp uint) +0:89 direct index ( temp uint) +0:89 'sizeQueryTemp' ( temp 3-component vector of uint) +0:89 Constant: +0:89 1 (const int) +0:89 move second child to first child ( temp uint) +0:89 'DepthU' ( temp uint) +0:89 direct index ( temp uint) +0:89 'sizeQueryTemp' ( temp 3-component vector of uint) +0:89 Constant: +0:89 2 (const int) +0:90 Sequence +0:90 move second child to first child ( temp 3-component vector of uint) +0:90 'sizeQueryTemp' ( temp 3-component vector of uint) +0:90 imageQuerySize ( temp 3-component vector of uint) +0:90 'g_tTex3du4' (layout( rgba32ui) uniform uimage3D) +0:90 move second child to first child ( temp uint) +0:90 'WidthU' ( temp uint) +0:90 direct index ( temp uint) +0:90 'sizeQueryTemp' ( temp 3-component vector of uint) +0:90 Constant: +0:90 0 (const int) +0:90 move second child to first child ( temp uint) +0:90 'HeightU' ( temp uint) +0:90 direct index ( temp uint) +0:90 'sizeQueryTemp' ( temp 3-component vector of uint) +0:90 Constant: +0:90 1 (const int) +0:90 move second child to first child ( temp uint) +0:90 'DepthU' ( temp uint) +0:90 direct index ( temp uint) +0:90 'sizeQueryTemp' ( temp 3-component vector of uint) +0:90 Constant: +0:90 2 (const int) +0:92 move second child to first child ( temp 4-component vector of float) +0:92 Color: direct index for structure ( temp 4-component vector of float) +0:92 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:92 Constant: +0:92 0 (const int) +0:92 Constant: +0:92 1.000000 +0:92 1.000000 +0:92 1.000000 +0:92 1.000000 +0:93 move second child to first child ( temp float) +0:93 Depth: direct index for structure ( temp float) +0:93 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:93 Constant: +0:93 1 (const int) +0:93 Constant: +0:93 1.000000 +0:95 Branch: Return with expression +0:95 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:44 Function Definition: main( ( temp void) +0:44 Function Parameters: +0:? Sequence +0:44 Sequence +0:44 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:44 1 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:? 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:? 'g_tTex1du4' (layout( rgba32ui) uniform uimage1D) +0:? 'g_tTex2df4' (layout( rgba32f) uniform image2D) +0:? 'g_tTex2di4' (layout( rgba32i) uniform iimage2D) +0:? 'g_tTex2du4' (layout( rgba32ui) uniform uimage2D) +0:? 'g_tTex3df4' (layout( rgba32f) uniform image3D) +0:? 'g_tTex3di4' (layout( rgba32i) uniform iimage3D) +0:? 'g_tTex3du4' (layout( rgba32ui) uniform uimage3D) +0:? 'g_tTex1df4a' (layout( rgba32f) uniform image1DArray) +0:? 'g_tTex1di4a' (layout( rgba32i) uniform iimage1DArray) +0:? 'g_tTex1du4a' (layout( rgba32ui) uniform uimage1DArray) +0:? 'g_tTex2df4a' (layout( rgba32f) uniform image2DArray) +0:? 'g_tTex2di4a' (layout( rgba32i) uniform iimage2DArray) +0:? 'g_tTex2du4a' (layout( rgba32ui) uniform uimage2DArray) +0:? 'g_tBuffF' (layout( rgba32f) uniform imageBuffer) +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) + + +Linked fragment stage: + + +Shader version: 450 +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}) +0:44 Function Parameters: +0:? Sequence +0:63 Sequence +0:63 move second child to first child ( temp uint) +0:63 'sizeQueryTemp' ( temp uint) +0:63 imageQuerySize ( temp uint) +0:63 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:63 move second child to first child ( temp uint) +0:63 'WidthU' ( temp uint) +0:63 'sizeQueryTemp' ( temp uint) +0:64 Sequence +0:64 move second child to first child ( temp uint) +0:64 'sizeQueryTemp' ( temp uint) +0:64 imageQuerySize ( temp uint) +0:64 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:64 move second child to first child ( temp uint) +0:64 'WidthU' ( temp uint) +0:64 'sizeQueryTemp' ( temp uint) +0:65 Sequence +0:65 move second child to first child ( temp uint) +0:65 'sizeQueryTemp' ( temp uint) +0:65 imageQuerySize ( temp uint) +0:65 'g_tTex1du4' (layout( rgba32ui) uniform uimage1D) +0:65 move second child to first child ( temp uint) +0:65 'WidthU' ( temp uint) +0:65 'sizeQueryTemp' ( temp uint) +0:68 Sequence +0:68 move second child to first child ( temp uint) +0:68 'sizeQueryTemp' ( temp uint) +0:68 imageQuerySize ( temp uint) +0:68 'g_tBuffF' (layout( rgba32f) uniform imageBuffer) +0:68 move second child to first child ( temp uint) +0:68 'WidthU' ( temp uint) +0:68 'sizeQueryTemp' ( temp uint) +0:69 Sequence +0:69 move second child to first child ( temp uint) +0:69 'sizeQueryTemp' ( temp uint) +0:69 imageQuerySize ( temp uint) +0:69 'g_tBuffI' (layout( rgba32i) uniform iimageBuffer) +0:69 move second child to first child ( temp uint) +0:69 'WidthU' ( temp uint) +0:69 'sizeQueryTemp' ( temp uint) +0:70 Sequence +0:70 move second child to first child ( temp uint) +0:70 'sizeQueryTemp' ( temp uint) +0:70 imageQuerySize ( temp uint) +0:70 'g_tBuffU' (layout( rgba32ui) uniform uimageBuffer) +0:70 move second child to first child ( temp uint) +0:70 'WidthU' ( temp uint) +0:70 'sizeQueryTemp' ( temp uint) +0:73 Sequence +0:73 move second child to first child ( temp 2-component vector of uint) +0:73 'sizeQueryTemp' ( temp 2-component vector of uint) +0:73 imageQuerySize ( temp 2-component vector of uint) +0:73 'g_tTex1df4a' (layout( rgba32f) uniform image1DArray) +0:73 move second child to first child ( temp uint) +0:73 'WidthU' ( temp uint) +0:73 direct index ( temp uint) +0:73 'sizeQueryTemp' ( temp 2-component vector of uint) +0:73 Constant: +0:73 0 (const int) +0:73 move second child to first child ( temp uint) +0:73 'ElementsU' ( temp uint) +0:73 direct index ( temp uint) +0:73 'sizeQueryTemp' ( temp 2-component vector of uint) +0:73 Constant: +0:73 1 (const int) +0:74 Sequence +0:74 move second child to first child ( temp 2-component vector of uint) +0:74 'sizeQueryTemp' ( temp 2-component vector of uint) +0:74 imageQuerySize ( temp 2-component vector of uint) +0:74 'g_tTex1di4a' (layout( rgba32i) uniform iimage1DArray) +0:74 move second child to first child ( temp uint) +0:74 'WidthU' ( temp uint) +0:74 direct index ( temp uint) +0:74 'sizeQueryTemp' ( temp 2-component vector of uint) +0:74 Constant: +0:74 0 (const int) +0:74 move second child to first child ( temp uint) +0:74 'ElementsU' ( temp uint) +0:74 direct index ( temp uint) +0:74 'sizeQueryTemp' ( temp 2-component vector of uint) +0:74 Constant: +0:74 1 (const int) +0:75 Sequence +0:75 move second child to first child ( temp 2-component vector of uint) +0:75 'sizeQueryTemp' ( temp 2-component vector of uint) +0:75 imageQuerySize ( temp 2-component vector of uint) +0:75 'g_tTex1du4a' (layout( rgba32ui) uniform uimage1DArray) +0:75 move second child to first child ( temp uint) +0:75 'WidthU' ( temp uint) +0:75 direct index ( temp uint) +0:75 'sizeQueryTemp' ( temp 2-component vector of uint) +0:75 Constant: +0:75 0 (const int) +0:75 move second child to first child ( temp uint) +0:75 'ElementsU' ( temp uint) +0:75 direct index ( temp uint) +0:75 'sizeQueryTemp' ( temp 2-component vector of uint) +0:75 Constant: +0:75 1 (const int) +0:78 Sequence +0:78 move second child to first child ( temp 2-component vector of uint) +0:78 'sizeQueryTemp' ( temp 2-component vector of uint) +0:78 imageQuerySize ( temp 2-component vector of uint) +0:78 'g_tTex2df4' (layout( rgba32f) uniform image2D) +0:78 move second child to first child ( temp uint) +0:78 'WidthU' ( temp uint) +0:78 direct index ( temp uint) +0:78 'sizeQueryTemp' ( temp 2-component vector of uint) +0:78 Constant: +0:78 0 (const int) +0:78 move second child to first child ( temp uint) +0:78 'HeightU' ( temp uint) +0:78 direct index ( temp uint) +0:78 'sizeQueryTemp' ( temp 2-component vector of uint) +0:78 Constant: +0:78 1 (const int) +0:79 Sequence +0:79 move second child to first child ( temp 2-component vector of uint) +0:79 'sizeQueryTemp' ( temp 2-component vector of uint) +0:79 imageQuerySize ( temp 2-component vector of uint) +0:79 'g_tTex2di4' (layout( rgba32i) uniform iimage2D) +0:79 move second child to first child ( temp uint) +0:79 'WidthU' ( temp uint) +0:79 direct index ( temp uint) +0:79 'sizeQueryTemp' ( temp 2-component vector of uint) +0:79 Constant: +0:79 0 (const int) +0:79 move second child to first child ( temp uint) +0:79 'HeightU' ( temp uint) +0:79 direct index ( temp uint) +0:79 'sizeQueryTemp' ( temp 2-component vector of uint) +0:79 Constant: +0:79 1 (const int) +0:80 Sequence +0:80 move second child to first child ( temp 2-component vector of uint) +0:80 'sizeQueryTemp' ( temp 2-component vector of uint) +0:80 imageQuerySize ( temp 2-component vector of uint) +0:80 'g_tTex2du4' (layout( rgba32ui) uniform uimage2D) +0:80 move second child to first child ( temp uint) +0:80 'WidthU' ( temp uint) +0:80 direct index ( temp uint) +0:80 'sizeQueryTemp' ( temp 2-component vector of uint) +0:80 Constant: +0:80 0 (const int) +0:80 move second child to first child ( temp uint) +0:80 'HeightU' ( temp uint) +0:80 direct index ( temp uint) +0:80 'sizeQueryTemp' ( temp 2-component vector of uint) +0:80 Constant: +0:80 1 (const int) +0:83 Sequence +0:83 move second child to first child ( temp 3-component vector of uint) +0:83 'sizeQueryTemp' ( temp 3-component vector of uint) +0:83 imageQuerySize ( temp 3-component vector of uint) +0:83 'g_tTex2df4a' (layout( rgba32f) uniform image2DArray) +0:83 move second child to first child ( temp uint) +0:83 'WidthU' ( temp uint) +0:83 direct index ( temp uint) +0:83 'sizeQueryTemp' ( temp 3-component vector of uint) +0:83 Constant: +0:83 0 (const int) +0:83 move second child to first child ( temp uint) +0:83 'HeightU' ( temp uint) +0:83 direct index ( temp uint) +0:83 'sizeQueryTemp' ( temp 3-component vector of uint) +0:83 Constant: +0:83 1 (const int) +0:83 move second child to first child ( temp uint) +0:83 'ElementsU' ( temp uint) +0:83 direct index ( temp uint) +0:83 'sizeQueryTemp' ( temp 3-component vector of uint) +0:83 Constant: +0:83 2 (const int) +0:84 Sequence +0:84 move second child to first child ( temp 3-component vector of uint) +0:84 'sizeQueryTemp' ( temp 3-component vector of uint) +0:84 imageQuerySize ( temp 3-component vector of uint) +0:84 'g_tTex2di4a' (layout( rgba32i) uniform iimage2DArray) +0:84 move second child to first child ( temp uint) +0:84 'WidthU' ( temp uint) +0:84 direct index ( temp uint) +0:84 'sizeQueryTemp' ( temp 3-component vector of uint) +0:84 Constant: +0:84 0 (const int) +0:84 move second child to first child ( temp uint) +0:84 'HeightU' ( temp uint) +0:84 direct index ( temp uint) +0:84 'sizeQueryTemp' ( temp 3-component vector of uint) +0:84 Constant: +0:84 1 (const int) +0:84 move second child to first child ( temp uint) +0:84 'ElementsU' ( temp uint) +0:84 direct index ( temp uint) +0:84 'sizeQueryTemp' ( temp 3-component vector of uint) +0:84 Constant: +0:84 2 (const int) +0:85 Sequence +0:85 move second child to first child ( temp 3-component vector of uint) +0:85 'sizeQueryTemp' ( temp 3-component vector of uint) +0:85 imageQuerySize ( temp 3-component vector of uint) +0:85 'g_tTex2du4a' (layout( rgba32ui) uniform uimage2DArray) +0:85 move second child to first child ( temp uint) +0:85 'WidthU' ( temp uint) +0:85 direct index ( temp uint) +0:85 'sizeQueryTemp' ( temp 3-component vector of uint) +0:85 Constant: +0:85 0 (const int) +0:85 move second child to first child ( temp uint) +0:85 'HeightU' ( temp uint) +0:85 direct index ( temp uint) +0:85 'sizeQueryTemp' ( temp 3-component vector of uint) +0:85 Constant: +0:85 1 (const int) +0:85 move second child to first child ( temp uint) +0:85 'ElementsU' ( temp uint) +0:85 direct index ( temp uint) +0:85 'sizeQueryTemp' ( temp 3-component vector of uint) +0:85 Constant: +0:85 2 (const int) +0:88 Sequence +0:88 move second child to first child ( temp 3-component vector of uint) +0:88 'sizeQueryTemp' ( temp 3-component vector of uint) +0:88 imageQuerySize ( temp 3-component vector of uint) +0:88 'g_tTex3df4' (layout( rgba32f) uniform image3D) +0:88 move second child to first child ( temp uint) +0:88 'WidthU' ( temp uint) +0:88 direct index ( temp uint) +0:88 'sizeQueryTemp' ( temp 3-component vector of uint) +0:88 Constant: +0:88 0 (const int) +0:88 move second child to first child ( temp uint) +0:88 'HeightU' ( temp uint) +0:88 direct index ( temp uint) +0:88 'sizeQueryTemp' ( temp 3-component vector of uint) +0:88 Constant: +0:88 1 (const int) +0:88 move second child to first child ( temp uint) +0:88 'DepthU' ( temp uint) +0:88 direct index ( temp uint) +0:88 'sizeQueryTemp' ( temp 3-component vector of uint) +0:88 Constant: +0:88 2 (const int) +0:89 Sequence +0:89 move second child to first child ( temp 3-component vector of uint) +0:89 'sizeQueryTemp' ( temp 3-component vector of uint) +0:89 imageQuerySize ( temp 3-component vector of uint) +0:89 'g_tTex3di4' (layout( rgba32i) uniform iimage3D) +0:89 move second child to first child ( temp uint) +0:89 'WidthU' ( temp uint) +0:89 direct index ( temp uint) +0:89 'sizeQueryTemp' ( temp 3-component vector of uint) +0:89 Constant: +0:89 0 (const int) +0:89 move second child to first child ( temp uint) +0:89 'HeightU' ( temp uint) +0:89 direct index ( temp uint) +0:89 'sizeQueryTemp' ( temp 3-component vector of uint) +0:89 Constant: +0:89 1 (const int) +0:89 move second child to first child ( temp uint) +0:89 'DepthU' ( temp uint) +0:89 direct index ( temp uint) +0:89 'sizeQueryTemp' ( temp 3-component vector of uint) +0:89 Constant: +0:89 2 (const int) +0:90 Sequence +0:90 move second child to first child ( temp 3-component vector of uint) +0:90 'sizeQueryTemp' ( temp 3-component vector of uint) +0:90 imageQuerySize ( temp 3-component vector of uint) +0:90 'g_tTex3du4' (layout( rgba32ui) uniform uimage3D) +0:90 move second child to first child ( temp uint) +0:90 'WidthU' ( temp uint) +0:90 direct index ( temp uint) +0:90 'sizeQueryTemp' ( temp 3-component vector of uint) +0:90 Constant: +0:90 0 (const int) +0:90 move second child to first child ( temp uint) +0:90 'HeightU' ( temp uint) +0:90 direct index ( temp uint) +0:90 'sizeQueryTemp' ( temp 3-component vector of uint) +0:90 Constant: +0:90 1 (const int) +0:90 move second child to first child ( temp uint) +0:90 'DepthU' ( temp uint) +0:90 direct index ( temp uint) +0:90 'sizeQueryTemp' ( temp 3-component vector of uint) +0:90 Constant: +0:90 2 (const int) +0:92 move second child to first child ( temp 4-component vector of float) +0:92 Color: direct index for structure ( temp 4-component vector of float) +0:92 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:92 Constant: +0:92 0 (const int) +0:92 Constant: +0:92 1.000000 +0:92 1.000000 +0:92 1.000000 +0:92 1.000000 +0:93 move second child to first child ( temp float) +0:93 Depth: direct index for structure ( temp float) +0:93 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:93 Constant: +0:93 1 (const int) +0:93 Constant: +0:93 1.000000 +0:95 Branch: Return with expression +0:95 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:44 Function Definition: main( ( temp void) +0:44 Function Parameters: +0:? Sequence +0:44 Sequence +0:44 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:44 1 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:? 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:? 'g_tTex1du4' (layout( rgba32ui) uniform uimage1D) +0:? 'g_tTex2df4' (layout( rgba32f) uniform image2D) +0:? 'g_tTex2di4' (layout( rgba32i) uniform iimage2D) +0:? 'g_tTex2du4' (layout( rgba32ui) uniform uimage2D) +0:? 'g_tTex3df4' (layout( rgba32f) uniform image3D) +0:? 'g_tTex3di4' (layout( rgba32i) uniform iimage3D) +0:? 'g_tTex3du4' (layout( rgba32ui) uniform uimage3D) +0:? 'g_tTex1df4a' (layout( rgba32f) uniform image1DArray) +0:? 'g_tTex1di4a' (layout( rgba32i) uniform iimage1DArray) +0:? 'g_tTex1du4a' (layout( rgba32ui) uniform uimage1DArray) +0:? 'g_tTex2df4a' (layout( rgba32f) uniform image2DArray) +0:? 'g_tTex2di4a' (layout( rgba32i) uniform iimage2DArray) +0:? 'g_tTex2du4a' (layout( rgba32ui) uniform uimage2DArray) +0:? 'g_tBuffF' (layout( rgba32f) uniform imageBuffer) +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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 232 + + Capability Shader + Capability Sampled1D + Capability SampledBuffer + Capability ImageQuery + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 216 220 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + MemberName 8(PS_OUTPUT) 1 "Depth" + Name 10 "@main(" + Name 14 "sizeQueryTemp" + Name 17 "g_tTex1df4" + Name 20 "WidthU" + Name 22 "sizeQueryTemp" + Name 26 "g_tTex1di4" + Name 30 "sizeQueryTemp" + Name 33 "g_tTex1du4" + Name 37 "sizeQueryTemp" + Name 40 "g_tBuffF" + Name 44 "sizeQueryTemp" + Name 47 "g_tBuffI" + Name 51 "sizeQueryTemp" + Name 54 "g_tBuffU" + Name 60 "sizeQueryTemp" + Name 63 "g_tTex1df4a" + Name 69 "ElementsU" + Name 73 "sizeQueryTemp" + Name 76 "g_tTex1di4a" + Name 83 "sizeQueryTemp" + Name 86 "g_tTex1du4a" + Name 93 "sizeQueryTemp" + Name 96 "g_tTex2df4" + Name 101 "HeightU" + Name 104 "sizeQueryTemp" + Name 107 "g_tTex2di4" + Name 114 "sizeQueryTemp" + Name 117 "g_tTex2du4" + Name 126 "sizeQueryTemp" + Name 129 "g_tTex2df4a" + Name 139 "sizeQueryTemp" + Name 142 "g_tTex2di4a" + Name 151 "sizeQueryTemp" + Name 154 "g_tTex2du4a" + Name 163 "sizeQueryTemp" + Name 166 "g_tTex3df4" + Name 173 "DepthU" + Name 176 "sizeQueryTemp" + Name 179 "g_tTex3di4" + Name 188 "sizeQueryTemp" + Name 191 "g_tTex3du4" + Name 201 "psout" + Name 213 "flattenTemp" + Name 216 "Color" + Name 220 "Depth" + Name 225 "g_sSamp" + Name 229 "$Global" + MemberName 229($Global) 0 "c1" + MemberName 229($Global) 1 "c2" + MemberName 229($Global) 2 "c3" + MemberName 229($Global) 3 "c4" + MemberName 229($Global) 4 "o1" + MemberName 229($Global) 5 "o2" + MemberName 229($Global) 6 "o3" + MemberName 229($Global) 7 "o4" + Name 231 "" + Decorate 17(g_tTex1df4) DescriptorSet 0 + Decorate 17(g_tTex1df4) Binding 0 + Decorate 26(g_tTex1di4) DescriptorSet 0 + Decorate 33(g_tTex1du4) DescriptorSet 0 + Decorate 40(g_tBuffF) DescriptorSet 0 + Decorate 47(g_tBuffI) DescriptorSet 0 + Decorate 54(g_tBuffU) DescriptorSet 0 + Decorate 63(g_tTex1df4a) DescriptorSet 0 + Decorate 76(g_tTex1di4a) DescriptorSet 0 + Decorate 86(g_tTex1du4a) DescriptorSet 0 + Decorate 96(g_tTex2df4) DescriptorSet 0 + Decorate 107(g_tTex2di4) DescriptorSet 0 + Decorate 117(g_tTex2du4) DescriptorSet 0 + Decorate 129(g_tTex2df4a) DescriptorSet 0 + Decorate 142(g_tTex2di4a) DescriptorSet 0 + Decorate 154(g_tTex2du4a) DescriptorSet 0 + 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 225(g_sSamp) DescriptorSet 0 + Decorate 225(g_sSamp) Binding 0 + MemberDecorate 229($Global) 0 Offset 0 + MemberDecorate 229($Global) 1 Offset 8 + MemberDecorate 229($Global) 2 Offset 16 + MemberDecorate 229($Global) 3 Offset 32 + MemberDecorate 229($Global) 4 Offset 48 + MemberDecorate 229($Global) 5 Offset 56 + MemberDecorate 229($Global) 6 Offset 64 + MemberDecorate 229($Global) 7 Offset 80 + Decorate 229($Global) Block + Decorate 231 DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8(PS_OUTPUT): TypeStruct 7(fvec4) 6(float) + 9: TypeFunction 8(PS_OUTPUT) + 12: TypeInt 32 0 + 13: TypePointer Function 12(int) + 15: TypeImage 6(float) 1D nonsampled format:Rgba32f + 16: TypePointer UniformConstant 15 + 17(g_tTex1df4): 16(ptr) Variable UniformConstant + 23: TypeInt 32 1 + 24: TypeImage 23(int) 1D nonsampled format:Rgba32i + 25: TypePointer UniformConstant 24 + 26(g_tTex1di4): 25(ptr) Variable UniformConstant + 31: TypeImage 12(int) 1D nonsampled format:Rgba32ui + 32: TypePointer UniformConstant 31 + 33(g_tTex1du4): 32(ptr) Variable UniformConstant + 38: TypeImage 6(float) Buffer nonsampled format:Rgba32f + 39: TypePointer UniformConstant 38 + 40(g_tBuffF): 39(ptr) Variable UniformConstant + 45: TypeImage 23(int) Buffer nonsampled format:Rgba32i + 46: TypePointer UniformConstant 45 + 47(g_tBuffI): 46(ptr) Variable UniformConstant + 52: TypeImage 12(int) Buffer nonsampled format:Rgba32ui + 53: TypePointer UniformConstant 52 + 54(g_tBuffU): 53(ptr) Variable UniformConstant + 58: TypeVector 12(int) 2 + 59: TypePointer Function 58(ivec2) + 61: TypeImage 6(float) 1D array nonsampled format:Rgba32f + 62: TypePointer UniformConstant 61 + 63(g_tTex1df4a): 62(ptr) Variable UniformConstant + 66: 12(int) Constant 0 + 70: 12(int) Constant 1 + 74: TypeImage 23(int) 1D array nonsampled format:Rgba32i + 75: TypePointer UniformConstant 74 + 76(g_tTex1di4a): 75(ptr) Variable UniformConstant + 84: TypeImage 12(int) 1D array nonsampled format:Rgba32ui + 85: TypePointer UniformConstant 84 + 86(g_tTex1du4a): 85(ptr) Variable UniformConstant + 94: TypeImage 6(float) 2D nonsampled format:Rgba32f + 95: TypePointer UniformConstant 94 + 96(g_tTex2df4): 95(ptr) Variable UniformConstant + 105: TypeImage 23(int) 2D nonsampled format:Rgba32i + 106: TypePointer UniformConstant 105 + 107(g_tTex2di4): 106(ptr) Variable UniformConstant + 115: TypeImage 12(int) 2D nonsampled format:Rgba32ui + 116: TypePointer UniformConstant 115 + 117(g_tTex2du4): 116(ptr) Variable UniformConstant + 124: TypeVector 12(int) 3 + 125: TypePointer Function 124(ivec3) + 127: TypeImage 6(float) 2D array nonsampled format:Rgba32f + 128: TypePointer UniformConstant 127 +129(g_tTex2df4a): 128(ptr) Variable UniformConstant + 136: 12(int) Constant 2 + 140: TypeImage 23(int) 2D array nonsampled format:Rgba32i + 141: TypePointer UniformConstant 140 +142(g_tTex2di4a): 141(ptr) Variable UniformConstant + 152: TypeImage 12(int) 2D array nonsampled format:Rgba32ui + 153: TypePointer UniformConstant 152 +154(g_tTex2du4a): 153(ptr) Variable UniformConstant + 164: TypeImage 6(float) 3D nonsampled format:Rgba32f + 165: TypePointer UniformConstant 164 + 166(g_tTex3df4): 165(ptr) Variable UniformConstant + 177: TypeImage 23(int) 3D nonsampled format:Rgba32i + 178: TypePointer UniformConstant 177 + 179(g_tTex3di4): 178(ptr) Variable UniformConstant + 189: TypeImage 12(int) 3D nonsampled format:Rgba32ui + 190: TypePointer UniformConstant 189 + 191(g_tTex3du4): 190(ptr) Variable UniformConstant + 200: TypePointer Function 8(PS_OUTPUT) + 202: 23(int) Constant 0 + 203: 6(float) Constant 1065353216 + 204: 7(fvec4) ConstantComposite 203 203 203 203 + 205: TypePointer Function 7(fvec4) + 207: 23(int) Constant 1 + 208: TypePointer Function 6(float) + 215: TypePointer Output 7(fvec4) + 216(Color): 215(ptr) Variable Output + 219: TypePointer Output 6(float) + 220(Depth): 219(ptr) Variable Output + 223: TypeSampler + 224: TypePointer UniformConstant 223 + 225(g_sSamp): 224(ptr) Variable UniformConstant + 226: TypeVector 23(int) 2 + 227: TypeVector 23(int) 3 + 228: TypeVector 23(int) 4 + 229($Global): TypeStruct 23(int) 226(ivec2) 227(ivec3) 228(ivec4) 23(int) 226(ivec2) 227(ivec3) 228(ivec4) + 230: TypePointer Uniform 229($Global) + 231: 230(ptr) Variable Uniform + 4(main): 2 Function None 3 + 5: Label +213(flattenTemp): 200(ptr) Variable Function + 214:8(PS_OUTPUT) FunctionCall 10(@main() + Store 213(flattenTemp) 214 + 217: 205(ptr) AccessChain 213(flattenTemp) 202 + 218: 7(fvec4) Load 217 + Store 216(Color) 218 + 221: 208(ptr) AccessChain 213(flattenTemp) 207 + 222: 6(float) Load 221 + Store 220(Depth) 222 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label +14(sizeQueryTemp): 13(ptr) Variable Function + 20(WidthU): 13(ptr) Variable Function +22(sizeQueryTemp): 13(ptr) Variable Function +30(sizeQueryTemp): 13(ptr) Variable Function +37(sizeQueryTemp): 13(ptr) Variable Function +44(sizeQueryTemp): 13(ptr) Variable Function +51(sizeQueryTemp): 13(ptr) Variable Function +60(sizeQueryTemp): 59(ptr) Variable Function + 69(ElementsU): 13(ptr) Variable Function +73(sizeQueryTemp): 59(ptr) Variable Function +83(sizeQueryTemp): 59(ptr) Variable Function +93(sizeQueryTemp): 59(ptr) Variable Function + 101(HeightU): 13(ptr) Variable Function +104(sizeQueryTemp): 59(ptr) Variable Function +114(sizeQueryTemp): 59(ptr) Variable Function +126(sizeQueryTemp): 125(ptr) Variable Function +139(sizeQueryTemp): 125(ptr) Variable Function +151(sizeQueryTemp): 125(ptr) Variable Function +163(sizeQueryTemp): 125(ptr) Variable Function + 173(DepthU): 13(ptr) Variable Function +176(sizeQueryTemp): 125(ptr) Variable Function +188(sizeQueryTemp): 125(ptr) Variable Function + 201(psout): 200(ptr) Variable Function + 18: 15 Load 17(g_tTex1df4) + 19: 12(int) ImageQuerySize 18 + Store 14(sizeQueryTemp) 19 + 21: 12(int) Load 14(sizeQueryTemp) + Store 20(WidthU) 21 + 27: 24 Load 26(g_tTex1di4) + 28: 12(int) ImageQuerySize 27 + Store 22(sizeQueryTemp) 28 + 29: 12(int) Load 22(sizeQueryTemp) + Store 20(WidthU) 29 + 34: 31 Load 33(g_tTex1du4) + 35: 12(int) ImageQuerySize 34 + Store 30(sizeQueryTemp) 35 + 36: 12(int) Load 30(sizeQueryTemp) + Store 20(WidthU) 36 + 41: 38 Load 40(g_tBuffF) + 42: 12(int) ImageQuerySize 41 + Store 37(sizeQueryTemp) 42 + 43: 12(int) Load 37(sizeQueryTemp) + Store 20(WidthU) 43 + 48: 45 Load 47(g_tBuffI) + 49: 12(int) ImageQuerySize 48 + Store 44(sizeQueryTemp) 49 + 50: 12(int) Load 44(sizeQueryTemp) + Store 20(WidthU) 50 + 55: 52 Load 54(g_tBuffU) + 56: 12(int) ImageQuerySize 55 + Store 51(sizeQueryTemp) 56 + 57: 12(int) Load 51(sizeQueryTemp) + Store 20(WidthU) 57 + 64: 61 Load 63(g_tTex1df4a) + 65: 58(ivec2) ImageQuerySize 64 + Store 60(sizeQueryTemp) 65 + 67: 13(ptr) AccessChain 60(sizeQueryTemp) 66 + 68: 12(int) Load 67 + Store 20(WidthU) 68 + 71: 13(ptr) AccessChain 60(sizeQueryTemp) 70 + 72: 12(int) Load 71 + Store 69(ElementsU) 72 + 77: 74 Load 76(g_tTex1di4a) + 78: 58(ivec2) ImageQuerySize 77 + Store 73(sizeQueryTemp) 78 + 79: 13(ptr) AccessChain 73(sizeQueryTemp) 66 + 80: 12(int) Load 79 + Store 20(WidthU) 80 + 81: 13(ptr) AccessChain 73(sizeQueryTemp) 70 + 82: 12(int) Load 81 + Store 69(ElementsU) 82 + 87: 84 Load 86(g_tTex1du4a) + 88: 58(ivec2) ImageQuerySize 87 + Store 83(sizeQueryTemp) 88 + 89: 13(ptr) AccessChain 83(sizeQueryTemp) 66 + 90: 12(int) Load 89 + Store 20(WidthU) 90 + 91: 13(ptr) AccessChain 83(sizeQueryTemp) 70 + 92: 12(int) Load 91 + Store 69(ElementsU) 92 + 97: 94 Load 96(g_tTex2df4) + 98: 58(ivec2) ImageQuerySize 97 + Store 93(sizeQueryTemp) 98 + 99: 13(ptr) AccessChain 93(sizeQueryTemp) 66 + 100: 12(int) Load 99 + Store 20(WidthU) 100 + 102: 13(ptr) AccessChain 93(sizeQueryTemp) 70 + 103: 12(int) Load 102 + Store 101(HeightU) 103 + 108: 105 Load 107(g_tTex2di4) + 109: 58(ivec2) ImageQuerySize 108 + Store 104(sizeQueryTemp) 109 + 110: 13(ptr) AccessChain 104(sizeQueryTemp) 66 + 111: 12(int) Load 110 + Store 20(WidthU) 111 + 112: 13(ptr) AccessChain 104(sizeQueryTemp) 70 + 113: 12(int) Load 112 + Store 101(HeightU) 113 + 118: 115 Load 117(g_tTex2du4) + 119: 58(ivec2) ImageQuerySize 118 + Store 114(sizeQueryTemp) 119 + 120: 13(ptr) AccessChain 114(sizeQueryTemp) 66 + 121: 12(int) Load 120 + Store 20(WidthU) 121 + 122: 13(ptr) AccessChain 114(sizeQueryTemp) 70 + 123: 12(int) Load 122 + Store 101(HeightU) 123 + 130: 127 Load 129(g_tTex2df4a) + 131: 124(ivec3) ImageQuerySize 130 + Store 126(sizeQueryTemp) 131 + 132: 13(ptr) AccessChain 126(sizeQueryTemp) 66 + 133: 12(int) Load 132 + Store 20(WidthU) 133 + 134: 13(ptr) AccessChain 126(sizeQueryTemp) 70 + 135: 12(int) Load 134 + Store 101(HeightU) 135 + 137: 13(ptr) AccessChain 126(sizeQueryTemp) 136 + 138: 12(int) Load 137 + Store 69(ElementsU) 138 + 143: 140 Load 142(g_tTex2di4a) + 144: 124(ivec3) ImageQuerySize 143 + Store 139(sizeQueryTemp) 144 + 145: 13(ptr) AccessChain 139(sizeQueryTemp) 66 + 146: 12(int) Load 145 + Store 20(WidthU) 146 + 147: 13(ptr) AccessChain 139(sizeQueryTemp) 70 + 148: 12(int) Load 147 + Store 101(HeightU) 148 + 149: 13(ptr) AccessChain 139(sizeQueryTemp) 136 + 150: 12(int) Load 149 + Store 69(ElementsU) 150 + 155: 152 Load 154(g_tTex2du4a) + 156: 124(ivec3) ImageQuerySize 155 + Store 151(sizeQueryTemp) 156 + 157: 13(ptr) AccessChain 151(sizeQueryTemp) 66 + 158: 12(int) Load 157 + Store 20(WidthU) 158 + 159: 13(ptr) AccessChain 151(sizeQueryTemp) 70 + 160: 12(int) Load 159 + Store 101(HeightU) 160 + 161: 13(ptr) AccessChain 151(sizeQueryTemp) 136 + 162: 12(int) Load 161 + Store 69(ElementsU) 162 + 167: 164 Load 166(g_tTex3df4) + 168: 124(ivec3) ImageQuerySize 167 + Store 163(sizeQueryTemp) 168 + 169: 13(ptr) AccessChain 163(sizeQueryTemp) 66 + 170: 12(int) Load 169 + Store 20(WidthU) 170 + 171: 13(ptr) AccessChain 163(sizeQueryTemp) 70 + 172: 12(int) Load 171 + Store 101(HeightU) 172 + 174: 13(ptr) AccessChain 163(sizeQueryTemp) 136 + 175: 12(int) Load 174 + Store 173(DepthU) 175 + 180: 177 Load 179(g_tTex3di4) + 181: 124(ivec3) ImageQuerySize 180 + Store 176(sizeQueryTemp) 181 + 182: 13(ptr) AccessChain 176(sizeQueryTemp) 66 + 183: 12(int) Load 182 + Store 20(WidthU) 183 + 184: 13(ptr) AccessChain 176(sizeQueryTemp) 70 + 185: 12(int) Load 184 + Store 101(HeightU) 185 + 186: 13(ptr) AccessChain 176(sizeQueryTemp) 136 + 187: 12(int) Load 186 + Store 173(DepthU) 187 + 192: 189 Load 191(g_tTex3du4) + 193: 124(ivec3) ImageQuerySize 192 + Store 188(sizeQueryTemp) 193 + 194: 13(ptr) AccessChain 188(sizeQueryTemp) 66 + 195: 12(int) Load 194 + Store 20(WidthU) 195 + 196: 13(ptr) AccessChain 188(sizeQueryTemp) 70 + 197: 12(int) Load 196 + Store 101(HeightU) 197 + 198: 13(ptr) AccessChain 188(sizeQueryTemp) 136 + 199: 12(int) Load 198 + Store 173(DepthU) 199 + 206: 205(ptr) AccessChain 201(psout) 202 + Store 206 204 + 209: 208(ptr) AccessChain 201(psout) 207 + Store 209 203 + 210:8(PS_OUTPUT) Load 201(psout) + ReturnValue 210 + FunctionEnd 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 new file mode 100644 index 0000000..57097a4 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.getsampleposition.dx10.frag.out @@ -0,0 +1,145 @@ +hlsl.getsampleposition.dx10.frag +ERROR: 0:16: '' : unimplemented: GetSamplePosition +ERROR: 0:17: '' : unimplemented: GetSamplePosition +ERROR: 2 compilation errors. No code generated. + + +Shader version: 450 +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:13 Function Parameters: +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: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: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}) +0:19 Constant: +0:19 0 (const int) +0:19 Constant: +0:19 1.000000 +0:19 1.000000 +0:19 1.000000 +0:19 1.000000 +0:20 move second child to first child ( temp float) +0:20 Depth: direct index for structure ( temp float) +0:20 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:20 Constant: +0:20 1 (const int) +0:20 Constant: +0:20 1.000000 +0:22 Branch: Return with expression +0:22 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:13 Function Definition: main( ( temp void) +0:13 Function Parameters: +0:? Sequence +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 move second child to first child ( temp 4-component vector of float) +0:? '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: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: +0:13 1 (const int) +0:? Linker Objects +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) + + +Linked fragment stage: + + +Shader version: 450 +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:13 Function Parameters: +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: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: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}) +0:19 Constant: +0:19 0 (const int) +0:19 Constant: +0:19 1.000000 +0:19 1.000000 +0:19 1.000000 +0:19 1.000000 +0:20 move second child to first child ( temp float) +0:20 Depth: direct index for structure ( temp float) +0:20 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:20 Constant: +0:20 1 (const int) +0:20 Constant: +0:20 1.000000 +0:22 Branch: Return with expression +0:22 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:13 Function Definition: main( ( temp void) +0:13 Function Parameters: +0:? Sequence +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 move second child to first child ( temp 4-component vector of float) +0:? '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: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: +0:13 1 (const int) +0:? Linker Objects +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) + +SPIR-V is not generated for failed compile or link 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 new file mode 100644 index 0000000..89ab4e6 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hull.1.tesc.out @@ -0,0 +1,359 @@ +hlsl.hull.1.tesc +Shader version: 450 +vertices = 4 +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: +0:26 'ip' ( in 4-element array of structure{ temp 3-component vector of float cpoint}) +0:26 'm_cpid' ( in uint) +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 uint) +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 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) +0:? Barrier ( temp void) +0:? Test condition and select ( temp void) +0:? Condition +0:? Compare Equal ( temp bool) +0:? 'm_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 2-element array of float edges}) +0:? '@patchConstantResult' ( temp structure{ temp 2-element array of float edges}) +0:? Function Call: PCF(u1; ( temp structure{ temp 2-element array of float edges}) +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:? 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 ( out float TessLevelOuter) +0:? '@patchConstantOutput_edges' ( out 2-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; ( temp structure{ temp 2-element array of float edges}) +0:33 Function Parameters: +0:33 'pid' ( in uint) +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 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) + + +Linked tessellation control stage: + + +Shader version: 450 +vertices = 4 +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: +0:26 'ip' ( in 4-element array of structure{ temp 3-component vector of float cpoint}) +0:26 'm_cpid' ( in uint) +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 uint) +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 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) +0:? Barrier ( temp void) +0:? Test condition and select ( temp void) +0:? Condition +0:? Compare Equal ( temp bool) +0:? 'm_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 2-element array of float edges}) +0:? '@patchConstantResult' ( temp structure{ temp 2-element array of float edges}) +0:? Function Call: PCF(u1; ( temp structure{ temp 2-element array of float edges}) +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:? 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 ( out float TessLevelOuter) +0:? '@patchConstantOutput_edges' ( out 2-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; ( temp structure{ temp 2-element array of float edges}) +0:33 Function Parameters: +0:33 'pid' ( in uint) +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 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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 85 + + Capability Tessellation + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint TessellationControl 4 "main" 40 44 47 62 67 + ExecutionMode 4 OutputVertices 4 + Name 4 "main" + Name 8 "VS_OUT" + MemberName 8(VS_OUT) 0 "cpoint" + Name 14 "HS_OUT" + MemberName 14(HS_OUT) 0 "cpoint" + Name 18 "@main(struct-VS_OUT-vf31[4];u1;" + Name 16 "ip" + Name 17 "m_cpid" + Name 22 "HS_CONSTANT_OUT" + MemberName 22(HS_CONSTANT_OUT) 0 "edges" + Name 25 "PCF(u1;" + Name 24 "pid" + Name 28 "output" + Name 38 "ip" + Name 40 "ip" + Name 42 "m_cpid" + Name 44 "m_cpid" + Name 47 "@entryPointOutput" + Name 48 "param" + Name 50 "param" + Name 61 "@patchConstantResult" + Name 62 "pid" + Name 63 "param" + Name 67 "@patchConstantOutput_edges" + Name 77 "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 + 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: TypePointer Function 9(int) + 14(HS_OUT): TypeStruct 7(fvec3) + 15: TypeFunction 14(HS_OUT) 12(ptr) 13(ptr) + 20: 9(int) Constant 2 + 21: TypeArray 6(float) 20 +22(HS_CONSTANT_OUT): TypeStruct 21 + 23: TypeFunction 22(HS_CONSTANT_OUT) 13(ptr) + 27: TypePointer Function 14(HS_OUT) + 29: TypeInt 32 1 + 30: 29(int) Constant 0 + 31: TypePointer Function 7(fvec3) + 39: TypePointer Input 11 + 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 + 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 + 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) + 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 + 75: 6(float) Load 74 + 76: 71(ptr) AccessChain 67(@patchConstantOutput_edges) 73 + Store 76 75 + Branch 59 + 59: Label + Return + FunctionEnd +18(@main(struct-VS_OUT-vf31[4];u1;): 14(HS_OUT) Function None 15 + 16(ip): 12(ptr) FunctionParameter + 17(m_cpid): 13(ptr) FunctionParameter + 19: Label + 28(output): 27(ptr) Variable Function + 32: 31(ptr) AccessChain 16(ip) 30 30 + 33: 7(fvec3) Load 32 + 34: 31(ptr) AccessChain 28(output) 30 + Store 34 33 + 35: 14(HS_OUT) Load 28(output) + ReturnValue 35 + FunctionEnd + 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 + 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 new file mode 100644 index 0000000..9d848c6 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hull.2.tesc.out @@ -0,0 +1,357 @@ +hlsl.hull.2.tesc +Shader version: 450 +vertices = 4 +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:? '@entryPointOutput' (layout( location=0) out structure{ temp 3-component vector of float cpoint}) +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 ( out float TessLevelOuter) +0:? '@patchConstantOutput_edges' ( out 2-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 ( out float TessLevelOuter) +0:? '@patchConstantOutput_edges' ( out 2-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 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:? '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) + + +Linked tessellation control stage: + + +Shader version: 450 +vertices = 4 +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:? '@entryPointOutput' (layout( location=0) out structure{ temp 3-component vector of float cpoint}) +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 ( out float TessLevelOuter) +0:? '@patchConstantOutput_edges' ( out 2-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 ( out float TessLevelOuter) +0:? '@patchConstantOutput_edges' ( out 2-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 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:? '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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 87 + + Capability Tessellation + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint TessellationControl 4 "main" 42 45 52 60 62 69 + ExecutionMode 4 OutputVertices 4 + 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 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" + 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 + 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: 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 + 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 + 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 + 77: 6(float) Load 76 + 78: 73(ptr) AccessChain 69(@patchConstantOutput_edges) 75 + Store 78 77 + Branch 57 + 57: 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 + 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 + 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 new file mode 100644 index 0000000..a2d0a1c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hull.void.tesc.out @@ -0,0 +1,186 @@ +hlsl.hull.void.tesc +Shader version: 450 +vertices = 3 +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: +0:26 'ip' ( in 3-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 3-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 3-element array of structure{ temp 3-component vector of float cpoint}) +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 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) +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:? 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:? 'ip' (layout( location=0) in 3-element array of structure{ temp 3-component vector of float cpoint}) +0:? 'InvocationId' ( in uint InvocationID) + + +Linked tessellation control stage: + + +Shader version: 450 +vertices = 3 +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: +0:26 'ip' ( in 3-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 3-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 3-element array of structure{ temp 3-component vector of float cpoint}) +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 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) +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:? 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:? '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 + + Capability Tessellation + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint TessellationControl 4 "main" 33 36 44 + ExecutionMode 4 OutputVertices 3 + 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[3];" + Name 15 "ip" + Name 18 "PCF(" + Name 21 "output" + Name 31 "ip" + Name 33 "ip" + Name 36 "@entryPointOutput" + Name 37 "param" + Name 44 "InvocationId" + Decorate 33(ip) Location 0 + Decorate 36(@entryPointOutput) Location 0 + Decorate 44(InvocationId) BuiltIn InvocationId + 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 3 + 11: TypeArray 8(VS_OUT) 10 + 12: TypePointer Function 11 + 13(HS_OUT): TypeStruct 7(fvec3) + 14: TypeFunction 13(HS_OUT) 12(ptr) + 20: TypePointer Function 13(HS_OUT) + 22: TypeInt 32 1 + 23: 22(int) Constant 0 + 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 + 4(main): 2 Function None 3 + 5: Label + 31(ip): 12(ptr) Variable Function + 37(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 + Return + FunctionEnd +16(@main(struct-VS_OUT-vf31[3];): 13(HS_OUT) Function None 14 + 15(ip): 12(ptr) FunctionParameter + 17: Label + 21(output): 20(ptr) Variable Function + 25: 24(ptr) AccessChain 15(ip) 23 23 + 26: 7(fvec3) Load 25 + 27: 24(ptr) AccessChain 21(output) 23 + Store 27 26 + 28: 13(HS_OUT) Load 21(output) + ReturnValue 28 + FunctionEnd + 18(PCF(): 2 Function None 3 + 19: Label + Return + FunctionEnd 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 new file mode 100644 index 0000000..3583141 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.identifier.sample.frag.out @@ -0,0 +1,138 @@ +hlsl.identifier.sample.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:9 Function Definition: sample(i1; ( temp int) +0:9 Function Parameters: +0:9 'x' ( in int) +0:? Sequence +0:9 Branch: Return with expression +0:9 'x' ( in int) +0:12 Function Definition: @main( ( temp 4-component vector of float) +0:12 Function Parameters: +0:? Sequence +0:15 Sequence +0:15 move second child to first child ( temp 4-component vector of float) +0:15 'sample' ( temp 4-component vector of float) +0:? Constant: +0:? 3.000000 +0:? 4.000000 +0:? 5.000000 +0:? 6.000000 +0:17 Branch: Return with expression +0:17 vector swizzle ( temp 4-component vector of float) +0:17 'sample' ( temp 4-component vector of float) +0:17 Sequence +0:17 Constant: +0:17 0 (const int) +0:17 Constant: +0:17 1 (const int) +0:17 Constant: +0:17 2 (const int) +0:17 Constant: +0:17 3 (const int) +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: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:9 Function Definition: sample(i1; ( temp int) +0:9 Function Parameters: +0:9 'x' ( in int) +0:? Sequence +0:9 Branch: Return with expression +0:9 'x' ( in int) +0:12 Function Definition: @main( ( temp 4-component vector of float) +0:12 Function Parameters: +0:? Sequence +0:15 Sequence +0:15 move second child to first child ( temp 4-component vector of float) +0:15 'sample' ( temp 4-component vector of float) +0:? Constant: +0:? 3.000000 +0:? 4.000000 +0:? 5.000000 +0:? 6.000000 +0:17 Branch: Return with expression +0:17 vector swizzle ( temp 4-component vector of float) +0:17 'sample' ( temp 4-component vector of float) +0:17 Sequence +0:17 Constant: +0:17 0 (const int) +0:17 Constant: +0:17 1 (const int) +0:17 Constant: +0:17 2 (const int) +0:17 Constant: +0:17 3 (const int) +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): 80001 +// Id's are bound by 33 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 31 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 10 "sample(i1;" + Name 9 "x" + Name 15 "@main(" + Name 21 "sample" + Name 31 "@entryPointOutput" + Decorate 31(@entryPointOutput) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypePointer Function 6(int) + 8: TypeFunction 6(int) 7(ptr) + 12: TypeFloat 32 + 13: TypeVector 12(float) 4 + 14: TypeFunction 13(fvec4) + 20: TypePointer Function 13(fvec4) + 22: 12(float) Constant 1077936128 + 23: 12(float) Constant 1082130432 + 24: 12(float) Constant 1084227584 + 25: 12(float) Constant 1086324736 + 26: 13(fvec4) ConstantComposite 22 23 24 25 + 30: TypePointer Output 13(fvec4) +31(@entryPointOutput): 30(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 32: 13(fvec4) FunctionCall 15(@main() + Store 31(@entryPointOutput) 32 + Return + FunctionEnd + 10(sample(i1;): 6(int) Function None 8 + 9(x): 7(ptr) FunctionParameter + 11: Label + 17: 6(int) Load 9(x) + ReturnValue 17 + FunctionEnd + 15(@main(): 13(fvec4) Function None 14 + 16: Label + 21(sample): 20(ptr) Variable Function + Store 21(sample) 26 + 27: 13(fvec4) Load 21(sample) + ReturnValue 27 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.if.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.if.frag.out new file mode 100755 index 0000000..6f887ca --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.if.frag.out @@ -0,0 +1,365 @@ +hlsl.if.frag +Shader version: 450 +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:? Sequence +0:3 Test condition and select ( temp void) +0:3 Condition +0:3 all ( temp bool) +0:3 Equal ( temp 4-component vector of bool) +0:3 'input' ( in 4-component vector of float) +0:3 'input' ( in 4-component vector of float) +0:3 true case +0:4 Branch: Return with expression +0:4 'input' ( in 4-component vector of float) +0:6 Test condition and select ( temp void) +0:6 Condition +0:6 all ( temp bool) +0:6 Equal ( temp 4-component vector of bool) +0:6 'input' ( in 4-component vector of float) +0:6 'input' ( in 4-component vector of float) +0:6 true case +0:7 Branch: Return with expression +0:7 'input' ( in 4-component vector of float) +0:6 false case +0:9 Branch: Return with expression +0:9 Negate value ( temp 4-component vector of float) +0:9 'input' ( in 4-component vector of float) +0:11 Test condition and select ( temp void) +0:11 Condition +0:11 all ( temp bool) +0:11 Equal ( temp 4-component vector of bool) +0:11 'input' ( in 4-component vector of float) +0:11 'input' ( in 4-component vector of float) +0:11 true case is null +0:14 Test condition and select ( temp void) +0:14 Condition +0:14 all ( temp bool) +0:14 Equal ( temp 4-component vector of bool) +0:14 'input' ( in 4-component vector of float) +0:14 'input' ( in 4-component vector of float) +0:14 true case is null +0:19 Test condition and select ( temp void) +0:19 Condition +0:19 all ( temp bool) +0:19 Equal ( temp 4-component vector of bool) +0:19 'input' ( in 4-component vector of float) +0:19 'input' ( in 4-component vector of float) +0:19 true case +0:? Sequence +0:20 Branch: Return with expression +0:20 'input' ( in 4-component vector of float) +0:23 Test condition and select ( temp void) +0:23 Condition +0:23 all ( temp bool) +0:23 Equal ( temp 4-component vector of bool) +0:23 'input' ( in 4-component vector of float) +0:23 'input' ( in 4-component vector of float) +0:23 true case +0:? Sequence +0:24 Branch: Return with expression +0:24 'input' ( in 4-component vector of float) +0:23 false case +0:? Sequence +0:26 Branch: Return with expression +0:26 Negate value ( temp 4-component vector of float) +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 true case +0:31 Pre-Increment ( temp float) +0:31 'ii' ( temp float) +0:32 Pre-Increment ( temp int) +0:32 'ii' ( temp int) +0:33 Test condition and select ( temp void) +0:33 Condition +0:33 Compare Equal ( temp bool) +0:33 Convert int to float ( temp float) +0:33 'ii' ( temp int) +0:33 Constant: +0:33 1.000000 +0:33 true case +0:34 Pre-Increment ( temp int) +0:34 'ii' ( temp int) +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 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:? Linker Objects +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: 450 +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:? Sequence +0:3 Test condition and select ( temp void) +0:3 Condition +0:3 all ( temp bool) +0:3 Equal ( temp 4-component vector of bool) +0:3 'input' ( in 4-component vector of float) +0:3 'input' ( in 4-component vector of float) +0:3 true case +0:4 Branch: Return with expression +0:4 'input' ( in 4-component vector of float) +0:6 Test condition and select ( temp void) +0:6 Condition +0:6 all ( temp bool) +0:6 Equal ( temp 4-component vector of bool) +0:6 'input' ( in 4-component vector of float) +0:6 'input' ( in 4-component vector of float) +0:6 true case +0:7 Branch: Return with expression +0:7 'input' ( in 4-component vector of float) +0:6 false case +0:9 Branch: Return with expression +0:9 Negate value ( temp 4-component vector of float) +0:9 'input' ( in 4-component vector of float) +0:11 Test condition and select ( temp void) +0:11 Condition +0:11 all ( temp bool) +0:11 Equal ( temp 4-component vector of bool) +0:11 'input' ( in 4-component vector of float) +0:11 'input' ( in 4-component vector of float) +0:11 true case is null +0:14 Test condition and select ( temp void) +0:14 Condition +0:14 all ( temp bool) +0:14 Equal ( temp 4-component vector of bool) +0:14 'input' ( in 4-component vector of float) +0:14 'input' ( in 4-component vector of float) +0:14 true case is null +0:19 Test condition and select ( temp void) +0:19 Condition +0:19 all ( temp bool) +0:19 Equal ( temp 4-component vector of bool) +0:19 'input' ( in 4-component vector of float) +0:19 'input' ( in 4-component vector of float) +0:19 true case +0:? Sequence +0:20 Branch: Return with expression +0:20 'input' ( in 4-component vector of float) +0:23 Test condition and select ( temp void) +0:23 Condition +0:23 all ( temp bool) +0:23 Equal ( temp 4-component vector of bool) +0:23 'input' ( in 4-component vector of float) +0:23 'input' ( in 4-component vector of float) +0:23 true case +0:? Sequence +0:24 Branch: Return with expression +0:24 'input' ( in 4-component vector of float) +0:23 false case +0:? Sequence +0:26 Branch: Return with expression +0:26 Negate value ( temp 4-component vector of float) +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 true case +0:31 Pre-Increment ( temp float) +0:31 'ii' ( temp float) +0:32 Pre-Increment ( temp int) +0:32 'ii' ( temp int) +0:33 Test condition and select ( temp void) +0:33 Condition +0:33 Compare Equal ( temp bool) +0:33 Convert int to float ( temp float) +0:33 'ii' ( temp int) +0:33 Constant: +0:33 1.000000 +0:33 true case +0:34 Pre-Increment ( temp int) +0:34 'ii' ( temp int) +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 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:? Linker Objects +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 101 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "PixelShaderFunction" 94 97 + ExecutionMode 4 OriginUpperLeft + Name 4 "PixelShaderFunction" + Name 11 "@PixelShaderFunction(vf4;" + Name 10 "input" + Name 68 "ii" + Name 80 "ii" + Name 92 "input" + Name 94 "input" + Name 97 "@entryPointOutput" + Name 98 "param" + Decorate 94(input) Location 0 + Decorate 97(@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) + 15: TypeBool + 16: TypeVector 15(bool) 4 + 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 +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 + 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 + 13: 7(fvec4) Load 10(input) + 14: 7(fvec4) Load 10(input) + 17: 16(bvec4) FOrdEqual 13 14 + 18: 15(bool) All 17 + SelectionMerge 20 None + BranchConditional 18 19 20 + 19: Label + 21: 7(fvec4) Load 10(input) + ReturnValue 21 + 20: Label + 23: 7(fvec4) Load 10(input) + 24: 7(fvec4) Load 10(input) + 25: 16(bvec4) FOrdEqual 23 24 + 26: 15(bool) All 25 + SelectionMerge 28 None + BranchConditional 26 27 31 + 27: Label + 29: 7(fvec4) Load 10(input) + ReturnValue 29 + 31: Label + 32: 7(fvec4) Load 10(input) + 33: 7(fvec4) FNegate 32 + ReturnValue 33 + 28: Label + 35: 7(fvec4) Load 10(input) + 36: 7(fvec4) Load 10(input) + 37: 16(bvec4) FOrdEqual 35 36 + 38: 15(bool) All 37 + SelectionMerge 40 None + BranchConditional 38 39 40 + 39: Label + Branch 40 + 40: Label + 41: 7(fvec4) Load 10(input) + 42: 7(fvec4) Load 10(input) + 43: 16(bvec4) FOrdEqual 41 42 + 44: 15(bool) All 43 + SelectionMerge 46 None + BranchConditional 44 45 46 + 45: Label + Branch 46 + 46: Label + 47: 7(fvec4) Load 10(input) + 48: 7(fvec4) Load 10(input) + 49: 16(bvec4) FOrdEqual 47 48 + 50: 15(bool) All 49 + SelectionMerge 52 None + BranchConditional 50 51 52 + 51: Label + 53: 7(fvec4) Load 10(input) + ReturnValue 53 + 52: Label + 55: 7(fvec4) Load 10(input) + 56: 7(fvec4) Load 10(input) + 57: 16(bvec4) FOrdEqual 55 56 + 58: 15(bool) All 57 + SelectionMerge 60 None + BranchConditional 58 59 63 + 59: Label + 61: 7(fvec4) Load 10(input) + ReturnValue 61 + 63: Label + 64: 7(fvec4) Load 10(input) + 65: 7(fvec4) FNegate 64 + ReturnValue 65 + 60: Label + 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 + 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 new file mode 100755 index 0000000..7ae9475 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.init.frag.out @@ -0,0 +1,529 @@ +hlsl.init.frag +WARNING: 0:40: 'typedef' : struct-member initializers ignored +WARNING: 0:40: 'typedef' : struct-member initializers ignored + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:1 Sequence +0:1 move second child to first child ( temp 4-component vector of float) +0:1 'a1' ( global 4-component vector of float) +0:? Constant: +0:? 1.000000 +0:? 0.500000 +0:? 0.000000 +0:? 1.000000 +0:1 move second child to first child ( temp 4-component vector of float) +0:1 'b1' ( global 4-component vector of float) +0:? Constant: +0:? 2.000000 +0:? 2.500000 +0:? 2.100000 +0:? 2.200000 +0:2 Sequence +0:2 move second child to first child ( temp 4-component vector of float) +0:2 'a1i' ( global 4-component vector of float) +0:2 Constant: +0:2 1.000000 +0:2 0.500000 +0:2 0.000000 +0:2 1.000000 +0:2 move second child to first child ( temp 4-component vector of float) +0:2 'b1i' ( global 4-component vector of float) +0:2 Constant: +0:2 2.000000 +0:2 2.500000 +0:2 2.100000 +0:2 2.200000 +0:3 Sequence +0:3 move second child to first child ( temp float) +0:3 'a2' ( global float) +0:3 Constant: +0:3 0.200000 +0:4 Sequence +0:4 move second child to first child ( temp float) +0:4 'b3' ( global float) +0:4 Constant: +0:4 0.300000 +0:5 Sequence +0:5 move second child to first child ( temp float) +0:5 'b4' ( global float) +0:5 Constant: +0:5 0.400000 +0:6 Sequence +0:6 move second child to first child ( temp float) +0:6 'a5' ( global float) +0:6 Constant: +0:6 0.500000 +0:6 move second child to first child ( temp float) +0:6 'c5' ( global float) +0:6 Constant: +0:6 1.500000 +0:9 Sequence +0:9 move second child to first child ( temp structure{ temp int f}) +0:9 'single1' ( global structure{ temp int f}) +0:9 Constant: +0:9 10 (const int) +0:12 Sequence +0:12 move second child to first child ( temp structure{ temp 2-component vector of uint v}) +0:12 'single2' ( global structure{ temp 2-component vector of uint v}) +0:12 Constant: +0:12 1 (const uint) +0:12 2 (const uint) +0:15 Sequence +0:15 move second child to first child ( temp structure{ temp structure{ temp int f} s1}) +0:15 'single3' ( global structure{ temp structure{ temp int f} s1}) +0:15 Constant: +0:15 3 (const int) +0:18 Sequence +0:18 move second child to first child ( temp structure{ temp structure{ temp 2-component vector of uint v} s1}) +0:18 'single4' ( global structure{ temp structure{ temp 2-component vector of uint v} s1}) +0:18 Constant: +0:18 4 (const uint) +0:18 5 (const uint) +0:21 Function Definition: @ShaderFunction(vf4; ( temp 4-component vector of float) +0:21 Function Parameters: +0:21 'input' ( 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 'a2' ( temp 4-component vector of float) +0:? Constant: +0:? 0.200000 +0:? 0.300000 +0:? 0.400000 +0:? 0.500000 +0:32 Sequence +0:32 move second child to first child ( temp structure{ temp int j, temp float g, temp structure{ temp float f, temp int i} s1}) +0:32 's2i' ( temp structure{ temp int j, temp float g, temp structure{ temp float f, temp int i} s1}) +0:32 Construct structure ( temp structure{ temp int j, temp float g, temp structure{ temp float f, temp int i} s1}) +0:32 Constant: +0:32 9 (const int) +0:32 'a5' ( global float) +0:32 Construct structure ( temp structure{ temp float f, temp int i}) +0:32 Comma ( temp float) +0:32 'a3' ( global float) +0:32 'a4' ( global float) +0:32 Constant: +0:32 12 (const int) +0:32 move second child to first child ( temp structure{ temp int j, temp float g, temp structure{ temp float f, temp int i} s1}) +0:32 's2' ( temp structure{ temp int j, temp float g, temp structure{ temp float f, temp int i} s1}) +0:? Construct structure ( temp structure{ temp int j, temp float g, temp structure{ temp float f, temp int i} s1}) +0:32 Constant: +0:32 9 (const int) +0:32 'a5' ( global float) +0:? Construct structure ( temp structure{ temp float f, temp int i}) +0:32 Comma ( temp float) +0:32 'a3' ( global float) +0:32 'a4' ( global float) +0:32 Constant: +0:32 12 (const int) +0:33 Sequence +0:33 move second child to first child ( temp float) +0:33 'a8' ( temp float) +0:33 Comma ( temp float) +0:33 'a2' ( temp 4-component vector of float) +0:33 'b2' ( global float) +0:33 move second child to first child ( temp float) +0:33 'a9' ( temp float) +0:33 'a5' ( global float) +0:35 Branch: Return with expression +0:35 component-wise multiply ( temp 4-component vector of float) +0:35 'input' ( in 4-component vector of float) +0:35 'a1' ( global 4-component vector of float) +0:21 Function Definition: ShaderFunction( ( temp void) +0:21 Function Parameters: +0:? Sequence +0:21 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: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: @ShaderFunction(vf4; ( temp 4-component vector of float) +0:? 'input' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'a1' ( global 4-component vector of float) +0:? 'b1' ( global 4-component vector of float) +0:? 'a1i' ( global 4-component vector of float) +0:? 'b1i' ( global 4-component vector of float) +0:? 'a2' ( global float) +0:? 'b2' ( global float) +0:? 'a3' ( global float) +0:? 'b3' ( global float) +0:? 'a4' ( global float) +0:? 'b4' ( global float) +0:? 'c4' ( global float) +0:? 'a5' ( global float) +0:? 'b5' ( global float) +0:? 'c5' ( global float) +0:? 'single1' ( global structure{ temp int f}) +0:? 'single2' ( global structure{ temp 2-component vector of uint v}) +0:? 'single3' ( global structure{ temp structure{ temp int f} s1}) +0:? 'single4' ( global structure{ temp structure{ temp 2-component vector of uint v} s1}) +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) +0:? 'input' (layout( location=0) in 4-component vector of float) +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}) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:1 Sequence +0:1 move second child to first child ( temp 4-component vector of float) +0:1 'a1' ( global 4-component vector of float) +0:? Constant: +0:? 1.000000 +0:? 0.500000 +0:? 0.000000 +0:? 1.000000 +0:1 move second child to first child ( temp 4-component vector of float) +0:1 'b1' ( global 4-component vector of float) +0:? Constant: +0:? 2.000000 +0:? 2.500000 +0:? 2.100000 +0:? 2.200000 +0:2 Sequence +0:2 move second child to first child ( temp 4-component vector of float) +0:2 'a1i' ( global 4-component vector of float) +0:2 Constant: +0:2 1.000000 +0:2 0.500000 +0:2 0.000000 +0:2 1.000000 +0:2 move second child to first child ( temp 4-component vector of float) +0:2 'b1i' ( global 4-component vector of float) +0:2 Constant: +0:2 2.000000 +0:2 2.500000 +0:2 2.100000 +0:2 2.200000 +0:3 Sequence +0:3 move second child to first child ( temp float) +0:3 'a2' ( global float) +0:3 Constant: +0:3 0.200000 +0:4 Sequence +0:4 move second child to first child ( temp float) +0:4 'b3' ( global float) +0:4 Constant: +0:4 0.300000 +0:5 Sequence +0:5 move second child to first child ( temp float) +0:5 'b4' ( global float) +0:5 Constant: +0:5 0.400000 +0:6 Sequence +0:6 move second child to first child ( temp float) +0:6 'a5' ( global float) +0:6 Constant: +0:6 0.500000 +0:6 move second child to first child ( temp float) +0:6 'c5' ( global float) +0:6 Constant: +0:6 1.500000 +0:9 Sequence +0:9 move second child to first child ( temp structure{ temp int f}) +0:9 'single1' ( global structure{ temp int f}) +0:9 Constant: +0:9 10 (const int) +0:12 Sequence +0:12 move second child to first child ( temp structure{ temp 2-component vector of uint v}) +0:12 'single2' ( global structure{ temp 2-component vector of uint v}) +0:12 Constant: +0:12 1 (const uint) +0:12 2 (const uint) +0:15 Sequence +0:15 move second child to first child ( temp structure{ temp structure{ temp int f} s1}) +0:15 'single3' ( global structure{ temp structure{ temp int f} s1}) +0:15 Constant: +0:15 3 (const int) +0:18 Sequence +0:18 move second child to first child ( temp structure{ temp structure{ temp 2-component vector of uint v} s1}) +0:18 'single4' ( global structure{ temp structure{ temp 2-component vector of uint v} s1}) +0:18 Constant: +0:18 4 (const uint) +0:18 5 (const uint) +0:21 Function Definition: @ShaderFunction(vf4; ( temp 4-component vector of float) +0:21 Function Parameters: +0:21 'input' ( 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 'a2' ( temp 4-component vector of float) +0:? Constant: +0:? 0.200000 +0:? 0.300000 +0:? 0.400000 +0:? 0.500000 +0:32 Sequence +0:32 move second child to first child ( temp structure{ temp int j, temp float g, temp structure{ temp float f, temp int i} s1}) +0:32 's2i' ( temp structure{ temp int j, temp float g, temp structure{ temp float f, temp int i} s1}) +0:32 Construct structure ( temp structure{ temp int j, temp float g, temp structure{ temp float f, temp int i} s1}) +0:32 Constant: +0:32 9 (const int) +0:32 'a5' ( global float) +0:32 Construct structure ( temp structure{ temp float f, temp int i}) +0:32 Comma ( temp float) +0:32 'a3' ( global float) +0:32 'a4' ( global float) +0:32 Constant: +0:32 12 (const int) +0:32 move second child to first child ( temp structure{ temp int j, temp float g, temp structure{ temp float f, temp int i} s1}) +0:32 's2' ( temp structure{ temp int j, temp float g, temp structure{ temp float f, temp int i} s1}) +0:? Construct structure ( temp structure{ temp int j, temp float g, temp structure{ temp float f, temp int i} s1}) +0:32 Constant: +0:32 9 (const int) +0:32 'a5' ( global float) +0:? Construct structure ( temp structure{ temp float f, temp int i}) +0:32 Comma ( temp float) +0:32 'a3' ( global float) +0:32 'a4' ( global float) +0:32 Constant: +0:32 12 (const int) +0:33 Sequence +0:33 move second child to first child ( temp float) +0:33 'a8' ( temp float) +0:33 Comma ( temp float) +0:33 'a2' ( temp 4-component vector of float) +0:33 'b2' ( global float) +0:33 move second child to first child ( temp float) +0:33 'a9' ( temp float) +0:33 'a5' ( global float) +0:35 Branch: Return with expression +0:35 component-wise multiply ( temp 4-component vector of float) +0:35 'input' ( in 4-component vector of float) +0:35 'a1' ( global 4-component vector of float) +0:21 Function Definition: ShaderFunction( ( temp void) +0:21 Function Parameters: +0:? Sequence +0:21 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: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: @ShaderFunction(vf4; ( temp 4-component vector of float) +0:? 'input' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'a1' ( global 4-component vector of float) +0:? 'b1' ( global 4-component vector of float) +0:? 'a1i' ( global 4-component vector of float) +0:? 'b1i' ( global 4-component vector of float) +0:? 'a2' ( global float) +0:? 'b2' ( global float) +0:? 'a3' ( global float) +0:? 'b3' ( global float) +0:? 'a4' ( global float) +0:? 'b4' ( global float) +0:? 'c4' ( global float) +0:? 'a5' ( global float) +0:? 'b5' ( global float) +0:? 'c5' ( global float) +0:? 'single1' ( global structure{ temp int f}) +0:? 'single2' ( global structure{ temp 2-component vector of uint v}) +0:? 'single3' ( global structure{ temp structure{ temp int f} s1}) +0:? 'single4' ( global structure{ temp structure{ temp 2-component vector of uint v} s1}) +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) +0:? 'input' (layout( location=0) in 4-component vector of float) +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 +// Id's are bound by 110 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "ShaderFunction" 98 101 + ExecutionMode 4 OriginUpperLeft + Name 4 "ShaderFunction" + Name 11 "@ShaderFunction(vf4;" + Name 10 "input" + Name 14 "a1" + Name 19 "b1" + Name 25 "a1i" + Name 26 "b1i" + Name 28 "a2" + Name 30 "b3" + Name 32 "b4" + Name 34 "a5" + Name 35 "c5" + Name 38 "Single1" + MemberName 38(Single1) 0 "f" + Name 40 "single1" + Name 45 "Single2" + MemberName 45(Single2) 0 "v" + Name 47 "single2" + Name 52 "Single3" + MemberName 52(Single3) 0 "s1" + Name 54 "single3" + Name 58 "Single4" + MemberName 58(Single4) 0 "s1" + Name 60 "single4" + Name 66 "a2" + Name 68 "S1" + MemberName 68(S1) 0 "f" + MemberName 68(S1) 1 "i" + Name 69 "S2" + MemberName 69(S2) 0 "j" + MemberName 69(S2) 1 "g" + MemberName 69(S2) 2 "s1" + Name 71 "s2i" + Name 74 "a3" + Name 75 "a4" + Name 80 "s2" + Name 86 "a8" + Name 87 "b2" + Name 89 "a9" + Name 96 "input" + Name 98 "input" + Name 101 "@entryPointOutput" + Name 102 "param" + Name 105 "c4" + Name 106 "b5" + Name 107 "Constants" + MemberName 107(Constants) 0 "a" + MemberName 107(Constants) 1 "b" + MemberName 107(Constants) 2 "c" + Name 109 "" + Decorate 98(input) Location 0 + Decorate 101(@entryPointOutput) Location 0 + MemberDecorate 107(Constants) 0 Offset 0 + MemberDecorate 107(Constants) 1 Offset 4 + MemberDecorate 107(Constants) 2 Offset 8 + Decorate 107(Constants) Block + Decorate 109 DescriptorSet 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 Private 7(fvec4) + 14(a1): 13(ptr) Variable Private + 15: 6(float) Constant 1065353216 + 16: 6(float) Constant 1056964608 + 17: 6(float) Constant 0 + 18: 7(fvec4) ConstantComposite 15 16 17 15 + 19(b1): 13(ptr) Variable Private + 20: 6(float) Constant 1073741824 + 21: 6(float) Constant 1075838976 + 22: 6(float) Constant 1074161254 + 23: 6(float) Constant 1074580685 + 24: 7(fvec4) ConstantComposite 20 21 22 23 + 25(a1i): 13(ptr) Variable Private + 26(b1i): 13(ptr) Variable Private + 27: TypePointer Private 6(float) + 28(a2): 27(ptr) Variable Private + 29: 6(float) Constant 1045220557 + 30(b3): 27(ptr) Variable Private + 31: 6(float) Constant 1050253722 + 32(b4): 27(ptr) Variable Private + 33: 6(float) Constant 1053609165 + 34(a5): 27(ptr) Variable Private + 35(c5): 27(ptr) Variable Private + 36: 6(float) Constant 1069547520 + 37: TypeInt 32 1 + 38(Single1): TypeStruct 37(int) + 39: TypePointer Private 38(Single1) + 40(single1): 39(ptr) Variable Private + 41: 37(int) Constant 10 + 42: 38(Single1) ConstantComposite 41 + 43: TypeInt 32 0 + 44: TypeVector 43(int) 2 + 45(Single2): TypeStruct 44(ivec2) + 46: TypePointer Private 45(Single2) + 47(single2): 46(ptr) Variable Private + 48: 43(int) Constant 1 + 49: 43(int) Constant 2 + 50: 44(ivec2) ConstantComposite 48 49 + 51: 45(Single2) ConstantComposite 50 + 52(Single3): TypeStruct 38(Single1) + 53: TypePointer Private 52(Single3) + 54(single3): 53(ptr) Variable Private + 55: 37(int) Constant 3 + 56: 38(Single1) ConstantComposite 55 + 57: 52(Single3) ConstantComposite 56 + 58(Single4): TypeStruct 45(Single2) + 59: TypePointer Private 58(Single4) + 60(single4): 59(ptr) Variable Private + 61: 43(int) Constant 4 + 62: 43(int) Constant 5 + 63: 44(ivec2) ConstantComposite 61 62 + 64: 45(Single2) ConstantComposite 63 + 65: 58(Single4) ConstantComposite 64 + 67: 7(fvec4) ConstantComposite 29 31 33 16 + 68(S1): TypeStruct 6(float) 37(int) + 69(S2): TypeStruct 37(int) 6(float) 68(S1) + 70: TypePointer Function 69(S2) + 72: 37(int) Constant 9 + 74(a3): 27(ptr) Variable Private + 75(a4): 27(ptr) Variable Private + 77: 37(int) Constant 12 + 85: TypePointer Function 6(float) + 87(b2): 27(ptr) Variable Private + 97: TypePointer Input 7(fvec4) + 98(input): 97(ptr) Variable Input + 100: TypePointer Output 7(fvec4) +101(@entryPointOutput): 100(ptr) Variable Output + 105(c4): 27(ptr) Variable Private + 106(b5): 27(ptr) Variable Private + 107(Constants): TypeStruct 6(float) 6(float) 6(float) + 108: TypePointer Uniform 107(Constants) + 109: 108(ptr) Variable Uniform +4(ShaderFunction): 2 Function None 3 + 5: Label + 96(input): 8(ptr) Variable Function + 102(param): 8(ptr) Variable Function + Store 14(a1) 18 + Store 19(b1) 24 + Store 25(a1i) 18 + Store 26(b1i) 24 + Store 28(a2) 29 + Store 30(b3) 31 + Store 32(b4) 33 + Store 34(a5) 16 + Store 35(c5) 36 + Store 40(single1) 42 + Store 47(single2) 51 + Store 54(single3) 57 + Store 60(single4) 65 + 99: 7(fvec4) Load 98(input) + Store 96(input) 99 + 103: 7(fvec4) Load 96(input) + Store 102(param) 103 + 104: 7(fvec4) FunctionCall 11(@ShaderFunction(vf4;) 102(param) + Store 101(@entryPointOutput) 104 + Return + FunctionEnd +11(@ShaderFunction(vf4;): 7(fvec4) Function None 9 + 10(input): 8(ptr) FunctionParameter + 12: Label + 66(a2): 8(ptr) Variable Function + 71(s2i): 70(ptr) Variable Function + 80(s2): 70(ptr) Variable Function + 86(a8): 85(ptr) Variable Function + 89(a9): 85(ptr) Variable Function + Store 66(a2) 67 + 73: 6(float) Load 34(a5) + 76: 6(float) Load 75(a4) + 78: 68(S1) CompositeConstruct 76 77 + 79: 69(S2) CompositeConstruct 72 73 78 + Store 71(s2i) 79 + 81: 6(float) Load 34(a5) + 82: 6(float) Load 75(a4) + 83: 68(S1) CompositeConstruct 82 77 + 84: 69(S2) CompositeConstruct 72 81 83 + Store 80(s2) 84 + 88: 6(float) Load 87(b2) + Store 86(a8) 88 + 90: 6(float) Load 34(a5) + Store 89(a9) 90 + 91: 7(fvec4) Load 10(input) + 92: 7(fvec4) Load 14(a1) + 93: 7(fvec4) FMul 91 92 + ReturnValue 93 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.init2.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.init2.frag.out new file mode 100644 index 0000000..33714aa --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.init2.frag.out @@ -0,0 +1,530 @@ +hlsl.init2.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:3 Function Definition: Test1( ( temp void) +0:3 Function Parameters: +0:? Sequence +0:5 Sequence +0:5 move second child to first child ( temp structure{ temp 2-component vector of float a}) +0:5 'test1' ( temp structure{ temp 2-component vector of float a}) +0:5 Constant: +0:5 1.000000 +0:5 2.000000 +0:9 Sequence +0:9 move second child to first child ( temp structure{ temp 2-component vector of float a}) +0:9 'test2' ( temp structure{ temp 2-component vector of float a}) +0:9 Constant: +0:9 3.000000 +0:9 4.000000 +0:17 Sequence +0:17 move second child to first child ( temp float) +0:17 'test4' ( temp float) +0:17 Constant: +0:17 7.000000 +0:20 Sequence +0:20 move second child to first child ( temp structure{ temp float a, temp float b, temp float c}) +0:20 'test5' ( temp structure{ temp float a, temp float b, temp float c}) +0:20 Constant: +0:20 8.000000 +0:20 9.000000 +0:20 10.000000 +0:22 Constant: +0:22 10.000000 +0:25 Sequence +0:25 move second child to first child ( temp float) +0:25 'n' ( temp float) +0:25 Constant: +0:25 0.000000 +0:26 Sequence +0:26 move second child to first child ( temp 8-element array of 3-component vector of float) +0:26 'a' ( const (read only) 8-element array of 3-component vector of float) +0:26 Construct vec3 ( temp 8-element array of 3-component vector of float) +0:27 vector-scale ( temp 3-component vector of float) +0:? Constant: +0:? 0.577350 +0:? 0.577350 +0:? 0.577350 +0:27 add second child into first child ( temp float) +0:27 'n' ( temp float) +0:27 Constant: +0:27 1.000000 +0:28 vector-scale ( temp 3-component vector of float) +0:? Constant: +0:? -0.577350 +0:? -0.577350 +0:? -0.577350 +0:28 add second child into first child ( temp float) +0:28 'n' ( temp float) +0:28 Constant: +0:28 1.000000 +0:29 vector-scale ( temp 3-component vector of float) +0:? Constant: +0:? -0.577350 +0:? -0.577350 +0:? 0.577350 +0:29 add second child into first child ( temp float) +0:29 'n' ( temp float) +0:29 Constant: +0:29 1.000000 +0:30 vector-scale ( temp 3-component vector of float) +0:? Constant: +0:? -0.577350 +0:? 0.577350 +0:? -0.577350 +0:30 add second child into first child ( temp float) +0:30 'n' ( temp float) +0:30 Constant: +0:30 1.000000 +0:31 vector-scale ( temp 3-component vector of float) +0:? Constant: +0:? -0.577350 +0:? 0.577350 +0:? 0.577350 +0:31 add second child into first child ( temp float) +0:31 'n' ( temp float) +0:31 Constant: +0:31 1.000000 +0:32 vector-scale ( temp 3-component vector of float) +0:? Constant: +0:? 0.577350 +0:? -0.577350 +0:? -0.577350 +0:32 add second child into first child ( temp float) +0:32 'n' ( temp float) +0:32 Constant: +0:32 1.000000 +0:33 vector-scale ( temp 3-component vector of float) +0:? Constant: +0:? 0.577350 +0:? -0.577350 +0:? 0.577350 +0:33 add second child into first child ( temp float) +0:33 'n' ( temp float) +0:33 Constant: +0:33 1.000000 +0:34 vector-scale ( temp 3-component vector of float) +0:? Constant: +0:? 0.577350 +0:? 0.577350 +0:? -0.577350 +0:34 add second child into first child ( temp float) +0:34 'n' ( temp float) +0:34 Constant: +0:34 1.000000 +0:36 Sequence +0:36 move second child to first child ( temp structure{ temp 3-component vector of float a}) +0:36 'oneNonConst' ( const (read only) structure{ temp 3-component vector of float a}) +0:36 Construct structure ( temp structure{ temp 3-component vector of float a}) +0:36 vector-scale ( temp 3-component vector of float) +0:? Constant: +0:? -0.577350 +0:? 0.577350 +0:? 0.577350 +0:36 add second child into first child ( temp float) +0:36 'n' ( temp float) +0:36 Constant: +0:36 1.000000 +0:38 Sequence +0:38 move second child to first child ( temp structure{ temp 3-component vector of float a, temp 3-component vector of float b}) +0:38 'twoNonConst' ( const (read only) structure{ temp 3-component vector of float a, temp 3-component vector of float b}) +0:38 Construct structure ( temp structure{ temp 3-component vector of float a, temp 3-component vector of float b}) +0:38 vector-scale ( temp 3-component vector of float) +0:? Constant: +0:? -0.577350 +0:? 0.577350 +0:? 0.577350 +0:38 add second child into first child ( temp float) +0:38 'n' ( temp float) +0:38 Constant: +0:38 1.000000 +0:39 vector-scale ( temp 3-component vector of float) +0:? Constant: +0:? -0.577350 +0:? 0.577350 +0:? 0.577350 +0:39 add second child into first child ( temp float) +0:39 'n' ( temp float) +0:39 Constant: +0:39 1.000000 +0:45 Function Definition: @main( ( temp structure{ temp 4-component vector of float color}) +0:45 Function Parameters: +0:? Sequence +0:46 Function Call: Test1( ( temp void) +0:49 move second child to first child ( temp 4-component vector of float) +0:49 color: direct index for structure ( temp 4-component vector of float) +0:49 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:49 Constant: +0:49 0 (const int) +0:49 Constant: +0:49 1.000000 +0:49 1.000000 +0:49 1.000000 +0:49 1.000000 +0:50 Branch: Return with expression +0:50 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:45 Function Definition: main( ( temp void) +0:45 Function Parameters: +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: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) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:3 Function Definition: Test1( ( temp void) +0:3 Function Parameters: +0:? Sequence +0:5 Sequence +0:5 move second child to first child ( temp structure{ temp 2-component vector of float a}) +0:5 'test1' ( temp structure{ temp 2-component vector of float a}) +0:5 Constant: +0:5 1.000000 +0:5 2.000000 +0:9 Sequence +0:9 move second child to first child ( temp structure{ temp 2-component vector of float a}) +0:9 'test2' ( temp structure{ temp 2-component vector of float a}) +0:9 Constant: +0:9 3.000000 +0:9 4.000000 +0:17 Sequence +0:17 move second child to first child ( temp float) +0:17 'test4' ( temp float) +0:17 Constant: +0:17 7.000000 +0:20 Sequence +0:20 move second child to first child ( temp structure{ temp float a, temp float b, temp float c}) +0:20 'test5' ( temp structure{ temp float a, temp float b, temp float c}) +0:20 Constant: +0:20 8.000000 +0:20 9.000000 +0:20 10.000000 +0:22 Constant: +0:22 10.000000 +0:25 Sequence +0:25 move second child to first child ( temp float) +0:25 'n' ( temp float) +0:25 Constant: +0:25 0.000000 +0:26 Sequence +0:26 move second child to first child ( temp 8-element array of 3-component vector of float) +0:26 'a' ( const (read only) 8-element array of 3-component vector of float) +0:26 Construct vec3 ( temp 8-element array of 3-component vector of float) +0:27 vector-scale ( temp 3-component vector of float) +0:? Constant: +0:? 0.577350 +0:? 0.577350 +0:? 0.577350 +0:27 add second child into first child ( temp float) +0:27 'n' ( temp float) +0:27 Constant: +0:27 1.000000 +0:28 vector-scale ( temp 3-component vector of float) +0:? Constant: +0:? -0.577350 +0:? -0.577350 +0:? -0.577350 +0:28 add second child into first child ( temp float) +0:28 'n' ( temp float) +0:28 Constant: +0:28 1.000000 +0:29 vector-scale ( temp 3-component vector of float) +0:? Constant: +0:? -0.577350 +0:? -0.577350 +0:? 0.577350 +0:29 add second child into first child ( temp float) +0:29 'n' ( temp float) +0:29 Constant: +0:29 1.000000 +0:30 vector-scale ( temp 3-component vector of float) +0:? Constant: +0:? -0.577350 +0:? 0.577350 +0:? -0.577350 +0:30 add second child into first child ( temp float) +0:30 'n' ( temp float) +0:30 Constant: +0:30 1.000000 +0:31 vector-scale ( temp 3-component vector of float) +0:? Constant: +0:? -0.577350 +0:? 0.577350 +0:? 0.577350 +0:31 add second child into first child ( temp float) +0:31 'n' ( temp float) +0:31 Constant: +0:31 1.000000 +0:32 vector-scale ( temp 3-component vector of float) +0:? Constant: +0:? 0.577350 +0:? -0.577350 +0:? -0.577350 +0:32 add second child into first child ( temp float) +0:32 'n' ( temp float) +0:32 Constant: +0:32 1.000000 +0:33 vector-scale ( temp 3-component vector of float) +0:? Constant: +0:? 0.577350 +0:? -0.577350 +0:? 0.577350 +0:33 add second child into first child ( temp float) +0:33 'n' ( temp float) +0:33 Constant: +0:33 1.000000 +0:34 vector-scale ( temp 3-component vector of float) +0:? Constant: +0:? 0.577350 +0:? 0.577350 +0:? -0.577350 +0:34 add second child into first child ( temp float) +0:34 'n' ( temp float) +0:34 Constant: +0:34 1.000000 +0:36 Sequence +0:36 move second child to first child ( temp structure{ temp 3-component vector of float a}) +0:36 'oneNonConst' ( const (read only) structure{ temp 3-component vector of float a}) +0:36 Construct structure ( temp structure{ temp 3-component vector of float a}) +0:36 vector-scale ( temp 3-component vector of float) +0:? Constant: +0:? -0.577350 +0:? 0.577350 +0:? 0.577350 +0:36 add second child into first child ( temp float) +0:36 'n' ( temp float) +0:36 Constant: +0:36 1.000000 +0:38 Sequence +0:38 move second child to first child ( temp structure{ temp 3-component vector of float a, temp 3-component vector of float b}) +0:38 'twoNonConst' ( const (read only) structure{ temp 3-component vector of float a, temp 3-component vector of float b}) +0:38 Construct structure ( temp structure{ temp 3-component vector of float a, temp 3-component vector of float b}) +0:38 vector-scale ( temp 3-component vector of float) +0:? Constant: +0:? -0.577350 +0:? 0.577350 +0:? 0.577350 +0:38 add second child into first child ( temp float) +0:38 'n' ( temp float) +0:38 Constant: +0:38 1.000000 +0:39 vector-scale ( temp 3-component vector of float) +0:? Constant: +0:? -0.577350 +0:? 0.577350 +0:? 0.577350 +0:39 add second child into first child ( temp float) +0:39 'n' ( temp float) +0:39 Constant: +0:39 1.000000 +0:45 Function Definition: @main( ( temp structure{ temp 4-component vector of float color}) +0:45 Function Parameters: +0:? Sequence +0:46 Function Call: Test1( ( temp void) +0:49 move second child to first child ( temp 4-component vector of float) +0:49 color: direct index for structure ( temp 4-component vector of float) +0:49 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:49 Constant: +0:49 0 (const int) +0:49 Constant: +0:49 1.000000 +0:49 1.000000 +0:49 1.000000 +0:49 1.000000 +0:50 Branch: Return with expression +0:50 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:45 Function Definition: main( ( temp void) +0:45 Function Parameters: +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: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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 112 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 109 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 6 "Test1(" + Name 10 "PS_OUTPUT" + MemberName 10(PS_OUTPUT) 0 "color" + Name 12 "@main(" + Name 15 "mystruct" + MemberName 15(mystruct) 0 "a" + Name 17 "test1" + Name 22 "test2" + Name 28 "test4" + Name 30 "mystruct2" + MemberName 30(mystruct2) 0 "a" + MemberName 30(mystruct2) 1 "b" + MemberName 30(mystruct2) 2 "c" + Name 32 "test5" + Name 37 "n" + Name 44 "a" + Name 80 "one" + MemberName 80(one) 0 "a" + Name 82 "oneNonConst" + Name 87 "two" + MemberName 87(two) 0 "a" + MemberName 87(two) 1 "b" + Name 89 "twoNonConst" + Name 99 "ps_output" + Name 109 "color" + Decorate 109(color) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 8: TypeFloat 32 + 9: TypeVector 8(float) 4 + 10(PS_OUTPUT): TypeStruct 9(fvec4) + 11: TypeFunction 10(PS_OUTPUT) + 14: TypeVector 8(float) 2 + 15(mystruct): TypeStruct 14(fvec2) + 16: TypePointer Function 15(mystruct) + 18: 8(float) Constant 1065353216 + 19: 8(float) Constant 1073741824 + 20: 14(fvec2) ConstantComposite 18 19 + 21:15(mystruct) ConstantComposite 20 + 23: 8(float) Constant 1077936128 + 24: 8(float) Constant 1082130432 + 25: 14(fvec2) ConstantComposite 23 24 + 26:15(mystruct) ConstantComposite 25 + 27: TypePointer Function 8(float) + 29: 8(float) Constant 1088421888 + 30(mystruct2): TypeStruct 8(float) 8(float) 8(float) + 31: TypePointer Function 30(mystruct2) + 33: 8(float) Constant 1090519040 + 34: 8(float) Constant 1091567616 + 35: 8(float) Constant 1092616192 + 36:30(mystruct2) ConstantComposite 33 34 35 + 38: 8(float) Constant 0 + 39: TypeVector 8(float) 3 + 40: TypeInt 32 0 + 41: 40(int) Constant 8 + 42: TypeArray 39(fvec3) 41 + 43: TypePointer Function 42 + 45: 8(float) Constant 1058262330 + 46: 39(fvec3) ConstantComposite 45 45 45 + 50: 8(float) Constant 3205745978 + 51: 39(fvec3) ConstantComposite 50 50 50 + 55: 39(fvec3) ConstantComposite 50 50 45 + 59: 39(fvec3) ConstantComposite 50 45 50 + 63: 39(fvec3) ConstantComposite 50 45 45 + 67: 39(fvec3) ConstantComposite 45 50 50 + 71: 39(fvec3) ConstantComposite 45 50 45 + 75: 39(fvec3) ConstantComposite 45 45 50 + 80(one): TypeStruct 39(fvec3) + 81: TypePointer Function 80(one) + 87(two): TypeStruct 39(fvec3) 39(fvec3) + 88: TypePointer Function 87(two) + 98: TypePointer Function 10(PS_OUTPUT) + 100: TypeInt 32 1 + 101: 100(int) Constant 0 + 102: 9(fvec4) ConstantComposite 18 18 18 18 + 103: TypePointer Function 9(fvec4) + 108: TypePointer Output 9(fvec4) + 109(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 + Return + FunctionEnd + 6(Test1(): 2 Function None 3 + 7: Label + 17(test1): 16(ptr) Variable Function + 22(test2): 16(ptr) Variable Function + 28(test4): 27(ptr) Variable Function + 32(test5): 31(ptr) Variable Function + 37(n): 27(ptr) Variable Function + 44(a): 43(ptr) Variable Function + 82(oneNonConst): 81(ptr) Variable Function + 89(twoNonConst): 88(ptr) Variable Function + Store 17(test1) 21 + Store 22(test2) 26 + Store 28(test4) 29 + Store 32(test5) 36 + Store 37(n) 38 + 47: 8(float) Load 37(n) + 48: 8(float) FAdd 47 18 + Store 37(n) 48 + 49: 39(fvec3) VectorTimesScalar 46 48 + 52: 8(float) Load 37(n) + 53: 8(float) FAdd 52 18 + Store 37(n) 53 + 54: 39(fvec3) VectorTimesScalar 51 53 + 56: 8(float) Load 37(n) + 57: 8(float) FAdd 56 18 + Store 37(n) 57 + 58: 39(fvec3) VectorTimesScalar 55 57 + 60: 8(float) Load 37(n) + 61: 8(float) FAdd 60 18 + Store 37(n) 61 + 62: 39(fvec3) VectorTimesScalar 59 61 + 64: 8(float) Load 37(n) + 65: 8(float) FAdd 64 18 + Store 37(n) 65 + 66: 39(fvec3) VectorTimesScalar 63 65 + 68: 8(float) Load 37(n) + 69: 8(float) FAdd 68 18 + Store 37(n) 69 + 70: 39(fvec3) VectorTimesScalar 67 69 + 72: 8(float) Load 37(n) + 73: 8(float) FAdd 72 18 + Store 37(n) 73 + 74: 39(fvec3) VectorTimesScalar 71 73 + 76: 8(float) Load 37(n) + 77: 8(float) FAdd 76 18 + Store 37(n) 77 + 78: 39(fvec3) VectorTimesScalar 75 77 + 79: 42 CompositeConstruct 49 54 58 62 66 70 74 78 + Store 44(a) 79 + 83: 8(float) Load 37(n) + 84: 8(float) FAdd 83 18 + Store 37(n) 84 + 85: 39(fvec3) VectorTimesScalar 63 84 + 86: 80(one) CompositeConstruct 85 + Store 82(oneNonConst) 86 + 90: 8(float) Load 37(n) + 91: 8(float) FAdd 90 18 + Store 37(n) 91 + 92: 39(fvec3) VectorTimesScalar 63 91 + 93: 8(float) Load 37(n) + 94: 8(float) FAdd 93 18 + Store 37(n) 94 + 95: 39(fvec3) VectorTimesScalar 63 94 + 96: 87(two) CompositeConstruct 92 95 + Store 89(twoNonConst) 96 + Return + FunctionEnd + 12(@main():10(PS_OUTPUT) Function None 11 + 13: Label + 99(ps_output): 98(ptr) Variable Function + 97: 2 FunctionCall 6(Test1() + 104: 103(ptr) AccessChain 99(ps_output) 101 + Store 104 102 + 105:10(PS_OUTPUT) Load 99(ps_output) + ReturnValue 105 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.inoutquals.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.inoutquals.frag.out new file mode 100644 index 0000000..6501703 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.inoutquals.frag.out @@ -0,0 +1,331 @@ +hlsl.inoutquals.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:8 Function Definition: MyFunc(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:? Sequence +0:9 move second child to first child ( temp float) +0:9 'y' ( out float) +0:9 'x' ( in float) +0:10 move second child to first child ( temp float) +0:10 'z' ( inout float) +0:10 'y' ( out float) +0:11 move second child to first child ( temp float) +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:? 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: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 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:? Sequence +0:15 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:? '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:? '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:? 'inpos' ( noperspective in 4-component vector of float FragCoord) +0:? 'sampleMask' ( out int SampleMaskIn) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:8 Function Definition: MyFunc(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:? Sequence +0:9 move second child to first child ( temp float) +0:9 'y' ( out float) +0:9 'x' ( in float) +0:10 move second child to first child ( temp float) +0:10 'z' ( inout float) +0:10 'y' ( out float) +0:11 move second child to first child ( temp float) +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:? 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: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 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:? Sequence +0:15 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:? '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:? '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:? '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 + + Capability Shader + Capability SampleRateShading + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 60 70 74 78 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 12 "MyFunc(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 + 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 + 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 + Return + FunctionEnd +12(MyFunc(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 + 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 + 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 new file mode 100644 index 0000000..c82ee0f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.barriers.comp.out @@ -0,0 +1,95 @@ +hlsl.intrinsics.barriers.comp +Shader version: 450 +local_size = (1, 1, 1) +0:? Sequence +0:3 Function Definition: @ComputeShaderFunction( ( temp float) +0:3 Function Parameters: +0:? Sequence +0:4 MemoryBarrier ( temp void) +0:5 AllMemoryBarrierWithGroupSync ( temp void) +0:6 GroupMemoryBarrier ( temp void) +0:7 GroupMemoryBarrierWithGroupSync ( temp void) +0:8 WorkgroupMemoryBarrier ( temp void) +0:9 WorkgroupMemoryBarrierWithGroupSync ( temp void) +0:11 Branch: Return with expression +0:11 Constant: +0:11 0.000000 +0:3 Function Definition: ComputeShaderFunction( ( temp void) +0:3 Function Parameters: +0:? Sequence +0:3 move second child to first child ( temp float) +0:? '@entryPointOutput' (layout( location=0) out float) +0:3 Function Call: @ComputeShaderFunction( ( temp float) +0:? Linker Objects +0:? '@entryPointOutput' (layout( location=0) out float) + + +Linked compute stage: + + +Shader version: 450 +local_size = (1, 1, 1) +0:? Sequence +0:3 Function Definition: @ComputeShaderFunction( ( temp float) +0:3 Function Parameters: +0:? Sequence +0:4 MemoryBarrier ( temp void) +0:5 AllMemoryBarrierWithGroupSync ( temp void) +0:6 GroupMemoryBarrier ( temp void) +0:7 GroupMemoryBarrierWithGroupSync ( temp void) +0:8 WorkgroupMemoryBarrier ( temp void) +0:9 WorkgroupMemoryBarrierWithGroupSync ( temp void) +0:11 Branch: Return with expression +0:11 Constant: +0:11 0.000000 +0:3 Function Definition: ComputeShaderFunction( ( temp void) +0:3 Function Parameters: +0:? Sequence +0:3 move second child to first child ( temp float) +0:? '@entryPointOutput' (layout( location=0) out float) +0:3 Function Call: @ComputeShaderFunction( ( temp float) +0:? Linker Objects +0:? '@entryPointOutput' (layout( location=0) out float) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 22 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "ComputeShaderFunction" 20 + ExecutionMode 4 LocalSize 1 1 1 + Name 4 "ComputeShaderFunction" + Name 8 "@ComputeShaderFunction(" + Name 20 "@entryPointOutput" + Decorate 20(@entryPointOutput) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeFunction 6(float) + 10: TypeInt 32 0 + 11: 10(int) Constant 1 + 12: 10(int) Constant 4048 + 13: 10(int) Constant 512 + 14: 10(int) Constant 2 + 15: 10(int) Constant 256 + 16: 6(float) Constant 0 + 19: TypePointer Output 6(float) +20(@entryPointOutput): 19(ptr) Variable Output +4(ComputeShaderFunction): 2 Function None 3 + 5: Label + 21: 6(float) FunctionCall 8(@ComputeShaderFunction() + Store 20(@entryPointOutput) 21 + Return + FunctionEnd +8(@ComputeShaderFunction(): 6(float) Function None 7 + 9: Label + MemoryBarrier 11 12 + ControlBarrier 11 11 12 + MemoryBarrier 11 13 + ControlBarrier 11 11 13 + MemoryBarrier 14 15 + ControlBarrier 14 14 15 + ReturnValue 16 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.comp.out new file mode 100644 index 0000000..c4f7ac8 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.comp.out @@ -0,0 +1,1083 @@ +hlsl.intrinsics.comp +Shader version: 450 +local_size = (1, 1, 1) +0:? Sequence +0:17 Function Definition: ComputeShaderFunctionS(f1;f1;f1;u1;u1; ( temp float) +0:17 Function Parameters: +0:17 'inF0' ( in float) +0:17 'inF1' ( in float) +0:17 'inF2' ( in float) +0:17 'inU0' ( in uint) +0:17 'inU1' ( in uint) +0:? Sequence +0:21 all ( temp bool) +0:21 'inF0' ( in float) +0:24 AtomicAdd ( temp void) +0:24 'gs_ua' ( shared uint) +0:24 'gs_ub' ( shared uint) +0:25 move second child to first child ( temp uint) +0:25 'out_u1' ( temp uint) +0:25 AtomicAdd ( temp uint) +0:25 'gs_ua' ( shared uint) +0:25 'gs_ub' ( shared uint) +0:26 AtomicAnd ( temp void) +0:26 'gs_ua' ( shared uint) +0:26 'gs_ub' ( shared uint) +0:27 move second child to first child ( temp uint) +0:27 'out_u1' ( temp uint) +0:27 AtomicAnd ( temp uint) +0:27 'gs_ua' ( shared uint) +0:27 'gs_ub' ( shared uint) +0:28 move second child to first child ( temp uint) +0:28 'out_u1' ( temp uint) +0:28 AtomicCompSwap ( temp uint) +0:28 'gs_ua' ( shared uint) +0:28 'gs_ub' ( shared uint) +0:28 'gs_uc' ( shared uint) +0:29 move second child to first child ( temp uint) +0:29 'out_u1' ( temp uint) +0:29 AtomicExchange ( temp uint) +0:29 'gs_ua' ( shared uint) +0:29 'gs_ub' ( shared uint) +0:30 AtomicMax ( temp void) +0:30 'gs_ua' ( shared uint) +0:30 'gs_ub' ( shared uint) +0:31 move second child to first child ( temp uint) +0:31 'out_u1' ( temp uint) +0:31 AtomicMax ( temp uint) +0:31 'gs_ua' ( shared uint) +0:31 'gs_ub' ( shared uint) +0:32 AtomicMin ( temp void) +0:32 'gs_ua' ( shared uint) +0:32 'gs_ub' ( shared uint) +0:33 move second child to first child ( temp uint) +0:33 'out_u1' ( temp uint) +0:33 AtomicMin ( temp uint) +0:33 'gs_ua' ( shared uint) +0:33 'gs_ub' ( shared uint) +0:34 AtomicOr ( temp void) +0:34 'gs_ua' ( shared uint) +0:34 'gs_ub' ( shared uint) +0:35 move second child to first child ( temp uint) +0:35 'out_u1' ( temp uint) +0:35 AtomicOr ( temp uint) +0:35 'gs_ua' ( shared uint) +0:35 'gs_ub' ( shared uint) +0:36 AtomicXor ( temp void) +0:36 'gs_ua' ( shared uint) +0:36 'gs_ub' ( shared uint) +0:37 move second child to first child ( temp uint) +0:37 'out_u1' ( temp uint) +0:37 AtomicXor ( temp uint) +0:37 'gs_ua' ( shared uint) +0:37 'gs_ub' ( shared uint) +0:41 Branch: Return with expression +0:41 Constant: +0:41 0.000000 +0:45 Function Definition: ComputeShaderFunction1(vf1;vf1;vf1; ( temp 1-component vector of float) +0:45 Function Parameters: +0:45 'inF0' ( in 1-component vector of float) +0:45 'inF1' ( in 1-component vector of float) +0:45 'inF2' ( in 1-component vector of float) +0:? Sequence +0:47 Branch: Return with expression +0:47 Constant: +0:47 0.000000 +0:51 Function Definition: ComputeShaderFunction2(vf2;vf2;vf2;vu2;vu2; ( temp 2-component vector of float) +0:51 Function Parameters: +0:51 'inF0' ( in 2-component vector of float) +0:51 'inF1' ( in 2-component vector of float) +0:51 'inF2' ( in 2-component vector of float) +0:51 'inU0' ( in 2-component vector of uint) +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:58 AtomicAdd ( temp void) +0:58 'gs_ua2' ( shared 2-component vector of uint) +0:58 'gs_ub2' ( shared 2-component vector of uint) +0:59 move second child to first child ( temp 2-component vector of uint) +0:59 'out_u2' ( temp 2-component vector of uint) +0:59 AtomicAdd ( temp 2-component vector of uint) +0:59 'gs_ua2' ( shared 2-component vector of uint) +0:59 'gs_ub2' ( shared 2-component vector of uint) +0:60 AtomicAnd ( temp void) +0:60 'gs_ua2' ( shared 2-component vector of uint) +0:60 'gs_ub2' ( shared 2-component vector of uint) +0:61 move second child to first child ( temp 2-component vector of uint) +0:61 'out_u2' ( temp 2-component vector of uint) +0:61 AtomicAnd ( temp 2-component vector of uint) +0:61 'gs_ua2' ( shared 2-component vector of uint) +0:61 'gs_ub2' ( shared 2-component vector of uint) +0:62 move second child to first child ( temp 2-component vector of uint) +0:62 'out_u2' ( temp 2-component vector of uint) +0:62 AtomicCompSwap ( temp 2-component vector of uint) +0:62 'gs_ua2' ( shared 2-component vector of uint) +0:62 'gs_ub2' ( shared 2-component vector of uint) +0:62 'gs_uc2' ( shared 2-component vector of uint) +0:63 move second child to first child ( temp 2-component vector of uint) +0:63 'out_u2' ( temp 2-component vector of uint) +0:63 AtomicExchange ( temp 2-component vector of uint) +0:63 'gs_ua2' ( shared 2-component vector of uint) +0:63 'gs_ub2' ( shared 2-component vector of uint) +0:64 AtomicMax ( temp void) +0:64 'gs_ua2' ( shared 2-component vector of uint) +0:64 'gs_ub2' ( shared 2-component vector of uint) +0:65 move second child to first child ( temp 2-component vector of uint) +0:65 'out_u2' ( temp 2-component vector of uint) +0:65 AtomicMax ( temp 2-component vector of uint) +0:65 'gs_ua2' ( shared 2-component vector of uint) +0:65 'gs_ub2' ( shared 2-component vector of uint) +0:66 AtomicMin ( temp void) +0:66 'gs_ua2' ( shared 2-component vector of uint) +0:66 'gs_ub2' ( shared 2-component vector of uint) +0:67 move second child to first child ( temp 2-component vector of uint) +0:67 'out_u2' ( temp 2-component vector of uint) +0:67 AtomicMin ( temp 2-component vector of uint) +0:67 'gs_ua2' ( shared 2-component vector of uint) +0:67 'gs_ub2' ( shared 2-component vector of uint) +0:68 AtomicOr ( temp void) +0:68 'gs_ua2' ( shared 2-component vector of uint) +0:68 'gs_ub2' ( shared 2-component vector of uint) +0:69 move second child to first child ( temp 2-component vector of uint) +0:69 'out_u2' ( temp 2-component vector of uint) +0:69 AtomicOr ( temp 2-component vector of uint) +0:69 'gs_ua2' ( shared 2-component vector of uint) +0:69 'gs_ub2' ( shared 2-component vector of uint) +0:70 AtomicXor ( temp void) +0:70 'gs_ua2' ( shared 2-component vector of uint) +0:70 'gs_ub2' ( shared 2-component vector of uint) +0:71 move second child to first child ( temp 2-component vector of uint) +0:71 'out_u2' ( temp 2-component vector of uint) +0:71 AtomicXor ( temp 2-component vector of uint) +0:71 'gs_ua2' ( shared 2-component vector of uint) +0:71 'gs_ub2' ( shared 2-component vector of uint) +0:74 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:78 Function Definition: ComputeShaderFunction3(vf3;vf3;vf3;vu3;vu3; ( temp 3-component vector of float) +0:78 Function Parameters: +0:78 'inF0' ( in 3-component vector of float) +0:78 'inF1' ( in 3-component vector of float) +0:78 'inF2' ( in 3-component vector of float) +0:78 'inU0' ( in 3-component vector of uint) +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:85 AtomicAdd ( temp void) +0:85 'gs_ua3' ( shared 3-component vector of uint) +0:85 'gs_ub3' ( shared 3-component vector of uint) +0:86 move second child to first child ( temp 3-component vector of uint) +0:86 'out_u3' ( temp 3-component vector of uint) +0:86 AtomicAdd ( temp 3-component vector of uint) +0:86 'gs_ua3' ( shared 3-component vector of uint) +0:86 'gs_ub3' ( shared 3-component vector of uint) +0:87 AtomicAnd ( temp void) +0:87 'gs_ua3' ( shared 3-component vector of uint) +0:87 'gs_ub3' ( shared 3-component vector of uint) +0:88 move second child to first child ( temp 3-component vector of uint) +0:88 'out_u3' ( temp 3-component vector of uint) +0:88 AtomicAnd ( temp 3-component vector of uint) +0:88 'gs_ua3' ( shared 3-component vector of uint) +0:88 'gs_ub3' ( shared 3-component vector of uint) +0:89 move second child to first child ( temp 3-component vector of uint) +0:89 'out_u3' ( temp 3-component vector of uint) +0:89 AtomicCompSwap ( temp 3-component vector of uint) +0:89 'gs_ua3' ( shared 3-component vector of uint) +0:89 'gs_ub3' ( shared 3-component vector of uint) +0:89 'gs_uc3' ( shared 3-component vector of uint) +0:90 move second child to first child ( temp 3-component vector of uint) +0:90 'out_u3' ( temp 3-component vector of uint) +0:90 AtomicExchange ( temp 3-component vector of uint) +0:90 'gs_ua3' ( shared 3-component vector of uint) +0:90 'gs_ub3' ( shared 3-component vector of uint) +0:91 AtomicMax ( temp void) +0:91 'gs_ua3' ( shared 3-component vector of uint) +0:91 'gs_ub3' ( shared 3-component vector of uint) +0:92 move second child to first child ( temp 3-component vector of uint) +0:92 'out_u3' ( temp 3-component vector of uint) +0:92 AtomicMax ( temp 3-component vector of uint) +0:92 'gs_ua3' ( shared 3-component vector of uint) +0:92 'gs_ub3' ( shared 3-component vector of uint) +0:93 AtomicMin ( temp void) +0:93 'gs_ua3' ( shared 3-component vector of uint) +0:93 'gs_ub3' ( shared 3-component vector of uint) +0:94 move second child to first child ( temp 3-component vector of uint) +0:94 'out_u3' ( temp 3-component vector of uint) +0:94 AtomicMin ( temp 3-component vector of uint) +0:94 'gs_ua3' ( shared 3-component vector of uint) +0:94 'gs_ub3' ( shared 3-component vector of uint) +0:95 AtomicOr ( temp void) +0:95 'gs_ua3' ( shared 3-component vector of uint) +0:95 'gs_ub3' ( shared 3-component vector of uint) +0:96 move second child to first child ( temp 3-component vector of uint) +0:96 'out_u3' ( temp 3-component vector of uint) +0:96 AtomicOr ( temp 3-component vector of uint) +0:96 'gs_ua3' ( shared 3-component vector of uint) +0:96 'gs_ub3' ( shared 3-component vector of uint) +0:97 AtomicXor ( temp void) +0:97 'gs_ua3' ( shared 3-component vector of uint) +0:97 'gs_ub3' ( shared 3-component vector of uint) +0:98 move second child to first child ( temp 3-component vector of uint) +0:98 'out_u3' ( temp 3-component vector of uint) +0:98 AtomicXor ( temp 3-component vector of uint) +0:98 'gs_ua3' ( shared 3-component vector of uint) +0:98 'gs_ub3' ( shared 3-component vector of uint) +0:101 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:105 Function Definition: @ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4; ( temp 4-component vector of float) +0:105 Function Parameters: +0:105 'inF0' ( in 4-component vector of float) +0:105 'inF1' ( in 4-component vector of float) +0:105 'inF2' ( in 4-component vector of float) +0:105 'inU0' ( in 4-component vector of uint) +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:112 AtomicAdd ( temp void) +0:112 'gs_ua4' ( shared 4-component vector of uint) +0:112 'gs_ub4' ( shared 4-component vector of uint) +0:113 move second child to first child ( temp 4-component vector of uint) +0:113 'out_u4' ( temp 4-component vector of uint) +0:113 AtomicAdd ( temp 4-component vector of uint) +0:113 'gs_ua4' ( shared 4-component vector of uint) +0:113 'gs_ub4' ( shared 4-component vector of uint) +0:114 AtomicAnd ( temp void) +0:114 'gs_ua4' ( shared 4-component vector of uint) +0:114 'gs_ub4' ( shared 4-component vector of uint) +0:115 move second child to first child ( temp 4-component vector of uint) +0:115 'out_u4' ( temp 4-component vector of uint) +0:115 AtomicAnd ( temp 4-component vector of uint) +0:115 'gs_ua4' ( shared 4-component vector of uint) +0:115 'gs_ub4' ( shared 4-component vector of uint) +0:116 move second child to first child ( temp 4-component vector of uint) +0:116 'out_u4' ( temp 4-component vector of uint) +0:116 AtomicCompSwap ( temp 4-component vector of uint) +0:116 'gs_ua4' ( shared 4-component vector of uint) +0:116 'gs_ub4' ( shared 4-component vector of uint) +0:116 'gs_uc4' ( shared 4-component vector of uint) +0:117 move second child to first child ( temp 4-component vector of uint) +0:117 'out_u4' ( temp 4-component vector of uint) +0:117 AtomicExchange ( temp 4-component vector of uint) +0:117 'gs_ua4' ( shared 4-component vector of uint) +0:117 'gs_ub4' ( shared 4-component vector of uint) +0:118 AtomicMax ( temp void) +0:118 'gs_ua4' ( shared 4-component vector of uint) +0:118 'gs_ub4' ( shared 4-component vector of uint) +0:119 move second child to first child ( temp 4-component vector of uint) +0:119 'out_u4' ( temp 4-component vector of uint) +0:119 AtomicMax ( temp 4-component vector of uint) +0:119 'gs_ua4' ( shared 4-component vector of uint) +0:119 'gs_ub4' ( shared 4-component vector of uint) +0:120 AtomicMin ( temp void) +0:120 'gs_ua4' ( shared 4-component vector of uint) +0:120 'gs_ub4' ( shared 4-component vector of uint) +0:121 move second child to first child ( temp 4-component vector of uint) +0:121 'out_u4' ( temp 4-component vector of uint) +0:121 AtomicMin ( temp 4-component vector of uint) +0:121 'gs_ua4' ( shared 4-component vector of uint) +0:121 'gs_ub4' ( shared 4-component vector of uint) +0:122 AtomicOr ( temp void) +0:122 'gs_ua4' ( shared 4-component vector of uint) +0:122 'gs_ub4' ( shared 4-component vector of uint) +0:123 move second child to first child ( temp 4-component vector of uint) +0:123 'out_u4' ( temp 4-component vector of uint) +0:123 AtomicOr ( temp 4-component vector of uint) +0:123 'gs_ua4' ( shared 4-component vector of uint) +0:123 'gs_ub4' ( shared 4-component vector of uint) +0:124 AtomicXor ( temp void) +0:124 'gs_ua4' ( shared 4-component vector of uint) +0:124 'gs_ub4' ( shared 4-component vector of uint) +0:125 move second child to first child ( temp 4-component vector of uint) +0:125 'out_u4' ( temp 4-component vector of uint) +0:125 AtomicXor ( temp 4-component vector of uint) +0:125 'gs_ua4' ( shared 4-component vector of uint) +0:125 'gs_ub4' ( shared 4-component vector of uint) +0:128 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:105 Function Definition: ComputeShaderFunction( ( temp void) +0:105 Function Parameters: +0:? Sequence +0:105 move second child to first child ( temp 4-component vector of float) +0:? 'inF0' ( temp 4-component vector of float) +0:? 'inF0' (layout( location=0) in 4-component vector of float) +0:105 move second child to first child ( temp 4-component vector of float) +0:? 'inF1' ( temp 4-component vector of float) +0:? 'inF1' (layout( location=1) in 4-component vector of float) +0:105 move second child to first child ( temp 4-component vector of float) +0:? 'inF2' ( temp 4-component vector of float) +0:? 'inF2' (layout( location=2) in 4-component vector of float) +0:105 move second child to first child ( temp 4-component vector of uint) +0:? 'inU0' ( temp 4-component vector of uint) +0:? 'inU0' (layout( location=3) in 4-component vector of uint) +0:105 move second child to first child ( temp 4-component vector of uint) +0:? 'inU1' ( temp 4-component vector of uint) +0:? 'inU1' (layout( location=4) in 4-component vector of uint) +0:105 move second child to first child ( temp 4-component vector of float) +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) +0:105 Function Call: @ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4; ( temp 4-component vector of float) +0:? 'inF0' ( temp 4-component vector of float) +0:? 'inF1' ( temp 4-component vector of float) +0:? 'inF2' ( temp 4-component vector of float) +0:? 'inU0' ( temp 4-component vector of uint) +0:? 'inU1' ( temp 4-component vector of uint) +0:? Linker Objects +0:? 'gs_ua' ( shared uint) +0:? 'gs_ub' ( shared uint) +0:? 'gs_uc' ( shared uint) +0:? 'gs_ua2' ( shared 2-component vector of uint) +0:? 'gs_ub2' ( shared 2-component vector of uint) +0:? 'gs_uc2' ( shared 2-component vector of uint) +0:? 'gs_ua3' ( shared 3-component vector of uint) +0:? 'gs_ub3' ( shared 3-component vector of uint) +0:? 'gs_uc3' ( shared 3-component vector of uint) +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:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) +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:? 'inU0' (layout( location=3) in 4-component vector of uint) +0:? 'inU1' (layout( location=4) in 4-component vector of uint) + + +Linked compute stage: + + +Shader version: 450 +local_size = (1, 1, 1) +0:? Sequence +0:17 Function Definition: ComputeShaderFunctionS(f1;f1;f1;u1;u1; ( temp float) +0:17 Function Parameters: +0:17 'inF0' ( in float) +0:17 'inF1' ( in float) +0:17 'inF2' ( in float) +0:17 'inU0' ( in uint) +0:17 'inU1' ( in uint) +0:? Sequence +0:21 all ( temp bool) +0:21 'inF0' ( in float) +0:24 AtomicAdd ( temp void) +0:24 'gs_ua' ( shared uint) +0:24 'gs_ub' ( shared uint) +0:25 move second child to first child ( temp uint) +0:25 'out_u1' ( temp uint) +0:25 AtomicAdd ( temp uint) +0:25 'gs_ua' ( shared uint) +0:25 'gs_ub' ( shared uint) +0:26 AtomicAnd ( temp void) +0:26 'gs_ua' ( shared uint) +0:26 'gs_ub' ( shared uint) +0:27 move second child to first child ( temp uint) +0:27 'out_u1' ( temp uint) +0:27 AtomicAnd ( temp uint) +0:27 'gs_ua' ( shared uint) +0:27 'gs_ub' ( shared uint) +0:28 move second child to first child ( temp uint) +0:28 'out_u1' ( temp uint) +0:28 AtomicCompSwap ( temp uint) +0:28 'gs_ua' ( shared uint) +0:28 'gs_ub' ( shared uint) +0:28 'gs_uc' ( shared uint) +0:29 move second child to first child ( temp uint) +0:29 'out_u1' ( temp uint) +0:29 AtomicExchange ( temp uint) +0:29 'gs_ua' ( shared uint) +0:29 'gs_ub' ( shared uint) +0:30 AtomicMax ( temp void) +0:30 'gs_ua' ( shared uint) +0:30 'gs_ub' ( shared uint) +0:31 move second child to first child ( temp uint) +0:31 'out_u1' ( temp uint) +0:31 AtomicMax ( temp uint) +0:31 'gs_ua' ( shared uint) +0:31 'gs_ub' ( shared uint) +0:32 AtomicMin ( temp void) +0:32 'gs_ua' ( shared uint) +0:32 'gs_ub' ( shared uint) +0:33 move second child to first child ( temp uint) +0:33 'out_u1' ( temp uint) +0:33 AtomicMin ( temp uint) +0:33 'gs_ua' ( shared uint) +0:33 'gs_ub' ( shared uint) +0:34 AtomicOr ( temp void) +0:34 'gs_ua' ( shared uint) +0:34 'gs_ub' ( shared uint) +0:35 move second child to first child ( temp uint) +0:35 'out_u1' ( temp uint) +0:35 AtomicOr ( temp uint) +0:35 'gs_ua' ( shared uint) +0:35 'gs_ub' ( shared uint) +0:36 AtomicXor ( temp void) +0:36 'gs_ua' ( shared uint) +0:36 'gs_ub' ( shared uint) +0:37 move second child to first child ( temp uint) +0:37 'out_u1' ( temp uint) +0:37 AtomicXor ( temp uint) +0:37 'gs_ua' ( shared uint) +0:37 'gs_ub' ( shared uint) +0:41 Branch: Return with expression +0:41 Constant: +0:41 0.000000 +0:45 Function Definition: ComputeShaderFunction1(vf1;vf1;vf1; ( temp 1-component vector of float) +0:45 Function Parameters: +0:45 'inF0' ( in 1-component vector of float) +0:45 'inF1' ( in 1-component vector of float) +0:45 'inF2' ( in 1-component vector of float) +0:? Sequence +0:47 Branch: Return with expression +0:47 Constant: +0:47 0.000000 +0:51 Function Definition: ComputeShaderFunction2(vf2;vf2;vf2;vu2;vu2; ( temp 2-component vector of float) +0:51 Function Parameters: +0:51 'inF0' ( in 2-component vector of float) +0:51 'inF1' ( in 2-component vector of float) +0:51 'inF2' ( in 2-component vector of float) +0:51 'inU0' ( in 2-component vector of uint) +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:58 AtomicAdd ( temp void) +0:58 'gs_ua2' ( shared 2-component vector of uint) +0:58 'gs_ub2' ( shared 2-component vector of uint) +0:59 move second child to first child ( temp 2-component vector of uint) +0:59 'out_u2' ( temp 2-component vector of uint) +0:59 AtomicAdd ( temp 2-component vector of uint) +0:59 'gs_ua2' ( shared 2-component vector of uint) +0:59 'gs_ub2' ( shared 2-component vector of uint) +0:60 AtomicAnd ( temp void) +0:60 'gs_ua2' ( shared 2-component vector of uint) +0:60 'gs_ub2' ( shared 2-component vector of uint) +0:61 move second child to first child ( temp 2-component vector of uint) +0:61 'out_u2' ( temp 2-component vector of uint) +0:61 AtomicAnd ( temp 2-component vector of uint) +0:61 'gs_ua2' ( shared 2-component vector of uint) +0:61 'gs_ub2' ( shared 2-component vector of uint) +0:62 move second child to first child ( temp 2-component vector of uint) +0:62 'out_u2' ( temp 2-component vector of uint) +0:62 AtomicCompSwap ( temp 2-component vector of uint) +0:62 'gs_ua2' ( shared 2-component vector of uint) +0:62 'gs_ub2' ( shared 2-component vector of uint) +0:62 'gs_uc2' ( shared 2-component vector of uint) +0:63 move second child to first child ( temp 2-component vector of uint) +0:63 'out_u2' ( temp 2-component vector of uint) +0:63 AtomicExchange ( temp 2-component vector of uint) +0:63 'gs_ua2' ( shared 2-component vector of uint) +0:63 'gs_ub2' ( shared 2-component vector of uint) +0:64 AtomicMax ( temp void) +0:64 'gs_ua2' ( shared 2-component vector of uint) +0:64 'gs_ub2' ( shared 2-component vector of uint) +0:65 move second child to first child ( temp 2-component vector of uint) +0:65 'out_u2' ( temp 2-component vector of uint) +0:65 AtomicMax ( temp 2-component vector of uint) +0:65 'gs_ua2' ( shared 2-component vector of uint) +0:65 'gs_ub2' ( shared 2-component vector of uint) +0:66 AtomicMin ( temp void) +0:66 'gs_ua2' ( shared 2-component vector of uint) +0:66 'gs_ub2' ( shared 2-component vector of uint) +0:67 move second child to first child ( temp 2-component vector of uint) +0:67 'out_u2' ( temp 2-component vector of uint) +0:67 AtomicMin ( temp 2-component vector of uint) +0:67 'gs_ua2' ( shared 2-component vector of uint) +0:67 'gs_ub2' ( shared 2-component vector of uint) +0:68 AtomicOr ( temp void) +0:68 'gs_ua2' ( shared 2-component vector of uint) +0:68 'gs_ub2' ( shared 2-component vector of uint) +0:69 move second child to first child ( temp 2-component vector of uint) +0:69 'out_u2' ( temp 2-component vector of uint) +0:69 AtomicOr ( temp 2-component vector of uint) +0:69 'gs_ua2' ( shared 2-component vector of uint) +0:69 'gs_ub2' ( shared 2-component vector of uint) +0:70 AtomicXor ( temp void) +0:70 'gs_ua2' ( shared 2-component vector of uint) +0:70 'gs_ub2' ( shared 2-component vector of uint) +0:71 move second child to first child ( temp 2-component vector of uint) +0:71 'out_u2' ( temp 2-component vector of uint) +0:71 AtomicXor ( temp 2-component vector of uint) +0:71 'gs_ua2' ( shared 2-component vector of uint) +0:71 'gs_ub2' ( shared 2-component vector of uint) +0:74 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:78 Function Definition: ComputeShaderFunction3(vf3;vf3;vf3;vu3;vu3; ( temp 3-component vector of float) +0:78 Function Parameters: +0:78 'inF0' ( in 3-component vector of float) +0:78 'inF1' ( in 3-component vector of float) +0:78 'inF2' ( in 3-component vector of float) +0:78 'inU0' ( in 3-component vector of uint) +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:85 AtomicAdd ( temp void) +0:85 'gs_ua3' ( shared 3-component vector of uint) +0:85 'gs_ub3' ( shared 3-component vector of uint) +0:86 move second child to first child ( temp 3-component vector of uint) +0:86 'out_u3' ( temp 3-component vector of uint) +0:86 AtomicAdd ( temp 3-component vector of uint) +0:86 'gs_ua3' ( shared 3-component vector of uint) +0:86 'gs_ub3' ( shared 3-component vector of uint) +0:87 AtomicAnd ( temp void) +0:87 'gs_ua3' ( shared 3-component vector of uint) +0:87 'gs_ub3' ( shared 3-component vector of uint) +0:88 move second child to first child ( temp 3-component vector of uint) +0:88 'out_u3' ( temp 3-component vector of uint) +0:88 AtomicAnd ( temp 3-component vector of uint) +0:88 'gs_ua3' ( shared 3-component vector of uint) +0:88 'gs_ub3' ( shared 3-component vector of uint) +0:89 move second child to first child ( temp 3-component vector of uint) +0:89 'out_u3' ( temp 3-component vector of uint) +0:89 AtomicCompSwap ( temp 3-component vector of uint) +0:89 'gs_ua3' ( shared 3-component vector of uint) +0:89 'gs_ub3' ( shared 3-component vector of uint) +0:89 'gs_uc3' ( shared 3-component vector of uint) +0:90 move second child to first child ( temp 3-component vector of uint) +0:90 'out_u3' ( temp 3-component vector of uint) +0:90 AtomicExchange ( temp 3-component vector of uint) +0:90 'gs_ua3' ( shared 3-component vector of uint) +0:90 'gs_ub3' ( shared 3-component vector of uint) +0:91 AtomicMax ( temp void) +0:91 'gs_ua3' ( shared 3-component vector of uint) +0:91 'gs_ub3' ( shared 3-component vector of uint) +0:92 move second child to first child ( temp 3-component vector of uint) +0:92 'out_u3' ( temp 3-component vector of uint) +0:92 AtomicMax ( temp 3-component vector of uint) +0:92 'gs_ua3' ( shared 3-component vector of uint) +0:92 'gs_ub3' ( shared 3-component vector of uint) +0:93 AtomicMin ( temp void) +0:93 'gs_ua3' ( shared 3-component vector of uint) +0:93 'gs_ub3' ( shared 3-component vector of uint) +0:94 move second child to first child ( temp 3-component vector of uint) +0:94 'out_u3' ( temp 3-component vector of uint) +0:94 AtomicMin ( temp 3-component vector of uint) +0:94 'gs_ua3' ( shared 3-component vector of uint) +0:94 'gs_ub3' ( shared 3-component vector of uint) +0:95 AtomicOr ( temp void) +0:95 'gs_ua3' ( shared 3-component vector of uint) +0:95 'gs_ub3' ( shared 3-component vector of uint) +0:96 move second child to first child ( temp 3-component vector of uint) +0:96 'out_u3' ( temp 3-component vector of uint) +0:96 AtomicOr ( temp 3-component vector of uint) +0:96 'gs_ua3' ( shared 3-component vector of uint) +0:96 'gs_ub3' ( shared 3-component vector of uint) +0:97 AtomicXor ( temp void) +0:97 'gs_ua3' ( shared 3-component vector of uint) +0:97 'gs_ub3' ( shared 3-component vector of uint) +0:98 move second child to first child ( temp 3-component vector of uint) +0:98 'out_u3' ( temp 3-component vector of uint) +0:98 AtomicXor ( temp 3-component vector of uint) +0:98 'gs_ua3' ( shared 3-component vector of uint) +0:98 'gs_ub3' ( shared 3-component vector of uint) +0:101 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:105 Function Definition: @ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4; ( temp 4-component vector of float) +0:105 Function Parameters: +0:105 'inF0' ( in 4-component vector of float) +0:105 'inF1' ( in 4-component vector of float) +0:105 'inF2' ( in 4-component vector of float) +0:105 'inU0' ( in 4-component vector of uint) +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:112 AtomicAdd ( temp void) +0:112 'gs_ua4' ( shared 4-component vector of uint) +0:112 'gs_ub4' ( shared 4-component vector of uint) +0:113 move second child to first child ( temp 4-component vector of uint) +0:113 'out_u4' ( temp 4-component vector of uint) +0:113 AtomicAdd ( temp 4-component vector of uint) +0:113 'gs_ua4' ( shared 4-component vector of uint) +0:113 'gs_ub4' ( shared 4-component vector of uint) +0:114 AtomicAnd ( temp void) +0:114 'gs_ua4' ( shared 4-component vector of uint) +0:114 'gs_ub4' ( shared 4-component vector of uint) +0:115 move second child to first child ( temp 4-component vector of uint) +0:115 'out_u4' ( temp 4-component vector of uint) +0:115 AtomicAnd ( temp 4-component vector of uint) +0:115 'gs_ua4' ( shared 4-component vector of uint) +0:115 'gs_ub4' ( shared 4-component vector of uint) +0:116 move second child to first child ( temp 4-component vector of uint) +0:116 'out_u4' ( temp 4-component vector of uint) +0:116 AtomicCompSwap ( temp 4-component vector of uint) +0:116 'gs_ua4' ( shared 4-component vector of uint) +0:116 'gs_ub4' ( shared 4-component vector of uint) +0:116 'gs_uc4' ( shared 4-component vector of uint) +0:117 move second child to first child ( temp 4-component vector of uint) +0:117 'out_u4' ( temp 4-component vector of uint) +0:117 AtomicExchange ( temp 4-component vector of uint) +0:117 'gs_ua4' ( shared 4-component vector of uint) +0:117 'gs_ub4' ( shared 4-component vector of uint) +0:118 AtomicMax ( temp void) +0:118 'gs_ua4' ( shared 4-component vector of uint) +0:118 'gs_ub4' ( shared 4-component vector of uint) +0:119 move second child to first child ( temp 4-component vector of uint) +0:119 'out_u4' ( temp 4-component vector of uint) +0:119 AtomicMax ( temp 4-component vector of uint) +0:119 'gs_ua4' ( shared 4-component vector of uint) +0:119 'gs_ub4' ( shared 4-component vector of uint) +0:120 AtomicMin ( temp void) +0:120 'gs_ua4' ( shared 4-component vector of uint) +0:120 'gs_ub4' ( shared 4-component vector of uint) +0:121 move second child to first child ( temp 4-component vector of uint) +0:121 'out_u4' ( temp 4-component vector of uint) +0:121 AtomicMin ( temp 4-component vector of uint) +0:121 'gs_ua4' ( shared 4-component vector of uint) +0:121 'gs_ub4' ( shared 4-component vector of uint) +0:122 AtomicOr ( temp void) +0:122 'gs_ua4' ( shared 4-component vector of uint) +0:122 'gs_ub4' ( shared 4-component vector of uint) +0:123 move second child to first child ( temp 4-component vector of uint) +0:123 'out_u4' ( temp 4-component vector of uint) +0:123 AtomicOr ( temp 4-component vector of uint) +0:123 'gs_ua4' ( shared 4-component vector of uint) +0:123 'gs_ub4' ( shared 4-component vector of uint) +0:124 AtomicXor ( temp void) +0:124 'gs_ua4' ( shared 4-component vector of uint) +0:124 'gs_ub4' ( shared 4-component vector of uint) +0:125 move second child to first child ( temp 4-component vector of uint) +0:125 'out_u4' ( temp 4-component vector of uint) +0:125 AtomicXor ( temp 4-component vector of uint) +0:125 'gs_ua4' ( shared 4-component vector of uint) +0:125 'gs_ub4' ( shared 4-component vector of uint) +0:128 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:105 Function Definition: ComputeShaderFunction( ( temp void) +0:105 Function Parameters: +0:? Sequence +0:105 move second child to first child ( temp 4-component vector of float) +0:? 'inF0' ( temp 4-component vector of float) +0:? 'inF0' (layout( location=0) in 4-component vector of float) +0:105 move second child to first child ( temp 4-component vector of float) +0:? 'inF1' ( temp 4-component vector of float) +0:? 'inF1' (layout( location=1) in 4-component vector of float) +0:105 move second child to first child ( temp 4-component vector of float) +0:? 'inF2' ( temp 4-component vector of float) +0:? 'inF2' (layout( location=2) in 4-component vector of float) +0:105 move second child to first child ( temp 4-component vector of uint) +0:? 'inU0' ( temp 4-component vector of uint) +0:? 'inU0' (layout( location=3) in 4-component vector of uint) +0:105 move second child to first child ( temp 4-component vector of uint) +0:? 'inU1' ( temp 4-component vector of uint) +0:? 'inU1' (layout( location=4) in 4-component vector of uint) +0:105 move second child to first child ( temp 4-component vector of float) +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) +0:105 Function Call: @ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4; ( temp 4-component vector of float) +0:? 'inF0' ( temp 4-component vector of float) +0:? 'inF1' ( temp 4-component vector of float) +0:? 'inF2' ( temp 4-component vector of float) +0:? 'inU0' ( temp 4-component vector of uint) +0:? 'inU1' ( temp 4-component vector of uint) +0:? Linker Objects +0:? 'gs_ua' ( shared uint) +0:? 'gs_ub' ( shared uint) +0:? 'gs_uc' ( shared uint) +0:? 'gs_ua2' ( shared 2-component vector of uint) +0:? 'gs_ub2' ( shared 2-component vector of uint) +0:? 'gs_uc2' ( shared 2-component vector of uint) +0:? 'gs_ua3' ( shared 3-component vector of uint) +0:? 'gs_ub3' ( shared 3-component vector of uint) +0:? 'gs_uc3' ( shared 3-component vector of uint) +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:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) +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:? 'inU0' (layout( location=3) in 4-component vector of uint) +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 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "ComputeShaderFunction" 227 230 233 237 240 243 + ExecutionMode 4 LocalSize 1 1 1 + Name 4 "ComputeShaderFunction" + Name 16 "ComputeShaderFunctionS(f1;f1;f1;u1;u1;" + Name 11 "inF0" + Name 12 "inF1" + Name 13 "inF2" + Name 14 "inU0" + Name 15 "inU1" + Name 22 "ComputeShaderFunction1(vf1;vf1;vf1;" + Name 19 "inF0" + Name 20 "inF1" + Name 21 "inF2" + Name 34 "ComputeShaderFunction2(vf2;vf2;vf2;vu2;vu2;" + Name 29 "inF0" + Name 30 "inF1" + Name 31 "inF2" + Name 32 "inU0" + Name 33 "inU1" + Name 46 "ComputeShaderFunction3(vf3;vf3;vf3;vu3;vu3;" + Name 41 "inF0" + Name 42 "inF1" + Name 43 "inF2" + Name 44 "inU0" + Name 45 "inU1" + Name 58 "@ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4;" + Name 53 "inF0" + Name 54 "inF1" + 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 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypePointer Function 6(float) + 8: TypeInt 32 0 + 9: TypePointer Function 8(int) + 10: TypeFunction 6(float) 7(ptr) 7(ptr) 7(ptr) 9(ptr) 9(ptr) + 18: TypeFunction 6(float) 7(ptr) 7(ptr) 7(ptr) + 24: TypeVector 6(float) 2 + 25: TypePointer Function 24(fvec2) + 26: TypeVector 8(int) 2 + 27: TypePointer Function 26(ivec2) + 28: TypeFunction 24(fvec2) 25(ptr) 25(ptr) 25(ptr) 27(ptr) 27(ptr) + 36: TypeVector 6(float) 3 + 37: TypePointer Function 36(fvec3) + 38: TypeVector 8(int) 3 + 39: TypePointer Function 38(ivec3) + 40: TypeFunction 36(fvec3) 37(ptr) 37(ptr) 37(ptr) 39(ptr) 39(ptr) + 48: TypeVector 6(float) 4 + 49: TypePointer Function 48(fvec4) + 50: TypeVector 8(int) 4 + 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 +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 + Return + FunctionEnd +16(ComputeShaderFunctionS(f1;f1;f1;u1;u1;): 6(float) Function None 10 + 11(inF0): 7(ptr) FunctionParameter + 12(inF1): 7(ptr) FunctionParameter + 13(inF2): 7(ptr) FunctionParameter + 14(inU0): 9(ptr) FunctionParameter + 15(inU1): 9(ptr) FunctionParameter + 17: Label + 70(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 + 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 + FunctionEnd +34(ComputeShaderFunction2(vf2;vf2;vf2;vu2;vu2;): 24(fvec2) Function None 28 + 29(inF0): 25(ptr) FunctionParameter + 30(inF1): 25(ptr) FunctionParameter + 31(inF2): 25(ptr) FunctionParameter + 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 + FunctionEnd +46(ComputeShaderFunction3(vf3;vf3;vf3;vu3;vu3;): 36(fvec3) Function None 40 + 41(inF0): 37(ptr) FunctionParameter + 42(inF1): 37(ptr) FunctionParameter + 43(inF2): 37(ptr) FunctionParameter + 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 + FunctionEnd +58(@ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4;): 48(fvec4) Function None 52 + 53(inF0): 49(ptr) FunctionParameter + 54(inF1): 49(ptr) FunctionParameter + 55(inF2): 49(ptr) FunctionParameter + 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 + 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 new file mode 100644 index 0000000..e38e621 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.d3dcolortoubyte4.frag.out @@ -0,0 +1,124 @@ +hlsl.intrinsics.d3dcolortoubyte4.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:5 Function Definition: @main( ( temp 4-component vector of int) +0:5 Function Parameters: +0:? Sequence +0:6 Branch: Return with expression +0:6 Convert float to int ( temp 4-component vector of int) +0:6 vector-scale ( temp 4-component vector of float) +0:6 Constant: +0:6 255.001953 +0:6 vector swizzle ( temp 4-component vector of float) +0:6 col4: direct index for structure ( uniform 4-component vector of float) +0:6 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float col4}) +0:6 Constant: +0:6 0 (const uint) +0:6 Sequence +0:6 Constant: +0:6 2 (const int) +0:6 Constant: +0:6 1 (const int) +0:6 Constant: +0:6 0 (const int) +0:6 Constant: +0:6 3 (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 int) +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of int) +0:5 Function Call: @main( ( temp 4-component vector of int) +0:? Linker Objects +0:? 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float col4}) +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of int) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:5 Function Definition: @main( ( temp 4-component vector of int) +0:5 Function Parameters: +0:? Sequence +0:6 Branch: Return with expression +0:6 Convert float to int ( temp 4-component vector of int) +0:6 vector-scale ( temp 4-component vector of float) +0:6 Constant: +0:6 255.001953 +0:6 vector swizzle ( temp 4-component vector of float) +0:6 col4: direct index for structure ( uniform 4-component vector of float) +0:6 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float col4}) +0:6 Constant: +0:6 0 (const uint) +0:6 Sequence +0:6 Constant: +0:6 2 (const int) +0:6 Constant: +0:6 1 (const int) +0:6 Constant: +0:6 0 (const int) +0:6 Constant: +0:6 3 (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 int) +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of int) +0:5 Function Call: @main( ( temp 4-component vector of int) +0:? Linker Objects +0:? 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float col4}) +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of int) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 29 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 27 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 9 "@main(" + Name 14 "$Global" + MemberName 14($Global) 0 "col4" + Name 16 "" + Name 27 "@entryPointOutput" + MemberDecorate 14($Global) 0 Offset 0 + Decorate 14($Global) Block + Decorate 16 DescriptorSet 0 + Decorate 27(@entryPointOutput) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypeVector 6(int) 4 + 8: TypeFunction 7(ivec4) + 11: TypeFloat 32 + 12: 11(float) Constant 1132396672 + 13: TypeVector 11(float) 4 + 14($Global): TypeStruct 13(fvec4) + 15: TypePointer Uniform 14($Global) + 16: 15(ptr) Variable Uniform + 17: 6(int) Constant 0 + 18: TypePointer Uniform 13(fvec4) + 26: TypePointer Output 7(ivec4) +27(@entryPointOutput): 26(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 28: 7(ivec4) FunctionCall 9(@main() + Store 27(@entryPointOutput) 28 + Return + FunctionEnd + 9(@main(): 7(ivec4) Function None 8 + 10: Label + 19: 18(ptr) AccessChain 16 17 + 20: 13(fvec4) Load 19 + 21: 13(fvec4) VectorShuffle 20 20 2 1 0 3 + 22: 13(fvec4) VectorTimesScalar 21 12 + 23: 7(ivec4) ConvertFToS 22 + ReturnValue 23 + FunctionEnd 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 new file mode 100644 index 0000000..1a6524f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.double.frag.out @@ -0,0 +1,330 @@ +hlsl.intrinsics.double.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:5 Function Definition: @PixelShaderFunction(d1;d1;d1;vd2;vd3;vd4;u1;u1; ( temp float) +0:5 Function Parameters: +0:5 'inDV1a' ( in double) +0:5 'inDV1b' ( in double) +0:5 'inDV1c' ( in double) +0:5 'inDV2' ( in 2-component vector of double) +0:5 'inDV3' ( in 3-component vector of double) +0:5 'inDV4' ( in 4-component vector of double) +0:5 'inU1a' ( in uint) +0:5 'inU1b' ( in uint) +0:? Sequence +0:6 Sequence +0:6 move second child to first child ( temp double) +0:6 'r00' ( temp double) +0:6 fma ( temp double) +0:6 'inDV1a' ( in double) +0:6 'inDV1b' ( in double) +0:6 'inDV1c' ( in double) +0:7 Sequence +0:7 move second child to first child ( temp double) +0:7 'r01' ( temp double) +0:7 uint64BitsToDouble ( temp double) +0:7 Construct uvec2 ( temp 2-component vector of uint) +0:7 'inU1a' ( in uint) +0:7 'inU1b' ( in uint) +0:9 Branch: Return with expression +0:9 Constant: +0:9 0.000000 +0:5 Function Definition: PixelShaderFunction( ( temp void) +0:5 Function Parameters: +0:? Sequence +0:5 move second child to first child ( temp double) +0:? 'inDV1a' ( temp double) +0:? 'inDV1a' (layout( location=0) in double) +0:5 move second child to first child ( temp double) +0:? 'inDV1b' ( temp double) +0:? 'inDV1b' (layout( location=1) in double) +0:5 move second child to first child ( temp double) +0:? 'inDV1c' ( temp double) +0:? 'inDV1c' (layout( location=2) 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: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: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:5 move second child to first child ( temp uint) +0:? 'inU1a' ( temp uint) +0:? 'inU1a' (layout( location=8) in uint) +0:5 move second child to first child ( temp uint) +0:? 'inU1b' ( temp uint) +0:? 'inU1b' (layout( location=9) 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) +0:? 'inDV1a' ( temp double) +0:? 'inDV1b' ( temp double) +0:? 'inDV1c' ( temp double) +0:? 'inDV2' ( temp 2-component vector of double) +0:? 'inDV3' ( temp 3-component vector of double) +0:? 'inDV4' ( temp 4-component vector of double) +0:? 'inU1a' ( temp uint) +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) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:5 Function Definition: @PixelShaderFunction(d1;d1;d1;vd2;vd3;vd4;u1;u1; ( temp float) +0:5 Function Parameters: +0:5 'inDV1a' ( in double) +0:5 'inDV1b' ( in double) +0:5 'inDV1c' ( in double) +0:5 'inDV2' ( in 2-component vector of double) +0:5 'inDV3' ( in 3-component vector of double) +0:5 'inDV4' ( in 4-component vector of double) +0:5 'inU1a' ( in uint) +0:5 'inU1b' ( in uint) +0:? Sequence +0:6 Sequence +0:6 move second child to first child ( temp double) +0:6 'r00' ( temp double) +0:6 fma ( temp double) +0:6 'inDV1a' ( in double) +0:6 'inDV1b' ( in double) +0:6 'inDV1c' ( in double) +0:7 Sequence +0:7 move second child to first child ( temp double) +0:7 'r01' ( temp double) +0:7 uint64BitsToDouble ( temp double) +0:7 Construct uvec2 ( temp 2-component vector of uint) +0:7 'inU1a' ( in uint) +0:7 'inU1b' ( in uint) +0:9 Branch: Return with expression +0:9 Constant: +0:9 0.000000 +0:5 Function Definition: PixelShaderFunction( ( temp void) +0:5 Function Parameters: +0:? Sequence +0:5 move second child to first child ( temp double) +0:? 'inDV1a' ( temp double) +0:? 'inDV1a' (layout( location=0) in double) +0:5 move second child to first child ( temp double) +0:? 'inDV1b' ( temp double) +0:? 'inDV1b' (layout( location=1) in double) +0:5 move second child to first child ( temp double) +0:? 'inDV1c' ( temp double) +0:? 'inDV1c' (layout( location=2) 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: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: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:5 move second child to first child ( temp uint) +0:? 'inU1a' ( temp uint) +0:? 'inU1a' (layout( location=8) in uint) +0:5 move second child to first child ( temp uint) +0:? 'inU1b' ( temp uint) +0:? 'inU1b' (layout( location=9) 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) +0:? 'inDV1a' ( temp double) +0:? 'inDV1b' ( temp double) +0:? 'inDV1c' ( temp double) +0:? 'inDV2' ( temp 2-component vector of double) +0:? 'inDV3' ( temp 3-component vector of double) +0:? 'inDV4' ( temp 4-component vector of double) +0:? 'inU1a' ( temp uint) +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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 90 + + Capability Shader + Capability Float64 + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "PixelShaderFunction" 44 47 50 54 58 62 66 69 72 + ExecutionMode 4 OriginUpperLeft + Name 4 "PixelShaderFunction" + Name 26 "@PixelShaderFunction(d1;d1;d1;vd2;vd3;vd4;u1;u1;" + Name 18 "inDV1a" + Name 19 "inDV1b" + Name 20 "inDV1c" + Name 21 "inDV2" + Name 22 "inDV3" + Name 23 "inDV4" + Name 24 "inU1a" + Name 25 "inU1b" + Name 28 "r00" + Name 33 "r01" + Name 42 "inDV1a" + Name 44 "inDV1a" + Name 46 "inDV1b" + Name 47 "inDV1b" + Name 49 "inDV1c" + Name 50 "inDV1c" + Name 52 "inDV2" + Name 54 "inDV2" + Name 56 "inDV3" + Name 58 "inDV3" + Name 60 "inDV4" + Name 62 "inDV4" + Name 64 "inU1a" + Name 66 "inU1a" + Name 68 "inU1b" + Name 69 "inU1b" + Name 72 "@entryPointOutput" + Name 73 "param" + Name 75 "param" + Name 77 "param" + Name 79 "param" + Name 81 "param" + Name 83 "param" + Name 85 "param" + Name 87 "param" + Decorate 44(inDV1a) Location 0 + Decorate 47(inDV1b) Location 1 + Decorate 50(inDV1c) Location 2 + Decorate 54(inDV2) Location 3 + Decorate 58(inDV3) Location 4 + Decorate 62(inDV4) Location 6 + Decorate 66(inU1a) Location 8 + Decorate 69(inU1b) Location 9 + Decorate 72(@entryPointOutput) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 64 + 7: TypePointer Function 6(float) + 8: TypeVector 6(float) 2 + 9: TypePointer Function 8(fvec2) + 10: TypeVector 6(float) 3 + 11: TypePointer Function 10(fvec3) + 12: TypeVector 6(float) 4 + 13: TypePointer Function 12(fvec4) + 14: TypeInt 32 0 + 15: TypePointer Function 14(int) + 16: TypeFloat 32 + 17: TypeFunction 16(float) 7(ptr) 7(ptr) 7(ptr) 9(ptr) 11(ptr) 13(ptr) 15(ptr) 15(ptr) + 36: TypeVector 14(int) 2 + 39: 16(float) Constant 0 + 43: TypePointer Input 6(float) + 44(inDV1a): 43(ptr) Variable Input + 47(inDV1b): 43(ptr) Variable Input + 50(inDV1c): 43(ptr) Variable Input + 53: TypePointer Input 8(fvec2) + 54(inDV2): 53(ptr) Variable Input + 57: TypePointer Input 10(fvec3) + 58(inDV3): 57(ptr) Variable Input + 61: TypePointer Input 12(fvec4) + 62(inDV4): 61(ptr) Variable Input + 65: TypePointer Input 14(int) + 66(inU1a): 65(ptr) Variable Input + 69(inU1b): 65(ptr) Variable Input + 71: TypePointer Output 16(float) +72(@entryPointOutput): 71(ptr) Variable Output +4(PixelShaderFunction): 2 Function None 3 + 5: Label + 42(inDV1a): 7(ptr) Variable Function + 46(inDV1b): 7(ptr) Variable Function + 49(inDV1c): 7(ptr) Variable Function + 52(inDV2): 9(ptr) Variable Function + 56(inDV3): 11(ptr) Variable Function + 60(inDV4): 13(ptr) Variable Function + 64(inU1a): 15(ptr) Variable Function + 68(inU1b): 15(ptr) Variable Function + 73(param): 7(ptr) Variable Function + 75(param): 7(ptr) Variable Function + 77(param): 7(ptr) Variable Function + 79(param): 9(ptr) Variable Function + 81(param): 11(ptr) Variable Function + 83(param): 13(ptr) Variable Function + 85(param): 15(ptr) Variable Function + 87(param): 15(ptr) Variable Function + 45: 6(float) Load 44(inDV1a) + Store 42(inDV1a) 45 + 48: 6(float) Load 47(inDV1b) + Store 46(inDV1b) 48 + 51: 6(float) Load 50(inDV1c) + Store 49(inDV1c) 51 + 55: 8(fvec2) Load 54(inDV2) + Store 52(inDV2) 55 + 59: 10(fvec3) Load 58(inDV3) + Store 56(inDV3) 59 + 63: 12(fvec4) Load 62(inDV4) + Store 60(inDV4) 63 + 67: 14(int) Load 66(inU1a) + Store 64(inU1a) 67 + 70: 14(int) Load 69(inU1b) + Store 68(inU1b) 70 + 74: 6(float) Load 42(inDV1a) + Store 73(param) 74 + 76: 6(float) Load 46(inDV1b) + Store 75(param) 76 + 78: 6(float) Load 49(inDV1c) + Store 77(param) 78 + 80: 8(fvec2) Load 52(inDV2) + Store 79(param) 80 + 82: 10(fvec3) Load 56(inDV3) + Store 81(param) 82 + 84: 12(fvec4) Load 60(inDV4) + Store 83(param) 84 + 86: 14(int) Load 64(inU1a) + Store 85(param) 86 + 88: 14(int) Load 68(inU1b) + Store 87(param) 88 + 89: 16(float) FunctionCall 26(@PixelShaderFunction(d1;d1;d1;vd2;vd3;vd4;u1;u1;) 73(param) 75(param) 77(param) 79(param) 81(param) 83(param) 85(param) 87(param) + Store 72(@entryPointOutput) 89 + Return + FunctionEnd +26(@PixelShaderFunction(d1;d1;d1;vd2;vd3;vd4;u1;u1;): 16(float) Function None 17 + 18(inDV1a): 7(ptr) FunctionParameter + 19(inDV1b): 7(ptr) FunctionParameter + 20(inDV1c): 7(ptr) FunctionParameter + 21(inDV2): 9(ptr) FunctionParameter + 22(inDV3): 11(ptr) FunctionParameter + 23(inDV4): 13(ptr) FunctionParameter + 24(inU1a): 15(ptr) FunctionParameter + 25(inU1b): 15(ptr) FunctionParameter + 27: Label + 28(r00): 7(ptr) Variable Function + 33(r01): 7(ptr) Variable Function + 29: 6(float) Load 18(inDV1a) + 30: 6(float) Load 19(inDV1b) + 31: 6(float) Load 20(inDV1c) + 32: 6(float) ExtInst 1(GLSL.std.450) 50(Fma) 29 30 31 + Store 28(r00) 32 + 34: 14(int) Load 24(inU1a) + 35: 14(int) Load 25(inU1b) + 37: 36(ivec2) CompositeConstruct 34 35 + 38: 6(float) Bitcast 37 + Store 33(r01) 38 + ReturnValue 39 + FunctionEnd 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 new file mode 100644 index 0000000..6d96f16 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.evalfns.frag.out @@ -0,0 +1,284 @@ +hlsl.intrinsics.evalfns.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:3 Function Definition: @main(f1;vf2;vf3;vf4;vi2; ( temp void) +0:3 Function Parameters: +0:3 'inF1' ( in float) +0:3 'inF2' ( in 2-component vector of float) +0:3 'inF3' ( in 3-component vector of float) +0:3 'inF4' ( in 4-component vector of float) +0:3 'inI2' ( in 2-component vector of int) +0:? Sequence +0:4 interpolateAtOffset ( temp float) +0:4 'inF1' ( in float) +0:? Constant: +0:? -0.500000 +0:? -0.062500 +0:5 interpolateAtOffset ( temp 2-component vector of float) +0:5 'inF2' ( in 2-component vector of float) +0:? Constant: +0:? 0.000000 +0:? 0.062500 +0:6 interpolateAtOffset ( temp 3-component vector of float) +0:6 'inF3' ( in 3-component vector of float) +0:? Constant: +0:? 0.187500 +0:? -0.375000 +0:7 interpolateAtOffset ( temp 4-component vector of float) +0:7 'inF4' ( in 4-component vector of float) +0:? Constant: +0:? 0.437500 +0:? -0.500000 +0:9 interpolateAtOffset ( temp float) +0:9 'inF1' ( in float) +0:9 vector-scale ( temp 2-component vector of float) +0:9 Convert int to float ( temp 2-component vector of float) +0:9 right-shift ( temp 2-component vector of int) +0:9 left-shift ( temp 2-component vector of int) +0:9 'inI2' ( in 2-component vector of int) +0:9 Constant: +0:9 28 (const int) +0:9 Constant: +0:9 28 (const int) +0:9 Constant: +0:9 0.062500 +0:3 Function Definition: main( ( temp void) +0:3 Function Parameters: +0:? Sequence +0:3 move second child to first child ( temp float) +0:? 'inF1' ( temp float) +0:? 'inF1' (layout( location=0) in float) +0:3 move second child to first child ( temp 2-component vector of float) +0:? 'inF2' ( temp 2-component vector of float) +0:? 'inF2' (layout( location=1) in 2-component vector of float) +0:3 move second child to first child ( temp 3-component vector of float) +0:? 'inF3' ( temp 3-component vector of float) +0:? 'inF3' (layout( location=2) in 3-component vector of float) +0:3 move second child to first child ( temp 4-component vector of float) +0:? 'inF4' ( temp 4-component vector of float) +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:3 Function Call: @main(f1;vf2;vf3;vf4;vi2; ( temp void) +0:? 'inF1' ( temp float) +0:? 'inF2' ( temp 2-component vector of float) +0:? 'inF3' ( temp 3-component vector of float) +0:? 'inF4' ( temp 4-component vector of float) +0:? 'inI2' ( temp 2-component vector of int) +0:? Linker Objects +0:? 'inF1' (layout( location=0) in float) +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) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:3 Function Definition: @main(f1;vf2;vf3;vf4;vi2; ( temp void) +0:3 Function Parameters: +0:3 'inF1' ( in float) +0:3 'inF2' ( in 2-component vector of float) +0:3 'inF3' ( in 3-component vector of float) +0:3 'inF4' ( in 4-component vector of float) +0:3 'inI2' ( in 2-component vector of int) +0:? Sequence +0:4 interpolateAtOffset ( temp float) +0:4 'inF1' ( in float) +0:? Constant: +0:? -0.500000 +0:? -0.062500 +0:5 interpolateAtOffset ( temp 2-component vector of float) +0:5 'inF2' ( in 2-component vector of float) +0:? Constant: +0:? 0.000000 +0:? 0.062500 +0:6 interpolateAtOffset ( temp 3-component vector of float) +0:6 'inF3' ( in 3-component vector of float) +0:? Constant: +0:? 0.187500 +0:? -0.375000 +0:7 interpolateAtOffset ( temp 4-component vector of float) +0:7 'inF4' ( in 4-component vector of float) +0:? Constant: +0:? 0.437500 +0:? -0.500000 +0:9 interpolateAtOffset ( temp float) +0:9 'inF1' ( in float) +0:9 vector-scale ( temp 2-component vector of float) +0:9 Convert int to float ( temp 2-component vector of float) +0:9 right-shift ( temp 2-component vector of int) +0:9 left-shift ( temp 2-component vector of int) +0:9 'inI2' ( in 2-component vector of int) +0:9 Constant: +0:9 28 (const int) +0:9 Constant: +0:9 28 (const int) +0:9 Constant: +0:9 0.062500 +0:3 Function Definition: main( ( temp void) +0:3 Function Parameters: +0:? Sequence +0:3 move second child to first child ( temp float) +0:? 'inF1' ( temp float) +0:? 'inF1' (layout( location=0) in float) +0:3 move second child to first child ( temp 2-component vector of float) +0:? 'inF2' ( temp 2-component vector of float) +0:? 'inF2' (layout( location=1) in 2-component vector of float) +0:3 move second child to first child ( temp 3-component vector of float) +0:? 'inF3' ( temp 3-component vector of float) +0:? 'inF3' (layout( location=2) in 3-component vector of float) +0:3 move second child to first child ( temp 4-component vector of float) +0:? 'inF4' ( temp 4-component vector of float) +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:3 Function Call: @main(f1;vf2;vf3;vf4;vi2; ( temp void) +0:? 'inF1' ( temp float) +0:? 'inF2' ( temp 2-component vector of float) +0:? 'inF3' ( temp 3-component vector of float) +0:? 'inF4' ( temp 4-component vector of float) +0:? 'inI2' ( temp 2-component vector of int) +0:? Linker Objects +0:? 'inF1' (layout( location=0) in float) +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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 80 + + Capability Shader + Capability InterpolationFunction + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 51 55 59 63 67 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 23 "@main(f1;vf2;vf3;vf4;vi2;" + Name 18 "inF1" + Name 19 "inF2" + Name 20 "inF3" + Name 21 "inF4" + Name 22 "inI2" + Name 49 "inF1" + Name 51 "inF1" + Name 53 "inF2" + Name 55 "inF2" + Name 57 "inF3" + Name 59 "inF3" + Name 61 "inF4" + Name 63 "inF4" + Name 65 "inI2" + Name 67 "inI2" + Name 69 "param" + Name 71 "param" + Name 73 "param" + Name 75 "param" + Name 77 "param" + Decorate 51(inF1) Location 0 + Decorate 55(inF2) Location 1 + Decorate 59(inF3) Location 2 + Decorate 63(inF4) Location 3 + Decorate 67(inI2) Location 4 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypePointer Function 6(float) + 8: TypeVector 6(float) 2 + 9: TypePointer Function 8(fvec2) + 10: TypeVector 6(float) 3 + 11: TypePointer Function 10(fvec3) + 12: TypeVector 6(float) 4 + 13: TypePointer Function 12(fvec4) + 14: TypeInt 32 1 + 15: TypeVector 14(int) 2 + 16: TypePointer Function 15(ivec2) + 17: TypeFunction 2 7(ptr) 9(ptr) 11(ptr) 13(ptr) 16(ptr) + 25: 6(float) Constant 3204448256 + 26: 6(float) Constant 3179282432 + 27: 8(fvec2) ConstantComposite 25 26 + 29: 6(float) Constant 0 + 30: 6(float) Constant 1031798784 + 31: 8(fvec2) ConstantComposite 29 30 + 33: 6(float) Constant 1044381696 + 34: 6(float) Constant 3200253952 + 35: 8(fvec2) ConstantComposite 33 34 + 37: 6(float) Constant 1054867456 + 38: 8(fvec2) ConstantComposite 37 25 + 41: 14(int) Constant 28 + 50: TypePointer Input 6(float) + 51(inF1): 50(ptr) Variable Input + 54: TypePointer Input 8(fvec2) + 55(inF2): 54(ptr) Variable Input + 58: TypePointer Input 10(fvec3) + 59(inF3): 58(ptr) Variable Input + 62: TypePointer Input 12(fvec4) + 63(inF4): 62(ptr) Variable Input + 66: TypePointer Input 15(ivec2) + 67(inI2): 66(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 49(inF1): 7(ptr) Variable Function + 53(inF2): 9(ptr) Variable Function + 57(inF3): 11(ptr) Variable Function + 61(inF4): 13(ptr) Variable Function + 65(inI2): 16(ptr) Variable Function + 69(param): 7(ptr) Variable Function + 71(param): 9(ptr) Variable Function + 73(param): 11(ptr) Variable Function + 75(param): 13(ptr) Variable Function + 77(param): 16(ptr) Variable Function + 52: 6(float) Load 51(inF1) + Store 49(inF1) 52 + 56: 8(fvec2) Load 55(inF2) + Store 53(inF2) 56 + 60: 10(fvec3) Load 59(inF3) + Store 57(inF3) 60 + 64: 12(fvec4) Load 63(inF4) + Store 61(inF4) 64 + 68: 15(ivec2) Load 67(inI2) + Store 65(inI2) 68 + 70: 6(float) Load 49(inF1) + Store 69(param) 70 + 72: 8(fvec2) Load 53(inF2) + Store 71(param) 72 + 74: 10(fvec3) Load 57(inF3) + Store 73(param) 74 + 76: 12(fvec4) Load 61(inF4) + Store 75(param) 76 + 78: 15(ivec2) Load 65(inI2) + Store 77(param) 78 + 79: 2 FunctionCall 23(@main(f1;vf2;vf3;vf4;vi2;) 69(param) 71(param) 73(param) 75(param) 77(param) + Return + FunctionEnd +23(@main(f1;vf2;vf3;vf4;vi2;): 2 Function None 17 + 18(inF1): 7(ptr) FunctionParameter + 19(inF2): 9(ptr) FunctionParameter + 20(inF3): 11(ptr) FunctionParameter + 21(inF4): 13(ptr) FunctionParameter + 22(inI2): 16(ptr) FunctionParameter + 24: Label + 28: 6(float) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 18(inF1) 27 + 32: 8(fvec2) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 19(inF2) 31 + 36: 10(fvec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 20(inF3) 35 + 39: 12(fvec4) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 21(inF4) 38 + 40: 15(ivec2) Load 22(inI2) + 42: 15(ivec2) CompositeConstruct 41 41 + 43: 15(ivec2) ShiftLeftLogical 40 42 + 44: 15(ivec2) CompositeConstruct 41 41 + 45: 15(ivec2) ShiftRightArithmetic 43 44 + 46: 8(fvec2) ConvertSToF 45 + 47: 8(fvec2) VectorTimesScalar 46 30 + 48: 6(float) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 18(inF1) 47 + Return + FunctionEnd 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 new file mode 100644 index 0000000..6b9a18b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.f1632.frag.out @@ -0,0 +1,388 @@ +hlsl.intrinsics.f1632.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:2 Function Definition: PixelShaderFunctionS(u1; ( temp float) +0:2 Function Parameters: +0:2 'inF0' ( in uint) +0:? Sequence +0:3 Branch: Return with expression +0:3 direct index ( temp float) +0:3 unpackHalf2x16 ( temp 2-component vector of float) +0:3 'inF0' ( in uint) +0:3 Constant: +0:3 0 (const int) +0:7 Function Definition: PixelShaderFunction1(vu1; ( temp 1-component vector of float) +0:7 Function Parameters: +0:7 'inF0' ( in 1-component vector of uint) +0:? Sequence +0:8 Branch: Return with expression +0:8 Constant: +0:8 0.000000 +0:12 Function Definition: PixelShaderFunction2(vu2; ( temp 2-component vector of float) +0:12 Function Parameters: +0:12 'inF0' ( in 2-component vector of uint) +0:? Sequence +0:13 Branch: Return with expression +0:13 Construct vec2 ( temp 2-component vector of float) +0:13 direct index ( temp float) +0:13 unpackHalf2x16 ( temp 2-component vector of float) +0:13 direct index ( temp uint) +0:13 'inF0' ( in 2-component vector of uint) +0:13 Constant: +0:13 0 (const int) +0:13 Constant: +0:13 0 (const int) +0:13 direct index ( temp float) +0:13 unpackHalf2x16 ( temp 2-component vector of float) +0:13 direct index ( temp uint) +0:13 'inF0' ( in 2-component vector of uint) +0:13 Constant: +0:13 1 (const int) +0:13 Constant: +0:13 0 (const int) +0:17 Function Definition: PixelShaderFunction3(vu3; ( temp 3-component vector of float) +0:17 Function Parameters: +0:17 'inF0' ( in 3-component vector of uint) +0:? Sequence +0:18 Branch: Return with expression +0:18 Construct vec3 ( temp 3-component vector of float) +0:18 direct index ( temp float) +0:18 unpackHalf2x16 ( temp 2-component vector of float) +0:18 direct index ( temp uint) +0:18 'inF0' ( in 3-component vector of uint) +0:18 Constant: +0:18 0 (const int) +0:18 Constant: +0:18 0 (const int) +0:18 direct index ( temp float) +0:18 unpackHalf2x16 ( temp 2-component vector of float) +0:18 direct index ( temp uint) +0:18 'inF0' ( in 3-component vector of uint) +0:18 Constant: +0:18 1 (const int) +0:18 Constant: +0:18 0 (const int) +0:18 direct index ( temp float) +0:18 unpackHalf2x16 ( temp 2-component vector of float) +0:18 direct index ( temp uint) +0:18 'inF0' ( in 3-component vector of uint) +0:18 Constant: +0:18 2 (const int) +0:18 Constant: +0:18 0 (const int) +0:22 Function Definition: PixelShaderFunction(vu4; ( temp 4-component vector of float) +0:22 Function Parameters: +0:22 'inF0' ( in 4-component vector of uint) +0:? Sequence +0:23 Branch: Return with expression +0:23 Construct vec4 ( temp 4-component vector of float) +0:23 direct index ( temp float) +0:23 unpackHalf2x16 ( temp 2-component vector of float) +0:23 direct index ( temp uint) +0:23 'inF0' ( in 4-component vector of uint) +0:23 Constant: +0:23 0 (const int) +0:23 Constant: +0:23 0 (const int) +0:23 direct index ( temp float) +0:23 unpackHalf2x16 ( temp 2-component vector of float) +0:23 direct index ( temp uint) +0:23 'inF0' ( in 4-component vector of uint) +0:23 Constant: +0:23 1 (const int) +0:23 Constant: +0:23 0 (const int) +0:23 direct index ( temp float) +0:23 unpackHalf2x16 ( temp 2-component vector of float) +0:23 direct index ( temp uint) +0:23 'inF0' ( in 4-component vector of uint) +0:23 Constant: +0:23 2 (const int) +0:23 Constant: +0:23 0 (const int) +0:23 direct index ( temp float) +0:23 unpackHalf2x16 ( temp 2-component vector of float) +0:23 direct index ( temp uint) +0:23 'inF0' ( in 4-component vector of uint) +0:23 Constant: +0:23 3 (const int) +0:23 Constant: +0:23 0 (const int) +0:27 Function Definition: @main( ( temp 4-component vector of float) +0:27 Function Parameters: +0:? Sequence +0:28 Branch: Return with expression +0:28 Constant: +0:28 0.000000 +0:28 0.000000 +0:28 0.000000 +0:28 0.000000 +0:27 Function Definition: main( ( temp void) +0:27 Function Parameters: +0:? Sequence +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:27 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: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:2 Function Definition: PixelShaderFunctionS(u1; ( temp float) +0:2 Function Parameters: +0:2 'inF0' ( in uint) +0:? Sequence +0:3 Branch: Return with expression +0:3 direct index ( temp float) +0:3 unpackHalf2x16 ( temp 2-component vector of float) +0:3 'inF0' ( in uint) +0:3 Constant: +0:3 0 (const int) +0:7 Function Definition: PixelShaderFunction1(vu1; ( temp 1-component vector of float) +0:7 Function Parameters: +0:7 'inF0' ( in 1-component vector of uint) +0:? Sequence +0:8 Branch: Return with expression +0:8 Constant: +0:8 0.000000 +0:12 Function Definition: PixelShaderFunction2(vu2; ( temp 2-component vector of float) +0:12 Function Parameters: +0:12 'inF0' ( in 2-component vector of uint) +0:? Sequence +0:13 Branch: Return with expression +0:13 Construct vec2 ( temp 2-component vector of float) +0:13 direct index ( temp float) +0:13 unpackHalf2x16 ( temp 2-component vector of float) +0:13 direct index ( temp uint) +0:13 'inF0' ( in 2-component vector of uint) +0:13 Constant: +0:13 0 (const int) +0:13 Constant: +0:13 0 (const int) +0:13 direct index ( temp float) +0:13 unpackHalf2x16 ( temp 2-component vector of float) +0:13 direct index ( temp uint) +0:13 'inF0' ( in 2-component vector of uint) +0:13 Constant: +0:13 1 (const int) +0:13 Constant: +0:13 0 (const int) +0:17 Function Definition: PixelShaderFunction3(vu3; ( temp 3-component vector of float) +0:17 Function Parameters: +0:17 'inF0' ( in 3-component vector of uint) +0:? Sequence +0:18 Branch: Return with expression +0:18 Construct vec3 ( temp 3-component vector of float) +0:18 direct index ( temp float) +0:18 unpackHalf2x16 ( temp 2-component vector of float) +0:18 direct index ( temp uint) +0:18 'inF0' ( in 3-component vector of uint) +0:18 Constant: +0:18 0 (const int) +0:18 Constant: +0:18 0 (const int) +0:18 direct index ( temp float) +0:18 unpackHalf2x16 ( temp 2-component vector of float) +0:18 direct index ( temp uint) +0:18 'inF0' ( in 3-component vector of uint) +0:18 Constant: +0:18 1 (const int) +0:18 Constant: +0:18 0 (const int) +0:18 direct index ( temp float) +0:18 unpackHalf2x16 ( temp 2-component vector of float) +0:18 direct index ( temp uint) +0:18 'inF0' ( in 3-component vector of uint) +0:18 Constant: +0:18 2 (const int) +0:18 Constant: +0:18 0 (const int) +0:22 Function Definition: PixelShaderFunction(vu4; ( temp 4-component vector of float) +0:22 Function Parameters: +0:22 'inF0' ( in 4-component vector of uint) +0:? Sequence +0:23 Branch: Return with expression +0:23 Construct vec4 ( temp 4-component vector of float) +0:23 direct index ( temp float) +0:23 unpackHalf2x16 ( temp 2-component vector of float) +0:23 direct index ( temp uint) +0:23 'inF0' ( in 4-component vector of uint) +0:23 Constant: +0:23 0 (const int) +0:23 Constant: +0:23 0 (const int) +0:23 direct index ( temp float) +0:23 unpackHalf2x16 ( temp 2-component vector of float) +0:23 direct index ( temp uint) +0:23 'inF0' ( in 4-component vector of uint) +0:23 Constant: +0:23 1 (const int) +0:23 Constant: +0:23 0 (const int) +0:23 direct index ( temp float) +0:23 unpackHalf2x16 ( temp 2-component vector of float) +0:23 direct index ( temp uint) +0:23 'inF0' ( in 4-component vector of uint) +0:23 Constant: +0:23 2 (const int) +0:23 Constant: +0:23 0 (const int) +0:23 direct index ( temp float) +0:23 unpackHalf2x16 ( temp 2-component vector of float) +0:23 direct index ( temp uint) +0:23 'inF0' ( in 4-component vector of uint) +0:23 Constant: +0:23 3 (const int) +0:23 Constant: +0:23 0 (const int) +0:27 Function Definition: @main( ( temp 4-component vector of float) +0:27 Function Parameters: +0:? Sequence +0:28 Branch: Return with expression +0:28 Constant: +0:28 0.000000 +0:28 0.000000 +0:28 0.000000 +0:28 0.000000 +0:27 Function Definition: main( ( temp void) +0:27 Function Parameters: +0:? Sequence +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:27 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): 80001 +// Id's are bound by 103 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 101 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 11 "PixelShaderFunctionS(u1;" + Name 10 "inF0" + Name 14 "PixelShaderFunction1(vu1;" + Name 13 "inF0" + Name 21 "PixelShaderFunction2(vu2;" + Name 20 "inF0" + Name 28 "PixelShaderFunction3(vu3;" + Name 27 "inF0" + Name 35 "PixelShaderFunction(vu4;" + Name 34 "inF0" + Name 38 "@main(" + Name 101 "@entryPointOutput" + Decorate 101(@entryPointOutput) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: TypePointer Function 6(int) + 8: TypeFloat 32 + 9: TypeFunction 8(float) 7(ptr) + 16: TypeVector 6(int) 2 + 17: TypePointer Function 16(ivec2) + 18: TypeVector 8(float) 2 + 19: TypeFunction 18(fvec2) 17(ptr) + 23: TypeVector 6(int) 3 + 24: TypePointer Function 23(ivec3) + 25: TypeVector 8(float) 3 + 26: TypeFunction 25(fvec3) 24(ptr) + 30: TypeVector 6(int) 4 + 31: TypePointer Function 30(ivec4) + 32: TypeVector 8(float) 4 + 33: TypeFunction 32(fvec4) 31(ptr) + 37: TypeFunction 32(fvec4) + 42: 6(int) Constant 0 + 46: 8(float) Constant 0 + 53: 6(int) Constant 1 + 69: 6(int) Constant 2 + 89: 6(int) Constant 3 + 97: 32(fvec4) ConstantComposite 46 46 46 46 + 100: TypePointer Output 32(fvec4) +101(@entryPointOutput): 100(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 102: 32(fvec4) FunctionCall 38(@main() + Store 101(@entryPointOutput) 102 + Return + FunctionEnd +11(PixelShaderFunctionS(u1;): 8(float) Function None 9 + 10(inF0): 7(ptr) FunctionParameter + 12: Label + 40: 6(int) Load 10(inF0) + 41: 18(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 40 + 43: 8(float) CompositeExtract 41 0 + ReturnValue 43 + FunctionEnd +14(PixelShaderFunction1(vu1;): 8(float) Function None 9 + 13(inF0): 7(ptr) FunctionParameter + 15: Label + ReturnValue 46 + FunctionEnd +21(PixelShaderFunction2(vu2;): 18(fvec2) Function None 19 + 20(inF0): 17(ptr) FunctionParameter + 22: Label + 49: 7(ptr) AccessChain 20(inF0) 42 + 50: 6(int) Load 49 + 51: 18(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 50 + 52: 8(float) CompositeExtract 51 0 + 54: 7(ptr) AccessChain 20(inF0) 53 + 55: 6(int) Load 54 + 56: 18(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 55 + 57: 8(float) CompositeExtract 56 0 + 58: 18(fvec2) CompositeConstruct 52 57 + ReturnValue 58 + FunctionEnd +28(PixelShaderFunction3(vu3;): 25(fvec3) Function None 26 + 27(inF0): 24(ptr) FunctionParameter + 29: Label + 61: 7(ptr) AccessChain 27(inF0) 42 + 62: 6(int) Load 61 + 63: 18(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 62 + 64: 8(float) CompositeExtract 63 0 + 65: 7(ptr) AccessChain 27(inF0) 53 + 66: 6(int) Load 65 + 67: 18(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 66 + 68: 8(float) CompositeExtract 67 0 + 70: 7(ptr) AccessChain 27(inF0) 69 + 71: 6(int) Load 70 + 72: 18(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 71 + 73: 8(float) CompositeExtract 72 0 + 74: 25(fvec3) CompositeConstruct 64 68 73 + ReturnValue 74 + FunctionEnd +35(PixelShaderFunction(vu4;): 32(fvec4) Function None 33 + 34(inF0): 31(ptr) FunctionParameter + 36: Label + 77: 7(ptr) AccessChain 34(inF0) 42 + 78: 6(int) Load 77 + 79: 18(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 78 + 80: 8(float) CompositeExtract 79 0 + 81: 7(ptr) AccessChain 34(inF0) 53 + 82: 6(int) Load 81 + 83: 18(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 82 + 84: 8(float) CompositeExtract 83 0 + 85: 7(ptr) AccessChain 34(inF0) 69 + 86: 6(int) Load 85 + 87: 18(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 86 + 88: 8(float) CompositeExtract 87 0 + 90: 7(ptr) AccessChain 34(inF0) 89 + 91: 6(int) Load 90 + 92: 18(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 91 + 93: 8(float) CompositeExtract 92 0 + 94: 32(fvec4) CompositeConstruct 80 84 88 93 + ReturnValue 94 + FunctionEnd + 38(@main(): 32(fvec4) Function None 37 + 39: Label + ReturnValue 97 + FunctionEnd 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 new file mode 100644 index 0000000..30edb0a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.f3216.frag.out @@ -0,0 +1,401 @@ +hlsl.intrinsics.f3216.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:2 Function Definition: PixelShaderFunctionS(f1; ( temp uint) +0:2 Function Parameters: +0:2 'inF0' ( in float) +0:? Sequence +0:3 Branch: Return with expression +0:3 packHalf2x16 ( temp uint) +0:3 Construct vec2 ( temp 2-component vector of float) +0:3 'inF0' ( in float) +0:3 Constant: +0:3 0.000000 +0:7 Function Definition: PixelShaderFunction1(vf1; ( temp 1-component vector of uint) +0:7 Function Parameters: +0:7 'inF0' ( in 1-component vector of float) +0:? Sequence +0:8 Branch: Return with expression +0:8 Construct uint ( temp 1-component vector of uint) +0:8 packHalf2x16 ( temp uint) +0:8 Construct vec2 ( temp 2-component vector of float) +0:8 Construct float ( in float) +0:8 'inF0' ( in 1-component vector of float) +0:8 Constant: +0:8 0.000000 +0:12 Function Definition: PixelShaderFunction2(vf2; ( temp 2-component vector of uint) +0:12 Function Parameters: +0:12 'inF0' ( in 2-component vector of float) +0:? Sequence +0:13 Branch: Return with expression +0:13 Construct uvec2 ( temp 2-component vector of uint) +0:13 packHalf2x16 ( temp uint) +0:13 Construct vec2 ( temp 2-component vector of float) +0:13 direct index ( temp float) +0:13 'inF0' ( in 2-component vector of float) +0:13 Constant: +0:13 0 (const int) +0:13 Constant: +0:13 0.000000 +0:13 packHalf2x16 ( temp uint) +0:13 Construct vec2 ( temp 2-component vector of float) +0:13 direct index ( temp float) +0:13 'inF0' ( in 2-component vector of float) +0:13 Constant: +0:13 1 (const int) +0:13 Constant: +0:13 0.000000 +0:17 Function Definition: PixelShaderFunction3(vf3; ( temp 3-component vector of uint) +0:17 Function Parameters: +0:17 'inF0' ( in 3-component vector of float) +0:? Sequence +0:18 Branch: Return with expression +0:18 Construct uvec3 ( temp 3-component vector of uint) +0:18 packHalf2x16 ( temp uint) +0:18 Construct vec2 ( temp 2-component vector of float) +0:18 direct index ( temp float) +0:18 'inF0' ( in 3-component vector of float) +0:18 Constant: +0:18 0 (const int) +0:18 Constant: +0:18 0.000000 +0:18 packHalf2x16 ( temp uint) +0:18 Construct vec2 ( temp 2-component vector of float) +0:18 direct index ( temp float) +0:18 'inF0' ( in 3-component vector of float) +0:18 Constant: +0:18 1 (const int) +0:18 Constant: +0:18 0.000000 +0:18 packHalf2x16 ( temp uint) +0:18 Construct vec2 ( temp 2-component vector of float) +0:18 direct index ( temp float) +0:18 'inF0' ( in 3-component vector of float) +0:18 Constant: +0:18 2 (const int) +0:18 Constant: +0:18 0.000000 +0:22 Function Definition: PixelShaderFunction(vf4; ( temp 4-component vector of uint) +0:22 Function Parameters: +0:22 'inF0' ( in 4-component vector of float) +0:? Sequence +0:23 Branch: Return with expression +0:23 Construct uvec4 ( temp 4-component vector of uint) +0:23 packHalf2x16 ( temp uint) +0:23 Construct vec2 ( temp 2-component vector of float) +0:23 direct index ( temp float) +0:23 'inF0' ( in 4-component vector of float) +0:23 Constant: +0:23 0 (const int) +0:23 Constant: +0:23 0.000000 +0:23 packHalf2x16 ( temp uint) +0:23 Construct vec2 ( temp 2-component vector of float) +0:23 direct index ( temp float) +0:23 'inF0' ( in 4-component vector of float) +0:23 Constant: +0:23 1 (const int) +0:23 Constant: +0:23 0.000000 +0:23 packHalf2x16 ( temp uint) +0:23 Construct vec2 ( temp 2-component vector of float) +0:23 direct index ( temp float) +0:23 'inF0' ( in 4-component vector of float) +0:23 Constant: +0:23 2 (const int) +0:23 Constant: +0:23 0.000000 +0:23 packHalf2x16 ( temp uint) +0:23 Construct vec2 ( temp 2-component vector of float) +0:23 direct index ( temp float) +0:23 'inF0' ( in 4-component vector of float) +0:23 Constant: +0:23 3 (const int) +0:23 Constant: +0:23 0.000000 +0:27 Function Definition: @main( ( temp 4-component vector of float) +0:27 Function Parameters: +0:? Sequence +0:28 Branch: Return with expression +0:28 Constant: +0:28 0.000000 +0:28 0.000000 +0:28 0.000000 +0:28 0.000000 +0:27 Function Definition: main( ( temp void) +0:27 Function Parameters: +0:? Sequence +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:27 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: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:2 Function Definition: PixelShaderFunctionS(f1; ( temp uint) +0:2 Function Parameters: +0:2 'inF0' ( in float) +0:? Sequence +0:3 Branch: Return with expression +0:3 packHalf2x16 ( temp uint) +0:3 Construct vec2 ( temp 2-component vector of float) +0:3 'inF0' ( in float) +0:3 Constant: +0:3 0.000000 +0:7 Function Definition: PixelShaderFunction1(vf1; ( temp 1-component vector of uint) +0:7 Function Parameters: +0:7 'inF0' ( in 1-component vector of float) +0:? Sequence +0:8 Branch: Return with expression +0:8 Construct uint ( temp 1-component vector of uint) +0:8 packHalf2x16 ( temp uint) +0:8 Construct vec2 ( temp 2-component vector of float) +0:8 Construct float ( in float) +0:8 'inF0' ( in 1-component vector of float) +0:8 Constant: +0:8 0.000000 +0:12 Function Definition: PixelShaderFunction2(vf2; ( temp 2-component vector of uint) +0:12 Function Parameters: +0:12 'inF0' ( in 2-component vector of float) +0:? Sequence +0:13 Branch: Return with expression +0:13 Construct uvec2 ( temp 2-component vector of uint) +0:13 packHalf2x16 ( temp uint) +0:13 Construct vec2 ( temp 2-component vector of float) +0:13 direct index ( temp float) +0:13 'inF0' ( in 2-component vector of float) +0:13 Constant: +0:13 0 (const int) +0:13 Constant: +0:13 0.000000 +0:13 packHalf2x16 ( temp uint) +0:13 Construct vec2 ( temp 2-component vector of float) +0:13 direct index ( temp float) +0:13 'inF0' ( in 2-component vector of float) +0:13 Constant: +0:13 1 (const int) +0:13 Constant: +0:13 0.000000 +0:17 Function Definition: PixelShaderFunction3(vf3; ( temp 3-component vector of uint) +0:17 Function Parameters: +0:17 'inF0' ( in 3-component vector of float) +0:? Sequence +0:18 Branch: Return with expression +0:18 Construct uvec3 ( temp 3-component vector of uint) +0:18 packHalf2x16 ( temp uint) +0:18 Construct vec2 ( temp 2-component vector of float) +0:18 direct index ( temp float) +0:18 'inF0' ( in 3-component vector of float) +0:18 Constant: +0:18 0 (const int) +0:18 Constant: +0:18 0.000000 +0:18 packHalf2x16 ( temp uint) +0:18 Construct vec2 ( temp 2-component vector of float) +0:18 direct index ( temp float) +0:18 'inF0' ( in 3-component vector of float) +0:18 Constant: +0:18 1 (const int) +0:18 Constant: +0:18 0.000000 +0:18 packHalf2x16 ( temp uint) +0:18 Construct vec2 ( temp 2-component vector of float) +0:18 direct index ( temp float) +0:18 'inF0' ( in 3-component vector of float) +0:18 Constant: +0:18 2 (const int) +0:18 Constant: +0:18 0.000000 +0:22 Function Definition: PixelShaderFunction(vf4; ( temp 4-component vector of uint) +0:22 Function Parameters: +0:22 'inF0' ( in 4-component vector of float) +0:? Sequence +0:23 Branch: Return with expression +0:23 Construct uvec4 ( temp 4-component vector of uint) +0:23 packHalf2x16 ( temp uint) +0:23 Construct vec2 ( temp 2-component vector of float) +0:23 direct index ( temp float) +0:23 'inF0' ( in 4-component vector of float) +0:23 Constant: +0:23 0 (const int) +0:23 Constant: +0:23 0.000000 +0:23 packHalf2x16 ( temp uint) +0:23 Construct vec2 ( temp 2-component vector of float) +0:23 direct index ( temp float) +0:23 'inF0' ( in 4-component vector of float) +0:23 Constant: +0:23 1 (const int) +0:23 Constant: +0:23 0.000000 +0:23 packHalf2x16 ( temp uint) +0:23 Construct vec2 ( temp 2-component vector of float) +0:23 direct index ( temp float) +0:23 'inF0' ( in 4-component vector of float) +0:23 Constant: +0:23 2 (const int) +0:23 Constant: +0:23 0.000000 +0:23 packHalf2x16 ( temp uint) +0:23 Construct vec2 ( temp 2-component vector of float) +0:23 direct index ( temp float) +0:23 'inF0' ( in 4-component vector of float) +0:23 Constant: +0:23 3 (const int) +0:23 Constant: +0:23 0.000000 +0:27 Function Definition: @main( ( temp 4-component vector of float) +0:27 Function Parameters: +0:? Sequence +0:28 Branch: Return with expression +0:28 Constant: +0:28 0.000000 +0:28 0.000000 +0:28 0.000000 +0:28 0.000000 +0:27 Function Definition: main( ( temp void) +0:27 Function Parameters: +0:? Sequence +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:27 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): 80001 +// Id's are bound by 106 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 104 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 11 "PixelShaderFunctionS(f1;" + Name 10 "inF0" + Name 14 "PixelShaderFunction1(vf1;" + Name 13 "inF0" + Name 21 "PixelShaderFunction2(vf2;" + Name 20 "inF0" + Name 28 "PixelShaderFunction3(vf3;" + Name 27 "inF0" + Name 35 "PixelShaderFunction(vf4;" + Name 34 "inF0" + Name 38 "@main(" + Name 104 "@entryPointOutput" + Decorate 104(@entryPointOutput) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypePointer Function 6(float) + 8: TypeInt 32 0 + 9: TypeFunction 8(int) 7(ptr) + 16: TypeVector 6(float) 2 + 17: TypePointer Function 16(fvec2) + 18: TypeVector 8(int) 2 + 19: TypeFunction 18(ivec2) 17(ptr) + 23: TypeVector 6(float) 3 + 24: TypePointer Function 23(fvec3) + 25: TypeVector 8(int) 3 + 26: TypeFunction 25(ivec3) 24(ptr) + 30: TypeVector 6(float) 4 + 31: TypePointer Function 30(fvec4) + 32: TypeVector 8(int) 4 + 33: TypeFunction 32(ivec4) 31(ptr) + 37: TypeFunction 30(fvec4) + 41: 6(float) Constant 0 + 51: 8(int) Constant 0 + 56: 8(int) Constant 1 + 72: 8(int) Constant 2 + 92: 8(int) Constant 3 + 100: 30(fvec4) ConstantComposite 41 41 41 41 + 103: TypePointer Output 30(fvec4) +104(@entryPointOutput): 103(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 105: 30(fvec4) FunctionCall 38(@main() + Store 104(@entryPointOutput) 105 + Return + FunctionEnd +11(PixelShaderFunctionS(f1;): 8(int) Function None 9 + 10(inF0): 7(ptr) FunctionParameter + 12: Label + 40: 6(float) Load 10(inF0) + 42: 16(fvec2) CompositeConstruct 40 41 + 43: 8(int) ExtInst 1(GLSL.std.450) 58(PackHalf2x16) 42 + ReturnValue 43 + FunctionEnd +14(PixelShaderFunction1(vf1;): 8(int) Function None 9 + 13(inF0): 7(ptr) FunctionParameter + 15: Label + 46: 6(float) Load 13(inF0) + 47: 16(fvec2) CompositeConstruct 46 41 + 48: 8(int) ExtInst 1(GLSL.std.450) 58(PackHalf2x16) 47 + ReturnValue 48 + FunctionEnd +21(PixelShaderFunction2(vf2;): 18(ivec2) Function None 19 + 20(inF0): 17(ptr) FunctionParameter + 22: Label + 52: 7(ptr) AccessChain 20(inF0) 51 + 53: 6(float) Load 52 + 54: 16(fvec2) CompositeConstruct 53 41 + 55: 8(int) ExtInst 1(GLSL.std.450) 58(PackHalf2x16) 54 + 57: 7(ptr) AccessChain 20(inF0) 56 + 58: 6(float) Load 57 + 59: 16(fvec2) CompositeConstruct 58 41 + 60: 8(int) ExtInst 1(GLSL.std.450) 58(PackHalf2x16) 59 + 61: 18(ivec2) CompositeConstruct 55 60 + ReturnValue 61 + FunctionEnd +28(PixelShaderFunction3(vf3;): 25(ivec3) Function None 26 + 27(inF0): 24(ptr) FunctionParameter + 29: Label + 64: 7(ptr) AccessChain 27(inF0) 51 + 65: 6(float) Load 64 + 66: 16(fvec2) CompositeConstruct 65 41 + 67: 8(int) ExtInst 1(GLSL.std.450) 58(PackHalf2x16) 66 + 68: 7(ptr) AccessChain 27(inF0) 56 + 69: 6(float) Load 68 + 70: 16(fvec2) CompositeConstruct 69 41 + 71: 8(int) ExtInst 1(GLSL.std.450) 58(PackHalf2x16) 70 + 73: 7(ptr) AccessChain 27(inF0) 72 + 74: 6(float) Load 73 + 75: 16(fvec2) CompositeConstruct 74 41 + 76: 8(int) ExtInst 1(GLSL.std.450) 58(PackHalf2x16) 75 + 77: 25(ivec3) CompositeConstruct 67 71 76 + ReturnValue 77 + FunctionEnd +35(PixelShaderFunction(vf4;): 32(ivec4) Function None 33 + 34(inF0): 31(ptr) FunctionParameter + 36: Label + 80: 7(ptr) AccessChain 34(inF0) 51 + 81: 6(float) Load 80 + 82: 16(fvec2) CompositeConstruct 81 41 + 83: 8(int) ExtInst 1(GLSL.std.450) 58(PackHalf2x16) 82 + 84: 7(ptr) AccessChain 34(inF0) 56 + 85: 6(float) Load 84 + 86: 16(fvec2) CompositeConstruct 85 41 + 87: 8(int) ExtInst 1(GLSL.std.450) 58(PackHalf2x16) 86 + 88: 7(ptr) AccessChain 34(inF0) 72 + 89: 6(float) Load 88 + 90: 16(fvec2) CompositeConstruct 89 41 + 91: 8(int) ExtInst 1(GLSL.std.450) 58(PackHalf2x16) 90 + 93: 7(ptr) AccessChain 34(inF0) 92 + 94: 6(float) Load 93 + 95: 16(fvec2) CompositeConstruct 94 41 + 96: 8(int) ExtInst 1(GLSL.std.450) 58(PackHalf2x16) 95 + 97: 32(ivec4) CompositeConstruct 83 87 91 96 + ReturnValue 97 + FunctionEnd + 38(@main(): 30(fvec4) Function None 37 + 39: Label + ReturnValue 100 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.frag.out new file mode 100644 index 0000000..1dbd218 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.frag.out @@ -0,0 +1,8452 @@ +hlsl.intrinsics.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:17 Function Definition: PixelShaderFunctionS(f1;f1;f1;u1;u1; ( temp float) +0:17 Function Parameters: +0:17 'inF0' ( in float) +0:17 'inF1' ( in float) +0:17 'inF2' ( in float) +0:17 'inU0' ( in uint) +0:17 'inU1' ( in uint) +0:? Sequence +0:20 Sequence +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:21 Sequence +0:21 move second child to first child ( temp float) +0:21 'r001' ( temp float) +0:21 Absolute value ( temp float) +0:21 'inF0' ( in float) +0:22 Sequence +0:22 move second child to first child ( temp float) +0:22 'r002' ( temp float) +0:22 arc cosine ( temp float) +0:22 'inF0' ( in float) +0:23 Sequence +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:24 Sequence +0:24 move second child to first child ( temp float) +0:24 'r004' ( temp float) +0:24 arc sine ( temp float) +0:24 'inF0' ( in float) +0:25 Sequence +0:25 move second child to first child ( temp int) +0:25 'r005' ( temp int) +0:25 floatBitsToInt ( temp int) +0:25 'inF0' ( in float) +0:26 Sequence +0:26 move second child to first child ( temp uint) +0:26 'r006' ( temp uint) +0:26 floatBitsToUint ( temp uint) +0:26 'inF0' ( in float) +0:27 Sequence +0:27 move second child to first child ( temp float) +0:27 'r007' ( temp float) +0:27 intBitsToFloat ( temp float) +0:27 'inU0' ( in uint) +0:29 Sequence +0:29 move second child to first child ( temp float) +0:29 'r009' ( temp float) +0:29 arc tangent ( temp float) +0:29 'inF0' ( in float) +0:30 Sequence +0:30 move second child to first child ( temp float) +0:30 'r010' ( temp float) +0:30 arc tangent ( temp float) +0:30 'inF0' ( in float) +0:30 'inF1' ( in float) +0:31 Sequence +0:31 move second child to first child ( temp float) +0:31 'r011' ( temp float) +0:31 Ceiling ( temp float) +0:31 'inF0' ( in float) +0:32 Sequence +0:32 move second child to first child ( temp float) +0:32 'r012' ( temp float) +0:32 clamp ( temp float) +0:32 'inF0' ( in float) +0:32 'inF1' ( in float) +0:32 'inF2' ( in float) +0:33 Test condition and select ( temp void) +0:33 Condition +0:33 Compare Less Than ( temp bool) +0:33 'inF0' ( in float) +0:33 Constant: +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: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 '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: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:38 Sequence +0:38 move second child to first child ( temp float) +0:38 'r018' ( temp float) +0:38 dPdxCoarse ( 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 '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 '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 '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 '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 '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:48 Sequence +0:48 move second child to first child ( temp float) +0:48 'r028' ( temp float) +0:48 exp2 ( 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:50 Sequence +0:50 move second child to first child ( temp uint) +0:50 'r030' ( temp uint) +0:50 Convert int to uint ( temp uint) +0:50 findLSB ( 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:54 Sequence +0:54 move second child to first child ( temp float) +0:54 'r034' ( temp float) +0:54 Fraction ( temp float) +0:54 'inF0' ( 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 '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) +0:56 fwidth ( temp float) +0:56 'inF0' ( in float) +0:57 Sequence +0:57 move second child to first child ( temp bool) +0:57 'r037' ( temp bool) +0:57 isinf ( temp bool) +0:57 'inF0' ( in float) +0:58 Sequence +0:58 move second child to first child ( temp bool) +0:58 'r038' ( temp bool) +0:58 isnan ( temp bool) +0:58 'inF0' ( in float) +0:59 Sequence +0:59 move second child to first child ( temp float) +0:59 'r039' ( temp float) +0:59 ldexp ( temp float) +0:59 'inF0' ( in float) +0:59 'inF1' ( in float) +0:60 Sequence +0:60 move second child to first child ( temp float) +0:60 'r039a' ( temp float) +0:60 mix ( temp float) +0:60 'inF0' ( in float) +0:60 'inF1' ( in float) +0:60 'inF2' ( in float) +0:61 Sequence +0:61 move second child to first child ( temp float) +0:61 'r040' ( temp float) +0:61 log ( temp float) +0:61 'inF0' ( in float) +0:62 Sequence +0:62 move second child to first child ( temp float) +0:62 'r041' ( temp float) +0:62 component-wise multiply ( temp float) +0:62 log2 ( temp float) +0:62 'inF0' ( in float) +0:62 Constant: +0:62 0.301030 +0:63 Sequence +0:63 move second child to first child ( temp float) +0:63 'r042' ( temp float) +0:63 log2 ( temp float) +0:63 'inF0' ( in float) +0:64 Sequence +0:64 move second child to first child ( temp float) +0:64 'r043' ( temp float) +0:64 max ( temp float) +0:64 'inF0' ( in float) +0:64 'inF1' ( in float) +0:65 Sequence +0:65 move second child to first child ( temp float) +0:65 'r044' ( temp float) +0:65 min ( temp float) +0:65 'inF0' ( in float) +0:65 'inF1' ( in float) +0:66 Sequence +0:66 move second child to first child ( temp float) +0:66 'r045' ( temp float) +0:66 pow ( temp float) +0:66 'inF0' ( in float) +0:66 'inF1' ( in float) +0:67 Sequence +0:67 move second child to first child ( temp float) +0:67 'r046' ( temp float) +0:67 radians ( temp float) +0:67 'inF0' ( in float) +0:68 Sequence +0:68 move second child to first child ( temp float) +0:68 'r047' ( temp float) +0:68 divide ( temp float) +0:68 Constant: +0:68 1.000000 +0:68 'inF0' ( in float) +0:69 Sequence +0:69 move second child to first child ( temp uint) +0:69 'r048' ( temp uint) +0:69 Convert int to uint ( temp uint) +0:69 bitFieldReverse ( temp int) +0:69 Constant: +0:69 2 (const int) +0:70 Sequence +0:70 move second child to first child ( temp float) +0:70 'r049' ( temp float) +0:70 roundEven ( temp float) +0:70 'inF0' ( in float) +0:71 Sequence +0:71 move second child to first child ( temp float) +0:71 'r050' ( temp float) +0:71 inverse sqrt ( temp float) +0:71 'inF0' ( in float) +0:72 Sequence +0:72 move second child to first child ( temp float) +0:72 'r051' ( temp float) +0:72 clamp ( temp float) +0:72 'inF0' ( in float) +0:72 Constant: +0:72 0.000000 +0:72 Constant: +0:72 1.000000 +0:73 Sequence +0:73 move second child to first child ( temp float) +0:73 'r052' ( temp float) +0:73 Sign ( temp float) +0:73 'inF0' ( in float) +0:74 Sequence +0:74 move second child to first child ( temp float) +0:74 'r053' ( temp float) +0:74 sine ( temp float) +0:74 'inF0' ( in float) +0:75 Sequence +0:75 move second child to first child ( temp float) +0:75 'inF1' ( in float) +0:75 sine ( temp float) +0:75 'inF0' ( in float) +0:75 move second child to first child ( temp float) +0:75 'inF2' ( in float) +0:75 cosine ( temp float) +0:75 'inF0' ( in float) +0:76 Sequence +0:76 move second child to first child ( temp float) +0:76 'r055' ( temp float) +0:76 hyp. sine ( temp float) +0:76 'inF0' ( in float) +0:77 Sequence +0:77 move second child to first child ( temp float) +0:77 'r056' ( temp float) +0:77 smoothstep ( temp float) +0:77 'inF0' ( in float) +0:77 'inF1' ( in float) +0:77 'inF2' ( in float) +0:78 Sequence +0:78 move second child to first child ( temp float) +0:78 'r057' ( temp float) +0:78 sqrt ( temp float) +0:78 'inF0' ( in float) +0:79 Sequence +0:79 move second child to first child ( temp float) +0:79 'r058' ( temp float) +0:79 step ( temp float) +0:79 'inF0' ( in float) +0:79 'inF1' ( in float) +0:80 Sequence +0:80 move second child to first child ( temp float) +0:80 'r059' ( temp float) +0:80 tangent ( temp float) +0:80 'inF0' ( in float) +0:81 Sequence +0:81 move second child to first child ( temp float) +0:81 'r060' ( temp float) +0:81 hyp. tangent ( temp float) +0:81 'inF0' ( in float) +0:83 Sequence +0:83 move second child to first child ( temp float) +0:83 'r061' ( temp float) +0:83 trunc ( temp float) +0:83 'inF0' ( in float) +0:85 Branch: Return with expression +0:85 Constant: +0:85 0.000000 +0:89 Function Definition: PixelShaderFunction1(vf1;vf1;vf1; ( temp 1-component vector of float) +0:89 Function Parameters: +0:89 'inF0' ( in 1-component vector of float) +0:89 'inF1' ( in 1-component vector of float) +0:89 'inF2' ( in 1-component vector of float) +0:? Sequence +0:91 Branch: Return with expression +0:91 Constant: +0:91 0.000000 +0:95 Function Definition: PixelShaderFunction2(vf2;vf2;vf2;vu2;vu2; ( temp 2-component vector of float) +0:95 Function Parameters: +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:95 'inU0' ( in 2-component vector of uint) +0:95 'inU1' ( in 2-component vector of uint) +0:? Sequence +0:98 Sequence +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: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) +0:99 Absolute value ( temp 2-component vector of float) +0:99 'inF0' ( in 2-component vector of float) +0:100 Sequence +0:100 move second child to first child ( temp 2-component vector of float) +0:100 'r002' ( temp 2-component vector of float) +0:100 arc cosine ( temp 2-component vector of float) +0:100 'inF0' ( in 2-component vector of float) +0:101 Sequence +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: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) +0:102 arc sine ( temp 2-component vector of float) +0:102 'inF0' ( in 2-component vector of float) +0:103 Sequence +0:103 move second child to first child ( temp 2-component vector of int) +0:103 'r005' ( temp 2-component vector of int) +0:103 floatBitsToInt ( temp 2-component vector of int) +0:103 'inF0' ( in 2-component vector of float) +0:104 Sequence +0:104 move second child to first child ( temp 2-component vector of uint) +0:104 'r006' ( temp 2-component vector of uint) +0:104 floatBitsToUint ( temp 2-component vector of uint) +0:104 'inF0' ( in 2-component vector of float) +0:105 Sequence +0:105 move second child to first child ( temp 2-component vector of float) +0:105 'r007' ( temp 2-component vector of float) +0:105 intBitsToFloat ( temp 2-component vector of float) +0:105 'inU0' ( in 2-component vector of uint) +0:107 Sequence +0:107 move second child to first child ( temp 2-component vector of float) +0:107 'r009' ( temp 2-component vector of float) +0:107 arc tangent ( temp 2-component vector of float) +0:107 'inF0' ( in 2-component vector of float) +0:108 Sequence +0:108 move second child to first child ( temp 2-component vector of float) +0:108 'r010' ( temp 2-component vector of float) +0:108 arc tangent ( temp 2-component vector of float) +0:108 'inF0' ( in 2-component vector of float) +0:108 'inF1' ( in 2-component vector of float) +0:109 Sequence +0:109 move second child to first child ( temp 2-component vector of float) +0:109 'r011' ( temp 2-component vector of float) +0:109 Ceiling ( temp 2-component vector of float) +0:109 'inF0' ( in 2-component vector of float) +0:110 Sequence +0:110 move second child to first child ( temp 2-component vector of float) +0:110 'r012' ( temp 2-component vector of float) +0:110 clamp ( temp 2-component vector of float) +0:110 'inF0' ( in 2-component vector of float) +0:110 'inF1' ( in 2-component vector of float) +0:110 'inF2' ( in 2-component vector of float) +0:111 Test condition and select ( temp void) +0:111 Condition +0:111 any ( temp bool) +0:111 Compare Less Than ( temp 2-component vector of bool) +0:111 'inF0' ( in 2-component vector of float) +0:111 Constant: +0:111 0.000000 +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: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 '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:? 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 '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 '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 '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 '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 '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 '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: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 '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: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 '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 '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:? 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:? 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: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 'inF0' ( 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 '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) +0:140 fwidth ( temp 2-component vector of float) +0:140 'inF0' ( in 2-component vector of float) +0:141 Sequence +0:141 move second child to first child ( temp 2-component vector of bool) +0:141 'r039' ( temp 2-component vector of bool) +0:141 isinf ( temp 2-component vector of bool) +0:141 'inF0' ( in 2-component vector of float) +0:142 Sequence +0:142 move second child to first child ( temp 2-component vector of bool) +0:142 'r040' ( temp 2-component vector of bool) +0:142 isnan ( temp 2-component vector of bool) +0:142 'inF0' ( in 2-component vector of float) +0:143 Sequence +0:143 move second child to first child ( temp 2-component vector of float) +0:143 'r041' ( temp 2-component vector of float) +0:143 ldexp ( temp 2-component vector of float) +0:143 'inF0' ( in 2-component vector of float) +0:143 'inF1' ( in 2-component vector of float) +0:144 Sequence +0:144 move second child to first child ( temp 2-component vector of float) +0:144 'r039a' ( temp 2-component vector of float) +0:144 mix ( temp 2-component vector of float) +0:144 'inF0' ( in 2-component vector of float) +0:144 'inF1' ( in 2-component vector of float) +0:144 'inF2' ( in 2-component vector of float) +0:145 Sequence +0:145 move second child to first child ( temp float) +0:145 'r042' ( temp float) +0:145 length ( temp float) +0:145 'inF0' ( in 2-component vector of float) +0:146 Sequence +0:146 move second child to first child ( temp 2-component vector of float) +0:146 'r043' ( temp 2-component vector of float) +0:146 log ( temp 2-component vector of float) +0:146 'inF0' ( in 2-component vector of float) +0:147 Sequence +0:147 move second child to first child ( temp 2-component vector of float) +0:147 'r044' ( temp 2-component vector of float) +0:147 vector-scale ( temp 2-component vector of float) +0:147 log2 ( temp 2-component vector of float) +0:147 'inF0' ( in 2-component vector of float) +0:147 Constant: +0:147 0.301030 +0:148 Sequence +0:148 move second child to first child ( temp 2-component vector of float) +0:148 'r045' ( temp 2-component vector of float) +0:148 log2 ( temp 2-component vector of float) +0:148 'inF0' ( in 2-component vector of float) +0:149 Sequence +0:149 move second child to first child ( temp 2-component vector of float) +0:149 'r046' ( temp 2-component vector of float) +0:149 max ( temp 2-component vector of float) +0:149 'inF0' ( in 2-component vector of float) +0:149 'inF1' ( in 2-component vector of float) +0:150 Sequence +0:150 move second child to first child ( temp 2-component vector of float) +0:150 'r047' ( temp 2-component vector of float) +0:150 min ( temp 2-component vector of float) +0:150 'inF0' ( in 2-component vector of float) +0:150 'inF1' ( in 2-component vector of float) +0:151 Sequence +0:151 move second child to first child ( temp 2-component vector of float) +0:151 'r048' ( temp 2-component vector of float) +0:151 normalize ( temp 2-component vector of float) +0:151 'inF0' ( in 2-component vector of float) +0:152 Sequence +0:152 move second child to first child ( temp 2-component vector of float) +0:152 'r049' ( temp 2-component vector of float) +0:152 pow ( temp 2-component vector of float) +0:152 'inF0' ( in 2-component vector of float) +0:152 'inF1' ( in 2-component vector of float) +0:153 Sequence +0:153 move second child to first child ( temp 2-component vector of float) +0:153 'r050' ( temp 2-component vector of float) +0:153 radians ( temp 2-component vector of float) +0:153 'inF0' ( in 2-component vector of float) +0:154 Sequence +0:154 move second child to first child ( temp 2-component vector of float) +0:154 'r051' ( temp 2-component vector of float) +0:154 divide ( temp 2-component vector of float) +0:154 Constant: +0:154 1.000000 +0:154 'inF0' ( in 2-component vector of float) +0:155 Sequence +0:155 move second child to first child ( temp 2-component vector of float) +0:155 'r052' ( temp 2-component vector of float) +0:155 reflect ( temp 2-component vector of float) +0:155 'inF0' ( in 2-component vector of float) +0:155 'inF1' ( in 2-component vector of float) +0:156 Sequence +0:156 move second child to first child ( temp 2-component vector of float) +0:156 'r053' ( temp 2-component vector of float) +0:156 refract ( temp 2-component vector of float) +0:156 'inF0' ( in 2-component vector of float) +0:156 'inF1' ( in 2-component vector of float) +0:156 Constant: +0:156 2.000000 +0:157 Sequence +0:157 move second child to first child ( temp 2-component vector of uint) +0:157 'r054' ( temp 2-component vector of uint) +0:? bitFieldReverse ( temp 2-component vector of uint) +0:? Constant: +0:? 1 (const uint) +0:? 2 (const uint) +0:158 Sequence +0:158 move second child to first child ( temp 2-component vector of float) +0:158 'r055' ( temp 2-component vector of float) +0:158 roundEven ( temp 2-component vector of float) +0:158 'inF0' ( in 2-component vector of float) +0:159 Sequence +0:159 move second child to first child ( temp 2-component vector of float) +0:159 'r056' ( temp 2-component vector of float) +0:159 inverse sqrt ( temp 2-component vector of float) +0:159 'inF0' ( in 2-component vector of float) +0:160 Sequence +0:160 move second child to first child ( temp 2-component vector of float) +0:160 'r057' ( temp 2-component vector of float) +0:160 clamp ( temp 2-component vector of float) +0:160 'inF0' ( in 2-component vector of float) +0:160 Constant: +0:160 0.000000 +0:160 Constant: +0:160 1.000000 +0:161 Sequence +0:161 move second child to first child ( temp 2-component vector of float) +0:161 'r058' ( temp 2-component vector of float) +0:161 Sign ( temp 2-component vector of float) +0:161 'inF0' ( in 2-component vector of float) +0:162 Sequence +0:162 move second child to first child ( temp 2-component vector of float) +0:162 'r059' ( temp 2-component vector of float) +0:162 sine ( temp 2-component vector of float) +0:162 'inF0' ( in 2-component vector of float) +0:163 Sequence +0:163 move second child to first child ( temp 2-component vector of float) +0:163 'inF1' ( in 2-component vector of float) +0:163 sine ( temp 2-component vector of float) +0:163 'inF0' ( in 2-component vector of float) +0:163 move second child to first child ( temp 2-component vector of float) +0:163 'inF2' ( in 2-component vector of float) +0:163 cosine ( temp 2-component vector of float) +0:163 'inF0' ( in 2-component vector of float) +0:164 Sequence +0:164 move second child to first child ( temp 2-component vector of float) +0:164 'r060' ( temp 2-component vector of float) +0:164 hyp. sine ( temp 2-component vector of float) +0:164 'inF0' ( in 2-component vector of float) +0:165 Sequence +0:165 move second child to first child ( temp 2-component vector of float) +0:165 'r061' ( temp 2-component vector of float) +0:165 smoothstep ( temp 2-component vector of float) +0:165 'inF0' ( in 2-component vector of float) +0:165 'inF1' ( in 2-component vector of float) +0:165 'inF2' ( in 2-component vector of float) +0:166 Sequence +0:166 move second child to first child ( temp 2-component vector of float) +0:166 'r062' ( temp 2-component vector of float) +0:166 sqrt ( temp 2-component vector of float) +0:166 'inF0' ( in 2-component vector of float) +0:167 Sequence +0:167 move second child to first child ( temp 2-component vector of float) +0:167 'r063' ( temp 2-component vector of float) +0:167 step ( temp 2-component vector of float) +0:167 'inF0' ( in 2-component vector of float) +0:167 'inF1' ( in 2-component vector of float) +0:168 Sequence +0:168 move second child to first child ( temp 2-component vector of float) +0:168 'r064' ( temp 2-component vector of float) +0:168 tangent ( temp 2-component vector of float) +0:168 'inF0' ( in 2-component vector of float) +0:169 Sequence +0:169 move second child to first child ( temp 2-component vector of float) +0:169 'r065' ( temp 2-component vector of float) +0:169 hyp. tangent ( temp 2-component vector of float) +0:169 'inF0' ( in 2-component vector of float) +0:171 Sequence +0:171 move second child to first child ( temp 2-component vector of float) +0:171 'r066' ( temp 2-component vector of float) +0:171 trunc ( temp 2-component vector of float) +0:171 'inF0' ( in 2-component vector of float) +0:174 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:178 Function Definition: PixelShaderFunction3(vf3;vf3;vf3;vu3;vu3; ( temp 3-component vector of float) +0:178 Function Parameters: +0:178 'inF0' ( in 3-component vector of float) +0:178 'inF1' ( in 3-component vector of float) +0:178 'inF2' ( in 3-component vector of float) +0:178 'inU0' ( in 3-component vector of uint) +0:178 'inU1' ( in 3-component vector of uint) +0:? Sequence +0:181 Sequence +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: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) +0:182 Absolute value ( temp 3-component vector of float) +0:182 'inF0' ( in 3-component vector of float) +0:183 Sequence +0:183 move second child to first child ( temp 3-component vector of float) +0:183 'r002' ( temp 3-component vector of float) +0:183 arc cosine ( temp 3-component vector of float) +0:183 'inF0' ( in 3-component vector of float) +0:184 Sequence +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: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) +0:185 arc sine ( temp 3-component vector of float) +0:185 'inF0' ( in 3-component vector of float) +0:186 Sequence +0:186 move second child to first child ( temp 3-component vector of int) +0:186 'r005' ( temp 3-component vector of int) +0:186 floatBitsToInt ( temp 3-component vector of int) +0:186 'inF0' ( in 3-component vector of float) +0:187 Sequence +0:187 move second child to first child ( temp 3-component vector of uint) +0:187 'r006' ( temp 3-component vector of uint) +0:187 floatBitsToUint ( temp 3-component vector of uint) +0:187 'inF0' ( in 3-component vector of float) +0:188 Sequence +0:188 move second child to first child ( temp 3-component vector of float) +0:188 'r007' ( temp 3-component vector of float) +0:188 intBitsToFloat ( temp 3-component vector of float) +0:188 'inU0' ( in 3-component vector of uint) +0:190 Sequence +0:190 move second child to first child ( temp 3-component vector of float) +0:190 'r009' ( temp 3-component vector of float) +0:190 arc tangent ( temp 3-component vector of float) +0:190 'inF0' ( in 3-component vector of float) +0:191 Sequence +0:191 move second child to first child ( temp 3-component vector of float) +0:191 'r010' ( temp 3-component vector of float) +0:191 arc tangent ( temp 3-component vector of float) +0:191 'inF0' ( in 3-component vector of float) +0:191 'inF1' ( in 3-component vector of float) +0:192 Sequence +0:192 move second child to first child ( temp 3-component vector of float) +0:192 'r011' ( temp 3-component vector of float) +0:192 Ceiling ( temp 3-component vector of float) +0:192 'inF0' ( in 3-component vector of float) +0:193 Sequence +0:193 move second child to first child ( temp 3-component vector of float) +0:193 'r012' ( temp 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 'inF1' ( in 3-component vector of float) +0:193 'inF2' ( in 3-component vector of float) +0:194 Test condition and select ( temp void) +0:194 Condition +0:194 any ( temp bool) +0:194 Compare Less Than ( temp 3-component vector of bool) +0:194 'inF0' ( in 3-component vector of float) +0:194 Constant: +0:194 0.000000 +0:194 0.000000 +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: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 '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:? 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 'inF0' ( 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 '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 '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 '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 '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 '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 '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 '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 '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: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 '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 '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:? 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:? 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: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 'inF0' ( 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 '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) +0:221 fwidth ( temp 3-component vector of float) +0:221 'inF0' ( in 3-component vector of float) +0:222 Sequence +0:222 move second child to first child ( temp 3-component vector of bool) +0:222 'r040' ( temp 3-component vector of bool) +0:222 isinf ( temp 3-component vector of bool) +0:222 'inF0' ( in 3-component vector of float) +0:223 Sequence +0:223 move second child to first child ( temp 3-component vector of bool) +0:223 'r041' ( temp 3-component vector of bool) +0:223 isnan ( temp 3-component vector of bool) +0:223 'inF0' ( in 3-component vector of float) +0:224 Sequence +0:224 move second child to first child ( temp 3-component vector of float) +0:224 'r042' ( temp 3-component vector of float) +0:224 ldexp ( temp 3-component vector of float) +0:224 'inF0' ( in 3-component vector of float) +0:224 'inF1' ( in 3-component vector of float) +0:225 Sequence +0:225 move second child to first child ( temp 3-component vector of float) +0:225 'r039a' ( temp 3-component vector of float) +0:225 mix ( temp 3-component vector of float) +0:225 'inF0' ( in 3-component vector of float) +0:225 'inF1' ( in 3-component vector of float) +0:225 'inF2' ( in 3-component vector of float) +0:226 Sequence +0:226 move second child to first child ( temp 3-component vector of float) +0:226 'r039b' ( temp 3-component vector of float) +0:226 mix ( temp 3-component vector of float) +0:226 'inF0' ( in 3-component vector of float) +0:226 'inF1' ( in 3-component vector of float) +0:226 Constant: +0:226 0.300000 +0:227 Sequence +0:227 move second child to first child ( temp float) +0:227 'r043' ( temp float) +0:227 length ( temp float) +0:227 'inF0' ( in 3-component vector of float) +0:228 Sequence +0:228 move second child to first child ( temp 3-component vector of float) +0:228 'r044' ( temp 3-component vector of float) +0:228 log ( temp 3-component vector of float) +0:228 'inF0' ( in 3-component vector of float) +0:229 Sequence +0:229 move second child to first child ( temp 3-component vector of float) +0:229 'r045' ( temp 3-component vector of float) +0:229 vector-scale ( temp 3-component vector of float) +0:229 log2 ( temp 3-component vector of float) +0:229 'inF0' ( in 3-component vector of float) +0:229 Constant: +0:229 0.301030 +0:230 Sequence +0:230 move second child to first child ( temp 3-component vector of float) +0:230 'r046' ( temp 3-component vector of float) +0:230 log2 ( temp 3-component vector of float) +0:230 'inF0' ( in 3-component vector of float) +0:231 Sequence +0:231 move second child to first child ( temp 3-component vector of float) +0:231 'r047' ( temp 3-component vector of float) +0:231 max ( temp 3-component vector of float) +0:231 'inF0' ( in 3-component vector of float) +0:231 'inF1' ( in 3-component vector of float) +0:232 Sequence +0:232 move second child to first child ( temp 3-component vector of float) +0:232 'r048' ( temp 3-component vector of float) +0:232 min ( temp 3-component vector of float) +0:232 'inF0' ( in 3-component vector of float) +0:232 'inF1' ( in 3-component vector of float) +0:233 Sequence +0:233 move second child to first child ( temp 3-component vector of float) +0:233 'r049' ( temp 3-component vector of float) +0:233 normalize ( temp 3-component vector of float) +0:233 'inF0' ( in 3-component vector of float) +0:234 Sequence +0:234 move second child to first child ( temp 3-component vector of float) +0:234 'r050' ( temp 3-component vector of float) +0:234 pow ( temp 3-component vector of float) +0:234 'inF0' ( in 3-component vector of float) +0:234 'inF1' ( in 3-component vector of float) +0:235 Sequence +0:235 move second child to first child ( temp 3-component vector of float) +0:235 'r051' ( temp 3-component vector of float) +0:235 radians ( temp 3-component vector of float) +0:235 'inF0' ( in 3-component vector of float) +0:236 Sequence +0:236 move second child to first child ( temp 3-component vector of float) +0:236 'r052' ( temp 3-component vector of float) +0:236 divide ( temp 3-component vector of float) +0:236 Constant: +0:236 1.000000 +0:236 'inF0' ( in 3-component vector of float) +0:237 Sequence +0:237 move second child to first child ( temp 3-component vector of float) +0:237 'r053' ( temp 3-component vector of float) +0:237 reflect ( temp 3-component vector of float) +0:237 'inF0' ( in 3-component vector of float) +0:237 'inF1' ( in 3-component vector of float) +0:238 Sequence +0:238 move second child to first child ( temp 3-component vector of float) +0:238 'r054' ( temp 3-component vector of float) +0:238 refract ( temp 3-component vector of float) +0:238 'inF0' ( in 3-component vector of float) +0:238 'inF1' ( in 3-component vector of float) +0:238 Constant: +0:238 2.000000 +0:239 Sequence +0:239 move second child to first child ( temp 3-component vector of uint) +0:239 'r055' ( temp 3-component vector of uint) +0:? bitFieldReverse ( temp 3-component vector of uint) +0:? Constant: +0:? 1 (const uint) +0:? 2 (const uint) +0:? 3 (const uint) +0:240 Sequence +0:240 move second child to first child ( temp 3-component vector of float) +0:240 'r056' ( temp 3-component vector of float) +0:240 roundEven ( temp 3-component vector of float) +0:240 'inF0' ( in 3-component vector of float) +0:241 Sequence +0:241 move second child to first child ( temp 3-component vector of float) +0:241 'r057' ( temp 3-component vector of float) +0:241 inverse sqrt ( temp 3-component vector of float) +0:241 'inF0' ( in 3-component vector of float) +0:242 Sequence +0:242 move second child to first child ( temp 3-component vector of float) +0:242 'r058' ( temp 3-component vector of float) +0:242 clamp ( temp 3-component vector of float) +0:242 'inF0' ( in 3-component vector of float) +0:242 Constant: +0:242 0.000000 +0:242 Constant: +0:242 1.000000 +0:243 Sequence +0:243 move second child to first child ( temp 3-component vector of float) +0:243 'r059' ( temp 3-component vector of float) +0:243 Sign ( temp 3-component vector of float) +0:243 'inF0' ( in 3-component vector of float) +0:244 Sequence +0:244 move second child to first child ( temp 3-component vector of float) +0:244 'r060' ( temp 3-component vector of float) +0:244 sine ( temp 3-component vector of float) +0:244 'inF0' ( in 3-component vector of float) +0:245 Sequence +0:245 move second child to first child ( temp 3-component vector of float) +0:245 'inF1' ( in 3-component vector of float) +0:245 sine ( temp 3-component vector of float) +0:245 'inF0' ( in 3-component vector of float) +0:245 move second child to first child ( temp 3-component vector of float) +0:245 'inF2' ( in 3-component vector of float) +0:245 cosine ( temp 3-component vector of float) +0:245 'inF0' ( in 3-component vector of float) +0:246 Sequence +0:246 move second child to first child ( temp 3-component vector of float) +0:246 'r061' ( temp 3-component vector of float) +0:246 hyp. sine ( temp 3-component vector of float) +0:246 'inF0' ( in 3-component vector of float) +0:247 Sequence +0:247 move second child to first child ( temp 3-component vector of float) +0:247 'r062' ( temp 3-component vector of float) +0:247 smoothstep ( temp 3-component vector of float) +0:247 'inF0' ( in 3-component vector of float) +0:247 'inF1' ( in 3-component vector of float) +0:247 'inF2' ( in 3-component vector of float) +0:248 Sequence +0:248 move second child to first child ( temp 3-component vector of float) +0:248 'r063' ( temp 3-component vector of float) +0:248 sqrt ( temp 3-component vector of float) +0:248 'inF0' ( in 3-component vector of float) +0:249 Sequence +0:249 move second child to first child ( temp 3-component vector of float) +0:249 'r064' ( temp 3-component vector of float) +0:249 step ( temp 3-component vector of float) +0:249 'inF0' ( in 3-component vector of float) +0:249 'inF1' ( in 3-component vector of float) +0:250 Sequence +0:250 move second child to first child ( temp 3-component vector of float) +0:250 'r065' ( temp 3-component vector of float) +0:250 tangent ( temp 3-component vector of float) +0:250 'inF0' ( in 3-component vector of float) +0:251 Sequence +0:251 move second child to first child ( temp 3-component vector of float) +0:251 'r066' ( temp 3-component vector of float) +0:251 hyp. tangent ( temp 3-component vector of float) +0:251 'inF0' ( in 3-component vector of float) +0:253 Sequence +0:253 move second child to first child ( temp 3-component vector of float) +0:253 'r067' ( temp 3-component vector of float) +0:253 trunc ( temp 3-component vector of float) +0:253 'inF0' ( in 3-component vector of float) +0:256 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:260 Function Definition: PixelShaderFunction(vf4;vf4;vf4;vu4;vu4; ( temp 4-component vector of float) +0:260 Function Parameters: +0:260 'inF0' ( in 4-component vector of float) +0:260 'inF1' ( in 4-component vector of float) +0:260 'inF2' ( in 4-component vector of float) +0:260 'inU0' ( in 4-component vector of uint) +0:260 'inU1' ( in 4-component vector of uint) +0:? Sequence +0:263 Sequence +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: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) +0:264 Absolute value ( temp 4-component vector of float) +0:264 'inF0' ( in 4-component vector of float) +0:265 Sequence +0:265 move second child to first child ( temp 4-component vector of float) +0:265 'r002' ( temp 4-component vector of float) +0:265 arc cosine ( temp 4-component vector of float) +0:265 'inF0' ( in 4-component vector of float) +0:266 Sequence +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: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) +0:267 arc sine ( temp 4-component vector of float) +0:267 'inF0' ( in 4-component vector of float) +0:268 Sequence +0:268 move second child to first child ( temp 4-component vector of int) +0:268 'r005' ( temp 4-component vector of int) +0:268 floatBitsToInt ( temp 4-component vector of int) +0:268 'inF0' ( in 4-component vector of float) +0:269 Sequence +0:269 move second child to first child ( temp 4-component vector of uint) +0:269 'r006' ( temp 4-component vector of uint) +0:269 floatBitsToUint ( temp 4-component vector of uint) +0:269 'inF0' ( in 4-component vector of float) +0:270 Sequence +0:270 move second child to first child ( temp 4-component vector of float) +0:270 'r007' ( temp 4-component vector of float) +0:270 intBitsToFloat ( temp 4-component vector of float) +0:270 'inU0' ( in 4-component vector of uint) +0:272 Sequence +0:272 move second child to first child ( temp 4-component vector of float) +0:272 'r009' ( temp 4-component vector of float) +0:272 arc tangent ( temp 4-component vector of float) +0:272 'inF0' ( in 4-component vector of float) +0:273 Sequence +0:273 move second child to first child ( temp 4-component vector of float) +0:273 'r010' ( temp 4-component vector of float) +0:273 arc tangent ( temp 4-component vector of float) +0:273 'inF0' ( in 4-component vector of float) +0:273 'inF1' ( in 4-component vector of float) +0:274 Sequence +0:274 move second child to first child ( temp 4-component vector of float) +0:274 'r011' ( temp 4-component vector of float) +0:274 Ceiling ( temp 4-component vector of float) +0:274 'inF0' ( in 4-component vector of float) +0:275 Sequence +0:275 move second child to first child ( temp 4-component vector of float) +0:275 'r012' ( temp 4-component vector of float) +0:275 clamp ( temp 4-component vector of float) +0:275 'inF0' ( in 4-component vector of float) +0:275 'inF1' ( in 4-component vector of float) +0:275 'inF2' ( in 4-component vector of float) +0:276 Test condition and select ( temp void) +0:276 Condition +0:276 any ( temp bool) +0:276 Compare Less Than ( temp 4-component vector of bool) +0:276 'inF0' ( in 4-component vector of float) +0:276 Constant: +0:276 0.000000 +0:276 0.000000 +0:276 0.000000 +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: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 '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:? 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 '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 '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 '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 '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 '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 '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 '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 '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: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 '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 '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:? 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:? 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: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 'inF0' ( 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 '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) +0:303 fwidth ( temp 4-component vector of float) +0:303 'inF0' ( in 4-component vector of float) +0:304 Sequence +0:304 move second child to first child ( temp 4-component vector of bool) +0:304 'r040' ( temp 4-component vector of bool) +0:304 isinf ( temp 4-component vector of bool) +0:304 'inF0' ( in 4-component vector of float) +0:305 Sequence +0:305 move second child to first child ( temp 4-component vector of bool) +0:305 'r041' ( temp 4-component vector of bool) +0:305 isnan ( temp 4-component vector of bool) +0:305 'inF0' ( in 4-component vector of float) +0:306 Sequence +0:306 move second child to first child ( temp 4-component vector of float) +0:306 'r042' ( temp 4-component vector of float) +0:306 ldexp ( temp 4-component vector of float) +0:306 'inF0' ( in 4-component vector of float) +0:306 'inF1' ( in 4-component vector of float) +0:307 Sequence +0:307 move second child to first child ( temp 4-component vector of float) +0:307 'r039a' ( temp 4-component vector of float) +0:307 mix ( temp 4-component vector of float) +0:307 'inF0' ( in 4-component vector of float) +0:307 'inF1' ( in 4-component vector of float) +0:307 'inF2' ( in 4-component vector of float) +0:308 Sequence +0:308 move second child to first child ( temp float) +0:308 'r043' ( temp float) +0:308 length ( temp float) +0:308 'inF0' ( in 4-component vector of float) +0:309 Sequence +0:309 move second child to first child ( temp 4-component vector of float) +0:309 'r044' ( temp 4-component vector of float) +0:309 log ( temp 4-component vector of float) +0:309 'inF0' ( in 4-component vector of float) +0:310 Sequence +0:310 move second child to first child ( temp 4-component vector of float) +0:310 'r045' ( temp 4-component vector of float) +0:310 vector-scale ( temp 4-component vector of float) +0:310 log2 ( temp 4-component vector of float) +0:310 'inF0' ( in 4-component vector of float) +0:310 Constant: +0:310 0.301030 +0:311 Sequence +0:311 move second child to first child ( temp 4-component vector of float) +0:311 'r046' ( temp 4-component vector of float) +0:311 log2 ( temp 4-component vector of float) +0:311 'inF0' ( in 4-component vector of float) +0:312 Sequence +0:312 move second child to first child ( temp 4-component vector of float) +0:312 'r047' ( temp 4-component vector of float) +0:312 max ( temp 4-component vector of float) +0:312 'inF0' ( in 4-component vector of float) +0:312 'inF1' ( in 4-component vector of float) +0:313 Sequence +0:313 move second child to first child ( temp 4-component vector of float) +0:313 'r048' ( temp 4-component vector of float) +0:313 min ( temp 4-component vector of float) +0:313 'inF0' ( in 4-component vector of float) +0:313 'inF1' ( in 4-component vector of float) +0:314 Sequence +0:314 move second child to first child ( temp 4-component vector of float) +0:314 'r049' ( temp 4-component vector of float) +0:314 normalize ( temp 4-component vector of float) +0:314 'inF0' ( in 4-component vector of float) +0:315 Sequence +0:315 move second child to first child ( temp 4-component vector of float) +0:315 'r050' ( temp 4-component vector of float) +0:315 pow ( temp 4-component vector of float) +0:315 'inF0' ( in 4-component vector of float) +0:315 'inF1' ( in 4-component vector of float) +0:316 Sequence +0:316 move second child to first child ( temp 4-component vector of float) +0:316 'r051' ( temp 4-component vector of float) +0:316 radians ( temp 4-component vector of float) +0:316 'inF0' ( in 4-component vector of float) +0:317 Sequence +0:317 move second child to first child ( temp 4-component vector of float) +0:317 'r052' ( temp 4-component vector of float) +0:317 divide ( temp 4-component vector of float) +0:317 Constant: +0:317 1.000000 +0:317 'inF0' ( in 4-component vector of float) +0:318 Sequence +0:318 move second child to first child ( temp 4-component vector of float) +0:318 'r053' ( temp 4-component vector of float) +0:318 reflect ( temp 4-component vector of float) +0:318 'inF0' ( in 4-component vector of float) +0:318 'inF1' ( in 4-component vector of float) +0:319 Sequence +0:319 move second child to first child ( temp 4-component vector of float) +0:319 'r054' ( temp 4-component vector of float) +0:319 refract ( temp 4-component vector of float) +0:319 'inF0' ( in 4-component vector of float) +0:319 'inF1' ( in 4-component vector of float) +0:319 Constant: +0:319 2.000000 +0:320 Sequence +0:320 move second child to first child ( temp 4-component vector of uint) +0:320 'r055' ( temp 4-component vector of uint) +0:? bitFieldReverse ( temp 4-component vector of uint) +0:? Constant: +0:? 1 (const uint) +0:? 2 (const uint) +0:? 3 (const uint) +0:? 4 (const uint) +0:321 Sequence +0:321 move second child to first child ( temp 4-component vector of float) +0:321 'r056' ( temp 4-component vector of float) +0:321 roundEven ( temp 4-component vector of float) +0:321 'inF0' ( in 4-component vector of float) +0:322 Sequence +0:322 move second child to first child ( temp 4-component vector of float) +0:322 'r057' ( temp 4-component vector of float) +0:322 inverse sqrt ( temp 4-component vector of float) +0:322 'inF0' ( in 4-component vector of float) +0:323 Sequence +0:323 move second child to first child ( temp 4-component vector of float) +0:323 'r058' ( temp 4-component vector of float) +0:323 clamp ( temp 4-component vector of float) +0:323 'inF0' ( in 4-component vector of float) +0:323 Constant: +0:323 0.000000 +0:323 Constant: +0:323 1.000000 +0:324 Sequence +0:324 move second child to first child ( temp 4-component vector of float) +0:324 'r059' ( temp 4-component vector of float) +0:324 Sign ( temp 4-component vector of float) +0:324 'inF0' ( in 4-component vector of float) +0:325 Sequence +0:325 move second child to first child ( temp 4-component vector of float) +0:325 'r060' ( temp 4-component vector of float) +0:325 sine ( temp 4-component vector of float) +0:325 'inF0' ( in 4-component vector of float) +0:326 Sequence +0:326 move second child to first child ( temp 4-component vector of float) +0:326 'inF1' ( in 4-component vector of float) +0:326 sine ( temp 4-component vector of float) +0:326 'inF0' ( in 4-component vector of float) +0:326 move second child to first child ( temp 4-component vector of float) +0:326 'inF2' ( in 4-component vector of float) +0:326 cosine ( temp 4-component vector of float) +0:326 'inF0' ( in 4-component vector of float) +0:327 Sequence +0:327 move second child to first child ( temp 4-component vector of float) +0:327 'r061' ( temp 4-component vector of float) +0:327 hyp. sine ( temp 4-component vector of float) +0:327 'inF0' ( in 4-component vector of float) +0:328 Sequence +0:328 move second child to first child ( temp 4-component vector of float) +0:328 'r062' ( temp 4-component vector of float) +0:328 smoothstep ( temp 4-component vector of float) +0:328 'inF0' ( in 4-component vector of float) +0:328 'inF1' ( in 4-component vector of float) +0:328 'inF2' ( in 4-component vector of float) +0:329 Sequence +0:329 move second child to first child ( temp 4-component vector of float) +0:329 'r063' ( temp 4-component vector of float) +0:329 sqrt ( temp 4-component vector of float) +0:329 'inF0' ( in 4-component vector of float) +0:330 Sequence +0:330 move second child to first child ( temp 4-component vector of float) +0:330 'r064' ( temp 4-component vector of float) +0:330 step ( temp 4-component vector of float) +0:330 'inF0' ( in 4-component vector of float) +0:330 'inF1' ( in 4-component vector of float) +0:331 Sequence +0:331 move second child to first child ( temp 4-component vector of float) +0:331 'r065' ( temp 4-component vector of float) +0:331 tangent ( temp 4-component vector of float) +0:331 'inF0' ( in 4-component vector of float) +0:332 Sequence +0:332 move second child to first child ( temp 4-component vector of float) +0:332 'r066' ( temp 4-component vector of float) +0:332 hyp. tangent ( temp 4-component vector of float) +0:332 'inF0' ( in 4-component vector of float) +0:334 Sequence +0:334 move second child to first child ( temp 4-component vector of float) +0:334 'r067' ( temp 4-component vector of float) +0:334 trunc ( temp 4-component vector of float) +0:334 'inF0' ( in 4-component vector of float) +0:337 Branch: Return with expression +0:? Constant: +0:? 1.000000 +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:? 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:? 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:? 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:? Constant: +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +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:? 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:? Constant: +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +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:? 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:? 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:? 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:? Sequence +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 'inF0' ( in 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 'inF0' ( in float) +0:468 'inFV2' ( in 2-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 '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 '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:472 Sequence +0:472 move second child to first child ( temp float) +0:472 'r05' ( 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: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: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: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 'inFV3' ( in 3-component vector 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: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: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 'inF0' ( in float) +0:478 'inFM2x3' ( in 2X3 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 'inFM3x2' ( in 3X2 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 '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 '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:? 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:? 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:? Linker Objects +0:? 'gs_ua' ( shared uint) +0:? 'gs_ub' ( shared uint) +0:? 'gs_uc' ( shared uint) +0:? 'gs_ua2' ( shared 2-component vector of uint) +0:? 'gs_ub2' ( shared 2-component vector of uint) +0:? 'gs_uc2' ( shared 2-component vector of uint) +0:? 'gs_ua3' ( shared 3-component vector of uint) +0:? 'gs_ub3' ( shared 3-component vector of uint) +0:? 'gs_uc3' ( shared 3-component vector of uint) +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) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:17 Function Definition: PixelShaderFunctionS(f1;f1;f1;u1;u1; ( temp float) +0:17 Function Parameters: +0:17 'inF0' ( in float) +0:17 'inF1' ( in float) +0:17 'inF2' ( in float) +0:17 'inU0' ( in uint) +0:17 'inU1' ( in uint) +0:? Sequence +0:20 Sequence +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:21 Sequence +0:21 move second child to first child ( temp float) +0:21 'r001' ( temp float) +0:21 Absolute value ( temp float) +0:21 'inF0' ( in float) +0:22 Sequence +0:22 move second child to first child ( temp float) +0:22 'r002' ( temp float) +0:22 arc cosine ( temp float) +0:22 'inF0' ( in float) +0:23 Sequence +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:24 Sequence +0:24 move second child to first child ( temp float) +0:24 'r004' ( temp float) +0:24 arc sine ( temp float) +0:24 'inF0' ( in float) +0:25 Sequence +0:25 move second child to first child ( temp int) +0:25 'r005' ( temp int) +0:25 floatBitsToInt ( temp int) +0:25 'inF0' ( in float) +0:26 Sequence +0:26 move second child to first child ( temp uint) +0:26 'r006' ( temp uint) +0:26 floatBitsToUint ( temp uint) +0:26 'inF0' ( in float) +0:27 Sequence +0:27 move second child to first child ( temp float) +0:27 'r007' ( temp float) +0:27 intBitsToFloat ( temp float) +0:27 'inU0' ( in uint) +0:29 Sequence +0:29 move second child to first child ( temp float) +0:29 'r009' ( temp float) +0:29 arc tangent ( temp float) +0:29 'inF0' ( in float) +0:30 Sequence +0:30 move second child to first child ( temp float) +0:30 'r010' ( temp float) +0:30 arc tangent ( temp float) +0:30 'inF0' ( in float) +0:30 'inF1' ( in float) +0:31 Sequence +0:31 move second child to first child ( temp float) +0:31 'r011' ( temp float) +0:31 Ceiling ( temp float) +0:31 'inF0' ( in float) +0:32 Sequence +0:32 move second child to first child ( temp float) +0:32 'r012' ( temp float) +0:32 clamp ( temp float) +0:32 'inF0' ( in float) +0:32 'inF1' ( in float) +0:32 'inF2' ( in float) +0:33 Test condition and select ( temp void) +0:33 Condition +0:33 Compare Less Than ( temp bool) +0:33 'inF0' ( in float) +0:33 Constant: +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: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 '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: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:38 Sequence +0:38 move second child to first child ( temp float) +0:38 'r018' ( temp float) +0:38 dPdxCoarse ( 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 '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 '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 '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 '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 '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:48 Sequence +0:48 move second child to first child ( temp float) +0:48 'r028' ( temp float) +0:48 exp2 ( 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:50 Sequence +0:50 move second child to first child ( temp uint) +0:50 'r030' ( temp uint) +0:50 Convert int to uint ( temp uint) +0:50 findLSB ( 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:54 Sequence +0:54 move second child to first child ( temp float) +0:54 'r034' ( temp float) +0:54 Fraction ( temp float) +0:54 'inF0' ( 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 '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) +0:56 fwidth ( temp float) +0:56 'inF0' ( in float) +0:57 Sequence +0:57 move second child to first child ( temp bool) +0:57 'r037' ( temp bool) +0:57 isinf ( temp bool) +0:57 'inF0' ( in float) +0:58 Sequence +0:58 move second child to first child ( temp bool) +0:58 'r038' ( temp bool) +0:58 isnan ( temp bool) +0:58 'inF0' ( in float) +0:59 Sequence +0:59 move second child to first child ( temp float) +0:59 'r039' ( temp float) +0:59 ldexp ( temp float) +0:59 'inF0' ( in float) +0:59 'inF1' ( in float) +0:60 Sequence +0:60 move second child to first child ( temp float) +0:60 'r039a' ( temp float) +0:60 mix ( temp float) +0:60 'inF0' ( in float) +0:60 'inF1' ( in float) +0:60 'inF2' ( in float) +0:61 Sequence +0:61 move second child to first child ( temp float) +0:61 'r040' ( temp float) +0:61 log ( temp float) +0:61 'inF0' ( in float) +0:62 Sequence +0:62 move second child to first child ( temp float) +0:62 'r041' ( temp float) +0:62 component-wise multiply ( temp float) +0:62 log2 ( temp float) +0:62 'inF0' ( in float) +0:62 Constant: +0:62 0.301030 +0:63 Sequence +0:63 move second child to first child ( temp float) +0:63 'r042' ( temp float) +0:63 log2 ( temp float) +0:63 'inF0' ( in float) +0:64 Sequence +0:64 move second child to first child ( temp float) +0:64 'r043' ( temp float) +0:64 max ( temp float) +0:64 'inF0' ( in float) +0:64 'inF1' ( in float) +0:65 Sequence +0:65 move second child to first child ( temp float) +0:65 'r044' ( temp float) +0:65 min ( temp float) +0:65 'inF0' ( in float) +0:65 'inF1' ( in float) +0:66 Sequence +0:66 move second child to first child ( temp float) +0:66 'r045' ( temp float) +0:66 pow ( temp float) +0:66 'inF0' ( in float) +0:66 'inF1' ( in float) +0:67 Sequence +0:67 move second child to first child ( temp float) +0:67 'r046' ( temp float) +0:67 radians ( temp float) +0:67 'inF0' ( in float) +0:68 Sequence +0:68 move second child to first child ( temp float) +0:68 'r047' ( temp float) +0:68 divide ( temp float) +0:68 Constant: +0:68 1.000000 +0:68 'inF0' ( in float) +0:69 Sequence +0:69 move second child to first child ( temp uint) +0:69 'r048' ( temp uint) +0:69 Convert int to uint ( temp uint) +0:69 bitFieldReverse ( temp int) +0:69 Constant: +0:69 2 (const int) +0:70 Sequence +0:70 move second child to first child ( temp float) +0:70 'r049' ( temp float) +0:70 roundEven ( temp float) +0:70 'inF0' ( in float) +0:71 Sequence +0:71 move second child to first child ( temp float) +0:71 'r050' ( temp float) +0:71 inverse sqrt ( temp float) +0:71 'inF0' ( in float) +0:72 Sequence +0:72 move second child to first child ( temp float) +0:72 'r051' ( temp float) +0:72 clamp ( temp float) +0:72 'inF0' ( in float) +0:72 Constant: +0:72 0.000000 +0:72 Constant: +0:72 1.000000 +0:73 Sequence +0:73 move second child to first child ( temp float) +0:73 'r052' ( temp float) +0:73 Sign ( temp float) +0:73 'inF0' ( in float) +0:74 Sequence +0:74 move second child to first child ( temp float) +0:74 'r053' ( temp float) +0:74 sine ( temp float) +0:74 'inF0' ( in float) +0:75 Sequence +0:75 move second child to first child ( temp float) +0:75 'inF1' ( in float) +0:75 sine ( temp float) +0:75 'inF0' ( in float) +0:75 move second child to first child ( temp float) +0:75 'inF2' ( in float) +0:75 cosine ( temp float) +0:75 'inF0' ( in float) +0:76 Sequence +0:76 move second child to first child ( temp float) +0:76 'r055' ( temp float) +0:76 hyp. sine ( temp float) +0:76 'inF0' ( in float) +0:77 Sequence +0:77 move second child to first child ( temp float) +0:77 'r056' ( temp float) +0:77 smoothstep ( temp float) +0:77 'inF0' ( in float) +0:77 'inF1' ( in float) +0:77 'inF2' ( in float) +0:78 Sequence +0:78 move second child to first child ( temp float) +0:78 'r057' ( temp float) +0:78 sqrt ( temp float) +0:78 'inF0' ( in float) +0:79 Sequence +0:79 move second child to first child ( temp float) +0:79 'r058' ( temp float) +0:79 step ( temp float) +0:79 'inF0' ( in float) +0:79 'inF1' ( in float) +0:80 Sequence +0:80 move second child to first child ( temp float) +0:80 'r059' ( temp float) +0:80 tangent ( temp float) +0:80 'inF0' ( in float) +0:81 Sequence +0:81 move second child to first child ( temp float) +0:81 'r060' ( temp float) +0:81 hyp. tangent ( temp float) +0:81 'inF0' ( in float) +0:83 Sequence +0:83 move second child to first child ( temp float) +0:83 'r061' ( temp float) +0:83 trunc ( temp float) +0:83 'inF0' ( in float) +0:85 Branch: Return with expression +0:85 Constant: +0:85 0.000000 +0:89 Function Definition: PixelShaderFunction1(vf1;vf1;vf1; ( temp 1-component vector of float) +0:89 Function Parameters: +0:89 'inF0' ( in 1-component vector of float) +0:89 'inF1' ( in 1-component vector of float) +0:89 'inF2' ( in 1-component vector of float) +0:? Sequence +0:91 Branch: Return with expression +0:91 Constant: +0:91 0.000000 +0:95 Function Definition: PixelShaderFunction2(vf2;vf2;vf2;vu2;vu2; ( temp 2-component vector of float) +0:95 Function Parameters: +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:95 'inU0' ( in 2-component vector of uint) +0:95 'inU1' ( in 2-component vector of uint) +0:? Sequence +0:98 Sequence +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: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) +0:99 Absolute value ( temp 2-component vector of float) +0:99 'inF0' ( in 2-component vector of float) +0:100 Sequence +0:100 move second child to first child ( temp 2-component vector of float) +0:100 'r002' ( temp 2-component vector of float) +0:100 arc cosine ( temp 2-component vector of float) +0:100 'inF0' ( in 2-component vector of float) +0:101 Sequence +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: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) +0:102 arc sine ( temp 2-component vector of float) +0:102 'inF0' ( in 2-component vector of float) +0:103 Sequence +0:103 move second child to first child ( temp 2-component vector of int) +0:103 'r005' ( temp 2-component vector of int) +0:103 floatBitsToInt ( temp 2-component vector of int) +0:103 'inF0' ( in 2-component vector of float) +0:104 Sequence +0:104 move second child to first child ( temp 2-component vector of uint) +0:104 'r006' ( temp 2-component vector of uint) +0:104 floatBitsToUint ( temp 2-component vector of uint) +0:104 'inF0' ( in 2-component vector of float) +0:105 Sequence +0:105 move second child to first child ( temp 2-component vector of float) +0:105 'r007' ( temp 2-component vector of float) +0:105 intBitsToFloat ( temp 2-component vector of float) +0:105 'inU0' ( in 2-component vector of uint) +0:107 Sequence +0:107 move second child to first child ( temp 2-component vector of float) +0:107 'r009' ( temp 2-component vector of float) +0:107 arc tangent ( temp 2-component vector of float) +0:107 'inF0' ( in 2-component vector of float) +0:108 Sequence +0:108 move second child to first child ( temp 2-component vector of float) +0:108 'r010' ( temp 2-component vector of float) +0:108 arc tangent ( temp 2-component vector of float) +0:108 'inF0' ( in 2-component vector of float) +0:108 'inF1' ( in 2-component vector of float) +0:109 Sequence +0:109 move second child to first child ( temp 2-component vector of float) +0:109 'r011' ( temp 2-component vector of float) +0:109 Ceiling ( temp 2-component vector of float) +0:109 'inF0' ( in 2-component vector of float) +0:110 Sequence +0:110 move second child to first child ( temp 2-component vector of float) +0:110 'r012' ( temp 2-component vector of float) +0:110 clamp ( temp 2-component vector of float) +0:110 'inF0' ( in 2-component vector of float) +0:110 'inF1' ( in 2-component vector of float) +0:110 'inF2' ( in 2-component vector of float) +0:111 Test condition and select ( temp void) +0:111 Condition +0:111 any ( temp bool) +0:111 Compare Less Than ( temp 2-component vector of bool) +0:111 'inF0' ( in 2-component vector of float) +0:111 Constant: +0:111 0.000000 +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: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 '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:? 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 '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 '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 '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 '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 '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 '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: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 '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: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 '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 '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:? 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:? 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: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 'inF0' ( 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 '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) +0:140 fwidth ( temp 2-component vector of float) +0:140 'inF0' ( in 2-component vector of float) +0:141 Sequence +0:141 move second child to first child ( temp 2-component vector of bool) +0:141 'r039' ( temp 2-component vector of bool) +0:141 isinf ( temp 2-component vector of bool) +0:141 'inF0' ( in 2-component vector of float) +0:142 Sequence +0:142 move second child to first child ( temp 2-component vector of bool) +0:142 'r040' ( temp 2-component vector of bool) +0:142 isnan ( temp 2-component vector of bool) +0:142 'inF0' ( in 2-component vector of float) +0:143 Sequence +0:143 move second child to first child ( temp 2-component vector of float) +0:143 'r041' ( temp 2-component vector of float) +0:143 ldexp ( temp 2-component vector of float) +0:143 'inF0' ( in 2-component vector of float) +0:143 'inF1' ( in 2-component vector of float) +0:144 Sequence +0:144 move second child to first child ( temp 2-component vector of float) +0:144 'r039a' ( temp 2-component vector of float) +0:144 mix ( temp 2-component vector of float) +0:144 'inF0' ( in 2-component vector of float) +0:144 'inF1' ( in 2-component vector of float) +0:144 'inF2' ( in 2-component vector of float) +0:145 Sequence +0:145 move second child to first child ( temp float) +0:145 'r042' ( temp float) +0:145 length ( temp float) +0:145 'inF0' ( in 2-component vector of float) +0:146 Sequence +0:146 move second child to first child ( temp 2-component vector of float) +0:146 'r043' ( temp 2-component vector of float) +0:146 log ( temp 2-component vector of float) +0:146 'inF0' ( in 2-component vector of float) +0:147 Sequence +0:147 move second child to first child ( temp 2-component vector of float) +0:147 'r044' ( temp 2-component vector of float) +0:147 vector-scale ( temp 2-component vector of float) +0:147 log2 ( temp 2-component vector of float) +0:147 'inF0' ( in 2-component vector of float) +0:147 Constant: +0:147 0.301030 +0:148 Sequence +0:148 move second child to first child ( temp 2-component vector of float) +0:148 'r045' ( temp 2-component vector of float) +0:148 log2 ( temp 2-component vector of float) +0:148 'inF0' ( in 2-component vector of float) +0:149 Sequence +0:149 move second child to first child ( temp 2-component vector of float) +0:149 'r046' ( temp 2-component vector of float) +0:149 max ( temp 2-component vector of float) +0:149 'inF0' ( in 2-component vector of float) +0:149 'inF1' ( in 2-component vector of float) +0:150 Sequence +0:150 move second child to first child ( temp 2-component vector of float) +0:150 'r047' ( temp 2-component vector of float) +0:150 min ( temp 2-component vector of float) +0:150 'inF0' ( in 2-component vector of float) +0:150 'inF1' ( in 2-component vector of float) +0:151 Sequence +0:151 move second child to first child ( temp 2-component vector of float) +0:151 'r048' ( temp 2-component vector of float) +0:151 normalize ( temp 2-component vector of float) +0:151 'inF0' ( in 2-component vector of float) +0:152 Sequence +0:152 move second child to first child ( temp 2-component vector of float) +0:152 'r049' ( temp 2-component vector of float) +0:152 pow ( temp 2-component vector of float) +0:152 'inF0' ( in 2-component vector of float) +0:152 'inF1' ( in 2-component vector of float) +0:153 Sequence +0:153 move second child to first child ( temp 2-component vector of float) +0:153 'r050' ( temp 2-component vector of float) +0:153 radians ( temp 2-component vector of float) +0:153 'inF0' ( in 2-component vector of float) +0:154 Sequence +0:154 move second child to first child ( temp 2-component vector of float) +0:154 'r051' ( temp 2-component vector of float) +0:154 divide ( temp 2-component vector of float) +0:154 Constant: +0:154 1.000000 +0:154 'inF0' ( in 2-component vector of float) +0:155 Sequence +0:155 move second child to first child ( temp 2-component vector of float) +0:155 'r052' ( temp 2-component vector of float) +0:155 reflect ( temp 2-component vector of float) +0:155 'inF0' ( in 2-component vector of float) +0:155 'inF1' ( in 2-component vector of float) +0:156 Sequence +0:156 move second child to first child ( temp 2-component vector of float) +0:156 'r053' ( temp 2-component vector of float) +0:156 refract ( temp 2-component vector of float) +0:156 'inF0' ( in 2-component vector of float) +0:156 'inF1' ( in 2-component vector of float) +0:156 Constant: +0:156 2.000000 +0:157 Sequence +0:157 move second child to first child ( temp 2-component vector of uint) +0:157 'r054' ( temp 2-component vector of uint) +0:? bitFieldReverse ( temp 2-component vector of uint) +0:? Constant: +0:? 1 (const uint) +0:? 2 (const uint) +0:158 Sequence +0:158 move second child to first child ( temp 2-component vector of float) +0:158 'r055' ( temp 2-component vector of float) +0:158 roundEven ( temp 2-component vector of float) +0:158 'inF0' ( in 2-component vector of float) +0:159 Sequence +0:159 move second child to first child ( temp 2-component vector of float) +0:159 'r056' ( temp 2-component vector of float) +0:159 inverse sqrt ( temp 2-component vector of float) +0:159 'inF0' ( in 2-component vector of float) +0:160 Sequence +0:160 move second child to first child ( temp 2-component vector of float) +0:160 'r057' ( temp 2-component vector of float) +0:160 clamp ( temp 2-component vector of float) +0:160 'inF0' ( in 2-component vector of float) +0:160 Constant: +0:160 0.000000 +0:160 Constant: +0:160 1.000000 +0:161 Sequence +0:161 move second child to first child ( temp 2-component vector of float) +0:161 'r058' ( temp 2-component vector of float) +0:161 Sign ( temp 2-component vector of float) +0:161 'inF0' ( in 2-component vector of float) +0:162 Sequence +0:162 move second child to first child ( temp 2-component vector of float) +0:162 'r059' ( temp 2-component vector of float) +0:162 sine ( temp 2-component vector of float) +0:162 'inF0' ( in 2-component vector of float) +0:163 Sequence +0:163 move second child to first child ( temp 2-component vector of float) +0:163 'inF1' ( in 2-component vector of float) +0:163 sine ( temp 2-component vector of float) +0:163 'inF0' ( in 2-component vector of float) +0:163 move second child to first child ( temp 2-component vector of float) +0:163 'inF2' ( in 2-component vector of float) +0:163 cosine ( temp 2-component vector of float) +0:163 'inF0' ( in 2-component vector of float) +0:164 Sequence +0:164 move second child to first child ( temp 2-component vector of float) +0:164 'r060' ( temp 2-component vector of float) +0:164 hyp. sine ( temp 2-component vector of float) +0:164 'inF0' ( in 2-component vector of float) +0:165 Sequence +0:165 move second child to first child ( temp 2-component vector of float) +0:165 'r061' ( temp 2-component vector of float) +0:165 smoothstep ( temp 2-component vector of float) +0:165 'inF0' ( in 2-component vector of float) +0:165 'inF1' ( in 2-component vector of float) +0:165 'inF2' ( in 2-component vector of float) +0:166 Sequence +0:166 move second child to first child ( temp 2-component vector of float) +0:166 'r062' ( temp 2-component vector of float) +0:166 sqrt ( temp 2-component vector of float) +0:166 'inF0' ( in 2-component vector of float) +0:167 Sequence +0:167 move second child to first child ( temp 2-component vector of float) +0:167 'r063' ( temp 2-component vector of float) +0:167 step ( temp 2-component vector of float) +0:167 'inF0' ( in 2-component vector of float) +0:167 'inF1' ( in 2-component vector of float) +0:168 Sequence +0:168 move second child to first child ( temp 2-component vector of float) +0:168 'r064' ( temp 2-component vector of float) +0:168 tangent ( temp 2-component vector of float) +0:168 'inF0' ( in 2-component vector of float) +0:169 Sequence +0:169 move second child to first child ( temp 2-component vector of float) +0:169 'r065' ( temp 2-component vector of float) +0:169 hyp. tangent ( temp 2-component vector of float) +0:169 'inF0' ( in 2-component vector of float) +0:171 Sequence +0:171 move second child to first child ( temp 2-component vector of float) +0:171 'r066' ( temp 2-component vector of float) +0:171 trunc ( temp 2-component vector of float) +0:171 'inF0' ( in 2-component vector of float) +0:174 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:178 Function Definition: PixelShaderFunction3(vf3;vf3;vf3;vu3;vu3; ( temp 3-component vector of float) +0:178 Function Parameters: +0:178 'inF0' ( in 3-component vector of float) +0:178 'inF1' ( in 3-component vector of float) +0:178 'inF2' ( in 3-component vector of float) +0:178 'inU0' ( in 3-component vector of uint) +0:178 'inU1' ( in 3-component vector of uint) +0:? Sequence +0:181 Sequence +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: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) +0:182 Absolute value ( temp 3-component vector of float) +0:182 'inF0' ( in 3-component vector of float) +0:183 Sequence +0:183 move second child to first child ( temp 3-component vector of float) +0:183 'r002' ( temp 3-component vector of float) +0:183 arc cosine ( temp 3-component vector of float) +0:183 'inF0' ( in 3-component vector of float) +0:184 Sequence +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: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) +0:185 arc sine ( temp 3-component vector of float) +0:185 'inF0' ( in 3-component vector of float) +0:186 Sequence +0:186 move second child to first child ( temp 3-component vector of int) +0:186 'r005' ( temp 3-component vector of int) +0:186 floatBitsToInt ( temp 3-component vector of int) +0:186 'inF0' ( in 3-component vector of float) +0:187 Sequence +0:187 move second child to first child ( temp 3-component vector of uint) +0:187 'r006' ( temp 3-component vector of uint) +0:187 floatBitsToUint ( temp 3-component vector of uint) +0:187 'inF0' ( in 3-component vector of float) +0:188 Sequence +0:188 move second child to first child ( temp 3-component vector of float) +0:188 'r007' ( temp 3-component vector of float) +0:188 intBitsToFloat ( temp 3-component vector of float) +0:188 'inU0' ( in 3-component vector of uint) +0:190 Sequence +0:190 move second child to first child ( temp 3-component vector of float) +0:190 'r009' ( temp 3-component vector of float) +0:190 arc tangent ( temp 3-component vector of float) +0:190 'inF0' ( in 3-component vector of float) +0:191 Sequence +0:191 move second child to first child ( temp 3-component vector of float) +0:191 'r010' ( temp 3-component vector of float) +0:191 arc tangent ( temp 3-component vector of float) +0:191 'inF0' ( in 3-component vector of float) +0:191 'inF1' ( in 3-component vector of float) +0:192 Sequence +0:192 move second child to first child ( temp 3-component vector of float) +0:192 'r011' ( temp 3-component vector of float) +0:192 Ceiling ( temp 3-component vector of float) +0:192 'inF0' ( in 3-component vector of float) +0:193 Sequence +0:193 move second child to first child ( temp 3-component vector of float) +0:193 'r012' ( temp 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 'inF1' ( in 3-component vector of float) +0:193 'inF2' ( in 3-component vector of float) +0:194 Test condition and select ( temp void) +0:194 Condition +0:194 any ( temp bool) +0:194 Compare Less Than ( temp 3-component vector of bool) +0:194 'inF0' ( in 3-component vector of float) +0:194 Constant: +0:194 0.000000 +0:194 0.000000 +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: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 '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:? 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 'inF0' ( 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 '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 '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 '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 '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 '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 '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 '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 '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: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 '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 '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:? 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:? 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: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 'inF0' ( 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 '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) +0:221 fwidth ( temp 3-component vector of float) +0:221 'inF0' ( in 3-component vector of float) +0:222 Sequence +0:222 move second child to first child ( temp 3-component vector of bool) +0:222 'r040' ( temp 3-component vector of bool) +0:222 isinf ( temp 3-component vector of bool) +0:222 'inF0' ( in 3-component vector of float) +0:223 Sequence +0:223 move second child to first child ( temp 3-component vector of bool) +0:223 'r041' ( temp 3-component vector of bool) +0:223 isnan ( temp 3-component vector of bool) +0:223 'inF0' ( in 3-component vector of float) +0:224 Sequence +0:224 move second child to first child ( temp 3-component vector of float) +0:224 'r042' ( temp 3-component vector of float) +0:224 ldexp ( temp 3-component vector of float) +0:224 'inF0' ( in 3-component vector of float) +0:224 'inF1' ( in 3-component vector of float) +0:225 Sequence +0:225 move second child to first child ( temp 3-component vector of float) +0:225 'r039a' ( temp 3-component vector of float) +0:225 mix ( temp 3-component vector of float) +0:225 'inF0' ( in 3-component vector of float) +0:225 'inF1' ( in 3-component vector of float) +0:225 'inF2' ( in 3-component vector of float) +0:226 Sequence +0:226 move second child to first child ( temp 3-component vector of float) +0:226 'r039b' ( temp 3-component vector of float) +0:226 mix ( temp 3-component vector of float) +0:226 'inF0' ( in 3-component vector of float) +0:226 'inF1' ( in 3-component vector of float) +0:226 Constant: +0:226 0.300000 +0:227 Sequence +0:227 move second child to first child ( temp float) +0:227 'r043' ( temp float) +0:227 length ( temp float) +0:227 'inF0' ( in 3-component vector of float) +0:228 Sequence +0:228 move second child to first child ( temp 3-component vector of float) +0:228 'r044' ( temp 3-component vector of float) +0:228 log ( temp 3-component vector of float) +0:228 'inF0' ( in 3-component vector of float) +0:229 Sequence +0:229 move second child to first child ( temp 3-component vector of float) +0:229 'r045' ( temp 3-component vector of float) +0:229 vector-scale ( temp 3-component vector of float) +0:229 log2 ( temp 3-component vector of float) +0:229 'inF0' ( in 3-component vector of float) +0:229 Constant: +0:229 0.301030 +0:230 Sequence +0:230 move second child to first child ( temp 3-component vector of float) +0:230 'r046' ( temp 3-component vector of float) +0:230 log2 ( temp 3-component vector of float) +0:230 'inF0' ( in 3-component vector of float) +0:231 Sequence +0:231 move second child to first child ( temp 3-component vector of float) +0:231 'r047' ( temp 3-component vector of float) +0:231 max ( temp 3-component vector of float) +0:231 'inF0' ( in 3-component vector of float) +0:231 'inF1' ( in 3-component vector of float) +0:232 Sequence +0:232 move second child to first child ( temp 3-component vector of float) +0:232 'r048' ( temp 3-component vector of float) +0:232 min ( temp 3-component vector of float) +0:232 'inF0' ( in 3-component vector of float) +0:232 'inF1' ( in 3-component vector of float) +0:233 Sequence +0:233 move second child to first child ( temp 3-component vector of float) +0:233 'r049' ( temp 3-component vector of float) +0:233 normalize ( temp 3-component vector of float) +0:233 'inF0' ( in 3-component vector of float) +0:234 Sequence +0:234 move second child to first child ( temp 3-component vector of float) +0:234 'r050' ( temp 3-component vector of float) +0:234 pow ( temp 3-component vector of float) +0:234 'inF0' ( in 3-component vector of float) +0:234 'inF1' ( in 3-component vector of float) +0:235 Sequence +0:235 move second child to first child ( temp 3-component vector of float) +0:235 'r051' ( temp 3-component vector of float) +0:235 radians ( temp 3-component vector of float) +0:235 'inF0' ( in 3-component vector of float) +0:236 Sequence +0:236 move second child to first child ( temp 3-component vector of float) +0:236 'r052' ( temp 3-component vector of float) +0:236 divide ( temp 3-component vector of float) +0:236 Constant: +0:236 1.000000 +0:236 'inF0' ( in 3-component vector of float) +0:237 Sequence +0:237 move second child to first child ( temp 3-component vector of float) +0:237 'r053' ( temp 3-component vector of float) +0:237 reflect ( temp 3-component vector of float) +0:237 'inF0' ( in 3-component vector of float) +0:237 'inF1' ( in 3-component vector of float) +0:238 Sequence +0:238 move second child to first child ( temp 3-component vector of float) +0:238 'r054' ( temp 3-component vector of float) +0:238 refract ( temp 3-component vector of float) +0:238 'inF0' ( in 3-component vector of float) +0:238 'inF1' ( in 3-component vector of float) +0:238 Constant: +0:238 2.000000 +0:239 Sequence +0:239 move second child to first child ( temp 3-component vector of uint) +0:239 'r055' ( temp 3-component vector of uint) +0:? bitFieldReverse ( temp 3-component vector of uint) +0:? Constant: +0:? 1 (const uint) +0:? 2 (const uint) +0:? 3 (const uint) +0:240 Sequence +0:240 move second child to first child ( temp 3-component vector of float) +0:240 'r056' ( temp 3-component vector of float) +0:240 roundEven ( temp 3-component vector of float) +0:240 'inF0' ( in 3-component vector of float) +0:241 Sequence +0:241 move second child to first child ( temp 3-component vector of float) +0:241 'r057' ( temp 3-component vector of float) +0:241 inverse sqrt ( temp 3-component vector of float) +0:241 'inF0' ( in 3-component vector of float) +0:242 Sequence +0:242 move second child to first child ( temp 3-component vector of float) +0:242 'r058' ( temp 3-component vector of float) +0:242 clamp ( temp 3-component vector of float) +0:242 'inF0' ( in 3-component vector of float) +0:242 Constant: +0:242 0.000000 +0:242 Constant: +0:242 1.000000 +0:243 Sequence +0:243 move second child to first child ( temp 3-component vector of float) +0:243 'r059' ( temp 3-component vector of float) +0:243 Sign ( temp 3-component vector of float) +0:243 'inF0' ( in 3-component vector of float) +0:244 Sequence +0:244 move second child to first child ( temp 3-component vector of float) +0:244 'r060' ( temp 3-component vector of float) +0:244 sine ( temp 3-component vector of float) +0:244 'inF0' ( in 3-component vector of float) +0:245 Sequence +0:245 move second child to first child ( temp 3-component vector of float) +0:245 'inF1' ( in 3-component vector of float) +0:245 sine ( temp 3-component vector of float) +0:245 'inF0' ( in 3-component vector of float) +0:245 move second child to first child ( temp 3-component vector of float) +0:245 'inF2' ( in 3-component vector of float) +0:245 cosine ( temp 3-component vector of float) +0:245 'inF0' ( in 3-component vector of float) +0:246 Sequence +0:246 move second child to first child ( temp 3-component vector of float) +0:246 'r061' ( temp 3-component vector of float) +0:246 hyp. sine ( temp 3-component vector of float) +0:246 'inF0' ( in 3-component vector of float) +0:247 Sequence +0:247 move second child to first child ( temp 3-component vector of float) +0:247 'r062' ( temp 3-component vector of float) +0:247 smoothstep ( temp 3-component vector of float) +0:247 'inF0' ( in 3-component vector of float) +0:247 'inF1' ( in 3-component vector of float) +0:247 'inF2' ( in 3-component vector of float) +0:248 Sequence +0:248 move second child to first child ( temp 3-component vector of float) +0:248 'r063' ( temp 3-component vector of float) +0:248 sqrt ( temp 3-component vector of float) +0:248 'inF0' ( in 3-component vector of float) +0:249 Sequence +0:249 move second child to first child ( temp 3-component vector of float) +0:249 'r064' ( temp 3-component vector of float) +0:249 step ( temp 3-component vector of float) +0:249 'inF0' ( in 3-component vector of float) +0:249 'inF1' ( in 3-component vector of float) +0:250 Sequence +0:250 move second child to first child ( temp 3-component vector of float) +0:250 'r065' ( temp 3-component vector of float) +0:250 tangent ( temp 3-component vector of float) +0:250 'inF0' ( in 3-component vector of float) +0:251 Sequence +0:251 move second child to first child ( temp 3-component vector of float) +0:251 'r066' ( temp 3-component vector of float) +0:251 hyp. tangent ( temp 3-component vector of float) +0:251 'inF0' ( in 3-component vector of float) +0:253 Sequence +0:253 move second child to first child ( temp 3-component vector of float) +0:253 'r067' ( temp 3-component vector of float) +0:253 trunc ( temp 3-component vector of float) +0:253 'inF0' ( in 3-component vector of float) +0:256 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:260 Function Definition: PixelShaderFunction(vf4;vf4;vf4;vu4;vu4; ( temp 4-component vector of float) +0:260 Function Parameters: +0:260 'inF0' ( in 4-component vector of float) +0:260 'inF1' ( in 4-component vector of float) +0:260 'inF2' ( in 4-component vector of float) +0:260 'inU0' ( in 4-component vector of uint) +0:260 'inU1' ( in 4-component vector of uint) +0:? Sequence +0:263 Sequence +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: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) +0:264 Absolute value ( temp 4-component vector of float) +0:264 'inF0' ( in 4-component vector of float) +0:265 Sequence +0:265 move second child to first child ( temp 4-component vector of float) +0:265 'r002' ( temp 4-component vector of float) +0:265 arc cosine ( temp 4-component vector of float) +0:265 'inF0' ( in 4-component vector of float) +0:266 Sequence +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: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) +0:267 arc sine ( temp 4-component vector of float) +0:267 'inF0' ( in 4-component vector of float) +0:268 Sequence +0:268 move second child to first child ( temp 4-component vector of int) +0:268 'r005' ( temp 4-component vector of int) +0:268 floatBitsToInt ( temp 4-component vector of int) +0:268 'inF0' ( in 4-component vector of float) +0:269 Sequence +0:269 move second child to first child ( temp 4-component vector of uint) +0:269 'r006' ( temp 4-component vector of uint) +0:269 floatBitsToUint ( temp 4-component vector of uint) +0:269 'inF0' ( in 4-component vector of float) +0:270 Sequence +0:270 move second child to first child ( temp 4-component vector of float) +0:270 'r007' ( temp 4-component vector of float) +0:270 intBitsToFloat ( temp 4-component vector of float) +0:270 'inU0' ( in 4-component vector of uint) +0:272 Sequence +0:272 move second child to first child ( temp 4-component vector of float) +0:272 'r009' ( temp 4-component vector of float) +0:272 arc tangent ( temp 4-component vector of float) +0:272 'inF0' ( in 4-component vector of float) +0:273 Sequence +0:273 move second child to first child ( temp 4-component vector of float) +0:273 'r010' ( temp 4-component vector of float) +0:273 arc tangent ( temp 4-component vector of float) +0:273 'inF0' ( in 4-component vector of float) +0:273 'inF1' ( in 4-component vector of float) +0:274 Sequence +0:274 move second child to first child ( temp 4-component vector of float) +0:274 'r011' ( temp 4-component vector of float) +0:274 Ceiling ( temp 4-component vector of float) +0:274 'inF0' ( in 4-component vector of float) +0:275 Sequence +0:275 move second child to first child ( temp 4-component vector of float) +0:275 'r012' ( temp 4-component vector of float) +0:275 clamp ( temp 4-component vector of float) +0:275 'inF0' ( in 4-component vector of float) +0:275 'inF1' ( in 4-component vector of float) +0:275 'inF2' ( in 4-component vector of float) +0:276 Test condition and select ( temp void) +0:276 Condition +0:276 any ( temp bool) +0:276 Compare Less Than ( temp 4-component vector of bool) +0:276 'inF0' ( in 4-component vector of float) +0:276 Constant: +0:276 0.000000 +0:276 0.000000 +0:276 0.000000 +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: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 '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:? 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 '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 '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 '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 '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 '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 '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 '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 '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: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 '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 '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:? 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:? 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: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 'inF0' ( 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 '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) +0:303 fwidth ( temp 4-component vector of float) +0:303 'inF0' ( in 4-component vector of float) +0:304 Sequence +0:304 move second child to first child ( temp 4-component vector of bool) +0:304 'r040' ( temp 4-component vector of bool) +0:304 isinf ( temp 4-component vector of bool) +0:304 'inF0' ( in 4-component vector of float) +0:305 Sequence +0:305 move second child to first child ( temp 4-component vector of bool) +0:305 'r041' ( temp 4-component vector of bool) +0:305 isnan ( temp 4-component vector of bool) +0:305 'inF0' ( in 4-component vector of float) +0:306 Sequence +0:306 move second child to first child ( temp 4-component vector of float) +0:306 'r042' ( temp 4-component vector of float) +0:306 ldexp ( temp 4-component vector of float) +0:306 'inF0' ( in 4-component vector of float) +0:306 'inF1' ( in 4-component vector of float) +0:307 Sequence +0:307 move second child to first child ( temp 4-component vector of float) +0:307 'r039a' ( temp 4-component vector of float) +0:307 mix ( temp 4-component vector of float) +0:307 'inF0' ( in 4-component vector of float) +0:307 'inF1' ( in 4-component vector of float) +0:307 'inF2' ( in 4-component vector of float) +0:308 Sequence +0:308 move second child to first child ( temp float) +0:308 'r043' ( temp float) +0:308 length ( temp float) +0:308 'inF0' ( in 4-component vector of float) +0:309 Sequence +0:309 move second child to first child ( temp 4-component vector of float) +0:309 'r044' ( temp 4-component vector of float) +0:309 log ( temp 4-component vector of float) +0:309 'inF0' ( in 4-component vector of float) +0:310 Sequence +0:310 move second child to first child ( temp 4-component vector of float) +0:310 'r045' ( temp 4-component vector of float) +0:310 vector-scale ( temp 4-component vector of float) +0:310 log2 ( temp 4-component vector of float) +0:310 'inF0' ( in 4-component vector of float) +0:310 Constant: +0:310 0.301030 +0:311 Sequence +0:311 move second child to first child ( temp 4-component vector of float) +0:311 'r046' ( temp 4-component vector of float) +0:311 log2 ( temp 4-component vector of float) +0:311 'inF0' ( in 4-component vector of float) +0:312 Sequence +0:312 move second child to first child ( temp 4-component vector of float) +0:312 'r047' ( temp 4-component vector of float) +0:312 max ( temp 4-component vector of float) +0:312 'inF0' ( in 4-component vector of float) +0:312 'inF1' ( in 4-component vector of float) +0:313 Sequence +0:313 move second child to first child ( temp 4-component vector of float) +0:313 'r048' ( temp 4-component vector of float) +0:313 min ( temp 4-component vector of float) +0:313 'inF0' ( in 4-component vector of float) +0:313 'inF1' ( in 4-component vector of float) +0:314 Sequence +0:314 move second child to first child ( temp 4-component vector of float) +0:314 'r049' ( temp 4-component vector of float) +0:314 normalize ( temp 4-component vector of float) +0:314 'inF0' ( in 4-component vector of float) +0:315 Sequence +0:315 move second child to first child ( temp 4-component vector of float) +0:315 'r050' ( temp 4-component vector of float) +0:315 pow ( temp 4-component vector of float) +0:315 'inF0' ( in 4-component vector of float) +0:315 'inF1' ( in 4-component vector of float) +0:316 Sequence +0:316 move second child to first child ( temp 4-component vector of float) +0:316 'r051' ( temp 4-component vector of float) +0:316 radians ( temp 4-component vector of float) +0:316 'inF0' ( in 4-component vector of float) +0:317 Sequence +0:317 move second child to first child ( temp 4-component vector of float) +0:317 'r052' ( temp 4-component vector of float) +0:317 divide ( temp 4-component vector of float) +0:317 Constant: +0:317 1.000000 +0:317 'inF0' ( in 4-component vector of float) +0:318 Sequence +0:318 move second child to first child ( temp 4-component vector of float) +0:318 'r053' ( temp 4-component vector of float) +0:318 reflect ( temp 4-component vector of float) +0:318 'inF0' ( in 4-component vector of float) +0:318 'inF1' ( in 4-component vector of float) +0:319 Sequence +0:319 move second child to first child ( temp 4-component vector of float) +0:319 'r054' ( temp 4-component vector of float) +0:319 refract ( temp 4-component vector of float) +0:319 'inF0' ( in 4-component vector of float) +0:319 'inF1' ( in 4-component vector of float) +0:319 Constant: +0:319 2.000000 +0:320 Sequence +0:320 move second child to first child ( temp 4-component vector of uint) +0:320 'r055' ( temp 4-component vector of uint) +0:? bitFieldReverse ( temp 4-component vector of uint) +0:? Constant: +0:? 1 (const uint) +0:? 2 (const uint) +0:? 3 (const uint) +0:? 4 (const uint) +0:321 Sequence +0:321 move second child to first child ( temp 4-component vector of float) +0:321 'r056' ( temp 4-component vector of float) +0:321 roundEven ( temp 4-component vector of float) +0:321 'inF0' ( in 4-component vector of float) +0:322 Sequence +0:322 move second child to first child ( temp 4-component vector of float) +0:322 'r057' ( temp 4-component vector of float) +0:322 inverse sqrt ( temp 4-component vector of float) +0:322 'inF0' ( in 4-component vector of float) +0:323 Sequence +0:323 move second child to first child ( temp 4-component vector of float) +0:323 'r058' ( temp 4-component vector of float) +0:323 clamp ( temp 4-component vector of float) +0:323 'inF0' ( in 4-component vector of float) +0:323 Constant: +0:323 0.000000 +0:323 Constant: +0:323 1.000000 +0:324 Sequence +0:324 move second child to first child ( temp 4-component vector of float) +0:324 'r059' ( temp 4-component vector of float) +0:324 Sign ( temp 4-component vector of float) +0:324 'inF0' ( in 4-component vector of float) +0:325 Sequence +0:325 move second child to first child ( temp 4-component vector of float) +0:325 'r060' ( temp 4-component vector of float) +0:325 sine ( temp 4-component vector of float) +0:325 'inF0' ( in 4-component vector of float) +0:326 Sequence +0:326 move second child to first child ( temp 4-component vector of float) +0:326 'inF1' ( in 4-component vector of float) +0:326 sine ( temp 4-component vector of float) +0:326 'inF0' ( in 4-component vector of float) +0:326 move second child to first child ( temp 4-component vector of float) +0:326 'inF2' ( in 4-component vector of float) +0:326 cosine ( temp 4-component vector of float) +0:326 'inF0' ( in 4-component vector of float) +0:327 Sequence +0:327 move second child to first child ( temp 4-component vector of float) +0:327 'r061' ( temp 4-component vector of float) +0:327 hyp. sine ( temp 4-component vector of float) +0:327 'inF0' ( in 4-component vector of float) +0:328 Sequence +0:328 move second child to first child ( temp 4-component vector of float) +0:328 'r062' ( temp 4-component vector of float) +0:328 smoothstep ( temp 4-component vector of float) +0:328 'inF0' ( in 4-component vector of float) +0:328 'inF1' ( in 4-component vector of float) +0:328 'inF2' ( in 4-component vector of float) +0:329 Sequence +0:329 move second child to first child ( temp 4-component vector of float) +0:329 'r063' ( temp 4-component vector of float) +0:329 sqrt ( temp 4-component vector of float) +0:329 'inF0' ( in 4-component vector of float) +0:330 Sequence +0:330 move second child to first child ( temp 4-component vector of float) +0:330 'r064' ( temp 4-component vector of float) +0:330 step ( temp 4-component vector of float) +0:330 'inF0' ( in 4-component vector of float) +0:330 'inF1' ( in 4-component vector of float) +0:331 Sequence +0:331 move second child to first child ( temp 4-component vector of float) +0:331 'r065' ( temp 4-component vector of float) +0:331 tangent ( temp 4-component vector of float) +0:331 'inF0' ( in 4-component vector of float) +0:332 Sequence +0:332 move second child to first child ( temp 4-component vector of float) +0:332 'r066' ( temp 4-component vector of float) +0:332 hyp. tangent ( temp 4-component vector of float) +0:332 'inF0' ( in 4-component vector of float) +0:334 Sequence +0:334 move second child to first child ( temp 4-component vector of float) +0:334 'r067' ( temp 4-component vector of float) +0:334 trunc ( temp 4-component vector of float) +0:334 'inF0' ( in 4-component vector of float) +0:337 Branch: Return with expression +0:? Constant: +0:? 1.000000 +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:? 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:? 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:? 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:? Constant: +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +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:? 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:? Constant: +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +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:? 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:? 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:? 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:? Sequence +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 'inF0' ( in 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 'inF0' ( in float) +0:468 'inFV2' ( in 2-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 '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 '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:472 Sequence +0:472 move second child to first child ( temp float) +0:472 'r05' ( 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: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: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: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 'inFV3' ( in 3-component vector 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: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: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 'inF0' ( in float) +0:478 'inFM2x3' ( in 2X3 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 'inFM3x2' ( in 3X2 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 '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 '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:? 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:? 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:? Linker Objects +0:? 'gs_ua' ( shared uint) +0:? 'gs_ub' ( shared uint) +0:? 'gs_uc' ( shared uint) +0:? 'gs_ua2' ( shared 2-component vector of uint) +0:? 'gs_ub2' ( shared 2-component vector of uint) +0:? 'gs_uc2' ( shared 2-component vector of uint) +0:? 'gs_ua3' ( shared 3-component vector of uint) +0:? 'gs_ub3' ( shared 3-component vector of uint) +0:? 'gs_uc3' ( shared 3-component vector of uint) +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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 1833 + + Capability Shader + Capability DerivativeControl + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 1814 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 16 "PixelShaderFunctionS(f1;f1;f1;u1;u1;" + Name 11 "inF0" + Name 12 "inF1" + Name 13 "inF2" + Name 14 "inU0" + Name 15 "inU1" + Name 22 "PixelShaderFunction1(vf1;vf1;vf1;" + Name 19 "inF0" + Name 20 "inF1" + Name 21 "inF2" + Name 34 "PixelShaderFunction2(vf2;vf2;vf2;vu2;vu2;" + Name 29 "inF0" + Name 30 "inF1" + Name 31 "inF2" + Name 32 "inU0" + Name 33 "inU1" + Name 46 "PixelShaderFunction3(vf3;vf3;vf3;vu3;vu3;" + Name 41 "inF0" + Name 42 "inF1" + Name 43 "inF2" + Name 44 "inU0" + Name 45 "inU1" + Name 58 "PixelShaderFunction(vf4;vf4;vf4;vu4;vu4;" + Name 53 "inF0" + Name 54 "inF1" + Name 55 "inF2" + Name 56 "inU0" + Name 57 "inU1" + Name 66 "PixelShaderFunction2x2(mf22;mf22;mf22;" + Name 63 "inF0" + Name 64 "inF1" + Name 65 "inF2" + Name 74 "PixelShaderFunction3x3(mf33;mf33;mf33;" + Name 71 "inF0" + Name 72 "inF1" + Name 73 "inF2" + Name 82 "PixelShaderFunction4x4(mf44;mf44;mf44;" + Name 79 "inF0" + Name 80 "inF1" + Name 81 "inF2" + Name 91 "TestGenMul2(f1;f1;vf2;vf2;mf22;mf22;" + Name 85 "inF0" + Name 86 "inF1" + Name 87 "inFV0" + Name 88 "inFV1" + Name 89 "inFM0" + Name 90 "inFM1" + Name 100 "TestGenMul3(f1;f1;vf3;vf3;mf33;mf33;" + Name 94 "inF0" + Name 95 "inF1" + Name 96 "inFV0" + Name 97 "inFV1" + Name 98 "inFM0" + Name 99 "inFM1" + Name 109 "TestGenMul4(f1;f1;vf4;vf4;mf44;mf44;" + Name 103 "inF0" + Name 104 "inF1" + Name 105 "inFV0" + Name 106 "inFV1" + Name 107 "inFM0" + Name 108 "inFM1" + Name 129 "TestGenMulNxM(f1;f1;vf2;vf3;mf23;mf32;mf33;mf34;mf24;" + Name 120 "inF0" + Name 121 "inF1" + Name 122 "inFV2" + Name 123 "inFV3" + Name 124 "inFM2x3" + Name 125 "inFM3x2" + Name 126 "inFM3x3" + Name 127 "inFM3x4" + Name 128 "inFM2x4" + Name 131 "PS_OUTPUT" + 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 1541 "r025" + Name 1544 "r026" + Name 1548 "r026a" + Name 1553 "r027" + Name 1556 "r028" + Name 1560 "r029" + Name 1563 "r030" + Name 1567 "r031" + Name 1571 "r032" + Name 1575 "r033" + Name 1578 "r034" + Name 1581 "r035" + Name 1584 "r036" + Name 1589 "r037" + Name 1592 "r038" + Name 1599 "r039" + Name 1602 "r049" + Name 1607 "r041" + Name 1610 "r042" + Name 1614 "r043" + Name 1617 "r044" + Name 1622 "r046" + Name 1629 "r0" + Name 1633 "r1" + Name 1637 "r2" + Name 1641 "r3" + Name 1645 "r4" + Name 1649 "r5" + Name 1653 "r6" + Name 1657 "r7" + Name 1661 "r8" + Name 1665 "r0" + Name 1669 "r1" + Name 1673 "r2" + Name 1677 "r3" + Name 1681 "r4" + Name 1685 "r5" + Name 1689 "r6" + Name 1693 "r7" + Name 1697 "r8" + Name 1701 "r0" + Name 1705 "r1" + Name 1709 "r2" + Name 1713 "r3" + Name 1717 "r4" + Name 1721 "r5" + Name 1725 "r6" + Name 1729 "r7" + Name 1733 "r8" + Name 1737 "r00" + Name 1741 "r01" + Name 1745 "r02" + Name 1749 "r03" + Name 1753 "r04" + Name 1757 "r05" + Name 1761 "r06" + Name 1765 "r07" + Name 1769 "r08" + Name 1773 "r09" + Name 1777 "r10" + Name 1781 "r11" + Name 1785 "r12" + Name 1789 "r13" + Name 1793 "r14" + 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 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypePointer Function 6(float) + 8: TypeInt 32 0 + 9: TypePointer Function 8(int) + 10: TypeFunction 6(float) 7(ptr) 7(ptr) 7(ptr) 9(ptr) 9(ptr) + 18: TypeFunction 6(float) 7(ptr) 7(ptr) 7(ptr) + 24: TypeVector 6(float) 2 + 25: TypePointer Function 24(fvec2) + 26: TypeVector 8(int) 2 + 27: TypePointer Function 26(ivec2) + 28: TypeFunction 24(fvec2) 25(ptr) 25(ptr) 25(ptr) 27(ptr) 27(ptr) + 36: TypeVector 6(float) 3 + 37: TypePointer Function 36(fvec3) + 38: TypeVector 8(int) 3 + 39: TypePointer Function 38(ivec3) + 40: TypeFunction 36(fvec3) 37(ptr) 37(ptr) 37(ptr) 39(ptr) 39(ptr) + 48: TypeVector 6(float) 4 + 49: TypePointer Function 48(fvec4) + 50: TypeVector 8(int) 4 + 51: TypePointer Function 50(ivec4) + 52: TypeFunction 48(fvec4) 49(ptr) 49(ptr) 49(ptr) 51(ptr) 51(ptr) + 60: TypeMatrix 24(fvec2) 2 + 61: TypePointer Function 60 + 62: TypeFunction 60 61(ptr) 61(ptr) 61(ptr) + 68: TypeMatrix 36(fvec3) 3 + 69: TypePointer Function 68 + 70: TypeFunction 68 69(ptr) 69(ptr) 69(ptr) + 76: TypeMatrix 48(fvec4) 4 + 77: TypePointer Function 76 + 78: TypeFunction 76 77(ptr) 77(ptr) 77(ptr) + 84: TypeFunction 2 7(ptr) 7(ptr) 25(ptr) 25(ptr) 61(ptr) 61(ptr) + 93: TypeFunction 2 7(ptr) 7(ptr) 37(ptr) 37(ptr) 69(ptr) 69(ptr) + 102: TypeFunction 2 7(ptr) 7(ptr) 49(ptr) 49(ptr) 77(ptr) 77(ptr) + 111: TypeMatrix 36(fvec3) 2 + 112: TypePointer Function 111 + 113: TypeMatrix 24(fvec2) 3 + 114: TypePointer Function 113 + 115: TypeMatrix 48(fvec4) 3 + 116: TypePointer Function 115 + 117: TypeMatrix 48(fvec4) 2 + 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) + 131(PS_OUTPUT): TypeStruct 48(fvec4) + 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 + 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 + 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 + Return + FunctionEnd +16(PixelShaderFunctionS(f1;f1;f1;u1;u1;): 6(float) Function None 10 + 11(inF0): 7(ptr) FunctionParameter + 12(inF1): 7(ptr) FunctionParameter + 13(inF2): 7(ptr) FunctionParameter + 14(inU0): 9(ptr) FunctionParameter + 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 + 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 + 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 + 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 + 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 + 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 + 309: 6(float) Load 11(inF0) + 310: 6(float) ExtInst 1(GLSL.std.450) 13(Sin) 309 + Store 12(inF1) 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 + 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 + FunctionEnd +34(PixelShaderFunction2(vf2;vf2;vf2;vu2;vu2;): 24(fvec2) Function None 28 + 29(inF0): 25(ptr) FunctionParameter + 30(inF1): 25(ptr) FunctionParameter + 31(inF2): 25(ptr) FunctionParameter + 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 + 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 + 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 + 413: 24(fvec2) Load 29(inF0) + 414: 24(fvec2) DPdyCoarse 413 + Store 412(r021) 414 + 416: 24(fvec2) Load 29(inF0) + 417: 24(fvec2) DPdyFine 416 + Store 415(r022) 417 + 419: 24(fvec2) Load 29(inF0) + 420: 24(fvec2) ExtInst 1(GLSL.std.450) 12(Degrees) 419 + Store 418(r023) 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 + 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 + 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 + 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 + 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 + 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 + 574: 24(fvec2) Load 29(inF0) + 575: 24(fvec2) ExtInst 1(GLSL.std.450) 3(Trunc) 574 + Store 573(r066) 575 + ReturnValue 576 + FunctionEnd +46(PixelShaderFunction3(vf3;vf3;vf3;vu3;vu3;): 36(fvec3) Function None 40 + 41(inF0): 37(ptr) FunctionParameter + 42(inF1): 37(ptr) FunctionParameter + 43(inF2): 37(ptr) FunctionParameter + 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 + 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 + 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 + 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 + 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 + 644: 36(fvec3) Load 41(inF0) + 645: 36(fvec3) DPdx 644 + Store 643(r017) 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 + 659: 36(fvec3) Load 41(inF0) + 660: 36(fvec3) DPdyFine 659 + Store 658(r022) 660 + 662: 36(fvec3) Load 41(inF0) + 663: 36(fvec3) ExtInst 1(GLSL.std.450) 12(Degrees) 662 + Store 661(r023) 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 + 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 + 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 + FunctionEnd +58(PixelShaderFunction(vf4;vf4;vf4;vu4;vu4;): 48(fvec4) Function None 52 + 53(inF0): 49(ptr) FunctionParameter + 54(inF1): 49(ptr) FunctionParameter + 55(inF2): 49(ptr) FunctionParameter + 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 + 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 + 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 + 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 + 893: 48(fvec4) Load 53(inF0) + 894: 48(fvec4) DPdy 893 + Store 892(r019) 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 + 902: 48(fvec4) Load 53(inF0) + 903: 48(fvec4) ExtInst 1(GLSL.std.450) 12(Degrees) 902 + Store 901(r022) 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 + 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 + 942: 48(fvec4) Load 53(inF0) + 943: 48(fvec4) ExtInst 1(GLSL.std.450) 8(Floor) 942 + Store 941(r034) 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 + 977: 48(fvec4) Load 53(inF0) + 978: 6(float) ExtInst 1(GLSL.std.450) 66(Length) 977 + Store 976(r043) 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 1215: 60 Load 63(inF0) + 1216: 60 ExtInst 1(GLSL.std.450) 6(FSign) 1215 + Store 1214(r037) 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 + 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 + 1233: 60 Load 63(inF0) + 1234: 60 ExtInst 1(GLSL.std.450) 31(Sqrt) 1233 + Store 1232(r041) 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 + 1248: 60 Load 63(inF0) + 1249: 60 ExtInst 1(GLSL.std.450) 3(Trunc) 1248 + Store 1247(r046) 1249 + ReturnValue 1251 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 1541(r025): 77(ptr) Variable Function + 1544(r026): 77(ptr) Variable Function + 1548(r026a): 77(ptr) Variable Function + 1553(r027): 77(ptr) Variable Function + 1556(r028): 77(ptr) Variable Function + 1560(r029): 77(ptr) Variable Function + 1563(r030): 77(ptr) Variable Function + 1567(r031): 77(ptr) Variable Function + 1571(r032): 77(ptr) Variable Function + 1575(r033): 77(ptr) Variable Function + 1578(r034): 77(ptr) Variable Function + 1581(r035): 77(ptr) Variable Function + 1584(r036): 77(ptr) Variable Function + 1589(r037): 77(ptr) Variable Function + 1592(r038): 77(ptr) Variable Function + 1599(r039): 77(ptr) Variable Function + 1602(r049): 77(ptr) Variable Function + 1607(r041): 77(ptr) Variable Function + 1610(r042): 77(ptr) Variable Function + 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 + 1452: 76 Load 79(inF0) + 1453: 76 ExtInst 1(GLSL.std.450) 16(Asin) 1452 + Store 1451(r004) 1453 + 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 + 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 + 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 + 1484: 76 Load 79(inF0) + 1485: 76 DPdx 1484 + Store 1483(r011) 1485 + 1487: 76 Load 79(inF0) + 1488: 76 DPdxCoarse 1487 + Store 1486(r012) 1488 + 1490: 76 Load 79(inF0) + 1491: 76 DPdxFine 1490 + Store 1489(r013) 1491 + 1493: 76 Load 79(inF0) + 1494: 76 DPdy 1493 + Store 1492(r014) 1494 + 1496: 76 Load 79(inF0) + 1497: 76 DPdyCoarse 1496 + Store 1495(r015) 1497 + 1499: 76 Load 79(inF0) + 1500: 76 DPdyFine 1499 + Store 1498(r016) 1500 + 1502: 76 Load 79(inF0) + 1503: 76 ExtInst 1(GLSL.std.450) 12(Degrees) 1502 + Store 1501(r017) 1503 + 1505: 76 Load 79(inF0) + 1506: 6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1505 + Store 1504(r018) 1506 + 1508: 76 Load 79(inF0) + 1509: 76 ExtInst 1(GLSL.std.450) 27(Exp) 1508 + Store 1507(r019) 1509 + 1511: 76 Load 79(inF0) + 1512: 76 ExtInst 1(GLSL.std.450) 29(Exp2) 1511 + Store 1510(R020) 1512 + 1514: 76 Load 79(inF0) + 1515: 76 ExtInst 1(GLSL.std.450) 8(Floor) 1514 + Store 1513(r021) 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 + 1527: 48(fvec4) FMod 1525 1526 + 1528: 48(fvec4) CompositeExtract 1517 3 + 1529: 48(fvec4) CompositeExtract 1518 3 + 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 + 1542: 76 Load 79(inF0) + 1543: 76 Fwidth 1542 + Store 1541(r025) 1543 + 1545: 76 Load 79(inF0) + 1546: 76 Load 80(inF1) + 1547: 76 ExtInst 1(GLSL.std.450) 53(Ldexp) 1545 1546 + Store 1544(r026) 1547 + 1549: 76 Load 79(inF0) + 1550: 76 Load 80(inF1) + 1551: 76 Load 81(inF2) + 1552: 76 ExtInst 1(GLSL.std.450) 46(FMix) 1549 1550 1551 + Store 1548(r026a) 1552 + 1554: 76 Load 79(inF0) + 1555: 76 ExtInst 1(GLSL.std.450) 28(Log) 1554 + Store 1553(r027) 1555 + 1557: 76 Load 79(inF0) + 1558: 76 ExtInst 1(GLSL.std.450) 30(Log2) 1557 + 1559: 76 MatrixTimesScalar 1558 266 + Store 1556(r028) 1559 + 1561: 76 Load 79(inF0) + 1562: 76 ExtInst 1(GLSL.std.450) 30(Log2) 1561 + Store 1560(r029) 1562 + 1564: 76 Load 79(inF0) + 1565: 76 Load 80(inF1) + 1566: 76 ExtInst 1(GLSL.std.450) 40(FMax) 1564 1565 + Store 1563(r030) 1566 + 1568: 76 Load 79(inF0) + 1569: 76 Load 80(inF1) + 1570: 76 ExtInst 1(GLSL.std.450) 37(FMin) 1568 1569 + Store 1567(r031) 1570 + 1572: 76 Load 79(inF0) + 1573: 76 Load 80(inF1) + 1574: 76 ExtInst 1(GLSL.std.450) 26(Pow) 1572 1573 + Store 1571(r032) 1574 + 1576: 76 Load 79(inF0) + 1577: 76 ExtInst 1(GLSL.std.450) 11(Radians) 1576 + Store 1575(r033) 1577 + 1579: 76 Load 79(inF0) + 1580: 76 ExtInst 1(GLSL.std.450) 2(RoundEven) 1579 + Store 1578(r034) 1580 + 1582: 76 Load 79(inF0) + 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 + 1588: 76 ExtInst 1(GLSL.std.450) 43(FClamp) 1585 1586 1587 + Store 1584(r036) 1588 + 1590: 76 Load 79(inF0) + 1591: 76 ExtInst 1(GLSL.std.450) 6(FSign) 1590 + Store 1589(r037) 1591 + 1593: 76 Load 79(inF0) + 1594: 76 ExtInst 1(GLSL.std.450) 13(Sin) 1593 + Store 1592(r038) 1594 + 1595: 76 Load 79(inF0) + 1596: 76 ExtInst 1(GLSL.std.450) 13(Sin) 1595 + Store 80(inF1) 1596 + 1597: 76 Load 79(inF0) + 1598: 76 ExtInst 1(GLSL.std.450) 14(Cos) 1597 + Store 81(inF2) 1598 + 1600: 76 Load 79(inF0) + 1601: 76 ExtInst 1(GLSL.std.450) 19(Sinh) 1600 + Store 1599(r039) 1601 + 1603: 76 Load 79(inF0) + 1604: 76 Load 80(inF1) + 1605: 76 Load 81(inF2) + 1606: 76 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1603 1604 1605 + Store 1602(r049) 1606 + 1608: 76 Load 79(inF0) + 1609: 76 ExtInst 1(GLSL.std.450) 31(Sqrt) 1608 + Store 1607(r041) 1609 + 1611: 76 Load 79(inF0) + 1612: 76 Load 80(inF1) + 1613: 76 ExtInst 1(GLSL.std.450) 48(Step) 1611 1612 + Store 1610(r042) 1613 + 1615: 76 Load 79(inF0) + 1616: 76 ExtInst 1(GLSL.std.450) 15(Tan) 1615 + Store 1614(r043) 1616 + 1618: 76 Load 79(inF0) + 1619: 76 ExtInst 1(GLSL.std.450) 21(Tanh) 1618 + Store 1617(r044) 1619 + 1620: 76 Load 79(inF0) + 1621: 76 Transpose 1620 + 1623: 76 Load 79(inF0) + 1624: 76 ExtInst 1(GLSL.std.450) 3(Trunc) 1623 + Store 1622(r046) 1624 + ReturnValue 1626 + FunctionEnd +91(TestGenMul2(f1;f1;vf2;vf2;mf22;mf22;): 2 Function None 84 + 85(inF0): 7(ptr) FunctionParameter + 86(inF1): 7(ptr) FunctionParameter + 87(inFV0): 25(ptr) FunctionParameter + 88(inFV1): 25(ptr) FunctionParameter + 89(inFM0): 61(ptr) FunctionParameter + 90(inFM1): 61(ptr) FunctionParameter + 92: Label + 1629(r0): 7(ptr) Variable Function + 1633(r1): 25(ptr) Variable Function + 1637(r2): 25(ptr) Variable Function + 1641(r3): 7(ptr) Variable Function + 1645(r4): 25(ptr) Variable Function + 1649(r5): 25(ptr) Variable Function + 1653(r6): 61(ptr) Variable Function + 1657(r7): 61(ptr) Variable Function + 1661(r8): 61(ptr) Variable Function + 1630: 6(float) Load 86(inF1) + 1631: 6(float) Load 85(inF0) + 1632: 6(float) FMul 1630 1631 + Store 1629(r0) 1632 + 1634: 6(float) Load 85(inF0) + 1635: 24(fvec2) Load 87(inFV0) + 1636: 24(fvec2) VectorTimesScalar 1635 1634 + Store 1633(r1) 1636 + 1638: 24(fvec2) Load 87(inFV0) + 1639: 6(float) Load 85(inF0) + 1640: 24(fvec2) VectorTimesScalar 1638 1639 + Store 1637(r2) 1640 + 1642: 24(fvec2) Load 87(inFV0) + 1643: 24(fvec2) Load 88(inFV1) + 1644: 6(float) Dot 1642 1643 + Store 1641(r3) 1644 + 1646: 24(fvec2) Load 87(inFV0) + 1647: 60 Load 89(inFM0) + 1648: 24(fvec2) VectorTimesMatrix 1646 1647 + Store 1645(r4) 1648 + 1650: 60 Load 89(inFM0) + 1651: 24(fvec2) Load 87(inFV0) + 1652: 24(fvec2) MatrixTimesVector 1650 1651 + Store 1649(r5) 1652 + 1654: 6(float) Load 85(inF0) + 1655: 60 Load 89(inFM0) + 1656: 60 MatrixTimesScalar 1655 1654 + Store 1653(r6) 1656 + 1658: 60 Load 89(inFM0) + 1659: 6(float) Load 85(inF0) + 1660: 60 MatrixTimesScalar 1658 1659 + Store 1657(r7) 1660 + 1662: 60 Load 90(inFM1) + 1663: 60 Load 89(inFM0) + 1664: 60 MatrixTimesMatrix 1662 1663 + Store 1661(r8) 1664 + Return + FunctionEnd +100(TestGenMul3(f1;f1;vf3;vf3;mf33;mf33;): 2 Function None 93 + 94(inF0): 7(ptr) FunctionParameter + 95(inF1): 7(ptr) FunctionParameter + 96(inFV0): 37(ptr) FunctionParameter + 97(inFV1): 37(ptr) FunctionParameter + 98(inFM0): 69(ptr) FunctionParameter + 99(inFM1): 69(ptr) FunctionParameter + 101: Label + 1665(r0): 7(ptr) Variable Function + 1669(r1): 37(ptr) Variable Function + 1673(r2): 37(ptr) Variable Function + 1677(r3): 7(ptr) Variable Function + 1681(r4): 37(ptr) Variable Function + 1685(r5): 37(ptr) Variable Function + 1689(r6): 69(ptr) Variable Function + 1693(r7): 69(ptr) Variable Function + 1697(r8): 69(ptr) Variable Function + 1666: 6(float) Load 95(inF1) + 1667: 6(float) Load 94(inF0) + 1668: 6(float) FMul 1666 1667 + Store 1665(r0) 1668 + 1670: 6(float) Load 94(inF0) + 1671: 36(fvec3) Load 96(inFV0) + 1672: 36(fvec3) VectorTimesScalar 1671 1670 + Store 1669(r1) 1672 + 1674: 36(fvec3) Load 96(inFV0) + 1675: 6(float) Load 94(inF0) + 1676: 36(fvec3) VectorTimesScalar 1674 1675 + Store 1673(r2) 1676 + 1678: 36(fvec3) Load 96(inFV0) + 1679: 36(fvec3) Load 97(inFV1) + 1680: 6(float) Dot 1678 1679 + Store 1677(r3) 1680 + 1682: 36(fvec3) Load 96(inFV0) + 1683: 68 Load 98(inFM0) + 1684: 36(fvec3) VectorTimesMatrix 1682 1683 + Store 1681(r4) 1684 + 1686: 68 Load 98(inFM0) + 1687: 36(fvec3) Load 96(inFV0) + 1688: 36(fvec3) MatrixTimesVector 1686 1687 + Store 1685(r5) 1688 + 1690: 6(float) Load 94(inF0) + 1691: 68 Load 98(inFM0) + 1692: 68 MatrixTimesScalar 1691 1690 + Store 1689(r6) 1692 + 1694: 68 Load 98(inFM0) + 1695: 6(float) Load 94(inF0) + 1696: 68 MatrixTimesScalar 1694 1695 + Store 1693(r7) 1696 + 1698: 68 Load 99(inFM1) + 1699: 68 Load 98(inFM0) + 1700: 68 MatrixTimesMatrix 1698 1699 + Store 1697(r8) 1700 + Return + FunctionEnd +109(TestGenMul4(f1;f1;vf4;vf4;mf44;mf44;): 2 Function None 102 + 103(inF0): 7(ptr) FunctionParameter + 104(inF1): 7(ptr) FunctionParameter + 105(inFV0): 49(ptr) FunctionParameter + 106(inFV1): 49(ptr) FunctionParameter + 107(inFM0): 77(ptr) FunctionParameter + 108(inFM1): 77(ptr) FunctionParameter + 110: Label + 1701(r0): 7(ptr) Variable Function + 1705(r1): 49(ptr) Variable Function + 1709(r2): 49(ptr) Variable Function + 1713(r3): 7(ptr) Variable Function + 1717(r4): 49(ptr) Variable Function + 1721(r5): 49(ptr) Variable Function + 1725(r6): 77(ptr) Variable Function + 1729(r7): 77(ptr) Variable Function + 1733(r8): 77(ptr) Variable Function + 1702: 6(float) Load 104(inF1) + 1703: 6(float) Load 103(inF0) + 1704: 6(float) FMul 1702 1703 + Store 1701(r0) 1704 + 1706: 6(float) Load 103(inF0) + 1707: 48(fvec4) Load 105(inFV0) + 1708: 48(fvec4) VectorTimesScalar 1707 1706 + Store 1705(r1) 1708 + 1710: 48(fvec4) Load 105(inFV0) + 1711: 6(float) Load 103(inF0) + 1712: 48(fvec4) VectorTimesScalar 1710 1711 + Store 1709(r2) 1712 + 1714: 48(fvec4) Load 105(inFV0) + 1715: 48(fvec4) Load 106(inFV1) + 1716: 6(float) Dot 1714 1715 + Store 1713(r3) 1716 + 1718: 48(fvec4) Load 105(inFV0) + 1719: 76 Load 107(inFM0) + 1720: 48(fvec4) VectorTimesMatrix 1718 1719 + Store 1717(r4) 1720 + 1722: 76 Load 107(inFM0) + 1723: 48(fvec4) Load 105(inFV0) + 1724: 48(fvec4) MatrixTimesVector 1722 1723 + Store 1721(r5) 1724 + 1726: 6(float) Load 103(inF0) + 1727: 76 Load 107(inFM0) + 1728: 76 MatrixTimesScalar 1727 1726 + Store 1725(r6) 1728 + 1730: 76 Load 107(inFM0) + 1731: 6(float) Load 103(inF0) + 1732: 76 MatrixTimesScalar 1730 1731 + Store 1729(r7) 1732 + 1734: 76 Load 108(inFM1) + 1735: 76 Load 107(inFM0) + 1736: 76 MatrixTimesMatrix 1734 1735 + Store 1733(r8) 1736 + Return + FunctionEnd +129(TestGenMulNxM(f1;f1;vf2;vf3;mf23;mf32;mf33;mf34;mf24;): 2 Function None 119 + 120(inF0): 7(ptr) FunctionParameter + 121(inF1): 7(ptr) FunctionParameter + 122(inFV2): 25(ptr) FunctionParameter + 123(inFV3): 37(ptr) FunctionParameter + 124(inFM2x3): 112(ptr) FunctionParameter + 125(inFM3x2): 114(ptr) FunctionParameter + 126(inFM3x3): 69(ptr) FunctionParameter + 127(inFM3x4): 116(ptr) FunctionParameter + 128(inFM2x4): 118(ptr) FunctionParameter + 130: Label + 1737(r00): 7(ptr) Variable Function + 1741(r01): 25(ptr) Variable Function + 1745(r02): 37(ptr) Variable Function + 1749(r03): 25(ptr) Variable Function + 1753(r04): 37(ptr) Variable Function + 1757(r05): 7(ptr) Variable Function + 1761(r06): 7(ptr) Variable Function + 1765(r07): 37(ptr) Variable Function + 1769(r08): 25(ptr) Variable Function + 1773(r09): 25(ptr) Variable Function + 1777(r10): 37(ptr) Variable Function + 1781(r11): 112(ptr) Variable Function + 1785(r12): 114(ptr) Variable Function + 1789(r13): 61(ptr) Variable Function + 1793(r14): 112(ptr) Variable Function + 1797(r15): 118(ptr) Variable Function + 1801(r16): 116(ptr) Variable Function + 1738: 6(float) Load 121(inF1) + 1739: 6(float) Load 120(inF0) + 1740: 6(float) FMul 1738 1739 + Store 1737(r00) 1740 + 1742: 6(float) Load 120(inF0) + 1743: 24(fvec2) Load 122(inFV2) + 1744: 24(fvec2) VectorTimesScalar 1743 1742 + Store 1741(r01) 1744 + 1746: 6(float) Load 120(inF0) + 1747: 36(fvec3) Load 123(inFV3) + 1748: 36(fvec3) VectorTimesScalar 1747 1746 + Store 1745(r02) 1748 + 1750: 24(fvec2) Load 122(inFV2) + 1751: 6(float) Load 120(inF0) + 1752: 24(fvec2) VectorTimesScalar 1750 1751 + Store 1749(r03) 1752 + 1754: 36(fvec3) Load 123(inFV3) + 1755: 6(float) Load 120(inF0) + 1756: 36(fvec3) VectorTimesScalar 1754 1755 + Store 1753(r04) 1756 + 1758: 24(fvec2) Load 122(inFV2) + 1759: 24(fvec2) Load 122(inFV2) + 1760: 6(float) Dot 1758 1759 + Store 1757(r05) 1760 + 1762: 36(fvec3) Load 123(inFV3) + 1763: 36(fvec3) Load 123(inFV3) + 1764: 6(float) Dot 1762 1763 + Store 1761(r06) 1764 + 1766: 111 Load 124(inFM2x3) + 1767: 24(fvec2) Load 122(inFV2) + 1768: 36(fvec3) MatrixTimesVector 1766 1767 + Store 1765(r07) 1768 + 1770: 113 Load 125(inFM3x2) + 1771: 36(fvec3) Load 123(inFV3) + 1772: 24(fvec2) MatrixTimesVector 1770 1771 + Store 1769(r08) 1772 + 1774: 36(fvec3) Load 123(inFV3) + 1775: 111 Load 124(inFM2x3) + 1776: 24(fvec2) VectorTimesMatrix 1774 1775 + Store 1773(r09) 1776 + 1778: 24(fvec2) Load 122(inFV2) + 1779: 113 Load 125(inFM3x2) + 1780: 36(fvec3) VectorTimesMatrix 1778 1779 + Store 1777(r10) 1780 + 1782: 6(float) Load 120(inF0) + 1783: 111 Load 124(inFM2x3) + 1784: 111 MatrixTimesScalar 1783 1782 + Store 1781(r11) 1784 + 1786: 6(float) Load 120(inF0) + 1787: 113 Load 125(inFM3x2) + 1788: 113 MatrixTimesScalar 1787 1786 + Store 1785(r12) 1788 + 1790: 113 Load 125(inFM3x2) + 1791: 111 Load 124(inFM2x3) + 1792: 60 MatrixTimesMatrix 1790 1791 + Store 1789(r13) 1792 + 1794: 68 Load 126(inFM3x3) + 1795: 111 Load 124(inFM2x3) + 1796: 111 MatrixTimesMatrix 1794 1795 + Store 1793(r14) 1796 + 1798: 115 Load 127(inFM3x4) + 1799: 111 Load 124(inFM2x3) + 1800: 117 MatrixTimesMatrix 1798 1799 + Store 1797(r15) 1800 + 1802: 117 Load 128(inFM2x4) + 1803: 113 Load 125(inFM3x2) + 1804: 115 MatrixTimesMatrix 1802 1803 + Store 1801(r16) 1804 + Return + FunctionEnd + 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 + 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 new file mode 100644 index 0000000..affed16 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.lit.frag.out @@ -0,0 +1,213 @@ +hlsl.intrinsics.lit.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:2 Function Definition: @PixelShaderFunction(f1;f1;f1; ( temp void) +0:2 Function Parameters: +0:2 'n_dot_l' ( in float) +0:2 'n_dot_h' ( in float) +0:2 'm' ( in float) +0:? Sequence +0:3 Sequence +0:3 move second child to first child ( temp 4-component vector of float) +0:3 'r0' ( temp 4-component vector of float) +0:3 Construct vec4 ( temp 4-component vector of float) +0:3 Constant: +0:3 1.000000 +0:3 max ( temp float) +0:3 'n_dot_l' ( in float) +0:3 Constant: +0:3 0.000000 +0:3 Test condition and select ( temp float) +0:3 Condition +0:3 Compare Less Than ( temp bool) +0:3 min ( temp float) +0:3 'n_dot_l' ( in float) +0:3 'n_dot_h' ( in float) +0:3 Constant: +0:3 0.000000 +0:3 true case +0:3 Constant: +0:3 0.000000 +0:3 false case +0:3 component-wise multiply ( temp float) +0:3 'n_dot_h' ( in float) +0:3 'm' ( in float) +0:3 Constant: +0:3 1.000000 +0:2 Function Definition: PixelShaderFunction( ( temp void) +0:2 Function Parameters: +0:? Sequence +0:2 move second child to first child ( temp float) +0:? 'n_dot_l' ( temp float) +0:? 'n_dot_l' (layout( location=0) in float) +0:2 move second child to first child ( temp float) +0:? 'n_dot_h' ( temp float) +0:? 'n_dot_h' (layout( location=1) in float) +0:2 move second child to first child ( temp float) +0:? 'm' ( temp float) +0:? 'm' (layout( location=2) in float) +0:2 Function Call: @PixelShaderFunction(f1;f1;f1; ( temp void) +0:? 'n_dot_l' ( temp float) +0:? 'n_dot_h' ( temp float) +0:? 'm' ( temp float) +0:? Linker Objects +0:? 'n_dot_l' (layout( location=0) in float) +0:? 'n_dot_h' (layout( location=1) in float) +0:? 'm' (layout( location=2) in float) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:2 Function Definition: @PixelShaderFunction(f1;f1;f1; ( temp void) +0:2 Function Parameters: +0:2 'n_dot_l' ( in float) +0:2 'n_dot_h' ( in float) +0:2 'm' ( in float) +0:? Sequence +0:3 Sequence +0:3 move second child to first child ( temp 4-component vector of float) +0:3 'r0' ( temp 4-component vector of float) +0:3 Construct vec4 ( temp 4-component vector of float) +0:3 Constant: +0:3 1.000000 +0:3 max ( temp float) +0:3 'n_dot_l' ( in float) +0:3 Constant: +0:3 0.000000 +0:3 Test condition and select ( temp float) +0:3 Condition +0:3 Compare Less Than ( temp bool) +0:3 min ( temp float) +0:3 'n_dot_l' ( in float) +0:3 'n_dot_h' ( in float) +0:3 Constant: +0:3 0.000000 +0:3 true case +0:3 Constant: +0:3 0.000000 +0:3 false case +0:3 component-wise multiply ( temp float) +0:3 'n_dot_h' ( in float) +0:3 'm' ( in float) +0:3 Constant: +0:3 1.000000 +0:2 Function Definition: PixelShaderFunction( ( temp void) +0:2 Function Parameters: +0:? Sequence +0:2 move second child to first child ( temp float) +0:? 'n_dot_l' ( temp float) +0:? 'n_dot_l' (layout( location=0) in float) +0:2 move second child to first child ( temp float) +0:? 'n_dot_h' ( temp float) +0:? 'n_dot_h' (layout( location=1) in float) +0:2 move second child to first child ( temp float) +0:? 'm' ( temp float) +0:? 'm' (layout( location=2) in float) +0:2 Function Call: @PixelShaderFunction(f1;f1;f1; ( temp void) +0:? 'n_dot_l' ( temp float) +0:? 'n_dot_h' ( temp float) +0:? 'm' ( temp float) +0:? Linker Objects +0:? 'n_dot_l' (layout( location=0) in float) +0:? 'n_dot_h' (layout( location=1) in float) +0:? 'm' (layout( location=2) in float) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 52 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "PixelShaderFunction" 37 40 43 + ExecutionMode 4 OriginUpperLeft + Name 4 "PixelShaderFunction" + Name 12 "@PixelShaderFunction(f1;f1;f1;" + Name 9 "n_dot_l" + Name 10 "n_dot_h" + Name 11 "m" + Name 16 "r0" + Name 35 "n_dot_l" + Name 37 "n_dot_l" + Name 39 "n_dot_h" + Name 40 "n_dot_h" + Name 42 "m" + Name 43 "m" + Name 45 "param" + Name 47 "param" + Name 49 "param" + Decorate 37(n_dot_l) Location 0 + Decorate 40(n_dot_h) Location 1 + Decorate 43(m) Location 2 + 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) + 17: 6(float) Constant 1065353216 + 19: 6(float) Constant 0 + 25: TypeBool + 36: TypePointer Input 6(float) + 37(n_dot_l): 36(ptr) Variable Input + 40(n_dot_h): 36(ptr) Variable Input + 43(m): 36(ptr) Variable Input +4(PixelShaderFunction): 2 Function None 3 + 5: Label + 35(n_dot_l): 7(ptr) Variable Function + 39(n_dot_h): 7(ptr) Variable Function + 42(m): 7(ptr) Variable Function + 45(param): 7(ptr) Variable Function + 47(param): 7(ptr) Variable Function + 49(param): 7(ptr) Variable Function + 38: 6(float) Load 37(n_dot_l) + Store 35(n_dot_l) 38 + 41: 6(float) Load 40(n_dot_h) + Store 39(n_dot_h) 41 + 44: 6(float) Load 43(m) + Store 42(m) 44 + 46: 6(float) Load 35(n_dot_l) + Store 45(param) 46 + 48: 6(float) Load 39(n_dot_h) + Store 47(param) 48 + 50: 6(float) Load 42(m) + Store 49(param) 50 + 51: 2 FunctionCall 12(@PixelShaderFunction(f1;f1;f1;) 45(param) 47(param) 49(param) + Return + FunctionEnd +12(@PixelShaderFunction(f1;f1;f1;): 2 Function None 8 + 9(n_dot_l): 7(ptr) FunctionParameter + 10(n_dot_h): 7(ptr) FunctionParameter + 11(m): 7(ptr) FunctionParameter + 13: Label + 16(r0): 15(ptr) Variable Function + 21: 7(ptr) Variable Function + 18: 6(float) Load 9(n_dot_l) + 20: 6(float) ExtInst 1(GLSL.std.450) 40(FMax) 18 19 + 22: 6(float) Load 9(n_dot_l) + 23: 6(float) Load 10(n_dot_h) + 24: 6(float) ExtInst 1(GLSL.std.450) 37(FMin) 22 23 + 26: 25(bool) FOrdLessThan 24 19 + SelectionMerge 28 None + BranchConditional 26 27 29 + 27: Label + Store 21 19 + Branch 28 + 29: Label + 30: 6(float) Load 10(n_dot_h) + 31: 6(float) Load 11(m) + 32: 6(float) FMul 30 31 + Store 21 32 + Branch 28 + 28: Label + 33: 6(float) Load 21 + 34: 14(fvec4) CompositeConstruct 17 20 33 17 + Store 16(r0) 34 + Return + FunctionEnd 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 new file mode 100644 index 0000000..2c8b915 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.negative.comp.out @@ -0,0 +1,342 @@ +hlsl.intrinsics.negative.comp +Shader version: 450 +local_size = (1, 1, 1) +0:? Sequence +0:2 Function Definition: ComputeShaderFunctionS(f1;f1;f1;i1; ( temp float) +0:2 Function Parameters: +0:2 'inF0' ( in float) +0:2 'inF1' ( in float) +0:2 'inF2' ( in float) +0:2 'inI0' ( in int) +0:? Sequence +0:53 Branch: Return with expression +0:53 Constant: +0:53 0.000000 +0:57 Function Definition: ComputeShaderFunction1(vf1;vf1;vf1;vi1; ( temp 1-component vector of float) +0:57 Function Parameters: +0:57 'inF0' ( in 1-component vector of float) +0:57 'inF1' ( in 1-component vector of float) +0:57 'inF2' ( in 1-component vector of float) +0:57 'inI0' ( in 1-component vector of int) +0:? Sequence +0:62 Branch: Return with expression +0:62 Constant: +0:62 0.000000 +0:66 Function Definition: ComputeShaderFunction2(vf2;vf2;vf2;vi2; ( temp 2-component vector of float) +0:66 Function Parameters: +0:66 'inF0' ( in 2-component vector of float) +0:66 'inF1' ( in 2-component vector of float) +0:66 'inF2' ( in 2-component vector of float) +0:66 'inI0' ( in 2-component vector of int) +0:? Sequence +0:109 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:113 Function Definition: ComputeShaderFunction3(vf3;vf3;vf3;vi3; ( temp 3-component vector of float) +0:113 Function Parameters: +0:113 'inF0' ( in 3-component vector of float) +0:113 'inF1' ( in 3-component vector of float) +0:113 'inF2' ( in 3-component vector of float) +0:113 'inI0' ( in 3-component vector of int) +0:? Sequence +0:154 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:158 Function Definition: @ComputeShaderFunction(vf4;vf4;vf4;vi4; ( temp 4-component vector of float) +0:158 Function Parameters: +0:158 'inF0' ( in 4-component vector of float) +0:158 'inF1' ( in 4-component vector of float) +0:158 'inF2' ( in 4-component vector of float) +0:158 'inI0' ( in 4-component vector of int) +0:? Sequence +0:199 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:158 Function Definition: ComputeShaderFunction( ( temp void) +0:158 Function Parameters: +0:? Sequence +0:158 move second child to first child ( temp 4-component vector of float) +0:? 'inF0' ( temp 4-component vector of float) +0:? 'inF0' (layout( location=0) in 4-component vector of float) +0:158 move second child to first child ( temp 4-component vector of float) +0:? 'inF1' ( temp 4-component vector of float) +0:? 'inF1' (layout( location=1) in 4-component vector of float) +0:158 move second child to first child ( temp 4-component vector of float) +0:? 'inF2' ( temp 4-component vector of float) +0:? 'inF2' (layout( location=2) in 4-component vector of float) +0:158 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:158 move second child to first child ( temp 4-component vector of float) +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) +0:158 Function Call: @ComputeShaderFunction(vf4;vf4;vf4;vi4; ( temp 4-component vector of float) +0:? 'inF0' ( temp 4-component vector of float) +0:? 'inF1' ( temp 4-component vector of float) +0:? 'inF2' ( temp 4-component vector of float) +0:? 'inI0' ( temp 4-component vector of int) +0:? Linker Objects +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) +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) + + +Linked compute stage: + + +Shader version: 450 +local_size = (1, 1, 1) +0:? Sequence +0:2 Function Definition: ComputeShaderFunctionS(f1;f1;f1;i1; ( temp float) +0:2 Function Parameters: +0:2 'inF0' ( in float) +0:2 'inF1' ( in float) +0:2 'inF2' ( in float) +0:2 'inI0' ( in int) +0:? Sequence +0:53 Branch: Return with expression +0:53 Constant: +0:53 0.000000 +0:57 Function Definition: ComputeShaderFunction1(vf1;vf1;vf1;vi1; ( temp 1-component vector of float) +0:57 Function Parameters: +0:57 'inF0' ( in 1-component vector of float) +0:57 'inF1' ( in 1-component vector of float) +0:57 'inF2' ( in 1-component vector of float) +0:57 'inI0' ( in 1-component vector of int) +0:? Sequence +0:62 Branch: Return with expression +0:62 Constant: +0:62 0.000000 +0:66 Function Definition: ComputeShaderFunction2(vf2;vf2;vf2;vi2; ( temp 2-component vector of float) +0:66 Function Parameters: +0:66 'inF0' ( in 2-component vector of float) +0:66 'inF1' ( in 2-component vector of float) +0:66 'inF2' ( in 2-component vector of float) +0:66 'inI0' ( in 2-component vector of int) +0:? Sequence +0:109 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:113 Function Definition: ComputeShaderFunction3(vf3;vf3;vf3;vi3; ( temp 3-component vector of float) +0:113 Function Parameters: +0:113 'inF0' ( in 3-component vector of float) +0:113 'inF1' ( in 3-component vector of float) +0:113 'inF2' ( in 3-component vector of float) +0:113 'inI0' ( in 3-component vector of int) +0:? Sequence +0:154 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:158 Function Definition: @ComputeShaderFunction(vf4;vf4;vf4;vi4; ( temp 4-component vector of float) +0:158 Function Parameters: +0:158 'inF0' ( in 4-component vector of float) +0:158 'inF1' ( in 4-component vector of float) +0:158 'inF2' ( in 4-component vector of float) +0:158 'inI0' ( in 4-component vector of int) +0:? Sequence +0:199 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:158 Function Definition: ComputeShaderFunction( ( temp void) +0:158 Function Parameters: +0:? Sequence +0:158 move second child to first child ( temp 4-component vector of float) +0:? 'inF0' ( temp 4-component vector of float) +0:? 'inF0' (layout( location=0) in 4-component vector of float) +0:158 move second child to first child ( temp 4-component vector of float) +0:? 'inF1' ( temp 4-component vector of float) +0:? 'inF1' (layout( location=1) in 4-component vector of float) +0:158 move second child to first child ( temp 4-component vector of float) +0:? 'inF2' ( temp 4-component vector of float) +0:? 'inF2' (layout( location=2) in 4-component vector of float) +0:158 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:158 move second child to first child ( temp 4-component vector of float) +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) +0:158 Function Call: @ComputeShaderFunction(vf4;vf4;vf4;vi4; ( temp 4-component vector of float) +0:? 'inF0' ( temp 4-component vector of float) +0:? 'inF1' ( temp 4-component vector of float) +0:? 'inF2' ( temp 4-component vector of float) +0:? 'inI0' ( temp 4-component vector of int) +0:? Linker Objects +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) +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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 99 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "ComputeShaderFunction" 76 79 82 86 89 + ExecutionMode 4 LocalSize 1 1 1 + Name 4 "ComputeShaderFunction" + Name 15 "ComputeShaderFunctionS(f1;f1;f1;i1;" + Name 11 "inF0" + Name 12 "inF1" + Name 13 "inF2" + Name 14 "inI0" + Name 21 "ComputeShaderFunction1(vf1;vf1;vf1;vi1;" + Name 17 "inF0" + Name 18 "inF1" + Name 19 "inF2" + Name 20 "inI0" + Name 32 "ComputeShaderFunction2(vf2;vf2;vf2;vi2;" + Name 28 "inF0" + Name 29 "inF1" + Name 30 "inF2" + Name 31 "inI0" + Name 43 "ComputeShaderFunction3(vf3;vf3;vf3;vi3;" + Name 39 "inF0" + Name 40 "inF1" + Name 41 "inF2" + Name 42 "inI0" + Name 54 "@ComputeShaderFunction(vf4;vf4;vf4;vi4;" + Name 50 "inF0" + Name 51 "inF1" + Name 52 "inF2" + Name 53 "inI0" + Name 74 "inF0" + Name 76 "inF0" + Name 78 "inF1" + Name 79 "inF1" + Name 81 "inF2" + Name 82 "inF2" + Name 84 "inI0" + Name 86 "inI0" + Name 89 "@entryPointOutput" + Name 90 "param" + Name 92 "param" + Name 94 "param" + Name 96 "param" + Decorate 76(inF0) Location 0 + Decorate 79(inF1) Location 1 + Decorate 82(inF2) Location 2 + Decorate 86(inI0) Location 3 + Decorate 89(@entryPointOutput) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypePointer Function 6(float) + 8: TypeInt 32 1 + 9: TypePointer Function 8(int) + 10: TypeFunction 6(float) 7(ptr) 7(ptr) 7(ptr) 9(ptr) + 23: TypeVector 6(float) 2 + 24: TypePointer Function 23(fvec2) + 25: TypeVector 8(int) 2 + 26: TypePointer Function 25(ivec2) + 27: TypeFunction 23(fvec2) 24(ptr) 24(ptr) 24(ptr) 26(ptr) + 34: TypeVector 6(float) 3 + 35: TypePointer Function 34(fvec3) + 36: TypeVector 8(int) 3 + 37: TypePointer Function 36(ivec3) + 38: TypeFunction 34(fvec3) 35(ptr) 35(ptr) 35(ptr) 37(ptr) + 45: TypeVector 6(float) 4 + 46: TypePointer Function 45(fvec4) + 47: TypeVector 8(int) 4 + 48: TypePointer Function 47(ivec4) + 49: TypeFunction 45(fvec4) 46(ptr) 46(ptr) 46(ptr) 48(ptr) + 56: 6(float) Constant 0 + 61: 6(float) Constant 1065353216 + 62: 6(float) Constant 1073741824 + 63: 23(fvec2) ConstantComposite 61 62 + 66: 6(float) Constant 1077936128 + 67: 34(fvec3) ConstantComposite 61 62 66 + 70: 6(float) Constant 1082130432 + 71: 45(fvec4) ConstantComposite 61 62 66 70 + 75: TypePointer Input 45(fvec4) + 76(inF0): 75(ptr) Variable Input + 79(inF1): 75(ptr) Variable Input + 82(inF2): 75(ptr) Variable Input + 85: TypePointer Input 47(ivec4) + 86(inI0): 85(ptr) Variable Input + 88: TypePointer Output 45(fvec4) +89(@entryPointOutput): 88(ptr) Variable Output +4(ComputeShaderFunction): 2 Function None 3 + 5: Label + 74(inF0): 46(ptr) Variable Function + 78(inF1): 46(ptr) Variable Function + 81(inF2): 46(ptr) Variable Function + 84(inI0): 48(ptr) Variable Function + 90(param): 46(ptr) Variable Function + 92(param): 46(ptr) Variable Function + 94(param): 46(ptr) Variable Function + 96(param): 48(ptr) Variable Function + 77: 45(fvec4) Load 76(inF0) + Store 74(inF0) 77 + 80: 45(fvec4) Load 79(inF1) + Store 78(inF1) 80 + 83: 45(fvec4) Load 82(inF2) + Store 81(inF2) 83 + 87: 47(ivec4) Load 86(inI0) + Store 84(inI0) 87 + 91: 45(fvec4) Load 74(inF0) + Store 90(param) 91 + 93: 45(fvec4) Load 78(inF1) + Store 92(param) 93 + 95: 45(fvec4) Load 81(inF2) + Store 94(param) 95 + 97: 47(ivec4) Load 84(inI0) + Store 96(param) 97 + 98: 45(fvec4) FunctionCall 54(@ComputeShaderFunction(vf4;vf4;vf4;vi4;) 90(param) 92(param) 94(param) 96(param) + Store 89(@entryPointOutput) 98 + Return + FunctionEnd +15(ComputeShaderFunctionS(f1;f1;f1;i1;): 6(float) Function None 10 + 11(inF0): 7(ptr) FunctionParameter + 12(inF1): 7(ptr) FunctionParameter + 13(inF2): 7(ptr) FunctionParameter + 14(inI0): 9(ptr) FunctionParameter + 16: Label + ReturnValue 56 + FunctionEnd +21(ComputeShaderFunction1(vf1;vf1;vf1;vi1;): 6(float) Function None 10 + 17(inF0): 7(ptr) FunctionParameter + 18(inF1): 7(ptr) FunctionParameter + 19(inF2): 7(ptr) FunctionParameter + 20(inI0): 9(ptr) FunctionParameter + 22: Label + ReturnValue 56 + FunctionEnd +32(ComputeShaderFunction2(vf2;vf2;vf2;vi2;): 23(fvec2) Function None 27 + 28(inF0): 24(ptr) FunctionParameter + 29(inF1): 24(ptr) FunctionParameter + 30(inF2): 24(ptr) FunctionParameter + 31(inI0): 26(ptr) FunctionParameter + 33: Label + ReturnValue 63 + FunctionEnd +43(ComputeShaderFunction3(vf3;vf3;vf3;vi3;): 34(fvec3) Function None 38 + 39(inF0): 35(ptr) FunctionParameter + 40(inF1): 35(ptr) FunctionParameter + 41(inF2): 35(ptr) FunctionParameter + 42(inI0): 37(ptr) FunctionParameter + 44: Label + ReturnValue 67 + FunctionEnd +54(@ComputeShaderFunction(vf4;vf4;vf4;vi4;): 45(fvec4) Function None 49 + 50(inF0): 46(ptr) FunctionParameter + 51(inF1): 46(ptr) FunctionParameter + 52(inF2): 46(ptr) FunctionParameter + 53(inI0): 48(ptr) FunctionParameter + 55: Label + ReturnValue 71 + FunctionEnd 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 new file mode 100644 index 0000000..8f770c8 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.negative.frag.out @@ -0,0 +1,985 @@ +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: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:39: 'GetRenderTargetSamplePosition' : no matching overloaded function found +ERROR: 0:46: 'asdouble' : double2 conversion not implemented +ERROR: 0:47: 'CheckAccessFullyMapped' : no matching overloaded function found +ERROR: 0:49: 'cross' : no matching overloaded function found +ERROR: 0:50: 'D3DCOLORtoUBYTE4' : no matching overloaded function found +ERROR: 0:51: 'determinant' : no matching overloaded function found +ERROR: 0:57: 'transpose' : no matching overloaded function found +ERROR: 0:64: 'CheckAccessFullyMapped' : no matching overloaded function found +ERROR: 0:66: 'D3DCOLORtoUBYTE4' : no matching overloaded function found +ERROR: 0:67: 'determinant' : no matching overloaded function found +ERROR: 0:73: 'transpose' : no matching overloaded function found +ERROR: 0:81: 'CheckAccessFullyMapped' : no matching overloaded function found +ERROR: 0:84: 'determinant' : no matching overloaded function found +ERROR: 0:90: 'transpose' : no matching overloaded function found +ERROR: 0:117: 'countbits' : no matching overloaded function found +ERROR: 0:117: 'D3DCOLORtoUBYTE4' : no matching overloaded function found +ERROR: 0:117: 'cross' : no matching overloaded function found +ERROR: 0:117: 'f16tof32' : no matching overloaded function found +ERROR: 0:117: 'firstbithigh' : no matching overloaded function found +ERROR: 0:117: 'firstbitlow' : no matching overloaded function found +ERROR: 0:117: 'reversebits' : no matching overloaded function found +ERROR: 0:117: 'length' : no matching overloaded function found +ERROR: 0:117: 'noise' : no matching overloaded function found +ERROR: 0:117: 'normalize' : no matching overloaded function found +ERROR: 0:117: 'reflect' : no matching overloaded function found +ERROR: 0:117: 'refract' : no matching overloaded function found +ERROR: 0:117: 'reversebits' : no matching overloaded function found +ERROR: 0:125: 'countbits' : no matching overloaded function found +ERROR: 0:125: 'D3DCOLORtoUBYTE4' : no matching overloaded function found +ERROR: 0:125: 'cross' : no matching overloaded function found +ERROR: 0:125: 'f16tof32' : no matching overloaded function found +ERROR: 0:125: 'firstbithigh' : no matching overloaded function found +ERROR: 0:125: 'firstbitlow' : no matching overloaded function found +ERROR: 0:125: 'reversebits' : no matching overloaded function found +ERROR: 0:125: 'length' : no matching overloaded function found +ERROR: 0:125: 'noise' : no matching overloaded function found +ERROR: 0:125: 'normalize' : no matching overloaded function found +ERROR: 0:125: 'reflect' : no matching overloaded function found +ERROR: 0:125: 'refract' : no matching overloaded function found +ERROR: 0:125: 'reversebits' : no matching overloaded function found +ERROR: 0:133: 'countbits' : no matching overloaded function found +ERROR: 0:133: 'D3DCOLORtoUBYTE4' : no matching overloaded function found +ERROR: 0:133: 'cross' : no matching overloaded function found +ERROR: 0:133: 'f16tof32' : no matching overloaded function found +ERROR: 0:133: 'firstbithigh' : no matching overloaded function found +ERROR: 0:133: 'firstbitlow' : no matching overloaded function found +ERROR: 0:133: 'reversebits' : no matching overloaded function found +ERROR: 0:133: 'length' : no matching overloaded function found +ERROR: 0:133: 'noise' : no matching overloaded function found +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. + + +Shader version: 450 +gl_FragCoord origin is upper left +ERROR: node is still EOpNull! +0:2 Function Definition: PixelShaderFunctionS(f1;f1;f1;i1; ( temp float) +0:2 Function Parameters: +0:2 'inF0' ( in float) +0:2 'inF1' ( in float) +0:2 'inF2' ( in float) +0:2 'inI0' ( in int) +0:? Sequence +0:5 uint64BitsToDouble ( temp double) +0:5 Construct uvec2 ( temp 2-component vector of uint) +0:5 Convert float to uint ( temp uint) +0:5 'inF0' ( in float) +0:5 Convert float to uint ( temp uint) +0:5 'inF1' ( in float) +0:6 Function Call: CheckAccessFullyMapped(u1; ( temp bool) +0:6 Constant: +0:6 3 (const uint) +0:7 bitCount ( temp uint) +0:7 Convert float to uint ( temp uint) +0:7 'inF0' ( in float) +0:8 cross-product ( temp 3-component vector of float) +0:8 Construct vec3 ( in 3-component vector of float) +0:8 'inF0' ( in float) +0:8 Construct vec3 ( in 3-component vector of float) +0:8 'inF1' ( in float) +0:9 Convert float to int ( temp 4-component vector of int) +0:9 vector-scale ( temp 4-component vector of float) +0:9 Constant: +0:9 255.001953 +0:9 vector swizzle ( temp 4-component vector of float) +0:9 Construct vec4 ( in 4-component vector of float) +0:9 'inF0' ( in float) +0:9 Sequence +0:9 Constant: +0:9 2 (const int) +0:9 Constant: +0:9 1 (const int) +0:9 Constant: +0:9 0 (const int) +0:9 Constant: +0:9 3 (const int) +0:10 Constant: +0:10 0.000000 +0:12 direct index ( temp float) +0:12 unpackHalf2x16 ( temp 2-component vector of float) +0:12 Convert float to uint ( temp uint) +0:12 'inF0' ( in float) +0:12 Constant: +0:12 0 (const int) +0:13 findMSB ( temp uint) +0:13 Convert float to uint ( temp uint) +0:13 'inF0' ( in float) +0:14 findLSB ( temp uint) +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: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) +0:24 Constant: +0:24 0 (const uint) +0:24 0 (const uint) +0:24 Constant: +0:24 0 (const uint) +0:24 0 (const uint) +0:24 0 (const uint) +0:24 0 (const uint) +0:25 normalize ( temp 2-component vector of float) +0:25 Construct vec2 ( in 2-component vector of float) +0:25 'inF0' ( in float) +0:26 reflect ( temp 2-component vector of float) +0:26 Construct vec2 ( in 2-component vector of float) +0:26 'inF0' ( in float) +0:26 Construct vec2 ( in 2-component vector of float) +0:26 'inF1' ( in float) +0:27 refract ( temp 2-component vector of float) +0:27 Construct vec2 ( in 2-component vector of float) +0:27 'inF0' ( in float) +0:27 Construct vec2 ( in 2-component vector of float) +0:27 'inF1' ( in float) +0:27 'inF2' ( in float) +0:28 Constant: +0:28 0.000000 +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:32 Branch: Return with expression +0:32 Constant: +0:32 0.000000 +0:36 Function Definition: PixelShaderFunction1(vf1;vf1;vf1;vi1; ( temp 1-component vector of float) +0:36 Function Parameters: +0:36 'inF0' ( in 1-component vector of float) +0:36 'inF1' ( in 1-component vector of float) +0:36 'inF2' ( in 1-component vector of float) +0:36 'inI0' ( in 1-component vector of int) +0:? Sequence +0:39 Constant: +0:39 0.000000 +0:41 Branch: Return with expression +0:41 Constant: +0:41 0.000000 +0:45 Function Definition: PixelShaderFunction2(vf2;vf2;vf2;vi2; ( temp 2-component vector of float) +0:45 Function Parameters: +0:45 'inF0' ( in 2-component vector of float) +0:45 'inF1' ( in 2-component vector of float) +0:45 'inF2' ( in 2-component vector of float) +0:45 'inI0' ( in 2-component vector of int) +0:? Sequence +0:46 ERROR: Bad aggregation op + ( temp 2-component vector of double) +0:46 Convert float to uint ( temp 2-component vector of uint) +0:46 'inF0' ( in 2-component vector of float) +0:46 Convert float to uint ( temp 2-component vector of uint) +0:46 'inF1' ( in 2-component vector of float) +0:47 Constant: +0:47 0.000000 +0:48 bitCount ( temp 2-component vector of uint) +0:48 Convert float to uint ( temp 2-component vector of uint) +0:48 'inF0' ( in 2-component vector of float) +0:49 Constant: +0:49 0.000000 +0:50 Constant: +0:50 0.000000 +0:51 Constant: +0:51 0.000000 +0:52 Construct vec2 ( temp 2-component vector of float) +0:52 direct index ( temp float) +0:52 unpackHalf2x16 ( temp 2-component vector of float) +0:52 direct index ( temp uint) +0:52 Convert float to uint ( temp 2-component vector of uint) +0:52 'inF0' ( in 2-component vector of float) +0:52 Constant: +0:52 0 (const int) +0:52 Constant: +0:52 0 (const int) +0:52 direct index ( temp float) +0:52 unpackHalf2x16 ( temp 2-component vector of float) +0:52 direct index ( temp uint) +0:52 Convert float to uint ( temp 2-component vector of uint) +0:52 'inF0' ( in 2-component vector of float) +0:52 Constant: +0:52 1 (const int) +0:52 Constant: +0:52 0 (const int) +0:53 findMSB ( temp 2-component vector of uint) +0:53 Convert float to uint ( temp 2-component vector of uint) +0:53 'inF0' ( in 2-component vector of float) +0:54 findLSB ( temp 2-component vector of uint) +0:54 Convert float to uint ( temp 2-component vector of uint) +0:54 'inF0' ( in 2-component vector of float) +0:56 bitFieldReverse ( temp 2-component vector of uint) +0:56 Convert float to uint ( temp 2-component vector of uint) +0:56 'inF0' ( in 2-component vector of float) +0:57 Constant: +0:57 0.000000 +0:59 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:63 Function Definition: PixelShaderFunction3(vf3;vf3;vf3;vi3; ( temp 3-component vector of float) +0:63 Function Parameters: +0:63 'inF0' ( in 3-component vector of float) +0:63 'inF1' ( in 3-component vector of float) +0:63 'inF2' ( in 3-component vector of float) +0:63 'inI0' ( in 3-component vector of int) +0:? Sequence +0:64 Constant: +0:64 0.000000 +0:65 bitCount ( temp 3-component vector of uint) +0:65 Convert float to uint ( temp 3-component vector of uint) +0:65 'inF0' ( in 3-component vector of float) +0:66 Constant: +0:66 0.000000 +0:67 Constant: +0:67 0.000000 +0:68 Construct vec3 ( temp 3-component vector of float) +0:68 direct index ( temp float) +0:68 unpackHalf2x16 ( temp 2-component vector of float) +0:68 direct index ( temp uint) +0:68 Convert float to uint ( temp 3-component vector of uint) +0:68 'inF0' ( in 3-component vector of float) +0:68 Constant: +0:68 0 (const int) +0:68 Constant: +0:68 0 (const int) +0:68 direct index ( temp float) +0:68 unpackHalf2x16 ( temp 2-component vector of float) +0:68 direct index ( temp uint) +0:68 Convert float to uint ( temp 3-component vector of uint) +0:68 'inF0' ( in 3-component vector of float) +0:68 Constant: +0:68 1 (const int) +0:68 Constant: +0:68 0 (const int) +0:68 direct index ( temp float) +0:68 unpackHalf2x16 ( temp 2-component vector of float) +0:68 direct index ( temp uint) +0:68 Convert float to uint ( temp 3-component vector of uint) +0:68 'inF0' ( in 3-component vector of float) +0:68 Constant: +0:68 2 (const int) +0:68 Constant: +0:68 0 (const int) +0:69 findMSB ( temp 3-component vector of uint) +0:69 Convert float to uint ( temp 3-component vector of uint) +0:69 'inF0' ( in 3-component vector of float) +0:70 findLSB ( temp 3-component vector of uint) +0:70 Convert float to uint ( temp 3-component vector of uint) +0:70 'inF0' ( in 3-component vector of float) +0:72 bitFieldReverse ( temp 3-component vector of uint) +0:72 Convert float to uint ( temp 3-component vector of uint) +0:72 'inF0' ( in 3-component vector of float) +0:73 Constant: +0:73 0.000000 +0:76 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:80 Function Definition: @PixelShaderFunction(vf4;vf4;vf4;vi4; ( temp 4-component vector of float) +0:80 Function Parameters: +0:80 'inF0' ( in 4-component vector of float) +0:80 'inF1' ( in 4-component vector of float) +0:80 'inF2' ( in 4-component vector of float) +0:80 'inI0' ( in 4-component vector of int) +0:? Sequence +0:81 Constant: +0:81 0.000000 +0:82 bitCount ( temp 4-component vector of uint) +0:82 Convert float to uint ( temp 4-component vector of uint) +0:82 'inF0' ( in 4-component vector of float) +0:83 cross-product ( temp 3-component vector of float) +0:83 Construct vec3 ( in 3-component vector of float) +0:83 'inF0' ( in 4-component vector of float) +0:83 Construct vec3 ( in 3-component vector of float) +0:83 'inF1' ( in 4-component vector of float) +0:84 Constant: +0:84 0.000000 +0:85 Construct vec4 ( temp 4-component vector of float) +0:85 direct index ( temp float) +0:85 unpackHalf2x16 ( temp 2-component vector of float) +0:85 direct index ( temp uint) +0:85 Convert float to uint ( temp 4-component vector of uint) +0:85 'inF0' ( in 4-component vector of float) +0:85 Constant: +0:85 0 (const int) +0:85 Constant: +0:85 0 (const int) +0:85 direct index ( temp float) +0:85 unpackHalf2x16 ( temp 2-component vector of float) +0:85 direct index ( temp uint) +0:85 Convert float to uint ( temp 4-component vector of uint) +0:85 'inF0' ( in 4-component vector of float) +0:85 Constant: +0:85 1 (const int) +0:85 Constant: +0:85 0 (const int) +0:85 direct index ( temp float) +0:85 unpackHalf2x16 ( temp 2-component vector of float) +0:85 direct index ( temp uint) +0:85 Convert float to uint ( temp 4-component vector of uint) +0:85 'inF0' ( in 4-component vector of float) +0:85 Constant: +0:85 2 (const int) +0:85 Constant: +0:85 0 (const int) +0:85 direct index ( temp float) +0:85 unpackHalf2x16 ( temp 2-component vector of float) +0:85 direct index ( temp uint) +0:85 Convert float to uint ( temp 4-component vector of uint) +0:85 'inF0' ( in 4-component vector of float) +0:85 Constant: +0:85 3 (const int) +0:85 Constant: +0:85 0 (const int) +0:86 findMSB ( temp 4-component vector of uint) +0:86 Convert float to uint ( temp 4-component vector of uint) +0:86 'inF0' ( in 4-component vector of float) +0:87 findLSB ( temp 4-component vector of uint) +0:87 Convert float to uint ( temp 4-component vector of uint) +0:87 'inF0' ( in 4-component vector of float) +0:89 bitFieldReverse ( temp 4-component vector of uint) +0:89 Convert float to uint ( temp 4-component vector of uint) +0:89 'inF0' ( in 4-component vector of float) +0:90 Constant: +0:90 0.000000 +0:92 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:80 Function Definition: PixelShaderFunction( ( temp void) +0:80 Function Parameters: +0:? Sequence +0:80 move second child to first child ( temp 4-component vector of float) +0:? 'inF0' ( temp 4-component vector of float) +0:? 'inF0' (layout( location=0) in 4-component vector of float) +0:80 move second child to first child ( temp 4-component vector of float) +0:? 'inF1' ( temp 4-component vector of float) +0:? 'inF1' (layout( location=1) in 4-component vector of float) +0:80 move second child to first child ( temp 4-component vector of float) +0:? 'inF2' ( temp 4-component vector of float) +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: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) +0:? 'inF0' ( temp 4-component vector of float) +0:? 'inF1' ( temp 4-component vector of float) +0:? 'inF2' ( temp 4-component vector of float) +0:? 'inI0' ( temp 4-component vector of int) +0:115 Function Definition: PixelShaderFunction2x2(mf22;mf22;mf22; ( temp 2X2 matrix of float) +0:115 Function Parameters: +0:115 'inF0' ( in 2X2 matrix of float) +0:115 'inF1' ( in 2X2 matrix of float) +0:115 'inF2' ( in 2X2 matrix of float) +0:? Sequence +0:117 Constant: +0:117 0.000000 +0:117 Constant: +0:117 0.000000 +0:117 Constant: +0:117 0.000000 +0:117 Constant: +0:117 0.000000 +0:117 Constant: +0:117 0.000000 +0:117 Constant: +0:117 0.000000 +0:117 Constant: +0:117 0.000000 +0:117 Constant: +0:117 0.000000 +0:117 Constant: +0:117 0.000000 +0:117 Constant: +0:117 0.000000 +0:117 Constant: +0:117 0.000000 +0:117 Constant: +0:117 0.000000 +0:117 Constant: +0:117 0.000000 +0:119 Branch: Return with expression +0:? Constant: +0:? 2.000000 +0:? 2.000000 +0:? 2.000000 +0:? 2.000000 +0:123 Function Definition: PixelShaderFunction3x3(mf33;mf33;mf33; ( temp 3X3 matrix of float) +0:123 Function Parameters: +0:123 'inF0' ( in 3X3 matrix of float) +0:123 'inF1' ( in 3X3 matrix of float) +0:123 'inF2' ( in 3X3 matrix of float) +0:? Sequence +0:125 Constant: +0:125 0.000000 +0:125 Constant: +0:125 0.000000 +0:125 Constant: +0:125 0.000000 +0:125 Constant: +0:125 0.000000 +0:125 Constant: +0:125 0.000000 +0:125 Constant: +0:125 0.000000 +0:125 Constant: +0:125 0.000000 +0:125 Constant: +0:125 0.000000 +0:125 Constant: +0:125 0.000000 +0:125 Constant: +0:125 0.000000 +0:125 Constant: +0:125 0.000000 +0:125 Constant: +0:125 0.000000 +0:125 Constant: +0:125 0.000000 +0:127 Branch: Return with expression +0:? Constant: +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:131 Function Definition: PixelShaderFunction4x4(mf44;mf44;mf44; ( temp 4X4 matrix of float) +0:131 Function Parameters: +0:131 'inF0' ( in 4X4 matrix of float) +0:131 'inF1' ( in 4X4 matrix of float) +0:131 'inF2' ( in 4X4 matrix of float) +0:? Sequence +0:133 Constant: +0:133 0.000000 +0:133 Constant: +0:133 0.000000 +0:133 Constant: +0:133 0.000000 +0:133 Constant: +0:133 0.000000 +0:133 Constant: +0:133 0.000000 +0:133 Constant: +0:133 0.000000 +0:133 Constant: +0:133 0.000000 +0:133 Constant: +0:133 0.000000 +0:133 Constant: +0:133 0.000000 +0:133 Constant: +0:133 0.000000 +0:133 Constant: +0:133 0.000000 +0:133 Constant: +0:133 0.000000 +0:133 Constant: +0:133 0.000000 +0:135 Branch: Return with expression +0:? Constant: +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? Linker Objects +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) +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) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +ERROR: node is still EOpNull! +0:2 Function Definition: PixelShaderFunctionS(f1;f1;f1;i1; ( temp float) +0:2 Function Parameters: +0:2 'inF0' ( in float) +0:2 'inF1' ( in float) +0:2 'inF2' ( in float) +0:2 'inI0' ( in int) +0:? Sequence +0:5 uint64BitsToDouble ( temp double) +0:5 Construct uvec2 ( temp 2-component vector of uint) +0:5 Convert float to uint ( temp uint) +0:5 'inF0' ( in float) +0:5 Convert float to uint ( temp uint) +0:5 'inF1' ( in float) +0:6 Function Call: CheckAccessFullyMapped(u1; ( temp bool) +0:6 Constant: +0:6 3 (const uint) +0:7 bitCount ( temp uint) +0:7 Convert float to uint ( temp uint) +0:7 'inF0' ( in float) +0:8 cross-product ( temp 3-component vector of float) +0:8 Construct vec3 ( in 3-component vector of float) +0:8 'inF0' ( in float) +0:8 Construct vec3 ( in 3-component vector of float) +0:8 'inF1' ( in float) +0:9 Convert float to int ( temp 4-component vector of int) +0:9 vector-scale ( temp 4-component vector of float) +0:9 Constant: +0:9 255.001953 +0:9 vector swizzle ( temp 4-component vector of float) +0:9 Construct vec4 ( in 4-component vector of float) +0:9 'inF0' ( in float) +0:9 Sequence +0:9 Constant: +0:9 2 (const int) +0:9 Constant: +0:9 1 (const int) +0:9 Constant: +0:9 0 (const int) +0:9 Constant: +0:9 3 (const int) +0:10 Constant: +0:10 0.000000 +0:12 direct index ( temp float) +0:12 unpackHalf2x16 ( temp 2-component vector of float) +0:12 Convert float to uint ( temp uint) +0:12 'inF0' ( in float) +0:12 Constant: +0:12 0 (const int) +0:13 findMSB ( temp uint) +0:13 Convert float to uint ( temp uint) +0:13 'inF0' ( in float) +0:14 findLSB ( temp uint) +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: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) +0:24 Constant: +0:24 0 (const uint) +0:24 0 (const uint) +0:24 Constant: +0:24 0 (const uint) +0:24 0 (const uint) +0:24 0 (const uint) +0:24 0 (const uint) +0:25 normalize ( temp 2-component vector of float) +0:25 Construct vec2 ( in 2-component vector of float) +0:25 'inF0' ( in float) +0:26 reflect ( temp 2-component vector of float) +0:26 Construct vec2 ( in 2-component vector of float) +0:26 'inF0' ( in float) +0:26 Construct vec2 ( in 2-component vector of float) +0:26 'inF1' ( in float) +0:27 refract ( temp 2-component vector of float) +0:27 Construct vec2 ( in 2-component vector of float) +0:27 'inF0' ( in float) +0:27 Construct vec2 ( in 2-component vector of float) +0:27 'inF1' ( in float) +0:27 'inF2' ( in float) +0:28 Constant: +0:28 0.000000 +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:32 Branch: Return with expression +0:32 Constant: +0:32 0.000000 +0:36 Function Definition: PixelShaderFunction1(vf1;vf1;vf1;vi1; ( temp 1-component vector of float) +0:36 Function Parameters: +0:36 'inF0' ( in 1-component vector of float) +0:36 'inF1' ( in 1-component vector of float) +0:36 'inF2' ( in 1-component vector of float) +0:36 'inI0' ( in 1-component vector of int) +0:? Sequence +0:39 Constant: +0:39 0.000000 +0:41 Branch: Return with expression +0:41 Constant: +0:41 0.000000 +0:45 Function Definition: PixelShaderFunction2(vf2;vf2;vf2;vi2; ( temp 2-component vector of float) +0:45 Function Parameters: +0:45 'inF0' ( in 2-component vector of float) +0:45 'inF1' ( in 2-component vector of float) +0:45 'inF2' ( in 2-component vector of float) +0:45 'inI0' ( in 2-component vector of int) +0:? Sequence +0:46 ERROR: Bad aggregation op + ( temp 2-component vector of double) +0:46 Convert float to uint ( temp 2-component vector of uint) +0:46 'inF0' ( in 2-component vector of float) +0:46 Convert float to uint ( temp 2-component vector of uint) +0:46 'inF1' ( in 2-component vector of float) +0:47 Constant: +0:47 0.000000 +0:48 bitCount ( temp 2-component vector of uint) +0:48 Convert float to uint ( temp 2-component vector of uint) +0:48 'inF0' ( in 2-component vector of float) +0:49 Constant: +0:49 0.000000 +0:50 Constant: +0:50 0.000000 +0:51 Constant: +0:51 0.000000 +0:52 Construct vec2 ( temp 2-component vector of float) +0:52 direct index ( temp float) +0:52 unpackHalf2x16 ( temp 2-component vector of float) +0:52 direct index ( temp uint) +0:52 Convert float to uint ( temp 2-component vector of uint) +0:52 'inF0' ( in 2-component vector of float) +0:52 Constant: +0:52 0 (const int) +0:52 Constant: +0:52 0 (const int) +0:52 direct index ( temp float) +0:52 unpackHalf2x16 ( temp 2-component vector of float) +0:52 direct index ( temp uint) +0:52 Convert float to uint ( temp 2-component vector of uint) +0:52 'inF0' ( in 2-component vector of float) +0:52 Constant: +0:52 1 (const int) +0:52 Constant: +0:52 0 (const int) +0:53 findMSB ( temp 2-component vector of uint) +0:53 Convert float to uint ( temp 2-component vector of uint) +0:53 'inF0' ( in 2-component vector of float) +0:54 findLSB ( temp 2-component vector of uint) +0:54 Convert float to uint ( temp 2-component vector of uint) +0:54 'inF0' ( in 2-component vector of float) +0:56 bitFieldReverse ( temp 2-component vector of uint) +0:56 Convert float to uint ( temp 2-component vector of uint) +0:56 'inF0' ( in 2-component vector of float) +0:57 Constant: +0:57 0.000000 +0:59 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:63 Function Definition: PixelShaderFunction3(vf3;vf3;vf3;vi3; ( temp 3-component vector of float) +0:63 Function Parameters: +0:63 'inF0' ( in 3-component vector of float) +0:63 'inF1' ( in 3-component vector of float) +0:63 'inF2' ( in 3-component vector of float) +0:63 'inI0' ( in 3-component vector of int) +0:? Sequence +0:64 Constant: +0:64 0.000000 +0:65 bitCount ( temp 3-component vector of uint) +0:65 Convert float to uint ( temp 3-component vector of uint) +0:65 'inF0' ( in 3-component vector of float) +0:66 Constant: +0:66 0.000000 +0:67 Constant: +0:67 0.000000 +0:68 Construct vec3 ( temp 3-component vector of float) +0:68 direct index ( temp float) +0:68 unpackHalf2x16 ( temp 2-component vector of float) +0:68 direct index ( temp uint) +0:68 Convert float to uint ( temp 3-component vector of uint) +0:68 'inF0' ( in 3-component vector of float) +0:68 Constant: +0:68 0 (const int) +0:68 Constant: +0:68 0 (const int) +0:68 direct index ( temp float) +0:68 unpackHalf2x16 ( temp 2-component vector of float) +0:68 direct index ( temp uint) +0:68 Convert float to uint ( temp 3-component vector of uint) +0:68 'inF0' ( in 3-component vector of float) +0:68 Constant: +0:68 1 (const int) +0:68 Constant: +0:68 0 (const int) +0:68 direct index ( temp float) +0:68 unpackHalf2x16 ( temp 2-component vector of float) +0:68 direct index ( temp uint) +0:68 Convert float to uint ( temp 3-component vector of uint) +0:68 'inF0' ( in 3-component vector of float) +0:68 Constant: +0:68 2 (const int) +0:68 Constant: +0:68 0 (const int) +0:69 findMSB ( temp 3-component vector of uint) +0:69 Convert float to uint ( temp 3-component vector of uint) +0:69 'inF0' ( in 3-component vector of float) +0:70 findLSB ( temp 3-component vector of uint) +0:70 Convert float to uint ( temp 3-component vector of uint) +0:70 'inF0' ( in 3-component vector of float) +0:72 bitFieldReverse ( temp 3-component vector of uint) +0:72 Convert float to uint ( temp 3-component vector of uint) +0:72 'inF0' ( in 3-component vector of float) +0:73 Constant: +0:73 0.000000 +0:76 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:80 Function Definition: @PixelShaderFunction(vf4;vf4;vf4;vi4; ( temp 4-component vector of float) +0:80 Function Parameters: +0:80 'inF0' ( in 4-component vector of float) +0:80 'inF1' ( in 4-component vector of float) +0:80 'inF2' ( in 4-component vector of float) +0:80 'inI0' ( in 4-component vector of int) +0:? Sequence +0:81 Constant: +0:81 0.000000 +0:82 bitCount ( temp 4-component vector of uint) +0:82 Convert float to uint ( temp 4-component vector of uint) +0:82 'inF0' ( in 4-component vector of float) +0:83 cross-product ( temp 3-component vector of float) +0:83 Construct vec3 ( in 3-component vector of float) +0:83 'inF0' ( in 4-component vector of float) +0:83 Construct vec3 ( in 3-component vector of float) +0:83 'inF1' ( in 4-component vector of float) +0:84 Constant: +0:84 0.000000 +0:85 Construct vec4 ( temp 4-component vector of float) +0:85 direct index ( temp float) +0:85 unpackHalf2x16 ( temp 2-component vector of float) +0:85 direct index ( temp uint) +0:85 Convert float to uint ( temp 4-component vector of uint) +0:85 'inF0' ( in 4-component vector of float) +0:85 Constant: +0:85 0 (const int) +0:85 Constant: +0:85 0 (const int) +0:85 direct index ( temp float) +0:85 unpackHalf2x16 ( temp 2-component vector of float) +0:85 direct index ( temp uint) +0:85 Convert float to uint ( temp 4-component vector of uint) +0:85 'inF0' ( in 4-component vector of float) +0:85 Constant: +0:85 1 (const int) +0:85 Constant: +0:85 0 (const int) +0:85 direct index ( temp float) +0:85 unpackHalf2x16 ( temp 2-component vector of float) +0:85 direct index ( temp uint) +0:85 Convert float to uint ( temp 4-component vector of uint) +0:85 'inF0' ( in 4-component vector of float) +0:85 Constant: +0:85 2 (const int) +0:85 Constant: +0:85 0 (const int) +0:85 direct index ( temp float) +0:85 unpackHalf2x16 ( temp 2-component vector of float) +0:85 direct index ( temp uint) +0:85 Convert float to uint ( temp 4-component vector of uint) +0:85 'inF0' ( in 4-component vector of float) +0:85 Constant: +0:85 3 (const int) +0:85 Constant: +0:85 0 (const int) +0:86 findMSB ( temp 4-component vector of uint) +0:86 Convert float to uint ( temp 4-component vector of uint) +0:86 'inF0' ( in 4-component vector of float) +0:87 findLSB ( temp 4-component vector of uint) +0:87 Convert float to uint ( temp 4-component vector of uint) +0:87 'inF0' ( in 4-component vector of float) +0:89 bitFieldReverse ( temp 4-component vector of uint) +0:89 Convert float to uint ( temp 4-component vector of uint) +0:89 'inF0' ( in 4-component vector of float) +0:90 Constant: +0:90 0.000000 +0:92 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:80 Function Definition: PixelShaderFunction( ( temp void) +0:80 Function Parameters: +0:? Sequence +0:80 move second child to first child ( temp 4-component vector of float) +0:? 'inF0' ( temp 4-component vector of float) +0:? 'inF0' (layout( location=0) in 4-component vector of float) +0:80 move second child to first child ( temp 4-component vector of float) +0:? 'inF1' ( temp 4-component vector of float) +0:? 'inF1' (layout( location=1) in 4-component vector of float) +0:80 move second child to first child ( temp 4-component vector of float) +0:? 'inF2' ( temp 4-component vector of float) +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: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) +0:? 'inF0' ( temp 4-component vector of float) +0:? 'inF1' ( temp 4-component vector of float) +0:? 'inF2' ( temp 4-component vector of float) +0:? 'inI0' ( temp 4-component vector of int) +0:115 Function Definition: PixelShaderFunction2x2(mf22;mf22;mf22; ( temp 2X2 matrix of float) +0:115 Function Parameters: +0:115 'inF0' ( in 2X2 matrix of float) +0:115 'inF1' ( in 2X2 matrix of float) +0:115 'inF2' ( in 2X2 matrix of float) +0:? Sequence +0:117 Constant: +0:117 0.000000 +0:117 Constant: +0:117 0.000000 +0:117 Constant: +0:117 0.000000 +0:117 Constant: +0:117 0.000000 +0:117 Constant: +0:117 0.000000 +0:117 Constant: +0:117 0.000000 +0:117 Constant: +0:117 0.000000 +0:117 Constant: +0:117 0.000000 +0:117 Constant: +0:117 0.000000 +0:117 Constant: +0:117 0.000000 +0:117 Constant: +0:117 0.000000 +0:117 Constant: +0:117 0.000000 +0:117 Constant: +0:117 0.000000 +0:119 Branch: Return with expression +0:? Constant: +0:? 2.000000 +0:? 2.000000 +0:? 2.000000 +0:? 2.000000 +0:123 Function Definition: PixelShaderFunction3x3(mf33;mf33;mf33; ( temp 3X3 matrix of float) +0:123 Function Parameters: +0:123 'inF0' ( in 3X3 matrix of float) +0:123 'inF1' ( in 3X3 matrix of float) +0:123 'inF2' ( in 3X3 matrix of float) +0:? Sequence +0:125 Constant: +0:125 0.000000 +0:125 Constant: +0:125 0.000000 +0:125 Constant: +0:125 0.000000 +0:125 Constant: +0:125 0.000000 +0:125 Constant: +0:125 0.000000 +0:125 Constant: +0:125 0.000000 +0:125 Constant: +0:125 0.000000 +0:125 Constant: +0:125 0.000000 +0:125 Constant: +0:125 0.000000 +0:125 Constant: +0:125 0.000000 +0:125 Constant: +0:125 0.000000 +0:125 Constant: +0:125 0.000000 +0:125 Constant: +0:125 0.000000 +0:127 Branch: Return with expression +0:? Constant: +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:131 Function Definition: PixelShaderFunction4x4(mf44;mf44;mf44; ( temp 4X4 matrix of float) +0:131 Function Parameters: +0:131 'inF0' ( in 4X4 matrix of float) +0:131 'inF1' ( in 4X4 matrix of float) +0:131 'inF2' ( in 4X4 matrix of float) +0:? Sequence +0:133 Constant: +0:133 0.000000 +0:133 Constant: +0:133 0.000000 +0:133 Constant: +0:133 0.000000 +0:133 Constant: +0:133 0.000000 +0:133 Constant: +0:133 0.000000 +0:133 Constant: +0:133 0.000000 +0:133 Constant: +0:133 0.000000 +0:133 Constant: +0:133 0.000000 +0:133 Constant: +0:133 0.000000 +0:133 Constant: +0:133 0.000000 +0:133 Constant: +0:133 0.000000 +0:133 Constant: +0:133 0.000000 +0:133 Constant: +0:133 0.000000 +0:135 Branch: Return with expression +0:? Constant: +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? Linker Objects +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) +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) + +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 new file mode 100644 index 0000000..9808b1c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.negative.vert.out @@ -0,0 +1,549 @@ +hlsl.intrinsics.negative.vert +Shader version: 450 +0:? Sequence +0:15 Function Definition: VertexShaderFunctionS(f1;f1;f1;i1; ( temp float) +0:15 Function Parameters: +0:15 'inF0' ( in float) +0:15 'inF1' ( in float) +0:15 'inF2' ( in float) +0:15 'inI0' ( in int) +0:? Sequence +0:71 Branch: Return with expression +0:71 Constant: +0:71 0.000000 +0:75 Function Definition: VertexShaderFunction1(vf1;vf1;vf1;vi1; ( temp 1-component vector of float) +0:75 Function Parameters: +0:75 'inF0' ( in 1-component vector of float) +0:75 'inF1' ( in 1-component vector of float) +0:75 'inF2' ( in 1-component vector of float) +0:75 'inI0' ( in 1-component vector of int) +0:? Sequence +0:80 Branch: Return with expression +0:80 Constant: +0:80 0.000000 +0:84 Function Definition: VertexShaderFunction2(vf2;vf2;vf2;vi2; ( temp 2-component vector of float) +0:84 Function Parameters: +0:84 'inF0' ( in 2-component vector of float) +0:84 'inF1' ( in 2-component vector of float) +0:84 'inF2' ( in 2-component vector of float) +0:84 'inI0' ( in 2-component vector of int) +0:? Sequence +0:127 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:131 Function Definition: VertexShaderFunction3(vf3;vf3;vf3;vi3; ( temp 3-component vector of float) +0:131 Function Parameters: +0:131 'inF0' ( in 3-component vector of float) +0:131 'inF1' ( in 3-component vector of float) +0:131 'inF2' ( in 3-component vector of float) +0:131 'inI0' ( in 3-component vector of int) +0:? Sequence +0:172 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:176 Function Definition: @VertexShaderFunction(vf4;vf4;vf4;vi4; ( temp 4-component vector of float) +0:176 Function Parameters: +0:176 'inF0' ( in 4-component vector of float) +0:176 'inF1' ( in 4-component vector of float) +0:176 'inF2' ( in 4-component vector of float) +0:176 'inI0' ( in 4-component vector of int) +0:? Sequence +0:217 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:176 Function Definition: VertexShaderFunction( ( temp void) +0:176 Function Parameters: +0:? Sequence +0:176 move second child to first child ( temp 4-component vector of float) +0:? 'inF0' ( temp 4-component vector of float) +0:? 'inF0' (layout( location=0) in 4-component vector of float) +0:176 move second child to first child ( temp 4-component vector of float) +0:? 'inF1' ( temp 4-component vector of float) +0:? 'inF1' (layout( location=1) in 4-component vector of float) +0:176 move second child to first child ( temp 4-component vector of float) +0:? 'inF2' ( temp 4-component vector of float) +0:? 'inF2' (layout( location=2) in 4-component vector of float) +0:176 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:176 move second child to first child ( temp 4-component vector of float) +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) +0:176 Function Call: @VertexShaderFunction(vf4;vf4;vf4;vi4; ( temp 4-component vector of float) +0:? 'inF0' ( temp 4-component vector of float) +0:? 'inF1' ( temp 4-component vector of float) +0:? 'inF2' ( temp 4-component vector of float) +0:? 'inI0' ( temp 4-component vector of int) +0:226 Function Definition: VertexShaderFunction2x2(mf22;mf22;mf22; ( temp 2X2 matrix of float) +0:226 Function Parameters: +0:226 'inF0' ( in 2X2 matrix of float) +0:226 'inF1' ( in 2X2 matrix of float) +0:226 'inF2' ( in 2X2 matrix of float) +0:? Sequence +0:230 Branch: Return with expression +0:? Constant: +0:? 2.000000 +0:? 2.000000 +0:? 2.000000 +0:? 2.000000 +0:234 Function Definition: VertexShaderFunction3x3(mf33;mf33;mf33; ( temp 3X3 matrix of float) +0:234 Function Parameters: +0:234 'inF0' ( in 3X3 matrix of float) +0:234 'inF1' ( in 3X3 matrix of float) +0:234 'inF2' ( in 3X3 matrix of float) +0:? Sequence +0:238 Branch: Return with expression +0:? Constant: +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:242 Function Definition: VertexShaderFunction4x4(mf44;mf44;mf44; ( temp 4X4 matrix of float) +0:242 Function Parameters: +0:242 'inF0' ( in 4X4 matrix of float) +0:242 'inF1' ( in 4X4 matrix of float) +0:242 'inF2' ( in 4X4 matrix of float) +0:? Sequence +0:246 Branch: Return with expression +0:? Constant: +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? Linker Objects +0:? 'gs_ua' ( global uint) +0:? 'gs_ub' ( global uint) +0:? 'gs_uc' ( global uint) +0:? 'gs_ua2' ( global 2-component vector of uint) +0:? 'gs_ub2' ( global 2-component vector of uint) +0:? 'gs_uc2' ( global 2-component vector of uint) +0:? 'gs_ua3' ( global 3-component vector of uint) +0:? 'gs_ub3' ( global 3-component vector of uint) +0:? 'gs_uc3' ( global 3-component vector of uint) +0:? 'gs_ua4' ( global 4-component vector of uint) +0:? 'gs_ub4' ( global 4-component vector of uint) +0:? 'gs_uc4' ( global 4-component vector of uint) +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) +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) + + +Linked vertex stage: + + +Shader version: 450 +0:? Sequence +0:15 Function Definition: VertexShaderFunctionS(f1;f1;f1;i1; ( temp float) +0:15 Function Parameters: +0:15 'inF0' ( in float) +0:15 'inF1' ( in float) +0:15 'inF2' ( in float) +0:15 'inI0' ( in int) +0:? Sequence +0:71 Branch: Return with expression +0:71 Constant: +0:71 0.000000 +0:75 Function Definition: VertexShaderFunction1(vf1;vf1;vf1;vi1; ( temp 1-component vector of float) +0:75 Function Parameters: +0:75 'inF0' ( in 1-component vector of float) +0:75 'inF1' ( in 1-component vector of float) +0:75 'inF2' ( in 1-component vector of float) +0:75 'inI0' ( in 1-component vector of int) +0:? Sequence +0:80 Branch: Return with expression +0:80 Constant: +0:80 0.000000 +0:84 Function Definition: VertexShaderFunction2(vf2;vf2;vf2;vi2; ( temp 2-component vector of float) +0:84 Function Parameters: +0:84 'inF0' ( in 2-component vector of float) +0:84 'inF1' ( in 2-component vector of float) +0:84 'inF2' ( in 2-component vector of float) +0:84 'inI0' ( in 2-component vector of int) +0:? Sequence +0:127 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:131 Function Definition: VertexShaderFunction3(vf3;vf3;vf3;vi3; ( temp 3-component vector of float) +0:131 Function Parameters: +0:131 'inF0' ( in 3-component vector of float) +0:131 'inF1' ( in 3-component vector of float) +0:131 'inF2' ( in 3-component vector of float) +0:131 'inI0' ( in 3-component vector of int) +0:? Sequence +0:172 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:176 Function Definition: @VertexShaderFunction(vf4;vf4;vf4;vi4; ( temp 4-component vector of float) +0:176 Function Parameters: +0:176 'inF0' ( in 4-component vector of float) +0:176 'inF1' ( in 4-component vector of float) +0:176 'inF2' ( in 4-component vector of float) +0:176 'inI0' ( in 4-component vector of int) +0:? Sequence +0:217 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:176 Function Definition: VertexShaderFunction( ( temp void) +0:176 Function Parameters: +0:? Sequence +0:176 move second child to first child ( temp 4-component vector of float) +0:? 'inF0' ( temp 4-component vector of float) +0:? 'inF0' (layout( location=0) in 4-component vector of float) +0:176 move second child to first child ( temp 4-component vector of float) +0:? 'inF1' ( temp 4-component vector of float) +0:? 'inF1' (layout( location=1) in 4-component vector of float) +0:176 move second child to first child ( temp 4-component vector of float) +0:? 'inF2' ( temp 4-component vector of float) +0:? 'inF2' (layout( location=2) in 4-component vector of float) +0:176 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:176 move second child to first child ( temp 4-component vector of float) +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) +0:176 Function Call: @VertexShaderFunction(vf4;vf4;vf4;vi4; ( temp 4-component vector of float) +0:? 'inF0' ( temp 4-component vector of float) +0:? 'inF1' ( temp 4-component vector of float) +0:? 'inF2' ( temp 4-component vector of float) +0:? 'inI0' ( temp 4-component vector of int) +0:226 Function Definition: VertexShaderFunction2x2(mf22;mf22;mf22; ( temp 2X2 matrix of float) +0:226 Function Parameters: +0:226 'inF0' ( in 2X2 matrix of float) +0:226 'inF1' ( in 2X2 matrix of float) +0:226 'inF2' ( in 2X2 matrix of float) +0:? Sequence +0:230 Branch: Return with expression +0:? Constant: +0:? 2.000000 +0:? 2.000000 +0:? 2.000000 +0:? 2.000000 +0:234 Function Definition: VertexShaderFunction3x3(mf33;mf33;mf33; ( temp 3X3 matrix of float) +0:234 Function Parameters: +0:234 'inF0' ( in 3X3 matrix of float) +0:234 'inF1' ( in 3X3 matrix of float) +0:234 'inF2' ( in 3X3 matrix of float) +0:? Sequence +0:238 Branch: Return with expression +0:? Constant: +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:242 Function Definition: VertexShaderFunction4x4(mf44;mf44;mf44; ( temp 4X4 matrix of float) +0:242 Function Parameters: +0:242 'inF0' ( in 4X4 matrix of float) +0:242 'inF1' ( in 4X4 matrix of float) +0:242 'inF2' ( in 4X4 matrix of float) +0:? Sequence +0:246 Branch: Return with expression +0:? Constant: +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? Linker Objects +0:? 'gs_ua' ( global uint) +0:? 'gs_ub' ( global uint) +0:? 'gs_uc' ( global uint) +0:? 'gs_ua2' ( global 2-component vector of uint) +0:? 'gs_ub2' ( global 2-component vector of uint) +0:? 'gs_uc2' ( global 2-component vector of uint) +0:? 'gs_ua3' ( global 3-component vector of uint) +0:? 'gs_ub3' ( global 3-component vector of uint) +0:? 'gs_uc3' ( global 3-component vector of uint) +0:? 'gs_ua4' ( global 4-component vector of uint) +0:? 'gs_ub4' ( global 4-component vector of uint) +0:? 'gs_uc4' ( global 4-component vector of uint) +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) +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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// 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 + Name 4 "VertexShaderFunction" + Name 15 "VertexShaderFunctionS(f1;f1;f1;i1;" + Name 11 "inF0" + Name 12 "inF1" + Name 13 "inF2" + Name 14 "inI0" + Name 21 "VertexShaderFunction1(vf1;vf1;vf1;vi1;" + Name 17 "inF0" + Name 18 "inF1" + Name 19 "inF2" + Name 20 "inI0" + Name 32 "VertexShaderFunction2(vf2;vf2;vf2;vi2;" + Name 28 "inF0" + Name 29 "inF1" + Name 30 "inF2" + Name 31 "inI0" + Name 43 "VertexShaderFunction3(vf3;vf3;vf3;vi3;" + Name 39 "inF0" + Name 40 "inF1" + Name 41 "inF2" + Name 42 "inI0" + Name 54 "@VertexShaderFunction(vf4;vf4;vf4;vi4;" + Name 50 "inF0" + Name 51 "inF1" + Name 52 "inF2" + Name 53 "inI0" + Name 62 "VertexShaderFunction2x2(mf22;mf22;mf22;" + Name 59 "inF0" + Name 60 "inF1" + Name 61 "inF2" + Name 70 "VertexShaderFunction3x3(mf33;mf33;mf33;" + Name 67 "inF0" + Name 68 "inF1" + Name 69 "inF2" + Name 78 "VertexShaderFunction4x4(mf44;mf44;mf44;" + Name 75 "inF0" + Name 76 "inF1" + Name 77 "inF2" + Name 98 "inF0" + Name 100 "inF0" + Name 102 "inF1" + Name 103 "inF1" + Name 105 "inF2" + Name 106 "inF2" + Name 108 "inI0" + Name 110 "inI0" + Name 113 "@entryPointOutput" + Name 114 "param" + Name 116 "param" + Name 118 "param" + Name 120 "param" + Name 137 "gs_ua" + Name 138 "gs_ub" + Name 139 "gs_uc" + Name 142 "gs_ua2" + Name 143 "gs_ub2" + Name 144 "gs_uc2" + Name 147 "gs_ua3" + Name 148 "gs_ub3" + Name 149 "gs_uc3" + Name 152 "gs_ua4" + Name 153 "gs_ub4" + Name 154 "gs_uc4" + Decorate 100(inF0) Location 0 + Decorate 103(inF1) Location 1 + Decorate 106(inF2) Location 2 + Decorate 110(inI0) Location 3 + Decorate 113(@entryPointOutput) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypePointer Function 6(float) + 8: TypeInt 32 1 + 9: TypePointer Function 8(int) + 10: TypeFunction 6(float) 7(ptr) 7(ptr) 7(ptr) 9(ptr) + 23: TypeVector 6(float) 2 + 24: TypePointer Function 23(fvec2) + 25: TypeVector 8(int) 2 + 26: TypePointer Function 25(ivec2) + 27: TypeFunction 23(fvec2) 24(ptr) 24(ptr) 24(ptr) 26(ptr) + 34: TypeVector 6(float) 3 + 35: TypePointer Function 34(fvec3) + 36: TypeVector 8(int) 3 + 37: TypePointer Function 36(ivec3) + 38: TypeFunction 34(fvec3) 35(ptr) 35(ptr) 35(ptr) 37(ptr) + 45: TypeVector 6(float) 4 + 46: TypePointer Function 45(fvec4) + 47: TypeVector 8(int) 4 + 48: TypePointer Function 47(ivec4) + 49: TypeFunction 45(fvec4) 46(ptr) 46(ptr) 46(ptr) 48(ptr) + 56: TypeMatrix 23(fvec2) 2 + 57: TypePointer Function 56 + 58: TypeFunction 56 57(ptr) 57(ptr) 57(ptr) + 64: TypeMatrix 34(fvec3) 3 + 65: TypePointer Function 64 + 66: TypeFunction 64 65(ptr) 65(ptr) 65(ptr) + 72: TypeMatrix 45(fvec4) 4 + 73: TypePointer Function 72 + 74: TypeFunction 72 73(ptr) 73(ptr) 73(ptr) + 80: 6(float) Constant 0 + 85: 6(float) Constant 1065353216 + 86: 6(float) Constant 1073741824 + 87: 23(fvec2) ConstantComposite 85 86 + 90: 6(float) Constant 1077936128 + 91: 34(fvec3) ConstantComposite 85 86 90 + 94: 6(float) Constant 1082130432 + 95: 45(fvec4) ConstantComposite 85 86 90 94 + 99: TypePointer Input 45(fvec4) + 100(inF0): 99(ptr) Variable Input + 103(inF1): 99(ptr) Variable Input + 106(inF2): 99(ptr) Variable Input + 109: TypePointer Input 47(ivec4) + 110(inI0): 109(ptr) Variable Input + 112: TypePointer Output 45(fvec4) +113(@entryPointOutput): 112(ptr) Variable Output + 123: 23(fvec2) ConstantComposite 86 86 + 124: 56 ConstantComposite 123 123 + 127: 34(fvec3) ConstantComposite 90 90 90 + 128: 64 ConstantComposite 127 127 127 + 131: 45(fvec4) ConstantComposite 94 94 94 94 + 132: 72 ConstantComposite 131 131 131 131 + 135: TypeInt 32 0 + 136: TypePointer Private 135(int) + 137(gs_ua): 136(ptr) Variable Private + 138(gs_ub): 136(ptr) Variable Private + 139(gs_uc): 136(ptr) Variable Private + 140: TypeVector 135(int) 2 + 141: TypePointer Private 140(ivec2) + 142(gs_ua2): 141(ptr) Variable Private + 143(gs_ub2): 141(ptr) Variable Private + 144(gs_uc2): 141(ptr) Variable Private + 145: TypeVector 135(int) 3 + 146: TypePointer Private 145(ivec3) + 147(gs_ua3): 146(ptr) Variable Private + 148(gs_ub3): 146(ptr) Variable Private + 149(gs_uc3): 146(ptr) Variable Private + 150: TypeVector 135(int) 4 + 151: TypePointer Private 150(ivec4) + 152(gs_ua4): 151(ptr) Variable Private + 153(gs_ub4): 151(ptr) Variable Private + 154(gs_uc4): 151(ptr) Variable Private +4(VertexShaderFunction): 2 Function None 3 + 5: Label + 98(inF0): 46(ptr) Variable Function + 102(inF1): 46(ptr) Variable Function + 105(inF2): 46(ptr) Variable Function + 108(inI0): 48(ptr) Variable Function + 114(param): 46(ptr) Variable Function + 116(param): 46(ptr) Variable Function + 118(param): 46(ptr) Variable Function + 120(param): 48(ptr) Variable Function + 101: 45(fvec4) Load 100(inF0) + Store 98(inF0) 101 + 104: 45(fvec4) Load 103(inF1) + Store 102(inF1) 104 + 107: 45(fvec4) Load 106(inF2) + Store 105(inF2) 107 + 111: 47(ivec4) Load 110(inI0) + Store 108(inI0) 111 + 115: 45(fvec4) Load 98(inF0) + Store 114(param) 115 + 117: 45(fvec4) Load 102(inF1) + Store 116(param) 117 + 119: 45(fvec4) Load 105(inF2) + Store 118(param) 119 + 121: 47(ivec4) Load 108(inI0) + Store 120(param) 121 + 122: 45(fvec4) FunctionCall 54(@VertexShaderFunction(vf4;vf4;vf4;vi4;) 114(param) 116(param) 118(param) 120(param) + Store 113(@entryPointOutput) 122 + Return + FunctionEnd +15(VertexShaderFunctionS(f1;f1;f1;i1;): 6(float) Function None 10 + 11(inF0): 7(ptr) FunctionParameter + 12(inF1): 7(ptr) FunctionParameter + 13(inF2): 7(ptr) FunctionParameter + 14(inI0): 9(ptr) FunctionParameter + 16: Label + ReturnValue 80 + FunctionEnd +21(VertexShaderFunction1(vf1;vf1;vf1;vi1;): 6(float) Function None 10 + 17(inF0): 7(ptr) FunctionParameter + 18(inF1): 7(ptr) FunctionParameter + 19(inF2): 7(ptr) FunctionParameter + 20(inI0): 9(ptr) FunctionParameter + 22: Label + ReturnValue 80 + FunctionEnd +32(VertexShaderFunction2(vf2;vf2;vf2;vi2;): 23(fvec2) Function None 27 + 28(inF0): 24(ptr) FunctionParameter + 29(inF1): 24(ptr) FunctionParameter + 30(inF2): 24(ptr) FunctionParameter + 31(inI0): 26(ptr) FunctionParameter + 33: Label + ReturnValue 87 + FunctionEnd +43(VertexShaderFunction3(vf3;vf3;vf3;vi3;): 34(fvec3) Function None 38 + 39(inF0): 35(ptr) FunctionParameter + 40(inF1): 35(ptr) FunctionParameter + 41(inF2): 35(ptr) FunctionParameter + 42(inI0): 37(ptr) FunctionParameter + 44: Label + ReturnValue 91 + FunctionEnd +54(@VertexShaderFunction(vf4;vf4;vf4;vi4;): 45(fvec4) Function None 49 + 50(inF0): 46(ptr) FunctionParameter + 51(inF1): 46(ptr) FunctionParameter + 52(inF2): 46(ptr) FunctionParameter + 53(inI0): 48(ptr) FunctionParameter + 55: Label + ReturnValue 95 + FunctionEnd +62(VertexShaderFunction2x2(mf22;mf22;mf22;): 56 Function None 58 + 59(inF0): 57(ptr) FunctionParameter + 60(inF1): 57(ptr) FunctionParameter + 61(inF2): 57(ptr) FunctionParameter + 63: Label + ReturnValue 124 + FunctionEnd +70(VertexShaderFunction3x3(mf33;mf33;mf33;): 64 Function None 66 + 67(inF0): 65(ptr) FunctionParameter + 68(inF1): 65(ptr) FunctionParameter + 69(inF2): 65(ptr) FunctionParameter + 71: Label + ReturnValue 128 + FunctionEnd +78(VertexShaderFunction4x4(mf44;mf44;mf44;): 72 Function None 74 + 75(inF0): 73(ptr) FunctionParameter + 76(inF1): 73(ptr) FunctionParameter + 77(inF2): 73(ptr) FunctionParameter + 79: Label + ReturnValue 132 + FunctionEnd 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 new file mode 100644 index 0000000..4f47d86 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.promote.down.frag.out @@ -0,0 +1,197 @@ +hlsl.intrinsics.promote.down.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:15 Function Definition: @main( ( temp structure{ temp 4-component vector of float color}) +0:15 Function Parameters: +0:? Sequence +0:16 Sequence +0:16 move second child to first child ( temp uint) +0:16 'r00' ( temp uint) +0:16 bitCount ( temp uint) +0:16 Convert float to uint ( temp uint) +0:16 f: direct index for structure ( uniform float) +0:16 '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:16 Constant: +0:16 2 (const uint) +0:17 Sequence +0:17 move second child to first child ( temp 2-component vector of uint) +0:17 'r01' ( temp 2-component vector of uint) +0:17 bitFieldReverse ( temp 2-component vector of uint) +0:17 Convert float to uint ( temp 2-component vector of uint) +0:17 f2: direct index for structure ( uniform 2-component vector of float) +0:17 '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:17 Constant: +0:17 6 (const uint) +0:20 move second child to first child ( temp 4-component vector of float) +0:20 color: direct index for structure ( temp 4-component vector of float) +0:20 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:20 Constant: +0:20 0 (const int) +0:? Constant: +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:21 Branch: Return with expression +0:21 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:15 Function Definition: main( ( temp void) +0:15 Function Parameters: +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: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) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:15 Function Definition: @main( ( temp structure{ temp 4-component vector of float color}) +0:15 Function Parameters: +0:? Sequence +0:16 Sequence +0:16 move second child to first child ( temp uint) +0:16 'r00' ( temp uint) +0:16 bitCount ( temp uint) +0:16 Convert float to uint ( temp uint) +0:16 f: direct index for structure ( uniform float) +0:16 '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:16 Constant: +0:16 2 (const uint) +0:17 Sequence +0:17 move second child to first child ( temp 2-component vector of uint) +0:17 'r01' ( temp 2-component vector of uint) +0:17 bitFieldReverse ( temp 2-component vector of uint) +0:17 Convert float to uint ( temp 2-component vector of uint) +0:17 f2: direct index for structure ( uniform 2-component vector of float) +0:17 '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:17 Constant: +0:17 6 (const uint) +0:20 move second child to first child ( temp 4-component vector of float) +0:20 color: direct index for structure ( temp 4-component vector of float) +0:20 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:20 Constant: +0:20 0 (const int) +0:? Constant: +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:21 Branch: Return with expression +0:21 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:15 Function Definition: main( ( temp void) +0:15 Function Parameters: +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: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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 50 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 47 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "color" + Name 10 "@main(" + Name 14 "r00" + Name 19 "$Global" + MemberName 19($Global) 0 "i" + MemberName 19($Global) 1 "u" + MemberName 19($Global) 2 "f" + MemberName 19($Global) 3 "b" + MemberName 19($Global) 4 "i2" + MemberName 19($Global) 5 "u2" + MemberName 19($Global) 6 "f2" + MemberName 19($Global) 7 "b2" + Name 21 "" + Name 29 "r01" + Name 37 "ps_output" + Name 47 "color" + MemberDecorate 19($Global) 0 Offset 0 + MemberDecorate 19($Global) 1 Offset 4 + MemberDecorate 19($Global) 2 Offset 8 + MemberDecorate 19($Global) 3 Offset 12 + MemberDecorate 19($Global) 4 Offset 16 + MemberDecorate 19($Global) 5 Offset 24 + MemberDecorate 19($Global) 6 Offset 32 + MemberDecorate 19($Global) 7 Offset 40 + Decorate 19($Global) Block + Decorate 21 DescriptorSet 0 + Decorate 47(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: TypeInt 32 0 + 13: TypePointer Function 12(int) + 15: TypeInt 32 1 + 16: TypeVector 15(int) 2 + 17: TypeVector 12(int) 2 + 18: TypeVector 6(float) 2 + 19($Global): TypeStruct 15(int) 12(int) 6(float) 12(int) 16(ivec2) 17(ivec2) 18(fvec2) 17(ivec2) + 20: TypePointer Uniform 19($Global) + 21: 20(ptr) Variable Uniform + 22: 15(int) Constant 2 + 23: TypePointer Uniform 6(float) + 28: TypePointer Function 17(ivec2) + 30: 15(int) Constant 6 + 31: TypePointer Uniform 18(fvec2) + 36: TypePointer Function 8(PS_OUTPUT) + 38: 15(int) Constant 0 + 39: 6(float) Constant 0 + 40: 7(fvec4) ConstantComposite 39 39 39 39 + 41: TypePointer Function 7(fvec4) + 46: TypePointer Output 7(fvec4) + 47(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 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 14(r00): 13(ptr) Variable Function + 29(r01): 28(ptr) Variable Function + 37(ps_output): 36(ptr) Variable Function + 24: 23(ptr) AccessChain 21 22 + 25: 6(float) Load 24 + 26: 12(int) ConvertFToU 25 + 27: 12(int) BitCount 26 + Store 14(r00) 27 + 32: 31(ptr) AccessChain 21 30 + 33: 18(fvec2) Load 32 + 34: 17(ivec2) ConvertFToU 33 + 35: 17(ivec2) BitReverse 34 + Store 29(r01) 35 + 42: 41(ptr) AccessChain 37(ps_output) 38 + Store 42 40 + 43:8(PS_OUTPUT) Load 37(ps_output) + ReturnValue 43 + FunctionEnd 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 new file mode 100644 index 0000000..7fec7a2 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.promote.frag.out @@ -0,0 +1,1328 @@ +hlsl.intrinsics.promote.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:20 Function Definition: @main( ( temp structure{ temp 4-component vector of float color}) +0:20 Function Parameters: +0:? Sequence +0:23 Sequence +0:23 move second child to first child ( temp float) +0:23 'r00' ( temp float) +0:23 max ( temp float) +0:23 Convert bool to float ( temp float) +0:23 b: direct index for structure ( uniform bool) +0:23 '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:23 Constant: +0:23 3 (const uint) +0:23 f: direct index for structure ( uniform float) +0:23 '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:23 Constant: +0:23 2 (const uint) +0:24 Sequence +0:24 move second child to first child ( temp uint) +0:24 'r01' ( temp uint) +0:24 max ( temp uint) +0:24 Convert bool to uint ( temp uint) +0:24 b: direct index for structure ( uniform bool) +0:24 '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:24 Constant: +0:24 3 (const uint) +0:24 u: direct index for structure ( uniform uint) +0:24 '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:24 Constant: +0:24 1 (const uint) +0:25 Sequence +0:25 move second child to first child ( temp int) +0:25 'r02' ( temp int) +0:25 max ( temp int) +0:25 Convert bool to int ( temp int) +0:25 b: direct index for structure ( uniform bool) +0:25 '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:25 Constant: +0:25 3 (const uint) +0:25 i: direct index for structure ( uniform int) +0:25 '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:25 Constant: +0:25 0 (const uint) +0:26 Sequence +0:26 move second child to first child ( temp float) +0:26 'r03' ( temp float) +0:26 max ( temp float) +0:26 Convert int to float ( temp float) +0:26 i: direct index for structure ( uniform int) +0:26 '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:26 Constant: +0:26 0 (const uint) +0:26 f: direct index for structure ( uniform float) +0:26 '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:26 Constant: +0:26 2 (const uint) +0:27 Sequence +0:27 move second child to first child ( temp float) +0:27 'r04' ( temp float) +0:27 max ( temp float) +0:27 Convert uint to float ( temp float) +0:27 u: direct index for structure ( uniform uint) +0:27 '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:27 Constant: +0:27 1 (const uint) +0:27 f: direct index for structure ( uniform float) +0:27 '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:27 Constant: +0:27 2 (const uint) +0:29 Sequence +0:29 move second child to first child ( temp 2-component vector of float) +0:29 'r10' ( temp 2-component vector of float) +0:29 max ( temp 2-component vector of float) +0:29 Convert bool to float ( temp 2-component vector of float) +0:29 b2: direct index for structure ( uniform 2-component vector of bool) +0:29 '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:29 Constant: +0:29 7 (const uint) +0:29 f2: direct index for structure ( uniform 2-component vector of float) +0:29 '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:29 Constant: +0:29 6 (const uint) +0:30 Sequence +0:30 move second child to first child ( temp 2-component vector of uint) +0:30 'r11' ( temp 2-component vector of uint) +0:30 max ( temp 2-component vector of uint) +0:30 Convert bool to uint ( temp 2-component vector of uint) +0:30 b2: direct index for structure ( uniform 2-component vector of bool) +0:30 '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:30 Constant: +0:30 7 (const uint) +0:30 u2: direct index for structure ( uniform 2-component vector of uint) +0:30 '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:30 Constant: +0:30 5 (const uint) +0:31 Sequence +0:31 move second child to first child ( temp 2-component vector of int) +0:31 'r12' ( temp 2-component vector of int) +0:31 max ( temp 2-component vector of int) +0:31 Convert bool to int ( temp 2-component vector of int) +0:31 b2: direct index for structure ( uniform 2-component vector of bool) +0:31 '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:31 Constant: +0:31 7 (const uint) +0:31 i2: direct index for structure ( uniform 2-component vector of int) +0:31 '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:31 Constant: +0:31 4 (const uint) +0:32 Sequence +0:32 move second child to first child ( temp 2-component vector of float) +0:32 'r13' ( temp 2-component vector of float) +0:32 max ( temp 2-component vector of float) +0:32 Convert int to float ( temp 2-component vector of float) +0:32 i2: direct index for structure ( uniform 2-component vector of int) +0:32 '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:32 Constant: +0:32 4 (const uint) +0:32 f2: direct index for structure ( uniform 2-component vector of float) +0:32 '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:32 Constant: +0:32 6 (const uint) +0:33 Sequence +0:33 move second child to first child ( temp 2-component vector of float) +0:33 'r14' ( temp 2-component vector of float) +0:33 max ( temp 2-component vector of float) +0:33 Convert uint to float ( temp 2-component vector of float) +0:33 u2: direct index for structure ( uniform 2-component vector of uint) +0:33 '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:33 Constant: +0:33 5 (const uint) +0:33 f2: direct index for structure ( uniform 2-component vector of float) +0:33 '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:33 Constant: +0:33 6 (const uint) +0:35 Sequence +0:35 move second child to first child ( temp 2-component vector of float) +0:35 'r20' ( temp 2-component vector of float) +0:35 clamp ( temp 2-component vector of float) +0:35 Convert int to float ( temp 2-component vector of float) +0:35 i2: direct index for structure ( uniform 2-component vector of int) +0:35 '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:35 Constant: +0:35 4 (const uint) +0:35 Convert uint to float ( temp 2-component vector of float) +0:35 u2: direct index for structure ( uniform 2-component vector of uint) +0:35 '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:35 Constant: +0:35 5 (const uint) +0:35 f2: direct index for structure ( uniform 2-component vector of float) +0:35 '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:35 Constant: +0:35 6 (const uint) +0:36 Sequence +0:36 move second child to first child ( temp 2-component vector of uint) +0:36 'r21' ( temp 2-component vector of uint) +0:36 clamp ( temp 2-component vector of uint) +0:36 Convert bool to uint ( temp 2-component vector of uint) +0:36 b2: direct index for structure ( uniform 2-component vector of bool) +0:36 '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:36 Constant: +0:36 7 (const uint) +0:36 u2: direct index for structure ( uniform 2-component vector of uint) +0:36 '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:36 Constant: +0:36 5 (const uint) +0:36 Convert bool to uint ( temp 2-component vector of uint) +0:36 b2: direct index for structure ( uniform 2-component vector of bool) +0:36 '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:36 Constant: +0:36 7 (const uint) +0:37 Sequence +0:37 move second child to first child ( temp 2-component vector of float) +0:37 'r22' ( temp 2-component vector of float) +0:37 clamp ( temp 2-component vector of float) +0:37 Convert bool to float ( temp 2-component vector of float) +0:37 b2: direct index for structure ( uniform 2-component vector of bool) +0:37 '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:37 Constant: +0:37 7 (const uint) +0:37 f2: direct index for structure ( uniform 2-component vector of float) +0:37 '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:37 Constant: +0:37 6 (const uint) +0:37 Convert bool to float ( temp 2-component vector of float) +0:37 b2: direct index for structure ( uniform 2-component vector of bool) +0:37 '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:37 Constant: +0:37 7 (const uint) +0:40 Sequence +0:40 move second child to first child ( temp 2-component vector of float) +0:40 'r30' ( temp 2-component vector of float) +0:40 max ( temp 2-component vector of float) +0:40 Construct vec2 ( in 2-component vector of float) +0:40 Convert bool to float ( temp float) +0:40 b: direct index for structure ( uniform bool) +0:40 '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:40 Constant: +0:40 3 (const uint) +0:40 f2: direct index for structure ( uniform 2-component vector of float) +0:40 '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:40 Constant: +0:40 6 (const uint) +0:41 Sequence +0:41 move second child to first child ( temp 2-component vector of uint) +0:41 'r31' ( temp 2-component vector of uint) +0:41 max ( temp 2-component vector of uint) +0:41 Construct uvec2 ( in 2-component vector of uint) +0:41 Convert bool to uint ( temp uint) +0:41 b: direct index for structure ( uniform bool) +0:41 '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:41 Constant: +0:41 3 (const uint) +0:41 u2: direct index for structure ( uniform 2-component vector of uint) +0:41 '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:41 Constant: +0:41 5 (const uint) +0:42 Sequence +0:42 move second child to first child ( temp 2-component vector of int) +0:42 'r32' ( temp 2-component vector of int) +0:42 max ( temp 2-component vector of int) +0:42 Construct ivec2 ( in 2-component vector of int) +0:42 Convert bool to int ( temp int) +0:42 b: direct index for structure ( uniform bool) +0:42 '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:42 Constant: +0:42 3 (const uint) +0:42 i2: direct index for structure ( uniform 2-component vector of int) +0:42 '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:42 Constant: +0:42 4 (const uint) +0:43 Sequence +0:43 move second child to first child ( temp 2-component vector of float) +0:43 'r33' ( temp 2-component vector of float) +0:43 max ( temp 2-component vector of float) +0:43 Construct vec2 ( in 2-component vector of float) +0:43 Convert int to float ( temp float) +0:43 i: direct index for structure ( uniform int) +0:43 '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:43 Constant: +0:43 0 (const uint) +0:43 f2: direct index for structure ( uniform 2-component vector of float) +0:43 '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:43 Constant: +0:43 6 (const uint) +0:44 Sequence +0:44 move second child to first child ( temp 2-component vector of float) +0:44 'r34' ( temp 2-component vector of float) +0:44 max ( temp 2-component vector of float) +0:44 Construct vec2 ( in 2-component vector of float) +0:44 Convert uint to float ( temp float) +0:44 u: direct index for structure ( uniform uint) +0:44 '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:44 Constant: +0:44 1 (const uint) +0:44 f2: direct index for structure ( uniform 2-component vector of float) +0:44 '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:44 Constant: +0:44 6 (const uint) +0:46 Sequence +0:46 move second child to first child ( temp 2-component vector of float) +0:46 'r40' ( temp 2-component vector of float) +0:46 clamp ( temp 2-component vector of float) +0:46 Construct vec2 ( in 2-component vector of float) +0:46 Convert int to float ( temp float) +0:46 i: direct index for structure ( uniform int) +0:46 '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:46 Constant: +0:46 0 (const uint) +0:46 Convert uint to float ( temp 2-component vector of float) +0:46 u2: direct index for structure ( uniform 2-component vector of uint) +0:46 '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:46 Constant: +0:46 5 (const uint) +0:46 f2: direct index for structure ( uniform 2-component vector of float) +0:46 '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:46 Constant: +0:46 6 (const uint) +0:47 Sequence +0:47 move second child to first child ( temp 2-component vector of uint) +0:47 'r41' ( temp 2-component vector of uint) +0:47 clamp ( temp 2-component vector of uint) +0:47 Convert bool to uint ( temp 2-component vector of uint) +0:47 b2: direct index for structure ( uniform 2-component vector of bool) +0:47 '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:47 Constant: +0:47 7 (const uint) +0:47 Construct uvec2 ( in 2-component vector of uint) +0:47 u: direct index for structure ( uniform uint) +0:47 '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:47 Constant: +0:47 1 (const uint) +0:47 Convert bool to uint ( temp 2-component vector of uint) +0:47 b2: direct index for structure ( uniform 2-component vector of bool) +0:47 '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:47 Constant: +0:47 7 (const uint) +0:48 Sequence +0:48 move second child to first child ( temp 2-component vector of float) +0:48 'r42' ( temp 2-component vector of float) +0:48 clamp ( temp 2-component vector of float) +0:48 Convert bool to float ( temp 2-component vector of float) +0:48 b2: direct index for structure ( uniform 2-component vector of bool) +0:48 '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:48 Constant: +0:48 7 (const uint) +0:48 Construct vec2 ( in 2-component vector of float) +0:48 f: direct index for structure ( uniform float) +0:48 '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:48 Constant: +0:48 2 (const uint) +0:48 Construct vec2 ( in 2-component vector of float) +0:48 Convert bool to float ( temp float) +0:48 b: direct index for structure ( uniform bool) +0:48 '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:48 Constant: +0:48 3 (const uint) +0:49 Sequence +0:49 move second child to first child ( temp 2-component vector of int) +0:49 'r43' ( temp 2-component vector of int) +0:49 Convert uint to int ( temp 2-component vector of int) +0:49 clamp ( temp 2-component vector of uint) +0:49 Construct uvec2 ( in 2-component vector of uint) +0:49 Convert int to uint ( temp uint) +0:49 i: direct index for structure ( uniform int) +0:49 '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:49 Constant: +0:49 0 (const uint) +0:49 Convert int to uint ( temp 2-component vector of uint) +0:49 i2: direct index for structure ( uniform 2-component vector of int) +0:49 '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:49 Constant: +0:49 4 (const uint) +0:49 u2: direct index for structure ( uniform 2-component vector of uint) +0:49 '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:49 Constant: +0:49 5 (const uint) +0:51 Sequence +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: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}) +0:51 Constant: +0:51 8 (const uint) +0:52 Sequence +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: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}) +0:52 Constant: +0:52 9 (const uint) +0:70 Sequence +0:70 move second child to first child ( temp uint) +0:70 'sizeQueryTemp' ( temp uint) +0:70 textureSize ( temp uint) +0:70 'g_tTex1df4' ( uniform texture1D) +0:70 Constant: +0:70 0 (const int) +0:70 move second child to first child ( temp int) +0:70 'WidthI' ( temp int) +0:70 Convert uint to int ( temp int) +0:70 'sizeQueryTemp' ( temp uint) +0:71 Sequence +0:71 move second child to first child ( temp uint) +0:71 'sizeQueryTemp' ( temp uint) +0:71 textureSize ( temp uint) +0:71 'g_tTex1df4' ( uniform texture1D) +0:71 Constant: +0:71 6 (const uint) +0:71 move second child to first child ( temp int) +0:71 'WidthI' ( temp int) +0:71 Convert uint to int ( temp int) +0:71 'sizeQueryTemp' ( temp uint) +0:71 move second child to first child ( temp uint) +0:71 'NumberOfLevelsU' ( temp uint) +0:71 textureQueryLevels ( temp uint) +0:71 'g_tTex1df4' ( uniform texture1D) +0:72 Sequence +0:72 move second child to first child ( temp uint) +0:72 'sizeQueryTemp' ( temp uint) +0:72 textureSize ( temp uint) +0:72 'g_tTex1df4' ( uniform texture1D) +0:72 Constant: +0:72 6 (const uint) +0:72 move second child to first child ( temp uint) +0:72 'WidthU' ( temp uint) +0:72 'sizeQueryTemp' ( temp uint) +0:72 move second child to first child ( temp int) +0:72 'NumberOfLevelsI' ( temp int) +0:72 Convert uint to int ( temp int) +0:72 textureQueryLevels ( temp uint) +0:72 'g_tTex1df4' ( uniform texture1D) +0:73 Sequence +0:73 move second child to first child ( temp uint) +0:73 'sizeQueryTemp' ( temp uint) +0:73 textureSize ( temp uint) +0:73 'g_tTex1df4' ( uniform texture1D) +0:73 Constant: +0:73 6 (const uint) +0:73 move second child to first child ( temp int) +0:73 'WidthI' ( temp int) +0:73 Convert uint to int ( temp int) +0:73 'sizeQueryTemp' ( temp uint) +0:73 move second child to first child ( temp int) +0:73 'NumberOfLevelsI' ( temp int) +0:73 Convert uint to int ( temp int) +0:73 textureQueryLevels ( temp uint) +0:73 'g_tTex1df4' ( uniform texture1D) +0:77 move second child to first child ( temp 4-component vector of float) +0:77 color: direct index for structure ( temp 4-component vector of float) +0:77 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:77 Constant: +0:77 0 (const int) +0:77 Construct vec4 ( temp 4-component vector of float) +0:77 'r00' ( temp float) +0:78 Branch: Return with expression +0:78 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:20 Function Definition: main( ( temp void) +0:20 Function Parameters: +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: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_tTex1df4' ( uniform texture1D) +0:? 'color' (layout( location=0) out 4-component vector of float) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:20 Function Definition: @main( ( temp structure{ temp 4-component vector of float color}) +0:20 Function Parameters: +0:? Sequence +0:23 Sequence +0:23 move second child to first child ( temp float) +0:23 'r00' ( temp float) +0:23 max ( temp float) +0:23 Convert bool to float ( temp float) +0:23 b: direct index for structure ( uniform bool) +0:23 '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:23 Constant: +0:23 3 (const uint) +0:23 f: direct index for structure ( uniform float) +0:23 '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:23 Constant: +0:23 2 (const uint) +0:24 Sequence +0:24 move second child to first child ( temp uint) +0:24 'r01' ( temp uint) +0:24 max ( temp uint) +0:24 Convert bool to uint ( temp uint) +0:24 b: direct index for structure ( uniform bool) +0:24 '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:24 Constant: +0:24 3 (const uint) +0:24 u: direct index for structure ( uniform uint) +0:24 '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:24 Constant: +0:24 1 (const uint) +0:25 Sequence +0:25 move second child to first child ( temp int) +0:25 'r02' ( temp int) +0:25 max ( temp int) +0:25 Convert bool to int ( temp int) +0:25 b: direct index for structure ( uniform bool) +0:25 '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:25 Constant: +0:25 3 (const uint) +0:25 i: direct index for structure ( uniform int) +0:25 '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:25 Constant: +0:25 0 (const uint) +0:26 Sequence +0:26 move second child to first child ( temp float) +0:26 'r03' ( temp float) +0:26 max ( temp float) +0:26 Convert int to float ( temp float) +0:26 i: direct index for structure ( uniform int) +0:26 '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:26 Constant: +0:26 0 (const uint) +0:26 f: direct index for structure ( uniform float) +0:26 '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:26 Constant: +0:26 2 (const uint) +0:27 Sequence +0:27 move second child to first child ( temp float) +0:27 'r04' ( temp float) +0:27 max ( temp float) +0:27 Convert uint to float ( temp float) +0:27 u: direct index for structure ( uniform uint) +0:27 '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:27 Constant: +0:27 1 (const uint) +0:27 f: direct index for structure ( uniform float) +0:27 '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:27 Constant: +0:27 2 (const uint) +0:29 Sequence +0:29 move second child to first child ( temp 2-component vector of float) +0:29 'r10' ( temp 2-component vector of float) +0:29 max ( temp 2-component vector of float) +0:29 Convert bool to float ( temp 2-component vector of float) +0:29 b2: direct index for structure ( uniform 2-component vector of bool) +0:29 '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:29 Constant: +0:29 7 (const uint) +0:29 f2: direct index for structure ( uniform 2-component vector of float) +0:29 '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:29 Constant: +0:29 6 (const uint) +0:30 Sequence +0:30 move second child to first child ( temp 2-component vector of uint) +0:30 'r11' ( temp 2-component vector of uint) +0:30 max ( temp 2-component vector of uint) +0:30 Convert bool to uint ( temp 2-component vector of uint) +0:30 b2: direct index for structure ( uniform 2-component vector of bool) +0:30 '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:30 Constant: +0:30 7 (const uint) +0:30 u2: direct index for structure ( uniform 2-component vector of uint) +0:30 '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:30 Constant: +0:30 5 (const uint) +0:31 Sequence +0:31 move second child to first child ( temp 2-component vector of int) +0:31 'r12' ( temp 2-component vector of int) +0:31 max ( temp 2-component vector of int) +0:31 Convert bool to int ( temp 2-component vector of int) +0:31 b2: direct index for structure ( uniform 2-component vector of bool) +0:31 '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:31 Constant: +0:31 7 (const uint) +0:31 i2: direct index for structure ( uniform 2-component vector of int) +0:31 '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:31 Constant: +0:31 4 (const uint) +0:32 Sequence +0:32 move second child to first child ( temp 2-component vector of float) +0:32 'r13' ( temp 2-component vector of float) +0:32 max ( temp 2-component vector of float) +0:32 Convert int to float ( temp 2-component vector of float) +0:32 i2: direct index for structure ( uniform 2-component vector of int) +0:32 '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:32 Constant: +0:32 4 (const uint) +0:32 f2: direct index for structure ( uniform 2-component vector of float) +0:32 '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:32 Constant: +0:32 6 (const uint) +0:33 Sequence +0:33 move second child to first child ( temp 2-component vector of float) +0:33 'r14' ( temp 2-component vector of float) +0:33 max ( temp 2-component vector of float) +0:33 Convert uint to float ( temp 2-component vector of float) +0:33 u2: direct index for structure ( uniform 2-component vector of uint) +0:33 '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:33 Constant: +0:33 5 (const uint) +0:33 f2: direct index for structure ( uniform 2-component vector of float) +0:33 '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:33 Constant: +0:33 6 (const uint) +0:35 Sequence +0:35 move second child to first child ( temp 2-component vector of float) +0:35 'r20' ( temp 2-component vector of float) +0:35 clamp ( temp 2-component vector of float) +0:35 Convert int to float ( temp 2-component vector of float) +0:35 i2: direct index for structure ( uniform 2-component vector of int) +0:35 '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:35 Constant: +0:35 4 (const uint) +0:35 Convert uint to float ( temp 2-component vector of float) +0:35 u2: direct index for structure ( uniform 2-component vector of uint) +0:35 '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:35 Constant: +0:35 5 (const uint) +0:35 f2: direct index for structure ( uniform 2-component vector of float) +0:35 '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:35 Constant: +0:35 6 (const uint) +0:36 Sequence +0:36 move second child to first child ( temp 2-component vector of uint) +0:36 'r21' ( temp 2-component vector of uint) +0:36 clamp ( temp 2-component vector of uint) +0:36 Convert bool to uint ( temp 2-component vector of uint) +0:36 b2: direct index for structure ( uniform 2-component vector of bool) +0:36 '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:36 Constant: +0:36 7 (const uint) +0:36 u2: direct index for structure ( uniform 2-component vector of uint) +0:36 '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:36 Constant: +0:36 5 (const uint) +0:36 Convert bool to uint ( temp 2-component vector of uint) +0:36 b2: direct index for structure ( uniform 2-component vector of bool) +0:36 '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:36 Constant: +0:36 7 (const uint) +0:37 Sequence +0:37 move second child to first child ( temp 2-component vector of float) +0:37 'r22' ( temp 2-component vector of float) +0:37 clamp ( temp 2-component vector of float) +0:37 Convert bool to float ( temp 2-component vector of float) +0:37 b2: direct index for structure ( uniform 2-component vector of bool) +0:37 '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:37 Constant: +0:37 7 (const uint) +0:37 f2: direct index for structure ( uniform 2-component vector of float) +0:37 '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:37 Constant: +0:37 6 (const uint) +0:37 Convert bool to float ( temp 2-component vector of float) +0:37 b2: direct index for structure ( uniform 2-component vector of bool) +0:37 '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:37 Constant: +0:37 7 (const uint) +0:40 Sequence +0:40 move second child to first child ( temp 2-component vector of float) +0:40 'r30' ( temp 2-component vector of float) +0:40 max ( temp 2-component vector of float) +0:40 Construct vec2 ( in 2-component vector of float) +0:40 Convert bool to float ( temp float) +0:40 b: direct index for structure ( uniform bool) +0:40 '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:40 Constant: +0:40 3 (const uint) +0:40 f2: direct index for structure ( uniform 2-component vector of float) +0:40 '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:40 Constant: +0:40 6 (const uint) +0:41 Sequence +0:41 move second child to first child ( temp 2-component vector of uint) +0:41 'r31' ( temp 2-component vector of uint) +0:41 max ( temp 2-component vector of uint) +0:41 Construct uvec2 ( in 2-component vector of uint) +0:41 Convert bool to uint ( temp uint) +0:41 b: direct index for structure ( uniform bool) +0:41 '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:41 Constant: +0:41 3 (const uint) +0:41 u2: direct index for structure ( uniform 2-component vector of uint) +0:41 '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:41 Constant: +0:41 5 (const uint) +0:42 Sequence +0:42 move second child to first child ( temp 2-component vector of int) +0:42 'r32' ( temp 2-component vector of int) +0:42 max ( temp 2-component vector of int) +0:42 Construct ivec2 ( in 2-component vector of int) +0:42 Convert bool to int ( temp int) +0:42 b: direct index for structure ( uniform bool) +0:42 '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:42 Constant: +0:42 3 (const uint) +0:42 i2: direct index for structure ( uniform 2-component vector of int) +0:42 '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:42 Constant: +0:42 4 (const uint) +0:43 Sequence +0:43 move second child to first child ( temp 2-component vector of float) +0:43 'r33' ( temp 2-component vector of float) +0:43 max ( temp 2-component vector of float) +0:43 Construct vec2 ( in 2-component vector of float) +0:43 Convert int to float ( temp float) +0:43 i: direct index for structure ( uniform int) +0:43 '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:43 Constant: +0:43 0 (const uint) +0:43 f2: direct index for structure ( uniform 2-component vector of float) +0:43 '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:43 Constant: +0:43 6 (const uint) +0:44 Sequence +0:44 move second child to first child ( temp 2-component vector of float) +0:44 'r34' ( temp 2-component vector of float) +0:44 max ( temp 2-component vector of float) +0:44 Construct vec2 ( in 2-component vector of float) +0:44 Convert uint to float ( temp float) +0:44 u: direct index for structure ( uniform uint) +0:44 '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:44 Constant: +0:44 1 (const uint) +0:44 f2: direct index for structure ( uniform 2-component vector of float) +0:44 '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:44 Constant: +0:44 6 (const uint) +0:46 Sequence +0:46 move second child to first child ( temp 2-component vector of float) +0:46 'r40' ( temp 2-component vector of float) +0:46 clamp ( temp 2-component vector of float) +0:46 Construct vec2 ( in 2-component vector of float) +0:46 Convert int to float ( temp float) +0:46 i: direct index for structure ( uniform int) +0:46 '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:46 Constant: +0:46 0 (const uint) +0:46 Convert uint to float ( temp 2-component vector of float) +0:46 u2: direct index for structure ( uniform 2-component vector of uint) +0:46 '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:46 Constant: +0:46 5 (const uint) +0:46 f2: direct index for structure ( uniform 2-component vector of float) +0:46 '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:46 Constant: +0:46 6 (const uint) +0:47 Sequence +0:47 move second child to first child ( temp 2-component vector of uint) +0:47 'r41' ( temp 2-component vector of uint) +0:47 clamp ( temp 2-component vector of uint) +0:47 Convert bool to uint ( temp 2-component vector of uint) +0:47 b2: direct index for structure ( uniform 2-component vector of bool) +0:47 '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:47 Constant: +0:47 7 (const uint) +0:47 Construct uvec2 ( in 2-component vector of uint) +0:47 u: direct index for structure ( uniform uint) +0:47 '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:47 Constant: +0:47 1 (const uint) +0:47 Convert bool to uint ( temp 2-component vector of uint) +0:47 b2: direct index for structure ( uniform 2-component vector of bool) +0:47 '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:47 Constant: +0:47 7 (const uint) +0:48 Sequence +0:48 move second child to first child ( temp 2-component vector of float) +0:48 'r42' ( temp 2-component vector of float) +0:48 clamp ( temp 2-component vector of float) +0:48 Convert bool to float ( temp 2-component vector of float) +0:48 b2: direct index for structure ( uniform 2-component vector of bool) +0:48 '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:48 Constant: +0:48 7 (const uint) +0:48 Construct vec2 ( in 2-component vector of float) +0:48 f: direct index for structure ( uniform float) +0:48 '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:48 Constant: +0:48 2 (const uint) +0:48 Construct vec2 ( in 2-component vector of float) +0:48 Convert bool to float ( temp float) +0:48 b: direct index for structure ( uniform bool) +0:48 '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:48 Constant: +0:48 3 (const uint) +0:49 Sequence +0:49 move second child to first child ( temp 2-component vector of int) +0:49 'r43' ( temp 2-component vector of int) +0:49 Convert uint to int ( temp 2-component vector of int) +0:49 clamp ( temp 2-component vector of uint) +0:49 Construct uvec2 ( in 2-component vector of uint) +0:49 Convert int to uint ( temp uint) +0:49 i: direct index for structure ( uniform int) +0:49 '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:49 Constant: +0:49 0 (const uint) +0:49 Convert int to uint ( temp 2-component vector of uint) +0:49 i2: direct index for structure ( uniform 2-component vector of int) +0:49 '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:49 Constant: +0:49 4 (const uint) +0:49 u2: direct index for structure ( uniform 2-component vector of uint) +0:49 '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:49 Constant: +0:49 5 (const uint) +0:51 Sequence +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: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}) +0:51 Constant: +0:51 8 (const uint) +0:52 Sequence +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: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}) +0:52 Constant: +0:52 9 (const uint) +0:70 Sequence +0:70 move second child to first child ( temp uint) +0:70 'sizeQueryTemp' ( temp uint) +0:70 textureSize ( temp uint) +0:70 'g_tTex1df4' ( uniform texture1D) +0:70 Constant: +0:70 0 (const int) +0:70 move second child to first child ( temp int) +0:70 'WidthI' ( temp int) +0:70 Convert uint to int ( temp int) +0:70 'sizeQueryTemp' ( temp uint) +0:71 Sequence +0:71 move second child to first child ( temp uint) +0:71 'sizeQueryTemp' ( temp uint) +0:71 textureSize ( temp uint) +0:71 'g_tTex1df4' ( uniform texture1D) +0:71 Constant: +0:71 6 (const uint) +0:71 move second child to first child ( temp int) +0:71 'WidthI' ( temp int) +0:71 Convert uint to int ( temp int) +0:71 'sizeQueryTemp' ( temp uint) +0:71 move second child to first child ( temp uint) +0:71 'NumberOfLevelsU' ( temp uint) +0:71 textureQueryLevels ( temp uint) +0:71 'g_tTex1df4' ( uniform texture1D) +0:72 Sequence +0:72 move second child to first child ( temp uint) +0:72 'sizeQueryTemp' ( temp uint) +0:72 textureSize ( temp uint) +0:72 'g_tTex1df4' ( uniform texture1D) +0:72 Constant: +0:72 6 (const uint) +0:72 move second child to first child ( temp uint) +0:72 'WidthU' ( temp uint) +0:72 'sizeQueryTemp' ( temp uint) +0:72 move second child to first child ( temp int) +0:72 'NumberOfLevelsI' ( temp int) +0:72 Convert uint to int ( temp int) +0:72 textureQueryLevels ( temp uint) +0:72 'g_tTex1df4' ( uniform texture1D) +0:73 Sequence +0:73 move second child to first child ( temp uint) +0:73 'sizeQueryTemp' ( temp uint) +0:73 textureSize ( temp uint) +0:73 'g_tTex1df4' ( uniform texture1D) +0:73 Constant: +0:73 6 (const uint) +0:73 move second child to first child ( temp int) +0:73 'WidthI' ( temp int) +0:73 Convert uint to int ( temp int) +0:73 'sizeQueryTemp' ( temp uint) +0:73 move second child to first child ( temp int) +0:73 'NumberOfLevelsI' ( temp int) +0:73 Convert uint to int ( temp int) +0:73 textureQueryLevels ( temp uint) +0:73 'g_tTex1df4' ( uniform texture1D) +0:77 move second child to first child ( temp 4-component vector of float) +0:77 color: direct index for structure ( temp 4-component vector of float) +0:77 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:77 Constant: +0:77 0 (const int) +0:77 Construct vec4 ( temp 4-component vector of float) +0:77 'r00' ( temp float) +0:78 Branch: Return with expression +0:78 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:20 Function Definition: main( ( temp void) +0:20 Function Parameters: +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: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_tTex1df4' ( uniform texture1D) +0:? 'color' (layout( location=0) out 4-component vector of float) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 322 + + Capability Shader + Capability Sampled1D + Capability SampledBuffer + Capability ImageQuery + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 319 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "color" + Name 10 "@main(" + Name 13 "r00" + Name 19 "$Global" + MemberName 19($Global) 0 "i" + MemberName 19($Global) 1 "u" + MemberName 19($Global) 2 "f" + MemberName 19($Global) 3 "b" + MemberName 19($Global) 4 "i2" + MemberName 19($Global) 5 "u2" + MemberName 19($Global) 6 "f2" + MemberName 19($Global) 7 "b2" + MemberName 19($Global) 8 "upos" + MemberName 19($Global) 9 "fpos" + Name 21 "" + Name 38 "r01" + Name 49 "r02" + Name 59 "r03" + Name 66 "r04" + Name 74 "r10" + Name 91 "r11" + Name 102 "r12" + Name 114 "r13" + Name 121 "r14" + Name 128 "r20" + Name 138 "r21" + Name 150 "r22" + Name 162 "r30" + Name 171 "r31" + Name 180 "r32" + Name 189 "r33" + Name 197 "r34" + Name 205 "r40" + Name 216 "r41" + Name 229 "r42" + Name 243 "r43" + Name 255 "r50" + Name 258 "g_tTexbfs" + Name 266 "r51" + Name 274 "sizeQueryTemp" + Name 277 "g_tTex1df4" + Name 280 "WidthI" + Name 283 "sizeQueryTemp" + Name 289 "NumberOfLevelsU" + Name 292 "sizeQueryTemp" + Name 295 "WidthU" + Name 297 "NumberOfLevelsI" + Name 301 "sizeQueryTemp" + Name 310 "ps_output" + Name 319 "color" + MemberDecorate 19($Global) 0 Offset 0 + MemberDecorate 19($Global) 1 Offset 4 + MemberDecorate 19($Global) 2 Offset 8 + MemberDecorate 19($Global) 3 Offset 12 + MemberDecorate 19($Global) 4 Offset 16 + MemberDecorate 19($Global) 5 Offset 24 + MemberDecorate 19($Global) 6 Offset 32 + MemberDecorate 19($Global) 7 Offset 40 + MemberDecorate 19($Global) 8 Offset 48 + MemberDecorate 19($Global) 9 Offset 52 + 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 + 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: TypePointer Function 6(float) + 14: TypeInt 32 1 + 15: TypeInt 32 0 + 16: TypeVector 14(int) 2 + 17: TypeVector 15(int) 2 + 18: TypeVector 6(float) 2 + 19($Global): TypeStruct 14(int) 15(int) 6(float) 15(int) 16(ivec2) 17(ivec2) 18(fvec2) 17(ivec2) 15(int) 6(float) + 20: TypePointer Uniform 19($Global) + 21: 20(ptr) Variable Uniform + 22: 14(int) Constant 3 + 23: TypePointer Uniform 15(int) + 26: TypeBool + 27: 15(int) Constant 0 + 29: 6(float) Constant 0 + 30: 6(float) Constant 1065353216 + 32: 14(int) Constant 2 + 33: TypePointer Uniform 6(float) + 37: TypePointer Function 15(int) + 42: 15(int) Constant 1 + 44: 14(int) Constant 1 + 48: TypePointer Function 14(int) + 53: 14(int) Constant 0 + 55: TypePointer Uniform 14(int) + 73: TypePointer Function 18(fvec2) + 75: 14(int) Constant 7 + 76: TypePointer Uniform 17(ivec2) + 79: TypeVector 26(bool) 2 + 80: 17(ivec2) ConstantComposite 27 27 + 82: 18(fvec2) ConstantComposite 29 29 + 83: 18(fvec2) ConstantComposite 30 30 + 85: 14(int) Constant 6 + 86: TypePointer Uniform 18(fvec2) + 90: TypePointer Function 17(ivec2) + 95: 17(ivec2) ConstantComposite 42 42 + 97: 14(int) Constant 5 + 101: TypePointer Function 16(ivec2) + 106: 16(ivec2) ConstantComposite 53 53 + 107: 16(ivec2) ConstantComposite 44 44 + 109: 14(int) Constant 4 + 110: TypePointer Uniform 16(ivec2) + 256: TypeImage 6(float) Buffer nonsampled format:R32f + 257: TypePointer UniformConstant 256 + 258(g_tTexbfs): 257(ptr) Variable UniformConstant + 260: 14(int) Constant 8 + 268: 14(int) Constant 9 + 275: TypeImage 6(float) 1D sampled format:Unknown + 276: TypePointer UniformConstant 275 + 277(g_tTex1df4): 276(ptr) Variable UniformConstant + 285: 15(int) Constant 6 + 309: TypePointer Function 8(PS_OUTPUT) + 313: TypePointer Function 7(fvec4) + 318: TypePointer Output 7(fvec4) + 319(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 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 13(r00): 12(ptr) Variable Function + 38(r01): 37(ptr) Variable Function + 49(r02): 48(ptr) Variable Function + 59(r03): 12(ptr) Variable Function + 66(r04): 12(ptr) Variable Function + 74(r10): 73(ptr) Variable Function + 91(r11): 90(ptr) Variable Function + 102(r12): 101(ptr) Variable Function + 114(r13): 73(ptr) Variable Function + 121(r14): 73(ptr) Variable Function + 128(r20): 73(ptr) Variable Function + 138(r21): 90(ptr) Variable Function + 150(r22): 73(ptr) Variable Function + 162(r30): 73(ptr) Variable Function + 171(r31): 90(ptr) Variable Function + 180(r32): 101(ptr) Variable Function + 189(r33): 73(ptr) Variable Function + 197(r34): 73(ptr) Variable Function + 205(r40): 73(ptr) Variable Function + 216(r41): 90(ptr) Variable Function + 229(r42): 73(ptr) Variable Function + 243(r43): 101(ptr) Variable Function + 255(r50): 12(ptr) Variable Function + 266(r51): 12(ptr) Variable Function +274(sizeQueryTemp): 37(ptr) Variable Function + 280(WidthI): 48(ptr) Variable Function +283(sizeQueryTemp): 37(ptr) Variable Function +289(NumberOfLevelsU): 37(ptr) Variable Function +292(sizeQueryTemp): 37(ptr) Variable Function + 295(WidthU): 37(ptr) Variable Function +297(NumberOfLevelsI): 48(ptr) Variable Function +301(sizeQueryTemp): 37(ptr) Variable Function + 310(ps_output): 309(ptr) Variable Function + 24: 23(ptr) AccessChain 21 22 + 25: 15(int) Load 24 + 28: 26(bool) INotEqual 25 27 + 31: 6(float) Select 28 30 29 + 34: 33(ptr) AccessChain 21 32 + 35: 6(float) Load 34 + 36: 6(float) ExtInst 1(GLSL.std.450) 40(FMax) 31 35 + Store 13(r00) 36 + 39: 23(ptr) AccessChain 21 22 + 40: 15(int) Load 39 + 41: 26(bool) INotEqual 40 27 + 43: 15(int) Select 41 42 27 + 45: 23(ptr) AccessChain 21 44 + 46: 15(int) Load 45 + 47: 15(int) ExtInst 1(GLSL.std.450) 41(UMax) 43 46 + Store 38(r01) 47 + 50: 23(ptr) AccessChain 21 22 + 51: 15(int) Load 50 + 52: 26(bool) INotEqual 51 27 + 54: 14(int) Select 52 44 53 + 56: 55(ptr) AccessChain 21 53 + 57: 14(int) Load 56 + 58: 14(int) ExtInst 1(GLSL.std.450) 42(SMax) 54 57 + Store 49(r02) 58 + 60: 55(ptr) AccessChain 21 53 + 61: 14(int) Load 60 + 62: 6(float) ConvertSToF 61 + 63: 33(ptr) AccessChain 21 32 + 64: 6(float) Load 63 + 65: 6(float) ExtInst 1(GLSL.std.450) 40(FMax) 62 64 + Store 59(r03) 65 + 67: 23(ptr) AccessChain 21 44 + 68: 15(int) Load 67 + 69: 6(float) ConvertUToF 68 + 70: 33(ptr) AccessChain 21 32 + 71: 6(float) Load 70 + 72: 6(float) ExtInst 1(GLSL.std.450) 40(FMax) 69 71 + Store 66(r04) 72 + 77: 76(ptr) AccessChain 21 75 + 78: 17(ivec2) Load 77 + 81: 79(bvec2) INotEqual 78 80 + 84: 18(fvec2) Select 81 83 82 + 87: 86(ptr) AccessChain 21 85 + 88: 18(fvec2) Load 87 + 89: 18(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 84 88 + Store 74(r10) 89 + 92: 76(ptr) AccessChain 21 75 + 93: 17(ivec2) Load 92 + 94: 79(bvec2) INotEqual 93 80 + 96: 17(ivec2) Select 94 95 80 + 98: 76(ptr) AccessChain 21 97 + 99: 17(ivec2) Load 98 + 100: 17(ivec2) ExtInst 1(GLSL.std.450) 41(UMax) 96 99 + Store 91(r11) 100 + 103: 76(ptr) AccessChain 21 75 + 104: 17(ivec2) Load 103 + 105: 79(bvec2) INotEqual 104 80 + 108: 16(ivec2) Select 105 107 106 + 111: 110(ptr) AccessChain 21 109 + 112: 16(ivec2) Load 111 + 113: 16(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 108 112 + Store 102(r12) 113 + 115: 110(ptr) AccessChain 21 109 + 116: 16(ivec2) Load 115 + 117: 18(fvec2) ConvertSToF 116 + 118: 86(ptr) AccessChain 21 85 + 119: 18(fvec2) Load 118 + 120: 18(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 117 119 + Store 114(r13) 120 + 122: 76(ptr) AccessChain 21 97 + 123: 17(ivec2) Load 122 + 124: 18(fvec2) ConvertUToF 123 + 125: 86(ptr) AccessChain 21 85 + 126: 18(fvec2) Load 125 + 127: 18(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 124 126 + Store 121(r14) 127 + 129: 110(ptr) AccessChain 21 109 + 130: 16(ivec2) Load 129 + 131: 18(fvec2) ConvertSToF 130 + 132: 76(ptr) AccessChain 21 97 + 133: 17(ivec2) Load 132 + 134: 18(fvec2) ConvertUToF 133 + 135: 86(ptr) AccessChain 21 85 + 136: 18(fvec2) Load 135 + 137: 18(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 131 134 136 + Store 128(r20) 137 + 139: 76(ptr) AccessChain 21 75 + 140: 17(ivec2) Load 139 + 141: 79(bvec2) INotEqual 140 80 + 142: 17(ivec2) Select 141 95 80 + 143: 76(ptr) AccessChain 21 97 + 144: 17(ivec2) Load 143 + 145: 76(ptr) AccessChain 21 75 + 146: 17(ivec2) Load 145 + 147: 79(bvec2) INotEqual 146 80 + 148: 17(ivec2) Select 147 95 80 + 149: 17(ivec2) ExtInst 1(GLSL.std.450) 44(UClamp) 142 144 148 + Store 138(r21) 149 + 151: 76(ptr) AccessChain 21 75 + 152: 17(ivec2) Load 151 + 153: 79(bvec2) INotEqual 152 80 + 154: 18(fvec2) Select 153 83 82 + 155: 86(ptr) AccessChain 21 85 + 156: 18(fvec2) Load 155 + 157: 76(ptr) AccessChain 21 75 + 158: 17(ivec2) Load 157 + 159: 79(bvec2) INotEqual 158 80 + 160: 18(fvec2) Select 159 83 82 + 161: 18(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 154 156 160 + Store 150(r22) 161 + 163: 23(ptr) AccessChain 21 22 + 164: 15(int) Load 163 + 165: 26(bool) INotEqual 164 27 + 166: 6(float) Select 165 30 29 + 167: 18(fvec2) CompositeConstruct 166 166 + 168: 86(ptr) AccessChain 21 85 + 169: 18(fvec2) Load 168 + 170: 18(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 167 169 + Store 162(r30) 170 + 172: 23(ptr) AccessChain 21 22 + 173: 15(int) Load 172 + 174: 26(bool) INotEqual 173 27 + 175: 15(int) Select 174 42 27 + 176: 17(ivec2) CompositeConstruct 175 175 + 177: 76(ptr) AccessChain 21 97 + 178: 17(ivec2) Load 177 + 179: 17(ivec2) ExtInst 1(GLSL.std.450) 41(UMax) 176 178 + Store 171(r31) 179 + 181: 23(ptr) AccessChain 21 22 + 182: 15(int) Load 181 + 183: 26(bool) INotEqual 182 27 + 184: 14(int) Select 183 44 53 + 185: 16(ivec2) CompositeConstruct 184 184 + 186: 110(ptr) AccessChain 21 109 + 187: 16(ivec2) Load 186 + 188: 16(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 185 187 + Store 180(r32) 188 + 190: 55(ptr) AccessChain 21 53 + 191: 14(int) Load 190 + 192: 6(float) ConvertSToF 191 + 193: 18(fvec2) CompositeConstruct 192 192 + 194: 86(ptr) AccessChain 21 85 + 195: 18(fvec2) Load 194 + 196: 18(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 193 195 + Store 189(r33) 196 + 198: 23(ptr) AccessChain 21 44 + 199: 15(int) Load 198 + 200: 6(float) ConvertUToF 199 + 201: 18(fvec2) CompositeConstruct 200 200 + 202: 86(ptr) AccessChain 21 85 + 203: 18(fvec2) Load 202 + 204: 18(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 201 203 + Store 197(r34) 204 + 206: 55(ptr) AccessChain 21 53 + 207: 14(int) Load 206 + 208: 6(float) ConvertSToF 207 + 209: 18(fvec2) CompositeConstruct 208 208 + 210: 76(ptr) AccessChain 21 97 + 211: 17(ivec2) Load 210 + 212: 18(fvec2) ConvertUToF 211 + 213: 86(ptr) AccessChain 21 85 + 214: 18(fvec2) Load 213 + 215: 18(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 209 212 214 + Store 205(r40) 215 + 217: 76(ptr) AccessChain 21 75 + 218: 17(ivec2) Load 217 + 219: 79(bvec2) INotEqual 218 80 + 220: 17(ivec2) Select 219 95 80 + 221: 23(ptr) AccessChain 21 44 + 222: 15(int) Load 221 + 223: 17(ivec2) CompositeConstruct 222 222 + 224: 76(ptr) AccessChain 21 75 + 225: 17(ivec2) Load 224 + 226: 79(bvec2) INotEqual 225 80 + 227: 17(ivec2) Select 226 95 80 + 228: 17(ivec2) ExtInst 1(GLSL.std.450) 44(UClamp) 220 223 227 + Store 216(r41) 228 + 230: 76(ptr) AccessChain 21 75 + 231: 17(ivec2) Load 230 + 232: 79(bvec2) INotEqual 231 80 + 233: 18(fvec2) Select 232 83 82 + 234: 33(ptr) AccessChain 21 32 + 235: 6(float) Load 234 + 236: 18(fvec2) CompositeConstruct 235 235 + 237: 23(ptr) AccessChain 21 22 + 238: 15(int) Load 237 + 239: 26(bool) INotEqual 238 27 + 240: 6(float) Select 239 30 29 + 241: 18(fvec2) CompositeConstruct 240 240 + 242: 18(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 233 236 241 + Store 229(r42) 242 + 244: 55(ptr) AccessChain 21 53 + 245: 14(int) Load 244 + 246: 15(int) Bitcast 245 + 247: 17(ivec2) CompositeConstruct 246 246 + 248: 110(ptr) AccessChain 21 109 + 249: 16(ivec2) Load 248 + 250: 17(ivec2) Bitcast 249 + 251: 76(ptr) AccessChain 21 97 + 252: 17(ivec2) Load 251 + 253: 17(ivec2) ExtInst 1(GLSL.std.450) 44(UClamp) 247 250 252 + 254: 16(ivec2) Bitcast 253 + Store 243(r43) 254 + 259: 256 Load 258(g_tTexbfs) + 261: 23(ptr) AccessChain 21 260 + 262: 15(int) Load 261 + 263: 14(int) Bitcast 262 + 264: 7(fvec4) ImageRead 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 + 273: 6(float) CompositeExtract 272 0 + Store 266(r51) 273 + 278: 275 Load 277(g_tTex1df4) + 279: 15(int) ImageQuerySizeLod 278 53 + Store 274(sizeQueryTemp) 279 + 281: 15(int) Load 274(sizeQueryTemp) + 282: 14(int) Bitcast 281 + Store 280(WidthI) 282 + 284: 275 Load 277(g_tTex1df4) + 286: 15(int) ImageQuerySizeLod 284 285 + Store 283(sizeQueryTemp) 286 + 287: 15(int) Load 283(sizeQueryTemp) + 288: 14(int) Bitcast 287 + Store 280(WidthI) 288 + 290: 275 Load 277(g_tTex1df4) + 291: 15(int) ImageQueryLevels 290 + Store 289(NumberOfLevelsU) 291 + 293: 275 Load 277(g_tTex1df4) + 294: 15(int) ImageQuerySizeLod 293 285 + Store 292(sizeQueryTemp) 294 + 296: 15(int) Load 292(sizeQueryTemp) + Store 295(WidthU) 296 + 298: 275 Load 277(g_tTex1df4) + 299: 15(int) ImageQueryLevels 298 + 300: 14(int) Bitcast 299 + Store 297(NumberOfLevelsI) 300 + 302: 275 Load 277(g_tTex1df4) + 303: 15(int) ImageQuerySizeLod 302 285 + Store 301(sizeQueryTemp) 303 + 304: 15(int) Load 301(sizeQueryTemp) + 305: 14(int) Bitcast 304 + Store 280(WidthI) 305 + 306: 275 Load 277(g_tTex1df4) + 307: 15(int) ImageQueryLevels 306 + 308: 14(int) Bitcast 307 + Store 297(NumberOfLevelsI) 308 + 311: 6(float) Load 13(r00) + 312: 7(fvec4) CompositeConstruct 311 311 311 311 + 314: 313(ptr) AccessChain 310(ps_output) 53 + Store 314 312 + 315:8(PS_OUTPUT) Load 310(ps_output) + ReturnValue 315 + FunctionEnd 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 new file mode 100644 index 0000000..7ccc596 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out @@ -0,0 +1,354 @@ +hlsl.intrinsics.promote.outputs.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:20 Function Definition: @main( ( temp structure{ temp 4-component vector of float color}) +0:20 Function Parameters: +0:? Sequence +0:37 clamp ( temp float) +0:37 fpos: direct index for structure ( uniform float) +0:37 '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:37 Constant: +0:37 9 (const uint) +0:37 Constant: +0:37 0.000000 +0:37 Constant: +0:37 1.000000 +0:40 Sequence +0:40 move second child to first child ( temp uint) +0:40 'sizeQueryTemp' ( temp uint) +0:40 textureSize ( temp uint) +0:40 'g_tTex1df4' ( uniform texture1D) +0:40 Constant: +0:40 0 (const int) +0:40 move second child to first child ( temp int) +0:40 'WidthI' ( temp int) +0:40 Convert uint to int ( temp int) +0:40 'sizeQueryTemp' ( temp uint) +0:41 Sequence +0:41 move second child to first child ( temp uint) +0:41 'sizeQueryTemp' ( temp uint) +0:41 textureSize ( temp uint) +0:41 'g_tTex1df4' ( uniform texture1D) +0:41 Constant: +0:41 6 (const uint) +0:41 move second child to first child ( temp int) +0:41 'WidthI' ( temp int) +0:41 Convert uint to int ( temp int) +0:41 'sizeQueryTemp' ( temp uint) +0:41 move second child to first child ( temp uint) +0:41 'NumberOfLevelsU' ( temp uint) +0:41 textureQueryLevels ( temp uint) +0:41 'g_tTex1df4' ( uniform texture1D) +0:42 Sequence +0:42 move second child to first child ( temp uint) +0:42 'sizeQueryTemp' ( temp uint) +0:42 textureSize ( temp uint) +0:42 'g_tTex1df4' ( uniform texture1D) +0:42 Constant: +0:42 6 (const uint) +0:42 move second child to first child ( temp uint) +0:42 'WidthU' ( temp uint) +0:42 'sizeQueryTemp' ( temp uint) +0:42 move second child to first child ( temp int) +0:42 'NumberOfLevelsI' ( temp int) +0:42 Convert uint to int ( temp int) +0:42 textureQueryLevels ( temp uint) +0:42 'g_tTex1df4' ( uniform texture1D) +0:43 Sequence +0:43 move second child to first child ( temp uint) +0:43 'sizeQueryTemp' ( temp uint) +0:43 textureSize ( temp uint) +0:43 'g_tTex1df4' ( uniform texture1D) +0:43 Constant: +0:43 6 (const uint) +0:43 move second child to first child ( temp int) +0:43 'WidthI' ( temp int) +0:43 Convert uint to int ( temp int) +0:43 'sizeQueryTemp' ( temp uint) +0:43 move second child to first child ( temp int) +0:43 'NumberOfLevelsI' ( temp int) +0:43 Convert uint to int ( temp int) +0:43 textureQueryLevels ( temp uint) +0:43 'g_tTex1df4' ( uniform texture1D) +0:47 move second child to first child ( temp 4-component vector of float) +0:47 color: direct index for structure ( temp 4-component vector of float) +0:47 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:47 Constant: +0:47 0 (const int) +0:47 Constant: +0:47 0.000000 +0:47 0.000000 +0:47 0.000000 +0:47 0.000000 +0:48 Branch: Return with expression +0:48 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:20 Function Definition: main( ( temp void) +0:20 Function Parameters: +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: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_tTex1df4' ( uniform texture1D) +0:? 'color' (layout( location=0) out 4-component vector of float) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:20 Function Definition: @main( ( temp structure{ temp 4-component vector of float color}) +0:20 Function Parameters: +0:? Sequence +0:37 clamp ( temp float) +0:37 fpos: direct index for structure ( uniform float) +0:37 '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:37 Constant: +0:37 9 (const uint) +0:37 Constant: +0:37 0.000000 +0:37 Constant: +0:37 1.000000 +0:40 Sequence +0:40 move second child to first child ( temp uint) +0:40 'sizeQueryTemp' ( temp uint) +0:40 textureSize ( temp uint) +0:40 'g_tTex1df4' ( uniform texture1D) +0:40 Constant: +0:40 0 (const int) +0:40 move second child to first child ( temp int) +0:40 'WidthI' ( temp int) +0:40 Convert uint to int ( temp int) +0:40 'sizeQueryTemp' ( temp uint) +0:41 Sequence +0:41 move second child to first child ( temp uint) +0:41 'sizeQueryTemp' ( temp uint) +0:41 textureSize ( temp uint) +0:41 'g_tTex1df4' ( uniform texture1D) +0:41 Constant: +0:41 6 (const uint) +0:41 move second child to first child ( temp int) +0:41 'WidthI' ( temp int) +0:41 Convert uint to int ( temp int) +0:41 'sizeQueryTemp' ( temp uint) +0:41 move second child to first child ( temp uint) +0:41 'NumberOfLevelsU' ( temp uint) +0:41 textureQueryLevels ( temp uint) +0:41 'g_tTex1df4' ( uniform texture1D) +0:42 Sequence +0:42 move second child to first child ( temp uint) +0:42 'sizeQueryTemp' ( temp uint) +0:42 textureSize ( temp uint) +0:42 'g_tTex1df4' ( uniform texture1D) +0:42 Constant: +0:42 6 (const uint) +0:42 move second child to first child ( temp uint) +0:42 'WidthU' ( temp uint) +0:42 'sizeQueryTemp' ( temp uint) +0:42 move second child to first child ( temp int) +0:42 'NumberOfLevelsI' ( temp int) +0:42 Convert uint to int ( temp int) +0:42 textureQueryLevels ( temp uint) +0:42 'g_tTex1df4' ( uniform texture1D) +0:43 Sequence +0:43 move second child to first child ( temp uint) +0:43 'sizeQueryTemp' ( temp uint) +0:43 textureSize ( temp uint) +0:43 'g_tTex1df4' ( uniform texture1D) +0:43 Constant: +0:43 6 (const uint) +0:43 move second child to first child ( temp int) +0:43 'WidthI' ( temp int) +0:43 Convert uint to int ( temp int) +0:43 'sizeQueryTemp' ( temp uint) +0:43 move second child to first child ( temp int) +0:43 'NumberOfLevelsI' ( temp int) +0:43 Convert uint to int ( temp int) +0:43 textureQueryLevels ( temp uint) +0:43 'g_tTex1df4' ( uniform texture1D) +0:47 move second child to first child ( temp 4-component vector of float) +0:47 color: direct index for structure ( temp 4-component vector of float) +0:47 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:47 Constant: +0:47 0 (const int) +0:47 Constant: +0:47 0.000000 +0:47 0.000000 +0:47 0.000000 +0:47 0.000000 +0:48 Branch: Return with expression +0:48 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:20 Function Definition: main( ( temp void) +0:20 Function Parameters: +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: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_tTex1df4' ( uniform texture1D) +0:? 'color' (layout( location=0) out 4-component vector of float) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 80 + + Capability Shader + Capability Sampled1D + Capability SampledBuffer + Capability ImageQuery + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 74 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "color" + Name 10 "@main(" + Name 17 "$Global" + MemberName 17($Global) 0 "i" + MemberName 17($Global) 1 "u" + MemberName 17($Global) 2 "f" + MemberName 17($Global) 3 "b" + MemberName 17($Global) 4 "i2" + MemberName 17($Global) 5 "u2" + MemberName 17($Global) 6 "f2" + MemberName 17($Global) 7 "b2" + MemberName 17($Global) 8 "upos" + MemberName 17($Global) 9 "fpos" + Name 19 "" + Name 28 "sizeQueryTemp" + Name 31 "g_tTex1df4" + Name 36 "WidthI" + Name 39 "sizeQueryTemp" + Name 45 "NumberOfLevelsU" + Name 48 "sizeQueryTemp" + Name 51 "WidthU" + Name 53 "NumberOfLevelsI" + Name 57 "sizeQueryTemp" + Name 66 "ps_output" + Name 74 "color" + Name 79 "g_tTexbfs" + MemberDecorate 17($Global) 0 Offset 0 + MemberDecorate 17($Global) 1 Offset 4 + MemberDecorate 17($Global) 2 Offset 8 + MemberDecorate 17($Global) 3 Offset 12 + MemberDecorate 17($Global) 4 Offset 16 + MemberDecorate 17($Global) 5 Offset 24 + MemberDecorate 17($Global) 6 Offset 32 + MemberDecorate 17($Global) 7 Offset 40 + MemberDecorate 17($Global) 8 Offset 48 + MemberDecorate 17($Global) 9 Offset 52 + Decorate 17($Global) Block + Decorate 19 DescriptorSet 0 + Decorate 31(g_tTex1df4) DescriptorSet 0 + Decorate 74(color) Location 0 + Decorate 79(g_tTexbfs) DescriptorSet 0 + Decorate 79(g_tTexbfs) NonWritable + 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: TypeInt 32 1 + 13: TypeInt 32 0 + 14: TypeVector 12(int) 2 + 15: TypeVector 13(int) 2 + 16: TypeVector 6(float) 2 + 17($Global): TypeStruct 12(int) 13(int) 6(float) 13(int) 14(ivec2) 15(ivec2) 16(fvec2) 15(ivec2) 13(int) 6(float) + 18: TypePointer Uniform 17($Global) + 19: 18(ptr) Variable Uniform + 20: 12(int) Constant 9 + 21: TypePointer Uniform 6(float) + 24: 6(float) Constant 0 + 25: 6(float) Constant 1065353216 + 27: TypePointer Function 13(int) + 29: TypeImage 6(float) 1D sampled format:Unknown + 30: TypePointer UniformConstant 29 + 31(g_tTex1df4): 30(ptr) Variable UniformConstant + 33: 12(int) Constant 0 + 35: TypePointer Function 12(int) + 41: 13(int) Constant 6 + 65: TypePointer Function 8(PS_OUTPUT) + 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 + 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 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label +28(sizeQueryTemp): 27(ptr) Variable Function + 36(WidthI): 35(ptr) Variable Function +39(sizeQueryTemp): 27(ptr) Variable Function +45(NumberOfLevelsU): 27(ptr) Variable Function +48(sizeQueryTemp): 27(ptr) Variable Function + 51(WidthU): 27(ptr) Variable Function +53(NumberOfLevelsI): 35(ptr) Variable Function +57(sizeQueryTemp): 27(ptr) Variable Function + 66(ps_output): 65(ptr) Variable Function + 22: 21(ptr) AccessChain 19 20 + 23: 6(float) Load 22 + 26: 6(float) ExtInst 1(GLSL.std.450) 43(FClamp) 23 24 25 + 32: 29 Load 31(g_tTex1df4) + 34: 13(int) ImageQuerySizeLod 32 33 + Store 28(sizeQueryTemp) 34 + 37: 13(int) Load 28(sizeQueryTemp) + 38: 12(int) Bitcast 37 + Store 36(WidthI) 38 + 40: 29 Load 31(g_tTex1df4) + 42: 13(int) ImageQuerySizeLod 40 41 + Store 39(sizeQueryTemp) 42 + 43: 13(int) Load 39(sizeQueryTemp) + 44: 12(int) Bitcast 43 + Store 36(WidthI) 44 + 46: 29 Load 31(g_tTex1df4) + 47: 13(int) ImageQueryLevels 46 + Store 45(NumberOfLevelsU) 47 + 49: 29 Load 31(g_tTex1df4) + 50: 13(int) ImageQuerySizeLod 49 41 + Store 48(sizeQueryTemp) 50 + 52: 13(int) Load 48(sizeQueryTemp) + Store 51(WidthU) 52 + 54: 29 Load 31(g_tTex1df4) + 55: 13(int) ImageQueryLevels 54 + 56: 12(int) Bitcast 55 + Store 53(NumberOfLevelsI) 56 + 58: 29 Load 31(g_tTex1df4) + 59: 13(int) ImageQuerySizeLod 58 41 + Store 57(sizeQueryTemp) 59 + 60: 13(int) Load 57(sizeQueryTemp) + 61: 12(int) Bitcast 60 + Store 36(WidthI) 61 + 62: 29 Load 31(g_tTex1df4) + 63: 13(int) ImageQueryLevels 62 + 64: 12(int) Bitcast 63 + Store 53(NumberOfLevelsI) 64 + 69: 68(ptr) AccessChain 66(ps_output) 33 + Store 69 67 + 70:8(PS_OUTPUT) Load 66(ps_output) + ReturnValue 70 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.vert.out new file mode 100644 index 0000000..107575b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.vert.out @@ -0,0 +1,4238 @@ +hlsl.intrinsics.vert +Shader version: 450 +0:? Sequence +0:2 Function Definition: VertexShaderFunctionS(f1;f1;f1;u1;u1; ( temp float) +0:2 Function Parameters: +0:2 'inF0' ( in float) +0:2 'inF1' ( in float) +0:2 'inF2' ( in float) +0:2 'inU0' ( in uint) +0:2 'inU1' ( in uint) +0:? Sequence +0:3 all ( 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:7 arc sine ( temp float) +0:7 'inF0' ( in float) +0:8 floatBitsToInt ( temp int) +0:8 'inF0' ( in float) +0:9 floatBitsToUint ( temp uint) +0:9 'inF0' ( in float) +0:10 intBitsToFloat ( temp float) +0:10 'inU0' ( in uint) +0:12 arc tangent ( temp float) +0:12 'inF0' ( in float) +0:13 arc tangent ( temp float) +0:13 'inF0' ( in float) +0:13 'inF1' ( in float) +0:14 Ceiling ( temp float) +0:14 'inF0' ( in float) +0:15 clamp ( temp float) +0:15 'inF0' ( in float) +0:15 'inF1' ( in float) +0:15 'inF2' ( in float) +0:16 cosine ( temp float) +0:16 'inF0' ( in float) +0:17 hyp. cosine ( temp float) +0:17 'inF0' ( in float) +0:18 bitCount ( temp int) +0:18 Constant: +0:18 7 (const int) +0:19 degrees ( temp float) +0:19 'inF0' ( in float) +0:23 exp ( temp float) +0:23 'inF0' ( in float) +0:24 exp2 ( temp float) +0:24 'inF0' ( in float) +0:25 findMSB ( temp int) +0:25 Constant: +0:25 7 (const int) +0:26 findLSB ( temp int) +0:26 Constant: +0:26 7 (const int) +0:27 Floor ( temp float) +0:27 'inF0' ( in float) +0:29 mod ( temp float) +0:29 'inF0' ( in float) +0:29 'inF1' ( in float) +0:30 Fraction ( temp float) +0:30 'inF0' ( in float) +0:31 frexp ( temp float) +0:31 'inF0' ( in float) +0:31 'inF1' ( in float) +0:32 isinf ( temp bool) +0:32 'inF0' ( in float) +0:33 isnan ( temp bool) +0:33 'inF0' ( in float) +0:34 ldexp ( temp float) +0:34 'inF0' ( in float) +0:34 'inF1' ( in float) +0:35 mix ( 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:38 'inF0' ( in float) +0:39 max ( 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: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:45 'inF0' ( in float) +0:46 inverse sqrt ( temp float) +0:46 'inF0' ( in float) +0:47 clamp ( 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 '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:51 'inF0' ( in float) +0:52 smoothstep ( temp float) +0:52 'inF0' ( in float) +0:52 'inF1' ( in float) +0:52 'inF2' ( in float) +0:53 sqrt ( temp float) +0:53 'inF0' ( in float) +0:54 step ( temp float) +0:54 'inF0' ( in float) +0:54 'inF1' ( in float) +0:55 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:? 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:? Sequence +0:71 all ( temp bool) +0:71 'inF0' ( in 2-component vector of float) +0:72 Absolute value ( 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:74 'inF0' ( in 2-component vector of float) +0:75 arc sine ( temp 2-component vector of float) +0:75 'inF0' ( in 2-component vector of float) +0:76 floatBitsToInt ( temp 2-component vector of int) +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: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: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 'inF0' ( in 2-component vector of float) +0:83 clamp ( 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 '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:87 'inF0' ( in 2-component vector of float) +0:88 distance ( 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:93 'inF0' ( in 2-component vector of float) +0:94 exp2 ( 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: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: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 'inF0' ( in 2-component vector of float) +0:102 frexp ( temp 2-component vector of float) +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 'inF0' ( in 2-component vector of float) +0:104 isnan ( temp 2-component vector of bool) +0:104 'inF0' ( in 2-component vector of float) +0:105 ldexp ( temp 2-component vector of 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 '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: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: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: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:114 'inF0' ( in 2-component vector of float) +0:115 pow ( 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 '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:? 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:120 'inF0' ( in 2-component vector of float) +0:121 inverse sqrt ( 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 '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: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:126 'inF0' ( in 2-component vector of float) +0:127 smoothstep ( 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 'inF0' ( in 2-component vector of float) +0:129 step ( 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 '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:? 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:? Sequence +0:141 all ( temp bool) +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:143 'inF0' ( in 3-component vector of float) +0:144 any ( temp bool) +0:144 'inF0' ( in 3-component vector of float) +0:145 arc sine ( temp 3-component vector of float) +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:150 'inF0' ( in 3-component vector of float) +0:151 arc tangent ( 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:152 'inF0' ( in 3-component vector of float) +0:153 clamp ( 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: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 '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: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:169 'inF0' ( in 3-component vector of float) +0:171 mod ( temp 3-component vector of float) +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 'inF0' ( in 3-component vector of float) +0:173 frexp ( 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 'inF0' ( in 3-component vector of float) +0:175 isnan ( temp 3-component vector of bool) +0:175 'inF0' ( in 3-component vector of float) +0:176 ldexp ( 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:178 'inF0' ( in 3-component vector of float) +0:179 log ( 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: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 '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:185 'inF0' ( in 3-component vector of float) +0:186 pow ( 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:? 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:191 'inF0' ( in 3-component vector of float) +0:192 inverse sqrt ( 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:194 'inF0' ( in 3-component vector of float) +0:195 sine ( 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:197 'inF0' ( in 3-component vector of float) +0:198 smoothstep ( 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 '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 '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:? 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:? 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:213 'inF0' ( in 4-component vector of float) +0:214 arc cosine ( temp 4-component vector of float) +0:214 'inF0' ( in 4-component vector of float) +0:215 any ( temp bool) +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: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:221 'inF0' ( in 4-component vector of float) +0:222 arc tangent ( 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 '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: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:240 'inF0' ( in 4-component vector of float) +0:242 mod ( temp 4-component vector of float) +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 'inF0' ( in 4-component vector of float) +0:244 frexp ( 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:245 'inF0' ( in 4-component vector of float) +0:246 isnan ( temp 4-component vector of bool) +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: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 'inF0' ( in 4-component vector of float) +0:250 log ( 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:252 'inF0' ( in 4-component vector of float) +0:253 max ( 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 '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: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:? 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: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: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 'inF0' ( in 4-component vector of float) +0:266 sine ( 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:268 'inF0' ( in 4-component vector of float) +0:269 smoothstep ( 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 '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:? 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:? 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:? 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:? 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:? Constant: +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +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:? 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:? Constant: +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +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:? 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:? 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:? 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:? Sequence +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: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: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: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: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 'inFV3' ( in 3-component vector of float) +0:406 'inF0' ( in 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 'inFV2' ( in 2-component vector 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: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: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 'inFM3x2' ( in 3X2 matrix of float) +0:410 'inFV3' ( in 3-component vector 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 '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: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:? Linker Objects + + +Linked vertex stage: + +WARNING: Linking vertex stage: Entry point not found + +Shader version: 450 +0:? Sequence +0:2 Function Definition: VertexShaderFunctionS(f1;f1;f1;u1;u1; ( temp float) +0:2 Function Parameters: +0:2 'inF0' ( in float) +0:2 'inF1' ( in float) +0:2 'inF2' ( in float) +0:2 'inU0' ( in uint) +0:2 'inU1' ( in uint) +0:? Sequence +0:3 all ( 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:7 arc sine ( temp float) +0:7 'inF0' ( in float) +0:8 floatBitsToInt ( temp int) +0:8 'inF0' ( in float) +0:9 floatBitsToUint ( temp uint) +0:9 'inF0' ( in float) +0:10 intBitsToFloat ( temp float) +0:10 'inU0' ( in uint) +0:12 arc tangent ( temp float) +0:12 'inF0' ( in float) +0:13 arc tangent ( temp float) +0:13 'inF0' ( in float) +0:13 'inF1' ( in float) +0:14 Ceiling ( temp float) +0:14 'inF0' ( in float) +0:15 clamp ( temp float) +0:15 'inF0' ( in float) +0:15 'inF1' ( in float) +0:15 'inF2' ( in float) +0:16 cosine ( temp float) +0:16 'inF0' ( in float) +0:17 hyp. cosine ( temp float) +0:17 'inF0' ( in float) +0:18 bitCount ( temp int) +0:18 Constant: +0:18 7 (const int) +0:19 degrees ( temp float) +0:19 'inF0' ( in float) +0:23 exp ( temp float) +0:23 'inF0' ( in float) +0:24 exp2 ( temp float) +0:24 'inF0' ( in float) +0:25 findMSB ( temp int) +0:25 Constant: +0:25 7 (const int) +0:26 findLSB ( temp int) +0:26 Constant: +0:26 7 (const int) +0:27 Floor ( temp float) +0:27 'inF0' ( in float) +0:29 mod ( temp float) +0:29 'inF0' ( in float) +0:29 'inF1' ( in float) +0:30 Fraction ( temp float) +0:30 'inF0' ( in float) +0:31 frexp ( temp float) +0:31 'inF0' ( in float) +0:31 'inF1' ( in float) +0:32 isinf ( temp bool) +0:32 'inF0' ( in float) +0:33 isnan ( temp bool) +0:33 'inF0' ( in float) +0:34 ldexp ( temp float) +0:34 'inF0' ( in float) +0:34 'inF1' ( in float) +0:35 mix ( 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:38 'inF0' ( in float) +0:39 max ( 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: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:45 'inF0' ( in float) +0:46 inverse sqrt ( temp float) +0:46 'inF0' ( in float) +0:47 clamp ( 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 '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:51 'inF0' ( in float) +0:52 smoothstep ( temp float) +0:52 'inF0' ( in float) +0:52 'inF1' ( in float) +0:52 'inF2' ( in float) +0:53 sqrt ( temp float) +0:53 'inF0' ( in float) +0:54 step ( temp float) +0:54 'inF0' ( in float) +0:54 'inF1' ( in float) +0:55 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:? 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:? Sequence +0:71 all ( temp bool) +0:71 'inF0' ( in 2-component vector of float) +0:72 Absolute value ( 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:74 'inF0' ( in 2-component vector of float) +0:75 arc sine ( temp 2-component vector of float) +0:75 'inF0' ( in 2-component vector of float) +0:76 floatBitsToInt ( temp 2-component vector of int) +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: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: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 'inF0' ( in 2-component vector of float) +0:83 clamp ( 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 '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:87 'inF0' ( in 2-component vector of float) +0:88 distance ( 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:93 'inF0' ( in 2-component vector of float) +0:94 exp2 ( 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: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: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 'inF0' ( in 2-component vector of float) +0:102 frexp ( temp 2-component vector of float) +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 'inF0' ( in 2-component vector of float) +0:104 isnan ( temp 2-component vector of bool) +0:104 'inF0' ( in 2-component vector of float) +0:105 ldexp ( temp 2-component vector of 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 '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: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: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: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:114 'inF0' ( in 2-component vector of float) +0:115 pow ( 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 '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:? 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:120 'inF0' ( in 2-component vector of float) +0:121 inverse sqrt ( 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 '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: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:126 'inF0' ( in 2-component vector of float) +0:127 smoothstep ( 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 'inF0' ( in 2-component vector of float) +0:129 step ( 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 '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:? 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:? Sequence +0:141 all ( temp bool) +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:143 'inF0' ( in 3-component vector of float) +0:144 any ( temp bool) +0:144 'inF0' ( in 3-component vector of float) +0:145 arc sine ( temp 3-component vector of float) +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:150 'inF0' ( in 3-component vector of float) +0:151 arc tangent ( 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:152 'inF0' ( in 3-component vector of float) +0:153 clamp ( 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: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 '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: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:169 'inF0' ( in 3-component vector of float) +0:171 mod ( temp 3-component vector of float) +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 'inF0' ( in 3-component vector of float) +0:173 frexp ( 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 'inF0' ( in 3-component vector of float) +0:175 isnan ( temp 3-component vector of bool) +0:175 'inF0' ( in 3-component vector of float) +0:176 ldexp ( 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:178 'inF0' ( in 3-component vector of float) +0:179 log ( 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: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 '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:185 'inF0' ( in 3-component vector of float) +0:186 pow ( 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:? 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:191 'inF0' ( in 3-component vector of float) +0:192 inverse sqrt ( 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:194 'inF0' ( in 3-component vector of float) +0:195 sine ( 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:197 'inF0' ( in 3-component vector of float) +0:198 smoothstep ( 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 '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 '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:? 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:? 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:213 'inF0' ( in 4-component vector of float) +0:214 arc cosine ( temp 4-component vector of float) +0:214 'inF0' ( in 4-component vector of float) +0:215 any ( temp bool) +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: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:221 'inF0' ( in 4-component vector of float) +0:222 arc tangent ( 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 '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: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:240 'inF0' ( in 4-component vector of float) +0:242 mod ( temp 4-component vector of float) +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 'inF0' ( in 4-component vector of float) +0:244 frexp ( 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:245 'inF0' ( in 4-component vector of float) +0:246 isnan ( temp 4-component vector of bool) +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: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 'inF0' ( in 4-component vector of float) +0:250 log ( 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:252 'inF0' ( in 4-component vector of float) +0:253 max ( 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 '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: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:? 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: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: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 'inF0' ( in 4-component vector of float) +0:266 sine ( 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:268 'inF0' ( in 4-component vector of float) +0:269 smoothstep ( 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 '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:? 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:? 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:? 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:? 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:? Constant: +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +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:? 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:? Constant: +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +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:? 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:? 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:? 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:? Sequence +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: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: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: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: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 'inFV3' ( in 3-component vector of float) +0:406 'inF0' ( in 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 'inFV2' ( in 2-component vector 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: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: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 'inFM3x2' ( in 3X2 matrix of float) +0:410 'inFV3' ( in 3-component vector 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 '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: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:? Linker Objects + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 1240 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "VertexShaderFunction" + Name 4 "VertexShaderFunction" + Name 16 "VertexShaderFunctionS(f1;f1;f1;u1;u1;" + Name 11 "inF0" + Name 12 "inF1" + Name 13 "inF2" + Name 14 "inU0" + Name 15 "inU1" + Name 22 "VertexShaderFunction1(vf1;vf1;vf1;" + Name 19 "inF0" + Name 20 "inF1" + Name 21 "inF2" + Name 34 "VertexShaderFunction2(vf2;vf2;vf2;vu2;vu2;" + Name 29 "inF0" + Name 30 "inF1" + Name 31 "inF2" + Name 32 "inU0" + Name 33 "inU1" + Name 46 "VertexShaderFunction3(vf3;vf3;vf3;vu3;vu3;" + Name 41 "inF0" + Name 42 "inF1" + Name 43 "inF2" + Name 44 "inU0" + Name 45 "inU1" + Name 58 "VertexShaderFunction4(vf4;vf4;vf4;vu4;vu4;" + Name 53 "inF0" + Name 54 "inF1" + Name 55 "inF2" + Name 56 "inU0" + Name 57 "inU1" + Name 66 "VertexShaderFunction2x2(mf22;mf22;mf22;" + Name 63 "inF0" + Name 64 "inF1" + Name 65 "inF2" + Name 74 "VertexShaderFunction3x3(mf33;mf33;mf33;" + Name 71 "inF0" + Name 72 "inF1" + Name 73 "inF2" + Name 82 "VertexShaderFunction4x4(mf44;mf44;mf44;" + Name 79 "inF0" + Name 80 "inF1" + Name 81 "inF2" + Name 91 "TestGenMul2(f1;f1;vf2;vf2;mf22;mf22;" + Name 85 "inF0" + Name 86 "inF1" + Name 87 "inFV0" + Name 88 "inFV1" + Name 89 "inFM0" + Name 90 "inFM1" + Name 100 "TestGenMul3(f1;f1;vf3;vf3;mf33;mf33;" + Name 94 "inF0" + Name 95 "inF1" + Name 96 "inFV0" + Name 97 "inFV1" + Name 98 "inFM0" + Name 99 "inFM1" + Name 109 "TestGenMul4(f1;f1;vf4;vf4;mf44;mf44;" + Name 103 "inF0" + Name 104 "inF1" + Name 105 "inFV0" + Name 106 "inFV1" + Name 107 "inFM0" + Name 108 "inFM1" + Name 129 "TestGenMulNxM(f1;f1;vf2;vf3;mf23;mf32;mf33;mf34;mf24;" + Name 120 "inF0" + Name 121 "inF1" + Name 122 "inFV2" + Name 123 "inFV3" + Name 124 "inFM2x3" + Name 125 "inFM3x2" + 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" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypePointer Function 6(float) + 8: TypeInt 32 0 + 9: TypePointer Function 8(int) + 10: TypeFunction 6(float) 7(ptr) 7(ptr) 7(ptr) 9(ptr) 9(ptr) + 18: TypeFunction 6(float) 7(ptr) 7(ptr) 7(ptr) + 24: TypeVector 6(float) 2 + 25: TypePointer Function 24(fvec2) + 26: TypeVector 8(int) 2 + 27: TypePointer Function 26(ivec2) + 28: TypeFunction 24(fvec2) 25(ptr) 25(ptr) 25(ptr) 27(ptr) 27(ptr) + 36: TypeVector 6(float) 3 + 37: TypePointer Function 36(fvec3) + 38: TypeVector 8(int) 3 + 39: TypePointer Function 38(ivec3) + 40: TypeFunction 36(fvec3) 37(ptr) 37(ptr) 37(ptr) 39(ptr) 39(ptr) + 48: TypeVector 6(float) 4 + 49: TypePointer Function 48(fvec4) + 50: TypeVector 8(int) 4 + 51: TypePointer Function 50(ivec4) + 52: TypeFunction 48(fvec4) 49(ptr) 49(ptr) 49(ptr) 51(ptr) 51(ptr) + 60: TypeMatrix 24(fvec2) 2 + 61: TypePointer Function 60 + 62: TypeFunction 60 61(ptr) 61(ptr) 61(ptr) + 68: TypeMatrix 36(fvec3) 3 + 69: TypePointer Function 68 + 70: TypeFunction 68 69(ptr) 69(ptr) 69(ptr) + 76: TypeMatrix 48(fvec4) 4 + 77: TypePointer Function 76 + 78: TypeFunction 76 77(ptr) 77(ptr) 77(ptr) + 84: TypeFunction 2 7(ptr) 7(ptr) 25(ptr) 25(ptr) 61(ptr) 61(ptr) + 93: TypeFunction 2 7(ptr) 7(ptr) 37(ptr) 37(ptr) 69(ptr) 69(ptr) + 102: TypeFunction 2 7(ptr) 7(ptr) 49(ptr) 49(ptr) 77(ptr) 77(ptr) + 111: TypeMatrix 36(fvec3) 2 + 112: TypePointer Function 111 + 113: TypeMatrix 24(fvec2) 3 + 114: TypePointer Function 113 + 115: TypeMatrix 48(fvec4) 3 + 116: TypePointer Function 115 + 117: TypeMatrix 48(fvec4) 2 + 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 +4(VertexShaderFunction): 2 Function None 3 + 5: Label + Return + FunctionEnd +16(VertexShaderFunctionS(f1;f1;f1;u1;u1;): 6(float) Function None 10 + 11(inF0): 7(ptr) FunctionParameter + 12(inF1): 7(ptr) FunctionParameter + 13(inF2): 7(ptr) FunctionParameter + 14(inU0): 9(ptr) FunctionParameter + 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 + 136: 6(float) Load 11(inF0) + 137: 6(float) ExtInst 1(GLSL.std.450) 17(Acos) 136 + 138: 6(float) Load 11(inF0) + 139: 132(bool) Any 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 + 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 + 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 + 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 + 186: 6(float) Load 11(inF0) + 187: 132(bool) IsInf 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 + 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 + 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 + 218: 6(float) Load 11(inF0) + 219: 6(float) ExtInst 1(GLSL.std.450) 2(RoundEven) 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 + 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 + 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 + FunctionEnd +34(VertexShaderFunction2(vf2;vf2;vf2;vu2;vu2;): 24(fvec2) Function None 28 + 29(inF0): 25(ptr) FunctionParameter + 30(inF1): 25(ptr) FunctionParameter + 31(inF2): 25(ptr) FunctionParameter + 32(inU0): 27(ptr) FunctionParameter + 33(inU1): 27(ptr) FunctionParameter + 35: Label + 255: 24(fvec2) Load 29(inF0) + 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 + 320: 24(fvec2) Load 29(inF0) + 322: 321(bvec2) IsInf 320 + 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 + 334: 24(fvec2) Load 29(inF0) + 335: 24(fvec2) ExtInst 1(GLSL.std.450) 28(Log) 334 + 336: 24(fvec2) Load 29(inF0) + 337: 24(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 336 + 338: 24(fvec2) VectorTimesScalar 337 201 + 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 + 344: 24(fvec2) Load 29(inF0) + 345: 24(fvec2) Load 30(inF1) + 346: 24(fvec2) ExtInst 1(GLSL.std.450) 37(FMin) 344 345 + 347: 24(fvec2) Load 29(inF0) + 348: 24(fvec2) ExtInst 1(GLSL.std.450) 69(Normalize) 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 + 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 + 386: 24(fvec2) Load 29(inF0) + 387: 24(fvec2) ExtInst 1(GLSL.std.450) 31(Sqrt) 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 + FunctionEnd +46(VertexShaderFunction3(vf3;vf3;vf3;vu3;vu3;): 36(fvec3) Function None 40 + 41(inF0): 37(ptr) FunctionParameter + 42(inF1): 37(ptr) FunctionParameter + 43(inF2): 37(ptr) FunctionParameter + 44(inU0): 39(ptr) FunctionParameter + 45(inU1): 39(ptr) FunctionParameter + 47: Label + 400: 36(fvec3) Load 41(inF0) + 401: 132(bool) All 400 + 402: 36(fvec3) Load 41(inF0) + 403: 36(fvec3) ExtInst 1(GLSL.std.450) 4(FAbs) 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 + 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 + 480: 36(fvec3) Load 41(inF0) + 481: 6(float) ExtInst 1(GLSL.std.450) 66(Length) 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 + 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 + 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 + 532: 36(fvec3) Load 41(inF0) + 533: 36(fvec3) ExtInst 1(GLSL.std.450) 31(Sqrt) 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 + FunctionEnd +58(VertexShaderFunction4(vf4;vf4;vf4;vu4;vu4;): 48(fvec4) Function None 52 + 53(inF0): 49(ptr) FunctionParameter + 54(inF1): 49(ptr) FunctionParameter + 55(inF2): 49(ptr) FunctionParameter + 56(inU0): 51(ptr) FunctionParameter + 57(inU1): 51(ptr) FunctionParameter + 59: Label + 547: 48(fvec4) Load 53(inF0) + 548: 132(bool) All 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 + 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 + 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 + 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 + 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 + 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 + 627: 48(fvec4) Load 53(inF0) + 628: 625(bvec4) IsNan 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 + 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 + 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 + 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 + 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 + 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 + 706: 60 Load 63(inF0) + 707: 60 ExtInst 1(GLSL.std.450) 4(FAbs) 706 + 708: 60 Load 63(inF0) + 709: 60 ExtInst 1(GLSL.std.450) 17(Acos) 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 + 719: 60 Load 63(inF0) + 720: 60 ExtInst 1(GLSL.std.450) 9(Ceil) 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 + 725: 60 Load 63(inF0) + 726: 60 ExtInst 1(GLSL.std.450) 14(Cos) 725 + 727: 60 Load 63(inF0) + 728: 60 ExtInst 1(GLSL.std.450) 20(Cosh) 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 + 733: 60 Load 63(inF0) + 734: 60 ExtInst 1(GLSL.std.450) 27(Exp) 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 + 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 + 766: 60 Load 63(inF0) + 767: 60 ExtInst 1(GLSL.std.450) 30(Log2) 766 + 768: 60 MatrixTimesScalar 767 201 + 769: 60 Load 63(inF0) + 770: 60 ExtInst 1(GLSL.std.450) 30(Log2) 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 + 798: 60 Load 63(inF0) + 799: 60 ExtInst 1(GLSL.std.450) 19(Sinh) 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 + 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 + 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 + 821: 68 Load 71(inF0) + 822: 132(bool) All 821 + 823: 68 Load 71(inF0) + 824: 68 ExtInst 1(GLSL.std.450) 4(FAbs) 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 + 836: 68 Load 71(inF0) + 837: 68 ExtInst 1(GLSL.std.450) 9(Ceil) 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 + 842: 68 Load 71(inF0) + 843: 68 ExtInst 1(GLSL.std.450) 14(Cos) 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 + 848: 68 Load 71(inF0) + 849: 6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 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 + 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 + 889: 68 Load 71(inF0) + 890: 68 ExtInst 1(GLSL.std.450) 30(Log2) 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 + 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 + 916: 68 Load 71(inF0) + 917: 68 ExtInst 1(GLSL.std.450) 14(Cos) 916 + Store 73(inF2) 917 + 918: 68 Load 71(inF0) + 919: 68 ExtInst 1(GLSL.std.450) 19(Sinh) 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 + 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 + 941: 76 Load 79(inF0) + 942: 132(bool) All 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 + 956: 76 Load 79(inF0) + 957: 76 ExtInst 1(GLSL.std.450) 9(Ceil) 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 + 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 + 966: 76 Load 79(inF0) + 967: 76 ExtInst 1(GLSL.std.450) 12(Degrees) 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 + 1012: 76 Load 79(inF0) + 1013: 76 ExtInst 1(GLSL.std.450) 30(Log2) 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 + 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 + 1037: 76 Load 79(inF0) + 1038: 76 ExtInst 1(GLSL.std.450) 13(Sin) 1037 + Store 80(inF1) 1038 + 1039: 76 Load 79(inF0) + 1040: 76 ExtInst 1(GLSL.std.450) 14(Cos) 1039 + Store 81(inF2) 1040 + 1041: 76 Load 79(inF0) + 1042: 76 ExtInst 1(GLSL.std.450) 19(Sinh) 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 + FunctionEnd +91(TestGenMul2(f1;f1;vf2;vf2;mf22;mf22;): 2 Function None 84 + 85(inF0): 7(ptr) FunctionParameter + 86(inF1): 7(ptr) FunctionParameter + 87(inFV0): 25(ptr) FunctionParameter + 88(inFV1): 25(ptr) FunctionParameter + 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) + 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 + Return + FunctionEnd +100(TestGenMul3(f1;f1;vf3;vf3;mf33;mf33;): 2 Function None 93 + 94(inF0): 7(ptr) FunctionParameter + 95(inF1): 7(ptr) FunctionParameter + 96(inFV0): 37(ptr) FunctionParameter + 97(inFV1): 37(ptr) FunctionParameter + 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) + 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 + Return + FunctionEnd +109(TestGenMul4(f1;f1;vf4;vf4;mf44;mf44;): 2 Function None 102 + 103(inF0): 7(ptr) FunctionParameter + 104(inF1): 7(ptr) FunctionParameter + 105(inFV0): 49(ptr) FunctionParameter + 106(inFV1): 49(ptr) FunctionParameter + 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) + 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 + Return + FunctionEnd +129(TestGenMulNxM(f1;f1;vf2;vf3;mf23;mf32;mf33;mf34;mf24;): 2 Function None 119 + 120(inF0): 7(ptr) FunctionParameter + 121(inF1): 7(ptr) FunctionParameter + 122(inFV2): 25(ptr) FunctionParameter + 123(inFV3): 37(ptr) FunctionParameter + 124(inFM2x3): 112(ptr) FunctionParameter + 125(inFM3x2): 114(ptr) FunctionParameter + 126(inFM3x3): 69(ptr) FunctionParameter + 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) + 1178: 24(fvec2) Load 122(inFV2) + 1179: 24(fvec2) VectorTimesScalar 1178 1177 + Store 1176(r01) 1179 + 1181: 6(float) Load 120(inF0) + 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 + Return + 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 new file mode 100755 index 0000000..6a5eceb --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.layout.frag.out @@ -0,0 +1,140 @@ +hlsl.layout.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:16 Function Definition: PixelShaderFunction(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 add ( temp 4-component vector of float) +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 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 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 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:? '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}) + + +Linked fragment stage: + +WARNING: Linking fragment stage: Entry point not found + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:16 Function Definition: PixelShaderFunction(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 add ( temp 4-component vector of float) +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 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 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 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:? '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}) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 39 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 11 "PixelShaderFunction(vf4;" + Name 10 "input" + Name 14 "tbufName" + MemberName 14(tbufName) 0 "v1" + Name 16 "" + Name 23 "tbufName2" + MemberName 23(tbufName2) 0 "v5" + Name 25 "" + Name 30 "tbufName2" + MemberName 30(tbufName2) 0 "v1PostLayout" + Name 32 "" + Name 38 "specConst" + MemberDecorate 14(tbufName) 0 Offset 16 + Decorate 14(tbufName) BufferBlock + Decorate 16 DescriptorSet 3 + Decorate 16 Binding 5 + MemberDecorate 23(tbufName2) 0 Offset 0 + Decorate 23(tbufName2) BufferBlock + MemberDecorate 30(tbufName2) 0 Offset 16 + Decorate 30(tbufName2) BufferBlock + Decorate 32 DescriptorSet 4 + Decorate 32 Binding 7 + Decorate 38(specConst) SpecId 17 + 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(tbufName): TypeStruct 7(fvec4) + 15: TypePointer Uniform 14(tbufName) + 16: 15(ptr) Variable Uniform + 17: TypeInt 32 1 + 18: 17(int) Constant 0 + 19: TypePointer Uniform 7(fvec4) + 23(tbufName2): TypeStruct 7(fvec4) + 24: TypePointer PushConstant 23(tbufName2) + 25: 24(ptr) Variable PushConstant + 26: TypePointer PushConstant 7(fvec4) + 30(tbufName2): TypeStruct 7(fvec4) + 31: TypePointer Uniform 30(tbufName2) + 32: 31(ptr) Variable Uniform + 38(specConst): 17(int) SpecConstant 10 + 4(main): 2 Function None 3 + 5: Label + 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 + 27: 26(ptr) AccessChain 25 18 + 28: 7(fvec4) Load 27 + 29: 7(fvec4) FAdd 22 28 + 33: 19(ptr) AccessChain 32 18 + 34: 7(fvec4) Load 33 + 35: 7(fvec4) FAdd 29 34 + ReturnValue 35 + FunctionEnd 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 new file mode 100644 index 0000000..f436f88 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.2dms.dx10.frag.out @@ -0,0 +1,549 @@ +hlsl.load.2dms.dx10.frag +Shader version: 450 +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}) +0:28 Function Parameters: +0:? Sequence +0:32 textureFetch ( temp 4-component vector of float) +0:32 'g_tTex2dmsf4' ( uniform texture2DMS) +0:32 c2: direct index for structure ( uniform 2-component vector of int) +0:32 '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:32 Constant: +0:32 1 (const uint) +0:32 Constant: +0:32 3 (const int) +0:33 textureFetch ( temp 4-component vector of int) +0:33 'g_tTex2dmsi4' ( uniform itexture2DMS) +0:33 c2: direct index for structure ( uniform 2-component vector of int) +0:33 '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:33 Constant: +0:33 1 (const uint) +0:33 Constant: +0:33 3 (const int) +0:34 textureFetch ( temp 4-component vector of uint) +0:34 'g_tTex2dmsu4' ( uniform utexture2DMS) +0:34 c2: direct index for structure ( uniform 2-component vector of int) +0:34 '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:34 Constant: +0:34 1 (const uint) +0:34 Constant: +0:34 3 (const int) +0:37 textureFetchOffset ( temp 4-component vector of float) +0:37 'g_tTex2dmsf4' ( uniform texture2DMS) +0:37 c2: direct index for structure ( uniform 2-component vector of int) +0:37 '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:37 Constant: +0:37 1 (const uint) +0:37 Constant: +0:37 3 (const int) +0:37 o2: direct index for structure ( uniform 2-component vector of int) +0:37 '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:37 Constant: +0:37 5 (const uint) +0:38 textureFetchOffset ( temp 4-component vector of int) +0:38 'g_tTex2dmsi4' ( uniform itexture2DMS) +0:38 c2: direct index for structure ( uniform 2-component vector of int) +0:38 '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:38 Constant: +0:38 1 (const uint) +0:38 Constant: +0:38 3 (const int) +0:38 o2: direct index for structure ( uniform 2-component vector of int) +0:38 '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:38 Constant: +0:38 5 (const uint) +0:39 textureFetchOffset ( temp 4-component vector of uint) +0:39 'g_tTex2dmsu4' ( uniform utexture2DMS) +0:39 c2: direct index for structure ( uniform 2-component vector of int) +0:39 '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:39 Constant: +0:39 1 (const uint) +0:39 Constant: +0:39 3 (const int) +0:39 o2: direct index for structure ( uniform 2-component vector of int) +0:39 '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:39 Constant: +0:39 5 (const uint) +0:42 textureFetch ( temp 4-component vector of float) +0:42 'g_tTex2dmsf4a' ( uniform texture2DMSArray) +0:42 c3: direct index for structure ( uniform 3-component vector of int) +0:42 '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:42 Constant: +0:42 2 (const uint) +0:42 Constant: +0:42 3 (const int) +0:43 textureFetch ( temp 4-component vector of int) +0:43 'g_tTex2dmsi4a' ( uniform itexture2DMSArray) +0:43 c3: direct index for structure ( uniform 3-component vector of int) +0:43 '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:43 Constant: +0:43 2 (const uint) +0:43 Constant: +0:43 3 (const int) +0:44 textureFetch ( temp 4-component vector of uint) +0:44 'g_tTex2dmsu4a' ( uniform utexture2DMSArray) +0:44 c3: direct index for structure ( uniform 3-component vector of int) +0:44 '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:44 Constant: +0:44 2 (const uint) +0:44 Constant: +0:44 3 (const int) +0:47 textureFetchOffset ( temp 4-component vector of float) +0:47 'g_tTex2dmsf4a' ( uniform texture2DMSArray) +0:47 c3: direct index for structure ( uniform 3-component vector of int) +0:47 '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:47 Constant: +0:47 2 (const uint) +0:47 Constant: +0:47 3 (const int) +0:47 o2: direct index for structure ( uniform 2-component vector of int) +0:47 '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:47 Constant: +0:47 5 (const uint) +0:48 textureFetchOffset ( temp 4-component vector of int) +0:48 'g_tTex2dmsi4a' ( uniform itexture2DMSArray) +0:48 c3: direct index for structure ( uniform 3-component vector of int) +0:48 '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:48 Constant: +0:48 2 (const uint) +0:48 Constant: +0:48 3 (const int) +0:48 o2: direct index for structure ( uniform 2-component vector of int) +0:48 '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:48 Constant: +0:48 5 (const uint) +0:49 textureFetchOffset ( temp 4-component vector of uint) +0:49 'g_tTex2dmsu4a' ( uniform utexture2DMSArray) +0:49 c3: direct index for structure ( uniform 3-component vector of int) +0:49 '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:49 Constant: +0:49 2 (const uint) +0:49 Constant: +0:49 3 (const int) +0:49 o2: direct index for structure ( uniform 2-component vector of int) +0:49 '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:49 Constant: +0:49 5 (const uint) +0:51 move second child to first child ( temp 4-component vector of float) +0:51 Color: direct index for structure ( temp 4-component vector of float) +0:51 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:51 Constant: +0:51 0 (const int) +0:51 Constant: +0:51 1.000000 +0:51 1.000000 +0:51 1.000000 +0:51 1.000000 +0:52 move second child to first child ( temp float) +0:52 Depth: direct index for structure ( temp float) +0:52 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:52 Constant: +0:52 1 (const int) +0:52 Constant: +0:52 1.000000 +0:54 Branch: Return with expression +0:54 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:28 Function Definition: main( ( temp void) +0:28 Function Parameters: +0:? Sequence +0:28 Sequence +0:28 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:28 1 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex2dmsf4' ( uniform texture2DMS) +0:? 'g_tTex2dmsi4' ( uniform itexture2DMS) +0:? 'g_tTex2dmsu4' ( uniform utexture2DMS) +0:? 'g_tTex2dmsf4a' ( uniform texture2DMSArray) +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) + + +Linked fragment stage: + + +Shader version: 450 +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}) +0:28 Function Parameters: +0:? Sequence +0:32 textureFetch ( temp 4-component vector of float) +0:32 'g_tTex2dmsf4' ( uniform texture2DMS) +0:32 c2: direct index for structure ( uniform 2-component vector of int) +0:32 '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:32 Constant: +0:32 1 (const uint) +0:32 Constant: +0:32 3 (const int) +0:33 textureFetch ( temp 4-component vector of int) +0:33 'g_tTex2dmsi4' ( uniform itexture2DMS) +0:33 c2: direct index for structure ( uniform 2-component vector of int) +0:33 '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:33 Constant: +0:33 1 (const uint) +0:33 Constant: +0:33 3 (const int) +0:34 textureFetch ( temp 4-component vector of uint) +0:34 'g_tTex2dmsu4' ( uniform utexture2DMS) +0:34 c2: direct index for structure ( uniform 2-component vector of int) +0:34 '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:34 Constant: +0:34 1 (const uint) +0:34 Constant: +0:34 3 (const int) +0:37 textureFetchOffset ( temp 4-component vector of float) +0:37 'g_tTex2dmsf4' ( uniform texture2DMS) +0:37 c2: direct index for structure ( uniform 2-component vector of int) +0:37 '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:37 Constant: +0:37 1 (const uint) +0:37 Constant: +0:37 3 (const int) +0:37 o2: direct index for structure ( uniform 2-component vector of int) +0:37 '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:37 Constant: +0:37 5 (const uint) +0:38 textureFetchOffset ( temp 4-component vector of int) +0:38 'g_tTex2dmsi4' ( uniform itexture2DMS) +0:38 c2: direct index for structure ( uniform 2-component vector of int) +0:38 '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:38 Constant: +0:38 1 (const uint) +0:38 Constant: +0:38 3 (const int) +0:38 o2: direct index for structure ( uniform 2-component vector of int) +0:38 '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:38 Constant: +0:38 5 (const uint) +0:39 textureFetchOffset ( temp 4-component vector of uint) +0:39 'g_tTex2dmsu4' ( uniform utexture2DMS) +0:39 c2: direct index for structure ( uniform 2-component vector of int) +0:39 '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:39 Constant: +0:39 1 (const uint) +0:39 Constant: +0:39 3 (const int) +0:39 o2: direct index for structure ( uniform 2-component vector of int) +0:39 '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:39 Constant: +0:39 5 (const uint) +0:42 textureFetch ( temp 4-component vector of float) +0:42 'g_tTex2dmsf4a' ( uniform texture2DMSArray) +0:42 c3: direct index for structure ( uniform 3-component vector of int) +0:42 '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:42 Constant: +0:42 2 (const uint) +0:42 Constant: +0:42 3 (const int) +0:43 textureFetch ( temp 4-component vector of int) +0:43 'g_tTex2dmsi4a' ( uniform itexture2DMSArray) +0:43 c3: direct index for structure ( uniform 3-component vector of int) +0:43 '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:43 Constant: +0:43 2 (const uint) +0:43 Constant: +0:43 3 (const int) +0:44 textureFetch ( temp 4-component vector of uint) +0:44 'g_tTex2dmsu4a' ( uniform utexture2DMSArray) +0:44 c3: direct index for structure ( uniform 3-component vector of int) +0:44 '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:44 Constant: +0:44 2 (const uint) +0:44 Constant: +0:44 3 (const int) +0:47 textureFetchOffset ( temp 4-component vector of float) +0:47 'g_tTex2dmsf4a' ( uniform texture2DMSArray) +0:47 c3: direct index for structure ( uniform 3-component vector of int) +0:47 '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:47 Constant: +0:47 2 (const uint) +0:47 Constant: +0:47 3 (const int) +0:47 o2: direct index for structure ( uniform 2-component vector of int) +0:47 '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:47 Constant: +0:47 5 (const uint) +0:48 textureFetchOffset ( temp 4-component vector of int) +0:48 'g_tTex2dmsi4a' ( uniform itexture2DMSArray) +0:48 c3: direct index for structure ( uniform 3-component vector of int) +0:48 '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:48 Constant: +0:48 2 (const uint) +0:48 Constant: +0:48 3 (const int) +0:48 o2: direct index for structure ( uniform 2-component vector of int) +0:48 '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:48 Constant: +0:48 5 (const uint) +0:49 textureFetchOffset ( temp 4-component vector of uint) +0:49 'g_tTex2dmsu4a' ( uniform utexture2DMSArray) +0:49 c3: direct index for structure ( uniform 3-component vector of int) +0:49 '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:49 Constant: +0:49 2 (const uint) +0:49 Constant: +0:49 3 (const int) +0:49 o2: direct index for structure ( uniform 2-component vector of int) +0:49 '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:49 Constant: +0:49 5 (const uint) +0:51 move second child to first child ( temp 4-component vector of float) +0:51 Color: direct index for structure ( temp 4-component vector of float) +0:51 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:51 Constant: +0:51 0 (const int) +0:51 Constant: +0:51 1.000000 +0:51 1.000000 +0:51 1.000000 +0:51 1.000000 +0:52 move second child to first child ( temp float) +0:52 Depth: direct index for structure ( temp float) +0:52 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:52 Constant: +0:52 1 (const int) +0:52 Constant: +0:52 1.000000 +0:54 Branch: Return with expression +0:54 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:28 Function Definition: main( ( temp void) +0:28 Function Parameters: +0:? Sequence +0:28 Sequence +0:28 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:28 1 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex2dmsf4' ( uniform texture2DMS) +0:? 'g_tTex2dmsi4' ( uniform itexture2DMS) +0:? 'g_tTex2dmsu4' ( uniform utexture2DMS) +0:? 'g_tTex2dmsf4a' ( uniform texture2DMSArray) +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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// 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 + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + MemberName 8(PS_OUTPUT) 1 "Depth" + Name 10 "@main(" + Name 14 "g_tTex2dmsf4" + Name 20 "$Global" + MemberName 20($Global) 0 "c1" + MemberName 20($Global) 1 "c2" + MemberName 20($Global) 2 "c3" + MemberName 20($Global) 3 "c4" + MemberName 20($Global) 4 "o1" + MemberName 20($Global) 5 "o2" + MemberName 20($Global) 6 "o3" + MemberName 20($Global) 7 "o4" + Name 22 "" + Name 31 "g_tTex2dmsi4" + Name 39 "g_tTex2dmsu4" + Name 66 "g_tTex2dmsf4a" + Name 75 "g_tTex2dmsi4a" + Name 82 "g_tTex2dmsu4a" + Name 106 "psout" + Name 117 "flattenTemp" + Name 120 "Color" + Name 124 "Depth" + Name 129 "g_sSamp" + Decorate 14(g_tTex2dmsf4) DescriptorSet 0 + MemberDecorate 20($Global) 0 Offset 0 + MemberDecorate 20($Global) 1 Offset 8 + MemberDecorate 20($Global) 2 Offset 16 + MemberDecorate 20($Global) 3 Offset 32 + MemberDecorate 20($Global) 4 Offset 48 + MemberDecorate 20($Global) 5 Offset 56 + MemberDecorate 20($Global) 6 Offset 64 + MemberDecorate 20($Global) 7 Offset 80 + Decorate 20($Global) Block + Decorate 22 DescriptorSet 0 + Decorate 31(g_tTex2dmsi4) DescriptorSet 0 + Decorate 39(g_tTex2dmsu4) DescriptorSet 0 + 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 129(g_sSamp) DescriptorSet 0 + Decorate 129(g_sSamp) Binding 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8(PS_OUTPUT): TypeStruct 7(fvec4) 6(float) + 9: TypeFunction 8(PS_OUTPUT) + 12: TypeImage 6(float) 2D multi-sampled sampled format:Unknown + 13: TypePointer UniformConstant 12 +14(g_tTex2dmsf4): 13(ptr) Variable UniformConstant + 16: TypeInt 32 1 + 17: TypeVector 16(int) 2 + 18: TypeVector 16(int) 3 + 19: TypeVector 16(int) 4 + 20($Global): TypeStruct 16(int) 17(ivec2) 18(ivec3) 19(ivec4) 16(int) 17(ivec2) 18(ivec3) 19(ivec4) + 21: TypePointer Uniform 20($Global) + 22: 21(ptr) Variable Uniform + 23: 16(int) Constant 1 + 24: TypePointer Uniform 17(ivec2) + 27: 16(int) Constant 3 + 29: TypeImage 16(int) 2D multi-sampled sampled format:Unknown + 30: TypePointer UniformConstant 29 +31(g_tTex2dmsi4): 30(ptr) Variable UniformConstant + 36: TypeInt 32 0 + 37: TypeImage 36(int) 2D multi-sampled sampled format:Unknown + 38: TypePointer UniformConstant 37 +39(g_tTex2dmsu4): 38(ptr) Variable UniformConstant + 43: TypeVector 36(int) 4 + 48: 16(int) Constant 5 + 64: TypeImage 6(float) 2D array multi-sampled sampled format:Unknown + 65: TypePointer UniformConstant 64 +66(g_tTex2dmsf4a): 65(ptr) Variable UniformConstant + 68: 16(int) Constant 2 + 69: TypePointer Uniform 18(ivec3) + 73: TypeImage 16(int) 2D array multi-sampled sampled format:Unknown + 74: TypePointer UniformConstant 73 +75(g_tTex2dmsi4a): 74(ptr) Variable UniformConstant + 80: TypeImage 36(int) 2D array multi-sampled sampled format:Unknown + 81: TypePointer UniformConstant 80 +82(g_tTex2dmsu4a): 81(ptr) Variable UniformConstant + 105: TypePointer Function 8(PS_OUTPUT) + 107: 16(int) Constant 0 + 108: 6(float) Constant 1065353216 + 109: 7(fvec4) ConstantComposite 108 108 108 108 + 110: TypePointer Function 7(fvec4) + 112: TypePointer Function 6(float) + 119: TypePointer Output 7(fvec4) + 120(Color): 119(ptr) Variable Output + 123: TypePointer Output 6(float) + 124(Depth): 123(ptr) Variable Output + 127: TypeSampler + 128: TypePointer UniformConstant 127 + 129(g_sSamp): 128(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label +117(flattenTemp): 105(ptr) Variable Function + 118:8(PS_OUTPUT) FunctionCall 10(@main() + Store 117(flattenTemp) 118 + 121: 110(ptr) AccessChain 117(flattenTemp) 107 + 122: 7(fvec4) Load 121 + Store 120(Color) 122 + 125: 112(ptr) AccessChain 117(flattenTemp) 23 + 126: 6(float) Load 125 + Store 124(Depth) 126 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 106(psout): 105(ptr) Variable Function + 15: 12 Load 14(g_tTex2dmsf4) + 25: 24(ptr) AccessChain 22 23 + 26: 17(ivec2) Load 25 + 28: 7(fvec4) ImageFetch 15 26 Sample 27 + 32: 29 Load 31(g_tTex2dmsi4) + 33: 24(ptr) AccessChain 22 23 + 34: 17(ivec2) Load 33 + 35: 19(ivec4) ImageFetch 32 34 Sample 27 + 40: 37 Load 39(g_tTex2dmsu4) + 41: 24(ptr) AccessChain 22 23 + 42: 17(ivec2) Load 41 + 44: 43(ivec4) ImageFetch 40 42 Sample 27 + 45: 12 Load 14(g_tTex2dmsf4) + 46: 24(ptr) AccessChain 22 23 + 47: 17(ivec2) Load 46 + 49: 24(ptr) AccessChain 22 48 + 50: 17(ivec2) Load 49 + 51: 7(fvec4) ImageFetch 45 47 Offset Sample 50 27 + 52: 29 Load 31(g_tTex2dmsi4) + 53: 24(ptr) AccessChain 22 23 + 54: 17(ivec2) Load 53 + 55: 24(ptr) AccessChain 22 48 + 56: 17(ivec2) Load 55 + 57: 19(ivec4) ImageFetch 52 54 Offset Sample 56 27 + 58: 37 Load 39(g_tTex2dmsu4) + 59: 24(ptr) AccessChain 22 23 + 60: 17(ivec2) Load 59 + 61: 24(ptr) AccessChain 22 48 + 62: 17(ivec2) Load 61 + 63: 43(ivec4) ImageFetch 58 60 Offset Sample 62 27 + 67: 64 Load 66(g_tTex2dmsf4a) + 70: 69(ptr) AccessChain 22 68 + 71: 18(ivec3) Load 70 + 72: 7(fvec4) ImageFetch 67 71 Sample 27 + 76: 73 Load 75(g_tTex2dmsi4a) + 77: 69(ptr) AccessChain 22 68 + 78: 18(ivec3) Load 77 + 79: 19(ivec4) ImageFetch 76 78 Sample 27 + 83: 80 Load 82(g_tTex2dmsu4a) + 84: 69(ptr) AccessChain 22 68 + 85: 18(ivec3) Load 84 + 86: 43(ivec4) ImageFetch 83 85 Sample 27 + 87: 64 Load 66(g_tTex2dmsf4a) + 88: 69(ptr) AccessChain 22 68 + 89: 18(ivec3) Load 88 + 90: 24(ptr) AccessChain 22 48 + 91: 17(ivec2) Load 90 + 92: 7(fvec4) ImageFetch 87 89 Offset Sample 91 27 + 93: 73 Load 75(g_tTex2dmsi4a) + 94: 69(ptr) AccessChain 22 68 + 95: 18(ivec3) Load 94 + 96: 24(ptr) AccessChain 22 48 + 97: 17(ivec2) Load 96 + 98: 19(ivec4) ImageFetch 93 95 Offset Sample 97 27 + 99: 80 Load 82(g_tTex2dmsu4a) + 100: 69(ptr) AccessChain 22 68 + 101: 18(ivec3) Load 100 + 102: 24(ptr) AccessChain 22 48 + 103: 17(ivec2) Load 102 + 104: 43(ivec4) ImageFetch 99 101 Offset Sample 103 27 + 111: 110(ptr) AccessChain 106(psout) 107 + Store 111 109 + 113: 112(ptr) AccessChain 106(psout) 23 + Store 113 108 + 114:8(PS_OUTPUT) Load 106(psout) + ReturnValue 114 + FunctionEnd 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 new file mode 100644 index 0000000..9430e75 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.array.dx10.frag.out @@ -0,0 +1,639 @@ +hlsl.load.array.dx10.frag +Shader version: 450 +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}) +0:48 Function Parameters: +0:? Sequence +0:52 textureFetch ( temp 4-component vector of float) +0:52 'g_tTex1df4a' ( uniform texture1DArray) +0:52 vector swizzle ( temp 2-component vector of int) +0:52 c3: direct index for structure ( uniform 3-component vector of int) +0:52 '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:52 Constant: +0:52 2 (const uint) +0:52 Sequence +0:52 Constant: +0:52 0 (const int) +0:52 Constant: +0:52 1 (const int) +0:52 direct index ( temp int) +0:52 c3: direct index for structure ( uniform 3-component vector of int) +0:52 '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:52 Constant: +0:52 2 (const uint) +0:52 Constant: +0:52 2 (const int) +0:53 textureFetch ( temp 4-component vector of int) +0:53 'g_tTex1di4a' ( uniform itexture1DArray) +0:53 vector swizzle ( temp 2-component vector of int) +0:53 c3: direct index for structure ( uniform 3-component vector of int) +0:53 '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:53 Constant: +0:53 2 (const uint) +0:53 Sequence +0:53 Constant: +0:53 0 (const int) +0:53 Constant: +0:53 1 (const int) +0:53 direct index ( temp int) +0:53 c3: direct index for structure ( uniform 3-component vector of int) +0:53 '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:53 Constant: +0:53 2 (const uint) +0:53 Constant: +0:53 2 (const int) +0:54 textureFetch ( temp 4-component vector of uint) +0:54 'g_tTex1du4a' ( uniform utexture1DArray) +0:54 vector swizzle ( temp 2-component vector of int) +0:54 c3: direct index for structure ( uniform 3-component vector of int) +0:54 '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:54 Constant: +0:54 2 (const uint) +0:54 Sequence +0:54 Constant: +0:54 0 (const int) +0:54 Constant: +0:54 1 (const int) +0:54 direct index ( temp int) +0:54 c3: direct index for structure ( uniform 3-component vector of int) +0:54 '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:54 Constant: +0:54 2 (const uint) +0:54 Constant: +0:54 2 (const int) +0:57 textureFetch ( temp 4-component vector of float) +0:57 'g_tTex2df4a' ( uniform texture2DArray) +0:57 vector swizzle ( temp 3-component vector of int) +0:57 c4: direct index for structure ( uniform 4-component vector of int) +0:57 '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:57 Constant: +0:57 3 (const uint) +0:57 Sequence +0:57 Constant: +0:57 0 (const int) +0:57 Constant: +0:57 1 (const int) +0:57 Constant: +0:57 2 (const int) +0:57 direct index ( temp int) +0:57 c4: direct index for structure ( uniform 4-component vector of int) +0:57 '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:57 Constant: +0:57 3 (const uint) +0:57 Constant: +0:57 3 (const int) +0:58 textureFetch ( temp 4-component vector of int) +0:58 'g_tTex2di4a' ( uniform itexture2DArray) +0:58 vector swizzle ( temp 3-component vector of int) +0:58 c4: direct index for structure ( uniform 4-component vector of int) +0:58 '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:58 Constant: +0:58 3 (const uint) +0:58 Sequence +0:58 Constant: +0:58 0 (const int) +0:58 Constant: +0:58 1 (const int) +0:58 Constant: +0:58 2 (const int) +0:58 direct index ( temp int) +0:58 c4: direct index for structure ( uniform 4-component vector of int) +0:58 '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:58 Constant: +0:58 3 (const uint) +0:58 Constant: +0:58 3 (const int) +0:59 textureFetch ( temp 4-component vector of uint) +0:59 'g_tTex2du4a' ( uniform utexture2DArray) +0:59 vector swizzle ( temp 3-component vector of int) +0:59 c4: direct index for structure ( uniform 4-component vector of int) +0:59 '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:59 Constant: +0:59 3 (const uint) +0:59 Sequence +0:59 Constant: +0:59 0 (const int) +0:59 Constant: +0:59 1 (const int) +0:59 Constant: +0:59 2 (const int) +0:59 direct index ( temp int) +0:59 c4: direct index for structure ( uniform 4-component vector of int) +0:59 '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:59 Constant: +0:59 3 (const uint) +0:59 Constant: +0:59 3 (const int) +0:67 move second child to first child ( temp 4-component vector of float) +0:67 Color: direct index for structure ( temp 4-component vector of float) +0:67 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:67 Constant: +0:67 0 (const int) +0:67 Constant: +0:67 1.000000 +0:67 1.000000 +0:67 1.000000 +0:67 1.000000 +0:68 move second child to first child ( temp float) +0:68 Depth: direct index for structure ( temp float) +0:68 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:68 Constant: +0:68 1 (const int) +0:68 Constant: +0:68 1.000000 +0:70 Branch: Return with expression +0:70 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:48 Function Definition: main( ( temp void) +0:48 Function Parameters: +0:? Sequence +0:48 Sequence +0:48 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:48 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_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_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:? '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) + + +Linked fragment stage: + + +Shader version: 450 +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}) +0:48 Function Parameters: +0:? Sequence +0:52 textureFetch ( temp 4-component vector of float) +0:52 'g_tTex1df4a' ( uniform texture1DArray) +0:52 vector swizzle ( temp 2-component vector of int) +0:52 c3: direct index for structure ( uniform 3-component vector of int) +0:52 '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:52 Constant: +0:52 2 (const uint) +0:52 Sequence +0:52 Constant: +0:52 0 (const int) +0:52 Constant: +0:52 1 (const int) +0:52 direct index ( temp int) +0:52 c3: direct index for structure ( uniform 3-component vector of int) +0:52 '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:52 Constant: +0:52 2 (const uint) +0:52 Constant: +0:52 2 (const int) +0:53 textureFetch ( temp 4-component vector of int) +0:53 'g_tTex1di4a' ( uniform itexture1DArray) +0:53 vector swizzle ( temp 2-component vector of int) +0:53 c3: direct index for structure ( uniform 3-component vector of int) +0:53 '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:53 Constant: +0:53 2 (const uint) +0:53 Sequence +0:53 Constant: +0:53 0 (const int) +0:53 Constant: +0:53 1 (const int) +0:53 direct index ( temp int) +0:53 c3: direct index for structure ( uniform 3-component vector of int) +0:53 '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:53 Constant: +0:53 2 (const uint) +0:53 Constant: +0:53 2 (const int) +0:54 textureFetch ( temp 4-component vector of uint) +0:54 'g_tTex1du4a' ( uniform utexture1DArray) +0:54 vector swizzle ( temp 2-component vector of int) +0:54 c3: direct index for structure ( uniform 3-component vector of int) +0:54 '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:54 Constant: +0:54 2 (const uint) +0:54 Sequence +0:54 Constant: +0:54 0 (const int) +0:54 Constant: +0:54 1 (const int) +0:54 direct index ( temp int) +0:54 c3: direct index for structure ( uniform 3-component vector of int) +0:54 '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:54 Constant: +0:54 2 (const uint) +0:54 Constant: +0:54 2 (const int) +0:57 textureFetch ( temp 4-component vector of float) +0:57 'g_tTex2df4a' ( uniform texture2DArray) +0:57 vector swizzle ( temp 3-component vector of int) +0:57 c4: direct index for structure ( uniform 4-component vector of int) +0:57 '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:57 Constant: +0:57 3 (const uint) +0:57 Sequence +0:57 Constant: +0:57 0 (const int) +0:57 Constant: +0:57 1 (const int) +0:57 Constant: +0:57 2 (const int) +0:57 direct index ( temp int) +0:57 c4: direct index for structure ( uniform 4-component vector of int) +0:57 '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:57 Constant: +0:57 3 (const uint) +0:57 Constant: +0:57 3 (const int) +0:58 textureFetch ( temp 4-component vector of int) +0:58 'g_tTex2di4a' ( uniform itexture2DArray) +0:58 vector swizzle ( temp 3-component vector of int) +0:58 c4: direct index for structure ( uniform 4-component vector of int) +0:58 '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:58 Constant: +0:58 3 (const uint) +0:58 Sequence +0:58 Constant: +0:58 0 (const int) +0:58 Constant: +0:58 1 (const int) +0:58 Constant: +0:58 2 (const int) +0:58 direct index ( temp int) +0:58 c4: direct index for structure ( uniform 4-component vector of int) +0:58 '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:58 Constant: +0:58 3 (const uint) +0:58 Constant: +0:58 3 (const int) +0:59 textureFetch ( temp 4-component vector of uint) +0:59 'g_tTex2du4a' ( uniform utexture2DArray) +0:59 vector swizzle ( temp 3-component vector of int) +0:59 c4: direct index for structure ( uniform 4-component vector of int) +0:59 '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:59 Constant: +0:59 3 (const uint) +0:59 Sequence +0:59 Constant: +0:59 0 (const int) +0:59 Constant: +0:59 1 (const int) +0:59 Constant: +0:59 2 (const int) +0:59 direct index ( temp int) +0:59 c4: direct index for structure ( uniform 4-component vector of int) +0:59 '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:59 Constant: +0:59 3 (const uint) +0:59 Constant: +0:59 3 (const int) +0:67 move second child to first child ( temp 4-component vector of float) +0:67 Color: direct index for structure ( temp 4-component vector of float) +0:67 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:67 Constant: +0:67 0 (const int) +0:67 Constant: +0:67 1.000000 +0:67 1.000000 +0:67 1.000000 +0:67 1.000000 +0:68 move second child to first child ( temp float) +0:68 Depth: direct index for structure ( temp float) +0:68 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:68 Constant: +0:68 1 (const int) +0:68 Constant: +0:68 1.000000 +0:70 Branch: Return with expression +0:70 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:48 Function Definition: main( ( temp void) +0:48 Function Parameters: +0:? Sequence +0:48 Sequence +0:48 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:48 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_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_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:? '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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 159 + + Capability Shader + Capability Sampled1D + Capability SampledCubeArray + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 104 108 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + MemberName 8(PS_OUTPUT) 1 "Depth" + Name 10 "@main(" + Name 14 "g_tTex1df4a" + Name 20 "$Global" + MemberName 20($Global) 0 "c1" + MemberName 20($Global) 1 "c2" + MemberName 20($Global) 2 "c3" + MemberName 20($Global) 3 "c4" + MemberName 20($Global) 4 "o1" + MemberName 20($Global) 5 "o2" + MemberName 20($Global) 6 "o3" + MemberName 20($Global) 7 "o4" + Name 22 "" + Name 36 "g_tTex1di4a" + Name 46 "g_tTex1du4a" + Name 57 "g_tTex2df4a" + Name 70 "g_tTex2di4a" + Name 80 "g_tTex2du4a" + Name 89 "psout" + Name 101 "flattenTemp" + Name 104 "Color" + Name 108 "Depth" + Name 113 "g_sSamp" + Name 116 "g_tTex1df4" + Name 119 "g_tTex1di4" + Name 122 "g_tTex1du4" + Name 125 "g_tTex2df4" + Name 128 "g_tTex2di4" + Name 131 "g_tTex2du4" + Name 134 "g_tTex3df4" + Name 137 "g_tTex3di4" + Name 140 "g_tTex3du4" + Name 143 "g_tTexcdf4" + Name 146 "g_tTexcdi4" + Name 149 "g_tTexcdu4" + Name 152 "g_tTexcdf4a" + Name 155 "g_tTexcdi4a" + Name 158 "g_tTexcdu4a" + Decorate 14(g_tTex1df4a) DescriptorSet 0 + MemberDecorate 20($Global) 0 Offset 0 + MemberDecorate 20($Global) 1 Offset 8 + MemberDecorate 20($Global) 2 Offset 16 + MemberDecorate 20($Global) 3 Offset 32 + MemberDecorate 20($Global) 4 Offset 48 + MemberDecorate 20($Global) 5 Offset 56 + MemberDecorate 20($Global) 6 Offset 64 + MemberDecorate 20($Global) 7 Offset 80 + Decorate 20($Global) Block + Decorate 22 DescriptorSet 0 + Decorate 36(g_tTex1di4a) DescriptorSet 0 + Decorate 46(g_tTex1du4a) DescriptorSet 0 + 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 113(g_sSamp) DescriptorSet 0 + Decorate 113(g_sSamp) Binding 0 + Decorate 116(g_tTex1df4) DescriptorSet 0 + Decorate 116(g_tTex1df4) Binding 0 + Decorate 119(g_tTex1di4) DescriptorSet 0 + Decorate 122(g_tTex1du4) DescriptorSet 0 + Decorate 125(g_tTex2df4) DescriptorSet 0 + Decorate 128(g_tTex2di4) DescriptorSet 0 + Decorate 131(g_tTex2du4) DescriptorSet 0 + Decorate 134(g_tTex3df4) DescriptorSet 0 + Decorate 137(g_tTex3di4) DescriptorSet 0 + Decorate 140(g_tTex3du4) DescriptorSet 0 + Decorate 143(g_tTexcdf4) DescriptorSet 0 + Decorate 146(g_tTexcdi4) DescriptorSet 0 + Decorate 149(g_tTexcdu4) DescriptorSet 0 + Decorate 152(g_tTexcdf4a) DescriptorSet 0 + Decorate 155(g_tTexcdi4a) DescriptorSet 0 + Decorate 158(g_tTexcdu4a) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8(PS_OUTPUT): TypeStruct 7(fvec4) 6(float) + 9: TypeFunction 8(PS_OUTPUT) + 12: TypeImage 6(float) 1D array sampled format:Unknown + 13: TypePointer UniformConstant 12 + 14(g_tTex1df4a): 13(ptr) Variable UniformConstant + 16: TypeInt 32 1 + 17: TypeVector 16(int) 2 + 18: TypeVector 16(int) 3 + 19: TypeVector 16(int) 4 + 20($Global): TypeStruct 16(int) 17(ivec2) 18(ivec3) 19(ivec4) 16(int) 17(ivec2) 18(ivec3) 19(ivec4) + 21: TypePointer Uniform 20($Global) + 22: 21(ptr) Variable Uniform + 23: 16(int) Constant 2 + 24: TypePointer Uniform 18(ivec3) + 28: TypeInt 32 0 + 29: 28(int) Constant 2 + 30: TypePointer Uniform 16(int) + 34: TypeImage 16(int) 1D array sampled format:Unknown + 35: TypePointer UniformConstant 34 + 36(g_tTex1di4a): 35(ptr) Variable UniformConstant + 44: TypeImage 28(int) 1D array sampled format:Unknown + 45: TypePointer UniformConstant 44 + 46(g_tTex1du4a): 45(ptr) Variable UniformConstant + 53: TypeVector 28(int) 4 + 55: TypeImage 6(float) 2D array sampled format:Unknown + 56: TypePointer UniformConstant 55 + 57(g_tTex2df4a): 56(ptr) Variable UniformConstant + 59: 16(int) Constant 3 + 60: TypePointer Uniform 19(ivec4) + 64: 28(int) Constant 3 + 68: TypeImage 16(int) 2D array sampled format:Unknown + 69: TypePointer UniformConstant 68 + 70(g_tTex2di4a): 69(ptr) Variable UniformConstant + 78: TypeImage 28(int) 2D array sampled format:Unknown + 79: TypePointer UniformConstant 78 + 80(g_tTex2du4a): 79(ptr) Variable UniformConstant + 88: TypePointer Function 8(PS_OUTPUT) + 90: 16(int) Constant 0 + 91: 6(float) Constant 1065353216 + 92: 7(fvec4) ConstantComposite 91 91 91 91 + 93: TypePointer Function 7(fvec4) + 95: 16(int) Constant 1 + 96: TypePointer Function 6(float) + 103: TypePointer Output 7(fvec4) + 104(Color): 103(ptr) Variable Output + 107: TypePointer Output 6(float) + 108(Depth): 107(ptr) Variable Output + 111: TypeSampler + 112: TypePointer UniformConstant 111 + 113(g_sSamp): 112(ptr) Variable UniformConstant + 114: TypeImage 6(float) 1D sampled format:Unknown + 115: TypePointer UniformConstant 114 + 116(g_tTex1df4): 115(ptr) Variable UniformConstant + 117: TypeImage 16(int) 1D sampled format:Unknown + 118: TypePointer UniformConstant 117 + 119(g_tTex1di4): 118(ptr) Variable UniformConstant + 120: TypeImage 28(int) 1D sampled format:Unknown + 121: TypePointer UniformConstant 120 + 122(g_tTex1du4): 121(ptr) Variable UniformConstant + 123: TypeImage 6(float) 2D sampled format:Unknown + 124: TypePointer UniformConstant 123 + 125(g_tTex2df4): 124(ptr) Variable UniformConstant + 126: TypeImage 16(int) 2D sampled format:Unknown + 127: TypePointer UniformConstant 126 + 128(g_tTex2di4): 127(ptr) Variable UniformConstant + 129: TypeImage 28(int) 2D sampled format:Unknown + 130: TypePointer UniformConstant 129 + 131(g_tTex2du4): 130(ptr) Variable UniformConstant + 132: TypeImage 6(float) 3D sampled format:Unknown + 133: TypePointer UniformConstant 132 + 134(g_tTex3df4): 133(ptr) Variable UniformConstant + 135: TypeImage 16(int) 3D sampled format:Unknown + 136: TypePointer UniformConstant 135 + 137(g_tTex3di4): 136(ptr) Variable UniformConstant + 138: TypeImage 28(int) 3D sampled format:Unknown + 139: TypePointer UniformConstant 138 + 140(g_tTex3du4): 139(ptr) Variable UniformConstant + 141: TypeImage 6(float) Cube sampled format:Unknown + 142: TypePointer UniformConstant 141 + 143(g_tTexcdf4): 142(ptr) Variable UniformConstant + 144: TypeImage 16(int) Cube sampled format:Unknown + 145: TypePointer UniformConstant 144 + 146(g_tTexcdi4): 145(ptr) Variable UniformConstant + 147: TypeImage 28(int) Cube sampled format:Unknown + 148: TypePointer UniformConstant 147 + 149(g_tTexcdu4): 148(ptr) Variable UniformConstant + 150: TypeImage 6(float) Cube array sampled format:Unknown + 151: TypePointer UniformConstant 150 +152(g_tTexcdf4a): 151(ptr) Variable UniformConstant + 153: TypeImage 16(int) Cube array sampled format:Unknown + 154: TypePointer UniformConstant 153 +155(g_tTexcdi4a): 154(ptr) Variable UniformConstant + 156: TypeImage 28(int) Cube array sampled format:Unknown + 157: TypePointer UniformConstant 156 +158(g_tTexcdu4a): 157(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label +101(flattenTemp): 88(ptr) Variable Function + 102:8(PS_OUTPUT) FunctionCall 10(@main() + Store 101(flattenTemp) 102 + 105: 93(ptr) AccessChain 101(flattenTemp) 90 + 106: 7(fvec4) Load 105 + Store 104(Color) 106 + 109: 96(ptr) AccessChain 101(flattenTemp) 95 + 110: 6(float) Load 109 + Store 108(Depth) 110 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 89(psout): 88(ptr) Variable Function + 15: 12 Load 14(g_tTex1df4a) + 25: 24(ptr) AccessChain 22 23 + 26: 18(ivec3) Load 25 + 27: 17(ivec2) VectorShuffle 26 26 0 1 + 31: 30(ptr) AccessChain 22 23 29 + 32: 16(int) Load 31 + 33: 7(fvec4) ImageFetch 15 27 Lod 32 + 37: 34 Load 36(g_tTex1di4a) + 38: 24(ptr) AccessChain 22 23 + 39: 18(ivec3) Load 38 + 40: 17(ivec2) VectorShuffle 39 39 0 1 + 41: 30(ptr) AccessChain 22 23 29 + 42: 16(int) Load 41 + 43: 19(ivec4) ImageFetch 37 40 Lod 42 + 47: 44 Load 46(g_tTex1du4a) + 48: 24(ptr) AccessChain 22 23 + 49: 18(ivec3) Load 48 + 50: 17(ivec2) VectorShuffle 49 49 0 1 + 51: 30(ptr) AccessChain 22 23 29 + 52: 16(int) Load 51 + 54: 53(ivec4) ImageFetch 47 50 Lod 52 + 58: 55 Load 57(g_tTex2df4a) + 61: 60(ptr) AccessChain 22 59 + 62: 19(ivec4) Load 61 + 63: 18(ivec3) VectorShuffle 62 62 0 1 2 + 65: 30(ptr) AccessChain 22 59 64 + 66: 16(int) Load 65 + 67: 7(fvec4) ImageFetch 58 63 Lod 66 + 71: 68 Load 70(g_tTex2di4a) + 72: 60(ptr) AccessChain 22 59 + 73: 19(ivec4) Load 72 + 74: 18(ivec3) VectorShuffle 73 73 0 1 2 + 75: 30(ptr) AccessChain 22 59 64 + 76: 16(int) Load 75 + 77: 19(ivec4) ImageFetch 71 74 Lod 76 + 81: 78 Load 80(g_tTex2du4a) + 82: 60(ptr) AccessChain 22 59 + 83: 19(ivec4) Load 82 + 84: 18(ivec3) VectorShuffle 83 83 0 1 2 + 85: 30(ptr) AccessChain 22 59 64 + 86: 16(int) Load 85 + 87: 53(ivec4) ImageFetch 81 84 Lod 86 + 94: 93(ptr) AccessChain 89(psout) 90 + Store 94 92 + 97: 96(ptr) AccessChain 89(psout) 95 + Store 97 91 + 98:8(PS_OUTPUT) Load 89(psout) + ReturnValue 98 + FunctionEnd 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 new file mode 100644 index 0000000..6a976f0 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.basic.dx10.frag.out @@ -0,0 +1,761 @@ +hlsl.load.basic.dx10.frag +Shader version: 450 +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}) +0:48 Function Parameters: +0:? Sequence +0:52 textureFetch ( temp 4-component vector of float) +0:52 'g_tTex1df4' (layout( binding=0) uniform texture1D) +0:52 vector swizzle ( temp int) +0:52 c2: direct index for structure ( uniform 2-component vector of int) +0:52 '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:52 Constant: +0:52 1 (const uint) +0:52 Sequence +0:52 Constant: +0:52 0 (const int) +0:52 direct index ( temp int) +0:52 c2: direct index for structure ( uniform 2-component vector of int) +0:52 '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:52 Constant: +0:52 1 (const uint) +0:52 Constant: +0:52 1 (const int) +0:53 textureFetch ( temp 4-component vector of int) +0:53 'g_tTex1di4' ( uniform itexture1D) +0:53 vector swizzle ( temp int) +0:53 c2: direct index for structure ( uniform 2-component vector of int) +0:53 '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:53 Constant: +0:53 1 (const uint) +0:53 Sequence +0:53 Constant: +0:53 0 (const int) +0:53 direct index ( temp int) +0:53 c2: direct index for structure ( uniform 2-component vector of int) +0:53 '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:53 Constant: +0:53 1 (const uint) +0:53 Constant: +0:53 1 (const int) +0:54 textureFetch ( temp 4-component vector of uint) +0:54 'g_tTex1du4' ( uniform utexture1D) +0:54 vector swizzle ( temp int) +0:54 c2: direct index for structure ( uniform 2-component vector of int) +0:54 '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:54 Constant: +0:54 1 (const uint) +0:54 Sequence +0:54 Constant: +0:54 0 (const int) +0:54 direct index ( temp int) +0:54 c2: direct index for structure ( uniform 2-component vector of int) +0:54 '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:54 Constant: +0:54 1 (const uint) +0:54 Constant: +0:54 1 (const int) +0:57 textureFetch ( temp 4-component vector of float) +0:57 'g_tTex2df4' ( uniform texture2D) +0:57 vector swizzle ( temp 2-component vector of int) +0:57 c3: direct index for structure ( uniform 3-component vector of int) +0:57 '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:57 Constant: +0:57 2 (const uint) +0:57 Sequence +0:57 Constant: +0:57 0 (const int) +0:57 Constant: +0:57 1 (const int) +0:57 direct index ( temp int) +0:57 c3: direct index for structure ( uniform 3-component vector of int) +0:57 '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:57 Constant: +0:57 2 (const uint) +0:57 Constant: +0:57 2 (const int) +0:58 textureFetch ( temp 4-component vector of int) +0:58 'g_tTex2di4' ( uniform itexture2D) +0:58 vector swizzle ( temp 2-component vector of int) +0:58 c3: direct index for structure ( uniform 3-component vector of int) +0:58 '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:58 Constant: +0:58 2 (const uint) +0:58 Sequence +0:58 Constant: +0:58 0 (const int) +0:58 Constant: +0:58 1 (const int) +0:58 direct index ( temp int) +0:58 c3: direct index for structure ( uniform 3-component vector of int) +0:58 '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:58 Constant: +0:58 2 (const uint) +0:58 Constant: +0:58 2 (const int) +0:59 textureFetch ( temp 4-component vector of uint) +0:59 'g_tTex2du4' ( uniform utexture2D) +0:59 vector swizzle ( temp 2-component vector of int) +0:59 c3: direct index for structure ( uniform 3-component vector of int) +0:59 '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:59 Constant: +0:59 2 (const uint) +0:59 Sequence +0:59 Constant: +0:59 0 (const int) +0:59 Constant: +0:59 1 (const int) +0:59 direct index ( temp int) +0:59 c3: direct index for structure ( uniform 3-component vector of int) +0:59 '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:59 Constant: +0:59 2 (const uint) +0:59 Constant: +0:59 2 (const int) +0:62 textureFetch ( temp 4-component vector of float) +0:62 'g_tTex3df4' ( uniform texture3D) +0:62 vector swizzle ( temp 3-component vector of int) +0:62 c4: direct index for structure ( uniform 4-component vector of int) +0:62 '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:62 Constant: +0:62 3 (const uint) +0:62 Sequence +0:62 Constant: +0:62 0 (const int) +0:62 Constant: +0:62 1 (const int) +0:62 Constant: +0:62 2 (const int) +0:62 direct index ( temp int) +0:62 c4: direct index for structure ( uniform 4-component vector of int) +0:62 '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:62 Constant: +0:62 3 (const uint) +0:62 Constant: +0:62 3 (const int) +0:63 textureFetch ( temp 4-component vector of int) +0:63 'g_tTex3di4' ( uniform itexture3D) +0:63 vector swizzle ( temp 3-component vector of int) +0:63 c4: direct index for structure ( uniform 4-component vector of int) +0:63 '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:63 Constant: +0:63 3 (const uint) +0:63 Sequence +0:63 Constant: +0:63 0 (const int) +0:63 Constant: +0:63 1 (const int) +0:63 Constant: +0:63 2 (const int) +0:63 direct index ( temp int) +0:63 c4: direct index for structure ( uniform 4-component vector of int) +0:63 '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:63 Constant: +0:63 3 (const uint) +0:63 Constant: +0:63 3 (const int) +0:64 textureFetch ( temp 4-component vector of uint) +0:64 'g_tTex3du4' ( uniform utexture3D) +0:64 vector swizzle ( temp 3-component vector of int) +0:64 c4: direct index for structure ( uniform 4-component vector of int) +0:64 '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:64 Constant: +0:64 3 (const uint) +0:64 Sequence +0:64 Constant: +0:64 0 (const int) +0:64 Constant: +0:64 1 (const int) +0:64 Constant: +0:64 2 (const int) +0:64 direct index ( temp int) +0:64 c4: direct index for structure ( uniform 4-component vector of int) +0:64 '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:64 Constant: +0:64 3 (const uint) +0:64 Constant: +0:64 3 (const int) +0:72 move second child to first child ( temp 4-component vector of float) +0:72 Color: direct index for structure ( temp 4-component vector of float) +0:72 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:72 Constant: +0:72 0 (const int) +0:72 Constant: +0:72 1.000000 +0:72 1.000000 +0:72 1.000000 +0:72 1.000000 +0:73 move second child to first child ( temp float) +0:73 Depth: direct index for structure ( temp float) +0:73 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:73 Constant: +0:73 1 (const int) +0:73 Constant: +0:73 1.000000 +0:75 Branch: Return with expression +0:75 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:48 Function Definition: main( ( temp void) +0:48 Function Parameters: +0:? Sequence +0:48 Sequence +0:48 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:48 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_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_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:? '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) + + +Linked fragment stage: + + +Shader version: 450 +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}) +0:48 Function Parameters: +0:? Sequence +0:52 textureFetch ( temp 4-component vector of float) +0:52 'g_tTex1df4' (layout( binding=0) uniform texture1D) +0:52 vector swizzle ( temp int) +0:52 c2: direct index for structure ( uniform 2-component vector of int) +0:52 '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:52 Constant: +0:52 1 (const uint) +0:52 Sequence +0:52 Constant: +0:52 0 (const int) +0:52 direct index ( temp int) +0:52 c2: direct index for structure ( uniform 2-component vector of int) +0:52 '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:52 Constant: +0:52 1 (const uint) +0:52 Constant: +0:52 1 (const int) +0:53 textureFetch ( temp 4-component vector of int) +0:53 'g_tTex1di4' ( uniform itexture1D) +0:53 vector swizzle ( temp int) +0:53 c2: direct index for structure ( uniform 2-component vector of int) +0:53 '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:53 Constant: +0:53 1 (const uint) +0:53 Sequence +0:53 Constant: +0:53 0 (const int) +0:53 direct index ( temp int) +0:53 c2: direct index for structure ( uniform 2-component vector of int) +0:53 '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:53 Constant: +0:53 1 (const uint) +0:53 Constant: +0:53 1 (const int) +0:54 textureFetch ( temp 4-component vector of uint) +0:54 'g_tTex1du4' ( uniform utexture1D) +0:54 vector swizzle ( temp int) +0:54 c2: direct index for structure ( uniform 2-component vector of int) +0:54 '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:54 Constant: +0:54 1 (const uint) +0:54 Sequence +0:54 Constant: +0:54 0 (const int) +0:54 direct index ( temp int) +0:54 c2: direct index for structure ( uniform 2-component vector of int) +0:54 '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:54 Constant: +0:54 1 (const uint) +0:54 Constant: +0:54 1 (const int) +0:57 textureFetch ( temp 4-component vector of float) +0:57 'g_tTex2df4' ( uniform texture2D) +0:57 vector swizzle ( temp 2-component vector of int) +0:57 c3: direct index for structure ( uniform 3-component vector of int) +0:57 '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:57 Constant: +0:57 2 (const uint) +0:57 Sequence +0:57 Constant: +0:57 0 (const int) +0:57 Constant: +0:57 1 (const int) +0:57 direct index ( temp int) +0:57 c3: direct index for structure ( uniform 3-component vector of int) +0:57 '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:57 Constant: +0:57 2 (const uint) +0:57 Constant: +0:57 2 (const int) +0:58 textureFetch ( temp 4-component vector of int) +0:58 'g_tTex2di4' ( uniform itexture2D) +0:58 vector swizzle ( temp 2-component vector of int) +0:58 c3: direct index for structure ( uniform 3-component vector of int) +0:58 '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:58 Constant: +0:58 2 (const uint) +0:58 Sequence +0:58 Constant: +0:58 0 (const int) +0:58 Constant: +0:58 1 (const int) +0:58 direct index ( temp int) +0:58 c3: direct index for structure ( uniform 3-component vector of int) +0:58 '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:58 Constant: +0:58 2 (const uint) +0:58 Constant: +0:58 2 (const int) +0:59 textureFetch ( temp 4-component vector of uint) +0:59 'g_tTex2du4' ( uniform utexture2D) +0:59 vector swizzle ( temp 2-component vector of int) +0:59 c3: direct index for structure ( uniform 3-component vector of int) +0:59 '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:59 Constant: +0:59 2 (const uint) +0:59 Sequence +0:59 Constant: +0:59 0 (const int) +0:59 Constant: +0:59 1 (const int) +0:59 direct index ( temp int) +0:59 c3: direct index for structure ( uniform 3-component vector of int) +0:59 '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:59 Constant: +0:59 2 (const uint) +0:59 Constant: +0:59 2 (const int) +0:62 textureFetch ( temp 4-component vector of float) +0:62 'g_tTex3df4' ( uniform texture3D) +0:62 vector swizzle ( temp 3-component vector of int) +0:62 c4: direct index for structure ( uniform 4-component vector of int) +0:62 '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:62 Constant: +0:62 3 (const uint) +0:62 Sequence +0:62 Constant: +0:62 0 (const int) +0:62 Constant: +0:62 1 (const int) +0:62 Constant: +0:62 2 (const int) +0:62 direct index ( temp int) +0:62 c4: direct index for structure ( uniform 4-component vector of int) +0:62 '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:62 Constant: +0:62 3 (const uint) +0:62 Constant: +0:62 3 (const int) +0:63 textureFetch ( temp 4-component vector of int) +0:63 'g_tTex3di4' ( uniform itexture3D) +0:63 vector swizzle ( temp 3-component vector of int) +0:63 c4: direct index for structure ( uniform 4-component vector of int) +0:63 '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:63 Constant: +0:63 3 (const uint) +0:63 Sequence +0:63 Constant: +0:63 0 (const int) +0:63 Constant: +0:63 1 (const int) +0:63 Constant: +0:63 2 (const int) +0:63 direct index ( temp int) +0:63 c4: direct index for structure ( uniform 4-component vector of int) +0:63 '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:63 Constant: +0:63 3 (const uint) +0:63 Constant: +0:63 3 (const int) +0:64 textureFetch ( temp 4-component vector of uint) +0:64 'g_tTex3du4' ( uniform utexture3D) +0:64 vector swizzle ( temp 3-component vector of int) +0:64 c4: direct index for structure ( uniform 4-component vector of int) +0:64 '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:64 Constant: +0:64 3 (const uint) +0:64 Sequence +0:64 Constant: +0:64 0 (const int) +0:64 Constant: +0:64 1 (const int) +0:64 Constant: +0:64 2 (const int) +0:64 direct index ( temp int) +0:64 c4: direct index for structure ( uniform 4-component vector of int) +0:64 '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:64 Constant: +0:64 3 (const uint) +0:64 Constant: +0:64 3 (const int) +0:72 move second child to first child ( temp 4-component vector of float) +0:72 Color: direct index for structure ( temp 4-component vector of float) +0:72 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:72 Constant: +0:72 0 (const int) +0:72 Constant: +0:72 1.000000 +0:72 1.000000 +0:72 1.000000 +0:72 1.000000 +0:73 move second child to first child ( temp float) +0:73 Depth: direct index for structure ( temp float) +0:73 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:73 Constant: +0:73 1 (const int) +0:73 Constant: +0:73 1.000000 +0:75 Branch: Return with expression +0:75 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:48 Function Definition: main( ( temp void) +0:48 Function Parameters: +0:? Sequence +0:48 Sequence +0:48 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:48 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_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_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:? '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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// 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 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + MemberName 8(PS_OUTPUT) 1 "Depth" + Name 10 "@main(" + Name 14 "g_tTex1df4" + Name 20 "$Global" + MemberName 20($Global) 0 "c1" + MemberName 20($Global) 1 "c2" + MemberName 20($Global) 2 "c3" + MemberName 20($Global) 3 "c4" + MemberName 20($Global) 4 "o1" + MemberName 20($Global) 5 "o2" + MemberName 20($Global) 6 "o3" + MemberName 20($Global) 7 "o4" + Name 22 "" + Name 35 "g_tTex1di4" + Name 44 "g_tTex1du4" + Name 54 "g_tTex2df4" + Name 67 "g_tTex2di4" + Name 77 "g_tTex2du4" + Name 87 "g_tTex3df4" + Name 100 "g_tTex3di4" + Name 110 "g_tTex3du4" + Name 119 "psout" + Name 130 "flattenTemp" + Name 133 "Color" + Name 137 "Depth" + Name 142 "g_sSamp" + Name 145 "g_tTexcdf4" + Name 148 "g_tTexcdi4" + Name 151 "g_tTexcdu4" + Name 154 "g_tTex1df4a" + Name 157 "g_tTex1di4a" + Name 160 "g_tTex1du4a" + Name 163 "g_tTex2df4a" + Name 166 "g_tTex2di4a" + Name 169 "g_tTex2du4a" + Name 172 "g_tTexcdf4a" + Name 175 "g_tTexcdi4a" + Name 178 "g_tTexcdu4a" + Decorate 14(g_tTex1df4) DescriptorSet 0 + Decorate 14(g_tTex1df4) Binding 0 + MemberDecorate 20($Global) 0 Offset 0 + MemberDecorate 20($Global) 1 Offset 8 + MemberDecorate 20($Global) 2 Offset 16 + MemberDecorate 20($Global) 3 Offset 32 + MemberDecorate 20($Global) 4 Offset 48 + MemberDecorate 20($Global) 5 Offset 56 + MemberDecorate 20($Global) 6 Offset 64 + MemberDecorate 20($Global) 7 Offset 80 + Decorate 20($Global) Block + Decorate 22 DescriptorSet 0 + Decorate 35(g_tTex1di4) DescriptorSet 0 + Decorate 44(g_tTex1du4) DescriptorSet 0 + Decorate 54(g_tTex2df4) DescriptorSet 0 + Decorate 67(g_tTex2di4) DescriptorSet 0 + Decorate 77(g_tTex2du4) DescriptorSet 0 + 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 142(g_sSamp) DescriptorSet 0 + Decorate 142(g_sSamp) Binding 0 + Decorate 145(g_tTexcdf4) DescriptorSet 0 + Decorate 148(g_tTexcdi4) DescriptorSet 0 + Decorate 151(g_tTexcdu4) DescriptorSet 0 + Decorate 154(g_tTex1df4a) DescriptorSet 0 + Decorate 157(g_tTex1di4a) DescriptorSet 0 + Decorate 160(g_tTex1du4a) DescriptorSet 0 + Decorate 163(g_tTex2df4a) DescriptorSet 0 + Decorate 166(g_tTex2di4a) DescriptorSet 0 + Decorate 169(g_tTex2du4a) 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 + 7: TypeVector 6(float) 4 + 8(PS_OUTPUT): TypeStruct 7(fvec4) 6(float) + 9: TypeFunction 8(PS_OUTPUT) + 12: TypeImage 6(float) 1D sampled format:Unknown + 13: TypePointer UniformConstant 12 + 14(g_tTex1df4): 13(ptr) Variable UniformConstant + 16: TypeInt 32 1 + 17: TypeVector 16(int) 2 + 18: TypeVector 16(int) 3 + 19: TypeVector 16(int) 4 + 20($Global): TypeStruct 16(int) 17(ivec2) 18(ivec3) 19(ivec4) 16(int) 17(ivec2) 18(ivec3) 19(ivec4) + 21: TypePointer Uniform 20($Global) + 22: 21(ptr) Variable Uniform + 23: 16(int) Constant 1 + 24: TypeInt 32 0 + 25: 24(int) Constant 0 + 26: TypePointer Uniform 16(int) + 29: 24(int) Constant 1 + 33: TypeImage 16(int) 1D sampled format:Unknown + 34: TypePointer UniformConstant 33 + 35(g_tTex1di4): 34(ptr) Variable UniformConstant + 42: TypeImage 24(int) 1D sampled format:Unknown + 43: TypePointer UniformConstant 42 + 44(g_tTex1du4): 43(ptr) Variable UniformConstant + 50: TypeVector 24(int) 4 + 52: TypeImage 6(float) 2D sampled format:Unknown + 53: TypePointer UniformConstant 52 + 54(g_tTex2df4): 53(ptr) Variable UniformConstant + 56: 16(int) Constant 2 + 57: TypePointer Uniform 18(ivec3) + 61: 24(int) Constant 2 + 65: TypeImage 16(int) 2D sampled format:Unknown + 66: TypePointer UniformConstant 65 + 67(g_tTex2di4): 66(ptr) Variable UniformConstant + 75: TypeImage 24(int) 2D sampled format:Unknown + 76: TypePointer UniformConstant 75 + 77(g_tTex2du4): 76(ptr) Variable UniformConstant + 85: TypeImage 6(float) 3D sampled format:Unknown + 86: TypePointer UniformConstant 85 + 87(g_tTex3df4): 86(ptr) Variable UniformConstant + 89: 16(int) Constant 3 + 90: TypePointer Uniform 19(ivec4) + 94: 24(int) Constant 3 + 98: TypeImage 16(int) 3D sampled format:Unknown + 99: TypePointer UniformConstant 98 + 100(g_tTex3di4): 99(ptr) Variable UniformConstant + 108: TypeImage 24(int) 3D sampled format:Unknown + 109: TypePointer UniformConstant 108 + 110(g_tTex3du4): 109(ptr) Variable UniformConstant + 118: TypePointer Function 8(PS_OUTPUT) + 120: 16(int) Constant 0 + 121: 6(float) Constant 1065353216 + 122: 7(fvec4) ConstantComposite 121 121 121 121 + 123: TypePointer Function 7(fvec4) + 125: TypePointer Function 6(float) + 132: TypePointer Output 7(fvec4) + 133(Color): 132(ptr) Variable Output + 136: TypePointer Output 6(float) + 137(Depth): 136(ptr) Variable Output + 140: TypeSampler + 141: TypePointer UniformConstant 140 + 142(g_sSamp): 141(ptr) Variable UniformConstant + 143: TypeImage 6(float) Cube sampled format:Unknown + 144: TypePointer UniformConstant 143 + 145(g_tTexcdf4): 144(ptr) Variable UniformConstant + 146: TypeImage 16(int) Cube sampled format:Unknown + 147: TypePointer UniformConstant 146 + 148(g_tTexcdi4): 147(ptr) Variable UniformConstant + 149: TypeImage 24(int) Cube sampled format:Unknown + 150: TypePointer UniformConstant 149 + 151(g_tTexcdu4): 150(ptr) Variable UniformConstant + 152: TypeImage 6(float) 1D array sampled format:Unknown + 153: TypePointer UniformConstant 152 +154(g_tTex1df4a): 153(ptr) Variable UniformConstant + 155: TypeImage 16(int) 1D array sampled format:Unknown + 156: TypePointer UniformConstant 155 +157(g_tTex1di4a): 156(ptr) Variable UniformConstant + 158: TypeImage 24(int) 1D array sampled format:Unknown + 159: TypePointer UniformConstant 158 +160(g_tTex1du4a): 159(ptr) Variable UniformConstant + 161: TypeImage 6(float) 2D array sampled format:Unknown + 162: TypePointer UniformConstant 161 +163(g_tTex2df4a): 162(ptr) Variable UniformConstant + 164: TypeImage 16(int) 2D array sampled format:Unknown + 165: TypePointer UniformConstant 164 +166(g_tTex2di4a): 165(ptr) Variable UniformConstant + 167: TypeImage 24(int) 2D array sampled format:Unknown + 168: TypePointer UniformConstant 167 +169(g_tTex2du4a): 168(ptr) Variable UniformConstant + 170: TypeImage 6(float) Cube array sampled format:Unknown + 171: TypePointer UniformConstant 170 +172(g_tTexcdf4a): 171(ptr) Variable UniformConstant + 173: TypeImage 16(int) Cube array sampled format:Unknown + 174: TypePointer UniformConstant 173 +175(g_tTexcdi4a): 174(ptr) Variable UniformConstant + 176: TypeImage 24(int) Cube array sampled format:Unknown + 177: TypePointer UniformConstant 176 +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: 125(ptr) AccessChain 130(flattenTemp) 23 + 139: 6(float) Load 138 + Store 137(Depth) 139 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 119(psout): 118(ptr) Variable Function + 15: 12 Load 14(g_tTex1df4) + 27: 26(ptr) AccessChain 22 23 25 + 28: 16(int) Load 27 + 30: 26(ptr) AccessChain 22 23 29 + 31: 16(int) Load 30 + 32: 7(fvec4) ImageFetch 15 28 Lod 31 + 36: 33 Load 35(g_tTex1di4) + 37: 26(ptr) AccessChain 22 23 25 + 38: 16(int) Load 37 + 39: 26(ptr) AccessChain 22 23 29 + 40: 16(int) Load 39 + 41: 19(ivec4) ImageFetch 36 38 Lod 40 + 45: 42 Load 44(g_tTex1du4) + 46: 26(ptr) AccessChain 22 23 25 + 47: 16(int) Load 46 + 48: 26(ptr) AccessChain 22 23 29 + 49: 16(int) Load 48 + 51: 50(ivec4) ImageFetch 45 47 Lod 49 + 55: 52 Load 54(g_tTex2df4) + 58: 57(ptr) AccessChain 22 56 + 59: 18(ivec3) Load 58 + 60: 17(ivec2) VectorShuffle 59 59 0 1 + 62: 26(ptr) AccessChain 22 56 61 + 63: 16(int) Load 62 + 64: 7(fvec4) ImageFetch 55 60 Lod 63 + 68: 65 Load 67(g_tTex2di4) + 69: 57(ptr) AccessChain 22 56 + 70: 18(ivec3) Load 69 + 71: 17(ivec2) VectorShuffle 70 70 0 1 + 72: 26(ptr) AccessChain 22 56 61 + 73: 16(int) Load 72 + 74: 19(ivec4) ImageFetch 68 71 Lod 73 + 78: 75 Load 77(g_tTex2du4) + 79: 57(ptr) AccessChain 22 56 + 80: 18(ivec3) Load 79 + 81: 17(ivec2) VectorShuffle 80 80 0 1 + 82: 26(ptr) AccessChain 22 56 61 + 83: 16(int) Load 82 + 84: 50(ivec4) ImageFetch 78 81 Lod 83 + 88: 85 Load 87(g_tTex3df4) + 91: 90(ptr) AccessChain 22 89 + 92: 19(ivec4) Load 91 + 93: 18(ivec3) VectorShuffle 92 92 0 1 2 + 95: 26(ptr) AccessChain 22 89 94 + 96: 16(int) Load 95 + 97: 7(fvec4) ImageFetch 88 93 Lod 96 + 101: 98 Load 100(g_tTex3di4) + 102: 90(ptr) AccessChain 22 89 + 103: 19(ivec4) Load 102 + 104: 18(ivec3) VectorShuffle 103 103 0 1 2 + 105: 26(ptr) AccessChain 22 89 94 + 106: 16(int) Load 105 + 107: 19(ivec4) ImageFetch 101 104 Lod 106 + 111: 108 Load 110(g_tTex3du4) + 112: 90(ptr) AccessChain 22 89 + 113: 19(ivec4) Load 112 + 114: 18(ivec3) VectorShuffle 113 113 0 1 2 + 115: 26(ptr) AccessChain 22 89 94 + 116: 16(int) Load 115 + 117: 50(ivec4) ImageFetch 111 114 Lod 116 + 124: 123(ptr) AccessChain 119(psout) 120 + Store 124 122 + 126: 125(ptr) AccessChain 119(psout) 23 + Store 126 121 + 127:8(PS_OUTPUT) Load 119(psout) + ReturnValue 127 + FunctionEnd 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 new file mode 100644 index 0000000..a41675c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.basic.dx10.vert.out @@ -0,0 +1,715 @@ +hlsl.load.basic.dx10.vert +Shader version: 450 +0:? Sequence +0:47 Function Definition: @main( ( temp structure{ temp 4-component vector of float Pos}) +0:47 Function Parameters: +0:? Sequence +0:51 textureFetch ( temp 4-component vector of float) +0:51 'g_tTex1df4' (layout( binding=0) uniform texture1D) +0:51 vector swizzle ( temp int) +0:51 c2: direct index for structure ( uniform 2-component vector of int) +0:51 '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:51 Constant: +0:51 1 (const uint) +0:51 Sequence +0:51 Constant: +0:51 0 (const int) +0:51 direct index ( temp int) +0:51 c2: direct index for structure ( uniform 2-component vector of int) +0:51 '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:51 Constant: +0:51 1 (const uint) +0:51 Constant: +0:51 1 (const int) +0:52 textureFetch ( temp 4-component vector of int) +0:52 'g_tTex1di4' ( uniform itexture1D) +0:52 vector swizzle ( temp int) +0:52 c2: direct index for structure ( uniform 2-component vector of int) +0:52 '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:52 Constant: +0:52 1 (const uint) +0:52 Sequence +0:52 Constant: +0:52 0 (const int) +0:52 direct index ( temp int) +0:52 c2: direct index for structure ( uniform 2-component vector of int) +0:52 '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:52 Constant: +0:52 1 (const uint) +0:52 Constant: +0:52 1 (const int) +0:53 textureFetch ( temp 4-component vector of uint) +0:53 'g_tTex1du4' ( uniform utexture1D) +0:53 vector swizzle ( temp int) +0:53 c2: direct index for structure ( uniform 2-component vector of int) +0:53 '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:53 Constant: +0:53 1 (const uint) +0:53 Sequence +0:53 Constant: +0:53 0 (const int) +0:53 direct index ( temp int) +0:53 c2: direct index for structure ( uniform 2-component vector of int) +0:53 '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:53 Constant: +0:53 1 (const uint) +0:53 Constant: +0:53 1 (const int) +0:56 textureFetch ( temp 4-component vector of float) +0:56 'g_tTex2df4' ( uniform texture2D) +0:56 vector swizzle ( temp 2-component vector of int) +0:56 c3: direct index for structure ( uniform 3-component vector of int) +0:56 '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:56 Constant: +0:56 2 (const uint) +0:56 Sequence +0:56 Constant: +0:56 0 (const int) +0:56 Constant: +0:56 1 (const int) +0:56 direct index ( temp int) +0:56 c3: direct index for structure ( uniform 3-component vector of int) +0:56 '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:56 Constant: +0:56 2 (const uint) +0:56 Constant: +0:56 2 (const int) +0:57 textureFetch ( temp 4-component vector of int) +0:57 'g_tTex2di4' ( uniform itexture2D) +0:57 vector swizzle ( temp 2-component vector of int) +0:57 c3: direct index for structure ( uniform 3-component vector of int) +0:57 '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:57 Constant: +0:57 2 (const uint) +0:57 Sequence +0:57 Constant: +0:57 0 (const int) +0:57 Constant: +0:57 1 (const int) +0:57 direct index ( temp int) +0:57 c3: direct index for structure ( uniform 3-component vector of int) +0:57 '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:57 Constant: +0:57 2 (const uint) +0:57 Constant: +0:57 2 (const int) +0:58 textureFetch ( temp 4-component vector of uint) +0:58 'g_tTex2du4' ( uniform utexture2D) +0:58 vector swizzle ( temp 2-component vector of int) +0:58 c3: direct index for structure ( uniform 3-component vector of int) +0:58 '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:58 Constant: +0:58 2 (const uint) +0:58 Sequence +0:58 Constant: +0:58 0 (const int) +0:58 Constant: +0:58 1 (const int) +0:58 direct index ( temp int) +0:58 c3: direct index for structure ( uniform 3-component vector of int) +0:58 '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:58 Constant: +0:58 2 (const uint) +0:58 Constant: +0:58 2 (const int) +0:61 textureFetch ( temp 4-component vector of float) +0:61 'g_tTex3df4' ( uniform texture3D) +0:61 vector swizzle ( temp 3-component vector of int) +0:61 c4: direct index for structure ( uniform 4-component vector of int) +0:61 '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:61 Constant: +0:61 3 (const uint) +0:61 Sequence +0:61 Constant: +0:61 0 (const int) +0:61 Constant: +0:61 1 (const int) +0:61 Constant: +0:61 2 (const int) +0:61 direct index ( temp int) +0:61 c4: direct index for structure ( uniform 4-component vector of int) +0:61 '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:61 Constant: +0:61 3 (const uint) +0:61 Constant: +0:61 3 (const int) +0:62 textureFetch ( temp 4-component vector of int) +0:62 'g_tTex3di4' ( uniform itexture3D) +0:62 vector swizzle ( temp 3-component vector of int) +0:62 c4: direct index for structure ( uniform 4-component vector of int) +0:62 '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:62 Constant: +0:62 3 (const uint) +0:62 Sequence +0:62 Constant: +0:62 0 (const int) +0:62 Constant: +0:62 1 (const int) +0:62 Constant: +0:62 2 (const int) +0:62 direct index ( temp int) +0:62 c4: direct index for structure ( uniform 4-component vector of int) +0:62 '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:62 Constant: +0:62 3 (const uint) +0:62 Constant: +0:62 3 (const int) +0:63 textureFetch ( temp 4-component vector of uint) +0:63 'g_tTex3du4' ( uniform utexture3D) +0:63 vector swizzle ( temp 3-component vector of int) +0:63 c4: direct index for structure ( uniform 4-component vector of int) +0:63 '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:63 Constant: +0:63 3 (const uint) +0:63 Sequence +0:63 Constant: +0:63 0 (const int) +0:63 Constant: +0:63 1 (const int) +0:63 Constant: +0:63 2 (const int) +0:63 direct index ( temp int) +0:63 c4: direct index for structure ( uniform 4-component vector of int) +0:63 '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:63 Constant: +0:63 3 (const uint) +0:63 Constant: +0:63 3 (const int) +0:67 move second child to first child ( temp 4-component vector of float) +0:67 Pos: direct index for structure ( temp 4-component vector of float) +0:67 'vsout' ( temp structure{ temp 4-component vector of float Pos}) +0:67 Constant: +0:67 0 (const int) +0:? Constant: +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:69 Branch: Return with expression +0:69 'vsout' ( temp structure{ temp 4-component vector of float Pos}) +0:47 Function Definition: main( ( temp void) +0:47 Function Parameters: +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: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: +0:47 0 (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_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_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:? '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{}) + + +Linked vertex stage: + + +Shader version: 450 +0:? Sequence +0:47 Function Definition: @main( ( temp structure{ temp 4-component vector of float Pos}) +0:47 Function Parameters: +0:? Sequence +0:51 textureFetch ( temp 4-component vector of float) +0:51 'g_tTex1df4' (layout( binding=0) uniform texture1D) +0:51 vector swizzle ( temp int) +0:51 c2: direct index for structure ( uniform 2-component vector of int) +0:51 '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:51 Constant: +0:51 1 (const uint) +0:51 Sequence +0:51 Constant: +0:51 0 (const int) +0:51 direct index ( temp int) +0:51 c2: direct index for structure ( uniform 2-component vector of int) +0:51 '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:51 Constant: +0:51 1 (const uint) +0:51 Constant: +0:51 1 (const int) +0:52 textureFetch ( temp 4-component vector of int) +0:52 'g_tTex1di4' ( uniform itexture1D) +0:52 vector swizzle ( temp int) +0:52 c2: direct index for structure ( uniform 2-component vector of int) +0:52 '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:52 Constant: +0:52 1 (const uint) +0:52 Sequence +0:52 Constant: +0:52 0 (const int) +0:52 direct index ( temp int) +0:52 c2: direct index for structure ( uniform 2-component vector of int) +0:52 '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:52 Constant: +0:52 1 (const uint) +0:52 Constant: +0:52 1 (const int) +0:53 textureFetch ( temp 4-component vector of uint) +0:53 'g_tTex1du4' ( uniform utexture1D) +0:53 vector swizzle ( temp int) +0:53 c2: direct index for structure ( uniform 2-component vector of int) +0:53 '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:53 Constant: +0:53 1 (const uint) +0:53 Sequence +0:53 Constant: +0:53 0 (const int) +0:53 direct index ( temp int) +0:53 c2: direct index for structure ( uniform 2-component vector of int) +0:53 '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:53 Constant: +0:53 1 (const uint) +0:53 Constant: +0:53 1 (const int) +0:56 textureFetch ( temp 4-component vector of float) +0:56 'g_tTex2df4' ( uniform texture2D) +0:56 vector swizzle ( temp 2-component vector of int) +0:56 c3: direct index for structure ( uniform 3-component vector of int) +0:56 '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:56 Constant: +0:56 2 (const uint) +0:56 Sequence +0:56 Constant: +0:56 0 (const int) +0:56 Constant: +0:56 1 (const int) +0:56 direct index ( temp int) +0:56 c3: direct index for structure ( uniform 3-component vector of int) +0:56 '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:56 Constant: +0:56 2 (const uint) +0:56 Constant: +0:56 2 (const int) +0:57 textureFetch ( temp 4-component vector of int) +0:57 'g_tTex2di4' ( uniform itexture2D) +0:57 vector swizzle ( temp 2-component vector of int) +0:57 c3: direct index for structure ( uniform 3-component vector of int) +0:57 '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:57 Constant: +0:57 2 (const uint) +0:57 Sequence +0:57 Constant: +0:57 0 (const int) +0:57 Constant: +0:57 1 (const int) +0:57 direct index ( temp int) +0:57 c3: direct index for structure ( uniform 3-component vector of int) +0:57 '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:57 Constant: +0:57 2 (const uint) +0:57 Constant: +0:57 2 (const int) +0:58 textureFetch ( temp 4-component vector of uint) +0:58 'g_tTex2du4' ( uniform utexture2D) +0:58 vector swizzle ( temp 2-component vector of int) +0:58 c3: direct index for structure ( uniform 3-component vector of int) +0:58 '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:58 Constant: +0:58 2 (const uint) +0:58 Sequence +0:58 Constant: +0:58 0 (const int) +0:58 Constant: +0:58 1 (const int) +0:58 direct index ( temp int) +0:58 c3: direct index for structure ( uniform 3-component vector of int) +0:58 '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:58 Constant: +0:58 2 (const uint) +0:58 Constant: +0:58 2 (const int) +0:61 textureFetch ( temp 4-component vector of float) +0:61 'g_tTex3df4' ( uniform texture3D) +0:61 vector swizzle ( temp 3-component vector of int) +0:61 c4: direct index for structure ( uniform 4-component vector of int) +0:61 '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:61 Constant: +0:61 3 (const uint) +0:61 Sequence +0:61 Constant: +0:61 0 (const int) +0:61 Constant: +0:61 1 (const int) +0:61 Constant: +0:61 2 (const int) +0:61 direct index ( temp int) +0:61 c4: direct index for structure ( uniform 4-component vector of int) +0:61 '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:61 Constant: +0:61 3 (const uint) +0:61 Constant: +0:61 3 (const int) +0:62 textureFetch ( temp 4-component vector of int) +0:62 'g_tTex3di4' ( uniform itexture3D) +0:62 vector swizzle ( temp 3-component vector of int) +0:62 c4: direct index for structure ( uniform 4-component vector of int) +0:62 '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:62 Constant: +0:62 3 (const uint) +0:62 Sequence +0:62 Constant: +0:62 0 (const int) +0:62 Constant: +0:62 1 (const int) +0:62 Constant: +0:62 2 (const int) +0:62 direct index ( temp int) +0:62 c4: direct index for structure ( uniform 4-component vector of int) +0:62 '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:62 Constant: +0:62 3 (const uint) +0:62 Constant: +0:62 3 (const int) +0:63 textureFetch ( temp 4-component vector of uint) +0:63 'g_tTex3du4' ( uniform utexture3D) +0:63 vector swizzle ( temp 3-component vector of int) +0:63 c4: direct index for structure ( uniform 4-component vector of int) +0:63 '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:63 Constant: +0:63 3 (const uint) +0:63 Sequence +0:63 Constant: +0:63 0 (const int) +0:63 Constant: +0:63 1 (const int) +0:63 Constant: +0:63 2 (const int) +0:63 direct index ( temp int) +0:63 c4: direct index for structure ( uniform 4-component vector of int) +0:63 '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:63 Constant: +0:63 3 (const uint) +0:63 Constant: +0:63 3 (const int) +0:67 move second child to first child ( temp 4-component vector of float) +0:67 Pos: direct index for structure ( temp 4-component vector of float) +0:67 'vsout' ( temp structure{ temp 4-component vector of float Pos}) +0:67 Constant: +0:67 0 (const int) +0:? Constant: +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:69 Branch: Return with expression +0:69 'vsout' ( temp structure{ temp 4-component vector of float Pos}) +0:47 Function Definition: main( ( temp void) +0:47 Function Parameters: +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: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: +0:47 0 (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_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_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:? '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{}) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 174 + + Capability Shader + Capability Sampled1D + Capability SampledCubeArray + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 129 173 + Name 4 "main" + Name 8 "VS_OUTPUT" + MemberName 8(VS_OUTPUT) 0 "Pos" + Name 10 "@main(" + Name 14 "g_tTex1df4" + Name 20 "$Global" + MemberName 20($Global) 0 "c1" + MemberName 20($Global) 1 "c2" + MemberName 20($Global) 2 "c3" + MemberName 20($Global) 3 "c4" + MemberName 20($Global) 4 "o1" + MemberName 20($Global) 5 "o2" + MemberName 20($Global) 6 "o3" + MemberName 20($Global) 7 "o4" + Name 22 "" + Name 35 "g_tTex1di4" + Name 44 "g_tTex1du4" + Name 54 "g_tTex2df4" + Name 67 "g_tTex2di4" + Name 77 "g_tTex2du4" + Name 87 "g_tTex3df4" + Name 100 "g_tTex3di4" + Name 110 "g_tTex3du4" + Name 119 "vsout" + Name 129 "@entryPointOutput_Pos" + Name 134 "g_sSamp" + Name 137 "g_tTexcdf4" + Name 140 "g_tTexcdi4" + Name 143 "g_tTexcdu4" + Name 146 "g_tTex1df4a" + Name 149 "g_tTex1di4a" + Name 152 "g_tTex1du4a" + Name 155 "g_tTex2df4a" + Name 158 "g_tTex2di4a" + Name 161 "g_tTex2du4a" + 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 + MemberDecorate 20($Global) 1 Offset 8 + MemberDecorate 20($Global) 2 Offset 16 + MemberDecorate 20($Global) 3 Offset 32 + MemberDecorate 20($Global) 4 Offset 48 + MemberDecorate 20($Global) 5 Offset 56 + MemberDecorate 20($Global) 6 Offset 64 + MemberDecorate 20($Global) 7 Offset 80 + Decorate 20($Global) Block + Decorate 22 DescriptorSet 0 + Decorate 35(g_tTex1di4) DescriptorSet 0 + Decorate 44(g_tTex1du4) DescriptorSet 0 + Decorate 54(g_tTex2df4) DescriptorSet 0 + Decorate 67(g_tTex2di4) DescriptorSet 0 + Decorate 77(g_tTex2du4) DescriptorSet 0 + 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 134(g_sSamp) DescriptorSet 0 + Decorate 134(g_sSamp) Binding 0 + Decorate 137(g_tTexcdf4) DescriptorSet 0 + Decorate 140(g_tTexcdi4) DescriptorSet 0 + Decorate 143(g_tTexcdu4) DescriptorSet 0 + Decorate 146(g_tTex1df4a) DescriptorSet 0 + Decorate 149(g_tTex1di4a) DescriptorSet 0 + Decorate 152(g_tTex1du4a) DescriptorSet 0 + Decorate 155(g_tTex2df4a) DescriptorSet 0 + Decorate 158(g_tTex2di4a) DescriptorSet 0 + Decorate 161(g_tTex2du4a) DescriptorSet 0 + 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 + 7: TypeVector 6(float) 4 + 8(VS_OUTPUT): TypeStruct 7(fvec4) + 9: TypeFunction 8(VS_OUTPUT) + 12: TypeImage 6(float) 1D sampled format:Unknown + 13: TypePointer UniformConstant 12 + 14(g_tTex1df4): 13(ptr) Variable UniformConstant + 16: TypeInt 32 1 + 17: TypeVector 16(int) 2 + 18: TypeVector 16(int) 3 + 19: TypeVector 16(int) 4 + 20($Global): TypeStruct 16(int) 17(ivec2) 18(ivec3) 19(ivec4) 16(int) 17(ivec2) 18(ivec3) 19(ivec4) + 21: TypePointer Uniform 20($Global) + 22: 21(ptr) Variable Uniform + 23: 16(int) Constant 1 + 24: TypeInt 32 0 + 25: 24(int) Constant 0 + 26: TypePointer Uniform 16(int) + 29: 24(int) Constant 1 + 33: TypeImage 16(int) 1D sampled format:Unknown + 34: TypePointer UniformConstant 33 + 35(g_tTex1di4): 34(ptr) Variable UniformConstant + 42: TypeImage 24(int) 1D sampled format:Unknown + 43: TypePointer UniformConstant 42 + 44(g_tTex1du4): 43(ptr) Variable UniformConstant + 50: TypeVector 24(int) 4 + 52: TypeImage 6(float) 2D sampled format:Unknown + 53: TypePointer UniformConstant 52 + 54(g_tTex2df4): 53(ptr) Variable UniformConstant + 56: 16(int) Constant 2 + 57: TypePointer Uniform 18(ivec3) + 61: 24(int) Constant 2 + 65: TypeImage 16(int) 2D sampled format:Unknown + 66: TypePointer UniformConstant 65 + 67(g_tTex2di4): 66(ptr) Variable UniformConstant + 75: TypeImage 24(int) 2D sampled format:Unknown + 76: TypePointer UniformConstant 75 + 77(g_tTex2du4): 76(ptr) Variable UniformConstant + 85: TypeImage 6(float) 3D sampled format:Unknown + 86: TypePointer UniformConstant 85 + 87(g_tTex3df4): 86(ptr) Variable UniformConstant + 89: 16(int) Constant 3 + 90: TypePointer Uniform 19(ivec4) + 94: 24(int) Constant 3 + 98: TypeImage 16(int) 3D sampled format:Unknown + 99: TypePointer UniformConstant 98 + 100(g_tTex3di4): 99(ptr) Variable UniformConstant + 108: TypeImage 24(int) 3D sampled format:Unknown + 109: TypePointer UniformConstant 108 + 110(g_tTex3du4): 109(ptr) Variable UniformConstant + 118: TypePointer Function 8(VS_OUTPUT) + 120: 16(int) Constant 0 + 121: 6(float) Constant 0 + 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 + 132: TypeSampler + 133: TypePointer UniformConstant 132 + 134(g_sSamp): 133(ptr) Variable UniformConstant + 135: TypeImage 6(float) Cube sampled format:Unknown + 136: TypePointer UniformConstant 135 + 137(g_tTexcdf4): 136(ptr) Variable UniformConstant + 138: TypeImage 16(int) Cube sampled format:Unknown + 139: TypePointer UniformConstant 138 + 140(g_tTexcdi4): 139(ptr) Variable UniformConstant + 141: TypeImage 24(int) Cube sampled format:Unknown + 142: TypePointer UniformConstant 141 + 143(g_tTexcdu4): 142(ptr) Variable UniformConstant + 144: TypeImage 6(float) 1D array sampled format:Unknown + 145: TypePointer UniformConstant 144 +146(g_tTex1df4a): 145(ptr) Variable UniformConstant + 147: TypeImage 16(int) 1D array sampled format:Unknown + 148: TypePointer UniformConstant 147 +149(g_tTex1di4a): 148(ptr) Variable UniformConstant + 150: TypeImage 24(int) 1D array sampled format:Unknown + 151: TypePointer UniformConstant 150 +152(g_tTex1du4a): 151(ptr) Variable UniformConstant + 153: TypeImage 6(float) 2D array sampled format:Unknown + 154: TypePointer UniformConstant 153 +155(g_tTex2df4a): 154(ptr) Variable UniformConstant + 156: TypeImage 16(int) 2D array sampled format:Unknown + 157: TypePointer UniformConstant 156 +158(g_tTex2di4a): 157(ptr) Variable UniformConstant + 159: TypeImage 24(int) 2D array sampled format:Unknown + 160: TypePointer UniformConstant 159 +161(g_tTex2du4a): 160(ptr) Variable UniformConstant + 162: TypeImage 6(float) Cube array sampled format:Unknown + 163: TypePointer UniformConstant 162 +164(g_tTexcdf4a): 163(ptr) Variable UniformConstant + 165: TypeImage 16(int) Cube array sampled format:Unknown + 166: TypePointer UniformConstant 165 +167(g_tTexcdi4a): 166(ptr) Variable UniformConstant + 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 + Return + FunctionEnd + 10(@main():8(VS_OUTPUT) Function None 9 + 11: Label + 119(vsout): 118(ptr) Variable Function + 15: 12 Load 14(g_tTex1df4) + 27: 26(ptr) AccessChain 22 23 25 + 28: 16(int) Load 27 + 30: 26(ptr) AccessChain 22 23 29 + 31: 16(int) Load 30 + 32: 7(fvec4) ImageFetch 15 28 Lod 31 + 36: 33 Load 35(g_tTex1di4) + 37: 26(ptr) AccessChain 22 23 25 + 38: 16(int) Load 37 + 39: 26(ptr) AccessChain 22 23 29 + 40: 16(int) Load 39 + 41: 19(ivec4) ImageFetch 36 38 Lod 40 + 45: 42 Load 44(g_tTex1du4) + 46: 26(ptr) AccessChain 22 23 25 + 47: 16(int) Load 46 + 48: 26(ptr) AccessChain 22 23 29 + 49: 16(int) Load 48 + 51: 50(ivec4) ImageFetch 45 47 Lod 49 + 55: 52 Load 54(g_tTex2df4) + 58: 57(ptr) AccessChain 22 56 + 59: 18(ivec3) Load 58 + 60: 17(ivec2) VectorShuffle 59 59 0 1 + 62: 26(ptr) AccessChain 22 56 61 + 63: 16(int) Load 62 + 64: 7(fvec4) ImageFetch 55 60 Lod 63 + 68: 65 Load 67(g_tTex2di4) + 69: 57(ptr) AccessChain 22 56 + 70: 18(ivec3) Load 69 + 71: 17(ivec2) VectorShuffle 70 70 0 1 + 72: 26(ptr) AccessChain 22 56 61 + 73: 16(int) Load 72 + 74: 19(ivec4) ImageFetch 68 71 Lod 73 + 78: 75 Load 77(g_tTex2du4) + 79: 57(ptr) AccessChain 22 56 + 80: 18(ivec3) Load 79 + 81: 17(ivec2) VectorShuffle 80 80 0 1 + 82: 26(ptr) AccessChain 22 56 61 + 83: 16(int) Load 82 + 84: 50(ivec4) ImageFetch 78 81 Lod 83 + 88: 85 Load 87(g_tTex3df4) + 91: 90(ptr) AccessChain 22 89 + 92: 19(ivec4) Load 91 + 93: 18(ivec3) VectorShuffle 92 92 0 1 2 + 95: 26(ptr) AccessChain 22 89 94 + 96: 16(int) Load 95 + 97: 7(fvec4) ImageFetch 88 93 Lod 96 + 101: 98 Load 100(g_tTex3di4) + 102: 90(ptr) AccessChain 22 89 + 103: 19(ivec4) Load 102 + 104: 18(ivec3) VectorShuffle 103 103 0 1 2 + 105: 26(ptr) AccessChain 22 89 94 + 106: 16(int) Load 105 + 107: 19(ivec4) ImageFetch 101 104 Lod 106 + 111: 108 Load 110(g_tTex3du4) + 112: 90(ptr) AccessChain 22 89 + 113: 19(ivec4) Load 112 + 114: 18(ivec3) VectorShuffle 113 113 0 1 2 + 115: 26(ptr) AccessChain 22 89 94 + 116: 16(int) Load 115 + 117: 50(ivec4) ImageFetch 111 114 Lod 116 + 124: 123(ptr) AccessChain 119(vsout) 120 + Store 124 122 + 125:8(VS_OUTPUT) Load 119(vsout) + ReturnValue 125 + FunctionEnd 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 new file mode 100644 index 0000000..134a7fd --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.buffer.dx10.frag.out @@ -0,0 +1,302 @@ +hlsl.load.buffer.dx10.frag +Shader version: 450 +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}) +0:24 Function Parameters: +0:? Sequence +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 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: +0:28 0 (const uint) +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 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: +0:29 0 (const uint) +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 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: +0:30 0 (const uint) +0:34 move second child to first child ( temp 4-component vector of float) +0:34 Color: direct index for structure ( temp 4-component vector of float) +0:34 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:34 Constant: +0:34 0 (const int) +0:34 Constant: +0:34 1.000000 +0:34 1.000000 +0:34 1.000000 +0:34 1.000000 +0:35 move second child to first child ( temp float) +0:35 Depth: direct index for structure ( temp float) +0:35 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:35 Constant: +0:35 1 (const int) +0:35 Constant: +0:35 1.000000 +0:37 Branch: Return with expression +0:37 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:24 Function Definition: main( ( temp void) +0:24 Function Parameters: +0:? Sequence +0:24 Sequence +0:24 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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:? '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) + + +Linked fragment stage: + + +Shader version: 450 +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}) +0:24 Function Parameters: +0:? Sequence +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 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: +0:28 0 (const uint) +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 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: +0:29 0 (const uint) +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 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: +0:30 0 (const uint) +0:34 move second child to first child ( temp 4-component vector of float) +0:34 Color: direct index for structure ( temp 4-component vector of float) +0:34 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:34 Constant: +0:34 0 (const int) +0:34 Constant: +0:34 1.000000 +0:34 1.000000 +0:34 1.000000 +0:34 1.000000 +0:35 move second child to first child ( temp float) +0:35 Depth: direct index for structure ( temp float) +0:35 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:35 Constant: +0:35 1 (const int) +0:35 Constant: +0:35 1.000000 +0:37 Branch: Return with expression +0:37 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:24 Function Definition: main( ( temp void) +0:24 Function Parameters: +0:? Sequence +0:24 Sequence +0:24 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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:? '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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 72 + + Capability Shader + Capability SampledBuffer + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 64 68 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + MemberName 8(PS_OUTPUT) 1 "Depth" + Name 10 "@main(" + Name 13 "r00" + Name 16 "g_tTexbf4" + Name 22 "$Global" + MemberName 22($Global) 0 "c1" + MemberName 22($Global) 1 "c2" + MemberName 22($Global) 2 "c3" + MemberName 22($Global) 3 "c4" + MemberName 22($Global) 4 "o1" + MemberName 22($Global) 5 "o2" + MemberName 22($Global) 6 "o3" + MemberName 22($Global) 7 "o4" + Name 24 "" + Name 31 "r01" + Name 34 "g_tTexbi4" + Name 42 "r02" + Name 45 "g_tTexbu4" + Name 51 "psout" + Name 61 "flattenTemp" + Name 64 "Color" + Name 68 "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 + MemberDecorate 22($Global) 3 Offset 32 + MemberDecorate 22($Global) 4 Offset 48 + MemberDecorate 22($Global) 5 Offset 56 + MemberDecorate 22($Global) 6 Offset 64 + MemberDecorate 22($Global) 7 Offset 80 + 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 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 + 7: TypeVector 6(float) 4 + 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 + 15: TypePointer UniformConstant 14 + 16(g_tTexbf4): 15(ptr) Variable UniformConstant + 18: TypeInt 32 1 + 19: TypeVector 18(int) 2 + 20: TypeVector 18(int) 3 + 21: TypeVector 18(int) 4 + 22($Global): TypeStruct 18(int) 19(ivec2) 20(ivec3) 21(ivec4) 18(int) 19(ivec2) 20(ivec3) 21(ivec4) + 23: TypePointer Uniform 22($Global) + 24: 23(ptr) Variable Uniform + 25: 18(int) Constant 0 + 26: TypePointer Uniform 18(int) + 30: TypePointer Function 21(ivec4) + 32: TypeImage 18(int) Buffer nonsampled 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 + 44: TypePointer UniformConstant 43 + 45(g_tTexbu4): 44(ptr) Variable UniformConstant + 50: TypePointer Function 8(PS_OUTPUT) + 52: 6(float) Constant 1065353216 + 53: 7(fvec4) ConstantComposite 52 52 52 52 + 55: 18(int) Constant 1 + 56: TypePointer Function 6(float) + 63: TypePointer Output 7(fvec4) + 64(Color): 63(ptr) Variable Output + 67: TypePointer Output 6(float) + 68(Depth): 67(ptr) Variable Output +71(g_tTexbf4_test): 15(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label + 61(flattenTemp): 50(ptr) Variable Function + 62:8(PS_OUTPUT) FunctionCall 10(@main() + Store 61(flattenTemp) 62 + 65: 12(ptr) AccessChain 61(flattenTemp) 25 + 66: 7(fvec4) Load 65 + Store 64(Color) 66 + 69: 56(ptr) AccessChain 61(flattenTemp) 55 + 70: 6(float) Load 69 + Store 68(Depth) 70 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 13(r00): 12(ptr) Variable Function + 31(r01): 30(ptr) Variable Function + 42(r02): 41(ptr) Variable Function + 51(psout): 50(ptr) Variable Function + 17: 14 Load 16(g_tTexbf4) + 27: 26(ptr) AccessChain 24 25 + 28: 18(int) Load 27 + 29: 7(fvec4) ImageRead 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 + 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 + Store 42(r02) 49 + 54: 12(ptr) AccessChain 51(psout) 25 + Store 54 53 + 57: 56(ptr) AccessChain 51(psout) 55 + Store 57 52 + 58:8(PS_OUTPUT) Load 51(psout) + ReturnValue 58 + FunctionEnd 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 new file mode 100644 index 0000000..6ba3d99 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out @@ -0,0 +1,311 @@ +hlsl.load.buffer.float.dx10.frag +Shader version: 450 +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}) +0:24 Function Parameters: +0:? Sequence +0:28 Sequence +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: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: +0:28 0 (const uint) +0:29 Sequence +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: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: +0:29 0 (const uint) +0:30 Sequence +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: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: +0:30 0 (const uint) +0:34 move second child to first child ( temp 4-component vector of float) +0:34 Color: direct index for structure ( temp 4-component vector of float) +0:34 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:34 Constant: +0:34 0 (const int) +0:34 Constant: +0:34 1.000000 +0:34 1.000000 +0:34 1.000000 +0:34 1.000000 +0:35 move second child to first child ( temp float) +0:35 Depth: direct index for structure ( temp float) +0:35 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:35 Constant: +0:35 1 (const int) +0:35 Constant: +0:35 1.000000 +0:37 Branch: Return with expression +0:37 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:24 Function Definition: main( ( temp void) +0:24 Function Parameters: +0:? Sequence +0:24 Sequence +0:24 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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:? '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) + + +Linked fragment stage: + + +Shader version: 450 +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}) +0:24 Function Parameters: +0:? Sequence +0:28 Sequence +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: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: +0:28 0 (const uint) +0:29 Sequence +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: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: +0:29 0 (const uint) +0:30 Sequence +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: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: +0:30 0 (const uint) +0:34 move second child to first child ( temp 4-component vector of float) +0:34 Color: direct index for structure ( temp 4-component vector of float) +0:34 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:34 Constant: +0:34 0 (const int) +0:34 Constant: +0:34 1.000000 +0:34 1.000000 +0:34 1.000000 +0:34 1.000000 +0:35 move second child to first child ( temp float) +0:35 Depth: direct index for structure ( temp float) +0:35 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:35 Constant: +0:35 1 (const int) +0:35 Constant: +0:35 1.000000 +0:37 Branch: Return with expression +0:37 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:24 Function Definition: main( ( temp void) +0:24 Function Parameters: +0:? Sequence +0:24 Sequence +0:24 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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:? '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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 75 + + Capability Shader + Capability SampledBuffer + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 67 71 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + MemberName 8(PS_OUTPUT) 1 "Depth" + Name 10 "@main(" + Name 13 "r00" + Name 16 "g_tTexbfs" + Name 22 "$Global" + MemberName 22($Global) 0 "c1" + MemberName 22($Global) 1 "c2" + MemberName 22($Global) 2 "c3" + MemberName 22($Global) 3 "c4" + MemberName 22($Global) 4 "o1" + MemberName 22($Global) 5 "o2" + MemberName 22($Global) 6 "o3" + MemberName 22($Global) 7 "o4" + Name 24 "" + Name 32 "r01" + Name 35 "g_tTexbis" + Name 43 "r02" + Name 46 "g_tTexbus" + Name 54 "psout" + Name 64 "flattenTemp" + Name 67 "Color" + Name 71 "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 + MemberDecorate 22($Global) 3 Offset 32 + MemberDecorate 22($Global) 4 Offset 48 + MemberDecorate 22($Global) 5 Offset 56 + MemberDecorate 22($Global) 6 Offset 64 + MemberDecorate 22($Global) 7 Offset 80 + 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 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 + 7: TypeVector 6(float) 4 + 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 + 15: TypePointer UniformConstant 14 + 16(g_tTexbfs): 15(ptr) Variable UniformConstant + 18: TypeInt 32 1 + 19: TypeVector 18(int) 2 + 20: TypeVector 18(int) 3 + 21: TypeVector 18(int) 4 + 22($Global): TypeStruct 18(int) 19(ivec2) 20(ivec3) 21(ivec4) 18(int) 19(ivec2) 20(ivec3) 21(ivec4) + 23: TypePointer Uniform 22($Global) + 24: 23(ptr) Variable Uniform + 25: 18(int) Constant 0 + 26: TypePointer Uniform 18(int) + 31: TypePointer Function 18(int) + 33: TypeImage 18(int) Buffer nonsampled 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 + 45: TypePointer UniformConstant 44 + 46(g_tTexbus): 45(ptr) Variable UniformConstant + 50: TypeVector 41(int) 4 + 53: TypePointer Function 8(PS_OUTPUT) + 55: 6(float) Constant 1065353216 + 56: 7(fvec4) ConstantComposite 55 55 55 55 + 57: TypePointer Function 7(fvec4) + 59: 18(int) Constant 1 + 66: TypePointer Output 7(fvec4) + 67(Color): 66(ptr) Variable Output + 70: TypePointer Output 6(float) + 71(Depth): 70(ptr) Variable Output +74(g_tTexbfs_test): 15(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label + 64(flattenTemp): 53(ptr) Variable Function + 65:8(PS_OUTPUT) FunctionCall 10(@main() + Store 64(flattenTemp) 65 + 68: 57(ptr) AccessChain 64(flattenTemp) 25 + 69: 7(fvec4) Load 68 + Store 67(Color) 69 + 72: 12(ptr) AccessChain 64(flattenTemp) 59 + 73: 6(float) Load 72 + Store 71(Depth) 73 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 13(r00): 12(ptr) Variable Function + 32(r01): 31(ptr) Variable Function + 43(r02): 42(ptr) Variable Function + 54(psout): 53(ptr) Variable Function + 17: 14 Load 16(g_tTexbfs) + 27: 26(ptr) AccessChain 24 25 + 28: 18(int) Load 27 + 29: 7(fvec4) ImageRead 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 + 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 + 52: 41(int) CompositeExtract 51 0 + Store 43(r02) 52 + 58: 57(ptr) AccessChain 54(psout) 25 + Store 58 56 + 60: 12(ptr) AccessChain 54(psout) 59 + Store 60 55 + 61:8(PS_OUTPUT) Load 54(psout) + ReturnValue 61 + FunctionEnd 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 new file mode 100644 index 0000000..7d6c63a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.offset.dx10.frag.out @@ -0,0 +1,856 @@ +hlsl.load.offset.dx10.frag +Shader version: 450 +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}) +0:48 Function Parameters: +0:? Sequence +0:52 textureFetchOffset ( temp 4-component vector of float) +0:52 'g_tTex1df4' (layout( binding=0) uniform texture1D) +0:52 vector swizzle ( temp int) +0:52 c2: direct index for structure ( uniform 2-component vector of int) +0:52 '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:52 Constant: +0:52 1 (const uint) +0:52 Sequence +0:52 Constant: +0:52 0 (const int) +0:52 direct index ( temp int) +0:52 c2: direct index for structure ( uniform 2-component vector of int) +0:52 '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:52 Constant: +0:52 1 (const uint) +0:52 Constant: +0:52 1 (const int) +0:52 o1: direct index for structure ( uniform int) +0:52 '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:52 Constant: +0:52 4 (const uint) +0:53 textureFetchOffset ( temp 4-component vector of int) +0:53 'g_tTex1di4' ( uniform itexture1D) +0:53 vector swizzle ( temp int) +0:53 c2: direct index for structure ( uniform 2-component vector of int) +0:53 '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:53 Constant: +0:53 1 (const uint) +0:53 Sequence +0:53 Constant: +0:53 0 (const int) +0:53 direct index ( temp int) +0:53 c2: direct index for structure ( uniform 2-component vector of int) +0:53 '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:53 Constant: +0:53 1 (const uint) +0:53 Constant: +0:53 1 (const int) +0:53 o1: direct index for structure ( uniform int) +0:53 '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:53 Constant: +0:53 4 (const uint) +0:54 textureFetchOffset ( temp 4-component vector of uint) +0:54 'g_tTex1du4' ( uniform utexture1D) +0:54 vector swizzle ( temp int) +0:54 c2: direct index for structure ( uniform 2-component vector of int) +0:54 '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:54 Constant: +0:54 1 (const uint) +0:54 Sequence +0:54 Constant: +0:54 0 (const int) +0:54 direct index ( temp int) +0:54 c2: direct index for structure ( uniform 2-component vector of int) +0:54 '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:54 Constant: +0:54 1 (const uint) +0:54 Constant: +0:54 1 (const int) +0:54 o1: direct index for structure ( uniform int) +0:54 '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:54 Constant: +0:54 4 (const uint) +0:57 textureFetchOffset ( temp 4-component vector of float) +0:57 'g_tTex2df4' ( uniform texture2D) +0:57 vector swizzle ( temp 2-component vector of int) +0:57 c3: direct index for structure ( uniform 3-component vector of int) +0:57 '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:57 Constant: +0:57 2 (const uint) +0:57 Sequence +0:57 Constant: +0:57 0 (const int) +0:57 Constant: +0:57 1 (const int) +0:57 direct index ( temp int) +0:57 c3: direct index for structure ( uniform 3-component vector of int) +0:57 '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:57 Constant: +0:57 2 (const uint) +0:57 Constant: +0:57 2 (const int) +0:57 o2: direct index for structure ( uniform 2-component vector of int) +0:57 '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:57 Constant: +0:57 5 (const uint) +0:58 textureFetchOffset ( temp 4-component vector of int) +0:58 'g_tTex2di4' ( uniform itexture2D) +0:58 vector swizzle ( temp 2-component vector of int) +0:58 c3: direct index for structure ( uniform 3-component vector of int) +0:58 '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:58 Constant: +0:58 2 (const uint) +0:58 Sequence +0:58 Constant: +0:58 0 (const int) +0:58 Constant: +0:58 1 (const int) +0:58 direct index ( temp int) +0:58 c3: direct index for structure ( uniform 3-component vector of int) +0:58 '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:58 Constant: +0:58 2 (const uint) +0:58 Constant: +0:58 2 (const int) +0:58 o2: direct index for structure ( uniform 2-component vector of int) +0:58 '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:58 Constant: +0:58 5 (const uint) +0:59 textureFetchOffset ( temp 4-component vector of uint) +0:59 'g_tTex2du4' ( uniform utexture2D) +0:59 vector swizzle ( temp 2-component vector of int) +0:59 c3: direct index for structure ( uniform 3-component vector of int) +0:59 '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:59 Constant: +0:59 2 (const uint) +0:59 Sequence +0:59 Constant: +0:59 0 (const int) +0:59 Constant: +0:59 1 (const int) +0:59 direct index ( temp int) +0:59 c3: direct index for structure ( uniform 3-component vector of int) +0:59 '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:59 Constant: +0:59 2 (const uint) +0:59 Constant: +0:59 2 (const int) +0:59 o2: direct index for structure ( uniform 2-component vector of int) +0:59 '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:59 Constant: +0:59 5 (const uint) +0:62 textureFetchOffset ( temp 4-component vector of float) +0:62 'g_tTex3df4' ( uniform texture3D) +0:62 vector swizzle ( temp 3-component vector of int) +0:62 c4: direct index for structure ( uniform 4-component vector of int) +0:62 '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:62 Constant: +0:62 3 (const uint) +0:62 Sequence +0:62 Constant: +0:62 0 (const int) +0:62 Constant: +0:62 1 (const int) +0:62 Constant: +0:62 2 (const int) +0:62 direct index ( temp int) +0:62 c4: direct index for structure ( uniform 4-component vector of int) +0:62 '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:62 Constant: +0:62 3 (const uint) +0:62 Constant: +0:62 3 (const int) +0:62 o3: direct index for structure ( uniform 3-component vector of int) +0:62 '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:62 Constant: +0:62 6 (const uint) +0:63 textureFetchOffset ( temp 4-component vector of int) +0:63 'g_tTex3di4' ( uniform itexture3D) +0:63 vector swizzle ( temp 3-component vector of int) +0:63 c4: direct index for structure ( uniform 4-component vector of int) +0:63 '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:63 Constant: +0:63 3 (const uint) +0:63 Sequence +0:63 Constant: +0:63 0 (const int) +0:63 Constant: +0:63 1 (const int) +0:63 Constant: +0:63 2 (const int) +0:63 direct index ( temp int) +0:63 c4: direct index for structure ( uniform 4-component vector of int) +0:63 '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:63 Constant: +0:63 3 (const uint) +0:63 Constant: +0:63 3 (const int) +0:63 o3: direct index for structure ( uniform 3-component vector of int) +0:63 '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:63 Constant: +0:63 6 (const uint) +0:64 textureFetchOffset ( temp 4-component vector of uint) +0:64 'g_tTex3du4' ( uniform utexture3D) +0:64 vector swizzle ( temp 3-component vector of int) +0:64 c4: direct index for structure ( uniform 4-component vector of int) +0:64 '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:64 Constant: +0:64 3 (const uint) +0:64 Sequence +0:64 Constant: +0:64 0 (const int) +0:64 Constant: +0:64 1 (const int) +0:64 Constant: +0:64 2 (const int) +0:64 direct index ( temp int) +0:64 c4: direct index for structure ( uniform 4-component vector of int) +0:64 '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:64 Constant: +0:64 3 (const uint) +0:64 Constant: +0:64 3 (const int) +0:64 o3: direct index for structure ( uniform 3-component vector of int) +0:64 '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:64 Constant: +0:64 6 (const uint) +0:72 move second child to first child ( temp 4-component vector of float) +0:72 Color: direct index for structure ( temp 4-component vector of float) +0:72 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:72 Constant: +0:72 0 (const int) +0:72 Constant: +0:72 1.000000 +0:72 1.000000 +0:72 1.000000 +0:72 1.000000 +0:73 move second child to first child ( temp float) +0:73 Depth: direct index for structure ( temp float) +0:73 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:73 Constant: +0:73 1 (const int) +0:73 Constant: +0:73 1.000000 +0:75 Branch: Return with expression +0:75 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:48 Function Definition: main( ( temp void) +0:48 Function Parameters: +0:? Sequence +0:48 Sequence +0:48 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:48 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_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_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:? '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) + + +Linked fragment stage: + + +Shader version: 450 +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}) +0:48 Function Parameters: +0:? Sequence +0:52 textureFetchOffset ( temp 4-component vector of float) +0:52 'g_tTex1df4' (layout( binding=0) uniform texture1D) +0:52 vector swizzle ( temp int) +0:52 c2: direct index for structure ( uniform 2-component vector of int) +0:52 '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:52 Constant: +0:52 1 (const uint) +0:52 Sequence +0:52 Constant: +0:52 0 (const int) +0:52 direct index ( temp int) +0:52 c2: direct index for structure ( uniform 2-component vector of int) +0:52 '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:52 Constant: +0:52 1 (const uint) +0:52 Constant: +0:52 1 (const int) +0:52 o1: direct index for structure ( uniform int) +0:52 '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:52 Constant: +0:52 4 (const uint) +0:53 textureFetchOffset ( temp 4-component vector of int) +0:53 'g_tTex1di4' ( uniform itexture1D) +0:53 vector swizzle ( temp int) +0:53 c2: direct index for structure ( uniform 2-component vector of int) +0:53 '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:53 Constant: +0:53 1 (const uint) +0:53 Sequence +0:53 Constant: +0:53 0 (const int) +0:53 direct index ( temp int) +0:53 c2: direct index for structure ( uniform 2-component vector of int) +0:53 '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:53 Constant: +0:53 1 (const uint) +0:53 Constant: +0:53 1 (const int) +0:53 o1: direct index for structure ( uniform int) +0:53 '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:53 Constant: +0:53 4 (const uint) +0:54 textureFetchOffset ( temp 4-component vector of uint) +0:54 'g_tTex1du4' ( uniform utexture1D) +0:54 vector swizzle ( temp int) +0:54 c2: direct index for structure ( uniform 2-component vector of int) +0:54 '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:54 Constant: +0:54 1 (const uint) +0:54 Sequence +0:54 Constant: +0:54 0 (const int) +0:54 direct index ( temp int) +0:54 c2: direct index for structure ( uniform 2-component vector of int) +0:54 '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:54 Constant: +0:54 1 (const uint) +0:54 Constant: +0:54 1 (const int) +0:54 o1: direct index for structure ( uniform int) +0:54 '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:54 Constant: +0:54 4 (const uint) +0:57 textureFetchOffset ( temp 4-component vector of float) +0:57 'g_tTex2df4' ( uniform texture2D) +0:57 vector swizzle ( temp 2-component vector of int) +0:57 c3: direct index for structure ( uniform 3-component vector of int) +0:57 '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:57 Constant: +0:57 2 (const uint) +0:57 Sequence +0:57 Constant: +0:57 0 (const int) +0:57 Constant: +0:57 1 (const int) +0:57 direct index ( temp int) +0:57 c3: direct index for structure ( uniform 3-component vector of int) +0:57 '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:57 Constant: +0:57 2 (const uint) +0:57 Constant: +0:57 2 (const int) +0:57 o2: direct index for structure ( uniform 2-component vector of int) +0:57 '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:57 Constant: +0:57 5 (const uint) +0:58 textureFetchOffset ( temp 4-component vector of int) +0:58 'g_tTex2di4' ( uniform itexture2D) +0:58 vector swizzle ( temp 2-component vector of int) +0:58 c3: direct index for structure ( uniform 3-component vector of int) +0:58 '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:58 Constant: +0:58 2 (const uint) +0:58 Sequence +0:58 Constant: +0:58 0 (const int) +0:58 Constant: +0:58 1 (const int) +0:58 direct index ( temp int) +0:58 c3: direct index for structure ( uniform 3-component vector of int) +0:58 '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:58 Constant: +0:58 2 (const uint) +0:58 Constant: +0:58 2 (const int) +0:58 o2: direct index for structure ( uniform 2-component vector of int) +0:58 '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:58 Constant: +0:58 5 (const uint) +0:59 textureFetchOffset ( temp 4-component vector of uint) +0:59 'g_tTex2du4' ( uniform utexture2D) +0:59 vector swizzle ( temp 2-component vector of int) +0:59 c3: direct index for structure ( uniform 3-component vector of int) +0:59 '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:59 Constant: +0:59 2 (const uint) +0:59 Sequence +0:59 Constant: +0:59 0 (const int) +0:59 Constant: +0:59 1 (const int) +0:59 direct index ( temp int) +0:59 c3: direct index for structure ( uniform 3-component vector of int) +0:59 '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:59 Constant: +0:59 2 (const uint) +0:59 Constant: +0:59 2 (const int) +0:59 o2: direct index for structure ( uniform 2-component vector of int) +0:59 '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:59 Constant: +0:59 5 (const uint) +0:62 textureFetchOffset ( temp 4-component vector of float) +0:62 'g_tTex3df4' ( uniform texture3D) +0:62 vector swizzle ( temp 3-component vector of int) +0:62 c4: direct index for structure ( uniform 4-component vector of int) +0:62 '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:62 Constant: +0:62 3 (const uint) +0:62 Sequence +0:62 Constant: +0:62 0 (const int) +0:62 Constant: +0:62 1 (const int) +0:62 Constant: +0:62 2 (const int) +0:62 direct index ( temp int) +0:62 c4: direct index for structure ( uniform 4-component vector of int) +0:62 '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:62 Constant: +0:62 3 (const uint) +0:62 Constant: +0:62 3 (const int) +0:62 o3: direct index for structure ( uniform 3-component vector of int) +0:62 '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:62 Constant: +0:62 6 (const uint) +0:63 textureFetchOffset ( temp 4-component vector of int) +0:63 'g_tTex3di4' ( uniform itexture3D) +0:63 vector swizzle ( temp 3-component vector of int) +0:63 c4: direct index for structure ( uniform 4-component vector of int) +0:63 '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:63 Constant: +0:63 3 (const uint) +0:63 Sequence +0:63 Constant: +0:63 0 (const int) +0:63 Constant: +0:63 1 (const int) +0:63 Constant: +0:63 2 (const int) +0:63 direct index ( temp int) +0:63 c4: direct index for structure ( uniform 4-component vector of int) +0:63 '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:63 Constant: +0:63 3 (const uint) +0:63 Constant: +0:63 3 (const int) +0:63 o3: direct index for structure ( uniform 3-component vector of int) +0:63 '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:63 Constant: +0:63 6 (const uint) +0:64 textureFetchOffset ( temp 4-component vector of uint) +0:64 'g_tTex3du4' ( uniform utexture3D) +0:64 vector swizzle ( temp 3-component vector of int) +0:64 c4: direct index for structure ( uniform 4-component vector of int) +0:64 '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:64 Constant: +0:64 3 (const uint) +0:64 Sequence +0:64 Constant: +0:64 0 (const int) +0:64 Constant: +0:64 1 (const int) +0:64 Constant: +0:64 2 (const int) +0:64 direct index ( temp int) +0:64 c4: direct index for structure ( uniform 4-component vector of int) +0:64 '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:64 Constant: +0:64 3 (const uint) +0:64 Constant: +0:64 3 (const int) +0:64 o3: direct index for structure ( uniform 3-component vector of int) +0:64 '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:64 Constant: +0:64 6 (const uint) +0:72 move second child to first child ( temp 4-component vector of float) +0:72 Color: direct index for structure ( temp 4-component vector of float) +0:72 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:72 Constant: +0:72 0 (const int) +0:72 Constant: +0:72 1.000000 +0:72 1.000000 +0:72 1.000000 +0:72 1.000000 +0:73 move second child to first child ( temp float) +0:73 Depth: direct index for structure ( temp float) +0:73 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:73 Constant: +0:73 1 (const int) +0:73 Constant: +0:73 1.000000 +0:75 Branch: Return with expression +0:75 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:48 Function Definition: main( ( temp void) +0:48 Function Parameters: +0:? Sequence +0:48 Sequence +0:48 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:48 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_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_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:? '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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 201 + + Capability Shader + Capability ImageGatherExtended + Capability Sampled1D + Capability SampledCubeArray + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 155 159 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + MemberName 8(PS_OUTPUT) 1 "Depth" + Name 10 "@main(" + Name 14 "g_tTex1df4" + Name 20 "$Global" + MemberName 20($Global) 0 "c1" + MemberName 20($Global) 1 "c2" + MemberName 20($Global) 2 "c3" + MemberName 20($Global) 3 "c4" + MemberName 20($Global) 4 "o1" + MemberName 20($Global) 5 "o2" + MemberName 20($Global) 6 "o3" + MemberName 20($Global) 7 "o4" + Name 22 "" + Name 38 "g_tTex1di4" + Name 49 "g_tTex1du4" + Name 61 "g_tTex2df4" + Name 78 "g_tTex2di4" + Name 90 "g_tTex2du4" + Name 102 "g_tTex3df4" + Name 118 "g_tTex3di4" + Name 130 "g_tTex3du4" + Name 141 "psout" + Name 152 "flattenTemp" + Name 155 "Color" + Name 159 "Depth" + Name 164 "g_sSamp" + Name 167 "g_tTexcdf4" + Name 170 "g_tTexcdi4" + Name 173 "g_tTexcdu4" + Name 176 "g_tTex1df4a" + Name 179 "g_tTex1di4a" + Name 182 "g_tTex1du4a" + Name 185 "g_tTex2df4a" + Name 188 "g_tTex2di4a" + Name 191 "g_tTex2du4a" + Name 194 "g_tTexcdf4a" + Name 197 "g_tTexcdi4a" + Name 200 "g_tTexcdu4a" + Decorate 14(g_tTex1df4) DescriptorSet 0 + Decorate 14(g_tTex1df4) Binding 0 + MemberDecorate 20($Global) 0 Offset 0 + MemberDecorate 20($Global) 1 Offset 8 + MemberDecorate 20($Global) 2 Offset 16 + MemberDecorate 20($Global) 3 Offset 32 + MemberDecorate 20($Global) 4 Offset 48 + MemberDecorate 20($Global) 5 Offset 56 + MemberDecorate 20($Global) 6 Offset 64 + MemberDecorate 20($Global) 7 Offset 80 + Decorate 20($Global) Block + Decorate 22 DescriptorSet 0 + Decorate 38(g_tTex1di4) DescriptorSet 0 + Decorate 49(g_tTex1du4) DescriptorSet 0 + Decorate 61(g_tTex2df4) DescriptorSet 0 + Decorate 78(g_tTex2di4) DescriptorSet 0 + Decorate 90(g_tTex2du4) DescriptorSet 0 + 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 164(g_sSamp) DescriptorSet 0 + Decorate 164(g_sSamp) Binding 0 + Decorate 167(g_tTexcdf4) DescriptorSet 0 + Decorate 170(g_tTexcdi4) DescriptorSet 0 + Decorate 173(g_tTexcdu4) DescriptorSet 0 + Decorate 176(g_tTex1df4a) DescriptorSet 0 + Decorate 179(g_tTex1di4a) DescriptorSet 0 + Decorate 182(g_tTex1du4a) DescriptorSet 0 + Decorate 185(g_tTex2df4a) DescriptorSet 0 + Decorate 188(g_tTex2di4a) DescriptorSet 0 + Decorate 191(g_tTex2du4a) DescriptorSet 0 + Decorate 194(g_tTexcdf4a) DescriptorSet 0 + Decorate 197(g_tTexcdi4a) DescriptorSet 0 + Decorate 200(g_tTexcdu4a) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8(PS_OUTPUT): TypeStruct 7(fvec4) 6(float) + 9: TypeFunction 8(PS_OUTPUT) + 12: TypeImage 6(float) 1D sampled format:Unknown + 13: TypePointer UniformConstant 12 + 14(g_tTex1df4): 13(ptr) Variable UniformConstant + 16: TypeInt 32 1 + 17: TypeVector 16(int) 2 + 18: TypeVector 16(int) 3 + 19: TypeVector 16(int) 4 + 20($Global): TypeStruct 16(int) 17(ivec2) 18(ivec3) 19(ivec4) 16(int) 17(ivec2) 18(ivec3) 19(ivec4) + 21: TypePointer Uniform 20($Global) + 22: 21(ptr) Variable Uniform + 23: 16(int) Constant 1 + 24: TypeInt 32 0 + 25: 24(int) Constant 0 + 26: TypePointer Uniform 16(int) + 29: 24(int) Constant 1 + 32: 16(int) Constant 4 + 36: TypeImage 16(int) 1D sampled format:Unknown + 37: TypePointer UniformConstant 36 + 38(g_tTex1di4): 37(ptr) Variable UniformConstant + 47: TypeImage 24(int) 1D sampled format:Unknown + 48: TypePointer UniformConstant 47 + 49(g_tTex1du4): 48(ptr) Variable UniformConstant + 57: TypeVector 24(int) 4 + 59: TypeImage 6(float) 2D sampled format:Unknown + 60: TypePointer UniformConstant 59 + 61(g_tTex2df4): 60(ptr) Variable UniformConstant + 63: 16(int) Constant 2 + 64: TypePointer Uniform 18(ivec3) + 68: 24(int) Constant 2 + 71: 16(int) Constant 5 + 72: TypePointer Uniform 17(ivec2) + 76: TypeImage 16(int) 2D sampled format:Unknown + 77: TypePointer UniformConstant 76 + 78(g_tTex2di4): 77(ptr) Variable UniformConstant + 88: TypeImage 24(int) 2D sampled format:Unknown + 89: TypePointer UniformConstant 88 + 90(g_tTex2du4): 89(ptr) Variable UniformConstant + 100: TypeImage 6(float) 3D sampled format:Unknown + 101: TypePointer UniformConstant 100 + 102(g_tTex3df4): 101(ptr) Variable UniformConstant + 104: 16(int) Constant 3 + 105: TypePointer Uniform 19(ivec4) + 109: 24(int) Constant 3 + 112: 16(int) Constant 6 + 116: TypeImage 16(int) 3D sampled format:Unknown + 117: TypePointer UniformConstant 116 + 118(g_tTex3di4): 117(ptr) Variable UniformConstant + 128: TypeImage 24(int) 3D sampled format:Unknown + 129: TypePointer UniformConstant 128 + 130(g_tTex3du4): 129(ptr) Variable UniformConstant + 140: TypePointer Function 8(PS_OUTPUT) + 142: 16(int) Constant 0 + 143: 6(float) Constant 1065353216 + 144: 7(fvec4) ConstantComposite 143 143 143 143 + 145: TypePointer Function 7(fvec4) + 147: TypePointer Function 6(float) + 154: TypePointer Output 7(fvec4) + 155(Color): 154(ptr) Variable Output + 158: TypePointer Output 6(float) + 159(Depth): 158(ptr) Variable Output + 162: TypeSampler + 163: TypePointer UniformConstant 162 + 164(g_sSamp): 163(ptr) Variable UniformConstant + 165: TypeImage 6(float) Cube sampled format:Unknown + 166: TypePointer UniformConstant 165 + 167(g_tTexcdf4): 166(ptr) Variable UniformConstant + 168: TypeImage 16(int) Cube sampled format:Unknown + 169: TypePointer UniformConstant 168 + 170(g_tTexcdi4): 169(ptr) Variable UniformConstant + 171: TypeImage 24(int) Cube sampled format:Unknown + 172: TypePointer UniformConstant 171 + 173(g_tTexcdu4): 172(ptr) Variable UniformConstant + 174: TypeImage 6(float) 1D array sampled format:Unknown + 175: TypePointer UniformConstant 174 +176(g_tTex1df4a): 175(ptr) Variable UniformConstant + 177: TypeImage 16(int) 1D array sampled format:Unknown + 178: TypePointer UniformConstant 177 +179(g_tTex1di4a): 178(ptr) Variable UniformConstant + 180: TypeImage 24(int) 1D array sampled format:Unknown + 181: TypePointer UniformConstant 180 +182(g_tTex1du4a): 181(ptr) Variable UniformConstant + 183: TypeImage 6(float) 2D array sampled format:Unknown + 184: TypePointer UniformConstant 183 +185(g_tTex2df4a): 184(ptr) Variable UniformConstant + 186: TypeImage 16(int) 2D array sampled format:Unknown + 187: TypePointer UniformConstant 186 +188(g_tTex2di4a): 187(ptr) Variable UniformConstant + 189: TypeImage 24(int) 2D array sampled format:Unknown + 190: TypePointer UniformConstant 189 +191(g_tTex2du4a): 190(ptr) Variable UniformConstant + 192: TypeImage 6(float) Cube array sampled format:Unknown + 193: TypePointer UniformConstant 192 +194(g_tTexcdf4a): 193(ptr) Variable UniformConstant + 195: TypeImage 16(int) Cube array sampled format:Unknown + 196: TypePointer UniformConstant 195 +197(g_tTexcdi4a): 196(ptr) Variable UniformConstant + 198: TypeImage 24(int) Cube array sampled format:Unknown + 199: TypePointer UniformConstant 198 +200(g_tTexcdu4a): 199(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label +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(Color) 157 + 160: 147(ptr) AccessChain 152(flattenTemp) 23 + 161: 6(float) Load 160 + Store 159(Depth) 161 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 141(psout): 140(ptr) Variable Function + 15: 12 Load 14(g_tTex1df4) + 27: 26(ptr) AccessChain 22 23 25 + 28: 16(int) Load 27 + 30: 26(ptr) AccessChain 22 23 29 + 31: 16(int) Load 30 + 33: 26(ptr) AccessChain 22 32 + 34: 16(int) Load 33 + 35: 7(fvec4) ImageFetch 15 28 Lod Offset 31 34 + 39: 36 Load 38(g_tTex1di4) + 40: 26(ptr) AccessChain 22 23 25 + 41: 16(int) Load 40 + 42: 26(ptr) AccessChain 22 23 29 + 43: 16(int) Load 42 + 44: 26(ptr) AccessChain 22 32 + 45: 16(int) Load 44 + 46: 19(ivec4) ImageFetch 39 41 Lod Offset 43 45 + 50: 47 Load 49(g_tTex1du4) + 51: 26(ptr) AccessChain 22 23 25 + 52: 16(int) Load 51 + 53: 26(ptr) AccessChain 22 23 29 + 54: 16(int) Load 53 + 55: 26(ptr) AccessChain 22 32 + 56: 16(int) Load 55 + 58: 57(ivec4) ImageFetch 50 52 Lod Offset 54 56 + 62: 59 Load 61(g_tTex2df4) + 65: 64(ptr) AccessChain 22 63 + 66: 18(ivec3) Load 65 + 67: 17(ivec2) VectorShuffle 66 66 0 1 + 69: 26(ptr) AccessChain 22 63 68 + 70: 16(int) Load 69 + 73: 72(ptr) AccessChain 22 71 + 74: 17(ivec2) Load 73 + 75: 7(fvec4) ImageFetch 62 67 Lod Offset 70 74 + 79: 76 Load 78(g_tTex2di4) + 80: 64(ptr) AccessChain 22 63 + 81: 18(ivec3) Load 80 + 82: 17(ivec2) VectorShuffle 81 81 0 1 + 83: 26(ptr) AccessChain 22 63 68 + 84: 16(int) Load 83 + 85: 72(ptr) AccessChain 22 71 + 86: 17(ivec2) Load 85 + 87: 19(ivec4) ImageFetch 79 82 Lod Offset 84 86 + 91: 88 Load 90(g_tTex2du4) + 92: 64(ptr) AccessChain 22 63 + 93: 18(ivec3) Load 92 + 94: 17(ivec2) VectorShuffle 93 93 0 1 + 95: 26(ptr) AccessChain 22 63 68 + 96: 16(int) Load 95 + 97: 72(ptr) AccessChain 22 71 + 98: 17(ivec2) Load 97 + 99: 57(ivec4) ImageFetch 91 94 Lod Offset 96 98 + 103: 100 Load 102(g_tTex3df4) + 106: 105(ptr) AccessChain 22 104 + 107: 19(ivec4) Load 106 + 108: 18(ivec3) VectorShuffle 107 107 0 1 2 + 110: 26(ptr) AccessChain 22 104 109 + 111: 16(int) Load 110 + 113: 64(ptr) AccessChain 22 112 + 114: 18(ivec3) Load 113 + 115: 7(fvec4) ImageFetch 103 108 Lod Offset 111 114 + 119: 116 Load 118(g_tTex3di4) + 120: 105(ptr) AccessChain 22 104 + 121: 19(ivec4) Load 120 + 122: 18(ivec3) VectorShuffle 121 121 0 1 2 + 123: 26(ptr) AccessChain 22 104 109 + 124: 16(int) Load 123 + 125: 64(ptr) AccessChain 22 112 + 126: 18(ivec3) Load 125 + 127: 19(ivec4) ImageFetch 119 122 Lod Offset 124 126 + 131: 128 Load 130(g_tTex3du4) + 132: 105(ptr) AccessChain 22 104 + 133: 19(ivec4) Load 132 + 134: 18(ivec3) VectorShuffle 133 133 0 1 2 + 135: 26(ptr) AccessChain 22 104 109 + 136: 16(int) Load 135 + 137: 64(ptr) AccessChain 22 112 + 138: 18(ivec3) Load 137 + 139: 57(ivec4) ImageFetch 131 134 Lod Offset 136 138 + 146: 145(ptr) AccessChain 141(psout) 142 + Store 146 144 + 148: 147(ptr) AccessChain 141(psout) 23 + Store 148 143 + 149:8(PS_OUTPUT) Load 141(psout) + ReturnValue 149 + FunctionEnd 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 new file mode 100644 index 0000000..f20b607 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out @@ -0,0 +1,703 @@ +hlsl.load.offsetarray.dx10.frag +Shader version: 450 +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}) +0:48 Function Parameters: +0:? Sequence +0:52 textureFetchOffset ( temp 4-component vector of float) +0:52 'g_tTex1df4a' ( uniform texture1DArray) +0:52 vector swizzle ( temp 2-component vector of int) +0:52 c3: direct index for structure ( uniform 3-component vector of int) +0:52 '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:52 Constant: +0:52 2 (const uint) +0:52 Sequence +0:52 Constant: +0:52 0 (const int) +0:52 Constant: +0:52 1 (const int) +0:52 direct index ( temp int) +0:52 c3: direct index for structure ( uniform 3-component vector of int) +0:52 '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:52 Constant: +0:52 2 (const uint) +0:52 Constant: +0:52 2 (const int) +0:52 o1: direct index for structure ( uniform int) +0:52 '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:52 Constant: +0:52 4 (const uint) +0:53 textureFetchOffset ( temp 4-component vector of int) +0:53 'g_tTex1di4a' ( uniform itexture1DArray) +0:53 vector swizzle ( temp 2-component vector of int) +0:53 c3: direct index for structure ( uniform 3-component vector of int) +0:53 '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:53 Constant: +0:53 2 (const uint) +0:53 Sequence +0:53 Constant: +0:53 0 (const int) +0:53 Constant: +0:53 1 (const int) +0:53 direct index ( temp int) +0:53 c3: direct index for structure ( uniform 3-component vector of int) +0:53 '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:53 Constant: +0:53 2 (const uint) +0:53 Constant: +0:53 2 (const int) +0:53 o1: direct index for structure ( uniform int) +0:53 '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:53 Constant: +0:53 4 (const uint) +0:54 textureFetchOffset ( temp 4-component vector of uint) +0:54 'g_tTex1du4a' ( uniform utexture1DArray) +0:54 vector swizzle ( temp 2-component vector of int) +0:54 c3: direct index for structure ( uniform 3-component vector of int) +0:54 '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:54 Constant: +0:54 2 (const uint) +0:54 Sequence +0:54 Constant: +0:54 0 (const int) +0:54 Constant: +0:54 1 (const int) +0:54 direct index ( temp int) +0:54 c3: direct index for structure ( uniform 3-component vector of int) +0:54 '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:54 Constant: +0:54 2 (const uint) +0:54 Constant: +0:54 2 (const int) +0:54 o1: direct index for structure ( uniform int) +0:54 '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:54 Constant: +0:54 4 (const uint) +0:57 textureFetchOffset ( temp 4-component vector of float) +0:57 'g_tTex2df4a' ( uniform texture2DArray) +0:57 vector swizzle ( temp 3-component vector of int) +0:57 c4: direct index for structure ( uniform 4-component vector of int) +0:57 '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:57 Constant: +0:57 3 (const uint) +0:57 Sequence +0:57 Constant: +0:57 0 (const int) +0:57 Constant: +0:57 1 (const int) +0:57 Constant: +0:57 2 (const int) +0:57 direct index ( temp int) +0:57 c4: direct index for structure ( uniform 4-component vector of int) +0:57 '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:57 Constant: +0:57 3 (const uint) +0:57 Constant: +0:57 3 (const int) +0:57 o2: direct index for structure ( uniform 2-component vector of int) +0:57 '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:57 Constant: +0:57 5 (const uint) +0:58 textureFetchOffset ( temp 4-component vector of int) +0:58 'g_tTex2di4a' ( uniform itexture2DArray) +0:58 vector swizzle ( temp 3-component vector of int) +0:58 c4: direct index for structure ( uniform 4-component vector of int) +0:58 '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:58 Constant: +0:58 3 (const uint) +0:58 Sequence +0:58 Constant: +0:58 0 (const int) +0:58 Constant: +0:58 1 (const int) +0:58 Constant: +0:58 2 (const int) +0:58 direct index ( temp int) +0:58 c4: direct index for structure ( uniform 4-component vector of int) +0:58 '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:58 Constant: +0:58 3 (const uint) +0:58 Constant: +0:58 3 (const int) +0:58 o2: direct index for structure ( uniform 2-component vector of int) +0:58 '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:58 Constant: +0:58 5 (const uint) +0:59 textureFetchOffset ( temp 4-component vector of uint) +0:59 'g_tTex2du4a' ( uniform utexture2DArray) +0:59 vector swizzle ( temp 3-component vector of int) +0:59 c4: direct index for structure ( uniform 4-component vector of int) +0:59 '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:59 Constant: +0:59 3 (const uint) +0:59 Sequence +0:59 Constant: +0:59 0 (const int) +0:59 Constant: +0:59 1 (const int) +0:59 Constant: +0:59 2 (const int) +0:59 direct index ( temp int) +0:59 c4: direct index for structure ( uniform 4-component vector of int) +0:59 '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:59 Constant: +0:59 3 (const uint) +0:59 Constant: +0:59 3 (const int) +0:59 o2: direct index for structure ( uniform 2-component vector of int) +0:59 '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:59 Constant: +0:59 5 (const uint) +0:65 move second child to first child ( temp 4-component vector of float) +0:65 Color: direct index for structure ( temp 4-component vector of float) +0:65 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:65 Constant: +0:65 0 (const int) +0:65 Constant: +0:65 1.000000 +0:65 1.000000 +0:65 1.000000 +0:65 1.000000 +0:66 move second child to first child ( temp float) +0:66 Depth: direct index for structure ( temp float) +0:66 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:66 Constant: +0:66 1 (const int) +0:66 Constant: +0:66 1.000000 +0:68 Branch: Return with expression +0:68 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:48 Function Definition: main( ( temp void) +0:48 Function Parameters: +0:? Sequence +0:48 Sequence +0:48 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:48 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_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_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:? '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) + + +Linked fragment stage: + + +Shader version: 450 +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}) +0:48 Function Parameters: +0:? Sequence +0:52 textureFetchOffset ( temp 4-component vector of float) +0:52 'g_tTex1df4a' ( uniform texture1DArray) +0:52 vector swizzle ( temp 2-component vector of int) +0:52 c3: direct index for structure ( uniform 3-component vector of int) +0:52 '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:52 Constant: +0:52 2 (const uint) +0:52 Sequence +0:52 Constant: +0:52 0 (const int) +0:52 Constant: +0:52 1 (const int) +0:52 direct index ( temp int) +0:52 c3: direct index for structure ( uniform 3-component vector of int) +0:52 '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:52 Constant: +0:52 2 (const uint) +0:52 Constant: +0:52 2 (const int) +0:52 o1: direct index for structure ( uniform int) +0:52 '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:52 Constant: +0:52 4 (const uint) +0:53 textureFetchOffset ( temp 4-component vector of int) +0:53 'g_tTex1di4a' ( uniform itexture1DArray) +0:53 vector swizzle ( temp 2-component vector of int) +0:53 c3: direct index for structure ( uniform 3-component vector of int) +0:53 '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:53 Constant: +0:53 2 (const uint) +0:53 Sequence +0:53 Constant: +0:53 0 (const int) +0:53 Constant: +0:53 1 (const int) +0:53 direct index ( temp int) +0:53 c3: direct index for structure ( uniform 3-component vector of int) +0:53 '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:53 Constant: +0:53 2 (const uint) +0:53 Constant: +0:53 2 (const int) +0:53 o1: direct index for structure ( uniform int) +0:53 '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:53 Constant: +0:53 4 (const uint) +0:54 textureFetchOffset ( temp 4-component vector of uint) +0:54 'g_tTex1du4a' ( uniform utexture1DArray) +0:54 vector swizzle ( temp 2-component vector of int) +0:54 c3: direct index for structure ( uniform 3-component vector of int) +0:54 '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:54 Constant: +0:54 2 (const uint) +0:54 Sequence +0:54 Constant: +0:54 0 (const int) +0:54 Constant: +0:54 1 (const int) +0:54 direct index ( temp int) +0:54 c3: direct index for structure ( uniform 3-component vector of int) +0:54 '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:54 Constant: +0:54 2 (const uint) +0:54 Constant: +0:54 2 (const int) +0:54 o1: direct index for structure ( uniform int) +0:54 '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:54 Constant: +0:54 4 (const uint) +0:57 textureFetchOffset ( temp 4-component vector of float) +0:57 'g_tTex2df4a' ( uniform texture2DArray) +0:57 vector swizzle ( temp 3-component vector of int) +0:57 c4: direct index for structure ( uniform 4-component vector of int) +0:57 '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:57 Constant: +0:57 3 (const uint) +0:57 Sequence +0:57 Constant: +0:57 0 (const int) +0:57 Constant: +0:57 1 (const int) +0:57 Constant: +0:57 2 (const int) +0:57 direct index ( temp int) +0:57 c4: direct index for structure ( uniform 4-component vector of int) +0:57 '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:57 Constant: +0:57 3 (const uint) +0:57 Constant: +0:57 3 (const int) +0:57 o2: direct index for structure ( uniform 2-component vector of int) +0:57 '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:57 Constant: +0:57 5 (const uint) +0:58 textureFetchOffset ( temp 4-component vector of int) +0:58 'g_tTex2di4a' ( uniform itexture2DArray) +0:58 vector swizzle ( temp 3-component vector of int) +0:58 c4: direct index for structure ( uniform 4-component vector of int) +0:58 '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:58 Constant: +0:58 3 (const uint) +0:58 Sequence +0:58 Constant: +0:58 0 (const int) +0:58 Constant: +0:58 1 (const int) +0:58 Constant: +0:58 2 (const int) +0:58 direct index ( temp int) +0:58 c4: direct index for structure ( uniform 4-component vector of int) +0:58 '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:58 Constant: +0:58 3 (const uint) +0:58 Constant: +0:58 3 (const int) +0:58 o2: direct index for structure ( uniform 2-component vector of int) +0:58 '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:58 Constant: +0:58 5 (const uint) +0:59 textureFetchOffset ( temp 4-component vector of uint) +0:59 'g_tTex2du4a' ( uniform utexture2DArray) +0:59 vector swizzle ( temp 3-component vector of int) +0:59 c4: direct index for structure ( uniform 4-component vector of int) +0:59 '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:59 Constant: +0:59 3 (const uint) +0:59 Sequence +0:59 Constant: +0:59 0 (const int) +0:59 Constant: +0:59 1 (const int) +0:59 Constant: +0:59 2 (const int) +0:59 direct index ( temp int) +0:59 c4: direct index for structure ( uniform 4-component vector of int) +0:59 '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:59 Constant: +0:59 3 (const uint) +0:59 Constant: +0:59 3 (const int) +0:59 o2: direct index for structure ( uniform 2-component vector of int) +0:59 '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:59 Constant: +0:59 5 (const uint) +0:65 move second child to first child ( temp 4-component vector of float) +0:65 Color: direct index for structure ( temp 4-component vector of float) +0:65 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:65 Constant: +0:65 0 (const int) +0:65 Constant: +0:65 1.000000 +0:65 1.000000 +0:65 1.000000 +0:65 1.000000 +0:66 move second child to first child ( temp float) +0:66 Depth: direct index for structure ( temp float) +0:66 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:66 Constant: +0:66 1 (const int) +0:66 Constant: +0:66 1.000000 +0:68 Branch: Return with expression +0:68 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:48 Function Definition: main( ( temp void) +0:48 Function Parameters: +0:? Sequence +0:48 Sequence +0:48 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:48 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_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_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:? '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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 174 + + Capability Shader + Capability ImageGatherExtended + Capability Sampled1D + Capability SampledCubeArray + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 119 123 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + MemberName 8(PS_OUTPUT) 1 "Depth" + Name 10 "@main(" + Name 14 "g_tTex1df4a" + Name 20 "$Global" + MemberName 20($Global) 0 "c1" + MemberName 20($Global) 1 "c2" + MemberName 20($Global) 2 "c3" + MemberName 20($Global) 3 "c4" + MemberName 20($Global) 4 "o1" + MemberName 20($Global) 5 "o2" + MemberName 20($Global) 6 "o3" + MemberName 20($Global) 7 "o4" + Name 22 "" + Name 39 "g_tTex1di4a" + Name 51 "g_tTex1du4a" + Name 64 "g_tTex2df4a" + Name 81 "g_tTex2di4a" + Name 93 "g_tTex2du4a" + Name 104 "psout" + Name 116 "flattenTemp" + Name 119 "Color" + Name 123 "Depth" + Name 128 "g_sSamp" + Name 131 "g_tTex1df4" + Name 134 "g_tTex1di4" + Name 137 "g_tTex1du4" + Name 140 "g_tTex2df4" + Name 143 "g_tTex2di4" + Name 146 "g_tTex2du4" + Name 149 "g_tTex3df4" + Name 152 "g_tTex3di4" + Name 155 "g_tTex3du4" + Name 158 "g_tTexcdf4" + Name 161 "g_tTexcdi4" + Name 164 "g_tTexcdu4" + Name 167 "g_tTexcdf4a" + Name 170 "g_tTexcdi4a" + Name 173 "g_tTexcdu4a" + Decorate 14(g_tTex1df4a) DescriptorSet 0 + MemberDecorate 20($Global) 0 Offset 0 + MemberDecorate 20($Global) 1 Offset 8 + MemberDecorate 20($Global) 2 Offset 16 + MemberDecorate 20($Global) 3 Offset 32 + MemberDecorate 20($Global) 4 Offset 48 + MemberDecorate 20($Global) 5 Offset 56 + MemberDecorate 20($Global) 6 Offset 64 + MemberDecorate 20($Global) 7 Offset 80 + Decorate 20($Global) Block + Decorate 22 DescriptorSet 0 + Decorate 39(g_tTex1di4a) DescriptorSet 0 + Decorate 51(g_tTex1du4a) DescriptorSet 0 + 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 128(g_sSamp) DescriptorSet 0 + Decorate 128(g_sSamp) Binding 0 + Decorate 131(g_tTex1df4) DescriptorSet 0 + Decorate 131(g_tTex1df4) Binding 0 + Decorate 134(g_tTex1di4) DescriptorSet 0 + Decorate 137(g_tTex1du4) DescriptorSet 0 + Decorate 140(g_tTex2df4) DescriptorSet 0 + Decorate 143(g_tTex2di4) DescriptorSet 0 + Decorate 146(g_tTex2du4) DescriptorSet 0 + Decorate 149(g_tTex3df4) DescriptorSet 0 + Decorate 152(g_tTex3di4) DescriptorSet 0 + Decorate 155(g_tTex3du4) DescriptorSet 0 + Decorate 158(g_tTexcdf4) DescriptorSet 0 + Decorate 161(g_tTexcdi4) DescriptorSet 0 + Decorate 164(g_tTexcdu4) DescriptorSet 0 + Decorate 167(g_tTexcdf4a) DescriptorSet 0 + Decorate 170(g_tTexcdi4a) DescriptorSet 0 + Decorate 173(g_tTexcdu4a) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8(PS_OUTPUT): TypeStruct 7(fvec4) 6(float) + 9: TypeFunction 8(PS_OUTPUT) + 12: TypeImage 6(float) 1D array sampled format:Unknown + 13: TypePointer UniformConstant 12 + 14(g_tTex1df4a): 13(ptr) Variable UniformConstant + 16: TypeInt 32 1 + 17: TypeVector 16(int) 2 + 18: TypeVector 16(int) 3 + 19: TypeVector 16(int) 4 + 20($Global): TypeStruct 16(int) 17(ivec2) 18(ivec3) 19(ivec4) 16(int) 17(ivec2) 18(ivec3) 19(ivec4) + 21: TypePointer Uniform 20($Global) + 22: 21(ptr) Variable Uniform + 23: 16(int) Constant 2 + 24: TypePointer Uniform 18(ivec3) + 28: TypeInt 32 0 + 29: 28(int) Constant 2 + 30: TypePointer Uniform 16(int) + 33: 16(int) Constant 4 + 37: TypeImage 16(int) 1D array sampled format:Unknown + 38: TypePointer UniformConstant 37 + 39(g_tTex1di4a): 38(ptr) Variable UniformConstant + 49: TypeImage 28(int) 1D array sampled format:Unknown + 50: TypePointer UniformConstant 49 + 51(g_tTex1du4a): 50(ptr) Variable UniformConstant + 60: TypeVector 28(int) 4 + 62: TypeImage 6(float) 2D array sampled format:Unknown + 63: TypePointer UniformConstant 62 + 64(g_tTex2df4a): 63(ptr) Variable UniformConstant + 66: 16(int) Constant 3 + 67: TypePointer Uniform 19(ivec4) + 71: 28(int) Constant 3 + 74: 16(int) Constant 5 + 75: TypePointer Uniform 17(ivec2) + 79: TypeImage 16(int) 2D array sampled format:Unknown + 80: TypePointer UniformConstant 79 + 81(g_tTex2di4a): 80(ptr) Variable UniformConstant + 91: TypeImage 28(int) 2D array sampled format:Unknown + 92: TypePointer UniformConstant 91 + 93(g_tTex2du4a): 92(ptr) Variable UniformConstant + 103: TypePointer Function 8(PS_OUTPUT) + 105: 16(int) Constant 0 + 106: 6(float) Constant 1065353216 + 107: 7(fvec4) ConstantComposite 106 106 106 106 + 108: TypePointer Function 7(fvec4) + 110: 16(int) Constant 1 + 111: TypePointer Function 6(float) + 118: TypePointer Output 7(fvec4) + 119(Color): 118(ptr) Variable Output + 122: TypePointer Output 6(float) + 123(Depth): 122(ptr) Variable Output + 126: TypeSampler + 127: TypePointer UniformConstant 126 + 128(g_sSamp): 127(ptr) Variable UniformConstant + 129: TypeImage 6(float) 1D sampled format:Unknown + 130: TypePointer UniformConstant 129 + 131(g_tTex1df4): 130(ptr) Variable UniformConstant + 132: TypeImage 16(int) 1D sampled format:Unknown + 133: TypePointer UniformConstant 132 + 134(g_tTex1di4): 133(ptr) Variable UniformConstant + 135: TypeImage 28(int) 1D sampled format:Unknown + 136: TypePointer UniformConstant 135 + 137(g_tTex1du4): 136(ptr) Variable UniformConstant + 138: TypeImage 6(float) 2D sampled format:Unknown + 139: TypePointer UniformConstant 138 + 140(g_tTex2df4): 139(ptr) Variable UniformConstant + 141: TypeImage 16(int) 2D sampled format:Unknown + 142: TypePointer UniformConstant 141 + 143(g_tTex2di4): 142(ptr) Variable UniformConstant + 144: TypeImage 28(int) 2D sampled format:Unknown + 145: TypePointer UniformConstant 144 + 146(g_tTex2du4): 145(ptr) Variable UniformConstant + 147: TypeImage 6(float) 3D sampled format:Unknown + 148: TypePointer UniformConstant 147 + 149(g_tTex3df4): 148(ptr) Variable UniformConstant + 150: TypeImage 16(int) 3D sampled format:Unknown + 151: TypePointer UniformConstant 150 + 152(g_tTex3di4): 151(ptr) Variable UniformConstant + 153: TypeImage 28(int) 3D sampled format:Unknown + 154: TypePointer UniformConstant 153 + 155(g_tTex3du4): 154(ptr) Variable UniformConstant + 156: TypeImage 6(float) Cube sampled format:Unknown + 157: TypePointer UniformConstant 156 + 158(g_tTexcdf4): 157(ptr) Variable UniformConstant + 159: TypeImage 16(int) Cube sampled format:Unknown + 160: TypePointer UniformConstant 159 + 161(g_tTexcdi4): 160(ptr) Variable UniformConstant + 162: TypeImage 28(int) Cube sampled format:Unknown + 163: TypePointer UniformConstant 162 + 164(g_tTexcdu4): 163(ptr) Variable UniformConstant + 165: TypeImage 6(float) Cube array sampled format:Unknown + 166: TypePointer UniformConstant 165 +167(g_tTexcdf4a): 166(ptr) Variable UniformConstant + 168: TypeImage 16(int) Cube array sampled format:Unknown + 169: TypePointer UniformConstant 168 +170(g_tTexcdi4a): 169(ptr) Variable UniformConstant + 171: TypeImage 28(int) Cube array sampled format:Unknown + 172: TypePointer UniformConstant 171 +173(g_tTexcdu4a): 172(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label +116(flattenTemp): 103(ptr) Variable Function + 117:8(PS_OUTPUT) FunctionCall 10(@main() + Store 116(flattenTemp) 117 + 120: 108(ptr) AccessChain 116(flattenTemp) 105 + 121: 7(fvec4) Load 120 + Store 119(Color) 121 + 124: 111(ptr) AccessChain 116(flattenTemp) 110 + 125: 6(float) Load 124 + Store 123(Depth) 125 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 104(psout): 103(ptr) Variable Function + 15: 12 Load 14(g_tTex1df4a) + 25: 24(ptr) AccessChain 22 23 + 26: 18(ivec3) Load 25 + 27: 17(ivec2) VectorShuffle 26 26 0 1 + 31: 30(ptr) AccessChain 22 23 29 + 32: 16(int) Load 31 + 34: 30(ptr) AccessChain 22 33 + 35: 16(int) Load 34 + 36: 7(fvec4) ImageFetch 15 27 Lod Offset 32 35 + 40: 37 Load 39(g_tTex1di4a) + 41: 24(ptr) AccessChain 22 23 + 42: 18(ivec3) Load 41 + 43: 17(ivec2) VectorShuffle 42 42 0 1 + 44: 30(ptr) AccessChain 22 23 29 + 45: 16(int) Load 44 + 46: 30(ptr) AccessChain 22 33 + 47: 16(int) Load 46 + 48: 19(ivec4) ImageFetch 40 43 Lod Offset 45 47 + 52: 49 Load 51(g_tTex1du4a) + 53: 24(ptr) AccessChain 22 23 + 54: 18(ivec3) Load 53 + 55: 17(ivec2) VectorShuffle 54 54 0 1 + 56: 30(ptr) AccessChain 22 23 29 + 57: 16(int) Load 56 + 58: 30(ptr) AccessChain 22 33 + 59: 16(int) Load 58 + 61: 60(ivec4) ImageFetch 52 55 Lod Offset 57 59 + 65: 62 Load 64(g_tTex2df4a) + 68: 67(ptr) AccessChain 22 66 + 69: 19(ivec4) Load 68 + 70: 18(ivec3) VectorShuffle 69 69 0 1 2 + 72: 30(ptr) AccessChain 22 66 71 + 73: 16(int) Load 72 + 76: 75(ptr) AccessChain 22 74 + 77: 17(ivec2) Load 76 + 78: 7(fvec4) ImageFetch 65 70 Lod Offset 73 77 + 82: 79 Load 81(g_tTex2di4a) + 83: 67(ptr) AccessChain 22 66 + 84: 19(ivec4) Load 83 + 85: 18(ivec3) VectorShuffle 84 84 0 1 2 + 86: 30(ptr) AccessChain 22 66 71 + 87: 16(int) Load 86 + 88: 75(ptr) AccessChain 22 74 + 89: 17(ivec2) Load 88 + 90: 19(ivec4) ImageFetch 82 85 Lod Offset 87 89 + 94: 91 Load 93(g_tTex2du4a) + 95: 67(ptr) AccessChain 22 66 + 96: 19(ivec4) Load 95 + 97: 18(ivec3) VectorShuffle 96 96 0 1 2 + 98: 30(ptr) AccessChain 22 66 71 + 99: 16(int) Load 98 + 100: 75(ptr) AccessChain 22 74 + 101: 17(ivec2) Load 100 + 102: 60(ivec4) ImageFetch 94 97 Lod Offset 99 101 + 109: 108(ptr) AccessChain 104(psout) 105 + Store 109 107 + 112: 111(ptr) AccessChain 104(psout) 110 + Store 112 106 + 113:8(PS_OUTPUT) Load 104(psout) + ReturnValue 113 + FunctionEnd 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 new file mode 100644 index 0000000..ea8bdd2 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out @@ -0,0 +1,213 @@ +hlsl.load.rwbuffer.dx10.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:22 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color}) +0:22 Function Parameters: +0:? Sequence +0:25 imageLoad ( temp 4-component vector of float) +0:25 'g_tBuffF' (layout( rgba32f) uniform imageBuffer) +0:25 c1: direct index for structure ( uniform int) +0:25 '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:25 Constant: +0:25 0 (const uint) +0:26 imageLoad ( temp 4-component vector of uint) +0:26 'g_tBuffU' (layout( rgba32ui) uniform uimageBuffer) +0:26 c1: direct index for structure ( uniform int) +0:26 '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:26 Constant: +0:26 0 (const uint) +0:27 imageLoad ( temp 4-component vector of int) +0:27 'g_tBuffI' (layout( rgba32i) uniform iimageBuffer) +0:27 c1: direct index for structure ( uniform int) +0:27 '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:27 Constant: +0:27 0 (const uint) +0:29 move second child to first child ( temp 4-component vector of float) +0:29 Color: direct index for structure ( temp 4-component vector of float) +0:29 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:29 Constant: +0:29 0 (const int) +0:29 Constant: +0:29 1.000000 +0:29 1.000000 +0:29 1.000000 +0:29 1.000000 +0:31 Branch: Return with expression +0:31 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:22 Function Definition: main( ( temp void) +0:22 Function Parameters: +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: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: +0:22 0 (const int) +0:? Linker Objects +0:? 'g_tBuffF' (layout( rgba32f) uniform imageBuffer) +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) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:22 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color}) +0:22 Function Parameters: +0:? Sequence +0:25 imageLoad ( temp 4-component vector of float) +0:25 'g_tBuffF' (layout( rgba32f) uniform imageBuffer) +0:25 c1: direct index for structure ( uniform int) +0:25 '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:25 Constant: +0:25 0 (const uint) +0:26 imageLoad ( temp 4-component vector of uint) +0:26 'g_tBuffU' (layout( rgba32ui) uniform uimageBuffer) +0:26 c1: direct index for structure ( uniform int) +0:26 '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:26 Constant: +0:26 0 (const uint) +0:27 imageLoad ( temp 4-component vector of int) +0:27 'g_tBuffI' (layout( rgba32i) uniform iimageBuffer) +0:27 c1: direct index for structure ( uniform int) +0:27 '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:27 Constant: +0:27 0 (const uint) +0:29 move second child to first child ( temp 4-component vector of float) +0:29 Color: direct index for structure ( temp 4-component vector of float) +0:29 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:29 Constant: +0:29 0 (const int) +0:29 Constant: +0:29 1.000000 +0:29 1.000000 +0:29 1.000000 +0:29 1.000000 +0:31 Branch: Return with expression +0:31 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:22 Function Definition: main( ( temp void) +0:22 Function Parameters: +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: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: +0:22 0 (const int) +0:? Linker Objects +0:? 'g_tBuffF' (layout( rgba32f) uniform imageBuffer) +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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 57 + + Capability Shader + Capability SampledBuffer + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 54 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + Name 10 "@main(" + Name 14 "g_tBuffF" + Name 20 "$Global" + MemberName 20($Global) 0 "c1" + MemberName 20($Global) 1 "c2" + MemberName 20($Global) 2 "c3" + MemberName 20($Global) 3 "c4" + MemberName 20($Global) 4 "o1" + MemberName 20($Global) 5 "o2" + MemberName 20($Global) 6 "o3" + MemberName 20($Global) 7 "o4" + Name 22 "" + Name 31 "g_tBuffU" + Name 39 "g_tBuffI" + Name 45 "psout" + Name 54 "Color" + Decorate 14(g_tBuffF) DescriptorSet 0 + MemberDecorate 20($Global) 0 Offset 0 + MemberDecorate 20($Global) 1 Offset 8 + MemberDecorate 20($Global) 2 Offset 16 + MemberDecorate 20($Global) 3 Offset 32 + MemberDecorate 20($Global) 4 Offset 48 + MemberDecorate 20($Global) 5 Offset 56 + MemberDecorate 20($Global) 6 Offset 64 + MemberDecorate 20($Global) 7 Offset 80 + Decorate 20($Global) Block + Decorate 22 DescriptorSet 0 + Decorate 31(g_tBuffU) DescriptorSet 0 + Decorate 39(g_tBuffI) DescriptorSet 0 + Decorate 54(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: TypeImage 6(float) Buffer nonsampled format:Rgba32f + 13: TypePointer UniformConstant 12 + 14(g_tBuffF): 13(ptr) Variable UniformConstant + 16: TypeInt 32 1 + 17: TypeVector 16(int) 2 + 18: TypeVector 16(int) 3 + 19: TypeVector 16(int) 4 + 20($Global): TypeStruct 16(int) 17(ivec2) 18(ivec3) 19(ivec4) 16(int) 17(ivec2) 18(ivec3) 19(ivec4) + 21: TypePointer Uniform 20($Global) + 22: 21(ptr) Variable Uniform + 23: 16(int) Constant 0 + 24: TypePointer Uniform 16(int) + 28: TypeInt 32 0 + 29: TypeImage 28(int) Buffer nonsampled format:Rgba32ui + 30: TypePointer UniformConstant 29 + 31(g_tBuffU): 30(ptr) Variable UniformConstant + 35: TypeVector 28(int) 4 + 37: TypeImage 16(int) Buffer nonsampled format:Rgba32i + 38: TypePointer UniformConstant 37 + 39(g_tBuffI): 38(ptr) Variable UniformConstant + 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(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 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 45(psout): 44(ptr) Variable Function + 15: 12 Load 14(g_tBuffF) + 25: 24(ptr) AccessChain 22 23 + 26: 16(int) Load 25 + 27: 7(fvec4) ImageRead 15 26 + 32: 29 Load 31(g_tBuffU) + 33: 24(ptr) AccessChain 22 23 + 34: 16(int) Load 33 + 36: 35(ivec4) ImageRead 32 34 + 40: 37 Load 39(g_tBuffI) + 41: 24(ptr) AccessChain 22 23 + 42: 16(int) Load 41 + 43: 19(ivec4) ImageRead 40 42 + 49: 48(ptr) AccessChain 45(psout) 23 + Store 49 47 + 50:8(PS_OUTPUT) Load 45(psout) + ReturnValue 50 + FunctionEnd 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 new file mode 100644 index 0000000..fba29c1 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out @@ -0,0 +1,406 @@ +hlsl.load.rwtexture.array.dx10.frag +Shader version: 450 +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}) +0:40 Function Parameters: +0:? Sequence +0:44 imageLoad ( temp 4-component vector of float) +0:44 'g_tTex1df4a' (layout( rgba32f) uniform image1DArray) +0:44 c2: direct index for structure ( uniform 2-component vector of int) +0:44 '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:44 Constant: +0:44 1 (const uint) +0:45 imageLoad ( temp 4-component vector of int) +0:45 'g_tTex1di4a' (layout( rgba32i) uniform iimage1DArray) +0:45 c2: direct index for structure ( uniform 2-component vector of int) +0:45 '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:45 Constant: +0:45 1 (const uint) +0:46 imageLoad ( temp 4-component vector of uint) +0:46 'g_tTex1du4a' (layout( rgba32ui) uniform uimage1DArray) +0:46 c2: direct index for structure ( uniform 2-component vector of int) +0:46 '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:46 Constant: +0:46 1 (const uint) +0:49 imageLoad ( temp 4-component vector of float) +0:49 'g_tTex2df4a' (layout( rgba32f) uniform image2DArray) +0:49 c3: direct index for structure ( uniform 3-component vector of int) +0:49 '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:49 Constant: +0:49 2 (const uint) +0:50 imageLoad ( temp 4-component vector of int) +0:50 'g_tTex2di4a' (layout( rgba32i) uniform iimage2DArray) +0:50 c3: direct index for structure ( uniform 3-component vector of int) +0:50 '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:50 Constant: +0:50 2 (const uint) +0:51 imageLoad ( temp 4-component vector of uint) +0:51 'g_tTex2du4a' (layout( rgba32ui) uniform uimage2DArray) +0:51 c3: direct index for structure ( uniform 3-component vector of int) +0:51 '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:51 Constant: +0:51 2 (const uint) +0:53 move second child to first child ( temp 4-component vector of float) +0:53 Color: direct index for structure ( temp 4-component vector of float) +0:53 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:53 Constant: +0:53 0 (const int) +0:53 Constant: +0:53 1.000000 +0:53 1.000000 +0:53 1.000000 +0:53 1.000000 +0:54 move second child to first child ( temp float) +0:54 Depth: direct index for structure ( temp float) +0:54 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:54 Constant: +0:54 1 (const int) +0:54 Constant: +0:54 1.000000 +0:56 Branch: Return with expression +0:56 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:40 Function Definition: main( ( temp void) +0:40 Function Parameters: +0:? Sequence +0:40 Sequence +0:40 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:40 1 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:? 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:? 'g_tTex1du4' (layout( rgba32ui) uniform uimage1D) +0:? 'g_tTex2df4' (layout( rgba32f) uniform image2D) +0:? 'g_tTex2di4' (layout( rgba32i) uniform iimage2D) +0:? 'g_tTex2du4' (layout( rgba32ui) uniform uimage2D) +0:? 'g_tTex3df4' (layout( rgba32f) uniform image3D) +0:? 'g_tTex3di4' (layout( rgba32i) uniform iimage3D) +0:? 'g_tTex3du4' (layout( rgba32ui) uniform uimage3D) +0:? 'g_tTex1df4a' (layout( rgba32f) uniform image1DArray) +0:? 'g_tTex1di4a' (layout( rgba32i) uniform iimage1DArray) +0:? 'g_tTex1du4a' (layout( rgba32ui) uniform uimage1DArray) +0:? 'g_tTex2df4a' (layout( rgba32f) uniform image2DArray) +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) + + +Linked fragment stage: + + +Shader version: 450 +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}) +0:40 Function Parameters: +0:? Sequence +0:44 imageLoad ( temp 4-component vector of float) +0:44 'g_tTex1df4a' (layout( rgba32f) uniform image1DArray) +0:44 c2: direct index for structure ( uniform 2-component vector of int) +0:44 '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:44 Constant: +0:44 1 (const uint) +0:45 imageLoad ( temp 4-component vector of int) +0:45 'g_tTex1di4a' (layout( rgba32i) uniform iimage1DArray) +0:45 c2: direct index for structure ( uniform 2-component vector of int) +0:45 '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:45 Constant: +0:45 1 (const uint) +0:46 imageLoad ( temp 4-component vector of uint) +0:46 'g_tTex1du4a' (layout( rgba32ui) uniform uimage1DArray) +0:46 c2: direct index for structure ( uniform 2-component vector of int) +0:46 '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:46 Constant: +0:46 1 (const uint) +0:49 imageLoad ( temp 4-component vector of float) +0:49 'g_tTex2df4a' (layout( rgba32f) uniform image2DArray) +0:49 c3: direct index for structure ( uniform 3-component vector of int) +0:49 '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:49 Constant: +0:49 2 (const uint) +0:50 imageLoad ( temp 4-component vector of int) +0:50 'g_tTex2di4a' (layout( rgba32i) uniform iimage2DArray) +0:50 c3: direct index for structure ( uniform 3-component vector of int) +0:50 '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:50 Constant: +0:50 2 (const uint) +0:51 imageLoad ( temp 4-component vector of uint) +0:51 'g_tTex2du4a' (layout( rgba32ui) uniform uimage2DArray) +0:51 c3: direct index for structure ( uniform 3-component vector of int) +0:51 '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:51 Constant: +0:51 2 (const uint) +0:53 move second child to first child ( temp 4-component vector of float) +0:53 Color: direct index for structure ( temp 4-component vector of float) +0:53 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:53 Constant: +0:53 0 (const int) +0:53 Constant: +0:53 1.000000 +0:53 1.000000 +0:53 1.000000 +0:53 1.000000 +0:54 move second child to first child ( temp float) +0:54 Depth: direct index for structure ( temp float) +0:54 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:54 Constant: +0:54 1 (const int) +0:54 Constant: +0:54 1.000000 +0:56 Branch: Return with expression +0:56 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:40 Function Definition: main( ( temp void) +0:40 Function Parameters: +0:? Sequence +0:40 Sequence +0:40 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:40 1 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:? 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:? 'g_tTex1du4' (layout( rgba32ui) uniform uimage1D) +0:? 'g_tTex2df4' (layout( rgba32f) uniform image2D) +0:? 'g_tTex2di4' (layout( rgba32i) uniform iimage2D) +0:? 'g_tTex2du4' (layout( rgba32ui) uniform uimage2D) +0:? 'g_tTex3df4' (layout( rgba32f) uniform image3D) +0:? 'g_tTex3di4' (layout( rgba32i) uniform iimage3D) +0:? 'g_tTex3du4' (layout( rgba32ui) uniform uimage3D) +0:? 'g_tTex1df4a' (layout( rgba32f) uniform image1DArray) +0:? 'g_tTex1di4a' (layout( rgba32i) uniform iimage1DArray) +0:? 'g_tTex1du4a' (layout( rgba32ui) uniform uimage1DArray) +0:? 'g_tTex2df4a' (layout( rgba32f) uniform image2DArray) +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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 119 + + Capability Shader + Capability Sampled1D + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 82 86 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + MemberName 8(PS_OUTPUT) 1 "Depth" + Name 10 "@main(" + Name 14 "g_tTex1df4a" + Name 20 "$Global" + MemberName 20($Global) 0 "c1" + MemberName 20($Global) 1 "c2" + MemberName 20($Global) 2 "c3" + MemberName 20($Global) 3 "c4" + MemberName 20($Global) 4 "o1" + MemberName 20($Global) 5 "o2" + MemberName 20($Global) 6 "o3" + MemberName 20($Global) 7 "o4" + Name 22 "" + Name 30 "g_tTex1di4a" + Name 38 "g_tTex1du4a" + Name 46 "g_tTex2df4a" + Name 55 "g_tTex2di4a" + Name 62 "g_tTex2du4a" + Name 68 "psout" + Name 79 "flattenTemp" + Name 82 "Color" + Name 86 "Depth" + Name 91 "g_sSamp" + Name 94 "g_tTex1df4" + Name 97 "g_tTex1di4" + Name 100 "g_tTex1du4" + Name 103 "g_tTex2df4" + Name 106 "g_tTex2di4" + Name 109 "g_tTex2du4" + Name 112 "g_tTex3df4" + Name 115 "g_tTex3di4" + Name 118 "g_tTex3du4" + Decorate 14(g_tTex1df4a) DescriptorSet 0 + MemberDecorate 20($Global) 0 Offset 0 + MemberDecorate 20($Global) 1 Offset 8 + MemberDecorate 20($Global) 2 Offset 16 + MemberDecorate 20($Global) 3 Offset 32 + MemberDecorate 20($Global) 4 Offset 48 + MemberDecorate 20($Global) 5 Offset 56 + MemberDecorate 20($Global) 6 Offset 64 + MemberDecorate 20($Global) 7 Offset 80 + Decorate 20($Global) Block + Decorate 22 DescriptorSet 0 + Decorate 30(g_tTex1di4a) DescriptorSet 0 + Decorate 38(g_tTex1du4a) DescriptorSet 0 + 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 91(g_sSamp) DescriptorSet 0 + Decorate 91(g_sSamp) Binding 0 + Decorate 94(g_tTex1df4) DescriptorSet 0 + Decorate 94(g_tTex1df4) Binding 0 + Decorate 97(g_tTex1di4) DescriptorSet 0 + Decorate 100(g_tTex1du4) DescriptorSet 0 + Decorate 103(g_tTex2df4) DescriptorSet 0 + Decorate 106(g_tTex2di4) DescriptorSet 0 + Decorate 109(g_tTex2du4) DescriptorSet 0 + Decorate 112(g_tTex3df4) DescriptorSet 0 + Decorate 115(g_tTex3di4) DescriptorSet 0 + Decorate 118(g_tTex3du4) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8(PS_OUTPUT): TypeStruct 7(fvec4) 6(float) + 9: TypeFunction 8(PS_OUTPUT) + 12: TypeImage 6(float) 1D array nonsampled format:Rgba32f + 13: TypePointer UniformConstant 12 + 14(g_tTex1df4a): 13(ptr) Variable UniformConstant + 16: TypeInt 32 1 + 17: TypeVector 16(int) 2 + 18: TypeVector 16(int) 3 + 19: TypeVector 16(int) 4 + 20($Global): TypeStruct 16(int) 17(ivec2) 18(ivec3) 19(ivec4) 16(int) 17(ivec2) 18(ivec3) 19(ivec4) + 21: TypePointer Uniform 20($Global) + 22: 21(ptr) Variable Uniform + 23: 16(int) Constant 1 + 24: TypePointer Uniform 17(ivec2) + 28: TypeImage 16(int) 1D array nonsampled format:Rgba32i + 29: TypePointer UniformConstant 28 + 30(g_tTex1di4a): 29(ptr) Variable UniformConstant + 35: TypeInt 32 0 + 36: TypeImage 35(int) 1D array nonsampled format:Rgba32ui + 37: TypePointer UniformConstant 36 + 38(g_tTex1du4a): 37(ptr) Variable UniformConstant + 42: TypeVector 35(int) 4 + 44: TypeImage 6(float) 2D array nonsampled format:Rgba32f + 45: TypePointer UniformConstant 44 + 46(g_tTex2df4a): 45(ptr) Variable UniformConstant + 48: 16(int) Constant 2 + 49: TypePointer Uniform 18(ivec3) + 53: TypeImage 16(int) 2D array nonsampled format:Rgba32i + 54: TypePointer UniformConstant 53 + 55(g_tTex2di4a): 54(ptr) Variable UniformConstant + 60: TypeImage 35(int) 2D array nonsampled format:Rgba32ui + 61: TypePointer UniformConstant 60 + 62(g_tTex2du4a): 61(ptr) Variable UniformConstant + 67: TypePointer Function 8(PS_OUTPUT) + 69: 16(int) Constant 0 + 70: 6(float) Constant 1065353216 + 71: 7(fvec4) ConstantComposite 70 70 70 70 + 72: TypePointer Function 7(fvec4) + 74: TypePointer Function 6(float) + 81: TypePointer Output 7(fvec4) + 82(Color): 81(ptr) Variable Output + 85: TypePointer Output 6(float) + 86(Depth): 85(ptr) Variable Output + 89: TypeSampler + 90: TypePointer UniformConstant 89 + 91(g_sSamp): 90(ptr) Variable UniformConstant + 92: TypeImage 6(float) 1D nonsampled format:Rgba32f + 93: TypePointer UniformConstant 92 + 94(g_tTex1df4): 93(ptr) Variable UniformConstant + 95: TypeImage 16(int) 1D nonsampled format:Rgba32i + 96: TypePointer UniformConstant 95 + 97(g_tTex1di4): 96(ptr) Variable UniformConstant + 98: TypeImage 35(int) 1D nonsampled format:Rgba32ui + 99: TypePointer UniformConstant 98 + 100(g_tTex1du4): 99(ptr) Variable UniformConstant + 101: TypeImage 6(float) 2D nonsampled format:Rgba32f + 102: TypePointer UniformConstant 101 + 103(g_tTex2df4): 102(ptr) Variable UniformConstant + 104: TypeImage 16(int) 2D nonsampled format:Rgba32i + 105: TypePointer UniformConstant 104 + 106(g_tTex2di4): 105(ptr) Variable UniformConstant + 107: TypeImage 35(int) 2D nonsampled format:Rgba32ui + 108: TypePointer UniformConstant 107 + 109(g_tTex2du4): 108(ptr) Variable UniformConstant + 110: TypeImage 6(float) 3D nonsampled format:Rgba32f + 111: TypePointer UniformConstant 110 + 112(g_tTex3df4): 111(ptr) Variable UniformConstant + 113: TypeImage 16(int) 3D nonsampled format:Rgba32i + 114: TypePointer UniformConstant 113 + 115(g_tTex3di4): 114(ptr) Variable UniformConstant + 116: TypeImage 35(int) 3D nonsampled format:Rgba32ui + 117: TypePointer UniformConstant 116 + 118(g_tTex3du4): 117(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label + 79(flattenTemp): 67(ptr) Variable Function + 80:8(PS_OUTPUT) FunctionCall 10(@main() + Store 79(flattenTemp) 80 + 83: 72(ptr) AccessChain 79(flattenTemp) 69 + 84: 7(fvec4) Load 83 + Store 82(Color) 84 + 87: 74(ptr) AccessChain 79(flattenTemp) 23 + 88: 6(float) Load 87 + Store 86(Depth) 88 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 68(psout): 67(ptr) Variable Function + 15: 12 Load 14(g_tTex1df4a) + 25: 24(ptr) AccessChain 22 23 + 26: 17(ivec2) Load 25 + 27: 7(fvec4) ImageRead 15 26 + 31: 28 Load 30(g_tTex1di4a) + 32: 24(ptr) AccessChain 22 23 + 33: 17(ivec2) Load 32 + 34: 19(ivec4) ImageRead 31 33 + 39: 36 Load 38(g_tTex1du4a) + 40: 24(ptr) AccessChain 22 23 + 41: 17(ivec2) Load 40 + 43: 42(ivec4) ImageRead 39 41 + 47: 44 Load 46(g_tTex2df4a) + 50: 49(ptr) AccessChain 22 48 + 51: 18(ivec3) Load 50 + 52: 7(fvec4) ImageRead 47 51 + 56: 53 Load 55(g_tTex2di4a) + 57: 49(ptr) AccessChain 22 48 + 58: 18(ivec3) Load 57 + 59: 19(ivec4) ImageRead 56 58 + 63: 60 Load 62(g_tTex2du4a) + 64: 49(ptr) AccessChain 22 48 + 65: 18(ivec3) Load 64 + 66: 42(ivec4) ImageRead 63 65 + 73: 72(ptr) AccessChain 68(psout) 69 + Store 73 71 + 75: 74(ptr) AccessChain 68(psout) 23 + Store 75 70 + 76:8(PS_OUTPUT) Load 68(psout) + ReturnValue 76 + FunctionEnd 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 new file mode 100644 index 0000000..2b05b31 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out @@ -0,0 +1,455 @@ +hlsl.load.rwtexture.dx10.frag +Shader version: 450 +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}) +0:40 Function Parameters: +0:? Sequence +0:44 imageLoad ( temp 4-component vector of float) +0:44 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:44 c1: direct index for structure ( uniform int) +0:44 '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:44 Constant: +0:44 0 (const uint) +0:45 imageLoad ( temp 4-component vector of int) +0:45 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:45 c1: direct index for structure ( uniform int) +0:45 '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:45 Constant: +0:45 0 (const uint) +0:46 imageLoad ( temp 4-component vector of uint) +0:46 'g_tTex1du4' (layout( rgba32ui) uniform uimage1D) +0:46 c1: direct index for structure ( uniform int) +0:46 '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:46 Constant: +0:46 0 (const uint) +0:49 imageLoad ( temp 4-component vector of float) +0:49 'g_tTex2df4' (layout( rgba32f) uniform image2D) +0:49 c2: direct index for structure ( uniform 2-component vector of int) +0:49 '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:49 Constant: +0:49 1 (const uint) +0:50 imageLoad ( temp 4-component vector of int) +0:50 'g_tTex2di4' (layout( rgba32i) uniform iimage2D) +0:50 c2: direct index for structure ( uniform 2-component vector of int) +0:50 '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:50 Constant: +0:50 1 (const uint) +0:51 imageLoad ( temp 4-component vector of uint) +0:51 'g_tTex2du4' (layout( rgba32ui) uniform uimage2D) +0:51 c2: direct index for structure ( uniform 2-component vector of int) +0:51 '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:51 Constant: +0:51 1 (const uint) +0:54 imageLoad ( temp 4-component vector of float) +0:54 'g_tTex3df4' (layout( rgba32f) uniform image3D) +0:54 c3: direct index for structure ( uniform 3-component vector of int) +0:54 '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:54 Constant: +0:54 2 (const uint) +0:55 imageLoad ( temp 4-component vector of int) +0:55 'g_tTex3di4' (layout( rgba32i) uniform iimage3D) +0:55 c3: direct index for structure ( uniform 3-component vector of int) +0:55 '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:55 Constant: +0:55 2 (const uint) +0:56 imageLoad ( temp 4-component vector of uint) +0:56 'g_tTex3du4' (layout( rgba32ui) uniform uimage3D) +0:56 c3: direct index for structure ( uniform 3-component vector of int) +0:56 '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:56 Constant: +0:56 2 (const uint) +0:58 move second child to first child ( temp 4-component vector of float) +0:58 Color: direct index for structure ( temp 4-component vector of float) +0:58 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:58 Constant: +0:58 0 (const int) +0:58 Constant: +0:58 1.000000 +0:58 1.000000 +0:58 1.000000 +0:58 1.000000 +0:59 move second child to first child ( temp float) +0:59 Depth: direct index for structure ( temp float) +0:59 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:59 Constant: +0:59 1 (const int) +0:59 Constant: +0:59 1.000000 +0:61 Branch: Return with expression +0:61 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:40 Function Definition: main( ( temp void) +0:40 Function Parameters: +0:? Sequence +0:40 Sequence +0:40 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:40 1 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:? 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:? 'g_tTex1du4' (layout( rgba32ui) uniform uimage1D) +0:? 'g_tTex2df4' (layout( rgba32f) uniform image2D) +0:? 'g_tTex2di4' (layout( rgba32i) uniform iimage2D) +0:? 'g_tTex2du4' (layout( rgba32ui) uniform uimage2D) +0:? 'g_tTex3df4' (layout( rgba32f) uniform image3D) +0:? 'g_tTex3di4' (layout( rgba32i) uniform iimage3D) +0:? 'g_tTex3du4' (layout( rgba32ui) uniform uimage3D) +0:? 'g_tTex1df4a' (layout( rgba32f) uniform image1DArray) +0:? 'g_tTex1di4a' (layout( rgba32i) uniform iimage1DArray) +0:? 'g_tTex1du4a' (layout( rgba32ui) uniform uimage1DArray) +0:? 'g_tTex2df4a' (layout( rgba32f) uniform image2DArray) +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) + + +Linked fragment stage: + + +Shader version: 450 +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}) +0:40 Function Parameters: +0:? Sequence +0:44 imageLoad ( temp 4-component vector of float) +0:44 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:44 c1: direct index for structure ( uniform int) +0:44 '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:44 Constant: +0:44 0 (const uint) +0:45 imageLoad ( temp 4-component vector of int) +0:45 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:45 c1: direct index for structure ( uniform int) +0:45 '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:45 Constant: +0:45 0 (const uint) +0:46 imageLoad ( temp 4-component vector of uint) +0:46 'g_tTex1du4' (layout( rgba32ui) uniform uimage1D) +0:46 c1: direct index for structure ( uniform int) +0:46 '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:46 Constant: +0:46 0 (const uint) +0:49 imageLoad ( temp 4-component vector of float) +0:49 'g_tTex2df4' (layout( rgba32f) uniform image2D) +0:49 c2: direct index for structure ( uniform 2-component vector of int) +0:49 '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:49 Constant: +0:49 1 (const uint) +0:50 imageLoad ( temp 4-component vector of int) +0:50 'g_tTex2di4' (layout( rgba32i) uniform iimage2D) +0:50 c2: direct index for structure ( uniform 2-component vector of int) +0:50 '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:50 Constant: +0:50 1 (const uint) +0:51 imageLoad ( temp 4-component vector of uint) +0:51 'g_tTex2du4' (layout( rgba32ui) uniform uimage2D) +0:51 c2: direct index for structure ( uniform 2-component vector of int) +0:51 '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:51 Constant: +0:51 1 (const uint) +0:54 imageLoad ( temp 4-component vector of float) +0:54 'g_tTex3df4' (layout( rgba32f) uniform image3D) +0:54 c3: direct index for structure ( uniform 3-component vector of int) +0:54 '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:54 Constant: +0:54 2 (const uint) +0:55 imageLoad ( temp 4-component vector of int) +0:55 'g_tTex3di4' (layout( rgba32i) uniform iimage3D) +0:55 c3: direct index for structure ( uniform 3-component vector of int) +0:55 '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:55 Constant: +0:55 2 (const uint) +0:56 imageLoad ( temp 4-component vector of uint) +0:56 'g_tTex3du4' (layout( rgba32ui) uniform uimage3D) +0:56 c3: direct index for structure ( uniform 3-component vector of int) +0:56 '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:56 Constant: +0:56 2 (const uint) +0:58 move second child to first child ( temp 4-component vector of float) +0:58 Color: direct index for structure ( temp 4-component vector of float) +0:58 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:58 Constant: +0:58 0 (const int) +0:58 Constant: +0:58 1.000000 +0:58 1.000000 +0:58 1.000000 +0:58 1.000000 +0:59 move second child to first child ( temp float) +0:59 Depth: direct index for structure ( temp float) +0:59 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:59 Constant: +0:59 1 (const int) +0:59 Constant: +0:59 1.000000 +0:61 Branch: Return with expression +0:61 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:40 Function Definition: main( ( temp void) +0:40 Function Parameters: +0:? Sequence +0:40 Sequence +0:40 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:40 1 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:? 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:? 'g_tTex1du4' (layout( rgba32ui) uniform uimage1D) +0:? 'g_tTex2df4' (layout( rgba32f) uniform image2D) +0:? 'g_tTex2di4' (layout( rgba32i) uniform iimage2D) +0:? 'g_tTex2du4' (layout( rgba32ui) uniform uimage2D) +0:? 'g_tTex3df4' (layout( rgba32f) uniform image3D) +0:? 'g_tTex3di4' (layout( rgba32i) uniform iimage3D) +0:? 'g_tTex3du4' (layout( rgba32ui) uniform uimage3D) +0:? 'g_tTex1df4a' (layout( rgba32f) uniform image1DArray) +0:? 'g_tTex1di4a' (layout( rgba32i) uniform iimage1DArray) +0:? 'g_tTex1du4a' (layout( rgba32ui) uniform uimage1DArray) +0:? 'g_tTex2df4a' (layout( rgba32f) uniform image2DArray) +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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 132 + + Capability Shader + Capability Sampled1D + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 104 108 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + MemberName 8(PS_OUTPUT) 1 "Depth" + Name 10 "@main(" + Name 14 "g_tTex1df4" + Name 20 "$Global" + MemberName 20($Global) 0 "c1" + MemberName 20($Global) 1 "c2" + MemberName 20($Global) 2 "c3" + MemberName 20($Global) 3 "c4" + MemberName 20($Global) 4 "o1" + MemberName 20($Global) 5 "o2" + MemberName 20($Global) 6 "o3" + MemberName 20($Global) 7 "o4" + Name 22 "" + Name 30 "g_tTex1di4" + Name 38 "g_tTex1du4" + Name 46 "g_tTex2df4" + Name 55 "g_tTex2di4" + Name 62 "g_tTex2du4" + Name 69 "g_tTex3df4" + Name 78 "g_tTex3di4" + Name 85 "g_tTex3du4" + Name 91 "psout" + Name 101 "flattenTemp" + Name 104 "Color" + Name 108 "Depth" + Name 113 "g_sSamp" + Name 116 "g_tTex1df4a" + Name 119 "g_tTex1di4a" + Name 122 "g_tTex1du4a" + Name 125 "g_tTex2df4a" + Name 128 "g_tTex2di4a" + Name 131 "g_tTex2du4a" + Decorate 14(g_tTex1df4) DescriptorSet 0 + Decorate 14(g_tTex1df4) Binding 0 + MemberDecorate 20($Global) 0 Offset 0 + MemberDecorate 20($Global) 1 Offset 8 + MemberDecorate 20($Global) 2 Offset 16 + MemberDecorate 20($Global) 3 Offset 32 + MemberDecorate 20($Global) 4 Offset 48 + MemberDecorate 20($Global) 5 Offset 56 + MemberDecorate 20($Global) 6 Offset 64 + MemberDecorate 20($Global) 7 Offset 80 + Decorate 20($Global) Block + Decorate 22 DescriptorSet 0 + Decorate 30(g_tTex1di4) DescriptorSet 0 + Decorate 38(g_tTex1du4) DescriptorSet 0 + Decorate 46(g_tTex2df4) DescriptorSet 0 + Decorate 55(g_tTex2di4) DescriptorSet 0 + Decorate 62(g_tTex2du4) DescriptorSet 0 + 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 113(g_sSamp) DescriptorSet 0 + Decorate 113(g_sSamp) Binding 0 + Decorate 116(g_tTex1df4a) DescriptorSet 0 + Decorate 119(g_tTex1di4a) DescriptorSet 0 + Decorate 122(g_tTex1du4a) DescriptorSet 0 + Decorate 125(g_tTex2df4a) DescriptorSet 0 + Decorate 128(g_tTex2di4a) DescriptorSet 0 + Decorate 131(g_tTex2du4a) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8(PS_OUTPUT): TypeStruct 7(fvec4) 6(float) + 9: TypeFunction 8(PS_OUTPUT) + 12: TypeImage 6(float) 1D nonsampled format:Rgba32f + 13: TypePointer UniformConstant 12 + 14(g_tTex1df4): 13(ptr) Variable UniformConstant + 16: TypeInt 32 1 + 17: TypeVector 16(int) 2 + 18: TypeVector 16(int) 3 + 19: TypeVector 16(int) 4 + 20($Global): TypeStruct 16(int) 17(ivec2) 18(ivec3) 19(ivec4) 16(int) 17(ivec2) 18(ivec3) 19(ivec4) + 21: TypePointer Uniform 20($Global) + 22: 21(ptr) Variable Uniform + 23: 16(int) Constant 0 + 24: TypePointer Uniform 16(int) + 28: TypeImage 16(int) 1D nonsampled format:Rgba32i + 29: TypePointer UniformConstant 28 + 30(g_tTex1di4): 29(ptr) Variable UniformConstant + 35: TypeInt 32 0 + 36: TypeImage 35(int) 1D nonsampled format:Rgba32ui + 37: TypePointer UniformConstant 36 + 38(g_tTex1du4): 37(ptr) Variable UniformConstant + 42: TypeVector 35(int) 4 + 44: TypeImage 6(float) 2D nonsampled format:Rgba32f + 45: TypePointer UniformConstant 44 + 46(g_tTex2df4): 45(ptr) Variable UniformConstant + 48: 16(int) Constant 1 + 49: TypePointer Uniform 17(ivec2) + 53: TypeImage 16(int) 2D nonsampled format:Rgba32i + 54: TypePointer UniformConstant 53 + 55(g_tTex2di4): 54(ptr) Variable UniformConstant + 60: TypeImage 35(int) 2D nonsampled format:Rgba32ui + 61: TypePointer UniformConstant 60 + 62(g_tTex2du4): 61(ptr) Variable UniformConstant + 67: TypeImage 6(float) 3D nonsampled format:Rgba32f + 68: TypePointer UniformConstant 67 + 69(g_tTex3df4): 68(ptr) Variable UniformConstant + 71: 16(int) Constant 2 + 72: TypePointer Uniform 18(ivec3) + 76: TypeImage 16(int) 3D nonsampled format:Rgba32i + 77: TypePointer UniformConstant 76 + 78(g_tTex3di4): 77(ptr) Variable UniformConstant + 83: TypeImage 35(int) 3D nonsampled format:Rgba32ui + 84: TypePointer UniformConstant 83 + 85(g_tTex3du4): 84(ptr) Variable UniformConstant + 90: TypePointer Function 8(PS_OUTPUT) + 92: 6(float) Constant 1065353216 + 93: 7(fvec4) ConstantComposite 92 92 92 92 + 94: TypePointer Function 7(fvec4) + 96: TypePointer Function 6(float) + 103: TypePointer Output 7(fvec4) + 104(Color): 103(ptr) Variable Output + 107: TypePointer Output 6(float) + 108(Depth): 107(ptr) Variable Output + 111: TypeSampler + 112: TypePointer UniformConstant 111 + 113(g_sSamp): 112(ptr) Variable UniformConstant + 114: TypeImage 6(float) 1D array nonsampled format:Rgba32f + 115: TypePointer UniformConstant 114 +116(g_tTex1df4a): 115(ptr) Variable UniformConstant + 117: TypeImage 16(int) 1D array nonsampled format:Rgba32i + 118: TypePointer UniformConstant 117 +119(g_tTex1di4a): 118(ptr) Variable UniformConstant + 120: TypeImage 35(int) 1D array nonsampled format:Rgba32ui + 121: TypePointer UniformConstant 120 +122(g_tTex1du4a): 121(ptr) Variable UniformConstant + 123: TypeImage 6(float) 2D array nonsampled format:Rgba32f + 124: TypePointer UniformConstant 123 +125(g_tTex2df4a): 124(ptr) Variable UniformConstant + 126: TypeImage 16(int) 2D array nonsampled format:Rgba32i + 127: TypePointer UniformConstant 126 +128(g_tTex2di4a): 127(ptr) Variable UniformConstant + 129: TypeImage 35(int) 2D array nonsampled format:Rgba32ui + 130: TypePointer UniformConstant 129 +131(g_tTex2du4a): 130(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label +101(flattenTemp): 90(ptr) Variable Function + 102:8(PS_OUTPUT) FunctionCall 10(@main() + Store 101(flattenTemp) 102 + 105: 94(ptr) AccessChain 101(flattenTemp) 23 + 106: 7(fvec4) Load 105 + Store 104(Color) 106 + 109: 96(ptr) AccessChain 101(flattenTemp) 48 + 110: 6(float) Load 109 + Store 108(Depth) 110 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 91(psout): 90(ptr) Variable Function + 15: 12 Load 14(g_tTex1df4) + 25: 24(ptr) AccessChain 22 23 + 26: 16(int) Load 25 + 27: 7(fvec4) ImageRead 15 26 + 31: 28 Load 30(g_tTex1di4) + 32: 24(ptr) AccessChain 22 23 + 33: 16(int) Load 32 + 34: 19(ivec4) ImageRead 31 33 + 39: 36 Load 38(g_tTex1du4) + 40: 24(ptr) AccessChain 22 23 + 41: 16(int) Load 40 + 43: 42(ivec4) ImageRead 39 41 + 47: 44 Load 46(g_tTex2df4) + 50: 49(ptr) AccessChain 22 48 + 51: 17(ivec2) Load 50 + 52: 7(fvec4) ImageRead 47 51 + 56: 53 Load 55(g_tTex2di4) + 57: 49(ptr) AccessChain 22 48 + 58: 17(ivec2) Load 57 + 59: 19(ivec4) ImageRead 56 58 + 63: 60 Load 62(g_tTex2du4) + 64: 49(ptr) AccessChain 22 48 + 65: 17(ivec2) Load 64 + 66: 42(ivec4) ImageRead 63 65 + 70: 67 Load 69(g_tTex3df4) + 73: 72(ptr) AccessChain 22 71 + 74: 18(ivec3) Load 73 + 75: 7(fvec4) ImageRead 70 74 + 79: 76 Load 78(g_tTex3di4) + 80: 72(ptr) AccessChain 22 71 + 81: 18(ivec3) Load 80 + 82: 19(ivec4) ImageRead 79 81 + 86: 83 Load 85(g_tTex3du4) + 87: 72(ptr) AccessChain 22 71 + 88: 18(ivec3) Load 87 + 89: 42(ivec4) ImageRead 86 88 + 95: 94(ptr) AccessChain 91(psout) 23 + Store 95 93 + 97: 96(ptr) AccessChain 91(psout) 48 + Store 97 92 + 98:8(PS_OUTPUT) Load 91(psout) + ReturnValue 98 + 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 new file mode 100644 index 0000000..7aec275 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.logical.binary.frag.out @@ -0,0 +1,233 @@ +hlsl.logical.binary.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:12 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color}) +0:12 Function Parameters: +0:? Sequence +0:13 Test condition and select ( temp void) +0:13 Condition +0:13 logical-and ( temp bool) +0:13 Convert int to bool ( temp bool) +0:13 ival: direct index for structure ( uniform int) +0:13 '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:13 Constant: +0:13 0 (const uint) +0:13 Convert int to bool ( temp bool) +0:13 Convert float to int ( temp int) +0:13 fval: direct index for structure ( uniform float) +0:13 '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:13 Constant: +0:13 2 (const uint) +0:13 true case is null +0:14 Test condition and select ( temp void) +0:14 Condition +0:14 logical-or ( temp bool) +0:14 Convert int to bool ( temp bool) +0:14 ival: direct index for structure ( uniform int) +0:14 '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:14 Constant: +0:14 0 (const uint) +0:14 Convert int to bool ( temp bool) +0:14 Convert float to int ( temp int) +0:14 fval: direct index for structure ( uniform float) +0:14 '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:14 Constant: +0:14 2 (const uint) +0:14 true case is null +0:17 move second child to first child ( temp 4-component vector of float) +0:17 Color: direct index for structure ( temp 4-component vector of float) +0:17 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:17 Constant: +0:17 0 (const int) +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 'psout' ( temp structure{ temp 4-component vector of float Color}) +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 4-component vector of float) +0:? '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) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:12 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color}) +0:12 Function Parameters: +0:? Sequence +0:13 Test condition and select ( temp void) +0:13 Condition +0:13 logical-and ( temp bool) +0:13 Convert int to bool ( temp bool) +0:13 ival: direct index for structure ( uniform int) +0:13 '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:13 Constant: +0:13 0 (const uint) +0:13 Convert int to bool ( temp bool) +0:13 Convert float to int ( temp int) +0:13 fval: direct index for structure ( uniform float) +0:13 '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:13 Constant: +0:13 2 (const uint) +0:13 true case is null +0:14 Test condition and select ( temp void) +0:14 Condition +0:14 logical-or ( temp bool) +0:14 Convert int to bool ( temp bool) +0:14 ival: direct index for structure ( uniform int) +0:14 '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:14 Constant: +0:14 0 (const uint) +0:14 Convert int to bool ( temp bool) +0:14 Convert float to int ( temp int) +0:14 fval: direct index for structure ( uniform float) +0:14 '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:14 Constant: +0:14 2 (const uint) +0:14 true case is null +0:17 move second child to first child ( temp 4-component vector of float) +0:17 Color: direct index for structure ( temp 4-component vector of float) +0:17 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:17 Constant: +0:17 0 (const int) +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 'psout' ( temp structure{ temp 4-component vector of float Color}) +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 4-component vector of float) +0:? '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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 62 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 59 + ExecutionMode 4 OriginUpperLeft + 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 + 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) + 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 + 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 + 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 + 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 new file mode 100644 index 0000000..38708ef --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.logical.binary.vec.frag.out @@ -0,0 +1,425 @@ +hlsl.logical.binary.vec.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:10 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color}) +0:10 Function Parameters: +0:? Sequence +0:11 Sequence +0:11 move second child to first child ( temp 4-component vector of bool) +0:11 'r00' ( temp 4-component vector of bool) +0:11 Negate conditional ( temp 4-component vector of bool) +0:11 b4a: direct index for structure ( uniform 4-component vector of bool) +0:11 '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:11 Constant: +0:11 0 (const uint) +0:12 Sequence +0:12 move second child to first child ( temp 4-component vector of bool) +0:12 'r01' ( temp 4-component vector of bool) +0:12 logical-and ( temp 4-component vector of bool) +0:12 b4a: direct index for structure ( uniform 4-component vector of bool) +0:12 '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:12 Constant: +0:12 0 (const uint) +0:12 b4b: direct index for structure ( uniform 4-component vector of bool) +0:12 '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:12 Constant: +0:12 1 (const uint) +0:13 Sequence +0:13 move second child to first child ( temp 4-component vector of bool) +0:13 'r02' ( temp 4-component vector of bool) +0:13 logical-or ( temp 4-component vector of bool) +0:13 b4a: direct index for structure ( uniform 4-component vector of bool) +0:13 '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:13 Constant: +0:13 0 (const uint) +0:13 b4b: direct index for structure ( uniform 4-component vector of bool) +0:13 '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:13 Constant: +0:13 1 (const uint) +0:15 Sequence +0:15 move second child to first child ( temp 4-component vector of bool) +0:15 'r10' ( temp 4-component vector of bool) +0:15 logical-and ( temp 4-component vector of bool) +0:15 Construct bvec4 ( uniform 4-component vector of bool) +0:15 b1a: direct index for structure ( uniform bool) +0:15 '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:15 Constant: +0:15 2 (const uint) +0:15 b4b: direct index for structure ( uniform 4-component vector of bool) +0:15 '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:15 Constant: +0:15 1 (const uint) +0:16 Sequence +0:16 move second child to first child ( temp 4-component vector of bool) +0:16 'r11' ( temp 4-component vector of bool) +0:16 logical-or ( temp 4-component vector of bool) +0:16 Construct bvec4 ( uniform 4-component vector of bool) +0:16 b1a: direct index for structure ( uniform bool) +0:16 '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:16 Constant: +0:16 2 (const uint) +0:16 b4b: direct index for structure ( uniform 4-component vector of bool) +0:16 '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:16 Constant: +0:16 1 (const uint) +0:18 Sequence +0:18 move second child to first child ( temp 4-component vector of bool) +0:18 'r20' ( temp 4-component vector of bool) +0:18 logical-and ( temp 4-component vector of bool) +0:18 b4a: direct index for structure ( uniform 4-component vector of bool) +0:18 '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:18 Constant: +0:18 0 (const uint) +0:18 Construct bvec4 ( uniform 4-component vector of bool) +0:18 b1b: direct index for structure ( uniform bool) +0:18 '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:18 Constant: +0:18 3 (const uint) +0:19 Sequence +0:19 move second child to first child ( temp 4-component vector of bool) +0:19 'r21' ( temp 4-component vector of bool) +0:19 logical-or ( temp 4-component vector of bool) +0:19 b4a: direct index for structure ( uniform 4-component vector of bool) +0:19 '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:19 Constant: +0:19 0 (const uint) +0:19 Construct bvec4 ( uniform 4-component vector of bool) +0:19 b1b: direct index for structure ( uniform bool) +0:19 '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:19 Constant: +0:19 3 (const uint) +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}) +0:22 Constant: +0:22 0 (const int) +0:22 Convert bool to float ( temp 4-component vector of float) +0:22 logical-or ( temp 4-component vector of bool) +0:22 logical-or ( temp 4-component vector of bool) +0:22 logical-or ( temp 4-component vector of bool) +0:22 logical-or ( temp 4-component vector of bool) +0:22 logical-or ( temp 4-component vector of bool) +0:22 logical-or ( temp 4-component vector of bool) +0:22 'r00' ( temp 4-component vector of bool) +0:22 'r01' ( temp 4-component vector of bool) +0:22 'r02' ( temp 4-component vector of bool) +0:22 'r10' ( temp 4-component vector of bool) +0:22 'r11' ( temp 4-component vector of bool) +0:22 'r20' ( temp 4-component vector of bool) +0:22 'r21' ( temp 4-component vector of bool) +0:23 Branch: Return with expression +0:23 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:10 Function Definition: main( ( temp void) +0:10 Function Parameters: +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: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) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:10 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color}) +0:10 Function Parameters: +0:? Sequence +0:11 Sequence +0:11 move second child to first child ( temp 4-component vector of bool) +0:11 'r00' ( temp 4-component vector of bool) +0:11 Negate conditional ( temp 4-component vector of bool) +0:11 b4a: direct index for structure ( uniform 4-component vector of bool) +0:11 '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:11 Constant: +0:11 0 (const uint) +0:12 Sequence +0:12 move second child to first child ( temp 4-component vector of bool) +0:12 'r01' ( temp 4-component vector of bool) +0:12 logical-and ( temp 4-component vector of bool) +0:12 b4a: direct index for structure ( uniform 4-component vector of bool) +0:12 '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:12 Constant: +0:12 0 (const uint) +0:12 b4b: direct index for structure ( uniform 4-component vector of bool) +0:12 '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:12 Constant: +0:12 1 (const uint) +0:13 Sequence +0:13 move second child to first child ( temp 4-component vector of bool) +0:13 'r02' ( temp 4-component vector of bool) +0:13 logical-or ( temp 4-component vector of bool) +0:13 b4a: direct index for structure ( uniform 4-component vector of bool) +0:13 '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:13 Constant: +0:13 0 (const uint) +0:13 b4b: direct index for structure ( uniform 4-component vector of bool) +0:13 '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:13 Constant: +0:13 1 (const uint) +0:15 Sequence +0:15 move second child to first child ( temp 4-component vector of bool) +0:15 'r10' ( temp 4-component vector of bool) +0:15 logical-and ( temp 4-component vector of bool) +0:15 Construct bvec4 ( uniform 4-component vector of bool) +0:15 b1a: direct index for structure ( uniform bool) +0:15 '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:15 Constant: +0:15 2 (const uint) +0:15 b4b: direct index for structure ( uniform 4-component vector of bool) +0:15 '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:15 Constant: +0:15 1 (const uint) +0:16 Sequence +0:16 move second child to first child ( temp 4-component vector of bool) +0:16 'r11' ( temp 4-component vector of bool) +0:16 logical-or ( temp 4-component vector of bool) +0:16 Construct bvec4 ( uniform 4-component vector of bool) +0:16 b1a: direct index for structure ( uniform bool) +0:16 '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:16 Constant: +0:16 2 (const uint) +0:16 b4b: direct index for structure ( uniform 4-component vector of bool) +0:16 '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:16 Constant: +0:16 1 (const uint) +0:18 Sequence +0:18 move second child to first child ( temp 4-component vector of bool) +0:18 'r20' ( temp 4-component vector of bool) +0:18 logical-and ( temp 4-component vector of bool) +0:18 b4a: direct index for structure ( uniform 4-component vector of bool) +0:18 '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:18 Constant: +0:18 0 (const uint) +0:18 Construct bvec4 ( uniform 4-component vector of bool) +0:18 b1b: direct index for structure ( uniform bool) +0:18 '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:18 Constant: +0:18 3 (const uint) +0:19 Sequence +0:19 move second child to first child ( temp 4-component vector of bool) +0:19 'r21' ( temp 4-component vector of bool) +0:19 logical-or ( temp 4-component vector of bool) +0:19 b4a: direct index for structure ( uniform 4-component vector of bool) +0:19 '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:19 Constant: +0:19 0 (const uint) +0:19 Construct bvec4 ( uniform 4-component vector of bool) +0:19 b1b: direct index for structure ( uniform bool) +0:19 '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:19 Constant: +0:19 3 (const uint) +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}) +0:22 Constant: +0:22 0 (const int) +0:22 Convert bool to float ( temp 4-component vector of float) +0:22 logical-or ( temp 4-component vector of bool) +0:22 logical-or ( temp 4-component vector of bool) +0:22 logical-or ( temp 4-component vector of bool) +0:22 logical-or ( temp 4-component vector of bool) +0:22 logical-or ( temp 4-component vector of bool) +0:22 logical-or ( temp 4-component vector of bool) +0:22 'r00' ( temp 4-component vector of bool) +0:22 'r01' ( temp 4-component vector of bool) +0:22 'r02' ( temp 4-component vector of bool) +0:22 'r10' ( temp 4-component vector of bool) +0:22 'r11' ( temp 4-component vector of bool) +0:22 'r20' ( temp 4-component vector of bool) +0:22 'r21' ( temp 4-component vector of bool) +0:23 Branch: Return with expression +0:23 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:10 Function Definition: main( ( temp void) +0:10 Function Parameters: +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: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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 120 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 117 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + Name 10 "@main(" + Name 15 "r00" + Name 18 "$Global" + MemberName 18($Global) 0 "b4a" + MemberName 18($Global) 1 "b4b" + MemberName 18($Global) 2 "b1a" + MemberName 18($Global) 3 "b1b" + Name 20 "" + Name 30 "r01" + Name 39 "r02" + Name 47 "r10" + Name 58 "r11" + Name 67 "r20" + Name 79 "r21" + Name 92 "psout" + Name 117 "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 + 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: TypeVector 12(bool) 4 + 14: TypePointer Function 13(bvec4) + 16: TypeInt 32 0 + 17: TypeVector 16(int) 4 + 18($Global): TypeStruct 17(ivec4) 17(ivec4) 16(int) 16(int) + 19: TypePointer Uniform 18($Global) + 20: 19(ptr) Variable Uniform + 21: TypeInt 32 1 + 22: 21(int) Constant 0 + 23: TypePointer Uniform 17(ivec4) + 26: 16(int) Constant 0 + 27: 17(ivec4) ConstantComposite 26 26 26 26 + 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 + 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 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 15(r00): 14(ptr) Variable Function + 30(r01): 14(ptr) Variable Function + 39(r02): 14(ptr) Variable Function + 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 + 24: 23(ptr) AccessChain 20 22 + 25: 17(ivec4) Load 24 + 28: 13(bvec4) INotEqual 25 27 + 29: 13(bvec4) LogicalNot 28 + Store 15(r00) 29 + 31: 23(ptr) AccessChain 20 22 + 32: 17(ivec4) Load 31 + 33: 13(bvec4) INotEqual 32 27 + 35: 23(ptr) AccessChain 20 34 + 36: 17(ivec4) Load 35 + 37: 13(bvec4) INotEqual 36 27 + 38: 13(bvec4) LogicalAnd 33 37 + Store 30(r01) 38 + 40: 23(ptr) AccessChain 20 22 + 41: 17(ivec4) Load 40 + 42: 13(bvec4) INotEqual 41 27 + 43: 23(ptr) AccessChain 20 34 + 44: 17(ivec4) Load 43 + 45: 13(bvec4) INotEqual 44 27 + 46: 13(bvec4) LogicalOr 42 45 + Store 39(r02) 46 + 50: 49(ptr) AccessChain 20 48 + 51: 16(int) Load 50 + 52: 12(bool) INotEqual 51 26 + 53: 13(bvec4) CompositeConstruct 52 52 52 52 + 54: 23(ptr) AccessChain 20 34 + 55: 17(ivec4) Load 54 + 56: 13(bvec4) INotEqual 55 27 + 57: 13(bvec4) LogicalAnd 53 56 + Store 47(r10) 57 + 59: 49(ptr) AccessChain 20 48 + 60: 16(int) Load 59 + 61: 12(bool) INotEqual 60 26 + 62: 13(bvec4) CompositeConstruct 61 61 61 61 + 63: 23(ptr) AccessChain 20 34 + 64: 17(ivec4) Load 63 + 65: 13(bvec4) INotEqual 64 27 + 66: 13(bvec4) LogicalOr 62 65 + Store 58(r11) 66 + 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 + 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 new file mode 100644 index 0000000..4148794 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.logical.unary.frag.out @@ -0,0 +1,305 @@ +hlsl.logical.unary.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:12 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color}) +0:12 Function Parameters: +0:? Sequence +0:13 Negate conditional ( temp bool) +0:13 Convert int to bool ( temp bool) +0:13 ival: direct index for structure ( uniform int) +0:13 '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:13 Constant: +0:13 0 (const uint) +0:14 Negate conditional ( temp 4-component vector of bool) +0:14 Convert int to bool ( temp 4-component vector of bool) +0:14 ival4: direct index for structure ( uniform 4-component vector of int) +0:14 '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:14 Constant: +0:14 1 (const uint) +0:16 Negate conditional ( temp bool) +0:16 Convert float to bool ( temp bool) +0:16 fval: direct index for structure ( uniform float) +0:16 '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:16 Constant: +0:16 2 (const uint) +0:17 Negate conditional ( temp 4-component vector of bool) +0:17 Convert float to bool ( temp 4-component vector of bool) +0:17 fval4: direct index for structure ( uniform 4-component vector of float) +0:17 '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:17 Constant: +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 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 true case is null +0:21 Test condition and select ( temp void) +0:21 Condition +0:21 Negate conditional ( temp bool) +0:21 Convert int to bool ( temp bool) +0:21 ival: direct index for structure ( uniform int) +0:21 '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:21 Constant: +0:21 0 (const uint) +0:21 true case is null +0:22 Test condition and select ( temp void) +0:22 Condition +0:22 Negate conditional ( temp bool) +0:22 Convert float to bool ( temp bool) +0:22 fval: direct index for structure ( uniform float) +0:22 '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:22 Constant: +0:22 2 (const uint) +0:22 true case is null +0:25 move second child to first child ( temp 4-component vector of float) +0:25 Color: direct index for structure ( temp 4-component vector of float) +0:25 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:25 Constant: +0:25 0 (const int) +0:25 Constant: +0:25 1.000000 +0:25 1.000000 +0:25 1.000000 +0:25 1.000000 +0:26 Branch: Return with expression +0:26 'psout' ( temp structure{ temp 4-component vector of float Color}) +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 4-component vector of float) +0:? '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) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:12 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color}) +0:12 Function Parameters: +0:? Sequence +0:13 Negate conditional ( temp bool) +0:13 Convert int to bool ( temp bool) +0:13 ival: direct index for structure ( uniform int) +0:13 '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:13 Constant: +0:13 0 (const uint) +0:14 Negate conditional ( temp 4-component vector of bool) +0:14 Convert int to bool ( temp 4-component vector of bool) +0:14 ival4: direct index for structure ( uniform 4-component vector of int) +0:14 '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:14 Constant: +0:14 1 (const uint) +0:16 Negate conditional ( temp bool) +0:16 Convert float to bool ( temp bool) +0:16 fval: direct index for structure ( uniform float) +0:16 '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:16 Constant: +0:16 2 (const uint) +0:17 Negate conditional ( temp 4-component vector of bool) +0:17 Convert float to bool ( temp 4-component vector of bool) +0:17 fval4: direct index for structure ( uniform 4-component vector of float) +0:17 '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:17 Constant: +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 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 true case is null +0:21 Test condition and select ( temp void) +0:21 Condition +0:21 Negate conditional ( temp bool) +0:21 Convert int to bool ( temp bool) +0:21 ival: direct index for structure ( uniform int) +0:21 '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:21 Constant: +0:21 0 (const uint) +0:21 true case is null +0:22 Test condition and select ( temp void) +0:22 Condition +0:22 Negate conditional ( temp bool) +0:22 Convert float to bool ( temp bool) +0:22 fval: direct index for structure ( uniform float) +0:22 '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:22 Constant: +0:22 2 (const uint) +0:22 true case is null +0:25 move second child to first child ( temp 4-component vector of float) +0:25 Color: direct index for structure ( temp 4-component vector of float) +0:25 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:25 Constant: +0:25 0 (const int) +0:25 Constant: +0:25 1.000000 +0:25 1.000000 +0:25 1.000000 +0:25 1.000000 +0:26 Branch: Return with expression +0:26 'psout' ( temp structure{ temp 4-component vector of float Color}) +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 4-component vector of float) +0:? '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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 82 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 79 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + Name 10 "@main(" + 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 70 "psout" + Name 79 "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 + 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: 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 + 26: 12(int) Constant 1 + 27: TypePointer Uniform 13(ivec4) + 30: TypeVector 21(bool) 4 + 31: TypeVector 22(int) 4 + 32: 31(ivec4) ConstantComposite 23 23 23 23 + 35: 12(int) Constant 2 + 36: TypePointer Uniform 6(float) + 39: 6(float) Constant 0 + 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 + 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 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 70(psout): 69(ptr) Variable Function + 19: 18(ptr) AccessChain 16 17 + 20: 12(int) Load 19 + 24: 21(bool) INotEqual 20 23 + 25: 21(bool) LogicalNot 24 + 28: 27(ptr) AccessChain 16 26 + 29: 13(ivec4) Load 28 + 33: 30(bvec4) INotEqual 29 32 + 34: 30(bvec4) LogicalNot 33 + 37: 36(ptr) AccessChain 16 35 + 38: 6(float) Load 37 + 40: 21(bool) FOrdNotEqual 38 39 + 41: 21(bool) LogicalNot 40 + 44: 43(ptr) AccessChain 16 42 + 45: 7(fvec4) Load 44 + 47: 30(bvec4) FOrdNotEqual 45 46 + 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 + 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 new file mode 100644 index 0000000..cd0dbbf --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matNx1.frag.out @@ -0,0 +1,274 @@ +hlsl.matNx1.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:3 Function Definition: TestMatNx1( ( temp void) +0:3 Function Parameters: +0:? Sequence +0:13 Sequence +0:13 move second child to first child ( temp 1X1 matrix of float) +0:13 'r00' ( temp 1X1 matrix of float) +0:13 transpose ( temp 1X1 matrix of float) +0:13 'f1x1' ( temp 1X1 matrix of float) +0:14 Sequence +0:14 move second child to first child ( temp 1X2 matrix of float) +0:14 'r01' ( temp 1X2 matrix of float) +0:14 transpose ( temp 1X2 matrix of float) +0:14 'f2x1' ( temp 2X1 matrix of float) +0:15 Sequence +0:15 move second child to first child ( temp 1X3 matrix of float) +0:15 'r02' ( temp 1X3 matrix of float) +0:15 transpose ( temp 1X3 matrix of float) +0:15 'f3x1' ( temp 3X1 matrix of float) +0:16 Sequence +0:16 move second child to first child ( temp 1X4 matrix of float) +0:16 'r03' ( temp 1X4 matrix of float) +0:16 transpose ( temp 1X4 matrix of float) +0:16 'f4x1' ( temp 4X1 matrix of float) +0:18 Sequence +0:18 move second child to first child ( temp 1X1 matrix of float) +0:18 'r10' ( temp 1X1 matrix of float) +0:18 transpose ( temp 1X1 matrix of float) +0:18 'f1x1' ( temp 1X1 matrix of float) +0:19 Sequence +0:19 move second child to first child ( temp 2X1 matrix of float) +0:19 'r11' ( temp 2X1 matrix of float) +0:19 transpose ( temp 2X1 matrix of float) +0:19 'f1x2' ( temp 1X2 matrix of float) +0:20 Sequence +0:20 move second child to first child ( temp 3X1 matrix of float) +0:20 'r12' ( temp 3X1 matrix of float) +0:20 transpose ( temp 3X1 matrix of float) +0:20 'f1x3' ( temp 1X3 matrix of float) +0:21 Sequence +0:21 move second child to first child ( temp 4X1 matrix of float) +0:21 'r13' ( temp 4X1 matrix of float) +0:21 transpose ( temp 4X1 matrix of float) +0:21 'f1x4' ( temp 1X4 matrix of float) +0:27 Function Definition: @main( ( temp structure{ temp 4-component vector of float color}) +0:27 Function Parameters: +0:? Sequence +0:29 move second child to first child ( temp 4-component vector of float) +0:29 color: direct index for structure ( temp 4-component vector of float) +0:29 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:29 Constant: +0:29 0 (const int) +0:29 Constant: +0:29 1.000000 +0:29 1.000000 +0:29 1.000000 +0:29 1.000000 +0:30 Branch: Return with expression +0:30 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:27 Function Definition: main( ( temp void) +0:27 Function Parameters: +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: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) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:3 Function Definition: TestMatNx1( ( temp void) +0:3 Function Parameters: +0:? Sequence +0:13 Sequence +0:13 move second child to first child ( temp 1X1 matrix of float) +0:13 'r00' ( temp 1X1 matrix of float) +0:13 transpose ( temp 1X1 matrix of float) +0:13 'f1x1' ( temp 1X1 matrix of float) +0:14 Sequence +0:14 move second child to first child ( temp 1X2 matrix of float) +0:14 'r01' ( temp 1X2 matrix of float) +0:14 transpose ( temp 1X2 matrix of float) +0:14 'f2x1' ( temp 2X1 matrix of float) +0:15 Sequence +0:15 move second child to first child ( temp 1X3 matrix of float) +0:15 'r02' ( temp 1X3 matrix of float) +0:15 transpose ( temp 1X3 matrix of float) +0:15 'f3x1' ( temp 3X1 matrix of float) +0:16 Sequence +0:16 move second child to first child ( temp 1X4 matrix of float) +0:16 'r03' ( temp 1X4 matrix of float) +0:16 transpose ( temp 1X4 matrix of float) +0:16 'f4x1' ( temp 4X1 matrix of float) +0:18 Sequence +0:18 move second child to first child ( temp 1X1 matrix of float) +0:18 'r10' ( temp 1X1 matrix of float) +0:18 transpose ( temp 1X1 matrix of float) +0:18 'f1x1' ( temp 1X1 matrix of float) +0:19 Sequence +0:19 move second child to first child ( temp 2X1 matrix of float) +0:19 'r11' ( temp 2X1 matrix of float) +0:19 transpose ( temp 2X1 matrix of float) +0:19 'f1x2' ( temp 1X2 matrix of float) +0:20 Sequence +0:20 move second child to first child ( temp 3X1 matrix of float) +0:20 'r12' ( temp 3X1 matrix of float) +0:20 transpose ( temp 3X1 matrix of float) +0:20 'f1x3' ( temp 1X3 matrix of float) +0:21 Sequence +0:21 move second child to first child ( temp 4X1 matrix of float) +0:21 'r13' ( temp 4X1 matrix of float) +0:21 transpose ( temp 4X1 matrix of float) +0:21 'f1x4' ( temp 1X4 matrix of float) +0:27 Function Definition: @main( ( temp structure{ temp 4-component vector of float color}) +0:27 Function Parameters: +0:? Sequence +0:29 move second child to first child ( temp 4-component vector of float) +0:29 color: direct index for structure ( temp 4-component vector of float) +0:29 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:29 Constant: +0:29 0 (const int) +0:29 Constant: +0:29 1.000000 +0:29 1.000000 +0:29 1.000000 +0:29 1.000000 +0:30 Branch: Return with expression +0:30 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:27 Function Definition: main( ( temp void) +0:27 Function Parameters: +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: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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 77 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 74 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 6 "TestMatNx1(" + Name 10 "PS_OUTPUT" + MemberName 10(PS_OUTPUT) 0 "color" + Name 12 "@main(" + Name 17 "r00" + Name 18 "f1x1" + Name 24 "r01" + Name 27 "f2x1" + Name 33 "r02" + Name 36 "f3x1" + Name 41 "r03" + Name 44 "f4x1" + Name 47 "r10" + Name 50 "r11" + Name 51 "f1x2" + Name 54 "r12" + Name 55 "f1x3" + Name 58 "r13" + Name 59 "f1x4" + Name 63 "ps_output" + Name 74 "color" + Decorate 74(color) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 8: TypeFloat 32 + 9: TypeVector 8(float) 4 + 10(PS_OUTPUT): TypeStruct 9(fvec4) + 11: TypeFunction 10(PS_OUTPUT) + 14: TypeVector 8(float) 1 + 15: TypeMatrix 14(fvec) 1 + 16: TypePointer Function 15 + 21: TypeVector 8(float) 2 + 22: TypeMatrix 21(fvec2) 1 + 23: TypePointer Function 22 + 25: TypeMatrix 14(fvec) 2 + 26: TypePointer Function 25 + 30: TypeVector 8(float) 3 + 31: TypeMatrix 30(fvec3) 1 + 32: TypePointer Function 31 + 34: TypeMatrix 14(fvec) 3 + 35: TypePointer Function 34 + 39: TypeMatrix 9(fvec4) 1 + 40: TypePointer Function 39 + 42: TypeMatrix 14(fvec) 4 + 43: TypePointer Function 42 + 62: TypePointer Function 10(PS_OUTPUT) + 64: TypeInt 32 1 + 65: 64(int) Constant 0 + 66: 8(float) Constant 1065353216 + 67: 9(fvec4) ConstantComposite 66 66 66 66 + 68: TypePointer Function 9(fvec4) + 73: TypePointer Output 9(fvec4) + 74(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 + Return + FunctionEnd + 6(TestMatNx1(): 2 Function None 3 + 7: Label + 17(r00): 16(ptr) Variable Function + 18(f1x1): 16(ptr) Variable Function + 24(r01): 23(ptr) Variable Function + 27(f2x1): 26(ptr) Variable Function + 33(r02): 32(ptr) Variable Function + 36(f3x1): 35(ptr) Variable Function + 41(r03): 40(ptr) Variable Function + 44(f4x1): 43(ptr) Variable Function + 47(r10): 16(ptr) Variable Function + 50(r11): 26(ptr) Variable Function + 51(f1x2): 23(ptr) Variable Function + 54(r12): 35(ptr) Variable Function + 55(f1x3): 32(ptr) Variable Function + 58(r13): 43(ptr) Variable Function + 59(f1x4): 40(ptr) Variable Function + 19: 15 Load 18(f1x1) + 20: 15 Transpose 19 + Store 17(r00) 20 + 28: 25 Load 27(f2x1) + 29: 22 Transpose 28 + Store 24(r01) 29 + 37: 34 Load 36(f3x1) + 38: 31 Transpose 37 + Store 33(r02) 38 + 45: 42 Load 44(f4x1) + 46: 39 Transpose 45 + Store 41(r03) 46 + 48: 15 Load 18(f1x1) + 49: 15 Transpose 48 + Store 47(r10) 49 + 52: 22 Load 51(f1x2) + 53: 25 Transpose 52 + Store 50(r11) 53 + 56: 31 Load 55(f1x3) + 57: 34 Transpose 56 + Store 54(r12) 57 + 60: 39 Load 59(f1x4) + 61: 42 Transpose 60 + Store 58(r13) 61 + Return + FunctionEnd + 12(@main():10(PS_OUTPUT) Function None 11 + 13: Label + 63(ps_output): 62(ptr) Variable Function + 69: 68(ptr) AccessChain 63(ps_output) 65 + Store 69 67 + 70:10(PS_OUTPUT) Load 63(ps_output) + ReturnValue 70 + FunctionEnd 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 new file mode 100644 index 0000000..b1c5762 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matType.bool.frag.out @@ -0,0 +1,432 @@ +hlsl.matType.bool.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:3 Function Definition: TestBoolMatTypes( ( temp void) +0:3 Function Parameters: +0:? Sequence +0:25 Sequence +0:25 move second child to first child ( temp 1X1 matrix of bool) +0:25 'r00' ( temp 1X1 matrix of bool) +0:25 transpose ( temp 1X1 matrix of bool) +0:25 'b1x1' ( temp 1X1 matrix of bool) +0:26 Sequence +0:26 move second child to first child ( temp 1X2 matrix of bool) +0:26 'r01' ( temp 1X2 matrix of bool) +0:26 transpose ( temp 1X2 matrix of bool) +0:26 'b2x1' ( temp 2X1 matrix of bool) +0:27 Sequence +0:27 move second child to first child ( temp 1X3 matrix of bool) +0:27 'r02' ( temp 1X3 matrix of bool) +0:27 transpose ( temp 1X3 matrix of bool) +0:27 'b3x1' ( temp 3X1 matrix of bool) +0:28 Sequence +0:28 move second child to first child ( temp 1X4 matrix of bool) +0:28 'r03' ( temp 1X4 matrix of bool) +0:28 transpose ( temp 1X4 matrix of bool) +0:28 'b4x1' ( temp 4X1 matrix of bool) +0:30 Sequence +0:30 move second child to first child ( temp 2X1 matrix of bool) +0:30 'r10' ( temp 2X1 matrix of bool) +0:30 transpose ( temp 2X1 matrix of bool) +0:30 'b1x2' ( temp 1X2 matrix of bool) +0:31 Sequence +0:31 move second child to first child ( temp 2X2 matrix of bool) +0:31 'r11' ( temp 2X2 matrix of bool) +0:31 transpose ( temp 2X2 matrix of bool) +0:31 'b2x2' ( temp 2X2 matrix of bool) +0:32 Sequence +0:32 move second child to first child ( temp 2X3 matrix of bool) +0:32 'r12' ( temp 2X3 matrix of bool) +0:32 transpose ( temp 2X3 matrix of bool) +0:32 'b3x2' ( temp 3X2 matrix of bool) +0:33 Sequence +0:33 move second child to first child ( temp 2X4 matrix of bool) +0:33 'r13' ( temp 2X4 matrix of bool) +0:33 transpose ( temp 2X4 matrix of bool) +0:33 'b4x2' ( temp 4X2 matrix of bool) +0:35 Sequence +0:35 move second child to first child ( temp 3X1 matrix of bool) +0:35 'r20' ( temp 3X1 matrix of bool) +0:35 transpose ( temp 3X1 matrix of bool) +0:35 'b1x3' ( temp 1X3 matrix of bool) +0:36 Sequence +0:36 move second child to first child ( temp 3X2 matrix of bool) +0:36 'r21' ( temp 3X2 matrix of bool) +0:36 transpose ( temp 3X2 matrix of bool) +0:36 'b2x3' ( temp 2X3 matrix of bool) +0:37 Sequence +0:37 move second child to first child ( temp 3X3 matrix of bool) +0:37 'r22' ( temp 3X3 matrix of bool) +0:37 transpose ( temp 3X3 matrix of bool) +0:37 'b3x3' ( temp 3X3 matrix of bool) +0:38 Sequence +0:38 move second child to first child ( temp 3X4 matrix of bool) +0:38 'r23' ( temp 3X4 matrix of bool) +0:38 transpose ( temp 3X4 matrix of bool) +0:38 'b4x3' ( temp 4X3 matrix of bool) +0:40 Sequence +0:40 move second child to first child ( temp 4X1 matrix of bool) +0:40 'r30' ( temp 4X1 matrix of bool) +0:40 transpose ( temp 4X1 matrix of bool) +0:40 'b1x4' ( temp 1X4 matrix of bool) +0:41 Sequence +0:41 move second child to first child ( temp 4X2 matrix of bool) +0:41 'r31' ( temp 4X2 matrix of bool) +0:41 transpose ( temp 4X2 matrix of bool) +0:41 'b2x4' ( temp 2X4 matrix of bool) +0:42 Sequence +0:42 move second child to first child ( temp 4X3 matrix of bool) +0:42 'r32' ( temp 4X3 matrix of bool) +0:42 transpose ( temp 4X3 matrix of bool) +0:42 'b3x4' ( temp 3X4 matrix of bool) +0:43 Sequence +0:43 move second child to first child ( temp 4X4 matrix of bool) +0:43 'r33' ( temp 4X4 matrix of bool) +0:43 transpose ( temp 4X4 matrix of bool) +0:43 'b4x4' ( temp 4X4 matrix of bool) +0:49 Function Definition: @main( ( temp structure{ temp 4-component vector of float color}) +0:49 Function Parameters: +0:? Sequence +0:51 move second child to first child ( temp 4-component vector of float) +0:51 color: direct index for structure ( temp 4-component vector of float) +0:51 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:51 Constant: +0:51 0 (const int) +0:? Constant: +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:52 Branch: Return with expression +0:52 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:49 Function Definition: main( ( temp void) +0:49 Function Parameters: +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: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) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:3 Function Definition: TestBoolMatTypes( ( temp void) +0:3 Function Parameters: +0:? Sequence +0:25 Sequence +0:25 move second child to first child ( temp 1X1 matrix of bool) +0:25 'r00' ( temp 1X1 matrix of bool) +0:25 transpose ( temp 1X1 matrix of bool) +0:25 'b1x1' ( temp 1X1 matrix of bool) +0:26 Sequence +0:26 move second child to first child ( temp 1X2 matrix of bool) +0:26 'r01' ( temp 1X2 matrix of bool) +0:26 transpose ( temp 1X2 matrix of bool) +0:26 'b2x1' ( temp 2X1 matrix of bool) +0:27 Sequence +0:27 move second child to first child ( temp 1X3 matrix of bool) +0:27 'r02' ( temp 1X3 matrix of bool) +0:27 transpose ( temp 1X3 matrix of bool) +0:27 'b3x1' ( temp 3X1 matrix of bool) +0:28 Sequence +0:28 move second child to first child ( temp 1X4 matrix of bool) +0:28 'r03' ( temp 1X4 matrix of bool) +0:28 transpose ( temp 1X4 matrix of bool) +0:28 'b4x1' ( temp 4X1 matrix of bool) +0:30 Sequence +0:30 move second child to first child ( temp 2X1 matrix of bool) +0:30 'r10' ( temp 2X1 matrix of bool) +0:30 transpose ( temp 2X1 matrix of bool) +0:30 'b1x2' ( temp 1X2 matrix of bool) +0:31 Sequence +0:31 move second child to first child ( temp 2X2 matrix of bool) +0:31 'r11' ( temp 2X2 matrix of bool) +0:31 transpose ( temp 2X2 matrix of bool) +0:31 'b2x2' ( temp 2X2 matrix of bool) +0:32 Sequence +0:32 move second child to first child ( temp 2X3 matrix of bool) +0:32 'r12' ( temp 2X3 matrix of bool) +0:32 transpose ( temp 2X3 matrix of bool) +0:32 'b3x2' ( temp 3X2 matrix of bool) +0:33 Sequence +0:33 move second child to first child ( temp 2X4 matrix of bool) +0:33 'r13' ( temp 2X4 matrix of bool) +0:33 transpose ( temp 2X4 matrix of bool) +0:33 'b4x2' ( temp 4X2 matrix of bool) +0:35 Sequence +0:35 move second child to first child ( temp 3X1 matrix of bool) +0:35 'r20' ( temp 3X1 matrix of bool) +0:35 transpose ( temp 3X1 matrix of bool) +0:35 'b1x3' ( temp 1X3 matrix of bool) +0:36 Sequence +0:36 move second child to first child ( temp 3X2 matrix of bool) +0:36 'r21' ( temp 3X2 matrix of bool) +0:36 transpose ( temp 3X2 matrix of bool) +0:36 'b2x3' ( temp 2X3 matrix of bool) +0:37 Sequence +0:37 move second child to first child ( temp 3X3 matrix of bool) +0:37 'r22' ( temp 3X3 matrix of bool) +0:37 transpose ( temp 3X3 matrix of bool) +0:37 'b3x3' ( temp 3X3 matrix of bool) +0:38 Sequence +0:38 move second child to first child ( temp 3X4 matrix of bool) +0:38 'r23' ( temp 3X4 matrix of bool) +0:38 transpose ( temp 3X4 matrix of bool) +0:38 'b4x3' ( temp 4X3 matrix of bool) +0:40 Sequence +0:40 move second child to first child ( temp 4X1 matrix of bool) +0:40 'r30' ( temp 4X1 matrix of bool) +0:40 transpose ( temp 4X1 matrix of bool) +0:40 'b1x4' ( temp 1X4 matrix of bool) +0:41 Sequence +0:41 move second child to first child ( temp 4X2 matrix of bool) +0:41 'r31' ( temp 4X2 matrix of bool) +0:41 transpose ( temp 4X2 matrix of bool) +0:41 'b2x4' ( temp 2X4 matrix of bool) +0:42 Sequence +0:42 move second child to first child ( temp 4X3 matrix of bool) +0:42 'r32' ( temp 4X3 matrix of bool) +0:42 transpose ( temp 4X3 matrix of bool) +0:42 'b3x4' ( temp 3X4 matrix of bool) +0:43 Sequence +0:43 move second child to first child ( temp 4X4 matrix of bool) +0:43 'r33' ( temp 4X4 matrix of bool) +0:43 transpose ( temp 4X4 matrix of bool) +0:43 'b4x4' ( temp 4X4 matrix of bool) +0:49 Function Definition: @main( ( temp structure{ temp 4-component vector of float color}) +0:49 Function Parameters: +0:? Sequence +0:51 move second child to first child ( temp 4-component vector of float) +0:51 color: direct index for structure ( temp 4-component vector of float) +0:51 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:51 Constant: +0:51 0 (const int) +0:? Constant: +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:52 Branch: Return with expression +0:52 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:49 Function Definition: main( ( temp void) +0:49 Function Parameters: +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: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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 130 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 127 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 6 "TestBoolMatTypes(" + Name 10 "PS_OUTPUT" + MemberName 10(PS_OUTPUT) 0 "color" + Name 12 "@main(" + Name 18 "r00" + Name 19 "b1x1" + Name 25 "r01" + Name 28 "b2x1" + Name 34 "r02" + Name 37 "b3x1" + Name 43 "r03" + Name 46 "b4x1" + Name 49 "r10" + Name 50 "b1x2" + Name 55 "r11" + Name 56 "b2x2" + Name 61 "r12" + Name 64 "b3x2" + Name 69 "r13" + Name 72 "b4x2" + Name 75 "r20" + Name 76 "b1x3" + Name 79 "r21" + Name 80 "b2x3" + Name 85 "r22" + Name 86 "b3x3" + Name 91 "r23" + Name 94 "b4x3" + Name 97 "r30" + Name 98 "b1x4" + Name 101 "r31" + Name 102 "b2x4" + Name 105 "r32" + Name 106 "b3x4" + Name 111 "r33" + Name 112 "b4x4" + Name 116 "ps_output" + Name 127 "color" + Decorate 127(color) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 8: TypeFloat 32 + 9: TypeVector 8(float) 4 + 10(PS_OUTPUT): TypeStruct 9(fvec4) + 11: TypeFunction 10(PS_OUTPUT) + 14: TypeBool + 15: TypeVector 14(bool) 1 + 16: TypeMatrix 15(bvec) 1 + 17: TypePointer Function 16 + 22: TypeVector 14(bool) 2 + 23: TypeMatrix 22(bvec2) 1 + 24: TypePointer Function 23 + 26: TypeMatrix 15(bvec) 2 + 27: TypePointer Function 26 + 31: TypeVector 14(bool) 3 + 32: TypeMatrix 31(bvec3) 1 + 33: TypePointer Function 32 + 35: TypeMatrix 15(bvec) 3 + 36: TypePointer Function 35 + 40: TypeVector 14(bool) 4 + 41: TypeMatrix 40(bvec4) 1 + 42: TypePointer Function 41 + 44: TypeMatrix 15(bvec) 4 + 45: TypePointer Function 44 + 53: TypeMatrix 22(bvec2) 2 + 54: TypePointer Function 53 + 59: TypeMatrix 31(bvec3) 2 + 60: TypePointer Function 59 + 62: TypeMatrix 22(bvec2) 3 + 63: TypePointer Function 62 + 67: TypeMatrix 40(bvec4) 2 + 68: TypePointer Function 67 + 70: TypeMatrix 22(bvec2) 4 + 71: TypePointer Function 70 + 83: TypeMatrix 31(bvec3) 3 + 84: TypePointer Function 83 + 89: TypeMatrix 40(bvec4) 3 + 90: TypePointer Function 89 + 92: TypeMatrix 31(bvec3) 4 + 93: TypePointer Function 92 + 109: TypeMatrix 40(bvec4) 4 + 110: TypePointer Function 109 + 115: TypePointer Function 10(PS_OUTPUT) + 117: TypeInt 32 1 + 118: 117(int) Constant 0 + 119: 8(float) Constant 0 + 120: 9(fvec4) ConstantComposite 119 119 119 119 + 121: TypePointer Function 9(fvec4) + 126: TypePointer Output 9(fvec4) + 127(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 + Return + FunctionEnd +6(TestBoolMatTypes(): 2 Function None 3 + 7: Label + 18(r00): 17(ptr) Variable Function + 19(b1x1): 17(ptr) Variable Function + 25(r01): 24(ptr) Variable Function + 28(b2x1): 27(ptr) Variable Function + 34(r02): 33(ptr) Variable Function + 37(b3x1): 36(ptr) Variable Function + 43(r03): 42(ptr) Variable Function + 46(b4x1): 45(ptr) Variable Function + 49(r10): 27(ptr) Variable Function + 50(b1x2): 24(ptr) Variable Function + 55(r11): 54(ptr) Variable Function + 56(b2x2): 54(ptr) Variable Function + 61(r12): 60(ptr) Variable Function + 64(b3x2): 63(ptr) Variable Function + 69(r13): 68(ptr) Variable Function + 72(b4x2): 71(ptr) Variable Function + 75(r20): 36(ptr) Variable Function + 76(b1x3): 33(ptr) Variable Function + 79(r21): 63(ptr) Variable Function + 80(b2x3): 60(ptr) Variable Function + 85(r22): 84(ptr) Variable Function + 86(b3x3): 84(ptr) Variable Function + 91(r23): 90(ptr) Variable Function + 94(b4x3): 93(ptr) Variable Function + 97(r30): 45(ptr) Variable Function + 98(b1x4): 42(ptr) Variable Function + 101(r31): 71(ptr) Variable Function + 102(b2x4): 68(ptr) Variable Function + 105(r32): 93(ptr) Variable Function + 106(b3x4): 90(ptr) Variable Function + 111(r33): 110(ptr) Variable Function + 112(b4x4): 110(ptr) Variable Function + 20: 16 Load 19(b1x1) + 21: 16 Transpose 20 + Store 18(r00) 21 + 29: 26 Load 28(b2x1) + 30: 23 Transpose 29 + Store 25(r01) 30 + 38: 35 Load 37(b3x1) + 39: 32 Transpose 38 + Store 34(r02) 39 + 47: 44 Load 46(b4x1) + 48: 41 Transpose 47 + Store 43(r03) 48 + 51: 23 Load 50(b1x2) + 52: 26 Transpose 51 + Store 49(r10) 52 + 57: 53 Load 56(b2x2) + 58: 53 Transpose 57 + Store 55(r11) 58 + 65: 62 Load 64(b3x2) + 66: 59 Transpose 65 + Store 61(r12) 66 + 73: 70 Load 72(b4x2) + 74: 67 Transpose 73 + Store 69(r13) 74 + 77: 32 Load 76(b1x3) + 78: 35 Transpose 77 + Store 75(r20) 78 + 81: 59 Load 80(b2x3) + 82: 62 Transpose 81 + Store 79(r21) 82 + 87: 83 Load 86(b3x3) + 88: 83 Transpose 87 + Store 85(r22) 88 + 95: 92 Load 94(b4x3) + 96: 89 Transpose 95 + Store 91(r23) 96 + 99: 41 Load 98(b1x4) + 100: 44 Transpose 99 + Store 97(r30) 100 + 103: 67 Load 102(b2x4) + 104: 70 Transpose 103 + Store 101(r31) 104 + 107: 89 Load 106(b3x4) + 108: 92 Transpose 107 + Store 105(r32) 108 + 113: 109 Load 112(b4x4) + 114: 109 Transpose 113 + Store 111(r33) 114 + Return + FunctionEnd + 12(@main():10(PS_OUTPUT) Function None 11 + 13: Label + 116(ps_output): 115(ptr) Variable Function + 122: 121(ptr) AccessChain 116(ps_output) 118 + Store 122 120 + 123:10(PS_OUTPUT) Load 116(ps_output) + ReturnValue 123 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matType.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matType.frag.out new file mode 100755 index 0000000..ee40879 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matType.frag.out @@ -0,0 +1,102 @@ +hlsl.matType.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:9 Function Definition: ShaderFunction(vf1;f1; ( temp 1-component vector of float) +0:9 Function Parameters: +0:9 'inFloat1' ( in 1-component vector of float) +0:9 'inScalar' ( in float) +0:? Sequence +0:10 Branch: Return with expression +0:10 'inFloat1' ( in 1-component vector of float) +0:? Linker Objects +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}) + + +Linked fragment stage: + +WARNING: Linking fragment stage: Entry point not found + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:9 Function Definition: ShaderFunction(vf1;f1; ( temp 1-component vector of float) +0:9 Function Parameters: +0:9 'inFloat1' ( in 1-component vector of float) +0:9 'inScalar' ( in float) +0:? Sequence +0:10 Branch: Return with expression +0:10 'inFloat1' ( in 1-component vector of float) +0:? Linker Objects +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 +// Id's are bound by 30 + + Capability Shader + Capability Float64 + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "PixelShaderFunction" + ExecutionMode 4 OriginUpperLeft + Name 4 "PixelShaderFunction" + Name 11 "ShaderFunction(vf1;f1;" + Name 9 "inFloat1" + Name 10 "inScalar" + Name 27 "$Global" + MemberName 27($Global) 0 "f1" + MemberName 27($Global) 1 "fmat11" + MemberName 27($Global) 2 "fmat41" + MemberName 27($Global) 3 "fmat12" + MemberName 27($Global) 4 "dmat23" + MemberName 27($Global) 5 "int44" + Name 29 "" + MemberDecorate 27($Global) 0 Offset 0 + MemberDecorate 27($Global) 1 RowMajor + MemberDecorate 27($Global) 1 Offset 16 + MemberDecorate 27($Global) 1 MatrixStride 16 + MemberDecorate 27($Global) 2 RowMajor + MemberDecorate 27($Global) 2 Offset 32 + MemberDecorate 27($Global) 2 MatrixStride 16 + MemberDecorate 27($Global) 3 RowMajor + MemberDecorate 27($Global) 3 Offset 48 + MemberDecorate 27($Global) 3 MatrixStride 16 + MemberDecorate 27($Global) 4 RowMajor + MemberDecorate 27($Global) 4 Offset 80 + MemberDecorate 27($Global) 4 MatrixStride 16 + MemberDecorate 27($Global) 5 RowMajor + MemberDecorate 27($Global) 5 Offset 128 + MemberDecorate 27($Global) 5 MatrixStride 16 + Decorate 27($Global) Block + Decorate 29 DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypePointer Function 6(float) + 8: TypeFunction 6(float) 7(ptr) 7(ptr) + 16: TypeVector 6(float) 1 + 17: TypeMatrix 16(fvec) 1 + 18: TypeMatrix 16(fvec) 4 + 19: TypeVector 6(float) 2 + 20: TypeMatrix 19(fvec2) 1 + 21: TypeFloat 64 + 22: TypeVector 21(float) 3 + 23: TypeMatrix 22(fvec3) 2 + 24: TypeInt 32 1 + 25: TypeVector 24(int) 4 + 26: TypeMatrix 25(ivec4) 4 + 27($Global): TypeStruct 6(float) 17 18 20 23 26 + 28: TypePointer Uniform 27($Global) + 29: 28(ptr) Variable Uniform +4(PixelShaderFunction): 2 Function None 3 + 5: Label + Return + FunctionEnd +11(ShaderFunction(vf1;f1;): 6(float) Function None 8 + 9(inFloat1): 7(ptr) FunctionParameter + 10(inScalar): 7(ptr) FunctionParameter + 12: Label + 13: 6(float) Load 9(inFloat1) + ReturnValue 13 + FunctionEnd 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 new file mode 100644 index 0000000..aef7862 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matType.int.frag.out @@ -0,0 +1,751 @@ +hlsl.matType.int.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:3 Function Definition: TestIntMatTypes( ( temp void) +0:3 Function Parameters: +0:? Sequence +0:25 Sequence +0:25 move second child to first child ( temp 1X1 matrix of int) +0:25 'r00' ( temp 1X1 matrix of int) +0:25 transpose ( temp 1X1 matrix of int) +0:25 'i1x1' ( temp 1X1 matrix of int) +0:26 Sequence +0:26 move second child to first child ( temp 1X2 matrix of int) +0:26 'r01' ( temp 1X2 matrix of int) +0:26 transpose ( temp 1X2 matrix of int) +0:26 'i2x1' ( temp 2X1 matrix of int) +0:27 Sequence +0:27 move second child to first child ( temp 1X3 matrix of int) +0:27 'r02' ( temp 1X3 matrix of int) +0:27 transpose ( temp 1X3 matrix of int) +0:27 'i3x1' ( temp 3X1 matrix of int) +0:28 Sequence +0:28 move second child to first child ( temp 1X4 matrix of int) +0:28 'r03' ( temp 1X4 matrix of int) +0:28 transpose ( temp 1X4 matrix of int) +0:28 'i4x1' ( temp 4X1 matrix of int) +0:30 Sequence +0:30 move second child to first child ( temp 2X1 matrix of int) +0:30 'r10' ( temp 2X1 matrix of int) +0:30 transpose ( temp 2X1 matrix of int) +0:30 'i1x2' ( temp 1X2 matrix of int) +0:31 Sequence +0:31 move second child to first child ( temp 2X2 matrix of int) +0:31 'r11' ( temp 2X2 matrix of int) +0:31 transpose ( temp 2X2 matrix of int) +0:31 'i2x2' ( temp 2X2 matrix of int) +0:32 Sequence +0:32 move second child to first child ( temp 2X3 matrix of int) +0:32 'r12' ( temp 2X3 matrix of int) +0:32 transpose ( temp 2X3 matrix of int) +0:32 'i3x2' ( temp 3X2 matrix of int) +0:33 Sequence +0:33 move second child to first child ( temp 2X4 matrix of int) +0:33 'r13' ( temp 2X4 matrix of int) +0:33 transpose ( temp 2X4 matrix of int) +0:33 'i4x2' ( temp 4X2 matrix of int) +0:35 Sequence +0:35 move second child to first child ( temp 3X1 matrix of int) +0:35 'r20' ( temp 3X1 matrix of int) +0:35 transpose ( temp 3X1 matrix of int) +0:35 'i1x3' ( temp 1X3 matrix of int) +0:36 Sequence +0:36 move second child to first child ( temp 3X2 matrix of int) +0:36 'r21' ( temp 3X2 matrix of int) +0:36 transpose ( temp 3X2 matrix of int) +0:36 'i2x3' ( temp 2X3 matrix of int) +0:37 Sequence +0:37 move second child to first child ( temp 3X3 matrix of int) +0:37 'r22' ( temp 3X3 matrix of int) +0:37 transpose ( temp 3X3 matrix of int) +0:37 'i3x3' ( temp 3X3 matrix of int) +0:38 Sequence +0:38 move second child to first child ( temp 3X4 matrix of int) +0:38 'r23' ( temp 3X4 matrix of int) +0:38 transpose ( temp 3X4 matrix of int) +0:38 'i4x3' ( temp 4X3 matrix of int) +0:40 Sequence +0:40 move second child to first child ( temp 4X1 matrix of int) +0:40 'r30' ( temp 4X1 matrix of int) +0:40 transpose ( temp 4X1 matrix of int) +0:40 'i1x4' ( temp 1X4 matrix of int) +0:41 Sequence +0:41 move second child to first child ( temp 4X2 matrix of int) +0:41 'r31' ( temp 4X2 matrix of int) +0:41 transpose ( temp 4X2 matrix of int) +0:41 'i2x4' ( temp 2X4 matrix of int) +0:42 Sequence +0:42 move second child to first child ( temp 4X3 matrix of int) +0:42 'r32' ( temp 4X3 matrix of int) +0:42 transpose ( temp 4X3 matrix of int) +0:42 'i3x4' ( temp 3X4 matrix of int) +0:43 Sequence +0:43 move second child to first child ( temp 4X4 matrix of int) +0:43 'r33' ( temp 4X4 matrix of int) +0:43 transpose ( temp 4X4 matrix of int) +0:43 'i4x4' ( temp 4X4 matrix of int) +0:47 Function Definition: TestUintMatTypes( ( temp void) +0:47 Function Parameters: +0:? Sequence +0:69 Sequence +0:69 move second child to first child ( temp 1X1 matrix of uint) +0:69 'r00' ( temp 1X1 matrix of uint) +0:69 transpose ( temp 1X1 matrix of uint) +0:69 'u1x1' ( temp 1X1 matrix of uint) +0:70 Sequence +0:70 move second child to first child ( temp 1X2 matrix of uint) +0:70 'r01' ( temp 1X2 matrix of uint) +0:70 transpose ( temp 1X2 matrix of uint) +0:70 'u2x1' ( temp 2X1 matrix of uint) +0:71 Sequence +0:71 move second child to first child ( temp 1X3 matrix of uint) +0:71 'r02' ( temp 1X3 matrix of uint) +0:71 transpose ( temp 1X3 matrix of uint) +0:71 'u3x1' ( temp 3X1 matrix of uint) +0:72 Sequence +0:72 move second child to first child ( temp 1X4 matrix of uint) +0:72 'r03' ( temp 1X4 matrix of uint) +0:72 transpose ( temp 1X4 matrix of uint) +0:72 'u4x1' ( temp 4X1 matrix of uint) +0:74 Sequence +0:74 move second child to first child ( temp 2X1 matrix of uint) +0:74 'r10' ( temp 2X1 matrix of uint) +0:74 transpose ( temp 2X1 matrix of uint) +0:74 'u1x2' ( temp 1X2 matrix of uint) +0:75 Sequence +0:75 move second child to first child ( temp 2X2 matrix of uint) +0:75 'r11' ( temp 2X2 matrix of uint) +0:75 transpose ( temp 2X2 matrix of uint) +0:75 'u2x2' ( temp 2X2 matrix of uint) +0:76 Sequence +0:76 move second child to first child ( temp 2X3 matrix of uint) +0:76 'r12' ( temp 2X3 matrix of uint) +0:76 transpose ( temp 2X3 matrix of uint) +0:76 'u3x2' ( temp 3X2 matrix of uint) +0:77 Sequence +0:77 move second child to first child ( temp 2X4 matrix of uint) +0:77 'r13' ( temp 2X4 matrix of uint) +0:77 transpose ( temp 2X4 matrix of uint) +0:77 'u4x2' ( temp 4X2 matrix of uint) +0:79 Sequence +0:79 move second child to first child ( temp 3X1 matrix of uint) +0:79 'r20' ( temp 3X1 matrix of uint) +0:79 transpose ( temp 3X1 matrix of uint) +0:79 'u1x3' ( temp 1X3 matrix of uint) +0:80 Sequence +0:80 move second child to first child ( temp 3X2 matrix of uint) +0:80 'r21' ( temp 3X2 matrix of uint) +0:80 transpose ( temp 3X2 matrix of uint) +0:80 'u2x3' ( temp 2X3 matrix of uint) +0:81 Sequence +0:81 move second child to first child ( temp 3X3 matrix of uint) +0:81 'r22' ( temp 3X3 matrix of uint) +0:81 transpose ( temp 3X3 matrix of uint) +0:81 'u3x3' ( temp 3X3 matrix of uint) +0:82 Sequence +0:82 move second child to first child ( temp 3X4 matrix of uint) +0:82 'r23' ( temp 3X4 matrix of uint) +0:82 transpose ( temp 3X4 matrix of uint) +0:82 'u4x3' ( temp 4X3 matrix of uint) +0:84 Sequence +0:84 move second child to first child ( temp 4X1 matrix of uint) +0:84 'r30' ( temp 4X1 matrix of uint) +0:84 transpose ( temp 4X1 matrix of uint) +0:84 'u1x4' ( temp 1X4 matrix of uint) +0:85 Sequence +0:85 move second child to first child ( temp 4X2 matrix of uint) +0:85 'r31' ( temp 4X2 matrix of uint) +0:85 transpose ( temp 4X2 matrix of uint) +0:85 'u2x4' ( temp 2X4 matrix of uint) +0:86 Sequence +0:86 move second child to first child ( temp 4X3 matrix of uint) +0:86 'r32' ( temp 4X3 matrix of uint) +0:86 transpose ( temp 4X3 matrix of uint) +0:86 'u3x4' ( temp 3X4 matrix of uint) +0:87 Sequence +0:87 move second child to first child ( temp 4X4 matrix of uint) +0:87 'r33' ( temp 4X4 matrix of uint) +0:87 transpose ( temp 4X4 matrix of uint) +0:87 'u4x4' ( temp 4X4 matrix of uint) +0:93 Function Definition: @main( ( temp structure{ temp 4-component vector of float color}) +0:93 Function Parameters: +0:? Sequence +0:95 move second child to first child ( temp 4-component vector of float) +0:95 color: direct index for structure ( temp 4-component vector of float) +0:95 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:95 Constant: +0:95 0 (const int) +0:? Constant: +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:96 Branch: Return with expression +0:96 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:93 Function Definition: main( ( temp void) +0:93 Function Parameters: +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: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) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:3 Function Definition: TestIntMatTypes( ( temp void) +0:3 Function Parameters: +0:? Sequence +0:25 Sequence +0:25 move second child to first child ( temp 1X1 matrix of int) +0:25 'r00' ( temp 1X1 matrix of int) +0:25 transpose ( temp 1X1 matrix of int) +0:25 'i1x1' ( temp 1X1 matrix of int) +0:26 Sequence +0:26 move second child to first child ( temp 1X2 matrix of int) +0:26 'r01' ( temp 1X2 matrix of int) +0:26 transpose ( temp 1X2 matrix of int) +0:26 'i2x1' ( temp 2X1 matrix of int) +0:27 Sequence +0:27 move second child to first child ( temp 1X3 matrix of int) +0:27 'r02' ( temp 1X3 matrix of int) +0:27 transpose ( temp 1X3 matrix of int) +0:27 'i3x1' ( temp 3X1 matrix of int) +0:28 Sequence +0:28 move second child to first child ( temp 1X4 matrix of int) +0:28 'r03' ( temp 1X4 matrix of int) +0:28 transpose ( temp 1X4 matrix of int) +0:28 'i4x1' ( temp 4X1 matrix of int) +0:30 Sequence +0:30 move second child to first child ( temp 2X1 matrix of int) +0:30 'r10' ( temp 2X1 matrix of int) +0:30 transpose ( temp 2X1 matrix of int) +0:30 'i1x2' ( temp 1X2 matrix of int) +0:31 Sequence +0:31 move second child to first child ( temp 2X2 matrix of int) +0:31 'r11' ( temp 2X2 matrix of int) +0:31 transpose ( temp 2X2 matrix of int) +0:31 'i2x2' ( temp 2X2 matrix of int) +0:32 Sequence +0:32 move second child to first child ( temp 2X3 matrix of int) +0:32 'r12' ( temp 2X3 matrix of int) +0:32 transpose ( temp 2X3 matrix of int) +0:32 'i3x2' ( temp 3X2 matrix of int) +0:33 Sequence +0:33 move second child to first child ( temp 2X4 matrix of int) +0:33 'r13' ( temp 2X4 matrix of int) +0:33 transpose ( temp 2X4 matrix of int) +0:33 'i4x2' ( temp 4X2 matrix of int) +0:35 Sequence +0:35 move second child to first child ( temp 3X1 matrix of int) +0:35 'r20' ( temp 3X1 matrix of int) +0:35 transpose ( temp 3X1 matrix of int) +0:35 'i1x3' ( temp 1X3 matrix of int) +0:36 Sequence +0:36 move second child to first child ( temp 3X2 matrix of int) +0:36 'r21' ( temp 3X2 matrix of int) +0:36 transpose ( temp 3X2 matrix of int) +0:36 'i2x3' ( temp 2X3 matrix of int) +0:37 Sequence +0:37 move second child to first child ( temp 3X3 matrix of int) +0:37 'r22' ( temp 3X3 matrix of int) +0:37 transpose ( temp 3X3 matrix of int) +0:37 'i3x3' ( temp 3X3 matrix of int) +0:38 Sequence +0:38 move second child to first child ( temp 3X4 matrix of int) +0:38 'r23' ( temp 3X4 matrix of int) +0:38 transpose ( temp 3X4 matrix of int) +0:38 'i4x3' ( temp 4X3 matrix of int) +0:40 Sequence +0:40 move second child to first child ( temp 4X1 matrix of int) +0:40 'r30' ( temp 4X1 matrix of int) +0:40 transpose ( temp 4X1 matrix of int) +0:40 'i1x4' ( temp 1X4 matrix of int) +0:41 Sequence +0:41 move second child to first child ( temp 4X2 matrix of int) +0:41 'r31' ( temp 4X2 matrix of int) +0:41 transpose ( temp 4X2 matrix of int) +0:41 'i2x4' ( temp 2X4 matrix of int) +0:42 Sequence +0:42 move second child to first child ( temp 4X3 matrix of int) +0:42 'r32' ( temp 4X3 matrix of int) +0:42 transpose ( temp 4X3 matrix of int) +0:42 'i3x4' ( temp 3X4 matrix of int) +0:43 Sequence +0:43 move second child to first child ( temp 4X4 matrix of int) +0:43 'r33' ( temp 4X4 matrix of int) +0:43 transpose ( temp 4X4 matrix of int) +0:43 'i4x4' ( temp 4X4 matrix of int) +0:47 Function Definition: TestUintMatTypes( ( temp void) +0:47 Function Parameters: +0:? Sequence +0:69 Sequence +0:69 move second child to first child ( temp 1X1 matrix of uint) +0:69 'r00' ( temp 1X1 matrix of uint) +0:69 transpose ( temp 1X1 matrix of uint) +0:69 'u1x1' ( temp 1X1 matrix of uint) +0:70 Sequence +0:70 move second child to first child ( temp 1X2 matrix of uint) +0:70 'r01' ( temp 1X2 matrix of uint) +0:70 transpose ( temp 1X2 matrix of uint) +0:70 'u2x1' ( temp 2X1 matrix of uint) +0:71 Sequence +0:71 move second child to first child ( temp 1X3 matrix of uint) +0:71 'r02' ( temp 1X3 matrix of uint) +0:71 transpose ( temp 1X3 matrix of uint) +0:71 'u3x1' ( temp 3X1 matrix of uint) +0:72 Sequence +0:72 move second child to first child ( temp 1X4 matrix of uint) +0:72 'r03' ( temp 1X4 matrix of uint) +0:72 transpose ( temp 1X4 matrix of uint) +0:72 'u4x1' ( temp 4X1 matrix of uint) +0:74 Sequence +0:74 move second child to first child ( temp 2X1 matrix of uint) +0:74 'r10' ( temp 2X1 matrix of uint) +0:74 transpose ( temp 2X1 matrix of uint) +0:74 'u1x2' ( temp 1X2 matrix of uint) +0:75 Sequence +0:75 move second child to first child ( temp 2X2 matrix of uint) +0:75 'r11' ( temp 2X2 matrix of uint) +0:75 transpose ( temp 2X2 matrix of uint) +0:75 'u2x2' ( temp 2X2 matrix of uint) +0:76 Sequence +0:76 move second child to first child ( temp 2X3 matrix of uint) +0:76 'r12' ( temp 2X3 matrix of uint) +0:76 transpose ( temp 2X3 matrix of uint) +0:76 'u3x2' ( temp 3X2 matrix of uint) +0:77 Sequence +0:77 move second child to first child ( temp 2X4 matrix of uint) +0:77 'r13' ( temp 2X4 matrix of uint) +0:77 transpose ( temp 2X4 matrix of uint) +0:77 'u4x2' ( temp 4X2 matrix of uint) +0:79 Sequence +0:79 move second child to first child ( temp 3X1 matrix of uint) +0:79 'r20' ( temp 3X1 matrix of uint) +0:79 transpose ( temp 3X1 matrix of uint) +0:79 'u1x3' ( temp 1X3 matrix of uint) +0:80 Sequence +0:80 move second child to first child ( temp 3X2 matrix of uint) +0:80 'r21' ( temp 3X2 matrix of uint) +0:80 transpose ( temp 3X2 matrix of uint) +0:80 'u2x3' ( temp 2X3 matrix of uint) +0:81 Sequence +0:81 move second child to first child ( temp 3X3 matrix of uint) +0:81 'r22' ( temp 3X3 matrix of uint) +0:81 transpose ( temp 3X3 matrix of uint) +0:81 'u3x3' ( temp 3X3 matrix of uint) +0:82 Sequence +0:82 move second child to first child ( temp 3X4 matrix of uint) +0:82 'r23' ( temp 3X4 matrix of uint) +0:82 transpose ( temp 3X4 matrix of uint) +0:82 'u4x3' ( temp 4X3 matrix of uint) +0:84 Sequence +0:84 move second child to first child ( temp 4X1 matrix of uint) +0:84 'r30' ( temp 4X1 matrix of uint) +0:84 transpose ( temp 4X1 matrix of uint) +0:84 'u1x4' ( temp 1X4 matrix of uint) +0:85 Sequence +0:85 move second child to first child ( temp 4X2 matrix of uint) +0:85 'r31' ( temp 4X2 matrix of uint) +0:85 transpose ( temp 4X2 matrix of uint) +0:85 'u2x4' ( temp 2X4 matrix of uint) +0:86 Sequence +0:86 move second child to first child ( temp 4X3 matrix of uint) +0:86 'r32' ( temp 4X3 matrix of uint) +0:86 transpose ( temp 4X3 matrix of uint) +0:86 'u3x4' ( temp 3X4 matrix of uint) +0:87 Sequence +0:87 move second child to first child ( temp 4X4 matrix of uint) +0:87 'r33' ( temp 4X4 matrix of uint) +0:87 transpose ( temp 4X4 matrix of uint) +0:87 'u4x4' ( temp 4X4 matrix of uint) +0:93 Function Definition: @main( ( temp structure{ temp 4-component vector of float color}) +0:93 Function Parameters: +0:? Sequence +0:95 move second child to first child ( temp 4-component vector of float) +0:95 color: direct index for structure ( temp 4-component vector of float) +0:95 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:95 Constant: +0:95 0 (const int) +0:? Constant: +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:96 Branch: Return with expression +0:96 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:93 Function Definition: main( ( temp void) +0:93 Function Parameters: +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: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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 232 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 229 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 6 "TestIntMatTypes(" + Name 8 "TestUintMatTypes(" + Name 12 "PS_OUTPUT" + MemberName 12(PS_OUTPUT) 0 "color" + Name 14 "@main(" + Name 20 "r00" + Name 21 "i1x1" + Name 27 "r01" + Name 30 "i2x1" + Name 36 "r02" + Name 39 "i3x1" + Name 45 "r03" + Name 48 "i4x1" + Name 51 "r10" + Name 52 "i1x2" + Name 57 "r11" + Name 58 "i2x2" + Name 63 "r12" + Name 66 "i3x2" + Name 71 "r13" + Name 74 "i4x2" + Name 77 "r20" + Name 78 "i1x3" + Name 81 "r21" + Name 82 "i2x3" + Name 87 "r22" + Name 88 "i3x3" + Name 93 "r23" + Name 96 "i4x3" + Name 99 "r30" + Name 100 "i1x4" + Name 103 "r31" + Name 104 "i2x4" + Name 107 "r32" + Name 108 "i3x4" + Name 113 "r33" + Name 114 "i4x4" + Name 121 "r00" + Name 122 "u1x1" + Name 128 "r01" + Name 131 "u2x1" + Name 137 "r02" + Name 140 "u3x1" + Name 146 "r03" + Name 149 "u4x1" + Name 152 "r10" + Name 153 "u1x2" + Name 158 "r11" + Name 159 "u2x2" + Name 164 "r12" + Name 167 "u3x2" + Name 172 "r13" + Name 175 "u4x2" + Name 178 "r20" + Name 179 "u1x3" + Name 182 "r21" + Name 183 "u2x3" + Name 188 "r22" + Name 189 "u3x3" + Name 194 "r23" + Name 197 "u4x3" + Name 200 "r30" + Name 201 "u1x4" + Name 204 "r31" + Name 205 "u2x4" + Name 208 "r32" + Name 209 "u3x4" + Name 214 "r33" + Name 215 "u4x4" + Name 219 "ps_output" + Name 229 "color" + Decorate 229(color) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 10: TypeFloat 32 + 11: TypeVector 10(float) 4 + 12(PS_OUTPUT): TypeStruct 11(fvec4) + 13: TypeFunction 12(PS_OUTPUT) + 16: TypeInt 32 1 + 17: TypeVector 16(int) 1 + 18: TypeMatrix 17(ivec) 1 + 19: TypePointer Function 18 + 24: TypeVector 16(int) 2 + 25: TypeMatrix 24(ivec2) 1 + 26: TypePointer Function 25 + 28: TypeMatrix 17(ivec) 2 + 29: TypePointer Function 28 + 33: TypeVector 16(int) 3 + 34: TypeMatrix 33(ivec3) 1 + 35: TypePointer Function 34 + 37: TypeMatrix 17(ivec) 3 + 38: TypePointer Function 37 + 42: TypeVector 16(int) 4 + 43: TypeMatrix 42(ivec4) 1 + 44: TypePointer Function 43 + 46: TypeMatrix 17(ivec) 4 + 47: TypePointer Function 46 + 55: TypeMatrix 24(ivec2) 2 + 56: TypePointer Function 55 + 61: TypeMatrix 33(ivec3) 2 + 62: TypePointer Function 61 + 64: TypeMatrix 24(ivec2) 3 + 65: TypePointer Function 64 + 69: TypeMatrix 42(ivec4) 2 + 70: TypePointer Function 69 + 72: TypeMatrix 24(ivec2) 4 + 73: TypePointer Function 72 + 85: TypeMatrix 33(ivec3) 3 + 86: TypePointer Function 85 + 91: TypeMatrix 42(ivec4) 3 + 92: TypePointer Function 91 + 94: TypeMatrix 33(ivec3) 4 + 95: TypePointer Function 94 + 111: TypeMatrix 42(ivec4) 4 + 112: TypePointer Function 111 + 117: TypeInt 32 0 + 118: TypeVector 117(int) 1 + 119: TypeMatrix 118(ivec) 1 + 120: TypePointer Function 119 + 125: TypeVector 117(int) 2 + 126: TypeMatrix 125(ivec2) 1 + 127: TypePointer Function 126 + 129: TypeMatrix 118(ivec) 2 + 130: TypePointer Function 129 + 134: TypeVector 117(int) 3 + 135: TypeMatrix 134(ivec3) 1 + 136: TypePointer Function 135 + 138: TypeMatrix 118(ivec) 3 + 139: TypePointer Function 138 + 143: TypeVector 117(int) 4 + 144: TypeMatrix 143(ivec4) 1 + 145: TypePointer Function 144 + 147: TypeMatrix 118(ivec) 4 + 148: TypePointer Function 147 + 156: TypeMatrix 125(ivec2) 2 + 157: TypePointer Function 156 + 162: TypeMatrix 134(ivec3) 2 + 163: TypePointer Function 162 + 165: TypeMatrix 125(ivec2) 3 + 166: TypePointer Function 165 + 170: TypeMatrix 143(ivec4) 2 + 171: TypePointer Function 170 + 173: TypeMatrix 125(ivec2) 4 + 174: TypePointer Function 173 + 186: TypeMatrix 134(ivec3) 3 + 187: TypePointer Function 186 + 192: TypeMatrix 143(ivec4) 3 + 193: TypePointer Function 192 + 195: TypeMatrix 134(ivec3) 4 + 196: TypePointer Function 195 + 212: TypeMatrix 143(ivec4) 4 + 213: TypePointer Function 212 + 218: TypePointer Function 12(PS_OUTPUT) + 220: 16(int) Constant 0 + 221: 10(float) Constant 0 + 222: 11(fvec4) ConstantComposite 221 221 221 221 + 223: TypePointer Function 11(fvec4) + 228: TypePointer Output 11(fvec4) + 229(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 + Return + FunctionEnd +6(TestIntMatTypes(): 2 Function None 3 + 7: Label + 20(r00): 19(ptr) Variable Function + 21(i1x1): 19(ptr) Variable Function + 27(r01): 26(ptr) Variable Function + 30(i2x1): 29(ptr) Variable Function + 36(r02): 35(ptr) Variable Function + 39(i3x1): 38(ptr) Variable Function + 45(r03): 44(ptr) Variable Function + 48(i4x1): 47(ptr) Variable Function + 51(r10): 29(ptr) Variable Function + 52(i1x2): 26(ptr) Variable Function + 57(r11): 56(ptr) Variable Function + 58(i2x2): 56(ptr) Variable Function + 63(r12): 62(ptr) Variable Function + 66(i3x2): 65(ptr) Variable Function + 71(r13): 70(ptr) Variable Function + 74(i4x2): 73(ptr) Variable Function + 77(r20): 38(ptr) Variable Function + 78(i1x3): 35(ptr) Variable Function + 81(r21): 65(ptr) Variable Function + 82(i2x3): 62(ptr) Variable Function + 87(r22): 86(ptr) Variable Function + 88(i3x3): 86(ptr) Variable Function + 93(r23): 92(ptr) Variable Function + 96(i4x3): 95(ptr) Variable Function + 99(r30): 47(ptr) Variable Function + 100(i1x4): 44(ptr) Variable Function + 103(r31): 73(ptr) Variable Function + 104(i2x4): 70(ptr) Variable Function + 107(r32): 95(ptr) Variable Function + 108(i3x4): 92(ptr) Variable Function + 113(r33): 112(ptr) Variable Function + 114(i4x4): 112(ptr) Variable Function + 22: 18 Load 21(i1x1) + 23: 18 Transpose 22 + Store 20(r00) 23 + 31: 28 Load 30(i2x1) + 32: 25 Transpose 31 + Store 27(r01) 32 + 40: 37 Load 39(i3x1) + 41: 34 Transpose 40 + Store 36(r02) 41 + 49: 46 Load 48(i4x1) + 50: 43 Transpose 49 + Store 45(r03) 50 + 53: 25 Load 52(i1x2) + 54: 28 Transpose 53 + Store 51(r10) 54 + 59: 55 Load 58(i2x2) + 60: 55 Transpose 59 + Store 57(r11) 60 + 67: 64 Load 66(i3x2) + 68: 61 Transpose 67 + Store 63(r12) 68 + 75: 72 Load 74(i4x2) + 76: 69 Transpose 75 + Store 71(r13) 76 + 79: 34 Load 78(i1x3) + 80: 37 Transpose 79 + Store 77(r20) 80 + 83: 61 Load 82(i2x3) + 84: 64 Transpose 83 + Store 81(r21) 84 + 89: 85 Load 88(i3x3) + 90: 85 Transpose 89 + Store 87(r22) 90 + 97: 94 Load 96(i4x3) + 98: 91 Transpose 97 + Store 93(r23) 98 + 101: 43 Load 100(i1x4) + 102: 46 Transpose 101 + Store 99(r30) 102 + 105: 69 Load 104(i2x4) + 106: 72 Transpose 105 + Store 103(r31) 106 + 109: 91 Load 108(i3x4) + 110: 94 Transpose 109 + Store 107(r32) 110 + 115: 111 Load 114(i4x4) + 116: 111 Transpose 115 + Store 113(r33) 116 + Return + FunctionEnd +8(TestUintMatTypes(): 2 Function None 3 + 9: Label + 121(r00): 120(ptr) Variable Function + 122(u1x1): 120(ptr) Variable Function + 128(r01): 127(ptr) Variable Function + 131(u2x1): 130(ptr) Variable Function + 137(r02): 136(ptr) Variable Function + 140(u3x1): 139(ptr) Variable Function + 146(r03): 145(ptr) Variable Function + 149(u4x1): 148(ptr) Variable Function + 152(r10): 130(ptr) Variable Function + 153(u1x2): 127(ptr) Variable Function + 158(r11): 157(ptr) Variable Function + 159(u2x2): 157(ptr) Variable Function + 164(r12): 163(ptr) Variable Function + 167(u3x2): 166(ptr) Variable Function + 172(r13): 171(ptr) Variable Function + 175(u4x2): 174(ptr) Variable Function + 178(r20): 139(ptr) Variable Function + 179(u1x3): 136(ptr) Variable Function + 182(r21): 166(ptr) Variable Function + 183(u2x3): 163(ptr) Variable Function + 188(r22): 187(ptr) Variable Function + 189(u3x3): 187(ptr) Variable Function + 194(r23): 193(ptr) Variable Function + 197(u4x3): 196(ptr) Variable Function + 200(r30): 148(ptr) Variable Function + 201(u1x4): 145(ptr) Variable Function + 204(r31): 174(ptr) Variable Function + 205(u2x4): 171(ptr) Variable Function + 208(r32): 196(ptr) Variable Function + 209(u3x4): 193(ptr) Variable Function + 214(r33): 213(ptr) Variable Function + 215(u4x4): 213(ptr) Variable Function + 123: 119 Load 122(u1x1) + 124: 119 Transpose 123 + Store 121(r00) 124 + 132: 129 Load 131(u2x1) + 133: 126 Transpose 132 + Store 128(r01) 133 + 141: 138 Load 140(u3x1) + 142: 135 Transpose 141 + Store 137(r02) 142 + 150: 147 Load 149(u4x1) + 151: 144 Transpose 150 + Store 146(r03) 151 + 154: 126 Load 153(u1x2) + 155: 129 Transpose 154 + Store 152(r10) 155 + 160: 156 Load 159(u2x2) + 161: 156 Transpose 160 + Store 158(r11) 161 + 168: 165 Load 167(u3x2) + 169: 162 Transpose 168 + Store 164(r12) 169 + 176: 173 Load 175(u4x2) + 177: 170 Transpose 176 + Store 172(r13) 177 + 180: 135 Load 179(u1x3) + 181: 138 Transpose 180 + Store 178(r20) 181 + 184: 162 Load 183(u2x3) + 185: 165 Transpose 184 + Store 182(r21) 185 + 190: 186 Load 189(u3x3) + 191: 186 Transpose 190 + Store 188(r22) 191 + 198: 195 Load 197(u4x3) + 199: 192 Transpose 198 + Store 194(r23) 199 + 202: 144 Load 201(u1x4) + 203: 147 Transpose 202 + Store 200(r30) 203 + 206: 170 Load 205(u2x4) + 207: 173 Transpose 206 + Store 204(r31) 207 + 210: 192 Load 209(u3x4) + 211: 195 Transpose 210 + Store 208(r32) 211 + 216: 212 Load 215(u4x4) + 217: 212 Transpose 216 + Store 214(r33) 217 + Return + FunctionEnd + 14(@main():12(PS_OUTPUT) Function None 13 + 15: Label + 219(ps_output): 218(ptr) Variable Function + 224: 223(ptr) AccessChain 219(ps_output) 220 + Store 224 222 + 225:12(PS_OUTPUT) Load 219(ps_output) + ReturnValue 225 + 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 new file mode 100755 index 0000000..69c774b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matrixSwizzle.vert.out @@ -0,0 +1,851 @@ +hlsl.matrixSwizzle.vert +Shader version: 450 +0:? Sequence +0:2 Function Definition: @ShaderFunction(f1; ( temp void) +0:2 Function Parameters: +0:2 'inf' ( in float) +0:? Sequence +0:7 move second child to first child ( temp float) +0:7 direct index ( temp float) +0:7 direct index ( temp 4-component vector of float) +0:7 'm' ( temp 3X4 matrix of float) +0:7 Constant: +0:7 2 (const int) +0:7 Constant: +0:7 3 (const int) +0:7 Constant: +0:7 1.000000 +0:8 move second child to first child ( temp float) +0:8 direct index ( temp float) +0:8 direct index ( temp 4-component vector of float) +0:8 'm' ( temp 3X4 matrix of float) +0:8 Constant: +0:8 2 (const int) +0:8 Constant: +0:8 3 (const int) +0:8 Constant: +0:8 2.000000 +0:9 move second child to first child ( temp float) +0:9 direct index ( temp float) +0:9 direct index ( temp 4-component vector of float) +0:9 'm' ( temp 3X4 matrix of float) +0:9 Constant: +0:9 2 (const int) +0:9 Constant: +0:9 3 (const int) +0:9 Constant: +0:9 2.000000 +0:11 move second child to first child ( temp 4-component vector of float) +0:11 direct index ( temp 4-component vector of float) +0:11 'm' ( temp 3X4 matrix of float) +0:11 Constant: +0:11 0 (const int) +0:11 Constant: +0:11 3.000000 +0:11 3.000000 +0:11 3.000000 +0:11 3.000000 +0:12 move second child to first child ( temp 4-component vector of float) +0:12 direct index ( temp 4-component vector of float) +0:12 'm' ( temp 3X4 matrix of float) +0:12 Constant: +0:12 1 (const int) +0:12 Constant: +0:12 3.000000 +0:12 3.000000 +0:12 3.000000 +0:12 3.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' ( temp 3X4 matrix of float) +0:13 Constant: +0:13 1 (const int) +0:13 Constant: +0:13 3.000000 +0:13 3.000000 +0:13 3.000000 +0:13 3.000000 +0:? Sequence +0:18 move second child to first child ( temp float) +0:18 direct index ( temp float) +0:18 direct index ( temp 4-component vector of float) +0:18 'm' ( temp 3X4 matrix of float) +0:18 Constant: +0:18 0 (const int) +0:18 Constant: +0:18 0 (const int) +0:18 direct index ( temp float) +0:18 'f3' ( temp 3-component vector of float) +0:18 Constant: +0:18 0 (const int) +0:18 move second child to first child ( temp float) +0:18 direct index ( temp float) +0:18 direct index ( temp 4-component vector of float) +0:18 'm' ( temp 3X4 matrix of float) +0:18 Constant: +0:18 1 (const int) +0:18 Constant: +0:18 1 (const int) +0:18 direct index ( temp float) +0:18 'f3' ( temp 3-component vector of float) +0:18 Constant: +0:18 1 (const int) +0:18 move second child to first child ( temp float) +0:18 direct index ( temp float) +0:18 direct index ( temp 4-component vector of float) +0:18 'm' ( temp 3X4 matrix of float) +0:18 Constant: +0:18 1 (const int) +0:18 Constant: +0:18 2 (const int) +0:18 direct index ( temp float) +0:18 'f3' ( temp 3-component vector of float) +0:18 Constant: +0:18 2 (const int) +0:19 Sequence +0:19 move second child to first child ( temp 3-component vector of float) +0:19 'intermVec' ( temp 3-component vector of float) +0:19 Constant: +0:19 5.000000 +0:19 5.000000 +0:19 5.000000 +0:19 move second child to first child ( temp float) +0:19 direct index ( temp float) +0:19 direct index ( temp 4-component vector of float) +0:19 'm' ( temp 3X4 matrix of float) +0:19 Constant: +0:19 1 (const int) +0:19 Constant: +0:19 0 (const int) +0:19 direct index ( temp float) +0:19 'intermVec' ( temp 3-component vector of float) +0:19 Constant: +0:19 0 (const int) +0:19 move second child to first child ( temp float) +0:19 direct index ( temp float) +0:19 direct index ( temp 4-component vector of float) +0:19 'm' ( temp 3X4 matrix of float) +0:19 Constant: +0:19 0 (const int) +0:19 Constant: +0:19 1 (const int) +0:19 direct index ( temp float) +0:19 'intermVec' ( temp 3-component vector of float) +0:19 Constant: +0:19 1 (const int) +0:19 move second child to first child ( temp float) +0:19 direct index ( temp float) +0:19 direct index ( temp 4-component vector of float) +0:19 'm' ( temp 3X4 matrix of float) +0:19 Constant: +0:19 2 (const int) +0:19 Constant: +0:19 0 (const int) +0:19 direct index ( temp float) +0:19 'intermVec' ( temp 3-component vector of float) +0:19 Constant: +0:19 2 (const int) +0:20 Sequence +0:20 move second child to first child ( temp 3-component vector of float) +0:20 'intermVec' ( temp 3-component vector of float) +0:20 vector-scale ( temp 3-component vector of float) +0:20 Constant: +0:20 2.000000 +0:20 'f3' ( temp 3-component vector of float) +0:20 move second child to first child ( temp float) +0:20 direct index ( temp float) +0:20 direct index ( temp 4-component vector of float) +0:20 'm' ( temp 3X4 matrix of float) +0:20 Constant: +0:20 0 (const int) +0:20 Constant: +0:20 0 (const int) +0:20 direct index ( temp float) +0:20 'intermVec' ( temp 3-component vector of float) +0:20 Constant: +0:20 0 (const int) +0:20 move second child to first child ( temp float) +0:20 direct index ( temp float) +0:20 direct index ( temp 4-component vector of float) +0:20 'm' ( temp 3X4 matrix of float) +0:20 Constant: +0:20 0 (const int) +0:20 Constant: +0:20 1 (const int) +0:20 direct index ( temp float) +0:20 'intermVec' ( temp 3-component vector of float) +0:20 Constant: +0:20 1 (const int) +0:20 move second child to first child ( temp float) +0:20 direct index ( temp float) +0:20 direct index ( temp 4-component vector of float) +0:20 'm' ( temp 3X4 matrix of float) +0:20 Constant: +0:20 1 (const int) +0:20 Constant: +0:20 0 (const int) +0:20 direct index ( temp float) +0:20 'intermVec' ( temp 3-component vector of float) +0:20 Constant: +0:20 2 (const int) +0:23 move second child to first child ( temp 3-component vector of float) +0:23 'f3' ( temp 3-component vector of float) +0:23 matrix swizzle ( temp 3-component vector of float) +0:23 'm' ( temp 3X4 matrix of float) +0:23 Sequence +0:23 Constant: +0:23 1 (const int) +0:23 Constant: +0:23 0 (const int) +0:23 Constant: +0:23 0 (const int) +0:23 Constant: +0:23 1 (const int) +0:23 Constant: +0:23 2 (const int) +0:23 Constant: +0:23 0 (const int) +0:2 Function Definition: ShaderFunction( ( temp void) +0:2 Function Parameters: +0:? Sequence +0:2 move second child to first child ( temp float) +0:? 'inf' ( temp float) +0:? 'inf' (layout( location=0) in float) +0:2 Function Call: @ShaderFunction(f1; ( temp void) +0:? 'inf' ( temp float) +0:27 Function Definition: createMat3x3(vf3;vf3;vf3; ( temp 3X3 matrix of float) +0:27 Function Parameters: +0:27 'a' ( in 3-component vector of float) +0:27 'b' ( in 3-component vector of float) +0:27 'c' ( in 3-component vector of float) +0:? Sequence +0:? Sequence +0:29 move second child to first child ( temp float) +0:29 direct index ( temp float) +0:29 direct index ( temp 3-component vector of float) +0:29 'm' ( temp 3X3 matrix of float) +0:29 Constant: +0:29 0 (const int) +0:29 Constant: +0:29 0 (const int) +0:29 direct index ( temp float) +0:29 'a' ( in 3-component vector of float) +0:29 Constant: +0:29 0 (const int) +0:29 move second child to first child ( temp float) +0:29 direct index ( temp float) +0:29 direct index ( temp 3-component vector of float) +0:29 'm' ( temp 3X3 matrix of float) +0:29 Constant: +0:29 1 (const int) +0:29 Constant: +0:29 0 (const int) +0:29 direct index ( temp float) +0:29 'a' ( in 3-component vector of float) +0:29 Constant: +0:29 1 (const int) +0:29 move second child to first child ( temp float) +0:29 direct index ( temp float) +0:29 direct index ( temp 3-component vector of float) +0:29 'm' ( temp 3X3 matrix of float) +0:29 Constant: +0:29 2 (const int) +0:29 Constant: +0:29 0 (const int) +0:29 direct index ( temp float) +0:29 'a' ( in 3-component vector of float) +0:29 Constant: +0:29 2 (const int) +0:? Sequence +0:30 move second child to first child ( temp float) +0:30 direct index ( temp float) +0:30 direct index ( temp 3-component vector of float) +0:30 'm' ( temp 3X3 matrix of float) +0:30 Constant: +0:30 0 (const int) +0:30 Constant: +0:30 1 (const int) +0:30 direct index ( temp float) +0:30 'b' ( in 3-component vector of float) +0:30 Constant: +0:30 0 (const int) +0:30 move second child to first child ( temp float) +0:30 direct index ( temp float) +0:30 direct index ( temp 3-component vector of float) +0:30 'm' ( temp 3X3 matrix of float) +0:30 Constant: +0:30 1 (const int) +0:30 Constant: +0:30 1 (const int) +0:30 direct index ( temp float) +0:30 'b' ( in 3-component vector of float) +0:30 Constant: +0:30 1 (const int) +0:30 move second child to first child ( temp float) +0:30 direct index ( temp float) +0:30 direct index ( temp 3-component vector of float) +0:30 'm' ( temp 3X3 matrix of float) +0:30 Constant: +0:30 2 (const int) +0:30 Constant: +0:30 1 (const int) +0:30 direct index ( temp float) +0:30 'b' ( in 3-component vector of float) +0:30 Constant: +0:30 2 (const int) +0:? Sequence +0:31 move second child to first child ( temp float) +0:31 direct index ( temp float) +0:31 direct index ( temp 3-component vector of float) +0:31 'm' ( temp 3X3 matrix of float) +0:31 Constant: +0:31 0 (const int) +0:31 Constant: +0:31 2 (const int) +0:31 direct index ( temp float) +0:31 'c' ( in 3-component vector of float) +0:31 Constant: +0:31 0 (const int) +0:31 move second child to first child ( temp float) +0:31 direct index ( temp float) +0:31 direct index ( temp 3-component vector of float) +0:31 'm' ( temp 3X3 matrix of float) +0:31 Constant: +0:31 1 (const int) +0:31 Constant: +0:31 2 (const int) +0:31 direct index ( temp float) +0:31 'c' ( in 3-component vector of float) +0:31 Constant: +0:31 1 (const int) +0:31 move second child to first child ( temp float) +0:31 direct index ( temp float) +0:31 direct index ( temp 3-component vector of float) +0:31 'm' ( temp 3X3 matrix of float) +0:31 Constant: +0:31 2 (const int) +0:31 Constant: +0:31 2 (const int) +0:31 direct index ( temp float) +0:31 'c' ( in 3-component vector of float) +0:31 Constant: +0:31 2 (const int) +0:32 Branch: Return with expression +0:32 'm' ( temp 3X3 matrix of float) +0:? Linker Objects +0:? 'inf' (layout( location=0) in float) + + +Linked vertex stage: + + +Shader version: 450 +0:? Sequence +0:2 Function Definition: @ShaderFunction(f1; ( temp void) +0:2 Function Parameters: +0:2 'inf' ( in float) +0:? Sequence +0:7 move second child to first child ( temp float) +0:7 direct index ( temp float) +0:7 direct index ( temp 4-component vector of float) +0:7 'm' ( temp 3X4 matrix of float) +0:7 Constant: +0:7 2 (const int) +0:7 Constant: +0:7 3 (const int) +0:7 Constant: +0:7 1.000000 +0:8 move second child to first child ( temp float) +0:8 direct index ( temp float) +0:8 direct index ( temp 4-component vector of float) +0:8 'm' ( temp 3X4 matrix of float) +0:8 Constant: +0:8 2 (const int) +0:8 Constant: +0:8 3 (const int) +0:8 Constant: +0:8 2.000000 +0:9 move second child to first child ( temp float) +0:9 direct index ( temp float) +0:9 direct index ( temp 4-component vector of float) +0:9 'm' ( temp 3X4 matrix of float) +0:9 Constant: +0:9 2 (const int) +0:9 Constant: +0:9 3 (const int) +0:9 Constant: +0:9 2.000000 +0:11 move second child to first child ( temp 4-component vector of float) +0:11 direct index ( temp 4-component vector of float) +0:11 'm' ( temp 3X4 matrix of float) +0:11 Constant: +0:11 0 (const int) +0:11 Constant: +0:11 3.000000 +0:11 3.000000 +0:11 3.000000 +0:11 3.000000 +0:12 move second child to first child ( temp 4-component vector of float) +0:12 direct index ( temp 4-component vector of float) +0:12 'm' ( temp 3X4 matrix of float) +0:12 Constant: +0:12 1 (const int) +0:12 Constant: +0:12 3.000000 +0:12 3.000000 +0:12 3.000000 +0:12 3.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' ( temp 3X4 matrix of float) +0:13 Constant: +0:13 1 (const int) +0:13 Constant: +0:13 3.000000 +0:13 3.000000 +0:13 3.000000 +0:13 3.000000 +0:? Sequence +0:18 move second child to first child ( temp float) +0:18 direct index ( temp float) +0:18 direct index ( temp 4-component vector of float) +0:18 'm' ( temp 3X4 matrix of float) +0:18 Constant: +0:18 0 (const int) +0:18 Constant: +0:18 0 (const int) +0:18 direct index ( temp float) +0:18 'f3' ( temp 3-component vector of float) +0:18 Constant: +0:18 0 (const int) +0:18 move second child to first child ( temp float) +0:18 direct index ( temp float) +0:18 direct index ( temp 4-component vector of float) +0:18 'm' ( temp 3X4 matrix of float) +0:18 Constant: +0:18 1 (const int) +0:18 Constant: +0:18 1 (const int) +0:18 direct index ( temp float) +0:18 'f3' ( temp 3-component vector of float) +0:18 Constant: +0:18 1 (const int) +0:18 move second child to first child ( temp float) +0:18 direct index ( temp float) +0:18 direct index ( temp 4-component vector of float) +0:18 'm' ( temp 3X4 matrix of float) +0:18 Constant: +0:18 1 (const int) +0:18 Constant: +0:18 2 (const int) +0:18 direct index ( temp float) +0:18 'f3' ( temp 3-component vector of float) +0:18 Constant: +0:18 2 (const int) +0:19 Sequence +0:19 move second child to first child ( temp 3-component vector of float) +0:19 'intermVec' ( temp 3-component vector of float) +0:19 Constant: +0:19 5.000000 +0:19 5.000000 +0:19 5.000000 +0:19 move second child to first child ( temp float) +0:19 direct index ( temp float) +0:19 direct index ( temp 4-component vector of float) +0:19 'm' ( temp 3X4 matrix of float) +0:19 Constant: +0:19 1 (const int) +0:19 Constant: +0:19 0 (const int) +0:19 direct index ( temp float) +0:19 'intermVec' ( temp 3-component vector of float) +0:19 Constant: +0:19 0 (const int) +0:19 move second child to first child ( temp float) +0:19 direct index ( temp float) +0:19 direct index ( temp 4-component vector of float) +0:19 'm' ( temp 3X4 matrix of float) +0:19 Constant: +0:19 0 (const int) +0:19 Constant: +0:19 1 (const int) +0:19 direct index ( temp float) +0:19 'intermVec' ( temp 3-component vector of float) +0:19 Constant: +0:19 1 (const int) +0:19 move second child to first child ( temp float) +0:19 direct index ( temp float) +0:19 direct index ( temp 4-component vector of float) +0:19 'm' ( temp 3X4 matrix of float) +0:19 Constant: +0:19 2 (const int) +0:19 Constant: +0:19 0 (const int) +0:19 direct index ( temp float) +0:19 'intermVec' ( temp 3-component vector of float) +0:19 Constant: +0:19 2 (const int) +0:20 Sequence +0:20 move second child to first child ( temp 3-component vector of float) +0:20 'intermVec' ( temp 3-component vector of float) +0:20 vector-scale ( temp 3-component vector of float) +0:20 Constant: +0:20 2.000000 +0:20 'f3' ( temp 3-component vector of float) +0:20 move second child to first child ( temp float) +0:20 direct index ( temp float) +0:20 direct index ( temp 4-component vector of float) +0:20 'm' ( temp 3X4 matrix of float) +0:20 Constant: +0:20 0 (const int) +0:20 Constant: +0:20 0 (const int) +0:20 direct index ( temp float) +0:20 'intermVec' ( temp 3-component vector of float) +0:20 Constant: +0:20 0 (const int) +0:20 move second child to first child ( temp float) +0:20 direct index ( temp float) +0:20 direct index ( temp 4-component vector of float) +0:20 'm' ( temp 3X4 matrix of float) +0:20 Constant: +0:20 0 (const int) +0:20 Constant: +0:20 1 (const int) +0:20 direct index ( temp float) +0:20 'intermVec' ( temp 3-component vector of float) +0:20 Constant: +0:20 1 (const int) +0:20 move second child to first child ( temp float) +0:20 direct index ( temp float) +0:20 direct index ( temp 4-component vector of float) +0:20 'm' ( temp 3X4 matrix of float) +0:20 Constant: +0:20 1 (const int) +0:20 Constant: +0:20 0 (const int) +0:20 direct index ( temp float) +0:20 'intermVec' ( temp 3-component vector of float) +0:20 Constant: +0:20 2 (const int) +0:23 move second child to first child ( temp 3-component vector of float) +0:23 'f3' ( temp 3-component vector of float) +0:23 matrix swizzle ( temp 3-component vector of float) +0:23 'm' ( temp 3X4 matrix of float) +0:23 Sequence +0:23 Constant: +0:23 1 (const int) +0:23 Constant: +0:23 0 (const int) +0:23 Constant: +0:23 0 (const int) +0:23 Constant: +0:23 1 (const int) +0:23 Constant: +0:23 2 (const int) +0:23 Constant: +0:23 0 (const int) +0:2 Function Definition: ShaderFunction( ( temp void) +0:2 Function Parameters: +0:? Sequence +0:2 move second child to first child ( temp float) +0:? 'inf' ( temp float) +0:? 'inf' (layout( location=0) in float) +0:2 Function Call: @ShaderFunction(f1; ( temp void) +0:? 'inf' ( temp float) +0:27 Function Definition: createMat3x3(vf3;vf3;vf3; ( temp 3X3 matrix of float) +0:27 Function Parameters: +0:27 'a' ( in 3-component vector of float) +0:27 'b' ( in 3-component vector of float) +0:27 'c' ( in 3-component vector of float) +0:? Sequence +0:? Sequence +0:29 move second child to first child ( temp float) +0:29 direct index ( temp float) +0:29 direct index ( temp 3-component vector of float) +0:29 'm' ( temp 3X3 matrix of float) +0:29 Constant: +0:29 0 (const int) +0:29 Constant: +0:29 0 (const int) +0:29 direct index ( temp float) +0:29 'a' ( in 3-component vector of float) +0:29 Constant: +0:29 0 (const int) +0:29 move second child to first child ( temp float) +0:29 direct index ( temp float) +0:29 direct index ( temp 3-component vector of float) +0:29 'm' ( temp 3X3 matrix of float) +0:29 Constant: +0:29 1 (const int) +0:29 Constant: +0:29 0 (const int) +0:29 direct index ( temp float) +0:29 'a' ( in 3-component vector of float) +0:29 Constant: +0:29 1 (const int) +0:29 move second child to first child ( temp float) +0:29 direct index ( temp float) +0:29 direct index ( temp 3-component vector of float) +0:29 'm' ( temp 3X3 matrix of float) +0:29 Constant: +0:29 2 (const int) +0:29 Constant: +0:29 0 (const int) +0:29 direct index ( temp float) +0:29 'a' ( in 3-component vector of float) +0:29 Constant: +0:29 2 (const int) +0:? Sequence +0:30 move second child to first child ( temp float) +0:30 direct index ( temp float) +0:30 direct index ( temp 3-component vector of float) +0:30 'm' ( temp 3X3 matrix of float) +0:30 Constant: +0:30 0 (const int) +0:30 Constant: +0:30 1 (const int) +0:30 direct index ( temp float) +0:30 'b' ( in 3-component vector of float) +0:30 Constant: +0:30 0 (const int) +0:30 move second child to first child ( temp float) +0:30 direct index ( temp float) +0:30 direct index ( temp 3-component vector of float) +0:30 'm' ( temp 3X3 matrix of float) +0:30 Constant: +0:30 1 (const int) +0:30 Constant: +0:30 1 (const int) +0:30 direct index ( temp float) +0:30 'b' ( in 3-component vector of float) +0:30 Constant: +0:30 1 (const int) +0:30 move second child to first child ( temp float) +0:30 direct index ( temp float) +0:30 direct index ( temp 3-component vector of float) +0:30 'm' ( temp 3X3 matrix of float) +0:30 Constant: +0:30 2 (const int) +0:30 Constant: +0:30 1 (const int) +0:30 direct index ( temp float) +0:30 'b' ( in 3-component vector of float) +0:30 Constant: +0:30 2 (const int) +0:? Sequence +0:31 move second child to first child ( temp float) +0:31 direct index ( temp float) +0:31 direct index ( temp 3-component vector of float) +0:31 'm' ( temp 3X3 matrix of float) +0:31 Constant: +0:31 0 (const int) +0:31 Constant: +0:31 2 (const int) +0:31 direct index ( temp float) +0:31 'c' ( in 3-component vector of float) +0:31 Constant: +0:31 0 (const int) +0:31 move second child to first child ( temp float) +0:31 direct index ( temp float) +0:31 direct index ( temp 3-component vector of float) +0:31 'm' ( temp 3X3 matrix of float) +0:31 Constant: +0:31 1 (const int) +0:31 Constant: +0:31 2 (const int) +0:31 direct index ( temp float) +0:31 'c' ( in 3-component vector of float) +0:31 Constant: +0:31 1 (const int) +0:31 move second child to first child ( temp float) +0:31 direct index ( temp float) +0:31 direct index ( temp 3-component vector of float) +0:31 'm' ( temp 3X3 matrix of float) +0:31 Constant: +0:31 2 (const int) +0:31 Constant: +0:31 2 (const int) +0:31 direct index ( temp float) +0:31 'c' ( in 3-component vector of float) +0:31 Constant: +0:31 2 (const int) +0:32 Branch: Return with expression +0:32 'm' ( temp 3X3 matrix of float) +0:? Linker Objects +0:? 'inf' (layout( location=0) in float) + +Missing functionality: matrix swizzle +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 118 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "ShaderFunction" 81 + Name 4 "ShaderFunction" + Name 10 "@ShaderFunction(f1;" + Name 9 "inf" + Name 19 "createMat3x3(vf3;vf3;vf3;" + Name 16 "a" + Name 17 "b" + Name 18 "c" + Name 24 "m" + Name 42 "f3" + Name 55 "intermVec" + Name 67 "intermVec" + Name 79 "inf" + Name 81 "inf" + Name 83 "param" + Name 87 "m" + Decorate 81(inf) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypePointer Function 6(float) + 8: TypeFunction 2 7(ptr) + 12: TypeVector 6(float) 3 + 13: TypePointer Function 12(fvec3) + 14: TypeMatrix 12(fvec3) 3 + 15: TypeFunction 14 13(ptr) 13(ptr) 13(ptr) + 21: TypeVector 6(float) 4 + 22: TypeMatrix 21(fvec4) 3 + 23: TypePointer Function 22 + 25: TypeInt 32 1 + 26: 25(int) Constant 2 + 27: 6(float) Constant 1065353216 + 28: TypeInt 32 0 + 29: 28(int) Constant 3 + 31: 6(float) Constant 1073741824 + 34: 25(int) Constant 0 + 35: 6(float) Constant 1077936128 + 36: 21(fvec4) ConstantComposite 35 35 35 35 + 37: TypePointer Function 21(fvec4) + 39: 25(int) Constant 1 + 43: 28(int) Constant 0 + 47: 28(int) Constant 1 + 51: 28(int) Constant 2 + 56: 6(float) Constant 1084227584 + 57: 12(fvec3) ConstantComposite 56 56 56 + 80: TypePointer Input 6(float) + 81(inf): 80(ptr) Variable Input + 86: TypePointer Function 14 +4(ShaderFunction): 2 Function None 3 + 5: Label + 79(inf): 7(ptr) Variable Function + 83(param): 7(ptr) Variable Function + 82: 6(float) Load 81(inf) + Store 79(inf) 82 + 84: 6(float) Load 79(inf) + Store 83(param) 84 + 85: 2 FunctionCall 10(@ShaderFunction(f1;) 83(param) + Return + FunctionEnd +10(@ShaderFunction(f1;): 2 Function None 8 + 9(inf): 7(ptr) FunctionParameter + 11: Label + 24(m): 23(ptr) Variable Function + 42(f3): 13(ptr) Variable Function + 55(intermVec): 13(ptr) Variable Function + 67(intermVec): 13(ptr) Variable Function + 30: 7(ptr) AccessChain 24(m) 26 29 + Store 30 27 + 32: 7(ptr) AccessChain 24(m) 26 29 + Store 32 31 + 33: 7(ptr) AccessChain 24(m) 26 29 + Store 33 31 + 38: 37(ptr) AccessChain 24(m) 34 + Store 38 36 + 40: 37(ptr) AccessChain 24(m) 39 + Store 40 36 + 41: 37(ptr) AccessChain 24(m) 39 + Store 41 36 + 44: 7(ptr) AccessChain 42(f3) 43 + 45: 6(float) Load 44 + 46: 7(ptr) AccessChain 24(m) 34 43 + Store 46 45 + 48: 7(ptr) AccessChain 42(f3) 47 + 49: 6(float) Load 48 + 50: 7(ptr) AccessChain 24(m) 39 47 + Store 50 49 + 52: 7(ptr) AccessChain 42(f3) 51 + 53: 6(float) Load 52 + 54: 7(ptr) AccessChain 24(m) 39 51 + Store 54 53 + Store 55(intermVec) 57 + 58: 7(ptr) AccessChain 55(intermVec) 43 + 59: 6(float) Load 58 + 60: 7(ptr) AccessChain 24(m) 39 43 + Store 60 59 + 61: 7(ptr) AccessChain 55(intermVec) 47 + 62: 6(float) Load 61 + 63: 7(ptr) AccessChain 24(m) 34 47 + Store 63 62 + 64: 7(ptr) AccessChain 55(intermVec) 51 + 65: 6(float) Load 64 + 66: 7(ptr) AccessChain 24(m) 26 43 + Store 66 65 + 68: 12(fvec3) Load 42(f3) + 69: 12(fvec3) VectorTimesScalar 68 31 + Store 67(intermVec) 69 + 70: 7(ptr) AccessChain 67(intermVec) 43 + 71: 6(float) Load 70 + 72: 7(ptr) AccessChain 24(m) 34 43 + Store 72 71 + 73: 7(ptr) AccessChain 67(intermVec) 47 + 74: 6(float) Load 73 + 75: 7(ptr) AccessChain 24(m) 34 47 + Store 75 74 + 76: 7(ptr) AccessChain 67(intermVec) 51 + 77: 6(float) Load 76 + 78: 7(ptr) AccessChain 24(m) 39 43 + Store 78 77 + Store 42(f3) 34 + Return + FunctionEnd +19(createMat3x3(vf3;vf3;vf3;): 14 Function None 15 + 16(a): 13(ptr) FunctionParameter + 17(b): 13(ptr) FunctionParameter + 18(c): 13(ptr) FunctionParameter + 20: Label + 87(m): 86(ptr) Variable Function + 88: 7(ptr) AccessChain 16(a) 43 + 89: 6(float) Load 88 + 90: 7(ptr) AccessChain 87(m) 34 43 + Store 90 89 + 91: 7(ptr) AccessChain 16(a) 47 + 92: 6(float) Load 91 + 93: 7(ptr) AccessChain 87(m) 39 43 + Store 93 92 + 94: 7(ptr) AccessChain 16(a) 51 + 95: 6(float) Load 94 + 96: 7(ptr) AccessChain 87(m) 26 43 + Store 96 95 + 97: 7(ptr) AccessChain 17(b) 43 + 98: 6(float) Load 97 + 99: 7(ptr) AccessChain 87(m) 34 47 + Store 99 98 + 100: 7(ptr) AccessChain 17(b) 47 + 101: 6(float) Load 100 + 102: 7(ptr) AccessChain 87(m) 39 47 + Store 102 101 + 103: 7(ptr) AccessChain 17(b) 51 + 104: 6(float) Load 103 + 105: 7(ptr) AccessChain 87(m) 26 47 + Store 105 104 + 106: 7(ptr) AccessChain 18(c) 43 + 107: 6(float) Load 106 + 108: 7(ptr) AccessChain 87(m) 34 51 + Store 108 107 + 109: 7(ptr) AccessChain 18(c) 47 + 110: 6(float) Load 109 + 111: 7(ptr) AccessChain 87(m) 39 51 + Store 111 110 + 112: 7(ptr) AccessChain 18(c) 51 + 113: 6(float) Load 112 + 114: 7(ptr) AccessChain 87(m) 26 51 + Store 114 113 + 115: 14 Load 87(m) + ReturnValue 115 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matrixindex.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matrixindex.frag.out new file mode 100644 index 0000000..6f2339c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matrixindex.frag.out @@ -0,0 +1,420 @@ +hlsl.matrixindex.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:10 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color}) +0:10 Function Parameters: +0:? Sequence +0:22 Sequence +0:22 move second child to first child ( temp float) +0:22 'e1_00' ( temp float) +0:22 Constant: +0:22 10.000000 +0:23 Sequence +0:23 move second child to first child ( temp float) +0:23 'e1_01' ( temp float) +0:23 Constant: +0:23 11.000000 +0:24 Sequence +0:24 move second child to first child ( temp float) +0:24 'e1_10' ( temp float) +0:24 Constant: +0:24 12.000000 +0:25 Sequence +0:25 move second child to first child ( temp float) +0:25 'e1_11' ( temp float) +0:25 Constant: +0:25 13.000000 +0:26 Sequence +0:26 move second child to first child ( temp float) +0:26 'e1_20' ( temp float) +0:26 Constant: +0:26 14.000000 +0:27 Sequence +0:27 move second child to first child ( temp float) +0:27 'e1_21' ( temp float) +0:27 Constant: +0:27 15.000000 +0:29 Sequence +0:29 move second child to first child ( temp float) +0:29 'e2_00' ( temp float) +0:29 Constant: +0:29 20.000000 +0:30 Sequence +0:30 move second child to first child ( temp float) +0:30 'e2_01' ( temp float) +0:30 Constant: +0:30 21.000000 +0:31 Sequence +0:31 move second child to first child ( temp float) +0:31 'e2_10' ( temp float) +0:31 Constant: +0:31 22.000000 +0:32 Sequence +0:32 move second child to first child ( temp float) +0:32 'e2_11' ( temp float) +0:32 Constant: +0:32 23.000000 +0:33 Sequence +0:33 move second child to first child ( temp float) +0:33 'e2_20' ( temp float) +0:33 Constant: +0:33 24.000000 +0:34 Sequence +0:34 move second child to first child ( temp float) +0:34 'e2_21' ( temp float) +0:34 Constant: +0:34 25.000000 +0:39 Sequence +0:39 move second child to first child ( temp 2-component vector of float) +0:39 'r0a' ( temp 2-component vector of float) +0:39 Constant: +0:39 10.000000 +0:39 11.000000 +0:40 Sequence +0:40 move second child to first child ( temp 2-component vector of float) +0:40 'r1a' ( temp 2-component vector of float) +0:40 Constant: +0:40 12.000000 +0:40 13.000000 +0:41 Sequence +0:41 move second child to first child ( temp 2-component vector of float) +0:41 'r2a' ( temp 2-component vector of float) +0:41 Constant: +0:41 14.000000 +0:41 15.000000 +0:43 Sequence +0:43 move second child to first child ( temp 2-component vector of float) +0:43 'r0b' ( temp 2-component vector of float) +0:43 indirect index ( temp 2-component vector of float) +0:43 Constant: +0:43 20.000000 +0:43 21.000000 +0:43 22.000000 +0:43 23.000000 +0:43 24.000000 +0:43 25.000000 +0:43 idx: direct index for structure ( uniform int) +0:43 'anon@0' (layout( row_major std140) uniform block{ uniform int idx, uniform 3X2 matrix of float um}) +0:43 Constant: +0:43 0 (const uint) +0:44 Sequence +0:44 move second child to first child ( temp 2-component vector of float) +0:44 'r0c' ( temp 2-component vector of float) +0:44 indirect index ( temp 2-component vector of float) +0:44 um: direct index for structure ( uniform 3X2 matrix of float) +0:44 'anon@0' (layout( row_major std140) uniform block{ uniform int idx, uniform 3X2 matrix of float um}) +0:44 Constant: +0:44 1 (const uint) +0:44 idx: direct index for structure ( uniform int) +0:44 'anon@0' (layout( row_major std140) uniform block{ uniform int idx, uniform 3X2 matrix of float um}) +0:44 Constant: +0:44 0 (const uint) +0:47 move second child to first child ( temp 4-component vector of float) +0:47 Color: direct index for structure ( temp 4-component vector of float) +0:47 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:47 Constant: +0:47 0 (const int) +0:47 Construct vec4 ( temp 4-component vector of float) +0:47 'e2_11' ( temp float) +0:48 Branch: Return with expression +0:48 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:10 Function Definition: main( ( temp void) +0:10 Function Parameters: +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: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) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:10 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color}) +0:10 Function Parameters: +0:? Sequence +0:22 Sequence +0:22 move second child to first child ( temp float) +0:22 'e1_00' ( temp float) +0:22 Constant: +0:22 10.000000 +0:23 Sequence +0:23 move second child to first child ( temp float) +0:23 'e1_01' ( temp float) +0:23 Constant: +0:23 11.000000 +0:24 Sequence +0:24 move second child to first child ( temp float) +0:24 'e1_10' ( temp float) +0:24 Constant: +0:24 12.000000 +0:25 Sequence +0:25 move second child to first child ( temp float) +0:25 'e1_11' ( temp float) +0:25 Constant: +0:25 13.000000 +0:26 Sequence +0:26 move second child to first child ( temp float) +0:26 'e1_20' ( temp float) +0:26 Constant: +0:26 14.000000 +0:27 Sequence +0:27 move second child to first child ( temp float) +0:27 'e1_21' ( temp float) +0:27 Constant: +0:27 15.000000 +0:29 Sequence +0:29 move second child to first child ( temp float) +0:29 'e2_00' ( temp float) +0:29 Constant: +0:29 20.000000 +0:30 Sequence +0:30 move second child to first child ( temp float) +0:30 'e2_01' ( temp float) +0:30 Constant: +0:30 21.000000 +0:31 Sequence +0:31 move second child to first child ( temp float) +0:31 'e2_10' ( temp float) +0:31 Constant: +0:31 22.000000 +0:32 Sequence +0:32 move second child to first child ( temp float) +0:32 'e2_11' ( temp float) +0:32 Constant: +0:32 23.000000 +0:33 Sequence +0:33 move second child to first child ( temp float) +0:33 'e2_20' ( temp float) +0:33 Constant: +0:33 24.000000 +0:34 Sequence +0:34 move second child to first child ( temp float) +0:34 'e2_21' ( temp float) +0:34 Constant: +0:34 25.000000 +0:39 Sequence +0:39 move second child to first child ( temp 2-component vector of float) +0:39 'r0a' ( temp 2-component vector of float) +0:39 Constant: +0:39 10.000000 +0:39 11.000000 +0:40 Sequence +0:40 move second child to first child ( temp 2-component vector of float) +0:40 'r1a' ( temp 2-component vector of float) +0:40 Constant: +0:40 12.000000 +0:40 13.000000 +0:41 Sequence +0:41 move second child to first child ( temp 2-component vector of float) +0:41 'r2a' ( temp 2-component vector of float) +0:41 Constant: +0:41 14.000000 +0:41 15.000000 +0:43 Sequence +0:43 move second child to first child ( temp 2-component vector of float) +0:43 'r0b' ( temp 2-component vector of float) +0:43 indirect index ( temp 2-component vector of float) +0:43 Constant: +0:43 20.000000 +0:43 21.000000 +0:43 22.000000 +0:43 23.000000 +0:43 24.000000 +0:43 25.000000 +0:43 idx: direct index for structure ( uniform int) +0:43 'anon@0' (layout( row_major std140) uniform block{ uniform int idx, uniform 3X2 matrix of float um}) +0:43 Constant: +0:43 0 (const uint) +0:44 Sequence +0:44 move second child to first child ( temp 2-component vector of float) +0:44 'r0c' ( temp 2-component vector of float) +0:44 indirect index ( temp 2-component vector of float) +0:44 um: direct index for structure ( uniform 3X2 matrix of float) +0:44 'anon@0' (layout( row_major std140) uniform block{ uniform int idx, uniform 3X2 matrix of float um}) +0:44 Constant: +0:44 1 (const uint) +0:44 idx: direct index for structure ( uniform int) +0:44 'anon@0' (layout( row_major std140) uniform block{ uniform int idx, uniform 3X2 matrix of float um}) +0:44 Constant: +0:44 0 (const uint) +0:47 move second child to first child ( temp 4-component vector of float) +0:47 Color: direct index for structure ( temp 4-component vector of float) +0:47 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:47 Constant: +0:47 0 (const int) +0:47 Construct vec4 ( temp 4-component vector of float) +0:47 'e2_11' ( temp float) +0:48 Branch: Return with expression +0:48 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:10 Function Definition: main( ( temp void) +0:10 Function Parameters: +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: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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 83 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 80 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + Name 10 "@main(" + Name 13 "e1_00" + Name 15 "e1_01" + Name 17 "e1_10" + Name 19 "e1_11" + Name 21 "e1_20" + Name 23 "e1_21" + Name 25 "e2_00" + Name 27 "e2_01" + Name 29 "e2_10" + Name 31 "e2_11" + Name 33 "e2_20" + Name 35 "e2_21" + Name 39 "r0a" + Name 41 "r1a" + Name 43 "r2a" + Name 45 "r0b" + Name 52 "$Global" + MemberName 52($Global) 0 "idx" + MemberName 52($Global) 1 "um" + Name 54 "" + Name 60 "indexable" + Name 63 "r0c" + Name 71 "psout" + Name 80 "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 + 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: TypePointer Function 6(float) + 14: 6(float) Constant 1092616192 + 16: 6(float) Constant 1093664768 + 18: 6(float) Constant 1094713344 + 20: 6(float) Constant 1095761920 + 22: 6(float) Constant 1096810496 + 24: 6(float) Constant 1097859072 + 26: 6(float) Constant 1101004800 + 28: 6(float) Constant 1101529088 + 30: 6(float) Constant 1102053376 + 32: 6(float) Constant 1102577664 + 34: 6(float) Constant 1103101952 + 36: 6(float) Constant 1103626240 + 37: TypeVector 6(float) 2 + 38: TypePointer Function 37(fvec2) + 40: 37(fvec2) ConstantComposite 14 16 + 42: 37(fvec2) ConstantComposite 18 20 + 44: 37(fvec2) ConstantComposite 22 24 + 46: TypeMatrix 37(fvec2) 3 + 47: 37(fvec2) ConstantComposite 26 28 + 48: 37(fvec2) ConstantComposite 30 32 + 49: 37(fvec2) ConstantComposite 34 36 + 50: 46 ConstantComposite 47 48 49 + 51: TypeInt 32 1 + 52($Global): TypeStruct 51(int) 46 + 53: TypePointer Uniform 52($Global) + 54: 53(ptr) Variable Uniform + 55: 51(int) Constant 0 + 56: TypePointer Uniform 51(int) + 59: TypePointer Function 46 + 64: 51(int) Constant 1 + 67: TypePointer Uniform 37(fvec2) + 70: TypePointer Function 8(PS_OUTPUT) + 74: TypePointer Function 7(fvec4) + 79: TypePointer Output 7(fvec4) + 80(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 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 13(e1_00): 12(ptr) Variable Function + 15(e1_01): 12(ptr) Variable Function + 17(e1_10): 12(ptr) Variable Function + 19(e1_11): 12(ptr) Variable Function + 21(e1_20): 12(ptr) Variable Function + 23(e1_21): 12(ptr) Variable Function + 25(e2_00): 12(ptr) Variable Function + 27(e2_01): 12(ptr) Variable Function + 29(e2_10): 12(ptr) Variable Function + 31(e2_11): 12(ptr) Variable Function + 33(e2_20): 12(ptr) Variable Function + 35(e2_21): 12(ptr) Variable Function + 39(r0a): 38(ptr) Variable Function + 41(r1a): 38(ptr) Variable Function + 43(r2a): 38(ptr) Variable Function + 45(r0b): 38(ptr) Variable Function + 60(indexable): 59(ptr) Variable Function + 63(r0c): 38(ptr) Variable Function + 71(psout): 70(ptr) Variable Function + Store 13(e1_00) 14 + Store 15(e1_01) 16 + Store 17(e1_10) 18 + Store 19(e1_11) 20 + Store 21(e1_20) 22 + Store 23(e1_21) 24 + Store 25(e2_00) 26 + Store 27(e2_01) 28 + Store 29(e2_10) 30 + Store 31(e2_11) 32 + Store 33(e2_20) 34 + Store 35(e2_21) 36 + Store 39(r0a) 40 + Store 41(r1a) 42 + Store 43(r2a) 44 + 57: 56(ptr) AccessChain 54 55 + 58: 51(int) Load 57 + Store 60(indexable) 50 + 61: 38(ptr) AccessChain 60(indexable) 58 + 62: 37(fvec2) Load 61 + Store 45(r0b) 62 + 65: 56(ptr) AccessChain 54 55 + 66: 51(int) Load 65 + 68: 67(ptr) AccessChain 54 64 66 + 69: 37(fvec2) Load 68 + Store 63(r0c) 69 + 72: 6(float) Load 31(e2_11) + 73: 7(fvec4) CompositeConstruct 72 72 72 72 + 75: 74(ptr) AccessChain 71(psout) 55 + Store 75 73 + 76:8(PS_OUTPUT) Load 71(psout) + ReturnValue 76 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.max.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.max.frag.out new file mode 100755 index 0000000..6a0762e --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.max.frag.out @@ -0,0 +1,128 @@ +hlsl.max.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:2 Function Definition: @PixelShaderFunction(vf4;vf4; ( temp 4-component vector of float) +0:2 Function Parameters: +0:2 'input1' ( in 4-component vector of float) +0:2 'input2' ( in 4-component vector of float) +0:? Sequence +0:3 Branch: Return with expression +0:3 max ( temp 4-component vector of float) +0:3 'input1' ( in 4-component vector of float) +0:3 'input2' ( in 4-component vector of 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:? 'input1' ( temp 4-component vector of float) +0:? 'input1' (layout( location=0) in 4-component vector of float) +0:2 move second child to first child ( temp 4-component vector of float) +0:? 'input2' ( temp 4-component vector of float) +0:? 'input2' (layout( location=1) in 4-component vector of 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;vf4; ( temp 4-component vector of float) +0:? 'input1' ( temp 4-component vector of float) +0:? 'input2' ( temp 4-component vector of float) +0:? Linker Objects +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) +0:? 'input1' (layout( location=0) in 4-component vector of float) +0:? 'input2' (layout( location=1) in 4-component vector of float) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:2 Function Definition: @PixelShaderFunction(vf4;vf4; ( temp 4-component vector of float) +0:2 Function Parameters: +0:2 'input1' ( in 4-component vector of float) +0:2 'input2' ( in 4-component vector of float) +0:? Sequence +0:3 Branch: Return with expression +0:3 max ( temp 4-component vector of float) +0:3 'input1' ( in 4-component vector of float) +0:3 'input2' ( in 4-component vector of 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:? 'input1' ( temp 4-component vector of float) +0:? 'input1' (layout( location=0) in 4-component vector of float) +0:2 move second child to first child ( temp 4-component vector of float) +0:? 'input2' ( temp 4-component vector of float) +0:? 'input2' (layout( location=1) in 4-component vector of 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;vf4; ( temp 4-component vector of float) +0:? 'input1' ( temp 4-component vector of float) +0:? 'input2' ( temp 4-component vector of float) +0:? Linker Objects +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) +0:? 'input1' (layout( location=0) in 4-component vector of float) +0:? 'input2' (layout( location=1) in 4-component vector of float) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 33 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "PixelShaderFunction" 21 24 27 + ExecutionMode 4 OriginUpperLeft + Name 4 "PixelShaderFunction" + Name 12 "@PixelShaderFunction(vf4;vf4;" + Name 10 "input1" + Name 11 "input2" + Name 19 "input1" + Name 21 "input1" + Name 23 "input2" + Name 24 "input2" + Name 27 "@entryPointOutput" + Name 28 "param" + Name 30 "param" + Decorate 21(input1) Location 0 + Decorate 24(input2) Location 1 + Decorate 27(@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) 8(ptr) + 20: TypePointer Input 7(fvec4) + 21(input1): 20(ptr) Variable Input + 24(input2): 20(ptr) Variable Input + 26: TypePointer Output 7(fvec4) +27(@entryPointOutput): 26(ptr) Variable Output +4(PixelShaderFunction): 2 Function None 3 + 5: Label + 19(input1): 8(ptr) Variable Function + 23(input2): 8(ptr) Variable Function + 28(param): 8(ptr) Variable Function + 30(param): 8(ptr) Variable Function + 22: 7(fvec4) Load 21(input1) + Store 19(input1) 22 + 25: 7(fvec4) Load 24(input2) + Store 23(input2) 25 + 29: 7(fvec4) Load 19(input1) + Store 28(param) 29 + 31: 7(fvec4) Load 23(input2) + Store 30(param) 31 + 32: 7(fvec4) FunctionCall 12(@PixelShaderFunction(vf4;vf4;) 28(param) 30(param) + Store 27(@entryPointOutput) 32 + Return + FunctionEnd +12(@PixelShaderFunction(vf4;vf4;): 7(fvec4) Function None 9 + 10(input1): 8(ptr) FunctionParameter + 11(input2): 8(ptr) FunctionParameter + 13: Label + 14: 7(fvec4) Load 10(input1) + 15: 7(fvec4) Load 11(input2) + 16: 7(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 14 15 + ReturnValue 16 + 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 new file mode 100644 index 0000000..257d7e4 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.mintypes.frag.out @@ -0,0 +1,237 @@ +hlsl.mintypes.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:9 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color}) +0:9 Function Parameters: +0:? Sequence +0:40 add ( temp mediump 2-component vector of float) +0:40 'mf16_2' ( temp mediump 2-component vector of float) +0:40 'mf16' ( temp mediump float) +0:41 add ( temp mediump 2-component vector of float) +0:41 'mf10_2' ( temp mediump 2-component vector of float) +0:41 'mf10' ( temp mediump float) +0:42 add ( temp mediump 2-component vector of int) +0:42 'mi16_2' ( temp mediump 2-component vector of int) +0:42 'mi16' ( temp mediump int) +0:43 add ( temp mediump 2-component vector of int) +0:43 'mi12_2' ( temp mediump 2-component vector of int) +0:43 'mi12' ( temp mediump int) +0:44 add ( temp mediump 2-component vector of uint) +0:44 'mu16_2' ( temp mediump 2-component vector of uint) +0:44 'mu16' ( temp mediump uint) +0:47 move second child to first child ( temp 4-component vector of float) +0:47 Color: direct index for structure ( temp 4-component vector of float) +0:47 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:47 Constant: +0:47 0 (const int) +0:47 Constant: +0:47 0.000000 +0:47 0.000000 +0:47 0.000000 +0:47 0.000000 +0:48 Branch: Return with expression +0:48 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:9 Function Definition: main( ( temp void) +0:9 Function Parameters: +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: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) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:9 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color}) +0:9 Function Parameters: +0:? Sequence +0:40 add ( temp mediump 2-component vector of float) +0:40 'mf16_2' ( temp mediump 2-component vector of float) +0:40 'mf16' ( temp mediump float) +0:41 add ( temp mediump 2-component vector of float) +0:41 'mf10_2' ( temp mediump 2-component vector of float) +0:41 'mf10' ( temp mediump float) +0:42 add ( temp mediump 2-component vector of int) +0:42 'mi16_2' ( temp mediump 2-component vector of int) +0:42 'mi16' ( temp mediump int) +0:43 add ( temp mediump 2-component vector of int) +0:43 'mi12_2' ( temp mediump 2-component vector of int) +0:43 'mi12' ( temp mediump int) +0:44 add ( temp mediump 2-component vector of uint) +0:44 'mu16_2' ( temp mediump 2-component vector of uint) +0:44 'mu16' ( temp mediump uint) +0:47 move second child to first child ( temp 4-component vector of float) +0:47 Color: direct index for structure ( temp 4-component vector of float) +0:47 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:47 Constant: +0:47 0 (const int) +0:47 Constant: +0:47 0.000000 +0:47 0.000000 +0:47 0.000000 +0:47 0.000000 +0:48 Branch: Return with expression +0:48 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:9 Function Definition: main( ( temp void) +0:9 Function Parameters: +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: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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 70 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 64 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + Name 10 "@main(" + Name 14 "mf16_2" + Name 17 "mf16" + Name 21 "mf10_2" + Name 23 "mf10" + Name 30 "mi16_2" + Name 33 "mi16" + Name 37 "mi12_2" + Name 39 "mi12" + Name 46 "mu16_2" + Name 49 "mu16" + Name 54 "psout" + Name 64 "Color" + Name 67 "$Global" + MemberName 67($Global) 0 "b1a" + MemberName 67($Global) 1 "b1b" + Name 69 "" + Decorate 14(mf16_2) RelaxedPrecision + Decorate 15 RelaxedPrecision + Decorate 17(mf16) RelaxedPrecision + Decorate 18 RelaxedPrecision + Decorate 19 RelaxedPrecision + Decorate 20 RelaxedPrecision + Decorate 21(mf10_2) RelaxedPrecision + Decorate 22 RelaxedPrecision + Decorate 23(mf10) RelaxedPrecision + Decorate 24 RelaxedPrecision + Decorate 25 RelaxedPrecision + Decorate 26 RelaxedPrecision + Decorate 30(mi16_2) RelaxedPrecision + Decorate 31 RelaxedPrecision + Decorate 33(mi16) RelaxedPrecision + Decorate 34 RelaxedPrecision + Decorate 35 RelaxedPrecision + Decorate 36 RelaxedPrecision + Decorate 37(mi12_2) RelaxedPrecision + Decorate 38 RelaxedPrecision + Decorate 39(mi12) RelaxedPrecision + Decorate 40 RelaxedPrecision + Decorate 41 RelaxedPrecision + Decorate 42 RelaxedPrecision + Decorate 46(mu16_2) RelaxedPrecision + Decorate 47 RelaxedPrecision + Decorate 49(mu16) RelaxedPrecision + Decorate 50 RelaxedPrecision + Decorate 51 RelaxedPrecision + Decorate 52 RelaxedPrecision + Decorate 64(Color) Location 0 + MemberDecorate 67($Global) 0 RelaxedPrecision + MemberDecorate 67($Global) 0 Offset 0 + MemberDecorate 67($Global) 1 RelaxedPrecision + MemberDecorate 67($Global) 1 Offset 4 + Decorate 67($Global) Block + Decorate 69 DescriptorSet 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: TypeVector 6(float) 2 + 13: TypePointer Function 12(fvec2) + 16: TypePointer Function 6(float) + 27: TypeInt 32 1 + 28: TypeVector 27(int) 2 + 29: TypePointer Function 28(ivec2) + 32: TypePointer Function 27(int) + 43: TypeInt 32 0 + 44: TypeVector 43(int) 2 + 45: TypePointer Function 44(ivec2) + 48: TypePointer Function 43(int) + 53: TypePointer Function 8(PS_OUTPUT) + 55: 27(int) Constant 0 + 56: 6(float) Constant 0 + 57: 7(fvec4) ConstantComposite 56 56 56 56 + 58: TypePointer Function 7(fvec4) + 63: TypePointer Output 7(fvec4) + 64(Color): 63(ptr) Variable Output + 67($Global): TypeStruct 6(float) 6(float) + 68: TypePointer Uniform 67($Global) + 69: 68(ptr) Variable Uniform + 4(main): 2 Function None 3 + 5: Label + 65:8(PS_OUTPUT) FunctionCall 10(@main() + 66: 7(fvec4) CompositeExtract 65 0 + Store 64(Color) 66 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 14(mf16_2): 13(ptr) Variable Function + 17(mf16): 16(ptr) Variable Function + 21(mf10_2): 13(ptr) Variable Function + 23(mf10): 16(ptr) Variable Function + 30(mi16_2): 29(ptr) Variable Function + 33(mi16): 32(ptr) Variable Function + 37(mi12_2): 29(ptr) Variable Function + 39(mi12): 32(ptr) Variable Function + 46(mu16_2): 45(ptr) Variable Function + 49(mu16): 48(ptr) Variable Function + 54(psout): 53(ptr) Variable Function + 15: 12(fvec2) Load 14(mf16_2) + 18: 6(float) Load 17(mf16) + 19: 12(fvec2) CompositeConstruct 18 18 + 20: 12(fvec2) FAdd 15 19 + 22: 12(fvec2) Load 21(mf10_2) + 24: 6(float) Load 23(mf10) + 25: 12(fvec2) CompositeConstruct 24 24 + 26: 12(fvec2) FAdd 22 25 + 31: 28(ivec2) Load 30(mi16_2) + 34: 27(int) Load 33(mi16) + 35: 28(ivec2) CompositeConstruct 34 34 + 36: 28(ivec2) IAdd 31 35 + 38: 28(ivec2) Load 37(mi12_2) + 40: 27(int) Load 39(mi12) + 41: 28(ivec2) CompositeConstruct 40 40 + 42: 28(ivec2) IAdd 38 41 + 47: 44(ivec2) Load 46(mu16_2) + 50: 43(int) Load 49(mu16) + 51: 44(ivec2) CompositeConstruct 50 50 + 52: 44(ivec2) IAdd 47 51 + 59: 58(ptr) AccessChain 54(psout) 55 + Store 59 57 + 60:8(PS_OUTPUT) Load 54(psout) + ReturnValue 60 + 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 new file mode 100755 index 0000000..4873a45 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.multiEntry.vert.out @@ -0,0 +1,140 @@ +hlsl.multiEntry.vert +Shader version: 450 +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 Convert uint to int ( temp int) +0:5 'Index' ( in uint) +0:9 Function Definition: @RealEntrypoint(u1; ( temp 4-component vector of float) +0:9 Function Parameters: +0:9 'Index' ( in uint) +0:? Sequence +0:10 Branch: Return with expression +0:10 Function Call: FakeEntrypoint(u1; ( temp 4-component vector of float) +0:10 'Index' ( in uint) +0:9 Function Definition: RealEntrypoint( ( temp void) +0:9 Function Parameters: +0:? Sequence +0:9 move second child to first child ( temp uint) +0:? 'Index' ( temp uint) +0:? 'Index' ( in uint VertexIndex) +0:9 move second child to first child ( temp 4-component vector of float) +0:? '@entryPointOutput' ( out 4-component vector of float Position) +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:? '@entryPointOutput' ( out 4-component vector of float Position) +0:? 'Index' ( in uint VertexIndex) + + +Linked vertex stage: + + +Shader version: 450 +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 Convert uint to int ( temp int) +0:5 'Index' ( in uint) +0:9 Function Definition: @RealEntrypoint(u1; ( temp 4-component vector of float) +0:9 Function Parameters: +0:9 'Index' ( in uint) +0:? Sequence +0:10 Branch: Return with expression +0:10 Function Call: FakeEntrypoint(u1; ( temp 4-component vector of float) +0:10 'Index' ( in uint) +0:9 Function Definition: RealEntrypoint( ( temp void) +0:9 Function Parameters: +0:? Sequence +0:9 move second child to first child ( temp uint) +0:? 'Index' ( temp uint) +0:? 'Index' ( in uint VertexIndex) +0:9 move second child to first child ( temp 4-component vector of float) +0:? '@entryPointOutput' ( out 4-component vector of float Position) +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:? '@entryPointOutput' ( out 4-component vector of float Position) +0:? 'Index' ( in uint VertexIndex) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 41 + + Capability Shader + Capability SampledBuffer + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "RealEntrypoint" 34 37 + Name 4 "RealEntrypoint" + Name 12 "FakeEntrypoint(u1;" + Name 11 "Index" + Name 15 "@RealEntrypoint(u1;" + Name 14 "Index" + Name 19 "Position" + Name 27 "param" + Name 32 "Index" + Name 34 "Index" + 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 + 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) + 17: TypeImage 8(float) Buffer nonsampled format:Rgba32f + 18: TypePointer UniformConstant 17 + 19(Position): 18(ptr) Variable UniformConstant + 22: TypeInt 32 1 + 33: TypePointer Input 6(int) + 34(Index): 33(ptr) Variable Input + 36: TypePointer Output 9(fvec4) +37(@entryPointOutput): 36(ptr) Variable Output +4(RealEntrypoint): 2 Function None 3 + 5: Label + 32(Index): 7(ptr) Variable Function + 38(param): 7(ptr) Variable Function + 35: 6(int) Load 34(Index) + Store 32(Index) 35 + 39: 6(int) Load 32(Index) + Store 38(param) 39 + 40: 9(fvec4) FunctionCall 15(@RealEntrypoint(u1;) 38(param) + Store 37(@entryPointOutput) 40 + Return + FunctionEnd +12(FakeEntrypoint(u1;): 9(fvec4) Function None 10 + 11(Index): 7(ptr) FunctionParameter + 13: Label + 20: 17 Load 19(Position) + 21: 6(int) Load 11(Index) + 23: 22(int) Bitcast 21 + 24: 9(fvec4) ImageRead 20 23 + ReturnValue 24 + FunctionEnd +15(@RealEntrypoint(u1;): 9(fvec4) Function None 10 + 14(Index): 7(ptr) FunctionParameter + 16: Label + 27(param): 7(ptr) Variable Function + 28: 6(int) Load 14(Index) + Store 27(param) 28 + 29: 9(fvec4) FunctionCall 12(FakeEntrypoint(u1;) 27(param) + ReturnValue 29 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.multiReturn.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.multiReturn.frag.out new file mode 100755 index 0000000..9efc9fc --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.multiReturn.frag.out @@ -0,0 +1,127 @@ +hlsl.multiReturn.frag +Shader version: 450 +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}) +0:12 Function Parameters: +0:? Sequence +0:13 Branch: Return with expression +0:13 s: direct index for structure (layout( row_major std140) uniform structure{ temp float f, temp 3-component vector of float v, temp 3X3 matrix of float m}) +0:13 '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}) +0:13 Constant: +0:13 0 (const uint) +0:17 Function Definition: @main( ( temp void) +0:17 Function Parameters: +0:? Sequence +0:18 Function Call: foo( ( temp structure{ temp float f, temp 3-component vector of float v, temp 3X3 matrix of float m}) +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{layout( row_major std140) uniform structure{ temp float f, temp 3-component vector of float v, temp 3X3 matrix of float m} s}) + + +Linked fragment stage: + + +Shader version: 450 +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}) +0:12 Function Parameters: +0:? Sequence +0:13 Branch: Return with expression +0:13 s: direct index for structure (layout( row_major std140) uniform structure{ temp float f, temp 3-component vector of float v, temp 3X3 matrix of float m}) +0:13 '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}) +0:13 Constant: +0:13 0 (const uint) +0:17 Function Definition: @main( ( temp void) +0:17 Function Parameters: +0:? Sequence +0:18 Function Call: foo( ( temp structure{ temp float f, temp 3-component vector of float v, temp 3X3 matrix of float m}) +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{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 +// Id's are bound by 42 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 9 "S" + MemberName 9(S) 0 "f" + MemberName 9(S) 1 "v" + MemberName 9(S) 2 "m" + Name 11 "foo(" + Name 13 "@main(" + Name 15 "S" + MemberName 15(S) 0 "f" + MemberName 15(S) 1 "v" + MemberName 15(S) 2 "m" + Name 16 "bufName" + MemberName 16(bufName) 0 "s" + Name 18 "" + MemberDecorate 15(S) 0 Offset 0 + MemberDecorate 15(S) 1 Offset 16 + MemberDecorate 15(S) 2 RowMajor + MemberDecorate 15(S) 2 Offset 32 + MemberDecorate 15(S) 2 MatrixStride 16 + MemberDecorate 16(bufName) 0 Offset 0 + Decorate 16(bufName) Block + Decorate 18 DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 3 + 8: TypeMatrix 7(fvec3) 3 + 9(S): TypeStruct 6(float) 7(fvec3) 8 + 10: TypeFunction 9(S) + 15(S): TypeStruct 6(float) 7(fvec3) 8 + 16(bufName): TypeStruct 15(S) + 17: TypePointer Uniform 16(bufName) + 18: 17(ptr) Variable Uniform + 19: TypeInt 32 1 + 20: 19(int) Constant 0 + 21: TypePointer Uniform 15(S) + 24: TypePointer Function 9(S) + 27: TypePointer Function 6(float) + 30: 19(int) Constant 1 + 31: TypePointer Function 7(fvec3) + 34: 19(int) Constant 2 + 35: TypePointer Function 8 + 4(main): 2 Function None 3 + 5: Label + 41: 2 FunctionCall 13(@main() + Return + FunctionEnd + 11(foo(): 9(S) Function None 10 + 12: Label + 25: 24(ptr) Variable Function + 22: 21(ptr) AccessChain 18 20 + 23: 15(S) Load 22 + 26: 6(float) CompositeExtract 23 0 + 28: 27(ptr) AccessChain 25 20 + Store 28 26 + 29: 7(fvec3) CompositeExtract 23 1 + 32: 31(ptr) AccessChain 25 30 + Store 32 29 + 33: 8 CompositeExtract 23 2 + 36: 35(ptr) AccessChain 25 34 + Store 36 33 + 37: 9(S) Load 25 + ReturnValue 37 + FunctionEnd + 13(@main(): 2 Function None 3 + 14: Label + 40: 9(S) FunctionCall 11(foo() + Return + 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 new file mode 100755 index 0000000..d3049ec --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.nonstaticMemberFunction.frag.out @@ -0,0 +1,435 @@ +hlsl.nonstaticMemberFunction.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:1 Sequence +0:1 move second child to first child ( temp 2-component vector of float) +0:1 'i' ( global 2-component vector of float) +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:5 Function Definition: type1::setmem(vf4; ( temp void) +0:5 Function Parameters: +0:5 '@this' ( temp structure{ temp 4-component vector of float memVar, temp int i}) +0:5 'm' ( in 4-component vector of float) +0:? Sequence +0:5 move second child to first child ( temp 4-component vector of float) +0:5 memVar: direct index for structure ( temp 4-component vector of float) +0:5 '@this' ( temp structure{ temp 4-component vector of float memVar, temp int i}) +0:5 Constant: +0:5 0 (const uint) +0:5 'm' ( in 4-component vector of float) +0:6 Function Definition: type1::seti(i1; ( temp void) +0:6 Function Parameters: +0:6 '@this' ( temp structure{ temp 4-component vector of float memVar, temp int i}) +0:6 'si' ( in int) +0:? Sequence +0:6 move second child to first child ( temp int) +0:6 i: direct index for structure ( temp int) +0:6 '@this' ( temp structure{ temp 4-component vector of float memVar, temp int i}) +0:6 Constant: +0:6 1 (const uint) +0:6 'si' ( in int) +0:9 Function Definition: type1::memFun(vf4; ( temp 4-component vector of float) +0:9 Function Parameters: +0:9 '@this' ( temp structure{ temp 4-component vector of float memVar, temp int i}) +0:9 'a' ( in 4-component vector of float) +0:? Sequence +0:10 Branch: Return with expression +0:10 add ( temp 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 i: direct index for structure ( temp int) +0:10 '@this' ( temp structure{ temp 4-component vector of float memVar, temp int i}) +0:10 Constant: +0:10 1 (const uint) +0:10 'a' ( in 4-component vector of float) +0:10 memVar: direct index for structure ( temp 4-component vector of float) +0:10 '@this' ( temp structure{ temp 4-component vector of float memVar, temp int i}) +0:10 Constant: +0:10 0 (const uint) +0:13 Function Definition: type1::memFun(i1; ( temp int) +0:13 Function Parameters: +0:13 '@this' ( temp structure{ temp 4-component vector of float memVar, temp int i}) +0:13 'a' ( in int) +0:? Sequence +0:14 Branch: Return with expression +0:14 Convert float to int ( temp int) +0:14 subtract ( temp float) +0:14 Convert int to float ( temp float) +0:14 add ( temp int) +0:14 i: direct index for structure ( temp int) +0:14 '@this' ( temp structure{ temp 4-component vector of float memVar, temp int i}) +0:14 Constant: +0:14 1 (const uint) +0:14 'a' ( in int) +0:14 direct index ( temp float) +0:14 memVar: direct index for structure ( temp 4-component vector of float) +0:14 '@this' ( temp structure{ temp 4-component vector of float memVar, temp int i}) +0:14 Constant: +0:14 0 (const uint) +0:14 Constant: +0:14 2 (const int) +0:19 Sequence +0:19 move second child to first child ( temp 2-component vector of float) +0:19 'j' ( global 2-component vector of float) +0:19 'i' ( global 2-component vector of float) +0:23 Function Definition: type2::memFun( ( temp 2-component vector of float) +0:23 Function Parameters: +0:23 '@this' ( temp structure{}) +0:? Sequence +0:23 Branch: Return with expression +0:23 'i' ( global 2-component vector of float) +0:27 Function Definition: @main( ( temp 4-component vector of float) +0:27 Function Parameters: +0:? Sequence +0:29 Function Call: type1::setmem(vf4; ( temp void) +0:29 'test' ( temp structure{ temp 4-component vector of float memVar, temp int i}) +0:? Constant: +0:? 2.000000 +0:? 2.000000 +0:? 2.000000 +0:? 2.000000 +0:30 Function Call: type1::seti(i1; ( temp void) +0:30 'test' ( temp structure{ temp 4-component vector of float memVar, temp int i}) +0:30 Constant: +0:30 17 (const int) +0:31 Sequence +0:31 move second child to first child ( temp 4-component vector of float) +0:31 'f4' ( temp 4-component vector of float) +0:? Constant: +0:? 1.000000 +0:? 1.000000 +0:? 1.000000 +0:? 1.000000 +0:32 add second child into first child ( temp 4-component vector of float) +0:32 'f4' ( temp 4-component vector of float) +0:32 Function Call: type1::memFun(vf4; ( temp 4-component vector of float) +0:32 'test' ( temp structure{ temp 4-component vector of float memVar, temp int i}) +0:? Constant: +0:? 5.000000 +0:? 5.000000 +0:? 5.000000 +0:? 5.000000 +0:33 add second child into first child ( temp 4-component vector of float) +0:33 'f4' ( temp 4-component vector of float) +0:33 Convert int to float ( temp float) +0:33 Function Call: type1::memFun(i1; ( temp int) +0:33 'test' ( temp structure{ temp 4-component vector of float memVar, temp int i}) +0:33 Constant: +0:33 7 (const int) +0:34 Branch: Return with expression +0:34 'f4' ( temp 4-component vector of float) +0:27 Function Definition: main( ( temp void) +0:27 Function Parameters: +0:? Sequence +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:27 Function Call: @main( ( temp 4-component vector of float) +0:? Linker Objects +0:? 'i' ( global 2-component vector of float) +0:? 'j' ( global 2-component vector of float) +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:1 Sequence +0:1 move second child to first child ( temp 2-component vector of float) +0:1 'i' ( global 2-component vector of float) +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:5 Function Definition: type1::setmem(vf4; ( temp void) +0:5 Function Parameters: +0:5 '@this' ( temp structure{ temp 4-component vector of float memVar, temp int i}) +0:5 'm' ( in 4-component vector of float) +0:? Sequence +0:5 move second child to first child ( temp 4-component vector of float) +0:5 memVar: direct index for structure ( temp 4-component vector of float) +0:5 '@this' ( temp structure{ temp 4-component vector of float memVar, temp int i}) +0:5 Constant: +0:5 0 (const uint) +0:5 'm' ( in 4-component vector of float) +0:6 Function Definition: type1::seti(i1; ( temp void) +0:6 Function Parameters: +0:6 '@this' ( temp structure{ temp 4-component vector of float memVar, temp int i}) +0:6 'si' ( in int) +0:? Sequence +0:6 move second child to first child ( temp int) +0:6 i: direct index for structure ( temp int) +0:6 '@this' ( temp structure{ temp 4-component vector of float memVar, temp int i}) +0:6 Constant: +0:6 1 (const uint) +0:6 'si' ( in int) +0:9 Function Definition: type1::memFun(vf4; ( temp 4-component vector of float) +0:9 Function Parameters: +0:9 '@this' ( temp structure{ temp 4-component vector of float memVar, temp int i}) +0:9 'a' ( in 4-component vector of float) +0:? Sequence +0:10 Branch: Return with expression +0:10 add ( temp 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 i: direct index for structure ( temp int) +0:10 '@this' ( temp structure{ temp 4-component vector of float memVar, temp int i}) +0:10 Constant: +0:10 1 (const uint) +0:10 'a' ( in 4-component vector of float) +0:10 memVar: direct index for structure ( temp 4-component vector of float) +0:10 '@this' ( temp structure{ temp 4-component vector of float memVar, temp int i}) +0:10 Constant: +0:10 0 (const uint) +0:13 Function Definition: type1::memFun(i1; ( temp int) +0:13 Function Parameters: +0:13 '@this' ( temp structure{ temp 4-component vector of float memVar, temp int i}) +0:13 'a' ( in int) +0:? Sequence +0:14 Branch: Return with expression +0:14 Convert float to int ( temp int) +0:14 subtract ( temp float) +0:14 Convert int to float ( temp float) +0:14 add ( temp int) +0:14 i: direct index for structure ( temp int) +0:14 '@this' ( temp structure{ temp 4-component vector of float memVar, temp int i}) +0:14 Constant: +0:14 1 (const uint) +0:14 'a' ( in int) +0:14 direct index ( temp float) +0:14 memVar: direct index for structure ( temp 4-component vector of float) +0:14 '@this' ( temp structure{ temp 4-component vector of float memVar, temp int i}) +0:14 Constant: +0:14 0 (const uint) +0:14 Constant: +0:14 2 (const int) +0:19 Sequence +0:19 move second child to first child ( temp 2-component vector of float) +0:19 'j' ( global 2-component vector of float) +0:19 'i' ( global 2-component vector of float) +0:23 Function Definition: type2::memFun( ( temp 2-component vector of float) +0:23 Function Parameters: +0:23 '@this' ( temp structure{}) +0:? Sequence +0:23 Branch: Return with expression +0:23 'i' ( global 2-component vector of float) +0:27 Function Definition: @main( ( temp 4-component vector of float) +0:27 Function Parameters: +0:? Sequence +0:29 Function Call: type1::setmem(vf4; ( temp void) +0:29 'test' ( temp structure{ temp 4-component vector of float memVar, temp int i}) +0:? Constant: +0:? 2.000000 +0:? 2.000000 +0:? 2.000000 +0:? 2.000000 +0:30 Function Call: type1::seti(i1; ( temp void) +0:30 'test' ( temp structure{ temp 4-component vector of float memVar, temp int i}) +0:30 Constant: +0:30 17 (const int) +0:31 Sequence +0:31 move second child to first child ( temp 4-component vector of float) +0:31 'f4' ( temp 4-component vector of float) +0:? Constant: +0:? 1.000000 +0:? 1.000000 +0:? 1.000000 +0:? 1.000000 +0:32 add second child into first child ( temp 4-component vector of float) +0:32 'f4' ( temp 4-component vector of float) +0:32 Function Call: type1::memFun(vf4; ( temp 4-component vector of float) +0:32 'test' ( temp structure{ temp 4-component vector of float memVar, temp int i}) +0:? Constant: +0:? 5.000000 +0:? 5.000000 +0:? 5.000000 +0:? 5.000000 +0:33 add second child into first child ( temp 4-component vector of float) +0:33 'f4' ( temp 4-component vector of float) +0:33 Convert int to float ( temp float) +0:33 Function Call: type1::memFun(i1; ( temp int) +0:33 'test' ( temp structure{ temp 4-component vector of float memVar, temp int i}) +0:33 Constant: +0:33 7 (const int) +0:34 Branch: Return with expression +0:34 'f4' ( temp 4-component vector of float) +0:27 Function Definition: main( ( temp void) +0:27 Function Parameters: +0:? Sequence +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:27 Function Call: @main( ( temp 4-component vector of float) +0:? Linker Objects +0:? 'i' ( global 2-component vector of float) +0:? 'j' ( global 2-component vector of float) +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 111 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 109 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 9 "type1" + MemberName 9(type1) 0 "memVar" + MemberName 9(type1) 1 "i" + Name 15 "type1::setmem(vf4;" + Name 13 "@this" + Name 14 "m" + Name 21 "type1::seti(i1;" + Name 19 "@this" + Name 20 "si" + Name 26 "type1::memFun(vf4;" + Name 24 "@this" + Name 25 "a" + Name 31 "type1::memFun(i1;" + Name 29 "@this" + Name 30 "a" + Name 33 "type2" + Name 38 "type2::memFun(" + Name 37 "@this" + Name 41 "@main(" + Name 44 "i" + Name 48 "j" + Name 83 "test" + Name 85 "param" + Name 88 "param" + Name 90 "f4" + Name 94 "param" + Name 99 "param" + Name 109 "@entryPointOutput" + Decorate 109(@entryPointOutput) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypeInt 32 1 + 9(type1): TypeStruct 7(fvec4) 8(int) + 10: TypePointer Function 9(type1) + 11: TypePointer Function 7(fvec4) + 12: TypeFunction 2 10(ptr) 11(ptr) + 17: TypePointer Function 8(int) + 18: TypeFunction 2 10(ptr) 17(ptr) + 23: TypeFunction 7(fvec4) 10(ptr) 11(ptr) + 28: TypeFunction 8(int) 10(ptr) 17(ptr) + 33(type2): TypeStruct + 34: TypePointer Function 33(type2) + 35: TypeVector 6(float) 2 + 36: TypeFunction 35(fvec2) 34(ptr) + 40: TypeFunction 7(fvec4) + 43: TypePointer Private 35(fvec2) + 44(i): 43(ptr) Variable Private + 45: 6(float) Constant 1065353216 + 46: 6(float) Constant 1073741824 + 47: 35(fvec2) ConstantComposite 45 46 + 48(j): 43(ptr) Variable Private + 50: 8(int) Constant 0 + 53: 8(int) Constant 1 + 71: TypeInt 32 0 + 72: 71(int) Constant 2 + 73: TypePointer Function 6(float) + 84: 7(fvec4) ConstantComposite 46 46 46 46 + 87: 8(int) Constant 17 + 91: 7(fvec4) ConstantComposite 45 45 45 45 + 92: 6(float) Constant 1084227584 + 93: 7(fvec4) ConstantComposite 92 92 92 92 + 98: 8(int) Constant 7 + 108: TypePointer Output 7(fvec4) +109(@entryPointOutput): 108(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + Store 44(i) 47 + 49: 35(fvec2) Load 44(i) + Store 48(j) 49 + 110: 7(fvec4) FunctionCall 41(@main() + Store 109(@entryPointOutput) 110 + Return + FunctionEnd +15(type1::setmem(vf4;): 2 Function None 12 + 13(@this): 10(ptr) FunctionParameter + 14(m): 11(ptr) FunctionParameter + 16: Label + 51: 7(fvec4) Load 14(m) + 52: 11(ptr) AccessChain 13(@this) 50 + Store 52 51 + Return + FunctionEnd +21(type1::seti(i1;): 2 Function None 18 + 19(@this): 10(ptr) FunctionParameter + 20(si): 17(ptr) FunctionParameter + 22: Label + 54: 8(int) Load 20(si) + 55: 17(ptr) AccessChain 19(@this) 53 + Store 55 54 + Return + FunctionEnd +26(type1::memFun(vf4;): 7(fvec4) Function None 23 + 24(@this): 10(ptr) FunctionParameter + 25(a): 11(ptr) FunctionParameter + 27: Label + 56: 17(ptr) AccessChain 24(@this) 53 + 57: 8(int) Load 56 + 58: 6(float) ConvertSToF 57 + 59: 7(fvec4) Load 25(a) + 60: 7(fvec4) VectorTimesScalar 59 58 + 61: 11(ptr) AccessChain 24(@this) 50 + 62: 7(fvec4) Load 61 + 63: 7(fvec4) FAdd 60 62 + ReturnValue 63 + FunctionEnd +31(type1::memFun(i1;): 8(int) Function None 28 + 29(@this): 10(ptr) FunctionParameter + 30(a): 17(ptr) FunctionParameter + 32: Label + 66: 17(ptr) AccessChain 29(@this) 53 + 67: 8(int) Load 66 + 68: 8(int) Load 30(a) + 69: 8(int) IAdd 67 68 + 70: 6(float) ConvertSToF 69 + 74: 73(ptr) AccessChain 29(@this) 50 72 + 75: 6(float) Load 74 + 76: 6(float) FSub 70 75 + 77: 8(int) ConvertFToS 76 + ReturnValue 77 + FunctionEnd +38(type2::memFun(): 35(fvec2) Function None 36 + 37(@this): 34(ptr) FunctionParameter + 39: Label + 80: 35(fvec2) Load 44(i) + ReturnValue 80 + FunctionEnd + 41(@main(): 7(fvec4) Function None 40 + 42: Label + 83(test): 10(ptr) Variable Function + 85(param): 11(ptr) Variable Function + 88(param): 17(ptr) Variable Function + 90(f4): 11(ptr) Variable Function + 94(param): 11(ptr) Variable Function + 99(param): 17(ptr) Variable Function + Store 85(param) 84 + 86: 2 FunctionCall 15(type1::setmem(vf4;) 83(test) 85(param) + Store 88(param) 87 + 89: 2 FunctionCall 21(type1::seti(i1;) 83(test) 88(param) + Store 90(f4) 91 + Store 94(param) 93 + 95: 7(fvec4) FunctionCall 26(type1::memFun(vf4;) 83(test) 94(param) + 96: 7(fvec4) Load 90(f4) + 97: 7(fvec4) FAdd 96 95 + Store 90(f4) 97 + Store 99(param) 98 + 100: 8(int) FunctionCall 31(type1::memFun(i1;) 83(test) 99(param) + 101: 6(float) ConvertSToF 100 + 102: 7(fvec4) Load 90(f4) + 103: 7(fvec4) CompositeConstruct 101 101 101 101 + 104: 7(fvec4) FAdd 102 103 + Store 90(f4) 104 + 105: 7(fvec4) Load 90(f4) + ReturnValue 105 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.numericsuffixes.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.numericsuffixes.frag.out new file mode 100644 index 0000000..cb24669 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.numericsuffixes.frag.out @@ -0,0 +1,291 @@ +hlsl.numericsuffixes.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:5 Function Definition: @main( ( temp structure{ temp 4-component vector of float color}) +0:5 Function Parameters: +0:? Sequence +0:7 Sequence +0:7 move second child to first child ( temp float) +0:7 'r00' ( temp float) +0:7 Constant: +0:7 1.000000 +0:8 Sequence +0:8 move second child to first child ( temp uint) +0:8 'r01' ( temp uint) +0:8 Constant: +0:8 1 (const uint) +0:9 Sequence +0:9 move second child to first child ( temp uint) +0:9 'r02' ( temp uint) +0:9 Constant: +0:9 2 (const uint) +0:10 Sequence +0:10 move second child to first child ( temp uint) +0:10 'r03' ( temp uint) +0:10 Constant: +0:10 2748 (const uint) +0:11 Sequence +0:11 move second child to first child ( temp uint) +0:11 'r04' ( temp uint) +0:11 Constant: +0:11 2748 (const uint) +0:12 Sequence +0:12 move second child to first child ( temp int) +0:12 'r05' ( temp int) +0:12 Constant: +0:12 5 (const int) +0:13 Sequence +0:13 move second child to first child ( temp int) +0:13 'r06' ( temp int) +0:13 Constant: +0:13 6 (const int) +0:14 Sequence +0:14 move second child to first child ( temp int) +0:14 'r07' ( temp int) +0:14 Constant: +0:14 57 (const int) +0:15 Sequence +0:15 move second child to first child ( temp uint) +0:15 'r08' ( temp uint) +0:15 Constant: +0:15 58 (const uint) +0:16 Sequence +0:16 move second child to first child ( temp float) +0:16 'r09' ( temp float) +0:16 Constant: +0:16 1.000000 +0:17 Sequence +0:17 move second child to first child ( temp float) +0:17 'r10' ( temp float) +0:17 Constant: +0:17 1.000000 +0:18 Sequence +0:18 move second child to first child ( temp float) +0:18 'r11' ( temp float) +0:18 Constant: +0:18 1.100000 +0:19 Sequence +0:19 move second child to first child ( temp float) +0:19 'r12' ( temp float) +0:19 Constant: +0:19 1.100000 +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 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:22 Constant: +0:22 0 (const int) +0:22 Construct vec4 ( temp 4-component vector of float) +0:22 Convert int to float ( temp float) +0:22 'r07' ( temp int) +0:23 Branch: Return with expression +0:23 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:5 Function Definition: main( ( temp void) +0:5 Function Parameters: +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: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) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:5 Function Definition: @main( ( temp structure{ temp 4-component vector of float color}) +0:5 Function Parameters: +0:? Sequence +0:7 Sequence +0:7 move second child to first child ( temp float) +0:7 'r00' ( temp float) +0:7 Constant: +0:7 1.000000 +0:8 Sequence +0:8 move second child to first child ( temp uint) +0:8 'r01' ( temp uint) +0:8 Constant: +0:8 1 (const uint) +0:9 Sequence +0:9 move second child to first child ( temp uint) +0:9 'r02' ( temp uint) +0:9 Constant: +0:9 2 (const uint) +0:10 Sequence +0:10 move second child to first child ( temp uint) +0:10 'r03' ( temp uint) +0:10 Constant: +0:10 2748 (const uint) +0:11 Sequence +0:11 move second child to first child ( temp uint) +0:11 'r04' ( temp uint) +0:11 Constant: +0:11 2748 (const uint) +0:12 Sequence +0:12 move second child to first child ( temp int) +0:12 'r05' ( temp int) +0:12 Constant: +0:12 5 (const int) +0:13 Sequence +0:13 move second child to first child ( temp int) +0:13 'r06' ( temp int) +0:13 Constant: +0:13 6 (const int) +0:14 Sequence +0:14 move second child to first child ( temp int) +0:14 'r07' ( temp int) +0:14 Constant: +0:14 57 (const int) +0:15 Sequence +0:15 move second child to first child ( temp uint) +0:15 'r08' ( temp uint) +0:15 Constant: +0:15 58 (const uint) +0:16 Sequence +0:16 move second child to first child ( temp float) +0:16 'r09' ( temp float) +0:16 Constant: +0:16 1.000000 +0:17 Sequence +0:17 move second child to first child ( temp float) +0:17 'r10' ( temp float) +0:17 Constant: +0:17 1.000000 +0:18 Sequence +0:18 move second child to first child ( temp float) +0:18 'r11' ( temp float) +0:18 Constant: +0:18 1.100000 +0:19 Sequence +0:19 move second child to first child ( temp float) +0:19 'r12' ( temp float) +0:19 Constant: +0:19 1.100000 +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 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:22 Constant: +0:22 0 (const int) +0:22 Construct vec4 ( temp 4-component vector of float) +0:22 Convert int to float ( temp float) +0:22 'r07' ( temp int) +0:23 Branch: Return with expression +0:23 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:5 Function Definition: main( ( temp void) +0:5 Function Parameters: +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: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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 54 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 51 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "color" + Name 10 "@main(" + Name 13 "r00" + Name 17 "r01" + Name 19 "r02" + Name 21 "r03" + Name 23 "r04" + Name 26 "r05" + Name 28 "r06" + Name 30 "r07" + Name 32 "r08" + Name 34 "r09" + Name 35 "r10" + Name 36 "r11" + Name 38 "r12" + Name 40 "ps_output" + Name 51 "color" + Decorate 51(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: TypePointer Function 6(float) + 14: 6(float) Constant 1065353216 + 15: TypeInt 32 0 + 16: TypePointer Function 15(int) + 18: 15(int) Constant 1 + 20: 15(int) Constant 2 + 22: 15(int) Constant 2748 + 24: TypeInt 32 1 + 25: TypePointer Function 24(int) + 27: 24(int) Constant 5 + 29: 24(int) Constant 6 + 31: 24(int) Constant 57 + 33: 15(int) Constant 58 + 37: 6(float) Constant 1066192077 + 39: TypePointer Function 8(PS_OUTPUT) + 41: 24(int) Constant 0 + 45: TypePointer Function 7(fvec4) + 50: TypePointer Output 7(fvec4) + 51(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 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 13(r00): 12(ptr) Variable Function + 17(r01): 16(ptr) Variable Function + 19(r02): 16(ptr) Variable Function + 21(r03): 16(ptr) Variable Function + 23(r04): 16(ptr) Variable Function + 26(r05): 25(ptr) Variable Function + 28(r06): 25(ptr) Variable Function + 30(r07): 25(ptr) Variable Function + 32(r08): 16(ptr) Variable Function + 34(r09): 12(ptr) Variable Function + 35(r10): 12(ptr) Variable Function + 36(r11): 12(ptr) Variable Function + 38(r12): 12(ptr) Variable Function + 40(ps_output): 39(ptr) Variable Function + Store 13(r00) 14 + Store 17(r01) 18 + Store 19(r02) 20 + Store 21(r03) 22 + Store 23(r04) 22 + Store 26(r05) 27 + Store 28(r06) 29 + Store 30(r07) 31 + Store 32(r08) 33 + Store 34(r09) 14 + Store 35(r10) 14 + Store 36(r11) 37 + Store 38(r12) 37 + 42: 24(int) Load 30(r07) + 43: 6(float) ConvertSToF 42 + 44: 7(fvec4) CompositeConstruct 43 43 43 43 + 46: 45(ptr) AccessChain 40(ps_output) 41 + Store 46 44 + 47:8(PS_OUTPUT) Load 40(ps_output) + ReturnValue 47 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.numthreads.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.numthreads.comp.out new file mode 100644 index 0000000..ed0017b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.numthreads.comp.out @@ -0,0 +1,92 @@ +hlsl.numthreads.comp +Shader version: 450 +local_size = (4, 4, 2) +0:? Sequence +0:4 Function Definition: main(vu3; ( temp void) +0:4 Function Parameters: +0:4 'tid' ( in 3-component vector of uint) +0:9 Function Definition: @main_aux1(vu3; ( temp void) +0:9 Function Parameters: +0:9 'tid' ( in 3-component vector of uint) +0:9 Function Definition: main_aux1( ( temp void) +0:9 Function Parameters: +0:? Sequence +0:9 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:9 Function Call: @main_aux1(vu3; ( temp void) +0:? 'tid' ( temp 3-component vector of uint) +0:? Linker Objects +0:? 'tid' ( in 3-component vector of uint GlobalInvocationID) + + +Linked compute stage: + + +Shader version: 450 +local_size = (4, 4, 2) +0:? Sequence +0:4 Function Definition: main(vu3; ( temp void) +0:4 Function Parameters: +0:4 'tid' ( in 3-component vector of uint) +0:9 Function Definition: @main_aux1(vu3; ( temp void) +0:9 Function Parameters: +0:9 'tid' ( in 3-component vector of uint) +0:9 Function Definition: main_aux1( ( temp void) +0:9 Function Parameters: +0:? Sequence +0:9 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:9 Function Call: @main_aux1(vu3; ( temp void) +0:? 'tid' ( temp 3-component vector of uint) +0:? Linker Objects +0:? 'tid' ( in 3-component vector of uint GlobalInvocationID) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 23 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "main_aux1" 18 + ExecutionMode 4 LocalSize 4 4 2 + Name 4 "main_aux1" + Name 11 "main(vu3;" + Name 10 "tid" + Name 14 "@main_aux1(vu3;" + Name 13 "tid" + Name 16 "tid" + Name 18 "tid" + Name 20 "param" + Decorate 18(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) + 17: TypePointer Input 7(ivec3) + 18(tid): 17(ptr) Variable Input + 4(main_aux1): 2 Function None 3 + 5: Label + 16(tid): 8(ptr) Variable Function + 20(param): 8(ptr) Variable Function + 19: 7(ivec3) Load 18(tid) + Store 16(tid) 19 + 21: 7(ivec3) Load 16(tid) + Store 20(param) 21 + 22: 2 FunctionCall 14(@main_aux1(vu3;) 20(param) + Return + FunctionEnd + 11(main(vu3;): 2 Function None 9 + 10(tid): 8(ptr) FunctionParameter + 12: Label + Return + FunctionEnd +14(@main_aux1(vu3;): 2 Function None 9 + 13(tid): 8(ptr) FunctionParameter + 15: Label + 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 new file mode 100755 index 0000000..1075ffe --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.overload.frag.out @@ -0,0 +1,1624 @@ +hlsl.overload.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:2 Function Definition: foo1(d1;b1; ( temp void) +0:2 Function Parameters: +0:2 'a' ( in double) +0:2 'b' ( in bool) +0:3 Function Definition: foo1(d1;u1; ( temp void) +0:3 Function Parameters: +0:3 'a' ( in double) +0:3 'b' ( in uint) +0:4 Function Definition: foo1(d1;i1; ( temp void) +0:4 Function Parameters: +0:4 'a' ( in double) +0:4 'b' ( in int) +0:5 Function Definition: foo1(d1;f1; ( temp void) +0:5 Function Parameters: +0:5 'a' ( in double) +0:5 'b' ( in float) +0:6 Function Definition: foo1(d1;d1; ( temp void) +0:6 Function Parameters: +0:6 'a' ( in double) +0:6 'b' ( in double) +0:9 Function Definition: foo2(i1;b1; ( temp void) +0:9 Function Parameters: +0:9 'a' ( in int) +0:9 'b' ( in bool) +0:10 Function Definition: foo2(i1;u1; ( temp void) +0:10 Function Parameters: +0:10 'a' ( in int) +0:10 'b' ( in uint) +0:11 Function Definition: foo2(i1;i1; ( temp void) +0:11 Function Parameters: +0:11 'a' ( in int) +0:11 'b' ( in int) +0:12 Function Definition: foo2(i1;f1; ( temp void) +0:12 Function Parameters: +0:12 'a' ( in int) +0:12 'b' ( in float) +0:13 Function Definition: foo2(i1;d1; ( temp void) +0:13 Function Parameters: +0:13 'a' ( in int) +0:13 'b' ( in double) +0:16 Function Definition: foo3(b1; ( temp void) +0:16 Function Parameters: +0:16 'b' ( in bool) +0:17 Function Definition: foo4(u1; ( temp void) +0:17 Function Parameters: +0:17 'b' ( in uint) +0:18 Function Definition: foo5(i1; ( temp void) +0:18 Function Parameters: +0:18 'b' ( in int) +0:19 Function Definition: foo6(f1; ( temp void) +0:19 Function Parameters: +0:19 'b' ( in float) +0:20 Function Definition: foo7(d1; ( temp void) +0:20 Function Parameters: +0:20 'b' ( in double) +0:23 Function Definition: foo8(f1; ( temp void) +0:23 Function Parameters: +0:23 '' ( in float) +0:24 Function Definition: foo8(d1; ( temp void) +0:24 Function Parameters: +0:24 '' ( in double) +0:25 Function Definition: foo9(i1; ( temp void) +0:25 Function Parameters: +0:25 '' ( in int) +0:26 Function Definition: foo9(u1; ( temp void) +0:26 Function Parameters: +0:26 '' ( in uint) +0:27 Function Definition: foo10(b1; ( temp void) +0:27 Function Parameters: +0:27 '' ( in bool) +0:28 Function Definition: foo10(i1; ( temp void) +0:28 Function Parameters: +0:28 '' ( in int) +0:31 Function Definition: foo11(vf3; ( temp void) +0:31 Function Parameters: +0:31 '' ( in 3-component vector of float) +0:32 Function Definition: foo11(d1; ( temp void) +0:32 Function Parameters: +0:32 '' ( in double) +0:33 Function Definition: foo11(vi3; ( temp void) +0:33 Function Parameters: +0:33 '' ( in 3-component vector of int) +0:34 Function Definition: foo11(u1; ( temp void) +0:34 Function Parameters: +0:34 '' ( in uint) +0:35 Function Definition: foo12(vf1; ( temp void) +0:35 Function Parameters: +0:35 '' ( in 1-component vector of float) +0:36 Function Definition: foo12(vd3; ( temp void) +0:36 Function Parameters: +0:36 '' ( in 3-component vector of double) +0:37 Function Definition: foo16(u1; ( temp void) +0:37 Function Parameters: +0:37 '' ( in uint) +0:38 Function Definition: foo16(vu2; ( temp void) +0:38 Function Parameters: +0:38 '' ( in 2-component vector of uint) +0:41 Function Definition: foo13(vf3; ( temp void) +0:41 Function Parameters: +0:41 '' ( in 3-component vector of float) +0:42 Function Definition: foo14(vi1; ( temp void) +0:42 Function Parameters: +0:42 '' ( in 1-component vector of int) +0:43 Function Definition: foo15(vb1; ( temp void) +0:43 Function Parameters: +0:43 '' ( in 1-component vector of bool) +0:46 Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float) +0:46 Function Parameters: +0:46 'input' ( in 4-component vector of float) +0:? Sequence +0:53 Function Call: foo1(d1;b1; ( temp void) +0:53 'd' ( temp double) +0:53 'b' ( temp bool) +0:54 Function Call: foo1(d1;d1; ( temp void) +0:54 'd' ( temp double) +0:54 'd' ( temp double) +0:55 Function Call: foo1(d1;u1; ( temp void) +0:55 'd' ( temp double) +0:55 'u' ( temp uint) +0:56 Function Call: foo1(d1;i1; ( temp void) +0:56 'd' ( temp double) +0:56 'i' ( temp int) +0:57 Function Call: foo1(d1;f1; ( temp void) +0:57 'd' ( temp double) +0:57 'f' ( temp float) +0:59 Function Call: foo1(d1;b1; ( temp void) +0:59 Convert float to double ( temp double) +0:59 'f' ( temp float) +0:59 'b' ( temp bool) +0:60 Function Call: foo1(d1;d1; ( temp void) +0:60 Convert float to double ( temp double) +0:60 'f' ( temp float) +0:60 'd' ( temp double) +0:61 Function Call: foo1(d1;u1; ( temp void) +0:61 Convert float to double ( temp double) +0:61 'f' ( temp float) +0:61 'u' ( temp uint) +0:62 Function Call: foo1(d1;i1; ( temp void) +0:62 Convert float to double ( temp double) +0:62 'f' ( temp float) +0:62 'i' ( temp int) +0:63 Function Call: foo1(d1;f1; ( temp void) +0:63 Convert float to double ( temp double) +0:63 'f' ( temp float) +0:63 'f' ( temp float) +0:65 Function Call: foo1(d1;b1; ( temp void) +0:65 Convert uint to double ( temp double) +0:65 'u' ( temp uint) +0:65 'b' ( temp bool) +0:66 Function Call: foo1(d1;d1; ( temp void) +0:66 Convert uint to double ( temp double) +0:66 'u' ( temp uint) +0:66 'd' ( temp double) +0:67 Function Call: foo1(d1;u1; ( temp void) +0:67 Convert uint to double ( temp double) +0:67 'u' ( temp uint) +0:67 'u' ( temp uint) +0:68 Function Call: foo1(d1;i1; ( temp void) +0:68 Convert uint to double ( temp double) +0:68 'u' ( temp uint) +0:68 'i' ( temp int) +0:69 Function Call: foo1(d1;f1; ( temp void) +0:69 Convert uint to double ( temp double) +0:69 'u' ( temp uint) +0:69 'f' ( temp float) +0:71 Function Call: foo1(d1;b1; ( temp void) +0:71 Convert int to double ( temp double) +0:71 'i' ( temp int) +0:71 'b' ( temp bool) +0:72 Function Call: foo1(d1;d1; ( temp void) +0:72 Convert int to double ( temp double) +0:72 'i' ( temp int) +0:72 'd' ( temp double) +0:73 Function Call: foo1(d1;u1; ( temp void) +0:73 Convert int to double ( temp double) +0:73 'i' ( temp int) +0:73 'u' ( temp uint) +0:74 Function Call: foo1(d1;i1; ( temp void) +0:74 Convert int to double ( temp double) +0:74 'i' ( temp int) +0:74 'i' ( temp int) +0:75 Function Call: foo1(d1;f1; ( temp void) +0:75 Convert int to double ( temp double) +0:75 'i' ( temp int) +0:75 'f' ( temp float) +0:77 Function Call: foo2(i1;b1; ( temp void) +0:77 Convert uint to int ( temp int) +0:77 'u' ( temp uint) +0:77 'b' ( temp bool) +0:78 Function Call: foo2(i1;d1; ( temp void) +0:78 Convert uint to int ( temp int) +0:78 'u' ( temp uint) +0:78 'd' ( temp double) +0:79 Function Call: foo2(i1;u1; ( temp void) +0:79 Convert uint to int ( temp int) +0:79 'u' ( temp uint) +0:79 'u' ( temp uint) +0:80 Function Call: foo2(i1;i1; ( temp void) +0:80 Convert uint to int ( temp int) +0:80 'u' ( temp uint) +0:80 'i' ( temp int) +0:81 Function Call: foo2(i1;f1; ( temp void) +0:81 Convert uint to int ( temp int) +0:81 'u' ( temp uint) +0:81 'f' ( temp float) +0:83 Function Call: foo2(i1;b1; ( temp void) +0:83 'i' ( temp int) +0:83 'b' ( temp bool) +0:84 Function Call: foo2(i1;d1; ( temp void) +0:84 'i' ( temp int) +0:84 'd' ( temp double) +0:85 Function Call: foo2(i1;u1; ( temp void) +0:85 'i' ( temp int) +0:85 'u' ( temp uint) +0:86 Function Call: foo2(i1;i1; ( temp void) +0:86 'i' ( temp int) +0:86 'i' ( temp int) +0:87 Function Call: foo2(i1;f1; ( temp void) +0:87 'i' ( temp int) +0:87 'f' ( temp float) +0:89 Function Call: foo3(b1; ( temp void) +0:89 'b' ( temp bool) +0:90 Function Call: foo3(b1; ( temp void) +0:90 Convert double to bool ( temp bool) +0:90 'd' ( temp double) +0:91 Function Call: foo3(b1; ( temp void) +0:91 Convert uint to bool ( temp bool) +0:91 'u' ( temp uint) +0:92 Function Call: foo3(b1; ( temp void) +0:92 Convert int to bool ( temp bool) +0:92 'i' ( temp int) +0:93 Function Call: foo3(b1; ( temp void) +0:93 Convert float to bool ( temp bool) +0:93 'f' ( temp float) +0:95 Function Call: foo4(u1; ( temp void) +0:95 Convert bool to uint ( temp uint) +0:95 'b' ( temp bool) +0:96 Function Call: foo4(u1; ( temp void) +0:96 Convert double to uint ( temp uint) +0:96 'd' ( temp double) +0:97 Function Call: foo4(u1; ( temp void) +0:97 'u' ( temp uint) +0:98 Function Call: foo4(u1; ( temp void) +0:98 Convert int to uint ( temp uint) +0:98 'i' ( temp int) +0:99 Function Call: foo4(u1; ( temp void) +0:99 Convert float to uint ( temp uint) +0:99 'f' ( temp float) +0:101 Function Call: foo5(i1; ( temp void) +0:101 Convert bool to int ( temp int) +0:101 'b' ( temp bool) +0:102 Function Call: foo5(i1; ( temp void) +0:102 Convert double to int ( temp int) +0:102 'd' ( temp double) +0:103 Function Call: foo5(i1; ( temp void) +0:103 Convert uint to int ( temp int) +0:103 'u' ( temp uint) +0:104 Function Call: foo5(i1; ( temp void) +0:104 'i' ( temp int) +0:105 Function Call: foo5(i1; ( temp void) +0:105 Convert float to int ( temp int) +0:105 'f' ( temp float) +0:107 Function Call: foo6(f1; ( temp void) +0:107 Convert bool to float ( temp float) +0:107 'b' ( temp bool) +0:108 Function Call: foo6(f1; ( temp void) +0:108 Convert double to float ( temp float) +0:108 'd' ( temp double) +0:109 Function Call: foo6(f1; ( temp void) +0:109 Convert uint to float ( temp float) +0:109 'u' ( temp uint) +0:110 Function Call: foo6(f1; ( temp void) +0:110 Convert int to float ( temp float) +0:110 'i' ( temp int) +0:111 Function Call: foo6(f1; ( temp void) +0:111 'f' ( temp float) +0:113 Function Call: foo7(d1; ( temp void) +0:113 Convert bool to double ( temp double) +0:113 'b' ( temp bool) +0:114 Function Call: foo7(d1; ( temp void) +0:114 'd' ( temp double) +0:115 Function Call: foo7(d1; ( temp void) +0:115 Convert uint to double ( temp double) +0:115 'u' ( temp uint) +0:116 Function Call: foo7(d1; ( temp void) +0:116 Convert int to double ( temp double) +0:116 'i' ( temp int) +0:117 Function Call: foo7(d1; ( temp void) +0:117 Convert float to double ( temp double) +0:117 'f' ( temp float) +0:119 Function Call: foo8(f1; ( temp void) +0:119 Convert bool to float ( temp float) +0:119 'b' ( temp bool) +0:120 Function Call: foo8(f1; ( temp void) +0:120 Convert uint to float ( temp float) +0:120 'u' ( temp uint) +0:121 Function Call: foo8(f1; ( temp void) +0:121 Convert int to float ( temp float) +0:121 'i' ( temp int) +0:123 Function Call: foo9(i1; ( temp void) +0:123 Convert bool to int ( temp int) +0:123 'b' ( temp bool) +0:124 Function Call: foo9(u1; ( temp void) +0:124 Convert float to uint ( temp uint) +0:124 'f' ( temp float) +0:125 Function Call: foo9(u1; ( temp void) +0:125 Convert double to uint ( temp uint) +0:125 'd' ( temp double) +0:127 Function Call: foo10(i1; ( temp void) +0:127 Convert uint to int ( temp int) +0:127 'u' ( temp uint) +0:128 Function Call: foo10(i1; ( temp void) +0:128 Convert float to int ( temp int) +0:128 'f' ( temp float) +0:129 Function Call: foo10(i1; ( temp void) +0:129 Convert double to int ( temp int) +0:129 'd' ( temp double) +0:131 Function Call: foo11(u1; ( temp void) +0:131 Convert bool to uint ( temp uint) +0:131 'b' ( temp bool) +0:132 Function Call: foo11(d1; ( temp void) +0:132 Convert float to double ( temp double) +0:132 'f' ( temp float) +0:133 Function Call: foo12(vd3; ( temp void) +0:133 Convert float to double ( temp 3-component vector of double) +0:133 Construct vec3 ( temp 3-component vector of float) +0:133 'f' ( temp float) +0:134 Function Call: foo16(vu2; ( temp void) +0:? Convert int to uint ( temp 2-component vector of uint) +0:? Construct ivec2 ( temp 2-component vector of int) +0:134 'i' ( temp int) +0:134 'i' ( temp int) +0:136 Function Call: foo13(vf3; ( temp void) +0:136 Construct vec3 ( in 3-component vector of float) +0:136 'f' ( temp float) +0:137 Function Call: foo14(vi1; ( temp void) +0:137 Construct int ( in 1-component vector of int) +0:137 Construct ivec4 ( temp 4-component vector of int) +0:137 'i' ( temp int) +0:138 Function Call: foo15(vb1; ( temp void) +0:138 Construct bool ( in 1-component vector of bool) +0:138 'b' ( temp bool) +0:139 Function Call: foo15(vb1; ( temp void) +0:139 Construct bool ( in 1-component vector of bool) +0:139 Construct bvec3 ( temp 3-component vector of bool) +0:139 'b' ( temp bool) +0:141 Branch: Return with expression +0:141 'input' ( in 4-component vector of float) +0:46 Function Definition: PixelShaderFunction( ( temp void) +0:46 Function Parameters: +0:? Sequence +0:46 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:46 move second child to first child ( temp 4-component vector of float) +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) +0:46 Function Call: @PixelShaderFunction(vf4; ( temp 4-component vector of float) +0:? 'input' ( temp 4-component vector of 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) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:2 Function Definition: foo1(d1;b1; ( temp void) +0:2 Function Parameters: +0:2 'a' ( in double) +0:2 'b' ( in bool) +0:3 Function Definition: foo1(d1;u1; ( temp void) +0:3 Function Parameters: +0:3 'a' ( in double) +0:3 'b' ( in uint) +0:4 Function Definition: foo1(d1;i1; ( temp void) +0:4 Function Parameters: +0:4 'a' ( in double) +0:4 'b' ( in int) +0:5 Function Definition: foo1(d1;f1; ( temp void) +0:5 Function Parameters: +0:5 'a' ( in double) +0:5 'b' ( in float) +0:6 Function Definition: foo1(d1;d1; ( temp void) +0:6 Function Parameters: +0:6 'a' ( in double) +0:6 'b' ( in double) +0:9 Function Definition: foo2(i1;b1; ( temp void) +0:9 Function Parameters: +0:9 'a' ( in int) +0:9 'b' ( in bool) +0:10 Function Definition: foo2(i1;u1; ( temp void) +0:10 Function Parameters: +0:10 'a' ( in int) +0:10 'b' ( in uint) +0:11 Function Definition: foo2(i1;i1; ( temp void) +0:11 Function Parameters: +0:11 'a' ( in int) +0:11 'b' ( in int) +0:12 Function Definition: foo2(i1;f1; ( temp void) +0:12 Function Parameters: +0:12 'a' ( in int) +0:12 'b' ( in float) +0:13 Function Definition: foo2(i1;d1; ( temp void) +0:13 Function Parameters: +0:13 'a' ( in int) +0:13 'b' ( in double) +0:16 Function Definition: foo3(b1; ( temp void) +0:16 Function Parameters: +0:16 'b' ( in bool) +0:17 Function Definition: foo4(u1; ( temp void) +0:17 Function Parameters: +0:17 'b' ( in uint) +0:18 Function Definition: foo5(i1; ( temp void) +0:18 Function Parameters: +0:18 'b' ( in int) +0:19 Function Definition: foo6(f1; ( temp void) +0:19 Function Parameters: +0:19 'b' ( in float) +0:20 Function Definition: foo7(d1; ( temp void) +0:20 Function Parameters: +0:20 'b' ( in double) +0:23 Function Definition: foo8(f1; ( temp void) +0:23 Function Parameters: +0:23 '' ( in float) +0:24 Function Definition: foo8(d1; ( temp void) +0:24 Function Parameters: +0:24 '' ( in double) +0:25 Function Definition: foo9(i1; ( temp void) +0:25 Function Parameters: +0:25 '' ( in int) +0:26 Function Definition: foo9(u1; ( temp void) +0:26 Function Parameters: +0:26 '' ( in uint) +0:27 Function Definition: foo10(b1; ( temp void) +0:27 Function Parameters: +0:27 '' ( in bool) +0:28 Function Definition: foo10(i1; ( temp void) +0:28 Function Parameters: +0:28 '' ( in int) +0:31 Function Definition: foo11(vf3; ( temp void) +0:31 Function Parameters: +0:31 '' ( in 3-component vector of float) +0:32 Function Definition: foo11(d1; ( temp void) +0:32 Function Parameters: +0:32 '' ( in double) +0:33 Function Definition: foo11(vi3; ( temp void) +0:33 Function Parameters: +0:33 '' ( in 3-component vector of int) +0:34 Function Definition: foo11(u1; ( temp void) +0:34 Function Parameters: +0:34 '' ( in uint) +0:35 Function Definition: foo12(vf1; ( temp void) +0:35 Function Parameters: +0:35 '' ( in 1-component vector of float) +0:36 Function Definition: foo12(vd3; ( temp void) +0:36 Function Parameters: +0:36 '' ( in 3-component vector of double) +0:37 Function Definition: foo16(u1; ( temp void) +0:37 Function Parameters: +0:37 '' ( in uint) +0:38 Function Definition: foo16(vu2; ( temp void) +0:38 Function Parameters: +0:38 '' ( in 2-component vector of uint) +0:41 Function Definition: foo13(vf3; ( temp void) +0:41 Function Parameters: +0:41 '' ( in 3-component vector of float) +0:42 Function Definition: foo14(vi1; ( temp void) +0:42 Function Parameters: +0:42 '' ( in 1-component vector of int) +0:43 Function Definition: foo15(vb1; ( temp void) +0:43 Function Parameters: +0:43 '' ( in 1-component vector of bool) +0:46 Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float) +0:46 Function Parameters: +0:46 'input' ( in 4-component vector of float) +0:? Sequence +0:53 Function Call: foo1(d1;b1; ( temp void) +0:53 'd' ( temp double) +0:53 'b' ( temp bool) +0:54 Function Call: foo1(d1;d1; ( temp void) +0:54 'd' ( temp double) +0:54 'd' ( temp double) +0:55 Function Call: foo1(d1;u1; ( temp void) +0:55 'd' ( temp double) +0:55 'u' ( temp uint) +0:56 Function Call: foo1(d1;i1; ( temp void) +0:56 'd' ( temp double) +0:56 'i' ( temp int) +0:57 Function Call: foo1(d1;f1; ( temp void) +0:57 'd' ( temp double) +0:57 'f' ( temp float) +0:59 Function Call: foo1(d1;b1; ( temp void) +0:59 Convert float to double ( temp double) +0:59 'f' ( temp float) +0:59 'b' ( temp bool) +0:60 Function Call: foo1(d1;d1; ( temp void) +0:60 Convert float to double ( temp double) +0:60 'f' ( temp float) +0:60 'd' ( temp double) +0:61 Function Call: foo1(d1;u1; ( temp void) +0:61 Convert float to double ( temp double) +0:61 'f' ( temp float) +0:61 'u' ( temp uint) +0:62 Function Call: foo1(d1;i1; ( temp void) +0:62 Convert float to double ( temp double) +0:62 'f' ( temp float) +0:62 'i' ( temp int) +0:63 Function Call: foo1(d1;f1; ( temp void) +0:63 Convert float to double ( temp double) +0:63 'f' ( temp float) +0:63 'f' ( temp float) +0:65 Function Call: foo1(d1;b1; ( temp void) +0:65 Convert uint to double ( temp double) +0:65 'u' ( temp uint) +0:65 'b' ( temp bool) +0:66 Function Call: foo1(d1;d1; ( temp void) +0:66 Convert uint to double ( temp double) +0:66 'u' ( temp uint) +0:66 'd' ( temp double) +0:67 Function Call: foo1(d1;u1; ( temp void) +0:67 Convert uint to double ( temp double) +0:67 'u' ( temp uint) +0:67 'u' ( temp uint) +0:68 Function Call: foo1(d1;i1; ( temp void) +0:68 Convert uint to double ( temp double) +0:68 'u' ( temp uint) +0:68 'i' ( temp int) +0:69 Function Call: foo1(d1;f1; ( temp void) +0:69 Convert uint to double ( temp double) +0:69 'u' ( temp uint) +0:69 'f' ( temp float) +0:71 Function Call: foo1(d1;b1; ( temp void) +0:71 Convert int to double ( temp double) +0:71 'i' ( temp int) +0:71 'b' ( temp bool) +0:72 Function Call: foo1(d1;d1; ( temp void) +0:72 Convert int to double ( temp double) +0:72 'i' ( temp int) +0:72 'd' ( temp double) +0:73 Function Call: foo1(d1;u1; ( temp void) +0:73 Convert int to double ( temp double) +0:73 'i' ( temp int) +0:73 'u' ( temp uint) +0:74 Function Call: foo1(d1;i1; ( temp void) +0:74 Convert int to double ( temp double) +0:74 'i' ( temp int) +0:74 'i' ( temp int) +0:75 Function Call: foo1(d1;f1; ( temp void) +0:75 Convert int to double ( temp double) +0:75 'i' ( temp int) +0:75 'f' ( temp float) +0:77 Function Call: foo2(i1;b1; ( temp void) +0:77 Convert uint to int ( temp int) +0:77 'u' ( temp uint) +0:77 'b' ( temp bool) +0:78 Function Call: foo2(i1;d1; ( temp void) +0:78 Convert uint to int ( temp int) +0:78 'u' ( temp uint) +0:78 'd' ( temp double) +0:79 Function Call: foo2(i1;u1; ( temp void) +0:79 Convert uint to int ( temp int) +0:79 'u' ( temp uint) +0:79 'u' ( temp uint) +0:80 Function Call: foo2(i1;i1; ( temp void) +0:80 Convert uint to int ( temp int) +0:80 'u' ( temp uint) +0:80 'i' ( temp int) +0:81 Function Call: foo2(i1;f1; ( temp void) +0:81 Convert uint to int ( temp int) +0:81 'u' ( temp uint) +0:81 'f' ( temp float) +0:83 Function Call: foo2(i1;b1; ( temp void) +0:83 'i' ( temp int) +0:83 'b' ( temp bool) +0:84 Function Call: foo2(i1;d1; ( temp void) +0:84 'i' ( temp int) +0:84 'd' ( temp double) +0:85 Function Call: foo2(i1;u1; ( temp void) +0:85 'i' ( temp int) +0:85 'u' ( temp uint) +0:86 Function Call: foo2(i1;i1; ( temp void) +0:86 'i' ( temp int) +0:86 'i' ( temp int) +0:87 Function Call: foo2(i1;f1; ( temp void) +0:87 'i' ( temp int) +0:87 'f' ( temp float) +0:89 Function Call: foo3(b1; ( temp void) +0:89 'b' ( temp bool) +0:90 Function Call: foo3(b1; ( temp void) +0:90 Convert double to bool ( temp bool) +0:90 'd' ( temp double) +0:91 Function Call: foo3(b1; ( temp void) +0:91 Convert uint to bool ( temp bool) +0:91 'u' ( temp uint) +0:92 Function Call: foo3(b1; ( temp void) +0:92 Convert int to bool ( temp bool) +0:92 'i' ( temp int) +0:93 Function Call: foo3(b1; ( temp void) +0:93 Convert float to bool ( temp bool) +0:93 'f' ( temp float) +0:95 Function Call: foo4(u1; ( temp void) +0:95 Convert bool to uint ( temp uint) +0:95 'b' ( temp bool) +0:96 Function Call: foo4(u1; ( temp void) +0:96 Convert double to uint ( temp uint) +0:96 'd' ( temp double) +0:97 Function Call: foo4(u1; ( temp void) +0:97 'u' ( temp uint) +0:98 Function Call: foo4(u1; ( temp void) +0:98 Convert int to uint ( temp uint) +0:98 'i' ( temp int) +0:99 Function Call: foo4(u1; ( temp void) +0:99 Convert float to uint ( temp uint) +0:99 'f' ( temp float) +0:101 Function Call: foo5(i1; ( temp void) +0:101 Convert bool to int ( temp int) +0:101 'b' ( temp bool) +0:102 Function Call: foo5(i1; ( temp void) +0:102 Convert double to int ( temp int) +0:102 'd' ( temp double) +0:103 Function Call: foo5(i1; ( temp void) +0:103 Convert uint to int ( temp int) +0:103 'u' ( temp uint) +0:104 Function Call: foo5(i1; ( temp void) +0:104 'i' ( temp int) +0:105 Function Call: foo5(i1; ( temp void) +0:105 Convert float to int ( temp int) +0:105 'f' ( temp float) +0:107 Function Call: foo6(f1; ( temp void) +0:107 Convert bool to float ( temp float) +0:107 'b' ( temp bool) +0:108 Function Call: foo6(f1; ( temp void) +0:108 Convert double to float ( temp float) +0:108 'd' ( temp double) +0:109 Function Call: foo6(f1; ( temp void) +0:109 Convert uint to float ( temp float) +0:109 'u' ( temp uint) +0:110 Function Call: foo6(f1; ( temp void) +0:110 Convert int to float ( temp float) +0:110 'i' ( temp int) +0:111 Function Call: foo6(f1; ( temp void) +0:111 'f' ( temp float) +0:113 Function Call: foo7(d1; ( temp void) +0:113 Convert bool to double ( temp double) +0:113 'b' ( temp bool) +0:114 Function Call: foo7(d1; ( temp void) +0:114 'd' ( temp double) +0:115 Function Call: foo7(d1; ( temp void) +0:115 Convert uint to double ( temp double) +0:115 'u' ( temp uint) +0:116 Function Call: foo7(d1; ( temp void) +0:116 Convert int to double ( temp double) +0:116 'i' ( temp int) +0:117 Function Call: foo7(d1; ( temp void) +0:117 Convert float to double ( temp double) +0:117 'f' ( temp float) +0:119 Function Call: foo8(f1; ( temp void) +0:119 Convert bool to float ( temp float) +0:119 'b' ( temp bool) +0:120 Function Call: foo8(f1; ( temp void) +0:120 Convert uint to float ( temp float) +0:120 'u' ( temp uint) +0:121 Function Call: foo8(f1; ( temp void) +0:121 Convert int to float ( temp float) +0:121 'i' ( temp int) +0:123 Function Call: foo9(i1; ( temp void) +0:123 Convert bool to int ( temp int) +0:123 'b' ( temp bool) +0:124 Function Call: foo9(u1; ( temp void) +0:124 Convert float to uint ( temp uint) +0:124 'f' ( temp float) +0:125 Function Call: foo9(u1; ( temp void) +0:125 Convert double to uint ( temp uint) +0:125 'd' ( temp double) +0:127 Function Call: foo10(i1; ( temp void) +0:127 Convert uint to int ( temp int) +0:127 'u' ( temp uint) +0:128 Function Call: foo10(i1; ( temp void) +0:128 Convert float to int ( temp int) +0:128 'f' ( temp float) +0:129 Function Call: foo10(i1; ( temp void) +0:129 Convert double to int ( temp int) +0:129 'd' ( temp double) +0:131 Function Call: foo11(u1; ( temp void) +0:131 Convert bool to uint ( temp uint) +0:131 'b' ( temp bool) +0:132 Function Call: foo11(d1; ( temp void) +0:132 Convert float to double ( temp double) +0:132 'f' ( temp float) +0:133 Function Call: foo12(vd3; ( temp void) +0:133 Convert float to double ( temp 3-component vector of double) +0:133 Construct vec3 ( temp 3-component vector of float) +0:133 'f' ( temp float) +0:134 Function Call: foo16(vu2; ( temp void) +0:? Convert int to uint ( temp 2-component vector of uint) +0:? Construct ivec2 ( temp 2-component vector of int) +0:134 'i' ( temp int) +0:134 'i' ( temp int) +0:136 Function Call: foo13(vf3; ( temp void) +0:136 Construct vec3 ( in 3-component vector of float) +0:136 'f' ( temp float) +0:137 Function Call: foo14(vi1; ( temp void) +0:137 Construct int ( in 1-component vector of int) +0:137 Construct ivec4 ( temp 4-component vector of int) +0:137 'i' ( temp int) +0:138 Function Call: foo15(vb1; ( temp void) +0:138 Construct bool ( in 1-component vector of bool) +0:138 'b' ( temp bool) +0:139 Function Call: foo15(vb1; ( temp void) +0:139 Construct bool ( in 1-component vector of bool) +0:139 Construct bvec3 ( temp 3-component vector of bool) +0:139 'b' ( temp bool) +0:141 Branch: Return with expression +0:141 'input' ( in 4-component vector of float) +0:46 Function Definition: PixelShaderFunction( ( temp void) +0:46 Function Parameters: +0:? Sequence +0:46 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:46 move second child to first child ( temp 4-component vector of float) +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) +0:46 Function Call: @PixelShaderFunction(vf4; ( temp 4-component vector of float) +0:? 'input' ( temp 4-component vector of 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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 520 + + Capability Shader + Capability Float64 + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "PixelShaderFunction" 513 516 + ExecutionMode 4 OriginUpperLeft + Name 4 "PixelShaderFunction" + Name 13 "foo1(d1;b1;" + Name 11 "a" + Name 12 "b" + Name 20 "foo1(d1;u1;" + Name 18 "a" + Name 19 "b" + Name 27 "foo1(d1;i1;" + Name 25 "a" + Name 26 "b" + Name 34 "foo1(d1;f1;" + Name 32 "a" + Name 33 "b" + Name 39 "foo1(d1;d1;" + Name 37 "a" + Name 38 "b" + Name 44 "foo2(i1;b1;" + Name 42 "a" + Name 43 "b" + Name 49 "foo2(i1;u1;" + Name 47 "a" + Name 48 "b" + Name 54 "foo2(i1;i1;" + Name 52 "a" + Name 53 "b" + Name 59 "foo2(i1;f1;" + Name 57 "a" + Name 58 "b" + Name 64 "foo2(i1;d1;" + Name 62 "a" + Name 63 "b" + Name 68 "foo3(b1;" + Name 67 "b" + Name 72 "foo4(u1;" + Name 71 "b" + Name 76 "foo5(i1;" + Name 75 "b" + Name 80 "foo6(f1;" + Name 79 "b" + Name 84 "foo7(d1;" + Name 83 "b" + Name 87 "foo8(f1;" + Name 86 "" + Name 90 "foo8(d1;" + Name 89 "" + Name 93 "foo9(i1;" + Name 92 "" + Name 96 "foo9(u1;" + Name 95 "" + Name 99 "foo10(b1;" + Name 98 "" + Name 102 "foo10(i1;" + Name 101 "" + Name 108 "foo11(vf3;" + Name 107 "" + Name 111 "foo11(d1;" + Name 110 "" + Name 117 "foo11(vi3;" + Name 116 "" + Name 120 "foo11(u1;" + Name 119 "" + Name 123 "foo12(vf1;" + Name 122 "" + Name 129 "foo12(vd3;" + Name 128 "" + Name 132 "foo16(u1;" + Name 131 "" + Name 138 "foo16(vu2;" + Name 137 "" + Name 141 "foo13(vf3;" + Name 140 "" + Name 144 "foo14(vi1;" + Name 143 "" + Name 147 "foo15(vb1;" + Name 146 "" + Name 153 "@PixelShaderFunction(vf4;" + Name 152 "input" + Name 155 "d" + Name 156 "b" + Name 157 "param" + Name 159 "param" + Name 162 "param" + Name 164 "param" + Name 167 "u" + Name 168 "param" + Name 170 "param" + Name 173 "i" + Name 174 "param" + Name 176 "param" + Name 179 "f" + Name 180 "param" + Name 182 "param" + Name 187 "param" + Name 188 "param" + Name 193 "param" + Name 194 "param" + Name 199 "param" + Name 200 "param" + Name 205 "param" + Name 206 "param" + Name 211 "param" + Name 212 "param" + Name 217 "param" + Name 218 "param" + Name 223 "param" + Name 224 "param" + Name 229 "param" + Name 230 "param" + Name 235 "param" + Name 236 "param" + Name 241 "param" + Name 242 "param" + Name 247 "param" + Name 248 "param" + Name 253 "param" + Name 254 "param" + Name 259 "param" + Name 260 "param" + Name 265 "param" + Name 266 "param" + Name 271 "param" + Name 272 "param" + Name 277 "param" + Name 278 "param" + Name 283 "param" + Name 284 "param" + Name 289 "param" + Name 290 "param" + Name 295 "param" + Name 296 "param" + Name 301 "param" + Name 302 "param" + Name 305 "param" + Name 307 "param" + Name 310 "param" + Name 312 "param" + Name 315 "param" + Name 317 "param" + Name 320 "param" + Name 322 "param" + Name 325 "param" + Name 327 "param" + Name 330 "param" + Name 336 "param" + Name 341 "param" + Name 345 "param" + Name 350 "param" + Name 355 "param" + Name 359 "param" + Name 361 "param" + Name 366 "param" + Name 370 "param" + Name 376 "param" + Name 380 "param" + Name 384 "param" + Name 386 "param" + Name 391 "param" + Name 396 "param" + Name 400 "param" + Name 404 "param" + Name 408 "param" + Name 410 "param" + Name 416 "param" + Name 418 "param" + Name 423 "param" + Name 427 "param" + Name 431 "param" + Name 435 "param" + Name 439 "param" + Name 443 "param" + Name 447 "param" + Name 451 "param" + Name 455 "param" + Name 459 "param" + Name 463 "param" + Name 467 "param" + Name 471 "param" + Name 475 "param" + Name 480 "param" + Name 487 "param" + Name 491 "param" + Name 497 "param" + Name 500 "param" + Name 506 "param" + Name 511 "input" + Name 513 "input" + Name 516 "@entryPointOutput" + Name 517 "param" + Decorate 513(input) Location 0 + Decorate 516(@entryPointOutput) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 64 + 7: TypePointer Function 6(float) + 8: TypeBool + 9: TypePointer Function 8(bool) + 10: TypeFunction 2 7(ptr) 9(ptr) + 15: TypeInt 32 0 + 16: TypePointer Function 15(int) + 17: TypeFunction 2 7(ptr) 16(ptr) + 22: TypeInt 32 1 + 23: TypePointer Function 22(int) + 24: TypeFunction 2 7(ptr) 23(ptr) + 29: TypeFloat 32 + 30: TypePointer Function 29(float) + 31: TypeFunction 2 7(ptr) 30(ptr) + 36: TypeFunction 2 7(ptr) 7(ptr) + 41: TypeFunction 2 23(ptr) 9(ptr) + 46: TypeFunction 2 23(ptr) 16(ptr) + 51: TypeFunction 2 23(ptr) 23(ptr) + 56: TypeFunction 2 23(ptr) 30(ptr) + 61: TypeFunction 2 23(ptr) 7(ptr) + 66: TypeFunction 2 9(ptr) + 70: TypeFunction 2 16(ptr) + 74: TypeFunction 2 23(ptr) + 78: TypeFunction 2 30(ptr) + 82: TypeFunction 2 7(ptr) + 104: TypeVector 29(float) 3 + 105: TypePointer Function 104(fvec3) + 106: TypeFunction 2 105(ptr) + 113: TypeVector 22(int) 3 + 114: TypePointer Function 113(ivec3) + 115: TypeFunction 2 114(ptr) + 125: TypeVector 6(float) 3 + 126: TypePointer Function 125(fvec3) + 127: TypeFunction 2 126(ptr) + 134: TypeVector 15(int) 2 + 135: TypePointer Function 134(ivec2) + 136: TypeFunction 2 135(ptr) + 149: TypeVector 29(float) 4 + 150: TypePointer Function 149(fvec4) + 151: TypeFunction 149(fvec4) 150(ptr) + 334: 6(float) Constant 0 0 + 339: 15(int) Constant 0 + 348: 29(float) Constant 0 + 353: 15(int) Constant 1 + 373: 22(int) Constant 0 + 374: 22(int) Constant 1 + 394: 29(float) Constant 1065353216 + 414: 6(float) Constant 0 1072693248 + 484: TypeVector 22(int) 2 + 494: TypeVector 22(int) 4 + 503: TypeVector 8(bool) 3 + 512: TypePointer Input 149(fvec4) + 513(input): 512(ptr) Variable Input + 515: TypePointer Output 149(fvec4) +516(@entryPointOutput): 515(ptr) Variable Output +4(PixelShaderFunction): 2 Function None 3 + 5: Label + 511(input): 150(ptr) Variable Function + 517(param): 150(ptr) Variable Function + 514: 149(fvec4) Load 513(input) + Store 511(input) 514 + 518: 149(fvec4) Load 511(input) + Store 517(param) 518 + 519: 149(fvec4) FunctionCall 153(@PixelShaderFunction(vf4;) 517(param) + Store 516(@entryPointOutput) 519 + Return + FunctionEnd + 13(foo1(d1;b1;): 2 Function None 10 + 11(a): 7(ptr) FunctionParameter + 12(b): 9(ptr) FunctionParameter + 14: Label + Return + FunctionEnd + 20(foo1(d1;u1;): 2 Function None 17 + 18(a): 7(ptr) FunctionParameter + 19(b): 16(ptr) FunctionParameter + 21: Label + Return + FunctionEnd + 27(foo1(d1;i1;): 2 Function None 24 + 25(a): 7(ptr) FunctionParameter + 26(b): 23(ptr) FunctionParameter + 28: Label + Return + FunctionEnd + 34(foo1(d1;f1;): 2 Function None 31 + 32(a): 7(ptr) FunctionParameter + 33(b): 30(ptr) FunctionParameter + 35: Label + Return + FunctionEnd + 39(foo1(d1;d1;): 2 Function None 36 + 37(a): 7(ptr) FunctionParameter + 38(b): 7(ptr) FunctionParameter + 40: Label + Return + FunctionEnd + 44(foo2(i1;b1;): 2 Function None 41 + 42(a): 23(ptr) FunctionParameter + 43(b): 9(ptr) FunctionParameter + 45: Label + Return + FunctionEnd + 49(foo2(i1;u1;): 2 Function None 46 + 47(a): 23(ptr) FunctionParameter + 48(b): 16(ptr) FunctionParameter + 50: Label + Return + FunctionEnd + 54(foo2(i1;i1;): 2 Function None 51 + 52(a): 23(ptr) FunctionParameter + 53(b): 23(ptr) FunctionParameter + 55: Label + Return + FunctionEnd + 59(foo2(i1;f1;): 2 Function None 56 + 57(a): 23(ptr) FunctionParameter + 58(b): 30(ptr) FunctionParameter + 60: Label + Return + FunctionEnd + 64(foo2(i1;d1;): 2 Function None 61 + 62(a): 23(ptr) FunctionParameter + 63(b): 7(ptr) FunctionParameter + 65: Label + Return + FunctionEnd + 68(foo3(b1;): 2 Function None 66 + 67(b): 9(ptr) FunctionParameter + 69: Label + Return + FunctionEnd + 72(foo4(u1;): 2 Function None 70 + 71(b): 16(ptr) FunctionParameter + 73: Label + Return + FunctionEnd + 76(foo5(i1;): 2 Function None 74 + 75(b): 23(ptr) FunctionParameter + 77: Label + Return + FunctionEnd + 80(foo6(f1;): 2 Function None 78 + 79(b): 30(ptr) FunctionParameter + 81: Label + Return + FunctionEnd + 84(foo7(d1;): 2 Function None 82 + 83(b): 7(ptr) FunctionParameter + 85: Label + Return + FunctionEnd + 87(foo8(f1;): 2 Function None 78 + 86: 30(ptr) FunctionParameter + 88: Label + Return + FunctionEnd + 90(foo8(d1;): 2 Function None 82 + 89: 7(ptr) FunctionParameter + 91: Label + Return + FunctionEnd + 93(foo9(i1;): 2 Function None 74 + 92: 23(ptr) FunctionParameter + 94: Label + Return + FunctionEnd + 96(foo9(u1;): 2 Function None 70 + 95: 16(ptr) FunctionParameter + 97: Label + Return + FunctionEnd + 99(foo10(b1;): 2 Function None 66 + 98: 9(ptr) FunctionParameter + 100: Label + Return + FunctionEnd + 102(foo10(i1;): 2 Function None 74 + 101: 23(ptr) FunctionParameter + 103: Label + Return + FunctionEnd + 108(foo11(vf3;): 2 Function None 106 + 107: 105(ptr) FunctionParameter + 109: Label + Return + FunctionEnd + 111(foo11(d1;): 2 Function None 82 + 110: 7(ptr) FunctionParameter + 112: Label + Return + FunctionEnd + 117(foo11(vi3;): 2 Function None 115 + 116: 114(ptr) FunctionParameter + 118: Label + Return + FunctionEnd + 120(foo11(u1;): 2 Function None 70 + 119: 16(ptr) FunctionParameter + 121: Label + Return + FunctionEnd + 123(foo12(vf1;): 2 Function None 78 + 122: 30(ptr) FunctionParameter + 124: Label + Return + FunctionEnd + 129(foo12(vd3;): 2 Function None 127 + 128: 126(ptr) FunctionParameter + 130: Label + Return + FunctionEnd + 132(foo16(u1;): 2 Function None 70 + 131: 16(ptr) FunctionParameter + 133: Label + Return + FunctionEnd + 138(foo16(vu2;): 2 Function None 136 + 137: 135(ptr) FunctionParameter + 139: Label + Return + FunctionEnd + 141(foo13(vf3;): 2 Function None 106 + 140: 105(ptr) FunctionParameter + 142: Label + Return + FunctionEnd + 144(foo14(vi1;): 2 Function None 74 + 143: 23(ptr) FunctionParameter + 145: Label + Return + FunctionEnd + 147(foo15(vb1;): 2 Function None 66 + 146: 9(ptr) FunctionParameter + 148: Label + Return + FunctionEnd +153(@PixelShaderFunction(vf4;): 149(fvec4) Function None 151 + 152(input): 150(ptr) FunctionParameter + 154: Label + 155(d): 7(ptr) Variable Function + 156(b): 9(ptr) Variable Function + 157(param): 7(ptr) Variable Function + 159(param): 9(ptr) Variable Function + 162(param): 7(ptr) Variable Function + 164(param): 7(ptr) Variable Function + 167(u): 16(ptr) Variable Function + 168(param): 7(ptr) Variable Function + 170(param): 16(ptr) Variable Function + 173(i): 23(ptr) Variable Function + 174(param): 7(ptr) Variable Function + 176(param): 23(ptr) Variable Function + 179(f): 30(ptr) Variable Function + 180(param): 7(ptr) Variable Function + 182(param): 30(ptr) Variable Function + 187(param): 7(ptr) Variable Function + 188(param): 9(ptr) Variable Function + 193(param): 7(ptr) Variable Function + 194(param): 7(ptr) Variable Function + 199(param): 7(ptr) Variable Function + 200(param): 16(ptr) Variable Function + 205(param): 7(ptr) Variable Function + 206(param): 23(ptr) Variable Function + 211(param): 7(ptr) Variable Function + 212(param): 30(ptr) Variable Function + 217(param): 7(ptr) Variable Function + 218(param): 9(ptr) Variable Function + 223(param): 7(ptr) Variable Function + 224(param): 7(ptr) Variable Function + 229(param): 7(ptr) Variable Function + 230(param): 16(ptr) Variable Function + 235(param): 7(ptr) Variable Function + 236(param): 23(ptr) Variable Function + 241(param): 7(ptr) Variable Function + 242(param): 30(ptr) Variable Function + 247(param): 7(ptr) Variable Function + 248(param): 9(ptr) Variable Function + 253(param): 7(ptr) Variable Function + 254(param): 7(ptr) Variable Function + 259(param): 7(ptr) Variable Function + 260(param): 16(ptr) Variable Function + 265(param): 7(ptr) Variable Function + 266(param): 23(ptr) Variable Function + 271(param): 7(ptr) Variable Function + 272(param): 30(ptr) Variable Function + 277(param): 23(ptr) Variable Function + 278(param): 9(ptr) Variable Function + 283(param): 23(ptr) Variable Function + 284(param): 7(ptr) Variable Function + 289(param): 23(ptr) Variable Function + 290(param): 16(ptr) Variable Function + 295(param): 23(ptr) Variable Function + 296(param): 23(ptr) Variable Function + 301(param): 23(ptr) Variable Function + 302(param): 30(ptr) Variable Function + 305(param): 23(ptr) Variable Function + 307(param): 9(ptr) Variable Function + 310(param): 23(ptr) Variable Function + 312(param): 7(ptr) Variable Function + 315(param): 23(ptr) Variable Function + 317(param): 16(ptr) Variable Function + 320(param): 23(ptr) Variable Function + 322(param): 23(ptr) Variable Function + 325(param): 23(ptr) Variable Function + 327(param): 30(ptr) Variable Function + 330(param): 9(ptr) Variable Function + 336(param): 9(ptr) Variable Function + 341(param): 9(ptr) Variable Function + 345(param): 9(ptr) Variable Function + 350(param): 9(ptr) Variable Function + 355(param): 16(ptr) Variable Function + 359(param): 16(ptr) Variable Function + 361(param): 16(ptr) Variable Function + 366(param): 16(ptr) Variable Function + 370(param): 16(ptr) Variable Function + 376(param): 23(ptr) Variable Function + 380(param): 23(ptr) Variable Function + 384(param): 23(ptr) Variable Function + 386(param): 23(ptr) Variable Function + 391(param): 23(ptr) Variable Function + 396(param): 30(ptr) Variable Function + 400(param): 30(ptr) Variable Function + 404(param): 30(ptr) Variable Function + 408(param): 30(ptr) Variable Function + 410(param): 30(ptr) Variable Function + 416(param): 7(ptr) Variable Function + 418(param): 7(ptr) Variable Function + 423(param): 7(ptr) Variable Function + 427(param): 7(ptr) Variable Function + 431(param): 7(ptr) Variable Function + 435(param): 30(ptr) Variable Function + 439(param): 30(ptr) Variable Function + 443(param): 30(ptr) Variable Function + 447(param): 23(ptr) Variable Function + 451(param): 16(ptr) Variable Function + 455(param): 16(ptr) Variable Function + 459(param): 23(ptr) Variable Function + 463(param): 23(ptr) Variable Function + 467(param): 23(ptr) Variable Function + 471(param): 16(ptr) Variable Function + 475(param): 7(ptr) Variable Function + 480(param): 126(ptr) Variable Function + 487(param): 135(ptr) Variable Function + 491(param): 105(ptr) Variable Function + 497(param): 23(ptr) Variable Function + 500(param): 9(ptr) Variable Function + 506(param): 9(ptr) Variable Function + 158: 6(float) Load 155(d) + Store 157(param) 158 + 160: 8(bool) Load 156(b) + Store 159(param) 160 + 161: 2 FunctionCall 13(foo1(d1;b1;) 157(param) 159(param) + 163: 6(float) Load 155(d) + Store 162(param) 163 + 165: 6(float) Load 155(d) + Store 164(param) 165 + 166: 2 FunctionCall 39(foo1(d1;d1;) 162(param) 164(param) + 169: 6(float) Load 155(d) + Store 168(param) 169 + 171: 15(int) Load 167(u) + Store 170(param) 171 + 172: 2 FunctionCall 20(foo1(d1;u1;) 168(param) 170(param) + 175: 6(float) Load 155(d) + Store 174(param) 175 + 177: 22(int) Load 173(i) + Store 176(param) 177 + 178: 2 FunctionCall 27(foo1(d1;i1;) 174(param) 176(param) + 181: 6(float) Load 155(d) + Store 180(param) 181 + 183: 29(float) Load 179(f) + Store 182(param) 183 + 184: 2 FunctionCall 34(foo1(d1;f1;) 180(param) 182(param) + 185: 29(float) Load 179(f) + 186: 6(float) FConvert 185 + Store 187(param) 186 + 189: 8(bool) Load 156(b) + Store 188(param) 189 + 190: 2 FunctionCall 13(foo1(d1;b1;) 187(param) 188(param) + 191: 29(float) Load 179(f) + 192: 6(float) FConvert 191 + Store 193(param) 192 + 195: 6(float) Load 155(d) + Store 194(param) 195 + 196: 2 FunctionCall 39(foo1(d1;d1;) 193(param) 194(param) + 197: 29(float) Load 179(f) + 198: 6(float) FConvert 197 + Store 199(param) 198 + 201: 15(int) Load 167(u) + Store 200(param) 201 + 202: 2 FunctionCall 20(foo1(d1;u1;) 199(param) 200(param) + 203: 29(float) Load 179(f) + 204: 6(float) FConvert 203 + Store 205(param) 204 + 207: 22(int) Load 173(i) + Store 206(param) 207 + 208: 2 FunctionCall 27(foo1(d1;i1;) 205(param) 206(param) + 209: 29(float) Load 179(f) + 210: 6(float) FConvert 209 + Store 211(param) 210 + 213: 29(float) Load 179(f) + Store 212(param) 213 + 214: 2 FunctionCall 34(foo1(d1;f1;) 211(param) 212(param) + 215: 15(int) Load 167(u) + 216: 6(float) ConvertUToF 215 + Store 217(param) 216 + 219: 8(bool) Load 156(b) + Store 218(param) 219 + 220: 2 FunctionCall 13(foo1(d1;b1;) 217(param) 218(param) + 221: 15(int) Load 167(u) + 222: 6(float) ConvertUToF 221 + Store 223(param) 222 + 225: 6(float) Load 155(d) + Store 224(param) 225 + 226: 2 FunctionCall 39(foo1(d1;d1;) 223(param) 224(param) + 227: 15(int) Load 167(u) + 228: 6(float) ConvertUToF 227 + Store 229(param) 228 + 231: 15(int) Load 167(u) + Store 230(param) 231 + 232: 2 FunctionCall 20(foo1(d1;u1;) 229(param) 230(param) + 233: 15(int) Load 167(u) + 234: 6(float) ConvertUToF 233 + Store 235(param) 234 + 237: 22(int) Load 173(i) + Store 236(param) 237 + 238: 2 FunctionCall 27(foo1(d1;i1;) 235(param) 236(param) + 239: 15(int) Load 167(u) + 240: 6(float) ConvertUToF 239 + Store 241(param) 240 + 243: 29(float) Load 179(f) + Store 242(param) 243 + 244: 2 FunctionCall 34(foo1(d1;f1;) 241(param) 242(param) + 245: 22(int) Load 173(i) + 246: 6(float) ConvertSToF 245 + Store 247(param) 246 + 249: 8(bool) Load 156(b) + Store 248(param) 249 + 250: 2 FunctionCall 13(foo1(d1;b1;) 247(param) 248(param) + 251: 22(int) Load 173(i) + 252: 6(float) ConvertSToF 251 + Store 253(param) 252 + 255: 6(float) Load 155(d) + Store 254(param) 255 + 256: 2 FunctionCall 39(foo1(d1;d1;) 253(param) 254(param) + 257: 22(int) Load 173(i) + 258: 6(float) ConvertSToF 257 + Store 259(param) 258 + 261: 15(int) Load 167(u) + Store 260(param) 261 + 262: 2 FunctionCall 20(foo1(d1;u1;) 259(param) 260(param) + 263: 22(int) Load 173(i) + 264: 6(float) ConvertSToF 263 + Store 265(param) 264 + 267: 22(int) Load 173(i) + Store 266(param) 267 + 268: 2 FunctionCall 27(foo1(d1;i1;) 265(param) 266(param) + 269: 22(int) Load 173(i) + 270: 6(float) ConvertSToF 269 + Store 271(param) 270 + 273: 29(float) Load 179(f) + Store 272(param) 273 + 274: 2 FunctionCall 34(foo1(d1;f1;) 271(param) 272(param) + 275: 15(int) Load 167(u) + 276: 22(int) Bitcast 275 + Store 277(param) 276 + 279: 8(bool) Load 156(b) + Store 278(param) 279 + 280: 2 FunctionCall 44(foo2(i1;b1;) 277(param) 278(param) + 281: 15(int) Load 167(u) + 282: 22(int) Bitcast 281 + Store 283(param) 282 + 285: 6(float) Load 155(d) + Store 284(param) 285 + 286: 2 FunctionCall 64(foo2(i1;d1;) 283(param) 284(param) + 287: 15(int) Load 167(u) + 288: 22(int) Bitcast 287 + Store 289(param) 288 + 291: 15(int) Load 167(u) + Store 290(param) 291 + 292: 2 FunctionCall 49(foo2(i1;u1;) 289(param) 290(param) + 293: 15(int) Load 167(u) + 294: 22(int) Bitcast 293 + Store 295(param) 294 + 297: 22(int) Load 173(i) + Store 296(param) 297 + 298: 2 FunctionCall 54(foo2(i1;i1;) 295(param) 296(param) + 299: 15(int) Load 167(u) + 300: 22(int) Bitcast 299 + Store 301(param) 300 + 303: 29(float) Load 179(f) + Store 302(param) 303 + 304: 2 FunctionCall 59(foo2(i1;f1;) 301(param) 302(param) + 306: 22(int) Load 173(i) + Store 305(param) 306 + 308: 8(bool) Load 156(b) + Store 307(param) 308 + 309: 2 FunctionCall 44(foo2(i1;b1;) 305(param) 307(param) + 311: 22(int) Load 173(i) + Store 310(param) 311 + 313: 6(float) Load 155(d) + Store 312(param) 313 + 314: 2 FunctionCall 64(foo2(i1;d1;) 310(param) 312(param) + 316: 22(int) Load 173(i) + Store 315(param) 316 + 318: 15(int) Load 167(u) + Store 317(param) 318 + 319: 2 FunctionCall 49(foo2(i1;u1;) 315(param) 317(param) + 321: 22(int) Load 173(i) + Store 320(param) 321 + 323: 22(int) Load 173(i) + Store 322(param) 323 + 324: 2 FunctionCall 54(foo2(i1;i1;) 320(param) 322(param) + 326: 22(int) Load 173(i) + Store 325(param) 326 + 328: 29(float) Load 179(f) + Store 327(param) 328 + 329: 2 FunctionCall 59(foo2(i1;f1;) 325(param) 327(param) + 331: 8(bool) Load 156(b) + Store 330(param) 331 + 332: 2 FunctionCall 68(foo3(b1;) 330(param) + 333: 6(float) Load 155(d) + 335: 8(bool) FOrdNotEqual 333 334 + Store 336(param) 335 + 337: 2 FunctionCall 68(foo3(b1;) 336(param) + 338: 15(int) Load 167(u) + 340: 8(bool) INotEqual 338 339 + Store 341(param) 340 + 342: 2 FunctionCall 68(foo3(b1;) 341(param) + 343: 22(int) Load 173(i) + 344: 8(bool) INotEqual 343 339 + Store 345(param) 344 + 346: 2 FunctionCall 68(foo3(b1;) 345(param) + 347: 29(float) Load 179(f) + 349: 8(bool) FOrdNotEqual 347 348 + Store 350(param) 349 + 351: 2 FunctionCall 68(foo3(b1;) 350(param) + 352: 8(bool) Load 156(b) + 354: 15(int) Select 352 353 339 + Store 355(param) 354 + 356: 2 FunctionCall 72(foo4(u1;) 355(param) + 357: 6(float) Load 155(d) + 358: 15(int) ConvertFToU 357 + Store 359(param) 358 + 360: 2 FunctionCall 72(foo4(u1;) 359(param) + 362: 15(int) Load 167(u) + Store 361(param) 362 + 363: 2 FunctionCall 72(foo4(u1;) 361(param) + 364: 22(int) Load 173(i) + 365: 15(int) Bitcast 364 + Store 366(param) 365 + 367: 2 FunctionCall 72(foo4(u1;) 366(param) + 368: 29(float) Load 179(f) + 369: 15(int) ConvertFToU 368 + Store 370(param) 369 + 371: 2 FunctionCall 72(foo4(u1;) 370(param) + 372: 8(bool) Load 156(b) + 375: 22(int) Select 372 374 373 + Store 376(param) 375 + 377: 2 FunctionCall 76(foo5(i1;) 376(param) + 378: 6(float) Load 155(d) + 379: 22(int) ConvertFToS 378 + Store 380(param) 379 + 381: 2 FunctionCall 76(foo5(i1;) 380(param) + 382: 15(int) Load 167(u) + 383: 22(int) Bitcast 382 + Store 384(param) 383 + 385: 2 FunctionCall 76(foo5(i1;) 384(param) + 387: 22(int) Load 173(i) + Store 386(param) 387 + 388: 2 FunctionCall 76(foo5(i1;) 386(param) + 389: 29(float) Load 179(f) + 390: 22(int) ConvertFToS 389 + Store 391(param) 390 + 392: 2 FunctionCall 76(foo5(i1;) 391(param) + 393: 8(bool) Load 156(b) + 395: 29(float) Select 393 394 348 + Store 396(param) 395 + 397: 2 FunctionCall 80(foo6(f1;) 396(param) + 398: 6(float) Load 155(d) + 399: 29(float) FConvert 398 + Store 400(param) 399 + 401: 2 FunctionCall 80(foo6(f1;) 400(param) + 402: 15(int) Load 167(u) + 403: 29(float) ConvertUToF 402 + Store 404(param) 403 + 405: 2 FunctionCall 80(foo6(f1;) 404(param) + 406: 22(int) Load 173(i) + 407: 29(float) ConvertSToF 406 + Store 408(param) 407 + 409: 2 FunctionCall 80(foo6(f1;) 408(param) + 411: 29(float) Load 179(f) + Store 410(param) 411 + 412: 2 FunctionCall 80(foo6(f1;) 410(param) + 413: 8(bool) Load 156(b) + 415: 6(float) Select 413 414 334 + Store 416(param) 415 + 417: 2 FunctionCall 84(foo7(d1;) 416(param) + 419: 6(float) Load 155(d) + Store 418(param) 419 + 420: 2 FunctionCall 84(foo7(d1;) 418(param) + 421: 15(int) Load 167(u) + 422: 6(float) ConvertUToF 421 + Store 423(param) 422 + 424: 2 FunctionCall 84(foo7(d1;) 423(param) + 425: 22(int) Load 173(i) + 426: 6(float) ConvertSToF 425 + Store 427(param) 426 + 428: 2 FunctionCall 84(foo7(d1;) 427(param) + 429: 29(float) Load 179(f) + 430: 6(float) FConvert 429 + Store 431(param) 430 + 432: 2 FunctionCall 84(foo7(d1;) 431(param) + 433: 8(bool) Load 156(b) + 434: 29(float) Select 433 394 348 + Store 435(param) 434 + 436: 2 FunctionCall 87(foo8(f1;) 435(param) + 437: 15(int) Load 167(u) + 438: 29(float) ConvertUToF 437 + Store 439(param) 438 + 440: 2 FunctionCall 87(foo8(f1;) 439(param) + 441: 22(int) Load 173(i) + 442: 29(float) ConvertSToF 441 + Store 443(param) 442 + 444: 2 FunctionCall 87(foo8(f1;) 443(param) + 445: 8(bool) Load 156(b) + 446: 22(int) Select 445 374 373 + Store 447(param) 446 + 448: 2 FunctionCall 93(foo9(i1;) 447(param) + 449: 29(float) Load 179(f) + 450: 15(int) ConvertFToU 449 + Store 451(param) 450 + 452: 2 FunctionCall 96(foo9(u1;) 451(param) + 453: 6(float) Load 155(d) + 454: 15(int) ConvertFToU 453 + Store 455(param) 454 + 456: 2 FunctionCall 96(foo9(u1;) 455(param) + 457: 15(int) Load 167(u) + 458: 22(int) Bitcast 457 + Store 459(param) 458 + 460: 2 FunctionCall 102(foo10(i1;) 459(param) + 461: 29(float) Load 179(f) + 462: 22(int) ConvertFToS 461 + Store 463(param) 462 + 464: 2 FunctionCall 102(foo10(i1;) 463(param) + 465: 6(float) Load 155(d) + 466: 22(int) ConvertFToS 465 + Store 467(param) 466 + 468: 2 FunctionCall 102(foo10(i1;) 467(param) + 469: 8(bool) Load 156(b) + 470: 15(int) Select 469 353 339 + Store 471(param) 470 + 472: 2 FunctionCall 120(foo11(u1;) 471(param) + 473: 29(float) Load 179(f) + 474: 6(float) FConvert 473 + Store 475(param) 474 + 476: 2 FunctionCall 111(foo11(d1;) 475(param) + 477: 29(float) Load 179(f) + 478: 104(fvec3) CompositeConstruct 477 477 477 + 479: 125(fvec3) FConvert 478 + Store 480(param) 479 + 481: 2 FunctionCall 129(foo12(vd3;) 480(param) + 482: 22(int) Load 173(i) + 483: 22(int) Load 173(i) + 485: 484(ivec2) CompositeConstruct 482 483 + 486: 134(ivec2) Bitcast 485 + Store 487(param) 486 + 488: 2 FunctionCall 138(foo16(vu2;) 487(param) + 489: 29(float) Load 179(f) + 490: 104(fvec3) CompositeConstruct 489 489 489 + Store 491(param) 490 + 492: 2 FunctionCall 141(foo13(vf3;) 491(param) + 493: 22(int) Load 173(i) + 495: 494(ivec4) CompositeConstruct 493 493 493 493 + 496: 22(int) CompositeExtract 495 0 + Store 497(param) 496 + 498: 2 FunctionCall 144(foo14(vi1;) 497(param) + 499: 8(bool) Load 156(b) + Store 500(param) 499 + 501: 2 FunctionCall 147(foo15(vb1;) 500(param) + 502: 8(bool) Load 156(b) + 504: 503(bvec3) CompositeConstruct 502 502 502 + 505: 8(bool) CompositeExtract 504 0 + Store 506(param) 505 + 507: 2 FunctionCall 147(foo15(vb1;) 506(param) + 508: 149(fvec4) Load 152(input) + ReturnValue 508 + FunctionEnd 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 new file mode 100644 index 0000000..b8ddf0d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.params.default.frag.out @@ -0,0 +1,652 @@ +hlsl.params.default.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:9 Function Definition: fn1(vi4;b1;b1; ( temp 4-component vector of int) +0:9 Function Parameters: +0:9 'p0' ( in 4-component vector of int) +0:9 'b1' ( in bool) +0:9 'b2' ( in bool) +0:? Sequence +0:10 Branch: Return with expression +0:10 'p0' ( in 4-component vector of int) +0:17 Function Definition: fn1(vi4;vi4;i1[2];i1; ( temp 4-component vector of int) +0:17 Function Parameters: +0:17 'p0' ( in 4-component vector of int) +0:17 'p1' ( in 4-component vector of int) +0:17 'p2' ( in 2-element array of int) +0:17 'p3' ( in int) +0:? Sequence +0:18 Branch: Return with expression +0:18 add ( temp 4-component vector of int) +0:18 add ( temp 4-component vector of int) +0:18 add ( temp 4-component vector of int) +0:18 'p0' ( in 4-component vector of int) +0:18 'p1' ( in 4-component vector of int) +0:18 direct index ( temp int) +0:18 'p2' ( in 2-element array of int) +0:18 Constant: +0:18 0 (const int) +0:18 'p3' ( in int) +0:23 Function Definition: fn2(vi4;i1; ( temp 4-component vector of int) +0:23 Function Parameters: +0:23 'p0' ( in 4-component vector of int) +0:23 'x' ( in int) +0:? Sequence +0:24 Branch: Return with expression +0:? Constant: +0:? 10 (const int) +0:? 11 (const int) +0:? 12 (const int) +0:? 13 (const int) +0:28 Function Definition: fn2(vi4;f1; ( temp 4-component vector of int) +0:28 Function Parameters: +0:28 'p0' ( in 4-component vector of int) +0:28 'x' ( in float) +0:? Sequence +0:29 Branch: Return with expression +0:29 add ( temp 4-component vector of int) +0:29 'p0' ( in 4-component vector of int) +0:? Constant: +0:? 20 (const int) +0:? 21 (const int) +0:? 22 (const int) +0:? 23 (const int) +0:32 Function Definition: fn3(i1; ( temp void) +0:32 Function Parameters: +0:32 'p0' ( in int) +0:36 Function Definition: @main( ( temp 4-component vector of int) +0:36 Function Parameters: +0:? Sequence +0:37 Sequence +0:37 move second child to first child ( temp 2-element array of int) +0:37 'myarray' ( temp 2-element array of int) +0:37 Constant: +0:37 30 (const int) +0:37 31 (const int) +0:39 Function Call: fn3(i1; ( temp void) +0:32 Constant: +0:32 3 (const int) +0:40 Function Call: fn3(i1; ( temp void) +0:40 Constant: +0:40 5 (const int) +0:50 Branch: Return with expression +0:49 add ( temp 4-component vector of int) +0:47 add ( temp 4-component vector of int) +0:46 add ( temp 4-component vector of int) +0:45 add ( temp 4-component vector of int) +0:44 add ( temp 4-component vector of int) +0:43 add ( temp 4-component vector of int) +0:42 add ( temp 4-component vector of int) +0:42 Function Call: fn1(vi4;vi4;i1[2];i1; ( temp 4-component vector of int) +0:42 Constant: +0:42 100 (const int) +0:42 100 (const int) +0:42 100 (const int) +0:42 100 (const int) +0:? Constant: +0:? -1 (const int) +0:? -2 (const int) +0:? -3 (const int) +0:? -4 (const int) +0:15 Constant: +0:15 1 (const int) +0:15 2 (const int) +0:16 Constant: +0:16 42 (const int) +0:43 Function Call: fn1(vi4;vi4;i1[2];i1; ( temp 4-component vector of int) +0:43 Constant: +0:43 101 (const int) +0:43 101 (const int) +0:43 101 (const int) +0:43 101 (const int) +0:43 ui4: direct index for structure ( uniform 4-component vector of int) +0:43 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of int ui4}) +0:43 Constant: +0:43 0 (const uint) +0:15 Constant: +0:15 1 (const int) +0:15 2 (const int) +0:16 Constant: +0:16 42 (const int) +0:44 Function Call: fn1(vi4;vi4;i1[2];i1; ( temp 4-component vector of int) +0:44 Constant: +0:44 102 (const int) +0:44 102 (const int) +0:44 102 (const int) +0:44 102 (const int) +0:44 ui4: direct index for structure ( uniform 4-component vector of int) +0:44 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of int ui4}) +0:44 Constant: +0:44 0 (const uint) +0:44 'myarray' ( temp 2-element array of int) +0:16 Constant: +0:16 42 (const int) +0:45 Function Call: fn1(vi4;vi4;i1[2];i1; ( temp 4-component vector of int) +0:45 Constant: +0:45 103 (const int) +0:45 103 (const int) +0:45 103 (const int) +0:45 103 (const int) +0:45 ui4: direct index for structure ( uniform 4-component vector of int) +0:45 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of int ui4}) +0:45 Constant: +0:45 0 (const uint) +0:45 'myarray' ( temp 2-element array of int) +0:45 Constant: +0:45 99 (const int) +0:46 Function Call: fn1(vi4;b1;b1; ( temp 4-component vector of int) +0:46 Constant: +0:46 104 (const int) +0:46 104 (const int) +0:46 104 (const int) +0:46 104 (const int) +0:46 Constant: +0:46 false (const bool) +0:9 Constant: +0:9 false (const bool) +0:47 Function Call: fn1(vi4;b1;b1; ( temp 4-component vector of int) +0:47 Constant: +0:47 105 (const int) +0:47 105 (const int) +0:47 105 (const int) +0:47 105 (const int) +0:47 Constant: +0:47 false (const bool) +0:47 Constant: +0:47 true (const bool) +0:49 Function Call: fn2(vi4;f1; ( temp 4-component vector of int) +0:49 Constant: +0:49 110 (const int) +0:49 110 (const int) +0:49 110 (const int) +0:49 110 (const int) +0:49 Constant: +0:49 11.110000 +0:50 Function Call: fn2(vi4;i1; ( temp 4-component vector of int) +0:50 Constant: +0:50 111 (const int) +0:50 111 (const int) +0:50 111 (const int) +0:50 111 (const int) +0:50 Constant: +0:50 12 (const int) +0:36 Function Definition: main( ( temp void) +0:36 Function Parameters: +0:? Sequence +0:36 move second child to first child ( temp 4-component vector of int) +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of int) +0:36 Function Call: @main( ( temp 4-component vector of int) +0:? Linker Objects +0:? 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of int ui4}) +0:? 'cia' ( const int) +0:? -4 (const int) +0:? 'cib' ( const int) +0:? -42 (const int) +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of int) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:9 Function Definition: fn1(vi4;b1;b1; ( temp 4-component vector of int) +0:9 Function Parameters: +0:9 'p0' ( in 4-component vector of int) +0:9 'b1' ( in bool) +0:9 'b2' ( in bool) +0:? Sequence +0:10 Branch: Return with expression +0:10 'p0' ( in 4-component vector of int) +0:17 Function Definition: fn1(vi4;vi4;i1[2];i1; ( temp 4-component vector of int) +0:17 Function Parameters: +0:17 'p0' ( in 4-component vector of int) +0:17 'p1' ( in 4-component vector of int) +0:17 'p2' ( in 2-element array of int) +0:17 'p3' ( in int) +0:? Sequence +0:18 Branch: Return with expression +0:18 add ( temp 4-component vector of int) +0:18 add ( temp 4-component vector of int) +0:18 add ( temp 4-component vector of int) +0:18 'p0' ( in 4-component vector of int) +0:18 'p1' ( in 4-component vector of int) +0:18 direct index ( temp int) +0:18 'p2' ( in 2-element array of int) +0:18 Constant: +0:18 0 (const int) +0:18 'p3' ( in int) +0:23 Function Definition: fn2(vi4;i1; ( temp 4-component vector of int) +0:23 Function Parameters: +0:23 'p0' ( in 4-component vector of int) +0:23 'x' ( in int) +0:? Sequence +0:24 Branch: Return with expression +0:? Constant: +0:? 10 (const int) +0:? 11 (const int) +0:? 12 (const int) +0:? 13 (const int) +0:28 Function Definition: fn2(vi4;f1; ( temp 4-component vector of int) +0:28 Function Parameters: +0:28 'p0' ( in 4-component vector of int) +0:28 'x' ( in float) +0:? Sequence +0:29 Branch: Return with expression +0:29 add ( temp 4-component vector of int) +0:29 'p0' ( in 4-component vector of int) +0:? Constant: +0:? 20 (const int) +0:? 21 (const int) +0:? 22 (const int) +0:? 23 (const int) +0:32 Function Definition: fn3(i1; ( temp void) +0:32 Function Parameters: +0:32 'p0' ( in int) +0:36 Function Definition: @main( ( temp 4-component vector of int) +0:36 Function Parameters: +0:? Sequence +0:37 Sequence +0:37 move second child to first child ( temp 2-element array of int) +0:37 'myarray' ( temp 2-element array of int) +0:37 Constant: +0:37 30 (const int) +0:37 31 (const int) +0:39 Function Call: fn3(i1; ( temp void) +0:32 Constant: +0:32 3 (const int) +0:40 Function Call: fn3(i1; ( temp void) +0:40 Constant: +0:40 5 (const int) +0:50 Branch: Return with expression +0:49 add ( temp 4-component vector of int) +0:47 add ( temp 4-component vector of int) +0:46 add ( temp 4-component vector of int) +0:45 add ( temp 4-component vector of int) +0:44 add ( temp 4-component vector of int) +0:43 add ( temp 4-component vector of int) +0:42 add ( temp 4-component vector of int) +0:42 Function Call: fn1(vi4;vi4;i1[2];i1; ( temp 4-component vector of int) +0:42 Constant: +0:42 100 (const int) +0:42 100 (const int) +0:42 100 (const int) +0:42 100 (const int) +0:? Constant: +0:? -1 (const int) +0:? -2 (const int) +0:? -3 (const int) +0:? -4 (const int) +0:15 Constant: +0:15 1 (const int) +0:15 2 (const int) +0:16 Constant: +0:16 42 (const int) +0:43 Function Call: fn1(vi4;vi4;i1[2];i1; ( temp 4-component vector of int) +0:43 Constant: +0:43 101 (const int) +0:43 101 (const int) +0:43 101 (const int) +0:43 101 (const int) +0:43 ui4: direct index for structure ( uniform 4-component vector of int) +0:43 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of int ui4}) +0:43 Constant: +0:43 0 (const uint) +0:15 Constant: +0:15 1 (const int) +0:15 2 (const int) +0:16 Constant: +0:16 42 (const int) +0:44 Function Call: fn1(vi4;vi4;i1[2];i1; ( temp 4-component vector of int) +0:44 Constant: +0:44 102 (const int) +0:44 102 (const int) +0:44 102 (const int) +0:44 102 (const int) +0:44 ui4: direct index for structure ( uniform 4-component vector of int) +0:44 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of int ui4}) +0:44 Constant: +0:44 0 (const uint) +0:44 'myarray' ( temp 2-element array of int) +0:16 Constant: +0:16 42 (const int) +0:45 Function Call: fn1(vi4;vi4;i1[2];i1; ( temp 4-component vector of int) +0:45 Constant: +0:45 103 (const int) +0:45 103 (const int) +0:45 103 (const int) +0:45 103 (const int) +0:45 ui4: direct index for structure ( uniform 4-component vector of int) +0:45 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of int ui4}) +0:45 Constant: +0:45 0 (const uint) +0:45 'myarray' ( temp 2-element array of int) +0:45 Constant: +0:45 99 (const int) +0:46 Function Call: fn1(vi4;b1;b1; ( temp 4-component vector of int) +0:46 Constant: +0:46 104 (const int) +0:46 104 (const int) +0:46 104 (const int) +0:46 104 (const int) +0:46 Constant: +0:46 false (const bool) +0:9 Constant: +0:9 false (const bool) +0:47 Function Call: fn1(vi4;b1;b1; ( temp 4-component vector of int) +0:47 Constant: +0:47 105 (const int) +0:47 105 (const int) +0:47 105 (const int) +0:47 105 (const int) +0:47 Constant: +0:47 false (const bool) +0:47 Constant: +0:47 true (const bool) +0:49 Function Call: fn2(vi4;f1; ( temp 4-component vector of int) +0:49 Constant: +0:49 110 (const int) +0:49 110 (const int) +0:49 110 (const int) +0:49 110 (const int) +0:49 Constant: +0:49 11.110000 +0:50 Function Call: fn2(vi4;i1; ( temp 4-component vector of int) +0:50 Constant: +0:50 111 (const int) +0:50 111 (const int) +0:50 111 (const int) +0:50 111 (const int) +0:50 Constant: +0:50 12 (const int) +0:36 Function Definition: main( ( temp void) +0:36 Function Parameters: +0:? Sequence +0:36 move second child to first child ( temp 4-component vector of int) +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of int) +0:36 Function Call: @main( ( temp 4-component vector of int) +0:? Linker Objects +0:? 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of int ui4}) +0:? 'cia' ( const int) +0:? -4 (const int) +0:? 'cib' ( const int) +0:? -42 (const int) +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of int) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 178 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 175 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 15 "fn1(vi4;b1;b1;" + Name 12 "p0" + Name 13 "b1" + Name 14 "b2" + Name 27 "fn1(vi4;vi4;i1[2];i1;" + Name 23 "p0" + Name 24 "p1" + Name 25 "p2" + Name 26 "p3" + Name 32 "fn2(vi4;i1;" + Name 30 "p0" + Name 31 "x" + Name 39 "fn2(vi4;f1;" + Name 37 "p0" + Name 38 "x" + Name 43 "fn3(i1;" + Name 42 "p0" + Name 46 "@main(" + Name 80 "myarray" + Name 85 "param" + Name 88 "param" + Name 101 "param" + Name 102 "param" + Name 103 "param" + Name 104 "param" + Name 108 "$Global" + MemberName 108($Global) 0 "ui4" + Name 110 "" + Name 111 "param" + Name 112 "param" + Name 116 "param" + Name 117 "param" + Name 122 "param" + Name 123 "param" + Name 126 "param" + Name 128 "param" + Name 134 "param" + Name 135 "param" + Name 138 "param" + Name 140 "param" + Name 146 "param" + Name 147 "param" + Name 148 "param" + Name 154 "param" + Name 155 "param" + Name 156 "param" + Name 162 "param" + Name 163 "param" + Name 168 "param" + Name 169 "param" + Name 175 "@entryPointOutput" + MemberDecorate 108($Global) 0 Offset 0 + Decorate 108($Global) Block + Decorate 110 DescriptorSet 0 + Decorate 175(@entryPointOutput) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypeVector 6(int) 4 + 8: TypePointer Function 7(ivec4) + 9: TypeBool + 10: TypePointer Function 9(bool) + 11: TypeFunction 7(ivec4) 8(ptr) 10(ptr) 10(ptr) + 17: TypeInt 32 0 + 18: 17(int) Constant 2 + 19: TypeArray 6(int) 18 + 20: TypePointer Function 19 + 21: TypePointer Function 6(int) + 22: TypeFunction 7(ivec4) 8(ptr) 8(ptr) 20(ptr) 21(ptr) + 29: TypeFunction 7(ivec4) 8(ptr) 21(ptr) + 34: TypeFloat 32 + 35: TypePointer Function 34(float) + 36: TypeFunction 7(ivec4) 8(ptr) 35(ptr) + 41: TypeFunction 2 21(ptr) + 45: TypeFunction 7(ivec4) + 54: 6(int) Constant 0 + 64: 6(int) Constant 10 + 65: 6(int) Constant 11 + 66: 6(int) Constant 12 + 67: 6(int) Constant 13 + 68: 7(ivec4) ConstantComposite 64 65 66 67 + 72: 6(int) Constant 20 + 73: 6(int) Constant 21 + 74: 6(int) Constant 22 + 75: 6(int) Constant 23 + 76: 7(ivec4) ConstantComposite 72 73 74 75 + 81: 6(int) Constant 30 + 82: 6(int) Constant 31 + 83: 19 ConstantComposite 81 82 + 84: 6(int) Constant 3 + 87: 6(int) Constant 5 + 90: 6(int) Constant 100 + 91: 7(ivec4) ConstantComposite 90 90 90 90 + 92: 6(int) Constant 4294967295 + 93: 6(int) Constant 4294967294 + 94: 6(int) Constant 4294967293 + 95: 6(int) Constant 4294967292 + 96: 7(ivec4) ConstantComposite 92 93 94 95 + 97: 6(int) Constant 1 + 98: 6(int) Constant 2 + 99: 19 ConstantComposite 97 98 + 100: 6(int) Constant 42 + 106: 6(int) Constant 101 + 107: 7(ivec4) ConstantComposite 106 106 106 106 + 108($Global): TypeStruct 7(ivec4) + 109: TypePointer Uniform 108($Global) + 110: 109(ptr) Variable Uniform + 113: TypePointer Uniform 7(ivec4) + 120: 6(int) Constant 102 + 121: 7(ivec4) ConstantComposite 120 120 120 120 + 131: 6(int) Constant 103 + 132: 7(ivec4) ConstantComposite 131 131 131 131 + 133: 6(int) Constant 99 + 143: 6(int) Constant 104 + 144: 7(ivec4) ConstantComposite 143 143 143 143 + 145: 9(bool) ConstantFalse + 151: 6(int) Constant 105 + 152: 7(ivec4) ConstantComposite 151 151 151 151 + 153: 9(bool) ConstantTrue + 159: 6(int) Constant 110 + 160: 7(ivec4) ConstantComposite 159 159 159 159 + 161: 34(float) Constant 1093780111 + 166: 6(int) Constant 111 + 167: 7(ivec4) ConstantComposite 166 166 166 166 + 174: TypePointer Output 7(ivec4) +175(@entryPointOutput): 174(ptr) Variable Output + 177: 6(int) Constant 4294967254 + 4(main): 2 Function None 3 + 5: Label + 176: 7(ivec4) FunctionCall 46(@main() + Store 175(@entryPointOutput) 176 + Return + FunctionEnd +15(fn1(vi4;b1;b1;): 7(ivec4) Function None 11 + 12(p0): 8(ptr) FunctionParameter + 13(b1): 10(ptr) FunctionParameter + 14(b2): 10(ptr) FunctionParameter + 16: Label + 48: 7(ivec4) Load 12(p0) + ReturnValue 48 + FunctionEnd +27(fn1(vi4;vi4;i1[2];i1;): 7(ivec4) Function None 22 + 23(p0): 8(ptr) FunctionParameter + 24(p1): 8(ptr) FunctionParameter + 25(p2): 20(ptr) FunctionParameter + 26(p3): 21(ptr) FunctionParameter + 28: Label + 51: 7(ivec4) Load 23(p0) + 52: 7(ivec4) Load 24(p1) + 53: 7(ivec4) IAdd 51 52 + 55: 21(ptr) AccessChain 25(p2) 54 + 56: 6(int) Load 55 + 57: 7(ivec4) CompositeConstruct 56 56 56 56 + 58: 7(ivec4) IAdd 53 57 + 59: 6(int) Load 26(p3) + 60: 7(ivec4) CompositeConstruct 59 59 59 59 + 61: 7(ivec4) IAdd 58 60 + ReturnValue 61 + FunctionEnd + 32(fn2(vi4;i1;): 7(ivec4) Function None 29 + 30(p0): 8(ptr) FunctionParameter + 31(x): 21(ptr) FunctionParameter + 33: Label + ReturnValue 68 + FunctionEnd + 39(fn2(vi4;f1;): 7(ivec4) Function None 36 + 37(p0): 8(ptr) FunctionParameter + 38(x): 35(ptr) FunctionParameter + 40: Label + 71: 7(ivec4) Load 37(p0) + 77: 7(ivec4) IAdd 71 76 + ReturnValue 77 + FunctionEnd + 43(fn3(i1;): 2 Function None 41 + 42(p0): 21(ptr) FunctionParameter + 44: Label + Return + FunctionEnd + 46(@main(): 7(ivec4) Function None 45 + 47: Label + 80(myarray): 20(ptr) Variable Function + 85(param): 21(ptr) Variable Function + 88(param): 21(ptr) Variable Function + 101(param): 8(ptr) Variable Function + 102(param): 8(ptr) Variable Function + 103(param): 20(ptr) Variable Function + 104(param): 21(ptr) Variable Function + 111(param): 8(ptr) Variable Function + 112(param): 8(ptr) Variable Function + 116(param): 20(ptr) Variable Function + 117(param): 21(ptr) Variable Function + 122(param): 8(ptr) Variable Function + 123(param): 8(ptr) Variable Function + 126(param): 20(ptr) Variable Function + 128(param): 21(ptr) Variable Function + 134(param): 8(ptr) Variable Function + 135(param): 8(ptr) Variable Function + 138(param): 20(ptr) Variable Function + 140(param): 21(ptr) Variable Function + 146(param): 8(ptr) Variable Function + 147(param): 10(ptr) Variable Function + 148(param): 10(ptr) Variable Function + 154(param): 8(ptr) Variable Function + 155(param): 10(ptr) Variable Function + 156(param): 10(ptr) Variable Function + 162(param): 8(ptr) Variable Function + 163(param): 35(ptr) Variable Function + 168(param): 8(ptr) Variable Function + 169(param): 21(ptr) Variable Function + Store 80(myarray) 83 + Store 85(param) 84 + 86: 2 FunctionCall 43(fn3(i1;) 85(param) + Store 88(param) 87 + 89: 2 FunctionCall 43(fn3(i1;) 88(param) + Store 101(param) 91 + Store 102(param) 96 + Store 103(param) 99 + Store 104(param) 100 + 105: 7(ivec4) FunctionCall 27(fn1(vi4;vi4;i1[2];i1;) 101(param) 102(param) 103(param) 104(param) + Store 111(param) 107 + 114: 113(ptr) AccessChain 110 54 + 115: 7(ivec4) Load 114 + Store 112(param) 115 + Store 116(param) 99 + Store 117(param) 100 + 118: 7(ivec4) FunctionCall 27(fn1(vi4;vi4;i1[2];i1;) 111(param) 112(param) 116(param) 117(param) + 119: 7(ivec4) IAdd 105 118 + Store 122(param) 121 + 124: 113(ptr) AccessChain 110 54 + 125: 7(ivec4) Load 124 + Store 123(param) 125 + 127: 19 Load 80(myarray) + Store 126(param) 127 + Store 128(param) 100 + 129: 7(ivec4) FunctionCall 27(fn1(vi4;vi4;i1[2];i1;) 122(param) 123(param) 126(param) 128(param) + 130: 7(ivec4) IAdd 119 129 + Store 134(param) 132 + 136: 113(ptr) AccessChain 110 54 + 137: 7(ivec4) Load 136 + Store 135(param) 137 + 139: 19 Load 80(myarray) + Store 138(param) 139 + Store 140(param) 133 + 141: 7(ivec4) FunctionCall 27(fn1(vi4;vi4;i1[2];i1;) 134(param) 135(param) 138(param) 140(param) + 142: 7(ivec4) IAdd 130 141 + Store 146(param) 144 + Store 147(param) 145 + Store 148(param) 145 + 149: 7(ivec4) FunctionCall 15(fn1(vi4;b1;b1;) 146(param) 147(param) 148(param) + 150: 7(ivec4) IAdd 142 149 + Store 154(param) 152 + Store 155(param) 145 + Store 156(param) 153 + 157: 7(ivec4) FunctionCall 15(fn1(vi4;b1;b1;) 154(param) 155(param) 156(param) + 158: 7(ivec4) IAdd 150 157 + Store 162(param) 160 + Store 163(param) 161 + 164: 7(ivec4) FunctionCall 39(fn2(vi4;f1;) 162(param) 163(param) + 165: 7(ivec4) IAdd 158 164 + Store 168(param) 167 + Store 169(param) 66 + 170: 7(ivec4) FunctionCall 32(fn2(vi4;i1;) 168(param) 169(param) + 171: 7(ivec4) IAdd 165 170 + ReturnValue 171 + FunctionEnd 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 new file mode 100644 index 0000000..219e920 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.params.default.negative.frag.out @@ -0,0 +1,385 @@ +hlsl.params.default.negative.frag +ERROR: 0:27: '' : invalid default parameter value +ERROR: 0:32: 'p1' : invalid parameter after default value parameters +ERROR: 0:40: 'fn1' : ambiguous best function under implicit type conversion +ERROR: 0:47: 'fn2' : ambiguous best function under implicit type conversion +ERROR: 4 compilation errors. No code generated. + + +Shader version: 450 +gl_FragCoord origin is upper left +ERROR: node is still EOpNull! +0:7 Function Definition: fn1(vi4; ( temp 4-component vector of int) +0:7 Function Parameters: +0:7 'p0' ( in 4-component vector of int) +0:? Sequence +0:7 Branch: Return with expression +0:? Constant: +0:? 1 (const int) +0:? 2 (const int) +0:? 3 (const int) +0:? 4 (const int) +0:9 Function Definition: fn1(vi4;b1;b1; ( temp 4-component vector of int) +0:9 Function Parameters: +0:9 'p0' ( in 4-component vector of int) +0:9 'b1' ( in bool) +0:9 'b2' ( in bool) +0:? Sequence +0:10 Branch: Return with expression +0:10 'p0' ( in 4-component vector of int) +0:17 Function Definition: fn1(vi4;vi4;i1[2];i1; ( temp 4-component vector of int) +0:17 Function Parameters: +0:17 'p0' ( in 4-component vector of int) +0:17 'p1' ( in 4-component vector of int) +0:17 'p2' ( in 2-element array of int) +0:17 'p3' ( in int) +0:? Sequence +0:18 Branch: Return with expression +0:18 add ( temp 4-component vector of int) +0:18 add ( temp 4-component vector of int) +0:18 add ( temp 4-component vector of int) +0:18 'p0' ( in 4-component vector of int) +0:18 'p1' ( in 4-component vector of int) +0:18 direct index ( temp int) +0:18 'p2' ( in 2-element array of int) +0:18 Constant: +0:18 0 (const int) +0:18 'p3' ( in int) +0:23 Function Definition: fn2(vi4;i1; ( temp 4-component vector of int) +0:23 Function Parameters: +0:23 'p0' ( in 4-component vector of int) +0:23 'x' ( in int) +0:? Sequence +0:24 Branch: Return with expression +0:? Constant: +0:? 10 (const int) +0:? 11 (const int) +0:? 12 (const int) +0:? 13 (const int) +0:28 Function Definition: fn2(vi4; ( temp 4-component vector of int) +0:28 Function Parameters: +0:28 'p0' ( in 4-component vector of int) +0:? Sequence +0:29 Branch: Return with expression +0:29 add ( temp 4-component vector of int) +0:29 'p0' ( in 4-component vector of int) +0:? Constant: +0:? 20 (const int) +0:? 21 (const int) +0:? 22 (const int) +0:? 23 (const int) +0:33 Function Definition: fn3(i1; ( temp void) +0:33 Function Parameters: +0:33 'p0' ( in int) +0:37 Function Definition: @main( ( temp 4-component vector of int) +0:37 Function Parameters: +0:? Sequence +0:38 Sequence +0:38 move second child to first child ( temp 2-element array of int) +0:38 'myarray' ( temp 2-element array of int) +0:38 Constant: +0:38 30 (const int) +0:38 31 (const int) +0:49 Branch: Return with expression +0:48 add ( temp 4-component vector of int) +0:47 add ( temp 4-component vector of int) +0:45 add ( temp 4-component vector of int) +0:44 add ( temp 4-component vector of int) +0:43 add ( temp 4-component vector of int) +0:42 add ( temp 4-component vector of int) +0:41 add ( temp 4-component vector of int) +0:40 add ( temp 4-component vector of int) +0:40 Function Call: fn1(vi4; ( temp 4-component vector of int) +0:40 Constant: +0:40 100 (const int) +0:40 100 (const int) +0:40 100 (const int) +0:40 100 (const int) +0:41 Function Call: fn1(vi4;vi4;i1[2];i1; ( temp 4-component vector of int) +0:41 Constant: +0:41 101 (const int) +0:41 101 (const int) +0:41 101 (const int) +0:41 101 (const int) +0:41 ui4: direct index for structure ( uniform 4-component vector of int) +0:41 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of int ui4, uniform float ufvar}) +0:41 Constant: +0:41 0 (const uint) +0:15 Constant: +0:15 1 (const int) +0:15 2 (const int) +0:16 Constant: +0:16 42 (const int) +0:42 Function Call: fn1(vi4;vi4;i1[2];i1; ( temp 4-component vector of int) +0:42 Constant: +0:42 102 (const int) +0:42 102 (const int) +0:42 102 (const int) +0:42 102 (const int) +0:42 ui4: direct index for structure ( uniform 4-component vector of int) +0:42 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of int ui4, uniform float ufvar}) +0:42 Constant: +0:42 0 (const uint) +0:42 'myarray' ( temp 2-element array of int) +0:16 Constant: +0:16 42 (const int) +0:43 Function Call: fn1(vi4;vi4;i1[2];i1; ( temp 4-component vector of int) +0:43 Constant: +0:43 103 (const int) +0:43 103 (const int) +0:43 103 (const int) +0:43 103 (const int) +0:43 ui4: direct index for structure ( uniform 4-component vector of int) +0:43 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of int ui4, uniform float ufvar}) +0:43 Constant: +0:43 0 (const uint) +0:43 'myarray' ( temp 2-element array of int) +0:43 Constant: +0:43 99 (const int) +0:44 Function Call: fn1(vi4;b1;b1; ( temp 4-component vector of int) +0:44 Constant: +0:44 104 (const int) +0:44 104 (const int) +0:44 104 (const int) +0:44 104 (const int) +0:44 Constant: +0:44 false (const bool) +0:9 Constant: +0:9 false (const bool) +0:45 Function Call: fn1(vi4;b1;b1; ( temp 4-component vector of int) +0:45 Constant: +0:45 105 (const int) +0:45 105 (const int) +0:45 105 (const int) +0:45 105 (const int) +0:45 Constant: +0:45 false (const bool) +0:45 Constant: +0:45 true (const bool) +0:47 Function Call: fn2(vi4; ( temp 4-component vector of int) +0:47 Constant: +0:47 112 (const int) +0:47 112 (const int) +0:47 112 (const int) +0:47 112 (const int) +0:48 Function Call: fn2(vi4;i1; ( temp 4-component vector of int) +0:48 Constant: +0:48 110 (const int) +0:48 110 (const int) +0:48 110 (const int) +0:48 110 (const int) +0:48 Constant: +0:48 11 (const int) +0:49 Function Call: fn2(vi4;i1; ( temp 4-component vector of int) +0:49 Constant: +0:49 111 (const int) +0:49 111 (const int) +0:49 111 (const int) +0:49 111 (const int) +0:49 Constant: +0:49 12 (const int) +0:37 Function Definition: main( ( temp void) +0:37 Function Parameters: +0:? Sequence +0:37 move second child to first child ( temp 4-component vector of int) +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of int) +0:37 Function Call: @main( ( temp 4-component vector of int) +0:? Linker Objects +0:? 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of int ui4, uniform float ufvar}) +0:? 'cia' ( const int) +0:? -4 (const int) +0:? 'cib' ( const int) +0:? -42 (const int) +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of int) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +ERROR: node is still EOpNull! +0:7 Function Definition: fn1(vi4; ( temp 4-component vector of int) +0:7 Function Parameters: +0:7 'p0' ( in 4-component vector of int) +0:? Sequence +0:7 Branch: Return with expression +0:? Constant: +0:? 1 (const int) +0:? 2 (const int) +0:? 3 (const int) +0:? 4 (const int) +0:9 Function Definition: fn1(vi4;b1;b1; ( temp 4-component vector of int) +0:9 Function Parameters: +0:9 'p0' ( in 4-component vector of int) +0:9 'b1' ( in bool) +0:9 'b2' ( in bool) +0:? Sequence +0:10 Branch: Return with expression +0:10 'p0' ( in 4-component vector of int) +0:17 Function Definition: fn1(vi4;vi4;i1[2];i1; ( temp 4-component vector of int) +0:17 Function Parameters: +0:17 'p0' ( in 4-component vector of int) +0:17 'p1' ( in 4-component vector of int) +0:17 'p2' ( in 2-element array of int) +0:17 'p3' ( in int) +0:? Sequence +0:18 Branch: Return with expression +0:18 add ( temp 4-component vector of int) +0:18 add ( temp 4-component vector of int) +0:18 add ( temp 4-component vector of int) +0:18 'p0' ( in 4-component vector of int) +0:18 'p1' ( in 4-component vector of int) +0:18 direct index ( temp int) +0:18 'p2' ( in 2-element array of int) +0:18 Constant: +0:18 0 (const int) +0:18 'p3' ( in int) +0:23 Function Definition: fn2(vi4;i1; ( temp 4-component vector of int) +0:23 Function Parameters: +0:23 'p0' ( in 4-component vector of int) +0:23 'x' ( in int) +0:? Sequence +0:24 Branch: Return with expression +0:? Constant: +0:? 10 (const int) +0:? 11 (const int) +0:? 12 (const int) +0:? 13 (const int) +0:28 Function Definition: fn2(vi4; ( temp 4-component vector of int) +0:28 Function Parameters: +0:28 'p0' ( in 4-component vector of int) +0:? Sequence +0:29 Branch: Return with expression +0:29 add ( temp 4-component vector of int) +0:29 'p0' ( in 4-component vector of int) +0:? Constant: +0:? 20 (const int) +0:? 21 (const int) +0:? 22 (const int) +0:? 23 (const int) +0:33 Function Definition: fn3(i1; ( temp void) +0:33 Function Parameters: +0:33 'p0' ( in int) +0:37 Function Definition: @main( ( temp 4-component vector of int) +0:37 Function Parameters: +0:? Sequence +0:38 Sequence +0:38 move second child to first child ( temp 2-element array of int) +0:38 'myarray' ( temp 2-element array of int) +0:38 Constant: +0:38 30 (const int) +0:38 31 (const int) +0:49 Branch: Return with expression +0:48 add ( temp 4-component vector of int) +0:47 add ( temp 4-component vector of int) +0:45 add ( temp 4-component vector of int) +0:44 add ( temp 4-component vector of int) +0:43 add ( temp 4-component vector of int) +0:42 add ( temp 4-component vector of int) +0:41 add ( temp 4-component vector of int) +0:40 add ( temp 4-component vector of int) +0:40 Function Call: fn1(vi4; ( temp 4-component vector of int) +0:40 Constant: +0:40 100 (const int) +0:40 100 (const int) +0:40 100 (const int) +0:40 100 (const int) +0:41 Function Call: fn1(vi4;vi4;i1[2];i1; ( temp 4-component vector of int) +0:41 Constant: +0:41 101 (const int) +0:41 101 (const int) +0:41 101 (const int) +0:41 101 (const int) +0:41 ui4: direct index for structure ( uniform 4-component vector of int) +0:41 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of int ui4, uniform float ufvar}) +0:41 Constant: +0:41 0 (const uint) +0:15 Constant: +0:15 1 (const int) +0:15 2 (const int) +0:16 Constant: +0:16 42 (const int) +0:42 Function Call: fn1(vi4;vi4;i1[2];i1; ( temp 4-component vector of int) +0:42 Constant: +0:42 102 (const int) +0:42 102 (const int) +0:42 102 (const int) +0:42 102 (const int) +0:42 ui4: direct index for structure ( uniform 4-component vector of int) +0:42 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of int ui4, uniform float ufvar}) +0:42 Constant: +0:42 0 (const uint) +0:42 'myarray' ( temp 2-element array of int) +0:16 Constant: +0:16 42 (const int) +0:43 Function Call: fn1(vi4;vi4;i1[2];i1; ( temp 4-component vector of int) +0:43 Constant: +0:43 103 (const int) +0:43 103 (const int) +0:43 103 (const int) +0:43 103 (const int) +0:43 ui4: direct index for structure ( uniform 4-component vector of int) +0:43 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of int ui4, uniform float ufvar}) +0:43 Constant: +0:43 0 (const uint) +0:43 'myarray' ( temp 2-element array of int) +0:43 Constant: +0:43 99 (const int) +0:44 Function Call: fn1(vi4;b1;b1; ( temp 4-component vector of int) +0:44 Constant: +0:44 104 (const int) +0:44 104 (const int) +0:44 104 (const int) +0:44 104 (const int) +0:44 Constant: +0:44 false (const bool) +0:9 Constant: +0:9 false (const bool) +0:45 Function Call: fn1(vi4;b1;b1; ( temp 4-component vector of int) +0:45 Constant: +0:45 105 (const int) +0:45 105 (const int) +0:45 105 (const int) +0:45 105 (const int) +0:45 Constant: +0:45 false (const bool) +0:45 Constant: +0:45 true (const bool) +0:47 Function Call: fn2(vi4; ( temp 4-component vector of int) +0:47 Constant: +0:47 112 (const int) +0:47 112 (const int) +0:47 112 (const int) +0:47 112 (const int) +0:48 Function Call: fn2(vi4;i1; ( temp 4-component vector of int) +0:48 Constant: +0:48 110 (const int) +0:48 110 (const int) +0:48 110 (const int) +0:48 110 (const int) +0:48 Constant: +0:48 11 (const int) +0:49 Function Call: fn2(vi4;i1; ( temp 4-component vector of int) +0:49 Constant: +0:49 111 (const int) +0:49 111 (const int) +0:49 111 (const int) +0:49 111 (const int) +0:49 Constant: +0:49 12 (const int) +0:37 Function Definition: main( ( temp void) +0:37 Function Parameters: +0:? Sequence +0:37 move second child to first child ( temp 4-component vector of int) +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of int) +0:37 Function Call: @main( ( temp 4-component vector of int) +0:? Linker Objects +0:? 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of int ui4, uniform float ufvar}) +0:? 'cia' ( const int) +0:? -4 (const int) +0:? 'cib' ( const int) +0:? -42 (const int) +0:? '@entryPointOutput' (layout( location=0) out 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.partialInit.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.partialInit.frag.out new file mode 100755 index 0000000..2dc40be --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.partialInit.frag.out @@ -0,0 +1,566 @@ +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 +gl_FragCoord origin is upper left +0:? Sequence +0:8 Sequence +0:8 move second child to first child ( temp 4-component vector of float) +0:8 'gv' ( global 4-component vector of float) +0:8 Constant: +0:8 0.000000 +0:8 0.000000 +0:8 1.000000 +0:8 0.000000 +0:9 Sequence +0:9 move second child to first child ( temp 3-element array of float) +0:9 'gfa' ( global 3-element array of float) +0:9 Constant: +0:9 0.000000 +0:9 0.000000 +0:9 0.000000 +0:18 Function Definition: @PixelShaderFunction(vf4; ( temp structure{ temp int a, temp float b, temp bool c, temp 4-component vector of float v}) +0:18 Function Parameters: +0:18 'input' ( in 4-component vector of float) +0:? Sequence +0:19 Sequence +0:19 move second child to first child ( temp structure{ temp int a, temp float b, temp bool c, temp 4-component vector of float v}) +0:19 'o2' ( temp structure{ temp int a, temp float b, temp bool c, temp 4-component vector of float v}) +0:19 Constant: +0:19 3 (const int) +0:19 0.000000 +0:19 false (const bool) +0:19 0.000000 +0:19 0.000000 +0:19 0.000000 +0:19 0.000000 +0:21 move second child to first child ( temp 4-component vector of float) +0:21 v: direct index for structure ( temp 4-component vector of float) +0:21 'o4' ( temp structure{ temp int a, temp float b, temp bool c, temp 4-component vector of float v}) +0:21 Constant: +0:21 3 (const int) +0:21 vector-scale ( temp 4-component vector of float) +0:21 'gv' ( global 4-component vector of float) +0:21 direct index ( temp float) +0:21 'gfa' ( global 3-element array of float) +0:21 Constant: +0:21 2 (const int) +0:22 Sequence +0:22 move second child to first child ( temp structure{ temp int a, temp float b, temp bool c, temp 4-component vector of float v}) +0:22 'o1' ( temp structure{ temp int a, temp float b, temp bool c, temp 4-component vector of float v}) +0:22 Constant: +0:22 0 (const int) +0:22 0.000000 +0:22 false (const bool) +0:22 0.000000 +0:22 0.000000 +0:22 0.000000 +0:22 0.000000 +0:23 Sequence +0:23 move second child to first child ( temp structure{ temp int a, temp float b, temp bool c, temp 4-component vector of float v}) +0:23 'o3' ( temp structure{ temp int a, temp float b, temp bool c, temp 4-component vector of float v}) +0:23 Constant: +0:23 0 (const int) +0:23 0.000000 +0:23 false (const bool) +0:23 0.000000 +0:23 0.000000 +0:23 0.000000 +0:23 0.000000 +0:24 move second child to first child ( temp structure{ temp int a, temp float b, temp bool c, temp 4-component vector of float v}) +0:24 'o4' ( temp structure{ temp int a, temp float b, temp bool c, temp 4-component vector of float v}) +0:24 Constant: +0:24 0 (const int) +0:24 0.000000 +0:24 false (const bool) +0:24 0.000000 +0:24 0.000000 +0:24 0.000000 +0:24 0.000000 +0:25 move second child to first child ( temp bool) +0:25 c: direct index for structure ( temp bool) +0:25 'o4' ( temp structure{ temp int a, temp float b, temp bool c, temp 4-component vector of float v}) +0:25 Constant: +0:25 2 (const int) +0:25 c: direct index for structure ( temp bool) +0:25 'o1' ( temp structure{ temp int a, temp float b, temp bool c, temp 4-component vector of float v}) +0:25 Constant: +0:25 2 (const int) +0:26 Sequence +0:26 move second child to first child ( temp structure{ temp 4X3 matrix of float m, temp structure{ temp int a, temp float b, temp bool c, temp 4-component vector of float v} os, temp bool b}) +0:26 'nest' ( temp structure{ temp 4X3 matrix of float m, temp structure{ temp int a, temp float b, temp bool c, temp 4-component vector of float v} os, temp bool b}) +0:26 Constant: +0:26 0.000000 +0:26 0.000000 +0:26 0.000000 +0:26 0.000000 +0:26 0.000000 +0:26 0.000000 +0:26 0.000000 +0:26 0.000000 +0:26 0.000000 +0:26 0.000000 +0:26 0.000000 +0:26 0.000000 +0:26 0 (const int) +0:26 0.000000 +0:26 false (const bool) +0:26 0.000000 +0:26 0.000000 +0:26 0.000000 +0:26 0.000000 +0:26 false (const bool) +0:28 Sequence +0:28 move second child to first child ( temp 4-element array of 2-component vector of float) +0:28 'gf2a' ( temp 4-element array of 2-component vector of float) +0:28 Constant: +0:28 0.000000 +0:28 0.000000 +0:28 0.000000 +0:28 0.000000 +0:28 0.000000 +0:28 0.000000 +0:28 0.000000 +0:28 0.000000 +0:29 Sequence +0:29 move second child to first child ( temp int) +0:29 'cgi' ( temp int) +0:29 Constant: +0:29 0 (const int) +0:30 move second child to first child ( temp float) +0:30 b: direct index for structure ( temp float) +0:30 'o4' ( temp structure{ temp int a, temp float b, temp bool c, temp 4-component vector of float v}) +0:30 Constant: +0:30 1 (const int) +0:30 component-wise multiply ( temp float) +0:30 direct index ( temp float) +0:30 direct index ( temp 2-component vector of float) +0:30 'gf2a' ( temp 4-element array of 2-component vector of float) +0:30 Constant: +0:30 2 (const int) +0:30 Constant: +0:30 1 (const int) +0:30 Convert int to float ( temp float) +0:30 'cgi' ( temp int) +0:32 Branch: Return with expression +0:32 'o4' ( temp structure{ temp int a, temp float b, temp bool c, temp 4-component vector of float v}) +0:18 Function Definition: PixelShaderFunction( ( temp void) +0:18 Function Parameters: +0:? Sequence +0:18 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:18 Sequence +0:18 move second child to first child ( temp structure{ temp int a, temp float b, temp bool c, temp 4-component vector of float v}) +0:18 'flattenTemp' ( temp structure{ temp int a, temp float b, temp bool c, temp 4-component vector of float v}) +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: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: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: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: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: +0:18 3 (const int) +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:? '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 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 'ci' ( const int) +0:? 0 (const int) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:8 Sequence +0:8 move second child to first child ( temp 4-component vector of float) +0:8 'gv' ( global 4-component vector of float) +0:8 Constant: +0:8 0.000000 +0:8 0.000000 +0:8 1.000000 +0:8 0.000000 +0:9 Sequence +0:9 move second child to first child ( temp 3-element array of float) +0:9 'gfa' ( global 3-element array of float) +0:9 Constant: +0:9 0.000000 +0:9 0.000000 +0:9 0.000000 +0:18 Function Definition: @PixelShaderFunction(vf4; ( temp structure{ temp int a, temp float b, temp bool c, temp 4-component vector of float v}) +0:18 Function Parameters: +0:18 'input' ( in 4-component vector of float) +0:? Sequence +0:19 Sequence +0:19 move second child to first child ( temp structure{ temp int a, temp float b, temp bool c, temp 4-component vector of float v}) +0:19 'o2' ( temp structure{ temp int a, temp float b, temp bool c, temp 4-component vector of float v}) +0:19 Constant: +0:19 3 (const int) +0:19 0.000000 +0:19 false (const bool) +0:19 0.000000 +0:19 0.000000 +0:19 0.000000 +0:19 0.000000 +0:21 move second child to first child ( temp 4-component vector of float) +0:21 v: direct index for structure ( temp 4-component vector of float) +0:21 'o4' ( temp structure{ temp int a, temp float b, temp bool c, temp 4-component vector of float v}) +0:21 Constant: +0:21 3 (const int) +0:21 vector-scale ( temp 4-component vector of float) +0:21 'gv' ( global 4-component vector of float) +0:21 direct index ( temp float) +0:21 'gfa' ( global 3-element array of float) +0:21 Constant: +0:21 2 (const int) +0:22 Sequence +0:22 move second child to first child ( temp structure{ temp int a, temp float b, temp bool c, temp 4-component vector of float v}) +0:22 'o1' ( temp structure{ temp int a, temp float b, temp bool c, temp 4-component vector of float v}) +0:22 Constant: +0:22 0 (const int) +0:22 0.000000 +0:22 false (const bool) +0:22 0.000000 +0:22 0.000000 +0:22 0.000000 +0:22 0.000000 +0:23 Sequence +0:23 move second child to first child ( temp structure{ temp int a, temp float b, temp bool c, temp 4-component vector of float v}) +0:23 'o3' ( temp structure{ temp int a, temp float b, temp bool c, temp 4-component vector of float v}) +0:23 Constant: +0:23 0 (const int) +0:23 0.000000 +0:23 false (const bool) +0:23 0.000000 +0:23 0.000000 +0:23 0.000000 +0:23 0.000000 +0:24 move second child to first child ( temp structure{ temp int a, temp float b, temp bool c, temp 4-component vector of float v}) +0:24 'o4' ( temp structure{ temp int a, temp float b, temp bool c, temp 4-component vector of float v}) +0:24 Constant: +0:24 0 (const int) +0:24 0.000000 +0:24 false (const bool) +0:24 0.000000 +0:24 0.000000 +0:24 0.000000 +0:24 0.000000 +0:25 move second child to first child ( temp bool) +0:25 c: direct index for structure ( temp bool) +0:25 'o4' ( temp structure{ temp int a, temp float b, temp bool c, temp 4-component vector of float v}) +0:25 Constant: +0:25 2 (const int) +0:25 c: direct index for structure ( temp bool) +0:25 'o1' ( temp structure{ temp int a, temp float b, temp bool c, temp 4-component vector of float v}) +0:25 Constant: +0:25 2 (const int) +0:26 Sequence +0:26 move second child to first child ( temp structure{ temp 4X3 matrix of float m, temp structure{ temp int a, temp float b, temp bool c, temp 4-component vector of float v} os, temp bool b}) +0:26 'nest' ( temp structure{ temp 4X3 matrix of float m, temp structure{ temp int a, temp float b, temp bool c, temp 4-component vector of float v} os, temp bool b}) +0:26 Constant: +0:26 0.000000 +0:26 0.000000 +0:26 0.000000 +0:26 0.000000 +0:26 0.000000 +0:26 0.000000 +0:26 0.000000 +0:26 0.000000 +0:26 0.000000 +0:26 0.000000 +0:26 0.000000 +0:26 0.000000 +0:26 0 (const int) +0:26 0.000000 +0:26 false (const bool) +0:26 0.000000 +0:26 0.000000 +0:26 0.000000 +0:26 0.000000 +0:26 false (const bool) +0:28 Sequence +0:28 move second child to first child ( temp 4-element array of 2-component vector of float) +0:28 'gf2a' ( temp 4-element array of 2-component vector of float) +0:28 Constant: +0:28 0.000000 +0:28 0.000000 +0:28 0.000000 +0:28 0.000000 +0:28 0.000000 +0:28 0.000000 +0:28 0.000000 +0:28 0.000000 +0:29 Sequence +0:29 move second child to first child ( temp int) +0:29 'cgi' ( temp int) +0:29 Constant: +0:29 0 (const int) +0:30 move second child to first child ( temp float) +0:30 b: direct index for structure ( temp float) +0:30 'o4' ( temp structure{ temp int a, temp float b, temp bool c, temp 4-component vector of float v}) +0:30 Constant: +0:30 1 (const int) +0:30 component-wise multiply ( temp float) +0:30 direct index ( temp float) +0:30 direct index ( temp 2-component vector of float) +0:30 'gf2a' ( temp 4-element array of 2-component vector of float) +0:30 Constant: +0:30 2 (const int) +0:30 Constant: +0:30 1 (const int) +0:30 Convert int to float ( temp float) +0:30 'cgi' ( temp int) +0:32 Branch: Return with expression +0:32 'o4' ( temp structure{ temp int a, temp float b, temp bool c, temp 4-component vector of float v}) +0:18 Function Definition: PixelShaderFunction( ( temp void) +0:18 Function Parameters: +0:? Sequence +0:18 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:18 Sequence +0:18 move second child to first child ( temp structure{ temp int a, temp float b, temp bool c, temp 4-component vector of float v}) +0:18 'flattenTemp' ( temp structure{ temp int a, temp float b, temp bool c, temp 4-component vector of float v}) +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: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: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: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: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: +0:18 3 (const int) +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:? '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 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 'ci' ( const int) +0:? 0 (const int) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 104 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "PixelShaderFunction" 80 87 91 95 99 + ExecutionMode 4 OriginUpperLeft + Name 4 "PixelShaderFunction" + Name 11 "outs" + MemberName 11(outs) 0 "a" + MemberName 11(outs) 1 "b" + MemberName 11(outs) 2 "c" + MemberName 11(outs) 3 "v" + Name 14 "@PixelShaderFunction(vf4;" + Name 13 "input" + Name 17 "gv" + Name 25 "gfa" + Name 28 "o2" + Name 33 "o4" + Name 41 "o1" + Name 44 "o3" + Name 51 "Nest" + MemberName 51(Nest) 0 "m" + MemberName 51(Nest) 1 "os" + MemberName 51(Nest) 2 "b" + Name 53 "nest" + Name 61 "gf2a" + Name 65 "cgi" + Name 78 "input" + Name 80 "input" + Name 82 "flattenTemp" + Name 83 "param" + Name 87 "a" + Name 91 "b" + Name 95 "c" + Name 99 "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 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 9: TypeInt 32 1 + 10: TypeBool + 11(outs): TypeStruct 9(int) 6(float) 10(bool) 7(fvec4) + 12: TypeFunction 11(outs) 8(ptr) + 16: TypePointer Private 7(fvec4) + 17(gv): 16(ptr) Variable Private + 18: 6(float) Constant 0 + 19: 6(float) Constant 1065353216 + 20: 7(fvec4) ConstantComposite 18 18 19 18 + 21: TypeInt 32 0 + 22: 21(int) Constant 3 + 23: TypeArray 6(float) 22 + 24: TypePointer Private 23 + 25(gfa): 24(ptr) Variable Private + 26: 23 ConstantComposite 18 18 18 + 27: TypePointer Function 11(outs) + 29: 9(int) Constant 3 + 30: 10(bool) ConstantFalse + 31: 7(fvec4) ConstantComposite 18 18 18 18 + 32: 11(outs) ConstantComposite 29 18 30 31 + 35: 9(int) Constant 2 + 36: TypePointer Private 6(float) + 42: 9(int) Constant 0 + 43: 11(outs) ConstantComposite 42 18 30 31 + 45: TypePointer Function 10(bool) + 49: TypeVector 6(float) 3 + 50: TypeMatrix 49(fvec3) 4 + 51(Nest): TypeStruct 50 11(outs) 10(bool) + 52: TypePointer Function 51(Nest) + 54: 49(fvec3) ConstantComposite 18 18 18 + 55: 50 ConstantComposite 54 54 54 54 + 56: 51(Nest) ConstantComposite 55 43 30 + 57: TypeVector 6(float) 2 + 58: 21(int) Constant 4 + 59: TypeArray 57(fvec2) 58 + 60: TypePointer Function 59 + 62: 57(fvec2) ConstantComposite 18 18 + 63: 59 ConstantComposite 62 62 62 62 + 64: TypePointer Function 9(int) + 66: 9(int) Constant 1 + 67: 21(int) Constant 1 + 68: TypePointer Function 6(float) + 79: TypePointer Input 7(fvec4) + 80(input): 79(ptr) Variable Input + 86: TypePointer Output 9(int) + 87(a): 86(ptr) Variable Output + 90: TypePointer Output 6(float) + 91(b): 90(ptr) Variable Output + 94: TypePointer Output 10(bool) + 95(c): 94(ptr) Variable Output + 98: TypePointer Output 7(fvec4) + 99(v): 98(ptr) Variable Output + 102: TypeArray 57(fvec2) 22 + 103: 102 ConstantComposite 62 62 62 +4(PixelShaderFunction): 2 Function None 3 + 5: Label + 78(input): 8(ptr) Variable Function + 82(flattenTemp): 27(ptr) Variable Function + 83(param): 8(ptr) Variable Function + Store 17(gv) 20 + Store 25(gfa) 26 + 81: 7(fvec4) Load 80(input) + Store 78(input) 81 + 84: 7(fvec4) Load 78(input) + Store 83(param) 84 + 85: 11(outs) FunctionCall 14(@PixelShaderFunction(vf4;) 83(param) + Store 82(flattenTemp) 85 + 88: 64(ptr) AccessChain 82(flattenTemp) 42 + 89: 9(int) Load 88 + Store 87(a) 89 + 92: 68(ptr) AccessChain 82(flattenTemp) 66 + 93: 6(float) Load 92 + Store 91(b) 93 + 96: 45(ptr) AccessChain 82(flattenTemp) 35 + 97: 10(bool) Load 96 + Store 95(c) 97 + 100: 8(ptr) AccessChain 82(flattenTemp) 29 + 101: 7(fvec4) Load 100 + Store 99(v) 101 + Return + FunctionEnd +14(@PixelShaderFunction(vf4;): 11(outs) Function None 12 + 13(input): 8(ptr) FunctionParameter + 15: Label + 28(o2): 27(ptr) Variable Function + 33(o4): 27(ptr) Variable Function + 41(o1): 27(ptr) Variable Function + 44(o3): 27(ptr) Variable Function + 53(nest): 52(ptr) Variable Function + 61(gf2a): 60(ptr) Variable Function + 65(cgi): 64(ptr) Variable Function + Store 28(o2) 32 + 34: 7(fvec4) Load 17(gv) + 37: 36(ptr) AccessChain 25(gfa) 35 + 38: 6(float) Load 37 + 39: 7(fvec4) VectorTimesScalar 34 38 + 40: 8(ptr) AccessChain 33(o4) 29 + Store 40 39 + Store 41(o1) 43 + Store 44(o3) 43 + Store 33(o4) 43 + 46: 45(ptr) AccessChain 41(o1) 35 + 47: 10(bool) Load 46 + 48: 45(ptr) AccessChain 33(o4) 35 + Store 48 47 + Store 53(nest) 56 + Store 61(gf2a) 63 + Store 65(cgi) 42 + 69: 68(ptr) AccessChain 61(gf2a) 35 67 + 70: 6(float) Load 69 + 71: 9(int) Load 65(cgi) + 72: 6(float) ConvertSToF 71 + 73: 6(float) FMul 70 72 + 74: 68(ptr) AccessChain 33(o4) 66 + Store 74 73 + 75: 11(outs) Load 33(o4) + ReturnValue 75 + FunctionEnd 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 new file mode 100644 index 0000000..6e8998d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.pp.line.frag.out @@ -0,0 +1,188 @@ +hlsl.pp.line.frag +Shader version: 450 +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}) +0:4 Function Parameters: +0:? Sequence +0:124 Sequence +0:124 move second child to first child ( temp int) +0:124 'thisLineIs' ( temp int) +0:124 Constant: +0:124 124 (const int) +0:126 move second child to first child ( temp 4-component vector of float) +0:126 Color: direct index for structure ( temp 4-component vector of float) +0:126 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:126 Constant: +0:126 0 (const int) +0:? Construct vec4 ( temp 4-component vector of float) +0:126 Convert int to float ( temp float) +0:126 'thisLineIs' ( temp int) +0:126 Constant: +0:126 0.000000 +0:126 Constant: +0:126 0.000000 +0:126 Constant: +0:126 1.000000 +0:127 move second child to first child ( temp float) +0:127 Depth: direct index for structure ( temp float) +0:127 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:127 Constant: +0:127 1 (const int) +0:127 Constant: +0:127 1.000000 +0:129 Branch: Return with expression +0:129 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:4 Function Definition: main( ( temp void) +0:4 Function Parameters: +0:? Sequence +0:4 Sequence +0:4 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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) + + +Linked fragment stage: + + +Shader version: 450 +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}) +0:4 Function Parameters: +0:? Sequence +0:124 Sequence +0:124 move second child to first child ( temp int) +0:124 'thisLineIs' ( temp int) +0:124 Constant: +0:124 124 (const int) +0:126 move second child to first child ( temp 4-component vector of float) +0:126 Color: direct index for structure ( temp 4-component vector of float) +0:126 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:126 Constant: +0:126 0 (const int) +0:? Construct vec4 ( temp 4-component vector of float) +0:126 Convert int to float ( temp float) +0:126 'thisLineIs' ( temp int) +0:126 Constant: +0:126 0.000000 +0:126 Constant: +0:126 0.000000 +0:126 Constant: +0:126 1.000000 +0:127 move second child to first child ( temp float) +0:127 Depth: direct index for structure ( temp float) +0:127 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:127 Constant: +0:127 1 (const int) +0:127 Constant: +0:127 1.000000 +0:129 Branch: Return with expression +0:129 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:4 Function Definition: main( ( temp void) +0:4 Function Parameters: +0:? Sequence +0:4 Sequence +0:4 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 42 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 35 39 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + MemberName 8(PS_OUTPUT) 1 "Depth" + Name 10 "@main(" + 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 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8(PS_OUTPUT): TypeStruct 7(fvec4) 6(float) + 9: TypeFunction 8(PS_OUTPUT) + 12: TypeInt 32 1 + 13: TypePointer Function 12(int) + 15: 12(int) Constant 124 + 16: TypePointer Function 8(PS_OUTPUT) + 18: 12(int) Constant 0 + 21: 6(float) Constant 0 + 22: 6(float) Constant 1065353216 + 24: TypePointer Function 7(fvec4) + 26: 12(int) Constant 1 + 27: TypePointer Function 6(float) + 34: TypePointer Output 7(fvec4) + 35(Color): 34(ptr) Variable Output + 38: TypePointer Output 6(float) + 39(Depth): 38(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 32(flattenTemp): 16(ptr) Variable Function + 33:8(PS_OUTPUT) FunctionCall 10(@main() + Store 32(flattenTemp) 33 + 36: 24(ptr) AccessChain 32(flattenTemp) 18 + 37: 7(fvec4) Load 36 + Store 35(Color) 37 + 40: 27(ptr) AccessChain 32(flattenTemp) 26 + 41: 6(float) Load 40 + Store 39(Depth) 41 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 14(thisLineIs): 13(ptr) Variable Function + 17(psout): 16(ptr) Variable Function + Store 14(thisLineIs) 15 + 19: 12(int) Load 14(thisLineIs) + 20: 6(float) ConvertSToF 19 + 23: 7(fvec4) CompositeConstruct 20 21 21 22 + 25: 24(ptr) AccessChain 17(psout) 18 + Store 25 23 + 28: 27(ptr) AccessChain 17(psout) 26 + Store 28 22 + 29:8(PS_OUTPUT) Load 17(psout) + ReturnValue 29 + 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 new file mode 100755 index 0000000..54dcf31 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.precedence.frag.out @@ -0,0 +1,256 @@ +hlsl.precedence.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:7 Function Definition: @PixelShaderFunction(vf4;vf4;vf4;vf4; ( temp 4-component vector of float) +0:7 Function Parameters: +0:7 'a1' ( in 4-component vector of float) +0:7 'a2' ( in 4-component vector of float) +0:7 'a3' ( in 4-component vector of float) +0:7 'a4' ( in 4-component vector of float) +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 add ( temp 4-component vector of float) +0:8 'a1' ( in 4-component vector of float) +0:8 component-wise multiply ( temp 4-component vector of float) +0:8 'a2' ( in 4-component vector of float) +0:8 'a3' ( in 4-component vector of float) +0:8 'a4' ( in 4-component vector of float) +0:? Construct vec4 ( temp 4-component vector of float) +0:8 component-wise multiply ( temp 3-component vector of float) +0:8 vector swizzle ( temp 3-component vector of float) +0:8 'a1' ( in 4-component vector of float) +0:8 Sequence +0:8 Constant: +0:8 0 (const int) +0:8 Constant: +0:8 1 (const int) +0:8 Constant: +0:8 2 (const int) +0:8 vector swizzle ( temp 3-component vector of float) +0:8 'a2' ( in 4-component vector of float) +0:8 Sequence +0:8 Constant: +0:8 0 (const int) +0:8 Constant: +0:8 1 (const int) +0:8 Constant: +0:8 2 (const int) +0:8 direct index ( temp float) +0:8 'a3' ( in 4-component vector of float) +0:8 Constant: +0:8 3 (const int) +0:7 Function Definition: PixelShaderFunction( ( temp void) +0:7 Function Parameters: +0:? Sequence +0:7 move second child to first child ( temp 4-component vector of float) +0:? 'a1' ( temp 4-component vector of float) +0:? 'a1' (layout( location=0) in 4-component vector of float) +0:7 move second child to first child ( temp 4-component vector of float) +0:? 'a2' ( temp 4-component vector of float) +0:? 'a2' (layout( location=1) in 4-component vector of float) +0:7 move second child to first child ( temp 4-component vector of float) +0:? 'a3' ( temp 4-component vector of float) +0:? 'a3' (layout( location=2) in 4-component vector of float) +0:7 move second child to first child ( temp 4-component vector of float) +0:? 'a4' ( temp 4-component vector of float) +0:? 'a4' (layout( location=3) in 4-component vector of float) +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: @PixelShaderFunction(vf4;vf4;vf4;vf4; ( temp 4-component vector of float) +0:? 'a1' ( temp 4-component vector of float) +0:? 'a2' ( temp 4-component vector of float) +0:? 'a3' ( temp 4-component vector of float) +0:? 'a4' ( temp 4-component vector of float) +0:? Linker Objects +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) +0:? 'a1' (layout( location=0) in 4-component vector of float) +0:? 'a2' (layout( location=1) in 4-component vector of float) +0:? 'a3' (layout( location=2) in 4-component vector of float) +0:? 'a4' (layout( location=3) in 4-component vector of float) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:7 Function Definition: @PixelShaderFunction(vf4;vf4;vf4;vf4; ( temp 4-component vector of float) +0:7 Function Parameters: +0:7 'a1' ( in 4-component vector of float) +0:7 'a2' ( in 4-component vector of float) +0:7 'a3' ( in 4-component vector of float) +0:7 'a4' ( in 4-component vector of float) +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 add ( temp 4-component vector of float) +0:8 'a1' ( in 4-component vector of float) +0:8 component-wise multiply ( temp 4-component vector of float) +0:8 'a2' ( in 4-component vector of float) +0:8 'a3' ( in 4-component vector of float) +0:8 'a4' ( in 4-component vector of float) +0:? Construct vec4 ( temp 4-component vector of float) +0:8 component-wise multiply ( temp 3-component vector of float) +0:8 vector swizzle ( temp 3-component vector of float) +0:8 'a1' ( in 4-component vector of float) +0:8 Sequence +0:8 Constant: +0:8 0 (const int) +0:8 Constant: +0:8 1 (const int) +0:8 Constant: +0:8 2 (const int) +0:8 vector swizzle ( temp 3-component vector of float) +0:8 'a2' ( in 4-component vector of float) +0:8 Sequence +0:8 Constant: +0:8 0 (const int) +0:8 Constant: +0:8 1 (const int) +0:8 Constant: +0:8 2 (const int) +0:8 direct index ( temp float) +0:8 'a3' ( in 4-component vector of float) +0:8 Constant: +0:8 3 (const int) +0:7 Function Definition: PixelShaderFunction( ( temp void) +0:7 Function Parameters: +0:? Sequence +0:7 move second child to first child ( temp 4-component vector of float) +0:? 'a1' ( temp 4-component vector of float) +0:? 'a1' (layout( location=0) in 4-component vector of float) +0:7 move second child to first child ( temp 4-component vector of float) +0:? 'a2' ( temp 4-component vector of float) +0:? 'a2' (layout( location=1) in 4-component vector of float) +0:7 move second child to first child ( temp 4-component vector of float) +0:? 'a3' ( temp 4-component vector of float) +0:? 'a3' (layout( location=2) in 4-component vector of float) +0:7 move second child to first child ( temp 4-component vector of float) +0:? 'a4' ( temp 4-component vector of float) +0:? 'a4' (layout( location=3) in 4-component vector of float) +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: @PixelShaderFunction(vf4;vf4;vf4;vf4; ( temp 4-component vector of float) +0:? 'a1' ( temp 4-component vector of float) +0:? 'a2' ( temp 4-component vector of float) +0:? 'a3' ( temp 4-component vector of float) +0:? 'a4' ( temp 4-component vector of float) +0:? Linker Objects +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) +0:? 'a1' (layout( location=0) in 4-component vector of float) +0:? 'a2' (layout( location=1) in 4-component vector of float) +0:? 'a3' (layout( location=2) in 4-component vector of float) +0:? 'a4' (layout( location=3) in 4-component vector of float) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 65 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "PixelShaderFunction" 43 46 49 52 55 + ExecutionMode 4 OriginUpperLeft + Name 4 "PixelShaderFunction" + Name 14 "@PixelShaderFunction(vf4;vf4;vf4;vf4;" + Name 10 "a1" + Name 11 "a2" + Name 12 "a3" + Name 13 "a4" + Name 41 "a1" + Name 43 "a1" + Name 45 "a2" + Name 46 "a2" + Name 48 "a3" + Name 49 "a3" + Name 51 "a4" + Name 52 "a4" + Name 55 "@entryPointOutput" + Name 56 "param" + Name 58 "param" + Name 60 "param" + Name 62 "param" + Decorate 43(a1) Location 0 + Decorate 46(a2) Location 1 + Decorate 49(a3) Location 2 + Decorate 52(a4) Location 3 + Decorate 55(@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) 8(ptr) 8(ptr) 8(ptr) + 23: TypeVector 6(float) 3 + 29: TypeInt 32 0 + 30: 29(int) Constant 3 + 31: TypePointer Function 6(float) + 42: TypePointer Input 7(fvec4) + 43(a1): 42(ptr) Variable Input + 46(a2): 42(ptr) Variable Input + 49(a3): 42(ptr) Variable Input + 52(a4): 42(ptr) Variable Input + 54: TypePointer Output 7(fvec4) +55(@entryPointOutput): 54(ptr) Variable Output +4(PixelShaderFunction): 2 Function None 3 + 5: Label + 41(a1): 8(ptr) Variable Function + 45(a2): 8(ptr) Variable Function + 48(a3): 8(ptr) Variable Function + 51(a4): 8(ptr) Variable Function + 56(param): 8(ptr) Variable Function + 58(param): 8(ptr) Variable Function + 60(param): 8(ptr) Variable Function + 62(param): 8(ptr) Variable Function + 44: 7(fvec4) Load 43(a1) + Store 41(a1) 44 + 47: 7(fvec4) Load 46(a2) + Store 45(a2) 47 + 50: 7(fvec4) Load 49(a3) + Store 48(a3) 50 + 53: 7(fvec4) Load 52(a4) + Store 51(a4) 53 + 57: 7(fvec4) Load 41(a1) + Store 56(param) 57 + 59: 7(fvec4) Load 45(a2) + Store 58(param) 59 + 61: 7(fvec4) Load 48(a3) + Store 60(param) 61 + 63: 7(fvec4) Load 51(a4) + Store 62(param) 63 + 64: 7(fvec4) FunctionCall 14(@PixelShaderFunction(vf4;vf4;vf4;vf4;) 56(param) 58(param) 60(param) 62(param) + Store 55(@entryPointOutput) 64 + Return + FunctionEnd +14(@PixelShaderFunction(vf4;vf4;vf4;vf4;): 7(fvec4) Function None 9 + 10(a1): 8(ptr) FunctionParameter + 11(a2): 8(ptr) FunctionParameter + 12(a3): 8(ptr) FunctionParameter + 13(a4): 8(ptr) FunctionParameter + 15: Label + 16: 7(fvec4) Load 10(a1) + 17: 7(fvec4) Load 11(a2) + 18: 7(fvec4) Load 12(a3) + 19: 7(fvec4) FMul 17 18 + 20: 7(fvec4) FAdd 16 19 + 21: 7(fvec4) Load 13(a4) + 22: 7(fvec4) FAdd 20 21 + 24: 7(fvec4) Load 10(a1) + 25: 23(fvec3) VectorShuffle 24 24 0 1 2 + 26: 7(fvec4) Load 11(a2) + 27: 23(fvec3) VectorShuffle 26 26 0 1 2 + 28: 23(fvec3) FMul 25 27 + 32: 31(ptr) AccessChain 12(a3) 30 + 33: 6(float) Load 32 + 34: 6(float) CompositeExtract 28 0 + 35: 6(float) CompositeExtract 28 1 + 36: 6(float) CompositeExtract 28 2 + 37: 7(fvec4) CompositeConstruct 34 35 36 33 + 38: 7(fvec4) FAdd 22 37 + ReturnValue 38 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.precedence2.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.precedence2.frag.out new file mode 100755 index 0000000..a0ddd44 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.precedence2.frag.out @@ -0,0 +1,213 @@ +hlsl.precedence2.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:7 Function Definition: @PixelShaderFunction(i1;i1;i1;i1; ( temp int) +0:7 Function Parameters: +0:7 'a1' ( in int) +0:7 'a2' ( in int) +0:7 'a3' ( in int) +0:7 'a4' ( in int) +0:? Sequence +0:8 Branch: Return with expression +0:8 add ( temp int) +0:8 left-shift ( temp int) +0:8 add ( temp int) +0:8 component-wise multiply ( temp int) +0:8 'a1' ( in int) +0:8 'a2' ( in int) +0:8 'a3' ( in int) +0:8 'a4' ( in int) +0:8 left-shift ( temp int) +0:8 'a1' ( in int) +0:8 add ( temp int) +0:8 'a2' ( in int) +0:8 component-wise multiply ( temp int) +0:8 'a3' ( in int) +0:8 'a4' ( in int) +0:7 Function Definition: PixelShaderFunction( ( temp void) +0:7 Function Parameters: +0:? Sequence +0:7 move second child to first child ( temp int) +0:? 'a1' ( temp int) +0:? 'a1' (layout( location=0) in int) +0:7 move second child to first child ( temp int) +0:? 'a2' ( temp int) +0:? 'a2' (layout( location=1) in int) +0:7 move second child to first child ( temp int) +0:? 'a3' ( temp int) +0:? 'a3' (layout( location=2) in int) +0:7 move second child to first child ( temp int) +0:? 'a4' ( temp int) +0:? 'a4' (layout( location=3) 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) +0:? 'a1' ( temp int) +0:? 'a2' ( temp int) +0:? 'a3' ( temp int) +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) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:7 Function Definition: @PixelShaderFunction(i1;i1;i1;i1; ( temp int) +0:7 Function Parameters: +0:7 'a1' ( in int) +0:7 'a2' ( in int) +0:7 'a3' ( in int) +0:7 'a4' ( in int) +0:? Sequence +0:8 Branch: Return with expression +0:8 add ( temp int) +0:8 left-shift ( temp int) +0:8 add ( temp int) +0:8 component-wise multiply ( temp int) +0:8 'a1' ( in int) +0:8 'a2' ( in int) +0:8 'a3' ( in int) +0:8 'a4' ( in int) +0:8 left-shift ( temp int) +0:8 'a1' ( in int) +0:8 add ( temp int) +0:8 'a2' ( in int) +0:8 component-wise multiply ( temp int) +0:8 'a3' ( in int) +0:8 'a4' ( in int) +0:7 Function Definition: PixelShaderFunction( ( temp void) +0:7 Function Parameters: +0:? Sequence +0:7 move second child to first child ( temp int) +0:? 'a1' ( temp int) +0:? 'a1' (layout( location=0) in int) +0:7 move second child to first child ( temp int) +0:? 'a2' ( temp int) +0:? 'a2' (layout( location=1) in int) +0:7 move second child to first child ( temp int) +0:? 'a3' ( temp int) +0:? 'a3' (layout( location=2) in int) +0:7 move second child to first child ( temp int) +0:? 'a4' ( temp int) +0:? 'a4' (layout( location=3) 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) +0:? 'a1' ( temp int) +0:? 'a2' ( temp int) +0:? 'a3' ( temp int) +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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 56 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "PixelShaderFunction" 34 37 40 43 46 + ExecutionMode 4 OriginUpperLeft + Name 4 "PixelShaderFunction" + Name 13 "@PixelShaderFunction(i1;i1;i1;i1;" + Name 9 "a1" + Name 10 "a2" + Name 11 "a3" + Name 12 "a4" + Name 32 "a1" + Name 34 "a1" + Name 36 "a2" + Name 37 "a2" + Name 39 "a3" + Name 40 "a3" + Name 42 "a4" + Name 43 "a4" + Name 46 "@entryPointOutput" + Name 47 "param" + Name 49 "param" + Name 51 "param" + Name 53 "param" + Decorate 34(a1) Location 0 + Decorate 37(a2) Location 1 + Decorate 40(a3) Location 2 + Decorate 43(a4) Location 3 + Decorate 46(@entryPointOutput) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypePointer Function 6(int) + 8: TypeFunction 6(int) 7(ptr) 7(ptr) 7(ptr) 7(ptr) + 33: TypePointer Input 6(int) + 34(a1): 33(ptr) Variable Input + 37(a2): 33(ptr) Variable Input + 40(a3): 33(ptr) Variable Input + 43(a4): 33(ptr) Variable Input + 45: TypePointer Output 6(int) +46(@entryPointOutput): 45(ptr) Variable Output +4(PixelShaderFunction): 2 Function None 3 + 5: Label + 32(a1): 7(ptr) Variable Function + 36(a2): 7(ptr) Variable Function + 39(a3): 7(ptr) Variable Function + 42(a4): 7(ptr) Variable Function + 47(param): 7(ptr) Variable Function + 49(param): 7(ptr) Variable Function + 51(param): 7(ptr) Variable Function + 53(param): 7(ptr) Variable Function + 35: 6(int) Load 34(a1) + Store 32(a1) 35 + 38: 6(int) Load 37(a2) + Store 36(a2) 38 + 41: 6(int) Load 40(a3) + Store 39(a3) 41 + 44: 6(int) Load 43(a4) + Store 42(a4) 44 + 48: 6(int) Load 32(a1) + Store 47(param) 48 + 50: 6(int) Load 36(a2) + Store 49(param) 50 + 52: 6(int) Load 39(a3) + Store 51(param) 52 + 54: 6(int) Load 42(a4) + Store 53(param) 54 + 55: 6(int) FunctionCall 13(@PixelShaderFunction(i1;i1;i1;i1;) 47(param) 49(param) 51(param) 53(param) + Store 46(@entryPointOutput) 55 + Return + FunctionEnd +13(@PixelShaderFunction(i1;i1;i1;i1;): 6(int) Function None 8 + 9(a1): 7(ptr) FunctionParameter + 10(a2): 7(ptr) FunctionParameter + 11(a3): 7(ptr) FunctionParameter + 12(a4): 7(ptr) FunctionParameter + 14: Label + 15: 6(int) Load 9(a1) + 16: 6(int) Load 10(a2) + 17: 6(int) IMul 15 16 + 18: 6(int) Load 11(a3) + 19: 6(int) IAdd 17 18 + 20: 6(int) Load 12(a4) + 21: 6(int) ShiftLeftLogical 19 20 + 22: 6(int) Load 9(a1) + 23: 6(int) Load 10(a2) + 24: 6(int) Load 11(a3) + 25: 6(int) Load 12(a4) + 26: 6(int) IMul 24 25 + 27: 6(int) IAdd 23 26 + 28: 6(int) ShiftLeftLogical 22 27 + 29: 6(int) IAdd 21 28 + ReturnValue 29 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.precise.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.precise.frag.out new file mode 100644 index 0000000..8a0ac81 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.precise.frag.out @@ -0,0 +1,138 @@ +hlsl.precise.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:6 Function Definition: MyFunction(f1;vf3; ( temp void) +0:6 Function Parameters: +0:6 'myfloat' ( noContraction in float) +0:6 'myfloat3' ( noContraction out 3-component vector of float) +0:9 Function Definition: @main( ( temp structure{ noContraction temp 4-component vector of float color}) +0:9 Function Parameters: +0:? Sequence +0:11 move second child to first child ( noContraction temp 4-component vector of float) +0:11 color: direct index for structure ( noContraction temp 4-component vector of float) +0:11 'ps_output' ( temp structure{ noContraction temp 4-component vector of float color}) +0:11 Constant: +0:11 0 (const int) +0:11 Constant: +0:11 1.000000 +0:11 1.000000 +0:11 1.000000 +0:11 1.000000 +0:12 Branch: Return with expression +0:12 'ps_output' ( temp structure{ noContraction temp 4-component vector of float color}) +0:9 Function Definition: main( ( temp void) +0:9 Function Parameters: +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: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) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:6 Function Definition: MyFunction(f1;vf3; ( temp void) +0:6 Function Parameters: +0:6 'myfloat' ( noContraction in float) +0:6 'myfloat3' ( noContraction out 3-component vector of float) +0:9 Function Definition: @main( ( temp structure{ noContraction temp 4-component vector of float color}) +0:9 Function Parameters: +0:? Sequence +0:11 move second child to first child ( noContraction temp 4-component vector of float) +0:11 color: direct index for structure ( noContraction temp 4-component vector of float) +0:11 'ps_output' ( temp structure{ noContraction temp 4-component vector of float color}) +0:11 Constant: +0:11 0 (const int) +0:11 Constant: +0:11 1.000000 +0:11 1.000000 +0:11 1.000000 +0:11 1.000000 +0:12 Branch: Return with expression +0:12 'ps_output' ( temp structure{ noContraction temp 4-component vector of float color}) +0:9 Function Definition: main( ( temp void) +0:9 Function Parameters: +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: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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 37 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 32 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 13 "MyFunction(f1;vf3;" + Name 11 "myfloat" + Name 12 "myfloat3" + Name 16 "PS_OUTPUT" + MemberName 16(PS_OUTPUT) 0 "color" + Name 18 "@main(" + Name 21 "ps_output" + Name 32 "color" + Name 36 "precisefloat" + Decorate 32(color) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypePointer Function 6(float) + 8: TypeVector 6(float) 3 + 9: TypePointer Function 8(fvec3) + 10: TypeFunction 2 7(ptr) 9(ptr) + 15: TypeVector 6(float) 4 + 16(PS_OUTPUT): TypeStruct 15(fvec4) + 17: TypeFunction 16(PS_OUTPUT) + 20: TypePointer Function 16(PS_OUTPUT) + 22: TypeInt 32 1 + 23: 22(int) Constant 0 + 24: 6(float) Constant 1065353216 + 25: 15(fvec4) ConstantComposite 24 24 24 24 + 26: TypePointer Function 15(fvec4) + 31: TypePointer Output 15(fvec4) + 32(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 + Return + FunctionEnd +13(MyFunction(f1;vf3;): 2 Function None 10 + 11(myfloat): 7(ptr) FunctionParameter + 12(myfloat3): 9(ptr) FunctionParameter + 14: Label + Return + FunctionEnd + 18(@main():16(PS_OUTPUT) Function None 17 + 19: Label + 21(ps_output): 20(ptr) Variable Function + 27: 26(ptr) AccessChain 21(ps_output) 23 + Store 27 25 + 28:16(PS_OUTPUT) Load 21(ps_output) + 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 new file mode 100644 index 0000000..b09f68d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.promote.atomic.frag.out @@ -0,0 +1,122 @@ +hlsl.promote.atomic.frag +Shader version: 450 +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 move second child to first child ( temp int) +0:13 'Orig' ( temp int) +0:13 Convert uint to int ( temp int) +0:13 imageAtomicAdd ( temp uint) +0:13 's_uintbuff' (layout( r32ui) uniform uimageBuffer) +0:13 'Loc' ( temp int) +0:13 Convert int to uint ( temp uint) +0:13 'Inc' ( temp int) +0:15 Branch: Return with expression +0:? Constant: +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +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:? 's_uintbuff' (layout( r32ui) uniform uimageBuffer) +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) + + +Linked fragment stage: + + +Shader version: 450 +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 move second child to first child ( temp int) +0:13 'Orig' ( temp int) +0:13 Convert uint to int ( temp int) +0:13 imageAtomicAdd ( temp uint) +0:13 's_uintbuff' (layout( r32ui) uniform uimageBuffer) +0:13 'Loc' ( temp int) +0:13 Convert int to uint ( temp uint) +0:13 'Inc' ( temp int) +0:15 Branch: Return with expression +0:? Constant: +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +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:? 's_uintbuff' (layout( r32ui) uniform uimageBuffer) +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 + + Capability Shader + Capability SampledBuffer + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 34 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 9 "@main(" + Name 13 "Orig" + Name 17 "s_uintbuff" + Name 18 "Loc" + Name 20 "Inc" + Name 34 "@entryPointOutput" + Decorate 17(s_uintbuff) DescriptorSet 0 + Decorate 34(@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: TypeInt 32 0 + 15: TypeImage 14(int) Buffer nonsampled format:R32ui + 16: TypePointer UniformConstant 15 + 17(s_uintbuff): 16(ptr) Variable UniformConstant + 23: 14(int) Constant 0 + 24: TypePointer Image 14(int) + 26: 14(int) Constant 1 + 29: 6(float) Constant 0 + 30: 7(fvec4) ConstantComposite 29 29 29 29 + 33: TypePointer Output 7(fvec4) +34(@entryPointOutput): 33(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 35: 7(fvec4) FunctionCall 9(@main() + Store 34(@entryPointOutput) 35 + Return + FunctionEnd + 9(@main(): 7(fvec4) Function None 8 + 10: Label + 13(Orig): 12(ptr) Variable Function + 18(Loc): 12(ptr) Variable Function + 20(Inc): 12(ptr) Variable Function + 19: 11(int) Load 18(Loc) + 21: 11(int) Load 20(Inc) + 22: 14(int) Bitcast 21 + 25: 24(ptr) ImageTexelPointer 17(s_uintbuff) 19 23 + 27: 14(int) AtomicIAdd 25 26 23 22 + 28: 11(int) Bitcast 27 + Store 13(Orig) 28 + ReturnValue 30 + FunctionEnd 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 new file mode 100644 index 0000000..34a46f9 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.promote.binary.frag.out @@ -0,0 +1,293 @@ +hlsl.promote.binary.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:14 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color}) +0:14 Function Parameters: +0:? Sequence +0:15 mod ( temp float) +0:15 Convert int to float ( temp float) +0:15 ival: direct index for structure ( uniform int) +0:15 '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:15 Constant: +0:15 2 (const uint) +0:15 fval: direct index for structure ( uniform float) +0:15 '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:15 Constant: +0:15 4 (const uint) +0:16 mod ( temp 4-component vector of float) +0:16 Convert int to float ( temp 4-component vector of float) +0:16 ival4: direct index for structure ( uniform 4-component vector of int) +0:16 '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:16 Constant: +0:16 3 (const uint) +0:16 fval4: direct index for structure ( uniform 4-component vector of float) +0:16 '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:16 Constant: +0:16 5 (const uint) +0:18 mod ( temp float) +0:18 Convert bool to float ( temp float) +0:18 bval: direct index for structure ( uniform bool) +0:18 '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:18 Constant: +0:18 0 (const uint) +0:18 fval: direct index for structure ( uniform float) +0:18 '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:18 Constant: +0:18 4 (const uint) +0:19 mod ( temp 4-component vector of float) +0:19 Convert bool to float ( temp 4-component vector of float) +0:19 bval4: direct index for structure ( uniform 4-component vector of bool) +0:19 '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:19 Constant: +0:19 1 (const uint) +0:19 fval4: direct index for structure ( uniform 4-component vector of float) +0:19 '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:19 Constant: +0:19 5 (const uint) +0:21 Sequence +0:21 move second child to first child ( temp int) +0:21 'l_int' ( temp int) +0:21 Constant: +0:21 1 (const int) +0:22 mod second child into first child ( temp int) +0:22 'l_int' ( temp int) +0:22 Convert float to int ( temp int) +0:22 fval: direct index for structure ( uniform float) +0:22 '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:22 Constant: +0:22 4 (const uint) +0:25 move second child to first child ( temp 4-component vector of float) +0:25 Color: direct index for structure ( temp 4-component vector of float) +0:25 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:25 Constant: +0:25 0 (const int) +0:25 Constant: +0:25 0.000000 +0:25 0.000000 +0:25 0.000000 +0:25 0.000000 +0:26 Branch: Return with expression +0:26 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:14 Function Definition: main( ( temp void) +0:14 Function Parameters: +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: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) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:14 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color}) +0:14 Function Parameters: +0:? Sequence +0:15 mod ( temp float) +0:15 Convert int to float ( temp float) +0:15 ival: direct index for structure ( uniform int) +0:15 '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:15 Constant: +0:15 2 (const uint) +0:15 fval: direct index for structure ( uniform float) +0:15 '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:15 Constant: +0:15 4 (const uint) +0:16 mod ( temp 4-component vector of float) +0:16 Convert int to float ( temp 4-component vector of float) +0:16 ival4: direct index for structure ( uniform 4-component vector of int) +0:16 '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:16 Constant: +0:16 3 (const uint) +0:16 fval4: direct index for structure ( uniform 4-component vector of float) +0:16 '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:16 Constant: +0:16 5 (const uint) +0:18 mod ( temp float) +0:18 Convert bool to float ( temp float) +0:18 bval: direct index for structure ( uniform bool) +0:18 '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:18 Constant: +0:18 0 (const uint) +0:18 fval: direct index for structure ( uniform float) +0:18 '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:18 Constant: +0:18 4 (const uint) +0:19 mod ( temp 4-component vector of float) +0:19 Convert bool to float ( temp 4-component vector of float) +0:19 bval4: direct index for structure ( uniform 4-component vector of bool) +0:19 '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:19 Constant: +0:19 1 (const uint) +0:19 fval4: direct index for structure ( uniform 4-component vector of float) +0:19 '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:19 Constant: +0:19 5 (const uint) +0:21 Sequence +0:21 move second child to first child ( temp int) +0:21 'l_int' ( temp int) +0:21 Constant: +0:21 1 (const int) +0:22 mod second child into first child ( temp int) +0:22 'l_int' ( temp int) +0:22 Convert float to int ( temp int) +0:22 fval: direct index for structure ( uniform float) +0:22 '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:22 Constant: +0:22 4 (const uint) +0:25 move second child to first child ( temp 4-component vector of float) +0:25 Color: direct index for structure ( temp 4-component vector of float) +0:25 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:25 Constant: +0:25 0 (const int) +0:25 Constant: +0:25 0.000000 +0:25 0.000000 +0:25 0.000000 +0:25 0.000000 +0:26 Branch: Return with expression +0:26 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:14 Function Definition: main( ( temp void) +0:14 Function Parameters: +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: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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 83 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 80 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + Name 10 "@main(" + Name 16 "$Global" + MemberName 16($Global) 0 "bval" + MemberName 16($Global) 1 "bval4" + MemberName 16($Global) 2 "ival" + MemberName 16($Global) 3 "ival4" + MemberName 16($Global) 4 "fval" + MemberName 16($Global) 5 "fval4" + Name 18 "" + Name 66 "l_int" + Name 73 "psout" + Name 80 "Color" + MemberDecorate 16($Global) 0 Offset 0 + MemberDecorate 16($Global) 1 Offset 16 + MemberDecorate 16($Global) 2 Offset 32 + MemberDecorate 16($Global) 3 Offset 48 + MemberDecorate 16($Global) 4 Offset 64 + MemberDecorate 16($Global) 5 Offset 80 + Decorate 16($Global) Block + Decorate 18 DescriptorSet 0 + Decorate 80(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: TypeInt 32 0 + 13: TypeVector 12(int) 4 + 14: TypeInt 32 1 + 15: TypeVector 14(int) 4 + 16($Global): TypeStruct 12(int) 13(ivec4) 14(int) 15(ivec4) 6(float) 7(fvec4) + 17: TypePointer Uniform 16($Global) + 18: 17(ptr) Variable Uniform + 19: 14(int) Constant 2 + 20: TypePointer Uniform 14(int) + 24: 14(int) Constant 4 + 25: TypePointer Uniform 6(float) + 29: 14(int) Constant 3 + 30: TypePointer Uniform 15(ivec4) + 34: 14(int) Constant 5 + 35: TypePointer Uniform 7(fvec4) + 39: 14(int) Constant 0 + 40: TypePointer Uniform 12(int) + 43: TypeBool + 44: 12(int) Constant 0 + 46: 6(float) Constant 0 + 47: 6(float) Constant 1065353216 + 52: 14(int) Constant 1 + 53: TypePointer Uniform 13(ivec4) + 56: TypeVector 43(bool) 4 + 57: 13(ivec4) ConstantComposite 44 44 44 44 + 59: 7(fvec4) ConstantComposite 46 46 46 46 + 60: 7(fvec4) ConstantComposite 47 47 47 47 + 65: TypePointer Function 14(int) + 72: TypePointer Function 8(PS_OUTPUT) + 74: TypePointer Function 7(fvec4) + 79: TypePointer Output 7(fvec4) + 80(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 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 66(l_int): 65(ptr) Variable Function + 73(psout): 72(ptr) Variable Function + 21: 20(ptr) AccessChain 18 19 + 22: 14(int) Load 21 + 23: 6(float) ConvertSToF 22 + 26: 25(ptr) AccessChain 18 24 + 27: 6(float) Load 26 + 28: 6(float) FMod 23 27 + 31: 30(ptr) AccessChain 18 29 + 32: 15(ivec4) Load 31 + 33: 7(fvec4) ConvertSToF 32 + 36: 35(ptr) AccessChain 18 34 + 37: 7(fvec4) Load 36 + 38: 7(fvec4) FMod 33 37 + 41: 40(ptr) AccessChain 18 39 + 42: 12(int) Load 41 + 45: 43(bool) INotEqual 42 44 + 48: 6(float) Select 45 47 46 + 49: 25(ptr) AccessChain 18 24 + 50: 6(float) Load 49 + 51: 6(float) FMod 48 50 + 54: 53(ptr) AccessChain 18 52 + 55: 13(ivec4) Load 54 + 58: 56(bvec4) INotEqual 55 57 + 61: 7(fvec4) Select 58 60 59 + 62: 35(ptr) AccessChain 18 34 + 63: 7(fvec4) Load 62 + 64: 7(fvec4) FMod 61 63 + Store 66(l_int) 52 + 67: 25(ptr) AccessChain 18 24 + 68: 6(float) Load 67 + 69: 14(int) ConvertFToS 68 + 70: 14(int) Load 66(l_int) + 71: 14(int) SMod 70 69 + Store 66(l_int) 71 + 75: 74(ptr) AccessChain 73(psout) 39 + Store 75 59 + 76:8(PS_OUTPUT) Load 73(psout) + ReturnValue 76 + FunctionEnd 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 new file mode 100644 index 0000000..c76f5d2 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.promote.vec1.frag.out @@ -0,0 +1,131 @@ +hlsl.promote.vec1.frag +Shader version: 450 +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:7 move second child to first child ( temp float) +0:7 'f1a' ( temp float) +0:7 Construct float ( temp float) +0:7 'f1b' ( temp 1-component vector of float) +0:8 move second child to first child ( temp 1-component vector of float) +0:8 'f1b' ( temp 1-component vector of float) +0:8 Construct float ( temp 1-component vector of float) +0:8 'f1a' ( temp float) +0:11 step ( temp 3-component vector of float) +0:11 Constant: +0:11 0.000000 +0:11 0.000000 +0:11 0.000000 +0:11 'f3' ( temp 3-component vector of float) +0:13 sine ( temp float) +0:13 Construct float ( in float) +0:13 'f1b' ( temp 1-component vector of float) +0:15 Branch: Return with expression +0:? Constant: +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 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: 450 +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:7 move second child to first child ( temp float) +0:7 'f1a' ( temp float) +0:7 Construct float ( temp float) +0:7 'f1b' ( temp 1-component vector of float) +0:8 move second child to first child ( temp 1-component vector of float) +0:8 'f1b' ( temp 1-component vector of float) +0:8 Construct float ( temp 1-component vector of float) +0:8 'f1a' ( temp float) +0:11 step ( temp 3-component vector of float) +0:11 Constant: +0:11 0.000000 +0:11 0.000000 +0:11 0.000000 +0:11 'f3' ( temp 3-component vector of float) +0:13 sine ( temp float) +0:13 Construct float ( in float) +0:13 'f1b' ( temp 1-component vector of float) +0:15 Branch: Return with expression +0:? Constant: +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 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): 80001 +// Id's are bound by 31 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 29 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 9 "@main(" + Name 12 "f1a" + Name 13 "f1b" + Name 20 "f3" + Name 29 "@entryPointOutput" + Decorate 29(@entryPointOutput) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypeFunction 7(fvec4) + 11: TypePointer Function 6(float) + 16: TypeVector 6(float) 3 + 17: 6(float) Constant 0 + 18: 16(fvec3) ConstantComposite 17 17 17 + 19: TypePointer Function 16(fvec3) + 25: 7(fvec4) ConstantComposite 17 17 17 17 + 28: TypePointer Output 7(fvec4) +29(@entryPointOutput): 28(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 30: 7(fvec4) FunctionCall 9(@main() + Store 29(@entryPointOutput) 30 + Return + FunctionEnd + 9(@main(): 7(fvec4) Function None 8 + 10: Label + 12(f1a): 11(ptr) Variable Function + 13(f1b): 11(ptr) Variable Function + 20(f3): 19(ptr) Variable Function + 14: 6(float) Load 13(f1b) + Store 12(f1a) 14 + 15: 6(float) Load 12(f1a) + Store 13(f1b) 15 + 21: 16(fvec3) Load 20(f3) + 22: 16(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 18 21 + 23: 6(float) Load 13(f1b) + 24: 6(float) ExtInst 1(GLSL.std.450) 13(Sin) 23 + ReturnValue 25 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.promotions.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.promotions.frag.out new file mode 100644 index 0000000..d955195 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.promotions.frag.out @@ -0,0 +1,2380 @@ +hlsl.promotions.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:19 Function Definition: Fn_F3(vf3; ( temp void) +0:19 Function Parameters: +0:19 'x' ( in 3-component vector of float) +0:20 Function Definition: Fn_I3(vi3; ( temp void) +0:20 Function Parameters: +0:20 'x' ( in 3-component vector of int) +0:21 Function Definition: Fn_U3(vu3; ( temp void) +0:21 Function Parameters: +0:21 'x' ( in 3-component vector of uint) +0:22 Function Definition: Fn_B3(vb3; ( temp void) +0:22 Function Parameters: +0:22 'x' ( in 3-component vector of bool) +0:23 Function Definition: Fn_D3(vd3; ( temp void) +0:23 Function Parameters: +0:23 'x' ( in 3-component vector of double) +0:26 Function Definition: Fn_R_F3I(vf3; ( temp 3-component vector of float) +0:26 Function Parameters: +0:26 'p' ( out 3-component vector of float) +0:? Sequence +0:26 move second child to first child ( temp 3-component vector of float) +0:26 'p' ( out 3-component vector of float) +0:26 Convert int to float ( temp 3-component vector of float) +0:26 i3: direct index for structure ( uniform 3-component vector of int) +0:26 '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:26 Constant: +0:26 0 (const uint) +0:26 Branch: Return with expression +0:26 Convert int to float ( temp 3-component vector of float) +0:26 i3: direct index for structure ( uniform 3-component vector of int) +0:26 '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:26 Constant: +0:26 0 (const uint) +0:27 Function Definition: Fn_R_F3U(vf3; ( temp 3-component vector of float) +0:27 Function Parameters: +0:27 'p' ( out 3-component vector of float) +0:? Sequence +0:27 move second child to first child ( temp 3-component vector of float) +0:27 'p' ( out 3-component vector of float) +0:27 Convert uint to float ( temp 3-component vector of float) +0:27 u3: direct index for structure ( uniform 3-component vector of uint) +0:27 '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:27 Constant: +0:27 3 (const uint) +0:27 Branch: Return with expression +0:27 Convert uint to float ( temp 3-component vector of float) +0:27 u3: direct index for structure ( uniform 3-component vector of uint) +0:27 '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:27 Constant: +0:27 3 (const uint) +0:28 Function Definition: Fn_R_F3B(vf3; ( temp 3-component vector of float) +0:28 Function Parameters: +0:28 'p' ( out 3-component vector of float) +0:? Sequence +0:28 move second child to first child ( temp 3-component vector of float) +0:28 'p' ( out 3-component vector of float) +0:28 Convert bool to float ( temp 3-component vector of float) +0:28 b3: direct index for structure ( uniform 3-component vector of bool) +0:28 '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:28 Constant: +0:28 1 (const uint) +0:28 Branch: Return with expression +0:28 Convert bool to float ( temp 3-component vector of float) +0:28 b3: direct index for structure ( uniform 3-component vector of bool) +0:28 '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:28 Constant: +0:28 1 (const uint) +0:29 Function Definition: Fn_R_F3D(vf3; ( temp 3-component vector of float) +0:29 Function Parameters: +0:29 'p' ( out 3-component vector of float) +0:? Sequence +0:29 move second child to first child ( temp 3-component vector of float) +0:29 'p' ( out 3-component vector of float) +0:29 Convert double to float ( temp 3-component vector of float) +0:29 d3: direct index for structure ( uniform 3-component vector of double) +0:29 '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:29 Constant: +0:29 4 (const uint) +0:29 Branch: Return with expression +0:29 Convert double to float ( temp 3-component vector of float) +0:29 d3: direct index for structure ( uniform 3-component vector of double) +0:29 '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:29 Constant: +0:29 4 (const uint) +0:31 Function Definition: Fn_R_I3U(vi3; ( temp 3-component vector of int) +0:31 Function Parameters: +0:31 'p' ( out 3-component vector of int) +0:? Sequence +0:31 move second child to first child ( temp 3-component vector of int) +0:31 'p' ( out 3-component vector of int) +0:31 Convert uint to int ( temp 3-component vector of int) +0:31 u3: direct index for structure ( uniform 3-component vector of uint) +0:31 '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:31 Constant: +0:31 3 (const uint) +0:31 Branch: Return with expression +0:31 Convert uint to int ( temp 3-component vector of int) +0:31 u3: direct index for structure ( uniform 3-component vector of uint) +0:31 '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:31 Constant: +0:31 3 (const uint) +0:32 Function Definition: Fn_R_I3B(vi3; ( temp 3-component vector of int) +0:32 Function Parameters: +0:32 'p' ( out 3-component vector of int) +0:? Sequence +0:32 move second child to first child ( temp 3-component vector of int) +0:32 'p' ( out 3-component vector of int) +0:32 Convert bool to int ( temp 3-component vector of int) +0:32 b3: direct index for structure ( uniform 3-component vector of bool) +0:32 '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:32 Constant: +0:32 1 (const uint) +0:32 Branch: Return with expression +0:32 Convert bool to int ( temp 3-component vector of int) +0:32 b3: direct index for structure ( uniform 3-component vector of bool) +0:32 '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:32 Constant: +0:32 1 (const uint) +0:33 Function Definition: Fn_R_I3F(vi3; ( temp 3-component vector of int) +0:33 Function Parameters: +0:33 'p' ( out 3-component vector of int) +0:? Sequence +0:33 move second child to first child ( temp 3-component vector of int) +0:33 'p' ( out 3-component vector of int) +0:33 Convert float to int ( temp 3-component vector of int) +0:33 f3: direct index for structure ( uniform 3-component vector of float) +0:33 '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:33 Constant: +0:33 2 (const uint) +0:33 Branch: Return with expression +0:33 Convert float to int ( temp 3-component vector of int) +0:33 f3: direct index for structure ( uniform 3-component vector of float) +0:33 '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:33 Constant: +0:33 2 (const uint) +0:34 Function Definition: Fn_R_I3D(vi3; ( temp 3-component vector of int) +0:34 Function Parameters: +0:34 'p' ( out 3-component vector of int) +0:? Sequence +0:34 move second child to first child ( temp 3-component vector of int) +0:34 'p' ( out 3-component vector of int) +0:34 Convert double to int ( temp 3-component vector of int) +0:34 d3: direct index for structure ( uniform 3-component vector of double) +0:34 '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:34 Constant: +0:34 4 (const uint) +0:34 Branch: Return with expression +0:34 Convert double to int ( temp 3-component vector of int) +0:34 d3: direct index for structure ( uniform 3-component vector of double) +0:34 '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:34 Constant: +0:34 4 (const uint) +0:36 Function Definition: Fn_R_U3I(vu3; ( temp 3-component vector of uint) +0:36 Function Parameters: +0:36 'p' ( out 3-component vector of uint) +0:? Sequence +0:36 move second child to first child ( temp 3-component vector of uint) +0:36 'p' ( out 3-component vector of uint) +0:36 Convert int to uint ( temp 3-component vector of uint) +0:36 i3: direct index for structure ( uniform 3-component vector of int) +0:36 '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:36 Constant: +0:36 0 (const uint) +0:36 Branch: Return with expression +0:36 Convert int to uint ( temp 3-component vector of uint) +0:36 i3: direct index for structure ( uniform 3-component vector of int) +0:36 '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:36 Constant: +0:36 0 (const uint) +0:37 Function Definition: Fn_R_U3F(vu3; ( temp 3-component vector of uint) +0:37 Function Parameters: +0:37 'p' ( out 3-component vector of uint) +0:? Sequence +0:37 move second child to first child ( temp 3-component vector of uint) +0:37 'p' ( out 3-component vector of uint) +0:37 Convert float to uint ( temp 3-component vector of uint) +0:37 f3: direct index for structure ( uniform 3-component vector of float) +0:37 '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:37 Constant: +0:37 2 (const uint) +0:37 Branch: Return with expression +0:37 Convert float to uint ( temp 3-component vector of uint) +0:37 f3: direct index for structure ( uniform 3-component vector of float) +0:37 '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:37 Constant: +0:37 2 (const uint) +0:38 Function Definition: Fn_R_U3B(vu3; ( temp 3-component vector of uint) +0:38 Function Parameters: +0:38 'p' ( out 3-component vector of uint) +0:? Sequence +0:38 move second child to first child ( temp 3-component vector of uint) +0:38 'p' ( out 3-component vector of uint) +0:38 Convert bool to uint ( temp 3-component vector of uint) +0:38 b3: direct index for structure ( uniform 3-component vector of bool) +0:38 '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:38 Constant: +0:38 1 (const uint) +0:38 Branch: Return with expression +0:38 Convert bool to uint ( temp 3-component vector of uint) +0:38 b3: direct index for structure ( uniform 3-component vector of bool) +0:38 '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:38 Constant: +0:38 1 (const uint) +0:39 Function Definition: Fn_R_U3D(vu3; ( temp 3-component vector of uint) +0:39 Function Parameters: +0:39 'p' ( out 3-component vector of uint) +0:? Sequence +0:39 move second child to first child ( temp 3-component vector of uint) +0:39 'p' ( out 3-component vector of uint) +0:39 Convert double to uint ( temp 3-component vector of uint) +0:39 d3: direct index for structure ( uniform 3-component vector of double) +0:39 '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:39 Constant: +0:39 4 (const uint) +0:39 Branch: Return with expression +0:39 Convert double to uint ( temp 3-component vector of uint) +0:39 d3: direct index for structure ( uniform 3-component vector of double) +0:39 '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:39 Constant: +0:39 4 (const uint) +0:41 Function Definition: Fn_R_B3I(vb3; ( temp 3-component vector of bool) +0:41 Function Parameters: +0:41 'p' ( out 3-component vector of bool) +0:? Sequence +0:41 move second child to first child ( temp 3-component vector of bool) +0:41 'p' ( out 3-component vector of bool) +0:41 Convert int to bool ( temp 3-component vector of bool) +0:41 i3: direct index for structure ( uniform 3-component vector of int) +0:41 '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:41 Constant: +0:41 0 (const uint) +0:41 Branch: Return with expression +0:41 Convert int to bool ( temp 3-component vector of bool) +0:41 i3: direct index for structure ( uniform 3-component vector of int) +0:41 '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:41 Constant: +0:41 0 (const uint) +0:42 Function Definition: Fn_R_B3U(vb3; ( temp 3-component vector of bool) +0:42 Function Parameters: +0:42 'p' ( out 3-component vector of bool) +0:? Sequence +0:42 move second child to first child ( temp 3-component vector of bool) +0:42 'p' ( out 3-component vector of bool) +0:42 Convert uint to bool ( temp 3-component vector of bool) +0:42 u3: direct index for structure ( uniform 3-component vector of uint) +0:42 '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:42 Constant: +0:42 3 (const uint) +0:42 Branch: Return with expression +0:42 Convert uint to bool ( temp 3-component vector of bool) +0:42 u3: direct index for structure ( uniform 3-component vector of uint) +0:42 '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:42 Constant: +0:42 3 (const uint) +0:43 Function Definition: Fn_R_B3F(vb3; ( temp 3-component vector of bool) +0:43 Function Parameters: +0:43 'p' ( out 3-component vector of bool) +0:? Sequence +0:43 move second child to first child ( temp 3-component vector of bool) +0:43 'p' ( out 3-component vector of bool) +0:43 Convert float to bool ( temp 3-component vector of bool) +0:43 f3: direct index for structure ( uniform 3-component vector of float) +0:43 '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:43 Constant: +0:43 2 (const uint) +0:43 Branch: Return with expression +0:43 Convert float to bool ( temp 3-component vector of bool) +0:43 f3: direct index for structure ( uniform 3-component vector of float) +0:43 '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:43 Constant: +0:43 2 (const uint) +0:44 Function Definition: Fn_R_B3D(vb3; ( temp 3-component vector of bool) +0:44 Function Parameters: +0:44 'p' ( out 3-component vector of bool) +0:? Sequence +0:44 move second child to first child ( temp 3-component vector of bool) +0:44 'p' ( out 3-component vector of bool) +0:44 Convert double to bool ( temp 3-component vector of bool) +0:44 d3: direct index for structure ( uniform 3-component vector of double) +0:44 '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:44 Constant: +0:44 4 (const uint) +0:44 Branch: Return with expression +0:44 Convert double to bool ( temp 3-component vector of bool) +0:44 d3: direct index for structure ( uniform 3-component vector of double) +0:44 '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:44 Constant: +0:44 4 (const uint) +0:46 Function Definition: Fn_R_D3I(vd3; ( temp 3-component vector of double) +0:46 Function Parameters: +0:46 'p' ( out 3-component vector of double) +0:? Sequence +0:46 move second child to first child ( temp 3-component vector of double) +0:46 'p' ( out 3-component vector of double) +0:46 Convert int to double ( temp 3-component vector of double) +0:46 i3: direct index for structure ( uniform 3-component vector of int) +0:46 '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:46 Constant: +0:46 0 (const uint) +0:46 Branch: Return with expression +0:46 Convert int to double ( temp 3-component vector of double) +0:46 i3: direct index for structure ( uniform 3-component vector of int) +0:46 '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:46 Constant: +0:46 0 (const uint) +0:47 Function Definition: Fn_R_D3U(vd3; ( temp 3-component vector of double) +0:47 Function Parameters: +0:47 'p' ( out 3-component vector of double) +0:? Sequence +0:47 move second child to first child ( temp 3-component vector of double) +0:47 'p' ( out 3-component vector of double) +0:47 Convert uint to double ( temp 3-component vector of double) +0:47 u3: direct index for structure ( uniform 3-component vector of uint) +0:47 '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:47 Constant: +0:47 3 (const uint) +0:47 Branch: Return with expression +0:47 Convert uint to double ( temp 3-component vector of double) +0:47 u3: direct index for structure ( uniform 3-component vector of uint) +0:47 '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:47 Constant: +0:47 3 (const uint) +0:48 Function Definition: Fn_R_D3B(vd3; ( temp 3-component vector of double) +0:48 Function Parameters: +0:48 'p' ( out 3-component vector of double) +0:? Sequence +0:48 move second child to first child ( temp 3-component vector of double) +0:48 'p' ( out 3-component vector of double) +0:48 Convert bool to double ( temp 3-component vector of double) +0:48 b3: direct index for structure ( uniform 3-component vector of bool) +0:48 '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:48 Constant: +0:48 1 (const uint) +0:48 Branch: Return with expression +0:48 Convert bool to double ( temp 3-component vector of double) +0:48 b3: direct index for structure ( uniform 3-component vector of bool) +0:48 '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:48 Constant: +0:48 1 (const uint) +0:49 Function Definition: Fn_R_D3F(vd3; ( temp 3-component vector of double) +0:49 Function Parameters: +0:49 'p' ( out 3-component vector of double) +0:? Sequence +0:49 move second child to first child ( temp 3-component vector of double) +0:49 'p' ( out 3-component vector of double) +0:49 Convert float to double ( temp 3-component vector of double) +0:49 f3: direct index for structure ( uniform 3-component vector of float) +0:49 '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:49 Constant: +0:49 2 (const uint) +0:49 Branch: Return with expression +0:49 Convert float to double ( temp 3-component vector of double) +0:49 f3: direct index for structure ( uniform 3-component vector of float) +0:49 '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:49 Constant: +0:49 2 (const uint) +0:52 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color}) +0:52 Function Parameters: +0:? Sequence +0:54 Sequence +0:54 move second child to first child ( temp 3-component vector of float) +0:54 'r00' ( temp 3-component vector of float) +0:54 Convert int to float ( temp 3-component vector of float) +0:54 i3: direct index for structure ( uniform 3-component vector of int) +0:54 '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:54 Constant: +0:54 0 (const uint) +0:55 Sequence +0:55 move second child to first child ( temp 3-component vector of float) +0:55 'r01' ( temp 3-component vector of float) +0:55 Convert bool to float ( temp 3-component vector of float) +0:55 b3: direct index for structure ( uniform 3-component vector of bool) +0:55 '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:55 Constant: +0:55 1 (const uint) +0:56 Sequence +0:56 move second child to first child ( temp 3-component vector of float) +0:56 'r02' ( temp 3-component vector of float) +0:56 Convert uint to float ( temp 3-component vector of float) +0:56 u3: direct index for structure ( uniform 3-component vector of uint) +0:56 '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:56 Constant: +0:56 3 (const uint) +0:57 Sequence +0:57 move second child to first child ( temp 3-component vector of float) +0:57 'r03' ( temp 3-component vector of float) +0:57 Convert double to float ( temp 3-component vector of float) +0:57 d3: direct index for structure ( uniform 3-component vector of double) +0:57 '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:57 Constant: +0:57 4 (const uint) +0:59 Sequence +0:59 move second child to first child ( temp 3-component vector of int) +0:59 'r10' ( temp 3-component vector of int) +0:59 Convert bool to int ( temp 3-component vector of int) +0:59 b3: direct index for structure ( uniform 3-component vector of bool) +0:59 '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:59 Constant: +0:59 1 (const uint) +0:60 Sequence +0:60 move second child to first child ( temp 3-component vector of int) +0:60 'r11' ( temp 3-component vector of int) +0:60 Convert uint to int ( temp 3-component vector of int) +0:60 u3: direct index for structure ( uniform 3-component vector of uint) +0:60 '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:60 Constant: +0:60 3 (const uint) +0:61 Sequence +0:61 move second child to first child ( temp 3-component vector of int) +0:61 'r12' ( temp 3-component vector of int) +0:61 Convert float to int ( temp 3-component vector of int) +0:61 f3: direct index for structure ( uniform 3-component vector of float) +0:61 '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:61 Constant: +0:61 2 (const uint) +0:62 Sequence +0:62 move second child to first child ( temp 3-component vector of int) +0:62 'r13' ( temp 3-component vector of int) +0:62 Convert double to int ( temp 3-component vector of int) +0:62 d3: direct index for structure ( uniform 3-component vector of double) +0:62 '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:62 Constant: +0:62 4 (const uint) +0:64 Sequence +0:64 move second child to first child ( temp 3-component vector of uint) +0:64 'r20' ( temp 3-component vector of uint) +0:64 Convert bool to uint ( temp 3-component vector of uint) +0:64 b3: direct index for structure ( uniform 3-component vector of bool) +0:64 '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:64 Constant: +0:64 1 (const uint) +0:65 Sequence +0:65 move second child to first child ( temp 3-component vector of uint) +0:65 'r21' ( temp 3-component vector of uint) +0:65 Convert int to uint ( temp 3-component vector of uint) +0:65 i3: direct index for structure ( uniform 3-component vector of int) +0:65 '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:65 Constant: +0:65 0 (const uint) +0:66 Sequence +0:66 move second child to first child ( temp 3-component vector of uint) +0:66 'r22' ( temp 3-component vector of uint) +0:66 Convert float to uint ( temp 3-component vector of uint) +0:66 f3: direct index for structure ( uniform 3-component vector of float) +0:66 '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:66 Constant: +0:66 2 (const uint) +0:67 Sequence +0:67 move second child to first child ( temp 3-component vector of uint) +0:67 'r23' ( temp 3-component vector of uint) +0:67 Convert double to uint ( temp 3-component vector of uint) +0:67 d3: direct index for structure ( uniform 3-component vector of double) +0:67 '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:67 Constant: +0:67 4 (const uint) +0:69 Sequence +0:69 move second child to first child ( temp 3-component vector of bool) +0:69 'r30' ( temp 3-component vector of bool) +0:69 Convert int to bool ( temp 3-component vector of bool) +0:69 i3: direct index for structure ( uniform 3-component vector of int) +0:69 '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:69 Constant: +0:69 0 (const uint) +0:70 Sequence +0:70 move second child to first child ( temp 3-component vector of bool) +0:70 'r31' ( temp 3-component vector of bool) +0:70 Convert uint to bool ( temp 3-component vector of bool) +0:70 u3: direct index for structure ( uniform 3-component vector of uint) +0:70 '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:70 Constant: +0:70 3 (const uint) +0:71 Sequence +0:71 move second child to first child ( temp 3-component vector of bool) +0:71 'r32' ( temp 3-component vector of bool) +0:71 Convert float to bool ( temp 3-component vector of bool) +0:71 f3: direct index for structure ( uniform 3-component vector of float) +0:71 '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:71 Constant: +0:71 2 (const uint) +0:72 Sequence +0:72 move second child to first child ( temp 3-component vector of bool) +0:72 'r33' ( temp 3-component vector of bool) +0:72 Convert double to bool ( temp 3-component vector of bool) +0:72 d3: direct index for structure ( uniform 3-component vector of double) +0:72 '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:72 Constant: +0:72 4 (const uint) +0:74 Sequence +0:74 move second child to first child ( temp 3-component vector of double) +0:74 'r40' ( temp 3-component vector of double) +0:74 Convert int to double ( temp 3-component vector of double) +0:74 i3: direct index for structure ( uniform 3-component vector of int) +0:74 '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:74 Constant: +0:74 0 (const uint) +0:75 Sequence +0:75 move second child to first child ( temp 3-component vector of double) +0:75 'r41' ( temp 3-component vector of double) +0:75 Convert uint to double ( temp 3-component vector of double) +0:75 u3: direct index for structure ( uniform 3-component vector of uint) +0:75 '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:75 Constant: +0:75 3 (const uint) +0:76 Sequence +0:76 move second child to first child ( temp 3-component vector of double) +0:76 'r42' ( temp 3-component vector of double) +0:76 Convert float to double ( temp 3-component vector of double) +0:76 f3: direct index for structure ( uniform 3-component vector of float) +0:76 '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:76 Constant: +0:76 2 (const uint) +0:77 Sequence +0:77 move second child to first child ( temp 3-component vector of double) +0:77 'r43' ( temp 3-component vector of double) +0:77 Convert bool to double ( temp 3-component vector of double) +0:77 b3: direct index for structure ( uniform 3-component vector of bool) +0:77 '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:77 Constant: +0:77 1 (const uint) +0:80 multiply second child into first child ( temp 3-component vector of float) +0:80 'r00' ( temp 3-component vector of float) +0:80 Convert int to float ( temp 3-component vector of float) +0:80 i3: direct index for structure ( uniform 3-component vector of int) +0:80 '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:80 Constant: +0:80 0 (const uint) +0:81 multiply second child into first child ( temp 3-component vector of float) +0:81 'r01' ( temp 3-component vector of float) +0:81 Convert bool to float ( temp 3-component vector of float) +0:81 b3: direct index for structure ( uniform 3-component vector of bool) +0:81 '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:81 Constant: +0:81 1 (const uint) +0:82 multiply second child into first child ( temp 3-component vector of float) +0:82 'r02' ( temp 3-component vector of float) +0:82 Convert uint to float ( temp 3-component vector of float) +0:82 u3: direct index for structure ( uniform 3-component vector of uint) +0:82 '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:82 Constant: +0:82 3 (const uint) +0:83 multiply second child into first child ( temp 3-component vector of float) +0:83 'r03' ( temp 3-component vector of float) +0:83 Convert double to float ( temp 3-component vector of float) +0:83 d3: direct index for structure ( uniform 3-component vector of double) +0:83 '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:83 Constant: +0:83 4 (const uint) +0:85 multiply second child into first child ( temp 3-component vector of int) +0:85 'r10' ( temp 3-component vector of int) +0:85 Convert bool to int ( temp 3-component vector of int) +0:85 b3: direct index for structure ( uniform 3-component vector of bool) +0:85 '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:85 Constant: +0:85 1 (const uint) +0:86 multiply second child into first child ( temp 3-component vector of int) +0:86 'r11' ( temp 3-component vector of int) +0:86 Convert uint to int ( temp 3-component vector of int) +0:86 u3: direct index for structure ( uniform 3-component vector of uint) +0:86 '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:86 Constant: +0:86 3 (const uint) +0:87 multiply second child into first child ( temp 3-component vector of int) +0:87 'r12' ( temp 3-component vector of int) +0:87 Convert float to int ( temp 3-component vector of int) +0:87 f3: direct index for structure ( uniform 3-component vector of float) +0:87 '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:87 Constant: +0:87 2 (const uint) +0:88 multiply second child into first child ( temp 3-component vector of int) +0:88 'r13' ( temp 3-component vector of int) +0:88 Convert double to int ( temp 3-component vector of int) +0:88 d3: direct index for structure ( uniform 3-component vector of double) +0:88 '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:88 Constant: +0:88 4 (const uint) +0:90 multiply second child into first child ( temp 3-component vector of uint) +0:90 'r20' ( temp 3-component vector of uint) +0:90 Convert bool to uint ( temp 3-component vector of uint) +0:90 b3: direct index for structure ( uniform 3-component vector of bool) +0:90 '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:90 Constant: +0:90 1 (const uint) +0:91 multiply second child into first child ( temp 3-component vector of uint) +0:91 'r21' ( temp 3-component vector of uint) +0:91 Convert int to uint ( temp 3-component vector of uint) +0:91 i3: direct index for structure ( uniform 3-component vector of int) +0:91 '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:91 Constant: +0:91 0 (const uint) +0:92 multiply second child into first child ( temp 3-component vector of uint) +0:92 'r22' ( temp 3-component vector of uint) +0:92 Convert float to uint ( temp 3-component vector of uint) +0:92 f3: direct index for structure ( uniform 3-component vector of float) +0:92 '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:92 Constant: +0:92 2 (const uint) +0:93 multiply second child into first child ( temp 3-component vector of uint) +0:93 'r23' ( temp 3-component vector of uint) +0:93 Convert double to uint ( temp 3-component vector of uint) +0:93 d3: direct index for structure ( uniform 3-component vector of double) +0:93 '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:93 Constant: +0:93 4 (const uint) +0:97 multiply second child into first child ( temp 3-component vector of double) +0:97 'r40' ( temp 3-component vector of double) +0:97 Convert int to double ( temp 3-component vector of double) +0:97 i3: direct index for structure ( uniform 3-component vector of int) +0:97 '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:97 Constant: +0:97 0 (const uint) +0:98 multiply second child into first child ( temp 3-component vector of double) +0:98 'r41' ( temp 3-component vector of double) +0:98 Convert uint to double ( temp 3-component vector of double) +0:98 u3: direct index for structure ( uniform 3-component vector of uint) +0:98 '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:98 Constant: +0:98 3 (const uint) +0:99 multiply second child into first child ( temp 3-component vector of double) +0:99 'r42' ( temp 3-component vector of double) +0:99 Convert float to double ( temp 3-component vector of double) +0:99 f3: direct index for structure ( uniform 3-component vector of float) +0:99 '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:99 Constant: +0:99 2 (const uint) +0:100 multiply second child into first child ( temp 3-component vector of double) +0:100 'r43' ( temp 3-component vector of double) +0:100 Convert bool to double ( temp 3-component vector of double) +0:100 b3: direct index for structure ( uniform 3-component vector of bool) +0:100 '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:100 Constant: +0:100 1 (const uint) +0:103 vector scale second child into first child ( temp 3-component vector of float) +0:103 'r00' ( temp 3-component vector of float) +0:103 Convert int to float ( temp float) +0:103 is: direct index for structure ( uniform int) +0:103 '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:103 Constant: +0:103 5 (const uint) +0:104 vector scale second child into first child ( temp 3-component vector of float) +0:104 'r01' ( temp 3-component vector of float) +0:104 Convert bool to float ( temp float) +0:104 bs: direct index for structure ( uniform bool) +0:104 '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:104 Constant: +0:104 6 (const uint) +0:105 vector scale second child into first child ( temp 3-component vector of float) +0:105 'r02' ( temp 3-component vector of float) +0:105 Convert uint to float ( temp float) +0:105 us: direct index for structure ( uniform uint) +0:105 '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:105 Constant: +0:105 8 (const uint) +0:106 vector scale second child into first child ( temp 3-component vector of float) +0:106 'r03' ( temp 3-component vector of float) +0:106 Convert double to float ( temp float) +0:106 ds: direct index for structure ( uniform double) +0:106 '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:106 Constant: +0:106 9 (const uint) +0:108 vector scale second child into first child ( temp 3-component vector of int) +0:108 'r10' ( temp 3-component vector of int) +0:108 Convert bool to int ( temp int) +0:108 bs: direct index for structure ( uniform bool) +0:108 '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:108 Constant: +0:108 6 (const uint) +0:109 vector scale second child into first child ( temp 3-component vector of int) +0:109 'r11' ( temp 3-component vector of int) +0:109 Convert uint to int ( temp int) +0:109 us: direct index for structure ( uniform uint) +0:109 '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:109 Constant: +0:109 8 (const uint) +0:110 vector scale second child into first child ( temp 3-component vector of int) +0:110 'r12' ( temp 3-component vector of int) +0:110 Convert float to int ( temp int) +0:110 fs: direct index for structure ( uniform float) +0:110 '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:110 Constant: +0:110 7 (const uint) +0:111 vector scale second child into first child ( temp 3-component vector of int) +0:111 'r13' ( temp 3-component vector of int) +0:111 Convert double to int ( temp int) +0:111 ds: direct index for structure ( uniform double) +0:111 '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:111 Constant: +0:111 9 (const uint) +0:113 vector scale second child into first child ( temp 3-component vector of uint) +0:113 'r20' ( temp 3-component vector of uint) +0:113 Convert bool to uint ( temp uint) +0:113 bs: direct index for structure ( uniform bool) +0:113 '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:113 Constant: +0:113 6 (const uint) +0:114 vector scale second child into first child ( temp 3-component vector of uint) +0:114 'r21' ( temp 3-component vector of uint) +0:114 Convert int to uint ( temp uint) +0:114 is: direct index for structure ( uniform int) +0:114 '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:114 Constant: +0:114 5 (const uint) +0:115 vector scale second child into first child ( temp 3-component vector of uint) +0:115 'r22' ( temp 3-component vector of uint) +0:115 Convert float to uint ( temp uint) +0:115 fs: direct index for structure ( uniform float) +0:115 '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:115 Constant: +0:115 7 (const uint) +0:116 vector scale second child into first child ( temp 3-component vector of uint) +0:116 'r23' ( temp 3-component vector of uint) +0:116 Convert double to uint ( temp uint) +0:116 ds: direct index for structure ( uniform double) +0:116 '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:116 Constant: +0:116 9 (const uint) +0:120 vector scale second child into first child ( temp 3-component vector of double) +0:120 'r40' ( temp 3-component vector of double) +0:120 Convert int to double ( temp double) +0:120 is: direct index for structure ( uniform int) +0:120 '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:120 Constant: +0:120 5 (const uint) +0:121 vector scale second child into first child ( temp 3-component vector of double) +0:121 'r41' ( temp 3-component vector of double) +0:121 Convert uint to double ( temp double) +0:121 us: direct index for structure ( uniform uint) +0:121 '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:121 Constant: +0:121 8 (const uint) +0:122 vector scale second child into first child ( temp 3-component vector of double) +0:122 'r42' ( temp 3-component vector of double) +0:122 Convert float to double ( temp double) +0:122 fs: direct index for structure ( uniform float) +0:122 '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:122 Constant: +0:122 7 (const uint) +0:123 vector scale second child into first child ( temp 3-component vector of double) +0:123 'r43' ( temp 3-component vector of double) +0:123 Convert bool to double ( temp double) +0:123 bs: direct index for structure ( uniform bool) +0:123 '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:123 Constant: +0:123 6 (const uint) +0:193 Sequence +0:193 move second child to first child ( temp int) +0:193 'c1' ( temp int) +0:193 Constant: +0:193 3 (const int) +0:194 Sequence +0:194 move second child to first child ( temp int) +0:194 'c2' ( temp int) +0:194 Constant: +0:194 3 (const int) +0:196 Sequence +0:196 move second child to first child ( temp 4-component vector of float) +0:196 'outval' ( temp 4-component vector of float) +0:? Construct vec4 ( temp 4-component vector of float) +0:196 Constant: +0:196 3.600000 +0:196 Constant: +0:196 3.600000 +0:196 Convert int to float ( temp float) +0:196 'c1' ( temp int) +0:196 Convert int to float ( temp float) +0:196 'c2' ( temp int) +0:199 move second child to first child ( temp 4-component vector of float) +0:199 Color: direct index for structure ( temp 4-component vector of float) +0:199 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:199 Constant: +0:199 0 (const int) +0:199 'outval' ( temp 4-component vector of float) +0:200 Branch: Return with expression +0:200 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:52 Function Definition: main( ( temp void) +0:52 Function Parameters: +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: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) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:19 Function Definition: Fn_F3(vf3; ( temp void) +0:19 Function Parameters: +0:19 'x' ( in 3-component vector of float) +0:20 Function Definition: Fn_I3(vi3; ( temp void) +0:20 Function Parameters: +0:20 'x' ( in 3-component vector of int) +0:21 Function Definition: Fn_U3(vu3; ( temp void) +0:21 Function Parameters: +0:21 'x' ( in 3-component vector of uint) +0:22 Function Definition: Fn_B3(vb3; ( temp void) +0:22 Function Parameters: +0:22 'x' ( in 3-component vector of bool) +0:23 Function Definition: Fn_D3(vd3; ( temp void) +0:23 Function Parameters: +0:23 'x' ( in 3-component vector of double) +0:26 Function Definition: Fn_R_F3I(vf3; ( temp 3-component vector of float) +0:26 Function Parameters: +0:26 'p' ( out 3-component vector of float) +0:? Sequence +0:26 move second child to first child ( temp 3-component vector of float) +0:26 'p' ( out 3-component vector of float) +0:26 Convert int to float ( temp 3-component vector of float) +0:26 i3: direct index for structure ( uniform 3-component vector of int) +0:26 '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:26 Constant: +0:26 0 (const uint) +0:26 Branch: Return with expression +0:26 Convert int to float ( temp 3-component vector of float) +0:26 i3: direct index for structure ( uniform 3-component vector of int) +0:26 '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:26 Constant: +0:26 0 (const uint) +0:27 Function Definition: Fn_R_F3U(vf3; ( temp 3-component vector of float) +0:27 Function Parameters: +0:27 'p' ( out 3-component vector of float) +0:? Sequence +0:27 move second child to first child ( temp 3-component vector of float) +0:27 'p' ( out 3-component vector of float) +0:27 Convert uint to float ( temp 3-component vector of float) +0:27 u3: direct index for structure ( uniform 3-component vector of uint) +0:27 '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:27 Constant: +0:27 3 (const uint) +0:27 Branch: Return with expression +0:27 Convert uint to float ( temp 3-component vector of float) +0:27 u3: direct index for structure ( uniform 3-component vector of uint) +0:27 '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:27 Constant: +0:27 3 (const uint) +0:28 Function Definition: Fn_R_F3B(vf3; ( temp 3-component vector of float) +0:28 Function Parameters: +0:28 'p' ( out 3-component vector of float) +0:? Sequence +0:28 move second child to first child ( temp 3-component vector of float) +0:28 'p' ( out 3-component vector of float) +0:28 Convert bool to float ( temp 3-component vector of float) +0:28 b3: direct index for structure ( uniform 3-component vector of bool) +0:28 '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:28 Constant: +0:28 1 (const uint) +0:28 Branch: Return with expression +0:28 Convert bool to float ( temp 3-component vector of float) +0:28 b3: direct index for structure ( uniform 3-component vector of bool) +0:28 '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:28 Constant: +0:28 1 (const uint) +0:29 Function Definition: Fn_R_F3D(vf3; ( temp 3-component vector of float) +0:29 Function Parameters: +0:29 'p' ( out 3-component vector of float) +0:? Sequence +0:29 move second child to first child ( temp 3-component vector of float) +0:29 'p' ( out 3-component vector of float) +0:29 Convert double to float ( temp 3-component vector of float) +0:29 d3: direct index for structure ( uniform 3-component vector of double) +0:29 '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:29 Constant: +0:29 4 (const uint) +0:29 Branch: Return with expression +0:29 Convert double to float ( temp 3-component vector of float) +0:29 d3: direct index for structure ( uniform 3-component vector of double) +0:29 '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:29 Constant: +0:29 4 (const uint) +0:31 Function Definition: Fn_R_I3U(vi3; ( temp 3-component vector of int) +0:31 Function Parameters: +0:31 'p' ( out 3-component vector of int) +0:? Sequence +0:31 move second child to first child ( temp 3-component vector of int) +0:31 'p' ( out 3-component vector of int) +0:31 Convert uint to int ( temp 3-component vector of int) +0:31 u3: direct index for structure ( uniform 3-component vector of uint) +0:31 '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:31 Constant: +0:31 3 (const uint) +0:31 Branch: Return with expression +0:31 Convert uint to int ( temp 3-component vector of int) +0:31 u3: direct index for structure ( uniform 3-component vector of uint) +0:31 '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:31 Constant: +0:31 3 (const uint) +0:32 Function Definition: Fn_R_I3B(vi3; ( temp 3-component vector of int) +0:32 Function Parameters: +0:32 'p' ( out 3-component vector of int) +0:? Sequence +0:32 move second child to first child ( temp 3-component vector of int) +0:32 'p' ( out 3-component vector of int) +0:32 Convert bool to int ( temp 3-component vector of int) +0:32 b3: direct index for structure ( uniform 3-component vector of bool) +0:32 '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:32 Constant: +0:32 1 (const uint) +0:32 Branch: Return with expression +0:32 Convert bool to int ( temp 3-component vector of int) +0:32 b3: direct index for structure ( uniform 3-component vector of bool) +0:32 '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:32 Constant: +0:32 1 (const uint) +0:33 Function Definition: Fn_R_I3F(vi3; ( temp 3-component vector of int) +0:33 Function Parameters: +0:33 'p' ( out 3-component vector of int) +0:? Sequence +0:33 move second child to first child ( temp 3-component vector of int) +0:33 'p' ( out 3-component vector of int) +0:33 Convert float to int ( temp 3-component vector of int) +0:33 f3: direct index for structure ( uniform 3-component vector of float) +0:33 '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:33 Constant: +0:33 2 (const uint) +0:33 Branch: Return with expression +0:33 Convert float to int ( temp 3-component vector of int) +0:33 f3: direct index for structure ( uniform 3-component vector of float) +0:33 '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:33 Constant: +0:33 2 (const uint) +0:34 Function Definition: Fn_R_I3D(vi3; ( temp 3-component vector of int) +0:34 Function Parameters: +0:34 'p' ( out 3-component vector of int) +0:? Sequence +0:34 move second child to first child ( temp 3-component vector of int) +0:34 'p' ( out 3-component vector of int) +0:34 Convert double to int ( temp 3-component vector of int) +0:34 d3: direct index for structure ( uniform 3-component vector of double) +0:34 '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:34 Constant: +0:34 4 (const uint) +0:34 Branch: Return with expression +0:34 Convert double to int ( temp 3-component vector of int) +0:34 d3: direct index for structure ( uniform 3-component vector of double) +0:34 '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:34 Constant: +0:34 4 (const uint) +0:36 Function Definition: Fn_R_U3I(vu3; ( temp 3-component vector of uint) +0:36 Function Parameters: +0:36 'p' ( out 3-component vector of uint) +0:? Sequence +0:36 move second child to first child ( temp 3-component vector of uint) +0:36 'p' ( out 3-component vector of uint) +0:36 Convert int to uint ( temp 3-component vector of uint) +0:36 i3: direct index for structure ( uniform 3-component vector of int) +0:36 '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:36 Constant: +0:36 0 (const uint) +0:36 Branch: Return with expression +0:36 Convert int to uint ( temp 3-component vector of uint) +0:36 i3: direct index for structure ( uniform 3-component vector of int) +0:36 '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:36 Constant: +0:36 0 (const uint) +0:37 Function Definition: Fn_R_U3F(vu3; ( temp 3-component vector of uint) +0:37 Function Parameters: +0:37 'p' ( out 3-component vector of uint) +0:? Sequence +0:37 move second child to first child ( temp 3-component vector of uint) +0:37 'p' ( out 3-component vector of uint) +0:37 Convert float to uint ( temp 3-component vector of uint) +0:37 f3: direct index for structure ( uniform 3-component vector of float) +0:37 '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:37 Constant: +0:37 2 (const uint) +0:37 Branch: Return with expression +0:37 Convert float to uint ( temp 3-component vector of uint) +0:37 f3: direct index for structure ( uniform 3-component vector of float) +0:37 '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:37 Constant: +0:37 2 (const uint) +0:38 Function Definition: Fn_R_U3B(vu3; ( temp 3-component vector of uint) +0:38 Function Parameters: +0:38 'p' ( out 3-component vector of uint) +0:? Sequence +0:38 move second child to first child ( temp 3-component vector of uint) +0:38 'p' ( out 3-component vector of uint) +0:38 Convert bool to uint ( temp 3-component vector of uint) +0:38 b3: direct index for structure ( uniform 3-component vector of bool) +0:38 '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:38 Constant: +0:38 1 (const uint) +0:38 Branch: Return with expression +0:38 Convert bool to uint ( temp 3-component vector of uint) +0:38 b3: direct index for structure ( uniform 3-component vector of bool) +0:38 '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:38 Constant: +0:38 1 (const uint) +0:39 Function Definition: Fn_R_U3D(vu3; ( temp 3-component vector of uint) +0:39 Function Parameters: +0:39 'p' ( out 3-component vector of uint) +0:? Sequence +0:39 move second child to first child ( temp 3-component vector of uint) +0:39 'p' ( out 3-component vector of uint) +0:39 Convert double to uint ( temp 3-component vector of uint) +0:39 d3: direct index for structure ( uniform 3-component vector of double) +0:39 '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:39 Constant: +0:39 4 (const uint) +0:39 Branch: Return with expression +0:39 Convert double to uint ( temp 3-component vector of uint) +0:39 d3: direct index for structure ( uniform 3-component vector of double) +0:39 '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:39 Constant: +0:39 4 (const uint) +0:41 Function Definition: Fn_R_B3I(vb3; ( temp 3-component vector of bool) +0:41 Function Parameters: +0:41 'p' ( out 3-component vector of bool) +0:? Sequence +0:41 move second child to first child ( temp 3-component vector of bool) +0:41 'p' ( out 3-component vector of bool) +0:41 Convert int to bool ( temp 3-component vector of bool) +0:41 i3: direct index for structure ( uniform 3-component vector of int) +0:41 '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:41 Constant: +0:41 0 (const uint) +0:41 Branch: Return with expression +0:41 Convert int to bool ( temp 3-component vector of bool) +0:41 i3: direct index for structure ( uniform 3-component vector of int) +0:41 '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:41 Constant: +0:41 0 (const uint) +0:42 Function Definition: Fn_R_B3U(vb3; ( temp 3-component vector of bool) +0:42 Function Parameters: +0:42 'p' ( out 3-component vector of bool) +0:? Sequence +0:42 move second child to first child ( temp 3-component vector of bool) +0:42 'p' ( out 3-component vector of bool) +0:42 Convert uint to bool ( temp 3-component vector of bool) +0:42 u3: direct index for structure ( uniform 3-component vector of uint) +0:42 '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:42 Constant: +0:42 3 (const uint) +0:42 Branch: Return with expression +0:42 Convert uint to bool ( temp 3-component vector of bool) +0:42 u3: direct index for structure ( uniform 3-component vector of uint) +0:42 '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:42 Constant: +0:42 3 (const uint) +0:43 Function Definition: Fn_R_B3F(vb3; ( temp 3-component vector of bool) +0:43 Function Parameters: +0:43 'p' ( out 3-component vector of bool) +0:? Sequence +0:43 move second child to first child ( temp 3-component vector of bool) +0:43 'p' ( out 3-component vector of bool) +0:43 Convert float to bool ( temp 3-component vector of bool) +0:43 f3: direct index for structure ( uniform 3-component vector of float) +0:43 '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:43 Constant: +0:43 2 (const uint) +0:43 Branch: Return with expression +0:43 Convert float to bool ( temp 3-component vector of bool) +0:43 f3: direct index for structure ( uniform 3-component vector of float) +0:43 '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:43 Constant: +0:43 2 (const uint) +0:44 Function Definition: Fn_R_B3D(vb3; ( temp 3-component vector of bool) +0:44 Function Parameters: +0:44 'p' ( out 3-component vector of bool) +0:? Sequence +0:44 move second child to first child ( temp 3-component vector of bool) +0:44 'p' ( out 3-component vector of bool) +0:44 Convert double to bool ( temp 3-component vector of bool) +0:44 d3: direct index for structure ( uniform 3-component vector of double) +0:44 '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:44 Constant: +0:44 4 (const uint) +0:44 Branch: Return with expression +0:44 Convert double to bool ( temp 3-component vector of bool) +0:44 d3: direct index for structure ( uniform 3-component vector of double) +0:44 '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:44 Constant: +0:44 4 (const uint) +0:46 Function Definition: Fn_R_D3I(vd3; ( temp 3-component vector of double) +0:46 Function Parameters: +0:46 'p' ( out 3-component vector of double) +0:? Sequence +0:46 move second child to first child ( temp 3-component vector of double) +0:46 'p' ( out 3-component vector of double) +0:46 Convert int to double ( temp 3-component vector of double) +0:46 i3: direct index for structure ( uniform 3-component vector of int) +0:46 '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:46 Constant: +0:46 0 (const uint) +0:46 Branch: Return with expression +0:46 Convert int to double ( temp 3-component vector of double) +0:46 i3: direct index for structure ( uniform 3-component vector of int) +0:46 '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:46 Constant: +0:46 0 (const uint) +0:47 Function Definition: Fn_R_D3U(vd3; ( temp 3-component vector of double) +0:47 Function Parameters: +0:47 'p' ( out 3-component vector of double) +0:? Sequence +0:47 move second child to first child ( temp 3-component vector of double) +0:47 'p' ( out 3-component vector of double) +0:47 Convert uint to double ( temp 3-component vector of double) +0:47 u3: direct index for structure ( uniform 3-component vector of uint) +0:47 '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:47 Constant: +0:47 3 (const uint) +0:47 Branch: Return with expression +0:47 Convert uint to double ( temp 3-component vector of double) +0:47 u3: direct index for structure ( uniform 3-component vector of uint) +0:47 '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:47 Constant: +0:47 3 (const uint) +0:48 Function Definition: Fn_R_D3B(vd3; ( temp 3-component vector of double) +0:48 Function Parameters: +0:48 'p' ( out 3-component vector of double) +0:? Sequence +0:48 move second child to first child ( temp 3-component vector of double) +0:48 'p' ( out 3-component vector of double) +0:48 Convert bool to double ( temp 3-component vector of double) +0:48 b3: direct index for structure ( uniform 3-component vector of bool) +0:48 '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:48 Constant: +0:48 1 (const uint) +0:48 Branch: Return with expression +0:48 Convert bool to double ( temp 3-component vector of double) +0:48 b3: direct index for structure ( uniform 3-component vector of bool) +0:48 '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:48 Constant: +0:48 1 (const uint) +0:49 Function Definition: Fn_R_D3F(vd3; ( temp 3-component vector of double) +0:49 Function Parameters: +0:49 'p' ( out 3-component vector of double) +0:? Sequence +0:49 move second child to first child ( temp 3-component vector of double) +0:49 'p' ( out 3-component vector of double) +0:49 Convert float to double ( temp 3-component vector of double) +0:49 f3: direct index for structure ( uniform 3-component vector of float) +0:49 '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:49 Constant: +0:49 2 (const uint) +0:49 Branch: Return with expression +0:49 Convert float to double ( temp 3-component vector of double) +0:49 f3: direct index for structure ( uniform 3-component vector of float) +0:49 '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:49 Constant: +0:49 2 (const uint) +0:52 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color}) +0:52 Function Parameters: +0:? Sequence +0:54 Sequence +0:54 move second child to first child ( temp 3-component vector of float) +0:54 'r00' ( temp 3-component vector of float) +0:54 Convert int to float ( temp 3-component vector of float) +0:54 i3: direct index for structure ( uniform 3-component vector of int) +0:54 '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:54 Constant: +0:54 0 (const uint) +0:55 Sequence +0:55 move second child to first child ( temp 3-component vector of float) +0:55 'r01' ( temp 3-component vector of float) +0:55 Convert bool to float ( temp 3-component vector of float) +0:55 b3: direct index for structure ( uniform 3-component vector of bool) +0:55 '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:55 Constant: +0:55 1 (const uint) +0:56 Sequence +0:56 move second child to first child ( temp 3-component vector of float) +0:56 'r02' ( temp 3-component vector of float) +0:56 Convert uint to float ( temp 3-component vector of float) +0:56 u3: direct index for structure ( uniform 3-component vector of uint) +0:56 '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:56 Constant: +0:56 3 (const uint) +0:57 Sequence +0:57 move second child to first child ( temp 3-component vector of float) +0:57 'r03' ( temp 3-component vector of float) +0:57 Convert double to float ( temp 3-component vector of float) +0:57 d3: direct index for structure ( uniform 3-component vector of double) +0:57 '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:57 Constant: +0:57 4 (const uint) +0:59 Sequence +0:59 move second child to first child ( temp 3-component vector of int) +0:59 'r10' ( temp 3-component vector of int) +0:59 Convert bool to int ( temp 3-component vector of int) +0:59 b3: direct index for structure ( uniform 3-component vector of bool) +0:59 '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:59 Constant: +0:59 1 (const uint) +0:60 Sequence +0:60 move second child to first child ( temp 3-component vector of int) +0:60 'r11' ( temp 3-component vector of int) +0:60 Convert uint to int ( temp 3-component vector of int) +0:60 u3: direct index for structure ( uniform 3-component vector of uint) +0:60 '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:60 Constant: +0:60 3 (const uint) +0:61 Sequence +0:61 move second child to first child ( temp 3-component vector of int) +0:61 'r12' ( temp 3-component vector of int) +0:61 Convert float to int ( temp 3-component vector of int) +0:61 f3: direct index for structure ( uniform 3-component vector of float) +0:61 '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:61 Constant: +0:61 2 (const uint) +0:62 Sequence +0:62 move second child to first child ( temp 3-component vector of int) +0:62 'r13' ( temp 3-component vector of int) +0:62 Convert double to int ( temp 3-component vector of int) +0:62 d3: direct index for structure ( uniform 3-component vector of double) +0:62 '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:62 Constant: +0:62 4 (const uint) +0:64 Sequence +0:64 move second child to first child ( temp 3-component vector of uint) +0:64 'r20' ( temp 3-component vector of uint) +0:64 Convert bool to uint ( temp 3-component vector of uint) +0:64 b3: direct index for structure ( uniform 3-component vector of bool) +0:64 '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:64 Constant: +0:64 1 (const uint) +0:65 Sequence +0:65 move second child to first child ( temp 3-component vector of uint) +0:65 'r21' ( temp 3-component vector of uint) +0:65 Convert int to uint ( temp 3-component vector of uint) +0:65 i3: direct index for structure ( uniform 3-component vector of int) +0:65 '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:65 Constant: +0:65 0 (const uint) +0:66 Sequence +0:66 move second child to first child ( temp 3-component vector of uint) +0:66 'r22' ( temp 3-component vector of uint) +0:66 Convert float to uint ( temp 3-component vector of uint) +0:66 f3: direct index for structure ( uniform 3-component vector of float) +0:66 '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:66 Constant: +0:66 2 (const uint) +0:67 Sequence +0:67 move second child to first child ( temp 3-component vector of uint) +0:67 'r23' ( temp 3-component vector of uint) +0:67 Convert double to uint ( temp 3-component vector of uint) +0:67 d3: direct index for structure ( uniform 3-component vector of double) +0:67 '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:67 Constant: +0:67 4 (const uint) +0:69 Sequence +0:69 move second child to first child ( temp 3-component vector of bool) +0:69 'r30' ( temp 3-component vector of bool) +0:69 Convert int to bool ( temp 3-component vector of bool) +0:69 i3: direct index for structure ( uniform 3-component vector of int) +0:69 '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:69 Constant: +0:69 0 (const uint) +0:70 Sequence +0:70 move second child to first child ( temp 3-component vector of bool) +0:70 'r31' ( temp 3-component vector of bool) +0:70 Convert uint to bool ( temp 3-component vector of bool) +0:70 u3: direct index for structure ( uniform 3-component vector of uint) +0:70 '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:70 Constant: +0:70 3 (const uint) +0:71 Sequence +0:71 move second child to first child ( temp 3-component vector of bool) +0:71 'r32' ( temp 3-component vector of bool) +0:71 Convert float to bool ( temp 3-component vector of bool) +0:71 f3: direct index for structure ( uniform 3-component vector of float) +0:71 '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:71 Constant: +0:71 2 (const uint) +0:72 Sequence +0:72 move second child to first child ( temp 3-component vector of bool) +0:72 'r33' ( temp 3-component vector of bool) +0:72 Convert double to bool ( temp 3-component vector of bool) +0:72 d3: direct index for structure ( uniform 3-component vector of double) +0:72 '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:72 Constant: +0:72 4 (const uint) +0:74 Sequence +0:74 move second child to first child ( temp 3-component vector of double) +0:74 'r40' ( temp 3-component vector of double) +0:74 Convert int to double ( temp 3-component vector of double) +0:74 i3: direct index for structure ( uniform 3-component vector of int) +0:74 '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:74 Constant: +0:74 0 (const uint) +0:75 Sequence +0:75 move second child to first child ( temp 3-component vector of double) +0:75 'r41' ( temp 3-component vector of double) +0:75 Convert uint to double ( temp 3-component vector of double) +0:75 u3: direct index for structure ( uniform 3-component vector of uint) +0:75 '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:75 Constant: +0:75 3 (const uint) +0:76 Sequence +0:76 move second child to first child ( temp 3-component vector of double) +0:76 'r42' ( temp 3-component vector of double) +0:76 Convert float to double ( temp 3-component vector of double) +0:76 f3: direct index for structure ( uniform 3-component vector of float) +0:76 '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:76 Constant: +0:76 2 (const uint) +0:77 Sequence +0:77 move second child to first child ( temp 3-component vector of double) +0:77 'r43' ( temp 3-component vector of double) +0:77 Convert bool to double ( temp 3-component vector of double) +0:77 b3: direct index for structure ( uniform 3-component vector of bool) +0:77 '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:77 Constant: +0:77 1 (const uint) +0:80 multiply second child into first child ( temp 3-component vector of float) +0:80 'r00' ( temp 3-component vector of float) +0:80 Convert int to float ( temp 3-component vector of float) +0:80 i3: direct index for structure ( uniform 3-component vector of int) +0:80 '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:80 Constant: +0:80 0 (const uint) +0:81 multiply second child into first child ( temp 3-component vector of float) +0:81 'r01' ( temp 3-component vector of float) +0:81 Convert bool to float ( temp 3-component vector of float) +0:81 b3: direct index for structure ( uniform 3-component vector of bool) +0:81 '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:81 Constant: +0:81 1 (const uint) +0:82 multiply second child into first child ( temp 3-component vector of float) +0:82 'r02' ( temp 3-component vector of float) +0:82 Convert uint to float ( temp 3-component vector of float) +0:82 u3: direct index for structure ( uniform 3-component vector of uint) +0:82 '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:82 Constant: +0:82 3 (const uint) +0:83 multiply second child into first child ( temp 3-component vector of float) +0:83 'r03' ( temp 3-component vector of float) +0:83 Convert double to float ( temp 3-component vector of float) +0:83 d3: direct index for structure ( uniform 3-component vector of double) +0:83 '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:83 Constant: +0:83 4 (const uint) +0:85 multiply second child into first child ( temp 3-component vector of int) +0:85 'r10' ( temp 3-component vector of int) +0:85 Convert bool to int ( temp 3-component vector of int) +0:85 b3: direct index for structure ( uniform 3-component vector of bool) +0:85 '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:85 Constant: +0:85 1 (const uint) +0:86 multiply second child into first child ( temp 3-component vector of int) +0:86 'r11' ( temp 3-component vector of int) +0:86 Convert uint to int ( temp 3-component vector of int) +0:86 u3: direct index for structure ( uniform 3-component vector of uint) +0:86 '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:86 Constant: +0:86 3 (const uint) +0:87 multiply second child into first child ( temp 3-component vector of int) +0:87 'r12' ( temp 3-component vector of int) +0:87 Convert float to int ( temp 3-component vector of int) +0:87 f3: direct index for structure ( uniform 3-component vector of float) +0:87 '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:87 Constant: +0:87 2 (const uint) +0:88 multiply second child into first child ( temp 3-component vector of int) +0:88 'r13' ( temp 3-component vector of int) +0:88 Convert double to int ( temp 3-component vector of int) +0:88 d3: direct index for structure ( uniform 3-component vector of double) +0:88 '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:88 Constant: +0:88 4 (const uint) +0:90 multiply second child into first child ( temp 3-component vector of uint) +0:90 'r20' ( temp 3-component vector of uint) +0:90 Convert bool to uint ( temp 3-component vector of uint) +0:90 b3: direct index for structure ( uniform 3-component vector of bool) +0:90 '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:90 Constant: +0:90 1 (const uint) +0:91 multiply second child into first child ( temp 3-component vector of uint) +0:91 'r21' ( temp 3-component vector of uint) +0:91 Convert int to uint ( temp 3-component vector of uint) +0:91 i3: direct index for structure ( uniform 3-component vector of int) +0:91 '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:91 Constant: +0:91 0 (const uint) +0:92 multiply second child into first child ( temp 3-component vector of uint) +0:92 'r22' ( temp 3-component vector of uint) +0:92 Convert float to uint ( temp 3-component vector of uint) +0:92 f3: direct index for structure ( uniform 3-component vector of float) +0:92 '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:92 Constant: +0:92 2 (const uint) +0:93 multiply second child into first child ( temp 3-component vector of uint) +0:93 'r23' ( temp 3-component vector of uint) +0:93 Convert double to uint ( temp 3-component vector of uint) +0:93 d3: direct index for structure ( uniform 3-component vector of double) +0:93 '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:93 Constant: +0:93 4 (const uint) +0:97 multiply second child into first child ( temp 3-component vector of double) +0:97 'r40' ( temp 3-component vector of double) +0:97 Convert int to double ( temp 3-component vector of double) +0:97 i3: direct index for structure ( uniform 3-component vector of int) +0:97 '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:97 Constant: +0:97 0 (const uint) +0:98 multiply second child into first child ( temp 3-component vector of double) +0:98 'r41' ( temp 3-component vector of double) +0:98 Convert uint to double ( temp 3-component vector of double) +0:98 u3: direct index for structure ( uniform 3-component vector of uint) +0:98 '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:98 Constant: +0:98 3 (const uint) +0:99 multiply second child into first child ( temp 3-component vector of double) +0:99 'r42' ( temp 3-component vector of double) +0:99 Convert float to double ( temp 3-component vector of double) +0:99 f3: direct index for structure ( uniform 3-component vector of float) +0:99 '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:99 Constant: +0:99 2 (const uint) +0:100 multiply second child into first child ( temp 3-component vector of double) +0:100 'r43' ( temp 3-component vector of double) +0:100 Convert bool to double ( temp 3-component vector of double) +0:100 b3: direct index for structure ( uniform 3-component vector of bool) +0:100 '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:100 Constant: +0:100 1 (const uint) +0:103 vector scale second child into first child ( temp 3-component vector of float) +0:103 'r00' ( temp 3-component vector of float) +0:103 Convert int to float ( temp float) +0:103 is: direct index for structure ( uniform int) +0:103 '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:103 Constant: +0:103 5 (const uint) +0:104 vector scale second child into first child ( temp 3-component vector of float) +0:104 'r01' ( temp 3-component vector of float) +0:104 Convert bool to float ( temp float) +0:104 bs: direct index for structure ( uniform bool) +0:104 '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:104 Constant: +0:104 6 (const uint) +0:105 vector scale second child into first child ( temp 3-component vector of float) +0:105 'r02' ( temp 3-component vector of float) +0:105 Convert uint to float ( temp float) +0:105 us: direct index for structure ( uniform uint) +0:105 '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:105 Constant: +0:105 8 (const uint) +0:106 vector scale second child into first child ( temp 3-component vector of float) +0:106 'r03' ( temp 3-component vector of float) +0:106 Convert double to float ( temp float) +0:106 ds: direct index for structure ( uniform double) +0:106 '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:106 Constant: +0:106 9 (const uint) +0:108 vector scale second child into first child ( temp 3-component vector of int) +0:108 'r10' ( temp 3-component vector of int) +0:108 Convert bool to int ( temp int) +0:108 bs: direct index for structure ( uniform bool) +0:108 '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:108 Constant: +0:108 6 (const uint) +0:109 vector scale second child into first child ( temp 3-component vector of int) +0:109 'r11' ( temp 3-component vector of int) +0:109 Convert uint to int ( temp int) +0:109 us: direct index for structure ( uniform uint) +0:109 '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:109 Constant: +0:109 8 (const uint) +0:110 vector scale second child into first child ( temp 3-component vector of int) +0:110 'r12' ( temp 3-component vector of int) +0:110 Convert float to int ( temp int) +0:110 fs: direct index for structure ( uniform float) +0:110 '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:110 Constant: +0:110 7 (const uint) +0:111 vector scale second child into first child ( temp 3-component vector of int) +0:111 'r13' ( temp 3-component vector of int) +0:111 Convert double to int ( temp int) +0:111 ds: direct index for structure ( uniform double) +0:111 '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:111 Constant: +0:111 9 (const uint) +0:113 vector scale second child into first child ( temp 3-component vector of uint) +0:113 'r20' ( temp 3-component vector of uint) +0:113 Convert bool to uint ( temp uint) +0:113 bs: direct index for structure ( uniform bool) +0:113 '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:113 Constant: +0:113 6 (const uint) +0:114 vector scale second child into first child ( temp 3-component vector of uint) +0:114 'r21' ( temp 3-component vector of uint) +0:114 Convert int to uint ( temp uint) +0:114 is: direct index for structure ( uniform int) +0:114 '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:114 Constant: +0:114 5 (const uint) +0:115 vector scale second child into first child ( temp 3-component vector of uint) +0:115 'r22' ( temp 3-component vector of uint) +0:115 Convert float to uint ( temp uint) +0:115 fs: direct index for structure ( uniform float) +0:115 '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:115 Constant: +0:115 7 (const uint) +0:116 vector scale second child into first child ( temp 3-component vector of uint) +0:116 'r23' ( temp 3-component vector of uint) +0:116 Convert double to uint ( temp uint) +0:116 ds: direct index for structure ( uniform double) +0:116 '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:116 Constant: +0:116 9 (const uint) +0:120 vector scale second child into first child ( temp 3-component vector of double) +0:120 'r40' ( temp 3-component vector of double) +0:120 Convert int to double ( temp double) +0:120 is: direct index for structure ( uniform int) +0:120 '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:120 Constant: +0:120 5 (const uint) +0:121 vector scale second child into first child ( temp 3-component vector of double) +0:121 'r41' ( temp 3-component vector of double) +0:121 Convert uint to double ( temp double) +0:121 us: direct index for structure ( uniform uint) +0:121 '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:121 Constant: +0:121 8 (const uint) +0:122 vector scale second child into first child ( temp 3-component vector of double) +0:122 'r42' ( temp 3-component vector of double) +0:122 Convert float to double ( temp double) +0:122 fs: direct index for structure ( uniform float) +0:122 '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:122 Constant: +0:122 7 (const uint) +0:123 vector scale second child into first child ( temp 3-component vector of double) +0:123 'r43' ( temp 3-component vector of double) +0:123 Convert bool to double ( temp double) +0:123 bs: direct index for structure ( uniform bool) +0:123 '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:123 Constant: +0:123 6 (const uint) +0:193 Sequence +0:193 move second child to first child ( temp int) +0:193 'c1' ( temp int) +0:193 Constant: +0:193 3 (const int) +0:194 Sequence +0:194 move second child to first child ( temp int) +0:194 'c2' ( temp int) +0:194 Constant: +0:194 3 (const int) +0:196 Sequence +0:196 move second child to first child ( temp 4-component vector of float) +0:196 'outval' ( temp 4-component vector of float) +0:? Construct vec4 ( temp 4-component vector of float) +0:196 Constant: +0:196 3.600000 +0:196 Constant: +0:196 3.600000 +0:196 Convert int to float ( temp float) +0:196 'c1' ( temp int) +0:196 Convert int to float ( temp float) +0:196 'c2' ( temp int) +0:199 move second child to first child ( temp 4-component vector of float) +0:199 Color: direct index for structure ( temp 4-component vector of float) +0:199 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:199 Constant: +0:199 0 (const int) +0:199 'outval' ( temp 4-component vector of float) +0:200 Branch: Return with expression +0:200 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:52 Function Definition: main( ( temp void) +0:52 Function Parameters: +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: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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 596 + + Capability Shader + Capability Float64 + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 593 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 11 "Fn_F3(vf3;" + Name 10 "x" + Name 18 "Fn_I3(vi3;" + Name 17 "x" + Name 25 "Fn_U3(vu3;" + Name 24 "x" + Name 32 "Fn_B3(vb3;" + Name 31 "x" + Name 39 "Fn_D3(vd3;" + Name 38 "x" + Name 43 "Fn_R_F3I(vf3;" + Name 42 "p" + Name 46 "Fn_R_F3U(vf3;" + Name 45 "p" + Name 49 "Fn_R_F3B(vf3;" + Name 48 "p" + Name 52 "Fn_R_F3D(vf3;" + Name 51 "p" + Name 56 "Fn_R_I3U(vi3;" + Name 55 "p" + Name 59 "Fn_R_I3B(vi3;" + Name 58 "p" + Name 62 "Fn_R_I3F(vi3;" + Name 61 "p" + Name 65 "Fn_R_I3D(vi3;" + Name 64 "p" + Name 69 "Fn_R_U3I(vu3;" + Name 68 "p" + Name 72 "Fn_R_U3F(vu3;" + Name 71 "p" + Name 75 "Fn_R_U3B(vu3;" + Name 74 "p" + Name 78 "Fn_R_U3D(vu3;" + Name 77 "p" + Name 82 "Fn_R_B3I(vb3;" + Name 81 "p" + Name 85 "Fn_R_B3U(vb3;" + Name 84 "p" + Name 88 "Fn_R_B3F(vb3;" + Name 87 "p" + Name 91 "Fn_R_B3D(vb3;" + Name 90 "p" + Name 95 "Fn_R_D3I(vd3;" + Name 94 "p" + Name 98 "Fn_R_D3U(vd3;" + Name 97 "p" + Name 101 "Fn_R_D3B(vd3;" + Name 100 "p" + Name 104 "Fn_R_D3F(vd3;" + Name 103 "p" + Name 107 "PS_OUTPUT" + MemberName 107(PS_OUTPUT) 0 "Color" + Name 109 "@main(" + Name 111 "$Global" + MemberName 111($Global) 0 "i3" + MemberName 111($Global) 1 "b3" + MemberName 111($Global) 2 "f3" + MemberName 111($Global) 3 "u3" + MemberName 111($Global) 4 "d3" + MemberName 111($Global) 5 "is" + MemberName 111($Global) 6 "bs" + MemberName 111($Global) 7 "fs" + MemberName 111($Global) 8 "us" + MemberName 111($Global) 9 "ds" + Name 113 "" + Name 305 "r00" + Name 309 "r01" + Name 314 "r02" + Name 318 "r03" + Name 322 "r10" + Name 327 "r11" + Name 331 "r12" + Name 335 "r13" + Name 339 "r20" + Name 344 "r21" + Name 348 "r22" + Name 352 "r23" + Name 356 "r30" + Name 360 "r31" + Name 364 "r32" + Name 368 "r33" + Name 372 "r40" + Name 376 "r41" + Name 380 "r42" + Name 384 "r43" + Name 575 "c1" + Name 576 "c2" + Name 578 "outval" + Name 586 "psout" + Name 593 "Color" + MemberDecorate 111($Global) 0 Offset 0 + MemberDecorate 111($Global) 1 Offset 16 + MemberDecorate 111($Global) 2 Offset 32 + MemberDecorate 111($Global) 3 Offset 48 + MemberDecorate 111($Global) 4 Offset 64 + MemberDecorate 111($Global) 5 Offset 88 + MemberDecorate 111($Global) 6 Offset 92 + MemberDecorate 111($Global) 7 Offset 96 + MemberDecorate 111($Global) 8 Offset 100 + MemberDecorate 111($Global) 9 Offset 104 + Decorate 111($Global) Block + Decorate 113 DescriptorSet 0 + Decorate 593(Color) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 3 + 8: TypePointer Function 7(fvec3) + 9: TypeFunction 2 8(ptr) + 13: TypeInt 32 1 + 14: TypeVector 13(int) 3 + 15: TypePointer Function 14(ivec3) + 16: TypeFunction 2 15(ptr) + 20: TypeInt 32 0 + 21: TypeVector 20(int) 3 + 22: TypePointer Function 21(ivec3) + 23: TypeFunction 2 22(ptr) + 27: TypeBool + 28: TypeVector 27(bool) 3 + 29: TypePointer Function 28(bvec3) + 30: TypeFunction 2 29(ptr) + 34: TypeFloat 64 + 35: TypeVector 34(float) 3 + 36: TypePointer Function 35(fvec3) + 37: TypeFunction 2 36(ptr) + 41: TypeFunction 7(fvec3) 8(ptr) + 54: TypeFunction 14(ivec3) 15(ptr) + 67: TypeFunction 21(ivec3) 22(ptr) + 80: TypeFunction 28(bvec3) 29(ptr) + 93: TypeFunction 35(fvec3) 36(ptr) + 106: TypeVector 6(float) 4 + 107(PS_OUTPUT): TypeStruct 106(fvec4) + 108: TypeFunction 107(PS_OUTPUT) + 111($Global): TypeStruct 14(ivec3) 21(ivec3) 7(fvec3) 21(ivec3) 35(fvec3) 13(int) 20(int) 6(float) 20(int) 34(float) + 112: TypePointer Uniform 111($Global) + 113: 112(ptr) Variable Uniform + 114: 13(int) Constant 0 + 115: TypePointer Uniform 14(ivec3) + 124: 13(int) Constant 3 + 125: TypePointer Uniform 21(ivec3) + 134: 13(int) Constant 1 + 137: 20(int) Constant 0 + 138: 21(ivec3) ConstantComposite 137 137 137 + 140: 6(float) Constant 0 + 141: 6(float) Constant 1065353216 + 142: 7(fvec3) ConstantComposite 140 140 140 + 143: 7(fvec3) ConstantComposite 141 141 141 + 151: 13(int) Constant 4 + 152: TypePointer Uniform 35(fvec3) + 172: 14(ivec3) ConstantComposite 114 114 114 + 173: 14(ivec3) ConstantComposite 134 134 134 + 181: 13(int) Constant 2 + 182: TypePointer Uniform 7(fvec3) + 218: 20(int) Constant 1 + 219: 21(ivec3) ConstantComposite 218 218 218 + 261: 34(float) Constant 0 0 + 262: 35(fvec3) ConstantComposite 261 261 261 + 288: 34(float) Constant 0 1072693248 + 289: 35(fvec3) ConstantComposite 288 288 288 + 473: 13(int) Constant 5 + 474: TypePointer Uniform 13(int) + 480: 13(int) Constant 6 + 481: TypePointer Uniform 20(int) + 488: 13(int) Constant 8 + 494: 13(int) Constant 9 + 495: TypePointer Uniform 34(float) + 514: 13(int) Constant 7 + 515: TypePointer Uniform 6(float) + 574: TypePointer Function 13(int) + 577: TypePointer Function 106(fvec4) + 579: 6(float) Constant 1080452710 + 585: TypePointer Function 107(PS_OUTPUT) + 592: TypePointer Output 106(fvec4) + 593(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 + Return + FunctionEnd + 11(Fn_F3(vf3;): 2 Function None 9 + 10(x): 8(ptr) FunctionParameter + 12: Label + Return + FunctionEnd + 18(Fn_I3(vi3;): 2 Function None 16 + 17(x): 15(ptr) FunctionParameter + 19: Label + Return + FunctionEnd + 25(Fn_U3(vu3;): 2 Function None 23 + 24(x): 22(ptr) FunctionParameter + 26: Label + Return + FunctionEnd + 32(Fn_B3(vb3;): 2 Function None 30 + 31(x): 29(ptr) FunctionParameter + 33: Label + Return + FunctionEnd + 39(Fn_D3(vd3;): 2 Function None 37 + 38(x): 36(ptr) FunctionParameter + 40: Label + Return + FunctionEnd +43(Fn_R_F3I(vf3;): 7(fvec3) Function None 41 + 42(p): 8(ptr) FunctionParameter + 44: Label + 116: 115(ptr) AccessChain 113 114 + 117: 14(ivec3) Load 116 + 118: 7(fvec3) ConvertSToF 117 + Store 42(p) 118 + 119: 115(ptr) AccessChain 113 114 + 120: 14(ivec3) Load 119 + 121: 7(fvec3) ConvertSToF 120 + ReturnValue 121 + FunctionEnd +46(Fn_R_F3U(vf3;): 7(fvec3) Function None 41 + 45(p): 8(ptr) FunctionParameter + 47: Label + 126: 125(ptr) AccessChain 113 124 + 127: 21(ivec3) Load 126 + 128: 7(fvec3) ConvertUToF 127 + Store 45(p) 128 + 129: 125(ptr) AccessChain 113 124 + 130: 21(ivec3) Load 129 + 131: 7(fvec3) ConvertUToF 130 + ReturnValue 131 + FunctionEnd +49(Fn_R_F3B(vf3;): 7(fvec3) Function None 41 + 48(p): 8(ptr) FunctionParameter + 50: Label + 135: 125(ptr) AccessChain 113 134 + 136: 21(ivec3) Load 135 + 139: 28(bvec3) INotEqual 136 138 + 144: 7(fvec3) Select 139 143 142 + Store 48(p) 144 + 145: 125(ptr) AccessChain 113 134 + 146: 21(ivec3) Load 145 + 147: 28(bvec3) INotEqual 146 138 + 148: 7(fvec3) Select 147 143 142 + ReturnValue 148 + FunctionEnd +52(Fn_R_F3D(vf3;): 7(fvec3) Function None 41 + 51(p): 8(ptr) FunctionParameter + 53: Label + 153: 152(ptr) AccessChain 113 151 + 154: 35(fvec3) Load 153 + 155: 7(fvec3) FConvert 154 + Store 51(p) 155 + 156: 152(ptr) AccessChain 113 151 + 157: 35(fvec3) Load 156 + 158: 7(fvec3) FConvert 157 + ReturnValue 158 + FunctionEnd +56(Fn_R_I3U(vi3;): 14(ivec3) Function None 54 + 55(p): 15(ptr) FunctionParameter + 57: Label + 161: 125(ptr) AccessChain 113 124 + 162: 21(ivec3) Load 161 + 163: 14(ivec3) Bitcast 162 + Store 55(p) 163 + 164: 125(ptr) AccessChain 113 124 + 165: 21(ivec3) Load 164 + 166: 14(ivec3) Bitcast 165 + ReturnValue 166 + FunctionEnd +59(Fn_R_I3B(vi3;): 14(ivec3) Function None 54 + 58(p): 15(ptr) FunctionParameter + 60: Label + 169: 125(ptr) AccessChain 113 134 + 170: 21(ivec3) Load 169 + 171: 28(bvec3) INotEqual 170 138 + 174: 14(ivec3) Select 171 173 172 + Store 58(p) 174 + 175: 125(ptr) AccessChain 113 134 + 176: 21(ivec3) Load 175 + 177: 28(bvec3) INotEqual 176 138 + 178: 14(ivec3) Select 177 173 172 + ReturnValue 178 + FunctionEnd +62(Fn_R_I3F(vi3;): 14(ivec3) Function None 54 + 61(p): 15(ptr) FunctionParameter + 63: Label + 183: 182(ptr) AccessChain 113 181 + 184: 7(fvec3) Load 183 + 185: 14(ivec3) ConvertFToS 184 + Store 61(p) 185 + 186: 182(ptr) AccessChain 113 181 + 187: 7(fvec3) Load 186 + 188: 14(ivec3) ConvertFToS 187 + ReturnValue 188 + FunctionEnd +65(Fn_R_I3D(vi3;): 14(ivec3) Function None 54 + 64(p): 15(ptr) FunctionParameter + 66: Label + 191: 152(ptr) AccessChain 113 151 + 192: 35(fvec3) Load 191 + 193: 14(ivec3) ConvertFToS 192 + Store 64(p) 193 + 194: 152(ptr) AccessChain 113 151 + 195: 35(fvec3) Load 194 + 196: 14(ivec3) ConvertFToS 195 + ReturnValue 196 + FunctionEnd +69(Fn_R_U3I(vu3;): 21(ivec3) Function None 67 + 68(p): 22(ptr) FunctionParameter + 70: Label + 199: 115(ptr) AccessChain 113 114 + 200: 14(ivec3) Load 199 + 201: 21(ivec3) Bitcast 200 + Store 68(p) 201 + 202: 115(ptr) AccessChain 113 114 + 203: 14(ivec3) Load 202 + 204: 21(ivec3) Bitcast 203 + ReturnValue 204 + FunctionEnd +72(Fn_R_U3F(vu3;): 21(ivec3) Function None 67 + 71(p): 22(ptr) FunctionParameter + 73: Label + 207: 182(ptr) AccessChain 113 181 + 208: 7(fvec3) Load 207 + 209: 21(ivec3) ConvertFToU 208 + Store 71(p) 209 + 210: 182(ptr) AccessChain 113 181 + 211: 7(fvec3) Load 210 + 212: 21(ivec3) ConvertFToU 211 + ReturnValue 212 + FunctionEnd +75(Fn_R_U3B(vu3;): 21(ivec3) Function None 67 + 74(p): 22(ptr) FunctionParameter + 76: Label + 215: 125(ptr) AccessChain 113 134 + 216: 21(ivec3) Load 215 + 217: 28(bvec3) INotEqual 216 138 + 220: 21(ivec3) Select 217 219 138 + Store 74(p) 220 + 221: 125(ptr) AccessChain 113 134 + 222: 21(ivec3) Load 221 + 223: 28(bvec3) INotEqual 222 138 + 224: 21(ivec3) Select 223 219 138 + ReturnValue 224 + FunctionEnd +78(Fn_R_U3D(vu3;): 21(ivec3) Function None 67 + 77(p): 22(ptr) FunctionParameter + 79: Label + 227: 152(ptr) AccessChain 113 151 + 228: 35(fvec3) Load 227 + 229: 21(ivec3) ConvertFToU 228 + Store 77(p) 229 + 230: 152(ptr) AccessChain 113 151 + 231: 35(fvec3) Load 230 + 232: 21(ivec3) ConvertFToU 231 + ReturnValue 232 + FunctionEnd +82(Fn_R_B3I(vb3;): 28(bvec3) Function None 80 + 81(p): 29(ptr) FunctionParameter + 83: Label + 235: 115(ptr) AccessChain 113 114 + 236: 14(ivec3) Load 235 + 237: 28(bvec3) INotEqual 236 138 + Store 81(p) 237 + 238: 115(ptr) AccessChain 113 114 + 239: 14(ivec3) Load 238 + 240: 28(bvec3) INotEqual 239 138 + ReturnValue 240 + FunctionEnd +85(Fn_R_B3U(vb3;): 28(bvec3) Function None 80 + 84(p): 29(ptr) FunctionParameter + 86: Label + 243: 125(ptr) AccessChain 113 124 + 244: 21(ivec3) Load 243 + 245: 28(bvec3) INotEqual 244 138 + Store 84(p) 245 + 246: 125(ptr) AccessChain 113 124 + 247: 21(ivec3) Load 246 + 248: 28(bvec3) INotEqual 247 138 + ReturnValue 248 + FunctionEnd +88(Fn_R_B3F(vb3;): 28(bvec3) Function None 80 + 87(p): 29(ptr) FunctionParameter + 89: Label + 251: 182(ptr) AccessChain 113 181 + 252: 7(fvec3) Load 251 + 253: 28(bvec3) FOrdNotEqual 252 142 + Store 87(p) 253 + 254: 182(ptr) AccessChain 113 181 + 255: 7(fvec3) Load 254 + 256: 28(bvec3) FOrdNotEqual 255 142 + ReturnValue 256 + FunctionEnd +91(Fn_R_B3D(vb3;): 28(bvec3) Function None 80 + 90(p): 29(ptr) FunctionParameter + 92: Label + 259: 152(ptr) AccessChain 113 151 + 260: 35(fvec3) Load 259 + 263: 28(bvec3) FOrdNotEqual 260 262 + Store 90(p) 263 + 264: 152(ptr) AccessChain 113 151 + 265: 35(fvec3) Load 264 + 266: 28(bvec3) FOrdNotEqual 265 262 + ReturnValue 266 + FunctionEnd +95(Fn_R_D3I(vd3;): 35(fvec3) Function None 93 + 94(p): 36(ptr) FunctionParameter + 96: Label + 269: 115(ptr) AccessChain 113 114 + 270: 14(ivec3) Load 269 + 271: 35(fvec3) ConvertSToF 270 + Store 94(p) 271 + 272: 115(ptr) AccessChain 113 114 + 273: 14(ivec3) Load 272 + 274: 35(fvec3) ConvertSToF 273 + ReturnValue 274 + FunctionEnd +98(Fn_R_D3U(vd3;): 35(fvec3) Function None 93 + 97(p): 36(ptr) FunctionParameter + 99: Label + 277: 125(ptr) AccessChain 113 124 + 278: 21(ivec3) Load 277 + 279: 35(fvec3) ConvertUToF 278 + Store 97(p) 279 + 280: 125(ptr) AccessChain 113 124 + 281: 21(ivec3) Load 280 + 282: 35(fvec3) ConvertUToF 281 + ReturnValue 282 + FunctionEnd +101(Fn_R_D3B(vd3;): 35(fvec3) Function None 93 + 100(p): 36(ptr) FunctionParameter + 102: Label + 285: 125(ptr) AccessChain 113 134 + 286: 21(ivec3) Load 285 + 287: 28(bvec3) INotEqual 286 138 + 290: 35(fvec3) Select 287 289 262 + Store 100(p) 290 + 291: 125(ptr) AccessChain 113 134 + 292: 21(ivec3) Load 291 + 293: 28(bvec3) INotEqual 292 138 + 294: 35(fvec3) Select 293 289 262 + ReturnValue 294 + FunctionEnd +104(Fn_R_D3F(vd3;): 35(fvec3) Function None 93 + 103(p): 36(ptr) FunctionParameter + 105: Label + 297: 182(ptr) AccessChain 113 181 + 298: 7(fvec3) Load 297 + 299: 35(fvec3) FConvert 298 + Store 103(p) 299 + 300: 182(ptr) AccessChain 113 181 + 301: 7(fvec3) Load 300 + 302: 35(fvec3) FConvert 301 + ReturnValue 302 + FunctionEnd + 109(@main():107(PS_OUTPUT) Function None 108 + 110: Label + 305(r00): 8(ptr) Variable Function + 309(r01): 8(ptr) Variable Function + 314(r02): 8(ptr) Variable Function + 318(r03): 8(ptr) Variable Function + 322(r10): 15(ptr) Variable Function + 327(r11): 15(ptr) Variable Function + 331(r12): 15(ptr) Variable Function + 335(r13): 15(ptr) Variable Function + 339(r20): 22(ptr) Variable Function + 344(r21): 22(ptr) Variable Function + 348(r22): 22(ptr) Variable Function + 352(r23): 22(ptr) Variable Function + 356(r30): 29(ptr) Variable Function + 360(r31): 29(ptr) Variable Function + 364(r32): 29(ptr) Variable Function + 368(r33): 29(ptr) Variable Function + 372(r40): 36(ptr) Variable Function + 376(r41): 36(ptr) Variable Function + 380(r42): 36(ptr) Variable Function + 384(r43): 36(ptr) Variable Function + 575(c1): 574(ptr) Variable Function + 576(c2): 574(ptr) Variable Function + 578(outval): 577(ptr) Variable Function + 586(psout): 585(ptr) Variable Function + 306: 115(ptr) AccessChain 113 114 + 307: 14(ivec3) Load 306 + 308: 7(fvec3) ConvertSToF 307 + Store 305(r00) 308 + 310: 125(ptr) AccessChain 113 134 + 311: 21(ivec3) Load 310 + 312: 28(bvec3) INotEqual 311 138 + 313: 7(fvec3) Select 312 143 142 + Store 309(r01) 313 + 315: 125(ptr) AccessChain 113 124 + 316: 21(ivec3) Load 315 + 317: 7(fvec3) ConvertUToF 316 + Store 314(r02) 317 + 319: 152(ptr) AccessChain 113 151 + 320: 35(fvec3) Load 319 + 321: 7(fvec3) FConvert 320 + Store 318(r03) 321 + 323: 125(ptr) AccessChain 113 134 + 324: 21(ivec3) Load 323 + 325: 28(bvec3) INotEqual 324 138 + 326: 14(ivec3) Select 325 173 172 + Store 322(r10) 326 + 328: 125(ptr) AccessChain 113 124 + 329: 21(ivec3) Load 328 + 330: 14(ivec3) Bitcast 329 + Store 327(r11) 330 + 332: 182(ptr) AccessChain 113 181 + 333: 7(fvec3) Load 332 + 334: 14(ivec3) ConvertFToS 333 + Store 331(r12) 334 + 336: 152(ptr) AccessChain 113 151 + 337: 35(fvec3) Load 336 + 338: 14(ivec3) ConvertFToS 337 + Store 335(r13) 338 + 340: 125(ptr) AccessChain 113 134 + 341: 21(ivec3) Load 340 + 342: 28(bvec3) INotEqual 341 138 + 343: 21(ivec3) Select 342 219 138 + Store 339(r20) 343 + 345: 115(ptr) AccessChain 113 114 + 346: 14(ivec3) Load 345 + 347: 21(ivec3) Bitcast 346 + Store 344(r21) 347 + 349: 182(ptr) AccessChain 113 181 + 350: 7(fvec3) Load 349 + 351: 21(ivec3) ConvertFToU 350 + Store 348(r22) 351 + 353: 152(ptr) AccessChain 113 151 + 354: 35(fvec3) Load 353 + 355: 21(ivec3) ConvertFToU 354 + Store 352(r23) 355 + 357: 115(ptr) AccessChain 113 114 + 358: 14(ivec3) Load 357 + 359: 28(bvec3) INotEqual 358 138 + Store 356(r30) 359 + 361: 125(ptr) AccessChain 113 124 + 362: 21(ivec3) Load 361 + 363: 28(bvec3) INotEqual 362 138 + Store 360(r31) 363 + 365: 182(ptr) AccessChain 113 181 + 366: 7(fvec3) Load 365 + 367: 28(bvec3) FOrdNotEqual 366 142 + Store 364(r32) 367 + 369: 152(ptr) AccessChain 113 151 + 370: 35(fvec3) Load 369 + 371: 28(bvec3) FOrdNotEqual 370 262 + Store 368(r33) 371 + 373: 115(ptr) AccessChain 113 114 + 374: 14(ivec3) Load 373 + 375: 35(fvec3) ConvertSToF 374 + Store 372(r40) 375 + 377: 125(ptr) AccessChain 113 124 + 378: 21(ivec3) Load 377 + 379: 35(fvec3) ConvertUToF 378 + Store 376(r41) 379 + 381: 182(ptr) AccessChain 113 181 + 382: 7(fvec3) Load 381 + 383: 35(fvec3) FConvert 382 + Store 380(r42) 383 + 385: 125(ptr) AccessChain 113 134 + 386: 21(ivec3) Load 385 + 387: 28(bvec3) INotEqual 386 138 + 388: 35(fvec3) Select 387 289 262 + Store 384(r43) 388 + 389: 115(ptr) AccessChain 113 114 + 390: 14(ivec3) Load 389 + 391: 7(fvec3) ConvertSToF 390 + 392: 7(fvec3) Load 305(r00) + 393: 7(fvec3) FMul 392 391 + Store 305(r00) 393 + 394: 125(ptr) AccessChain 113 134 + 395: 21(ivec3) Load 394 + 396: 28(bvec3) INotEqual 395 138 + 397: 7(fvec3) Select 396 143 142 + 398: 7(fvec3) Load 309(r01) + 399: 7(fvec3) FMul 398 397 + Store 309(r01) 399 + 400: 125(ptr) AccessChain 113 124 + 401: 21(ivec3) Load 400 + 402: 7(fvec3) ConvertUToF 401 + 403: 7(fvec3) Load 314(r02) + 404: 7(fvec3) FMul 403 402 + Store 314(r02) 404 + 405: 152(ptr) AccessChain 113 151 + 406: 35(fvec3) Load 405 + 407: 7(fvec3) FConvert 406 + 408: 7(fvec3) Load 318(r03) + 409: 7(fvec3) FMul 408 407 + Store 318(r03) 409 + 410: 125(ptr) AccessChain 113 134 + 411: 21(ivec3) Load 410 + 412: 28(bvec3) INotEqual 411 138 + 413: 14(ivec3) Select 412 173 172 + 414: 14(ivec3) Load 322(r10) + 415: 14(ivec3) IMul 414 413 + Store 322(r10) 415 + 416: 125(ptr) AccessChain 113 124 + 417: 21(ivec3) Load 416 + 418: 14(ivec3) Bitcast 417 + 419: 14(ivec3) Load 327(r11) + 420: 14(ivec3) IMul 419 418 + Store 327(r11) 420 + 421: 182(ptr) AccessChain 113 181 + 422: 7(fvec3) Load 421 + 423: 14(ivec3) ConvertFToS 422 + 424: 14(ivec3) Load 331(r12) + 425: 14(ivec3) IMul 424 423 + Store 331(r12) 425 + 426: 152(ptr) AccessChain 113 151 + 427: 35(fvec3) Load 426 + 428: 14(ivec3) ConvertFToS 427 + 429: 14(ivec3) Load 335(r13) + 430: 14(ivec3) IMul 429 428 + Store 335(r13) 430 + 431: 125(ptr) AccessChain 113 134 + 432: 21(ivec3) Load 431 + 433: 28(bvec3) INotEqual 432 138 + 434: 21(ivec3) Select 433 219 138 + 435: 21(ivec3) Load 339(r20) + 436: 21(ivec3) IMul 435 434 + Store 339(r20) 436 + 437: 115(ptr) AccessChain 113 114 + 438: 14(ivec3) Load 437 + 439: 21(ivec3) Bitcast 438 + 440: 21(ivec3) Load 344(r21) + 441: 21(ivec3) IMul 440 439 + Store 344(r21) 441 + 442: 182(ptr) AccessChain 113 181 + 443: 7(fvec3) Load 442 + 444: 21(ivec3) ConvertFToU 443 + 445: 21(ivec3) Load 348(r22) + 446: 21(ivec3) IMul 445 444 + Store 348(r22) 446 + 447: 152(ptr) AccessChain 113 151 + 448: 35(fvec3) Load 447 + 449: 21(ivec3) ConvertFToU 448 + 450: 21(ivec3) Load 352(r23) + 451: 21(ivec3) IMul 450 449 + Store 352(r23) 451 + 452: 115(ptr) AccessChain 113 114 + 453: 14(ivec3) Load 452 + 454: 35(fvec3) ConvertSToF 453 + 455: 35(fvec3) Load 372(r40) + 456: 35(fvec3) FMul 455 454 + Store 372(r40) 456 + 457: 125(ptr) AccessChain 113 124 + 458: 21(ivec3) Load 457 + 459: 35(fvec3) ConvertUToF 458 + 460: 35(fvec3) Load 376(r41) + 461: 35(fvec3) FMul 460 459 + Store 376(r41) 461 + 462: 182(ptr) AccessChain 113 181 + 463: 7(fvec3) Load 462 + 464: 35(fvec3) FConvert 463 + 465: 35(fvec3) Load 380(r42) + 466: 35(fvec3) FMul 465 464 + Store 380(r42) 466 + 467: 125(ptr) AccessChain 113 134 + 468: 21(ivec3) Load 467 + 469: 28(bvec3) INotEqual 468 138 + 470: 35(fvec3) Select 469 289 262 + 471: 35(fvec3) Load 384(r43) + 472: 35(fvec3) FMul 471 470 + Store 384(r43) 472 + 475: 474(ptr) AccessChain 113 473 + 476: 13(int) Load 475 + 477: 6(float) ConvertSToF 476 + 478: 7(fvec3) Load 305(r00) + 479: 7(fvec3) VectorTimesScalar 478 477 + Store 305(r00) 479 + 482: 481(ptr) AccessChain 113 480 + 483: 20(int) Load 482 + 484: 27(bool) INotEqual 483 137 + 485: 6(float) Select 484 141 140 + 486: 7(fvec3) Load 309(r01) + 487: 7(fvec3) VectorTimesScalar 486 485 + Store 309(r01) 487 + 489: 481(ptr) AccessChain 113 488 + 490: 20(int) Load 489 + 491: 6(float) ConvertUToF 490 + 492: 7(fvec3) Load 314(r02) + 493: 7(fvec3) VectorTimesScalar 492 491 + Store 314(r02) 493 + 496: 495(ptr) AccessChain 113 494 + 497: 34(float) Load 496 + 498: 6(float) FConvert 497 + 499: 7(fvec3) Load 318(r03) + 500: 7(fvec3) VectorTimesScalar 499 498 + Store 318(r03) 500 + 501: 481(ptr) AccessChain 113 480 + 502: 20(int) Load 501 + 503: 27(bool) INotEqual 502 137 + 504: 13(int) Select 503 134 114 + 505: 14(ivec3) Load 322(r10) + 506: 14(ivec3) CompositeConstruct 504 504 504 + 507: 14(ivec3) IMul 505 506 + Store 322(r10) 507 + 508: 481(ptr) AccessChain 113 488 + 509: 20(int) Load 508 + 510: 13(int) Bitcast 509 + 511: 14(ivec3) Load 327(r11) + 512: 14(ivec3) CompositeConstruct 510 510 510 + 513: 14(ivec3) IMul 511 512 + Store 327(r11) 513 + 516: 515(ptr) AccessChain 113 514 + 517: 6(float) Load 516 + 518: 13(int) ConvertFToS 517 + 519: 14(ivec3) Load 331(r12) + 520: 14(ivec3) CompositeConstruct 518 518 518 + 521: 14(ivec3) IMul 519 520 + Store 331(r12) 521 + 522: 495(ptr) AccessChain 113 494 + 523: 34(float) Load 522 + 524: 13(int) ConvertFToS 523 + 525: 14(ivec3) Load 335(r13) + 526: 14(ivec3) CompositeConstruct 524 524 524 + 527: 14(ivec3) IMul 525 526 + Store 335(r13) 527 + 528: 481(ptr) AccessChain 113 480 + 529: 20(int) Load 528 + 530: 27(bool) INotEqual 529 137 + 531: 20(int) Select 530 218 137 + 532: 21(ivec3) Load 339(r20) + 533: 21(ivec3) CompositeConstruct 531 531 531 + 534: 21(ivec3) IMul 532 533 + Store 339(r20) 534 + 535: 474(ptr) AccessChain 113 473 + 536: 13(int) Load 535 + 537: 20(int) Bitcast 536 + 538: 21(ivec3) Load 344(r21) + 539: 21(ivec3) CompositeConstruct 537 537 537 + 540: 21(ivec3) IMul 538 539 + Store 344(r21) 540 + 541: 515(ptr) AccessChain 113 514 + 542: 6(float) Load 541 + 543: 20(int) ConvertFToU 542 + 544: 21(ivec3) Load 348(r22) + 545: 21(ivec3) CompositeConstruct 543 543 543 + 546: 21(ivec3) IMul 544 545 + Store 348(r22) 546 + 547: 495(ptr) AccessChain 113 494 + 548: 34(float) Load 547 + 549: 20(int) ConvertFToU 548 + 550: 21(ivec3) Load 352(r23) + 551: 21(ivec3) CompositeConstruct 549 549 549 + 552: 21(ivec3) IMul 550 551 + Store 352(r23) 552 + 553: 474(ptr) AccessChain 113 473 + 554: 13(int) Load 553 + 555: 34(float) ConvertSToF 554 + 556: 35(fvec3) Load 372(r40) + 557: 35(fvec3) VectorTimesScalar 556 555 + Store 372(r40) 557 + 558: 481(ptr) AccessChain 113 488 + 559: 20(int) Load 558 + 560: 34(float) ConvertUToF 559 + 561: 35(fvec3) Load 376(r41) + 562: 35(fvec3) VectorTimesScalar 561 560 + Store 376(r41) 562 + 563: 515(ptr) AccessChain 113 514 + 564: 6(float) Load 563 + 565: 34(float) FConvert 564 + 566: 35(fvec3) Load 380(r42) + 567: 35(fvec3) VectorTimesScalar 566 565 + Store 380(r42) 567 + 568: 481(ptr) AccessChain 113 480 + 569: 20(int) Load 568 + 570: 27(bool) INotEqual 569 137 + 571: 34(float) Select 570 288 261 + 572: 35(fvec3) Load 384(r43) + 573: 35(fvec3) VectorTimesScalar 572 571 + Store 384(r43) 573 + Store 575(c1) 124 + Store 576(c2) 124 + 580: 13(int) Load 575(c1) + 581: 6(float) ConvertSToF 580 + 582: 13(int) Load 576(c2) + 583: 6(float) ConvertSToF 582 + 584: 106(fvec4) CompositeConstruct 579 579 581 583 + Store 578(outval) 584 + 587: 106(fvec4) Load 578(outval) + 588: 577(ptr) AccessChain 586(psout) 114 + Store 588 587 + 589:107(PS_OUTPUT) Load 586(psout) + ReturnValue 589 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.reflection.binding.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.reflection.binding.frag.out new file mode 100644 index 0000000..dd19621 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.reflection.binding.frag.out @@ -0,0 +1,19 @@ +hlsl.reflection.binding.frag +Uniform reflection: +t1: offset -1, type 8b5d, size 1, index -1, binding 15 +s1: offset -1, type 0, size 1, index -1, binding 5 +t1a: offset -1, type 8b5d, size 1, index -1, binding 16 +s1a: offset -1, type 0, size 1, index -1, binding 6 +c1_a: offset 0, type 8b52, size 1, index 0, binding -1 +c1_b: offset 16, type 1404, size 1, index 0, binding -1 +c1_c: offset 20, type 1406, size 1, index 0, binding -1 +c2_a: offset 0, type 8b52, size 1, index 1, binding -1 +c2_b: offset 16, type 1404, size 1, index 1, binding -1 +c2_c: offset 20, type 1406, size 1, index 1, binding -1 + +Uniform block reflection: +cbuff1: offset -1, type ffffffff, size 24, index -1, binding 2 +cbuff2: offset -1, type ffffffff, size 24, index -1, binding 3 + +Vertex attribute reflection: + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.reflection.binding.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.reflection.binding.vert.out new file mode 100644 index 0000000..f1368df --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.reflection.binding.vert.out @@ -0,0 +1,15 @@ +hlsl.reflection.binding.vert + +Linked vertex stage: + + +Uniform reflection: +t1: offset -1, type 8b5d, size 1, index -1, binding 15 +s1: offset -1, type 0, size 1, index -1, binding 5 +t1a: offset -1, type 8b5d, size 1, index -1, binding 16 +s1a: offset -1, type 0, size 1, index -1, binding 6 + +Uniform block reflection: + +Vertex attribute reflection: + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.reflection.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.reflection.vert.out new file mode 100644 index 0000000..8ecfde6 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.reflection.vert.out @@ -0,0 +1,84 @@ +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 +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 +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 +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 +deepB.d2.d1[1].va: offset 984, type 8b50, size 2, index 1, binding -1 +deepB.d2.d1[2].va: offset 984, type 8b50, size 2, index 1, binding -1 +deepB.d2.d1[3].va: offset 984, type 8b50, size 2, index 1, binding -1 +deepC.iv4: offset 1568, type 8b52, size 1, index 1, binding -1 +deepC.d2.i: offset 1568, type 1404, size 1, index 1, binding -1 +deepC.d2.d1[0].va: offset 1568, type 8b50, size 3, index 1, binding -1 +deepC.d2.d1[0].b: offset 1568, type 8b56, size 1, index 1, binding -1 +deepC.d2.d1[1].va: offset 1568, type 8b50, size 3, index 1, binding -1 +deepC.d2.d1[1].b: offset 1568, type 8b56, size 1, index 1, binding -1 +deepC.d2.d1[2].va: offset 1568, type 8b50, size 3, index 1, binding -1 +deepC.d2.d1[2].b: offset 1568, type 8b56, size 1, index 1, binding -1 +deepC.d2.d1[3].va: offset 1568, type 8b50, size 3, index 1, binding -1 +deepC.d2.d1[3].b: offset 1568, type 8b56, size 1, index 1, binding -1 +deepC.v3: offset 1568, type 8b54, size 1, index 1, binding -1 +deepD[0].iv4: offset 2480, type 8b52, size 1, index 1, binding -1 +deepD[0].d2.i: offset 2480, type 1404, size 1, index 1, binding -1 +deepD[0].d2.d1[0].va: offset 2480, type 8b50, size 3, index 1, binding -1 +deepD[0].d2.d1[0].b: offset 2480, type 8b56, size 1, index 1, binding -1 +deepD[0].d2.d1[1].va: offset 2480, type 8b50, size 3, index 1, binding -1 +deepD[0].d2.d1[1].b: offset 2480, type 8b56, size 1, index 1, binding -1 +deepD[0].d2.d1[2].va: offset 2480, type 8b50, size 3, index 1, binding -1 +deepD[0].d2.d1[2].b: offset 2480, type 8b56, size 1, index 1, binding -1 +deepD[0].d2.d1[3].va: offset 2480, type 8b50, size 3, index 1, binding -1 +deepD[0].d2.d1[3].b: offset 2480, type 8b56, size 1, index 1, binding -1 +deepD[0].v3: offset 2480, type 8b54, size 1, index 1, binding -1 +deepD[1].iv4: offset 2480, type 8b52, size 1, index 1, binding -1 +deepD[1].d2.i: offset 2480, type 1404, size 1, index 1, binding -1 +deepD[1].d2.d1[0].va: offset 2480, type 8b50, size 3, index 1, binding -1 +deepD[1].d2.d1[0].b: offset 2480, type 8b56, size 1, index 1, binding -1 +deepD[1].d2.d1[1].va: offset 2480, type 8b50, size 3, index 1, binding -1 +deepD[1].d2.d1[1].b: offset 2480, type 8b56, size 1, index 1, binding -1 +deepD[1].d2.d1[2].va: offset 2480, type 8b50, size 3, index 1, binding -1 +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 +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 + +Vertex attribute reflection: +attributeFloat: offset 0, type 1406, size 0, index 0, binding -1 +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 + 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 new file mode 100644 index 0000000..a2e5358 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.atomics.frag.out @@ -0,0 +1,5274 @@ +hlsl.rw.atomics.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:45 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color}) +0:45 Function Parameters: +0:? Sequence +0:50 imageAtomicAdd ( temp int) +0:50 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:50 i1: direct index for structure ( uniform int) +0:50 '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:50 Constant: +0:50 5 (const uint) +0:50 i1b: direct index for structure ( uniform int) +0:50 '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:50 Constant: +0:50 8 (const uint) +0:51 move second child to first child ( temp int) +0:51 'out_i1' ( temp int) +0:51 imageAtomicAdd ( temp int) +0:51 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:51 i1: direct index for structure ( uniform int) +0:51 '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:51 Constant: +0:51 5 (const uint) +0:51 i1: direct index for structure ( uniform int) +0:51 '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:51 Constant: +0:51 5 (const uint) +0:52 imageAtomicAnd ( temp int) +0:52 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:52 i1: direct index for structure ( uniform int) +0:52 '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:52 Constant: +0:52 5 (const uint) +0:52 i1b: direct index for structure ( uniform int) +0:52 '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:52 Constant: +0:52 8 (const uint) +0:53 move second child to first child ( temp int) +0:53 'out_i1' ( temp int) +0:53 imageAtomicAnd ( temp int) +0:53 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:53 i1: direct index for structure ( uniform int) +0:53 '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:53 Constant: +0:53 5 (const uint) +0:53 i1: direct index for structure ( uniform int) +0:53 '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:53 Constant: +0:53 5 (const uint) +0:54 move second child to first child ( temp int) +0:54 'out_i1' ( temp int) +0:54 imageAtomicCompSwap ( temp int) +0:54 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:54 i1: direct index for structure ( uniform int) +0:54 '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:54 Constant: +0:54 5 (const uint) +0:54 i1b: direct index for structure ( uniform int) +0:54 '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:54 Constant: +0:54 8 (const uint) +0:54 i1c: direct index for structure ( uniform int) +0:54 '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:54 Constant: +0:54 9 (const uint) +0:55 move second child to first child ( temp int) +0:55 'out_i1' ( temp int) +0:55 imageAtomicExchange ( temp int) +0:55 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:55 i1: direct index for structure ( uniform int) +0:55 '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:55 Constant: +0:55 5 (const uint) +0:55 i1: direct index for structure ( uniform int) +0:55 '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:55 Constant: +0:55 5 (const uint) +0:56 imageAtomicMax ( temp int) +0:56 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:56 i1: direct index for structure ( uniform int) +0:56 '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:56 Constant: +0:56 5 (const uint) +0:56 i1b: direct index for structure ( uniform int) +0:56 '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:56 Constant: +0:56 8 (const uint) +0:57 move second child to first child ( temp int) +0:57 'out_i1' ( temp int) +0:57 imageAtomicMax ( temp int) +0:57 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:57 i1: direct index for structure ( uniform int) +0:57 '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:57 Constant: +0:57 5 (const uint) +0:57 i1: direct index for structure ( uniform int) +0:57 '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:57 Constant: +0:57 5 (const uint) +0:58 imageAtomicMin ( temp int) +0:58 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:58 i1: direct index for structure ( uniform int) +0:58 '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:58 Constant: +0:58 5 (const uint) +0:58 i1b: direct index for structure ( uniform int) +0:58 '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:58 Constant: +0:58 8 (const uint) +0:59 move second child to first child ( temp int) +0:59 'out_i1' ( temp int) +0:59 imageAtomicMin ( temp int) +0:59 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:59 i1: direct index for structure ( uniform int) +0:59 '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:59 Constant: +0:59 5 (const uint) +0:59 i1: direct index for structure ( uniform int) +0:59 '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:59 Constant: +0:59 5 (const uint) +0:60 imageAtomicOr ( temp int) +0:60 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:60 i1: direct index for structure ( uniform int) +0:60 '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:60 Constant: +0:60 5 (const uint) +0:60 i1b: direct index for structure ( uniform int) +0:60 '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:60 Constant: +0:60 8 (const uint) +0:61 move second child to first child ( temp int) +0:61 'out_i1' ( temp int) +0:61 imageAtomicOr ( temp int) +0:61 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:61 i1: direct index for structure ( uniform int) +0:61 '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:61 Constant: +0:61 5 (const uint) +0:61 i1: direct index for structure ( uniform int) +0:61 '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:61 Constant: +0:61 5 (const uint) +0:62 imageAtomicXor ( temp int) +0:62 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:62 i1: direct index for structure ( uniform int) +0:62 '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:62 Constant: +0:62 5 (const uint) +0:62 i1b: direct index for structure ( uniform int) +0:62 '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:62 Constant: +0:62 8 (const uint) +0:63 move second child to first child ( temp int) +0:63 'out_i1' ( temp int) +0:63 imageAtomicXor ( temp int) +0:63 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:63 i1: direct index for structure ( uniform int) +0:63 '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:63 Constant: +0:63 5 (const uint) +0:63 i1: direct index for structure ( uniform int) +0:63 '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:63 Constant: +0:63 5 (const uint) +0:66 imageAtomicAdd ( temp uint) +0:66 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:66 u1: direct index for structure ( uniform uint) +0:66 '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:66 Constant: +0:66 0 (const uint) +0:66 u1: direct index for structure ( uniform uint) +0:66 '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:66 Constant: +0:66 0 (const uint) +0:67 move second child to first child ( temp uint) +0:67 'out_u1' ( temp uint) +0:67 imageAtomicAdd ( temp uint) +0:67 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:67 u1: direct index for structure ( uniform uint) +0:67 '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:67 Constant: +0:67 0 (const uint) +0:67 u1: direct index for structure ( uniform uint) +0:67 '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:67 Constant: +0:67 0 (const uint) +0:68 imageAtomicAnd ( temp uint) +0:68 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:68 u1: direct index for structure ( uniform uint) +0:68 '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:68 Constant: +0:68 0 (const uint) +0:68 u1: direct index for structure ( uniform uint) +0:68 '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:68 Constant: +0:68 0 (const uint) +0:69 move second child to first child ( temp uint) +0:69 'out_u1' ( temp uint) +0:69 imageAtomicAnd ( temp uint) +0:69 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:69 u1: direct index for structure ( uniform uint) +0:69 '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:69 Constant: +0:69 0 (const uint) +0:69 u1: direct index for structure ( uniform uint) +0:69 '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:69 Constant: +0:69 0 (const uint) +0:70 move second child to first child ( temp uint) +0:70 'out_u1' ( temp uint) +0:70 imageAtomicCompSwap ( temp uint) +0:70 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:70 u1: direct index for structure ( uniform uint) +0:70 '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:70 Constant: +0:70 0 (const uint) +0:70 u1b: direct index for structure ( uniform uint) +0:70 '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:70 Constant: +0:70 3 (const uint) +0:70 u1c: direct index for structure ( uniform uint) +0:70 '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:70 Constant: +0:70 4 (const uint) +0:71 move second child to first child ( temp uint) +0:71 'out_u1' ( temp uint) +0:71 imageAtomicExchange ( temp uint) +0:71 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:71 u1: direct index for structure ( uniform uint) +0:71 '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:71 Constant: +0:71 0 (const uint) +0:71 u1: direct index for structure ( uniform uint) +0:71 '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:71 Constant: +0:71 0 (const uint) +0:72 imageAtomicMax ( temp uint) +0:72 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:72 u1: direct index for structure ( uniform uint) +0:72 '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:72 Constant: +0:72 0 (const uint) +0:72 u1: direct index for structure ( uniform uint) +0:72 '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:72 Constant: +0:72 0 (const uint) +0:73 move second child to first child ( temp uint) +0:73 'out_u1' ( temp uint) +0:73 imageAtomicMax ( temp uint) +0:73 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:73 u1: direct index for structure ( uniform uint) +0:73 '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:73 Constant: +0:73 0 (const uint) +0:73 u1: direct index for structure ( uniform uint) +0:73 '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:73 Constant: +0:73 0 (const uint) +0:74 imageAtomicMin ( temp uint) +0:74 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:74 u1: direct index for structure ( uniform uint) +0:74 '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:74 Constant: +0:74 0 (const uint) +0:74 u1: direct index for structure ( uniform uint) +0:74 '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:74 Constant: +0:74 0 (const uint) +0:75 move second child to first child ( temp uint) +0:75 'out_u1' ( temp uint) +0:75 imageAtomicMin ( temp uint) +0:75 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:75 u1: direct index for structure ( uniform uint) +0:75 '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:75 Constant: +0:75 0 (const uint) +0:75 u1: direct index for structure ( uniform uint) +0:75 '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:75 Constant: +0:75 0 (const uint) +0:76 imageAtomicOr ( temp uint) +0:76 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:76 u1: direct index for structure ( uniform uint) +0:76 '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:76 Constant: +0:76 0 (const uint) +0:76 u1: direct index for structure ( uniform uint) +0:76 '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:76 Constant: +0:76 0 (const uint) +0:77 move second child to first child ( temp uint) +0:77 'out_u1' ( temp uint) +0:77 imageAtomicOr ( temp uint) +0:77 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:77 u1: direct index for structure ( uniform uint) +0:77 '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:77 Constant: +0:77 0 (const uint) +0:77 u1: direct index for structure ( uniform uint) +0:77 '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:77 Constant: +0:77 0 (const uint) +0:78 imageAtomicXor ( temp uint) +0:78 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:78 u1: direct index for structure ( uniform uint) +0:78 '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:78 Constant: +0:78 0 (const uint) +0:78 u1: direct index for structure ( uniform uint) +0:78 '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:78 Constant: +0:78 0 (const uint) +0:79 move second child to first child ( temp uint) +0:79 'out_u1' ( temp uint) +0:79 imageAtomicXor ( temp uint) +0:79 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:79 u1: direct index for structure ( uniform uint) +0:79 '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:79 Constant: +0:79 0 (const uint) +0:79 u1: direct index for structure ( uniform uint) +0:79 '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:79 Constant: +0:79 0 (const uint) +0:82 imageAtomicAdd ( temp int) +0:82 'g_tTex2di1' (layout( r32i) uniform iimage2D) +0:82 i2: direct index for structure ( uniform 2-component vector of int) +0:82 '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:82 Constant: +0:82 6 (const uint) +0:82 i1b: direct index for structure ( uniform int) +0:82 '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:82 Constant: +0:82 8 (const uint) +0:83 move second child to first child ( temp int) +0:83 'out_i1' ( temp int) +0:83 imageAtomicAdd ( temp int) +0:83 'g_tTex2di1' (layout( r32i) uniform iimage2D) +0:83 i2: direct index for structure ( uniform 2-component vector of int) +0:83 '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:83 Constant: +0:83 6 (const uint) +0:83 i1: direct index for structure ( uniform int) +0:83 '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:83 Constant: +0:83 5 (const uint) +0:84 imageAtomicAnd ( temp int) +0:84 'g_tTex2di1' (layout( r32i) uniform iimage2D) +0:84 i2: direct index for structure ( uniform 2-component vector of int) +0:84 '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:84 Constant: +0:84 6 (const uint) +0:84 i1b: direct index for structure ( uniform int) +0:84 '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:84 Constant: +0:84 8 (const uint) +0:85 move second child to first child ( temp int) +0:85 'out_i1' ( temp int) +0:85 imageAtomicAnd ( temp int) +0:85 'g_tTex2di1' (layout( r32i) uniform iimage2D) +0:85 i2: direct index for structure ( uniform 2-component vector of int) +0:85 '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:85 Constant: +0:85 6 (const uint) +0:85 i1: direct index for structure ( uniform int) +0:85 '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:85 Constant: +0:85 5 (const uint) +0:86 move second child to first child ( temp int) +0:86 'out_i1' ( temp int) +0:86 imageAtomicCompSwap ( temp int) +0:86 'g_tTex2di1' (layout( r32i) uniform iimage2D) +0:86 i2: direct index for structure ( uniform 2-component vector of int) +0:86 '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:86 Constant: +0:86 6 (const uint) +0:86 i1b: direct index for structure ( uniform int) +0:86 '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:86 Constant: +0:86 8 (const uint) +0:86 i1c: direct index for structure ( uniform int) +0:86 '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:86 Constant: +0:86 9 (const uint) +0:87 move second child to first child ( temp int) +0:87 'out_i1' ( temp int) +0:87 imageAtomicExchange ( temp int) +0:87 'g_tTex2di1' (layout( r32i) uniform iimage2D) +0:87 i2: direct index for structure ( uniform 2-component vector of int) +0:87 '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:87 Constant: +0:87 6 (const uint) +0:87 i1: direct index for structure ( uniform int) +0:87 '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:87 Constant: +0:87 5 (const uint) +0:88 imageAtomicMax ( temp int) +0:88 'g_tTex2di1' (layout( r32i) uniform iimage2D) +0:88 i2: direct index for structure ( uniform 2-component vector of int) +0:88 '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:88 Constant: +0:88 6 (const uint) +0:88 i1b: direct index for structure ( uniform int) +0:88 '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:88 Constant: +0:88 8 (const uint) +0:89 move second child to first child ( temp int) +0:89 'out_i1' ( temp int) +0:89 imageAtomicMax ( temp int) +0:89 'g_tTex2di1' (layout( r32i) uniform iimage2D) +0:89 i2: direct index for structure ( uniform 2-component vector of int) +0:89 '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:89 Constant: +0:89 6 (const uint) +0:89 i1: direct index for structure ( uniform int) +0:89 '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:89 Constant: +0:89 5 (const uint) +0:90 imageAtomicMin ( temp int) +0:90 'g_tTex2di1' (layout( r32i) uniform iimage2D) +0:90 i2: direct index for structure ( uniform 2-component vector of int) +0:90 '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:90 Constant: +0:90 6 (const uint) +0:90 i1b: direct index for structure ( uniform int) +0:90 '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:90 Constant: +0:90 8 (const uint) +0:91 move second child to first child ( temp int) +0:91 'out_i1' ( temp int) +0:91 imageAtomicMin ( temp int) +0:91 'g_tTex2di1' (layout( r32i) uniform iimage2D) +0:91 i2: direct index for structure ( uniform 2-component vector of int) +0:91 '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:91 Constant: +0:91 6 (const uint) +0:91 i1: direct index for structure ( uniform int) +0:91 '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:91 Constant: +0:91 5 (const uint) +0:92 imageAtomicOr ( temp int) +0:92 'g_tTex2di1' (layout( r32i) uniform iimage2D) +0:92 i2: direct index for structure ( uniform 2-component vector of int) +0:92 '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:92 Constant: +0:92 6 (const uint) +0:92 i1b: direct index for structure ( uniform int) +0:92 '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:92 Constant: +0:92 8 (const uint) +0:93 move second child to first child ( temp int) +0:93 'out_i1' ( temp int) +0:93 imageAtomicOr ( temp int) +0:93 'g_tTex2di1' (layout( r32i) uniform iimage2D) +0:93 i2: direct index for structure ( uniform 2-component vector of int) +0:93 '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:93 Constant: +0:93 6 (const uint) +0:93 i1: direct index for structure ( uniform int) +0:93 '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:93 Constant: +0:93 5 (const uint) +0:94 imageAtomicXor ( temp int) +0:94 'g_tTex2di1' (layout( r32i) uniform iimage2D) +0:94 i2: direct index for structure ( uniform 2-component vector of int) +0:94 '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:94 Constant: +0:94 6 (const uint) +0:94 i1b: direct index for structure ( uniform int) +0:94 '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:94 Constant: +0:94 8 (const uint) +0:95 move second child to first child ( temp int) +0:95 'out_i1' ( temp int) +0:95 imageAtomicXor ( temp int) +0:95 'g_tTex2di1' (layout( r32i) uniform iimage2D) +0:95 i2: direct index for structure ( uniform 2-component vector of int) +0:95 '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:95 Constant: +0:95 6 (const uint) +0:95 i1: direct index for structure ( uniform int) +0:95 '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:95 Constant: +0:95 5 (const uint) +0:98 imageAtomicAdd ( temp uint) +0:98 'g_tTex2du1' (layout( r32ui) uniform uimage2D) +0:98 u2: direct index for structure ( uniform 2-component vector of uint) +0:98 '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:98 Constant: +0:98 1 (const uint) +0:98 u1: direct index for structure ( uniform uint) +0:98 '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:98 Constant: +0:98 0 (const uint) +0:99 move second child to first child ( temp uint) +0:99 'out_u1' ( temp uint) +0:99 imageAtomicAdd ( temp uint) +0:99 'g_tTex2du1' (layout( r32ui) uniform uimage2D) +0:99 u2: direct index for structure ( uniform 2-component vector of uint) +0:99 '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:99 Constant: +0:99 1 (const uint) +0:99 u1: direct index for structure ( uniform uint) +0:99 '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:99 Constant: +0:99 0 (const uint) +0:100 imageAtomicAnd ( temp uint) +0:100 'g_tTex2du1' (layout( r32ui) uniform uimage2D) +0:100 u2: direct index for structure ( uniform 2-component vector of uint) +0:100 '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:100 Constant: +0:100 1 (const uint) +0:100 u1: direct index for structure ( uniform uint) +0:100 '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:100 Constant: +0:100 0 (const uint) +0:101 move second child to first child ( temp uint) +0:101 'out_u1' ( temp uint) +0:101 imageAtomicAnd ( temp uint) +0:101 'g_tTex2du1' (layout( r32ui) uniform uimage2D) +0:101 u2: direct index for structure ( uniform 2-component vector of uint) +0:101 '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:101 Constant: +0:101 1 (const uint) +0:101 u1: direct index for structure ( uniform uint) +0:101 '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:101 Constant: +0:101 0 (const uint) +0:102 move second child to first child ( temp uint) +0:102 'out_u1' ( temp uint) +0:102 imageAtomicCompSwap ( temp uint) +0:102 'g_tTex2du1' (layout( r32ui) uniform uimage2D) +0:102 u2: direct index for structure ( uniform 2-component vector of uint) +0:102 '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:102 Constant: +0:102 1 (const uint) +0:102 u1b: direct index for structure ( uniform uint) +0:102 '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:102 Constant: +0:102 3 (const uint) +0:102 u1c: direct index for structure ( uniform uint) +0:102 '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:102 Constant: +0:102 4 (const uint) +0:103 move second child to first child ( temp uint) +0:103 'out_u1' ( temp uint) +0:103 imageAtomicExchange ( temp uint) +0:103 'g_tTex2du1' (layout( r32ui) uniform uimage2D) +0:103 u2: direct index for structure ( uniform 2-component vector of uint) +0:103 '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:103 Constant: +0:103 1 (const uint) +0:103 u1: direct index for structure ( uniform uint) +0:103 '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:103 Constant: +0:103 0 (const uint) +0:104 imageAtomicMax ( temp uint) +0:104 'g_tTex2du1' (layout( r32ui) uniform uimage2D) +0:104 u2: direct index for structure ( uniform 2-component vector of uint) +0:104 '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:104 Constant: +0:104 1 (const uint) +0:104 u1: direct index for structure ( uniform uint) +0:104 '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:104 Constant: +0:104 0 (const uint) +0:105 move second child to first child ( temp uint) +0:105 'out_u1' ( temp uint) +0:105 imageAtomicMax ( temp uint) +0:105 'g_tTex2du1' (layout( r32ui) uniform uimage2D) +0:105 u2: direct index for structure ( uniform 2-component vector of uint) +0:105 '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:105 Constant: +0:105 1 (const uint) +0:105 u1: direct index for structure ( uniform uint) +0:105 '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:105 Constant: +0:105 0 (const uint) +0:106 imageAtomicMin ( temp uint) +0:106 'g_tTex2du1' (layout( r32ui) uniform uimage2D) +0:106 u2: direct index for structure ( uniform 2-component vector of uint) +0:106 '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:106 Constant: +0:106 1 (const uint) +0:106 u1: direct index for structure ( uniform uint) +0:106 '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:106 Constant: +0:106 0 (const uint) +0:107 move second child to first child ( temp uint) +0:107 'out_u1' ( temp uint) +0:107 imageAtomicMin ( temp uint) +0:107 'g_tTex2du1' (layout( r32ui) uniform uimage2D) +0:107 u2: direct index for structure ( uniform 2-component vector of uint) +0:107 '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:107 Constant: +0:107 1 (const uint) +0:107 u1: direct index for structure ( uniform uint) +0:107 '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:107 Constant: +0:107 0 (const uint) +0:108 imageAtomicOr ( temp uint) +0:108 'g_tTex2du1' (layout( r32ui) uniform uimage2D) +0:108 u2: direct index for structure ( uniform 2-component vector of uint) +0:108 '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:108 Constant: +0:108 1 (const uint) +0:108 u1: direct index for structure ( uniform uint) +0:108 '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:108 Constant: +0:108 0 (const uint) +0:109 move second child to first child ( temp uint) +0:109 'out_u1' ( temp uint) +0:109 imageAtomicOr ( temp uint) +0:109 'g_tTex2du1' (layout( r32ui) uniform uimage2D) +0:109 u2: direct index for structure ( uniform 2-component vector of uint) +0:109 '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:109 Constant: +0:109 1 (const uint) +0:109 u1: direct index for structure ( uniform uint) +0:109 '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:109 Constant: +0:109 0 (const uint) +0:110 imageAtomicXor ( temp uint) +0:110 'g_tTex2du1' (layout( r32ui) uniform uimage2D) +0:110 u2: direct index for structure ( uniform 2-component vector of uint) +0:110 '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:110 Constant: +0:110 1 (const uint) +0:110 u1: direct index for structure ( uniform uint) +0:110 '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:110 Constant: +0:110 0 (const uint) +0:111 move second child to first child ( temp uint) +0:111 'out_u1' ( temp uint) +0:111 imageAtomicXor ( temp uint) +0:111 'g_tTex2du1' (layout( r32ui) uniform uimage2D) +0:111 u2: direct index for structure ( uniform 2-component vector of uint) +0:111 '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:111 Constant: +0:111 1 (const uint) +0:111 u1: direct index for structure ( uniform uint) +0:111 '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:111 Constant: +0:111 0 (const uint) +0:114 imageAtomicAdd ( temp int) +0:114 'g_tTex3di1' (layout( r32i) uniform iimage3D) +0:114 i3: direct index for structure ( uniform 3-component vector of int) +0:114 '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:114 Constant: +0:114 7 (const uint) +0:114 i1b: direct index for structure ( uniform int) +0:114 '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:114 Constant: +0:114 8 (const uint) +0:115 move second child to first child ( temp int) +0:115 'out_i1' ( temp int) +0:115 imageAtomicAdd ( temp int) +0:115 'g_tTex3di1' (layout( r32i) uniform iimage3D) +0:115 i3: direct index for structure ( uniform 3-component vector of int) +0:115 '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:115 Constant: +0:115 7 (const uint) +0:115 i1: direct index for structure ( uniform int) +0:115 '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:115 Constant: +0:115 5 (const uint) +0:116 imageAtomicAnd ( temp int) +0:116 'g_tTex3di1' (layout( r32i) uniform iimage3D) +0:116 i3: direct index for structure ( uniform 3-component vector of int) +0:116 '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:116 Constant: +0:116 7 (const uint) +0:116 i1b: direct index for structure ( uniform int) +0:116 '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:116 Constant: +0:116 8 (const uint) +0:117 move second child to first child ( temp int) +0:117 'out_i1' ( temp int) +0:117 imageAtomicAnd ( temp int) +0:117 'g_tTex3di1' (layout( r32i) uniform iimage3D) +0:117 i3: direct index for structure ( uniform 3-component vector of int) +0:117 '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:117 Constant: +0:117 7 (const uint) +0:117 i1: direct index for structure ( uniform int) +0:117 '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:117 Constant: +0:117 5 (const uint) +0:118 move second child to first child ( temp int) +0:118 'out_i1' ( temp int) +0:118 imageAtomicCompSwap ( temp int) +0:118 'g_tTex3di1' (layout( r32i) uniform iimage3D) +0:118 i3: direct index for structure ( uniform 3-component vector of int) +0:118 '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:118 Constant: +0:118 7 (const uint) +0:118 i1b: direct index for structure ( uniform int) +0:118 '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:118 Constant: +0:118 8 (const uint) +0:118 i1c: direct index for structure ( uniform int) +0:118 '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:118 Constant: +0:118 9 (const uint) +0:119 move second child to first child ( temp int) +0:119 'out_i1' ( temp int) +0:119 imageAtomicExchange ( temp int) +0:119 'g_tTex3di1' (layout( r32i) uniform iimage3D) +0:119 i3: direct index for structure ( uniform 3-component vector of int) +0:119 '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:119 Constant: +0:119 7 (const uint) +0:119 i1: direct index for structure ( uniform int) +0:119 '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:119 Constant: +0:119 5 (const uint) +0:120 imageAtomicMax ( temp int) +0:120 'g_tTex3di1' (layout( r32i) uniform iimage3D) +0:120 i3: direct index for structure ( uniform 3-component vector of int) +0:120 '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:120 Constant: +0:120 7 (const uint) +0:120 i1b: direct index for structure ( uniform int) +0:120 '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:120 Constant: +0:120 8 (const uint) +0:121 move second child to first child ( temp int) +0:121 'out_i1' ( temp int) +0:121 imageAtomicMax ( temp int) +0:121 'g_tTex3di1' (layout( r32i) uniform iimage3D) +0:121 i3: direct index for structure ( uniform 3-component vector of int) +0:121 '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:121 Constant: +0:121 7 (const uint) +0:121 i1: direct index for structure ( uniform int) +0:121 '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:121 Constant: +0:121 5 (const uint) +0:122 imageAtomicMin ( temp int) +0:122 'g_tTex3di1' (layout( r32i) uniform iimage3D) +0:122 i3: direct index for structure ( uniform 3-component vector of int) +0:122 '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:122 Constant: +0:122 7 (const uint) +0:122 i1b: direct index for structure ( uniform int) +0:122 '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:122 Constant: +0:122 8 (const uint) +0:123 move second child to first child ( temp int) +0:123 'out_i1' ( temp int) +0:123 imageAtomicMin ( temp int) +0:123 'g_tTex3di1' (layout( r32i) uniform iimage3D) +0:123 i3: direct index for structure ( uniform 3-component vector of int) +0:123 '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:123 Constant: +0:123 7 (const uint) +0:123 i1: direct index for structure ( uniform int) +0:123 '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:123 Constant: +0:123 5 (const uint) +0:124 imageAtomicOr ( temp int) +0:124 'g_tTex3di1' (layout( r32i) uniform iimage3D) +0:124 i3: direct index for structure ( uniform 3-component vector of int) +0:124 '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:124 Constant: +0:124 7 (const uint) +0:124 i1b: direct index for structure ( uniform int) +0:124 '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:124 Constant: +0:124 8 (const uint) +0:125 move second child to first child ( temp int) +0:125 'out_i1' ( temp int) +0:125 imageAtomicOr ( temp int) +0:125 'g_tTex3di1' (layout( r32i) uniform iimage3D) +0:125 i3: direct index for structure ( uniform 3-component vector of int) +0:125 '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:125 Constant: +0:125 7 (const uint) +0:125 i1: direct index for structure ( uniform int) +0:125 '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:125 Constant: +0:125 5 (const uint) +0:126 imageAtomicXor ( temp int) +0:126 'g_tTex3di1' (layout( r32i) uniform iimage3D) +0:126 i3: direct index for structure ( uniform 3-component vector of int) +0:126 '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:126 Constant: +0:126 7 (const uint) +0:126 i1b: direct index for structure ( uniform int) +0:126 '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:126 Constant: +0:126 8 (const uint) +0:127 move second child to first child ( temp int) +0:127 'out_i1' ( temp int) +0:127 imageAtomicXor ( temp int) +0:127 'g_tTex3di1' (layout( r32i) uniform iimage3D) +0:127 i3: direct index for structure ( uniform 3-component vector of int) +0:127 '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:127 Constant: +0:127 7 (const uint) +0:127 i1: direct index for structure ( uniform int) +0:127 '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:127 Constant: +0:127 5 (const uint) +0:130 imageAtomicAdd ( temp uint) +0:130 'g_tTex3du1' (layout( r32ui) uniform uimage3D) +0:130 u3: direct index for structure ( uniform 3-component vector of uint) +0:130 '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:130 Constant: +0:130 2 (const uint) +0:130 u1: direct index for structure ( uniform uint) +0:130 '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:130 Constant: +0:130 0 (const uint) +0:131 move second child to first child ( temp uint) +0:131 'out_u1' ( temp uint) +0:131 imageAtomicAdd ( temp uint) +0:131 'g_tTex3du1' (layout( r32ui) uniform uimage3D) +0:131 u3: direct index for structure ( uniform 3-component vector of uint) +0:131 '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:131 Constant: +0:131 2 (const uint) +0:131 u1: direct index for structure ( uniform uint) +0:131 '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:131 Constant: +0:131 0 (const uint) +0:132 imageAtomicAnd ( temp uint) +0:132 'g_tTex3du1' (layout( r32ui) uniform uimage3D) +0:132 u3: direct index for structure ( uniform 3-component vector of uint) +0:132 '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:132 Constant: +0:132 2 (const uint) +0:132 u1: direct index for structure ( uniform uint) +0:132 '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:132 Constant: +0:132 0 (const uint) +0:133 move second child to first child ( temp uint) +0:133 'out_u1' ( temp uint) +0:133 imageAtomicAnd ( temp uint) +0:133 'g_tTex3du1' (layout( r32ui) uniform uimage3D) +0:133 u3: direct index for structure ( uniform 3-component vector of uint) +0:133 '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:133 Constant: +0:133 2 (const uint) +0:133 u1: direct index for structure ( uniform uint) +0:133 '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:133 Constant: +0:133 0 (const uint) +0:134 move second child to first child ( temp uint) +0:134 'out_u1' ( temp uint) +0:134 imageAtomicCompSwap ( temp uint) +0:134 'g_tTex3du1' (layout( r32ui) uniform uimage3D) +0:134 u3: direct index for structure ( uniform 3-component vector of uint) +0:134 '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:134 Constant: +0:134 2 (const uint) +0:134 u1b: direct index for structure ( uniform uint) +0:134 '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:134 Constant: +0:134 3 (const uint) +0:134 u1c: direct index for structure ( uniform uint) +0:134 '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:134 Constant: +0:134 4 (const uint) +0:135 move second child to first child ( temp uint) +0:135 'out_u1' ( temp uint) +0:135 imageAtomicExchange ( temp uint) +0:135 'g_tTex3du1' (layout( r32ui) uniform uimage3D) +0:135 u3: direct index for structure ( uniform 3-component vector of uint) +0:135 '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:135 Constant: +0:135 2 (const uint) +0:135 u1: direct index for structure ( uniform uint) +0:135 '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:135 Constant: +0:135 0 (const uint) +0:136 imageAtomicMax ( temp uint) +0:136 'g_tTex3du1' (layout( r32ui) uniform uimage3D) +0:136 u3: direct index for structure ( uniform 3-component vector of uint) +0:136 '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:136 Constant: +0:136 2 (const uint) +0:136 u1: direct index for structure ( uniform uint) +0:136 '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:136 Constant: +0:136 0 (const uint) +0:137 move second child to first child ( temp uint) +0:137 'out_u1' ( temp uint) +0:137 imageAtomicMax ( temp uint) +0:137 'g_tTex3du1' (layout( r32ui) uniform uimage3D) +0:137 u3: direct index for structure ( uniform 3-component vector of uint) +0:137 '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:137 Constant: +0:137 2 (const uint) +0:137 u1: direct index for structure ( uniform uint) +0:137 '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:137 Constant: +0:137 0 (const uint) +0:138 imageAtomicMin ( temp uint) +0:138 'g_tTex3du1' (layout( r32ui) uniform uimage3D) +0:138 u3: direct index for structure ( uniform 3-component vector of uint) +0:138 '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:138 Constant: +0:138 2 (const uint) +0:138 u1: direct index for structure ( uniform uint) +0:138 '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:138 Constant: +0:138 0 (const uint) +0:139 move second child to first child ( temp uint) +0:139 'out_u1' ( temp uint) +0:139 imageAtomicMin ( temp uint) +0:139 'g_tTex3du1' (layout( r32ui) uniform uimage3D) +0:139 u3: direct index for structure ( uniform 3-component vector of uint) +0:139 '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:139 Constant: +0:139 2 (const uint) +0:139 u1: direct index for structure ( uniform uint) +0:139 '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:139 Constant: +0:139 0 (const uint) +0:140 imageAtomicOr ( temp uint) +0:140 'g_tTex3du1' (layout( r32ui) uniform uimage3D) +0:140 u3: direct index for structure ( uniform 3-component vector of uint) +0:140 '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:140 Constant: +0:140 2 (const uint) +0:140 u1: direct index for structure ( uniform uint) +0:140 '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:140 Constant: +0:140 0 (const uint) +0:141 move second child to first child ( temp uint) +0:141 'out_u1' ( temp uint) +0:141 imageAtomicOr ( temp uint) +0:141 'g_tTex3du1' (layout( r32ui) uniform uimage3D) +0:141 u3: direct index for structure ( uniform 3-component vector of uint) +0:141 '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:141 Constant: +0:141 2 (const uint) +0:141 u1: direct index for structure ( uniform uint) +0:141 '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:141 Constant: +0:141 0 (const uint) +0:142 imageAtomicXor ( temp uint) +0:142 'g_tTex3du1' (layout( r32ui) uniform uimage3D) +0:142 u3: direct index for structure ( uniform 3-component vector of uint) +0:142 '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:142 Constant: +0:142 2 (const uint) +0:142 u1: direct index for structure ( uniform uint) +0:142 '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:142 Constant: +0:142 0 (const uint) +0:143 move second child to first child ( temp uint) +0:143 'out_u1' ( temp uint) +0:143 imageAtomicXor ( temp uint) +0:143 'g_tTex3du1' (layout( r32ui) uniform uimage3D) +0:143 u3: direct index for structure ( uniform 3-component vector of uint) +0:143 '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:143 Constant: +0:143 2 (const uint) +0:143 u1: direct index for structure ( uniform uint) +0:143 '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:143 Constant: +0:143 0 (const uint) +0:146 imageAtomicAdd ( temp int) +0:146 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:146 i2: direct index for structure ( uniform 2-component vector of int) +0:146 '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:146 Constant: +0:146 6 (const uint) +0:146 i1b: direct index for structure ( uniform int) +0:146 '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:146 Constant: +0:146 8 (const uint) +0:147 move second child to first child ( temp int) +0:147 'out_i1' ( temp int) +0:147 imageAtomicAdd ( temp int) +0:147 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:147 i2: direct index for structure ( uniform 2-component vector of int) +0:147 '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:147 Constant: +0:147 6 (const uint) +0:147 i1: direct index for structure ( uniform int) +0:147 '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:147 Constant: +0:147 5 (const uint) +0:148 imageAtomicAnd ( temp int) +0:148 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:148 i2: direct index for structure ( uniform 2-component vector of int) +0:148 '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:148 Constant: +0:148 6 (const uint) +0:148 i1b: direct index for structure ( uniform int) +0:148 '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:148 Constant: +0:148 8 (const uint) +0:149 move second child to first child ( temp int) +0:149 'out_i1' ( temp int) +0:149 imageAtomicAnd ( temp int) +0:149 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:149 i2: direct index for structure ( uniform 2-component vector of int) +0:149 '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:149 Constant: +0:149 6 (const uint) +0:149 i1: direct index for structure ( uniform int) +0:149 '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:149 Constant: +0:149 5 (const uint) +0:150 move second child to first child ( temp int) +0:150 'out_i1' ( temp int) +0:150 imageAtomicCompSwap ( temp int) +0:150 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:150 i2: direct index for structure ( uniform 2-component vector of int) +0:150 '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:150 Constant: +0:150 6 (const uint) +0:150 i1b: direct index for structure ( uniform int) +0:150 '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:150 Constant: +0:150 8 (const uint) +0:150 i1c: direct index for structure ( uniform int) +0:150 '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:150 Constant: +0:150 9 (const uint) +0:151 move second child to first child ( temp int) +0:151 'out_i1' ( temp int) +0:151 imageAtomicExchange ( temp int) +0:151 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:151 i2: direct index for structure ( uniform 2-component vector of int) +0:151 '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:151 Constant: +0:151 6 (const uint) +0:151 i1: direct index for structure ( uniform int) +0:151 '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:151 Constant: +0:151 5 (const uint) +0:152 imageAtomicMax ( temp int) +0:152 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:152 i2: direct index for structure ( uniform 2-component vector of int) +0:152 '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:152 Constant: +0:152 6 (const uint) +0:152 i1b: direct index for structure ( uniform int) +0:152 '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:152 Constant: +0:152 8 (const uint) +0:153 move second child to first child ( temp int) +0:153 'out_i1' ( temp int) +0:153 imageAtomicMax ( temp int) +0:153 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:153 i2: direct index for structure ( uniform 2-component vector of int) +0:153 '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:153 Constant: +0:153 6 (const uint) +0:153 i1: direct index for structure ( uniform int) +0:153 '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:153 Constant: +0:153 5 (const uint) +0:154 imageAtomicMin ( temp int) +0:154 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:154 i2: direct index for structure ( uniform 2-component vector of int) +0:154 '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:154 Constant: +0:154 6 (const uint) +0:154 i1b: direct index for structure ( uniform int) +0:154 '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:154 Constant: +0:154 8 (const uint) +0:155 move second child to first child ( temp int) +0:155 'out_i1' ( temp int) +0:155 imageAtomicMin ( temp int) +0:155 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:155 i2: direct index for structure ( uniform 2-component vector of int) +0:155 '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:155 Constant: +0:155 6 (const uint) +0:155 i1: direct index for structure ( uniform int) +0:155 '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:155 Constant: +0:155 5 (const uint) +0:156 imageAtomicOr ( temp int) +0:156 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:156 i2: direct index for structure ( uniform 2-component vector of int) +0:156 '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:156 Constant: +0:156 6 (const uint) +0:156 i1b: direct index for structure ( uniform int) +0:156 '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:156 Constant: +0:156 8 (const uint) +0:157 move second child to first child ( temp int) +0:157 'out_i1' ( temp int) +0:157 imageAtomicOr ( temp int) +0:157 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:157 i2: direct index for structure ( uniform 2-component vector of int) +0:157 '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:157 Constant: +0:157 6 (const uint) +0:157 i1: direct index for structure ( uniform int) +0:157 '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:157 Constant: +0:157 5 (const uint) +0:158 imageAtomicXor ( temp int) +0:158 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:158 i2: direct index for structure ( uniform 2-component vector of int) +0:158 '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:158 Constant: +0:158 6 (const uint) +0:158 i1b: direct index for structure ( uniform int) +0:158 '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:158 Constant: +0:158 8 (const uint) +0:159 move second child to first child ( temp int) +0:159 'out_i1' ( temp int) +0:159 imageAtomicXor ( temp int) +0:159 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:159 i2: direct index for structure ( uniform 2-component vector of int) +0:159 '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:159 Constant: +0:159 6 (const uint) +0:159 i1: direct index for structure ( uniform int) +0:159 '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:159 Constant: +0:159 5 (const uint) +0:162 imageAtomicAdd ( temp uint) +0:162 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:162 u2: direct index for structure ( uniform 2-component vector of uint) +0:162 '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:162 Constant: +0:162 1 (const uint) +0:162 u1: direct index for structure ( uniform uint) +0:162 '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:162 Constant: +0:162 0 (const uint) +0:163 move second child to first child ( temp uint) +0:163 'out_u1' ( temp uint) +0:163 imageAtomicAdd ( temp uint) +0:163 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:163 u2: direct index for structure ( uniform 2-component vector of uint) +0:163 '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:163 Constant: +0:163 1 (const uint) +0:163 u1: direct index for structure ( uniform uint) +0:163 '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:163 Constant: +0:163 0 (const uint) +0:164 imageAtomicAnd ( temp uint) +0:164 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:164 u2: direct index for structure ( uniform 2-component vector of uint) +0:164 '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:164 Constant: +0:164 1 (const uint) +0:164 u1: direct index for structure ( uniform uint) +0:164 '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:164 Constant: +0:164 0 (const uint) +0:165 move second child to first child ( temp uint) +0:165 'out_u1' ( temp uint) +0:165 imageAtomicAnd ( temp uint) +0:165 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:165 u2: direct index for structure ( uniform 2-component vector of uint) +0:165 '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:165 Constant: +0:165 1 (const uint) +0:165 u1: direct index for structure ( uniform uint) +0:165 '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:165 Constant: +0:165 0 (const uint) +0:166 move second child to first child ( temp uint) +0:166 'out_u1' ( temp uint) +0:166 imageAtomicCompSwap ( temp uint) +0:166 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:166 u2: direct index for structure ( uniform 2-component vector of uint) +0:166 '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:166 Constant: +0:166 1 (const uint) +0:166 u1b: direct index for structure ( uniform uint) +0:166 '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:166 Constant: +0:166 3 (const uint) +0:166 u1c: direct index for structure ( uniform uint) +0:166 '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:166 Constant: +0:166 4 (const uint) +0:167 move second child to first child ( temp uint) +0:167 'out_u1' ( temp uint) +0:167 imageAtomicExchange ( temp uint) +0:167 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:167 u2: direct index for structure ( uniform 2-component vector of uint) +0:167 '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:167 Constant: +0:167 1 (const uint) +0:167 u1: direct index for structure ( uniform uint) +0:167 '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:167 Constant: +0:167 0 (const uint) +0:168 imageAtomicMax ( temp uint) +0:168 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:168 u2: direct index for structure ( uniform 2-component vector of uint) +0:168 '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:168 Constant: +0:168 1 (const uint) +0:168 u1: direct index for structure ( uniform uint) +0:168 '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:168 Constant: +0:168 0 (const uint) +0:169 move second child to first child ( temp uint) +0:169 'out_u1' ( temp uint) +0:169 imageAtomicMax ( temp uint) +0:169 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:169 u2: direct index for structure ( uniform 2-component vector of uint) +0:169 '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:169 Constant: +0:169 1 (const uint) +0:169 u1: direct index for structure ( uniform uint) +0:169 '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:169 Constant: +0:169 0 (const uint) +0:170 imageAtomicMin ( temp uint) +0:170 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:170 u2: direct index for structure ( uniform 2-component vector of uint) +0:170 '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:170 Constant: +0:170 1 (const uint) +0:170 u1: direct index for structure ( uniform uint) +0:170 '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:170 Constant: +0:170 0 (const uint) +0:171 move second child to first child ( temp uint) +0:171 'out_u1' ( temp uint) +0:171 imageAtomicMin ( temp uint) +0:171 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:171 u2: direct index for structure ( uniform 2-component vector of uint) +0:171 '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:171 Constant: +0:171 1 (const uint) +0:171 u1: direct index for structure ( uniform uint) +0:171 '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:171 Constant: +0:171 0 (const uint) +0:172 imageAtomicOr ( temp uint) +0:172 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:172 u2: direct index for structure ( uniform 2-component vector of uint) +0:172 '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:172 Constant: +0:172 1 (const uint) +0:172 u1: direct index for structure ( uniform uint) +0:172 '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:172 Constant: +0:172 0 (const uint) +0:173 move second child to first child ( temp uint) +0:173 'out_u1' ( temp uint) +0:173 imageAtomicOr ( temp uint) +0:173 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:173 u2: direct index for structure ( uniform 2-component vector of uint) +0:173 '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:173 Constant: +0:173 1 (const uint) +0:173 u1: direct index for structure ( uniform uint) +0:173 '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:173 Constant: +0:173 0 (const uint) +0:174 imageAtomicXor ( temp uint) +0:174 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:174 u2: direct index for structure ( uniform 2-component vector of uint) +0:174 '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:174 Constant: +0:174 1 (const uint) +0:174 u1: direct index for structure ( uniform uint) +0:174 '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:174 Constant: +0:174 0 (const uint) +0:175 move second child to first child ( temp uint) +0:175 'out_u1' ( temp uint) +0:175 imageAtomicXor ( temp uint) +0:175 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:175 u2: direct index for structure ( uniform 2-component vector of uint) +0:175 '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:175 Constant: +0:175 1 (const uint) +0:175 u1: direct index for structure ( uniform uint) +0:175 '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:175 Constant: +0:175 0 (const uint) +0:178 imageAtomicAdd ( temp int) +0:178 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:178 i2: direct index for structure ( uniform 2-component vector of int) +0:178 '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:178 Constant: +0:178 6 (const uint) +0:178 i1b: direct index for structure ( uniform int) +0:178 '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:178 Constant: +0:178 8 (const uint) +0:179 move second child to first child ( temp int) +0:179 'out_i1' ( temp int) +0:179 imageAtomicAdd ( temp int) +0:179 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:179 i2: direct index for structure ( uniform 2-component vector of int) +0:179 '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:179 Constant: +0:179 6 (const uint) +0:179 i1: direct index for structure ( uniform int) +0:179 '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:179 Constant: +0:179 5 (const uint) +0:180 imageAtomicAnd ( temp int) +0:180 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:180 i2: direct index for structure ( uniform 2-component vector of int) +0:180 '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:180 Constant: +0:180 6 (const uint) +0:180 i1b: direct index for structure ( uniform int) +0:180 '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:180 Constant: +0:180 8 (const uint) +0:181 move second child to first child ( temp int) +0:181 'out_i1' ( temp int) +0:181 imageAtomicAnd ( temp int) +0:181 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:181 i2: direct index for structure ( uniform 2-component vector of int) +0:181 '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:181 Constant: +0:181 6 (const uint) +0:181 i1: direct index for structure ( uniform int) +0:181 '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:181 Constant: +0:181 5 (const uint) +0:182 move second child to first child ( temp int) +0:182 'out_i1' ( temp int) +0:182 imageAtomicCompSwap ( temp int) +0:182 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:182 i2: direct index for structure ( uniform 2-component vector of int) +0:182 '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:182 Constant: +0:182 6 (const uint) +0:182 i1b: direct index for structure ( uniform int) +0:182 '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:182 Constant: +0:182 8 (const uint) +0:182 i1c: direct index for structure ( uniform int) +0:182 '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:182 Constant: +0:182 9 (const uint) +0:183 move second child to first child ( temp int) +0:183 'out_i1' ( temp int) +0:183 imageAtomicExchange ( temp int) +0:183 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:183 i2: direct index for structure ( uniform 2-component vector of int) +0:183 '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:183 Constant: +0:183 6 (const uint) +0:183 i1: direct index for structure ( uniform int) +0:183 '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:183 Constant: +0:183 5 (const uint) +0:184 imageAtomicMax ( temp int) +0:184 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:184 i2: direct index for structure ( uniform 2-component vector of int) +0:184 '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:184 Constant: +0:184 6 (const uint) +0:184 i1b: direct index for structure ( uniform int) +0:184 '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:184 Constant: +0:184 8 (const uint) +0:185 move second child to first child ( temp int) +0:185 'out_i1' ( temp int) +0:185 imageAtomicMax ( temp int) +0:185 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:185 i2: direct index for structure ( uniform 2-component vector of int) +0:185 '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:185 Constant: +0:185 6 (const uint) +0:185 i1: direct index for structure ( uniform int) +0:185 '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:185 Constant: +0:185 5 (const uint) +0:186 imageAtomicMin ( temp int) +0:186 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:186 i2: direct index for structure ( uniform 2-component vector of int) +0:186 '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:186 Constant: +0:186 6 (const uint) +0:186 i1b: direct index for structure ( uniform int) +0:186 '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:186 Constant: +0:186 8 (const uint) +0:187 move second child to first child ( temp int) +0:187 'out_i1' ( temp int) +0:187 imageAtomicMin ( temp int) +0:187 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:187 i2: direct index for structure ( uniform 2-component vector of int) +0:187 '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:187 Constant: +0:187 6 (const uint) +0:187 i1: direct index for structure ( uniform int) +0:187 '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:187 Constant: +0:187 5 (const uint) +0:188 imageAtomicOr ( temp int) +0:188 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:188 i2: direct index for structure ( uniform 2-component vector of int) +0:188 '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:188 Constant: +0:188 6 (const uint) +0:188 i1b: direct index for structure ( uniform int) +0:188 '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:188 Constant: +0:188 8 (const uint) +0:189 move second child to first child ( temp int) +0:189 'out_i1' ( temp int) +0:189 imageAtomicOr ( temp int) +0:189 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:189 i2: direct index for structure ( uniform 2-component vector of int) +0:189 '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:189 Constant: +0:189 6 (const uint) +0:189 i1: direct index for structure ( uniform int) +0:189 '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:189 Constant: +0:189 5 (const uint) +0:190 imageAtomicXor ( temp int) +0:190 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:190 i2: direct index for structure ( uniform 2-component vector of int) +0:190 '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:190 Constant: +0:190 6 (const uint) +0:190 i1b: direct index for structure ( uniform int) +0:190 '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:190 Constant: +0:190 8 (const uint) +0:191 move second child to first child ( temp int) +0:191 'out_i1' ( temp int) +0:191 imageAtomicXor ( temp int) +0:191 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:191 i2: direct index for structure ( uniform 2-component vector of int) +0:191 '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:191 Constant: +0:191 6 (const uint) +0:191 i1: direct index for structure ( uniform int) +0:191 '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:191 Constant: +0:191 5 (const uint) +0:194 imageAtomicAdd ( temp uint) +0:194 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:194 u2: direct index for structure ( uniform 2-component vector of uint) +0:194 '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:194 Constant: +0:194 1 (const uint) +0:194 u1: direct index for structure ( uniform uint) +0:194 '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:194 Constant: +0:194 0 (const uint) +0:195 move second child to first child ( temp uint) +0:195 'out_u1' ( temp uint) +0:195 imageAtomicAdd ( temp uint) +0:195 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:195 u2: direct index for structure ( uniform 2-component vector of uint) +0:195 '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:195 Constant: +0:195 1 (const uint) +0:195 u1: direct index for structure ( uniform uint) +0:195 '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:195 Constant: +0:195 0 (const uint) +0:196 imageAtomicAnd ( temp uint) +0:196 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:196 u2: direct index for structure ( uniform 2-component vector of uint) +0:196 '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:196 Constant: +0:196 1 (const uint) +0:196 u1: direct index for structure ( uniform uint) +0:196 '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:196 Constant: +0:196 0 (const uint) +0:197 move second child to first child ( temp uint) +0:197 'out_u1' ( temp uint) +0:197 imageAtomicAnd ( temp uint) +0:197 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:197 u2: direct index for structure ( uniform 2-component vector of uint) +0:197 '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:197 Constant: +0:197 1 (const uint) +0:197 u1: direct index for structure ( uniform uint) +0:197 '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:197 Constant: +0:197 0 (const uint) +0:198 move second child to first child ( temp uint) +0:198 'out_u1' ( temp uint) +0:198 imageAtomicCompSwap ( temp uint) +0:198 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:198 u2: direct index for structure ( uniform 2-component vector of uint) +0:198 '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:198 Constant: +0:198 1 (const uint) +0:198 u1b: direct index for structure ( uniform uint) +0:198 '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:198 Constant: +0:198 3 (const uint) +0:198 u1c: direct index for structure ( uniform uint) +0:198 '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:198 Constant: +0:198 4 (const uint) +0:199 move second child to first child ( temp uint) +0:199 'out_u1' ( temp uint) +0:199 imageAtomicExchange ( temp uint) +0:199 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:199 u2: direct index for structure ( uniform 2-component vector of uint) +0:199 '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:199 Constant: +0:199 1 (const uint) +0:199 u1: direct index for structure ( uniform uint) +0:199 '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:199 Constant: +0:199 0 (const uint) +0:200 imageAtomicMax ( temp uint) +0:200 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:200 u2: direct index for structure ( uniform 2-component vector of uint) +0:200 '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:200 Constant: +0:200 1 (const uint) +0:200 u1: direct index for structure ( uniform uint) +0:200 '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:200 Constant: +0:200 0 (const uint) +0:201 move second child to first child ( temp uint) +0:201 'out_u1' ( temp uint) +0:201 imageAtomicMax ( temp uint) +0:201 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:201 u2: direct index for structure ( uniform 2-component vector of uint) +0:201 '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:201 Constant: +0:201 1 (const uint) +0:201 u1: direct index for structure ( uniform uint) +0:201 '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:201 Constant: +0:201 0 (const uint) +0:202 imageAtomicMin ( temp uint) +0:202 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:202 u2: direct index for structure ( uniform 2-component vector of uint) +0:202 '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:202 Constant: +0:202 1 (const uint) +0:202 u1: direct index for structure ( uniform uint) +0:202 '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:202 Constant: +0:202 0 (const uint) +0:203 move second child to first child ( temp uint) +0:203 'out_u1' ( temp uint) +0:203 imageAtomicMin ( temp uint) +0:203 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:203 u2: direct index for structure ( uniform 2-component vector of uint) +0:203 '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:203 Constant: +0:203 1 (const uint) +0:203 u1: direct index for structure ( uniform uint) +0:203 '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:203 Constant: +0:203 0 (const uint) +0:204 imageAtomicOr ( temp uint) +0:204 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:204 u2: direct index for structure ( uniform 2-component vector of uint) +0:204 '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:204 Constant: +0:204 1 (const uint) +0:204 u1: direct index for structure ( uniform uint) +0:204 '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:204 Constant: +0:204 0 (const uint) +0:205 move second child to first child ( temp uint) +0:205 'out_u1' ( temp uint) +0:205 imageAtomicOr ( temp uint) +0:205 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:205 u2: direct index for structure ( uniform 2-component vector of uint) +0:205 '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:205 Constant: +0:205 1 (const uint) +0:205 u1: direct index for structure ( uniform uint) +0:205 '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:205 Constant: +0:205 0 (const uint) +0:206 imageAtomicXor ( temp uint) +0:206 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:206 u2: direct index for structure ( uniform 2-component vector of uint) +0:206 '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:206 Constant: +0:206 1 (const uint) +0:206 u1: direct index for structure ( uniform uint) +0:206 '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:206 Constant: +0:206 0 (const uint) +0:207 move second child to first child ( temp uint) +0:207 'out_u1' ( temp uint) +0:207 imageAtomicXor ( temp uint) +0:207 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:207 u2: direct index for structure ( uniform 2-component vector of uint) +0:207 '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:207 Constant: +0:207 1 (const uint) +0:207 u1: direct index for structure ( uniform uint) +0:207 '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:207 Constant: +0:207 0 (const uint) +0:210 imageAtomicAdd ( temp int) +0:210 'g_tBuffI' (layout( r32i) uniform iimageBuffer) +0:210 i1: direct index for structure ( uniform int) +0:210 '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:210 Constant: +0:210 5 (const uint) +0:210 i1b: direct index for structure ( uniform int) +0:210 '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:210 Constant: +0:210 8 (const uint) +0:211 move second child to first child ( temp int) +0:211 'out_i1' ( temp int) +0:211 imageAtomicAdd ( temp int) +0:211 'g_tBuffI' (layout( r32i) uniform iimageBuffer) +0:211 i1: direct index for structure ( uniform int) +0:211 '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:211 Constant: +0:211 5 (const uint) +0:211 i1: direct index for structure ( uniform int) +0:211 '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:211 Constant: +0:211 5 (const uint) +0:212 imageAtomicAnd ( temp int) +0:212 'g_tBuffI' (layout( r32i) uniform iimageBuffer) +0:212 i1: direct index for structure ( uniform int) +0:212 '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:212 Constant: +0:212 5 (const uint) +0:212 i1b: direct index for structure ( uniform int) +0:212 '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:212 Constant: +0:212 8 (const uint) +0:213 move second child to first child ( temp int) +0:213 'out_i1' ( temp int) +0:213 imageAtomicAnd ( temp int) +0:213 'g_tBuffI' (layout( r32i) uniform iimageBuffer) +0:213 i1: direct index for structure ( uniform int) +0:213 '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:213 Constant: +0:213 5 (const uint) +0:213 i1: direct index for structure ( uniform int) +0:213 '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:213 Constant: +0:213 5 (const uint) +0:214 move second child to first child ( temp int) +0:214 'out_i1' ( temp int) +0:214 imageAtomicCompSwap ( temp int) +0:214 'g_tBuffI' (layout( r32i) uniform iimageBuffer) +0:214 i1: direct index for structure ( uniform int) +0:214 '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:214 Constant: +0:214 5 (const uint) +0:214 i1b: direct index for structure ( uniform int) +0:214 '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:214 Constant: +0:214 8 (const uint) +0:214 i1c: direct index for structure ( uniform int) +0:214 '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:214 Constant: +0:214 9 (const uint) +0:215 move second child to first child ( temp int) +0:215 'out_i1' ( temp int) +0:215 imageAtomicExchange ( temp int) +0:215 'g_tBuffI' (layout( r32i) uniform iimageBuffer) +0:215 i1: direct index for structure ( uniform int) +0:215 '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:215 Constant: +0:215 5 (const uint) +0:215 i1: direct index for structure ( uniform int) +0:215 '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:215 Constant: +0:215 5 (const uint) +0:216 imageAtomicMax ( temp int) +0:216 'g_tBuffI' (layout( r32i) uniform iimageBuffer) +0:216 i1: direct index for structure ( uniform int) +0:216 '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:216 Constant: +0:216 5 (const uint) +0:216 i1b: direct index for structure ( uniform int) +0:216 '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:216 Constant: +0:216 8 (const uint) +0:217 move second child to first child ( temp int) +0:217 'out_i1' ( temp int) +0:217 imageAtomicMax ( temp int) +0:217 'g_tBuffI' (layout( r32i) uniform iimageBuffer) +0:217 i1: direct index for structure ( uniform int) +0:217 '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:217 Constant: +0:217 5 (const uint) +0:217 i1: direct index for structure ( uniform int) +0:217 '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:217 Constant: +0:217 5 (const uint) +0:218 imageAtomicMin ( temp int) +0:218 'g_tBuffI' (layout( r32i) uniform iimageBuffer) +0:218 i1: direct index for structure ( uniform int) +0:218 '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:218 Constant: +0:218 5 (const uint) +0:218 i1b: direct index for structure ( uniform int) +0:218 '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:218 Constant: +0:218 8 (const uint) +0:219 move second child to first child ( temp int) +0:219 'out_i1' ( temp int) +0:219 imageAtomicMin ( temp int) +0:219 'g_tBuffI' (layout( r32i) uniform iimageBuffer) +0:219 i1: direct index for structure ( uniform int) +0:219 '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:219 Constant: +0:219 5 (const uint) +0:219 i1: direct index for structure ( uniform int) +0:219 '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:219 Constant: +0:219 5 (const uint) +0:220 imageAtomicOr ( temp int) +0:220 'g_tBuffI' (layout( r32i) uniform iimageBuffer) +0:220 i1: direct index for structure ( uniform int) +0:220 '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:220 Constant: +0:220 5 (const uint) +0:220 i1b: direct index for structure ( uniform int) +0:220 '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:220 Constant: +0:220 8 (const uint) +0:221 move second child to first child ( temp int) +0:221 'out_i1' ( temp int) +0:221 imageAtomicOr ( temp int) +0:221 'g_tBuffI' (layout( r32i) uniform iimageBuffer) +0:221 i1: direct index for structure ( uniform int) +0:221 '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:221 Constant: +0:221 5 (const uint) +0:221 i1: direct index for structure ( uniform int) +0:221 '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:221 Constant: +0:221 5 (const uint) +0:222 imageAtomicXor ( temp int) +0:222 'g_tBuffI' (layout( r32i) uniform iimageBuffer) +0:222 i1: direct index for structure ( uniform int) +0:222 '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:222 Constant: +0:222 5 (const uint) +0:222 i1b: direct index for structure ( uniform int) +0:222 '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:222 Constant: +0:222 8 (const uint) +0:223 move second child to first child ( temp int) +0:223 'out_i1' ( temp int) +0:223 imageAtomicXor ( temp int) +0:223 'g_tBuffI' (layout( r32i) uniform iimageBuffer) +0:223 i1: direct index for structure ( uniform int) +0:223 '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:223 Constant: +0:223 5 (const uint) +0:223 i1: direct index for structure ( uniform int) +0:223 '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:223 Constant: +0:223 5 (const uint) +0:226 imageAtomicAdd ( temp uint) +0:226 'g_tBuffU' (layout( r32ui) uniform uimageBuffer) +0:226 u1: direct index for structure ( uniform uint) +0:226 '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:226 Constant: +0:226 0 (const uint) +0:226 u1: direct index for structure ( uniform uint) +0:226 '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:226 Constant: +0:226 0 (const uint) +0:227 move second child to first child ( temp uint) +0:227 'out_u1' ( temp uint) +0:227 imageAtomicAdd ( temp uint) +0:227 'g_tBuffU' (layout( r32ui) uniform uimageBuffer) +0:227 u1: direct index for structure ( uniform uint) +0:227 '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:227 Constant: +0:227 0 (const uint) +0:227 u1: direct index for structure ( uniform uint) +0:227 '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:227 Constant: +0:227 0 (const uint) +0:228 imageAtomicAnd ( temp uint) +0:228 'g_tBuffU' (layout( r32ui) uniform uimageBuffer) +0:228 u1: direct index for structure ( uniform uint) +0:228 '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:228 Constant: +0:228 0 (const uint) +0:228 u1: direct index for structure ( uniform uint) +0:228 '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:228 Constant: +0:228 0 (const uint) +0:229 move second child to first child ( temp uint) +0:229 'out_u1' ( temp uint) +0:229 imageAtomicAnd ( temp uint) +0:229 'g_tBuffU' (layout( r32ui) uniform uimageBuffer) +0:229 u1: direct index for structure ( uniform uint) +0:229 '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:229 Constant: +0:229 0 (const uint) +0:229 u1: direct index for structure ( uniform uint) +0:229 '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:229 Constant: +0:229 0 (const uint) +0:230 move second child to first child ( temp uint) +0:230 'out_u1' ( temp uint) +0:230 imageAtomicCompSwap ( temp uint) +0:230 'g_tBuffU' (layout( r32ui) uniform uimageBuffer) +0:230 u1: direct index for structure ( uniform uint) +0:230 '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:230 Constant: +0:230 0 (const uint) +0:230 u1b: direct index for structure ( uniform uint) +0:230 '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:230 Constant: +0:230 3 (const uint) +0:230 u1c: direct index for structure ( uniform uint) +0:230 '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:230 Constant: +0:230 4 (const uint) +0:231 move second child to first child ( temp uint) +0:231 'out_u1' ( temp uint) +0:231 imageAtomicExchange ( temp uint) +0:231 'g_tBuffU' (layout( r32ui) uniform uimageBuffer) +0:231 u1: direct index for structure ( uniform uint) +0:231 '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:231 Constant: +0:231 0 (const uint) +0:231 u1: direct index for structure ( uniform uint) +0:231 '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:231 Constant: +0:231 0 (const uint) +0:232 imageAtomicMax ( temp uint) +0:232 'g_tBuffU' (layout( r32ui) uniform uimageBuffer) +0:232 u1: direct index for structure ( uniform uint) +0:232 '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:232 Constant: +0:232 0 (const uint) +0:232 u1: direct index for structure ( uniform uint) +0:232 '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:232 Constant: +0:232 0 (const uint) +0:233 move second child to first child ( temp uint) +0:233 'out_u1' ( temp uint) +0:233 imageAtomicMax ( temp uint) +0:233 'g_tBuffU' (layout( r32ui) uniform uimageBuffer) +0:233 u1: direct index for structure ( uniform uint) +0:233 '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:233 Constant: +0:233 0 (const uint) +0:233 u1: direct index for structure ( uniform uint) +0:233 '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:233 Constant: +0:233 0 (const uint) +0:234 imageAtomicMin ( temp uint) +0:234 'g_tBuffU' (layout( r32ui) uniform uimageBuffer) +0:234 u1: direct index for structure ( uniform uint) +0:234 '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:234 Constant: +0:234 0 (const uint) +0:234 u1: direct index for structure ( uniform uint) +0:234 '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:234 Constant: +0:234 0 (const uint) +0:235 move second child to first child ( temp uint) +0:235 'out_u1' ( temp uint) +0:235 imageAtomicMin ( temp uint) +0:235 'g_tBuffU' (layout( r32ui) uniform uimageBuffer) +0:235 u1: direct index for structure ( uniform uint) +0:235 '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:235 Constant: +0:235 0 (const uint) +0:235 u1: direct index for structure ( uniform uint) +0:235 '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:235 Constant: +0:235 0 (const uint) +0:236 imageAtomicOr ( temp uint) +0:236 'g_tBuffU' (layout( r32ui) uniform uimageBuffer) +0:236 u1: direct index for structure ( uniform uint) +0:236 '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:236 Constant: +0:236 0 (const uint) +0:236 u1: direct index for structure ( uniform uint) +0:236 '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:236 Constant: +0:236 0 (const uint) +0:237 move second child to first child ( temp uint) +0:237 'out_u1' ( temp uint) +0:237 imageAtomicOr ( temp uint) +0:237 'g_tBuffU' (layout( r32ui) uniform uimageBuffer) +0:237 u1: direct index for structure ( uniform uint) +0:237 '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:237 Constant: +0:237 0 (const uint) +0:237 u1: direct index for structure ( uniform uint) +0:237 '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:237 Constant: +0:237 0 (const uint) +0:238 imageAtomicXor ( temp uint) +0:238 'g_tBuffU' (layout( r32ui) uniform uimageBuffer) +0:238 u1: direct index for structure ( uniform uint) +0:238 '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:238 Constant: +0:238 0 (const uint) +0:238 u1: direct index for structure ( uniform uint) +0:238 '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:238 Constant: +0:238 0 (const uint) +0:239 move second child to first child ( temp uint) +0:239 'out_u1' ( temp uint) +0:239 imageAtomicXor ( temp uint) +0:239 'g_tBuffU' (layout( r32ui) uniform uimageBuffer) +0:239 u1: direct index for structure ( uniform uint) +0:239 '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:239 Constant: +0:239 0 (const uint) +0:239 u1: direct index for structure ( uniform uint) +0:239 '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:239 Constant: +0:239 0 (const uint) +0:242 move second child to first child ( temp 4-component vector of float) +0:242 Color: direct index for structure ( temp 4-component vector of float) +0:242 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:242 Constant: +0:242 0 (const int) +0:242 Constant: +0:242 1.000000 +0:242 1.000000 +0:242 1.000000 +0:242 1.000000 +0:243 Branch: Return with expression +0:243 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:45 Function Definition: main( ( temp void) +0:45 Function Parameters: +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: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:? 'g_sSamp' ( uniform sampler) +0:? 'g_tTex1df1' (layout( r32f) uniform image1D) +0:? 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:? 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:? 'g_tTex2df1' (layout( r32f) uniform image2D) +0:? 'g_tTex2di1' (layout( r32i) uniform iimage2D) +0:? 'g_tTex2du1' (layout( r32ui) uniform uimage2D) +0:? 'g_tTex3df1' (layout( r32f) uniform image3D) +0:? 'g_tTex3di1' (layout( r32i) uniform iimage3D) +0:? 'g_tTex3du1' (layout( r32ui) uniform uimage3D) +0:? 'g_tTex1df1a' (layout( r32f) uniform image1DArray) +0:? 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:? 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:? 'g_tTex2df1a' (layout( r32f) uniform image2DArray) +0:? 'g_tTex2di1a' (layout( r32i) uniform iimage2DArray) +0:? 'g_tTex2du1a' (layout( r32ui) uniform uimage2DArray) +0:? 'g_tBuffF' (layout( r32f) uniform imageBuffer) +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) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:45 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color}) +0:45 Function Parameters: +0:? Sequence +0:50 imageAtomicAdd ( temp int) +0:50 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:50 i1: direct index for structure ( uniform int) +0:50 '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:50 Constant: +0:50 5 (const uint) +0:50 i1b: direct index for structure ( uniform int) +0:50 '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:50 Constant: +0:50 8 (const uint) +0:51 move second child to first child ( temp int) +0:51 'out_i1' ( temp int) +0:51 imageAtomicAdd ( temp int) +0:51 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:51 i1: direct index for structure ( uniform int) +0:51 '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:51 Constant: +0:51 5 (const uint) +0:51 i1: direct index for structure ( uniform int) +0:51 '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:51 Constant: +0:51 5 (const uint) +0:52 imageAtomicAnd ( temp int) +0:52 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:52 i1: direct index for structure ( uniform int) +0:52 '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:52 Constant: +0:52 5 (const uint) +0:52 i1b: direct index for structure ( uniform int) +0:52 '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:52 Constant: +0:52 8 (const uint) +0:53 move second child to first child ( temp int) +0:53 'out_i1' ( temp int) +0:53 imageAtomicAnd ( temp int) +0:53 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:53 i1: direct index for structure ( uniform int) +0:53 '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:53 Constant: +0:53 5 (const uint) +0:53 i1: direct index for structure ( uniform int) +0:53 '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:53 Constant: +0:53 5 (const uint) +0:54 move second child to first child ( temp int) +0:54 'out_i1' ( temp int) +0:54 imageAtomicCompSwap ( temp int) +0:54 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:54 i1: direct index for structure ( uniform int) +0:54 '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:54 Constant: +0:54 5 (const uint) +0:54 i1b: direct index for structure ( uniform int) +0:54 '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:54 Constant: +0:54 8 (const uint) +0:54 i1c: direct index for structure ( uniform int) +0:54 '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:54 Constant: +0:54 9 (const uint) +0:55 move second child to first child ( temp int) +0:55 'out_i1' ( temp int) +0:55 imageAtomicExchange ( temp int) +0:55 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:55 i1: direct index for structure ( uniform int) +0:55 '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:55 Constant: +0:55 5 (const uint) +0:55 i1: direct index for structure ( uniform int) +0:55 '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:55 Constant: +0:55 5 (const uint) +0:56 imageAtomicMax ( temp int) +0:56 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:56 i1: direct index for structure ( uniform int) +0:56 '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:56 Constant: +0:56 5 (const uint) +0:56 i1b: direct index for structure ( uniform int) +0:56 '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:56 Constant: +0:56 8 (const uint) +0:57 move second child to first child ( temp int) +0:57 'out_i1' ( temp int) +0:57 imageAtomicMax ( temp int) +0:57 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:57 i1: direct index for structure ( uniform int) +0:57 '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:57 Constant: +0:57 5 (const uint) +0:57 i1: direct index for structure ( uniform int) +0:57 '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:57 Constant: +0:57 5 (const uint) +0:58 imageAtomicMin ( temp int) +0:58 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:58 i1: direct index for structure ( uniform int) +0:58 '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:58 Constant: +0:58 5 (const uint) +0:58 i1b: direct index for structure ( uniform int) +0:58 '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:58 Constant: +0:58 8 (const uint) +0:59 move second child to first child ( temp int) +0:59 'out_i1' ( temp int) +0:59 imageAtomicMin ( temp int) +0:59 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:59 i1: direct index for structure ( uniform int) +0:59 '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:59 Constant: +0:59 5 (const uint) +0:59 i1: direct index for structure ( uniform int) +0:59 '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:59 Constant: +0:59 5 (const uint) +0:60 imageAtomicOr ( temp int) +0:60 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:60 i1: direct index for structure ( uniform int) +0:60 '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:60 Constant: +0:60 5 (const uint) +0:60 i1b: direct index for structure ( uniform int) +0:60 '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:60 Constant: +0:60 8 (const uint) +0:61 move second child to first child ( temp int) +0:61 'out_i1' ( temp int) +0:61 imageAtomicOr ( temp int) +0:61 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:61 i1: direct index for structure ( uniform int) +0:61 '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:61 Constant: +0:61 5 (const uint) +0:61 i1: direct index for structure ( uniform int) +0:61 '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:61 Constant: +0:61 5 (const uint) +0:62 imageAtomicXor ( temp int) +0:62 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:62 i1: direct index for structure ( uniform int) +0:62 '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:62 Constant: +0:62 5 (const uint) +0:62 i1b: direct index for structure ( uniform int) +0:62 '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:62 Constant: +0:62 8 (const uint) +0:63 move second child to first child ( temp int) +0:63 'out_i1' ( temp int) +0:63 imageAtomicXor ( temp int) +0:63 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:63 i1: direct index for structure ( uniform int) +0:63 '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:63 Constant: +0:63 5 (const uint) +0:63 i1: direct index for structure ( uniform int) +0:63 '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:63 Constant: +0:63 5 (const uint) +0:66 imageAtomicAdd ( temp uint) +0:66 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:66 u1: direct index for structure ( uniform uint) +0:66 '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:66 Constant: +0:66 0 (const uint) +0:66 u1: direct index for structure ( uniform uint) +0:66 '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:66 Constant: +0:66 0 (const uint) +0:67 move second child to first child ( temp uint) +0:67 'out_u1' ( temp uint) +0:67 imageAtomicAdd ( temp uint) +0:67 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:67 u1: direct index for structure ( uniform uint) +0:67 '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:67 Constant: +0:67 0 (const uint) +0:67 u1: direct index for structure ( uniform uint) +0:67 '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:67 Constant: +0:67 0 (const uint) +0:68 imageAtomicAnd ( temp uint) +0:68 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:68 u1: direct index for structure ( uniform uint) +0:68 '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:68 Constant: +0:68 0 (const uint) +0:68 u1: direct index for structure ( uniform uint) +0:68 '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:68 Constant: +0:68 0 (const uint) +0:69 move second child to first child ( temp uint) +0:69 'out_u1' ( temp uint) +0:69 imageAtomicAnd ( temp uint) +0:69 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:69 u1: direct index for structure ( uniform uint) +0:69 '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:69 Constant: +0:69 0 (const uint) +0:69 u1: direct index for structure ( uniform uint) +0:69 '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:69 Constant: +0:69 0 (const uint) +0:70 move second child to first child ( temp uint) +0:70 'out_u1' ( temp uint) +0:70 imageAtomicCompSwap ( temp uint) +0:70 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:70 u1: direct index for structure ( uniform uint) +0:70 '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:70 Constant: +0:70 0 (const uint) +0:70 u1b: direct index for structure ( uniform uint) +0:70 '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:70 Constant: +0:70 3 (const uint) +0:70 u1c: direct index for structure ( uniform uint) +0:70 '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:70 Constant: +0:70 4 (const uint) +0:71 move second child to first child ( temp uint) +0:71 'out_u1' ( temp uint) +0:71 imageAtomicExchange ( temp uint) +0:71 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:71 u1: direct index for structure ( uniform uint) +0:71 '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:71 Constant: +0:71 0 (const uint) +0:71 u1: direct index for structure ( uniform uint) +0:71 '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:71 Constant: +0:71 0 (const uint) +0:72 imageAtomicMax ( temp uint) +0:72 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:72 u1: direct index for structure ( uniform uint) +0:72 '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:72 Constant: +0:72 0 (const uint) +0:72 u1: direct index for structure ( uniform uint) +0:72 '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:72 Constant: +0:72 0 (const uint) +0:73 move second child to first child ( temp uint) +0:73 'out_u1' ( temp uint) +0:73 imageAtomicMax ( temp uint) +0:73 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:73 u1: direct index for structure ( uniform uint) +0:73 '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:73 Constant: +0:73 0 (const uint) +0:73 u1: direct index for structure ( uniform uint) +0:73 '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:73 Constant: +0:73 0 (const uint) +0:74 imageAtomicMin ( temp uint) +0:74 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:74 u1: direct index for structure ( uniform uint) +0:74 '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:74 Constant: +0:74 0 (const uint) +0:74 u1: direct index for structure ( uniform uint) +0:74 '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:74 Constant: +0:74 0 (const uint) +0:75 move second child to first child ( temp uint) +0:75 'out_u1' ( temp uint) +0:75 imageAtomicMin ( temp uint) +0:75 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:75 u1: direct index for structure ( uniform uint) +0:75 '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:75 Constant: +0:75 0 (const uint) +0:75 u1: direct index for structure ( uniform uint) +0:75 '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:75 Constant: +0:75 0 (const uint) +0:76 imageAtomicOr ( temp uint) +0:76 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:76 u1: direct index for structure ( uniform uint) +0:76 '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:76 Constant: +0:76 0 (const uint) +0:76 u1: direct index for structure ( uniform uint) +0:76 '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:76 Constant: +0:76 0 (const uint) +0:77 move second child to first child ( temp uint) +0:77 'out_u1' ( temp uint) +0:77 imageAtomicOr ( temp uint) +0:77 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:77 u1: direct index for structure ( uniform uint) +0:77 '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:77 Constant: +0:77 0 (const uint) +0:77 u1: direct index for structure ( uniform uint) +0:77 '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:77 Constant: +0:77 0 (const uint) +0:78 imageAtomicXor ( temp uint) +0:78 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:78 u1: direct index for structure ( uniform uint) +0:78 '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:78 Constant: +0:78 0 (const uint) +0:78 u1: direct index for structure ( uniform uint) +0:78 '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:78 Constant: +0:78 0 (const uint) +0:79 move second child to first child ( temp uint) +0:79 'out_u1' ( temp uint) +0:79 imageAtomicXor ( temp uint) +0:79 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:79 u1: direct index for structure ( uniform uint) +0:79 '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:79 Constant: +0:79 0 (const uint) +0:79 u1: direct index for structure ( uniform uint) +0:79 '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:79 Constant: +0:79 0 (const uint) +0:82 imageAtomicAdd ( temp int) +0:82 'g_tTex2di1' (layout( r32i) uniform iimage2D) +0:82 i2: direct index for structure ( uniform 2-component vector of int) +0:82 '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:82 Constant: +0:82 6 (const uint) +0:82 i1b: direct index for structure ( uniform int) +0:82 '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:82 Constant: +0:82 8 (const uint) +0:83 move second child to first child ( temp int) +0:83 'out_i1' ( temp int) +0:83 imageAtomicAdd ( temp int) +0:83 'g_tTex2di1' (layout( r32i) uniform iimage2D) +0:83 i2: direct index for structure ( uniform 2-component vector of int) +0:83 '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:83 Constant: +0:83 6 (const uint) +0:83 i1: direct index for structure ( uniform int) +0:83 '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:83 Constant: +0:83 5 (const uint) +0:84 imageAtomicAnd ( temp int) +0:84 'g_tTex2di1' (layout( r32i) uniform iimage2D) +0:84 i2: direct index for structure ( uniform 2-component vector of int) +0:84 '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:84 Constant: +0:84 6 (const uint) +0:84 i1b: direct index for structure ( uniform int) +0:84 '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:84 Constant: +0:84 8 (const uint) +0:85 move second child to first child ( temp int) +0:85 'out_i1' ( temp int) +0:85 imageAtomicAnd ( temp int) +0:85 'g_tTex2di1' (layout( r32i) uniform iimage2D) +0:85 i2: direct index for structure ( uniform 2-component vector of int) +0:85 '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:85 Constant: +0:85 6 (const uint) +0:85 i1: direct index for structure ( uniform int) +0:85 '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:85 Constant: +0:85 5 (const uint) +0:86 move second child to first child ( temp int) +0:86 'out_i1' ( temp int) +0:86 imageAtomicCompSwap ( temp int) +0:86 'g_tTex2di1' (layout( r32i) uniform iimage2D) +0:86 i2: direct index for structure ( uniform 2-component vector of int) +0:86 '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:86 Constant: +0:86 6 (const uint) +0:86 i1b: direct index for structure ( uniform int) +0:86 '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:86 Constant: +0:86 8 (const uint) +0:86 i1c: direct index for structure ( uniform int) +0:86 '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:86 Constant: +0:86 9 (const uint) +0:87 move second child to first child ( temp int) +0:87 'out_i1' ( temp int) +0:87 imageAtomicExchange ( temp int) +0:87 'g_tTex2di1' (layout( r32i) uniform iimage2D) +0:87 i2: direct index for structure ( uniform 2-component vector of int) +0:87 '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:87 Constant: +0:87 6 (const uint) +0:87 i1: direct index for structure ( uniform int) +0:87 '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:87 Constant: +0:87 5 (const uint) +0:88 imageAtomicMax ( temp int) +0:88 'g_tTex2di1' (layout( r32i) uniform iimage2D) +0:88 i2: direct index for structure ( uniform 2-component vector of int) +0:88 '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:88 Constant: +0:88 6 (const uint) +0:88 i1b: direct index for structure ( uniform int) +0:88 '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:88 Constant: +0:88 8 (const uint) +0:89 move second child to first child ( temp int) +0:89 'out_i1' ( temp int) +0:89 imageAtomicMax ( temp int) +0:89 'g_tTex2di1' (layout( r32i) uniform iimage2D) +0:89 i2: direct index for structure ( uniform 2-component vector of int) +0:89 '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:89 Constant: +0:89 6 (const uint) +0:89 i1: direct index for structure ( uniform int) +0:89 '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:89 Constant: +0:89 5 (const uint) +0:90 imageAtomicMin ( temp int) +0:90 'g_tTex2di1' (layout( r32i) uniform iimage2D) +0:90 i2: direct index for structure ( uniform 2-component vector of int) +0:90 '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:90 Constant: +0:90 6 (const uint) +0:90 i1b: direct index for structure ( uniform int) +0:90 '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:90 Constant: +0:90 8 (const uint) +0:91 move second child to first child ( temp int) +0:91 'out_i1' ( temp int) +0:91 imageAtomicMin ( temp int) +0:91 'g_tTex2di1' (layout( r32i) uniform iimage2D) +0:91 i2: direct index for structure ( uniform 2-component vector of int) +0:91 '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:91 Constant: +0:91 6 (const uint) +0:91 i1: direct index for structure ( uniform int) +0:91 '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:91 Constant: +0:91 5 (const uint) +0:92 imageAtomicOr ( temp int) +0:92 'g_tTex2di1' (layout( r32i) uniform iimage2D) +0:92 i2: direct index for structure ( uniform 2-component vector of int) +0:92 '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:92 Constant: +0:92 6 (const uint) +0:92 i1b: direct index for structure ( uniform int) +0:92 '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:92 Constant: +0:92 8 (const uint) +0:93 move second child to first child ( temp int) +0:93 'out_i1' ( temp int) +0:93 imageAtomicOr ( temp int) +0:93 'g_tTex2di1' (layout( r32i) uniform iimage2D) +0:93 i2: direct index for structure ( uniform 2-component vector of int) +0:93 '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:93 Constant: +0:93 6 (const uint) +0:93 i1: direct index for structure ( uniform int) +0:93 '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:93 Constant: +0:93 5 (const uint) +0:94 imageAtomicXor ( temp int) +0:94 'g_tTex2di1' (layout( r32i) uniform iimage2D) +0:94 i2: direct index for structure ( uniform 2-component vector of int) +0:94 '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:94 Constant: +0:94 6 (const uint) +0:94 i1b: direct index for structure ( uniform int) +0:94 '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:94 Constant: +0:94 8 (const uint) +0:95 move second child to first child ( temp int) +0:95 'out_i1' ( temp int) +0:95 imageAtomicXor ( temp int) +0:95 'g_tTex2di1' (layout( r32i) uniform iimage2D) +0:95 i2: direct index for structure ( uniform 2-component vector of int) +0:95 '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:95 Constant: +0:95 6 (const uint) +0:95 i1: direct index for structure ( uniform int) +0:95 '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:95 Constant: +0:95 5 (const uint) +0:98 imageAtomicAdd ( temp uint) +0:98 'g_tTex2du1' (layout( r32ui) uniform uimage2D) +0:98 u2: direct index for structure ( uniform 2-component vector of uint) +0:98 '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:98 Constant: +0:98 1 (const uint) +0:98 u1: direct index for structure ( uniform uint) +0:98 '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:98 Constant: +0:98 0 (const uint) +0:99 move second child to first child ( temp uint) +0:99 'out_u1' ( temp uint) +0:99 imageAtomicAdd ( temp uint) +0:99 'g_tTex2du1' (layout( r32ui) uniform uimage2D) +0:99 u2: direct index for structure ( uniform 2-component vector of uint) +0:99 '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:99 Constant: +0:99 1 (const uint) +0:99 u1: direct index for structure ( uniform uint) +0:99 '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:99 Constant: +0:99 0 (const uint) +0:100 imageAtomicAnd ( temp uint) +0:100 'g_tTex2du1' (layout( r32ui) uniform uimage2D) +0:100 u2: direct index for structure ( uniform 2-component vector of uint) +0:100 '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:100 Constant: +0:100 1 (const uint) +0:100 u1: direct index for structure ( uniform uint) +0:100 '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:100 Constant: +0:100 0 (const uint) +0:101 move second child to first child ( temp uint) +0:101 'out_u1' ( temp uint) +0:101 imageAtomicAnd ( temp uint) +0:101 'g_tTex2du1' (layout( r32ui) uniform uimage2D) +0:101 u2: direct index for structure ( uniform 2-component vector of uint) +0:101 '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:101 Constant: +0:101 1 (const uint) +0:101 u1: direct index for structure ( uniform uint) +0:101 '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:101 Constant: +0:101 0 (const uint) +0:102 move second child to first child ( temp uint) +0:102 'out_u1' ( temp uint) +0:102 imageAtomicCompSwap ( temp uint) +0:102 'g_tTex2du1' (layout( r32ui) uniform uimage2D) +0:102 u2: direct index for structure ( uniform 2-component vector of uint) +0:102 '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:102 Constant: +0:102 1 (const uint) +0:102 u1b: direct index for structure ( uniform uint) +0:102 '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:102 Constant: +0:102 3 (const uint) +0:102 u1c: direct index for structure ( uniform uint) +0:102 '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:102 Constant: +0:102 4 (const uint) +0:103 move second child to first child ( temp uint) +0:103 'out_u1' ( temp uint) +0:103 imageAtomicExchange ( temp uint) +0:103 'g_tTex2du1' (layout( r32ui) uniform uimage2D) +0:103 u2: direct index for structure ( uniform 2-component vector of uint) +0:103 '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:103 Constant: +0:103 1 (const uint) +0:103 u1: direct index for structure ( uniform uint) +0:103 '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:103 Constant: +0:103 0 (const uint) +0:104 imageAtomicMax ( temp uint) +0:104 'g_tTex2du1' (layout( r32ui) uniform uimage2D) +0:104 u2: direct index for structure ( uniform 2-component vector of uint) +0:104 '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:104 Constant: +0:104 1 (const uint) +0:104 u1: direct index for structure ( uniform uint) +0:104 '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:104 Constant: +0:104 0 (const uint) +0:105 move second child to first child ( temp uint) +0:105 'out_u1' ( temp uint) +0:105 imageAtomicMax ( temp uint) +0:105 'g_tTex2du1' (layout( r32ui) uniform uimage2D) +0:105 u2: direct index for structure ( uniform 2-component vector of uint) +0:105 '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:105 Constant: +0:105 1 (const uint) +0:105 u1: direct index for structure ( uniform uint) +0:105 '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:105 Constant: +0:105 0 (const uint) +0:106 imageAtomicMin ( temp uint) +0:106 'g_tTex2du1' (layout( r32ui) uniform uimage2D) +0:106 u2: direct index for structure ( uniform 2-component vector of uint) +0:106 '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:106 Constant: +0:106 1 (const uint) +0:106 u1: direct index for structure ( uniform uint) +0:106 '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:106 Constant: +0:106 0 (const uint) +0:107 move second child to first child ( temp uint) +0:107 'out_u1' ( temp uint) +0:107 imageAtomicMin ( temp uint) +0:107 'g_tTex2du1' (layout( r32ui) uniform uimage2D) +0:107 u2: direct index for structure ( uniform 2-component vector of uint) +0:107 '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:107 Constant: +0:107 1 (const uint) +0:107 u1: direct index for structure ( uniform uint) +0:107 '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:107 Constant: +0:107 0 (const uint) +0:108 imageAtomicOr ( temp uint) +0:108 'g_tTex2du1' (layout( r32ui) uniform uimage2D) +0:108 u2: direct index for structure ( uniform 2-component vector of uint) +0:108 '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:108 Constant: +0:108 1 (const uint) +0:108 u1: direct index for structure ( uniform uint) +0:108 '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:108 Constant: +0:108 0 (const uint) +0:109 move second child to first child ( temp uint) +0:109 'out_u1' ( temp uint) +0:109 imageAtomicOr ( temp uint) +0:109 'g_tTex2du1' (layout( r32ui) uniform uimage2D) +0:109 u2: direct index for structure ( uniform 2-component vector of uint) +0:109 '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:109 Constant: +0:109 1 (const uint) +0:109 u1: direct index for structure ( uniform uint) +0:109 '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:109 Constant: +0:109 0 (const uint) +0:110 imageAtomicXor ( temp uint) +0:110 'g_tTex2du1' (layout( r32ui) uniform uimage2D) +0:110 u2: direct index for structure ( uniform 2-component vector of uint) +0:110 '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:110 Constant: +0:110 1 (const uint) +0:110 u1: direct index for structure ( uniform uint) +0:110 '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:110 Constant: +0:110 0 (const uint) +0:111 move second child to first child ( temp uint) +0:111 'out_u1' ( temp uint) +0:111 imageAtomicXor ( temp uint) +0:111 'g_tTex2du1' (layout( r32ui) uniform uimage2D) +0:111 u2: direct index for structure ( uniform 2-component vector of uint) +0:111 '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:111 Constant: +0:111 1 (const uint) +0:111 u1: direct index for structure ( uniform uint) +0:111 '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:111 Constant: +0:111 0 (const uint) +0:114 imageAtomicAdd ( temp int) +0:114 'g_tTex3di1' (layout( r32i) uniform iimage3D) +0:114 i3: direct index for structure ( uniform 3-component vector of int) +0:114 '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:114 Constant: +0:114 7 (const uint) +0:114 i1b: direct index for structure ( uniform int) +0:114 '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:114 Constant: +0:114 8 (const uint) +0:115 move second child to first child ( temp int) +0:115 'out_i1' ( temp int) +0:115 imageAtomicAdd ( temp int) +0:115 'g_tTex3di1' (layout( r32i) uniform iimage3D) +0:115 i3: direct index for structure ( uniform 3-component vector of int) +0:115 '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:115 Constant: +0:115 7 (const uint) +0:115 i1: direct index for structure ( uniform int) +0:115 '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:115 Constant: +0:115 5 (const uint) +0:116 imageAtomicAnd ( temp int) +0:116 'g_tTex3di1' (layout( r32i) uniform iimage3D) +0:116 i3: direct index for structure ( uniform 3-component vector of int) +0:116 '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:116 Constant: +0:116 7 (const uint) +0:116 i1b: direct index for structure ( uniform int) +0:116 '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:116 Constant: +0:116 8 (const uint) +0:117 move second child to first child ( temp int) +0:117 'out_i1' ( temp int) +0:117 imageAtomicAnd ( temp int) +0:117 'g_tTex3di1' (layout( r32i) uniform iimage3D) +0:117 i3: direct index for structure ( uniform 3-component vector of int) +0:117 '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:117 Constant: +0:117 7 (const uint) +0:117 i1: direct index for structure ( uniform int) +0:117 '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:117 Constant: +0:117 5 (const uint) +0:118 move second child to first child ( temp int) +0:118 'out_i1' ( temp int) +0:118 imageAtomicCompSwap ( temp int) +0:118 'g_tTex3di1' (layout( r32i) uniform iimage3D) +0:118 i3: direct index for structure ( uniform 3-component vector of int) +0:118 '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:118 Constant: +0:118 7 (const uint) +0:118 i1b: direct index for structure ( uniform int) +0:118 '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:118 Constant: +0:118 8 (const uint) +0:118 i1c: direct index for structure ( uniform int) +0:118 '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:118 Constant: +0:118 9 (const uint) +0:119 move second child to first child ( temp int) +0:119 'out_i1' ( temp int) +0:119 imageAtomicExchange ( temp int) +0:119 'g_tTex3di1' (layout( r32i) uniform iimage3D) +0:119 i3: direct index for structure ( uniform 3-component vector of int) +0:119 '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:119 Constant: +0:119 7 (const uint) +0:119 i1: direct index for structure ( uniform int) +0:119 '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:119 Constant: +0:119 5 (const uint) +0:120 imageAtomicMax ( temp int) +0:120 'g_tTex3di1' (layout( r32i) uniform iimage3D) +0:120 i3: direct index for structure ( uniform 3-component vector of int) +0:120 '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:120 Constant: +0:120 7 (const uint) +0:120 i1b: direct index for structure ( uniform int) +0:120 '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:120 Constant: +0:120 8 (const uint) +0:121 move second child to first child ( temp int) +0:121 'out_i1' ( temp int) +0:121 imageAtomicMax ( temp int) +0:121 'g_tTex3di1' (layout( r32i) uniform iimage3D) +0:121 i3: direct index for structure ( uniform 3-component vector of int) +0:121 '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:121 Constant: +0:121 7 (const uint) +0:121 i1: direct index for structure ( uniform int) +0:121 '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:121 Constant: +0:121 5 (const uint) +0:122 imageAtomicMin ( temp int) +0:122 'g_tTex3di1' (layout( r32i) uniform iimage3D) +0:122 i3: direct index for structure ( uniform 3-component vector of int) +0:122 '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:122 Constant: +0:122 7 (const uint) +0:122 i1b: direct index for structure ( uniform int) +0:122 '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:122 Constant: +0:122 8 (const uint) +0:123 move second child to first child ( temp int) +0:123 'out_i1' ( temp int) +0:123 imageAtomicMin ( temp int) +0:123 'g_tTex3di1' (layout( r32i) uniform iimage3D) +0:123 i3: direct index for structure ( uniform 3-component vector of int) +0:123 '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:123 Constant: +0:123 7 (const uint) +0:123 i1: direct index for structure ( uniform int) +0:123 '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:123 Constant: +0:123 5 (const uint) +0:124 imageAtomicOr ( temp int) +0:124 'g_tTex3di1' (layout( r32i) uniform iimage3D) +0:124 i3: direct index for structure ( uniform 3-component vector of int) +0:124 '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:124 Constant: +0:124 7 (const uint) +0:124 i1b: direct index for structure ( uniform int) +0:124 '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:124 Constant: +0:124 8 (const uint) +0:125 move second child to first child ( temp int) +0:125 'out_i1' ( temp int) +0:125 imageAtomicOr ( temp int) +0:125 'g_tTex3di1' (layout( r32i) uniform iimage3D) +0:125 i3: direct index for structure ( uniform 3-component vector of int) +0:125 '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:125 Constant: +0:125 7 (const uint) +0:125 i1: direct index for structure ( uniform int) +0:125 '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:125 Constant: +0:125 5 (const uint) +0:126 imageAtomicXor ( temp int) +0:126 'g_tTex3di1' (layout( r32i) uniform iimage3D) +0:126 i3: direct index for structure ( uniform 3-component vector of int) +0:126 '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:126 Constant: +0:126 7 (const uint) +0:126 i1b: direct index for structure ( uniform int) +0:126 '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:126 Constant: +0:126 8 (const uint) +0:127 move second child to first child ( temp int) +0:127 'out_i1' ( temp int) +0:127 imageAtomicXor ( temp int) +0:127 'g_tTex3di1' (layout( r32i) uniform iimage3D) +0:127 i3: direct index for structure ( uniform 3-component vector of int) +0:127 '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:127 Constant: +0:127 7 (const uint) +0:127 i1: direct index for structure ( uniform int) +0:127 '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:127 Constant: +0:127 5 (const uint) +0:130 imageAtomicAdd ( temp uint) +0:130 'g_tTex3du1' (layout( r32ui) uniform uimage3D) +0:130 u3: direct index for structure ( uniform 3-component vector of uint) +0:130 '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:130 Constant: +0:130 2 (const uint) +0:130 u1: direct index for structure ( uniform uint) +0:130 '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:130 Constant: +0:130 0 (const uint) +0:131 move second child to first child ( temp uint) +0:131 'out_u1' ( temp uint) +0:131 imageAtomicAdd ( temp uint) +0:131 'g_tTex3du1' (layout( r32ui) uniform uimage3D) +0:131 u3: direct index for structure ( uniform 3-component vector of uint) +0:131 '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:131 Constant: +0:131 2 (const uint) +0:131 u1: direct index for structure ( uniform uint) +0:131 '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:131 Constant: +0:131 0 (const uint) +0:132 imageAtomicAnd ( temp uint) +0:132 'g_tTex3du1' (layout( r32ui) uniform uimage3D) +0:132 u3: direct index for structure ( uniform 3-component vector of uint) +0:132 '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:132 Constant: +0:132 2 (const uint) +0:132 u1: direct index for structure ( uniform uint) +0:132 '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:132 Constant: +0:132 0 (const uint) +0:133 move second child to first child ( temp uint) +0:133 'out_u1' ( temp uint) +0:133 imageAtomicAnd ( temp uint) +0:133 'g_tTex3du1' (layout( r32ui) uniform uimage3D) +0:133 u3: direct index for structure ( uniform 3-component vector of uint) +0:133 '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:133 Constant: +0:133 2 (const uint) +0:133 u1: direct index for structure ( uniform uint) +0:133 '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:133 Constant: +0:133 0 (const uint) +0:134 move second child to first child ( temp uint) +0:134 'out_u1' ( temp uint) +0:134 imageAtomicCompSwap ( temp uint) +0:134 'g_tTex3du1' (layout( r32ui) uniform uimage3D) +0:134 u3: direct index for structure ( uniform 3-component vector of uint) +0:134 '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:134 Constant: +0:134 2 (const uint) +0:134 u1b: direct index for structure ( uniform uint) +0:134 '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:134 Constant: +0:134 3 (const uint) +0:134 u1c: direct index for structure ( uniform uint) +0:134 '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:134 Constant: +0:134 4 (const uint) +0:135 move second child to first child ( temp uint) +0:135 'out_u1' ( temp uint) +0:135 imageAtomicExchange ( temp uint) +0:135 'g_tTex3du1' (layout( r32ui) uniform uimage3D) +0:135 u3: direct index for structure ( uniform 3-component vector of uint) +0:135 '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:135 Constant: +0:135 2 (const uint) +0:135 u1: direct index for structure ( uniform uint) +0:135 '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:135 Constant: +0:135 0 (const uint) +0:136 imageAtomicMax ( temp uint) +0:136 'g_tTex3du1' (layout( r32ui) uniform uimage3D) +0:136 u3: direct index for structure ( uniform 3-component vector of uint) +0:136 '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:136 Constant: +0:136 2 (const uint) +0:136 u1: direct index for structure ( uniform uint) +0:136 '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:136 Constant: +0:136 0 (const uint) +0:137 move second child to first child ( temp uint) +0:137 'out_u1' ( temp uint) +0:137 imageAtomicMax ( temp uint) +0:137 'g_tTex3du1' (layout( r32ui) uniform uimage3D) +0:137 u3: direct index for structure ( uniform 3-component vector of uint) +0:137 '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:137 Constant: +0:137 2 (const uint) +0:137 u1: direct index for structure ( uniform uint) +0:137 '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:137 Constant: +0:137 0 (const uint) +0:138 imageAtomicMin ( temp uint) +0:138 'g_tTex3du1' (layout( r32ui) uniform uimage3D) +0:138 u3: direct index for structure ( uniform 3-component vector of uint) +0:138 '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:138 Constant: +0:138 2 (const uint) +0:138 u1: direct index for structure ( uniform uint) +0:138 '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:138 Constant: +0:138 0 (const uint) +0:139 move second child to first child ( temp uint) +0:139 'out_u1' ( temp uint) +0:139 imageAtomicMin ( temp uint) +0:139 'g_tTex3du1' (layout( r32ui) uniform uimage3D) +0:139 u3: direct index for structure ( uniform 3-component vector of uint) +0:139 '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:139 Constant: +0:139 2 (const uint) +0:139 u1: direct index for structure ( uniform uint) +0:139 '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:139 Constant: +0:139 0 (const uint) +0:140 imageAtomicOr ( temp uint) +0:140 'g_tTex3du1' (layout( r32ui) uniform uimage3D) +0:140 u3: direct index for structure ( uniform 3-component vector of uint) +0:140 '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:140 Constant: +0:140 2 (const uint) +0:140 u1: direct index for structure ( uniform uint) +0:140 '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:140 Constant: +0:140 0 (const uint) +0:141 move second child to first child ( temp uint) +0:141 'out_u1' ( temp uint) +0:141 imageAtomicOr ( temp uint) +0:141 'g_tTex3du1' (layout( r32ui) uniform uimage3D) +0:141 u3: direct index for structure ( uniform 3-component vector of uint) +0:141 '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:141 Constant: +0:141 2 (const uint) +0:141 u1: direct index for structure ( uniform uint) +0:141 '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:141 Constant: +0:141 0 (const uint) +0:142 imageAtomicXor ( temp uint) +0:142 'g_tTex3du1' (layout( r32ui) uniform uimage3D) +0:142 u3: direct index for structure ( uniform 3-component vector of uint) +0:142 '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:142 Constant: +0:142 2 (const uint) +0:142 u1: direct index for structure ( uniform uint) +0:142 '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:142 Constant: +0:142 0 (const uint) +0:143 move second child to first child ( temp uint) +0:143 'out_u1' ( temp uint) +0:143 imageAtomicXor ( temp uint) +0:143 'g_tTex3du1' (layout( r32ui) uniform uimage3D) +0:143 u3: direct index for structure ( uniform 3-component vector of uint) +0:143 '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:143 Constant: +0:143 2 (const uint) +0:143 u1: direct index for structure ( uniform uint) +0:143 '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:143 Constant: +0:143 0 (const uint) +0:146 imageAtomicAdd ( temp int) +0:146 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:146 i2: direct index for structure ( uniform 2-component vector of int) +0:146 '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:146 Constant: +0:146 6 (const uint) +0:146 i1b: direct index for structure ( uniform int) +0:146 '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:146 Constant: +0:146 8 (const uint) +0:147 move second child to first child ( temp int) +0:147 'out_i1' ( temp int) +0:147 imageAtomicAdd ( temp int) +0:147 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:147 i2: direct index for structure ( uniform 2-component vector of int) +0:147 '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:147 Constant: +0:147 6 (const uint) +0:147 i1: direct index for structure ( uniform int) +0:147 '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:147 Constant: +0:147 5 (const uint) +0:148 imageAtomicAnd ( temp int) +0:148 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:148 i2: direct index for structure ( uniform 2-component vector of int) +0:148 '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:148 Constant: +0:148 6 (const uint) +0:148 i1b: direct index for structure ( uniform int) +0:148 '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:148 Constant: +0:148 8 (const uint) +0:149 move second child to first child ( temp int) +0:149 'out_i1' ( temp int) +0:149 imageAtomicAnd ( temp int) +0:149 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:149 i2: direct index for structure ( uniform 2-component vector of int) +0:149 '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:149 Constant: +0:149 6 (const uint) +0:149 i1: direct index for structure ( uniform int) +0:149 '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:149 Constant: +0:149 5 (const uint) +0:150 move second child to first child ( temp int) +0:150 'out_i1' ( temp int) +0:150 imageAtomicCompSwap ( temp int) +0:150 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:150 i2: direct index for structure ( uniform 2-component vector of int) +0:150 '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:150 Constant: +0:150 6 (const uint) +0:150 i1b: direct index for structure ( uniform int) +0:150 '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:150 Constant: +0:150 8 (const uint) +0:150 i1c: direct index for structure ( uniform int) +0:150 '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:150 Constant: +0:150 9 (const uint) +0:151 move second child to first child ( temp int) +0:151 'out_i1' ( temp int) +0:151 imageAtomicExchange ( temp int) +0:151 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:151 i2: direct index for structure ( uniform 2-component vector of int) +0:151 '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:151 Constant: +0:151 6 (const uint) +0:151 i1: direct index for structure ( uniform int) +0:151 '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:151 Constant: +0:151 5 (const uint) +0:152 imageAtomicMax ( temp int) +0:152 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:152 i2: direct index for structure ( uniform 2-component vector of int) +0:152 '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:152 Constant: +0:152 6 (const uint) +0:152 i1b: direct index for structure ( uniform int) +0:152 '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:152 Constant: +0:152 8 (const uint) +0:153 move second child to first child ( temp int) +0:153 'out_i1' ( temp int) +0:153 imageAtomicMax ( temp int) +0:153 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:153 i2: direct index for structure ( uniform 2-component vector of int) +0:153 '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:153 Constant: +0:153 6 (const uint) +0:153 i1: direct index for structure ( uniform int) +0:153 '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:153 Constant: +0:153 5 (const uint) +0:154 imageAtomicMin ( temp int) +0:154 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:154 i2: direct index for structure ( uniform 2-component vector of int) +0:154 '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:154 Constant: +0:154 6 (const uint) +0:154 i1b: direct index for structure ( uniform int) +0:154 '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:154 Constant: +0:154 8 (const uint) +0:155 move second child to first child ( temp int) +0:155 'out_i1' ( temp int) +0:155 imageAtomicMin ( temp int) +0:155 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:155 i2: direct index for structure ( uniform 2-component vector of int) +0:155 '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:155 Constant: +0:155 6 (const uint) +0:155 i1: direct index for structure ( uniform int) +0:155 '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:155 Constant: +0:155 5 (const uint) +0:156 imageAtomicOr ( temp int) +0:156 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:156 i2: direct index for structure ( uniform 2-component vector of int) +0:156 '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:156 Constant: +0:156 6 (const uint) +0:156 i1b: direct index for structure ( uniform int) +0:156 '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:156 Constant: +0:156 8 (const uint) +0:157 move second child to first child ( temp int) +0:157 'out_i1' ( temp int) +0:157 imageAtomicOr ( temp int) +0:157 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:157 i2: direct index for structure ( uniform 2-component vector of int) +0:157 '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:157 Constant: +0:157 6 (const uint) +0:157 i1: direct index for structure ( uniform int) +0:157 '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:157 Constant: +0:157 5 (const uint) +0:158 imageAtomicXor ( temp int) +0:158 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:158 i2: direct index for structure ( uniform 2-component vector of int) +0:158 '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:158 Constant: +0:158 6 (const uint) +0:158 i1b: direct index for structure ( uniform int) +0:158 '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:158 Constant: +0:158 8 (const uint) +0:159 move second child to first child ( temp int) +0:159 'out_i1' ( temp int) +0:159 imageAtomicXor ( temp int) +0:159 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:159 i2: direct index for structure ( uniform 2-component vector of int) +0:159 '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:159 Constant: +0:159 6 (const uint) +0:159 i1: direct index for structure ( uniform int) +0:159 '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:159 Constant: +0:159 5 (const uint) +0:162 imageAtomicAdd ( temp uint) +0:162 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:162 u2: direct index for structure ( uniform 2-component vector of uint) +0:162 '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:162 Constant: +0:162 1 (const uint) +0:162 u1: direct index for structure ( uniform uint) +0:162 '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:162 Constant: +0:162 0 (const uint) +0:163 move second child to first child ( temp uint) +0:163 'out_u1' ( temp uint) +0:163 imageAtomicAdd ( temp uint) +0:163 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:163 u2: direct index for structure ( uniform 2-component vector of uint) +0:163 '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:163 Constant: +0:163 1 (const uint) +0:163 u1: direct index for structure ( uniform uint) +0:163 '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:163 Constant: +0:163 0 (const uint) +0:164 imageAtomicAnd ( temp uint) +0:164 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:164 u2: direct index for structure ( uniform 2-component vector of uint) +0:164 '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:164 Constant: +0:164 1 (const uint) +0:164 u1: direct index for structure ( uniform uint) +0:164 '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:164 Constant: +0:164 0 (const uint) +0:165 move second child to first child ( temp uint) +0:165 'out_u1' ( temp uint) +0:165 imageAtomicAnd ( temp uint) +0:165 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:165 u2: direct index for structure ( uniform 2-component vector of uint) +0:165 '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:165 Constant: +0:165 1 (const uint) +0:165 u1: direct index for structure ( uniform uint) +0:165 '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:165 Constant: +0:165 0 (const uint) +0:166 move second child to first child ( temp uint) +0:166 'out_u1' ( temp uint) +0:166 imageAtomicCompSwap ( temp uint) +0:166 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:166 u2: direct index for structure ( uniform 2-component vector of uint) +0:166 '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:166 Constant: +0:166 1 (const uint) +0:166 u1b: direct index for structure ( uniform uint) +0:166 '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:166 Constant: +0:166 3 (const uint) +0:166 u1c: direct index for structure ( uniform uint) +0:166 '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:166 Constant: +0:166 4 (const uint) +0:167 move second child to first child ( temp uint) +0:167 'out_u1' ( temp uint) +0:167 imageAtomicExchange ( temp uint) +0:167 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:167 u2: direct index for structure ( uniform 2-component vector of uint) +0:167 '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:167 Constant: +0:167 1 (const uint) +0:167 u1: direct index for structure ( uniform uint) +0:167 '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:167 Constant: +0:167 0 (const uint) +0:168 imageAtomicMax ( temp uint) +0:168 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:168 u2: direct index for structure ( uniform 2-component vector of uint) +0:168 '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:168 Constant: +0:168 1 (const uint) +0:168 u1: direct index for structure ( uniform uint) +0:168 '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:168 Constant: +0:168 0 (const uint) +0:169 move second child to first child ( temp uint) +0:169 'out_u1' ( temp uint) +0:169 imageAtomicMax ( temp uint) +0:169 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:169 u2: direct index for structure ( uniform 2-component vector of uint) +0:169 '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:169 Constant: +0:169 1 (const uint) +0:169 u1: direct index for structure ( uniform uint) +0:169 '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:169 Constant: +0:169 0 (const uint) +0:170 imageAtomicMin ( temp uint) +0:170 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:170 u2: direct index for structure ( uniform 2-component vector of uint) +0:170 '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:170 Constant: +0:170 1 (const uint) +0:170 u1: direct index for structure ( uniform uint) +0:170 '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:170 Constant: +0:170 0 (const uint) +0:171 move second child to first child ( temp uint) +0:171 'out_u1' ( temp uint) +0:171 imageAtomicMin ( temp uint) +0:171 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:171 u2: direct index for structure ( uniform 2-component vector of uint) +0:171 '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:171 Constant: +0:171 1 (const uint) +0:171 u1: direct index for structure ( uniform uint) +0:171 '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:171 Constant: +0:171 0 (const uint) +0:172 imageAtomicOr ( temp uint) +0:172 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:172 u2: direct index for structure ( uniform 2-component vector of uint) +0:172 '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:172 Constant: +0:172 1 (const uint) +0:172 u1: direct index for structure ( uniform uint) +0:172 '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:172 Constant: +0:172 0 (const uint) +0:173 move second child to first child ( temp uint) +0:173 'out_u1' ( temp uint) +0:173 imageAtomicOr ( temp uint) +0:173 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:173 u2: direct index for structure ( uniform 2-component vector of uint) +0:173 '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:173 Constant: +0:173 1 (const uint) +0:173 u1: direct index for structure ( uniform uint) +0:173 '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:173 Constant: +0:173 0 (const uint) +0:174 imageAtomicXor ( temp uint) +0:174 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:174 u2: direct index for structure ( uniform 2-component vector of uint) +0:174 '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:174 Constant: +0:174 1 (const uint) +0:174 u1: direct index for structure ( uniform uint) +0:174 '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:174 Constant: +0:174 0 (const uint) +0:175 move second child to first child ( temp uint) +0:175 'out_u1' ( temp uint) +0:175 imageAtomicXor ( temp uint) +0:175 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:175 u2: direct index for structure ( uniform 2-component vector of uint) +0:175 '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:175 Constant: +0:175 1 (const uint) +0:175 u1: direct index for structure ( uniform uint) +0:175 '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:175 Constant: +0:175 0 (const uint) +0:178 imageAtomicAdd ( temp int) +0:178 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:178 i2: direct index for structure ( uniform 2-component vector of int) +0:178 '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:178 Constant: +0:178 6 (const uint) +0:178 i1b: direct index for structure ( uniform int) +0:178 '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:178 Constant: +0:178 8 (const uint) +0:179 move second child to first child ( temp int) +0:179 'out_i1' ( temp int) +0:179 imageAtomicAdd ( temp int) +0:179 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:179 i2: direct index for structure ( uniform 2-component vector of int) +0:179 '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:179 Constant: +0:179 6 (const uint) +0:179 i1: direct index for structure ( uniform int) +0:179 '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:179 Constant: +0:179 5 (const uint) +0:180 imageAtomicAnd ( temp int) +0:180 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:180 i2: direct index for structure ( uniform 2-component vector of int) +0:180 '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:180 Constant: +0:180 6 (const uint) +0:180 i1b: direct index for structure ( uniform int) +0:180 '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:180 Constant: +0:180 8 (const uint) +0:181 move second child to first child ( temp int) +0:181 'out_i1' ( temp int) +0:181 imageAtomicAnd ( temp int) +0:181 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:181 i2: direct index for structure ( uniform 2-component vector of int) +0:181 '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:181 Constant: +0:181 6 (const uint) +0:181 i1: direct index for structure ( uniform int) +0:181 '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:181 Constant: +0:181 5 (const uint) +0:182 move second child to first child ( temp int) +0:182 'out_i1' ( temp int) +0:182 imageAtomicCompSwap ( temp int) +0:182 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:182 i2: direct index for structure ( uniform 2-component vector of int) +0:182 '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:182 Constant: +0:182 6 (const uint) +0:182 i1b: direct index for structure ( uniform int) +0:182 '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:182 Constant: +0:182 8 (const uint) +0:182 i1c: direct index for structure ( uniform int) +0:182 '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:182 Constant: +0:182 9 (const uint) +0:183 move second child to first child ( temp int) +0:183 'out_i1' ( temp int) +0:183 imageAtomicExchange ( temp int) +0:183 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:183 i2: direct index for structure ( uniform 2-component vector of int) +0:183 '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:183 Constant: +0:183 6 (const uint) +0:183 i1: direct index for structure ( uniform int) +0:183 '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:183 Constant: +0:183 5 (const uint) +0:184 imageAtomicMax ( temp int) +0:184 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:184 i2: direct index for structure ( uniform 2-component vector of int) +0:184 '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:184 Constant: +0:184 6 (const uint) +0:184 i1b: direct index for structure ( uniform int) +0:184 '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:184 Constant: +0:184 8 (const uint) +0:185 move second child to first child ( temp int) +0:185 'out_i1' ( temp int) +0:185 imageAtomicMax ( temp int) +0:185 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:185 i2: direct index for structure ( uniform 2-component vector of int) +0:185 '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:185 Constant: +0:185 6 (const uint) +0:185 i1: direct index for structure ( uniform int) +0:185 '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:185 Constant: +0:185 5 (const uint) +0:186 imageAtomicMin ( temp int) +0:186 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:186 i2: direct index for structure ( uniform 2-component vector of int) +0:186 '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:186 Constant: +0:186 6 (const uint) +0:186 i1b: direct index for structure ( uniform int) +0:186 '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:186 Constant: +0:186 8 (const uint) +0:187 move second child to first child ( temp int) +0:187 'out_i1' ( temp int) +0:187 imageAtomicMin ( temp int) +0:187 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:187 i2: direct index for structure ( uniform 2-component vector of int) +0:187 '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:187 Constant: +0:187 6 (const uint) +0:187 i1: direct index for structure ( uniform int) +0:187 '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:187 Constant: +0:187 5 (const uint) +0:188 imageAtomicOr ( temp int) +0:188 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:188 i2: direct index for structure ( uniform 2-component vector of int) +0:188 '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:188 Constant: +0:188 6 (const uint) +0:188 i1b: direct index for structure ( uniform int) +0:188 '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:188 Constant: +0:188 8 (const uint) +0:189 move second child to first child ( temp int) +0:189 'out_i1' ( temp int) +0:189 imageAtomicOr ( temp int) +0:189 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:189 i2: direct index for structure ( uniform 2-component vector of int) +0:189 '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:189 Constant: +0:189 6 (const uint) +0:189 i1: direct index for structure ( uniform int) +0:189 '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:189 Constant: +0:189 5 (const uint) +0:190 imageAtomicXor ( temp int) +0:190 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:190 i2: direct index for structure ( uniform 2-component vector of int) +0:190 '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:190 Constant: +0:190 6 (const uint) +0:190 i1b: direct index for structure ( uniform int) +0:190 '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:190 Constant: +0:190 8 (const uint) +0:191 move second child to first child ( temp int) +0:191 'out_i1' ( temp int) +0:191 imageAtomicXor ( temp int) +0:191 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:191 i2: direct index for structure ( uniform 2-component vector of int) +0:191 '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:191 Constant: +0:191 6 (const uint) +0:191 i1: direct index for structure ( uniform int) +0:191 '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:191 Constant: +0:191 5 (const uint) +0:194 imageAtomicAdd ( temp uint) +0:194 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:194 u2: direct index for structure ( uniform 2-component vector of uint) +0:194 '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:194 Constant: +0:194 1 (const uint) +0:194 u1: direct index for structure ( uniform uint) +0:194 '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:194 Constant: +0:194 0 (const uint) +0:195 move second child to first child ( temp uint) +0:195 'out_u1' ( temp uint) +0:195 imageAtomicAdd ( temp uint) +0:195 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:195 u2: direct index for structure ( uniform 2-component vector of uint) +0:195 '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:195 Constant: +0:195 1 (const uint) +0:195 u1: direct index for structure ( uniform uint) +0:195 '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:195 Constant: +0:195 0 (const uint) +0:196 imageAtomicAnd ( temp uint) +0:196 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:196 u2: direct index for structure ( uniform 2-component vector of uint) +0:196 '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:196 Constant: +0:196 1 (const uint) +0:196 u1: direct index for structure ( uniform uint) +0:196 '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:196 Constant: +0:196 0 (const uint) +0:197 move second child to first child ( temp uint) +0:197 'out_u1' ( temp uint) +0:197 imageAtomicAnd ( temp uint) +0:197 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:197 u2: direct index for structure ( uniform 2-component vector of uint) +0:197 '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:197 Constant: +0:197 1 (const uint) +0:197 u1: direct index for structure ( uniform uint) +0:197 '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:197 Constant: +0:197 0 (const uint) +0:198 move second child to first child ( temp uint) +0:198 'out_u1' ( temp uint) +0:198 imageAtomicCompSwap ( temp uint) +0:198 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:198 u2: direct index for structure ( uniform 2-component vector of uint) +0:198 '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:198 Constant: +0:198 1 (const uint) +0:198 u1b: direct index for structure ( uniform uint) +0:198 '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:198 Constant: +0:198 3 (const uint) +0:198 u1c: direct index for structure ( uniform uint) +0:198 '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:198 Constant: +0:198 4 (const uint) +0:199 move second child to first child ( temp uint) +0:199 'out_u1' ( temp uint) +0:199 imageAtomicExchange ( temp uint) +0:199 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:199 u2: direct index for structure ( uniform 2-component vector of uint) +0:199 '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:199 Constant: +0:199 1 (const uint) +0:199 u1: direct index for structure ( uniform uint) +0:199 '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:199 Constant: +0:199 0 (const uint) +0:200 imageAtomicMax ( temp uint) +0:200 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:200 u2: direct index for structure ( uniform 2-component vector of uint) +0:200 '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:200 Constant: +0:200 1 (const uint) +0:200 u1: direct index for structure ( uniform uint) +0:200 '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:200 Constant: +0:200 0 (const uint) +0:201 move second child to first child ( temp uint) +0:201 'out_u1' ( temp uint) +0:201 imageAtomicMax ( temp uint) +0:201 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:201 u2: direct index for structure ( uniform 2-component vector of uint) +0:201 '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:201 Constant: +0:201 1 (const uint) +0:201 u1: direct index for structure ( uniform uint) +0:201 '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:201 Constant: +0:201 0 (const uint) +0:202 imageAtomicMin ( temp uint) +0:202 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:202 u2: direct index for structure ( uniform 2-component vector of uint) +0:202 '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:202 Constant: +0:202 1 (const uint) +0:202 u1: direct index for structure ( uniform uint) +0:202 '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:202 Constant: +0:202 0 (const uint) +0:203 move second child to first child ( temp uint) +0:203 'out_u1' ( temp uint) +0:203 imageAtomicMin ( temp uint) +0:203 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:203 u2: direct index for structure ( uniform 2-component vector of uint) +0:203 '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:203 Constant: +0:203 1 (const uint) +0:203 u1: direct index for structure ( uniform uint) +0:203 '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:203 Constant: +0:203 0 (const uint) +0:204 imageAtomicOr ( temp uint) +0:204 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:204 u2: direct index for structure ( uniform 2-component vector of uint) +0:204 '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:204 Constant: +0:204 1 (const uint) +0:204 u1: direct index for structure ( uniform uint) +0:204 '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:204 Constant: +0:204 0 (const uint) +0:205 move second child to first child ( temp uint) +0:205 'out_u1' ( temp uint) +0:205 imageAtomicOr ( temp uint) +0:205 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:205 u2: direct index for structure ( uniform 2-component vector of uint) +0:205 '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:205 Constant: +0:205 1 (const uint) +0:205 u1: direct index for structure ( uniform uint) +0:205 '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:205 Constant: +0:205 0 (const uint) +0:206 imageAtomicXor ( temp uint) +0:206 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:206 u2: direct index for structure ( uniform 2-component vector of uint) +0:206 '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:206 Constant: +0:206 1 (const uint) +0:206 u1: direct index for structure ( uniform uint) +0:206 '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:206 Constant: +0:206 0 (const uint) +0:207 move second child to first child ( temp uint) +0:207 'out_u1' ( temp uint) +0:207 imageAtomicXor ( temp uint) +0:207 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:207 u2: direct index for structure ( uniform 2-component vector of uint) +0:207 '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:207 Constant: +0:207 1 (const uint) +0:207 u1: direct index for structure ( uniform uint) +0:207 '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:207 Constant: +0:207 0 (const uint) +0:210 imageAtomicAdd ( temp int) +0:210 'g_tBuffI' (layout( r32i) uniform iimageBuffer) +0:210 i1: direct index for structure ( uniform int) +0:210 '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:210 Constant: +0:210 5 (const uint) +0:210 i1b: direct index for structure ( uniform int) +0:210 '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:210 Constant: +0:210 8 (const uint) +0:211 move second child to first child ( temp int) +0:211 'out_i1' ( temp int) +0:211 imageAtomicAdd ( temp int) +0:211 'g_tBuffI' (layout( r32i) uniform iimageBuffer) +0:211 i1: direct index for structure ( uniform int) +0:211 '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:211 Constant: +0:211 5 (const uint) +0:211 i1: direct index for structure ( uniform int) +0:211 '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:211 Constant: +0:211 5 (const uint) +0:212 imageAtomicAnd ( temp int) +0:212 'g_tBuffI' (layout( r32i) uniform iimageBuffer) +0:212 i1: direct index for structure ( uniform int) +0:212 '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:212 Constant: +0:212 5 (const uint) +0:212 i1b: direct index for structure ( uniform int) +0:212 '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:212 Constant: +0:212 8 (const uint) +0:213 move second child to first child ( temp int) +0:213 'out_i1' ( temp int) +0:213 imageAtomicAnd ( temp int) +0:213 'g_tBuffI' (layout( r32i) uniform iimageBuffer) +0:213 i1: direct index for structure ( uniform int) +0:213 '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:213 Constant: +0:213 5 (const uint) +0:213 i1: direct index for structure ( uniform int) +0:213 '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:213 Constant: +0:213 5 (const uint) +0:214 move second child to first child ( temp int) +0:214 'out_i1' ( temp int) +0:214 imageAtomicCompSwap ( temp int) +0:214 'g_tBuffI' (layout( r32i) uniform iimageBuffer) +0:214 i1: direct index for structure ( uniform int) +0:214 '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:214 Constant: +0:214 5 (const uint) +0:214 i1b: direct index for structure ( uniform int) +0:214 '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:214 Constant: +0:214 8 (const uint) +0:214 i1c: direct index for structure ( uniform int) +0:214 '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:214 Constant: +0:214 9 (const uint) +0:215 move second child to first child ( temp int) +0:215 'out_i1' ( temp int) +0:215 imageAtomicExchange ( temp int) +0:215 'g_tBuffI' (layout( r32i) uniform iimageBuffer) +0:215 i1: direct index for structure ( uniform int) +0:215 '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:215 Constant: +0:215 5 (const uint) +0:215 i1: direct index for structure ( uniform int) +0:215 '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:215 Constant: +0:215 5 (const uint) +0:216 imageAtomicMax ( temp int) +0:216 'g_tBuffI' (layout( r32i) uniform iimageBuffer) +0:216 i1: direct index for structure ( uniform int) +0:216 '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:216 Constant: +0:216 5 (const uint) +0:216 i1b: direct index for structure ( uniform int) +0:216 '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:216 Constant: +0:216 8 (const uint) +0:217 move second child to first child ( temp int) +0:217 'out_i1' ( temp int) +0:217 imageAtomicMax ( temp int) +0:217 'g_tBuffI' (layout( r32i) uniform iimageBuffer) +0:217 i1: direct index for structure ( uniform int) +0:217 '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:217 Constant: +0:217 5 (const uint) +0:217 i1: direct index for structure ( uniform int) +0:217 '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:217 Constant: +0:217 5 (const uint) +0:218 imageAtomicMin ( temp int) +0:218 'g_tBuffI' (layout( r32i) uniform iimageBuffer) +0:218 i1: direct index for structure ( uniform int) +0:218 '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:218 Constant: +0:218 5 (const uint) +0:218 i1b: direct index for structure ( uniform int) +0:218 '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:218 Constant: +0:218 8 (const uint) +0:219 move second child to first child ( temp int) +0:219 'out_i1' ( temp int) +0:219 imageAtomicMin ( temp int) +0:219 'g_tBuffI' (layout( r32i) uniform iimageBuffer) +0:219 i1: direct index for structure ( uniform int) +0:219 '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:219 Constant: +0:219 5 (const uint) +0:219 i1: direct index for structure ( uniform int) +0:219 '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:219 Constant: +0:219 5 (const uint) +0:220 imageAtomicOr ( temp int) +0:220 'g_tBuffI' (layout( r32i) uniform iimageBuffer) +0:220 i1: direct index for structure ( uniform int) +0:220 '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:220 Constant: +0:220 5 (const uint) +0:220 i1b: direct index for structure ( uniform int) +0:220 '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:220 Constant: +0:220 8 (const uint) +0:221 move second child to first child ( temp int) +0:221 'out_i1' ( temp int) +0:221 imageAtomicOr ( temp int) +0:221 'g_tBuffI' (layout( r32i) uniform iimageBuffer) +0:221 i1: direct index for structure ( uniform int) +0:221 '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:221 Constant: +0:221 5 (const uint) +0:221 i1: direct index for structure ( uniform int) +0:221 '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:221 Constant: +0:221 5 (const uint) +0:222 imageAtomicXor ( temp int) +0:222 'g_tBuffI' (layout( r32i) uniform iimageBuffer) +0:222 i1: direct index for structure ( uniform int) +0:222 '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:222 Constant: +0:222 5 (const uint) +0:222 i1b: direct index for structure ( uniform int) +0:222 '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:222 Constant: +0:222 8 (const uint) +0:223 move second child to first child ( temp int) +0:223 'out_i1' ( temp int) +0:223 imageAtomicXor ( temp int) +0:223 'g_tBuffI' (layout( r32i) uniform iimageBuffer) +0:223 i1: direct index for structure ( uniform int) +0:223 '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:223 Constant: +0:223 5 (const uint) +0:223 i1: direct index for structure ( uniform int) +0:223 '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:223 Constant: +0:223 5 (const uint) +0:226 imageAtomicAdd ( temp uint) +0:226 'g_tBuffU' (layout( r32ui) uniform uimageBuffer) +0:226 u1: direct index for structure ( uniform uint) +0:226 '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:226 Constant: +0:226 0 (const uint) +0:226 u1: direct index for structure ( uniform uint) +0:226 '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:226 Constant: +0:226 0 (const uint) +0:227 move second child to first child ( temp uint) +0:227 'out_u1' ( temp uint) +0:227 imageAtomicAdd ( temp uint) +0:227 'g_tBuffU' (layout( r32ui) uniform uimageBuffer) +0:227 u1: direct index for structure ( uniform uint) +0:227 '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:227 Constant: +0:227 0 (const uint) +0:227 u1: direct index for structure ( uniform uint) +0:227 '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:227 Constant: +0:227 0 (const uint) +0:228 imageAtomicAnd ( temp uint) +0:228 'g_tBuffU' (layout( r32ui) uniform uimageBuffer) +0:228 u1: direct index for structure ( uniform uint) +0:228 '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:228 Constant: +0:228 0 (const uint) +0:228 u1: direct index for structure ( uniform uint) +0:228 '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:228 Constant: +0:228 0 (const uint) +0:229 move second child to first child ( temp uint) +0:229 'out_u1' ( temp uint) +0:229 imageAtomicAnd ( temp uint) +0:229 'g_tBuffU' (layout( r32ui) uniform uimageBuffer) +0:229 u1: direct index for structure ( uniform uint) +0:229 '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:229 Constant: +0:229 0 (const uint) +0:229 u1: direct index for structure ( uniform uint) +0:229 '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:229 Constant: +0:229 0 (const uint) +0:230 move second child to first child ( temp uint) +0:230 'out_u1' ( temp uint) +0:230 imageAtomicCompSwap ( temp uint) +0:230 'g_tBuffU' (layout( r32ui) uniform uimageBuffer) +0:230 u1: direct index for structure ( uniform uint) +0:230 '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:230 Constant: +0:230 0 (const uint) +0:230 u1b: direct index for structure ( uniform uint) +0:230 '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:230 Constant: +0:230 3 (const uint) +0:230 u1c: direct index for structure ( uniform uint) +0:230 '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:230 Constant: +0:230 4 (const uint) +0:231 move second child to first child ( temp uint) +0:231 'out_u1' ( temp uint) +0:231 imageAtomicExchange ( temp uint) +0:231 'g_tBuffU' (layout( r32ui) uniform uimageBuffer) +0:231 u1: direct index for structure ( uniform uint) +0:231 '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:231 Constant: +0:231 0 (const uint) +0:231 u1: direct index for structure ( uniform uint) +0:231 '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:231 Constant: +0:231 0 (const uint) +0:232 imageAtomicMax ( temp uint) +0:232 'g_tBuffU' (layout( r32ui) uniform uimageBuffer) +0:232 u1: direct index for structure ( uniform uint) +0:232 '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:232 Constant: +0:232 0 (const uint) +0:232 u1: direct index for structure ( uniform uint) +0:232 '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:232 Constant: +0:232 0 (const uint) +0:233 move second child to first child ( temp uint) +0:233 'out_u1' ( temp uint) +0:233 imageAtomicMax ( temp uint) +0:233 'g_tBuffU' (layout( r32ui) uniform uimageBuffer) +0:233 u1: direct index for structure ( uniform uint) +0:233 '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:233 Constant: +0:233 0 (const uint) +0:233 u1: direct index for structure ( uniform uint) +0:233 '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:233 Constant: +0:233 0 (const uint) +0:234 imageAtomicMin ( temp uint) +0:234 'g_tBuffU' (layout( r32ui) uniform uimageBuffer) +0:234 u1: direct index for structure ( uniform uint) +0:234 '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:234 Constant: +0:234 0 (const uint) +0:234 u1: direct index for structure ( uniform uint) +0:234 '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:234 Constant: +0:234 0 (const uint) +0:235 move second child to first child ( temp uint) +0:235 'out_u1' ( temp uint) +0:235 imageAtomicMin ( temp uint) +0:235 'g_tBuffU' (layout( r32ui) uniform uimageBuffer) +0:235 u1: direct index for structure ( uniform uint) +0:235 '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:235 Constant: +0:235 0 (const uint) +0:235 u1: direct index for structure ( uniform uint) +0:235 '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:235 Constant: +0:235 0 (const uint) +0:236 imageAtomicOr ( temp uint) +0:236 'g_tBuffU' (layout( r32ui) uniform uimageBuffer) +0:236 u1: direct index for structure ( uniform uint) +0:236 '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:236 Constant: +0:236 0 (const uint) +0:236 u1: direct index for structure ( uniform uint) +0:236 '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:236 Constant: +0:236 0 (const uint) +0:237 move second child to first child ( temp uint) +0:237 'out_u1' ( temp uint) +0:237 imageAtomicOr ( temp uint) +0:237 'g_tBuffU' (layout( r32ui) uniform uimageBuffer) +0:237 u1: direct index for structure ( uniform uint) +0:237 '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:237 Constant: +0:237 0 (const uint) +0:237 u1: direct index for structure ( uniform uint) +0:237 '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:237 Constant: +0:237 0 (const uint) +0:238 imageAtomicXor ( temp uint) +0:238 'g_tBuffU' (layout( r32ui) uniform uimageBuffer) +0:238 u1: direct index for structure ( uniform uint) +0:238 '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:238 Constant: +0:238 0 (const uint) +0:238 u1: direct index for structure ( uniform uint) +0:238 '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:238 Constant: +0:238 0 (const uint) +0:239 move second child to first child ( temp uint) +0:239 'out_u1' ( temp uint) +0:239 imageAtomicXor ( temp uint) +0:239 'g_tBuffU' (layout( r32ui) uniform uimageBuffer) +0:239 u1: direct index for structure ( uniform uint) +0:239 '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:239 Constant: +0:239 0 (const uint) +0:239 u1: direct index for structure ( uniform uint) +0:239 '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:239 Constant: +0:239 0 (const uint) +0:242 move second child to first child ( temp 4-component vector of float) +0:242 Color: direct index for structure ( temp 4-component vector of float) +0:242 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:242 Constant: +0:242 0 (const int) +0:242 Constant: +0:242 1.000000 +0:242 1.000000 +0:242 1.000000 +0:242 1.000000 +0:243 Branch: Return with expression +0:243 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:45 Function Definition: main( ( temp void) +0:45 Function Parameters: +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: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:? 'g_sSamp' ( uniform sampler) +0:? 'g_tTex1df1' (layout( r32f) uniform image1D) +0:? 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:? 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:? 'g_tTex2df1' (layout( r32f) uniform image2D) +0:? 'g_tTex2di1' (layout( r32i) uniform iimage2D) +0:? 'g_tTex2du1' (layout( r32ui) uniform uimage2D) +0:? 'g_tTex3df1' (layout( r32f) uniform image3D) +0:? 'g_tTex3di1' (layout( r32i) uniform iimage3D) +0:? 'g_tTex3du1' (layout( r32ui) uniform uimage3D) +0:? 'g_tTex1df1a' (layout( r32f) uniform image1DArray) +0:? 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:? 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:? 'g_tTex2df1a' (layout( r32f) uniform image2DArray) +0:? 'g_tTex2di1a' (layout( r32i) uniform iimage2DArray) +0:? 'g_tTex2du1a' (layout( r32ui) uniform uimage2DArray) +0:? 'g_tBuffF' (layout( r32f) uniform imageBuffer) +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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 1147 + + Capability Shader + Capability Sampled1D + Capability SampledBuffer + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 1117 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + Name 10 "@main(" + Name 15 "g_tTex1di1" + Name 21 "$Global" + MemberName 21($Global) 0 "u1" + MemberName 21($Global) 1 "u2" + MemberName 21($Global) 2 "u3" + MemberName 21($Global) 3 "u1b" + MemberName 21($Global) 4 "u1c" + MemberName 21($Global) 5 "i1" + MemberName 21($Global) 6 "i2" + MemberName 21($Global) 7 "i3" + MemberName 21($Global) 8 "i1b" + MemberName 21($Global) 9 "i1c" + Name 23 "" + Name 37 "out_i1" + Name 121 "g_tTex1du1" + Name 132 "out_u1" + Name 217 "g_tTex2di1" + Name 308 "g_tTex2du1" + Name 399 "g_tTex3di1" + Name 490 "g_tTex3du1" + Name 581 "g_tTex1di1a" + Name 670 "g_tTex1du1a" + Name 931 "g_tBuffI" + Name 1020 "g_tBuffU" + Name 1108 "psout" + Name 1117 "Color" + Name 1122 "g_sSamp" + Name 1125 "g_tTex1df1" + Name 1128 "g_tTex2df1" + Name 1131 "g_tTex3df1" + Name 1134 "g_tTex1df1a" + Name 1137 "g_tTex2df1a" + Name 1140 "g_tTex2di1a" + Name 1143 "g_tTex2du1a" + Name 1146 "g_tBuffF" + Decorate 15(g_tTex1di1) DescriptorSet 0 + MemberDecorate 21($Global) 0 Offset 0 + MemberDecorate 21($Global) 1 Offset 8 + MemberDecorate 21($Global) 2 Offset 16 + MemberDecorate 21($Global) 3 Offset 28 + MemberDecorate 21($Global) 4 Offset 32 + MemberDecorate 21($Global) 5 Offset 36 + MemberDecorate 21($Global) 6 Offset 40 + MemberDecorate 21($Global) 7 Offset 48 + MemberDecorate 21($Global) 8 Offset 60 + MemberDecorate 21($Global) 9 Offset 64 + Decorate 21($Global) Block + Decorate 23 DescriptorSet 0 + Decorate 121(g_tTex1du1) DescriptorSet 0 + Decorate 217(g_tTex2di1) DescriptorSet 0 + Decorate 308(g_tTex2du1) DescriptorSet 0 + Decorate 399(g_tTex3di1) DescriptorSet 0 + Decorate 490(g_tTex3du1) DescriptorSet 0 + Decorate 581(g_tTex1di1a) DescriptorSet 0 + Decorate 670(g_tTex1du1a) DescriptorSet 0 + Decorate 931(g_tBuffI) DescriptorSet 0 + Decorate 1020(g_tBuffU) DescriptorSet 0 + Decorate 1117(Color) Location 0 + Decorate 1122(g_sSamp) DescriptorSet 0 + Decorate 1125(g_tTex1df1) DescriptorSet 0 + Decorate 1128(g_tTex2df1) DescriptorSet 0 + Decorate 1131(g_tTex3df1) DescriptorSet 0 + Decorate 1134(g_tTex1df1a) DescriptorSet 0 + Decorate 1137(g_tTex2df1a) DescriptorSet 0 + Decorate 1140(g_tTex2di1a) DescriptorSet 0 + Decorate 1143(g_tTex2du1a) DescriptorSet 0 + Decorate 1146(g_tBuffF) DescriptorSet 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: TypeInt 32 1 + 13: TypeImage 12(int) 1D nonsampled format:R32i + 14: TypePointer UniformConstant 13 + 15(g_tTex1di1): 14(ptr) Variable UniformConstant + 16: TypeInt 32 0 + 17: TypeVector 16(int) 2 + 18: TypeVector 16(int) 3 + 19: TypeVector 12(int) 2 + 20: TypeVector 12(int) 3 + 21($Global): TypeStruct 16(int) 17(ivec2) 18(ivec3) 16(int) 16(int) 12(int) 19(ivec2) 20(ivec3) 12(int) 12(int) + 22: TypePointer Uniform 21($Global) + 23: 22(ptr) Variable Uniform + 24: 12(int) Constant 5 + 25: TypePointer Uniform 12(int) + 28: 12(int) Constant 8 + 31: 16(int) Constant 0 + 32: TypePointer Image 12(int) + 34: 16(int) Constant 1 + 36: TypePointer Function 12(int) + 60: 12(int) Constant 9 + 119: TypeImage 16(int) 1D nonsampled format:R32ui + 120: TypePointer UniformConstant 119 + 121(g_tTex1du1): 120(ptr) Variable UniformConstant + 122: 12(int) Constant 0 + 123: TypePointer Uniform 16(int) + 128: TypePointer Image 16(int) + 131: TypePointer Function 16(int) + 153: 12(int) Constant 3 + 156: 12(int) Constant 4 + 215: TypeImage 12(int) 2D nonsampled format:R32i + 216: TypePointer UniformConstant 215 + 217(g_tTex2di1): 216(ptr) Variable UniformConstant + 218: 12(int) Constant 6 + 219: TypePointer Uniform 19(ivec2) + 306: TypeImage 16(int) 2D nonsampled format:R32ui + 307: TypePointer UniformConstant 306 + 308(g_tTex2du1): 307(ptr) Variable UniformConstant + 309: 12(int) Constant 1 + 310: TypePointer Uniform 17(ivec2) + 397: TypeImage 12(int) 3D nonsampled format:R32i + 398: TypePointer UniformConstant 397 + 399(g_tTex3di1): 398(ptr) Variable UniformConstant + 400: 12(int) Constant 7 + 401: TypePointer Uniform 20(ivec3) + 488: TypeImage 16(int) 3D nonsampled format:R32ui + 489: TypePointer UniformConstant 488 + 490(g_tTex3du1): 489(ptr) Variable UniformConstant + 491: 12(int) Constant 2 + 492: TypePointer Uniform 18(ivec3) + 579: TypeImage 12(int) 1D array nonsampled format:R32i + 580: TypePointer UniformConstant 579 +581(g_tTex1di1a): 580(ptr) Variable UniformConstant + 668: TypeImage 16(int) 1D array nonsampled format:R32ui + 669: TypePointer UniformConstant 668 +670(g_tTex1du1a): 669(ptr) Variable UniformConstant + 929: TypeImage 12(int) Buffer nonsampled format:R32i + 930: TypePointer UniformConstant 929 + 931(g_tBuffI): 930(ptr) Variable UniformConstant + 1018: TypeImage 16(int) Buffer nonsampled format:R32ui + 1019: TypePointer UniformConstant 1018 + 1020(g_tBuffU): 1019(ptr) Variable UniformConstant + 1107: TypePointer Function 8(PS_OUTPUT) + 1109: 6(float) Constant 1065353216 + 1110: 7(fvec4) ConstantComposite 1109 1109 1109 1109 + 1111: TypePointer Function 7(fvec4) + 1116: TypePointer Output 7(fvec4) + 1117(Color): 1116(ptr) Variable Output + 1120: TypeSampler + 1121: TypePointer UniformConstant 1120 + 1122(g_sSamp): 1121(ptr) Variable UniformConstant + 1123: TypeImage 6(float) 1D nonsampled format:R32f + 1124: TypePointer UniformConstant 1123 +1125(g_tTex1df1): 1124(ptr) Variable UniformConstant + 1126: TypeImage 6(float) 2D nonsampled format:R32f + 1127: TypePointer UniformConstant 1126 +1128(g_tTex2df1): 1127(ptr) Variable UniformConstant + 1129: TypeImage 6(float) 3D nonsampled format:R32f + 1130: TypePointer UniformConstant 1129 +1131(g_tTex3df1): 1130(ptr) Variable UniformConstant + 1132: TypeImage 6(float) 1D array nonsampled format:R32f + 1133: TypePointer UniformConstant 1132 +1134(g_tTex1df1a): 1133(ptr) Variable UniformConstant + 1135: TypeImage 6(float) 2D array nonsampled format:R32f + 1136: TypePointer UniformConstant 1135 +1137(g_tTex2df1a): 1136(ptr) Variable UniformConstant + 1138: TypeImage 12(int) 2D array nonsampled format:R32i + 1139: TypePointer UniformConstant 1138 +1140(g_tTex2di1a): 1139(ptr) Variable UniformConstant + 1141: TypeImage 16(int) 2D array nonsampled format:R32ui + 1142: TypePointer UniformConstant 1141 +1143(g_tTex2du1a): 1142(ptr) Variable UniformConstant + 1144: TypeImage 6(float) Buffer nonsampled format:R32f + 1145: TypePointer UniformConstant 1144 + 1146(g_tBuffF): 1145(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label + 1118:8(PS_OUTPUT) FunctionCall 10(@main() + 1119: 7(fvec4) CompositeExtract 1118 0 + Store 1117(Color) 1119 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 37(out_i1): 36(ptr) Variable Function + 132(out_u1): 131(ptr) Variable Function + 1108(psout): 1107(ptr) Variable Function + 26: 25(ptr) AccessChain 23 24 + 27: 12(int) Load 26 + 29: 25(ptr) AccessChain 23 28 + 30: 12(int) Load 29 + 33: 32(ptr) ImageTexelPointer 15(g_tTex1di1) 27 31 + 35: 12(int) AtomicIAdd 33 34 31 30 + 38: 25(ptr) AccessChain 23 24 + 39: 12(int) Load 38 + 40: 25(ptr) AccessChain 23 24 + 41: 12(int) Load 40 + 42: 32(ptr) ImageTexelPointer 15(g_tTex1di1) 39 31 + 43: 12(int) AtomicIAdd 42 34 31 41 + Store 37(out_i1) 43 + 44: 25(ptr) AccessChain 23 24 + 45: 12(int) Load 44 + 46: 25(ptr) AccessChain 23 28 + 47: 12(int) Load 46 + 48: 32(ptr) ImageTexelPointer 15(g_tTex1di1) 45 31 + 49: 12(int) AtomicAnd 48 34 31 47 + 50: 25(ptr) AccessChain 23 24 + 51: 12(int) Load 50 + 52: 25(ptr) AccessChain 23 24 + 53: 12(int) Load 52 + 54: 32(ptr) ImageTexelPointer 15(g_tTex1di1) 51 31 + 55: 12(int) AtomicAnd 54 34 31 53 + Store 37(out_i1) 55 + 56: 25(ptr) AccessChain 23 24 + 57: 12(int) Load 56 + 58: 25(ptr) AccessChain 23 28 + 59: 12(int) Load 58 + 61: 25(ptr) AccessChain 23 60 + 62: 12(int) Load 61 + 63: 32(ptr) ImageTexelPointer 15(g_tTex1di1) 57 31 + 64: 12(int) AtomicCompareExchange 63 34 31 31 62 59 + Store 37(out_i1) 64 + 65: 25(ptr) AccessChain 23 24 + 66: 12(int) Load 65 + 67: 25(ptr) AccessChain 23 24 + 68: 12(int) Load 67 + 69: 32(ptr) ImageTexelPointer 15(g_tTex1di1) 66 31 + 70: 12(int) AtomicExchange 69 34 31 68 + Store 37(out_i1) 70 + 71: 25(ptr) AccessChain 23 24 + 72: 12(int) Load 71 + 73: 25(ptr) AccessChain 23 28 + 74: 12(int) Load 73 + 75: 32(ptr) ImageTexelPointer 15(g_tTex1di1) 72 31 + 76: 12(int) AtomicSMax 75 34 31 74 + 77: 25(ptr) AccessChain 23 24 + 78: 12(int) Load 77 + 79: 25(ptr) AccessChain 23 24 + 80: 12(int) Load 79 + 81: 32(ptr) ImageTexelPointer 15(g_tTex1di1) 78 31 + 82: 12(int) AtomicSMax 81 34 31 80 + Store 37(out_i1) 82 + 83: 25(ptr) AccessChain 23 24 + 84: 12(int) Load 83 + 85: 25(ptr) AccessChain 23 28 + 86: 12(int) Load 85 + 87: 32(ptr) ImageTexelPointer 15(g_tTex1di1) 84 31 + 88: 12(int) AtomicSMin 87 34 31 86 + 89: 25(ptr) AccessChain 23 24 + 90: 12(int) Load 89 + 91: 25(ptr) AccessChain 23 24 + 92: 12(int) Load 91 + 93: 32(ptr) ImageTexelPointer 15(g_tTex1di1) 90 31 + 94: 12(int) AtomicSMin 93 34 31 92 + Store 37(out_i1) 94 + 95: 25(ptr) AccessChain 23 24 + 96: 12(int) Load 95 + 97: 25(ptr) AccessChain 23 28 + 98: 12(int) Load 97 + 99: 32(ptr) ImageTexelPointer 15(g_tTex1di1) 96 31 + 100: 12(int) AtomicOr 99 34 31 98 + 101: 25(ptr) AccessChain 23 24 + 102: 12(int) Load 101 + 103: 25(ptr) AccessChain 23 24 + 104: 12(int) Load 103 + 105: 32(ptr) ImageTexelPointer 15(g_tTex1di1) 102 31 + 106: 12(int) AtomicOr 105 34 31 104 + Store 37(out_i1) 106 + 107: 25(ptr) AccessChain 23 24 + 108: 12(int) Load 107 + 109: 25(ptr) AccessChain 23 28 + 110: 12(int) Load 109 + 111: 32(ptr) ImageTexelPointer 15(g_tTex1di1) 108 31 + 112: 12(int) AtomicXor 111 34 31 110 + 113: 25(ptr) AccessChain 23 24 + 114: 12(int) Load 113 + 115: 25(ptr) AccessChain 23 24 + 116: 12(int) Load 115 + 117: 32(ptr) ImageTexelPointer 15(g_tTex1di1) 114 31 + 118: 12(int) AtomicXor 117 34 31 116 + Store 37(out_i1) 118 + 124: 123(ptr) AccessChain 23 122 + 125: 16(int) Load 124 + 126: 123(ptr) AccessChain 23 122 + 127: 16(int) Load 126 + 129: 128(ptr) ImageTexelPointer 121(g_tTex1du1) 125 31 + 130: 16(int) AtomicIAdd 129 34 31 127 + 133: 123(ptr) AccessChain 23 122 + 134: 16(int) Load 133 + 135: 123(ptr) AccessChain 23 122 + 136: 16(int) Load 135 + 137: 128(ptr) ImageTexelPointer 121(g_tTex1du1) 134 31 + 138: 16(int) AtomicIAdd 137 34 31 136 + Store 132(out_u1) 138 + 139: 123(ptr) AccessChain 23 122 + 140: 16(int) Load 139 + 141: 123(ptr) AccessChain 23 122 + 142: 16(int) Load 141 + 143: 128(ptr) ImageTexelPointer 121(g_tTex1du1) 140 31 + 144: 16(int) AtomicAnd 143 34 31 142 + 145: 123(ptr) AccessChain 23 122 + 146: 16(int) Load 145 + 147: 123(ptr) AccessChain 23 122 + 148: 16(int) Load 147 + 149: 128(ptr) ImageTexelPointer 121(g_tTex1du1) 146 31 + 150: 16(int) AtomicAnd 149 34 31 148 + Store 132(out_u1) 150 + 151: 123(ptr) AccessChain 23 122 + 152: 16(int) Load 151 + 154: 123(ptr) AccessChain 23 153 + 155: 16(int) Load 154 + 157: 123(ptr) AccessChain 23 156 + 158: 16(int) Load 157 + 159: 128(ptr) ImageTexelPointer 121(g_tTex1du1) 152 31 + 160: 16(int) AtomicCompareExchange 159 34 31 31 158 155 + Store 132(out_u1) 160 + 161: 123(ptr) AccessChain 23 122 + 162: 16(int) Load 161 + 163: 123(ptr) AccessChain 23 122 + 164: 16(int) Load 163 + 165: 128(ptr) ImageTexelPointer 121(g_tTex1du1) 162 31 + 166: 16(int) AtomicExchange 165 34 31 164 + Store 132(out_u1) 166 + 167: 123(ptr) AccessChain 23 122 + 168: 16(int) Load 167 + 169: 123(ptr) AccessChain 23 122 + 170: 16(int) Load 169 + 171: 128(ptr) ImageTexelPointer 121(g_tTex1du1) 168 31 + 172: 16(int) AtomicUMax 171 34 31 170 + 173: 123(ptr) AccessChain 23 122 + 174: 16(int) Load 173 + 175: 123(ptr) AccessChain 23 122 + 176: 16(int) Load 175 + 177: 128(ptr) ImageTexelPointer 121(g_tTex1du1) 174 31 + 178: 16(int) AtomicUMax 177 34 31 176 + Store 132(out_u1) 178 + 179: 123(ptr) AccessChain 23 122 + 180: 16(int) Load 179 + 181: 123(ptr) AccessChain 23 122 + 182: 16(int) Load 181 + 183: 128(ptr) ImageTexelPointer 121(g_tTex1du1) 180 31 + 184: 16(int) AtomicUMin 183 34 31 182 + 185: 123(ptr) AccessChain 23 122 + 186: 16(int) Load 185 + 187: 123(ptr) AccessChain 23 122 + 188: 16(int) Load 187 + 189: 128(ptr) ImageTexelPointer 121(g_tTex1du1) 186 31 + 190: 16(int) AtomicUMin 189 34 31 188 + Store 132(out_u1) 190 + 191: 123(ptr) AccessChain 23 122 + 192: 16(int) Load 191 + 193: 123(ptr) AccessChain 23 122 + 194: 16(int) Load 193 + 195: 128(ptr) ImageTexelPointer 121(g_tTex1du1) 192 31 + 196: 16(int) AtomicOr 195 34 31 194 + 197: 123(ptr) AccessChain 23 122 + 198: 16(int) Load 197 + 199: 123(ptr) AccessChain 23 122 + 200: 16(int) Load 199 + 201: 128(ptr) ImageTexelPointer 121(g_tTex1du1) 198 31 + 202: 16(int) AtomicOr 201 34 31 200 + Store 132(out_u1) 202 + 203: 123(ptr) AccessChain 23 122 + 204: 16(int) Load 203 + 205: 123(ptr) AccessChain 23 122 + 206: 16(int) Load 205 + 207: 128(ptr) ImageTexelPointer 121(g_tTex1du1) 204 31 + 208: 16(int) AtomicXor 207 34 31 206 + 209: 123(ptr) AccessChain 23 122 + 210: 16(int) Load 209 + 211: 123(ptr) AccessChain 23 122 + 212: 16(int) Load 211 + 213: 128(ptr) ImageTexelPointer 121(g_tTex1du1) 210 31 + 214: 16(int) AtomicXor 213 34 31 212 + Store 132(out_u1) 214 + 220: 219(ptr) AccessChain 23 218 + 221: 19(ivec2) Load 220 + 222: 25(ptr) AccessChain 23 28 + 223: 12(int) Load 222 + 224: 32(ptr) ImageTexelPointer 217(g_tTex2di1) 221 31 + 225: 12(int) AtomicIAdd 224 34 31 223 + 226: 219(ptr) AccessChain 23 218 + 227: 19(ivec2) Load 226 + 228: 25(ptr) AccessChain 23 24 + 229: 12(int) Load 228 + 230: 32(ptr) ImageTexelPointer 217(g_tTex2di1) 227 31 + 231: 12(int) AtomicIAdd 230 34 31 229 + Store 37(out_i1) 231 + 232: 219(ptr) AccessChain 23 218 + 233: 19(ivec2) Load 232 + 234: 25(ptr) AccessChain 23 28 + 235: 12(int) Load 234 + 236: 32(ptr) ImageTexelPointer 217(g_tTex2di1) 233 31 + 237: 12(int) AtomicAnd 236 34 31 235 + 238: 219(ptr) AccessChain 23 218 + 239: 19(ivec2) Load 238 + 240: 25(ptr) AccessChain 23 24 + 241: 12(int) Load 240 + 242: 32(ptr) ImageTexelPointer 217(g_tTex2di1) 239 31 + 243: 12(int) AtomicAnd 242 34 31 241 + Store 37(out_i1) 243 + 244: 219(ptr) AccessChain 23 218 + 245: 19(ivec2) Load 244 + 246: 25(ptr) AccessChain 23 28 + 247: 12(int) Load 246 + 248: 25(ptr) AccessChain 23 60 + 249: 12(int) Load 248 + 250: 32(ptr) ImageTexelPointer 217(g_tTex2di1) 245 31 + 251: 12(int) AtomicCompareExchange 250 34 31 31 249 247 + Store 37(out_i1) 251 + 252: 219(ptr) AccessChain 23 218 + 253: 19(ivec2) Load 252 + 254: 25(ptr) AccessChain 23 24 + 255: 12(int) Load 254 + 256: 32(ptr) ImageTexelPointer 217(g_tTex2di1) 253 31 + 257: 12(int) AtomicExchange 256 34 31 255 + Store 37(out_i1) 257 + 258: 219(ptr) AccessChain 23 218 + 259: 19(ivec2) Load 258 + 260: 25(ptr) AccessChain 23 28 + 261: 12(int) Load 260 + 262: 32(ptr) ImageTexelPointer 217(g_tTex2di1) 259 31 + 263: 12(int) AtomicSMax 262 34 31 261 + 264: 219(ptr) AccessChain 23 218 + 265: 19(ivec2) Load 264 + 266: 25(ptr) AccessChain 23 24 + 267: 12(int) Load 266 + 268: 32(ptr) ImageTexelPointer 217(g_tTex2di1) 265 31 + 269: 12(int) AtomicSMax 268 34 31 267 + Store 37(out_i1) 269 + 270: 219(ptr) AccessChain 23 218 + 271: 19(ivec2) Load 270 + 272: 25(ptr) AccessChain 23 28 + 273: 12(int) Load 272 + 274: 32(ptr) ImageTexelPointer 217(g_tTex2di1) 271 31 + 275: 12(int) AtomicSMin 274 34 31 273 + 276: 219(ptr) AccessChain 23 218 + 277: 19(ivec2) Load 276 + 278: 25(ptr) AccessChain 23 24 + 279: 12(int) Load 278 + 280: 32(ptr) ImageTexelPointer 217(g_tTex2di1) 277 31 + 281: 12(int) AtomicSMin 280 34 31 279 + Store 37(out_i1) 281 + 282: 219(ptr) AccessChain 23 218 + 283: 19(ivec2) Load 282 + 284: 25(ptr) AccessChain 23 28 + 285: 12(int) Load 284 + 286: 32(ptr) ImageTexelPointer 217(g_tTex2di1) 283 31 + 287: 12(int) AtomicOr 286 34 31 285 + 288: 219(ptr) AccessChain 23 218 + 289: 19(ivec2) Load 288 + 290: 25(ptr) AccessChain 23 24 + 291: 12(int) Load 290 + 292: 32(ptr) ImageTexelPointer 217(g_tTex2di1) 289 31 + 293: 12(int) AtomicOr 292 34 31 291 + Store 37(out_i1) 293 + 294: 219(ptr) AccessChain 23 218 + 295: 19(ivec2) Load 294 + 296: 25(ptr) AccessChain 23 28 + 297: 12(int) Load 296 + 298: 32(ptr) ImageTexelPointer 217(g_tTex2di1) 295 31 + 299: 12(int) AtomicXor 298 34 31 297 + 300: 219(ptr) AccessChain 23 218 + 301: 19(ivec2) Load 300 + 302: 25(ptr) AccessChain 23 24 + 303: 12(int) Load 302 + 304: 32(ptr) ImageTexelPointer 217(g_tTex2di1) 301 31 + 305: 12(int) AtomicXor 304 34 31 303 + Store 37(out_i1) 305 + 311: 310(ptr) AccessChain 23 309 + 312: 17(ivec2) Load 311 + 313: 123(ptr) AccessChain 23 122 + 314: 16(int) Load 313 + 315: 128(ptr) ImageTexelPointer 308(g_tTex2du1) 312 31 + 316: 16(int) AtomicIAdd 315 34 31 314 + 317: 310(ptr) AccessChain 23 309 + 318: 17(ivec2) Load 317 + 319: 123(ptr) AccessChain 23 122 + 320: 16(int) Load 319 + 321: 128(ptr) ImageTexelPointer 308(g_tTex2du1) 318 31 + 322: 16(int) AtomicIAdd 321 34 31 320 + Store 132(out_u1) 322 + 323: 310(ptr) AccessChain 23 309 + 324: 17(ivec2) Load 323 + 325: 123(ptr) AccessChain 23 122 + 326: 16(int) Load 325 + 327: 128(ptr) ImageTexelPointer 308(g_tTex2du1) 324 31 + 328: 16(int) AtomicAnd 327 34 31 326 + 329: 310(ptr) AccessChain 23 309 + 330: 17(ivec2) Load 329 + 331: 123(ptr) AccessChain 23 122 + 332: 16(int) Load 331 + 333: 128(ptr) ImageTexelPointer 308(g_tTex2du1) 330 31 + 334: 16(int) AtomicAnd 333 34 31 332 + Store 132(out_u1) 334 + 335: 310(ptr) AccessChain 23 309 + 336: 17(ivec2) Load 335 + 337: 123(ptr) AccessChain 23 153 + 338: 16(int) Load 337 + 339: 123(ptr) AccessChain 23 156 + 340: 16(int) Load 339 + 341: 128(ptr) ImageTexelPointer 308(g_tTex2du1) 336 31 + 342: 16(int) AtomicCompareExchange 341 34 31 31 340 338 + Store 132(out_u1) 342 + 343: 310(ptr) AccessChain 23 309 + 344: 17(ivec2) Load 343 + 345: 123(ptr) AccessChain 23 122 + 346: 16(int) Load 345 + 347: 128(ptr) ImageTexelPointer 308(g_tTex2du1) 344 31 + 348: 16(int) AtomicExchange 347 34 31 346 + Store 132(out_u1) 348 + 349: 310(ptr) AccessChain 23 309 + 350: 17(ivec2) Load 349 + 351: 123(ptr) AccessChain 23 122 + 352: 16(int) Load 351 + 353: 128(ptr) ImageTexelPointer 308(g_tTex2du1) 350 31 + 354: 16(int) AtomicUMax 353 34 31 352 + 355: 310(ptr) AccessChain 23 309 + 356: 17(ivec2) Load 355 + 357: 123(ptr) AccessChain 23 122 + 358: 16(int) Load 357 + 359: 128(ptr) ImageTexelPointer 308(g_tTex2du1) 356 31 + 360: 16(int) AtomicUMax 359 34 31 358 + Store 132(out_u1) 360 + 361: 310(ptr) AccessChain 23 309 + 362: 17(ivec2) Load 361 + 363: 123(ptr) AccessChain 23 122 + 364: 16(int) Load 363 + 365: 128(ptr) ImageTexelPointer 308(g_tTex2du1) 362 31 + 366: 16(int) AtomicUMin 365 34 31 364 + 367: 310(ptr) AccessChain 23 309 + 368: 17(ivec2) Load 367 + 369: 123(ptr) AccessChain 23 122 + 370: 16(int) Load 369 + 371: 128(ptr) ImageTexelPointer 308(g_tTex2du1) 368 31 + 372: 16(int) AtomicUMin 371 34 31 370 + Store 132(out_u1) 372 + 373: 310(ptr) AccessChain 23 309 + 374: 17(ivec2) Load 373 + 375: 123(ptr) AccessChain 23 122 + 376: 16(int) Load 375 + 377: 128(ptr) ImageTexelPointer 308(g_tTex2du1) 374 31 + 378: 16(int) AtomicOr 377 34 31 376 + 379: 310(ptr) AccessChain 23 309 + 380: 17(ivec2) Load 379 + 381: 123(ptr) AccessChain 23 122 + 382: 16(int) Load 381 + 383: 128(ptr) ImageTexelPointer 308(g_tTex2du1) 380 31 + 384: 16(int) AtomicOr 383 34 31 382 + Store 132(out_u1) 384 + 385: 310(ptr) AccessChain 23 309 + 386: 17(ivec2) Load 385 + 387: 123(ptr) AccessChain 23 122 + 388: 16(int) Load 387 + 389: 128(ptr) ImageTexelPointer 308(g_tTex2du1) 386 31 + 390: 16(int) AtomicXor 389 34 31 388 + 391: 310(ptr) AccessChain 23 309 + 392: 17(ivec2) Load 391 + 393: 123(ptr) AccessChain 23 122 + 394: 16(int) Load 393 + 395: 128(ptr) ImageTexelPointer 308(g_tTex2du1) 392 31 + 396: 16(int) AtomicXor 395 34 31 394 + Store 132(out_u1) 396 + 402: 401(ptr) AccessChain 23 400 + 403: 20(ivec3) Load 402 + 404: 25(ptr) AccessChain 23 28 + 405: 12(int) Load 404 + 406: 32(ptr) ImageTexelPointer 399(g_tTex3di1) 403 31 + 407: 12(int) AtomicIAdd 406 34 31 405 + 408: 401(ptr) AccessChain 23 400 + 409: 20(ivec3) Load 408 + 410: 25(ptr) AccessChain 23 24 + 411: 12(int) Load 410 + 412: 32(ptr) ImageTexelPointer 399(g_tTex3di1) 409 31 + 413: 12(int) AtomicIAdd 412 34 31 411 + Store 37(out_i1) 413 + 414: 401(ptr) AccessChain 23 400 + 415: 20(ivec3) Load 414 + 416: 25(ptr) AccessChain 23 28 + 417: 12(int) Load 416 + 418: 32(ptr) ImageTexelPointer 399(g_tTex3di1) 415 31 + 419: 12(int) AtomicAnd 418 34 31 417 + 420: 401(ptr) AccessChain 23 400 + 421: 20(ivec3) Load 420 + 422: 25(ptr) AccessChain 23 24 + 423: 12(int) Load 422 + 424: 32(ptr) ImageTexelPointer 399(g_tTex3di1) 421 31 + 425: 12(int) AtomicAnd 424 34 31 423 + Store 37(out_i1) 425 + 426: 401(ptr) AccessChain 23 400 + 427: 20(ivec3) Load 426 + 428: 25(ptr) AccessChain 23 28 + 429: 12(int) Load 428 + 430: 25(ptr) AccessChain 23 60 + 431: 12(int) Load 430 + 432: 32(ptr) ImageTexelPointer 399(g_tTex3di1) 427 31 + 433: 12(int) AtomicCompareExchange 432 34 31 31 431 429 + Store 37(out_i1) 433 + 434: 401(ptr) AccessChain 23 400 + 435: 20(ivec3) Load 434 + 436: 25(ptr) AccessChain 23 24 + 437: 12(int) Load 436 + 438: 32(ptr) ImageTexelPointer 399(g_tTex3di1) 435 31 + 439: 12(int) AtomicExchange 438 34 31 437 + Store 37(out_i1) 439 + 440: 401(ptr) AccessChain 23 400 + 441: 20(ivec3) Load 440 + 442: 25(ptr) AccessChain 23 28 + 443: 12(int) Load 442 + 444: 32(ptr) ImageTexelPointer 399(g_tTex3di1) 441 31 + 445: 12(int) AtomicSMax 444 34 31 443 + 446: 401(ptr) AccessChain 23 400 + 447: 20(ivec3) Load 446 + 448: 25(ptr) AccessChain 23 24 + 449: 12(int) Load 448 + 450: 32(ptr) ImageTexelPointer 399(g_tTex3di1) 447 31 + 451: 12(int) AtomicSMax 450 34 31 449 + Store 37(out_i1) 451 + 452: 401(ptr) AccessChain 23 400 + 453: 20(ivec3) Load 452 + 454: 25(ptr) AccessChain 23 28 + 455: 12(int) Load 454 + 456: 32(ptr) ImageTexelPointer 399(g_tTex3di1) 453 31 + 457: 12(int) AtomicSMin 456 34 31 455 + 458: 401(ptr) AccessChain 23 400 + 459: 20(ivec3) Load 458 + 460: 25(ptr) AccessChain 23 24 + 461: 12(int) Load 460 + 462: 32(ptr) ImageTexelPointer 399(g_tTex3di1) 459 31 + 463: 12(int) AtomicSMin 462 34 31 461 + Store 37(out_i1) 463 + 464: 401(ptr) AccessChain 23 400 + 465: 20(ivec3) Load 464 + 466: 25(ptr) AccessChain 23 28 + 467: 12(int) Load 466 + 468: 32(ptr) ImageTexelPointer 399(g_tTex3di1) 465 31 + 469: 12(int) AtomicOr 468 34 31 467 + 470: 401(ptr) AccessChain 23 400 + 471: 20(ivec3) Load 470 + 472: 25(ptr) AccessChain 23 24 + 473: 12(int) Load 472 + 474: 32(ptr) ImageTexelPointer 399(g_tTex3di1) 471 31 + 475: 12(int) AtomicOr 474 34 31 473 + Store 37(out_i1) 475 + 476: 401(ptr) AccessChain 23 400 + 477: 20(ivec3) Load 476 + 478: 25(ptr) AccessChain 23 28 + 479: 12(int) Load 478 + 480: 32(ptr) ImageTexelPointer 399(g_tTex3di1) 477 31 + 481: 12(int) AtomicXor 480 34 31 479 + 482: 401(ptr) AccessChain 23 400 + 483: 20(ivec3) Load 482 + 484: 25(ptr) AccessChain 23 24 + 485: 12(int) Load 484 + 486: 32(ptr) ImageTexelPointer 399(g_tTex3di1) 483 31 + 487: 12(int) AtomicXor 486 34 31 485 + Store 37(out_i1) 487 + 493: 492(ptr) AccessChain 23 491 + 494: 18(ivec3) Load 493 + 495: 123(ptr) AccessChain 23 122 + 496: 16(int) Load 495 + 497: 128(ptr) ImageTexelPointer 490(g_tTex3du1) 494 31 + 498: 16(int) AtomicIAdd 497 34 31 496 + 499: 492(ptr) AccessChain 23 491 + 500: 18(ivec3) Load 499 + 501: 123(ptr) AccessChain 23 122 + 502: 16(int) Load 501 + 503: 128(ptr) ImageTexelPointer 490(g_tTex3du1) 500 31 + 504: 16(int) AtomicIAdd 503 34 31 502 + Store 132(out_u1) 504 + 505: 492(ptr) AccessChain 23 491 + 506: 18(ivec3) Load 505 + 507: 123(ptr) AccessChain 23 122 + 508: 16(int) Load 507 + 509: 128(ptr) ImageTexelPointer 490(g_tTex3du1) 506 31 + 510: 16(int) AtomicAnd 509 34 31 508 + 511: 492(ptr) AccessChain 23 491 + 512: 18(ivec3) Load 511 + 513: 123(ptr) AccessChain 23 122 + 514: 16(int) Load 513 + 515: 128(ptr) ImageTexelPointer 490(g_tTex3du1) 512 31 + 516: 16(int) AtomicAnd 515 34 31 514 + Store 132(out_u1) 516 + 517: 492(ptr) AccessChain 23 491 + 518: 18(ivec3) Load 517 + 519: 123(ptr) AccessChain 23 153 + 520: 16(int) Load 519 + 521: 123(ptr) AccessChain 23 156 + 522: 16(int) Load 521 + 523: 128(ptr) ImageTexelPointer 490(g_tTex3du1) 518 31 + 524: 16(int) AtomicCompareExchange 523 34 31 31 522 520 + Store 132(out_u1) 524 + 525: 492(ptr) AccessChain 23 491 + 526: 18(ivec3) Load 525 + 527: 123(ptr) AccessChain 23 122 + 528: 16(int) Load 527 + 529: 128(ptr) ImageTexelPointer 490(g_tTex3du1) 526 31 + 530: 16(int) AtomicExchange 529 34 31 528 + Store 132(out_u1) 530 + 531: 492(ptr) AccessChain 23 491 + 532: 18(ivec3) Load 531 + 533: 123(ptr) AccessChain 23 122 + 534: 16(int) Load 533 + 535: 128(ptr) ImageTexelPointer 490(g_tTex3du1) 532 31 + 536: 16(int) AtomicUMax 535 34 31 534 + 537: 492(ptr) AccessChain 23 491 + 538: 18(ivec3) Load 537 + 539: 123(ptr) AccessChain 23 122 + 540: 16(int) Load 539 + 541: 128(ptr) ImageTexelPointer 490(g_tTex3du1) 538 31 + 542: 16(int) AtomicUMax 541 34 31 540 + Store 132(out_u1) 542 + 543: 492(ptr) AccessChain 23 491 + 544: 18(ivec3) Load 543 + 545: 123(ptr) AccessChain 23 122 + 546: 16(int) Load 545 + 547: 128(ptr) ImageTexelPointer 490(g_tTex3du1) 544 31 + 548: 16(int) AtomicUMin 547 34 31 546 + 549: 492(ptr) AccessChain 23 491 + 550: 18(ivec3) Load 549 + 551: 123(ptr) AccessChain 23 122 + 552: 16(int) Load 551 + 553: 128(ptr) ImageTexelPointer 490(g_tTex3du1) 550 31 + 554: 16(int) AtomicUMin 553 34 31 552 + Store 132(out_u1) 554 + 555: 492(ptr) AccessChain 23 491 + 556: 18(ivec3) Load 555 + 557: 123(ptr) AccessChain 23 122 + 558: 16(int) Load 557 + 559: 128(ptr) ImageTexelPointer 490(g_tTex3du1) 556 31 + 560: 16(int) AtomicOr 559 34 31 558 + 561: 492(ptr) AccessChain 23 491 + 562: 18(ivec3) Load 561 + 563: 123(ptr) AccessChain 23 122 + 564: 16(int) Load 563 + 565: 128(ptr) ImageTexelPointer 490(g_tTex3du1) 562 31 + 566: 16(int) AtomicOr 565 34 31 564 + Store 132(out_u1) 566 + 567: 492(ptr) AccessChain 23 491 + 568: 18(ivec3) Load 567 + 569: 123(ptr) AccessChain 23 122 + 570: 16(int) Load 569 + 571: 128(ptr) ImageTexelPointer 490(g_tTex3du1) 568 31 + 572: 16(int) AtomicXor 571 34 31 570 + 573: 492(ptr) AccessChain 23 491 + 574: 18(ivec3) Load 573 + 575: 123(ptr) AccessChain 23 122 + 576: 16(int) Load 575 + 577: 128(ptr) ImageTexelPointer 490(g_tTex3du1) 574 31 + 578: 16(int) AtomicXor 577 34 31 576 + Store 132(out_u1) 578 + 582: 219(ptr) AccessChain 23 218 + 583: 19(ivec2) Load 582 + 584: 25(ptr) AccessChain 23 28 + 585: 12(int) Load 584 + 586: 32(ptr) ImageTexelPointer 581(g_tTex1di1a) 583 31 + 587: 12(int) AtomicIAdd 586 34 31 585 + 588: 219(ptr) AccessChain 23 218 + 589: 19(ivec2) Load 588 + 590: 25(ptr) AccessChain 23 24 + 591: 12(int) Load 590 + 592: 32(ptr) ImageTexelPointer 581(g_tTex1di1a) 589 31 + 593: 12(int) AtomicIAdd 592 34 31 591 + Store 37(out_i1) 593 + 594: 219(ptr) AccessChain 23 218 + 595: 19(ivec2) Load 594 + 596: 25(ptr) AccessChain 23 28 + 597: 12(int) Load 596 + 598: 32(ptr) ImageTexelPointer 581(g_tTex1di1a) 595 31 + 599: 12(int) AtomicAnd 598 34 31 597 + 600: 219(ptr) AccessChain 23 218 + 601: 19(ivec2) Load 600 + 602: 25(ptr) AccessChain 23 24 + 603: 12(int) Load 602 + 604: 32(ptr) ImageTexelPointer 581(g_tTex1di1a) 601 31 + 605: 12(int) AtomicAnd 604 34 31 603 + Store 37(out_i1) 605 + 606: 219(ptr) AccessChain 23 218 + 607: 19(ivec2) Load 606 + 608: 25(ptr) AccessChain 23 28 + 609: 12(int) Load 608 + 610: 25(ptr) AccessChain 23 60 + 611: 12(int) Load 610 + 612: 32(ptr) ImageTexelPointer 581(g_tTex1di1a) 607 31 + 613: 12(int) AtomicCompareExchange 612 34 31 31 611 609 + Store 37(out_i1) 613 + 614: 219(ptr) AccessChain 23 218 + 615: 19(ivec2) Load 614 + 616: 25(ptr) AccessChain 23 24 + 617: 12(int) Load 616 + 618: 32(ptr) ImageTexelPointer 581(g_tTex1di1a) 615 31 + 619: 12(int) AtomicExchange 618 34 31 617 + Store 37(out_i1) 619 + 620: 219(ptr) AccessChain 23 218 + 621: 19(ivec2) Load 620 + 622: 25(ptr) AccessChain 23 28 + 623: 12(int) Load 622 + 624: 32(ptr) ImageTexelPointer 581(g_tTex1di1a) 621 31 + 625: 12(int) AtomicSMax 624 34 31 623 + 626: 219(ptr) AccessChain 23 218 + 627: 19(ivec2) Load 626 + 628: 25(ptr) AccessChain 23 24 + 629: 12(int) Load 628 + 630: 32(ptr) ImageTexelPointer 581(g_tTex1di1a) 627 31 + 631: 12(int) AtomicSMax 630 34 31 629 + Store 37(out_i1) 631 + 632: 219(ptr) AccessChain 23 218 + 633: 19(ivec2) Load 632 + 634: 25(ptr) AccessChain 23 28 + 635: 12(int) Load 634 + 636: 32(ptr) ImageTexelPointer 581(g_tTex1di1a) 633 31 + 637: 12(int) AtomicSMin 636 34 31 635 + 638: 219(ptr) AccessChain 23 218 + 639: 19(ivec2) Load 638 + 640: 25(ptr) AccessChain 23 24 + 641: 12(int) Load 640 + 642: 32(ptr) ImageTexelPointer 581(g_tTex1di1a) 639 31 + 643: 12(int) AtomicSMin 642 34 31 641 + Store 37(out_i1) 643 + 644: 219(ptr) AccessChain 23 218 + 645: 19(ivec2) Load 644 + 646: 25(ptr) AccessChain 23 28 + 647: 12(int) Load 646 + 648: 32(ptr) ImageTexelPointer 581(g_tTex1di1a) 645 31 + 649: 12(int) AtomicOr 648 34 31 647 + 650: 219(ptr) AccessChain 23 218 + 651: 19(ivec2) Load 650 + 652: 25(ptr) AccessChain 23 24 + 653: 12(int) Load 652 + 654: 32(ptr) ImageTexelPointer 581(g_tTex1di1a) 651 31 + 655: 12(int) AtomicOr 654 34 31 653 + Store 37(out_i1) 655 + 656: 219(ptr) AccessChain 23 218 + 657: 19(ivec2) Load 656 + 658: 25(ptr) AccessChain 23 28 + 659: 12(int) Load 658 + 660: 32(ptr) ImageTexelPointer 581(g_tTex1di1a) 657 31 + 661: 12(int) AtomicXor 660 34 31 659 + 662: 219(ptr) AccessChain 23 218 + 663: 19(ivec2) Load 662 + 664: 25(ptr) AccessChain 23 24 + 665: 12(int) Load 664 + 666: 32(ptr) ImageTexelPointer 581(g_tTex1di1a) 663 31 + 667: 12(int) AtomicXor 666 34 31 665 + Store 37(out_i1) 667 + 671: 310(ptr) AccessChain 23 309 + 672: 17(ivec2) Load 671 + 673: 123(ptr) AccessChain 23 122 + 674: 16(int) Load 673 + 675: 128(ptr) ImageTexelPointer 670(g_tTex1du1a) 672 31 + 676: 16(int) AtomicIAdd 675 34 31 674 + 677: 310(ptr) AccessChain 23 309 + 678: 17(ivec2) Load 677 + 679: 123(ptr) AccessChain 23 122 + 680: 16(int) Load 679 + 681: 128(ptr) ImageTexelPointer 670(g_tTex1du1a) 678 31 + 682: 16(int) AtomicIAdd 681 34 31 680 + Store 132(out_u1) 682 + 683: 310(ptr) AccessChain 23 309 + 684: 17(ivec2) Load 683 + 685: 123(ptr) AccessChain 23 122 + 686: 16(int) Load 685 + 687: 128(ptr) ImageTexelPointer 670(g_tTex1du1a) 684 31 + 688: 16(int) AtomicAnd 687 34 31 686 + 689: 310(ptr) AccessChain 23 309 + 690: 17(ivec2) Load 689 + 691: 123(ptr) AccessChain 23 122 + 692: 16(int) Load 691 + 693: 128(ptr) ImageTexelPointer 670(g_tTex1du1a) 690 31 + 694: 16(int) AtomicAnd 693 34 31 692 + Store 132(out_u1) 694 + 695: 310(ptr) AccessChain 23 309 + 696: 17(ivec2) Load 695 + 697: 123(ptr) AccessChain 23 153 + 698: 16(int) Load 697 + 699: 123(ptr) AccessChain 23 156 + 700: 16(int) Load 699 + 701: 128(ptr) ImageTexelPointer 670(g_tTex1du1a) 696 31 + 702: 16(int) AtomicCompareExchange 701 34 31 31 700 698 + Store 132(out_u1) 702 + 703: 310(ptr) AccessChain 23 309 + 704: 17(ivec2) Load 703 + 705: 123(ptr) AccessChain 23 122 + 706: 16(int) Load 705 + 707: 128(ptr) ImageTexelPointer 670(g_tTex1du1a) 704 31 + 708: 16(int) AtomicExchange 707 34 31 706 + Store 132(out_u1) 708 + 709: 310(ptr) AccessChain 23 309 + 710: 17(ivec2) Load 709 + 711: 123(ptr) AccessChain 23 122 + 712: 16(int) Load 711 + 713: 128(ptr) ImageTexelPointer 670(g_tTex1du1a) 710 31 + 714: 16(int) AtomicUMax 713 34 31 712 + 715: 310(ptr) AccessChain 23 309 + 716: 17(ivec2) Load 715 + 717: 123(ptr) AccessChain 23 122 + 718: 16(int) Load 717 + 719: 128(ptr) ImageTexelPointer 670(g_tTex1du1a) 716 31 + 720: 16(int) AtomicUMax 719 34 31 718 + Store 132(out_u1) 720 + 721: 310(ptr) AccessChain 23 309 + 722: 17(ivec2) Load 721 + 723: 123(ptr) AccessChain 23 122 + 724: 16(int) Load 723 + 725: 128(ptr) ImageTexelPointer 670(g_tTex1du1a) 722 31 + 726: 16(int) AtomicUMin 725 34 31 724 + 727: 310(ptr) AccessChain 23 309 + 728: 17(ivec2) Load 727 + 729: 123(ptr) AccessChain 23 122 + 730: 16(int) Load 729 + 731: 128(ptr) ImageTexelPointer 670(g_tTex1du1a) 728 31 + 732: 16(int) AtomicUMin 731 34 31 730 + Store 132(out_u1) 732 + 733: 310(ptr) AccessChain 23 309 + 734: 17(ivec2) Load 733 + 735: 123(ptr) AccessChain 23 122 + 736: 16(int) Load 735 + 737: 128(ptr) ImageTexelPointer 670(g_tTex1du1a) 734 31 + 738: 16(int) AtomicOr 737 34 31 736 + 739: 310(ptr) AccessChain 23 309 + 740: 17(ivec2) Load 739 + 741: 123(ptr) AccessChain 23 122 + 742: 16(int) Load 741 + 743: 128(ptr) ImageTexelPointer 670(g_tTex1du1a) 740 31 + 744: 16(int) AtomicOr 743 34 31 742 + Store 132(out_u1) 744 + 745: 310(ptr) AccessChain 23 309 + 746: 17(ivec2) Load 745 + 747: 123(ptr) AccessChain 23 122 + 748: 16(int) Load 747 + 749: 128(ptr) ImageTexelPointer 670(g_tTex1du1a) 746 31 + 750: 16(int) AtomicXor 749 34 31 748 + 751: 310(ptr) AccessChain 23 309 + 752: 17(ivec2) Load 751 + 753: 123(ptr) AccessChain 23 122 + 754: 16(int) Load 753 + 755: 128(ptr) ImageTexelPointer 670(g_tTex1du1a) 752 31 + 756: 16(int) AtomicXor 755 34 31 754 + Store 132(out_u1) 756 + 757: 219(ptr) AccessChain 23 218 + 758: 19(ivec2) Load 757 + 759: 25(ptr) AccessChain 23 28 + 760: 12(int) Load 759 + 761: 32(ptr) ImageTexelPointer 581(g_tTex1di1a) 758 31 + 762: 12(int) AtomicIAdd 761 34 31 760 + 763: 219(ptr) AccessChain 23 218 + 764: 19(ivec2) Load 763 + 765: 25(ptr) AccessChain 23 24 + 766: 12(int) Load 765 + 767: 32(ptr) ImageTexelPointer 581(g_tTex1di1a) 764 31 + 768: 12(int) AtomicIAdd 767 34 31 766 + Store 37(out_i1) 768 + 769: 219(ptr) AccessChain 23 218 + 770: 19(ivec2) Load 769 + 771: 25(ptr) AccessChain 23 28 + 772: 12(int) Load 771 + 773: 32(ptr) ImageTexelPointer 581(g_tTex1di1a) 770 31 + 774: 12(int) AtomicAnd 773 34 31 772 + 775: 219(ptr) AccessChain 23 218 + 776: 19(ivec2) Load 775 + 777: 25(ptr) AccessChain 23 24 + 778: 12(int) Load 777 + 779: 32(ptr) ImageTexelPointer 581(g_tTex1di1a) 776 31 + 780: 12(int) AtomicAnd 779 34 31 778 + Store 37(out_i1) 780 + 781: 219(ptr) AccessChain 23 218 + 782: 19(ivec2) Load 781 + 783: 25(ptr) AccessChain 23 28 + 784: 12(int) Load 783 + 785: 25(ptr) AccessChain 23 60 + 786: 12(int) Load 785 + 787: 32(ptr) ImageTexelPointer 581(g_tTex1di1a) 782 31 + 788: 12(int) AtomicCompareExchange 787 34 31 31 786 784 + Store 37(out_i1) 788 + 789: 219(ptr) AccessChain 23 218 + 790: 19(ivec2) Load 789 + 791: 25(ptr) AccessChain 23 24 + 792: 12(int) Load 791 + 793: 32(ptr) ImageTexelPointer 581(g_tTex1di1a) 790 31 + 794: 12(int) AtomicExchange 793 34 31 792 + Store 37(out_i1) 794 + 795: 219(ptr) AccessChain 23 218 + 796: 19(ivec2) Load 795 + 797: 25(ptr) AccessChain 23 28 + 798: 12(int) Load 797 + 799: 32(ptr) ImageTexelPointer 581(g_tTex1di1a) 796 31 + 800: 12(int) AtomicSMax 799 34 31 798 + 801: 219(ptr) AccessChain 23 218 + 802: 19(ivec2) Load 801 + 803: 25(ptr) AccessChain 23 24 + 804: 12(int) Load 803 + 805: 32(ptr) ImageTexelPointer 581(g_tTex1di1a) 802 31 + 806: 12(int) AtomicSMax 805 34 31 804 + Store 37(out_i1) 806 + 807: 219(ptr) AccessChain 23 218 + 808: 19(ivec2) Load 807 + 809: 25(ptr) AccessChain 23 28 + 810: 12(int) Load 809 + 811: 32(ptr) ImageTexelPointer 581(g_tTex1di1a) 808 31 + 812: 12(int) AtomicSMin 811 34 31 810 + 813: 219(ptr) AccessChain 23 218 + 814: 19(ivec2) Load 813 + 815: 25(ptr) AccessChain 23 24 + 816: 12(int) Load 815 + 817: 32(ptr) ImageTexelPointer 581(g_tTex1di1a) 814 31 + 818: 12(int) AtomicSMin 817 34 31 816 + Store 37(out_i1) 818 + 819: 219(ptr) AccessChain 23 218 + 820: 19(ivec2) Load 819 + 821: 25(ptr) AccessChain 23 28 + 822: 12(int) Load 821 + 823: 32(ptr) ImageTexelPointer 581(g_tTex1di1a) 820 31 + 824: 12(int) AtomicOr 823 34 31 822 + 825: 219(ptr) AccessChain 23 218 + 826: 19(ivec2) Load 825 + 827: 25(ptr) AccessChain 23 24 + 828: 12(int) Load 827 + 829: 32(ptr) ImageTexelPointer 581(g_tTex1di1a) 826 31 + 830: 12(int) AtomicOr 829 34 31 828 + Store 37(out_i1) 830 + 831: 219(ptr) AccessChain 23 218 + 832: 19(ivec2) Load 831 + 833: 25(ptr) AccessChain 23 28 + 834: 12(int) Load 833 + 835: 32(ptr) ImageTexelPointer 581(g_tTex1di1a) 832 31 + 836: 12(int) AtomicXor 835 34 31 834 + 837: 219(ptr) AccessChain 23 218 + 838: 19(ivec2) Load 837 + 839: 25(ptr) AccessChain 23 24 + 840: 12(int) Load 839 + 841: 32(ptr) ImageTexelPointer 581(g_tTex1di1a) 838 31 + 842: 12(int) AtomicXor 841 34 31 840 + Store 37(out_i1) 842 + 843: 310(ptr) AccessChain 23 309 + 844: 17(ivec2) Load 843 + 845: 123(ptr) AccessChain 23 122 + 846: 16(int) Load 845 + 847: 128(ptr) ImageTexelPointer 670(g_tTex1du1a) 844 31 + 848: 16(int) AtomicIAdd 847 34 31 846 + 849: 310(ptr) AccessChain 23 309 + 850: 17(ivec2) Load 849 + 851: 123(ptr) AccessChain 23 122 + 852: 16(int) Load 851 + 853: 128(ptr) ImageTexelPointer 670(g_tTex1du1a) 850 31 + 854: 16(int) AtomicIAdd 853 34 31 852 + Store 132(out_u1) 854 + 855: 310(ptr) AccessChain 23 309 + 856: 17(ivec2) Load 855 + 857: 123(ptr) AccessChain 23 122 + 858: 16(int) Load 857 + 859: 128(ptr) ImageTexelPointer 670(g_tTex1du1a) 856 31 + 860: 16(int) AtomicAnd 859 34 31 858 + 861: 310(ptr) AccessChain 23 309 + 862: 17(ivec2) Load 861 + 863: 123(ptr) AccessChain 23 122 + 864: 16(int) Load 863 + 865: 128(ptr) ImageTexelPointer 670(g_tTex1du1a) 862 31 + 866: 16(int) AtomicAnd 865 34 31 864 + Store 132(out_u1) 866 + 867: 310(ptr) AccessChain 23 309 + 868: 17(ivec2) Load 867 + 869: 123(ptr) AccessChain 23 153 + 870: 16(int) Load 869 + 871: 123(ptr) AccessChain 23 156 + 872: 16(int) Load 871 + 873: 128(ptr) ImageTexelPointer 670(g_tTex1du1a) 868 31 + 874: 16(int) AtomicCompareExchange 873 34 31 31 872 870 + Store 132(out_u1) 874 + 875: 310(ptr) AccessChain 23 309 + 876: 17(ivec2) Load 875 + 877: 123(ptr) AccessChain 23 122 + 878: 16(int) Load 877 + 879: 128(ptr) ImageTexelPointer 670(g_tTex1du1a) 876 31 + 880: 16(int) AtomicExchange 879 34 31 878 + Store 132(out_u1) 880 + 881: 310(ptr) AccessChain 23 309 + 882: 17(ivec2) Load 881 + 883: 123(ptr) AccessChain 23 122 + 884: 16(int) Load 883 + 885: 128(ptr) ImageTexelPointer 670(g_tTex1du1a) 882 31 + 886: 16(int) AtomicUMax 885 34 31 884 + 887: 310(ptr) AccessChain 23 309 + 888: 17(ivec2) Load 887 + 889: 123(ptr) AccessChain 23 122 + 890: 16(int) Load 889 + 891: 128(ptr) ImageTexelPointer 670(g_tTex1du1a) 888 31 + 892: 16(int) AtomicUMax 891 34 31 890 + Store 132(out_u1) 892 + 893: 310(ptr) AccessChain 23 309 + 894: 17(ivec2) Load 893 + 895: 123(ptr) AccessChain 23 122 + 896: 16(int) Load 895 + 897: 128(ptr) ImageTexelPointer 670(g_tTex1du1a) 894 31 + 898: 16(int) AtomicUMin 897 34 31 896 + 899: 310(ptr) AccessChain 23 309 + 900: 17(ivec2) Load 899 + 901: 123(ptr) AccessChain 23 122 + 902: 16(int) Load 901 + 903: 128(ptr) ImageTexelPointer 670(g_tTex1du1a) 900 31 + 904: 16(int) AtomicUMin 903 34 31 902 + Store 132(out_u1) 904 + 905: 310(ptr) AccessChain 23 309 + 906: 17(ivec2) Load 905 + 907: 123(ptr) AccessChain 23 122 + 908: 16(int) Load 907 + 909: 128(ptr) ImageTexelPointer 670(g_tTex1du1a) 906 31 + 910: 16(int) AtomicOr 909 34 31 908 + 911: 310(ptr) AccessChain 23 309 + 912: 17(ivec2) Load 911 + 913: 123(ptr) AccessChain 23 122 + 914: 16(int) Load 913 + 915: 128(ptr) ImageTexelPointer 670(g_tTex1du1a) 912 31 + 916: 16(int) AtomicOr 915 34 31 914 + Store 132(out_u1) 916 + 917: 310(ptr) AccessChain 23 309 + 918: 17(ivec2) Load 917 + 919: 123(ptr) AccessChain 23 122 + 920: 16(int) Load 919 + 921: 128(ptr) ImageTexelPointer 670(g_tTex1du1a) 918 31 + 922: 16(int) AtomicXor 921 34 31 920 + 923: 310(ptr) AccessChain 23 309 + 924: 17(ivec2) Load 923 + 925: 123(ptr) AccessChain 23 122 + 926: 16(int) Load 925 + 927: 128(ptr) ImageTexelPointer 670(g_tTex1du1a) 924 31 + 928: 16(int) AtomicXor 927 34 31 926 + Store 132(out_u1) 928 + 932: 25(ptr) AccessChain 23 24 + 933: 12(int) Load 932 + 934: 25(ptr) AccessChain 23 28 + 935: 12(int) Load 934 + 936: 32(ptr) ImageTexelPointer 931(g_tBuffI) 933 31 + 937: 12(int) AtomicIAdd 936 34 31 935 + 938: 25(ptr) AccessChain 23 24 + 939: 12(int) Load 938 + 940: 25(ptr) AccessChain 23 24 + 941: 12(int) Load 940 + 942: 32(ptr) ImageTexelPointer 931(g_tBuffI) 939 31 + 943: 12(int) AtomicIAdd 942 34 31 941 + Store 37(out_i1) 943 + 944: 25(ptr) AccessChain 23 24 + 945: 12(int) Load 944 + 946: 25(ptr) AccessChain 23 28 + 947: 12(int) Load 946 + 948: 32(ptr) ImageTexelPointer 931(g_tBuffI) 945 31 + 949: 12(int) AtomicAnd 948 34 31 947 + 950: 25(ptr) AccessChain 23 24 + 951: 12(int) Load 950 + 952: 25(ptr) AccessChain 23 24 + 953: 12(int) Load 952 + 954: 32(ptr) ImageTexelPointer 931(g_tBuffI) 951 31 + 955: 12(int) AtomicAnd 954 34 31 953 + Store 37(out_i1) 955 + 956: 25(ptr) AccessChain 23 24 + 957: 12(int) Load 956 + 958: 25(ptr) AccessChain 23 28 + 959: 12(int) Load 958 + 960: 25(ptr) AccessChain 23 60 + 961: 12(int) Load 960 + 962: 32(ptr) ImageTexelPointer 931(g_tBuffI) 957 31 + 963: 12(int) AtomicCompareExchange 962 34 31 31 961 959 + Store 37(out_i1) 963 + 964: 25(ptr) AccessChain 23 24 + 965: 12(int) Load 964 + 966: 25(ptr) AccessChain 23 24 + 967: 12(int) Load 966 + 968: 32(ptr) ImageTexelPointer 931(g_tBuffI) 965 31 + 969: 12(int) AtomicExchange 968 34 31 967 + Store 37(out_i1) 969 + 970: 25(ptr) AccessChain 23 24 + 971: 12(int) Load 970 + 972: 25(ptr) AccessChain 23 28 + 973: 12(int) Load 972 + 974: 32(ptr) ImageTexelPointer 931(g_tBuffI) 971 31 + 975: 12(int) AtomicSMax 974 34 31 973 + 976: 25(ptr) AccessChain 23 24 + 977: 12(int) Load 976 + 978: 25(ptr) AccessChain 23 24 + 979: 12(int) Load 978 + 980: 32(ptr) ImageTexelPointer 931(g_tBuffI) 977 31 + 981: 12(int) AtomicSMax 980 34 31 979 + Store 37(out_i1) 981 + 982: 25(ptr) AccessChain 23 24 + 983: 12(int) Load 982 + 984: 25(ptr) AccessChain 23 28 + 985: 12(int) Load 984 + 986: 32(ptr) ImageTexelPointer 931(g_tBuffI) 983 31 + 987: 12(int) AtomicSMin 986 34 31 985 + 988: 25(ptr) AccessChain 23 24 + 989: 12(int) Load 988 + 990: 25(ptr) AccessChain 23 24 + 991: 12(int) Load 990 + 992: 32(ptr) ImageTexelPointer 931(g_tBuffI) 989 31 + 993: 12(int) AtomicSMin 992 34 31 991 + Store 37(out_i1) 993 + 994: 25(ptr) AccessChain 23 24 + 995: 12(int) Load 994 + 996: 25(ptr) AccessChain 23 28 + 997: 12(int) Load 996 + 998: 32(ptr) ImageTexelPointer 931(g_tBuffI) 995 31 + 999: 12(int) AtomicOr 998 34 31 997 + 1000: 25(ptr) AccessChain 23 24 + 1001: 12(int) Load 1000 + 1002: 25(ptr) AccessChain 23 24 + 1003: 12(int) Load 1002 + 1004: 32(ptr) ImageTexelPointer 931(g_tBuffI) 1001 31 + 1005: 12(int) AtomicOr 1004 34 31 1003 + Store 37(out_i1) 1005 + 1006: 25(ptr) AccessChain 23 24 + 1007: 12(int) Load 1006 + 1008: 25(ptr) AccessChain 23 28 + 1009: 12(int) Load 1008 + 1010: 32(ptr) ImageTexelPointer 931(g_tBuffI) 1007 31 + 1011: 12(int) AtomicXor 1010 34 31 1009 + 1012: 25(ptr) AccessChain 23 24 + 1013: 12(int) Load 1012 + 1014: 25(ptr) AccessChain 23 24 + 1015: 12(int) Load 1014 + 1016: 32(ptr) ImageTexelPointer 931(g_tBuffI) 1013 31 + 1017: 12(int) AtomicXor 1016 34 31 1015 + Store 37(out_i1) 1017 + 1021: 123(ptr) AccessChain 23 122 + 1022: 16(int) Load 1021 + 1023: 123(ptr) AccessChain 23 122 + 1024: 16(int) Load 1023 + 1025: 128(ptr) ImageTexelPointer 1020(g_tBuffU) 1022 31 + 1026: 16(int) AtomicIAdd 1025 34 31 1024 + 1027: 123(ptr) AccessChain 23 122 + 1028: 16(int) Load 1027 + 1029: 123(ptr) AccessChain 23 122 + 1030: 16(int) Load 1029 + 1031: 128(ptr) ImageTexelPointer 1020(g_tBuffU) 1028 31 + 1032: 16(int) AtomicIAdd 1031 34 31 1030 + Store 132(out_u1) 1032 + 1033: 123(ptr) AccessChain 23 122 + 1034: 16(int) Load 1033 + 1035: 123(ptr) AccessChain 23 122 + 1036: 16(int) Load 1035 + 1037: 128(ptr) ImageTexelPointer 1020(g_tBuffU) 1034 31 + 1038: 16(int) AtomicAnd 1037 34 31 1036 + 1039: 123(ptr) AccessChain 23 122 + 1040: 16(int) Load 1039 + 1041: 123(ptr) AccessChain 23 122 + 1042: 16(int) Load 1041 + 1043: 128(ptr) ImageTexelPointer 1020(g_tBuffU) 1040 31 + 1044: 16(int) AtomicAnd 1043 34 31 1042 + Store 132(out_u1) 1044 + 1045: 123(ptr) AccessChain 23 122 + 1046: 16(int) Load 1045 + 1047: 123(ptr) AccessChain 23 153 + 1048: 16(int) Load 1047 + 1049: 123(ptr) AccessChain 23 156 + 1050: 16(int) Load 1049 + 1051: 128(ptr) ImageTexelPointer 1020(g_tBuffU) 1046 31 + 1052: 16(int) AtomicCompareExchange 1051 34 31 31 1050 1048 + Store 132(out_u1) 1052 + 1053: 123(ptr) AccessChain 23 122 + 1054: 16(int) Load 1053 + 1055: 123(ptr) AccessChain 23 122 + 1056: 16(int) Load 1055 + 1057: 128(ptr) ImageTexelPointer 1020(g_tBuffU) 1054 31 + 1058: 16(int) AtomicExchange 1057 34 31 1056 + Store 132(out_u1) 1058 + 1059: 123(ptr) AccessChain 23 122 + 1060: 16(int) Load 1059 + 1061: 123(ptr) AccessChain 23 122 + 1062: 16(int) Load 1061 + 1063: 128(ptr) ImageTexelPointer 1020(g_tBuffU) 1060 31 + 1064: 16(int) AtomicUMax 1063 34 31 1062 + 1065: 123(ptr) AccessChain 23 122 + 1066: 16(int) Load 1065 + 1067: 123(ptr) AccessChain 23 122 + 1068: 16(int) Load 1067 + 1069: 128(ptr) ImageTexelPointer 1020(g_tBuffU) 1066 31 + 1070: 16(int) AtomicUMax 1069 34 31 1068 + Store 132(out_u1) 1070 + 1071: 123(ptr) AccessChain 23 122 + 1072: 16(int) Load 1071 + 1073: 123(ptr) AccessChain 23 122 + 1074: 16(int) Load 1073 + 1075: 128(ptr) ImageTexelPointer 1020(g_tBuffU) 1072 31 + 1076: 16(int) AtomicUMin 1075 34 31 1074 + 1077: 123(ptr) AccessChain 23 122 + 1078: 16(int) Load 1077 + 1079: 123(ptr) AccessChain 23 122 + 1080: 16(int) Load 1079 + 1081: 128(ptr) ImageTexelPointer 1020(g_tBuffU) 1078 31 + 1082: 16(int) AtomicUMin 1081 34 31 1080 + Store 132(out_u1) 1082 + 1083: 123(ptr) AccessChain 23 122 + 1084: 16(int) Load 1083 + 1085: 123(ptr) AccessChain 23 122 + 1086: 16(int) Load 1085 + 1087: 128(ptr) ImageTexelPointer 1020(g_tBuffU) 1084 31 + 1088: 16(int) AtomicOr 1087 34 31 1086 + 1089: 123(ptr) AccessChain 23 122 + 1090: 16(int) Load 1089 + 1091: 123(ptr) AccessChain 23 122 + 1092: 16(int) Load 1091 + 1093: 128(ptr) ImageTexelPointer 1020(g_tBuffU) 1090 31 + 1094: 16(int) AtomicOr 1093 34 31 1092 + Store 132(out_u1) 1094 + 1095: 123(ptr) AccessChain 23 122 + 1096: 16(int) Load 1095 + 1097: 123(ptr) AccessChain 23 122 + 1098: 16(int) Load 1097 + 1099: 128(ptr) ImageTexelPointer 1020(g_tBuffU) 1096 31 + 1100: 16(int) AtomicXor 1099 34 31 1098 + 1101: 123(ptr) AccessChain 23 122 + 1102: 16(int) Load 1101 + 1103: 123(ptr) AccessChain 23 122 + 1104: 16(int) Load 1103 + 1105: 128(ptr) ImageTexelPointer 1020(g_tBuffU) 1102 31 + 1106: 16(int) AtomicXor 1105 34 31 1104 + Store 132(out_u1) 1106 + 1112: 1111(ptr) AccessChain 1108(psout) 122 + Store 1112 1110 + 1113:8(PS_OUTPUT) Load 1108(psout) + ReturnValue 1113 + FunctionEnd 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 new file mode 100644 index 0000000..ece7bfa --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.bracket.frag.out @@ -0,0 +1,2664 @@ +hlsl.rw.bracket.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:42 Function Definition: Fn1(vi4; ( temp 4-component vector of int) +0:42 Function Parameters: +0:42 'x' ( in 4-component vector of int) +0:? Sequence +0:42 Branch: Return with expression +0:42 'x' ( in 4-component vector of int) +0:43 Function Definition: Fn1(vu4; ( temp 4-component vector of uint) +0:43 Function Parameters: +0:43 'x' ( in 4-component vector of uint) +0:? Sequence +0:43 Branch: Return with expression +0:43 'x' ( in 4-component vector of uint) +0:44 Function Definition: Fn1(vf4; ( temp 4-component vector of float) +0:44 Function Parameters: +0:44 'x' ( in 4-component vector of float) +0:? Sequence +0:44 Branch: Return with expression +0:44 'x' ( in 4-component vector of float) +0:46 Function Definition: Fn2(vi4; ( temp void) +0:46 Function Parameters: +0:46 'x' ( out 4-component vector of int) +0:? Sequence +0:46 move second child to first child ( temp 4-component vector of int) +0:46 'x' ( out 4-component vector of int) +0:46 Constant: +0:46 0 (const int) +0:46 0 (const int) +0:46 0 (const int) +0:46 0 (const int) +0:47 Function Definition: Fn2(vu4; ( temp void) +0:47 Function Parameters: +0:47 'x' ( out 4-component vector of uint) +0:? Sequence +0:47 move second child to first child ( temp 4-component vector of uint) +0:47 'x' ( out 4-component vector of uint) +0:47 Constant: +0:47 0 (const uint) +0:47 0 (const uint) +0:47 0 (const uint) +0:47 0 (const uint) +0:48 Function Definition: Fn2(vf4; ( temp void) +0:48 Function Parameters: +0:48 'x' ( out 4-component vector of float) +0:? Sequence +0:48 move second child to first child ( temp 4-component vector of float) +0:48 'x' ( out 4-component vector of float) +0:48 Constant: +0:48 0.000000 +0:48 0.000000 +0:48 0.000000 +0:48 0.000000 +0:50 Function Definition: SomeValue( ( temp 4-component vector of float) +0:50 Function Parameters: +0:? Sequence +0:50 Branch: Return with expression +0:50 Convert int to float ( temp 4-component vector of float) +0:50 c4: direct index for structure ( uniform 4-component vector of int) +0:50 '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:50 Constant: +0:50 3 (const uint) +0:53 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color}) +0:53 Function Parameters: +0:? Sequence +0:57 imageLoad ( temp 4-component vector of float) +0:57 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:57 c1: direct index for structure ( uniform int) +0:57 '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:57 Constant: +0:57 0 (const uint) +0:59 Sequence +0:59 move second child to first child ( temp 4-component vector of float) +0:59 'r00' ( temp 4-component vector of float) +0:59 imageLoad ( temp 4-component vector of float) +0:59 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:59 c1: direct index for structure ( uniform int) +0:59 '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:59 Constant: +0:59 0 (const uint) +0:60 Sequence +0:60 move second child to first child ( temp 4-component vector of int) +0:60 'r01' ( temp 4-component vector of int) +0:60 imageLoad ( temp 4-component vector of int) +0:60 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:60 c1: direct index for structure ( uniform int) +0:60 '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:60 Constant: +0:60 0 (const uint) +0:61 Sequence +0:61 move second child to first child ( temp 4-component vector of uint) +0:61 'r02' ( temp 4-component vector of uint) +0:61 imageLoad ( temp 4-component vector of uint) +0:61 'g_tTex1du4' (layout( rgba32ui) uniform uimage1D) +0:61 c1: direct index for structure ( uniform int) +0:61 '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:61 Constant: +0:61 0 (const uint) +0:64 Sequence +0:64 move second child to first child ( temp 4-component vector of float) +0:64 'r10' ( temp 4-component vector of float) +0:64 imageLoad ( temp 4-component vector of float) +0:64 'g_tTex2df4' (layout( rgba32f) uniform image2D) +0:64 c2: direct index for structure ( uniform 2-component vector of int) +0:64 '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:64 Constant: +0:64 1 (const uint) +0:65 Sequence +0:65 move second child to first child ( temp 4-component vector of int) +0:65 'r11' ( temp 4-component vector of int) +0:65 imageLoad ( temp 4-component vector of int) +0:65 'g_tTex2di4' (layout( rgba32i) uniform iimage2D) +0:65 c2: direct index for structure ( uniform 2-component vector of int) +0:65 '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:65 Constant: +0:65 1 (const uint) +0:66 Sequence +0:66 move second child to first child ( temp 4-component vector of uint) +0:66 'r12' ( temp 4-component vector of uint) +0:66 imageLoad ( temp 4-component vector of uint) +0:66 'g_tTex2du4' (layout( rgba32ui) uniform uimage2D) +0:66 c2: direct index for structure ( uniform 2-component vector of int) +0:66 '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:66 Constant: +0:66 1 (const uint) +0:69 Sequence +0:69 move second child to first child ( temp 4-component vector of float) +0:69 'r20' ( temp 4-component vector of float) +0:69 imageLoad ( temp 4-component vector of float) +0:69 'g_tTex3df4' (layout( rgba32f) uniform image3D) +0:69 c3: direct index for structure ( uniform 3-component vector of int) +0:69 '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:69 Constant: +0:69 2 (const uint) +0:70 Sequence +0:70 move second child to first child ( temp 4-component vector of int) +0:70 'r21' ( temp 4-component vector of int) +0:70 imageLoad ( temp 4-component vector of int) +0:70 'g_tTex3di4' (layout( rgba32i) uniform iimage3D) +0:70 c3: direct index for structure ( uniform 3-component vector of int) +0:70 '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:70 Constant: +0:70 2 (const uint) +0:71 Sequence +0:71 move second child to first child ( temp 4-component vector of uint) +0:71 'r22' ( temp 4-component vector of uint) +0:71 imageLoad ( temp 4-component vector of uint) +0:71 'g_tTex3du4' (layout( rgba32ui) uniform uimage3D) +0:71 c3: direct index for structure ( uniform 3-component vector of int) +0:71 '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:71 Constant: +0:71 2 (const uint) +0:73 Sequence +0:73 move second child to first child ( temp 4-component vector of float) +0:73 'lf4' ( temp 4-component vector of float) +0:73 uf4: direct index for structure ( uniform 4-component vector of float) +0:73 '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:73 Constant: +0:73 8 (const uint) +0:77 Sequence +0:77 move second child to first child ( temp 4-component vector of float) +0:77 'storeTemp' ( temp 4-component vector of float) +0:77 Function Call: SomeValue( ( temp 4-component vector of float) +0:77 imageStore ( temp void) +0:77 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:77 c1: direct index for structure ( uniform int) +0:77 '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:77 Constant: +0:77 0 (const uint) +0:77 'storeTemp' ( temp 4-component vector of float) +0:77 'storeTemp' ( temp 4-component vector of float) +0:78 Sequence +0:78 imageStore ( temp void) +0:78 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:78 c1: direct index for structure ( uniform int) +0:78 '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:78 Constant: +0:78 0 (const uint) +0:78 'lf4' ( temp 4-component vector of float) +0:78 'lf4' ( temp 4-component vector of float) +0:79 Sequence +0:79 move second child to first child ( temp 4-component vector of int) +0:79 'storeTemp' ( temp 4-component vector of int) +0:? Constant: +0:? 2 (const int) +0:? 2 (const int) +0:? 3 (const int) +0:? 4 (const int) +0:79 imageStore ( temp void) +0:79 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:79 c1: direct index for structure ( uniform int) +0:79 '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:79 Constant: +0:79 0 (const uint) +0:79 'storeTemp' ( temp 4-component vector of int) +0:79 'storeTemp' ( temp 4-component vector of int) +0:80 Sequence +0:80 move second child to first child ( temp 4-component vector of uint) +0:80 'storeTemp' ( temp 4-component vector of uint) +0:? Constant: +0:? 3 (const uint) +0:? 2 (const uint) +0:? 3 (const uint) +0:? 4 (const uint) +0:80 imageStore ( temp void) +0:80 'g_tTex1du4' (layout( rgba32ui) uniform uimage1D) +0:80 c1: direct index for structure ( uniform int) +0:80 '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:80 Constant: +0:80 0 (const uint) +0:80 'storeTemp' ( temp 4-component vector of uint) +0:80 'storeTemp' ( temp 4-component vector of uint) +0:83 Sequence +0:83 move second child to first child ( temp 4-component vector of float) +0:83 'val1' ( temp 4-component vector of float) +0:83 Sequence +0:83 move second child to first child ( temp int) +0:83 'coordTemp' ( temp int) +0:83 c1: direct index for structure ( uniform int) +0:83 '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:83 Constant: +0:83 0 (const uint) +0:83 move second child to first child ( temp 4-component vector of float) +0:83 'storeTemp' ( temp 4-component vector of float) +0:83 imageLoad ( temp 4-component vector of float) +0:83 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:83 'coordTemp' ( temp int) +0:83 vector scale second child into first child ( temp 4-component vector of float) +0:83 'storeTemp' ( temp 4-component vector of float) +0:83 Constant: +0:83 2.000000 +0:83 imageStore ( temp void) +0:83 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:83 'coordTemp' ( temp int) +0:83 'storeTemp' ( temp 4-component vector of float) +0:83 'storeTemp' ( temp 4-component vector of float) +0:84 Sequence +0:84 move second child to first child ( temp int) +0:84 'coordTemp' ( temp int) +0:84 c1: direct index for structure ( uniform int) +0:84 '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:84 Constant: +0:84 0 (const uint) +0:84 move second child to first child ( temp 4-component vector of float) +0:84 'storeTemp' ( temp 4-component vector of float) +0:84 imageLoad ( temp 4-component vector of float) +0:84 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:84 'coordTemp' ( temp int) +0:84 subtract second child into first child ( temp 4-component vector of float) +0:84 'storeTemp' ( temp 4-component vector of float) +0:84 Constant: +0:84 3.000000 +0:84 imageStore ( temp void) +0:84 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:84 'coordTemp' ( temp int) +0:84 'storeTemp' ( temp 4-component vector of float) +0:84 'storeTemp' ( temp 4-component vector of float) +0:85 Sequence +0:85 move second child to first child ( temp int) +0:85 'coordTemp' ( temp int) +0:85 c1: direct index for structure ( uniform int) +0:85 '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:85 Constant: +0:85 0 (const uint) +0:85 move second child to first child ( temp 4-component vector of float) +0:85 'storeTemp' ( temp 4-component vector of float) +0:85 imageLoad ( temp 4-component vector of float) +0:85 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:85 'coordTemp' ( temp int) +0:85 add second child into first child ( temp 4-component vector of float) +0:85 'storeTemp' ( temp 4-component vector of float) +0:85 Constant: +0:85 4.000000 +0:85 imageStore ( temp void) +0:85 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:85 'coordTemp' ( temp int) +0:85 'storeTemp' ( temp 4-component vector of float) +0:85 'storeTemp' ( temp 4-component vector of float) +0:87 Sequence +0:87 move second child to first child ( temp int) +0:87 'coordTemp' ( temp int) +0:87 c1: direct index for structure ( uniform int) +0:87 '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:87 Constant: +0:87 0 (const uint) +0:87 move second child to first child ( temp 4-component vector of int) +0:87 'storeTemp' ( temp 4-component vector of int) +0:87 imageLoad ( temp 4-component vector of int) +0:87 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:87 'coordTemp' ( temp int) +0:87 divide second child into first child ( temp 4-component vector of int) +0:87 'storeTemp' ( temp 4-component vector of int) +0:87 Constant: +0:87 2 (const int) +0:87 imageStore ( temp void) +0:87 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:87 'coordTemp' ( temp int) +0:87 'storeTemp' ( temp 4-component vector of int) +0:87 'storeTemp' ( temp 4-component vector of int) +0:88 Sequence +0:88 move second child to first child ( temp int) +0:88 'coordTemp' ( temp int) +0:88 c1: direct index for structure ( uniform int) +0:88 '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:88 Constant: +0:88 0 (const uint) +0:88 move second child to first child ( temp 4-component vector of int) +0:88 'storeTemp' ( temp 4-component vector of int) +0:88 imageLoad ( temp 4-component vector of int) +0:88 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:88 'coordTemp' ( temp int) +0:88 mod second child into first child ( temp 4-component vector of int) +0:88 'storeTemp' ( temp 4-component vector of int) +0:88 Constant: +0:88 2 (const int) +0:88 imageStore ( temp void) +0:88 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:88 'coordTemp' ( temp int) +0:88 'storeTemp' ( temp 4-component vector of int) +0:88 'storeTemp' ( temp 4-component vector of int) +0:89 Sequence +0:89 move second child to first child ( temp int) +0:89 'coordTemp' ( temp int) +0:89 c1: direct index for structure ( uniform int) +0:89 '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:89 Constant: +0:89 0 (const uint) +0:89 move second child to first child ( temp 4-component vector of int) +0:89 'storeTemp' ( temp 4-component vector of int) +0:89 imageLoad ( temp 4-component vector of int) +0:89 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:89 'coordTemp' ( temp int) +0:89 and second child into first child ( temp 4-component vector of int) +0:89 'storeTemp' ( temp 4-component vector of int) +0:89 Constant: +0:89 65535 (const int) +0:89 imageStore ( temp void) +0:89 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:89 'coordTemp' ( temp int) +0:89 'storeTemp' ( temp 4-component vector of int) +0:89 'storeTemp' ( temp 4-component vector of int) +0:90 Sequence +0:90 move second child to first child ( temp int) +0:90 'coordTemp' ( temp int) +0:90 c1: direct index for structure ( uniform int) +0:90 '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:90 Constant: +0:90 0 (const uint) +0:90 move second child to first child ( temp 4-component vector of int) +0:90 'storeTemp' ( temp 4-component vector of int) +0:90 imageLoad ( temp 4-component vector of int) +0:90 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:90 'coordTemp' ( temp int) +0:90 or second child into first child ( temp 4-component vector of int) +0:90 'storeTemp' ( temp 4-component vector of int) +0:90 Constant: +0:90 61680 (const int) +0:90 imageStore ( temp void) +0:90 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:90 'coordTemp' ( temp int) +0:90 'storeTemp' ( temp 4-component vector of int) +0:90 'storeTemp' ( temp 4-component vector of int) +0:91 Sequence +0:91 move second child to first child ( temp int) +0:91 'coordTemp' ( temp int) +0:91 c1: direct index for structure ( uniform int) +0:91 '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:91 Constant: +0:91 0 (const uint) +0:91 move second child to first child ( temp 4-component vector of int) +0:91 'storeTemp' ( temp 4-component vector of int) +0:91 imageLoad ( temp 4-component vector of int) +0:91 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:91 'coordTemp' ( temp int) +0:91 left shift second child into first child ( temp 4-component vector of int) +0:91 'storeTemp' ( temp 4-component vector of int) +0:91 Constant: +0:91 2 (const int) +0:91 imageStore ( temp void) +0:91 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:91 'coordTemp' ( temp int) +0:91 'storeTemp' ( temp 4-component vector of int) +0:91 'storeTemp' ( temp 4-component vector of int) +0:92 Sequence +0:92 move second child to first child ( temp int) +0:92 'coordTemp' ( temp int) +0:92 c1: direct index for structure ( uniform int) +0:92 '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:92 Constant: +0:92 0 (const uint) +0:92 move second child to first child ( temp 4-component vector of int) +0:92 'storeTemp' ( temp 4-component vector of int) +0:92 imageLoad ( temp 4-component vector of int) +0:92 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:92 'coordTemp' ( temp int) +0:92 right shift second child into first child ( temp 4-component vector of int) +0:92 'storeTemp' ( temp 4-component vector of int) +0:92 Constant: +0:92 2 (const int) +0:92 imageStore ( temp void) +0:92 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:92 'coordTemp' ( temp int) +0:92 'storeTemp' ( temp 4-component vector of int) +0:92 'storeTemp' ( temp 4-component vector of int) +0:95 Sequence +0:95 move second child to first child ( temp 4-component vector of float) +0:95 'storeTemp' ( temp 4-component vector of float) +0:95 Function Call: SomeValue( ( temp 4-component vector of float) +0:95 imageStore ( temp void) +0:95 'g_tTex2df4' (layout( rgba32f) uniform image2D) +0:95 c2: direct index for structure ( uniform 2-component vector of int) +0:95 '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:95 Constant: +0:95 1 (const uint) +0:95 'storeTemp' ( temp 4-component vector of float) +0:95 'storeTemp' ( temp 4-component vector of float) +0:96 Sequence +0:96 imageStore ( temp void) +0:96 'g_tTex2df4' (layout( rgba32f) uniform image2D) +0:96 c2: direct index for structure ( uniform 2-component vector of int) +0:96 '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:96 Constant: +0:96 1 (const uint) +0:96 'lf4' ( temp 4-component vector of float) +0:96 'lf4' ( temp 4-component vector of float) +0:97 Sequence +0:97 move second child to first child ( temp 4-component vector of int) +0:97 'storeTemp' ( temp 4-component vector of int) +0:? Constant: +0:? 5 (const int) +0:? 2 (const int) +0:? 3 (const int) +0:? 4 (const int) +0:97 imageStore ( temp void) +0:97 'g_tTex2di4' (layout( rgba32i) uniform iimage2D) +0:97 c2: direct index for structure ( uniform 2-component vector of int) +0:97 '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:97 Constant: +0:97 1 (const uint) +0:97 'storeTemp' ( temp 4-component vector of int) +0:97 'storeTemp' ( temp 4-component vector of int) +0:98 Sequence +0:98 move second child to first child ( temp 4-component vector of uint) +0:98 'storeTemp' ( temp 4-component vector of uint) +0:? Constant: +0:? 6 (const uint) +0:? 2 (const uint) +0:? 3 (const uint) +0:? 4 (const uint) +0:98 imageStore ( temp void) +0:98 'g_tTex2du4' (layout( rgba32ui) uniform uimage2D) +0:98 c2: direct index for structure ( uniform 2-component vector of int) +0:98 '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:98 Constant: +0:98 1 (const uint) +0:98 'storeTemp' ( temp 4-component vector of uint) +0:98 'storeTemp' ( temp 4-component vector of uint) +0:101 Sequence +0:101 move second child to first child ( temp 4-component vector of float) +0:101 'storeTemp' ( temp 4-component vector of float) +0:101 Function Call: SomeValue( ( temp 4-component vector of float) +0:101 imageStore ( temp void) +0:101 'g_tTex3df4' (layout( rgba32f) uniform image3D) +0:101 c3: direct index for structure ( uniform 3-component vector of int) +0:101 '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:101 Constant: +0:101 2 (const uint) +0:101 'storeTemp' ( temp 4-component vector of float) +0:101 'storeTemp' ( temp 4-component vector of float) +0:102 Sequence +0:102 imageStore ( temp void) +0:102 'g_tTex3df4' (layout( rgba32f) uniform image3D) +0:102 c3: direct index for structure ( uniform 3-component vector of int) +0:102 '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:102 Constant: +0:102 2 (const uint) +0:102 'lf4' ( temp 4-component vector of float) +0:102 'lf4' ( temp 4-component vector of float) +0:103 Sequence +0:103 move second child to first child ( temp 4-component vector of int) +0:103 'storeTemp' ( temp 4-component vector of int) +0:? Constant: +0:? 8 (const int) +0:? 6 (const int) +0:? 7 (const int) +0:? 8 (const int) +0:103 imageStore ( temp void) +0:103 'g_tTex3di4' (layout( rgba32i) uniform iimage3D) +0:103 c3: direct index for structure ( uniform 3-component vector of int) +0:103 '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:103 Constant: +0:103 2 (const uint) +0:103 'storeTemp' ( temp 4-component vector of int) +0:103 'storeTemp' ( temp 4-component vector of int) +0:104 Sequence +0:104 move second child to first child ( temp 4-component vector of uint) +0:104 'storeTemp' ( temp 4-component vector of uint) +0:? Constant: +0:? 9 (const uint) +0:? 2 (const uint) +0:? 3 (const uint) +0:? 4 (const uint) +0:104 imageStore ( temp void) +0:104 'g_tTex3du4' (layout( rgba32ui) uniform uimage3D) +0:104 c3: direct index for structure ( uniform 3-component vector of int) +0:104 '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:104 Constant: +0:104 2 (const uint) +0:104 'storeTemp' ( temp 4-component vector of uint) +0:104 'storeTemp' ( temp 4-component vector of uint) +0:107 Function Call: Fn1(vf4; ( temp 4-component vector of float) +0:107 imageLoad ( temp 4-component vector of float) +0:107 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:107 c1: direct index for structure ( uniform int) +0:107 '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:107 Constant: +0:107 0 (const uint) +0:108 Function Call: Fn1(vi4; ( temp 4-component vector of int) +0:108 imageLoad ( temp 4-component vector of int) +0:108 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:108 c1: direct index for structure ( uniform int) +0:108 '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:108 Constant: +0:108 0 (const uint) +0:109 Function Call: Fn1(vu4; ( temp 4-component vector of uint) +0:109 imageLoad ( temp 4-component vector of uint) +0:109 'g_tTex1du4' (layout( rgba32ui) uniform uimage1D) +0:109 c1: direct index for structure ( uniform int) +0:109 '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:109 Constant: +0:109 0 (const uint) +0:111 Comma ( temp void) +0:111 Function Call: Fn2(vf4; ( temp void) +0:111 'tempArg' ( temp 4-component vector of float) +0:111 Sequence +0:111 imageStore ( temp void) +0:111 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:111 c1: direct index for structure ( uniform int) +0:111 '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:111 Constant: +0:111 0 (const uint) +0:111 'tempArg' ( temp 4-component vector of float) +0:111 'tempArg' ( temp 4-component vector of float) +0:112 Comma ( temp void) +0:112 Function Call: Fn2(vi4; ( temp void) +0:112 'tempArg' ( temp 4-component vector of int) +0:112 Sequence +0:112 imageStore ( temp void) +0:112 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:112 c1: direct index for structure ( uniform int) +0:112 '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:112 Constant: +0:112 0 (const uint) +0:112 'tempArg' ( temp 4-component vector of int) +0:112 'tempArg' ( temp 4-component vector of int) +0:113 Comma ( temp void) +0:113 Function Call: Fn2(vu4; ( temp void) +0:113 'tempArg' ( temp 4-component vector of uint) +0:113 Sequence +0:113 imageStore ( temp void) +0:113 'g_tTex1du4' (layout( rgba32ui) uniform uimage1D) +0:113 c1: direct index for structure ( uniform int) +0:113 '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:113 Constant: +0:113 0 (const uint) +0:113 'tempArg' ( temp 4-component vector of uint) +0:113 'tempArg' ( temp 4-component vector of uint) +0:117 Sequence +0:117 move second child to first child ( temp int) +0:117 'coordTemp' ( temp int) +0:117 c1: direct index for structure ( uniform int) +0:117 '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:117 Constant: +0:117 0 (const uint) +0:117 move second child to first child ( temp 4-component vector of float) +0:117 'storeTemp' ( temp 4-component vector of float) +0:117 imageLoad ( temp 4-component vector of float) +0:117 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:117 'coordTemp' ( temp int) +0:117 Pre-Increment ( temp 4-component vector of float) +0:117 'storeTemp' ( temp 4-component vector of float) +0:117 imageStore ( temp void) +0:117 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:117 'coordTemp' ( temp int) +0:117 'storeTemp' ( temp 4-component vector of float) +0:117 'storeTemp' ( temp 4-component vector of float) +0:118 Sequence +0:118 move second child to first child ( temp int) +0:118 'coordTemp' ( temp int) +0:118 c1: direct index for structure ( uniform int) +0:118 '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:118 Constant: +0:118 0 (const uint) +0:118 move second child to first child ( temp 4-component vector of int) +0:118 'storeTemp' ( temp 4-component vector of int) +0:118 imageLoad ( temp 4-component vector of int) +0:118 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:118 'coordTemp' ( temp int) +0:118 Pre-Increment ( temp 4-component vector of int) +0:118 'storeTemp' ( temp 4-component vector of int) +0:118 imageStore ( temp void) +0:118 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:118 'coordTemp' ( temp int) +0:118 'storeTemp' ( temp 4-component vector of int) +0:118 'storeTemp' ( temp 4-component vector of int) +0:119 Sequence +0:119 move second child to first child ( temp int) +0:119 'coordTemp' ( temp int) +0:119 c1: direct index for structure ( uniform int) +0:119 '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:119 Constant: +0:119 0 (const uint) +0:119 move second child to first child ( temp 4-component vector of uint) +0:119 'storeTemp' ( temp 4-component vector of uint) +0:119 imageLoad ( temp 4-component vector of uint) +0:119 'g_tTex1du4' (layout( rgba32ui) uniform uimage1D) +0:119 'coordTemp' ( temp int) +0:119 Pre-Increment ( temp 4-component vector of uint) +0:119 'storeTemp' ( temp 4-component vector of uint) +0:119 imageStore ( temp void) +0:119 'g_tTex1du4' (layout( rgba32ui) uniform uimage1D) +0:119 'coordTemp' ( temp int) +0:119 'storeTemp' ( temp 4-component vector of uint) +0:119 'storeTemp' ( temp 4-component vector of uint) +0:121 Sequence +0:121 move second child to first child ( temp int) +0:121 'coordTemp' ( temp int) +0:121 c1: direct index for structure ( uniform int) +0:121 '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:121 Constant: +0:121 0 (const uint) +0:121 move second child to first child ( temp 4-component vector of float) +0:121 'storeTemp' ( temp 4-component vector of float) +0:121 imageLoad ( temp 4-component vector of float) +0:121 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:121 'coordTemp' ( temp int) +0:121 Pre-Decrement ( temp 4-component vector of float) +0:121 'storeTemp' ( temp 4-component vector of float) +0:121 imageStore ( temp void) +0:121 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:121 'coordTemp' ( temp int) +0:121 'storeTemp' ( temp 4-component vector of float) +0:121 'storeTemp' ( temp 4-component vector of float) +0:122 Sequence +0:122 move second child to first child ( temp int) +0:122 'coordTemp' ( temp int) +0:122 c1: direct index for structure ( uniform int) +0:122 '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:122 Constant: +0:122 0 (const uint) +0:122 move second child to first child ( temp 4-component vector of int) +0:122 'storeTemp' ( temp 4-component vector of int) +0:122 imageLoad ( temp 4-component vector of int) +0:122 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:122 'coordTemp' ( temp int) +0:122 Pre-Decrement ( temp 4-component vector of int) +0:122 'storeTemp' ( temp 4-component vector of int) +0:122 imageStore ( temp void) +0:122 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:122 'coordTemp' ( temp int) +0:122 'storeTemp' ( temp 4-component vector of int) +0:122 'storeTemp' ( temp 4-component vector of int) +0:123 Sequence +0:123 move second child to first child ( temp int) +0:123 'coordTemp' ( temp int) +0:123 c1: direct index for structure ( uniform int) +0:123 '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:123 Constant: +0:123 0 (const uint) +0:123 move second child to first child ( temp 4-component vector of uint) +0:123 'storeTemp' ( temp 4-component vector of uint) +0:123 imageLoad ( temp 4-component vector of uint) +0:123 'g_tTex1du4' (layout( rgba32ui) uniform uimage1D) +0:123 'coordTemp' ( temp int) +0:123 Pre-Decrement ( temp 4-component vector of uint) +0:123 'storeTemp' ( temp 4-component vector of uint) +0:123 imageStore ( temp void) +0:123 'g_tTex1du4' (layout( rgba32ui) uniform uimage1D) +0:123 'coordTemp' ( temp int) +0:123 'storeTemp' ( temp 4-component vector of uint) +0:123 'storeTemp' ( temp 4-component vector of uint) +0:126 Sequence +0:126 move second child to first child ( temp int) +0:126 'coordTemp' ( temp int) +0:126 c1: direct index for structure ( uniform int) +0:126 '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:126 Constant: +0:126 0 (const uint) +0:126 move second child to first child ( temp 4-component vector of float) +0:126 'storeTempPre' ( temp 4-component vector of float) +0:126 imageLoad ( temp 4-component vector of float) +0:126 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:126 'coordTemp' ( temp int) +0:126 move second child to first child ( temp 4-component vector of float) +0:126 'storeTempPost' ( temp 4-component vector of float) +0:126 'storeTempPre' ( temp 4-component vector of float) +0:126 Post-Increment ( temp 4-component vector of float) +0:126 'storeTempPost' ( temp 4-component vector of float) +0:126 imageStore ( temp void) +0:126 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:126 'coordTemp' ( temp int) +0:126 'storeTempPost' ( temp 4-component vector of float) +0:126 'storeTempPre' ( temp 4-component vector of float) +0:127 Sequence +0:127 move second child to first child ( temp int) +0:127 'coordTemp' ( temp int) +0:127 c1: direct index for structure ( uniform int) +0:127 '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:127 Constant: +0:127 0 (const uint) +0:127 move second child to first child ( temp 4-component vector of uint) +0:127 'storeTempPre' ( temp 4-component vector of uint) +0:127 imageLoad ( temp 4-component vector of uint) +0:127 'g_tTex1du4' (layout( rgba32ui) uniform uimage1D) +0:127 'coordTemp' ( temp int) +0:127 move second child to first child ( temp 4-component vector of uint) +0:127 'storeTempPost' ( temp 4-component vector of uint) +0:127 'storeTempPre' ( temp 4-component vector of uint) +0:127 Post-Decrement ( temp 4-component vector of uint) +0:127 'storeTempPost' ( temp 4-component vector of uint) +0:127 imageStore ( temp void) +0:127 'g_tTex1du4' (layout( rgba32ui) uniform uimage1D) +0:127 'coordTemp' ( temp int) +0:127 'storeTempPost' ( temp 4-component vector of uint) +0:127 'storeTempPre' ( temp 4-component vector of uint) +0:128 Sequence +0:128 move second child to first child ( temp int) +0:128 'coordTemp' ( temp int) +0:128 c1: direct index for structure ( uniform int) +0:128 '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:128 Constant: +0:128 0 (const uint) +0:128 move second child to first child ( temp 4-component vector of int) +0:128 'storeTempPre' ( temp 4-component vector of int) +0:128 imageLoad ( temp 4-component vector of int) +0:128 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:128 'coordTemp' ( temp int) +0:128 move second child to first child ( temp 4-component vector of int) +0:128 'storeTempPost' ( temp 4-component vector of int) +0:128 'storeTempPre' ( temp 4-component vector of int) +0:128 Post-Increment ( temp 4-component vector of int) +0:128 'storeTempPost' ( temp 4-component vector of int) +0:128 imageStore ( temp void) +0:128 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:128 'coordTemp' ( temp int) +0:128 'storeTempPost' ( temp 4-component vector of int) +0:128 'storeTempPre' ( temp 4-component vector of int) +0:130 Sequence +0:130 move second child to first child ( temp int) +0:130 'coordTemp' ( temp int) +0:130 c1: direct index for structure ( uniform int) +0:130 '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:130 Constant: +0:130 0 (const uint) +0:130 move second child to first child ( temp 4-component vector of float) +0:130 'storeTempPre' ( temp 4-component vector of float) +0:130 imageLoad ( temp 4-component vector of float) +0:130 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:130 'coordTemp' ( temp int) +0:130 move second child to first child ( temp 4-component vector of float) +0:130 'storeTempPost' ( temp 4-component vector of float) +0:130 'storeTempPre' ( temp 4-component vector of float) +0:130 Post-Decrement ( temp 4-component vector of float) +0:130 'storeTempPost' ( temp 4-component vector of float) +0:130 imageStore ( temp void) +0:130 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:130 'coordTemp' ( temp int) +0:130 'storeTempPost' ( temp 4-component vector of float) +0:130 'storeTempPre' ( temp 4-component vector of float) +0:131 Sequence +0:131 move second child to first child ( temp int) +0:131 'coordTemp' ( temp int) +0:131 c1: direct index for structure ( uniform int) +0:131 '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:131 Constant: +0:131 0 (const uint) +0:131 move second child to first child ( temp 4-component vector of int) +0:131 'storeTempPre' ( temp 4-component vector of int) +0:131 imageLoad ( temp 4-component vector of int) +0:131 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:131 'coordTemp' ( temp int) +0:131 move second child to first child ( temp 4-component vector of int) +0:131 'storeTempPost' ( temp 4-component vector of int) +0:131 'storeTempPre' ( temp 4-component vector of int) +0:131 Post-Increment ( temp 4-component vector of int) +0:131 'storeTempPost' ( temp 4-component vector of int) +0:131 imageStore ( temp void) +0:131 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:131 'coordTemp' ( temp int) +0:131 'storeTempPost' ( temp 4-component vector of int) +0:131 'storeTempPre' ( temp 4-component vector of int) +0:132 Sequence +0:132 move second child to first child ( temp int) +0:132 'coordTemp' ( temp int) +0:132 c1: direct index for structure ( uniform int) +0:132 '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:132 Constant: +0:132 0 (const uint) +0:132 move second child to first child ( temp 4-component vector of uint) +0:132 'storeTempPre' ( temp 4-component vector of uint) +0:132 imageLoad ( temp 4-component vector of uint) +0:132 'g_tTex1du4' (layout( rgba32ui) uniform uimage1D) +0:132 'coordTemp' ( temp int) +0:132 move second child to first child ( temp 4-component vector of uint) +0:132 'storeTempPost' ( temp 4-component vector of uint) +0:132 'storeTempPre' ( temp 4-component vector of uint) +0:132 Post-Decrement ( temp 4-component vector of uint) +0:132 'storeTempPost' ( temp 4-component vector of uint) +0:132 imageStore ( temp void) +0:132 'g_tTex1du4' (layout( rgba32ui) uniform uimage1D) +0:132 'coordTemp' ( temp int) +0:132 'storeTempPost' ( temp 4-component vector of uint) +0:132 'storeTempPre' ( temp 4-component vector of uint) +0:135 Sequence +0:135 move second child to first child ( temp 4-component vector of float) +0:135 'storeTemp' ( temp 4-component vector of float) +0:? imageLoad ( temp 4-component vector of float) +0:135 'g_tTex2df4' (layout( rgba32f) uniform image2D) +0:? Constant: +0:? 2 (const int) +0:? 3 (const int) +0:135 imageStore ( temp void) +0:135 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:135 Constant: +0:135 1 (const int) +0:135 'storeTemp' ( temp 4-component vector of float) +0:135 'storeTemp' ( temp 4-component vector of float) +0:137 move second child to first child ( temp 4-component vector of float) +0:137 Color: direct index for structure ( temp 4-component vector of float) +0:137 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:137 Constant: +0:137 0 (const int) +0:137 Constant: +0:137 1.000000 +0:137 1.000000 +0:137 1.000000 +0:137 1.000000 +0:139 Branch: Return with expression +0:139 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:53 Function Definition: main( ( temp void) +0:53 Function Parameters: +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: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: +0:53 0 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:? 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:? 'g_tTex1du4' (layout( rgba32ui) uniform uimage1D) +0:? 'g_tTex2df4' (layout( rgba32f) uniform image2D) +0:? 'g_tTex2di4' (layout( rgba32i) uniform iimage2D) +0:? 'g_tTex2du4' (layout( rgba32ui) uniform uimage2D) +0:? 'g_tTex3df4' (layout( rgba32f) uniform image3D) +0:? 'g_tTex3di4' (layout( rgba32i) uniform iimage3D) +0:? 'g_tTex3du4' (layout( rgba32ui) uniform uimage3D) +0:? 'g_tTex1df4a' (layout( rgba32f) uniform image1DArray) +0:? 'g_tTex1di4a' (layout( rgba32i) uniform iimage1DArray) +0:? 'g_tTex1du4a' (layout( rgba32ui) uniform uimage1DArray) +0:? 'g_tTex2df4a' (layout( rgba32f) uniform image2DArray) +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) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:42 Function Definition: Fn1(vi4; ( temp 4-component vector of int) +0:42 Function Parameters: +0:42 'x' ( in 4-component vector of int) +0:? Sequence +0:42 Branch: Return with expression +0:42 'x' ( in 4-component vector of int) +0:43 Function Definition: Fn1(vu4; ( temp 4-component vector of uint) +0:43 Function Parameters: +0:43 'x' ( in 4-component vector of uint) +0:? Sequence +0:43 Branch: Return with expression +0:43 'x' ( in 4-component vector of uint) +0:44 Function Definition: Fn1(vf4; ( temp 4-component vector of float) +0:44 Function Parameters: +0:44 'x' ( in 4-component vector of float) +0:? Sequence +0:44 Branch: Return with expression +0:44 'x' ( in 4-component vector of float) +0:46 Function Definition: Fn2(vi4; ( temp void) +0:46 Function Parameters: +0:46 'x' ( out 4-component vector of int) +0:? Sequence +0:46 move second child to first child ( temp 4-component vector of int) +0:46 'x' ( out 4-component vector of int) +0:46 Constant: +0:46 0 (const int) +0:46 0 (const int) +0:46 0 (const int) +0:46 0 (const int) +0:47 Function Definition: Fn2(vu4; ( temp void) +0:47 Function Parameters: +0:47 'x' ( out 4-component vector of uint) +0:? Sequence +0:47 move second child to first child ( temp 4-component vector of uint) +0:47 'x' ( out 4-component vector of uint) +0:47 Constant: +0:47 0 (const uint) +0:47 0 (const uint) +0:47 0 (const uint) +0:47 0 (const uint) +0:48 Function Definition: Fn2(vf4; ( temp void) +0:48 Function Parameters: +0:48 'x' ( out 4-component vector of float) +0:? Sequence +0:48 move second child to first child ( temp 4-component vector of float) +0:48 'x' ( out 4-component vector of float) +0:48 Constant: +0:48 0.000000 +0:48 0.000000 +0:48 0.000000 +0:48 0.000000 +0:50 Function Definition: SomeValue( ( temp 4-component vector of float) +0:50 Function Parameters: +0:? Sequence +0:50 Branch: Return with expression +0:50 Convert int to float ( temp 4-component vector of float) +0:50 c4: direct index for structure ( uniform 4-component vector of int) +0:50 '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:50 Constant: +0:50 3 (const uint) +0:53 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color}) +0:53 Function Parameters: +0:? Sequence +0:57 imageLoad ( temp 4-component vector of float) +0:57 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:57 c1: direct index for structure ( uniform int) +0:57 '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:57 Constant: +0:57 0 (const uint) +0:59 Sequence +0:59 move second child to first child ( temp 4-component vector of float) +0:59 'r00' ( temp 4-component vector of float) +0:59 imageLoad ( temp 4-component vector of float) +0:59 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:59 c1: direct index for structure ( uniform int) +0:59 '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:59 Constant: +0:59 0 (const uint) +0:60 Sequence +0:60 move second child to first child ( temp 4-component vector of int) +0:60 'r01' ( temp 4-component vector of int) +0:60 imageLoad ( temp 4-component vector of int) +0:60 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:60 c1: direct index for structure ( uniform int) +0:60 '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:60 Constant: +0:60 0 (const uint) +0:61 Sequence +0:61 move second child to first child ( temp 4-component vector of uint) +0:61 'r02' ( temp 4-component vector of uint) +0:61 imageLoad ( temp 4-component vector of uint) +0:61 'g_tTex1du4' (layout( rgba32ui) uniform uimage1D) +0:61 c1: direct index for structure ( uniform int) +0:61 '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:61 Constant: +0:61 0 (const uint) +0:64 Sequence +0:64 move second child to first child ( temp 4-component vector of float) +0:64 'r10' ( temp 4-component vector of float) +0:64 imageLoad ( temp 4-component vector of float) +0:64 'g_tTex2df4' (layout( rgba32f) uniform image2D) +0:64 c2: direct index for structure ( uniform 2-component vector of int) +0:64 '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:64 Constant: +0:64 1 (const uint) +0:65 Sequence +0:65 move second child to first child ( temp 4-component vector of int) +0:65 'r11' ( temp 4-component vector of int) +0:65 imageLoad ( temp 4-component vector of int) +0:65 'g_tTex2di4' (layout( rgba32i) uniform iimage2D) +0:65 c2: direct index for structure ( uniform 2-component vector of int) +0:65 '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:65 Constant: +0:65 1 (const uint) +0:66 Sequence +0:66 move second child to first child ( temp 4-component vector of uint) +0:66 'r12' ( temp 4-component vector of uint) +0:66 imageLoad ( temp 4-component vector of uint) +0:66 'g_tTex2du4' (layout( rgba32ui) uniform uimage2D) +0:66 c2: direct index for structure ( uniform 2-component vector of int) +0:66 '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:66 Constant: +0:66 1 (const uint) +0:69 Sequence +0:69 move second child to first child ( temp 4-component vector of float) +0:69 'r20' ( temp 4-component vector of float) +0:69 imageLoad ( temp 4-component vector of float) +0:69 'g_tTex3df4' (layout( rgba32f) uniform image3D) +0:69 c3: direct index for structure ( uniform 3-component vector of int) +0:69 '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:69 Constant: +0:69 2 (const uint) +0:70 Sequence +0:70 move second child to first child ( temp 4-component vector of int) +0:70 'r21' ( temp 4-component vector of int) +0:70 imageLoad ( temp 4-component vector of int) +0:70 'g_tTex3di4' (layout( rgba32i) uniform iimage3D) +0:70 c3: direct index for structure ( uniform 3-component vector of int) +0:70 '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:70 Constant: +0:70 2 (const uint) +0:71 Sequence +0:71 move second child to first child ( temp 4-component vector of uint) +0:71 'r22' ( temp 4-component vector of uint) +0:71 imageLoad ( temp 4-component vector of uint) +0:71 'g_tTex3du4' (layout( rgba32ui) uniform uimage3D) +0:71 c3: direct index for structure ( uniform 3-component vector of int) +0:71 '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:71 Constant: +0:71 2 (const uint) +0:73 Sequence +0:73 move second child to first child ( temp 4-component vector of float) +0:73 'lf4' ( temp 4-component vector of float) +0:73 uf4: direct index for structure ( uniform 4-component vector of float) +0:73 '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:73 Constant: +0:73 8 (const uint) +0:77 Sequence +0:77 move second child to first child ( temp 4-component vector of float) +0:77 'storeTemp' ( temp 4-component vector of float) +0:77 Function Call: SomeValue( ( temp 4-component vector of float) +0:77 imageStore ( temp void) +0:77 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:77 c1: direct index for structure ( uniform int) +0:77 '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:77 Constant: +0:77 0 (const uint) +0:77 'storeTemp' ( temp 4-component vector of float) +0:77 'storeTemp' ( temp 4-component vector of float) +0:78 Sequence +0:78 imageStore ( temp void) +0:78 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:78 c1: direct index for structure ( uniform int) +0:78 '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:78 Constant: +0:78 0 (const uint) +0:78 'lf4' ( temp 4-component vector of float) +0:78 'lf4' ( temp 4-component vector of float) +0:79 Sequence +0:79 move second child to first child ( temp 4-component vector of int) +0:79 'storeTemp' ( temp 4-component vector of int) +0:? Constant: +0:? 2 (const int) +0:? 2 (const int) +0:? 3 (const int) +0:? 4 (const int) +0:79 imageStore ( temp void) +0:79 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:79 c1: direct index for structure ( uniform int) +0:79 '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:79 Constant: +0:79 0 (const uint) +0:79 'storeTemp' ( temp 4-component vector of int) +0:79 'storeTemp' ( temp 4-component vector of int) +0:80 Sequence +0:80 move second child to first child ( temp 4-component vector of uint) +0:80 'storeTemp' ( temp 4-component vector of uint) +0:? Constant: +0:? 3 (const uint) +0:? 2 (const uint) +0:? 3 (const uint) +0:? 4 (const uint) +0:80 imageStore ( temp void) +0:80 'g_tTex1du4' (layout( rgba32ui) uniform uimage1D) +0:80 c1: direct index for structure ( uniform int) +0:80 '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:80 Constant: +0:80 0 (const uint) +0:80 'storeTemp' ( temp 4-component vector of uint) +0:80 'storeTemp' ( temp 4-component vector of uint) +0:83 Sequence +0:83 move second child to first child ( temp 4-component vector of float) +0:83 'val1' ( temp 4-component vector of float) +0:83 Sequence +0:83 move second child to first child ( temp int) +0:83 'coordTemp' ( temp int) +0:83 c1: direct index for structure ( uniform int) +0:83 '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:83 Constant: +0:83 0 (const uint) +0:83 move second child to first child ( temp 4-component vector of float) +0:83 'storeTemp' ( temp 4-component vector of float) +0:83 imageLoad ( temp 4-component vector of float) +0:83 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:83 'coordTemp' ( temp int) +0:83 vector scale second child into first child ( temp 4-component vector of float) +0:83 'storeTemp' ( temp 4-component vector of float) +0:83 Constant: +0:83 2.000000 +0:83 imageStore ( temp void) +0:83 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:83 'coordTemp' ( temp int) +0:83 'storeTemp' ( temp 4-component vector of float) +0:83 'storeTemp' ( temp 4-component vector of float) +0:84 Sequence +0:84 move second child to first child ( temp int) +0:84 'coordTemp' ( temp int) +0:84 c1: direct index for structure ( uniform int) +0:84 '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:84 Constant: +0:84 0 (const uint) +0:84 move second child to first child ( temp 4-component vector of float) +0:84 'storeTemp' ( temp 4-component vector of float) +0:84 imageLoad ( temp 4-component vector of float) +0:84 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:84 'coordTemp' ( temp int) +0:84 subtract second child into first child ( temp 4-component vector of float) +0:84 'storeTemp' ( temp 4-component vector of float) +0:84 Constant: +0:84 3.000000 +0:84 imageStore ( temp void) +0:84 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:84 'coordTemp' ( temp int) +0:84 'storeTemp' ( temp 4-component vector of float) +0:84 'storeTemp' ( temp 4-component vector of float) +0:85 Sequence +0:85 move second child to first child ( temp int) +0:85 'coordTemp' ( temp int) +0:85 c1: direct index for structure ( uniform int) +0:85 '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:85 Constant: +0:85 0 (const uint) +0:85 move second child to first child ( temp 4-component vector of float) +0:85 'storeTemp' ( temp 4-component vector of float) +0:85 imageLoad ( temp 4-component vector of float) +0:85 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:85 'coordTemp' ( temp int) +0:85 add second child into first child ( temp 4-component vector of float) +0:85 'storeTemp' ( temp 4-component vector of float) +0:85 Constant: +0:85 4.000000 +0:85 imageStore ( temp void) +0:85 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:85 'coordTemp' ( temp int) +0:85 'storeTemp' ( temp 4-component vector of float) +0:85 'storeTemp' ( temp 4-component vector of float) +0:87 Sequence +0:87 move second child to first child ( temp int) +0:87 'coordTemp' ( temp int) +0:87 c1: direct index for structure ( uniform int) +0:87 '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:87 Constant: +0:87 0 (const uint) +0:87 move second child to first child ( temp 4-component vector of int) +0:87 'storeTemp' ( temp 4-component vector of int) +0:87 imageLoad ( temp 4-component vector of int) +0:87 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:87 'coordTemp' ( temp int) +0:87 divide second child into first child ( temp 4-component vector of int) +0:87 'storeTemp' ( temp 4-component vector of int) +0:87 Constant: +0:87 2 (const int) +0:87 imageStore ( temp void) +0:87 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:87 'coordTemp' ( temp int) +0:87 'storeTemp' ( temp 4-component vector of int) +0:87 'storeTemp' ( temp 4-component vector of int) +0:88 Sequence +0:88 move second child to first child ( temp int) +0:88 'coordTemp' ( temp int) +0:88 c1: direct index for structure ( uniform int) +0:88 '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:88 Constant: +0:88 0 (const uint) +0:88 move second child to first child ( temp 4-component vector of int) +0:88 'storeTemp' ( temp 4-component vector of int) +0:88 imageLoad ( temp 4-component vector of int) +0:88 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:88 'coordTemp' ( temp int) +0:88 mod second child into first child ( temp 4-component vector of int) +0:88 'storeTemp' ( temp 4-component vector of int) +0:88 Constant: +0:88 2 (const int) +0:88 imageStore ( temp void) +0:88 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:88 'coordTemp' ( temp int) +0:88 'storeTemp' ( temp 4-component vector of int) +0:88 'storeTemp' ( temp 4-component vector of int) +0:89 Sequence +0:89 move second child to first child ( temp int) +0:89 'coordTemp' ( temp int) +0:89 c1: direct index for structure ( uniform int) +0:89 '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:89 Constant: +0:89 0 (const uint) +0:89 move second child to first child ( temp 4-component vector of int) +0:89 'storeTemp' ( temp 4-component vector of int) +0:89 imageLoad ( temp 4-component vector of int) +0:89 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:89 'coordTemp' ( temp int) +0:89 and second child into first child ( temp 4-component vector of int) +0:89 'storeTemp' ( temp 4-component vector of int) +0:89 Constant: +0:89 65535 (const int) +0:89 imageStore ( temp void) +0:89 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:89 'coordTemp' ( temp int) +0:89 'storeTemp' ( temp 4-component vector of int) +0:89 'storeTemp' ( temp 4-component vector of int) +0:90 Sequence +0:90 move second child to first child ( temp int) +0:90 'coordTemp' ( temp int) +0:90 c1: direct index for structure ( uniform int) +0:90 '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:90 Constant: +0:90 0 (const uint) +0:90 move second child to first child ( temp 4-component vector of int) +0:90 'storeTemp' ( temp 4-component vector of int) +0:90 imageLoad ( temp 4-component vector of int) +0:90 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:90 'coordTemp' ( temp int) +0:90 or second child into first child ( temp 4-component vector of int) +0:90 'storeTemp' ( temp 4-component vector of int) +0:90 Constant: +0:90 61680 (const int) +0:90 imageStore ( temp void) +0:90 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:90 'coordTemp' ( temp int) +0:90 'storeTemp' ( temp 4-component vector of int) +0:90 'storeTemp' ( temp 4-component vector of int) +0:91 Sequence +0:91 move second child to first child ( temp int) +0:91 'coordTemp' ( temp int) +0:91 c1: direct index for structure ( uniform int) +0:91 '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:91 Constant: +0:91 0 (const uint) +0:91 move second child to first child ( temp 4-component vector of int) +0:91 'storeTemp' ( temp 4-component vector of int) +0:91 imageLoad ( temp 4-component vector of int) +0:91 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:91 'coordTemp' ( temp int) +0:91 left shift second child into first child ( temp 4-component vector of int) +0:91 'storeTemp' ( temp 4-component vector of int) +0:91 Constant: +0:91 2 (const int) +0:91 imageStore ( temp void) +0:91 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:91 'coordTemp' ( temp int) +0:91 'storeTemp' ( temp 4-component vector of int) +0:91 'storeTemp' ( temp 4-component vector of int) +0:92 Sequence +0:92 move second child to first child ( temp int) +0:92 'coordTemp' ( temp int) +0:92 c1: direct index for structure ( uniform int) +0:92 '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:92 Constant: +0:92 0 (const uint) +0:92 move second child to first child ( temp 4-component vector of int) +0:92 'storeTemp' ( temp 4-component vector of int) +0:92 imageLoad ( temp 4-component vector of int) +0:92 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:92 'coordTemp' ( temp int) +0:92 right shift second child into first child ( temp 4-component vector of int) +0:92 'storeTemp' ( temp 4-component vector of int) +0:92 Constant: +0:92 2 (const int) +0:92 imageStore ( temp void) +0:92 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:92 'coordTemp' ( temp int) +0:92 'storeTemp' ( temp 4-component vector of int) +0:92 'storeTemp' ( temp 4-component vector of int) +0:95 Sequence +0:95 move second child to first child ( temp 4-component vector of float) +0:95 'storeTemp' ( temp 4-component vector of float) +0:95 Function Call: SomeValue( ( temp 4-component vector of float) +0:95 imageStore ( temp void) +0:95 'g_tTex2df4' (layout( rgba32f) uniform image2D) +0:95 c2: direct index for structure ( uniform 2-component vector of int) +0:95 '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:95 Constant: +0:95 1 (const uint) +0:95 'storeTemp' ( temp 4-component vector of float) +0:95 'storeTemp' ( temp 4-component vector of float) +0:96 Sequence +0:96 imageStore ( temp void) +0:96 'g_tTex2df4' (layout( rgba32f) uniform image2D) +0:96 c2: direct index for structure ( uniform 2-component vector of int) +0:96 '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:96 Constant: +0:96 1 (const uint) +0:96 'lf4' ( temp 4-component vector of float) +0:96 'lf4' ( temp 4-component vector of float) +0:97 Sequence +0:97 move second child to first child ( temp 4-component vector of int) +0:97 'storeTemp' ( temp 4-component vector of int) +0:? Constant: +0:? 5 (const int) +0:? 2 (const int) +0:? 3 (const int) +0:? 4 (const int) +0:97 imageStore ( temp void) +0:97 'g_tTex2di4' (layout( rgba32i) uniform iimage2D) +0:97 c2: direct index for structure ( uniform 2-component vector of int) +0:97 '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:97 Constant: +0:97 1 (const uint) +0:97 'storeTemp' ( temp 4-component vector of int) +0:97 'storeTemp' ( temp 4-component vector of int) +0:98 Sequence +0:98 move second child to first child ( temp 4-component vector of uint) +0:98 'storeTemp' ( temp 4-component vector of uint) +0:? Constant: +0:? 6 (const uint) +0:? 2 (const uint) +0:? 3 (const uint) +0:? 4 (const uint) +0:98 imageStore ( temp void) +0:98 'g_tTex2du4' (layout( rgba32ui) uniform uimage2D) +0:98 c2: direct index for structure ( uniform 2-component vector of int) +0:98 '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:98 Constant: +0:98 1 (const uint) +0:98 'storeTemp' ( temp 4-component vector of uint) +0:98 'storeTemp' ( temp 4-component vector of uint) +0:101 Sequence +0:101 move second child to first child ( temp 4-component vector of float) +0:101 'storeTemp' ( temp 4-component vector of float) +0:101 Function Call: SomeValue( ( temp 4-component vector of float) +0:101 imageStore ( temp void) +0:101 'g_tTex3df4' (layout( rgba32f) uniform image3D) +0:101 c3: direct index for structure ( uniform 3-component vector of int) +0:101 '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:101 Constant: +0:101 2 (const uint) +0:101 'storeTemp' ( temp 4-component vector of float) +0:101 'storeTemp' ( temp 4-component vector of float) +0:102 Sequence +0:102 imageStore ( temp void) +0:102 'g_tTex3df4' (layout( rgba32f) uniform image3D) +0:102 c3: direct index for structure ( uniform 3-component vector of int) +0:102 '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:102 Constant: +0:102 2 (const uint) +0:102 'lf4' ( temp 4-component vector of float) +0:102 'lf4' ( temp 4-component vector of float) +0:103 Sequence +0:103 move second child to first child ( temp 4-component vector of int) +0:103 'storeTemp' ( temp 4-component vector of int) +0:? Constant: +0:? 8 (const int) +0:? 6 (const int) +0:? 7 (const int) +0:? 8 (const int) +0:103 imageStore ( temp void) +0:103 'g_tTex3di4' (layout( rgba32i) uniform iimage3D) +0:103 c3: direct index for structure ( uniform 3-component vector of int) +0:103 '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:103 Constant: +0:103 2 (const uint) +0:103 'storeTemp' ( temp 4-component vector of int) +0:103 'storeTemp' ( temp 4-component vector of int) +0:104 Sequence +0:104 move second child to first child ( temp 4-component vector of uint) +0:104 'storeTemp' ( temp 4-component vector of uint) +0:? Constant: +0:? 9 (const uint) +0:? 2 (const uint) +0:? 3 (const uint) +0:? 4 (const uint) +0:104 imageStore ( temp void) +0:104 'g_tTex3du4' (layout( rgba32ui) uniform uimage3D) +0:104 c3: direct index for structure ( uniform 3-component vector of int) +0:104 '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:104 Constant: +0:104 2 (const uint) +0:104 'storeTemp' ( temp 4-component vector of uint) +0:104 'storeTemp' ( temp 4-component vector of uint) +0:107 Function Call: Fn1(vf4; ( temp 4-component vector of float) +0:107 imageLoad ( temp 4-component vector of float) +0:107 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:107 c1: direct index for structure ( uniform int) +0:107 '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:107 Constant: +0:107 0 (const uint) +0:108 Function Call: Fn1(vi4; ( temp 4-component vector of int) +0:108 imageLoad ( temp 4-component vector of int) +0:108 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:108 c1: direct index for structure ( uniform int) +0:108 '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:108 Constant: +0:108 0 (const uint) +0:109 Function Call: Fn1(vu4; ( temp 4-component vector of uint) +0:109 imageLoad ( temp 4-component vector of uint) +0:109 'g_tTex1du4' (layout( rgba32ui) uniform uimage1D) +0:109 c1: direct index for structure ( uniform int) +0:109 '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:109 Constant: +0:109 0 (const uint) +0:111 Comma ( temp void) +0:111 Function Call: Fn2(vf4; ( temp void) +0:111 'tempArg' ( temp 4-component vector of float) +0:111 Sequence +0:111 imageStore ( temp void) +0:111 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:111 c1: direct index for structure ( uniform int) +0:111 '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:111 Constant: +0:111 0 (const uint) +0:111 'tempArg' ( temp 4-component vector of float) +0:111 'tempArg' ( temp 4-component vector of float) +0:112 Comma ( temp void) +0:112 Function Call: Fn2(vi4; ( temp void) +0:112 'tempArg' ( temp 4-component vector of int) +0:112 Sequence +0:112 imageStore ( temp void) +0:112 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:112 c1: direct index for structure ( uniform int) +0:112 '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:112 Constant: +0:112 0 (const uint) +0:112 'tempArg' ( temp 4-component vector of int) +0:112 'tempArg' ( temp 4-component vector of int) +0:113 Comma ( temp void) +0:113 Function Call: Fn2(vu4; ( temp void) +0:113 'tempArg' ( temp 4-component vector of uint) +0:113 Sequence +0:113 imageStore ( temp void) +0:113 'g_tTex1du4' (layout( rgba32ui) uniform uimage1D) +0:113 c1: direct index for structure ( uniform int) +0:113 '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:113 Constant: +0:113 0 (const uint) +0:113 'tempArg' ( temp 4-component vector of uint) +0:113 'tempArg' ( temp 4-component vector of uint) +0:117 Sequence +0:117 move second child to first child ( temp int) +0:117 'coordTemp' ( temp int) +0:117 c1: direct index for structure ( uniform int) +0:117 '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:117 Constant: +0:117 0 (const uint) +0:117 move second child to first child ( temp 4-component vector of float) +0:117 'storeTemp' ( temp 4-component vector of float) +0:117 imageLoad ( temp 4-component vector of float) +0:117 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:117 'coordTemp' ( temp int) +0:117 Pre-Increment ( temp 4-component vector of float) +0:117 'storeTemp' ( temp 4-component vector of float) +0:117 imageStore ( temp void) +0:117 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:117 'coordTemp' ( temp int) +0:117 'storeTemp' ( temp 4-component vector of float) +0:117 'storeTemp' ( temp 4-component vector of float) +0:118 Sequence +0:118 move second child to first child ( temp int) +0:118 'coordTemp' ( temp int) +0:118 c1: direct index for structure ( uniform int) +0:118 '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:118 Constant: +0:118 0 (const uint) +0:118 move second child to first child ( temp 4-component vector of int) +0:118 'storeTemp' ( temp 4-component vector of int) +0:118 imageLoad ( temp 4-component vector of int) +0:118 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:118 'coordTemp' ( temp int) +0:118 Pre-Increment ( temp 4-component vector of int) +0:118 'storeTemp' ( temp 4-component vector of int) +0:118 imageStore ( temp void) +0:118 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:118 'coordTemp' ( temp int) +0:118 'storeTemp' ( temp 4-component vector of int) +0:118 'storeTemp' ( temp 4-component vector of int) +0:119 Sequence +0:119 move second child to first child ( temp int) +0:119 'coordTemp' ( temp int) +0:119 c1: direct index for structure ( uniform int) +0:119 '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:119 Constant: +0:119 0 (const uint) +0:119 move second child to first child ( temp 4-component vector of uint) +0:119 'storeTemp' ( temp 4-component vector of uint) +0:119 imageLoad ( temp 4-component vector of uint) +0:119 'g_tTex1du4' (layout( rgba32ui) uniform uimage1D) +0:119 'coordTemp' ( temp int) +0:119 Pre-Increment ( temp 4-component vector of uint) +0:119 'storeTemp' ( temp 4-component vector of uint) +0:119 imageStore ( temp void) +0:119 'g_tTex1du4' (layout( rgba32ui) uniform uimage1D) +0:119 'coordTemp' ( temp int) +0:119 'storeTemp' ( temp 4-component vector of uint) +0:119 'storeTemp' ( temp 4-component vector of uint) +0:121 Sequence +0:121 move second child to first child ( temp int) +0:121 'coordTemp' ( temp int) +0:121 c1: direct index for structure ( uniform int) +0:121 '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:121 Constant: +0:121 0 (const uint) +0:121 move second child to first child ( temp 4-component vector of float) +0:121 'storeTemp' ( temp 4-component vector of float) +0:121 imageLoad ( temp 4-component vector of float) +0:121 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:121 'coordTemp' ( temp int) +0:121 Pre-Decrement ( temp 4-component vector of float) +0:121 'storeTemp' ( temp 4-component vector of float) +0:121 imageStore ( temp void) +0:121 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:121 'coordTemp' ( temp int) +0:121 'storeTemp' ( temp 4-component vector of float) +0:121 'storeTemp' ( temp 4-component vector of float) +0:122 Sequence +0:122 move second child to first child ( temp int) +0:122 'coordTemp' ( temp int) +0:122 c1: direct index for structure ( uniform int) +0:122 '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:122 Constant: +0:122 0 (const uint) +0:122 move second child to first child ( temp 4-component vector of int) +0:122 'storeTemp' ( temp 4-component vector of int) +0:122 imageLoad ( temp 4-component vector of int) +0:122 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:122 'coordTemp' ( temp int) +0:122 Pre-Decrement ( temp 4-component vector of int) +0:122 'storeTemp' ( temp 4-component vector of int) +0:122 imageStore ( temp void) +0:122 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:122 'coordTemp' ( temp int) +0:122 'storeTemp' ( temp 4-component vector of int) +0:122 'storeTemp' ( temp 4-component vector of int) +0:123 Sequence +0:123 move second child to first child ( temp int) +0:123 'coordTemp' ( temp int) +0:123 c1: direct index for structure ( uniform int) +0:123 '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:123 Constant: +0:123 0 (const uint) +0:123 move second child to first child ( temp 4-component vector of uint) +0:123 'storeTemp' ( temp 4-component vector of uint) +0:123 imageLoad ( temp 4-component vector of uint) +0:123 'g_tTex1du4' (layout( rgba32ui) uniform uimage1D) +0:123 'coordTemp' ( temp int) +0:123 Pre-Decrement ( temp 4-component vector of uint) +0:123 'storeTemp' ( temp 4-component vector of uint) +0:123 imageStore ( temp void) +0:123 'g_tTex1du4' (layout( rgba32ui) uniform uimage1D) +0:123 'coordTemp' ( temp int) +0:123 'storeTemp' ( temp 4-component vector of uint) +0:123 'storeTemp' ( temp 4-component vector of uint) +0:126 Sequence +0:126 move second child to first child ( temp int) +0:126 'coordTemp' ( temp int) +0:126 c1: direct index for structure ( uniform int) +0:126 '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:126 Constant: +0:126 0 (const uint) +0:126 move second child to first child ( temp 4-component vector of float) +0:126 'storeTempPre' ( temp 4-component vector of float) +0:126 imageLoad ( temp 4-component vector of float) +0:126 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:126 'coordTemp' ( temp int) +0:126 move second child to first child ( temp 4-component vector of float) +0:126 'storeTempPost' ( temp 4-component vector of float) +0:126 'storeTempPre' ( temp 4-component vector of float) +0:126 Post-Increment ( temp 4-component vector of float) +0:126 'storeTempPost' ( temp 4-component vector of float) +0:126 imageStore ( temp void) +0:126 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:126 'coordTemp' ( temp int) +0:126 'storeTempPost' ( temp 4-component vector of float) +0:126 'storeTempPre' ( temp 4-component vector of float) +0:127 Sequence +0:127 move second child to first child ( temp int) +0:127 'coordTemp' ( temp int) +0:127 c1: direct index for structure ( uniform int) +0:127 '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:127 Constant: +0:127 0 (const uint) +0:127 move second child to first child ( temp 4-component vector of uint) +0:127 'storeTempPre' ( temp 4-component vector of uint) +0:127 imageLoad ( temp 4-component vector of uint) +0:127 'g_tTex1du4' (layout( rgba32ui) uniform uimage1D) +0:127 'coordTemp' ( temp int) +0:127 move second child to first child ( temp 4-component vector of uint) +0:127 'storeTempPost' ( temp 4-component vector of uint) +0:127 'storeTempPre' ( temp 4-component vector of uint) +0:127 Post-Decrement ( temp 4-component vector of uint) +0:127 'storeTempPost' ( temp 4-component vector of uint) +0:127 imageStore ( temp void) +0:127 'g_tTex1du4' (layout( rgba32ui) uniform uimage1D) +0:127 'coordTemp' ( temp int) +0:127 'storeTempPost' ( temp 4-component vector of uint) +0:127 'storeTempPre' ( temp 4-component vector of uint) +0:128 Sequence +0:128 move second child to first child ( temp int) +0:128 'coordTemp' ( temp int) +0:128 c1: direct index for structure ( uniform int) +0:128 '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:128 Constant: +0:128 0 (const uint) +0:128 move second child to first child ( temp 4-component vector of int) +0:128 'storeTempPre' ( temp 4-component vector of int) +0:128 imageLoad ( temp 4-component vector of int) +0:128 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:128 'coordTemp' ( temp int) +0:128 move second child to first child ( temp 4-component vector of int) +0:128 'storeTempPost' ( temp 4-component vector of int) +0:128 'storeTempPre' ( temp 4-component vector of int) +0:128 Post-Increment ( temp 4-component vector of int) +0:128 'storeTempPost' ( temp 4-component vector of int) +0:128 imageStore ( temp void) +0:128 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:128 'coordTemp' ( temp int) +0:128 'storeTempPost' ( temp 4-component vector of int) +0:128 'storeTempPre' ( temp 4-component vector of int) +0:130 Sequence +0:130 move second child to first child ( temp int) +0:130 'coordTemp' ( temp int) +0:130 c1: direct index for structure ( uniform int) +0:130 '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:130 Constant: +0:130 0 (const uint) +0:130 move second child to first child ( temp 4-component vector of float) +0:130 'storeTempPre' ( temp 4-component vector of float) +0:130 imageLoad ( temp 4-component vector of float) +0:130 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:130 'coordTemp' ( temp int) +0:130 move second child to first child ( temp 4-component vector of float) +0:130 'storeTempPost' ( temp 4-component vector of float) +0:130 'storeTempPre' ( temp 4-component vector of float) +0:130 Post-Decrement ( temp 4-component vector of float) +0:130 'storeTempPost' ( temp 4-component vector of float) +0:130 imageStore ( temp void) +0:130 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:130 'coordTemp' ( temp int) +0:130 'storeTempPost' ( temp 4-component vector of float) +0:130 'storeTempPre' ( temp 4-component vector of float) +0:131 Sequence +0:131 move second child to first child ( temp int) +0:131 'coordTemp' ( temp int) +0:131 c1: direct index for structure ( uniform int) +0:131 '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:131 Constant: +0:131 0 (const uint) +0:131 move second child to first child ( temp 4-component vector of int) +0:131 'storeTempPre' ( temp 4-component vector of int) +0:131 imageLoad ( temp 4-component vector of int) +0:131 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:131 'coordTemp' ( temp int) +0:131 move second child to first child ( temp 4-component vector of int) +0:131 'storeTempPost' ( temp 4-component vector of int) +0:131 'storeTempPre' ( temp 4-component vector of int) +0:131 Post-Increment ( temp 4-component vector of int) +0:131 'storeTempPost' ( temp 4-component vector of int) +0:131 imageStore ( temp void) +0:131 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:131 'coordTemp' ( temp int) +0:131 'storeTempPost' ( temp 4-component vector of int) +0:131 'storeTempPre' ( temp 4-component vector of int) +0:132 Sequence +0:132 move second child to first child ( temp int) +0:132 'coordTemp' ( temp int) +0:132 c1: direct index for structure ( uniform int) +0:132 '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:132 Constant: +0:132 0 (const uint) +0:132 move second child to first child ( temp 4-component vector of uint) +0:132 'storeTempPre' ( temp 4-component vector of uint) +0:132 imageLoad ( temp 4-component vector of uint) +0:132 'g_tTex1du4' (layout( rgba32ui) uniform uimage1D) +0:132 'coordTemp' ( temp int) +0:132 move second child to first child ( temp 4-component vector of uint) +0:132 'storeTempPost' ( temp 4-component vector of uint) +0:132 'storeTempPre' ( temp 4-component vector of uint) +0:132 Post-Decrement ( temp 4-component vector of uint) +0:132 'storeTempPost' ( temp 4-component vector of uint) +0:132 imageStore ( temp void) +0:132 'g_tTex1du4' (layout( rgba32ui) uniform uimage1D) +0:132 'coordTemp' ( temp int) +0:132 'storeTempPost' ( temp 4-component vector of uint) +0:132 'storeTempPre' ( temp 4-component vector of uint) +0:135 Sequence +0:135 move second child to first child ( temp 4-component vector of float) +0:135 'storeTemp' ( temp 4-component vector of float) +0:? imageLoad ( temp 4-component vector of float) +0:135 'g_tTex2df4' (layout( rgba32f) uniform image2D) +0:? Constant: +0:? 2 (const int) +0:? 3 (const int) +0:135 imageStore ( temp void) +0:135 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:135 Constant: +0:135 1 (const int) +0:135 'storeTemp' ( temp 4-component vector of float) +0:135 'storeTemp' ( temp 4-component vector of float) +0:137 move second child to first child ( temp 4-component vector of float) +0:137 Color: direct index for structure ( temp 4-component vector of float) +0:137 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:137 Constant: +0:137 0 (const int) +0:137 Constant: +0:137 1.000000 +0:137 1.000000 +0:137 1.000000 +0:137 1.000000 +0:139 Branch: Return with expression +0:139 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:53 Function Definition: main( ( temp void) +0:53 Function Parameters: +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: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: +0:53 0 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) +0:? 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) +0:? 'g_tTex1du4' (layout( rgba32ui) uniform uimage1D) +0:? 'g_tTex2df4' (layout( rgba32f) uniform image2D) +0:? 'g_tTex2di4' (layout( rgba32i) uniform iimage2D) +0:? 'g_tTex2du4' (layout( rgba32ui) uniform uimage2D) +0:? 'g_tTex3df4' (layout( rgba32f) uniform image3D) +0:? 'g_tTex3di4' (layout( rgba32i) uniform iimage3D) +0:? 'g_tTex3du4' (layout( rgba32ui) uniform uimage3D) +0:? 'g_tTex1df4a' (layout( rgba32f) uniform image1DArray) +0:? 'g_tTex1di4a' (layout( rgba32i) uniform iimage1DArray) +0:? 'g_tTex1du4a' (layout( rgba32ui) uniform uimage1DArray) +0:? 'g_tTex2df4a' (layout( rgba32f) uniform image2DArray) +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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 607 + + Capability Shader + Capability Sampled1D + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 583 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 11 "Fn1(vi4;" + Name 10 "x" + Name 18 "Fn1(vu4;" + Name 17 "x" + Name 25 "Fn1(vf4;" + Name 24 "x" + Name 29 "Fn2(vi4;" + Name 28 "x" + Name 33 "Fn2(vu4;" + Name 32 "x" + Name 37 "Fn2(vf4;" + Name 36 "x" + Name 40 "SomeValue(" + Name 42 "PS_OUTPUT" + MemberName 42(PS_OUTPUT) 0 "Color" + Name 44 "@main(" + Name 63 "$Global" + MemberName 63($Global) 0 "c1" + MemberName 63($Global) 1 "c2" + MemberName 63($Global) 2 "c3" + MemberName 63($Global) 3 "c4" + MemberName 63($Global) 4 "o1" + MemberName 63($Global) 5 "o2" + MemberName 63($Global) 6 "o3" + MemberName 63($Global) 7 "o4" + MemberName 63($Global) 8 "uf4" + MemberName 63($Global) 9 "ui4" + MemberName 63($Global) 10 "uu4" + Name 65 "" + Name 75 "g_tTex1df4" + Name 81 "r00" + Name 86 "r01" + Name 89 "g_tTex1di4" + Name 94 "r02" + Name 97 "g_tTex1du4" + Name 102 "r10" + Name 105 "g_tTex2df4" + Name 112 "r11" + Name 115 "g_tTex2di4" + Name 120 "r12" + Name 123 "g_tTex2du4" + Name 128 "r20" + Name 131 "g_tTex3df4" + Name 138 "r21" + Name 141 "g_tTex3di4" + Name 146 "r22" + Name 149 "g_tTex3du4" + Name 154 "lf4" + Name 159 "storeTemp" + Name 169 "storeTemp" + Name 176 "storeTemp" + Name 185 "val1" + Name 187 "coordTemp" + Name 190 "storeTemp" + Name 201 "coordTemp" + Name 204 "storeTemp" + Name 215 "coordTemp" + Name 218 "storeTemp" + Name 229 "coordTemp" + Name 232 "storeTemp" + Name 242 "coordTemp" + Name 245 "storeTemp" + Name 255 "coordTemp" + Name 258 "storeTemp" + Name 269 "coordTemp" + Name 272 "storeTemp" + Name 283 "coordTemp" + Name 286 "storeTemp" + Name 296 "coordTemp" + Name 299 "storeTemp" + Name 309 "storeTemp" + Name 319 "storeTemp" + Name 326 "storeTemp" + Name 333 "storeTemp" + Name 343 "storeTemp" + Name 351 "storeTemp" + Name 362 "param" + Name 368 "param" + Name 374 "param" + Name 376 "tempArg" + Name 377 "param" + Name 384 "tempArg" + Name 385 "param" + Name 392 "tempArg" + Name 393 "param" + Name 400 "coordTemp" + Name 403 "storeTemp" + Name 414 "coordTemp" + Name 417 "storeTemp" + Name 427 "coordTemp" + Name 430 "storeTemp" + Name 440 "coordTemp" + Name 443 "storeTemp" + Name 453 "coordTemp" + Name 456 "storeTemp" + Name 466 "coordTemp" + Name 469 "storeTemp" + Name 479 "coordTemp" + Name 482 "storeTempPre" + Name 486 "storeTempPost" + Name 494 "coordTemp" + Name 497 "storeTempPre" + Name 501 "storeTempPost" + Name 509 "coordTemp" + Name 512 "storeTempPre" + Name 516 "storeTempPost" + Name 524 "coordTemp" + Name 527 "storeTempPre" + Name 531 "storeTempPost" + Name 539 "coordTemp" + Name 542 "storeTempPre" + Name 546 "storeTempPost" + Name 554 "coordTemp" + Name 557 "storeTempPre" + Name 561 "storeTempPost" + Name 569 "storeTemp" + Name 576 "psout" + Name 583 "Color" + Name 588 "g_sSamp" + Name 591 "g_tTex1df4a" + Name 594 "g_tTex1di4a" + Name 597 "g_tTex1du4a" + Name 600 "g_tTex2df4a" + Name 603 "g_tTex2di4a" + Name 606 "g_tTex2du4a" + MemberDecorate 63($Global) 0 Offset 0 + MemberDecorate 63($Global) 1 Offset 8 + MemberDecorate 63($Global) 2 Offset 16 + MemberDecorate 63($Global) 3 Offset 32 + MemberDecorate 63($Global) 4 Offset 48 + MemberDecorate 63($Global) 5 Offset 56 + MemberDecorate 63($Global) 6 Offset 64 + MemberDecorate 63($Global) 7 Offset 80 + MemberDecorate 63($Global) 8 Offset 96 + MemberDecorate 63($Global) 9 Offset 112 + MemberDecorate 63($Global) 10 Offset 128 + Decorate 63($Global) Block + Decorate 65 DescriptorSet 0 + Decorate 75(g_tTex1df4) DescriptorSet 0 + Decorate 75(g_tTex1df4) Binding 0 + Decorate 89(g_tTex1di4) DescriptorSet 0 + Decorate 97(g_tTex1du4) DescriptorSet 0 + Decorate 105(g_tTex2df4) DescriptorSet 0 + Decorate 115(g_tTex2di4) DescriptorSet 0 + Decorate 123(g_tTex2du4) DescriptorSet 0 + Decorate 131(g_tTex3df4) DescriptorSet 0 + Decorate 141(g_tTex3di4) DescriptorSet 0 + Decorate 149(g_tTex3du4) DescriptorSet 0 + Decorate 583(Color) Location 0 + Decorate 588(g_sSamp) DescriptorSet 0 + Decorate 588(g_sSamp) Binding 0 + Decorate 591(g_tTex1df4a) DescriptorSet 0 + Decorate 594(g_tTex1di4a) DescriptorSet 0 + Decorate 597(g_tTex1du4a) DescriptorSet 0 + Decorate 600(g_tTex2df4a) DescriptorSet 0 + Decorate 603(g_tTex2di4a) DescriptorSet 0 + Decorate 606(g_tTex2du4a) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypeVector 6(int) 4 + 8: TypePointer Function 7(ivec4) + 9: TypeFunction 7(ivec4) 8(ptr) + 13: TypeInt 32 0 + 14: TypeVector 13(int) 4 + 15: TypePointer Function 14(ivec4) + 16: TypeFunction 14(ivec4) 15(ptr) + 20: TypeFloat 32 + 21: TypeVector 20(float) 4 + 22: TypePointer Function 21(fvec4) + 23: TypeFunction 21(fvec4) 22(ptr) + 27: TypeFunction 2 8(ptr) + 31: TypeFunction 2 15(ptr) + 35: TypeFunction 2 22(ptr) + 39: TypeFunction 21(fvec4) + 42(PS_OUTPUT): TypeStruct 21(fvec4) + 43: TypeFunction 42(PS_OUTPUT) + 55: 6(int) Constant 0 + 56: 7(ivec4) ConstantComposite 55 55 55 55 + 57: 13(int) Constant 0 + 58: 14(ivec4) ConstantComposite 57 57 57 57 + 59: 20(float) Constant 0 + 60: 21(fvec4) ConstantComposite 59 59 59 59 + 61: TypeVector 6(int) 2 + 62: TypeVector 6(int) 3 + 63($Global): TypeStruct 6(int) 61(ivec2) 62(ivec3) 7(ivec4) 6(int) 61(ivec2) 62(ivec3) 7(ivec4) 21(fvec4) 7(ivec4) 14(ivec4) + 64: TypePointer Uniform 63($Global) + 65: 64(ptr) Variable Uniform + 66: 6(int) Constant 3 + 67: TypePointer Uniform 7(ivec4) + 73: TypeImage 20(float) 1D nonsampled format:Rgba32f + 74: TypePointer UniformConstant 73 + 75(g_tTex1df4): 74(ptr) Variable UniformConstant + 77: TypePointer Uniform 6(int) + 87: TypeImage 6(int) 1D nonsampled format:Rgba32i + 88: TypePointer UniformConstant 87 + 89(g_tTex1di4): 88(ptr) Variable UniformConstant + 95: TypeImage 13(int) 1D nonsampled format:Rgba32ui + 96: TypePointer UniformConstant 95 + 97(g_tTex1du4): 96(ptr) Variable UniformConstant + 103: TypeImage 20(float) 2D nonsampled format:Rgba32f + 104: TypePointer UniformConstant 103 + 105(g_tTex2df4): 104(ptr) Variable UniformConstant + 107: 6(int) Constant 1 + 108: TypePointer Uniform 61(ivec2) + 113: TypeImage 6(int) 2D nonsampled format:Rgba32i + 114: TypePointer UniformConstant 113 + 115(g_tTex2di4): 114(ptr) Variable UniformConstant + 121: TypeImage 13(int) 2D nonsampled format:Rgba32ui + 122: TypePointer UniformConstant 121 + 123(g_tTex2du4): 122(ptr) Variable UniformConstant + 129: TypeImage 20(float) 3D nonsampled format:Rgba32f + 130: TypePointer UniformConstant 129 + 131(g_tTex3df4): 130(ptr) Variable UniformConstant + 133: 6(int) Constant 2 + 134: TypePointer Uniform 62(ivec3) + 139: TypeImage 6(int) 3D nonsampled format:Rgba32i + 140: TypePointer UniformConstant 139 + 141(g_tTex3di4): 140(ptr) Variable UniformConstant + 147: TypeImage 13(int) 3D nonsampled format:Rgba32ui + 148: TypePointer UniformConstant 147 + 149(g_tTex3du4): 148(ptr) Variable UniformConstant + 155: 6(int) Constant 8 + 156: TypePointer Uniform 21(fvec4) + 170: 6(int) Constant 4 + 171: 7(ivec4) ConstantComposite 133 133 66 170 + 177: 13(int) Constant 3 + 178: 13(int) Constant 2 + 179: 13(int) Constant 4 + 180: 14(ivec4) ConstantComposite 177 178 177 179 + 186: TypePointer Function 6(int) + 194: 20(float) Constant 1073741824 + 208: 20(float) Constant 1077936128 + 222: 20(float) Constant 1082130432 + 262: 6(int) Constant 65535 + 276: 6(int) Constant 61680 + 320: 6(int) Constant 5 + 321: 7(ivec4) ConstantComposite 320 133 66 170 + 327: 13(int) Constant 6 + 328: 14(ivec4) ConstantComposite 327 178 177 179 + 344: 6(int) Constant 6 + 345: 6(int) Constant 7 + 346: 7(ivec4) ConstantComposite 155 344 345 155 + 352: 13(int) Constant 9 + 353: 14(ivec4) ConstantComposite 352 178 177 179 + 408: 20(float) Constant 1065353216 + 571: 61(ivec2) ConstantComposite 133 66 + 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 + 586: TypeSampler + 587: TypePointer UniformConstant 586 + 588(g_sSamp): 587(ptr) Variable UniformConstant + 589: TypeImage 20(float) 1D array nonsampled format:Rgba32f + 590: TypePointer UniformConstant 589 +591(g_tTex1df4a): 590(ptr) Variable UniformConstant + 592: TypeImage 6(int) 1D array nonsampled format:Rgba32i + 593: TypePointer UniformConstant 592 +594(g_tTex1di4a): 593(ptr) Variable UniformConstant + 595: TypeImage 13(int) 1D array nonsampled format:Rgba32ui + 596: TypePointer UniformConstant 595 +597(g_tTex1du4a): 596(ptr) Variable UniformConstant + 598: TypeImage 20(float) 2D array nonsampled format:Rgba32f + 599: TypePointer UniformConstant 598 +600(g_tTex2df4a): 599(ptr) Variable UniformConstant + 601: TypeImage 6(int) 2D array nonsampled format:Rgba32i + 602: TypePointer UniformConstant 601 +603(g_tTex2di4a): 602(ptr) Variable UniformConstant + 604: TypeImage 13(int) 2D array nonsampled format:Rgba32ui + 605: TypePointer UniformConstant 604 +606(g_tTex2du4a): 605(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label + 584:42(PS_OUTPUT) FunctionCall 44(@main() + 585: 21(fvec4) CompositeExtract 584 0 + Store 583(Color) 585 + Return + FunctionEnd + 11(Fn1(vi4;): 7(ivec4) Function None 9 + 10(x): 8(ptr) FunctionParameter + 12: Label + 46: 7(ivec4) Load 10(x) + ReturnValue 46 + FunctionEnd + 18(Fn1(vu4;): 14(ivec4) Function None 16 + 17(x): 15(ptr) FunctionParameter + 19: Label + 49: 14(ivec4) Load 17(x) + ReturnValue 49 + FunctionEnd + 25(Fn1(vf4;): 21(fvec4) Function None 23 + 24(x): 22(ptr) FunctionParameter + 26: Label + 52: 21(fvec4) Load 24(x) + ReturnValue 52 + FunctionEnd + 29(Fn2(vi4;): 2 Function None 27 + 28(x): 8(ptr) FunctionParameter + 30: Label + Store 28(x) 56 + Return + FunctionEnd + 33(Fn2(vu4;): 2 Function None 31 + 32(x): 15(ptr) FunctionParameter + 34: Label + Store 32(x) 58 + Return + FunctionEnd + 37(Fn2(vf4;): 2 Function None 35 + 36(x): 22(ptr) FunctionParameter + 38: Label + Store 36(x) 60 + Return + FunctionEnd + 40(SomeValue(): 21(fvec4) Function None 39 + 41: Label + 68: 67(ptr) AccessChain 65 66 + 69: 7(ivec4) Load 68 + 70: 21(fvec4) ConvertSToF 69 + ReturnValue 70 + FunctionEnd + 44(@main():42(PS_OUTPUT) Function None 43 + 45: Label + 81(r00): 22(ptr) Variable Function + 86(r01): 8(ptr) Variable Function + 94(r02): 15(ptr) Variable Function + 102(r10): 22(ptr) Variable Function + 112(r11): 8(ptr) Variable Function + 120(r12): 15(ptr) Variable Function + 128(r20): 22(ptr) Variable Function + 138(r21): 8(ptr) Variable Function + 146(r22): 15(ptr) Variable Function + 154(lf4): 22(ptr) Variable Function + 159(storeTemp): 22(ptr) Variable Function + 169(storeTemp): 8(ptr) Variable Function + 176(storeTemp): 15(ptr) Variable Function + 185(val1): 22(ptr) Variable Function + 187(coordTemp): 186(ptr) Variable Function + 190(storeTemp): 22(ptr) Variable Function + 201(coordTemp): 186(ptr) Variable Function + 204(storeTemp): 22(ptr) Variable Function + 215(coordTemp): 186(ptr) Variable Function + 218(storeTemp): 22(ptr) Variable Function + 229(coordTemp): 186(ptr) Variable Function + 232(storeTemp): 8(ptr) Variable Function + 242(coordTemp): 186(ptr) Variable Function + 245(storeTemp): 8(ptr) Variable Function + 255(coordTemp): 186(ptr) Variable Function + 258(storeTemp): 8(ptr) Variable Function + 269(coordTemp): 186(ptr) Variable Function + 272(storeTemp): 8(ptr) Variable Function + 283(coordTemp): 186(ptr) Variable Function + 286(storeTemp): 8(ptr) Variable Function + 296(coordTemp): 186(ptr) Variable Function + 299(storeTemp): 8(ptr) Variable Function + 309(storeTemp): 22(ptr) Variable Function + 319(storeTemp): 8(ptr) Variable Function + 326(storeTemp): 15(ptr) Variable Function + 333(storeTemp): 22(ptr) Variable Function + 343(storeTemp): 8(ptr) Variable Function + 351(storeTemp): 15(ptr) Variable Function + 362(param): 22(ptr) Variable Function + 368(param): 8(ptr) Variable Function + 374(param): 15(ptr) Variable Function + 376(tempArg): 22(ptr) Variable Function + 377(param): 22(ptr) Variable Function + 384(tempArg): 8(ptr) Variable Function + 385(param): 8(ptr) Variable Function + 392(tempArg): 15(ptr) Variable Function + 393(param): 15(ptr) Variable Function + 400(coordTemp): 186(ptr) Variable Function + 403(storeTemp): 22(ptr) Variable Function + 414(coordTemp): 186(ptr) Variable Function + 417(storeTemp): 8(ptr) Variable Function + 427(coordTemp): 186(ptr) Variable Function + 430(storeTemp): 15(ptr) Variable Function + 440(coordTemp): 186(ptr) Variable Function + 443(storeTemp): 22(ptr) Variable Function + 453(coordTemp): 186(ptr) Variable Function + 456(storeTemp): 8(ptr) Variable Function + 466(coordTemp): 186(ptr) Variable Function + 469(storeTemp): 15(ptr) Variable Function + 479(coordTemp): 186(ptr) Variable Function +482(storeTempPre): 22(ptr) Variable Function +486(storeTempPost): 22(ptr) Variable Function + 494(coordTemp): 186(ptr) Variable Function +497(storeTempPre): 15(ptr) Variable Function +501(storeTempPost): 15(ptr) Variable Function + 509(coordTemp): 186(ptr) Variable Function +512(storeTempPre): 8(ptr) Variable Function +516(storeTempPost): 8(ptr) Variable Function + 524(coordTemp): 186(ptr) Variable Function +527(storeTempPre): 22(ptr) Variable Function +531(storeTempPost): 22(ptr) Variable Function + 539(coordTemp): 186(ptr) Variable Function +542(storeTempPre): 8(ptr) Variable Function +546(storeTempPost): 8(ptr) Variable Function + 554(coordTemp): 186(ptr) Variable Function +557(storeTempPre): 15(ptr) Variable Function +561(storeTempPost): 15(ptr) Variable Function + 569(storeTemp): 22(ptr) Variable Function + 576(psout): 575(ptr) Variable Function + 76: 73 Load 75(g_tTex1df4) + 78: 77(ptr) AccessChain 65 55 + 79: 6(int) Load 78 + 80: 21(fvec4) ImageRead 76 79 + 82: 73 Load 75(g_tTex1df4) + 83: 77(ptr) AccessChain 65 55 + 84: 6(int) Load 83 + 85: 21(fvec4) ImageRead 82 84 + Store 81(r00) 85 + 90: 87 Load 89(g_tTex1di4) + 91: 77(ptr) AccessChain 65 55 + 92: 6(int) Load 91 + 93: 7(ivec4) ImageRead 90 92 + Store 86(r01) 93 + 98: 95 Load 97(g_tTex1du4) + 99: 77(ptr) AccessChain 65 55 + 100: 6(int) Load 99 + 101: 14(ivec4) ImageRead 98 100 + Store 94(r02) 101 + 106: 103 Load 105(g_tTex2df4) + 109: 108(ptr) AccessChain 65 107 + 110: 61(ivec2) Load 109 + 111: 21(fvec4) ImageRead 106 110 + Store 102(r10) 111 + 116: 113 Load 115(g_tTex2di4) + 117: 108(ptr) AccessChain 65 107 + 118: 61(ivec2) Load 117 + 119: 7(ivec4) ImageRead 116 118 + Store 112(r11) 119 + 124: 121 Load 123(g_tTex2du4) + 125: 108(ptr) AccessChain 65 107 + 126: 61(ivec2) Load 125 + 127: 14(ivec4) ImageRead 124 126 + Store 120(r12) 127 + 132: 129 Load 131(g_tTex3df4) + 135: 134(ptr) AccessChain 65 133 + 136: 62(ivec3) Load 135 + 137: 21(fvec4) ImageRead 132 136 + Store 128(r20) 137 + 142: 139 Load 141(g_tTex3di4) + 143: 134(ptr) AccessChain 65 133 + 144: 62(ivec3) Load 143 + 145: 7(ivec4) ImageRead 142 144 + Store 138(r21) 145 + 150: 147 Load 149(g_tTex3du4) + 151: 134(ptr) AccessChain 65 133 + 152: 62(ivec3) Load 151 + 153: 14(ivec4) ImageRead 150 152 + Store 146(r22) 153 + 157: 156(ptr) AccessChain 65 155 + 158: 21(fvec4) Load 157 + Store 154(lf4) 158 + 160: 21(fvec4) FunctionCall 40(SomeValue() + Store 159(storeTemp) 160 + 161: 73 Load 75(g_tTex1df4) + 162: 77(ptr) AccessChain 65 55 + 163: 6(int) Load 162 + 164: 21(fvec4) Load 159(storeTemp) + ImageWrite 161 163 164 + 165: 73 Load 75(g_tTex1df4) + 166: 77(ptr) AccessChain 65 55 + 167: 6(int) Load 166 + 168: 21(fvec4) Load 154(lf4) + ImageWrite 165 167 168 + Store 169(storeTemp) 171 + 172: 87 Load 89(g_tTex1di4) + 173: 77(ptr) AccessChain 65 55 + 174: 6(int) Load 173 + 175: 7(ivec4) Load 169(storeTemp) + ImageWrite 172 174 175 + Store 176(storeTemp) 180 + 181: 95 Load 97(g_tTex1du4) + 182: 77(ptr) AccessChain 65 55 + 183: 6(int) Load 182 + 184: 14(ivec4) Load 176(storeTemp) + ImageWrite 181 183 184 + 188: 77(ptr) AccessChain 65 55 + 189: 6(int) Load 188 + Store 187(coordTemp) 189 + 191: 73 Load 75(g_tTex1df4) + 192: 6(int) Load 187(coordTemp) + 193: 21(fvec4) ImageRead 191 192 + Store 190(storeTemp) 193 + 195: 21(fvec4) Load 190(storeTemp) + 196: 21(fvec4) VectorTimesScalar 195 194 + Store 190(storeTemp) 196 + 197: 73 Load 75(g_tTex1df4) + 198: 6(int) Load 187(coordTemp) + 199: 21(fvec4) Load 190(storeTemp) + ImageWrite 197 198 199 + 200: 21(fvec4) Load 190(storeTemp) + Store 185(val1) 200 + 202: 77(ptr) AccessChain 65 55 + 203: 6(int) Load 202 + Store 201(coordTemp) 203 + 205: 73 Load 75(g_tTex1df4) + 206: 6(int) Load 201(coordTemp) + 207: 21(fvec4) ImageRead 205 206 + Store 204(storeTemp) 207 + 209: 21(fvec4) Load 204(storeTemp) + 210: 21(fvec4) CompositeConstruct 208 208 208 208 + 211: 21(fvec4) FSub 209 210 + Store 204(storeTemp) 211 + 212: 73 Load 75(g_tTex1df4) + 213: 6(int) Load 201(coordTemp) + 214: 21(fvec4) Load 204(storeTemp) + ImageWrite 212 213 214 + 216: 77(ptr) AccessChain 65 55 + 217: 6(int) Load 216 + Store 215(coordTemp) 217 + 219: 73 Load 75(g_tTex1df4) + 220: 6(int) Load 215(coordTemp) + 221: 21(fvec4) ImageRead 219 220 + Store 218(storeTemp) 221 + 223: 21(fvec4) Load 218(storeTemp) + 224: 21(fvec4) CompositeConstruct 222 222 222 222 + 225: 21(fvec4) FAdd 223 224 + Store 218(storeTemp) 225 + 226: 73 Load 75(g_tTex1df4) + 227: 6(int) Load 215(coordTemp) + 228: 21(fvec4) Load 218(storeTemp) + ImageWrite 226 227 228 + 230: 77(ptr) AccessChain 65 55 + 231: 6(int) Load 230 + Store 229(coordTemp) 231 + 233: 87 Load 89(g_tTex1di4) + 234: 6(int) Load 229(coordTemp) + 235: 7(ivec4) ImageRead 233 234 + Store 232(storeTemp) 235 + 236: 7(ivec4) Load 232(storeTemp) + 237: 7(ivec4) CompositeConstruct 133 133 133 133 + 238: 7(ivec4) SDiv 236 237 + Store 232(storeTemp) 238 + 239: 87 Load 89(g_tTex1di4) + 240: 6(int) Load 229(coordTemp) + 241: 7(ivec4) Load 232(storeTemp) + ImageWrite 239 240 241 + 243: 77(ptr) AccessChain 65 55 + 244: 6(int) Load 243 + Store 242(coordTemp) 244 + 246: 87 Load 89(g_tTex1di4) + 247: 6(int) Load 242(coordTemp) + 248: 7(ivec4) ImageRead 246 247 + Store 245(storeTemp) 248 + 249: 7(ivec4) Load 245(storeTemp) + 250: 7(ivec4) CompositeConstruct 133 133 133 133 + 251: 7(ivec4) SMod 249 250 + Store 245(storeTemp) 251 + 252: 87 Load 89(g_tTex1di4) + 253: 6(int) Load 242(coordTemp) + 254: 7(ivec4) Load 245(storeTemp) + ImageWrite 252 253 254 + 256: 77(ptr) AccessChain 65 55 + 257: 6(int) Load 256 + Store 255(coordTemp) 257 + 259: 87 Load 89(g_tTex1di4) + 260: 6(int) Load 255(coordTemp) + 261: 7(ivec4) ImageRead 259 260 + Store 258(storeTemp) 261 + 263: 7(ivec4) Load 258(storeTemp) + 264: 7(ivec4) CompositeConstruct 262 262 262 262 + 265: 7(ivec4) BitwiseAnd 263 264 + Store 258(storeTemp) 265 + 266: 87 Load 89(g_tTex1di4) + 267: 6(int) Load 255(coordTemp) + 268: 7(ivec4) Load 258(storeTemp) + ImageWrite 266 267 268 + 270: 77(ptr) AccessChain 65 55 + 271: 6(int) Load 270 + Store 269(coordTemp) 271 + 273: 87 Load 89(g_tTex1di4) + 274: 6(int) Load 269(coordTemp) + 275: 7(ivec4) ImageRead 273 274 + Store 272(storeTemp) 275 + 277: 7(ivec4) Load 272(storeTemp) + 278: 7(ivec4) CompositeConstruct 276 276 276 276 + 279: 7(ivec4) BitwiseOr 277 278 + Store 272(storeTemp) 279 + 280: 87 Load 89(g_tTex1di4) + 281: 6(int) Load 269(coordTemp) + 282: 7(ivec4) Load 272(storeTemp) + ImageWrite 280 281 282 + 284: 77(ptr) AccessChain 65 55 + 285: 6(int) Load 284 + Store 283(coordTemp) 285 + 287: 87 Load 89(g_tTex1di4) + 288: 6(int) Load 283(coordTemp) + 289: 7(ivec4) ImageRead 287 288 + Store 286(storeTemp) 289 + 290: 7(ivec4) Load 286(storeTemp) + 291: 7(ivec4) CompositeConstruct 133 133 133 133 + 292: 7(ivec4) ShiftLeftLogical 290 291 + Store 286(storeTemp) 292 + 293: 87 Load 89(g_tTex1di4) + 294: 6(int) Load 283(coordTemp) + 295: 7(ivec4) Load 286(storeTemp) + ImageWrite 293 294 295 + 297: 77(ptr) AccessChain 65 55 + 298: 6(int) Load 297 + Store 296(coordTemp) 298 + 300: 87 Load 89(g_tTex1di4) + 301: 6(int) Load 296(coordTemp) + 302: 7(ivec4) ImageRead 300 301 + Store 299(storeTemp) 302 + 303: 7(ivec4) Load 299(storeTemp) + 304: 7(ivec4) CompositeConstruct 133 133 133 133 + 305: 7(ivec4) ShiftRightArithmetic 303 304 + Store 299(storeTemp) 305 + 306: 87 Load 89(g_tTex1di4) + 307: 6(int) Load 296(coordTemp) + 308: 7(ivec4) Load 299(storeTemp) + ImageWrite 306 307 308 + 310: 21(fvec4) FunctionCall 40(SomeValue() + Store 309(storeTemp) 310 + 311: 103 Load 105(g_tTex2df4) + 312: 108(ptr) AccessChain 65 107 + 313: 61(ivec2) Load 312 + 314: 21(fvec4) Load 309(storeTemp) + ImageWrite 311 313 314 + 315: 103 Load 105(g_tTex2df4) + 316: 108(ptr) AccessChain 65 107 + 317: 61(ivec2) Load 316 + 318: 21(fvec4) Load 154(lf4) + ImageWrite 315 317 318 + Store 319(storeTemp) 321 + 322: 113 Load 115(g_tTex2di4) + 323: 108(ptr) AccessChain 65 107 + 324: 61(ivec2) Load 323 + 325: 7(ivec4) Load 319(storeTemp) + ImageWrite 322 324 325 + Store 326(storeTemp) 328 + 329: 121 Load 123(g_tTex2du4) + 330: 108(ptr) AccessChain 65 107 + 331: 61(ivec2) Load 330 + 332: 14(ivec4) Load 326(storeTemp) + ImageWrite 329 331 332 + 334: 21(fvec4) FunctionCall 40(SomeValue() + Store 333(storeTemp) 334 + 335: 129 Load 131(g_tTex3df4) + 336: 134(ptr) AccessChain 65 133 + 337: 62(ivec3) Load 336 + 338: 21(fvec4) Load 333(storeTemp) + ImageWrite 335 337 338 + 339: 129 Load 131(g_tTex3df4) + 340: 134(ptr) AccessChain 65 133 + 341: 62(ivec3) Load 340 + 342: 21(fvec4) Load 154(lf4) + ImageWrite 339 341 342 + Store 343(storeTemp) 346 + 347: 139 Load 141(g_tTex3di4) + 348: 134(ptr) AccessChain 65 133 + 349: 62(ivec3) Load 348 + 350: 7(ivec4) Load 343(storeTemp) + ImageWrite 347 349 350 + Store 351(storeTemp) 353 + 354: 147 Load 149(g_tTex3du4) + 355: 134(ptr) AccessChain 65 133 + 356: 62(ivec3) Load 355 + 357: 14(ivec4) Load 351(storeTemp) + ImageWrite 354 356 357 + 358: 73 Load 75(g_tTex1df4) + 359: 77(ptr) AccessChain 65 55 + 360: 6(int) Load 359 + 361: 21(fvec4) ImageRead 358 360 + Store 362(param) 361 + 363: 21(fvec4) FunctionCall 25(Fn1(vf4;) 362(param) + 364: 87 Load 89(g_tTex1di4) + 365: 77(ptr) AccessChain 65 55 + 366: 6(int) Load 365 + 367: 7(ivec4) ImageRead 364 366 + Store 368(param) 367 + 369: 7(ivec4) FunctionCall 11(Fn1(vi4;) 368(param) + 370: 95 Load 97(g_tTex1du4) + 371: 77(ptr) AccessChain 65 55 + 372: 6(int) Load 371 + 373: 14(ivec4) ImageRead 370 372 + Store 374(param) 373 + 375: 14(ivec4) FunctionCall 18(Fn1(vu4;) 374(param) + 378: 2 FunctionCall 37(Fn2(vf4;) 377(param) + 379: 21(fvec4) Load 377(param) + Store 376(tempArg) 379 + 380: 73 Load 75(g_tTex1df4) + 381: 77(ptr) AccessChain 65 55 + 382: 6(int) Load 381 + 383: 21(fvec4) Load 376(tempArg) + ImageWrite 380 382 383 + 386: 2 FunctionCall 29(Fn2(vi4;) 385(param) + 387: 7(ivec4) Load 385(param) + Store 384(tempArg) 387 + 388: 87 Load 89(g_tTex1di4) + 389: 77(ptr) AccessChain 65 55 + 390: 6(int) Load 389 + 391: 7(ivec4) Load 384(tempArg) + ImageWrite 388 390 391 + 394: 2 FunctionCall 33(Fn2(vu4;) 393(param) + 395: 14(ivec4) Load 393(param) + Store 392(tempArg) 395 + 396: 95 Load 97(g_tTex1du4) + 397: 77(ptr) AccessChain 65 55 + 398: 6(int) Load 397 + 399: 14(ivec4) Load 392(tempArg) + ImageWrite 396 398 399 + 401: 77(ptr) AccessChain 65 55 + 402: 6(int) Load 401 + Store 400(coordTemp) 402 + 404: 73 Load 75(g_tTex1df4) + 405: 6(int) Load 400(coordTemp) + 406: 21(fvec4) ImageRead 404 405 + Store 403(storeTemp) 406 + 407: 21(fvec4) Load 403(storeTemp) + 409: 21(fvec4) CompositeConstruct 408 408 408 408 + 410: 21(fvec4) FAdd 407 409 + Store 403(storeTemp) 410 + 411: 73 Load 75(g_tTex1df4) + 412: 6(int) Load 400(coordTemp) + 413: 21(fvec4) Load 403(storeTemp) + ImageWrite 411 412 413 + 415: 77(ptr) AccessChain 65 55 + 416: 6(int) Load 415 + Store 414(coordTemp) 416 + 418: 87 Load 89(g_tTex1di4) + 419: 6(int) Load 414(coordTemp) + 420: 7(ivec4) ImageRead 418 419 + Store 417(storeTemp) 420 + 421: 7(ivec4) Load 417(storeTemp) + 422: 7(ivec4) CompositeConstruct 107 107 107 107 + 423: 7(ivec4) IAdd 421 422 + Store 417(storeTemp) 423 + 424: 87 Load 89(g_tTex1di4) + 425: 6(int) Load 414(coordTemp) + 426: 7(ivec4) Load 417(storeTemp) + ImageWrite 424 425 426 + 428: 77(ptr) AccessChain 65 55 + 429: 6(int) Load 428 + Store 427(coordTemp) 429 + 431: 95 Load 97(g_tTex1du4) + 432: 6(int) Load 427(coordTemp) + 433: 14(ivec4) ImageRead 431 432 + Store 430(storeTemp) 433 + 434: 14(ivec4) Load 430(storeTemp) + 435: 7(ivec4) CompositeConstruct 107 107 107 107 + 436: 14(ivec4) IAdd 434 435 + Store 430(storeTemp) 436 + 437: 95 Load 97(g_tTex1du4) + 438: 6(int) Load 427(coordTemp) + 439: 14(ivec4) Load 430(storeTemp) + ImageWrite 437 438 439 + 441: 77(ptr) AccessChain 65 55 + 442: 6(int) Load 441 + Store 440(coordTemp) 442 + 444: 73 Load 75(g_tTex1df4) + 445: 6(int) Load 440(coordTemp) + 446: 21(fvec4) ImageRead 444 445 + Store 443(storeTemp) 446 + 447: 21(fvec4) Load 443(storeTemp) + 448: 21(fvec4) CompositeConstruct 408 408 408 408 + 449: 21(fvec4) FSub 447 448 + Store 443(storeTemp) 449 + 450: 73 Load 75(g_tTex1df4) + 451: 6(int) Load 440(coordTemp) + 452: 21(fvec4) Load 443(storeTemp) + ImageWrite 450 451 452 + 454: 77(ptr) AccessChain 65 55 + 455: 6(int) Load 454 + Store 453(coordTemp) 455 + 457: 87 Load 89(g_tTex1di4) + 458: 6(int) Load 453(coordTemp) + 459: 7(ivec4) ImageRead 457 458 + Store 456(storeTemp) 459 + 460: 7(ivec4) Load 456(storeTemp) + 461: 7(ivec4) CompositeConstruct 107 107 107 107 + 462: 7(ivec4) ISub 460 461 + Store 456(storeTemp) 462 + 463: 87 Load 89(g_tTex1di4) + 464: 6(int) Load 453(coordTemp) + 465: 7(ivec4) Load 456(storeTemp) + ImageWrite 463 464 465 + 467: 77(ptr) AccessChain 65 55 + 468: 6(int) Load 467 + Store 466(coordTemp) 468 + 470: 95 Load 97(g_tTex1du4) + 471: 6(int) Load 466(coordTemp) + 472: 14(ivec4) ImageRead 470 471 + Store 469(storeTemp) 472 + 473: 14(ivec4) Load 469(storeTemp) + 474: 7(ivec4) CompositeConstruct 107 107 107 107 + 475: 14(ivec4) ISub 473 474 + Store 469(storeTemp) 475 + 476: 95 Load 97(g_tTex1du4) + 477: 6(int) Load 466(coordTemp) + 478: 14(ivec4) Load 469(storeTemp) + ImageWrite 476 477 478 + 480: 77(ptr) AccessChain 65 55 + 481: 6(int) Load 480 + Store 479(coordTemp) 481 + 483: 73 Load 75(g_tTex1df4) + 484: 6(int) Load 479(coordTemp) + 485: 21(fvec4) ImageRead 483 484 + Store 482(storeTempPre) 485 + 487: 21(fvec4) Load 482(storeTempPre) + Store 486(storeTempPost) 487 + 488: 21(fvec4) Load 486(storeTempPost) + 489: 21(fvec4) CompositeConstruct 408 408 408 408 + 490: 21(fvec4) FAdd 488 489 + Store 486(storeTempPost) 490 + 491: 73 Load 75(g_tTex1df4) + 492: 6(int) Load 479(coordTemp) + 493: 21(fvec4) Load 486(storeTempPost) + ImageWrite 491 492 493 + 495: 77(ptr) AccessChain 65 55 + 496: 6(int) Load 495 + Store 494(coordTemp) 496 + 498: 95 Load 97(g_tTex1du4) + 499: 6(int) Load 494(coordTemp) + 500: 14(ivec4) ImageRead 498 499 + Store 497(storeTempPre) 500 + 502: 14(ivec4) Load 497(storeTempPre) + Store 501(storeTempPost) 502 + 503: 14(ivec4) Load 501(storeTempPost) + 504: 7(ivec4) CompositeConstruct 107 107 107 107 + 505: 14(ivec4) ISub 503 504 + Store 501(storeTempPost) 505 + 506: 95 Load 97(g_tTex1du4) + 507: 6(int) Load 494(coordTemp) + 508: 14(ivec4) Load 501(storeTempPost) + ImageWrite 506 507 508 + 510: 77(ptr) AccessChain 65 55 + 511: 6(int) Load 510 + Store 509(coordTemp) 511 + 513: 87 Load 89(g_tTex1di4) + 514: 6(int) Load 509(coordTemp) + 515: 7(ivec4) ImageRead 513 514 + Store 512(storeTempPre) 515 + 517: 7(ivec4) Load 512(storeTempPre) + Store 516(storeTempPost) 517 + 518: 7(ivec4) Load 516(storeTempPost) + 519: 7(ivec4) CompositeConstruct 107 107 107 107 + 520: 7(ivec4) IAdd 518 519 + Store 516(storeTempPost) 520 + 521: 87 Load 89(g_tTex1di4) + 522: 6(int) Load 509(coordTemp) + 523: 7(ivec4) Load 516(storeTempPost) + ImageWrite 521 522 523 + 525: 77(ptr) AccessChain 65 55 + 526: 6(int) Load 525 + Store 524(coordTemp) 526 + 528: 73 Load 75(g_tTex1df4) + 529: 6(int) Load 524(coordTemp) + 530: 21(fvec4) ImageRead 528 529 + Store 527(storeTempPre) 530 + 532: 21(fvec4) Load 527(storeTempPre) + Store 531(storeTempPost) 532 + 533: 21(fvec4) Load 531(storeTempPost) + 534: 21(fvec4) CompositeConstruct 408 408 408 408 + 535: 21(fvec4) FSub 533 534 + Store 531(storeTempPost) 535 + 536: 73 Load 75(g_tTex1df4) + 537: 6(int) Load 524(coordTemp) + 538: 21(fvec4) Load 531(storeTempPost) + ImageWrite 536 537 538 + 540: 77(ptr) AccessChain 65 55 + 541: 6(int) Load 540 + Store 539(coordTemp) 541 + 543: 87 Load 89(g_tTex1di4) + 544: 6(int) Load 539(coordTemp) + 545: 7(ivec4) ImageRead 543 544 + Store 542(storeTempPre) 545 + 547: 7(ivec4) Load 542(storeTempPre) + Store 546(storeTempPost) 547 + 548: 7(ivec4) Load 546(storeTempPost) + 549: 7(ivec4) CompositeConstruct 107 107 107 107 + 550: 7(ivec4) IAdd 548 549 + Store 546(storeTempPost) 550 + 551: 87 Load 89(g_tTex1di4) + 552: 6(int) Load 539(coordTemp) + 553: 7(ivec4) Load 546(storeTempPost) + ImageWrite 551 552 553 + 555: 77(ptr) AccessChain 65 55 + 556: 6(int) Load 555 + Store 554(coordTemp) 556 + 558: 95 Load 97(g_tTex1du4) + 559: 6(int) Load 554(coordTemp) + 560: 14(ivec4) ImageRead 558 559 + Store 557(storeTempPre) 560 + 562: 14(ivec4) Load 557(storeTempPre) + Store 561(storeTempPost) 562 + 563: 14(ivec4) Load 561(storeTempPost) + 564: 7(ivec4) CompositeConstruct 107 107 107 107 + 565: 14(ivec4) ISub 563 564 + Store 561(storeTempPost) 565 + 566: 95 Load 97(g_tTex1du4) + 567: 6(int) Load 554(coordTemp) + 568: 14(ivec4) Load 561(storeTempPost) + ImageWrite 566 567 568 + 570: 103 Load 105(g_tTex2df4) + 572: 21(fvec4) ImageRead 570 571 + Store 569(storeTemp) 572 + 573: 73 Load 75(g_tTex1df4) + 574: 21(fvec4) Load 569(storeTemp) + ImageWrite 573 107 574 + 578: 22(ptr) AccessChain 576(psout) 55 + Store 578 577 + 579:42(PS_OUTPUT) Load 576(psout) + ReturnValue 579 + FunctionEnd 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 new file mode 100644 index 0000000..2e0c562 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.register.frag.out @@ -0,0 +1,171 @@ +hlsl.rw.register.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:11 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color}) +0:11 Function Parameters: +0:? Sequence +0:12 Sequence +0:12 move second child to first child ( temp float) +0:12 'r00' ( temp float) +0:12 imageLoad ( temp float) +0:12 'g_tTex1df1' (layout( binding=2 r32f) uniform image1D) +0:12 Constant: +0:12 0 (const int) +0:13 Sequence +0:13 move second child to first child ( temp uint) +0:13 'r01' ( temp uint) +0:13 imageLoad ( temp uint) +0:13 'g_tBuf1du1' (layout( binding=3 r32ui) uniform uimageBuffer) +0:13 Constant: +0:13 0 (const int) +0:16 move second child to first child ( temp 4-component vector of float) +0:16 Color: direct index for structure ( temp 4-component vector of float) +0:16 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:16 Constant: +0:16 0 (const int) +0:16 Constant: +0:16 1.000000 +0:16 1.000000 +0:16 1.000000 +0:16 1.000000 +0:17 Branch: Return with expression +0:17 'psout' ( temp structure{ temp 4-component vector of float Color}) +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:? '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: +0:11 0 (const int) +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) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:11 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color}) +0:11 Function Parameters: +0:? Sequence +0:12 Sequence +0:12 move second child to first child ( temp float) +0:12 'r00' ( temp float) +0:12 imageLoad ( temp float) +0:12 'g_tTex1df1' (layout( binding=2 r32f) uniform image1D) +0:12 Constant: +0:12 0 (const int) +0:13 Sequence +0:13 move second child to first child ( temp uint) +0:13 'r01' ( temp uint) +0:13 imageLoad ( temp uint) +0:13 'g_tBuf1du1' (layout( binding=3 r32ui) uniform uimageBuffer) +0:13 Constant: +0:13 0 (const int) +0:16 move second child to first child ( temp 4-component vector of float) +0:16 Color: direct index for structure ( temp 4-component vector of float) +0:16 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:16 Constant: +0:16 0 (const int) +0:16 Constant: +0:16 1.000000 +0:16 1.000000 +0:16 1.000000 +0:16 1.000000 +0:17 Branch: Return with expression +0:17 'psout' ( temp structure{ temp 4-component vector of float Color}) +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:? '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: +0:11 0 (const int) +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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 42 + + Capability Shader + Capability Sampled1D + Capability SampledBuffer + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 39 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + Name 10 "@main(" + Name 13 "r00" + Name 16 "g_tTex1df1" + Name 23 "r01" + Name 26 "g_tBuf1du1" + Name 30 "psout" + Name 39 "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 + 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: TypePointer Function 6(float) + 14: TypeImage 6(float) 1D nonsampled format:R32f + 15: TypePointer UniformConstant 14 + 16(g_tTex1df1): 15(ptr) Variable UniformConstant + 18: TypeInt 32 1 + 19: 18(int) Constant 0 + 21: TypeInt 32 0 + 22: TypePointer Function 21(int) + 24: TypeImage 21(int) Buffer nonsampled format:R32ui + 25: TypePointer UniformConstant 24 + 26(g_tBuf1du1): 25(ptr) Variable UniformConstant + 29: TypePointer Function 8(PS_OUTPUT) + 31: 6(float) Constant 1065353216 + 32: 7(fvec4) ConstantComposite 31 31 31 31 + 33: TypePointer Function 7(fvec4) + 38: TypePointer Output 7(fvec4) + 39(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 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 13(r00): 12(ptr) Variable Function + 23(r01): 22(ptr) Variable Function + 30(psout): 29(ptr) Variable Function + 17: 14 Load 16(g_tTex1df1) + 20: 6(float) ImageRead 17 19 + Store 13(r00) 20 + 27: 24 Load 26(g_tBuf1du1) + 28: 21(int) ImageRead 27 19 + Store 23(r01) 28 + 34: 33(ptr) AccessChain 30(psout) 19 + Store 34 32 + 35:8(PS_OUTPUT) Load 30(psout) + ReturnValue 35 + FunctionEnd 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 new file mode 100644 index 0000000..991d524 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.scalar.bracket.frag.out @@ -0,0 +1,2573 @@ +hlsl.rw.scalar.bracket.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:42 Function Definition: Fn1(i1; ( temp int) +0:42 Function Parameters: +0:42 'x' ( in int) +0:? Sequence +0:42 Branch: Return with expression +0:42 'x' ( in int) +0:43 Function Definition: Fn1(u1; ( temp uint) +0:43 Function Parameters: +0:43 'x' ( in uint) +0:? Sequence +0:43 Branch: Return with expression +0:43 'x' ( in uint) +0:44 Function Definition: Fn1(f1; ( temp float) +0:44 Function Parameters: +0:44 'x' ( in float) +0:? Sequence +0:44 Branch: Return with expression +0:44 'x' ( in float) +0:46 Function Definition: Fn2(i1; ( temp void) +0:46 Function Parameters: +0:46 'x' ( out int) +0:? Sequence +0:46 move second child to first child ( temp int) +0:46 'x' ( out int) +0:46 Constant: +0:46 0 (const int) +0:47 Function Definition: Fn2(u1; ( temp void) +0:47 Function Parameters: +0:47 'x' ( out uint) +0:? Sequence +0:47 move second child to first child ( temp uint) +0:47 'x' ( out uint) +0:47 Constant: +0:47 0 (const uint) +0:48 Function Definition: Fn2(f1; ( temp void) +0:48 Function Parameters: +0:48 'x' ( out float) +0:? Sequence +0:48 move second child to first child ( temp float) +0:48 'x' ( out float) +0:48 Constant: +0:48 0.000000 +0:50 Function Definition: SomeValue( ( temp float) +0:50 Function Parameters: +0:? Sequence +0:50 Branch: Return with expression +0:50 Convert int to float ( temp float) +0:50 c1: direct index for structure ( uniform int) +0:50 '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:50 Constant: +0:50 0 (const uint) +0:53 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color}) +0:53 Function Parameters: +0:? Sequence +0:57 imageLoad ( temp float) +0:57 'g_tTex1df1' (layout( r32f) uniform image1D) +0:57 c1: direct index for structure ( uniform int) +0:57 '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:57 Constant: +0:57 0 (const uint) +0:59 Sequence +0:59 move second child to first child ( temp float) +0:59 'r00' ( temp float) +0:59 imageLoad ( temp float) +0:59 'g_tTex1df1' (layout( r32f) uniform image1D) +0:59 c1: direct index for structure ( uniform int) +0:59 '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:59 Constant: +0:59 0 (const uint) +0:60 Sequence +0:60 move second child to first child ( temp int) +0:60 'r01' ( temp int) +0:60 imageLoad ( temp int) +0:60 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:60 c1: direct index for structure ( uniform int) +0:60 '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:60 Constant: +0:60 0 (const uint) +0:61 Sequence +0:61 move second child to first child ( temp uint) +0:61 'r02' ( temp uint) +0:61 imageLoad ( temp uint) +0:61 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:61 c1: direct index for structure ( uniform int) +0:61 '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:61 Constant: +0:61 0 (const uint) +0:64 Sequence +0:64 move second child to first child ( temp float) +0:64 'r10' ( temp float) +0:64 imageLoad ( temp float) +0:64 'g_tTex2df1' (layout( r32f) uniform image2D) +0:64 c2: direct index for structure ( uniform 2-component vector of int) +0:64 '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:64 Constant: +0:64 1 (const uint) +0:65 Sequence +0:65 move second child to first child ( temp int) +0:65 'r11' ( temp int) +0:65 imageLoad ( temp int) +0:65 'g_tTex2di1' (layout( r32i) uniform iimage2D) +0:65 c2: direct index for structure ( uniform 2-component vector of int) +0:65 '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:65 Constant: +0:65 1 (const uint) +0:66 Sequence +0:66 move second child to first child ( temp uint) +0:66 'r12' ( temp uint) +0:66 imageLoad ( temp uint) +0:66 'g_tTex2du1' (layout( r32ui) uniform uimage2D) +0:66 c2: direct index for structure ( uniform 2-component vector of int) +0:66 '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:66 Constant: +0:66 1 (const uint) +0:69 Sequence +0:69 move second child to first child ( temp float) +0:69 'r20' ( temp float) +0:69 imageLoad ( temp float) +0:69 'g_tTex3df1' (layout( r32f) uniform image3D) +0:69 c3: direct index for structure ( uniform 3-component vector of int) +0:69 '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:69 Constant: +0:69 2 (const uint) +0:70 Sequence +0:70 move second child to first child ( temp int) +0:70 'r21' ( temp int) +0:70 imageLoad ( temp int) +0:70 'g_tTex3di1' (layout( r32i) uniform iimage3D) +0:70 c3: direct index for structure ( uniform 3-component vector of int) +0:70 '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:70 Constant: +0:70 2 (const uint) +0:71 Sequence +0:71 move second child to first child ( temp uint) +0:71 'r22' ( temp uint) +0:71 imageLoad ( temp uint) +0:71 'g_tTex3du1' (layout( r32ui) uniform uimage3D) +0:71 c3: direct index for structure ( uniform 3-component vector of int) +0:71 '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:71 Constant: +0:71 2 (const uint) +0:73 Sequence +0:73 move second child to first child ( temp float) +0:73 'lf1' ( temp float) +0:73 uf1: direct index for structure ( uniform float) +0:73 '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:73 Constant: +0:73 8 (const uint) +0:77 Sequence +0:77 move second child to first child ( temp float) +0:77 'storeTemp' ( temp float) +0:77 Function Call: SomeValue( ( temp float) +0:77 imageStore ( temp void) +0:77 'g_tTex1df1' (layout( r32f) uniform image1D) +0:77 c1: direct index for structure ( uniform int) +0:77 '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:77 Constant: +0:77 0 (const uint) +0:77 'storeTemp' ( temp float) +0:77 'storeTemp' ( temp float) +0:78 Sequence +0:78 imageStore ( temp void) +0:78 'g_tTex1df1' (layout( r32f) uniform image1D) +0:78 c1: direct index for structure ( uniform int) +0:78 '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:78 Constant: +0:78 0 (const uint) +0:78 'lf1' ( temp float) +0:78 'lf1' ( temp float) +0:79 Sequence +0:79 move second child to first child ( temp int) +0:79 'storeTemp' ( temp int) +0:79 Constant: +0:79 2 (const int) +0:79 imageStore ( temp void) +0:79 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:79 c1: direct index for structure ( uniform int) +0:79 '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:79 Constant: +0:79 0 (const uint) +0:79 'storeTemp' ( temp int) +0:79 'storeTemp' ( temp int) +0:80 Sequence +0:80 move second child to first child ( temp uint) +0:80 'storeTemp' ( temp uint) +0:80 Constant: +0:80 3 (const uint) +0:80 imageStore ( temp void) +0:80 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:80 c1: direct index for structure ( uniform int) +0:80 '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:80 Constant: +0:80 0 (const uint) +0:80 'storeTemp' ( temp uint) +0:80 'storeTemp' ( temp uint) +0:83 Sequence +0:83 move second child to first child ( temp float) +0:83 'val1' ( temp float) +0:83 Sequence +0:83 move second child to first child ( temp int) +0:83 'coordTemp' ( temp int) +0:83 c1: direct index for structure ( uniform int) +0:83 '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:83 Constant: +0:83 0 (const uint) +0:83 move second child to first child ( temp float) +0:83 'storeTemp' ( temp float) +0:83 imageLoad ( temp float) +0:83 'g_tTex1df1' (layout( r32f) uniform image1D) +0:83 'coordTemp' ( temp int) +0:83 multiply second child into first child ( temp float) +0:83 'storeTemp' ( temp float) +0:83 Constant: +0:83 2.000000 +0:83 imageStore ( temp void) +0:83 'g_tTex1df1' (layout( r32f) uniform image1D) +0:83 'coordTemp' ( temp int) +0:83 'storeTemp' ( temp float) +0:83 'storeTemp' ( temp float) +0:84 Sequence +0:84 move second child to first child ( temp int) +0:84 'coordTemp' ( temp int) +0:84 c1: direct index for structure ( uniform int) +0:84 '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:84 Constant: +0:84 0 (const uint) +0:84 move second child to first child ( temp float) +0:84 'storeTemp' ( temp float) +0:84 imageLoad ( temp float) +0:84 'g_tTex1df1' (layout( r32f) uniform image1D) +0:84 'coordTemp' ( temp int) +0:84 subtract second child into first child ( temp float) +0:84 'storeTemp' ( temp float) +0:84 Constant: +0:84 3.000000 +0:84 imageStore ( temp void) +0:84 'g_tTex1df1' (layout( r32f) uniform image1D) +0:84 'coordTemp' ( temp int) +0:84 'storeTemp' ( temp float) +0:84 'storeTemp' ( temp float) +0:85 Sequence +0:85 move second child to first child ( temp int) +0:85 'coordTemp' ( temp int) +0:85 c1: direct index for structure ( uniform int) +0:85 '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:85 Constant: +0:85 0 (const uint) +0:85 move second child to first child ( temp float) +0:85 'storeTemp' ( temp float) +0:85 imageLoad ( temp float) +0:85 'g_tTex1df1' (layout( r32f) uniform image1D) +0:85 'coordTemp' ( temp int) +0:85 add second child into first child ( temp float) +0:85 'storeTemp' ( temp float) +0:85 Constant: +0:85 4.000000 +0:85 imageStore ( temp void) +0:85 'g_tTex1df1' (layout( r32f) uniform image1D) +0:85 'coordTemp' ( temp int) +0:85 'storeTemp' ( temp float) +0:85 'storeTemp' ( temp float) +0:87 Sequence +0:87 move second child to first child ( temp int) +0:87 'coordTemp' ( temp int) +0:87 c1: direct index for structure ( uniform int) +0:87 '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:87 Constant: +0:87 0 (const uint) +0:87 move second child to first child ( temp int) +0:87 'storeTemp' ( temp int) +0:87 imageLoad ( temp int) +0:87 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:87 'coordTemp' ( temp int) +0:87 divide second child into first child ( temp int) +0:87 'storeTemp' ( temp int) +0:87 Constant: +0:87 2 (const int) +0:87 imageStore ( temp void) +0:87 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:87 'coordTemp' ( temp int) +0:87 'storeTemp' ( temp int) +0:87 'storeTemp' ( temp int) +0:88 Sequence +0:88 move second child to first child ( temp int) +0:88 'coordTemp' ( temp int) +0:88 c1: direct index for structure ( uniform int) +0:88 '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:88 Constant: +0:88 0 (const uint) +0:88 move second child to first child ( temp int) +0:88 'storeTemp' ( temp int) +0:88 imageLoad ( temp int) +0:88 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:88 'coordTemp' ( temp int) +0:88 mod second child into first child ( temp int) +0:88 'storeTemp' ( temp int) +0:88 Constant: +0:88 2 (const int) +0:88 imageStore ( temp void) +0:88 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:88 'coordTemp' ( temp int) +0:88 'storeTemp' ( temp int) +0:88 'storeTemp' ( temp int) +0:89 Sequence +0:89 move second child to first child ( temp int) +0:89 'coordTemp' ( temp int) +0:89 c1: direct index for structure ( uniform int) +0:89 '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:89 Constant: +0:89 0 (const uint) +0:89 move second child to first child ( temp int) +0:89 'storeTemp' ( temp int) +0:89 imageLoad ( temp int) +0:89 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:89 'coordTemp' ( temp int) +0:89 and second child into first child ( temp int) +0:89 'storeTemp' ( temp int) +0:89 Constant: +0:89 65535 (const int) +0:89 imageStore ( temp void) +0:89 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:89 'coordTemp' ( temp int) +0:89 'storeTemp' ( temp int) +0:89 'storeTemp' ( temp int) +0:90 Sequence +0:90 move second child to first child ( temp int) +0:90 'coordTemp' ( temp int) +0:90 c1: direct index for structure ( uniform int) +0:90 '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:90 Constant: +0:90 0 (const uint) +0:90 move second child to first child ( temp int) +0:90 'storeTemp' ( temp int) +0:90 imageLoad ( temp int) +0:90 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:90 'coordTemp' ( temp int) +0:90 or second child into first child ( temp int) +0:90 'storeTemp' ( temp int) +0:90 Constant: +0:90 61680 (const int) +0:90 imageStore ( temp void) +0:90 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:90 'coordTemp' ( temp int) +0:90 'storeTemp' ( temp int) +0:90 'storeTemp' ( temp int) +0:91 Sequence +0:91 move second child to first child ( temp int) +0:91 'coordTemp' ( temp int) +0:91 c1: direct index for structure ( uniform int) +0:91 '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:91 Constant: +0:91 0 (const uint) +0:91 move second child to first child ( temp int) +0:91 'storeTemp' ( temp int) +0:91 imageLoad ( temp int) +0:91 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:91 'coordTemp' ( temp int) +0:91 left shift second child into first child ( temp int) +0:91 'storeTemp' ( temp int) +0:91 Constant: +0:91 2 (const int) +0:91 imageStore ( temp void) +0:91 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:91 'coordTemp' ( temp int) +0:91 'storeTemp' ( temp int) +0:91 'storeTemp' ( temp int) +0:92 Sequence +0:92 move second child to first child ( temp int) +0:92 'coordTemp' ( temp int) +0:92 c1: direct index for structure ( uniform int) +0:92 '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:92 Constant: +0:92 0 (const uint) +0:92 move second child to first child ( temp int) +0:92 'storeTemp' ( temp int) +0:92 imageLoad ( temp int) +0:92 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:92 'coordTemp' ( temp int) +0:92 right shift second child into first child ( temp int) +0:92 'storeTemp' ( temp int) +0:92 Constant: +0:92 2 (const int) +0:92 imageStore ( temp void) +0:92 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:92 'coordTemp' ( temp int) +0:92 'storeTemp' ( temp int) +0:92 'storeTemp' ( temp int) +0:95 Sequence +0:95 move second child to first child ( temp float) +0:95 'storeTemp' ( temp float) +0:95 Function Call: SomeValue( ( temp float) +0:95 imageStore ( temp void) +0:95 'g_tTex2df1' (layout( r32f) uniform image2D) +0:95 c2: direct index for structure ( uniform 2-component vector of int) +0:95 '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:95 Constant: +0:95 1 (const uint) +0:95 'storeTemp' ( temp float) +0:95 'storeTemp' ( temp float) +0:96 Sequence +0:96 imageStore ( temp void) +0:96 'g_tTex2df1' (layout( r32f) uniform image2D) +0:96 c2: direct index for structure ( uniform 2-component vector of int) +0:96 '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:96 Constant: +0:96 1 (const uint) +0:96 'lf1' ( temp float) +0:96 'lf1' ( temp float) +0:97 Sequence +0:97 move second child to first child ( temp int) +0:97 'storeTemp' ( temp int) +0:97 Constant: +0:97 5 (const int) +0:97 imageStore ( temp void) +0:97 'g_tTex2di1' (layout( r32i) uniform iimage2D) +0:97 c2: direct index for structure ( uniform 2-component vector of int) +0:97 '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:97 Constant: +0:97 1 (const uint) +0:97 'storeTemp' ( temp int) +0:97 'storeTemp' ( temp int) +0:98 Sequence +0:98 move second child to first child ( temp uint) +0:98 'storeTemp' ( temp uint) +0:98 Constant: +0:98 6 (const uint) +0:98 imageStore ( temp void) +0:98 'g_tTex2du1' (layout( r32ui) uniform uimage2D) +0:98 c2: direct index for structure ( uniform 2-component vector of int) +0:98 '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:98 Constant: +0:98 1 (const uint) +0:98 'storeTemp' ( temp uint) +0:98 'storeTemp' ( temp uint) +0:101 Sequence +0:101 move second child to first child ( temp float) +0:101 'storeTemp' ( temp float) +0:101 Function Call: SomeValue( ( temp float) +0:101 imageStore ( temp void) +0:101 'g_tTex3df1' (layout( r32f) uniform image3D) +0:101 c3: direct index for structure ( uniform 3-component vector of int) +0:101 '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:101 Constant: +0:101 2 (const uint) +0:101 'storeTemp' ( temp float) +0:101 'storeTemp' ( temp float) +0:102 Sequence +0:102 imageStore ( temp void) +0:102 'g_tTex3df1' (layout( r32f) uniform image3D) +0:102 c3: direct index for structure ( uniform 3-component vector of int) +0:102 '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:102 Constant: +0:102 2 (const uint) +0:102 'lf1' ( temp float) +0:102 'lf1' ( temp float) +0:103 Sequence +0:103 move second child to first child ( temp int) +0:103 'storeTemp' ( temp int) +0:103 Constant: +0:103 8 (const int) +0:103 imageStore ( temp void) +0:103 'g_tTex3di1' (layout( r32i) uniform iimage3D) +0:103 c3: direct index for structure ( uniform 3-component vector of int) +0:103 '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:103 Constant: +0:103 2 (const uint) +0:103 'storeTemp' ( temp int) +0:103 'storeTemp' ( temp int) +0:104 Sequence +0:104 move second child to first child ( temp uint) +0:104 'storeTemp' ( temp uint) +0:104 Constant: +0:104 9 (const uint) +0:104 imageStore ( temp void) +0:104 'g_tTex3du1' (layout( r32ui) uniform uimage3D) +0:104 c3: direct index for structure ( uniform 3-component vector of int) +0:104 '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:104 Constant: +0:104 2 (const uint) +0:104 'storeTemp' ( temp uint) +0:104 'storeTemp' ( temp uint) +0:107 Function Call: Fn1(f1; ( temp float) +0:107 imageLoad ( temp float) +0:107 'g_tTex1df1' (layout( r32f) uniform image1D) +0:107 c1: direct index for structure ( uniform int) +0:107 '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:107 Constant: +0:107 0 (const uint) +0:108 Function Call: Fn1(i1; ( temp int) +0:108 imageLoad ( temp int) +0:108 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:108 c1: direct index for structure ( uniform int) +0:108 '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:108 Constant: +0:108 0 (const uint) +0:109 Function Call: Fn1(u1; ( temp uint) +0:109 imageLoad ( temp uint) +0:109 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:109 c1: direct index for structure ( uniform int) +0:109 '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:109 Constant: +0:109 0 (const uint) +0:111 Comma ( temp void) +0:111 Function Call: Fn2(f1; ( temp void) +0:111 'tempArg' ( temp float) +0:111 Sequence +0:111 imageStore ( temp void) +0:111 'g_tTex1df1' (layout( r32f) uniform image1D) +0:111 c1: direct index for structure ( uniform int) +0:111 '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:111 Constant: +0:111 0 (const uint) +0:111 'tempArg' ( temp float) +0:111 'tempArg' ( temp float) +0:112 Comma ( temp void) +0:112 Function Call: Fn2(i1; ( temp void) +0:112 'tempArg' ( temp int) +0:112 Sequence +0:112 imageStore ( temp void) +0:112 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:112 c1: direct index for structure ( uniform int) +0:112 '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:112 Constant: +0:112 0 (const uint) +0:112 'tempArg' ( temp int) +0:112 'tempArg' ( temp int) +0:113 Comma ( temp void) +0:113 Function Call: Fn2(u1; ( temp void) +0:113 'tempArg' ( temp uint) +0:113 Sequence +0:113 imageStore ( temp void) +0:113 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:113 c1: direct index for structure ( uniform int) +0:113 '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:113 Constant: +0:113 0 (const uint) +0:113 'tempArg' ( temp uint) +0:113 'tempArg' ( temp uint) +0:117 Sequence +0:117 move second child to first child ( temp int) +0:117 'coordTemp' ( temp int) +0:117 c1: direct index for structure ( uniform int) +0:117 '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:117 Constant: +0:117 0 (const uint) +0:117 move second child to first child ( temp float) +0:117 'storeTemp' ( temp float) +0:117 imageLoad ( temp float) +0:117 'g_tTex1df1' (layout( r32f) uniform image1D) +0:117 'coordTemp' ( temp int) +0:117 Pre-Increment ( temp float) +0:117 'storeTemp' ( temp float) +0:117 imageStore ( temp void) +0:117 'g_tTex1df1' (layout( r32f) uniform image1D) +0:117 'coordTemp' ( temp int) +0:117 'storeTemp' ( temp float) +0:117 'storeTemp' ( temp float) +0:118 Sequence +0:118 move second child to first child ( temp int) +0:118 'coordTemp' ( temp int) +0:118 c1: direct index for structure ( uniform int) +0:118 '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:118 Constant: +0:118 0 (const uint) +0:118 move second child to first child ( temp int) +0:118 'storeTemp' ( temp int) +0:118 imageLoad ( temp int) +0:118 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:118 'coordTemp' ( temp int) +0:118 Pre-Increment ( temp int) +0:118 'storeTemp' ( temp int) +0:118 imageStore ( temp void) +0:118 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:118 'coordTemp' ( temp int) +0:118 'storeTemp' ( temp int) +0:118 'storeTemp' ( temp int) +0:119 Sequence +0:119 move second child to first child ( temp int) +0:119 'coordTemp' ( temp int) +0:119 c1: direct index for structure ( uniform int) +0:119 '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:119 Constant: +0:119 0 (const uint) +0:119 move second child to first child ( temp uint) +0:119 'storeTemp' ( temp uint) +0:119 imageLoad ( temp uint) +0:119 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:119 'coordTemp' ( temp int) +0:119 Pre-Increment ( temp uint) +0:119 'storeTemp' ( temp uint) +0:119 imageStore ( temp void) +0:119 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:119 'coordTemp' ( temp int) +0:119 'storeTemp' ( temp uint) +0:119 'storeTemp' ( temp uint) +0:121 Sequence +0:121 move second child to first child ( temp int) +0:121 'coordTemp' ( temp int) +0:121 c1: direct index for structure ( uniform int) +0:121 '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:121 Constant: +0:121 0 (const uint) +0:121 move second child to first child ( temp float) +0:121 'storeTemp' ( temp float) +0:121 imageLoad ( temp float) +0:121 'g_tTex1df1' (layout( r32f) uniform image1D) +0:121 'coordTemp' ( temp int) +0:121 Pre-Decrement ( temp float) +0:121 'storeTemp' ( temp float) +0:121 imageStore ( temp void) +0:121 'g_tTex1df1' (layout( r32f) uniform image1D) +0:121 'coordTemp' ( temp int) +0:121 'storeTemp' ( temp float) +0:121 'storeTemp' ( temp float) +0:122 Sequence +0:122 move second child to first child ( temp int) +0:122 'coordTemp' ( temp int) +0:122 c1: direct index for structure ( uniform int) +0:122 '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:122 Constant: +0:122 0 (const uint) +0:122 move second child to first child ( temp int) +0:122 'storeTemp' ( temp int) +0:122 imageLoad ( temp int) +0:122 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:122 'coordTemp' ( temp int) +0:122 Pre-Decrement ( temp int) +0:122 'storeTemp' ( temp int) +0:122 imageStore ( temp void) +0:122 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:122 'coordTemp' ( temp int) +0:122 'storeTemp' ( temp int) +0:122 'storeTemp' ( temp int) +0:123 Sequence +0:123 move second child to first child ( temp int) +0:123 'coordTemp' ( temp int) +0:123 c1: direct index for structure ( uniform int) +0:123 '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:123 Constant: +0:123 0 (const uint) +0:123 move second child to first child ( temp uint) +0:123 'storeTemp' ( temp uint) +0:123 imageLoad ( temp uint) +0:123 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:123 'coordTemp' ( temp int) +0:123 Pre-Decrement ( temp uint) +0:123 'storeTemp' ( temp uint) +0:123 imageStore ( temp void) +0:123 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:123 'coordTemp' ( temp int) +0:123 'storeTemp' ( temp uint) +0:123 'storeTemp' ( temp uint) +0:126 Sequence +0:126 move second child to first child ( temp int) +0:126 'coordTemp' ( temp int) +0:126 c1: direct index for structure ( uniform int) +0:126 '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:126 Constant: +0:126 0 (const uint) +0:126 move second child to first child ( temp float) +0:126 'storeTempPre' ( temp float) +0:126 imageLoad ( temp float) +0:126 'g_tTex1df1' (layout( r32f) uniform image1D) +0:126 'coordTemp' ( temp int) +0:126 move second child to first child ( temp float) +0:126 'storeTempPost' ( temp float) +0:126 'storeTempPre' ( temp float) +0:126 Post-Increment ( temp float) +0:126 'storeTempPost' ( temp float) +0:126 imageStore ( temp void) +0:126 'g_tTex1df1' (layout( r32f) uniform image1D) +0:126 'coordTemp' ( temp int) +0:126 'storeTempPost' ( temp float) +0:126 'storeTempPre' ( temp float) +0:127 Sequence +0:127 move second child to first child ( temp int) +0:127 'coordTemp' ( temp int) +0:127 c1: direct index for structure ( uniform int) +0:127 '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:127 Constant: +0:127 0 (const uint) +0:127 move second child to first child ( temp uint) +0:127 'storeTempPre' ( temp uint) +0:127 imageLoad ( temp uint) +0:127 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:127 'coordTemp' ( temp int) +0:127 move second child to first child ( temp uint) +0:127 'storeTempPost' ( temp uint) +0:127 'storeTempPre' ( temp uint) +0:127 Post-Decrement ( temp uint) +0:127 'storeTempPost' ( temp uint) +0:127 imageStore ( temp void) +0:127 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:127 'coordTemp' ( temp int) +0:127 'storeTempPost' ( temp uint) +0:127 'storeTempPre' ( temp uint) +0:128 Sequence +0:128 move second child to first child ( temp int) +0:128 'coordTemp' ( temp int) +0:128 c1: direct index for structure ( uniform int) +0:128 '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:128 Constant: +0:128 0 (const uint) +0:128 move second child to first child ( temp int) +0:128 'storeTempPre' ( temp int) +0:128 imageLoad ( temp int) +0:128 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:128 'coordTemp' ( temp int) +0:128 move second child to first child ( temp int) +0:128 'storeTempPost' ( temp int) +0:128 'storeTempPre' ( temp int) +0:128 Post-Increment ( temp int) +0:128 'storeTempPost' ( temp int) +0:128 imageStore ( temp void) +0:128 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:128 'coordTemp' ( temp int) +0:128 'storeTempPost' ( temp int) +0:128 'storeTempPre' ( temp int) +0:130 Sequence +0:130 move second child to first child ( temp int) +0:130 'coordTemp' ( temp int) +0:130 c1: direct index for structure ( uniform int) +0:130 '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:130 Constant: +0:130 0 (const uint) +0:130 move second child to first child ( temp float) +0:130 'storeTempPre' ( temp float) +0:130 imageLoad ( temp float) +0:130 'g_tTex1df1' (layout( r32f) uniform image1D) +0:130 'coordTemp' ( temp int) +0:130 move second child to first child ( temp float) +0:130 'storeTempPost' ( temp float) +0:130 'storeTempPre' ( temp float) +0:130 Post-Decrement ( temp float) +0:130 'storeTempPost' ( temp float) +0:130 imageStore ( temp void) +0:130 'g_tTex1df1' (layout( r32f) uniform image1D) +0:130 'coordTemp' ( temp int) +0:130 'storeTempPost' ( temp float) +0:130 'storeTempPre' ( temp float) +0:131 Sequence +0:131 move second child to first child ( temp int) +0:131 'coordTemp' ( temp int) +0:131 c1: direct index for structure ( uniform int) +0:131 '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:131 Constant: +0:131 0 (const uint) +0:131 move second child to first child ( temp int) +0:131 'storeTempPre' ( temp int) +0:131 imageLoad ( temp int) +0:131 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:131 'coordTemp' ( temp int) +0:131 move second child to first child ( temp int) +0:131 'storeTempPost' ( temp int) +0:131 'storeTempPre' ( temp int) +0:131 Post-Increment ( temp int) +0:131 'storeTempPost' ( temp int) +0:131 imageStore ( temp void) +0:131 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:131 'coordTemp' ( temp int) +0:131 'storeTempPost' ( temp int) +0:131 'storeTempPre' ( temp int) +0:132 Sequence +0:132 move second child to first child ( temp int) +0:132 'coordTemp' ( temp int) +0:132 c1: direct index for structure ( uniform int) +0:132 '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:132 Constant: +0:132 0 (const uint) +0:132 move second child to first child ( temp uint) +0:132 'storeTempPre' ( temp uint) +0:132 imageLoad ( temp uint) +0:132 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:132 'coordTemp' ( temp int) +0:132 move second child to first child ( temp uint) +0:132 'storeTempPost' ( temp uint) +0:132 'storeTempPre' ( temp uint) +0:132 Post-Decrement ( temp uint) +0:132 'storeTempPost' ( temp uint) +0:132 imageStore ( temp void) +0:132 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:132 'coordTemp' ( temp int) +0:132 'storeTempPost' ( temp uint) +0:132 'storeTempPre' ( temp uint) +0:135 Sequence +0:135 move second child to first child ( temp float) +0:135 'storeTemp' ( temp float) +0:? imageLoad ( temp float) +0:135 'g_tTex2df1' (layout( r32f) uniform image2D) +0:? Constant: +0:? 2 (const int) +0:? 3 (const int) +0:135 imageStore ( temp void) +0:135 'g_tTex1df1' (layout( r32f) uniform image1D) +0:135 Constant: +0:135 1 (const int) +0:135 'storeTemp' ( temp float) +0:135 'storeTemp' ( temp float) +0:137 move second child to first child ( temp 4-component vector of float) +0:137 Color: direct index for structure ( temp 4-component vector of float) +0:137 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:137 Constant: +0:137 0 (const int) +0:137 Constant: +0:137 1.000000 +0:137 1.000000 +0:137 1.000000 +0:137 1.000000 +0:139 Branch: Return with expression +0:139 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:53 Function Definition: main( ( temp void) +0:53 Function Parameters: +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: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: +0:53 0 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df1' (layout( r32f) uniform image1D) +0:? 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:? 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:? 'g_tTex2df1' (layout( r32f) uniform image2D) +0:? 'g_tTex2di1' (layout( r32i) uniform iimage2D) +0:? 'g_tTex2du1' (layout( r32ui) uniform uimage2D) +0:? 'g_tTex3df1' (layout( r32f) uniform image3D) +0:? 'g_tTex3di1' (layout( r32i) uniform iimage3D) +0:? 'g_tTex3du1' (layout( r32ui) uniform uimage3D) +0:? 'g_tTex1df1a' (layout( r32f) uniform image1DArray) +0:? 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:? 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:? 'g_tTex2df1a' (layout( r32f) uniform image2DArray) +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) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:42 Function Definition: Fn1(i1; ( temp int) +0:42 Function Parameters: +0:42 'x' ( in int) +0:? Sequence +0:42 Branch: Return with expression +0:42 'x' ( in int) +0:43 Function Definition: Fn1(u1; ( temp uint) +0:43 Function Parameters: +0:43 'x' ( in uint) +0:? Sequence +0:43 Branch: Return with expression +0:43 'x' ( in uint) +0:44 Function Definition: Fn1(f1; ( temp float) +0:44 Function Parameters: +0:44 'x' ( in float) +0:? Sequence +0:44 Branch: Return with expression +0:44 'x' ( in float) +0:46 Function Definition: Fn2(i1; ( temp void) +0:46 Function Parameters: +0:46 'x' ( out int) +0:? Sequence +0:46 move second child to first child ( temp int) +0:46 'x' ( out int) +0:46 Constant: +0:46 0 (const int) +0:47 Function Definition: Fn2(u1; ( temp void) +0:47 Function Parameters: +0:47 'x' ( out uint) +0:? Sequence +0:47 move second child to first child ( temp uint) +0:47 'x' ( out uint) +0:47 Constant: +0:47 0 (const uint) +0:48 Function Definition: Fn2(f1; ( temp void) +0:48 Function Parameters: +0:48 'x' ( out float) +0:? Sequence +0:48 move second child to first child ( temp float) +0:48 'x' ( out float) +0:48 Constant: +0:48 0.000000 +0:50 Function Definition: SomeValue( ( temp float) +0:50 Function Parameters: +0:? Sequence +0:50 Branch: Return with expression +0:50 Convert int to float ( temp float) +0:50 c1: direct index for structure ( uniform int) +0:50 '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:50 Constant: +0:50 0 (const uint) +0:53 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color}) +0:53 Function Parameters: +0:? Sequence +0:57 imageLoad ( temp float) +0:57 'g_tTex1df1' (layout( r32f) uniform image1D) +0:57 c1: direct index for structure ( uniform int) +0:57 '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:57 Constant: +0:57 0 (const uint) +0:59 Sequence +0:59 move second child to first child ( temp float) +0:59 'r00' ( temp float) +0:59 imageLoad ( temp float) +0:59 'g_tTex1df1' (layout( r32f) uniform image1D) +0:59 c1: direct index for structure ( uniform int) +0:59 '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:59 Constant: +0:59 0 (const uint) +0:60 Sequence +0:60 move second child to first child ( temp int) +0:60 'r01' ( temp int) +0:60 imageLoad ( temp int) +0:60 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:60 c1: direct index for structure ( uniform int) +0:60 '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:60 Constant: +0:60 0 (const uint) +0:61 Sequence +0:61 move second child to first child ( temp uint) +0:61 'r02' ( temp uint) +0:61 imageLoad ( temp uint) +0:61 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:61 c1: direct index for structure ( uniform int) +0:61 '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:61 Constant: +0:61 0 (const uint) +0:64 Sequence +0:64 move second child to first child ( temp float) +0:64 'r10' ( temp float) +0:64 imageLoad ( temp float) +0:64 'g_tTex2df1' (layout( r32f) uniform image2D) +0:64 c2: direct index for structure ( uniform 2-component vector of int) +0:64 '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:64 Constant: +0:64 1 (const uint) +0:65 Sequence +0:65 move second child to first child ( temp int) +0:65 'r11' ( temp int) +0:65 imageLoad ( temp int) +0:65 'g_tTex2di1' (layout( r32i) uniform iimage2D) +0:65 c2: direct index for structure ( uniform 2-component vector of int) +0:65 '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:65 Constant: +0:65 1 (const uint) +0:66 Sequence +0:66 move second child to first child ( temp uint) +0:66 'r12' ( temp uint) +0:66 imageLoad ( temp uint) +0:66 'g_tTex2du1' (layout( r32ui) uniform uimage2D) +0:66 c2: direct index for structure ( uniform 2-component vector of int) +0:66 '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:66 Constant: +0:66 1 (const uint) +0:69 Sequence +0:69 move second child to first child ( temp float) +0:69 'r20' ( temp float) +0:69 imageLoad ( temp float) +0:69 'g_tTex3df1' (layout( r32f) uniform image3D) +0:69 c3: direct index for structure ( uniform 3-component vector of int) +0:69 '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:69 Constant: +0:69 2 (const uint) +0:70 Sequence +0:70 move second child to first child ( temp int) +0:70 'r21' ( temp int) +0:70 imageLoad ( temp int) +0:70 'g_tTex3di1' (layout( r32i) uniform iimage3D) +0:70 c3: direct index for structure ( uniform 3-component vector of int) +0:70 '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:70 Constant: +0:70 2 (const uint) +0:71 Sequence +0:71 move second child to first child ( temp uint) +0:71 'r22' ( temp uint) +0:71 imageLoad ( temp uint) +0:71 'g_tTex3du1' (layout( r32ui) uniform uimage3D) +0:71 c3: direct index for structure ( uniform 3-component vector of int) +0:71 '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:71 Constant: +0:71 2 (const uint) +0:73 Sequence +0:73 move second child to first child ( temp float) +0:73 'lf1' ( temp float) +0:73 uf1: direct index for structure ( uniform float) +0:73 '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:73 Constant: +0:73 8 (const uint) +0:77 Sequence +0:77 move second child to first child ( temp float) +0:77 'storeTemp' ( temp float) +0:77 Function Call: SomeValue( ( temp float) +0:77 imageStore ( temp void) +0:77 'g_tTex1df1' (layout( r32f) uniform image1D) +0:77 c1: direct index for structure ( uniform int) +0:77 '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:77 Constant: +0:77 0 (const uint) +0:77 'storeTemp' ( temp float) +0:77 'storeTemp' ( temp float) +0:78 Sequence +0:78 imageStore ( temp void) +0:78 'g_tTex1df1' (layout( r32f) uniform image1D) +0:78 c1: direct index for structure ( uniform int) +0:78 '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:78 Constant: +0:78 0 (const uint) +0:78 'lf1' ( temp float) +0:78 'lf1' ( temp float) +0:79 Sequence +0:79 move second child to first child ( temp int) +0:79 'storeTemp' ( temp int) +0:79 Constant: +0:79 2 (const int) +0:79 imageStore ( temp void) +0:79 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:79 c1: direct index for structure ( uniform int) +0:79 '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:79 Constant: +0:79 0 (const uint) +0:79 'storeTemp' ( temp int) +0:79 'storeTemp' ( temp int) +0:80 Sequence +0:80 move second child to first child ( temp uint) +0:80 'storeTemp' ( temp uint) +0:80 Constant: +0:80 3 (const uint) +0:80 imageStore ( temp void) +0:80 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:80 c1: direct index for structure ( uniform int) +0:80 '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:80 Constant: +0:80 0 (const uint) +0:80 'storeTemp' ( temp uint) +0:80 'storeTemp' ( temp uint) +0:83 Sequence +0:83 move second child to first child ( temp float) +0:83 'val1' ( temp float) +0:83 Sequence +0:83 move second child to first child ( temp int) +0:83 'coordTemp' ( temp int) +0:83 c1: direct index for structure ( uniform int) +0:83 '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:83 Constant: +0:83 0 (const uint) +0:83 move second child to first child ( temp float) +0:83 'storeTemp' ( temp float) +0:83 imageLoad ( temp float) +0:83 'g_tTex1df1' (layout( r32f) uniform image1D) +0:83 'coordTemp' ( temp int) +0:83 multiply second child into first child ( temp float) +0:83 'storeTemp' ( temp float) +0:83 Constant: +0:83 2.000000 +0:83 imageStore ( temp void) +0:83 'g_tTex1df1' (layout( r32f) uniform image1D) +0:83 'coordTemp' ( temp int) +0:83 'storeTemp' ( temp float) +0:83 'storeTemp' ( temp float) +0:84 Sequence +0:84 move second child to first child ( temp int) +0:84 'coordTemp' ( temp int) +0:84 c1: direct index for structure ( uniform int) +0:84 '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:84 Constant: +0:84 0 (const uint) +0:84 move second child to first child ( temp float) +0:84 'storeTemp' ( temp float) +0:84 imageLoad ( temp float) +0:84 'g_tTex1df1' (layout( r32f) uniform image1D) +0:84 'coordTemp' ( temp int) +0:84 subtract second child into first child ( temp float) +0:84 'storeTemp' ( temp float) +0:84 Constant: +0:84 3.000000 +0:84 imageStore ( temp void) +0:84 'g_tTex1df1' (layout( r32f) uniform image1D) +0:84 'coordTemp' ( temp int) +0:84 'storeTemp' ( temp float) +0:84 'storeTemp' ( temp float) +0:85 Sequence +0:85 move second child to first child ( temp int) +0:85 'coordTemp' ( temp int) +0:85 c1: direct index for structure ( uniform int) +0:85 '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:85 Constant: +0:85 0 (const uint) +0:85 move second child to first child ( temp float) +0:85 'storeTemp' ( temp float) +0:85 imageLoad ( temp float) +0:85 'g_tTex1df1' (layout( r32f) uniform image1D) +0:85 'coordTemp' ( temp int) +0:85 add second child into first child ( temp float) +0:85 'storeTemp' ( temp float) +0:85 Constant: +0:85 4.000000 +0:85 imageStore ( temp void) +0:85 'g_tTex1df1' (layout( r32f) uniform image1D) +0:85 'coordTemp' ( temp int) +0:85 'storeTemp' ( temp float) +0:85 'storeTemp' ( temp float) +0:87 Sequence +0:87 move second child to first child ( temp int) +0:87 'coordTemp' ( temp int) +0:87 c1: direct index for structure ( uniform int) +0:87 '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:87 Constant: +0:87 0 (const uint) +0:87 move second child to first child ( temp int) +0:87 'storeTemp' ( temp int) +0:87 imageLoad ( temp int) +0:87 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:87 'coordTemp' ( temp int) +0:87 divide second child into first child ( temp int) +0:87 'storeTemp' ( temp int) +0:87 Constant: +0:87 2 (const int) +0:87 imageStore ( temp void) +0:87 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:87 'coordTemp' ( temp int) +0:87 'storeTemp' ( temp int) +0:87 'storeTemp' ( temp int) +0:88 Sequence +0:88 move second child to first child ( temp int) +0:88 'coordTemp' ( temp int) +0:88 c1: direct index for structure ( uniform int) +0:88 '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:88 Constant: +0:88 0 (const uint) +0:88 move second child to first child ( temp int) +0:88 'storeTemp' ( temp int) +0:88 imageLoad ( temp int) +0:88 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:88 'coordTemp' ( temp int) +0:88 mod second child into first child ( temp int) +0:88 'storeTemp' ( temp int) +0:88 Constant: +0:88 2 (const int) +0:88 imageStore ( temp void) +0:88 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:88 'coordTemp' ( temp int) +0:88 'storeTemp' ( temp int) +0:88 'storeTemp' ( temp int) +0:89 Sequence +0:89 move second child to first child ( temp int) +0:89 'coordTemp' ( temp int) +0:89 c1: direct index for structure ( uniform int) +0:89 '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:89 Constant: +0:89 0 (const uint) +0:89 move second child to first child ( temp int) +0:89 'storeTemp' ( temp int) +0:89 imageLoad ( temp int) +0:89 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:89 'coordTemp' ( temp int) +0:89 and second child into first child ( temp int) +0:89 'storeTemp' ( temp int) +0:89 Constant: +0:89 65535 (const int) +0:89 imageStore ( temp void) +0:89 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:89 'coordTemp' ( temp int) +0:89 'storeTemp' ( temp int) +0:89 'storeTemp' ( temp int) +0:90 Sequence +0:90 move second child to first child ( temp int) +0:90 'coordTemp' ( temp int) +0:90 c1: direct index for structure ( uniform int) +0:90 '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:90 Constant: +0:90 0 (const uint) +0:90 move second child to first child ( temp int) +0:90 'storeTemp' ( temp int) +0:90 imageLoad ( temp int) +0:90 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:90 'coordTemp' ( temp int) +0:90 or second child into first child ( temp int) +0:90 'storeTemp' ( temp int) +0:90 Constant: +0:90 61680 (const int) +0:90 imageStore ( temp void) +0:90 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:90 'coordTemp' ( temp int) +0:90 'storeTemp' ( temp int) +0:90 'storeTemp' ( temp int) +0:91 Sequence +0:91 move second child to first child ( temp int) +0:91 'coordTemp' ( temp int) +0:91 c1: direct index for structure ( uniform int) +0:91 '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:91 Constant: +0:91 0 (const uint) +0:91 move second child to first child ( temp int) +0:91 'storeTemp' ( temp int) +0:91 imageLoad ( temp int) +0:91 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:91 'coordTemp' ( temp int) +0:91 left shift second child into first child ( temp int) +0:91 'storeTemp' ( temp int) +0:91 Constant: +0:91 2 (const int) +0:91 imageStore ( temp void) +0:91 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:91 'coordTemp' ( temp int) +0:91 'storeTemp' ( temp int) +0:91 'storeTemp' ( temp int) +0:92 Sequence +0:92 move second child to first child ( temp int) +0:92 'coordTemp' ( temp int) +0:92 c1: direct index for structure ( uniform int) +0:92 '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:92 Constant: +0:92 0 (const uint) +0:92 move second child to first child ( temp int) +0:92 'storeTemp' ( temp int) +0:92 imageLoad ( temp int) +0:92 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:92 'coordTemp' ( temp int) +0:92 right shift second child into first child ( temp int) +0:92 'storeTemp' ( temp int) +0:92 Constant: +0:92 2 (const int) +0:92 imageStore ( temp void) +0:92 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:92 'coordTemp' ( temp int) +0:92 'storeTemp' ( temp int) +0:92 'storeTemp' ( temp int) +0:95 Sequence +0:95 move second child to first child ( temp float) +0:95 'storeTemp' ( temp float) +0:95 Function Call: SomeValue( ( temp float) +0:95 imageStore ( temp void) +0:95 'g_tTex2df1' (layout( r32f) uniform image2D) +0:95 c2: direct index for structure ( uniform 2-component vector of int) +0:95 '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:95 Constant: +0:95 1 (const uint) +0:95 'storeTemp' ( temp float) +0:95 'storeTemp' ( temp float) +0:96 Sequence +0:96 imageStore ( temp void) +0:96 'g_tTex2df1' (layout( r32f) uniform image2D) +0:96 c2: direct index for structure ( uniform 2-component vector of int) +0:96 '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:96 Constant: +0:96 1 (const uint) +0:96 'lf1' ( temp float) +0:96 'lf1' ( temp float) +0:97 Sequence +0:97 move second child to first child ( temp int) +0:97 'storeTemp' ( temp int) +0:97 Constant: +0:97 5 (const int) +0:97 imageStore ( temp void) +0:97 'g_tTex2di1' (layout( r32i) uniform iimage2D) +0:97 c2: direct index for structure ( uniform 2-component vector of int) +0:97 '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:97 Constant: +0:97 1 (const uint) +0:97 'storeTemp' ( temp int) +0:97 'storeTemp' ( temp int) +0:98 Sequence +0:98 move second child to first child ( temp uint) +0:98 'storeTemp' ( temp uint) +0:98 Constant: +0:98 6 (const uint) +0:98 imageStore ( temp void) +0:98 'g_tTex2du1' (layout( r32ui) uniform uimage2D) +0:98 c2: direct index for structure ( uniform 2-component vector of int) +0:98 '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:98 Constant: +0:98 1 (const uint) +0:98 'storeTemp' ( temp uint) +0:98 'storeTemp' ( temp uint) +0:101 Sequence +0:101 move second child to first child ( temp float) +0:101 'storeTemp' ( temp float) +0:101 Function Call: SomeValue( ( temp float) +0:101 imageStore ( temp void) +0:101 'g_tTex3df1' (layout( r32f) uniform image3D) +0:101 c3: direct index for structure ( uniform 3-component vector of int) +0:101 '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:101 Constant: +0:101 2 (const uint) +0:101 'storeTemp' ( temp float) +0:101 'storeTemp' ( temp float) +0:102 Sequence +0:102 imageStore ( temp void) +0:102 'g_tTex3df1' (layout( r32f) uniform image3D) +0:102 c3: direct index for structure ( uniform 3-component vector of int) +0:102 '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:102 Constant: +0:102 2 (const uint) +0:102 'lf1' ( temp float) +0:102 'lf1' ( temp float) +0:103 Sequence +0:103 move second child to first child ( temp int) +0:103 'storeTemp' ( temp int) +0:103 Constant: +0:103 8 (const int) +0:103 imageStore ( temp void) +0:103 'g_tTex3di1' (layout( r32i) uniform iimage3D) +0:103 c3: direct index for structure ( uniform 3-component vector of int) +0:103 '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:103 Constant: +0:103 2 (const uint) +0:103 'storeTemp' ( temp int) +0:103 'storeTemp' ( temp int) +0:104 Sequence +0:104 move second child to first child ( temp uint) +0:104 'storeTemp' ( temp uint) +0:104 Constant: +0:104 9 (const uint) +0:104 imageStore ( temp void) +0:104 'g_tTex3du1' (layout( r32ui) uniform uimage3D) +0:104 c3: direct index for structure ( uniform 3-component vector of int) +0:104 '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:104 Constant: +0:104 2 (const uint) +0:104 'storeTemp' ( temp uint) +0:104 'storeTemp' ( temp uint) +0:107 Function Call: Fn1(f1; ( temp float) +0:107 imageLoad ( temp float) +0:107 'g_tTex1df1' (layout( r32f) uniform image1D) +0:107 c1: direct index for structure ( uniform int) +0:107 '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:107 Constant: +0:107 0 (const uint) +0:108 Function Call: Fn1(i1; ( temp int) +0:108 imageLoad ( temp int) +0:108 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:108 c1: direct index for structure ( uniform int) +0:108 '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:108 Constant: +0:108 0 (const uint) +0:109 Function Call: Fn1(u1; ( temp uint) +0:109 imageLoad ( temp uint) +0:109 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:109 c1: direct index for structure ( uniform int) +0:109 '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:109 Constant: +0:109 0 (const uint) +0:111 Comma ( temp void) +0:111 Function Call: Fn2(f1; ( temp void) +0:111 'tempArg' ( temp float) +0:111 Sequence +0:111 imageStore ( temp void) +0:111 'g_tTex1df1' (layout( r32f) uniform image1D) +0:111 c1: direct index for structure ( uniform int) +0:111 '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:111 Constant: +0:111 0 (const uint) +0:111 'tempArg' ( temp float) +0:111 'tempArg' ( temp float) +0:112 Comma ( temp void) +0:112 Function Call: Fn2(i1; ( temp void) +0:112 'tempArg' ( temp int) +0:112 Sequence +0:112 imageStore ( temp void) +0:112 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:112 c1: direct index for structure ( uniform int) +0:112 '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:112 Constant: +0:112 0 (const uint) +0:112 'tempArg' ( temp int) +0:112 'tempArg' ( temp int) +0:113 Comma ( temp void) +0:113 Function Call: Fn2(u1; ( temp void) +0:113 'tempArg' ( temp uint) +0:113 Sequence +0:113 imageStore ( temp void) +0:113 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:113 c1: direct index for structure ( uniform int) +0:113 '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:113 Constant: +0:113 0 (const uint) +0:113 'tempArg' ( temp uint) +0:113 'tempArg' ( temp uint) +0:117 Sequence +0:117 move second child to first child ( temp int) +0:117 'coordTemp' ( temp int) +0:117 c1: direct index for structure ( uniform int) +0:117 '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:117 Constant: +0:117 0 (const uint) +0:117 move second child to first child ( temp float) +0:117 'storeTemp' ( temp float) +0:117 imageLoad ( temp float) +0:117 'g_tTex1df1' (layout( r32f) uniform image1D) +0:117 'coordTemp' ( temp int) +0:117 Pre-Increment ( temp float) +0:117 'storeTemp' ( temp float) +0:117 imageStore ( temp void) +0:117 'g_tTex1df1' (layout( r32f) uniform image1D) +0:117 'coordTemp' ( temp int) +0:117 'storeTemp' ( temp float) +0:117 'storeTemp' ( temp float) +0:118 Sequence +0:118 move second child to first child ( temp int) +0:118 'coordTemp' ( temp int) +0:118 c1: direct index for structure ( uniform int) +0:118 '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:118 Constant: +0:118 0 (const uint) +0:118 move second child to first child ( temp int) +0:118 'storeTemp' ( temp int) +0:118 imageLoad ( temp int) +0:118 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:118 'coordTemp' ( temp int) +0:118 Pre-Increment ( temp int) +0:118 'storeTemp' ( temp int) +0:118 imageStore ( temp void) +0:118 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:118 'coordTemp' ( temp int) +0:118 'storeTemp' ( temp int) +0:118 'storeTemp' ( temp int) +0:119 Sequence +0:119 move second child to first child ( temp int) +0:119 'coordTemp' ( temp int) +0:119 c1: direct index for structure ( uniform int) +0:119 '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:119 Constant: +0:119 0 (const uint) +0:119 move second child to first child ( temp uint) +0:119 'storeTemp' ( temp uint) +0:119 imageLoad ( temp uint) +0:119 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:119 'coordTemp' ( temp int) +0:119 Pre-Increment ( temp uint) +0:119 'storeTemp' ( temp uint) +0:119 imageStore ( temp void) +0:119 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:119 'coordTemp' ( temp int) +0:119 'storeTemp' ( temp uint) +0:119 'storeTemp' ( temp uint) +0:121 Sequence +0:121 move second child to first child ( temp int) +0:121 'coordTemp' ( temp int) +0:121 c1: direct index for structure ( uniform int) +0:121 '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:121 Constant: +0:121 0 (const uint) +0:121 move second child to first child ( temp float) +0:121 'storeTemp' ( temp float) +0:121 imageLoad ( temp float) +0:121 'g_tTex1df1' (layout( r32f) uniform image1D) +0:121 'coordTemp' ( temp int) +0:121 Pre-Decrement ( temp float) +0:121 'storeTemp' ( temp float) +0:121 imageStore ( temp void) +0:121 'g_tTex1df1' (layout( r32f) uniform image1D) +0:121 'coordTemp' ( temp int) +0:121 'storeTemp' ( temp float) +0:121 'storeTemp' ( temp float) +0:122 Sequence +0:122 move second child to first child ( temp int) +0:122 'coordTemp' ( temp int) +0:122 c1: direct index for structure ( uniform int) +0:122 '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:122 Constant: +0:122 0 (const uint) +0:122 move second child to first child ( temp int) +0:122 'storeTemp' ( temp int) +0:122 imageLoad ( temp int) +0:122 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:122 'coordTemp' ( temp int) +0:122 Pre-Decrement ( temp int) +0:122 'storeTemp' ( temp int) +0:122 imageStore ( temp void) +0:122 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:122 'coordTemp' ( temp int) +0:122 'storeTemp' ( temp int) +0:122 'storeTemp' ( temp int) +0:123 Sequence +0:123 move second child to first child ( temp int) +0:123 'coordTemp' ( temp int) +0:123 c1: direct index for structure ( uniform int) +0:123 '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:123 Constant: +0:123 0 (const uint) +0:123 move second child to first child ( temp uint) +0:123 'storeTemp' ( temp uint) +0:123 imageLoad ( temp uint) +0:123 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:123 'coordTemp' ( temp int) +0:123 Pre-Decrement ( temp uint) +0:123 'storeTemp' ( temp uint) +0:123 imageStore ( temp void) +0:123 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:123 'coordTemp' ( temp int) +0:123 'storeTemp' ( temp uint) +0:123 'storeTemp' ( temp uint) +0:126 Sequence +0:126 move second child to first child ( temp int) +0:126 'coordTemp' ( temp int) +0:126 c1: direct index for structure ( uniform int) +0:126 '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:126 Constant: +0:126 0 (const uint) +0:126 move second child to first child ( temp float) +0:126 'storeTempPre' ( temp float) +0:126 imageLoad ( temp float) +0:126 'g_tTex1df1' (layout( r32f) uniform image1D) +0:126 'coordTemp' ( temp int) +0:126 move second child to first child ( temp float) +0:126 'storeTempPost' ( temp float) +0:126 'storeTempPre' ( temp float) +0:126 Post-Increment ( temp float) +0:126 'storeTempPost' ( temp float) +0:126 imageStore ( temp void) +0:126 'g_tTex1df1' (layout( r32f) uniform image1D) +0:126 'coordTemp' ( temp int) +0:126 'storeTempPost' ( temp float) +0:126 'storeTempPre' ( temp float) +0:127 Sequence +0:127 move second child to first child ( temp int) +0:127 'coordTemp' ( temp int) +0:127 c1: direct index for structure ( uniform int) +0:127 '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:127 Constant: +0:127 0 (const uint) +0:127 move second child to first child ( temp uint) +0:127 'storeTempPre' ( temp uint) +0:127 imageLoad ( temp uint) +0:127 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:127 'coordTemp' ( temp int) +0:127 move second child to first child ( temp uint) +0:127 'storeTempPost' ( temp uint) +0:127 'storeTempPre' ( temp uint) +0:127 Post-Decrement ( temp uint) +0:127 'storeTempPost' ( temp uint) +0:127 imageStore ( temp void) +0:127 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:127 'coordTemp' ( temp int) +0:127 'storeTempPost' ( temp uint) +0:127 'storeTempPre' ( temp uint) +0:128 Sequence +0:128 move second child to first child ( temp int) +0:128 'coordTemp' ( temp int) +0:128 c1: direct index for structure ( uniform int) +0:128 '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:128 Constant: +0:128 0 (const uint) +0:128 move second child to first child ( temp int) +0:128 'storeTempPre' ( temp int) +0:128 imageLoad ( temp int) +0:128 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:128 'coordTemp' ( temp int) +0:128 move second child to first child ( temp int) +0:128 'storeTempPost' ( temp int) +0:128 'storeTempPre' ( temp int) +0:128 Post-Increment ( temp int) +0:128 'storeTempPost' ( temp int) +0:128 imageStore ( temp void) +0:128 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:128 'coordTemp' ( temp int) +0:128 'storeTempPost' ( temp int) +0:128 'storeTempPre' ( temp int) +0:130 Sequence +0:130 move second child to first child ( temp int) +0:130 'coordTemp' ( temp int) +0:130 c1: direct index for structure ( uniform int) +0:130 '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:130 Constant: +0:130 0 (const uint) +0:130 move second child to first child ( temp float) +0:130 'storeTempPre' ( temp float) +0:130 imageLoad ( temp float) +0:130 'g_tTex1df1' (layout( r32f) uniform image1D) +0:130 'coordTemp' ( temp int) +0:130 move second child to first child ( temp float) +0:130 'storeTempPost' ( temp float) +0:130 'storeTempPre' ( temp float) +0:130 Post-Decrement ( temp float) +0:130 'storeTempPost' ( temp float) +0:130 imageStore ( temp void) +0:130 'g_tTex1df1' (layout( r32f) uniform image1D) +0:130 'coordTemp' ( temp int) +0:130 'storeTempPost' ( temp float) +0:130 'storeTempPre' ( temp float) +0:131 Sequence +0:131 move second child to first child ( temp int) +0:131 'coordTemp' ( temp int) +0:131 c1: direct index for structure ( uniform int) +0:131 '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:131 Constant: +0:131 0 (const uint) +0:131 move second child to first child ( temp int) +0:131 'storeTempPre' ( temp int) +0:131 imageLoad ( temp int) +0:131 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:131 'coordTemp' ( temp int) +0:131 move second child to first child ( temp int) +0:131 'storeTempPost' ( temp int) +0:131 'storeTempPre' ( temp int) +0:131 Post-Increment ( temp int) +0:131 'storeTempPost' ( temp int) +0:131 imageStore ( temp void) +0:131 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:131 'coordTemp' ( temp int) +0:131 'storeTempPost' ( temp int) +0:131 'storeTempPre' ( temp int) +0:132 Sequence +0:132 move second child to first child ( temp int) +0:132 'coordTemp' ( temp int) +0:132 c1: direct index for structure ( uniform int) +0:132 '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:132 Constant: +0:132 0 (const uint) +0:132 move second child to first child ( temp uint) +0:132 'storeTempPre' ( temp uint) +0:132 imageLoad ( temp uint) +0:132 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:132 'coordTemp' ( temp int) +0:132 move second child to first child ( temp uint) +0:132 'storeTempPost' ( temp uint) +0:132 'storeTempPre' ( temp uint) +0:132 Post-Decrement ( temp uint) +0:132 'storeTempPost' ( temp uint) +0:132 imageStore ( temp void) +0:132 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:132 'coordTemp' ( temp int) +0:132 'storeTempPost' ( temp uint) +0:132 'storeTempPre' ( temp uint) +0:135 Sequence +0:135 move second child to first child ( temp float) +0:135 'storeTemp' ( temp float) +0:? imageLoad ( temp float) +0:135 'g_tTex2df1' (layout( r32f) uniform image2D) +0:? Constant: +0:? 2 (const int) +0:? 3 (const int) +0:135 imageStore ( temp void) +0:135 'g_tTex1df1' (layout( r32f) uniform image1D) +0:135 Constant: +0:135 1 (const int) +0:135 'storeTemp' ( temp float) +0:135 'storeTemp' ( temp float) +0:137 move second child to first child ( temp 4-component vector of float) +0:137 Color: direct index for structure ( temp 4-component vector of float) +0:137 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:137 Constant: +0:137 0 (const int) +0:137 Constant: +0:137 1.000000 +0:137 1.000000 +0:137 1.000000 +0:137 1.000000 +0:139 Branch: Return with expression +0:139 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:53 Function Definition: main( ( temp void) +0:53 Function Parameters: +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: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: +0:53 0 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df1' (layout( r32f) uniform image1D) +0:? 'g_tTex1di1' (layout( r32i) uniform iimage1D) +0:? 'g_tTex1du1' (layout( r32ui) uniform uimage1D) +0:? 'g_tTex2df1' (layout( r32f) uniform image2D) +0:? 'g_tTex2di1' (layout( r32i) uniform iimage2D) +0:? 'g_tTex2du1' (layout( r32ui) uniform uimage2D) +0:? 'g_tTex3df1' (layout( r32f) uniform image3D) +0:? 'g_tTex3di1' (layout( r32i) uniform iimage3D) +0:? 'g_tTex3du1' (layout( r32ui) uniform uimage3D) +0:? 'g_tTex1df1a' (layout( r32f) uniform image1DArray) +0:? 'g_tTex1di1a' (layout( r32i) uniform iimage1DArray) +0:? 'g_tTex1du1a' (layout( r32ui) uniform uimage1DArray) +0:? 'g_tTex2df1a' (layout( r32f) uniform image2DArray) +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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 571 + + Capability Shader + Capability Sampled1D + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 547 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 10 "Fn1(i1;" + Name 9 "x" + Name 16 "Fn1(u1;" + Name 15 "x" + Name 22 "Fn1(f1;" + Name 21 "x" + Name 26 "Fn2(i1;" + Name 25 "x" + Name 30 "Fn2(u1;" + Name 29 "x" + Name 34 "Fn2(f1;" + Name 33 "x" + Name 37 "SomeValue(" + Name 40 "PS_OUTPUT" + MemberName 40(PS_OUTPUT) 0 "Color" + Name 42 "@main(" + Name 59 "$Global" + MemberName 59($Global) 0 "c1" + MemberName 59($Global) 1 "c2" + MemberName 59($Global) 2 "c3" + MemberName 59($Global) 3 "c4" + MemberName 59($Global) 4 "o1" + MemberName 59($Global) 5 "o2" + MemberName 59($Global) 6 "o3" + MemberName 59($Global) 7 "o4" + MemberName 59($Global) 8 "uf1" + MemberName 59($Global) 9 "ui1" + MemberName 59($Global) 10 "uu1" + Name 61 "" + Name 70 "g_tTex1df1" + Name 75 "r00" + Name 80 "r01" + Name 83 "g_tTex1di1" + Name 88 "r02" + Name 91 "g_tTex1du1" + Name 96 "r10" + Name 99 "g_tTex2df1" + Name 106 "r11" + Name 109 "g_tTex2di1" + Name 114 "r12" + Name 117 "g_tTex2du1" + Name 122 "r20" + Name 125 "g_tTex3df1" + Name 132 "r21" + Name 135 "g_tTex3di1" + Name 140 "r22" + Name 143 "g_tTex3du1" + Name 148 "lf1" + Name 153 "storeTemp" + Name 163 "storeTemp" + Name 168 "storeTemp" + Name 174 "val1" + Name 175 "coordTemp" + Name 178 "storeTemp" + Name 189 "coordTemp" + Name 192 "storeTemp" + Name 202 "coordTemp" + Name 205 "storeTemp" + Name 215 "coordTemp" + Name 218 "storeTemp" + Name 227 "coordTemp" + Name 230 "storeTemp" + Name 239 "coordTemp" + Name 242 "storeTemp" + Name 252 "coordTemp" + Name 255 "storeTemp" + Name 265 "coordTemp" + Name 268 "storeTemp" + Name 277 "coordTemp" + Name 280 "storeTemp" + Name 289 "storeTemp" + Name 299 "storeTemp" + Name 305 "storeTemp" + Name 311 "storeTemp" + Name 321 "storeTemp" + Name 326 "storeTemp" + Name 336 "param" + Name 342 "param" + Name 348 "param" + Name 350 "tempArg" + Name 351 "param" + Name 358 "tempArg" + Name 359 "param" + Name 366 "tempArg" + Name 367 "param" + Name 374 "coordTemp" + Name 377 "storeTemp" + Name 387 "coordTemp" + Name 390 "storeTemp" + Name 399 "coordTemp" + Name 402 "storeTemp" + Name 411 "coordTemp" + Name 414 "storeTemp" + Name 423 "coordTemp" + Name 426 "storeTemp" + Name 435 "coordTemp" + Name 438 "storeTemp" + Name 447 "coordTemp" + Name 450 "storeTempPre" + Name 454 "storeTempPost" + Name 461 "coordTemp" + Name 464 "storeTempPre" + Name 468 "storeTempPost" + Name 475 "coordTemp" + Name 478 "storeTempPre" + Name 482 "storeTempPost" + Name 489 "coordTemp" + Name 492 "storeTempPre" + Name 496 "storeTempPost" + Name 503 "coordTemp" + Name 506 "storeTempPre" + Name 510 "storeTempPost" + Name 517 "coordTemp" + Name 520 "storeTempPre" + Name 524 "storeTempPost" + Name 531 "storeTemp" + Name 539 "psout" + Name 547 "Color" + Name 552 "g_sSamp" + Name 555 "g_tTex1df1a" + Name 558 "g_tTex1di1a" + Name 561 "g_tTex1du1a" + Name 564 "g_tTex2df1a" + Name 567 "g_tTex2di1a" + Name 570 "g_tTex2du1a" + MemberDecorate 59($Global) 0 Offset 0 + MemberDecorate 59($Global) 1 Offset 8 + MemberDecorate 59($Global) 2 Offset 16 + MemberDecorate 59($Global) 3 Offset 32 + MemberDecorate 59($Global) 4 Offset 48 + MemberDecorate 59($Global) 5 Offset 56 + MemberDecorate 59($Global) 6 Offset 64 + MemberDecorate 59($Global) 7 Offset 80 + MemberDecorate 59($Global) 8 Offset 96 + MemberDecorate 59($Global) 9 Offset 100 + MemberDecorate 59($Global) 10 Offset 104 + Decorate 59($Global) Block + Decorate 61 DescriptorSet 0 + Decorate 70(g_tTex1df1) DescriptorSet 0 + Decorate 83(g_tTex1di1) DescriptorSet 0 + Decorate 91(g_tTex1du1) DescriptorSet 0 + Decorate 99(g_tTex2df1) DescriptorSet 0 + Decorate 109(g_tTex2di1) DescriptorSet 0 + Decorate 117(g_tTex2du1) DescriptorSet 0 + Decorate 125(g_tTex3df1) DescriptorSet 0 + Decorate 135(g_tTex3di1) DescriptorSet 0 + Decorate 143(g_tTex3du1) DescriptorSet 0 + Decorate 547(Color) Location 0 + Decorate 552(g_sSamp) DescriptorSet 0 + Decorate 552(g_sSamp) Binding 0 + Decorate 555(g_tTex1df1a) DescriptorSet 0 + Decorate 558(g_tTex1di1a) DescriptorSet 0 + Decorate 561(g_tTex1du1a) DescriptorSet 0 + Decorate 564(g_tTex2df1a) DescriptorSet 0 + Decorate 567(g_tTex2di1a) DescriptorSet 0 + Decorate 570(g_tTex2du1a) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypePointer Function 6(int) + 8: TypeFunction 6(int) 7(ptr) + 12: TypeInt 32 0 + 13: TypePointer Function 12(int) + 14: TypeFunction 12(int) 13(ptr) + 18: TypeFloat 32 + 19: TypePointer Function 18(float) + 20: TypeFunction 18(float) 19(ptr) + 24: TypeFunction 2 7(ptr) + 28: TypeFunction 2 13(ptr) + 32: TypeFunction 2 19(ptr) + 36: TypeFunction 18(float) + 39: TypeVector 18(float) 4 + 40(PS_OUTPUT): TypeStruct 39(fvec4) + 41: TypeFunction 40(PS_OUTPUT) + 53: 6(int) Constant 0 + 54: 12(int) Constant 0 + 55: 18(float) Constant 0 + 56: TypeVector 6(int) 2 + 57: TypeVector 6(int) 3 + 58: TypeVector 6(int) 4 + 59($Global): TypeStruct 6(int) 56(ivec2) 57(ivec3) 58(ivec4) 6(int) 56(ivec2) 57(ivec3) 58(ivec4) 18(float) 6(int) 12(int) + 60: TypePointer Uniform 59($Global) + 61: 60(ptr) Variable Uniform + 62: TypePointer Uniform 6(int) + 68: TypeImage 18(float) 1D nonsampled format:R32f + 69: TypePointer UniformConstant 68 + 70(g_tTex1df1): 69(ptr) Variable UniformConstant + 81: TypeImage 6(int) 1D nonsampled format:R32i + 82: TypePointer UniformConstant 81 + 83(g_tTex1di1): 82(ptr) Variable UniformConstant + 89: TypeImage 12(int) 1D nonsampled format:R32ui + 90: TypePointer UniformConstant 89 + 91(g_tTex1du1): 90(ptr) Variable UniformConstant + 97: TypeImage 18(float) 2D nonsampled format:R32f + 98: TypePointer UniformConstant 97 + 99(g_tTex2df1): 98(ptr) Variable UniformConstant + 101: 6(int) Constant 1 + 102: TypePointer Uniform 56(ivec2) + 107: TypeImage 6(int) 2D nonsampled format:R32i + 108: TypePointer UniformConstant 107 + 109(g_tTex2di1): 108(ptr) Variable UniformConstant + 115: TypeImage 12(int) 2D nonsampled format:R32ui + 116: TypePointer UniformConstant 115 + 117(g_tTex2du1): 116(ptr) Variable UniformConstant + 123: TypeImage 18(float) 3D nonsampled format:R32f + 124: TypePointer UniformConstant 123 + 125(g_tTex3df1): 124(ptr) Variable UniformConstant + 127: 6(int) Constant 2 + 128: TypePointer Uniform 57(ivec3) + 133: TypeImage 6(int) 3D nonsampled format:R32i + 134: TypePointer UniformConstant 133 + 135(g_tTex3di1): 134(ptr) Variable UniformConstant + 141: TypeImage 12(int) 3D nonsampled format:R32ui + 142: TypePointer UniformConstant 141 + 143(g_tTex3du1): 142(ptr) Variable UniformConstant + 149: 6(int) Constant 8 + 150: TypePointer Uniform 18(float) + 169: 12(int) Constant 3 + 182: 18(float) Constant 1073741824 + 196: 18(float) Constant 1077936128 + 209: 18(float) Constant 1082130432 + 246: 6(int) Constant 65535 + 259: 6(int) Constant 61680 + 300: 6(int) Constant 5 + 306: 12(int) Constant 6 + 327: 12(int) Constant 9 + 382: 18(float) Constant 1065353216 + 533: 6(int) Constant 3 + 534: 56(ivec2) ConstantComposite 127 533 + 538: TypePointer Function 40(PS_OUTPUT) + 540: 39(fvec4) ConstantComposite 382 382 382 382 + 541: TypePointer Function 39(fvec4) + 546: TypePointer Output 39(fvec4) + 547(Color): 546(ptr) Variable Output + 550: TypeSampler + 551: TypePointer UniformConstant 550 + 552(g_sSamp): 551(ptr) Variable UniformConstant + 553: TypeImage 18(float) 1D array nonsampled format:R32f + 554: TypePointer UniformConstant 553 +555(g_tTex1df1a): 554(ptr) Variable UniformConstant + 556: TypeImage 6(int) 1D array nonsampled format:R32i + 557: TypePointer UniformConstant 556 +558(g_tTex1di1a): 557(ptr) Variable UniformConstant + 559: TypeImage 12(int) 1D array nonsampled format:R32ui + 560: TypePointer UniformConstant 559 +561(g_tTex1du1a): 560(ptr) Variable UniformConstant + 562: TypeImage 18(float) 2D array nonsampled format:R32f + 563: TypePointer UniformConstant 562 +564(g_tTex2df1a): 563(ptr) Variable UniformConstant + 565: TypeImage 6(int) 2D array nonsampled format:R32i + 566: TypePointer UniformConstant 565 +567(g_tTex2di1a): 566(ptr) Variable UniformConstant + 568: TypeImage 12(int) 2D array nonsampled format:R32ui + 569: TypePointer UniformConstant 568 +570(g_tTex2du1a): 569(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label + 548:40(PS_OUTPUT) FunctionCall 42(@main() + 549: 39(fvec4) CompositeExtract 548 0 + Store 547(Color) 549 + Return + FunctionEnd + 10(Fn1(i1;): 6(int) Function None 8 + 9(x): 7(ptr) FunctionParameter + 11: Label + 44: 6(int) Load 9(x) + ReturnValue 44 + FunctionEnd + 16(Fn1(u1;): 12(int) Function None 14 + 15(x): 13(ptr) FunctionParameter + 17: Label + 47: 12(int) Load 15(x) + ReturnValue 47 + FunctionEnd + 22(Fn1(f1;): 18(float) Function None 20 + 21(x): 19(ptr) FunctionParameter + 23: Label + 50: 18(float) Load 21(x) + ReturnValue 50 + FunctionEnd + 26(Fn2(i1;): 2 Function None 24 + 25(x): 7(ptr) FunctionParameter + 27: Label + Store 25(x) 53 + Return + FunctionEnd + 30(Fn2(u1;): 2 Function None 28 + 29(x): 13(ptr) FunctionParameter + 31: Label + Store 29(x) 54 + Return + FunctionEnd + 34(Fn2(f1;): 2 Function None 32 + 33(x): 19(ptr) FunctionParameter + 35: Label + Store 33(x) 55 + Return + FunctionEnd + 37(SomeValue(): 18(float) Function None 36 + 38: Label + 63: 62(ptr) AccessChain 61 53 + 64: 6(int) Load 63 + 65: 18(float) ConvertSToF 64 + ReturnValue 65 + FunctionEnd + 42(@main():40(PS_OUTPUT) Function None 41 + 43: Label + 75(r00): 19(ptr) Variable Function + 80(r01): 7(ptr) Variable Function + 88(r02): 13(ptr) Variable Function + 96(r10): 19(ptr) Variable Function + 106(r11): 7(ptr) Variable Function + 114(r12): 13(ptr) Variable Function + 122(r20): 19(ptr) Variable Function + 132(r21): 7(ptr) Variable Function + 140(r22): 13(ptr) Variable Function + 148(lf1): 19(ptr) Variable Function + 153(storeTemp): 19(ptr) Variable Function + 163(storeTemp): 7(ptr) Variable Function + 168(storeTemp): 13(ptr) Variable Function + 174(val1): 19(ptr) Variable Function + 175(coordTemp): 7(ptr) Variable Function + 178(storeTemp): 19(ptr) Variable Function + 189(coordTemp): 7(ptr) Variable Function + 192(storeTemp): 19(ptr) Variable Function + 202(coordTemp): 7(ptr) Variable Function + 205(storeTemp): 19(ptr) Variable Function + 215(coordTemp): 7(ptr) Variable Function + 218(storeTemp): 7(ptr) Variable Function + 227(coordTemp): 7(ptr) Variable Function + 230(storeTemp): 7(ptr) Variable Function + 239(coordTemp): 7(ptr) Variable Function + 242(storeTemp): 7(ptr) Variable Function + 252(coordTemp): 7(ptr) Variable Function + 255(storeTemp): 7(ptr) Variable Function + 265(coordTemp): 7(ptr) Variable Function + 268(storeTemp): 7(ptr) Variable Function + 277(coordTemp): 7(ptr) Variable Function + 280(storeTemp): 7(ptr) Variable Function + 289(storeTemp): 19(ptr) Variable Function + 299(storeTemp): 7(ptr) Variable Function + 305(storeTemp): 13(ptr) Variable Function + 311(storeTemp): 19(ptr) Variable Function + 321(storeTemp): 7(ptr) Variable Function + 326(storeTemp): 13(ptr) Variable Function + 336(param): 19(ptr) Variable Function + 342(param): 7(ptr) Variable Function + 348(param): 13(ptr) Variable Function + 350(tempArg): 19(ptr) Variable Function + 351(param): 19(ptr) Variable Function + 358(tempArg): 7(ptr) Variable Function + 359(param): 7(ptr) Variable Function + 366(tempArg): 13(ptr) Variable Function + 367(param): 13(ptr) Variable Function + 374(coordTemp): 7(ptr) Variable Function + 377(storeTemp): 19(ptr) Variable Function + 387(coordTemp): 7(ptr) Variable Function + 390(storeTemp): 7(ptr) Variable Function + 399(coordTemp): 7(ptr) Variable Function + 402(storeTemp): 13(ptr) Variable Function + 411(coordTemp): 7(ptr) Variable Function + 414(storeTemp): 19(ptr) Variable Function + 423(coordTemp): 7(ptr) Variable Function + 426(storeTemp): 7(ptr) Variable Function + 435(coordTemp): 7(ptr) Variable Function + 438(storeTemp): 13(ptr) Variable Function + 447(coordTemp): 7(ptr) Variable Function +450(storeTempPre): 19(ptr) Variable Function +454(storeTempPost): 19(ptr) Variable Function + 461(coordTemp): 7(ptr) Variable Function +464(storeTempPre): 13(ptr) Variable Function +468(storeTempPost): 13(ptr) Variable Function + 475(coordTemp): 7(ptr) Variable Function +478(storeTempPre): 7(ptr) Variable Function +482(storeTempPost): 7(ptr) Variable Function + 489(coordTemp): 7(ptr) Variable Function +492(storeTempPre): 19(ptr) Variable Function +496(storeTempPost): 19(ptr) Variable Function + 503(coordTemp): 7(ptr) Variable Function +506(storeTempPre): 7(ptr) Variable Function +510(storeTempPost): 7(ptr) Variable Function + 517(coordTemp): 7(ptr) Variable Function +520(storeTempPre): 13(ptr) Variable Function +524(storeTempPost): 13(ptr) Variable Function + 531(storeTemp): 19(ptr) Variable Function + 539(psout): 538(ptr) Variable Function + 71: 68 Load 70(g_tTex1df1) + 72: 62(ptr) AccessChain 61 53 + 73: 6(int) Load 72 + 74: 18(float) ImageRead 71 73 + 76: 68 Load 70(g_tTex1df1) + 77: 62(ptr) AccessChain 61 53 + 78: 6(int) Load 77 + 79: 18(float) ImageRead 76 78 + Store 75(r00) 79 + 84: 81 Load 83(g_tTex1di1) + 85: 62(ptr) AccessChain 61 53 + 86: 6(int) Load 85 + 87: 6(int) ImageRead 84 86 + Store 80(r01) 87 + 92: 89 Load 91(g_tTex1du1) + 93: 62(ptr) AccessChain 61 53 + 94: 6(int) Load 93 + 95: 12(int) ImageRead 92 94 + Store 88(r02) 95 + 100: 97 Load 99(g_tTex2df1) + 103: 102(ptr) AccessChain 61 101 + 104: 56(ivec2) Load 103 + 105: 18(float) ImageRead 100 104 + Store 96(r10) 105 + 110: 107 Load 109(g_tTex2di1) + 111: 102(ptr) AccessChain 61 101 + 112: 56(ivec2) Load 111 + 113: 6(int) ImageRead 110 112 + Store 106(r11) 113 + 118: 115 Load 117(g_tTex2du1) + 119: 102(ptr) AccessChain 61 101 + 120: 56(ivec2) Load 119 + 121: 12(int) ImageRead 118 120 + Store 114(r12) 121 + 126: 123 Load 125(g_tTex3df1) + 129: 128(ptr) AccessChain 61 127 + 130: 57(ivec3) Load 129 + 131: 18(float) ImageRead 126 130 + Store 122(r20) 131 + 136: 133 Load 135(g_tTex3di1) + 137: 128(ptr) AccessChain 61 127 + 138: 57(ivec3) Load 137 + 139: 6(int) ImageRead 136 138 + Store 132(r21) 139 + 144: 141 Load 143(g_tTex3du1) + 145: 128(ptr) AccessChain 61 127 + 146: 57(ivec3) Load 145 + 147: 12(int) ImageRead 144 146 + Store 140(r22) 147 + 151: 150(ptr) AccessChain 61 149 + 152: 18(float) Load 151 + Store 148(lf1) 152 + 154: 18(float) FunctionCall 37(SomeValue() + Store 153(storeTemp) 154 + 155: 68 Load 70(g_tTex1df1) + 156: 62(ptr) AccessChain 61 53 + 157: 6(int) Load 156 + 158: 18(float) Load 153(storeTemp) + ImageWrite 155 157 158 + 159: 68 Load 70(g_tTex1df1) + 160: 62(ptr) AccessChain 61 53 + 161: 6(int) Load 160 + 162: 18(float) Load 148(lf1) + ImageWrite 159 161 162 + Store 163(storeTemp) 127 + 164: 81 Load 83(g_tTex1di1) + 165: 62(ptr) AccessChain 61 53 + 166: 6(int) Load 165 + 167: 6(int) Load 163(storeTemp) + ImageWrite 164 166 167 + Store 168(storeTemp) 169 + 170: 89 Load 91(g_tTex1du1) + 171: 62(ptr) AccessChain 61 53 + 172: 6(int) Load 171 + 173: 12(int) Load 168(storeTemp) + ImageWrite 170 172 173 + 176: 62(ptr) AccessChain 61 53 + 177: 6(int) Load 176 + Store 175(coordTemp) 177 + 179: 68 Load 70(g_tTex1df1) + 180: 6(int) Load 175(coordTemp) + 181: 18(float) ImageRead 179 180 + Store 178(storeTemp) 181 + 183: 18(float) Load 178(storeTemp) + 184: 18(float) FMul 183 182 + Store 178(storeTemp) 184 + 185: 68 Load 70(g_tTex1df1) + 186: 6(int) Load 175(coordTemp) + 187: 18(float) Load 178(storeTemp) + ImageWrite 185 186 187 + 188: 18(float) Load 178(storeTemp) + Store 174(val1) 188 + 190: 62(ptr) AccessChain 61 53 + 191: 6(int) Load 190 + Store 189(coordTemp) 191 + 193: 68 Load 70(g_tTex1df1) + 194: 6(int) Load 189(coordTemp) + 195: 18(float) ImageRead 193 194 + Store 192(storeTemp) 195 + 197: 18(float) Load 192(storeTemp) + 198: 18(float) FSub 197 196 + Store 192(storeTemp) 198 + 199: 68 Load 70(g_tTex1df1) + 200: 6(int) Load 189(coordTemp) + 201: 18(float) Load 192(storeTemp) + ImageWrite 199 200 201 + 203: 62(ptr) AccessChain 61 53 + 204: 6(int) Load 203 + Store 202(coordTemp) 204 + 206: 68 Load 70(g_tTex1df1) + 207: 6(int) Load 202(coordTemp) + 208: 18(float) ImageRead 206 207 + Store 205(storeTemp) 208 + 210: 18(float) Load 205(storeTemp) + 211: 18(float) FAdd 210 209 + Store 205(storeTemp) 211 + 212: 68 Load 70(g_tTex1df1) + 213: 6(int) Load 202(coordTemp) + 214: 18(float) Load 205(storeTemp) + ImageWrite 212 213 214 + 216: 62(ptr) AccessChain 61 53 + 217: 6(int) Load 216 + Store 215(coordTemp) 217 + 219: 81 Load 83(g_tTex1di1) + 220: 6(int) Load 215(coordTemp) + 221: 6(int) ImageRead 219 220 + Store 218(storeTemp) 221 + 222: 6(int) Load 218(storeTemp) + 223: 6(int) SDiv 222 127 + Store 218(storeTemp) 223 + 224: 81 Load 83(g_tTex1di1) + 225: 6(int) Load 215(coordTemp) + 226: 6(int) Load 218(storeTemp) + ImageWrite 224 225 226 + 228: 62(ptr) AccessChain 61 53 + 229: 6(int) Load 228 + Store 227(coordTemp) 229 + 231: 81 Load 83(g_tTex1di1) + 232: 6(int) Load 227(coordTemp) + 233: 6(int) ImageRead 231 232 + Store 230(storeTemp) 233 + 234: 6(int) Load 230(storeTemp) + 235: 6(int) SMod 234 127 + Store 230(storeTemp) 235 + 236: 81 Load 83(g_tTex1di1) + 237: 6(int) Load 227(coordTemp) + 238: 6(int) Load 230(storeTemp) + ImageWrite 236 237 238 + 240: 62(ptr) AccessChain 61 53 + 241: 6(int) Load 240 + Store 239(coordTemp) 241 + 243: 81 Load 83(g_tTex1di1) + 244: 6(int) Load 239(coordTemp) + 245: 6(int) ImageRead 243 244 + Store 242(storeTemp) 245 + 247: 6(int) Load 242(storeTemp) + 248: 6(int) BitwiseAnd 247 246 + Store 242(storeTemp) 248 + 249: 81 Load 83(g_tTex1di1) + 250: 6(int) Load 239(coordTemp) + 251: 6(int) Load 242(storeTemp) + ImageWrite 249 250 251 + 253: 62(ptr) AccessChain 61 53 + 254: 6(int) Load 253 + Store 252(coordTemp) 254 + 256: 81 Load 83(g_tTex1di1) + 257: 6(int) Load 252(coordTemp) + 258: 6(int) ImageRead 256 257 + Store 255(storeTemp) 258 + 260: 6(int) Load 255(storeTemp) + 261: 6(int) BitwiseOr 260 259 + Store 255(storeTemp) 261 + 262: 81 Load 83(g_tTex1di1) + 263: 6(int) Load 252(coordTemp) + 264: 6(int) Load 255(storeTemp) + ImageWrite 262 263 264 + 266: 62(ptr) AccessChain 61 53 + 267: 6(int) Load 266 + Store 265(coordTemp) 267 + 269: 81 Load 83(g_tTex1di1) + 270: 6(int) Load 265(coordTemp) + 271: 6(int) ImageRead 269 270 + Store 268(storeTemp) 271 + 272: 6(int) Load 268(storeTemp) + 273: 6(int) ShiftLeftLogical 272 127 + Store 268(storeTemp) 273 + 274: 81 Load 83(g_tTex1di1) + 275: 6(int) Load 265(coordTemp) + 276: 6(int) Load 268(storeTemp) + ImageWrite 274 275 276 + 278: 62(ptr) AccessChain 61 53 + 279: 6(int) Load 278 + Store 277(coordTemp) 279 + 281: 81 Load 83(g_tTex1di1) + 282: 6(int) Load 277(coordTemp) + 283: 6(int) ImageRead 281 282 + Store 280(storeTemp) 283 + 284: 6(int) Load 280(storeTemp) + 285: 6(int) ShiftRightArithmetic 284 127 + Store 280(storeTemp) 285 + 286: 81 Load 83(g_tTex1di1) + 287: 6(int) Load 277(coordTemp) + 288: 6(int) Load 280(storeTemp) + ImageWrite 286 287 288 + 290: 18(float) FunctionCall 37(SomeValue() + Store 289(storeTemp) 290 + 291: 97 Load 99(g_tTex2df1) + 292: 102(ptr) AccessChain 61 101 + 293: 56(ivec2) Load 292 + 294: 18(float) Load 289(storeTemp) + ImageWrite 291 293 294 + 295: 97 Load 99(g_tTex2df1) + 296: 102(ptr) AccessChain 61 101 + 297: 56(ivec2) Load 296 + 298: 18(float) Load 148(lf1) + ImageWrite 295 297 298 + Store 299(storeTemp) 300 + 301: 107 Load 109(g_tTex2di1) + 302: 102(ptr) AccessChain 61 101 + 303: 56(ivec2) Load 302 + 304: 6(int) Load 299(storeTemp) + ImageWrite 301 303 304 + Store 305(storeTemp) 306 + 307: 115 Load 117(g_tTex2du1) + 308: 102(ptr) AccessChain 61 101 + 309: 56(ivec2) Load 308 + 310: 12(int) Load 305(storeTemp) + ImageWrite 307 309 310 + 312: 18(float) FunctionCall 37(SomeValue() + Store 311(storeTemp) 312 + 313: 123 Load 125(g_tTex3df1) + 314: 128(ptr) AccessChain 61 127 + 315: 57(ivec3) Load 314 + 316: 18(float) Load 311(storeTemp) + ImageWrite 313 315 316 + 317: 123 Load 125(g_tTex3df1) + 318: 128(ptr) AccessChain 61 127 + 319: 57(ivec3) Load 318 + 320: 18(float) Load 148(lf1) + ImageWrite 317 319 320 + Store 321(storeTemp) 149 + 322: 133 Load 135(g_tTex3di1) + 323: 128(ptr) AccessChain 61 127 + 324: 57(ivec3) Load 323 + 325: 6(int) Load 321(storeTemp) + ImageWrite 322 324 325 + Store 326(storeTemp) 327 + 328: 141 Load 143(g_tTex3du1) + 329: 128(ptr) AccessChain 61 127 + 330: 57(ivec3) Load 329 + 331: 12(int) Load 326(storeTemp) + ImageWrite 328 330 331 + 332: 68 Load 70(g_tTex1df1) + 333: 62(ptr) AccessChain 61 53 + 334: 6(int) Load 333 + 335: 18(float) ImageRead 332 334 + Store 336(param) 335 + 337: 18(float) FunctionCall 22(Fn1(f1;) 336(param) + 338: 81 Load 83(g_tTex1di1) + 339: 62(ptr) AccessChain 61 53 + 340: 6(int) Load 339 + 341: 6(int) ImageRead 338 340 + Store 342(param) 341 + 343: 6(int) FunctionCall 10(Fn1(i1;) 342(param) + 344: 89 Load 91(g_tTex1du1) + 345: 62(ptr) AccessChain 61 53 + 346: 6(int) Load 345 + 347: 12(int) ImageRead 344 346 + Store 348(param) 347 + 349: 12(int) FunctionCall 16(Fn1(u1;) 348(param) + 352: 2 FunctionCall 34(Fn2(f1;) 351(param) + 353: 18(float) Load 351(param) + Store 350(tempArg) 353 + 354: 68 Load 70(g_tTex1df1) + 355: 62(ptr) AccessChain 61 53 + 356: 6(int) Load 355 + 357: 18(float) Load 350(tempArg) + ImageWrite 354 356 357 + 360: 2 FunctionCall 26(Fn2(i1;) 359(param) + 361: 6(int) Load 359(param) + Store 358(tempArg) 361 + 362: 81 Load 83(g_tTex1di1) + 363: 62(ptr) AccessChain 61 53 + 364: 6(int) Load 363 + 365: 6(int) Load 358(tempArg) + ImageWrite 362 364 365 + 368: 2 FunctionCall 30(Fn2(u1;) 367(param) + 369: 12(int) Load 367(param) + Store 366(tempArg) 369 + 370: 89 Load 91(g_tTex1du1) + 371: 62(ptr) AccessChain 61 53 + 372: 6(int) Load 371 + 373: 12(int) Load 366(tempArg) + ImageWrite 370 372 373 + 375: 62(ptr) AccessChain 61 53 + 376: 6(int) Load 375 + Store 374(coordTemp) 376 + 378: 68 Load 70(g_tTex1df1) + 379: 6(int) Load 374(coordTemp) + 380: 18(float) ImageRead 378 379 + Store 377(storeTemp) 380 + 381: 18(float) Load 377(storeTemp) + 383: 18(float) FAdd 381 382 + Store 377(storeTemp) 383 + 384: 68 Load 70(g_tTex1df1) + 385: 6(int) Load 374(coordTemp) + 386: 18(float) Load 377(storeTemp) + ImageWrite 384 385 386 + 388: 62(ptr) AccessChain 61 53 + 389: 6(int) Load 388 + Store 387(coordTemp) 389 + 391: 81 Load 83(g_tTex1di1) + 392: 6(int) Load 387(coordTemp) + 393: 6(int) ImageRead 391 392 + Store 390(storeTemp) 393 + 394: 6(int) Load 390(storeTemp) + 395: 6(int) IAdd 394 101 + Store 390(storeTemp) 395 + 396: 81 Load 83(g_tTex1di1) + 397: 6(int) Load 387(coordTemp) + 398: 6(int) Load 390(storeTemp) + ImageWrite 396 397 398 + 400: 62(ptr) AccessChain 61 53 + 401: 6(int) Load 400 + Store 399(coordTemp) 401 + 403: 89 Load 91(g_tTex1du1) + 404: 6(int) Load 399(coordTemp) + 405: 12(int) ImageRead 403 404 + Store 402(storeTemp) 405 + 406: 12(int) Load 402(storeTemp) + 407: 12(int) IAdd 406 101 + Store 402(storeTemp) 407 + 408: 89 Load 91(g_tTex1du1) + 409: 6(int) Load 399(coordTemp) + 410: 12(int) Load 402(storeTemp) + ImageWrite 408 409 410 + 412: 62(ptr) AccessChain 61 53 + 413: 6(int) Load 412 + Store 411(coordTemp) 413 + 415: 68 Load 70(g_tTex1df1) + 416: 6(int) Load 411(coordTemp) + 417: 18(float) ImageRead 415 416 + Store 414(storeTemp) 417 + 418: 18(float) Load 414(storeTemp) + 419: 18(float) FSub 418 382 + Store 414(storeTemp) 419 + 420: 68 Load 70(g_tTex1df1) + 421: 6(int) Load 411(coordTemp) + 422: 18(float) Load 414(storeTemp) + ImageWrite 420 421 422 + 424: 62(ptr) AccessChain 61 53 + 425: 6(int) Load 424 + Store 423(coordTemp) 425 + 427: 81 Load 83(g_tTex1di1) + 428: 6(int) Load 423(coordTemp) + 429: 6(int) ImageRead 427 428 + Store 426(storeTemp) 429 + 430: 6(int) Load 426(storeTemp) + 431: 6(int) ISub 430 101 + Store 426(storeTemp) 431 + 432: 81 Load 83(g_tTex1di1) + 433: 6(int) Load 423(coordTemp) + 434: 6(int) Load 426(storeTemp) + ImageWrite 432 433 434 + 436: 62(ptr) AccessChain 61 53 + 437: 6(int) Load 436 + Store 435(coordTemp) 437 + 439: 89 Load 91(g_tTex1du1) + 440: 6(int) Load 435(coordTemp) + 441: 12(int) ImageRead 439 440 + Store 438(storeTemp) 441 + 442: 12(int) Load 438(storeTemp) + 443: 12(int) ISub 442 101 + Store 438(storeTemp) 443 + 444: 89 Load 91(g_tTex1du1) + 445: 6(int) Load 435(coordTemp) + 446: 12(int) Load 438(storeTemp) + ImageWrite 444 445 446 + 448: 62(ptr) AccessChain 61 53 + 449: 6(int) Load 448 + Store 447(coordTemp) 449 + 451: 68 Load 70(g_tTex1df1) + 452: 6(int) Load 447(coordTemp) + 453: 18(float) ImageRead 451 452 + Store 450(storeTempPre) 453 + 455: 18(float) Load 450(storeTempPre) + Store 454(storeTempPost) 455 + 456: 18(float) Load 454(storeTempPost) + 457: 18(float) FAdd 456 382 + Store 454(storeTempPost) 457 + 458: 68 Load 70(g_tTex1df1) + 459: 6(int) Load 447(coordTemp) + 460: 18(float) Load 454(storeTempPost) + ImageWrite 458 459 460 + 462: 62(ptr) AccessChain 61 53 + 463: 6(int) Load 462 + Store 461(coordTemp) 463 + 465: 89 Load 91(g_tTex1du1) + 466: 6(int) Load 461(coordTemp) + 467: 12(int) ImageRead 465 466 + Store 464(storeTempPre) 467 + 469: 12(int) Load 464(storeTempPre) + Store 468(storeTempPost) 469 + 470: 12(int) Load 468(storeTempPost) + 471: 12(int) ISub 470 101 + Store 468(storeTempPost) 471 + 472: 89 Load 91(g_tTex1du1) + 473: 6(int) Load 461(coordTemp) + 474: 12(int) Load 468(storeTempPost) + ImageWrite 472 473 474 + 476: 62(ptr) AccessChain 61 53 + 477: 6(int) Load 476 + Store 475(coordTemp) 477 + 479: 81 Load 83(g_tTex1di1) + 480: 6(int) Load 475(coordTemp) + 481: 6(int) ImageRead 479 480 + Store 478(storeTempPre) 481 + 483: 6(int) Load 478(storeTempPre) + Store 482(storeTempPost) 483 + 484: 6(int) Load 482(storeTempPost) + 485: 6(int) IAdd 484 101 + Store 482(storeTempPost) 485 + 486: 81 Load 83(g_tTex1di1) + 487: 6(int) Load 475(coordTemp) + 488: 6(int) Load 482(storeTempPost) + ImageWrite 486 487 488 + 490: 62(ptr) AccessChain 61 53 + 491: 6(int) Load 490 + Store 489(coordTemp) 491 + 493: 68 Load 70(g_tTex1df1) + 494: 6(int) Load 489(coordTemp) + 495: 18(float) ImageRead 493 494 + Store 492(storeTempPre) 495 + 497: 18(float) Load 492(storeTempPre) + Store 496(storeTempPost) 497 + 498: 18(float) Load 496(storeTempPost) + 499: 18(float) FSub 498 382 + Store 496(storeTempPost) 499 + 500: 68 Load 70(g_tTex1df1) + 501: 6(int) Load 489(coordTemp) + 502: 18(float) Load 496(storeTempPost) + ImageWrite 500 501 502 + 504: 62(ptr) AccessChain 61 53 + 505: 6(int) Load 504 + Store 503(coordTemp) 505 + 507: 81 Load 83(g_tTex1di1) + 508: 6(int) Load 503(coordTemp) + 509: 6(int) ImageRead 507 508 + Store 506(storeTempPre) 509 + 511: 6(int) Load 506(storeTempPre) + Store 510(storeTempPost) 511 + 512: 6(int) Load 510(storeTempPost) + 513: 6(int) IAdd 512 101 + Store 510(storeTempPost) 513 + 514: 81 Load 83(g_tTex1di1) + 515: 6(int) Load 503(coordTemp) + 516: 6(int) Load 510(storeTempPost) + ImageWrite 514 515 516 + 518: 62(ptr) AccessChain 61 53 + 519: 6(int) Load 518 + Store 517(coordTemp) 519 + 521: 89 Load 91(g_tTex1du1) + 522: 6(int) Load 517(coordTemp) + 523: 12(int) ImageRead 521 522 + Store 520(storeTempPre) 523 + 525: 12(int) Load 520(storeTempPre) + Store 524(storeTempPost) 525 + 526: 12(int) Load 524(storeTempPost) + 527: 12(int) ISub 526 101 + Store 524(storeTempPost) 527 + 528: 89 Load 91(g_tTex1du1) + 529: 6(int) Load 517(coordTemp) + 530: 12(int) Load 524(storeTempPost) + ImageWrite 528 529 530 + 532: 97 Load 99(g_tTex2df1) + 535: 18(float) ImageRead 532 534 + Store 531(storeTemp) 535 + 536: 68 Load 70(g_tTex1df1) + 537: 18(float) Load 531(storeTemp) + ImageWrite 536 101 537 + 542: 541(ptr) AccessChain 539(psout) 53 + Store 542 540 + 543:40(PS_OUTPUT) Load 539(psout) + ReturnValue 543 + FunctionEnd 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 new file mode 100644 index 0000000..ae2f4c9 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.swizzle.frag.out @@ -0,0 +1,299 @@ +hlsl.rw.swizzle.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:4 Function Definition: SomeValue( ( temp 3-component vector of float) +0:4 Function Parameters: +0:? Sequence +0:4 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +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 2-component vector of int) +0:8 'tc2' ( temp 2-component vector of int) +0:8 Constant: +0:8 0 (const int) +0:8 0 (const int) +0:9 Sequence +0:9 move second child to first child ( temp int) +0:9 'tc' ( temp int) +0:9 Constant: +0:9 0 (const int) +0:12 Sequence +0:12 move second child to first child ( temp 3-component vector of float) +0:12 vector swizzle ( temp 3-component vector of float) +0:12 'storeTemp' ( temp 3-component vector of float) +0:12 Sequence +0:12 Constant: +0:12 2 (const int) +0:12 Constant: +0:12 1 (const int) +0:12 Constant: +0:12 0 (const int) +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:12 imageStore ( temp void) +0:12 'rwtx' (layout( rgba32f) uniform image2D) +0:12 'tc2' ( temp 2-component vector of int) +0:12 'storeTemp' ( temp 3-component vector of float) +0:12 'storeTemp' ( temp 3-component vector of float) +0:13 Sequence +0:13 move second child to first child ( temp 3-component vector of float) +0:13 vector swizzle ( temp 3-component vector of float) +0:13 'storeTemp' ( temp 3-component vector of float) +0:13 Sequence +0:13 Constant: +0:13 2 (const int) +0:13 Constant: +0:13 1 (const int) +0:13 Constant: +0:13 0 (const int) +0:13 Function Call: SomeValue( ( temp 3-component vector of float) +0:13 imageStore ( temp void) +0:13 'rwtx' (layout( rgba32f) uniform image2D) +0:13 'tc2' ( temp 2-component vector of int) +0:13 'storeTemp' ( temp 3-component vector of float) +0:13 'storeTemp' ( temp 3-component vector of float) +0:14 Sequence +0:14 move second child to first child ( temp 3-component vector of float) +0:14 vector swizzle ( temp 3-component vector of float) +0:14 'storeTemp' ( temp 3-component vector of float) +0:14 Sequence +0:14 Constant: +0:14 2 (const int) +0:14 Constant: +0:14 1 (const int) +0:14 Constant: +0:14 0 (const int) +0:14 Constant: +0:14 2.000000 +0:14 2.000000 +0:14 2.000000 +0:14 imageStore ( temp void) +0:14 'rwtx' (layout( rgba32f) uniform image2D) +0:14 'tc2' ( temp 2-component vector of int) +0:14 'storeTemp' ( temp 3-component vector of float) +0:14 'storeTemp' ( temp 3-component vector of float) +0:27 Branch: Return with expression +0:27 Constant: +0:27 0.000000 +0:27 0.000000 +0:27 0.000000 +0:27 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:? 'rwtx' (layout( rgba32f) uniform image2D) +0:? 'buf' (layout( rgba32f) uniform imageBuffer) +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:4 Function Definition: SomeValue( ( temp 3-component vector of float) +0:4 Function Parameters: +0:? Sequence +0:4 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +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 2-component vector of int) +0:8 'tc2' ( temp 2-component vector of int) +0:8 Constant: +0:8 0 (const int) +0:8 0 (const int) +0:9 Sequence +0:9 move second child to first child ( temp int) +0:9 'tc' ( temp int) +0:9 Constant: +0:9 0 (const int) +0:12 Sequence +0:12 move second child to first child ( temp 3-component vector of float) +0:12 vector swizzle ( temp 3-component vector of float) +0:12 'storeTemp' ( temp 3-component vector of float) +0:12 Sequence +0:12 Constant: +0:12 2 (const int) +0:12 Constant: +0:12 1 (const int) +0:12 Constant: +0:12 0 (const int) +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:12 imageStore ( temp void) +0:12 'rwtx' (layout( rgba32f) uniform image2D) +0:12 'tc2' ( temp 2-component vector of int) +0:12 'storeTemp' ( temp 3-component vector of float) +0:12 'storeTemp' ( temp 3-component vector of float) +0:13 Sequence +0:13 move second child to first child ( temp 3-component vector of float) +0:13 vector swizzle ( temp 3-component vector of float) +0:13 'storeTemp' ( temp 3-component vector of float) +0:13 Sequence +0:13 Constant: +0:13 2 (const int) +0:13 Constant: +0:13 1 (const int) +0:13 Constant: +0:13 0 (const int) +0:13 Function Call: SomeValue( ( temp 3-component vector of float) +0:13 imageStore ( temp void) +0:13 'rwtx' (layout( rgba32f) uniform image2D) +0:13 'tc2' ( temp 2-component vector of int) +0:13 'storeTemp' ( temp 3-component vector of float) +0:13 'storeTemp' ( temp 3-component vector of float) +0:14 Sequence +0:14 move second child to first child ( temp 3-component vector of float) +0:14 vector swizzle ( temp 3-component vector of float) +0:14 'storeTemp' ( temp 3-component vector of float) +0:14 Sequence +0:14 Constant: +0:14 2 (const int) +0:14 Constant: +0:14 1 (const int) +0:14 Constant: +0:14 0 (const int) +0:14 Constant: +0:14 2.000000 +0:14 2.000000 +0:14 2.000000 +0:14 imageStore ( temp void) +0:14 'rwtx' (layout( rgba32f) uniform image2D) +0:14 'tc2' ( temp 2-component vector of int) +0:14 'storeTemp' ( temp 3-component vector of float) +0:14 'storeTemp' ( temp 3-component vector of float) +0:27 Branch: Return with expression +0:27 Constant: +0:27 0.000000 +0:27 0.000000 +0:27 0.000000 +0:27 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:? 'rwtx' (layout( rgba32f) uniform image2D) +0:? 'buf' (layout( rgba32f) uniform imageBuffer) +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 63 + + Capability Shader + Capability SampledBuffer + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 58 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 9 "SomeValue(" + Name 13 "@main(" + Name 24 "tc2" + Name 28 "tc" + Name 30 "storeTemp" + Name 35 "rwtx" + Name 39 "storeTemp" + Name 46 "storeTemp" + Name 58 "@entryPointOutput" + Name 62 "buf" + Decorate 35(rwtx) DescriptorSet 0 + Decorate 58(@entryPointOutput) Location 0 + Decorate 62(buf) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 3 + 8: TypeFunction 7(fvec3) + 11: TypeVector 6(float) 4 + 12: TypeFunction 11(fvec4) + 15: 6(float) Constant 1065353216 + 16: 6(float) Constant 1073741824 + 17: 6(float) Constant 1077936128 + 18: 7(fvec3) ConstantComposite 15 16 17 + 21: TypeInt 32 1 + 22: TypeVector 21(int) 2 + 23: TypePointer Function 22(ivec2) + 25: 21(int) Constant 0 + 26: 22(ivec2) ConstantComposite 25 25 + 27: TypePointer Function 21(int) + 29: TypePointer Function 7(fvec3) + 33: TypeImage 6(float) 2D nonsampled format:Rgba32f + 34: TypePointer UniformConstant 33 + 35(rwtx): 34(ptr) Variable UniformConstant + 47: 7(fvec3) ConstantComposite 16 16 16 + 53: 6(float) Constant 0 + 54: 11(fvec4) ConstantComposite 53 53 53 53 + 57: TypePointer Output 11(fvec4) +58(@entryPointOutput): 57(ptr) Variable Output + 60: TypeImage 6(float) Buffer nonsampled format:Rgba32f + 61: TypePointer UniformConstant 60 + 62(buf): 61(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label + 59: 11(fvec4) FunctionCall 13(@main() + Store 58(@entryPointOutput) 59 + Return + FunctionEnd + 9(SomeValue(): 7(fvec3) Function None 8 + 10: Label + ReturnValue 18 + FunctionEnd + 13(@main(): 11(fvec4) Function None 12 + 14: Label + 24(tc2): 23(ptr) Variable Function + 28(tc): 27(ptr) Variable Function + 30(storeTemp): 29(ptr) Variable Function + 39(storeTemp): 29(ptr) Variable Function + 46(storeTemp): 29(ptr) Variable Function + Store 24(tc2) 26 + Store 28(tc) 25 + 31: 7(fvec3) Load 30(storeTemp) + 32: 7(fvec3) VectorShuffle 31 18 5 4 3 + Store 30(storeTemp) 32 + 36: 33 Load 35(rwtx) + 37: 22(ivec2) Load 24(tc2) + 38: 7(fvec3) Load 30(storeTemp) + ImageWrite 36 37 38 + 40: 7(fvec3) FunctionCall 9(SomeValue() + 41: 7(fvec3) Load 39(storeTemp) + 42: 7(fvec3) VectorShuffle 41 40 5 4 3 + Store 39(storeTemp) 42 + 43: 33 Load 35(rwtx) + 44: 22(ivec2) Load 24(tc2) + 45: 7(fvec3) Load 39(storeTemp) + ImageWrite 43 44 45 + 48: 7(fvec3) Load 46(storeTemp) + 49: 7(fvec3) VectorShuffle 48 47 5 4 3 + Store 46(storeTemp) 49 + 50: 33 Load 35(rwtx) + 51: 22(ivec2) Load 24(tc2) + 52: 7(fvec3) Load 46(storeTemp) + ImageWrite 50 51 52 + ReturnValue 54 + FunctionEnd 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 new file mode 100644 index 0000000..c34ce90 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.vec2.bracket.frag.out @@ -0,0 +1,2626 @@ +hlsl.rw.vec2.bracket.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:42 Function Definition: Fn1(vi2; ( temp 2-component vector of int) +0:42 Function Parameters: +0:42 'x' ( in 2-component vector of int) +0:? Sequence +0:42 Branch: Return with expression +0:42 'x' ( in 2-component vector of int) +0:43 Function Definition: Fn1(vu2; ( temp 2-component vector of uint) +0:43 Function Parameters: +0:43 'x' ( in 2-component vector of uint) +0:? Sequence +0:43 Branch: Return with expression +0:43 'x' ( in 2-component vector of uint) +0:44 Function Definition: Fn1(vf2; ( temp 2-component vector of float) +0:44 Function Parameters: +0:44 'x' ( in 2-component vector of float) +0:? Sequence +0:44 Branch: Return with expression +0:44 'x' ( in 2-component vector of float) +0:46 Function Definition: Fn2(vi2; ( temp void) +0:46 Function Parameters: +0:46 'x' ( out 2-component vector of int) +0:? Sequence +0:46 move second child to first child ( temp 2-component vector of int) +0:46 'x' ( out 2-component vector of int) +0:? Constant: +0:? 0 (const int) +0:? 0 (const int) +0:47 Function Definition: Fn2(vu2; ( temp void) +0:47 Function Parameters: +0:47 'x' ( out 2-component vector of uint) +0:? Sequence +0:47 move second child to first child ( temp 2-component vector of uint) +0:47 'x' ( out 2-component vector of uint) +0:? Constant: +0:? 0 (const uint) +0:? 0 (const uint) +0:48 Function Definition: Fn2(vf2; ( temp void) +0:48 Function Parameters: +0:48 'x' ( out 2-component vector of float) +0:? Sequence +0:48 move second child to first child ( temp 2-component vector of float) +0:48 'x' ( out 2-component vector of float) +0:? Constant: +0:? 0.000000 +0:? 0.000000 +0:50 Function Definition: SomeValue( ( temp 2-component vector of float) +0:50 Function Parameters: +0:? Sequence +0:50 Branch: Return with expression +0:50 Convert int to float ( temp 2-component vector of float) +0:50 c2: direct index for structure ( uniform 2-component vector of int) +0:50 '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:50 Constant: +0:50 1 (const uint) +0:53 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color}) +0:53 Function Parameters: +0:? Sequence +0:57 imageLoad ( temp 2-component vector of float) +0:57 'g_tTex1df2' (layout( rg32f) uniform image1D) +0:57 c1: direct index for structure ( uniform int) +0:57 '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:57 Constant: +0:57 0 (const uint) +0:59 Sequence +0:59 move second child to first child ( temp 2-component vector of float) +0:59 'r00' ( temp 2-component vector of float) +0:59 imageLoad ( temp 2-component vector of float) +0:59 'g_tTex1df2' (layout( rg32f) uniform image1D) +0:59 c1: direct index for structure ( uniform int) +0:59 '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:59 Constant: +0:59 0 (const uint) +0:60 Sequence +0:60 move second child to first child ( temp 2-component vector of int) +0:60 'r01' ( temp 2-component vector of int) +0:60 imageLoad ( temp 2-component vector of int) +0:60 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:60 c1: direct index for structure ( uniform int) +0:60 '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:60 Constant: +0:60 0 (const uint) +0:61 Sequence +0:61 move second child to first child ( temp 2-component vector of uint) +0:61 'r02' ( temp 2-component vector of uint) +0:61 imageLoad ( temp 2-component vector of uint) +0:61 'g_tTex1du2' (layout( rg32ui) uniform uimage1D) +0:61 c1: direct index for structure ( uniform int) +0:61 '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:61 Constant: +0:61 0 (const uint) +0:64 Sequence +0:64 move second child to first child ( temp 2-component vector of float) +0:64 'r10' ( temp 2-component vector of float) +0:64 imageLoad ( temp 2-component vector of float) +0:64 'g_tTex2df2' (layout( rg32f) uniform image2D) +0:64 c2: direct index for structure ( uniform 2-component vector of int) +0:64 '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:64 Constant: +0:64 1 (const uint) +0:65 Sequence +0:65 move second child to first child ( temp 2-component vector of int) +0:65 'r11' ( temp 2-component vector of int) +0:65 imageLoad ( temp 2-component vector of int) +0:65 'g_tTex2di2' (layout( rg32i) uniform iimage2D) +0:65 c2: direct index for structure ( uniform 2-component vector of int) +0:65 '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:65 Constant: +0:65 1 (const uint) +0:66 Sequence +0:66 move second child to first child ( temp 2-component vector of uint) +0:66 'r12' ( temp 2-component vector of uint) +0:66 imageLoad ( temp 2-component vector of uint) +0:66 'g_tTex2du2' (layout( rg32ui) uniform uimage2D) +0:66 c2: direct index for structure ( uniform 2-component vector of int) +0:66 '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:66 Constant: +0:66 1 (const uint) +0:69 Sequence +0:69 move second child to first child ( temp 2-component vector of float) +0:69 'r20' ( temp 2-component vector of float) +0:69 imageLoad ( temp 2-component vector of float) +0:69 'g_tTex3df2' (layout( rg32f) uniform image3D) +0:69 c3: direct index for structure ( uniform 3-component vector of int) +0:69 '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:69 Constant: +0:69 2 (const uint) +0:70 Sequence +0:70 move second child to first child ( temp 2-component vector of int) +0:70 'r21' ( temp 2-component vector of int) +0:70 imageLoad ( temp 2-component vector of int) +0:70 'g_tTex3di2' (layout( rg32i) uniform iimage3D) +0:70 c3: direct index for structure ( uniform 3-component vector of int) +0:70 '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:70 Constant: +0:70 2 (const uint) +0:71 Sequence +0:71 move second child to first child ( temp 2-component vector of uint) +0:71 'r22' ( temp 2-component vector of uint) +0:71 imageLoad ( temp 2-component vector of uint) +0:71 'g_tTex3du2' (layout( rg32ui) uniform uimage3D) +0:71 c3: direct index for structure ( uniform 3-component vector of int) +0:71 '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:71 Constant: +0:71 2 (const uint) +0:73 Sequence +0:73 move second child to first child ( temp 2-component vector of float) +0:73 'lf2' ( temp 2-component vector of float) +0:73 uf2: direct index for structure ( uniform 2-component vector of float) +0:73 '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:73 Constant: +0:73 8 (const uint) +0:77 Sequence +0:77 move second child to first child ( temp 2-component vector of float) +0:77 'storeTemp' ( temp 2-component vector of float) +0:77 Function Call: SomeValue( ( temp 2-component vector of float) +0:77 imageStore ( temp void) +0:77 'g_tTex1df2' (layout( rg32f) uniform image1D) +0:77 c1: direct index for structure ( uniform int) +0:77 '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:77 Constant: +0:77 0 (const uint) +0:77 'storeTemp' ( temp 2-component vector of float) +0:77 'storeTemp' ( temp 2-component vector of float) +0:78 Sequence +0:78 imageStore ( temp void) +0:78 'g_tTex1df2' (layout( rg32f) uniform image1D) +0:78 c1: direct index for structure ( uniform int) +0:78 '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:78 Constant: +0:78 0 (const uint) +0:78 'lf2' ( temp 2-component vector of float) +0:78 'lf2' ( temp 2-component vector of float) +0:79 Sequence +0:79 move second child to first child ( temp 2-component vector of int) +0:79 'storeTemp' ( temp 2-component vector of int) +0:? Constant: +0:? 2 (const int) +0:? 2 (const int) +0:79 imageStore ( temp void) +0:79 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:79 c1: direct index for structure ( uniform int) +0:79 '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:79 Constant: +0:79 0 (const uint) +0:79 'storeTemp' ( temp 2-component vector of int) +0:79 'storeTemp' ( temp 2-component vector of int) +0:80 Sequence +0:80 move second child to first child ( temp 2-component vector of uint) +0:80 'storeTemp' ( temp 2-component vector of uint) +0:? Constant: +0:? 3 (const uint) +0:? 2 (const uint) +0:80 imageStore ( temp void) +0:80 'g_tTex1du2' (layout( rg32ui) uniform uimage1D) +0:80 c1: direct index for structure ( uniform int) +0:80 '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:80 Constant: +0:80 0 (const uint) +0:80 'storeTemp' ( temp 2-component vector of uint) +0:80 'storeTemp' ( temp 2-component vector of uint) +0:83 Sequence +0:83 move second child to first child ( temp 2-component vector of float) +0:83 'val1' ( temp 2-component vector of float) +0:83 Sequence +0:83 move second child to first child ( temp int) +0:83 'coordTemp' ( temp int) +0:83 c1: direct index for structure ( uniform int) +0:83 '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:83 Constant: +0:83 0 (const uint) +0:83 move second child to first child ( temp 2-component vector of float) +0:83 'storeTemp' ( temp 2-component vector of float) +0:83 imageLoad ( temp 2-component vector of float) +0:83 'g_tTex1df2' (layout( rg32f) uniform image1D) +0:83 'coordTemp' ( temp int) +0:83 vector scale second child into first child ( temp 2-component vector of float) +0:83 'storeTemp' ( temp 2-component vector of float) +0:83 Constant: +0:83 2.000000 +0:83 imageStore ( temp void) +0:83 'g_tTex1df2' (layout( rg32f) uniform image1D) +0:83 'coordTemp' ( temp int) +0:83 'storeTemp' ( temp 2-component vector of float) +0:83 'storeTemp' ( temp 2-component vector of float) +0:84 Sequence +0:84 move second child to first child ( temp int) +0:84 'coordTemp' ( temp int) +0:84 c1: direct index for structure ( uniform int) +0:84 '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:84 Constant: +0:84 0 (const uint) +0:84 move second child to first child ( temp 2-component vector of float) +0:84 'storeTemp' ( temp 2-component vector of float) +0:84 imageLoad ( temp 2-component vector of float) +0:84 'g_tTex1df2' (layout( rg32f) uniform image1D) +0:84 'coordTemp' ( temp int) +0:84 subtract second child into first child ( temp 2-component vector of float) +0:84 'storeTemp' ( temp 2-component vector of float) +0:84 Constant: +0:84 3.000000 +0:84 imageStore ( temp void) +0:84 'g_tTex1df2' (layout( rg32f) uniform image1D) +0:84 'coordTemp' ( temp int) +0:84 'storeTemp' ( temp 2-component vector of float) +0:84 'storeTemp' ( temp 2-component vector of float) +0:85 Sequence +0:85 move second child to first child ( temp int) +0:85 'coordTemp' ( temp int) +0:85 c1: direct index for structure ( uniform int) +0:85 '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:85 Constant: +0:85 0 (const uint) +0:85 move second child to first child ( temp 2-component vector of float) +0:85 'storeTemp' ( temp 2-component vector of float) +0:85 imageLoad ( temp 2-component vector of float) +0:85 'g_tTex1df2' (layout( rg32f) uniform image1D) +0:85 'coordTemp' ( temp int) +0:85 add second child into first child ( temp 2-component vector of float) +0:85 'storeTemp' ( temp 2-component vector of float) +0:85 Constant: +0:85 4.000000 +0:85 imageStore ( temp void) +0:85 'g_tTex1df2' (layout( rg32f) uniform image1D) +0:85 'coordTemp' ( temp int) +0:85 'storeTemp' ( temp 2-component vector of float) +0:85 'storeTemp' ( temp 2-component vector of float) +0:87 Sequence +0:87 move second child to first child ( temp int) +0:87 'coordTemp' ( temp int) +0:87 c1: direct index for structure ( uniform int) +0:87 '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:87 Constant: +0:87 0 (const uint) +0:87 move second child to first child ( temp 2-component vector of int) +0:87 'storeTemp' ( temp 2-component vector of int) +0:87 imageLoad ( temp 2-component vector of int) +0:87 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:87 'coordTemp' ( temp int) +0:87 divide second child into first child ( temp 2-component vector of int) +0:87 'storeTemp' ( temp 2-component vector of int) +0:87 Constant: +0:87 2 (const int) +0:87 imageStore ( temp void) +0:87 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:87 'coordTemp' ( temp int) +0:87 'storeTemp' ( temp 2-component vector of int) +0:87 'storeTemp' ( temp 2-component vector of int) +0:88 Sequence +0:88 move second child to first child ( temp int) +0:88 'coordTemp' ( temp int) +0:88 c1: direct index for structure ( uniform int) +0:88 '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:88 Constant: +0:88 0 (const uint) +0:88 move second child to first child ( temp 2-component vector of int) +0:88 'storeTemp' ( temp 2-component vector of int) +0:88 imageLoad ( temp 2-component vector of int) +0:88 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:88 'coordTemp' ( temp int) +0:88 mod second child into first child ( temp 2-component vector of int) +0:88 'storeTemp' ( temp 2-component vector of int) +0:88 Constant: +0:88 2 (const int) +0:88 imageStore ( temp void) +0:88 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:88 'coordTemp' ( temp int) +0:88 'storeTemp' ( temp 2-component vector of int) +0:88 'storeTemp' ( temp 2-component vector of int) +0:89 Sequence +0:89 move second child to first child ( temp int) +0:89 'coordTemp' ( temp int) +0:89 c1: direct index for structure ( uniform int) +0:89 '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:89 Constant: +0:89 0 (const uint) +0:89 move second child to first child ( temp 2-component vector of int) +0:89 'storeTemp' ( temp 2-component vector of int) +0:89 imageLoad ( temp 2-component vector of int) +0:89 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:89 'coordTemp' ( temp int) +0:89 and second child into first child ( temp 2-component vector of int) +0:89 'storeTemp' ( temp 2-component vector of int) +0:89 Constant: +0:89 65535 (const int) +0:89 imageStore ( temp void) +0:89 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:89 'coordTemp' ( temp int) +0:89 'storeTemp' ( temp 2-component vector of int) +0:89 'storeTemp' ( temp 2-component vector of int) +0:90 Sequence +0:90 move second child to first child ( temp int) +0:90 'coordTemp' ( temp int) +0:90 c1: direct index for structure ( uniform int) +0:90 '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:90 Constant: +0:90 0 (const uint) +0:90 move second child to first child ( temp 2-component vector of int) +0:90 'storeTemp' ( temp 2-component vector of int) +0:90 imageLoad ( temp 2-component vector of int) +0:90 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:90 'coordTemp' ( temp int) +0:90 or second child into first child ( temp 2-component vector of int) +0:90 'storeTemp' ( temp 2-component vector of int) +0:90 Constant: +0:90 61680 (const int) +0:90 imageStore ( temp void) +0:90 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:90 'coordTemp' ( temp int) +0:90 'storeTemp' ( temp 2-component vector of int) +0:90 'storeTemp' ( temp 2-component vector of int) +0:91 Sequence +0:91 move second child to first child ( temp int) +0:91 'coordTemp' ( temp int) +0:91 c1: direct index for structure ( uniform int) +0:91 '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:91 Constant: +0:91 0 (const uint) +0:91 move second child to first child ( temp 2-component vector of int) +0:91 'storeTemp' ( temp 2-component vector of int) +0:91 imageLoad ( temp 2-component vector of int) +0:91 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:91 'coordTemp' ( temp int) +0:91 left shift second child into first child ( temp 2-component vector of int) +0:91 'storeTemp' ( temp 2-component vector of int) +0:91 Constant: +0:91 2 (const int) +0:91 imageStore ( temp void) +0:91 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:91 'coordTemp' ( temp int) +0:91 'storeTemp' ( temp 2-component vector of int) +0:91 'storeTemp' ( temp 2-component vector of int) +0:92 Sequence +0:92 move second child to first child ( temp int) +0:92 'coordTemp' ( temp int) +0:92 c1: direct index for structure ( uniform int) +0:92 '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:92 Constant: +0:92 0 (const uint) +0:92 move second child to first child ( temp 2-component vector of int) +0:92 'storeTemp' ( temp 2-component vector of int) +0:92 imageLoad ( temp 2-component vector of int) +0:92 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:92 'coordTemp' ( temp int) +0:92 right shift second child into first child ( temp 2-component vector of int) +0:92 'storeTemp' ( temp 2-component vector of int) +0:92 Constant: +0:92 2 (const int) +0:92 imageStore ( temp void) +0:92 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:92 'coordTemp' ( temp int) +0:92 'storeTemp' ( temp 2-component vector of int) +0:92 'storeTemp' ( temp 2-component vector of int) +0:95 Sequence +0:95 move second child to first child ( temp 2-component vector of float) +0:95 'storeTemp' ( temp 2-component vector of float) +0:95 Function Call: SomeValue( ( temp 2-component vector of float) +0:95 imageStore ( temp void) +0:95 'g_tTex2df2' (layout( rg32f) uniform image2D) +0:95 c2: direct index for structure ( uniform 2-component vector of int) +0:95 '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:95 Constant: +0:95 1 (const uint) +0:95 'storeTemp' ( temp 2-component vector of float) +0:95 'storeTemp' ( temp 2-component vector of float) +0:96 Sequence +0:96 imageStore ( temp void) +0:96 'g_tTex2df2' (layout( rg32f) uniform image2D) +0:96 c2: direct index for structure ( uniform 2-component vector of int) +0:96 '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:96 Constant: +0:96 1 (const uint) +0:96 'lf2' ( temp 2-component vector of float) +0:96 'lf2' ( temp 2-component vector of float) +0:97 Sequence +0:97 move second child to first child ( temp 2-component vector of int) +0:97 'storeTemp' ( temp 2-component vector of int) +0:? Constant: +0:? 5 (const int) +0:? 2 (const int) +0:97 imageStore ( temp void) +0:97 'g_tTex2di2' (layout( rg32i) uniform iimage2D) +0:97 c2: direct index for structure ( uniform 2-component vector of int) +0:97 '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:97 Constant: +0:97 1 (const uint) +0:97 'storeTemp' ( temp 2-component vector of int) +0:97 'storeTemp' ( temp 2-component vector of int) +0:98 Sequence +0:98 move second child to first child ( temp 2-component vector of uint) +0:98 'storeTemp' ( temp 2-component vector of uint) +0:? Constant: +0:? 6 (const uint) +0:? 2 (const uint) +0:98 imageStore ( temp void) +0:98 'g_tTex2du2' (layout( rg32ui) uniform uimage2D) +0:98 c2: direct index for structure ( uniform 2-component vector of int) +0:98 '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:98 Constant: +0:98 1 (const uint) +0:98 'storeTemp' ( temp 2-component vector of uint) +0:98 'storeTemp' ( temp 2-component vector of uint) +0:101 Sequence +0:101 move second child to first child ( temp 2-component vector of float) +0:101 'storeTemp' ( temp 2-component vector of float) +0:101 Function Call: SomeValue( ( temp 2-component vector of float) +0:101 imageStore ( temp void) +0:101 'g_tTex3df2' (layout( rg32f) uniform image3D) +0:101 c3: direct index for structure ( uniform 3-component vector of int) +0:101 '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:101 Constant: +0:101 2 (const uint) +0:101 'storeTemp' ( temp 2-component vector of float) +0:101 'storeTemp' ( temp 2-component vector of float) +0:102 Sequence +0:102 imageStore ( temp void) +0:102 'g_tTex3df2' (layout( rg32f) uniform image3D) +0:102 c3: direct index for structure ( uniform 3-component vector of int) +0:102 '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:102 Constant: +0:102 2 (const uint) +0:102 'lf2' ( temp 2-component vector of float) +0:102 'lf2' ( temp 2-component vector of float) +0:103 Sequence +0:103 move second child to first child ( temp 2-component vector of int) +0:103 'storeTemp' ( temp 2-component vector of int) +0:? Constant: +0:? 8 (const int) +0:? 6 (const int) +0:103 imageStore ( temp void) +0:103 'g_tTex3di2' (layout( rg32i) uniform iimage3D) +0:103 c3: direct index for structure ( uniform 3-component vector of int) +0:103 '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:103 Constant: +0:103 2 (const uint) +0:103 'storeTemp' ( temp 2-component vector of int) +0:103 'storeTemp' ( temp 2-component vector of int) +0:104 Sequence +0:104 move second child to first child ( temp 2-component vector of uint) +0:104 'storeTemp' ( temp 2-component vector of uint) +0:? Constant: +0:? 9 (const uint) +0:? 2 (const uint) +0:104 imageStore ( temp void) +0:104 'g_tTex3du2' (layout( rg32ui) uniform uimage3D) +0:104 c3: direct index for structure ( uniform 3-component vector of int) +0:104 '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:104 Constant: +0:104 2 (const uint) +0:104 'storeTemp' ( temp 2-component vector of uint) +0:104 'storeTemp' ( temp 2-component vector of uint) +0:107 Function Call: Fn1(vf2; ( temp 2-component vector of float) +0:107 imageLoad ( temp 2-component vector of float) +0:107 'g_tTex1df2' (layout( rg32f) uniform image1D) +0:107 c1: direct index for structure ( uniform int) +0:107 '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:107 Constant: +0:107 0 (const uint) +0:108 Function Call: Fn1(vi2; ( temp 2-component vector of int) +0:108 imageLoad ( temp 2-component vector of int) +0:108 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:108 c1: direct index for structure ( uniform int) +0:108 '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:108 Constant: +0:108 0 (const uint) +0:109 Function Call: Fn1(vu2; ( temp 2-component vector of uint) +0:109 imageLoad ( temp 2-component vector of uint) +0:109 'g_tTex1du2' (layout( rg32ui) uniform uimage1D) +0:109 c1: direct index for structure ( uniform int) +0:109 '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:109 Constant: +0:109 0 (const uint) +0:111 Comma ( temp void) +0:111 Function Call: Fn2(vf2; ( temp void) +0:111 'tempArg' ( temp 2-component vector of float) +0:111 Sequence +0:111 imageStore ( temp void) +0:111 'g_tTex1df2' (layout( rg32f) uniform image1D) +0:111 c1: direct index for structure ( uniform int) +0:111 '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:111 Constant: +0:111 0 (const uint) +0:111 'tempArg' ( temp 2-component vector of float) +0:111 'tempArg' ( temp 2-component vector of float) +0:112 Comma ( temp void) +0:112 Function Call: Fn2(vi2; ( temp void) +0:112 'tempArg' ( temp 2-component vector of int) +0:112 Sequence +0:112 imageStore ( temp void) +0:112 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:112 c1: direct index for structure ( uniform int) +0:112 '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:112 Constant: +0:112 0 (const uint) +0:112 'tempArg' ( temp 2-component vector of int) +0:112 'tempArg' ( temp 2-component vector of int) +0:113 Comma ( temp void) +0:113 Function Call: Fn2(vu2; ( temp void) +0:113 'tempArg' ( temp 2-component vector of uint) +0:113 Sequence +0:113 imageStore ( temp void) +0:113 'g_tTex1du2' (layout( rg32ui) uniform uimage1D) +0:113 c1: direct index for structure ( uniform int) +0:113 '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:113 Constant: +0:113 0 (const uint) +0:113 'tempArg' ( temp 2-component vector of uint) +0:113 'tempArg' ( temp 2-component vector of uint) +0:117 Sequence +0:117 move second child to first child ( temp int) +0:117 'coordTemp' ( temp int) +0:117 c1: direct index for structure ( uniform int) +0:117 '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:117 Constant: +0:117 0 (const uint) +0:117 move second child to first child ( temp 2-component vector of float) +0:117 'storeTemp' ( temp 2-component vector of float) +0:117 imageLoad ( temp 2-component vector of float) +0:117 'g_tTex1df2' (layout( rg32f) uniform image1D) +0:117 'coordTemp' ( temp int) +0:117 Pre-Increment ( temp 2-component vector of float) +0:117 'storeTemp' ( temp 2-component vector of float) +0:117 imageStore ( temp void) +0:117 'g_tTex1df2' (layout( rg32f) uniform image1D) +0:117 'coordTemp' ( temp int) +0:117 'storeTemp' ( temp 2-component vector of float) +0:117 'storeTemp' ( temp 2-component vector of float) +0:118 Sequence +0:118 move second child to first child ( temp int) +0:118 'coordTemp' ( temp int) +0:118 c1: direct index for structure ( uniform int) +0:118 '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:118 Constant: +0:118 0 (const uint) +0:118 move second child to first child ( temp 2-component vector of int) +0:118 'storeTemp' ( temp 2-component vector of int) +0:118 imageLoad ( temp 2-component vector of int) +0:118 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:118 'coordTemp' ( temp int) +0:118 Pre-Increment ( temp 2-component vector of int) +0:118 'storeTemp' ( temp 2-component vector of int) +0:118 imageStore ( temp void) +0:118 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:118 'coordTemp' ( temp int) +0:118 'storeTemp' ( temp 2-component vector of int) +0:118 'storeTemp' ( temp 2-component vector of int) +0:119 Sequence +0:119 move second child to first child ( temp int) +0:119 'coordTemp' ( temp int) +0:119 c1: direct index for structure ( uniform int) +0:119 '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:119 Constant: +0:119 0 (const uint) +0:119 move second child to first child ( temp 2-component vector of uint) +0:119 'storeTemp' ( temp 2-component vector of uint) +0:119 imageLoad ( temp 2-component vector of uint) +0:119 'g_tTex1du2' (layout( rg32ui) uniform uimage1D) +0:119 'coordTemp' ( temp int) +0:119 Pre-Increment ( temp 2-component vector of uint) +0:119 'storeTemp' ( temp 2-component vector of uint) +0:119 imageStore ( temp void) +0:119 'g_tTex1du2' (layout( rg32ui) uniform uimage1D) +0:119 'coordTemp' ( temp int) +0:119 'storeTemp' ( temp 2-component vector of uint) +0:119 'storeTemp' ( temp 2-component vector of uint) +0:121 Sequence +0:121 move second child to first child ( temp int) +0:121 'coordTemp' ( temp int) +0:121 c1: direct index for structure ( uniform int) +0:121 '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:121 Constant: +0:121 0 (const uint) +0:121 move second child to first child ( temp 2-component vector of float) +0:121 'storeTemp' ( temp 2-component vector of float) +0:121 imageLoad ( temp 2-component vector of float) +0:121 'g_tTex1df2' (layout( rg32f) uniform image1D) +0:121 'coordTemp' ( temp int) +0:121 Pre-Decrement ( temp 2-component vector of float) +0:121 'storeTemp' ( temp 2-component vector of float) +0:121 imageStore ( temp void) +0:121 'g_tTex1df2' (layout( rg32f) uniform image1D) +0:121 'coordTemp' ( temp int) +0:121 'storeTemp' ( temp 2-component vector of float) +0:121 'storeTemp' ( temp 2-component vector of float) +0:122 Sequence +0:122 move second child to first child ( temp int) +0:122 'coordTemp' ( temp int) +0:122 c1: direct index for structure ( uniform int) +0:122 '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:122 Constant: +0:122 0 (const uint) +0:122 move second child to first child ( temp 2-component vector of int) +0:122 'storeTemp' ( temp 2-component vector of int) +0:122 imageLoad ( temp 2-component vector of int) +0:122 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:122 'coordTemp' ( temp int) +0:122 Pre-Decrement ( temp 2-component vector of int) +0:122 'storeTemp' ( temp 2-component vector of int) +0:122 imageStore ( temp void) +0:122 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:122 'coordTemp' ( temp int) +0:122 'storeTemp' ( temp 2-component vector of int) +0:122 'storeTemp' ( temp 2-component vector of int) +0:123 Sequence +0:123 move second child to first child ( temp int) +0:123 'coordTemp' ( temp int) +0:123 c1: direct index for structure ( uniform int) +0:123 '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:123 Constant: +0:123 0 (const uint) +0:123 move second child to first child ( temp 2-component vector of uint) +0:123 'storeTemp' ( temp 2-component vector of uint) +0:123 imageLoad ( temp 2-component vector of uint) +0:123 'g_tTex1du2' (layout( rg32ui) uniform uimage1D) +0:123 'coordTemp' ( temp int) +0:123 Pre-Decrement ( temp 2-component vector of uint) +0:123 'storeTemp' ( temp 2-component vector of uint) +0:123 imageStore ( temp void) +0:123 'g_tTex1du2' (layout( rg32ui) uniform uimage1D) +0:123 'coordTemp' ( temp int) +0:123 'storeTemp' ( temp 2-component vector of uint) +0:123 'storeTemp' ( temp 2-component vector of uint) +0:126 Sequence +0:126 move second child to first child ( temp int) +0:126 'coordTemp' ( temp int) +0:126 c1: direct index for structure ( uniform int) +0:126 '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:126 Constant: +0:126 0 (const uint) +0:126 move second child to first child ( temp 2-component vector of float) +0:126 'storeTempPre' ( temp 2-component vector of float) +0:126 imageLoad ( temp 2-component vector of float) +0:126 'g_tTex1df2' (layout( rg32f) uniform image1D) +0:126 'coordTemp' ( temp int) +0:126 move second child to first child ( temp 2-component vector of float) +0:126 'storeTempPost' ( temp 2-component vector of float) +0:126 'storeTempPre' ( temp 2-component vector of float) +0:126 Post-Increment ( temp 2-component vector of float) +0:126 'storeTempPost' ( temp 2-component vector of float) +0:126 imageStore ( temp void) +0:126 'g_tTex1df2' (layout( rg32f) uniform image1D) +0:126 'coordTemp' ( temp int) +0:126 'storeTempPost' ( temp 2-component vector of float) +0:126 'storeTempPre' ( temp 2-component vector of float) +0:127 Sequence +0:127 move second child to first child ( temp int) +0:127 'coordTemp' ( temp int) +0:127 c1: direct index for structure ( uniform int) +0:127 '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:127 Constant: +0:127 0 (const uint) +0:127 move second child to first child ( temp 2-component vector of uint) +0:127 'storeTempPre' ( temp 2-component vector of uint) +0:127 imageLoad ( temp 2-component vector of uint) +0:127 'g_tTex1du2' (layout( rg32ui) uniform uimage1D) +0:127 'coordTemp' ( temp int) +0:127 move second child to first child ( temp 2-component vector of uint) +0:127 'storeTempPost' ( temp 2-component vector of uint) +0:127 'storeTempPre' ( temp 2-component vector of uint) +0:127 Post-Decrement ( temp 2-component vector of uint) +0:127 'storeTempPost' ( temp 2-component vector of uint) +0:127 imageStore ( temp void) +0:127 'g_tTex1du2' (layout( rg32ui) uniform uimage1D) +0:127 'coordTemp' ( temp int) +0:127 'storeTempPost' ( temp 2-component vector of uint) +0:127 'storeTempPre' ( temp 2-component vector of uint) +0:128 Sequence +0:128 move second child to first child ( temp int) +0:128 'coordTemp' ( temp int) +0:128 c1: direct index for structure ( uniform int) +0:128 '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:128 Constant: +0:128 0 (const uint) +0:128 move second child to first child ( temp 2-component vector of int) +0:128 'storeTempPre' ( temp 2-component vector of int) +0:128 imageLoad ( temp 2-component vector of int) +0:128 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:128 'coordTemp' ( temp int) +0:128 move second child to first child ( temp 2-component vector of int) +0:128 'storeTempPost' ( temp 2-component vector of int) +0:128 'storeTempPre' ( temp 2-component vector of int) +0:128 Post-Increment ( temp 2-component vector of int) +0:128 'storeTempPost' ( temp 2-component vector of int) +0:128 imageStore ( temp void) +0:128 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:128 'coordTemp' ( temp int) +0:128 'storeTempPost' ( temp 2-component vector of int) +0:128 'storeTempPre' ( temp 2-component vector of int) +0:130 Sequence +0:130 move second child to first child ( temp int) +0:130 'coordTemp' ( temp int) +0:130 c1: direct index for structure ( uniform int) +0:130 '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:130 Constant: +0:130 0 (const uint) +0:130 move second child to first child ( temp 2-component vector of float) +0:130 'storeTempPre' ( temp 2-component vector of float) +0:130 imageLoad ( temp 2-component vector of float) +0:130 'g_tTex1df2' (layout( rg32f) uniform image1D) +0:130 'coordTemp' ( temp int) +0:130 move second child to first child ( temp 2-component vector of float) +0:130 'storeTempPost' ( temp 2-component vector of float) +0:130 'storeTempPre' ( temp 2-component vector of float) +0:130 Post-Decrement ( temp 2-component vector of float) +0:130 'storeTempPost' ( temp 2-component vector of float) +0:130 imageStore ( temp void) +0:130 'g_tTex1df2' (layout( rg32f) uniform image1D) +0:130 'coordTemp' ( temp int) +0:130 'storeTempPost' ( temp 2-component vector of float) +0:130 'storeTempPre' ( temp 2-component vector of float) +0:131 Sequence +0:131 move second child to first child ( temp int) +0:131 'coordTemp' ( temp int) +0:131 c1: direct index for structure ( uniform int) +0:131 '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:131 Constant: +0:131 0 (const uint) +0:131 move second child to first child ( temp 2-component vector of int) +0:131 'storeTempPre' ( temp 2-component vector of int) +0:131 imageLoad ( temp 2-component vector of int) +0:131 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:131 'coordTemp' ( temp int) +0:131 move second child to first child ( temp 2-component vector of int) +0:131 'storeTempPost' ( temp 2-component vector of int) +0:131 'storeTempPre' ( temp 2-component vector of int) +0:131 Post-Increment ( temp 2-component vector of int) +0:131 'storeTempPost' ( temp 2-component vector of int) +0:131 imageStore ( temp void) +0:131 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:131 'coordTemp' ( temp int) +0:131 'storeTempPost' ( temp 2-component vector of int) +0:131 'storeTempPre' ( temp 2-component vector of int) +0:132 Sequence +0:132 move second child to first child ( temp int) +0:132 'coordTemp' ( temp int) +0:132 c1: direct index for structure ( uniform int) +0:132 '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:132 Constant: +0:132 0 (const uint) +0:132 move second child to first child ( temp 2-component vector of uint) +0:132 'storeTempPre' ( temp 2-component vector of uint) +0:132 imageLoad ( temp 2-component vector of uint) +0:132 'g_tTex1du2' (layout( rg32ui) uniform uimage1D) +0:132 'coordTemp' ( temp int) +0:132 move second child to first child ( temp 2-component vector of uint) +0:132 'storeTempPost' ( temp 2-component vector of uint) +0:132 'storeTempPre' ( temp 2-component vector of uint) +0:132 Post-Decrement ( temp 2-component vector of uint) +0:132 'storeTempPost' ( temp 2-component vector of uint) +0:132 imageStore ( temp void) +0:132 'g_tTex1du2' (layout( rg32ui) uniform uimage1D) +0:132 'coordTemp' ( temp int) +0:132 'storeTempPost' ( temp 2-component vector of uint) +0:132 'storeTempPre' ( temp 2-component vector of uint) +0:135 Sequence +0:135 move second child to first child ( temp 2-component vector of float) +0:135 'storeTemp' ( temp 2-component vector of float) +0:? imageLoad ( temp 2-component vector of float) +0:135 'g_tTex2df2' (layout( rg32f) uniform image2D) +0:? Constant: +0:? 2 (const int) +0:? 3 (const int) +0:135 imageStore ( temp void) +0:135 'g_tTex1df2' (layout( rg32f) uniform image1D) +0:135 Constant: +0:135 1 (const int) +0:135 'storeTemp' ( temp 2-component vector of float) +0:135 'storeTemp' ( temp 2-component vector of float) +0:137 move second child to first child ( temp 4-component vector of float) +0:137 Color: direct index for structure ( temp 4-component vector of float) +0:137 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:137 Constant: +0:137 0 (const int) +0:137 Constant: +0:137 1.000000 +0:137 1.000000 +0:137 1.000000 +0:137 1.000000 +0:139 Branch: Return with expression +0:139 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:53 Function Definition: main( ( temp void) +0:53 Function Parameters: +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: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: +0:53 0 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df2' (layout( rg32f) uniform image1D) +0:? 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:? 'g_tTex1du2' (layout( rg32ui) uniform uimage1D) +0:? 'g_tTex2df2' (layout( rg32f) uniform image2D) +0:? 'g_tTex2di2' (layout( rg32i) uniform iimage2D) +0:? 'g_tTex2du2' (layout( rg32ui) uniform uimage2D) +0:? 'g_tTex3df2' (layout( rg32f) uniform image3D) +0:? 'g_tTex3di2' (layout( rg32i) uniform iimage3D) +0:? 'g_tTex3du2' (layout( rg32ui) uniform uimage3D) +0:? 'g_tTex1df2a' (layout( rg32f) uniform image1DArray) +0:? 'g_tTex1di2a' (layout( rg32i) uniform iimage1DArray) +0:? 'g_tTex1du2a' (layout( rg32ui) uniform uimage1DArray) +0:? 'g_tTex2df2a' (layout( rg32f) uniform image2DArray) +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) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:42 Function Definition: Fn1(vi2; ( temp 2-component vector of int) +0:42 Function Parameters: +0:42 'x' ( in 2-component vector of int) +0:? Sequence +0:42 Branch: Return with expression +0:42 'x' ( in 2-component vector of int) +0:43 Function Definition: Fn1(vu2; ( temp 2-component vector of uint) +0:43 Function Parameters: +0:43 'x' ( in 2-component vector of uint) +0:? Sequence +0:43 Branch: Return with expression +0:43 'x' ( in 2-component vector of uint) +0:44 Function Definition: Fn1(vf2; ( temp 2-component vector of float) +0:44 Function Parameters: +0:44 'x' ( in 2-component vector of float) +0:? Sequence +0:44 Branch: Return with expression +0:44 'x' ( in 2-component vector of float) +0:46 Function Definition: Fn2(vi2; ( temp void) +0:46 Function Parameters: +0:46 'x' ( out 2-component vector of int) +0:? Sequence +0:46 move second child to first child ( temp 2-component vector of int) +0:46 'x' ( out 2-component vector of int) +0:? Constant: +0:? 0 (const int) +0:? 0 (const int) +0:47 Function Definition: Fn2(vu2; ( temp void) +0:47 Function Parameters: +0:47 'x' ( out 2-component vector of uint) +0:? Sequence +0:47 move second child to first child ( temp 2-component vector of uint) +0:47 'x' ( out 2-component vector of uint) +0:? Constant: +0:? 0 (const uint) +0:? 0 (const uint) +0:48 Function Definition: Fn2(vf2; ( temp void) +0:48 Function Parameters: +0:48 'x' ( out 2-component vector of float) +0:? Sequence +0:48 move second child to first child ( temp 2-component vector of float) +0:48 'x' ( out 2-component vector of float) +0:? Constant: +0:? 0.000000 +0:? 0.000000 +0:50 Function Definition: SomeValue( ( temp 2-component vector of float) +0:50 Function Parameters: +0:? Sequence +0:50 Branch: Return with expression +0:50 Convert int to float ( temp 2-component vector of float) +0:50 c2: direct index for structure ( uniform 2-component vector of int) +0:50 '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:50 Constant: +0:50 1 (const uint) +0:53 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color}) +0:53 Function Parameters: +0:? Sequence +0:57 imageLoad ( temp 2-component vector of float) +0:57 'g_tTex1df2' (layout( rg32f) uniform image1D) +0:57 c1: direct index for structure ( uniform int) +0:57 '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:57 Constant: +0:57 0 (const uint) +0:59 Sequence +0:59 move second child to first child ( temp 2-component vector of float) +0:59 'r00' ( temp 2-component vector of float) +0:59 imageLoad ( temp 2-component vector of float) +0:59 'g_tTex1df2' (layout( rg32f) uniform image1D) +0:59 c1: direct index for structure ( uniform int) +0:59 '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:59 Constant: +0:59 0 (const uint) +0:60 Sequence +0:60 move second child to first child ( temp 2-component vector of int) +0:60 'r01' ( temp 2-component vector of int) +0:60 imageLoad ( temp 2-component vector of int) +0:60 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:60 c1: direct index for structure ( uniform int) +0:60 '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:60 Constant: +0:60 0 (const uint) +0:61 Sequence +0:61 move second child to first child ( temp 2-component vector of uint) +0:61 'r02' ( temp 2-component vector of uint) +0:61 imageLoad ( temp 2-component vector of uint) +0:61 'g_tTex1du2' (layout( rg32ui) uniform uimage1D) +0:61 c1: direct index for structure ( uniform int) +0:61 '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:61 Constant: +0:61 0 (const uint) +0:64 Sequence +0:64 move second child to first child ( temp 2-component vector of float) +0:64 'r10' ( temp 2-component vector of float) +0:64 imageLoad ( temp 2-component vector of float) +0:64 'g_tTex2df2' (layout( rg32f) uniform image2D) +0:64 c2: direct index for structure ( uniform 2-component vector of int) +0:64 '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:64 Constant: +0:64 1 (const uint) +0:65 Sequence +0:65 move second child to first child ( temp 2-component vector of int) +0:65 'r11' ( temp 2-component vector of int) +0:65 imageLoad ( temp 2-component vector of int) +0:65 'g_tTex2di2' (layout( rg32i) uniform iimage2D) +0:65 c2: direct index for structure ( uniform 2-component vector of int) +0:65 '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:65 Constant: +0:65 1 (const uint) +0:66 Sequence +0:66 move second child to first child ( temp 2-component vector of uint) +0:66 'r12' ( temp 2-component vector of uint) +0:66 imageLoad ( temp 2-component vector of uint) +0:66 'g_tTex2du2' (layout( rg32ui) uniform uimage2D) +0:66 c2: direct index for structure ( uniform 2-component vector of int) +0:66 '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:66 Constant: +0:66 1 (const uint) +0:69 Sequence +0:69 move second child to first child ( temp 2-component vector of float) +0:69 'r20' ( temp 2-component vector of float) +0:69 imageLoad ( temp 2-component vector of float) +0:69 'g_tTex3df2' (layout( rg32f) uniform image3D) +0:69 c3: direct index for structure ( uniform 3-component vector of int) +0:69 '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:69 Constant: +0:69 2 (const uint) +0:70 Sequence +0:70 move second child to first child ( temp 2-component vector of int) +0:70 'r21' ( temp 2-component vector of int) +0:70 imageLoad ( temp 2-component vector of int) +0:70 'g_tTex3di2' (layout( rg32i) uniform iimage3D) +0:70 c3: direct index for structure ( uniform 3-component vector of int) +0:70 '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:70 Constant: +0:70 2 (const uint) +0:71 Sequence +0:71 move second child to first child ( temp 2-component vector of uint) +0:71 'r22' ( temp 2-component vector of uint) +0:71 imageLoad ( temp 2-component vector of uint) +0:71 'g_tTex3du2' (layout( rg32ui) uniform uimage3D) +0:71 c3: direct index for structure ( uniform 3-component vector of int) +0:71 '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:71 Constant: +0:71 2 (const uint) +0:73 Sequence +0:73 move second child to first child ( temp 2-component vector of float) +0:73 'lf2' ( temp 2-component vector of float) +0:73 uf2: direct index for structure ( uniform 2-component vector of float) +0:73 '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:73 Constant: +0:73 8 (const uint) +0:77 Sequence +0:77 move second child to first child ( temp 2-component vector of float) +0:77 'storeTemp' ( temp 2-component vector of float) +0:77 Function Call: SomeValue( ( temp 2-component vector of float) +0:77 imageStore ( temp void) +0:77 'g_tTex1df2' (layout( rg32f) uniform image1D) +0:77 c1: direct index for structure ( uniform int) +0:77 '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:77 Constant: +0:77 0 (const uint) +0:77 'storeTemp' ( temp 2-component vector of float) +0:77 'storeTemp' ( temp 2-component vector of float) +0:78 Sequence +0:78 imageStore ( temp void) +0:78 'g_tTex1df2' (layout( rg32f) uniform image1D) +0:78 c1: direct index for structure ( uniform int) +0:78 '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:78 Constant: +0:78 0 (const uint) +0:78 'lf2' ( temp 2-component vector of float) +0:78 'lf2' ( temp 2-component vector of float) +0:79 Sequence +0:79 move second child to first child ( temp 2-component vector of int) +0:79 'storeTemp' ( temp 2-component vector of int) +0:? Constant: +0:? 2 (const int) +0:? 2 (const int) +0:79 imageStore ( temp void) +0:79 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:79 c1: direct index for structure ( uniform int) +0:79 '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:79 Constant: +0:79 0 (const uint) +0:79 'storeTemp' ( temp 2-component vector of int) +0:79 'storeTemp' ( temp 2-component vector of int) +0:80 Sequence +0:80 move second child to first child ( temp 2-component vector of uint) +0:80 'storeTemp' ( temp 2-component vector of uint) +0:? Constant: +0:? 3 (const uint) +0:? 2 (const uint) +0:80 imageStore ( temp void) +0:80 'g_tTex1du2' (layout( rg32ui) uniform uimage1D) +0:80 c1: direct index for structure ( uniform int) +0:80 '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:80 Constant: +0:80 0 (const uint) +0:80 'storeTemp' ( temp 2-component vector of uint) +0:80 'storeTemp' ( temp 2-component vector of uint) +0:83 Sequence +0:83 move second child to first child ( temp 2-component vector of float) +0:83 'val1' ( temp 2-component vector of float) +0:83 Sequence +0:83 move second child to first child ( temp int) +0:83 'coordTemp' ( temp int) +0:83 c1: direct index for structure ( uniform int) +0:83 '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:83 Constant: +0:83 0 (const uint) +0:83 move second child to first child ( temp 2-component vector of float) +0:83 'storeTemp' ( temp 2-component vector of float) +0:83 imageLoad ( temp 2-component vector of float) +0:83 'g_tTex1df2' (layout( rg32f) uniform image1D) +0:83 'coordTemp' ( temp int) +0:83 vector scale second child into first child ( temp 2-component vector of float) +0:83 'storeTemp' ( temp 2-component vector of float) +0:83 Constant: +0:83 2.000000 +0:83 imageStore ( temp void) +0:83 'g_tTex1df2' (layout( rg32f) uniform image1D) +0:83 'coordTemp' ( temp int) +0:83 'storeTemp' ( temp 2-component vector of float) +0:83 'storeTemp' ( temp 2-component vector of float) +0:84 Sequence +0:84 move second child to first child ( temp int) +0:84 'coordTemp' ( temp int) +0:84 c1: direct index for structure ( uniform int) +0:84 '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:84 Constant: +0:84 0 (const uint) +0:84 move second child to first child ( temp 2-component vector of float) +0:84 'storeTemp' ( temp 2-component vector of float) +0:84 imageLoad ( temp 2-component vector of float) +0:84 'g_tTex1df2' (layout( rg32f) uniform image1D) +0:84 'coordTemp' ( temp int) +0:84 subtract second child into first child ( temp 2-component vector of float) +0:84 'storeTemp' ( temp 2-component vector of float) +0:84 Constant: +0:84 3.000000 +0:84 imageStore ( temp void) +0:84 'g_tTex1df2' (layout( rg32f) uniform image1D) +0:84 'coordTemp' ( temp int) +0:84 'storeTemp' ( temp 2-component vector of float) +0:84 'storeTemp' ( temp 2-component vector of float) +0:85 Sequence +0:85 move second child to first child ( temp int) +0:85 'coordTemp' ( temp int) +0:85 c1: direct index for structure ( uniform int) +0:85 '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:85 Constant: +0:85 0 (const uint) +0:85 move second child to first child ( temp 2-component vector of float) +0:85 'storeTemp' ( temp 2-component vector of float) +0:85 imageLoad ( temp 2-component vector of float) +0:85 'g_tTex1df2' (layout( rg32f) uniform image1D) +0:85 'coordTemp' ( temp int) +0:85 add second child into first child ( temp 2-component vector of float) +0:85 'storeTemp' ( temp 2-component vector of float) +0:85 Constant: +0:85 4.000000 +0:85 imageStore ( temp void) +0:85 'g_tTex1df2' (layout( rg32f) uniform image1D) +0:85 'coordTemp' ( temp int) +0:85 'storeTemp' ( temp 2-component vector of float) +0:85 'storeTemp' ( temp 2-component vector of float) +0:87 Sequence +0:87 move second child to first child ( temp int) +0:87 'coordTemp' ( temp int) +0:87 c1: direct index for structure ( uniform int) +0:87 '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:87 Constant: +0:87 0 (const uint) +0:87 move second child to first child ( temp 2-component vector of int) +0:87 'storeTemp' ( temp 2-component vector of int) +0:87 imageLoad ( temp 2-component vector of int) +0:87 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:87 'coordTemp' ( temp int) +0:87 divide second child into first child ( temp 2-component vector of int) +0:87 'storeTemp' ( temp 2-component vector of int) +0:87 Constant: +0:87 2 (const int) +0:87 imageStore ( temp void) +0:87 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:87 'coordTemp' ( temp int) +0:87 'storeTemp' ( temp 2-component vector of int) +0:87 'storeTemp' ( temp 2-component vector of int) +0:88 Sequence +0:88 move second child to first child ( temp int) +0:88 'coordTemp' ( temp int) +0:88 c1: direct index for structure ( uniform int) +0:88 '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:88 Constant: +0:88 0 (const uint) +0:88 move second child to first child ( temp 2-component vector of int) +0:88 'storeTemp' ( temp 2-component vector of int) +0:88 imageLoad ( temp 2-component vector of int) +0:88 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:88 'coordTemp' ( temp int) +0:88 mod second child into first child ( temp 2-component vector of int) +0:88 'storeTemp' ( temp 2-component vector of int) +0:88 Constant: +0:88 2 (const int) +0:88 imageStore ( temp void) +0:88 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:88 'coordTemp' ( temp int) +0:88 'storeTemp' ( temp 2-component vector of int) +0:88 'storeTemp' ( temp 2-component vector of int) +0:89 Sequence +0:89 move second child to first child ( temp int) +0:89 'coordTemp' ( temp int) +0:89 c1: direct index for structure ( uniform int) +0:89 '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:89 Constant: +0:89 0 (const uint) +0:89 move second child to first child ( temp 2-component vector of int) +0:89 'storeTemp' ( temp 2-component vector of int) +0:89 imageLoad ( temp 2-component vector of int) +0:89 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:89 'coordTemp' ( temp int) +0:89 and second child into first child ( temp 2-component vector of int) +0:89 'storeTemp' ( temp 2-component vector of int) +0:89 Constant: +0:89 65535 (const int) +0:89 imageStore ( temp void) +0:89 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:89 'coordTemp' ( temp int) +0:89 'storeTemp' ( temp 2-component vector of int) +0:89 'storeTemp' ( temp 2-component vector of int) +0:90 Sequence +0:90 move second child to first child ( temp int) +0:90 'coordTemp' ( temp int) +0:90 c1: direct index for structure ( uniform int) +0:90 '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:90 Constant: +0:90 0 (const uint) +0:90 move second child to first child ( temp 2-component vector of int) +0:90 'storeTemp' ( temp 2-component vector of int) +0:90 imageLoad ( temp 2-component vector of int) +0:90 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:90 'coordTemp' ( temp int) +0:90 or second child into first child ( temp 2-component vector of int) +0:90 'storeTemp' ( temp 2-component vector of int) +0:90 Constant: +0:90 61680 (const int) +0:90 imageStore ( temp void) +0:90 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:90 'coordTemp' ( temp int) +0:90 'storeTemp' ( temp 2-component vector of int) +0:90 'storeTemp' ( temp 2-component vector of int) +0:91 Sequence +0:91 move second child to first child ( temp int) +0:91 'coordTemp' ( temp int) +0:91 c1: direct index for structure ( uniform int) +0:91 '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:91 Constant: +0:91 0 (const uint) +0:91 move second child to first child ( temp 2-component vector of int) +0:91 'storeTemp' ( temp 2-component vector of int) +0:91 imageLoad ( temp 2-component vector of int) +0:91 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:91 'coordTemp' ( temp int) +0:91 left shift second child into first child ( temp 2-component vector of int) +0:91 'storeTemp' ( temp 2-component vector of int) +0:91 Constant: +0:91 2 (const int) +0:91 imageStore ( temp void) +0:91 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:91 'coordTemp' ( temp int) +0:91 'storeTemp' ( temp 2-component vector of int) +0:91 'storeTemp' ( temp 2-component vector of int) +0:92 Sequence +0:92 move second child to first child ( temp int) +0:92 'coordTemp' ( temp int) +0:92 c1: direct index for structure ( uniform int) +0:92 '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:92 Constant: +0:92 0 (const uint) +0:92 move second child to first child ( temp 2-component vector of int) +0:92 'storeTemp' ( temp 2-component vector of int) +0:92 imageLoad ( temp 2-component vector of int) +0:92 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:92 'coordTemp' ( temp int) +0:92 right shift second child into first child ( temp 2-component vector of int) +0:92 'storeTemp' ( temp 2-component vector of int) +0:92 Constant: +0:92 2 (const int) +0:92 imageStore ( temp void) +0:92 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:92 'coordTemp' ( temp int) +0:92 'storeTemp' ( temp 2-component vector of int) +0:92 'storeTemp' ( temp 2-component vector of int) +0:95 Sequence +0:95 move second child to first child ( temp 2-component vector of float) +0:95 'storeTemp' ( temp 2-component vector of float) +0:95 Function Call: SomeValue( ( temp 2-component vector of float) +0:95 imageStore ( temp void) +0:95 'g_tTex2df2' (layout( rg32f) uniform image2D) +0:95 c2: direct index for structure ( uniform 2-component vector of int) +0:95 '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:95 Constant: +0:95 1 (const uint) +0:95 'storeTemp' ( temp 2-component vector of float) +0:95 'storeTemp' ( temp 2-component vector of float) +0:96 Sequence +0:96 imageStore ( temp void) +0:96 'g_tTex2df2' (layout( rg32f) uniform image2D) +0:96 c2: direct index for structure ( uniform 2-component vector of int) +0:96 '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:96 Constant: +0:96 1 (const uint) +0:96 'lf2' ( temp 2-component vector of float) +0:96 'lf2' ( temp 2-component vector of float) +0:97 Sequence +0:97 move second child to first child ( temp 2-component vector of int) +0:97 'storeTemp' ( temp 2-component vector of int) +0:? Constant: +0:? 5 (const int) +0:? 2 (const int) +0:97 imageStore ( temp void) +0:97 'g_tTex2di2' (layout( rg32i) uniform iimage2D) +0:97 c2: direct index for structure ( uniform 2-component vector of int) +0:97 '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:97 Constant: +0:97 1 (const uint) +0:97 'storeTemp' ( temp 2-component vector of int) +0:97 'storeTemp' ( temp 2-component vector of int) +0:98 Sequence +0:98 move second child to first child ( temp 2-component vector of uint) +0:98 'storeTemp' ( temp 2-component vector of uint) +0:? Constant: +0:? 6 (const uint) +0:? 2 (const uint) +0:98 imageStore ( temp void) +0:98 'g_tTex2du2' (layout( rg32ui) uniform uimage2D) +0:98 c2: direct index for structure ( uniform 2-component vector of int) +0:98 '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:98 Constant: +0:98 1 (const uint) +0:98 'storeTemp' ( temp 2-component vector of uint) +0:98 'storeTemp' ( temp 2-component vector of uint) +0:101 Sequence +0:101 move second child to first child ( temp 2-component vector of float) +0:101 'storeTemp' ( temp 2-component vector of float) +0:101 Function Call: SomeValue( ( temp 2-component vector of float) +0:101 imageStore ( temp void) +0:101 'g_tTex3df2' (layout( rg32f) uniform image3D) +0:101 c3: direct index for structure ( uniform 3-component vector of int) +0:101 '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:101 Constant: +0:101 2 (const uint) +0:101 'storeTemp' ( temp 2-component vector of float) +0:101 'storeTemp' ( temp 2-component vector of float) +0:102 Sequence +0:102 imageStore ( temp void) +0:102 'g_tTex3df2' (layout( rg32f) uniform image3D) +0:102 c3: direct index for structure ( uniform 3-component vector of int) +0:102 '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:102 Constant: +0:102 2 (const uint) +0:102 'lf2' ( temp 2-component vector of float) +0:102 'lf2' ( temp 2-component vector of float) +0:103 Sequence +0:103 move second child to first child ( temp 2-component vector of int) +0:103 'storeTemp' ( temp 2-component vector of int) +0:? Constant: +0:? 8 (const int) +0:? 6 (const int) +0:103 imageStore ( temp void) +0:103 'g_tTex3di2' (layout( rg32i) uniform iimage3D) +0:103 c3: direct index for structure ( uniform 3-component vector of int) +0:103 '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:103 Constant: +0:103 2 (const uint) +0:103 'storeTemp' ( temp 2-component vector of int) +0:103 'storeTemp' ( temp 2-component vector of int) +0:104 Sequence +0:104 move second child to first child ( temp 2-component vector of uint) +0:104 'storeTemp' ( temp 2-component vector of uint) +0:? Constant: +0:? 9 (const uint) +0:? 2 (const uint) +0:104 imageStore ( temp void) +0:104 'g_tTex3du2' (layout( rg32ui) uniform uimage3D) +0:104 c3: direct index for structure ( uniform 3-component vector of int) +0:104 '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:104 Constant: +0:104 2 (const uint) +0:104 'storeTemp' ( temp 2-component vector of uint) +0:104 'storeTemp' ( temp 2-component vector of uint) +0:107 Function Call: Fn1(vf2; ( temp 2-component vector of float) +0:107 imageLoad ( temp 2-component vector of float) +0:107 'g_tTex1df2' (layout( rg32f) uniform image1D) +0:107 c1: direct index for structure ( uniform int) +0:107 '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:107 Constant: +0:107 0 (const uint) +0:108 Function Call: Fn1(vi2; ( temp 2-component vector of int) +0:108 imageLoad ( temp 2-component vector of int) +0:108 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:108 c1: direct index for structure ( uniform int) +0:108 '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:108 Constant: +0:108 0 (const uint) +0:109 Function Call: Fn1(vu2; ( temp 2-component vector of uint) +0:109 imageLoad ( temp 2-component vector of uint) +0:109 'g_tTex1du2' (layout( rg32ui) uniform uimage1D) +0:109 c1: direct index for structure ( uniform int) +0:109 '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:109 Constant: +0:109 0 (const uint) +0:111 Comma ( temp void) +0:111 Function Call: Fn2(vf2; ( temp void) +0:111 'tempArg' ( temp 2-component vector of float) +0:111 Sequence +0:111 imageStore ( temp void) +0:111 'g_tTex1df2' (layout( rg32f) uniform image1D) +0:111 c1: direct index for structure ( uniform int) +0:111 '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:111 Constant: +0:111 0 (const uint) +0:111 'tempArg' ( temp 2-component vector of float) +0:111 'tempArg' ( temp 2-component vector of float) +0:112 Comma ( temp void) +0:112 Function Call: Fn2(vi2; ( temp void) +0:112 'tempArg' ( temp 2-component vector of int) +0:112 Sequence +0:112 imageStore ( temp void) +0:112 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:112 c1: direct index for structure ( uniform int) +0:112 '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:112 Constant: +0:112 0 (const uint) +0:112 'tempArg' ( temp 2-component vector of int) +0:112 'tempArg' ( temp 2-component vector of int) +0:113 Comma ( temp void) +0:113 Function Call: Fn2(vu2; ( temp void) +0:113 'tempArg' ( temp 2-component vector of uint) +0:113 Sequence +0:113 imageStore ( temp void) +0:113 'g_tTex1du2' (layout( rg32ui) uniform uimage1D) +0:113 c1: direct index for structure ( uniform int) +0:113 '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:113 Constant: +0:113 0 (const uint) +0:113 'tempArg' ( temp 2-component vector of uint) +0:113 'tempArg' ( temp 2-component vector of uint) +0:117 Sequence +0:117 move second child to first child ( temp int) +0:117 'coordTemp' ( temp int) +0:117 c1: direct index for structure ( uniform int) +0:117 '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:117 Constant: +0:117 0 (const uint) +0:117 move second child to first child ( temp 2-component vector of float) +0:117 'storeTemp' ( temp 2-component vector of float) +0:117 imageLoad ( temp 2-component vector of float) +0:117 'g_tTex1df2' (layout( rg32f) uniform image1D) +0:117 'coordTemp' ( temp int) +0:117 Pre-Increment ( temp 2-component vector of float) +0:117 'storeTemp' ( temp 2-component vector of float) +0:117 imageStore ( temp void) +0:117 'g_tTex1df2' (layout( rg32f) uniform image1D) +0:117 'coordTemp' ( temp int) +0:117 'storeTemp' ( temp 2-component vector of float) +0:117 'storeTemp' ( temp 2-component vector of float) +0:118 Sequence +0:118 move second child to first child ( temp int) +0:118 'coordTemp' ( temp int) +0:118 c1: direct index for structure ( uniform int) +0:118 '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:118 Constant: +0:118 0 (const uint) +0:118 move second child to first child ( temp 2-component vector of int) +0:118 'storeTemp' ( temp 2-component vector of int) +0:118 imageLoad ( temp 2-component vector of int) +0:118 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:118 'coordTemp' ( temp int) +0:118 Pre-Increment ( temp 2-component vector of int) +0:118 'storeTemp' ( temp 2-component vector of int) +0:118 imageStore ( temp void) +0:118 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:118 'coordTemp' ( temp int) +0:118 'storeTemp' ( temp 2-component vector of int) +0:118 'storeTemp' ( temp 2-component vector of int) +0:119 Sequence +0:119 move second child to first child ( temp int) +0:119 'coordTemp' ( temp int) +0:119 c1: direct index for structure ( uniform int) +0:119 '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:119 Constant: +0:119 0 (const uint) +0:119 move second child to first child ( temp 2-component vector of uint) +0:119 'storeTemp' ( temp 2-component vector of uint) +0:119 imageLoad ( temp 2-component vector of uint) +0:119 'g_tTex1du2' (layout( rg32ui) uniform uimage1D) +0:119 'coordTemp' ( temp int) +0:119 Pre-Increment ( temp 2-component vector of uint) +0:119 'storeTemp' ( temp 2-component vector of uint) +0:119 imageStore ( temp void) +0:119 'g_tTex1du2' (layout( rg32ui) uniform uimage1D) +0:119 'coordTemp' ( temp int) +0:119 'storeTemp' ( temp 2-component vector of uint) +0:119 'storeTemp' ( temp 2-component vector of uint) +0:121 Sequence +0:121 move second child to first child ( temp int) +0:121 'coordTemp' ( temp int) +0:121 c1: direct index for structure ( uniform int) +0:121 '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:121 Constant: +0:121 0 (const uint) +0:121 move second child to first child ( temp 2-component vector of float) +0:121 'storeTemp' ( temp 2-component vector of float) +0:121 imageLoad ( temp 2-component vector of float) +0:121 'g_tTex1df2' (layout( rg32f) uniform image1D) +0:121 'coordTemp' ( temp int) +0:121 Pre-Decrement ( temp 2-component vector of float) +0:121 'storeTemp' ( temp 2-component vector of float) +0:121 imageStore ( temp void) +0:121 'g_tTex1df2' (layout( rg32f) uniform image1D) +0:121 'coordTemp' ( temp int) +0:121 'storeTemp' ( temp 2-component vector of float) +0:121 'storeTemp' ( temp 2-component vector of float) +0:122 Sequence +0:122 move second child to first child ( temp int) +0:122 'coordTemp' ( temp int) +0:122 c1: direct index for structure ( uniform int) +0:122 '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:122 Constant: +0:122 0 (const uint) +0:122 move second child to first child ( temp 2-component vector of int) +0:122 'storeTemp' ( temp 2-component vector of int) +0:122 imageLoad ( temp 2-component vector of int) +0:122 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:122 'coordTemp' ( temp int) +0:122 Pre-Decrement ( temp 2-component vector of int) +0:122 'storeTemp' ( temp 2-component vector of int) +0:122 imageStore ( temp void) +0:122 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:122 'coordTemp' ( temp int) +0:122 'storeTemp' ( temp 2-component vector of int) +0:122 'storeTemp' ( temp 2-component vector of int) +0:123 Sequence +0:123 move second child to first child ( temp int) +0:123 'coordTemp' ( temp int) +0:123 c1: direct index for structure ( uniform int) +0:123 '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:123 Constant: +0:123 0 (const uint) +0:123 move second child to first child ( temp 2-component vector of uint) +0:123 'storeTemp' ( temp 2-component vector of uint) +0:123 imageLoad ( temp 2-component vector of uint) +0:123 'g_tTex1du2' (layout( rg32ui) uniform uimage1D) +0:123 'coordTemp' ( temp int) +0:123 Pre-Decrement ( temp 2-component vector of uint) +0:123 'storeTemp' ( temp 2-component vector of uint) +0:123 imageStore ( temp void) +0:123 'g_tTex1du2' (layout( rg32ui) uniform uimage1D) +0:123 'coordTemp' ( temp int) +0:123 'storeTemp' ( temp 2-component vector of uint) +0:123 'storeTemp' ( temp 2-component vector of uint) +0:126 Sequence +0:126 move second child to first child ( temp int) +0:126 'coordTemp' ( temp int) +0:126 c1: direct index for structure ( uniform int) +0:126 '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:126 Constant: +0:126 0 (const uint) +0:126 move second child to first child ( temp 2-component vector of float) +0:126 'storeTempPre' ( temp 2-component vector of float) +0:126 imageLoad ( temp 2-component vector of float) +0:126 'g_tTex1df2' (layout( rg32f) uniform image1D) +0:126 'coordTemp' ( temp int) +0:126 move second child to first child ( temp 2-component vector of float) +0:126 'storeTempPost' ( temp 2-component vector of float) +0:126 'storeTempPre' ( temp 2-component vector of float) +0:126 Post-Increment ( temp 2-component vector of float) +0:126 'storeTempPost' ( temp 2-component vector of float) +0:126 imageStore ( temp void) +0:126 'g_tTex1df2' (layout( rg32f) uniform image1D) +0:126 'coordTemp' ( temp int) +0:126 'storeTempPost' ( temp 2-component vector of float) +0:126 'storeTempPre' ( temp 2-component vector of float) +0:127 Sequence +0:127 move second child to first child ( temp int) +0:127 'coordTemp' ( temp int) +0:127 c1: direct index for structure ( uniform int) +0:127 '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:127 Constant: +0:127 0 (const uint) +0:127 move second child to first child ( temp 2-component vector of uint) +0:127 'storeTempPre' ( temp 2-component vector of uint) +0:127 imageLoad ( temp 2-component vector of uint) +0:127 'g_tTex1du2' (layout( rg32ui) uniform uimage1D) +0:127 'coordTemp' ( temp int) +0:127 move second child to first child ( temp 2-component vector of uint) +0:127 'storeTempPost' ( temp 2-component vector of uint) +0:127 'storeTempPre' ( temp 2-component vector of uint) +0:127 Post-Decrement ( temp 2-component vector of uint) +0:127 'storeTempPost' ( temp 2-component vector of uint) +0:127 imageStore ( temp void) +0:127 'g_tTex1du2' (layout( rg32ui) uniform uimage1D) +0:127 'coordTemp' ( temp int) +0:127 'storeTempPost' ( temp 2-component vector of uint) +0:127 'storeTempPre' ( temp 2-component vector of uint) +0:128 Sequence +0:128 move second child to first child ( temp int) +0:128 'coordTemp' ( temp int) +0:128 c1: direct index for structure ( uniform int) +0:128 '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:128 Constant: +0:128 0 (const uint) +0:128 move second child to first child ( temp 2-component vector of int) +0:128 'storeTempPre' ( temp 2-component vector of int) +0:128 imageLoad ( temp 2-component vector of int) +0:128 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:128 'coordTemp' ( temp int) +0:128 move second child to first child ( temp 2-component vector of int) +0:128 'storeTempPost' ( temp 2-component vector of int) +0:128 'storeTempPre' ( temp 2-component vector of int) +0:128 Post-Increment ( temp 2-component vector of int) +0:128 'storeTempPost' ( temp 2-component vector of int) +0:128 imageStore ( temp void) +0:128 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:128 'coordTemp' ( temp int) +0:128 'storeTempPost' ( temp 2-component vector of int) +0:128 'storeTempPre' ( temp 2-component vector of int) +0:130 Sequence +0:130 move second child to first child ( temp int) +0:130 'coordTemp' ( temp int) +0:130 c1: direct index for structure ( uniform int) +0:130 '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:130 Constant: +0:130 0 (const uint) +0:130 move second child to first child ( temp 2-component vector of float) +0:130 'storeTempPre' ( temp 2-component vector of float) +0:130 imageLoad ( temp 2-component vector of float) +0:130 'g_tTex1df2' (layout( rg32f) uniform image1D) +0:130 'coordTemp' ( temp int) +0:130 move second child to first child ( temp 2-component vector of float) +0:130 'storeTempPost' ( temp 2-component vector of float) +0:130 'storeTempPre' ( temp 2-component vector of float) +0:130 Post-Decrement ( temp 2-component vector of float) +0:130 'storeTempPost' ( temp 2-component vector of float) +0:130 imageStore ( temp void) +0:130 'g_tTex1df2' (layout( rg32f) uniform image1D) +0:130 'coordTemp' ( temp int) +0:130 'storeTempPost' ( temp 2-component vector of float) +0:130 'storeTempPre' ( temp 2-component vector of float) +0:131 Sequence +0:131 move second child to first child ( temp int) +0:131 'coordTemp' ( temp int) +0:131 c1: direct index for structure ( uniform int) +0:131 '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:131 Constant: +0:131 0 (const uint) +0:131 move second child to first child ( temp 2-component vector of int) +0:131 'storeTempPre' ( temp 2-component vector of int) +0:131 imageLoad ( temp 2-component vector of int) +0:131 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:131 'coordTemp' ( temp int) +0:131 move second child to first child ( temp 2-component vector of int) +0:131 'storeTempPost' ( temp 2-component vector of int) +0:131 'storeTempPre' ( temp 2-component vector of int) +0:131 Post-Increment ( temp 2-component vector of int) +0:131 'storeTempPost' ( temp 2-component vector of int) +0:131 imageStore ( temp void) +0:131 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:131 'coordTemp' ( temp int) +0:131 'storeTempPost' ( temp 2-component vector of int) +0:131 'storeTempPre' ( temp 2-component vector of int) +0:132 Sequence +0:132 move second child to first child ( temp int) +0:132 'coordTemp' ( temp int) +0:132 c1: direct index for structure ( uniform int) +0:132 '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:132 Constant: +0:132 0 (const uint) +0:132 move second child to first child ( temp 2-component vector of uint) +0:132 'storeTempPre' ( temp 2-component vector of uint) +0:132 imageLoad ( temp 2-component vector of uint) +0:132 'g_tTex1du2' (layout( rg32ui) uniform uimage1D) +0:132 'coordTemp' ( temp int) +0:132 move second child to first child ( temp 2-component vector of uint) +0:132 'storeTempPost' ( temp 2-component vector of uint) +0:132 'storeTempPre' ( temp 2-component vector of uint) +0:132 Post-Decrement ( temp 2-component vector of uint) +0:132 'storeTempPost' ( temp 2-component vector of uint) +0:132 imageStore ( temp void) +0:132 'g_tTex1du2' (layout( rg32ui) uniform uimage1D) +0:132 'coordTemp' ( temp int) +0:132 'storeTempPost' ( temp 2-component vector of uint) +0:132 'storeTempPre' ( temp 2-component vector of uint) +0:135 Sequence +0:135 move second child to first child ( temp 2-component vector of float) +0:135 'storeTemp' ( temp 2-component vector of float) +0:? imageLoad ( temp 2-component vector of float) +0:135 'g_tTex2df2' (layout( rg32f) uniform image2D) +0:? Constant: +0:? 2 (const int) +0:? 3 (const int) +0:135 imageStore ( temp void) +0:135 'g_tTex1df2' (layout( rg32f) uniform image1D) +0:135 Constant: +0:135 1 (const int) +0:135 'storeTemp' ( temp 2-component vector of float) +0:135 'storeTemp' ( temp 2-component vector of float) +0:137 move second child to first child ( temp 4-component vector of float) +0:137 Color: direct index for structure ( temp 4-component vector of float) +0:137 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:137 Constant: +0:137 0 (const int) +0:137 Constant: +0:137 1.000000 +0:137 1.000000 +0:137 1.000000 +0:137 1.000000 +0:139 Branch: Return with expression +0:139 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:53 Function Definition: main( ( temp void) +0:53 Function Parameters: +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: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: +0:53 0 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df2' (layout( rg32f) uniform image1D) +0:? 'g_tTex1di2' (layout( rg32i) uniform iimage1D) +0:? 'g_tTex1du2' (layout( rg32ui) uniform uimage1D) +0:? 'g_tTex2df2' (layout( rg32f) uniform image2D) +0:? 'g_tTex2di2' (layout( rg32i) uniform iimage2D) +0:? 'g_tTex2du2' (layout( rg32ui) uniform uimage2D) +0:? 'g_tTex3df2' (layout( rg32f) uniform image3D) +0:? 'g_tTex3di2' (layout( rg32i) uniform iimage3D) +0:? 'g_tTex3du2' (layout( rg32ui) uniform uimage3D) +0:? 'g_tTex1df2a' (layout( rg32f) uniform image1DArray) +0:? 'g_tTex1di2a' (layout( rg32i) uniform iimage1DArray) +0:? 'g_tTex1du2a' (layout( rg32ui) uniform uimage1DArray) +0:? 'g_tTex2df2a' (layout( rg32f) uniform image2DArray) +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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 605 + + Capability Shader + Capability Sampled1D + Capability StorageImageExtendedFormats + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 581 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 11 "Fn1(vi2;" + Name 10 "x" + Name 18 "Fn1(vu2;" + Name 17 "x" + Name 25 "Fn1(vf2;" + Name 24 "x" + Name 29 "Fn2(vi2;" + Name 28 "x" + Name 33 "Fn2(vu2;" + Name 32 "x" + Name 37 "Fn2(vf2;" + Name 36 "x" + Name 40 "SomeValue(" + Name 43 "PS_OUTPUT" + MemberName 43(PS_OUTPUT) 0 "Color" + Name 45 "@main(" + Name 64 "$Global" + MemberName 64($Global) 0 "c1" + MemberName 64($Global) 1 "c2" + MemberName 64($Global) 2 "c3" + MemberName 64($Global) 3 "c4" + MemberName 64($Global) 4 "o1" + MemberName 64($Global) 5 "o2" + MemberName 64($Global) 6 "o3" + MemberName 64($Global) 7 "o4" + MemberName 64($Global) 8 "uf2" + MemberName 64($Global) 9 "ui2" + MemberName 64($Global) 10 "uu2" + Name 66 "" + Name 76 "g_tTex1df2" + Name 82 "r00" + Name 87 "r01" + Name 90 "g_tTex1di2" + Name 95 "r02" + Name 98 "g_tTex1du2" + Name 103 "r10" + Name 106 "g_tTex2df2" + Name 111 "r11" + Name 114 "g_tTex2di2" + Name 119 "r12" + Name 122 "g_tTex2du2" + Name 127 "r20" + Name 130 "g_tTex3df2" + Name 137 "r21" + Name 140 "g_tTex3di2" + Name 145 "r22" + Name 148 "g_tTex3du2" + Name 153 "lf2" + Name 158 "storeTemp" + Name 168 "storeTemp" + Name 174 "storeTemp" + Name 182 "val1" + Name 184 "coordTemp" + Name 187 "storeTemp" + Name 198 "coordTemp" + Name 201 "storeTemp" + Name 212 "coordTemp" + Name 215 "storeTemp" + Name 226 "coordTemp" + Name 229 "storeTemp" + Name 239 "coordTemp" + Name 242 "storeTemp" + Name 252 "coordTemp" + Name 255 "storeTemp" + Name 266 "coordTemp" + Name 269 "storeTemp" + Name 280 "coordTemp" + Name 283 "storeTemp" + Name 293 "coordTemp" + Name 296 "storeTemp" + Name 306 "storeTemp" + Name 316 "storeTemp" + Name 323 "storeTemp" + Name 330 "storeTemp" + Name 340 "storeTemp" + Name 347 "storeTemp" + Name 358 "param" + Name 364 "param" + Name 370 "param" + Name 372 "tempArg" + Name 373 "param" + Name 380 "tempArg" + Name 381 "param" + Name 388 "tempArg" + Name 389 "param" + Name 396 "coordTemp" + Name 399 "storeTemp" + Name 410 "coordTemp" + Name 413 "storeTemp" + Name 423 "coordTemp" + Name 426 "storeTemp" + Name 436 "coordTemp" + Name 439 "storeTemp" + Name 449 "coordTemp" + Name 452 "storeTemp" + Name 462 "coordTemp" + Name 465 "storeTemp" + Name 475 "coordTemp" + Name 478 "storeTempPre" + Name 482 "storeTempPost" + Name 490 "coordTemp" + Name 493 "storeTempPre" + Name 497 "storeTempPost" + Name 505 "coordTemp" + Name 508 "storeTempPre" + Name 512 "storeTempPost" + Name 520 "coordTemp" + Name 523 "storeTempPre" + Name 527 "storeTempPost" + Name 535 "coordTemp" + Name 538 "storeTempPre" + Name 542 "storeTempPost" + Name 550 "coordTemp" + Name 553 "storeTempPre" + Name 557 "storeTempPost" + Name 565 "storeTemp" + Name 573 "psout" + Name 581 "Color" + Name 586 "g_sSamp" + Name 589 "g_tTex1df2a" + Name 592 "g_tTex1di2a" + Name 595 "g_tTex1du2a" + Name 598 "g_tTex2df2a" + Name 601 "g_tTex2di2a" + Name 604 "g_tTex2du2a" + MemberDecorate 64($Global) 0 Offset 0 + MemberDecorate 64($Global) 1 Offset 8 + MemberDecorate 64($Global) 2 Offset 16 + MemberDecorate 64($Global) 3 Offset 32 + MemberDecorate 64($Global) 4 Offset 48 + MemberDecorate 64($Global) 5 Offset 56 + MemberDecorate 64($Global) 6 Offset 64 + MemberDecorate 64($Global) 7 Offset 80 + MemberDecorate 64($Global) 8 Offset 96 + MemberDecorate 64($Global) 9 Offset 104 + MemberDecorate 64($Global) 10 Offset 112 + Decorate 64($Global) Block + Decorate 66 DescriptorSet 0 + Decorate 76(g_tTex1df2) DescriptorSet 0 + Decorate 90(g_tTex1di2) DescriptorSet 0 + Decorate 98(g_tTex1du2) DescriptorSet 0 + Decorate 106(g_tTex2df2) DescriptorSet 0 + Decorate 114(g_tTex2di2) DescriptorSet 0 + Decorate 122(g_tTex2du2) DescriptorSet 0 + Decorate 130(g_tTex3df2) DescriptorSet 0 + Decorate 140(g_tTex3di2) DescriptorSet 0 + Decorate 148(g_tTex3du2) DescriptorSet 0 + Decorate 581(Color) Location 0 + Decorate 586(g_sSamp) DescriptorSet 0 + Decorate 586(g_sSamp) Binding 0 + Decorate 589(g_tTex1df2a) DescriptorSet 0 + Decorate 592(g_tTex1di2a) DescriptorSet 0 + Decorate 595(g_tTex1du2a) DescriptorSet 0 + Decorate 598(g_tTex2df2a) DescriptorSet 0 + Decorate 601(g_tTex2di2a) DescriptorSet 0 + Decorate 604(g_tTex2du2a) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypeVector 6(int) 2 + 8: TypePointer Function 7(ivec2) + 9: TypeFunction 7(ivec2) 8(ptr) + 13: TypeInt 32 0 + 14: TypeVector 13(int) 2 + 15: TypePointer Function 14(ivec2) + 16: TypeFunction 14(ivec2) 15(ptr) + 20: TypeFloat 32 + 21: TypeVector 20(float) 2 + 22: TypePointer Function 21(fvec2) + 23: TypeFunction 21(fvec2) 22(ptr) + 27: TypeFunction 2 8(ptr) + 31: TypeFunction 2 15(ptr) + 35: TypeFunction 2 22(ptr) + 39: TypeFunction 21(fvec2) + 42: TypeVector 20(float) 4 + 43(PS_OUTPUT): TypeStruct 42(fvec4) + 44: TypeFunction 43(PS_OUTPUT) + 56: 6(int) Constant 0 + 57: 7(ivec2) ConstantComposite 56 56 + 58: 13(int) Constant 0 + 59: 14(ivec2) ConstantComposite 58 58 + 60: 20(float) Constant 0 + 61: 21(fvec2) ConstantComposite 60 60 + 62: TypeVector 6(int) 3 + 63: TypeVector 6(int) 4 + 64($Global): TypeStruct 6(int) 7(ivec2) 62(ivec3) 63(ivec4) 6(int) 7(ivec2) 62(ivec3) 63(ivec4) 21(fvec2) 7(ivec2) 14(ivec2) + 65: TypePointer Uniform 64($Global) + 66: 65(ptr) Variable Uniform + 67: 6(int) Constant 1 + 68: TypePointer Uniform 7(ivec2) + 74: TypeImage 20(float) 1D nonsampled format:Rg32f + 75: TypePointer UniformConstant 74 + 76(g_tTex1df2): 75(ptr) Variable UniformConstant + 78: TypePointer Uniform 6(int) + 88: TypeImage 6(int) 1D nonsampled format:Rg32i + 89: TypePointer UniformConstant 88 + 90(g_tTex1di2): 89(ptr) Variable UniformConstant + 96: TypeImage 13(int) 1D nonsampled format:Rg32ui + 97: TypePointer UniformConstant 96 + 98(g_tTex1du2): 97(ptr) Variable UniformConstant + 104: TypeImage 20(float) 2D nonsampled format:Rg32f + 105: TypePointer UniformConstant 104 + 106(g_tTex2df2): 105(ptr) Variable UniformConstant + 112: TypeImage 6(int) 2D nonsampled format:Rg32i + 113: TypePointer UniformConstant 112 + 114(g_tTex2di2): 113(ptr) Variable UniformConstant + 120: TypeImage 13(int) 2D nonsampled format:Rg32ui + 121: TypePointer UniformConstant 120 + 122(g_tTex2du2): 121(ptr) Variable UniformConstant + 128: TypeImage 20(float) 3D nonsampled format:Rg32f + 129: TypePointer UniformConstant 128 + 130(g_tTex3df2): 129(ptr) Variable UniformConstant + 132: 6(int) Constant 2 + 133: TypePointer Uniform 62(ivec3) + 138: TypeImage 6(int) 3D nonsampled format:Rg32i + 139: TypePointer UniformConstant 138 + 140(g_tTex3di2): 139(ptr) Variable UniformConstant + 146: TypeImage 13(int) 3D nonsampled format:Rg32ui + 147: TypePointer UniformConstant 146 + 148(g_tTex3du2): 147(ptr) Variable UniformConstant + 154: 6(int) Constant 8 + 155: TypePointer Uniform 21(fvec2) + 169: 7(ivec2) ConstantComposite 132 132 + 175: 13(int) Constant 3 + 176: 13(int) Constant 2 + 177: 14(ivec2) ConstantComposite 175 176 + 183: TypePointer Function 6(int) + 191: 20(float) Constant 1073741824 + 205: 20(float) Constant 1077936128 + 219: 20(float) Constant 1082130432 + 259: 6(int) Constant 65535 + 273: 6(int) Constant 61680 + 317: 6(int) Constant 5 + 318: 7(ivec2) ConstantComposite 317 132 + 324: 13(int) Constant 6 + 325: 14(ivec2) ConstantComposite 324 176 + 341: 6(int) Constant 6 + 342: 7(ivec2) ConstantComposite 154 341 + 348: 13(int) Constant 9 + 349: 14(ivec2) ConstantComposite 348 176 + 404: 20(float) Constant 1065353216 + 567: 6(int) Constant 3 + 568: 7(ivec2) ConstantComposite 132 567 + 572: TypePointer Function 43(PS_OUTPUT) + 574: 42(fvec4) ConstantComposite 404 404 404 404 + 575: TypePointer Function 42(fvec4) + 580: TypePointer Output 42(fvec4) + 581(Color): 580(ptr) Variable Output + 584: TypeSampler + 585: TypePointer UniformConstant 584 + 586(g_sSamp): 585(ptr) Variable UniformConstant + 587: TypeImage 20(float) 1D array nonsampled format:Rg32f + 588: TypePointer UniformConstant 587 +589(g_tTex1df2a): 588(ptr) Variable UniformConstant + 590: TypeImage 6(int) 1D array nonsampled format:Rg32i + 591: TypePointer UniformConstant 590 +592(g_tTex1di2a): 591(ptr) Variable UniformConstant + 593: TypeImage 13(int) 1D array nonsampled format:Rg32ui + 594: TypePointer UniformConstant 593 +595(g_tTex1du2a): 594(ptr) Variable UniformConstant + 596: TypeImage 20(float) 2D array nonsampled format:Rg32f + 597: TypePointer UniformConstant 596 +598(g_tTex2df2a): 597(ptr) Variable UniformConstant + 599: TypeImage 6(int) 2D array nonsampled format:Rg32i + 600: TypePointer UniformConstant 599 +601(g_tTex2di2a): 600(ptr) Variable UniformConstant + 602: TypeImage 13(int) 2D array nonsampled format:Rg32ui + 603: TypePointer UniformConstant 602 +604(g_tTex2du2a): 603(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label + 582:43(PS_OUTPUT) FunctionCall 45(@main() + 583: 42(fvec4) CompositeExtract 582 0 + Store 581(Color) 583 + Return + FunctionEnd + 11(Fn1(vi2;): 7(ivec2) Function None 9 + 10(x): 8(ptr) FunctionParameter + 12: Label + 47: 7(ivec2) Load 10(x) + ReturnValue 47 + FunctionEnd + 18(Fn1(vu2;): 14(ivec2) Function None 16 + 17(x): 15(ptr) FunctionParameter + 19: Label + 50: 14(ivec2) Load 17(x) + ReturnValue 50 + FunctionEnd + 25(Fn1(vf2;): 21(fvec2) Function None 23 + 24(x): 22(ptr) FunctionParameter + 26: Label + 53: 21(fvec2) Load 24(x) + ReturnValue 53 + FunctionEnd + 29(Fn2(vi2;): 2 Function None 27 + 28(x): 8(ptr) FunctionParameter + 30: Label + Store 28(x) 57 + Return + FunctionEnd + 33(Fn2(vu2;): 2 Function None 31 + 32(x): 15(ptr) FunctionParameter + 34: Label + Store 32(x) 59 + Return + FunctionEnd + 37(Fn2(vf2;): 2 Function None 35 + 36(x): 22(ptr) FunctionParameter + 38: Label + Store 36(x) 61 + Return + FunctionEnd + 40(SomeValue(): 21(fvec2) Function None 39 + 41: Label + 69: 68(ptr) AccessChain 66 67 + 70: 7(ivec2) Load 69 + 71: 21(fvec2) ConvertSToF 70 + ReturnValue 71 + FunctionEnd + 45(@main():43(PS_OUTPUT) Function None 44 + 46: Label + 82(r00): 22(ptr) Variable Function + 87(r01): 8(ptr) Variable Function + 95(r02): 15(ptr) Variable Function + 103(r10): 22(ptr) Variable Function + 111(r11): 8(ptr) Variable Function + 119(r12): 15(ptr) Variable Function + 127(r20): 22(ptr) Variable Function + 137(r21): 8(ptr) Variable Function + 145(r22): 15(ptr) Variable Function + 153(lf2): 22(ptr) Variable Function + 158(storeTemp): 22(ptr) Variable Function + 168(storeTemp): 8(ptr) Variable Function + 174(storeTemp): 15(ptr) Variable Function + 182(val1): 22(ptr) Variable Function + 184(coordTemp): 183(ptr) Variable Function + 187(storeTemp): 22(ptr) Variable Function + 198(coordTemp): 183(ptr) Variable Function + 201(storeTemp): 22(ptr) Variable Function + 212(coordTemp): 183(ptr) Variable Function + 215(storeTemp): 22(ptr) Variable Function + 226(coordTemp): 183(ptr) Variable Function + 229(storeTemp): 8(ptr) Variable Function + 239(coordTemp): 183(ptr) Variable Function + 242(storeTemp): 8(ptr) Variable Function + 252(coordTemp): 183(ptr) Variable Function + 255(storeTemp): 8(ptr) Variable Function + 266(coordTemp): 183(ptr) Variable Function + 269(storeTemp): 8(ptr) Variable Function + 280(coordTemp): 183(ptr) Variable Function + 283(storeTemp): 8(ptr) Variable Function + 293(coordTemp): 183(ptr) Variable Function + 296(storeTemp): 8(ptr) Variable Function + 306(storeTemp): 22(ptr) Variable Function + 316(storeTemp): 8(ptr) Variable Function + 323(storeTemp): 15(ptr) Variable Function + 330(storeTemp): 22(ptr) Variable Function + 340(storeTemp): 8(ptr) Variable Function + 347(storeTemp): 15(ptr) Variable Function + 358(param): 22(ptr) Variable Function + 364(param): 8(ptr) Variable Function + 370(param): 15(ptr) Variable Function + 372(tempArg): 22(ptr) Variable Function + 373(param): 22(ptr) Variable Function + 380(tempArg): 8(ptr) Variable Function + 381(param): 8(ptr) Variable Function + 388(tempArg): 15(ptr) Variable Function + 389(param): 15(ptr) Variable Function + 396(coordTemp): 183(ptr) Variable Function + 399(storeTemp): 22(ptr) Variable Function + 410(coordTemp): 183(ptr) Variable Function + 413(storeTemp): 8(ptr) Variable Function + 423(coordTemp): 183(ptr) Variable Function + 426(storeTemp): 15(ptr) Variable Function + 436(coordTemp): 183(ptr) Variable Function + 439(storeTemp): 22(ptr) Variable Function + 449(coordTemp): 183(ptr) Variable Function + 452(storeTemp): 8(ptr) Variable Function + 462(coordTemp): 183(ptr) Variable Function + 465(storeTemp): 15(ptr) Variable Function + 475(coordTemp): 183(ptr) Variable Function +478(storeTempPre): 22(ptr) Variable Function +482(storeTempPost): 22(ptr) Variable Function + 490(coordTemp): 183(ptr) Variable Function +493(storeTempPre): 15(ptr) Variable Function +497(storeTempPost): 15(ptr) Variable Function + 505(coordTemp): 183(ptr) Variable Function +508(storeTempPre): 8(ptr) Variable Function +512(storeTempPost): 8(ptr) Variable Function + 520(coordTemp): 183(ptr) Variable Function +523(storeTempPre): 22(ptr) Variable Function +527(storeTempPost): 22(ptr) Variable Function + 535(coordTemp): 183(ptr) Variable Function +538(storeTempPre): 8(ptr) Variable Function +542(storeTempPost): 8(ptr) Variable Function + 550(coordTemp): 183(ptr) Variable Function +553(storeTempPre): 15(ptr) Variable Function +557(storeTempPost): 15(ptr) Variable Function + 565(storeTemp): 22(ptr) Variable Function + 573(psout): 572(ptr) Variable Function + 77: 74 Load 76(g_tTex1df2) + 79: 78(ptr) AccessChain 66 56 + 80: 6(int) Load 79 + 81: 21(fvec2) ImageRead 77 80 + 83: 74 Load 76(g_tTex1df2) + 84: 78(ptr) AccessChain 66 56 + 85: 6(int) Load 84 + 86: 21(fvec2) ImageRead 83 85 + Store 82(r00) 86 + 91: 88 Load 90(g_tTex1di2) + 92: 78(ptr) AccessChain 66 56 + 93: 6(int) Load 92 + 94: 7(ivec2) ImageRead 91 93 + Store 87(r01) 94 + 99: 96 Load 98(g_tTex1du2) + 100: 78(ptr) AccessChain 66 56 + 101: 6(int) Load 100 + 102: 14(ivec2) ImageRead 99 101 + Store 95(r02) 102 + 107: 104 Load 106(g_tTex2df2) + 108: 68(ptr) AccessChain 66 67 + 109: 7(ivec2) Load 108 + 110: 21(fvec2) ImageRead 107 109 + Store 103(r10) 110 + 115: 112 Load 114(g_tTex2di2) + 116: 68(ptr) AccessChain 66 67 + 117: 7(ivec2) Load 116 + 118: 7(ivec2) ImageRead 115 117 + Store 111(r11) 118 + 123: 120 Load 122(g_tTex2du2) + 124: 68(ptr) AccessChain 66 67 + 125: 7(ivec2) Load 124 + 126: 14(ivec2) ImageRead 123 125 + Store 119(r12) 126 + 131: 128 Load 130(g_tTex3df2) + 134: 133(ptr) AccessChain 66 132 + 135: 62(ivec3) Load 134 + 136: 21(fvec2) ImageRead 131 135 + Store 127(r20) 136 + 141: 138 Load 140(g_tTex3di2) + 142: 133(ptr) AccessChain 66 132 + 143: 62(ivec3) Load 142 + 144: 7(ivec2) ImageRead 141 143 + Store 137(r21) 144 + 149: 146 Load 148(g_tTex3du2) + 150: 133(ptr) AccessChain 66 132 + 151: 62(ivec3) Load 150 + 152: 14(ivec2) ImageRead 149 151 + Store 145(r22) 152 + 156: 155(ptr) AccessChain 66 154 + 157: 21(fvec2) Load 156 + Store 153(lf2) 157 + 159: 21(fvec2) FunctionCall 40(SomeValue() + Store 158(storeTemp) 159 + 160: 74 Load 76(g_tTex1df2) + 161: 78(ptr) AccessChain 66 56 + 162: 6(int) Load 161 + 163: 21(fvec2) Load 158(storeTemp) + ImageWrite 160 162 163 + 164: 74 Load 76(g_tTex1df2) + 165: 78(ptr) AccessChain 66 56 + 166: 6(int) Load 165 + 167: 21(fvec2) Load 153(lf2) + ImageWrite 164 166 167 + Store 168(storeTemp) 169 + 170: 88 Load 90(g_tTex1di2) + 171: 78(ptr) AccessChain 66 56 + 172: 6(int) Load 171 + 173: 7(ivec2) Load 168(storeTemp) + ImageWrite 170 172 173 + Store 174(storeTemp) 177 + 178: 96 Load 98(g_tTex1du2) + 179: 78(ptr) AccessChain 66 56 + 180: 6(int) Load 179 + 181: 14(ivec2) Load 174(storeTemp) + ImageWrite 178 180 181 + 185: 78(ptr) AccessChain 66 56 + 186: 6(int) Load 185 + Store 184(coordTemp) 186 + 188: 74 Load 76(g_tTex1df2) + 189: 6(int) Load 184(coordTemp) + 190: 21(fvec2) ImageRead 188 189 + Store 187(storeTemp) 190 + 192: 21(fvec2) Load 187(storeTemp) + 193: 21(fvec2) VectorTimesScalar 192 191 + Store 187(storeTemp) 193 + 194: 74 Load 76(g_tTex1df2) + 195: 6(int) Load 184(coordTemp) + 196: 21(fvec2) Load 187(storeTemp) + ImageWrite 194 195 196 + 197: 21(fvec2) Load 187(storeTemp) + Store 182(val1) 197 + 199: 78(ptr) AccessChain 66 56 + 200: 6(int) Load 199 + Store 198(coordTemp) 200 + 202: 74 Load 76(g_tTex1df2) + 203: 6(int) Load 198(coordTemp) + 204: 21(fvec2) ImageRead 202 203 + Store 201(storeTemp) 204 + 206: 21(fvec2) Load 201(storeTemp) + 207: 21(fvec2) CompositeConstruct 205 205 + 208: 21(fvec2) FSub 206 207 + Store 201(storeTemp) 208 + 209: 74 Load 76(g_tTex1df2) + 210: 6(int) Load 198(coordTemp) + 211: 21(fvec2) Load 201(storeTemp) + ImageWrite 209 210 211 + 213: 78(ptr) AccessChain 66 56 + 214: 6(int) Load 213 + Store 212(coordTemp) 214 + 216: 74 Load 76(g_tTex1df2) + 217: 6(int) Load 212(coordTemp) + 218: 21(fvec2) ImageRead 216 217 + Store 215(storeTemp) 218 + 220: 21(fvec2) Load 215(storeTemp) + 221: 21(fvec2) CompositeConstruct 219 219 + 222: 21(fvec2) FAdd 220 221 + Store 215(storeTemp) 222 + 223: 74 Load 76(g_tTex1df2) + 224: 6(int) Load 212(coordTemp) + 225: 21(fvec2) Load 215(storeTemp) + ImageWrite 223 224 225 + 227: 78(ptr) AccessChain 66 56 + 228: 6(int) Load 227 + Store 226(coordTemp) 228 + 230: 88 Load 90(g_tTex1di2) + 231: 6(int) Load 226(coordTemp) + 232: 7(ivec2) ImageRead 230 231 + Store 229(storeTemp) 232 + 233: 7(ivec2) Load 229(storeTemp) + 234: 7(ivec2) CompositeConstruct 132 132 + 235: 7(ivec2) SDiv 233 234 + Store 229(storeTemp) 235 + 236: 88 Load 90(g_tTex1di2) + 237: 6(int) Load 226(coordTemp) + 238: 7(ivec2) Load 229(storeTemp) + ImageWrite 236 237 238 + 240: 78(ptr) AccessChain 66 56 + 241: 6(int) Load 240 + Store 239(coordTemp) 241 + 243: 88 Load 90(g_tTex1di2) + 244: 6(int) Load 239(coordTemp) + 245: 7(ivec2) ImageRead 243 244 + Store 242(storeTemp) 245 + 246: 7(ivec2) Load 242(storeTemp) + 247: 7(ivec2) CompositeConstruct 132 132 + 248: 7(ivec2) SMod 246 247 + Store 242(storeTemp) 248 + 249: 88 Load 90(g_tTex1di2) + 250: 6(int) Load 239(coordTemp) + 251: 7(ivec2) Load 242(storeTemp) + ImageWrite 249 250 251 + 253: 78(ptr) AccessChain 66 56 + 254: 6(int) Load 253 + Store 252(coordTemp) 254 + 256: 88 Load 90(g_tTex1di2) + 257: 6(int) Load 252(coordTemp) + 258: 7(ivec2) ImageRead 256 257 + Store 255(storeTemp) 258 + 260: 7(ivec2) Load 255(storeTemp) + 261: 7(ivec2) CompositeConstruct 259 259 + 262: 7(ivec2) BitwiseAnd 260 261 + Store 255(storeTemp) 262 + 263: 88 Load 90(g_tTex1di2) + 264: 6(int) Load 252(coordTemp) + 265: 7(ivec2) Load 255(storeTemp) + ImageWrite 263 264 265 + 267: 78(ptr) AccessChain 66 56 + 268: 6(int) Load 267 + Store 266(coordTemp) 268 + 270: 88 Load 90(g_tTex1di2) + 271: 6(int) Load 266(coordTemp) + 272: 7(ivec2) ImageRead 270 271 + Store 269(storeTemp) 272 + 274: 7(ivec2) Load 269(storeTemp) + 275: 7(ivec2) CompositeConstruct 273 273 + 276: 7(ivec2) BitwiseOr 274 275 + Store 269(storeTemp) 276 + 277: 88 Load 90(g_tTex1di2) + 278: 6(int) Load 266(coordTemp) + 279: 7(ivec2) Load 269(storeTemp) + ImageWrite 277 278 279 + 281: 78(ptr) AccessChain 66 56 + 282: 6(int) Load 281 + Store 280(coordTemp) 282 + 284: 88 Load 90(g_tTex1di2) + 285: 6(int) Load 280(coordTemp) + 286: 7(ivec2) ImageRead 284 285 + Store 283(storeTemp) 286 + 287: 7(ivec2) Load 283(storeTemp) + 288: 7(ivec2) CompositeConstruct 132 132 + 289: 7(ivec2) ShiftLeftLogical 287 288 + Store 283(storeTemp) 289 + 290: 88 Load 90(g_tTex1di2) + 291: 6(int) Load 280(coordTemp) + 292: 7(ivec2) Load 283(storeTemp) + ImageWrite 290 291 292 + 294: 78(ptr) AccessChain 66 56 + 295: 6(int) Load 294 + Store 293(coordTemp) 295 + 297: 88 Load 90(g_tTex1di2) + 298: 6(int) Load 293(coordTemp) + 299: 7(ivec2) ImageRead 297 298 + Store 296(storeTemp) 299 + 300: 7(ivec2) Load 296(storeTemp) + 301: 7(ivec2) CompositeConstruct 132 132 + 302: 7(ivec2) ShiftRightArithmetic 300 301 + Store 296(storeTemp) 302 + 303: 88 Load 90(g_tTex1di2) + 304: 6(int) Load 293(coordTemp) + 305: 7(ivec2) Load 296(storeTemp) + ImageWrite 303 304 305 + 307: 21(fvec2) FunctionCall 40(SomeValue() + Store 306(storeTemp) 307 + 308: 104 Load 106(g_tTex2df2) + 309: 68(ptr) AccessChain 66 67 + 310: 7(ivec2) Load 309 + 311: 21(fvec2) Load 306(storeTemp) + ImageWrite 308 310 311 + 312: 104 Load 106(g_tTex2df2) + 313: 68(ptr) AccessChain 66 67 + 314: 7(ivec2) Load 313 + 315: 21(fvec2) Load 153(lf2) + ImageWrite 312 314 315 + Store 316(storeTemp) 318 + 319: 112 Load 114(g_tTex2di2) + 320: 68(ptr) AccessChain 66 67 + 321: 7(ivec2) Load 320 + 322: 7(ivec2) Load 316(storeTemp) + ImageWrite 319 321 322 + Store 323(storeTemp) 325 + 326: 120 Load 122(g_tTex2du2) + 327: 68(ptr) AccessChain 66 67 + 328: 7(ivec2) Load 327 + 329: 14(ivec2) Load 323(storeTemp) + ImageWrite 326 328 329 + 331: 21(fvec2) FunctionCall 40(SomeValue() + Store 330(storeTemp) 331 + 332: 128 Load 130(g_tTex3df2) + 333: 133(ptr) AccessChain 66 132 + 334: 62(ivec3) Load 333 + 335: 21(fvec2) Load 330(storeTemp) + ImageWrite 332 334 335 + 336: 128 Load 130(g_tTex3df2) + 337: 133(ptr) AccessChain 66 132 + 338: 62(ivec3) Load 337 + 339: 21(fvec2) Load 153(lf2) + ImageWrite 336 338 339 + Store 340(storeTemp) 342 + 343: 138 Load 140(g_tTex3di2) + 344: 133(ptr) AccessChain 66 132 + 345: 62(ivec3) Load 344 + 346: 7(ivec2) Load 340(storeTemp) + ImageWrite 343 345 346 + Store 347(storeTemp) 349 + 350: 146 Load 148(g_tTex3du2) + 351: 133(ptr) AccessChain 66 132 + 352: 62(ivec3) Load 351 + 353: 14(ivec2) Load 347(storeTemp) + ImageWrite 350 352 353 + 354: 74 Load 76(g_tTex1df2) + 355: 78(ptr) AccessChain 66 56 + 356: 6(int) Load 355 + 357: 21(fvec2) ImageRead 354 356 + Store 358(param) 357 + 359: 21(fvec2) FunctionCall 25(Fn1(vf2;) 358(param) + 360: 88 Load 90(g_tTex1di2) + 361: 78(ptr) AccessChain 66 56 + 362: 6(int) Load 361 + 363: 7(ivec2) ImageRead 360 362 + Store 364(param) 363 + 365: 7(ivec2) FunctionCall 11(Fn1(vi2;) 364(param) + 366: 96 Load 98(g_tTex1du2) + 367: 78(ptr) AccessChain 66 56 + 368: 6(int) Load 367 + 369: 14(ivec2) ImageRead 366 368 + Store 370(param) 369 + 371: 14(ivec2) FunctionCall 18(Fn1(vu2;) 370(param) + 374: 2 FunctionCall 37(Fn2(vf2;) 373(param) + 375: 21(fvec2) Load 373(param) + Store 372(tempArg) 375 + 376: 74 Load 76(g_tTex1df2) + 377: 78(ptr) AccessChain 66 56 + 378: 6(int) Load 377 + 379: 21(fvec2) Load 372(tempArg) + ImageWrite 376 378 379 + 382: 2 FunctionCall 29(Fn2(vi2;) 381(param) + 383: 7(ivec2) Load 381(param) + Store 380(tempArg) 383 + 384: 88 Load 90(g_tTex1di2) + 385: 78(ptr) AccessChain 66 56 + 386: 6(int) Load 385 + 387: 7(ivec2) Load 380(tempArg) + ImageWrite 384 386 387 + 390: 2 FunctionCall 33(Fn2(vu2;) 389(param) + 391: 14(ivec2) Load 389(param) + Store 388(tempArg) 391 + 392: 96 Load 98(g_tTex1du2) + 393: 78(ptr) AccessChain 66 56 + 394: 6(int) Load 393 + 395: 14(ivec2) Load 388(tempArg) + ImageWrite 392 394 395 + 397: 78(ptr) AccessChain 66 56 + 398: 6(int) Load 397 + Store 396(coordTemp) 398 + 400: 74 Load 76(g_tTex1df2) + 401: 6(int) Load 396(coordTemp) + 402: 21(fvec2) ImageRead 400 401 + Store 399(storeTemp) 402 + 403: 21(fvec2) Load 399(storeTemp) + 405: 21(fvec2) CompositeConstruct 404 404 + 406: 21(fvec2) FAdd 403 405 + Store 399(storeTemp) 406 + 407: 74 Load 76(g_tTex1df2) + 408: 6(int) Load 396(coordTemp) + 409: 21(fvec2) Load 399(storeTemp) + ImageWrite 407 408 409 + 411: 78(ptr) AccessChain 66 56 + 412: 6(int) Load 411 + Store 410(coordTemp) 412 + 414: 88 Load 90(g_tTex1di2) + 415: 6(int) Load 410(coordTemp) + 416: 7(ivec2) ImageRead 414 415 + Store 413(storeTemp) 416 + 417: 7(ivec2) Load 413(storeTemp) + 418: 7(ivec2) CompositeConstruct 67 67 + 419: 7(ivec2) IAdd 417 418 + Store 413(storeTemp) 419 + 420: 88 Load 90(g_tTex1di2) + 421: 6(int) Load 410(coordTemp) + 422: 7(ivec2) Load 413(storeTemp) + ImageWrite 420 421 422 + 424: 78(ptr) AccessChain 66 56 + 425: 6(int) Load 424 + Store 423(coordTemp) 425 + 427: 96 Load 98(g_tTex1du2) + 428: 6(int) Load 423(coordTemp) + 429: 14(ivec2) ImageRead 427 428 + Store 426(storeTemp) 429 + 430: 14(ivec2) Load 426(storeTemp) + 431: 7(ivec2) CompositeConstruct 67 67 + 432: 14(ivec2) IAdd 430 431 + Store 426(storeTemp) 432 + 433: 96 Load 98(g_tTex1du2) + 434: 6(int) Load 423(coordTemp) + 435: 14(ivec2) Load 426(storeTemp) + ImageWrite 433 434 435 + 437: 78(ptr) AccessChain 66 56 + 438: 6(int) Load 437 + Store 436(coordTemp) 438 + 440: 74 Load 76(g_tTex1df2) + 441: 6(int) Load 436(coordTemp) + 442: 21(fvec2) ImageRead 440 441 + Store 439(storeTemp) 442 + 443: 21(fvec2) Load 439(storeTemp) + 444: 21(fvec2) CompositeConstruct 404 404 + 445: 21(fvec2) FSub 443 444 + Store 439(storeTemp) 445 + 446: 74 Load 76(g_tTex1df2) + 447: 6(int) Load 436(coordTemp) + 448: 21(fvec2) Load 439(storeTemp) + ImageWrite 446 447 448 + 450: 78(ptr) AccessChain 66 56 + 451: 6(int) Load 450 + Store 449(coordTemp) 451 + 453: 88 Load 90(g_tTex1di2) + 454: 6(int) Load 449(coordTemp) + 455: 7(ivec2) ImageRead 453 454 + Store 452(storeTemp) 455 + 456: 7(ivec2) Load 452(storeTemp) + 457: 7(ivec2) CompositeConstruct 67 67 + 458: 7(ivec2) ISub 456 457 + Store 452(storeTemp) 458 + 459: 88 Load 90(g_tTex1di2) + 460: 6(int) Load 449(coordTemp) + 461: 7(ivec2) Load 452(storeTemp) + ImageWrite 459 460 461 + 463: 78(ptr) AccessChain 66 56 + 464: 6(int) Load 463 + Store 462(coordTemp) 464 + 466: 96 Load 98(g_tTex1du2) + 467: 6(int) Load 462(coordTemp) + 468: 14(ivec2) ImageRead 466 467 + Store 465(storeTemp) 468 + 469: 14(ivec2) Load 465(storeTemp) + 470: 7(ivec2) CompositeConstruct 67 67 + 471: 14(ivec2) ISub 469 470 + Store 465(storeTemp) 471 + 472: 96 Load 98(g_tTex1du2) + 473: 6(int) Load 462(coordTemp) + 474: 14(ivec2) Load 465(storeTemp) + ImageWrite 472 473 474 + 476: 78(ptr) AccessChain 66 56 + 477: 6(int) Load 476 + Store 475(coordTemp) 477 + 479: 74 Load 76(g_tTex1df2) + 480: 6(int) Load 475(coordTemp) + 481: 21(fvec2) ImageRead 479 480 + Store 478(storeTempPre) 481 + 483: 21(fvec2) Load 478(storeTempPre) + Store 482(storeTempPost) 483 + 484: 21(fvec2) Load 482(storeTempPost) + 485: 21(fvec2) CompositeConstruct 404 404 + 486: 21(fvec2) FAdd 484 485 + Store 482(storeTempPost) 486 + 487: 74 Load 76(g_tTex1df2) + 488: 6(int) Load 475(coordTemp) + 489: 21(fvec2) Load 482(storeTempPost) + ImageWrite 487 488 489 + 491: 78(ptr) AccessChain 66 56 + 492: 6(int) Load 491 + Store 490(coordTemp) 492 + 494: 96 Load 98(g_tTex1du2) + 495: 6(int) Load 490(coordTemp) + 496: 14(ivec2) ImageRead 494 495 + Store 493(storeTempPre) 496 + 498: 14(ivec2) Load 493(storeTempPre) + Store 497(storeTempPost) 498 + 499: 14(ivec2) Load 497(storeTempPost) + 500: 7(ivec2) CompositeConstruct 67 67 + 501: 14(ivec2) ISub 499 500 + Store 497(storeTempPost) 501 + 502: 96 Load 98(g_tTex1du2) + 503: 6(int) Load 490(coordTemp) + 504: 14(ivec2) Load 497(storeTempPost) + ImageWrite 502 503 504 + 506: 78(ptr) AccessChain 66 56 + 507: 6(int) Load 506 + Store 505(coordTemp) 507 + 509: 88 Load 90(g_tTex1di2) + 510: 6(int) Load 505(coordTemp) + 511: 7(ivec2) ImageRead 509 510 + Store 508(storeTempPre) 511 + 513: 7(ivec2) Load 508(storeTempPre) + Store 512(storeTempPost) 513 + 514: 7(ivec2) Load 512(storeTempPost) + 515: 7(ivec2) CompositeConstruct 67 67 + 516: 7(ivec2) IAdd 514 515 + Store 512(storeTempPost) 516 + 517: 88 Load 90(g_tTex1di2) + 518: 6(int) Load 505(coordTemp) + 519: 7(ivec2) Load 512(storeTempPost) + ImageWrite 517 518 519 + 521: 78(ptr) AccessChain 66 56 + 522: 6(int) Load 521 + Store 520(coordTemp) 522 + 524: 74 Load 76(g_tTex1df2) + 525: 6(int) Load 520(coordTemp) + 526: 21(fvec2) ImageRead 524 525 + Store 523(storeTempPre) 526 + 528: 21(fvec2) Load 523(storeTempPre) + Store 527(storeTempPost) 528 + 529: 21(fvec2) Load 527(storeTempPost) + 530: 21(fvec2) CompositeConstruct 404 404 + 531: 21(fvec2) FSub 529 530 + Store 527(storeTempPost) 531 + 532: 74 Load 76(g_tTex1df2) + 533: 6(int) Load 520(coordTemp) + 534: 21(fvec2) Load 527(storeTempPost) + ImageWrite 532 533 534 + 536: 78(ptr) AccessChain 66 56 + 537: 6(int) Load 536 + Store 535(coordTemp) 537 + 539: 88 Load 90(g_tTex1di2) + 540: 6(int) Load 535(coordTemp) + 541: 7(ivec2) ImageRead 539 540 + Store 538(storeTempPre) 541 + 543: 7(ivec2) Load 538(storeTempPre) + Store 542(storeTempPost) 543 + 544: 7(ivec2) Load 542(storeTempPost) + 545: 7(ivec2) CompositeConstruct 67 67 + 546: 7(ivec2) IAdd 544 545 + Store 542(storeTempPost) 546 + 547: 88 Load 90(g_tTex1di2) + 548: 6(int) Load 535(coordTemp) + 549: 7(ivec2) Load 542(storeTempPost) + ImageWrite 547 548 549 + 551: 78(ptr) AccessChain 66 56 + 552: 6(int) Load 551 + Store 550(coordTemp) 552 + 554: 96 Load 98(g_tTex1du2) + 555: 6(int) Load 550(coordTemp) + 556: 14(ivec2) ImageRead 554 555 + Store 553(storeTempPre) 556 + 558: 14(ivec2) Load 553(storeTempPre) + Store 557(storeTempPost) 558 + 559: 14(ivec2) Load 557(storeTempPost) + 560: 7(ivec2) CompositeConstruct 67 67 + 561: 14(ivec2) ISub 559 560 + Store 557(storeTempPost) 561 + 562: 96 Load 98(g_tTex1du2) + 563: 6(int) Load 550(coordTemp) + 564: 14(ivec2) Load 557(storeTempPost) + ImageWrite 562 563 564 + 566: 104 Load 106(g_tTex2df2) + 569: 21(fvec2) ImageRead 566 568 + Store 565(storeTemp) 569 + 570: 74 Load 76(g_tTex1df2) + 571: 21(fvec2) Load 565(storeTemp) + ImageWrite 570 67 571 + 576: 575(ptr) AccessChain 573(psout) 56 + Store 576 574 + 577:43(PS_OUTPUT) Load 573(psout) + ReturnValue 577 + FunctionEnd 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 new file mode 100644 index 0000000..5a8a79c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.array.dx10.frag.out @@ -0,0 +1,537 @@ +hlsl.sample.array.dx10.frag +Shader version: 450 +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}) +0:24 Function Parameters: +0:? Sequence +0:27 Sequence +0:27 move second child to first child ( temp 4-component vector of float) +0:27 'txval10' ( temp 4-component vector of float) +0:27 texture ( temp 4-component vector of float) +0:27 Construct combined texture-sampler ( temp sampler1DArray) +0:27 'g_tTex1df4' (layout( binding=0) uniform texture1DArray) +0:27 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:28 Sequence +0:28 move second child to first child ( temp 4-component vector of int) +0:28 'txval11' ( temp 4-component vector of int) +0:28 texture ( temp 4-component vector of int) +0:28 Construct combined texture-sampler ( temp isampler1DArray) +0:28 'g_tTex1di4' ( uniform itexture1DArray) +0:28 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.200000 +0:? 0.300000 +0:29 Sequence +0:29 move second child to first child ( temp 4-component vector of uint) +0:29 'txval12' ( temp 4-component vector of uint) +0:29 texture ( temp 4-component vector of uint) +0:29 Construct combined texture-sampler ( temp usampler1DArray) +0:29 'g_tTex1du4' ( uniform utexture1DArray) +0:29 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:31 Sequence +0:31 move second child to first child ( temp 4-component vector of float) +0:31 'txval20' ( temp 4-component vector of float) +0:31 texture ( temp 4-component vector of float) +0:31 Construct combined texture-sampler ( temp sampler2DArray) +0:31 'g_tTex2df4' ( uniform texture2DArray) +0:31 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:32 Sequence +0:32 move second child to first child ( temp 4-component vector of int) +0:32 'txval21' ( temp 4-component vector of int) +0:32 texture ( temp 4-component vector of int) +0:32 Construct combined texture-sampler ( temp isampler2DArray) +0:32 'g_tTex2di4' ( uniform itexture2DArray) +0:32 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:? 0.500000 +0:33 Sequence +0:33 move second child to first child ( temp 4-component vector of uint) +0:33 'txval22' ( temp 4-component vector of uint) +0:33 texture ( temp 4-component vector of uint) +0:33 Construct combined texture-sampler ( temp usampler2DArray) +0:33 'g_tTex2du4' ( uniform utexture2DArray) +0:33 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:? 0.700000 +0:35 Sequence +0:35 move second child to first child ( temp 4-component vector of float) +0:35 'txval40' ( temp 4-component vector of float) +0:35 texture ( temp 4-component vector of float) +0:35 Construct combined texture-sampler ( temp samplerCubeArray) +0:35 'g_tTexcdf4' ( uniform textureCubeArray) +0:35 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? 0.400000 +0:36 Sequence +0:36 move second child to first child ( temp 4-component vector of int) +0:36 'txval41' ( temp 4-component vector of int) +0:36 texture ( temp 4-component vector of int) +0:36 Construct combined texture-sampler ( temp isamplerCubeArray) +0:36 'g_tTexcdi4' ( uniform itextureCubeArray) +0:36 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:? 0.700000 +0:37 Sequence +0:37 move second child to first child ( temp 4-component vector of uint) +0:37 'txval42' ( temp 4-component vector of uint) +0:37 texture ( temp 4-component vector of uint) +0:37 Construct combined texture-sampler ( temp usamplerCubeArray) +0:37 'g_tTexcdu4' ( uniform utextureCubeArray) +0:37 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:? 1.000000 +0:39 move second child to first child ( temp 4-component vector of float) +0:39 Color: direct index for structure ( temp 4-component vector of float) +0:39 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:39 Constant: +0:39 0 (const int) +0:39 Constant: +0:39 1.000000 +0:39 1.000000 +0:39 1.000000 +0:39 1.000000 +0:40 move second child to first child ( temp float) +0:40 Depth: direct index for structure ( temp float) +0:40 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:40 Constant: +0:40 1 (const int) +0:40 Constant: +0:40 1.000000 +0:42 Branch: Return with expression +0:42 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:24 Function Definition: main( ( temp void) +0:24 Function Parameters: +0:? Sequence +0:24 Sequence +0:24 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1DArray) +0:? 'g_tTex1df4' (layout( binding=0) uniform texture1DArray) +0:? 'g_tTex1di4' ( uniform itexture1DArray) +0:? 'g_tTex1du4' ( uniform utexture1DArray) +0:? 'g_tTex2df4' ( uniform texture2DArray) +0:? 'g_tTex2di4' ( uniform itexture2DArray) +0:? 'g_tTex2du4' ( uniform utexture2DArray) +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) + + +Linked fragment stage: + + +Shader version: 450 +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}) +0:24 Function Parameters: +0:? Sequence +0:27 Sequence +0:27 move second child to first child ( temp 4-component vector of float) +0:27 'txval10' ( temp 4-component vector of float) +0:27 texture ( temp 4-component vector of float) +0:27 Construct combined texture-sampler ( temp sampler1DArray) +0:27 'g_tTex1df4' (layout( binding=0) uniform texture1DArray) +0:27 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:28 Sequence +0:28 move second child to first child ( temp 4-component vector of int) +0:28 'txval11' ( temp 4-component vector of int) +0:28 texture ( temp 4-component vector of int) +0:28 Construct combined texture-sampler ( temp isampler1DArray) +0:28 'g_tTex1di4' ( uniform itexture1DArray) +0:28 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.200000 +0:? 0.300000 +0:29 Sequence +0:29 move second child to first child ( temp 4-component vector of uint) +0:29 'txval12' ( temp 4-component vector of uint) +0:29 texture ( temp 4-component vector of uint) +0:29 Construct combined texture-sampler ( temp usampler1DArray) +0:29 'g_tTex1du4' ( uniform utexture1DArray) +0:29 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:31 Sequence +0:31 move second child to first child ( temp 4-component vector of float) +0:31 'txval20' ( temp 4-component vector of float) +0:31 texture ( temp 4-component vector of float) +0:31 Construct combined texture-sampler ( temp sampler2DArray) +0:31 'g_tTex2df4' ( uniform texture2DArray) +0:31 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:32 Sequence +0:32 move second child to first child ( temp 4-component vector of int) +0:32 'txval21' ( temp 4-component vector of int) +0:32 texture ( temp 4-component vector of int) +0:32 Construct combined texture-sampler ( temp isampler2DArray) +0:32 'g_tTex2di4' ( uniform itexture2DArray) +0:32 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:? 0.500000 +0:33 Sequence +0:33 move second child to first child ( temp 4-component vector of uint) +0:33 'txval22' ( temp 4-component vector of uint) +0:33 texture ( temp 4-component vector of uint) +0:33 Construct combined texture-sampler ( temp usampler2DArray) +0:33 'g_tTex2du4' ( uniform utexture2DArray) +0:33 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:? 0.700000 +0:35 Sequence +0:35 move second child to first child ( temp 4-component vector of float) +0:35 'txval40' ( temp 4-component vector of float) +0:35 texture ( temp 4-component vector of float) +0:35 Construct combined texture-sampler ( temp samplerCubeArray) +0:35 'g_tTexcdf4' ( uniform textureCubeArray) +0:35 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? 0.400000 +0:36 Sequence +0:36 move second child to first child ( temp 4-component vector of int) +0:36 'txval41' ( temp 4-component vector of int) +0:36 texture ( temp 4-component vector of int) +0:36 Construct combined texture-sampler ( temp isamplerCubeArray) +0:36 'g_tTexcdi4' ( uniform itextureCubeArray) +0:36 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:? 0.700000 +0:37 Sequence +0:37 move second child to first child ( temp 4-component vector of uint) +0:37 'txval42' ( temp 4-component vector of uint) +0:37 texture ( temp 4-component vector of uint) +0:37 Construct combined texture-sampler ( temp usamplerCubeArray) +0:37 'g_tTexcdu4' ( uniform utextureCubeArray) +0:37 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:? 1.000000 +0:39 move second child to first child ( temp 4-component vector of float) +0:39 Color: direct index for structure ( temp 4-component vector of float) +0:39 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:39 Constant: +0:39 0 (const int) +0:39 Constant: +0:39 1.000000 +0:39 1.000000 +0:39 1.000000 +0:39 1.000000 +0:40 move second child to first child ( temp float) +0:40 Depth: direct index for structure ( temp float) +0:40 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:40 Constant: +0:40 1 (const int) +0:40 Constant: +0:40 1.000000 +0:42 Branch: Return with expression +0:42 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:24 Function Definition: main( ( temp void) +0:24 Function Parameters: +0:? Sequence +0:24 Sequence +0:24 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1DArray) +0:? 'g_tTex1df4' (layout( binding=0) uniform texture1DArray) +0:? 'g_tTex1di4' ( uniform itexture1DArray) +0:? 'g_tTex1du4' ( uniform utexture1DArray) +0:? 'g_tTex2df4' ( uniform texture2DArray) +0:? 'g_tTex2di4' ( uniform itexture2DArray) +0:? 'g_tTex2du4' ( uniform utexture2DArray) +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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 146 + + Capability Shader + Capability Sampled1D + Capability SampledCubeArray + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 138 142 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + MemberName 8(PS_OUTPUT) 1 "Depth" + Name 10 "@main(" + Name 13 "txval10" + Name 16 "g_tTex1df4" + Name 20 "g_sSamp" + Name 32 "txval11" + Name 35 "g_tTex1di4" + Name 46 "txval12" + Name 49 "g_tTex1du4" + Name 57 "txval20" + Name 60 "g_tTex2df4" + Name 68 "txval21" + Name 71 "g_tTex2di4" + Name 79 "txval22" + Name 82 "g_tTex2du4" + Name 91 "txval40" + Name 94 "g_tTexcdf4" + Name 101 "txval41" + Name 104 "g_tTexcdi4" + Name 111 "txval42" + Name 114 "g_tTexcdu4" + Name 125 "psout" + Name 135 "flattenTemp" + Name 138 "Color" + Name 142 "Depth" + Name 145 "g_tTex1df4a" + 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 49(g_tTex1du4) DescriptorSet 0 + Decorate 60(g_tTex2df4) DescriptorSet 0 + Decorate 71(g_tTex2di4) DescriptorSet 0 + Decorate 82(g_tTex2du4) DescriptorSet 0 + 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 145(g_tTex1df4a) DescriptorSet 0 + Decorate 145(g_tTex1df4a) Binding 1 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8(PS_OUTPUT): TypeStruct 7(fvec4) 6(float) + 9: TypeFunction 8(PS_OUTPUT) + 12: TypePointer Function 7(fvec4) + 14: TypeImage 6(float) 1D array 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: TypeSampledImage 14 + 24: TypeVector 6(float) 2 + 25: 6(float) Constant 1036831949 + 26: 6(float) Constant 1045220557 + 27: 24(fvec2) ConstantComposite 25 26 + 29: TypeInt 32 1 + 30: TypeVector 29(int) 4 + 31: TypePointer Function 30(ivec4) + 33: TypeImage 29(int) 1D array sampled format:Unknown + 34: TypePointer UniformConstant 33 + 35(g_tTex1di4): 34(ptr) Variable UniformConstant + 38: TypeSampledImage 33 + 40: 6(float) Constant 1050253722 + 41: 24(fvec2) ConstantComposite 26 40 + 43: TypeInt 32 0 + 44: TypeVector 43(int) 4 + 45: TypePointer Function 44(ivec4) + 47: TypeImage 43(int) 1D array sampled format:Unknown + 48: TypePointer UniformConstant 47 + 49(g_tTex1du4): 48(ptr) Variable UniformConstant + 52: TypeSampledImage 47 + 54: 6(float) Constant 1053609165 + 55: 24(fvec2) ConstantComposite 40 54 + 58: TypeImage 6(float) 2D array sampled format:Unknown + 59: TypePointer UniformConstant 58 + 60(g_tTex2df4): 59(ptr) Variable UniformConstant + 63: TypeSampledImage 58 + 65: TypeVector 6(float) 3 + 66: 65(fvec3) ConstantComposite 25 26 40 + 69: TypeImage 29(int) 2D array sampled format:Unknown + 70: TypePointer UniformConstant 69 + 71(g_tTex2di4): 70(ptr) Variable UniformConstant + 74: TypeSampledImage 69 + 76: 6(float) Constant 1056964608 + 77: 65(fvec3) ConstantComposite 40 54 76 + 80: TypeImage 43(int) 2D array sampled format:Unknown + 81: TypePointer UniformConstant 80 + 82(g_tTex2du4): 81(ptr) Variable UniformConstant + 85: TypeSampledImage 80 + 87: 6(float) Constant 1058642330 + 88: 6(float) Constant 1060320051 + 89: 65(fvec3) ConstantComposite 76 87 88 + 92: TypeImage 6(float) Cube array sampled format:Unknown + 93: TypePointer UniformConstant 92 + 94(g_tTexcdf4): 93(ptr) Variable UniformConstant + 97: TypeSampledImage 92 + 99: 7(fvec4) ConstantComposite 25 26 40 54 + 102: TypeImage 29(int) Cube array sampled format:Unknown + 103: TypePointer UniformConstant 102 + 104(g_tTexcdi4): 103(ptr) Variable UniformConstant + 107: TypeSampledImage 102 + 109: 7(fvec4) ConstantComposite 54 76 87 88 + 112: TypeImage 43(int) Cube array sampled format:Unknown + 113: TypePointer UniformConstant 112 + 114(g_tTexcdu4): 113(ptr) Variable UniformConstant + 117: TypeSampledImage 112 + 119: 6(float) Constant 1061997773 + 120: 6(float) Constant 1063675494 + 121: 6(float) Constant 1065353216 + 122: 7(fvec4) ConstantComposite 88 119 120 121 + 124: TypePointer Function 8(PS_OUTPUT) + 126: 29(int) Constant 0 + 127: 7(fvec4) ConstantComposite 121 121 121 121 + 129: 29(int) Constant 1 + 130: TypePointer Function 6(float) + 137: TypePointer Output 7(fvec4) + 138(Color): 137(ptr) Variable Output + 141: TypePointer Output 6(float) + 142(Depth): 141(ptr) Variable Output +145(g_tTex1df4a): 15(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label +135(flattenTemp): 124(ptr) Variable Function + 136:8(PS_OUTPUT) FunctionCall 10(@main() + Store 135(flattenTemp) 136 + 139: 12(ptr) AccessChain 135(flattenTemp) 126 + 140: 7(fvec4) Load 139 + Store 138(Color) 140 + 143: 130(ptr) AccessChain 135(flattenTemp) 129 + 144: 6(float) Load 143 + Store 142(Depth) 144 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 13(txval10): 12(ptr) Variable Function + 32(txval11): 31(ptr) Variable Function + 46(txval12): 45(ptr) Variable Function + 57(txval20): 12(ptr) Variable Function + 68(txval21): 31(ptr) Variable Function + 79(txval22): 45(ptr) Variable Function + 91(txval40): 12(ptr) Variable Function + 101(txval41): 31(ptr) Variable Function + 111(txval42): 45(ptr) Variable Function + 125(psout): 124(ptr) Variable Function + 17: 14 Load 16(g_tTex1df4) + 21: 18 Load 20(g_sSamp) + 23: 22 SampledImage 17 21 + 28: 7(fvec4) ImageSampleImplicitLod 23 27 + Store 13(txval10) 28 + 36: 33 Load 35(g_tTex1di4) + 37: 18 Load 20(g_sSamp) + 39: 38 SampledImage 36 37 + 42: 30(ivec4) ImageSampleImplicitLod 39 41 + Store 32(txval11) 42 + 50: 47 Load 49(g_tTex1du4) + 51: 18 Load 20(g_sSamp) + 53: 52 SampledImage 50 51 + 56: 44(ivec4) ImageSampleImplicitLod 53 55 + Store 46(txval12) 56 + 61: 58 Load 60(g_tTex2df4) + 62: 18 Load 20(g_sSamp) + 64: 63 SampledImage 61 62 + 67: 7(fvec4) ImageSampleImplicitLod 64 66 + Store 57(txval20) 67 + 72: 69 Load 71(g_tTex2di4) + 73: 18 Load 20(g_sSamp) + 75: 74 SampledImage 72 73 + 78: 30(ivec4) ImageSampleImplicitLod 75 77 + Store 68(txval21) 78 + 83: 80 Load 82(g_tTex2du4) + 84: 18 Load 20(g_sSamp) + 86: 85 SampledImage 83 84 + 90: 44(ivec4) ImageSampleImplicitLod 86 89 + Store 79(txval22) 90 + 95: 92 Load 94(g_tTexcdf4) + 96: 18 Load 20(g_sSamp) + 98: 97 SampledImage 95 96 + 100: 7(fvec4) ImageSampleImplicitLod 98 99 + Store 91(txval40) 100 + 105: 102 Load 104(g_tTexcdi4) + 106: 18 Load 20(g_sSamp) + 108: 107 SampledImage 105 106 + 110: 30(ivec4) ImageSampleImplicitLod 108 109 + Store 101(txval41) 110 + 115: 112 Load 114(g_tTexcdu4) + 116: 18 Load 20(g_sSamp) + 118: 117 SampledImage 115 116 + 123: 44(ivec4) ImageSampleImplicitLod 118 122 + Store 111(txval42) 123 + 128: 12(ptr) AccessChain 125(psout) 126 + Store 128 127 + 131: 130(ptr) AccessChain 125(psout) 129 + Store 131 121 + 132:8(PS_OUTPUT) Load 125(psout) + ReturnValue 132 + FunctionEnd 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 new file mode 100644 index 0000000..725de27 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.basic.dx10.frag.out @@ -0,0 +1,858 @@ +hlsl.sample.basic.dx10.frag +WARNING: 0:4: 'immediate sampler state' : unimplemented + +Shader version: 450 +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}) +0:53 Function Parameters: +0:? Sequence +0:57 move second child to first child ( temp int) +0:57 CalculateLevelOfDetail: direct index for structure ( temp int) +0:57 'mtest' ( temp structure{ temp int Sample, temp int CalculateLevelOfDetail, temp int CalculateLevelOfDetailUnclamped, temp int Gather, temp int GetDimensions, temp int GetSamplePosition, temp int Load, temp int SampleBias, temp int SampleCmp, temp int SampleCmpLevelZero, temp int SampleGrad, temp int SampleLevel}) +0:57 Constant: +0:57 1 (const int) +0:57 Constant: +0:57 1 (const int) +0:58 move second child to first child ( temp int) +0:58 CalculateLevelOfDetailUnclamped: direct index for structure ( temp int) +0:58 'mtest' ( temp structure{ temp int Sample, temp int CalculateLevelOfDetail, temp int CalculateLevelOfDetailUnclamped, temp int Gather, temp int GetDimensions, temp int GetSamplePosition, temp int Load, temp int SampleBias, temp int SampleCmp, temp int SampleCmpLevelZero, temp int SampleGrad, temp int SampleLevel}) +0:58 Constant: +0:58 2 (const int) +0:58 Constant: +0:58 1 (const int) +0:59 move second child to first child ( temp int) +0:59 Gather: direct index for structure ( temp int) +0:59 'mtest' ( temp structure{ temp int Sample, temp int CalculateLevelOfDetail, temp int CalculateLevelOfDetailUnclamped, temp int Gather, temp int GetDimensions, temp int GetSamplePosition, temp int Load, temp int SampleBias, temp int SampleCmp, temp int SampleCmpLevelZero, temp int SampleGrad, temp int SampleLevel}) +0:59 Constant: +0:59 3 (const int) +0:59 Constant: +0:59 1 (const int) +0:60 move second child to first child ( temp int) +0:60 GetDimensions: direct index for structure ( temp int) +0:60 'mtest' ( temp structure{ temp int Sample, temp int CalculateLevelOfDetail, temp int CalculateLevelOfDetailUnclamped, temp int Gather, temp int GetDimensions, temp int GetSamplePosition, temp int Load, temp int SampleBias, temp int SampleCmp, temp int SampleCmpLevelZero, temp int SampleGrad, temp int SampleLevel}) +0:60 Constant: +0:60 4 (const int) +0:60 Constant: +0:60 1 (const int) +0:61 move second child to first child ( temp int) +0:61 GetSamplePosition: direct index for structure ( temp int) +0:61 'mtest' ( temp structure{ temp int Sample, temp int CalculateLevelOfDetail, temp int CalculateLevelOfDetailUnclamped, temp int Gather, temp int GetDimensions, temp int GetSamplePosition, temp int Load, temp int SampleBias, temp int SampleCmp, temp int SampleCmpLevelZero, temp int SampleGrad, temp int SampleLevel}) +0:61 Constant: +0:61 5 (const int) +0:61 Constant: +0:61 1 (const int) +0:62 move second child to first child ( temp int) +0:62 Load: direct index for structure ( temp int) +0:62 'mtest' ( temp structure{ temp int Sample, temp int CalculateLevelOfDetail, temp int CalculateLevelOfDetailUnclamped, temp int Gather, temp int GetDimensions, temp int GetSamplePosition, temp int Load, temp int SampleBias, temp int SampleCmp, temp int SampleCmpLevelZero, temp int SampleGrad, temp int SampleLevel}) +0:62 Constant: +0:62 6 (const int) +0:62 Constant: +0:62 1 (const int) +0:63 move second child to first child ( temp int) +0:63 Sample: direct index for structure ( temp int) +0:63 'mtest' ( temp structure{ temp int Sample, temp int CalculateLevelOfDetail, temp int CalculateLevelOfDetailUnclamped, temp int Gather, temp int GetDimensions, temp int GetSamplePosition, temp int Load, temp int SampleBias, temp int SampleCmp, temp int SampleCmpLevelZero, temp int SampleGrad, temp int SampleLevel}) +0:63 Constant: +0:63 0 (const int) +0:63 Constant: +0:63 1 (const int) +0:64 move second child to first child ( temp int) +0:64 SampleBias: direct index for structure ( temp int) +0:64 'mtest' ( temp structure{ temp int Sample, temp int CalculateLevelOfDetail, temp int CalculateLevelOfDetailUnclamped, temp int Gather, temp int GetDimensions, temp int GetSamplePosition, temp int Load, temp int SampleBias, temp int SampleCmp, temp int SampleCmpLevelZero, temp int SampleGrad, temp int SampleLevel}) +0:64 Constant: +0:64 7 (const int) +0:64 Constant: +0:64 1 (const int) +0:65 move second child to first child ( temp int) +0:65 SampleCmp: direct index for structure ( temp int) +0:65 'mtest' ( temp structure{ temp int Sample, temp int CalculateLevelOfDetail, temp int CalculateLevelOfDetailUnclamped, temp int Gather, temp int GetDimensions, temp int GetSamplePosition, temp int Load, temp int SampleBias, temp int SampleCmp, temp int SampleCmpLevelZero, temp int SampleGrad, temp int SampleLevel}) +0:65 Constant: +0:65 8 (const int) +0:65 Constant: +0:65 1 (const int) +0:66 move second child to first child ( temp int) +0:66 SampleCmpLevelZero: direct index for structure ( temp int) +0:66 'mtest' ( temp structure{ temp int Sample, temp int CalculateLevelOfDetail, temp int CalculateLevelOfDetailUnclamped, temp int Gather, temp int GetDimensions, temp int GetSamplePosition, temp int Load, temp int SampleBias, temp int SampleCmp, temp int SampleCmpLevelZero, temp int SampleGrad, temp int SampleLevel}) +0:66 Constant: +0:66 9 (const int) +0:66 Constant: +0:66 1 (const int) +0:67 move second child to first child ( temp int) +0:67 SampleGrad: direct index for structure ( temp int) +0:67 'mtest' ( temp structure{ temp int Sample, temp int CalculateLevelOfDetail, temp int CalculateLevelOfDetailUnclamped, temp int Gather, temp int GetDimensions, temp int GetSamplePosition, temp int Load, temp int SampleBias, temp int SampleCmp, temp int SampleCmpLevelZero, temp int SampleGrad, temp int SampleLevel}) +0:67 Constant: +0:67 10 (const int) +0:67 Constant: +0:67 1 (const int) +0:68 move second child to first child ( temp int) +0:68 SampleLevel: direct index for structure ( temp int) +0:68 'mtest' ( temp structure{ temp int Sample, temp int CalculateLevelOfDetail, temp int CalculateLevelOfDetailUnclamped, temp int Gather, temp int GetDimensions, temp int GetSamplePosition, temp int Load, temp int SampleBias, temp int SampleCmp, temp int SampleCmpLevelZero, temp int SampleGrad, temp int SampleLevel}) +0:68 Constant: +0:68 11 (const int) +0:68 Constant: +0:68 1 (const int) +0:70 Sequence +0:70 move second child to first child ( temp 4-component vector of float) +0:70 'txval10' ( temp 4-component vector of float) +0:70 texture ( temp 4-component vector of float) +0:70 Construct combined texture-sampler ( temp sampler1D) +0:70 'g_tTex1df4' (layout( binding=0) uniform texture1D) +0:70 'g_sSamp' (layout( binding=0) uniform sampler) +0:70 Constant: +0:70 0.100000 +0:71 Sequence +0:71 move second child to first child ( temp 4-component vector of int) +0:71 'txval11' ( temp 4-component vector of int) +0:71 texture ( temp 4-component vector of int) +0:71 Construct combined texture-sampler ( temp isampler1D) +0:71 'g_tTex1di4' ( uniform itexture1D) +0:71 'g_sSamp' (layout( binding=0) uniform sampler) +0:71 Constant: +0:71 0.200000 +0:72 Sequence +0:72 move second child to first child ( temp 4-component vector of uint) +0:72 'txval12' ( temp 4-component vector of uint) +0:72 texture ( temp 4-component vector of uint) +0:72 Construct combined texture-sampler ( temp usampler1D) +0:72 'g_tTex1du4' ( uniform utexture1D) +0:72 'g_sSamp' (layout( binding=0) uniform sampler) +0:72 Constant: +0:72 0.300000 +0:74 Sequence +0:74 move second child to first child ( temp 4-component vector of float) +0:74 'txval20' ( temp 4-component vector of float) +0:74 texture ( temp 4-component vector of float) +0:74 Construct combined texture-sampler ( temp sampler2D) +0:74 'g_tTex2df4' ( uniform texture2D) +0:74 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:75 Sequence +0:75 move second child to first child ( temp 4-component vector of int) +0:75 'txval21' ( temp 4-component vector of int) +0:75 texture ( temp 4-component vector of int) +0:75 Construct combined texture-sampler ( temp isampler2D) +0:75 'g_tTex2di4' ( uniform itexture2D) +0:75 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:76 Sequence +0:76 move second child to first child ( temp 4-component vector of uint) +0:76 'txval22' ( temp 4-component vector of uint) +0:76 texture ( temp 4-component vector of uint) +0:76 Construct combined texture-sampler ( temp usampler2D) +0:76 'g_tTex2du4' ( uniform utexture2D) +0:76 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:78 Sequence +0:78 move second child to first child ( temp 4-component vector of float) +0:78 'txval30' ( temp 4-component vector of float) +0:78 texture ( temp 4-component vector of float) +0:78 Construct combined texture-sampler ( temp sampler3D) +0:78 'g_tTex3df4' ( uniform texture3D) +0:78 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:79 Sequence +0:79 move second child to first child ( temp 4-component vector of int) +0:79 'txval31' ( temp 4-component vector of int) +0:79 texture ( temp 4-component vector of int) +0:79 Construct combined texture-sampler ( temp isampler3D) +0:79 'g_tTex3di4' ( uniform itexture3D) +0:79 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:80 Sequence +0:80 move second child to first child ( temp 4-component vector of uint) +0:80 'txval32' ( temp 4-component vector of uint) +0:80 texture ( temp 4-component vector of uint) +0:80 Construct combined texture-sampler ( temp usampler3D) +0:80 'g_tTex3du4' ( uniform utexture3D) +0:80 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:82 Sequence +0:82 move second child to first child ( temp 4-component vector of float) +0:82 'txval40' ( temp 4-component vector of float) +0:82 texture ( temp 4-component vector of float) +0:82 Construct combined texture-sampler ( temp samplerCube) +0:82 'g_tTexcdf4' ( uniform textureCube) +0:82 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:83 Sequence +0:83 move second child to first child ( temp 4-component vector of int) +0:83 'txval41' ( temp 4-component vector of int) +0:83 texture ( temp 4-component vector of int) +0:83 Construct combined texture-sampler ( temp isamplerCube) +0:83 'g_tTexcdi4' ( uniform itextureCube) +0:83 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:84 Sequence +0:84 move second child to first child ( temp 4-component vector of uint) +0:84 'txval42' ( temp 4-component vector of uint) +0:84 texture ( temp 4-component vector of uint) +0:84 Construct combined texture-sampler ( temp usamplerCube) +0:84 'g_tTexcdu4' ( uniform utextureCube) +0:84 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:86 move second child to first child ( temp 4-component vector of float) +0:86 Color: direct index for structure ( temp 4-component vector of float) +0:86 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:86 Constant: +0:86 0 (const int) +0:86 Constant: +0:86 1.000000 +0:86 1.000000 +0:86 1.000000 +0:86 1.000000 +0:87 move second child to first child ( temp float) +0:87 Depth: direct index for structure ( temp float) +0:87 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:87 Constant: +0:87 1 (const int) +0:87 Constant: +0:87 1.000000 +0:89 Branch: Return with expression +0:89 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:53 Function Definition: main( ( temp void) +0:53 Function Parameters: +0:? Sequence +0:53 Sequence +0:53 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:53 1 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_sSamp2d' ( uniform sampler) +0:? 'g_sSamp2D_b' ( uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1D) +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_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:? 'Color' (layout( location=0) out 4-component vector of float) +0:? 'Depth' ( out float FragDepth) + + +Linked fragment stage: + + +Shader version: 450 +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}) +0:53 Function Parameters: +0:? Sequence +0:57 move second child to first child ( temp int) +0:57 CalculateLevelOfDetail: direct index for structure ( temp int) +0:57 'mtest' ( temp structure{ temp int Sample, temp int CalculateLevelOfDetail, temp int CalculateLevelOfDetailUnclamped, temp int Gather, temp int GetDimensions, temp int GetSamplePosition, temp int Load, temp int SampleBias, temp int SampleCmp, temp int SampleCmpLevelZero, temp int SampleGrad, temp int SampleLevel}) +0:57 Constant: +0:57 1 (const int) +0:57 Constant: +0:57 1 (const int) +0:58 move second child to first child ( temp int) +0:58 CalculateLevelOfDetailUnclamped: direct index for structure ( temp int) +0:58 'mtest' ( temp structure{ temp int Sample, temp int CalculateLevelOfDetail, temp int CalculateLevelOfDetailUnclamped, temp int Gather, temp int GetDimensions, temp int GetSamplePosition, temp int Load, temp int SampleBias, temp int SampleCmp, temp int SampleCmpLevelZero, temp int SampleGrad, temp int SampleLevel}) +0:58 Constant: +0:58 2 (const int) +0:58 Constant: +0:58 1 (const int) +0:59 move second child to first child ( temp int) +0:59 Gather: direct index for structure ( temp int) +0:59 'mtest' ( temp structure{ temp int Sample, temp int CalculateLevelOfDetail, temp int CalculateLevelOfDetailUnclamped, temp int Gather, temp int GetDimensions, temp int GetSamplePosition, temp int Load, temp int SampleBias, temp int SampleCmp, temp int SampleCmpLevelZero, temp int SampleGrad, temp int SampleLevel}) +0:59 Constant: +0:59 3 (const int) +0:59 Constant: +0:59 1 (const int) +0:60 move second child to first child ( temp int) +0:60 GetDimensions: direct index for structure ( temp int) +0:60 'mtest' ( temp structure{ temp int Sample, temp int CalculateLevelOfDetail, temp int CalculateLevelOfDetailUnclamped, temp int Gather, temp int GetDimensions, temp int GetSamplePosition, temp int Load, temp int SampleBias, temp int SampleCmp, temp int SampleCmpLevelZero, temp int SampleGrad, temp int SampleLevel}) +0:60 Constant: +0:60 4 (const int) +0:60 Constant: +0:60 1 (const int) +0:61 move second child to first child ( temp int) +0:61 GetSamplePosition: direct index for structure ( temp int) +0:61 'mtest' ( temp structure{ temp int Sample, temp int CalculateLevelOfDetail, temp int CalculateLevelOfDetailUnclamped, temp int Gather, temp int GetDimensions, temp int GetSamplePosition, temp int Load, temp int SampleBias, temp int SampleCmp, temp int SampleCmpLevelZero, temp int SampleGrad, temp int SampleLevel}) +0:61 Constant: +0:61 5 (const int) +0:61 Constant: +0:61 1 (const int) +0:62 move second child to first child ( temp int) +0:62 Load: direct index for structure ( temp int) +0:62 'mtest' ( temp structure{ temp int Sample, temp int CalculateLevelOfDetail, temp int CalculateLevelOfDetailUnclamped, temp int Gather, temp int GetDimensions, temp int GetSamplePosition, temp int Load, temp int SampleBias, temp int SampleCmp, temp int SampleCmpLevelZero, temp int SampleGrad, temp int SampleLevel}) +0:62 Constant: +0:62 6 (const int) +0:62 Constant: +0:62 1 (const int) +0:63 move second child to first child ( temp int) +0:63 Sample: direct index for structure ( temp int) +0:63 'mtest' ( temp structure{ temp int Sample, temp int CalculateLevelOfDetail, temp int CalculateLevelOfDetailUnclamped, temp int Gather, temp int GetDimensions, temp int GetSamplePosition, temp int Load, temp int SampleBias, temp int SampleCmp, temp int SampleCmpLevelZero, temp int SampleGrad, temp int SampleLevel}) +0:63 Constant: +0:63 0 (const int) +0:63 Constant: +0:63 1 (const int) +0:64 move second child to first child ( temp int) +0:64 SampleBias: direct index for structure ( temp int) +0:64 'mtest' ( temp structure{ temp int Sample, temp int CalculateLevelOfDetail, temp int CalculateLevelOfDetailUnclamped, temp int Gather, temp int GetDimensions, temp int GetSamplePosition, temp int Load, temp int SampleBias, temp int SampleCmp, temp int SampleCmpLevelZero, temp int SampleGrad, temp int SampleLevel}) +0:64 Constant: +0:64 7 (const int) +0:64 Constant: +0:64 1 (const int) +0:65 move second child to first child ( temp int) +0:65 SampleCmp: direct index for structure ( temp int) +0:65 'mtest' ( temp structure{ temp int Sample, temp int CalculateLevelOfDetail, temp int CalculateLevelOfDetailUnclamped, temp int Gather, temp int GetDimensions, temp int GetSamplePosition, temp int Load, temp int SampleBias, temp int SampleCmp, temp int SampleCmpLevelZero, temp int SampleGrad, temp int SampleLevel}) +0:65 Constant: +0:65 8 (const int) +0:65 Constant: +0:65 1 (const int) +0:66 move second child to first child ( temp int) +0:66 SampleCmpLevelZero: direct index for structure ( temp int) +0:66 'mtest' ( temp structure{ temp int Sample, temp int CalculateLevelOfDetail, temp int CalculateLevelOfDetailUnclamped, temp int Gather, temp int GetDimensions, temp int GetSamplePosition, temp int Load, temp int SampleBias, temp int SampleCmp, temp int SampleCmpLevelZero, temp int SampleGrad, temp int SampleLevel}) +0:66 Constant: +0:66 9 (const int) +0:66 Constant: +0:66 1 (const int) +0:67 move second child to first child ( temp int) +0:67 SampleGrad: direct index for structure ( temp int) +0:67 'mtest' ( temp structure{ temp int Sample, temp int CalculateLevelOfDetail, temp int CalculateLevelOfDetailUnclamped, temp int Gather, temp int GetDimensions, temp int GetSamplePosition, temp int Load, temp int SampleBias, temp int SampleCmp, temp int SampleCmpLevelZero, temp int SampleGrad, temp int SampleLevel}) +0:67 Constant: +0:67 10 (const int) +0:67 Constant: +0:67 1 (const int) +0:68 move second child to first child ( temp int) +0:68 SampleLevel: direct index for structure ( temp int) +0:68 'mtest' ( temp structure{ temp int Sample, temp int CalculateLevelOfDetail, temp int CalculateLevelOfDetailUnclamped, temp int Gather, temp int GetDimensions, temp int GetSamplePosition, temp int Load, temp int SampleBias, temp int SampleCmp, temp int SampleCmpLevelZero, temp int SampleGrad, temp int SampleLevel}) +0:68 Constant: +0:68 11 (const int) +0:68 Constant: +0:68 1 (const int) +0:70 Sequence +0:70 move second child to first child ( temp 4-component vector of float) +0:70 'txval10' ( temp 4-component vector of float) +0:70 texture ( temp 4-component vector of float) +0:70 Construct combined texture-sampler ( temp sampler1D) +0:70 'g_tTex1df4' (layout( binding=0) uniform texture1D) +0:70 'g_sSamp' (layout( binding=0) uniform sampler) +0:70 Constant: +0:70 0.100000 +0:71 Sequence +0:71 move second child to first child ( temp 4-component vector of int) +0:71 'txval11' ( temp 4-component vector of int) +0:71 texture ( temp 4-component vector of int) +0:71 Construct combined texture-sampler ( temp isampler1D) +0:71 'g_tTex1di4' ( uniform itexture1D) +0:71 'g_sSamp' (layout( binding=0) uniform sampler) +0:71 Constant: +0:71 0.200000 +0:72 Sequence +0:72 move second child to first child ( temp 4-component vector of uint) +0:72 'txval12' ( temp 4-component vector of uint) +0:72 texture ( temp 4-component vector of uint) +0:72 Construct combined texture-sampler ( temp usampler1D) +0:72 'g_tTex1du4' ( uniform utexture1D) +0:72 'g_sSamp' (layout( binding=0) uniform sampler) +0:72 Constant: +0:72 0.300000 +0:74 Sequence +0:74 move second child to first child ( temp 4-component vector of float) +0:74 'txval20' ( temp 4-component vector of float) +0:74 texture ( temp 4-component vector of float) +0:74 Construct combined texture-sampler ( temp sampler2D) +0:74 'g_tTex2df4' ( uniform texture2D) +0:74 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:75 Sequence +0:75 move second child to first child ( temp 4-component vector of int) +0:75 'txval21' ( temp 4-component vector of int) +0:75 texture ( temp 4-component vector of int) +0:75 Construct combined texture-sampler ( temp isampler2D) +0:75 'g_tTex2di4' ( uniform itexture2D) +0:75 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:76 Sequence +0:76 move second child to first child ( temp 4-component vector of uint) +0:76 'txval22' ( temp 4-component vector of uint) +0:76 texture ( temp 4-component vector of uint) +0:76 Construct combined texture-sampler ( temp usampler2D) +0:76 'g_tTex2du4' ( uniform utexture2D) +0:76 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:78 Sequence +0:78 move second child to first child ( temp 4-component vector of float) +0:78 'txval30' ( temp 4-component vector of float) +0:78 texture ( temp 4-component vector of float) +0:78 Construct combined texture-sampler ( temp sampler3D) +0:78 'g_tTex3df4' ( uniform texture3D) +0:78 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:79 Sequence +0:79 move second child to first child ( temp 4-component vector of int) +0:79 'txval31' ( temp 4-component vector of int) +0:79 texture ( temp 4-component vector of int) +0:79 Construct combined texture-sampler ( temp isampler3D) +0:79 'g_tTex3di4' ( uniform itexture3D) +0:79 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:80 Sequence +0:80 move second child to first child ( temp 4-component vector of uint) +0:80 'txval32' ( temp 4-component vector of uint) +0:80 texture ( temp 4-component vector of uint) +0:80 Construct combined texture-sampler ( temp usampler3D) +0:80 'g_tTex3du4' ( uniform utexture3D) +0:80 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:82 Sequence +0:82 move second child to first child ( temp 4-component vector of float) +0:82 'txval40' ( temp 4-component vector of float) +0:82 texture ( temp 4-component vector of float) +0:82 Construct combined texture-sampler ( temp samplerCube) +0:82 'g_tTexcdf4' ( uniform textureCube) +0:82 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:83 Sequence +0:83 move second child to first child ( temp 4-component vector of int) +0:83 'txval41' ( temp 4-component vector of int) +0:83 texture ( temp 4-component vector of int) +0:83 Construct combined texture-sampler ( temp isamplerCube) +0:83 'g_tTexcdi4' ( uniform itextureCube) +0:83 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:84 Sequence +0:84 move second child to first child ( temp 4-component vector of uint) +0:84 'txval42' ( temp 4-component vector of uint) +0:84 texture ( temp 4-component vector of uint) +0:84 Construct combined texture-sampler ( temp usamplerCube) +0:84 'g_tTexcdu4' ( uniform utextureCube) +0:84 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:86 move second child to first child ( temp 4-component vector of float) +0:86 Color: direct index for structure ( temp 4-component vector of float) +0:86 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:86 Constant: +0:86 0 (const int) +0:86 Constant: +0:86 1.000000 +0:86 1.000000 +0:86 1.000000 +0:86 1.000000 +0:87 move second child to first child ( temp float) +0:87 Depth: direct index for structure ( temp float) +0:87 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:87 Constant: +0:87 1 (const int) +0:87 Constant: +0:87 1.000000 +0:89 Branch: Return with expression +0:89 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:53 Function Definition: main( ( temp void) +0:53 Function Parameters: +0:? Sequence +0:53 Sequence +0:53 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:53 1 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_sSamp2d' ( uniform sampler) +0:? 'g_sSamp2D_b' ( uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1D) +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_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:? 'Color' (layout( location=0) out 4-component vector of float) +0:? 'Depth' ( out float FragDepth) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 198 + + Capability Shader + Capability Sampled1D + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 188 192 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + MemberName 8(PS_OUTPUT) 1 "Depth" + Name 10 "@main(" + Name 13 "MemberTest" + MemberName 13(MemberTest) 0 "Sample" + MemberName 13(MemberTest) 1 "CalculateLevelOfDetail" + MemberName 13(MemberTest) 2 "CalculateLevelOfDetailUnclamped" + MemberName 13(MemberTest) 3 "Gather" + MemberName 13(MemberTest) 4 "GetDimensions" + MemberName 13(MemberTest) 5 "GetSamplePosition" + MemberName 13(MemberTest) 6 "Load" + MemberName 13(MemberTest) 7 "SampleBias" + MemberName 13(MemberTest) 8 "SampleCmp" + MemberName 13(MemberTest) 9 "SampleCmpLevelZero" + MemberName 13(MemberTest) 10 "SampleGrad" + MemberName 13(MemberTest) 11 "SampleLevel" + Name 15 "mtest" + Name 42 "txval10" + Name 45 "g_tTex1df4" + Name 49 "g_sSamp" + Name 57 "txval11" + Name 60 "g_tTex1di4" + Name 70 "txval12" + Name 73 "g_tTex1du4" + Name 80 "txval20" + Name 83 "g_tTex2df4" + Name 91 "txval21" + Name 94 "g_tTex2di4" + Name 102 "txval22" + Name 105 "g_tTex2du4" + Name 114 "txval30" + Name 117 "g_tTex3df4" + Name 125 "txval31" + Name 128 "g_tTex3di4" + Name 135 "txval32" + Name 138 "g_tTex3du4" + Name 148 "txval40" + Name 151 "g_tTexcdf4" + Name 157 "txval41" + Name 160 "g_tTexcdi4" + Name 166 "txval42" + Name 169 "g_tTexcdu4" + Name 176 "psout" + Name 185 "flattenTemp" + Name 188 "Color" + Name 192 "Depth" + Name 195 "g_sSamp2d" + Name 196 "g_sSamp2D_b" + Name 197 "g_tTex1df4a" + Decorate 45(g_tTex1df4) DescriptorSet 0 + Decorate 45(g_tTex1df4) Binding 0 + Decorate 49(g_sSamp) DescriptorSet 0 + Decorate 49(g_sSamp) Binding 0 + Decorate 60(g_tTex1di4) DescriptorSet 0 + Decorate 73(g_tTex1du4) DescriptorSet 0 + Decorate 83(g_tTex2df4) DescriptorSet 0 + Decorate 94(g_tTex2di4) DescriptorSet 0 + Decorate 105(g_tTex2du4) DescriptorSet 0 + Decorate 117(g_tTex3df4) DescriptorSet 0 + Decorate 128(g_tTex3di4) DescriptorSet 0 + Decorate 138(g_tTex3du4) DescriptorSet 0 + 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 195(g_sSamp2d) DescriptorSet 0 + Decorate 196(g_sSamp2D_b) DescriptorSet 0 + Decorate 197(g_tTex1df4a) DescriptorSet 0 + Decorate 197(g_tTex1df4a) Binding 1 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8(PS_OUTPUT): TypeStruct 7(fvec4) 6(float) + 9: TypeFunction 8(PS_OUTPUT) + 12: TypeInt 32 1 + 13(MemberTest): TypeStruct 12(int) 12(int) 12(int) 12(int) 12(int) 12(int) 12(int) 12(int) 12(int) 12(int) 12(int) 12(int) + 14: TypePointer Function 13(MemberTest) + 16: 12(int) Constant 1 + 17: TypePointer Function 12(int) + 19: 12(int) Constant 2 + 21: 12(int) Constant 3 + 23: 12(int) Constant 4 + 25: 12(int) Constant 5 + 27: 12(int) Constant 6 + 29: 12(int) Constant 0 + 31: 12(int) Constant 7 + 33: 12(int) Constant 8 + 35: 12(int) Constant 9 + 37: 12(int) Constant 10 + 39: 12(int) Constant 11 + 41: TypePointer Function 7(fvec4) + 43: TypeImage 6(float) 1D sampled format:Unknown + 44: TypePointer UniformConstant 43 + 45(g_tTex1df4): 44(ptr) Variable UniformConstant + 47: TypeSampler + 48: TypePointer UniformConstant 47 + 49(g_sSamp): 48(ptr) Variable UniformConstant + 51: TypeSampledImage 43 + 53: 6(float) Constant 1036831949 + 55: TypeVector 12(int) 4 + 56: TypePointer Function 55(ivec4) + 58: TypeImage 12(int) 1D sampled format:Unknown + 59: TypePointer UniformConstant 58 + 60(g_tTex1di4): 59(ptr) Variable UniformConstant + 63: TypeSampledImage 58 + 65: 6(float) Constant 1045220557 + 67: TypeInt 32 0 + 68: TypeVector 67(int) 4 + 69: TypePointer Function 68(ivec4) + 71: TypeImage 67(int) 1D sampled format:Unknown + 72: TypePointer UniformConstant 71 + 73(g_tTex1du4): 72(ptr) Variable UniformConstant + 76: TypeSampledImage 71 + 78: 6(float) Constant 1050253722 + 81: TypeImage 6(float) 2D sampled format:Unknown + 82: TypePointer UniformConstant 81 + 83(g_tTex2df4): 82(ptr) Variable UniformConstant + 86: TypeSampledImage 81 + 88: TypeVector 6(float) 2 + 89: 88(fvec2) ConstantComposite 53 65 + 92: TypeImage 12(int) 2D sampled format:Unknown + 93: TypePointer UniformConstant 92 + 94(g_tTex2di4): 93(ptr) Variable UniformConstant + 97: TypeSampledImage 92 + 99: 6(float) Constant 1053609165 + 100: 88(fvec2) ConstantComposite 78 99 + 103: TypeImage 67(int) 2D sampled format:Unknown + 104: TypePointer UniformConstant 103 + 105(g_tTex2du4): 104(ptr) Variable UniformConstant + 108: TypeSampledImage 103 + 110: 6(float) Constant 1056964608 + 111: 6(float) Constant 1058642330 + 112: 88(fvec2) ConstantComposite 110 111 + 115: TypeImage 6(float) 3D sampled format:Unknown + 116: TypePointer UniformConstant 115 + 117(g_tTex3df4): 116(ptr) Variable UniformConstant + 120: TypeSampledImage 115 + 122: TypeVector 6(float) 3 + 123: 122(fvec3) ConstantComposite 53 65 78 + 126: TypeImage 12(int) 3D sampled format:Unknown + 127: TypePointer UniformConstant 126 + 128(g_tTex3di4): 127(ptr) Variable UniformConstant + 131: TypeSampledImage 126 + 133: 122(fvec3) ConstantComposite 99 110 111 + 136: TypeImage 67(int) 3D sampled format:Unknown + 137: TypePointer UniformConstant 136 + 138(g_tTex3du4): 137(ptr) Variable UniformConstant + 141: TypeSampledImage 136 + 143: 6(float) Constant 1060320051 + 144: 6(float) Constant 1061997773 + 145: 6(float) Constant 1063675494 + 146: 122(fvec3) ConstantComposite 143 144 145 + 149: TypeImage 6(float) Cube sampled format:Unknown + 150: TypePointer UniformConstant 149 + 151(g_tTexcdf4): 150(ptr) Variable UniformConstant + 154: TypeSampledImage 149 + 158: TypeImage 12(int) Cube sampled format:Unknown + 159: TypePointer UniformConstant 158 + 160(g_tTexcdi4): 159(ptr) Variable UniformConstant + 163: TypeSampledImage 158 + 167: TypeImage 67(int) Cube sampled format:Unknown + 168: TypePointer UniformConstant 167 + 169(g_tTexcdu4): 168(ptr) Variable UniformConstant + 172: TypeSampledImage 167 + 175: TypePointer Function 8(PS_OUTPUT) + 177: 6(float) Constant 1065353216 + 178: 7(fvec4) ConstantComposite 177 177 177 177 + 180: TypePointer Function 6(float) + 187: TypePointer Output 7(fvec4) + 188(Color): 187(ptr) Variable Output + 191: TypePointer Output 6(float) + 192(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 + 4(main): 2 Function None 3 + 5: Label +185(flattenTemp): 175(ptr) Variable Function + 186:8(PS_OUTPUT) FunctionCall 10(@main() + Store 185(flattenTemp) 186 + 189: 41(ptr) AccessChain 185(flattenTemp) 29 + 190: 7(fvec4) Load 189 + Store 188(Color) 190 + 193: 180(ptr) AccessChain 185(flattenTemp) 16 + 194: 6(float) Load 193 + Store 192(Depth) 194 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 15(mtest): 14(ptr) Variable Function + 42(txval10): 41(ptr) Variable Function + 57(txval11): 56(ptr) Variable Function + 70(txval12): 69(ptr) Variable Function + 80(txval20): 41(ptr) Variable Function + 91(txval21): 56(ptr) Variable Function + 102(txval22): 69(ptr) Variable Function + 114(txval30): 41(ptr) Variable Function + 125(txval31): 56(ptr) Variable Function + 135(txval32): 69(ptr) Variable Function + 148(txval40): 41(ptr) Variable Function + 157(txval41): 56(ptr) Variable Function + 166(txval42): 69(ptr) Variable Function + 176(psout): 175(ptr) Variable Function + 18: 17(ptr) AccessChain 15(mtest) 16 + Store 18 16 + 20: 17(ptr) AccessChain 15(mtest) 19 + Store 20 16 + 22: 17(ptr) AccessChain 15(mtest) 21 + Store 22 16 + 24: 17(ptr) AccessChain 15(mtest) 23 + Store 24 16 + 26: 17(ptr) AccessChain 15(mtest) 25 + Store 26 16 + 28: 17(ptr) AccessChain 15(mtest) 27 + Store 28 16 + 30: 17(ptr) AccessChain 15(mtest) 29 + Store 30 16 + 32: 17(ptr) AccessChain 15(mtest) 31 + Store 32 16 + 34: 17(ptr) AccessChain 15(mtest) 33 + Store 34 16 + 36: 17(ptr) AccessChain 15(mtest) 35 + Store 36 16 + 38: 17(ptr) AccessChain 15(mtest) 37 + Store 38 16 + 40: 17(ptr) AccessChain 15(mtest) 39 + Store 40 16 + 46: 43 Load 45(g_tTex1df4) + 50: 47 Load 49(g_sSamp) + 52: 51 SampledImage 46 50 + 54: 7(fvec4) ImageSampleImplicitLod 52 53 + Store 42(txval10) 54 + 61: 58 Load 60(g_tTex1di4) + 62: 47 Load 49(g_sSamp) + 64: 63 SampledImage 61 62 + 66: 55(ivec4) ImageSampleImplicitLod 64 65 + Store 57(txval11) 66 + 74: 71 Load 73(g_tTex1du4) + 75: 47 Load 49(g_sSamp) + 77: 76 SampledImage 74 75 + 79: 68(ivec4) ImageSampleImplicitLod 77 78 + Store 70(txval12) 79 + 84: 81 Load 83(g_tTex2df4) + 85: 47 Load 49(g_sSamp) + 87: 86 SampledImage 84 85 + 90: 7(fvec4) ImageSampleImplicitLod 87 89 + Store 80(txval20) 90 + 95: 92 Load 94(g_tTex2di4) + 96: 47 Load 49(g_sSamp) + 98: 97 SampledImage 95 96 + 101: 55(ivec4) ImageSampleImplicitLod 98 100 + Store 91(txval21) 101 + 106: 103 Load 105(g_tTex2du4) + 107: 47 Load 49(g_sSamp) + 109: 108 SampledImage 106 107 + 113: 68(ivec4) ImageSampleImplicitLod 109 112 + Store 102(txval22) 113 + 118: 115 Load 117(g_tTex3df4) + 119: 47 Load 49(g_sSamp) + 121: 120 SampledImage 118 119 + 124: 7(fvec4) ImageSampleImplicitLod 121 123 + Store 114(txval30) 124 + 129: 126 Load 128(g_tTex3di4) + 130: 47 Load 49(g_sSamp) + 132: 131 SampledImage 129 130 + 134: 55(ivec4) ImageSampleImplicitLod 132 133 + Store 125(txval31) 134 + 139: 136 Load 138(g_tTex3du4) + 140: 47 Load 49(g_sSamp) + 142: 141 SampledImage 139 140 + 147: 68(ivec4) ImageSampleImplicitLod 142 146 + Store 135(txval32) 147 + 152: 149 Load 151(g_tTexcdf4) + 153: 47 Load 49(g_sSamp) + 155: 154 SampledImage 152 153 + 156: 7(fvec4) ImageSampleImplicitLod 155 123 + Store 148(txval40) 156 + 161: 158 Load 160(g_tTexcdi4) + 162: 47 Load 49(g_sSamp) + 164: 163 SampledImage 161 162 + 165: 55(ivec4) ImageSampleImplicitLod 164 133 + Store 157(txval41) 165 + 170: 167 Load 169(g_tTexcdu4) + 171: 47 Load 49(g_sSamp) + 173: 172 SampledImage 170 171 + 174: 68(ivec4) ImageSampleImplicitLod 173 146 + Store 166(txval42) 174 + 179: 41(ptr) AccessChain 176(psout) 29 + Store 179 178 + 181: 180(ptr) AccessChain 176(psout) 16 + Store 181 177 + 182:8(PS_OUTPUT) Load 176(psout) + ReturnValue 182 + FunctionEnd 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 new file mode 100644 index 0000000..923db24 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.offset.dx10.frag.out @@ -0,0 +1,599 @@ +hlsl.sample.offset.dx10.frag +Shader version: 450 +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}) +0:28 Function Parameters: +0:? Sequence +0:31 Sequence +0:31 move second child to first child ( temp 4-component vector of float) +0:31 'txval10' ( temp 4-component vector of float) +0:31 textureOffset ( temp 4-component vector of float) +0:31 Construct combined texture-sampler ( temp sampler1D) +0:31 'g_tTex1df4' (layout( binding=0) uniform texture1D) +0:31 'g_sSamp' (layout( binding=0) uniform sampler) +0:31 Constant: +0:31 0.100000 +0:31 Constant: +0:31 1 (const int) +0:32 Sequence +0:32 move second child to first child ( temp 4-component vector of int) +0:32 'txval11' ( temp 4-component vector of int) +0:32 textureOffset ( temp 4-component vector of int) +0:32 Construct combined texture-sampler ( temp isampler1D) +0:32 'g_tTex1di4' ( uniform itexture1D) +0:32 'g_sSamp' (layout( binding=0) uniform sampler) +0:32 Constant: +0:32 0.200000 +0:32 Constant: +0:32 1 (const int) +0:33 Sequence +0:33 move second child to first child ( temp 4-component vector of uint) +0:33 'txval12' ( temp 4-component vector of uint) +0:33 textureOffset ( temp 4-component vector of uint) +0:33 Construct combined texture-sampler ( temp usampler1D) +0:33 'g_tTex1du4' ( uniform utexture1D) +0:33 'g_sSamp' (layout( binding=0) uniform sampler) +0:33 Constant: +0:33 0.300000 +0:33 Constant: +0:33 1 (const int) +0:35 Sequence +0:35 move second child to first child ( temp 4-component vector of float) +0:35 'txval20' ( temp 4-component vector of float) +0:35 textureOffset ( temp 4-component vector of float) +0:35 Construct combined texture-sampler ( temp sampler2D) +0:35 'g_tTex2df4' ( uniform texture2D) +0:35 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? Constant: +0:? 1 (const int) +0:? 0 (const int) +0:36 Sequence +0:36 move second child to first child ( temp 4-component vector of int) +0:36 'txval21' ( temp 4-component vector of int) +0:36 textureOffset ( temp 4-component vector of int) +0:36 Construct combined texture-sampler ( temp isampler2D) +0:36 'g_tTex2di4' ( uniform itexture2D) +0:36 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:? Constant: +0:? 1 (const int) +0:? 1 (const int) +0:37 Sequence +0:37 move second child to first child ( temp 4-component vector of uint) +0:37 'txval22' ( temp 4-component vector of uint) +0:37 textureOffset ( temp 4-component vector of uint) +0:37 Construct combined texture-sampler ( temp usampler2D) +0:37 'g_tTex2du4' ( uniform utexture2D) +0:37 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:? Constant: +0:? 1 (const int) +0:? -1 (const int) +0:39 Sequence +0:39 move second child to first child ( temp 4-component vector of float) +0:39 'txval30' ( temp 4-component vector of float) +0:39 textureOffset ( temp 4-component vector of float) +0:39 Construct combined texture-sampler ( temp sampler3D) +0:39 'g_tTex3df4' ( uniform texture3D) +0:39 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? Constant: +0:? 1 (const int) +0:? 0 (const int) +0:? 1 (const int) +0:40 Sequence +0:40 move second child to first child ( temp 4-component vector of int) +0:40 'txval31' ( temp 4-component vector of int) +0:40 textureOffset ( temp 4-component vector of int) +0:40 Construct combined texture-sampler ( temp isampler3D) +0:40 'g_tTex3di4' ( uniform itexture3D) +0:40 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:? Constant: +0:? 1 (const int) +0:? 1 (const int) +0:? 1 (const int) +0:41 Sequence +0:41 move second child to first child ( temp 4-component vector of uint) +0:41 'txval32' ( temp 4-component vector of uint) +0:41 textureOffset ( temp 4-component vector of uint) +0:41 Construct combined texture-sampler ( temp usampler3D) +0:41 'g_tTex3du4' ( uniform utexture3D) +0:41 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:? Constant: +0:? 1 (const int) +0:? 0 (const int) +0:? -1 (const int) +0:45 move second child to first child ( temp 4-component vector of float) +0:45 Color: direct index for structure ( temp 4-component vector of float) +0:45 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:45 Constant: +0:45 0 (const int) +0:45 Constant: +0:45 1.000000 +0:45 1.000000 +0:45 1.000000 +0:45 1.000000 +0:46 move second child to first child ( temp float) +0:46 Depth: direct index for structure ( temp float) +0:46 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:46 Constant: +0:46 1 (const int) +0:46 Constant: +0:46 1.000000 +0:48 Branch: Return with expression +0:48 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:28 Function Definition: main( ( temp void) +0:28 Function Parameters: +0:? Sequence +0:28 Sequence +0:28 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:28 1 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1D) +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_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:? 'Color' (layout( location=0) out 4-component vector of float) +0:? 'Depth' ( out float FragDepth) + + +Linked fragment stage: + + +Shader version: 450 +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}) +0:28 Function Parameters: +0:? Sequence +0:31 Sequence +0:31 move second child to first child ( temp 4-component vector of float) +0:31 'txval10' ( temp 4-component vector of float) +0:31 textureOffset ( temp 4-component vector of float) +0:31 Construct combined texture-sampler ( temp sampler1D) +0:31 'g_tTex1df4' (layout( binding=0) uniform texture1D) +0:31 'g_sSamp' (layout( binding=0) uniform sampler) +0:31 Constant: +0:31 0.100000 +0:31 Constant: +0:31 1 (const int) +0:32 Sequence +0:32 move second child to first child ( temp 4-component vector of int) +0:32 'txval11' ( temp 4-component vector of int) +0:32 textureOffset ( temp 4-component vector of int) +0:32 Construct combined texture-sampler ( temp isampler1D) +0:32 'g_tTex1di4' ( uniform itexture1D) +0:32 'g_sSamp' (layout( binding=0) uniform sampler) +0:32 Constant: +0:32 0.200000 +0:32 Constant: +0:32 1 (const int) +0:33 Sequence +0:33 move second child to first child ( temp 4-component vector of uint) +0:33 'txval12' ( temp 4-component vector of uint) +0:33 textureOffset ( temp 4-component vector of uint) +0:33 Construct combined texture-sampler ( temp usampler1D) +0:33 'g_tTex1du4' ( uniform utexture1D) +0:33 'g_sSamp' (layout( binding=0) uniform sampler) +0:33 Constant: +0:33 0.300000 +0:33 Constant: +0:33 1 (const int) +0:35 Sequence +0:35 move second child to first child ( temp 4-component vector of float) +0:35 'txval20' ( temp 4-component vector of float) +0:35 textureOffset ( temp 4-component vector of float) +0:35 Construct combined texture-sampler ( temp sampler2D) +0:35 'g_tTex2df4' ( uniform texture2D) +0:35 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? Constant: +0:? 1 (const int) +0:? 0 (const int) +0:36 Sequence +0:36 move second child to first child ( temp 4-component vector of int) +0:36 'txval21' ( temp 4-component vector of int) +0:36 textureOffset ( temp 4-component vector of int) +0:36 Construct combined texture-sampler ( temp isampler2D) +0:36 'g_tTex2di4' ( uniform itexture2D) +0:36 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:? Constant: +0:? 1 (const int) +0:? 1 (const int) +0:37 Sequence +0:37 move second child to first child ( temp 4-component vector of uint) +0:37 'txval22' ( temp 4-component vector of uint) +0:37 textureOffset ( temp 4-component vector of uint) +0:37 Construct combined texture-sampler ( temp usampler2D) +0:37 'g_tTex2du4' ( uniform utexture2D) +0:37 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:? Constant: +0:? 1 (const int) +0:? -1 (const int) +0:39 Sequence +0:39 move second child to first child ( temp 4-component vector of float) +0:39 'txval30' ( temp 4-component vector of float) +0:39 textureOffset ( temp 4-component vector of float) +0:39 Construct combined texture-sampler ( temp sampler3D) +0:39 'g_tTex3df4' ( uniform texture3D) +0:39 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? Constant: +0:? 1 (const int) +0:? 0 (const int) +0:? 1 (const int) +0:40 Sequence +0:40 move second child to first child ( temp 4-component vector of int) +0:40 'txval31' ( temp 4-component vector of int) +0:40 textureOffset ( temp 4-component vector of int) +0:40 Construct combined texture-sampler ( temp isampler3D) +0:40 'g_tTex3di4' ( uniform itexture3D) +0:40 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:? Constant: +0:? 1 (const int) +0:? 1 (const int) +0:? 1 (const int) +0:41 Sequence +0:41 move second child to first child ( temp 4-component vector of uint) +0:41 'txval32' ( temp 4-component vector of uint) +0:41 textureOffset ( temp 4-component vector of uint) +0:41 Construct combined texture-sampler ( temp usampler3D) +0:41 'g_tTex3du4' ( uniform utexture3D) +0:41 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:? Constant: +0:? 1 (const int) +0:? 0 (const int) +0:? -1 (const int) +0:45 move second child to first child ( temp 4-component vector of float) +0:45 Color: direct index for structure ( temp 4-component vector of float) +0:45 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:45 Constant: +0:45 0 (const int) +0:45 Constant: +0:45 1.000000 +0:45 1.000000 +0:45 1.000000 +0:45 1.000000 +0:46 move second child to first child ( temp float) +0:46 Depth: direct index for structure ( temp float) +0:46 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:46 Constant: +0:46 1 (const int) +0:46 Constant: +0:46 1.000000 +0:48 Branch: Return with expression +0:48 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:28 Function Definition: main( ( temp void) +0:28 Function Parameters: +0:? Sequence +0:28 Sequence +0:28 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:28 1 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1D) +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_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:? 'Color' (layout( location=0) out 4-component vector of float) +0:? 'Depth' ( out float FragDepth) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 161 + + Capability Shader + Capability Sampled1D + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 144 148 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + MemberName 8(PS_OUTPUT) 1 "Depth" + Name 10 "@main(" + Name 13 "txval10" + Name 16 "g_tTex1df4" + Name 20 "g_sSamp" + Name 30 "txval11" + Name 33 "g_tTex1di4" + Name 43 "txval12" + Name 46 "g_tTex1du4" + Name 53 "txval20" + Name 56 "g_tTex2df4" + Name 67 "txval21" + Name 70 "g_tTex2di4" + Name 79 "txval22" + Name 82 "g_tTex2du4" + Name 93 "txval30" + Name 96 "g_tTex3df4" + Name 106 "txval31" + Name 109 "g_tTex3di4" + Name 117 "txval32" + Name 120 "g_tTex3du4" + Name 132 "psout" + Name 141 "flattenTemp" + Name 144 "Color" + Name 148 "Depth" + Name 151 "g_tTex1df4a" + Name 154 "g_tTexcdf4" + Name 157 "g_tTexcdi4" + Name 160 "g_tTexcdu4" + 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 33(g_tTex1di4) DescriptorSet 0 + Decorate 46(g_tTex1du4) DescriptorSet 0 + Decorate 56(g_tTex2df4) DescriptorSet 0 + Decorate 70(g_tTex2di4) DescriptorSet 0 + Decorate 82(g_tTex2du4) DescriptorSet 0 + 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 151(g_tTex1df4a) DescriptorSet 0 + Decorate 151(g_tTex1df4a) Binding 1 + Decorate 154(g_tTexcdf4) DescriptorSet 0 + Decorate 157(g_tTexcdi4) DescriptorSet 0 + Decorate 160(g_tTexcdu4) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8(PS_OUTPUT): TypeStruct 7(fvec4) 6(float) + 9: TypeFunction 8(PS_OUTPUT) + 12: TypePointer Function 7(fvec4) + 14: TypeImage 6(float) 1D 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: TypeSampledImage 14 + 24: 6(float) Constant 1036831949 + 25: TypeInt 32 1 + 26: 25(int) Constant 1 + 28: TypeVector 25(int) 4 + 29: TypePointer Function 28(ivec4) + 31: TypeImage 25(int) 1D sampled format:Unknown + 32: TypePointer UniformConstant 31 + 33(g_tTex1di4): 32(ptr) Variable UniformConstant + 36: TypeSampledImage 31 + 38: 6(float) Constant 1045220557 + 40: TypeInt 32 0 + 41: TypeVector 40(int) 4 + 42: TypePointer Function 41(ivec4) + 44: TypeImage 40(int) 1D sampled format:Unknown + 45: TypePointer UniformConstant 44 + 46(g_tTex1du4): 45(ptr) Variable UniformConstant + 49: TypeSampledImage 44 + 51: 6(float) Constant 1050253722 + 54: TypeImage 6(float) 2D sampled format:Unknown + 55: TypePointer UniformConstant 54 + 56(g_tTex2df4): 55(ptr) Variable UniformConstant + 59: TypeSampledImage 54 + 61: TypeVector 6(float) 2 + 62: 61(fvec2) ConstantComposite 24 38 + 63: TypeVector 25(int) 2 + 64: 25(int) Constant 0 + 65: 63(ivec2) ConstantComposite 26 64 + 68: TypeImage 25(int) 2D sampled format:Unknown + 69: TypePointer UniformConstant 68 + 70(g_tTex2di4): 69(ptr) Variable UniformConstant + 73: TypeSampledImage 68 + 75: 6(float) Constant 1053609165 + 76: 61(fvec2) ConstantComposite 51 75 + 77: 63(ivec2) ConstantComposite 26 26 + 80: TypeImage 40(int) 2D sampled format:Unknown + 81: TypePointer UniformConstant 80 + 82(g_tTex2du4): 81(ptr) Variable UniformConstant + 85: TypeSampledImage 80 + 87: 6(float) Constant 1056964608 + 88: 6(float) Constant 1058642330 + 89: 61(fvec2) ConstantComposite 87 88 + 90: 25(int) Constant 4294967295 + 91: 63(ivec2) ConstantComposite 26 90 + 94: TypeImage 6(float) 3D sampled format:Unknown + 95: TypePointer UniformConstant 94 + 96(g_tTex3df4): 95(ptr) Variable UniformConstant + 99: TypeSampledImage 94 + 101: TypeVector 6(float) 3 + 102: 101(fvec3) ConstantComposite 24 38 51 + 103: TypeVector 25(int) 3 + 104: 103(ivec3) ConstantComposite 26 64 26 + 107: TypeImage 25(int) 3D sampled format:Unknown + 108: TypePointer UniformConstant 107 + 109(g_tTex3di4): 108(ptr) Variable UniformConstant + 112: TypeSampledImage 107 + 114: 101(fvec3) ConstantComposite 75 87 88 + 115: 103(ivec3) ConstantComposite 26 26 26 + 118: TypeImage 40(int) 3D sampled format:Unknown + 119: TypePointer UniformConstant 118 + 120(g_tTex3du4): 119(ptr) Variable UniformConstant + 123: TypeSampledImage 118 + 125: 6(float) Constant 1060320051 + 126: 6(float) Constant 1061997773 + 127: 6(float) Constant 1063675494 + 128: 101(fvec3) ConstantComposite 125 126 127 + 129: 103(ivec3) ConstantComposite 26 64 90 + 131: TypePointer Function 8(PS_OUTPUT) + 133: 6(float) Constant 1065353216 + 134: 7(fvec4) ConstantComposite 133 133 133 133 + 136: TypePointer Function 6(float) + 143: TypePointer Output 7(fvec4) + 144(Color): 143(ptr) Variable Output + 147: TypePointer Output 6(float) + 148(Depth): 147(ptr) Variable Output +151(g_tTex1df4a): 15(ptr) Variable UniformConstant + 152: TypeImage 6(float) Cube sampled format:Unknown + 153: TypePointer UniformConstant 152 + 154(g_tTexcdf4): 153(ptr) Variable UniformConstant + 155: TypeImage 25(int) Cube sampled format:Unknown + 156: TypePointer UniformConstant 155 + 157(g_tTexcdi4): 156(ptr) Variable UniformConstant + 158: TypeImage 40(int) Cube sampled format:Unknown + 159: TypePointer UniformConstant 158 + 160(g_tTexcdu4): 159(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label +141(flattenTemp): 131(ptr) Variable Function + 142:8(PS_OUTPUT) FunctionCall 10(@main() + Store 141(flattenTemp) 142 + 145: 12(ptr) AccessChain 141(flattenTemp) 64 + 146: 7(fvec4) Load 145 + Store 144(Color) 146 + 149: 136(ptr) AccessChain 141(flattenTemp) 26 + 150: 6(float) Load 149 + Store 148(Depth) 150 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 13(txval10): 12(ptr) Variable Function + 30(txval11): 29(ptr) Variable Function + 43(txval12): 42(ptr) Variable Function + 53(txval20): 12(ptr) Variable Function + 67(txval21): 29(ptr) Variable Function + 79(txval22): 42(ptr) Variable Function + 93(txval30): 12(ptr) Variable Function + 106(txval31): 29(ptr) Variable Function + 117(txval32): 42(ptr) Variable Function + 132(psout): 131(ptr) Variable Function + 17: 14 Load 16(g_tTex1df4) + 21: 18 Load 20(g_sSamp) + 23: 22 SampledImage 17 21 + 27: 7(fvec4) ImageSampleImplicitLod 23 24 ConstOffset 26 + Store 13(txval10) 27 + 34: 31 Load 33(g_tTex1di4) + 35: 18 Load 20(g_sSamp) + 37: 36 SampledImage 34 35 + 39: 28(ivec4) ImageSampleImplicitLod 37 38 ConstOffset 26 + Store 30(txval11) 39 + 47: 44 Load 46(g_tTex1du4) + 48: 18 Load 20(g_sSamp) + 50: 49 SampledImage 47 48 + 52: 41(ivec4) ImageSampleImplicitLod 50 51 ConstOffset 26 + Store 43(txval12) 52 + 57: 54 Load 56(g_tTex2df4) + 58: 18 Load 20(g_sSamp) + 60: 59 SampledImage 57 58 + 66: 7(fvec4) ImageSampleImplicitLod 60 62 ConstOffset 65 + Store 53(txval20) 66 + 71: 68 Load 70(g_tTex2di4) + 72: 18 Load 20(g_sSamp) + 74: 73 SampledImage 71 72 + 78: 28(ivec4) ImageSampleImplicitLod 74 76 ConstOffset 77 + Store 67(txval21) 78 + 83: 80 Load 82(g_tTex2du4) + 84: 18 Load 20(g_sSamp) + 86: 85 SampledImage 83 84 + 92: 41(ivec4) ImageSampleImplicitLod 86 89 ConstOffset 91 + Store 79(txval22) 92 + 97: 94 Load 96(g_tTex3df4) + 98: 18 Load 20(g_sSamp) + 100: 99 SampledImage 97 98 + 105: 7(fvec4) ImageSampleImplicitLod 100 102 ConstOffset 104 + Store 93(txval30) 105 + 110: 107 Load 109(g_tTex3di4) + 111: 18 Load 20(g_sSamp) + 113: 112 SampledImage 110 111 + 116: 28(ivec4) ImageSampleImplicitLod 113 114 ConstOffset 115 + Store 106(txval31) 116 + 121: 118 Load 120(g_tTex3du4) + 122: 18 Load 20(g_sSamp) + 124: 123 SampledImage 121 122 + 130: 41(ivec4) ImageSampleImplicitLod 124 128 ConstOffset 129 + Store 117(txval32) 130 + 135: 12(ptr) AccessChain 132(psout) 64 + Store 135 134 + 137: 136(ptr) AccessChain 132(psout) 26 + Store 137 133 + 138:8(PS_OUTPUT) Load 132(psout) + ReturnValue 138 + FunctionEnd 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 new file mode 100644 index 0000000..d9cf65c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out @@ -0,0 +1,448 @@ +hlsl.sample.offsetarray.dx10.frag +Shader version: 450 +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}) +0:20 Function Parameters: +0:? Sequence +0:23 Sequence +0:23 move second child to first child ( temp 4-component vector of float) +0:23 'txval10' ( temp 4-component vector of float) +0:23 textureOffset ( temp 4-component vector of float) +0:23 Construct combined texture-sampler ( temp sampler1DArray) +0:23 'g_tTex1df4' (layout( binding=0) uniform texture1DArray) +0:23 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:23 Constant: +0:23 0 (const int) +0:24 Sequence +0:24 move second child to first child ( temp 4-component vector of int) +0:24 'txval11' ( temp 4-component vector of int) +0:24 textureOffset ( temp 4-component vector of int) +0:24 Construct combined texture-sampler ( temp isampler1DArray) +0:24 'g_tTex1di4' ( uniform itexture1DArray) +0:24 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.200000 +0:? 0.300000 +0:24 Constant: +0:24 1 (const int) +0:25 Sequence +0:25 move second child to first child ( temp 4-component vector of uint) +0:25 'txval12' ( temp 4-component vector of uint) +0:25 textureOffset ( temp 4-component vector of uint) +0:25 Construct combined texture-sampler ( temp usampler1DArray) +0:25 'g_tTex1du4' ( uniform utexture1DArray) +0:25 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:25 Constant: +0:25 2 (const int) +0:27 Sequence +0:27 move second child to first child ( temp 4-component vector of float) +0:27 'txval20' ( temp 4-component vector of float) +0:27 textureOffset ( temp 4-component vector of float) +0:27 Construct combined texture-sampler ( temp sampler2DArray) +0:27 'g_tTex2df4' ( uniform texture2DArray) +0:27 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? Constant: +0:? 0 (const int) +0:? 0 (const int) +0:28 Sequence +0:28 move second child to first child ( temp 4-component vector of int) +0:28 'txval21' ( temp 4-component vector of int) +0:28 textureOffset ( temp 4-component vector of int) +0:28 Construct combined texture-sampler ( temp isampler2DArray) +0:28 'g_tTex2di4' ( uniform itexture2DArray) +0:28 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:? 0.500000 +0:? Constant: +0:? 0 (const int) +0:? 0 (const int) +0:29 Sequence +0:29 move second child to first child ( temp 4-component vector of uint) +0:29 'txval22' ( temp 4-component vector of uint) +0:29 textureOffset ( temp 4-component vector of uint) +0:29 Construct combined texture-sampler ( temp usampler2DArray) +0:29 'g_tTex2du4' ( uniform utexture2DArray) +0:29 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:? 0.700000 +0:? Constant: +0:? 0 (const int) +0:? 1 (const int) +0:33 move second child to first child ( temp 4-component vector of float) +0:33 Color: direct index for structure ( temp 4-component vector of float) +0:33 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:33 Constant: +0:33 0 (const int) +0:33 Constant: +0:33 1.000000 +0:33 1.000000 +0:33 1.000000 +0:33 1.000000 +0:34 move second child to first child ( temp float) +0:34 Depth: direct index for structure ( temp float) +0:34 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:34 Constant: +0:34 1 (const int) +0:34 Constant: +0:34 1.000000 +0:36 Branch: Return with expression +0:36 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:20 Function Definition: main( ( temp void) +0:20 Function Parameters: +0:? Sequence +0:20 Sequence +0:20 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:20 1 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1DArray) +0:? 'g_tTex1df4' (layout( binding=0) uniform texture1DArray) +0:? 'g_tTex1di4' ( uniform itexture1DArray) +0:? 'g_tTex1du4' ( uniform utexture1DArray) +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) + + +Linked fragment stage: + + +Shader version: 450 +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}) +0:20 Function Parameters: +0:? Sequence +0:23 Sequence +0:23 move second child to first child ( temp 4-component vector of float) +0:23 'txval10' ( temp 4-component vector of float) +0:23 textureOffset ( temp 4-component vector of float) +0:23 Construct combined texture-sampler ( temp sampler1DArray) +0:23 'g_tTex1df4' (layout( binding=0) uniform texture1DArray) +0:23 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:23 Constant: +0:23 0 (const int) +0:24 Sequence +0:24 move second child to first child ( temp 4-component vector of int) +0:24 'txval11' ( temp 4-component vector of int) +0:24 textureOffset ( temp 4-component vector of int) +0:24 Construct combined texture-sampler ( temp isampler1DArray) +0:24 'g_tTex1di4' ( uniform itexture1DArray) +0:24 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.200000 +0:? 0.300000 +0:24 Constant: +0:24 1 (const int) +0:25 Sequence +0:25 move second child to first child ( temp 4-component vector of uint) +0:25 'txval12' ( temp 4-component vector of uint) +0:25 textureOffset ( temp 4-component vector of uint) +0:25 Construct combined texture-sampler ( temp usampler1DArray) +0:25 'g_tTex1du4' ( uniform utexture1DArray) +0:25 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:25 Constant: +0:25 2 (const int) +0:27 Sequence +0:27 move second child to first child ( temp 4-component vector of float) +0:27 'txval20' ( temp 4-component vector of float) +0:27 textureOffset ( temp 4-component vector of float) +0:27 Construct combined texture-sampler ( temp sampler2DArray) +0:27 'g_tTex2df4' ( uniform texture2DArray) +0:27 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? Constant: +0:? 0 (const int) +0:? 0 (const int) +0:28 Sequence +0:28 move second child to first child ( temp 4-component vector of int) +0:28 'txval21' ( temp 4-component vector of int) +0:28 textureOffset ( temp 4-component vector of int) +0:28 Construct combined texture-sampler ( temp isampler2DArray) +0:28 'g_tTex2di4' ( uniform itexture2DArray) +0:28 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:? 0.500000 +0:? Constant: +0:? 0 (const int) +0:? 0 (const int) +0:29 Sequence +0:29 move second child to first child ( temp 4-component vector of uint) +0:29 'txval22' ( temp 4-component vector of uint) +0:29 textureOffset ( temp 4-component vector of uint) +0:29 Construct combined texture-sampler ( temp usampler2DArray) +0:29 'g_tTex2du4' ( uniform utexture2DArray) +0:29 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:? 0.700000 +0:? Constant: +0:? 0 (const int) +0:? 1 (const int) +0:33 move second child to first child ( temp 4-component vector of float) +0:33 Color: direct index for structure ( temp 4-component vector of float) +0:33 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:33 Constant: +0:33 0 (const int) +0:33 Constant: +0:33 1.000000 +0:33 1.000000 +0:33 1.000000 +0:33 1.000000 +0:34 move second child to first child ( temp float) +0:34 Depth: direct index for structure ( temp float) +0:34 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:34 Constant: +0:34 1 (const int) +0:34 Constant: +0:34 1.000000 +0:36 Branch: Return with expression +0:36 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:20 Function Definition: main( ( temp void) +0:20 Function Parameters: +0:? Sequence +0:20 Sequence +0:20 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:20 1 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1DArray) +0:? 'g_tTex1df4' (layout( binding=0) uniform texture1DArray) +0:? 'g_tTex1di4' ( uniform itexture1DArray) +0:? 'g_tTex1du4' ( uniform utexture1DArray) +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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 118 + + Capability Shader + Capability Sampled1D + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 110 114 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + MemberName 8(PS_OUTPUT) 1 "Depth" + Name 10 "@main(" + Name 13 "txval10" + Name 16 "g_tTex1df4" + Name 20 "g_sSamp" + Name 33 "txval11" + Name 36 "g_tTex1di4" + Name 48 "txval12" + Name 51 "g_tTex1du4" + Name 60 "txval20" + Name 63 "g_tTex2df4" + Name 73 "txval21" + Name 76 "g_tTex2di4" + Name 84 "txval22" + Name 87 "g_tTex2du4" + Name 98 "psout" + Name 107 "flattenTemp" + Name 110 "Color" + Name 114 "Depth" + Name 117 "g_tTex1df4a" + 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 51(g_tTex1du4) DescriptorSet 0 + 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 117(g_tTex1df4a) DescriptorSet 0 + Decorate 117(g_tTex1df4a) Binding 1 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8(PS_OUTPUT): TypeStruct 7(fvec4) 6(float) + 9: TypeFunction 8(PS_OUTPUT) + 12: TypePointer Function 7(fvec4) + 14: TypeImage 6(float) 1D array 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: TypeSampledImage 14 + 24: TypeVector 6(float) 2 + 25: 6(float) Constant 1036831949 + 26: 6(float) Constant 1045220557 + 27: 24(fvec2) ConstantComposite 25 26 + 28: TypeInt 32 1 + 29: 28(int) Constant 0 + 31: TypeVector 28(int) 4 + 32: TypePointer Function 31(ivec4) + 34: TypeImage 28(int) 1D array sampled format:Unknown + 35: TypePointer UniformConstant 34 + 36(g_tTex1di4): 35(ptr) Variable UniformConstant + 39: TypeSampledImage 34 + 41: 6(float) Constant 1050253722 + 42: 24(fvec2) ConstantComposite 26 41 + 43: 28(int) Constant 1 + 45: TypeInt 32 0 + 46: TypeVector 45(int) 4 + 47: TypePointer Function 46(ivec4) + 49: TypeImage 45(int) 1D array sampled format:Unknown + 50: TypePointer UniformConstant 49 + 51(g_tTex1du4): 50(ptr) Variable UniformConstant + 54: TypeSampledImage 49 + 56: 6(float) Constant 1053609165 + 57: 24(fvec2) ConstantComposite 41 56 + 58: 28(int) Constant 2 + 61: TypeImage 6(float) 2D array sampled format:Unknown + 62: TypePointer UniformConstant 61 + 63(g_tTex2df4): 62(ptr) Variable UniformConstant + 66: TypeSampledImage 61 + 68: TypeVector 6(float) 3 + 69: 68(fvec3) ConstantComposite 25 26 41 + 70: TypeVector 28(int) 2 + 71: 70(ivec2) ConstantComposite 29 29 + 74: TypeImage 28(int) 2D array sampled format:Unknown + 75: TypePointer UniformConstant 74 + 76(g_tTex2di4): 75(ptr) Variable UniformConstant + 79: TypeSampledImage 74 + 81: 6(float) Constant 1056964608 + 82: 68(fvec3) ConstantComposite 41 56 81 + 85: TypeImage 45(int) 2D array sampled format:Unknown + 86: TypePointer UniformConstant 85 + 87(g_tTex2du4): 86(ptr) Variable UniformConstant + 90: TypeSampledImage 85 + 92: 6(float) Constant 1058642330 + 93: 6(float) Constant 1060320051 + 94: 68(fvec3) ConstantComposite 81 92 93 + 95: 70(ivec2) ConstantComposite 29 43 + 97: TypePointer Function 8(PS_OUTPUT) + 99: 6(float) Constant 1065353216 + 100: 7(fvec4) ConstantComposite 99 99 99 99 + 102: TypePointer Function 6(float) + 109: TypePointer Output 7(fvec4) + 110(Color): 109(ptr) Variable Output + 113: TypePointer Output 6(float) + 114(Depth): 113(ptr) Variable Output +117(g_tTex1df4a): 15(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label +107(flattenTemp): 97(ptr) Variable Function + 108:8(PS_OUTPUT) FunctionCall 10(@main() + Store 107(flattenTemp) 108 + 111: 12(ptr) AccessChain 107(flattenTemp) 29 + 112: 7(fvec4) Load 111 + Store 110(Color) 112 + 115: 102(ptr) AccessChain 107(flattenTemp) 43 + 116: 6(float) Load 115 + Store 114(Depth) 116 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 13(txval10): 12(ptr) Variable Function + 33(txval11): 32(ptr) Variable Function + 48(txval12): 47(ptr) Variable Function + 60(txval20): 12(ptr) Variable Function + 73(txval21): 32(ptr) Variable Function + 84(txval22): 47(ptr) Variable Function + 98(psout): 97(ptr) Variable Function + 17: 14 Load 16(g_tTex1df4) + 21: 18 Load 20(g_sSamp) + 23: 22 SampledImage 17 21 + 30: 7(fvec4) ImageSampleImplicitLod 23 27 ConstOffset 29 + Store 13(txval10) 30 + 37: 34 Load 36(g_tTex1di4) + 38: 18 Load 20(g_sSamp) + 40: 39 SampledImage 37 38 + 44: 31(ivec4) ImageSampleImplicitLod 40 42 ConstOffset 43 + Store 33(txval11) 44 + 52: 49 Load 51(g_tTex1du4) + 53: 18 Load 20(g_sSamp) + 55: 54 SampledImage 52 53 + 59: 46(ivec4) ImageSampleImplicitLod 55 57 ConstOffset 58 + Store 48(txval12) 59 + 64: 61 Load 63(g_tTex2df4) + 65: 18 Load 20(g_sSamp) + 67: 66 SampledImage 64 65 + 72: 7(fvec4) ImageSampleImplicitLod 67 69 ConstOffset 71 + Store 60(txval20) 72 + 77: 74 Load 76(g_tTex2di4) + 78: 18 Load 20(g_sSamp) + 80: 79 SampledImage 77 78 + 83: 31(ivec4) ImageSampleImplicitLod 80 82 ConstOffset 71 + Store 73(txval21) 83 + 88: 85 Load 87(g_tTex2du4) + 89: 18 Load 20(g_sSamp) + 91: 90 SampledImage 88 89 + 96: 46(ivec4) ImageSampleImplicitLod 91 94 ConstOffset 95 + Store 84(txval22) 96 + 101: 12(ptr) AccessChain 98(psout) 29 + Store 101 100 + 103: 102(ptr) AccessChain 98(psout) 43 + Store 103 99 + 104:8(PS_OUTPUT) Load 98(psout) + ReturnValue 104 + FunctionEnd 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 new file mode 100644 index 0000000..c3d6f13 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.sub-vec4.dx10.frag.out @@ -0,0 +1,265 @@ +hlsl.sample.sub-vec4.dx10.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:14 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color}) +0:14 Function Parameters: +0:? Sequence +0:17 Sequence +0:17 move second child to first child ( temp float) +0:17 'txval10' ( temp float) +0:17 Construct float ( temp float) +0:? texture ( temp 4-component vector of float) +0:17 Construct combined texture-sampler ( temp sampler1D) +0:17 'g_tTex1df1' ( uniform texture1D) +0:17 'g_sSamp' (layout( binding=0) uniform sampler) +0:17 Constant: +0:17 0.100000 +0:18 Sequence +0:18 move second child to first child ( temp 2-component vector of float) +0:18 'txval11' ( temp 2-component vector of float) +0:18 Construct vec2 ( temp 2-component vector of float) +0:? texture ( temp 4-component vector of float) +0:18 Construct combined texture-sampler ( temp sampler1D) +0:18 'g_tTex1df2' ( uniform texture1D) +0:18 'g_sSamp' (layout( binding=0) uniform sampler) +0:18 Constant: +0:18 0.200000 +0:19 Sequence +0:19 move second child to first child ( temp 3-component vector of float) +0:19 'txval12' ( temp 3-component vector of float) +0:19 Construct vec3 ( temp 3-component vector of float) +0:? texture ( temp 4-component vector of float) +0:19 Construct combined texture-sampler ( temp sampler1D) +0:19 'g_tTex1df3' ( uniform texture1D) +0:19 'g_sSamp' (layout( binding=0) uniform sampler) +0:19 Constant: +0:19 0.200000 +0:20 Sequence +0:20 move second child to first child ( temp 4-component vector of float) +0:20 'txval13' ( temp 4-component vector of float) +0:20 texture ( temp 4-component vector of float) +0:20 Construct combined texture-sampler ( temp sampler1D) +0:20 'g_tTex1df4' ( uniform texture1D) +0:20 'g_sSamp' (layout( binding=0) uniform sampler) +0:20 Constant: +0:20 0.200000 +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}) +0:22 Constant: +0:22 0 (const int) +0:22 Constant: +0:22 1.000000 +0:22 1.000000 +0:22 1.000000 +0:22 1.000000 +0:23 Branch: Return with expression +0:23 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:14 Function Definition: main( ( temp void) +0:14 Function Parameters: +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: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:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df1' ( uniform texture1D) +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) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:14 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color}) +0:14 Function Parameters: +0:? Sequence +0:17 Sequence +0:17 move second child to first child ( temp float) +0:17 'txval10' ( temp float) +0:17 Construct float ( temp float) +0:? texture ( temp 4-component vector of float) +0:17 Construct combined texture-sampler ( temp sampler1D) +0:17 'g_tTex1df1' ( uniform texture1D) +0:17 'g_sSamp' (layout( binding=0) uniform sampler) +0:17 Constant: +0:17 0.100000 +0:18 Sequence +0:18 move second child to first child ( temp 2-component vector of float) +0:18 'txval11' ( temp 2-component vector of float) +0:18 Construct vec2 ( temp 2-component vector of float) +0:? texture ( temp 4-component vector of float) +0:18 Construct combined texture-sampler ( temp sampler1D) +0:18 'g_tTex1df2' ( uniform texture1D) +0:18 'g_sSamp' (layout( binding=0) uniform sampler) +0:18 Constant: +0:18 0.200000 +0:19 Sequence +0:19 move second child to first child ( temp 3-component vector of float) +0:19 'txval12' ( temp 3-component vector of float) +0:19 Construct vec3 ( temp 3-component vector of float) +0:? texture ( temp 4-component vector of float) +0:19 Construct combined texture-sampler ( temp sampler1D) +0:19 'g_tTex1df3' ( uniform texture1D) +0:19 'g_sSamp' (layout( binding=0) uniform sampler) +0:19 Constant: +0:19 0.200000 +0:20 Sequence +0:20 move second child to first child ( temp 4-component vector of float) +0:20 'txval13' ( temp 4-component vector of float) +0:20 texture ( temp 4-component vector of float) +0:20 Construct combined texture-sampler ( temp sampler1D) +0:20 'g_tTex1df4' ( uniform texture1D) +0:20 'g_sSamp' (layout( binding=0) uniform sampler) +0:20 Constant: +0:20 0.200000 +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}) +0:22 Constant: +0:22 0 (const int) +0:22 Constant: +0:22 1.000000 +0:22 1.000000 +0:22 1.000000 +0:22 1.000000 +0:23 Branch: Return with expression +0:23 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:14 Function Definition: main( ( temp void) +0:14 Function Parameters: +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: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:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df1' ( uniform texture1D) +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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 72 + + Capability Shader + Capability Sampled1D + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 69 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + Name 10 "@main(" + Name 13 "txval10" + Name 16 "g_tTex1df1" + Name 20 "g_sSamp" + Name 29 "txval11" + Name 30 "g_tTex1df2" + Name 41 "txval12" + Name 42 "g_tTex1df3" + Name 52 "txval13" + Name 53 "g_tTex1df4" + Name 59 "psout" + Name 69 "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 + 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: TypePointer Function 6(float) + 14: TypeImage 6(float) 1D sampled format:Unknown + 15: TypePointer UniformConstant 14 + 16(g_tTex1df1): 15(ptr) Variable UniformConstant + 18: TypeSampler + 19: TypePointer UniformConstant 18 + 20(g_sSamp): 19(ptr) Variable UniformConstant + 22: TypeSampledImage 14 + 24: 6(float) Constant 1036831949 + 27: TypeVector 6(float) 2 + 28: TypePointer Function 27(fvec2) + 30(g_tTex1df2): 15(ptr) Variable UniformConstant + 34: 6(float) Constant 1045220557 + 39: TypeVector 6(float) 3 + 40: TypePointer Function 39(fvec3) + 42(g_tTex1df3): 15(ptr) Variable UniformConstant + 51: TypePointer Function 7(fvec4) + 53(g_tTex1df4): 15(ptr) Variable UniformConstant + 58: TypePointer Function 8(PS_OUTPUT) + 60: TypeInt 32 1 + 61: 60(int) Constant 0 + 62: 6(float) Constant 1065353216 + 63: 7(fvec4) ConstantComposite 62 62 62 62 + 68: TypePointer Output 7(fvec4) + 69(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 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 13(txval10): 12(ptr) Variable Function + 29(txval11): 28(ptr) Variable Function + 41(txval12): 40(ptr) Variable Function + 52(txval13): 51(ptr) Variable Function + 59(psout): 58(ptr) Variable Function + 17: 14 Load 16(g_tTex1df1) + 21: 18 Load 20(g_sSamp) + 23: 22 SampledImage 17 21 + 25: 7(fvec4) ImageSampleImplicitLod 23 24 + 26: 6(float) CompositeExtract 25 0 + Store 13(txval10) 26 + 31: 14 Load 30(g_tTex1df2) + 32: 18 Load 20(g_sSamp) + 33: 22 SampledImage 31 32 + 35: 7(fvec4) ImageSampleImplicitLod 33 34 + 36: 6(float) CompositeExtract 35 0 + 37: 6(float) CompositeExtract 35 1 + 38: 27(fvec2) CompositeConstruct 36 37 + Store 29(txval11) 38 + 43: 14 Load 42(g_tTex1df3) + 44: 18 Load 20(g_sSamp) + 45: 22 SampledImage 43 44 + 46: 7(fvec4) ImageSampleImplicitLod 45 34 + 47: 6(float) CompositeExtract 46 0 + 48: 6(float) CompositeExtract 46 1 + 49: 6(float) CompositeExtract 46 2 + 50: 39(fvec3) CompositeConstruct 47 48 49 + Store 41(txval12) 50 + 54: 14 Load 53(g_tTex1df4) + 55: 18 Load 20(g_sSamp) + 56: 22 SampledImage 54 55 + 57: 7(fvec4) ImageSampleImplicitLod 56 34 + Store 52(txval13) 57 + 64: 51(ptr) AccessChain 59(psout) 61 + Store 64 63 + 65:8(PS_OUTPUT) Load 59(psout) + ReturnValue 65 + FunctionEnd 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 new file mode 100644 index 0000000..7f6881f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplebias.array.dx10.frag.out @@ -0,0 +1,573 @@ +hlsl.samplebias.array.dx10.frag +Shader version: 450 +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}) +0:24 Function Parameters: +0:? Sequence +0:27 Sequence +0:27 move second child to first child ( temp 4-component vector of float) +0:27 'txval10' ( temp 4-component vector of float) +0:27 texture ( temp 4-component vector of float) +0:27 Construct combined texture-sampler ( temp sampler1DArray) +0:27 'g_tTex1df4' (layout( binding=0) uniform texture1DArray) +0:27 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:27 Constant: +0:27 0.500000 +0:28 Sequence +0:28 move second child to first child ( temp 4-component vector of int) +0:28 'txval11' ( temp 4-component vector of int) +0:28 texture ( temp 4-component vector of int) +0:28 Construct combined texture-sampler ( temp isampler1DArray) +0:28 'g_tTex1di4' ( uniform itexture1DArray) +0:28 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.200000 +0:? 0.300000 +0:28 Constant: +0:28 0.500000 +0:29 Sequence +0:29 move second child to first child ( temp 4-component vector of uint) +0:29 'txval12' ( temp 4-component vector of uint) +0:29 texture ( temp 4-component vector of uint) +0:29 Construct combined texture-sampler ( temp usampler1DArray) +0:29 'g_tTex1du4' ( uniform utexture1DArray) +0:29 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:29 Constant: +0:29 0.500000 +0:31 Sequence +0:31 move second child to first child ( temp 4-component vector of float) +0:31 'txval20' ( temp 4-component vector of float) +0:31 texture ( temp 4-component vector of float) +0:31 Construct combined texture-sampler ( temp sampler2DArray) +0:31 'g_tTex2df4' ( uniform texture2DArray) +0:31 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:31 Constant: +0:31 0.500000 +0:32 Sequence +0:32 move second child to first child ( temp 4-component vector of int) +0:32 'txval21' ( temp 4-component vector of int) +0:32 texture ( temp 4-component vector of int) +0:32 Construct combined texture-sampler ( temp isampler2DArray) +0:32 'g_tTex2di4' ( uniform itexture2DArray) +0:32 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:? 0.500000 +0:32 Constant: +0:32 0.500000 +0:33 Sequence +0:33 move second child to first child ( temp 4-component vector of uint) +0:33 'txval22' ( temp 4-component vector of uint) +0:33 texture ( temp 4-component vector of uint) +0:33 Construct combined texture-sampler ( temp usampler2DArray) +0:33 'g_tTex2du4' ( uniform utexture2DArray) +0:33 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:? 0.700000 +0:33 Constant: +0:33 0.500000 +0:35 Sequence +0:35 move second child to first child ( temp 4-component vector of float) +0:35 'txval40' ( temp 4-component vector of float) +0:35 texture ( temp 4-component vector of float) +0:35 Construct combined texture-sampler ( temp samplerCubeArray) +0:35 'g_tTexcdf4' ( uniform textureCubeArray) +0:35 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? 0.400000 +0:35 Constant: +0:35 0.500000 +0:36 Sequence +0:36 move second child to first child ( temp 4-component vector of int) +0:36 'txval41' ( temp 4-component vector of int) +0:36 texture ( temp 4-component vector of int) +0:36 Construct combined texture-sampler ( temp isamplerCubeArray) +0:36 'g_tTexcdi4' ( uniform itextureCubeArray) +0:36 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:? 0.700000 +0:36 Constant: +0:36 0.500000 +0:37 Sequence +0:37 move second child to first child ( temp 4-component vector of uint) +0:37 'txval42' ( temp 4-component vector of uint) +0:37 texture ( temp 4-component vector of uint) +0:37 Construct combined texture-sampler ( temp usamplerCubeArray) +0:37 'g_tTexcdu4' ( uniform utextureCubeArray) +0:37 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:? 1.000000 +0:37 Constant: +0:37 0.500000 +0:39 move second child to first child ( temp 4-component vector of float) +0:39 Color: direct index for structure ( temp 4-component vector of float) +0:39 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:39 Constant: +0:39 0 (const int) +0:39 Constant: +0:39 1.000000 +0:39 1.000000 +0:39 1.000000 +0:39 1.000000 +0:40 move second child to first child ( temp float) +0:40 Depth: direct index for structure ( temp float) +0:40 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:40 Constant: +0:40 1 (const int) +0:40 Constant: +0:40 1.000000 +0:42 Branch: Return with expression +0:42 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:24 Function Definition: main( ( temp void) +0:24 Function Parameters: +0:? Sequence +0:24 Sequence +0:24 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1DArray) +0:? 'g_tTex1df4' (layout( binding=0) uniform texture1DArray) +0:? 'g_tTex1di4' ( uniform itexture1DArray) +0:? 'g_tTex1du4' ( uniform utexture1DArray) +0:? 'g_tTex2df4' ( uniform texture2DArray) +0:? 'g_tTex2di4' ( uniform itexture2DArray) +0:? 'g_tTex2du4' ( uniform utexture2DArray) +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) + + +Linked fragment stage: + + +Shader version: 450 +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}) +0:24 Function Parameters: +0:? Sequence +0:27 Sequence +0:27 move second child to first child ( temp 4-component vector of float) +0:27 'txval10' ( temp 4-component vector of float) +0:27 texture ( temp 4-component vector of float) +0:27 Construct combined texture-sampler ( temp sampler1DArray) +0:27 'g_tTex1df4' (layout( binding=0) uniform texture1DArray) +0:27 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:27 Constant: +0:27 0.500000 +0:28 Sequence +0:28 move second child to first child ( temp 4-component vector of int) +0:28 'txval11' ( temp 4-component vector of int) +0:28 texture ( temp 4-component vector of int) +0:28 Construct combined texture-sampler ( temp isampler1DArray) +0:28 'g_tTex1di4' ( uniform itexture1DArray) +0:28 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.200000 +0:? 0.300000 +0:28 Constant: +0:28 0.500000 +0:29 Sequence +0:29 move second child to first child ( temp 4-component vector of uint) +0:29 'txval12' ( temp 4-component vector of uint) +0:29 texture ( temp 4-component vector of uint) +0:29 Construct combined texture-sampler ( temp usampler1DArray) +0:29 'g_tTex1du4' ( uniform utexture1DArray) +0:29 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:29 Constant: +0:29 0.500000 +0:31 Sequence +0:31 move second child to first child ( temp 4-component vector of float) +0:31 'txval20' ( temp 4-component vector of float) +0:31 texture ( temp 4-component vector of float) +0:31 Construct combined texture-sampler ( temp sampler2DArray) +0:31 'g_tTex2df4' ( uniform texture2DArray) +0:31 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:31 Constant: +0:31 0.500000 +0:32 Sequence +0:32 move second child to first child ( temp 4-component vector of int) +0:32 'txval21' ( temp 4-component vector of int) +0:32 texture ( temp 4-component vector of int) +0:32 Construct combined texture-sampler ( temp isampler2DArray) +0:32 'g_tTex2di4' ( uniform itexture2DArray) +0:32 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:? 0.500000 +0:32 Constant: +0:32 0.500000 +0:33 Sequence +0:33 move second child to first child ( temp 4-component vector of uint) +0:33 'txval22' ( temp 4-component vector of uint) +0:33 texture ( temp 4-component vector of uint) +0:33 Construct combined texture-sampler ( temp usampler2DArray) +0:33 'g_tTex2du4' ( uniform utexture2DArray) +0:33 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:? 0.700000 +0:33 Constant: +0:33 0.500000 +0:35 Sequence +0:35 move second child to first child ( temp 4-component vector of float) +0:35 'txval40' ( temp 4-component vector of float) +0:35 texture ( temp 4-component vector of float) +0:35 Construct combined texture-sampler ( temp samplerCubeArray) +0:35 'g_tTexcdf4' ( uniform textureCubeArray) +0:35 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? 0.400000 +0:35 Constant: +0:35 0.500000 +0:36 Sequence +0:36 move second child to first child ( temp 4-component vector of int) +0:36 'txval41' ( temp 4-component vector of int) +0:36 texture ( temp 4-component vector of int) +0:36 Construct combined texture-sampler ( temp isamplerCubeArray) +0:36 'g_tTexcdi4' ( uniform itextureCubeArray) +0:36 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:? 0.700000 +0:36 Constant: +0:36 0.500000 +0:37 Sequence +0:37 move second child to first child ( temp 4-component vector of uint) +0:37 'txval42' ( temp 4-component vector of uint) +0:37 texture ( temp 4-component vector of uint) +0:37 Construct combined texture-sampler ( temp usamplerCubeArray) +0:37 'g_tTexcdu4' ( uniform utextureCubeArray) +0:37 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:? 1.000000 +0:37 Constant: +0:37 0.500000 +0:39 move second child to first child ( temp 4-component vector of float) +0:39 Color: direct index for structure ( temp 4-component vector of float) +0:39 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:39 Constant: +0:39 0 (const int) +0:39 Constant: +0:39 1.000000 +0:39 1.000000 +0:39 1.000000 +0:39 1.000000 +0:40 move second child to first child ( temp float) +0:40 Depth: direct index for structure ( temp float) +0:40 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:40 Constant: +0:40 1 (const int) +0:40 Constant: +0:40 1.000000 +0:42 Branch: Return with expression +0:42 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:24 Function Definition: main( ( temp void) +0:24 Function Parameters: +0:? Sequence +0:24 Sequence +0:24 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1DArray) +0:? 'g_tTex1df4' (layout( binding=0) uniform texture1DArray) +0:? 'g_tTex1di4' ( uniform itexture1DArray) +0:? 'g_tTex1du4' ( uniform utexture1DArray) +0:? 'g_tTex2df4' ( uniform texture2DArray) +0:? 'g_tTex2di4' ( uniform itexture2DArray) +0:? 'g_tTex2du4' ( uniform utexture2DArray) +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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 146 + + Capability Shader + Capability Sampled1D + Capability SampledCubeArray + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 138 142 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + MemberName 8(PS_OUTPUT) 1 "Depth" + Name 10 "@main(" + Name 13 "txval10" + Name 16 "g_tTex1df4" + Name 20 "g_sSamp" + Name 33 "txval11" + Name 36 "g_tTex1di4" + Name 47 "txval12" + Name 50 "g_tTex1du4" + Name 58 "txval20" + Name 61 "g_tTex2df4" + Name 69 "txval21" + Name 72 "g_tTex2di4" + Name 79 "txval22" + Name 82 "g_tTex2du4" + Name 91 "txval40" + Name 94 "g_tTexcdf4" + Name 101 "txval41" + Name 104 "g_tTexcdi4" + Name 111 "txval42" + Name 114 "g_tTexcdu4" + Name 125 "psout" + Name 135 "flattenTemp" + Name 138 "Color" + Name 142 "Depth" + Name 145 "g_tTex1df4a" + 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 50(g_tTex1du4) DescriptorSet 0 + Decorate 61(g_tTex2df4) DescriptorSet 0 + Decorate 72(g_tTex2di4) DescriptorSet 0 + Decorate 82(g_tTex2du4) DescriptorSet 0 + 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 145(g_tTex1df4a) DescriptorSet 0 + Decorate 145(g_tTex1df4a) Binding 1 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8(PS_OUTPUT): TypeStruct 7(fvec4) 6(float) + 9: TypeFunction 8(PS_OUTPUT) + 12: TypePointer Function 7(fvec4) + 14: TypeImage 6(float) 1D array 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: 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 1056964608 + 30: TypeInt 32 1 + 31: TypeVector 30(int) 4 + 32: TypePointer Function 31(ivec4) + 34: TypeImage 30(int) 1D array sampled format:Unknown + 35: TypePointer UniformConstant 34 + 36(g_tTex1di4): 35(ptr) Variable UniformConstant + 39: TypeSampledImage 34 + 41: 6(float) Constant 1050253722 + 42: 24(fvec2) ConstantComposite 26 41 + 44: TypeInt 32 0 + 45: TypeVector 44(int) 4 + 46: TypePointer Function 45(ivec4) + 48: TypeImage 44(int) 1D array sampled format:Unknown + 49: TypePointer UniformConstant 48 + 50(g_tTex1du4): 49(ptr) Variable UniformConstant + 53: TypeSampledImage 48 + 55: 6(float) Constant 1053609165 + 56: 24(fvec2) ConstantComposite 41 55 + 59: TypeImage 6(float) 2D array sampled format:Unknown + 60: TypePointer UniformConstant 59 + 61(g_tTex2df4): 60(ptr) Variable UniformConstant + 64: TypeSampledImage 59 + 66: TypeVector 6(float) 3 + 67: 66(fvec3) ConstantComposite 25 26 41 + 70: TypeImage 30(int) 2D array sampled format:Unknown + 71: TypePointer UniformConstant 70 + 72(g_tTex2di4): 71(ptr) Variable UniformConstant + 75: TypeSampledImage 70 + 77: 66(fvec3) ConstantComposite 41 55 28 + 80: TypeImage 44(int) 2D array sampled format:Unknown + 81: TypePointer UniformConstant 80 + 82(g_tTex2du4): 81(ptr) Variable UniformConstant + 85: TypeSampledImage 80 + 87: 6(float) Constant 1058642330 + 88: 6(float) Constant 1060320051 + 89: 66(fvec3) ConstantComposite 28 87 88 + 92: TypeImage 6(float) Cube array sampled format:Unknown + 93: TypePointer UniformConstant 92 + 94(g_tTexcdf4): 93(ptr) Variable UniformConstant + 97: TypeSampledImage 92 + 99: 7(fvec4) ConstantComposite 25 26 41 55 + 102: TypeImage 30(int) Cube array sampled format:Unknown + 103: TypePointer UniformConstant 102 + 104(g_tTexcdi4): 103(ptr) Variable UniformConstant + 107: TypeSampledImage 102 + 109: 7(fvec4) ConstantComposite 55 28 87 88 + 112: TypeImage 44(int) Cube array sampled format:Unknown + 113: TypePointer UniformConstant 112 + 114(g_tTexcdu4): 113(ptr) Variable UniformConstant + 117: TypeSampledImage 112 + 119: 6(float) Constant 1061997773 + 120: 6(float) Constant 1063675494 + 121: 6(float) Constant 1065353216 + 122: 7(fvec4) ConstantComposite 88 119 120 121 + 124: TypePointer Function 8(PS_OUTPUT) + 126: 30(int) Constant 0 + 127: 7(fvec4) ConstantComposite 121 121 121 121 + 129: 30(int) Constant 1 + 130: TypePointer Function 6(float) + 137: TypePointer Output 7(fvec4) + 138(Color): 137(ptr) Variable Output + 141: TypePointer Output 6(float) + 142(Depth): 141(ptr) Variable Output +145(g_tTex1df4a): 15(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label +135(flattenTemp): 124(ptr) Variable Function + 136:8(PS_OUTPUT) FunctionCall 10(@main() + Store 135(flattenTemp) 136 + 139: 12(ptr) AccessChain 135(flattenTemp) 126 + 140: 7(fvec4) Load 139 + Store 138(Color) 140 + 143: 130(ptr) AccessChain 135(flattenTemp) 129 + 144: 6(float) Load 143 + Store 142(Depth) 144 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 13(txval10): 12(ptr) Variable Function + 33(txval11): 32(ptr) Variable Function + 47(txval12): 46(ptr) Variable Function + 58(txval20): 12(ptr) Variable Function + 69(txval21): 32(ptr) Variable Function + 79(txval22): 46(ptr) Variable Function + 91(txval40): 12(ptr) Variable Function + 101(txval41): 32(ptr) Variable Function + 111(txval42): 46(ptr) Variable Function + 125(psout): 124(ptr) Variable Function + 17: 14 Load 16(g_tTex1df4) + 21: 18 Load 20(g_sSamp) + 23: 22 SampledImage 17 21 + 29: 7(fvec4) ImageSampleImplicitLod 23 27 Bias 28 + Store 13(txval10) 29 + 37: 34 Load 36(g_tTex1di4) + 38: 18 Load 20(g_sSamp) + 40: 39 SampledImage 37 38 + 43: 31(ivec4) ImageSampleImplicitLod 40 42 Bias 28 + Store 33(txval11) 43 + 51: 48 Load 50(g_tTex1du4) + 52: 18 Load 20(g_sSamp) + 54: 53 SampledImage 51 52 + 57: 45(ivec4) ImageSampleImplicitLod 54 56 Bias 28 + Store 47(txval12) 57 + 62: 59 Load 61(g_tTex2df4) + 63: 18 Load 20(g_sSamp) + 65: 64 SampledImage 62 63 + 68: 7(fvec4) ImageSampleImplicitLod 65 67 Bias 28 + Store 58(txval20) 68 + 73: 70 Load 72(g_tTex2di4) + 74: 18 Load 20(g_sSamp) + 76: 75 SampledImage 73 74 + 78: 31(ivec4) ImageSampleImplicitLod 76 77 Bias 28 + Store 69(txval21) 78 + 83: 80 Load 82(g_tTex2du4) + 84: 18 Load 20(g_sSamp) + 86: 85 SampledImage 83 84 + 90: 45(ivec4) ImageSampleImplicitLod 86 89 Bias 28 + Store 79(txval22) 90 + 95: 92 Load 94(g_tTexcdf4) + 96: 18 Load 20(g_sSamp) + 98: 97 SampledImage 95 96 + 100: 7(fvec4) ImageSampleImplicitLod 98 99 Bias 28 + Store 91(txval40) 100 + 105: 102 Load 104(g_tTexcdi4) + 106: 18 Load 20(g_sSamp) + 108: 107 SampledImage 105 106 + 110: 31(ivec4) ImageSampleImplicitLod 108 109 Bias 28 + Store 101(txval41) 110 + 115: 112 Load 114(g_tTexcdu4) + 116: 18 Load 20(g_sSamp) + 118: 117 SampledImage 115 116 + 123: 45(ivec4) ImageSampleImplicitLod 118 122 Bias 28 + Store 111(txval42) 123 + 128: 12(ptr) AccessChain 125(psout) 126 + Store 128 127 + 131: 130(ptr) AccessChain 125(psout) 129 + Store 131 121 + 132:8(PS_OUTPUT) Load 125(psout) + ReturnValue 132 + FunctionEnd 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 new file mode 100644 index 0000000..81e8da9 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out @@ -0,0 +1,674 @@ +hlsl.samplebias.basic.dx10.frag +Shader version: 450 +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}) +0:28 Function Parameters: +0:? Sequence +0:31 Sequence +0:31 move second child to first child ( temp 4-component vector of float) +0:31 'txval10' ( temp 4-component vector of float) +0:31 texture ( temp 4-component vector of float) +0:31 Construct combined texture-sampler ( temp sampler1D) +0:31 'g_tTex1df4' (layout( binding=0) uniform texture1D) +0:31 'g_sSamp' (layout( binding=0) uniform sampler) +0:31 Constant: +0:31 0.100000 +0:31 Constant: +0:31 0.500000 +0:32 Sequence +0:32 move second child to first child ( temp 4-component vector of int) +0:32 'txval11' ( temp 4-component vector of int) +0:32 texture ( temp 4-component vector of int) +0:32 Construct combined texture-sampler ( temp isampler1D) +0:32 'g_tTex1di4' ( uniform itexture1D) +0:32 'g_sSamp' (layout( binding=0) uniform sampler) +0:32 Constant: +0:32 0.200000 +0:32 Constant: +0:32 0.500000 +0:33 Sequence +0:33 move second child to first child ( temp 4-component vector of uint) +0:33 'txval12' ( temp 4-component vector of uint) +0:33 texture ( temp 4-component vector of uint) +0:33 Construct combined texture-sampler ( temp usampler1D) +0:33 'g_tTex1du4' ( uniform utexture1D) +0:33 'g_sSamp' (layout( binding=0) uniform sampler) +0:33 Constant: +0:33 0.300000 +0:33 Constant: +0:33 0.500000 +0:35 Sequence +0:35 move second child to first child ( temp 4-component vector of float) +0:35 'txval20' ( temp 4-component vector of float) +0:35 texture ( temp 4-component vector of float) +0:35 Construct combined texture-sampler ( temp sampler2D) +0:35 'g_tTex2df4' ( uniform texture2D) +0:35 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:35 Constant: +0:35 0.500000 +0:36 Sequence +0:36 move second child to first child ( temp 4-component vector of int) +0:36 'txval21' ( temp 4-component vector of int) +0:36 texture ( temp 4-component vector of int) +0:36 Construct combined texture-sampler ( temp isampler2D) +0:36 'g_tTex2di4' ( uniform itexture2D) +0:36 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:36 Constant: +0:36 0.500000 +0:37 Sequence +0:37 move second child to first child ( temp 4-component vector of uint) +0:37 'txval22' ( temp 4-component vector of uint) +0:37 texture ( temp 4-component vector of uint) +0:37 Construct combined texture-sampler ( temp usampler2D) +0:37 'g_tTex2du4' ( uniform utexture2D) +0:37 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:37 Constant: +0:37 0.500000 +0:39 Sequence +0:39 move second child to first child ( temp 4-component vector of float) +0:39 'txval30' ( temp 4-component vector of float) +0:39 texture ( temp 4-component vector of float) +0:39 Construct combined texture-sampler ( temp sampler3D) +0:39 'g_tTex3df4' ( uniform texture3D) +0:39 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:39 Constant: +0:39 0.500000 +0:40 Sequence +0:40 move second child to first child ( temp 4-component vector of int) +0:40 'txval31' ( temp 4-component vector of int) +0:40 texture ( temp 4-component vector of int) +0:40 Construct combined texture-sampler ( temp isampler3D) +0:40 'g_tTex3di4' ( uniform itexture3D) +0:40 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:40 Constant: +0:40 0.500000 +0:41 Sequence +0:41 move second child to first child ( temp 4-component vector of uint) +0:41 'txval32' ( temp 4-component vector of uint) +0:41 texture ( temp 4-component vector of uint) +0:41 Construct combined texture-sampler ( temp usampler3D) +0:41 'g_tTex3du4' ( uniform utexture3D) +0:41 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:41 Constant: +0:41 0.500000 +0:43 Sequence +0:43 move second child to first child ( temp 4-component vector of float) +0:43 'txval40' ( temp 4-component vector of float) +0:43 texture ( temp 4-component vector of float) +0:43 Construct combined texture-sampler ( temp samplerCube) +0:43 'g_tTexcdf4' ( uniform textureCube) +0:43 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:43 Constant: +0:43 0.500000 +0:44 Sequence +0:44 move second child to first child ( temp 4-component vector of int) +0:44 'txval41' ( temp 4-component vector of int) +0:44 texture ( temp 4-component vector of int) +0:44 Construct combined texture-sampler ( temp isamplerCube) +0:44 'g_tTexcdi4' ( uniform itextureCube) +0:44 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:44 Constant: +0:44 0.500000 +0:45 Sequence +0:45 move second child to first child ( temp 4-component vector of uint) +0:45 'txval42' ( temp 4-component vector of uint) +0:45 texture ( temp 4-component vector of uint) +0:45 Construct combined texture-sampler ( temp usamplerCube) +0:45 'g_tTexcdu4' ( uniform utextureCube) +0:45 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:45 Constant: +0:45 0.500000 +0:47 move second child to first child ( temp 4-component vector of float) +0:47 Color: direct index for structure ( temp 4-component vector of float) +0:47 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:47 Constant: +0:47 0 (const int) +0:47 Constant: +0:47 1.000000 +0:47 1.000000 +0:47 1.000000 +0:47 1.000000 +0:48 move second child to first child ( temp float) +0:48 Depth: direct index for structure ( temp float) +0:48 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:48 Constant: +0:48 1 (const int) +0:48 Constant: +0:48 1.000000 +0:50 Branch: Return with expression +0:50 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:28 Function Definition: main( ( temp void) +0:28 Function Parameters: +0:? Sequence +0:28 Sequence +0:28 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:28 1 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1D) +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_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:? 'Color' (layout( location=0) out 4-component vector of float) +0:? 'Depth' ( out float FragDepth) + + +Linked fragment stage: + + +Shader version: 450 +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}) +0:28 Function Parameters: +0:? Sequence +0:31 Sequence +0:31 move second child to first child ( temp 4-component vector of float) +0:31 'txval10' ( temp 4-component vector of float) +0:31 texture ( temp 4-component vector of float) +0:31 Construct combined texture-sampler ( temp sampler1D) +0:31 'g_tTex1df4' (layout( binding=0) uniform texture1D) +0:31 'g_sSamp' (layout( binding=0) uniform sampler) +0:31 Constant: +0:31 0.100000 +0:31 Constant: +0:31 0.500000 +0:32 Sequence +0:32 move second child to first child ( temp 4-component vector of int) +0:32 'txval11' ( temp 4-component vector of int) +0:32 texture ( temp 4-component vector of int) +0:32 Construct combined texture-sampler ( temp isampler1D) +0:32 'g_tTex1di4' ( uniform itexture1D) +0:32 'g_sSamp' (layout( binding=0) uniform sampler) +0:32 Constant: +0:32 0.200000 +0:32 Constant: +0:32 0.500000 +0:33 Sequence +0:33 move second child to first child ( temp 4-component vector of uint) +0:33 'txval12' ( temp 4-component vector of uint) +0:33 texture ( temp 4-component vector of uint) +0:33 Construct combined texture-sampler ( temp usampler1D) +0:33 'g_tTex1du4' ( uniform utexture1D) +0:33 'g_sSamp' (layout( binding=0) uniform sampler) +0:33 Constant: +0:33 0.300000 +0:33 Constant: +0:33 0.500000 +0:35 Sequence +0:35 move second child to first child ( temp 4-component vector of float) +0:35 'txval20' ( temp 4-component vector of float) +0:35 texture ( temp 4-component vector of float) +0:35 Construct combined texture-sampler ( temp sampler2D) +0:35 'g_tTex2df4' ( uniform texture2D) +0:35 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:35 Constant: +0:35 0.500000 +0:36 Sequence +0:36 move second child to first child ( temp 4-component vector of int) +0:36 'txval21' ( temp 4-component vector of int) +0:36 texture ( temp 4-component vector of int) +0:36 Construct combined texture-sampler ( temp isampler2D) +0:36 'g_tTex2di4' ( uniform itexture2D) +0:36 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:36 Constant: +0:36 0.500000 +0:37 Sequence +0:37 move second child to first child ( temp 4-component vector of uint) +0:37 'txval22' ( temp 4-component vector of uint) +0:37 texture ( temp 4-component vector of uint) +0:37 Construct combined texture-sampler ( temp usampler2D) +0:37 'g_tTex2du4' ( uniform utexture2D) +0:37 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:37 Constant: +0:37 0.500000 +0:39 Sequence +0:39 move second child to first child ( temp 4-component vector of float) +0:39 'txval30' ( temp 4-component vector of float) +0:39 texture ( temp 4-component vector of float) +0:39 Construct combined texture-sampler ( temp sampler3D) +0:39 'g_tTex3df4' ( uniform texture3D) +0:39 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:39 Constant: +0:39 0.500000 +0:40 Sequence +0:40 move second child to first child ( temp 4-component vector of int) +0:40 'txval31' ( temp 4-component vector of int) +0:40 texture ( temp 4-component vector of int) +0:40 Construct combined texture-sampler ( temp isampler3D) +0:40 'g_tTex3di4' ( uniform itexture3D) +0:40 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:40 Constant: +0:40 0.500000 +0:41 Sequence +0:41 move second child to first child ( temp 4-component vector of uint) +0:41 'txval32' ( temp 4-component vector of uint) +0:41 texture ( temp 4-component vector of uint) +0:41 Construct combined texture-sampler ( temp usampler3D) +0:41 'g_tTex3du4' ( uniform utexture3D) +0:41 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:41 Constant: +0:41 0.500000 +0:43 Sequence +0:43 move second child to first child ( temp 4-component vector of float) +0:43 'txval40' ( temp 4-component vector of float) +0:43 texture ( temp 4-component vector of float) +0:43 Construct combined texture-sampler ( temp samplerCube) +0:43 'g_tTexcdf4' ( uniform textureCube) +0:43 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:43 Constant: +0:43 0.500000 +0:44 Sequence +0:44 move second child to first child ( temp 4-component vector of int) +0:44 'txval41' ( temp 4-component vector of int) +0:44 texture ( temp 4-component vector of int) +0:44 Construct combined texture-sampler ( temp isamplerCube) +0:44 'g_tTexcdi4' ( uniform itextureCube) +0:44 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:44 Constant: +0:44 0.500000 +0:45 Sequence +0:45 move second child to first child ( temp 4-component vector of uint) +0:45 'txval42' ( temp 4-component vector of uint) +0:45 texture ( temp 4-component vector of uint) +0:45 Construct combined texture-sampler ( temp usamplerCube) +0:45 'g_tTexcdu4' ( uniform utextureCube) +0:45 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:45 Constant: +0:45 0.500000 +0:47 move second child to first child ( temp 4-component vector of float) +0:47 Color: direct index for structure ( temp 4-component vector of float) +0:47 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:47 Constant: +0:47 0 (const int) +0:47 Constant: +0:47 1.000000 +0:47 1.000000 +0:47 1.000000 +0:47 1.000000 +0:48 move second child to first child ( temp float) +0:48 Depth: direct index for structure ( temp float) +0:48 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:48 Constant: +0:48 1 (const int) +0:48 Constant: +0:48 1.000000 +0:50 Branch: Return with expression +0:50 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:28 Function Definition: main( ( temp void) +0:28 Function Parameters: +0:? Sequence +0:28 Sequence +0:28 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:28 1 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1D) +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_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:? 'Color' (layout( location=0) out 4-component vector of float) +0:? 'Depth' ( out float FragDepth) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 170 + + Capability Shader + Capability Sampled1D + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 162 166 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + MemberName 8(PS_OUTPUT) 1 "Depth" + Name 10 "@main(" + Name 13 "txval10" + Name 16 "g_tTex1df4" + Name 20 "g_sSamp" + Name 30 "txval11" + Name 33 "g_tTex1di4" + Name 43 "txval12" + Name 46 "g_tTex1du4" + Name 53 "txval20" + Name 56 "g_tTex2df4" + Name 64 "txval21" + Name 67 "g_tTex2di4" + Name 75 "txval22" + Name 78 "g_tTex2du4" + Name 86 "txval30" + Name 89 "g_tTex3df4" + Name 97 "txval31" + Name 100 "g_tTex3di4" + Name 107 "txval32" + Name 110 "g_tTex3du4" + Name 120 "txval40" + Name 123 "g_tTexcdf4" + Name 129 "txval41" + Name 132 "g_tTexcdi4" + Name 138 "txval42" + Name 141 "g_tTexcdu4" + Name 148 "psout" + Name 159 "flattenTemp" + Name 162 "Color" + Name 166 "Depth" + Name 169 "g_tTex1df4a" + 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 33(g_tTex1di4) DescriptorSet 0 + Decorate 46(g_tTex1du4) DescriptorSet 0 + Decorate 56(g_tTex2df4) DescriptorSet 0 + Decorate 67(g_tTex2di4) DescriptorSet 0 + Decorate 78(g_tTex2du4) DescriptorSet 0 + Decorate 89(g_tTex3df4) DescriptorSet 0 + Decorate 100(g_tTex3di4) DescriptorSet 0 + Decorate 110(g_tTex3du4) DescriptorSet 0 + 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 169(g_tTex1df4a) DescriptorSet 0 + Decorate 169(g_tTex1df4a) Binding 1 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8(PS_OUTPUT): TypeStruct 7(fvec4) 6(float) + 9: TypeFunction 8(PS_OUTPUT) + 12: TypePointer Function 7(fvec4) + 14: TypeImage 6(float) 1D 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: TypeSampledImage 14 + 24: 6(float) Constant 1036831949 + 25: 6(float) Constant 1056964608 + 27: TypeInt 32 1 + 28: TypeVector 27(int) 4 + 29: TypePointer Function 28(ivec4) + 31: TypeImage 27(int) 1D sampled format:Unknown + 32: TypePointer UniformConstant 31 + 33(g_tTex1di4): 32(ptr) Variable UniformConstant + 36: TypeSampledImage 31 + 38: 6(float) Constant 1045220557 + 40: TypeInt 32 0 + 41: TypeVector 40(int) 4 + 42: TypePointer Function 41(ivec4) + 44: TypeImage 40(int) 1D sampled format:Unknown + 45: TypePointer UniformConstant 44 + 46(g_tTex1du4): 45(ptr) Variable UniformConstant + 49: TypeSampledImage 44 + 51: 6(float) Constant 1050253722 + 54: TypeImage 6(float) 2D sampled format:Unknown + 55: TypePointer UniformConstant 54 + 56(g_tTex2df4): 55(ptr) Variable UniformConstant + 59: TypeSampledImage 54 + 61: TypeVector 6(float) 2 + 62: 61(fvec2) ConstantComposite 24 38 + 65: TypeImage 27(int) 2D sampled format:Unknown + 66: TypePointer UniformConstant 65 + 67(g_tTex2di4): 66(ptr) Variable UniformConstant + 70: TypeSampledImage 65 + 72: 6(float) Constant 1053609165 + 73: 61(fvec2) ConstantComposite 51 72 + 76: TypeImage 40(int) 2D sampled format:Unknown + 77: TypePointer UniformConstant 76 + 78(g_tTex2du4): 77(ptr) Variable UniformConstant + 81: TypeSampledImage 76 + 83: 6(float) Constant 1058642330 + 84: 61(fvec2) ConstantComposite 25 83 + 87: TypeImage 6(float) 3D sampled format:Unknown + 88: TypePointer UniformConstant 87 + 89(g_tTex3df4): 88(ptr) Variable UniformConstant + 92: TypeSampledImage 87 + 94: TypeVector 6(float) 3 + 95: 94(fvec3) ConstantComposite 24 38 51 + 98: TypeImage 27(int) 3D sampled format:Unknown + 99: TypePointer UniformConstant 98 + 100(g_tTex3di4): 99(ptr) Variable UniformConstant + 103: TypeSampledImage 98 + 105: 94(fvec3) ConstantComposite 72 25 83 + 108: TypeImage 40(int) 3D sampled format:Unknown + 109: TypePointer UniformConstant 108 + 110(g_tTex3du4): 109(ptr) Variable UniformConstant + 113: TypeSampledImage 108 + 115: 6(float) Constant 1060320051 + 116: 6(float) Constant 1061997773 + 117: 6(float) Constant 1063675494 + 118: 94(fvec3) ConstantComposite 115 116 117 + 121: TypeImage 6(float) Cube sampled format:Unknown + 122: TypePointer UniformConstant 121 + 123(g_tTexcdf4): 122(ptr) Variable UniformConstant + 126: TypeSampledImage 121 + 130: TypeImage 27(int) Cube sampled format:Unknown + 131: TypePointer UniformConstant 130 + 132(g_tTexcdi4): 131(ptr) Variable UniformConstant + 135: TypeSampledImage 130 + 139: TypeImage 40(int) Cube sampled format:Unknown + 140: TypePointer UniformConstant 139 + 141(g_tTexcdu4): 140(ptr) Variable UniformConstant + 144: TypeSampledImage 139 + 147: TypePointer Function 8(PS_OUTPUT) + 149: 27(int) Constant 0 + 150: 6(float) Constant 1065353216 + 151: 7(fvec4) ConstantComposite 150 150 150 150 + 153: 27(int) Constant 1 + 154: TypePointer Function 6(float) + 161: TypePointer Output 7(fvec4) + 162(Color): 161(ptr) Variable Output + 165: TypePointer Output 6(float) + 166(Depth): 165(ptr) Variable Output +169(g_tTex1df4a): 15(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label +159(flattenTemp): 147(ptr) Variable Function + 160:8(PS_OUTPUT) FunctionCall 10(@main() + Store 159(flattenTemp) 160 + 163: 12(ptr) AccessChain 159(flattenTemp) 149 + 164: 7(fvec4) Load 163 + Store 162(Color) 164 + 167: 154(ptr) AccessChain 159(flattenTemp) 153 + 168: 6(float) Load 167 + Store 166(Depth) 168 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 13(txval10): 12(ptr) Variable Function + 30(txval11): 29(ptr) Variable Function + 43(txval12): 42(ptr) Variable Function + 53(txval20): 12(ptr) Variable Function + 64(txval21): 29(ptr) Variable Function + 75(txval22): 42(ptr) Variable Function + 86(txval30): 12(ptr) Variable Function + 97(txval31): 29(ptr) Variable Function + 107(txval32): 42(ptr) Variable Function + 120(txval40): 12(ptr) Variable Function + 129(txval41): 29(ptr) Variable Function + 138(txval42): 42(ptr) Variable Function + 148(psout): 147(ptr) Variable Function + 17: 14 Load 16(g_tTex1df4) + 21: 18 Load 20(g_sSamp) + 23: 22 SampledImage 17 21 + 26: 7(fvec4) ImageSampleImplicitLod 23 24 Bias 25 + Store 13(txval10) 26 + 34: 31 Load 33(g_tTex1di4) + 35: 18 Load 20(g_sSamp) + 37: 36 SampledImage 34 35 + 39: 28(ivec4) ImageSampleImplicitLod 37 38 Bias 25 + Store 30(txval11) 39 + 47: 44 Load 46(g_tTex1du4) + 48: 18 Load 20(g_sSamp) + 50: 49 SampledImage 47 48 + 52: 41(ivec4) ImageSampleImplicitLod 50 51 Bias 25 + Store 43(txval12) 52 + 57: 54 Load 56(g_tTex2df4) + 58: 18 Load 20(g_sSamp) + 60: 59 SampledImage 57 58 + 63: 7(fvec4) ImageSampleImplicitLod 60 62 Bias 25 + Store 53(txval20) 63 + 68: 65 Load 67(g_tTex2di4) + 69: 18 Load 20(g_sSamp) + 71: 70 SampledImage 68 69 + 74: 28(ivec4) ImageSampleImplicitLod 71 73 Bias 25 + Store 64(txval21) 74 + 79: 76 Load 78(g_tTex2du4) + 80: 18 Load 20(g_sSamp) + 82: 81 SampledImage 79 80 + 85: 41(ivec4) ImageSampleImplicitLod 82 84 Bias 25 + Store 75(txval22) 85 + 90: 87 Load 89(g_tTex3df4) + 91: 18 Load 20(g_sSamp) + 93: 92 SampledImage 90 91 + 96: 7(fvec4) ImageSampleImplicitLod 93 95 Bias 25 + Store 86(txval30) 96 + 101: 98 Load 100(g_tTex3di4) + 102: 18 Load 20(g_sSamp) + 104: 103 SampledImage 101 102 + 106: 28(ivec4) ImageSampleImplicitLod 104 105 Bias 25 + Store 97(txval31) 106 + 111: 108 Load 110(g_tTex3du4) + 112: 18 Load 20(g_sSamp) + 114: 113 SampledImage 111 112 + 119: 41(ivec4) ImageSampleImplicitLod 114 118 Bias 25 + Store 107(txval32) 119 + 124: 121 Load 123(g_tTexcdf4) + 125: 18 Load 20(g_sSamp) + 127: 126 SampledImage 124 125 + 128: 7(fvec4) ImageSampleImplicitLod 127 95 Bias 25 + Store 120(txval40) 128 + 133: 130 Load 132(g_tTexcdi4) + 134: 18 Load 20(g_sSamp) + 136: 135 SampledImage 133 134 + 137: 28(ivec4) ImageSampleImplicitLod 136 105 Bias 25 + Store 129(txval41) 137 + 142: 139 Load 141(g_tTexcdu4) + 143: 18 Load 20(g_sSamp) + 145: 144 SampledImage 142 143 + 146: 41(ivec4) ImageSampleImplicitLod 145 118 Bias 25 + Store 138(txval42) 146 + 152: 12(ptr) AccessChain 148(psout) 149 + Store 152 151 + 155: 154(ptr) AccessChain 148(psout) 153 + Store 155 150 + 156:8(PS_OUTPUT) Load 148(psout) + ReturnValue 156 + FunctionEnd 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 new file mode 100644 index 0000000..1919132 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out @@ -0,0 +1,635 @@ +hlsl.samplebias.offset.dx10.frag +Shader version: 450 +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}) +0:28 Function Parameters: +0:? Sequence +0:31 Sequence +0:31 move second child to first child ( temp 4-component vector of float) +0:31 'txval10' ( temp 4-component vector of float) +0:31 textureOffset ( temp 4-component vector of float) +0:31 Construct combined texture-sampler ( temp sampler1D) +0:31 'g_tTex1df4' (layout( binding=0) uniform texture1D) +0:31 'g_sSamp' (layout( binding=0) uniform sampler) +0:31 Constant: +0:31 0.100000 +0:31 Constant: +0:31 0.500000 +0:31 Constant: +0:31 1 (const int) +0:32 Sequence +0:32 move second child to first child ( temp 4-component vector of int) +0:32 'txval11' ( temp 4-component vector of int) +0:32 textureOffset ( temp 4-component vector of int) +0:32 Construct combined texture-sampler ( temp isampler1D) +0:32 'g_tTex1di4' ( uniform itexture1D) +0:32 'g_sSamp' (layout( binding=0) uniform sampler) +0:32 Constant: +0:32 0.200000 +0:32 Constant: +0:32 0.500000 +0:32 Constant: +0:32 1 (const int) +0:33 Sequence +0:33 move second child to first child ( temp 4-component vector of uint) +0:33 'txval12' ( temp 4-component vector of uint) +0:33 textureOffset ( temp 4-component vector of uint) +0:33 Construct combined texture-sampler ( temp usampler1D) +0:33 'g_tTex1du4' ( uniform utexture1D) +0:33 'g_sSamp' (layout( binding=0) uniform sampler) +0:33 Constant: +0:33 0.300000 +0:33 Constant: +0:33 0.500000 +0:33 Constant: +0:33 1 (const int) +0:35 Sequence +0:35 move second child to first child ( temp 4-component vector of float) +0:35 'txval20' ( temp 4-component vector of float) +0:35 textureOffset ( temp 4-component vector of float) +0:35 Construct combined texture-sampler ( temp sampler2D) +0:35 'g_tTex2df4' ( uniform texture2D) +0:35 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:35 Constant: +0:35 0.500000 +0:? Constant: +0:? 1 (const int) +0:? 0 (const int) +0:36 Sequence +0:36 move second child to first child ( temp 4-component vector of int) +0:36 'txval21' ( temp 4-component vector of int) +0:36 textureOffset ( temp 4-component vector of int) +0:36 Construct combined texture-sampler ( temp isampler2D) +0:36 'g_tTex2di4' ( uniform itexture2D) +0:36 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:36 Constant: +0:36 0.500000 +0:? Constant: +0:? 1 (const int) +0:? 1 (const int) +0:37 Sequence +0:37 move second child to first child ( temp 4-component vector of uint) +0:37 'txval22' ( temp 4-component vector of uint) +0:37 textureOffset ( temp 4-component vector of uint) +0:37 Construct combined texture-sampler ( temp usampler2D) +0:37 'g_tTex2du4' ( uniform utexture2D) +0:37 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:37 Constant: +0:37 0.500000 +0:? Constant: +0:? 1 (const int) +0:? -1 (const int) +0:39 Sequence +0:39 move second child to first child ( temp 4-component vector of float) +0:39 'txval30' ( temp 4-component vector of float) +0:39 textureOffset ( temp 4-component vector of float) +0:39 Construct combined texture-sampler ( temp sampler3D) +0:39 'g_tTex3df4' ( uniform texture3D) +0:39 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:39 Constant: +0:39 0.500000 +0:? Constant: +0:? 1 (const int) +0:? 0 (const int) +0:? 1 (const int) +0:40 Sequence +0:40 move second child to first child ( temp 4-component vector of int) +0:40 'txval31' ( temp 4-component vector of int) +0:40 textureOffset ( temp 4-component vector of int) +0:40 Construct combined texture-sampler ( temp isampler3D) +0:40 'g_tTex3di4' ( uniform itexture3D) +0:40 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:40 Constant: +0:40 0.500000 +0:? Constant: +0:? 1 (const int) +0:? 1 (const int) +0:? 1 (const int) +0:41 Sequence +0:41 move second child to first child ( temp 4-component vector of uint) +0:41 'txval32' ( temp 4-component vector of uint) +0:41 textureOffset ( temp 4-component vector of uint) +0:41 Construct combined texture-sampler ( temp usampler3D) +0:41 'g_tTex3du4' ( uniform utexture3D) +0:41 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:41 Constant: +0:41 0.500000 +0:? Constant: +0:? 1 (const int) +0:? 0 (const int) +0:? -1 (const int) +0:45 move second child to first child ( temp 4-component vector of float) +0:45 Color: direct index for structure ( temp 4-component vector of float) +0:45 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:45 Constant: +0:45 0 (const int) +0:45 Constant: +0:45 1.000000 +0:45 1.000000 +0:45 1.000000 +0:45 1.000000 +0:46 move second child to first child ( temp float) +0:46 Depth: direct index for structure ( temp float) +0:46 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:46 Constant: +0:46 1 (const int) +0:46 Constant: +0:46 1.000000 +0:48 Branch: Return with expression +0:48 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:28 Function Definition: main( ( temp void) +0:28 Function Parameters: +0:? Sequence +0:28 Sequence +0:28 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:28 1 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1D) +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_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:? 'Color' (layout( location=0) out 4-component vector of float) +0:? 'Depth' ( out float FragDepth) + + +Linked fragment stage: + + +Shader version: 450 +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}) +0:28 Function Parameters: +0:? Sequence +0:31 Sequence +0:31 move second child to first child ( temp 4-component vector of float) +0:31 'txval10' ( temp 4-component vector of float) +0:31 textureOffset ( temp 4-component vector of float) +0:31 Construct combined texture-sampler ( temp sampler1D) +0:31 'g_tTex1df4' (layout( binding=0) uniform texture1D) +0:31 'g_sSamp' (layout( binding=0) uniform sampler) +0:31 Constant: +0:31 0.100000 +0:31 Constant: +0:31 0.500000 +0:31 Constant: +0:31 1 (const int) +0:32 Sequence +0:32 move second child to first child ( temp 4-component vector of int) +0:32 'txval11' ( temp 4-component vector of int) +0:32 textureOffset ( temp 4-component vector of int) +0:32 Construct combined texture-sampler ( temp isampler1D) +0:32 'g_tTex1di4' ( uniform itexture1D) +0:32 'g_sSamp' (layout( binding=0) uniform sampler) +0:32 Constant: +0:32 0.200000 +0:32 Constant: +0:32 0.500000 +0:32 Constant: +0:32 1 (const int) +0:33 Sequence +0:33 move second child to first child ( temp 4-component vector of uint) +0:33 'txval12' ( temp 4-component vector of uint) +0:33 textureOffset ( temp 4-component vector of uint) +0:33 Construct combined texture-sampler ( temp usampler1D) +0:33 'g_tTex1du4' ( uniform utexture1D) +0:33 'g_sSamp' (layout( binding=0) uniform sampler) +0:33 Constant: +0:33 0.300000 +0:33 Constant: +0:33 0.500000 +0:33 Constant: +0:33 1 (const int) +0:35 Sequence +0:35 move second child to first child ( temp 4-component vector of float) +0:35 'txval20' ( temp 4-component vector of float) +0:35 textureOffset ( temp 4-component vector of float) +0:35 Construct combined texture-sampler ( temp sampler2D) +0:35 'g_tTex2df4' ( uniform texture2D) +0:35 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:35 Constant: +0:35 0.500000 +0:? Constant: +0:? 1 (const int) +0:? 0 (const int) +0:36 Sequence +0:36 move second child to first child ( temp 4-component vector of int) +0:36 'txval21' ( temp 4-component vector of int) +0:36 textureOffset ( temp 4-component vector of int) +0:36 Construct combined texture-sampler ( temp isampler2D) +0:36 'g_tTex2di4' ( uniform itexture2D) +0:36 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:36 Constant: +0:36 0.500000 +0:? Constant: +0:? 1 (const int) +0:? 1 (const int) +0:37 Sequence +0:37 move second child to first child ( temp 4-component vector of uint) +0:37 'txval22' ( temp 4-component vector of uint) +0:37 textureOffset ( temp 4-component vector of uint) +0:37 Construct combined texture-sampler ( temp usampler2D) +0:37 'g_tTex2du4' ( uniform utexture2D) +0:37 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:37 Constant: +0:37 0.500000 +0:? Constant: +0:? 1 (const int) +0:? -1 (const int) +0:39 Sequence +0:39 move second child to first child ( temp 4-component vector of float) +0:39 'txval30' ( temp 4-component vector of float) +0:39 textureOffset ( temp 4-component vector of float) +0:39 Construct combined texture-sampler ( temp sampler3D) +0:39 'g_tTex3df4' ( uniform texture3D) +0:39 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:39 Constant: +0:39 0.500000 +0:? Constant: +0:? 1 (const int) +0:? 0 (const int) +0:? 1 (const int) +0:40 Sequence +0:40 move second child to first child ( temp 4-component vector of int) +0:40 'txval31' ( temp 4-component vector of int) +0:40 textureOffset ( temp 4-component vector of int) +0:40 Construct combined texture-sampler ( temp isampler3D) +0:40 'g_tTex3di4' ( uniform itexture3D) +0:40 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:40 Constant: +0:40 0.500000 +0:? Constant: +0:? 1 (const int) +0:? 1 (const int) +0:? 1 (const int) +0:41 Sequence +0:41 move second child to first child ( temp 4-component vector of uint) +0:41 'txval32' ( temp 4-component vector of uint) +0:41 textureOffset ( temp 4-component vector of uint) +0:41 Construct combined texture-sampler ( temp usampler3D) +0:41 'g_tTex3du4' ( uniform utexture3D) +0:41 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:41 Constant: +0:41 0.500000 +0:? Constant: +0:? 1 (const int) +0:? 0 (const int) +0:? -1 (const int) +0:45 move second child to first child ( temp 4-component vector of float) +0:45 Color: direct index for structure ( temp 4-component vector of float) +0:45 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:45 Constant: +0:45 0 (const int) +0:45 Constant: +0:45 1.000000 +0:45 1.000000 +0:45 1.000000 +0:45 1.000000 +0:46 move second child to first child ( temp float) +0:46 Depth: direct index for structure ( temp float) +0:46 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:46 Constant: +0:46 1 (const int) +0:46 Constant: +0:46 1.000000 +0:48 Branch: Return with expression +0:48 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:28 Function Definition: main( ( temp void) +0:28 Function Parameters: +0:? Sequence +0:28 Sequence +0:28 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:28 1 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1D) +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_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:? 'Color' (layout( location=0) out 4-component vector of float) +0:? 'Depth' ( out float FragDepth) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 161 + + Capability Shader + Capability Sampled1D + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 144 148 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + MemberName 8(PS_OUTPUT) 1 "Depth" + Name 10 "@main(" + Name 13 "txval10" + Name 16 "g_tTex1df4" + Name 20 "g_sSamp" + Name 31 "txval11" + Name 34 "g_tTex1di4" + Name 44 "txval12" + Name 47 "g_tTex1du4" + Name 54 "txval20" + Name 57 "g_tTex2df4" + Name 68 "txval21" + Name 71 "g_tTex2di4" + Name 80 "txval22" + Name 83 "g_tTex2du4" + Name 93 "txval30" + Name 96 "g_tTex3df4" + Name 106 "txval31" + Name 109 "g_tTex3di4" + Name 117 "txval32" + Name 120 "g_tTex3du4" + Name 132 "psout" + Name 141 "flattenTemp" + Name 144 "Color" + Name 148 "Depth" + Name 151 "g_tTex1df4a" + Name 154 "g_tTexcdf4" + Name 157 "g_tTexcdi4" + Name 160 "g_tTexcdu4" + 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 34(g_tTex1di4) DescriptorSet 0 + Decorate 47(g_tTex1du4) DescriptorSet 0 + Decorate 57(g_tTex2df4) DescriptorSet 0 + Decorate 71(g_tTex2di4) DescriptorSet 0 + Decorate 83(g_tTex2du4) DescriptorSet 0 + 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 151(g_tTex1df4a) DescriptorSet 0 + Decorate 151(g_tTex1df4a) Binding 1 + Decorate 154(g_tTexcdf4) DescriptorSet 0 + Decorate 157(g_tTexcdi4) DescriptorSet 0 + Decorate 160(g_tTexcdu4) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8(PS_OUTPUT): TypeStruct 7(fvec4) 6(float) + 9: TypeFunction 8(PS_OUTPUT) + 12: TypePointer Function 7(fvec4) + 14: TypeImage 6(float) 1D 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: TypeSampledImage 14 + 24: 6(float) Constant 1036831949 + 25: 6(float) Constant 1056964608 + 26: TypeInt 32 1 + 27: 26(int) Constant 1 + 29: TypeVector 26(int) 4 + 30: TypePointer Function 29(ivec4) + 32: TypeImage 26(int) 1D sampled format:Unknown + 33: TypePointer UniformConstant 32 + 34(g_tTex1di4): 33(ptr) Variable UniformConstant + 37: TypeSampledImage 32 + 39: 6(float) Constant 1045220557 + 41: TypeInt 32 0 + 42: TypeVector 41(int) 4 + 43: TypePointer Function 42(ivec4) + 45: TypeImage 41(int) 1D sampled format:Unknown + 46: TypePointer UniformConstant 45 + 47(g_tTex1du4): 46(ptr) Variable UniformConstant + 50: TypeSampledImage 45 + 52: 6(float) Constant 1050253722 + 55: TypeImage 6(float) 2D sampled format:Unknown + 56: TypePointer UniformConstant 55 + 57(g_tTex2df4): 56(ptr) Variable UniformConstant + 60: TypeSampledImage 55 + 62: TypeVector 6(float) 2 + 63: 62(fvec2) ConstantComposite 24 39 + 64: TypeVector 26(int) 2 + 65: 26(int) Constant 0 + 66: 64(ivec2) ConstantComposite 27 65 + 69: TypeImage 26(int) 2D sampled format:Unknown + 70: TypePointer UniformConstant 69 + 71(g_tTex2di4): 70(ptr) Variable UniformConstant + 74: TypeSampledImage 69 + 76: 6(float) Constant 1053609165 + 77: 62(fvec2) ConstantComposite 52 76 + 78: 64(ivec2) ConstantComposite 27 27 + 81: TypeImage 41(int) 2D sampled format:Unknown + 82: TypePointer UniformConstant 81 + 83(g_tTex2du4): 82(ptr) Variable UniformConstant + 86: TypeSampledImage 81 + 88: 6(float) Constant 1058642330 + 89: 62(fvec2) ConstantComposite 25 88 + 90: 26(int) Constant 4294967295 + 91: 64(ivec2) ConstantComposite 27 90 + 94: TypeImage 6(float) 3D sampled format:Unknown + 95: TypePointer UniformConstant 94 + 96(g_tTex3df4): 95(ptr) Variable UniformConstant + 99: TypeSampledImage 94 + 101: TypeVector 6(float) 3 + 102: 101(fvec3) ConstantComposite 24 39 52 + 103: TypeVector 26(int) 3 + 104: 103(ivec3) ConstantComposite 27 65 27 + 107: TypeImage 26(int) 3D sampled format:Unknown + 108: TypePointer UniformConstant 107 + 109(g_tTex3di4): 108(ptr) Variable UniformConstant + 112: TypeSampledImage 107 + 114: 101(fvec3) ConstantComposite 76 25 88 + 115: 103(ivec3) ConstantComposite 27 27 27 + 118: TypeImage 41(int) 3D sampled format:Unknown + 119: TypePointer UniformConstant 118 + 120(g_tTex3du4): 119(ptr) Variable UniformConstant + 123: TypeSampledImage 118 + 125: 6(float) Constant 1060320051 + 126: 6(float) Constant 1061997773 + 127: 6(float) Constant 1063675494 + 128: 101(fvec3) ConstantComposite 125 126 127 + 129: 103(ivec3) ConstantComposite 27 65 90 + 131: TypePointer Function 8(PS_OUTPUT) + 133: 6(float) Constant 1065353216 + 134: 7(fvec4) ConstantComposite 133 133 133 133 + 136: TypePointer Function 6(float) + 143: TypePointer Output 7(fvec4) + 144(Color): 143(ptr) Variable Output + 147: TypePointer Output 6(float) + 148(Depth): 147(ptr) Variable Output +151(g_tTex1df4a): 15(ptr) Variable UniformConstant + 152: TypeImage 6(float) Cube sampled format:Unknown + 153: TypePointer UniformConstant 152 + 154(g_tTexcdf4): 153(ptr) Variable UniformConstant + 155: TypeImage 26(int) Cube sampled format:Unknown + 156: TypePointer UniformConstant 155 + 157(g_tTexcdi4): 156(ptr) Variable UniformConstant + 158: TypeImage 41(int) Cube sampled format:Unknown + 159: TypePointer UniformConstant 158 + 160(g_tTexcdu4): 159(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label +141(flattenTemp): 131(ptr) Variable Function + 142:8(PS_OUTPUT) FunctionCall 10(@main() + Store 141(flattenTemp) 142 + 145: 12(ptr) AccessChain 141(flattenTemp) 65 + 146: 7(fvec4) Load 145 + Store 144(Color) 146 + 149: 136(ptr) AccessChain 141(flattenTemp) 27 + 150: 6(float) Load 149 + Store 148(Depth) 150 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 13(txval10): 12(ptr) Variable Function + 31(txval11): 30(ptr) Variable Function + 44(txval12): 43(ptr) Variable Function + 54(txval20): 12(ptr) Variable Function + 68(txval21): 30(ptr) Variable Function + 80(txval22): 43(ptr) Variable Function + 93(txval30): 12(ptr) Variable Function + 106(txval31): 30(ptr) Variable Function + 117(txval32): 43(ptr) Variable Function + 132(psout): 131(ptr) Variable Function + 17: 14 Load 16(g_tTex1df4) + 21: 18 Load 20(g_sSamp) + 23: 22 SampledImage 17 21 + 28: 7(fvec4) ImageSampleImplicitLod 23 24 Bias ConstOffset 27 25 + Store 13(txval10) 28 + 35: 32 Load 34(g_tTex1di4) + 36: 18 Load 20(g_sSamp) + 38: 37 SampledImage 35 36 + 40: 29(ivec4) ImageSampleImplicitLod 38 39 Bias ConstOffset 27 25 + Store 31(txval11) 40 + 48: 45 Load 47(g_tTex1du4) + 49: 18 Load 20(g_sSamp) + 51: 50 SampledImage 48 49 + 53: 42(ivec4) ImageSampleImplicitLod 51 52 Bias ConstOffset 27 25 + Store 44(txval12) 53 + 58: 55 Load 57(g_tTex2df4) + 59: 18 Load 20(g_sSamp) + 61: 60 SampledImage 58 59 + 67: 7(fvec4) ImageSampleImplicitLod 61 63 Bias ConstOffset 66 25 + Store 54(txval20) 67 + 72: 69 Load 71(g_tTex2di4) + 73: 18 Load 20(g_sSamp) + 75: 74 SampledImage 72 73 + 79: 29(ivec4) ImageSampleImplicitLod 75 77 Bias ConstOffset 78 25 + Store 68(txval21) 79 + 84: 81 Load 83(g_tTex2du4) + 85: 18 Load 20(g_sSamp) + 87: 86 SampledImage 84 85 + 92: 42(ivec4) ImageSampleImplicitLod 87 89 Bias ConstOffset 91 25 + Store 80(txval22) 92 + 97: 94 Load 96(g_tTex3df4) + 98: 18 Load 20(g_sSamp) + 100: 99 SampledImage 97 98 + 105: 7(fvec4) ImageSampleImplicitLod 100 102 Bias ConstOffset 104 25 + Store 93(txval30) 105 + 110: 107 Load 109(g_tTex3di4) + 111: 18 Load 20(g_sSamp) + 113: 112 SampledImage 110 111 + 116: 29(ivec4) ImageSampleImplicitLod 113 114 Bias ConstOffset 115 25 + Store 106(txval31) 116 + 121: 118 Load 120(g_tTex3du4) + 122: 18 Load 20(g_sSamp) + 124: 123 SampledImage 121 122 + 130: 42(ivec4) ImageSampleImplicitLod 124 128 Bias ConstOffset 129 25 + Store 117(txval32) 130 + 135: 12(ptr) AccessChain 132(psout) 65 + Store 135 134 + 137: 136(ptr) AccessChain 132(psout) 27 + Store 137 133 + 138:8(PS_OUTPUT) Load 132(psout) + ReturnValue 138 + FunctionEnd 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 new file mode 100644 index 0000000..0aab048 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out @@ -0,0 +1,472 @@ +hlsl.samplebias.offsetarray.dx10.frag +Shader version: 450 +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}) +0:20 Function Parameters: +0:? Sequence +0:23 Sequence +0:23 move second child to first child ( temp 4-component vector of float) +0:23 'txval10' ( temp 4-component vector of float) +0:23 textureOffset ( temp 4-component vector of float) +0:23 Construct combined texture-sampler ( temp sampler1DArray) +0:23 'g_tTex1df4' (layout( binding=0) uniform texture1DArray) +0:23 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:23 Constant: +0:23 0.500000 +0:23 Constant: +0:23 0 (const int) +0:24 Sequence +0:24 move second child to first child ( temp 4-component vector of int) +0:24 'txval11' ( temp 4-component vector of int) +0:24 textureOffset ( temp 4-component vector of int) +0:24 Construct combined texture-sampler ( temp isampler1DArray) +0:24 'g_tTex1di4' ( uniform itexture1DArray) +0:24 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.200000 +0:? 0.300000 +0:24 Constant: +0:24 0.500000 +0:24 Constant: +0:24 1 (const int) +0:25 Sequence +0:25 move second child to first child ( temp 4-component vector of uint) +0:25 'txval12' ( temp 4-component vector of uint) +0:25 textureOffset ( temp 4-component vector of uint) +0:25 Construct combined texture-sampler ( temp usampler1DArray) +0:25 'g_tTex1du4' ( uniform utexture1DArray) +0:25 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:25 Constant: +0:25 0.500000 +0:25 Constant: +0:25 2 (const int) +0:27 Sequence +0:27 move second child to first child ( temp 4-component vector of float) +0:27 'txval20' ( temp 4-component vector of float) +0:27 textureOffset ( temp 4-component vector of float) +0:27 Construct combined texture-sampler ( temp sampler2DArray) +0:27 'g_tTex2df4' ( uniform texture2DArray) +0:27 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:27 Constant: +0:27 0.500000 +0:? Constant: +0:? 0 (const int) +0:? 0 (const int) +0:28 Sequence +0:28 move second child to first child ( temp 4-component vector of int) +0:28 'txval21' ( temp 4-component vector of int) +0:28 textureOffset ( temp 4-component vector of int) +0:28 Construct combined texture-sampler ( temp isampler2DArray) +0:28 'g_tTex2di4' ( uniform itexture2DArray) +0:28 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:? 0.500000 +0:28 Constant: +0:28 0.500000 +0:? Constant: +0:? 0 (const int) +0:? 0 (const int) +0:29 Sequence +0:29 move second child to first child ( temp 4-component vector of uint) +0:29 'txval22' ( temp 4-component vector of uint) +0:29 textureOffset ( temp 4-component vector of uint) +0:29 Construct combined texture-sampler ( temp usampler2DArray) +0:29 'g_tTex2du4' ( uniform utexture2DArray) +0:29 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:? 0.700000 +0:29 Constant: +0:29 0.500000 +0:? Constant: +0:? 0 (const int) +0:? 1 (const int) +0:33 move second child to first child ( temp 4-component vector of float) +0:33 Color: direct index for structure ( temp 4-component vector of float) +0:33 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:33 Constant: +0:33 0 (const int) +0:33 Constant: +0:33 1.000000 +0:33 1.000000 +0:33 1.000000 +0:33 1.000000 +0:34 move second child to first child ( temp float) +0:34 Depth: direct index for structure ( temp float) +0:34 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:34 Constant: +0:34 1 (const int) +0:34 Constant: +0:34 1.000000 +0:36 Branch: Return with expression +0:36 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:20 Function Definition: main( ( temp void) +0:20 Function Parameters: +0:? Sequence +0:20 Sequence +0:20 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:20 1 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1DArray) +0:? 'g_tTex1df4' (layout( binding=0) uniform texture1DArray) +0:? 'g_tTex1di4' ( uniform itexture1DArray) +0:? 'g_tTex1du4' ( uniform utexture1DArray) +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) + + +Linked fragment stage: + + +Shader version: 450 +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}) +0:20 Function Parameters: +0:? Sequence +0:23 Sequence +0:23 move second child to first child ( temp 4-component vector of float) +0:23 'txval10' ( temp 4-component vector of float) +0:23 textureOffset ( temp 4-component vector of float) +0:23 Construct combined texture-sampler ( temp sampler1DArray) +0:23 'g_tTex1df4' (layout( binding=0) uniform texture1DArray) +0:23 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:23 Constant: +0:23 0.500000 +0:23 Constant: +0:23 0 (const int) +0:24 Sequence +0:24 move second child to first child ( temp 4-component vector of int) +0:24 'txval11' ( temp 4-component vector of int) +0:24 textureOffset ( temp 4-component vector of int) +0:24 Construct combined texture-sampler ( temp isampler1DArray) +0:24 'g_tTex1di4' ( uniform itexture1DArray) +0:24 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.200000 +0:? 0.300000 +0:24 Constant: +0:24 0.500000 +0:24 Constant: +0:24 1 (const int) +0:25 Sequence +0:25 move second child to first child ( temp 4-component vector of uint) +0:25 'txval12' ( temp 4-component vector of uint) +0:25 textureOffset ( temp 4-component vector of uint) +0:25 Construct combined texture-sampler ( temp usampler1DArray) +0:25 'g_tTex1du4' ( uniform utexture1DArray) +0:25 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:25 Constant: +0:25 0.500000 +0:25 Constant: +0:25 2 (const int) +0:27 Sequence +0:27 move second child to first child ( temp 4-component vector of float) +0:27 'txval20' ( temp 4-component vector of float) +0:27 textureOffset ( temp 4-component vector of float) +0:27 Construct combined texture-sampler ( temp sampler2DArray) +0:27 'g_tTex2df4' ( uniform texture2DArray) +0:27 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:27 Constant: +0:27 0.500000 +0:? Constant: +0:? 0 (const int) +0:? 0 (const int) +0:28 Sequence +0:28 move second child to first child ( temp 4-component vector of int) +0:28 'txval21' ( temp 4-component vector of int) +0:28 textureOffset ( temp 4-component vector of int) +0:28 Construct combined texture-sampler ( temp isampler2DArray) +0:28 'g_tTex2di4' ( uniform itexture2DArray) +0:28 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:? 0.500000 +0:28 Constant: +0:28 0.500000 +0:? Constant: +0:? 0 (const int) +0:? 0 (const int) +0:29 Sequence +0:29 move second child to first child ( temp 4-component vector of uint) +0:29 'txval22' ( temp 4-component vector of uint) +0:29 textureOffset ( temp 4-component vector of uint) +0:29 Construct combined texture-sampler ( temp usampler2DArray) +0:29 'g_tTex2du4' ( uniform utexture2DArray) +0:29 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:? 0.700000 +0:29 Constant: +0:29 0.500000 +0:? Constant: +0:? 0 (const int) +0:? 1 (const int) +0:33 move second child to first child ( temp 4-component vector of float) +0:33 Color: direct index for structure ( temp 4-component vector of float) +0:33 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:33 Constant: +0:33 0 (const int) +0:33 Constant: +0:33 1.000000 +0:33 1.000000 +0:33 1.000000 +0:33 1.000000 +0:34 move second child to first child ( temp float) +0:34 Depth: direct index for structure ( temp float) +0:34 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:34 Constant: +0:34 1 (const int) +0:34 Constant: +0:34 1.000000 +0:36 Branch: Return with expression +0:36 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:20 Function Definition: main( ( temp void) +0:20 Function Parameters: +0:? Sequence +0:20 Sequence +0:20 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:20 1 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1DArray) +0:? 'g_tTex1df4' (layout( binding=0) uniform texture1DArray) +0:? 'g_tTex1di4' ( uniform itexture1DArray) +0:? 'g_tTex1du4' ( uniform utexture1DArray) +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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 118 + + Capability Shader + Capability Sampled1D + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 110 114 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + MemberName 8(PS_OUTPUT) 1 "Depth" + Name 10 "@main(" + Name 13 "txval10" + Name 16 "g_tTex1df4" + Name 20 "g_sSamp" + Name 34 "txval11" + Name 37 "g_tTex1di4" + Name 49 "txval12" + Name 52 "g_tTex1du4" + Name 61 "txval20" + Name 64 "g_tTex2df4" + Name 74 "txval21" + Name 77 "g_tTex2di4" + Name 84 "txval22" + Name 87 "g_tTex2du4" + Name 98 "psout" + Name 107 "flattenTemp" + Name 110 "Color" + Name 114 "Depth" + Name 117 "g_tTex1df4a" + 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 52(g_tTex1du4) DescriptorSet 0 + 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 117(g_tTex1df4a) DescriptorSet 0 + Decorate 117(g_tTex1df4a) Binding 1 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8(PS_OUTPUT): TypeStruct 7(fvec4) 6(float) + 9: TypeFunction 8(PS_OUTPUT) + 12: TypePointer Function 7(fvec4) + 14: TypeImage 6(float) 1D array 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: 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 1056964608 + 29: TypeInt 32 1 + 30: 29(int) Constant 0 + 32: TypeVector 29(int) 4 + 33: TypePointer Function 32(ivec4) + 35: TypeImage 29(int) 1D array sampled format:Unknown + 36: TypePointer UniformConstant 35 + 37(g_tTex1di4): 36(ptr) Variable UniformConstant + 40: TypeSampledImage 35 + 42: 6(float) Constant 1050253722 + 43: 24(fvec2) ConstantComposite 26 42 + 44: 29(int) Constant 1 + 46: TypeInt 32 0 + 47: TypeVector 46(int) 4 + 48: TypePointer Function 47(ivec4) + 50: TypeImage 46(int) 1D array sampled format:Unknown + 51: TypePointer UniformConstant 50 + 52(g_tTex1du4): 51(ptr) Variable UniformConstant + 55: TypeSampledImage 50 + 57: 6(float) Constant 1053609165 + 58: 24(fvec2) ConstantComposite 42 57 + 59: 29(int) Constant 2 + 62: TypeImage 6(float) 2D array sampled format:Unknown + 63: TypePointer UniformConstant 62 + 64(g_tTex2df4): 63(ptr) Variable UniformConstant + 67: TypeSampledImage 62 + 69: TypeVector 6(float) 3 + 70: 69(fvec3) ConstantComposite 25 26 42 + 71: TypeVector 29(int) 2 + 72: 71(ivec2) ConstantComposite 30 30 + 75: TypeImage 29(int) 2D array sampled format:Unknown + 76: TypePointer UniformConstant 75 + 77(g_tTex2di4): 76(ptr) Variable UniformConstant + 80: TypeSampledImage 75 + 82: 69(fvec3) ConstantComposite 42 57 28 + 85: TypeImage 46(int) 2D array sampled format:Unknown + 86: TypePointer UniformConstant 85 + 87(g_tTex2du4): 86(ptr) Variable UniformConstant + 90: TypeSampledImage 85 + 92: 6(float) Constant 1058642330 + 93: 6(float) Constant 1060320051 + 94: 69(fvec3) ConstantComposite 28 92 93 + 95: 71(ivec2) ConstantComposite 30 44 + 97: TypePointer Function 8(PS_OUTPUT) + 99: 6(float) Constant 1065353216 + 100: 7(fvec4) ConstantComposite 99 99 99 99 + 102: TypePointer Function 6(float) + 109: TypePointer Output 7(fvec4) + 110(Color): 109(ptr) Variable Output + 113: TypePointer Output 6(float) + 114(Depth): 113(ptr) Variable Output +117(g_tTex1df4a): 15(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label +107(flattenTemp): 97(ptr) Variable Function + 108:8(PS_OUTPUT) FunctionCall 10(@main() + Store 107(flattenTemp) 108 + 111: 12(ptr) AccessChain 107(flattenTemp) 30 + 112: 7(fvec4) Load 111 + Store 110(Color) 112 + 115: 102(ptr) AccessChain 107(flattenTemp) 44 + 116: 6(float) Load 115 + Store 114(Depth) 116 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 13(txval10): 12(ptr) Variable Function + 34(txval11): 33(ptr) Variable Function + 49(txval12): 48(ptr) Variable Function + 61(txval20): 12(ptr) Variable Function + 74(txval21): 33(ptr) Variable Function + 84(txval22): 48(ptr) Variable Function + 98(psout): 97(ptr) Variable Function + 17: 14 Load 16(g_tTex1df4) + 21: 18 Load 20(g_sSamp) + 23: 22 SampledImage 17 21 + 31: 7(fvec4) ImageSampleImplicitLod 23 27 Bias ConstOffset 30 28 + Store 13(txval10) 31 + 38: 35 Load 37(g_tTex1di4) + 39: 18 Load 20(g_sSamp) + 41: 40 SampledImage 38 39 + 45: 32(ivec4) ImageSampleImplicitLod 41 43 Bias ConstOffset 44 28 + Store 34(txval11) 45 + 53: 50 Load 52(g_tTex1du4) + 54: 18 Load 20(g_sSamp) + 56: 55 SampledImage 53 54 + 60: 47(ivec4) ImageSampleImplicitLod 56 58 Bias ConstOffset 59 28 + Store 49(txval12) 60 + 65: 62 Load 64(g_tTex2df4) + 66: 18 Load 20(g_sSamp) + 68: 67 SampledImage 65 66 + 73: 7(fvec4) ImageSampleImplicitLod 68 70 Bias ConstOffset 72 28 + Store 61(txval20) 73 + 78: 75 Load 77(g_tTex2di4) + 79: 18 Load 20(g_sSamp) + 81: 80 SampledImage 78 79 + 83: 32(ivec4) ImageSampleImplicitLod 81 82 Bias ConstOffset 72 28 + Store 74(txval21) 83 + 88: 85 Load 87(g_tTex2du4) + 89: 18 Load 20(g_sSamp) + 91: 90 SampledImage 88 89 + 96: 47(ivec4) ImageSampleImplicitLod 91 94 Bias ConstOffset 95 28 + Store 84(txval22) 96 + 101: 12(ptr) AccessChain 98(psout) 30 + Store 101 100 + 103: 102(ptr) AccessChain 98(psout) 44 + Store 103 99 + 104:8(PS_OUTPUT) Load 98(psout) + ReturnValue 104 + FunctionEnd 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 new file mode 100644 index 0000000..6f26c98 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out @@ -0,0 +1,706 @@ +hlsl.samplecmp.array.dx10.frag +Shader version: 450 +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}) +0:38 Function Parameters: +0:? Sequence +0:42 Sequence +0:42 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:42 Construct vec3 ( temp 3-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:42 Constant: +0:42 0.750000 +0:43 Sequence +0:43 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:43 Construct vec3 ( temp 3-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:43 Constant: +0:43 0.750000 +0:44 Sequence +0:44 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:44 Construct vec3 ( temp 3-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:44 Constant: +0:44 0.750000 +0:47 Sequence +0:47 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:47 Construct vec4 ( temp 4-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:47 Constant: +0:47 0.750000 +0:48 Sequence +0:48 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:48 Construct vec4 ( temp 4-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:48 Constant: +0:48 0.750000 +0:49 Sequence +0:49 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:49 Construct vec4 ( temp 4-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:49 Constant: +0:49 0.750000 +0:52 Sequence +0:52 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:52 Construct vec4 ( temp 4-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? 0.400000 +0:52 Constant: +0:52 0.750000 +0:53 Sequence +0:53 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:53 Construct vec4 ( temp 4-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? 0.400000 +0:53 Constant: +0:53 0.750000 +0:54 Sequence +0:54 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:54 Construct vec4 ( temp 4-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? 0.400000 +0:54 Constant: +0:54 0.750000 +0:56 move second child to first child ( temp 4-component vector of float) +0:56 Color: direct index for structure ( temp 4-component vector of float) +0:56 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:56 Constant: +0:56 0 (const int) +0:56 Constant: +0:56 1.000000 +0:56 1.000000 +0:56 1.000000 +0:56 1.000000 +0:57 move second child to first child ( temp float) +0:57 Depth: direct index for structure ( temp float) +0:57 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:57 Constant: +0:57 1 (const int) +0:57 Constant: +0:57 1.000000 +0:59 Branch: Return with expression +0:59 '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 +0:38 Sequence +0:38 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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_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_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) + + +Linked fragment stage: + + +Shader version: 450 +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}) +0:38 Function Parameters: +0:? Sequence +0:42 Sequence +0:42 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:42 Construct vec3 ( temp 3-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:42 Constant: +0:42 0.750000 +0:43 Sequence +0:43 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:43 Construct vec3 ( temp 3-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:43 Constant: +0:43 0.750000 +0:44 Sequence +0:44 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:44 Construct vec3 ( temp 3-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:44 Constant: +0:44 0.750000 +0:47 Sequence +0:47 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:47 Construct vec4 ( temp 4-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:47 Constant: +0:47 0.750000 +0:48 Sequence +0:48 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:48 Construct vec4 ( temp 4-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:48 Constant: +0:48 0.750000 +0:49 Sequence +0:49 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:49 Construct vec4 ( temp 4-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:49 Constant: +0:49 0.750000 +0:52 Sequence +0:52 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:52 Construct vec4 ( temp 4-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? 0.400000 +0:52 Constant: +0:52 0.750000 +0:53 Sequence +0:53 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:53 Construct vec4 ( temp 4-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? 0.400000 +0:53 Constant: +0:53 0.750000 +0:54 Sequence +0:54 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:54 Construct vec4 ( temp 4-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? 0.400000 +0:54 Constant: +0:54 0.750000 +0:56 move second child to first child ( temp 4-component vector of float) +0:56 Color: direct index for structure ( temp 4-component vector of float) +0:56 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:56 Constant: +0:56 0 (const int) +0:56 Constant: +0:56 1.000000 +0:56 1.000000 +0:56 1.000000 +0:56 1.000000 +0:57 move second child to first child ( temp float) +0:57 Depth: direct index for structure ( temp float) +0:57 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:57 Constant: +0:57 1 (const int) +0:57 Constant: +0:57 1.000000 +0:59 Branch: Return with expression +0:59 '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 +0:38 Sequence +0:38 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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_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_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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 218 + + Capability Shader + Capability Sampled1D + Capability SampledCubeArray + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 175 179 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + MemberName 8(PS_OUTPUT) 1 "Depth" + Name 10 "@main(" + 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" + 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 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 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 + 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 + 183: TypePointer UniformConstant 182 + 184(g_tTex1df4): 183(ptr) Variable UniformConstant + 185: TypeImage 37(int) 1D sampled format:Unknown + 186: TypePointer UniformConstant 185 + 187(g_tTex1di4): 186(ptr) Variable UniformConstant + 188: TypeImage 52(int) 1D sampled format:Unknown + 189: TypePointer UniformConstant 188 + 190(g_tTex1du4): 189(ptr) Variable UniformConstant + 191: TypeImage 6(float) 2D sampled format:Unknown + 192: TypePointer UniformConstant 191 + 193(g_tTex2df4): 192(ptr) Variable UniformConstant + 194: TypeImage 37(int) 2D sampled format:Unknown + 195: TypePointer UniformConstant 194 + 196(g_tTex2di4): 195(ptr) Variable UniformConstant + 197: TypeImage 52(int) 2D sampled format:Unknown + 198: TypePointer UniformConstant 197 + 199(g_tTex2du4): 198(ptr) Variable UniformConstant + 200: TypeImage 6(float) 3D sampled format:Unknown + 201: TypePointer UniformConstant 200 + 202(g_tTex3df4): 201(ptr) Variable UniformConstant + 203: TypeImage 37(int) 3D sampled format:Unknown + 204: TypePointer UniformConstant 203 + 205(g_tTex3di4): 204(ptr) Variable UniformConstant + 206: TypeImage 52(int) 3D 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 + 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 + 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 + 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 + 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 new file mode 100644 index 0000000..df1004e --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out @@ -0,0 +1,677 @@ +hlsl.samplecmp.basic.dx10.frag +Shader version: 450 +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}) +0:38 Function Parameters: +0:? Sequence +0:42 Sequence +0:42 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:42 Construct vec2 ( temp 2-component vector of float) +0:42 Constant: +0:42 0.100000 +0:42 Constant: +0:42 0.750000 +0:43 Sequence +0:43 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:43 Construct vec2 ( temp 2-component vector of float) +0:43 Constant: +0:43 0.100000 +0:43 Constant: +0:43 0.750000 +0:44 Sequence +0:44 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:44 Construct vec2 ( temp 2-component vector of float) +0:44 Constant: +0:44 0.100000 +0:44 Constant: +0:44 0.750000 +0:47 Sequence +0:47 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:47 Construct vec3 ( temp 3-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:47 Constant: +0:47 0.750000 +0:48 Sequence +0:48 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:48 Construct vec3 ( temp 3-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:48 Constant: +0:48 0.750000 +0:49 Sequence +0:49 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:49 Construct vec3 ( temp 3-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:49 Constant: +0:49 0.750000 +0:53 Sequence +0:53 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:53 Construct vec4 ( temp 4-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:53 Constant: +0:53 0.750000 +0:54 Sequence +0:54 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:54 Construct vec4 ( temp 4-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:54 Constant: +0:54 0.750000 +0:55 Sequence +0:55 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:55 Construct vec4 ( temp 4-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:55 Constant: +0:55 0.750000 +0:57 move second child to first child ( temp 4-component vector of float) +0:57 Color: direct index for structure ( temp 4-component vector of float) +0:57 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:57 Constant: +0:57 0 (const int) +0:57 Constant: +0:57 1.000000 +0:57 1.000000 +0:57 1.000000 +0:57 1.000000 +0:58 move second child to first child ( temp float) +0:58 Depth: direct index for structure ( temp float) +0:58 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:58 Constant: +0:58 1 (const int) +0:58 Constant: +0:58 1.000000 +0:60 Branch: Return with expression +0:60 '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 +0:38 Sequence +0:38 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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_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_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) + + +Linked fragment stage: + + +Shader version: 450 +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}) +0:38 Function Parameters: +0:? Sequence +0:42 Sequence +0:42 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:42 Construct vec2 ( temp 2-component vector of float) +0:42 Constant: +0:42 0.100000 +0:42 Constant: +0:42 0.750000 +0:43 Sequence +0:43 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:43 Construct vec2 ( temp 2-component vector of float) +0:43 Constant: +0:43 0.100000 +0:43 Constant: +0:43 0.750000 +0:44 Sequence +0:44 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:44 Construct vec2 ( temp 2-component vector of float) +0:44 Constant: +0:44 0.100000 +0:44 Constant: +0:44 0.750000 +0:47 Sequence +0:47 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:47 Construct vec3 ( temp 3-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:47 Constant: +0:47 0.750000 +0:48 Sequence +0:48 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:48 Construct vec3 ( temp 3-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:48 Constant: +0:48 0.750000 +0:49 Sequence +0:49 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:49 Construct vec3 ( temp 3-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:49 Constant: +0:49 0.750000 +0:53 Sequence +0:53 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:53 Construct vec4 ( temp 4-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:53 Constant: +0:53 0.750000 +0:54 Sequence +0:54 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:54 Construct vec4 ( temp 4-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:54 Constant: +0:54 0.750000 +0:55 Sequence +0:55 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:55 Construct vec4 ( temp 4-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:55 Constant: +0:55 0.750000 +0:57 move second child to first child ( temp 4-component vector of float) +0:57 Color: direct index for structure ( temp 4-component vector of float) +0:57 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:57 Constant: +0:57 0 (const int) +0:57 Constant: +0:57 1.000000 +0:57 1.000000 +0:57 1.000000 +0:57 1.000000 +0:58 move second child to first child ( temp float) +0:58 Depth: direct index for structure ( temp float) +0:58 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:58 Constant: +0:58 1 (const int) +0:58 Constant: +0:58 1.000000 +0:60 Branch: Return with expression +0:60 '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 +0:38 Sequence +0:38 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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_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_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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 207 + + Capability Shader + Capability Sampled1D + Capability SampledCubeArray + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 164 168 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + MemberName 8(PS_OUTPUT) 1 "Depth" + Name 10 "@main(" + 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" + 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 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 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 + 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 + 172: TypePointer UniformConstant 171 + 173(g_tTex3df4): 172(ptr) Variable UniformConstant + 174: TypeImage 32(int) 3D sampled format:Unknown + 175: TypePointer UniformConstant 174 + 176(g_tTex3di4): 175(ptr) Variable UniformConstant + 177: TypeImage 45(int) 3D sampled format:Unknown + 178: TypePointer UniformConstant 177 + 179(g_tTex3du4): 178(ptr) Variable UniformConstant + 180: TypeImage 6(float) 1D array sampled format:Unknown + 181: TypePointer UniformConstant 180 +182(g_tTex1df4a): 181(ptr) Variable UniformConstant + 183: TypeImage 32(int) 1D array sampled format:Unknown + 184: TypePointer UniformConstant 183 +185(g_tTex1di4a): 184(ptr) Variable UniformConstant + 186: TypeImage 45(int) 1D array sampled format:Unknown + 187: TypePointer UniformConstant 186 +188(g_tTex1du4a): 187(ptr) Variable UniformConstant + 189: TypeImage 6(float) 2D array sampled format:Unknown + 190: TypePointer UniformConstant 189 +191(g_tTex2df4a): 190(ptr) Variable UniformConstant + 192: TypeImage 32(int) 2D array sampled format:Unknown + 193: TypePointer UniformConstant 192 +194(g_tTex2di4a): 193(ptr) Variable UniformConstant + 195: TypeImage 45(int) 2D 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 + 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 + 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 + 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 + FunctionEnd 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 new file mode 100644 index 0000000..a6193fd --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out @@ -0,0 +1,583 @@ +hlsl.samplecmp.offset.dx10.frag +Shader version: 450 +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}) +0:38 Function Parameters: +0:? Sequence +0:42 Sequence +0:42 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:42 Construct vec2 ( temp 2-component vector of float) +0:42 Constant: +0:42 0.100000 +0:42 Constant: +0:42 0.750000 +0:42 Constant: +0:42 2 (const int) +0:43 Sequence +0:43 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:43 Construct vec2 ( temp 2-component vector of float) +0:43 Constant: +0:43 0.100000 +0:43 Constant: +0:43 0.750000 +0:43 Constant: +0:43 2 (const int) +0:44 Sequence +0:44 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:44 Construct vec2 ( temp 2-component vector of float) +0:44 Constant: +0:44 0.100000 +0:44 Constant: +0:44 0.750000 +0:44 Constant: +0:44 2 (const int) +0:47 Sequence +0:47 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:47 Construct vec3 ( temp 3-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:47 Constant: +0:47 0.750000 +0:? Constant: +0:? 2 (const int) +0:? 3 (const int) +0:48 Sequence +0:48 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:48 Construct vec3 ( temp 3-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:48 Constant: +0:48 0.750000 +0:? Constant: +0:? 2 (const int) +0:? 3 (const int) +0:49 Sequence +0:49 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:49 Construct vec3 ( temp 3-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:49 Constant: +0:49 0.750000 +0:? Constant: +0:? 2 (const int) +0:? 3 (const int) +0:62 move second child to first child ( temp 4-component vector of float) +0:62 Color: direct index for structure ( temp 4-component vector of float) +0:62 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:62 Constant: +0:62 0 (const int) +0:62 Constant: +0:62 1.000000 +0:62 1.000000 +0:62 1.000000 +0:62 1.000000 +0:63 move second child to first child ( temp float) +0:63 Depth: direct index for structure ( temp float) +0:63 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:63 Constant: +0:63 1 (const int) +0:63 Constant: +0:63 1.000000 +0:65 Branch: Return with expression +0:65 '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 +0:38 Sequence +0:38 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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_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_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) + + +Linked fragment stage: + + +Shader version: 450 +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}) +0:38 Function Parameters: +0:? Sequence +0:42 Sequence +0:42 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:42 Construct vec2 ( temp 2-component vector of float) +0:42 Constant: +0:42 0.100000 +0:42 Constant: +0:42 0.750000 +0:42 Constant: +0:42 2 (const int) +0:43 Sequence +0:43 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:43 Construct vec2 ( temp 2-component vector of float) +0:43 Constant: +0:43 0.100000 +0:43 Constant: +0:43 0.750000 +0:43 Constant: +0:43 2 (const int) +0:44 Sequence +0:44 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:44 Construct vec2 ( temp 2-component vector of float) +0:44 Constant: +0:44 0.100000 +0:44 Constant: +0:44 0.750000 +0:44 Constant: +0:44 2 (const int) +0:47 Sequence +0:47 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:47 Construct vec3 ( temp 3-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:47 Constant: +0:47 0.750000 +0:? Constant: +0:? 2 (const int) +0:? 3 (const int) +0:48 Sequence +0:48 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:48 Construct vec3 ( temp 3-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:48 Constant: +0:48 0.750000 +0:? Constant: +0:? 2 (const int) +0:? 3 (const int) +0:49 Sequence +0:49 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:49 Construct vec3 ( temp 3-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:49 Constant: +0:49 0.750000 +0:? Constant: +0:? 2 (const int) +0:? 3 (const int) +0:62 move second child to first child ( temp 4-component vector of float) +0:62 Color: direct index for structure ( temp 4-component vector of float) +0:62 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:62 Constant: +0:62 0 (const int) +0:62 Constant: +0:62 1.000000 +0:62 1.000000 +0:62 1.000000 +0:62 1.000000 +0:63 move second child to first child ( temp float) +0:63 Depth: direct index for structure ( temp float) +0:63 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:63 Constant: +0:63 1 (const int) +0:63 Constant: +0:63 1.000000 +0:65 Branch: Return with expression +0:65 '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 +0:38 Sequence +0:38 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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_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_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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 173 + + Capability Shader + Capability Sampled1D + Capability SampledCubeArray + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 121 125 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + MemberName 8(PS_OUTPUT) 1 "Depth" + Name 10 "@main(" + 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" + 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 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 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 + 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 + 129: TypePointer UniformConstant 128 + 130(g_tTex3df4): 129(ptr) Variable UniformConstant + 131: TypeImage 29(int) 3D sampled format:Unknown + 132: TypePointer UniformConstant 131 + 133(g_tTex3di4): 132(ptr) Variable UniformConstant + 134: TypeImage 46(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 29(int) Cube sampled format:Unknown + 141: TypePointer UniformConstant 140 + 142(g_tTexcdi4): 141(ptr) Variable UniformConstant + 143: TypeImage 46(int) Cube sampled format:Unknown + 144: TypePointer UniformConstant 143 + 145(g_tTexcdu4): 144(ptr) Variable UniformConstant + 146: TypeImage 6(float) 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 + 150: TypePointer UniformConstant 149 +151(g_tTex1di4a): 150(ptr) Variable UniformConstant + 152: TypeImage 46(int) 1D array sampled format:Unknown + 153: TypePointer UniformConstant 152 +154(g_tTex1du4a): 153(ptr) Variable UniformConstant + 155: TypeImage 6(float) 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 + 159: TypePointer UniformConstant 158 +160(g_tTex2di4a): 159(ptr) Variable UniformConstant + 161: TypeImage 46(int) 2D array sampled format:Unknown + 162: TypePointer UniformConstant 161 +163(g_tTex2du4a): 162(ptr) Variable UniformConstant + 164: TypeImage 6(float) 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 + 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 + 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 + 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 + 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 new file mode 100644 index 0000000..2fdce67 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out @@ -0,0 +1,606 @@ +hlsl.samplecmp.offsetarray.dx10.frag +Shader version: 450 +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}) +0:38 Function Parameters: +0:? Sequence +0:42 Sequence +0:42 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:42 Construct vec3 ( temp 3-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:42 Constant: +0:42 0.750000 +0:42 Constant: +0:42 2 (const int) +0:43 Sequence +0:43 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:43 Construct vec3 ( temp 3-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:43 Constant: +0:43 0.750000 +0:43 Constant: +0:43 2 (const int) +0:44 Sequence +0:44 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:44 Construct vec3 ( temp 3-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:44 Constant: +0:44 0.750000 +0:44 Constant: +0:44 2 (const int) +0:47 Sequence +0:47 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:47 Construct vec4 ( temp 4-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:47 Constant: +0:47 0.750000 +0:? Constant: +0:? 2 (const int) +0:? 3 (const int) +0:48 Sequence +0:48 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:48 Construct vec4 ( temp 4-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:48 Constant: +0:48 0.750000 +0:? Constant: +0:? 2 (const int) +0:? 3 (const int) +0:49 Sequence +0:49 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:49 Construct vec4 ( temp 4-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:49 Constant: +0:49 0.750000 +0:? Constant: +0:? 2 (const int) +0:? 3 (const int) +0:63 move second child to first child ( temp 4-component vector of float) +0:63 Color: direct index for structure ( temp 4-component vector of float) +0:63 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:63 Constant: +0:63 0 (const int) +0:63 Constant: +0:63 1.000000 +0:63 1.000000 +0:63 1.000000 +0:63 1.000000 +0:64 move second child to first child ( temp float) +0:64 Depth: direct index for structure ( temp float) +0:64 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:64 Constant: +0:64 1 (const int) +0:64 Constant: +0:64 1.000000 +0:66 Branch: Return with expression +0:66 '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 +0:38 Sequence +0:38 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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_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_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) + + +Linked fragment stage: + + +Shader version: 450 +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}) +0:38 Function Parameters: +0:? Sequence +0:42 Sequence +0:42 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:42 Construct vec3 ( temp 3-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:42 Constant: +0:42 0.750000 +0:42 Constant: +0:42 2 (const int) +0:43 Sequence +0:43 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:43 Construct vec3 ( temp 3-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:43 Constant: +0:43 0.750000 +0:43 Constant: +0:43 2 (const int) +0:44 Sequence +0:44 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:44 Construct vec3 ( temp 3-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:44 Constant: +0:44 0.750000 +0:44 Constant: +0:44 2 (const int) +0:47 Sequence +0:47 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:47 Construct vec4 ( temp 4-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:47 Constant: +0:47 0.750000 +0:? Constant: +0:? 2 (const int) +0:? 3 (const int) +0:48 Sequence +0:48 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:48 Construct vec4 ( temp 4-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:48 Constant: +0:48 0.750000 +0:? Constant: +0:? 2 (const int) +0:? 3 (const int) +0:49 Sequence +0:49 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:49 Construct vec4 ( temp 4-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:49 Constant: +0:49 0.750000 +0:? Constant: +0:? 2 (const int) +0:? 3 (const int) +0:63 move second child to first child ( temp 4-component vector of float) +0:63 Color: direct index for structure ( temp 4-component vector of float) +0:63 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:63 Constant: +0:63 0 (const int) +0:63 Constant: +0:63 1.000000 +0:63 1.000000 +0:63 1.000000 +0:63 1.000000 +0:64 move second child to first child ( temp float) +0:64 Depth: direct index for structure ( temp float) +0:64 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:64 Constant: +0:64 1 (const int) +0:64 Constant: +0:64 1.000000 +0:66 Branch: Return with expression +0:66 '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 +0:38 Sequence +0:38 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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_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_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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 184 + + Capability Shader + Capability Sampled1D + Capability SampledCubeArray + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 132 136 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + MemberName 8(PS_OUTPUT) 1 "Depth" + Name 10 "@main(" + 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" + 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 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 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 + 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 + 140: TypePointer UniformConstant 139 + 141(g_tTex1df4): 140(ptr) Variable UniformConstant + 142: TypeImage 34(int) 1D sampled format:Unknown + 143: TypePointer UniformConstant 142 + 144(g_tTex1di4): 143(ptr) Variable UniformConstant + 145: TypeImage 53(int) 1D sampled format:Unknown + 146: TypePointer UniformConstant 145 + 147(g_tTex1du4): 146(ptr) Variable UniformConstant + 148: TypeImage 6(float) 2D sampled format:Unknown + 149: TypePointer UniformConstant 148 + 150(g_tTex2df4): 149(ptr) Variable UniformConstant + 151: TypeImage 34(int) 2D sampled format:Unknown + 152: TypePointer UniformConstant 151 + 153(g_tTex2di4): 152(ptr) Variable UniformConstant + 154: TypeImage 53(int) 2D sampled format:Unknown + 155: TypePointer UniformConstant 154 + 156(g_tTex2du4): 155(ptr) Variable UniformConstant + 157: TypeImage 6(float) 3D sampled format:Unknown + 158: TypePointer UniformConstant 157 + 159(g_tTex3df4): 158(ptr) Variable UniformConstant + 160: TypeImage 34(int) 3D sampled format:Unknown + 161: TypePointer UniformConstant 160 + 162(g_tTex3di4): 161(ptr) Variable UniformConstant + 163: TypeImage 53(int) 3D sampled format:Unknown + 164: TypePointer UniformConstant 163 + 165(g_tTex3du4): 164(ptr) Variable UniformConstant + 166: TypeImage 6(float) Cube sampled format:Unknown + 167: TypePointer UniformConstant 166 + 168(g_tTexcdf4): 167(ptr) Variable UniformConstant + 169: TypeImage 34(int) Cube sampled format:Unknown + 170: TypePointer UniformConstant 169 + 171(g_tTexcdi4): 170(ptr) Variable UniformConstant + 172: TypeImage 53(int) Cube sampled format:Unknown + 173: TypePointer UniformConstant 172 + 174(g_tTexcdu4): 173(ptr) Variable UniformConstant + 175: TypeImage 6(float) 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 + 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 + 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 + 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 + 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 new file mode 100644 index 0000000..3a3e169 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out @@ -0,0 +1,743 @@ +hlsl.samplecmplevelzero.array.dx10.frag +Shader version: 450 +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}) +0:38 Function Parameters: +0:? Sequence +0:42 Sequence +0:42 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:42 Construct vec3 ( temp 3-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:42 Constant: +0:42 0.750000 +0:42 Constant: +0:42 0.000000 +0:43 Sequence +0:43 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:43 Construct vec3 ( temp 3-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:43 Constant: +0:43 0.750000 +0:43 Constant: +0:43 0.000000 +0:44 Sequence +0:44 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:44 Construct vec3 ( temp 3-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:44 Constant: +0:44 0.750000 +0:44 Constant: +0:44 0.000000 +0:47 Sequence +0:47 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:47 Construct vec4 ( temp 4-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:47 Constant: +0:47 0.750000 +0:47 Constant: +0:47 0.000000 +0:48 Sequence +0:48 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:48 Construct vec4 ( temp 4-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:48 Constant: +0:48 0.750000 +0:48 Constant: +0:48 0.000000 +0:49 Sequence +0:49 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:49 Construct vec4 ( temp 4-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:49 Constant: +0:49 0.750000 +0:49 Constant: +0:49 0.000000 +0:52 Sequence +0:52 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:52 Construct vec4 ( temp 4-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? 0.400000 +0:52 Constant: +0:52 0.750000 +0:52 Constant: +0:52 0.000000 +0:53 Sequence +0:53 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:53 Construct vec4 ( temp 4-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? 0.400000 +0:53 Constant: +0:53 0.750000 +0:53 Constant: +0:53 0.000000 +0:54 Sequence +0:54 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:54 Construct vec4 ( temp 4-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? 0.400000 +0:54 Constant: +0:54 0.750000 +0:54 Constant: +0:54 0.000000 +0:56 move second child to first child ( temp 4-component vector of float) +0:56 Color: direct index for structure ( temp 4-component vector of float) +0:56 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:56 Constant: +0:56 0 (const int) +0:56 Constant: +0:56 1.000000 +0:56 1.000000 +0:56 1.000000 +0:56 1.000000 +0:57 move second child to first child ( temp float) +0:57 Depth: direct index for structure ( temp float) +0:57 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:57 Constant: +0:57 1 (const int) +0:57 Constant: +0:57 1.000000 +0:59 Branch: Return with expression +0:59 '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 +0:38 Sequence +0:38 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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_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_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) + + +Linked fragment stage: + + +Shader version: 450 +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}) +0:38 Function Parameters: +0:? Sequence +0:42 Sequence +0:42 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:42 Construct vec3 ( temp 3-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:42 Constant: +0:42 0.750000 +0:42 Constant: +0:42 0.000000 +0:43 Sequence +0:43 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:43 Construct vec3 ( temp 3-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:43 Constant: +0:43 0.750000 +0:43 Constant: +0:43 0.000000 +0:44 Sequence +0:44 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:44 Construct vec3 ( temp 3-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:44 Constant: +0:44 0.750000 +0:44 Constant: +0:44 0.000000 +0:47 Sequence +0:47 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:47 Construct vec4 ( temp 4-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:47 Constant: +0:47 0.750000 +0:47 Constant: +0:47 0.000000 +0:48 Sequence +0:48 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:48 Construct vec4 ( temp 4-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:48 Constant: +0:48 0.750000 +0:48 Constant: +0:48 0.000000 +0:49 Sequence +0:49 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:49 Construct vec4 ( temp 4-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:49 Constant: +0:49 0.750000 +0:49 Constant: +0:49 0.000000 +0:52 Sequence +0:52 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:52 Construct vec4 ( temp 4-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? 0.400000 +0:52 Constant: +0:52 0.750000 +0:52 Constant: +0:52 0.000000 +0:53 Sequence +0:53 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:53 Construct vec4 ( temp 4-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? 0.400000 +0:53 Constant: +0:53 0.750000 +0:53 Constant: +0:53 0.000000 +0:54 Sequence +0:54 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:54 Construct vec4 ( temp 4-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? 0.400000 +0:54 Constant: +0:54 0.750000 +0:54 Constant: +0:54 0.000000 +0:56 move second child to first child ( temp 4-component vector of float) +0:56 Color: direct index for structure ( temp 4-component vector of float) +0:56 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:56 Constant: +0:56 0 (const int) +0:56 Constant: +0:56 1.000000 +0:56 1.000000 +0:56 1.000000 +0:56 1.000000 +0:57 move second child to first child ( temp float) +0:57 Depth: direct index for structure ( temp float) +0:57 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:57 Constant: +0:57 1 (const int) +0:57 Constant: +0:57 1.000000 +0:59 Branch: Return with expression +0:59 '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 +0:38 Sequence +0:38 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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_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_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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 219 + + Capability Shader + Capability Sampled1D + Capability SampledCubeArray + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 176 180 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + MemberName 8(PS_OUTPUT) 1 "Depth" + Name 10 "@main(" + 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" + 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 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 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 + 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 + 184: TypePointer UniformConstant 183 + 185(g_tTex1df4): 184(ptr) Variable UniformConstant + 186: TypeImage 38(int) 1D sampled format:Unknown + 187: TypePointer UniformConstant 186 + 188(g_tTex1di4): 187(ptr) Variable UniformConstant + 189: TypeImage 53(int) 1D sampled format:Unknown + 190: TypePointer UniformConstant 189 + 191(g_tTex1du4): 190(ptr) Variable UniformConstant + 192: TypeImage 6(float) 2D sampled format:Unknown + 193: TypePointer UniformConstant 192 + 194(g_tTex2df4): 193(ptr) Variable UniformConstant + 195: TypeImage 38(int) 2D sampled format:Unknown + 196: TypePointer UniformConstant 195 + 197(g_tTex2di4): 196(ptr) Variable UniformConstant + 198: TypeImage 53(int) 2D sampled format:Unknown + 199: TypePointer UniformConstant 198 + 200(g_tTex2du4): 199(ptr) Variable UniformConstant + 201: TypeImage 6(float) 3D sampled format:Unknown + 202: TypePointer UniformConstant 201 + 203(g_tTex3df4): 202(ptr) Variable UniformConstant + 204: TypeImage 38(int) 3D sampled format:Unknown + 205: TypePointer UniformConstant 204 + 206(g_tTex3di4): 205(ptr) Variable UniformConstant + 207: TypeImage 53(int) 3D 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 + 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 + 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 + 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 + 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 new file mode 100644 index 0000000..1fcc001 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out @@ -0,0 +1,714 @@ +hlsl.samplecmplevelzero.basic.dx10.frag +Shader version: 450 +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}) +0:38 Function Parameters: +0:? Sequence +0:42 Sequence +0:42 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:42 Construct vec2 ( temp 2-component vector of float) +0:42 Constant: +0:42 0.100000 +0:42 Constant: +0:42 0.750000 +0:42 Constant: +0:42 0.000000 +0:43 Sequence +0:43 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:43 Construct vec2 ( temp 2-component vector of float) +0:43 Constant: +0:43 0.100000 +0:43 Constant: +0:43 0.750000 +0:43 Constant: +0:43 0.000000 +0:44 Sequence +0:44 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:44 Construct vec2 ( temp 2-component vector of float) +0:44 Constant: +0:44 0.100000 +0:44 Constant: +0:44 0.750000 +0:44 Constant: +0:44 0.000000 +0:47 Sequence +0:47 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:47 Construct vec3 ( temp 3-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:47 Constant: +0:47 0.750000 +0:47 Constant: +0:47 0.000000 +0:48 Sequence +0:48 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:48 Construct vec3 ( temp 3-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:48 Constant: +0:48 0.750000 +0:48 Constant: +0:48 0.000000 +0:49 Sequence +0:49 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:49 Construct vec3 ( temp 3-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:49 Constant: +0:49 0.750000 +0:49 Constant: +0:49 0.000000 +0:53 Sequence +0:53 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:53 Construct vec4 ( temp 4-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:53 Constant: +0:53 0.750000 +0:53 Constant: +0:53 0.000000 +0:54 Sequence +0:54 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:54 Construct vec4 ( temp 4-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:54 Constant: +0:54 0.750000 +0:54 Constant: +0:54 0.000000 +0:55 Sequence +0:55 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:55 Construct vec4 ( temp 4-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:55 Constant: +0:55 0.750000 +0:55 Constant: +0:55 0.000000 +0:57 move second child to first child ( temp 4-component vector of float) +0:57 Color: direct index for structure ( temp 4-component vector of float) +0:57 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:57 Constant: +0:57 0 (const int) +0:57 Constant: +0:57 1.000000 +0:57 1.000000 +0:57 1.000000 +0:57 1.000000 +0:58 move second child to first child ( temp float) +0:58 Depth: direct index for structure ( temp float) +0:58 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:58 Constant: +0:58 1 (const int) +0:58 Constant: +0:58 1.000000 +0:60 Branch: Return with expression +0:60 '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 +0:38 Sequence +0:38 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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_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_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) + + +Linked fragment stage: + + +Shader version: 450 +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}) +0:38 Function Parameters: +0:? Sequence +0:42 Sequence +0:42 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:42 Construct vec2 ( temp 2-component vector of float) +0:42 Constant: +0:42 0.100000 +0:42 Constant: +0:42 0.750000 +0:42 Constant: +0:42 0.000000 +0:43 Sequence +0:43 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:43 Construct vec2 ( temp 2-component vector of float) +0:43 Constant: +0:43 0.100000 +0:43 Constant: +0:43 0.750000 +0:43 Constant: +0:43 0.000000 +0:44 Sequence +0:44 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:44 Construct vec2 ( temp 2-component vector of float) +0:44 Constant: +0:44 0.100000 +0:44 Constant: +0:44 0.750000 +0:44 Constant: +0:44 0.000000 +0:47 Sequence +0:47 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:47 Construct vec3 ( temp 3-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:47 Constant: +0:47 0.750000 +0:47 Constant: +0:47 0.000000 +0:48 Sequence +0:48 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:48 Construct vec3 ( temp 3-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:48 Constant: +0:48 0.750000 +0:48 Constant: +0:48 0.000000 +0:49 Sequence +0:49 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:49 Construct vec3 ( temp 3-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:49 Constant: +0:49 0.750000 +0:49 Constant: +0:49 0.000000 +0:53 Sequence +0:53 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:53 Construct vec4 ( temp 4-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:53 Constant: +0:53 0.750000 +0:53 Constant: +0:53 0.000000 +0:54 Sequence +0:54 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:54 Construct vec4 ( temp 4-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:54 Constant: +0:54 0.750000 +0:54 Constant: +0:54 0.000000 +0:55 Sequence +0:55 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:55 Construct vec4 ( temp 4-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:55 Constant: +0:55 0.750000 +0:55 Constant: +0:55 0.000000 +0:57 move second child to first child ( temp 4-component vector of float) +0:57 Color: direct index for structure ( temp 4-component vector of float) +0:57 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:57 Constant: +0:57 0 (const int) +0:57 Constant: +0:57 1.000000 +0:57 1.000000 +0:57 1.000000 +0:57 1.000000 +0:58 move second child to first child ( temp float) +0:58 Depth: direct index for structure ( temp float) +0:58 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:58 Constant: +0:58 1 (const int) +0:58 Constant: +0:58 1.000000 +0:60 Branch: Return with expression +0:60 '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 +0:38 Sequence +0:38 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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_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_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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 208 + + Capability Shader + Capability Sampled1D + Capability SampledCubeArray + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 165 169 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + MemberName 8(PS_OUTPUT) 1 "Depth" + Name 10 "@main(" + 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" + 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 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 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 + 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 + 173: TypePointer UniformConstant 172 + 174(g_tTex3df4): 173(ptr) Variable UniformConstant + 175: TypeImage 33(int) 3D sampled format:Unknown + 176: TypePointer UniformConstant 175 + 177(g_tTex3di4): 176(ptr) Variable UniformConstant + 178: TypeImage 46(int) 3D sampled format:Unknown + 179: TypePointer UniformConstant 178 + 180(g_tTex3du4): 179(ptr) Variable UniformConstant + 181: TypeImage 6(float) 1D array sampled format:Unknown + 182: TypePointer UniformConstant 181 +183(g_tTex1df4a): 182(ptr) Variable UniformConstant + 184: TypeImage 33(int) 1D array sampled format:Unknown + 185: TypePointer UniformConstant 184 +186(g_tTex1di4a): 185(ptr) Variable UniformConstant + 187: TypeImage 46(int) 1D array sampled format:Unknown + 188: TypePointer UniformConstant 187 +189(g_tTex1du4a): 188(ptr) Variable UniformConstant + 190: TypeImage 6(float) 2D array sampled format:Unknown + 191: TypePointer UniformConstant 190 +192(g_tTex2df4a): 191(ptr) Variable UniformConstant + 193: TypeImage 33(int) 2D array sampled format:Unknown + 194: TypePointer UniformConstant 193 +195(g_tTex2di4a): 194(ptr) Variable UniformConstant + 196: TypeImage 46(int) 2D 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 + 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 + 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 + 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 + 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 new file mode 100644 index 0000000..1bd82be --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out @@ -0,0 +1,608 @@ +hlsl.samplecmplevelzero.offset.dx10.frag +Shader version: 450 +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}) +0:38 Function Parameters: +0:? Sequence +0:42 Sequence +0:42 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:42 Construct vec2 ( temp 2-component vector of float) +0:42 Constant: +0:42 0.100000 +0:42 Constant: +0:42 0.750000 +0:42 Constant: +0:42 0.000000 +0:42 Constant: +0:42 2 (const int) +0:43 Sequence +0:43 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:43 Construct vec2 ( temp 2-component vector of float) +0:43 Constant: +0:43 0.100000 +0:43 Constant: +0:43 0.750000 +0:43 Constant: +0:43 0.000000 +0:43 Constant: +0:43 2 (const int) +0:44 Sequence +0:44 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:44 Construct vec2 ( temp 2-component vector of float) +0:44 Constant: +0:44 0.100000 +0:44 Constant: +0:44 0.750000 +0:44 Constant: +0:44 0.000000 +0:44 Constant: +0:44 2 (const int) +0:47 Sequence +0:47 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:47 Construct vec3 ( temp 3-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:47 Constant: +0:47 0.750000 +0:47 Constant: +0:47 0.000000 +0:? Constant: +0:? 2 (const int) +0:? 3 (const int) +0:48 Sequence +0:48 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:48 Construct vec3 ( temp 3-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:48 Constant: +0:48 0.750000 +0:48 Constant: +0:48 0.000000 +0:? Constant: +0:? 2 (const int) +0:? 3 (const int) +0:49 Sequence +0:49 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:49 Construct vec3 ( temp 3-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:49 Constant: +0:49 0.750000 +0:49 Constant: +0:49 0.000000 +0:? Constant: +0:? 2 (const int) +0:? 3 (const int) +0:62 move second child to first child ( temp 4-component vector of float) +0:62 Color: direct index for structure ( temp 4-component vector of float) +0:62 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:62 Constant: +0:62 0 (const int) +0:62 Constant: +0:62 1.000000 +0:62 1.000000 +0:62 1.000000 +0:62 1.000000 +0:63 move second child to first child ( temp float) +0:63 Depth: direct index for structure ( temp float) +0:63 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:63 Constant: +0:63 1 (const int) +0:63 Constant: +0:63 1.000000 +0:65 Branch: Return with expression +0:65 '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 +0:38 Sequence +0:38 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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_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_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) + + +Linked fragment stage: + + +Shader version: 450 +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}) +0:38 Function Parameters: +0:? Sequence +0:42 Sequence +0:42 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:42 Construct vec2 ( temp 2-component vector of float) +0:42 Constant: +0:42 0.100000 +0:42 Constant: +0:42 0.750000 +0:42 Constant: +0:42 0.000000 +0:42 Constant: +0:42 2 (const int) +0:43 Sequence +0:43 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:43 Construct vec2 ( temp 2-component vector of float) +0:43 Constant: +0:43 0.100000 +0:43 Constant: +0:43 0.750000 +0:43 Constant: +0:43 0.000000 +0:43 Constant: +0:43 2 (const int) +0:44 Sequence +0:44 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:44 Construct vec2 ( temp 2-component vector of float) +0:44 Constant: +0:44 0.100000 +0:44 Constant: +0:44 0.750000 +0:44 Constant: +0:44 0.000000 +0:44 Constant: +0:44 2 (const int) +0:47 Sequence +0:47 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:47 Construct vec3 ( temp 3-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:47 Constant: +0:47 0.750000 +0:47 Constant: +0:47 0.000000 +0:? Constant: +0:? 2 (const int) +0:? 3 (const int) +0:48 Sequence +0:48 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:48 Construct vec3 ( temp 3-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:48 Constant: +0:48 0.750000 +0:48 Constant: +0:48 0.000000 +0:? Constant: +0:? 2 (const int) +0:? 3 (const int) +0:49 Sequence +0:49 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:49 Construct vec3 ( temp 3-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:49 Constant: +0:49 0.750000 +0:49 Constant: +0:49 0.000000 +0:? Constant: +0:? 2 (const int) +0:? 3 (const int) +0:62 move second child to first child ( temp 4-component vector of float) +0:62 Color: direct index for structure ( temp 4-component vector of float) +0:62 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:62 Constant: +0:62 0 (const int) +0:62 Constant: +0:62 1.000000 +0:62 1.000000 +0:62 1.000000 +0:62 1.000000 +0:63 move second child to first child ( temp float) +0:63 Depth: direct index for structure ( temp float) +0:63 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:63 Constant: +0:63 1 (const int) +0:63 Constant: +0:63 1.000000 +0:65 Branch: Return with expression +0:65 '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 +0:38 Sequence +0:38 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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_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_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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 174 + + Capability Shader + Capability Sampled1D + Capability SampledCubeArray + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 122 126 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + MemberName 8(PS_OUTPUT) 1 "Depth" + Name 10 "@main(" + 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" + 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 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 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 + 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 + 130: TypePointer UniformConstant 129 + 131(g_tTex3df4): 130(ptr) Variable UniformConstant + 132: TypeImage 30(int) 3D sampled format:Unknown + 133: TypePointer UniformConstant 132 + 134(g_tTex3di4): 133(ptr) Variable UniformConstant + 135: TypeImage 47(int) 3D sampled format:Unknown + 136: TypePointer UniformConstant 135 + 137(g_tTex3du4): 136(ptr) Variable UniformConstant + 138: TypeImage 6(float) Cube sampled format:Unknown + 139: TypePointer UniformConstant 138 + 140(g_tTexcdf4): 139(ptr) Variable UniformConstant + 141: TypeImage 30(int) Cube sampled format:Unknown + 142: TypePointer UniformConstant 141 + 143(g_tTexcdi4): 142(ptr) Variable UniformConstant + 144: TypeImage 47(int) Cube sampled format:Unknown + 145: TypePointer UniformConstant 144 + 146(g_tTexcdu4): 145(ptr) Variable UniformConstant + 147: TypeImage 6(float) 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 + 151: TypePointer UniformConstant 150 +152(g_tTex1di4a): 151(ptr) Variable UniformConstant + 153: TypeImage 47(int) 1D array sampled format:Unknown + 154: TypePointer UniformConstant 153 +155(g_tTex1du4a): 154(ptr) Variable UniformConstant + 156: TypeImage 6(float) 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 + 160: TypePointer UniformConstant 159 +161(g_tTex2di4a): 160(ptr) Variable UniformConstant + 162: TypeImage 47(int) 2D array sampled format:Unknown + 163: TypePointer UniformConstant 162 +164(g_tTex2du4a): 163(ptr) Variable UniformConstant + 165: TypeImage 6(float) 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 + 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 + 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 + 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 + 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 new file mode 100644 index 0000000..8a87e9b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out @@ -0,0 +1,631 @@ +hlsl.samplecmplevelzero.offsetarray.dx10.frag +Shader version: 450 +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}) +0:38 Function Parameters: +0:? Sequence +0:42 Sequence +0:42 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:42 Construct vec3 ( temp 3-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:42 Constant: +0:42 0.750000 +0:42 Constant: +0:42 0.000000 +0:42 Constant: +0:42 2 (const int) +0:43 Sequence +0:43 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:43 Construct vec3 ( temp 3-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:43 Constant: +0:43 0.750000 +0:43 Constant: +0:43 0.000000 +0:43 Constant: +0:43 2 (const int) +0:44 Sequence +0:44 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:44 Construct vec3 ( temp 3-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:44 Constant: +0:44 0.750000 +0:44 Constant: +0:44 0.000000 +0:44 Constant: +0:44 2 (const int) +0:47 Sequence +0:47 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:47 Construct vec4 ( temp 4-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:47 Constant: +0:47 0.750000 +0:47 Constant: +0:47 0.000000 +0:? Constant: +0:? 2 (const int) +0:? 3 (const int) +0:48 Sequence +0:48 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:48 Construct vec4 ( temp 4-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:48 Constant: +0:48 0.750000 +0:48 Constant: +0:48 0.000000 +0:? Constant: +0:? 2 (const int) +0:? 3 (const int) +0:49 Sequence +0:49 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:49 Construct vec4 ( temp 4-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:49 Constant: +0:49 0.750000 +0:49 Constant: +0:49 0.000000 +0:? Constant: +0:? 2 (const int) +0:? 3 (const int) +0:63 move second child to first child ( temp 4-component vector of float) +0:63 Color: direct index for structure ( temp 4-component vector of float) +0:63 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:63 Constant: +0:63 0 (const int) +0:63 Constant: +0:63 1.000000 +0:63 1.000000 +0:63 1.000000 +0:63 1.000000 +0:64 move second child to first child ( temp float) +0:64 Depth: direct index for structure ( temp float) +0:64 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:64 Constant: +0:64 1 (const int) +0:64 Constant: +0:64 1.000000 +0:66 Branch: Return with expression +0:66 '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 +0:38 Sequence +0:38 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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_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_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) + + +Linked fragment stage: + + +Shader version: 450 +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}) +0:38 Function Parameters: +0:? Sequence +0:42 Sequence +0:42 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:42 Construct vec3 ( temp 3-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:42 Constant: +0:42 0.750000 +0:42 Constant: +0:42 0.000000 +0:42 Constant: +0:42 2 (const int) +0:43 Sequence +0:43 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:43 Construct vec3 ( temp 3-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:43 Constant: +0:43 0.750000 +0:43 Constant: +0:43 0.000000 +0:43 Constant: +0:43 2 (const int) +0:44 Sequence +0:44 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:44 Construct vec3 ( temp 3-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:44 Constant: +0:44 0.750000 +0:44 Constant: +0:44 0.000000 +0:44 Constant: +0:44 2 (const int) +0:47 Sequence +0:47 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:47 Construct vec4 ( temp 4-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:47 Constant: +0:47 0.750000 +0:47 Constant: +0:47 0.000000 +0:? Constant: +0:? 2 (const int) +0:? 3 (const int) +0:48 Sequence +0:48 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:48 Construct vec4 ( temp 4-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:48 Constant: +0:48 0.750000 +0:48 Constant: +0:48 0.000000 +0:? Constant: +0:? 2 (const int) +0:? 3 (const int) +0:49 Sequence +0:49 move second child to first child ( temp float) +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_sSamp' (layout( binding=0) uniform sampler) +0:49 Construct vec4 ( temp 4-component vector of float) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:49 Constant: +0:49 0.750000 +0:49 Constant: +0:49 0.000000 +0:? Constant: +0:? 2 (const int) +0:? 3 (const int) +0:63 move second child to first child ( temp 4-component vector of float) +0:63 Color: direct index for structure ( temp 4-component vector of float) +0:63 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:63 Constant: +0:63 0 (const int) +0:63 Constant: +0:63 1.000000 +0:63 1.000000 +0:63 1.000000 +0:63 1.000000 +0:64 move second child to first child ( temp float) +0:64 Depth: direct index for structure ( temp float) +0:64 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:64 Constant: +0:64 1 (const int) +0:64 Constant: +0:64 1.000000 +0:66 Branch: Return with expression +0:66 '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 +0:38 Sequence +0:38 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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_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_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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 185 + + Capability Shader + Capability Sampled1D + Capability SampledCubeArray + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 133 137 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + MemberName 8(PS_OUTPUT) 1 "Depth" + Name 10 "@main(" + 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" + 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 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 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 + 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 + 141: TypePointer UniformConstant 140 + 142(g_tTex1df4): 141(ptr) Variable UniformConstant + 143: TypeImage 35(int) 1D sampled format:Unknown + 144: TypePointer UniformConstant 143 + 145(g_tTex1di4): 144(ptr) Variable UniformConstant + 146: TypeImage 54(int) 1D sampled format:Unknown + 147: TypePointer UniformConstant 146 + 148(g_tTex1du4): 147(ptr) Variable UniformConstant + 149: TypeImage 6(float) 2D sampled format:Unknown + 150: TypePointer UniformConstant 149 + 151(g_tTex2df4): 150(ptr) Variable UniformConstant + 152: TypeImage 35(int) 2D sampled format:Unknown + 153: TypePointer UniformConstant 152 + 154(g_tTex2di4): 153(ptr) Variable UniformConstant + 155: TypeImage 54(int) 2D sampled format:Unknown + 156: TypePointer UniformConstant 155 + 157(g_tTex2du4): 156(ptr) Variable UniformConstant + 158: TypeImage 6(float) 3D sampled format:Unknown + 159: TypePointer UniformConstant 158 + 160(g_tTex3df4): 159(ptr) Variable UniformConstant + 161: TypeImage 35(int) 3D sampled format:Unknown + 162: TypePointer UniformConstant 161 + 163(g_tTex3di4): 162(ptr) Variable UniformConstant + 164: TypeImage 54(int) 3D sampled format:Unknown + 165: TypePointer UniformConstant 164 + 166(g_tTex3du4): 165(ptr) Variable UniformConstant + 167: TypeImage 6(float) Cube sampled format:Unknown + 168: TypePointer UniformConstant 167 + 169(g_tTexcdf4): 168(ptr) Variable UniformConstant + 170: TypeImage 35(int) Cube sampled format:Unknown + 171: TypePointer UniformConstant 170 + 172(g_tTexcdi4): 171(ptr) Variable UniformConstant + 173: TypeImage 54(int) Cube sampled format:Unknown + 174: TypePointer UniformConstant 173 + 175(g_tTexcdu4): 174(ptr) Variable UniformConstant + 176: TypeImage 6(float) 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 + 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 + 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 + 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 + 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 new file mode 100644 index 0000000..5a5159d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out @@ -0,0 +1,639 @@ +hlsl.samplegrad.array.dx10.frag +Shader version: 450 +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}) +0:24 Function Parameters: +0:? Sequence +0:27 Sequence +0:27 move second child to first child ( temp 4-component vector of float) +0:27 'txval10' ( temp 4-component vector of float) +0:27 textureGrad ( temp 4-component vector of float) +0:27 Construct combined texture-sampler ( temp sampler1DArray) +0:27 'g_tTex1df4' (layout( binding=0) uniform texture1DArray) +0:27 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:27 Constant: +0:27 1.100000 +0:27 Constant: +0:27 1.200000 +0:28 Sequence +0:28 move second child to first child ( temp 4-component vector of int) +0:28 'txval11' ( temp 4-component vector of int) +0:28 textureGrad ( temp 4-component vector of int) +0:28 Construct combined texture-sampler ( temp isampler1DArray) +0:28 'g_tTex1di4' ( uniform itexture1DArray) +0:28 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:28 Constant: +0:28 1.100000 +0:28 Constant: +0:28 1.200000 +0:29 Sequence +0:29 move second child to first child ( temp 4-component vector of uint) +0:29 'txval12' ( temp 4-component vector of uint) +0:29 textureGrad ( temp 4-component vector of uint) +0:29 Construct combined texture-sampler ( temp usampler1DArray) +0:29 'g_tTex1du4' ( uniform utexture1DArray) +0:29 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:29 Constant: +0:29 1.100000 +0:29 Constant: +0:29 1.200000 +0:31 Sequence +0:31 move second child to first child ( temp 4-component vector of float) +0:31 'txval20' ( temp 4-component vector of float) +0:31 textureGrad ( temp 4-component vector of float) +0:31 Construct combined texture-sampler ( temp sampler2DArray) +0:31 'g_tTex2df4' ( uniform texture2DArray) +0:31 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:32 Sequence +0:32 move second child to first child ( temp 4-component vector of int) +0:32 'txval21' ( temp 4-component vector of int) +0:32 textureGrad ( temp 4-component vector of int) +0:32 Construct combined texture-sampler ( temp isampler2DArray) +0:32 'g_tTex2di4' ( uniform itexture2DArray) +0:32 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:33 Sequence +0:33 move second child to first child ( temp 4-component vector of uint) +0:33 'txval22' ( temp 4-component vector of uint) +0:33 textureGrad ( temp 4-component vector of uint) +0:33 Construct combined texture-sampler ( temp usampler2DArray) +0:33 'g_tTex2du4' ( uniform utexture2DArray) +0:33 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:35 Sequence +0:35 move second child to first child ( temp 4-component vector of float) +0:35 'txval40' ( temp 4-component vector of float) +0:35 textureGrad ( temp 4-component vector of float) +0:35 Construct combined texture-sampler ( temp samplerCubeArray) +0:35 'g_tTexcdf4' ( uniform textureCubeArray) +0:35 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? 0.400000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:36 Sequence +0:36 move second child to first child ( temp 4-component vector of int) +0:36 'txval41' ( temp 4-component vector of int) +0:36 textureGrad ( temp 4-component vector of int) +0:36 Construct combined texture-sampler ( temp isamplerCubeArray) +0:36 'g_tTexcdi4' ( uniform itextureCubeArray) +0:36 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? 0.400000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:37 Sequence +0:37 move second child to first child ( temp 4-component vector of uint) +0:37 'txval42' ( temp 4-component vector of uint) +0:37 textureGrad ( temp 4-component vector of uint) +0:37 Construct combined texture-sampler ( temp usamplerCubeArray) +0:37 'g_tTexcdu4' ( uniform utextureCubeArray) +0:37 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? 0.400000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:39 move second child to first child ( temp 4-component vector of float) +0:39 Color: direct index for structure ( temp 4-component vector of float) +0:39 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:39 Constant: +0:39 0 (const int) +0:39 Constant: +0:39 1.000000 +0:39 1.000000 +0:39 1.000000 +0:39 1.000000 +0:40 move second child to first child ( temp float) +0:40 Depth: direct index for structure ( temp float) +0:40 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:40 Constant: +0:40 1 (const int) +0:40 Constant: +0:40 1.000000 +0:42 Branch: Return with expression +0:42 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:24 Function Definition: main( ( temp void) +0:24 Function Parameters: +0:? Sequence +0:24 Sequence +0:24 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1DArray) +0:? 'g_tTex1df4' (layout( binding=0) uniform texture1DArray) +0:? 'g_tTex1di4' ( uniform itexture1DArray) +0:? 'g_tTex1du4' ( uniform utexture1DArray) +0:? 'g_tTex2df4' ( uniform texture2DArray) +0:? 'g_tTex2di4' ( uniform itexture2DArray) +0:? 'g_tTex2du4' ( uniform utexture2DArray) +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) + + +Linked fragment stage: + + +Shader version: 450 +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}) +0:24 Function Parameters: +0:? Sequence +0:27 Sequence +0:27 move second child to first child ( temp 4-component vector of float) +0:27 'txval10' ( temp 4-component vector of float) +0:27 textureGrad ( temp 4-component vector of float) +0:27 Construct combined texture-sampler ( temp sampler1DArray) +0:27 'g_tTex1df4' (layout( binding=0) uniform texture1DArray) +0:27 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:27 Constant: +0:27 1.100000 +0:27 Constant: +0:27 1.200000 +0:28 Sequence +0:28 move second child to first child ( temp 4-component vector of int) +0:28 'txval11' ( temp 4-component vector of int) +0:28 textureGrad ( temp 4-component vector of int) +0:28 Construct combined texture-sampler ( temp isampler1DArray) +0:28 'g_tTex1di4' ( uniform itexture1DArray) +0:28 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:28 Constant: +0:28 1.100000 +0:28 Constant: +0:28 1.200000 +0:29 Sequence +0:29 move second child to first child ( temp 4-component vector of uint) +0:29 'txval12' ( temp 4-component vector of uint) +0:29 textureGrad ( temp 4-component vector of uint) +0:29 Construct combined texture-sampler ( temp usampler1DArray) +0:29 'g_tTex1du4' ( uniform utexture1DArray) +0:29 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:29 Constant: +0:29 1.100000 +0:29 Constant: +0:29 1.200000 +0:31 Sequence +0:31 move second child to first child ( temp 4-component vector of float) +0:31 'txval20' ( temp 4-component vector of float) +0:31 textureGrad ( temp 4-component vector of float) +0:31 Construct combined texture-sampler ( temp sampler2DArray) +0:31 'g_tTex2df4' ( uniform texture2DArray) +0:31 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:32 Sequence +0:32 move second child to first child ( temp 4-component vector of int) +0:32 'txval21' ( temp 4-component vector of int) +0:32 textureGrad ( temp 4-component vector of int) +0:32 Construct combined texture-sampler ( temp isampler2DArray) +0:32 'g_tTex2di4' ( uniform itexture2DArray) +0:32 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:33 Sequence +0:33 move second child to first child ( temp 4-component vector of uint) +0:33 'txval22' ( temp 4-component vector of uint) +0:33 textureGrad ( temp 4-component vector of uint) +0:33 Construct combined texture-sampler ( temp usampler2DArray) +0:33 'g_tTex2du4' ( uniform utexture2DArray) +0:33 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:35 Sequence +0:35 move second child to first child ( temp 4-component vector of float) +0:35 'txval40' ( temp 4-component vector of float) +0:35 textureGrad ( temp 4-component vector of float) +0:35 Construct combined texture-sampler ( temp samplerCubeArray) +0:35 'g_tTexcdf4' ( uniform textureCubeArray) +0:35 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? 0.400000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:36 Sequence +0:36 move second child to first child ( temp 4-component vector of int) +0:36 'txval41' ( temp 4-component vector of int) +0:36 textureGrad ( temp 4-component vector of int) +0:36 Construct combined texture-sampler ( temp isamplerCubeArray) +0:36 'g_tTexcdi4' ( uniform itextureCubeArray) +0:36 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? 0.400000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:37 Sequence +0:37 move second child to first child ( temp 4-component vector of uint) +0:37 'txval42' ( temp 4-component vector of uint) +0:37 textureGrad ( temp 4-component vector of uint) +0:37 Construct combined texture-sampler ( temp usamplerCubeArray) +0:37 'g_tTexcdu4' ( uniform utextureCubeArray) +0:37 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? 0.400000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:39 move second child to first child ( temp 4-component vector of float) +0:39 Color: direct index for structure ( temp 4-component vector of float) +0:39 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:39 Constant: +0:39 0 (const int) +0:39 Constant: +0:39 1.000000 +0:39 1.000000 +0:39 1.000000 +0:39 1.000000 +0:40 move second child to first child ( temp float) +0:40 Depth: direct index for structure ( temp float) +0:40 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:40 Constant: +0:40 1 (const int) +0:40 Constant: +0:40 1.000000 +0:42 Branch: Return with expression +0:42 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:24 Function Definition: main( ( temp void) +0:24 Function Parameters: +0:? Sequence +0:24 Sequence +0:24 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1DArray) +0:? 'g_tTex1df4' (layout( binding=0) uniform texture1DArray) +0:? 'g_tTex1di4' ( uniform itexture1DArray) +0:? 'g_tTex1du4' ( uniform utexture1DArray) +0:? 'g_tTex2df4' ( uniform texture2DArray) +0:? 'g_tTex2di4' ( uniform itexture2DArray) +0:? 'g_tTex2du4' ( uniform utexture2DArray) +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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 140 + + Capability Shader + Capability Sampled1D + Capability SampledCubeArray + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 132 136 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + MemberName 8(PS_OUTPUT) 1 "Depth" + Name 10 "@main(" + Name 13 "txval10" + Name 16 "g_tTex1df4" + Name 20 "g_sSamp" + Name 34 "txval11" + Name 37 "g_tTex1di4" + Name 46 "txval12" + Name 49 "g_tTex1du4" + Name 55 "txval20" + Name 58 "g_tTex2df4" + Name 68 "txval21" + Name 71 "g_tTex2di4" + Name 77 "txval22" + Name 80 "g_tTex2du4" + Name 86 "txval40" + Name 89 "g_tTexcdf4" + Name 99 "txval41" + Name 102 "g_tTexcdi4" + Name 108 "txval42" + Name 111 "g_tTexcdu4" + Name 118 "psout" + Name 129 "flattenTemp" + Name 132 "Color" + Name 136 "Depth" + Name 139 "g_tTex1df4a" + 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 49(g_tTex1du4) DescriptorSet 0 + Decorate 58(g_tTex2df4) DescriptorSet 0 + Decorate 71(g_tTex2di4) DescriptorSet 0 + Decorate 80(g_tTex2du4) DescriptorSet 0 + 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 139(g_tTex1df4a) DescriptorSet 0 + Decorate 139(g_tTex1df4a) Binding 1 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8(PS_OUTPUT): TypeStruct 7(fvec4) 6(float) + 9: TypeFunction 8(PS_OUTPUT) + 12: TypePointer Function 7(fvec4) + 14: TypeImage 6(float) 1D array 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: 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 1066192077 + 29: 6(float) Constant 1067030938 + 31: TypeInt 32 1 + 32: TypeVector 31(int) 4 + 33: TypePointer Function 32(ivec4) + 35: TypeImage 31(int) 1D array sampled format:Unknown + 36: TypePointer UniformConstant 35 + 37(g_tTex1di4): 36(ptr) Variable UniformConstant + 40: TypeSampledImage 35 + 43: TypeInt 32 0 + 44: TypeVector 43(int) 4 + 45: TypePointer Function 44(ivec4) + 47: TypeImage 43(int) 1D array sampled format:Unknown + 48: TypePointer UniformConstant 47 + 49(g_tTex1du4): 48(ptr) Variable UniformConstant + 52: TypeSampledImage 47 + 56: TypeImage 6(float) 2D array sampled format:Unknown + 57: TypePointer UniformConstant 56 + 58(g_tTex2df4): 57(ptr) Variable UniformConstant + 61: TypeSampledImage 56 + 63: TypeVector 6(float) 3 + 64: 6(float) Constant 1050253722 + 65: 63(fvec3) ConstantComposite 25 26 64 + 66: 24(fvec2) ConstantComposite 28 29 + 69: TypeImage 31(int) 2D array sampled format:Unknown + 70: TypePointer UniformConstant 69 + 71(g_tTex2di4): 70(ptr) Variable UniformConstant + 74: TypeSampledImage 69 + 78: TypeImage 43(int) 2D array sampled format:Unknown + 79: TypePointer UniformConstant 78 + 80(g_tTex2du4): 79(ptr) Variable UniformConstant + 83: TypeSampledImage 78 + 87: TypeImage 6(float) Cube array sampled format:Unknown + 88: TypePointer UniformConstant 87 + 89(g_tTexcdf4): 88(ptr) Variable UniformConstant + 92: TypeSampledImage 87 + 94: 6(float) Constant 1053609165 + 95: 7(fvec4) ConstantComposite 25 26 64 94 + 96: 6(float) Constant 1067869798 + 97: 63(fvec3) ConstantComposite 28 29 96 + 100: TypeImage 31(int) Cube array sampled format:Unknown + 101: TypePointer UniformConstant 100 + 102(g_tTexcdi4): 101(ptr) Variable UniformConstant + 105: TypeSampledImage 100 + 109: TypeImage 43(int) Cube array sampled format:Unknown + 110: TypePointer UniformConstant 109 + 111(g_tTexcdu4): 110(ptr) Variable UniformConstant + 114: TypeSampledImage 109 + 117: TypePointer Function 8(PS_OUTPUT) + 119: 31(int) Constant 0 + 120: 6(float) Constant 1065353216 + 121: 7(fvec4) ConstantComposite 120 120 120 120 + 123: 31(int) Constant 1 + 124: TypePointer Function 6(float) + 131: TypePointer Output 7(fvec4) + 132(Color): 131(ptr) Variable Output + 135: TypePointer Output 6(float) + 136(Depth): 135(ptr) Variable Output +139(g_tTex1df4a): 15(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: 12(ptr) AccessChain 129(flattenTemp) 119 + 134: 7(fvec4) Load 133 + Store 132(Color) 134 + 137: 124(ptr) AccessChain 129(flattenTemp) 123 + 138: 6(float) Load 137 + Store 136(Depth) 138 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 13(txval10): 12(ptr) Variable Function + 34(txval11): 33(ptr) Variable Function + 46(txval12): 45(ptr) Variable Function + 55(txval20): 12(ptr) Variable Function + 68(txval21): 33(ptr) Variable Function + 77(txval22): 45(ptr) Variable Function + 86(txval40): 12(ptr) Variable Function + 99(txval41): 33(ptr) Variable Function + 108(txval42): 45(ptr) Variable Function + 118(psout): 117(ptr) Variable Function + 17: 14 Load 16(g_tTex1df4) + 21: 18 Load 20(g_sSamp) + 23: 22 SampledImage 17 21 + 30: 7(fvec4) ImageSampleExplicitLod 23 27 Grad 28 29 + Store 13(txval10) 30 + 38: 35 Load 37(g_tTex1di4) + 39: 18 Load 20(g_sSamp) + 41: 40 SampledImage 38 39 + 42: 32(ivec4) ImageSampleExplicitLod 41 27 Grad 28 29 + Store 34(txval11) 42 + 50: 47 Load 49(g_tTex1du4) + 51: 18 Load 20(g_sSamp) + 53: 52 SampledImage 50 51 + 54: 44(ivec4) ImageSampleExplicitLod 53 27 Grad 28 29 + Store 46(txval12) 54 + 59: 56 Load 58(g_tTex2df4) + 60: 18 Load 20(g_sSamp) + 62: 61 SampledImage 59 60 + 67: 7(fvec4) ImageSampleExplicitLod 62 65 Grad 66 66 + Store 55(txval20) 67 + 72: 69 Load 71(g_tTex2di4) + 73: 18 Load 20(g_sSamp) + 75: 74 SampledImage 72 73 + 76: 32(ivec4) ImageSampleExplicitLod 75 65 Grad 66 66 + Store 68(txval21) 76 + 81: 78 Load 80(g_tTex2du4) + 82: 18 Load 20(g_sSamp) + 84: 83 SampledImage 81 82 + 85: 44(ivec4) ImageSampleExplicitLod 84 65 Grad 66 66 + Store 77(txval22) 85 + 90: 87 Load 89(g_tTexcdf4) + 91: 18 Load 20(g_sSamp) + 93: 92 SampledImage 90 91 + 98: 7(fvec4) ImageSampleExplicitLod 93 95 Grad 97 97 + Store 86(txval40) 98 + 103: 100 Load 102(g_tTexcdi4) + 104: 18 Load 20(g_sSamp) + 106: 105 SampledImage 103 104 + 107: 32(ivec4) ImageSampleExplicitLod 106 95 Grad 97 97 + Store 99(txval41) 107 + 112: 109 Load 111(g_tTexcdu4) + 113: 18 Load 20(g_sSamp) + 115: 114 SampledImage 112 113 + 116: 44(ivec4) ImageSampleExplicitLod 115 95 Grad 97 97 + Store 108(txval42) 116 + 122: 12(ptr) AccessChain 118(psout) 119 + Store 122 121 + 125: 124(ptr) AccessChain 118(psout) 123 + Store 125 120 + 126:8(PS_OUTPUT) Load 118(psout) + ReturnValue 126 + FunctionEnd 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 new file mode 100644 index 0000000..dc61751 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out @@ -0,0 +1,787 @@ +hlsl.samplegrad.basic.dx10.frag +Shader version: 450 +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}) +0:28 Function Parameters: +0:? Sequence +0:31 Sequence +0:31 move second child to first child ( temp 4-component vector of float) +0:31 'txval10' ( temp 4-component vector of float) +0:31 textureGrad ( temp 4-component vector of float) +0:31 Construct combined texture-sampler ( temp sampler1D) +0:31 'g_tTex1df4' (layout( binding=0) uniform texture1D) +0:31 'g_sSamp' (layout( binding=0) uniform sampler) +0:31 Constant: +0:31 0.100000 +0:31 Constant: +0:31 1.100000 +0:31 Constant: +0:31 1.200000 +0:32 Sequence +0:32 move second child to first child ( temp 4-component vector of int) +0:32 'txval11' ( temp 4-component vector of int) +0:32 textureGrad ( temp 4-component vector of int) +0:32 Construct combined texture-sampler ( temp isampler1D) +0:32 'g_tTex1di4' ( uniform itexture1D) +0:32 'g_sSamp' (layout( binding=0) uniform sampler) +0:32 Constant: +0:32 0.200000 +0:32 Constant: +0:32 1.100000 +0:32 Constant: +0:32 1.200000 +0:33 Sequence +0:33 move second child to first child ( temp 4-component vector of uint) +0:33 'txval12' ( temp 4-component vector of uint) +0:33 textureGrad ( temp 4-component vector of uint) +0:33 Construct combined texture-sampler ( temp usampler1D) +0:33 'g_tTex1du4' ( uniform utexture1D) +0:33 'g_sSamp' (layout( binding=0) uniform sampler) +0:33 Constant: +0:33 0.300000 +0:33 Constant: +0:33 1.100000 +0:33 Constant: +0:33 1.200000 +0:35 Sequence +0:35 move second child to first child ( temp 4-component vector of float) +0:35 'txval20' ( temp 4-component vector of float) +0:35 textureGrad ( temp 4-component vector of float) +0:35 Construct combined texture-sampler ( temp sampler2D) +0:35 'g_tTex2df4' ( uniform texture2D) +0:35 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:36 Sequence +0:36 move second child to first child ( temp 4-component vector of int) +0:36 'txval21' ( temp 4-component vector of int) +0:36 textureGrad ( temp 4-component vector of int) +0:36 Construct combined texture-sampler ( temp isampler2D) +0:36 'g_tTex2di4' ( uniform itexture2D) +0:36 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:37 Sequence +0:37 move second child to first child ( temp 4-component vector of uint) +0:37 'txval22' ( temp 4-component vector of uint) +0:37 textureGrad ( temp 4-component vector of uint) +0:37 Construct combined texture-sampler ( temp usampler2D) +0:37 'g_tTex2du4' ( uniform utexture2D) +0:37 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:39 Sequence +0:39 move second child to first child ( temp 4-component vector of float) +0:39 'txval30' ( temp 4-component vector of float) +0:39 textureGrad ( temp 4-component vector of float) +0:39 Construct combined texture-sampler ( temp sampler3D) +0:39 'g_tTex3df4' ( uniform texture3D) +0:39 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:40 Sequence +0:40 move second child to first child ( temp 4-component vector of int) +0:40 'txval31' ( temp 4-component vector of int) +0:40 textureGrad ( temp 4-component vector of int) +0:40 Construct combined texture-sampler ( temp isampler3D) +0:40 'g_tTex3di4' ( uniform itexture3D) +0:40 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:41 Sequence +0:41 move second child to first child ( temp 4-component vector of uint) +0:41 'txval32' ( temp 4-component vector of uint) +0:41 textureGrad ( temp 4-component vector of uint) +0:41 Construct combined texture-sampler ( temp usampler3D) +0:41 'g_tTex3du4' ( uniform utexture3D) +0:41 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:43 Sequence +0:43 move second child to first child ( temp 4-component vector of float) +0:43 'txval40' ( temp 4-component vector of float) +0:43 textureGrad ( temp 4-component vector of float) +0:43 Construct combined texture-sampler ( temp samplerCube) +0:43 'g_tTexcdf4' ( uniform textureCube) +0:43 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:44 Sequence +0:44 move second child to first child ( temp 4-component vector of int) +0:44 'txval41' ( temp 4-component vector of int) +0:44 textureGrad ( temp 4-component vector of int) +0:44 Construct combined texture-sampler ( temp isamplerCube) +0:44 'g_tTexcdi4' ( uniform itextureCube) +0:44 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:45 Sequence +0:45 move second child to first child ( temp 4-component vector of uint) +0:45 'txval42' ( temp 4-component vector of uint) +0:45 textureGrad ( temp 4-component vector of uint) +0:45 Construct combined texture-sampler ( temp usamplerCube) +0:45 'g_tTexcdu4' ( uniform utextureCube) +0:45 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:47 move second child to first child ( temp 4-component vector of float) +0:47 Color: direct index for structure ( temp 4-component vector of float) +0:47 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:47 Constant: +0:47 0 (const int) +0:47 Constant: +0:47 1.000000 +0:47 1.000000 +0:47 1.000000 +0:47 1.000000 +0:48 move second child to first child ( temp float) +0:48 Depth: direct index for structure ( temp float) +0:48 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:48 Constant: +0:48 1 (const int) +0:48 Constant: +0:48 1.000000 +0:50 Branch: Return with expression +0:50 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:28 Function Definition: main( ( temp void) +0:28 Function Parameters: +0:? Sequence +0:28 Sequence +0:28 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:28 1 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1D) +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_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:? 'Color' (layout( location=0) out 4-component vector of float) +0:? 'Depth' ( out float FragDepth) + + +Linked fragment stage: + + +Shader version: 450 +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}) +0:28 Function Parameters: +0:? Sequence +0:31 Sequence +0:31 move second child to first child ( temp 4-component vector of float) +0:31 'txval10' ( temp 4-component vector of float) +0:31 textureGrad ( temp 4-component vector of float) +0:31 Construct combined texture-sampler ( temp sampler1D) +0:31 'g_tTex1df4' (layout( binding=0) uniform texture1D) +0:31 'g_sSamp' (layout( binding=0) uniform sampler) +0:31 Constant: +0:31 0.100000 +0:31 Constant: +0:31 1.100000 +0:31 Constant: +0:31 1.200000 +0:32 Sequence +0:32 move second child to first child ( temp 4-component vector of int) +0:32 'txval11' ( temp 4-component vector of int) +0:32 textureGrad ( temp 4-component vector of int) +0:32 Construct combined texture-sampler ( temp isampler1D) +0:32 'g_tTex1di4' ( uniform itexture1D) +0:32 'g_sSamp' (layout( binding=0) uniform sampler) +0:32 Constant: +0:32 0.200000 +0:32 Constant: +0:32 1.100000 +0:32 Constant: +0:32 1.200000 +0:33 Sequence +0:33 move second child to first child ( temp 4-component vector of uint) +0:33 'txval12' ( temp 4-component vector of uint) +0:33 textureGrad ( temp 4-component vector of uint) +0:33 Construct combined texture-sampler ( temp usampler1D) +0:33 'g_tTex1du4' ( uniform utexture1D) +0:33 'g_sSamp' (layout( binding=0) uniform sampler) +0:33 Constant: +0:33 0.300000 +0:33 Constant: +0:33 1.100000 +0:33 Constant: +0:33 1.200000 +0:35 Sequence +0:35 move second child to first child ( temp 4-component vector of float) +0:35 'txval20' ( temp 4-component vector of float) +0:35 textureGrad ( temp 4-component vector of float) +0:35 Construct combined texture-sampler ( temp sampler2D) +0:35 'g_tTex2df4' ( uniform texture2D) +0:35 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:36 Sequence +0:36 move second child to first child ( temp 4-component vector of int) +0:36 'txval21' ( temp 4-component vector of int) +0:36 textureGrad ( temp 4-component vector of int) +0:36 Construct combined texture-sampler ( temp isampler2D) +0:36 'g_tTex2di4' ( uniform itexture2D) +0:36 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:37 Sequence +0:37 move second child to first child ( temp 4-component vector of uint) +0:37 'txval22' ( temp 4-component vector of uint) +0:37 textureGrad ( temp 4-component vector of uint) +0:37 Construct combined texture-sampler ( temp usampler2D) +0:37 'g_tTex2du4' ( uniform utexture2D) +0:37 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:39 Sequence +0:39 move second child to first child ( temp 4-component vector of float) +0:39 'txval30' ( temp 4-component vector of float) +0:39 textureGrad ( temp 4-component vector of float) +0:39 Construct combined texture-sampler ( temp sampler3D) +0:39 'g_tTex3df4' ( uniform texture3D) +0:39 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:40 Sequence +0:40 move second child to first child ( temp 4-component vector of int) +0:40 'txval31' ( temp 4-component vector of int) +0:40 textureGrad ( temp 4-component vector of int) +0:40 Construct combined texture-sampler ( temp isampler3D) +0:40 'g_tTex3di4' ( uniform itexture3D) +0:40 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:41 Sequence +0:41 move second child to first child ( temp 4-component vector of uint) +0:41 'txval32' ( temp 4-component vector of uint) +0:41 textureGrad ( temp 4-component vector of uint) +0:41 Construct combined texture-sampler ( temp usampler3D) +0:41 'g_tTex3du4' ( uniform utexture3D) +0:41 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:43 Sequence +0:43 move second child to first child ( temp 4-component vector of float) +0:43 'txval40' ( temp 4-component vector of float) +0:43 textureGrad ( temp 4-component vector of float) +0:43 Construct combined texture-sampler ( temp samplerCube) +0:43 'g_tTexcdf4' ( uniform textureCube) +0:43 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:44 Sequence +0:44 move second child to first child ( temp 4-component vector of int) +0:44 'txval41' ( temp 4-component vector of int) +0:44 textureGrad ( temp 4-component vector of int) +0:44 Construct combined texture-sampler ( temp isamplerCube) +0:44 'g_tTexcdi4' ( uniform itextureCube) +0:44 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:45 Sequence +0:45 move second child to first child ( temp 4-component vector of uint) +0:45 'txval42' ( temp 4-component vector of uint) +0:45 textureGrad ( temp 4-component vector of uint) +0:45 Construct combined texture-sampler ( temp usamplerCube) +0:45 'g_tTexcdu4' ( uniform utextureCube) +0:45 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:47 move second child to first child ( temp 4-component vector of float) +0:47 Color: direct index for structure ( temp 4-component vector of float) +0:47 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:47 Constant: +0:47 0 (const int) +0:47 Constant: +0:47 1.000000 +0:47 1.000000 +0:47 1.000000 +0:47 1.000000 +0:48 move second child to first child ( temp float) +0:48 Depth: direct index for structure ( temp float) +0:48 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:48 Constant: +0:48 1 (const int) +0:48 Constant: +0:48 1.000000 +0:50 Branch: Return with expression +0:50 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:28 Function Definition: main( ( temp void) +0:28 Function Parameters: +0:? Sequence +0:28 Sequence +0:28 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:28 1 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1D) +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_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:? 'Color' (layout( location=0) out 4-component vector of float) +0:? 'Depth' ( out float FragDepth) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 175 + + Capability Shader + Capability Sampled1D + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 167 171 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + MemberName 8(PS_OUTPUT) 1 "Depth" + Name 10 "@main(" + Name 13 "txval10" + Name 16 "g_tTex1df4" + Name 20 "g_sSamp" + Name 31 "txval11" + Name 34 "g_tTex1di4" + Name 44 "txval12" + Name 47 "g_tTex1du4" + Name 54 "txval20" + Name 57 "g_tTex2df4" + Name 66 "txval21" + Name 69 "g_tTex2di4" + Name 77 "txval22" + Name 80 "g_tTex2du4" + Name 89 "txval30" + Name 92 "g_tTex3df4" + Name 102 "txval31" + Name 105 "g_tTex3di4" + Name 112 "txval32" + Name 115 "g_tTex3du4" + Name 125 "txval40" + Name 128 "g_tTexcdf4" + Name 134 "txval41" + Name 137 "g_tTexcdi4" + Name 143 "txval42" + Name 146 "g_tTexcdu4" + Name 153 "psout" + Name 164 "flattenTemp" + Name 167 "Color" + Name 171 "Depth" + Name 174 "g_tTex1df4a" + 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 34(g_tTex1di4) DescriptorSet 0 + Decorate 47(g_tTex1du4) DescriptorSet 0 + Decorate 57(g_tTex2df4) DescriptorSet 0 + Decorate 69(g_tTex2di4) DescriptorSet 0 + Decorate 80(g_tTex2du4) DescriptorSet 0 + Decorate 92(g_tTex3df4) DescriptorSet 0 + Decorate 105(g_tTex3di4) DescriptorSet 0 + Decorate 115(g_tTex3du4) DescriptorSet 0 + 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 174(g_tTex1df4a) DescriptorSet 0 + Decorate 174(g_tTex1df4a) Binding 1 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8(PS_OUTPUT): TypeStruct 7(fvec4) 6(float) + 9: TypeFunction 8(PS_OUTPUT) + 12: TypePointer Function 7(fvec4) + 14: TypeImage 6(float) 1D 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: TypeSampledImage 14 + 24: 6(float) Constant 1036831949 + 25: 6(float) Constant 1066192077 + 26: 6(float) Constant 1067030938 + 28: TypeInt 32 1 + 29: TypeVector 28(int) 4 + 30: TypePointer Function 29(ivec4) + 32: TypeImage 28(int) 1D sampled format:Unknown + 33: TypePointer UniformConstant 32 + 34(g_tTex1di4): 33(ptr) Variable UniformConstant + 37: TypeSampledImage 32 + 39: 6(float) Constant 1045220557 + 41: TypeInt 32 0 + 42: TypeVector 41(int) 4 + 43: TypePointer Function 42(ivec4) + 45: TypeImage 41(int) 1D sampled format:Unknown + 46: TypePointer UniformConstant 45 + 47(g_tTex1du4): 46(ptr) Variable UniformConstant + 50: TypeSampledImage 45 + 52: 6(float) Constant 1050253722 + 55: TypeImage 6(float) 2D sampled format:Unknown + 56: TypePointer UniformConstant 55 + 57(g_tTex2df4): 56(ptr) Variable UniformConstant + 60: TypeSampledImage 55 + 62: TypeVector 6(float) 2 + 63: 62(fvec2) ConstantComposite 24 39 + 64: 62(fvec2) ConstantComposite 25 26 + 67: TypeImage 28(int) 2D sampled format:Unknown + 68: TypePointer UniformConstant 67 + 69(g_tTex2di4): 68(ptr) Variable UniformConstant + 72: TypeSampledImage 67 + 74: 6(float) Constant 1053609165 + 75: 62(fvec2) ConstantComposite 52 74 + 78: TypeImage 41(int) 2D sampled format:Unknown + 79: TypePointer UniformConstant 78 + 80(g_tTex2du4): 79(ptr) Variable UniformConstant + 83: TypeSampledImage 78 + 85: 6(float) Constant 1056964608 + 86: 6(float) Constant 1058642330 + 87: 62(fvec2) ConstantComposite 85 86 + 90: TypeImage 6(float) 3D sampled format:Unknown + 91: TypePointer UniformConstant 90 + 92(g_tTex3df4): 91(ptr) Variable UniformConstant + 95: TypeSampledImage 90 + 97: TypeVector 6(float) 3 + 98: 97(fvec3) ConstantComposite 24 39 52 + 99: 6(float) Constant 1067869798 + 100: 97(fvec3) ConstantComposite 25 26 99 + 103: TypeImage 28(int) 3D sampled format:Unknown + 104: TypePointer UniformConstant 103 + 105(g_tTex3di4): 104(ptr) Variable UniformConstant + 108: TypeSampledImage 103 + 110: 97(fvec3) ConstantComposite 74 85 86 + 113: TypeImage 41(int) 3D sampled format:Unknown + 114: TypePointer UniformConstant 113 + 115(g_tTex3du4): 114(ptr) Variable UniformConstant + 118: TypeSampledImage 113 + 120: 6(float) Constant 1060320051 + 121: 6(float) Constant 1061997773 + 122: 6(float) Constant 1063675494 + 123: 97(fvec3) ConstantComposite 120 121 122 + 126: TypeImage 6(float) Cube sampled format:Unknown + 127: TypePointer UniformConstant 126 + 128(g_tTexcdf4): 127(ptr) Variable UniformConstant + 131: TypeSampledImage 126 + 135: TypeImage 28(int) Cube sampled format:Unknown + 136: TypePointer UniformConstant 135 + 137(g_tTexcdi4): 136(ptr) Variable UniformConstant + 140: TypeSampledImage 135 + 144: TypeImage 41(int) Cube sampled format:Unknown + 145: TypePointer UniformConstant 144 + 146(g_tTexcdu4): 145(ptr) Variable UniformConstant + 149: TypeSampledImage 144 + 152: TypePointer Function 8(PS_OUTPUT) + 154: 28(int) Constant 0 + 155: 6(float) Constant 1065353216 + 156: 7(fvec4) ConstantComposite 155 155 155 155 + 158: 28(int) Constant 1 + 159: TypePointer Function 6(float) + 166: TypePointer Output 7(fvec4) + 167(Color): 166(ptr) Variable Output + 170: TypePointer Output 6(float) + 171(Depth): 170(ptr) Variable Output +174(g_tTex1df4a): 15(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label +164(flattenTemp): 152(ptr) Variable Function + 165:8(PS_OUTPUT) FunctionCall 10(@main() + Store 164(flattenTemp) 165 + 168: 12(ptr) AccessChain 164(flattenTemp) 154 + 169: 7(fvec4) Load 168 + Store 167(Color) 169 + 172: 159(ptr) AccessChain 164(flattenTemp) 158 + 173: 6(float) Load 172 + Store 171(Depth) 173 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 13(txval10): 12(ptr) Variable Function + 31(txval11): 30(ptr) Variable Function + 44(txval12): 43(ptr) Variable Function + 54(txval20): 12(ptr) Variable Function + 66(txval21): 30(ptr) Variable Function + 77(txval22): 43(ptr) Variable Function + 89(txval30): 12(ptr) Variable Function + 102(txval31): 30(ptr) Variable Function + 112(txval32): 43(ptr) Variable Function + 125(txval40): 12(ptr) Variable Function + 134(txval41): 30(ptr) Variable Function + 143(txval42): 43(ptr) Variable Function + 153(psout): 152(ptr) Variable Function + 17: 14 Load 16(g_tTex1df4) + 21: 18 Load 20(g_sSamp) + 23: 22 SampledImage 17 21 + 27: 7(fvec4) ImageSampleExplicitLod 23 24 Grad 25 26 + Store 13(txval10) 27 + 35: 32 Load 34(g_tTex1di4) + 36: 18 Load 20(g_sSamp) + 38: 37 SampledImage 35 36 + 40: 29(ivec4) ImageSampleExplicitLod 38 39 Grad 25 26 + Store 31(txval11) 40 + 48: 45 Load 47(g_tTex1du4) + 49: 18 Load 20(g_sSamp) + 51: 50 SampledImage 48 49 + 53: 42(ivec4) ImageSampleExplicitLod 51 52 Grad 25 26 + Store 44(txval12) 53 + 58: 55 Load 57(g_tTex2df4) + 59: 18 Load 20(g_sSamp) + 61: 60 SampledImage 58 59 + 65: 7(fvec4) ImageSampleExplicitLod 61 63 Grad 64 64 + Store 54(txval20) 65 + 70: 67 Load 69(g_tTex2di4) + 71: 18 Load 20(g_sSamp) + 73: 72 SampledImage 70 71 + 76: 29(ivec4) ImageSampleExplicitLod 73 75 Grad 64 64 + Store 66(txval21) 76 + 81: 78 Load 80(g_tTex2du4) + 82: 18 Load 20(g_sSamp) + 84: 83 SampledImage 81 82 + 88: 42(ivec4) ImageSampleExplicitLod 84 87 Grad 64 64 + Store 77(txval22) 88 + 93: 90 Load 92(g_tTex3df4) + 94: 18 Load 20(g_sSamp) + 96: 95 SampledImage 93 94 + 101: 7(fvec4) ImageSampleExplicitLod 96 98 Grad 100 100 + Store 89(txval30) 101 + 106: 103 Load 105(g_tTex3di4) + 107: 18 Load 20(g_sSamp) + 109: 108 SampledImage 106 107 + 111: 29(ivec4) ImageSampleExplicitLod 109 110 Grad 100 100 + Store 102(txval31) 111 + 116: 113 Load 115(g_tTex3du4) + 117: 18 Load 20(g_sSamp) + 119: 118 SampledImage 116 117 + 124: 42(ivec4) ImageSampleExplicitLod 119 123 Grad 100 100 + Store 112(txval32) 124 + 129: 126 Load 128(g_tTexcdf4) + 130: 18 Load 20(g_sSamp) + 132: 131 SampledImage 129 130 + 133: 7(fvec4) ImageSampleExplicitLod 132 98 Grad 100 100 + Store 125(txval40) 133 + 138: 135 Load 137(g_tTexcdi4) + 139: 18 Load 20(g_sSamp) + 141: 140 SampledImage 138 139 + 142: 29(ivec4) ImageSampleExplicitLod 141 110 Grad 100 100 + Store 134(txval41) 142 + 147: 144 Load 146(g_tTexcdu4) + 148: 18 Load 20(g_sSamp) + 150: 149 SampledImage 147 148 + 151: 42(ivec4) ImageSampleExplicitLod 150 123 Grad 100 100 + Store 143(txval42) 151 + 157: 12(ptr) AccessChain 153(psout) 154 + Store 157 156 + 160: 159(ptr) AccessChain 153(psout) 158 + Store 160 155 + 161:8(PS_OUTPUT) Load 153(psout) + ReturnValue 161 + FunctionEnd 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 new file mode 100644 index 0000000..afce97f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out @@ -0,0 +1,740 @@ +hlsl.samplegrad.basic.dx10.vert +Shader version: 450 +0:? Sequence +0:27 Function Definition: @main( ( temp structure{ temp 4-component vector of float Pos}) +0:27 Function Parameters: +0:? Sequence +0:30 Sequence +0:30 move second child to first child ( temp 4-component vector of float) +0:30 'txval10' ( temp 4-component vector of float) +0:30 textureGrad ( temp 4-component vector of float) +0:30 Construct combined texture-sampler ( temp sampler1D) +0:30 'g_tTex1df4' (layout( binding=0) uniform texture1D) +0:30 'g_sSamp' (layout( binding=0) uniform sampler) +0:30 Constant: +0:30 0.100000 +0:30 Constant: +0:30 1.100000 +0:30 Constant: +0:30 1.200000 +0:31 Sequence +0:31 move second child to first child ( temp 4-component vector of int) +0:31 'txval11' ( temp 4-component vector of int) +0:31 textureGrad ( temp 4-component vector of int) +0:31 Construct combined texture-sampler ( temp isampler1D) +0:31 'g_tTex1di4' ( uniform itexture1D) +0:31 'g_sSamp' (layout( binding=0) uniform sampler) +0:31 Constant: +0:31 0.200000 +0:31 Constant: +0:31 1.100000 +0:31 Constant: +0:31 1.200000 +0:32 Sequence +0:32 move second child to first child ( temp 4-component vector of uint) +0:32 'txval12' ( temp 4-component vector of uint) +0:32 textureGrad ( temp 4-component vector of uint) +0:32 Construct combined texture-sampler ( temp usampler1D) +0:32 'g_tTex1du4' ( uniform utexture1D) +0:32 'g_sSamp' (layout( binding=0) uniform sampler) +0:32 Constant: +0:32 0.300000 +0:32 Constant: +0:32 1.100000 +0:32 Constant: +0:32 1.200000 +0:34 Sequence +0:34 move second child to first child ( temp 4-component vector of float) +0:34 'txval20' ( temp 4-component vector of float) +0:34 textureGrad ( temp 4-component vector of float) +0:34 Construct combined texture-sampler ( temp sampler2D) +0:34 'g_tTex2df4' ( uniform texture2D) +0:34 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:35 Sequence +0:35 move second child to first child ( temp 4-component vector of int) +0:35 'txval21' ( temp 4-component vector of int) +0:35 textureGrad ( temp 4-component vector of int) +0:35 Construct combined texture-sampler ( temp isampler2D) +0:35 'g_tTex2di4' ( uniform itexture2D) +0:35 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:36 Sequence +0:36 move second child to first child ( temp 4-component vector of uint) +0:36 'txval22' ( temp 4-component vector of uint) +0:36 textureGrad ( temp 4-component vector of uint) +0:36 Construct combined texture-sampler ( temp usampler2D) +0:36 'g_tTex2du4' ( uniform utexture2D) +0:36 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:38 Sequence +0:38 move second child to first child ( temp 4-component vector of float) +0:38 'txval30' ( temp 4-component vector of float) +0:38 textureGrad ( temp 4-component vector of float) +0:38 Construct combined texture-sampler ( temp sampler3D) +0:38 'g_tTex3df4' ( uniform texture3D) +0:38 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:39 Sequence +0:39 move second child to first child ( temp 4-component vector of int) +0:39 'txval31' ( temp 4-component vector of int) +0:39 textureGrad ( temp 4-component vector of int) +0:39 Construct combined texture-sampler ( temp isampler3D) +0:39 'g_tTex3di4' ( uniform itexture3D) +0:39 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:40 Sequence +0:40 move second child to first child ( temp 4-component vector of uint) +0:40 'txval32' ( temp 4-component vector of uint) +0:40 textureGrad ( temp 4-component vector of uint) +0:40 Construct combined texture-sampler ( temp usampler3D) +0:40 'g_tTex3du4' ( uniform utexture3D) +0:40 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:42 Sequence +0:42 move second child to first child ( temp 4-component vector of float) +0:42 'txval40' ( temp 4-component vector of float) +0:42 textureGrad ( temp 4-component vector of float) +0:42 Construct combined texture-sampler ( temp samplerCube) +0:42 'g_tTexcdf4' ( uniform textureCube) +0:42 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:43 Sequence +0:43 move second child to first child ( temp 4-component vector of int) +0:43 'txval41' ( temp 4-component vector of int) +0:43 textureGrad ( temp 4-component vector of int) +0:43 Construct combined texture-sampler ( temp isamplerCube) +0:43 'g_tTexcdi4' ( uniform itextureCube) +0:43 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:44 Sequence +0:44 move second child to first child ( temp 4-component vector of uint) +0:44 'txval42' ( temp 4-component vector of uint) +0:44 textureGrad ( temp 4-component vector of uint) +0:44 Construct combined texture-sampler ( temp usamplerCube) +0:44 'g_tTexcdu4' ( uniform utextureCube) +0:44 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:46 move second child to first child ( temp 4-component vector of float) +0:46 Pos: direct index for structure ( temp 4-component vector of float) +0:46 'vsout' ( temp structure{ temp 4-component vector of float Pos}) +0:46 Constant: +0:46 0 (const int) +0:? Constant: +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:48 Branch: Return with expression +0:48 'vsout' ( temp structure{ temp 4-component vector of float Pos}) +0:27 Function Definition: main( ( temp void) +0:27 Function Parameters: +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: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: +0:27 0 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1D) +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_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:? '@entryPointOutput' (layout( location=0) out structure{}) + + +Linked vertex stage: + + +Shader version: 450 +0:? Sequence +0:27 Function Definition: @main( ( temp structure{ temp 4-component vector of float Pos}) +0:27 Function Parameters: +0:? Sequence +0:30 Sequence +0:30 move second child to first child ( temp 4-component vector of float) +0:30 'txval10' ( temp 4-component vector of float) +0:30 textureGrad ( temp 4-component vector of float) +0:30 Construct combined texture-sampler ( temp sampler1D) +0:30 'g_tTex1df4' (layout( binding=0) uniform texture1D) +0:30 'g_sSamp' (layout( binding=0) uniform sampler) +0:30 Constant: +0:30 0.100000 +0:30 Constant: +0:30 1.100000 +0:30 Constant: +0:30 1.200000 +0:31 Sequence +0:31 move second child to first child ( temp 4-component vector of int) +0:31 'txval11' ( temp 4-component vector of int) +0:31 textureGrad ( temp 4-component vector of int) +0:31 Construct combined texture-sampler ( temp isampler1D) +0:31 'g_tTex1di4' ( uniform itexture1D) +0:31 'g_sSamp' (layout( binding=0) uniform sampler) +0:31 Constant: +0:31 0.200000 +0:31 Constant: +0:31 1.100000 +0:31 Constant: +0:31 1.200000 +0:32 Sequence +0:32 move second child to first child ( temp 4-component vector of uint) +0:32 'txval12' ( temp 4-component vector of uint) +0:32 textureGrad ( temp 4-component vector of uint) +0:32 Construct combined texture-sampler ( temp usampler1D) +0:32 'g_tTex1du4' ( uniform utexture1D) +0:32 'g_sSamp' (layout( binding=0) uniform sampler) +0:32 Constant: +0:32 0.300000 +0:32 Constant: +0:32 1.100000 +0:32 Constant: +0:32 1.200000 +0:34 Sequence +0:34 move second child to first child ( temp 4-component vector of float) +0:34 'txval20' ( temp 4-component vector of float) +0:34 textureGrad ( temp 4-component vector of float) +0:34 Construct combined texture-sampler ( temp sampler2D) +0:34 'g_tTex2df4' ( uniform texture2D) +0:34 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:35 Sequence +0:35 move second child to first child ( temp 4-component vector of int) +0:35 'txval21' ( temp 4-component vector of int) +0:35 textureGrad ( temp 4-component vector of int) +0:35 Construct combined texture-sampler ( temp isampler2D) +0:35 'g_tTex2di4' ( uniform itexture2D) +0:35 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:36 Sequence +0:36 move second child to first child ( temp 4-component vector of uint) +0:36 'txval22' ( temp 4-component vector of uint) +0:36 textureGrad ( temp 4-component vector of uint) +0:36 Construct combined texture-sampler ( temp usampler2D) +0:36 'g_tTex2du4' ( uniform utexture2D) +0:36 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:38 Sequence +0:38 move second child to first child ( temp 4-component vector of float) +0:38 'txval30' ( temp 4-component vector of float) +0:38 textureGrad ( temp 4-component vector of float) +0:38 Construct combined texture-sampler ( temp sampler3D) +0:38 'g_tTex3df4' ( uniform texture3D) +0:38 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:39 Sequence +0:39 move second child to first child ( temp 4-component vector of int) +0:39 'txval31' ( temp 4-component vector of int) +0:39 textureGrad ( temp 4-component vector of int) +0:39 Construct combined texture-sampler ( temp isampler3D) +0:39 'g_tTex3di4' ( uniform itexture3D) +0:39 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:40 Sequence +0:40 move second child to first child ( temp 4-component vector of uint) +0:40 'txval32' ( temp 4-component vector of uint) +0:40 textureGrad ( temp 4-component vector of uint) +0:40 Construct combined texture-sampler ( temp usampler3D) +0:40 'g_tTex3du4' ( uniform utexture3D) +0:40 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:42 Sequence +0:42 move second child to first child ( temp 4-component vector of float) +0:42 'txval40' ( temp 4-component vector of float) +0:42 textureGrad ( temp 4-component vector of float) +0:42 Construct combined texture-sampler ( temp samplerCube) +0:42 'g_tTexcdf4' ( uniform textureCube) +0:42 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:43 Sequence +0:43 move second child to first child ( temp 4-component vector of int) +0:43 'txval41' ( temp 4-component vector of int) +0:43 textureGrad ( temp 4-component vector of int) +0:43 Construct combined texture-sampler ( temp isamplerCube) +0:43 'g_tTexcdi4' ( uniform itextureCube) +0:43 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:44 Sequence +0:44 move second child to first child ( temp 4-component vector of uint) +0:44 'txval42' ( temp 4-component vector of uint) +0:44 textureGrad ( temp 4-component vector of uint) +0:44 Construct combined texture-sampler ( temp usamplerCube) +0:44 'g_tTexcdu4' ( uniform utextureCube) +0:44 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:46 move second child to first child ( temp 4-component vector of float) +0:46 Pos: direct index for structure ( temp 4-component vector of float) +0:46 'vsout' ( temp structure{ temp 4-component vector of float Pos}) +0:46 Constant: +0:46 0 (const int) +0:? Constant: +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:48 Branch: Return with expression +0:48 'vsout' ( temp structure{ temp 4-component vector of float Pos}) +0:27 Function Definition: main( ( temp void) +0:27 Function Parameters: +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: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: +0:27 0 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1D) +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_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:? '@entryPointOutput' (layout( location=0) out structure{}) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 169 + + Capability Shader + Capability Sampled1D + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 162 168 + Name 4 "main" + Name 8 "VS_OUTPUT" + MemberName 8(VS_OUTPUT) 0 "Pos" + Name 10 "@main(" + Name 13 "txval10" + Name 16 "g_tTex1df4" + Name 20 "g_sSamp" + Name 31 "txval11" + Name 34 "g_tTex1di4" + Name 44 "txval12" + Name 47 "g_tTex1du4" + Name 54 "txval20" + Name 57 "g_tTex2df4" + Name 66 "txval21" + Name 69 "g_tTex2di4" + Name 77 "txval22" + Name 80 "g_tTex2du4" + Name 89 "txval30" + Name 92 "g_tTex3df4" + Name 102 "txval31" + Name 105 "g_tTex3di4" + Name 112 "txval32" + Name 115 "g_tTex3du4" + Name 125 "txval40" + Name 128 "g_tTexcdf4" + Name 134 "txval41" + Name 137 "g_tTexcdi4" + Name 143 "txval42" + Name 146 "g_tTexcdu4" + Name 153 "vsout" + 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 + Decorate 20(g_sSamp) Binding 0 + Decorate 34(g_tTex1di4) DescriptorSet 0 + Decorate 47(g_tTex1du4) DescriptorSet 0 + Decorate 57(g_tTex2df4) DescriptorSet 0 + Decorate 69(g_tTex2di4) DescriptorSet 0 + Decorate 80(g_tTex2du4) DescriptorSet 0 + Decorate 92(g_tTex3df4) DescriptorSet 0 + Decorate 105(g_tTex3di4) DescriptorSet 0 + Decorate 115(g_tTex3du4) DescriptorSet 0 + 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 165(g_tTex1df4a) DescriptorSet 0 + Decorate 165(g_tTex1df4a) Binding 1 + Decorate 168(@entryPointOutput) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8(VS_OUTPUT): TypeStruct 7(fvec4) + 9: TypeFunction 8(VS_OUTPUT) + 12: TypePointer Function 7(fvec4) + 14: TypeImage 6(float) 1D 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: TypeSampledImage 14 + 24: 6(float) Constant 1036831949 + 25: 6(float) Constant 1066192077 + 26: 6(float) Constant 1067030938 + 28: TypeInt 32 1 + 29: TypeVector 28(int) 4 + 30: TypePointer Function 29(ivec4) + 32: TypeImage 28(int) 1D sampled format:Unknown + 33: TypePointer UniformConstant 32 + 34(g_tTex1di4): 33(ptr) Variable UniformConstant + 37: TypeSampledImage 32 + 39: 6(float) Constant 1045220557 + 41: TypeInt 32 0 + 42: TypeVector 41(int) 4 + 43: TypePointer Function 42(ivec4) + 45: TypeImage 41(int) 1D sampled format:Unknown + 46: TypePointer UniformConstant 45 + 47(g_tTex1du4): 46(ptr) Variable UniformConstant + 50: TypeSampledImage 45 + 52: 6(float) Constant 1050253722 + 55: TypeImage 6(float) 2D sampled format:Unknown + 56: TypePointer UniformConstant 55 + 57(g_tTex2df4): 56(ptr) Variable UniformConstant + 60: TypeSampledImage 55 + 62: TypeVector 6(float) 2 + 63: 62(fvec2) ConstantComposite 24 39 + 64: 62(fvec2) ConstantComposite 25 26 + 67: TypeImage 28(int) 2D sampled format:Unknown + 68: TypePointer UniformConstant 67 + 69(g_tTex2di4): 68(ptr) Variable UniformConstant + 72: TypeSampledImage 67 + 74: 6(float) Constant 1053609165 + 75: 62(fvec2) ConstantComposite 52 74 + 78: TypeImage 41(int) 2D sampled format:Unknown + 79: TypePointer UniformConstant 78 + 80(g_tTex2du4): 79(ptr) Variable UniformConstant + 83: TypeSampledImage 78 + 85: 6(float) Constant 1056964608 + 86: 6(float) Constant 1058642330 + 87: 62(fvec2) ConstantComposite 85 86 + 90: TypeImage 6(float) 3D sampled format:Unknown + 91: TypePointer UniformConstant 90 + 92(g_tTex3df4): 91(ptr) Variable UniformConstant + 95: TypeSampledImage 90 + 97: TypeVector 6(float) 3 + 98: 97(fvec3) ConstantComposite 24 39 52 + 99: 6(float) Constant 1067869798 + 100: 97(fvec3) ConstantComposite 25 26 99 + 103: TypeImage 28(int) 3D sampled format:Unknown + 104: TypePointer UniformConstant 103 + 105(g_tTex3di4): 104(ptr) Variable UniformConstant + 108: TypeSampledImage 103 + 110: 97(fvec3) ConstantComposite 74 85 86 + 113: TypeImage 41(int) 3D sampled format:Unknown + 114: TypePointer UniformConstant 113 + 115(g_tTex3du4): 114(ptr) Variable UniformConstant + 118: TypeSampledImage 113 + 120: 6(float) Constant 1060320051 + 121: 6(float) Constant 1061997773 + 122: 6(float) Constant 1063675494 + 123: 97(fvec3) ConstantComposite 120 121 122 + 126: TypeImage 6(float) Cube sampled format:Unknown + 127: TypePointer UniformConstant 126 + 128(g_tTexcdf4): 127(ptr) Variable UniformConstant + 131: TypeSampledImage 126 + 135: TypeImage 28(int) Cube sampled format:Unknown + 136: TypePointer UniformConstant 135 + 137(g_tTexcdi4): 136(ptr) Variable UniformConstant + 140: TypeSampledImage 135 + 144: TypeImage 41(int) Cube sampled format:Unknown + 145: TypePointer UniformConstant 144 + 146(g_tTexcdu4): 145(ptr) Variable UniformConstant + 149: TypeSampledImage 144 + 152: TypePointer Function 8(VS_OUTPUT) + 154: 28(int) Constant 0 + 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 +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 + Return + FunctionEnd + 10(@main():8(VS_OUTPUT) Function None 9 + 11: Label + 13(txval10): 12(ptr) Variable Function + 31(txval11): 30(ptr) Variable Function + 44(txval12): 43(ptr) Variable Function + 54(txval20): 12(ptr) Variable Function + 66(txval21): 30(ptr) Variable Function + 77(txval22): 43(ptr) Variable Function + 89(txval30): 12(ptr) Variable Function + 102(txval31): 30(ptr) Variable Function + 112(txval32): 43(ptr) Variable Function + 125(txval40): 12(ptr) Variable Function + 134(txval41): 30(ptr) Variable Function + 143(txval42): 43(ptr) Variable Function + 153(vsout): 152(ptr) Variable Function + 17: 14 Load 16(g_tTex1df4) + 21: 18 Load 20(g_sSamp) + 23: 22 SampledImage 17 21 + 27: 7(fvec4) ImageSampleExplicitLod 23 24 Grad 25 26 + Store 13(txval10) 27 + 35: 32 Load 34(g_tTex1di4) + 36: 18 Load 20(g_sSamp) + 38: 37 SampledImage 35 36 + 40: 29(ivec4) ImageSampleExplicitLod 38 39 Grad 25 26 + Store 31(txval11) 40 + 48: 45 Load 47(g_tTex1du4) + 49: 18 Load 20(g_sSamp) + 51: 50 SampledImage 48 49 + 53: 42(ivec4) ImageSampleExplicitLod 51 52 Grad 25 26 + Store 44(txval12) 53 + 58: 55 Load 57(g_tTex2df4) + 59: 18 Load 20(g_sSamp) + 61: 60 SampledImage 58 59 + 65: 7(fvec4) ImageSampleExplicitLod 61 63 Grad 64 64 + Store 54(txval20) 65 + 70: 67 Load 69(g_tTex2di4) + 71: 18 Load 20(g_sSamp) + 73: 72 SampledImage 70 71 + 76: 29(ivec4) ImageSampleExplicitLod 73 75 Grad 64 64 + Store 66(txval21) 76 + 81: 78 Load 80(g_tTex2du4) + 82: 18 Load 20(g_sSamp) + 84: 83 SampledImage 81 82 + 88: 42(ivec4) ImageSampleExplicitLod 84 87 Grad 64 64 + Store 77(txval22) 88 + 93: 90 Load 92(g_tTex3df4) + 94: 18 Load 20(g_sSamp) + 96: 95 SampledImage 93 94 + 101: 7(fvec4) ImageSampleExplicitLod 96 98 Grad 100 100 + Store 89(txval30) 101 + 106: 103 Load 105(g_tTex3di4) + 107: 18 Load 20(g_sSamp) + 109: 108 SampledImage 106 107 + 111: 29(ivec4) ImageSampleExplicitLod 109 110 Grad 100 100 + Store 102(txval31) 111 + 116: 113 Load 115(g_tTex3du4) + 117: 18 Load 20(g_sSamp) + 119: 118 SampledImage 116 117 + 124: 42(ivec4) ImageSampleExplicitLod 119 123 Grad 100 100 + Store 112(txval32) 124 + 129: 126 Load 128(g_tTexcdf4) + 130: 18 Load 20(g_sSamp) + 132: 131 SampledImage 129 130 + 133: 7(fvec4) ImageSampleExplicitLod 132 98 Grad 100 100 + Store 125(txval40) 133 + 138: 135 Load 137(g_tTexcdi4) + 139: 18 Load 20(g_sSamp) + 141: 140 SampledImage 138 139 + 142: 29(ivec4) ImageSampleExplicitLod 141 110 Grad 100 100 + Store 134(txval41) 142 + 147: 144 Load 146(g_tTexcdu4) + 148: 18 Load 20(g_sSamp) + 150: 149 SampledImage 147 148 + 151: 42(ivec4) ImageSampleExplicitLod 150 123 Grad 100 100 + Store 143(txval42) 151 + 157: 12(ptr) AccessChain 153(vsout) 154 + Store 157 156 + 158:8(VS_OUTPUT) Load 153(vsout) + ReturnValue 158 + FunctionEnd 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 new file mode 100644 index 0000000..9da0f17 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out @@ -0,0 +1,712 @@ +hlsl.samplegrad.offset.dx10.frag +Shader version: 450 +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}) +0:28 Function Parameters: +0:? Sequence +0:31 Sequence +0:31 move second child to first child ( temp 4-component vector of float) +0:31 'txval10' ( temp 4-component vector of float) +0:31 textureGradOffset ( temp 4-component vector of float) +0:31 Construct combined texture-sampler ( temp sampler1D) +0:31 'g_tTex1df4' (layout( binding=0) uniform texture1D) +0:31 'g_sSamp' (layout( binding=0) uniform sampler) +0:31 Constant: +0:31 0.100000 +0:31 Constant: +0:31 1.100000 +0:31 Constant: +0:31 1.200000 +0:31 Constant: +0:31 1 (const int) +0:32 Sequence +0:32 move second child to first child ( temp 4-component vector of int) +0:32 'txval11' ( temp 4-component vector of int) +0:32 textureGradOffset ( temp 4-component vector of int) +0:32 Construct combined texture-sampler ( temp isampler1D) +0:32 'g_tTex1di4' ( uniform itexture1D) +0:32 'g_sSamp' (layout( binding=0) uniform sampler) +0:32 Constant: +0:32 0.200000 +0:32 Constant: +0:32 1.100000 +0:32 Constant: +0:32 1.200000 +0:32 Constant: +0:32 1 (const int) +0:33 Sequence +0:33 move second child to first child ( temp 4-component vector of uint) +0:33 'txval12' ( temp 4-component vector of uint) +0:33 textureGradOffset ( temp 4-component vector of uint) +0:33 Construct combined texture-sampler ( temp usampler1D) +0:33 'g_tTex1du4' ( uniform utexture1D) +0:33 'g_sSamp' (layout( binding=0) uniform sampler) +0:33 Constant: +0:33 0.300000 +0:33 Constant: +0:33 1.100000 +0:33 Constant: +0:33 1.200000 +0:33 Constant: +0:33 1 (const int) +0:35 Sequence +0:35 move second child to first child ( temp 4-component vector of float) +0:35 'txval20' ( temp 4-component vector of float) +0:35 textureGradOffset ( temp 4-component vector of float) +0:35 Construct combined texture-sampler ( temp sampler2D) +0:35 'g_tTex2df4' ( uniform texture2D) +0:35 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? Constant: +0:? 1 (const int) +0:? 0 (const int) +0:36 Sequence +0:36 move second child to first child ( temp 4-component vector of int) +0:36 'txval21' ( temp 4-component vector of int) +0:36 textureGradOffset ( temp 4-component vector of int) +0:36 Construct combined texture-sampler ( temp isampler2D) +0:36 'g_tTex2di4' ( uniform itexture2D) +0:36 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? Constant: +0:? 1 (const int) +0:? 1 (const int) +0:37 Sequence +0:37 move second child to first child ( temp 4-component vector of uint) +0:37 'txval22' ( temp 4-component vector of uint) +0:37 textureGradOffset ( temp 4-component vector of uint) +0:37 Construct combined texture-sampler ( temp usampler2D) +0:37 'g_tTex2du4' ( uniform utexture2D) +0:37 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? Constant: +0:? 1 (const int) +0:? -1 (const int) +0:39 Sequence +0:39 move second child to first child ( temp 4-component vector of float) +0:39 'txval30' ( temp 4-component vector of float) +0:39 textureGradOffset ( temp 4-component vector of float) +0:39 Construct combined texture-sampler ( temp sampler3D) +0:39 'g_tTex3df4' ( uniform texture3D) +0:39 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:? Constant: +0:? 1 (const int) +0:? 0 (const int) +0:? 1 (const int) +0:40 Sequence +0:40 move second child to first child ( temp 4-component vector of int) +0:40 'txval31' ( temp 4-component vector of int) +0:40 textureGradOffset ( temp 4-component vector of int) +0:40 Construct combined texture-sampler ( temp isampler3D) +0:40 'g_tTex3di4' ( uniform itexture3D) +0:40 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:? Constant: +0:? 1 (const int) +0:? 1 (const int) +0:? 1 (const int) +0:41 Sequence +0:41 move second child to first child ( temp 4-component vector of uint) +0:41 'txval32' ( temp 4-component vector of uint) +0:41 textureGradOffset ( temp 4-component vector of uint) +0:41 Construct combined texture-sampler ( temp usampler3D) +0:41 'g_tTex3du4' ( uniform utexture3D) +0:41 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:? Constant: +0:? 1 (const int) +0:? 0 (const int) +0:? -1 (const int) +0:45 move second child to first child ( temp 4-component vector of float) +0:45 Color: direct index for structure ( temp 4-component vector of float) +0:45 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:45 Constant: +0:45 0 (const int) +0:45 Constant: +0:45 1.000000 +0:45 1.000000 +0:45 1.000000 +0:45 1.000000 +0:46 move second child to first child ( temp float) +0:46 Depth: direct index for structure ( temp float) +0:46 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:46 Constant: +0:46 1 (const int) +0:46 Constant: +0:46 1.000000 +0:48 Branch: Return with expression +0:48 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:28 Function Definition: main( ( temp void) +0:28 Function Parameters: +0:? Sequence +0:28 Sequence +0:28 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:28 1 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1D) +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_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:? 'Color' (layout( location=0) out 4-component vector of float) +0:? 'Depth' ( out float FragDepth) + + +Linked fragment stage: + + +Shader version: 450 +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}) +0:28 Function Parameters: +0:? Sequence +0:31 Sequence +0:31 move second child to first child ( temp 4-component vector of float) +0:31 'txval10' ( temp 4-component vector of float) +0:31 textureGradOffset ( temp 4-component vector of float) +0:31 Construct combined texture-sampler ( temp sampler1D) +0:31 'g_tTex1df4' (layout( binding=0) uniform texture1D) +0:31 'g_sSamp' (layout( binding=0) uniform sampler) +0:31 Constant: +0:31 0.100000 +0:31 Constant: +0:31 1.100000 +0:31 Constant: +0:31 1.200000 +0:31 Constant: +0:31 1 (const int) +0:32 Sequence +0:32 move second child to first child ( temp 4-component vector of int) +0:32 'txval11' ( temp 4-component vector of int) +0:32 textureGradOffset ( temp 4-component vector of int) +0:32 Construct combined texture-sampler ( temp isampler1D) +0:32 'g_tTex1di4' ( uniform itexture1D) +0:32 'g_sSamp' (layout( binding=0) uniform sampler) +0:32 Constant: +0:32 0.200000 +0:32 Constant: +0:32 1.100000 +0:32 Constant: +0:32 1.200000 +0:32 Constant: +0:32 1 (const int) +0:33 Sequence +0:33 move second child to first child ( temp 4-component vector of uint) +0:33 'txval12' ( temp 4-component vector of uint) +0:33 textureGradOffset ( temp 4-component vector of uint) +0:33 Construct combined texture-sampler ( temp usampler1D) +0:33 'g_tTex1du4' ( uniform utexture1D) +0:33 'g_sSamp' (layout( binding=0) uniform sampler) +0:33 Constant: +0:33 0.300000 +0:33 Constant: +0:33 1.100000 +0:33 Constant: +0:33 1.200000 +0:33 Constant: +0:33 1 (const int) +0:35 Sequence +0:35 move second child to first child ( temp 4-component vector of float) +0:35 'txval20' ( temp 4-component vector of float) +0:35 textureGradOffset ( temp 4-component vector of float) +0:35 Construct combined texture-sampler ( temp sampler2D) +0:35 'g_tTex2df4' ( uniform texture2D) +0:35 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? Constant: +0:? 1 (const int) +0:? 0 (const int) +0:36 Sequence +0:36 move second child to first child ( temp 4-component vector of int) +0:36 'txval21' ( temp 4-component vector of int) +0:36 textureGradOffset ( temp 4-component vector of int) +0:36 Construct combined texture-sampler ( temp isampler2D) +0:36 'g_tTex2di4' ( uniform itexture2D) +0:36 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? Constant: +0:? 1 (const int) +0:? 1 (const int) +0:37 Sequence +0:37 move second child to first child ( temp 4-component vector of uint) +0:37 'txval22' ( temp 4-component vector of uint) +0:37 textureGradOffset ( temp 4-component vector of uint) +0:37 Construct combined texture-sampler ( temp usampler2D) +0:37 'g_tTex2du4' ( uniform utexture2D) +0:37 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? Constant: +0:? 1 (const int) +0:? -1 (const int) +0:39 Sequence +0:39 move second child to first child ( temp 4-component vector of float) +0:39 'txval30' ( temp 4-component vector of float) +0:39 textureGradOffset ( temp 4-component vector of float) +0:39 Construct combined texture-sampler ( temp sampler3D) +0:39 'g_tTex3df4' ( uniform texture3D) +0:39 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:? Constant: +0:? 1 (const int) +0:? 0 (const int) +0:? 1 (const int) +0:40 Sequence +0:40 move second child to first child ( temp 4-component vector of int) +0:40 'txval31' ( temp 4-component vector of int) +0:40 textureGradOffset ( temp 4-component vector of int) +0:40 Construct combined texture-sampler ( temp isampler3D) +0:40 'g_tTex3di4' ( uniform itexture3D) +0:40 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:? Constant: +0:? 1 (const int) +0:? 1 (const int) +0:? 1 (const int) +0:41 Sequence +0:41 move second child to first child ( temp 4-component vector of uint) +0:41 'txval32' ( temp 4-component vector of uint) +0:41 textureGradOffset ( temp 4-component vector of uint) +0:41 Construct combined texture-sampler ( temp usampler3D) +0:41 'g_tTex3du4' ( uniform utexture3D) +0:41 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? 1.300000 +0:? Constant: +0:? 1 (const int) +0:? 0 (const int) +0:? -1 (const int) +0:45 move second child to first child ( temp 4-component vector of float) +0:45 Color: direct index for structure ( temp 4-component vector of float) +0:45 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:45 Constant: +0:45 0 (const int) +0:45 Constant: +0:45 1.000000 +0:45 1.000000 +0:45 1.000000 +0:45 1.000000 +0:46 move second child to first child ( temp float) +0:46 Depth: direct index for structure ( temp float) +0:46 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:46 Constant: +0:46 1 (const int) +0:46 Constant: +0:46 1.000000 +0:48 Branch: Return with expression +0:48 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:28 Function Definition: main( ( temp void) +0:28 Function Parameters: +0:? Sequence +0:28 Sequence +0:28 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:28 1 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1D) +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_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:? 'Color' (layout( location=0) out 4-component vector of float) +0:? 'Depth' ( out float FragDepth) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 166 + + Capability Shader + Capability Sampled1D + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 149 153 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + MemberName 8(PS_OUTPUT) 1 "Depth" + Name 10 "@main(" + Name 13 "txval10" + Name 16 "g_tTex1df4" + Name 20 "g_sSamp" + Name 32 "txval11" + Name 35 "g_tTex1di4" + Name 45 "txval12" + Name 48 "g_tTex1du4" + Name 55 "txval20" + Name 58 "g_tTex2df4" + Name 70 "txval21" + Name 73 "g_tTex2di4" + Name 82 "txval22" + Name 85 "g_tTex2du4" + Name 96 "txval30" + Name 99 "g_tTex3df4" + Name 111 "txval31" + Name 114 "g_tTex3di4" + Name 122 "txval32" + Name 125 "g_tTex3du4" + Name 137 "psout" + Name 146 "flattenTemp" + Name 149 "Color" + Name 153 "Depth" + Name 156 "g_tTex1df4a" + Name 159 "g_tTexcdf4" + Name 162 "g_tTexcdi4" + Name 165 "g_tTexcdu4" + 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 58(g_tTex2df4) DescriptorSet 0 + Decorate 73(g_tTex2di4) DescriptorSet 0 + Decorate 85(g_tTex2du4) DescriptorSet 0 + 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 156(g_tTex1df4a) DescriptorSet 0 + Decorate 156(g_tTex1df4a) Binding 1 + Decorate 159(g_tTexcdf4) DescriptorSet 0 + Decorate 162(g_tTexcdi4) DescriptorSet 0 + Decorate 165(g_tTexcdu4) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8(PS_OUTPUT): TypeStruct 7(fvec4) 6(float) + 9: TypeFunction 8(PS_OUTPUT) + 12: TypePointer Function 7(fvec4) + 14: TypeImage 6(float) 1D 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: TypeSampledImage 14 + 24: 6(float) Constant 1036831949 + 25: 6(float) Constant 1066192077 + 26: 6(float) Constant 1067030938 + 27: TypeInt 32 1 + 28: 27(int) Constant 1 + 30: TypeVector 27(int) 4 + 31: TypePointer Function 30(ivec4) + 33: TypeImage 27(int) 1D sampled format:Unknown + 34: TypePointer UniformConstant 33 + 35(g_tTex1di4): 34(ptr) Variable UniformConstant + 38: TypeSampledImage 33 + 40: 6(float) Constant 1045220557 + 42: TypeInt 32 0 + 43: TypeVector 42(int) 4 + 44: TypePointer Function 43(ivec4) + 46: TypeImage 42(int) 1D sampled format:Unknown + 47: TypePointer UniformConstant 46 + 48(g_tTex1du4): 47(ptr) Variable UniformConstant + 51: TypeSampledImage 46 + 53: 6(float) Constant 1050253722 + 56: TypeImage 6(float) 2D sampled format:Unknown + 57: TypePointer UniformConstant 56 + 58(g_tTex2df4): 57(ptr) Variable UniformConstant + 61: TypeSampledImage 56 + 63: TypeVector 6(float) 2 + 64: 63(fvec2) ConstantComposite 24 40 + 65: 63(fvec2) ConstantComposite 25 26 + 66: TypeVector 27(int) 2 + 67: 27(int) Constant 0 + 68: 66(ivec2) ConstantComposite 28 67 + 71: TypeImage 27(int) 2D sampled format:Unknown + 72: TypePointer UniformConstant 71 + 73(g_tTex2di4): 72(ptr) Variable UniformConstant + 76: TypeSampledImage 71 + 78: 6(float) Constant 1053609165 + 79: 63(fvec2) ConstantComposite 53 78 + 80: 66(ivec2) ConstantComposite 28 28 + 83: TypeImage 42(int) 2D sampled format:Unknown + 84: TypePointer UniformConstant 83 + 85(g_tTex2du4): 84(ptr) Variable UniformConstant + 88: TypeSampledImage 83 + 90: 6(float) Constant 1056964608 + 91: 6(float) Constant 1058642330 + 92: 63(fvec2) ConstantComposite 90 91 + 93: 27(int) Constant 4294967295 + 94: 66(ivec2) ConstantComposite 28 93 + 97: TypeImage 6(float) 3D sampled format:Unknown + 98: TypePointer UniformConstant 97 + 99(g_tTex3df4): 98(ptr) Variable UniformConstant + 102: TypeSampledImage 97 + 104: TypeVector 6(float) 3 + 105: 104(fvec3) ConstantComposite 24 40 53 + 106: 6(float) Constant 1067869798 + 107: 104(fvec3) ConstantComposite 25 26 106 + 108: TypeVector 27(int) 3 + 109: 108(ivec3) ConstantComposite 28 67 28 + 112: TypeImage 27(int) 3D sampled format:Unknown + 113: TypePointer UniformConstant 112 + 114(g_tTex3di4): 113(ptr) Variable UniformConstant + 117: TypeSampledImage 112 + 119: 104(fvec3) ConstantComposite 78 90 91 + 120: 108(ivec3) ConstantComposite 28 28 28 + 123: TypeImage 42(int) 3D sampled format:Unknown + 124: TypePointer UniformConstant 123 + 125(g_tTex3du4): 124(ptr) Variable UniformConstant + 128: TypeSampledImage 123 + 130: 6(float) Constant 1060320051 + 131: 6(float) Constant 1061997773 + 132: 6(float) Constant 1063675494 + 133: 104(fvec3) ConstantComposite 130 131 132 + 134: 108(ivec3) ConstantComposite 28 67 93 + 136: TypePointer Function 8(PS_OUTPUT) + 138: 6(float) Constant 1065353216 + 139: 7(fvec4) ConstantComposite 138 138 138 138 + 141: TypePointer Function 6(float) + 148: TypePointer Output 7(fvec4) + 149(Color): 148(ptr) Variable Output + 152: TypePointer Output 6(float) + 153(Depth): 152(ptr) Variable Output +156(g_tTex1df4a): 15(ptr) Variable UniformConstant + 157: TypeImage 6(float) Cube sampled format:Unknown + 158: TypePointer UniformConstant 157 + 159(g_tTexcdf4): 158(ptr) Variable UniformConstant + 160: TypeImage 27(int) Cube sampled format:Unknown + 161: TypePointer UniformConstant 160 + 162(g_tTexcdi4): 161(ptr) Variable UniformConstant + 163: TypeImage 42(int) Cube sampled format:Unknown + 164: TypePointer UniformConstant 163 + 165(g_tTexcdu4): 164(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label +146(flattenTemp): 136(ptr) Variable Function + 147:8(PS_OUTPUT) FunctionCall 10(@main() + Store 146(flattenTemp) 147 + 150: 12(ptr) AccessChain 146(flattenTemp) 67 + 151: 7(fvec4) Load 150 + Store 149(Color) 151 + 154: 141(ptr) AccessChain 146(flattenTemp) 28 + 155: 6(float) Load 154 + Store 153(Depth) 155 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 13(txval10): 12(ptr) Variable Function + 32(txval11): 31(ptr) Variable Function + 45(txval12): 44(ptr) Variable Function + 55(txval20): 12(ptr) Variable Function + 70(txval21): 31(ptr) Variable Function + 82(txval22): 44(ptr) Variable Function + 96(txval30): 12(ptr) Variable Function + 111(txval31): 31(ptr) Variable Function + 122(txval32): 44(ptr) Variable Function + 137(psout): 136(ptr) Variable Function + 17: 14 Load 16(g_tTex1df4) + 21: 18 Load 20(g_sSamp) + 23: 22 SampledImage 17 21 + 29: 7(fvec4) ImageSampleExplicitLod 23 24 Grad ConstOffset 25 26 28 + Store 13(txval10) 29 + 36: 33 Load 35(g_tTex1di4) + 37: 18 Load 20(g_sSamp) + 39: 38 SampledImage 36 37 + 41: 30(ivec4) ImageSampleExplicitLod 39 40 Grad ConstOffset 25 26 28 + Store 32(txval11) 41 + 49: 46 Load 48(g_tTex1du4) + 50: 18 Load 20(g_sSamp) + 52: 51 SampledImage 49 50 + 54: 43(ivec4) ImageSampleExplicitLod 52 53 Grad ConstOffset 25 26 28 + Store 45(txval12) 54 + 59: 56 Load 58(g_tTex2df4) + 60: 18 Load 20(g_sSamp) + 62: 61 SampledImage 59 60 + 69: 7(fvec4) ImageSampleExplicitLod 62 64 Grad ConstOffset 64 65 68 + Store 55(txval20) 69 + 74: 71 Load 73(g_tTex2di4) + 75: 18 Load 20(g_sSamp) + 77: 76 SampledImage 74 75 + 81: 30(ivec4) ImageSampleExplicitLod 77 79 Grad ConstOffset 64 65 80 + Store 70(txval21) 81 + 86: 83 Load 85(g_tTex2du4) + 87: 18 Load 20(g_sSamp) + 89: 88 SampledImage 86 87 + 95: 43(ivec4) ImageSampleExplicitLod 89 92 Grad ConstOffset 64 65 94 + Store 82(txval22) 95 + 100: 97 Load 99(g_tTex3df4) + 101: 18 Load 20(g_sSamp) + 103: 102 SampledImage 100 101 + 110: 7(fvec4) ImageSampleExplicitLod 103 105 Grad ConstOffset 107 107 109 + Store 96(txval30) 110 + 115: 112 Load 114(g_tTex3di4) + 116: 18 Load 20(g_sSamp) + 118: 117 SampledImage 115 116 + 121: 30(ivec4) ImageSampleExplicitLod 118 119 Grad ConstOffset 107 107 120 + Store 111(txval31) 121 + 126: 123 Load 125(g_tTex3du4) + 127: 18 Load 20(g_sSamp) + 129: 128 SampledImage 126 127 + 135: 43(ivec4) ImageSampleExplicitLod 129 133 Grad ConstOffset 107 107 134 + Store 122(txval32) 135 + 140: 12(ptr) AccessChain 137(psout) 67 + Store 140 139 + 142: 141(ptr) AccessChain 137(psout) 28 + Store 142 138 + 143:8(PS_OUTPUT) Load 137(psout) + ReturnValue 143 + FunctionEnd 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 new file mode 100644 index 0000000..a2abd0f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out @@ -0,0 +1,523 @@ +hlsl.samplegrad.offsetarray.dx10.frag +Shader version: 450 +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}) +0:24 Function Parameters: +0:? Sequence +0:27 Sequence +0:27 move second child to first child ( temp 4-component vector of float) +0:27 'txval10' ( temp 4-component vector of float) +0:27 textureGradOffset ( temp 4-component vector of float) +0:27 Construct combined texture-sampler ( temp sampler1DArray) +0:27 'g_tTex1df4' (layout( binding=0) uniform texture1DArray) +0:27 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:27 Constant: +0:27 1.100000 +0:27 Constant: +0:27 1.200000 +0:27 Constant: +0:27 1 (const int) +0:28 Sequence +0:28 move second child to first child ( temp 4-component vector of int) +0:28 'txval11' ( temp 4-component vector of int) +0:28 textureGradOffset ( temp 4-component vector of int) +0:28 Construct combined texture-sampler ( temp isampler1DArray) +0:28 'g_tTex1di4' ( uniform itexture1DArray) +0:28 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:28 Constant: +0:28 1.100000 +0:28 Constant: +0:28 1.200000 +0:28 Constant: +0:28 1 (const int) +0:29 Sequence +0:29 move second child to first child ( temp 4-component vector of uint) +0:29 'txval12' ( temp 4-component vector of uint) +0:29 textureGradOffset ( temp 4-component vector of uint) +0:29 Construct combined texture-sampler ( temp usampler1DArray) +0:29 'g_tTex1du4' ( uniform utexture1DArray) +0:29 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:29 Constant: +0:29 1.100000 +0:29 Constant: +0:29 1.200000 +0:29 Constant: +0:29 1 (const int) +0:31 Sequence +0:31 move second child to first child ( temp 4-component vector of float) +0:31 'txval20' ( temp 4-component vector of float) +0:31 textureGradOffset ( temp 4-component vector of float) +0:31 Construct combined texture-sampler ( temp sampler2DArray) +0:31 'g_tTex2df4' ( uniform texture2DArray) +0:31 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? Constant: +0:? 1 (const int) +0:? 0 (const int) +0:32 Sequence +0:32 move second child to first child ( temp 4-component vector of int) +0:32 'txval21' ( temp 4-component vector of int) +0:32 textureGradOffset ( temp 4-component vector of int) +0:32 Construct combined texture-sampler ( temp isampler2DArray) +0:32 'g_tTex2di4' ( uniform itexture2DArray) +0:32 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? Constant: +0:? 1 (const int) +0:? 0 (const int) +0:33 Sequence +0:33 move second child to first child ( temp 4-component vector of uint) +0:33 'txval22' ( temp 4-component vector of uint) +0:33 textureGradOffset ( temp 4-component vector of uint) +0:33 Construct combined texture-sampler ( temp usampler2DArray) +0:33 'g_tTex2du4' ( uniform utexture2DArray) +0:33 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? Constant: +0:? 1 (const int) +0:? 0 (const int) +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 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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 move second child to first child ( temp float) +0:36 Depth: direct index for structure ( temp float) +0:36 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:36 Constant: +0:36 1 (const int) +0:36 Constant: +0:36 1.000000 +0:38 Branch: Return with expression +0:38 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:24 Function Definition: main( ( temp void) +0:24 Function Parameters: +0:? Sequence +0:24 Sequence +0:24 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1DArray) +0:? 'g_tTex1df4' (layout( binding=0) uniform texture1DArray) +0:? 'g_tTex1di4' ( uniform itexture1DArray) +0:? 'g_tTex1du4' ( uniform utexture1DArray) +0:? 'g_tTex2df4' ( uniform texture2DArray) +0:? 'g_tTex2di4' ( uniform itexture2DArray) +0:? 'g_tTex2du4' ( uniform utexture2DArray) +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) + + +Linked fragment stage: + + +Shader version: 450 +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}) +0:24 Function Parameters: +0:? Sequence +0:27 Sequence +0:27 move second child to first child ( temp 4-component vector of float) +0:27 'txval10' ( temp 4-component vector of float) +0:27 textureGradOffset ( temp 4-component vector of float) +0:27 Construct combined texture-sampler ( temp sampler1DArray) +0:27 'g_tTex1df4' (layout( binding=0) uniform texture1DArray) +0:27 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:27 Constant: +0:27 1.100000 +0:27 Constant: +0:27 1.200000 +0:27 Constant: +0:27 1 (const int) +0:28 Sequence +0:28 move second child to first child ( temp 4-component vector of int) +0:28 'txval11' ( temp 4-component vector of int) +0:28 textureGradOffset ( temp 4-component vector of int) +0:28 Construct combined texture-sampler ( temp isampler1DArray) +0:28 'g_tTex1di4' ( uniform itexture1DArray) +0:28 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:28 Constant: +0:28 1.100000 +0:28 Constant: +0:28 1.200000 +0:28 Constant: +0:28 1 (const int) +0:29 Sequence +0:29 move second child to first child ( temp 4-component vector of uint) +0:29 'txval12' ( temp 4-component vector of uint) +0:29 textureGradOffset ( temp 4-component vector of uint) +0:29 Construct combined texture-sampler ( temp usampler1DArray) +0:29 'g_tTex1du4' ( uniform utexture1DArray) +0:29 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:29 Constant: +0:29 1.100000 +0:29 Constant: +0:29 1.200000 +0:29 Constant: +0:29 1 (const int) +0:31 Sequence +0:31 move second child to first child ( temp 4-component vector of float) +0:31 'txval20' ( temp 4-component vector of float) +0:31 textureGradOffset ( temp 4-component vector of float) +0:31 Construct combined texture-sampler ( temp sampler2DArray) +0:31 'g_tTex2df4' ( uniform texture2DArray) +0:31 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? Constant: +0:? 1 (const int) +0:? 0 (const int) +0:32 Sequence +0:32 move second child to first child ( temp 4-component vector of int) +0:32 'txval21' ( temp 4-component vector of int) +0:32 textureGradOffset ( temp 4-component vector of int) +0:32 Construct combined texture-sampler ( temp isampler2DArray) +0:32 'g_tTex2di4' ( uniform itexture2DArray) +0:32 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? Constant: +0:? 1 (const int) +0:? 0 (const int) +0:33 Sequence +0:33 move second child to first child ( temp 4-component vector of uint) +0:33 'txval22' ( temp 4-component vector of uint) +0:33 textureGradOffset ( temp 4-component vector of uint) +0:33 Construct combined texture-sampler ( temp usampler2DArray) +0:33 'g_tTex2du4' ( uniform utexture2DArray) +0:33 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? Constant: +0:? 1.100000 +0:? 1.200000 +0:? Constant: +0:? 1 (const int) +0:? 0 (const int) +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 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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 move second child to first child ( temp float) +0:36 Depth: direct index for structure ( temp float) +0:36 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:36 Constant: +0:36 1 (const int) +0:36 Constant: +0:36 1.000000 +0:38 Branch: Return with expression +0:38 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:24 Function Definition: main( ( temp void) +0:24 Function Parameters: +0:? Sequence +0:24 Sequence +0:24 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1DArray) +0:? 'g_tTex1df4' (layout( binding=0) uniform texture1DArray) +0:? 'g_tTex1di4' ( uniform itexture1DArray) +0:? 'g_tTex1du4' ( uniform utexture1DArray) +0:? 'g_tTex2df4' ( uniform texture2DArray) +0:? 'g_tTex2di4' ( uniform itexture2DArray) +0:? 'g_tTex2du4' ( uniform utexture2DArray) +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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 120 + + Capability Shader + Capability Sampled1D + Capability SampledCubeArray + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 103 107 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + MemberName 8(PS_OUTPUT) 1 "Depth" + Name 10 "@main(" + Name 13 "txval10" + Name 16 "g_tTex1df4" + Name 20 "g_sSamp" + Name 35 "txval11" + Name 38 "g_tTex1di4" + Name 47 "txval12" + Name 50 "g_tTex1du4" + Name 56 "txval20" + Name 59 "g_tTex2df4" + Name 72 "txval21" + Name 75 "g_tTex2di4" + Name 81 "txval22" + Name 84 "g_tTex2du4" + Name 91 "psout" + Name 100 "flattenTemp" + Name 103 "Color" + Name 107 "Depth" + Name 110 "g_tTex1df4a" + Name 113 "g_tTexcdf4" + Name 116 "g_tTexcdi4" + Name 119 "g_tTexcdu4" + 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 38(g_tTex1di4) DescriptorSet 0 + Decorate 50(g_tTex1du4) DescriptorSet 0 + 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 110(g_tTex1df4a) DescriptorSet 0 + Decorate 110(g_tTex1df4a) Binding 1 + Decorate 113(g_tTexcdf4) DescriptorSet 0 + Decorate 116(g_tTexcdi4) DescriptorSet 0 + Decorate 119(g_tTexcdu4) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8(PS_OUTPUT): TypeStruct 7(fvec4) 6(float) + 9: TypeFunction 8(PS_OUTPUT) + 12: TypePointer Function 7(fvec4) + 14: TypeImage 6(float) 1D array 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: 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 1066192077 + 29: 6(float) Constant 1067030938 + 30: TypeInt 32 1 + 31: 30(int) Constant 1 + 33: TypeVector 30(int) 4 + 34: TypePointer Function 33(ivec4) + 36: TypeImage 30(int) 1D array sampled format:Unknown + 37: TypePointer UniformConstant 36 + 38(g_tTex1di4): 37(ptr) Variable UniformConstant + 41: TypeSampledImage 36 + 44: TypeInt 32 0 + 45: TypeVector 44(int) 4 + 46: TypePointer Function 45(ivec4) + 48: TypeImage 44(int) 1D array sampled format:Unknown + 49: TypePointer UniformConstant 48 + 50(g_tTex1du4): 49(ptr) Variable UniformConstant + 53: TypeSampledImage 48 + 57: TypeImage 6(float) 2D array sampled format:Unknown + 58: TypePointer UniformConstant 57 + 59(g_tTex2df4): 58(ptr) Variable UniformConstant + 62: TypeSampledImage 57 + 64: TypeVector 6(float) 3 + 65: 6(float) Constant 1050253722 + 66: 64(fvec3) ConstantComposite 25 26 65 + 67: 24(fvec2) ConstantComposite 28 29 + 68: TypeVector 30(int) 2 + 69: 30(int) Constant 0 + 70: 68(ivec2) ConstantComposite 31 69 + 73: TypeImage 30(int) 2D array sampled format:Unknown + 74: TypePointer UniformConstant 73 + 75(g_tTex2di4): 74(ptr) Variable UniformConstant + 78: TypeSampledImage 73 + 82: TypeImage 44(int) 2D array sampled format:Unknown + 83: TypePointer UniformConstant 82 + 84(g_tTex2du4): 83(ptr) Variable UniformConstant + 87: TypeSampledImage 82 + 90: TypePointer Function 8(PS_OUTPUT) + 92: 6(float) Constant 1065353216 + 93: 7(fvec4) ConstantComposite 92 92 92 92 + 95: TypePointer Function 6(float) + 102: TypePointer Output 7(fvec4) + 103(Color): 102(ptr) Variable Output + 106: TypePointer Output 6(float) + 107(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 + 113(g_tTexcdf4): 112(ptr) Variable UniformConstant + 114: TypeImage 30(int) Cube array sampled format:Unknown + 115: TypePointer UniformConstant 114 + 116(g_tTexcdi4): 115(ptr) Variable UniformConstant + 117: TypeImage 44(int) Cube array sampled format:Unknown + 118: TypePointer UniformConstant 117 + 119(g_tTexcdu4): 118(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label +100(flattenTemp): 90(ptr) Variable Function + 101:8(PS_OUTPUT) FunctionCall 10(@main() + Store 100(flattenTemp) 101 + 104: 12(ptr) AccessChain 100(flattenTemp) 69 + 105: 7(fvec4) Load 104 + Store 103(Color) 105 + 108: 95(ptr) AccessChain 100(flattenTemp) 31 + 109: 6(float) Load 108 + Store 107(Depth) 109 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 13(txval10): 12(ptr) Variable Function + 35(txval11): 34(ptr) Variable Function + 47(txval12): 46(ptr) Variable Function + 56(txval20): 12(ptr) Variable Function + 72(txval21): 34(ptr) Variable Function + 81(txval22): 46(ptr) Variable Function + 91(psout): 90(ptr) Variable Function + 17: 14 Load 16(g_tTex1df4) + 21: 18 Load 20(g_sSamp) + 23: 22 SampledImage 17 21 + 32: 7(fvec4) ImageSampleExplicitLod 23 27 Grad ConstOffset 28 29 31 + Store 13(txval10) 32 + 39: 36 Load 38(g_tTex1di4) + 40: 18 Load 20(g_sSamp) + 42: 41 SampledImage 39 40 + 43: 33(ivec4) ImageSampleExplicitLod 42 27 Grad ConstOffset 28 29 31 + Store 35(txval11) 43 + 51: 48 Load 50(g_tTex1du4) + 52: 18 Load 20(g_sSamp) + 54: 53 SampledImage 51 52 + 55: 45(ivec4) ImageSampleExplicitLod 54 27 Grad ConstOffset 28 29 31 + Store 47(txval12) 55 + 60: 57 Load 59(g_tTex2df4) + 61: 18 Load 20(g_sSamp) + 63: 62 SampledImage 60 61 + 71: 7(fvec4) ImageSampleExplicitLod 63 66 Grad ConstOffset 67 67 70 + Store 56(txval20) 71 + 76: 73 Load 75(g_tTex2di4) + 77: 18 Load 20(g_sSamp) + 79: 78 SampledImage 76 77 + 80: 33(ivec4) ImageSampleExplicitLod 79 66 Grad ConstOffset 67 67 70 + Store 72(txval21) 80 + 85: 82 Load 84(g_tTex2du4) + 86: 18 Load 20(g_sSamp) + 88: 87 SampledImage 85 86 + 89: 45(ivec4) ImageSampleExplicitLod 88 66 Grad ConstOffset 67 67 70 + Store 81(txval22) 89 + 94: 12(ptr) AccessChain 91(psout) 69 + Store 94 93 + 96: 95(ptr) AccessChain 91(psout) 31 + Store 96 92 + 97:8(PS_OUTPUT) Load 91(psout) + ReturnValue 97 + FunctionEnd 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 new file mode 100644 index 0000000..88c7de9 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out @@ -0,0 +1,574 @@ +hlsl.samplelevel.array.dx10.frag +Shader version: 450 +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}) +0:24 Function Parameters: +0:? Sequence +0:27 Sequence +0:27 move second child to first child ( temp 4-component vector of float) +0:27 'txval10' ( temp 4-component vector of float) +0:27 textureLod ( temp 4-component vector of float) +0:27 Construct combined texture-sampler ( temp sampler1DArray) +0:27 'g_tTex1df4a' (layout( binding=1) uniform texture1DArray) +0:27 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:27 Constant: +0:27 0.750000 +0:28 Sequence +0:28 move second child to first child ( temp 4-component vector of int) +0:28 'txval11' ( temp 4-component vector of int) +0:28 textureLod ( temp 4-component vector of int) +0:28 Construct combined texture-sampler ( temp isampler1DArray) +0:28 'g_tTex1di4a' ( uniform itexture1DArray) +0:28 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.200000 +0:? 0.300000 +0:28 Constant: +0:28 0.750000 +0:29 Sequence +0:29 move second child to first child ( temp 4-component vector of uint) +0:29 'txval12' ( temp 4-component vector of uint) +0:29 textureLod ( temp 4-component vector of uint) +0:29 Construct combined texture-sampler ( temp usampler1DArray) +0:29 'g_tTex1du4a' ( uniform utexture1DArray) +0:29 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:29 Constant: +0:29 0.750000 +0:31 Sequence +0:31 move second child to first child ( temp 4-component vector of float) +0:31 'txval20' ( temp 4-component vector of float) +0:31 textureLod ( temp 4-component vector of float) +0:31 Construct combined texture-sampler ( temp sampler2DArray) +0:31 'g_tTex2df4a' ( uniform texture2DArray) +0:31 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:31 Constant: +0:31 0.750000 +0:32 Sequence +0:32 move second child to first child ( temp 4-component vector of int) +0:32 'txval21' ( temp 4-component vector of int) +0:32 textureLod ( temp 4-component vector of int) +0:32 Construct combined texture-sampler ( temp isampler2DArray) +0:32 'g_tTex2di4a' ( uniform itexture2DArray) +0:32 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:? 0.500000 +0:32 Constant: +0:32 0.750000 +0:33 Sequence +0:33 move second child to first child ( temp 4-component vector of uint) +0:33 'txval22' ( temp 4-component vector of uint) +0:33 textureLod ( temp 4-component vector of uint) +0:33 Construct combined texture-sampler ( temp usampler2DArray) +0:33 'g_tTex2du4a' ( uniform utexture2DArray) +0:33 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:? 0.700000 +0:33 Constant: +0:33 0.750000 +0:35 Sequence +0:35 move second child to first child ( temp 4-component vector of float) +0:35 'txval40' ( temp 4-component vector of float) +0:35 textureLod ( temp 4-component vector of float) +0:35 Construct combined texture-sampler ( temp samplerCubeArray) +0:35 'g_tTexcdf4a' ( uniform textureCubeArray) +0:35 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? 0.400000 +0:35 Constant: +0:35 0.750000 +0:36 Sequence +0:36 move second child to first child ( temp 4-component vector of int) +0:36 'txval41' ( temp 4-component vector of int) +0:36 textureLod ( temp 4-component vector of int) +0:36 Construct combined texture-sampler ( temp isamplerCubeArray) +0:36 'g_tTexcdi4a' ( uniform itextureCubeArray) +0:36 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:? 0.700000 +0:36 Constant: +0:36 0.750000 +0:37 Sequence +0:37 move second child to first child ( temp 4-component vector of uint) +0:37 'txval42' ( temp 4-component vector of uint) +0:37 textureLod ( temp 4-component vector of uint) +0:37 Construct combined texture-sampler ( temp usamplerCubeArray) +0:37 'g_tTexcdu4a' ( uniform utextureCubeArray) +0:37 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:? 1.000000 +0:37 Constant: +0:37 0.750000 +0:39 move second child to first child ( temp 4-component vector of float) +0:39 Color: direct index for structure ( temp 4-component vector of float) +0:39 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:39 Constant: +0:39 0 (const int) +0:39 Constant: +0:39 1.000000 +0:39 1.000000 +0:39 1.000000 +0:39 1.000000 +0:40 move second child to first child ( temp float) +0:40 Depth: direct index for structure ( temp float) +0:40 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:40 Constant: +0:40 1 (const int) +0:40 Constant: +0:40 1.000000 +0:42 Branch: Return with expression +0:42 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:24 Function Definition: main( ( temp void) +0:24 Function Parameters: +0:? Sequence +0:24 Sequence +0:24 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1DArray) +0:? 'g_tTex1df4' (layout( binding=0) 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) + + +Linked fragment stage: + + +Shader version: 450 +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}) +0:24 Function Parameters: +0:? Sequence +0:27 Sequence +0:27 move second child to first child ( temp 4-component vector of float) +0:27 'txval10' ( temp 4-component vector of float) +0:27 textureLod ( temp 4-component vector of float) +0:27 Construct combined texture-sampler ( temp sampler1DArray) +0:27 'g_tTex1df4a' (layout( binding=1) uniform texture1DArray) +0:27 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:27 Constant: +0:27 0.750000 +0:28 Sequence +0:28 move second child to first child ( temp 4-component vector of int) +0:28 'txval11' ( temp 4-component vector of int) +0:28 textureLod ( temp 4-component vector of int) +0:28 Construct combined texture-sampler ( temp isampler1DArray) +0:28 'g_tTex1di4a' ( uniform itexture1DArray) +0:28 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.200000 +0:? 0.300000 +0:28 Constant: +0:28 0.750000 +0:29 Sequence +0:29 move second child to first child ( temp 4-component vector of uint) +0:29 'txval12' ( temp 4-component vector of uint) +0:29 textureLod ( temp 4-component vector of uint) +0:29 Construct combined texture-sampler ( temp usampler1DArray) +0:29 'g_tTex1du4a' ( uniform utexture1DArray) +0:29 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:29 Constant: +0:29 0.750000 +0:31 Sequence +0:31 move second child to first child ( temp 4-component vector of float) +0:31 'txval20' ( temp 4-component vector of float) +0:31 textureLod ( temp 4-component vector of float) +0:31 Construct combined texture-sampler ( temp sampler2DArray) +0:31 'g_tTex2df4a' ( uniform texture2DArray) +0:31 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:31 Constant: +0:31 0.750000 +0:32 Sequence +0:32 move second child to first child ( temp 4-component vector of int) +0:32 'txval21' ( temp 4-component vector of int) +0:32 textureLod ( temp 4-component vector of int) +0:32 Construct combined texture-sampler ( temp isampler2DArray) +0:32 'g_tTex2di4a' ( uniform itexture2DArray) +0:32 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:? 0.500000 +0:32 Constant: +0:32 0.750000 +0:33 Sequence +0:33 move second child to first child ( temp 4-component vector of uint) +0:33 'txval22' ( temp 4-component vector of uint) +0:33 textureLod ( temp 4-component vector of uint) +0:33 Construct combined texture-sampler ( temp usampler2DArray) +0:33 'g_tTex2du4a' ( uniform utexture2DArray) +0:33 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:? 0.700000 +0:33 Constant: +0:33 0.750000 +0:35 Sequence +0:35 move second child to first child ( temp 4-component vector of float) +0:35 'txval40' ( temp 4-component vector of float) +0:35 textureLod ( temp 4-component vector of float) +0:35 Construct combined texture-sampler ( temp samplerCubeArray) +0:35 'g_tTexcdf4a' ( uniform textureCubeArray) +0:35 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? 0.400000 +0:35 Constant: +0:35 0.750000 +0:36 Sequence +0:36 move second child to first child ( temp 4-component vector of int) +0:36 'txval41' ( temp 4-component vector of int) +0:36 textureLod ( temp 4-component vector of int) +0:36 Construct combined texture-sampler ( temp isamplerCubeArray) +0:36 'g_tTexcdi4a' ( uniform itextureCubeArray) +0:36 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:? 0.700000 +0:36 Constant: +0:36 0.750000 +0:37 Sequence +0:37 move second child to first child ( temp 4-component vector of uint) +0:37 'txval42' ( temp 4-component vector of uint) +0:37 textureLod ( temp 4-component vector of uint) +0:37 Construct combined texture-sampler ( temp usamplerCubeArray) +0:37 'g_tTexcdu4a' ( uniform utextureCubeArray) +0:37 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:? 1.000000 +0:37 Constant: +0:37 0.750000 +0:39 move second child to first child ( temp 4-component vector of float) +0:39 Color: direct index for structure ( temp 4-component vector of float) +0:39 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:39 Constant: +0:39 0 (const int) +0:39 Constant: +0:39 1.000000 +0:39 1.000000 +0:39 1.000000 +0:39 1.000000 +0:40 move second child to first child ( temp float) +0:40 Depth: direct index for structure ( temp float) +0:40 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:40 Constant: +0:40 1 (const int) +0:40 Constant: +0:40 1.000000 +0:42 Branch: Return with expression +0:42 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:24 Function Definition: main( ( temp void) +0:24 Function Parameters: +0:? Sequence +0:24 Sequence +0:24 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1DArray) +0:? 'g_tTex1df4' (layout( binding=0) 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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 147 + + Capability Shader + Capability Sampled1D + Capability SampledCubeArray + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 139 143 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + MemberName 8(PS_OUTPUT) 1 "Depth" + Name 10 "@main(" + Name 13 "txval10" + Name 16 "g_tTex1df4a" + Name 20 "g_sSamp" + Name 33 "txval11" + Name 36 "g_tTex1di4a" + Name 47 "txval12" + Name 50 "g_tTex1du4a" + Name 58 "txval20" + Name 61 "g_tTex2df4a" + Name 69 "txval21" + Name 72 "g_tTex2di4a" + Name 80 "txval22" + Name 83 "g_tTex2du4a" + Name 92 "txval40" + Name 95 "g_tTexcdf4a" + Name 102 "txval41" + Name 105 "g_tTexcdi4a" + Name 112 "txval42" + Name 115 "g_tTexcdu4a" + Name 126 "psout" + Name 136 "flattenTemp" + Name 139 "Color" + Name 143 "Depth" + Name 146 "g_tTex1df4" + Decorate 16(g_tTex1df4a) DescriptorSet 0 + Decorate 16(g_tTex1df4a) Binding 1 + Decorate 20(g_sSamp) DescriptorSet 0 + Decorate 20(g_sSamp) Binding 0 + Decorate 36(g_tTex1di4a) DescriptorSet 0 + Decorate 50(g_tTex1du4a) DescriptorSet 0 + Decorate 61(g_tTex2df4a) DescriptorSet 0 + Decorate 72(g_tTex2di4a) DescriptorSet 0 + Decorate 83(g_tTex2du4a) DescriptorSet 0 + 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 146(g_tTex1df4) DescriptorSet 0 + Decorate 146(g_tTex1df4) Binding 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8(PS_OUTPUT): TypeStruct 7(fvec4) 6(float) + 9: TypeFunction 8(PS_OUTPUT) + 12: TypePointer Function 7(fvec4) + 14: TypeImage 6(float) 1D 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: 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 + 30: TypeInt 32 1 + 31: TypeVector 30(int) 4 + 32: TypePointer Function 31(ivec4) + 34: TypeImage 30(int) 1D array sampled format:Unknown + 35: TypePointer UniformConstant 34 + 36(g_tTex1di4a): 35(ptr) Variable UniformConstant + 39: TypeSampledImage 34 + 41: 6(float) Constant 1050253722 + 42: 24(fvec2) ConstantComposite 26 41 + 44: TypeInt 32 0 + 45: TypeVector 44(int) 4 + 46: TypePointer Function 45(ivec4) + 48: TypeImage 44(int) 1D array sampled format:Unknown + 49: TypePointer UniformConstant 48 + 50(g_tTex1du4a): 49(ptr) Variable UniformConstant + 53: TypeSampledImage 48 + 55: 6(float) Constant 1053609165 + 56: 24(fvec2) ConstantComposite 41 55 + 59: TypeImage 6(float) 2D array sampled format:Unknown + 60: TypePointer UniformConstant 59 + 61(g_tTex2df4a): 60(ptr) Variable UniformConstant + 64: TypeSampledImage 59 + 66: TypeVector 6(float) 3 + 67: 66(fvec3) ConstantComposite 25 26 41 + 70: TypeImage 30(int) 2D array sampled format:Unknown + 71: TypePointer UniformConstant 70 + 72(g_tTex2di4a): 71(ptr) Variable UniformConstant + 75: TypeSampledImage 70 + 77: 6(float) Constant 1056964608 + 78: 66(fvec3) ConstantComposite 41 55 77 + 81: TypeImage 44(int) 2D array sampled format:Unknown + 82: TypePointer UniformConstant 81 + 83(g_tTex2du4a): 82(ptr) Variable UniformConstant + 86: TypeSampledImage 81 + 88: 6(float) Constant 1058642330 + 89: 6(float) Constant 1060320051 + 90: 66(fvec3) ConstantComposite 77 88 89 + 93: TypeImage 6(float) Cube array sampled format:Unknown + 94: TypePointer UniformConstant 93 + 95(g_tTexcdf4a): 94(ptr) Variable UniformConstant + 98: TypeSampledImage 93 + 100: 7(fvec4) ConstantComposite 25 26 41 55 + 103: TypeImage 30(int) Cube array sampled format:Unknown + 104: TypePointer UniformConstant 103 +105(g_tTexcdi4a): 104(ptr) Variable UniformConstant + 108: TypeSampledImage 103 + 110: 7(fvec4) ConstantComposite 55 77 88 89 + 113: TypeImage 44(int) Cube array sampled format:Unknown + 114: TypePointer UniformConstant 113 +115(g_tTexcdu4a): 114(ptr) Variable UniformConstant + 118: TypeSampledImage 113 + 120: 6(float) Constant 1061997773 + 121: 6(float) Constant 1063675494 + 122: 6(float) Constant 1065353216 + 123: 7(fvec4) ConstantComposite 89 120 121 122 + 125: TypePointer Function 8(PS_OUTPUT) + 127: 30(int) Constant 0 + 128: 7(fvec4) ConstantComposite 122 122 122 122 + 130: 30(int) Constant 1 + 131: TypePointer Function 6(float) + 138: TypePointer Output 7(fvec4) + 139(Color): 138(ptr) Variable Output + 142: TypePointer Output 6(float) + 143(Depth): 142(ptr) Variable Output + 146(g_tTex1df4): 15(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label +136(flattenTemp): 125(ptr) Variable Function + 137:8(PS_OUTPUT) FunctionCall 10(@main() + Store 136(flattenTemp) 137 + 140: 12(ptr) AccessChain 136(flattenTemp) 127 + 141: 7(fvec4) Load 140 + Store 139(Color) 141 + 144: 131(ptr) AccessChain 136(flattenTemp) 130 + 145: 6(float) Load 144 + Store 143(Depth) 145 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 13(txval10): 12(ptr) Variable Function + 33(txval11): 32(ptr) Variable Function + 47(txval12): 46(ptr) Variable Function + 58(txval20): 12(ptr) Variable Function + 69(txval21): 32(ptr) Variable Function + 80(txval22): 46(ptr) Variable Function + 92(txval40): 12(ptr) Variable Function + 102(txval41): 32(ptr) Variable Function + 112(txval42): 46(ptr) Variable Function + 126(psout): 125(ptr) Variable Function + 17: 14 Load 16(g_tTex1df4a) + 21: 18 Load 20(g_sSamp) + 23: 22 SampledImage 17 21 + 29: 7(fvec4) ImageSampleExplicitLod 23 27 Lod 28 + Store 13(txval10) 29 + 37: 34 Load 36(g_tTex1di4a) + 38: 18 Load 20(g_sSamp) + 40: 39 SampledImage 37 38 + 43: 31(ivec4) ImageSampleExplicitLod 40 42 Lod 28 + Store 33(txval11) 43 + 51: 48 Load 50(g_tTex1du4a) + 52: 18 Load 20(g_sSamp) + 54: 53 SampledImage 51 52 + 57: 45(ivec4) ImageSampleExplicitLod 54 56 Lod 28 + Store 47(txval12) 57 + 62: 59 Load 61(g_tTex2df4a) + 63: 18 Load 20(g_sSamp) + 65: 64 SampledImage 62 63 + 68: 7(fvec4) ImageSampleExplicitLod 65 67 Lod 28 + Store 58(txval20) 68 + 73: 70 Load 72(g_tTex2di4a) + 74: 18 Load 20(g_sSamp) + 76: 75 SampledImage 73 74 + 79: 31(ivec4) ImageSampleExplicitLod 76 78 Lod 28 + Store 69(txval21) 79 + 84: 81 Load 83(g_tTex2du4a) + 85: 18 Load 20(g_sSamp) + 87: 86 SampledImage 84 85 + 91: 45(ivec4) ImageSampleExplicitLod 87 90 Lod 28 + Store 80(txval22) 91 + 96: 93 Load 95(g_tTexcdf4a) + 97: 18 Load 20(g_sSamp) + 99: 98 SampledImage 96 97 + 101: 7(fvec4) ImageSampleExplicitLod 99 100 Lod 28 + Store 92(txval40) 101 + 106: 103 Load 105(g_tTexcdi4a) + 107: 18 Load 20(g_sSamp) + 109: 108 SampledImage 106 107 + 111: 31(ivec4) ImageSampleExplicitLod 109 110 Lod 28 + Store 102(txval41) 111 + 116: 113 Load 115(g_tTexcdu4a) + 117: 18 Load 20(g_sSamp) + 119: 118 SampledImage 116 117 + 124: 45(ivec4) ImageSampleExplicitLod 119 123 Lod 28 + Store 112(txval42) 124 + 129: 12(ptr) AccessChain 126(psout) 127 + Store 129 128 + 132: 131(ptr) AccessChain 126(psout) 130 + Store 132 122 + 133:8(PS_OUTPUT) Load 126(psout) + ReturnValue 133 + FunctionEnd 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 new file mode 100644 index 0000000..7d9f268 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out @@ -0,0 +1,680 @@ +hlsl.samplelevel.basic.dx10.frag +Shader version: 450 +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}) +0:29 Function Parameters: +0:? Sequence +0:32 Sequence +0:32 move second child to first child ( temp 4-component vector of float) +0:32 'txval10' ( temp 4-component vector of float) +0:32 textureLod ( temp 4-component vector of float) +0:32 Construct combined texture-sampler ( temp sampler1D) +0:32 'g_tTex1df4' (layout( binding=0) uniform texture1D) +0:32 'g_sSamp' (layout( binding=0) uniform sampler) +0:32 Constant: +0:32 0.100000 +0:32 Constant: +0:32 0.750000 +0:33 Sequence +0:33 move second child to first child ( temp 4-component vector of int) +0:33 'txval11' ( temp 4-component vector of int) +0:33 textureLod ( temp 4-component vector of int) +0:33 Construct combined texture-sampler ( temp isampler1D) +0:33 'g_tTex1di4' ( uniform itexture1D) +0:33 'g_sSamp' (layout( binding=0) uniform sampler) +0:33 Constant: +0:33 0.200000 +0:33 Constant: +0:33 0.750000 +0:34 Sequence +0:34 move second child to first child ( temp 4-component vector of uint) +0:34 'txval12' ( temp 4-component vector of uint) +0:34 textureLod ( temp 4-component vector of uint) +0:34 Construct combined texture-sampler ( temp usampler1D) +0:34 'g_tTex1du4' ( uniform utexture1D) +0:34 'g_sSamp' (layout( binding=0) uniform sampler) +0:34 Constant: +0:34 0.300000 +0:34 Constant: +0:34 0.750000 +0:36 Sequence +0:36 move second child to first child ( temp 4-component vector of float) +0:36 'txval20' ( temp 4-component vector of float) +0:36 textureLod ( temp 4-component vector of float) +0:36 Construct combined texture-sampler ( temp sampler2D) +0:36 'g_tTex2df4' ( uniform texture2D) +0:36 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:36 Constant: +0:36 0.750000 +0:37 Sequence +0:37 move second child to first child ( temp 4-component vector of int) +0:37 'txval21' ( temp 4-component vector of int) +0:37 textureLod ( temp 4-component vector of int) +0:37 Construct combined texture-sampler ( temp isampler2D) +0:37 'g_tTex2di4' ( uniform itexture2D) +0:37 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:37 Constant: +0:37 0.750000 +0:38 Sequence +0:38 move second child to first child ( temp 4-component vector of uint) +0:38 'txval22' ( temp 4-component vector of uint) +0:38 textureLod ( temp 4-component vector of uint) +0:38 Construct combined texture-sampler ( temp usampler2D) +0:38 'g_tTex2du4' ( uniform utexture2D) +0:38 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:38 Constant: +0:38 0.750000 +0:40 Sequence +0:40 move second child to first child ( temp 4-component vector of float) +0:40 'txval30' ( temp 4-component vector of float) +0:40 textureLod ( temp 4-component vector of float) +0:40 Construct combined texture-sampler ( temp sampler3D) +0:40 'g_tTex3df4' ( uniform texture3D) +0:40 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:40 Constant: +0:40 0.750000 +0:41 Sequence +0:41 move second child to first child ( temp 4-component vector of int) +0:41 'txval31' ( temp 4-component vector of int) +0:41 textureLod ( temp 4-component vector of int) +0:41 Construct combined texture-sampler ( temp isampler3D) +0:41 'g_tTex3di4' ( uniform itexture3D) +0:41 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:41 Constant: +0:41 0.750000 +0:42 Sequence +0:42 move second child to first child ( temp 4-component vector of uint) +0:42 'txval32' ( temp 4-component vector of uint) +0:42 textureLod ( temp 4-component vector of uint) +0:42 Construct combined texture-sampler ( temp usampler3D) +0:42 'g_tTex3du4' ( uniform utexture3D) +0:42 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:42 Constant: +0:42 0.750000 +0:44 Sequence +0:44 move second child to first child ( temp 4-component vector of float) +0:44 'txval40' ( temp 4-component vector of float) +0:44 textureLod ( temp 4-component vector of float) +0:44 Construct combined texture-sampler ( temp samplerCube) +0:44 'g_tTexcdf4' ( uniform textureCube) +0:44 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:44 Constant: +0:44 0.750000 +0:45 Sequence +0:45 move second child to first child ( temp 4-component vector of int) +0:45 'txval41' ( temp 4-component vector of int) +0:45 textureLod ( temp 4-component vector of int) +0:45 Construct combined texture-sampler ( temp isamplerCube) +0:45 'g_tTexcdi4' ( uniform itextureCube) +0:45 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:45 Constant: +0:45 0.750000 +0:46 Sequence +0:46 move second child to first child ( temp 4-component vector of uint) +0:46 'txval42' ( temp 4-component vector of uint) +0:46 textureLod ( temp 4-component vector of uint) +0:46 Construct combined texture-sampler ( temp usamplerCube) +0:46 'g_tTexcdu4' ( uniform utextureCube) +0:46 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:46 Constant: +0:46 0.750000 +0:48 move second child to first child ( temp 4-component vector of float) +0:48 Color: direct index for structure ( temp 4-component vector of float) +0:48 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:48 Constant: +0:48 0 (const int) +0:48 Constant: +0:48 1.000000 +0:48 1.000000 +0:48 1.000000 +0:48 1.000000 +0:49 move second child to first child ( temp float) +0:49 Depth: direct index for structure ( temp float) +0:49 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:49 Constant: +0:49 1 (const int) +0:49 Constant: +0:49 1.000000 +0:51 Branch: Return with expression +0:51 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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 Color, temp float Depth}) +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: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: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: +0:29 1 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_sSamp2d' ( uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1D) +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_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:? 'Color' (layout( location=0) out 4-component vector of float) +0:? 'Depth' ( out float FragDepth) + + +Linked fragment stage: + + +Shader version: 450 +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}) +0:29 Function Parameters: +0:? Sequence +0:32 Sequence +0:32 move second child to first child ( temp 4-component vector of float) +0:32 'txval10' ( temp 4-component vector of float) +0:32 textureLod ( temp 4-component vector of float) +0:32 Construct combined texture-sampler ( temp sampler1D) +0:32 'g_tTex1df4' (layout( binding=0) uniform texture1D) +0:32 'g_sSamp' (layout( binding=0) uniform sampler) +0:32 Constant: +0:32 0.100000 +0:32 Constant: +0:32 0.750000 +0:33 Sequence +0:33 move second child to first child ( temp 4-component vector of int) +0:33 'txval11' ( temp 4-component vector of int) +0:33 textureLod ( temp 4-component vector of int) +0:33 Construct combined texture-sampler ( temp isampler1D) +0:33 'g_tTex1di4' ( uniform itexture1D) +0:33 'g_sSamp' (layout( binding=0) uniform sampler) +0:33 Constant: +0:33 0.200000 +0:33 Constant: +0:33 0.750000 +0:34 Sequence +0:34 move second child to first child ( temp 4-component vector of uint) +0:34 'txval12' ( temp 4-component vector of uint) +0:34 textureLod ( temp 4-component vector of uint) +0:34 Construct combined texture-sampler ( temp usampler1D) +0:34 'g_tTex1du4' ( uniform utexture1D) +0:34 'g_sSamp' (layout( binding=0) uniform sampler) +0:34 Constant: +0:34 0.300000 +0:34 Constant: +0:34 0.750000 +0:36 Sequence +0:36 move second child to first child ( temp 4-component vector of float) +0:36 'txval20' ( temp 4-component vector of float) +0:36 textureLod ( temp 4-component vector of float) +0:36 Construct combined texture-sampler ( temp sampler2D) +0:36 'g_tTex2df4' ( uniform texture2D) +0:36 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:36 Constant: +0:36 0.750000 +0:37 Sequence +0:37 move second child to first child ( temp 4-component vector of int) +0:37 'txval21' ( temp 4-component vector of int) +0:37 textureLod ( temp 4-component vector of int) +0:37 Construct combined texture-sampler ( temp isampler2D) +0:37 'g_tTex2di4' ( uniform itexture2D) +0:37 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:37 Constant: +0:37 0.750000 +0:38 Sequence +0:38 move second child to first child ( temp 4-component vector of uint) +0:38 'txval22' ( temp 4-component vector of uint) +0:38 textureLod ( temp 4-component vector of uint) +0:38 Construct combined texture-sampler ( temp usampler2D) +0:38 'g_tTex2du4' ( uniform utexture2D) +0:38 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:38 Constant: +0:38 0.750000 +0:40 Sequence +0:40 move second child to first child ( temp 4-component vector of float) +0:40 'txval30' ( temp 4-component vector of float) +0:40 textureLod ( temp 4-component vector of float) +0:40 Construct combined texture-sampler ( temp sampler3D) +0:40 'g_tTex3df4' ( uniform texture3D) +0:40 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:40 Constant: +0:40 0.750000 +0:41 Sequence +0:41 move second child to first child ( temp 4-component vector of int) +0:41 'txval31' ( temp 4-component vector of int) +0:41 textureLod ( temp 4-component vector of int) +0:41 Construct combined texture-sampler ( temp isampler3D) +0:41 'g_tTex3di4' ( uniform itexture3D) +0:41 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:41 Constant: +0:41 0.750000 +0:42 Sequence +0:42 move second child to first child ( temp 4-component vector of uint) +0:42 'txval32' ( temp 4-component vector of uint) +0:42 textureLod ( temp 4-component vector of uint) +0:42 Construct combined texture-sampler ( temp usampler3D) +0:42 'g_tTex3du4' ( uniform utexture3D) +0:42 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:42 Constant: +0:42 0.750000 +0:44 Sequence +0:44 move second child to first child ( temp 4-component vector of float) +0:44 'txval40' ( temp 4-component vector of float) +0:44 textureLod ( temp 4-component vector of float) +0:44 Construct combined texture-sampler ( temp samplerCube) +0:44 'g_tTexcdf4' ( uniform textureCube) +0:44 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:44 Constant: +0:44 0.750000 +0:45 Sequence +0:45 move second child to first child ( temp 4-component vector of int) +0:45 'txval41' ( temp 4-component vector of int) +0:45 textureLod ( temp 4-component vector of int) +0:45 Construct combined texture-sampler ( temp isamplerCube) +0:45 'g_tTexcdi4' ( uniform itextureCube) +0:45 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:45 Constant: +0:45 0.750000 +0:46 Sequence +0:46 move second child to first child ( temp 4-component vector of uint) +0:46 'txval42' ( temp 4-component vector of uint) +0:46 textureLod ( temp 4-component vector of uint) +0:46 Construct combined texture-sampler ( temp usamplerCube) +0:46 'g_tTexcdu4' ( uniform utextureCube) +0:46 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:46 Constant: +0:46 0.750000 +0:48 move second child to first child ( temp 4-component vector of float) +0:48 Color: direct index for structure ( temp 4-component vector of float) +0:48 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:48 Constant: +0:48 0 (const int) +0:48 Constant: +0:48 1.000000 +0:48 1.000000 +0:48 1.000000 +0:48 1.000000 +0:49 move second child to first child ( temp float) +0:49 Depth: direct index for structure ( temp float) +0:49 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:49 Constant: +0:49 1 (const int) +0:49 Constant: +0:49 1.000000 +0:51 Branch: Return with expression +0:51 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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 Color, temp float Depth}) +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: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: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: +0:29 1 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_sSamp2d' ( uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1D) +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_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:? 'Color' (layout( location=0) out 4-component vector of float) +0:? 'Depth' ( out float FragDepth) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 172 + + Capability Shader + Capability Sampled1D + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 163 167 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + MemberName 8(PS_OUTPUT) 1 "Depth" + Name 10 "@main(" + Name 13 "txval10" + Name 16 "g_tTex1df4" + Name 20 "g_sSamp" + Name 30 "txval11" + Name 33 "g_tTex1di4" + Name 43 "txval12" + Name 46 "g_tTex1du4" + Name 53 "txval20" + Name 56 "g_tTex2df4" + Name 64 "txval21" + Name 67 "g_tTex2di4" + Name 75 "txval22" + Name 78 "g_tTex2du4" + Name 87 "txval30" + Name 90 "g_tTex3df4" + Name 98 "txval31" + Name 101 "g_tTex3di4" + Name 108 "txval32" + Name 111 "g_tTex3du4" + Name 121 "txval40" + Name 124 "g_tTexcdf4" + Name 130 "txval41" + Name 133 "g_tTexcdi4" + Name 139 "txval42" + Name 142 "g_tTexcdu4" + Name 149 "psout" + Name 160 "flattenTemp" + Name 163 "Color" + Name 167 "Depth" + Name 170 "g_sSamp2d" + Name 171 "g_tTex1df4a" + 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 33(g_tTex1di4) DescriptorSet 0 + Decorate 46(g_tTex1du4) DescriptorSet 0 + Decorate 56(g_tTex2df4) DescriptorSet 0 + Decorate 67(g_tTex2di4) DescriptorSet 0 + Decorate 78(g_tTex2du4) DescriptorSet 0 + Decorate 90(g_tTex3df4) DescriptorSet 0 + Decorate 101(g_tTex3di4) DescriptorSet 0 + Decorate 111(g_tTex3du4) DescriptorSet 0 + 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 170(g_sSamp2d) DescriptorSet 0 + Decorate 171(g_tTex1df4a) DescriptorSet 0 + Decorate 171(g_tTex1df4a) Binding 1 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8(PS_OUTPUT): TypeStruct 7(fvec4) 6(float) + 9: TypeFunction 8(PS_OUTPUT) + 12: TypePointer Function 7(fvec4) + 14: TypeImage 6(float) 1D 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: TypeSampledImage 14 + 24: 6(float) Constant 1036831949 + 25: 6(float) Constant 1061158912 + 27: TypeInt 32 1 + 28: TypeVector 27(int) 4 + 29: TypePointer Function 28(ivec4) + 31: TypeImage 27(int) 1D sampled format:Unknown + 32: TypePointer UniformConstant 31 + 33(g_tTex1di4): 32(ptr) Variable UniformConstant + 36: TypeSampledImage 31 + 38: 6(float) Constant 1045220557 + 40: TypeInt 32 0 + 41: TypeVector 40(int) 4 + 42: TypePointer Function 41(ivec4) + 44: TypeImage 40(int) 1D sampled format:Unknown + 45: TypePointer UniformConstant 44 + 46(g_tTex1du4): 45(ptr) Variable UniformConstant + 49: TypeSampledImage 44 + 51: 6(float) Constant 1050253722 + 54: TypeImage 6(float) 2D sampled format:Unknown + 55: TypePointer UniformConstant 54 + 56(g_tTex2df4): 55(ptr) Variable UniformConstant + 59: TypeSampledImage 54 + 61: TypeVector 6(float) 2 + 62: 61(fvec2) ConstantComposite 24 38 + 65: TypeImage 27(int) 2D sampled format:Unknown + 66: TypePointer UniformConstant 65 + 67(g_tTex2di4): 66(ptr) Variable UniformConstant + 70: TypeSampledImage 65 + 72: 6(float) Constant 1053609165 + 73: 61(fvec2) ConstantComposite 51 72 + 76: TypeImage 40(int) 2D sampled format:Unknown + 77: TypePointer UniformConstant 76 + 78(g_tTex2du4): 77(ptr) Variable UniformConstant + 81: TypeSampledImage 76 + 83: 6(float) Constant 1056964608 + 84: 6(float) Constant 1058642330 + 85: 61(fvec2) ConstantComposite 83 84 + 88: TypeImage 6(float) 3D sampled format:Unknown + 89: TypePointer UniformConstant 88 + 90(g_tTex3df4): 89(ptr) Variable UniformConstant + 93: TypeSampledImage 88 + 95: TypeVector 6(float) 3 + 96: 95(fvec3) ConstantComposite 24 38 51 + 99: TypeImage 27(int) 3D sampled format:Unknown + 100: TypePointer UniformConstant 99 + 101(g_tTex3di4): 100(ptr) Variable UniformConstant + 104: TypeSampledImage 99 + 106: 95(fvec3) ConstantComposite 72 83 84 + 109: TypeImage 40(int) 3D sampled format:Unknown + 110: TypePointer UniformConstant 109 + 111(g_tTex3du4): 110(ptr) Variable UniformConstant + 114: TypeSampledImage 109 + 116: 6(float) Constant 1060320051 + 117: 6(float) Constant 1061997773 + 118: 6(float) Constant 1063675494 + 119: 95(fvec3) ConstantComposite 116 117 118 + 122: TypeImage 6(float) Cube sampled format:Unknown + 123: TypePointer UniformConstant 122 + 124(g_tTexcdf4): 123(ptr) Variable UniformConstant + 127: TypeSampledImage 122 + 131: TypeImage 27(int) Cube sampled format:Unknown + 132: TypePointer UniformConstant 131 + 133(g_tTexcdi4): 132(ptr) Variable UniformConstant + 136: TypeSampledImage 131 + 140: TypeImage 40(int) Cube sampled format:Unknown + 141: TypePointer UniformConstant 140 + 142(g_tTexcdu4): 141(ptr) Variable UniformConstant + 145: TypeSampledImage 140 + 148: TypePointer Function 8(PS_OUTPUT) + 150: 27(int) Constant 0 + 151: 6(float) Constant 1065353216 + 152: 7(fvec4) ConstantComposite 151 151 151 151 + 154: 27(int) Constant 1 + 155: TypePointer Function 6(float) + 162: TypePointer Output 7(fvec4) + 163(Color): 162(ptr) Variable Output + 166: TypePointer Output 6(float) + 167(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 + 5: Label +160(flattenTemp): 148(ptr) Variable Function + 161:8(PS_OUTPUT) FunctionCall 10(@main() + Store 160(flattenTemp) 161 + 164: 12(ptr) AccessChain 160(flattenTemp) 150 + 165: 7(fvec4) Load 164 + Store 163(Color) 165 + 168: 155(ptr) AccessChain 160(flattenTemp) 154 + 169: 6(float) Load 168 + Store 167(Depth) 169 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 13(txval10): 12(ptr) Variable Function + 30(txval11): 29(ptr) Variable Function + 43(txval12): 42(ptr) Variable Function + 53(txval20): 12(ptr) Variable Function + 64(txval21): 29(ptr) Variable Function + 75(txval22): 42(ptr) Variable Function + 87(txval30): 12(ptr) Variable Function + 98(txval31): 29(ptr) Variable Function + 108(txval32): 42(ptr) Variable Function + 121(txval40): 12(ptr) Variable Function + 130(txval41): 29(ptr) Variable Function + 139(txval42): 42(ptr) Variable Function + 149(psout): 148(ptr) Variable Function + 17: 14 Load 16(g_tTex1df4) + 21: 18 Load 20(g_sSamp) + 23: 22 SampledImage 17 21 + 26: 7(fvec4) ImageSampleExplicitLod 23 24 Lod 25 + Store 13(txval10) 26 + 34: 31 Load 33(g_tTex1di4) + 35: 18 Load 20(g_sSamp) + 37: 36 SampledImage 34 35 + 39: 28(ivec4) ImageSampleExplicitLod 37 38 Lod 25 + Store 30(txval11) 39 + 47: 44 Load 46(g_tTex1du4) + 48: 18 Load 20(g_sSamp) + 50: 49 SampledImage 47 48 + 52: 41(ivec4) ImageSampleExplicitLod 50 51 Lod 25 + Store 43(txval12) 52 + 57: 54 Load 56(g_tTex2df4) + 58: 18 Load 20(g_sSamp) + 60: 59 SampledImage 57 58 + 63: 7(fvec4) ImageSampleExplicitLod 60 62 Lod 25 + Store 53(txval20) 63 + 68: 65 Load 67(g_tTex2di4) + 69: 18 Load 20(g_sSamp) + 71: 70 SampledImage 68 69 + 74: 28(ivec4) ImageSampleExplicitLod 71 73 Lod 25 + Store 64(txval21) 74 + 79: 76 Load 78(g_tTex2du4) + 80: 18 Load 20(g_sSamp) + 82: 81 SampledImage 79 80 + 86: 41(ivec4) ImageSampleExplicitLod 82 85 Lod 25 + Store 75(txval22) 86 + 91: 88 Load 90(g_tTex3df4) + 92: 18 Load 20(g_sSamp) + 94: 93 SampledImage 91 92 + 97: 7(fvec4) ImageSampleExplicitLod 94 96 Lod 25 + Store 87(txval30) 97 + 102: 99 Load 101(g_tTex3di4) + 103: 18 Load 20(g_sSamp) + 105: 104 SampledImage 102 103 + 107: 28(ivec4) ImageSampleExplicitLod 105 106 Lod 25 + Store 98(txval31) 107 + 112: 109 Load 111(g_tTex3du4) + 113: 18 Load 20(g_sSamp) + 115: 114 SampledImage 112 113 + 120: 41(ivec4) ImageSampleExplicitLod 115 119 Lod 25 + Store 108(txval32) 120 + 125: 122 Load 124(g_tTexcdf4) + 126: 18 Load 20(g_sSamp) + 128: 127 SampledImage 125 126 + 129: 7(fvec4) ImageSampleExplicitLod 128 96 Lod 25 + Store 121(txval40) 129 + 134: 131 Load 133(g_tTexcdi4) + 135: 18 Load 20(g_sSamp) + 137: 136 SampledImage 134 135 + 138: 28(ivec4) ImageSampleExplicitLod 137 106 Lod 25 + Store 130(txval41) 138 + 143: 140 Load 142(g_tTexcdu4) + 144: 18 Load 20(g_sSamp) + 146: 145 SampledImage 143 144 + 147: 41(ivec4) ImageSampleExplicitLod 146 119 Lod 25 + Store 139(txval42) 147 + 153: 12(ptr) AccessChain 149(psout) 150 + Store 153 152 + 156: 155(ptr) AccessChain 149(psout) 154 + Store 156 151 + 157:8(PS_OUTPUT) Load 149(psout) + ReturnValue 157 + FunctionEnd 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 new file mode 100644 index 0000000..40996e9 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out @@ -0,0 +1,628 @@ +hlsl.samplelevel.basic.dx10.vert +Shader version: 450 +0:? Sequence +0:27 Function Definition: @main( ( temp structure{ temp 4-component vector of float Pos}) +0:27 Function Parameters: +0:? Sequence +0:30 Sequence +0:30 move second child to first child ( temp 4-component vector of float) +0:30 'txval10' ( temp 4-component vector of float) +0:30 textureLod ( temp 4-component vector of float) +0:30 Construct combined texture-sampler ( temp sampler1D) +0:30 'g_tTex1df4' (layout( binding=0) uniform texture1D) +0:30 'g_sSamp' (layout( binding=0) uniform sampler) +0:30 Constant: +0:30 0.100000 +0:30 Constant: +0:30 0.750000 +0:31 Sequence +0:31 move second child to first child ( temp 4-component vector of int) +0:31 'txval11' ( temp 4-component vector of int) +0:31 textureLod ( temp 4-component vector of int) +0:31 Construct combined texture-sampler ( temp isampler1D) +0:31 'g_tTex1di4' ( uniform itexture1D) +0:31 'g_sSamp' (layout( binding=0) uniform sampler) +0:31 Constant: +0:31 0.200000 +0:31 Constant: +0:31 0.750000 +0:32 Sequence +0:32 move second child to first child ( temp 4-component vector of uint) +0:32 'txval12' ( temp 4-component vector of uint) +0:32 textureLod ( temp 4-component vector of uint) +0:32 Construct combined texture-sampler ( temp usampler1D) +0:32 'g_tTex1du4' ( uniform utexture1D) +0:32 'g_sSamp' (layout( binding=0) uniform sampler) +0:32 Constant: +0:32 0.300000 +0:32 Constant: +0:32 0.750000 +0:34 Sequence +0:34 move second child to first child ( temp 4-component vector of float) +0:34 'txval20' ( temp 4-component vector of float) +0:34 textureLod ( temp 4-component vector of float) +0:34 Construct combined texture-sampler ( temp sampler2D) +0:34 'g_tTex2df4' ( uniform texture2D) +0:34 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:34 Constant: +0:34 0.750000 +0:35 Sequence +0:35 move second child to first child ( temp 4-component vector of int) +0:35 'txval21' ( temp 4-component vector of int) +0:35 textureLod ( temp 4-component vector of int) +0:35 Construct combined texture-sampler ( temp isampler2D) +0:35 'g_tTex2di4' ( uniform itexture2D) +0:35 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:35 Constant: +0:35 0.750000 +0:36 Sequence +0:36 move second child to first child ( temp 4-component vector of uint) +0:36 'txval22' ( temp 4-component vector of uint) +0:36 textureLod ( temp 4-component vector of uint) +0:36 Construct combined texture-sampler ( temp usampler2D) +0:36 'g_tTex2du4' ( uniform utexture2D) +0:36 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:36 Constant: +0:36 0.750000 +0:38 Sequence +0:38 move second child to first child ( temp 4-component vector of float) +0:38 'txval30' ( temp 4-component vector of float) +0:38 textureLod ( temp 4-component vector of float) +0:38 Construct combined texture-sampler ( temp sampler3D) +0:38 'g_tTex3df4' ( uniform texture3D) +0:38 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:38 Constant: +0:38 0.750000 +0:39 Sequence +0:39 move second child to first child ( temp 4-component vector of int) +0:39 'txval31' ( temp 4-component vector of int) +0:39 textureLod ( temp 4-component vector of int) +0:39 Construct combined texture-sampler ( temp isampler3D) +0:39 'g_tTex3di4' ( uniform itexture3D) +0:39 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:39 Constant: +0:39 0.750000 +0:40 Sequence +0:40 move second child to first child ( temp 4-component vector of uint) +0:40 'txval32' ( temp 4-component vector of uint) +0:40 textureLod ( temp 4-component vector of uint) +0:40 Construct combined texture-sampler ( temp usampler3D) +0:40 'g_tTex3du4' ( uniform utexture3D) +0:40 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:40 Constant: +0:40 0.750000 +0:42 Sequence +0:42 move second child to first child ( temp 4-component vector of float) +0:42 'txval40' ( temp 4-component vector of float) +0:42 textureLod ( temp 4-component vector of float) +0:42 Construct combined texture-sampler ( temp samplerCube) +0:42 'g_tTexcdf4' ( uniform textureCube) +0:42 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:42 Constant: +0:42 0.750000 +0:43 Sequence +0:43 move second child to first child ( temp 4-component vector of int) +0:43 'txval41' ( temp 4-component vector of int) +0:43 textureLod ( temp 4-component vector of int) +0:43 Construct combined texture-sampler ( temp isamplerCube) +0:43 'g_tTexcdi4' ( uniform itextureCube) +0:43 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:43 Constant: +0:43 0.750000 +0:44 Sequence +0:44 move second child to first child ( temp 4-component vector of uint) +0:44 'txval42' ( temp 4-component vector of uint) +0:44 textureLod ( temp 4-component vector of uint) +0:44 Construct combined texture-sampler ( temp usamplerCube) +0:44 'g_tTexcdu4' ( uniform utextureCube) +0:44 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:44 Constant: +0:44 0.750000 +0:46 move second child to first child ( temp 4-component vector of float) +0:46 Pos: direct index for structure ( temp 4-component vector of float) +0:46 'vsout' ( temp structure{ temp 4-component vector of float Pos}) +0:46 Constant: +0:46 0 (const int) +0:? Constant: +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:48 Branch: Return with expression +0:48 'vsout' ( temp structure{ temp 4-component vector of float Pos}) +0:27 Function Definition: main( ( temp void) +0:27 Function Parameters: +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: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: +0:27 0 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1D) +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_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:? '@entryPointOutput' (layout( location=0) out structure{}) + + +Linked vertex stage: + + +Shader version: 450 +0:? Sequence +0:27 Function Definition: @main( ( temp structure{ temp 4-component vector of float Pos}) +0:27 Function Parameters: +0:? Sequence +0:30 Sequence +0:30 move second child to first child ( temp 4-component vector of float) +0:30 'txval10' ( temp 4-component vector of float) +0:30 textureLod ( temp 4-component vector of float) +0:30 Construct combined texture-sampler ( temp sampler1D) +0:30 'g_tTex1df4' (layout( binding=0) uniform texture1D) +0:30 'g_sSamp' (layout( binding=0) uniform sampler) +0:30 Constant: +0:30 0.100000 +0:30 Constant: +0:30 0.750000 +0:31 Sequence +0:31 move second child to first child ( temp 4-component vector of int) +0:31 'txval11' ( temp 4-component vector of int) +0:31 textureLod ( temp 4-component vector of int) +0:31 Construct combined texture-sampler ( temp isampler1D) +0:31 'g_tTex1di4' ( uniform itexture1D) +0:31 'g_sSamp' (layout( binding=0) uniform sampler) +0:31 Constant: +0:31 0.200000 +0:31 Constant: +0:31 0.750000 +0:32 Sequence +0:32 move second child to first child ( temp 4-component vector of uint) +0:32 'txval12' ( temp 4-component vector of uint) +0:32 textureLod ( temp 4-component vector of uint) +0:32 Construct combined texture-sampler ( temp usampler1D) +0:32 'g_tTex1du4' ( uniform utexture1D) +0:32 'g_sSamp' (layout( binding=0) uniform sampler) +0:32 Constant: +0:32 0.300000 +0:32 Constant: +0:32 0.750000 +0:34 Sequence +0:34 move second child to first child ( temp 4-component vector of float) +0:34 'txval20' ( temp 4-component vector of float) +0:34 textureLod ( temp 4-component vector of float) +0:34 Construct combined texture-sampler ( temp sampler2D) +0:34 'g_tTex2df4' ( uniform texture2D) +0:34 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:34 Constant: +0:34 0.750000 +0:35 Sequence +0:35 move second child to first child ( temp 4-component vector of int) +0:35 'txval21' ( temp 4-component vector of int) +0:35 textureLod ( temp 4-component vector of int) +0:35 Construct combined texture-sampler ( temp isampler2D) +0:35 'g_tTex2di4' ( uniform itexture2D) +0:35 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:35 Constant: +0:35 0.750000 +0:36 Sequence +0:36 move second child to first child ( temp 4-component vector of uint) +0:36 'txval22' ( temp 4-component vector of uint) +0:36 textureLod ( temp 4-component vector of uint) +0:36 Construct combined texture-sampler ( temp usampler2D) +0:36 'g_tTex2du4' ( uniform utexture2D) +0:36 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:36 Constant: +0:36 0.750000 +0:38 Sequence +0:38 move second child to first child ( temp 4-component vector of float) +0:38 'txval30' ( temp 4-component vector of float) +0:38 textureLod ( temp 4-component vector of float) +0:38 Construct combined texture-sampler ( temp sampler3D) +0:38 'g_tTex3df4' ( uniform texture3D) +0:38 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:38 Constant: +0:38 0.750000 +0:39 Sequence +0:39 move second child to first child ( temp 4-component vector of int) +0:39 'txval31' ( temp 4-component vector of int) +0:39 textureLod ( temp 4-component vector of int) +0:39 Construct combined texture-sampler ( temp isampler3D) +0:39 'g_tTex3di4' ( uniform itexture3D) +0:39 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:39 Constant: +0:39 0.750000 +0:40 Sequence +0:40 move second child to first child ( temp 4-component vector of uint) +0:40 'txval32' ( temp 4-component vector of uint) +0:40 textureLod ( temp 4-component vector of uint) +0:40 Construct combined texture-sampler ( temp usampler3D) +0:40 'g_tTex3du4' ( uniform utexture3D) +0:40 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:40 Constant: +0:40 0.750000 +0:42 Sequence +0:42 move second child to first child ( temp 4-component vector of float) +0:42 'txval40' ( temp 4-component vector of float) +0:42 textureLod ( temp 4-component vector of float) +0:42 Construct combined texture-sampler ( temp samplerCube) +0:42 'g_tTexcdf4' ( uniform textureCube) +0:42 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:42 Constant: +0:42 0.750000 +0:43 Sequence +0:43 move second child to first child ( temp 4-component vector of int) +0:43 'txval41' ( temp 4-component vector of int) +0:43 textureLod ( temp 4-component vector of int) +0:43 Construct combined texture-sampler ( temp isamplerCube) +0:43 'g_tTexcdi4' ( uniform itextureCube) +0:43 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:43 Constant: +0:43 0.750000 +0:44 Sequence +0:44 move second child to first child ( temp 4-component vector of uint) +0:44 'txval42' ( temp 4-component vector of uint) +0:44 textureLod ( temp 4-component vector of uint) +0:44 Construct combined texture-sampler ( temp usamplerCube) +0:44 'g_tTexcdu4' ( uniform utextureCube) +0:44 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:44 Constant: +0:44 0.750000 +0:46 move second child to first child ( temp 4-component vector of float) +0:46 Pos: direct index for structure ( temp 4-component vector of float) +0:46 'vsout' ( temp structure{ temp 4-component vector of float Pos}) +0:46 Constant: +0:46 0 (const int) +0:? Constant: +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:48 Branch: Return with expression +0:48 'vsout' ( temp structure{ temp 4-component vector of float Pos}) +0:27 Function Definition: main( ( temp void) +0:27 Function Parameters: +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: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: +0:27 0 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1D) +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_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:? '@entryPointOutput' (layout( location=0) out structure{}) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 165 + + Capability Shader + Capability Sampled1D + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 158 164 + Name 4 "main" + Name 8 "VS_OUTPUT" + MemberName 8(VS_OUTPUT) 0 "Pos" + Name 10 "@main(" + Name 13 "txval10" + Name 16 "g_tTex1df4" + Name 20 "g_sSamp" + Name 30 "txval11" + Name 33 "g_tTex1di4" + Name 43 "txval12" + Name 46 "g_tTex1du4" + Name 53 "txval20" + Name 56 "g_tTex2df4" + Name 64 "txval21" + Name 67 "g_tTex2di4" + Name 75 "txval22" + Name 78 "g_tTex2du4" + Name 87 "txval30" + Name 90 "g_tTex3df4" + Name 98 "txval31" + Name 101 "g_tTex3di4" + Name 108 "txval32" + Name 111 "g_tTex3du4" + Name 121 "txval40" + Name 124 "g_tTexcdf4" + Name 130 "txval41" + Name 133 "g_tTexcdi4" + Name 139 "txval42" + Name 142 "g_tTexcdu4" + Name 149 "vsout" + 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 + Decorate 20(g_sSamp) Binding 0 + Decorate 33(g_tTex1di4) DescriptorSet 0 + Decorate 46(g_tTex1du4) DescriptorSet 0 + Decorate 56(g_tTex2df4) DescriptorSet 0 + Decorate 67(g_tTex2di4) DescriptorSet 0 + Decorate 78(g_tTex2du4) DescriptorSet 0 + Decorate 90(g_tTex3df4) DescriptorSet 0 + Decorate 101(g_tTex3di4) DescriptorSet 0 + Decorate 111(g_tTex3du4) DescriptorSet 0 + 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 161(g_tTex1df4a) DescriptorSet 0 + Decorate 161(g_tTex1df4a) Binding 1 + Decorate 164(@entryPointOutput) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8(VS_OUTPUT): TypeStruct 7(fvec4) + 9: TypeFunction 8(VS_OUTPUT) + 12: TypePointer Function 7(fvec4) + 14: TypeImage 6(float) 1D 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: TypeSampledImage 14 + 24: 6(float) Constant 1036831949 + 25: 6(float) Constant 1061158912 + 27: TypeInt 32 1 + 28: TypeVector 27(int) 4 + 29: TypePointer Function 28(ivec4) + 31: TypeImage 27(int) 1D sampled format:Unknown + 32: TypePointer UniformConstant 31 + 33(g_tTex1di4): 32(ptr) Variable UniformConstant + 36: TypeSampledImage 31 + 38: 6(float) Constant 1045220557 + 40: TypeInt 32 0 + 41: TypeVector 40(int) 4 + 42: TypePointer Function 41(ivec4) + 44: TypeImage 40(int) 1D sampled format:Unknown + 45: TypePointer UniformConstant 44 + 46(g_tTex1du4): 45(ptr) Variable UniformConstant + 49: TypeSampledImage 44 + 51: 6(float) Constant 1050253722 + 54: TypeImage 6(float) 2D sampled format:Unknown + 55: TypePointer UniformConstant 54 + 56(g_tTex2df4): 55(ptr) Variable UniformConstant + 59: TypeSampledImage 54 + 61: TypeVector 6(float) 2 + 62: 61(fvec2) ConstantComposite 24 38 + 65: TypeImage 27(int) 2D sampled format:Unknown + 66: TypePointer UniformConstant 65 + 67(g_tTex2di4): 66(ptr) Variable UniformConstant + 70: TypeSampledImage 65 + 72: 6(float) Constant 1053609165 + 73: 61(fvec2) ConstantComposite 51 72 + 76: TypeImage 40(int) 2D sampled format:Unknown + 77: TypePointer UniformConstant 76 + 78(g_tTex2du4): 77(ptr) Variable UniformConstant + 81: TypeSampledImage 76 + 83: 6(float) Constant 1056964608 + 84: 6(float) Constant 1058642330 + 85: 61(fvec2) ConstantComposite 83 84 + 88: TypeImage 6(float) 3D sampled format:Unknown + 89: TypePointer UniformConstant 88 + 90(g_tTex3df4): 89(ptr) Variable UniformConstant + 93: TypeSampledImage 88 + 95: TypeVector 6(float) 3 + 96: 95(fvec3) ConstantComposite 24 38 51 + 99: TypeImage 27(int) 3D sampled format:Unknown + 100: TypePointer UniformConstant 99 + 101(g_tTex3di4): 100(ptr) Variable UniformConstant + 104: TypeSampledImage 99 + 106: 95(fvec3) ConstantComposite 72 83 84 + 109: TypeImage 40(int) 3D sampled format:Unknown + 110: TypePointer UniformConstant 109 + 111(g_tTex3du4): 110(ptr) Variable UniformConstant + 114: TypeSampledImage 109 + 116: 6(float) Constant 1060320051 + 117: 6(float) Constant 1061997773 + 118: 6(float) Constant 1063675494 + 119: 95(fvec3) ConstantComposite 116 117 118 + 122: TypeImage 6(float) Cube sampled format:Unknown + 123: TypePointer UniformConstant 122 + 124(g_tTexcdf4): 123(ptr) Variable UniformConstant + 127: TypeSampledImage 122 + 131: TypeImage 27(int) Cube sampled format:Unknown + 132: TypePointer UniformConstant 131 + 133(g_tTexcdi4): 132(ptr) Variable UniformConstant + 136: TypeSampledImage 131 + 140: TypeImage 40(int) Cube sampled format:Unknown + 141: TypePointer UniformConstant 140 + 142(g_tTexcdu4): 141(ptr) Variable UniformConstant + 145: TypeSampledImage 140 + 148: TypePointer Function 8(VS_OUTPUT) + 150: 27(int) Constant 0 + 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 +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 + Return + FunctionEnd + 10(@main():8(VS_OUTPUT) Function None 9 + 11: Label + 13(txval10): 12(ptr) Variable Function + 30(txval11): 29(ptr) Variable Function + 43(txval12): 42(ptr) Variable Function + 53(txval20): 12(ptr) Variable Function + 64(txval21): 29(ptr) Variable Function + 75(txval22): 42(ptr) Variable Function + 87(txval30): 12(ptr) Variable Function + 98(txval31): 29(ptr) Variable Function + 108(txval32): 42(ptr) Variable Function + 121(txval40): 12(ptr) Variable Function + 130(txval41): 29(ptr) Variable Function + 139(txval42): 42(ptr) Variable Function + 149(vsout): 148(ptr) Variable Function + 17: 14 Load 16(g_tTex1df4) + 21: 18 Load 20(g_sSamp) + 23: 22 SampledImage 17 21 + 26: 7(fvec4) ImageSampleExplicitLod 23 24 Lod 25 + Store 13(txval10) 26 + 34: 31 Load 33(g_tTex1di4) + 35: 18 Load 20(g_sSamp) + 37: 36 SampledImage 34 35 + 39: 28(ivec4) ImageSampleExplicitLod 37 38 Lod 25 + Store 30(txval11) 39 + 47: 44 Load 46(g_tTex1du4) + 48: 18 Load 20(g_sSamp) + 50: 49 SampledImage 47 48 + 52: 41(ivec4) ImageSampleExplicitLod 50 51 Lod 25 + Store 43(txval12) 52 + 57: 54 Load 56(g_tTex2df4) + 58: 18 Load 20(g_sSamp) + 60: 59 SampledImage 57 58 + 63: 7(fvec4) ImageSampleExplicitLod 60 62 Lod 25 + Store 53(txval20) 63 + 68: 65 Load 67(g_tTex2di4) + 69: 18 Load 20(g_sSamp) + 71: 70 SampledImage 68 69 + 74: 28(ivec4) ImageSampleExplicitLod 71 73 Lod 25 + Store 64(txval21) 74 + 79: 76 Load 78(g_tTex2du4) + 80: 18 Load 20(g_sSamp) + 82: 81 SampledImage 79 80 + 86: 41(ivec4) ImageSampleExplicitLod 82 85 Lod 25 + Store 75(txval22) 86 + 91: 88 Load 90(g_tTex3df4) + 92: 18 Load 20(g_sSamp) + 94: 93 SampledImage 91 92 + 97: 7(fvec4) ImageSampleExplicitLod 94 96 Lod 25 + Store 87(txval30) 97 + 102: 99 Load 101(g_tTex3di4) + 103: 18 Load 20(g_sSamp) + 105: 104 SampledImage 102 103 + 107: 28(ivec4) ImageSampleExplicitLod 105 106 Lod 25 + Store 98(txval31) 107 + 112: 109 Load 111(g_tTex3du4) + 113: 18 Load 20(g_sSamp) + 115: 114 SampledImage 112 113 + 120: 41(ivec4) ImageSampleExplicitLod 115 119 Lod 25 + Store 108(txval32) 120 + 125: 122 Load 124(g_tTexcdf4) + 126: 18 Load 20(g_sSamp) + 128: 127 SampledImage 125 126 + 129: 7(fvec4) ImageSampleExplicitLod 128 96 Lod 25 + Store 121(txval40) 129 + 134: 131 Load 133(g_tTexcdi4) + 135: 18 Load 20(g_sSamp) + 137: 136 SampledImage 134 135 + 138: 28(ivec4) ImageSampleExplicitLod 137 106 Lod 25 + Store 130(txval41) 138 + 143: 140 Load 142(g_tTexcdu4) + 144: 18 Load 20(g_sSamp) + 146: 145 SampledImage 143 144 + 147: 41(ivec4) ImageSampleExplicitLod 146 119 Lod 25 + Store 139(txval42) 147 + 153: 12(ptr) AccessChain 149(vsout) 150 + Store 153 152 + 154:8(VS_OUTPUT) Load 149(vsout) + ReturnValue 154 + FunctionEnd 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 new file mode 100644 index 0000000..2c98171 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out @@ -0,0 +1,636 @@ +hlsl.samplelevel.offset.dx10.frag +Shader version: 450 +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}) +0:28 Function Parameters: +0:? Sequence +0:31 Sequence +0:31 move second child to first child ( temp 4-component vector of float) +0:31 'txval10' ( temp 4-component vector of float) +0:31 textureLodOffset ( temp 4-component vector of float) +0:31 Construct combined texture-sampler ( temp sampler1D) +0:31 'g_tTex1df4' (layout( binding=0) uniform texture1D) +0:31 'g_sSamp' (layout( binding=0) uniform sampler) +0:31 Constant: +0:31 0.100000 +0:31 Constant: +0:31 0.750000 +0:31 Constant: +0:31 1 (const int) +0:32 Sequence +0:32 move second child to first child ( temp 4-component vector of int) +0:32 'txval11' ( temp 4-component vector of int) +0:32 textureLodOffset ( temp 4-component vector of int) +0:32 Construct combined texture-sampler ( temp isampler1D) +0:32 'g_tTex1di4' ( uniform itexture1D) +0:32 'g_sSamp' (layout( binding=0) uniform sampler) +0:32 Constant: +0:32 0.200000 +0:32 Constant: +0:32 0.750000 +0:32 Constant: +0:32 1 (const int) +0:33 Sequence +0:33 move second child to first child ( temp 4-component vector of uint) +0:33 'txval12' ( temp 4-component vector of uint) +0:33 textureLodOffset ( temp 4-component vector of uint) +0:33 Construct combined texture-sampler ( temp usampler1D) +0:33 'g_tTex1du4' ( uniform utexture1D) +0:33 'g_sSamp' (layout( binding=0) uniform sampler) +0:33 Constant: +0:33 0.300000 +0:33 Constant: +0:33 0.750000 +0:33 Constant: +0:33 1 (const int) +0:35 Sequence +0:35 move second child to first child ( temp 4-component vector of float) +0:35 'txval20' ( temp 4-component vector of float) +0:35 textureLodOffset ( temp 4-component vector of float) +0:35 Construct combined texture-sampler ( temp sampler2D) +0:35 'g_tTex2df4' ( uniform texture2D) +0:35 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:35 Constant: +0:35 0.750000 +0:? Constant: +0:? 1 (const int) +0:? 0 (const int) +0:36 Sequence +0:36 move second child to first child ( temp 4-component vector of int) +0:36 'txval21' ( temp 4-component vector of int) +0:36 textureLodOffset ( temp 4-component vector of int) +0:36 Construct combined texture-sampler ( temp isampler2D) +0:36 'g_tTex2di4' ( uniform itexture2D) +0:36 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:36 Constant: +0:36 0.750000 +0:? Constant: +0:? 1 (const int) +0:? 1 (const int) +0:37 Sequence +0:37 move second child to first child ( temp 4-component vector of uint) +0:37 'txval22' ( temp 4-component vector of uint) +0:37 textureLodOffset ( temp 4-component vector of uint) +0:37 Construct combined texture-sampler ( temp usampler2D) +0:37 'g_tTex2du4' ( uniform utexture2D) +0:37 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:37 Constant: +0:37 0.750000 +0:? Constant: +0:? 1 (const int) +0:? -1 (const int) +0:39 Sequence +0:39 move second child to first child ( temp 4-component vector of float) +0:39 'txval30' ( temp 4-component vector of float) +0:39 textureLodOffset ( temp 4-component vector of float) +0:39 Construct combined texture-sampler ( temp sampler3D) +0:39 'g_tTex3df4' ( uniform texture3D) +0:39 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:39 Constant: +0:39 0.750000 +0:? Constant: +0:? 1 (const int) +0:? 0 (const int) +0:? 1 (const int) +0:40 Sequence +0:40 move second child to first child ( temp 4-component vector of int) +0:40 'txval31' ( temp 4-component vector of int) +0:40 textureLodOffset ( temp 4-component vector of int) +0:40 Construct combined texture-sampler ( temp isampler3D) +0:40 'g_tTex3di4' ( uniform itexture3D) +0:40 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:40 Constant: +0:40 0.750000 +0:? Constant: +0:? 1 (const int) +0:? 1 (const int) +0:? 1 (const int) +0:41 Sequence +0:41 move second child to first child ( temp 4-component vector of uint) +0:41 'txval32' ( temp 4-component vector of uint) +0:41 textureLodOffset ( temp 4-component vector of uint) +0:41 Construct combined texture-sampler ( temp usampler3D) +0:41 'g_tTex3du4' ( uniform utexture3D) +0:41 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:41 Constant: +0:41 0.750000 +0:? Constant: +0:? 1 (const int) +0:? 0 (const int) +0:? -1 (const int) +0:45 move second child to first child ( temp 4-component vector of float) +0:45 Color: direct index for structure ( temp 4-component vector of float) +0:45 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:45 Constant: +0:45 0 (const int) +0:45 Constant: +0:45 1.000000 +0:45 1.000000 +0:45 1.000000 +0:45 1.000000 +0:46 move second child to first child ( temp float) +0:46 Depth: direct index for structure ( temp float) +0:46 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:46 Constant: +0:46 1 (const int) +0:46 Constant: +0:46 1.000000 +0:48 Branch: Return with expression +0:48 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:28 Function Definition: main( ( temp void) +0:28 Function Parameters: +0:? Sequence +0:28 Sequence +0:28 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:28 1 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1D) +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_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:? 'Color' (layout( location=0) out 4-component vector of float) +0:? 'Depth' ( out float FragDepth) + + +Linked fragment stage: + + +Shader version: 450 +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}) +0:28 Function Parameters: +0:? Sequence +0:31 Sequence +0:31 move second child to first child ( temp 4-component vector of float) +0:31 'txval10' ( temp 4-component vector of float) +0:31 textureLodOffset ( temp 4-component vector of float) +0:31 Construct combined texture-sampler ( temp sampler1D) +0:31 'g_tTex1df4' (layout( binding=0) uniform texture1D) +0:31 'g_sSamp' (layout( binding=0) uniform sampler) +0:31 Constant: +0:31 0.100000 +0:31 Constant: +0:31 0.750000 +0:31 Constant: +0:31 1 (const int) +0:32 Sequence +0:32 move second child to first child ( temp 4-component vector of int) +0:32 'txval11' ( temp 4-component vector of int) +0:32 textureLodOffset ( temp 4-component vector of int) +0:32 Construct combined texture-sampler ( temp isampler1D) +0:32 'g_tTex1di4' ( uniform itexture1D) +0:32 'g_sSamp' (layout( binding=0) uniform sampler) +0:32 Constant: +0:32 0.200000 +0:32 Constant: +0:32 0.750000 +0:32 Constant: +0:32 1 (const int) +0:33 Sequence +0:33 move second child to first child ( temp 4-component vector of uint) +0:33 'txval12' ( temp 4-component vector of uint) +0:33 textureLodOffset ( temp 4-component vector of uint) +0:33 Construct combined texture-sampler ( temp usampler1D) +0:33 'g_tTex1du4' ( uniform utexture1D) +0:33 'g_sSamp' (layout( binding=0) uniform sampler) +0:33 Constant: +0:33 0.300000 +0:33 Constant: +0:33 0.750000 +0:33 Constant: +0:33 1 (const int) +0:35 Sequence +0:35 move second child to first child ( temp 4-component vector of float) +0:35 'txval20' ( temp 4-component vector of float) +0:35 textureLodOffset ( temp 4-component vector of float) +0:35 Construct combined texture-sampler ( temp sampler2D) +0:35 'g_tTex2df4' ( uniform texture2D) +0:35 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:35 Constant: +0:35 0.750000 +0:? Constant: +0:? 1 (const int) +0:? 0 (const int) +0:36 Sequence +0:36 move second child to first child ( temp 4-component vector of int) +0:36 'txval21' ( temp 4-component vector of int) +0:36 textureLodOffset ( temp 4-component vector of int) +0:36 Construct combined texture-sampler ( temp isampler2D) +0:36 'g_tTex2di4' ( uniform itexture2D) +0:36 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:36 Constant: +0:36 0.750000 +0:? Constant: +0:? 1 (const int) +0:? 1 (const int) +0:37 Sequence +0:37 move second child to first child ( temp 4-component vector of uint) +0:37 'txval22' ( temp 4-component vector of uint) +0:37 textureLodOffset ( temp 4-component vector of uint) +0:37 Construct combined texture-sampler ( temp usampler2D) +0:37 'g_tTex2du4' ( uniform utexture2D) +0:37 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:37 Constant: +0:37 0.750000 +0:? Constant: +0:? 1 (const int) +0:? -1 (const int) +0:39 Sequence +0:39 move second child to first child ( temp 4-component vector of float) +0:39 'txval30' ( temp 4-component vector of float) +0:39 textureLodOffset ( temp 4-component vector of float) +0:39 Construct combined texture-sampler ( temp sampler3D) +0:39 'g_tTex3df4' ( uniform texture3D) +0:39 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:39 Constant: +0:39 0.750000 +0:? Constant: +0:? 1 (const int) +0:? 0 (const int) +0:? 1 (const int) +0:40 Sequence +0:40 move second child to first child ( temp 4-component vector of int) +0:40 'txval31' ( temp 4-component vector of int) +0:40 textureLodOffset ( temp 4-component vector of int) +0:40 Construct combined texture-sampler ( temp isampler3D) +0:40 'g_tTex3di4' ( uniform itexture3D) +0:40 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:40 Constant: +0:40 0.750000 +0:? Constant: +0:? 1 (const int) +0:? 1 (const int) +0:? 1 (const int) +0:41 Sequence +0:41 move second child to first child ( temp 4-component vector of uint) +0:41 'txval32' ( temp 4-component vector of uint) +0:41 textureLodOffset ( temp 4-component vector of uint) +0:41 Construct combined texture-sampler ( temp usampler3D) +0:41 'g_tTex3du4' ( uniform utexture3D) +0:41 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:41 Constant: +0:41 0.750000 +0:? Constant: +0:? 1 (const int) +0:? 0 (const int) +0:? -1 (const int) +0:45 move second child to first child ( temp 4-component vector of float) +0:45 Color: direct index for structure ( temp 4-component vector of float) +0:45 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:45 Constant: +0:45 0 (const int) +0:45 Constant: +0:45 1.000000 +0:45 1.000000 +0:45 1.000000 +0:45 1.000000 +0:46 move second child to first child ( temp float) +0:46 Depth: direct index for structure ( temp float) +0:46 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:46 Constant: +0:46 1 (const int) +0:46 Constant: +0:46 1.000000 +0:48 Branch: Return with expression +0:48 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:28 Function Definition: main( ( temp void) +0:28 Function Parameters: +0:? Sequence +0:28 Sequence +0:28 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:28 1 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1D) +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_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:? 'Color' (layout( location=0) out 4-component vector of float) +0:? 'Depth' ( out float FragDepth) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 162 + + Capability Shader + Capability Sampled1D + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 145 149 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + MemberName 8(PS_OUTPUT) 1 "Depth" + Name 10 "@main(" + Name 13 "txval10" + Name 16 "g_tTex1df4" + Name 20 "g_sSamp" + Name 31 "txval11" + Name 34 "g_tTex1di4" + Name 44 "txval12" + Name 47 "g_tTex1du4" + Name 54 "txval20" + Name 57 "g_tTex2df4" + Name 68 "txval21" + Name 71 "g_tTex2di4" + Name 80 "txval22" + Name 83 "g_tTex2du4" + Name 94 "txval30" + Name 97 "g_tTex3df4" + Name 107 "txval31" + Name 110 "g_tTex3di4" + Name 118 "txval32" + Name 121 "g_tTex3du4" + Name 133 "psout" + Name 142 "flattenTemp" + Name 145 "Color" + Name 149 "Depth" + Name 152 "g_tTex1df4a" + Name 155 "g_tTexcdf4" + Name 158 "g_tTexcdi4" + Name 161 "g_tTexcdu4" + 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 34(g_tTex1di4) DescriptorSet 0 + Decorate 47(g_tTex1du4) DescriptorSet 0 + Decorate 57(g_tTex2df4) DescriptorSet 0 + Decorate 71(g_tTex2di4) DescriptorSet 0 + Decorate 83(g_tTex2du4) DescriptorSet 0 + 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 152(g_tTex1df4a) DescriptorSet 0 + Decorate 152(g_tTex1df4a) Binding 1 + Decorate 155(g_tTexcdf4) DescriptorSet 0 + Decorate 158(g_tTexcdi4) DescriptorSet 0 + Decorate 161(g_tTexcdu4) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8(PS_OUTPUT): TypeStruct 7(fvec4) 6(float) + 9: TypeFunction 8(PS_OUTPUT) + 12: TypePointer Function 7(fvec4) + 14: TypeImage 6(float) 1D 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: TypeSampledImage 14 + 24: 6(float) Constant 1036831949 + 25: 6(float) Constant 1061158912 + 26: TypeInt 32 1 + 27: 26(int) Constant 1 + 29: TypeVector 26(int) 4 + 30: TypePointer Function 29(ivec4) + 32: TypeImage 26(int) 1D sampled format:Unknown + 33: TypePointer UniformConstant 32 + 34(g_tTex1di4): 33(ptr) Variable UniformConstant + 37: TypeSampledImage 32 + 39: 6(float) Constant 1045220557 + 41: TypeInt 32 0 + 42: TypeVector 41(int) 4 + 43: TypePointer Function 42(ivec4) + 45: TypeImage 41(int) 1D sampled format:Unknown + 46: TypePointer UniformConstant 45 + 47(g_tTex1du4): 46(ptr) Variable UniformConstant + 50: TypeSampledImage 45 + 52: 6(float) Constant 1050253722 + 55: TypeImage 6(float) 2D sampled format:Unknown + 56: TypePointer UniformConstant 55 + 57(g_tTex2df4): 56(ptr) Variable UniformConstant + 60: TypeSampledImage 55 + 62: TypeVector 6(float) 2 + 63: 62(fvec2) ConstantComposite 24 39 + 64: TypeVector 26(int) 2 + 65: 26(int) Constant 0 + 66: 64(ivec2) ConstantComposite 27 65 + 69: TypeImage 26(int) 2D sampled format:Unknown + 70: TypePointer UniformConstant 69 + 71(g_tTex2di4): 70(ptr) Variable UniformConstant + 74: TypeSampledImage 69 + 76: 6(float) Constant 1053609165 + 77: 62(fvec2) ConstantComposite 52 76 + 78: 64(ivec2) ConstantComposite 27 27 + 81: TypeImage 41(int) 2D sampled format:Unknown + 82: TypePointer UniformConstant 81 + 83(g_tTex2du4): 82(ptr) Variable UniformConstant + 86: TypeSampledImage 81 + 88: 6(float) Constant 1056964608 + 89: 6(float) Constant 1058642330 + 90: 62(fvec2) ConstantComposite 88 89 + 91: 26(int) Constant 4294967295 + 92: 64(ivec2) ConstantComposite 27 91 + 95: TypeImage 6(float) 3D sampled format:Unknown + 96: TypePointer UniformConstant 95 + 97(g_tTex3df4): 96(ptr) Variable UniformConstant + 100: TypeSampledImage 95 + 102: TypeVector 6(float) 3 + 103: 102(fvec3) ConstantComposite 24 39 52 + 104: TypeVector 26(int) 3 + 105: 104(ivec3) ConstantComposite 27 65 27 + 108: TypeImage 26(int) 3D sampled format:Unknown + 109: TypePointer UniformConstant 108 + 110(g_tTex3di4): 109(ptr) Variable UniformConstant + 113: TypeSampledImage 108 + 115: 102(fvec3) ConstantComposite 76 88 89 + 116: 104(ivec3) ConstantComposite 27 27 27 + 119: TypeImage 41(int) 3D sampled format:Unknown + 120: TypePointer UniformConstant 119 + 121(g_tTex3du4): 120(ptr) Variable UniformConstant + 124: TypeSampledImage 119 + 126: 6(float) Constant 1060320051 + 127: 6(float) Constant 1061997773 + 128: 6(float) Constant 1063675494 + 129: 102(fvec3) ConstantComposite 126 127 128 + 130: 104(ivec3) ConstantComposite 27 65 91 + 132: TypePointer Function 8(PS_OUTPUT) + 134: 6(float) Constant 1065353216 + 135: 7(fvec4) ConstantComposite 134 134 134 134 + 137: TypePointer Function 6(float) + 144: TypePointer Output 7(fvec4) + 145(Color): 144(ptr) Variable Output + 148: TypePointer Output 6(float) + 149(Depth): 148(ptr) Variable Output +152(g_tTex1df4a): 15(ptr) Variable UniformConstant + 153: TypeImage 6(float) Cube sampled format:Unknown + 154: TypePointer UniformConstant 153 + 155(g_tTexcdf4): 154(ptr) Variable UniformConstant + 156: TypeImage 26(int) Cube sampled format:Unknown + 157: TypePointer UniformConstant 156 + 158(g_tTexcdi4): 157(ptr) Variable UniformConstant + 159: TypeImage 41(int) Cube sampled format:Unknown + 160: TypePointer UniformConstant 159 + 161(g_tTexcdu4): 160(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label +142(flattenTemp): 132(ptr) Variable Function + 143:8(PS_OUTPUT) FunctionCall 10(@main() + Store 142(flattenTemp) 143 + 146: 12(ptr) AccessChain 142(flattenTemp) 65 + 147: 7(fvec4) Load 146 + Store 145(Color) 147 + 150: 137(ptr) AccessChain 142(flattenTemp) 27 + 151: 6(float) Load 150 + Store 149(Depth) 151 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 13(txval10): 12(ptr) Variable Function + 31(txval11): 30(ptr) Variable Function + 44(txval12): 43(ptr) Variable Function + 54(txval20): 12(ptr) Variable Function + 68(txval21): 30(ptr) Variable Function + 80(txval22): 43(ptr) Variable Function + 94(txval30): 12(ptr) Variable Function + 107(txval31): 30(ptr) Variable Function + 118(txval32): 43(ptr) Variable Function + 133(psout): 132(ptr) Variable Function + 17: 14 Load 16(g_tTex1df4) + 21: 18 Load 20(g_sSamp) + 23: 22 SampledImage 17 21 + 28: 7(fvec4) ImageSampleExplicitLod 23 24 Lod ConstOffset 25 27 + Store 13(txval10) 28 + 35: 32 Load 34(g_tTex1di4) + 36: 18 Load 20(g_sSamp) + 38: 37 SampledImage 35 36 + 40: 29(ivec4) ImageSampleExplicitLod 38 39 Lod ConstOffset 25 27 + Store 31(txval11) 40 + 48: 45 Load 47(g_tTex1du4) + 49: 18 Load 20(g_sSamp) + 51: 50 SampledImage 48 49 + 53: 42(ivec4) ImageSampleExplicitLod 51 52 Lod ConstOffset 25 27 + Store 44(txval12) 53 + 58: 55 Load 57(g_tTex2df4) + 59: 18 Load 20(g_sSamp) + 61: 60 SampledImage 58 59 + 67: 7(fvec4) ImageSampleExplicitLod 61 63 Lod ConstOffset 25 66 + Store 54(txval20) 67 + 72: 69 Load 71(g_tTex2di4) + 73: 18 Load 20(g_sSamp) + 75: 74 SampledImage 72 73 + 79: 29(ivec4) ImageSampleExplicitLod 75 77 Lod ConstOffset 25 78 + Store 68(txval21) 79 + 84: 81 Load 83(g_tTex2du4) + 85: 18 Load 20(g_sSamp) + 87: 86 SampledImage 84 85 + 93: 42(ivec4) ImageSampleExplicitLod 87 90 Lod ConstOffset 25 92 + Store 80(txval22) 93 + 98: 95 Load 97(g_tTex3df4) + 99: 18 Load 20(g_sSamp) + 101: 100 SampledImage 98 99 + 106: 7(fvec4) ImageSampleExplicitLod 101 103 Lod ConstOffset 25 105 + Store 94(txval30) 106 + 111: 108 Load 110(g_tTex3di4) + 112: 18 Load 20(g_sSamp) + 114: 113 SampledImage 111 112 + 117: 29(ivec4) ImageSampleExplicitLod 114 115 Lod ConstOffset 25 116 + Store 107(txval31) 117 + 122: 119 Load 121(g_tTex3du4) + 123: 18 Load 20(g_sSamp) + 125: 124 SampledImage 122 123 + 131: 42(ivec4) ImageSampleExplicitLod 125 129 Lod ConstOffset 25 130 + Store 118(txval32) 131 + 136: 12(ptr) AccessChain 133(psout) 65 + Store 136 135 + 138: 137(ptr) AccessChain 133(psout) 27 + Store 138 134 + 139:8(PS_OUTPUT) Load 133(psout) + ReturnValue 139 + FunctionEnd 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 new file mode 100644 index 0000000..06b4c7b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out @@ -0,0 +1,473 @@ +hlsl.samplelevel.offsetarray.dx10.frag +Shader version: 450 +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}) +0:20 Function Parameters: +0:? Sequence +0:23 Sequence +0:23 move second child to first child ( temp 4-component vector of float) +0:23 'txval10' ( temp 4-component vector of float) +0:23 textureLodOffset ( temp 4-component vector of float) +0:23 Construct combined texture-sampler ( temp sampler1DArray) +0:23 'g_tTex1df4' (layout( binding=0) uniform texture1DArray) +0:23 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:23 Constant: +0:23 0.750000 +0:23 Constant: +0:23 0 (const int) +0:24 Sequence +0:24 move second child to first child ( temp 4-component vector of int) +0:24 'txval11' ( temp 4-component vector of int) +0:24 textureLodOffset ( temp 4-component vector of int) +0:24 Construct combined texture-sampler ( temp isampler1DArray) +0:24 'g_tTex1di4' ( uniform itexture1DArray) +0:24 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.200000 +0:? 0.300000 +0:24 Constant: +0:24 0.750000 +0:24 Constant: +0:24 1 (const int) +0:25 Sequence +0:25 move second child to first child ( temp 4-component vector of uint) +0:25 'txval12' ( temp 4-component vector of uint) +0:25 textureLodOffset ( temp 4-component vector of uint) +0:25 Construct combined texture-sampler ( temp usampler1DArray) +0:25 'g_tTex1du4' ( uniform utexture1DArray) +0:25 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:25 Constant: +0:25 0.750000 +0:25 Constant: +0:25 2 (const int) +0:27 Sequence +0:27 move second child to first child ( temp 4-component vector of float) +0:27 'txval20' ( temp 4-component vector of float) +0:27 textureLodOffset ( temp 4-component vector of float) +0:27 Construct combined texture-sampler ( temp sampler2DArray) +0:27 'g_tTex2df4' ( uniform texture2DArray) +0:27 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:27 Constant: +0:27 0.750000 +0:? Constant: +0:? 0 (const int) +0:? 0 (const int) +0:28 Sequence +0:28 move second child to first child ( temp 4-component vector of int) +0:28 'txval21' ( temp 4-component vector of int) +0:28 textureLodOffset ( temp 4-component vector of int) +0:28 Construct combined texture-sampler ( temp isampler2DArray) +0:28 'g_tTex2di4' ( uniform itexture2DArray) +0:28 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:? 0.500000 +0:28 Constant: +0:28 0.750000 +0:? Constant: +0:? 0 (const int) +0:? 0 (const int) +0:29 Sequence +0:29 move second child to first child ( temp 4-component vector of uint) +0:29 'txval22' ( temp 4-component vector of uint) +0:29 textureLodOffset ( temp 4-component vector of uint) +0:29 Construct combined texture-sampler ( temp usampler2DArray) +0:29 'g_tTex2du4' ( uniform utexture2DArray) +0:29 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:? 0.700000 +0:29 Constant: +0:29 0.750000 +0:? Constant: +0:? 0 (const int) +0:? 1 (const int) +0:33 move second child to first child ( temp 4-component vector of float) +0:33 Color: direct index for structure ( temp 4-component vector of float) +0:33 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:33 Constant: +0:33 0 (const int) +0:33 Constant: +0:33 1.000000 +0:33 1.000000 +0:33 1.000000 +0:33 1.000000 +0:34 move second child to first child ( temp float) +0:34 Depth: direct index for structure ( temp float) +0:34 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:34 Constant: +0:34 1 (const int) +0:34 Constant: +0:34 1.000000 +0:36 Branch: Return with expression +0:36 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:20 Function Definition: main( ( temp void) +0:20 Function Parameters: +0:? Sequence +0:20 Sequence +0:20 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:20 1 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1DArray) +0:? 'g_tTex1df4' (layout( binding=0) uniform texture1DArray) +0:? 'g_tTex1di4' ( uniform itexture1DArray) +0:? 'g_tTex1du4' ( uniform utexture1DArray) +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) + + +Linked fragment stage: + + +Shader version: 450 +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}) +0:20 Function Parameters: +0:? Sequence +0:23 Sequence +0:23 move second child to first child ( temp 4-component vector of float) +0:23 'txval10' ( temp 4-component vector of float) +0:23 textureLodOffset ( temp 4-component vector of float) +0:23 Construct combined texture-sampler ( temp sampler1DArray) +0:23 'g_tTex1df4' (layout( binding=0) uniform texture1DArray) +0:23 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:23 Constant: +0:23 0.750000 +0:23 Constant: +0:23 0 (const int) +0:24 Sequence +0:24 move second child to first child ( temp 4-component vector of int) +0:24 'txval11' ( temp 4-component vector of int) +0:24 textureLodOffset ( temp 4-component vector of int) +0:24 Construct combined texture-sampler ( temp isampler1DArray) +0:24 'g_tTex1di4' ( uniform itexture1DArray) +0:24 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.200000 +0:? 0.300000 +0:24 Constant: +0:24 0.750000 +0:24 Constant: +0:24 1 (const int) +0:25 Sequence +0:25 move second child to first child ( temp 4-component vector of uint) +0:25 'txval12' ( temp 4-component vector of uint) +0:25 textureLodOffset ( temp 4-component vector of uint) +0:25 Construct combined texture-sampler ( temp usampler1DArray) +0:25 'g_tTex1du4' ( uniform utexture1DArray) +0:25 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:25 Constant: +0:25 0.750000 +0:25 Constant: +0:25 2 (const int) +0:27 Sequence +0:27 move second child to first child ( temp 4-component vector of float) +0:27 'txval20' ( temp 4-component vector of float) +0:27 textureLodOffset ( temp 4-component vector of float) +0:27 Construct combined texture-sampler ( temp sampler2DArray) +0:27 'g_tTex2df4' ( uniform texture2DArray) +0:27 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:27 Constant: +0:27 0.750000 +0:? Constant: +0:? 0 (const int) +0:? 0 (const int) +0:28 Sequence +0:28 move second child to first child ( temp 4-component vector of int) +0:28 'txval21' ( temp 4-component vector of int) +0:28 textureLodOffset ( temp 4-component vector of int) +0:28 Construct combined texture-sampler ( temp isampler2DArray) +0:28 'g_tTex2di4' ( uniform itexture2DArray) +0:28 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:? 0.500000 +0:28 Constant: +0:28 0.750000 +0:? Constant: +0:? 0 (const int) +0:? 0 (const int) +0:29 Sequence +0:29 move second child to first child ( temp 4-component vector of uint) +0:29 'txval22' ( temp 4-component vector of uint) +0:29 textureLodOffset ( temp 4-component vector of uint) +0:29 Construct combined texture-sampler ( temp usampler2DArray) +0:29 'g_tTex2du4' ( uniform utexture2DArray) +0:29 'g_sSamp' (layout( binding=0) uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:? 0.700000 +0:29 Constant: +0:29 0.750000 +0:? Constant: +0:? 0 (const int) +0:? 1 (const int) +0:33 move second child to first child ( temp 4-component vector of float) +0:33 Color: direct index for structure ( temp 4-component vector of float) +0:33 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:33 Constant: +0:33 0 (const int) +0:33 Constant: +0:33 1.000000 +0:33 1.000000 +0:33 1.000000 +0:33 1.000000 +0:34 move second child to first child ( temp float) +0:34 Depth: direct index for structure ( temp float) +0:34 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:34 Constant: +0:34 1 (const int) +0:34 Constant: +0:34 1.000000 +0:36 Branch: Return with expression +0:36 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:20 Function Definition: main( ( temp void) +0:20 Function Parameters: +0:? Sequence +0:20 Sequence +0:20 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +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: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: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: +0:20 1 (const int) +0:? Linker Objects +0:? 'g_sSamp' (layout( binding=0) uniform sampler) +0:? 'g_tTex1df4a' (layout( binding=1) uniform texture1DArray) +0:? 'g_tTex1df4' (layout( binding=0) uniform texture1DArray) +0:? 'g_tTex1di4' ( uniform itexture1DArray) +0:? 'g_tTex1du4' ( uniform utexture1DArray) +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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 119 + + Capability Shader + Capability Sampled1D + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 111 115 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + MemberName 8(PS_OUTPUT) 1 "Depth" + Name 10 "@main(" + Name 13 "txval10" + Name 16 "g_tTex1df4" + Name 20 "g_sSamp" + Name 34 "txval11" + Name 37 "g_tTex1di4" + Name 49 "txval12" + Name 52 "g_tTex1du4" + Name 61 "txval20" + Name 64 "g_tTex2df4" + Name 74 "txval21" + Name 77 "g_tTex2di4" + Name 85 "txval22" + Name 88 "g_tTex2du4" + Name 99 "psout" + Name 108 "flattenTemp" + Name 111 "Color" + Name 115 "Depth" + Name 118 "g_tTex1df4a" + 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 52(g_tTex1du4) DescriptorSet 0 + 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 118(g_tTex1df4a) DescriptorSet 0 + Decorate 118(g_tTex1df4a) Binding 1 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8(PS_OUTPUT): TypeStruct 7(fvec4) 6(float) + 9: TypeFunction 8(PS_OUTPUT) + 12: TypePointer Function 7(fvec4) + 14: TypeImage 6(float) 1D array 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: 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: TypeInt 32 1 + 30: 29(int) Constant 0 + 32: TypeVector 29(int) 4 + 33: TypePointer Function 32(ivec4) + 35: TypeImage 29(int) 1D array sampled format:Unknown + 36: TypePointer UniformConstant 35 + 37(g_tTex1di4): 36(ptr) Variable UniformConstant + 40: TypeSampledImage 35 + 42: 6(float) Constant 1050253722 + 43: 24(fvec2) ConstantComposite 26 42 + 44: 29(int) Constant 1 + 46: TypeInt 32 0 + 47: TypeVector 46(int) 4 + 48: TypePointer Function 47(ivec4) + 50: TypeImage 46(int) 1D array sampled format:Unknown + 51: TypePointer UniformConstant 50 + 52(g_tTex1du4): 51(ptr) Variable UniformConstant + 55: TypeSampledImage 50 + 57: 6(float) Constant 1053609165 + 58: 24(fvec2) ConstantComposite 42 57 + 59: 29(int) Constant 2 + 62: TypeImage 6(float) 2D array sampled format:Unknown + 63: TypePointer UniformConstant 62 + 64(g_tTex2df4): 63(ptr) Variable UniformConstant + 67: TypeSampledImage 62 + 69: TypeVector 6(float) 3 + 70: 69(fvec3) ConstantComposite 25 26 42 + 71: TypeVector 29(int) 2 + 72: 71(ivec2) ConstantComposite 30 30 + 75: TypeImage 29(int) 2D array sampled format:Unknown + 76: TypePointer UniformConstant 75 + 77(g_tTex2di4): 76(ptr) Variable UniformConstant + 80: TypeSampledImage 75 + 82: 6(float) Constant 1056964608 + 83: 69(fvec3) ConstantComposite 42 57 82 + 86: TypeImage 46(int) 2D array sampled format:Unknown + 87: TypePointer UniformConstant 86 + 88(g_tTex2du4): 87(ptr) Variable UniformConstant + 91: TypeSampledImage 86 + 93: 6(float) Constant 1058642330 + 94: 6(float) Constant 1060320051 + 95: 69(fvec3) ConstantComposite 82 93 94 + 96: 71(ivec2) ConstantComposite 30 44 + 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(g_tTex1df4a): 15(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) 30 + 113: 7(fvec4) Load 112 + Store 111(Color) 113 + 116: 103(ptr) AccessChain 108(flattenTemp) 44 + 117: 6(float) Load 116 + Store 115(Depth) 117 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 13(txval10): 12(ptr) Variable Function + 34(txval11): 33(ptr) Variable Function + 49(txval12): 48(ptr) Variable Function + 61(txval20): 12(ptr) Variable Function + 74(txval21): 33(ptr) Variable Function + 85(txval22): 48(ptr) Variable Function + 99(psout): 98(ptr) Variable Function + 17: 14 Load 16(g_tTex1df4) + 21: 18 Load 20(g_sSamp) + 23: 22 SampledImage 17 21 + 31: 7(fvec4) ImageSampleExplicitLod 23 27 Lod ConstOffset 28 30 + Store 13(txval10) 31 + 38: 35 Load 37(g_tTex1di4) + 39: 18 Load 20(g_sSamp) + 41: 40 SampledImage 38 39 + 45: 32(ivec4) ImageSampleExplicitLod 41 43 Lod ConstOffset 28 44 + Store 34(txval11) 45 + 53: 50 Load 52(g_tTex1du4) + 54: 18 Load 20(g_sSamp) + 56: 55 SampledImage 53 54 + 60: 47(ivec4) ImageSampleExplicitLod 56 58 Lod ConstOffset 28 59 + Store 49(txval12) 60 + 65: 62 Load 64(g_tTex2df4) + 66: 18 Load 20(g_sSamp) + 68: 67 SampledImage 65 66 + 73: 7(fvec4) ImageSampleExplicitLod 68 70 Lod ConstOffset 28 72 + Store 61(txval20) 73 + 78: 75 Load 77(g_tTex2di4) + 79: 18 Load 20(g_sSamp) + 81: 80 SampledImage 78 79 + 84: 32(ivec4) ImageSampleExplicitLod 81 83 Lod ConstOffset 28 72 + Store 74(txval21) 84 + 89: 86 Load 88(g_tTex2du4) + 90: 18 Load 20(g_sSamp) + 92: 91 SampledImage 89 90 + 97: 47(ivec4) ImageSampleExplicitLod 92 95 Lod ConstOffset 28 96 + Store 85(txval22) 97 + 102: 12(ptr) AccessChain 99(psout) 30 + Store 102 101 + 104: 103(ptr) AccessChain 99(psout) 44 + Store 104 100 + 105:8(PS_OUTPUT) Load 99(psout) + ReturnValue 105 + 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 new file mode 100755 index 0000000..d3409d8 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.scope.frag.out @@ -0,0 +1,190 @@ +hlsl.scope.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:2 Function Definition: @PixelShaderFunction(vf4; ( temp void) +0:2 Function Parameters: +0:2 'input' ( in 4-component vector of float) +0:? Sequence +0:4 'x' ( temp int) +0:? Sequence +0:7 'x' ( temp float) +0:? Sequence +0:10 'x' ( temp bool) +0:? Sequence +0:13 'x' ( temp 3-component vector of float) +0:15 'x' ( temp bool) +0:17 'x' ( temp float) +0:19 'x' ( temp int) +0:21 Test condition and select ( temp void) +0:21 Condition +0:21 Compare Greater Than ( temp bool) +0:21 'x' ( temp int) +0:21 Constant: +0:21 0 (const int) +0:21 true case is null +0:24 Loop with condition tested first +0:24 Loop Condition +0:24 Compare Greater Than ( temp bool) +0:24 'x' ( temp int) +0:24 Constant: +0:24 0 (const int) +0:24 No loop body +0:27 Loop with condition not tested first +0:27 Loop Condition +0:29 Compare Greater Than ( temp bool) +0:29 'x' ( temp int) +0:29 Constant: +0:29 0 (const int) +0:27 No loop body +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 Function Call: @PixelShaderFunction(vf4; ( temp void) +0:? 'input' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'input' (layout( location=0) in 4-component vector of float) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:2 Function Definition: @PixelShaderFunction(vf4; ( temp void) +0:2 Function Parameters: +0:2 'input' ( in 4-component vector of float) +0:? Sequence +0:4 'x' ( temp int) +0:? Sequence +0:7 'x' ( temp float) +0:? Sequence +0:10 'x' ( temp bool) +0:? Sequence +0:13 'x' ( temp 3-component vector of float) +0:15 'x' ( temp bool) +0:17 'x' ( temp float) +0:19 'x' ( temp int) +0:21 Test condition and select ( temp void) +0:21 Condition +0:21 Compare Greater Than ( temp bool) +0:21 'x' ( temp int) +0:21 Constant: +0:21 0 (const int) +0:21 true case is null +0:24 Loop with condition tested first +0:24 Loop Condition +0:24 Compare Greater Than ( temp bool) +0:24 'x' ( temp int) +0:24 Constant: +0:24 0 (const int) +0:24 No loop body +0:27 Loop with condition not tested first +0:27 Loop Condition +0:29 Compare Greater Than ( temp bool) +0:29 'x' ( temp int) +0:29 Constant: +0:29 0 (const int) +0:27 No loop body +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 Function Call: @PixelShaderFunction(vf4; ( temp void) +0:? 'input' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'input' (layout( location=0) in 4-component vector of float) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 49 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "PixelShaderFunction" 44 + ExecutionMode 4 OriginUpperLeft + Name 4 "PixelShaderFunction" + Name 11 "@PixelShaderFunction(vf4;" + Name 10 "input" + Name 15 "x" + Name 17 "x" + Name 20 "x" + Name 23 "x" + Name 42 "input" + Name 44 "input" + Name 46 "param" + Decorate 44(input) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 9: TypeFunction 2 8(ptr) + 13: TypeInt 32 1 + 14: TypePointer Function 13(int) + 16: TypePointer Function 6(float) + 18: TypeBool + 19: TypePointer Function 18(bool) + 21: TypeVector 6(float) 3 + 22: TypePointer Function 21(fvec3) + 25: 13(int) Constant 0 + 43: TypePointer Input 7(fvec4) + 44(input): 43(ptr) Variable Input +4(PixelShaderFunction): 2 Function None 3 + 5: Label + 42(input): 8(ptr) Variable Function + 46(param): 8(ptr) Variable Function + 45: 7(fvec4) Load 44(input) + Store 42(input) 45 + 47: 7(fvec4) Load 42(input) + Store 46(param) 47 + 48: 2 FunctionCall 11(@PixelShaderFunction(vf4;) 46(param) + Return + FunctionEnd +11(@PixelShaderFunction(vf4;): 2 Function None 9 + 10(input): 8(ptr) FunctionParameter + 12: Label + 15(x): 14(ptr) Variable Function + 17(x): 16(ptr) Variable Function + 20(x): 19(ptr) Variable Function + 23(x): 22(ptr) Variable Function + 24: 13(int) Load 15(x) + 26: 18(bool) SGreaterThan 24 25 + SelectionMerge 28 None + BranchConditional 26 27 28 + 27: Label + Branch 28 + 28: Label + Branch 29 + 29: Label + LoopMerge 31 32 None + Branch 33 + 33: Label + 34: 13(int) Load 15(x) + 35: 18(bool) SGreaterThan 34 25 + BranchConditional 35 30 31 + 30: Label + Branch 32 + 32: Label + Branch 29 + 31: Label + Branch 36 + 36: Label + LoopMerge 38 39 None + Branch 37 + 37: Label + Branch 39 + 39: Label + 40: 13(int) Load 15(x) + 41: 18(bool) SGreaterThan 40 25 + BranchConditional 41 36 38 + 38: Label + Return + 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 new file mode 100755 index 0000000..caed636 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.semantic.geom.out @@ -0,0 +1,246 @@ +hlsl.semantic.geom +Shader version: 450 +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:? 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:? Sequence +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: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:? 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) + + +Linked geometry stage: + + +Shader version: 450 +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:? 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:? Sequence +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: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:? 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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 62 + + Capability Geometry + Capability ClipDistance + Capability CullDistance + Capability MultiViewport + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Geometry 4 "main" 25 34 39 44 49 55 + ExecutionMode 4 Triangles + ExecutionMode 4 Invocations 1 + ExecutionMode 4 OutputLineStrip + ExecutionMode 4 OutputVertices 4 + 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;" + 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 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: 6(int) Constant 3 + 8: TypeArray 6(int) 7 + 9: TypePointer Function 8 + 10: TypeFloat 32 + 11: TypeInt 32 1 + 12(S): TypeStruct 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) + 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 + Return + FunctionEnd +17(@main(u1[3];struct-S-f1-f1-u1-u1-i11;): 12(S) 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 + 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 new file mode 100755 index 0000000..0b08856 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.semantic.vert.out @@ -0,0 +1,373 @@ +hlsl.semantic.vert +Shader version: 450 +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:? 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:? 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:? 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) + + +Linked vertex stage: + + +Shader version: 450 +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:? 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:? 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:? 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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 77 + + 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 + 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;" + 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 + 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) + 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 + 23: TypePointer Function 6(float) + 25: 7(int) Constant 1 + 26(clip0): 20(ptr) Variable Input + 29: 7(int) Constant 2 + 30(clip7): 20(ptr) Variable Input + 33: 7(int) Constant 3 + 34(cull): 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) + 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) + 24: 23(ptr) AccessChain 18(ins) 19 + Store 24 22 + 27: 6(float) Load 26(clip0) + 28: 23(ptr) AccessChain 18(ins) 25 + Store 28 27 + 31: 6(float) Load 30(clip7) + 32: 23(ptr) AccessChain 18(ins) 29 + Store 32 31 + 35: 6(float) Load 34(cull) + 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 + Return + FunctionEnd +12(@main(struct-S-f1-f1-f1-f1-f1-f1-i11;): 8(S) Function None 10 + 11(ins): 9(ptr) FunctionParameter + 13: Label + 14(s): 9(ptr) Variable Function + 15: 8(S) Load 14(s) + ReturnValue 15 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.semicolons.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.semicolons.frag.out new file mode 100644 index 0000000..9856b5a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.semicolons.frag.out @@ -0,0 +1,130 @@ +hlsl.semicolons.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:2 Function Definition: MyFunc( ( temp void) +0:2 Function Parameters: +0:8 Function Definition: MyFunc2( ( temp void) +0:8 Function Parameters: +0:13 Function Definition: @main( ( temp structure{ temp 4-component vector of float color}) +0:13 Function Parameters: +0:? Sequence +0:16 move second child to first child ( temp 4-component vector of float) +0:16 color: direct index for structure ( temp 4-component vector of float) +0:16 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:16 Constant: +0:16 0 (const int) +0:16 Constant: +0:16 1.000000 +0:16 1.000000 +0:16 1.000000 +0:16 1.000000 +0:17 Branch: Return with expression +0:17 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:13 Function Definition: main( ( temp void) +0:13 Function Parameters: +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: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) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:2 Function Definition: MyFunc( ( temp void) +0:2 Function Parameters: +0:8 Function Definition: MyFunc2( ( temp void) +0:8 Function Parameters: +0:13 Function Definition: @main( ( temp structure{ temp 4-component vector of float color}) +0:13 Function Parameters: +0:? Sequence +0:16 move second child to first child ( temp 4-component vector of float) +0:16 color: direct index for structure ( temp 4-component vector of float) +0:16 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:16 Constant: +0:16 0 (const int) +0:16 Constant: +0:16 1.000000 +0:16 1.000000 +0:16 1.000000 +0:16 1.000000 +0:17 Branch: Return with expression +0:17 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:13 Function Definition: main( ( temp void) +0:13 Function Parameters: +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: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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 31 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 28 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 6 "MyFunc(" + Name 8 "MyFunc2(" + Name 12 "PS_OUTPUT" + MemberName 12(PS_OUTPUT) 0 "color" + Name 14 "@main(" + Name 17 "ps_output" + Name 28 "color" + Decorate 28(color) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 10: TypeFloat 32 + 11: TypeVector 10(float) 4 + 12(PS_OUTPUT): TypeStruct 11(fvec4) + 13: TypeFunction 12(PS_OUTPUT) + 16: TypePointer Function 12(PS_OUTPUT) + 18: TypeInt 32 1 + 19: 18(int) Constant 0 + 20: 10(float) Constant 1065353216 + 21: 11(fvec4) ConstantComposite 20 20 20 20 + 22: TypePointer Function 11(fvec4) + 27: TypePointer Output 11(fvec4) + 28(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 + Return + FunctionEnd + 6(MyFunc(): 2 Function None 3 + 7: Label + Return + FunctionEnd + 8(MyFunc2(): 2 Function None 3 + 9: Label + Return + FunctionEnd + 14(@main():12(PS_OUTPUT) Function None 13 + 15: Label + 17(ps_output): 16(ptr) Variable Function + 23: 22(ptr) AccessChain 17(ps_output) 19 + Store 23 21 + 24:12(PS_OUTPUT) Load 17(ps_output) + ReturnValue 24 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.shapeConv.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.shapeConv.frag.out new file mode 100755 index 0000000..07fa9fd --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.shapeConv.frag.out @@ -0,0 +1,346 @@ +hlsl.shapeConv.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:2 Function Definition: PixelShaderFunction(vf4;f1; ( temp 4-component vector of float) +0:2 Function Parameters: +0:2 'input' ( in 4-component vector of float) +0:2 'f' ( in float) +0:? Sequence +0:4 move second child to first child ( temp 4-component vector of float) +0:4 'v' ( temp 4-component vector of float) +0:4 Constant: +0:4 1.000000 +0:4 1.000000 +0:4 1.000000 +0:4 1.000000 +0:5 move second child to first child ( temp 4-component vector of float) +0:5 'v' ( temp 4-component vector of float) +0:5 Constant: +0:5 2.000000 +0:5 2.000000 +0:5 2.000000 +0:5 2.000000 +0:6 move second child to first child ( temp 4-component vector of float) +0:6 'v' ( temp 4-component vector of float) +0:6 Construct vec4 ( temp 4-component vector of float) +0:6 'f' ( in float) +0:8 move second child to first child ( temp 3-component vector of float) +0:8 'u' ( temp 3-component vector of float) +0:8 Constant: +0:8 1.000000 +0:8 1.000000 +0:8 1.000000 +0:9 move second child to first child ( temp 3-component vector of float) +0:9 'u' ( temp 3-component vector of float) +0:9 Constant: +0:9 2.000000 +0:9 2.000000 +0:9 2.000000 +0:10 move second child to first child ( temp 3-component vector of float) +0:10 'u' ( temp 3-component vector of float) +0:10 Construct vec3 ( temp 3-component vector of float) +0:10 Construct float ( temp float) +0:10 'f' ( in float) +0:11 Sequence +0:11 move second child to first child ( temp 2-component vector of float) +0:11 'w' ( temp 2-component vector of float) +0:11 Constant: +0:11 2.000000 +0:11 2.000000 +0:12 Sequence +0:12 move second child to first child ( temp float) +0:12 'V' ( temp float) +0:12 Constant: +0:12 1.000000 +0:13 Sequence +0:13 move second child to first child ( temp 3-component vector of float) +0:13 'MyVal' ( temp 3-component vector of float) +0:13 Construct vec3 ( temp 3-component vector of float) +0:13 'V' ( temp float) +0:16 Compare Greater Than ( temp 3-component vector of bool) +0:16 'foo' ( temp 3-component vector of float) +0:16 Constant: +0:16 4.000000 +0:16 4.000000 +0:16 4.000000 +0:17 Compare Greater Than or Equal ( temp 3-component vector of bool) +0:17 'foo' ( temp 3-component vector of float) +0:17 Constant: +0:17 5.000000 +0:17 5.000000 +0:17 5.000000 +0:18 Compare Less Than ( temp 3-component vector of bool) +0:18 Constant: +0:18 6.000000 +0:18 6.000000 +0:18 6.000000 +0:18 'foo' ( temp 3-component vector of float) +0:19 Compare Less Than or Equal ( temp 3-component vector of bool) +0:19 Constant: +0:19 7.000000 +0:19 7.000000 +0:19 7.000000 +0:19 'foo' ( temp 3-component vector of float) +0:21 all ( temp bool) +0:21 Equal ( temp 4-component vector of bool) +0:21 Construct vec4 ( temp 4-component vector of float) +0:21 direct index ( temp float) +0:21 'v' ( temp 4-component vector of float) +0:21 Constant: +0:21 0 (const int) +0:21 'v' ( temp 4-component vector of float) +0:22 any ( temp bool) +0:22 NotEqual ( temp 4-component vector of bool) +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: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:? Linker Objects + + +Linked fragment stage: + +WARNING: Linking fragment stage: Entry point not found + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:2 Function Definition: PixelShaderFunction(vf4;f1; ( temp 4-component vector of float) +0:2 Function Parameters: +0:2 'input' ( in 4-component vector of float) +0:2 'f' ( in float) +0:? Sequence +0:4 move second child to first child ( temp 4-component vector of float) +0:4 'v' ( temp 4-component vector of float) +0:4 Constant: +0:4 1.000000 +0:4 1.000000 +0:4 1.000000 +0:4 1.000000 +0:5 move second child to first child ( temp 4-component vector of float) +0:5 'v' ( temp 4-component vector of float) +0:5 Constant: +0:5 2.000000 +0:5 2.000000 +0:5 2.000000 +0:5 2.000000 +0:6 move second child to first child ( temp 4-component vector of float) +0:6 'v' ( temp 4-component vector of float) +0:6 Construct vec4 ( temp 4-component vector of float) +0:6 'f' ( in float) +0:8 move second child to first child ( temp 3-component vector of float) +0:8 'u' ( temp 3-component vector of float) +0:8 Constant: +0:8 1.000000 +0:8 1.000000 +0:8 1.000000 +0:9 move second child to first child ( temp 3-component vector of float) +0:9 'u' ( temp 3-component vector of float) +0:9 Constant: +0:9 2.000000 +0:9 2.000000 +0:9 2.000000 +0:10 move second child to first child ( temp 3-component vector of float) +0:10 'u' ( temp 3-component vector of float) +0:10 Construct vec3 ( temp 3-component vector of float) +0:10 Construct float ( temp float) +0:10 'f' ( in float) +0:11 Sequence +0:11 move second child to first child ( temp 2-component vector of float) +0:11 'w' ( temp 2-component vector of float) +0:11 Constant: +0:11 2.000000 +0:11 2.000000 +0:12 Sequence +0:12 move second child to first child ( temp float) +0:12 'V' ( temp float) +0:12 Constant: +0:12 1.000000 +0:13 Sequence +0:13 move second child to first child ( temp 3-component vector of float) +0:13 'MyVal' ( temp 3-component vector of float) +0:13 Construct vec3 ( temp 3-component vector of float) +0:13 'V' ( temp float) +0:16 Compare Greater Than ( temp 3-component vector of bool) +0:16 'foo' ( temp 3-component vector of float) +0:16 Constant: +0:16 4.000000 +0:16 4.000000 +0:16 4.000000 +0:17 Compare Greater Than or Equal ( temp 3-component vector of bool) +0:17 'foo' ( temp 3-component vector of float) +0:17 Constant: +0:17 5.000000 +0:17 5.000000 +0:17 5.000000 +0:18 Compare Less Than ( temp 3-component vector of bool) +0:18 Constant: +0:18 6.000000 +0:18 6.000000 +0:18 6.000000 +0:18 'foo' ( temp 3-component vector of float) +0:19 Compare Less Than or Equal ( temp 3-component vector of bool) +0:19 Constant: +0:19 7.000000 +0:19 7.000000 +0:19 7.000000 +0:19 'foo' ( temp 3-component vector of float) +0:21 all ( temp bool) +0:21 Equal ( temp 4-component vector of bool) +0:21 Construct vec4 ( temp 4-component vector of float) +0:21 direct index ( temp float) +0:21 'v' ( temp 4-component vector of float) +0:21 Constant: +0:21 0 (const int) +0:21 'v' ( temp 4-component vector of float) +0:22 any ( temp bool) +0:22 NotEqual ( temp 4-component vector of bool) +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: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:? Linker Objects + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 85 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 13 "PixelShaderFunction(vf4;f1;" + Name 11 "input" + Name 12 "f" + Name 15 "v" + Name 24 "u" + Name 31 "w" + Name 33 "V" + Name 34 "MyVal" + Name 37 "foo" + Name 70 "f1" + 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) + 16: 6(float) Constant 1065353216 + 17: 7(fvec4) ConstantComposite 16 16 16 16 + 18: 6(float) Constant 1073741824 + 19: 7(fvec4) ConstantComposite 18 18 18 18 + 22: TypeVector 6(float) 3 + 23: TypePointer Function 22(fvec3) + 25: 22(fvec3) ConstantComposite 16 16 16 + 26: 22(fvec3) ConstantComposite 18 18 18 + 29: TypeVector 6(float) 2 + 30: TypePointer Function 29(fvec2) + 32: 29(fvec2) ConstantComposite 18 18 + 39: 6(float) Constant 1082130432 + 40: 22(fvec3) ConstantComposite 39 39 39 + 41: TypeBool + 42: TypeVector 41(bool) 3 + 45: 6(float) Constant 1084227584 + 46: 22(fvec3) ConstantComposite 45 45 45 + 48: 6(float) Constant 1086324736 + 49: 22(fvec3) ConstantComposite 48 48 48 + 52: 6(float) Constant 1088421888 + 53: 22(fvec3) ConstantComposite 52 52 52 + 56: TypeInt 32 0 + 57: 56(int) Constant 0 + 62: TypeVector 41(bool) 4 + 4(main): 2 Function None 3 + 5: Label + Return + FunctionEnd +13(PixelShaderFunction(vf4;f1;): 7(fvec4) Function None 10 + 11(input): 8(ptr) FunctionParameter + 12(f): 9(ptr) FunctionParameter + 14: Label + 15(v): 8(ptr) Variable Function + 24(u): 23(ptr) Variable Function + 31(w): 30(ptr) Variable Function + 33(V): 9(ptr) Variable Function + 34(MyVal): 23(ptr) Variable Function + 37(foo): 23(ptr) Variable Function + 70(f1): 9(ptr) Variable Function + Store 15(v) 17 + Store 15(v) 19 + 20: 6(float) Load 12(f) + 21: 7(fvec4) CompositeConstruct 20 20 20 20 + Store 15(v) 21 + Store 24(u) 25 + Store 24(u) 26 + 27: 6(float) Load 12(f) + 28: 22(fvec3) CompositeConstruct 27 27 27 + Store 24(u) 28 + Store 31(w) 32 + Store 33(V) 16 + 35: 6(float) Load 33(V) + 36: 22(fvec3) CompositeConstruct 35 35 35 + Store 34(MyVal) 36 + 38: 22(fvec3) Load 37(foo) + 43: 42(bvec3) FOrdGreaterThan 38 40 + 44: 22(fvec3) Load 37(foo) + 47: 42(bvec3) FOrdGreaterThanEqual 44 46 + 50: 22(fvec3) Load 37(foo) + 51: 42(bvec3) FOrdLessThan 49 50 + 54: 22(fvec3) Load 37(foo) + 55: 42(bvec3) FOrdLessThanEqual 53 54 + 58: 9(ptr) AccessChain 15(v) 57 + 59: 6(float) Load 58 + 60: 7(fvec4) CompositeConstruct 59 59 59 59 + 61: 7(fvec4) Load 15(v) + 63: 62(bvec4) FOrdEqual 60 61 + 64: 41(bool) All 63 + 65: 6(float) Load 12(f) + 66: 7(fvec4) CompositeConstruct 65 65 65 65 + 67: 7(fvec4) Load 15(v) + 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 + 75: 7(fvec4) Load 15(v) + 76: 6(float) CompositeExtract 75 0 + 77: 6(float) Load 70(f1) + 78: 41(bool) FOrdLessThan 76 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 + 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 new file mode 100755 index 0000000..54ca7fa --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.shapeConvRet.frag.out @@ -0,0 +1,126 @@ +hlsl.shapeConvRet.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:2 Function Definition: foo( ( temp 3-component vector of int) +0:2 Function Parameters: +0:? Sequence +0:3 Branch: Return with expression +0:3 Constant: +0:3 13 (const int) +0:3 13 (const int) +0:3 13 (const int) +0:7 Function Definition: @main(f1; ( temp 4-component vector of float) +0:7 Function Parameters: +0:7 'f' ( in float) +0:? Sequence +0:8 Branch: Return with expression +0:8 Construct vec4 ( temp 4-component vector of float) +0:8 'f' ( in float) +0:7 Function Definition: main( ( temp void) +0:7 Function Parameters: +0:? Sequence +0:7 move second child to first child ( temp float) +0:? 'f' ( temp float) +0:? 'f' (layout( location=0) in float) +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(f1; ( temp 4-component vector of float) +0:? 'f' ( temp float) +0:? Linker Objects +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) +0:? 'f' (layout( location=0) in float) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:2 Function Definition: foo( ( temp 3-component vector of int) +0:2 Function Parameters: +0:? Sequence +0:3 Branch: Return with expression +0:3 Constant: +0:3 13 (const int) +0:3 13 (const int) +0:3 13 (const int) +0:7 Function Definition: @main(f1; ( temp 4-component vector of float) +0:7 Function Parameters: +0:7 'f' ( in float) +0:? Sequence +0:8 Branch: Return with expression +0:8 Construct vec4 ( temp 4-component vector of float) +0:8 'f' ( in float) +0:7 Function Definition: main( ( temp void) +0:7 Function Parameters: +0:? Sequence +0:7 move second child to first child ( temp float) +0:? 'f' ( temp float) +0:? 'f' (layout( location=0) in float) +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(f1; ( temp 4-component vector of float) +0:? 'f' ( temp float) +0:? Linker Objects +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) +0:? 'f' (layout( location=0) in float) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 35 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 28 31 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 9 "foo(" + Name 16 "@main(f1;" + Name 15 "f" + Name 26 "f" + Name 28 "f" + Name 31 "@entryPointOutput" + Name 32 "param" + Decorate 28(f) Location 0 + Decorate 31(@entryPointOutput) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypeVector 6(int) 3 + 8: TypeFunction 7(ivec3) + 11: TypeFloat 32 + 12: TypePointer Function 11(float) + 13: TypeVector 11(float) 4 + 14: TypeFunction 13(fvec4) 12(ptr) + 18: 6(int) Constant 13 + 19: 7(ivec3) ConstantComposite 18 18 18 + 27: TypePointer Input 11(float) + 28(f): 27(ptr) Variable Input + 30: TypePointer Output 13(fvec4) +31(@entryPointOutput): 30(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 26(f): 12(ptr) Variable Function + 32(param): 12(ptr) Variable Function + 29: 11(float) Load 28(f) + Store 26(f) 29 + 33: 11(float) Load 26(f) + Store 32(param) 33 + 34: 13(fvec4) FunctionCall 16(@main(f1;) 32(param) + Store 31(@entryPointOutput) 34 + Return + FunctionEnd + 9(foo(): 7(ivec3) Function None 8 + 10: Label + ReturnValue 19 + FunctionEnd + 16(@main(f1;): 13(fvec4) Function None 14 + 15(f): 12(ptr) FunctionParameter + 17: Label + 22: 11(float) Load 15(f) + 23: 13(fvec4) CompositeConstruct 22 22 22 22 + ReturnValue 23 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sin.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sin.frag.out new file mode 100755 index 0000000..1f96440 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sin.frag.out @@ -0,0 +1,100 @@ +hlsl.sin.frag +Shader version: 450 +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:? Sequence +0:3 Branch: Return with expression +0:3 sine ( temp 4-component vector of float) +0:3 'input' ( in 4-component vector of 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 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:? Linker Objects +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: 450 +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:? Sequence +0:3 Branch: Return with expression +0:3 sine ( temp 4-component vector of float) +0:3 'input' ( in 4-component vector of 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 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:? Linker Objects +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 26 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "PixelShaderFunction" 19 22 + ExecutionMode 4 OriginUpperLeft + Name 4 "PixelShaderFunction" + Name 11 "@PixelShaderFunction(vf4;" + Name 10 "input" + Name 17 "input" + Name 19 "input" + Name 22 "@entryPointOutput" + Name 23 "param" + Decorate 19(input) Location 0 + Decorate 22(@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) + 18: TypePointer Input 7(fvec4) + 19(input): 18(ptr) Variable Input + 21: TypePointer Output 7(fvec4) +22(@entryPointOutput): 21(ptr) Variable Output +4(PixelShaderFunction): 2 Function None 3 + 5: Label + 17(input): 8(ptr) Variable Function + 23(param): 8(ptr) Variable Function + 20: 7(fvec4) Load 19(input) + Store 17(input) 20 + 24: 7(fvec4) Load 17(input) + Store 23(param) 24 + 25: 7(fvec4) FunctionCall 11(@PixelShaderFunction(vf4;) 23(param) + Store 22(@entryPointOutput) 25 + Return + FunctionEnd +11(@PixelShaderFunction(vf4;): 7(fvec4) Function None 9 + 10(input): 8(ptr) FunctionParameter + 12: Label + 13: 7(fvec4) Load 10(input) + 14: 7(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 13 + ReturnValue 14 + 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 new file mode 100755 index 0000000..e8a98cb --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.staticMemberFunction.frag.out @@ -0,0 +1,199 @@ +hlsl.staticMemberFunction.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:5 Function Definition: Test::staticMemFun(vf4; ( global 4-component vector of float) +0:5 Function Parameters: +0:5 'a' ( in 4-component vector of float) +0:? Sequence +0:6 Branch: Return with expression +0:6 vector-scale ( temp 4-component vector of float) +0:6 Constant: +0:6 2.000000 +0:6 'a' ( in 4-component vector of float) +0:9 Function Definition: Test::staticMemFun(i1; ( global int) +0:9 Function Parameters: +0:9 'a' ( in int) +0:? Sequence +0:10 Branch: Return with expression +0:10 add ( temp int) +0:10 Constant: +0:10 2 (const int) +0:10 'a' ( in int) +0:16 Function Definition: @main( ( temp 4-component vector of float) +0:16 Function Parameters: +0:? Sequence +0:18 Sequence +0:18 move second child to first child ( temp 4-component vector of float) +0:18 'f4' ( temp 4-component vector of float) +0:? Constant: +0:? 1.000000 +0:? 1.000000 +0:? 1.000000 +0:? 1.000000 +0:19 add second child into first child ( temp 4-component vector of float) +0:19 'f4' ( temp 4-component vector of float) +0:19 Function Call: Test::staticMemFun(vf4; ( global 4-component vector of float) +0:? Constant: +0:? 5.000000 +0:? 5.000000 +0:? 5.000000 +0:? 5.000000 +0:20 add second child into first child ( temp 4-component vector of float) +0:20 'f4' ( temp 4-component vector of float) +0:20 Convert int to float ( temp float) +0:20 Function Call: Test::staticMemFun(i1; ( global int) +0:20 Constant: +0:20 7 (const int) +0:21 Branch: Return with expression +0:21 'f4' ( temp 4-component vector of float) +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:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) +0:16 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: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:5 Function Definition: Test::staticMemFun(vf4; ( global 4-component vector of float) +0:5 Function Parameters: +0:5 'a' ( in 4-component vector of float) +0:? Sequence +0:6 Branch: Return with expression +0:6 vector-scale ( temp 4-component vector of float) +0:6 Constant: +0:6 2.000000 +0:6 'a' ( in 4-component vector of float) +0:9 Function Definition: Test::staticMemFun(i1; ( global int) +0:9 Function Parameters: +0:9 'a' ( in int) +0:? Sequence +0:10 Branch: Return with expression +0:10 add ( temp int) +0:10 Constant: +0:10 2 (const int) +0:10 'a' ( in int) +0:16 Function Definition: @main( ( temp 4-component vector of float) +0:16 Function Parameters: +0:? Sequence +0:18 Sequence +0:18 move second child to first child ( temp 4-component vector of float) +0:18 'f4' ( temp 4-component vector of float) +0:? Constant: +0:? 1.000000 +0:? 1.000000 +0:? 1.000000 +0:? 1.000000 +0:19 add second child into first child ( temp 4-component vector of float) +0:19 'f4' ( temp 4-component vector of float) +0:19 Function Call: Test::staticMemFun(vf4; ( global 4-component vector of float) +0:? Constant: +0:? 5.000000 +0:? 5.000000 +0:? 5.000000 +0:? 5.000000 +0:20 add second child into first child ( temp 4-component vector of float) +0:20 'f4' ( temp 4-component vector of float) +0:20 Convert int to float ( temp float) +0:20 Function Call: Test::staticMemFun(i1; ( global int) +0:20 Constant: +0:20 7 (const int) +0:21 Branch: Return with expression +0:21 'f4' ( temp 4-component vector of float) +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:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) +0:16 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): 80001 +// Id's are bound by 54 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 52 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 11 "Test::staticMemFun(vf4;" + Name 10 "a" + Name 17 "Test::staticMemFun(i1;" + Name 16 "a" + Name 20 "@main(" + Name 32 "f4" + Name 37 "param" + Name 42 "param" + Name 52 "@entryPointOutput" + Decorate 52(@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) + 15: TypeFunction 13(int) 14(ptr) + 19: TypeFunction 7(fvec4) + 22: 6(float) Constant 1073741824 + 27: 13(int) Constant 2 + 33: 6(float) Constant 1065353216 + 34: 7(fvec4) ConstantComposite 33 33 33 33 + 35: 6(float) Constant 1084227584 + 36: 7(fvec4) ConstantComposite 35 35 35 35 + 41: 13(int) Constant 7 + 51: TypePointer Output 7(fvec4) +52(@entryPointOutput): 51(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 53: 7(fvec4) FunctionCall 20(@main() + Store 52(@entryPointOutput) 53 + Return + FunctionEnd +11(Test::staticMemFun(vf4;): 7(fvec4) Function None 9 + 10(a): 8(ptr) FunctionParameter + 12: Label + 23: 7(fvec4) Load 10(a) + 24: 7(fvec4) VectorTimesScalar 23 22 + ReturnValue 24 + FunctionEnd +17(Test::staticMemFun(i1;): 13(int) Function None 15 + 16(a): 14(ptr) FunctionParameter + 18: Label + 28: 13(int) Load 16(a) + 29: 13(int) IAdd 27 28 + ReturnValue 29 + FunctionEnd + 20(@main(): 7(fvec4) Function None 19 + 21: Label + 32(f4): 8(ptr) Variable Function + 37(param): 8(ptr) Variable Function + 42(param): 14(ptr) Variable Function + Store 32(f4) 34 + Store 37(param) 36 + 38: 7(fvec4) FunctionCall 11(Test::staticMemFun(vf4;) 37(param) + 39: 7(fvec4) Load 32(f4) + 40: 7(fvec4) FAdd 39 38 + Store 32(f4) 40 + Store 42(param) 41 + 43: 13(int) FunctionCall 17(Test::staticMemFun(i1;) 42(param) + 44: 6(float) ConvertSToF 43 + 45: 7(fvec4) Load 32(f4) + 46: 7(fvec4) CompositeConstruct 44 44 44 44 + 47: 7(fvec4) FAdd 45 46 + Store 32(f4) 47 + 48: 7(fvec4) Load 32(f4) + ReturnValue 48 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.string.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.string.frag.out new file mode 100755 index 0000000..c4a118f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.string.frag.out @@ -0,0 +1,96 @@ +hlsl.string.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:10 Function Definition: @main(f1; ( temp float) +0:10 Function Parameters: +0:10 'f' ( in float) +0:? Sequence +0:11 Branch: Return with expression +0:11 'f' ( in float) +0:10 Function Definition: main( ( temp void) +0:10 Function Parameters: +0:? Sequence +0:10 move second child to first child ( temp float) +0:? 'f' ( temp float) +0:? 'f' (layout( location=0) in float) +0:10 move second child to first child ( temp float) +0:? '@entryPointOutput' (layout( location=0) out float) +0:10 Function Call: @main(f1; ( temp float) +0:? 'f' ( temp float) +0:? Linker Objects +0:? '@entryPointOutput' (layout( location=0) out float) +0:? 'f' (layout( location=0) in float) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:10 Function Definition: @main(f1; ( temp float) +0:10 Function Parameters: +0:10 'f' ( in float) +0:? Sequence +0:11 Branch: Return with expression +0:11 'f' ( in float) +0:10 Function Definition: main( ( temp void) +0:10 Function Parameters: +0:? Sequence +0:10 move second child to first child ( temp float) +0:? 'f' ( temp float) +0:? 'f' (layout( location=0) in float) +0:10 move second child to first child ( temp float) +0:? '@entryPointOutput' (layout( location=0) out float) +0:10 Function Call: @main(f1; ( temp float) +0:? 'f' ( temp float) +0:? Linker Objects +0:? '@entryPointOutput' (layout( location=0) out float) +0:? 'f' (layout( location=0) in float) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 24 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 17 20 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 10 "@main(f1;" + Name 9 "f" + Name 15 "f" + Name 17 "f" + Name 20 "@entryPointOutput" + Name 21 "param" + Decorate 17(f) Location 0 + Decorate 20(@entryPointOutput) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypePointer Function 6(float) + 8: TypeFunction 6(float) 7(ptr) + 16: TypePointer Input 6(float) + 17(f): 16(ptr) Variable Input + 19: TypePointer Output 6(float) +20(@entryPointOutput): 19(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 15(f): 7(ptr) Variable Function + 21(param): 7(ptr) Variable Function + 18: 6(float) Load 17(f) + Store 15(f) 18 + 22: 6(float) Load 15(f) + Store 21(param) 22 + 23: 6(float) FunctionCall 10(@main(f1;) 21(param) + Store 20(@entryPointOutput) 23 + Return + FunctionEnd + 10(@main(f1;): 6(float) Function None 8 + 9(f): 7(ptr) FunctionParameter + 11: Label + 12: 6(float) Load 9(f) + ReturnValue 12 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.stringtoken.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.stringtoken.frag.out new file mode 100644 index 0000000..c23d663 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.stringtoken.frag.out @@ -0,0 +1,131 @@ +hlsl.stringtoken.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:16 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color}) +0:16 Function Parameters: +0:? Sequence +0:18 move second child to first child ( temp 4-component vector of float) +0:18 Color: direct index for structure ( temp 4-component vector of float) +0:18 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:18 Constant: +0:18 0 (const int) +0:? Constant: +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 1.000000 +0:19 Branch: Return with expression +0:19 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:16 Function Definition: main( ( temp void) +0:16 Function Parameters: +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: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: +0:16 0 (const int) +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) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:16 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color}) +0:16 Function Parameters: +0:? Sequence +0:18 move second child to first child ( temp 4-component vector of float) +0:18 Color: direct index for structure ( temp 4-component vector of float) +0:18 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:18 Constant: +0:18 0 (const int) +0:? Constant: +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 1.000000 +0:19 Branch: Return with expression +0:19 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:16 Function Definition: main( ( temp void) +0:16 Function Parameters: +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: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: +0:16 0 (const int) +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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 34 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 25 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + Name 10 "@main(" + Name 13 "psout" + Name 25 "Color" + Name 30 "TestTexture" + Name 31 "$Global" + MemberName 31($Global) 0 "TestUF" + Name 33 "" + Decorate 25(Color) Location 0 + Decorate 30(TestTexture) DescriptorSet 0 + MemberDecorate 31($Global) 0 Offset 0 + Decorate 31($Global) Block + Decorate 33 DescriptorSet 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: TypePointer Function 8(PS_OUTPUT) + 14: TypeInt 32 1 + 15: 14(int) Constant 0 + 16: 6(float) Constant 0 + 17: 6(float) Constant 1065353216 + 18: 7(fvec4) ConstantComposite 16 16 16 17 + 19: TypePointer Function 7(fvec4) + 24: TypePointer Output 7(fvec4) + 25(Color): 24(ptr) Variable Output + 28: TypeImage 6(float) 2D sampled format:Unknown + 29: TypePointer UniformConstant 28 + 30(TestTexture): 29(ptr) Variable UniformConstant + 31($Global): TypeStruct 7(fvec4) + 32: TypePointer Uniform 31($Global) + 33: 32(ptr) Variable Uniform + 4(main): 2 Function None 3 + 5: Label + 26:8(PS_OUTPUT) FunctionCall 10(@main() + 27: 7(fvec4) CompositeExtract 26 0 + Store 25(Color) 27 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 13(psout): 12(ptr) Variable Function + 20: 19(ptr) AccessChain 13(psout) 15 + Store 20 18 + 21:8(PS_OUTPUT) Load 13(psout) + ReturnValue 21 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.frag.out new file mode 100755 index 0000000..c01e8fa --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.frag.out @@ -0,0 +1,438 @@ +hlsl.struct.frag +WARNING: 0:26: 'register' : ignoring shader_profile +WARNING: 0:27: 'register' : ignoring shader_profile +WARNING: 0:30: 'register' : ignoring shader_profile + +Shader version: 450 +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) +0:40 Function Parameters: +0:40 'input' ( in 4-component vector of float) +0:40 's' ( in 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:? Sequence +0:45 Compare Equal ( temp bool) +0:45 's3' ( temp structure{ temp 3-component vector of bool b3}) +0:45 's3' ( temp structure{ temp 3-component vector of bool b3}) +0:46 move second child to first child ( temp 4-component vector of float) +0:46 i: direct index for structure ( temp 4-component vector of float) +0:46 's2' ( global structure{ temp 4-component vector of float i}) +0:46 Constant: +0:46 0 (const int) +0:46 ff4: direct index for structure ( temp 4-component vector of float) +0:46 's' ( in 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:46 Constant: +0:46 7 (const int) +0:50 move second child to first child ( temp structure{}) +0:50 'e' ( temp structure{}) +0:50 e: direct index for structure ( temp structure{}) +0:50 'ce' ( temp structure{ temp structure{} e}) +0:50 Constant: +0:50 0 (const int) +0:52 Branch: Return with expression +0:52 'input' ( in 4-component vector of float) +0:40 Function Definition: PixelShaderFunction( ( temp void) +0:40 Function Parameters: +0:? Sequence +0:40 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:40 Sequence +0:40 move second child to first child ( temp 4-component vector of float) +0:40 a: 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 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: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: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: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: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: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: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: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: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) +0:? 'input' ( 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:? Linker Objects +0:? 'anon@0' (layout( row_major std140) uniform block{ uniform structure{ temp bool b, temp bool c, temp 4-component vector of float a, temp 4-component vector of float d} s1, layout( binding=5 offset=1620) uniform float ff5, layout( binding=8 offset=1636) uniform float ff6}) +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) + + +Linked fragment stage: + + +Shader version: 450 +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) +0:40 Function Parameters: +0:40 'input' ( in 4-component vector of float) +0:40 's' ( in 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:? Sequence +0:45 Compare Equal ( temp bool) +0:45 's3' ( temp structure{ temp 3-component vector of bool b3}) +0:45 's3' ( temp structure{ temp 3-component vector of bool b3}) +0:46 move second child to first child ( temp 4-component vector of float) +0:46 i: direct index for structure ( temp 4-component vector of float) +0:46 's2' ( global structure{ temp 4-component vector of float i}) +0:46 Constant: +0:46 0 (const int) +0:46 ff4: direct index for structure ( temp 4-component vector of float) +0:46 's' ( in 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:46 Constant: +0:46 7 (const int) +0:50 move second child to first child ( temp structure{}) +0:50 'e' ( temp structure{}) +0:50 e: direct index for structure ( temp structure{}) +0:50 'ce' ( temp structure{ temp structure{} e}) +0:50 Constant: +0:50 0 (const int) +0:52 Branch: Return with expression +0:52 'input' ( in 4-component vector of float) +0:40 Function Definition: PixelShaderFunction( ( temp void) +0:40 Function Parameters: +0:? Sequence +0:40 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:40 Sequence +0:40 move second child to first child ( temp 4-component vector of float) +0:40 a: 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 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: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: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: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: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: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: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: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: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) +0:? 'input' ( 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:? Linker Objects +0:? 'anon@0' (layout( row_major std140) uniform block{ uniform structure{ temp bool b, temp bool c, temp 4-component vector of float a, temp 4-component vector of float d} s1, layout( binding=5 offset=1620) uniform float ff5, layout( binding=8 offset=1636) uniform float ff6}) +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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 105 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "PixelShaderFunction" 51 56 79 94 + ExecutionMode 4 OriginUpperLeft + Name 4 "PixelShaderFunction" + Name 11 "IN_S" + MemberName 11(IN_S) 0 "a" + MemberName 11(IN_S) 1 "b" + MemberName 11(IN_S) 2 "c" + MemberName 11(IN_S) 3 "d" + MemberName 11(IN_S) 4 "ff1" + MemberName 11(IN_S) 5 "ff2" + MemberName 11(IN_S) 6 "ff3" + MemberName 11(IN_S) 7 "ff4" + Name 16 "@PixelShaderFunction(vf4;struct-IN_S-vf4-b1-vf1-vf2-b1-b1-b1-vf41;" + Name 14 "input" + Name 15 "s" + Name 19 "FS" + MemberName 19(FS) 0 "b3" + Name 21 "s3" + Name 28 "" + MemberName 28 0 "i" + Name 30 "s2" + Name 38 "empty" + Name 40 "e" + Name 41 "containEmpty" + MemberName 41(containEmpty) 0 "e" + Name 43 "ce" + 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 "" + 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 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 9: TypeBool + 10: TypeVector 6(float) 2 + 11(IN_S): TypeStruct 7(fvec4) 9(bool) 6(float) 10(fvec2) 9(bool) 9(bool) 9(bool) 7(fvec4) + 12: TypePointer Function 11(IN_S) + 13: TypeFunction 7(fvec4) 8(ptr) 12(ptr) + 18: TypeVector 9(bool) 3 + 19(FS): TypeStruct 18(bvec3) + 20: TypePointer Function 19(FS) + 28: TypeStruct 7(fvec4) + 29: TypePointer Private 28(struct) + 30(s2): 29(ptr) Variable Private + 31: TypeInt 32 1 + 32: 31(int) Constant 0 + 33: 31(int) Constant 7 + 36: TypePointer Private 7(fvec4) + 38(empty): TypeStruct + 39: TypePointer Function 38(empty) +41(containEmpty): TypeStruct 38(empty) + 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 +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 + 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 + 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 + Return + FunctionEnd +16(@PixelShaderFunction(vf4;struct-IN_S-vf4-b1-vf1-vf2-b1-b1-b1-vf41;): 7(fvec4) Function None 13 + 14(input): 8(ptr) FunctionParameter + 15(s): 12(ptr) FunctionParameter + 17: Label + 21(s3): 20(ptr) Variable Function + 40(e): 39(ptr) Variable Function + 43(ce): 42(ptr) Variable Function + 22: 19(FS) Load 21(s3) + 23: 19(FS) Load 21(s3) + 24: 18(bvec3) CompositeExtract 22 0 + 25: 18(bvec3) CompositeExtract 23 0 + 26: 18(bvec3) LogicalEqual 24 25 + 27: 9(bool) All 26 + 34: 8(ptr) AccessChain 15(s) 33 + 35: 7(fvec4) Load 34 + 37: 36(ptr) AccessChain 30(s2) 32 + Store 37 35 + 44: 39(ptr) AccessChain 43(ce) 32 + 45: 38(empty) Load 44 + Store 40(e) 45 + 46: 7(fvec4) Load 14(input) + ReturnValue 46 + FunctionEnd 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 new file mode 100644 index 0000000..9ec01d8 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split-1.vert.out @@ -0,0 +1,332 @@ +hlsl.struct.split-1.vert +Shader version: 450 +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: +0:17 'vsin' ( in structure{ temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in}) +0:17 'Pos_loose' ( in 4-component vector of float) +0:? Sequence +0:20 move second child to first child ( temp int) +0:20 x0_out: direct index for structure ( temp int) +0:20 'vsout' ( temp structure{ temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out}) +0:20 Constant: +0:20 0 (const int) +0:20 x0_in: direct index for structure ( temp int) +0:20 'vsin' ( in structure{ temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in}) +0:20 Constant: +0:20 0 (const int) +0:21 move second child to first child ( temp 4-component vector of float) +0:21 Pos_out: direct index for structure ( temp 4-component vector of float) +0:21 'vsout' ( temp structure{ temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out}) +0:21 Constant: +0:21 1 (const int) +0:21 add ( temp 4-component vector of float) +0:21 Pos_in: direct index for structure ( temp 4-component vector of float) +0:21 'vsin' ( in structure{ temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in}) +0:21 Constant: +0:21 1 (const int) +0:21 'Pos_loose' ( in 4-component vector of float) +0:22 move second child to first child ( temp int) +0:22 x1_out: direct index for structure ( temp int) +0:22 'vsout' ( 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:22 x1_in: direct index for structure ( temp int) +0:22 'vsin' ( in 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:24 Branch: Return with expression +0:24 'vsout' ( temp structure{ temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out}) +0:17 Function Definition: main( ( temp void) +0:17 Function Parameters: +0:? Sequence +0:17 Sequence +0:17 move second child to first child ( temp int) +0:17 x0_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 0 (const int) +0:? '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: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: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) +0:17 Sequence +0:17 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:17 'flattenTemp' ( temp structure{ temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out}) +0:17 Function Call: @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:? '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: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: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: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:? 'Pos_loose' (layout( location=3) in 4-component vector of float) + + +Linked vertex stage: + + +Shader version: 450 +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: +0:17 'vsin' ( in structure{ temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in}) +0:17 'Pos_loose' ( in 4-component vector of float) +0:? Sequence +0:20 move second child to first child ( temp int) +0:20 x0_out: direct index for structure ( temp int) +0:20 'vsout' ( temp structure{ temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out}) +0:20 Constant: +0:20 0 (const int) +0:20 x0_in: direct index for structure ( temp int) +0:20 'vsin' ( in structure{ temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in}) +0:20 Constant: +0:20 0 (const int) +0:21 move second child to first child ( temp 4-component vector of float) +0:21 Pos_out: direct index for structure ( temp 4-component vector of float) +0:21 'vsout' ( temp structure{ temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out}) +0:21 Constant: +0:21 1 (const int) +0:21 add ( temp 4-component vector of float) +0:21 Pos_in: direct index for structure ( temp 4-component vector of float) +0:21 'vsin' ( in structure{ temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in}) +0:21 Constant: +0:21 1 (const int) +0:21 'Pos_loose' ( in 4-component vector of float) +0:22 move second child to first child ( temp int) +0:22 x1_out: direct index for structure ( temp int) +0:22 'vsout' ( 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:22 x1_in: direct index for structure ( temp int) +0:22 'vsin' ( in 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:24 Branch: Return with expression +0:24 'vsout' ( temp structure{ temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out}) +0:17 Function Definition: main( ( temp void) +0:17 Function Parameters: +0:? Sequence +0:17 Sequence +0:17 move second child to first child ( temp int) +0:17 x0_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 0 (const int) +0:? '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: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: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) +0:17 Sequence +0:17 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:17 'flattenTemp' ( temp structure{ temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out}) +0:17 Function Call: @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:? '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: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: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: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:? '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 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 40 44 47 51 61 67 + Name 4 "main" + Name 9 "VS_INPUT" + MemberName 9(VS_INPUT) 0 "x0_in" + MemberName 9(VS_INPUT) 1 "Pos_in" + MemberName 9(VS_INPUT) 2 "x1_in" + Name 12 "VS_OUTPUT" + MemberName 12(VS_OUTPUT) 0 "x0_out" + MemberName 12(VS_OUTPUT) 1 "Pos_out" + MemberName 12(VS_OUTPUT) 2 "x1_out" + Name 16 "@main(struct-VS_INPUT-i1-vf4-i11;vf4;" + Name 14 "vsin" + Name 15 "Pos_loose" + Name 19 "vsout" + Name 38 "vsin" + Name 40 "x0_in" + Name 44 "Pos_in" + Name 47 "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 + Decorate 51(Pos_loose) Location 3 + Decorate 61(@entryPointOutput) Location 0 + Decorate 67(@entryPointOutput_Pos_out) BuiltIn Position + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypeFloat 32 + 8: TypeVector 7(float) 4 + 9(VS_INPUT): TypeStruct 6(int) 8(fvec4) 6(int) + 10: TypePointer Function 9(VS_INPUT) + 11: TypePointer Function 8(fvec4) + 12(VS_OUTPUT): TypeStruct 6(int) 8(fvec4) 6(int) + 13: TypeFunction 12(VS_OUTPUT) 10(ptr) 11(ptr) + 18: TypePointer Function 12(VS_OUTPUT) + 20: 6(int) Constant 0 + 21: TypePointer Function 6(int) + 25: 6(int) Constant 1 + 31: 6(int) Constant 2 + 39: TypePointer Input 6(int) + 40(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 + 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 + 4(main): 2 Function None 3 + 5: Label + 38(vsin): 10(ptr) Variable Function + 50(Pos_loose): 11(ptr) Variable Function + 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) + 42: 21(ptr) AccessChain 38(vsin) 20 + Store 42 41 + 45: 8(fvec4) Load 44(Pos_in) + 46: 11(ptr) AccessChain 38(vsin) 25 + Store 46 45 + 48: 6(int) Load 47(x1_in) + 49: 21(ptr) AccessChain 38(vsin) 31 + Store 49 48 + 52: 8(fvec4) Load 51(Pos_loose) + Store 50(Pos_loose) 52 + 55: 9(VS_INPUT) Load 38(vsin) + Store 54(param) 55 + 57: 8(fvec4) Load 50(Pos_loose) + 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 + Return + FunctionEnd +16(@main(struct-VS_INPUT-i1-vf4-i11;vf4;):12(VS_OUTPUT) Function None 13 + 14(vsin): 10(ptr) FunctionParameter + 15(Pos_loose): 11(ptr) FunctionParameter + 17: Label + 19(vsout): 18(ptr) Variable Function + 22: 21(ptr) AccessChain 14(vsin) 20 + 23: 6(int) Load 22 + 24: 21(ptr) AccessChain 19(vsout) 20 + Store 24 23 + 26: 11(ptr) AccessChain 14(vsin) 25 + 27: 8(fvec4) Load 26 + 28: 8(fvec4) Load 15(Pos_loose) + 29: 8(fvec4) FAdd 27 28 + 30: 11(ptr) AccessChain 19(vsout) 25 + Store 30 29 + 32: 21(ptr) AccessChain 14(vsin) 31 + 33: 6(int) Load 32 + 34: 21(ptr) AccessChain 19(vsout) 31 + Store 34 33 + 35:12(VS_OUTPUT) Load 19(vsout) + ReturnValue 35 + FunctionEnd 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 new file mode 100644 index 0000000..b907815 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split.array.geom.out @@ -0,0 +1,279 @@ +hlsl.struct.split.array.geom +Shader version: 450 +invocations = -1 +max_vertices = 4 +input primitive = points +output primitive = triangle_strip +0:? Sequence +0:13 Function Definition: @main(u1[1];struct-PSInput-vf4-vf2-vf3-u11; ( temp void) +0:13 Function Parameters: +0:13 'v' ( in 1-element array of uint) +0:13 'OutputStream' ( out 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:? Sequence +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 TexCoord, temp 3-component vector of float TerrainPos, temp uint VertexID}) +0:16 'Out' ( 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:16 Constant: +0:16 0.000000 +0:16 0.000000 +0:16 0.000000 +0:16 0.000000 +0:16 0.000000 +0:16 0.000000 +0:16 0.000000 +0:16 0.000000 +0:16 0.000000 +0:16 0 (const uint) +0:18 Sequence +0:18 move second child to first child ( temp int) +0:18 'x' ( temp int) +0:18 Constant: +0:18 0 (const int) +0:18 Loop with condition tested first +0:18 Loop Condition +0:18 Compare Less Than ( temp bool) +0:18 'x' ( temp int) +0:18 Constant: +0:18 2 (const int) +0:18 Loop Body +0:19 Sequence +0:19 move second child to first child ( temp int) +0:19 'y' ( temp int) +0:19 Constant: +0:19 0 (const int) +0:19 Loop with condition tested first +0:19 Loop Condition +0:19 Compare Less Than ( temp bool) +0:19 'y' ( temp int) +0:19 Constant: +0:19 2 (const int) +0:19 Loop Body +0:20 move second child to first child ( 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:20 indirect index ( 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:20 indirect index ( temp 3-element array of 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:20 'Verts' ( temp 2-element array of 3-element array of 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:20 'x' ( temp int) +0:20 'y' ( temp int) +0:20 'Out' ( 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:19 Loop Terminal Expression +0:19 Pre-Increment ( temp int) +0:19 'y' ( temp int) +0:18 Loop Terminal Expression +0:18 Pre-Increment ( temp int) +0:18 'x' ( temp int) +0:13 Function Definition: main( ( temp void) +0:13 Function Parameters: +0:? Sequence +0:13 move second child to first child ( temp 1-element array of uint) +0:? 'v' ( temp 1-element array of uint) +0:? 'v' (layout( location=0) in 1-element array of uint) +0:13 Function Call: @main(u1[1];struct-PSInput-vf4-vf2-vf3-u11; ( temp void) +0:? 'v' ( temp 1-element array of uint) +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) + + +Linked geometry stage: + + +Shader version: 450 +invocations = 1 +max_vertices = 4 +input primitive = points +output primitive = triangle_strip +0:? Sequence +0:13 Function Definition: @main(u1[1];struct-PSInput-vf4-vf2-vf3-u11; ( temp void) +0:13 Function Parameters: +0:13 'v' ( in 1-element array of uint) +0:13 'OutputStream' ( out 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:? Sequence +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 TexCoord, temp 3-component vector of float TerrainPos, temp uint VertexID}) +0:16 'Out' ( 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:16 Constant: +0:16 0.000000 +0:16 0.000000 +0:16 0.000000 +0:16 0.000000 +0:16 0.000000 +0:16 0.000000 +0:16 0.000000 +0:16 0.000000 +0:16 0.000000 +0:16 0 (const uint) +0:18 Sequence +0:18 move second child to first child ( temp int) +0:18 'x' ( temp int) +0:18 Constant: +0:18 0 (const int) +0:18 Loop with condition tested first +0:18 Loop Condition +0:18 Compare Less Than ( temp bool) +0:18 'x' ( temp int) +0:18 Constant: +0:18 2 (const int) +0:18 Loop Body +0:19 Sequence +0:19 move second child to first child ( temp int) +0:19 'y' ( temp int) +0:19 Constant: +0:19 0 (const int) +0:19 Loop with condition tested first +0:19 Loop Condition +0:19 Compare Less Than ( temp bool) +0:19 'y' ( temp int) +0:19 Constant: +0:19 2 (const int) +0:19 Loop Body +0:20 move second child to first child ( 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:20 indirect index ( 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:20 indirect index ( temp 3-element array of 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:20 'Verts' ( temp 2-element array of 3-element array of 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:20 'x' ( temp int) +0:20 'y' ( temp int) +0:20 'Out' ( 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:19 Loop Terminal Expression +0:19 Pre-Increment ( temp int) +0:19 'y' ( temp int) +0:18 Loop Terminal Expression +0:18 Pre-Increment ( temp int) +0:18 'x' ( temp int) +0:13 Function Definition: main( ( temp void) +0:13 Function Parameters: +0:? Sequence +0:13 move second child to first child ( temp 1-element array of uint) +0:? 'v' ( temp 1-element array of uint) +0:? 'v' (layout( location=0) in 1-element array of uint) +0:13 Function Call: @main(u1[1];struct-PSInput-vf4-vf2-vf3-u11; ( temp void) +0:? 'v' ( temp 1-element array of uint) +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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 73 + + Capability Geometry + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Geometry 4 "main" 66 + ExecutionMode 4 InputPoints + ExecutionMode 4 Invocations 1 + ExecutionMode 4 OutputTriangleStrip + ExecutionMode 4 OutputVertices 4 + Name 4 "main" + Name 14 "PSInput" + MemberName 14(PSInput) 0 "Pos" + MemberName 14(PSInput) 1 "TexCoord" + MemberName 14(PSInput) 2 "TerrainPos" + MemberName 14(PSInput) 3 "VertexID" + Name 19 "@main(u1[1];struct-PSInput-vf4-vf2-vf3-u11;" + Name 17 "v" + Name 18 "OutputStream" + Name 21 "Out" + Name 30 "x" + Name 41 "y" + Name 54 "Verts" + Name 64 "v" + Name 66 "v" + Name 68 "OutputStream" + Name 69 "param" + Name 71 "param" + Decorate 66(v) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: 6(int) Constant 1 + 8: TypeArray 6(int) 7 + 9: TypePointer Function 8 + 10: TypeFloat 32 + 11: TypeVector 10(float) 4 + 12: TypeVector 10(float) 2 + 13: TypeVector 10(float) 3 + 14(PSInput): TypeStruct 11(fvec4) 12(fvec2) 13(fvec3) 6(int) + 15: TypePointer Function 14(PSInput) + 16: TypeFunction 2 9(ptr) 15(ptr) + 22: 10(float) Constant 0 + 23: 11(fvec4) ConstantComposite 22 22 22 22 + 24: 12(fvec2) ConstantComposite 22 22 + 25: 13(fvec3) ConstantComposite 22 22 22 + 26: 6(int) Constant 0 + 27: 14(PSInput) ConstantComposite 23 24 25 26 + 28: TypeInt 32 1 + 29: TypePointer Function 28(int) + 31: 28(int) Constant 0 + 38: 28(int) Constant 2 + 39: TypeBool + 49: 6(int) Constant 3 + 50: TypeArray 14(PSInput) 49 + 51: 6(int) Constant 2 + 52: TypeArray 50 51 + 53: TypePointer Function 52 + 60: 28(int) Constant 1 + 65: TypePointer Input 8 + 66(v): 65(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 64(v): 9(ptr) Variable Function +68(OutputStream): 15(ptr) Variable Function + 69(param): 9(ptr) Variable Function + 71(param): 15(ptr) Variable Function + 67: 8 Load 66(v) + Store 64(v) 67 + 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) + Return + FunctionEnd +19(@main(u1[1];struct-PSInput-vf4-vf2-vf3-u11;): 2 Function None 16 + 17(v): 9(ptr) FunctionParameter +18(OutputStream): 15(ptr) FunctionParameter + 20: Label + 21(Out): 15(ptr) Variable Function + 30(x): 29(ptr) Variable Function + 41(y): 29(ptr) Variable Function + 54(Verts): 53(ptr) Variable Function + Store 21(Out) 27 + Store 30(x) 31 + Branch 32 + 32: Label + LoopMerge 34 35 None + Branch 36 + 36: Label + 37: 28(int) Load 30(x) + 40: 39(bool) SLessThan 37 38 + BranchConditional 40 33 34 + 33: Label + Store 41(y) 31 + Branch 42 + 42: Label + LoopMerge 44 45 None + Branch 46 + 46: Label + 47: 28(int) Load 41(y) + 48: 39(bool) SLessThan 47 38 + BranchConditional 48 43 44 + 43: Label + 55: 28(int) Load 30(x) + 56: 28(int) Load 41(y) + 57: 14(PSInput) Load 21(Out) + 58: 15(ptr) AccessChain 54(Verts) 55 56 + Store 58 57 + Branch 45 + 45: Label + 59: 28(int) Load 41(y) + 61: 28(int) IAdd 59 60 + Store 41(y) 61 + Branch 42 + 44: Label + Branch 35 + 35: Label + 62: 28(int) Load 30(x) + 63: 28(int) IAdd 62 60 + Store 30(x) 63 + Branch 32 + 34: Label + Return + FunctionEnd 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 new file mode 100644 index 0000000..ad185ee --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split.assign.frag.out @@ -0,0 +1,351 @@ +hlsl.struct.split.assign.frag +Shader version: 450 +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) +0:7 Function Parameters: +0:7 'i' ( in int) +0:7 'input' ( in 3-element array of structure{ temp float f, temp 4-component vector of float pos}) +0:? Sequence +0:9 move second child to first child ( temp 3-element array of structure{ temp float f, temp 4-component vector of float pos}) +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: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:7 Sequence +0:7 move second child to first child ( temp float) +0:7 f: direct index for structure ( temp float) +0:7 direct index ( temp structure{ temp float f, temp 4-component vector of float pos}) +0:? 'input' ( temp 3-element array of structure{ temp float f, temp 4-component vector of float pos}) +0:7 Constant: +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: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}) +0:? 'input' ( temp 3-element array of structure{ temp float f, temp 4-component vector of float pos}) +0:7 Constant: +0:7 0 (const int) +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:7 Constant: +0:7 0 (const int) +0:7 move second child to first child ( temp float) +0:7 f: direct index for structure ( temp float) +0:7 direct index ( temp structure{ temp float f, temp 4-component vector of float pos}) +0:? 'input' ( temp 3-element array of structure{ temp float f, temp 4-component vector of float pos}) +0:7 Constant: +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: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}) +0:? 'input' ( temp 3-element array of structure{ temp float f, temp 4-component vector of float pos}) +0:7 Constant: +0:7 1 (const int) +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:7 Constant: +0:7 1 (const int) +0:7 move second child to first child ( temp float) +0:7 f: direct index for structure ( temp float) +0:7 direct index ( temp structure{ temp float f, temp 4-component vector of float pos}) +0:? 'input' ( temp 3-element array of structure{ temp float f, temp 4-component vector of float pos}) +0:7 Constant: +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: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}) +0:? 'input' ( temp 3-element array of structure{ temp float f, temp 4-component vector of float pos}) +0:7 Constant: +0:7 2 (const int) +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:7 Constant: +0:7 2 (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(i1;struct-S-f1-vf41[3]; ( temp 4-component vector of float) +0:? 'i' ( temp int) +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) + + +Linked fragment stage: + + +Shader version: 450 +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) +0:7 Function Parameters: +0:7 'i' ( in int) +0:7 'input' ( in 3-element array of structure{ temp float f, temp 4-component vector of float pos}) +0:? Sequence +0:9 move second child to first child ( temp 3-element array of structure{ temp float f, temp 4-component vector of float pos}) +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: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:7 Sequence +0:7 move second child to first child ( temp float) +0:7 f: direct index for structure ( temp float) +0:7 direct index ( temp structure{ temp float f, temp 4-component vector of float pos}) +0:? 'input' ( temp 3-element array of structure{ temp float f, temp 4-component vector of float pos}) +0:7 Constant: +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: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}) +0:? 'input' ( temp 3-element array of structure{ temp float f, temp 4-component vector of float pos}) +0:7 Constant: +0:7 0 (const int) +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:7 Constant: +0:7 0 (const int) +0:7 move second child to first child ( temp float) +0:7 f: direct index for structure ( temp float) +0:7 direct index ( temp structure{ temp float f, temp 4-component vector of float pos}) +0:? 'input' ( temp 3-element array of structure{ temp float f, temp 4-component vector of float pos}) +0:7 Constant: +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: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}) +0:? 'input' ( temp 3-element array of structure{ temp float f, temp 4-component vector of float pos}) +0:7 Constant: +0:7 1 (const int) +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:7 Constant: +0:7 1 (const int) +0:7 move second child to first child ( temp float) +0:7 f: direct index for structure ( temp float) +0:7 direct index ( temp structure{ temp float f, temp 4-component vector of float pos}) +0:? 'input' ( temp 3-element array of structure{ temp float f, temp 4-component vector of float pos}) +0:7 Constant: +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: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}) +0:? 'input' ( temp 3-element array of structure{ temp float f, temp 4-component vector of float pos}) +0:7 Constant: +0:7 2 (const int) +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:7 Constant: +0:7 2 (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(i1;struct-S-f1-vf41[3]; ( temp 4-component vector of float) +0:? 'i' ( temp int) +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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 73 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 32 39 48 67 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 10 "S" + MemberName 10(S) 0 "f" + MemberName 10(S) 1 "pos" + Name 18 "@main(i1;struct-S-f1-vf41[3];" + Name 16 "i" + Name 17 "input" + Name 20 "a" + 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 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypePointer Function 6(int) + 8: TypeFloat 32 + 9: TypeVector 8(float) 4 + 10(S): TypeStruct 8(float) 9(fvec4) + 11: TypeInt 32 0 + 12: 11(int) Constant 3 + 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 + 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 + Store 55 54 + 56: 49(ptr) AccessChain 48(input_pos) 45 + 57: 9(fvec4) Load 56 + 58: 25(ptr) AccessChain 34(input) 45 45 + 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 + Return + FunctionEnd +18(@main(i1;struct-S-f1-vf41[3];): 9(fvec4) Function None 15 + 16(i): 7(ptr) FunctionParameter + 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 + 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 new file mode 100644 index 0000000..9dc7b85 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split.call.vert.out @@ -0,0 +1,359 @@ +hlsl.struct.split.call.vert +Shader version: 450 +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: +0:17 'fn1_in' ( in structure{ temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in}) +0:17 'fn1_out' ( in structure{ temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out}) +0:? Sequence +0:18 add ( temp 4-component vector of float) +0:18 Pos_in: direct index for structure ( temp 4-component vector of float) +0:18 'fn1_in' ( in structure{ temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in}) +0:18 Constant: +0:18 1 (const int) +0:18 Pos_out: direct index for structure ( temp 4-component vector of float) +0:18 'fn1_out' ( in structure{ temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out}) +0:18 Constant: +0:18 1 (const int) +0:22 Function Definition: @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:22 Function Parameters: +0:22 'vsin' ( in structure{ temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in}) +0:? Sequence +0:25 move second child to first child ( temp int) +0:25 x0_out: direct index for structure ( temp int) +0:25 'vsout' ( temp structure{ temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out}) +0:25 Constant: +0:25 0 (const int) +0:25 x0_in: direct index for structure ( temp int) +0:25 'vsin' ( in structure{ temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in}) +0:25 Constant: +0:25 0 (const int) +0:26 move second child to first child ( temp 4-component vector of float) +0:26 Pos_out: direct index for structure ( temp 4-component vector of float) +0:26 'vsout' ( temp structure{ temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out}) +0:26 Constant: +0:26 1 (const int) +0:26 Pos_in: direct index for structure ( temp 4-component vector of float) +0:26 'vsin' ( in structure{ temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in}) +0:26 Constant: +0:26 1 (const int) +0:27 move second child to first child ( temp int) +0:27 x1_out: direct index for structure ( temp int) +0:27 'vsout' ( temp structure{ temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out}) +0:27 Constant: +0:27 2 (const int) +0:27 x1_in: direct index for structure ( temp int) +0:27 'vsin' ( in structure{ temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in}) +0:27 Constant: +0:27 2 (const int) +0:29 Function Call: Fn1(struct-VS_INPUT-i1-vf4-i11;struct-VS_OUTPUT-i1-vf4-i11; ( temp void) +0:29 'vsin' ( in structure{ temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in}) +0:29 'vsout' ( temp structure{ temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out}) +0:31 Branch: Return with expression +0:31 'vsout' ( temp structure{ temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out}) +0:22 Function Definition: main( ( temp void) +0:22 Function Parameters: +0:? Sequence +0:22 Sequence +0:22 move second child to first child ( temp int) +0:22 x0_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 0 (const int) +0:? '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: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: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: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: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: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) + + +Linked vertex stage: + + +Shader version: 450 +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: +0:17 'fn1_in' ( in structure{ temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in}) +0:17 'fn1_out' ( in structure{ temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out}) +0:? Sequence +0:18 add ( temp 4-component vector of float) +0:18 Pos_in: direct index for structure ( temp 4-component vector of float) +0:18 'fn1_in' ( in structure{ temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in}) +0:18 Constant: +0:18 1 (const int) +0:18 Pos_out: direct index for structure ( temp 4-component vector of float) +0:18 'fn1_out' ( in structure{ temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out}) +0:18 Constant: +0:18 1 (const int) +0:22 Function Definition: @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:22 Function Parameters: +0:22 'vsin' ( in structure{ temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in}) +0:? Sequence +0:25 move second child to first child ( temp int) +0:25 x0_out: direct index for structure ( temp int) +0:25 'vsout' ( temp structure{ temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out}) +0:25 Constant: +0:25 0 (const int) +0:25 x0_in: direct index for structure ( temp int) +0:25 'vsin' ( in structure{ temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in}) +0:25 Constant: +0:25 0 (const int) +0:26 move second child to first child ( temp 4-component vector of float) +0:26 Pos_out: direct index for structure ( temp 4-component vector of float) +0:26 'vsout' ( temp structure{ temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out}) +0:26 Constant: +0:26 1 (const int) +0:26 Pos_in: direct index for structure ( temp 4-component vector of float) +0:26 'vsin' ( in structure{ temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in}) +0:26 Constant: +0:26 1 (const int) +0:27 move second child to first child ( temp int) +0:27 x1_out: direct index for structure ( temp int) +0:27 'vsout' ( temp structure{ temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out}) +0:27 Constant: +0:27 2 (const int) +0:27 x1_in: direct index for structure ( temp int) +0:27 'vsin' ( in structure{ temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in}) +0:27 Constant: +0:27 2 (const int) +0:29 Function Call: Fn1(struct-VS_INPUT-i1-vf4-i11;struct-VS_OUTPUT-i1-vf4-i11; ( temp void) +0:29 'vsin' ( in structure{ temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in}) +0:29 'vsout' ( temp structure{ temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out}) +0:31 Branch: Return with expression +0:31 'vsout' ( temp structure{ temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out}) +0:22 Function Definition: main( ( temp void) +0:22 Function Parameters: +0:? Sequence +0:22 Sequence +0:22 move second child to first child ( temp int) +0:22 x0_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 0 (const int) +0:? '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: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: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: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: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: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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 80 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 52 56 59 68 74 + Name 4 "main" + Name 9 "VS_INPUT" + MemberName 9(VS_INPUT) 0 "x0_in" + MemberName 9(VS_INPUT) 1 "Pos_in" + MemberName 9(VS_INPUT) 2 "x1_in" + Name 11 "VS_OUTPUT" + MemberName 11(VS_OUTPUT) 0 "x0_out" + MemberName 11(VS_OUTPUT) 1 "Pos_out" + MemberName 11(VS_OUTPUT) 2 "x1_out" + Name 16 "Fn1(struct-VS_INPUT-i1-vf4-i11;struct-VS_OUTPUT-i1-vf4-i11;" + Name 14 "fn1_in" + Name 15 "fn1_out" + Name 20 "@main(struct-VS_INPUT-i1-vf4-i11;" + Name 19 "vsin" + Name 29 "vsout" + Name 42 "param" + Name 44 "param" + Name 50 "vsin" + Name 52 "x0_in" + Name 56 "Pos_in" + Name 59 "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 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypeFloat 32 + 8: TypeVector 7(float) 4 + 9(VS_INPUT): TypeStruct 6(int) 8(fvec4) 6(int) + 10: TypePointer Function 9(VS_INPUT) + 11(VS_OUTPUT): TypeStruct 6(int) 8(fvec4) 6(int) + 12: TypePointer Function 11(VS_OUTPUT) + 13: TypeFunction 2 10(ptr) 12(ptr) + 18: TypeFunction 11(VS_OUTPUT) 10(ptr) + 22: 6(int) Constant 1 + 23: TypePointer Function 8(fvec4) + 30: 6(int) Constant 0 + 31: TypePointer Function 6(int) + 38: 6(int) Constant 2 + 51: TypePointer Input 6(int) + 52(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 + 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) + 54: 31(ptr) AccessChain 50(vsin) 30 + Store 54 53 + 57: 8(fvec4) Load 56(Pos_in) + 58: 23(ptr) AccessChain 50(vsin) 22 + Store 58 57 + 60: 6(int) Load 59(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 + Return + FunctionEnd +16(Fn1(struct-VS_INPUT-i1-vf4-i11;struct-VS_OUTPUT-i1-vf4-i11;): 2 Function None 13 + 14(fn1_in): 10(ptr) FunctionParameter + 15(fn1_out): 12(ptr) FunctionParameter + 17: Label + 24: 23(ptr) AccessChain 14(fn1_in) 22 + 25: 8(fvec4) Load 24 + 26: 23(ptr) AccessChain 15(fn1_out) 22 + 27: 8(fvec4) Load 26 + 28: 8(fvec4) FAdd 25 27 + Return + FunctionEnd +20(@main(struct-VS_INPUT-i1-vf4-i11;):11(VS_OUTPUT) Function None 18 + 19(vsin): 10(ptr) FunctionParameter + 21: Label + 29(vsout): 12(ptr) Variable Function + 42(param): 10(ptr) Variable Function + 44(param): 12(ptr) Variable Function + 32: 31(ptr) AccessChain 19(vsin) 30 + 33: 6(int) Load 32 + 34: 31(ptr) AccessChain 29(vsout) 30 + Store 34 33 + 35: 23(ptr) AccessChain 19(vsin) 22 + 36: 8(fvec4) Load 35 + 37: 23(ptr) AccessChain 29(vsout) 22 + Store 37 36 + 39: 31(ptr) AccessChain 19(vsin) 38 + 40: 6(int) Load 39 + 41: 31(ptr) AccessChain 29(vsout) 38 + Store 41 40 + 43: 9(VS_INPUT) Load 19(vsin) + Store 42(param) 43 + 45:11(VS_OUTPUT) Load 29(vsout) + Store 44(param) 45 + 46: 2 FunctionCall 16(Fn1(struct-VS_INPUT-i1-vf4-i11;struct-VS_OUTPUT-i1-vf4-i11;) 42(param) 44(param) + 47:11(VS_OUTPUT) Load 29(vsout) + ReturnValue 47 + FunctionEnd 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 new file mode 100644 index 0000000..42046da --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split.nested.geom.out @@ -0,0 +1,391 @@ +hlsl.struct.split.nested.geom +Shader version: 450 +invocations = -1 +max_vertices = 3 +input primitive = triangles +output primitive = triangle_strip +0:? Sequence +0:24 Function Definition: @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; ( temp void) +0:24 Function Parameters: +0:24 'tin' ( in 3-element array of structure{ temp 4-component vector of float pos, temp 2-component vector of float tc}) +0:24 '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:? 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 psIn: direct index for structure ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float tc}) +0:27 '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:27 Constant: +0:27 0 (const int) +0:27 Constant: +0:27 0 (const int) +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:28 move second child to first child ( temp 2-component vector of float) +0:28 tc: direct index for structure ( temp 2-component vector of float) +0:28 psIn: direct index for structure ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float tc}) +0:28 '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:28 Constant: +0:28 0 (const int) +0:28 Constant: +0:28 1 (const int) +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:24 Function Definition: main( ( temp void) +0:24 Function Parameters: +0:? Sequence +0:24 Sequence +0:24 move second child to first child ( temp 4-component vector of float) +0:24 pos: direct index for structure ( temp 4-component vector of float) +0:24 direct index ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float tc}) +0:? 'tin' ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 2-component vector of float tc}) +0:24 Constant: +0:24 0 (const int) +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:24 Constant: +0:24 0 (const int) +0:24 move second child to first child ( temp 2-component vector of float) +0:24 tc: direct index for structure ( temp 2-component vector of float) +0:24 direct index ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float tc}) +0:? 'tin' ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 2-component vector of float tc}) +0:24 Constant: +0:24 0 (const int) +0:24 Constant: +0:24 1 (const int) +0:24 tc: direct index for structure ( temp 2-component vector of float) +0:24 direct index (layout( location=0) in structure{ temp 2-component vector of float tc}) +0:24 'tin' (layout( location=0) in 3-element array of structure{ temp 2-component vector of float tc}) +0:24 Constant: +0:24 0 (const int) +0:24 Constant: +0:24 0 (const int) +0:24 move second child to first child ( temp 4-component vector of float) +0:24 pos: direct index for structure ( temp 4-component vector of float) +0:24 direct index ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float tc}) +0:? 'tin' ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 2-component vector of float tc}) +0:24 Constant: +0:24 1 (const int) +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:24 Constant: +0:24 1 (const int) +0:24 move second child to first child ( temp 2-component vector of float) +0:24 tc: direct index for structure ( temp 2-component vector of float) +0:24 direct index ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float tc}) +0:? 'tin' ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 2-component vector of float tc}) +0:24 Constant: +0:24 1 (const int) +0:24 Constant: +0:24 1 (const int) +0:24 tc: direct index for structure ( temp 2-component vector of float) +0:24 direct index (layout( location=0) in structure{ temp 2-component vector of float tc}) +0:24 'tin' (layout( location=0) in 3-element array of structure{ temp 2-component vector of float tc}) +0:24 Constant: +0:24 1 (const int) +0:24 Constant: +0:24 0 (const int) +0:24 move second child to first child ( temp 4-component vector of float) +0:24 pos: direct index for structure ( temp 4-component vector of float) +0:24 direct index ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float tc}) +0:? 'tin' ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 2-component vector of float tc}) +0:24 Constant: +0:24 2 (const int) +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:24 Constant: +0:24 2 (const int) +0:24 move second child to first child ( temp 2-component vector of float) +0:24 tc: direct index for structure ( temp 2-component vector of float) +0:24 direct index ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float tc}) +0:? 'tin' ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 2-component vector of float tc}) +0:24 Constant: +0:24 2 (const int) +0:24 Constant: +0:24 1 (const int) +0:24 tc: direct index for structure ( temp 2-component vector of float) +0:24 direct index (layout( location=0) in structure{ temp 2-component vector of float tc}) +0:24 'tin' (layout( location=0) in 3-element array of structure{ temp 2-component vector of float tc}) +0:24 Constant: +0:24 2 (const int) +0:24 Constant: +0:24 0 (const int) +0:24 Function Call: @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; ( temp void) +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' (layout( location=0) in 3-element array of structure{ temp 2-component vector of float tc}) + + +Linked geometry stage: + + +Shader version: 450 +invocations = 1 +max_vertices = 3 +input primitive = triangles +output primitive = triangle_strip +0:? Sequence +0:24 Function Definition: @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; ( temp void) +0:24 Function Parameters: +0:24 'tin' ( in 3-element array of structure{ temp 4-component vector of float pos, temp 2-component vector of float tc}) +0:24 '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:? 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 psIn: direct index for structure ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float tc}) +0:27 '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:27 Constant: +0:27 0 (const int) +0:27 Constant: +0:27 0 (const int) +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:28 move second child to first child ( temp 2-component vector of float) +0:28 tc: direct index for structure ( temp 2-component vector of float) +0:28 psIn: direct index for structure ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float tc}) +0:28 '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:28 Constant: +0:28 0 (const int) +0:28 Constant: +0:28 1 (const int) +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:24 Function Definition: main( ( temp void) +0:24 Function Parameters: +0:? Sequence +0:24 Sequence +0:24 move second child to first child ( temp 4-component vector of float) +0:24 pos: direct index for structure ( temp 4-component vector of float) +0:24 direct index ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float tc}) +0:? 'tin' ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 2-component vector of float tc}) +0:24 Constant: +0:24 0 (const int) +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:24 Constant: +0:24 0 (const int) +0:24 move second child to first child ( temp 2-component vector of float) +0:24 tc: direct index for structure ( temp 2-component vector of float) +0:24 direct index ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float tc}) +0:? 'tin' ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 2-component vector of float tc}) +0:24 Constant: +0:24 0 (const int) +0:24 Constant: +0:24 1 (const int) +0:24 tc: direct index for structure ( temp 2-component vector of float) +0:24 direct index (layout( location=0) in structure{ temp 2-component vector of float tc}) +0:24 'tin' (layout( location=0) in 3-element array of structure{ temp 2-component vector of float tc}) +0:24 Constant: +0:24 0 (const int) +0:24 Constant: +0:24 0 (const int) +0:24 move second child to first child ( temp 4-component vector of float) +0:24 pos: direct index for structure ( temp 4-component vector of float) +0:24 direct index ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float tc}) +0:? 'tin' ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 2-component vector of float tc}) +0:24 Constant: +0:24 1 (const int) +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:24 Constant: +0:24 1 (const int) +0:24 move second child to first child ( temp 2-component vector of float) +0:24 tc: direct index for structure ( temp 2-component vector of float) +0:24 direct index ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float tc}) +0:? 'tin' ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 2-component vector of float tc}) +0:24 Constant: +0:24 1 (const int) +0:24 Constant: +0:24 1 (const int) +0:24 tc: direct index for structure ( temp 2-component vector of float) +0:24 direct index (layout( location=0) in structure{ temp 2-component vector of float tc}) +0:24 'tin' (layout( location=0) in 3-element array of structure{ temp 2-component vector of float tc}) +0:24 Constant: +0:24 1 (const int) +0:24 Constant: +0:24 0 (const int) +0:24 move second child to first child ( temp 4-component vector of float) +0:24 pos: direct index for structure ( temp 4-component vector of float) +0:24 direct index ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float tc}) +0:? 'tin' ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 2-component vector of float tc}) +0:24 Constant: +0:24 2 (const int) +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:24 Constant: +0:24 2 (const int) +0:24 move second child to first child ( temp 2-component vector of float) +0:24 tc: direct index for structure ( temp 2-component vector of float) +0:24 direct index ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float tc}) +0:? 'tin' ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 2-component vector of float tc}) +0:24 Constant: +0:24 2 (const int) +0:24 Constant: +0:24 1 (const int) +0:24 tc: direct index for structure ( temp 2-component vector of float) +0:24 direct index (layout( location=0) in structure{ temp 2-component vector of float tc}) +0:24 'tin' (layout( location=0) in 3-element array of structure{ temp 2-component vector of float tc}) +0:24 Constant: +0:24 2 (const int) +0:24 Constant: +0:24 0 (const int) +0:24 Function Call: @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; ( temp void) +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' (layout( location=0) in 3-element array of structure{ temp 2-component vector of float tc}) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 75 + + Capability Geometry + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Geometry 4 "main" 44 52 + ExecutionMode 4 Triangles + ExecutionMode 4 Invocations 1 + ExecutionMode 4 OutputTriangleStrip + ExecutionMode 4 OutputVertices 3 + Name 4 "main" + Name 9 "PS_IN" + MemberName 9(PS_IN) 0 "pos" + MemberName 9(PS_IN) 1 "tc" + Name 17 "STRUCT_WITH_NO_BUILTIN_INTERSTAGE_IO" + MemberName 17(STRUCT_WITH_NO_BUILTIN_INTERSTAGE_IO) 0 "m0_array" + MemberName 17(STRUCT_WITH_NO_BUILTIN_INTERSTAGE_IO) 1 "m1" + Name 18 "GS_OUT" + MemberName 18(GS_OUT) 0 "psIn" + MemberName 18(GS_OUT) 1 "contains_no_builtin_io" + Name 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;" + 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 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypeVector 6(float) 2 + 9(PS_IN): TypeStruct 7(fvec4) 8(fvec2) + 10: TypeInt 32 0 + 11: 10(int) Constant 3 + 12: TypeArray 9(PS_IN) 11 + 13: TypePointer Function 12 + 14: 10(int) Constant 2 + 15: TypeArray 6(float) 14 + 16: TypeInt 32 1 +17(STRUCT_WITH_NO_BUILTIN_INTERSTAGE_IO): TypeStruct 15 16(int) + 18(GS_OUT): TypeStruct 9(PS_IN) 17(STRUCT_WITH_NO_BUILTIN_INTERSTAGE_IO) + 19: TypePointer Function 18(GS_OUT) + 20: TypeFunction 2 13(ptr) 19(ptr) + 26: 16(int) Constant 0 + 27: 6(float) Constant 1065353216 + 28: 6(float) Constant 1073741824 + 29: 6(float) Constant 1077936128 + 30: 6(float) Constant 1082130432 + 31: 7(fvec4) ConstantComposite 27 28 29 30 + 32: TypePointer Function 7(fvec4) + 34: 16(int) Constant 1 + 35: 6(float) Constant 1084227584 + 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 + 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) + 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 + 21(tin): 13(ptr) FunctionParameter + 22(ts): 19(ptr) FunctionParameter + 24: Label + 25(o): 19(ptr) Variable Function + 33: 32(ptr) AccessChain 25(o) 26 26 + 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 + 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 new file mode 100644 index 0000000..29818f1 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split.trivial.geom.out @@ -0,0 +1,298 @@ +hlsl.struct.split.trivial.geom +Shader version: 450 +invocations = -1 +max_vertices = 3 +input primitive = triangles +output primitive = triangle_strip +0:? Sequence +0:14 Function Definition: @main(struct-PS_IN-vf41[3];struct-GS_OUT-vf41; ( temp void) +0:14 Function Parameters: +0:14 'i' ( in 3-element array of structure{ temp 4-component vector of float pos}) +0:14 'ts' ( out structure{ temp 4-component vector of float pos}) +0:? Sequence +0:17 Sequence +0:17 move second child to first child ( temp int) +0:17 'x' ( temp int) +0:17 Constant: +0:17 0 (const int) +0:17 Loop with condition tested first +0:17 Loop Condition +0:17 Compare Less Than ( temp bool) +0:17 'x' ( temp int) +0:17 Constant: +0:17 3 (const int) +0:17 Loop Body +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 'o' ( temp structure{ temp 4-component vector of float pos}) +0:18 Constant: +0:18 0 (const int) +0:18 pos: direct index for structure ( temp 4-component vector of float) +0:18 indirect index ( temp structure{ temp 4-component vector of float pos}) +0:18 'i' ( in 3-element array of structure{ temp 4-component vector of float pos}) +0:18 'x' ( temp int) +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 EmitVertex ( temp void) +0:17 Loop Terminal Expression +0:17 Pre-Increment ( temp int) +0:17 'x' ( temp int) +0:14 Function Definition: main( ( temp void) +0:14 Function Parameters: +0:? Sequence +0:14 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 direct index ( temp structure{ temp 4-component vector of float pos}) +0:? 'i' ( temp 3-element array of structure{ temp 4-component vector of float pos}) +0:14 Constant: +0:14 0 (const int) +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:14 Constant: +0:14 0 (const int) +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 direct index ( temp structure{ temp 4-component vector of float pos}) +0:? 'i' ( temp 3-element array of structure{ temp 4-component vector of float pos}) +0:14 Constant: +0:14 1 (const int) +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:14 Constant: +0:14 1 (const int) +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 direct index ( temp structure{ temp 4-component vector of float pos}) +0:? 'i' ( temp 3-element array of structure{ temp 4-component vector of float pos}) +0:14 Constant: +0:14 2 (const int) +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: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{}) + + +Linked geometry stage: + + +Shader version: 450 +invocations = 1 +max_vertices = 3 +input primitive = triangles +output primitive = triangle_strip +0:? Sequence +0:14 Function Definition: @main(struct-PS_IN-vf41[3];struct-GS_OUT-vf41; ( temp void) +0:14 Function Parameters: +0:14 'i' ( in 3-element array of structure{ temp 4-component vector of float pos}) +0:14 'ts' ( out structure{ temp 4-component vector of float pos}) +0:? Sequence +0:17 Sequence +0:17 move second child to first child ( temp int) +0:17 'x' ( temp int) +0:17 Constant: +0:17 0 (const int) +0:17 Loop with condition tested first +0:17 Loop Condition +0:17 Compare Less Than ( temp bool) +0:17 'x' ( temp int) +0:17 Constant: +0:17 3 (const int) +0:17 Loop Body +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 'o' ( temp structure{ temp 4-component vector of float pos}) +0:18 Constant: +0:18 0 (const int) +0:18 pos: direct index for structure ( temp 4-component vector of float) +0:18 indirect index ( temp structure{ temp 4-component vector of float pos}) +0:18 'i' ( in 3-element array of structure{ temp 4-component vector of float pos}) +0:18 'x' ( temp int) +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 EmitVertex ( temp void) +0:17 Loop Terminal Expression +0:17 Pre-Increment ( temp int) +0:17 'x' ( temp int) +0:14 Function Definition: main( ( temp void) +0:14 Function Parameters: +0:? Sequence +0:14 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 direct index ( temp structure{ temp 4-component vector of float pos}) +0:? 'i' ( temp 3-element array of structure{ temp 4-component vector of float pos}) +0:14 Constant: +0:14 0 (const int) +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:14 Constant: +0:14 0 (const int) +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 direct index ( temp structure{ temp 4-component vector of float pos}) +0:? 'i' ( temp 3-element array of structure{ temp 4-component vector of float pos}) +0:14 Constant: +0:14 1 (const int) +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:14 Constant: +0:14 1 (const int) +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 direct index ( temp structure{ temp 4-component vector of float pos}) +0:? 'i' ( temp 3-element array of structure{ temp 4-component vector of float pos}) +0:14 Constant: +0:14 2 (const int) +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: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{}) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 67 + + Capability Geometry + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Geometry 4 "main" 46 66 + ExecutionMode 4 Triangles + ExecutionMode 4 Invocations 1 + ExecutionMode 4 OutputTriangleStrip + ExecutionMode 4 OutputVertices 3 + Name 4 "main" + Name 8 "PS_IN" + MemberName 8(PS_IN) 0 "pos" + Name 13 "GS_OUT" + MemberName 13(GS_OUT) 0 "pos" + Name 18 "@main(struct-PS_IN-vf41[3];struct-GS_OUT-vf41;" + Name 16 "i" + 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 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8(PS_IN): TypeStruct 7(fvec4) + 9: TypeInt 32 0 + 10: 9(int) Constant 3 + 11: TypeArray 8(PS_IN) 10 + 12: TypePointer Function 11 + 13(GS_OUT): TypeStruct 7(fvec4) + 14: TypePointer Function 13(GS_OUT) + 15: TypeFunction 2 12(ptr) 14(ptr) + 20: TypeInt 32 1 + 21: TypePointer Function 20(int) + 23: 20(int) Constant 0 + 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 + 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 + 52: 7(fvec4) Load 51 + 53: 35(ptr) AccessChain 43(i) 41 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) + Return + FunctionEnd +18(@main(struct-PS_IN-vf41[3];struct-GS_OUT-vf41;): 2 Function None 15 + 16(i): 12(ptr) FunctionParameter + 17(ts): 14(ptr) FunctionParameter + 19: Label + 22(x): 21(ptr) Variable Function + 33(o): 14(ptr) Variable Function + Store 22(x) 23 + Branch 24 + 24: Label + LoopMerge 26 27 None + Branch 28 + 28: Label + 29: 20(int) Load 22(x) + 32: 31(bool) SLessThan 29 30 + BranchConditional 32 25 26 + 25: Label + 34: 20(int) Load 22(x) + 36: 35(ptr) AccessChain 16(i) 34 23 + 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 + EmitVertex + Branch 27 + 27: Label + 40: 20(int) Load 22(x) + 42: 20(int) IAdd 40 41 + Store 22(x) 42 + Branch 24 + 26: Label + Return + FunctionEnd 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 new file mode 100644 index 0000000..822f819 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split.trivial.vert.out @@ -0,0 +1,183 @@ +hlsl.struct.split.trivial.vert +Shader version: 450 +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: +0:16 'vsin' ( in structure{ temp 4-component vector of float Pos_in}) +0:16 'Pos_loose' ( in 4-component vector of float) +0:? Sequence +0:19 move second child to first child ( temp 4-component vector of float) +0:19 Pos: direct index for structure ( temp 4-component vector of float) +0:19 'vsout' ( temp structure{ temp 4-component vector of float Pos}) +0:19 Constant: +0:19 0 (const int) +0:19 add ( temp 4-component vector of float) +0:19 Pos_in: direct index for structure ( temp 4-component vector of float) +0:19 'vsin' ( in structure{ temp 4-component vector of float Pos_in}) +0:19 Constant: +0:19 0 (const int) +0:19 'Pos_loose' ( in 4-component vector of float) +0:21 Branch: Return with expression +0:21 'vsout' ( temp structure{ temp 4-component vector of float Pos}) +0:16 Function Definition: main( ( temp void) +0:16 Function Parameters: +0:? Sequence +0:16 Sequence +0:16 move second child to first child ( temp 4-component vector of float) +0:16 Pos_in: direct index for structure ( temp 4-component vector of float) +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: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: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}) +0:? 'Pos_loose' ( temp 4-component vector of float) +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:? 'Pos_loose' (layout( location=1) in 4-component vector of float) + + +Linked vertex stage: + + +Shader version: 450 +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: +0:16 'vsin' ( in structure{ temp 4-component vector of float Pos_in}) +0:16 'Pos_loose' ( in 4-component vector of float) +0:? Sequence +0:19 move second child to first child ( temp 4-component vector of float) +0:19 Pos: direct index for structure ( temp 4-component vector of float) +0:19 'vsout' ( temp structure{ temp 4-component vector of float Pos}) +0:19 Constant: +0:19 0 (const int) +0:19 add ( temp 4-component vector of float) +0:19 Pos_in: direct index for structure ( temp 4-component vector of float) +0:19 'vsin' ( in structure{ temp 4-component vector of float Pos_in}) +0:19 Constant: +0:19 0 (const int) +0:19 'Pos_loose' ( in 4-component vector of float) +0:21 Branch: Return with expression +0:21 'vsout' ( temp structure{ temp 4-component vector of float Pos}) +0:16 Function Definition: main( ( temp void) +0:16 Function Parameters: +0:? Sequence +0:16 Sequence +0:16 move second child to first child ( temp 4-component vector of float) +0:16 Pos_in: direct index for structure ( temp 4-component vector of float) +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: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: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}) +0:? 'Pos_loose' ( temp 4-component vector of float) +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:? '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 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 31 35 38 47 + Name 4 "main" + Name 8 "VS_INPUT" + MemberName 8(VS_INPUT) 0 "Pos_in" + Name 11 "VS_OUTPUT" + MemberName 11(VS_OUTPUT) 0 "Pos" + Name 15 "@main(struct-VS_INPUT-vf41;vf4;" + Name 13 "vsin" + Name 14 "Pos_loose" + Name 18 "vsout" + Name 29 "vsin" + Name 31 "Pos_in" + Name 34 "Pos_loose" + Name 35 "Pos_loose" + Name 38 "@entryPointOutput_Pos" + Name 39 "param" + Name 41 "param" + Name 45 "VS_OUTPUT" + Name 47 "@entryPointOutput" + Decorate 31(Pos_in) Location 0 + Decorate 35(Pos_loose) Location 1 + Decorate 38(@entryPointOutput_Pos) BuiltIn Position + Decorate 47(@entryPointOutput) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8(VS_INPUT): TypeStruct 7(fvec4) + 9: TypePointer Function 8(VS_INPUT) + 10: TypePointer Function 7(fvec4) + 11(VS_OUTPUT): TypeStruct 7(fvec4) + 12: TypeFunction 11(VS_OUTPUT) 9(ptr) 10(ptr) + 17: TypePointer Function 11(VS_OUTPUT) + 19: TypeInt 32 1 + 20: 19(int) Constant 0 + 30: TypePointer Input 7(fvec4) + 31(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 + 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) + 33: 10(ptr) AccessChain 29(vsin) 20 + Store 33 32 + 36: 7(fvec4) Load 35(Pos_loose) + Store 34(Pos_loose) 36 + 40: 8(VS_INPUT) Load 29(vsin) + Store 39(param) 40 + 42: 7(fvec4) Load 34(Pos_loose) + 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 + Return + FunctionEnd +15(@main(struct-VS_INPUT-vf41;vf4;):11(VS_OUTPUT) Function None 12 + 13(vsin): 9(ptr) FunctionParameter + 14(Pos_loose): 10(ptr) FunctionParameter + 16: Label + 18(vsout): 17(ptr) Variable Function + 21: 10(ptr) AccessChain 13(vsin) 20 + 22: 7(fvec4) Load 21 + 23: 7(fvec4) Load 14(Pos_loose) + 24: 7(fvec4) FAdd 22 23 + 25: 10(ptr) AccessChain 18(vsout) 20 + Store 25 24 + 26:11(VS_OUTPUT) Load 18(vsout) + ReturnValue 26 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structIoFourWay.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structIoFourWay.frag.out new file mode 100755 index 0000000..64c60ed --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structIoFourWay.frag.out @@ -0,0 +1,255 @@ +hlsl.structIoFourWay.frag +Shader version: 450 +gl_FragCoord origin is upper left +using depth_greater +0:? Sequence +0:15 Function Definition: @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:15 Function Parameters: +0:15 't' ( in structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal}) +0:? Sequence +0:17 Branch: Return with expression +0:17 'local' ( temp structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal}) +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 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: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: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: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: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}) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +using depth_greater +0:? Sequence +0:15 Function Definition: @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:15 Function Parameters: +0:15 't' ( in structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal}) +0:? Sequence +0:17 Branch: Return with expression +0:17 'local' ( temp structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal}) +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 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: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: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: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: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}) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 64 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 21 43 46 49 53 + ExecutionMode 4 OriginUpperLeft + ExecutionMode 4 DepthGreater + Name 4 "main" + Name 8 "T" + MemberName 8(T) 0 "f" + MemberName 8(T) 1 "g" + MemberName 8(T) 2 "d" + MemberName 8(T) 3 "normal" + Name 12 "@main(struct-T-f1-f1-f1-vf41;" + 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 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 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 + 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 + Return + FunctionEnd +12(@main(struct-T-f1-f1-f1-vf41;): 8(T) Function None 10 + 11(t): 9(ptr) FunctionParameter + 13: Label + 14(local): 9(ptr) Variable Function + 15: 8(T) Load 14(local) + ReturnValue 15 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structStructName.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structStructName.frag.out new file mode 100755 index 0000000..0fc4032 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structStructName.frag.out @@ -0,0 +1,84 @@ +hlsl.structStructName.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:4 Function Definition: @main( ( temp int) +0:4 Function Parameters: +0:? Sequence +0:6 Branch: Return with expression +0:6 s: direct index for structure ( temp int) +0:6 't' ( temp structure{ temp int s}) +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 int) +0:? '@entryPointOutput' (layout( location=0) out int) +0:4 Function Call: @main( ( temp int) +0:? Linker Objects +0:? '@entryPointOutput' (layout( location=0) out int) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:4 Function Definition: @main( ( temp int) +0:4 Function Parameters: +0:? Sequence +0:6 Branch: Return with expression +0:6 s: direct index for structure ( temp int) +0:6 't' ( temp structure{ temp int s}) +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 int) +0:? '@entryPointOutput' (layout( location=0) out int) +0:4 Function Call: @main( ( temp int) +0:? Linker Objects +0:? '@entryPointOutput' (layout( location=0) out int) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 22 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 20 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "@main(" + Name 10 "S" + MemberName 10(S) 0 "s" + Name 12 "t" + Name 20 "@entryPointOutput" + Decorate 20(@entryPointOutput) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypeFunction 6(int) + 10(S): TypeStruct 6(int) + 11: TypePointer Function 10(S) + 13: 6(int) Constant 0 + 14: TypePointer Function 6(int) + 19: TypePointer Output 6(int) +20(@entryPointOutput): 19(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 21: 6(int) FunctionCall 8(@main() + Store 20(@entryPointOutput) 21 + Return + FunctionEnd + 8(@main(): 6(int) Function None 7 + 9: Label + 12(t): 11(ptr) Variable Function + 15: 14(ptr) AccessChain 12(t) 13 + 16: 6(int) Load 15 + ReturnValue 16 + FunctionEnd 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 new file mode 100644 index 0000000..7c84d37 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structarray.flatten.frag.out @@ -0,0 +1,253 @@ +hlsl.structarray.flatten.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:23 Function Definition: @main(struct-PS_OUTPUT-vf41; ( temp void) +0:23 Function Parameters: +0:23 'ps_output' ( out structure{ temp 4-component vector of float color}) +0:? Sequence +0:24 move second child to first child ( temp 4-component vector of float) +0:24 color: direct index for structure ( temp 4-component vector of float) +0:24 'ps_output' ( out structure{ temp 4-component vector of float color}) +0:24 Constant: +0:24 0 (const int) +0:26 add ( temp 4-component vector of float) +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:25 Constant: +0:25 0.500000 +0:26 texture ( temp 4-component vector of float) +0:26 Construct combined texture-sampler ( temp sampler1D) +0:? 'g_texdata_array[1].tex' ( uniform texture1D) +0:? 'g_texdata_array[1].samp' ( uniform sampler) +0:26 Constant: +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 Constant: +0:27 0.300000 +0:23 Function Definition: main( ( temp void) +0:23 Function Parameters: +0:? Sequence +0:23 Function Call: @main(struct-PS_OUTPUT-vf41; ( temp void) +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: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: +0:23 0 (const int) +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) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:23 Function Definition: @main(struct-PS_OUTPUT-vf41; ( temp void) +0:23 Function Parameters: +0:23 'ps_output' ( out structure{ temp 4-component vector of float color}) +0:? Sequence +0:24 move second child to first child ( temp 4-component vector of float) +0:24 color: direct index for structure ( temp 4-component vector of float) +0:24 'ps_output' ( out structure{ temp 4-component vector of float color}) +0:24 Constant: +0:24 0 (const int) +0:26 add ( temp 4-component vector of float) +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:25 Constant: +0:25 0.500000 +0:26 texture ( temp 4-component vector of float) +0:26 Construct combined texture-sampler ( temp sampler1D) +0:? 'g_texdata_array[1].tex' ( uniform texture1D) +0:? 'g_texdata_array[1].samp' ( uniform sampler) +0:26 Constant: +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 Constant: +0:27 0.300000 +0:23 Function Definition: main( ( temp void) +0:23 Function Parameters: +0:? Sequence +0:23 Function Call: @main(struct-PS_OUTPUT-vf41; ( temp void) +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: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: +0:23 0 (const int) +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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 66 + + Capability Shader + Capability Sampled1D + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 51 + ExecutionMode 4 OriginUpperLeft + 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 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 + 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 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8(PS_OUTPUT): TypeStruct 7(fvec4) + 9: TypePointer Function 8(PS_OUTPUT) + 10: TypeFunction 2 9(ptr) + 14: TypeInt 32 1 + 15: 14(int) Constant 0 + 16: TypeImage 6(float) 1D sampled format:Unknown + 17: TypePointer UniformConstant 16 + 18(tex): 17(ptr) Variable UniformConstant + 20: TypeSampler + 21: TypePointer UniformConstant 20 + 22(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 + 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 + 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) + 25: 24 SampledImage 19 23 + 27: 7(fvec4) ImageSampleImplicitLod 25 26 + 29: 16 Load 28(g_texdata_array[1].tex) + 31: 20 Load 30(g_texdata_array[1].samp) + 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 + 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 new file mode 100644 index 0000000..1af304d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structarray.flatten.geom.out @@ -0,0 +1,220 @@ +hlsl.structarray.flatten.geom +Shader version: 450 +invocations = -1 +max_vertices = 4 +input primitive = lines +output primitive = triangle_strip +0:? Sequence +0:16 Function Definition: @main(struct-VertexData-vf4-vf4-vf21[2];struct-PS_IN-vf4-vf4-vf21; ( temp void) +0:16 Function Parameters: +0:16 'vin' ( 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:16 '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:? Sequence +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 '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:19 Constant: +0:19 1 (const int) +0:19 color: direct index for structure ( temp 4-component vector of float) +0:19 direct index ( temp structure{ temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv}) +0:19 'vin' ( 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:19 Constant: +0:19 1 (const int) +0:19 Constant: +0:19 1 (const int) +0:20 move second child to first child ( temp 2-component vector of float) +0:20 uv: direct index for structure ( temp 2-component vector of float) +0:20 '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:20 Constant: +0:20 2 (const int) +0:20 uv: direct index for structure ( temp 2-component vector of float) +0:20 direct index ( temp structure{ temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv}) +0:20 'vin' ( 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:20 Constant: +0:20 1 (const int) +0:20 Constant: +0:20 2 (const int) +0:21 move second child to first child ( temp 4-component vector of float) +0:21 position: direct index for structure ( temp 4-component vector of float) +0:21 '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:21 Constant: +0:21 0 (const int) +0:21 position: direct index for structure ( temp 4-component vector of float) +0:21 direct index ( temp structure{ temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv}) +0:21 'vin' ( 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:21 Constant: +0:21 1 (const int) +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 EmitVertex ( temp void) +0:16 Function Definition: main( ( temp void) +0:16 Function Parameters: +0:? Sequence +0:16 move second child to first child ( temp 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:? 'vin' ( temp 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:? '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:16 Function Call: @main(struct-VertexData-vf4-vf4-vf21[2];struct-PS_IN-vf4-vf4-vf21; ( temp void) +0:? 'vin' ( temp 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' ( 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}) + + +Linked geometry stage: + + +Shader version: 450 +invocations = 1 +max_vertices = 4 +input primitive = lines +output primitive = triangle_strip +0:? Sequence +0:16 Function Definition: @main(struct-VertexData-vf4-vf4-vf21[2];struct-PS_IN-vf4-vf4-vf21; ( temp void) +0:16 Function Parameters: +0:16 'vin' ( 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:16 '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:? Sequence +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 '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:19 Constant: +0:19 1 (const int) +0:19 color: direct index for structure ( temp 4-component vector of float) +0:19 direct index ( temp structure{ temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv}) +0:19 'vin' ( 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:19 Constant: +0:19 1 (const int) +0:19 Constant: +0:19 1 (const int) +0:20 move second child to first child ( temp 2-component vector of float) +0:20 uv: direct index for structure ( temp 2-component vector of float) +0:20 '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:20 Constant: +0:20 2 (const int) +0:20 uv: direct index for structure ( temp 2-component vector of float) +0:20 direct index ( temp structure{ temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv}) +0:20 'vin' ( 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:20 Constant: +0:20 1 (const int) +0:20 Constant: +0:20 2 (const int) +0:21 move second child to first child ( temp 4-component vector of float) +0:21 position: direct index for structure ( temp 4-component vector of float) +0:21 '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:21 Constant: +0:21 0 (const int) +0:21 position: direct index for structure ( temp 4-component vector of float) +0:21 direct index ( temp structure{ temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv}) +0:21 'vin' ( 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:21 Constant: +0:21 1 (const int) +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 EmitVertex ( temp void) +0:16 Function Definition: main( ( temp void) +0:16 Function Parameters: +0:? Sequence +0:16 move second child to first child ( temp 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:? 'vin' ( temp 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:? '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:16 Function Call: @main(struct-VertexData-vf4-vf4-vf21[2];struct-PS_IN-vf4-vf4-vf21; ( temp void) +0:? 'vin' ( temp 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' ( 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}) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 47 + + Capability Geometry + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Geometry 4 "main" 40 + ExecutionMode 4 InputLines + ExecutionMode 4 Invocations 1 + ExecutionMode 4 OutputTriangleStrip + ExecutionMode 4 OutputVertices 4 + Name 4 "main" + Name 9 "VertexData" + MemberName 9(VertexData) 0 "position" + MemberName 9(VertexData) 1 "color" + MemberName 9(VertexData) 2 "uv" + Name 14 "PS_IN" + MemberName 14(PS_IN) 0 "position" + MemberName 14(PS_IN) 1 "color" + MemberName 14(PS_IN) 2 "uv" + Name 19 "@main(struct-VertexData-vf4-vf4-vf21[2];struct-PS_IN-vf4-vf4-vf21;" + 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 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypeVector 6(float) 2 + 9(VertexData): TypeStruct 7(fvec4) 7(fvec4) 8(fvec2) + 10: TypeInt 32 0 + 11: 10(int) Constant 2 + 12: TypeArray 9(VertexData) 11 + 13: TypePointer Function 12 + 14(PS_IN): TypeStruct 7(fvec4) 7(fvec4) 8(fvec2) + 15: TypePointer Function 14(PS_IN) + 16: TypeFunction 2 13(ptr) 15(ptr) + 22: TypeInt 32 1 + 23: 22(int) Constant 1 + 24: TypePointer Function 7(fvec4) + 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 + 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) + Return + FunctionEnd +19(@main(struct-VertexData-vf4-vf4-vf21[2];struct-PS_IN-vf4-vf4-vf21;): 2 Function None 16 + 17(vin): 13(ptr) FunctionParameter + 18(outStream): 15(ptr) FunctionParameter + 20: Label + 21(vout): 15(ptr) Variable Function + 25: 24(ptr) AccessChain 17(vin) 23 23 + 26: 7(fvec4) Load 25 + 27: 24(ptr) AccessChain 21(vout) 23 + Store 27 26 + 30: 29(ptr) AccessChain 17(vin) 23 28 + 31: 8(fvec2) Load 30 + 32: 29(ptr) AccessChain 21(vout) 28 + Store 32 31 + 34: 24(ptr) AccessChain 17(vin) 23 33 + 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 + EmitVertex + Return + 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 new file mode 100644 index 0000000..a463a88 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.atomics.frag.out @@ -0,0 +1,599 @@ +hlsl.structbuffer.atomics.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:5 Function Definition: @main(u1; ( temp 4-component vector of float) +0:5 Function Parameters: +0:5 'pos' ( in uint) +0:? Sequence +0:8 AtomicAdd ( temp void) +0:8 indirect index (layout( row_major std430) buffer uint) +0:8 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:8 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:8 Constant: +0:8 0 (const uint) +0:8 right-shift ( temp int) +0:8 Constant: +0:8 8 (const int) +0:8 Constant: +0:8 2 (const int) +0:8 Constant: +0:8 1 (const int) +0:9 move second child to first child ( temp uint) +0:9 'u' ( temp uint) +0:9 AtomicAdd ( temp uint) +0:9 indirect index (layout( row_major std430) buffer uint) +0:9 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:9 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:9 Constant: +0:9 0 (const uint) +0:9 right-shift ( temp int) +0:9 Constant: +0:9 8 (const int) +0:9 Constant: +0:9 2 (const int) +0:9 Constant: +0:9 1 (const int) +0:10 AtomicAnd ( temp void) +0:10 indirect index (layout( row_major std430) buffer uint) +0:10 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:10 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:10 Constant: +0:10 0 (const uint) +0:10 right-shift ( temp int) +0:10 Constant: +0:10 8 (const int) +0:10 Constant: +0:10 2 (const int) +0:10 Constant: +0:10 1 (const int) +0:11 move second child to first child ( temp uint) +0:11 'u' ( temp uint) +0:11 AtomicAnd ( temp uint) +0:11 indirect index (layout( row_major std430) buffer uint) +0:11 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:11 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:11 Constant: +0:11 0 (const uint) +0:11 right-shift ( temp int) +0:11 Constant: +0:11 8 (const int) +0:11 Constant: +0:11 2 (const int) +0:11 Constant: +0:11 1 (const int) +0:12 move second child to first child ( temp uint) +0:12 'u' ( temp uint) +0:12 Convert int to uint ( temp uint) +0:12 AtomicCompSwap ( temp int) +0:12 indirect index (layout( row_major std430) buffer uint) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 right-shift ( temp int) +0:12 Constant: +0:12 8 (const int) +0:12 Constant: +0:12 2 (const int) +0:12 Constant: +0:12 1 (const int) +0:12 Constant: +0:12 2 (const int) +0:14 move second child to first child ( temp uint) +0:14 'u' ( temp uint) +0:14 AtomicExchange ( temp uint) +0:14 indirect index (layout( row_major std430) buffer uint) +0:14 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:14 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:14 Constant: +0:14 0 (const uint) +0:14 right-shift ( temp int) +0:14 Constant: +0:14 8 (const int) +0:14 Constant: +0:14 2 (const int) +0:14 Constant: +0:14 1 (const int) +0:15 AtomicMax ( temp void) +0:15 indirect index (layout( row_major std430) buffer uint) +0:15 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:15 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:15 Constant: +0:15 0 (const uint) +0:15 right-shift ( temp int) +0:15 Constant: +0:15 8 (const int) +0:15 Constant: +0:15 2 (const int) +0:15 Constant: +0:15 1 (const int) +0:16 move second child to first child ( temp uint) +0:16 'u' ( temp uint) +0:16 AtomicMax ( temp uint) +0:16 indirect index (layout( row_major std430) buffer uint) +0:16 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:16 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:16 Constant: +0:16 0 (const uint) +0:16 right-shift ( temp int) +0:16 Constant: +0:16 8 (const int) +0:16 Constant: +0:16 2 (const int) +0:16 Constant: +0:16 1 (const int) +0:17 AtomicMin ( temp void) +0:17 indirect index (layout( row_major std430) buffer uint) +0:17 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:17 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:17 Constant: +0:17 0 (const uint) +0:17 right-shift ( temp int) +0:17 Constant: +0:17 8 (const int) +0:17 Constant: +0:17 2 (const int) +0:17 Constant: +0:17 1 (const int) +0:18 move second child to first child ( temp uint) +0:18 'u' ( temp uint) +0:18 AtomicMin ( temp uint) +0:18 indirect index (layout( row_major std430) buffer uint) +0:18 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:18 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:18 Constant: +0:18 0 (const uint) +0:18 right-shift ( temp int) +0:18 Constant: +0:18 8 (const int) +0:18 Constant: +0:18 2 (const int) +0:18 Constant: +0:18 1 (const int) +0:19 AtomicOr ( temp void) +0:19 indirect index (layout( row_major std430) buffer uint) +0:19 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:19 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:19 Constant: +0:19 0 (const uint) +0:19 right-shift ( temp int) +0:19 Constant: +0:19 8 (const int) +0:19 Constant: +0:19 2 (const int) +0:19 Constant: +0:19 1 (const int) +0:20 move second child to first child ( temp uint) +0:20 'u' ( temp uint) +0:20 AtomicOr ( temp uint) +0:20 indirect index (layout( row_major std430) buffer uint) +0:20 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:20 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:20 Constant: +0:20 0 (const uint) +0:20 right-shift ( temp int) +0:20 Constant: +0:20 8 (const int) +0:20 Constant: +0:20 2 (const int) +0:20 Constant: +0:20 1 (const int) +0:21 AtomicXor ( temp void) +0:21 indirect index (layout( row_major std430) buffer uint) +0:21 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:21 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:21 Constant: +0:21 0 (const uint) +0:21 right-shift ( temp int) +0:21 Constant: +0:21 8 (const int) +0:21 Constant: +0:21 2 (const int) +0:21 Constant: +0:21 1 (const int) +0:22 move second child to first child ( temp uint) +0:22 'u' ( temp uint) +0:22 AtomicXor ( temp uint) +0:22 indirect index (layout( row_major std430) buffer uint) +0:22 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:22 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:22 Constant: +0:22 0 (const uint) +0:22 right-shift ( temp int) +0:22 Constant: +0:22 8 (const int) +0:22 Constant: +0:22 2 (const int) +0:22 Constant: +0:22 1 (const int) +0:24 Branch: Return with expression +0:24 Construct vec4 ( temp 4-component vector of float) +0:24 Convert uint to float ( temp float) +0:24 indirect index (layout( row_major std430) buffer uint) +0:24 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:24 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:24 Constant: +0:24 0 (const uint) +0:24 right-shift ( temp int) +0:24 'pos' ( in uint) +0:24 Constant: +0:24 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 uint) +0:? 'pos' ( temp uint) +0:? 'pos' (layout( location=0) 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) +0:? 'pos' ( temp uint) +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) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:5 Function Definition: @main(u1; ( temp 4-component vector of float) +0:5 Function Parameters: +0:5 'pos' ( in uint) +0:? Sequence +0:8 AtomicAdd ( temp void) +0:8 indirect index (layout( row_major std430) buffer uint) +0:8 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:8 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:8 Constant: +0:8 0 (const uint) +0:8 right-shift ( temp int) +0:8 Constant: +0:8 8 (const int) +0:8 Constant: +0:8 2 (const int) +0:8 Constant: +0:8 1 (const int) +0:9 move second child to first child ( temp uint) +0:9 'u' ( temp uint) +0:9 AtomicAdd ( temp uint) +0:9 indirect index (layout( row_major std430) buffer uint) +0:9 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:9 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:9 Constant: +0:9 0 (const uint) +0:9 right-shift ( temp int) +0:9 Constant: +0:9 8 (const int) +0:9 Constant: +0:9 2 (const int) +0:9 Constant: +0:9 1 (const int) +0:10 AtomicAnd ( temp void) +0:10 indirect index (layout( row_major std430) buffer uint) +0:10 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:10 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:10 Constant: +0:10 0 (const uint) +0:10 right-shift ( temp int) +0:10 Constant: +0:10 8 (const int) +0:10 Constant: +0:10 2 (const int) +0:10 Constant: +0:10 1 (const int) +0:11 move second child to first child ( temp uint) +0:11 'u' ( temp uint) +0:11 AtomicAnd ( temp uint) +0:11 indirect index (layout( row_major std430) buffer uint) +0:11 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:11 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:11 Constant: +0:11 0 (const uint) +0:11 right-shift ( temp int) +0:11 Constant: +0:11 8 (const int) +0:11 Constant: +0:11 2 (const int) +0:11 Constant: +0:11 1 (const int) +0:12 move second child to first child ( temp uint) +0:12 'u' ( temp uint) +0:12 Convert int to uint ( temp uint) +0:12 AtomicCompSwap ( temp int) +0:12 indirect index (layout( row_major std430) buffer uint) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 right-shift ( temp int) +0:12 Constant: +0:12 8 (const int) +0:12 Constant: +0:12 2 (const int) +0:12 Constant: +0:12 1 (const int) +0:12 Constant: +0:12 2 (const int) +0:14 move second child to first child ( temp uint) +0:14 'u' ( temp uint) +0:14 AtomicExchange ( temp uint) +0:14 indirect index (layout( row_major std430) buffer uint) +0:14 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:14 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:14 Constant: +0:14 0 (const uint) +0:14 right-shift ( temp int) +0:14 Constant: +0:14 8 (const int) +0:14 Constant: +0:14 2 (const int) +0:14 Constant: +0:14 1 (const int) +0:15 AtomicMax ( temp void) +0:15 indirect index (layout( row_major std430) buffer uint) +0:15 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:15 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:15 Constant: +0:15 0 (const uint) +0:15 right-shift ( temp int) +0:15 Constant: +0:15 8 (const int) +0:15 Constant: +0:15 2 (const int) +0:15 Constant: +0:15 1 (const int) +0:16 move second child to first child ( temp uint) +0:16 'u' ( temp uint) +0:16 AtomicMax ( temp uint) +0:16 indirect index (layout( row_major std430) buffer uint) +0:16 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:16 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:16 Constant: +0:16 0 (const uint) +0:16 right-shift ( temp int) +0:16 Constant: +0:16 8 (const int) +0:16 Constant: +0:16 2 (const int) +0:16 Constant: +0:16 1 (const int) +0:17 AtomicMin ( temp void) +0:17 indirect index (layout( row_major std430) buffer uint) +0:17 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:17 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:17 Constant: +0:17 0 (const uint) +0:17 right-shift ( temp int) +0:17 Constant: +0:17 8 (const int) +0:17 Constant: +0:17 2 (const int) +0:17 Constant: +0:17 1 (const int) +0:18 move second child to first child ( temp uint) +0:18 'u' ( temp uint) +0:18 AtomicMin ( temp uint) +0:18 indirect index (layout( row_major std430) buffer uint) +0:18 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:18 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:18 Constant: +0:18 0 (const uint) +0:18 right-shift ( temp int) +0:18 Constant: +0:18 8 (const int) +0:18 Constant: +0:18 2 (const int) +0:18 Constant: +0:18 1 (const int) +0:19 AtomicOr ( temp void) +0:19 indirect index (layout( row_major std430) buffer uint) +0:19 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:19 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:19 Constant: +0:19 0 (const uint) +0:19 right-shift ( temp int) +0:19 Constant: +0:19 8 (const int) +0:19 Constant: +0:19 2 (const int) +0:19 Constant: +0:19 1 (const int) +0:20 move second child to first child ( temp uint) +0:20 'u' ( temp uint) +0:20 AtomicOr ( temp uint) +0:20 indirect index (layout( row_major std430) buffer uint) +0:20 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:20 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:20 Constant: +0:20 0 (const uint) +0:20 right-shift ( temp int) +0:20 Constant: +0:20 8 (const int) +0:20 Constant: +0:20 2 (const int) +0:20 Constant: +0:20 1 (const int) +0:21 AtomicXor ( temp void) +0:21 indirect index (layout( row_major std430) buffer uint) +0:21 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:21 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:21 Constant: +0:21 0 (const uint) +0:21 right-shift ( temp int) +0:21 Constant: +0:21 8 (const int) +0:21 Constant: +0:21 2 (const int) +0:21 Constant: +0:21 1 (const int) +0:22 move second child to first child ( temp uint) +0:22 'u' ( temp uint) +0:22 AtomicXor ( temp uint) +0:22 indirect index (layout( row_major std430) buffer uint) +0:22 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:22 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:22 Constant: +0:22 0 (const uint) +0:22 right-shift ( temp int) +0:22 Constant: +0:22 8 (const int) +0:22 Constant: +0:22 2 (const int) +0:22 Constant: +0:22 1 (const int) +0:24 Branch: Return with expression +0:24 Construct vec4 ( temp 4-component vector of float) +0:24 Convert uint to float ( temp float) +0:24 indirect index (layout( row_major std430) buffer uint) +0:24 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:24 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:24 Constant: +0:24 0 (const uint) +0:24 right-shift ( temp int) +0:24 'pos' ( in uint) +0:24 Constant: +0:24 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 uint) +0:? 'pos' ( temp uint) +0:? 'pos' (layout( location=0) 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) +0:? 'pos' ( temp uint) +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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 87 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 80 83 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 12 "@main(u1;" + Name 11 "pos" + Name 15 "sbuf" + MemberName 15(sbuf) 0 "@data" + Name 17 "sbuf" + Name 29 "u" + Name 78 "pos" + Name 80 "pos" + Name 83 "@entryPointOutput" + Name 84 "param" + Decorate 14 ArrayStride 4 + MemberDecorate 15(sbuf) 0 Offset 0 + Decorate 15(sbuf) BufferBlock + Decorate 17(sbuf) DescriptorSet 0 + Decorate 80(pos) Location 0 + Decorate 83(@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: TypeRuntimeArray 6(int) + 15(sbuf): TypeStruct 14 + 16: TypePointer Uniform 15(sbuf) + 17(sbuf): 16(ptr) Variable Uniform + 18: TypeInt 32 1 + 19: 18(int) Constant 0 + 20: 18(int) Constant 8 + 21: 18(int) Constant 2 + 23: TypePointer Uniform 6(int) + 25: 18(int) Constant 1 + 26: 6(int) Constant 1 + 27: 6(int) Constant 0 + 79: TypePointer Input 6(int) + 80(pos): 79(ptr) Variable Input + 82: TypePointer Output 9(fvec4) +83(@entryPointOutput): 82(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 78(pos): 7(ptr) Variable Function + 84(param): 7(ptr) Variable Function + 81: 6(int) Load 80(pos) + Store 78(pos) 81 + 85: 6(int) Load 78(pos) + Store 84(param) 85 + 86: 9(fvec4) FunctionCall 12(@main(u1;) 84(param) + Store 83(@entryPointOutput) 86 + Return + FunctionEnd + 12(@main(u1;): 9(fvec4) Function None 10 + 11(pos): 7(ptr) FunctionParameter + 13: Label + 29(u): 7(ptr) Variable Function + 22: 18(int) ShiftRightArithmetic 20 21 + 24: 23(ptr) AccessChain 17(sbuf) 19 22 + 28: 2 AtomicIAdd 24 26 27 25 + 30: 18(int) ShiftRightArithmetic 20 21 + 31: 23(ptr) AccessChain 17(sbuf) 19 30 + 32: 6(int) AtomicIAdd 31 26 27 25 + Store 29(u) 32 + 33: 18(int) ShiftRightArithmetic 20 21 + 34: 23(ptr) AccessChain 17(sbuf) 19 33 + 35: 2 AtomicAnd 34 26 27 25 + 36: 18(int) ShiftRightArithmetic 20 21 + 37: 23(ptr) AccessChain 17(sbuf) 19 36 + 38: 6(int) AtomicAnd 37 26 27 25 + Store 29(u) 38 + 39: 18(int) ShiftRightArithmetic 20 21 + 40: 23(ptr) AccessChain 17(sbuf) 19 39 + 41: 18(int) AtomicCompareExchange 40 26 27 27 21 25 + 42: 6(int) Bitcast 41 + Store 29(u) 42 + 43: 18(int) ShiftRightArithmetic 20 21 + 44: 23(ptr) AccessChain 17(sbuf) 19 43 + 45: 6(int) AtomicExchange 44 26 27 25 + Store 29(u) 45 + 46: 18(int) ShiftRightArithmetic 20 21 + 47: 23(ptr) AccessChain 17(sbuf) 19 46 + 48: 2 AtomicSMax 47 26 27 25 + 49: 18(int) ShiftRightArithmetic 20 21 + 50: 23(ptr) AccessChain 17(sbuf) 19 49 + 51: 6(int) AtomicUMax 50 26 27 25 + Store 29(u) 51 + 52: 18(int) ShiftRightArithmetic 20 21 + 53: 23(ptr) AccessChain 17(sbuf) 19 52 + 54: 2 AtomicSMin 53 26 27 25 + 55: 18(int) ShiftRightArithmetic 20 21 + 56: 23(ptr) AccessChain 17(sbuf) 19 55 + 57: 6(int) AtomicUMin 56 26 27 25 + Store 29(u) 57 + 58: 18(int) ShiftRightArithmetic 20 21 + 59: 23(ptr) AccessChain 17(sbuf) 19 58 + 60: 2 AtomicOr 59 26 27 25 + 61: 18(int) ShiftRightArithmetic 20 21 + 62: 23(ptr) AccessChain 17(sbuf) 19 61 + 63: 6(int) AtomicOr 62 26 27 25 + Store 29(u) 63 + 64: 18(int) ShiftRightArithmetic 20 21 + 65: 23(ptr) AccessChain 17(sbuf) 19 64 + 66: 2 AtomicXor 65 26 27 25 + 67: 18(int) ShiftRightArithmetic 20 21 + 68: 23(ptr) AccessChain 17(sbuf) 19 67 + 69: 6(int) AtomicXor 68 26 27 25 + Store 29(u) 69 + 70: 6(int) Load 11(pos) + 71: 18(int) ShiftRightLogical 70 21 + 72: 23(ptr) AccessChain 17(sbuf) 19 71 + 73: 6(int) Load 72 + 74: 8(float) ConvertUToF 73 + 75: 9(fvec4) CompositeConstruct 74 74 74 74 + ReturnValue 75 + FunctionEnd 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 new file mode 100644 index 0000000..f388f87 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.byte.frag.out @@ -0,0 +1,476 @@ +hlsl.structbuffer.byte.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:5 Function Definition: @main(u1; ( temp 4-component vector of float) +0:5 Function Parameters: +0:5 'pos' ( in uint) +0:? Sequence +0:7 Sequence +0:7 move second child to first child ( temp uint) +0:7 'size' ( temp uint) +0:7 array length ( temp uint) +0:7 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:7 'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:7 Constant: +0:7 0 (const uint) +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 Convert uint to float ( temp float) +0:9 indirect index (layout( row_major std430) buffer uint) +0:9 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:9 'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:9 Constant: +0:9 0 (const uint) +0:9 right-shift ( temp int) +0:9 'pos' ( in uint) +0:9 Constant: +0:9 2 (const int) +0:? Construct vec4 ( temp 4-component vector of float) +0:? Convert uint to float ( temp 2-component vector of float) +0:? Sequence +0:10 move second child to first child ( temp int) +0:10 'byteAddrTemp' ( temp int) +0:10 right-shift ( temp int) +0:10 add ( temp uint) +0:10 'pos' ( in uint) +0:10 Constant: +0:10 4 (const uint) +0:10 Constant: +0:10 2 (const int) +0:? Construct vec2 ( temp 2-component vector of uint) +0:10 indirect index ( temp float) +0:10 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:10 'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:10 Constant: +0:10 0 (const uint) +0:10 'byteAddrTemp' ( temp int) +0:10 indirect index ( temp float) +0:10 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:10 'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:10 Constant: +0:10 0 (const uint) +0:10 add ( temp int) +0:10 'byteAddrTemp' ( temp int) +0:10 Constant: +0:10 1 (const int) +0:10 Constant: +0:10 0.000000 +0:10 Constant: +0:10 0.000000 +0:? Construct vec4 ( temp 4-component vector of float) +0:? Convert uint to float ( temp 3-component vector of float) +0:? Sequence +0:11 move second child to first child ( temp int) +0:11 'byteAddrTemp' ( temp int) +0:11 right-shift ( temp int) +0:11 add ( temp uint) +0:11 'pos' ( in uint) +0:11 Constant: +0:11 8 (const uint) +0:11 Constant: +0:11 2 (const int) +0:? Construct vec3 ( temp 3-component vector of uint) +0:11 indirect index ( temp float) +0:11 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:11 'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:11 Constant: +0:11 0 (const uint) +0:11 'byteAddrTemp' ( temp int) +0:11 indirect index ( temp float) +0:11 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:11 'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:11 Constant: +0:11 0 (const uint) +0:11 add ( temp int) +0:11 'byteAddrTemp' ( temp int) +0:11 Constant: +0:11 1 (const int) +0:11 indirect index ( temp float) +0:11 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:11 'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:11 Constant: +0:11 0 (const uint) +0:11 add ( temp int) +0:11 'byteAddrTemp' ( temp int) +0:11 Constant: +0:11 2 (const int) +0:11 Constant: +0:11 0.000000 +0:? Convert uint to float ( temp 4-component vector of float) +0:? Sequence +0:12 move second child to first child ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 right-shift ( temp int) +0:12 add ( temp uint) +0:12 'pos' ( in uint) +0:12 Constant: +0:12 12 (const uint) +0:12 Constant: +0:12 2 (const int) +0:? Construct vec4 ( temp 4-component vector of uint) +0:12 indirect index ( temp float) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 'byteAddrTemp' ( temp int) +0:12 indirect index ( temp float) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 add ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 Constant: +0:12 1 (const int) +0:12 indirect index ( temp float) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 add ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 Constant: +0:12 2 (const int) +0:12 indirect index ( temp float) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 add ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 Constant: +0:12 3 (const int) +0:5 Function Definition: main( ( temp void) +0:5 Function Parameters: +0:? Sequence +0:5 move second child to first child ( temp uint) +0:? 'pos' ( temp uint) +0:? 'pos' (layout( location=0) 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) +0:? 'pos' ( temp uint) +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) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:5 Function Definition: @main(u1; ( temp 4-component vector of float) +0:5 Function Parameters: +0:5 'pos' ( in uint) +0:? Sequence +0:7 Sequence +0:7 move second child to first child ( temp uint) +0:7 'size' ( temp uint) +0:7 array length ( temp uint) +0:7 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:7 'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:7 Constant: +0:7 0 (const uint) +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 Convert uint to float ( temp float) +0:9 indirect index (layout( row_major std430) buffer uint) +0:9 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:9 'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:9 Constant: +0:9 0 (const uint) +0:9 right-shift ( temp int) +0:9 'pos' ( in uint) +0:9 Constant: +0:9 2 (const int) +0:? Construct vec4 ( temp 4-component vector of float) +0:? Convert uint to float ( temp 2-component vector of float) +0:? Sequence +0:10 move second child to first child ( temp int) +0:10 'byteAddrTemp' ( temp int) +0:10 right-shift ( temp int) +0:10 add ( temp uint) +0:10 'pos' ( in uint) +0:10 Constant: +0:10 4 (const uint) +0:10 Constant: +0:10 2 (const int) +0:? Construct vec2 ( temp 2-component vector of uint) +0:10 indirect index ( temp float) +0:10 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:10 'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:10 Constant: +0:10 0 (const uint) +0:10 'byteAddrTemp' ( temp int) +0:10 indirect index ( temp float) +0:10 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:10 'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:10 Constant: +0:10 0 (const uint) +0:10 add ( temp int) +0:10 'byteAddrTemp' ( temp int) +0:10 Constant: +0:10 1 (const int) +0:10 Constant: +0:10 0.000000 +0:10 Constant: +0:10 0.000000 +0:? Construct vec4 ( temp 4-component vector of float) +0:? Convert uint to float ( temp 3-component vector of float) +0:? Sequence +0:11 move second child to first child ( temp int) +0:11 'byteAddrTemp' ( temp int) +0:11 right-shift ( temp int) +0:11 add ( temp uint) +0:11 'pos' ( in uint) +0:11 Constant: +0:11 8 (const uint) +0:11 Constant: +0:11 2 (const int) +0:? Construct vec3 ( temp 3-component vector of uint) +0:11 indirect index ( temp float) +0:11 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:11 'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:11 Constant: +0:11 0 (const uint) +0:11 'byteAddrTemp' ( temp int) +0:11 indirect index ( temp float) +0:11 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:11 'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:11 Constant: +0:11 0 (const uint) +0:11 add ( temp int) +0:11 'byteAddrTemp' ( temp int) +0:11 Constant: +0:11 1 (const int) +0:11 indirect index ( temp float) +0:11 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:11 'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:11 Constant: +0:11 0 (const uint) +0:11 add ( temp int) +0:11 'byteAddrTemp' ( temp int) +0:11 Constant: +0:11 2 (const int) +0:11 Constant: +0:11 0.000000 +0:? Convert uint to float ( temp 4-component vector of float) +0:? Sequence +0:12 move second child to first child ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 right-shift ( temp int) +0:12 add ( temp uint) +0:12 'pos' ( in uint) +0:12 Constant: +0:12 12 (const uint) +0:12 Constant: +0:12 2 (const int) +0:? Construct vec4 ( temp 4-component vector of uint) +0:12 indirect index ( temp float) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 'byteAddrTemp' ( temp int) +0:12 indirect index ( temp float) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 add ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 Constant: +0:12 1 (const int) +0:12 indirect index ( temp float) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 add ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 Constant: +0:12 2 (const int) +0:12 indirect index ( temp float) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 add ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 Constant: +0:12 3 (const int) +0:5 Function Definition: main( ( temp void) +0:5 Function Parameters: +0:? Sequence +0:5 move second child to first child ( temp uint) +0:? 'pos' ( temp uint) +0:? 'pos' (layout( location=0) 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) +0:? 'pos' ( temp uint) +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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 114 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 107 110 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 12 "@main(u1;" + Name 11 "pos" + Name 14 "size" + Name 16 "sbuf" + MemberName 16(sbuf) 0 "@data" + Name 18 "sbuf" + Name 30 "byteAddrTemp" + Name 53 "byteAddrTemp" + Name 78 "byteAddrTemp" + Name 105 "pos" + Name 107 "pos" + Name 110 "@entryPointOutput" + Name 111 "param" + Decorate 15 ArrayStride 4 + MemberDecorate 16(sbuf) 0 NonWritable + MemberDecorate 16(sbuf) 0 Offset 0 + Decorate 16(sbuf) BufferBlock + Decorate 18(sbuf) DescriptorSet 0 + Decorate 107(pos) Location 0 + Decorate 110(@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) + 15: TypeRuntimeArray 6(int) + 16(sbuf): TypeStruct 15 + 17: TypePointer Uniform 16(sbuf) + 18(sbuf): 17(ptr) Variable Uniform + 19: TypeInt 32 1 + 21: 19(int) Constant 0 + 23: 19(int) Constant 2 + 25: TypePointer Uniform 6(int) + 29: TypePointer Function 19(int) + 32: 6(int) Constant 4 + 39: 19(int) Constant 1 + 43: TypeVector 6(int) 2 + 45: TypeVector 8(float) 2 + 47: 8(float) Constant 0 + 55: 6(int) Constant 8 + 69: TypeVector 6(int) 3 + 71: TypeVector 8(float) 3 + 80: 6(int) Constant 12 + 95: 19(int) Constant 3 + 99: TypeVector 6(int) 4 + 106: TypePointer Input 6(int) + 107(pos): 106(ptr) Variable Input + 109: TypePointer Output 9(fvec4) +110(@entryPointOutput): 109(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 105(pos): 7(ptr) Variable Function + 111(param): 7(ptr) Variable Function + 108: 6(int) Load 107(pos) + Store 105(pos) 108 + 112: 6(int) Load 105(pos) + Store 111(param) 112 + 113: 9(fvec4) FunctionCall 12(@main(u1;) 111(param) + Store 110(@entryPointOutput) 113 + Return + FunctionEnd + 12(@main(u1;): 9(fvec4) Function None 10 + 11(pos): 7(ptr) FunctionParameter + 13: Label + 14(size): 7(ptr) Variable Function +30(byteAddrTemp): 29(ptr) Variable Function +53(byteAddrTemp): 29(ptr) Variable Function +78(byteAddrTemp): 29(ptr) Variable Function + 20: 19(int) ArrayLength 18(sbuf) 0 + Store 14(size) 20 + 22: 6(int) Load 11(pos) + 24: 19(int) ShiftRightLogical 22 23 + 26: 25(ptr) AccessChain 18(sbuf) 21 24 + 27: 6(int) Load 26 + 28: 8(float) ConvertUToF 27 + 31: 6(int) Load 11(pos) + 33: 6(int) IAdd 31 32 + 34: 19(int) ShiftRightLogical 33 23 + Store 30(byteAddrTemp) 34 + 35: 19(int) Load 30(byteAddrTemp) + 36: 25(ptr) AccessChain 18(sbuf) 21 35 + 37: 6(int) Load 36 + 38: 19(int) Load 30(byteAddrTemp) + 40: 19(int) IAdd 38 39 + 41: 25(ptr) AccessChain 18(sbuf) 21 40 + 42: 6(int) Load 41 + 44: 43(ivec2) CompositeConstruct 37 42 + 46: 45(fvec2) ConvertUToF 44 + 48: 8(float) CompositeExtract 46 0 + 49: 8(float) CompositeExtract 46 1 + 50: 9(fvec4) CompositeConstruct 48 49 47 47 + 51: 9(fvec4) CompositeConstruct 28 28 28 28 + 52: 9(fvec4) FAdd 51 50 + 54: 6(int) Load 11(pos) + 56: 6(int) IAdd 54 55 + 57: 19(int) ShiftRightLogical 56 23 + Store 53(byteAddrTemp) 57 + 58: 19(int) Load 53(byteAddrTemp) + 59: 25(ptr) AccessChain 18(sbuf) 21 58 + 60: 6(int) Load 59 + 61: 19(int) Load 53(byteAddrTemp) + 62: 19(int) IAdd 61 39 + 63: 25(ptr) AccessChain 18(sbuf) 21 62 + 64: 6(int) Load 63 + 65: 19(int) Load 53(byteAddrTemp) + 66: 19(int) IAdd 65 23 + 67: 25(ptr) AccessChain 18(sbuf) 21 66 + 68: 6(int) Load 67 + 70: 69(ivec3) CompositeConstruct 60 64 68 + 72: 71(fvec3) ConvertUToF 70 + 73: 8(float) CompositeExtract 72 0 + 74: 8(float) CompositeExtract 72 1 + 75: 8(float) CompositeExtract 72 2 + 76: 9(fvec4) CompositeConstruct 73 74 75 47 + 77: 9(fvec4) FAdd 52 76 + 79: 6(int) Load 11(pos) + 81: 6(int) IAdd 79 80 + 82: 19(int) ShiftRightLogical 81 23 + Store 78(byteAddrTemp) 82 + 83: 19(int) Load 78(byteAddrTemp) + 84: 25(ptr) AccessChain 18(sbuf) 21 83 + 85: 6(int) Load 84 + 86: 19(int) Load 78(byteAddrTemp) + 87: 19(int) IAdd 86 39 + 88: 25(ptr) AccessChain 18(sbuf) 21 87 + 89: 6(int) Load 88 + 90: 19(int) Load 78(byteAddrTemp) + 91: 19(int) IAdd 90 23 + 92: 25(ptr) AccessChain 18(sbuf) 21 91 + 93: 6(int) Load 92 + 94: 19(int) Load 78(byteAddrTemp) + 96: 19(int) IAdd 94 95 + 97: 25(ptr) AccessChain 18(sbuf) 21 96 + 98: 6(int) Load 97 + 100: 99(ivec4) CompositeConstruct 85 89 93 98 + 101: 9(fvec4) ConvertUToF 100 + 102: 9(fvec4) FAdd 77 101 + ReturnValue 102 + FunctionEnd 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 new file mode 100644 index 0000000..f5210c0 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.coherent.frag.out @@ -0,0 +1,308 @@ +hlsl.structbuffer.coherent.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:12 Function Definition: @main(u1; ( temp 4-component vector of float) +0:12 Function Parameters: +0:12 'pos' ( in uint) +0:? Sequence +0:13 move second child to first child ( temp float) +0:13 indirect index (layout( row_major std430) buffer float) +0:13 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of float) +0:13 'sbuf2' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer implicitly-sized array of float @data}) +0:13 Constant: +0:13 0 (const uint) +0:13 add ( temp uint) +0:13 'pos' ( in uint) +0:13 Constant: +0:13 1 (const uint) +0:13 Constant: +0:13 42.000000 +0:17 Sequence +0:17 move second child to first child ( temp uint) +0:17 'size' ( temp uint) +0:17 array length ( temp uint) +0:17 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color, temp bool test}) +0:17 '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:17 Constant: +0:17 0 (const uint) +0:17 move second child to first child ( temp uint) +0:17 'stride' ( temp uint) +0:17 Constant: +0:17 16 (const uint) +0:19 Test condition and select ( temp void) +0:19 Condition +0:19 test: direct index for structure ( temp bool) +0:19 indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color, temp bool test}) +0:19 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color, temp bool test}) +0:19 '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:19 Constant: +0:19 0 (const uint) +0:19 'pos' ( in uint) +0:19 Constant: +0:19 1 (const int) +0:19 true case +0:20 Branch: Return with expression +0:? Construct vec4 ( temp 4-component vector of float) +0:20 add ( temp 3-component vector of float) +0:20 color: direct index for structure ( temp 3-component vector of float) +0:20 indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color, temp bool test}) +0:20 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color, temp bool test}) +0:20 '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:20 Constant: +0:20 0 (const uint) +0:20 'pos' ( in uint) +0:20 Constant: +0:20 0 (const int) +0:20 indirect index (layout( row_major std430) buffer float) +0:20 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of float) +0:20 'sbuf2' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer implicitly-sized array of float @data}) +0:20 Constant: +0:20 0 (const uint) +0:20 'pos' ( in uint) +0:20 Constant: +0:20 0.000000 +0:19 false case +0:22 Branch: Return with expression +0:22 Construct vec4 ( temp 4-component vector of float) +0:22 Convert uint to float ( temp float) +0:22 add ( temp uint) +0:22 'size' ( temp uint) +0:22 'stride' ( temp 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:? 'pos' ( temp uint) +0:? 'pos' (layout( location=0) 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) +0:? 'pos' ( temp uint) +0:? Linker Objects +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) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:12 Function Definition: @main(u1; ( temp 4-component vector of float) +0:12 Function Parameters: +0:12 'pos' ( in uint) +0:? Sequence +0:13 move second child to first child ( temp float) +0:13 indirect index (layout( row_major std430) buffer float) +0:13 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of float) +0:13 'sbuf2' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer implicitly-sized array of float @data}) +0:13 Constant: +0:13 0 (const uint) +0:13 add ( temp uint) +0:13 'pos' ( in uint) +0:13 Constant: +0:13 1 (const uint) +0:13 Constant: +0:13 42.000000 +0:17 Sequence +0:17 move second child to first child ( temp uint) +0:17 'size' ( temp uint) +0:17 array length ( temp uint) +0:17 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color, temp bool test}) +0:17 '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:17 Constant: +0:17 0 (const uint) +0:17 move second child to first child ( temp uint) +0:17 'stride' ( temp uint) +0:17 Constant: +0:17 16 (const uint) +0:19 Test condition and select ( temp void) +0:19 Condition +0:19 test: direct index for structure ( temp bool) +0:19 indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color, temp bool test}) +0:19 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color, temp bool test}) +0:19 '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:19 Constant: +0:19 0 (const uint) +0:19 'pos' ( in uint) +0:19 Constant: +0:19 1 (const int) +0:19 true case +0:20 Branch: Return with expression +0:? Construct vec4 ( temp 4-component vector of float) +0:20 add ( temp 3-component vector of float) +0:20 color: direct index for structure ( temp 3-component vector of float) +0:20 indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color, temp bool test}) +0:20 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color, temp bool test}) +0:20 '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:20 Constant: +0:20 0 (const uint) +0:20 'pos' ( in uint) +0:20 Constant: +0:20 0 (const int) +0:20 indirect index (layout( row_major std430) buffer float) +0:20 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of float) +0:20 'sbuf2' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer implicitly-sized array of float @data}) +0:20 Constant: +0:20 0 (const uint) +0:20 'pos' ( in uint) +0:20 Constant: +0:20 0.000000 +0:19 false case +0:22 Branch: Return with expression +0:22 Construct vec4 ( temp 4-component vector of float) +0:22 Convert uint to float ( temp float) +0:22 add ( temp uint) +0:22 'size' ( temp uint) +0:22 'stride' ( temp 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:? 'pos' ( temp uint) +0:? 'pos' (layout( location=0) 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) +0:? 'pos' ( temp uint) +0:? Linker Objects +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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 78 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 71 74 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 12 "@main(u1;" + Name 11 "pos" + Name 15 "sbuf2" + MemberName 15(sbuf2) 0 "@data" + Name 17 "sbuf2" + Name 26 "size" + Name 28 "sb_t" + MemberName 28(sb_t) 0 "color" + MemberName 28(sb_t) 1 "test" + Name 30 "sbuf" + MemberName 30(sbuf) 0 "@data" + Name 32 "sbuf" + Name 34 "stride" + Name 69 "pos" + Name 71 "pos" + Name 74 "@entryPointOutput" + Name 75 "param" + Decorate 14 ArrayStride 4 + MemberDecorate 15(sbuf2) 0 Coherent + 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) Location 0 + Decorate 74(@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: TypeRuntimeArray 8(float) + 15(sbuf2): TypeStruct 14 + 16: TypePointer Uniform 15(sbuf2) + 17(sbuf2): 16(ptr) Variable Uniform + 18: TypeInt 32 1 + 19: 18(int) Constant 0 + 21: 6(int) Constant 1 + 23: 8(float) Constant 1109917696 + 24: TypePointer Uniform 8(float) + 27: TypeVector 8(float) 3 + 28(sb_t): TypeStruct 27(fvec3) 6(int) + 29: TypeRuntimeArray 28(sb_t) + 30(sbuf): TypeStruct 29 + 31: TypePointer Uniform 30(sbuf) + 32(sbuf): 31(ptr) Variable Uniform + 35: 6(int) Constant 16 + 37: 18(int) Constant 1 + 38: TypePointer Uniform 6(int) + 41: TypeBool + 42: 6(int) Constant 0 + 47: TypePointer Uniform 27(fvec3) + 55: 8(float) Constant 0 + 70: TypePointer Input 6(int) + 71(pos): 70(ptr) Variable Input + 73: TypePointer Output 9(fvec4) +74(@entryPointOutput): 73(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 69(pos): 7(ptr) Variable Function + 75(param): 7(ptr) Variable Function + 72: 6(int) Load 71(pos) + Store 69(pos) 72 + 76: 6(int) Load 69(pos) + Store 75(param) 76 + 77: 9(fvec4) FunctionCall 12(@main(u1;) 75(param) + Store 74(@entryPointOutput) 77 + Return + FunctionEnd + 12(@main(u1;): 9(fvec4) Function None 10 + 11(pos): 7(ptr) FunctionParameter + 13: Label + 26(size): 7(ptr) Variable Function + 34(stride): 7(ptr) Variable Function + 20: 6(int) Load 11(pos) + 22: 6(int) IAdd 20 21 + 25: 24(ptr) AccessChain 17(sbuf2) 19 22 + Store 25 23 + 33: 18(int) ArrayLength 32(sbuf) 0 + Store 26(size) 33 + Store 34(stride) 35 + 36: 6(int) Load 11(pos) + 39: 38(ptr) AccessChain 32(sbuf) 19 36 37 + 40: 6(int) Load 39 + 43: 41(bool) INotEqual 40 42 + SelectionMerge 45 None + BranchConditional 43 44 61 + 44: Label + 46: 6(int) Load 11(pos) + 48: 47(ptr) AccessChain 32(sbuf) 19 46 19 + 49: 27(fvec3) Load 48 + 50: 6(int) Load 11(pos) + 51: 24(ptr) AccessChain 17(sbuf2) 19 50 + 52: 8(float) Load 51 + 53: 27(fvec3) CompositeConstruct 52 52 52 + 54: 27(fvec3) FAdd 49 53 + 56: 8(float) CompositeExtract 54 0 + 57: 8(float) CompositeExtract 54 1 + 58: 8(float) CompositeExtract 54 2 + 59: 9(fvec4) CompositeConstruct 56 57 58 55 + ReturnValue 59 + 61: Label + 62: 6(int) Load 26(size) + 63: 6(int) Load 34(stride) + 64: 6(int) IAdd 62 63 + 65: 8(float) ConvertUToF 64 + 66: 9(fvec4) CompositeConstruct 65 65 65 65 + ReturnValue 66 + 45: Label + 68: 9(fvec4) Undef + ReturnValue 68 + 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 new file mode 100644 index 0000000..8ed27f6 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.fn.frag.out @@ -0,0 +1,266 @@ +hlsl.structbuffer.fn.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:5 Function Definition: get(block--vu4[0]1;u1; ( temp 4-component vector of uint) +0:5 Function Parameters: +0:5 'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data}) +0:5 'bufferOffset' ( in uint) +0:? Sequence +0:6 Branch: Return with expression +0:6 indirect index (layout( row_major std430) buffer 4-component vector of uint) +0:6 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint) +0:6 'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data}) +0:6 Constant: +0:6 0 (const uint) +0:6 'bufferOffset' ( in uint) +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 'bufferOffset' ( in uint) +0:10 'data' ( in 4-component vector of uint) +0:? Sequence +0:11 move second child to first child ( temp 4-component vector of uint) +0:11 indirect index ( buffer 4-component vector of uint) +0:11 @data: direct index for structure ( buffer implicitly-sized array of 4-component vector of uint) +0:11 'sb' (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 'bufferOffset' ( in uint) +0:11 'data' ( in 4-component vector of uint) +0:20 Function Definition: @main(u1; ( temp 4-component vector of float) +0:20 Function Parameters: +0:20 'pos' ( in uint) +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 Constant: +0:21 2 (const uint) +0:21 Function Call: get(block--vu4[0]1;u1; ( temp 4-component vector of uint) +0:21 '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:21 Constant: +0:21 3 (const uint) +0:23 Branch: Return with expression +0:23 Constant: +0:23 0.000000 +0:23 0.000000 +0:23 0.000000 +0:23 0.000000 +0:20 Function Definition: main( ( temp void) +0:20 Function Parameters: +0:? Sequence +0:20 move second child to first child ( temp uint) +0:? 'pos' ( temp uint) +0:? 'pos' (layout( location=0) 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) +0:? 'pos' ( temp uint) +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:? '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) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:5 Function Definition: get(block--vu4[0]1;u1; ( temp 4-component vector of uint) +0:5 Function Parameters: +0:5 'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data}) +0:5 'bufferOffset' ( in uint) +0:? Sequence +0:6 Branch: Return with expression +0:6 indirect index (layout( row_major std430) buffer 4-component vector of uint) +0:6 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint) +0:6 'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data}) +0:6 Constant: +0:6 0 (const uint) +0:6 'bufferOffset' ( in uint) +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 'bufferOffset' ( in uint) +0:10 'data' ( in 4-component vector of uint) +0:? Sequence +0:11 move second child to first child ( temp 4-component vector of uint) +0:11 indirect index ( buffer 4-component vector of uint) +0:11 @data: direct index for structure ( buffer implicitly-sized array of 4-component vector of uint) +0:11 'sb' (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 'bufferOffset' ( in uint) +0:11 'data' ( in 4-component vector of uint) +0:20 Function Definition: @main(u1; ( temp 4-component vector of float) +0:20 Function Parameters: +0:20 'pos' ( in uint) +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 Constant: +0:21 2 (const uint) +0:21 Function Call: get(block--vu4[0]1;u1; ( temp 4-component vector of uint) +0:21 '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:21 Constant: +0:21 3 (const uint) +0:23 Branch: Return with expression +0:23 Constant: +0:23 0.000000 +0:23 0.000000 +0:23 0.000000 +0:23 0.000000 +0:20 Function Definition: main( ( temp void) +0:20 Function Parameters: +0:? Sequence +0:20 move second child to first child ( temp uint) +0:? 'pos' ( temp uint) +0:? 'pos' (layout( location=0) 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) +0:? 'pos' ( temp uint) +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:? '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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 71 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 59 62 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 9 "" + MemberName 9 0 "@data" + Name 15 "get(block--vu4[0]1;u1;" + Name 13 "sb" + 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" + Decorate 8 ArrayStride 16 + MemberDecorate 9 0 NonWritable + MemberDecorate 9 0 Offset 0 + Decorate 9 BufferBlock + 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 + 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) + 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 + 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 + 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 + 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 + 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 + 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 new file mode 100644 index 0000000..3c8b114 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.frag.out @@ -0,0 +1,347 @@ +hlsl.structbuffer.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:12 Function Definition: @main(u1; ( temp 4-component vector of float) +0:12 Function Parameters: +0:12 'pos' ( in uint) +0:? Sequence +0:13 Sequence +0:13 move second child to first child ( temp structure{ temp 3-component vector of float color, temp bool test, temp bool test2}) +0:13 'mydata' ( temp structure{ temp 3-component vector of float color, temp bool test, temp bool test2}) +0:13 indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color, temp bool test, temp bool test2}) +0:13 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color, temp bool test, temp bool test2}) +0:13 '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:13 Constant: +0:13 0 (const uint) +0:13 'pos' ( in uint) +0:17 Sequence +0:17 move second child to first child ( temp uint) +0:17 'size' ( temp uint) +0:17 array length ( temp uint) +0:17 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color, temp bool test, temp bool test2}) +0:17 '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:17 Constant: +0:17 0 (const uint) +0:17 move second child to first child ( temp uint) +0:17 'stride' ( temp uint) +0:17 Constant: +0:17 32 (const uint) +0:19 Test condition and select ( temp void) +0:19 Condition +0:19 test: direct index for structure ( temp bool) +0:19 indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color, temp bool test, temp bool test2}) +0:19 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color, temp bool test, temp bool test2}) +0:19 '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:19 Constant: +0:19 0 (const uint) +0:19 'pos' ( in uint) +0:19 Constant: +0:19 1 (const int) +0:19 true case +0:20 Branch: Return with expression +0:? Construct vec4 ( temp 4-component vector of float) +0:20 add ( temp 3-component vector of float) +0:20 color: direct index for structure ( temp 3-component vector of float) +0:20 indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color, temp bool test, temp bool test2}) +0:20 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color, temp bool test, temp bool test2}) +0:20 '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:20 Constant: +0:20 0 (const uint) +0:20 'pos' ( in uint) +0:20 Constant: +0:20 0 (const int) +0:20 indirect index (layout( row_major std430) buffer float) +0:20 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of float) +0:20 'sbuf2' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of float @data}) +0:20 Constant: +0:20 0 (const uint) +0:20 'pos' ( in uint) +0:20 Constant: +0:20 0.000000 +0:19 false case +0:22 Branch: Return with expression +0:22 Construct vec4 ( temp 4-component vector of float) +0:22 add ( temp float) +0:22 add ( temp float) +0:22 direct index ( temp float) +0:22 color: direct index for structure ( temp 3-component vector of float) +0:22 'mydata' ( temp structure{ temp 3-component vector of float color, temp bool test, temp bool test2}) +0:22 Constant: +0:22 0 (const int) +0:22 Constant: +0:22 0 (const int) +0:22 Convert uint to float ( temp float) +0:22 'size' ( temp uint) +0:22 Convert uint to float ( temp float) +0:22 'stride' ( temp 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:? 'pos' ( temp uint) +0:? 'pos' (layout( location=0) 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) +0:? 'pos' ( temp uint) +0:? Linker Objects +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) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:12 Function Definition: @main(u1; ( temp 4-component vector of float) +0:12 Function Parameters: +0:12 'pos' ( in uint) +0:? Sequence +0:13 Sequence +0:13 move second child to first child ( temp structure{ temp 3-component vector of float color, temp bool test, temp bool test2}) +0:13 'mydata' ( temp structure{ temp 3-component vector of float color, temp bool test, temp bool test2}) +0:13 indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color, temp bool test, temp bool test2}) +0:13 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color, temp bool test, temp bool test2}) +0:13 '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:13 Constant: +0:13 0 (const uint) +0:13 'pos' ( in uint) +0:17 Sequence +0:17 move second child to first child ( temp uint) +0:17 'size' ( temp uint) +0:17 array length ( temp uint) +0:17 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color, temp bool test, temp bool test2}) +0:17 '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:17 Constant: +0:17 0 (const uint) +0:17 move second child to first child ( temp uint) +0:17 'stride' ( temp uint) +0:17 Constant: +0:17 32 (const uint) +0:19 Test condition and select ( temp void) +0:19 Condition +0:19 test: direct index for structure ( temp bool) +0:19 indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color, temp bool test, temp bool test2}) +0:19 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color, temp bool test, temp bool test2}) +0:19 '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:19 Constant: +0:19 0 (const uint) +0:19 'pos' ( in uint) +0:19 Constant: +0:19 1 (const int) +0:19 true case +0:20 Branch: Return with expression +0:? Construct vec4 ( temp 4-component vector of float) +0:20 add ( temp 3-component vector of float) +0:20 color: direct index for structure ( temp 3-component vector of float) +0:20 indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color, temp bool test, temp bool test2}) +0:20 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color, temp bool test, temp bool test2}) +0:20 '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:20 Constant: +0:20 0 (const uint) +0:20 'pos' ( in uint) +0:20 Constant: +0:20 0 (const int) +0:20 indirect index (layout( row_major std430) buffer float) +0:20 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of float) +0:20 'sbuf2' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of float @data}) +0:20 Constant: +0:20 0 (const uint) +0:20 'pos' ( in uint) +0:20 Constant: +0:20 0.000000 +0:19 false case +0:22 Branch: Return with expression +0:22 Construct vec4 ( temp 4-component vector of float) +0:22 add ( temp float) +0:22 add ( temp float) +0:22 direct index ( temp float) +0:22 color: direct index for structure ( temp 3-component vector of float) +0:22 'mydata' ( temp structure{ temp 3-component vector of float color, temp bool test, temp bool test2}) +0:22 Constant: +0:22 0 (const int) +0:22 Constant: +0:22 0 (const int) +0:22 Convert uint to float ( temp float) +0:22 'size' ( temp uint) +0:22 Convert uint to float ( temp float) +0:22 'stride' ( temp 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:? 'pos' ( temp uint) +0:? 'pos' (layout( location=0) 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) +0:? 'pos' ( temp uint) +0:? Linker Objects +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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 94 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 87 90 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 12 "@main(u1;" + Name 11 "pos" + Name 16 "sb_t" + MemberName 16(sb_t) 0 "color" + MemberName 16(sb_t) 1 "test" + MemberName 16(sb_t) 2 "test2" + Name 18 "mydata" + Name 19 "sb_t" + MemberName 19(sb_t) 0 "color" + MemberName 19(sb_t) 1 "test" + MemberName 19(sb_t) 2 "test2" + 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 59 "sbuf2" + Name 85 "pos" + Name 87 "pos" + Name 90 "@entryPointOutput" + Name 91 "param" + MemberDecorate 19(sb_t) 0 NonWritable + 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 + MemberDecorate 21(sbuf) 0 Offset 0 + 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 + 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 8(float) 3 + 15: TypeBool + 16(sb_t): TypeStruct 14(fvec3) 15(bool) 15(bool) + 17: TypePointer Function 16(sb_t) + 19(sb_t): TypeStruct 14(fvec3) 6(int) 6(int) + 20: TypeRuntimeArray 19(sb_t) + 21(sbuf): TypeStruct 20 + 22: TypePointer Uniform 21(sbuf) + 23(sbuf): 22(ptr) Variable Uniform + 24: TypeInt 32 1 + 25: 24(int) Constant 0 + 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 + 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 + 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 + 26: 6(int) Load 11(pos) + 28: 27(ptr) AccessChain 23(sbuf) 25 26 + 29: 19(sb_t) Load 28 + 30: 14(fvec3) CompositeExtract 29 0 + 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 + 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 new file mode 100644 index 0000000..bfe4c39 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.rw.frag.out @@ -0,0 +1,304 @@ +hlsl.structbuffer.rw.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:12 Function Definition: @main(u1; ( temp 4-component vector of float) +0:12 Function Parameters: +0:12 'pos' ( in uint) +0:? Sequence +0:13 move second child to first child ( temp float) +0:13 indirect index (layout( row_major std430) buffer float) +0:13 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of float) +0:13 'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data}) +0:13 Constant: +0:13 0 (const uint) +0:13 add ( temp uint) +0:13 'pos' ( in uint) +0:13 Constant: +0:13 1 (const uint) +0:13 Constant: +0:13 42.000000 +0:17 Sequence +0:17 move second child to first child ( temp uint) +0:17 'size' ( temp uint) +0:17 array length ( temp uint) +0:17 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color, temp bool test}) +0:17 '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:17 Constant: +0:17 0 (const uint) +0:17 move second child to first child ( temp uint) +0:17 'stride' ( temp uint) +0:17 Constant: +0:17 16 (const uint) +0:19 Test condition and select ( temp void) +0:19 Condition +0:19 test: direct index for structure ( temp bool) +0:19 indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color, temp bool test}) +0:19 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color, temp bool test}) +0:19 '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:19 Constant: +0:19 0 (const uint) +0:19 'pos' ( in uint) +0:19 Constant: +0:19 1 (const int) +0:19 true case +0:20 Branch: Return with expression +0:? Construct vec4 ( temp 4-component vector of float) +0:20 add ( temp 3-component vector of float) +0:20 color: direct index for structure ( temp 3-component vector of float) +0:20 indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color, temp bool test}) +0:20 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color, temp bool test}) +0:20 '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:20 Constant: +0:20 0 (const uint) +0:20 'pos' ( in uint) +0:20 Constant: +0:20 0 (const int) +0:20 indirect index (layout( row_major std430) buffer float) +0:20 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of float) +0:20 'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data}) +0:20 Constant: +0:20 0 (const uint) +0:20 'pos' ( in uint) +0:20 Constant: +0:20 0.000000 +0:19 false case +0:22 Branch: Return with expression +0:22 Construct vec4 ( temp 4-component vector of float) +0:22 Convert uint to float ( temp float) +0:22 add ( temp uint) +0:22 'size' ( temp uint) +0:22 'stride' ( temp 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:? 'pos' ( temp uint) +0:? 'pos' (layout( location=0) 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) +0:? 'pos' ( temp uint) +0:? Linker Objects +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) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:12 Function Definition: @main(u1; ( temp 4-component vector of float) +0:12 Function Parameters: +0:12 'pos' ( in uint) +0:? Sequence +0:13 move second child to first child ( temp float) +0:13 indirect index (layout( row_major std430) buffer float) +0:13 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of float) +0:13 'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data}) +0:13 Constant: +0:13 0 (const uint) +0:13 add ( temp uint) +0:13 'pos' ( in uint) +0:13 Constant: +0:13 1 (const uint) +0:13 Constant: +0:13 42.000000 +0:17 Sequence +0:17 move second child to first child ( temp uint) +0:17 'size' ( temp uint) +0:17 array length ( temp uint) +0:17 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color, temp bool test}) +0:17 '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:17 Constant: +0:17 0 (const uint) +0:17 move second child to first child ( temp uint) +0:17 'stride' ( temp uint) +0:17 Constant: +0:17 16 (const uint) +0:19 Test condition and select ( temp void) +0:19 Condition +0:19 test: direct index for structure ( temp bool) +0:19 indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color, temp bool test}) +0:19 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color, temp bool test}) +0:19 '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:19 Constant: +0:19 0 (const uint) +0:19 'pos' ( in uint) +0:19 Constant: +0:19 1 (const int) +0:19 true case +0:20 Branch: Return with expression +0:? Construct vec4 ( temp 4-component vector of float) +0:20 add ( temp 3-component vector of float) +0:20 color: direct index for structure ( temp 3-component vector of float) +0:20 indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color, temp bool test}) +0:20 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color, temp bool test}) +0:20 '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:20 Constant: +0:20 0 (const uint) +0:20 'pos' ( in uint) +0:20 Constant: +0:20 0 (const int) +0:20 indirect index (layout( row_major std430) buffer float) +0:20 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of float) +0:20 'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data}) +0:20 Constant: +0:20 0 (const uint) +0:20 'pos' ( in uint) +0:20 Constant: +0:20 0.000000 +0:19 false case +0:22 Branch: Return with expression +0:22 Construct vec4 ( temp 4-component vector of float) +0:22 Convert uint to float ( temp float) +0:22 add ( temp uint) +0:22 'size' ( temp uint) +0:22 'stride' ( temp 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:? 'pos' ( temp uint) +0:? 'pos' (layout( location=0) 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) +0:? 'pos' ( temp uint) +0:? Linker Objects +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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 78 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 71 74 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 12 "@main(u1;" + Name 11 "pos" + Name 15 "sbuf2" + MemberName 15(sbuf2) 0 "@data" + Name 17 "sbuf2" + Name 26 "size" + Name 28 "sb_t" + MemberName 28(sb_t) 0 "color" + MemberName 28(sb_t) 1 "test" + Name 30 "sbuf" + MemberName 30(sbuf) 0 "@data" + Name 32 "sbuf" + Name 34 "stride" + Name 69 "pos" + Name 71 "pos" + Name 74 "@entryPointOutput" + Name 75 "param" + Decorate 14 ArrayStride 4 + MemberDecorate 15(sbuf2) 0 Offset 0 + Decorate 15(sbuf2) BufferBlock + Decorate 17(sbuf2) DescriptorSet 0 + MemberDecorate 28(sb_t) 0 Offset 0 + MemberDecorate 28(sb_t) 1 Offset 12 + Decorate 29 ArrayStride 16 + MemberDecorate 30(sbuf) 0 Offset 0 + Decorate 30(sbuf) BufferBlock + Decorate 32(sbuf) DescriptorSet 0 + Decorate 71(pos) Location 0 + Decorate 74(@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: TypeRuntimeArray 8(float) + 15(sbuf2): TypeStruct 14 + 16: TypePointer Uniform 15(sbuf2) + 17(sbuf2): 16(ptr) Variable Uniform + 18: TypeInt 32 1 + 19: 18(int) Constant 0 + 21: 6(int) Constant 1 + 23: 8(float) Constant 1109917696 + 24: TypePointer Uniform 8(float) + 27: TypeVector 8(float) 3 + 28(sb_t): TypeStruct 27(fvec3) 6(int) + 29: TypeRuntimeArray 28(sb_t) + 30(sbuf): TypeStruct 29 + 31: TypePointer Uniform 30(sbuf) + 32(sbuf): 31(ptr) Variable Uniform + 35: 6(int) Constant 16 + 37: 18(int) Constant 1 + 38: TypePointer Uniform 6(int) + 41: TypeBool + 42: 6(int) Constant 0 + 47: TypePointer Uniform 27(fvec3) + 55: 8(float) Constant 0 + 70: TypePointer Input 6(int) + 71(pos): 70(ptr) Variable Input + 73: TypePointer Output 9(fvec4) +74(@entryPointOutput): 73(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 69(pos): 7(ptr) Variable Function + 75(param): 7(ptr) Variable Function + 72: 6(int) Load 71(pos) + Store 69(pos) 72 + 76: 6(int) Load 69(pos) + Store 75(param) 76 + 77: 9(fvec4) FunctionCall 12(@main(u1;) 75(param) + Store 74(@entryPointOutput) 77 + Return + FunctionEnd + 12(@main(u1;): 9(fvec4) Function None 10 + 11(pos): 7(ptr) FunctionParameter + 13: Label + 26(size): 7(ptr) Variable Function + 34(stride): 7(ptr) Variable Function + 20: 6(int) Load 11(pos) + 22: 6(int) IAdd 20 21 + 25: 24(ptr) AccessChain 17(sbuf2) 19 22 + Store 25 23 + 33: 18(int) ArrayLength 32(sbuf) 0 + Store 26(size) 33 + Store 34(stride) 35 + 36: 6(int) Load 11(pos) + 39: 38(ptr) AccessChain 32(sbuf) 19 36 37 + 40: 6(int) Load 39 + 43: 41(bool) INotEqual 40 42 + SelectionMerge 45 None + BranchConditional 43 44 61 + 44: Label + 46: 6(int) Load 11(pos) + 48: 47(ptr) AccessChain 32(sbuf) 19 46 19 + 49: 27(fvec3) Load 48 + 50: 6(int) Load 11(pos) + 51: 24(ptr) AccessChain 17(sbuf2) 19 50 + 52: 8(float) Load 51 + 53: 27(fvec3) CompositeConstruct 52 52 52 + 54: 27(fvec3) FAdd 49 53 + 56: 8(float) CompositeExtract 54 0 + 57: 8(float) CompositeExtract 54 1 + 58: 8(float) CompositeExtract 54 2 + 59: 9(fvec4) CompositeConstruct 56 57 58 55 + ReturnValue 59 + 61: Label + 62: 6(int) Load 26(size) + 63: 6(int) Load 34(stride) + 64: 6(int) IAdd 62 63 + 65: 8(float) ConvertUToF 64 + 66: 9(fvec4) CompositeConstruct 65 65 65 65 + ReturnValue 66 + 45: Label + 68: 9(fvec4) Undef + ReturnValue 68 + FunctionEnd 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 new file mode 100644 index 0000000..e99bc43 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out @@ -0,0 +1,1307 @@ +hlsl.structbuffer.rwbyte.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:5 Function Definition: @main(u1; ( temp 4-component vector of float) +0:5 Function Parameters: +0:5 'pos' ( in uint) +0:? Sequence +0:7 Sequence +0:7 move second child to first child ( temp uint) +0:7 'size' ( temp uint) +0:7 array length ( temp uint) +0:7 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:7 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:7 Constant: +0:7 0 (const uint) +0:? Sequence +0:9 move second child to first child ( temp int) +0:9 'byteAddrTemp' ( temp int) +0:9 right-shift ( temp int) +0:9 'pos' ( in uint) +0:9 Constant: +0:9 2 (const int) +0:9 move second child to first child ( temp float) +0:9 indirect index ( temp float) +0:9 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:9 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:9 Constant: +0:9 0 (const uint) +0:9 'byteAddrTemp' ( temp int) +0:9 Convert uint to float ( temp float) +0:9 indirect index (layout( row_major std430) buffer uint) +0:9 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:9 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:9 Constant: +0:9 0 (const uint) +0:9 right-shift ( temp int) +0:9 'pos' ( in uint) +0:9 Constant: +0:9 2 (const int) +0:? Sequence +0:10 move second child to first child ( temp int) +0:10 'byteAddrTemp' ( temp int) +0:10 right-shift ( temp int) +0:10 'pos' ( in uint) +0:10 Constant: +0:10 2 (const int) +0:10 move second child to first child ( temp float) +0:10 indirect index ( temp float) +0:10 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:10 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:10 Constant: +0:10 0 (const uint) +0:10 'byteAddrTemp' ( temp int) +0:10 direct index ( temp float) +0:? Sequence +0:10 move second child to first child ( temp int) +0:10 'byteAddrTemp' ( temp int) +0:10 right-shift ( temp int) +0:10 'pos' ( in uint) +0:10 Constant: +0:10 2 (const int) +0:? Construct vec2 ( temp 2-component vector of uint) +0:10 indirect index ( temp float) +0:10 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:10 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:10 Constant: +0:10 0 (const uint) +0:10 'byteAddrTemp' ( temp int) +0:10 indirect index ( temp float) +0:10 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:10 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:10 Constant: +0:10 0 (const uint) +0:10 add ( temp int) +0:10 'byteAddrTemp' ( temp int) +0:10 Constant: +0:10 1 (const int) +0:10 Constant: +0:10 0 (const int) +0:10 move second child to first child ( temp float) +0:10 indirect index ( temp float) +0:10 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:10 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:10 Constant: +0:10 0 (const uint) +0:10 add ( temp int) +0:10 'byteAddrTemp' ( temp int) +0:10 Constant: +0:10 1 (const int) +0:10 direct index ( temp float) +0:? Sequence +0:10 move second child to first child ( temp int) +0:10 'byteAddrTemp' ( temp int) +0:10 right-shift ( temp int) +0:10 'pos' ( in uint) +0:10 Constant: +0:10 2 (const int) +0:? Construct vec2 ( temp 2-component vector of uint) +0:10 indirect index ( temp float) +0:10 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:10 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:10 Constant: +0:10 0 (const uint) +0:10 'byteAddrTemp' ( temp int) +0:10 indirect index ( temp float) +0:10 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:10 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:10 Constant: +0:10 0 (const uint) +0:10 add ( temp int) +0:10 'byteAddrTemp' ( temp int) +0:10 Constant: +0:10 1 (const int) +0:10 Constant: +0:10 1 (const int) +0:? Sequence +0:11 move second child to first child ( temp int) +0:11 'byteAddrTemp' ( temp int) +0:11 right-shift ( temp int) +0:11 'pos' ( in uint) +0:11 Constant: +0:11 2 (const int) +0:11 move second child to first child ( temp float) +0:11 indirect index ( temp float) +0:11 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:11 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:11 Constant: +0:11 0 (const uint) +0:11 'byteAddrTemp' ( temp int) +0:11 direct index ( temp float) +0:? Sequence +0:11 move second child to first child ( temp int) +0:11 'byteAddrTemp' ( temp int) +0:11 right-shift ( temp int) +0:11 'pos' ( in uint) +0:11 Constant: +0:11 2 (const int) +0:? Construct vec3 ( temp 3-component vector of uint) +0:11 indirect index ( temp float) +0:11 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:11 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:11 Constant: +0:11 0 (const uint) +0:11 'byteAddrTemp' ( temp int) +0:11 indirect index ( temp float) +0:11 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:11 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:11 Constant: +0:11 0 (const uint) +0:11 add ( temp int) +0:11 'byteAddrTemp' ( temp int) +0:11 Constant: +0:11 1 (const int) +0:11 indirect index ( temp float) +0:11 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:11 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:11 Constant: +0:11 0 (const uint) +0:11 add ( temp int) +0:11 'byteAddrTemp' ( temp int) +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 indirect index ( temp float) +0:11 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:11 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:11 Constant: +0:11 0 (const uint) +0:11 add ( temp int) +0:11 'byteAddrTemp' ( temp int) +0:11 Constant: +0:11 1 (const int) +0:11 direct index ( temp float) +0:? Sequence +0:11 move second child to first child ( temp int) +0:11 'byteAddrTemp' ( temp int) +0:11 right-shift ( temp int) +0:11 'pos' ( in uint) +0:11 Constant: +0:11 2 (const int) +0:? Construct vec3 ( temp 3-component vector of uint) +0:11 indirect index ( temp float) +0:11 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:11 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:11 Constant: +0:11 0 (const uint) +0:11 'byteAddrTemp' ( temp int) +0:11 indirect index ( temp float) +0:11 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:11 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:11 Constant: +0:11 0 (const uint) +0:11 add ( temp int) +0:11 'byteAddrTemp' ( temp int) +0:11 Constant: +0:11 1 (const int) +0:11 indirect index ( temp float) +0:11 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:11 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:11 Constant: +0:11 0 (const uint) +0:11 add ( temp int) +0:11 'byteAddrTemp' ( temp int) +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 indirect index ( temp float) +0:11 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:11 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:11 Constant: +0:11 0 (const uint) +0:11 add ( temp int) +0:11 'byteAddrTemp' ( temp int) +0:11 Constant: +0:11 2 (const int) +0:11 direct index ( temp float) +0:? Sequence +0:11 move second child to first child ( temp int) +0:11 'byteAddrTemp' ( temp int) +0:11 right-shift ( temp int) +0:11 'pos' ( in uint) +0:11 Constant: +0:11 2 (const int) +0:? Construct vec3 ( temp 3-component vector of uint) +0:11 indirect index ( temp float) +0:11 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:11 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:11 Constant: +0:11 0 (const uint) +0:11 'byteAddrTemp' ( temp int) +0:11 indirect index ( temp float) +0:11 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:11 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:11 Constant: +0:11 0 (const uint) +0:11 add ( temp int) +0:11 'byteAddrTemp' ( temp int) +0:11 Constant: +0:11 1 (const int) +0:11 indirect index ( temp float) +0:11 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:11 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:11 Constant: +0:11 0 (const uint) +0:11 add ( temp int) +0:11 'byteAddrTemp' ( temp int) +0:11 Constant: +0:11 2 (const int) +0:11 Constant: +0:11 2 (const int) +0:? Sequence +0:12 move second child to first child ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 right-shift ( temp int) +0:12 'pos' ( in uint) +0:12 Constant: +0:12 2 (const int) +0:12 move second child to first child ( temp float) +0:12 indirect index ( temp float) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 'byteAddrTemp' ( temp int) +0:12 direct index ( temp float) +0:? Sequence +0:12 move second child to first child ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 right-shift ( temp int) +0:12 'pos' ( in uint) +0:12 Constant: +0:12 2 (const int) +0:? Construct vec4 ( temp 4-component vector of uint) +0:12 indirect index ( temp float) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 'byteAddrTemp' ( temp int) +0:12 indirect index ( temp float) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 add ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 Constant: +0:12 1 (const int) +0:12 indirect index ( temp float) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 add ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 Constant: +0:12 2 (const int) +0:12 indirect index ( temp float) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 add ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 Constant: +0:12 3 (const int) +0:12 Constant: +0:12 0 (const int) +0:12 move second child to first child ( temp float) +0:12 indirect index ( temp float) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 add ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 Constant: +0:12 1 (const int) +0:12 direct index ( temp float) +0:? Sequence +0:12 move second child to first child ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 right-shift ( temp int) +0:12 'pos' ( in uint) +0:12 Constant: +0:12 2 (const int) +0:? Construct vec4 ( temp 4-component vector of uint) +0:12 indirect index ( temp float) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 'byteAddrTemp' ( temp int) +0:12 indirect index ( temp float) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 add ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 Constant: +0:12 1 (const int) +0:12 indirect index ( temp float) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 add ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 Constant: +0:12 2 (const int) +0:12 indirect index ( temp float) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 add ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 Constant: +0:12 3 (const int) +0:12 Constant: +0:12 1 (const int) +0:12 move second child to first child ( temp float) +0:12 indirect index ( temp float) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 add ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 Constant: +0:12 2 (const int) +0:12 direct index ( temp float) +0:? Sequence +0:12 move second child to first child ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 right-shift ( temp int) +0:12 'pos' ( in uint) +0:12 Constant: +0:12 2 (const int) +0:? Construct vec4 ( temp 4-component vector of uint) +0:12 indirect index ( temp float) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 'byteAddrTemp' ( temp int) +0:12 indirect index ( temp float) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 add ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 Constant: +0:12 1 (const int) +0:12 indirect index ( temp float) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 add ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 Constant: +0:12 2 (const int) +0:12 indirect index ( temp float) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 add ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 Constant: +0:12 3 (const int) +0:12 Constant: +0:12 2 (const int) +0:12 move second child to first child ( temp float) +0:12 indirect index ( temp float) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 add ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 Constant: +0:12 3 (const int) +0:12 direct index ( temp float) +0:? Sequence +0:12 move second child to first child ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 right-shift ( temp int) +0:12 'pos' ( in uint) +0:12 Constant: +0:12 2 (const int) +0:? Construct vec4 ( temp 4-component vector of uint) +0:12 indirect index ( temp float) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 'byteAddrTemp' ( temp int) +0:12 indirect index ( temp float) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 add ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 Constant: +0:12 1 (const int) +0:12 indirect index ( temp float) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 add ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 Constant: +0:12 2 (const int) +0:12 indirect index ( temp float) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 add ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 Constant: +0:12 3 (const int) +0:12 Constant: +0:12 3 (const int) +0:14 Branch: Return with expression +0:14 Construct vec4 ( temp 4-component vector of float) +0:14 Convert uint to float ( temp float) +0:14 indirect index (layout( row_major std430) buffer uint) +0:14 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:14 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:14 Constant: +0:14 0 (const uint) +0:14 right-shift ( temp int) +0:14 'pos' ( in uint) +0:14 Constant: +0:14 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 uint) +0:? 'pos' ( temp uint) +0:? 'pos' (layout( location=0) 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) +0:? 'pos' ( temp uint) +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) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:5 Function Definition: @main(u1; ( temp 4-component vector of float) +0:5 Function Parameters: +0:5 'pos' ( in uint) +0:? Sequence +0:7 Sequence +0:7 move second child to first child ( temp uint) +0:7 'size' ( temp uint) +0:7 array length ( temp uint) +0:7 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:7 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:7 Constant: +0:7 0 (const uint) +0:? Sequence +0:9 move second child to first child ( temp int) +0:9 'byteAddrTemp' ( temp int) +0:9 right-shift ( temp int) +0:9 'pos' ( in uint) +0:9 Constant: +0:9 2 (const int) +0:9 move second child to first child ( temp float) +0:9 indirect index ( temp float) +0:9 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:9 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:9 Constant: +0:9 0 (const uint) +0:9 'byteAddrTemp' ( temp int) +0:9 Convert uint to float ( temp float) +0:9 indirect index (layout( row_major std430) buffer uint) +0:9 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:9 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:9 Constant: +0:9 0 (const uint) +0:9 right-shift ( temp int) +0:9 'pos' ( in uint) +0:9 Constant: +0:9 2 (const int) +0:? Sequence +0:10 move second child to first child ( temp int) +0:10 'byteAddrTemp' ( temp int) +0:10 right-shift ( temp int) +0:10 'pos' ( in uint) +0:10 Constant: +0:10 2 (const int) +0:10 move second child to first child ( temp float) +0:10 indirect index ( temp float) +0:10 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:10 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:10 Constant: +0:10 0 (const uint) +0:10 'byteAddrTemp' ( temp int) +0:10 direct index ( temp float) +0:? Sequence +0:10 move second child to first child ( temp int) +0:10 'byteAddrTemp' ( temp int) +0:10 right-shift ( temp int) +0:10 'pos' ( in uint) +0:10 Constant: +0:10 2 (const int) +0:? Construct vec2 ( temp 2-component vector of uint) +0:10 indirect index ( temp float) +0:10 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:10 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:10 Constant: +0:10 0 (const uint) +0:10 'byteAddrTemp' ( temp int) +0:10 indirect index ( temp float) +0:10 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:10 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:10 Constant: +0:10 0 (const uint) +0:10 add ( temp int) +0:10 'byteAddrTemp' ( temp int) +0:10 Constant: +0:10 1 (const int) +0:10 Constant: +0:10 0 (const int) +0:10 move second child to first child ( temp float) +0:10 indirect index ( temp float) +0:10 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:10 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:10 Constant: +0:10 0 (const uint) +0:10 add ( temp int) +0:10 'byteAddrTemp' ( temp int) +0:10 Constant: +0:10 1 (const int) +0:10 direct index ( temp float) +0:? Sequence +0:10 move second child to first child ( temp int) +0:10 'byteAddrTemp' ( temp int) +0:10 right-shift ( temp int) +0:10 'pos' ( in uint) +0:10 Constant: +0:10 2 (const int) +0:? Construct vec2 ( temp 2-component vector of uint) +0:10 indirect index ( temp float) +0:10 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:10 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:10 Constant: +0:10 0 (const uint) +0:10 'byteAddrTemp' ( temp int) +0:10 indirect index ( temp float) +0:10 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:10 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:10 Constant: +0:10 0 (const uint) +0:10 add ( temp int) +0:10 'byteAddrTemp' ( temp int) +0:10 Constant: +0:10 1 (const int) +0:10 Constant: +0:10 1 (const int) +0:? Sequence +0:11 move second child to first child ( temp int) +0:11 'byteAddrTemp' ( temp int) +0:11 right-shift ( temp int) +0:11 'pos' ( in uint) +0:11 Constant: +0:11 2 (const int) +0:11 move second child to first child ( temp float) +0:11 indirect index ( temp float) +0:11 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:11 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:11 Constant: +0:11 0 (const uint) +0:11 'byteAddrTemp' ( temp int) +0:11 direct index ( temp float) +0:? Sequence +0:11 move second child to first child ( temp int) +0:11 'byteAddrTemp' ( temp int) +0:11 right-shift ( temp int) +0:11 'pos' ( in uint) +0:11 Constant: +0:11 2 (const int) +0:? Construct vec3 ( temp 3-component vector of uint) +0:11 indirect index ( temp float) +0:11 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:11 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:11 Constant: +0:11 0 (const uint) +0:11 'byteAddrTemp' ( temp int) +0:11 indirect index ( temp float) +0:11 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:11 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:11 Constant: +0:11 0 (const uint) +0:11 add ( temp int) +0:11 'byteAddrTemp' ( temp int) +0:11 Constant: +0:11 1 (const int) +0:11 indirect index ( temp float) +0:11 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:11 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:11 Constant: +0:11 0 (const uint) +0:11 add ( temp int) +0:11 'byteAddrTemp' ( temp int) +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 indirect index ( temp float) +0:11 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:11 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:11 Constant: +0:11 0 (const uint) +0:11 add ( temp int) +0:11 'byteAddrTemp' ( temp int) +0:11 Constant: +0:11 1 (const int) +0:11 direct index ( temp float) +0:? Sequence +0:11 move second child to first child ( temp int) +0:11 'byteAddrTemp' ( temp int) +0:11 right-shift ( temp int) +0:11 'pos' ( in uint) +0:11 Constant: +0:11 2 (const int) +0:? Construct vec3 ( temp 3-component vector of uint) +0:11 indirect index ( temp float) +0:11 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:11 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:11 Constant: +0:11 0 (const uint) +0:11 'byteAddrTemp' ( temp int) +0:11 indirect index ( temp float) +0:11 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:11 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:11 Constant: +0:11 0 (const uint) +0:11 add ( temp int) +0:11 'byteAddrTemp' ( temp int) +0:11 Constant: +0:11 1 (const int) +0:11 indirect index ( temp float) +0:11 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:11 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:11 Constant: +0:11 0 (const uint) +0:11 add ( temp int) +0:11 'byteAddrTemp' ( temp int) +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 indirect index ( temp float) +0:11 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:11 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:11 Constant: +0:11 0 (const uint) +0:11 add ( temp int) +0:11 'byteAddrTemp' ( temp int) +0:11 Constant: +0:11 2 (const int) +0:11 direct index ( temp float) +0:? Sequence +0:11 move second child to first child ( temp int) +0:11 'byteAddrTemp' ( temp int) +0:11 right-shift ( temp int) +0:11 'pos' ( in uint) +0:11 Constant: +0:11 2 (const int) +0:? Construct vec3 ( temp 3-component vector of uint) +0:11 indirect index ( temp float) +0:11 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:11 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:11 Constant: +0:11 0 (const uint) +0:11 'byteAddrTemp' ( temp int) +0:11 indirect index ( temp float) +0:11 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:11 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:11 Constant: +0:11 0 (const uint) +0:11 add ( temp int) +0:11 'byteAddrTemp' ( temp int) +0:11 Constant: +0:11 1 (const int) +0:11 indirect index ( temp float) +0:11 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:11 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:11 Constant: +0:11 0 (const uint) +0:11 add ( temp int) +0:11 'byteAddrTemp' ( temp int) +0:11 Constant: +0:11 2 (const int) +0:11 Constant: +0:11 2 (const int) +0:? Sequence +0:12 move second child to first child ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 right-shift ( temp int) +0:12 'pos' ( in uint) +0:12 Constant: +0:12 2 (const int) +0:12 move second child to first child ( temp float) +0:12 indirect index ( temp float) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 'byteAddrTemp' ( temp int) +0:12 direct index ( temp float) +0:? Sequence +0:12 move second child to first child ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 right-shift ( temp int) +0:12 'pos' ( in uint) +0:12 Constant: +0:12 2 (const int) +0:? Construct vec4 ( temp 4-component vector of uint) +0:12 indirect index ( temp float) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 'byteAddrTemp' ( temp int) +0:12 indirect index ( temp float) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 add ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 Constant: +0:12 1 (const int) +0:12 indirect index ( temp float) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 add ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 Constant: +0:12 2 (const int) +0:12 indirect index ( temp float) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 add ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 Constant: +0:12 3 (const int) +0:12 Constant: +0:12 0 (const int) +0:12 move second child to first child ( temp float) +0:12 indirect index ( temp float) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 add ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 Constant: +0:12 1 (const int) +0:12 direct index ( temp float) +0:? Sequence +0:12 move second child to first child ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 right-shift ( temp int) +0:12 'pos' ( in uint) +0:12 Constant: +0:12 2 (const int) +0:? Construct vec4 ( temp 4-component vector of uint) +0:12 indirect index ( temp float) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 'byteAddrTemp' ( temp int) +0:12 indirect index ( temp float) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 add ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 Constant: +0:12 1 (const int) +0:12 indirect index ( temp float) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 add ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 Constant: +0:12 2 (const int) +0:12 indirect index ( temp float) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 add ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 Constant: +0:12 3 (const int) +0:12 Constant: +0:12 1 (const int) +0:12 move second child to first child ( temp float) +0:12 indirect index ( temp float) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 add ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 Constant: +0:12 2 (const int) +0:12 direct index ( temp float) +0:? Sequence +0:12 move second child to first child ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 right-shift ( temp int) +0:12 'pos' ( in uint) +0:12 Constant: +0:12 2 (const int) +0:? Construct vec4 ( temp 4-component vector of uint) +0:12 indirect index ( temp float) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 'byteAddrTemp' ( temp int) +0:12 indirect index ( temp float) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 add ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 Constant: +0:12 1 (const int) +0:12 indirect index ( temp float) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 add ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 Constant: +0:12 2 (const int) +0:12 indirect index ( temp float) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 add ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 Constant: +0:12 3 (const int) +0:12 Constant: +0:12 2 (const int) +0:12 move second child to first child ( temp float) +0:12 indirect index ( temp float) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 add ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 Constant: +0:12 3 (const int) +0:12 direct index ( temp float) +0:? Sequence +0:12 move second child to first child ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 right-shift ( temp int) +0:12 'pos' ( in uint) +0:12 Constant: +0:12 2 (const int) +0:? Construct vec4 ( temp 4-component vector of uint) +0:12 indirect index ( temp float) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 'byteAddrTemp' ( temp int) +0:12 indirect index ( temp float) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 add ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 Constant: +0:12 1 (const int) +0:12 indirect index ( temp float) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 add ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 Constant: +0:12 2 (const int) +0:12 indirect index ( temp float) +0:12 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:12 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 add ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 Constant: +0:12 3 (const int) +0:12 Constant: +0:12 3 (const int) +0:14 Branch: Return with expression +0:14 Construct vec4 ( temp 4-component vector of float) +0:14 Convert uint to float ( temp float) +0:14 indirect index (layout( row_major std430) buffer uint) +0:14 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint) +0:14 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data}) +0:14 Constant: +0:14 0 (const uint) +0:14 right-shift ( temp int) +0:14 'pos' ( in uint) +0:14 Constant: +0:14 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 uint) +0:? 'pos' ( temp uint) +0:? 'pos' (layout( location=0) 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) +0:? 'pos' ( temp uint) +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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 240 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 233 236 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 12 "@main(u1;" + Name 11 "pos" + Name 14 "size" + Name 16 "sbuf" + MemberName 16(sbuf) 0 "@data" + Name 18 "sbuf" + Name 22 "byteAddrTemp" + Name 35 "byteAddrTemp" + Name 39 "byteAddrTemp" + Name 70 "byteAddrTemp" + Name 74 "byteAddrTemp" + Name 129 "byteAddrTemp" + Name 133 "byteAddrTemp" + Name 231 "pos" + Name 233 "pos" + Name 236 "@entryPointOutput" + Name 237 "param" + Decorate 15 ArrayStride 4 + MemberDecorate 16(sbuf) 0 Offset 0 + Decorate 16(sbuf) BufferBlock + Decorate 18(sbuf) DescriptorSet 0 + Decorate 233(pos) Location 0 + Decorate 236(@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) + 15: TypeRuntimeArray 6(int) + 16(sbuf): TypeStruct 15 + 17: TypePointer Uniform 16(sbuf) + 18(sbuf): 17(ptr) Variable Uniform + 19: TypeInt 32 1 + 21: TypePointer Function 19(int) + 24: 19(int) Constant 2 + 26: 19(int) Constant 0 + 30: TypePointer Uniform 6(int) + 46: 19(int) Constant 1 + 50: TypeVector 6(int) 2 + 52: 6(int) Constant 0 + 67: 6(int) Constant 1 + 88: TypeVector 6(int) 3 + 126: 6(int) Constant 2 + 148: 19(int) Constant 3 + 152: TypeVector 6(int) 4 + 220: 6(int) Constant 3 + 232: TypePointer Input 6(int) + 233(pos): 232(ptr) Variable Input + 235: TypePointer Output 9(fvec4) +236(@entryPointOutput): 235(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 231(pos): 7(ptr) Variable Function + 237(param): 7(ptr) Variable Function + 234: 6(int) Load 233(pos) + Store 231(pos) 234 + 238: 6(int) Load 231(pos) + Store 237(param) 238 + 239: 9(fvec4) FunctionCall 12(@main(u1;) 237(param) + Store 236(@entryPointOutput) 239 + Return + FunctionEnd + 12(@main(u1;): 9(fvec4) Function None 10 + 11(pos): 7(ptr) FunctionParameter + 13: Label + 14(size): 7(ptr) Variable Function +22(byteAddrTemp): 21(ptr) Variable Function +35(byteAddrTemp): 21(ptr) Variable Function +39(byteAddrTemp): 21(ptr) Variable Function +70(byteAddrTemp): 21(ptr) Variable Function +74(byteAddrTemp): 21(ptr) Variable Function +129(byteAddrTemp): 21(ptr) Variable Function +133(byteAddrTemp): 21(ptr) Variable Function + 20: 19(int) ArrayLength 18(sbuf) 0 + Store 14(size) 20 + 23: 6(int) Load 11(pos) + 25: 19(int) ShiftRightLogical 23 24 + Store 22(byteAddrTemp) 25 + 27: 19(int) Load 22(byteAddrTemp) + 28: 6(int) Load 11(pos) + 29: 19(int) ShiftRightLogical 28 24 + 31: 30(ptr) AccessChain 18(sbuf) 26 29 + 32: 6(int) Load 31 + 33: 8(float) ConvertUToF 32 + 34: 30(ptr) AccessChain 18(sbuf) 26 27 + Store 34 33 + 36: 6(int) Load 11(pos) + 37: 19(int) ShiftRightLogical 36 24 + Store 35(byteAddrTemp) 37 + 38: 19(int) Load 35(byteAddrTemp) + 40: 6(int) Load 11(pos) + 41: 19(int) ShiftRightLogical 40 24 + Store 39(byteAddrTemp) 41 + 42: 19(int) Load 39(byteAddrTemp) + 43: 30(ptr) AccessChain 18(sbuf) 26 42 + 44: 6(int) Load 43 + 45: 19(int) Load 39(byteAddrTemp) + 47: 19(int) IAdd 45 46 + 48: 30(ptr) AccessChain 18(sbuf) 26 47 + 49: 6(int) Load 48 + 51: 50(ivec2) CompositeConstruct 44 49 + 53: 6(int) CompositeExtract 51 0 + 54: 30(ptr) AccessChain 18(sbuf) 26 38 + Store 54 53 + 55: 19(int) Load 35(byteAddrTemp) + 56: 19(int) IAdd 55 46 + 57: 6(int) Load 11(pos) + 58: 19(int) ShiftRightLogical 57 24 + Store 39(byteAddrTemp) 58 + 59: 19(int) Load 39(byteAddrTemp) + 60: 30(ptr) AccessChain 18(sbuf) 26 59 + 61: 6(int) Load 60 + 62: 19(int) Load 39(byteAddrTemp) + 63: 19(int) IAdd 62 46 + 64: 30(ptr) AccessChain 18(sbuf) 26 63 + 65: 6(int) Load 64 + 66: 50(ivec2) CompositeConstruct 61 65 + 68: 6(int) CompositeExtract 66 1 + 69: 30(ptr) AccessChain 18(sbuf) 26 56 + Store 69 68 + 71: 6(int) Load 11(pos) + 72: 19(int) ShiftRightLogical 71 24 + Store 70(byteAddrTemp) 72 + 73: 19(int) Load 70(byteAddrTemp) + 75: 6(int) Load 11(pos) + 76: 19(int) ShiftRightLogical 75 24 + Store 74(byteAddrTemp) 76 + 77: 19(int) Load 74(byteAddrTemp) + 78: 30(ptr) AccessChain 18(sbuf) 26 77 + 79: 6(int) Load 78 + 80: 19(int) Load 74(byteAddrTemp) + 81: 19(int) IAdd 80 46 + 82: 30(ptr) AccessChain 18(sbuf) 26 81 + 83: 6(int) Load 82 + 84: 19(int) Load 74(byteAddrTemp) + 85: 19(int) IAdd 84 24 + 86: 30(ptr) AccessChain 18(sbuf) 26 85 + 87: 6(int) Load 86 + 89: 88(ivec3) CompositeConstruct 79 83 87 + 90: 6(int) CompositeExtract 89 0 + 91: 30(ptr) AccessChain 18(sbuf) 26 73 + Store 91 90 + 92: 19(int) Load 70(byteAddrTemp) + 93: 19(int) IAdd 92 46 + 94: 6(int) Load 11(pos) + 95: 19(int) ShiftRightLogical 94 24 + Store 74(byteAddrTemp) 95 + 96: 19(int) Load 74(byteAddrTemp) + 97: 30(ptr) AccessChain 18(sbuf) 26 96 + 98: 6(int) Load 97 + 99: 19(int) Load 74(byteAddrTemp) + 100: 19(int) IAdd 99 46 + 101: 30(ptr) AccessChain 18(sbuf) 26 100 + 102: 6(int) Load 101 + 103: 19(int) Load 74(byteAddrTemp) + 104: 19(int) IAdd 103 24 + 105: 30(ptr) AccessChain 18(sbuf) 26 104 + 106: 6(int) Load 105 + 107: 88(ivec3) CompositeConstruct 98 102 106 + 108: 6(int) CompositeExtract 107 1 + 109: 30(ptr) AccessChain 18(sbuf) 26 93 + Store 109 108 + 110: 19(int) Load 70(byteAddrTemp) + 111: 19(int) IAdd 110 24 + 112: 6(int) Load 11(pos) + 113: 19(int) ShiftRightLogical 112 24 + Store 74(byteAddrTemp) 113 + 114: 19(int) Load 74(byteAddrTemp) + 115: 30(ptr) AccessChain 18(sbuf) 26 114 + 116: 6(int) Load 115 + 117: 19(int) Load 74(byteAddrTemp) + 118: 19(int) IAdd 117 46 + 119: 30(ptr) AccessChain 18(sbuf) 26 118 + 120: 6(int) Load 119 + 121: 19(int) Load 74(byteAddrTemp) + 122: 19(int) IAdd 121 24 + 123: 30(ptr) AccessChain 18(sbuf) 26 122 + 124: 6(int) Load 123 + 125: 88(ivec3) CompositeConstruct 116 120 124 + 127: 6(int) CompositeExtract 125 2 + 128: 30(ptr) AccessChain 18(sbuf) 26 111 + Store 128 127 + 130: 6(int) Load 11(pos) + 131: 19(int) ShiftRightLogical 130 24 + Store 129(byteAddrTemp) 131 + 132: 19(int) Load 129(byteAddrTemp) + 134: 6(int) Load 11(pos) + 135: 19(int) ShiftRightLogical 134 24 + Store 133(byteAddrTemp) 135 + 136: 19(int) Load 133(byteAddrTemp) + 137: 30(ptr) AccessChain 18(sbuf) 26 136 + 138: 6(int) Load 137 + 139: 19(int) Load 133(byteAddrTemp) + 140: 19(int) IAdd 139 46 + 141: 30(ptr) AccessChain 18(sbuf) 26 140 + 142: 6(int) Load 141 + 143: 19(int) Load 133(byteAddrTemp) + 144: 19(int) IAdd 143 24 + 145: 30(ptr) AccessChain 18(sbuf) 26 144 + 146: 6(int) Load 145 + 147: 19(int) Load 133(byteAddrTemp) + 149: 19(int) IAdd 147 148 + 150: 30(ptr) AccessChain 18(sbuf) 26 149 + 151: 6(int) Load 150 + 153: 152(ivec4) CompositeConstruct 138 142 146 151 + 154: 6(int) CompositeExtract 153 0 + 155: 30(ptr) AccessChain 18(sbuf) 26 132 + Store 155 154 + 156: 19(int) Load 129(byteAddrTemp) + 157: 19(int) IAdd 156 46 + 158: 6(int) Load 11(pos) + 159: 19(int) ShiftRightLogical 158 24 + Store 133(byteAddrTemp) 159 + 160: 19(int) Load 133(byteAddrTemp) + 161: 30(ptr) AccessChain 18(sbuf) 26 160 + 162: 6(int) Load 161 + 163: 19(int) Load 133(byteAddrTemp) + 164: 19(int) IAdd 163 46 + 165: 30(ptr) AccessChain 18(sbuf) 26 164 + 166: 6(int) Load 165 + 167: 19(int) Load 133(byteAddrTemp) + 168: 19(int) IAdd 167 24 + 169: 30(ptr) AccessChain 18(sbuf) 26 168 + 170: 6(int) Load 169 + 171: 19(int) Load 133(byteAddrTemp) + 172: 19(int) IAdd 171 148 + 173: 30(ptr) AccessChain 18(sbuf) 26 172 + 174: 6(int) Load 173 + 175: 152(ivec4) CompositeConstruct 162 166 170 174 + 176: 6(int) CompositeExtract 175 1 + 177: 30(ptr) AccessChain 18(sbuf) 26 157 + Store 177 176 + 178: 19(int) Load 129(byteAddrTemp) + 179: 19(int) IAdd 178 24 + 180: 6(int) Load 11(pos) + 181: 19(int) ShiftRightLogical 180 24 + Store 133(byteAddrTemp) 181 + 182: 19(int) Load 133(byteAddrTemp) + 183: 30(ptr) AccessChain 18(sbuf) 26 182 + 184: 6(int) Load 183 + 185: 19(int) Load 133(byteAddrTemp) + 186: 19(int) IAdd 185 46 + 187: 30(ptr) AccessChain 18(sbuf) 26 186 + 188: 6(int) Load 187 + 189: 19(int) Load 133(byteAddrTemp) + 190: 19(int) IAdd 189 24 + 191: 30(ptr) AccessChain 18(sbuf) 26 190 + 192: 6(int) Load 191 + 193: 19(int) Load 133(byteAddrTemp) + 194: 19(int) IAdd 193 148 + 195: 30(ptr) AccessChain 18(sbuf) 26 194 + 196: 6(int) Load 195 + 197: 152(ivec4) CompositeConstruct 184 188 192 196 + 198: 6(int) CompositeExtract 197 2 + 199: 30(ptr) AccessChain 18(sbuf) 26 179 + Store 199 198 + 200: 19(int) Load 129(byteAddrTemp) + 201: 19(int) IAdd 200 148 + 202: 6(int) Load 11(pos) + 203: 19(int) ShiftRightLogical 202 24 + Store 133(byteAddrTemp) 203 + 204: 19(int) Load 133(byteAddrTemp) + 205: 30(ptr) AccessChain 18(sbuf) 26 204 + 206: 6(int) Load 205 + 207: 19(int) Load 133(byteAddrTemp) + 208: 19(int) IAdd 207 46 + 209: 30(ptr) AccessChain 18(sbuf) 26 208 + 210: 6(int) Load 209 + 211: 19(int) Load 133(byteAddrTemp) + 212: 19(int) IAdd 211 24 + 213: 30(ptr) AccessChain 18(sbuf) 26 212 + 214: 6(int) Load 213 + 215: 19(int) Load 133(byteAddrTemp) + 216: 19(int) IAdd 215 148 + 217: 30(ptr) AccessChain 18(sbuf) 26 216 + 218: 6(int) Load 217 + 219: 152(ivec4) CompositeConstruct 206 210 214 218 + 221: 6(int) CompositeExtract 219 3 + 222: 30(ptr) AccessChain 18(sbuf) 26 201 + Store 222 221 + 223: 6(int) Load 11(pos) + 224: 19(int) ShiftRightLogical 223 24 + 225: 30(ptr) AccessChain 18(sbuf) 26 224 + 226: 6(int) Load 225 + 227: 8(float) ConvertUToF 226 + 228: 9(fvec4) CompositeConstruct 227 227 227 227 + ReturnValue 228 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structin.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structin.vert.out new file mode 100755 index 0000000..c621941 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structin.vert.out @@ -0,0 +1,412 @@ +hlsl.structin.vert +Shader version: 450 +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 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 '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 Constant: +0:11 2 (const int) +0:11 add ( temp 4-component vector of float) +0:11 add ( temp 4-component vector of float) +0:11 add ( temp 4-component vector of float) +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 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 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 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: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:? 'd' ( temp 4-component vector of float) +0:? 'd' (layout( location=0) in 4-component vector of float) +0:8 Sequence +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: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: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: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:8 Constant: +0:8 1 (const int) +0:? 'coord' (layout( location=3) in 2-component vector of uint) +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:8 Constant: +0:8 2 (const int) +0:? '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:? '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:? '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 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 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 Constant: +0:8 1 (const int) +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: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 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:? '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:? 'e' (layout( location=5) in 4-component vector of float) + + +Linked vertex stage: + + +Shader version: 450 +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 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 '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 Constant: +0:11 2 (const int) +0:11 add ( temp 4-component vector of float) +0:11 add ( temp 4-component vector of float) +0:11 add ( temp 4-component vector of float) +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 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 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 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: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:? 'd' ( temp 4-component vector of float) +0:? 'd' (layout( location=0) in 4-component vector of float) +0:8 Sequence +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: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: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: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:8 Constant: +0:8 1 (const int) +0:? 'coord' (layout( location=3) in 2-component vector of uint) +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:8 Constant: +0:8 2 (const int) +0:? '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:? '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:? '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 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 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 Constant: +0:8 1 (const int) +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: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 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:? '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:? 'e' (layout( location=5) in 4-component vector of float) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 92 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 48 51 54 58 62 66 78 + 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 + 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 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) + 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 + 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) + 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 + 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 new file mode 100755 index 0000000..8ee9d7c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.switch.frag.out @@ -0,0 +1,466 @@ +hlsl.switch.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:2 Function Definition: @PixelShaderFunction(vf4;i1;i1; ( temp 4-component vector of float) +0:2 Function Parameters: +0:2 'input' ( in 4-component vector of float) +0:2 'c' ( in int) +0:2 'd' ( in int) +0:? Sequence +0:3 'c' ( in int) +0:7 switch +0:7 condition +0:7 'c' ( in int) +0:7 body +0:7 Sequence +0:9 default: +0:7 Sequence +0:7 Branch: Break +0:12 switch +0:12 condition +0:12 'c' ( in int) +0:12 body +0:12 Sequence +0:13 case: with expression +0:13 Constant: +0:13 1 (const int) +0:? Sequence +0:14 Pre-Increment ( temp 4-component vector of float) +0:14 'input' ( in 4-component vector of float) +0:15 Branch: Break +0:16 case: with expression +0:16 Constant: +0:16 2 (const int) +0:? Sequence +0:17 Pre-Decrement ( temp 4-component vector of float) +0:17 'input' ( in 4-component vector of float) +0:18 Branch: Break +0:21 switch +0:21 condition +0:21 'c' ( in int) +0:21 body +0:21 Sequence +0:22 case: with expression +0:22 Constant: +0:22 1 (const int) +0:? Sequence +0:23 Pre-Increment ( temp 4-component vector of float) +0:23 'input' ( in 4-component vector of float) +0:24 Branch: Break +0:25 case: with expression +0:25 Constant: +0:25 2 (const int) +0:? Sequence +0:26 switch +0:26 condition +0:26 'd' ( in int) +0:26 body +0:26 Sequence +0:27 case: with expression +0:27 Constant: +0:27 2 (const int) +0:? Sequence +0:28 add second child into first child ( temp 4-component vector of float) +0:28 'input' ( in 4-component vector of float) +0:28 Constant: +0:28 2.000000 +0:29 Branch: Break +0:30 case: with expression +0:30 Constant: +0:30 3 (const int) +0:? Sequence +0:31 add second child into first child ( temp 4-component vector of float) +0:31 'input' ( in 4-component vector of float) +0:31 Constant: +0:31 3.000000 +0:32 Branch: Break +0:34 Branch: Break +0:35 default: +0:? Sequence +0:36 add second child into first child ( temp 4-component vector of float) +0:36 'input' ( in 4-component vector of float) +0:36 Constant: +0:36 4.000000 +0:39 switch +0:39 condition +0:39 'c' ( in int) +0:39 body +0:39 Sequence +0:40 case: with expression +0:40 Constant: +0:40 1 (const int) +0:39 Sequence +0:39 Branch: Break +0:43 switch +0:43 condition +0:43 'c' ( in int) +0:43 body +0:43 Sequence +0:44 case: with expression +0:44 Constant: +0:44 1 (const int) +0:45 case: with expression +0:45 Constant: +0:45 2 (const int) +0:46 case: with expression +0:46 Constant: +0:46 3 (const int) +0:? Sequence +0:47 Pre-Increment ( temp 4-component vector of float) +0:47 'input' ( in 4-component vector of float) +0:48 Branch: Break +0:49 case: with expression +0:49 Constant: +0:49 4 (const int) +0:50 case: with expression +0:50 Constant: +0:50 5 (const int) +0:? Sequence +0:51 Pre-Decrement ( temp 4-component vector of float) +0:51 'input' ( in 4-component vector of float) +0:54 Branch: Return with expression +0:54 'input' ( in 4-component vector of 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 int) +0:? 'c' ( temp int) +0:? 'c' (layout( location=1) in int) +0:2 move second child to first child ( temp int) +0:? 'd' ( temp int) +0:? 'd' (layout( location=2) 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) +0:? 'input' ( temp 4-component vector of float) +0:? 'c' ( temp int) +0:? 'd' ( temp int) +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) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:2 Function Definition: @PixelShaderFunction(vf4;i1;i1; ( temp 4-component vector of float) +0:2 Function Parameters: +0:2 'input' ( in 4-component vector of float) +0:2 'c' ( in int) +0:2 'd' ( in int) +0:? Sequence +0:3 'c' ( in int) +0:7 switch +0:7 condition +0:7 'c' ( in int) +0:7 body +0:7 Sequence +0:9 default: +0:7 Sequence +0:7 Branch: Break +0:12 switch +0:12 condition +0:12 'c' ( in int) +0:12 body +0:12 Sequence +0:13 case: with expression +0:13 Constant: +0:13 1 (const int) +0:? Sequence +0:14 Pre-Increment ( temp 4-component vector of float) +0:14 'input' ( in 4-component vector of float) +0:15 Branch: Break +0:16 case: with expression +0:16 Constant: +0:16 2 (const int) +0:? Sequence +0:17 Pre-Decrement ( temp 4-component vector of float) +0:17 'input' ( in 4-component vector of float) +0:18 Branch: Break +0:21 switch +0:21 condition +0:21 'c' ( in int) +0:21 body +0:21 Sequence +0:22 case: with expression +0:22 Constant: +0:22 1 (const int) +0:? Sequence +0:23 Pre-Increment ( temp 4-component vector of float) +0:23 'input' ( in 4-component vector of float) +0:24 Branch: Break +0:25 case: with expression +0:25 Constant: +0:25 2 (const int) +0:? Sequence +0:26 switch +0:26 condition +0:26 'd' ( in int) +0:26 body +0:26 Sequence +0:27 case: with expression +0:27 Constant: +0:27 2 (const int) +0:? Sequence +0:28 add second child into first child ( temp 4-component vector of float) +0:28 'input' ( in 4-component vector of float) +0:28 Constant: +0:28 2.000000 +0:29 Branch: Break +0:30 case: with expression +0:30 Constant: +0:30 3 (const int) +0:? Sequence +0:31 add second child into first child ( temp 4-component vector of float) +0:31 'input' ( in 4-component vector of float) +0:31 Constant: +0:31 3.000000 +0:32 Branch: Break +0:34 Branch: Break +0:35 default: +0:? Sequence +0:36 add second child into first child ( temp 4-component vector of float) +0:36 'input' ( in 4-component vector of float) +0:36 Constant: +0:36 4.000000 +0:39 switch +0:39 condition +0:39 'c' ( in int) +0:39 body +0:39 Sequence +0:40 case: with expression +0:40 Constant: +0:40 1 (const int) +0:39 Sequence +0:39 Branch: Break +0:43 switch +0:43 condition +0:43 'c' ( in int) +0:43 body +0:43 Sequence +0:44 case: with expression +0:44 Constant: +0:44 1 (const int) +0:45 case: with expression +0:45 Constant: +0:45 2 (const int) +0:46 case: with expression +0:46 Constant: +0:46 3 (const int) +0:? Sequence +0:47 Pre-Increment ( temp 4-component vector of float) +0:47 'input' ( in 4-component vector of float) +0:48 Branch: Break +0:49 case: with expression +0:49 Constant: +0:49 4 (const int) +0:50 case: with expression +0:50 Constant: +0:50 5 (const int) +0:? Sequence +0:51 Pre-Decrement ( temp 4-component vector of float) +0:51 'input' ( in 4-component vector of float) +0:54 Branch: Return with expression +0:54 'input' ( in 4-component vector of 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 int) +0:? 'c' ( temp int) +0:? 'c' (layout( location=1) in int) +0:2 move second child to first child ( temp int) +0:? 'd' ( temp int) +0:? 'd' (layout( location=2) 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) +0:? 'input' ( temp 4-component vector of float) +0:? 'c' ( temp int) +0:? 'd' ( temp int) +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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 106 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "PixelShaderFunction" 88 92 95 98 + ExecutionMode 4 OriginUpperLeft + Name 4 "PixelShaderFunction" + Name 15 "@PixelShaderFunction(vf4;i1;i1;" + Name 12 "input" + Name 13 "c" + Name 14 "d" + Name 86 "input" + Name 88 "input" + Name 90 "c" + Name 92 "c" + Name 94 "d" + Name 95 "d" + Name 98 "@entryPointOutput" + Name 99 "param" + Name 101 "param" + Name 103 "param" + Decorate 88(input) Location 0 + Decorate 92(c) Location 1 + Decorate 95(d) Location 2 + Decorate 98(@entryPointOutput) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 9: TypeInt 32 1 + 10: TypePointer Function 9(int) + 11: TypeFunction 7(fvec4) 8(ptr) 10(ptr) 10(ptr) + 27: 6(float) Constant 1065353216 + 49: 6(float) Constant 1073741824 + 54: 6(float) Constant 1077936128 + 61: 6(float) Constant 1082130432 + 87: TypePointer Input 7(fvec4) + 88(input): 87(ptr) Variable Input + 91: TypePointer Input 9(int) + 92(c): 91(ptr) Variable Input + 95(d): 91(ptr) Variable Input + 97: TypePointer Output 7(fvec4) +98(@entryPointOutput): 97(ptr) Variable Output +4(PixelShaderFunction): 2 Function None 3 + 5: Label + 86(input): 8(ptr) Variable Function + 90(c): 10(ptr) Variable Function + 94(d): 10(ptr) Variable Function + 99(param): 8(ptr) Variable Function + 101(param): 10(ptr) Variable Function + 103(param): 10(ptr) Variable Function + 89: 7(fvec4) Load 88(input) + Store 86(input) 89 + 93: 9(int) Load 92(c) + Store 90(c) 93 + 96: 9(int) Load 95(d) + Store 94(d) 96 + 100: 7(fvec4) Load 86(input) + Store 99(param) 100 + 102: 9(int) Load 90(c) + Store 101(param) 102 + 104: 9(int) Load 94(d) + Store 103(param) 104 + 105: 7(fvec4) FunctionCall 15(@PixelShaderFunction(vf4;i1;i1;) 99(param) 101(param) 103(param) + Store 98(@entryPointOutput) 105 + Return + FunctionEnd +15(@PixelShaderFunction(vf4;i1;i1;): 7(fvec4) Function None 11 + 12(input): 8(ptr) FunctionParameter + 13(c): 10(ptr) FunctionParameter + 14(d): 10(ptr) FunctionParameter + 16: Label + 17: 9(int) Load 13(c) + SelectionMerge 19 None + Switch 17 18 + 18: Label + Branch 19 + 19: Label + 22: 9(int) Load 13(c) + SelectionMerge 25 None + Switch 22 25 + case 1: 23 + case 2: 24 + 23: Label + 26: 7(fvec4) Load 12(input) + 28: 7(fvec4) CompositeConstruct 27 27 27 27 + 29: 7(fvec4) FAdd 26 28 + Store 12(input) 29 + Branch 25 + 24: Label + 31: 7(fvec4) Load 12(input) + 32: 7(fvec4) CompositeConstruct 27 27 27 27 + 33: 7(fvec4) FSub 31 32 + Store 12(input) 33 + Branch 25 + 25: Label + 36: 9(int) Load 13(c) + SelectionMerge 40 None + Switch 36 39 + case 1: 37 + case 2: 38 + 39: Label + 62: 7(fvec4) Load 12(input) + 63: 7(fvec4) CompositeConstruct 61 61 61 61 + 64: 7(fvec4) FAdd 62 63 + Store 12(input) 64 + Branch 40 + 37: Label + 41: 7(fvec4) Load 12(input) + 42: 7(fvec4) CompositeConstruct 27 27 27 27 + 43: 7(fvec4) FAdd 41 42 + Store 12(input) 43 + Branch 40 + 38: Label + 45: 9(int) Load 14(d) + SelectionMerge 48 None + Switch 45 48 + case 2: 46 + case 3: 47 + 46: Label + 50: 7(fvec4) Load 12(input) + 51: 7(fvec4) CompositeConstruct 49 49 49 49 + 52: 7(fvec4) FAdd 50 51 + Store 12(input) 52 + Branch 48 + 47: Label + 55: 7(fvec4) Load 12(input) + 56: 7(fvec4) CompositeConstruct 54 54 54 54 + 57: 7(fvec4) FAdd 55 56 + Store 12(input) 57 + Branch 48 + 48: Label + Branch 40 + 40: Label + 66: 9(int) Load 13(c) + SelectionMerge 68 None + Switch 66 68 + case 1: 67 + 67: Label + Branch 68 + 68: Label + 71: 9(int) Load 13(c) + SelectionMerge 74 None + Switch 71 74 + case 1: 72 + case 2: 72 + case 3: 72 + case 4: 73 + case 5: 73 + 72: Label + 75: 7(fvec4) Load 12(input) + 76: 7(fvec4) CompositeConstruct 27 27 27 27 + 77: 7(fvec4) FAdd 75 76 + Store 12(input) 77 + Branch 74 + 73: Label + 79: 7(fvec4) Load 12(input) + 80: 7(fvec4) CompositeConstruct 27 27 27 27 + 81: 7(fvec4) FSub 79 80 + Store 12(input) 81 + Branch 74 + 74: Label + 83: 7(fvec4) Load 12(input) + ReturnValue 83 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.swizzle.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.swizzle.frag.out new file mode 100755 index 0000000..4674b76 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.swizzle.frag.out @@ -0,0 +1,122 @@ +hlsl.swizzle.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:1 Sequence +0:1 move second child to first child ( temp 4-component vector of float) +0:1 'AmbientColor' ( global 4-component vector of float) +0:? Constant: +0:? 1.000000 +0:? 0.500000 +0:? 0.000000 +0:? 1.000000 +0:4 Function Definition: ShaderFunction(vf4; ( temp 4-component vector of float) +0:4 Function Parameters: +0:4 'input' ( in 4-component vector of float) +0:? Sequence +0:5 Branch: Return with expression +0:5 component-wise multiply ( temp 4-component vector of float) +0:5 vector swizzle ( temp 4-component vector of float) +0:5 'input' ( in 4-component vector of float) +0:5 Sequence +0:5 Constant: +0:5 3 (const int) +0:5 Constant: +0:5 3 (const int) +0:5 Constant: +0:5 1 (const int) +0:5 Constant: +0:5 0 (const int) +0:5 Construct vec4 ( temp 4-component vector of float) +0:5 direct index ( temp float) +0:5 'AmbientColor' ( global 4-component vector of float) +0:5 Constant: +0:5 2 (const int) +0:? Linker Objects +0:? 'AmbientColor' ( global 4-component vector of float) + + +Linked fragment stage: + +WARNING: Linking fragment stage: Entry point not found + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:1 Sequence +0:1 move second child to first child ( temp 4-component vector of float) +0:1 'AmbientColor' ( global 4-component vector of float) +0:? Constant: +0:? 1.000000 +0:? 0.500000 +0:? 0.000000 +0:? 1.000000 +0:4 Function Definition: ShaderFunction(vf4; ( temp 4-component vector of float) +0:4 Function Parameters: +0:4 'input' ( in 4-component vector of float) +0:? Sequence +0:5 Branch: Return with expression +0:5 component-wise multiply ( temp 4-component vector of float) +0:5 vector swizzle ( temp 4-component vector of float) +0:5 'input' ( in 4-component vector of float) +0:5 Sequence +0:5 Constant: +0:5 3 (const int) +0:5 Constant: +0:5 3 (const int) +0:5 Constant: +0:5 1 (const int) +0:5 Constant: +0:5 0 (const int) +0:5 Construct vec4 ( temp 4-component vector of float) +0:5 direct index ( temp float) +0:5 'AmbientColor' ( global 4-component vector of float) +0:5 Constant: +0:5 2 (const int) +0:? Linker Objects +0:? 'AmbientColor' ( global 4-component vector of float) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 30 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "PixelShaderFunction" + ExecutionMode 4 OriginUpperLeft + Name 4 "PixelShaderFunction" + Name 11 "ShaderFunction(vf4;" + Name 10 "input" + Name 14 "AmbientColor" + 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 Private 7(fvec4) +14(AmbientColor): 13(ptr) Variable Private + 15: 6(float) Constant 1065353216 + 16: 6(float) Constant 1056964608 + 17: 6(float) Constant 0 + 18: 7(fvec4) ConstantComposite 15 16 17 15 + 21: TypeInt 32 0 + 22: 21(int) Constant 2 + 23: TypePointer Private 6(float) +4(PixelShaderFunction): 2 Function None 3 + 5: Label + Store 14(AmbientColor) 18 + Return + FunctionEnd +11(ShaderFunction(vf4;): 7(fvec4) Function None 9 + 10(input): 8(ptr) FunctionParameter + 12: Label + 19: 7(fvec4) Load 10(input) + 20: 7(fvec4) VectorShuffle 19 19 3 3 1 0 + 24: 23(ptr) AccessChain 14(AmbientColor) 22 + 25: 6(float) Load 24 + 26: 7(fvec4) CompositeConstruct 25 25 25 25 + 27: 7(fvec4) FMul 20 26 + ReturnValue 27 + 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 new file mode 100644 index 0000000..11ea394 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.templatetypes.frag.out @@ -0,0 +1,733 @@ +hlsl.templatetypes.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:3 Function Definition: @PixelShaderFunction( ( temp float) +0:3 Function Parameters: +0:? Sequence +0:4 Sequence +0:4 move second child to first child ( temp 4-component vector of float) +0:4 'r00' ( temp 4-component vector of float) +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:5 Sequence +0:5 move second child to first child ( temp 4-component vector of float) +0:5 'r01' ( temp 4-component vector of float) +0:? Constant: +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:? 5.000000 +0:7 Sequence +0:7 move second child to first child ( temp 1-component vector of bool) +0:7 'r12' ( temp 1-component vector of bool) +0:7 Constant: +0:7 false (const bool) +0:8 Sequence +0:8 move second child to first child ( temp 1-component vector of int) +0:8 'r13' ( temp 1-component vector of int) +0:8 Constant: +0:8 1 (const int) +0:9 Sequence +0:9 move second child to first child ( temp 1-component vector of float) +0:9 'r14' ( temp 1-component vector of float) +0:9 Constant: +0:9 1.000000 +0:10 Sequence +0:10 move second child to first child ( temp 1-component vector of double) +0:10 'r15' ( temp 1-component vector of double) +0:10 Constant: +0:10 1.000000 +0:11 Sequence +0:11 move second child to first child ( temp 1-component vector of uint) +0:11 'r16' ( temp 1-component vector of uint) +0:11 Constant: +0:11 1 (const uint) +0:13 Sequence +0:13 move second child to first child ( temp 2-component vector of bool) +0:13 'r20' ( temp 2-component vector of bool) +0:? Constant: +0:? false (const bool) +0:? true (const bool) +0:14 Sequence +0:14 move second child to first child ( temp 2-component vector of int) +0:14 'r21' ( temp 2-component vector of int) +0:? Constant: +0:? 1 (const int) +0:? 2 (const int) +0:15 Sequence +0:15 move second child to first child ( temp 2-component vector of float) +0:15 'r22' ( temp 2-component vector of float) +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:16 Sequence +0:16 move second child to first child ( temp 2-component vector of double) +0:16 'r23' ( temp 2-component vector of double) +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:17 Sequence +0:17 move second child to first child ( temp 2-component vector of uint) +0:17 'r24' ( temp 2-component vector of uint) +0:? Constant: +0:? 1 (const uint) +0:? 2 (const uint) +0:19 Sequence +0:19 move second child to first child ( temp 3-component vector of bool) +0:19 'r30' ( temp 3-component vector of bool) +0:? Constant: +0:? false (const bool) +0:? true (const bool) +0:? true (const bool) +0:20 Sequence +0:20 move second child to first child ( temp 3-component vector of int) +0:20 'r31' ( temp 3-component vector of int) +0:? Constant: +0:? 1 (const int) +0:? 2 (const int) +0:? 3 (const int) +0:21 Sequence +0:21 move second child to first child ( temp 3-component vector of float) +0:21 'r32' ( temp 3-component vector of float) +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:22 Sequence +0:22 move second child to first child ( temp 3-component vector of double) +0:22 'r33' ( temp 3-component vector of double) +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:23 Sequence +0:23 move second child to first child ( temp 3-component vector of uint) +0:23 'r34' ( temp 3-component vector of uint) +0:? Constant: +0:? 1 (const uint) +0:? 2 (const uint) +0:? 3 (const uint) +0:25 Sequence +0:25 move second child to first child ( temp 4-component vector of bool) +0:25 'r40' ( temp 4-component vector of bool) +0:? Constant: +0:? false (const bool) +0:? true (const bool) +0:? true (const bool) +0:? false (const bool) +0:26 Sequence +0:26 move second child to first child ( temp 4-component vector of int) +0:26 'r41' ( 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:27 Sequence +0:27 move second child to first child ( temp 4-component vector of float) +0:27 'r42' ( temp 4-component vector of float) +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:28 Sequence +0:28 move second child to first child ( temp 4-component vector of double) +0:28 'r43' ( temp 4-component vector of double) +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:29 Sequence +0:29 move second child to first child ( temp 4-component vector of uint) +0:29 'r44' ( temp 4-component vector of uint) +0:? Constant: +0:? 1 (const uint) +0:? 2 (const uint) +0:? 3 (const uint) +0:? 4 (const uint) +0:31 Sequence +0:31 move second child to first child ( temp 4X4 matrix of float) +0:31 'r50' ( temp 4X4 matrix of float) +0:? Constant: +0:? 0.000000 +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:? 5.000000 +0:? 6.000000 +0:? 7.000000 +0:? 8.000000 +0:? 9.000000 +0:? 10.000000 +0:? 11.000000 +0:? 12.000000 +0:? 13.000000 +0:? 14.000000 +0:? 15.000000 +0:32 Sequence +0:32 move second child to first child ( temp 4X4 matrix of float) +0:32 'r51' ( temp 4X4 matrix of float) +0:? Constant: +0:? 0.000000 +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:? 5.000000 +0:? 6.000000 +0:? 7.000000 +0:? 8.000000 +0:? 9.000000 +0:? 10.000000 +0:? 11.000000 +0:? 12.000000 +0:? 13.000000 +0:? 14.000000 +0:? 15.000000 +0:35 Sequence +0:35 move second child to first child ( temp 2X3 matrix of float) +0:35 'r61' ( temp 2X3 matrix of float) +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:? 5.000000 +0:? 6.000000 +0:36 Sequence +0:36 move second child to first child ( temp 3X2 matrix of float) +0:36 'r62' ( temp 3X2 matrix of float) +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:? 5.000000 +0:? 6.000000 +0:39 Sequence +0:39 move second child to first child ( temp 4X2 matrix of float) +0:39 'r65' ( temp 4X2 matrix of float) +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:? 5.000000 +0:? 6.000000 +0:? 7.000000 +0:? 8.000000 +0:40 Sequence +0:40 move second child to first child ( temp 4X3 matrix of float) +0:40 'r66' ( temp 4X3 matrix of float) +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:? 5.000000 +0:? 6.000000 +0:? 7.000000 +0:? 8.000000 +0:? 9.000000 +0:? 10.000000 +0:? 11.000000 +0:? 12.000000 +0:45 Branch: Return with expression +0:45 Constant: +0:45 0.000000 +0:3 Function Definition: PixelShaderFunction( ( temp void) +0:3 Function Parameters: +0:? Sequence +0:3 move second child to first child ( temp float) +0:? '@entryPointOutput' (layout( location=0) out float) +0:3 Function Call: @PixelShaderFunction( ( temp float) +0:? Linker Objects +0:? '@entryPointOutput' (layout( location=0) out float) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:3 Function Definition: @PixelShaderFunction( ( temp float) +0:3 Function Parameters: +0:? Sequence +0:4 Sequence +0:4 move second child to first child ( temp 4-component vector of float) +0:4 'r00' ( temp 4-component vector of float) +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:5 Sequence +0:5 move second child to first child ( temp 4-component vector of float) +0:5 'r01' ( temp 4-component vector of float) +0:? Constant: +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:? 5.000000 +0:7 Sequence +0:7 move second child to first child ( temp 1-component vector of bool) +0:7 'r12' ( temp 1-component vector of bool) +0:7 Constant: +0:7 false (const bool) +0:8 Sequence +0:8 move second child to first child ( temp 1-component vector of int) +0:8 'r13' ( temp 1-component vector of int) +0:8 Constant: +0:8 1 (const int) +0:9 Sequence +0:9 move second child to first child ( temp 1-component vector of float) +0:9 'r14' ( temp 1-component vector of float) +0:9 Constant: +0:9 1.000000 +0:10 Sequence +0:10 move second child to first child ( temp 1-component vector of double) +0:10 'r15' ( temp 1-component vector of double) +0:10 Constant: +0:10 1.000000 +0:11 Sequence +0:11 move second child to first child ( temp 1-component vector of uint) +0:11 'r16' ( temp 1-component vector of uint) +0:11 Constant: +0:11 1 (const uint) +0:13 Sequence +0:13 move second child to first child ( temp 2-component vector of bool) +0:13 'r20' ( temp 2-component vector of bool) +0:? Constant: +0:? false (const bool) +0:? true (const bool) +0:14 Sequence +0:14 move second child to first child ( temp 2-component vector of int) +0:14 'r21' ( temp 2-component vector of int) +0:? Constant: +0:? 1 (const int) +0:? 2 (const int) +0:15 Sequence +0:15 move second child to first child ( temp 2-component vector of float) +0:15 'r22' ( temp 2-component vector of float) +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:16 Sequence +0:16 move second child to first child ( temp 2-component vector of double) +0:16 'r23' ( temp 2-component vector of double) +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:17 Sequence +0:17 move second child to first child ( temp 2-component vector of uint) +0:17 'r24' ( temp 2-component vector of uint) +0:? Constant: +0:? 1 (const uint) +0:? 2 (const uint) +0:19 Sequence +0:19 move second child to first child ( temp 3-component vector of bool) +0:19 'r30' ( temp 3-component vector of bool) +0:? Constant: +0:? false (const bool) +0:? true (const bool) +0:? true (const bool) +0:20 Sequence +0:20 move second child to first child ( temp 3-component vector of int) +0:20 'r31' ( temp 3-component vector of int) +0:? Constant: +0:? 1 (const int) +0:? 2 (const int) +0:? 3 (const int) +0:21 Sequence +0:21 move second child to first child ( temp 3-component vector of float) +0:21 'r32' ( temp 3-component vector of float) +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:22 Sequence +0:22 move second child to first child ( temp 3-component vector of double) +0:22 'r33' ( temp 3-component vector of double) +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:23 Sequence +0:23 move second child to first child ( temp 3-component vector of uint) +0:23 'r34' ( temp 3-component vector of uint) +0:? Constant: +0:? 1 (const uint) +0:? 2 (const uint) +0:? 3 (const uint) +0:25 Sequence +0:25 move second child to first child ( temp 4-component vector of bool) +0:25 'r40' ( temp 4-component vector of bool) +0:? Constant: +0:? false (const bool) +0:? true (const bool) +0:? true (const bool) +0:? false (const bool) +0:26 Sequence +0:26 move second child to first child ( temp 4-component vector of int) +0:26 'r41' ( 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:27 Sequence +0:27 move second child to first child ( temp 4-component vector of float) +0:27 'r42' ( temp 4-component vector of float) +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:28 Sequence +0:28 move second child to first child ( temp 4-component vector of double) +0:28 'r43' ( temp 4-component vector of double) +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:29 Sequence +0:29 move second child to first child ( temp 4-component vector of uint) +0:29 'r44' ( temp 4-component vector of uint) +0:? Constant: +0:? 1 (const uint) +0:? 2 (const uint) +0:? 3 (const uint) +0:? 4 (const uint) +0:31 Sequence +0:31 move second child to first child ( temp 4X4 matrix of float) +0:31 'r50' ( temp 4X4 matrix of float) +0:? Constant: +0:? 0.000000 +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:? 5.000000 +0:? 6.000000 +0:? 7.000000 +0:? 8.000000 +0:? 9.000000 +0:? 10.000000 +0:? 11.000000 +0:? 12.000000 +0:? 13.000000 +0:? 14.000000 +0:? 15.000000 +0:32 Sequence +0:32 move second child to first child ( temp 4X4 matrix of float) +0:32 'r51' ( temp 4X4 matrix of float) +0:? Constant: +0:? 0.000000 +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:? 5.000000 +0:? 6.000000 +0:? 7.000000 +0:? 8.000000 +0:? 9.000000 +0:? 10.000000 +0:? 11.000000 +0:? 12.000000 +0:? 13.000000 +0:? 14.000000 +0:? 15.000000 +0:35 Sequence +0:35 move second child to first child ( temp 2X3 matrix of float) +0:35 'r61' ( temp 2X3 matrix of float) +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:? 5.000000 +0:? 6.000000 +0:36 Sequence +0:36 move second child to first child ( temp 3X2 matrix of float) +0:36 'r62' ( temp 3X2 matrix of float) +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:? 5.000000 +0:? 6.000000 +0:39 Sequence +0:39 move second child to first child ( temp 4X2 matrix of float) +0:39 'r65' ( temp 4X2 matrix of float) +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:? 5.000000 +0:? 6.000000 +0:? 7.000000 +0:? 8.000000 +0:40 Sequence +0:40 move second child to first child ( temp 4X3 matrix of float) +0:40 'r66' ( temp 4X3 matrix of float) +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:? 5.000000 +0:? 6.000000 +0:? 7.000000 +0:? 8.000000 +0:? 9.000000 +0:? 10.000000 +0:? 11.000000 +0:? 12.000000 +0:45 Branch: Return with expression +0:45 Constant: +0:45 0.000000 +0:3 Function Definition: PixelShaderFunction( ( temp void) +0:3 Function Parameters: +0:? Sequence +0:3 move second child to first child ( temp float) +0:? '@entryPointOutput' (layout( location=0) out float) +0:3 Function Call: @PixelShaderFunction( ( temp float) +0:? Linker Objects +0:? '@entryPointOutput' (layout( location=0) out float) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 153 + + Capability Shader + Capability Float64 + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "PixelShaderFunction" 151 + ExecutionMode 4 OriginUpperLeft + Name 4 "PixelShaderFunction" + Name 8 "@PixelShaderFunction(" + Name 12 "r00" + Name 18 "r01" + Name 23 "r12" + Name 27 "r13" + Name 30 "r14" + Name 33 "r15" + Name 37 "r16" + Name 41 "r20" + Name 46 "r21" + Name 51 "r22" + Name 55 "r23" + Name 60 "r24" + Name 65 "r30" + Name 69 "r31" + Name 74 "r32" + Name 78 "r33" + Name 83 "r34" + Name 88 "r40" + Name 92 "r41" + Name 95 "r42" + Name 98 "r43" + Name 103 "r44" + Name 108 "r50" + Name 125 "r51" + Name 128 "r61" + Name 133 "r62" + Name 139 "r65" + Name 144 "r66" + Name 151 "@entryPointOutput" + Decorate 151(@entryPointOutput) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeFunction 6(float) + 10: TypeVector 6(float) 4 + 11: TypePointer Function 10(fvec4) + 13: 6(float) Constant 1065353216 + 14: 6(float) Constant 1073741824 + 15: 6(float) Constant 1077936128 + 16: 6(float) Constant 1082130432 + 17: 10(fvec4) ConstantComposite 13 14 15 16 + 19: 6(float) Constant 1084227584 + 20: 10(fvec4) ConstantComposite 14 15 16 19 + 21: TypeBool + 22: TypePointer Function 21(bool) + 24: 21(bool) ConstantFalse + 25: TypeInt 32 1 + 26: TypePointer Function 25(int) + 28: 25(int) Constant 1 + 29: TypePointer Function 6(float) + 31: TypeFloat 64 + 32: TypePointer Function 31(float) + 34: 31(float) Constant 0 1072693248 + 35: TypeInt 32 0 + 36: TypePointer Function 35(int) + 38: 35(int) Constant 1 + 39: TypeVector 21(bool) 2 + 40: TypePointer Function 39(bvec2) + 42: 21(bool) ConstantTrue + 43: 39(bvec2) ConstantComposite 24 42 + 44: TypeVector 25(int) 2 + 45: TypePointer Function 44(ivec2) + 47: 25(int) Constant 2 + 48: 44(ivec2) ConstantComposite 28 47 + 49: TypeVector 6(float) 2 + 50: TypePointer Function 49(fvec2) + 52: 49(fvec2) ConstantComposite 13 14 + 53: TypeVector 31(float) 2 + 54: TypePointer Function 53(fvec2) + 56: 31(float) Constant 0 1073741824 + 57: 53(fvec2) ConstantComposite 34 56 + 58: TypeVector 35(int) 2 + 59: TypePointer Function 58(ivec2) + 61: 35(int) Constant 2 + 62: 58(ivec2) ConstantComposite 38 61 + 63: TypeVector 21(bool) 3 + 64: TypePointer Function 63(bvec3) + 66: 63(bvec3) ConstantComposite 24 42 42 + 67: TypeVector 25(int) 3 + 68: TypePointer Function 67(ivec3) + 70: 25(int) Constant 3 + 71: 67(ivec3) ConstantComposite 28 47 70 + 72: TypeVector 6(float) 3 + 73: TypePointer Function 72(fvec3) + 75: 72(fvec3) ConstantComposite 13 14 15 + 76: TypeVector 31(float) 3 + 77: TypePointer Function 76(fvec3) + 79: 31(float) Constant 0 1074266112 + 80: 76(fvec3) ConstantComposite 34 56 79 + 81: TypeVector 35(int) 3 + 82: TypePointer Function 81(ivec3) + 84: 35(int) Constant 3 + 85: 81(ivec3) ConstantComposite 38 61 84 + 86: TypeVector 21(bool) 4 + 87: TypePointer Function 86(bvec4) + 89: 86(bvec4) ConstantComposite 24 42 42 24 + 90: TypeVector 25(int) 4 + 91: TypePointer Function 90(ivec4) + 93: 25(int) Constant 4 + 94: 90(ivec4) ConstantComposite 28 47 70 93 + 96: TypeVector 31(float) 4 + 97: TypePointer Function 96(fvec4) + 99: 31(float) Constant 0 1074790400 + 100: 96(fvec4) ConstantComposite 34 56 79 99 + 101: TypeVector 35(int) 4 + 102: TypePointer Function 101(ivec4) + 104: 35(int) Constant 4 + 105: 101(ivec4) ConstantComposite 38 61 84 104 + 106: TypeMatrix 10(fvec4) 4 + 107: TypePointer Function 106 + 109: 6(float) Constant 0 + 110: 10(fvec4) ConstantComposite 109 13 14 15 + 111: 6(float) Constant 1086324736 + 112: 6(float) Constant 1088421888 + 113: 10(fvec4) ConstantComposite 16 19 111 112 + 114: 6(float) Constant 1090519040 + 115: 6(float) Constant 1091567616 + 116: 6(float) Constant 1092616192 + 117: 6(float) Constant 1093664768 + 118: 10(fvec4) ConstantComposite 114 115 116 117 + 119: 6(float) Constant 1094713344 + 120: 6(float) Constant 1095761920 + 121: 6(float) Constant 1096810496 + 122: 6(float) Constant 1097859072 + 123: 10(fvec4) ConstantComposite 119 120 121 122 + 124: 106 ConstantComposite 110 113 118 123 + 126: TypeMatrix 72(fvec3) 2 + 127: TypePointer Function 126 + 129: 72(fvec3) ConstantComposite 16 19 111 + 130: 126 ConstantComposite 75 129 + 131: TypeMatrix 49(fvec2) 3 + 132: TypePointer Function 131 + 134: 49(fvec2) ConstantComposite 15 16 + 135: 49(fvec2) ConstantComposite 19 111 + 136: 131 ConstantComposite 52 134 135 + 137: TypeMatrix 49(fvec2) 4 + 138: TypePointer Function 137 + 140: 49(fvec2) ConstantComposite 112 114 + 141: 137 ConstantComposite 52 134 135 140 + 142: TypeMatrix 72(fvec3) 4 + 143: TypePointer Function 142 + 145: 72(fvec3) ConstantComposite 112 114 115 + 146: 72(fvec3) ConstantComposite 116 117 119 + 147: 142 ConstantComposite 75 129 145 146 + 150: TypePointer Output 6(float) +151(@entryPointOutput): 150(ptr) Variable Output +4(PixelShaderFunction): 2 Function None 3 + 5: Label + 152: 6(float) FunctionCall 8(@PixelShaderFunction() + Store 151(@entryPointOutput) 152 + Return + FunctionEnd +8(@PixelShaderFunction(): 6(float) Function None 7 + 9: Label + 12(r00): 11(ptr) Variable Function + 18(r01): 11(ptr) Variable Function + 23(r12): 22(ptr) Variable Function + 27(r13): 26(ptr) Variable Function + 30(r14): 29(ptr) Variable Function + 33(r15): 32(ptr) Variable Function + 37(r16): 36(ptr) Variable Function + 41(r20): 40(ptr) Variable Function + 46(r21): 45(ptr) Variable Function + 51(r22): 50(ptr) Variable Function + 55(r23): 54(ptr) Variable Function + 60(r24): 59(ptr) Variable Function + 65(r30): 64(ptr) Variable Function + 69(r31): 68(ptr) Variable Function + 74(r32): 73(ptr) Variable Function + 78(r33): 77(ptr) Variable Function + 83(r34): 82(ptr) Variable Function + 88(r40): 87(ptr) Variable Function + 92(r41): 91(ptr) Variable Function + 95(r42): 11(ptr) Variable Function + 98(r43): 97(ptr) Variable Function + 103(r44): 102(ptr) Variable Function + 108(r50): 107(ptr) Variable Function + 125(r51): 107(ptr) Variable Function + 128(r61): 127(ptr) Variable Function + 133(r62): 132(ptr) Variable Function + 139(r65): 138(ptr) Variable Function + 144(r66): 143(ptr) Variable Function + Store 12(r00) 17 + Store 18(r01) 20 + Store 23(r12) 24 + Store 27(r13) 28 + Store 30(r14) 13 + Store 33(r15) 34 + Store 37(r16) 38 + Store 41(r20) 43 + Store 46(r21) 48 + Store 51(r22) 52 + Store 55(r23) 57 + Store 60(r24) 62 + Store 65(r30) 66 + Store 69(r31) 71 + Store 74(r32) 75 + Store 78(r33) 80 + Store 83(r34) 85 + Store 88(r40) 89 + Store 92(r41) 94 + Store 95(r42) 17 + Store 98(r43) 100 + Store 103(r44) 105 + Store 108(r50) 124 + Store 125(r51) 124 + Store 128(r61) 130 + Store 133(r62) 136 + Store 139(r65) 141 + Store 144(r66) 147 + ReturnValue 109 + 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 new file mode 100755 index 0000000..8619468 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.this.frag.out @@ -0,0 +1,378 @@ +hlsl.this.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:1 Sequence +0:1 move second child to first child ( temp 2-component vector of float) +0:1 'var' ( global 2-component vector of float) +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:6 Function Definition: type1::memFun1(vi3; ( temp int) +0:6 Function Parameters: +0:6 '@this' ( temp structure{ temp 2-component vector of float bar, temp int var, temp int var2}) +0:6 'var' ( in 3-component vector of int) +0:? Sequence +0:7 Branch: Return with expression +0:7 add ( temp int) +0:7 add ( temp int) +0:7 direct index ( temp int) +0:7 'var' ( in 3-component vector of int) +0:7 Constant: +0:7 2 (const int) +0:7 var: direct index for structure ( temp int) +0:7 '@this' ( temp structure{ temp 2-component vector of float bar, temp int var, temp int var2}) +0:7 Constant: +0:7 1 (const int) +0:7 var2: direct index for structure ( temp int) +0:7 '@this' ( temp structure{ temp 2-component vector of float bar, temp int var, temp int var2}) +0:7 Constant: +0:7 2 (const uint) +0:10 Function Definition: type1::memFun2(i1; ( temp int) +0:10 Function Parameters: +0:10 '@this' ( temp structure{ temp 2-component vector of float bar, temp int var, temp int var2}) +0:10 'a' ( in int) +0:? Sequence +0:11 Sequence +0:11 move second child to first child ( temp 3-component vector of int) +0:11 'var' ( temp 3-component vector of int) +0:? Constant: +0:? 1 (const int) +0:? 2 (const int) +0:? 3 (const int) +0:12 Branch: Return with expression +0:12 add ( temp int) +0:12 add ( temp int) +0:12 direct index ( temp int) +0:12 'var' ( temp 3-component vector of int) +0:12 Constant: +0:12 2 (const int) +0:12 Convert float to int ( temp int) +0:12 direct index ( temp float) +0:12 bar: direct index for structure ( temp 2-component vector of float) +0:12 '@this' ( temp structure{ temp 2-component vector of float bar, temp int var, temp int var2}) +0:12 Constant: +0:12 0 (const uint) +0:12 Constant: +0:12 1 (const int) +0:12 var2: direct index for structure ( temp int) +0:12 '@this' ( temp structure{ temp 2-component vector of float bar, temp int var, temp int var2}) +0:12 Constant: +0:12 2 (const int) +0:20 Function Definition: @main( ( temp 4-component vector of float) +0:20 Function Parameters: +0:? Sequence +0:22 move second child to first child ( temp 2-component vector of float) +0:22 bar: direct index for structure ( temp 2-component vector of float) +0:22 'T' ( temp structure{ temp 2-component vector of float bar, temp int var, temp int var2}) +0:22 Constant: +0:22 0 (const int) +0:22 'var' ( global 2-component vector of float) +0:23 move second child to first child ( temp int) +0:23 var: direct index for structure ( temp int) +0:23 'T' ( temp structure{ temp 2-component vector of float bar, temp int var, temp int var2}) +0:23 Constant: +0:23 1 (const int) +0:23 Constant: +0:23 7 (const int) +0:24 move second child to first child ( temp int) +0:24 var2: direct index for structure ( temp int) +0:24 'T' ( temp structure{ temp 2-component vector of float bar, temp int var, temp int var2}) +0:24 Constant: +0:24 2 (const int) +0:24 Constant: +0:24 9 (const int) +0:25 Sequence +0:25 move second child to first child ( temp int) +0:25 'i' ( temp int) +0:25 Function Call: type1::memFun1(vi3; ( temp int) +0:25 'T' ( temp structure{ temp 2-component vector of float bar, temp int var, temp int var2}) +0:? Constant: +0:? 10 (const int) +0:? 11 (const int) +0:? 12 (const int) +0:26 add second child into first child ( temp int) +0:26 'i' ( temp int) +0:26 Function Call: type1::memFun2(i1; ( temp int) +0:26 'T' ( temp structure{ temp 2-component vector of float bar, temp int var, temp int var2}) +0:26 Constant: +0:26 17 (const int) +0:28 Branch: Return with expression +0:? Construct vec4 ( temp 4-component vector of float) +0:28 Convert int to float ( temp float) +0:28 'i' ( temp int) +0:28 Convert int to float ( temp float) +0:28 'i' ( temp int) +0:28 Convert int to float ( temp float) +0:28 'i' ( temp int) +0:28 Convert int to float ( temp float) +0:28 'i' ( temp 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:? 'var' ( global 2-component vector of float) +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:1 Sequence +0:1 move second child to first child ( temp 2-component vector of float) +0:1 'var' ( global 2-component vector of float) +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:6 Function Definition: type1::memFun1(vi3; ( temp int) +0:6 Function Parameters: +0:6 '@this' ( temp structure{ temp 2-component vector of float bar, temp int var, temp int var2}) +0:6 'var' ( in 3-component vector of int) +0:? Sequence +0:7 Branch: Return with expression +0:7 add ( temp int) +0:7 add ( temp int) +0:7 direct index ( temp int) +0:7 'var' ( in 3-component vector of int) +0:7 Constant: +0:7 2 (const int) +0:7 var: direct index for structure ( temp int) +0:7 '@this' ( temp structure{ temp 2-component vector of float bar, temp int var, temp int var2}) +0:7 Constant: +0:7 1 (const int) +0:7 var2: direct index for structure ( temp int) +0:7 '@this' ( temp structure{ temp 2-component vector of float bar, temp int var, temp int var2}) +0:7 Constant: +0:7 2 (const uint) +0:10 Function Definition: type1::memFun2(i1; ( temp int) +0:10 Function Parameters: +0:10 '@this' ( temp structure{ temp 2-component vector of float bar, temp int var, temp int var2}) +0:10 'a' ( in int) +0:? Sequence +0:11 Sequence +0:11 move second child to first child ( temp 3-component vector of int) +0:11 'var' ( temp 3-component vector of int) +0:? Constant: +0:? 1 (const int) +0:? 2 (const int) +0:? 3 (const int) +0:12 Branch: Return with expression +0:12 add ( temp int) +0:12 add ( temp int) +0:12 direct index ( temp int) +0:12 'var' ( temp 3-component vector of int) +0:12 Constant: +0:12 2 (const int) +0:12 Convert float to int ( temp int) +0:12 direct index ( temp float) +0:12 bar: direct index for structure ( temp 2-component vector of float) +0:12 '@this' ( temp structure{ temp 2-component vector of float bar, temp int var, temp int var2}) +0:12 Constant: +0:12 0 (const uint) +0:12 Constant: +0:12 1 (const int) +0:12 var2: direct index for structure ( temp int) +0:12 '@this' ( temp structure{ temp 2-component vector of float bar, temp int var, temp int var2}) +0:12 Constant: +0:12 2 (const int) +0:20 Function Definition: @main( ( temp 4-component vector of float) +0:20 Function Parameters: +0:? Sequence +0:22 move second child to first child ( temp 2-component vector of float) +0:22 bar: direct index for structure ( temp 2-component vector of float) +0:22 'T' ( temp structure{ temp 2-component vector of float bar, temp int var, temp int var2}) +0:22 Constant: +0:22 0 (const int) +0:22 'var' ( global 2-component vector of float) +0:23 move second child to first child ( temp int) +0:23 var: direct index for structure ( temp int) +0:23 'T' ( temp structure{ temp 2-component vector of float bar, temp int var, temp int var2}) +0:23 Constant: +0:23 1 (const int) +0:23 Constant: +0:23 7 (const int) +0:24 move second child to first child ( temp int) +0:24 var2: direct index for structure ( temp int) +0:24 'T' ( temp structure{ temp 2-component vector of float bar, temp int var, temp int var2}) +0:24 Constant: +0:24 2 (const int) +0:24 Constant: +0:24 9 (const int) +0:25 Sequence +0:25 move second child to first child ( temp int) +0:25 'i' ( temp int) +0:25 Function Call: type1::memFun1(vi3; ( temp int) +0:25 'T' ( temp structure{ temp 2-component vector of float bar, temp int var, temp int var2}) +0:? Constant: +0:? 10 (const int) +0:? 11 (const int) +0:? 12 (const int) +0:26 add second child into first child ( temp int) +0:26 'i' ( temp int) +0:26 Function Call: type1::memFun2(i1; ( temp int) +0:26 'T' ( temp structure{ temp 2-component vector of float bar, temp int var, temp int var2}) +0:26 Constant: +0:26 17 (const int) +0:28 Branch: Return with expression +0:? Construct vec4 ( temp 4-component vector of float) +0:28 Convert int to float ( temp float) +0:28 'i' ( temp int) +0:28 Convert int to float ( temp float) +0:28 'i' ( temp int) +0:28 Convert int to float ( temp float) +0:28 'i' ( temp int) +0:28 Convert int to float ( temp float) +0:28 'i' ( temp 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:? 'var' ( global 2-component vector of float) +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 98 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 96 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 9 "type1" + MemberName 9(type1) 0 "bar" + MemberName 9(type1) 1 "var" + MemberName 9(type1) 2 "var2" + Name 16 "type1::memFun1(vi3;" + Name 14 "@this" + Name 15 "var" + Name 22 "type1::memFun2(i1;" + Name 20 "@this" + Name 21 "a" + Name 26 "@main(" + Name 29 "var" + Name 47 "var" + Name 64 "T" + Name 72 "i" + Name 77 "param" + Name 80 "param" + Name 96 "@entryPointOutput" + Decorate 96(@entryPointOutput) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 2 + 8: TypeInt 32 1 + 9(type1): TypeStruct 7(fvec2) 8(int) 8(int) + 10: TypePointer Function 9(type1) + 11: TypeVector 8(int) 3 + 12: TypePointer Function 11(ivec3) + 13: TypeFunction 8(int) 10(ptr) 12(ptr) + 18: TypePointer Function 8(int) + 19: TypeFunction 8(int) 10(ptr) 18(ptr) + 24: TypeVector 6(float) 4 + 25: TypeFunction 24(fvec4) + 28: TypePointer Private 7(fvec2) + 29(var): 28(ptr) Variable Private + 30: 6(float) Constant 1065353216 + 31: 6(float) Constant 1073741824 + 32: 7(fvec2) ConstantComposite 30 31 + 33: TypeInt 32 0 + 34: 33(int) Constant 2 + 37: 8(int) Constant 1 + 41: 8(int) Constant 2 + 48: 8(int) Constant 3 + 49: 11(ivec3) ConstantComposite 37 41 48 + 52: 8(int) Constant 0 + 53: 33(int) Constant 1 + 54: TypePointer Function 6(float) + 66: TypePointer Function 7(fvec2) + 68: 8(int) Constant 7 + 70: 8(int) Constant 9 + 73: 8(int) Constant 10 + 74: 8(int) Constant 11 + 75: 8(int) Constant 12 + 76: 11(ivec3) ConstantComposite 73 74 75 + 79: 8(int) Constant 17 + 95: TypePointer Output 24(fvec4) +96(@entryPointOutput): 95(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + Store 29(var) 32 + 97: 24(fvec4) FunctionCall 26(@main() + Store 96(@entryPointOutput) 97 + Return + FunctionEnd +16(type1::memFun1(vi3;): 8(int) Function None 13 + 14(@this): 10(ptr) FunctionParameter + 15(var): 12(ptr) FunctionParameter + 17: Label + 35: 18(ptr) AccessChain 15(var) 34 + 36: 8(int) Load 35 + 38: 18(ptr) AccessChain 14(@this) 37 + 39: 8(int) Load 38 + 40: 8(int) IAdd 36 39 + 42: 18(ptr) AccessChain 14(@this) 41 + 43: 8(int) Load 42 + 44: 8(int) IAdd 40 43 + ReturnValue 44 + FunctionEnd +22(type1::memFun2(i1;): 8(int) Function None 19 + 20(@this): 10(ptr) FunctionParameter + 21(a): 18(ptr) FunctionParameter + 23: Label + 47(var): 12(ptr) Variable Function + Store 47(var) 49 + 50: 18(ptr) AccessChain 47(var) 34 + 51: 8(int) Load 50 + 55: 54(ptr) AccessChain 20(@this) 52 53 + 56: 6(float) Load 55 + 57: 8(int) ConvertFToS 56 + 58: 8(int) IAdd 51 57 + 59: 18(ptr) AccessChain 20(@this) 41 + 60: 8(int) Load 59 + 61: 8(int) IAdd 58 60 + ReturnValue 61 + FunctionEnd + 26(@main(): 24(fvec4) Function None 25 + 27: Label + 64(T): 10(ptr) Variable Function + 72(i): 18(ptr) Variable Function + 77(param): 12(ptr) Variable Function + 80(param): 18(ptr) Variable Function + 65: 7(fvec2) Load 29(var) + 67: 66(ptr) AccessChain 64(T) 52 + Store 67 65 + 69: 18(ptr) AccessChain 64(T) 37 + Store 69 68 + 71: 18(ptr) AccessChain 64(T) 41 + Store 71 70 + Store 77(param) 76 + 78: 8(int) FunctionCall 16(type1::memFun1(vi3;) 64(T) 77(param) + Store 72(i) 78 + Store 80(param) 79 + 81: 8(int) FunctionCall 22(type1::memFun2(i1;) 64(T) 80(param) + 82: 8(int) Load 72(i) + 83: 8(int) IAdd 82 81 + Store 72(i) 83 + 84: 8(int) Load 72(i) + 85: 6(float) ConvertSToF 84 + 86: 8(int) Load 72(i) + 87: 6(float) ConvertSToF 86 + 88: 8(int) Load 72(i) + 89: 6(float) ConvertSToF 88 + 90: 8(int) Load 72(i) + 91: 6(float) ConvertSToF 90 + 92: 24(fvec4) CompositeConstruct 85 87 89 91 + ReturnValue 92 + FunctionEnd 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 new file mode 100644 index 0000000..9e1db24 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.tx.bracket.frag.out @@ -0,0 +1,715 @@ +hlsl.tx.bracket.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:38 Function Definition: Fn1(vi4; ( temp 4-component vector of int) +0:38 Function Parameters: +0:38 'x' ( in 4-component vector of int) +0:? Sequence +0:38 Branch: Return with expression +0:38 'x' ( in 4-component vector of int) +0:39 Function Definition: Fn1(vu4; ( temp 4-component vector of uint) +0:39 Function Parameters: +0:39 'x' ( in 4-component vector of uint) +0:? Sequence +0:39 Branch: Return with expression +0:39 'x' ( in 4-component vector of uint) +0:40 Function Definition: Fn1(vf4; ( temp 4-component vector of float) +0:40 Function Parameters: +0:40 'x' ( in 4-component vector of float) +0:? Sequence +0:40 Branch: Return with expression +0:40 'x' ( in 4-component vector of float) +0:42 Function Definition: SomeValue( ( temp 4-component vector of float) +0:42 Function Parameters: +0:? Sequence +0:42 Branch: Return with expression +0:42 Convert int to float ( temp 4-component vector of float) +0:42 c4: direct index for structure ( uniform 4-component vector of int) +0:42 '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:42 Constant: +0:42 3 (const uint) +0:45 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color}) +0:45 Function Parameters: +0:? Sequence +0:49 textureFetch ( temp 4-component vector of float) +0:49 'g_tTex1df4' (layout( binding=0) uniform texture1D) +0:49 c1: direct index for structure ( uniform int) +0:49 '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:49 Constant: +0:49 0 (const uint) +0:49 Constant: +0:49 0 (const int) +0:51 Sequence +0:51 move second child to first child ( temp 4-component vector of float) +0:51 'r00' ( temp 4-component vector of float) +0:51 textureFetch ( temp 4-component vector of float) +0:51 'g_tTex1df4' (layout( binding=0) uniform texture1D) +0:51 c1: direct index for structure ( uniform int) +0:51 '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:51 Constant: +0:51 0 (const uint) +0:51 Constant: +0:51 0 (const int) +0:52 Sequence +0:52 move second child to first child ( temp 4-component vector of int) +0:52 'r01' ( temp 4-component vector of int) +0:52 textureFetch ( temp 4-component vector of int) +0:52 'g_tTex1di4' ( uniform itexture1D) +0:52 c1: direct index for structure ( uniform int) +0:52 '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:52 Constant: +0:52 0 (const uint) +0:52 Constant: +0:52 0 (const int) +0:53 Sequence +0:53 move second child to first child ( temp 4-component vector of uint) +0:53 'r02' ( temp 4-component vector of uint) +0:53 textureFetch ( temp 4-component vector of uint) +0:53 'g_tTex1du4' ( uniform utexture1D) +0:53 c1: direct index for structure ( uniform int) +0:53 '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:53 Constant: +0:53 0 (const uint) +0:53 Constant: +0:53 0 (const int) +0:56 Sequence +0:56 move second child to first child ( temp 4-component vector of float) +0:56 'r10' ( temp 4-component vector of float) +0:56 textureFetch ( temp 4-component vector of float) +0:56 'g_tTex2df4' ( uniform texture2D) +0:56 c2: direct index for structure ( uniform 2-component vector of int) +0:56 '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:56 Constant: +0:56 1 (const uint) +0:56 Constant: +0:56 0 (const int) +0:57 Sequence +0:57 move second child to first child ( temp 4-component vector of int) +0:57 'r11' ( temp 4-component vector of int) +0:57 textureFetch ( temp 4-component vector of int) +0:57 'g_tTex2di4' ( uniform itexture2D) +0:57 c2: direct index for structure ( uniform 2-component vector of int) +0:57 '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:57 Constant: +0:57 1 (const uint) +0:57 Constant: +0:57 0 (const int) +0:58 Sequence +0:58 move second child to first child ( temp 4-component vector of uint) +0:58 'r12' ( temp 4-component vector of uint) +0:58 textureFetch ( temp 4-component vector of uint) +0:58 'g_tTex2du4' ( uniform utexture2D) +0:58 c2: direct index for structure ( uniform 2-component vector of int) +0:58 '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:58 Constant: +0:58 1 (const uint) +0:58 Constant: +0:58 0 (const int) +0:61 Sequence +0:61 move second child to first child ( temp 4-component vector of float) +0:61 'r20' ( temp 4-component vector of float) +0:61 textureFetch ( temp 4-component vector of float) +0:61 'g_tTex3df4' ( uniform texture3D) +0:61 c3: direct index for structure ( uniform 3-component vector of int) +0:61 '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:61 Constant: +0:61 2 (const uint) +0:61 Constant: +0:61 0 (const int) +0:62 Sequence +0:62 move second child to first child ( temp 4-component vector of int) +0:62 'r21' ( temp 4-component vector of int) +0:62 textureFetch ( temp 4-component vector of int) +0:62 'g_tTex3di4' ( uniform itexture3D) +0:62 c3: direct index for structure ( uniform 3-component vector of int) +0:62 '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:62 Constant: +0:62 2 (const uint) +0:62 Constant: +0:62 0 (const int) +0:63 Sequence +0:63 move second child to first child ( temp 4-component vector of uint) +0:63 'r22' ( temp 4-component vector of uint) +0:63 textureFetch ( temp 4-component vector of uint) +0:63 'g_tTex3du4' ( uniform utexture3D) +0:63 c3: direct index for structure ( uniform 3-component vector of int) +0:63 '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:63 Constant: +0:63 2 (const uint) +0:63 Constant: +0:63 0 (const int) +0:66 Function Call: Fn1(vf4; ( temp 4-component vector of float) +0:66 textureFetch ( temp 4-component vector of float) +0:66 'g_tTex1df4' (layout( binding=0) uniform texture1D) +0:66 c1: direct index for structure ( uniform int) +0:66 '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:66 Constant: +0:66 0 (const uint) +0:66 Constant: +0:66 0 (const int) +0:67 Function Call: Fn1(vi4; ( temp 4-component vector of int) +0:67 textureFetch ( temp 4-component vector of int) +0:67 'g_tTex1di4' ( uniform itexture1D) +0:67 c1: direct index for structure ( uniform int) +0:67 '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:67 Constant: +0:67 0 (const uint) +0:67 Constant: +0:67 0 (const int) +0:68 Function Call: Fn1(vu4; ( temp 4-component vector of uint) +0:68 textureFetch ( temp 4-component vector of uint) +0:68 'g_tTex1du4' ( uniform utexture1D) +0:68 c1: direct index for structure ( uniform int) +0:68 '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:68 Constant: +0:68 0 (const uint) +0:68 Constant: +0:68 0 (const int) +0:70 move second child to first child ( temp 4-component vector of float) +0:70 Color: direct index for structure ( temp 4-component vector of float) +0:70 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:70 Constant: +0:70 0 (const int) +0:70 Constant: +0:70 1.000000 +0:70 1.000000 +0:70 1.000000 +0:70 1.000000 +0:72 Branch: Return with expression +0:72 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:45 Function Definition: main( ( temp void) +0:45 Function Parameters: +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: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:? '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_tTex3df4' ( uniform texture3D) +0:? 'g_tTex3di4' ( uniform itexture3D) +0:? 'g_tTex3du4' ( uniform utexture3D) +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:? '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) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:38 Function Definition: Fn1(vi4; ( temp 4-component vector of int) +0:38 Function Parameters: +0:38 'x' ( in 4-component vector of int) +0:? Sequence +0:38 Branch: Return with expression +0:38 'x' ( in 4-component vector of int) +0:39 Function Definition: Fn1(vu4; ( temp 4-component vector of uint) +0:39 Function Parameters: +0:39 'x' ( in 4-component vector of uint) +0:? Sequence +0:39 Branch: Return with expression +0:39 'x' ( in 4-component vector of uint) +0:40 Function Definition: Fn1(vf4; ( temp 4-component vector of float) +0:40 Function Parameters: +0:40 'x' ( in 4-component vector of float) +0:? Sequence +0:40 Branch: Return with expression +0:40 'x' ( in 4-component vector of float) +0:42 Function Definition: SomeValue( ( temp 4-component vector of float) +0:42 Function Parameters: +0:? Sequence +0:42 Branch: Return with expression +0:42 Convert int to float ( temp 4-component vector of float) +0:42 c4: direct index for structure ( uniform 4-component vector of int) +0:42 '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:42 Constant: +0:42 3 (const uint) +0:45 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color}) +0:45 Function Parameters: +0:? Sequence +0:49 textureFetch ( temp 4-component vector of float) +0:49 'g_tTex1df4' (layout( binding=0) uniform texture1D) +0:49 c1: direct index for structure ( uniform int) +0:49 '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:49 Constant: +0:49 0 (const uint) +0:49 Constant: +0:49 0 (const int) +0:51 Sequence +0:51 move second child to first child ( temp 4-component vector of float) +0:51 'r00' ( temp 4-component vector of float) +0:51 textureFetch ( temp 4-component vector of float) +0:51 'g_tTex1df4' (layout( binding=0) uniform texture1D) +0:51 c1: direct index for structure ( uniform int) +0:51 '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:51 Constant: +0:51 0 (const uint) +0:51 Constant: +0:51 0 (const int) +0:52 Sequence +0:52 move second child to first child ( temp 4-component vector of int) +0:52 'r01' ( temp 4-component vector of int) +0:52 textureFetch ( temp 4-component vector of int) +0:52 'g_tTex1di4' ( uniform itexture1D) +0:52 c1: direct index for structure ( uniform int) +0:52 '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:52 Constant: +0:52 0 (const uint) +0:52 Constant: +0:52 0 (const int) +0:53 Sequence +0:53 move second child to first child ( temp 4-component vector of uint) +0:53 'r02' ( temp 4-component vector of uint) +0:53 textureFetch ( temp 4-component vector of uint) +0:53 'g_tTex1du4' ( uniform utexture1D) +0:53 c1: direct index for structure ( uniform int) +0:53 '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:53 Constant: +0:53 0 (const uint) +0:53 Constant: +0:53 0 (const int) +0:56 Sequence +0:56 move second child to first child ( temp 4-component vector of float) +0:56 'r10' ( temp 4-component vector of float) +0:56 textureFetch ( temp 4-component vector of float) +0:56 'g_tTex2df4' ( uniform texture2D) +0:56 c2: direct index for structure ( uniform 2-component vector of int) +0:56 '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:56 Constant: +0:56 1 (const uint) +0:56 Constant: +0:56 0 (const int) +0:57 Sequence +0:57 move second child to first child ( temp 4-component vector of int) +0:57 'r11' ( temp 4-component vector of int) +0:57 textureFetch ( temp 4-component vector of int) +0:57 'g_tTex2di4' ( uniform itexture2D) +0:57 c2: direct index for structure ( uniform 2-component vector of int) +0:57 '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:57 Constant: +0:57 1 (const uint) +0:57 Constant: +0:57 0 (const int) +0:58 Sequence +0:58 move second child to first child ( temp 4-component vector of uint) +0:58 'r12' ( temp 4-component vector of uint) +0:58 textureFetch ( temp 4-component vector of uint) +0:58 'g_tTex2du4' ( uniform utexture2D) +0:58 c2: direct index for structure ( uniform 2-component vector of int) +0:58 '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:58 Constant: +0:58 1 (const uint) +0:58 Constant: +0:58 0 (const int) +0:61 Sequence +0:61 move second child to first child ( temp 4-component vector of float) +0:61 'r20' ( temp 4-component vector of float) +0:61 textureFetch ( temp 4-component vector of float) +0:61 'g_tTex3df4' ( uniform texture3D) +0:61 c3: direct index for structure ( uniform 3-component vector of int) +0:61 '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:61 Constant: +0:61 2 (const uint) +0:61 Constant: +0:61 0 (const int) +0:62 Sequence +0:62 move second child to first child ( temp 4-component vector of int) +0:62 'r21' ( temp 4-component vector of int) +0:62 textureFetch ( temp 4-component vector of int) +0:62 'g_tTex3di4' ( uniform itexture3D) +0:62 c3: direct index for structure ( uniform 3-component vector of int) +0:62 '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:62 Constant: +0:62 2 (const uint) +0:62 Constant: +0:62 0 (const int) +0:63 Sequence +0:63 move second child to first child ( temp 4-component vector of uint) +0:63 'r22' ( temp 4-component vector of uint) +0:63 textureFetch ( temp 4-component vector of uint) +0:63 'g_tTex3du4' ( uniform utexture3D) +0:63 c3: direct index for structure ( uniform 3-component vector of int) +0:63 '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:63 Constant: +0:63 2 (const uint) +0:63 Constant: +0:63 0 (const int) +0:66 Function Call: Fn1(vf4; ( temp 4-component vector of float) +0:66 textureFetch ( temp 4-component vector of float) +0:66 'g_tTex1df4' (layout( binding=0) uniform texture1D) +0:66 c1: direct index for structure ( uniform int) +0:66 '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:66 Constant: +0:66 0 (const uint) +0:66 Constant: +0:66 0 (const int) +0:67 Function Call: Fn1(vi4; ( temp 4-component vector of int) +0:67 textureFetch ( temp 4-component vector of int) +0:67 'g_tTex1di4' ( uniform itexture1D) +0:67 c1: direct index for structure ( uniform int) +0:67 '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:67 Constant: +0:67 0 (const uint) +0:67 Constant: +0:67 0 (const int) +0:68 Function Call: Fn1(vu4; ( temp 4-component vector of uint) +0:68 textureFetch ( temp 4-component vector of uint) +0:68 'g_tTex1du4' ( uniform utexture1D) +0:68 c1: direct index for structure ( uniform int) +0:68 '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:68 Constant: +0:68 0 (const uint) +0:68 Constant: +0:68 0 (const int) +0:70 move second child to first child ( temp 4-component vector of float) +0:70 Color: direct index for structure ( temp 4-component vector of float) +0:70 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:70 Constant: +0:70 0 (const int) +0:70 Constant: +0:70 1.000000 +0:70 1.000000 +0:70 1.000000 +0:70 1.000000 +0:72 Branch: Return with expression +0:72 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:45 Function Definition: main( ( temp void) +0:45 Function Parameters: +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: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:? '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_tTex3df4' ( uniform texture3D) +0:? 'g_tTex3di4' ( uniform itexture3D) +0:? 'g_tTex3du4' ( uniform utexture3D) +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:? '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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 188 + + Capability Shader + Capability Sampled1D + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 164 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 11 "Fn1(vi4;" + Name 10 "x" + Name 18 "Fn1(vu4;" + Name 17 "x" + Name 25 "Fn1(vf4;" + Name 24 "x" + Name 28 "SomeValue(" + Name 30 "PS_OUTPUT" + MemberName 30(PS_OUTPUT) 0 "Color" + Name 32 "@main(" + Name 45 "$Global" + MemberName 45($Global) 0 "c1" + MemberName 45($Global) 1 "c2" + MemberName 45($Global) 2 "c3" + MemberName 45($Global) 3 "c4" + MemberName 45($Global) 4 "o1" + MemberName 45($Global) 5 "o2" + MemberName 45($Global) 6 "o3" + MemberName 45($Global) 7 "o4" + Name 47 "" + Name 57 "g_tTex1df4" + Name 64 "r00" + Name 69 "r01" + Name 72 "g_tTex1di4" + Name 77 "r02" + Name 80 "g_tTex1du4" + Name 85 "r10" + Name 88 "g_tTex2df4" + Name 95 "r11" + Name 98 "g_tTex2di4" + Name 103 "r12" + Name 106 "g_tTex2du4" + Name 111 "r20" + Name 114 "g_tTex3df4" + Name 121 "r21" + Name 124 "g_tTex3di4" + Name 129 "r22" + Name 132 "g_tTex3du4" + Name 141 "param" + Name 147 "param" + Name 153 "param" + Name 156 "psout" + Name 164 "Color" + Name 169 "g_sSamp" + Name 172 "g_tTex1df4a" + Name 175 "g_tTex1di4a" + Name 178 "g_tTex1du4a" + Name 181 "g_tTex2df4a" + Name 184 "g_tTex2di4a" + Name 187 "g_tTex2du4a" + MemberDecorate 45($Global) 0 Offset 0 + MemberDecorate 45($Global) 1 Offset 8 + MemberDecorate 45($Global) 2 Offset 16 + MemberDecorate 45($Global) 3 Offset 32 + MemberDecorate 45($Global) 4 Offset 48 + MemberDecorate 45($Global) 5 Offset 56 + MemberDecorate 45($Global) 6 Offset 64 + MemberDecorate 45($Global) 7 Offset 80 + Decorate 45($Global) Block + Decorate 47 DescriptorSet 0 + Decorate 57(g_tTex1df4) DescriptorSet 0 + Decorate 57(g_tTex1df4) Binding 0 + Decorate 72(g_tTex1di4) DescriptorSet 0 + Decorate 80(g_tTex1du4) DescriptorSet 0 + Decorate 88(g_tTex2df4) DescriptorSet 0 + Decorate 98(g_tTex2di4) DescriptorSet 0 + Decorate 106(g_tTex2du4) DescriptorSet 0 + Decorate 114(g_tTex3df4) DescriptorSet 0 + Decorate 124(g_tTex3di4) DescriptorSet 0 + Decorate 132(g_tTex3du4) DescriptorSet 0 + Decorate 164(Color) Location 0 + Decorate 169(g_sSamp) DescriptorSet 0 + Decorate 169(g_sSamp) Binding 0 + Decorate 172(g_tTex1df4a) DescriptorSet 0 + Decorate 175(g_tTex1di4a) DescriptorSet 0 + Decorate 178(g_tTex1du4a) DescriptorSet 0 + Decorate 181(g_tTex2df4a) DescriptorSet 0 + Decorate 184(g_tTex2di4a) DescriptorSet 0 + Decorate 187(g_tTex2du4a) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypeVector 6(int) 4 + 8: TypePointer Function 7(ivec4) + 9: TypeFunction 7(ivec4) 8(ptr) + 13: TypeInt 32 0 + 14: TypeVector 13(int) 4 + 15: TypePointer Function 14(ivec4) + 16: TypeFunction 14(ivec4) 15(ptr) + 20: TypeFloat 32 + 21: TypeVector 20(float) 4 + 22: TypePointer Function 21(fvec4) + 23: TypeFunction 21(fvec4) 22(ptr) + 27: TypeFunction 21(fvec4) + 30(PS_OUTPUT): TypeStruct 21(fvec4) + 31: TypeFunction 30(PS_OUTPUT) + 43: TypeVector 6(int) 2 + 44: TypeVector 6(int) 3 + 45($Global): TypeStruct 6(int) 43(ivec2) 44(ivec3) 7(ivec4) 6(int) 43(ivec2) 44(ivec3) 7(ivec4) + 46: TypePointer Uniform 45($Global) + 47: 46(ptr) Variable Uniform + 48: 6(int) Constant 3 + 49: TypePointer Uniform 7(ivec4) + 55: TypeImage 20(float) 1D sampled format:Unknown + 56: TypePointer UniformConstant 55 + 57(g_tTex1df4): 56(ptr) Variable UniformConstant + 59: 6(int) Constant 0 + 60: TypePointer Uniform 6(int) + 70: TypeImage 6(int) 1D sampled format:Unknown + 71: TypePointer UniformConstant 70 + 72(g_tTex1di4): 71(ptr) Variable UniformConstant + 78: TypeImage 13(int) 1D sampled format:Unknown + 79: TypePointer UniformConstant 78 + 80(g_tTex1du4): 79(ptr) Variable UniformConstant + 86: TypeImage 20(float) 2D sampled format:Unknown + 87: TypePointer UniformConstant 86 + 88(g_tTex2df4): 87(ptr) Variable UniformConstant + 90: 6(int) Constant 1 + 91: TypePointer Uniform 43(ivec2) + 96: TypeImage 6(int) 2D sampled format:Unknown + 97: TypePointer UniformConstant 96 + 98(g_tTex2di4): 97(ptr) Variable UniformConstant + 104: TypeImage 13(int) 2D sampled format:Unknown + 105: TypePointer UniformConstant 104 + 106(g_tTex2du4): 105(ptr) Variable UniformConstant + 112: TypeImage 20(float) 3D sampled format:Unknown + 113: TypePointer UniformConstant 112 + 114(g_tTex3df4): 113(ptr) Variable UniformConstant + 116: 6(int) Constant 2 + 117: TypePointer Uniform 44(ivec3) + 122: TypeImage 6(int) 3D sampled format:Unknown + 123: TypePointer UniformConstant 122 + 124(g_tTex3di4): 123(ptr) Variable UniformConstant + 130: TypeImage 13(int) 3D sampled format:Unknown + 131: TypePointer UniformConstant 130 + 132(g_tTex3du4): 131(ptr) Variable UniformConstant + 155: TypePointer Function 30(PS_OUTPUT) + 157: 20(float) Constant 1065353216 + 158: 21(fvec4) ConstantComposite 157 157 157 157 + 163: TypePointer Output 21(fvec4) + 164(Color): 163(ptr) Variable Output + 167: TypeSampler + 168: TypePointer UniformConstant 167 + 169(g_sSamp): 168(ptr) Variable UniformConstant + 170: TypeImage 20(float) 1D array sampled format:Unknown + 171: TypePointer UniformConstant 170 +172(g_tTex1df4a): 171(ptr) Variable UniformConstant + 173: TypeImage 6(int) 1D array sampled format:Unknown + 174: TypePointer UniformConstant 173 +175(g_tTex1di4a): 174(ptr) Variable UniformConstant + 176: TypeImage 13(int) 1D array sampled format:Unknown + 177: TypePointer UniformConstant 176 +178(g_tTex1du4a): 177(ptr) Variable UniformConstant + 179: TypeImage 20(float) 2D array sampled format:Unknown + 180: TypePointer UniformConstant 179 +181(g_tTex2df4a): 180(ptr) Variable UniformConstant + 182: TypeImage 6(int) 2D array sampled format:Unknown + 183: TypePointer UniformConstant 182 +184(g_tTex2di4a): 183(ptr) Variable UniformConstant + 185: TypeImage 13(int) 2D array sampled format:Unknown + 186: TypePointer UniformConstant 185 +187(g_tTex2du4a): 186(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label + 165:30(PS_OUTPUT) FunctionCall 32(@main() + 166: 21(fvec4) CompositeExtract 165 0 + Store 164(Color) 166 + Return + FunctionEnd + 11(Fn1(vi4;): 7(ivec4) Function None 9 + 10(x): 8(ptr) FunctionParameter + 12: Label + 34: 7(ivec4) Load 10(x) + ReturnValue 34 + FunctionEnd + 18(Fn1(vu4;): 14(ivec4) Function None 16 + 17(x): 15(ptr) FunctionParameter + 19: Label + 37: 14(ivec4) Load 17(x) + ReturnValue 37 + FunctionEnd + 25(Fn1(vf4;): 21(fvec4) Function None 23 + 24(x): 22(ptr) FunctionParameter + 26: Label + 40: 21(fvec4) Load 24(x) + ReturnValue 40 + FunctionEnd + 28(SomeValue(): 21(fvec4) Function None 27 + 29: Label + 50: 49(ptr) AccessChain 47 48 + 51: 7(ivec4) Load 50 + 52: 21(fvec4) ConvertSToF 51 + ReturnValue 52 + FunctionEnd + 32(@main():30(PS_OUTPUT) Function None 31 + 33: Label + 64(r00): 22(ptr) Variable Function + 69(r01): 8(ptr) Variable Function + 77(r02): 15(ptr) Variable Function + 85(r10): 22(ptr) Variable Function + 95(r11): 8(ptr) Variable Function + 103(r12): 15(ptr) Variable Function + 111(r20): 22(ptr) Variable Function + 121(r21): 8(ptr) Variable Function + 129(r22): 15(ptr) Variable Function + 141(param): 22(ptr) Variable Function + 147(param): 8(ptr) Variable Function + 153(param): 15(ptr) Variable Function + 156(psout): 155(ptr) Variable Function + 58: 55 Load 57(g_tTex1df4) + 61: 60(ptr) AccessChain 47 59 + 62: 6(int) Load 61 + 63: 21(fvec4) ImageFetch 58 62 Lod 59 + 65: 55 Load 57(g_tTex1df4) + 66: 60(ptr) AccessChain 47 59 + 67: 6(int) Load 66 + 68: 21(fvec4) ImageFetch 65 67 Lod 59 + Store 64(r00) 68 + 73: 70 Load 72(g_tTex1di4) + 74: 60(ptr) AccessChain 47 59 + 75: 6(int) Load 74 + 76: 7(ivec4) ImageFetch 73 75 Lod 59 + Store 69(r01) 76 + 81: 78 Load 80(g_tTex1du4) + 82: 60(ptr) AccessChain 47 59 + 83: 6(int) Load 82 + 84: 14(ivec4) ImageFetch 81 83 Lod 59 + Store 77(r02) 84 + 89: 86 Load 88(g_tTex2df4) + 92: 91(ptr) AccessChain 47 90 + 93: 43(ivec2) Load 92 + 94: 21(fvec4) ImageFetch 89 93 Lod 59 + Store 85(r10) 94 + 99: 96 Load 98(g_tTex2di4) + 100: 91(ptr) AccessChain 47 90 + 101: 43(ivec2) Load 100 + 102: 7(ivec4) ImageFetch 99 101 Lod 59 + Store 95(r11) 102 + 107: 104 Load 106(g_tTex2du4) + 108: 91(ptr) AccessChain 47 90 + 109: 43(ivec2) Load 108 + 110: 14(ivec4) ImageFetch 107 109 Lod 59 + Store 103(r12) 110 + 115: 112 Load 114(g_tTex3df4) + 118: 117(ptr) AccessChain 47 116 + 119: 44(ivec3) Load 118 + 120: 21(fvec4) ImageFetch 115 119 Lod 59 + Store 111(r20) 120 + 125: 122 Load 124(g_tTex3di4) + 126: 117(ptr) AccessChain 47 116 + 127: 44(ivec3) Load 126 + 128: 7(ivec4) ImageFetch 125 127 Lod 59 + Store 121(r21) 128 + 133: 130 Load 132(g_tTex3du4) + 134: 117(ptr) AccessChain 47 116 + 135: 44(ivec3) Load 134 + 136: 14(ivec4) ImageFetch 133 135 Lod 59 + Store 129(r22) 136 + 137: 55 Load 57(g_tTex1df4) + 138: 60(ptr) AccessChain 47 59 + 139: 6(int) Load 138 + 140: 21(fvec4) ImageFetch 137 139 Lod 59 + Store 141(param) 140 + 142: 21(fvec4) FunctionCall 25(Fn1(vf4;) 141(param) + 143: 70 Load 72(g_tTex1di4) + 144: 60(ptr) AccessChain 47 59 + 145: 6(int) Load 144 + 146: 7(ivec4) ImageFetch 143 145 Lod 59 + Store 147(param) 146 + 148: 7(ivec4) FunctionCall 11(Fn1(vi4;) 147(param) + 149: 78 Load 80(g_tTex1du4) + 150: 60(ptr) AccessChain 47 59 + 151: 6(int) Load 150 + 152: 14(ivec4) ImageFetch 149 151 Lod 59 + Store 153(param) 152 + 154: 14(ivec4) FunctionCall 18(Fn1(vu4;) 153(param) + 159: 22(ptr) AccessChain 156(psout) 59 + Store 159 158 + 160:30(PS_OUTPUT) Load 156(psout) + ReturnValue 160 + 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 new file mode 100644 index 0000000..104c739 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.type.half.frag.out @@ -0,0 +1,174 @@ +hlsl.type.half.frag +Shader version: 450 +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 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 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 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 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 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: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: 450 +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 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 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 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 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 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: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): 80001 +// Id's are bound by 36 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 34 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 9 "@main(" + Name 12 "h0" + Name 14 "h1" + 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 + 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 0 + 15: 6(float) Constant 1065353216 + 16: TypeVector 6(float) 2 + 17: TypePointer Function 16(fvec2) + 19: 6(float) Constant 1073741824 + 20: 16(fvec2) ConstantComposite 19 19 + 21: TypeVector 6(float) 3 + 22: TypePointer Function 21(fvec3) + 24: 6(float) Constant 1077936128 + 25: 21(fvec3) ConstantComposite 24 24 24 + 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 + 4(main): 2 Function None 3 + 5: Label + 35: 7(fvec4) FunctionCall 9(@main() + Store 34(@entryPointOutput) 35 + Return + FunctionEnd + 9(@main(): 7(fvec4) Function None 8 + 10: Label + 12(h0): 11(ptr) Variable Function + 14(h1): 11(ptr) Variable Function + 18(h2): 17(ptr) Variable Function + 23(h3): 22(ptr) Variable Function + 27(h4): 26(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 + 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 new file mode 100644 index 0000000..e8a763c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.type.identifier.frag.out @@ -0,0 +1,395 @@ +hlsl.type.identifier.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:6 Function Definition: fn(f1; ( temp float) +0:6 Function Parameters: +0:6 'float' ( in float) +0:? Sequence +0:6 Branch: Return with expression +0:6 'float' ( in float) +0:9 Function Definition: @main( ( temp 4-component vector of float) +0:9 Function Parameters: +0:? Sequence +0:10 Sequence +0:10 move second child to first child ( temp float) +0:10 'float' ( temp float) +0:10 Constant: +0:10 7.000000 +0:11 Sequence +0:11 move second child to first child ( temp 2-element array of bool) +0:11 'bool' ( temp 2-element array of bool) +0:11 Construct bool ( temp 2-element array of bool) +0:11 Convert float to bool ( temp bool) +0:11 'float' ( temp float) +0:11 Convert float to bool ( temp bool) +0:11 'float' ( temp float) +0:12 Sequence +0:12 move second child to first child ( temp int) +0:12 'int' ( temp int) +0:12 Convert bool to int ( temp int) +0:12 direct index ( temp bool) +0:12 'bool' ( temp 2-element array of bool) +0:12 Constant: +0:12 1 (const int) +0:13 Sequence +0:13 move second child to first child ( temp uint) +0:13 'uint' ( temp uint) +0:13 Convert float to uint ( temp uint) +0:13 add ( temp float) +0:13 'float' ( temp float) +0:13 Convert int to float ( temp float) +0:13 'int' ( temp int) +0:14 Sequence +0:14 move second child to first child ( temp mediump float) +0:14 'min16float' ( temp mediump float) +0:14 Convert uint to float ( temp mediump float) +0:14 'uint' ( temp mediump uint) +0:15 Sequence +0:15 move second child to first child ( temp mediump float) +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 Constant: +0:16 0.500000 +0:? Sequence +0:20 move second child to first child ( temp float) +0:20 float: direct index for structure ( temp float) +0:20 'float' ( temp structure{ temp float float}) +0:20 Constant: +0:20 0 (const int) +0:20 Constant: +0:20 42.000000 +0:23 move second child to first child ( temp bool) +0:23 direct index ( temp bool) +0:23 'bool' ( temp 2-element array of bool) +0:23 Constant: +0:23 0 (const int) +0:23 direct index ( temp bool) +0:23 'bool' ( temp 2-element array of bool) +0:23 Constant: +0:23 1 (const int) +0:25 move second child to first child ( temp mediump float) +0:25 'float' ( temp mediump float) +0:25 add ( temp mediump float) +0:25 add ( temp mediump float) +0:25 add ( temp mediump float) +0:25 add ( temp mediump float) +0:25 add ( temp mediump float) +0:25 add ( temp mediump float) +0:25 'float' ( temp mediump float) +0:25 Convert int to float ( temp mediump float) +0:25 'int' ( temp mediump int) +0:25 Convert uint to float ( temp mediump float) +0:25 'uint' ( temp mediump uint) +0:25 'min16float' ( temp mediump float) +0:25 'min10float' ( temp mediump float) +0:25 Test condition and select ( temp mediump float) +0:25 Condition +0:25 direct index ( temp bool) +0:25 'bool' ( temp 2-element array of bool) +0:25 Constant: +0:25 0 (const int) +0:25 true case +0:25 Convert int to float ( temp mediump float) +0:25 'int' ( temp mediump int) +0:25 false case +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: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:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) +0:9 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: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:6 Function Definition: fn(f1; ( temp float) +0:6 Function Parameters: +0:6 'float' ( in float) +0:? Sequence +0:6 Branch: Return with expression +0:6 'float' ( in float) +0:9 Function Definition: @main( ( temp 4-component vector of float) +0:9 Function Parameters: +0:? Sequence +0:10 Sequence +0:10 move second child to first child ( temp float) +0:10 'float' ( temp float) +0:10 Constant: +0:10 7.000000 +0:11 Sequence +0:11 move second child to first child ( temp 2-element array of bool) +0:11 'bool' ( temp 2-element array of bool) +0:11 Construct bool ( temp 2-element array of bool) +0:11 Convert float to bool ( temp bool) +0:11 'float' ( temp float) +0:11 Convert float to bool ( temp bool) +0:11 'float' ( temp float) +0:12 Sequence +0:12 move second child to first child ( temp int) +0:12 'int' ( temp int) +0:12 Convert bool to int ( temp int) +0:12 direct index ( temp bool) +0:12 'bool' ( temp 2-element array of bool) +0:12 Constant: +0:12 1 (const int) +0:13 Sequence +0:13 move second child to first child ( temp uint) +0:13 'uint' ( temp uint) +0:13 Convert float to uint ( temp uint) +0:13 add ( temp float) +0:13 'float' ( temp float) +0:13 Convert int to float ( temp float) +0:13 'int' ( temp int) +0:14 Sequence +0:14 move second child to first child ( temp mediump float) +0:14 'min16float' ( temp mediump float) +0:14 Convert uint to float ( temp mediump float) +0:14 'uint' ( temp mediump uint) +0:15 Sequence +0:15 move second child to first child ( temp mediump float) +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 Constant: +0:16 0.500000 +0:? Sequence +0:20 move second child to first child ( temp float) +0:20 float: direct index for structure ( temp float) +0:20 'float' ( temp structure{ temp float float}) +0:20 Constant: +0:20 0 (const int) +0:20 Constant: +0:20 42.000000 +0:23 move second child to first child ( temp bool) +0:23 direct index ( temp bool) +0:23 'bool' ( temp 2-element array of bool) +0:23 Constant: +0:23 0 (const int) +0:23 direct index ( temp bool) +0:23 'bool' ( temp 2-element array of bool) +0:23 Constant: +0:23 1 (const int) +0:25 move second child to first child ( temp mediump float) +0:25 'float' ( temp mediump float) +0:25 add ( temp mediump float) +0:25 add ( temp mediump float) +0:25 add ( temp mediump float) +0:25 add ( temp mediump float) +0:25 add ( temp mediump float) +0:25 add ( temp mediump float) +0:25 'float' ( temp mediump float) +0:25 Convert int to float ( temp mediump float) +0:25 'int' ( temp mediump int) +0:25 Convert uint to float ( temp mediump float) +0:25 'uint' ( temp mediump uint) +0:25 'min16float' ( temp mediump float) +0:25 'min10float' ( temp mediump float) +0:25 Test condition and select ( temp mediump float) +0:25 Condition +0:25 direct index ( temp bool) +0:25 'bool' ( temp 2-element array of bool) +0:25 Constant: +0:25 0 (const int) +0:25 true case +0:25 Convert int to float ( temp mediump float) +0:25 'int' ( temp mediump int) +0:25 false case +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: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:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) +0:9 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): 80001 +// Id's are bound by 97 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 95 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 10 "fn(f1;" + Name 9 "float" + Name 14 "@main(" + Name 19 "float" + Name 26 "bool" + Name 35 "int" + Name 43 "uint" + Name 49 "min16float" + Name 52 "min10float" + Name 54 "half" + Name 56 "foo_t" + MemberName 56(foo_t) 0 "float" + Name 58 "float" + Name 86 "param" + Name 95 "@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 + Decorate 67 RelaxedPrecision + Decorate 68 RelaxedPrecision + Decorate 69 RelaxedPrecision + Decorate 70 RelaxedPrecision + Decorate 71 RelaxedPrecision + Decorate 72 RelaxedPrecision + Decorate 73 RelaxedPrecision + Decorate 74 RelaxedPrecision + Decorate 80 RelaxedPrecision + Decorate 81 RelaxedPrecision + Decorate 83 RelaxedPrecision + Decorate 84 RelaxedPrecision + Decorate 85 RelaxedPrecision + Decorate 87 RelaxedPrecision + Decorate 88 RelaxedPrecision + Decorate 89 RelaxedPrecision + Decorate 95(@entryPointOutput) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypePointer Function 6(float) + 8: TypeFunction 6(float) 7(ptr) + 12: TypeVector 6(float) 4 + 13: TypeFunction 12(fvec4) + 20: 6(float) Constant 1088421888 + 21: TypeBool + 22: TypeInt 32 0 + 23: 22(int) Constant 2 + 24: TypeArray 21(bool) 23 + 25: TypePointer Function 24 + 28: 6(float) Constant 0 + 33: TypeInt 32 1 + 34: TypePointer Function 33(int) + 36: 33(int) Constant 1 + 37: TypePointer Function 21(bool) + 40: 33(int) Constant 0 + 42: TypePointer Function 22(int) + 55: 6(float) Constant 1056964608 + 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 + 4(main): 2 Function None 3 + 5: Label + 96: 12(fvec4) FunctionCall 14(@main() + Store 95(@entryPointOutput) 96 + Return + FunctionEnd + 10(fn(f1;): 6(float) Function None 8 + 9(float): 7(ptr) FunctionParameter + 11: Label + 16: 6(float) Load 9(float) + ReturnValue 16 + FunctionEnd + 14(@main(): 12(fvec4) Function None 13 + 15: Label + 19(float): 7(ptr) Variable Function + 26(bool): 25(ptr) Variable Function + 35(int): 34(ptr) Variable Function + 43(uint): 42(ptr) Variable Function + 49(min16float): 7(ptr) Variable Function + 52(min10float): 7(ptr) Variable Function + 54(half): 7(ptr) Variable Function + 58(float): 57(ptr) Variable Function + 75: 7(ptr) Variable Function + 86(param): 7(ptr) Variable Function + Store 19(float) 20 + 27: 6(float) Load 19(float) + 29: 21(bool) FOrdNotEqual 27 28 + 30: 6(float) Load 19(float) + 31: 21(bool) FOrdNotEqual 30 28 + 32: 24 CompositeConstruct 29 31 + Store 26(bool) 32 + 38: 37(ptr) AccessChain 26(bool) 36 + 39: 21(bool) Load 38 + 41: 33(int) Select 39 36 40 + Store 35(int) 41 + 44: 6(float) Load 19(float) + 45: 33(int) Load 35(int) + 46: 6(float) ConvertSToF 45 + 47: 6(float) FAdd 44 46 + 48: 22(int) ConvertFToU 47 + Store 43(uint) 48 + 50: 22(int) Load 43(uint) + 51: 6(float) ConvertUToF 50 + Store 49(min16float) 51 + 53: 6(float) Load 49(min16float) + Store 52(min10float) 53 + Store 54(half) 55 + 60: 7(ptr) AccessChain 58(float) 40 + Store 60 59 + 61: 37(ptr) AccessChain 26(bool) 36 + 62: 21(bool) Load 61 + 63: 37(ptr) AccessChain 26(bool) 40 + Store 63 62 + 64: 6(float) Load 19(float) + 65: 33(int) Load 35(int) + 66: 6(float) ConvertSToF 65 + 67: 6(float) FAdd 64 66 + 68: 22(int) Load 43(uint) + 69: 6(float) ConvertUToF 68 + 70: 6(float) FAdd 67 69 + 71: 6(float) Load 49(min16float) + 72: 6(float) FAdd 70 71 + 73: 6(float) Load 52(min10float) + 74: 6(float) FAdd 72 73 + 76: 37(ptr) AccessChain 26(bool) 40 + 77: 21(bool) Load 76 + SelectionMerge 79 None + BranchConditional 77 78 82 + 78: Label + 80: 33(int) Load 35(int) + 81: 6(float) ConvertSToF 80 + Store 75 81 + Branch 79 + 82: Label + 83: 6(float) Load 19(float) + Store 75 83 + Branch 79 + 79: Label + 84: 6(float) Load 75 + 85: 6(float) FAdd 74 84 + 87: 6(float) Load 19(float) + Store 86(param) 87 + 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 + 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 new file mode 100755 index 0000000..7d55c44 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.typeGraphCopy.vert.out @@ -0,0 +1,127 @@ +hlsl.typeGraphCopy.vert +Shader version: 450 +0:? Sequence +0:22 Function Definition: @main( ( temp float) +0:22 Function Parameters: +0:? Sequence +0:23 Branch: Return with expression +0:23 b: direct index for structure ( temp float) +0:23 s2: direct index for structure ( temp structure{ temp int a, temp float b}) +0:23 t3: direct index for structure ( temp structure{ temp structure{ temp int a, temp float b} s1, temp structure{ temp int a, temp float b} s2}) +0:23 foo: direct index for structure ( uniform structure{ temp structure{ temp structure{ temp int a, temp float b} s1, temp structure{ temp int a, temp float b} s2} t1, temp structure{ temp int a, temp float b} t2, temp structure{ temp structure{ temp int a, temp float b} s1, temp structure{ temp int a, temp float b} s2} t3}) +0:23 'anon@0' (layout( row_major std140) uniform block{ uniform structure{ temp structure{ temp structure{ temp int a, temp float b} s1, temp structure{ temp int a, temp float b} s2} t1, temp structure{ temp int a, temp float b} t2, temp structure{ temp structure{ temp int a, temp float b} s1, temp structure{ temp int a, temp float b} s2} t3} foo}) +0:23 Constant: +0:23 0 (const uint) +0:23 Constant: +0:23 2 (const int) +0:23 Constant: +0:23 1 (const int) +0:23 Constant: +0:23 1 (const int) +0:22 Function Definition: main( ( temp void) +0:22 Function Parameters: +0:? Sequence +0:22 move second child to first child ( temp float) +0:? '@entryPointOutput' (layout( location=0) out float) +0:22 Function Call: @main( ( temp float) +0:? Linker Objects +0:? 'anon@0' (layout( row_major std140) uniform block{ uniform structure{ temp structure{ temp structure{ temp int a, temp float b} s1, temp structure{ temp int a, temp float b} s2} t1, temp structure{ temp int a, temp float b} t2, temp structure{ temp structure{ temp int a, temp float b} s1, temp structure{ temp int a, temp float b} s2} t3} foo}) +0:? '@entryPointOutput' (layout( location=0) out float) + + +Linked vertex stage: + + +Shader version: 450 +0:? Sequence +0:22 Function Definition: @main( ( temp float) +0:22 Function Parameters: +0:? Sequence +0:23 Branch: Return with expression +0:23 b: direct index for structure ( temp float) +0:23 s2: direct index for structure ( temp structure{ temp int a, temp float b}) +0:23 t3: direct index for structure ( temp structure{ temp structure{ temp int a, temp float b} s1, temp structure{ temp int a, temp float b} s2}) +0:23 foo: direct index for structure ( uniform structure{ temp structure{ temp structure{ temp int a, temp float b} s1, temp structure{ temp int a, temp float b} s2} t1, temp structure{ temp int a, temp float b} t2, temp structure{ temp structure{ temp int a, temp float b} s1, temp structure{ temp int a, temp float b} s2} t3}) +0:23 'anon@0' (layout( row_major std140) uniform block{ uniform structure{ temp structure{ temp structure{ temp int a, temp float b} s1, temp structure{ temp int a, temp float b} s2} t1, temp structure{ temp int a, temp float b} t2, temp structure{ temp structure{ temp int a, temp float b} s1, temp structure{ temp int a, temp float b} s2} t3} foo}) +0:23 Constant: +0:23 0 (const uint) +0:23 Constant: +0:23 2 (const int) +0:23 Constant: +0:23 1 (const int) +0:23 Constant: +0:23 1 (const int) +0:22 Function Definition: main( ( temp void) +0:22 Function Parameters: +0:? Sequence +0:22 move second child to first child ( temp float) +0:? '@entryPointOutput' (layout( location=0) out float) +0:22 Function Call: @main( ( temp float) +0:? Linker Objects +0:? 'anon@0' (layout( row_major std140) uniform block{ uniform structure{ temp structure{ temp structure{ temp int a, temp float b} s1, temp structure{ temp int a, temp float b} s2} t1, temp structure{ temp int a, temp float b} t2, temp structure{ temp structure{ temp int a, temp float b} s1, temp structure{ temp int a, temp float b} s2} t3} foo}) +0:? '@entryPointOutput' (layout( location=0) out float) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 28 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 26 + Name 4 "main" + Name 8 "@main(" + Name 11 "N1" + MemberName 11(N1) 0 "a" + MemberName 11(N1) 1 "b" + Name 12 "N2" + MemberName 12(N2) 0 "s1" + MemberName 12(N2) 1 "s2" + Name 13 "N3" + MemberName 13(N3) 0 "t1" + MemberName 13(N3) 1 "t2" + MemberName 13(N3) 2 "t3" + Name 14 "$Global" + MemberName 14($Global) 0 "foo" + Name 16 "" + Name 26 "@entryPointOutput" + MemberDecorate 11(N1) 0 Offset 0 + MemberDecorate 11(N1) 1 Offset 4 + MemberDecorate 12(N2) 0 Offset 0 + MemberDecorate 12(N2) 1 Offset 16 + MemberDecorate 13(N3) 0 Offset 0 + MemberDecorate 13(N3) 1 Offset 32 + MemberDecorate 13(N3) 2 Offset 48 + MemberDecorate 14($Global) 0 Offset 0 + Decorate 14($Global) Block + Decorate 16 DescriptorSet 0 + Decorate 26(@entryPointOutput) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeFunction 6(float) + 10: TypeInt 32 1 + 11(N1): TypeStruct 10(int) 6(float) + 12(N2): TypeStruct 11(N1) 11(N1) + 13(N3): TypeStruct 12(N2) 11(N1) 12(N2) + 14($Global): TypeStruct 13(N3) + 15: TypePointer Uniform 14($Global) + 16: 15(ptr) Variable Uniform + 17: 10(int) Constant 0 + 18: 10(int) Constant 2 + 19: 10(int) Constant 1 + 20: TypePointer Uniform 6(float) + 25: TypePointer Output 6(float) +26(@entryPointOutput): 25(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 27: 6(float) FunctionCall 8(@main() + Store 26(@entryPointOutput) 27 + Return + FunctionEnd + 8(@main(): 6(float) Function None 7 + 9: Label + 21: 20(ptr) AccessChain 16 17 18 19 19 + 22: 6(float) Load 21 + ReturnValue 22 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.typedef.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.typedef.frag.out new file mode 100755 index 0000000..6edb191 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.typedef.frag.out @@ -0,0 +1,133 @@ +hlsl.typedef.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:4 Function Definition: ShaderFunction(vf4;i1; ( temp 4-component vector of float) +0:4 Function Parameters: +0:4 'input' ( in 4-component vector of float) +0:4 'ii' ( in int) +0:? Sequence +0:6 Sequence +0:6 move second child to first child ( temp 4-component vector of float) +0:6 'a1' ( temp 4-component vector of float) +0:6 Constant: +0:6 1.000000 +0:6 1.000000 +0:6 1.000000 +0:6 1.000000 +0:7 Sequence +0:7 move second child to first child ( temp int) +0:7 'i' ( temp int) +0:7 Constant: +0:7 2 (const int) +0:9 Sequence +0:9 move second child to first child ( temp int) +0:9 'j' ( temp int) +0:9 'ii' ( in int) +0:10 Branch: Return with expression +0:10 add ( temp 4-component vector of float) +0:10 component-wise multiply ( temp 4-component vector of float) +0:10 'input' ( in 4-component vector of float) +0:10 'a1' ( temp 4-component vector of float) +0:10 Construct vec4 ( uniform 4-component vector of float) +0:10 Convert int to float ( temp float) +0:10 add ( temp int) +0:10 'i' ( temp int) +0:10 'j' ( temp int) +0:? Linker Objects + + +Linked fragment stage: + +WARNING: Linking fragment stage: Entry point not found + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:4 Function Definition: ShaderFunction(vf4;i1; ( temp 4-component vector of float) +0:4 Function Parameters: +0:4 'input' ( in 4-component vector of float) +0:4 'ii' ( in int) +0:? Sequence +0:6 Sequence +0:6 move second child to first child ( temp 4-component vector of float) +0:6 'a1' ( temp 4-component vector of float) +0:6 Constant: +0:6 1.000000 +0:6 1.000000 +0:6 1.000000 +0:6 1.000000 +0:7 Sequence +0:7 move second child to first child ( temp int) +0:7 'i' ( temp int) +0:7 Constant: +0:7 2 (const int) +0:9 Sequence +0:9 move second child to first child ( temp int) +0:9 'j' ( temp int) +0:9 'ii' ( in int) +0:10 Branch: Return with expression +0:10 add ( temp 4-component vector of float) +0:10 component-wise multiply ( temp 4-component vector of float) +0:10 'input' ( in 4-component vector of float) +0:10 'a1' ( temp 4-component vector of float) +0:10 Construct vec4 ( uniform 4-component vector of float) +0:10 Convert int to float ( temp float) +0:10 add ( temp int) +0:10 'i' ( temp int) +0:10 'j' ( temp int) +0:? Linker Objects + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 34 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "PixelShaderFunction" + ExecutionMode 4 OriginUpperLeft + Name 4 "PixelShaderFunction" + Name 14 "ShaderFunction(vf4;i1;" + Name 12 "input" + Name 13 "ii" + Name 16 "a1" + Name 19 "i" + Name 21 "j" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 9: TypeInt 32 1 + 10: TypePointer Function 9(int) + 11: TypeFunction 7(fvec4) 8(ptr) 10(ptr) + 17: 6(float) Constant 1065353216 + 18: 7(fvec4) ConstantComposite 17 17 17 17 + 20: 9(int) Constant 2 +4(PixelShaderFunction): 2 Function None 3 + 5: Label + Return + FunctionEnd +14(ShaderFunction(vf4;i1;): 7(fvec4) Function None 11 + 12(input): 8(ptr) FunctionParameter + 13(ii): 10(ptr) FunctionParameter + 15: Label + 16(a1): 8(ptr) Variable Function + 19(i): 10(ptr) Variable Function + 21(j): 10(ptr) Variable Function + Store 16(a1) 18 + Store 19(i) 20 + 22: 9(int) Load 13(ii) + Store 21(j) 22 + 23: 7(fvec4) Load 12(input) + 24: 7(fvec4) Load 16(a1) + 25: 7(fvec4) FMul 23 24 + 26: 9(int) Load 19(i) + 27: 9(int) Load 21(j) + 28: 9(int) IAdd 26 27 + 29: 6(float) ConvertSToF 28 + 30: 7(fvec4) CompositeConstruct 29 29 29 29 + 31: 7(fvec4) FAdd 25 30 + ReturnValue 31 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.void.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.void.frag.out new file mode 100755 index 0000000..584f378 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.void.frag.out @@ -0,0 +1,107 @@ +hlsl.void.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:1 Function Definition: foo1( ( temp void) +0:1 Function Parameters: +0:2 Function Definition: foo2( ( temp void) +0:2 Function Parameters: +0:5 Function Definition: @PixelShaderFunction(vf4; ( temp void) +0:5 Function Parameters: +0:5 'input' ( in 4-component vector of float) +0:? Sequence +0:6 Function Call: foo1( ( temp void) +0:7 Function Call: foo2( ( temp void) +0:8 Branch: Return +0:5 Function Definition: PixelShaderFunction( ( temp void) +0:5 Function Parameters: +0:? Sequence +0:5 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:5 Function Call: @PixelShaderFunction(vf4; ( temp void) +0:? 'input' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'input' (layout( location=0) in 4-component vector of float) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:1 Function Definition: foo1( ( temp void) +0:1 Function Parameters: +0:2 Function Definition: foo2( ( temp void) +0:2 Function Parameters: +0:5 Function Definition: @PixelShaderFunction(vf4; ( temp void) +0:5 Function Parameters: +0:5 'input' ( in 4-component vector of float) +0:? Sequence +0:6 Function Call: foo1( ( temp void) +0:7 Function Call: foo2( ( temp void) +0:8 Branch: Return +0:5 Function Definition: PixelShaderFunction( ( temp void) +0:5 Function Parameters: +0:? Sequence +0:5 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:5 Function Call: @PixelShaderFunction(vf4; ( temp void) +0:? 'input' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'input' (layout( location=0) in 4-component vector of float) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 27 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "PixelShaderFunction" 22 + ExecutionMode 4 OriginUpperLeft + Name 4 "PixelShaderFunction" + Name 6 "foo1(" + Name 8 "foo2(" + Name 15 "@PixelShaderFunction(vf4;" + Name 14 "input" + Name 20 "input" + Name 22 "input" + Name 24 "param" + Decorate 22(input) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 10: TypeFloat 32 + 11: TypeVector 10(float) 4 + 12: TypePointer Function 11(fvec4) + 13: TypeFunction 2 12(ptr) + 21: TypePointer Input 11(fvec4) + 22(input): 21(ptr) Variable Input +4(PixelShaderFunction): 2 Function None 3 + 5: Label + 20(input): 12(ptr) Variable Function + 24(param): 12(ptr) Variable Function + 23: 11(fvec4) Load 22(input) + Store 20(input) 23 + 25: 11(fvec4) Load 20(input) + Store 24(param) 25 + 26: 2 FunctionCall 15(@PixelShaderFunction(vf4;) 24(param) + Return + FunctionEnd + 6(foo1(): 2 Function None 3 + 7: Label + Return + FunctionEnd + 8(foo2(): 2 Function None 3 + 9: Label + Return + FunctionEnd +15(@PixelShaderFunction(vf4;): 2 Function None 13 + 14(input): 12(ptr) FunctionParameter + 16: Label + 17: 2 FunctionCall 6(foo1() + 18: 2 FunctionCall 8(foo2() + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.whileLoop.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.whileLoop.frag.out new file mode 100755 index 0000000..2f68da1 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.whileLoop.frag.out @@ -0,0 +1,195 @@ +hlsl.whileLoop.frag +Shader version: 450 +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:? Sequence +0:3 Loop with condition tested first +0:3 Loop Condition +0:3 any ( temp bool) +0:3 NotEqual ( temp 4-component vector of bool) +0:3 'input' ( in 4-component vector of float) +0:3 'input' ( in 4-component vector of float) +0:3 Loop Body +0:? Sequence +0:3 Branch: Return with expression +0:3 'input' ( in 4-component vector of float) +0:4 Loop with condition tested first +0:4 Loop Condition +0:4 Constant: +0:4 false (const bool) +0:4 No loop body +0:5 Loop with condition tested first +0:5 Loop Condition +0:5 Constant: +0:5 false (const bool) +0:5 No loop body +0:6 Loop with condition tested first +0:6 Loop Condition +0:6 Constant: +0:6 false (const bool) +0:6 No loop body +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 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:? Linker Objects +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: 450 +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:? Sequence +0:3 Loop with condition tested first +0:3 Loop Condition +0:3 any ( temp bool) +0:3 NotEqual ( temp 4-component vector of bool) +0:3 'input' ( in 4-component vector of float) +0:3 'input' ( in 4-component vector of float) +0:3 Loop Body +0:? Sequence +0:3 Branch: Return with expression +0:3 'input' ( in 4-component vector of float) +0:4 Loop with condition tested first +0:4 Loop Condition +0:4 Constant: +0:4 false (const bool) +0:4 No loop body +0:5 Loop with condition tested first +0:5 Loop Condition +0:5 Constant: +0:5 false (const bool) +0:5 No loop body +0:6 Loop with condition tested first +0:6 Loop Condition +0:6 Constant: +0:6 false (const bool) +0:6 No loop body +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 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:? Linker Objects +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 52 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "PixelShaderFunction" 45 48 + ExecutionMode 4 OriginUpperLeft + Name 4 "PixelShaderFunction" + Name 11 "@PixelShaderFunction(vf4;" + Name 10 "input" + Name 43 "input" + Name 45 "input" + Name 48 "@entryPointOutput" + Name 49 "param" + Decorate 45(input) Location 0 + Decorate 48(@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) + 20: TypeBool + 21: TypeVector 20(bool) 4 + 31: 20(bool) ConstantFalse + 44: TypePointer Input 7(fvec4) + 45(input): 44(ptr) Variable Input + 47: TypePointer Output 7(fvec4) +48(@entryPointOutput): 47(ptr) Variable Output +4(PixelShaderFunction): 2 Function None 3 + 5: Label + 43(input): 8(ptr) Variable Function + 49(param): 8(ptr) Variable Function + 46: 7(fvec4) Load 45(input) + Store 43(input) 46 + 50: 7(fvec4) Load 43(input) + Store 49(param) 50 + 51: 7(fvec4) FunctionCall 11(@PixelShaderFunction(vf4;) 49(param) + Store 48(@entryPointOutput) 51 + Return + FunctionEnd +11(@PixelShaderFunction(vf4;): 7(fvec4) Function None 9 + 10(input): 8(ptr) FunctionParameter + 12: Label + Branch 13 + 13: Label + LoopMerge 15 16 None + Branch 17 + 17: Label + 18: 7(fvec4) Load 10(input) + 19: 7(fvec4) Load 10(input) + 22: 21(bvec4) FOrdNotEqual 18 19 + 23: 20(bool) Any 22 + BranchConditional 23 14 15 + 14: Label + 24: 7(fvec4) Load 10(input) + ReturnValue 24 + 16: Label + Branch 13 + 15: Label + Branch 26 + 26: Label + LoopMerge 28 29 None + Branch 30 + 30: Label + BranchConditional 31 27 28 + 27: Label + Branch 29 + 29: Label + Branch 26 + 28: Label + Branch 32 + 32: Label + LoopMerge 34 35 None + Branch 36 + 36: Label + BranchConditional 31 33 34 + 33: Label + Branch 35 + 35: Label + Branch 32 + 34: Label + Branch 37 + 37: Label + LoopMerge 39 40 None + Branch 41 + 41: Label + BranchConditional 31 38 39 + 38: Label + Branch 40 + 40: Label + Branch 37 + 39: Label + 42: 7(fvec4) Undef + ReturnValue 42 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/length.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/length.frag.out new file mode 100644 index 0000000..bfd5bf0 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/length.frag.out @@ -0,0 +1,61 @@ +length.frag +Shader version: 120 +0:? Sequence +0:11 Function Definition: main( ( global void) +0:11 Function Parameters: +0:? Sequence +0:15 Sequence +0:15 move second child to first child ( temp 2-component vector of float) +0:15 't' ( temp 2-component vector of float) +0:15 add ( temp 2-component vector of float) +0:15 direct index ( smooth temp 2-component vector of float) +0:15 'v' ( smooth in 2-element array of 2-component vector of float) +0:15 Constant: +0:15 0 (const int) +0:15 direct index ( smooth temp 2-component vector of float) +0:15 'v' ( smooth in 2-element array of 2-component vector of float) +0:15 Constant: +0:15 1 (const int) +0:17 move second child to first child ( temp 4-component vector of float) +0:17 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:17 Constant: +0:17 30.000000 +0:17 30.000000 +0:17 30.000000 +0:17 30.000000 +0:? Linker Objects +0:? 'u' ( uniform 3-element array of 4-component vector of float) +0:? 'v' ( smooth in 2-element array of 2-component vector of float) + + +Linked fragment stage: + + +Shader version: 120 +0:? Sequence +0:11 Function Definition: main( ( global void) +0:11 Function Parameters: +0:? Sequence +0:15 Sequence +0:15 move second child to first child ( temp 2-component vector of float) +0:15 't' ( temp 2-component vector of float) +0:15 add ( temp 2-component vector of float) +0:15 direct index ( smooth temp 2-component vector of float) +0:15 'v' ( smooth in 2-element array of 2-component vector of float) +0:15 Constant: +0:15 0 (const int) +0:15 direct index ( smooth temp 2-component vector of float) +0:15 'v' ( smooth in 2-element array of 2-component vector of float) +0:15 Constant: +0:15 1 (const int) +0:17 move second child to first child ( temp 4-component vector of float) +0:17 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:17 Constant: +0:17 30.000000 +0:17 30.000000 +0:17 30.000000 +0:17 30.000000 +0:? Linker Objects +0:? 'u' ( uniform 3-element array of 4-component vector of float) +0:? 'v' ( smooth in 2-element array of 2-component vector of float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/lineContinuation.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/lineContinuation.vert.out new file mode 100644 index 0000000..9290415 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/lineContinuation.vert.out @@ -0,0 +1,280 @@ +lineContinuation.vert +WARNING: 0:3: 'line continuation' : used at end of comment; the following line is still part of the comment +ERROR: 0:6: '#error' : e1 +ERROR: 0:11: '#error' : e2 +ERROR: 0:18: '#error' : e3 +ERROR: 0:42: '\' : illegal use of escape character +ERROR: 0:43: '@' : unexpected token +ERROR: 0:44: '$' : unexpected token +ERROR: 0:45: '\' : illegal use of escape character +ERROR: 0:47: '\' : illegal use of escape character +ERROR: 0:48: '\' : illegal use of escape character +ERROR: 0:49: '$' : unexpected token +ERROR: 0:50: '@' : unexpected token +ERROR: 0:55: '#error' : good continuation +WARNING: 0:62: 'line continuation' : used at end of comment; the following line is still part of the comment +ERROR: 0:111: 'macro expansion' : End of line in macro substitution: FOOM +ERROR: 0:112: 'preprocessor evaluation' : can't evaluate expression +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: 19 compilation errors. No code generated. + + +Shader version: 300 +ERROR: node is still EOpNull! +0:20 Function Definition: main( ( global void) +0:20 Function Parameters: +0:20 Sequence +0:20 move second child to first child ( temp highp 4-component vector of float) +0:20 'gl_Position' ( gl_Position highp 4-component vector of float Position) +0:20 Construct vec4 ( temp highp 4-component vector of float) +0:20 'foo' ( global highp float) +0:22 Function Definition: foo2(vf4; ( global highp 4-component vector of float) +0:22 Function Parameters: +0:22 'a' ( in highp 4-component vector of float) +0:24 Sequence +0:24 Sequence +0:24 move second child to first child ( temp highp 4-component vector of float) +0:24 'b' ( temp highp 4-component vector of float) +0:24 'a' ( in highp 4-component vector of float) +0:25 Branch: Return with expression +0:25 'b' ( temp highp 4-component vector of float) +0:47 Sequence +0:47 move second child to first child ( temp highp int) +0:47 'q1' ( global highp int) +0:47 Constant: +0:47 1 (const int) +0:48 Sequence +0:48 move second child to first child ( temp highp int) +0:48 'q2' ( global highp int) +0:48 Constant: +0:48 1 (const int) +0:49 Sequence +0:49 move second child to first child ( temp highp int) +0:49 'q3' ( global highp int) +0:49 Constant: +0:49 1 (const int) +0:50 Sequence +0:50 move second child to first child ( temp highp int) +0:50 'q4' ( global highp int) +0:50 Constant: +0:50 1 (const int) +0:74 Sequence +0:74 move second child to first child ( temp highp float) +0:74 'funkyf' ( global highp float) +0:75 Constant: +0:75 12300000000000000.000000 +0:85 Sequence +0:84 move second child to first child ( temp highp int) +0:84 'funkyh' ( global highp int) +0:86 Constant: +0:86 244 (const int) +0:91 Sequence +0:91 move second child to first child ( temp highp int) +0:91 'funkyo' ( global highp int) +0:92 Constant: +0:92 34 (const int) +0:96 Sequence +0:96 move second child to first child ( temp highp int) +0:96 'c' ( global highp int) +0:97 Constant: +0:97 11 (const int) +0:98 Sequence +0:98 move second child to first child ( temp highp int) +0:98 'd' ( global highp int) +0:98 Constant: +0:98 12 (const int) +0:107 Sequence +0:107 move second child to first child ( temp highp int) +0:107 'bar103' ( global highp int) +0:107 Constant: +0:107 17 (const int) +0:113 Sequence +0:113 move second child to first child ( temp highp int) +0:113 'bar104' ( global highp int) +0:113 Constant: +0:113 19 (const int) +0:119 Sequence +0:119 move second child to first child ( temp highp int) +0:119 'bar105' ( global highp int) +0:119 Constant: +0:119 19 (const int) +0:122 Sequence +0:122 move second child to first child ( temp highp int) +0:122 'bar106' ( global highp int) +0:122 Constant: +0:122 12 (const int) +0:123 Sequence +0:123 move second child to first child ( temp highp int) +0:123 'bar107' ( global highp int) +0:128 Constant: +0:128 5 (const int) +0:131 Function Definition: foo203209409( ( global void) +0:131 Function Parameters: +0:134 Sequence +0:134 add second child into first child ( temp highp int) +0:133 'bar107' ( global highp int) +0:134 Constant: +0:134 37 (const int) +0:135 multiply second child into first child ( temp highp int) +0:135 'bar107' ( global highp int) +0:136 Constant: +0:136 38 (const int) +0:137 divide second child into first child ( temp highp int) +0:137 'bar107' ( global highp int) +0:138 Constant: +0:138 39 (const int) +0:139 add ( temp highp int) +0:139 'bar107' ( global highp int) +0:140 Constant: +0:140 41 (const int) +0:? Linker Objects +0:? 'foo' ( global highp float) +0:? 'goodDecl' ( global highp int) +0:? 'a1' ( const highp int) +0:? 4 (const int) +0:? 'a2' ( const highp int) +0:? 3 (const int) +0:? 'a3' ( const highp int) +0:? 4 (const int) +0:? 'a4' ( const highp int) +0:? 3 (const int) +0:? 'q1' ( global highp int) +0:? 'q2' ( global highp int) +0:? 'q3' ( global highp int) +0:? 'q4' ( global highp int) +0:? 'abdece' ( const highp int) +0:? 10 (const int) +0:? 'aoeuntaoehu' ( const highp int) +0:? 10 (const int) +0:? 'funkyf' ( global highp float) +0:? 'funkyh' ( global highp int) +0:? 'funkyo' ( global highp int) +0:? 'c' ( global highp int) +0:? 'd' ( global highp int) +0:? 'bar103' ( global highp int) +0:? 'bar104' ( global highp int) +0:? 'bar105' ( global highp int) +0:? 'bar106' ( global highp int) +0:? 'bar107' ( global highp int) +0:? 'gl_VertexID' ( gl_VertexId highp int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId highp int InstanceId) + + +Linked vertex stage: + + +Shader version: 300 +ERROR: node is still EOpNull! +0:20 Function Definition: main( ( global void) +0:20 Function Parameters: +0:20 Sequence +0:20 move second child to first child ( temp highp 4-component vector of float) +0:20 'gl_Position' ( gl_Position highp 4-component vector of float Position) +0:20 Construct vec4 ( temp highp 4-component vector of float) +0:20 'foo' ( global highp float) +0:47 Sequence +0:47 move second child to first child ( temp highp int) +0:47 'q1' ( global highp int) +0:47 Constant: +0:47 1 (const int) +0:48 Sequence +0:48 move second child to first child ( temp highp int) +0:48 'q2' ( global highp int) +0:48 Constant: +0:48 1 (const int) +0:49 Sequence +0:49 move second child to first child ( temp highp int) +0:49 'q3' ( global highp int) +0:49 Constant: +0:49 1 (const int) +0:50 Sequence +0:50 move second child to first child ( temp highp int) +0:50 'q4' ( global highp int) +0:50 Constant: +0:50 1 (const int) +0:74 Sequence +0:74 move second child to first child ( temp highp float) +0:74 'funkyf' ( global highp float) +0:75 Constant: +0:75 12300000000000000.000000 +0:85 Sequence +0:84 move second child to first child ( temp highp int) +0:84 'funkyh' ( global highp int) +0:86 Constant: +0:86 244 (const int) +0:91 Sequence +0:91 move second child to first child ( temp highp int) +0:91 'funkyo' ( global highp int) +0:92 Constant: +0:92 34 (const int) +0:96 Sequence +0:96 move second child to first child ( temp highp int) +0:96 'c' ( global highp int) +0:97 Constant: +0:97 11 (const int) +0:98 Sequence +0:98 move second child to first child ( temp highp int) +0:98 'd' ( global highp int) +0:98 Constant: +0:98 12 (const int) +0:107 Sequence +0:107 move second child to first child ( temp highp int) +0:107 'bar103' ( global highp int) +0:107 Constant: +0:107 17 (const int) +0:113 Sequence +0:113 move second child to first child ( temp highp int) +0:113 'bar104' ( global highp int) +0:113 Constant: +0:113 19 (const int) +0:119 Sequence +0:119 move second child to first child ( temp highp int) +0:119 'bar105' ( global highp int) +0:119 Constant: +0:119 19 (const int) +0:122 Sequence +0:122 move second child to first child ( temp highp int) +0:122 'bar106' ( global highp int) +0:122 Constant: +0:122 12 (const int) +0:123 Sequence +0:123 move second child to first child ( temp highp int) +0:123 'bar107' ( global highp int) +0:128 Constant: +0:128 5 (const int) +0:? Linker Objects +0:? 'foo' ( global highp float) +0:? 'goodDecl' ( global highp int) +0:? 'a1' ( const highp int) +0:? 4 (const int) +0:? 'a2' ( const highp int) +0:? 3 (const int) +0:? 'a3' ( const highp int) +0:? 4 (const int) +0:? 'a4' ( const highp int) +0:? 3 (const int) +0:? 'q1' ( global highp int) +0:? 'q2' ( global highp int) +0:? 'q3' ( global highp int) +0:? 'q4' ( global highp int) +0:? 'abdece' ( const highp int) +0:? 10 (const int) +0:? 'aoeuntaoehu' ( const highp int) +0:? 10 (const int) +0:? 'funkyf' ( global highp float) +0:? 'funkyh' ( global highp int) +0:? 'funkyo' ( global highp int) +0:? 'c' ( global highp int) +0:? 'd' ( global highp int) +0:? 'bar103' ( global highp int) +0:? 'bar104' ( global highp int) +0:? 'bar105' ( global highp int) +0:? 'bar106' ( global highp int) +0:? 'bar107' ( global highp int) +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/lineContinuation100.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/lineContinuation100.vert.out new file mode 100644 index 0000000..c86b52b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/lineContinuation100.vert.out @@ -0,0 +1,127 @@ +lineContinuation100.vert +WARNING: 0:3: 'line continuation' : used at end of comment, but this version does not provide line continuation +ERROR: 0:4: '#error' : good error +ERROR: 0:8: 'line continuation' : not supported for this version or the enabled extensions +ERROR: 0:11: '#error' : e2 +ERROR: 0:13: 'line continuation' : not supported for this version or the enabled extensions +ERROR: 0:14: 'line continuation' : not supported for this version or the enabled extensions +ERROR: 0:15: 'line continuation' : not supported for this version or the enabled extensions +ERROR: 0:18: '#error' : e3 +ERROR: 0:24: 'line continuation' : not supported for this version or the enabled extensions +ERROR: 0:40: '\' : illegal use of escape character +ERROR: 0:41: '@' : unexpected token +ERROR: 0:42: '$' : unexpected token +ERROR: 0:43: '\' : illegal use of escape character +ERROR: 0:45: '\' : illegal use of escape character +ERROR: 0:46: '\' : illegal use of escape character +ERROR: 0:47: '$' : unexpected token +ERROR: 0:48: '@' : unexpected token +ERROR: 0:50: 'line continuation' : not supported for this version or the enabled extensions +ERROR: 0:52: 'line continuation' : not supported for this version or the enabled extensions +ERROR: 0:53: '#error' : bad continuation +ERROR: 0:55: 'line continuation' : not supported for this version or the enabled extensions +ERROR: 20 compilation errors. No code generated. + + +Shader version: 100 +ERROR: node is still EOpNull! +0:20 Function Definition: main( ( global void) +0:20 Function Parameters: +0:20 Sequence +0:20 move second child to first child ( temp highp 4-component vector of float) +0:20 'gl_Position' ( gl_Position highp 4-component vector of float Position) +0:20 Construct vec4 ( temp highp 4-component vector of float) +0:20 'foo' ( global highp float) +0:22 Function Definition: foo2(vf4; ( global highp 4-component vector of float) +0:22 Function Parameters: +0:22 'a' ( in highp 4-component vector of float) +0:24 Sequence +0:24 Sequence +0:24 move second child to first child ( temp highp 4-component vector of float) +0:24 'b' ( temp highp 4-component vector of float) +0:24 'a' ( in highp 4-component vector of float) +0:25 Branch: Return with expression +0:25 'b' ( temp highp 4-component vector of float) +0:45 Sequence +0:45 move second child to first child ( temp highp int) +0:45 'q1' ( global highp int) +0:45 Constant: +0:45 1 (const int) +0:46 Sequence +0:46 move second child to first child ( temp highp int) +0:46 'q2' ( global highp int) +0:46 Constant: +0:46 1 (const int) +0:47 Sequence +0:47 move second child to first child ( temp highp int) +0:47 'q3' ( global highp int) +0:47 Constant: +0:47 1 (const int) +0:48 Sequence +0:48 move second child to first child ( temp highp int) +0:48 'q4' ( global highp int) +0:48 Constant: +0:48 1 (const int) +0:? Linker Objects +0:? 'foo' ( global highp float) +0:? 'a1' ( const highp int) +0:? 4 (const int) +0:? 'a2' ( const highp int) +0:? 3 (const int) +0:? 'a3' ( const highp int) +0:? 4 (const int) +0:? 'a4' ( const highp int) +0:? 3 (const int) +0:? 'q1' ( global highp int) +0:? 'q2' ( global highp int) +0:? 'q3' ( global highp int) +0:? 'q4' ( global highp int) + + +Linked vertex stage: + + +Shader version: 100 +ERROR: node is still EOpNull! +0:20 Function Definition: main( ( global void) +0:20 Function Parameters: +0:20 Sequence +0:20 move second child to first child ( temp highp 4-component vector of float) +0:20 'gl_Position' ( gl_Position highp 4-component vector of float Position) +0:20 Construct vec4 ( temp highp 4-component vector of float) +0:20 'foo' ( global highp float) +0:45 Sequence +0:45 move second child to first child ( temp highp int) +0:45 'q1' ( global highp int) +0:45 Constant: +0:45 1 (const int) +0:46 Sequence +0:46 move second child to first child ( temp highp int) +0:46 'q2' ( global highp int) +0:46 Constant: +0:46 1 (const int) +0:47 Sequence +0:47 move second child to first child ( temp highp int) +0:47 'q3' ( global highp int) +0:47 Constant: +0:47 1 (const int) +0:48 Sequence +0:48 move second child to first child ( temp highp int) +0:48 'q4' ( global highp int) +0:48 Constant: +0:48 1 (const int) +0:? Linker Objects +0:? 'foo' ( global highp float) +0:? 'a1' ( const highp int) +0:? 4 (const int) +0:? 'a2' ( const highp int) +0:? 3 (const int) +0:? 'a3' ( const highp int) +0:? 4 (const int) +0:? 'a4' ( const highp int) +0:? 3 (const int) +0:? 'q1' ( global highp int) +0:? 'q2' ( global highp int) +0:? 'q3' ( global highp int) +0:? 'q4' ( global highp int) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/link1.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/link1.frag.out new file mode 100644 index 0000000..2ea63ad --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/link1.frag.out @@ -0,0 +1,162 @@ +link1.frag +Shader version: 130 +0:? Sequence +0:8 Sequence +0:8 move second child to first child ( temp 4-component vector of float) +0:8 'a' ( global 4-component vector of float) +0:8 vector-scale ( temp 4-component vector of float) +0:8 Constant: +0:8 8.000000 +0:8 'uv4' ( uniform 4-component vector of float) +0:13 Function Definition: main( ( global void) +0:13 Function Parameters: +0:17 Sequence +0:17 move second child to first child ( temp 4-component vector of float) +0:17 'b' ( global 4-component vector of float) +0:17 vector-scale ( temp 4-component vector of float) +0:17 Constant: +0:17 8.000000 +0:17 'a' ( global 4-component vector of float) +0:19 Function Definition: foo(mf22; ( global 2-component vector of int) +0:19 Function Parameters: +0:19 'm' ( in 2X2 matrix of float) +0:21 Sequence +0:21 Branch: Return with expression +0:21 Convert float to int ( temp 2-component vector of int) +0:21 direct index ( temp 2-component vector of float) +0:21 'm' ( in 2X2 matrix of float) +0:21 Constant: +0:21 0 (const int) +0:24 Sequence +0:24 move second child to first child ( temp 4-component vector of float) +0:24 'c' ( global 4-component vector of float) +0:24 component-wise multiply ( temp 4-component vector of float) +0:24 'b' ( global 4-component vector of float) +0:24 'b' ( global 4-component vector of float) +0:? Linker Objects +0:? 'uv4' ( uniform 4-component vector of float) +0:? 'glass' ( uniform 3-component vector of float) +0:? 'ci' ( const int) +0:? 8 (const int) +0:? 'a' ( global 4-component vector of float) +0:? 'iv3' ( smooth in 3-component vector of float) +0:? 'cup' ( smooth in 4-component vector of float) +0:? 'b' ( global 4-component vector of float) +0:? 'c' ( global 4-component vector of float) +0:? 'cv3' ( const 3-component vector of float) +0:? 43.000000 +0:? 0.340000 +0:? 9.900000 +0:? 'cv3n' ( const 3-component vector of float) +0:? 43.000000 +0:? 0.340000 +0:? 9.900000 +0:? 'cv3e' ( const 3-component vector of float) +0:? 43.000000 +0:? 0.340000 +0:? 9.900000 +0:? 'um2' ( uniform 2X2 matrix of float) +0:? 4.000000 +0:? 0.000000 +0:? 0.000000 +0:? 4.000000 +0:? 'um2n' ( uniform 2X2 matrix of float) +0:? 4.000000 +0:? 0.000000 +0:? 0.000000 +0:? 4.000000 +0:? 'um2e' ( uniform 2X2 matrix of float) +0:? 4.000000 +0:? 0.000000 +0:? 0.000000 +0:? 4.000000 +0:? 's' ( uniform structure{ global int a, global float b}) +0:? 82 (const int) +0:? 3.900000 +0:? 'sn' ( uniform structure{ global int a, global float b}) +0:? 'se' ( uniform structure{ global int a, global float b}) +0:? 82 (const int) +0:? 3.900000 + +link2.frag +Shader version: 130 +Requested GL_OES_standard_derivatives +Requested GL_OES_texture_3D +0:? Sequence +0:8 Sequence +0:8 move second child to first child ( temp 4-component vector of float) +0:8 'd' ( global 4-component vector of float) +0:8 vector-scale ( temp 4-component vector of float) +0:8 Constant: +0:8 8.000000 +0:8 'uv4' ( uniform 4-component vector of float) +0:13 Sequence +0:13 move second child to first child ( temp 4-component vector of float) +0:13 'e' ( global 4-component vector of float) +0:13 vector-scale ( temp 4-component vector of float) +0:13 Constant: +0:13 8.000000 +0:13 'd' ( global 4-component vector of float) +0:15 Function Definition: foo( ( global 2-component vector of int) +0:15 Function Parameters: +0:17 Sequence +0:17 Branch: Return with expression +0:17 Constant: +0:17 2 (const int) +0:17 2 (const int) +0:20 Sequence +0:20 move second child to first child ( temp 4-component vector of float) +0:20 'f' ( global 4-component vector of float) +0:20 component-wise multiply ( temp 4-component vector of float) +0:20 'e' ( global 4-component vector of float) +0:20 'e' ( global 4-component vector of float) +0:? Linker Objects +0:? 'uv4' ( uniform 4-component vector of float) +0:? 'glass' ( uniform 2-component vector of float) +0:? 'ci' ( const int) +0:? 8 (const int) +0:? 'd' ( global 4-component vector of float) +0:? 'iv3' ( smooth in 3-component vector of float) +0:? 'cup' ( flat in 4-component vector of float) +0:? 'e' ( global 4-component vector of float) +0:? 'f' ( global 4-component vector of float) +0:? 'cv3' ( const 3-component vector of float) +0:? 43.000000 +0:? 0.340000 +0:? 9.900000 +0:? 'cv3e' ( const 3-component vector of float) +0:? 43.000000 +0:? 0.340000 +0:? 2.900000 +0:? 'um2' ( uniform 2X2 matrix of float) +0:? 4.000000 +0:? 0.000000 +0:? 0.000000 +0:? 4.000000 +0:? 'um2n' ( uniform 2X2 matrix of float) +0:? 'um2e' ( uniform 2X2 matrix of float) +0:? 3.000000 +0:? 0.000000 +0:? 0.000000 +0:? 3.000000 +0:? 's' ( uniform structure{ global int a, global float b}) +0:? 82 (const int) +0:? 3.900000 +0:? 'sn' ( uniform structure{ global int a, global float b}) +0:? 82 (const int) +0:? 3.900000 +0:? 'se' ( uniform structure{ global int a, global float b}) +0:? 81 (const int) +0:? 3.900000 + +link3.frag +Shader version: 300 +Requested GL_OES_EGL_image_external +Requested GL_OES_standard_derivatives +Requested GL_OES_texture_3D +0:? Sequence +0:? Linker Objects +0:? 'iv3' ( smooth in highp 2-component vector of float) + +ERROR: Cannot mix ES profile with non-ES profile shaders + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/link1.vk.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/link1.vk.frag.out new file mode 100644 index 0000000..436f5e2 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/link1.vk.frag.out @@ -0,0 +1,60 @@ +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 +0:7 Function Definition: main( ( global void) +0:7 Function Parameters: +0:9 Sequence +0:9 move second child to first child ( temp highp 4-component vector of float) +0:9 'color' ( out highp 4-component vector of float) +0:9 Function Call: getColor( ( global highp 4-component vector of float) +0:? Linker Objects +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 +0:5 Function Definition: getColor( ( global highp 4-component vector of float) +0:5 Function Parameters: +0:7 Sequence +0:7 Branch: Return with expression +0:7 texture ( global highp 4-component vector of float) +0:7 's2D' ( uniform highp sampler2D) +0:7 Constant: +0:7 0.500000 +0:7 0.500000 +0:? Linker Objects +0:? 's2D' ( uniform highp sampler2D) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:7 Function Definition: main( ( global void) +0:7 Function Parameters: +0:9 Sequence +0:9 move second child to first child ( temp highp 4-component vector of float) +0:9 'color' ( out highp 4-component vector of float) +0:9 Function Call: getColor( ( global highp 4-component vector of float) +0:5 Function Definition: getColor( ( global highp 4-component vector of float) +0:5 Function Parameters: +0:7 Sequence +0:7 Branch: Return with expression +0:7 texture ( global highp 4-component vector of float) +0:7 's2D' ( uniform highp sampler2D) +0:7 Constant: +0:7 0.500000 +0:7 0.500000 +0:? Linker Objects +0:? 'color' ( out highp 4-component vector of float) +0:? 's2D' ( uniform highp sampler2D) + +SPIR-V is not generated for failed compile or link diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/localAggregates.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/localAggregates.frag.out new file mode 100644 index 0000000..ca445bc --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/localAggregates.frag.out @@ -0,0 +1,414 @@ +localAggregates.frag +WARNING: 0:4: varying deprecated in version 130; may be removed in future release +WARNING: 0:5: varying deprecated in version 130; may be removed in future release + +Shader version: 130 +0:? Sequence +0:34 Function Definition: main( ( global void) +0:34 Function Parameters: +0:? Sequence +0:41 move second child to first child ( temp structure{ global int i, global float f, global structure{ global int i, global float f} s1_1, global 4-component vector of float bleh}) +0:41 'locals2' ( temp structure{ global int i, global float f, global structure{ global int i, global float f} s1_1, global 4-component vector of float bleh}) +0:41 s2_1: direct index for structure ( global structure{ global int i, global float f, global structure{ global int i, global float f} s1_1, global 4-component vector of float bleh}) +0:41 'foo3' ( uniform structure{ global structure{ global int i, global float f, global structure{ global int i, global float f} s1_1, global 4-component vector of float bleh} s2_1, global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:41 Constant: +0:41 0 (const int) +0:43 Test condition and select ( temp void) +0:43 Condition +0:43 Compare Greater Than ( temp bool) +0:43 i: direct index for structure ( global int) +0:43 s2_1: direct index for structure ( global structure{ global int i, global float f, global structure{ global int i, global float f} s1_1, global 4-component vector of float bleh}) +0:43 'foo3' ( uniform structure{ global structure{ global int i, global float f, global structure{ global int i, global float f} s1_1, global 4-component vector of float bleh} s2_1, global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:43 Constant: +0:43 0 (const int) +0:43 Constant: +0:43 0 (const int) +0:43 Constant: +0:43 0 (const int) +0:43 true case +0:44 Sequence +0:44 move second child to first child ( temp float) +0:44 f: direct index for structure ( global float) +0:44 s1_1: direct index for structure ( global structure{ global int i, global float f}) +0:44 'locals2' ( temp structure{ global int i, global float f, global structure{ global int i, global float f} s1_1, global 4-component vector of float bleh}) +0:44 Constant: +0:44 2 (const int) +0:44 Constant: +0:44 1 (const int) +0:44 Constant: +0:44 1.000000 +0:45 move second child to first child ( temp float) +0:45 direct index ( temp float) +0:45 'localFArray' ( temp 16-element array of float) +0:45 Constant: +0:45 4 (const int) +0:45 direct index ( temp float) +0:45 'coord' ( smooth in 2-component vector of float) +0:45 Constant: +0:45 0 (const int) +0:46 move second child to first child ( temp int) +0:46 direct index ( temp int) +0:46 'localIArray' ( temp 8-element array of int) +0:46 Constant: +0:46 2 (const int) +0:46 i: direct index for structure ( global int) +0:46 s2_1: direct index for structure ( global structure{ global int i, global float f, global structure{ global int i, global float f} s1_1, global 4-component vector of float bleh}) +0:46 'foo3' ( uniform structure{ global structure{ global int i, global float f, global structure{ global int i, global float f} s1_1, global 4-component vector of float bleh} s2_1, global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:46 Constant: +0:46 0 (const int) +0:46 Constant: +0:46 0 (const int) +0:43 false case +0:48 Sequence +0:48 move second child to first child ( temp float) +0:48 f: direct index for structure ( global float) +0:48 s1_1: direct index for structure ( global structure{ global int i, global float f}) +0:48 'locals2' ( temp structure{ global int i, global float f, global structure{ global int i, global float f} s1_1, global 4-component vector of float bleh}) +0:48 Constant: +0:48 2 (const int) +0:48 Constant: +0:48 1 (const int) +0:48 direct index ( temp float) +0:48 'coord' ( smooth in 2-component vector of float) +0:48 Constant: +0:48 0 (const int) +0:49 move second child to first child ( temp float) +0:49 direct index ( temp float) +0:49 'localFArray' ( temp 16-element array of float) +0:49 Constant: +0:49 4 (const int) +0:49 Constant: +0:49 1.000000 +0:50 move second child to first child ( temp int) +0:50 direct index ( temp int) +0:50 'localIArray' ( temp 8-element array of int) +0:50 Constant: +0:50 2 (const int) +0:50 Constant: +0:50 0 (const int) +0:53 Test condition and select ( temp void) +0:53 Condition +0:53 Compare Equal ( temp bool) +0:53 direct index ( temp int) +0:53 'localIArray' ( temp 8-element array of int) +0:53 Constant: +0:53 2 (const int) +0:53 Constant: +0:53 0 (const int) +0:53 true case +0:54 Pre-Increment ( temp float) +0:54 direct index ( temp float) +0:54 'localFArray' ( temp 16-element array of float) +0:54 Constant: +0:54 4 (const int) +0:57 Sequence +0:57 move second child to first child ( temp int) +0:57 'x' ( temp int) +0:57 Constant: +0:57 5 (const int) +0:58 move second child to first child ( temp float) +0:58 indirect index ( temp float) +0:58 'localArray' ( temp 16-element array of float) +0:58 'x' ( temp int) +0:58 direct index ( temp float) +0:58 'coord' ( smooth in 2-component vector of float) +0:58 Constant: +0:58 0 (const int) +0:62 Sequence +0:62 Sequence +0:62 move second child to first child ( temp int) +0:62 'i' ( temp int) +0:62 Constant: +0:62 0 (const int) +0:62 Loop with condition tested first +0:62 Loop Condition +0:62 Compare Less Than ( temp bool) +0:62 'i' ( temp int) +0:62 Constant: +0:62 16 (const int) +0:62 Loop Body +0:63 move second child to first child ( temp float) +0:63 indirect index ( temp float) +0:63 'a' ( temp 16-element array of float) +0:63 'i' ( temp int) +0:63 Constant: +0:63 0.000000 +0:62 Loop Terminal Expression +0:62 Post-Increment ( temp int) +0:62 'i' ( temp int) +0:65 Test condition and select ( temp void) +0:65 Condition +0:65 Compare Equal ( temp bool) +0:65 'condition' ( uniform int) +0:65 Constant: +0:65 1 (const int) +0:65 true case +0:66 move second child to first child ( temp 16-element array of float) +0:66 'a' ( temp 16-element array of float) +0:66 'localArray' ( temp 16-element array of float) +0:68 move second child to first child ( temp 4-component vector of float) +0:68 bleh: direct index for structure ( global 4-component vector of float) +0:68 'locals2' ( temp structure{ global int i, global float f, global structure{ global int i, global float f} s1_1, global 4-component vector of float bleh}) +0:68 Constant: +0:68 3 (const int) +0:68 'color' ( smooth in 4-component vector of float) +0:69 move second child to first child ( temp float) +0:69 direct index ( temp float) +0:69 bleh: direct index for structure ( global 4-component vector of float) +0:69 'locals2' ( temp structure{ global int i, global float f, global structure{ global int i, global float f} s1_1, global 4-component vector of float bleh}) +0:69 Constant: +0:69 3 (const int) +0:69 Constant: +0:69 2 (const int) +0:69 direct index ( temp float) +0:69 'coord' ( smooth in 2-component vector of float) +0:69 Constant: +0:69 1 (const int) +0:71 move second child to first child ( temp 4-component vector of float) +0:71 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:71 component-wise multiply ( temp 4-component vector of float) +0:71 vector-scale ( temp 4-component vector of float) +0:71 bleh: direct index for structure ( global 4-component vector of float) +0:71 'locals2' ( temp structure{ global int i, global float f, global structure{ global int i, global float f} s1_1, global 4-component vector of float bleh}) +0:71 Constant: +0:71 3 (const int) +0:71 add ( temp float) +0:71 add ( temp float) +0:71 add ( temp float) +0:71 direct index ( temp float) +0:71 'localFArray' ( temp 16-element array of float) +0:71 Constant: +0:71 4 (const int) +0:71 f: direct index for structure ( global float) +0:71 s1_1: direct index for structure ( global structure{ global int i, global float f}) +0:71 'locals2' ( temp structure{ global int i, global float f, global structure{ global int i, global float f} s1_1, global 4-component vector of float bleh}) +0:71 Constant: +0:71 2 (const int) +0:71 Constant: +0:71 1 (const int) +0:71 indirect index ( temp float) +0:71 'localArray' ( temp 16-element array of float) +0:71 'x' ( temp int) +0:71 indirect index ( temp float) +0:71 'a' ( temp 16-element array of float) +0:71 'x' ( temp int) +0:71 texture ( global 4-component vector of float) +0:71 'sampler' ( uniform sampler2D) +0:71 'coord' ( smooth in 2-component vector of float) +0:? Linker Objects +0:? 'sampler' ( uniform sampler2D) +0:? 'coord' ( smooth in 2-component vector of float) +0:? 'color' ( smooth in 4-component vector of float) +0:? 'foo' ( uniform structure{ global int i, global float f}) +0:? 'foo2' ( uniform structure{ global int i, global float f, global structure{ global int i, global float f} s1_1, global 4-component vector of float bleh}) +0:? 'foo3' ( uniform structure{ global structure{ global int i, global float f, global structure{ global int i, global float f} s1_1, global 4-component vector of float bleh} s2_1, global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:? 'uFloatArray' ( uniform 16-element array of float) +0:? 'condition' ( uniform int) + + +Linked fragment stage: + + +Shader version: 130 +0:? Sequence +0:34 Function Definition: main( ( global void) +0:34 Function Parameters: +0:? Sequence +0:41 move second child to first child ( temp structure{ global int i, global float f, global structure{ global int i, global float f} s1_1, global 4-component vector of float bleh}) +0:41 'locals2' ( temp structure{ global int i, global float f, global structure{ global int i, global float f} s1_1, global 4-component vector of float bleh}) +0:41 s2_1: direct index for structure ( global structure{ global int i, global float f, global structure{ global int i, global float f} s1_1, global 4-component vector of float bleh}) +0:41 'foo3' ( uniform structure{ global structure{ global int i, global float f, global structure{ global int i, global float f} s1_1, global 4-component vector of float bleh} s2_1, global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:41 Constant: +0:41 0 (const int) +0:43 Test condition and select ( temp void) +0:43 Condition +0:43 Compare Greater Than ( temp bool) +0:43 i: direct index for structure ( global int) +0:43 s2_1: direct index for structure ( global structure{ global int i, global float f, global structure{ global int i, global float f} s1_1, global 4-component vector of float bleh}) +0:43 'foo3' ( uniform structure{ global structure{ global int i, global float f, global structure{ global int i, global float f} s1_1, global 4-component vector of float bleh} s2_1, global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:43 Constant: +0:43 0 (const int) +0:43 Constant: +0:43 0 (const int) +0:43 Constant: +0:43 0 (const int) +0:43 true case +0:44 Sequence +0:44 move second child to first child ( temp float) +0:44 f: direct index for structure ( global float) +0:44 s1_1: direct index for structure ( global structure{ global int i, global float f}) +0:44 'locals2' ( temp structure{ global int i, global float f, global structure{ global int i, global float f} s1_1, global 4-component vector of float bleh}) +0:44 Constant: +0:44 2 (const int) +0:44 Constant: +0:44 1 (const int) +0:44 Constant: +0:44 1.000000 +0:45 move second child to first child ( temp float) +0:45 direct index ( temp float) +0:45 'localFArray' ( temp 16-element array of float) +0:45 Constant: +0:45 4 (const int) +0:45 direct index ( temp float) +0:45 'coord' ( smooth in 2-component vector of float) +0:45 Constant: +0:45 0 (const int) +0:46 move second child to first child ( temp int) +0:46 direct index ( temp int) +0:46 'localIArray' ( temp 8-element array of int) +0:46 Constant: +0:46 2 (const int) +0:46 i: direct index for structure ( global int) +0:46 s2_1: direct index for structure ( global structure{ global int i, global float f, global structure{ global int i, global float f} s1_1, global 4-component vector of float bleh}) +0:46 'foo3' ( uniform structure{ global structure{ global int i, global float f, global structure{ global int i, global float f} s1_1, global 4-component vector of float bleh} s2_1, global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:46 Constant: +0:46 0 (const int) +0:46 Constant: +0:46 0 (const int) +0:43 false case +0:48 Sequence +0:48 move second child to first child ( temp float) +0:48 f: direct index for structure ( global float) +0:48 s1_1: direct index for structure ( global structure{ global int i, global float f}) +0:48 'locals2' ( temp structure{ global int i, global float f, global structure{ global int i, global float f} s1_1, global 4-component vector of float bleh}) +0:48 Constant: +0:48 2 (const int) +0:48 Constant: +0:48 1 (const int) +0:48 direct index ( temp float) +0:48 'coord' ( smooth in 2-component vector of float) +0:48 Constant: +0:48 0 (const int) +0:49 move second child to first child ( temp float) +0:49 direct index ( temp float) +0:49 'localFArray' ( temp 16-element array of float) +0:49 Constant: +0:49 4 (const int) +0:49 Constant: +0:49 1.000000 +0:50 move second child to first child ( temp int) +0:50 direct index ( temp int) +0:50 'localIArray' ( temp 8-element array of int) +0:50 Constant: +0:50 2 (const int) +0:50 Constant: +0:50 0 (const int) +0:53 Test condition and select ( temp void) +0:53 Condition +0:53 Compare Equal ( temp bool) +0:53 direct index ( temp int) +0:53 'localIArray' ( temp 8-element array of int) +0:53 Constant: +0:53 2 (const int) +0:53 Constant: +0:53 0 (const int) +0:53 true case +0:54 Pre-Increment ( temp float) +0:54 direct index ( temp float) +0:54 'localFArray' ( temp 16-element array of float) +0:54 Constant: +0:54 4 (const int) +0:57 Sequence +0:57 move second child to first child ( temp int) +0:57 'x' ( temp int) +0:57 Constant: +0:57 5 (const int) +0:58 move second child to first child ( temp float) +0:58 indirect index ( temp float) +0:58 'localArray' ( temp 16-element array of float) +0:58 'x' ( temp int) +0:58 direct index ( temp float) +0:58 'coord' ( smooth in 2-component vector of float) +0:58 Constant: +0:58 0 (const int) +0:62 Sequence +0:62 Sequence +0:62 move second child to first child ( temp int) +0:62 'i' ( temp int) +0:62 Constant: +0:62 0 (const int) +0:62 Loop with condition tested first +0:62 Loop Condition +0:62 Compare Less Than ( temp bool) +0:62 'i' ( temp int) +0:62 Constant: +0:62 16 (const int) +0:62 Loop Body +0:63 move second child to first child ( temp float) +0:63 indirect index ( temp float) +0:63 'a' ( temp 16-element array of float) +0:63 'i' ( temp int) +0:63 Constant: +0:63 0.000000 +0:62 Loop Terminal Expression +0:62 Post-Increment ( temp int) +0:62 'i' ( temp int) +0:65 Test condition and select ( temp void) +0:65 Condition +0:65 Compare Equal ( temp bool) +0:65 'condition' ( uniform int) +0:65 Constant: +0:65 1 (const int) +0:65 true case +0:66 move second child to first child ( temp 16-element array of float) +0:66 'a' ( temp 16-element array of float) +0:66 'localArray' ( temp 16-element array of float) +0:68 move second child to first child ( temp 4-component vector of float) +0:68 bleh: direct index for structure ( global 4-component vector of float) +0:68 'locals2' ( temp structure{ global int i, global float f, global structure{ global int i, global float f} s1_1, global 4-component vector of float bleh}) +0:68 Constant: +0:68 3 (const int) +0:68 'color' ( smooth in 4-component vector of float) +0:69 move second child to first child ( temp float) +0:69 direct index ( temp float) +0:69 bleh: direct index for structure ( global 4-component vector of float) +0:69 'locals2' ( temp structure{ global int i, global float f, global structure{ global int i, global float f} s1_1, global 4-component vector of float bleh}) +0:69 Constant: +0:69 3 (const int) +0:69 Constant: +0:69 2 (const int) +0:69 direct index ( temp float) +0:69 'coord' ( smooth in 2-component vector of float) +0:69 Constant: +0:69 1 (const int) +0:71 move second child to first child ( temp 4-component vector of float) +0:71 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:71 component-wise multiply ( temp 4-component vector of float) +0:71 vector-scale ( temp 4-component vector of float) +0:71 bleh: direct index for structure ( global 4-component vector of float) +0:71 'locals2' ( temp structure{ global int i, global float f, global structure{ global int i, global float f} s1_1, global 4-component vector of float bleh}) +0:71 Constant: +0:71 3 (const int) +0:71 add ( temp float) +0:71 add ( temp float) +0:71 add ( temp float) +0:71 direct index ( temp float) +0:71 'localFArray' ( temp 16-element array of float) +0:71 Constant: +0:71 4 (const int) +0:71 f: direct index for structure ( global float) +0:71 s1_1: direct index for structure ( global structure{ global int i, global float f}) +0:71 'locals2' ( temp structure{ global int i, global float f, global structure{ global int i, global float f} s1_1, global 4-component vector of float bleh}) +0:71 Constant: +0:71 2 (const int) +0:71 Constant: +0:71 1 (const int) +0:71 indirect index ( temp float) +0:71 'localArray' ( temp 16-element array of float) +0:71 'x' ( temp int) +0:71 indirect index ( temp float) +0:71 'a' ( temp 16-element array of float) +0:71 'x' ( temp int) +0:71 texture ( global 4-component vector of float) +0:71 'sampler' ( uniform sampler2D) +0:71 'coord' ( smooth in 2-component vector of float) +0:? Linker Objects +0:? 'sampler' ( uniform sampler2D) +0:? 'coord' ( smooth in 2-component vector of float) +0:? 'color' ( smooth in 4-component vector of float) +0:? 'foo' ( uniform structure{ global int i, global float f}) +0:? 'foo2' ( uniform structure{ global int i, global float f, global structure{ global int i, global float f} s1_1, global 4-component vector of float bleh}) +0:? 'foo3' ( uniform structure{ global structure{ global int i, global float f, global structure{ global int i, global float f} s1_1, global 4-component vector of float bleh} s2_1, global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:? 'uFloatArray' ( uniform 16-element array of float) +0:? 'condition' ( uniform int) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/loops.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/loops.frag.out new file mode 100644 index 0000000..cf38299 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/loops.frag.out @@ -0,0 +1,1935 @@ +loops.frag +WARNING: 0:14: varying deprecated in version 130; may be removed in future release + +Shader version: 130 +0:? Sequence +0:53 Function Definition: main( ( global void) +0:53 Function Parameters: +0:55 Sequence +0:55 Sequence +0:55 move second child to first child ( temp 4-component vector of float) +0:55 'color' ( temp 4-component vector of float) +0:55 'BaseColor' ( smooth in 4-component vector of float) +0:58 Loop with condition tested first +0:58 Loop Condition +0:58 Constant: +0:58 true (const bool) +0:58 Loop Body +0:59 Sequence +0:59 Test condition and select ( temp void) +0:59 Condition +0:59 Compare Less Than ( temp bool) +0:59 direct index ( temp float) +0:59 'color' ( temp 4-component vector of float) +0:59 Constant: +0:59 0 (const int) +0:59 Constant: +0:59 0.330000 +0:59 true case +0:60 Sequence +0:60 add second child into first child ( temp 4-component vector of float) +0:60 'color' ( temp 4-component vector of float) +0:60 Constant: +0:60 0.330000 +0:60 0.330000 +0:60 0.330000 +0:60 0.330000 +0:61 Branch: Break +0:63 Test condition and select ( temp void) +0:63 Condition +0:63 Compare Less Than ( temp bool) +0:63 direct index ( temp float) +0:63 'color' ( temp 4-component vector of float) +0:63 Constant: +0:63 0 (const int) +0:63 Constant: +0:63 0.660000 +0:63 true case +0:64 Sequence +0:64 add second child into first child ( temp 4-component vector of float) +0:64 'color' ( temp 4-component vector of float) +0:64 Constant: +0:64 0.660000 +0:64 0.660000 +0:64 0.660000 +0:64 0.660000 +0:65 Branch: Break +0:68 add second child into first child ( temp 4-component vector of float) +0:68 'color' ( temp 4-component vector of float) +0:68 Constant: +0:68 0.330000 +0:68 0.330000 +0:68 0.330000 +0:68 0.330000 +0:69 Branch: Break +0:73 Loop with condition tested first +0:73 Loop Condition +0:73 Compare Less Than ( temp bool) +0:73 direct index ( temp float) +0:73 'color' ( temp 4-component vector of float) +0:73 Constant: +0:73 0 (const int) +0:73 'd' ( uniform float) +0:73 Loop Body +0:74 Sequence +0:74 add second child into first child ( temp 4-component vector of float) +0:74 'color' ( temp 4-component vector of float) +0:74 'bigColor' ( uniform 4-component vector of float) +0:78 Loop with condition tested first +0:78 Loop Condition +0:78 Compare Less Than ( temp bool) +0:78 direct index ( temp float) +0:78 'color' ( temp 4-component vector of float) +0:78 Constant: +0:78 2 (const int) +0:78 'd' ( uniform float) +0:78 Loop Body +0:79 Sequence +0:79 add second child into first child ( temp 4-component vector of float) +0:79 'color' ( temp 4-component vector of float) +0:79 'bigColor1_1' ( uniform 4-component vector of float) +0:80 Test condition and select ( temp void) +0:80 Condition +0:80 Compare Less Than ( temp bool) +0:80 direct index ( temp float) +0:80 'color' ( temp 4-component vector of float) +0:80 Constant: +0:80 3 (const int) +0:80 'd' ( uniform float) +0:80 true case +0:81 Branch: Continue +0:83 add second child into first child ( temp 4-component vector of float) +0:83 'color' ( temp 4-component vector of float) +0:83 'bigColor1_1' ( uniform 4-component vector of float) +0:87 Loop with condition tested first +0:87 Loop Condition +0:87 Compare Less Than ( temp bool) +0:87 direct index ( temp float) +0:87 'color' ( temp 4-component vector of float) +0:87 Constant: +0:87 0 (const int) +0:87 Constant: +0:87 42.000000 +0:87 Loop Body +0:88 Sequence +0:88 Pre-Increment ( temp 4-component vector of float) +0:88 'color' ( temp 4-component vector of float) +0:92 Loop with condition tested first +0:92 Loop Condition +0:92 logical-and ( temp bool) +0:92 Compare Less Than ( temp bool) +0:92 direct index ( temp float) +0:92 'color' ( temp 4-component vector of float) +0:92 Constant: +0:92 3 (const int) +0:92 'd2' ( uniform float) +0:92 Compare Less Than ( temp bool) +0:92 direct index ( temp float) +0:92 'color' ( temp 4-component vector of float) +0:92 Constant: +0:92 1 (const int) +0:92 'd3' ( uniform float) +0:92 Loop Body +0:93 Sequence +0:93 add second child into first child ( temp 4-component vector of float) +0:93 'color' ( temp 4-component vector of float) +0:93 'bigColor1_2' ( uniform 4-component vector of float) +0:97 Loop with condition tested first +0:97 Loop Condition +0:97 Compare Less Than ( temp bool) +0:97 direct index ( temp float) +0:97 'color' ( temp 4-component vector of float) +0:97 Constant: +0:97 2 (const int) +0:97 'd3' ( uniform float) +0:97 Loop Body +0:98 Sequence +0:98 add second child into first child ( temp 4-component vector of float) +0:98 'color' ( temp 4-component vector of float) +0:98 'bigColor1_3' ( uniform 4-component vector of float) +0:99 Test condition and select ( temp void) +0:99 Condition +0:99 Compare Less Than ( temp bool) +0:99 direct index ( temp float) +0:99 'color' ( temp 4-component vector of float) +0:99 Constant: +0:99 1 (const int) +0:99 'd4' ( uniform float) +0:99 true case +0:100 Branch: Break +0:101 add second child into first child ( temp 4-component vector of float) +0:101 'color' ( temp 4-component vector of float) +0:101 'bigColor1_3' ( uniform 4-component vector of float) +0:105 Sequence +0:105 Sequence +0:105 move second child to first child ( temp int) +0:105 'i' ( temp int) +0:105 Constant: +0:105 0 (const int) +0:105 Loop with condition tested first +0:105 Loop Condition +0:105 Compare Less Than ( temp bool) +0:105 'i' ( temp int) +0:105 'Count' ( uniform int) +0:105 Loop Body +0:106 Sequence +0:106 add second child into first child ( temp 4-component vector of float) +0:106 'color' ( temp 4-component vector of float) +0:106 'bigColor2' ( uniform 4-component vector of float) +0:105 Loop Terminal Expression +0:105 Pre-Increment ( temp int) +0:105 'i' ( temp int) +0:112 Loop with condition not tested first +0:112 Loop Condition +0:112 Compare Less Than ( temp bool) +0:112 direct index ( temp float) +0:112 'color' ( temp 4-component vector of float) +0:112 Constant: +0:112 0 (const int) +0:112 'd2' ( uniform float) +0:112 Loop Body +0:111 Sequence +0:111 add second child into first child ( temp 4-component vector of float) +0:111 'color' ( temp 4-component vector of float) +0:111 'bigColor3' ( uniform 4-component vector of float) +0:115 Sequence +0:115 Sequence +0:115 move second child to first child ( temp int) +0:115 'i' ( temp int) +0:115 Constant: +0:115 0 (const int) +0:115 Loop with condition tested first +0:115 Loop Condition +0:115 Compare Less Than ( temp bool) +0:115 'i' ( temp int) +0:115 Constant: +0:115 42 (const int) +0:115 Loop Body +0:116 Sequence +0:116 add second child into first child ( temp float) +0:116 direct index ( temp float) +0:116 'color' ( temp 4-component vector of float) +0:116 Constant: +0:116 2 (const int) +0:116 'd3' ( uniform float) +0:115 Loop Terminal Expression +0:115 Pre-Increment ( temp int) +0:115 'i' ( temp int) +0:120 Sequence +0:120 Sequence +0:120 move second child to first child ( temp int) +0:120 'i' ( temp int) +0:120 Constant: +0:120 0 (const int) +0:120 Loop with condition tested first +0:120 Loop Condition +0:120 Compare Less Than ( temp bool) +0:120 'i' ( temp int) +0:120 Constant: +0:120 100 (const int) +0:120 Loop Body +0:121 Sequence +0:121 Test condition and select ( temp void) +0:121 Condition +0:121 Compare Less Than ( temp bool) +0:121 direct index ( temp float) +0:121 'color' ( temp 4-component vector of float) +0:121 Constant: +0:121 2 (const int) +0:121 Constant: +0:121 20.000000 +0:121 true case +0:122 Post-Increment ( temp float) +0:122 direct index ( temp float) +0:122 'color' ( temp 4-component vector of float) +0:122 Constant: +0:122 0 (const int) +0:121 false case +0:124 Post-Increment ( temp float) +0:124 direct index ( temp float) +0:124 'color' ( temp 4-component vector of float) +0:124 Constant: +0:124 1 (const int) +0:125 Test condition and select ( temp void) +0:125 Condition +0:125 Compare Less Than ( temp bool) +0:125 direct index ( temp float) +0:125 'color' ( temp 4-component vector of float) +0:125 Constant: +0:125 3 (const int) +0:125 Constant: +0:125 20.000000 +0:125 true case +0:126 Test condition and select ( temp void) +0:126 Condition +0:126 Compare Greater Than ( temp bool) +0:126 direct index ( temp float) +0:126 'color' ( temp 4-component vector of float) +0:126 Constant: +0:126 2 (const int) +0:126 direct index ( temp float) +0:126 'color' ( temp 4-component vector of float) +0:126 Constant: +0:126 1 (const int) +0:126 true case +0:127 Constant: +0:127 0 (const int) +0:120 Loop Terminal Expression +0:120 Pre-Increment ( temp int) +0:120 'i' ( temp int) +0:131 Sequence +0:131 Sequence +0:131 move second child to first child ( temp int) +0:131 'i' ( temp int) +0:131 Constant: +0:131 0 (const int) +0:131 Loop with condition tested first +0:131 Loop Condition +0:131 Compare Less Than ( temp bool) +0:131 'i' ( temp int) +0:131 Constant: +0:131 120 (const int) +0:131 Loop Body +0:132 Sequence +0:132 Test condition and select ( temp void) +0:132 Condition +0:132 Compare Less Than ( temp bool) +0:132 direct index ( temp float) +0:132 'color' ( temp 4-component vector of float) +0:132 Constant: +0:132 2 (const int) +0:132 Constant: +0:132 20.000000 +0:132 true case +0:133 Post-Increment ( temp float) +0:133 direct index ( temp float) +0:133 'color' ( temp 4-component vector of float) +0:133 Constant: +0:133 0 (const int) +0:132 false case +0:135 Post-Increment ( temp float) +0:135 direct index ( temp float) +0:135 'color' ( temp 4-component vector of float) +0:135 Constant: +0:135 1 (const int) +0:131 Loop Terminal Expression +0:131 Pre-Increment ( temp int) +0:131 'i' ( temp int) +0:139 Sequence +0:139 Sequence +0:139 move second child to first child ( temp int) +0:139 'i' ( temp int) +0:139 Constant: +0:139 0 (const int) +0:139 Loop with condition tested first +0:139 Loop Condition +0:139 Compare Less Than ( temp bool) +0:139 'i' ( temp int) +0:139 Constant: +0:139 42 (const int) +0:139 Loop Body +0:140 Sequence +0:140 add second child into first child ( temp float) +0:140 direct index ( temp float) +0:140 'color' ( temp 4-component vector of float) +0:140 Constant: +0:140 2 (const int) +0:140 'd3' ( uniform float) +0:141 Test condition and select ( temp void) +0:141 Condition +0:141 Compare Less Than ( temp bool) +0:141 direct index ( temp float) +0:141 'color' ( temp 4-component vector of float) +0:141 Constant: +0:141 0 (const int) +0:141 'd4' ( uniform float) +0:141 true case +0:142 Branch: Continue +0:143 Pre-Increment ( temp float) +0:143 direct index ( temp float) +0:143 'color' ( temp 4-component vector of float) +0:143 Constant: +0:143 3 (const int) +0:139 Loop Terminal Expression +0:139 Pre-Increment ( temp int) +0:139 'i' ( temp int) +0:147 Sequence +0:147 Sequence +0:147 move second child to first child ( temp int) +0:147 'i' ( temp int) +0:147 Constant: +0:147 0 (const int) +0:147 Loop with condition tested first +0:147 Loop Condition +0:147 Compare Less Than ( temp bool) +0:147 'i' ( temp int) +0:147 Constant: +0:147 42 (const int) +0:147 Loop Body +0:148 Sequence +0:148 add second child into first child ( temp float) +0:148 direct index ( temp float) +0:148 'color' ( temp 4-component vector of float) +0:148 Constant: +0:148 2 (const int) +0:148 'd3' ( uniform float) +0:149 Test condition and select ( temp void) +0:149 Condition +0:149 Compare Less Than ( temp bool) +0:149 direct index ( temp float) +0:149 'color' ( temp 4-component vector of float) +0:149 Constant: +0:149 0 (const int) +0:149 'd4' ( uniform float) +0:149 true case +0:150 Branch: Break +0:151 Pre-Increment ( temp float) +0:151 direct index ( temp float) +0:151 'color' ( temp 4-component vector of float) +0:151 Constant: +0:151 3 (const int) +0:147 Loop Terminal Expression +0:147 Pre-Increment ( temp int) +0:147 'i' ( temp int) +0:163 Loop with condition not tested first +0:163 Loop Condition +0:163 Compare Less Than ( temp bool) +0:163 direct index ( temp float) +0:163 'color' ( temp 4-component vector of float) +0:163 Constant: +0:163 2 (const int) +0:163 'd4' ( uniform float) +0:163 Loop Body +0:156 Sequence +0:156 add second child into first child ( temp 4-component vector of float) +0:156 'color' ( temp 4-component vector of float) +0:156 'bigColor4' ( uniform 4-component vector of float) +0:157 Test condition and select ( temp void) +0:157 Condition +0:157 Compare Less Than ( temp bool) +0:157 direct index ( temp float) +0:157 'color' ( temp 4-component vector of float) +0:157 Constant: +0:157 0 (const int) +0:157 'd4' ( uniform float) +0:157 true case +0:158 Branch: Continue +0:159 Test condition and select ( temp void) +0:159 Condition +0:159 Compare Less Than ( temp bool) +0:159 direct index ( temp float) +0:159 'color' ( temp 4-component vector of float) +0:159 Constant: +0:159 1 (const int) +0:159 'd4' ( uniform float) +0:159 true case +0:160 add second child into first child ( temp float) +0:160 direct index ( temp float) +0:160 'color' ( temp 4-component vector of float) +0:160 Constant: +0:160 1 (const int) +0:160 'd4' ( uniform float) +0:159 false case +0:162 add second child into first child ( temp float) +0:162 direct index ( temp float) +0:162 'color' ( temp 4-component vector of float) +0:162 Constant: +0:162 0 (const int) +0:162 'd4' ( uniform float) +0:170 Loop with condition not tested first +0:170 Loop Condition +0:170 Compare Less Than ( temp bool) +0:170 direct index ( temp float) +0:170 'color' ( temp 4-component vector of float) +0:170 Constant: +0:170 0 (const int) +0:170 'd5' ( uniform float) +0:170 Loop Body +0:167 Sequence +0:167 add second child into first child ( temp 4-component vector of float) +0:167 'color' ( temp 4-component vector of float) +0:167 'bigColor5' ( uniform 4-component vector of float) +0:168 Test condition and select ( temp void) +0:168 Condition +0:168 Compare Less Than ( temp bool) +0:168 direct index ( temp float) +0:168 'color' ( temp 4-component vector of float) +0:168 Constant: +0:168 1 (const int) +0:168 'd5' ( uniform float) +0:168 true case +0:169 add second child into first child ( temp float) +0:169 direct index ( temp float) +0:169 'color' ( temp 4-component vector of float) +0:169 Constant: +0:169 1 (const int) +0:169 'd5' ( uniform float) +0:173 Test condition and select ( temp void) +0:173 Condition +0:173 Compare Less Than ( temp bool) +0:173 direct index ( temp float) +0:173 'color' ( temp 4-component vector of float) +0:173 Constant: +0:173 0 (const int) +0:173 'd6' ( uniform float) +0:173 true case +0:174 Sequence +0:174 Loop with condition tested first +0:174 Loop Condition +0:174 Compare Less Than ( temp bool) +0:174 direct index ( temp float) +0:174 'color' ( temp 4-component vector of float) +0:174 Constant: +0:174 1 (const int) +0:174 'd6' ( uniform float) +0:174 Loop Body +0:175 add second child into first child ( temp 4-component vector of float) +0:175 'color' ( temp 4-component vector of float) +0:175 'bigColor6' ( uniform 4-component vector of float) +0:173 false case +0:177 Sequence +0:177 Loop with condition tested first +0:177 Loop Condition +0:177 Compare Less Than ( temp bool) +0:177 direct index ( temp float) +0:177 'color' ( temp 4-component vector of float) +0:177 Constant: +0:177 2 (const int) +0:177 'd6' ( uniform float) +0:177 Loop Body +0:178 add second child into first child ( temp float) +0:178 direct index ( temp float) +0:178 'color' ( temp 4-component vector of float) +0:178 Constant: +0:178 2 (const int) +0:178 direct index ( temp float) +0:178 'bigColor6' ( uniform 4-component vector of float) +0:178 Constant: +0:178 2 (const int) +0:182 Test condition and select ( temp void) +0:182 Condition +0:182 Compare Less Than ( temp bool) +0:182 direct index ( temp float) +0:182 'color' ( temp 4-component vector of float) +0:182 Constant: +0:182 0 (const int) +0:182 'd6' ( uniform float) +0:182 true case +0:183 Sequence +0:183 Loop with condition tested first +0:183 Loop Condition +0:183 Compare Less Than ( temp bool) +0:183 direct index ( temp float) +0:183 'color' ( temp 4-component vector of float) +0:183 Constant: +0:183 1 (const int) +0:183 'd6' ( uniform float) +0:183 Loop Body +0:184 Sequence +0:184 add second child into first child ( temp 4-component vector of float) +0:184 'color' ( temp 4-component vector of float) +0:184 'bigColor6' ( uniform 4-component vector of float) +0:185 Test condition and select ( temp void) +0:185 Condition +0:185 Compare Less Than ( temp bool) +0:185 'd7' ( uniform float) +0:185 Constant: +0:185 1.000000 +0:185 true case +0:186 Branch: Break +0:182 false case +0:190 Sequence +0:190 Loop with condition tested first +0:190 Loop Condition +0:190 Compare Less Than ( temp bool) +0:190 direct index ( temp float) +0:190 'color' ( temp 4-component vector of float) +0:190 Constant: +0:190 2 (const int) +0:190 'd6' ( uniform float) +0:190 Loop Body +0:191 add second child into first child ( temp float) +0:191 direct index ( temp float) +0:191 'color' ( temp 4-component vector of float) +0:191 Constant: +0:191 2 (const int) +0:191 direct index ( temp float) +0:191 'bigColor6' ( uniform 4-component vector of float) +0:191 Constant: +0:191 2 (const int) +0:209 Loop with condition not tested first +0:209 Loop Condition +0:209 Constant: +0:209 true (const bool) +0:209 Loop Body +0:197 Sequence +0:197 Test condition and select ( temp void) +0:197 Condition +0:197 Compare Less Than ( temp bool) +0:197 'd7' ( uniform float) +0:197 Constant: +0:197 0.000000 +0:197 true case +0:198 Branch: Break +0:200 add second child into first child ( temp 4-component vector of float) +0:200 'color' ( temp 4-component vector of float) +0:200 'bigColor7' ( uniform 4-component vector of float) +0:202 Test condition and select ( temp void) +0:202 Condition +0:202 Compare Less Than ( temp bool) +0:202 'd7' ( uniform float) +0:202 Constant: +0:202 1.000000 +0:202 true case +0:203 Sequence +0:203 Post-Increment ( temp float) +0:203 direct index ( temp float) +0:203 'color' ( temp 4-component vector of float) +0:203 Constant: +0:203 2 (const int) +0:204 Branch: Break +0:207 add second child into first child ( temp 4-component vector of float) +0:207 'color' ( temp 4-component vector of float) +0:207 'BaseColor' ( smooth in 4-component vector of float) +0:234 Loop with condition not tested first +0:234 Loop Condition +0:234 Compare Less Than ( temp bool) +0:234 direct index ( temp float) +0:234 'color' ( temp 4-component vector of float) +0:234 Constant: +0:234 2 (const int) +0:234 'd8' ( uniform float) +0:234 Loop Body +0:217 Sequence +0:217 Test condition and select ( temp void) +0:217 Condition +0:217 Compare Less Than ( temp bool) +0:217 'd8' ( uniform float) +0:217 Constant: +0:217 0.000000 +0:217 true case +0:218 Branch: Break +0:220 add second child into first child ( temp 4-component vector of float) +0:220 'color' ( temp 4-component vector of float) +0:220 'bigColor7' ( uniform 4-component vector of float) +0:222 Test condition and select ( temp void) +0:222 Condition +0:222 Compare Less Than ( temp bool) +0:222 'd8' ( uniform float) +0:222 Constant: +0:222 1.000000 +0:222 true case +0:223 Sequence +0:223 Post-Increment ( temp float) +0:223 direct index ( temp float) +0:223 'color' ( temp 4-component vector of float) +0:223 Constant: +0:223 2 (const int) +0:224 Test condition and select ( temp void) +0:224 Condition +0:224 Compare Less Than ( temp bool) +0:224 'd8' ( uniform float) +0:224 Constant: +0:224 2.000000 +0:224 true case +0:225 Sequence +0:225 Post-Increment ( temp float) +0:225 direct index ( temp float) +0:225 'color' ( temp 4-component vector of float) +0:225 Constant: +0:225 1 (const int) +0:224 false case +0:227 Sequence +0:227 Post-Increment ( temp float) +0:227 direct index ( temp float) +0:227 'color' ( temp 4-component vector of float) +0:227 Constant: +0:227 0 (const int) +0:229 Branch: Break +0:232 add second child into first child ( temp 4-component vector of float) +0:232 'color' ( temp 4-component vector of float) +0:232 'BaseColor' ( smooth in 4-component vector of float) +0:237 Loop with condition tested first +0:237 Loop Condition +0:237 Compare Less Than ( temp bool) +0:237 direct index ( temp float) +0:237 'color' ( temp 4-component vector of float) +0:237 Constant: +0:237 3 (const int) +0:237 'd9' ( uniform float) +0:237 Loop Body +0:238 Sequence +0:238 Test condition and select ( temp void) +0:238 Condition +0:238 Compare Greater Than ( temp bool) +0:238 'd9' ( uniform float) +0:238 'd8' ( uniform float) +0:238 true case +0:239 Sequence +0:239 Test condition and select ( temp void) +0:239 Condition +0:239 Compare Less Than or Equal ( temp bool) +0:239 direct index ( temp float) +0:239 'color' ( temp 4-component vector of float) +0:239 Constant: +0:239 0 (const int) +0:239 'd7' ( uniform float) +0:239 true case +0:240 Sequence +0:240 Test condition and select ( temp void) +0:240 Condition +0:240 Compare Equal ( temp bool) +0:240 direct index ( temp float) +0:240 'color' ( temp 4-component vector of float) +0:240 Constant: +0:240 2 (const int) +0:240 Constant: +0:240 5.000000 +0:240 true case +0:241 Post-Increment ( temp float) +0:241 direct index ( temp float) +0:241 'color' ( temp 4-component vector of float) +0:241 Constant: +0:241 3 (const int) +0:240 false case +0:243 Branch: Break +0:250 Loop with condition tested first +0:250 Loop Condition +0:250 Compare Less Than ( temp bool) +0:250 direct index ( temp float) +0:250 'color' ( temp 4-component vector of float) +0:250 Constant: +0:250 2 (const int) +0:250 'd10' ( uniform float) +0:250 Loop Body +0:251 Sequence +0:251 Post-Increment ( temp float) +0:251 direct index ( temp float) +0:251 'color' ( temp 4-component vector of float) +0:251 Constant: +0:251 1 (const int) +0:252 Test condition and select ( temp void) +0:252 Condition +0:252 Compare Less Than ( temp bool) +0:252 direct index ( temp float) +0:252 'color' ( temp 4-component vector of float) +0:252 Constant: +0:252 1 (const int) +0:252 'd11' ( uniform float) +0:252 true case +0:253 Sequence +0:253 Post-Increment ( temp float) +0:253 direct index ( temp float) +0:253 'color' ( temp 4-component vector of float) +0:253 Constant: +0:253 2 (const int) +0:254 Test condition and select ( temp void) +0:254 Condition +0:254 Compare Less Than ( temp bool) +0:254 direct index ( temp float) +0:254 'color' ( temp 4-component vector of float) +0:254 Constant: +0:254 3 (const int) +0:254 'd12' ( uniform float) +0:254 true case +0:255 Post-Increment ( temp float) +0:255 direct index ( temp float) +0:255 'color' ( temp 4-component vector of float) +0:255 Constant: +0:255 3 (const int) +0:254 false case +0:257 Post-Increment ( temp float) +0:257 direct index ( temp float) +0:257 'color' ( temp 4-component vector of float) +0:257 Constant: +0:257 0 (const int) +0:258 Branch: Continue +0:261 Post-Increment ( temp 4-component vector of float) +0:261 'color' ( temp 4-component vector of float) +0:262 Branch: Break +0:266 Loop with condition tested first +0:266 Loop Condition +0:266 Compare Less Than ( temp bool) +0:266 direct index ( temp float) +0:266 'color' ( temp 4-component vector of float) +0:266 Constant: +0:266 0 (const int) +0:266 Constant: +0:266 10.000000 +0:266 Loop Body +0:267 Sequence +0:267 add second child into first child ( temp 4-component vector of float) +0:267 'color' ( temp 4-component vector of float) +0:267 'bigColor8' ( uniform 4-component vector of float) +0:269 Test condition and select ( temp void) +0:269 Condition +0:269 Compare Less Than ( temp bool) +0:269 direct index ( temp float) +0:269 'color' ( temp 4-component vector of float) +0:269 Constant: +0:269 2 (const int) +0:269 'd8' ( uniform float) +0:269 true case +0:270 Test condition and select ( temp void) +0:270 Condition +0:270 Compare Less Than ( temp bool) +0:270 direct index ( temp float) +0:270 'color' ( temp 4-component vector of float) +0:270 Constant: +0:270 3 (const int) +0:270 'd6' ( uniform float) +0:270 true case +0:271 Branch: Continue +0:273 add second child into first child ( temp float) +0:273 direct index ( temp float) +0:273 'color' ( temp 4-component vector of float) +0:273 Constant: +0:273 1 (const int) +0:273 direct index ( temp float) +0:273 'bigColor8' ( uniform 4-component vector of float) +0:273 Constant: +0:273 0 (const int) +0:276 Post-Increment ( temp 4-component vector of float) +0:276 'color' ( temp 4-component vector of float) +0:277 move second child to first child ( temp 4-component vector of float) +0:277 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:277 'color' ( temp 4-component vector of float) +0:280 Loop with condition tested first +0:280 Loop Condition +0:280 Compare Less Than ( temp bool) +0:280 direct index ( temp float) +0:280 'color' ( temp 4-component vector of float) +0:280 Constant: +0:280 0 (const int) +0:280 'd14' ( uniform float) +0:280 Loop Body +0:281 Sequence +0:281 Test condition and select ( temp void) +0:281 Condition +0:281 Compare Less Than ( temp bool) +0:281 direct index ( temp float) +0:281 'color' ( temp 4-component vector of float) +0:281 Constant: +0:281 1 (const int) +0:281 'd15' ( uniform float) +0:281 true case +0:282 Sequence +0:282 Branch: Return +0:281 false case +0:285 Post-Increment ( temp 4-component vector of float) +0:285 'color' ( temp 4-component vector of float) +0:288 Post-Increment ( temp 4-component vector of float) +0:288 'color' ( temp 4-component vector of float) +0:290 Loop with condition tested first +0:290 Loop Condition +0:290 Compare Less Than ( temp bool) +0:290 direct index ( temp float) +0:290 'color' ( temp 4-component vector of float) +0:290 Constant: +0:290 3 (const int) +0:290 'd16' ( uniform float) +0:290 Loop Body +0:291 Sequence +0:291 Post-Increment ( temp float) +0:291 direct index ( temp float) +0:291 'color' ( temp 4-component vector of float) +0:291 Constant: +0:291 3 (const int) +0:296 Loop with condition tested first +0:296 Loop Condition +0:296 logical-and ( temp bool) +0:296 Compare Less Than ( temp bool) +0:296 direct index ( temp float) +0:296 'color' ( temp 4-component vector of float) +0:296 Constant: +0:296 3 (const int) +0:296 'd2' ( uniform float) +0:296 Compare Less Than ( temp bool) +0:296 direct index ( temp float) +0:296 'color' ( temp 4-component vector of float) +0:296 Constant: +0:296 1 (const int) +0:296 'd3' ( uniform float) +0:296 Loop Body +0:297 Sequence +0:297 add second child into first child ( temp 4-component vector of float) +0:297 'color' ( temp 4-component vector of float) +0:297 'bigColor1_2' ( uniform 4-component vector of float) +0:298 Test condition and select ( temp void) +0:298 Condition +0:298 Compare Less Than ( temp bool) +0:298 direct index ( temp float) +0:298 'color' ( temp 4-component vector of float) +0:298 Constant: +0:298 2 (const int) +0:298 'd3' ( uniform float) +0:298 true case +0:299 Branch: Return +0:307 Loop with condition not tested first +0:307 Loop Condition +0:307 Compare Less Than ( temp bool) +0:307 direct index ( temp float) +0:307 'color' ( temp 4-component vector of float) +0:307 Constant: +0:307 0 (const int) +0:307 'd17' ( uniform float) +0:307 Loop Body +0:304 Sequence +0:304 Test condition and select ( temp void) +0:304 Condition +0:304 Compare Less Than ( temp bool) +0:304 direct index ( temp float) +0:304 'color' ( temp 4-component vector of float) +0:304 Constant: +0:304 1 (const int) +0:304 'd18' ( uniform float) +0:304 true case +0:305 Branch: Return +0:306 Post-Increment ( temp 4-component vector of float) +0:306 'color' ( temp 4-component vector of float) +0:310 Loop with condition tested first +0:310 Loop Condition +0:310 Compare Less Than ( temp bool) +0:310 direct index ( temp float) +0:310 'color' ( temp 4-component vector of float) +0:310 Constant: +0:310 1 (const int) +0:310 'd16' ( uniform float) +0:310 Loop Body +0:311 Sequence +0:311 Test condition and select ( temp void) +0:311 Condition +0:311 Compare Less Than ( temp bool) +0:311 direct index ( temp float) +0:311 'color' ( temp 4-component vector of float) +0:311 Constant: +0:311 3 (const int) +0:311 'd16' ( uniform float) +0:311 true case +0:312 Sequence +0:312 Branch: Kill +0:311 false case +0:314 Post-Increment ( temp 4-component vector of float) +0:314 'color' ( temp 4-component vector of float) +0:317 Post-Increment ( temp 4-component vector of float) +0:317 'color' ( temp 4-component vector of float) +0:319 move second child to first child ( temp 4-component vector of float) +0:319 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:319 'color' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'bigColor' ( uniform 4-component vector of float) +0:? 'bigColor1_1' ( uniform 4-component vector of float) +0:? 'bigColor1_2' ( uniform 4-component vector of float) +0:? 'bigColor1_3' ( uniform 4-component vector of float) +0:? 'bigColor2' ( uniform 4-component vector of float) +0:? 'bigColor3' ( uniform 4-component vector of float) +0:? 'bigColor4' ( uniform 4-component vector of float) +0:? 'bigColor5' ( uniform 4-component vector of float) +0:? 'bigColor6' ( uniform 4-component vector of float) +0:? 'bigColor7' ( uniform 4-component vector of float) +0:? 'bigColor8' ( uniform 4-component vector of float) +0:? 'BaseColor' ( smooth in 4-component vector of float) +0:? 'd' ( uniform float) +0:? 'd2' ( uniform float) +0:? 'd3' ( uniform float) +0:? 'd4' ( uniform float) +0:? 'd5' ( uniform float) +0:? 'd6' ( uniform float) +0:? 'd7' ( uniform float) +0:? 'd8' ( uniform float) +0:? 'd9' ( uniform float) +0:? 'd10' ( uniform float) +0:? 'd11' ( uniform float) +0:? 'd12' ( uniform float) +0:? 'd13' ( uniform float) +0:? 'd14' ( uniform float) +0:? 'd15' ( uniform float) +0:? 'd16' ( uniform float) +0:? 'd17' ( uniform float) +0:? 'd18' ( uniform float) +0:? 'd19' ( uniform float) +0:? 'd20' ( uniform float) +0:? 'd21' ( uniform float) +0:? 'd22' ( uniform float) +0:? 'd23' ( uniform float) +0:? 'd24' ( uniform float) +0:? 'd25' ( uniform float) +0:? 'd26' ( uniform float) +0:? 'd27' ( uniform float) +0:? 'd28' ( uniform float) +0:? 'd29' ( uniform float) +0:? 'd30' ( uniform float) +0:? 'd31' ( uniform float) +0:? 'd32' ( uniform float) +0:? 'd33' ( uniform float) +0:? 'd34' ( uniform float) +0:? 'Count' ( uniform int) + + +Linked fragment stage: + + +Shader version: 130 +0:? Sequence +0:53 Function Definition: main( ( global void) +0:53 Function Parameters: +0:55 Sequence +0:55 Sequence +0:55 move second child to first child ( temp 4-component vector of float) +0:55 'color' ( temp 4-component vector of float) +0:55 'BaseColor' ( smooth in 4-component vector of float) +0:58 Loop with condition tested first +0:58 Loop Condition +0:58 Constant: +0:58 true (const bool) +0:58 Loop Body +0:59 Sequence +0:59 Test condition and select ( temp void) +0:59 Condition +0:59 Compare Less Than ( temp bool) +0:59 direct index ( temp float) +0:59 'color' ( temp 4-component vector of float) +0:59 Constant: +0:59 0 (const int) +0:59 Constant: +0:59 0.330000 +0:59 true case +0:60 Sequence +0:60 add second child into first child ( temp 4-component vector of float) +0:60 'color' ( temp 4-component vector of float) +0:60 Constant: +0:60 0.330000 +0:60 0.330000 +0:60 0.330000 +0:60 0.330000 +0:61 Branch: Break +0:63 Test condition and select ( temp void) +0:63 Condition +0:63 Compare Less Than ( temp bool) +0:63 direct index ( temp float) +0:63 'color' ( temp 4-component vector of float) +0:63 Constant: +0:63 0 (const int) +0:63 Constant: +0:63 0.660000 +0:63 true case +0:64 Sequence +0:64 add second child into first child ( temp 4-component vector of float) +0:64 'color' ( temp 4-component vector of float) +0:64 Constant: +0:64 0.660000 +0:64 0.660000 +0:64 0.660000 +0:64 0.660000 +0:65 Branch: Break +0:68 add second child into first child ( temp 4-component vector of float) +0:68 'color' ( temp 4-component vector of float) +0:68 Constant: +0:68 0.330000 +0:68 0.330000 +0:68 0.330000 +0:68 0.330000 +0:69 Branch: Break +0:73 Loop with condition tested first +0:73 Loop Condition +0:73 Compare Less Than ( temp bool) +0:73 direct index ( temp float) +0:73 'color' ( temp 4-component vector of float) +0:73 Constant: +0:73 0 (const int) +0:73 'd' ( uniform float) +0:73 Loop Body +0:74 Sequence +0:74 add second child into first child ( temp 4-component vector of float) +0:74 'color' ( temp 4-component vector of float) +0:74 'bigColor' ( uniform 4-component vector of float) +0:78 Loop with condition tested first +0:78 Loop Condition +0:78 Compare Less Than ( temp bool) +0:78 direct index ( temp float) +0:78 'color' ( temp 4-component vector of float) +0:78 Constant: +0:78 2 (const int) +0:78 'd' ( uniform float) +0:78 Loop Body +0:79 Sequence +0:79 add second child into first child ( temp 4-component vector of float) +0:79 'color' ( temp 4-component vector of float) +0:79 'bigColor1_1' ( uniform 4-component vector of float) +0:80 Test condition and select ( temp void) +0:80 Condition +0:80 Compare Less Than ( temp bool) +0:80 direct index ( temp float) +0:80 'color' ( temp 4-component vector of float) +0:80 Constant: +0:80 3 (const int) +0:80 'd' ( uniform float) +0:80 true case +0:81 Branch: Continue +0:83 add second child into first child ( temp 4-component vector of float) +0:83 'color' ( temp 4-component vector of float) +0:83 'bigColor1_1' ( uniform 4-component vector of float) +0:87 Loop with condition tested first +0:87 Loop Condition +0:87 Compare Less Than ( temp bool) +0:87 direct index ( temp float) +0:87 'color' ( temp 4-component vector of float) +0:87 Constant: +0:87 0 (const int) +0:87 Constant: +0:87 42.000000 +0:87 Loop Body +0:88 Sequence +0:88 Pre-Increment ( temp 4-component vector of float) +0:88 'color' ( temp 4-component vector of float) +0:92 Loop with condition tested first +0:92 Loop Condition +0:92 logical-and ( temp bool) +0:92 Compare Less Than ( temp bool) +0:92 direct index ( temp float) +0:92 'color' ( temp 4-component vector of float) +0:92 Constant: +0:92 3 (const int) +0:92 'd2' ( uniform float) +0:92 Compare Less Than ( temp bool) +0:92 direct index ( temp float) +0:92 'color' ( temp 4-component vector of float) +0:92 Constant: +0:92 1 (const int) +0:92 'd3' ( uniform float) +0:92 Loop Body +0:93 Sequence +0:93 add second child into first child ( temp 4-component vector of float) +0:93 'color' ( temp 4-component vector of float) +0:93 'bigColor1_2' ( uniform 4-component vector of float) +0:97 Loop with condition tested first +0:97 Loop Condition +0:97 Compare Less Than ( temp bool) +0:97 direct index ( temp float) +0:97 'color' ( temp 4-component vector of float) +0:97 Constant: +0:97 2 (const int) +0:97 'd3' ( uniform float) +0:97 Loop Body +0:98 Sequence +0:98 add second child into first child ( temp 4-component vector of float) +0:98 'color' ( temp 4-component vector of float) +0:98 'bigColor1_3' ( uniform 4-component vector of float) +0:99 Test condition and select ( temp void) +0:99 Condition +0:99 Compare Less Than ( temp bool) +0:99 direct index ( temp float) +0:99 'color' ( temp 4-component vector of float) +0:99 Constant: +0:99 1 (const int) +0:99 'd4' ( uniform float) +0:99 true case +0:100 Branch: Break +0:101 add second child into first child ( temp 4-component vector of float) +0:101 'color' ( temp 4-component vector of float) +0:101 'bigColor1_3' ( uniform 4-component vector of float) +0:105 Sequence +0:105 Sequence +0:105 move second child to first child ( temp int) +0:105 'i' ( temp int) +0:105 Constant: +0:105 0 (const int) +0:105 Loop with condition tested first +0:105 Loop Condition +0:105 Compare Less Than ( temp bool) +0:105 'i' ( temp int) +0:105 'Count' ( uniform int) +0:105 Loop Body +0:106 Sequence +0:106 add second child into first child ( temp 4-component vector of float) +0:106 'color' ( temp 4-component vector of float) +0:106 'bigColor2' ( uniform 4-component vector of float) +0:105 Loop Terminal Expression +0:105 Pre-Increment ( temp int) +0:105 'i' ( temp int) +0:112 Loop with condition not tested first +0:112 Loop Condition +0:112 Compare Less Than ( temp bool) +0:112 direct index ( temp float) +0:112 'color' ( temp 4-component vector of float) +0:112 Constant: +0:112 0 (const int) +0:112 'd2' ( uniform float) +0:112 Loop Body +0:111 Sequence +0:111 add second child into first child ( temp 4-component vector of float) +0:111 'color' ( temp 4-component vector of float) +0:111 'bigColor3' ( uniform 4-component vector of float) +0:115 Sequence +0:115 Sequence +0:115 move second child to first child ( temp int) +0:115 'i' ( temp int) +0:115 Constant: +0:115 0 (const int) +0:115 Loop with condition tested first +0:115 Loop Condition +0:115 Compare Less Than ( temp bool) +0:115 'i' ( temp int) +0:115 Constant: +0:115 42 (const int) +0:115 Loop Body +0:116 Sequence +0:116 add second child into first child ( temp float) +0:116 direct index ( temp float) +0:116 'color' ( temp 4-component vector of float) +0:116 Constant: +0:116 2 (const int) +0:116 'd3' ( uniform float) +0:115 Loop Terminal Expression +0:115 Pre-Increment ( temp int) +0:115 'i' ( temp int) +0:120 Sequence +0:120 Sequence +0:120 move second child to first child ( temp int) +0:120 'i' ( temp int) +0:120 Constant: +0:120 0 (const int) +0:120 Loop with condition tested first +0:120 Loop Condition +0:120 Compare Less Than ( temp bool) +0:120 'i' ( temp int) +0:120 Constant: +0:120 100 (const int) +0:120 Loop Body +0:121 Sequence +0:121 Test condition and select ( temp void) +0:121 Condition +0:121 Compare Less Than ( temp bool) +0:121 direct index ( temp float) +0:121 'color' ( temp 4-component vector of float) +0:121 Constant: +0:121 2 (const int) +0:121 Constant: +0:121 20.000000 +0:121 true case +0:122 Post-Increment ( temp float) +0:122 direct index ( temp float) +0:122 'color' ( temp 4-component vector of float) +0:122 Constant: +0:122 0 (const int) +0:121 false case +0:124 Post-Increment ( temp float) +0:124 direct index ( temp float) +0:124 'color' ( temp 4-component vector of float) +0:124 Constant: +0:124 1 (const int) +0:125 Test condition and select ( temp void) +0:125 Condition +0:125 Compare Less Than ( temp bool) +0:125 direct index ( temp float) +0:125 'color' ( temp 4-component vector of float) +0:125 Constant: +0:125 3 (const int) +0:125 Constant: +0:125 20.000000 +0:125 true case +0:126 Test condition and select ( temp void) +0:126 Condition +0:126 Compare Greater Than ( temp bool) +0:126 direct index ( temp float) +0:126 'color' ( temp 4-component vector of float) +0:126 Constant: +0:126 2 (const int) +0:126 direct index ( temp float) +0:126 'color' ( temp 4-component vector of float) +0:126 Constant: +0:126 1 (const int) +0:126 true case +0:127 Constant: +0:127 0 (const int) +0:120 Loop Terminal Expression +0:120 Pre-Increment ( temp int) +0:120 'i' ( temp int) +0:131 Sequence +0:131 Sequence +0:131 move second child to first child ( temp int) +0:131 'i' ( temp int) +0:131 Constant: +0:131 0 (const int) +0:131 Loop with condition tested first +0:131 Loop Condition +0:131 Compare Less Than ( temp bool) +0:131 'i' ( temp int) +0:131 Constant: +0:131 120 (const int) +0:131 Loop Body +0:132 Sequence +0:132 Test condition and select ( temp void) +0:132 Condition +0:132 Compare Less Than ( temp bool) +0:132 direct index ( temp float) +0:132 'color' ( temp 4-component vector of float) +0:132 Constant: +0:132 2 (const int) +0:132 Constant: +0:132 20.000000 +0:132 true case +0:133 Post-Increment ( temp float) +0:133 direct index ( temp float) +0:133 'color' ( temp 4-component vector of float) +0:133 Constant: +0:133 0 (const int) +0:132 false case +0:135 Post-Increment ( temp float) +0:135 direct index ( temp float) +0:135 'color' ( temp 4-component vector of float) +0:135 Constant: +0:135 1 (const int) +0:131 Loop Terminal Expression +0:131 Pre-Increment ( temp int) +0:131 'i' ( temp int) +0:139 Sequence +0:139 Sequence +0:139 move second child to first child ( temp int) +0:139 'i' ( temp int) +0:139 Constant: +0:139 0 (const int) +0:139 Loop with condition tested first +0:139 Loop Condition +0:139 Compare Less Than ( temp bool) +0:139 'i' ( temp int) +0:139 Constant: +0:139 42 (const int) +0:139 Loop Body +0:140 Sequence +0:140 add second child into first child ( temp float) +0:140 direct index ( temp float) +0:140 'color' ( temp 4-component vector of float) +0:140 Constant: +0:140 2 (const int) +0:140 'd3' ( uniform float) +0:141 Test condition and select ( temp void) +0:141 Condition +0:141 Compare Less Than ( temp bool) +0:141 direct index ( temp float) +0:141 'color' ( temp 4-component vector of float) +0:141 Constant: +0:141 0 (const int) +0:141 'd4' ( uniform float) +0:141 true case +0:142 Branch: Continue +0:143 Pre-Increment ( temp float) +0:143 direct index ( temp float) +0:143 'color' ( temp 4-component vector of float) +0:143 Constant: +0:143 3 (const int) +0:139 Loop Terminal Expression +0:139 Pre-Increment ( temp int) +0:139 'i' ( temp int) +0:147 Sequence +0:147 Sequence +0:147 move second child to first child ( temp int) +0:147 'i' ( temp int) +0:147 Constant: +0:147 0 (const int) +0:147 Loop with condition tested first +0:147 Loop Condition +0:147 Compare Less Than ( temp bool) +0:147 'i' ( temp int) +0:147 Constant: +0:147 42 (const int) +0:147 Loop Body +0:148 Sequence +0:148 add second child into first child ( temp float) +0:148 direct index ( temp float) +0:148 'color' ( temp 4-component vector of float) +0:148 Constant: +0:148 2 (const int) +0:148 'd3' ( uniform float) +0:149 Test condition and select ( temp void) +0:149 Condition +0:149 Compare Less Than ( temp bool) +0:149 direct index ( temp float) +0:149 'color' ( temp 4-component vector of float) +0:149 Constant: +0:149 0 (const int) +0:149 'd4' ( uniform float) +0:149 true case +0:150 Branch: Break +0:151 Pre-Increment ( temp float) +0:151 direct index ( temp float) +0:151 'color' ( temp 4-component vector of float) +0:151 Constant: +0:151 3 (const int) +0:147 Loop Terminal Expression +0:147 Pre-Increment ( temp int) +0:147 'i' ( temp int) +0:163 Loop with condition not tested first +0:163 Loop Condition +0:163 Compare Less Than ( temp bool) +0:163 direct index ( temp float) +0:163 'color' ( temp 4-component vector of float) +0:163 Constant: +0:163 2 (const int) +0:163 'd4' ( uniform float) +0:163 Loop Body +0:156 Sequence +0:156 add second child into first child ( temp 4-component vector of float) +0:156 'color' ( temp 4-component vector of float) +0:156 'bigColor4' ( uniform 4-component vector of float) +0:157 Test condition and select ( temp void) +0:157 Condition +0:157 Compare Less Than ( temp bool) +0:157 direct index ( temp float) +0:157 'color' ( temp 4-component vector of float) +0:157 Constant: +0:157 0 (const int) +0:157 'd4' ( uniform float) +0:157 true case +0:158 Branch: Continue +0:159 Test condition and select ( temp void) +0:159 Condition +0:159 Compare Less Than ( temp bool) +0:159 direct index ( temp float) +0:159 'color' ( temp 4-component vector of float) +0:159 Constant: +0:159 1 (const int) +0:159 'd4' ( uniform float) +0:159 true case +0:160 add second child into first child ( temp float) +0:160 direct index ( temp float) +0:160 'color' ( temp 4-component vector of float) +0:160 Constant: +0:160 1 (const int) +0:160 'd4' ( uniform float) +0:159 false case +0:162 add second child into first child ( temp float) +0:162 direct index ( temp float) +0:162 'color' ( temp 4-component vector of float) +0:162 Constant: +0:162 0 (const int) +0:162 'd4' ( uniform float) +0:170 Loop with condition not tested first +0:170 Loop Condition +0:170 Compare Less Than ( temp bool) +0:170 direct index ( temp float) +0:170 'color' ( temp 4-component vector of float) +0:170 Constant: +0:170 0 (const int) +0:170 'd5' ( uniform float) +0:170 Loop Body +0:167 Sequence +0:167 add second child into first child ( temp 4-component vector of float) +0:167 'color' ( temp 4-component vector of float) +0:167 'bigColor5' ( uniform 4-component vector of float) +0:168 Test condition and select ( temp void) +0:168 Condition +0:168 Compare Less Than ( temp bool) +0:168 direct index ( temp float) +0:168 'color' ( temp 4-component vector of float) +0:168 Constant: +0:168 1 (const int) +0:168 'd5' ( uniform float) +0:168 true case +0:169 add second child into first child ( temp float) +0:169 direct index ( temp float) +0:169 'color' ( temp 4-component vector of float) +0:169 Constant: +0:169 1 (const int) +0:169 'd5' ( uniform float) +0:173 Test condition and select ( temp void) +0:173 Condition +0:173 Compare Less Than ( temp bool) +0:173 direct index ( temp float) +0:173 'color' ( temp 4-component vector of float) +0:173 Constant: +0:173 0 (const int) +0:173 'd6' ( uniform float) +0:173 true case +0:174 Sequence +0:174 Loop with condition tested first +0:174 Loop Condition +0:174 Compare Less Than ( temp bool) +0:174 direct index ( temp float) +0:174 'color' ( temp 4-component vector of float) +0:174 Constant: +0:174 1 (const int) +0:174 'd6' ( uniform float) +0:174 Loop Body +0:175 add second child into first child ( temp 4-component vector of float) +0:175 'color' ( temp 4-component vector of float) +0:175 'bigColor6' ( uniform 4-component vector of float) +0:173 false case +0:177 Sequence +0:177 Loop with condition tested first +0:177 Loop Condition +0:177 Compare Less Than ( temp bool) +0:177 direct index ( temp float) +0:177 'color' ( temp 4-component vector of float) +0:177 Constant: +0:177 2 (const int) +0:177 'd6' ( uniform float) +0:177 Loop Body +0:178 add second child into first child ( temp float) +0:178 direct index ( temp float) +0:178 'color' ( temp 4-component vector of float) +0:178 Constant: +0:178 2 (const int) +0:178 direct index ( temp float) +0:178 'bigColor6' ( uniform 4-component vector of float) +0:178 Constant: +0:178 2 (const int) +0:182 Test condition and select ( temp void) +0:182 Condition +0:182 Compare Less Than ( temp bool) +0:182 direct index ( temp float) +0:182 'color' ( temp 4-component vector of float) +0:182 Constant: +0:182 0 (const int) +0:182 'd6' ( uniform float) +0:182 true case +0:183 Sequence +0:183 Loop with condition tested first +0:183 Loop Condition +0:183 Compare Less Than ( temp bool) +0:183 direct index ( temp float) +0:183 'color' ( temp 4-component vector of float) +0:183 Constant: +0:183 1 (const int) +0:183 'd6' ( uniform float) +0:183 Loop Body +0:184 Sequence +0:184 add second child into first child ( temp 4-component vector of float) +0:184 'color' ( temp 4-component vector of float) +0:184 'bigColor6' ( uniform 4-component vector of float) +0:185 Test condition and select ( temp void) +0:185 Condition +0:185 Compare Less Than ( temp bool) +0:185 'd7' ( uniform float) +0:185 Constant: +0:185 1.000000 +0:185 true case +0:186 Branch: Break +0:182 false case +0:190 Sequence +0:190 Loop with condition tested first +0:190 Loop Condition +0:190 Compare Less Than ( temp bool) +0:190 direct index ( temp float) +0:190 'color' ( temp 4-component vector of float) +0:190 Constant: +0:190 2 (const int) +0:190 'd6' ( uniform float) +0:190 Loop Body +0:191 add second child into first child ( temp float) +0:191 direct index ( temp float) +0:191 'color' ( temp 4-component vector of float) +0:191 Constant: +0:191 2 (const int) +0:191 direct index ( temp float) +0:191 'bigColor6' ( uniform 4-component vector of float) +0:191 Constant: +0:191 2 (const int) +0:209 Loop with condition not tested first +0:209 Loop Condition +0:209 Constant: +0:209 true (const bool) +0:209 Loop Body +0:197 Sequence +0:197 Test condition and select ( temp void) +0:197 Condition +0:197 Compare Less Than ( temp bool) +0:197 'd7' ( uniform float) +0:197 Constant: +0:197 0.000000 +0:197 true case +0:198 Branch: Break +0:200 add second child into first child ( temp 4-component vector of float) +0:200 'color' ( temp 4-component vector of float) +0:200 'bigColor7' ( uniform 4-component vector of float) +0:202 Test condition and select ( temp void) +0:202 Condition +0:202 Compare Less Than ( temp bool) +0:202 'd7' ( uniform float) +0:202 Constant: +0:202 1.000000 +0:202 true case +0:203 Sequence +0:203 Post-Increment ( temp float) +0:203 direct index ( temp float) +0:203 'color' ( temp 4-component vector of float) +0:203 Constant: +0:203 2 (const int) +0:204 Branch: Break +0:207 add second child into first child ( temp 4-component vector of float) +0:207 'color' ( temp 4-component vector of float) +0:207 'BaseColor' ( smooth in 4-component vector of float) +0:234 Loop with condition not tested first +0:234 Loop Condition +0:234 Compare Less Than ( temp bool) +0:234 direct index ( temp float) +0:234 'color' ( temp 4-component vector of float) +0:234 Constant: +0:234 2 (const int) +0:234 'd8' ( uniform float) +0:234 Loop Body +0:217 Sequence +0:217 Test condition and select ( temp void) +0:217 Condition +0:217 Compare Less Than ( temp bool) +0:217 'd8' ( uniform float) +0:217 Constant: +0:217 0.000000 +0:217 true case +0:218 Branch: Break +0:220 add second child into first child ( temp 4-component vector of float) +0:220 'color' ( temp 4-component vector of float) +0:220 'bigColor7' ( uniform 4-component vector of float) +0:222 Test condition and select ( temp void) +0:222 Condition +0:222 Compare Less Than ( temp bool) +0:222 'd8' ( uniform float) +0:222 Constant: +0:222 1.000000 +0:222 true case +0:223 Sequence +0:223 Post-Increment ( temp float) +0:223 direct index ( temp float) +0:223 'color' ( temp 4-component vector of float) +0:223 Constant: +0:223 2 (const int) +0:224 Test condition and select ( temp void) +0:224 Condition +0:224 Compare Less Than ( temp bool) +0:224 'd8' ( uniform float) +0:224 Constant: +0:224 2.000000 +0:224 true case +0:225 Sequence +0:225 Post-Increment ( temp float) +0:225 direct index ( temp float) +0:225 'color' ( temp 4-component vector of float) +0:225 Constant: +0:225 1 (const int) +0:224 false case +0:227 Sequence +0:227 Post-Increment ( temp float) +0:227 direct index ( temp float) +0:227 'color' ( temp 4-component vector of float) +0:227 Constant: +0:227 0 (const int) +0:229 Branch: Break +0:232 add second child into first child ( temp 4-component vector of float) +0:232 'color' ( temp 4-component vector of float) +0:232 'BaseColor' ( smooth in 4-component vector of float) +0:237 Loop with condition tested first +0:237 Loop Condition +0:237 Compare Less Than ( temp bool) +0:237 direct index ( temp float) +0:237 'color' ( temp 4-component vector of float) +0:237 Constant: +0:237 3 (const int) +0:237 'd9' ( uniform float) +0:237 Loop Body +0:238 Sequence +0:238 Test condition and select ( temp void) +0:238 Condition +0:238 Compare Greater Than ( temp bool) +0:238 'd9' ( uniform float) +0:238 'd8' ( uniform float) +0:238 true case +0:239 Sequence +0:239 Test condition and select ( temp void) +0:239 Condition +0:239 Compare Less Than or Equal ( temp bool) +0:239 direct index ( temp float) +0:239 'color' ( temp 4-component vector of float) +0:239 Constant: +0:239 0 (const int) +0:239 'd7' ( uniform float) +0:239 true case +0:240 Sequence +0:240 Test condition and select ( temp void) +0:240 Condition +0:240 Compare Equal ( temp bool) +0:240 direct index ( temp float) +0:240 'color' ( temp 4-component vector of float) +0:240 Constant: +0:240 2 (const int) +0:240 Constant: +0:240 5.000000 +0:240 true case +0:241 Post-Increment ( temp float) +0:241 direct index ( temp float) +0:241 'color' ( temp 4-component vector of float) +0:241 Constant: +0:241 3 (const int) +0:240 false case +0:243 Branch: Break +0:250 Loop with condition tested first +0:250 Loop Condition +0:250 Compare Less Than ( temp bool) +0:250 direct index ( temp float) +0:250 'color' ( temp 4-component vector of float) +0:250 Constant: +0:250 2 (const int) +0:250 'd10' ( uniform float) +0:250 Loop Body +0:251 Sequence +0:251 Post-Increment ( temp float) +0:251 direct index ( temp float) +0:251 'color' ( temp 4-component vector of float) +0:251 Constant: +0:251 1 (const int) +0:252 Test condition and select ( temp void) +0:252 Condition +0:252 Compare Less Than ( temp bool) +0:252 direct index ( temp float) +0:252 'color' ( temp 4-component vector of float) +0:252 Constant: +0:252 1 (const int) +0:252 'd11' ( uniform float) +0:252 true case +0:253 Sequence +0:253 Post-Increment ( temp float) +0:253 direct index ( temp float) +0:253 'color' ( temp 4-component vector of float) +0:253 Constant: +0:253 2 (const int) +0:254 Test condition and select ( temp void) +0:254 Condition +0:254 Compare Less Than ( temp bool) +0:254 direct index ( temp float) +0:254 'color' ( temp 4-component vector of float) +0:254 Constant: +0:254 3 (const int) +0:254 'd12' ( uniform float) +0:254 true case +0:255 Post-Increment ( temp float) +0:255 direct index ( temp float) +0:255 'color' ( temp 4-component vector of float) +0:255 Constant: +0:255 3 (const int) +0:254 false case +0:257 Post-Increment ( temp float) +0:257 direct index ( temp float) +0:257 'color' ( temp 4-component vector of float) +0:257 Constant: +0:257 0 (const int) +0:258 Branch: Continue +0:261 Post-Increment ( temp 4-component vector of float) +0:261 'color' ( temp 4-component vector of float) +0:262 Branch: Break +0:266 Loop with condition tested first +0:266 Loop Condition +0:266 Compare Less Than ( temp bool) +0:266 direct index ( temp float) +0:266 'color' ( temp 4-component vector of float) +0:266 Constant: +0:266 0 (const int) +0:266 Constant: +0:266 10.000000 +0:266 Loop Body +0:267 Sequence +0:267 add second child into first child ( temp 4-component vector of float) +0:267 'color' ( temp 4-component vector of float) +0:267 'bigColor8' ( uniform 4-component vector of float) +0:269 Test condition and select ( temp void) +0:269 Condition +0:269 Compare Less Than ( temp bool) +0:269 direct index ( temp float) +0:269 'color' ( temp 4-component vector of float) +0:269 Constant: +0:269 2 (const int) +0:269 'd8' ( uniform float) +0:269 true case +0:270 Test condition and select ( temp void) +0:270 Condition +0:270 Compare Less Than ( temp bool) +0:270 direct index ( temp float) +0:270 'color' ( temp 4-component vector of float) +0:270 Constant: +0:270 3 (const int) +0:270 'd6' ( uniform float) +0:270 true case +0:271 Branch: Continue +0:273 add second child into first child ( temp float) +0:273 direct index ( temp float) +0:273 'color' ( temp 4-component vector of float) +0:273 Constant: +0:273 1 (const int) +0:273 direct index ( temp float) +0:273 'bigColor8' ( uniform 4-component vector of float) +0:273 Constant: +0:273 0 (const int) +0:276 Post-Increment ( temp 4-component vector of float) +0:276 'color' ( temp 4-component vector of float) +0:277 move second child to first child ( temp 4-component vector of float) +0:277 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:277 'color' ( temp 4-component vector of float) +0:280 Loop with condition tested first +0:280 Loop Condition +0:280 Compare Less Than ( temp bool) +0:280 direct index ( temp float) +0:280 'color' ( temp 4-component vector of float) +0:280 Constant: +0:280 0 (const int) +0:280 'd14' ( uniform float) +0:280 Loop Body +0:281 Sequence +0:281 Test condition and select ( temp void) +0:281 Condition +0:281 Compare Less Than ( temp bool) +0:281 direct index ( temp float) +0:281 'color' ( temp 4-component vector of float) +0:281 Constant: +0:281 1 (const int) +0:281 'd15' ( uniform float) +0:281 true case +0:282 Sequence +0:282 Branch: Return +0:281 false case +0:285 Post-Increment ( temp 4-component vector of float) +0:285 'color' ( temp 4-component vector of float) +0:288 Post-Increment ( temp 4-component vector of float) +0:288 'color' ( temp 4-component vector of float) +0:290 Loop with condition tested first +0:290 Loop Condition +0:290 Compare Less Than ( temp bool) +0:290 direct index ( temp float) +0:290 'color' ( temp 4-component vector of float) +0:290 Constant: +0:290 3 (const int) +0:290 'd16' ( uniform float) +0:290 Loop Body +0:291 Sequence +0:291 Post-Increment ( temp float) +0:291 direct index ( temp float) +0:291 'color' ( temp 4-component vector of float) +0:291 Constant: +0:291 3 (const int) +0:296 Loop with condition tested first +0:296 Loop Condition +0:296 logical-and ( temp bool) +0:296 Compare Less Than ( temp bool) +0:296 direct index ( temp float) +0:296 'color' ( temp 4-component vector of float) +0:296 Constant: +0:296 3 (const int) +0:296 'd2' ( uniform float) +0:296 Compare Less Than ( temp bool) +0:296 direct index ( temp float) +0:296 'color' ( temp 4-component vector of float) +0:296 Constant: +0:296 1 (const int) +0:296 'd3' ( uniform float) +0:296 Loop Body +0:297 Sequence +0:297 add second child into first child ( temp 4-component vector of float) +0:297 'color' ( temp 4-component vector of float) +0:297 'bigColor1_2' ( uniform 4-component vector of float) +0:298 Test condition and select ( temp void) +0:298 Condition +0:298 Compare Less Than ( temp bool) +0:298 direct index ( temp float) +0:298 'color' ( temp 4-component vector of float) +0:298 Constant: +0:298 2 (const int) +0:298 'd3' ( uniform float) +0:298 true case +0:299 Branch: Return +0:307 Loop with condition not tested first +0:307 Loop Condition +0:307 Compare Less Than ( temp bool) +0:307 direct index ( temp float) +0:307 'color' ( temp 4-component vector of float) +0:307 Constant: +0:307 0 (const int) +0:307 'd17' ( uniform float) +0:307 Loop Body +0:304 Sequence +0:304 Test condition and select ( temp void) +0:304 Condition +0:304 Compare Less Than ( temp bool) +0:304 direct index ( temp float) +0:304 'color' ( temp 4-component vector of float) +0:304 Constant: +0:304 1 (const int) +0:304 'd18' ( uniform float) +0:304 true case +0:305 Branch: Return +0:306 Post-Increment ( temp 4-component vector of float) +0:306 'color' ( temp 4-component vector of float) +0:310 Loop with condition tested first +0:310 Loop Condition +0:310 Compare Less Than ( temp bool) +0:310 direct index ( temp float) +0:310 'color' ( temp 4-component vector of float) +0:310 Constant: +0:310 1 (const int) +0:310 'd16' ( uniform float) +0:310 Loop Body +0:311 Sequence +0:311 Test condition and select ( temp void) +0:311 Condition +0:311 Compare Less Than ( temp bool) +0:311 direct index ( temp float) +0:311 'color' ( temp 4-component vector of float) +0:311 Constant: +0:311 3 (const int) +0:311 'd16' ( uniform float) +0:311 true case +0:312 Sequence +0:312 Branch: Kill +0:311 false case +0:314 Post-Increment ( temp 4-component vector of float) +0:314 'color' ( temp 4-component vector of float) +0:317 Post-Increment ( temp 4-component vector of float) +0:317 'color' ( temp 4-component vector of float) +0:319 move second child to first child ( temp 4-component vector of float) +0:319 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:319 'color' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'bigColor' ( uniform 4-component vector of float) +0:? 'bigColor1_1' ( uniform 4-component vector of float) +0:? 'bigColor1_2' ( uniform 4-component vector of float) +0:? 'bigColor1_3' ( uniform 4-component vector of float) +0:? 'bigColor2' ( uniform 4-component vector of float) +0:? 'bigColor3' ( uniform 4-component vector of float) +0:? 'bigColor4' ( uniform 4-component vector of float) +0:? 'bigColor5' ( uniform 4-component vector of float) +0:? 'bigColor6' ( uniform 4-component vector of float) +0:? 'bigColor7' ( uniform 4-component vector of float) +0:? 'bigColor8' ( uniform 4-component vector of float) +0:? 'BaseColor' ( smooth in 4-component vector of float) +0:? 'd' ( uniform float) +0:? 'd2' ( uniform float) +0:? 'd3' ( uniform float) +0:? 'd4' ( uniform float) +0:? 'd5' ( uniform float) +0:? 'd6' ( uniform float) +0:? 'd7' ( uniform float) +0:? 'd8' ( uniform float) +0:? 'd9' ( uniform float) +0:? 'd10' ( uniform float) +0:? 'd11' ( uniform float) +0:? 'd12' ( uniform float) +0:? 'd13' ( uniform float) +0:? 'd14' ( uniform float) +0:? 'd15' ( uniform float) +0:? 'd16' ( uniform float) +0:? 'd17' ( uniform float) +0:? 'd18' ( uniform float) +0:? 'd19' ( uniform float) +0:? 'd20' ( uniform float) +0:? 'd21' ( uniform float) +0:? 'd22' ( uniform float) +0:? 'd23' ( uniform float) +0:? 'd24' ( uniform float) +0:? 'd25' ( uniform float) +0:? 'd26' ( uniform float) +0:? 'd27' ( uniform float) +0:? 'd28' ( uniform float) +0:? 'd29' ( uniform float) +0:? 'd30' ( uniform float) +0:? 'd31' ( uniform float) +0:? 'd32' ( uniform float) +0:? 'd33' ( uniform float) +0:? 'd34' ( uniform float) +0:? 'Count' ( uniform int) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/loopsArtificial.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/loopsArtificial.frag.out new file mode 100644 index 0000000..0bb61c9 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/loopsArtificial.frag.out @@ -0,0 +1,433 @@ +loopsArtificial.frag +WARNING: 0:14: varying deprecated in version 130; may be removed in future release + +Shader version: 130 +0:? Sequence +0:53 Function Definition: main( ( global void) +0:53 Function Parameters: +0:55 Sequence +0:55 Sequence +0:55 move second child to first child ( temp 4-component vector of float) +0:55 'color' ( temp 4-component vector of float) +0:55 'BaseColor' ( smooth in 4-component vector of float) +0:71 Loop with condition not tested first +0:71 Loop Condition +0:71 Compare Less Than ( temp bool) +0:71 direct index ( temp float) +0:71 'color' ( temp 4-component vector of float) +0:71 Constant: +0:71 2 (const int) +0:71 'd4' ( uniform float) +0:71 Loop Body +0:59 Sequence +0:59 add second child into first child ( temp 4-component vector of float) +0:59 'color' ( temp 4-component vector of float) +0:59 'bigColor4' ( uniform 4-component vector of float) +0:60 Test condition and select ( temp void) +0:60 Condition +0:60 Compare Less Than ( temp bool) +0:60 direct index ( temp float) +0:60 'color' ( temp 4-component vector of float) +0:60 Constant: +0:60 0 (const int) +0:60 'd4' ( uniform float) +0:60 true case +0:61 Sequence +0:61 add second child into first child ( temp float) +0:61 direct index ( temp float) +0:61 'color' ( temp 4-component vector of float) +0:61 Constant: +0:61 2 (const int) +0:61 Constant: +0:61 2.000000 +0:62 Test condition and select ( temp void) +0:62 Condition +0:62 Compare Less Than ( temp bool) +0:62 direct index ( temp float) +0:62 'color' ( temp 4-component vector of float) +0:62 Constant: +0:62 2 (const int) +0:62 'd4' ( uniform float) +0:62 true case +0:63 Sequence +0:63 Post-Increment ( temp float) +0:63 direct index ( temp float) +0:63 'color' ( temp 4-component vector of float) +0:63 Constant: +0:63 0 (const int) +0:64 Branch: Continue +0:67 Test condition and select ( temp void) +0:67 Condition +0:67 Compare Less Than ( temp bool) +0:67 direct index ( temp float) +0:67 'color' ( temp 4-component vector of float) +0:67 Constant: +0:67 1 (const int) +0:67 'd4' ( uniform float) +0:67 true case +0:68 add second child into first child ( temp float) +0:68 direct index ( temp float) +0:68 'color' ( temp 4-component vector of float) +0:68 Constant: +0:68 1 (const int) +0:68 'd4' ( uniform float) +0:67 false case +0:70 add second child into first child ( temp float) +0:70 direct index ( temp float) +0:70 'color' ( temp 4-component vector of float) +0:70 Constant: +0:70 0 (const int) +0:70 'd4' ( uniform float) +0:74 Loop with condition tested first +0:74 Loop Condition +0:74 Compare Less Than ( temp bool) +0:74 direct index ( temp float) +0:74 'color' ( temp 4-component vector of float) +0:74 Constant: +0:74 3 (const int) +0:74 'd13' ( uniform float) +0:74 Loop Body +0:75 Sequence +0:75 Test condition and select ( temp void) +0:75 Condition +0:75 Compare Less Than ( temp bool) +0:75 direct index ( temp float) +0:75 'color' ( temp 4-component vector of float) +0:75 Constant: +0:75 2 (const int) +0:75 'd13' ( uniform float) +0:75 true case +0:76 Post-Increment ( temp 4-component vector of float) +0:76 'color' ( temp 4-component vector of float) +0:75 false case +0:78 Post-Decrement ( temp 4-component vector of float) +0:78 'color' ( temp 4-component vector of float) +0:80 add second child into first child ( temp 4-component vector of float) +0:80 'color' ( temp 4-component vector of float) +0:80 'bigColor4' ( uniform 4-component vector of float) +0:81 Test condition and select ( temp void) +0:81 Condition +0:81 Compare Less Than ( temp bool) +0:81 direct index ( temp float) +0:81 'color' ( temp 4-component vector of float) +0:81 Constant: +0:81 0 (const int) +0:81 'd4' ( uniform float) +0:81 true case +0:82 Sequence +0:82 add second child into first child ( temp float) +0:82 direct index ( temp float) +0:82 'color' ( temp 4-component vector of float) +0:82 Constant: +0:82 2 (const int) +0:82 Constant: +0:82 2.000000 +0:83 Test condition and select ( temp void) +0:83 Condition +0:83 Compare Less Than ( temp bool) +0:83 direct index ( temp float) +0:83 'color' ( temp 4-component vector of float) +0:83 Constant: +0:83 2 (const int) +0:83 'd4' ( uniform float) +0:83 true case +0:84 Sequence +0:84 Post-Increment ( temp float) +0:84 direct index ( temp float) +0:84 'color' ( temp 4-component vector of float) +0:84 Constant: +0:84 0 (const int) +0:85 Branch: Continue +0:88 Test condition and select ( temp void) +0:88 Condition +0:88 Compare Less Than ( temp bool) +0:88 direct index ( temp float) +0:88 'color' ( temp 4-component vector of float) +0:88 Constant: +0:88 1 (const int) +0:88 'd4' ( uniform float) +0:88 true case +0:89 add second child into first child ( temp float) +0:89 direct index ( temp float) +0:89 'color' ( temp 4-component vector of float) +0:89 Constant: +0:89 1 (const int) +0:89 'd4' ( uniform float) +0:88 false case +0:91 add second child into first child ( temp float) +0:91 direct index ( temp float) +0:91 'color' ( temp 4-component vector of float) +0:91 Constant: +0:91 0 (const int) +0:91 'd4' ( uniform float) +0:94 Post-Increment ( temp 4-component vector of float) +0:94 'color' ( temp 4-component vector of float) +0:95 move second child to first child ( temp 4-component vector of float) +0:95 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:95 'color' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'bigColor' ( uniform 4-component vector of float) +0:? 'bigColor1_1' ( uniform 4-component vector of float) +0:? 'bigColor1_2' ( uniform 4-component vector of float) +0:? 'bigColor1_3' ( uniform 4-component vector of float) +0:? 'bigColor2' ( uniform 4-component vector of float) +0:? 'bigColor3' ( uniform 4-component vector of float) +0:? 'bigColor4' ( uniform 4-component vector of float) +0:? 'bigColor5' ( uniform 4-component vector of float) +0:? 'bigColor6' ( uniform 4-component vector of float) +0:? 'bigColor7' ( uniform 4-component vector of float) +0:? 'bigColor8' ( uniform 4-component vector of float) +0:? 'BaseColor' ( smooth in 4-component vector of float) +0:? 'd' ( uniform float) +0:? 'd2' ( uniform float) +0:? 'd3' ( uniform float) +0:? 'd4' ( uniform float) +0:? 'd5' ( uniform float) +0:? 'd6' ( uniform float) +0:? 'd7' ( uniform float) +0:? 'd8' ( uniform float) +0:? 'd9' ( uniform float) +0:? 'd10' ( uniform float) +0:? 'd11' ( uniform float) +0:? 'd12' ( uniform float) +0:? 'd13' ( uniform float) +0:? 'd14' ( uniform float) +0:? 'd15' ( uniform float) +0:? 'd16' ( uniform float) +0:? 'd17' ( uniform float) +0:? 'd18' ( uniform float) +0:? 'd19' ( uniform float) +0:? 'd20' ( uniform float) +0:? 'd21' ( uniform float) +0:? 'd22' ( uniform float) +0:? 'd23' ( uniform float) +0:? 'd24' ( uniform float) +0:? 'd25' ( uniform float) +0:? 'd26' ( uniform float) +0:? 'd27' ( uniform float) +0:? 'd28' ( uniform float) +0:? 'd29' ( uniform float) +0:? 'd30' ( uniform float) +0:? 'd31' ( uniform float) +0:? 'd32' ( uniform float) +0:? 'd33' ( uniform float) +0:? 'd34' ( uniform float) +0:? 'Count' ( uniform int) + + +Linked fragment stage: + + +Shader version: 130 +0:? Sequence +0:53 Function Definition: main( ( global void) +0:53 Function Parameters: +0:55 Sequence +0:55 Sequence +0:55 move second child to first child ( temp 4-component vector of float) +0:55 'color' ( temp 4-component vector of float) +0:55 'BaseColor' ( smooth in 4-component vector of float) +0:71 Loop with condition not tested first +0:71 Loop Condition +0:71 Compare Less Than ( temp bool) +0:71 direct index ( temp float) +0:71 'color' ( temp 4-component vector of float) +0:71 Constant: +0:71 2 (const int) +0:71 'd4' ( uniform float) +0:71 Loop Body +0:59 Sequence +0:59 add second child into first child ( temp 4-component vector of float) +0:59 'color' ( temp 4-component vector of float) +0:59 'bigColor4' ( uniform 4-component vector of float) +0:60 Test condition and select ( temp void) +0:60 Condition +0:60 Compare Less Than ( temp bool) +0:60 direct index ( temp float) +0:60 'color' ( temp 4-component vector of float) +0:60 Constant: +0:60 0 (const int) +0:60 'd4' ( uniform float) +0:60 true case +0:61 Sequence +0:61 add second child into first child ( temp float) +0:61 direct index ( temp float) +0:61 'color' ( temp 4-component vector of float) +0:61 Constant: +0:61 2 (const int) +0:61 Constant: +0:61 2.000000 +0:62 Test condition and select ( temp void) +0:62 Condition +0:62 Compare Less Than ( temp bool) +0:62 direct index ( temp float) +0:62 'color' ( temp 4-component vector of float) +0:62 Constant: +0:62 2 (const int) +0:62 'd4' ( uniform float) +0:62 true case +0:63 Sequence +0:63 Post-Increment ( temp float) +0:63 direct index ( temp float) +0:63 'color' ( temp 4-component vector of float) +0:63 Constant: +0:63 0 (const int) +0:64 Branch: Continue +0:67 Test condition and select ( temp void) +0:67 Condition +0:67 Compare Less Than ( temp bool) +0:67 direct index ( temp float) +0:67 'color' ( temp 4-component vector of float) +0:67 Constant: +0:67 1 (const int) +0:67 'd4' ( uniform float) +0:67 true case +0:68 add second child into first child ( temp float) +0:68 direct index ( temp float) +0:68 'color' ( temp 4-component vector of float) +0:68 Constant: +0:68 1 (const int) +0:68 'd4' ( uniform float) +0:67 false case +0:70 add second child into first child ( temp float) +0:70 direct index ( temp float) +0:70 'color' ( temp 4-component vector of float) +0:70 Constant: +0:70 0 (const int) +0:70 'd4' ( uniform float) +0:74 Loop with condition tested first +0:74 Loop Condition +0:74 Compare Less Than ( temp bool) +0:74 direct index ( temp float) +0:74 'color' ( temp 4-component vector of float) +0:74 Constant: +0:74 3 (const int) +0:74 'd13' ( uniform float) +0:74 Loop Body +0:75 Sequence +0:75 Test condition and select ( temp void) +0:75 Condition +0:75 Compare Less Than ( temp bool) +0:75 direct index ( temp float) +0:75 'color' ( temp 4-component vector of float) +0:75 Constant: +0:75 2 (const int) +0:75 'd13' ( uniform float) +0:75 true case +0:76 Post-Increment ( temp 4-component vector of float) +0:76 'color' ( temp 4-component vector of float) +0:75 false case +0:78 Post-Decrement ( temp 4-component vector of float) +0:78 'color' ( temp 4-component vector of float) +0:80 add second child into first child ( temp 4-component vector of float) +0:80 'color' ( temp 4-component vector of float) +0:80 'bigColor4' ( uniform 4-component vector of float) +0:81 Test condition and select ( temp void) +0:81 Condition +0:81 Compare Less Than ( temp bool) +0:81 direct index ( temp float) +0:81 'color' ( temp 4-component vector of float) +0:81 Constant: +0:81 0 (const int) +0:81 'd4' ( uniform float) +0:81 true case +0:82 Sequence +0:82 add second child into first child ( temp float) +0:82 direct index ( temp float) +0:82 'color' ( temp 4-component vector of float) +0:82 Constant: +0:82 2 (const int) +0:82 Constant: +0:82 2.000000 +0:83 Test condition and select ( temp void) +0:83 Condition +0:83 Compare Less Than ( temp bool) +0:83 direct index ( temp float) +0:83 'color' ( temp 4-component vector of float) +0:83 Constant: +0:83 2 (const int) +0:83 'd4' ( uniform float) +0:83 true case +0:84 Sequence +0:84 Post-Increment ( temp float) +0:84 direct index ( temp float) +0:84 'color' ( temp 4-component vector of float) +0:84 Constant: +0:84 0 (const int) +0:85 Branch: Continue +0:88 Test condition and select ( temp void) +0:88 Condition +0:88 Compare Less Than ( temp bool) +0:88 direct index ( temp float) +0:88 'color' ( temp 4-component vector of float) +0:88 Constant: +0:88 1 (const int) +0:88 'd4' ( uniform float) +0:88 true case +0:89 add second child into first child ( temp float) +0:89 direct index ( temp float) +0:89 'color' ( temp 4-component vector of float) +0:89 Constant: +0:89 1 (const int) +0:89 'd4' ( uniform float) +0:88 false case +0:91 add second child into first child ( temp float) +0:91 direct index ( temp float) +0:91 'color' ( temp 4-component vector of float) +0:91 Constant: +0:91 0 (const int) +0:91 'd4' ( uniform float) +0:94 Post-Increment ( temp 4-component vector of float) +0:94 'color' ( temp 4-component vector of float) +0:95 move second child to first child ( temp 4-component vector of float) +0:95 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:95 'color' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'bigColor' ( uniform 4-component vector of float) +0:? 'bigColor1_1' ( uniform 4-component vector of float) +0:? 'bigColor1_2' ( uniform 4-component vector of float) +0:? 'bigColor1_3' ( uniform 4-component vector of float) +0:? 'bigColor2' ( uniform 4-component vector of float) +0:? 'bigColor3' ( uniform 4-component vector of float) +0:? 'bigColor4' ( uniform 4-component vector of float) +0:? 'bigColor5' ( uniform 4-component vector of float) +0:? 'bigColor6' ( uniform 4-component vector of float) +0:? 'bigColor7' ( uniform 4-component vector of float) +0:? 'bigColor8' ( uniform 4-component vector of float) +0:? 'BaseColor' ( smooth in 4-component vector of float) +0:? 'd' ( uniform float) +0:? 'd2' ( uniform float) +0:? 'd3' ( uniform float) +0:? 'd4' ( uniform float) +0:? 'd5' ( uniform float) +0:? 'd6' ( uniform float) +0:? 'd7' ( uniform float) +0:? 'd8' ( uniform float) +0:? 'd9' ( uniform float) +0:? 'd10' ( uniform float) +0:? 'd11' ( uniform float) +0:? 'd12' ( uniform float) +0:? 'd13' ( uniform float) +0:? 'd14' ( uniform float) +0:? 'd15' ( uniform float) +0:? 'd16' ( uniform float) +0:? 'd17' ( uniform float) +0:? 'd18' ( uniform float) +0:? 'd19' ( uniform float) +0:? 'd20' ( uniform float) +0:? 'd21' ( uniform float) +0:? 'd22' ( uniform float) +0:? 'd23' ( uniform float) +0:? 'd24' ( uniform float) +0:? 'd25' ( uniform float) +0:? 'd26' ( uniform float) +0:? 'd27' ( uniform float) +0:? 'd28' ( uniform float) +0:? 'd29' ( uniform float) +0:? 'd30' ( uniform float) +0:? 'd31' ( uniform float) +0:? 'd32' ( uniform float) +0:? 'd33' ( uniform float) +0:? 'd34' ( uniform float) +0:? 'Count' ( uniform int) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/mains1.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/mains1.frag.out new file mode 100644 index 0000000..3b318b6 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/mains1.frag.out @@ -0,0 +1,69 @@ +mains1.frag +Shader version: 110 +0:? Sequence +0:3 Function Definition: main( ( global void) +0:3 Function Parameters: +0:? Linker Objects + +mains2.frag +Shader version: 110 +0:? Sequence +0:3 Function Definition: main( ( global void) +0:3 Function Parameters: +0:? Linker Objects + +noMain1.geom +ERROR: #version: geometry shaders require es profile with version 310 or non-es profile with version 150 or above +ERROR: 1 compilation errors. No code generated. + + +Shader version: 150 +invocations = -1 +max_vertices = -1 +input primitive = none +output primitive = points +ERROR: node is still EOpNull! +0:3 Function Definition: foo( ( global void) +0:3 Function Parameters: +0:? Linker Objects + +noMain2.geom +Shader version: 150 +invocations = -1 +max_vertices = -1 +input primitive = none +output primitive = line_strip +0:? Sequence +0:3 Function Definition: bar( ( global void) +0:3 Function Parameters: +0:? Linker Objects + + +Linked geometry stage: + +ERROR: Linking geometry stage: Contradictory output layout primitives +ERROR: Linking geometry stage: Missing entry point: Each stage requires one entry point +ERROR: Linking geometry stage: At least one shader must specify an input layout primitive +ERROR: Linking geometry stage: At least one shader must specify a layout(max_vertices = value) + +Linked fragment stage: + +ERROR: Linking fragment stage: can't handle multiple entry points per stage +ERROR: Linking fragment stage: Multiple function bodies in multiple compilation units for the same signature in the same stage: + main( + +Shader version: 150 +invocations = 1 +max_vertices = -1 +input primitive = none +output primitive = points +ERROR: node is still EOpNull! +0:? Linker Objects +Shader version: 110 +0:? Sequence +0:3 Function Definition: main( ( global void) +0:3 Function Parameters: +0:3 Function Definition: main( ( global void) +0:3 Function Parameters: +0:? Linker Objects + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/matrix.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/matrix.frag.out new file mode 100644 index 0000000..f3bea4b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/matrix.frag.out @@ -0,0 +1,507 @@ +matrix.frag +WARNING: 0:6: varying deprecated in version 130; may be removed in future release +WARNING: 0:17: varying deprecated in version 130; may be removed in future release +WARNING: 0:22: varying deprecated in version 130; may be removed in future release + +Shader version: 130 +0:? Sequence +0:25 Function Definition: main( ( global void) +0:25 Function Parameters: +0:27 Sequence +0:27 move second child to first child ( temp 4-component vector of float) +0:27 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:27 Construct vec4 ( temp 4-component vector of float) +0:27 direct index ( temp 4-component vector of float) +0:27 'un34' ( uniform 4X4 matrix of float) +0:27 Constant: +0:27 1 (const int) +0:28 add second child into first child ( temp 4-component vector of float) +0:28 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:28 Construct vec4 ( temp 4-component vector of float) +0:28 vector-times-matrix ( temp 3-component vector of float) +0:28 'Color' ( smooth in 3-component vector of float) +0:28 'colorTransform' ( uniform 3X3 matrix of float) +0:28 Constant: +0:28 1.000000 +0:30 Test condition and select ( temp void) +0:30 Condition +0:30 Compare Not Equal ( temp bool) +0:30 'm' ( uniform 4X4 matrix of float) +0:30 'n' ( uniform 4X4 matrix of float) +0:30 true case +0:31 add second child into first child ( temp 4-component vector of float) +0:31 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:31 'v' ( smooth in 4-component vector of float) +0:30 false case +0:33 Sequence +0:33 add second child into first child ( temp 4-component vector of float) +0:33 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:33 matrix-times-vector ( temp 4-component vector of float) +0:33 'm' ( uniform 4X4 matrix of float) +0:33 'v' ( smooth in 4-component vector of float) +0:34 add second child into first child ( temp 4-component vector of float) +0:34 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:34 vector-times-matrix ( temp 4-component vector of float) +0:34 'v' ( smooth in 4-component vector of float) +0:34 subtract ( temp 4X4 matrix of float) +0:34 'm' ( uniform 4X4 matrix of float) +0:34 'n' ( uniform 4X4 matrix of float) +0:42 Sequence +0:42 move second child to first child ( temp 4X4 matrix of float) +0:42 'm34' ( temp 4X4 matrix of float) +0:45 Construct mat4 ( temp 4X4 matrix of float) +0:42 component-wise multiply ( temp float) +0:42 direct index ( temp float) +0:42 'v' ( smooth in 4-component vector of float) +0:42 Constant: +0:42 0 (const int) +0:42 direct index ( temp float) +0:42 'u' ( smooth in 4-component vector of float) +0:42 Constant: +0:42 0 (const int) +0:42 component-wise multiply ( temp float) +0:42 direct index ( temp float) +0:42 'v' ( smooth in 4-component vector of float) +0:42 Constant: +0:42 0 (const int) +0:42 direct index ( temp float) +0:42 'u' ( smooth in 4-component vector of float) +0:42 Constant: +0:42 1 (const int) +0:42 component-wise multiply ( temp float) +0:42 direct index ( temp float) +0:42 'v' ( smooth in 4-component vector of float) +0:42 Constant: +0:42 0 (const int) +0:42 direct index ( temp float) +0:42 'u' ( smooth in 4-component vector of float) +0:42 Constant: +0:42 2 (const int) +0:42 component-wise multiply ( temp float) +0:42 direct index ( temp float) +0:42 'v' ( smooth in 4-component vector of float) +0:42 Constant: +0:42 0 (const int) +0:42 direct index ( temp float) +0:42 'u' ( smooth in 4-component vector of float) +0:42 Constant: +0:42 3 (const int) +0:43 component-wise multiply ( temp float) +0:43 direct index ( temp float) +0:43 'v' ( smooth in 4-component vector of float) +0:43 Constant: +0:43 1 (const int) +0:43 direct index ( temp float) +0:43 'u' ( smooth in 4-component vector of float) +0:43 Constant: +0:43 0 (const int) +0:43 component-wise multiply ( temp float) +0:43 direct index ( temp float) +0:43 'v' ( smooth in 4-component vector of float) +0:43 Constant: +0:43 1 (const int) +0:43 direct index ( temp float) +0:43 'u' ( smooth in 4-component vector of float) +0:43 Constant: +0:43 1 (const int) +0:43 component-wise multiply ( temp float) +0:43 direct index ( temp float) +0:43 'v' ( smooth in 4-component vector of float) +0:43 Constant: +0:43 1 (const int) +0:43 direct index ( temp float) +0:43 'u' ( smooth in 4-component vector of float) +0:43 Constant: +0:43 2 (const int) +0:43 component-wise multiply ( temp float) +0:43 direct index ( temp float) +0:43 'v' ( smooth in 4-component vector of float) +0:43 Constant: +0:43 1 (const int) +0:43 direct index ( temp float) +0:43 'u' ( smooth in 4-component vector of float) +0:43 Constant: +0:43 3 (const int) +0:44 component-wise multiply ( temp float) +0:44 direct index ( temp float) +0:44 'v' ( smooth in 4-component vector of float) +0:44 Constant: +0:44 2 (const int) +0:44 direct index ( temp float) +0:44 'u' ( smooth in 4-component vector of float) +0:44 Constant: +0:44 0 (const int) +0:44 component-wise multiply ( temp float) +0:44 direct index ( temp float) +0:44 'v' ( smooth in 4-component vector of float) +0:44 Constant: +0:44 2 (const int) +0:44 direct index ( temp float) +0:44 'u' ( smooth in 4-component vector of float) +0:44 Constant: +0:44 1 (const int) +0:44 component-wise multiply ( temp float) +0:44 direct index ( temp float) +0:44 'v' ( smooth in 4-component vector of float) +0:44 Constant: +0:44 2 (const int) +0:44 direct index ( temp float) +0:44 'u' ( smooth in 4-component vector of float) +0:44 Constant: +0:44 2 (const int) +0:44 component-wise multiply ( temp float) +0:44 direct index ( temp float) +0:44 'v' ( smooth in 4-component vector of float) +0:44 Constant: +0:44 2 (const int) +0:44 direct index ( temp float) +0:44 'u' ( smooth in 4-component vector of float) +0:44 Constant: +0:44 3 (const int) +0:45 component-wise multiply ( temp float) +0:45 direct index ( temp float) +0:45 'v' ( smooth in 4-component vector of float) +0:45 Constant: +0:45 3 (const int) +0:45 direct index ( temp float) +0:45 'u' ( smooth in 4-component vector of float) +0:45 Constant: +0:45 0 (const int) +0:45 component-wise multiply ( temp float) +0:45 direct index ( temp float) +0:45 'v' ( smooth in 4-component vector of float) +0:45 Constant: +0:45 3 (const int) +0:45 direct index ( temp float) +0:45 'u' ( smooth in 4-component vector of float) +0:45 Constant: +0:45 1 (const int) +0:45 component-wise multiply ( temp float) +0:45 direct index ( temp float) +0:45 'v' ( smooth in 4-component vector of float) +0:45 Constant: +0:45 3 (const int) +0:45 direct index ( temp float) +0:45 'u' ( smooth in 4-component vector of float) +0:45 Constant: +0:45 2 (const int) +0:45 component-wise multiply ( temp float) +0:45 direct index ( temp float) +0:45 'v' ( smooth in 4-component vector of float) +0:45 Constant: +0:45 3 (const int) +0:45 direct index ( temp float) +0:45 'u' ( smooth in 4-component vector of float) +0:45 Constant: +0:45 3 (const int) +0:46 add second child into first child ( temp 4X4 matrix of float) +0:46 'm34' ( temp 4X4 matrix of float) +0:46 Construct mat4 ( temp 4X4 matrix of float) +0:46 direct index ( temp float) +0:46 'v' ( smooth in 4-component vector of float) +0:46 Constant: +0:46 0 (const int) +0:47 add second child into first child ( temp 4X4 matrix of float) +0:47 'm34' ( temp 4X4 matrix of float) +0:47 Construct mat4 ( temp 4X4 matrix of float) +0:47 'u' ( smooth in 4-component vector of float) +0:47 direct index ( temp float) +0:47 'u' ( smooth in 4-component vector of float) +0:47 Constant: +0:47 0 (const int) +0:47 'u' ( smooth in 4-component vector of float) +0:47 direct index ( temp float) +0:47 'u' ( smooth in 4-component vector of float) +0:47 Constant: +0:47 0 (const int) +0:47 'u' ( smooth in 4-component vector of float) +0:47 direct index ( temp float) +0:47 'u' ( smooth in 4-component vector of float) +0:47 Constant: +0:47 0 (const int) +0:47 direct index ( temp float) +0:47 'u' ( smooth in 4-component vector of float) +0:47 Constant: +0:47 0 (const int) +0:51 Test condition and select ( temp void) +0:51 Condition +0:51 Compare Equal ( temp bool) +0:51 'm34' ( temp 4X4 matrix of float) +0:51 'un34' ( uniform 4X4 matrix of float) +0:51 true case +0:52 add second child into first child ( temp 4-component vector of float) +0:52 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:52 matrix-times-vector ( temp 4-component vector of float) +0:52 'm34' ( temp 4X4 matrix of float) +0:52 'u' ( smooth in 4-component vector of float) +0:51 false case +0:54 add second child into first child ( temp 4-component vector of float) +0:54 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:54 matrix-times-vector ( temp 4-component vector of float) +0:54 matrix-multiply ( temp 4X4 matrix of float) +0:54 'un34' ( uniform 4X4 matrix of float) +0:54 'um43' ( uniform 4X4 matrix of float) +0:54 'v' ( smooth in 4-component vector of float) +0:? Linker Objects +0:? 'colorTransform' ( uniform 3X3 matrix of float) +0:? 'Color' ( smooth in 3-component vector of float) +0:? 'm' ( uniform 4X4 matrix of float) +0:? 'n' ( uniform 4X4 matrix of float) +0:? 'um43' ( uniform 4X4 matrix of float) +0:? 'un34' ( uniform 4X4 matrix of float) +0:? 'v' ( smooth in 4-component vector of float) +0:? 'u' ( smooth in 4-component vector of float) + + +Linked fragment stage: + + +Shader version: 130 +0:? Sequence +0:25 Function Definition: main( ( global void) +0:25 Function Parameters: +0:27 Sequence +0:27 move second child to first child ( temp 4-component vector of float) +0:27 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:27 Construct vec4 ( temp 4-component vector of float) +0:27 direct index ( temp 4-component vector of float) +0:27 'un34' ( uniform 4X4 matrix of float) +0:27 Constant: +0:27 1 (const int) +0:28 add second child into first child ( temp 4-component vector of float) +0:28 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:28 Construct vec4 ( temp 4-component vector of float) +0:28 vector-times-matrix ( temp 3-component vector of float) +0:28 'Color' ( smooth in 3-component vector of float) +0:28 'colorTransform' ( uniform 3X3 matrix of float) +0:28 Constant: +0:28 1.000000 +0:30 Test condition and select ( temp void) +0:30 Condition +0:30 Compare Not Equal ( temp bool) +0:30 'm' ( uniform 4X4 matrix of float) +0:30 'n' ( uniform 4X4 matrix of float) +0:30 true case +0:31 add second child into first child ( temp 4-component vector of float) +0:31 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:31 'v' ( smooth in 4-component vector of float) +0:30 false case +0:33 Sequence +0:33 add second child into first child ( temp 4-component vector of float) +0:33 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:33 matrix-times-vector ( temp 4-component vector of float) +0:33 'm' ( uniform 4X4 matrix of float) +0:33 'v' ( smooth in 4-component vector of float) +0:34 add second child into first child ( temp 4-component vector of float) +0:34 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:34 vector-times-matrix ( temp 4-component vector of float) +0:34 'v' ( smooth in 4-component vector of float) +0:34 subtract ( temp 4X4 matrix of float) +0:34 'm' ( uniform 4X4 matrix of float) +0:34 'n' ( uniform 4X4 matrix of float) +0:42 Sequence +0:42 move second child to first child ( temp 4X4 matrix of float) +0:42 'm34' ( temp 4X4 matrix of float) +0:45 Construct mat4 ( temp 4X4 matrix of float) +0:42 component-wise multiply ( temp float) +0:42 direct index ( temp float) +0:42 'v' ( smooth in 4-component vector of float) +0:42 Constant: +0:42 0 (const int) +0:42 direct index ( temp float) +0:42 'u' ( smooth in 4-component vector of float) +0:42 Constant: +0:42 0 (const int) +0:42 component-wise multiply ( temp float) +0:42 direct index ( temp float) +0:42 'v' ( smooth in 4-component vector of float) +0:42 Constant: +0:42 0 (const int) +0:42 direct index ( temp float) +0:42 'u' ( smooth in 4-component vector of float) +0:42 Constant: +0:42 1 (const int) +0:42 component-wise multiply ( temp float) +0:42 direct index ( temp float) +0:42 'v' ( smooth in 4-component vector of float) +0:42 Constant: +0:42 0 (const int) +0:42 direct index ( temp float) +0:42 'u' ( smooth in 4-component vector of float) +0:42 Constant: +0:42 2 (const int) +0:42 component-wise multiply ( temp float) +0:42 direct index ( temp float) +0:42 'v' ( smooth in 4-component vector of float) +0:42 Constant: +0:42 0 (const int) +0:42 direct index ( temp float) +0:42 'u' ( smooth in 4-component vector of float) +0:42 Constant: +0:42 3 (const int) +0:43 component-wise multiply ( temp float) +0:43 direct index ( temp float) +0:43 'v' ( smooth in 4-component vector of float) +0:43 Constant: +0:43 1 (const int) +0:43 direct index ( temp float) +0:43 'u' ( smooth in 4-component vector of float) +0:43 Constant: +0:43 0 (const int) +0:43 component-wise multiply ( temp float) +0:43 direct index ( temp float) +0:43 'v' ( smooth in 4-component vector of float) +0:43 Constant: +0:43 1 (const int) +0:43 direct index ( temp float) +0:43 'u' ( smooth in 4-component vector of float) +0:43 Constant: +0:43 1 (const int) +0:43 component-wise multiply ( temp float) +0:43 direct index ( temp float) +0:43 'v' ( smooth in 4-component vector of float) +0:43 Constant: +0:43 1 (const int) +0:43 direct index ( temp float) +0:43 'u' ( smooth in 4-component vector of float) +0:43 Constant: +0:43 2 (const int) +0:43 component-wise multiply ( temp float) +0:43 direct index ( temp float) +0:43 'v' ( smooth in 4-component vector of float) +0:43 Constant: +0:43 1 (const int) +0:43 direct index ( temp float) +0:43 'u' ( smooth in 4-component vector of float) +0:43 Constant: +0:43 3 (const int) +0:44 component-wise multiply ( temp float) +0:44 direct index ( temp float) +0:44 'v' ( smooth in 4-component vector of float) +0:44 Constant: +0:44 2 (const int) +0:44 direct index ( temp float) +0:44 'u' ( smooth in 4-component vector of float) +0:44 Constant: +0:44 0 (const int) +0:44 component-wise multiply ( temp float) +0:44 direct index ( temp float) +0:44 'v' ( smooth in 4-component vector of float) +0:44 Constant: +0:44 2 (const int) +0:44 direct index ( temp float) +0:44 'u' ( smooth in 4-component vector of float) +0:44 Constant: +0:44 1 (const int) +0:44 component-wise multiply ( temp float) +0:44 direct index ( temp float) +0:44 'v' ( smooth in 4-component vector of float) +0:44 Constant: +0:44 2 (const int) +0:44 direct index ( temp float) +0:44 'u' ( smooth in 4-component vector of float) +0:44 Constant: +0:44 2 (const int) +0:44 component-wise multiply ( temp float) +0:44 direct index ( temp float) +0:44 'v' ( smooth in 4-component vector of float) +0:44 Constant: +0:44 2 (const int) +0:44 direct index ( temp float) +0:44 'u' ( smooth in 4-component vector of float) +0:44 Constant: +0:44 3 (const int) +0:45 component-wise multiply ( temp float) +0:45 direct index ( temp float) +0:45 'v' ( smooth in 4-component vector of float) +0:45 Constant: +0:45 3 (const int) +0:45 direct index ( temp float) +0:45 'u' ( smooth in 4-component vector of float) +0:45 Constant: +0:45 0 (const int) +0:45 component-wise multiply ( temp float) +0:45 direct index ( temp float) +0:45 'v' ( smooth in 4-component vector of float) +0:45 Constant: +0:45 3 (const int) +0:45 direct index ( temp float) +0:45 'u' ( smooth in 4-component vector of float) +0:45 Constant: +0:45 1 (const int) +0:45 component-wise multiply ( temp float) +0:45 direct index ( temp float) +0:45 'v' ( smooth in 4-component vector of float) +0:45 Constant: +0:45 3 (const int) +0:45 direct index ( temp float) +0:45 'u' ( smooth in 4-component vector of float) +0:45 Constant: +0:45 2 (const int) +0:45 component-wise multiply ( temp float) +0:45 direct index ( temp float) +0:45 'v' ( smooth in 4-component vector of float) +0:45 Constant: +0:45 3 (const int) +0:45 direct index ( temp float) +0:45 'u' ( smooth in 4-component vector of float) +0:45 Constant: +0:45 3 (const int) +0:46 add second child into first child ( temp 4X4 matrix of float) +0:46 'm34' ( temp 4X4 matrix of float) +0:46 Construct mat4 ( temp 4X4 matrix of float) +0:46 direct index ( temp float) +0:46 'v' ( smooth in 4-component vector of float) +0:46 Constant: +0:46 0 (const int) +0:47 add second child into first child ( temp 4X4 matrix of float) +0:47 'm34' ( temp 4X4 matrix of float) +0:47 Construct mat4 ( temp 4X4 matrix of float) +0:47 'u' ( smooth in 4-component vector of float) +0:47 direct index ( temp float) +0:47 'u' ( smooth in 4-component vector of float) +0:47 Constant: +0:47 0 (const int) +0:47 'u' ( smooth in 4-component vector of float) +0:47 direct index ( temp float) +0:47 'u' ( smooth in 4-component vector of float) +0:47 Constant: +0:47 0 (const int) +0:47 'u' ( smooth in 4-component vector of float) +0:47 direct index ( temp float) +0:47 'u' ( smooth in 4-component vector of float) +0:47 Constant: +0:47 0 (const int) +0:47 direct index ( temp float) +0:47 'u' ( smooth in 4-component vector of float) +0:47 Constant: +0:47 0 (const int) +0:51 Test condition and select ( temp void) +0:51 Condition +0:51 Compare Equal ( temp bool) +0:51 'm34' ( temp 4X4 matrix of float) +0:51 'un34' ( uniform 4X4 matrix of float) +0:51 true case +0:52 add second child into first child ( temp 4-component vector of float) +0:52 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:52 matrix-times-vector ( temp 4-component vector of float) +0:52 'm34' ( temp 4X4 matrix of float) +0:52 'u' ( smooth in 4-component vector of float) +0:51 false case +0:54 add second child into first child ( temp 4-component vector of float) +0:54 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:54 matrix-times-vector ( temp 4-component vector of float) +0:54 matrix-multiply ( temp 4X4 matrix of float) +0:54 'un34' ( uniform 4X4 matrix of float) +0:54 'um43' ( uniform 4X4 matrix of float) +0:54 'v' ( smooth in 4-component vector of float) +0:? Linker Objects +0:? 'colorTransform' ( uniform 3X3 matrix of float) +0:? 'Color' ( smooth in 3-component vector of float) +0:? 'm' ( uniform 4X4 matrix of float) +0:? 'n' ( uniform 4X4 matrix of float) +0:? 'um43' ( uniform 4X4 matrix of float) +0:? 'un34' ( uniform 4X4 matrix of float) +0:? 'v' ( smooth in 4-component vector of float) +0:? 'u' ( smooth in 4-component vector of float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/matrix2.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/matrix2.frag.out new file mode 100644 index 0000000..880f75a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/matrix2.frag.out @@ -0,0 +1,347 @@ +matrix2.frag +WARNING: 0:4: varying deprecated in version 130; may be removed in future release +WARNING: 0:13: varying deprecated in version 130; may be removed in future release +WARNING: 0:15: varying deprecated in version 130; may be removed in future release + +Shader version: 150 +0:? Sequence +0:19 Function Definition: main( ( global void) +0:19 Function Parameters: +0:21 Sequence +0:21 Sequence +0:21 move second child to first child ( temp 3X4 matrix of float) +0:21 'm34' ( temp 3X4 matrix of float) +0:21 outer product ( global 3X4 matrix of float) +0:21 'v' ( smooth in 4-component vector of float) +0:21 'u' ( smooth in 3-component vector of float) +0:23 add second child into first child ( temp 3X4 matrix of float) +0:23 'm34' ( temp 3X4 matrix of float) +0:23 Constant: +0:23 4.300000 +0:23 0.000000 +0:23 0.000000 +0:23 0.000000 +0:23 0.000000 +0:23 4.300000 +0:23 0.000000 +0:23 0.000000 +0:23 0.000000 +0:23 0.000000 +0:23 4.300000 +0:23 0.000000 +0:25 move second child to first child ( temp 4-component vector of float) +0:25 'FragColor' ( out 4-component vector of float) +0:25 Construct vec4 ( temp 4-component vector of float) +0:25 'Color' ( smooth in 3-component vector of float) +0:25 Constant: +0:25 1.000000 +0:26 multiply second child into first child ( temp 4-component vector of float) +0:26 'FragColor' ( out 4-component vector of float) +0:26 Construct vec4 ( temp 4-component vector of float) +0:26 vector-times-matrix ( temp 3-component vector of float) +0:26 'FragColor' ( out 4-component vector of float) +0:26 'm34' ( temp 3X4 matrix of float) +0:26 Constant: +0:26 1.000000 +0:28 matrix scale second child into first child ( temp 3X4 matrix of float) +0:28 'm34' ( temp 3X4 matrix of float) +0:28 direct index ( temp float) +0:28 'v' ( smooth in 4-component vector of float) +0:28 Constant: +0:28 0 (const int) +0:30 Sequence +0:30 move second child to first child ( temp 4X4 matrix of float) +0:30 'm44' ( temp 4X4 matrix of float) +0:30 Construct mat4 ( temp 4X4 matrix of float) +0:30 'un34' ( uniform 3X4 matrix of float) +0:32 add second child into first child ( temp 4X4 matrix of float) +0:32 'm44' ( temp 4X4 matrix of float) +0:32 matrix-multiply ( temp 4X4 matrix of float) +0:32 'm34' ( temp 3X4 matrix of float) +0:32 'um43' ( uniform 4X3 matrix of float) +0:34 add second child into first child ( temp 4-component vector of float) +0:34 'FragColor' ( out 4-component vector of float) +0:34 matrix-times-vector ( temp 4-component vector of float) +0:34 Negate value ( temp 4X4 matrix of float) +0:34 'm44' ( temp 4X4 matrix of float) +0:34 'v' ( smooth in 4-component vector of float) +0:36 matrix mult second child into first child ( temp 4-component vector of float) +0:36 'FragColor' ( out 4-component vector of float) +0:36 component-wise multiply ( global 4X4 matrix of float) +0:36 'm44' ( temp 4X4 matrix of float) +0:36 'm44' ( temp 4X4 matrix of float) +0:38 move second child to first child ( temp 3X4 matrix of float) +0:38 'm34' ( temp 3X4 matrix of float) +0:38 transpose ( global 3X4 matrix of float) +0:38 'um43' ( uniform 4X3 matrix of float) +0:39 multiply second child into first child ( temp 4-component vector of float) +0:39 'FragColor' ( out 4-component vector of float) +0:39 Construct vec4 ( temp 4-component vector of float) +0:39 vector-times-matrix ( temp 3-component vector of float) +0:39 'FragColor' ( out 4-component vector of float) +0:39 'm34' ( temp 3X4 matrix of float) +0:39 Constant: +0:39 1.000000 +0:40 multiply second child into first child ( temp 4-component vector of float) +0:40 'FragColor' ( out 4-component vector of float) +0:40 Construct vec4 ( temp 4-component vector of float) +0:40 determinant ( global float) +0:40 'um4' ( uniform 4X4 matrix of float) +0:41 Sequence +0:41 move second child to first child ( temp 2X2 matrix of float) +0:41 'inv' ( temp 2X2 matrix of float) +0:41 inverse ( global 2X2 matrix of float) +0:41 'um2' ( uniform 2X2 matrix of float) +0:42 multiply second child into first child ( temp 4-component vector of float) +0:42 'FragColor' ( out 4-component vector of float) +0:42 Construct vec4 ( temp 4-component vector of float) +0:42 direct index ( temp float) +0:42 direct index ( temp 2-component vector of float) +0:42 'inv' ( temp 2X2 matrix of float) +0:42 Constant: +0:42 0 (const int) +0:42 Constant: +0:42 0 (const int) +0:42 direct index ( temp float) +0:42 direct index ( temp 2-component vector of float) +0:42 'inv' ( temp 2X2 matrix of float) +0:42 Constant: +0:42 1 (const int) +0:42 Constant: +0:42 0 (const int) +0:42 direct index ( temp float) +0:42 direct index ( temp 2-component vector of float) +0:42 'inv' ( temp 2X2 matrix of float) +0:42 Constant: +0:42 0 (const int) +0:42 Constant: +0:42 1 (const int) +0:42 direct index ( temp float) +0:42 direct index ( temp 2-component vector of float) +0:42 'inv' ( temp 2X2 matrix of float) +0:42 Constant: +0:42 1 (const int) +0:42 Constant: +0:42 1 (const int) +0:43 Sequence +0:43 move second child to first child ( temp 3X3 matrix of float) +0:43 'inv3' ( temp 3X3 matrix of float) +0:43 inverse ( global 3X3 matrix of float) +0:43 'um3' ( uniform 3X3 matrix of float) +0:44 multiply second child into first child ( temp 4-component vector of float) +0:44 'FragColor' ( out 4-component vector of float) +0:44 Construct vec4 ( temp 4-component vector of float) +0:44 direct index ( temp float) +0:44 direct index ( temp 3-component vector of float) +0:44 'inv3' ( temp 3X3 matrix of float) +0:44 Constant: +0:44 2 (const int) +0:44 Constant: +0:44 1 (const int) +0:46 Sequence +0:46 move second child to first child ( temp 4X4 matrix of float) +0:46 'inv4' ( temp 4X4 matrix of float) +0:46 inverse ( global 4X4 matrix of float) +0:46 'um4' ( uniform 4X4 matrix of float) +0:47 matrix mult second child into first child ( temp 4-component vector of float) +0:47 'FragColor' ( out 4-component vector of float) +0:47 'inv4' ( temp 4X4 matrix of float) +0:49 move second child to first child ( temp 4-component vector of float) +0:49 'FragColor' ( out 4-component vector of float) +0:49 Construct vec4 ( temp 4-component vector of float) +0:49 vector-times-matrix ( temp 3-component vector of float) +0:49 'FragColor' ( out 4-component vector of float) +0:49 component-wise multiply ( global 3X4 matrix of float) +0:49 'un34' ( uniform 3X4 matrix of float) +0:49 'un34' ( uniform 3X4 matrix of float) +0:49 direct index ( temp float) +0:49 'FragColor' ( out 4-component vector of float) +0:49 Constant: +0:49 3 (const int) +0:? Linker Objects +0:? 'colorTransform' ( uniform 3X3 matrix of float) +0:? 'Color' ( smooth in 3-component vector of float) +0:? 'm' ( uniform 4X4 matrix of float) +0:? 'n' ( uniform 4X4 matrix of float) +0:? 'um43' ( uniform 4X3 matrix of float) +0:? 'un34' ( uniform 3X4 matrix of float) +0:? 'um2' ( uniform 2X2 matrix of float) +0:? 'um3' ( uniform 3X3 matrix of float) +0:? 'um4' ( uniform 4X4 matrix of float) +0:? 'v' ( smooth in 4-component vector of float) +0:? 'u' ( smooth in 3-component vector of float) +0:? 'FragColor' ( out 4-component vector of float) + + +Linked fragment stage: + + +Shader version: 150 +0:? Sequence +0:19 Function Definition: main( ( global void) +0:19 Function Parameters: +0:21 Sequence +0:21 Sequence +0:21 move second child to first child ( temp 3X4 matrix of float) +0:21 'm34' ( temp 3X4 matrix of float) +0:21 outer product ( global 3X4 matrix of float) +0:21 'v' ( smooth in 4-component vector of float) +0:21 'u' ( smooth in 3-component vector of float) +0:23 add second child into first child ( temp 3X4 matrix of float) +0:23 'm34' ( temp 3X4 matrix of float) +0:23 Constant: +0:23 4.300000 +0:23 0.000000 +0:23 0.000000 +0:23 0.000000 +0:23 0.000000 +0:23 4.300000 +0:23 0.000000 +0:23 0.000000 +0:23 0.000000 +0:23 0.000000 +0:23 4.300000 +0:23 0.000000 +0:25 move second child to first child ( temp 4-component vector of float) +0:25 'FragColor' ( out 4-component vector of float) +0:25 Construct vec4 ( temp 4-component vector of float) +0:25 'Color' ( smooth in 3-component vector of float) +0:25 Constant: +0:25 1.000000 +0:26 multiply second child into first child ( temp 4-component vector of float) +0:26 'FragColor' ( out 4-component vector of float) +0:26 Construct vec4 ( temp 4-component vector of float) +0:26 vector-times-matrix ( temp 3-component vector of float) +0:26 'FragColor' ( out 4-component vector of float) +0:26 'm34' ( temp 3X4 matrix of float) +0:26 Constant: +0:26 1.000000 +0:28 matrix scale second child into first child ( temp 3X4 matrix of float) +0:28 'm34' ( temp 3X4 matrix of float) +0:28 direct index ( temp float) +0:28 'v' ( smooth in 4-component vector of float) +0:28 Constant: +0:28 0 (const int) +0:30 Sequence +0:30 move second child to first child ( temp 4X4 matrix of float) +0:30 'm44' ( temp 4X4 matrix of float) +0:30 Construct mat4 ( temp 4X4 matrix of float) +0:30 'un34' ( uniform 3X4 matrix of float) +0:32 add second child into first child ( temp 4X4 matrix of float) +0:32 'm44' ( temp 4X4 matrix of float) +0:32 matrix-multiply ( temp 4X4 matrix of float) +0:32 'm34' ( temp 3X4 matrix of float) +0:32 'um43' ( uniform 4X3 matrix of float) +0:34 add second child into first child ( temp 4-component vector of float) +0:34 'FragColor' ( out 4-component vector of float) +0:34 matrix-times-vector ( temp 4-component vector of float) +0:34 Negate value ( temp 4X4 matrix of float) +0:34 'm44' ( temp 4X4 matrix of float) +0:34 'v' ( smooth in 4-component vector of float) +0:36 matrix mult second child into first child ( temp 4-component vector of float) +0:36 'FragColor' ( out 4-component vector of float) +0:36 component-wise multiply ( global 4X4 matrix of float) +0:36 'm44' ( temp 4X4 matrix of float) +0:36 'm44' ( temp 4X4 matrix of float) +0:38 move second child to first child ( temp 3X4 matrix of float) +0:38 'm34' ( temp 3X4 matrix of float) +0:38 transpose ( global 3X4 matrix of float) +0:38 'um43' ( uniform 4X3 matrix of float) +0:39 multiply second child into first child ( temp 4-component vector of float) +0:39 'FragColor' ( out 4-component vector of float) +0:39 Construct vec4 ( temp 4-component vector of float) +0:39 vector-times-matrix ( temp 3-component vector of float) +0:39 'FragColor' ( out 4-component vector of float) +0:39 'm34' ( temp 3X4 matrix of float) +0:39 Constant: +0:39 1.000000 +0:40 multiply second child into first child ( temp 4-component vector of float) +0:40 'FragColor' ( out 4-component vector of float) +0:40 Construct vec4 ( temp 4-component vector of float) +0:40 determinant ( global float) +0:40 'um4' ( uniform 4X4 matrix of float) +0:41 Sequence +0:41 move second child to first child ( temp 2X2 matrix of float) +0:41 'inv' ( temp 2X2 matrix of float) +0:41 inverse ( global 2X2 matrix of float) +0:41 'um2' ( uniform 2X2 matrix of float) +0:42 multiply second child into first child ( temp 4-component vector of float) +0:42 'FragColor' ( out 4-component vector of float) +0:42 Construct vec4 ( temp 4-component vector of float) +0:42 direct index ( temp float) +0:42 direct index ( temp 2-component vector of float) +0:42 'inv' ( temp 2X2 matrix of float) +0:42 Constant: +0:42 0 (const int) +0:42 Constant: +0:42 0 (const int) +0:42 direct index ( temp float) +0:42 direct index ( temp 2-component vector of float) +0:42 'inv' ( temp 2X2 matrix of float) +0:42 Constant: +0:42 1 (const int) +0:42 Constant: +0:42 0 (const int) +0:42 direct index ( temp float) +0:42 direct index ( temp 2-component vector of float) +0:42 'inv' ( temp 2X2 matrix of float) +0:42 Constant: +0:42 0 (const int) +0:42 Constant: +0:42 1 (const int) +0:42 direct index ( temp float) +0:42 direct index ( temp 2-component vector of float) +0:42 'inv' ( temp 2X2 matrix of float) +0:42 Constant: +0:42 1 (const int) +0:42 Constant: +0:42 1 (const int) +0:43 Sequence +0:43 move second child to first child ( temp 3X3 matrix of float) +0:43 'inv3' ( temp 3X3 matrix of float) +0:43 inverse ( global 3X3 matrix of float) +0:43 'um3' ( uniform 3X3 matrix of float) +0:44 multiply second child into first child ( temp 4-component vector of float) +0:44 'FragColor' ( out 4-component vector of float) +0:44 Construct vec4 ( temp 4-component vector of float) +0:44 direct index ( temp float) +0:44 direct index ( temp 3-component vector of float) +0:44 'inv3' ( temp 3X3 matrix of float) +0:44 Constant: +0:44 2 (const int) +0:44 Constant: +0:44 1 (const int) +0:46 Sequence +0:46 move second child to first child ( temp 4X4 matrix of float) +0:46 'inv4' ( temp 4X4 matrix of float) +0:46 inverse ( global 4X4 matrix of float) +0:46 'um4' ( uniform 4X4 matrix of float) +0:47 matrix mult second child into first child ( temp 4-component vector of float) +0:47 'FragColor' ( out 4-component vector of float) +0:47 'inv4' ( temp 4X4 matrix of float) +0:49 move second child to first child ( temp 4-component vector of float) +0:49 'FragColor' ( out 4-component vector of float) +0:49 Construct vec4 ( temp 4-component vector of float) +0:49 vector-times-matrix ( temp 3-component vector of float) +0:49 'FragColor' ( out 4-component vector of float) +0:49 component-wise multiply ( global 3X4 matrix of float) +0:49 'un34' ( uniform 3X4 matrix of float) +0:49 'un34' ( uniform 3X4 matrix of float) +0:49 direct index ( temp float) +0:49 'FragColor' ( out 4-component vector of float) +0:49 Constant: +0:49 3 (const int) +0:? Linker Objects +0:? 'colorTransform' ( uniform 3X3 matrix of float) +0:? 'Color' ( smooth in 3-component vector of float) +0:? 'm' ( uniform 4X4 matrix of float) +0:? 'n' ( uniform 4X4 matrix of float) +0:? 'um43' ( uniform 4X3 matrix of float) +0:? 'un34' ( uniform 3X4 matrix of float) +0:? 'um2' ( uniform 2X2 matrix of float) +0:? 'um3' ( uniform 3X3 matrix of float) +0:? 'um4' ( uniform 4X4 matrix of float) +0:? 'v' ( smooth in 4-component vector of float) +0:? 'u' ( smooth in 3-component vector of float) +0:? 'FragColor' ( out 4-component vector of float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/matrixError.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/matrixError.vert.out new file mode 100644 index 0000000..f818892 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/matrixError.vert.out @@ -0,0 +1,71 @@ +matrixError.vert +ERROR: 0:10: 'constructor' : too many arguments +ERROR: 0:7: 'const' : non-matching or non-convertible constant type for const initializer +ERROR: 0:17: 'assign' : cannot convert from ' temp 2-component vector of float' to ' temp 3-component vector of float' +ERROR: 0:18: 'assign' : cannot convert from ' temp 2-component vector of float' to ' temp 3-component vector of float' +ERROR: 0:19: 'xy' : does not apply to this type: temp 2X3 matrix of float +ERROR: 0:21: '[' : matrix index out of range '2' +ERROR: 0:21: '[' : vector index out of range '4' +ERROR: 7 compilation errors. No code generated. + + +Shader version: 120 +ERROR: node is still EOpNull! +0:12 Function Definition: main( ( global void) +0:12 Function Parameters: +0:? Sequence +0:17 'a' ( temp 3-component vector of float) +0:18 'b' ( temp 3-component vector of float) +0:19 'm23' ( temp 2X3 matrix of float) +0:21 move second child to first child ( temp 4-component vector of float) +0:21 'gl_Position' ( gl_Position 4-component vector of float Position) +0:21 Construct vec4 ( temp 4-component vector of float) +0:21 matrix-times-vector ( temp 3-component vector of float) +0:21 matrix-multiply ( temp 3X3 matrix of float) +0:21 'm23' ( temp 2X3 matrix of float) +0:21 'm32' ( uniform 3X2 matrix of float) +0:21 'v3' ( in 3-component vector of float) +0:21 direct index ( temp float) +0:21 direct index ( temp 4-component vector of float) +0:21 'm24' ( temp 2X4 matrix of float) +0:21 Constant: +0:21 2 (const int) +0:21 Constant: +0:21 4 (const int) +0:? Linker Objects +0:? 'v3' ( in 3-component vector of float) +0:? 'm32' ( uniform 3X2 matrix of float) +0:? 'm24' ( temp 2X4 matrix of float) + + +Linked vertex stage: + + +Shader version: 120 +ERROR: node is still EOpNull! +0:12 Function Definition: main( ( global void) +0:12 Function Parameters: +0:? Sequence +0:17 'a' ( temp 3-component vector of float) +0:18 'b' ( temp 3-component vector of float) +0:19 'm23' ( temp 2X3 matrix of float) +0:21 move second child to first child ( temp 4-component vector of float) +0:21 'gl_Position' ( gl_Position 4-component vector of float Position) +0:21 Construct vec4 ( temp 4-component vector of float) +0:21 matrix-times-vector ( temp 3-component vector of float) +0:21 matrix-multiply ( temp 3X3 matrix of float) +0:21 'm23' ( temp 2X3 matrix of float) +0:21 'm32' ( uniform 3X2 matrix of float) +0:21 'v3' ( in 3-component vector of float) +0:21 direct index ( temp float) +0:21 direct index ( temp 4-component vector of float) +0:21 'm24' ( temp 2X4 matrix of float) +0:21 Constant: +0:21 2 (const int) +0:21 Constant: +0:21 4 (const int) +0:? Linker Objects +0:? 'v3' ( in 3-component vector of float) +0:? 'm32' ( uniform 3X2 matrix of float) +0:? 'm24' ( temp 2X4 matrix of float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/maxClipDistances.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/maxClipDistances.vert.out new file mode 100644 index 0000000..8086d52 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/maxClipDistances.vert.out @@ -0,0 +1,21 @@ +maxClipDistances.vert +Shader version: 130 +0:? Sequence +0:5 Function Definition: main( ( global void) +0:5 Function Parameters: +0:? Linker Objects +0:? 'gl_ClipDistance' ( smooth out 8-element array of float ClipDistance) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) + + +Linked vertex stage: + + +Shader version: 130 +0:? Sequence +0:5 Function Definition: main( ( global void) +0:5 Function Parameters: +0:? Linker Objects +0:? 'gl_ClipDistance' ( smooth out 8-element array of float ClipDistance) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/max_vertices_0.geom.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/max_vertices_0.geom.out new file mode 100644 index 0000000..d3bb4ee --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/max_vertices_0.geom.out @@ -0,0 +1,35 @@ +max_vertices_0.geom +Shader version: 330 +invocations = -1 +max_vertices = 0 +input primitive = points +output primitive = triangle_strip +0:? Sequence +0:8 Function Definition: main( ( global void) +0:8 Function Parameters: +0:10 Sequence +0:10 EndPrimitive ( global void) +0:11 EndPrimitive ( global void) +0:? Linker Objects +0:? 'v_geom_FragColor' ( in 1-element array of 4-component vector of float) +0:? 'v_frag_FragColor' (layout( stream=0) out 4-component vector of float) + + +Linked geometry stage: + + +Shader version: 330 +invocations = 1 +max_vertices = 0 +input primitive = points +output primitive = triangle_strip +0:? Sequence +0:8 Function Definition: main( ( global void) +0:8 Function Parameters: +0:10 Sequence +0:10 EndPrimitive ( global void) +0:11 EndPrimitive ( global void) +0:? Linker Objects +0:? 'v_geom_FragColor' ( in 1-element array of 4-component vector of float) +0:? 'v_frag_FragColor' (layout( stream=0) out 4-component vector of float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/missingBodies.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/missingBodies.vert.out new file mode 100755 index 0000000..7760c3f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/missingBodies.vert.out @@ -0,0 +1,98 @@ +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) +0:4 Function Parameters: +0:4 Sequence +0:4 Function Call: bar( ( global void) +0:8 Function Definition: C(i1;i1; ( global void) +0:8 Function Parameters: +0:8 '' ( in int) +0:8 '' ( in int) +0:10 Function Definition: A( ( global void) +0:10 Function Parameters: +0:10 Sequence +0:10 Function Call: B( ( global void) +0:10 Function Call: C(i1; ( global void) +0:10 Constant: +0:10 1 (const int) +0:10 Function Call: C(b1; ( global void) +0:10 Constant: +0:10 true (const bool) +0:10 Function Call: C(i1;i1; ( global void) +0:10 Constant: +0:10 1 (const int) +0:10 Constant: +0:10 2 (const int) +0:12 Function Definition: main( ( global void) +0:12 Function Parameters: +0:14 Sequence +0:14 Function Call: foo( ( global void) +0:15 Function Call: C(b1; ( global void) +0:15 Constant: +0:15 true (const bool) +0:20 Sequence +0:20 move second child to first child ( temp int) +0:20 'f1' ( global int) +0:20 Function Call: ret1( ( global int) +0:22 Function Definition: ret2( ( global int) +0:22 Function Parameters: +0:22 Sequence +0:22 Branch: Return with expression +0:22 Constant: +0:22 3 (const int) +0:24 Sequence +0:24 move second child to first child ( temp int) +0:24 'f2' ( global int) +0:24 Function Call: ret2( ( global int) +0:? Linker Objects +0:? 'f1' ( global int) +0:? 'f2' ( global int) +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: + ret1( +ERROR: Linking vertex stage: No function definition (body) found: + C(b1; +ERROR: Linking vertex stage: No function definition (body) found: + bar( + +Shader version: 450 +0:? Sequence +0:4 Function Definition: foo( ( global void) +0:4 Function Parameters: +0:4 Sequence +0:4 Function Call: bar( ( global void) +0:12 Function Definition: main( ( global void) +0:12 Function Parameters: +0:14 Sequence +0:14 Function Call: foo( ( global void) +0:15 Function Call: C(b1; ( global void) +0:15 Constant: +0:15 true (const bool) +0:20 Sequence +0:20 move second child to first child ( temp int) +0:20 'f1' ( global int) +0:20 Function Call: ret1( ( global int) +0:22 Function Definition: ret2( ( global int) +0:22 Function Parameters: +0:22 Sequence +0:22 Branch: Return with expression +0:22 Constant: +0:22 3 (const int) +0:24 Sequence +0:24 move second child to first child ( temp int) +0:24 'f2' ( global int) +0:24 Function Call: ret2( ( global int) +0:? Linker Objects +0:? 'f1' ( global int) +0:? 'f2' ( global int) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/negativeArraySize.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/negativeArraySize.comp.out new file mode 100644 index 0000000..abdd51e --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/negativeArraySize.comp.out @@ -0,0 +1,24 @@ +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. + + +Shader version: 310 +local_size = (1, 1, 1) +ERROR: node is still EOpNull! +0:7 Function Definition: main( ( global void) +0:7 Function Parameters: +0:? Linker Objects + + +Linked compute stage: + + +Shader version: 310 +local_size = (1, 1, 1) +ERROR: node is still EOpNull! +0:7 Function Definition: main( ( global void) +0:7 Function Parameters: +0:? Linker Objects + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/newTexture.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/newTexture.frag.out new file mode 100644 index 0000000..3a1c7a2 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/newTexture.frag.out @@ -0,0 +1,523 @@ +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) +0:36 Function Parameters: +0:38 Sequence +0:38 Sequence +0:38 move second child to first child ( temp 4-component vector of float) +0:38 'v' ( temp 4-component vector of float) +0:38 texture ( global 4-component vector of float) +0:38 's2D' ( uniform sampler2D) +0:38 'c2D' ( smooth in 2-component vector of float) +0:39 add second child into first child ( temp 4-component vector of float) +0:39 'v' ( temp 4-component vector of float) +0:39 textureProj ( global 4-component vector of float) +0:39 's3D' ( uniform sampler3D) +0:39 'c4D' ( smooth in 4-component vector of float) +0:40 add second child into first child ( temp 4-component vector of float) +0:40 'v' ( temp 4-component vector of float) +0:40 textureLod ( global 4-component vector of float) +0:40 's2DArray' ( uniform sampler2DArray) +0:40 'c3D' ( smooth in 3-component vector of float) +0:40 Constant: +0:40 1.200000 +0:41 add second child into first child ( temp float) +0:41 direct index ( temp float) +0:41 'v' ( temp 4-component vector of float) +0:41 Constant: +0:41 1 (const int) +0:41 textureOffset ( global float) +0:41 's2DShadow' ( uniform sampler2DShadow) +0:41 'c3D' ( smooth in 3-component vector of float) +0:41 Constant: +0:41 3 (const int) +0:41 3 (const int) +0:41 'c1D' ( smooth in float) +0:42 add second child into first child ( temp 4-component vector of float) +0:42 'v' ( temp 4-component vector of float) +0:42 textureFetch ( global 4-component vector of float) +0:42 's3D' ( uniform sampler3D) +0:42 'ic3D' ( flat in 3-component vector of int) +0:42 'ic1D' ( flat in int) +0:43 add second child into first child ( temp 4-component vector of float) +0:43 'v' ( temp 4-component vector of float) +0:43 textureFetchOffset ( global 4-component vector of float) +0:43 's2D' ( uniform sampler2D) +0:43 'ic2D' ( flat in 2-component vector of int) +0:43 Constant: +0:43 4 (const int) +0:43 Constant: +0:43 3 (const int) +0:43 3 (const int) +0:44 add second child into first child ( temp 4-component vector of float) +0:44 'v' ( temp 4-component vector of float) +0:44 textureFetchOffset ( global 4-component vector of float) +0:44 'sr' ( uniform sampler2DRect) +0:44 'ic2D' ( flat in 2-component vector of int) +0:44 Constant: +0:44 4 (const int) +0:44 4 (const int) +0:45 add second child into first child ( temp float) +0:45 direct index ( temp float) +0:45 'v' ( temp 4-component vector of float) +0:45 Constant: +0:45 1 (const int) +0:45 textureLodOffset ( global float) +0:45 's2DShadow' ( uniform sampler2DShadow) +0:45 'c3D' ( smooth in 3-component vector of float) +0:45 'c1D' ( smooth in float) +0:45 Constant: +0:45 3 (const int) +0:45 3 (const int) +0:46 add second child into first child ( temp 4-component vector of float) +0:46 'v' ( temp 4-component vector of float) +0:46 textureProjLodOffset ( global 4-component vector of float) +0:46 's2D' ( uniform sampler2D) +0:46 'c3D' ( smooth in 3-component vector of float) +0:46 'c1D' ( smooth in float) +0:46 Constant: +0:46 3 (const int) +0:46 3 (const int) +0:47 add second child into first child ( temp 4-component vector of float) +0:47 'v' ( temp 4-component vector of float) +0:47 textureGrad ( global 4-component vector of float) +0:47 'sCube' ( uniform samplerCube) +0:47 'c3D' ( smooth in 3-component vector of float) +0:47 'c3D' ( smooth in 3-component vector of float) +0:47 'c3D' ( smooth in 3-component vector of float) +0:48 add second child into first child ( temp float) +0:48 direct index ( temp float) +0:48 'v' ( temp 4-component vector of float) +0:48 Constant: +0:48 0 (const int) +0:48 textureGradOffset ( global float) +0:48 's2DArrayShadow' ( uniform sampler2DArrayShadow) +0:48 'c4D' ( smooth in 4-component vector of float) +0:48 'c2D' ( smooth in 2-component vector of float) +0:48 'c2D' ( smooth in 2-component vector of float) +0:48 Constant: +0:48 3 (const int) +0:48 3 (const int) +0:49 add second child into first child ( temp 4-component vector of float) +0:49 'v' ( temp 4-component vector of float) +0:49 textureProjGrad ( global 4-component vector of float) +0:49 's3D' ( uniform sampler3D) +0:49 'c4D' ( smooth in 4-component vector of float) +0:49 'c3D' ( smooth in 3-component vector of float) +0:49 'c3D' ( smooth in 3-component vector of float) +0:50 add second child into first child ( temp 4-component vector of float) +0:50 'v' ( temp 4-component vector of float) +0:50 textureProjGradOffset ( global 4-component vector of float) +0:50 's2D' ( uniform sampler2D) +0:50 'c3D' ( smooth in 3-component vector of float) +0:50 'c2D' ( smooth in 2-component vector of float) +0:50 'c2D' ( smooth in 2-component vector of float) +0:50 Constant: +0:50 3 (const int) +0:50 3 (const int) +0:52 Sequence +0:52 move second child to first child ( temp 4-component vector of int) +0:52 'iv' ( temp 4-component vector of int) +0:52 texture ( global 4-component vector of int) +0:52 'is2D' ( uniform isampler2D) +0:52 'c2D' ( smooth in 2-component vector of float) +0:53 add second child into first child ( temp 4-component vector of float) +0:53 'v' ( temp 4-component vector of float) +0:53 Convert int to float ( temp 4-component vector of float) +0:53 'iv' ( temp 4-component vector of int) +0:54 move second child to first child ( temp 4-component vector of int) +0:54 'iv' ( temp 4-component vector of int) +0:54 textureProjOffset ( global 4-component vector of int) +0:54 'is2D' ( uniform isampler2D) +0:54 'c4D' ( smooth in 4-component vector of float) +0:54 Constant: +0:54 3 (const int) +0:54 3 (const int) +0:55 add second child into first child ( temp 4-component vector of float) +0:55 'v' ( temp 4-component vector of float) +0:55 Convert int to float ( temp 4-component vector of float) +0:55 'iv' ( temp 4-component vector of int) +0:56 move second child to first child ( temp 4-component vector of int) +0:56 'iv' ( temp 4-component vector of int) +0:56 textureProjLod ( global 4-component vector of int) +0:56 'is2D' ( uniform isampler2D) +0:56 'c3D' ( smooth in 3-component vector of float) +0:56 'c1D' ( smooth in float) +0:57 add second child into first child ( temp 4-component vector of float) +0:57 'v' ( temp 4-component vector of float) +0:57 Convert int to float ( temp 4-component vector of float) +0:57 'iv' ( temp 4-component vector of int) +0:58 move second child to first child ( temp 4-component vector of int) +0:58 'iv' ( temp 4-component vector of int) +0:58 textureProjGrad ( global 4-component vector of int) +0:58 'is2D' ( uniform isampler2D) +0:58 'c3D' ( smooth in 3-component vector of float) +0:58 'c2D' ( smooth in 2-component vector of float) +0:58 'c2D' ( smooth in 2-component vector of float) +0:59 add second child into first child ( temp 4-component vector of float) +0:59 'v' ( temp 4-component vector of float) +0:59 Convert int to float ( temp 4-component vector of float) +0:59 'iv' ( temp 4-component vector of int) +0:60 move second child to first child ( temp 4-component vector of int) +0:60 'iv' ( temp 4-component vector of int) +0:60 texture ( global 4-component vector of int) +0:60 'is3D' ( uniform isampler3D) +0:60 'c3D' ( smooth in 3-component vector of float) +0:60 Constant: +0:60 4.200000 +0:61 add second child into first child ( temp 4-component vector of float) +0:61 'v' ( temp 4-component vector of float) +0:61 Convert int to float ( temp 4-component vector of float) +0:61 'iv' ( temp 4-component vector of int) +0:62 move second child to first child ( temp 4-component vector of int) +0:62 'iv' ( temp 4-component vector of int) +0:62 textureLod ( global 4-component vector of int) +0:62 'isCube' ( uniform isamplerCube) +0:62 'c3D' ( smooth in 3-component vector of float) +0:62 'c1D' ( smooth in float) +0:63 add second child into first child ( temp 4-component vector of float) +0:63 'v' ( temp 4-component vector of float) +0:63 Convert int to float ( temp 4-component vector of float) +0:63 'iv' ( temp 4-component vector of int) +0:64 move second child to first child ( temp 4-component vector of int) +0:64 'iv' ( temp 4-component vector of int) +0:64 textureFetch ( global 4-component vector of int) +0:64 'is2DArray' ( uniform isampler2DArray) +0:64 'ic3D' ( flat in 3-component vector of int) +0:64 'ic1D' ( flat in int) +0:65 add second child into first child ( temp 4-component vector of float) +0:65 'v' ( temp 4-component vector of float) +0:65 Convert int to float ( temp 4-component vector of float) +0:65 'iv' ( temp 4-component vector of int) +0:66 add second child into first child ( temp 4-component vector of int) +0:66 'iv' ( temp 4-component vector of int) +0:66 textureFetch ( global 4-component vector of int) +0:66 'is2Dms' ( uniform isampler2DMS) +0:66 'ic2D' ( flat in 2-component vector of int) +0:66 'ic1D' ( flat in int) +0:67 add second child into first child ( temp 4-component vector of float) +0:67 'v' ( temp 4-component vector of float) +0:67 Convert int to float ( temp 4-component vector of float) +0:67 'iv' ( temp 4-component vector of int) +0:68 add second child into first child ( temp 4-component vector of float) +0:68 'v' ( temp 4-component vector of float) +0:68 textureFetch ( global 4-component vector of float) +0:68 'sb' ( uniform samplerBuffer) +0:68 'ic1D' ( flat in int) +0:69 add second child into first child ( temp 4-component vector of float) +0:69 'v' ( temp 4-component vector of float) +0:69 textureFetch ( global 4-component vector of float) +0:69 'sr' ( uniform sampler2DRect) +0:69 'ic2D' ( flat in 2-component vector of int) +0:71 Sequence +0:71 move second child to first child ( temp 2-component vector of int) +0:71 'iv2' ( temp 2-component vector of int) +0:71 textureSize ( global 2-component vector of int) +0:71 'sCubeShadow' ( uniform samplerCubeShadow) +0:71 Constant: +0:71 2 (const int) +0:74 move second child to first child ( temp 4-component vector of float) +0:74 'FragData' ( out 4-component vector of float) +0:74 add ( temp 4-component vector of float) +0:74 'v' ( temp 4-component vector of float) +0:74 Construct vec4 ( temp 4-component vector of float) +0:74 Convert int to float ( temp 2-component vector of float) +0:74 'iv2' ( temp 2-component vector of int) +0:74 Constant: +0:74 0.000000 +0:74 Constant: +0:74 0.000000 +0:? Linker Objects +0:? 'sb' ( uniform samplerBuffer) +0:? 'sr' ( uniform sampler2DRect) +0:? 's2D' ( uniform sampler2D) +0:? 's3D' ( uniform sampler3D) +0:? 'sCube' ( uniform samplerCube) +0:? 'sCubeShadow' ( uniform samplerCubeShadow) +0:? 's2DShadow' ( uniform sampler2DShadow) +0:? 's2DArray' ( uniform sampler2DArray) +0:? 's2DArrayShadow' ( uniform sampler2DArrayShadow) +0:? 'is2D' ( uniform isampler2D) +0:? 'is3D' ( uniform isampler3D) +0:? 'isCube' ( uniform isamplerCube) +0:? 'is2DArray' ( uniform isampler2DArray) +0:? 'is2Dms' ( uniform isampler2DMS) +0:? 'us2D' ( uniform usampler2D) +0:? 'us3D' ( uniform usampler3D) +0:? 'usCube' ( uniform usamplerCube) +0:? 'us2DArray' ( uniform usampler2DArray) +0:? 'c1D' ( smooth in float) +0:? 'c2D' ( smooth in 2-component vector of float) +0:? 'c3D' ( smooth in 3-component vector of float) +0:? 'c4D' ( smooth in 4-component vector of float) +0:? 'ic1D' ( flat in int) +0:? 'ic2D' ( flat in 2-component vector of int) +0:? 'ic3D' ( flat in 3-component vector of int) +0:? 'ic4D' ( flat in 4-component vector of int) +0:? 'FragData' ( out 4-component vector of float) + + +Linked fragment stage: + + +Shader version: 430 +0:? Sequence +0:36 Function Definition: main( ( global void) +0:36 Function Parameters: +0:38 Sequence +0:38 Sequence +0:38 move second child to first child ( temp 4-component vector of float) +0:38 'v' ( temp 4-component vector of float) +0:38 texture ( global 4-component vector of float) +0:38 's2D' ( uniform sampler2D) +0:38 'c2D' ( smooth in 2-component vector of float) +0:39 add second child into first child ( temp 4-component vector of float) +0:39 'v' ( temp 4-component vector of float) +0:39 textureProj ( global 4-component vector of float) +0:39 's3D' ( uniform sampler3D) +0:39 'c4D' ( smooth in 4-component vector of float) +0:40 add second child into first child ( temp 4-component vector of float) +0:40 'v' ( temp 4-component vector of float) +0:40 textureLod ( global 4-component vector of float) +0:40 's2DArray' ( uniform sampler2DArray) +0:40 'c3D' ( smooth in 3-component vector of float) +0:40 Constant: +0:40 1.200000 +0:41 add second child into first child ( temp float) +0:41 direct index ( temp float) +0:41 'v' ( temp 4-component vector of float) +0:41 Constant: +0:41 1 (const int) +0:41 textureOffset ( global float) +0:41 's2DShadow' ( uniform sampler2DShadow) +0:41 'c3D' ( smooth in 3-component vector of float) +0:41 Constant: +0:41 3 (const int) +0:41 3 (const int) +0:41 'c1D' ( smooth in float) +0:42 add second child into first child ( temp 4-component vector of float) +0:42 'v' ( temp 4-component vector of float) +0:42 textureFetch ( global 4-component vector of float) +0:42 's3D' ( uniform sampler3D) +0:42 'ic3D' ( flat in 3-component vector of int) +0:42 'ic1D' ( flat in int) +0:43 add second child into first child ( temp 4-component vector of float) +0:43 'v' ( temp 4-component vector of float) +0:43 textureFetchOffset ( global 4-component vector of float) +0:43 's2D' ( uniform sampler2D) +0:43 'ic2D' ( flat in 2-component vector of int) +0:43 Constant: +0:43 4 (const int) +0:43 Constant: +0:43 3 (const int) +0:43 3 (const int) +0:44 add second child into first child ( temp 4-component vector of float) +0:44 'v' ( temp 4-component vector of float) +0:44 textureFetchOffset ( global 4-component vector of float) +0:44 'sr' ( uniform sampler2DRect) +0:44 'ic2D' ( flat in 2-component vector of int) +0:44 Constant: +0:44 4 (const int) +0:44 4 (const int) +0:45 add second child into first child ( temp float) +0:45 direct index ( temp float) +0:45 'v' ( temp 4-component vector of float) +0:45 Constant: +0:45 1 (const int) +0:45 textureLodOffset ( global float) +0:45 's2DShadow' ( uniform sampler2DShadow) +0:45 'c3D' ( smooth in 3-component vector of float) +0:45 'c1D' ( smooth in float) +0:45 Constant: +0:45 3 (const int) +0:45 3 (const int) +0:46 add second child into first child ( temp 4-component vector of float) +0:46 'v' ( temp 4-component vector of float) +0:46 textureProjLodOffset ( global 4-component vector of float) +0:46 's2D' ( uniform sampler2D) +0:46 'c3D' ( smooth in 3-component vector of float) +0:46 'c1D' ( smooth in float) +0:46 Constant: +0:46 3 (const int) +0:46 3 (const int) +0:47 add second child into first child ( temp 4-component vector of float) +0:47 'v' ( temp 4-component vector of float) +0:47 textureGrad ( global 4-component vector of float) +0:47 'sCube' ( uniform samplerCube) +0:47 'c3D' ( smooth in 3-component vector of float) +0:47 'c3D' ( smooth in 3-component vector of float) +0:47 'c3D' ( smooth in 3-component vector of float) +0:48 add second child into first child ( temp float) +0:48 direct index ( temp float) +0:48 'v' ( temp 4-component vector of float) +0:48 Constant: +0:48 0 (const int) +0:48 textureGradOffset ( global float) +0:48 's2DArrayShadow' ( uniform sampler2DArrayShadow) +0:48 'c4D' ( smooth in 4-component vector of float) +0:48 'c2D' ( smooth in 2-component vector of float) +0:48 'c2D' ( smooth in 2-component vector of float) +0:48 Constant: +0:48 3 (const int) +0:48 3 (const int) +0:49 add second child into first child ( temp 4-component vector of float) +0:49 'v' ( temp 4-component vector of float) +0:49 textureProjGrad ( global 4-component vector of float) +0:49 's3D' ( uniform sampler3D) +0:49 'c4D' ( smooth in 4-component vector of float) +0:49 'c3D' ( smooth in 3-component vector of float) +0:49 'c3D' ( smooth in 3-component vector of float) +0:50 add second child into first child ( temp 4-component vector of float) +0:50 'v' ( temp 4-component vector of float) +0:50 textureProjGradOffset ( global 4-component vector of float) +0:50 's2D' ( uniform sampler2D) +0:50 'c3D' ( smooth in 3-component vector of float) +0:50 'c2D' ( smooth in 2-component vector of float) +0:50 'c2D' ( smooth in 2-component vector of float) +0:50 Constant: +0:50 3 (const int) +0:50 3 (const int) +0:52 Sequence +0:52 move second child to first child ( temp 4-component vector of int) +0:52 'iv' ( temp 4-component vector of int) +0:52 texture ( global 4-component vector of int) +0:52 'is2D' ( uniform isampler2D) +0:52 'c2D' ( smooth in 2-component vector of float) +0:53 add second child into first child ( temp 4-component vector of float) +0:53 'v' ( temp 4-component vector of float) +0:53 Convert int to float ( temp 4-component vector of float) +0:53 'iv' ( temp 4-component vector of int) +0:54 move second child to first child ( temp 4-component vector of int) +0:54 'iv' ( temp 4-component vector of int) +0:54 textureProjOffset ( global 4-component vector of int) +0:54 'is2D' ( uniform isampler2D) +0:54 'c4D' ( smooth in 4-component vector of float) +0:54 Constant: +0:54 3 (const int) +0:54 3 (const int) +0:55 add second child into first child ( temp 4-component vector of float) +0:55 'v' ( temp 4-component vector of float) +0:55 Convert int to float ( temp 4-component vector of float) +0:55 'iv' ( temp 4-component vector of int) +0:56 move second child to first child ( temp 4-component vector of int) +0:56 'iv' ( temp 4-component vector of int) +0:56 textureProjLod ( global 4-component vector of int) +0:56 'is2D' ( uniform isampler2D) +0:56 'c3D' ( smooth in 3-component vector of float) +0:56 'c1D' ( smooth in float) +0:57 add second child into first child ( temp 4-component vector of float) +0:57 'v' ( temp 4-component vector of float) +0:57 Convert int to float ( temp 4-component vector of float) +0:57 'iv' ( temp 4-component vector of int) +0:58 move second child to first child ( temp 4-component vector of int) +0:58 'iv' ( temp 4-component vector of int) +0:58 textureProjGrad ( global 4-component vector of int) +0:58 'is2D' ( uniform isampler2D) +0:58 'c3D' ( smooth in 3-component vector of float) +0:58 'c2D' ( smooth in 2-component vector of float) +0:58 'c2D' ( smooth in 2-component vector of float) +0:59 add second child into first child ( temp 4-component vector of float) +0:59 'v' ( temp 4-component vector of float) +0:59 Convert int to float ( temp 4-component vector of float) +0:59 'iv' ( temp 4-component vector of int) +0:60 move second child to first child ( temp 4-component vector of int) +0:60 'iv' ( temp 4-component vector of int) +0:60 texture ( global 4-component vector of int) +0:60 'is3D' ( uniform isampler3D) +0:60 'c3D' ( smooth in 3-component vector of float) +0:60 Constant: +0:60 4.200000 +0:61 add second child into first child ( temp 4-component vector of float) +0:61 'v' ( temp 4-component vector of float) +0:61 Convert int to float ( temp 4-component vector of float) +0:61 'iv' ( temp 4-component vector of int) +0:62 move second child to first child ( temp 4-component vector of int) +0:62 'iv' ( temp 4-component vector of int) +0:62 textureLod ( global 4-component vector of int) +0:62 'isCube' ( uniform isamplerCube) +0:62 'c3D' ( smooth in 3-component vector of float) +0:62 'c1D' ( smooth in float) +0:63 add second child into first child ( temp 4-component vector of float) +0:63 'v' ( temp 4-component vector of float) +0:63 Convert int to float ( temp 4-component vector of float) +0:63 'iv' ( temp 4-component vector of int) +0:64 move second child to first child ( temp 4-component vector of int) +0:64 'iv' ( temp 4-component vector of int) +0:64 textureFetch ( global 4-component vector of int) +0:64 'is2DArray' ( uniform isampler2DArray) +0:64 'ic3D' ( flat in 3-component vector of int) +0:64 'ic1D' ( flat in int) +0:65 add second child into first child ( temp 4-component vector of float) +0:65 'v' ( temp 4-component vector of float) +0:65 Convert int to float ( temp 4-component vector of float) +0:65 'iv' ( temp 4-component vector of int) +0:66 add second child into first child ( temp 4-component vector of int) +0:66 'iv' ( temp 4-component vector of int) +0:66 textureFetch ( global 4-component vector of int) +0:66 'is2Dms' ( uniform isampler2DMS) +0:66 'ic2D' ( flat in 2-component vector of int) +0:66 'ic1D' ( flat in int) +0:67 add second child into first child ( temp 4-component vector of float) +0:67 'v' ( temp 4-component vector of float) +0:67 Convert int to float ( temp 4-component vector of float) +0:67 'iv' ( temp 4-component vector of int) +0:68 add second child into first child ( temp 4-component vector of float) +0:68 'v' ( temp 4-component vector of float) +0:68 textureFetch ( global 4-component vector of float) +0:68 'sb' ( uniform samplerBuffer) +0:68 'ic1D' ( flat in int) +0:69 add second child into first child ( temp 4-component vector of float) +0:69 'v' ( temp 4-component vector of float) +0:69 textureFetch ( global 4-component vector of float) +0:69 'sr' ( uniform sampler2DRect) +0:69 'ic2D' ( flat in 2-component vector of int) +0:71 Sequence +0:71 move second child to first child ( temp 2-component vector of int) +0:71 'iv2' ( temp 2-component vector of int) +0:71 textureSize ( global 2-component vector of int) +0:71 'sCubeShadow' ( uniform samplerCubeShadow) +0:71 Constant: +0:71 2 (const int) +0:74 move second child to first child ( temp 4-component vector of float) +0:74 'FragData' ( out 4-component vector of float) +0:74 add ( temp 4-component vector of float) +0:74 'v' ( temp 4-component vector of float) +0:74 Construct vec4 ( temp 4-component vector of float) +0:74 Convert int to float ( temp 2-component vector of float) +0:74 'iv2' ( temp 2-component vector of int) +0:74 Constant: +0:74 0.000000 +0:74 Constant: +0:74 0.000000 +0:? Linker Objects +0:? 'sb' ( uniform samplerBuffer) +0:? 'sr' ( uniform sampler2DRect) +0:? 's2D' ( uniform sampler2D) +0:? 's3D' ( uniform sampler3D) +0:? 'sCube' ( uniform samplerCube) +0:? 'sCubeShadow' ( uniform samplerCubeShadow) +0:? 's2DShadow' ( uniform sampler2DShadow) +0:? 's2DArray' ( uniform sampler2DArray) +0:? 's2DArrayShadow' ( uniform sampler2DArrayShadow) +0:? 'is2D' ( uniform isampler2D) +0:? 'is3D' ( uniform isampler3D) +0:? 'isCube' ( uniform isamplerCube) +0:? 'is2DArray' ( uniform isampler2DArray) +0:? 'is2Dms' ( uniform isampler2DMS) +0:? 'us2D' ( uniform usampler2D) +0:? 'us3D' ( uniform usampler3D) +0:? 'usCube' ( uniform usamplerCube) +0:? 'us2DArray' ( uniform usampler2DArray) +0:? 'c1D' ( smooth in float) +0:? 'c2D' ( smooth in 2-component vector of float) +0:? 'c3D' ( smooth in 3-component vector of float) +0:? 'c4D' ( smooth in 4-component vector of float) +0:? 'ic1D' ( flat in int) +0:? 'ic2D' ( flat in 2-component vector of int) +0:? 'ic3D' ( flat in 3-component vector of int) +0:? 'ic4D' ( flat in 4-component vector of int) +0:? 'FragData' ( out 4-component vector of float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/noMain.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/noMain.vert.out new file mode 100644 index 0000000..dd26243 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/noMain.vert.out @@ -0,0 +1,43 @@ +noMain.vert +Shader version: 300 +0:? Sequence +0:3 Function Definition: foo( ( global void) +0:3 Function Parameters: +0:? Linker Objects +0:? 'gl_VertexID' ( gl_VertexId highp int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId highp int InstanceId) + +mains.frag +ERROR: 0:7: 'main' : function already has a body +ERROR: 1 compilation errors. No code generated. + + +Shader version: 300 +ERROR: node is still EOpNull! +0:3 Function Definition: main( ( global void) +0:3 Function Parameters: +0:7 Function Definition: main( ( global void) +0:7 Function Parameters: +0:? Linker Objects + + +Linked vertex stage: + +ERROR: Linking vertex stage: Missing entry point: Each stage requires one entry point + +Linked fragment stage: + + +Shader version: 300 +0:? Sequence +0:? Linker Objects +0:? 'gl_VertexID' ( gl_VertexId highp int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId highp int InstanceId) +Shader version: 300 +ERROR: node is still EOpNull! +0:3 Function Definition: main( ( global void) +0:3 Function Parameters: +0:7 Function Definition: main( ( global void) +0:7 Function Parameters: +0:? Linker Objects + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/nonSquare.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/nonSquare.vert.out new file mode 100644 index 0000000..aa8a827 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/nonSquare.vert.out @@ -0,0 +1,183 @@ +nonSquare.vert +Shader version: 120 +0:? Sequence +0:15 Function Definition: main( ( global void) +0:15 Function Parameters: +0:? Sequence +0:20 move second child to first child ( temp 2-component vector of float) +0:20 'a' ( temp 2-component vector of float) +0:20 vector-times-matrix ( temp 2-component vector of float) +0:20 'v3' ( in 3-component vector of float) +0:20 'm23' ( temp 2X3 matrix of float) +0:21 move second child to first child ( temp 2-component vector of float) +0:21 'b' ( temp 2-component vector of float) +0:21 matrix-times-vector ( temp 2-component vector of float) +0:21 'm32' ( uniform 3X2 matrix of float) +0:21 'v3' ( in 3-component vector of float) +0:23 move second child to first child ( temp 4-component vector of float) +0:23 'gl_Position' ( gl_Position 4-component vector of float Position) +0:24 add ( temp 4-component vector of float) +0:24 add ( temp 4-component vector of float) +0:24 add ( temp 4-component vector of float) +0:23 add ( temp 4-component vector of float) +0:23 Construct vec4 ( temp 4-component vector of float) +0:23 matrix-times-vector ( temp 3-component vector of float) +0:23 matrix-multiply ( temp 3X3 matrix of float) +0:23 'm23' ( temp 2X3 matrix of float) +0:23 'm32' ( uniform 3X2 matrix of float) +0:23 'v3' ( in 3-component vector of float) +0:23 Constant: +0:23 0.000000 +0:24 matrix-times-vector ( temp 4-component vector of float) +0:24 Constant: +0:24 3.000000 +0:24 6.000000 +0:24 0.000000 +0:24 0.000000 +0:24 9.000000 +0:24 12.000000 +0:24 0.000000 +0:24 0.000000 +0:24 15.000000 +0:24 18.000000 +0:24 0.000000 +0:24 0.000000 +0:24 21.000000 +0:24 24.000000 +0:24 0.000000 +0:24 0.000000 +0:24 'v4' ( in 4-component vector of float) +0:24 Constant: +0:24 50.000000 +0:24 110.000000 +0:24 170.000000 +0:24 230.000000 +0:24 Constant: +0:24 30.000000 +0:24 60.000000 +0:24 0.000000 +0:24 0.000000 +0:24 Constant: +0:24 20.000000 +0:24 10.000000 +0:24 6.000000 +0:24 5.000000 +0:? Linker Objects +0:? 'v3' ( in 3-component vector of float) +0:? 'v4' ( in 4-component vector of float) +0:? 'm32' ( uniform 3X2 matrix of float) +0:? 'cv2' ( const 2-component vector of float) +0:? 10.000000 +0:? 20.000000 +0:? 'm24' ( const 2X4 matrix of float) +0:? 3.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 3.000000 +0:? 0.000000 +0:? 0.000000 +0:? 'm42' ( const 4X2 matrix of float) +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:? 5.000000 +0:? 6.000000 +0:? 7.000000 +0:? 8.000000 + + +Linked vertex stage: + + +Shader version: 120 +0:? Sequence +0:15 Function Definition: main( ( global void) +0:15 Function Parameters: +0:? Sequence +0:20 move second child to first child ( temp 2-component vector of float) +0:20 'a' ( temp 2-component vector of float) +0:20 vector-times-matrix ( temp 2-component vector of float) +0:20 'v3' ( in 3-component vector of float) +0:20 'm23' ( temp 2X3 matrix of float) +0:21 move second child to first child ( temp 2-component vector of float) +0:21 'b' ( temp 2-component vector of float) +0:21 matrix-times-vector ( temp 2-component vector of float) +0:21 'm32' ( uniform 3X2 matrix of float) +0:21 'v3' ( in 3-component vector of float) +0:23 move second child to first child ( temp 4-component vector of float) +0:23 'gl_Position' ( gl_Position 4-component vector of float Position) +0:24 add ( temp 4-component vector of float) +0:24 add ( temp 4-component vector of float) +0:24 add ( temp 4-component vector of float) +0:23 add ( temp 4-component vector of float) +0:23 Construct vec4 ( temp 4-component vector of float) +0:23 matrix-times-vector ( temp 3-component vector of float) +0:23 matrix-multiply ( temp 3X3 matrix of float) +0:23 'm23' ( temp 2X3 matrix of float) +0:23 'm32' ( uniform 3X2 matrix of float) +0:23 'v3' ( in 3-component vector of float) +0:23 Constant: +0:23 0.000000 +0:24 matrix-times-vector ( temp 4-component vector of float) +0:24 Constant: +0:24 3.000000 +0:24 6.000000 +0:24 0.000000 +0:24 0.000000 +0:24 9.000000 +0:24 12.000000 +0:24 0.000000 +0:24 0.000000 +0:24 15.000000 +0:24 18.000000 +0:24 0.000000 +0:24 0.000000 +0:24 21.000000 +0:24 24.000000 +0:24 0.000000 +0:24 0.000000 +0:24 'v4' ( in 4-component vector of float) +0:24 Constant: +0:24 50.000000 +0:24 110.000000 +0:24 170.000000 +0:24 230.000000 +0:24 Constant: +0:24 30.000000 +0:24 60.000000 +0:24 0.000000 +0:24 0.000000 +0:24 Constant: +0:24 20.000000 +0:24 10.000000 +0:24 6.000000 +0:24 5.000000 +0:? Linker Objects +0:? 'v3' ( in 3-component vector of float) +0:? 'v4' ( in 4-component vector of float) +0:? 'm32' ( uniform 3X2 matrix of float) +0:? 'cv2' ( const 2-component vector of float) +0:? 10.000000 +0:? 20.000000 +0:? 'm24' ( const 2X4 matrix of float) +0:? 3.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 3.000000 +0:? 0.000000 +0:? 0.000000 +0:? 'm42' ( const 4X2 matrix of float) +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:? 5.000000 +0:? 6.000000 +0:? 7.000000 +0:? 8.000000 + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/nonVulkan.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/nonVulkan.frag.out new file mode 100644 index 0000000..236f5a8 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/nonVulkan.frag.out @@ -0,0 +1,30 @@ +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 +ERROR: 0:5: 'push_constant' : only allowed when using GLSL for Vulkan +ERROR: 4 compilation errors. No code generated. + + +Shader version: 450 +ERROR: node is still EOpNull! +0:? Linker Objects +0:? 'arraySize' ( specialization-constant const int) +0:? 12 (const int) +0:? 'foo' ( temp int) +0:? 'ubi' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform int a}) + + +Linked fragment stage: + +ERROR: Linking fragment stage: Missing entry point: Each stage requires one entry point + +Shader version: 450 +ERROR: node is still EOpNull! +0:? Linker Objects +0:? 'arraySize' ( specialization-constant const int) +0:? 12 (const int) +0:? 'foo' ( temp int) +0:? 'ubi' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform int a}) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/nosuffix.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/nosuffix.out new file mode 100644 index 0000000..d881c5b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/nosuffix.out @@ -0,0 +1,15 @@ +nosuffix +Shader version: 100 +0:? Sequence +0:1 Function Definition: main( ( global void) +0:1 Function Parameters: +0:3 Sequence +0:3 move second child to first child ( temp highp 4-component vector of float) +0:3 'gl_Position' ( gl_Position highp 4-component vector of float Position) +0:3 Constant: +0:3 1.000000 +0:3 1.000000 +0:3 1.000000 +0:3 1.000000 +0:? Linker Objects + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/numeral.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/numeral.frag.out new file mode 100644 index 0000000..22f4a94 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/numeral.frag.out @@ -0,0 +1,829 @@ +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 +ERROR: 0:17: '' : octal literal too big +ERROR: 0:18: '' : octal literal too big +ERROR: 0:23: '' : octal literal digit too large +ERROR: 0:24: '' : octal literal digit too large +ERROR: 0:49: '' : bad digit in hexadecimal literal +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. + + +Shader version: 400 +ERROR: node is still EOpNull! +0:3 Function Definition: main( ( global void) +0:3 Function Parameters: +0:5 Sequence +0:5 Sequence +0:5 move second child to first child ( temp int) +0:5 'o00' ( temp int) +0:5 Constant: +0:5 0 (const int) +0:6 Sequence +0:6 move second child to first child ( temp int) +0:6 'o000' ( temp int) +0:6 Constant: +0:6 0 (const int) +0:7 Sequence +0:7 move second child to first child ( temp int) +0:7 'o0000' ( temp int) +0:7 Constant: +0:7 0 (const int) +0:8 Sequence +0:8 move second child to first child ( temp int) +0:8 'o5' ( temp int) +0:8 Constant: +0:8 5 (const int) +0:9 Sequence +0:9 move second child to first child ( temp int) +0:9 'o05' ( temp int) +0:9 Constant: +0:9 5 (const int) +0:10 Sequence +0:10 move second child to first child ( temp int) +0:10 'o006' ( temp int) +0:10 Constant: +0:10 6 (const int) +0:11 Sequence +0:11 move second child to first child ( temp int) +0:11 'o7' ( temp int) +0:11 Constant: +0:11 7 (const int) +0:12 Sequence +0:12 move second child to first child ( temp int) +0:12 'o58' ( temp int) +0:12 Constant: +0:12 58 (const int) +0:13 Sequence +0:13 move second child to first child ( temp int) +0:13 'omax' ( temp int) +0:13 Constant: +0:13 -1 (const int) +0:14 Sequence +0:14 move second child to first child ( temp int) +0:14 'o8' ( temp int) +0:14 Constant: +0:14 0 (const int) +0:15 Sequence +0:15 move second child to first child ( temp int) +0:15 'o08' ( temp int) +0:15 Constant: +0:15 0 (const int) +0:16 Sequence +0:16 move second child to first child ( temp int) +0:16 'o009' ( temp int) +0:16 Constant: +0:16 0 (const int) +0:17 Sequence +0:17 move second child to first child ( temp int) +0:17 'obig' ( temp int) +0:17 Constant: +0:17 995208915 (const int) +0:18 Sequence +0:18 move second child to first child ( temp int) +0:18 'omax1' ( temp int) +0:18 Constant: +0:18 536870912 (const int) +0:20 Sequence +0:20 move second child to first child ( temp uint) +0:20 'uo5' ( temp uint) +0:20 Constant: +0:20 5 (const uint) +0:21 Sequence +0:21 move second child to first child ( temp uint) +0:21 'uo6' ( temp uint) +0:21 Constant: +0:21 6 (const uint) +0:22 Sequence +0:22 move second child to first child ( temp uint) +0:22 'uo7' ( temp uint) +0:22 Constant: +0:22 7 (const uint) +0:23 Sequence +0:23 move second child to first child ( temp uint) +0:23 'uo8' ( temp uint) +0:23 Constant: +0:23 0 (const uint) +0:24 Sequence +0:24 move second child to first child ( temp uint) +0:24 'uo9' ( temp uint) +0:24 Constant: +0:24 0 (const uint) +0:26 Sequence +0:26 move second child to first child ( temp int) +0:26 'h0' ( temp int) +0:26 Constant: +0:26 0 (const int) +0:27 Sequence +0:27 move second child to first child ( temp int) +0:27 'h00' ( temp int) +0:27 Constant: +0:27 0 (const int) +0:28 Sequence +0:28 move second child to first child ( temp int) +0:28 'h000' ( temp int) +0:28 Constant: +0:28 0 (const int) +0:29 Sequence +0:29 move second child to first child ( temp int) +0:29 'h1' ( temp int) +0:29 Constant: +0:29 1 (const int) +0:30 Sequence +0:30 move second child to first child ( temp int) +0:30 'h2' ( temp int) +0:30 Constant: +0:30 2 (const int) +0:31 Sequence +0:31 move second child to first child ( temp int) +0:31 'h300' ( temp int) +0:31 Constant: +0:31 768 (const int) +0:32 Sequence +0:32 move second child to first child ( temp int) +0:32 'hABCDEF' ( temp int) +0:32 Constant: +0:32 11259375 (const int) +0:33 Sequence +0:33 move second child to first child ( temp int) +0:33 'hFFFFFFFF' ( temp int) +0:33 Constant: +0:33 -1 (const int) +0:34 Sequence +0:34 move second child to first child ( temp int) +0:34 'h12345678' ( temp int) +0:34 Constant: +0:34 12345678 (const int) +0:35 Sequence +0:35 move second child to first child ( temp int) +0:35 'hToBeOrNotToBe' ( temp int) +0:35 Constant: +0:35 -1 (const int) +0:37 Sequence +0:37 move second child to first child ( temp uint) +0:37 'uh0' ( temp uint) +0:37 Constant: +0:37 0 (const uint) +0:38 Sequence +0:38 move second child to first child ( temp uint) +0:38 'uhg' ( temp uint) +0:38 Constant: +0:38 12 (const uint) +0:39 Sequence +0:39 move second child to first child ( temp uint) +0:39 'uh000' ( temp uint) +0:39 Constant: +0:39 0 (const uint) +0:40 Sequence +0:40 move second child to first child ( temp uint) +0:40 'uh1' ( temp uint) +0:40 Constant: +0:40 1 (const uint) +0:41 Sequence +0:41 move second child to first child ( temp uint) +0:41 'uh2' ( temp uint) +0:41 Constant: +0:41 2 (const uint) +0:42 Sequence +0:42 move second child to first child ( temp uint) +0:42 'uh300' ( temp uint) +0:42 Constant: +0:42 768 (const uint) +0:43 Sequence +0:43 move second child to first child ( temp uint) +0:43 'uhABCDEF' ( temp uint) +0:43 Constant: +0:43 11259375 (const uint) +0:44 Sequence +0:44 move second child to first child ( temp uint) +0:44 'uhFFFFFFFF' ( temp uint) +0:44 Constant: +0:44 4294967295 (const uint) +0:45 Sequence +0:45 move second child to first child ( temp uint) +0:45 'uh12345678' ( temp uint) +0:45 Constant: +0:45 12345678 (const uint) +0:46 Sequence +0:46 move second child to first child ( temp uint) +0:46 'uhToBeOrNotToBe' ( temp uint) +0:46 Constant: +0:46 4294967295 (const uint) +0:49 Sequence +0:49 move second child to first child ( temp int) +0:49 'he2' ( temp int) +0:49 Constant: +0:49 0 (const int) +0:50 Sequence +0:50 move second child to first child ( temp int) +0:50 'hbig' ( temp int) +0:50 Constant: +0:50 -1 (const int) +0:52 Sequence +0:52 move second child to first child ( temp float) +0:52 'f1' ( temp float) +0:52 Constant: +0:52 1.000000 +0:53 Sequence +0:53 move second child to first child ( temp float) +0:53 'f2' ( temp float) +0:53 Constant: +0:53 2.000000 +0:54 Sequence +0:54 move second child to first child ( temp float) +0:54 'f3' ( temp float) +0:54 Constant: +0:54 3.000000 +0:55 Sequence +0:55 move second child to first child ( temp float) +0:55 'f4' ( temp float) +0:55 Constant: +0:55 4.000000 +0:56 Sequence +0:56 move second child to first child ( temp float) +0:56 'f5' ( temp float) +0:56 Constant: +0:56 5.000000 +0:57 Sequence +0:57 move second child to first child ( temp float) +0:57 'f6' ( temp float) +0:57 Constant: +0:57 6.000000 +0:58 Sequence +0:58 move second child to first child ( temp float) +0:58 'f7' ( temp float) +0:58 Constant: +0:58 7.000000 +0:59 Sequence +0:59 move second child to first child ( temp float) +0:59 'f8' ( temp float) +0:59 Constant: +0:59 8.000000 +0:60 Sequence +0:60 move second child to first child ( temp float) +0:60 'f9' ( temp float) +0:60 Constant: +0:60 9.000000 +0:61 Sequence +0:61 move second child to first child ( temp float) +0:61 'f10' ( temp float) +0:61 Constant: +0:61 10.000000 +0:62 Sequence +0:62 move second child to first child ( temp float) +0:62 'f11' ( temp float) +0:62 Constant: +0:62 11.000000 +0:63 Sequence +0:63 move second child to first child ( temp float) +0:63 'f12' ( temp float) +0:63 Constant: +0:63 12.000000 +0:64 Sequence +0:64 move second child to first child ( temp float) +0:64 'f543' ( temp float) +0:64 Constant: +0:64 543.000000 +0:65 Sequence +0:65 move second child to first child ( temp float) +0:65 'f6789' ( temp float) +0:65 Constant: +0:65 6789.000000 +0:66 Sequence +0:66 move second child to first child ( temp float) +0:66 'f88' ( temp float) +0:66 Constant: +0:66 88.000000 +0:68 Sequence +0:68 move second child to first child ( temp float) +0:68 'g1' ( temp float) +0:68 Constant: +0:68 53876.000000 +0:69 Sequence +0:69 move second child to first child ( temp float) +0:69 'g2' ( temp float) +0:69 Constant: +0:69 0.040000 +0:70 Sequence +0:70 move second child to first child ( temp float) +0:70 'g3' ( temp float) +0:70 Constant: +0:70 100000.000000 +0:71 Sequence +0:71 move second child to first child ( temp float) +0:71 'g4' ( temp float) +0:71 Constant: +0:71 0.007321 +0:72 Sequence +0:72 move second child to first child ( temp float) +0:72 'g5' ( temp float) +0:72 Constant: +0:72 32000.000000 +0:73 Sequence +0:73 move second child to first child ( temp float) +0:73 'g6' ( temp float) +0:73 Constant: +0:73 0.000005 +0:74 Sequence +0:74 move second child to first child ( temp float) +0:74 'g7' ( temp float) +0:74 Constant: +0:74 0.450000 +0:75 Sequence +0:75 move second child to first child ( temp float) +0:75 'g8' ( temp float) +0:75 Constant: +0:75 60000000000.000000 +0:77 Sequence +0:77 move second child to first child ( temp double) +0:77 'gf1' ( temp double) +0:77 Constant: +0:77 1.000000 +0:78 Sequence +0:78 move second child to first child ( temp double) +0:78 'gf2' ( temp double) +0:78 Constant: +0:78 2.000000 +0:79 Sequence +0:79 move second child to first child ( temp double) +0:79 'gf3' ( temp double) +0:79 Constant: +0:79 3.000000 +0:80 Sequence +0:80 move second child to first child ( temp double) +0:80 'gf4' ( temp double) +0:80 Constant: +0:80 4.000000 +0:81 Sequence +0:81 move second child to first child ( temp float) +0:81 'gf5' ( temp float) +0:81 Constant: +0:81 5.000000 +0:82 Sequence +0:82 move second child to first child ( temp float) +0:82 'gf6' ( temp float) +0:82 Constant: +0:82 6.000000 +0:88 Sequence +0:88 move second child to first child ( temp float) +0:88 'e5' ( temp float) +0:88 Constant: +0:88 5.000000 +0:98 Sequence +0:98 move second child to first child ( temp uint) +0:98 'g1' ( global uint) +0:98 Constant: +0:98 4294967295 (const uint) +0:99 Sequence +0:99 move second child to first child ( temp uint) +0:99 'g2' ( global uint) +0:99 Constant: +0:99 4294967295 (const uint) +0:100 Sequence +0:100 move second child to first child ( temp uint) +0:100 'g3' ( global uint) +0:100 Constant: +0:100 4294967294 (const uint) +0:101 Sequence +0:101 move second child to first child ( temp int) +0:101 'g4' ( global int) +0:101 Constant: +0:101 -1 (const int) +0:102 Sequence +0:102 move second child to first child ( temp int) +0:102 'g5' ( global int) +0:102 Constant: +0:102 -1 (const int) +0:103 Sequence +0:103 move second child to first child ( temp int) +0:103 'g6' ( global int) +0:103 Constant: +0:103 -2 (const int) +0:? Linker Objects +0:? 'c2' (layout( location=2) out 4-component vector of float) +0:? 'c3' (layout( location=3) out 4-component vector of float) +0:? 'c4' (layout( location=4) out 4-component vector of float) +0:? 'c5' (layout( location=5) out 4-component vector of float) +0:? 'c6' (layout( location=6) out 4-component vector of float) +0:? 'c7' (layout( location=7) out 4-component vector of float) +0:? 'g1' ( global uint) +0:? 'g2' ( global uint) +0:? 'g3' ( global uint) +0:? 'g4' ( global int) +0:? 'g5' ( global int) +0:? 'g6' ( global int) + + +Linked fragment stage: + + +Shader version: 400 +ERROR: node is still EOpNull! +0:3 Function Definition: main( ( global void) +0:3 Function Parameters: +0:5 Sequence +0:5 Sequence +0:5 move second child to first child ( temp int) +0:5 'o00' ( temp int) +0:5 Constant: +0:5 0 (const int) +0:6 Sequence +0:6 move second child to first child ( temp int) +0:6 'o000' ( temp int) +0:6 Constant: +0:6 0 (const int) +0:7 Sequence +0:7 move second child to first child ( temp int) +0:7 'o0000' ( temp int) +0:7 Constant: +0:7 0 (const int) +0:8 Sequence +0:8 move second child to first child ( temp int) +0:8 'o5' ( temp int) +0:8 Constant: +0:8 5 (const int) +0:9 Sequence +0:9 move second child to first child ( temp int) +0:9 'o05' ( temp int) +0:9 Constant: +0:9 5 (const int) +0:10 Sequence +0:10 move second child to first child ( temp int) +0:10 'o006' ( temp int) +0:10 Constant: +0:10 6 (const int) +0:11 Sequence +0:11 move second child to first child ( temp int) +0:11 'o7' ( temp int) +0:11 Constant: +0:11 7 (const int) +0:12 Sequence +0:12 move second child to first child ( temp int) +0:12 'o58' ( temp int) +0:12 Constant: +0:12 58 (const int) +0:13 Sequence +0:13 move second child to first child ( temp int) +0:13 'omax' ( temp int) +0:13 Constant: +0:13 -1 (const int) +0:14 Sequence +0:14 move second child to first child ( temp int) +0:14 'o8' ( temp int) +0:14 Constant: +0:14 0 (const int) +0:15 Sequence +0:15 move second child to first child ( temp int) +0:15 'o08' ( temp int) +0:15 Constant: +0:15 0 (const int) +0:16 Sequence +0:16 move second child to first child ( temp int) +0:16 'o009' ( temp int) +0:16 Constant: +0:16 0 (const int) +0:17 Sequence +0:17 move second child to first child ( temp int) +0:17 'obig' ( temp int) +0:17 Constant: +0:17 995208915 (const int) +0:18 Sequence +0:18 move second child to first child ( temp int) +0:18 'omax1' ( temp int) +0:18 Constant: +0:18 536870912 (const int) +0:20 Sequence +0:20 move second child to first child ( temp uint) +0:20 'uo5' ( temp uint) +0:20 Constant: +0:20 5 (const uint) +0:21 Sequence +0:21 move second child to first child ( temp uint) +0:21 'uo6' ( temp uint) +0:21 Constant: +0:21 6 (const uint) +0:22 Sequence +0:22 move second child to first child ( temp uint) +0:22 'uo7' ( temp uint) +0:22 Constant: +0:22 7 (const uint) +0:23 Sequence +0:23 move second child to first child ( temp uint) +0:23 'uo8' ( temp uint) +0:23 Constant: +0:23 0 (const uint) +0:24 Sequence +0:24 move second child to first child ( temp uint) +0:24 'uo9' ( temp uint) +0:24 Constant: +0:24 0 (const uint) +0:26 Sequence +0:26 move second child to first child ( temp int) +0:26 'h0' ( temp int) +0:26 Constant: +0:26 0 (const int) +0:27 Sequence +0:27 move second child to first child ( temp int) +0:27 'h00' ( temp int) +0:27 Constant: +0:27 0 (const int) +0:28 Sequence +0:28 move second child to first child ( temp int) +0:28 'h000' ( temp int) +0:28 Constant: +0:28 0 (const int) +0:29 Sequence +0:29 move second child to first child ( temp int) +0:29 'h1' ( temp int) +0:29 Constant: +0:29 1 (const int) +0:30 Sequence +0:30 move second child to first child ( temp int) +0:30 'h2' ( temp int) +0:30 Constant: +0:30 2 (const int) +0:31 Sequence +0:31 move second child to first child ( temp int) +0:31 'h300' ( temp int) +0:31 Constant: +0:31 768 (const int) +0:32 Sequence +0:32 move second child to first child ( temp int) +0:32 'hABCDEF' ( temp int) +0:32 Constant: +0:32 11259375 (const int) +0:33 Sequence +0:33 move second child to first child ( temp int) +0:33 'hFFFFFFFF' ( temp int) +0:33 Constant: +0:33 -1 (const int) +0:34 Sequence +0:34 move second child to first child ( temp int) +0:34 'h12345678' ( temp int) +0:34 Constant: +0:34 12345678 (const int) +0:35 Sequence +0:35 move second child to first child ( temp int) +0:35 'hToBeOrNotToBe' ( temp int) +0:35 Constant: +0:35 -1 (const int) +0:37 Sequence +0:37 move second child to first child ( temp uint) +0:37 'uh0' ( temp uint) +0:37 Constant: +0:37 0 (const uint) +0:38 Sequence +0:38 move second child to first child ( temp uint) +0:38 'uhg' ( temp uint) +0:38 Constant: +0:38 12 (const uint) +0:39 Sequence +0:39 move second child to first child ( temp uint) +0:39 'uh000' ( temp uint) +0:39 Constant: +0:39 0 (const uint) +0:40 Sequence +0:40 move second child to first child ( temp uint) +0:40 'uh1' ( temp uint) +0:40 Constant: +0:40 1 (const uint) +0:41 Sequence +0:41 move second child to first child ( temp uint) +0:41 'uh2' ( temp uint) +0:41 Constant: +0:41 2 (const uint) +0:42 Sequence +0:42 move second child to first child ( temp uint) +0:42 'uh300' ( temp uint) +0:42 Constant: +0:42 768 (const uint) +0:43 Sequence +0:43 move second child to first child ( temp uint) +0:43 'uhABCDEF' ( temp uint) +0:43 Constant: +0:43 11259375 (const uint) +0:44 Sequence +0:44 move second child to first child ( temp uint) +0:44 'uhFFFFFFFF' ( temp uint) +0:44 Constant: +0:44 4294967295 (const uint) +0:45 Sequence +0:45 move second child to first child ( temp uint) +0:45 'uh12345678' ( temp uint) +0:45 Constant: +0:45 12345678 (const uint) +0:46 Sequence +0:46 move second child to first child ( temp uint) +0:46 'uhToBeOrNotToBe' ( temp uint) +0:46 Constant: +0:46 4294967295 (const uint) +0:49 Sequence +0:49 move second child to first child ( temp int) +0:49 'he2' ( temp int) +0:49 Constant: +0:49 0 (const int) +0:50 Sequence +0:50 move second child to first child ( temp int) +0:50 'hbig' ( temp int) +0:50 Constant: +0:50 -1 (const int) +0:52 Sequence +0:52 move second child to first child ( temp float) +0:52 'f1' ( temp float) +0:52 Constant: +0:52 1.000000 +0:53 Sequence +0:53 move second child to first child ( temp float) +0:53 'f2' ( temp float) +0:53 Constant: +0:53 2.000000 +0:54 Sequence +0:54 move second child to first child ( temp float) +0:54 'f3' ( temp float) +0:54 Constant: +0:54 3.000000 +0:55 Sequence +0:55 move second child to first child ( temp float) +0:55 'f4' ( temp float) +0:55 Constant: +0:55 4.000000 +0:56 Sequence +0:56 move second child to first child ( temp float) +0:56 'f5' ( temp float) +0:56 Constant: +0:56 5.000000 +0:57 Sequence +0:57 move second child to first child ( temp float) +0:57 'f6' ( temp float) +0:57 Constant: +0:57 6.000000 +0:58 Sequence +0:58 move second child to first child ( temp float) +0:58 'f7' ( temp float) +0:58 Constant: +0:58 7.000000 +0:59 Sequence +0:59 move second child to first child ( temp float) +0:59 'f8' ( temp float) +0:59 Constant: +0:59 8.000000 +0:60 Sequence +0:60 move second child to first child ( temp float) +0:60 'f9' ( temp float) +0:60 Constant: +0:60 9.000000 +0:61 Sequence +0:61 move second child to first child ( temp float) +0:61 'f10' ( temp float) +0:61 Constant: +0:61 10.000000 +0:62 Sequence +0:62 move second child to first child ( temp float) +0:62 'f11' ( temp float) +0:62 Constant: +0:62 11.000000 +0:63 Sequence +0:63 move second child to first child ( temp float) +0:63 'f12' ( temp float) +0:63 Constant: +0:63 12.000000 +0:64 Sequence +0:64 move second child to first child ( temp float) +0:64 'f543' ( temp float) +0:64 Constant: +0:64 543.000000 +0:65 Sequence +0:65 move second child to first child ( temp float) +0:65 'f6789' ( temp float) +0:65 Constant: +0:65 6789.000000 +0:66 Sequence +0:66 move second child to first child ( temp float) +0:66 'f88' ( temp float) +0:66 Constant: +0:66 88.000000 +0:68 Sequence +0:68 move second child to first child ( temp float) +0:68 'g1' ( temp float) +0:68 Constant: +0:68 53876.000000 +0:69 Sequence +0:69 move second child to first child ( temp float) +0:69 'g2' ( temp float) +0:69 Constant: +0:69 0.040000 +0:70 Sequence +0:70 move second child to first child ( temp float) +0:70 'g3' ( temp float) +0:70 Constant: +0:70 100000.000000 +0:71 Sequence +0:71 move second child to first child ( temp float) +0:71 'g4' ( temp float) +0:71 Constant: +0:71 0.007321 +0:72 Sequence +0:72 move second child to first child ( temp float) +0:72 'g5' ( temp float) +0:72 Constant: +0:72 32000.000000 +0:73 Sequence +0:73 move second child to first child ( temp float) +0:73 'g6' ( temp float) +0:73 Constant: +0:73 0.000005 +0:74 Sequence +0:74 move second child to first child ( temp float) +0:74 'g7' ( temp float) +0:74 Constant: +0:74 0.450000 +0:75 Sequence +0:75 move second child to first child ( temp float) +0:75 'g8' ( temp float) +0:75 Constant: +0:75 60000000000.000000 +0:77 Sequence +0:77 move second child to first child ( temp double) +0:77 'gf1' ( temp double) +0:77 Constant: +0:77 1.000000 +0:78 Sequence +0:78 move second child to first child ( temp double) +0:78 'gf2' ( temp double) +0:78 Constant: +0:78 2.000000 +0:79 Sequence +0:79 move second child to first child ( temp double) +0:79 'gf3' ( temp double) +0:79 Constant: +0:79 3.000000 +0:80 Sequence +0:80 move second child to first child ( temp double) +0:80 'gf4' ( temp double) +0:80 Constant: +0:80 4.000000 +0:81 Sequence +0:81 move second child to first child ( temp float) +0:81 'gf5' ( temp float) +0:81 Constant: +0:81 5.000000 +0:82 Sequence +0:82 move second child to first child ( temp float) +0:82 'gf6' ( temp float) +0:82 Constant: +0:82 6.000000 +0:88 Sequence +0:88 move second child to first child ( temp float) +0:88 'e5' ( temp float) +0:88 Constant: +0:88 5.000000 +0:98 Sequence +0:98 move second child to first child ( temp uint) +0:98 'g1' ( global uint) +0:98 Constant: +0:98 4294967295 (const uint) +0:99 Sequence +0:99 move second child to first child ( temp uint) +0:99 'g2' ( global uint) +0:99 Constant: +0:99 4294967295 (const uint) +0:100 Sequence +0:100 move second child to first child ( temp uint) +0:100 'g3' ( global uint) +0:100 Constant: +0:100 4294967294 (const uint) +0:101 Sequence +0:101 move second child to first child ( temp int) +0:101 'g4' ( global int) +0:101 Constant: +0:101 -1 (const int) +0:102 Sequence +0:102 move second child to first child ( temp int) +0:102 'g5' ( global int) +0:102 Constant: +0:102 -1 (const int) +0:103 Sequence +0:103 move second child to first child ( temp int) +0:103 'g6' ( global int) +0:103 Constant: +0:103 -2 (const int) +0:? Linker Objects +0:? 'c2' (layout( location=2) out 4-component vector of float) +0:? 'c3' (layout( location=3) out 4-component vector of float) +0:? 'c4' (layout( location=4) out 4-component vector of float) +0:? 'c5' (layout( location=5) out 4-component vector of float) +0:? 'c6' (layout( location=6) out 4-component vector of float) +0:? 'c7' (layout( location=7) out 4-component vector of float) +0:? 'g1' ( global uint) +0:? 'g2' ( global uint) +0:? 'g3' ( global uint) +0:? 'g4' ( global int) +0:? 'g5' ( global int) +0:? 'g6' ( global int) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/pointCoord.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/pointCoord.frag.out new file mode 100644 index 0000000..f55f9bc --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/pointCoord.frag.out @@ -0,0 +1,69 @@ +pointCoord.frag +Shader version: 100 +0:? Sequence +0:5 Function Definition: main( ( global void) +0:5 Function Parameters: +0:? Sequence +0:9 Test condition and select ( temp void) +0:9 Condition +0:9 Compare Less Than ( temp bool) +0:9 length ( global mediump float) +0:9 'gl_PointCoord' ( gl_PointCoord mediump 2-component vector of float PointCoord) +0:9 Constant: +0:9 0.300000 +0:9 true case +0:10 move second child to first child ( temp highp 4-component vector of float) +0:10 'color' ( temp highp 4-component vector of float) +0:10 texture ( global lowp 4-component vector of float, operation at mediump) +0:10 'sampler' ( uniform lowp sampler2D) +0:10 'gl_PointCoord' ( gl_PointCoord mediump 2-component vector of float PointCoord) +0:9 false case +0:12 move second child to first child ( temp highp 4-component vector of float) +0:12 'color' ( temp highp 4-component vector of float) +0:12 Constant: +0:12 0.000000 +0:12 0.000000 +0:12 0.000000 +0:12 0.000000 +0:14 move second child to first child ( temp highp 4-component vector of float) +0:14 'gl_FragColor' ( fragColor mediump 4-component vector of float FragColor) +0:14 'color' ( temp highp 4-component vector of float) +0:? Linker Objects +0:? 'sampler' ( uniform lowp sampler2D) + + +Linked fragment stage: + + +Shader version: 100 +0:? Sequence +0:5 Function Definition: main( ( global void) +0:5 Function Parameters: +0:? Sequence +0:9 Test condition and select ( temp void) +0:9 Condition +0:9 Compare Less Than ( temp bool) +0:9 length ( global mediump float) +0:9 'gl_PointCoord' ( gl_PointCoord mediump 2-component vector of float PointCoord) +0:9 Constant: +0:9 0.300000 +0:9 true case +0:10 move second child to first child ( temp highp 4-component vector of float) +0:10 'color' ( temp highp 4-component vector of float) +0:10 texture ( global lowp 4-component vector of float, operation at mediump) +0:10 'sampler' ( uniform lowp sampler2D) +0:10 'gl_PointCoord' ( gl_PointCoord mediump 2-component vector of float PointCoord) +0:9 false case +0:12 move second child to first child ( temp highp 4-component vector of float) +0:12 'color' ( temp highp 4-component vector of float) +0:12 Constant: +0:12 0.000000 +0:12 0.000000 +0:12 0.000000 +0:12 0.000000 +0:14 move second child to first child ( temp highp 4-component vector of float) +0:14 'gl_FragColor' ( fragColor mediump 4-component vector of float FragColor) +0:14 'color' ( temp highp 4-component vector of float) +0:? Linker Objects +0:? 'sampler' ( uniform lowp sampler2D) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/precise.tesc.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/precise.tesc.out new file mode 100644 index 0000000..7beff89 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/precise.tesc.out @@ -0,0 +1,398 @@ +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 +Requested GL_EXT_tessellation_shader +vertices = -1 +0:? Sequence +0:5 Function Definition: minimal( ( global float) +0:5 Function Parameters: +0:6 Sequence +0:6 Sequence +0:6 move second child to first child ( temp float) +0:6 'result' ( noContraction temp float) +0:6 Constant: +0:6 5.000000 +0:7 Sequence +0:7 move second child to first child ( temp float) +0:7 'a' ( noContraction temp float) +0:7 Constant: +0:7 10.000000 +0:8 Sequence +0:8 move second child to first child ( temp float) +0:8 'b' ( noContraction temp float) +0:8 Constant: +0:8 20.000000 +0:9 Sequence +0:9 move second child to first child ( temp float) +0:9 'c' ( noContraction temp float) +0:9 Constant: +0:9 30.000000 +0:10 Sequence +0:10 move second child to first child ( temp float) +0:10 'd' ( noContraction temp float) +0:10 Constant: +0:10 40.000000 +0:11 move second child to first child ( temp float) +0:11 'result' ( noContraction temp float) +0:11 add ( noContraction temp float) +0:11 component-wise multiply ( noContraction temp float) +0:11 'a' ( noContraction temp float) +0:11 'b' ( noContraction temp float) +0:11 component-wise multiply ( noContraction temp float) +0:11 'c' ( noContraction temp float) +0:11 'd' ( noContraction temp float) +0:12 Branch: Return with expression +0:12 'result' ( noContraction temp float) +0:15 Function Definition: continuous_assignment( ( global void) +0:15 Function Parameters: +0:16 Sequence +0:16 Sequence +0:16 move second child to first child ( temp float) +0:16 'result' ( noContraction temp float) +0:16 Constant: +0:16 5.000000 +0:17 Sequence +0:17 move second child to first child ( temp float) +0:17 'a' ( noContraction temp float) +0:17 Constant: +0:17 10.000000 +0:18 Sequence +0:18 move second child to first child ( temp float) +0:18 'b' ( noContraction temp float) +0:18 Constant: +0:18 20.000000 +0:19 move second child to first child ( temp float) +0:19 'result' ( noContraction temp float) +0:19 move second child to first child ( temp float) +0:19 'a' ( noContraction temp float) +0:19 add ( noContraction temp float) +0:19 'b' ( noContraction temp float) +0:19 Constant: +0:19 4.000000 +0:22 Function Definition: convert( ( global void) +0:22 Function Parameters: +0:? Sequence +0:24 Sequence +0:24 move second child to first child ( temp float) +0:24 'a' ( noContraction temp float) +0:24 Constant: +0:24 10.000000 +0:25 Sequence +0:25 move second child to first child ( temp float) +0:25 'b' ( noContraction temp float) +0:25 Constant: +0:25 20.000000 +0:26 move second child to first child ( temp float) +0:26 'b' ( noContraction temp float) +0:26 add ( noContraction temp float) +0:26 'a' ( noContraction temp float) +0:26 'b' ( noContraction temp float) +0:27 move second child to first child ( temp double) +0:27 'result' ( noContraction temp double) +0:27 Convert float to double ( temp double) +0:27 'b' ( noContraction temp float) +0:30 Function Definition: loop_for( ( global float) +0:30 Function Parameters: +0:31 Sequence +0:31 Sequence +0:31 move second child to first child ( temp float) +0:31 'r1' ( noContraction temp float) +0:31 Constant: +0:31 5.000000 +0:32 Sequence +0:32 move second child to first child ( temp float) +0:32 'r2' ( noContraction temp float) +0:32 Constant: +0:32 10.000000 +0:33 Sequence +0:33 move second child to first child ( temp int) +0:33 'a' ( temp int) +0:33 Constant: +0:33 10 (const int) +0:34 Sequence +0:34 move second child to first child ( temp int) +0:34 'b' ( noContraction temp int) +0:34 Constant: +0:34 20 (const int) +0:35 Sequence +0:35 move second child to first child ( temp int) +0:35 'c' ( noContraction temp int) +0:35 Constant: +0:35 30 (const int) +0:36 Sequence +0:36 Sequence +0:36 move second child to first child ( temp int) +0:36 'i' ( noContraction temp int) +0:36 Constant: +0:36 0 (const int) +0:36 Loop with condition tested first +0:36 Loop Condition +0:36 Compare Less Than ( temp bool) +0:36 'i' ( temp int) +0:36 'a' ( temp int) +0:36 Loop Body +0:37 Sequence +0:37 add second child into first child ( noContraction temp float) +0:37 'r1' ( noContraction temp float) +0:37 add ( noContraction temp float) +0:37 add ( noContraction temp float) +0:37 Constant: +0:37 3.120000 +0:37 Convert int to float ( temp float) +0:37 'b' ( noContraction temp int) +0:37 Convert int to float ( temp float) +0:37 'i' ( noContraction temp int) +0:38 add second child into first child ( noContraction temp int) +0:38 'c' ( noContraction temp int) +0:38 Constant: +0:38 1 (const int) +0:36 Loop Terminal Expression +0:36 Post-Increment ( noContraction temp int) +0:36 'i' ( noContraction temp int) +0:40 add second child into first child ( temp int) +0:40 'a' ( temp int) +0:40 Constant: +0:40 1 (const int) +0:41 move second child to first child ( temp float) +0:41 'r2' ( noContraction temp float) +0:41 Convert int to float ( temp float) +0:41 'c' ( noContraction temp int) +0:42 Branch: Return with expression +0:42 Construct float ( temp float) +0:42 add ( temp float) +0:42 'r1' ( noContraction temp float) +0:42 'r2' ( noContraction temp float) +0:45 Function Definition: loop_array( ( global void) +0:45 Function Parameters: +0:? Sequence +0:48 Sequence +0:48 move second child to first child ( temp int) +0:48 'x' ( noContraction temp int) +0:48 Constant: +0:48 22 (const int) +0:49 Sequence +0:49 move second child to first child ( temp int) +0:49 'y' ( noContraction temp int) +0:49 Constant: +0:49 33 (const int) +0:52 add second child into first child ( noContraction temp float) +0:52 'result' ( noContraction temp float) +0:52 add ( noContraction temp float) +0:52 Convert int to float ( temp float) +0:52 'x' ( noContraction temp int) +0:52 Convert int to float ( temp float) +0:52 'y' ( noContraction temp int) +0:54 Sequence +0:54 Sequence +0:54 move second child to first child ( temp int) +0:54 'i' ( temp int) +0:54 Constant: +0:54 0 (const int) +0:54 Loop with condition tested first +0:54 Loop Condition +0:54 Compare Less Than ( temp bool) +0:54 'i' ( temp int) +0:54 Constant: +0:54 3 (const int) +0:54 Loop Body +0:56 Sequence +0:56 add second child into first child ( noContraction temp float) +0:56 'result' ( noContraction temp float) +0:56 add ( noContraction temp float) +0:56 indirect index ( noContraction temp float) +0:56 'a0' ( temp 3-element array of float) +0:56 'i' ( temp int) +0:56 Constant: +0:56 2.000000 +0:58 move second child to first child ( temp float) +0:58 indirect index ( noContraction temp float) +0:58 'a0' ( noContraction temp 3-element array of float) +0:58 'i' ( temp int) +0:58 subtract ( noContraction temp float) +0:58 Constant: +0:58 3.000000 +0:58 Post-Increment ( noContraction temp float) +0:58 'result' ( noContraction temp float) +0:54 Loop Terminal Expression +0:54 Pre-Increment ( temp int) +0:54 'i' ( temp int) +0:62 Function Definition: loop_while( ( global void) +0:62 Function Parameters: +0:63 Sequence +0:63 Sequence +0:63 move second child to first child ( temp float) +0:63 'result' ( noContraction temp float) +0:63 Constant: +0:63 5.000000 +0:64 Sequence +0:64 move second child to first child ( temp int) +0:64 'a' ( noContraction temp int) +0:64 Constant: +0:64 10 (const int) +0:65 Sequence +0:65 move second child to first child ( temp int) +0:65 'b' ( noContraction temp int) +0:65 Constant: +0:65 20 (const int) +0:66 Loop with condition tested first +0:66 Loop Condition +0:66 Compare Less Than ( temp bool) +0:66 'result' ( noContraction temp float) +0:66 Constant: +0:66 10.000000 +0:66 Loop Body +0:67 Sequence +0:67 add second child into first child ( noContraction temp float) +0:67 'result' ( noContraction temp float) +0:67 add ( noContraction temp float) +0:67 Constant: +0:67 3.120000 +0:67 Convert int to float ( temp float) +0:67 'b' ( noContraction temp int) +0:69 move second child to first child ( temp float) +0:69 'result' ( noContraction temp float) +0:69 Convert int to float ( temp float) +0:69 add ( temp int) +0:69 add ( temp int) +0:69 'a' ( noContraction temp int) +0:69 'b' ( noContraction temp int) +0:69 Constant: +0:69 5 (const int) +0:70 move second child to first child ( temp float) +0:70 'result' ( noContraction temp float) +0:70 Constant: +0:70 11.100000 +0:73 Function Definition: fma_not_decorated( ( global float) +0:73 Function Parameters: +0:? Sequence +0:75 Sequence +0:75 move second child to first child ( temp float) +0:75 'a' ( noContraction temp float) +0:75 Constant: +0:75 1.000000 +0:76 Sequence +0:76 move second child to first child ( temp float) +0:76 'b' ( noContraction temp float) +0:76 Constant: +0:76 2.000000 +0:77 Sequence +0:77 move second child to first child ( temp float) +0:77 'c' ( noContraction temp float) +0:77 Constant: +0:77 3.000000 +0:78 move second child to first child ( temp float) +0:78 'b' ( noContraction temp float) +0:78 add ( noContraction temp float) +0:78 'b' ( noContraction temp float) +0:78 'c' ( noContraction temp float) +0:79 move second child to first child ( temp float) +0:79 'result' ( noContraction temp float) +0:79 fma ( global float) +0:79 'a' ( noContraction temp float) +0:79 'b' ( noContraction temp float) +0:79 'c' ( noContraction temp float) +0:80 Branch: Return with expression +0:80 'result' ( noContraction temp float) +0:83 Function Definition: precise_return_exp_func( ( noContraction temp float) +0:83 Function Parameters: +0:84 Sequence +0:84 Sequence +0:84 move second child to first child ( temp float) +0:84 'a' ( noContraction temp float) +0:84 Constant: +0:84 1.000000 +0:85 Sequence +0:85 move second child to first child ( temp float) +0:85 'b' ( noContraction temp float) +0:85 Constant: +0:85 2.000000 +0:86 Branch: Return with expression +0:86 add ( noContraction temp float) +0:86 'a' ( noContraction temp float) +0:86 'b' ( noContraction temp float) +0:89 Function Definition: precise_return_val_func( ( noContraction temp float) +0:89 Function Parameters: +0:90 Sequence +0:90 Sequence +0:90 move second child to first child ( temp float) +0:90 'a' ( noContraction temp float) +0:90 Constant: +0:90 1.000000 +0:91 Sequence +0:91 move second child to first child ( temp float) +0:91 'b' ( noContraction temp float) +0:91 Constant: +0:91 2.000000 +0:92 Sequence +0:92 move second child to first child ( temp float) +0:92 'result' ( noContraction temp float) +0:92 add ( noContraction temp float) +0:92 'a' ( noContraction temp float) +0:92 'b' ( noContraction temp float) +0:93 Branch: Return with expression +0:93 'result' ( noContraction temp float) +0:96 Function Definition: precise_func_parameter(f1;f1; ( global float) +0:96 Function Parameters: +0:96 'b' ( in float) +0:96 'c' ( noContraction out float) +0:97 Sequence +0:97 Sequence +0:97 move second child to first child ( temp float) +0:97 'a' ( noContraction temp float) +0:97 Constant: +0:97 0.500000 +0:98 move second child to first child ( temp float) +0:98 'c' ( noContraction out float) +0:98 add ( noContraction temp float) +0:98 'a' ( noContraction temp float) +0:98 'b' ( noContraction in float) +0:99 Branch: Return with expression +0:99 subtract ( temp float) +0:99 'a' ( temp float) +0:99 'b' ( in float) +0:102 Function Definition: matrix(mf23;mf32; ( global 3X3 matrix of float) +0:102 Function Parameters: +0:102 'a' ( in 2X3 matrix of float) +0:102 'b' ( in 3X2 matrix of float) +0:103 Sequence +0:103 Sequence +0:103 move second child to first child ( temp 2X3 matrix of float) +0:103 'c' ( noContraction temp 2X3 matrix of float) +0:103 Constant: +0:103 1.000000 +0:103 2.000000 +0:103 3.000000 +0:103 4.000000 +0:103 5.000000 +0:103 6.000000 +0:105 move second child to first child ( temp 3X3 matrix of float) +0:105 'result' ( noContraction temp 3X3 matrix of float) +0:105 matrix-multiply ( noContraction temp 3X3 matrix of float) +0:105 add ( noContraction temp 2X3 matrix of float) +0:105 'a' ( noContraction in 2X3 matrix of float) +0:105 'c' ( noContraction temp 2X3 matrix of float) +0:105 'b' ( noContraction in 3X2 matrix of float) +0:106 Branch: Return with expression +0:106 'result' ( noContraction temp 3X3 matrix of float) +0:109 Function Definition: main( ( global void) +0:109 Function Parameters: +0:? Linker Objects + + +Linked tessellation control stage: + +ERROR: Linking tessellation control stage: At least one shader must specify an output layout(vertices=...) + +Shader version: 450 +Requested GL_EXT_gpu_shader5 +Requested GL_EXT_shader_io_blocks +Requested GL_EXT_tessellation_shader +vertices = -1 +0:? Sequence +0:109 Function Definition: main( ( global void) +0:109 Function Parameters: +0:? Linker Objects + 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 new file mode 100644 index 0000000..638bd1b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/precise_struct_block.vert.out @@ -0,0 +1,536 @@ +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) +0:11 Function Parameters: +0:12 Sequence +0:12 Sequence +0:12 move second child to first child ( temp float) +0:12 'a' ( noContraction temp float) +0:12 Constant: +0:12 1.000000 +0:13 Sequence +0:13 move second child to first child ( temp float) +0:13 'b' ( temp float) +0:13 Constant: +0:13 2.000000 +0:14 Sequence +0:14 move second child to first child ( temp float) +0:14 'c' ( temp float) +0:14 Constant: +0:14 3.000000 +0:15 Sequence +0:15 move second child to first child ( temp float) +0:15 'd' ( temp float) +0:15 Constant: +0:15 4.000000 +0:21 move second child to first child ( temp float) +0:21 f1: direct index for structure ( noContraction global float) +0:21 'S2' ( temp structure{ global float f1, global float f2}) +0:21 Constant: +0:21 0 (const int) +0:21 add ( noContraction temp float) +0:21 'a' ( noContraction temp float) +0:21 Constant: +0:21 0.200000 +0:22 move second child to first child ( temp float) +0:22 f2: direct index for structure ( global float) +0:22 'S2' ( temp structure{ global float f1, global float f2}) +0:22 Constant: +0:22 1 (const int) +0:22 add ( temp float) +0:22 'b' ( temp float) +0:22 Constant: +0:22 0.200000 +0:23 move second child to first child ( temp float) +0:23 f1: direct index for structure ( global float) +0:23 'S3' ( temp structure{ global float f1, global float f2}) +0:23 Constant: +0:23 0 (const int) +0:23 add ( temp float) +0:23 'a' ( temp float) +0:23 'b' ( temp float) +0:24 move second child to first child ( temp structure{ global float f1, global float f2}) +0:24 'S' ( temp structure{ global float f1, global float f2}) +0:24 'S2' ( temp structure{ global float f1, global float f2}) +0:25 move second child to first child ( temp float) +0:25 'result' ( noContraction temp float) +0:25 add ( noContraction temp float) +0:25 f1: direct index for structure ( noContraction global float) +0:25 'S' ( temp structure{ global float f1, global float f2}) +0:25 Constant: +0:25 0 (const int) +0:25 Constant: +0:25 0.100000 +0:27 Branch: Return with expression +0:27 'result' ( noContraction temp float) +0:30 Function Definition: complex_array_struct( ( global float) +0:30 Function Parameters: +0:? Sequence +0:43 Sequence +0:43 Sequence +0:43 move second child to first child ( temp int) +0:43 'i' ( noContraction temp int) +0:43 Constant: +0:43 0 (const int) +0:43 Loop with condition tested first +0:43 Loop Condition +0:43 Compare Less Than ( temp bool) +0:43 'i' ( temp int) +0:43 Constant: +0:43 10 (const int) +0:43 Loop Body +0:44 Sequence +0:44 move second child to first child ( temp float) +0:44 f: direct index for structure ( temp float) +0:44 indirect index ( temp structure{ temp float f, temp structure{ temp 5-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p}) +0:44 't3' ( temp 10-element array of structure{ temp float f, temp structure{ temp 5-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p}) +0:44 'i' ( temp int) +0:44 Constant: +0:44 0 (const int) +0:44 divide ( temp float) +0:44 Convert int to float ( temp float) +0:44 'i' ( temp int) +0:44 Constant: +0:44 3.000000 +0:45 move second child to first child ( temp 4-component vector of float) +0:45 v: direct index for structure ( noContraction temp 4-component vector of float) +0:45 indirect index ( temp structure{ temp float f, temp structure{ temp 5-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p}) +0:45 't3' ( temp 10-element array of structure{ temp float f, temp structure{ temp 5-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p}) +0:45 'i' ( temp int) +0:45 Constant: +0:45 2 (const int) +0:45 Construct vec4 ( temp 4-component vector of float) +0:45 component-wise multiply ( noContraction temp float) +0:45 Convert int to float ( temp float) +0:45 'i' ( noContraction temp int) +0:45 Constant: +0:45 1.500000 +0:46 move second child to first child ( temp int) +0:46 p: direct index for structure ( temp int) +0:46 indirect index ( temp structure{ temp float f, temp structure{ temp 5-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p}) +0:46 't3' ( temp 10-element array of structure{ temp float f, temp structure{ temp 5-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p}) +0:46 'i' ( temp int) +0:46 Constant: +0:46 3 (const int) +0:46 add ( temp int) +0:46 'i' ( temp int) +0:46 Constant: +0:46 1 (const int) +0:47 Sequence +0:47 Sequence +0:47 move second child to first child ( temp int) +0:47 'j' ( temp int) +0:47 Constant: +0:47 0 (const int) +0:47 Loop with condition tested first +0:47 Loop Condition +0:47 Compare Less Than ( temp bool) +0:47 'j' ( temp int) +0:47 Constant: +0:47 5 (const int) +0:47 Loop Body +0:48 Sequence +0:48 Sequence +0:48 Sequence +0:48 move second child to first child ( temp int) +0:48 'k' ( temp int) +0:48 Constant: +0:48 0 (const int) +0:48 Loop with condition tested first +0:48 Loop Condition +0:48 Compare Less Than ( temp bool) +0:48 'k' ( temp int) +0:48 Constant: +0:48 3 (const int) +0:48 Loop Body +0:49 Sequence +0:49 move second child to first child ( temp float) +0:49 indirect index ( temp float) +0:49 t1_array: direct index for structure ( temp 3-element array of float) +0:49 indirect index ( temp structure{ temp 3-element array of float t1_array, temp float t1_scalar}) +0:49 t1a: direct index for structure ( temp 5-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar}) +0:49 t2: direct index for structure ( temp structure{ temp 5-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1c}) +0:49 indirect index ( temp structure{ temp float f, temp structure{ temp 5-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p}) +0:49 't3' ( temp 10-element array of structure{ temp float f, temp structure{ temp 5-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p}) +0:49 'i' ( temp int) +0:49 Constant: +0:49 1 (const int) +0:49 Constant: +0:49 0 (const int) +0:49 'j' ( temp int) +0:49 Constant: +0:49 0 (const int) +0:49 'k' ( temp int) +0:49 Convert int to float ( temp float) +0:49 add ( temp int) +0:49 component-wise multiply ( temp int) +0:49 'i' ( temp int) +0:49 'j' ( temp int) +0:49 'k' ( temp int) +0:48 Loop Terminal Expression +0:48 Post-Increment ( temp int) +0:48 'k' ( temp int) +0:51 move second child to first child ( temp float) +0:51 t1_scalar: direct index for structure ( temp float) +0:51 indirect index ( temp structure{ temp 3-element array of float t1_array, temp float t1_scalar}) +0:51 t1a: direct index for structure ( temp 5-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar}) +0:51 t2: direct index for structure ( temp structure{ temp 5-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1c}) +0:51 indirect index ( temp structure{ temp float f, temp structure{ temp 5-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p}) +0:51 't3' ( temp 10-element array of structure{ temp float f, temp structure{ temp 5-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p}) +0:51 'i' ( temp int) +0:51 Constant: +0:51 1 (const int) +0:51 Constant: +0:51 0 (const int) +0:51 'j' ( temp int) +0:51 Constant: +0:51 1 (const int) +0:51 divide ( temp float) +0:51 component-wise multiply ( temp float) +0:51 Convert int to float ( temp float) +0:51 'j' ( temp int) +0:51 Constant: +0:51 2.000000 +0:51 Convert int to float ( temp float) +0:51 'i' ( temp int) +0:47 Loop Terminal Expression +0:47 Post-Increment ( temp int) +0:47 'j' ( temp int) +0:54 Sequence +0:54 Sequence +0:54 move second child to first child ( temp int) +0:54 'j' ( noContraction temp int) +0:54 Constant: +0:54 0 (const int) +0:54 Loop with condition tested first +0:54 Loop Condition +0:54 Compare Less Than ( temp bool) +0:54 'j' ( temp int) +0:54 Constant: +0:54 6 (const int) +0:54 Loop Body +0:55 Sequence +0:55 Sequence +0:55 Sequence +0:55 move second child to first child ( temp int) +0:55 'k' ( temp int) +0:55 Constant: +0:55 0 (const int) +0:55 Loop with condition tested first +0:55 Loop Condition +0:55 Compare Less Than ( temp bool) +0:55 'k' ( temp int) +0:55 Constant: +0:55 3 (const int) +0:55 Loop Body +0:56 Sequence +0:56 move second child to first child ( temp float) +0:56 indirect index ( temp float) +0:56 t1_array: direct index for structure ( temp 3-element array of float) +0:56 indirect index ( temp structure{ temp 3-element array of float t1_array, temp float t1_scalar}) +0:56 t1b: direct index for structure ( temp 6-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar}) +0:56 t2: direct index for structure ( temp structure{ temp 5-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1c}) +0:56 indirect index ( temp structure{ temp float f, temp structure{ temp 5-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p}) +0:56 't3' ( temp 10-element array of structure{ temp float f, temp structure{ temp 5-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p}) +0:56 'i' ( temp int) +0:56 Constant: +0:56 1 (const int) +0:56 Constant: +0:56 1 (const int) +0:56 'j' ( temp int) +0:56 Constant: +0:56 0 (const int) +0:56 'k' ( temp int) +0:56 Convert int to float ( temp float) +0:56 add ( temp int) +0:56 component-wise multiply ( temp int) +0:56 'i' ( temp int) +0:56 'j' ( temp int) +0:56 'k' ( temp int) +0:55 Loop Terminal Expression +0:55 Post-Increment ( temp int) +0:55 'k' ( temp int) +0:58 move second child to first child ( temp float) +0:58 t1_scalar: direct index for structure ( noContraction temp float) +0:58 indirect index ( temp structure{ temp 3-element array of float t1_array, temp float t1_scalar}) +0:58 t1b: direct index for structure ( temp 6-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar}) +0:58 t2: direct index for structure ( temp structure{ temp 5-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1c}) +0:58 indirect index ( temp structure{ temp float f, temp structure{ temp 5-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p}) +0:58 't3' ( temp 10-element array of structure{ temp float f, temp structure{ temp 5-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p}) +0:58 'i' ( temp int) +0:58 Constant: +0:58 1 (const int) +0:58 Constant: +0:58 1 (const int) +0:58 'j' ( temp int) +0:58 Constant: +0:58 1 (const int) +0:58 divide ( noContraction temp float) +0:58 component-wise multiply ( noContraction temp float) +0:58 Convert int to float ( temp float) +0:58 'j' ( noContraction temp int) +0:58 Constant: +0:58 2.000000 +0:58 Convert int to float ( temp float) +0:58 'i' ( noContraction temp int) +0:54 Loop Terminal Expression +0:54 Post-Increment ( noContraction temp int) +0:54 'j' ( noContraction temp int) +0:61 Sequence +0:61 Sequence +0:61 move second child to first child ( temp int) +0:61 'j' ( noContraction temp int) +0:61 Constant: +0:61 0 (const int) +0:61 Loop with condition tested first +0:61 Loop Condition +0:61 Compare Less Than ( temp bool) +0:61 'j' ( temp int) +0:61 Constant: +0:61 6 (const int) +0:61 Loop Body +0:62 Sequence +0:62 Sequence +0:62 Sequence +0:62 move second child to first child ( temp int) +0:62 'k' ( noContraction temp int) +0:62 Constant: +0:62 0 (const int) +0:62 Loop with condition tested first +0:62 Loop Condition +0:62 Compare Less Than ( temp bool) +0:62 'k' ( temp int) +0:62 Constant: +0:62 3 (const int) +0:62 Loop Body +0:63 Sequence +0:63 move second child to first child ( temp float) +0:63 indirect index ( noContraction temp float) +0:63 t1_array: direct index for structure ( noContraction temp 3-element array of float) +0:63 indirect index ( temp structure{ temp 3-element array of float t1_array, temp float t1_scalar}) +0:63 t1c: direct index for structure ( temp 7-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar}) +0:63 t2: direct index for structure ( temp structure{ temp 5-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1c}) +0:63 indirect index ( temp structure{ temp float f, temp structure{ temp 5-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p}) +0:63 't3' ( temp 10-element array of structure{ temp float f, temp structure{ temp 5-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p}) +0:63 'i' ( temp int) +0:63 Constant: +0:63 1 (const int) +0:63 Constant: +0:63 2 (const int) +0:63 'j' ( temp int) +0:63 Constant: +0:63 0 (const int) +0:63 'k' ( temp int) +0:63 Convert int to float ( temp float) +0:63 add ( temp int) +0:63 component-wise multiply ( temp int) +0:63 'i' ( noContraction temp int) +0:63 'j' ( noContraction temp int) +0:63 'k' ( noContraction temp int) +0:62 Loop Terminal Expression +0:62 Post-Increment ( noContraction temp int) +0:62 'k' ( noContraction temp int) +0:65 move second child to first child ( temp float) +0:65 t1_scalar: direct index for structure ( temp float) +0:65 indirect index ( temp structure{ temp 3-element array of float t1_array, temp float t1_scalar}) +0:65 t1c: direct index for structure ( temp 7-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar}) +0:65 t2: direct index for structure ( temp structure{ temp 5-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1c}) +0:65 indirect index ( temp structure{ temp float f, temp structure{ temp 5-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p}) +0:65 't3' ( temp 10-element array of structure{ temp float f, temp structure{ temp 5-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p}) +0:65 'i' ( temp int) +0:65 Constant: +0:65 1 (const int) +0:65 Constant: +0:65 2 (const int) +0:65 'j' ( temp int) +0:65 Constant: +0:65 1 (const int) +0:65 divide ( temp float) +0:65 component-wise multiply ( temp float) +0:65 Convert int to float ( temp float) +0:65 'j' ( temp int) +0:65 Constant: +0:65 2.000000 +0:65 Convert int to float ( temp float) +0:65 'i' ( temp int) +0:61 Loop Terminal Expression +0:61 Post-Increment ( noContraction temp int) +0:61 'j' ( noContraction temp int) +0:43 Loop Terminal Expression +0:43 Post-Increment ( noContraction temp int) +0:43 'i' ( noContraction temp int) +0:68 Sequence +0:68 move second child to first child ( temp int) +0:68 'i' ( temp int) +0:68 Constant: +0:68 2 (const int) +0:69 move second child to first child ( temp float) +0:69 'result' ( noContraction temp float) +0:71 add ( noContraction temp float) +0:70 add ( noContraction temp float) +0:69 direct index ( noContraction temp float) +0:69 t1_array: direct index for structure ( temp 3-element array of float) +0:69 direct index ( temp structure{ temp 3-element array of float t1_array, temp float t1_scalar}) +0:69 t1c: direct index for structure ( temp 7-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar}) +0:69 t2: direct index for structure ( temp structure{ temp 5-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1c}) +0:69 direct index ( temp structure{ temp float f, temp structure{ temp 5-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p}) +0:69 't3' ( temp 10-element array of structure{ temp float f, temp structure{ temp 5-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p}) +0:69 Constant: +0:69 5 (const int) +0:69 Constant: +0:69 1 (const int) +0:69 Constant: +0:69 2 (const int) +0:69 Constant: +0:69 6 (const int) +0:69 Constant: +0:69 0 (const int) +0:69 Constant: +0:69 1 (const int) +0:70 t1_scalar: direct index for structure ( noContraction temp float) +0:70 direct index ( temp structure{ temp 3-element array of float t1_array, temp float t1_scalar}) +0:70 t1b: direct index for structure ( temp 6-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar}) +0:70 t2: direct index for structure ( temp structure{ temp 5-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1c}) +0:70 direct index ( temp structure{ temp float f, temp structure{ temp 5-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p}) +0:70 't3' ( temp 10-element array of structure{ temp float f, temp structure{ temp 5-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p}) +0:70 Constant: +0:70 2 (const int) +0:70 Constant: +0:70 1 (const int) +0:70 Constant: +0:70 1 (const int) +0:70 Constant: +0:70 1 (const int) +0:70 Constant: +0:70 1 (const int) +0:71 direct index ( noContraction temp float) +0:71 vector swizzle ( temp 2-component vector of float) +0:71 v: direct index for structure ( temp 4-component vector of float) +0:71 indirect index ( temp structure{ temp float f, temp structure{ temp 5-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p}) +0:71 't3' ( temp 10-element array of structure{ temp float f, temp structure{ temp 5-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{ temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p}) +0:71 subtract ( temp int) +0:71 'i' ( temp int) +0:71 Constant: +0:71 1 (const int) +0:71 Constant: +0:71 2 (const int) +0:71 Sequence +0:71 Constant: +0:71 0 (const int) +0:71 Constant: +0:71 1 (const int) +0:71 Constant: +0:71 0 (const int) +0:72 Branch: Return with expression +0:72 'result' ( noContraction temp float) +0:75 Function Definition: out_block( ( global float) +0:75 Function Parameters: +0:76 Sequence +0:76 Sequence +0:76 move second child to first child ( temp float) +0:76 'a' ( noContraction temp float) +0:76 Constant: +0:76 0.100000 +0:77 Sequence +0:77 move second child to first child ( temp float) +0:77 'b' ( noContraction temp float) +0:77 Constant: +0:77 0.200000 +0:78 move second child to first child ( temp float) +0:78 f1: direct index for structure ( noContraction global float) +0:78 s: direct index for structure ( noContraction out structure{ global float f1, global float f2}) +0:78 'partial_precise_block' ( out block{ noContraction out structure{ global float f1, global float f2} s, out float x}) +0:78 Constant: +0:78 0 (const int) +0:78 Constant: +0:78 0 (const int) +0:78 add ( noContraction temp float) +0:78 'a' ( noContraction temp float) +0:78 'b' ( noContraction temp float) +0:79 move second child to first child ( temp float) +0:79 f2: direct index for structure ( noContraction global float) +0:79 s: direct index for structure ( noContraction out structure{ global float f1, global float f2}) +0:79 'partial_precise_block' ( out block{ noContraction out structure{ global float f1, global float f2} s, out float x}) +0:79 Constant: +0:79 0 (const int) +0:79 Constant: +0:79 1 (const int) +0:79 subtract ( noContraction temp float) +0:79 'a' ( noContraction temp float) +0:79 'b' ( noContraction temp float) +0:80 move second child to first child ( temp float) +0:80 x: direct index for structure ( out float) +0:80 'partial_precise_block' ( out block{ noContraction out structure{ global float f1, global float f2} s, out float x}) +0:80 Constant: +0:80 1 (const int) +0:80 component-wise multiply ( temp float) +0:80 'a' ( temp float) +0:80 'b' ( temp float) +0:82 move second child to first child ( temp float) +0:82 f1: direct index for structure ( noContraction global float) +0:82 s: direct index for structure ( noContraction out structure{ global float f1, global float f2}) +0:82 'all_precise_block' ( noContraction out block{ out structure{ global float f1, global float f2} s, out float x}) +0:82 Constant: +0:82 0 (const int) +0:82 Constant: +0:82 0 (const int) +0:82 add ( noContraction temp float) +0:82 add ( noContraction temp float) +0:82 'a' ( noContraction temp float) +0:82 'b' ( noContraction temp float) +0:82 Constant: +0:82 1.000000 +0:83 move second child to first child ( temp float) +0:83 f2: direct index for structure ( noContraction global float) +0:83 s: direct index for structure ( noContraction out structure{ global float f1, global float f2}) +0:83 'all_precise_block' ( noContraction out block{ out structure{ global float f1, global float f2} s, out float x}) +0:83 Constant: +0:83 0 (const int) +0:83 Constant: +0:83 1 (const int) +0:83 subtract ( noContraction temp float) +0:83 subtract ( noContraction temp float) +0:83 'a' ( noContraction temp float) +0:83 'b' ( noContraction temp float) +0:83 Constant: +0:83 1.000000 +0:84 move second child to first child ( temp float) +0:84 x: direct index for structure ( noContraction out float) +0:84 'all_precise_block' ( noContraction out block{ out structure{ global float f1, global float f2} s, out float x}) +0:84 Constant: +0:84 1 (const int) +0:84 component-wise multiply ( noContraction temp float) +0:84 component-wise multiply ( noContraction temp float) +0:84 'a' ( noContraction temp float) +0:84 'b' ( noContraction temp float) +0:84 Constant: +0:84 2.000000 +0:86 Branch: Return with expression +0:86 add ( temp float) +0:86 'a' ( temp float) +0:86 'b' ( temp float) +0:89 Function Definition: main( ( global void) +0:89 Function Parameters: +0:? Linker Objects +0:? 'partial_precise_block' ( out block{ noContraction out structure{ global float f1, global float f2} s, out float x}) +0:? 'all_precise_block' ( noContraction out block{ out structure{ global float f1, global float f2} s, out float x}) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + + +Linked vertex stage: + + +Shader version: 450 +0:? Sequence +0:89 Function Definition: main( ( global void) +0:89 Function Parameters: +0:? Linker Objects +0:? 'partial_precise_block' ( out block{ noContraction out structure{ global float f1, global float f2} s, out float x}) +0:? 'all_precise_block' ( noContraction out block{ out structure{ global float f1, global float f2} s, out float x}) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/precision.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/precision.frag.out new file mode 100644 index 0000000..7174049 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/precision.frag.out @@ -0,0 +1,233 @@ +precision.frag +ERROR: 0:3: 'float' : type requires declaration of default precision qualifier +ERROR: 0:18: 'int' : cannot apply precision statement to this type; use 'float', 'int' or a sampler type +ERROR: 0:19: 'int' : cannot apply precision statement to this type; use 'float', 'int' or a sampler type +ERROR: 0:21: 'float' : cannot apply precision statement to this type; use 'float', 'int' or a sampler type +ERROR: 0:72: 'bool' : cannot apply precision statement to this type; use 'float', 'int' or a sampler type +ERROR: 0:75: 'structure' : cannot apply precision statement to this type; use 'float', 'int' or a sampler type +ERROR: 0:76: 'bool' : type cannot have precision qualifier +ERROR: 7 compilation errors. No code generated. + + +Shader version: 100 +ERROR: node is still EOpNull! +0:5 Function Definition: foo(vf3; ( global lowp 2-component vector of float) +0:5 Function Parameters: +0:5 'mv3' ( in mediump 3-component vector of float) +0:? Sequence +0:8 Branch: Return with expression +0:8 vector swizzle ( temp highp 2-component vector of float) +0:8 'hv4' ( temp highp 4-component vector of float) +0:8 Sequence +0:8 Constant: +0:8 0 (const int) +0:8 Constant: +0:8 1 (const int) +0:25 Function Definition: main( ( global void) +0:25 Function Parameters: +0:27 Sequence +0:27 Sequence +0:27 move second child to first child ( temp highp int) +0:27 'sum' ( temp lowp int) +0:27 add ( temp highp int) +0:27 'global_medium' ( global mediump int) +0:27 'global_high' ( global highp int) +0:29 move second child to first child ( temp mediump 4-component vector of float) +0:29 'gl_FragColor' ( fragColor mediump 4-component vector of float FragColor) +0:29 Construct vec4 ( temp mediump 4-component vector of float) +0:29 'color' ( smooth in mediump 3-component vector of float) +0:29 Constant: +0:29 1.000000 +0:32 add second child into first child ( temp highp int) +0:32 'sum' ( temp lowp int) +0:32 'level1_high' ( temp highp int) +0:36 add second child into first child ( temp lowp int) +0:36 'sum' ( temp lowp int) +0:36 'level1_low' ( temp lowp int) +0:41 Sequence +0:41 move second child to first child ( temp mediump float) +0:41 'd' ( temp lowp float) +0:41 distance ( global mediump float) +0:41 'arg1' ( temp lowp float) +0:41 'arg2' ( temp mediump float) +0:? Sequence +0:45 add second child into first child ( temp lowp int) +0:45 'sum' ( temp lowp int) +0:45 'level2_low' ( temp lowp int) +0:49 add second child into first child ( temp highp int) +0:49 'sum' ( temp lowp int) +0:49 'level2_high' ( temp highp int) +0:58 Loop with condition not tested first +0:58 Loop Condition +0:58 Constant: +0:58 true (const bool) +0:58 Loop Body +0:51 Sequence +0:51 Test condition and select ( temp void) +0:51 Condition +0:51 Constant: +0:51 true (const bool) +0:51 true case +0:? Sequence +0:54 add second child into first child ( temp mediump int) +0:54 'sum' ( temp lowp int) +0:54 'level4_medium' ( temp mediump int) +0:57 add second child into first child ( temp highp int) +0:57 'sum' ( temp lowp int) +0:57 'level3_high' ( temp highp int) +0:60 add second child into first child ( temp highp int) +0:60 'sum' ( temp lowp int) +0:60 'level2_high2' ( temp highp int) +0:63 add second child into first child ( temp lowp int) +0:63 'sum' ( temp lowp int) +0:63 'level1_low3' ( temp lowp int) +0:65 add second child into first child ( temp lowp int) +0:65 'sum' ( temp lowp int) +0:65 add ( temp lowp int) +0:65 Constant: +0:65 4 (const int) +0:65 direct index ( temp lowp int) +0:65 add ( temp lowp 2-component vector of int) +0:65 component-wise multiply ( temp lowp 2-component vector of int) +0:65 Construct ivec2 ( temp lowp 2-component vector of int) +0:65 'level1_low3' ( temp lowp int) +0:65 Construct ivec2 ( temp lowp 2-component vector of int) +0:65 'level1_high' ( temp highp int) +0:65 Construct ivec2 ( temp lowp 2-component vector of int) +0:65 Comma ( temp highp int) +0:65 'level1_low3' ( temp lowp int) +0:65 'level1_high' ( temp highp int) +0:65 Constant: +0:65 0 (const int) +0:67 texture ( global lowp 4-component vector of float) +0:67 'samplerLow' ( uniform lowp sampler2D) +0:67 Constant: +0:67 0.100000 +0:67 0.200000 +0:68 texture ( global mediump 4-component vector of float) +0:68 'samplerMed' ( uniform mediump sampler2D) +0:68 Constant: +0:68 0.100000 +0:68 0.200000 +0:69 texture ( global highp 4-component vector of float) +0:69 'samplerHigh' ( uniform highp sampler2D) +0:69 Constant: +0:69 0.100000 +0:69 0.200000 +0:? Linker Objects +0:? 'color' ( smooth in mediump 3-component vector of float) +0:? 'global_medium' ( global mediump int) +0:? 'samplerLow' ( uniform lowp sampler2D) +0:? 'samplerMed' ( uniform mediump sampler2D) +0:? 'samplerHigh' ( uniform highp sampler2D) +0:? 'uint' ( global mediump 4-component vector of float) +0:? 'global_high' ( global highp int) +0:? 'b2' ( global mediump 2-component vector of bool) + + +Linked fragment stage: + + +Shader version: 100 +ERROR: node is still EOpNull! +0:25 Function Definition: main( ( global void) +0:25 Function Parameters: +0:27 Sequence +0:27 Sequence +0:27 move second child to first child ( temp highp int) +0:27 'sum' ( temp lowp int) +0:27 add ( temp highp int) +0:27 'global_medium' ( global mediump int) +0:27 'global_high' ( global highp int) +0:29 move second child to first child ( temp mediump 4-component vector of float) +0:29 'gl_FragColor' ( fragColor mediump 4-component vector of float FragColor) +0:29 Construct vec4 ( temp mediump 4-component vector of float) +0:29 'color' ( smooth in mediump 3-component vector of float) +0:29 Constant: +0:29 1.000000 +0:32 add second child into first child ( temp highp int) +0:32 'sum' ( temp lowp int) +0:32 'level1_high' ( temp highp int) +0:36 add second child into first child ( temp lowp int) +0:36 'sum' ( temp lowp int) +0:36 'level1_low' ( temp lowp int) +0:41 Sequence +0:41 move second child to first child ( temp mediump float) +0:41 'd' ( temp lowp float) +0:41 distance ( global mediump float) +0:41 'arg1' ( temp lowp float) +0:41 'arg2' ( temp mediump float) +0:? Sequence +0:45 add second child into first child ( temp lowp int) +0:45 'sum' ( temp lowp int) +0:45 'level2_low' ( temp lowp int) +0:49 add second child into first child ( temp highp int) +0:49 'sum' ( temp lowp int) +0:49 'level2_high' ( temp highp int) +0:58 Loop with condition not tested first +0:58 Loop Condition +0:58 Constant: +0:58 true (const bool) +0:58 Loop Body +0:51 Sequence +0:51 Test condition and select ( temp void) +0:51 Condition +0:51 Constant: +0:51 true (const bool) +0:51 true case +0:? Sequence +0:54 add second child into first child ( temp mediump int) +0:54 'sum' ( temp lowp int) +0:54 'level4_medium' ( temp mediump int) +0:57 add second child into first child ( temp highp int) +0:57 'sum' ( temp lowp int) +0:57 'level3_high' ( temp highp int) +0:60 add second child into first child ( temp highp int) +0:60 'sum' ( temp lowp int) +0:60 'level2_high2' ( temp highp int) +0:63 add second child into first child ( temp lowp int) +0:63 'sum' ( temp lowp int) +0:63 'level1_low3' ( temp lowp int) +0:65 add second child into first child ( temp lowp int) +0:65 'sum' ( temp lowp int) +0:65 add ( temp lowp int) +0:65 Constant: +0:65 4 (const int) +0:65 direct index ( temp lowp int) +0:65 add ( temp lowp 2-component vector of int) +0:65 component-wise multiply ( temp lowp 2-component vector of int) +0:65 Construct ivec2 ( temp lowp 2-component vector of int) +0:65 'level1_low3' ( temp lowp int) +0:65 Construct ivec2 ( temp lowp 2-component vector of int) +0:65 'level1_high' ( temp highp int) +0:65 Construct ivec2 ( temp lowp 2-component vector of int) +0:65 Comma ( temp highp int) +0:65 'level1_low3' ( temp lowp int) +0:65 'level1_high' ( temp highp int) +0:65 Constant: +0:65 0 (const int) +0:67 texture ( global lowp 4-component vector of float) +0:67 'samplerLow' ( uniform lowp sampler2D) +0:67 Constant: +0:67 0.100000 +0:67 0.200000 +0:68 texture ( global mediump 4-component vector of float) +0:68 'samplerMed' ( uniform mediump sampler2D) +0:68 Constant: +0:68 0.100000 +0:68 0.200000 +0:69 texture ( global highp 4-component vector of float) +0:69 'samplerHigh' ( uniform highp sampler2D) +0:69 Constant: +0:69 0.100000 +0:69 0.200000 +0:? Linker Objects +0:? 'color' ( smooth in mediump 3-component vector of float) +0:? 'global_medium' ( global mediump int) +0:? 'samplerLow' ( uniform lowp sampler2D) +0:? 'samplerMed' ( uniform mediump sampler2D) +0:? 'samplerHigh' ( uniform highp sampler2D) +0:? 'uint' ( global mediump 4-component vector of float) +0:? 'global_high' ( global highp int) +0:? 'b2' ( global mediump 2-component vector of bool) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/precision.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/precision.vert.out new file mode 100644 index 0000000..04ceb3a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/precision.vert.out @@ -0,0 +1,99 @@ +precision.vert +ERROR: 0:7: 'sampler/image' : type requires declaration of default precision qualifier +ERROR: 0:8: 'sampler/image' : type requires declaration of default precision qualifier +ERROR: 0:14: 'sampler/image' : type requires declaration of default precision qualifier +ERROR: 3 compilation errors. No code generated. + + +Shader version: 300 +ERROR: node is still EOpNull! +0:18 Function Definition: main( ( global void) +0:18 Function Parameters: +0:20 Sequence +0:20 Sequence +0:20 move second child to first child ( temp highp 4-component vector of float) +0:20 't' ( temp highp 4-component vector of float) +0:20 texture ( global lowp 4-component vector of float) +0:20 's2D' ( uniform lowp sampler2D) +0:20 Constant: +0:20 0.100000 +0:20 0.200000 +0:21 add second child into first child ( temp highp 4-component vector of float) +0:21 't' ( temp highp 4-component vector of float) +0:21 texture ( global highp 4-component vector of float) +0:21 's2Dhigh' ( uniform highp sampler2D) +0:21 Constant: +0:21 0.100000 +0:21 0.200000 +0:22 add second child into first child ( temp highp 4-component vector of float) +0:22 't' ( temp highp 4-component vector of float) +0:22 texture ( global mediump float) +0:22 's2dAS' ( uniform mediump sampler2DArrayShadow) +0:22 Constant: +0:22 0.500000 +0:22 0.500000 +0:22 0.500000 +0:22 0.500000 +0:24 move second child to first child ( temp highp 4-component vector of float) +0:24 'gl_Position' ( gl_Position highp 4-component vector of float Position) +0:24 'pos' ( in highp 4-component vector of float) +0:? Linker Objects +0:? 'pos' ( in highp 4-component vector of float) +0:? 's2D' ( uniform lowp sampler2D) +0:? 'sCube' ( uniform lowp samplerCube) +0:? 'is2DAbad' ( uniform mediump isampler2DArray) +0:? 's2dASbad' ( uniform mediump sampler2DArrayShadow) +0:? 's2dAS' ( uniform mediump sampler2DArrayShadow) +0:? 'is2DAbad2' ( uniform mediump isampler2DArray) +0:? 's2Dhigh' ( uniform highp sampler2D) +0:? 'gl_VertexID' ( gl_VertexId highp int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId highp int InstanceId) + + +Linked vertex stage: + + +Shader version: 300 +ERROR: node is still EOpNull! +0:18 Function Definition: main( ( global void) +0:18 Function Parameters: +0:20 Sequence +0:20 Sequence +0:20 move second child to first child ( temp highp 4-component vector of float) +0:20 't' ( temp highp 4-component vector of float) +0:20 texture ( global lowp 4-component vector of float) +0:20 's2D' ( uniform lowp sampler2D) +0:20 Constant: +0:20 0.100000 +0:20 0.200000 +0:21 add second child into first child ( temp highp 4-component vector of float) +0:21 't' ( temp highp 4-component vector of float) +0:21 texture ( global highp 4-component vector of float) +0:21 's2Dhigh' ( uniform highp sampler2D) +0:21 Constant: +0:21 0.100000 +0:21 0.200000 +0:22 add second child into first child ( temp highp 4-component vector of float) +0:22 't' ( temp highp 4-component vector of float) +0:22 texture ( global mediump float) +0:22 's2dAS' ( uniform mediump sampler2DArrayShadow) +0:22 Constant: +0:22 0.500000 +0:22 0.500000 +0:22 0.500000 +0:22 0.500000 +0:24 move second child to first child ( temp highp 4-component vector of float) +0:24 'gl_Position' ( gl_Position highp 4-component vector of float Position) +0:24 'pos' ( in highp 4-component vector of float) +0:? Linker Objects +0:? 'pos' ( in highp 4-component vector of float) +0:? 's2D' ( uniform lowp sampler2D) +0:? 'sCube' ( uniform lowp samplerCube) +0:? 'is2DAbad' ( uniform mediump isampler2DArray) +0:? 's2dASbad' ( uniform mediump sampler2DArrayShadow) +0:? 's2dAS' ( uniform mediump sampler2DArrayShadow) +0:? 'is2DAbad2' ( uniform mediump isampler2DArray) +0:? 's2Dhigh' ( uniform highp sampler2D) +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/prepost.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/prepost.frag.out new file mode 100644 index 0000000..d5f73b6 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/prepost.frag.out @@ -0,0 +1,271 @@ +prepost.frag +Shader version: 140 +0:? Sequence +0:3 Function Definition: main( ( global void) +0:3 Function Parameters: +0:? Sequence +0:10 Sequence +0:10 move second child to first child ( temp int) +0:10 'index' ( temp int) +0:10 Constant: +0:10 5 (const int) +0:12 move second child to first child ( temp float) +0:12 direct index ( temp float) +0:12 y: direct index for structure ( temp 5-element array of float) +0:12 'str' ( temp structure{ temp 5-element array of float y}) +0:12 Constant: +0:12 0 (const int) +0:12 Constant: +0:12 4 (const int) +0:12 Constant: +0:12 2.000000 +0:13 move second child to first child ( temp float) +0:13 't' ( temp float) +0:13 Pre-Increment ( temp float) +0:13 indirect index ( temp float) +0:13 y: direct index for structure ( temp 5-element array of float) +0:13 'str' ( temp structure{ temp 5-element array of float y}) +0:13 Constant: +0:13 0 (const int) +0:13 Pre-Decrement ( temp int) +0:13 'index' ( temp int) +0:14 add second child into first child ( temp float) +0:14 direct index ( temp float) +0:14 y: direct index for structure ( temp 5-element array of float) +0:14 'str' ( temp structure{ temp 5-element array of float y}) +0:14 Constant: +0:14 0 (const int) +0:14 Constant: +0:14 4 (const int) +0:14 't' ( temp float) +0:15 move second child to first child ( temp float) +0:15 't' ( temp float) +0:15 Post-Decrement ( temp float) +0:15 direct index ( temp float) +0:15 y: direct index for structure ( temp 5-element array of float) +0:15 'str' ( temp structure{ temp 5-element array of float y}) +0:15 Constant: +0:15 0 (const int) +0:15 Constant: +0:15 4 (const int) +0:16 add second child into first child ( temp float) +0:16 indirect index ( temp float) +0:16 y: direct index for structure ( temp 5-element array of float) +0:16 'str' ( temp structure{ temp 5-element array of float y}) +0:16 Constant: +0:16 0 (const int) +0:16 Post-Increment ( temp int) +0:16 'index' ( temp int) +0:16 't' ( temp float) +0:17 Pre-Decrement ( temp float) +0:17 indirect index ( temp float) +0:17 y: direct index for structure ( temp 5-element array of float) +0:17 'str' ( temp structure{ temp 5-element array of float y}) +0:17 Constant: +0:17 0 (const int) +0:17 Pre-Decrement ( temp int) +0:17 'index' ( temp int) +0:19 Sequence +0:19 move second child to first child ( temp float) +0:19 'x' ( temp float) +0:19 direct index ( temp float) +0:19 y: direct index for structure ( temp 5-element array of float) +0:19 'str' ( temp structure{ temp 5-element array of float y}) +0:19 Constant: +0:19 0 (const int) +0:19 Constant: +0:19 4 (const int) +0:20 Pre-Increment ( temp float) +0:20 'x' ( temp float) +0:21 Pre-Decrement ( temp float) +0:21 'x' ( temp float) +0:22 Post-Increment ( temp float) +0:22 'x' ( temp float) +0:23 Post-Decrement ( temp float) +0:23 'x' ( temp float) +0:27 Sequence +0:27 move second child to first child ( temp float) +0:27 'y' ( temp float) +0:27 component-wise multiply ( temp float) +0:27 'x' ( temp float) +0:27 Pre-Increment ( temp float) +0:27 'x' ( temp float) +0:28 Sequence +0:28 move second child to first child ( temp float) +0:28 'z' ( temp float) +0:28 component-wise multiply ( temp float) +0:28 'y' ( temp float) +0:28 Post-Decrement ( temp float) +0:28 'x' ( temp float) +0:33 Sequence +0:33 move second child to first child ( temp 4-component vector of float) +0:33 'v' ( temp 4-component vector of float) +0:33 Constant: +0:33 1.000000 +0:33 2.000000 +0:33 3.000000 +0:33 4.000000 +0:34 move second child to first child ( temp float) +0:34 direct index ( temp float) +0:34 'v' ( temp 4-component vector of float) +0:34 Constant: +0:34 1 (const int) +0:34 Post-Decrement ( temp float) +0:34 direct index ( temp float) +0:34 'v' ( temp 4-component vector of float) +0:34 Constant: +0:34 2 (const int) +0:35 move second child to first child ( temp float) +0:35 direct index ( temp float) +0:35 'v' ( temp 4-component vector of float) +0:35 Constant: +0:35 0 (const int) +0:35 Pre-Decrement ( temp float) +0:35 direct index ( temp float) +0:35 'v' ( temp 4-component vector of float) +0:35 Constant: +0:35 3 (const int) +0:37 move second child to first child ( temp 4-component vector of float) +0:37 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:37 vector-scale ( temp 4-component vector of float) +0:37 'z' ( temp float) +0:37 'v' ( temp 4-component vector of float) +0:? Linker Objects + + +Linked fragment stage: + + +Shader version: 140 +0:? Sequence +0:3 Function Definition: main( ( global void) +0:3 Function Parameters: +0:? Sequence +0:10 Sequence +0:10 move second child to first child ( temp int) +0:10 'index' ( temp int) +0:10 Constant: +0:10 5 (const int) +0:12 move second child to first child ( temp float) +0:12 direct index ( temp float) +0:12 y: direct index for structure ( temp 5-element array of float) +0:12 'str' ( temp structure{ temp 5-element array of float y}) +0:12 Constant: +0:12 0 (const int) +0:12 Constant: +0:12 4 (const int) +0:12 Constant: +0:12 2.000000 +0:13 move second child to first child ( temp float) +0:13 't' ( temp float) +0:13 Pre-Increment ( temp float) +0:13 indirect index ( temp float) +0:13 y: direct index for structure ( temp 5-element array of float) +0:13 'str' ( temp structure{ temp 5-element array of float y}) +0:13 Constant: +0:13 0 (const int) +0:13 Pre-Decrement ( temp int) +0:13 'index' ( temp int) +0:14 add second child into first child ( temp float) +0:14 direct index ( temp float) +0:14 y: direct index for structure ( temp 5-element array of float) +0:14 'str' ( temp structure{ temp 5-element array of float y}) +0:14 Constant: +0:14 0 (const int) +0:14 Constant: +0:14 4 (const int) +0:14 't' ( temp float) +0:15 move second child to first child ( temp float) +0:15 't' ( temp float) +0:15 Post-Decrement ( temp float) +0:15 direct index ( temp float) +0:15 y: direct index for structure ( temp 5-element array of float) +0:15 'str' ( temp structure{ temp 5-element array of float y}) +0:15 Constant: +0:15 0 (const int) +0:15 Constant: +0:15 4 (const int) +0:16 add second child into first child ( temp float) +0:16 indirect index ( temp float) +0:16 y: direct index for structure ( temp 5-element array of float) +0:16 'str' ( temp structure{ temp 5-element array of float y}) +0:16 Constant: +0:16 0 (const int) +0:16 Post-Increment ( temp int) +0:16 'index' ( temp int) +0:16 't' ( temp float) +0:17 Pre-Decrement ( temp float) +0:17 indirect index ( temp float) +0:17 y: direct index for structure ( temp 5-element array of float) +0:17 'str' ( temp structure{ temp 5-element array of float y}) +0:17 Constant: +0:17 0 (const int) +0:17 Pre-Decrement ( temp int) +0:17 'index' ( temp int) +0:19 Sequence +0:19 move second child to first child ( temp float) +0:19 'x' ( temp float) +0:19 direct index ( temp float) +0:19 y: direct index for structure ( temp 5-element array of float) +0:19 'str' ( temp structure{ temp 5-element array of float y}) +0:19 Constant: +0:19 0 (const int) +0:19 Constant: +0:19 4 (const int) +0:20 Pre-Increment ( temp float) +0:20 'x' ( temp float) +0:21 Pre-Decrement ( temp float) +0:21 'x' ( temp float) +0:22 Post-Increment ( temp float) +0:22 'x' ( temp float) +0:23 Post-Decrement ( temp float) +0:23 'x' ( temp float) +0:27 Sequence +0:27 move second child to first child ( temp float) +0:27 'y' ( temp float) +0:27 component-wise multiply ( temp float) +0:27 'x' ( temp float) +0:27 Pre-Increment ( temp float) +0:27 'x' ( temp float) +0:28 Sequence +0:28 move second child to first child ( temp float) +0:28 'z' ( temp float) +0:28 component-wise multiply ( temp float) +0:28 'y' ( temp float) +0:28 Post-Decrement ( temp float) +0:28 'x' ( temp float) +0:33 Sequence +0:33 move second child to first child ( temp 4-component vector of float) +0:33 'v' ( temp 4-component vector of float) +0:33 Constant: +0:33 1.000000 +0:33 2.000000 +0:33 3.000000 +0:33 4.000000 +0:34 move second child to first child ( temp float) +0:34 direct index ( temp float) +0:34 'v' ( temp 4-component vector of float) +0:34 Constant: +0:34 1 (const int) +0:34 Post-Decrement ( temp float) +0:34 direct index ( temp float) +0:34 'v' ( temp 4-component vector of float) +0:34 Constant: +0:34 2 (const int) +0:35 move second child to first child ( temp float) +0:35 direct index ( temp float) +0:35 'v' ( temp 4-component vector of float) +0:35 Constant: +0:35 0 (const int) +0:35 Pre-Decrement ( temp float) +0:35 direct index ( temp float) +0:35 'v' ( temp 4-component vector of float) +0:35 Constant: +0:35 3 (const int) +0:37 move second child to first child ( temp 4-component vector of float) +0:37 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:37 vector-scale ( temp 4-component vector of float) +0:37 'z' ( temp float) +0:37 'v' ( temp 4-component vector of float) +0:? Linker Objects + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.cpp_style___FILE__.vert.err b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.cpp_style___FILE__.vert.err new file mode 100644 index 0000000..e69de29 diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.cpp_style___FILE__.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.cpp_style___FILE__.vert.out new file mode 100644 index 0000000..e63d81a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.cpp_style___FILE__.vert.out @@ -0,0 +1,37 @@ +#extension GL_GOOGLE_cpp_style_line_directive : enable + +0 + +#line 150 "a.h" + "a.h" + +#line 24 + "a.h" + +#line 42 + "a.h" + +#line 30 "b.cc" + "b.cc" + +#line 10 3 + 3 + +#line 48 + 3 + +#line 4 + 3 + +#line 55 100 + 100 + +#line 1000 "c" + "c" + +#line 42 1 + 1 + +#line 42 "this-is-a-quite-long-name-maybe-i-should-shorten-it" + "this-is-a-quite-long-name-maybe-i-should-shorten-it" + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.cpp_style_line_directive.vert.err b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.cpp_style_line_directive.vert.err new file mode 100644 index 0000000..794ded8 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.cpp_style_line_directive.vert.err @@ -0,0 +1,15 @@ +ERROR: 0:3: '#error' : at 0:3 +ERROR: a.h:150: '#error' : at a.h:150 +ERROR: a.h:24: '#error' : at a.h:24 +ERROR: a.h:42: '#error' : at a.h:42 +ERROR: b.cc:30: '#error' : at b.cc:30 +ERROR: 3:10: '#error' : at 3:10 +ERROR: 3:48: '#error' : at 3:48 +ERROR: 3:4: '#error' : at 3:4 +ERROR: 100:55: '#error' : at 100:55 +ERROR: c:1000: '#error' : at c:1000 +ERROR: 1:42: '#error' : at 1:42 +ERROR: this-is-a-quite-long-name-maybe-i-should-shorten-it:42: '#error' : at this-is-a-quite-long-name-maybe-i-should-shorten-it:42 +ERROR: 12 compilation errors. No code generated. + + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.cpp_style_line_directive.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.cpp_style_line_directive.vert.out new file mode 100644 index 0000000..e69de29 diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.defined.vert.err b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.defined.vert.err new file mode 100644 index 0000000..8dddabc --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.defined.vert.err @@ -0,0 +1,4 @@ +ERROR: 0:2: '#define' : "defined" can't be (un)defined: defined +ERROR: 1 compilation errors. No code generated. + + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.defined.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.defined.vert.out new file mode 100644 index 0000000..e69de29 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 new file mode 100644 index 0000000..5f177e6 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.edge_cases.vert.err @@ -0,0 +1,2 @@ +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.edge_cases.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.edge_cases.vert.out new file mode 100644 index 0000000..17d9049 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.edge_cases.vert.out @@ -0,0 +1,16 @@ +#version 310 es + + + + + + + + + + + +void main(){ + gl_Position = vec4(3 + 2 + 2 * 4 + 2 + 3 * 2); +} + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.eof_missing.vert.err b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.eof_missing.vert.err new file mode 100644 index 0000000..e69de29 diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.eof_missing.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.eof_missing.vert.out new file mode 100644 index 0000000..bf09d53 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.eof_missing.vert.out @@ -0,0 +1,2 @@ +noEOF + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.errors.vert.err b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.errors.vert.err new file mode 100644 index 0000000..cfde404 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.errors.vert.err @@ -0,0 +1,8 @@ +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 +ERROR: 0:21: '' : missing #endif +ERROR: 4 compilation errors. No code generated. + + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.errors.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.errors.vert.out new file mode 100644 index 0000000..e69de29 diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.extensions.vert.err b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.extensions.vert.err new file mode 100644 index 0000000..925cc0c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.extensions.vert.err @@ -0,0 +1,3 @@ +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.extensions.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.extensions.vert.out new file mode 100644 index 0000000..57d2e19 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.extensions.vert.out @@ -0,0 +1,12 @@ +#version 310 es + +#extension GL_EXT_geometry_shader : enable +#extension GL_EXT_frag_depth : disable +#extension GL_EXT_gpu_shader5 : require +#extension GL_EXT_shader_texture_image_samples : warn + +#extension unknown_extension : require + +int main(){ +} + 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 new file mode 100644 index 0000000..5f177e6 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.function_macro.vert.err @@ -0,0 +1,2 @@ +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.function_macro.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.function_macro.vert.out new file mode 100644 index 0000000..1280ddf --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.function_macro.vert.out @@ -0,0 +1,21 @@ +#version 310 es + + + + + + + + + + + + + + +int main(){ + gl_Position = vec4(3 + 1, 3 + 4, 3 + 1); + gl_Position = vec4(1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12); + gl_Position = vec4(4 + 3 + 3); +} + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.include.disabled.vert.err b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.include.disabled.vert.err new file mode 100644 index 0000000..1419204 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.include.disabled.vert.err @@ -0,0 +1,13 @@ +ERROR: 0:8000: '#include' : required extension not requested: GL_GOOGLE_include_directive +ERROR: 0:8000: '#include' : must be followed by a header name +ERROR: 0:8001: '#include' : required extension not requested: GL_GOOGLE_include_directive +ERROR: 0:8001: '#include' : must be followed by a header name +ERROR: 0:8002: '#include' : required extension not requested: GL_GOOGLE_include_directive +ERROR: 0:8002: '#include' : Could not process include directive for header name: foo +ERROR: 0:8003: '#include' : required extension not requested: GL_GOOGLE_include_directive +ERROR: 0:8003: '#include' : extra content after header name: foo +ERROR: 0:8004: '#include' : required extension not requested: GL_GOOGLE_include_directive +ERROR: 0:8004: '#include' : expected newline after header name: no-eol +ERROR: 10 compilation errors. No code generated. + + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.include.disabled.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.include.disabled.vert.out new file mode 100644 index 0000000..e69de29 diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.include.enabled.vert.err b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.include.enabled.vert.err new file mode 100644 index 0000000..252e661 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.include.enabled.vert.err @@ -0,0 +1,20 @@ +ERROR: 0:8000: '#include' : must be followed by a header name +ERROR: 0:8001: '#include' : must be followed by a header name +ERROR: 0:8002: '#include' : Could not process include directive for header name: foo.oeu +ERROR: 0:8003: '#include' : Could not process include directive for header name: foo.oeu/ao eu/ao.h +ERROR: 0:8004: '#include' : Could not process include directive for header name: foo +ERROR: 0:8006: '#include' : Could not process include directive for header name: foo.oe +ERROR: 0:8007: '#include' : Could not process include directive for header name: foo"bar" +ERROR: 0:8008: '#include' : Could not process include directive for header name: foo\bar +ERROR: 0:8009: '#include' : Could not process include directive for header name: foo.oe> +ERROR: 0:8010: '#include' : Could not process include directive for header name: foo +ERROR: 0:8011: '#include' : extra content after header name: foo2.h +ERROR: 0:8012: '#include' : extra content after header name: foo.h +ERROR: 0:8014: '#include' : Could not process include directive for header name: ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789 +ERROR: 0:8016: '' : header name too long +ERROR: 0:8016: '#include' : Could not process include directive for header name: ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789 +ERROR: 0:8017: '#include' : expected newline after header name: no-eol +ERROR: 17 compilation errors. No code generated. + + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.include.enabled.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.include.enabled.vert.out new file mode 100644 index 0000000..e69de29 diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.line.frag.err b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.line.frag.err new file mode 100644 index 0000000..5f177e6 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.line.frag.err @@ -0,0 +1,2 @@ +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.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.line.frag.out new file mode 100644 index 0000000..3e2206f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.line.frag.out @@ -0,0 +1,5 @@ +#version 310 es +#line 1 2 +#pragma something +void main(){ } + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.line.vert.err b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.line.vert.err new file mode 100644 index 0000000..e69de29 diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.line.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.line.vert.out new file mode 100644 index 0000000..2bf0903 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.line.vert.out @@ -0,0 +1,39 @@ +#line 300 + +#line 2 + + + + + +#line 10 + + +#line 2 + +#line 0 + + + +#line 4 + + + + + +#line 8 + +void main(){ + gl_Position = vec4(10); +} + +#line 8 4 + + + + +#line 12 3 + +#line 1 + + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.many.endif.vert.err b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.many.endif.vert.err new file mode 100644 index 0000000..49aafc5 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.many.endif.vert.err @@ -0,0 +1,12 @@ +ERROR: 0:1: '#endif' : mismatched statements +ERROR: 0:2: '#endif' : mismatched statements +ERROR: 0:3: '#endif' : mismatched statements +ERROR: 0:4: '#endif' : mismatched statements +ERROR: 0:5: '#endif' : mismatched statements +ERROR: 0:6: '#endif' : mismatched statements +ERROR: 0:7: '#endif' : mismatched statements +ERROR: 0:10: 'preprocessor evaluation' : bad expression +ERROR: 0:11: '' : missing #endif +ERROR: 9 compilation errors. No code generated. + + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.many.endif.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.many.endif.vert.out new file mode 100644 index 0000000..e69de29 diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.pragma.vert.err b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.pragma.vert.err new file mode 100644 index 0000000..5f177e6 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.pragma.vert.err @@ -0,0 +1,2 @@ +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.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.pragma.vert.out new file mode 100644 index 0000000..8c52814 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.pragma.vert.out @@ -0,0 +1,12 @@ +#version 310 es + +#pragma optimize(on) +#pragma optimize(off) +#pragma debug(on) +#pragma debug(off) + +#pragma undefined_pragma(x,4) + +int main(){ +} + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.simple.vert.err b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.simple.vert.err new file mode 100644 index 0000000..5f177e6 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.simple.vert.err @@ -0,0 +1,2 @@ +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.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.simple.vert.out new file mode 100644 index 0000000..8cbabda --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.simple.vert.out @@ -0,0 +1,30 @@ +#version 310 es + + + + + + + + + + + + + float fn(float x){ return x + 4.0;} + +int main(){ + gl_Position = vec4(1); + gl_Position = clamp(1, 2, 3); + gl_Position = vec4(1); + gl_Position = vec4(1, 2); + gl_Position = vec4(fn(3)); + []. ++ -- + + - * % / - ! ~ + << >> < > <= >= + == != + & ^ | && ^^ || ? : + += -= *= /= %= <<= >>= &= |= ^= + 1.2 2E10 5u - 5 lf +} + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.success_if_parse_would_fail.vert.err b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.success_if_parse_would_fail.vert.err new file mode 100644 index 0000000..e69de29 diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.success_if_parse_would_fail.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.success_if_parse_would_fail.vert.out new file mode 100644 index 0000000..624813a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.success_if_parse_would_fail.vert.out @@ -0,0 +1,4 @@ +int x(){ + something that shouldnt compile; +} + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/recurse1.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/recurse1.vert.out new file mode 100644 index 0000000..7d09b7c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/recurse1.vert.out @@ -0,0 +1,229 @@ +recurse1.vert +Shader version: 330 +0:? Sequence +0:3 Function Definition: main( ( global void) +0:3 Function Parameters: +0:9 Function Definition: self( ( global void) +0:9 Function Parameters: +0:11 Sequence +0:11 Function Call: self( ( global void) +0:16 Function Definition: foo(f1; ( global void) +0:16 Function Parameters: +0:16 '' ( in float) +0:18 Sequence +0:18 Function Call: bar(i1; ( global float) +0:18 Constant: +0:18 2 (const int) +0:21 Function Definition: bar(i1; ( global float) +0:21 Function Parameters: +0:21 '' ( in int) +0:23 Sequence +0:23 Function Call: foo(f1; ( global void) +0:23 Constant: +0:23 4.200000 +0:25 Branch: Return with expression +0:25 Constant: +0:25 3.200000 +0:32 Function Definition: A( ( global void) +0:32 Function Parameters: +0:32 Sequence +0:32 Function Call: B( ( global void) +0:33 Function Definition: C( ( global void) +0:33 Function Parameters: +0:33 Sequence +0:33 Function Call: D( ( global void) +0:34 Function Definition: B( ( global void) +0:34 Function Parameters: +0:34 Sequence +0:34 Function Call: C( ( global void) +0:35 Function Definition: D( ( global void) +0:35 Function Parameters: +0:35 Sequence +0:35 Function Call: A( ( global void) +0:41 Function Definition: AT( ( global void) +0:41 Function Parameters: +0:41 Sequence +0:41 Function Call: BT( ( global void) +0:41 Function Call: BT( ( global void) +0:41 Function Call: BT( ( global void) +0:42 Function Definition: CT( ( global void) +0:42 Function Parameters: +0:42 Sequence +0:42 Function Call: DT( ( global void) +0:42 Function Call: AT( ( global void) +0:42 Function Call: DT( ( global void) +0:42 Function Call: BT( ( global void) +0:43 Function Definition: BT( ( global void) +0:43 Function Parameters: +0:43 Sequence +0:43 Function Call: CT( ( global void) +0:43 Function Call: CT( ( global void) +0:43 Function Call: CT( ( global void) +0:44 Function Definition: DT( ( global void) +0:44 Function Parameters: +0:44 Sequence +0:44 Function Call: AT( ( global void) +0:? Linker Objects +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + +recurse1.frag +Shader version: 330 +0:? Sequence +0:5 Function Definition: main( ( global void) +0:5 Function Parameters: +0:11 Function Definition: cfoo(f1; ( global void) +0:11 Function Parameters: +0:11 '' ( in float) +0:13 Sequence +0:13 Function Call: cbar(i1; ( global float) +0:13 Constant: +0:13 2 (const int) +0:20 Function Definition: CA( ( global void) +0:20 Function Parameters: +0:20 Sequence +0:20 Function Call: CB( ( global void) +0:21 Function Definition: CC( ( global void) +0:21 Function Parameters: +0:21 Sequence +0:21 Function Call: CD( ( global void) +0:27 Function Definition: CAT( ( global void) +0:27 Function Parameters: +0:27 Sequence +0:27 Function Call: CBT( ( global void) +0:27 Function Call: CBT( ( global void) +0:27 Function Call: CBT( ( global void) +0:28 Function Definition: CCT( ( global void) +0:28 Function Parameters: +0:28 Sequence +0:28 Function Call: CDT( ( global void) +0:28 Function Call: CDT( ( global void) +0:28 Function Call: CBT( ( global void) +0:32 Function Definition: norA( ( global void) +0:32 Function Parameters: +0:33 Function Definition: norB( ( global void) +0:33 Function Parameters: +0:33 Sequence +0:33 Function Call: norA( ( global void) +0:34 Function Definition: norC( ( global void) +0:34 Function Parameters: +0:34 Sequence +0:34 Function Call: norA( ( global void) +0:35 Function Definition: norD( ( global void) +0:35 Function Parameters: +0:35 Sequence +0:35 Function Call: norA( ( global void) +0:36 Function Definition: norE( ( global void) +0:36 Function Parameters: +0:36 Sequence +0:36 Function Call: norB( ( global void) +0:37 Function Definition: norF( ( global void) +0:37 Function Parameters: +0:37 Sequence +0:37 Function Call: norB( ( global void) +0:38 Function Definition: norG( ( global void) +0:38 Function Parameters: +0:38 Sequence +0:38 Function Call: norE( ( global void) +0:39 Function Definition: norH( ( global void) +0:39 Function Parameters: +0:39 Sequence +0:39 Function Call: norE( ( global void) +0:40 Function Definition: norI( ( global void) +0:40 Function Parameters: +0:40 Sequence +0:40 Function Call: norE( ( global void) +0:44 Function Definition: norcA( ( global void) +0:44 Function Parameters: +0:45 Function Definition: norcB( ( global void) +0:45 Function Parameters: +0:45 Sequence +0:45 Function Call: norcA( ( global void) +0:46 Function Definition: norcC( ( global void) +0:46 Function Parameters: +0:46 Sequence +0:46 Function Call: norcB( ( global void) +0:47 Function Definition: norcD( ( global void) +0:47 Function Parameters: +0:47 Sequence +0:47 Function Call: norcC( ( global void) +0:47 Function Call: norcB( ( global void) +0:48 Function Definition: norcE( ( global void) +0:48 Function Parameters: +0:48 Sequence +0:48 Function Call: norcD( ( global void) +0:? Linker Objects + +recurse2.frag +Shader version: 330 +0:? Sequence +0:9 Function Definition: cbar(i1; ( global float) +0:9 Function Parameters: +0:9 '' ( in int) +0:11 Sequence +0:11 Function Call: cfoo(f1; ( global void) +0:11 Constant: +0:11 4.200000 +0:13 Branch: Return with expression +0:13 Constant: +0:13 3.200000 +0:20 Function Definition: CB( ( global void) +0:20 Function Parameters: +0:20 Sequence +0:20 Function Call: CC( ( global void) +0:21 Function Definition: CD( ( global void) +0:21 Function Parameters: +0:21 Sequence +0:21 Function Call: CA( ( global void) +0:27 Function Definition: CBT( ( global void) +0:27 Function Parameters: +0:27 Sequence +0:27 Function Call: CCT( ( global void) +0:27 Function Call: CCT( ( global void) +0:27 Function Call: CCT( ( global void) +0:28 Function Definition: CDT( ( global void) +0:28 Function Parameters: +0:28 Sequence +0:28 Function Call: CAT( ( global void) +0:? Linker Objects + + +Linked vertex stage: + +ERROR: Linking vertex stage: Recursion detected: + BT( calling CT( +ERROR: Linking vertex stage: Recursion detected: + AT( calling BT( +ERROR: Linking vertex stage: Recursion detected: + DT( calling AT( +ERROR: Linking vertex stage: Recursion detected: + D( calling A( +ERROR: Linking vertex stage: Recursion detected: + bar(i1; calling foo(f1; +ERROR: Linking vertex stage: Recursion detected: + self( calling self( + +Linked fragment stage: + +ERROR: Linking fragment stage: Recursion detected: + CCT( calling CBT( +ERROR: Linking fragment stage: Recursion detected: + CBT( calling CCT( +ERROR: Linking fragment stage: Recursion detected: + CC( calling CD( +ERROR: Linking fragment stage: Recursion detected: + cfoo(f1; calling cbar(i1; + +Shader version: 330 +0:? Sequence +0:3 Function Definition: main( ( global void) +0:3 Function Parameters: +0:? Linker Objects +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) +Shader version: 330 +0:? Sequence +0:5 Function Definition: main( ( global void) +0:5 Function Parameters: +0:? Linker Objects + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/reflection.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/reflection.vert.out new file mode 100644 index 0000000..ba3e0e6 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/reflection.vert.out @@ -0,0 +1,100 @@ +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 +sampler_2DMSArray: offset -1, type 910b, size 1, index -1, binding -1 +anonMember3: offset 80, type 8b52, size 1, index 0, binding -1 +s.a: offset -1, type 1404, size 1, index -1, binding -1 +named.scalar: offset 12, type 1404, size 1, index 1, 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 2, binding -1 +c_scalarAfterm23: offset 64, 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 +named.memvec2: offset 48, type 8b50, size 1, index 1, binding -1 +named.memf1: offset 56, type 1406, size 1, index 1, binding -1 +named.memf2: offset 60, type 8b56, size 1, index 1, binding -1 +named.memf3: offset 64, type 1404, size 1, index 1, binding -1 +named.memvec2a: offset 72, type 8b50, size 1, index 1, binding -1 +named.m22: offset 80, type 8b5a, size 7, index 1, binding -1 +dm22: offset -1, type 8b5a, size 4, index -1, binding -1 +m22: offset 208, type 8b5a, size 3, index 0, binding -1 +nested.foo.n1.a: offset 0, type 1406, size 1, index 3, binding -1 +nested.foo.n2.b: offset 16, type 1406, size 1, index 3, binding -1 +nested.foo.n2.c: offset 20, type 1406, size 1, index 3, binding -1 +nested.foo.n2.d: offset 24, type 1406, size 1, index 3, binding -1 +deepA[0].d2.d1[2].va: offset -1, type 8b50, size 2, index -1, binding -1 +deepA[1].d2.d1[2].va: offset -1, type 8b50, size 2, index -1, binding -1 +deepB[1].d2.d1[0].va: offset -1, type 8b50, size 2, index -1, binding -1 +deepB[1].d2.d1[1].va: offset -1, type 8b50, size 2, index -1, binding -1 +deepB[1].d2.d1[2].va: offset -1, type 8b50, size 2, index -1, binding -1 +deepB[1].d2.d1[3].va: offset -1, type 8b50, size 2, index -1, binding -1 +deepB[0].d2.d1[0].va: offset -1, type 8b50, size 2, index -1, binding -1 +deepB[0].d2.d1[1].va: offset -1, type 8b50, size 2, index -1, binding -1 +deepB[0].d2.d1[2].va: offset -1, type 8b50, size 2, index -1, binding -1 +deepB[0].d2.d1[3].va: offset -1, type 8b50, size 2, index -1, binding -1 +deepC[1].iv4: offset -1, type 8b52, size 1, index -1, binding -1 +deepC[1].d2.i: offset -1, type 1404, size 1, index -1, binding -1 +deepC[1].d2.d1[0].va: offset -1, type 8b50, size 3, index -1, binding -1 +deepC[1].d2.d1[0].b: offset -1, type 8b56, size 1, index -1, binding -1 +deepC[1].d2.d1[1].va: offset -1, type 8b50, size 3, index -1, binding -1 +deepC[1].d2.d1[1].b: offset -1, type 8b56, size 1, index -1, binding -1 +deepC[1].d2.d1[2].va: offset -1, type 8b50, size 3, index -1, binding -1 +deepC[1].d2.d1[2].b: offset -1, type 8b56, size 1, index -1, binding -1 +deepC[1].d2.d1[3].va: offset -1, type 8b50, size 3, index -1, binding -1 +deepC[1].d2.d1[3].b: offset -1, type 8b56, size 1, index -1, binding -1 +deepC[1].v3: offset -1, type 8b54, size 1, index -1, binding -1 +deepD[0].iv4: offset -1, type 8b52, size 1, index -1, binding -1 +deepD[0].d2.i: offset -1, type 1404, size 1, index -1, binding -1 +deepD[0].d2.d1[0].va: offset -1, type 8b50, size 3, index -1, binding -1 +deepD[0].d2.d1[0].b: offset -1, type 8b56, size 1, index -1, binding -1 +deepD[0].d2.d1[1].va: offset -1, type 8b50, size 3, index -1, binding -1 +deepD[0].d2.d1[1].b: offset -1, type 8b56, size 1, index -1, binding -1 +deepD[0].d2.d1[2].va: offset -1, type 8b50, size 3, index -1, binding -1 +deepD[0].d2.d1[2].b: offset -1, type 8b56, size 1, index -1, binding -1 +deepD[0].d2.d1[3].va: offset -1, type 8b50, size 3, index -1, binding -1 +deepD[0].d2.d1[3].b: offset -1, type 8b56, size 1, index -1, binding -1 +deepD[0].v3: offset -1, type 8b54, size 1, index -1, binding -1 +deepD[1].iv4: offset -1, type 8b52, size 1, index -1, binding -1 +deepD[1].d2.i: offset -1, type 1404, size 1, index -1, binding -1 +deepD[1].d2.d1[0].va: offset -1, type 8b50, size 3, index -1, binding -1 +deepD[1].d2.d1[0].b: offset -1, type 8b56, size 1, index -1, binding -1 +deepD[1].d2.d1[1].va: offset -1, type 8b50, size 3, index -1, binding -1 +deepD[1].d2.d1[1].b: offset -1, type 8b56, size 1, index -1, binding -1 +deepD[1].d2.d1[2].va: offset -1, type 8b50, size 3, index -1, binding -1 +deepD[1].d2.d1[2].b: offset -1, type 8b56, size 1, index -1, binding -1 +deepD[1].d2.d1[3].va: offset -1, type 8b50, size 3, index -1, binding -1 +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 +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 +named.member3: offset 32, type 8b52, size 1, index 1, binding -1 + +Uniform block reflection: +nameless: offset -1, type ffffffff, size 496, index -1, binding -1 +named: offset -1, type ffffffff, size 304, index -1, binding -1 +c_nameless: offset -1, type ffffffff, size 112, index -1, binding -1 +nested: offset -1, type ffffffff, size 32, index -1, binding -1 +abl[0]: offset -1, type ffffffff, size 4, index -1, binding -1 +abl[1]: offset -1, type ffffffff, size 4, index -1, binding -1 +abl[2]: offset -1, type ffffffff, size 4, index -1, binding -1 +abl[3]: offset -1, type ffffffff, size 4, index -1, binding -1 +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 + +Vertex attribute reflection: +attributeFloat: offset 0, type 1406, size 0, index 0, binding -1 +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 + 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 new file mode 100644 index 0000000..c28d90a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.basic.dcefunc.frag.out @@ -0,0 +1,35 @@ +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 +// Id's are bound by 22 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 17 19 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + Name 4 "main" + Name 17 "outf4" + Name 19 "inf" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 3 + 8: TypeFunction 7(fvec3) + 11: 6(float) Constant 0 + 12: 7(fvec3) ConstantComposite 11 11 11 + 15: TypeVector 6(float) 4 + 16: TypePointer Output 15(fvec4) + 17(outf4): 16(ptr) Variable Output + 18: TypePointer Input 6(float) + 19(inf): 18(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 20: 6(float) Load 19(inf) + 21: 15(fvec4) CompositeConstruct 20 20 20 20 + Store 17(outf4) 21 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.basic.dcevartype.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.basic.dcevartype.frag.out new file mode 100644 index 0000000..dd03946 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.basic.dcevartype.frag.out @@ -0,0 +1,12 @@ +remap.basic.dcevartype.frag +ERROR: #version: ES shaders for Vulkan SPIR-V require version 310 or higher +Warning, version 310 is not yet complete; most version-specific features are present, but some are missing. +ERROR: 1 compilation errors. No code generated. + + + +Linked fragment stage: + +ERROR: Linking fragment stage: Missing entry point: Each stage requires one "void main()" entry point + +SPIR-V is not generated for failed compile or link 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 new file mode 100644 index 0000000..357a8d2 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.basic.everything.frag.out @@ -0,0 +1,27 @@ +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 +// Id's are bound by 24969 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 5663 "main" 4539 3773 + ExecutionMode 5663 OriginUpperLeft + 8: TypeVoid + 1282: TypeFunction 8 + 13: TypeFloat 32 + 29: TypeVector 13(float) 4 + 666: TypePointer Output 29(fvec4) + 4539: 666(ptr) Variable Output + 650: TypePointer Input 13(float) + 3773: 650(ptr) Variable Input + 5663: 8 Function None 1282 + 24968: Label + 17486: 13(float) Load 3773 + 17691: 29(fvec4) CompositeConstruct 17486 17486 17486 17486 + Store 4539 17691 + Return + FunctionEnd 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 new file mode 100644 index 0000000..44f5747 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.basic.none.frag.out @@ -0,0 +1,40 @@ +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 +// Id's are bound by 22 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 17 19 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + Name 4 "main" + Name 9 "dead_fn(" + Name 17 "outf4" + Name 19 "inf" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 3 + 8: TypeFunction 7(fvec3) + 11: 6(float) Constant 0 + 12: 7(fvec3) ConstantComposite 11 11 11 + 15: TypeVector 6(float) 4 + 16: TypePointer Output 15(fvec4) + 17(outf4): 16(ptr) Variable Output + 18: TypePointer Input 6(float) + 19(inf): 18(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 20: 6(float) Load 19(inf) + 21: 15(fvec4) CompositeConstruct 20 20 20 20 + Store 17(outf4) 21 + Return + FunctionEnd + 9(dead_fn(): 7(fvec3) Function None 8 + 10: Label + ReturnValue 12 + FunctionEnd 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 new file mode 100644 index 0000000..ab1a003 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.basic.strip.frag.out @@ -0,0 +1,35 @@ +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 +// Id's are bound by 22 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 17 19 + ExecutionMode 4 OriginUpperLeft + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 3 + 8: TypeFunction 7(fvec3) + 11: 6(float) Constant 0 + 12: 7(fvec3) ConstantComposite 11 11 11 + 15: TypeVector 6(float) 4 + 16: TypePointer Output 15(fvec4) + 17: 16(ptr) Variable Output + 18: TypePointer Input 6(float) + 19: 18(ptr) Variable Input + 4: 2 Function None 3 + 5: Label + 20: 6(float) Load 19 + 21: 15(fvec4) CompositeConstruct 20 20 20 20 + Store 17 21 + Return + FunctionEnd + 9: 7(fvec3) Function None 8 + 10: Label + ReturnValue 12 + FunctionEnd 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 new file mode 100644 index 0000000..4fc2987 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.sample.basic.everything.frag.out @@ -0,0 +1,228 @@ +remap.hlsl.sample.basic.everything.frag +WARNING: 0:4: 'immediate sampler state' : unimplemented + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 24878 + + Capability Shader + Capability Sampled1D + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 5663 "main" 4656 4112 + ExecutionMode 5663 OriginUpperLeft + Decorate 4727 DescriptorSet 0 + Decorate 4727 Binding 0 + Decorate 3305 DescriptorSet 0 + Decorate 3305 Binding 0 + Decorate 4743 DescriptorSet 0 + Decorate 4807 DescriptorSet 0 + Decorate 5042 DescriptorSet 0 + Decorate 5058 DescriptorSet 0 + Decorate 5122 DescriptorSet 0 + Decorate 3967 DescriptorSet 0 + Decorate 3983 DescriptorSet 0 + Decorate 4047 DescriptorSet 0 + Decorate 3789 DescriptorSet 0 + Decorate 3805 DescriptorSet 0 + Decorate 3869 DescriptorSet 0 + Decorate 4656 Location 0 + Decorate 4112 BuiltIn FragDepth + 8: TypeVoid + 1282: TypeFunction 8 + 13: TypeFloat 32 + 29: TypeVector 13(float) 4 + 1032: TypeStruct 29(fvec4) 13(float) + 319: TypeFunction 1032(struct) + 12: TypeInt 32 1 + 1335: TypeStruct 12(int) 12(int) 12(int) 12(int) 12(int) 12(int) 12(int) 12(int) 12(int) 12(int) 12(int) 12(int) + 1972: TypePointer Function 1335(struct) + 2574: 12(int) Constant 1 + 649: TypePointer Function 12(int) + 2577: 12(int) Constant 2 + 2580: 12(int) Constant 3 + 2583: 12(int) Constant 4 + 2586: 12(int) Constant 5 + 2589: 12(int) Constant 6 + 2571: 12(int) Constant 0 + 2592: 12(int) Constant 7 + 2595: 12(int) Constant 8 + 2598: 12(int) Constant 9 + 2601: 12(int) Constant 10 + 2604: 12(int) Constant 11 + 666: TypePointer Function 29(fvec4) + 149: TypeImage 13(float) 1D sampled format:Unknown + 786: TypePointer UniformConstant 149 + 4727: 786(ptr) Variable UniformConstant + 508: TypeSampler + 1145: TypePointer UniformConstant 508 + 3305: 1145(ptr) Variable UniformConstant + 510: TypeSampledImage 149 + 2935: 13(float) Constant 1036831949 + 26: TypeVector 12(int) 4 + 148: TypeImage 12(int) 1D sampled format:Unknown + 785: TypePointer UniformConstant 148 + 4743: 785(ptr) Variable UniformConstant + 511: TypeSampledImage 148 + 2821: 13(float) Constant 1045220557 + 11: TypeInt 32 0 + 23: TypeVector 11(int) 4 + 147: TypeImage 11(int) 1D sampled format:Unknown + 784: TypePointer UniformConstant 147 + 4807: 784(ptr) Variable UniformConstant + 512: TypeSampledImage 147 + 2151: 13(float) Constant 1050253722 + 150: TypeImage 13(float) 2D sampled format:Unknown + 787: TypePointer UniformConstant 150 + 5042: 787(ptr) Variable UniformConstant + 513: TypeSampledImage 150 + 19: TypeVector 13(float) 2 + 1825: 19(fvec2) ConstantComposite 2935 2821 + 151: TypeImage 12(int) 2D sampled format:Unknown + 788: TypePointer UniformConstant 151 + 5058: 788(ptr) Variable UniformConstant + 514: TypeSampledImage 151 + 2707: 13(float) Constant 1053609165 + 2028: 19(fvec2) ConstantComposite 2151 2707 + 152: TypeImage 11(int) 2D sampled format:Unknown + 789: TypePointer UniformConstant 152 + 5122: 789(ptr) Variable UniformConstant + 515: TypeSampledImage 152 + 252: 13(float) Constant 1056964608 + 2037: 13(float) Constant 1058642330 + 2684: 19(fvec2) ConstantComposite 252 2037 + 153: TypeImage 13(float) 3D sampled format:Unknown + 790: TypePointer UniformConstant 153 + 3967: 790(ptr) Variable UniformConstant + 516: TypeSampledImage 153 + 24: TypeVector 13(float) 3 + 1660: 24(fvec3) ConstantComposite 2935 2821 2151 + 154: TypeImage 12(int) 3D sampled format:Unknown + 791: TypePointer UniformConstant 154 + 3983: 791(ptr) Variable UniformConstant + 517: TypeSampledImage 154 + 2174: 24(fvec3) ConstantComposite 2707 252 2037 + 155: TypeImage 11(int) 3D sampled format:Unknown + 792: TypePointer UniformConstant 155 + 4047: 792(ptr) Variable UniformConstant + 518: TypeSampledImage 155 + 808: 13(float) Constant 1060320051 + 2593: 13(float) Constant 1061997773 + 1364: 13(float) Constant 1063675494 + 2476: 24(fvec3) ConstantComposite 808 2593 1364 + 156: TypeImage 13(float) Cube sampled format:Unknown + 793: TypePointer UniformConstant 156 + 3789: 793(ptr) Variable UniformConstant + 519: TypeSampledImage 156 + 157: TypeImage 12(int) Cube sampled format:Unknown + 794: TypePointer UniformConstant 157 + 3805: 794(ptr) Variable UniformConstant + 520: TypeSampledImage 157 + 158: TypeImage 11(int) Cube sampled format:Unknown + 795: TypePointer UniformConstant 158 + 3869: 795(ptr) Variable UniformConstant + 521: TypeSampledImage 158 + 1669: TypePointer Function 1032(struct) + 138: 13(float) Constant 1065353216 + 1284: 29(fvec4) ConstantComposite 138 138 138 138 + 650: TypePointer Function 13(float) + 667: TypePointer Output 29(fvec4) + 4656: 667(ptr) Variable Output + 651: TypePointer Output 13(float) + 4112: 651(ptr) Variable Output + 5663: 8 Function None 1282 + 24877: Label + 4104: 1669(ptr) Variable Function + 18803:1032(struct) FunctionCall 3317 + Store 4104 18803 + 13396: 666(ptr) AccessChain 4104 2571 + 7967: 29(fvec4) Load 13396 + Store 4656 7967 + 16622: 650(ptr) AccessChain 4104 2574 + 11539: 13(float) Load 16622 + Store 4112 11539 + Return + FunctionEnd + 3317:1032(struct) Function None 319 + 12442: Label + 5830: 1972(ptr) Variable Function + 5072: 1669(ptr) Variable Function + 22671: 649(ptr) AccessChain 5830 2574 + Store 22671 2574 + 20306: 649(ptr) AccessChain 5830 2577 + Store 20306 2574 + 20307: 649(ptr) AccessChain 5830 2580 + Store 20307 2574 + 20308: 649(ptr) AccessChain 5830 2583 + Store 20308 2574 + 20309: 649(ptr) AccessChain 5830 2586 + Store 20309 2574 + 20310: 649(ptr) AccessChain 5830 2589 + Store 20310 2574 + 20311: 649(ptr) AccessChain 5830 2571 + Store 20311 2574 + 20312: 649(ptr) AccessChain 5830 2592 + Store 20312 2574 + 20313: 649(ptr) AccessChain 5830 2595 + Store 20313 2574 + 20314: 649(ptr) AccessChain 5830 2598 + Store 20314 2574 + 20315: 649(ptr) AccessChain 5830 2601 + Store 20315 2574 + 20230: 649(ptr) AccessChain 5830 2604 + Store 20230 2574 + 15508: 149 Load 4727 + 12260: 508 Load 3305 + 12514: 510 SampledImage 15508 12260 + 21065: 29(fvec4) ImageSampleImplicitLod 12514 2935 + 9477: 148 Load 4743 + 16280: 508 Load 3305 + 12515: 511 SampledImage 9477 16280 + 21066: 26(ivec4) ImageSampleImplicitLod 12515 2821 + 9478: 147 Load 4807 + 16281: 508 Load 3305 + 12516: 512 SampledImage 9478 16281 + 21067: 23(ivec4) ImageSampleImplicitLod 12516 2151 + 9479: 150 Load 5042 + 16282: 508 Load 3305 + 12517: 513 SampledImage 9479 16282 + 21068: 29(fvec4) ImageSampleImplicitLod 12517 1825 + 9480: 151 Load 5058 + 16283: 508 Load 3305 + 12518: 514 SampledImage 9480 16283 + 21069: 26(ivec4) ImageSampleImplicitLod 12518 2028 + 9481: 152 Load 5122 + 16284: 508 Load 3305 + 12519: 515 SampledImage 9481 16284 + 21070: 23(ivec4) ImageSampleImplicitLod 12519 2684 + 9482: 153 Load 3967 + 16285: 508 Load 3305 + 12520: 516 SampledImage 9482 16285 + 21071: 29(fvec4) ImageSampleImplicitLod 12520 1660 + 9483: 154 Load 3983 + 16286: 508 Load 3305 + 12521: 517 SampledImage 9483 16286 + 21072: 26(ivec4) ImageSampleImplicitLod 12521 2174 + 9484: 155 Load 4047 + 16287: 508 Load 3305 + 12522: 518 SampledImage 9484 16287 + 21073: 23(ivec4) ImageSampleImplicitLod 12522 2476 + 9485: 156 Load 3789 + 16288: 508 Load 3305 + 12523: 519 SampledImage 9485 16288 + 21074: 29(fvec4) ImageSampleImplicitLod 12523 1660 + 9486: 157 Load 3805 + 16289: 508 Load 3305 + 12524: 520 SampledImage 9486 16289 + 21075: 26(ivec4) ImageSampleImplicitLod 12524 2174 + 9487: 158 Load 3869 + 16290: 508 Load 3305 + 12590: 521 SampledImage 9487 16290 + 20392: 23(ivec4) ImageSampleImplicitLod 12590 2476 + 14275: 666(ptr) AccessChain 5072 2571 + Store 14275 1284 + 20231: 650(ptr) AccessChain 5072 2574 + Store 20231 138 + 8692:1032(struct) Load 5072 + ReturnValue 8692 + FunctionEnd 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 new file mode 100644 index 0000000..5af75db --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.sample.basic.none.frag.out @@ -0,0 +1,312 @@ +remap.hlsl.sample.basic.none.frag +WARNING: 0:4: 'immediate sampler state' : unimplemented + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 198 + + Capability Shader + Capability Sampled1D + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 188 192 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + MemberName 8(PS_OUTPUT) 1 "Depth" + Name 10 "@main(" + Name 13 "MemberTest" + MemberName 13(MemberTest) 0 "Sample" + MemberName 13(MemberTest) 1 "CalculateLevelOfDetail" + MemberName 13(MemberTest) 2 "CalculateLevelOfDetailUnclamped" + MemberName 13(MemberTest) 3 "Gather" + MemberName 13(MemberTest) 4 "GetDimensions" + MemberName 13(MemberTest) 5 "GetSamplePosition" + MemberName 13(MemberTest) 6 "Load" + MemberName 13(MemberTest) 7 "SampleBias" + MemberName 13(MemberTest) 8 "SampleCmp" + MemberName 13(MemberTest) 9 "SampleCmpLevelZero" + MemberName 13(MemberTest) 10 "SampleGrad" + MemberName 13(MemberTest) 11 "SampleLevel" + Name 15 "mtest" + Name 42 "txval10" + Name 45 "g_tTex1df4" + Name 49 "g_sSamp" + Name 57 "txval11" + Name 60 "g_tTex1di4" + Name 70 "txval12" + Name 73 "g_tTex1du4" + Name 80 "txval20" + Name 83 "g_tTex2df4" + Name 91 "txval21" + Name 94 "g_tTex2di4" + Name 102 "txval22" + Name 105 "g_tTex2du4" + Name 114 "txval30" + Name 117 "g_tTex3df4" + Name 125 "txval31" + Name 128 "g_tTex3di4" + Name 135 "txval32" + Name 138 "g_tTex3du4" + Name 148 "txval40" + Name 151 "g_tTexcdf4" + Name 157 "txval41" + Name 160 "g_tTexcdi4" + Name 166 "txval42" + Name 169 "g_tTexcdu4" + Name 176 "psout" + Name 185 "flattenTemp" + Name 188 "Color" + Name 192 "Depth" + Name 195 "g_sSamp2d" + Name 196 "g_sSamp2D_b" + Name 197 "g_tTex1df4a" + Decorate 45(g_tTex1df4) DescriptorSet 0 + Decorate 45(g_tTex1df4) Binding 0 + Decorate 49(g_sSamp) DescriptorSet 0 + Decorate 49(g_sSamp) Binding 0 + Decorate 60(g_tTex1di4) DescriptorSet 0 + Decorate 73(g_tTex1du4) DescriptorSet 0 + Decorate 83(g_tTex2df4) DescriptorSet 0 + Decorate 94(g_tTex2di4) DescriptorSet 0 + Decorate 105(g_tTex2du4) DescriptorSet 0 + Decorate 117(g_tTex3df4) DescriptorSet 0 + Decorate 128(g_tTex3di4) DescriptorSet 0 + Decorate 138(g_tTex3du4) DescriptorSet 0 + 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 195(g_sSamp2d) DescriptorSet 0 + Decorate 196(g_sSamp2D_b) DescriptorSet 0 + Decorate 197(g_tTex1df4a) DescriptorSet 0 + Decorate 197(g_tTex1df4a) Binding 1 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8(PS_OUTPUT): TypeStruct 7(fvec4) 6(float) + 9: TypeFunction 8(PS_OUTPUT) + 12: TypeInt 32 1 + 13(MemberTest): TypeStruct 12(int) 12(int) 12(int) 12(int) 12(int) 12(int) 12(int) 12(int) 12(int) 12(int) 12(int) 12(int) + 14: TypePointer Function 13(MemberTest) + 16: 12(int) Constant 1 + 17: TypePointer Function 12(int) + 19: 12(int) Constant 2 + 21: 12(int) Constant 3 + 23: 12(int) Constant 4 + 25: 12(int) Constant 5 + 27: 12(int) Constant 6 + 29: 12(int) Constant 0 + 31: 12(int) Constant 7 + 33: 12(int) Constant 8 + 35: 12(int) Constant 9 + 37: 12(int) Constant 10 + 39: 12(int) Constant 11 + 41: TypePointer Function 7(fvec4) + 43: TypeImage 6(float) 1D sampled format:Unknown + 44: TypePointer UniformConstant 43 + 45(g_tTex1df4): 44(ptr) Variable UniformConstant + 47: TypeSampler + 48: TypePointer UniformConstant 47 + 49(g_sSamp): 48(ptr) Variable UniformConstant + 51: TypeSampledImage 43 + 53: 6(float) Constant 1036831949 + 55: TypeVector 12(int) 4 + 56: TypePointer Function 55(ivec4) + 58: TypeImage 12(int) 1D sampled format:Unknown + 59: TypePointer UniformConstant 58 + 60(g_tTex1di4): 59(ptr) Variable UniformConstant + 63: TypeSampledImage 58 + 65: 6(float) Constant 1045220557 + 67: TypeInt 32 0 + 68: TypeVector 67(int) 4 + 69: TypePointer Function 68(ivec4) + 71: TypeImage 67(int) 1D sampled format:Unknown + 72: TypePointer UniformConstant 71 + 73(g_tTex1du4): 72(ptr) Variable UniformConstant + 76: TypeSampledImage 71 + 78: 6(float) Constant 1050253722 + 81: TypeImage 6(float) 2D sampled format:Unknown + 82: TypePointer UniformConstant 81 + 83(g_tTex2df4): 82(ptr) Variable UniformConstant + 86: TypeSampledImage 81 + 88: TypeVector 6(float) 2 + 89: 88(fvec2) ConstantComposite 53 65 + 92: TypeImage 12(int) 2D sampled format:Unknown + 93: TypePointer UniformConstant 92 + 94(g_tTex2di4): 93(ptr) Variable UniformConstant + 97: TypeSampledImage 92 + 99: 6(float) Constant 1053609165 + 100: 88(fvec2) ConstantComposite 78 99 + 103: TypeImage 67(int) 2D sampled format:Unknown + 104: TypePointer UniformConstant 103 + 105(g_tTex2du4): 104(ptr) Variable UniformConstant + 108: TypeSampledImage 103 + 110: 6(float) Constant 1056964608 + 111: 6(float) Constant 1058642330 + 112: 88(fvec2) ConstantComposite 110 111 + 115: TypeImage 6(float) 3D sampled format:Unknown + 116: TypePointer UniformConstant 115 + 117(g_tTex3df4): 116(ptr) Variable UniformConstant + 120: TypeSampledImage 115 + 122: TypeVector 6(float) 3 + 123: 122(fvec3) ConstantComposite 53 65 78 + 126: TypeImage 12(int) 3D sampled format:Unknown + 127: TypePointer UniformConstant 126 + 128(g_tTex3di4): 127(ptr) Variable UniformConstant + 131: TypeSampledImage 126 + 133: 122(fvec3) ConstantComposite 99 110 111 + 136: TypeImage 67(int) 3D sampled format:Unknown + 137: TypePointer UniformConstant 136 + 138(g_tTex3du4): 137(ptr) Variable UniformConstant + 141: TypeSampledImage 136 + 143: 6(float) Constant 1060320051 + 144: 6(float) Constant 1061997773 + 145: 6(float) Constant 1063675494 + 146: 122(fvec3) ConstantComposite 143 144 145 + 149: TypeImage 6(float) Cube sampled format:Unknown + 150: TypePointer UniformConstant 149 + 151(g_tTexcdf4): 150(ptr) Variable UniformConstant + 154: TypeSampledImage 149 + 158: TypeImage 12(int) Cube sampled format:Unknown + 159: TypePointer UniformConstant 158 + 160(g_tTexcdi4): 159(ptr) Variable UniformConstant + 163: TypeSampledImage 158 + 167: TypeImage 67(int) Cube sampled format:Unknown + 168: TypePointer UniformConstant 167 + 169(g_tTexcdu4): 168(ptr) Variable UniformConstant + 172: TypeSampledImage 167 + 175: TypePointer Function 8(PS_OUTPUT) + 177: 6(float) Constant 1065353216 + 178: 7(fvec4) ConstantComposite 177 177 177 177 + 180: TypePointer Function 6(float) + 187: TypePointer Output 7(fvec4) + 188(Color): 187(ptr) Variable Output + 191: TypePointer Output 6(float) + 192(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 + 4(main): 2 Function None 3 + 5: Label +185(flattenTemp): 175(ptr) Variable Function + 186:8(PS_OUTPUT) FunctionCall 10(@main() + Store 185(flattenTemp) 186 + 189: 41(ptr) AccessChain 185(flattenTemp) 29 + 190: 7(fvec4) Load 189 + Store 188(Color) 190 + 193: 180(ptr) AccessChain 185(flattenTemp) 16 + 194: 6(float) Load 193 + Store 192(Depth) 194 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 15(mtest): 14(ptr) Variable Function + 42(txval10): 41(ptr) Variable Function + 57(txval11): 56(ptr) Variable Function + 70(txval12): 69(ptr) Variable Function + 80(txval20): 41(ptr) Variable Function + 91(txval21): 56(ptr) Variable Function + 102(txval22): 69(ptr) Variable Function + 114(txval30): 41(ptr) Variable Function + 125(txval31): 56(ptr) Variable Function + 135(txval32): 69(ptr) Variable Function + 148(txval40): 41(ptr) Variable Function + 157(txval41): 56(ptr) Variable Function + 166(txval42): 69(ptr) Variable Function + 176(psout): 175(ptr) Variable Function + 18: 17(ptr) AccessChain 15(mtest) 16 + Store 18 16 + 20: 17(ptr) AccessChain 15(mtest) 19 + Store 20 16 + 22: 17(ptr) AccessChain 15(mtest) 21 + Store 22 16 + 24: 17(ptr) AccessChain 15(mtest) 23 + Store 24 16 + 26: 17(ptr) AccessChain 15(mtest) 25 + Store 26 16 + 28: 17(ptr) AccessChain 15(mtest) 27 + Store 28 16 + 30: 17(ptr) AccessChain 15(mtest) 29 + Store 30 16 + 32: 17(ptr) AccessChain 15(mtest) 31 + Store 32 16 + 34: 17(ptr) AccessChain 15(mtest) 33 + Store 34 16 + 36: 17(ptr) AccessChain 15(mtest) 35 + Store 36 16 + 38: 17(ptr) AccessChain 15(mtest) 37 + Store 38 16 + 40: 17(ptr) AccessChain 15(mtest) 39 + Store 40 16 + 46: 43 Load 45(g_tTex1df4) + 50: 47 Load 49(g_sSamp) + 52: 51 SampledImage 46 50 + 54: 7(fvec4) ImageSampleImplicitLod 52 53 + Store 42(txval10) 54 + 61: 58 Load 60(g_tTex1di4) + 62: 47 Load 49(g_sSamp) + 64: 63 SampledImage 61 62 + 66: 55(ivec4) ImageSampleImplicitLod 64 65 + Store 57(txval11) 66 + 74: 71 Load 73(g_tTex1du4) + 75: 47 Load 49(g_sSamp) + 77: 76 SampledImage 74 75 + 79: 68(ivec4) ImageSampleImplicitLod 77 78 + Store 70(txval12) 79 + 84: 81 Load 83(g_tTex2df4) + 85: 47 Load 49(g_sSamp) + 87: 86 SampledImage 84 85 + 90: 7(fvec4) ImageSampleImplicitLod 87 89 + Store 80(txval20) 90 + 95: 92 Load 94(g_tTex2di4) + 96: 47 Load 49(g_sSamp) + 98: 97 SampledImage 95 96 + 101: 55(ivec4) ImageSampleImplicitLod 98 100 + Store 91(txval21) 101 + 106: 103 Load 105(g_tTex2du4) + 107: 47 Load 49(g_sSamp) + 109: 108 SampledImage 106 107 + 113: 68(ivec4) ImageSampleImplicitLod 109 112 + Store 102(txval22) 113 + 118: 115 Load 117(g_tTex3df4) + 119: 47 Load 49(g_sSamp) + 121: 120 SampledImage 118 119 + 124: 7(fvec4) ImageSampleImplicitLod 121 123 + Store 114(txval30) 124 + 129: 126 Load 128(g_tTex3di4) + 130: 47 Load 49(g_sSamp) + 132: 131 SampledImage 129 130 + 134: 55(ivec4) ImageSampleImplicitLod 132 133 + Store 125(txval31) 134 + 139: 136 Load 138(g_tTex3du4) + 140: 47 Load 49(g_sSamp) + 142: 141 SampledImage 139 140 + 147: 68(ivec4) ImageSampleImplicitLod 142 146 + Store 135(txval32) 147 + 152: 149 Load 151(g_tTexcdf4) + 153: 47 Load 49(g_sSamp) + 155: 154 SampledImage 152 153 + 156: 7(fvec4) ImageSampleImplicitLod 155 123 + Store 148(txval40) 156 + 161: 158 Load 160(g_tTexcdi4) + 162: 47 Load 49(g_sSamp) + 164: 163 SampledImage 161 162 + 165: 55(ivec4) ImageSampleImplicitLod 164 133 + Store 157(txval41) 165 + 170: 167 Load 169(g_tTexcdu4) + 171: 47 Load 49(g_sSamp) + 173: 172 SampledImage 170 171 + 174: 68(ivec4) ImageSampleImplicitLod 173 146 + Store 166(txval42) 174 + 179: 41(ptr) AccessChain 176(psout) 29 + Store 179 178 + 181: 180(ptr) AccessChain 176(psout) 16 + Store 181 177 + 182:8(PS_OUTPUT) Load 176(psout) + ReturnValue 182 + FunctionEnd 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 new file mode 100644 index 0000000..d76bdd9 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.sample.basic.strip.frag.out @@ -0,0 +1,261 @@ +remap.hlsl.sample.basic.strip.frag +WARNING: 0:4: 'immediate sampler state' : unimplemented + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 198 + + Capability Shader + Capability Sampled1D + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 188 192 + ExecutionMode 4 OriginUpperLeft + Decorate 45 DescriptorSet 0 + Decorate 45 Binding 0 + Decorate 49 DescriptorSet 0 + Decorate 49 Binding 0 + Decorate 60 DescriptorSet 0 + Decorate 73 DescriptorSet 0 + Decorate 83 DescriptorSet 0 + Decorate 94 DescriptorSet 0 + Decorate 105 DescriptorSet 0 + Decorate 117 DescriptorSet 0 + Decorate 128 DescriptorSet 0 + Decorate 138 DescriptorSet 0 + Decorate 151 DescriptorSet 0 + Decorate 160 DescriptorSet 0 + Decorate 169 DescriptorSet 0 + Decorate 188 Location 0 + Decorate 192 BuiltIn FragDepth + Decorate 195 DescriptorSet 0 + Decorate 196 DescriptorSet 0 + Decorate 197 DescriptorSet 0 + Decorate 197 Binding 1 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypeStruct 7(fvec4) 6(float) + 9: TypeFunction 8(struct) + 12: TypeInt 32 1 + 13: TypeStruct 12(int) 12(int) 12(int) 12(int) 12(int) 12(int) 12(int) 12(int) 12(int) 12(int) 12(int) 12(int) + 14: TypePointer Function 13(struct) + 16: 12(int) Constant 1 + 17: TypePointer Function 12(int) + 19: 12(int) Constant 2 + 21: 12(int) Constant 3 + 23: 12(int) Constant 4 + 25: 12(int) Constant 5 + 27: 12(int) Constant 6 + 29: 12(int) Constant 0 + 31: 12(int) Constant 7 + 33: 12(int) Constant 8 + 35: 12(int) Constant 9 + 37: 12(int) Constant 10 + 39: 12(int) Constant 11 + 41: TypePointer Function 7(fvec4) + 43: TypeImage 6(float) 1D sampled format:Unknown + 44: TypePointer UniformConstant 43 + 45: 44(ptr) Variable UniformConstant + 47: TypeSampler + 48: TypePointer UniformConstant 47 + 49: 48(ptr) Variable UniformConstant + 51: TypeSampledImage 43 + 53: 6(float) Constant 1036831949 + 55: TypeVector 12(int) 4 + 56: TypePointer Function 55(ivec4) + 58: TypeImage 12(int) 1D sampled format:Unknown + 59: TypePointer UniformConstant 58 + 60: 59(ptr) Variable UniformConstant + 63: TypeSampledImage 58 + 65: 6(float) Constant 1045220557 + 67: TypeInt 32 0 + 68: TypeVector 67(int) 4 + 69: TypePointer Function 68(ivec4) + 71: TypeImage 67(int) 1D sampled format:Unknown + 72: TypePointer UniformConstant 71 + 73: 72(ptr) Variable UniformConstant + 76: TypeSampledImage 71 + 78: 6(float) Constant 1050253722 + 81: TypeImage 6(float) 2D sampled format:Unknown + 82: TypePointer UniformConstant 81 + 83: 82(ptr) Variable UniformConstant + 86: TypeSampledImage 81 + 88: TypeVector 6(float) 2 + 89: 88(fvec2) ConstantComposite 53 65 + 92: TypeImage 12(int) 2D sampled format:Unknown + 93: TypePointer UniformConstant 92 + 94: 93(ptr) Variable UniformConstant + 97: TypeSampledImage 92 + 99: 6(float) Constant 1053609165 + 100: 88(fvec2) ConstantComposite 78 99 + 103: TypeImage 67(int) 2D sampled format:Unknown + 104: TypePointer UniformConstant 103 + 105: 104(ptr) Variable UniformConstant + 108: TypeSampledImage 103 + 110: 6(float) Constant 1056964608 + 111: 6(float) Constant 1058642330 + 112: 88(fvec2) ConstantComposite 110 111 + 115: TypeImage 6(float) 3D sampled format:Unknown + 116: TypePointer UniformConstant 115 + 117: 116(ptr) Variable UniformConstant + 120: TypeSampledImage 115 + 122: TypeVector 6(float) 3 + 123: 122(fvec3) ConstantComposite 53 65 78 + 126: TypeImage 12(int) 3D sampled format:Unknown + 127: TypePointer UniformConstant 126 + 128: 127(ptr) Variable UniformConstant + 131: TypeSampledImage 126 + 133: 122(fvec3) ConstantComposite 99 110 111 + 136: TypeImage 67(int) 3D sampled format:Unknown + 137: TypePointer UniformConstant 136 + 138: 137(ptr) Variable UniformConstant + 141: TypeSampledImage 136 + 143: 6(float) Constant 1060320051 + 144: 6(float) Constant 1061997773 + 145: 6(float) Constant 1063675494 + 146: 122(fvec3) ConstantComposite 143 144 145 + 149: TypeImage 6(float) Cube sampled format:Unknown + 150: TypePointer UniformConstant 149 + 151: 150(ptr) Variable UniformConstant + 154: TypeSampledImage 149 + 158: TypeImage 12(int) Cube sampled format:Unknown + 159: TypePointer UniformConstant 158 + 160: 159(ptr) Variable UniformConstant + 163: TypeSampledImage 158 + 167: TypeImage 67(int) Cube sampled format:Unknown + 168: TypePointer UniformConstant 167 + 169: 168(ptr) Variable UniformConstant + 172: TypeSampledImage 167 + 175: TypePointer Function 8(struct) + 177: 6(float) Constant 1065353216 + 178: 7(fvec4) ConstantComposite 177 177 177 177 + 180: TypePointer Function 6(float) + 187: TypePointer Output 7(fvec4) + 188: 187(ptr) Variable Output + 191: TypePointer Output 6(float) + 192: 191(ptr) Variable Output + 195: 48(ptr) Variable UniformConstant + 196: 48(ptr) Variable UniformConstant + 197: 44(ptr) Variable UniformConstant + 4: 2 Function None 3 + 5: Label + 185: 175(ptr) Variable Function + 186: 8(struct) FunctionCall 10 + Store 185 186 + 189: 41(ptr) AccessChain 185 29 + 190: 7(fvec4) Load 189 + Store 188 190 + 193: 180(ptr) AccessChain 185 16 + 194: 6(float) Load 193 + Store 192 194 + Return + FunctionEnd + 10: 8(struct) Function None 9 + 11: Label + 15: 14(ptr) Variable Function + 42: 41(ptr) Variable Function + 57: 56(ptr) Variable Function + 70: 69(ptr) Variable Function + 80: 41(ptr) Variable Function + 91: 56(ptr) Variable Function + 102: 69(ptr) Variable Function + 114: 41(ptr) Variable Function + 125: 56(ptr) Variable Function + 135: 69(ptr) Variable Function + 148: 41(ptr) Variable Function + 157: 56(ptr) Variable Function + 166: 69(ptr) Variable Function + 176: 175(ptr) Variable Function + 18: 17(ptr) AccessChain 15 16 + Store 18 16 + 20: 17(ptr) AccessChain 15 19 + Store 20 16 + 22: 17(ptr) AccessChain 15 21 + Store 22 16 + 24: 17(ptr) AccessChain 15 23 + Store 24 16 + 26: 17(ptr) AccessChain 15 25 + Store 26 16 + 28: 17(ptr) AccessChain 15 27 + Store 28 16 + 30: 17(ptr) AccessChain 15 29 + Store 30 16 + 32: 17(ptr) AccessChain 15 31 + Store 32 16 + 34: 17(ptr) AccessChain 15 33 + Store 34 16 + 36: 17(ptr) AccessChain 15 35 + Store 36 16 + 38: 17(ptr) AccessChain 15 37 + Store 38 16 + 40: 17(ptr) AccessChain 15 39 + Store 40 16 + 46: 43 Load 45 + 50: 47 Load 49 + 52: 51 SampledImage 46 50 + 54: 7(fvec4) ImageSampleImplicitLod 52 53 + Store 42 54 + 61: 58 Load 60 + 62: 47 Load 49 + 64: 63 SampledImage 61 62 + 66: 55(ivec4) ImageSampleImplicitLod 64 65 + Store 57 66 + 74: 71 Load 73 + 75: 47 Load 49 + 77: 76 SampledImage 74 75 + 79: 68(ivec4) ImageSampleImplicitLod 77 78 + Store 70 79 + 84: 81 Load 83 + 85: 47 Load 49 + 87: 86 SampledImage 84 85 + 90: 7(fvec4) ImageSampleImplicitLod 87 89 + Store 80 90 + 95: 92 Load 94 + 96: 47 Load 49 + 98: 97 SampledImage 95 96 + 101: 55(ivec4) ImageSampleImplicitLod 98 100 + Store 91 101 + 106: 103 Load 105 + 107: 47 Load 49 + 109: 108 SampledImage 106 107 + 113: 68(ivec4) ImageSampleImplicitLod 109 112 + Store 102 113 + 118: 115 Load 117 + 119: 47 Load 49 + 121: 120 SampledImage 118 119 + 124: 7(fvec4) ImageSampleImplicitLod 121 123 + Store 114 124 + 129: 126 Load 128 + 130: 47 Load 49 + 132: 131 SampledImage 129 130 + 134: 55(ivec4) ImageSampleImplicitLod 132 133 + Store 125 134 + 139: 136 Load 138 + 140: 47 Load 49 + 142: 141 SampledImage 139 140 + 147: 68(ivec4) ImageSampleImplicitLod 142 146 + Store 135 147 + 152: 149 Load 151 + 153: 47 Load 49 + 155: 154 SampledImage 152 153 + 156: 7(fvec4) ImageSampleImplicitLod 155 123 + Store 148 156 + 161: 158 Load 160 + 162: 47 Load 49 + 164: 163 SampledImage 161 162 + 165: 55(ivec4) ImageSampleImplicitLod 164 133 + Store 157 165 + 170: 167 Load 169 + 171: 47 Load 49 + 173: 172 SampledImage 170 171 + 174: 68(ivec4) ImageSampleImplicitLod 173 146 + Store 166 174 + 179: 41(ptr) AccessChain 176 29 + Store 179 178 + 181: 180(ptr) AccessChain 176 16 + Store 181 177 + 182: 8(struct) Load 176 + ReturnValue 182 + FunctionEnd 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 new file mode 100644 index 0000000..330aecd --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.templatetypes.everything.frag.out @@ -0,0 +1,38 @@ +remap.hlsl.templatetypes.everything.frag +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 24954 + + Capability Shader + Capability Float64 + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 5663 "main" 4872 4045 + ExecutionMode 5663 OriginUpperLeft + Decorate 4872 Location 0 + Decorate 4045 Location 0 + 8: TypeVoid + 1282: TypeFunction 8 + 13: TypeFloat 32 + 29: TypeVector 13(float) 4 + 666: TypePointer Function 29(fvec4) + 255: TypeFunction 13(float) 666(ptr) + 2572: 13(float) Constant 0 + 667: TypePointer Input 29(fvec4) + 4872: 667(ptr) Variable Input + 650: TypePointer Output 13(float) + 4045: 650(ptr) Variable Output + 5663: 8 Function None 1282 + 24953: Label + 5786: 666(ptr) Variable Function + 24021: 29(fvec4) Load 4872 + Store 5786 24021 + 9338: 13(float) FunctionCall 3917 5786 + Store 4045 9338 + Return + FunctionEnd + 3917: 13(float) Function None 255 + 10636: 666(ptr) FunctionParameter + 10637: Label + ReturnValue 2572 + FunctionEnd 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 new file mode 100644 index 0000000..c5d8a01 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.templatetypes.none.frag.out @@ -0,0 +1,239 @@ +remap.hlsl.templatetypes.none.frag +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 160 + + Capability Shader + Capability Float64 + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 153 156 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 11 "@main(vf4;" + Name 10 "input" + Name 13 "r00" + Name 19 "r01" + Name 24 "r12" + Name 28 "r13" + Name 31 "r14" + Name 34 "r15" + Name 38 "r16" + Name 42 "r20" + Name 47 "r21" + Name 52 "r22" + Name 56 "r23" + Name 61 "r24" + Name 66 "r30" + Name 70 "r31" + Name 75 "r32" + Name 79 "r33" + Name 84 "r34" + Name 89 "r40" + Name 93 "r41" + Name 96 "r42" + Name 99 "r43" + Name 104 "r44" + Name 109 "r50" + Name 126 "r51" + Name 129 "r61" + Name 134 "r62" + Name 140 "r65" + Name 145 "r66" + Name 151 "input" + Name 153 "input" + Name 156 "@entryPointOutput" + Name 157 "param" + Decorate 153(input) Location 0 + Decorate 156(@entryPointOutput) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 9: TypeFunction 6(float) 8(ptr) + 14: 6(float) Constant 1065353216 + 15: 6(float) Constant 1073741824 + 16: 6(float) Constant 1077936128 + 17: 6(float) Constant 1082130432 + 18: 7(fvec4) ConstantComposite 14 15 16 17 + 20: 6(float) Constant 1084227584 + 21: 7(fvec4) ConstantComposite 15 16 17 20 + 22: TypeBool + 23: TypePointer Function 22(bool) + 25: 22(bool) ConstantFalse + 26: TypeInt 32 1 + 27: TypePointer Function 26(int) + 29: 26(int) Constant 1 + 30: TypePointer Function 6(float) + 32: TypeFloat 64 + 33: TypePointer Function 32(float) + 35: 32(float) Constant 0 1072693248 + 36: TypeInt 32 0 + 37: TypePointer Function 36(int) + 39: 36(int) Constant 1 + 40: TypeVector 22(bool) 2 + 41: TypePointer Function 40(bvec2) + 43: 22(bool) ConstantTrue + 44: 40(bvec2) ConstantComposite 25 43 + 45: TypeVector 26(int) 2 + 46: TypePointer Function 45(ivec2) + 48: 26(int) Constant 2 + 49: 45(ivec2) ConstantComposite 29 48 + 50: TypeVector 6(float) 2 + 51: TypePointer Function 50(fvec2) + 53: 50(fvec2) ConstantComposite 14 15 + 54: TypeVector 32(float) 2 + 55: TypePointer Function 54(fvec2) + 57: 32(float) Constant 0 1073741824 + 58: 54(fvec2) ConstantComposite 35 57 + 59: TypeVector 36(int) 2 + 60: TypePointer Function 59(ivec2) + 62: 36(int) Constant 2 + 63: 59(ivec2) ConstantComposite 39 62 + 64: TypeVector 22(bool) 3 + 65: TypePointer Function 64(bvec3) + 67: 64(bvec3) ConstantComposite 25 43 43 + 68: TypeVector 26(int) 3 + 69: TypePointer Function 68(ivec3) + 71: 26(int) Constant 3 + 72: 68(ivec3) ConstantComposite 29 48 71 + 73: TypeVector 6(float) 3 + 74: TypePointer Function 73(fvec3) + 76: 73(fvec3) ConstantComposite 14 15 16 + 77: TypeVector 32(float) 3 + 78: TypePointer Function 77(fvec3) + 80: 32(float) Constant 0 1074266112 + 81: 77(fvec3) ConstantComposite 35 57 80 + 82: TypeVector 36(int) 3 + 83: TypePointer Function 82(ivec3) + 85: 36(int) Constant 3 + 86: 82(ivec3) ConstantComposite 39 62 85 + 87: TypeVector 22(bool) 4 + 88: TypePointer Function 87(bvec4) + 90: 87(bvec4) ConstantComposite 25 43 43 25 + 91: TypeVector 26(int) 4 + 92: TypePointer Function 91(ivec4) + 94: 26(int) Constant 4 + 95: 91(ivec4) ConstantComposite 29 48 71 94 + 97: TypeVector 32(float) 4 + 98: TypePointer Function 97(fvec4) + 100: 32(float) Constant 0 1074790400 + 101: 97(fvec4) ConstantComposite 35 57 80 100 + 102: TypeVector 36(int) 4 + 103: TypePointer Function 102(ivec4) + 105: 36(int) Constant 4 + 106: 102(ivec4) ConstantComposite 39 62 85 105 + 107: TypeMatrix 7(fvec4) 4 + 108: TypePointer Function 107 + 110: 6(float) Constant 0 + 111: 7(fvec4) ConstantComposite 110 14 15 16 + 112: 6(float) Constant 1086324736 + 113: 6(float) Constant 1088421888 + 114: 7(fvec4) ConstantComposite 17 20 112 113 + 115: 6(float) Constant 1090519040 + 116: 6(float) Constant 1091567616 + 117: 6(float) Constant 1092616192 + 118: 6(float) Constant 1093664768 + 119: 7(fvec4) ConstantComposite 115 116 117 118 + 120: 6(float) Constant 1094713344 + 121: 6(float) Constant 1095761920 + 122: 6(float) Constant 1096810496 + 123: 6(float) Constant 1097859072 + 124: 7(fvec4) ConstantComposite 120 121 122 123 + 125: 107 ConstantComposite 111 114 119 124 + 127: TypeMatrix 73(fvec3) 2 + 128: TypePointer Function 127 + 130: 73(fvec3) ConstantComposite 17 20 112 + 131: 127 ConstantComposite 76 130 + 132: TypeMatrix 50(fvec2) 3 + 133: TypePointer Function 132 + 135: 50(fvec2) ConstantComposite 16 17 + 136: 50(fvec2) ConstantComposite 20 112 + 137: 132 ConstantComposite 53 135 136 + 138: TypeMatrix 50(fvec2) 4 + 139: TypePointer Function 138 + 141: 50(fvec2) ConstantComposite 113 115 + 142: 138 ConstantComposite 53 135 136 141 + 143: TypeMatrix 73(fvec3) 4 + 144: TypePointer Function 143 + 146: 73(fvec3) ConstantComposite 113 115 116 + 147: 73(fvec3) ConstantComposite 117 118 120 + 148: 143 ConstantComposite 76 130 146 147 + 152: TypePointer Input 7(fvec4) + 153(input): 152(ptr) Variable Input + 155: TypePointer Output 6(float) +156(@entryPointOutput): 155(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 151(input): 8(ptr) Variable Function + 157(param): 8(ptr) Variable Function + 154: 7(fvec4) Load 153(input) + Store 151(input) 154 + 158: 7(fvec4) Load 151(input) + Store 157(param) 158 + 159: 6(float) FunctionCall 11(@main(vf4;) 157(param) + Store 156(@entryPointOutput) 159 + Return + FunctionEnd + 11(@main(vf4;): 6(float) Function None 9 + 10(input): 8(ptr) FunctionParameter + 12: Label + 13(r00): 8(ptr) Variable Function + 19(r01): 8(ptr) Variable Function + 24(r12): 23(ptr) Variable Function + 28(r13): 27(ptr) Variable Function + 31(r14): 30(ptr) Variable Function + 34(r15): 33(ptr) Variable Function + 38(r16): 37(ptr) Variable Function + 42(r20): 41(ptr) Variable Function + 47(r21): 46(ptr) Variable Function + 52(r22): 51(ptr) Variable Function + 56(r23): 55(ptr) Variable Function + 61(r24): 60(ptr) Variable Function + 66(r30): 65(ptr) Variable Function + 70(r31): 69(ptr) Variable Function + 75(r32): 74(ptr) Variable Function + 79(r33): 78(ptr) Variable Function + 84(r34): 83(ptr) Variable Function + 89(r40): 88(ptr) Variable Function + 93(r41): 92(ptr) Variable Function + 96(r42): 8(ptr) Variable Function + 99(r43): 98(ptr) Variable Function + 104(r44): 103(ptr) Variable Function + 109(r50): 108(ptr) Variable Function + 126(r51): 108(ptr) Variable Function + 129(r61): 128(ptr) Variable Function + 134(r62): 133(ptr) Variable Function + 140(r65): 139(ptr) Variable Function + 145(r66): 144(ptr) Variable Function + Store 13(r00) 18 + Store 19(r01) 21 + Store 24(r12) 25 + Store 28(r13) 29 + Store 31(r14) 14 + Store 34(r15) 35 + Store 38(r16) 39 + Store 42(r20) 44 + Store 47(r21) 49 + Store 52(r22) 53 + Store 56(r23) 58 + Store 61(r24) 63 + Store 66(r30) 67 + Store 70(r31) 72 + Store 75(r32) 76 + Store 79(r33) 81 + Store 84(r34) 86 + Store 89(r40) 90 + Store 93(r41) 95 + Store 96(r42) 18 + Store 99(r43) 101 + Store 104(r44) 106 + Store 109(r50) 125 + Store 126(r51) 125 + Store 129(r61) 131 + Store 134(r62) 137 + Store 140(r65) 142 + Store 145(r66) 148 + ReturnValue 110 + FunctionEnd 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 new file mode 100644 index 0000000..d20564c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.if.everything.frag.out @@ -0,0 +1,43 @@ +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 +// Id's are bound by 22855 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 5663 "main" 3773 4539 + ExecutionMode 5663 OriginUpperLeft + 8: TypeVoid + 1282: TypeFunction 8 + 13: TypeFloat 32 + 650: TypePointer Input 13(float) + 3773: 650(ptr) Variable Input + 24: 13(float) Constant 1073741824 + 9: TypeBool + 29: TypeVector 13(float) 4 + 666: TypePointer Output 29(fvec4) + 4539: 666(ptr) Variable Output + 947: 13(float) Constant 3204448256 + 5663: 8 Function None 1282 + 7911: Label + 21734: 13(float) Load 3773 + 13508: 9(bool) FOrdGreaterThan 21734 24 + SelectionMerge 19578 None + BranchConditional 13508 13182 10142 + 13182: Label + 9496: 13(float) Load 3773 + 17615: 29(fvec4) CompositeConstruct 9496 9496 9496 9496 + Store 4539 17615 + Branch 19578 + 10142: Label + 22854: 13(float) Load 3773 + 9982: 13(float) FAdd 22854 947 + 12421: 29(fvec4) CompositeConstruct 9982 9982 9982 9982 + Store 4539 12421 + Branch 19578 + 19578: Label + Return + FunctionEnd 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 new file mode 100644 index 0000000..081d5cd --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.if.none.frag.out @@ -0,0 +1,47 @@ +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 +// Id's are bound by 25 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 8 17 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + Name 4 "main" + Name 8 "inf" + Name 17 "outf4" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypePointer Input 6(float) + 8(inf): 7(ptr) Variable Input + 10: 6(float) Constant 1073741824 + 11: TypeBool + 15: TypeVector 6(float) 4 + 16: TypePointer Output 15(fvec4) + 17(outf4): 16(ptr) Variable Output + 22: 6(float) Constant 3204448256 + 4(main): 2 Function None 3 + 5: Label + 9: 6(float) Load 8(inf) + 12: 11(bool) FOrdGreaterThan 9 10 + SelectionMerge 14 None + BranchConditional 12 13 20 + 13: Label + 18: 6(float) Load 8(inf) + 19: 15(fvec4) CompositeConstruct 18 18 18 18 + Store 17(outf4) 19 + Branch 14 + 20: Label + 21: 6(float) Load 8(inf) + 23: 6(float) FAdd 21 22 + 24: 15(fvec4) CompositeConstruct 23 23 23 23 + Store 17(outf4) 24 + Branch 14 + 14: Label + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.literal64.everything.spv.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.literal64.everything.spv.out new file mode 100644 index 0000000..7a4f37b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.literal64.everything.spv.out @@ -0,0 +1,7 @@ +remap.literal64.everything.spv +// Module Version 10100 +// Generated by (magic number): 70000 +// Id's are bound by 0 + + Capability Shader + MemoryModel Logical GLSL450 diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.literal64.none.spv.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.literal64.none.spv.out new file mode 100644 index 0000000..792b13a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.literal64.none.spv.out @@ -0,0 +1,25 @@ +remap.literal64.none.spv +// Module Version 10100 +// Generated by (magic number): 70000 +// Id's are bound by 10 + + Capability Shader + MemoryModel Logical GLSL450 + 1: TypeVoid + 2: TypeInt 64 1 + 3: TypeFunction 1 + 4: 2(int) Constant 0 0 + 5: 1 Function None 3 + 6: Label + SelectionMerge 7 None + Switch 4 7 + case 0: 0 + case 8: 1 + case 0: 9 + 8: Label + Branch 7 + 9: Label + Branch 7 + 7: Label + Return + FunctionEnd 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 new file mode 100644 index 0000000..384b8e8 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.similar_1a.everything.frag.out @@ -0,0 +1,117 @@ +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 +// Id's are bound by 24916 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 5663 "main" 4201 4539 3773 + ExecutionMode 5663 OriginUpperLeft + Decorate 4201 Flat + 8: TypeVoid + 1282: TypeFunction 8 + 12: TypeInt 32 1 + 649: TypePointer Function 12(int) + 13: TypeFloat 32 + 204: TypeFunction 13(float) 649(ptr) + 650: TypePointer Function 13(float) + 2572: 13(float) Constant 0 + 2571: 12(int) Constant 0 + 9: TypeBool + 252: 13(float) Constant 1056964608 + 2574: 12(int) Constant 1 + 2577: 12(int) Constant 2 + 26: TypeVector 12(int) 4 + 663: TypePointer Input 26(ivec4) + 4201: 663(ptr) Variable Input + 11: TypeInt 32 0 + 2573: 11(int) Constant 1 + 651: TypePointer Input 12(int) + 2576: 11(int) Constant 2 + 2570: 11(int) Constant 0 + 29: TypeVector 13(float) 4 + 666: TypePointer Output 29(fvec4) + 4539: 666(ptr) Variable Output + 652: TypePointer Input 13(float) + 3773: 652(ptr) Variable Input + 5663: 8 Function None 1282 + 24915: Label + 18415: 649(ptr) Variable Function + 5786: 649(ptr) Variable Function + 8366: 13(float) Load 3773 + 8654: 12(int) ConvertFToS 8366 + Store 18415 8654 + 17256: 13(float) FunctionCall 3782 18415 + 14512: 13(float) Load 3773 + 7041: 12(int) ConvertFToS 14512 + Store 5786 7041 + 23993: 13(float) FunctionCall 3836 5786 + 9180: 13(float) FAdd 17256 23993 + 15728: 29(fvec4) CompositeConstruct 9180 9180 9180 9180 + Store 4539 15728 + Return + FunctionEnd + 3782: 13(float) Function None 204 + 6931: 649(ptr) FunctionParameter + 12220: Label + 4292: 650(ptr) Variable Function + 4298: 649(ptr) Variable Function + Store 4292 2572 + Store 4298 2571 + Branch 14924 + 14924: Label + LoopMerge 8882 6488 None + Branch 11857 + 11857: Label + 13755: 12(int) Load 4298 + 22731: 12(int) Load 6931 + 20007: 9(bool) SLessThan 13755 22731 + BranchConditional 20007 24750 8882 + 24750: Label + 22912: 13(float) Load 4292 + 19471: 13(float) FAdd 22912 252 + Store 4292 19471 + Branch 6488 + 6488: Label + 19050: 12(int) Load 4298 + 8593: 12(int) IAdd 19050 2574 + Store 4298 8593 + Branch 14924 + 8882: Label + 11601: 13(float) Load 4292 + ReturnValue 11601 + FunctionEnd + 3836: 13(float) Function None 204 + 4408: 649(ptr) FunctionParameter + 12143: Label + 22102: 649(ptr) Variable Function + 24151: 12(int) Load 4408 + 13868: 9(bool) SGreaterThan 24151 2577 + SelectionMerge 22309 None + BranchConditional 13868 9492 17416 + 9492: Label + 15624: 12(int) Load 4408 + Store 22102 15624 + 17278: 13(float) FunctionCall 3782 22102 + ReturnValue 17278 + 17416: Label + 19506: 12(int) Load 4408 + 22773: 12(int) IMul 19506 2577 + 13472: 651(ptr) AccessChain 4201 2573 + 15280: 12(int) Load 13472 + 18079: 651(ptr) AccessChain 4201 2576 + 15199: 12(int) Load 18079 + 9343: 12(int) IMul 15280 15199 + 11462: 12(int) IAdd 22773 9343 + 11885: 651(ptr) AccessChain 4201 2570 + 21176: 12(int) Load 11885 + 10505: 12(int) IAdd 11462 21176 + 14626: 13(float) ConvertSToF 10505 + ReturnValue 14626 + 22309: Label + 6429: 13(float) Undef + ReturnValue 6429 + FunctionEnd 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 new file mode 100644 index 0000000..910ef42 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.similar_1a.none.frag.out @@ -0,0 +1,131 @@ +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 +// Id's are bound by 86 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 53 73 75 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + Name 4 "main" + Name 11 "Test1(i1;" + Name 10 "bound" + Name 14 "Test2(i1;" + Name 13 "bound" + Name 17 "r" + Name 19 "x" + Name 44 "param" + Name 53 "ini4" + Name 73 "outf4" + Name 75 "inf" + Name 78 "param" + Name 82 "param" + Decorate 53(ini4) Flat + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypePointer Function 6(int) + 8: TypeFloat 32 + 9: TypeFunction 8(float) 7(ptr) + 16: TypePointer Function 8(float) + 18: 8(float) Constant 0 + 20: 6(int) Constant 0 + 28: TypeBool + 30: 8(float) Constant 1056964608 + 34: 6(int) Constant 1 + 40: 6(int) Constant 2 + 51: TypeVector 6(int) 4 + 52: TypePointer Input 51(ivec4) + 53(ini4): 52(ptr) Variable Input + 54: TypeInt 32 0 + 55: 54(int) Constant 1 + 56: TypePointer Input 6(int) + 59: 54(int) Constant 2 + 64: 54(int) Constant 0 + 71: TypeVector 8(float) 4 + 72: TypePointer Output 71(fvec4) + 73(outf4): 72(ptr) Variable Output + 74: TypePointer Input 8(float) + 75(inf): 74(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 78(param): 7(ptr) Variable Function + 82(param): 7(ptr) Variable Function + 76: 8(float) Load 75(inf) + 77: 6(int) ConvertFToS 76 + Store 78(param) 77 + 79: 8(float) FunctionCall 11(Test1(i1;) 78(param) + 80: 8(float) Load 75(inf) + 81: 6(int) ConvertFToS 80 + Store 82(param) 81 + 83: 8(float) FunctionCall 14(Test2(i1;) 82(param) + 84: 8(float) FAdd 79 83 + 85: 71(fvec4) CompositeConstruct 84 84 84 84 + Store 73(outf4) 85 + Return + FunctionEnd + 11(Test1(i1;): 8(float) Function None 9 + 10(bound): 7(ptr) FunctionParameter + 12: Label + 17(r): 16(ptr) Variable Function + 19(x): 7(ptr) Variable Function + Store 17(r) 18 + Store 19(x) 20 + Branch 21 + 21: Label + LoopMerge 23 24 None + Branch 25 + 25: Label + 26: 6(int) Load 19(x) + 27: 6(int) Load 10(bound) + 29: 28(bool) SLessThan 26 27 + BranchConditional 29 22 23 + 22: Label + 31: 8(float) Load 17(r) + 32: 8(float) FAdd 31 30 + Store 17(r) 32 + Branch 24 + 24: Label + 33: 6(int) Load 19(x) + 35: 6(int) IAdd 33 34 + Store 19(x) 35 + Branch 21 + 23: Label + 36: 8(float) Load 17(r) + ReturnValue 36 + FunctionEnd + 14(Test2(i1;): 8(float) Function None 9 + 13(bound): 7(ptr) FunctionParameter + 15: Label + 44(param): 7(ptr) Variable Function + 39: 6(int) Load 13(bound) + 41: 28(bool) SGreaterThan 39 40 + SelectionMerge 43 None + BranchConditional 41 42 48 + 42: Label + 45: 6(int) Load 13(bound) + Store 44(param) 45 + 46: 8(float) FunctionCall 11(Test1(i1;) 44(param) + ReturnValue 46 + 48: Label + 49: 6(int) Load 13(bound) + 50: 6(int) IMul 49 40 + 57: 56(ptr) AccessChain 53(ini4) 55 + 58: 6(int) Load 57 + 60: 56(ptr) AccessChain 53(ini4) 59 + 61: 6(int) Load 60 + 62: 6(int) IMul 58 61 + 63: 6(int) IAdd 50 62 + 65: 56(ptr) AccessChain 53(ini4) 64 + 66: 6(int) Load 65 + 67: 6(int) IAdd 63 66 + 68: 8(float) ConvertSToF 67 + ReturnValue 68 + 43: Label + 70: 8(float) Undef + ReturnValue 70 + FunctionEnd 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 new file mode 100644 index 0000000..0ce4544 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.similar_1b.everything.frag.out @@ -0,0 +1,123 @@ +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 +// Id's are bound by 24916 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 5663 "main" 4201 4539 3773 + ExecutionMode 5663 OriginUpperLeft + Decorate 4201 Flat + 8: TypeVoid + 1282: TypeFunction 8 + 12: TypeInt 32 1 + 649: TypePointer Function 12(int) + 13: TypeFloat 32 + 204: TypeFunction 13(float) 649(ptr) + 650: TypePointer Function 13(float) + 2572: 13(float) Constant 0 + 2571: 12(int) Constant 0 + 9: TypeBool + 252: 13(float) Constant 1056964608 + 2574: 12(int) Constant 1 + 2821: 13(float) Constant 1045220557 + 2577: 12(int) Constant 2 + 2583: 12(int) Constant 4 + 26: TypeVector 12(int) 4 + 663: TypePointer Input 26(ivec4) + 4201: 663(ptr) Variable Input + 11: TypeInt 32 0 + 2573: 11(int) Constant 1 + 651: TypePointer Input 12(int) + 2576: 11(int) Constant 2 + 2570: 11(int) Constant 0 + 29: TypeVector 13(float) 4 + 666: TypePointer Output 29(fvec4) + 4539: 666(ptr) Variable Output + 652: TypePointer Input 13(float) + 3773: 652(ptr) Variable Input + 5663: 8 Function None 1282 + 24915: Label + 18415: 649(ptr) Variable Function + 5786: 649(ptr) Variable Function + 8366: 13(float) Load 3773 + 8654: 12(int) ConvertFToS 8366 + Store 18415 8654 + 17256: 13(float) FunctionCall 3782 18415 + 14512: 13(float) Load 3773 + 7041: 12(int) ConvertFToS 14512 + Store 5786 7041 + 23993: 13(float) FunctionCall 3836 5786 + 9180: 13(float) FAdd 17256 23993 + 15728: 29(fvec4) CompositeConstruct 9180 9180 9180 9180 + Store 4539 15728 + Return + FunctionEnd + 3782: 13(float) Function None 204 + 6931: 649(ptr) FunctionParameter + 12220: Label + 4292: 650(ptr) Variable Function + 4298: 649(ptr) Variable Function + Store 4292 2572 + Store 4298 2571 + Branch 14924 + 14924: Label + LoopMerge 6507 6488 None + Branch 11857 + 11857: Label + 13755: 12(int) Load 4298 + 22731: 12(int) Load 6931 + 20007: 9(bool) SLessThan 13755 22731 + BranchConditional 20007 24750 6507 + 24750: Label + 22912: 13(float) Load 4292 + 19471: 13(float) FAdd 22912 252 + Store 4292 19471 + Branch 6488 + 6488: Label + 19050: 12(int) Load 4298 + 8593: 12(int) IAdd 19050 2574 + Store 4298 8593 + Branch 14924 + 6507: Label + 18877: 13(float) Load 4292 + 15899: 13(float) FAdd 18877 2821 + Store 4292 15899 + 20342: 13(float) Load 4292 + ReturnValue 20342 + FunctionEnd + 3836: 13(float) Function None 204 + 4408: 649(ptr) FunctionParameter + 12143: Label + 22102: 649(ptr) Variable Function + 24151: 12(int) Load 4408 + 13868: 9(bool) SGreaterThan 24151 2577 + SelectionMerge 22309 None + BranchConditional 13868 10822 17416 + 10822: Label + 22680: 12(int) Load 4408 + 23216: 12(int) IMul 22680 2577 + Store 22102 23216 + 7042: 13(float) FunctionCall 3782 22102 + ReturnValue 7042 + 17416: Label + 19506: 12(int) Load 4408 + 22773: 12(int) IMul 19506 2583 + 13472: 651(ptr) AccessChain 4201 2573 + 15280: 12(int) Load 13472 + 18079: 651(ptr) AccessChain 4201 2576 + 15199: 12(int) Load 18079 + 9343: 12(int) IMul 15280 15199 + 11462: 12(int) IAdd 22773 9343 + 11885: 651(ptr) AccessChain 4201 2570 + 21176: 12(int) Load 11885 + 10505: 12(int) IAdd 11462 21176 + 14626: 13(float) ConvertSToF 10505 + ReturnValue 14626 + 22309: Label + 6429: 13(float) Undef + ReturnValue 6429 + FunctionEnd 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 new file mode 100644 index 0000000..ce79e00 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.similar_1b.none.frag.out @@ -0,0 +1,137 @@ +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 +// Id's are bound by 91 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 58 78 80 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + Name 4 "main" + Name 11 "Test1(i1;" + Name 10 "bound" + Name 14 "Test2(i1;" + Name 13 "bound" + Name 17 "r" + Name 19 "x" + Name 49 "param" + Name 58 "ini4" + Name 78 "outf4" + Name 80 "inf" + Name 83 "param" + Name 87 "param" + Decorate 58(ini4) Flat + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypePointer Function 6(int) + 8: TypeFloat 32 + 9: TypeFunction 8(float) 7(ptr) + 16: TypePointer Function 8(float) + 18: 8(float) Constant 0 + 20: 6(int) Constant 0 + 28: TypeBool + 30: 8(float) Constant 1056964608 + 34: 6(int) Constant 1 + 36: 8(float) Constant 1045220557 + 43: 6(int) Constant 2 + 54: 6(int) Constant 4 + 56: TypeVector 6(int) 4 + 57: TypePointer Input 56(ivec4) + 58(ini4): 57(ptr) Variable Input + 59: TypeInt 32 0 + 60: 59(int) Constant 1 + 61: TypePointer Input 6(int) + 64: 59(int) Constant 2 + 69: 59(int) Constant 0 + 76: TypeVector 8(float) 4 + 77: TypePointer Output 76(fvec4) + 78(outf4): 77(ptr) Variable Output + 79: TypePointer Input 8(float) + 80(inf): 79(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 83(param): 7(ptr) Variable Function + 87(param): 7(ptr) Variable Function + 81: 8(float) Load 80(inf) + 82: 6(int) ConvertFToS 81 + Store 83(param) 82 + 84: 8(float) FunctionCall 11(Test1(i1;) 83(param) + 85: 8(float) Load 80(inf) + 86: 6(int) ConvertFToS 85 + Store 87(param) 86 + 88: 8(float) FunctionCall 14(Test2(i1;) 87(param) + 89: 8(float) FAdd 84 88 + 90: 76(fvec4) CompositeConstruct 89 89 89 89 + Store 78(outf4) 90 + Return + FunctionEnd + 11(Test1(i1;): 8(float) Function None 9 + 10(bound): 7(ptr) FunctionParameter + 12: Label + 17(r): 16(ptr) Variable Function + 19(x): 7(ptr) Variable Function + Store 17(r) 18 + Store 19(x) 20 + Branch 21 + 21: Label + LoopMerge 23 24 None + Branch 25 + 25: Label + 26: 6(int) Load 19(x) + 27: 6(int) Load 10(bound) + 29: 28(bool) SLessThan 26 27 + BranchConditional 29 22 23 + 22: Label + 31: 8(float) Load 17(r) + 32: 8(float) FAdd 31 30 + Store 17(r) 32 + Branch 24 + 24: Label + 33: 6(int) Load 19(x) + 35: 6(int) IAdd 33 34 + Store 19(x) 35 + Branch 21 + 23: Label + 37: 8(float) Load 17(r) + 38: 8(float) FAdd 37 36 + Store 17(r) 38 + 39: 8(float) Load 17(r) + ReturnValue 39 + FunctionEnd + 14(Test2(i1;): 8(float) Function None 9 + 13(bound): 7(ptr) FunctionParameter + 15: Label + 49(param): 7(ptr) Variable Function + 42: 6(int) Load 13(bound) + 44: 28(bool) SGreaterThan 42 43 + SelectionMerge 46 None + BranchConditional 44 45 52 + 45: Label + 47: 6(int) Load 13(bound) + 48: 6(int) IMul 47 43 + Store 49(param) 48 + 50: 8(float) FunctionCall 11(Test1(i1;) 49(param) + ReturnValue 50 + 52: Label + 53: 6(int) Load 13(bound) + 55: 6(int) IMul 53 54 + 62: 61(ptr) AccessChain 58(ini4) 60 + 63: 6(int) Load 62 + 65: 61(ptr) AccessChain 58(ini4) 64 + 66: 6(int) Load 65 + 67: 6(int) IMul 63 66 + 68: 6(int) IAdd 55 67 + 70: 61(ptr) AccessChain 58(ini4) 69 + 71: 6(int) Load 70 + 72: 6(int) IAdd 68 71 + 73: 8(float) ConvertSToF 72 + ReturnValue 73 + 46: Label + 75: 8(float) Undef + ReturnValue 75 + 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 new file mode 100644 index 0000000..e5a7ef7 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.switch.everything.frag.out @@ -0,0 +1,77 @@ +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 +// Id's are bound by 23990 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 5663 "main" 3719 3994 + ExecutionMode 5663 OriginUpperLeft + Decorate 3719 Location 0 + Decorate 3994 RelaxedPrecision + Decorate 3994 Location 0 + Decorate 12421 RelaxedPrecision + Decorate 12422 RelaxedPrecision + Decorate 12423 RelaxedPrecision + 8: TypeVoid + 1282: TypeFunction 8 + 13: TypeFloat 32 + 29: TypeVector 13(float) 4 + 666: TypePointer Input 29(fvec4) + 3719: 666(ptr) Variable Input + 11: TypeInt 32 0 + 2579: 11(int) Constant 3 + 650: TypePointer Input 13(float) + 12: TypeInt 32 1 + 667: TypePointer Output 29(fvec4) + 3994: 667(ptr) Variable Output + 2570: 11(int) Constant 0 + 2572: 13(float) Constant 0 + 2573: 11(int) Constant 1 + 138: 13(float) Constant 1065353216 + 2576: 11(int) Constant 2 + 24: 13(float) Constant 1073741824 + 833: 13(float) Constant 3212836864 + 1284: 29(fvec4) ConstantComposite 833 833 833 833 + 5663: 8 Function None 1282 + 23915: Label + 7984: 650(ptr) AccessChain 3719 2579 + 11376: 13(float) Load 7984 + 16859: 12(int) ConvertFToS 11376 + SelectionMerge 19578 None + Switch 16859 15971 + case 0: 8158 + case 1: 8159 + case 2: 8160 + 15971: Label + Store 3994 1284 + Branch 19578 + 8158: Label + 21848: 650(ptr) AccessChain 3719 2570 + 23987: 13(float) Load 21848 + 19989: 13(float) FAdd 23987 2572 + 12421: 29(fvec4) CompositeConstruct 19989 19989 19989 19989 + Store 3994 12421 + Branch 19578 + 8159: Label + 21849: 650(ptr) AccessChain 3719 2573 + 23988: 13(float) Load 21849 + 19990: 13(float) FAdd 23988 138 + 12422: 29(fvec4) CompositeConstruct 19990 19990 19990 19990 + Store 3994 12422 + Branch 19578 + 8160: Label + 21850: 650(ptr) AccessChain 3719 2576 + 23989: 13(float) Load 21850 + 19991: 13(float) FAdd 23989 24 + 12423: 29(fvec4) CompositeConstruct 19991 19991 19991 19991 + Store 3994 12423 + Branch 19578 + 19578: Label + Return + FunctionEnd 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 new file mode 100644 index 0000000..68d075b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.switch.none.frag.out @@ -0,0 +1,81 @@ +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 +// Id's are bound by 48 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 9 23 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + Name 4 "main" + Name 9 "in0" + Name 23 "FragColor" + Decorate 9(in0) Location 0 + Decorate 23(FragColor) RelaxedPrecision + Decorate 23(FragColor) Location 0 + Decorate 29 RelaxedPrecision + Decorate 36 RelaxedPrecision + Decorate 43 RelaxedPrecision + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Input 7(fvec4) + 9(in0): 8(ptr) Variable Input + 10: TypeInt 32 0 + 11: 10(int) Constant 3 + 12: TypePointer Input 6(float) + 15: TypeInt 32 1 + 22: TypePointer Output 7(fvec4) + 23(FragColor): 22(ptr) Variable Output + 24: 10(int) Constant 0 + 27: 6(float) Constant 0 + 31: 10(int) Constant 1 + 34: 6(float) Constant 1065353216 + 38: 10(int) Constant 2 + 41: 6(float) Constant 1073741824 + 45: 6(float) Constant 3212836864 + 46: 7(fvec4) ConstantComposite 45 45 45 45 + 4(main): 2 Function None 3 + 5: Label + 13: 12(ptr) AccessChain 9(in0) 11 + 14: 6(float) Load 13 + 16: 15(int) ConvertFToS 14 + SelectionMerge 21 None + Switch 16 20 + case 0: 17 + case 1: 18 + case 2: 19 + 20: Label + Store 23(FragColor) 46 + Branch 21 + 17: Label + 25: 12(ptr) AccessChain 9(in0) 24 + 26: 6(float) Load 25 + 28: 6(float) FAdd 26 27 + 29: 7(fvec4) CompositeConstruct 28 28 28 28 + Store 23(FragColor) 29 + Branch 21 + 18: Label + 32: 12(ptr) AccessChain 9(in0) 31 + 33: 6(float) Load 32 + 35: 6(float) FAdd 33 34 + 36: 7(fvec4) CompositeConstruct 35 35 35 35 + Store 23(FragColor) 36 + Branch 21 + 19: Label + 39: 12(ptr) AccessChain 9(in0) 38 + 40: 6(float) Load 39 + 42: 6(float) FAdd 40 41 + 43: 7(fvec4) CompositeConstruct 42 42 42 42 + Store 23(FragColor) 43 + Branch 21 + 21: Label + Return + FunctionEnd 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 new file mode 100644 index 0000000..ed906d5 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.uniformarray.everything.frag.out @@ -0,0 +1,63 @@ +remap.uniformarray.everything.frag +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 25030 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 5663 "main" 3608 4957 4339 5139 + ExecutionMode 5663 OriginUpperLeft + 8: TypeVoid + 1282: TypeFunction 8 + 13: TypeFloat 32 + 29: TypeVector 13(float) 4 + 666: TypePointer Function 29(fvec4) + 11: TypeInt 32 0 + 2588: 11(int) Constant 6 + 740: TypeArray 29(fvec4) 2588 + 1377: TypePointer Input 740 + 3608: 1377(ptr) Variable Input + 12: TypeInt 32 1 + 2574: 12(int) Constant 1 + 667: TypePointer Input 29(fvec4) + 24: TypeVector 13(float) 3 + 661: TypePointer Input 24(fvec3) + 4957: 661(ptr) Variable Input + 2618: 11(int) Constant 16 + 669: TypeArray 13(float) 2618 + 1306: TypePointer Input 669 + 4339: 1306(ptr) Variable Input + 2607: 12(int) Constant 12 + 650: TypePointer Input 13(float) + 2579: 11(int) Constant 3 + 651: TypePointer Function 13(float) + 668: TypePointer Output 29(fvec4) + 5139: 668(ptr) Variable Output + 5663: 8 Function None 1282 + 25029: Label + 4902: 666(ptr) Variable Function + 10645: 667(ptr) AccessChain 3608 2574 + 8181: 29(fvec4) Load 10645 + 21370: 667(ptr) AccessChain 3608 2574 + 11355: 29(fvec4) Load 21370 + 23084: 29(fvec4) FAdd 8181 11355 + Store 4902 23084 + 21218: 24(fvec3) Load 4957 + 13695: 29(fvec4) Load 4902 + 23883: 24(fvec3) VectorShuffle 13695 13695 0 1 2 + 15591: 24(fvec3) FAdd 23883 21218 + 17086: 29(fvec4) Load 4902 + 7051: 29(fvec4) VectorShuffle 17086 15591 4 5 6 3 + Store 4902 7051 + 18282: 650(ptr) AccessChain 4339 2607 + 7372: 13(float) Load 18282 + 21371: 651(ptr) AccessChain 4902 2579 + 11412: 13(float) Load 21371 + 22584: 13(float) FAdd 11412 7372 + 17318: 651(ptr) AccessChain 4902 2579 + Store 17318 22584 + 17934: 29(fvec4) Load 4902 + Store 5139 17934 + Return + FunctionEnd 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 new file mode 100644 index 0000000..526b9e4 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.uniformarray.none.frag.out @@ -0,0 +1,76 @@ +remap.uniformarray.none.frag +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 53 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 14 25 35 47 + ExecutionMode 4 OriginUpperLeft + Source GLSL 140 + Name 4 "main" + Name 9 "texColor" + Name 14 "color" + Name 25 "inColor" + Name 35 "alpha" + Name 47 "gl_FragColor" + Name 52 "texSampler2D" + Decorate 52(texSampler2D) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 10: TypeInt 32 0 + 11: 10(int) Constant 6 + 12: TypeArray 7(fvec4) 11 + 13: TypePointer Input 12 + 14(color): 13(ptr) Variable Input + 15: TypeInt 32 1 + 16: 15(int) Constant 1 + 17: TypePointer Input 7(fvec4) + 23: TypeVector 6(float) 3 + 24: TypePointer Input 23(fvec3) + 25(inColor): 24(ptr) Variable Input + 32: 10(int) Constant 16 + 33: TypeArray 6(float) 32 + 34: TypePointer Input 33 + 35(alpha): 34(ptr) Variable Input + 36: 15(int) Constant 12 + 37: TypePointer Input 6(float) + 40: 10(int) Constant 3 + 41: TypePointer Function 6(float) + 46: TypePointer Output 7(fvec4) +47(gl_FragColor): 46(ptr) Variable Output + 49: TypeImage 6(float) 2D sampled format:Unknown + 50: TypeSampledImage 49 + 51: TypePointer UniformConstant 50 +52(texSampler2D): 51(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label + 9(texColor): 8(ptr) Variable Function + 18: 17(ptr) AccessChain 14(color) 16 + 19: 7(fvec4) Load 18 + 20: 17(ptr) AccessChain 14(color) 16 + 21: 7(fvec4) Load 20 + 22: 7(fvec4) FAdd 19 21 + Store 9(texColor) 22 + 26: 23(fvec3) Load 25(inColor) + 27: 7(fvec4) Load 9(texColor) + 28: 23(fvec3) VectorShuffle 27 27 0 1 2 + 29: 23(fvec3) FAdd 28 26 + 30: 7(fvec4) Load 9(texColor) + 31: 7(fvec4) VectorShuffle 30 29 4 5 6 3 + Store 9(texColor) 31 + 38: 37(ptr) AccessChain 35(alpha) 36 + 39: 6(float) Load 38 + 42: 41(ptr) AccessChain 9(texColor) 40 + 43: 6(float) Load 42 + 44: 6(float) FAdd 43 39 + 45: 41(ptr) AccessChain 9(texColor) 40 + Store 45 44 + 48: 7(fvec4) Load 9(texColor) + Store 47(gl_FragColor) 48 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/sample.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/sample.frag.out new file mode 100644 index 0000000..780789a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/sample.frag.out @@ -0,0 +1,33 @@ +sample.frag +Shader version: 110 +0:? Sequence +0:38 Function Definition: main( ( global void) +0:38 Function Parameters: +0:40 Sequence +0:40 move second child to first child ( temp 4-component vector of float) +0:40 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:40 Construct vec4 ( temp 4-component vector of float) +0:40 'color' ( smooth in 3-component vector of float) +0:40 Constant: +0:40 1.000000 +0:? Linker Objects +0:? 'color' ( smooth in 3-component vector of float) + + +Linked fragment stage: + + +Shader version: 110 +0:? Sequence +0:38 Function Definition: main( ( global void) +0:38 Function Parameters: +0:40 Sequence +0:40 move second child to first child ( temp 4-component vector of float) +0:40 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:40 Construct vec4 ( temp 4-component vector of float) +0:40 'color' ( smooth in 3-component vector of float) +0:40 Constant: +0:40 1.000000 +0:? Linker Objects +0:? 'color' ( smooth in 3-component vector of float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/sample.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/sample.vert.out new file mode 100644 index 0000000..848598e --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/sample.vert.out @@ -0,0 +1,43 @@ +sample.vert +Shader version: 110 +0:? Sequence +0:38 Function Definition: main( ( global void) +0:38 Function Parameters: +0:40 Sequence +0:40 move second child to first child ( temp 3-component vector of float) +0:40 'color' ( smooth out 3-component vector of float) +0:40 Constant: +0:40 1.000000 +0:40 1.000000 +0:40 1.000000 +0:42 move second child to first child ( temp 4-component vector of float) +0:42 'gl_Position' ( gl_Position 4-component vector of float Position) +0:42 matrix-times-vector ( temp 4-component vector of float) +0:42 'gl_ModelViewProjectionMatrix' ( uniform 4X4 matrix of float) +0:42 'gl_Vertex' ( in 4-component vector of float Vertex) +0:? Linker Objects +0:? 'color' ( smooth out 3-component vector of float) + + +Linked vertex stage: + + +Shader version: 110 +0:? Sequence +0:38 Function Definition: main( ( global void) +0:38 Function Parameters: +0:40 Sequence +0:40 move second child to first child ( temp 3-component vector of float) +0:40 'color' ( smooth out 3-component vector of float) +0:40 Constant: +0:40 1.000000 +0:40 1.000000 +0:40 1.000000 +0:42 move second child to first child ( temp 4-component vector of float) +0:42 'gl_Position' ( gl_Position 4-component vector of float Position) +0:42 matrix-times-vector ( temp 4-component vector of float) +0:42 'gl_ModelViewProjectionMatrix' ( uniform 4X4 matrix of float) +0:42 'gl_Vertex' ( in 4-component vector of float Vertex) +0:? Linker Objects +0:? 'color' ( smooth out 3-component vector of float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/simpleFunctionCall.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/simpleFunctionCall.frag.out new file mode 100644 index 0000000..5ccd54d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/simpleFunctionCall.frag.out @@ -0,0 +1,43 @@ +simpleFunctionCall.frag +WARNING: 0:4: varying deprecated in version 130; may be removed in future release + +Shader version: 150 +0:? Sequence +0:7 Function Definition: foo( ( global 4-component vector of float) +0:7 Function Parameters: +0:9 Sequence +0:9 Branch: Return with expression +0:9 'BaseColor' ( smooth in 4-component vector of float) +0:12 Function Definition: main( ( global void) +0:12 Function Parameters: +0:14 Sequence +0:14 move second child to first child ( temp 4-component vector of float) +0:14 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:14 Function Call: foo( ( global 4-component vector of float) +0:? Linker Objects +0:? 'bigColor' ( uniform 4-component vector of float) +0:? 'BaseColor' ( smooth in 4-component vector of float) +0:? 'd' ( uniform float) + + +Linked fragment stage: + + +Shader version: 150 +0:? Sequence +0:7 Function Definition: foo( ( global 4-component vector of float) +0:7 Function Parameters: +0:9 Sequence +0:9 Branch: Return with expression +0:9 'BaseColor' ( smooth in 4-component vector of float) +0:12 Function Definition: main( ( global void) +0:12 Function Parameters: +0:14 Sequence +0:14 move second child to first child ( temp 4-component vector of float) +0:14 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:14 Function Call: foo( ( global 4-component vector of float) +0:? Linker Objects +0:? 'bigColor' ( uniform 4-component vector of float) +0:? 'BaseColor' ( smooth in 4-component vector of float) +0:? 'd' ( uniform float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/specExamples.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/specExamples.frag.out new file mode 100644 index 0000000..939ea62 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/specExamples.frag.out @@ -0,0 +1,600 @@ +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 +ERROR: 0:37: 'view' : redefinition +ERROR: 0:63: 'invariant' : can only apply to an output +ERROR: 0:68: 'lightPosition' : redefinition +ERROR: 0:75: 'Atten' : member storage qualifier cannot contradict block storage qualifier +ERROR: 0:87: 'Color' : redefinition +ERROR: 0:92: 'redeclaration' : cannot redeclare with different qualification: gl_FragCoord +ERROR: 0:93: 'redeclaration' : cannot redeclare with different qualification: gl_FragCoord +ERROR: 0:99: 'local_size_x' : there is no such layout identifier for this stage taking an assigned value +ERROR: 0:99: 'local_size_y' : there is no such layout identifier for this stage taking an assigned value +ERROR: 0:100: 'local_size_x' : there is no such layout identifier for this stage taking an assigned value +ERROR: 0:102: 'color' : redefinition +ERROR: 0:112: 'redeclaration' : all redeclarations must use the same depth layout on gl_FragDepth +ERROR: 0:118: 'redeclaration' : all redeclarations must use the same depth layout on gl_FragDepth +ERROR: 0:121: 'redeclaration' : all redeclarations must use the same depth layout on gl_FragDepth +ERROR: 0:172: 'x' : undeclared identifier +ERROR: 0:172: '[]' : scalar integer expression required +ERROR: 0:175: 'x' : undeclared identifier +ERROR: 0:175: '[]' : scalar integer expression required +ERROR: 0:175: 'b' : left of '[' is not of type array, matrix, or vector +ERROR: 0:175: 'a' : vector swizzle selection out of range +ERROR: 0:175: 'length' : does not operate on this type: const float +ERROR: 0:175: '' : function call, method, or subroutine call expected +ERROR: 0:175: '' : no matching overloaded function found +ERROR: 0:178: '[]' : scalar integer expression required +ERROR: 0:178: 's' : undeclared identifier +ERROR: 0:178: 's' : left of '[' is not of type array, matrix, or vector +ERROR: 0:178: 'a' : vector swizzle selection out of range +ERROR: 0:178: 'length' : does not operate on this type: const float +ERROR: 0:178: '' : function call, method, or subroutine call expected +ERROR: 0:178: '' : no matching overloaded function found +ERROR: 0:198: 'e' : redefinition +ERROR: 0:226: 'in' : not allowed in nested scope +ERROR: 0:227: 'in' : not allowed in nested scope +ERROR: 0:228: 'in' : not allowed in nested scope +ERROR: 0:232: 'out' : not allowed in nested scope +ERROR: 38 compilation errors. No code generated. + + +Shader version: 430 +Requested GL_3DL_array_objects +gl_FragCoord pixel center is integer +gl_FragCoord origin is upper left +using early_fragment_tests +using depth_greater +ERROR: node is still EOpNull! +0:5 Sequence +0:5 move second child to first child ( temp int) +0:5 'a' ( global int) +0:5 Constant: +0:5 -1 (const int) +0:7 Sequence +0:7 move second child to first child ( temp uint) +0:7 'c' ( global uint) +0:7 Constant: +0:7 4294967295 (const uint) +0:8 Sequence +0:8 move second child to first child ( temp uint) +0:8 'd' ( global uint) +0:8 Constant: +0:8 4294967295 (const uint) +0:9 Sequence +0:9 move second child to first child ( temp int) +0:9 'e' ( global int) +0:9 Constant: +0:9 -1 (const int) +0:13 Sequence +0:13 move second child to first child ( temp uint) +0:13 'f' ( global uint) +0:13 Constant: +0:13 4294967295 (const uint) +0:17 Sequence +0:17 move second child to first child ( temp int) +0:17 'g' ( global int) +0:17 Constant: +0:17 -1294967296 (const int) +0:19 Sequence +0:19 move second child to first child ( temp int) +0:19 'h' ( global int) +0:19 Constant: +0:19 -1610612736 (const int) +0:20 Sequence +0:20 move second child to first child ( temp int) +0:20 'i' ( global int) +0:20 Constant: +0:20 -1 (const int) +0:21 Sequence +0:21 move second child to first child ( temp int) +0:21 'j' ( global int) +0:21 Constant: +0:21 -1 (const int) +0:22 Sequence +0:22 move second child to first child ( temp int) +0:22 'k' ( global int) +0:22 Constant: +0:22 -2147483648 (const int) +0:23 Sequence +0:23 move second child to first child ( temp int) +0:23 'l' ( global int) +0:23 Constant: +0:23 -2147483648 (const int) +0:25 Sequence +0:25 move second child to first child ( temp float) +0:25 'fb' ( global float) +0:25 Constant: +0:25 1.500000 +0:26 Sequence +0:26 move second child to first child ( temp double) +0:26 'fd' ( global double) +0:26 Constant: +0:26 2.000000 +0:127 Function Definition: foo(f1[5]; ( global 5-element array of float) +0:127 Function Parameters: +0:127 '' ( in 5-element array of float) +0:129 Sequence +0:129 Branch: Return with expression +0:129 Constant: +0:129 3.400000 +0:129 4.200000 +0:129 5.000000 +0:129 5.200000 +0:129 1.100000 +0:137 Function Definition: main( ( global void) +0:137 Function Parameters: +0:140 Sequence +0:140 Sequence +0:140 Sequence +0:140 move second child to first child ( temp 5-element array of float) +0:140 'a' ( temp 5-element array of float) +0:140 Constant: +0:140 3.400000 +0:140 4.200000 +0:140 5.000000 +0:140 5.200000 +0:140 1.100000 +0:143 Sequence +0:143 Sequence +0:143 move second child to first child ( temp 5-element array of float) +0:143 'a' ( temp 5-element array of float) +0:143 Constant: +0:143 3.400000 +0:143 4.200000 +0:143 5.000000 +0:143 5.200000 +0:143 1.100000 +0:? Sequence +0:149 Sequence +0:149 move second child to first child ( temp 2-element array of 4-component vector of float) +0:149 'b' ( temp 2-element array of 4-component vector of float) +0:149 Constant: +0:149 0.000000 +0:149 0.000000 +0:149 0.000000 +0:149 0.000000 +0:149 0.100000 +0:149 0.100000 +0:149 0.100000 +0:149 0.100000 +0:150 Sequence +0:150 move second child to first child ( temp 3-element array of 2-element array of 4-component vector of float) +0:150 'a3' ( temp 3-element array of 2-element array of 4-component vector of float) +0:150 Construct vec4 ( temp 3-element array of 2-element array of 4-component vector of float) +0:150 'b' ( temp 2-element array of 4-component vector of float) +0:150 'b' ( temp 2-element array of 4-component vector of float) +0:150 'b' ( temp 2-element array of 4-component vector of float) +0:152 Sequence +0:152 move second child to first child ( temp 3-element array of 2-element array of 4-component vector of float) +0:152 'a4' ( temp 3-element array of 2-element array of 4-component vector of float) +0:152 Constant: +0:152 0.000000 +0:152 0.000000 +0:152 0.000000 +0:152 0.000000 +0:152 1.000000 +0:152 1.000000 +0:152 1.000000 +0:152 1.000000 +0:152 0.000000 +0:152 0.000000 +0:152 0.000000 +0:152 0.000000 +0:152 1.000000 +0:152 1.000000 +0:152 1.000000 +0:152 1.000000 +0:152 0.000000 +0:152 0.000000 +0:152 0.000000 +0:152 0.000000 +0:152 1.000000 +0:152 1.000000 +0:152 1.000000 +0:152 1.000000 +0:? Sequence +0:159 Sequence +0:159 Sequence +0:159 move second child to first child ( temp 5-element array of float) +0:159 'b' ( temp 5-element array of float) +0:159 'a' ( temp 5-element array of float) +0:162 Sequence +0:162 Sequence +0:162 move second child to first child ( temp 5-element array of float) +0:162 'b' ( temp 5-element array of float) +0:162 'a' ( temp 5-element array of float) +0:165 Sequence +0:165 Sequence +0:165 move second child to first child ( temp 5-element array of float) +0:165 'b' ( temp 5-element array of float) +0:165 Constant: +0:165 1.000000 +0:165 2.000000 +0:165 3.000000 +0:165 4.000000 +0:165 5.000000 +0:167 Constant: +0:167 5 (const int) +0:? Sequence +0:171 Constant: +0:171 3 (const int) +0:172 Constant: +0:172 2 (const int) +0:175 Constant: +0:175 0.000000 +0:178 Constant: +0:178 0.000000 +0:193 Sequence +0:193 move second child to first child ( temp structure{ temp float a, temp int b}) +0:193 'e' ( temp structure{ temp float a, temp int b}) +0:193 Constant: +0:193 1.200000 +0:193 2 (const int) +0:216 Sequence +0:216 Sequence +0:216 move second child to first child ( temp 5-element array of float) +0:216 'a' ( temp 5-element array of float) +0:216 Constant: +0:216 3.400000 +0:216 4.200000 +0:216 5.000000 +0:216 5.200000 +0:216 1.100000 +0:217 Sequence +0:217 move second child to first child ( temp 5-element array of float) +0:217 'b' ( temp 5-element array of float) +0:217 Constant: +0:217 3.400000 +0:217 4.200000 +0:217 5.000000 +0:217 5.200000 +0:217 1.100000 +0:218 Sequence +0:218 move second child to first child ( temp 5-element array of float) +0:218 'c' ( temp 5-element array of float) +0:218 'a' ( temp 5-element array of float) +0:219 Sequence +0:219 move second child to first child ( temp 5-element array of float) +0:219 'd' ( temp 5-element array of float) +0:219 'b' ( temp 5-element array of float) +0:? Sequence +0:223 Sequence +0:223 move second child to first child ( temp float) +0:223 'ceiling' ( const (read only) float) +0:223 Convert int to float ( temp float) +0:223 add ( temp int) +0:223 'a' ( global int) +0:223 'b' ( global int) +0:? Linker Objects +0:? 'a' ( global int) +0:? 'b' ( global int) +0:? 'c' ( global uint) +0:? 'd' ( global uint) +0:? 'e' ( global int) +0:? 'f' ( global uint) +0:? 'g' ( global int) +0:? 'h' ( global int) +0:? 'i' ( global int) +0:? 'j' ( global int) +0:? 'k' ( global int) +0:? 'l' ( global int) +0:? 'fa' ( global float) +0:? 'fb' ( global float) +0:? 'fc' ( global double) +0:? 'fd' ( global double) +0:? 'texcoord1' ( global 2-component vector of float) +0:? 'texcoord2' ( global 2-component vector of float) +0:? 'position' ( global 3-component vector of float) +0:? 'myRGBA' ( global 4-component vector of float) +0:? 'textureLookup' ( global 2-component vector of int) +0:? 'less' ( global 3-component vector of bool) +0:? 'mat2D' ( global 2X2 matrix of float) +0:? 'optMatrix' ( global 3X3 matrix of float) +0:? 'view' ( global 4X4 matrix of float) +0:? 'projection' ( global 4X4 matrix of float) +0:? 'm' ( global 3X2 matrix of float) +0:? 'highPrecisionMVP' ( global 4X4 matrix of double) +0:? 'dm' ( global 2X4 matrix of double) +0:? 'lightVar' ( global structure{ global float intensity, global 3-component vector of float position}) +0:? 'frequencies' ( global 3-element array of float) +0:? 'lightPosition' ( uniform 4-element array of 4-component vector of float) +0:? 'lights' ( global 2-element array of structure{ global float intensity, global 3-component vector of float position}) +0:? 'numLights' ( const int) +0:? 2 (const int) +0:? 'normal' ( smooth in 3-component vector of float) +0:? 'TexCoord' ( centroid smooth in 2-component vector of float) +0:? 'Color' ( invariant centroid smooth in 4-component vector of float) +0:? 'temperature' ( noperspective in float) +0:? 'myColor' ( flat in 3-component vector of float) +0:? 'myTexCoord' ( centroid noperspective in 2-component vector of float) +0:? 'color' ( uniform 3-component vector of float) +0:? 0.700000 +0:? 0.700000 +0:? 0.200000 +0:? 'anon@0' ( in block{ smooth in 4-component vector of float Color1, smooth in 4-component vector of float Color2, in 2-component vector of float TexCoordA, in float Atten}) +0:? 'anon@1' ( in block{ in 4-component vector of float LightPos, in 3-component vector of float LightColor}) +0:? 'Materiala' ( in block{ in 4-component vector of float Color, in 2-component vector of float TexCoord}) +0:? 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:? 'factor' (layout( location=3 index=1) out 4-component vector of float) +0:? 'colors' (layout( location=2) out 3-element array of 4-component vector of float) +0:? 'gl_FragDepth' ( gl_FragDepth float FragDepth) +0:? 'anon@2' ( in block{ in float FogFragCoord gl_FogFragCoord, in implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord, flat in 4-component vector of float Color gl_Color, in 4-component vector of float SecondaryColor gl_SecondaryColor}) + + +Linked fragment stage: + + +Shader version: 430 +Requested GL_3DL_array_objects +gl_FragCoord pixel center is integer +gl_FragCoord origin is upper left +using early_fragment_tests +using depth_greater +ERROR: node is still EOpNull! +0:5 Sequence +0:5 move second child to first child ( temp int) +0:5 'a' ( global int) +0:5 Constant: +0:5 -1 (const int) +0:7 Sequence +0:7 move second child to first child ( temp uint) +0:7 'c' ( global uint) +0:7 Constant: +0:7 4294967295 (const uint) +0:8 Sequence +0:8 move second child to first child ( temp uint) +0:8 'd' ( global uint) +0:8 Constant: +0:8 4294967295 (const uint) +0:9 Sequence +0:9 move second child to first child ( temp int) +0:9 'e' ( global int) +0:9 Constant: +0:9 -1 (const int) +0:13 Sequence +0:13 move second child to first child ( temp uint) +0:13 'f' ( global uint) +0:13 Constant: +0:13 4294967295 (const uint) +0:17 Sequence +0:17 move second child to first child ( temp int) +0:17 'g' ( global int) +0:17 Constant: +0:17 -1294967296 (const int) +0:19 Sequence +0:19 move second child to first child ( temp int) +0:19 'h' ( global int) +0:19 Constant: +0:19 -1610612736 (const int) +0:20 Sequence +0:20 move second child to first child ( temp int) +0:20 'i' ( global int) +0:20 Constant: +0:20 -1 (const int) +0:21 Sequence +0:21 move second child to first child ( temp int) +0:21 'j' ( global int) +0:21 Constant: +0:21 -1 (const int) +0:22 Sequence +0:22 move second child to first child ( temp int) +0:22 'k' ( global int) +0:22 Constant: +0:22 -2147483648 (const int) +0:23 Sequence +0:23 move second child to first child ( temp int) +0:23 'l' ( global int) +0:23 Constant: +0:23 -2147483648 (const int) +0:25 Sequence +0:25 move second child to first child ( temp float) +0:25 'fb' ( global float) +0:25 Constant: +0:25 1.500000 +0:26 Sequence +0:26 move second child to first child ( temp double) +0:26 'fd' ( global double) +0:26 Constant: +0:26 2.000000 +0:137 Function Definition: main( ( global void) +0:137 Function Parameters: +0:140 Sequence +0:140 Sequence +0:140 Sequence +0:140 move second child to first child ( temp 5-element array of float) +0:140 'a' ( temp 5-element array of float) +0:140 Constant: +0:140 3.400000 +0:140 4.200000 +0:140 5.000000 +0:140 5.200000 +0:140 1.100000 +0:143 Sequence +0:143 Sequence +0:143 move second child to first child ( temp 5-element array of float) +0:143 'a' ( temp 5-element array of float) +0:143 Constant: +0:143 3.400000 +0:143 4.200000 +0:143 5.000000 +0:143 5.200000 +0:143 1.100000 +0:? Sequence +0:149 Sequence +0:149 move second child to first child ( temp 2-element array of 4-component vector of float) +0:149 'b' ( temp 2-element array of 4-component vector of float) +0:149 Constant: +0:149 0.000000 +0:149 0.000000 +0:149 0.000000 +0:149 0.000000 +0:149 0.100000 +0:149 0.100000 +0:149 0.100000 +0:149 0.100000 +0:150 Sequence +0:150 move second child to first child ( temp 3-element array of 2-element array of 4-component vector of float) +0:150 'a3' ( temp 3-element array of 2-element array of 4-component vector of float) +0:150 Construct vec4 ( temp 3-element array of 2-element array of 4-component vector of float) +0:150 'b' ( temp 2-element array of 4-component vector of float) +0:150 'b' ( temp 2-element array of 4-component vector of float) +0:150 'b' ( temp 2-element array of 4-component vector of float) +0:152 Sequence +0:152 move second child to first child ( temp 3-element array of 2-element array of 4-component vector of float) +0:152 'a4' ( temp 3-element array of 2-element array of 4-component vector of float) +0:152 Constant: +0:152 0.000000 +0:152 0.000000 +0:152 0.000000 +0:152 0.000000 +0:152 1.000000 +0:152 1.000000 +0:152 1.000000 +0:152 1.000000 +0:152 0.000000 +0:152 0.000000 +0:152 0.000000 +0:152 0.000000 +0:152 1.000000 +0:152 1.000000 +0:152 1.000000 +0:152 1.000000 +0:152 0.000000 +0:152 0.000000 +0:152 0.000000 +0:152 0.000000 +0:152 1.000000 +0:152 1.000000 +0:152 1.000000 +0:152 1.000000 +0:? Sequence +0:159 Sequence +0:159 Sequence +0:159 move second child to first child ( temp 5-element array of float) +0:159 'b' ( temp 5-element array of float) +0:159 'a' ( temp 5-element array of float) +0:162 Sequence +0:162 Sequence +0:162 move second child to first child ( temp 5-element array of float) +0:162 'b' ( temp 5-element array of float) +0:162 'a' ( temp 5-element array of float) +0:165 Sequence +0:165 Sequence +0:165 move second child to first child ( temp 5-element array of float) +0:165 'b' ( temp 5-element array of float) +0:165 Constant: +0:165 1.000000 +0:165 2.000000 +0:165 3.000000 +0:165 4.000000 +0:165 5.000000 +0:167 Constant: +0:167 5 (const int) +0:? Sequence +0:171 Constant: +0:171 3 (const int) +0:172 Constant: +0:172 2 (const int) +0:175 Constant: +0:175 0.000000 +0:178 Constant: +0:178 0.000000 +0:193 Sequence +0:193 move second child to first child ( temp structure{ temp float a, temp int b}) +0:193 'e' ( temp structure{ temp float a, temp int b}) +0:193 Constant: +0:193 1.200000 +0:193 2 (const int) +0:216 Sequence +0:216 Sequence +0:216 move second child to first child ( temp 5-element array of float) +0:216 'a' ( temp 5-element array of float) +0:216 Constant: +0:216 3.400000 +0:216 4.200000 +0:216 5.000000 +0:216 5.200000 +0:216 1.100000 +0:217 Sequence +0:217 move second child to first child ( temp 5-element array of float) +0:217 'b' ( temp 5-element array of float) +0:217 Constant: +0:217 3.400000 +0:217 4.200000 +0:217 5.000000 +0:217 5.200000 +0:217 1.100000 +0:218 Sequence +0:218 move second child to first child ( temp 5-element array of float) +0:218 'c' ( temp 5-element array of float) +0:218 'a' ( temp 5-element array of float) +0:219 Sequence +0:219 move second child to first child ( temp 5-element array of float) +0:219 'd' ( temp 5-element array of float) +0:219 'b' ( temp 5-element array of float) +0:? Sequence +0:223 Sequence +0:223 move second child to first child ( temp float) +0:223 'ceiling' ( const (read only) float) +0:223 Convert int to float ( temp float) +0:223 add ( temp int) +0:223 'a' ( global int) +0:223 'b' ( global int) +0:? Linker Objects +0:? 'a' ( global int) +0:? 'b' ( global int) +0:? 'c' ( global uint) +0:? 'd' ( global uint) +0:? 'e' ( global int) +0:? 'f' ( global uint) +0:? 'g' ( global int) +0:? 'h' ( global int) +0:? 'i' ( global int) +0:? 'j' ( global int) +0:? 'k' ( global int) +0:? 'l' ( global int) +0:? 'fa' ( global float) +0:? 'fb' ( global float) +0:? 'fc' ( global double) +0:? 'fd' ( global double) +0:? 'texcoord1' ( global 2-component vector of float) +0:? 'texcoord2' ( global 2-component vector of float) +0:? 'position' ( global 3-component vector of float) +0:? 'myRGBA' ( global 4-component vector of float) +0:? 'textureLookup' ( global 2-component vector of int) +0:? 'less' ( global 3-component vector of bool) +0:? 'mat2D' ( global 2X2 matrix of float) +0:? 'optMatrix' ( global 3X3 matrix of float) +0:? 'view' ( global 4X4 matrix of float) +0:? 'projection' ( global 4X4 matrix of float) +0:? 'm' ( global 3X2 matrix of float) +0:? 'highPrecisionMVP' ( global 4X4 matrix of double) +0:? 'dm' ( global 2X4 matrix of double) +0:? 'lightVar' ( global structure{ global float intensity, global 3-component vector of float position}) +0:? 'frequencies' ( global 3-element array of float) +0:? 'lightPosition' ( uniform 4-element array of 4-component vector of float) +0:? 'lights' ( global 2-element array of structure{ global float intensity, global 3-component vector of float position}) +0:? 'numLights' ( const int) +0:? 2 (const int) +0:? 'normal' ( smooth in 3-component vector of float) +0:? 'TexCoord' ( centroid smooth in 2-component vector of float) +0:? 'Color' ( invariant centroid smooth in 4-component vector of float) +0:? 'temperature' ( noperspective in float) +0:? 'myColor' ( flat in 3-component vector of float) +0:? 'myTexCoord' ( centroid noperspective in 2-component vector of float) +0:? 'color' ( uniform 3-component vector of float) +0:? 0.700000 +0:? 0.700000 +0:? 0.200000 +0:? 'anon@0' ( in block{ smooth in 4-component vector of float Color1, smooth in 4-component vector of float Color2, in 2-component vector of float TexCoordA, in float Atten}) +0:? 'anon@1' ( in block{ in 4-component vector of float LightPos, in 3-component vector of float LightColor}) +0:? 'Materiala' ( in block{ in 4-component vector of float Color, in 2-component vector of float TexCoord}) +0:? 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:? 'factor' (layout( location=3 index=1) out 4-component vector of float) +0:? 'colors' (layout( location=2) out 3-element array of 4-component vector of float) +0:? 'gl_FragDepth' ( gl_FragDepth float FragDepth) +0:? 'anon@2' ( in block{ in float FogFragCoord gl_FogFragCoord, in 1-element array of 4-component vector of float TexCoord gl_TexCoord, flat in 4-component vector of float Color gl_Color, in 4-component vector of float SecondaryColor gl_SecondaryColor}) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/specExamples.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/specExamples.vert.out new file mode 100644 index 0000000..f050477 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/specExamples.vert.out @@ -0,0 +1,600 @@ +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 +ERROR: 0:33: 'lines' : unrecognized layout identifier, or qualifier requires assignment (e.g., binding = 4) +ERROR: 0:35: 'triangle_strip' : unrecognized layout identifier, or qualifier requires assignment (e.g., binding = 4) +ERROR: 0:35: 'max_vertices' : there is no such layout identifier for this stage taking an assigned value +ERROR: 0:36: 'max_vertices' : there is no such layout identifier for this stage taking an assigned value +ERROR: 0:37: 'triangle_strip' : unrecognized layout identifier, or qualifier requires assignment (e.g., binding = 4) +ERROR: 0:41: 'stream' : there is no such layout identifier for this stage taking an assigned value +ERROR: 0:43: 'stream' : there is no such layout identifier for this stage taking an assigned value +ERROR: 0:45: 'stream' : there is no such layout identifier for this stage taking an assigned value +ERROR: 0:46: 'stream' : there is no such layout identifier for this stage taking an assigned value +ERROR: 0:47: 'stream' : there is no such layout identifier for this stage taking an assigned value +ERROR: 0:50: 'stream' : there is no such layout identifier for this stage taking an assigned value +ERROR: 0:55: 'stream' : there is no such layout identifier for this stage taking an assigned value +ERROR: 0:80: 's17' : redefinition +ERROR: 0:85: 'binding' : atomic_uint binding is too large; see gl_MaxAtomicCounterBindings +ERROR: 0:87: 'binding' : atomic_uint binding is too large; see gl_MaxAtomicCounterBindings +ERROR: 0:89: 'binding' : atomic_uint binding is too large +ERROR: 0:91: 'bar' : redefinition +ERROR: 0:92: 'atomic_uint' : layout(binding=X) is required +ERROR: 0:94: 'a2' : redefinition +ERROR: 0:95: 'binding' : atomic_uint binding is too large; see gl_MaxAtomicCounterBindings +ERROR: 0:96: 'binding' : atomic_uint binding is too large; see gl_MaxAtomicCounterBindings +ERROR: 0:97: 'binding' : atomic_uint binding is too large; see gl_MaxAtomicCounterBindings +ERROR: 0:106: '' : vertex input cannot be further qualified +ERROR: 0:106: 'redeclaration' : cannot change storage, memory, or auxiliary qualification of gl_FrontColor +ERROR: 0:112: 'ColorIvn' : identifier not previously declared +ERROR: 0:132: 'shared' : not supported in this stage: vertex +ERROR: 0:134: '' : function does not return a value: funcA +ERROR: 0:136: '' : function does not return a value: funcB +ERROR: 0:153: '' : function does not return a value: func3 +ERROR: 0:170: 'coherent' : argument cannot drop memory qualifier when passed to formal parameter +ERROR: 33 compilation errors. No code generated. + + +Shader version: 430 +Requested GL_3DL_array_objects +ERROR: node is still EOpNull! +0:134 Function Definition: funcA(I21; ( global 4-component vector of float) +0:134 Function Parameters: +0:134 'a' ( restrict in image2D) +0:136 Function Definition: funcB(I21; ( global 4-component vector of float) +0:136 Function Parameters: +0:136 'a' ( in image2D) +0:140 Function Definition: func(f1;f1;f1;f1; ( global float) +0:140 Function Parameters: +0:140 'e' ( in float) +0:140 'f' ( in float) +0:140 'g' ( in float) +0:140 'h' ( in float) +0:142 Sequence +0:142 Branch: Return with expression +0:142 add ( temp float) +0:142 component-wise multiply ( temp float) +0:142 'e' ( in float) +0:142 'f' ( in float) +0:142 component-wise multiply ( temp float) +0:142 'g' ( in float) +0:142 'h' ( in float) +0:146 Function Definition: func2(f1;f1;f1;f1; ( global float) +0:146 Function Parameters: +0:146 'e' ( in float) +0:146 'f' ( in float) +0:146 'g' ( in float) +0:146 'h' ( in float) +0:148 Sequence +0:148 Sequence +0:148 move second child to first child ( temp float) +0:148 'result' ( noContraction temp float) +0:148 add ( temp float) +0:148 component-wise multiply ( temp float) +0:148 'e' ( in float) +0:148 'f' ( in float) +0:148 component-wise multiply ( temp float) +0:148 'g' ( in float) +0:148 'h' ( in float) +0:150 Branch: Return with expression +0:150 'result' ( noContraction temp float) +0:153 Function Definition: func3(f1;f1;f1; ( global float) +0:153 Function Parameters: +0:153 'i' ( in float) +0:153 'j' ( in float) +0:153 'k' ( noContraction out float) +0:155 Sequence +0:155 move second child to first child ( temp float) +0:155 'k' ( noContraction out float) +0:155 add ( temp float) +0:155 component-wise multiply ( temp float) +0:155 'i' ( in float) +0:155 'i' ( in float) +0:155 'j' ( in float) +0:158 Function Definition: main( ( global void) +0:158 Function Parameters: +0:160 Sequence +0:160 Sequence +0:160 move second child to first child ( temp 3-component vector of float) +0:160 'r' ( temp 3-component vector of float) +0:160 Construct vec3 ( temp 3-component vector of float) +0:160 component-wise multiply ( temp 4-component vector of float) +0:160 'a' ( in 4-component vector of float) +0:160 'b' ( in 4-component vector of float) +0:161 Sequence +0:161 move second child to first child ( temp 3-component vector of float) +0:161 's' ( temp 3-component vector of float) +0:161 Construct vec3 ( temp 3-component vector of float) +0:161 component-wise multiply ( temp 4-component vector of float) +0:161 'c' ( in 4-component vector of float) +0:161 'd' ( in 4-component vector of float) +0:162 move second child to first child ( temp 3-component vector of float) +0:162 vector swizzle ( noContraction temp 3-component vector of float) +0:162 'v' ( noContraction smooth out 4-component vector of float) +0:162 Sequence +0:162 Constant: +0:162 0 (const int) +0:162 Constant: +0:162 1 (const int) +0:162 Constant: +0:162 2 (const int) +0:162 add ( temp 3-component vector of float) +0:162 'r' ( temp 3-component vector of float) +0:162 's' ( temp 3-component vector of float) +0:163 move second child to first child ( temp float) +0:163 direct index ( noContraction temp float) +0:163 'v' ( noContraction smooth out 4-component vector of float) +0:163 Constant: +0:163 3 (const int) +0:163 add ( temp float) +0:163 component-wise multiply ( temp float) +0:163 direct index ( temp float) +0:163 'a' ( in 4-component vector of float) +0:163 Constant: +0:163 3 (const int) +0:163 direct index ( temp float) +0:163 'b' ( in 4-component vector of float) +0:163 Constant: +0:163 3 (const int) +0:163 component-wise multiply ( temp float) +0:163 direct index ( temp float) +0:163 'c' ( in 4-component vector of float) +0:163 Constant: +0:163 3 (const int) +0:163 direct index ( temp float) +0:163 'd' ( in 4-component vector of float) +0:163 Constant: +0:163 3 (const int) +0:164 move second child to first child ( temp float) +0:164 direct index ( noContraction temp float) +0:164 'v' ( noContraction smooth out 4-component vector of float) +0:164 Constant: +0:164 0 (const int) +0:164 Function Call: func(f1;f1;f1;f1; ( global float) +0:164 direct index ( temp float) +0:164 'a' ( in 4-component vector of float) +0:164 Constant: +0:164 0 (const int) +0:164 direct index ( temp float) +0:164 'b' ( in 4-component vector of float) +0:164 Constant: +0:164 0 (const int) +0:164 direct index ( temp float) +0:164 'c' ( in 4-component vector of float) +0:164 Constant: +0:164 0 (const int) +0:164 direct index ( temp float) +0:164 'd' ( in 4-component vector of float) +0:164 Constant: +0:164 0 (const int) +0:166 move second child to first child ( temp float) +0:166 direct index ( noContraction temp float) +0:166 'v' ( noContraction smooth out 4-component vector of float) +0:166 Constant: +0:166 0 (const int) +0:166 Function Call: func2(f1;f1;f1;f1; ( global float) +0:166 direct index ( temp float) +0:166 'a' ( in 4-component vector of float) +0:166 Constant: +0:166 0 (const int) +0:166 direct index ( temp float) +0:166 'b' ( in 4-component vector of float) +0:166 Constant: +0:166 0 (const int) +0:166 direct index ( temp float) +0:166 'c' ( in 4-component vector of float) +0:166 Constant: +0:166 0 (const int) +0:166 direct index ( temp float) +0:166 'd' ( in 4-component vector of float) +0:166 Constant: +0:166 0 (const int) +0:167 Function Call: func3(f1;f1;f1; ( global float) +0:167 component-wise multiply ( temp float) +0:167 direct index ( temp float) +0:167 'a' ( in 4-component vector of float) +0:167 Constant: +0:167 0 (const int) +0:167 direct index ( temp float) +0:167 'b' ( in 4-component vector of float) +0:167 Constant: +0:167 0 (const int) +0:167 component-wise multiply ( temp float) +0:167 direct index ( temp float) +0:167 'c' ( in 4-component vector of float) +0:167 Constant: +0:167 0 (const int) +0:167 direct index ( temp float) +0:167 'd' ( in 4-component vector of float) +0:167 Constant: +0:167 0 (const int) +0:167 direct index ( noContraction temp float) +0:167 'v' ( noContraction smooth out 4-component vector of float) +0:167 Constant: +0:167 0 (const int) +0:169 Function Call: funcA(I21; ( global 4-component vector of float) +0:169 'img1' (layout( rgba32f) uniform image2D) +0:170 Function Call: funcB(I21; ( global 4-component vector of float) +0:170 'img2' (layout( rgba32f) coherent uniform image2D) +0:? Sequence +0:178 Sequence +0:178 move second child to first child ( temp structure{ temp float intensity, temp 3-component vector of float position}) +0:178 'lightVar' ( temp structure{ temp float intensity, temp 3-component vector of float position}) +0:178 Constant: +0:178 3.000000 +0:178 1.000000 +0:178 2.000000 +0:178 3.000000 +0:? Sequence +0:185 Sequence +0:185 move second child to first child ( temp 5-element array of float) +0:185 'a' ( temp 5-element array of float) +0:185 Construct float ( temp 5-element array of float) +0:185 'g' ( temp float) +0:185 Constant: +0:185 1.000000 +0:185 'g' ( temp float) +0:185 Constant: +0:185 2.300000 +0:185 'g' ( temp float) +0:188 move second child to first child ( temp 3-element array of float) +0:188 'b' ( temp 3-element array of float) +0:188 Construct float ( temp 3-element array of float) +0:188 'g' ( temp float) +0:188 add ( temp float) +0:188 'g' ( temp float) +0:188 Constant: +0:188 1.000000 +0:188 add ( temp float) +0:188 'g' ( temp float) +0:188 Constant: +0:188 2.000000 +0:191 Sequence +0:191 Sequence +0:191 move second child to first child ( temp 2-element array of 4-component vector of float) +0:191 'b' ( temp 2-element array of 4-component vector of float) +0:191 Constant: +0:191 1.000000 +0:191 1.000000 +0:191 1.000000 +0:191 1.000000 +0:191 1.000000 +0:191 1.000000 +0:191 1.000000 +0:191 1.000000 +0:192 Construct vec4 ( temp 3-element array of 2-element array of 4-component vector of float) +0:192 'b' ( temp 2-element array of 4-component vector of float) +0:192 'b' ( temp 2-element array of 4-component vector of float) +0:192 'b' ( temp 2-element array of 4-component vector of float) +0:193 Construct vec4 ( temp 3-element array of 2-element array of 4-component vector of float) +0:193 'b' ( temp 2-element array of 4-component vector of float) +0:193 'b' ( temp 2-element array of 4-component vector of float) +0:193 'b' ( temp 2-element array of 4-component vector of float) +0:194 Construct vec4 ( temp 3-element array of 2-element array of 4-component vector of float) +0:194 'b' ( temp 2-element array of 4-component vector of float) +0:194 'b' ( temp 2-element array of 4-component vector of float) +0:194 'b' ( temp 2-element array of 4-component vector of float) +0:? Linker Objects +0:? 'Coords' ( out block{ out 4-component vector of float Position, out 2-component vector of float Texture}) +0:? 'anon@0' ( out block{ out 4-component vector of float Color}) +0:? 'transforms' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform 4X4 matrix of float ModelViewMatrix, layout( column_major shared) uniform 4X4 matrix of float ModelViewProjectionMatrix, layout( column_major shared) uniform implicitly-sized array of 4-component vector of float a, layout( column_major shared) uniform float Deformation}) +0:? 'normal' (layout( location=3) in 4-component vector of float) +0:? 'colors' (layout( location=6) in 3-element array of 4-component vector of float) +0:? 'transforms2' (layout( location=9) in 2-element array of 4X4 matrix of float) +0:? 's' (layout( location=3) temp structure{ global 3-component vector of float a1, global 2X2 matrix of float b, global 2-element array of 4-component vector of float c}) +0:? 'var1' ( smooth out 4-component vector of float) +0:? 'anon@1' ( out block{ out 4-component vector of float var2, out 2-component vector of float var3, out 3-component vector of float var4}) +0:? 'var5' ( smooth out 4-component vector of float) +0:? 'anon@2' ( out block{ out 4-component vector of float var6}) +0:? 'var7' ( smooth out 4-component vector of float) +0:? 'anon@3' (layout( row_major std140) uniform block{layout( row_major std140 offset=0) uniform 4X4 matrix of float M1, layout( column_major std140 offset=64) uniform 4X4 matrix of float M2, layout( row_major std140 offset=128) uniform 3X3 matrix of float N1}) +0:? 'anon@4' (layout( column_major shared) uniform block{layout( column_major shared) uniform 4X4 matrix of float M13, layout( row_major shared) uniform 4X4 matrix of float m14, layout( column_major shared) uniform 3X3 matrix of float N12}) +0:? 's17' (layout( binding=3) uniform sampler2D) +0:? 'a2' (layout( binding=2 offset=4) uniform atomic_uint) +0:? 'bar' (layout( binding=2) uniform atomic_uint) +0:? 'bar23' (layout( offset=8) uniform atomic_uint) +0:? 'b2' (layout( binding=2) uniform atomic_uint) +0:? 'c2' (layout( binding=3) uniform atomic_uint) +0:? 'd2' (layout( binding=2) uniform atomic_uint) +0:? 'anon@5' ( out block{ invariant 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, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, flat out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:? 'ColorInv' ( smooth out 3-component vector of float) +0:? 'Color4' ( invariant centroid smooth out 3-component vector of float) +0:? 'position' ( noContraction smooth out 4-component vector of float) +0:? 'Color5' ( noContraction smooth out 3-component vector of float) +0:? 'a' ( in 4-component vector of float) +0:? 'b' ( in 4-component vector of float) +0:? 'c' ( in 4-component vector of float) +0:? 'd' ( in 4-component vector of float) +0:? 'v' ( noContraction smooth out 4-component vector of float) +0:? 'anon@6' (layout( column_major shared) coherent buffer block{layout( column_major shared) readonly buffer 4-component vector of float member1, layout( column_major shared) buffer 4-component vector of float member2}) +0:? 'anon@7' (layout( column_major shared) buffer block{layout( column_major shared) coherent readonly buffer 4-component vector of float member1A, layout( column_major shared) coherent buffer 4-component vector of float member2A}) +0:? 'shv' ( shared 4-component vector of float) +0:? 'img1' (layout( rgba32f) uniform image2D) +0:? 'img2' (layout( rgba32f) coherent uniform image2D) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + + +Linked vertex stage: + + +Shader version: 430 +Requested GL_3DL_array_objects +ERROR: node is still EOpNull! +0:134 Function Definition: funcA(I21; ( global 4-component vector of float) +0:134 Function Parameters: +0:134 'a' ( restrict in image2D) +0:136 Function Definition: funcB(I21; ( global 4-component vector of float) +0:136 Function Parameters: +0:136 'a' ( in image2D) +0:140 Function Definition: func(f1;f1;f1;f1; ( global float) +0:140 Function Parameters: +0:140 'e' ( in float) +0:140 'f' ( in float) +0:140 'g' ( in float) +0:140 'h' ( in float) +0:142 Sequence +0:142 Branch: Return with expression +0:142 add ( temp float) +0:142 component-wise multiply ( temp float) +0:142 'e' ( in float) +0:142 'f' ( in float) +0:142 component-wise multiply ( temp float) +0:142 'g' ( in float) +0:142 'h' ( in float) +0:146 Function Definition: func2(f1;f1;f1;f1; ( global float) +0:146 Function Parameters: +0:146 'e' ( in float) +0:146 'f' ( in float) +0:146 'g' ( in float) +0:146 'h' ( in float) +0:148 Sequence +0:148 Sequence +0:148 move second child to first child ( temp float) +0:148 'result' ( noContraction temp float) +0:148 add ( temp float) +0:148 component-wise multiply ( temp float) +0:148 'e' ( in float) +0:148 'f' ( in float) +0:148 component-wise multiply ( temp float) +0:148 'g' ( in float) +0:148 'h' ( in float) +0:150 Branch: Return with expression +0:150 'result' ( noContraction temp float) +0:153 Function Definition: func3(f1;f1;f1; ( global float) +0:153 Function Parameters: +0:153 'i' ( in float) +0:153 'j' ( in float) +0:153 'k' ( noContraction out float) +0:155 Sequence +0:155 move second child to first child ( temp float) +0:155 'k' ( noContraction out float) +0:155 add ( temp float) +0:155 component-wise multiply ( temp float) +0:155 'i' ( in float) +0:155 'i' ( in float) +0:155 'j' ( in float) +0:158 Function Definition: main( ( global void) +0:158 Function Parameters: +0:160 Sequence +0:160 Sequence +0:160 move second child to first child ( temp 3-component vector of float) +0:160 'r' ( temp 3-component vector of float) +0:160 Construct vec3 ( temp 3-component vector of float) +0:160 component-wise multiply ( temp 4-component vector of float) +0:160 'a' ( in 4-component vector of float) +0:160 'b' ( in 4-component vector of float) +0:161 Sequence +0:161 move second child to first child ( temp 3-component vector of float) +0:161 's' ( temp 3-component vector of float) +0:161 Construct vec3 ( temp 3-component vector of float) +0:161 component-wise multiply ( temp 4-component vector of float) +0:161 'c' ( in 4-component vector of float) +0:161 'd' ( in 4-component vector of float) +0:162 move second child to first child ( temp 3-component vector of float) +0:162 vector swizzle ( noContraction temp 3-component vector of float) +0:162 'v' ( noContraction smooth out 4-component vector of float) +0:162 Sequence +0:162 Constant: +0:162 0 (const int) +0:162 Constant: +0:162 1 (const int) +0:162 Constant: +0:162 2 (const int) +0:162 add ( temp 3-component vector of float) +0:162 'r' ( temp 3-component vector of float) +0:162 's' ( temp 3-component vector of float) +0:163 move second child to first child ( temp float) +0:163 direct index ( noContraction temp float) +0:163 'v' ( noContraction smooth out 4-component vector of float) +0:163 Constant: +0:163 3 (const int) +0:163 add ( temp float) +0:163 component-wise multiply ( temp float) +0:163 direct index ( temp float) +0:163 'a' ( in 4-component vector of float) +0:163 Constant: +0:163 3 (const int) +0:163 direct index ( temp float) +0:163 'b' ( in 4-component vector of float) +0:163 Constant: +0:163 3 (const int) +0:163 component-wise multiply ( temp float) +0:163 direct index ( temp float) +0:163 'c' ( in 4-component vector of float) +0:163 Constant: +0:163 3 (const int) +0:163 direct index ( temp float) +0:163 'd' ( in 4-component vector of float) +0:163 Constant: +0:163 3 (const int) +0:164 move second child to first child ( temp float) +0:164 direct index ( noContraction temp float) +0:164 'v' ( noContraction smooth out 4-component vector of float) +0:164 Constant: +0:164 0 (const int) +0:164 Function Call: func(f1;f1;f1;f1; ( global float) +0:164 direct index ( temp float) +0:164 'a' ( in 4-component vector of float) +0:164 Constant: +0:164 0 (const int) +0:164 direct index ( temp float) +0:164 'b' ( in 4-component vector of float) +0:164 Constant: +0:164 0 (const int) +0:164 direct index ( temp float) +0:164 'c' ( in 4-component vector of float) +0:164 Constant: +0:164 0 (const int) +0:164 direct index ( temp float) +0:164 'd' ( in 4-component vector of float) +0:164 Constant: +0:164 0 (const int) +0:166 move second child to first child ( temp float) +0:166 direct index ( noContraction temp float) +0:166 'v' ( noContraction smooth out 4-component vector of float) +0:166 Constant: +0:166 0 (const int) +0:166 Function Call: func2(f1;f1;f1;f1; ( global float) +0:166 direct index ( temp float) +0:166 'a' ( in 4-component vector of float) +0:166 Constant: +0:166 0 (const int) +0:166 direct index ( temp float) +0:166 'b' ( in 4-component vector of float) +0:166 Constant: +0:166 0 (const int) +0:166 direct index ( temp float) +0:166 'c' ( in 4-component vector of float) +0:166 Constant: +0:166 0 (const int) +0:166 direct index ( temp float) +0:166 'd' ( in 4-component vector of float) +0:166 Constant: +0:166 0 (const int) +0:167 Function Call: func3(f1;f1;f1; ( global float) +0:167 component-wise multiply ( temp float) +0:167 direct index ( temp float) +0:167 'a' ( in 4-component vector of float) +0:167 Constant: +0:167 0 (const int) +0:167 direct index ( temp float) +0:167 'b' ( in 4-component vector of float) +0:167 Constant: +0:167 0 (const int) +0:167 component-wise multiply ( temp float) +0:167 direct index ( temp float) +0:167 'c' ( in 4-component vector of float) +0:167 Constant: +0:167 0 (const int) +0:167 direct index ( temp float) +0:167 'd' ( in 4-component vector of float) +0:167 Constant: +0:167 0 (const int) +0:167 direct index ( noContraction temp float) +0:167 'v' ( noContraction smooth out 4-component vector of float) +0:167 Constant: +0:167 0 (const int) +0:169 Function Call: funcA(I21; ( global 4-component vector of float) +0:169 'img1' (layout( rgba32f) uniform image2D) +0:170 Function Call: funcB(I21; ( global 4-component vector of float) +0:170 'img2' (layout( rgba32f) coherent uniform image2D) +0:? Sequence +0:178 Sequence +0:178 move second child to first child ( temp structure{ temp float intensity, temp 3-component vector of float position}) +0:178 'lightVar' ( temp structure{ temp float intensity, temp 3-component vector of float position}) +0:178 Constant: +0:178 3.000000 +0:178 1.000000 +0:178 2.000000 +0:178 3.000000 +0:? Sequence +0:185 Sequence +0:185 move second child to first child ( temp 5-element array of float) +0:185 'a' ( temp 5-element array of float) +0:185 Construct float ( temp 5-element array of float) +0:185 'g' ( temp float) +0:185 Constant: +0:185 1.000000 +0:185 'g' ( temp float) +0:185 Constant: +0:185 2.300000 +0:185 'g' ( temp float) +0:188 move second child to first child ( temp 3-element array of float) +0:188 'b' ( temp 3-element array of float) +0:188 Construct float ( temp 3-element array of float) +0:188 'g' ( temp float) +0:188 add ( temp float) +0:188 'g' ( temp float) +0:188 Constant: +0:188 1.000000 +0:188 add ( temp float) +0:188 'g' ( temp float) +0:188 Constant: +0:188 2.000000 +0:191 Sequence +0:191 Sequence +0:191 move second child to first child ( temp 2-element array of 4-component vector of float) +0:191 'b' ( temp 2-element array of 4-component vector of float) +0:191 Constant: +0:191 1.000000 +0:191 1.000000 +0:191 1.000000 +0:191 1.000000 +0:191 1.000000 +0:191 1.000000 +0:191 1.000000 +0:191 1.000000 +0:192 Construct vec4 ( temp 3-element array of 2-element array of 4-component vector of float) +0:192 'b' ( temp 2-element array of 4-component vector of float) +0:192 'b' ( temp 2-element array of 4-component vector of float) +0:192 'b' ( temp 2-element array of 4-component vector of float) +0:193 Construct vec4 ( temp 3-element array of 2-element array of 4-component vector of float) +0:193 'b' ( temp 2-element array of 4-component vector of float) +0:193 'b' ( temp 2-element array of 4-component vector of float) +0:193 'b' ( temp 2-element array of 4-component vector of float) +0:194 Construct vec4 ( temp 3-element array of 2-element array of 4-component vector of float) +0:194 'b' ( temp 2-element array of 4-component vector of float) +0:194 'b' ( temp 2-element array of 4-component vector of float) +0:194 'b' ( temp 2-element array of 4-component vector of float) +0:? Linker Objects +0:? 'Coords' ( out block{ out 4-component vector of float Position, out 2-component vector of float Texture}) +0:? 'anon@0' ( out block{ out 4-component vector of float Color}) +0:? 'transforms' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform 4X4 matrix of float ModelViewMatrix, layout( column_major shared) uniform 4X4 matrix of float ModelViewProjectionMatrix, layout( column_major shared) uniform 1-element array of 4-component vector of float a, layout( column_major shared) uniform float Deformation}) +0:? 'normal' (layout( location=3) in 4-component vector of float) +0:? 'colors' (layout( location=6) in 3-element array of 4-component vector of float) +0:? 'transforms2' (layout( location=9) in 2-element array of 4X4 matrix of float) +0:? 's' (layout( location=3) temp structure{ global 3-component vector of float a1, global 2X2 matrix of float b, global 2-element array of 4-component vector of float c}) +0:? 'var1' ( smooth out 4-component vector of float) +0:? 'anon@1' ( out block{ out 4-component vector of float var2, out 2-component vector of float var3, out 3-component vector of float var4}) +0:? 'var5' ( smooth out 4-component vector of float) +0:? 'anon@2' ( out block{ out 4-component vector of float var6}) +0:? 'var7' ( smooth out 4-component vector of float) +0:? 'anon@3' (layout( row_major std140) uniform block{layout( row_major std140 offset=0) uniform 4X4 matrix of float M1, layout( column_major std140 offset=64) uniform 4X4 matrix of float M2, layout( row_major std140 offset=128) uniform 3X3 matrix of float N1}) +0:? 'anon@4' (layout( column_major shared) uniform block{layout( column_major shared) uniform 4X4 matrix of float M13, layout( row_major shared) uniform 4X4 matrix of float m14, layout( column_major shared) uniform 3X3 matrix of float N12}) +0:? 's17' (layout( binding=3) uniform sampler2D) +0:? 'a2' (layout( binding=2 offset=4) uniform atomic_uint) +0:? 'bar' (layout( binding=2) uniform atomic_uint) +0:? 'bar23' (layout( offset=8) uniform atomic_uint) +0:? 'b2' (layout( binding=2) uniform atomic_uint) +0:? 'c2' (layout( binding=3) uniform atomic_uint) +0:? 'd2' (layout( binding=2) uniform atomic_uint) +0:? 'anon@5' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, flat out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:? 'ColorInv' ( smooth out 3-component vector of float) +0:? 'Color4' ( invariant centroid smooth out 3-component vector of float) +0:? 'position' ( noContraction smooth out 4-component vector of float) +0:? 'Color5' ( noContraction smooth out 3-component vector of float) +0:? 'a' ( in 4-component vector of float) +0:? 'b' ( in 4-component vector of float) +0:? 'c' ( in 4-component vector of float) +0:? 'd' ( in 4-component vector of float) +0:? 'v' ( noContraction smooth out 4-component vector of float) +0:? 'anon@6' (layout( column_major shared) coherent buffer block{layout( column_major shared) readonly buffer 4-component vector of float member1, layout( column_major shared) buffer 4-component vector of float member2}) +0:? 'anon@7' (layout( column_major shared) buffer block{layout( column_major shared) coherent readonly buffer 4-component vector of float member1A, layout( column_major shared) coherent buffer 4-component vector of float member2A}) +0:? 'shv' ( shared 4-component vector of float) +0:? 'img1' (layout( rgba32f) uniform image2D) +0:? 'img2' (layout( rgba32f) coherent uniform image2D) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.100ops.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.100ops.frag.out new file mode 100755 index 0000000..efd8201 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.100ops.frag.out @@ -0,0 +1,100 @@ +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 +// Id's are bound by 49 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 21 26 37 + ExecutionMode 4 OriginUpperLeft + Source ESSL 310 + Name 4 "main" + Name 8 "foo(" + Name 11 "face1" + Name 13 "face2" + Name 17 "z" + Name 21 "low" + Name 26 "high" + Name 37 "Color" + Decorate 8(foo() RelaxedPrecision + Decorate 11(face1) RelaxedPrecision + Decorate 13(face2) RelaxedPrecision + Decorate 17(z) RelaxedPrecision + Decorate 21(low) RelaxedPrecision + Decorate 22 RelaxedPrecision + Decorate 23 RelaxedPrecision + Decorate 25 RelaxedPrecision + Decorate 26(high) RelaxedPrecision + Decorate 27 RelaxedPrecision + Decorate 32 RelaxedPrecision + Decorate 34 RelaxedPrecision + Decorate 37(Color) RelaxedPrecision + Decorate 38 RelaxedPrecision + Decorate 39 RelaxedPrecision + Decorate 40 RelaxedPrecision + Decorate 41 RelaxedPrecision + Decorate 42 RelaxedPrecision + Decorate 43 RelaxedPrecision + Decorate 44 RelaxedPrecision + Decorate 45 RelaxedPrecision + Decorate 46 RelaxedPrecision + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeFunction 6(float) + 10: TypePointer Private 6(float) + 11(face1): 10(ptr) Variable Private + 12: 6(float) Constant 1093664768 + 13(face2): 10(ptr) Variable Private + 14: 6(float) Constant 3221225472 + 15: TypeInt 32 1 + 16: TypePointer Function 15(int) + 18: 15(int) Constant 3 + 19: 6(float) Constant 1073741824 + 20: TypePointer Input 6(float) + 21(low): 20(ptr) Variable Input + 24: 6(float) Constant 1065353216 + 26(high): 20(ptr) Variable Input + 28: TypeBool + 33: 15(int) Constant 1 + 35: TypeVector 6(float) 4 + 36: TypePointer Output 35(fvec4) + 37(Color): 36(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 17(z): 16(ptr) Variable Function + Store 11(face1) 12 + Store 13(face2) 14 + Store 17(z) 18 + 22: 6(float) Load 21(low) + 23: 6(float) FMul 19 22 + 25: 6(float) FAdd 23 24 + 27: 6(float) Load 26(high) + 29: 28(bool) FOrdLessThan 25 27 + SelectionMerge 31 None + BranchConditional 29 30 31 + 30: Label + 32: 15(int) Load 17(z) + 34: 15(int) IAdd 32 33 + Store 17(z) 34 + Branch 31 + 31: Label + 38: 6(float) Load 11(face1) + 39: 15(int) Load 17(z) + 40: 6(float) ConvertSToF 39 + 41: 35(fvec4) CompositeConstruct 40 40 40 40 + 42: 35(fvec4) VectorTimesScalar 41 38 + 43: 6(float) FunctionCall 8(foo() + 44: 35(fvec4) CompositeConstruct 43 43 43 43 + 45: 35(fvec4) FAdd 42 44 + Store 37(Color) 45 + Return + FunctionEnd + 8(foo(): 6(float) Function None 7 + 9: Label + 46: 6(float) Load 13(face2) + ReturnValue 46 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.130.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.130.frag.out new file mode 100644 index 0000000..19c6db0 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.130.frag.out @@ -0,0 +1,309 @@ +spv.130.frag +WARNING: 0:31: '#extension' : extension is only partially supported: GL_ARB_gpu_shader5 + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 205 + + Capability Shader + Capability ClipDistance + Capability SampledRect + Capability Sampled1D + Capability SampledCubeArray + Capability ImageQuery + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 17 68 79 99 173 184 185 186 + ExecutionMode 4 OriginUpperLeft + Source GLSL 140 + SourceExtension "GL_ARB_gpu_shader5" + SourceExtension "GL_ARB_shader_texture_lod" + SourceExtension "GL_ARB_shading_language_420pack" + SourceExtension "GL_ARB_texture_cube_map_array" + SourceExtension "GL_ARB_texture_gather" + SourceExtension "GL_ARB_texture_rectangle" + Name 4 "main" + Name 6 "bar3(" + Name 8 "bar4(" + Name 10 "bar5(" + Name 12 "bar6(" + Name 17 "o" + Name 21 "samp2D" + Name 37 "samp2DA" + Name 47 "samp2DR" + Name 55 "samp2DS" + Name 68 "io" + Name 72 "Sca" + Name 79 "i" + Name 87 "Isca" + Name 99 "uo" + Name 103 "Usca" + Name 114 "a" + Name 118 "Scas" + Name 124 "f" + Name 133 "c" + Name 154 "a1" + Name 157 "m43" + Name 160 "b" + Name 167 "sampC" + Name 173 "gl_ClipDistance" + Name 183 "b" + Name 184 "fflat" + Name 185 "fsmooth" + Name 186 "fnop" + Name 193 "bounds" + Name 194 "s2D" + Name 195 "s2DR" + Name 199 "s2DRS" + Name 203 "s1D" + Name 204 "s2DS" + Decorate 21(samp2D) DescriptorSet 0 + Decorate 37(samp2DA) DescriptorSet 0 + Decorate 47(samp2DR) DescriptorSet 0 + Decorate 55(samp2DS) DescriptorSet 0 + Decorate 72(Sca) DescriptorSet 0 + Decorate 87(Isca) DescriptorSet 0 + Decorate 103(Usca) DescriptorSet 0 + Decorate 118(Scas) DescriptorSet 0 + Decorate 167(sampC) DescriptorSet 0 + Decorate 173(gl_ClipDistance) BuiltIn ClipDistance + Decorate 184(fflat) Flat + Decorate 186(fnop) NoPerspective + Decorate 193(bounds) DescriptorSet 0 + Decorate 193(bounds) Binding 0 + Decorate 194(s2D) DescriptorSet 0 + Decorate 195(s2DR) DescriptorSet 0 + Decorate 199(s2DRS) DescriptorSet 0 + Decorate 203(s1D) DescriptorSet 0 + Decorate 204(s2DS) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 14: TypeFloat 32 + 15: TypeVector 14(float) 4 + 16: TypePointer Output 15(fvec4) + 17(o): 16(ptr) Variable Output + 18: TypeImage 14(float) 2D sampled format:Unknown + 19: TypeSampledImage 18 + 20: TypePointer UniformConstant 19 + 21(samp2D): 20(ptr) Variable UniformConstant + 23: TypeVector 14(float) 2 + 24: 14(float) Constant 1050253722 + 25: 23(fvec2) ConstantComposite 24 24 + 26: TypeInt 32 1 + 27: TypeVector 26(int) 2 + 28: 26(int) Constant 1 + 29: 27(ivec2) ConstantComposite 28 28 + 30: 26(int) Constant 0 + 34: TypeImage 14(float) 2D array sampled format:Unknown + 35: TypeSampledImage 34 + 36: TypePointer UniformConstant 35 + 37(samp2DA): 36(ptr) Variable UniformConstant + 39: TypeVector 14(float) 3 + 40: 39(fvec3) ConstantComposite 24 24 24 + 44: TypeImage 14(float) Rect sampled format:Unknown + 45: TypeSampledImage 44 + 46: TypePointer UniformConstant 45 + 47(samp2DR): 46(ptr) Variable UniformConstant + 52: TypeImage 14(float) 2D depth sampled format:Unknown + 53: TypeSampledImage 52 + 54: TypePointer UniformConstant 53 + 55(samp2DS): 54(ptr) Variable UniformConstant + 57: 14(float) Constant 1067869798 + 62: 26(int) Constant 2 + 66: TypeVector 26(int) 3 + 67: TypePointer Output 66(ivec3) + 68(io): 67(ptr) Variable Output + 69: TypeImage 14(float) Cube array sampled format:Unknown + 70: TypeSampledImage 69 + 71: TypePointer UniformConstant 70 + 72(Sca): 71(ptr) Variable UniformConstant + 74: 26(int) Constant 3 + 78: TypePointer Input 15(fvec4) + 79(i): 78(ptr) Variable Input + 84: TypeImage 26(int) Cube array sampled format:Unknown + 85: TypeSampledImage 84 + 86: TypePointer UniformConstant 85 + 87(Isca): 86(ptr) Variable UniformConstant + 90: 14(float) Constant 1060320051 + 91: TypeVector 26(int) 4 + 96: TypeInt 32 0 + 97: TypeVector 96(int) 4 + 98: TypePointer Output 97(ivec4) + 99(uo): 98(ptr) Variable Output + 100: TypeImage 96(int) Cube array sampled format:Unknown + 101: TypeSampledImage 100 + 102: TypePointer UniformConstant 101 + 103(Usca): 102(ptr) Variable UniformConstant + 109: 14(float) Constant 1071225242 + 113: TypePointer Private 39(fvec3) + 114(a): 113(ptr) Variable Private + 115: TypeImage 14(float) Cube depth array sampled format:Unknown + 116: TypeSampledImage 115 + 117: TypePointer UniformConstant 116 + 118(Scas): 117(ptr) Variable UniformConstant + 123: TypePointer Function 14(float) + 127: 96(int) Constant 1 + 128: TypePointer Input 14(float) + 132: TypePointer Function 91(ivec4) + 136: 14(float) Constant 1036831949 + 137: 39(fvec3) ConstantComposite 136 136 136 + 138: 14(float) Constant 1045220557 + 139: 39(fvec3) ConstantComposite 138 138 138 + 155: TypeMatrix 39(fvec3) 4 + 156: TypePointer Function 155 + 161: 14(float) Constant 1073741824 + 164: TypeImage 14(float) Cube sampled format:Unknown + 165: TypeSampledImage 164 + 166: TypePointer UniformConstant 165 + 167(sampC): 166(ptr) Variable UniformConstant + 170: 96(int) Constant 4 + 171: TypeArray 14(float) 170 + 172: TypePointer Input 171 +173(gl_ClipDistance): 172(ptr) Variable Input + 176: TypePointer Output 14(float) + 182: TypePointer Private 14(float) + 183(b): 182(ptr) Variable Private + 184(fflat): 128(ptr) Variable Input + 185(fsmooth): 128(ptr) Variable Input + 186(fnop): 128(ptr) Variable Input + 187: 96(int) Constant 3 + 188: TypeArray 26(int) 187 + 189: 26(int) Constant 10 + 190: 26(int) Constant 23 + 191: 26(int) Constant 32 + 192: 188 ConstantComposite 189 190 191 + 193(bounds): 20(ptr) Variable UniformConstant + 194(s2D): 20(ptr) Variable UniformConstant + 195(s2DR): 46(ptr) Variable UniformConstant + 196: TypeImage 14(float) Rect depth sampled format:Unknown + 197: TypeSampledImage 196 + 198: TypePointer UniformConstant 197 + 199(s2DRS): 198(ptr) Variable UniformConstant + 200: TypeImage 14(float) 1D sampled format:Unknown + 201: TypeSampledImage 200 + 202: TypePointer UniformConstant 201 + 203(s1D): 202(ptr) Variable UniformConstant + 204(s2DS): 54(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label + 168: 165 Load 167(sampC) + 169: 15(fvec4) ImageGather 168 139 30 + Store 17(o) 169 + 174: 128(ptr) AccessChain 173(gl_ClipDistance) 74 + 175: 14(float) Load 174 + 177: 176(ptr) AccessChain 17(o) 127 + Store 177 175 + 178: 2 FunctionCall 6(bar3() + 179: 2 FunctionCall 8(bar4() + 180: 2 FunctionCall 10(bar5() + 181: 2 FunctionCall 12(bar6() + Return + FunctionEnd + 6(bar3(): 2 Function None 3 + 7: Label + 22: 19 Load 21(samp2D) + 31: 15(fvec4) ImageGather 22 25 30 ConstOffset 29 + 32: 15(fvec4) Load 17(o) + 33: 15(fvec4) FAdd 32 31 + Store 17(o) 33 + 38: 35 Load 37(samp2DA) + 41: 15(fvec4) ImageGather 38 40 30 ConstOffset 29 + 42: 15(fvec4) Load 17(o) + 43: 15(fvec4) FAdd 42 41 + Store 17(o) 43 + Return + FunctionEnd + 8(bar4(): 2 Function None 3 + 9: Label + 48: 45 Load 47(samp2DR) + 49: 15(fvec4) ImageGather 48 25 30 ConstOffset 29 + 50: 15(fvec4) Load 17(o) + 51: 15(fvec4) FAdd 50 49 + Store 17(o) 51 + 56: 53 Load 55(samp2DS) + 58: 15(fvec4) ImageDrefGather 56 25 57 ConstOffset 29 + 59: 15(fvec4) Load 17(o) + 60: 15(fvec4) FAdd 59 58 + Store 17(o) 60 + 61: 19 Load 21(samp2D) + 63: 15(fvec4) ImageGather 61 25 62 ConstOffset 29 + 64: 15(fvec4) Load 17(o) + 65: 15(fvec4) FAdd 64 63 + Store 17(o) 65 + Return + FunctionEnd + 10(bar5(): 2 Function None 3 + 11: Label + 124(f): 123(ptr) Variable Function + 133(c): 132(ptr) Variable Function + 73: 70 Load 72(Sca) + 75: 69 Image 73 + 76: 66(ivec3) ImageQuerySizeLod 75 74 + Store 68(io) 76 + 77: 70 Load 72(Sca) + 80: 15(fvec4) Load 79(i) + 81: 15(fvec4) ImageSampleImplicitLod 77 80 + 82: 15(fvec4) Load 17(o) + 83: 15(fvec4) FAdd 82 81 + Store 17(o) 83 + 88: 85 Load 87(Isca) + 89: 15(fvec4) Load 79(i) + 92: 91(ivec4) ImageSampleImplicitLod 88 89 Bias 90 + 93: 66(ivec3) VectorShuffle 92 92 0 1 2 + 94: 66(ivec3) Load 68(io) + 95: 66(ivec3) IAdd 94 93 + Store 68(io) 95 + 104: 101 Load 103(Usca) + 105: 15(fvec4) Load 79(i) + 106: 97(ivec4) ImageSampleImplicitLod 104 105 + Store 99(uo) 106 + 107: 70 Load 72(Sca) + 108: 15(fvec4) Load 79(i) + 110: 15(fvec4) ImageSampleExplicitLod 107 108 Lod 109 + 111: 15(fvec4) Load 17(o) + 112: 15(fvec4) FAdd 111 110 + Store 17(o) 112 + 119: 116 Load 118(Scas) + 120: 115 Image 119 + 121: 66(ivec3) ImageQuerySizeLod 120 74 + 122: 39(fvec3) ConvertSToF 121 + Store 114(a) 122 + 125: 116 Load 118(Scas) + 126: 15(fvec4) Load 79(i) + 129: 128(ptr) AccessChain 79(i) 127 + 130: 14(float) Load 129 + 131: 14(float) ImageSampleDrefImplicitLod 125 126 130 + Store 124(f) 131 + 134: 85 Load 87(Isca) + 135: 15(fvec4) Load 79(i) + 140: 91(ivec4) ImageSampleExplicitLod 134 135 Grad 137 139 + Store 133(c) 140 + 141: 39(fvec3) Load 114(a) + 142: 14(float) Load 124(f) + 143: 91(ivec4) Load 133(c) + 144: 15(fvec4) ConvertSToF 143 + 145: 15(fvec4) CompositeConstruct 142 142 142 142 + 146: 15(fvec4) FAdd 145 144 + 147: 14(float) CompositeExtract 141 0 + 148: 14(float) CompositeExtract 141 1 + 149: 14(float) CompositeExtract 141 2 + 150: 14(float) CompositeExtract 146 0 + 151: 15(fvec4) CompositeConstruct 147 148 149 150 + 152: 15(fvec4) Load 17(o) + 153: 15(fvec4) FAdd 152 151 + Store 17(o) 153 + Return + FunctionEnd + 12(bar6(): 2 Function None 3 + 13: Label + 154(a1): 123(ptr) Variable Function + 157(m43): 156(ptr) Variable Function + 160(b): 123(ptr) Variable Function + 158: 123(ptr) AccessChain 157(m43) 74 127 + 159: 14(float) Load 158 + Store 154(a1) 159 + 162: 14(float) Load 154(a1) + 163: 14(float) FMul 161 162 + Store 160(b) 163 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.140.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.140.frag.out new file mode 100755 index 0000000..324cc0c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.140.frag.out @@ -0,0 +1,166 @@ +spv.140.frag +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 96 + + Capability Shader + Capability ClipDistance + Capability SampledRect + Capability SampledBuffer + Capability ImageQuery + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 14 23 28 38 + ExecutionMode 4 OriginUpperLeft + Source GLSL 140 + Name 4 "main" + Name 8 "foo(" + Name 11 "i1" + Name 14 "gl_FrontFacing" + Name 19 "i2" + Name 23 "o" + Name 28 "gl_ClipDistance" + Name 38 "k" + Name 50 "sampR" + Name 58 "sampB" + Name 82 "samp2Da" + Name 87 "bn" + MemberName 87(bn) 0 "matra" + MemberName 87(bn) 1 "matca" + MemberName 87(bn) 2 "matr" + MemberName 87(bn) 3 "matc" + MemberName 87(bn) 4 "matrdef" + Name 89 "" + Name 92 "bi" + MemberName 92(bi) 0 "v" + Name 95 "bname" + Decorate 14(gl_FrontFacing) BuiltIn FrontFacing + Decorate 28(gl_ClipDistance) BuiltIn ClipDistance + Decorate 50(sampR) DescriptorSet 0 + Decorate 58(sampB) DescriptorSet 0 + Decorate 82(samp2Da) DescriptorSet 0 + Decorate 85 ArrayStride 64 + Decorate 86 ArrayStride 64 + MemberDecorate 87(bn) 0 RowMajor + MemberDecorate 87(bn) 0 Offset 0 + MemberDecorate 87(bn) 0 MatrixStride 16 + MemberDecorate 87(bn) 1 ColMajor + MemberDecorate 87(bn) 1 Offset 256 + MemberDecorate 87(bn) 1 MatrixStride 16 + MemberDecorate 87(bn) 2 RowMajor + MemberDecorate 87(bn) 2 Offset 512 + MemberDecorate 87(bn) 2 MatrixStride 16 + MemberDecorate 87(bn) 3 ColMajor + MemberDecorate 87(bn) 3 Offset 576 + MemberDecorate 87(bn) 3 MatrixStride 16 + MemberDecorate 87(bn) 4 RowMajor + MemberDecorate 87(bn) 4 Offset 1024 + MemberDecorate 87(bn) 4 MatrixStride 16 + Decorate 87(bn) Block + Decorate 89 DescriptorSet 0 + Decorate 91 ArrayStride 16 + MemberDecorate 92(bi) 0 Offset 0 + Decorate 92(bi) Block + Decorate 95(bname) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeFunction 6(float) + 10: TypePointer Private 6(float) + 11(i1): 10(ptr) Variable Private + 12: TypeBool + 13: TypePointer Input 12(bool) +14(gl_FrontFacing): 13(ptr) Variable Input + 16: 6(float) Constant 3221225472 + 17: 6(float) Constant 1073741824 + 19(i2): 10(ptr) Variable Private + 20: 6(float) Constant 1120665600 + 21: TypeVector 6(float) 4 + 22: TypePointer Output 21(fvec4) + 23(o): 22(ptr) Variable Output + 24: TypeInt 32 0 + 25: 24(int) Constant 5 + 26: TypeArray 6(float) 25 + 27: TypePointer Input 26 +28(gl_ClipDistance): 27(ptr) Variable Input + 29: TypeInt 32 1 + 30: 29(int) Constant 2 + 31: TypePointer Input 6(float) + 34: 24(int) Constant 1 + 35: TypePointer Output 6(float) + 37: TypePointer Input 21(fvec4) + 38(k): 37(ptr) Variable Input + 40: TypeVector 29(int) 4 + 45: 24(int) Constant 2 + 47: TypeImage 6(float) Rect sampled format:Unknown + 48: TypeSampledImage 47 + 49: TypePointer UniformConstant 48 + 50(sampR): 49(ptr) Variable UniformConstant + 53: TypeVector 29(int) 2 + 55: TypeImage 29(int) Buffer sampled format:Unknown + 56: TypeSampledImage 55 + 57: TypePointer UniformConstant 56 + 58(sampB): 57(ptr) Variable UniformConstant + 64: TypeVector 6(float) 2 + 67: 6(float) Constant 1120403456 + 69: 24(int) Constant 3 + 78: TypeImage 6(float) 2D sampled format:Unknown + 79: TypeSampledImage 78 + 80: TypeArray 79 69 + 81: TypePointer UniformConstant 80 + 82(samp2Da): 81(ptr) Variable UniformConstant + 83: TypeMatrix 21(fvec4) 4 + 84: 24(int) Constant 4 + 85: TypeArray 83 84 + 86: TypeArray 83 84 + 87(bn): TypeStruct 85 86 83 83 83 + 88: TypePointer Uniform 87(bn) + 89: 88(ptr) Variable Uniform + 90: TypeVector 6(float) 3 + 91: TypeArray 90(fvec3) 45 + 92(bi): TypeStruct 91 + 93: TypeArray 92(bi) 84 + 94: TypePointer Uniform 93 + 95(bname): 94(ptr) Variable Uniform + 4(main): 2 Function None 3 + 5: Label + 15: 12(bool) Load 14(gl_FrontFacing) + 18: 6(float) Select 15 16 17 + Store 11(i1) 18 + Store 19(i2) 20 + 32: 31(ptr) AccessChain 28(gl_ClipDistance) 30 + 33: 6(float) Load 32 + 36: 35(ptr) AccessChain 23(o) 34 + Store 36 33 + 39: 21(fvec4) Load 38(k) + 41: 40(ivec4) ConvertFToS 39 + 42: 29(int) CompositeExtract 41 0 + 43: 31(ptr) AccessChain 28(gl_ClipDistance) 42 + 44: 6(float) Load 43 + 46: 35(ptr) AccessChain 23(o) 45 + Store 46 44 + 51: 48 Load 50(sampR) + 52: 47 Image 51 + 54: 53(ivec2) ImageQuerySize 52 + 59: 56 Load 58(sampB) + 60: 55 Image 59 + 61: 29(int) ImageQuerySize 60 + 62: 53(ivec2) CompositeConstruct 61 61 + 63: 53(ivec2) IAdd 54 62 + 65: 64(fvec2) ConvertSToF 63 + 66: 6(float) CompositeExtract 65 0 + 68: 6(float) FDiv 66 67 + 70: 35(ptr) AccessChain 23(o) 69 + Store 70 68 + 71: 6(float) FunctionCall 8(foo() + 72: 35(ptr) AccessChain 23(o) 45 + Store 72 71 + Return + FunctionEnd + 8(foo(): 6(float) Function None 7 + 9: Label + 73: 6(float) Load 11(i1) + 74: 6(float) Load 19(i2) + 75: 6(float) FAdd 73 74 + ReturnValue 75 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.150.geom.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.150.geom.out new file mode 100755 index 0000000..1c98c70 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.150.geom.out @@ -0,0 +1,145 @@ +spv.150.geom +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 71 + + Capability Geometry + Capability GeometryPointSize + Capability GeometryStreams + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Geometry 4 "main" 10 18 29 33 47 49 51 70 + ExecutionMode 4 InputTrianglesAdjacency + ExecutionMode 4 Invocations 1 + ExecutionMode 4 OutputTriangleStrip + ExecutionMode 4 OutputVertices 30 + Source GLSL 150 + Name 4 "main" + Name 8 "fromVertex" + MemberName 8(fromVertex) 0 "color" + Name 10 "" + Name 13 "fromVertex" + MemberName 13(fromVertex) 0 "color" + Name 18 "fromV" + 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" + Name 29 "" + Name 30 "gl_PerVertex" + MemberName 30(gl_PerVertex) 0 "gl_Position" + MemberName 30(gl_PerVertex) 1 "gl_PointSize" + MemberName 30(gl_PerVertex) 2 "gl_ClipDistance" + Name 33 "gl_in" + Name 47 "gl_PrimitiveID" + Name 49 "gl_PrimitiveIDIn" + Name 51 "gl_Layer" + Name 68 "toFragment" + MemberName 68(toFragment) 0 "color" + Name 70 "toF" + Decorate 8(fromVertex) Block + Decorate 8(fromVertex) Stream 3 + Decorate 10 Stream 3 + Decorate 13(fromVertex) Block + MemberDecorate 27(gl_PerVertex) 0 BuiltIn Position + MemberDecorate 27(gl_PerVertex) 1 BuiltIn PointSize + MemberDecorate 27(gl_PerVertex) 2 BuiltIn ClipDistance + Decorate 27(gl_PerVertex) Block + Decorate 27(gl_PerVertex) Stream 0 + Decorate 29 Stream 0 + MemberDecorate 30(gl_PerVertex) 0 BuiltIn Position + MemberDecorate 30(gl_PerVertex) 1 BuiltIn PointSize + MemberDecorate 30(gl_PerVertex) 2 BuiltIn ClipDistance + Decorate 30(gl_PerVertex) Block + Decorate 47(gl_PrimitiveID) Stream 0 + Decorate 47(gl_PrimitiveID) BuiltIn PrimitiveId + Decorate 49(gl_PrimitiveIDIn) BuiltIn PrimitiveId + Decorate 51(gl_Layer) Stream 0 + Decorate 51(gl_Layer) BuiltIn Layer + Decorate 68(toFragment) Block + Decorate 68(toFragment) Stream 3 + Decorate 70(toF) Stream 3 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 3 + 8(fromVertex): TypeStruct 7(fvec3) + 9: TypePointer Output 8(fromVertex) + 10: 9(ptr) Variable Output + 11: TypeInt 32 1 + 12: 11(int) Constant 0 + 13(fromVertex): TypeStruct 7(fvec3) + 14: TypeInt 32 0 + 15: 14(int) Constant 6 + 16: TypeArray 13(fromVertex) 15 + 17: TypePointer Input 16 + 18(fromV): 17(ptr) Variable Input + 19: TypePointer Input 7(fvec3) + 22: TypePointer Output 7(fvec3) + 24: TypeVector 6(float) 4 + 25: 14(int) Constant 1 + 26: TypeArray 6(float) 25 +27(gl_PerVertex): TypeStruct 24(fvec4) 6(float) 26 + 28: TypePointer Output 27(gl_PerVertex) + 29: 28(ptr) Variable Output +30(gl_PerVertex): TypeStruct 24(fvec4) 6(float) 26 + 31: TypeArray 30(gl_PerVertex) 15 + 32: TypePointer Input 31 + 33(gl_in): 32(ptr) Variable Input + 34: TypePointer Input 24(fvec4) + 37: TypePointer Output 24(fvec4) + 39: 11(int) Constant 1 + 40: 11(int) Constant 3 + 41: TypePointer Input 6(float) + 44: TypePointer Output 6(float) + 46: TypePointer Output 11(int) +47(gl_PrimitiveID): 46(ptr) Variable Output + 48: TypePointer Input 11(int) +49(gl_PrimitiveIDIn): 48(ptr) Variable Input + 51(gl_Layer): 46(ptr) Variable Output + 52: 11(int) Constant 2 + 53: 6(float) Constant 1073741824 + 68(toFragment): TypeStruct 7(fvec3) + 69: TypePointer Output 68(toFragment) + 70(toF): 69(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 20: 19(ptr) AccessChain 18(fromV) 12 12 + 21: 7(fvec3) Load 20 + 23: 22(ptr) AccessChain 10 12 + Store 23 21 + 35: 34(ptr) AccessChain 33(gl_in) 12 12 + 36: 24(fvec4) Load 35 + 38: 37(ptr) AccessChain 29 12 + Store 38 36 + 42: 41(ptr) AccessChain 33(gl_in) 40 39 + 43: 6(float) Load 42 + 45: 44(ptr) AccessChain 29 39 + Store 45 43 + 50: 11(int) Load 49(gl_PrimitiveIDIn) + Store 47(gl_PrimitiveID) 50 + Store 51(gl_Layer) 52 + EmitVertex + 54: 19(ptr) AccessChain 18(fromV) 12 12 + 55: 7(fvec3) Load 54 + 56: 7(fvec3) VectorTimesScalar 55 53 + 57: 22(ptr) AccessChain 10 12 + Store 57 56 + 58: 34(ptr) AccessChain 33(gl_in) 12 12 + 59: 24(fvec4) Load 58 + 60: 24(fvec4) VectorTimesScalar 59 53 + 61: 37(ptr) AccessChain 29 12 + Store 61 60 + 62: 41(ptr) AccessChain 33(gl_in) 40 39 + 63: 6(float) Load 62 + 64: 6(float) FMul 53 63 + 65: 44(ptr) AccessChain 29 39 + Store 65 64 + 66: 11(int) Load 49(gl_PrimitiveIDIn) + 67: 11(int) IAdd 66 39 + Store 47(gl_PrimitiveID) 67 + Store 51(gl_Layer) 40 + EmitVertex + EndPrimitive + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.150.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.150.vert.out new file mode 100755 index 0000000..2843139 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.150.vert.out @@ -0,0 +1,103 @@ +spv.150.vert +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 63 + + Capability Shader + Capability ClipDistance + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 13 17 23 38 62 + Source GLSL 150 + 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 "iv4" + Name 23 "ps" + Name 34 "s1" + MemberName 34(s1) 0 "a" + MemberName 34(s1) 1 "a2" + MemberName 34(s1) 2 "b" + Name 36 "s2" + MemberName 36(s2) 0 "c" + MemberName 36(s2) 1 "d" + Name 38 "s2out" + Name 40 "i" + Name 47 "s2D" + Name 62 "ui" + MemberDecorate 11(gl_PerVertex) 0 Invariant + 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 47(s2D) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypeInt 32 0 + 9: 8(int) Constant 4 + 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 7(fvec4) + 17(iv4): 16(ptr) Variable Input + 19: TypePointer Output 7(fvec4) + 21: 14(int) Constant 1 + 22: TypePointer Input 6(float) + 23(ps): 22(ptr) Variable Input + 25: TypePointer Output 6(float) + 27: 14(int) Constant 2 + 28: 8(int) Constant 0 + 32: 8(int) Constant 3 + 33: TypeArray 7(fvec4) 32 + 34(s1): TypeStruct 14(int) 14(int) 33 + 35: TypeArray 34(s1) 9 + 36(s2): TypeStruct 14(int) 35 + 37: TypePointer Output 36(s2) + 38(s2out): 37(ptr) Variable Output + 39: TypePointer Function 14(int) + 44: TypeImage 6(float) 2D sampled format:Unknown + 45: TypeSampledImage 44 + 46: TypePointer UniformConstant 45 + 47(s2D): 46(ptr) Variable UniformConstant + 49: TypeVector 6(float) 2 + 50: 6(float) Constant 1056964608 + 51: 49(fvec2) ConstantComposite 50 50 + 52: 6(float) Constant 0 + 55: TypeVector 6(float) 3 + 56: 55(fvec3) ConstantComposite 50 50 50 + 59: 6(float) Constant 1078774989 + 61: TypePointer Input 14(int) + 62(ui): 61(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 40(i): 39(ptr) Variable Function + 18: 7(fvec4) Load 17(iv4) + 20: 19(ptr) AccessChain 13 15 + Store 20 18 + 24: 6(float) Load 23(ps) + 26: 25(ptr) AccessChain 13 21 + Store 26 24 + 29: 22(ptr) AccessChain 17(iv4) 28 + 30: 6(float) Load 29 + 31: 25(ptr) AccessChain 13 27 27 + Store 31 30 + 41: 14(int) Load 40(i) + 42: 6(float) Load 23(ps) + 43: 25(ptr) AccessChain 38(s2out) 21 41 27 27 32 + Store 43 42 + 48: 45 Load 47(s2D) + 53: 7(fvec4) ImageSampleExplicitLod 48 51 Lod 52 + 54: 45 Load 47(s2D) + 57: 7(fvec4) ImageSampleProjExplicitLod 54 56 Lod 52 + 58: 45 Load 47(s2D) + 60: 7(fvec4) ImageSampleExplicitLod 58 51 Lod 59 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.300BuiltIns.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.300BuiltIns.vert.out new file mode 100755 index 0000000..7dc949d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.300BuiltIns.vert.out @@ -0,0 +1,75 @@ +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 +// Id's are bound by 42 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 10 14 21 34 + Source ESSL 310 + Name 4 "main" + Name 8 "gl_PerVertex" + MemberName 8(gl_PerVertex) 0 "gl_Position" + MemberName 8(gl_PerVertex) 1 "gl_PointSize" + Name 10 "" + Name 14 "ps" + Name 21 "gl_VertexIndex" + Name 34 "gl_InstanceIndex" + MemberDecorate 8(gl_PerVertex) 0 Invariant + MemberDecorate 8(gl_PerVertex) 0 BuiltIn Position + MemberDecorate 8(gl_PerVertex) 1 BuiltIn PointSize + Decorate 8(gl_PerVertex) Block + Decorate 14(ps) RelaxedPrecision + Decorate 15 RelaxedPrecision + Decorate 21(gl_VertexIndex) BuiltIn VertexIndex + Decorate 30 RelaxedPrecision + Decorate 34(gl_InstanceIndex) BuiltIn InstanceIndex + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8(gl_PerVertex): TypeStruct 7(fvec4) 6(float) + 9: TypePointer Output 8(gl_PerVertex) + 10: 9(ptr) Variable Output + 11: TypeInt 32 1 + 12: 11(int) Constant 0 + 13: TypePointer Input 6(float) + 14(ps): 13(ptr) Variable Input + 17: TypePointer Output 7(fvec4) + 19: 11(int) Constant 4 + 20: TypePointer Input 11(int) +21(gl_VertexIndex): 20(ptr) Variable Input + 29: 11(int) Constant 1 + 31: TypePointer Output 6(float) + 33: 11(int) Constant 5 +34(gl_InstanceIndex): 20(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 15: 6(float) Load 14(ps) + 16: 7(fvec4) CompositeConstruct 15 15 15 15 + 18: 17(ptr) AccessChain 10 12 + Store 18 16 + 22: 11(int) Load 21(gl_VertexIndex) + 23: 11(int) ISub 19 22 + 24: 6(float) ConvertSToF 23 + 25: 17(ptr) AccessChain 10 12 + 26: 7(fvec4) Load 25 + 27: 7(fvec4) VectorTimesScalar 26 24 + 28: 17(ptr) AccessChain 10 12 + Store 28 27 + 30: 6(float) Load 14(ps) + 32: 31(ptr) AccessChain 10 29 + Store 32 30 + 35: 11(int) Load 34(gl_InstanceIndex) + 36: 11(int) ISub 33 35 + 37: 6(float) ConvertSToF 36 + 38: 31(ptr) AccessChain 10 29 + 39: 6(float) Load 38 + 40: 6(float) FMul 39 37 + 41: 31(ptr) AccessChain 10 29 + Store 41 40 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.300layout.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.300layout.frag.out new file mode 100755 index 0000000..7ce08d8 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.300layout.frag.out @@ -0,0 +1,75 @@ +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 +// Id's are bound by 37 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 9 11 15 26 29 + ExecutionMode 4 OriginUpperLeft + Source ESSL 310 + Name 4 "main" + Name 9 "c" + Name 11 "color" + Name 13 "S" + MemberName 13(S) 0 "c" + MemberName 13(S) 1 "f" + Name 15 "s" + Name 26 "p" + Name 29 "pos" + Decorate 9(c) RelaxedPrecision + Decorate 9(c) Location 7 + Decorate 11(color) RelaxedPrecision + Decorate 12 RelaxedPrecision + MemberDecorate 13(S) 0 RelaxedPrecision + MemberDecorate 13(S) 1 RelaxedPrecision + Decorate 19 RelaxedPrecision + Decorate 20 RelaxedPrecision + Decorate 26(p) RelaxedPrecision + Decorate 26(p) Location 3 + Decorate 29(pos) RelaxedPrecision + Decorate 30 RelaxedPrecision + Decorate 33 RelaxedPrecision + Decorate 34 RelaxedPrecision + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 3 + 8: TypePointer Output 7(fvec3) + 9(c): 8(ptr) Variable Output + 10: TypePointer Input 7(fvec3) + 11(color): 10(ptr) Variable Input + 13(S): TypeStruct 7(fvec3) 6(float) + 14: TypePointer Input 13(S) + 15(s): 14(ptr) Variable Input + 16: TypeInt 32 1 + 17: 16(int) Constant 0 + 21: TypeVector 6(float) 4 + 22: TypeInt 32 0 + 23: 22(int) Constant 2 + 24: TypeArray 21(fvec4) 23 + 25: TypePointer Output 24 + 26(p): 25(ptr) Variable Output + 27: 16(int) Constant 1 + 28: TypePointer Input 21(fvec4) + 29(pos): 28(ptr) Variable Input + 31: TypePointer Input 6(float) + 35: TypePointer Output 21(fvec4) + 4(main): 2 Function None 3 + 5: Label + 12: 7(fvec3) Load 11(color) + 18: 10(ptr) AccessChain 15(s) 17 + 19: 7(fvec3) Load 18 + 20: 7(fvec3) FAdd 12 19 + Store 9(c) 20 + 30: 21(fvec4) Load 29(pos) + 32: 31(ptr) AccessChain 15(s) 27 + 33: 6(float) Load 32 + 34: 21(fvec4) VectorTimesScalar 30 33 + 36: 35(ptr) AccessChain 26(p) 27 + Store 36 34 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.300layout.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.300layout.vert.out new file mode 100644 index 0000000..69f66b6 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.300layout.vert.out @@ -0,0 +1,250 @@ +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 +// Id's are bound by 163 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 9 11 98 100 108 114 120 128 + Source ESSL 310 + Name 4 "main" + Name 9 "pos" + Name 11 "p" + Name 17 "Transform" + MemberName 17(Transform) 0 "M1" + MemberName 17(Transform) 1 "M2" + MemberName 17(Transform) 2 "N1" + MemberName 17(Transform) 3 "iuin" + Name 19 "tblock" + Name 45 "T3" + MemberName 45(T3) 0 "M3" + MemberName 45(T3) 1 "M4" + MemberName 45(T3) 2 "N2" + MemberName 45(T3) 3 "uv3a" + Name 47 "" + Name 78 "T2" + MemberName 78(T2) 0 "b" + MemberName 78(T2) 1 "t2m" + Name 80 "" + Name 98 "color" + Name 100 "c" + Name 108 "iout" + Name 114 "uiuin" + Name 120 "aiv2" + Name 126 "S" + MemberName 126(S) 0 "c" + MemberName 126(S) 1 "f" + Name 128 "s" + Decorate 11(p) Location 3 + MemberDecorate 17(Transform) 0 RowMajor + MemberDecorate 17(Transform) 0 Offset 0 + MemberDecorate 17(Transform) 0 MatrixStride 16 + MemberDecorate 17(Transform) 1 ColMajor + MemberDecorate 17(Transform) 1 Offset 64 + MemberDecorate 17(Transform) 1 MatrixStride 16 + MemberDecorate 17(Transform) 2 RowMajor + MemberDecorate 17(Transform) 2 Offset 128 + MemberDecorate 17(Transform) 2 MatrixStride 16 + MemberDecorate 17(Transform) 3 Offset 176 + Decorate 17(Transform) Block + Decorate 19(tblock) DescriptorSet 0 + Decorate 44 ArrayStride 16 + MemberDecorate 45(T3) 0 ColMajor + MemberDecorate 45(T3) 0 Offset 0 + MemberDecorate 45(T3) 0 MatrixStride 16 + MemberDecorate 45(T3) 1 RowMajor + MemberDecorate 45(T3) 1 Offset 64 + MemberDecorate 45(T3) 1 MatrixStride 16 + MemberDecorate 45(T3) 2 ColMajor + MemberDecorate 45(T3) 2 Offset 128 + MemberDecorate 45(T3) 2 MatrixStride 16 + MemberDecorate 45(T3) 3 Offset 2048 + Decorate 45(T3) Block + Decorate 47 DescriptorSet 0 + MemberDecorate 78(T2) 0 Offset 0 + MemberDecorate 78(T2) 1 RowMajor + MemberDecorate 78(T2) 1 Offset 16 + MemberDecorate 78(T2) 1 MatrixStride 16 + Decorate 78(T2) Block + Decorate 80 DescriptorSet 0 + Decorate 100(c) Location 7 + Decorate 108(iout) Flat + Decorate 120(aiv2) Location 9 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Output 7(fvec4) + 9(pos): 8(ptr) Variable Output + 10: TypePointer Input 7(fvec4) + 11(p): 10(ptr) Variable Input + 13: TypeMatrix 7(fvec4) 4 + 14: TypeVector 6(float) 3 + 15: TypeMatrix 14(fvec3) 3 + 16: TypeInt 32 1 + 17(Transform): TypeStruct 13 13 15 16(int) + 18: TypePointer Uniform 17(Transform) + 19(tblock): 18(ptr) Variable Uniform + 20: 16(int) Constant 0 + 21: TypePointer Uniform 13 + 24: 16(int) Constant 1 + 40: TypeMatrix 14(fvec3) 2 + 41: TypeInt 32 0 + 42: TypeVector 41(int) 3 + 43: 41(int) Constant 4 + 44: TypeArray 42(ivec3) 43 + 45(T3): TypeStruct 13 13 40 44 + 46: TypePointer Uniform 45(T3) + 47: 46(ptr) Variable Uniform + 78(T2): TypeStruct 41(int) 13 + 79: TypePointer Uniform 78(T2) + 80: 79(ptr) Variable Uniform + 97: TypePointer Output 14(fvec3) + 98(color): 97(ptr) Variable Output + 99: TypePointer Input 14(fvec3) + 100(c): 99(ptr) Variable Input + 102: 16(int) Constant 2 + 103: TypePointer Uniform 15 + 107: TypePointer Output 16(int) + 108(iout): 107(ptr) Variable Output + 109: 16(int) Constant 3 + 110: TypePointer Uniform 16(int) + 113: TypePointer Input 41(int) + 114(uiuin): 113(ptr) Variable Input + 118: TypeVector 16(int) 2 + 119: TypePointer Input 118(ivec2) + 120(aiv2): 119(ptr) Variable Input + 121: 41(int) Constant 1 + 122: TypePointer Input 16(int) + 126(S): TypeStruct 14(fvec3) 6(float) + 127: TypePointer Output 126(S) + 128(s): 127(ptr) Variable Output + 131: 41(int) Constant 0 + 132: TypePointer Input 6(float) + 135: TypePointer Output 6(float) + 137: TypeBool + 138: TypePointer Uniform 14(fvec3) + 141: 6(float) Constant 1065353216 + 142: 14(fvec3) ConstantComposite 141 141 141 + 143: TypeVector 137(bool) 3 + 149: TypePointer Uniform 42(ivec3) + 152: 41(int) Constant 5 + 153: 42(ivec3) ConstantComposite 152 152 152 + 4(main): 2 Function None 3 + 5: Label + 12: 7(fvec4) Load 11(p) + 22: 21(ptr) AccessChain 19(tblock) 20 + 23: 13 Load 22 + 25: 21(ptr) AccessChain 19(tblock) 24 + 26: 13 Load 25 + 27: 7(fvec4) CompositeExtract 23 0 + 28: 7(fvec4) CompositeExtract 26 0 + 29: 7(fvec4) FAdd 27 28 + 30: 7(fvec4) CompositeExtract 23 1 + 31: 7(fvec4) CompositeExtract 26 1 + 32: 7(fvec4) FAdd 30 31 + 33: 7(fvec4) CompositeExtract 23 2 + 34: 7(fvec4) CompositeExtract 26 2 + 35: 7(fvec4) FAdd 33 34 + 36: 7(fvec4) CompositeExtract 23 3 + 37: 7(fvec4) CompositeExtract 26 3 + 38: 7(fvec4) FAdd 36 37 + 39: 13 CompositeConstruct 29 32 35 38 + 48: 21(ptr) AccessChain 47 24 + 49: 13 Load 48 + 50: 7(fvec4) CompositeExtract 39 0 + 51: 7(fvec4) CompositeExtract 49 0 + 52: 7(fvec4) FAdd 50 51 + 53: 7(fvec4) CompositeExtract 39 1 + 54: 7(fvec4) CompositeExtract 49 1 + 55: 7(fvec4) FAdd 53 54 + 56: 7(fvec4) CompositeExtract 39 2 + 57: 7(fvec4) CompositeExtract 49 2 + 58: 7(fvec4) FAdd 56 57 + 59: 7(fvec4) CompositeExtract 39 3 + 60: 7(fvec4) CompositeExtract 49 3 + 61: 7(fvec4) FAdd 59 60 + 62: 13 CompositeConstruct 52 55 58 61 + 63: 21(ptr) AccessChain 47 20 + 64: 13 Load 63 + 65: 7(fvec4) CompositeExtract 62 0 + 66: 7(fvec4) CompositeExtract 64 0 + 67: 7(fvec4) FAdd 65 66 + 68: 7(fvec4) CompositeExtract 62 1 + 69: 7(fvec4) CompositeExtract 64 1 + 70: 7(fvec4) FAdd 68 69 + 71: 7(fvec4) CompositeExtract 62 2 + 72: 7(fvec4) CompositeExtract 64 2 + 73: 7(fvec4) FAdd 71 72 + 74: 7(fvec4) CompositeExtract 62 3 + 75: 7(fvec4) CompositeExtract 64 3 + 76: 7(fvec4) FAdd 74 75 + 77: 13 CompositeConstruct 67 70 73 76 + 81: 21(ptr) AccessChain 80 24 + 82: 13 Load 81 + 83: 7(fvec4) CompositeExtract 77 0 + 84: 7(fvec4) CompositeExtract 82 0 + 85: 7(fvec4) FAdd 83 84 + 86: 7(fvec4) CompositeExtract 77 1 + 87: 7(fvec4) CompositeExtract 82 1 + 88: 7(fvec4) FAdd 86 87 + 89: 7(fvec4) CompositeExtract 77 2 + 90: 7(fvec4) CompositeExtract 82 2 + 91: 7(fvec4) FAdd 89 90 + 92: 7(fvec4) CompositeExtract 77 3 + 93: 7(fvec4) CompositeExtract 82 3 + 94: 7(fvec4) FAdd 92 93 + 95: 13 CompositeConstruct 85 88 91 94 + 96: 7(fvec4) VectorTimesMatrix 12 95 + Store 9(pos) 96 + 101: 14(fvec3) Load 100(c) + 104: 103(ptr) AccessChain 19(tblock) 102 + 105: 15 Load 104 + 106: 14(fvec3) VectorTimesMatrix 101 105 + Store 98(color) 106 + 111: 110(ptr) AccessChain 19(tblock) 109 + 112: 16(int) Load 111 + 115: 41(int) Load 114(uiuin) + 116: 16(int) Bitcast 115 + 117: 16(int) IAdd 112 116 + 123: 122(ptr) AccessChain 120(aiv2) 121 + 124: 16(int) Load 123 + 125: 16(int) IAdd 117 124 + Store 108(iout) 125 + 129: 14(fvec3) Load 100(c) + 130: 97(ptr) AccessChain 128(s) 20 + Store 130 129 + 133: 132(ptr) AccessChain 11(p) 131 + 134: 6(float) Load 133 + 136: 135(ptr) AccessChain 128(s) 24 + Store 136 134 + 139: 138(ptr) AccessChain 47 102 24 + 140: 14(fvec3) Load 139 + 144: 143(bvec3) FOrdNotEqual 140 142 + 145: 137(bool) Any 144 + 146: 137(bool) LogicalNot 145 + SelectionMerge 148 None + BranchConditional 146 147 148 + 147: Label + 150: 149(ptr) AccessChain 47 109 102 + 151: 42(ivec3) Load 150 + 154: 143(bvec3) INotEqual 151 153 + 155: 137(bool) Any 154 + Branch 148 + 148: Label + 156: 137(bool) Phi 145 5 155 147 + SelectionMerge 158 None + BranchConditional 156 157 158 + 157: Label + 159: 97(ptr) AccessChain 128(s) 20 + 160: 14(fvec3) Load 159 + 161: 14(fvec3) CompositeConstruct 141 141 141 + 162: 14(fvec3) FAdd 160 161 + Store 159 162 + Branch 158 + 158: Label + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.300layoutp.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.300layoutp.vert.out new file mode 100755 index 0000000..5924137 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.300layoutp.vert.out @@ -0,0 +1,202 @@ +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 +// Id's are bound by 115 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 9 11 50 52 60 72 80 + Source ESSL 310 + Name 4 "main" + Name 9 "pos" + Name 11 "p" + Name 17 "Transform" + MemberName 17(Transform) 0 "M1" + MemberName 17(Transform) 1 "M2" + MemberName 17(Transform) 2 "N1" + MemberName 17(Transform) 3 "iuin" + Name 19 "tblock" + Name 33 "T3" + MemberName 33(T3) 0 "M3" + MemberName 33(T3) 1 "M4" + MemberName 33(T3) 2 "N2" + MemberName 33(T3) 3 "uv3a" + Name 35 "" + Name 42 "T2" + MemberName 42(T2) 0 "b" + MemberName 42(T2) 1 "t2m" + Name 44 "" + Name 50 "color" + Name 52 "c" + Name 60 "iout" + Name 66 "uiuin" + Name 72 "aiv2" + Name 78 "S" + MemberName 78(S) 0 "c" + MemberName 78(S) 1 "f" + Name 80 "s" + Decorate 11(p) Location 3 + MemberDecorate 17(Transform) 0 RowMajor + MemberDecorate 17(Transform) 0 Offset 0 + MemberDecorate 17(Transform) 0 MatrixStride 16 + MemberDecorate 17(Transform) 1 ColMajor + MemberDecorate 17(Transform) 1 Offset 64 + MemberDecorate 17(Transform) 1 MatrixStride 16 + MemberDecorate 17(Transform) 2 RowMajor + MemberDecorate 17(Transform) 2 Offset 128 + MemberDecorate 17(Transform) 2 MatrixStride 16 + MemberDecorate 17(Transform) 3 Offset 176 + Decorate 17(Transform) Block + Decorate 19(tblock) DescriptorSet 0 + Decorate 32 ArrayStride 16 + MemberDecorate 33(T3) 0 ColMajor + MemberDecorate 33(T3) 0 Offset 0 + MemberDecorate 33(T3) 0 MatrixStride 16 + MemberDecorate 33(T3) 1 RowMajor + MemberDecorate 33(T3) 1 Offset 64 + MemberDecorate 33(T3) 1 MatrixStride 16 + MemberDecorate 33(T3) 2 ColMajor + MemberDecorate 33(T3) 2 Offset 128 + MemberDecorate 33(T3) 2 MatrixStride 16 + MemberDecorate 33(T3) 3 Offset 160 + Decorate 33(T3) Block + Decorate 35 DescriptorSet 0 + MemberDecorate 42(T2) 0 Offset 0 + MemberDecorate 42(T2) 1 RowMajor + MemberDecorate 42(T2) 1 Offset 16 + MemberDecorate 42(T2) 1 MatrixStride 16 + Decorate 42(T2) Block + Decorate 44 DescriptorSet 0 + Decorate 52(c) Location 7 + Decorate 60(iout) Flat + Decorate 72(aiv2) Location 9 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Output 7(fvec4) + 9(pos): 8(ptr) Variable Output + 10: TypePointer Input 7(fvec4) + 11(p): 10(ptr) Variable Input + 13: TypeMatrix 7(fvec4) 4 + 14: TypeVector 6(float) 3 + 15: TypeMatrix 14(fvec3) 3 + 16: TypeInt 32 1 + 17(Transform): TypeStruct 13 13 15 16(int) + 18: TypePointer Uniform 17(Transform) + 19(tblock): 18(ptr) Variable Uniform + 20: 16(int) Constant 0 + 21: TypePointer Uniform 13 + 24: 16(int) Constant 1 + 28: TypeMatrix 14(fvec3) 2 + 29: TypeInt 32 0 + 30: TypeVector 29(int) 3 + 31: 29(int) Constant 4 + 32: TypeArray 30(ivec3) 31 + 33(T3): TypeStruct 13 13 28 32 + 34: TypePointer Uniform 33(T3) + 35: 34(ptr) Variable Uniform + 42(T2): TypeStruct 29(int) 13 + 43: TypePointer Uniform 42(T2) + 44: 43(ptr) Variable Uniform + 49: TypePointer Output 14(fvec3) + 50(color): 49(ptr) Variable Output + 51: TypePointer Input 14(fvec3) + 52(c): 51(ptr) Variable Input + 54: 16(int) Constant 2 + 55: TypePointer Uniform 15 + 59: TypePointer Output 16(int) + 60(iout): 59(ptr) Variable Output + 61: 16(int) Constant 3 + 62: TypePointer Uniform 16(int) + 65: TypePointer Private 29(int) + 66(uiuin): 65(ptr) Variable Private + 70: TypeVector 16(int) 2 + 71: TypePointer Input 70(ivec2) + 72(aiv2): 71(ptr) Variable Input + 73: 29(int) Constant 1 + 74: TypePointer Input 16(int) + 78(S): TypeStruct 14(fvec3) 6(float) + 79: TypePointer Output 78(S) + 80(s): 79(ptr) Variable Output + 83: 29(int) Constant 0 + 84: TypePointer Input 6(float) + 87: TypePointer Output 6(float) + 89: TypeBool + 90: TypePointer Uniform 14(fvec3) + 93: 6(float) Constant 1065353216 + 94: 14(fvec3) ConstantComposite 93 93 93 + 95: TypeVector 89(bool) 3 + 101: TypePointer Uniform 30(ivec3) + 104: 29(int) Constant 5 + 105: 30(ivec3) ConstantComposite 104 104 104 + 4(main): 2 Function None 3 + 5: Label + 12: 7(fvec4) Load 11(p) + 22: 21(ptr) AccessChain 19(tblock) 20 + 23: 13 Load 22 + 25: 21(ptr) AccessChain 19(tblock) 24 + 26: 13 Load 25 + 27: 13 MatrixTimesMatrix 23 26 + 36: 21(ptr) AccessChain 35 24 + 37: 13 Load 36 + 38: 13 MatrixTimesMatrix 27 37 + 39: 21(ptr) AccessChain 35 20 + 40: 13 Load 39 + 41: 13 MatrixTimesMatrix 38 40 + 45: 21(ptr) AccessChain 44 24 + 46: 13 Load 45 + 47: 13 MatrixTimesMatrix 41 46 + 48: 7(fvec4) VectorTimesMatrix 12 47 + Store 9(pos) 48 + 53: 14(fvec3) Load 52(c) + 56: 55(ptr) AccessChain 19(tblock) 54 + 57: 15 Load 56 + 58: 14(fvec3) VectorTimesMatrix 53 57 + Store 50(color) 58 + 63: 62(ptr) AccessChain 19(tblock) 61 + 64: 16(int) Load 63 + 67: 29(int) Load 66(uiuin) + 68: 16(int) Bitcast 67 + 69: 16(int) IAdd 64 68 + 75: 74(ptr) AccessChain 72(aiv2) 73 + 76: 16(int) Load 75 + 77: 16(int) IAdd 69 76 + Store 60(iout) 77 + 81: 14(fvec3) Load 52(c) + 82: 49(ptr) AccessChain 80(s) 20 + Store 82 81 + 85: 84(ptr) AccessChain 11(p) 83 + 86: 6(float) Load 85 + 88: 87(ptr) AccessChain 80(s) 24 + Store 88 86 + 91: 90(ptr) AccessChain 35 54 24 + 92: 14(fvec3) Load 91 + 96: 95(bvec3) FOrdNotEqual 92 94 + 97: 89(bool) Any 96 + 98: 89(bool) LogicalNot 97 + SelectionMerge 100 None + BranchConditional 98 99 100 + 99: Label + 102: 101(ptr) AccessChain 35 61 54 + 103: 30(ivec3) Load 102 + 106: 95(bvec3) INotEqual 103 105 + 107: 89(bool) Any 106 + Branch 100 + 100: Label + 108: 89(bool) Phi 97 5 107 99 + SelectionMerge 110 None + BranchConditional 108 109 110 + 109: Label + 111: 49(ptr) AccessChain 80(s) 20 + 112: 14(fvec3) Load 111 + 113: 14(fvec3) CompositeConstruct 93 93 93 + 114: 14(fvec3) FAdd 112 113 + Store 111 114 + Branch 110 + 110: Label + Return + FunctionEnd 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 new file mode 100755 index 0000000..14e184a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.310.bitcast.frag.out @@ -0,0 +1,230 @@ +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 +// Id's are bound by 153 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 14 26 37 48 89 98 107 116 122 130 139 148 + ExecutionMode 4 OriginUpperLeft + Source ESSL 310 + Name 4 "main" + Name 9 "idata" + Name 14 "f1" + Name 26 "f2" + Name 37 "f3" + Name 48 "f4" + Name 55 "udata" + Name 85 "fdata" + Name 89 "i1" + Name 98 "i2" + Name 107 "i3" + Name 116 "i4" + Name 122 "u1" + Name 130 "u2" + Name 139 "u3" + Name 148 "u4" + Decorate 14(f1) RelaxedPrecision + Decorate 15 RelaxedPrecision + Decorate 26(f2) RelaxedPrecision + Decorate 27 RelaxedPrecision + Decorate 37(f3) RelaxedPrecision + Decorate 38 RelaxedPrecision + Decorate 57 RelaxedPrecision + Decorate 64 RelaxedPrecision + Decorate 72 RelaxedPrecision + Decorate 89(i1) RelaxedPrecision + Decorate 89(i1) Flat + Decorate 90 RelaxedPrecision + Decorate 98(i2) RelaxedPrecision + Decorate 98(i2) Flat + Decorate 99 RelaxedPrecision + Decorate 107(i3) RelaxedPrecision + Decorate 107(i3) Flat + Decorate 108 RelaxedPrecision + Decorate 116(i4) Flat + Decorate 122(u1) RelaxedPrecision + Decorate 122(u1) Flat + Decorate 123 RelaxedPrecision + Decorate 130(u2) RelaxedPrecision + Decorate 130(u2) Flat + Decorate 131 RelaxedPrecision + Decorate 139(u3) RelaxedPrecision + Decorate 139(u3) Flat + Decorate 140 RelaxedPrecision + Decorate 148(u4) Flat + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypeVector 6(int) 4 + 8: TypePointer Function 7(ivec4) + 10: 6(int) Constant 0 + 11: 7(ivec4) ConstantComposite 10 10 10 10 + 12: TypeFloat 32 + 13: TypePointer Input 12(float) + 14(f1): 13(ptr) Variable Input + 17: TypeInt 32 0 + 18: 17(int) Constant 0 + 19: TypePointer Function 6(int) + 24: TypeVector 12(float) 2 + 25: TypePointer Input 24(fvec2) + 26(f2): 25(ptr) Variable Input + 28: TypeVector 6(int) 2 + 35: TypeVector 12(float) 3 + 36: TypePointer Input 35(fvec3) + 37(f3): 36(ptr) Variable Input + 39: TypeVector 6(int) 3 + 46: TypeVector 12(float) 4 + 47: TypePointer Input 46(fvec4) + 48(f4): 47(ptr) Variable Input + 53: TypeVector 17(int) 4 + 54: TypePointer Function 53(ivec4) + 56: 53(ivec4) ConstantComposite 18 18 18 18 + 59: TypePointer Function 17(int) + 65: TypeVector 17(int) 2 + 73: TypeVector 17(int) 3 + 84: TypePointer Function 46(fvec4) + 86: 12(float) Constant 0 + 87: 46(fvec4) ConstantComposite 86 86 86 86 + 88: TypePointer Input 6(int) + 89(i1): 88(ptr) Variable Input + 92: TypePointer Function 12(float) + 97: TypePointer Input 28(ivec2) + 98(i2): 97(ptr) Variable Input + 106: TypePointer Input 39(ivec3) + 107(i3): 106(ptr) Variable Input + 115: TypePointer Input 7(ivec4) + 116(i4): 115(ptr) Variable Input + 121: TypePointer Input 17(int) + 122(u1): 121(ptr) Variable Input + 129: TypePointer Input 65(ivec2) + 130(u2): 129(ptr) Variable Input + 138: TypePointer Input 73(ivec3) + 139(u3): 138(ptr) Variable Input + 147: TypePointer Input 53(ivec4) + 148(u4): 147(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 9(idata): 8(ptr) Variable Function + 55(udata): 54(ptr) Variable Function + 85(fdata): 84(ptr) Variable Function + Store 9(idata) 11 + 15: 12(float) Load 14(f1) + 16: 6(int) Bitcast 15 + 20: 19(ptr) AccessChain 9(idata) 18 + 21: 6(int) Load 20 + 22: 6(int) IAdd 21 16 + 23: 19(ptr) AccessChain 9(idata) 18 + Store 23 22 + 27: 24(fvec2) Load 26(f2) + 29: 28(ivec2) Bitcast 27 + 30: 7(ivec4) Load 9(idata) + 31: 28(ivec2) VectorShuffle 30 30 0 1 + 32: 28(ivec2) IAdd 31 29 + 33: 7(ivec4) Load 9(idata) + 34: 7(ivec4) VectorShuffle 33 32 4 5 2 3 + Store 9(idata) 34 + 38: 35(fvec3) Load 37(f3) + 40: 39(ivec3) Bitcast 38 + 41: 7(ivec4) Load 9(idata) + 42: 39(ivec3) VectorShuffle 41 41 0 1 2 + 43: 39(ivec3) IAdd 42 40 + 44: 7(ivec4) Load 9(idata) + 45: 7(ivec4) VectorShuffle 44 43 4 5 6 3 + Store 9(idata) 45 + 49: 46(fvec4) Load 48(f4) + 50: 7(ivec4) Bitcast 49 + 51: 7(ivec4) Load 9(idata) + 52: 7(ivec4) IAdd 51 50 + Store 9(idata) 52 + Store 55(udata) 56 + 57: 12(float) Load 14(f1) + 58: 17(int) Bitcast 57 + 60: 59(ptr) AccessChain 55(udata) 18 + 61: 17(int) Load 60 + 62: 17(int) IAdd 61 58 + 63: 59(ptr) AccessChain 55(udata) 18 + Store 63 62 + 64: 24(fvec2) Load 26(f2) + 66: 65(ivec2) Bitcast 64 + 67: 53(ivec4) Load 55(udata) + 68: 65(ivec2) VectorShuffle 67 67 0 1 + 69: 65(ivec2) IAdd 68 66 + 70: 53(ivec4) Load 55(udata) + 71: 53(ivec4) VectorShuffle 70 69 4 5 2 3 + Store 55(udata) 71 + 72: 35(fvec3) Load 37(f3) + 74: 73(ivec3) Bitcast 72 + 75: 53(ivec4) Load 55(udata) + 76: 73(ivec3) VectorShuffle 75 75 0 1 2 + 77: 73(ivec3) IAdd 76 74 + 78: 53(ivec4) Load 55(udata) + 79: 53(ivec4) VectorShuffle 78 77 4 5 6 3 + Store 55(udata) 79 + 80: 46(fvec4) Load 48(f4) + 81: 53(ivec4) Bitcast 80 + 82: 53(ivec4) Load 55(udata) + 83: 53(ivec4) IAdd 82 81 + Store 55(udata) 83 + Store 85(fdata) 87 + 90: 6(int) Load 89(i1) + 91: 12(float) Bitcast 90 + 93: 92(ptr) AccessChain 85(fdata) 18 + 94: 12(float) Load 93 + 95: 12(float) FAdd 94 91 + 96: 92(ptr) AccessChain 85(fdata) 18 + Store 96 95 + 99: 28(ivec2) Load 98(i2) + 100: 24(fvec2) Bitcast 99 + 101: 46(fvec4) Load 85(fdata) + 102: 24(fvec2) VectorShuffle 101 101 0 1 + 103: 24(fvec2) FAdd 102 100 + 104: 46(fvec4) Load 85(fdata) + 105: 46(fvec4) VectorShuffle 104 103 4 5 2 3 + Store 85(fdata) 105 + 108: 39(ivec3) Load 107(i3) + 109: 35(fvec3) Bitcast 108 + 110: 46(fvec4) Load 85(fdata) + 111: 35(fvec3) VectorShuffle 110 110 0 1 2 + 112: 35(fvec3) FAdd 111 109 + 113: 46(fvec4) Load 85(fdata) + 114: 46(fvec4) VectorShuffle 113 112 4 5 6 3 + Store 85(fdata) 114 + 117: 7(ivec4) Load 116(i4) + 118: 46(fvec4) Bitcast 117 + 119: 46(fvec4) Load 85(fdata) + 120: 46(fvec4) FAdd 119 118 + Store 85(fdata) 120 + 123: 17(int) Load 122(u1) + 124: 12(float) Bitcast 123 + 125: 92(ptr) AccessChain 85(fdata) 18 + 126: 12(float) Load 125 + 127: 12(float) FAdd 126 124 + 128: 92(ptr) AccessChain 85(fdata) 18 + Store 128 127 + 131: 65(ivec2) Load 130(u2) + 132: 24(fvec2) Bitcast 131 + 133: 46(fvec4) Load 85(fdata) + 134: 24(fvec2) VectorShuffle 133 133 0 1 + 135: 24(fvec2) FAdd 134 132 + 136: 46(fvec4) Load 85(fdata) + 137: 46(fvec4) VectorShuffle 136 135 4 5 2 3 + Store 85(fdata) 137 + 140: 73(ivec3) Load 139(u3) + 141: 35(fvec3) Bitcast 140 + 142: 46(fvec4) Load 85(fdata) + 143: 35(fvec3) VectorShuffle 142 142 0 1 2 + 144: 35(fvec3) FAdd 143 141 + 145: 46(fvec4) Load 85(fdata) + 146: 46(fvec4) VectorShuffle 145 144 4 5 6 3 + Store 85(fdata) 146 + 149: 53(ivec4) Load 148(u4) + 150: 46(fvec4) Bitcast 149 + 151: 46(fvec4) Load 85(fdata) + 152: 46(fvec4) FAdd 151 150 + Store 85(fdata) 152 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.310.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.310.comp.out new file mode 100644 index 0000000..4b47c7d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.310.comp.out @@ -0,0 +1,131 @@ +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 +// Id's are bound by 69 + + Capability Shader + Capability DeviceGroup + Extension "SPV_KHR_device_group" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "main" 53 64 + ExecutionMode 4 LocalSize 16 32 4 + Source ESSL 310 + SourceExtension "GL_EXT_device_group" + Name 4 "main" + Name 13 "outb" + MemberName 13(outb) 0 "f" + MemberName 13(outb) 1 "g" + MemberName 13(outb) 2 "h" + MemberName 13(outb) 3 "uns" + Name 15 "outbname" + Name 19 "s" + Name 24 "outbna" + MemberName 24(outbna) 0 "k" + MemberName 24(outbna) 1 "na" + Name 26 "outbnamena" + Name 42 "i" + Name 48 "outs" + MemberName 48(outs) 0 "s" + MemberName 48(outs) 1 "va" + Name 50 "outnames" + Name 53 "gl_LocalInvocationID" + Name 64 "gl_DeviceIndex" + Decorate 12 ArrayStride 16 + MemberDecorate 13(outb) 0 Offset 0 + MemberDecorate 13(outb) 1 Offset 4 + MemberDecorate 13(outb) 2 Offset 8 + MemberDecorate 13(outb) 3 Offset 16 + Decorate 13(outb) BufferBlock + Decorate 15(outbname) DescriptorSet 0 + MemberDecorate 24(outbna) 0 Offset 0 + MemberDecorate 24(outbna) 1 Offset 16 + Decorate 24(outbna) BufferBlock + Decorate 26(outbnamena) DescriptorSet 0 + Decorate 47 ArrayStride 16 + MemberDecorate 48(outs) 0 Offset 0 + MemberDecorate 48(outs) 1 Offset 16 + Decorate 48(outs) BufferBlock + Decorate 50(outnames) DescriptorSet 0 + Decorate 53(gl_LocalInvocationID) BuiltIn LocalInvocationId + Decorate 64(gl_DeviceIndex) BuiltIn DeviceIndex + Decorate 68 BuiltIn WorkgroupSize + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: 6(int) Constant 2 + 8: 6(int) Constant 1 + 9: 6(int) Constant 0 + 10: TypeFloat 32 + 11: TypeVector 10(float) 3 + 12: TypeRuntimeArray 11(fvec3) + 13(outb): TypeStruct 10(float) 10(float) 10(float) 12 + 14: TypePointer Uniform 13(outb) + 15(outbname): 14(ptr) Variable Uniform + 16: TypeInt 32 1 + 17: 16(int) Constant 0 + 18: TypePointer Workgroup 10(float) + 19(s): 18(ptr) Variable Workgroup + 21: TypePointer Uniform 10(float) + 23: TypeVector 10(float) 4 + 24(outbna): TypeStruct 16(int) 23(fvec4) + 25: TypePointer Uniform 24(outbna) + 26(outbnamena): 25(ptr) Variable Uniform + 27: 16(int) Constant 1 + 30: TypePointer Uniform 23(fvec4) + 32: 16(int) Constant 3 + 33: 16(int) Constant 18 + 36: 16(int) Constant 17 + 37: 10(float) Constant 1077936128 + 38: 11(fvec3) ConstantComposite 37 37 37 + 39: TypePointer Uniform 11(fvec3) + 41: TypePointer Workgroup 16(int) + 42(i): 41(ptr) Variable Workgroup + 47: TypeRuntimeArray 23(fvec4) + 48(outs): TypeStruct 16(int) 47 + 49: TypePointer Uniform 48(outs) + 50(outnames): 49(ptr) Variable Uniform + 51: TypeVector 6(int) 3 + 52: TypePointer Input 51(ivec3) +53(gl_LocalInvocationID): 52(ptr) Variable Input + 54: TypePointer Input 6(int) + 61: TypePointer Uniform 16(int) + 63: TypePointer Input 16(int) +64(gl_DeviceIndex): 63(ptr) Variable Input + 65: 6(int) Constant 16 + 66: 6(int) Constant 32 + 67: 6(int) Constant 4 + 68: 51(ivec3) ConstantComposite 65 66 67 + 4(main): 2 Function None 3 + 5: Label + ControlBarrier 7 8 9 + 20: 10(float) Load 19(s) + 22: 21(ptr) AccessChain 15(outbname) 17 + Store 22 20 + 28: 10(float) Load 19(s) + 29: 23(fvec4) CompositeConstruct 28 28 28 28 + 31: 30(ptr) AccessChain 26(outbnamena) 27 + Store 31 29 + 34: 21(ptr) AccessChain 15(outbname) 32 33 9 + 35: 10(float) Load 34 + Store 19(s) 35 + 40: 39(ptr) AccessChain 15(outbname) 32 36 + Store 40 38 + 43: 16(int) Load 42(i) + 44: 10(float) Load 19(s) + 45: 11(fvec3) CompositeConstruct 44 44 44 + 46: 39(ptr) AccessChain 15(outbname) 32 43 + Store 46 45 + 55: 54(ptr) AccessChain 53(gl_LocalInvocationID) 9 + 56: 6(int) Load 55 + 57: 10(float) Load 19(s) + 58: 23(fvec4) CompositeConstruct 57 57 57 57 + 59: 30(ptr) AccessChain 50(outnames) 27 56 + Store 59 58 + 60: 16(int) ArrayLength 15(outbname) 3 + 62: 61(ptr) AccessChain 50(outnames) 17 + Store 62 60 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.330.geom.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.330.geom.out new file mode 100644 index 0000000..3e81dcb --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.330.geom.out @@ -0,0 +1,67 @@ +spv.330.geom +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 32 + + Capability Geometry + Capability ClipDistance + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Geometry 4 "main" 13 20 + ExecutionMode 4 Triangles + ExecutionMode 4 Invocations 1 + ExecutionMode 4 OutputTriangleStrip + ExecutionMode 4 OutputVertices 3 + Source GLSL 330 + SourceExtension "GL_ARB_separate_shader_objects" + Name 4 "main" + Name 11 "gl_PerVertex" + MemberName 11(gl_PerVertex) 0 "gl_Position" + MemberName 11(gl_PerVertex) 1 "gl_ClipDistance" + Name 13 "" + Name 16 "gl_PerVertex" + MemberName 16(gl_PerVertex) 0 "gl_Position" + MemberName 16(gl_PerVertex) 1 "gl_ClipDistance" + Name 20 "gl_in" + MemberDecorate 11(gl_PerVertex) 0 BuiltIn Position + MemberDecorate 11(gl_PerVertex) 1 BuiltIn ClipDistance + Decorate 11(gl_PerVertex) Block + MemberDecorate 16(gl_PerVertex) 0 BuiltIn Position + MemberDecorate 16(gl_PerVertex) 1 BuiltIn ClipDistance + Decorate 16(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) 10 + 12: TypePointer Output 11(gl_PerVertex) + 13: 12(ptr) Variable Output + 14: TypeInt 32 1 + 15: 14(int) Constant 0 +16(gl_PerVertex): TypeStruct 7(fvec4) 10 + 17: 8(int) Constant 3 + 18: TypeArray 16(gl_PerVertex) 17 + 19: TypePointer Input 18 + 20(gl_in): 19(ptr) Variable Input + 21: 14(int) Constant 1 + 22: TypePointer Input 7(fvec4) + 25: TypePointer Output 7(fvec4) + 27: TypePointer Input 6(float) + 30: TypePointer Output 6(float) + 4(main): 2 Function None 3 + 5: Label + 23: 22(ptr) AccessChain 20(gl_in) 21 15 + 24: 7(fvec4) Load 23 + 26: 25(ptr) AccessChain 13 15 + Store 26 24 + 28: 27(ptr) AccessChain 20(gl_in) 21 21 15 + 29: 6(float) Load 28 + 31: 30(ptr) AccessChain 13 21 15 + Store 31 29 + EmitVertex + EndPrimitive + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.400.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.400.frag.out new file mode 100644 index 0000000..cb2de96 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.400.frag.out @@ -0,0 +1,1393 @@ +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 +// Id's are bound by 1118 + + Capability Shader + Capability Geometry + Capability Float64 + Capability ImageGatherExtended + Capability ClipDistance + Capability SampledRect + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 13 1027 1033 1038 1050 1076 1097 1099 1105 1107 1116 + ExecutionMode 4 OriginUpperLeft + Source GLSL 400 + SourceExtension "GL_ARB_separate_shader_objects" + Name 4 "main" + Name 6 "foo23(" + Name 8 "doubles(" + Name 13 "outp" + Name 17 "u2drs" + Name 41 "doublev" + Name 45 "dvec2v" + Name 50 "dvec3v" + Name 55 "dvec4v" + Name 430 "boolv" + Name 439 "bvec2v" + Name 448 "bvec3v" + Name 457 "bvec4v" + Name 739 "dmat2v" + Name 745 "dmat3v" + Name 751 "dmat4v" + Name 757 "dmat2x3v" + Name 763 "dmat3x2v" + Name 769 "dmat2x4v" + Name 775 "dmat4x2v" + Name 781 "dmat3x4v" + Name 787 "dmat4x3v" + Name 1019 "v" + Name 1025 "arrayedSampler" + Name 1027 "i" + Name 1033 "c2D" + Name 1038 "gl_ClipDistance" + Name 1050 "uoutp" + Name 1054 "samp2dr" + Name 1076 "ioutp" + Name 1080 "isamp2DA" + Name 1097 "gl_FragCoord" + Name 1099 "vl2" + Name 1105 "uo" + Name 1107 "u" + Name 1115 "id" + Name 1116 "gl_PrimitiveID" + Decorate 17(u2drs) DescriptorSet 0 + Decorate 1025(arrayedSampler) DescriptorSet 0 + Decorate 1027(i) Flat + Decorate 1038(gl_ClipDistance) BuiltIn ClipDistance + Decorate 1054(samp2dr) DescriptorSet 0 + Decorate 1080(isamp2DA) DescriptorSet 0 + Decorate 1097(gl_FragCoord) BuiltIn FragCoord + Decorate 1099(vl2) Location 6 + Decorate 1107(u) Flat + Decorate 1116(gl_PrimitiveID) Flat + Decorate 1116(gl_PrimitiveID) BuiltIn PrimitiveId + 2: TypeVoid + 3: TypeFunction 2 + 10: TypeFloat 32 + 11: TypeVector 10(float) 4 + 12: TypePointer Output 11(fvec4) + 13(outp): 12(ptr) Variable Output + 14: TypeImage 10(float) Rect depth sampled format:Unknown + 15: TypeSampledImage 14 + 16: TypePointer UniformConstant 15 + 17(u2drs): 16(ptr) Variable UniformConstant + 20: TypeVector 10(float) 2 + 21: 10(float) Constant 0 + 22: 20(fvec2) ConstantComposite 21 21 + 23: TypeInt 32 1 + 24: TypeVector 23(int) 2 + 25: 23(int) Constant 3 + 26: 23(int) Constant 4 + 27: 24(ivec2) ConstantComposite 25 26 + 32: TypeInt 32 0 + 33: 32(int) Constant 0 + 34: TypePointer Output 10(float) + 39: TypeFloat 64 + 40: TypePointer Function 39(float) + 42: 39(float) Constant 2507418074 1073430332 + 43: TypeVector 39(float) 2 + 44: TypePointer Function 43(fvec2) + 46: 39(float) Constant 796182188 1073367658 + 47: 43(fvec2) ConstantComposite 46 46 + 48: TypeVector 39(float) 3 + 49: TypePointer Function 48(fvec3) + 51: 39(float) Constant 1719614413 1073127582 + 52: 48(fvec3) ConstantComposite 51 51 51 + 53: TypeVector 39(float) 4 + 54: TypePointer Function 53(fvec4) + 428: TypeBool + 429: TypePointer Function 428(bool) + 437: TypeVector 428(bool) 2 + 438: TypePointer Function 437(bvec2) + 446: TypeVector 428(bool) 3 + 447: TypePointer Function 446(bvec3) + 455: TypeVector 428(bool) 4 + 456: TypePointer Function 455(bvec4) + 563: 428(bool) ConstantFalse + 572: 437(bvec2) ConstantComposite 563 563 + 581: 446(bvec3) ConstantComposite 563 563 563 + 590: 455(bvec4) ConstantComposite 563 563 563 563 + 737: TypeMatrix 43(fvec2) 2 + 738: TypePointer Function 737 + 743: TypeMatrix 48(fvec3) 3 + 744: TypePointer Function 743 + 749: TypeMatrix 53(fvec4) 4 + 750: TypePointer Function 749 + 755: TypeMatrix 48(fvec3) 2 + 756: TypePointer Function 755 + 761: TypeMatrix 43(fvec2) 3 + 762: TypePointer Function 761 + 767: TypeMatrix 53(fvec4) 2 + 768: TypePointer Function 767 + 773: TypeMatrix 43(fvec2) 4 + 774: TypePointer Function 773 + 779: TypeMatrix 53(fvec4) 3 + 780: TypePointer Function 779 + 785: TypeMatrix 48(fvec3) 4 + 786: TypePointer Function 785 + 954: 32(int) Constant 1 + 958: 32(int) Constant 2 + 962: 32(int) Constant 3 + 966: 23(int) Constant 1 + 970: 23(int) Constant 2 + 996: 10(float) Constant 1065353216 + 1018: TypePointer Function 11(fvec4) + 1020: TypeImage 10(float) 2D sampled format:Unknown + 1021: TypeSampledImage 1020 + 1022: 32(int) Constant 5 + 1023: TypeArray 1021 1022 + 1024: TypePointer UniformConstant 1023 +1025(arrayedSampler): 1024(ptr) Variable UniformConstant + 1026: TypePointer Input 23(int) + 1027(i): 1026(ptr) Variable Input + 1029: TypePointer UniformConstant 1021 + 1032: TypePointer Input 20(fvec2) + 1033(c2D): 1032(ptr) Variable Input + 1036: TypeArray 10(float) 958 + 1037: TypePointer Input 1036 +1038(gl_ClipDistance): 1037(ptr) Variable Input + 1039: TypePointer Input 10(float) + 1043: TypeVector 10(float) 3 + 1048: TypeVector 32(int) 4 + 1049: TypePointer Output 1048(ivec4) + 1050(uoutp): 1049(ptr) Variable Output + 1051: TypeImage 32(int) Rect sampled format:Unknown + 1052: TypeSampledImage 1051 + 1053: TypePointer UniformConstant 1052 + 1054(samp2dr): 1053(ptr) Variable UniformConstant + 1057: 32(int) Constant 4 + 1058: TypeArray 24(ivec2) 1057 + 1059: 24(ivec2) ConstantComposite 966 970 + 1060: 23(int) Constant 15 + 1061: 23(int) Constant 16 + 1062: 24(ivec2) ConstantComposite 1060 1061 + 1063: 23(int) Constant 4294967294 + 1064: 23(int) Constant 0 + 1065: 24(ivec2) ConstantComposite 1063 1064 + 1066: 1058 ConstantComposite 1059 27 1062 1065 + 1074: TypeVector 23(int) 4 + 1075: TypePointer Output 1074(ivec4) + 1076(ioutp): 1075(ptr) Variable Output + 1077: TypeImage 23(int) 2D array sampled format:Unknown + 1078: TypeSampledImage 1077 + 1079: TypePointer UniformConstant 1078 + 1080(isamp2DA): 1079(ptr) Variable UniformConstant + 1082: 10(float) Constant 1036831949 + 1083: 1043(fvec3) ConstantComposite 1082 1082 1082 + 1084: 24(ivec2) ConstantComposite 966 966 + 1096: TypePointer Input 11(fvec4) +1097(gl_FragCoord): 1096(ptr) Variable Input + 1099(vl2): 1096(ptr) Variable Input + 1104: TypePointer Output 32(int) + 1105(uo): 1104(ptr) Variable Output + 1106: TypePointer Input 32(int) + 1107(u): 1106(ptr) Variable Input + 1114: TypePointer Function 23(int) +1116(gl_PrimitiveID): 1026(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 1019(v): 1018(ptr) Variable Function + 1115(id): 1114(ptr) Variable Function + 1028: 23(int) Load 1027(i) + 1030: 1029(ptr) AccessChain 1025(arrayedSampler) 1028 + 1031: 1021 Load 1030 + 1034: 20(fvec2) Load 1033(c2D) + 1035: 11(fvec4) ImageSampleImplicitLod 1031 1034 + Store 1019(v) 1035 + 1040: 1039(ptr) AccessChain 1038(gl_ClipDistance) 966 + 1041: 10(float) Load 1040 + 1042: 34(ptr) AccessChain 13(outp) 33 + Store 1042 1041 + 1044: 11(fvec4) Load 1019(v) + 1045: 1043(fvec3) VectorShuffle 1044 1044 1 2 3 + 1046: 11(fvec4) Load 13(outp) + 1047: 11(fvec4) VectorShuffle 1046 1045 0 4 5 6 + Store 13(outp) 1047 + 1055: 1052 Load 1054(samp2dr) + 1056: 20(fvec2) Load 1033(c2D) + 1067: 1048(ivec4) ImageGather 1055 1056 970 ConstOffsets 1066 + Store 1050(uoutp) 1067 + 1068: 1029(ptr) AccessChain 1025(arrayedSampler) 1064 + 1069: 1021 Load 1068 + 1070: 20(fvec2) Load 1033(c2D) + 1071: 11(fvec4) ImageGather 1069 1070 1064 + 1072: 11(fvec4) Load 13(outp) + 1073: 11(fvec4) FAdd 1072 1071 + Store 13(outp) 1073 + 1081: 1078 Load 1080(isamp2DA) + 1085: 1074(ivec4) ImageGather 1081 1083 25 ConstOffset 1084 + Store 1076(ioutp) 1085 + 1086: 1078 Load 1080(isamp2DA) + 1087: 1074(ivec4) ImageGather 1086 1083 25 ConstOffset 1084 + 1088: 1074(ivec4) Load 1076(ioutp) + 1089: 1074(ivec4) IAdd 1088 1087 + Store 1076(ioutp) 1089 + 1090: 1078 Load 1080(isamp2DA) + 1091: 23(int) Load 1027(i) + 1092: 24(ivec2) CompositeConstruct 1091 1091 + 1093: 1074(ivec4) ImageGather 1090 1083 1064 Offset 1092 + 1094: 1074(ivec4) Load 1076(ioutp) + 1095: 1074(ivec4) IAdd 1094 1093 + Store 1076(ioutp) 1095 + 1098: 11(fvec4) Load 1097(gl_FragCoord) + 1100: 11(fvec4) Load 1099(vl2) + 1101: 11(fvec4) FAdd 1098 1100 + 1102: 11(fvec4) Load 13(outp) + 1103: 11(fvec4) FAdd 1102 1101 + Store 13(outp) 1103 + 1108: 32(int) Load 1107(u) + 1109: 23(int) Load 1027(i) + 1110: 32(int) Bitcast 1109 + 1111: 32(int) UMod 1108 1110 + Store 1105(uo) 1111 + 1112: 2 FunctionCall 6(foo23() + 1113: 2 FunctionCall 8(doubles() + 1117: 23(int) Load 1116(gl_PrimitiveID) + Store 1115(id) 1117 + Return + FunctionEnd + 6(foo23(): 2 Function None 3 + 7: Label + 18: 15 Load 17(u2drs) + 19: 11(fvec4) Load 13(outp) + 28: 10(float) CompositeExtract 19 2 + 29: 10(float) CompositeExtract 19 3 + 30: 11(fvec4) CompositeInsert 29 19 2 + 31: 10(float) ImageSampleProjDrefExplicitLod 18 30 28 Grad ConstOffset 22 22 27 + 35: 34(ptr) AccessChain 13(outp) 33 + 36: 10(float) Load 35 + 37: 10(float) FAdd 36 31 + 38: 34(ptr) AccessChain 13(outp) 33 + Store 38 37 + Return + FunctionEnd + 8(doubles(): 2 Function None 3 + 9: Label + 41(doublev): 40(ptr) Variable Function + 45(dvec2v): 44(ptr) Variable Function + 50(dvec3v): 49(ptr) Variable Function + 55(dvec4v): 54(ptr) Variable Function + 430(boolv): 429(ptr) Variable Function + 439(bvec2v): 438(ptr) Variable Function + 448(bvec3v): 447(ptr) Variable Function + 457(bvec4v): 456(ptr) Variable Function + 556: 429(ptr) Variable Function + 565: 438(ptr) Variable Function + 574: 447(ptr) Variable Function + 583: 456(ptr) Variable Function + 739(dmat2v): 738(ptr) Variable Function + 745(dmat3v): 744(ptr) Variable Function + 751(dmat4v): 750(ptr) Variable Function + 757(dmat2x3v): 756(ptr) Variable Function + 763(dmat3x2v): 762(ptr) Variable Function + 769(dmat2x4v): 768(ptr) Variable Function + 775(dmat4x2v): 774(ptr) Variable Function + 781(dmat3x4v): 780(ptr) Variable Function + 787(dmat4x3v): 786(ptr) Variable Function + Store 41(doublev) 42 + Store 45(dvec2v) 47 + Store 50(dvec3v) 52 + 56: 39(float) Load 41(doublev) + 57: 53(fvec4) CompositeConstruct 56 56 56 56 + 58: 53(fvec4) ExtInst 1(GLSL.std.450) 31(Sqrt) 57 + Store 55(dvec4v) 58 + 59: 39(float) Load 41(doublev) + 60: 39(float) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 59 + 61: 39(float) Load 41(doublev) + 62: 39(float) FAdd 61 60 + Store 41(doublev) 62 + 63: 43(fvec2) Load 45(dvec2v) + 64: 43(fvec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 63 + 65: 43(fvec2) Load 45(dvec2v) + 66: 43(fvec2) FAdd 65 64 + Store 45(dvec2v) 66 + 67: 48(fvec3) Load 50(dvec3v) + 68: 48(fvec3) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 67 + 69: 48(fvec3) Load 50(dvec3v) + 70: 48(fvec3) FAdd 69 68 + Store 50(dvec3v) 70 + 71: 53(fvec4) Load 55(dvec4v) + 72: 53(fvec4) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 71 + 73: 53(fvec4) Load 55(dvec4v) + 74: 53(fvec4) FAdd 73 72 + Store 55(dvec4v) 74 + 75: 39(float) Load 41(doublev) + 76: 39(float) ExtInst 1(GLSL.std.450) 4(FAbs) 75 + 77: 39(float) Load 41(doublev) + 78: 39(float) FAdd 77 76 + Store 41(doublev) 78 + 79: 43(fvec2) Load 45(dvec2v) + 80: 43(fvec2) ExtInst 1(GLSL.std.450) 4(FAbs) 79 + 81: 43(fvec2) Load 45(dvec2v) + 82: 43(fvec2) FAdd 81 80 + Store 45(dvec2v) 82 + 83: 48(fvec3) Load 50(dvec3v) + 84: 48(fvec3) ExtInst 1(GLSL.std.450) 4(FAbs) 83 + 85: 48(fvec3) Load 50(dvec3v) + 86: 48(fvec3) FAdd 85 84 + Store 50(dvec3v) 86 + 87: 53(fvec4) Load 55(dvec4v) + 88: 53(fvec4) ExtInst 1(GLSL.std.450) 4(FAbs) 87 + 89: 53(fvec4) Load 55(dvec4v) + 90: 53(fvec4) FAdd 89 88 + Store 55(dvec4v) 90 + 91: 39(float) Load 41(doublev) + 92: 39(float) ExtInst 1(GLSL.std.450) 6(FSign) 91 + 93: 39(float) Load 41(doublev) + 94: 39(float) FAdd 93 92 + Store 41(doublev) 94 + 95: 43(fvec2) Load 45(dvec2v) + 96: 43(fvec2) ExtInst 1(GLSL.std.450) 6(FSign) 95 + 97: 43(fvec2) Load 45(dvec2v) + 98: 43(fvec2) FAdd 97 96 + Store 45(dvec2v) 98 + 99: 48(fvec3) Load 50(dvec3v) + 100: 48(fvec3) ExtInst 1(GLSL.std.450) 6(FSign) 99 + 101: 48(fvec3) Load 50(dvec3v) + 102: 48(fvec3) FAdd 101 100 + Store 50(dvec3v) 102 + 103: 53(fvec4) Load 55(dvec4v) + 104: 53(fvec4) ExtInst 1(GLSL.std.450) 6(FSign) 103 + 105: 53(fvec4) Load 55(dvec4v) + 106: 53(fvec4) FAdd 105 104 + Store 55(dvec4v) 106 + 107: 39(float) Load 41(doublev) + 108: 39(float) ExtInst 1(GLSL.std.450) 8(Floor) 107 + 109: 39(float) Load 41(doublev) + 110: 39(float) FAdd 109 108 + Store 41(doublev) 110 + 111: 43(fvec2) Load 45(dvec2v) + 112: 43(fvec2) ExtInst 1(GLSL.std.450) 8(Floor) 111 + 113: 43(fvec2) Load 45(dvec2v) + 114: 43(fvec2) FAdd 113 112 + Store 45(dvec2v) 114 + 115: 48(fvec3) Load 50(dvec3v) + 116: 48(fvec3) ExtInst 1(GLSL.std.450) 8(Floor) 115 + 117: 48(fvec3) Load 50(dvec3v) + 118: 48(fvec3) FAdd 117 116 + Store 50(dvec3v) 118 + 119: 53(fvec4) Load 55(dvec4v) + 120: 53(fvec4) ExtInst 1(GLSL.std.450) 8(Floor) 119 + 121: 53(fvec4) Load 55(dvec4v) + 122: 53(fvec4) FAdd 121 120 + Store 55(dvec4v) 122 + 123: 39(float) Load 41(doublev) + 124: 39(float) ExtInst 1(GLSL.std.450) 3(Trunc) 123 + 125: 39(float) Load 41(doublev) + 126: 39(float) FAdd 125 124 + Store 41(doublev) 126 + 127: 43(fvec2) Load 45(dvec2v) + 128: 43(fvec2) ExtInst 1(GLSL.std.450) 3(Trunc) 127 + 129: 43(fvec2) Load 45(dvec2v) + 130: 43(fvec2) FAdd 129 128 + Store 45(dvec2v) 130 + 131: 48(fvec3) Load 50(dvec3v) + 132: 48(fvec3) ExtInst 1(GLSL.std.450) 3(Trunc) 131 + 133: 48(fvec3) Load 50(dvec3v) + 134: 48(fvec3) FAdd 133 132 + Store 50(dvec3v) 134 + 135: 53(fvec4) Load 55(dvec4v) + 136: 53(fvec4) ExtInst 1(GLSL.std.450) 3(Trunc) 135 + 137: 53(fvec4) Load 55(dvec4v) + 138: 53(fvec4) FAdd 137 136 + Store 55(dvec4v) 138 + 139: 39(float) Load 41(doublev) + 140: 39(float) ExtInst 1(GLSL.std.450) 1(Round) 139 + 141: 39(float) Load 41(doublev) + 142: 39(float) FAdd 141 140 + Store 41(doublev) 142 + 143: 43(fvec2) Load 45(dvec2v) + 144: 43(fvec2) ExtInst 1(GLSL.std.450) 1(Round) 143 + 145: 43(fvec2) Load 45(dvec2v) + 146: 43(fvec2) FAdd 145 144 + Store 45(dvec2v) 146 + 147: 48(fvec3) Load 50(dvec3v) + 148: 48(fvec3) ExtInst 1(GLSL.std.450) 1(Round) 147 + 149: 48(fvec3) Load 50(dvec3v) + 150: 48(fvec3) FAdd 149 148 + Store 50(dvec3v) 150 + 151: 53(fvec4) Load 55(dvec4v) + 152: 53(fvec4) ExtInst 1(GLSL.std.450) 1(Round) 151 + 153: 53(fvec4) Load 55(dvec4v) + 154: 53(fvec4) FAdd 153 152 + Store 55(dvec4v) 154 + 155: 39(float) Load 41(doublev) + 156: 39(float) ExtInst 1(GLSL.std.450) 2(RoundEven) 155 + 157: 39(float) Load 41(doublev) + 158: 39(float) FAdd 157 156 + Store 41(doublev) 158 + 159: 43(fvec2) Load 45(dvec2v) + 160: 43(fvec2) ExtInst 1(GLSL.std.450) 2(RoundEven) 159 + 161: 43(fvec2) Load 45(dvec2v) + 162: 43(fvec2) FAdd 161 160 + Store 45(dvec2v) 162 + 163: 48(fvec3) Load 50(dvec3v) + 164: 48(fvec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 163 + 165: 48(fvec3) Load 50(dvec3v) + 166: 48(fvec3) FAdd 165 164 + Store 50(dvec3v) 166 + 167: 53(fvec4) Load 55(dvec4v) + 168: 53(fvec4) ExtInst 1(GLSL.std.450) 2(RoundEven) 167 + 169: 53(fvec4) Load 55(dvec4v) + 170: 53(fvec4) FAdd 169 168 + Store 55(dvec4v) 170 + 171: 39(float) Load 41(doublev) + 172: 39(float) ExtInst 1(GLSL.std.450) 9(Ceil) 171 + 173: 39(float) Load 41(doublev) + 174: 39(float) FAdd 173 172 + Store 41(doublev) 174 + 175: 43(fvec2) Load 45(dvec2v) + 176: 43(fvec2) ExtInst 1(GLSL.std.450) 9(Ceil) 175 + 177: 43(fvec2) Load 45(dvec2v) + 178: 43(fvec2) FAdd 177 176 + Store 45(dvec2v) 178 + 179: 48(fvec3) Load 50(dvec3v) + 180: 48(fvec3) ExtInst 1(GLSL.std.450) 9(Ceil) 179 + 181: 48(fvec3) Load 50(dvec3v) + 182: 48(fvec3) FAdd 181 180 + Store 50(dvec3v) 182 + 183: 53(fvec4) Load 55(dvec4v) + 184: 53(fvec4) ExtInst 1(GLSL.std.450) 9(Ceil) 183 + 185: 53(fvec4) Load 55(dvec4v) + 186: 53(fvec4) FAdd 185 184 + Store 55(dvec4v) 186 + 187: 39(float) Load 41(doublev) + 188: 39(float) ExtInst 1(GLSL.std.450) 10(Fract) 187 + 189: 39(float) Load 41(doublev) + 190: 39(float) FAdd 189 188 + Store 41(doublev) 190 + 191: 43(fvec2) Load 45(dvec2v) + 192: 43(fvec2) ExtInst 1(GLSL.std.450) 10(Fract) 191 + 193: 43(fvec2) Load 45(dvec2v) + 194: 43(fvec2) FAdd 193 192 + Store 45(dvec2v) 194 + 195: 48(fvec3) Load 50(dvec3v) + 196: 48(fvec3) ExtInst 1(GLSL.std.450) 10(Fract) 195 + 197: 48(fvec3) Load 50(dvec3v) + 198: 48(fvec3) FAdd 197 196 + Store 50(dvec3v) 198 + 199: 53(fvec4) Load 55(dvec4v) + 200: 53(fvec4) ExtInst 1(GLSL.std.450) 10(Fract) 199 + 201: 53(fvec4) Load 55(dvec4v) + 202: 53(fvec4) FAdd 201 200 + Store 55(dvec4v) 202 + 203: 39(float) Load 41(doublev) + 204: 39(float) Load 41(doublev) + 205: 39(float) FMod 203 204 + 206: 39(float) Load 41(doublev) + 207: 39(float) FAdd 206 205 + Store 41(doublev) 207 + 208: 43(fvec2) Load 45(dvec2v) + 209: 39(float) Load 41(doublev) + 210: 43(fvec2) CompositeConstruct 209 209 + 211: 43(fvec2) FMod 208 210 + 212: 43(fvec2) Load 45(dvec2v) + 213: 43(fvec2) FAdd 212 211 + Store 45(dvec2v) 213 + 214: 48(fvec3) Load 50(dvec3v) + 215: 39(float) Load 41(doublev) + 216: 48(fvec3) CompositeConstruct 215 215 215 + 217: 48(fvec3) FMod 214 216 + 218: 48(fvec3) Load 50(dvec3v) + 219: 48(fvec3) FAdd 218 217 + Store 50(dvec3v) 219 + 220: 53(fvec4) Load 55(dvec4v) + 221: 39(float) Load 41(doublev) + 222: 53(fvec4) CompositeConstruct 221 221 221 221 + 223: 53(fvec4) FMod 220 222 + 224: 53(fvec4) Load 55(dvec4v) + 225: 53(fvec4) FAdd 224 223 + Store 55(dvec4v) 225 + 226: 43(fvec2) Load 45(dvec2v) + 227: 43(fvec2) Load 45(dvec2v) + 228: 43(fvec2) FMod 226 227 + 229: 43(fvec2) Load 45(dvec2v) + 230: 43(fvec2) FAdd 229 228 + Store 45(dvec2v) 230 + 231: 48(fvec3) Load 50(dvec3v) + 232: 48(fvec3) Load 50(dvec3v) + 233: 48(fvec3) FMod 231 232 + 234: 48(fvec3) Load 50(dvec3v) + 235: 48(fvec3) FAdd 234 233 + Store 50(dvec3v) 235 + 236: 53(fvec4) Load 55(dvec4v) + 237: 53(fvec4) Load 55(dvec4v) + 238: 53(fvec4) FMod 236 237 + 239: 53(fvec4) Load 55(dvec4v) + 240: 53(fvec4) FAdd 239 238 + Store 55(dvec4v) 240 + 241: 39(float) Load 41(doublev) + 242: 39(float) ExtInst 1(GLSL.std.450) 35(Modf) 241 41(doublev) + 243: 39(float) Load 41(doublev) + 244: 39(float) FAdd 243 242 + Store 41(doublev) 244 + 245: 43(fvec2) Load 45(dvec2v) + 246: 43(fvec2) ExtInst 1(GLSL.std.450) 35(Modf) 245 45(dvec2v) + 247: 43(fvec2) Load 45(dvec2v) + 248: 43(fvec2) FAdd 247 246 + Store 45(dvec2v) 248 + 249: 48(fvec3) Load 50(dvec3v) + 250: 48(fvec3) ExtInst 1(GLSL.std.450) 35(Modf) 249 50(dvec3v) + 251: 48(fvec3) Load 50(dvec3v) + 252: 48(fvec3) FAdd 251 250 + Store 50(dvec3v) 252 + 253: 53(fvec4) Load 55(dvec4v) + 254: 53(fvec4) ExtInst 1(GLSL.std.450) 35(Modf) 253 55(dvec4v) + 255: 53(fvec4) Load 55(dvec4v) + 256: 53(fvec4) FAdd 255 254 + Store 55(dvec4v) 256 + 257: 39(float) Load 41(doublev) + 258: 39(float) Load 41(doublev) + 259: 39(float) ExtInst 1(GLSL.std.450) 37(FMin) 257 258 + 260: 39(float) Load 41(doublev) + 261: 39(float) FAdd 260 259 + Store 41(doublev) 261 + 262: 43(fvec2) Load 45(dvec2v) + 263: 39(float) Load 41(doublev) + 264: 43(fvec2) CompositeConstruct 263 263 + 265: 43(fvec2) ExtInst 1(GLSL.std.450) 37(FMin) 262 264 + 266: 43(fvec2) Load 45(dvec2v) + 267: 43(fvec2) FAdd 266 265 + Store 45(dvec2v) 267 + 268: 48(fvec3) Load 50(dvec3v) + 269: 39(float) Load 41(doublev) + 270: 48(fvec3) CompositeConstruct 269 269 269 + 271: 48(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 268 270 + 272: 48(fvec3) Load 50(dvec3v) + 273: 48(fvec3) FAdd 272 271 + Store 50(dvec3v) 273 + 274: 53(fvec4) Load 55(dvec4v) + 275: 39(float) Load 41(doublev) + 276: 53(fvec4) CompositeConstruct 275 275 275 275 + 277: 53(fvec4) ExtInst 1(GLSL.std.450) 37(FMin) 274 276 + 278: 53(fvec4) Load 55(dvec4v) + 279: 53(fvec4) FAdd 278 277 + Store 55(dvec4v) 279 + 280: 43(fvec2) Load 45(dvec2v) + 281: 43(fvec2) Load 45(dvec2v) + 282: 43(fvec2) ExtInst 1(GLSL.std.450) 37(FMin) 280 281 + 283: 43(fvec2) Load 45(dvec2v) + 284: 43(fvec2) FAdd 283 282 + Store 45(dvec2v) 284 + 285: 48(fvec3) Load 50(dvec3v) + 286: 48(fvec3) Load 50(dvec3v) + 287: 48(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 285 286 + 288: 48(fvec3) Load 50(dvec3v) + 289: 48(fvec3) FAdd 288 287 + Store 50(dvec3v) 289 + 290: 53(fvec4) Load 55(dvec4v) + 291: 53(fvec4) Load 55(dvec4v) + 292: 53(fvec4) ExtInst 1(GLSL.std.450) 37(FMin) 290 291 + 293: 53(fvec4) Load 55(dvec4v) + 294: 53(fvec4) FAdd 293 292 + Store 55(dvec4v) 294 + 295: 39(float) Load 41(doublev) + 296: 39(float) Load 41(doublev) + 297: 39(float) ExtInst 1(GLSL.std.450) 40(FMax) 295 296 + 298: 39(float) Load 41(doublev) + 299: 39(float) FAdd 298 297 + Store 41(doublev) 299 + 300: 43(fvec2) Load 45(dvec2v) + 301: 39(float) Load 41(doublev) + 302: 43(fvec2) CompositeConstruct 301 301 + 303: 43(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 300 302 + 304: 43(fvec2) Load 45(dvec2v) + 305: 43(fvec2) FAdd 304 303 + Store 45(dvec2v) 305 + 306: 48(fvec3) Load 50(dvec3v) + 307: 39(float) Load 41(doublev) + 308: 48(fvec3) CompositeConstruct 307 307 307 + 309: 48(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 306 308 + 310: 48(fvec3) Load 50(dvec3v) + 311: 48(fvec3) FAdd 310 309 + Store 50(dvec3v) 311 + 312: 53(fvec4) Load 55(dvec4v) + 313: 39(float) Load 41(doublev) + 314: 53(fvec4) CompositeConstruct 313 313 313 313 + 315: 53(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 312 314 + 316: 53(fvec4) Load 55(dvec4v) + 317: 53(fvec4) FAdd 316 315 + Store 55(dvec4v) 317 + 318: 43(fvec2) Load 45(dvec2v) + 319: 43(fvec2) Load 45(dvec2v) + 320: 43(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 318 319 + 321: 43(fvec2) Load 45(dvec2v) + 322: 43(fvec2) FAdd 321 320 + Store 45(dvec2v) 322 + 323: 48(fvec3) Load 50(dvec3v) + 324: 48(fvec3) Load 50(dvec3v) + 325: 48(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 323 324 + 326: 48(fvec3) Load 50(dvec3v) + 327: 48(fvec3) FAdd 326 325 + Store 50(dvec3v) 327 + 328: 53(fvec4) Load 55(dvec4v) + 329: 53(fvec4) Load 55(dvec4v) + 330: 53(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 328 329 + 331: 53(fvec4) Load 55(dvec4v) + 332: 53(fvec4) FAdd 331 330 + Store 55(dvec4v) 332 + 333: 39(float) Load 41(doublev) + 334: 39(float) Load 41(doublev) + 335: 39(float) Load 41(doublev) + 336: 39(float) ExtInst 1(GLSL.std.450) 43(FClamp) 333 334 335 + 337: 39(float) Load 41(doublev) + 338: 39(float) FAdd 337 336 + Store 41(doublev) 338 + 339: 43(fvec2) Load 45(dvec2v) + 340: 39(float) Load 41(doublev) + 341: 39(float) Load 41(doublev) + 342: 43(fvec2) CompositeConstruct 340 340 + 343: 43(fvec2) CompositeConstruct 341 341 + 344: 43(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 339 342 343 + 345: 43(fvec2) Load 45(dvec2v) + 346: 43(fvec2) FAdd 345 344 + Store 45(dvec2v) 346 + 347: 48(fvec3) Load 50(dvec3v) + 348: 39(float) Load 41(doublev) + 349: 39(float) Load 41(doublev) + 350: 48(fvec3) CompositeConstruct 348 348 348 + 351: 48(fvec3) CompositeConstruct 349 349 349 + 352: 48(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 347 350 351 + 353: 48(fvec3) Load 50(dvec3v) + 354: 48(fvec3) FAdd 353 352 + Store 50(dvec3v) 354 + 355: 53(fvec4) Load 55(dvec4v) + 356: 39(float) Load 41(doublev) + 357: 39(float) Load 41(doublev) + 358: 53(fvec4) CompositeConstruct 356 356 356 356 + 359: 53(fvec4) CompositeConstruct 357 357 357 357 + 360: 53(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 355 358 359 + 361: 53(fvec4) Load 55(dvec4v) + 362: 53(fvec4) FAdd 361 360 + Store 55(dvec4v) 362 + 363: 43(fvec2) Load 45(dvec2v) + 364: 43(fvec2) Load 45(dvec2v) + 365: 43(fvec2) Load 45(dvec2v) + 366: 43(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 363 364 365 + 367: 43(fvec2) Load 45(dvec2v) + 368: 43(fvec2) FAdd 367 366 + Store 45(dvec2v) 368 + 369: 48(fvec3) Load 50(dvec3v) + 370: 48(fvec3) Load 50(dvec3v) + 371: 48(fvec3) Load 50(dvec3v) + 372: 48(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 369 370 371 + 373: 48(fvec3) Load 50(dvec3v) + 374: 48(fvec3) FAdd 373 372 + Store 50(dvec3v) 374 + 375: 53(fvec4) Load 55(dvec4v) + 376: 53(fvec4) Load 55(dvec4v) + 377: 53(fvec4) Load 55(dvec4v) + 378: 53(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 375 376 377 + 379: 53(fvec4) Load 55(dvec4v) + 380: 53(fvec4) FAdd 379 378 + Store 55(dvec4v) 380 + 381: 39(float) Load 41(doublev) + 382: 39(float) Load 41(doublev) + 383: 39(float) Load 41(doublev) + 384: 39(float) ExtInst 1(GLSL.std.450) 46(FMix) 381 382 383 + 385: 39(float) Load 41(doublev) + 386: 39(float) FAdd 385 384 + Store 41(doublev) 386 + 387: 43(fvec2) Load 45(dvec2v) + 388: 43(fvec2) Load 45(dvec2v) + 389: 39(float) Load 41(doublev) + 390: 43(fvec2) CompositeConstruct 389 389 + 391: 43(fvec2) ExtInst 1(GLSL.std.450) 46(FMix) 387 388 390 + 392: 43(fvec2) Load 45(dvec2v) + 393: 43(fvec2) FAdd 392 391 + Store 45(dvec2v) 393 + 394: 48(fvec3) Load 50(dvec3v) + 395: 48(fvec3) Load 50(dvec3v) + 396: 39(float) Load 41(doublev) + 397: 48(fvec3) CompositeConstruct 396 396 396 + 398: 48(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 394 395 397 + 399: 48(fvec3) Load 50(dvec3v) + 400: 48(fvec3) FAdd 399 398 + Store 50(dvec3v) 400 + 401: 53(fvec4) Load 55(dvec4v) + 402: 53(fvec4) Load 55(dvec4v) + 403: 39(float) Load 41(doublev) + 404: 53(fvec4) CompositeConstruct 403 403 403 403 + 405: 53(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 401 402 404 + 406: 53(fvec4) Load 55(dvec4v) + 407: 53(fvec4) FAdd 406 405 + Store 55(dvec4v) 407 + 408: 43(fvec2) Load 45(dvec2v) + 409: 43(fvec2) Load 45(dvec2v) + 410: 43(fvec2) Load 45(dvec2v) + 411: 43(fvec2) ExtInst 1(GLSL.std.450) 46(FMix) 408 409 410 + 412: 43(fvec2) Load 45(dvec2v) + 413: 43(fvec2) FAdd 412 411 + Store 45(dvec2v) 413 + 414: 48(fvec3) Load 50(dvec3v) + 415: 48(fvec3) Load 50(dvec3v) + 416: 48(fvec3) Load 50(dvec3v) + 417: 48(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 414 415 416 + 418: 48(fvec3) Load 50(dvec3v) + 419: 48(fvec3) FAdd 418 417 + Store 50(dvec3v) 419 + 420: 53(fvec4) Load 55(dvec4v) + 421: 53(fvec4) Load 55(dvec4v) + 422: 53(fvec4) Load 55(dvec4v) + 423: 53(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 420 421 422 + 424: 53(fvec4) Load 55(dvec4v) + 425: 53(fvec4) FAdd 424 423 + Store 55(dvec4v) 425 + 426: 39(float) Load 41(doublev) + 427: 39(float) Load 41(doublev) + 431: 428(bool) Load 430(boolv) + 432: 39(float) Select 431 427 426 + 433: 39(float) Load 41(doublev) + 434: 39(float) FAdd 433 432 + Store 41(doublev) 434 + 435: 43(fvec2) Load 45(dvec2v) + 436: 43(fvec2) Load 45(dvec2v) + 440: 437(bvec2) Load 439(bvec2v) + 441: 43(fvec2) Select 440 436 435 + 442: 43(fvec2) Load 45(dvec2v) + 443: 43(fvec2) FAdd 442 441 + Store 45(dvec2v) 443 + 444: 48(fvec3) Load 50(dvec3v) + 445: 48(fvec3) Load 50(dvec3v) + 449: 446(bvec3) Load 448(bvec3v) + 450: 48(fvec3) Select 449 445 444 + 451: 48(fvec3) Load 50(dvec3v) + 452: 48(fvec3) FAdd 451 450 + Store 50(dvec3v) 452 + 453: 53(fvec4) Load 55(dvec4v) + 454: 53(fvec4) Load 55(dvec4v) + 458: 455(bvec4) Load 457(bvec4v) + 459: 53(fvec4) Select 458 454 453 + 460: 53(fvec4) Load 55(dvec4v) + 461: 53(fvec4) FAdd 460 459 + Store 55(dvec4v) 461 + 462: 39(float) Load 41(doublev) + 463: 39(float) Load 41(doublev) + 464: 39(float) ExtInst 1(GLSL.std.450) 48(Step) 462 463 + 465: 39(float) Load 41(doublev) + 466: 39(float) FAdd 465 464 + Store 41(doublev) 466 + 467: 43(fvec2) Load 45(dvec2v) + 468: 43(fvec2) Load 45(dvec2v) + 469: 43(fvec2) ExtInst 1(GLSL.std.450) 48(Step) 467 468 + 470: 43(fvec2) Load 45(dvec2v) + 471: 43(fvec2) FAdd 470 469 + Store 45(dvec2v) 471 + 472: 48(fvec3) Load 50(dvec3v) + 473: 48(fvec3) Load 50(dvec3v) + 474: 48(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 472 473 + 475: 48(fvec3) Load 50(dvec3v) + 476: 48(fvec3) FAdd 475 474 + Store 50(dvec3v) 476 + 477: 53(fvec4) Load 55(dvec4v) + 478: 53(fvec4) Load 55(dvec4v) + 479: 53(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 477 478 + 480: 53(fvec4) Load 55(dvec4v) + 481: 53(fvec4) FAdd 480 479 + Store 55(dvec4v) 481 + 482: 39(float) Load 41(doublev) + 483: 43(fvec2) Load 45(dvec2v) + 484: 43(fvec2) CompositeConstruct 482 482 + 485: 43(fvec2) ExtInst 1(GLSL.std.450) 48(Step) 484 483 + 486: 43(fvec2) Load 45(dvec2v) + 487: 43(fvec2) FAdd 486 485 + Store 45(dvec2v) 487 + 488: 39(float) Load 41(doublev) + 489: 48(fvec3) Load 50(dvec3v) + 490: 48(fvec3) CompositeConstruct 488 488 488 + 491: 48(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 490 489 + 492: 48(fvec3) Load 50(dvec3v) + 493: 48(fvec3) FAdd 492 491 + Store 50(dvec3v) 493 + 494: 39(float) Load 41(doublev) + 495: 53(fvec4) Load 55(dvec4v) + 496: 53(fvec4) CompositeConstruct 494 494 494 494 + 497: 53(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 496 495 + 498: 53(fvec4) Load 55(dvec4v) + 499: 53(fvec4) FAdd 498 497 + Store 55(dvec4v) 499 + 500: 39(float) Load 41(doublev) + 501: 39(float) Load 41(doublev) + 502: 39(float) Load 41(doublev) + 503: 39(float) ExtInst 1(GLSL.std.450) 49(SmoothStep) 500 501 502 + 504: 39(float) Load 41(doublev) + 505: 39(float) FAdd 504 503 + Store 41(doublev) 505 + 506: 43(fvec2) Load 45(dvec2v) + 507: 43(fvec2) Load 45(dvec2v) + 508: 43(fvec2) Load 45(dvec2v) + 509: 43(fvec2) ExtInst 1(GLSL.std.450) 49(SmoothStep) 506 507 508 + 510: 43(fvec2) Load 45(dvec2v) + 511: 43(fvec2) FAdd 510 509 + Store 45(dvec2v) 511 + 512: 48(fvec3) Load 50(dvec3v) + 513: 48(fvec3) Load 50(dvec3v) + 514: 48(fvec3) Load 50(dvec3v) + 515: 48(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 512 513 514 + 516: 48(fvec3) Load 50(dvec3v) + 517: 48(fvec3) FAdd 516 515 + Store 50(dvec3v) 517 + 518: 53(fvec4) Load 55(dvec4v) + 519: 53(fvec4) Load 55(dvec4v) + 520: 53(fvec4) Load 55(dvec4v) + 521: 53(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 518 519 520 + 522: 53(fvec4) Load 55(dvec4v) + 523: 53(fvec4) FAdd 522 521 + Store 55(dvec4v) 523 + 524: 39(float) Load 41(doublev) + 525: 39(float) Load 41(doublev) + 526: 43(fvec2) Load 45(dvec2v) + 527: 43(fvec2) CompositeConstruct 524 524 + 528: 43(fvec2) CompositeConstruct 525 525 + 529: 43(fvec2) ExtInst 1(GLSL.std.450) 49(SmoothStep) 527 528 526 + 530: 43(fvec2) Load 45(dvec2v) + 531: 43(fvec2) FAdd 530 529 + Store 45(dvec2v) 531 + 532: 39(float) Load 41(doublev) + 533: 39(float) Load 41(doublev) + 534: 48(fvec3) Load 50(dvec3v) + 535: 48(fvec3) CompositeConstruct 532 532 532 + 536: 48(fvec3) CompositeConstruct 533 533 533 + 537: 48(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 535 536 534 + 538: 48(fvec3) Load 50(dvec3v) + 539: 48(fvec3) FAdd 538 537 + Store 50(dvec3v) 539 + 540: 39(float) Load 41(doublev) + 541: 39(float) Load 41(doublev) + 542: 53(fvec4) Load 55(dvec4v) + 543: 53(fvec4) CompositeConstruct 540 540 540 540 + 544: 53(fvec4) CompositeConstruct 541 541 541 541 + 545: 53(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 543 544 542 + 546: 53(fvec4) Load 55(dvec4v) + 547: 53(fvec4) FAdd 546 545 + Store 55(dvec4v) 547 + 548: 39(float) Load 41(doublev) + 549: 428(bool) IsNan 548 + Store 430(boolv) 549 + 550: 43(fvec2) Load 45(dvec2v) + 551: 437(bvec2) IsNan 550 + Store 439(bvec2v) 551 + 552: 48(fvec3) Load 50(dvec3v) + 553: 446(bvec3) IsNan 552 + Store 448(bvec3v) 553 + 554: 53(fvec4) Load 55(dvec4v) + 555: 455(bvec4) IsNan 554 + Store 457(bvec4v) 555 + 557: 428(bool) Load 430(boolv) + SelectionMerge 559 None + BranchConditional 557 558 562 + 558: Label + 560: 39(float) Load 41(doublev) + 561: 428(bool) IsInf 560 + Store 556 561 + Branch 559 + 562: Label + Store 556 563 + Branch 559 + 559: Label + 564: 428(bool) Load 556 + Store 430(boolv) 564 + 566: 428(bool) Load 430(boolv) + SelectionMerge 568 None + BranchConditional 566 567 571 + 567: Label + 569: 43(fvec2) Load 45(dvec2v) + 570: 437(bvec2) IsInf 569 + Store 565 570 + Branch 568 + 571: Label + Store 565 572 + Branch 568 + 568: Label + 573: 437(bvec2) Load 565 + Store 439(bvec2v) 573 + 575: 428(bool) Load 430(boolv) + SelectionMerge 577 None + BranchConditional 575 576 580 + 576: Label + 578: 48(fvec3) Load 50(dvec3v) + 579: 446(bvec3) IsInf 578 + Store 574 579 + Branch 577 + 580: Label + Store 574 581 + Branch 577 + 577: Label + 582: 446(bvec3) Load 574 + Store 448(bvec3v) 582 + 584: 428(bool) Load 430(boolv) + SelectionMerge 586 None + BranchConditional 584 585 589 + 585: Label + 587: 53(fvec4) Load 55(dvec4v) + 588: 455(bvec4) IsInf 587 + Store 583 588 + Branch 586 + 589: Label + Store 583 590 + Branch 586 + 586: Label + 591: 455(bvec4) Load 583 + Store 457(bvec4v) 591 + 592: 39(float) Load 41(doublev) + 593: 39(float) ExtInst 1(GLSL.std.450) 66(Length) 592 + 594: 39(float) Load 41(doublev) + 595: 39(float) FAdd 594 593 + Store 41(doublev) 595 + 596: 43(fvec2) Load 45(dvec2v) + 597: 39(float) ExtInst 1(GLSL.std.450) 66(Length) 596 + 598: 39(float) Load 41(doublev) + 599: 39(float) FAdd 598 597 + Store 41(doublev) 599 + 600: 48(fvec3) Load 50(dvec3v) + 601: 39(float) ExtInst 1(GLSL.std.450) 66(Length) 600 + 602: 39(float) Load 41(doublev) + 603: 39(float) FAdd 602 601 + Store 41(doublev) 603 + 604: 53(fvec4) Load 55(dvec4v) + 605: 39(float) ExtInst 1(GLSL.std.450) 66(Length) 604 + 606: 39(float) Load 41(doublev) + 607: 39(float) FAdd 606 605 + Store 41(doublev) 607 + 608: 39(float) Load 41(doublev) + 609: 39(float) Load 41(doublev) + 610: 39(float) ExtInst 1(GLSL.std.450) 67(Distance) 608 609 + 611: 39(float) Load 41(doublev) + 612: 39(float) FAdd 611 610 + Store 41(doublev) 612 + 613: 43(fvec2) Load 45(dvec2v) + 614: 43(fvec2) Load 45(dvec2v) + 615: 39(float) ExtInst 1(GLSL.std.450) 67(Distance) 613 614 + 616: 39(float) Load 41(doublev) + 617: 39(float) FAdd 616 615 + Store 41(doublev) 617 + 618: 48(fvec3) Load 50(dvec3v) + 619: 48(fvec3) Load 50(dvec3v) + 620: 39(float) ExtInst 1(GLSL.std.450) 67(Distance) 618 619 + 621: 39(float) Load 41(doublev) + 622: 39(float) FAdd 621 620 + Store 41(doublev) 622 + 623: 53(fvec4) Load 55(dvec4v) + 624: 53(fvec4) Load 55(dvec4v) + 625: 39(float) ExtInst 1(GLSL.std.450) 67(Distance) 623 624 + 626: 39(float) Load 41(doublev) + 627: 39(float) FAdd 626 625 + Store 41(doublev) 627 + 628: 39(float) Load 41(doublev) + 629: 39(float) Load 41(doublev) + 630: 39(float) FMul 628 629 + 631: 39(float) Load 41(doublev) + 632: 39(float) FAdd 631 630 + Store 41(doublev) 632 + 633: 43(fvec2) Load 45(dvec2v) + 634: 43(fvec2) Load 45(dvec2v) + 635: 39(float) Dot 633 634 + 636: 39(float) Load 41(doublev) + 637: 39(float) FAdd 636 635 + Store 41(doublev) 637 + 638: 48(fvec3) Load 50(dvec3v) + 639: 48(fvec3) Load 50(dvec3v) + 640: 39(float) Dot 638 639 + 641: 39(float) Load 41(doublev) + 642: 39(float) FAdd 641 640 + Store 41(doublev) 642 + 643: 53(fvec4) Load 55(dvec4v) + 644: 53(fvec4) Load 55(dvec4v) + 645: 39(float) Dot 643 644 + 646: 39(float) Load 41(doublev) + 647: 39(float) FAdd 646 645 + Store 41(doublev) 647 + 648: 48(fvec3) Load 50(dvec3v) + 649: 48(fvec3) Load 50(dvec3v) + 650: 48(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 648 649 + 651: 48(fvec3) Load 50(dvec3v) + 652: 48(fvec3) FAdd 651 650 + Store 50(dvec3v) 652 + 653: 39(float) Load 41(doublev) + 654: 39(float) ExtInst 1(GLSL.std.450) 69(Normalize) 653 + 655: 39(float) Load 41(doublev) + 656: 39(float) FAdd 655 654 + Store 41(doublev) 656 + 657: 43(fvec2) Load 45(dvec2v) + 658: 43(fvec2) ExtInst 1(GLSL.std.450) 69(Normalize) 657 + 659: 43(fvec2) Load 45(dvec2v) + 660: 43(fvec2) FAdd 659 658 + Store 45(dvec2v) 660 + 661: 48(fvec3) Load 50(dvec3v) + 662: 48(fvec3) ExtInst 1(GLSL.std.450) 69(Normalize) 661 + 663: 48(fvec3) Load 50(dvec3v) + 664: 48(fvec3) FAdd 663 662 + Store 50(dvec3v) 664 + 665: 53(fvec4) Load 55(dvec4v) + 666: 53(fvec4) ExtInst 1(GLSL.std.450) 69(Normalize) 665 + 667: 53(fvec4) Load 55(dvec4v) + 668: 53(fvec4) FAdd 667 666 + Store 55(dvec4v) 668 + 669: 39(float) Load 41(doublev) + 670: 39(float) Load 41(doublev) + 671: 39(float) Load 41(doublev) + 672: 39(float) ExtInst 1(GLSL.std.450) 70(FaceForward) 669 670 671 + 673: 39(float) Load 41(doublev) + 674: 39(float) FAdd 673 672 + Store 41(doublev) 674 + 675: 43(fvec2) Load 45(dvec2v) + 676: 43(fvec2) Load 45(dvec2v) + 677: 43(fvec2) Load 45(dvec2v) + 678: 43(fvec2) ExtInst 1(GLSL.std.450) 70(FaceForward) 675 676 677 + 679: 43(fvec2) Load 45(dvec2v) + 680: 43(fvec2) FAdd 679 678 + Store 45(dvec2v) 680 + 681: 48(fvec3) Load 50(dvec3v) + 682: 48(fvec3) Load 50(dvec3v) + 683: 48(fvec3) Load 50(dvec3v) + 684: 48(fvec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 681 682 683 + 685: 48(fvec3) Load 50(dvec3v) + 686: 48(fvec3) FAdd 685 684 + Store 50(dvec3v) 686 + 687: 53(fvec4) Load 55(dvec4v) + 688: 53(fvec4) Load 55(dvec4v) + 689: 53(fvec4) Load 55(dvec4v) + 690: 53(fvec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 687 688 689 + 691: 53(fvec4) Load 55(dvec4v) + 692: 53(fvec4) FAdd 691 690 + Store 55(dvec4v) 692 + 693: 39(float) Load 41(doublev) + 694: 39(float) Load 41(doublev) + 695: 39(float) ExtInst 1(GLSL.std.450) 71(Reflect) 693 694 + 696: 39(float) Load 41(doublev) + 697: 39(float) FAdd 696 695 + Store 41(doublev) 697 + 698: 43(fvec2) Load 45(dvec2v) + 699: 43(fvec2) Load 45(dvec2v) + 700: 43(fvec2) ExtInst 1(GLSL.std.450) 71(Reflect) 698 699 + 701: 43(fvec2) Load 45(dvec2v) + 702: 43(fvec2) FAdd 701 700 + Store 45(dvec2v) 702 + 703: 48(fvec3) Load 50(dvec3v) + 704: 48(fvec3) Load 50(dvec3v) + 705: 48(fvec3) ExtInst 1(GLSL.std.450) 71(Reflect) 703 704 + 706: 48(fvec3) Load 50(dvec3v) + 707: 48(fvec3) FAdd 706 705 + Store 50(dvec3v) 707 + 708: 53(fvec4) Load 55(dvec4v) + 709: 53(fvec4) Load 55(dvec4v) + 710: 53(fvec4) ExtInst 1(GLSL.std.450) 71(Reflect) 708 709 + 711: 53(fvec4) Load 55(dvec4v) + 712: 53(fvec4) FAdd 711 710 + Store 55(dvec4v) 712 + 713: 39(float) Load 41(doublev) + 714: 39(float) Load 41(doublev) + 715: 39(float) Load 41(doublev) + 716: 39(float) ExtInst 1(GLSL.std.450) 72(Refract) 713 714 715 + 717: 39(float) Load 41(doublev) + 718: 39(float) FAdd 717 716 + Store 41(doublev) 718 + 719: 43(fvec2) Load 45(dvec2v) + 720: 43(fvec2) Load 45(dvec2v) + 721: 39(float) Load 41(doublev) + 722: 43(fvec2) ExtInst 1(GLSL.std.450) 72(Refract) 719 720 721 + 723: 43(fvec2) Load 45(dvec2v) + 724: 43(fvec2) FAdd 723 722 + Store 45(dvec2v) 724 + 725: 48(fvec3) Load 50(dvec3v) + 726: 48(fvec3) Load 50(dvec3v) + 727: 39(float) Load 41(doublev) + 728: 48(fvec3) ExtInst 1(GLSL.std.450) 72(Refract) 725 726 727 + 729: 48(fvec3) Load 50(dvec3v) + 730: 48(fvec3) FAdd 729 728 + Store 50(dvec3v) 730 + 731: 53(fvec4) Load 55(dvec4v) + 732: 53(fvec4) Load 55(dvec4v) + 733: 39(float) Load 41(doublev) + 734: 53(fvec4) ExtInst 1(GLSL.std.450) 72(Refract) 731 732 733 + 735: 53(fvec4) Load 55(dvec4v) + 736: 53(fvec4) FAdd 735 734 + Store 55(dvec4v) 736 + 740: 43(fvec2) Load 45(dvec2v) + 741: 43(fvec2) Load 45(dvec2v) + 742: 737 OuterProduct 740 741 + Store 739(dmat2v) 742 + 746: 48(fvec3) Load 50(dvec3v) + 747: 48(fvec3) Load 50(dvec3v) + 748: 743 OuterProduct 746 747 + Store 745(dmat3v) 748 + 752: 53(fvec4) Load 55(dvec4v) + 753: 53(fvec4) Load 55(dvec4v) + 754: 749 OuterProduct 752 753 + Store 751(dmat4v) 754 + 758: 48(fvec3) Load 50(dvec3v) + 759: 43(fvec2) Load 45(dvec2v) + 760: 755 OuterProduct 758 759 + Store 757(dmat2x3v) 760 + 764: 43(fvec2) Load 45(dvec2v) + 765: 48(fvec3) Load 50(dvec3v) + 766: 761 OuterProduct 764 765 + Store 763(dmat3x2v) 766 + 770: 53(fvec4) Load 55(dvec4v) + 771: 43(fvec2) Load 45(dvec2v) + 772: 767 OuterProduct 770 771 + Store 769(dmat2x4v) 772 + 776: 43(fvec2) Load 45(dvec2v) + 777: 53(fvec4) Load 55(dvec4v) + 778: 773 OuterProduct 776 777 + Store 775(dmat4x2v) 778 + 782: 53(fvec4) Load 55(dvec4v) + 783: 48(fvec3) Load 50(dvec3v) + 784: 779 OuterProduct 782 783 + Store 781(dmat3x4v) 784 + 788: 48(fvec3) Load 50(dvec3v) + 789: 53(fvec4) Load 55(dvec4v) + 790: 785 OuterProduct 788 789 + Store 787(dmat4x3v) 790 + 791: 737 Load 739(dmat2v) + 792: 737 Load 739(dmat2v) + 793: 43(fvec2) CompositeExtract 791 0 + 794: 43(fvec2) CompositeExtract 792 0 + 795: 43(fvec2) FMul 793 794 + 796: 43(fvec2) CompositeExtract 791 1 + 797: 43(fvec2) CompositeExtract 792 1 + 798: 43(fvec2) FMul 796 797 + 799: 737 CompositeConstruct 795 798 + 800: 737 Load 739(dmat2v) + 801: 737 MatrixTimesMatrix 800 799 + Store 739(dmat2v) 801 + 802: 743 Load 745(dmat3v) + 803: 743 Load 745(dmat3v) + 804: 48(fvec3) CompositeExtract 802 0 + 805: 48(fvec3) CompositeExtract 803 0 + 806: 48(fvec3) FMul 804 805 + 807: 48(fvec3) CompositeExtract 802 1 + 808: 48(fvec3) CompositeExtract 803 1 + 809: 48(fvec3) FMul 807 808 + 810: 48(fvec3) CompositeExtract 802 2 + 811: 48(fvec3) CompositeExtract 803 2 + 812: 48(fvec3) FMul 810 811 + 813: 743 CompositeConstruct 806 809 812 + 814: 743 Load 745(dmat3v) + 815: 743 MatrixTimesMatrix 814 813 + Store 745(dmat3v) 815 + 816: 749 Load 751(dmat4v) + 817: 749 Load 751(dmat4v) + 818: 53(fvec4) CompositeExtract 816 0 + 819: 53(fvec4) CompositeExtract 817 0 + 820: 53(fvec4) FMul 818 819 + 821: 53(fvec4) CompositeExtract 816 1 + 822: 53(fvec4) CompositeExtract 817 1 + 823: 53(fvec4) FMul 821 822 + 824: 53(fvec4) CompositeExtract 816 2 + 825: 53(fvec4) CompositeExtract 817 2 + 826: 53(fvec4) FMul 824 825 + 827: 53(fvec4) CompositeExtract 816 3 + 828: 53(fvec4) CompositeExtract 817 3 + 829: 53(fvec4) FMul 827 828 + 830: 749 CompositeConstruct 820 823 826 829 + 831: 749 Load 751(dmat4v) + 832: 749 MatrixTimesMatrix 831 830 + Store 751(dmat4v) 832 + 833: 755 Load 757(dmat2x3v) + 834: 755 Load 757(dmat2x3v) + 835: 48(fvec3) CompositeExtract 833 0 + 836: 48(fvec3) CompositeExtract 834 0 + 837: 48(fvec3) FMul 835 836 + 838: 48(fvec3) CompositeExtract 833 1 + 839: 48(fvec3) CompositeExtract 834 1 + 840: 48(fvec3) FMul 838 839 + 841: 755 CompositeConstruct 837 840 + Store 757(dmat2x3v) 841 + 842: 767 Load 769(dmat2x4v) + 843: 767 Load 769(dmat2x4v) + 844: 53(fvec4) CompositeExtract 842 0 + 845: 53(fvec4) CompositeExtract 843 0 + 846: 53(fvec4) FMul 844 845 + 847: 53(fvec4) CompositeExtract 842 1 + 848: 53(fvec4) CompositeExtract 843 1 + 849: 53(fvec4) FMul 847 848 + 850: 767 CompositeConstruct 846 849 + Store 769(dmat2x4v) 850 + 851: 761 Load 763(dmat3x2v) + 852: 761 Load 763(dmat3x2v) + 853: 43(fvec2) CompositeExtract 851 0 + 854: 43(fvec2) CompositeExtract 852 0 + 855: 43(fvec2) FMul 853 854 + 856: 43(fvec2) CompositeExtract 851 1 + 857: 43(fvec2) CompositeExtract 852 1 + 858: 43(fvec2) FMul 856 857 + 859: 43(fvec2) CompositeExtract 851 2 + 860: 43(fvec2) CompositeExtract 852 2 + 861: 43(fvec2) FMul 859 860 + 862: 761 CompositeConstruct 855 858 861 + Store 763(dmat3x2v) 862 + 863: 779 Load 781(dmat3x4v) + 864: 779 Load 781(dmat3x4v) + 865: 53(fvec4) CompositeExtract 863 0 + 866: 53(fvec4) CompositeExtract 864 0 + 867: 53(fvec4) FMul 865 866 + 868: 53(fvec4) CompositeExtract 863 1 + 869: 53(fvec4) CompositeExtract 864 1 + 870: 53(fvec4) FMul 868 869 + 871: 53(fvec4) CompositeExtract 863 2 + 872: 53(fvec4) CompositeExtract 864 2 + 873: 53(fvec4) FMul 871 872 + 874: 779 CompositeConstruct 867 870 873 + Store 781(dmat3x4v) 874 + 875: 773 Load 775(dmat4x2v) + 876: 773 Load 775(dmat4x2v) + 877: 43(fvec2) CompositeExtract 875 0 + 878: 43(fvec2) CompositeExtract 876 0 + 879: 43(fvec2) FMul 877 878 + 880: 43(fvec2) CompositeExtract 875 1 + 881: 43(fvec2) CompositeExtract 876 1 + 882: 43(fvec2) FMul 880 881 + 883: 43(fvec2) CompositeExtract 875 2 + 884: 43(fvec2) CompositeExtract 876 2 + 885: 43(fvec2) FMul 883 884 + 886: 43(fvec2) CompositeExtract 875 3 + 887: 43(fvec2) CompositeExtract 876 3 + 888: 43(fvec2) FMul 886 887 + 889: 773 CompositeConstruct 879 882 885 888 + Store 775(dmat4x2v) 889 + 890: 785 Load 787(dmat4x3v) + 891: 785 Load 787(dmat4x3v) + 892: 48(fvec3) CompositeExtract 890 0 + 893: 48(fvec3) CompositeExtract 891 0 + 894: 48(fvec3) FMul 892 893 + 895: 48(fvec3) CompositeExtract 890 1 + 896: 48(fvec3) CompositeExtract 891 1 + 897: 48(fvec3) FMul 895 896 + 898: 48(fvec3) CompositeExtract 890 2 + 899: 48(fvec3) CompositeExtract 891 2 + 900: 48(fvec3) FMul 898 899 + 901: 48(fvec3) CompositeExtract 890 3 + 902: 48(fvec3) CompositeExtract 891 3 + 903: 48(fvec3) FMul 901 902 + 904: 785 CompositeConstruct 894 897 900 903 + Store 787(dmat4x3v) 904 + 905: 737 Load 739(dmat2v) + 906: 737 Transpose 905 + 907: 737 Load 739(dmat2v) + 908: 737 MatrixTimesMatrix 907 906 + Store 739(dmat2v) 908 + 909: 743 Load 745(dmat3v) + 910: 743 Transpose 909 + 911: 743 Load 745(dmat3v) + 912: 743 MatrixTimesMatrix 911 910 + Store 745(dmat3v) 912 + 913: 749 Load 751(dmat4v) + 914: 749 Transpose 913 + 915: 749 Load 751(dmat4v) + 916: 749 MatrixTimesMatrix 915 914 + Store 751(dmat4v) 916 + 917: 761 Load 763(dmat3x2v) + 918: 755 Transpose 917 + Store 757(dmat2x3v) 918 + 919: 755 Load 757(dmat2x3v) + 920: 761 Transpose 919 + Store 763(dmat3x2v) 920 + 921: 773 Load 775(dmat4x2v) + 922: 767 Transpose 921 + Store 769(dmat2x4v) 922 + 923: 767 Load 769(dmat2x4v) + 924: 773 Transpose 923 + Store 775(dmat4x2v) 924 + 925: 785 Load 787(dmat4x3v) + 926: 779 Transpose 925 + Store 781(dmat3x4v) 926 + 927: 779 Load 781(dmat3x4v) + 928: 785 Transpose 927 + Store 787(dmat4x3v) 928 + 929: 737 Load 739(dmat2v) + 930: 39(float) ExtInst 1(GLSL.std.450) 33(Determinant) 929 + 931: 39(float) Load 41(doublev) + 932: 39(float) FAdd 931 930 + Store 41(doublev) 932 + 933: 743 Load 745(dmat3v) + 934: 39(float) ExtInst 1(GLSL.std.450) 33(Determinant) 933 + 935: 39(float) Load 41(doublev) + 936: 39(float) FAdd 935 934 + Store 41(doublev) 936 + 937: 749 Load 751(dmat4v) + 938: 39(float) ExtInst 1(GLSL.std.450) 33(Determinant) 937 + 939: 39(float) Load 41(doublev) + 940: 39(float) FAdd 939 938 + Store 41(doublev) 940 + 941: 737 Load 739(dmat2v) + 942: 737 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 941 + 943: 737 Load 739(dmat2v) + 944: 737 MatrixTimesMatrix 943 942 + Store 739(dmat2v) 944 + 945: 743 Load 745(dmat3v) + 946: 743 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 945 + 947: 743 Load 745(dmat3v) + 948: 743 MatrixTimesMatrix 947 946 + Store 745(dmat3v) 948 + 949: 749 Load 751(dmat4v) + 950: 749 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 949 + 951: 749 Load 751(dmat4v) + 952: 749 MatrixTimesMatrix 951 950 + Store 751(dmat4v) 952 + 953: 39(float) Load 41(doublev) + 955: 40(ptr) AccessChain 45(dvec2v) 954 + 956: 39(float) Load 955 + 957: 39(float) FAdd 953 956 + 959: 40(ptr) AccessChain 50(dvec3v) 958 + 960: 39(float) Load 959 + 961: 39(float) FAdd 957 960 + 963: 40(ptr) AccessChain 55(dvec4v) 962 + 964: 39(float) Load 963 + 965: 39(float) FAdd 961 964 + 967: 40(ptr) AccessChain 739(dmat2v) 966 954 + 968: 39(float) Load 967 + 969: 39(float) FAdd 965 968 + 971: 40(ptr) AccessChain 745(dmat3v) 970 958 + 972: 39(float) Load 971 + 973: 39(float) FAdd 969 972 + 974: 40(ptr) AccessChain 751(dmat4v) 25 962 + 975: 39(float) Load 974 + 976: 39(float) FAdd 973 975 + 977: 40(ptr) AccessChain 757(dmat2x3v) 966 954 + 978: 39(float) Load 977 + 979: 39(float) FAdd 976 978 + 980: 40(ptr) AccessChain 763(dmat3x2v) 966 954 + 981: 39(float) Load 980 + 982: 39(float) FAdd 979 981 + 983: 40(ptr) AccessChain 781(dmat3x4v) 970 958 + 984: 39(float) Load 983 + 985: 39(float) FAdd 982 984 + 986: 40(ptr) AccessChain 787(dmat4x3v) 970 958 + 987: 39(float) Load 986 + 988: 39(float) FAdd 985 987 + 989: 40(ptr) AccessChain 769(dmat2x4v) 966 954 + 990: 39(float) Load 989 + 991: 39(float) FAdd 988 990 + 992: 40(ptr) AccessChain 775(dmat4x2v) 966 954 + 993: 39(float) Load 992 + 994: 39(float) FAdd 991 993 + 995: 428(bool) Load 430(boolv) + 997: 10(float) Select 995 996 21 + 998: 39(float) FConvert 997 + 999: 39(float) FAdd 994 998 + 1000: 437(bvec2) Load 439(bvec2v) + 1001: 428(bool) CompositeExtract 1000 0 + 1002: 10(float) Select 1001 996 21 + 1003: 39(float) FConvert 1002 + 1004: 39(float) FAdd 999 1003 + 1005: 446(bvec3) Load 448(bvec3v) + 1006: 428(bool) CompositeExtract 1005 0 + 1007: 10(float) Select 1006 996 21 + 1008: 39(float) FConvert 1007 + 1009: 39(float) FAdd 1004 1008 + 1010: 455(bvec4) Load 457(bvec4v) + 1011: 428(bool) CompositeExtract 1010 0 + 1012: 10(float) Select 1011 996 21 + 1013: 39(float) FConvert 1012 + 1014: 39(float) FAdd 1009 1013 + 1015: 10(float) FConvert 1014 + 1016: 11(fvec4) Load 13(outp) + 1017: 11(fvec4) VectorTimesScalar 1016 1015 + Store 13(outp) 1017 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.400.tesc.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.400.tesc.out new file mode 100644 index 0000000..68b142e --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.400.tesc.out @@ -0,0 +1,173 @@ +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 +// Id's are bound by 93 + + Capability Tessellation + Capability TessellationPointSize + Capability ClipDistance + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint TessellationControl 4 "main" 24 41 44 47 54 68 73 79 83 84 87 88 91 92 + ExecutionMode 4 OutputVertices 4 + Source GLSL 400 + SourceExtension "GL_ARB_separate_shader_objects" + Name 4 "main" + Name 12 "a" + Name 17 "p" + Name 20 "gl_PerVertex" + MemberName 20(gl_PerVertex) 0 "gl_Position" + MemberName 20(gl_PerVertex) 1 "gl_PointSize" + MemberName 20(gl_PerVertex) 2 "gl_ClipDistance" + Name 24 "gl_in" + Name 31 "ps" + Name 35 "cd" + Name 39 "pvi" + Name 41 "gl_PatchVerticesIn" + Name 43 "pid" + Name 44 "gl_PrimitiveID" + Name 46 "iid" + Name 47 "gl_InvocationID" + Name 50 "gl_PerVertex" + MemberName 50(gl_PerVertex) 0 "gl_Position" + MemberName 50(gl_PerVertex) 1 "gl_PointSize" + MemberName 50(gl_PerVertex) 2 "gl_ClipDistance" + Name 54 "gl_out" + Name 68 "gl_TessLevelOuter" + Name 73 "gl_TessLevelInner" + Name 78 "outa" + Name 79 "patchOut" + Name 83 "inb" + Name 84 "ind" + Name 87 "ivla" + Name 88 "ivlb" + Name 91 "ovla" + Name 92 "ovlb" + MemberDecorate 20(gl_PerVertex) 0 BuiltIn Position + MemberDecorate 20(gl_PerVertex) 1 BuiltIn PointSize + MemberDecorate 20(gl_PerVertex) 2 BuiltIn ClipDistance + Decorate 20(gl_PerVertex) Block + Decorate 41(gl_PatchVerticesIn) BuiltIn PatchVertices + Decorate 44(gl_PrimitiveID) BuiltIn PrimitiveId + Decorate 47(gl_InvocationID) BuiltIn InvocationId + MemberDecorate 50(gl_PerVertex) 0 BuiltIn Position + MemberDecorate 50(gl_PerVertex) 1 BuiltIn PointSize + MemberDecorate 50(gl_PerVertex) 2 BuiltIn ClipDistance + Decorate 50(gl_PerVertex) Block + Decorate 68(gl_TessLevelOuter) Patch + Decorate 68(gl_TessLevelOuter) BuiltIn TessLevelOuter + Decorate 73(gl_TessLevelInner) Patch + Decorate 73(gl_TessLevelInner) BuiltIn TessLevelInner + Decorate 79(patchOut) Patch + Decorate 87(ivla) Location 3 + Decorate 88(ivlb) Location 4 + Decorate 91(ovla) Location 3 + Decorate 92(ovlb) Location 4 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: 6(int) Constant 2 + 8: 6(int) Constant 1 + 9: 6(int) Constant 0 + 10: TypeInt 32 1 + 11: TypePointer Function 10(int) + 13: 10(int) Constant 5392 + 14: TypeFloat 32 + 15: TypeVector 14(float) 4 + 16: TypePointer Function 15(fvec4) + 18: 6(int) Constant 3 + 19: TypeArray 14(float) 18 +20(gl_PerVertex): TypeStruct 15(fvec4) 14(float) 19 + 21: 6(int) Constant 32 + 22: TypeArray 20(gl_PerVertex) 21 + 23: TypePointer Input 22 + 24(gl_in): 23(ptr) Variable Input + 25: 10(int) Constant 1 + 26: 10(int) Constant 0 + 27: TypePointer Input 15(fvec4) + 30: TypePointer Function 14(float) + 32: TypePointer Input 14(float) + 36: 10(int) Constant 2 + 40: TypePointer Input 10(int) +41(gl_PatchVerticesIn): 40(ptr) Variable Input +44(gl_PrimitiveID): 40(ptr) Variable Input +47(gl_InvocationID): 40(ptr) Variable Input + 49: TypeArray 14(float) 7 +50(gl_PerVertex): TypeStruct 15(fvec4) 14(float) 49 + 51: 6(int) Constant 4 + 52: TypeArray 50(gl_PerVertex) 51 + 53: TypePointer Output 52 + 54(gl_out): 53(ptr) Variable Output + 57: TypePointer Output 15(fvec4) + 61: TypePointer Output 14(float) + 66: TypeArray 14(float) 51 + 67: TypePointer Output 66 +68(gl_TessLevelOuter): 67(ptr) Variable Output + 69: 10(int) Constant 3 + 70: 14(float) Constant 1078774989 + 72: TypePointer Output 49 +73(gl_TessLevelInner): 72(ptr) Variable Output + 74: 14(float) Constant 1067869798 + 76: TypeArray 10(int) 51 + 77: TypePointer Private 76 + 78(outa): 77(ptr) Variable Private + 79(patchOut): 57(ptr) Variable Output + 80: TypeVector 14(float) 2 + 81: TypeArray 80(fvec2) 21 + 82: TypePointer Input 81 + 83(inb): 82(ptr) Variable Input + 84(ind): 82(ptr) Variable Input + 85: TypeArray 15(fvec4) 21 + 86: TypePointer Input 85 + 87(ivla): 86(ptr) Variable Input + 88(ivlb): 86(ptr) Variable Input + 89: TypeArray 15(fvec4) 51 + 90: TypePointer Output 89 + 91(ovla): 90(ptr) Variable Output + 92(ovlb): 90(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 12(a): 11(ptr) Variable Function + 17(p): 16(ptr) Variable Function + 31(ps): 30(ptr) Variable Function + 35(cd): 30(ptr) Variable Function + 39(pvi): 11(ptr) Variable Function + 43(pid): 11(ptr) Variable Function + 46(iid): 11(ptr) Variable Function + ControlBarrier 7 8 9 + Store 12(a) 13 + 28: 27(ptr) AccessChain 24(gl_in) 25 26 + 29: 15(fvec4) Load 28 + Store 17(p) 29 + 33: 32(ptr) AccessChain 24(gl_in) 25 25 + 34: 14(float) Load 33 + Store 31(ps) 34 + 37: 32(ptr) AccessChain 24(gl_in) 25 36 36 + 38: 14(float) Load 37 + Store 35(cd) 38 + 42: 10(int) Load 41(gl_PatchVerticesIn) + Store 39(pvi) 42 + 45: 10(int) Load 44(gl_PrimitiveID) + Store 43(pid) 45 + 48: 10(int) Load 47(gl_InvocationID) + Store 46(iid) 48 + 55: 10(int) Load 47(gl_InvocationID) + 56: 15(fvec4) Load 17(p) + 58: 57(ptr) AccessChain 54(gl_out) 55 26 + Store 58 56 + 59: 10(int) Load 47(gl_InvocationID) + 60: 14(float) Load 31(ps) + 62: 61(ptr) AccessChain 54(gl_out) 59 25 + Store 62 60 + 63: 10(int) Load 47(gl_InvocationID) + 64: 14(float) Load 35(cd) + 65: 61(ptr) AccessChain 54(gl_out) 63 36 25 + Store 65 64 + 71: 61(ptr) AccessChain 68(gl_TessLevelOuter) 69 + Store 71 70 + 75: 61(ptr) AccessChain 73(gl_TessLevelInner) 25 + Store 75 74 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.400.tese.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.400.tese.out new file mode 100755 index 0000000..0c62bed --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.400.tese.out @@ -0,0 +1,185 @@ +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 +// Id's are bound by 96 + + Capability Tessellation + Capability TessellationPointSize + Capability ClipDistance + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint TessellationEvaluation 4 "main" 21 38 41 47 53 61 66 75 79 80 84 88 91 92 95 + ExecutionMode 4 Triangles + ExecutionMode 4 SpacingFractionalOdd + ExecutionMode 4 VertexOrderCcw + ExecutionMode 4 PointMode + Source GLSL 400 + SourceExtension "GL_ARB_separate_shader_objects" + Name 4 "main" + Name 8 "a" + Name 13 "p" + Name 17 "gl_PerVertex" + MemberName 17(gl_PerVertex) 0 "gl_Position" + MemberName 17(gl_PerVertex) 1 "gl_PointSize" + MemberName 17(gl_PerVertex) 2 "gl_ClipDistance" + Name 21 "gl_in" + Name 28 "ps" + Name 32 "cd" + Name 36 "pvi" + Name 38 "gl_PatchVerticesIn" + Name 40 "pid" + Name 41 "gl_PrimitiveID" + Name 45 "tc" + Name 47 "gl_TessCoord" + Name 49 "tlo" + Name 53 "gl_TessLevelOuter" + Name 57 "tli" + Name 61 "gl_TessLevelInner" + Name 64 "gl_PerVertex" + MemberName 64(gl_PerVertex) 0 "gl_Position" + MemberName 64(gl_PerVertex) 1 "gl_PointSize" + MemberName 64(gl_PerVertex) 2 "gl_ClipDistance" + Name 66 "" + Name 75 "patchIn" + Name 79 "inb" + Name 80 "ind" + Name 81 "testblb" + MemberName 81(testblb) 0 "f" + Name 84 "blb" + Name 85 "testbld" + MemberName 85(testbld) 0 "f" + Name 88 "bld" + Name 91 "ivla" + Name 92 "ivlb" + Name 95 "ovla" + MemberDecorate 17(gl_PerVertex) 0 BuiltIn Position + MemberDecorate 17(gl_PerVertex) 1 BuiltIn PointSize + MemberDecorate 17(gl_PerVertex) 2 BuiltIn ClipDistance + Decorate 17(gl_PerVertex) Block + Decorate 38(gl_PatchVerticesIn) BuiltIn PatchVertices + Decorate 41(gl_PrimitiveID) BuiltIn PrimitiveId + Decorate 47(gl_TessCoord) BuiltIn TessCoord + Decorate 53(gl_TessLevelOuter) Patch + Decorate 53(gl_TessLevelOuter) BuiltIn TessLevelOuter + Decorate 61(gl_TessLevelInner) Patch + Decorate 61(gl_TessLevelInner) BuiltIn TessLevelInner + MemberDecorate 64(gl_PerVertex) 0 BuiltIn Position + MemberDecorate 64(gl_PerVertex) 1 BuiltIn PointSize + MemberDecorate 64(gl_PerVertex) 2 BuiltIn ClipDistance + Decorate 64(gl_PerVertex) Block + Decorate 75(patchIn) Patch + Decorate 81(testblb) Block + Decorate 85(testbld) Block + Decorate 91(ivla) Location 23 + Decorate 92(ivlb) Location 24 + Decorate 95(ovla) Location 23 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypePointer Function 6(int) + 9: 6(int) Constant 1512 + 10: TypeFloat 32 + 11: TypeVector 10(float) 4 + 12: TypePointer Function 11(fvec4) + 14: TypeInt 32 0 + 15: 14(int) Constant 3 + 16: TypeArray 10(float) 15 +17(gl_PerVertex): TypeStruct 11(fvec4) 10(float) 16 + 18: 14(int) Constant 32 + 19: TypeArray 17(gl_PerVertex) 18 + 20: TypePointer Input 19 + 21(gl_in): 20(ptr) Variable Input + 22: 6(int) Constant 1 + 23: 6(int) Constant 0 + 24: TypePointer Input 11(fvec4) + 27: TypePointer Function 10(float) + 29: TypePointer Input 10(float) + 33: 6(int) Constant 2 + 37: TypePointer Input 6(int) +38(gl_PatchVerticesIn): 37(ptr) Variable Input +41(gl_PrimitiveID): 37(ptr) Variable Input + 43: TypeVector 10(float) 3 + 44: TypePointer Function 43(fvec3) + 46: TypePointer Input 43(fvec3) +47(gl_TessCoord): 46(ptr) Variable Input + 50: 14(int) Constant 4 + 51: TypeArray 10(float) 50 + 52: TypePointer Input 51 +53(gl_TessLevelOuter): 52(ptr) Variable Input + 54: 6(int) Constant 3 + 58: 14(int) Constant 2 + 59: TypeArray 10(float) 58 + 60: TypePointer Input 59 +61(gl_TessLevelInner): 60(ptr) Variable Input +64(gl_PerVertex): TypeStruct 11(fvec4) 10(float) 16 + 65: TypePointer Output 64(gl_PerVertex) + 66: 65(ptr) Variable Output + 68: TypePointer Output 11(fvec4) + 71: TypePointer Output 10(float) + 75(patchIn): 24(ptr) Variable Input + 76: TypeVector 10(float) 2 + 77: TypeArray 76(fvec2) 18 + 78: TypePointer Input 77 + 79(inb): 78(ptr) Variable Input + 80(ind): 78(ptr) Variable Input + 81(testblb): TypeStruct 6(int) + 82: TypeArray 81(testblb) 18 + 83: TypePointer Input 82 + 84(blb): 83(ptr) Variable Input + 85(testbld): TypeStruct 6(int) + 86: TypeArray 85(testbld) 18 + 87: TypePointer Input 86 + 88(bld): 87(ptr) Variable Input + 89: TypeArray 11(fvec4) 18 + 90: TypePointer Input 89 + 91(ivla): 90(ptr) Variable Input + 92(ivlb): 90(ptr) Variable Input + 93: TypeArray 11(fvec4) 58 + 94: TypePointer Output 93 + 95(ovla): 94(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 8(a): 7(ptr) Variable Function + 13(p): 12(ptr) Variable Function + 28(ps): 27(ptr) Variable Function + 32(cd): 27(ptr) Variable Function + 36(pvi): 7(ptr) Variable Function + 40(pid): 7(ptr) Variable Function + 45(tc): 44(ptr) Variable Function + 49(tlo): 27(ptr) Variable Function + 57(tli): 27(ptr) Variable Function + Store 8(a) 9 + 25: 24(ptr) AccessChain 21(gl_in) 22 23 + 26: 11(fvec4) Load 25 + Store 13(p) 26 + 30: 29(ptr) AccessChain 21(gl_in) 22 22 + 31: 10(float) Load 30 + Store 28(ps) 31 + 34: 29(ptr) AccessChain 21(gl_in) 22 33 33 + 35: 10(float) Load 34 + Store 32(cd) 35 + 39: 6(int) Load 38(gl_PatchVerticesIn) + Store 36(pvi) 39 + 42: 6(int) Load 41(gl_PrimitiveID) + Store 40(pid) 42 + 48: 43(fvec3) Load 47(gl_TessCoord) + Store 45(tc) 48 + 55: 29(ptr) AccessChain 53(gl_TessLevelOuter) 54 + 56: 10(float) Load 55 + Store 49(tlo) 56 + 62: 29(ptr) AccessChain 61(gl_TessLevelInner) 22 + 63: 10(float) Load 62 + Store 57(tli) 63 + 67: 11(fvec4) Load 13(p) + 69: 68(ptr) AccessChain 66 23 + Store 69 67 + 70: 10(float) Load 28(ps) + 72: 71(ptr) AccessChain 66 22 + Store 72 70 + 73: 10(float) Load 32(cd) + 74: 71(ptr) AccessChain 66 33 33 + Store 74 73 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.420.geom.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.420.geom.out new file mode 100644 index 0000000..6413d5a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.420.geom.out @@ -0,0 +1,128 @@ +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 +// Id's are bound by 72 + + Capability Geometry + Capability GeometryPointSize + Capability ImageGatherExtended + Capability GeometryStreams + Capability MultiViewport + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Geometry 4 "main" 14 23 28 33 46 + ExecutionMode 4 Triangles + ExecutionMode 4 Invocations 4 + ExecutionMode 4 OutputLineStrip + ExecutionMode 4 OutputVertices 127 + Source GLSL 420 + Name 4 "main" + Name 8 "p" + Name 9 "gl_PerVertex" + MemberName 9(gl_PerVertex) 0 "gl_PointSize" + Name 14 "gl_in" + Name 21 "gl_PerVertex" + MemberName 21(gl_PerVertex) 0 "gl_PointSize" + Name 23 "" + Name 28 "gl_ViewportIndex" + Name 31 "id" + Name 33 "gl_InvocationID" + Name 37 "v" + Name 41 "s2D" + Name 46 "coord" + Name 64 "i" + Name 67 "indexable" + MemberDecorate 9(gl_PerVertex) 0 BuiltIn PointSize + Decorate 9(gl_PerVertex) Block + MemberDecorate 21(gl_PerVertex) 0 BuiltIn PointSize + Decorate 21(gl_PerVertex) Block + Decorate 21(gl_PerVertex) Stream 0 + Decorate 23 Stream 0 + Decorate 28(gl_ViewportIndex) Stream 0 + Decorate 28(gl_ViewportIndex) BuiltIn ViewportIndex + Decorate 33(gl_InvocationID) BuiltIn InvocationId + Decorate 41(s2D) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypePointer Function 6(float) + 9(gl_PerVertex): TypeStruct 6(float) + 10: TypeInt 32 0 + 11: 10(int) Constant 3 + 12: TypeArray 9(gl_PerVertex) 11 + 13: TypePointer Input 12 + 14(gl_in): 13(ptr) Variable Input + 15: TypeInt 32 1 + 16: 15(int) Constant 1 + 17: 15(int) Constant 0 + 18: TypePointer Input 6(float) +21(gl_PerVertex): TypeStruct 6(float) + 22: TypePointer Output 21(gl_PerVertex) + 23: 22(ptr) Variable Output + 25: TypePointer Output 6(float) + 27: TypePointer Output 15(int) +28(gl_ViewportIndex): 27(ptr) Variable Output + 29: 15(int) Constant 7 + 30: TypePointer Function 15(int) + 32: TypePointer Input 15(int) +33(gl_InvocationID): 32(ptr) Variable Input + 35: TypeVector 6(float) 4 + 36: TypePointer Function 35(fvec4) + 38: TypeImage 6(float) 2D sampled format:Unknown + 39: TypeSampledImage 38 + 40: TypePointer UniformConstant 39 + 41(s2D): 40(ptr) Variable UniformConstant + 43: TypeVector 6(float) 2 + 44: TypeArray 43(fvec2) 11 + 45: TypePointer Input 44 + 46(coord): 45(ptr) Variable Input + 47: TypePointer Input 43(fvec2) + 50: TypeVector 15(int) 2 + 51: 10(int) Constant 5 + 52: TypeArray 50(ivec2) 51 + 53: 50(ivec2) ConstantComposite 17 16 + 54: 15(int) Constant 4294967294 + 55: 50(ivec2) ConstantComposite 16 54 + 56: 15(int) Constant 3 + 57: 50(ivec2) ConstantComposite 17 56 + 58: 15(int) Constant 4294967293 + 59: 50(ivec2) ConstantComposite 58 17 + 60: 15(int) Constant 2 + 61: 50(ivec2) ConstantComposite 60 16 + 62: 52 ConstantComposite 53 55 57 59 61 + 63: TypePointer Private 15(int) + 64(i): 63(ptr) Variable Private + 66: TypePointer Function 52 + 68: TypePointer Function 50(ivec2) + 4(main): 2 Function None 3 + 5: Label + 8(p): 7(ptr) Variable Function + 31(id): 30(ptr) Variable Function + 37(v): 36(ptr) Variable Function + 67(indexable): 66(ptr) Variable Function + 19: 18(ptr) AccessChain 14(gl_in) 16 17 + 20: 6(float) Load 19 + Store 8(p) 20 + 24: 6(float) Load 8(p) + 26: 25(ptr) AccessChain 23 17 + Store 26 24 + Store 28(gl_ViewportIndex) 29 + EmitStreamVertex 16 + EndStreamPrimitive 17 + EmitVertex + EndPrimitive + 34: 15(int) Load 33(gl_InvocationID) + Store 31(id) 34 + 42: 39 Load 41(s2D) + 48: 47(ptr) AccessChain 46(coord) 17 + 49: 43(fvec2) Load 48 + 65: 15(int) Load 64(i) + Store 67(indexable) 62 + 69: 68(ptr) AccessChain 67(indexable) 65 + 70: 50(ivec2) Load 69 + 71: 35(fvec4) ImageGather 42 49 17 Offset 70 + Store 37(v) 71 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.430.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.430.frag.out new file mode 100755 index 0000000..abe2a58 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.430.frag.out @@ -0,0 +1,50 @@ +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 +// Id's are bound by 24 + + Capability Shader + Capability Geometry + Capability MultiViewport + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 9 14 19 + ExecutionMode 4 OriginUpperLeft + Source GLSL 430 + Name 4 "main" + Name 9 "color" + Name 14 "gl_Layer" + Name 19 "gl_ViewportIndex" + Decorate 14(gl_Layer) Flat + Decorate 14(gl_Layer) BuiltIn Layer + Decorate 19(gl_ViewportIndex) Flat + Decorate 19(gl_ViewportIndex) BuiltIn ViewportIndex + 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: 6(float) Constant 1065353216 + 11: 7(fvec4) ConstantComposite 10 10 10 10 + 12: TypeInt 32 1 + 13: TypePointer Input 12(int) + 14(gl_Layer): 13(ptr) Variable Input +19(gl_ViewportIndex): 13(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + Store 9(color) 11 + 15: 12(int) Load 14(gl_Layer) + 16: 6(float) ConvertSToF 15 + 17: 7(fvec4) Load 9(color) + 18: 7(fvec4) VectorTimesScalar 17 16 + Store 9(color) 18 + 20: 12(int) Load 19(gl_ViewportIndex) + 21: 6(float) ConvertSToF 20 + 22: 7(fvec4) Load 9(color) + 23: 7(fvec4) VectorTimesScalar 22 21 + Store 9(color) 23 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.430.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.430.vert.out new file mode 100755 index 0000000..8ea95d1 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.430.vert.out @@ -0,0 +1,138 @@ +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 +// Id's are bound by 66 + + Capability Shader + Capability ClipDistance + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 12 23 34 38 41 42 62 65 + Source GLSL 450 + Name 4 "main" + Name 10 "gl_PerVertex" + MemberName 10(gl_PerVertex) 0 "gl_ClipDistance" + Name 12 "" + Name 23 "bad" + Name 34 "badorder3" + Name 38 "f" + Name 41 "badorder" + Name 42 "badorder2" + Name 43 "boundblock" + MemberName 43(boundblock) 0 "aoeu" + Name 45 "boundInst" + Name 46 "anonblock" + MemberName 46(anonblock) 0 "aoeu" + Name 48 "" + Name 52 "sampb1" + Name 55 "sampb2" + Name 56 "sampb4" + Name 59 "S" + MemberName 59(S) 0 "a" + MemberName 59(S) 1 "b" + MemberName 59(S) 2 "c" + Name 60 "SS" + MemberName 60(SS) 0 "b" + MemberName 60(SS) 1 "s" + MemberName 60(SS) 2 "c" + Name 62 "var" + Name 63 "MS" + MemberName 63(MS) 0 "f" + Name 65 "outMS" + MemberDecorate 10(gl_PerVertex) 0 BuiltIn ClipDistance + Decorate 10(gl_PerVertex) Block + Decorate 34(badorder3) Flat + Decorate 42(badorder2) Invariant + MemberDecorate 43(boundblock) 0 Offset 0 + Decorate 43(boundblock) Block + Decorate 45(boundInst) DescriptorSet 0 + Decorate 45(boundInst) Binding 3 + MemberDecorate 46(anonblock) 0 Offset 0 + Decorate 46(anonblock) Block + Decorate 48 DescriptorSet 0 + Decorate 48 Binding 7 + Decorate 52(sampb1) DescriptorSet 0 + Decorate 52(sampb1) Binding 4 + Decorate 55(sampb2) DescriptorSet 0 + Decorate 55(sampb2) Binding 5 + Decorate 56(sampb4) DescriptorSet 0 + Decorate 56(sampb4) Binding 31 + MemberDecorate 59(S) 0 RelaxedPrecision + Decorate 62(var) Flat + Decorate 62(var) Location 0 + MemberDecorate 63(MS) 0 Location 17 + Decorate 63(MS) Block + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeInt 32 0 + 8: 7(int) Constant 3 + 9: TypeArray 6(float) 8 +10(gl_PerVertex): TypeStruct 9 + 11: TypePointer Output 10(gl_PerVertex) + 12: 11(ptr) Variable Output + 13: TypeInt 32 1 + 14: 13(int) Constant 0 + 15: 13(int) Constant 2 + 16: 6(float) Constant 1080872141 + 17: TypePointer Output 6(float) + 19: TypeVector 6(float) 4 + 20: 7(int) Constant 10 + 21: TypeArray 19(fvec4) 20 + 22: TypePointer Input 21 + 23(bad): 22(ptr) Variable Input + 24: 7(int) Constant 0 + 25: TypePointer Input 6(float) + 28: 6(float) Constant 1082549862 + 29: TypeBool + 33: TypePointer Output 19(fvec4) + 34(badorder3): 33(ptr) Variable Output + 35: TypePointer Input 19(fvec4) + 38(f): 25(ptr) Variable Input + 41(badorder): 35(ptr) Variable Input + 42(badorder2): 33(ptr) Variable Output + 43(boundblock): TypeStruct 13(int) + 44: TypePointer Uniform 43(boundblock) + 45(boundInst): 44(ptr) Variable Uniform + 46(anonblock): TypeStruct 13(int) + 47: TypePointer Uniform 46(anonblock) + 48: 47(ptr) Variable Uniform + 49: TypeImage 6(float) 2D sampled format:Unknown + 50: TypeSampledImage 49 + 51: TypePointer UniformConstant 50 + 52(sampb1): 51(ptr) Variable UniformConstant + 53: TypeArray 50 20 + 54: TypePointer UniformConstant 53 + 55(sampb2): 54(ptr) Variable UniformConstant + 56(sampb4): 51(ptr) Variable UniformConstant + 57: TypeVector 7(int) 2 + 58: TypeVector 6(float) 3 + 59(S): TypeStruct 6(float) 57(ivec2) 58(fvec3) + 60(SS): TypeStruct 19(fvec4) 59(S) 19(fvec4) + 61: TypePointer Output 60(SS) + 62(var): 61(ptr) Variable Output + 63(MS): TypeStruct 6(float) + 64: TypePointer Output 63(MS) + 65(outMS): 64(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 18: 17(ptr) AccessChain 12 14 15 + Store 18 16 + 26: 25(ptr) AccessChain 23(bad) 14 24 + 27: 6(float) Load 26 + 30: 29(bool) FOrdEqual 27 28 + SelectionMerge 32 None + BranchConditional 30 31 32 + 31: Label + 36: 35(ptr) AccessChain 23(bad) 14 + 37: 19(fvec4) Load 36 + Store 34(badorder3) 37 + Branch 32 + 32: Label + 39: 6(float) Load 38(f) + 40: 17(ptr) AccessChain 12 14 14 + Store 40 39 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.450.geom.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.450.geom.out new file mode 100755 index 0000000..85c6814 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.450.geom.out @@ -0,0 +1,67 @@ +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 + + Capability Geometry + Capability GeometryPointSize + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Geometry 4 "main" 13 20 + ExecutionMode 4 Triangles + ExecutionMode 4 Invocations 4 + ExecutionMode 4 OutputLineStrip + ExecutionMode 4 OutputVertices 127 + 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 "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 20 "gl_in" + 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(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 + 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 1 +16(gl_PerVertex): TypeStruct 7(fvec4) 6(float) 10 10 + 17: 8(int) Constant 3 + 18: TypeArray 16(gl_PerVertex) 17 + 19: TypePointer Input 18 + 20(gl_in): 19(ptr) Variable Input + 21: TypePointer Input 6(float) + 24: TypePointer Output 6(float) + 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 + 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 new file mode 100755 index 0000000..e62aa38 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.450.noRedecl.tesc.out @@ -0,0 +1,49 @@ +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 +// Id's are bound by 21 + + Capability Tessellation + Capability TessellationPointSize + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint TessellationControl 4 "main" 15 20 + ExecutionMode 4 OutputVertices 4 + 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 15 "gl_in" + Name 20 "patchOut" + 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 20(patchOut) Patch + 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: 8(int) Constant 32 + 13: TypeArray 11(gl_PerVertex) 12 + 14: TypePointer Input 13 + 15(gl_in): 14(ptr) Variable Input + 16: TypeInt 32 1 + 17: 16(int) Constant 0 + 18: 16(int) Constant 1 + 19: TypePointer Output 7(fvec4) + 20(patchOut): 19(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.450.tesc.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.450.tesc.out new file mode 100755 index 0000000..a0bf3dd --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.450.tesc.out @@ -0,0 +1,79 @@ +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 + + Capability Tessellation + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint TessellationControl 4 "main" 9 16 19 22 + 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 + 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 + 4(main): 2 Function None 3 + 5: Label + 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 new file mode 100644 index 0000000..4eb7563 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.AofA.frag.out @@ -0,0 +1,152 @@ +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 +// Id's are bound by 104 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 39 44 68 70 72 78 + ExecutionMode 4 OriginUpperLeft + Source GLSL 430 + Name 4 "main" + Name 17 "foo(f1[5][7];" + Name 16 "a" + Name 20 "r" + Name 39 "outfloat" + Name 42 "g4" + Name 44 "g5" + Name 45 "param" + Name 48 "u" + Name 52 "param" + Name 66 "many" + Name 68 "i" + Name 70 "j" + Name 72 "k" + Name 78 "infloat" + Name 94 "uAofA" + MemberName 94(uAofA) 0 "f" + Name 98 "nameAofA" + Decorate 68(i) Flat + Decorate 70(j) Flat + Decorate 72(k) Flat + Decorate 92 ArrayStride 16 + Decorate 93 ArrayStride 64 + MemberDecorate 94(uAofA) 0 Offset 0 + Decorate 94(uAofA) Block + Decorate 98(nameAofA) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeInt 32 0 + 8: 7(int) Constant 7 + 9: TypeArray 6(float) 8 + 10: 7(int) Constant 5 + 11: TypeArray 9 10 + 12: TypePointer Function 11 + 13: 7(int) Constant 4 + 14: TypeArray 9 13 + 15: TypeFunction 14 12(ptr) + 19: TypePointer Function 9 + 21: TypeInt 32 1 + 22: 21(int) Constant 2 + 25: 21(int) Constant 0 + 28: 21(int) Constant 1 + 32: 21(int) Constant 3 + 38: TypePointer Output 6(float) + 39(outfloat): 38(ptr) Variable Output + 40: 6(float) Constant 0 + 41: TypePointer Private 14 + 42(g4): 41(ptr) Variable Private + 43: TypePointer Input 11 + 44(g5): 43(ptr) Variable Input + 49: 6(float) Constant 1077936128 + 50: TypePointer Function 6(float) + 55: 7(int) Constant 6 + 56: TypeArray 6(float) 55 + 57: TypeArray 56 10 + 58: TypeArray 57 13 + 59: 7(int) Constant 3 + 60: TypeArray 58 59 + 61: 7(int) Constant 2 + 62: TypeArray 60 61 + 63: 7(int) Constant 1 + 64: TypeArray 62 63 + 65: TypePointer Private 64 + 66(many): 65(ptr) Variable Private + 67: TypePointer Input 21(int) + 68(i): 67(ptr) Variable Input + 70(j): 67(ptr) Variable Input + 72(k): 67(ptr) Variable Input + 77: TypePointer Input 6(float) + 78(infloat): 77(ptr) Variable Input + 80: TypePointer Private 6(float) + 92: TypeArray 6(float) 13 + 93: TypeArray 92 61 + 94(uAofA): TypeStruct 93 + 95: TypeArray 94(uAofA) 10 + 96: TypeArray 95 59 + 97: TypePointer Uniform 96 + 98(nameAofA): 97(ptr) Variable Uniform + 99: TypePointer Uniform 6(float) + 4(main): 2 Function None 3 + 5: Label + 45(param): 12(ptr) Variable Function + 48(u): 12(ptr) Variable Function + 52(param): 12(ptr) Variable Function + Store 39(outfloat) 40 + 46: 11 Load 44(g5) + Store 45(param) 46 + 47: 14 FunctionCall 17(foo(f1[5][7];) 45(param) + Store 42(g4) 47 + 51: 50(ptr) AccessChain 48(u) 22 22 + Store 51 49 + 53: 11 Load 48(u) + Store 52(param) 53 + 54: 14 FunctionCall 17(foo(f1[5][7];) 52(param) + 69: 21(int) Load 68(i) + 71: 21(int) Load 70(j) + 73: 21(int) Load 72(k) + 74: 21(int) Load 68(i) + 75: 21(int) Load 70(j) + 76: 21(int) Load 72(k) + 79: 6(float) Load 78(infloat) + 81: 80(ptr) AccessChain 66(many) 69 71 73 74 75 76 + Store 81 79 + 82: 21(int) Load 70(j) + 83: 21(int) Load 70(j) + 84: 21(int) Load 70(j) + 85: 21(int) Load 70(j) + 86: 21(int) Load 70(j) + 87: 21(int) Load 70(j) + 88: 80(ptr) AccessChain 66(many) 82 83 84 85 86 87 + 89: 6(float) Load 88 + 90: 6(float) Load 39(outfloat) + 91: 6(float) FAdd 90 89 + Store 39(outfloat) 91 + 100: 99(ptr) AccessChain 98(nameAofA) 28 22 25 25 32 + 101: 6(float) Load 100 + 102: 6(float) Load 39(outfloat) + 103: 6(float) FAdd 102 101 + Store 39(outfloat) 103 + Return + FunctionEnd +17(foo(f1[5][7];): 14 Function None 15 + 16(a): 12(ptr) FunctionParameter + 18: Label + 20(r): 19(ptr) Variable Function + 23: 19(ptr) AccessChain 16(a) 22 + 24: 9 Load 23 + Store 20(r) 24 + 26: 19(ptr) AccessChain 16(a) 25 + 27: 9 Load 26 + 29: 19(ptr) AccessChain 16(a) 28 + 30: 9 Load 29 + 31: 9 Load 20(r) + 33: 19(ptr) AccessChain 16(a) 32 + 34: 9 Load 33 + 35: 14 CompositeConstruct 27 30 31 34 + ReturnValue 35 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.GeometryShaderPassthrough.geom.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.GeometryShaderPassthrough.geom.out new file mode 100644 index 0000000..05aeb97 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.GeometryShaderPassthrough.geom.out @@ -0,0 +1,46 @@ +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 +// Id's are bound by 15 + + Capability Geometry + Capability GeometryShaderPassthroughNV + Extension "SPV_NV_geometry_shader_passthrough" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Geometry 4 "main" 10 14 + ExecutionMode 4 Triangles + ExecutionMode 4 Invocations 1 + ExecutionMode 4 OutputVertices + Source GLSL 450 + SourceExtension "GL_NV_geometry_shader_passthrough" + Name 4 "main" + Name 8 "gl_PerVertex" + MemberName 8(gl_PerVertex) 0 "gl_Position" + Name 10 "" + Name 12 "Inputs" + MemberName 12(Inputs) 0 "texcoord" + MemberName 12(Inputs) 1 "baseColor" + Name 14 "" + MemberDecorate 8(gl_PerVertex) 0 BuiltIn Position + Decorate 8(gl_PerVertex) Block + Decorate 10 PassthroughNV + Decorate 12(Inputs) Block + Decorate 14 PassthroughNV + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8(gl_PerVertex): TypeStruct 7(fvec4) + 9: TypePointer Input 8(gl_PerVertex) + 10: 9(ptr) Variable Input + 11: TypeVector 6(float) 2 + 12(Inputs): TypeStruct 11(fvec2) 7(fvec4) + 13: TypePointer Input 12(Inputs) + 14: 13(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 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 new file mode 100755 index 0000000..aeee253 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.Operations.frag.out @@ -0,0 +1,704 @@ +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 +// Id's are bound by 532 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 11 22 212 288 485 526 531 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + Name 4 "main" + Name 9 "v" + Name 11 "uv4" + Name 20 "i" + Name 22 "ui" + Name 181 "ub41" + Name 188 "f" + Name 212 "uf" + Name 285 "u" + Name 288 "uui" + Name 305 "b" + Name 342 "ub42" + Name 485 "FragColor" + Name 503 "m1" + Name 510 "m2" + Name 526 "uiv4" + Name 528 "ub" + Name 531 "uuv4" + Decorate 22(ui) Flat + Decorate 288(uui) Flat + Decorate 526(uiv4) Flat + Decorate 531(uuv4) Flat + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 10: TypePointer Input 7(fvec4) + 11(uv4): 10(ptr) Variable Input + 18: TypeInt 32 1 + 19: TypePointer Function 18(int) + 21: TypePointer Input 18(int) + 22(ui): 21(ptr) Variable Input + 141: TypeInt 32 0 + 142: 141(int) Constant 0 + 143: TypePointer Function 6(float) + 178: TypeBool + 179: TypeVector 178(bool) 4 + 180: TypePointer Private 179(bvec4) + 181(ub41): 180(ptr) Variable Private + 211: TypePointer Input 6(float) + 212(uf): 211(ptr) Variable Input + 284: TypePointer Function 141(int) + 287: TypePointer Input 141(int) + 288(uui): 287(ptr) Variable Input + 304: TypePointer Function 178(bool) + 342(ub42): 180(ptr) Variable Private + 398: 18(int) Constant 2 + 405: 18(int) Constant 1 + 435: TypeVector 6(float) 3 + 454: 6(float) Constant 1073741824 + 461: 6(float) Constant 1065353216 + 466: 18(int) Constant 66 + 472: 18(int) Constant 17 + 484: TypePointer Output 7(fvec4) + 485(FragColor): 484(ptr) Variable Output + 501: TypeMatrix 7(fvec4) 4 + 502: TypePointer Function 501 + 504: 6(float) Constant 0 + 505: 7(fvec4) ConstantComposite 461 504 504 504 + 506: 7(fvec4) ConstantComposite 504 461 504 504 + 507: 7(fvec4) ConstantComposite 504 504 461 504 + 508: 7(fvec4) ConstantComposite 504 504 504 461 + 509: 501 ConstantComposite 505 506 507 508 + 511: 7(fvec4) ConstantComposite 504 504 504 504 + 512: 501 ConstantComposite 511 511 511 511 + 524: TypeVector 18(int) 4 + 525: TypePointer Input 524(ivec4) + 526(uiv4): 525(ptr) Variable Input + 527: TypePointer Private 178(bool) + 528(ub): 527(ptr) Variable Private + 529: TypeVector 141(int) 4 + 530: TypePointer Input 529(ivec4) + 531(uuv4): 530(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 9(v): 8(ptr) Variable Function + 20(i): 19(ptr) Variable Function + 188(f): 143(ptr) Variable Function + 285(u): 284(ptr) Variable Function + 305(b): 304(ptr) Variable Function + 486: 8(ptr) Variable Function + 503(m1): 502(ptr) Variable Function + 510(m2): 502(ptr) Variable Function + 513: 502(ptr) Variable Function + 12: 7(fvec4) Load 11(uv4) + 13: 7(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 12 + Store 9(v) 13 + 14: 7(fvec4) Load 9(v) + 15: 7(fvec4) ExtInst 1(GLSL.std.450) 12(Degrees) 14 + 16: 7(fvec4) Load 9(v) + 17: 7(fvec4) FAdd 16 15 + Store 9(v) 17 + 23: 18(int) Load 22(ui) + 24: 18(int) Load 22(ui) + 25: 18(int) IMul 23 24 + Store 20(i) 25 + 26: 7(fvec4) Load 9(v) + 27: 7(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 26 + 28: 7(fvec4) Load 9(v) + 29: 7(fvec4) FAdd 28 27 + Store 9(v) 29 + 30: 7(fvec4) Load 9(v) + 31: 7(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 30 + 32: 7(fvec4) Load 9(v) + 33: 7(fvec4) FAdd 32 31 + Store 9(v) 33 + 34: 7(fvec4) Load 9(v) + 35: 7(fvec4) ExtInst 1(GLSL.std.450) 15(Tan) 34 + 36: 7(fvec4) Load 9(v) + 37: 7(fvec4) FAdd 36 35 + Store 9(v) 37 + 38: 7(fvec4) Load 9(v) + 39: 7(fvec4) ExtInst 1(GLSL.std.450) 16(Asin) 38 + 40: 7(fvec4) Load 9(v) + 41: 7(fvec4) FAdd 40 39 + Store 9(v) 41 + 42: 7(fvec4) Load 9(v) + 43: 7(fvec4) ExtInst 1(GLSL.std.450) 17(Acos) 42 + 44: 7(fvec4) Load 9(v) + 45: 7(fvec4) FAdd 44 43 + Store 9(v) 45 + 46: 7(fvec4) Load 9(v) + 47: 7(fvec4) ExtInst 1(GLSL.std.450) 18(Atan) 46 + 48: 7(fvec4) Load 9(v) + 49: 7(fvec4) FAdd 48 47 + Store 9(v) 49 + 50: 7(fvec4) Load 9(v) + 51: 7(fvec4) ExtInst 1(GLSL.std.450) 19(Sinh) 50 + 52: 7(fvec4) Load 9(v) + 53: 7(fvec4) FAdd 52 51 + Store 9(v) 53 + 54: 7(fvec4) Load 9(v) + 55: 7(fvec4) ExtInst 1(GLSL.std.450) 20(Cosh) 54 + 56: 7(fvec4) Load 9(v) + 57: 7(fvec4) FAdd 56 55 + Store 9(v) 57 + 58: 7(fvec4) Load 9(v) + 59: 7(fvec4) ExtInst 1(GLSL.std.450) 21(Tanh) 58 + 60: 7(fvec4) Load 9(v) + 61: 7(fvec4) FAdd 60 59 + Store 9(v) 61 + 62: 7(fvec4) Load 9(v) + 63: 7(fvec4) ExtInst 1(GLSL.std.450) 22(Asinh) 62 + 64: 7(fvec4) Load 9(v) + 65: 7(fvec4) FAdd 64 63 + Store 9(v) 65 + 66: 7(fvec4) Load 9(v) + 67: 7(fvec4) ExtInst 1(GLSL.std.450) 23(Acosh) 66 + 68: 7(fvec4) Load 9(v) + 69: 7(fvec4) FAdd 68 67 + Store 9(v) 69 + 70: 7(fvec4) Load 9(v) + 71: 7(fvec4) ExtInst 1(GLSL.std.450) 24(Atanh) 70 + 72: 7(fvec4) Load 9(v) + 73: 7(fvec4) FAdd 72 71 + Store 9(v) 73 + 74: 7(fvec4) Load 9(v) + 75: 7(fvec4) Load 9(v) + 76: 7(fvec4) ExtInst 1(GLSL.std.450) 26(Pow) 74 75 + 77: 7(fvec4) Load 9(v) + 78: 7(fvec4) FAdd 77 76 + Store 9(v) 78 + 79: 7(fvec4) Load 9(v) + 80: 7(fvec4) ExtInst 1(GLSL.std.450) 27(Exp) 79 + 81: 7(fvec4) Load 9(v) + 82: 7(fvec4) FAdd 81 80 + Store 9(v) 82 + 83: 7(fvec4) Load 9(v) + 84: 7(fvec4) ExtInst 1(GLSL.std.450) 28(Log) 83 + 85: 7(fvec4) Load 9(v) + 86: 7(fvec4) FAdd 85 84 + Store 9(v) 86 + 87: 7(fvec4) Load 9(v) + 88: 7(fvec4) ExtInst 1(GLSL.std.450) 29(Exp2) 87 + 89: 7(fvec4) Load 9(v) + 90: 7(fvec4) FAdd 89 88 + Store 9(v) 90 + 91: 7(fvec4) Load 9(v) + 92: 7(fvec4) ExtInst 1(GLSL.std.450) 30(Log2) 91 + 93: 7(fvec4) Load 9(v) + 94: 7(fvec4) FAdd 93 92 + Store 9(v) 94 + 95: 7(fvec4) Load 9(v) + 96: 7(fvec4) ExtInst 1(GLSL.std.450) 31(Sqrt) 95 + 97: 7(fvec4) Load 9(v) + 98: 7(fvec4) FAdd 97 96 + Store 9(v) 98 + 99: 7(fvec4) Load 9(v) + 100: 7(fvec4) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 99 + 101: 7(fvec4) Load 9(v) + 102: 7(fvec4) FAdd 101 100 + Store 9(v) 102 + 103: 7(fvec4) Load 9(v) + 104: 7(fvec4) ExtInst 1(GLSL.std.450) 4(FAbs) 103 + 105: 7(fvec4) Load 9(v) + 106: 7(fvec4) FAdd 105 104 + Store 9(v) 106 + 107: 7(fvec4) Load 9(v) + 108: 7(fvec4) ExtInst 1(GLSL.std.450) 6(FSign) 107 + 109: 7(fvec4) Load 9(v) + 110: 7(fvec4) FAdd 109 108 + Store 9(v) 110 + 111: 7(fvec4) Load 9(v) + 112: 7(fvec4) ExtInst 1(GLSL.std.450) 8(Floor) 111 + 113: 7(fvec4) Load 9(v) + 114: 7(fvec4) FAdd 113 112 + Store 9(v) 114 + 115: 7(fvec4) Load 9(v) + 116: 7(fvec4) ExtInst 1(GLSL.std.450) 3(Trunc) 115 + 117: 7(fvec4) Load 9(v) + 118: 7(fvec4) FAdd 117 116 + Store 9(v) 118 + 119: 7(fvec4) Load 9(v) + 120: 7(fvec4) ExtInst 1(GLSL.std.450) 1(Round) 119 + 121: 7(fvec4) Load 9(v) + 122: 7(fvec4) FAdd 121 120 + Store 9(v) 122 + 123: 7(fvec4) Load 9(v) + 124: 7(fvec4) ExtInst 1(GLSL.std.450) 2(RoundEven) 123 + 125: 7(fvec4) Load 9(v) + 126: 7(fvec4) FAdd 125 124 + Store 9(v) 126 + 127: 7(fvec4) Load 9(v) + 128: 7(fvec4) ExtInst 1(GLSL.std.450) 9(Ceil) 127 + 129: 7(fvec4) Load 9(v) + 130: 7(fvec4) FAdd 129 128 + Store 9(v) 130 + 131: 7(fvec4) Load 9(v) + 132: 7(fvec4) ExtInst 1(GLSL.std.450) 10(Fract) 131 + 133: 7(fvec4) Load 9(v) + 134: 7(fvec4) FAdd 133 132 + Store 9(v) 134 + 135: 7(fvec4) Load 9(v) + 136: 7(fvec4) Load 9(v) + 137: 7(fvec4) FMod 135 136 + 138: 7(fvec4) Load 9(v) + 139: 7(fvec4) FAdd 138 137 + Store 9(v) 139 + 140: 7(fvec4) Load 9(v) + 144: 143(ptr) AccessChain 9(v) 142 + 145: 6(float) Load 144 + 146: 7(fvec4) CompositeConstruct 145 145 145 145 + 147: 7(fvec4) FMod 140 146 + 148: 7(fvec4) Load 9(v) + 149: 7(fvec4) FAdd 148 147 + Store 9(v) 149 + 150: 7(fvec4) Load 9(v) + 151: 7(fvec4) ExtInst 1(GLSL.std.450) 35(Modf) 150 9(v) + 152: 7(fvec4) Load 9(v) + 153: 7(fvec4) FAdd 152 151 + Store 9(v) 153 + 154: 7(fvec4) Load 9(v) + 155: 7(fvec4) Load 11(uv4) + 156: 7(fvec4) ExtInst 1(GLSL.std.450) 37(FMin) 154 155 + 157: 7(fvec4) Load 9(v) + 158: 7(fvec4) FAdd 157 156 + Store 9(v) 158 + 159: 7(fvec4) Load 9(v) + 160: 7(fvec4) Load 11(uv4) + 161: 7(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 159 160 + 162: 7(fvec4) Load 9(v) + 163: 7(fvec4) FAdd 162 161 + Store 9(v) 163 + 164: 7(fvec4) Load 9(v) + 165: 7(fvec4) Load 11(uv4) + 166: 7(fvec4) Load 11(uv4) + 167: 7(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 164 165 166 + 168: 7(fvec4) Load 9(v) + 169: 7(fvec4) FAdd 168 167 + Store 9(v) 169 + 170: 7(fvec4) Load 9(v) + 171: 7(fvec4) Load 9(v) + 172: 7(fvec4) Load 9(v) + 173: 7(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 170 171 172 + 174: 7(fvec4) Load 9(v) + 175: 7(fvec4) FAdd 174 173 + Store 9(v) 175 + 176: 7(fvec4) Load 9(v) + 177: 7(fvec4) Load 9(v) + 182: 179(bvec4) Load 181(ub41) + 183: 7(fvec4) Select 182 177 176 + 184: 7(fvec4) Load 9(v) + 185: 7(fvec4) FAdd 184 183 + Store 9(v) 185 + 186: 7(fvec4) Load 9(v) + 187: 7(fvec4) Load 9(v) + 189: 6(float) Load 188(f) + 190: 7(fvec4) CompositeConstruct 189 189 189 189 + 191: 7(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 186 187 190 + 192: 7(fvec4) Load 9(v) + 193: 7(fvec4) FAdd 192 191 + Store 9(v) 193 + 194: 7(fvec4) Load 9(v) + 195: 7(fvec4) Load 11(uv4) + 196: 7(fvec4) Load 9(v) + 197: 7(fvec4) ExtInst 1(GLSL.std.450) 50(Fma) 194 195 196 + 198: 7(fvec4) Load 9(v) + 199: 7(fvec4) FAdd 198 197 + Store 9(v) 199 + 200: 7(fvec4) Load 9(v) + 201: 7(fvec4) Load 9(v) + 202: 7(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 200 201 + 203: 7(fvec4) Load 9(v) + 204: 7(fvec4) FAdd 203 202 + Store 9(v) 204 + 205: 7(fvec4) Load 9(v) + 206: 7(fvec4) Load 9(v) + 207: 7(fvec4) Load 9(v) + 208: 7(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 205 206 207 + 209: 7(fvec4) Load 9(v) + 210: 7(fvec4) FAdd 209 208 + Store 9(v) 210 + 213: 6(float) Load 212(uf) + 214: 7(fvec4) Load 9(v) + 215: 7(fvec4) CompositeConstruct 213 213 213 213 + 216: 7(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 215 214 + 217: 7(fvec4) Load 9(v) + 218: 7(fvec4) FAdd 217 216 + Store 9(v) 218 + 219: 6(float) Load 212(uf) + 220: 6(float) Load 212(uf) + 221: 7(fvec4) Load 9(v) + 222: 7(fvec4) CompositeConstruct 219 219 219 219 + 223: 7(fvec4) CompositeConstruct 220 220 220 220 + 224: 7(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 222 223 221 + 225: 7(fvec4) Load 9(v) + 226: 7(fvec4) FAdd 225 224 + Store 9(v) 226 + 227: 7(fvec4) Load 9(v) + 228: 7(fvec4) ExtInst 1(GLSL.std.450) 69(Normalize) 227 + 229: 7(fvec4) Load 9(v) + 230: 7(fvec4) FAdd 229 228 + Store 9(v) 230 + 231: 7(fvec4) Load 9(v) + 232: 7(fvec4) Load 9(v) + 233: 7(fvec4) Load 9(v) + 234: 7(fvec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 231 232 233 + 235: 7(fvec4) Load 9(v) + 236: 7(fvec4) FAdd 235 234 + Store 9(v) 236 + 237: 7(fvec4) Load 9(v) + 238: 7(fvec4) Load 9(v) + 239: 7(fvec4) ExtInst 1(GLSL.std.450) 71(Reflect) 237 238 + 240: 7(fvec4) Load 9(v) + 241: 7(fvec4) FAdd 240 239 + Store 9(v) 241 + 242: 7(fvec4) Load 9(v) + 243: 7(fvec4) Load 9(v) + 244: 6(float) Load 212(uf) + 245: 7(fvec4) ExtInst 1(GLSL.std.450) 72(Refract) 242 243 244 + 246: 7(fvec4) Load 9(v) + 247: 7(fvec4) FAdd 246 245 + Store 9(v) 247 + 248: 7(fvec4) Load 9(v) + 249: 7(fvec4) DPdx 248 + 250: 7(fvec4) Load 9(v) + 251: 7(fvec4) FAdd 250 249 + Store 9(v) 251 + 252: 7(fvec4) Load 9(v) + 253: 7(fvec4) DPdy 252 + 254: 7(fvec4) Load 9(v) + 255: 7(fvec4) FAdd 254 253 + Store 9(v) 255 + 256: 7(fvec4) Load 9(v) + 257: 7(fvec4) Fwidth 256 + 258: 7(fvec4) Load 9(v) + 259: 7(fvec4) FAdd 258 257 + Store 9(v) 259 + 260: 18(int) Load 22(ui) + 261: 18(int) ExtInst 1(GLSL.std.450) 5(SAbs) 260 + 262: 18(int) Load 20(i) + 263: 18(int) IAdd 262 261 + Store 20(i) 263 + 264: 18(int) Load 20(i) + 265: 18(int) ExtInst 1(GLSL.std.450) 7(SSign) 264 + 266: 18(int) Load 20(i) + 267: 18(int) IAdd 266 265 + Store 20(i) 267 + 268: 18(int) Load 20(i) + 269: 18(int) Load 22(ui) + 270: 18(int) ExtInst 1(GLSL.std.450) 39(SMin) 268 269 + 271: 18(int) Load 20(i) + 272: 18(int) IAdd 271 270 + Store 20(i) 272 + 273: 18(int) Load 20(i) + 274: 18(int) Load 22(ui) + 275: 18(int) ExtInst 1(GLSL.std.450) 42(SMax) 273 274 + 276: 18(int) Load 20(i) + 277: 18(int) IAdd 276 275 + Store 20(i) 277 + 278: 18(int) Load 20(i) + 279: 18(int) Load 22(ui) + 280: 18(int) Load 22(ui) + 281: 18(int) ExtInst 1(GLSL.std.450) 45(SClamp) 278 279 280 + 282: 18(int) Load 20(i) + 283: 18(int) IAdd 282 281 + Store 20(i) 283 + 286: 141(int) Load 285(u) + 289: 141(int) Load 288(uui) + 290: 141(int) ExtInst 1(GLSL.std.450) 38(UMin) 286 289 + 291: 141(int) Load 285(u) + 292: 141(int) IAdd 291 290 + Store 285(u) 292 + 293: 141(int) Load 285(u) + 294: 141(int) Load 288(uui) + 295: 141(int) ExtInst 1(GLSL.std.450) 41(UMax) 293 294 + 296: 141(int) Load 285(u) + 297: 141(int) IAdd 296 295 + Store 285(u) 297 + 298: 141(int) Load 285(u) + 299: 141(int) Load 288(uui) + 300: 141(int) Load 288(uui) + 301: 141(int) ExtInst 1(GLSL.std.450) 44(UClamp) 298 299 300 + 302: 141(int) Load 285(u) + 303: 141(int) IAdd 302 301 + Store 285(u) 303 + 306: 6(float) Load 212(uf) + 307: 178(bool) IsNan 306 + Store 305(b) 307 + 308: 6(float) Load 188(f) + 309: 178(bool) IsInf 308 + Store 305(b) 309 + 310: 7(fvec4) Load 9(v) + 311: 7(fvec4) Load 11(uv4) + 312: 179(bvec4) FOrdLessThan 310 311 + 313: 178(bool) Any 312 + Store 305(b) 313 + 314: 178(bool) Load 305(b) + SelectionMerge 316 None + BranchConditional 314 315 316 + 315: Label + 317: 7(fvec4) Load 9(v) + 318: 7(fvec4) Load 11(uv4) + 319: 179(bvec4) FOrdLessThanEqual 317 318 + 320: 178(bool) Any 319 + Branch 316 + 316: Label + 321: 178(bool) Phi 314 5 320 315 + Store 305(b) 321 + 322: 178(bool) Load 305(b) + SelectionMerge 324 None + BranchConditional 322 323 324 + 323: Label + 325: 7(fvec4) Load 9(v) + 326: 7(fvec4) Load 11(uv4) + 327: 179(bvec4) FOrdGreaterThan 325 326 + 328: 178(bool) Any 327 + Branch 324 + 324: Label + 329: 178(bool) Phi 322 316 328 323 + Store 305(b) 329 + 330: 178(bool) Load 305(b) + SelectionMerge 332 None + BranchConditional 330 331 332 + 331: Label + 333: 7(fvec4) Load 9(v) + 334: 7(fvec4) Load 11(uv4) + 335: 179(bvec4) FOrdGreaterThanEqual 333 334 + 336: 178(bool) Any 335 + Branch 332 + 332: Label + 337: 178(bool) Phi 330 324 336 331 + Store 305(b) 337 + 338: 178(bool) Load 305(b) + SelectionMerge 340 None + BranchConditional 338 339 340 + 339: Label + 341: 179(bvec4) Load 181(ub41) + 343: 179(bvec4) Load 342(ub42) + 344: 179(bvec4) LogicalEqual 341 343 + 345: 178(bool) Any 344 + Branch 340 + 340: Label + 346: 178(bool) Phi 338 332 345 339 + Store 305(b) 346 + 347: 178(bool) Load 305(b) + SelectionMerge 349 None + BranchConditional 347 348 349 + 348: Label + 350: 179(bvec4) Load 181(ub41) + 351: 179(bvec4) Load 342(ub42) + 352: 179(bvec4) LogicalNotEqual 350 351 + 353: 178(bool) Any 352 + Branch 349 + 349: Label + 354: 178(bool) Phi 347 340 353 348 + Store 305(b) 354 + 355: 178(bool) Load 305(b) + 356: 179(bvec4) Load 181(ub41) + 357: 178(bool) Any 356 + 358: 178(bool) LogicalAnd 355 357 + Store 305(b) 358 + 359: 178(bool) Load 305(b) + 360: 179(bvec4) Load 181(ub41) + 361: 178(bool) All 360 + 362: 178(bool) LogicalAnd 359 361 + Store 305(b) 362 + 363: 178(bool) Load 305(b) + SelectionMerge 365 None + BranchConditional 363 364 365 + 364: Label + 366: 179(bvec4) Load 181(ub41) + 367: 179(bvec4) LogicalNot 366 + 368: 178(bool) Any 367 + Branch 365 + 365: Label + 369: 178(bool) Phi 363 349 368 364 + Store 305(b) 369 + 370: 18(int) Load 20(i) + 371: 18(int) Load 22(ui) + 372: 18(int) IAdd 370 371 + 373: 18(int) Load 20(i) + 374: 18(int) IMul 372 373 + 375: 18(int) Load 22(ui) + 376: 18(int) ISub 374 375 + 377: 18(int) Load 20(i) + 378: 18(int) SDiv 376 377 + Store 20(i) 378 + 379: 18(int) Load 20(i) + 380: 18(int) Load 22(ui) + 381: 18(int) SMod 379 380 + Store 20(i) 381 + 382: 18(int) Load 20(i) + 383: 18(int) Load 22(ui) + 384: 178(bool) IEqual 382 383 + 385: 178(bool) LogicalNot 384 + SelectionMerge 387 None + BranchConditional 385 386 387 + 386: Label + 388: 18(int) Load 20(i) + 389: 18(int) Load 22(ui) + 390: 178(bool) INotEqual 388 389 + SelectionMerge 392 None + BranchConditional 390 391 392 + 391: Label + 393: 18(int) Load 20(i) + 394: 18(int) Load 22(ui) + 395: 178(bool) IEqual 393 394 + Branch 392 + 392: Label + 396: 178(bool) Phi 390 386 395 391 + 397: 18(int) Load 20(i) + 399: 178(bool) INotEqual 397 398 + 400: 178(bool) LogicalNotEqual 396 399 + Branch 387 + 387: Label + 401: 178(bool) Phi 384 365 400 392 + SelectionMerge 403 None + BranchConditional 401 402 403 + 402: Label + 404: 18(int) Load 20(i) + 406: 18(int) IAdd 404 405 + Store 20(i) 406 + Branch 403 + 403: Label + 407: 6(float) Load 212(uf) + 408: 6(float) Load 212(uf) + 409: 6(float) FAdd 407 408 + 410: 6(float) Load 212(uf) + 411: 6(float) FMul 409 410 + 412: 6(float) Load 212(uf) + 413: 6(float) FSub 411 412 + 414: 6(float) Load 212(uf) + 415: 6(float) FDiv 413 414 + Store 188(f) 415 + 416: 7(fvec4) Load 9(v) + 417: 6(float) ExtInst 1(GLSL.std.450) 66(Length) 416 + 418: 6(float) Load 188(f) + 419: 6(float) FAdd 418 417 + Store 188(f) 419 + 420: 7(fvec4) Load 9(v) + 421: 7(fvec4) Load 9(v) + 422: 6(float) ExtInst 1(GLSL.std.450) 67(Distance) 420 421 + 423: 6(float) Load 188(f) + 424: 6(float) FAdd 423 422 + Store 188(f) 424 + 425: 7(fvec4) Load 9(v) + 426: 7(fvec4) Load 9(v) + 427: 6(float) Dot 425 426 + 428: 6(float) Load 188(f) + 429: 6(float) FAdd 428 427 + Store 188(f) 429 + 430: 6(float) Load 188(f) + 431: 6(float) Load 212(uf) + 432: 6(float) FMul 430 431 + 433: 6(float) Load 188(f) + 434: 6(float) FAdd 433 432 + Store 188(f) 434 + 436: 7(fvec4) Load 9(v) + 437: 435(fvec3) VectorShuffle 436 436 0 1 2 + 438: 7(fvec4) Load 9(v) + 439: 435(fvec3) VectorShuffle 438 438 0 1 2 + 440: 435(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 437 439 + 441: 6(float) CompositeExtract 440 0 + 442: 6(float) Load 188(f) + 443: 6(float) FAdd 442 441 + Store 188(f) 443 + 444: 6(float) Load 188(f) + 445: 6(float) Load 212(uf) + 446: 178(bool) FOrdEqual 444 445 + 447: 178(bool) LogicalNot 446 + SelectionMerge 449 None + BranchConditional 447 448 449 + 448: Label + 450: 6(float) Load 188(f) + 451: 6(float) Load 212(uf) + 452: 178(bool) FOrdNotEqual 450 451 + 453: 6(float) Load 188(f) + 455: 178(bool) FOrdNotEqual 453 454 + 456: 178(bool) LogicalAnd 452 455 + Branch 449 + 449: Label + 457: 178(bool) Phi 446 403 456 448 + SelectionMerge 459 None + BranchConditional 457 458 459 + 458: Label + 460: 6(float) Load 188(f) + 462: 6(float) FAdd 460 461 + Store 188(f) 462 + Branch 459 + 459: Label + 463: 18(int) Load 22(ui) + 464: 18(int) Load 20(i) + 465: 18(int) BitwiseAnd 464 463 + Store 20(i) 465 + 467: 18(int) Load 20(i) + 468: 18(int) BitwiseOr 467 466 + Store 20(i) 468 + 469: 18(int) Load 22(ui) + 470: 18(int) Load 20(i) + 471: 18(int) BitwiseXor 470 469 + Store 20(i) 471 + 473: 18(int) Load 20(i) + 474: 18(int) SMod 473 472 + Store 20(i) 474 + 475: 18(int) Load 20(i) + 476: 18(int) ShiftRightArithmetic 475 398 + Store 20(i) 476 + 477: 18(int) Load 22(ui) + 478: 18(int) Load 20(i) + 479: 18(int) ShiftLeftLogical 478 477 + Store 20(i) 479 + 480: 18(int) Load 20(i) + 481: 18(int) Not 480 + Store 20(i) 481 + 482: 178(bool) Load 305(b) + 483: 178(bool) LogicalNot 482 + Store 305(b) 483 + 487: 178(bool) Load 305(b) + SelectionMerge 489 None + BranchConditional 487 488 498 + 488: Label + 490: 18(int) Load 20(i) + 491: 6(float) ConvertSToF 490 + 492: 7(fvec4) CompositeConstruct 491 491 491 491 + 493: 6(float) Load 188(f) + 494: 7(fvec4) CompositeConstruct 493 493 493 493 + 495: 7(fvec4) FAdd 492 494 + 496: 7(fvec4) Load 9(v) + 497: 7(fvec4) FAdd 495 496 + Store 486 497 + Branch 489 + 498: Label + 499: 7(fvec4) Load 9(v) + Store 486 499 + Branch 489 + 489: Label + 500: 7(fvec4) Load 486 + Store 485(FragColor) 500 + Store 503(m1) 509 + Store 510(m2) 512 + 514: 178(bool) Load 305(b) + SelectionMerge 516 None + BranchConditional 514 515 518 + 515: Label + 517: 501 Load 503(m1) + Store 513 517 + Branch 516 + 518: Label + 519: 501 Load 510(m2) + Store 513 519 + Branch 516 + 516: Label + 520: 8(ptr) AccessChain 513 405 + 521: 7(fvec4) Load 520 + 522: 7(fvec4) Load 485(FragColor) + 523: 7(fvec4) FAdd 522 521 + Store 485(FragColor) 523 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.accessChain.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.accessChain.frag.out new file mode 100755 index 0000000..b319cfd --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.accessChain.frag.out @@ -0,0 +1,329 @@ +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 +// Id's are bound by 206 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 65 158 + ExecutionMode 4 OriginUpperLeft + Source GLSL 420 + Name 4 "main" + Name 8 "S" + MemberName 8(S) 0 "color" + Name 11 "GetColor1(struct-S-vf31;" + Name 10 "i" + Name 18 "GetColor2(struct-S-vf31;i1;" + Name 16 "i" + Name 17 "comp" + Name 22 "GetColor3(struct-S-vf31;i1;" + Name 20 "i" + Name 21 "comp" + Name 26 "GetColor4(struct-S-vf31;i1;" + Name 24 "i" + Name 25 "comp" + Name 30 "GetColor5(struct-S-vf31;i1;" + Name 28 "i" + Name 29 "comp" + Name 34 "GetColor6(struct-S-vf31;i1;" + Name 32 "i" + Name 33 "comp" + Name 38 "GetColor7(struct-S-vf31;i1;" + Name 36 "i" + Name 37 "comp" + Name 42 "GetColor8(struct-S-vf31;i1;" + Name 40 "i" + Name 41 "comp" + Name 46 "GetColor9(struct-S-vf31;i1;" + Name 44 "i" + Name 45 "comp" + Name 50 "GetColor10(struct-S-vf31;i1;" + Name 48 "i" + Name 49 "comp" + Name 54 "GetColor11(struct-S-vf31;i1;" + Name 52 "i" + Name 53 "comp" + Name 58 "GetColor12(struct-S-vf31;i1;" + Name 56 "i" + Name 57 "comp" + Name 62 "GetColor13(struct-S-vf31;i1;" + Name 60 "i" + Name 61 "comp" + Name 65 "OutColor" + Name 153 "s" + Name 158 "u" + Name 159 "param" + Name 163 "param" + Name 167 "param" + Name 171 "param" + Name 175 "param" + Name 179 "param" + Name 183 "param" + Name 187 "param" + Name 191 "param" + Name 195 "param" + Name 199 "param" + Name 203 "param" + Decorate 65(OutColor) Location 0 + Decorate 158(u) Flat + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 3 + 8(S): TypeStruct 7(fvec3) + 9: TypeFunction 2 8(S) + 13: TypeInt 32 1 + 14: TypePointer Function 13(int) + 15: TypeFunction 2 8(S) 14(ptr) + 64: TypePointer Output 7(fvec3) + 65(OutColor): 64(ptr) Variable Output + 66: 13(int) Constant 0 + 67: TypeInt 32 0 + 68: 67(int) Constant 0 + 95: TypeVector 6(float) 2 + 109: 67(int) Constant 2 + 136: TypePointer Output 6(float) + 150: 6(float) Constant 0 + 151: 7(fvec3) ConstantComposite 150 150 150 + 152: TypePointer Function 8(S) + 157: TypePointer Input 13(int) + 158(u): 157(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 153(s): 152(ptr) Variable Function + 159(param): 14(ptr) Variable Function + 163(param): 14(ptr) Variable Function + 167(param): 14(ptr) Variable Function + 171(param): 14(ptr) Variable Function + 175(param): 14(ptr) Variable Function + 179(param): 14(ptr) Variable Function + 183(param): 14(ptr) Variable Function + 187(param): 14(ptr) Variable Function + 191(param): 14(ptr) Variable Function + 195(param): 14(ptr) Variable Function + 199(param): 14(ptr) Variable Function + 203(param): 14(ptr) Variable Function + Store 65(OutColor) 151 + 154: 8(S) Load 153(s) + 155: 2 FunctionCall 11(GetColor1(struct-S-vf31;) 154 + 156: 8(S) Load 153(s) + 160: 13(int) Load 158(u) + Store 159(param) 160 + 161: 2 FunctionCall 18(GetColor2(struct-S-vf31;i1;) 156 159(param) + 162: 8(S) Load 153(s) + 164: 13(int) Load 158(u) + Store 163(param) 164 + 165: 2 FunctionCall 22(GetColor3(struct-S-vf31;i1;) 162 163(param) + 166: 8(S) Load 153(s) + 168: 13(int) Load 158(u) + Store 167(param) 168 + 169: 2 FunctionCall 26(GetColor4(struct-S-vf31;i1;) 166 167(param) + 170: 8(S) Load 153(s) + 172: 13(int) Load 158(u) + Store 171(param) 172 + 173: 2 FunctionCall 30(GetColor5(struct-S-vf31;i1;) 170 171(param) + 174: 8(S) Load 153(s) + 176: 13(int) Load 158(u) + Store 175(param) 176 + 177: 2 FunctionCall 34(GetColor6(struct-S-vf31;i1;) 174 175(param) + 178: 8(S) Load 153(s) + 180: 13(int) Load 158(u) + Store 179(param) 180 + 181: 2 FunctionCall 38(GetColor7(struct-S-vf31;i1;) 178 179(param) + 182: 8(S) Load 153(s) + 184: 13(int) Load 158(u) + Store 183(param) 184 + 185: 2 FunctionCall 42(GetColor8(struct-S-vf31;i1;) 182 183(param) + 186: 8(S) Load 153(s) + 188: 13(int) Load 158(u) + Store 187(param) 188 + 189: 2 FunctionCall 46(GetColor9(struct-S-vf31;i1;) 186 187(param) + 190: 8(S) Load 153(s) + 192: 13(int) Load 158(u) + Store 191(param) 192 + 193: 2 FunctionCall 50(GetColor10(struct-S-vf31;i1;) 190 191(param) + 194: 8(S) Load 153(s) + 196: 13(int) Load 158(u) + Store 195(param) 196 + 197: 2 FunctionCall 54(GetColor11(struct-S-vf31;i1;) 194 195(param) + 198: 8(S) Load 153(s) + 200: 13(int) Load 158(u) + Store 199(param) 200 + 201: 2 FunctionCall 58(GetColor12(struct-S-vf31;i1;) 198 199(param) + 202: 8(S) Load 153(s) + 204: 13(int) Load 158(u) + Store 203(param) 204 + 205: 2 FunctionCall 62(GetColor13(struct-S-vf31;i1;) 202 203(param) + Return + FunctionEnd +11(GetColor1(struct-S-vf31;): 2 Function None 9 + 10(i): 8(S) FunctionParameter + 12: Label + 69: 6(float) CompositeExtract 10(i) 0 0 + 70: 7(fvec3) Load 65(OutColor) + 71: 7(fvec3) CompositeConstruct 69 69 69 + 72: 7(fvec3) FAdd 70 71 + Store 65(OutColor) 72 + Return + FunctionEnd +18(GetColor2(struct-S-vf31;i1;): 2 Function None 15 + 16(i): 8(S) FunctionParameter + 17(comp): 14(ptr) FunctionParameter + 19: Label + 73: 13(int) Load 17(comp) + 74: 7(fvec3) CompositeExtract 16(i) 0 + 75: 6(float) VectorExtractDynamic 74 73 + 76: 7(fvec3) Load 65(OutColor) + 77: 7(fvec3) CompositeConstruct 75 75 75 + 78: 7(fvec3) FAdd 76 77 + Store 65(OutColor) 78 + Return + FunctionEnd +22(GetColor3(struct-S-vf31;i1;): 2 Function None 15 + 20(i): 8(S) FunctionParameter + 21(comp): 14(ptr) FunctionParameter + 23: Label + 79: 13(int) Load 21(comp) + 80: 7(fvec3) CompositeExtract 20(i) 0 + 81: 6(float) VectorExtractDynamic 80 79 + 82: 7(fvec3) Load 65(OutColor) + 83: 7(fvec3) CompositeConstruct 81 81 81 + 84: 7(fvec3) FAdd 82 83 + Store 65(OutColor) 84 + Return + FunctionEnd +26(GetColor4(struct-S-vf31;i1;): 2 Function None 15 + 24(i): 8(S) FunctionParameter + 25(comp): 14(ptr) FunctionParameter + 27: Label + 85: 13(int) Load 25(comp) + 86: 7(fvec3) CompositeExtract 24(i) 0 + 87: 6(float) VectorExtractDynamic 86 85 + 88: 7(fvec3) Load 65(OutColor) + 89: 7(fvec3) CompositeConstruct 87 87 87 + 90: 7(fvec3) FAdd 88 89 + Store 65(OutColor) 90 + Return + FunctionEnd +30(GetColor5(struct-S-vf31;i1;): 2 Function None 15 + 28(i): 8(S) FunctionParameter + 29(comp): 14(ptr) FunctionParameter + 31: Label + 91: 7(fvec3) CompositeExtract 28(i) 0 + 92: 7(fvec3) Load 65(OutColor) + 93: 7(fvec3) FAdd 92 91 + Store 65(OutColor) 93 + Return + FunctionEnd +34(GetColor6(struct-S-vf31;i1;): 2 Function None 15 + 32(i): 8(S) FunctionParameter + 33(comp): 14(ptr) FunctionParameter + 35: Label + 94: 13(int) Load 33(comp) + 96: 7(fvec3) CompositeExtract 32(i) 0 + 97: 95(fvec2) VectorShuffle 96 96 1 0 + 98: 6(float) VectorExtractDynamic 97 94 + 99: 7(fvec3) Load 65(OutColor) + 100: 7(fvec3) CompositeConstruct 98 98 98 + 101: 7(fvec3) FAdd 99 100 + Store 65(OutColor) 101 + Return + FunctionEnd +38(GetColor7(struct-S-vf31;i1;): 2 Function None 15 + 36(i): 8(S) FunctionParameter + 37(comp): 14(ptr) FunctionParameter + 39: Label + 102: 7(fvec3) CompositeExtract 36(i) 0 + 103: 95(fvec2) VectorShuffle 102 102 0 1 + 104: 7(fvec3) Load 65(OutColor) + 105: 95(fvec2) VectorShuffle 104 104 0 1 + 106: 95(fvec2) FAdd 105 103 + 107: 7(fvec3) Load 65(OutColor) + 108: 7(fvec3) VectorShuffle 107 106 3 4 2 + Store 65(OutColor) 108 + Return + FunctionEnd +42(GetColor8(struct-S-vf31;i1;): 2 Function None 15 + 40(i): 8(S) FunctionParameter + 41(comp): 14(ptr) FunctionParameter + 43: Label + 110: 6(float) CompositeExtract 40(i) 0 2 + 111: 7(fvec3) Load 65(OutColor) + 112: 7(fvec3) CompositeConstruct 110 110 110 + 113: 7(fvec3) FAdd 111 112 + Store 65(OutColor) 113 + Return + FunctionEnd +46(GetColor9(struct-S-vf31;i1;): 2 Function None 15 + 44(i): 8(S) FunctionParameter + 45(comp): 14(ptr) FunctionParameter + 47: Label + 114: 7(fvec3) CompositeExtract 44(i) 0 + 115: 7(fvec3) Load 65(OutColor) + 116: 7(fvec3) VectorShuffle 115 115 2 0 1 + 117: 7(fvec3) FAdd 116 114 + 118: 7(fvec3) Load 65(OutColor) + 119: 7(fvec3) VectorShuffle 118 117 4 5 3 + Store 65(OutColor) 119 + Return + FunctionEnd +50(GetColor10(struct-S-vf31;i1;): 2 Function None 15 + 48(i): 8(S) FunctionParameter + 49(comp): 14(ptr) FunctionParameter + 51: Label + 120: 7(fvec3) CompositeExtract 48(i) 0 + 121: 95(fvec2) VectorShuffle 120 120 0 1 + 122: 7(fvec3) Load 65(OutColor) + 123: 95(fvec2) VectorShuffle 122 122 2 1 + 124: 95(fvec2) FAdd 123 121 + 125: 7(fvec3) Load 65(OutColor) + 126: 7(fvec3) VectorShuffle 125 124 0 4 3 + Store 65(OutColor) 126 + Return + FunctionEnd +54(GetColor11(struct-S-vf31;i1;): 2 Function None 15 + 52(i): 8(S) FunctionParameter + 53(comp): 14(ptr) FunctionParameter + 55: Label + 127: 7(fvec3) CompositeExtract 52(i) 0 + 128: 95(fvec2) VectorShuffle 127 127 0 1 + 129: 7(fvec3) Load 65(OutColor) + 130: 95(fvec2) VectorShuffle 129 129 0 2 + 131: 95(fvec2) FAdd 130 128 + 132: 7(fvec3) Load 65(OutColor) + 133: 7(fvec3) VectorShuffle 132 131 3 1 4 + Store 65(OutColor) 133 + Return + FunctionEnd +58(GetColor12(struct-S-vf31;i1;): 2 Function None 15 + 56(i): 8(S) FunctionParameter + 57(comp): 14(ptr) FunctionParameter + 59: Label + 134: 13(int) Load 57(comp) + 135: 6(float) CompositeExtract 56(i) 0 0 + 137: 136(ptr) AccessChain 65(OutColor) 134 + 138: 6(float) Load 137 + 139: 6(float) FAdd 138 135 + 140: 136(ptr) AccessChain 65(OutColor) 134 + Store 140 139 + Return + FunctionEnd +62(GetColor13(struct-S-vf31;i1;): 2 Function None 15 + 60(i): 8(S) FunctionParameter + 61(comp): 14(ptr) FunctionParameter + 63: Label + 141: 13(int) Load 61(comp) + 142: 6(float) CompositeExtract 60(i) 0 0 + 143: 7(fvec3) Load 65(OutColor) + 144: 95(fvec2) VectorShuffle 143 143 2 1 + 145: 6(float) VectorExtractDynamic 144 141 + 146: 6(float) FAdd 145 142 + 147: 7(fvec3) Load 65(OutColor) + 148: 7(fvec3) VectorShuffle 147 147 2 1 2 + 149: 7(fvec3) VectorInsertDynamic 148 146 141 + Store 65(OutColor) 149 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.aggOps.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.aggOps.frag.out new file mode 100644 index 0000000..c3ceb9a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.aggOps.frag.out @@ -0,0 +1,313 @@ +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 +// Id's are bound by 215 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 16 41 101 213 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + Name 4 "main" + Name 8 "s1" + MemberName 8(s1) 0 "i" + MemberName 8(s1) 1 "f" + Name 13 "a" + Name 16 "u" + Name 37 "b" + Name 41 "w" + Name 55 "s1" + MemberName 55(s1) 0 "i" + MemberName 55(s1) 1 "f" + Name 56 "s2" + MemberName 56(s2) 0 "i" + MemberName 56(s2) 1 "f" + MemberName 56(s2) 2 "s1_1" + Name 57 "ub1" + MemberName 57(ub1) 0 "foo2a" + Name 59 "uName1" + Name 64 "s1" + MemberName 64(s1) 0 "i" + MemberName 64(s1) 1 "f" + Name 65 "s2" + MemberName 65(s2) 0 "i" + MemberName 65(s2) 1 "f" + MemberName 65(s2) 2 "s1_1" + Name 66 "ub2" + MemberName 66(ub2) 0 "foo2b" + Name 68 "uName2" + Name 93 "v" + Name 97 "samp2D" + Name 101 "coord" + Name 213 "color" + MemberDecorate 55(s1) 0 Offset 0 + MemberDecorate 55(s1) 1 Offset 4 + MemberDecorate 56(s2) 0 Offset 0 + MemberDecorate 56(s2) 1 Offset 4 + MemberDecorate 56(s2) 2 Offset 16 + MemberDecorate 57(ub1) 0 Offset 0 + Decorate 57(ub1) Block + Decorate 59(uName1) DescriptorSet 0 + MemberDecorate 64(s1) 0 Offset 0 + MemberDecorate 64(s1) 1 Offset 4 + MemberDecorate 65(s2) 0 Offset 0 + MemberDecorate 65(s2) 1 Offset 4 + MemberDecorate 65(s2) 2 Offset 8 + MemberDecorate 66(ub2) 0 Offset 0 + Decorate 66(ub2) BufferBlock + Decorate 68(uName2) DescriptorSet 0 + Decorate 97(samp2D) DescriptorSet 0 + Decorate 101(coord) RelaxedPrecision + Decorate 102 RelaxedPrecision + Decorate 107 RelaxedPrecision + Decorate 108 RelaxedPrecision + Decorate 129 RelaxedPrecision + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypeFloat 32 + 8(s1): TypeStruct 6(int) 7(float) + 9: TypeInt 32 0 + 10: 9(int) Constant 3 + 11: TypeArray 8(s1) 10 + 12: TypePointer Function 11 + 14: TypeVector 7(float) 4 + 15: TypePointer Input 14(fvec4) + 16(u): 15(ptr) Variable Input + 17: 9(int) Constant 0 + 18: TypePointer Input 7(float) + 22: 9(int) Constant 1 + 26: 9(int) Constant 2 + 33: 6(int) Constant 14 + 34: 7(float) Constant 1096810496 + 35: 8(s1) ConstantComposite 33 34 + 38: 6(int) Constant 17 + 39: 7(float) Constant 1099431936 + 40: 8(s1) ConstantComposite 38 39 + 41(w): 15(ptr) Variable Input + 55(s1): TypeStruct 6(int) 7(float) + 56(s2): TypeStruct 6(int) 7(float) 55(s1) + 57(ub1): TypeStruct 56(s2) + 58: TypePointer Uniform 57(ub1) + 59(uName1): 58(ptr) Variable Uniform + 60: 6(int) Constant 0 + 61: TypePointer Uniform 56(s2) + 64(s1): TypeStruct 6(int) 7(float) + 65(s2): TypeStruct 6(int) 7(float) 64(s1) + 66(ub2): TypeStruct 65(s2) + 67: TypePointer Uniform 66(ub2) + 68(uName2): 67(ptr) Variable Uniform + 69: TypePointer Uniform 65(s2) + 72: TypeBool + 92: TypePointer Function 14(fvec4) + 94: TypeImage 7(float) 2D sampled format:Unknown + 95: TypeSampledImage 94 + 96: TypePointer UniformConstant 95 + 97(samp2D): 96(ptr) Variable UniformConstant + 99: TypeVector 7(float) 2 + 100: TypePointer Input 99(fvec2) + 101(coord): 100(ptr) Variable Input + 106: 7(float) Constant 1073741824 + 112: TypeVector 72(bool) 4 + 117: 7(float) Constant 1077936128 + 126: 7(float) Constant 1082130432 + 132: TypeVector 72(bool) 2 + 137: 7(float) Constant 1084227584 + 173: 7(float) Constant 1086324736 + 209: 7(float) Constant 1088421888 + 212: TypePointer Output 14(fvec4) + 213(color): 212(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 13(a): 12(ptr) Variable Function + 37(b): 12(ptr) Variable Function + 93(v): 92(ptr) Variable Function + 19: 18(ptr) AccessChain 16(u) 17 + 20: 7(float) Load 19 + 21: 6(int) ConvertFToS 20 + 23: 18(ptr) AccessChain 16(u) 22 + 24: 7(float) Load 23 + 25: 8(s1) CompositeConstruct 21 24 + 27: 18(ptr) AccessChain 16(u) 26 + 28: 7(float) Load 27 + 29: 6(int) ConvertFToS 28 + 30: 18(ptr) AccessChain 16(u) 10 + 31: 7(float) Load 30 + 32: 8(s1) CompositeConstruct 29 31 + 36: 11 CompositeConstruct 25 32 35 + Store 13(a) 36 + 42: 18(ptr) AccessChain 41(w) 17 + 43: 7(float) Load 42 + 44: 6(int) ConvertFToS 43 + 45: 18(ptr) AccessChain 41(w) 22 + 46: 7(float) Load 45 + 47: 8(s1) CompositeConstruct 44 46 + 48: 18(ptr) AccessChain 41(w) 26 + 49: 7(float) Load 48 + 50: 6(int) ConvertFToS 49 + 51: 18(ptr) AccessChain 41(w) 10 + 52: 7(float) Load 51 + 53: 8(s1) CompositeConstruct 50 52 + 54: 11 CompositeConstruct 40 47 53 + Store 37(b) 54 + 62: 61(ptr) AccessChain 59(uName1) 60 + 63: 56(s2) Load 62 + 70: 69(ptr) AccessChain 68(uName2) 60 + 71: 65(s2) Load 70 + 73: 6(int) CompositeExtract 63 0 + 74: 6(int) CompositeExtract 71 0 + 75: 72(bool) IEqual 73 74 + 76: 7(float) CompositeExtract 63 1 + 77: 7(float) CompositeExtract 71 1 + 78: 72(bool) FOrdEqual 76 77 + 79: 72(bool) LogicalAnd 75 78 + 80: 55(s1) CompositeExtract 63 2 + 81: 64(s1) CompositeExtract 71 2 + 82: 6(int) CompositeExtract 80 0 + 83: 6(int) CompositeExtract 81 0 + 84: 72(bool) IEqual 82 83 + 85: 7(float) CompositeExtract 80 1 + 86: 7(float) CompositeExtract 81 1 + 87: 72(bool) FOrdEqual 85 86 + 88: 72(bool) LogicalAnd 84 87 + 89: 72(bool) LogicalAnd 79 88 + SelectionMerge 91 None + BranchConditional 89 90 104 + 90: Label + 98: 95 Load 97(samp2D) + 102: 99(fvec2) Load 101(coord) + 103: 14(fvec4) ImageSampleImplicitLod 98 102 + Store 93(v) 103 + Branch 91 + 104: Label + 105: 95 Load 97(samp2D) + 107: 99(fvec2) Load 101(coord) + 108: 99(fvec2) VectorTimesScalar 107 106 + 109: 14(fvec4) ImageSampleImplicitLod 105 108 + Store 93(v) 109 + Branch 91 + 91: Label + 110: 14(fvec4) Load 16(u) + 111: 14(fvec4) Load 93(v) + 113: 112(bvec4) FOrdEqual 110 111 + 114: 72(bool) All 113 + SelectionMerge 116 None + BranchConditional 114 115 116 + 115: Label + 118: 14(fvec4) Load 93(v) + 119: 14(fvec4) VectorTimesScalar 118 117 + Store 93(v) 119 + Branch 116 + 116: Label + 120: 14(fvec4) Load 16(u) + 121: 14(fvec4) Load 93(v) + 122: 112(bvec4) FOrdNotEqual 120 121 + 123: 72(bool) Any 122 + SelectionMerge 125 None + BranchConditional 123 124 125 + 124: Label + 127: 14(fvec4) Load 93(v) + 128: 14(fvec4) VectorTimesScalar 127 126 + Store 93(v) 128 + Branch 125 + 125: Label + 129: 99(fvec2) Load 101(coord) + 130: 14(fvec4) Load 93(v) + 131: 99(fvec2) VectorShuffle 130 130 1 3 + 133: 132(bvec2) FOrdEqual 129 131 + 134: 72(bool) All 133 + SelectionMerge 136 None + BranchConditional 134 135 136 + 135: Label + 138: 14(fvec4) Load 93(v) + 139: 14(fvec4) VectorTimesScalar 138 137 + Store 93(v) 139 + Branch 136 + 136: Label + 140: 11 Load 13(a) + 141: 11 Load 37(b) + 142: 8(s1) CompositeExtract 140 0 + 143: 8(s1) CompositeExtract 141 0 + 144: 6(int) CompositeExtract 142 0 + 145: 6(int) CompositeExtract 143 0 + 146: 72(bool) IEqual 144 145 + 147: 7(float) CompositeExtract 142 1 + 148: 7(float) CompositeExtract 143 1 + 149: 72(bool) FOrdEqual 147 148 + 150: 72(bool) LogicalAnd 146 149 + 151: 8(s1) CompositeExtract 140 1 + 152: 8(s1) CompositeExtract 141 1 + 153: 6(int) CompositeExtract 151 0 + 154: 6(int) CompositeExtract 152 0 + 155: 72(bool) IEqual 153 154 + 156: 7(float) CompositeExtract 151 1 + 157: 7(float) CompositeExtract 152 1 + 158: 72(bool) FOrdEqual 156 157 + 159: 72(bool) LogicalAnd 155 158 + 160: 72(bool) LogicalAnd 150 159 + 161: 8(s1) CompositeExtract 140 2 + 162: 8(s1) CompositeExtract 141 2 + 163: 6(int) CompositeExtract 161 0 + 164: 6(int) CompositeExtract 162 0 + 165: 72(bool) IEqual 163 164 + 166: 7(float) CompositeExtract 161 1 + 167: 7(float) CompositeExtract 162 1 + 168: 72(bool) FOrdEqual 166 167 + 169: 72(bool) LogicalAnd 165 168 + 170: 72(bool) LogicalAnd 160 169 + SelectionMerge 172 None + BranchConditional 170 171 172 + 171: Label + 174: 14(fvec4) Load 93(v) + 175: 14(fvec4) VectorTimesScalar 174 173 + Store 93(v) 175 + Branch 172 + 172: Label + 176: 11 Load 13(a) + 177: 11 Load 37(b) + 178: 8(s1) CompositeExtract 176 0 + 179: 8(s1) CompositeExtract 177 0 + 180: 6(int) CompositeExtract 178 0 + 181: 6(int) CompositeExtract 179 0 + 182: 72(bool) INotEqual 180 181 + 183: 7(float) CompositeExtract 178 1 + 184: 7(float) CompositeExtract 179 1 + 185: 72(bool) FOrdNotEqual 183 184 + 186: 72(bool) LogicalOr 182 185 + 187: 8(s1) CompositeExtract 176 1 + 188: 8(s1) CompositeExtract 177 1 + 189: 6(int) CompositeExtract 187 0 + 190: 6(int) CompositeExtract 188 0 + 191: 72(bool) INotEqual 189 190 + 192: 7(float) CompositeExtract 187 1 + 193: 7(float) CompositeExtract 188 1 + 194: 72(bool) FOrdNotEqual 192 193 + 195: 72(bool) LogicalOr 191 194 + 196: 72(bool) LogicalOr 186 195 + 197: 8(s1) CompositeExtract 176 2 + 198: 8(s1) CompositeExtract 177 2 + 199: 6(int) CompositeExtract 197 0 + 200: 6(int) CompositeExtract 198 0 + 201: 72(bool) INotEqual 199 200 + 202: 7(float) CompositeExtract 197 1 + 203: 7(float) CompositeExtract 198 1 + 204: 72(bool) FOrdNotEqual 202 203 + 205: 72(bool) LogicalOr 201 204 + 206: 72(bool) LogicalOr 196 205 + SelectionMerge 208 None + BranchConditional 206 207 208 + 207: Label + 210: 14(fvec4) Load 93(v) + 211: 14(fvec4) VectorTimesScalar 210 209 + Store 93(v) 211 + Branch 208 + 208: Label + 214: 14(fvec4) Load 93(v) + Store 213(color) 214 + Return + FunctionEnd 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 new file mode 100644 index 0000000..652d45c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.always-discard.frag.out @@ -0,0 +1,109 @@ +spv.always-discard.frag +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 84 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 21 59 + ExecutionMode 4 OriginUpperLeft + Source GLSL 140 + Name 4 "main" + Name 9 "white" + Name 12 "black" + Name 15 "color" + Name 18 "x" + Name 21 "tex_coord" + Name 30 "y" + Name 36 "radius" + Name 59 "gl_FragColor" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 10: 6(float) Constant 1065353216 + 11: 7(fvec4) ConstantComposite 10 10 10 10 + 13: 6(float) Constant 1045220557 + 14: 7(fvec4) ConstantComposite 13 13 13 13 + 17: TypePointer Function 6(float) + 19: TypeVector 6(float) 2 + 20: TypePointer Input 19(fvec2) + 21(tex_coord): 20(ptr) Variable Input + 22: TypeInt 32 0 + 23: 22(int) Constant 0 + 24: TypePointer Input 6(float) + 27: 6(float) Constant 1073741824 + 31: 22(int) Constant 1 + 46: TypeBool + 51: 6(float) Constant 1066192077 + 58: TypePointer Output 7(fvec4) +59(gl_FragColor): 58(ptr) Variable Output + 62: 6(float) Constant 1067030938 + 71: 6(float) Constant 1061158912 + 76: 6(float) Constant 1098907648 + 4(main): 2 Function None 3 + 5: Label + 9(white): 8(ptr) Variable Function + 12(black): 8(ptr) Variable Function + 15(color): 8(ptr) Variable Function + 18(x): 17(ptr) Variable Function + 30(y): 17(ptr) Variable Function + 36(radius): 17(ptr) Variable Function + Store 9(white) 11 + Store 12(black) 14 + 16: 7(fvec4) Load 9(white) + Store 15(color) 16 + 25: 24(ptr) AccessChain 21(tex_coord) 23 + 26: 6(float) Load 25 + 28: 6(float) FMul 26 27 + 29: 6(float) FSub 28 10 + Store 18(x) 29 + 32: 24(ptr) AccessChain 21(tex_coord) 31 + 33: 6(float) Load 32 + 34: 6(float) FMul 33 27 + 35: 6(float) FSub 34 10 + Store 30(y) 35 + 37: 6(float) Load 18(x) + 38: 6(float) Load 18(x) + 39: 6(float) FMul 37 38 + 40: 6(float) Load 30(y) + 41: 6(float) Load 30(y) + 42: 6(float) FMul 40 41 + 43: 6(float) FAdd 39 42 + 44: 6(float) ExtInst 1(GLSL.std.450) 31(Sqrt) 43 + Store 36(radius) 44 + 45: 6(float) Load 36(radius) + 47: 46(bool) FOrdGreaterThan 45 10 + SelectionMerge 49 None + BranchConditional 47 48 49 + 48: Label + 50: 6(float) Load 36(radius) + 52: 46(bool) FOrdGreaterThan 50 51 + SelectionMerge 54 None + BranchConditional 52 53 54 + 53: Label + 55: 7(fvec4) Load 15(color) + 56: 7(fvec4) CompositeConstruct 10 10 10 10 + 57: 7(fvec4) FAdd 55 56 + Store 15(color) 57 + Branch 54 + 54: Label + 60: 7(fvec4) Load 15(color) + Store 59(gl_FragColor) 60 + 61: 6(float) Load 36(radius) + 63: 46(bool) FOrdGreaterThan 61 62 + SelectionMerge 65 None + BranchConditional 63 64 65 + 64: Label + 66: 7(fvec4) Load 15(color) + 67: 7(fvec4) CompositeConstruct 10 10 10 10 + 68: 7(fvec4) FAdd 66 67 + Store 15(color) 68 + Branch 65 + 65: Label + Branch 49 + 49: Label + Kill + FunctionEnd 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 new file mode 100755 index 0000000..0bbb9ee --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.always-discard2.frag.out @@ -0,0 +1,62 @@ +spv.always-discard2.frag +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 40 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 21 38 + ExecutionMode 4 OriginUpperLeft + Source GLSL 140 + Name 4 "main" + Name 9 "white" + Name 12 "black" + Name 15 "color" + Name 18 "x" + Name 21 "tex_coord" + Name 30 "y" + Name 38 "gl_FragColor" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 10: 6(float) Constant 1065353216 + 11: 7(fvec4) ConstantComposite 10 10 10 10 + 13: 6(float) Constant 1045220557 + 14: 7(fvec4) ConstantComposite 13 13 13 13 + 17: TypePointer Function 6(float) + 19: TypeVector 6(float) 2 + 20: TypePointer Input 19(fvec2) + 21(tex_coord): 20(ptr) Variable Input + 22: TypeInt 32 0 + 23: 22(int) Constant 0 + 24: TypePointer Input 6(float) + 27: 6(float) Constant 1073741824 + 31: 22(int) Constant 1 + 37: TypePointer Output 7(fvec4) +38(gl_FragColor): 37(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 9(white): 8(ptr) Variable Function + 12(black): 8(ptr) Variable Function + 15(color): 8(ptr) Variable Function + 18(x): 17(ptr) Variable Function + 30(y): 17(ptr) Variable Function + Store 9(white) 11 + Store 12(black) 14 + 16: 7(fvec4) Load 9(white) + Store 15(color) 16 + 25: 24(ptr) AccessChain 21(tex_coord) 23 + 26: 6(float) Load 25 + 28: 6(float) FMul 26 27 + 29: 6(float) FSub 28 10 + Store 18(x) 29 + 32: 24(ptr) AccessChain 21(tex_coord) 31 + 33: 6(float) Load 32 + 34: 6(float) FMul 33 27 + 35: 6(float) FSub 34 10 + Store 30(y) 35 + Kill + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.atomic.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.atomic.comp.out new file mode 100755 index 0000000..97c7f6e --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.atomic.comp.out @@ -0,0 +1,129 @@ +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 + + Capability Shader + Capability AtomicStorage + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "main" + ExecutionMode 4 LocalSize 1 1 1 + Source GLSL 450 + Name 4 "main" + Name 10 "func(au1;" + Name 9 "c" + Name 12 "atoms(" + 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" + 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 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: TypePointer AtomicCounter 6(int) + 8: TypeFunction 6(int) 7(ptr) + 14: 6(int) Constant 1 + 15: 6(int) Constant 0 + 19: 6(int) Constant 1024 + 20(counter): 7(ptr) Variable AtomicCounter + 22: TypePointer Function 6(int) + 24: 6(int) Constant 4 + 25: TypeArray 6(int) 24 + 26: TypePointer AtomicCounter 25 + 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 + 4(main): 2 Function None 3 + 5: Label + 23(val): 22(ptr) Variable Function + MemoryBarrier 14 19 + 21: 6(int) FunctionCall 10(func(au1;) 20(counter) + 30: 7(ptr) AccessChain 27(countArr) 29 + 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 + Return + FunctionEnd + 10(func(au1;): 6(int) Function None 8 + 9(c): 7(ptr) FunctionParameter + 11: Label + 16: 6(int) AtomicIIncrement 9(c) 14 15 + ReturnValue 16 + 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 + 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 new file mode 100644 index 0000000..07dd729 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bitCast.frag.out @@ -0,0 +1,236 @@ +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 +// Id's are bound by 172 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 14 26 37 48 89 98 107 116 122 130 139 148 154 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + Name 4 "main" + Name 9 "idata" + Name 14 "f1" + Name 26 "f2" + Name 37 "f3" + Name 48 "f4" + Name 55 "udata" + Name 85 "fdata" + Name 89 "i1" + Name 98 "i2" + Name 107 "i3" + Name 116 "i4" + Name 122 "u1" + Name 130 "u2" + Name 139 "u3" + Name 148 "u4" + Name 154 "fragColor" + Decorate 89(i1) Flat + Decorate 98(i2) Flat + Decorate 107(i3) Flat + Decorate 116(i4) Flat + Decorate 122(u1) Flat + Decorate 130(u2) Flat + Decorate 139(u3) Flat + Decorate 148(u4) Flat + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypeVector 6(int) 4 + 8: TypePointer Function 7(ivec4) + 10: 6(int) Constant 0 + 11: 7(ivec4) ConstantComposite 10 10 10 10 + 12: TypeFloat 32 + 13: TypePointer Input 12(float) + 14(f1): 13(ptr) Variable Input + 17: TypeInt 32 0 + 18: 17(int) Constant 0 + 19: TypePointer Function 6(int) + 24: TypeVector 12(float) 2 + 25: TypePointer Input 24(fvec2) + 26(f2): 25(ptr) Variable Input + 28: TypeVector 6(int) 2 + 35: TypeVector 12(float) 3 + 36: TypePointer Input 35(fvec3) + 37(f3): 36(ptr) Variable Input + 39: TypeVector 6(int) 3 + 46: TypeVector 12(float) 4 + 47: TypePointer Input 46(fvec4) + 48(f4): 47(ptr) Variable Input + 53: TypeVector 17(int) 4 + 54: TypePointer Function 53(ivec4) + 56: 53(ivec4) ConstantComposite 18 18 18 18 + 59: TypePointer Function 17(int) + 65: TypeVector 17(int) 2 + 73: TypeVector 17(int) 3 + 84: TypePointer Function 46(fvec4) + 86: 12(float) Constant 0 + 87: 46(fvec4) ConstantComposite 86 86 86 86 + 88: TypePointer Input 6(int) + 89(i1): 88(ptr) Variable Input + 92: TypePointer Function 12(float) + 97: TypePointer Input 28(ivec2) + 98(i2): 97(ptr) Variable Input + 106: TypePointer Input 39(ivec3) + 107(i3): 106(ptr) Variable Input + 115: TypePointer Input 7(ivec4) + 116(i4): 115(ptr) Variable Input + 121: TypePointer Input 17(int) + 122(u1): 121(ptr) Variable Input + 129: TypePointer Input 65(ivec2) + 130(u2): 129(ptr) Variable Input + 138: TypePointer Input 73(ivec3) + 139(u3): 138(ptr) Variable Input + 147: TypePointer Input 53(ivec4) + 148(u4): 147(ptr) Variable Input + 153: TypePointer Output 46(fvec4) + 154(fragColor): 153(ptr) Variable Output + 159: TypeBool + 160: TypeVector 159(bool) 4 + 168: 12(float) Constant 1045220557 + 169: 46(fvec4) ConstantComposite 168 168 168 168 + 4(main): 2 Function None 3 + 5: Label + 9(idata): 8(ptr) Variable Function + 55(udata): 54(ptr) Variable Function + 85(fdata): 84(ptr) Variable Function + 155: 84(ptr) Variable Function + Store 9(idata) 11 + 15: 12(float) Load 14(f1) + 16: 6(int) Bitcast 15 + 20: 19(ptr) AccessChain 9(idata) 18 + 21: 6(int) Load 20 + 22: 6(int) IAdd 21 16 + 23: 19(ptr) AccessChain 9(idata) 18 + Store 23 22 + 27: 24(fvec2) Load 26(f2) + 29: 28(ivec2) Bitcast 27 + 30: 7(ivec4) Load 9(idata) + 31: 28(ivec2) VectorShuffle 30 30 0 1 + 32: 28(ivec2) IAdd 31 29 + 33: 7(ivec4) Load 9(idata) + 34: 7(ivec4) VectorShuffle 33 32 4 5 2 3 + Store 9(idata) 34 + 38: 35(fvec3) Load 37(f3) + 40: 39(ivec3) Bitcast 38 + 41: 7(ivec4) Load 9(idata) + 42: 39(ivec3) VectorShuffle 41 41 0 1 2 + 43: 39(ivec3) IAdd 42 40 + 44: 7(ivec4) Load 9(idata) + 45: 7(ivec4) VectorShuffle 44 43 4 5 6 3 + Store 9(idata) 45 + 49: 46(fvec4) Load 48(f4) + 50: 7(ivec4) Bitcast 49 + 51: 7(ivec4) Load 9(idata) + 52: 7(ivec4) IAdd 51 50 + Store 9(idata) 52 + Store 55(udata) 56 + 57: 12(float) Load 14(f1) + 58: 17(int) Bitcast 57 + 60: 59(ptr) AccessChain 55(udata) 18 + 61: 17(int) Load 60 + 62: 17(int) IAdd 61 58 + 63: 59(ptr) AccessChain 55(udata) 18 + Store 63 62 + 64: 24(fvec2) Load 26(f2) + 66: 65(ivec2) Bitcast 64 + 67: 53(ivec4) Load 55(udata) + 68: 65(ivec2) VectorShuffle 67 67 0 1 + 69: 65(ivec2) IAdd 68 66 + 70: 53(ivec4) Load 55(udata) + 71: 53(ivec4) VectorShuffle 70 69 4 5 2 3 + Store 55(udata) 71 + 72: 35(fvec3) Load 37(f3) + 74: 73(ivec3) Bitcast 72 + 75: 53(ivec4) Load 55(udata) + 76: 73(ivec3) VectorShuffle 75 75 0 1 2 + 77: 73(ivec3) IAdd 76 74 + 78: 53(ivec4) Load 55(udata) + 79: 53(ivec4) VectorShuffle 78 77 4 5 6 3 + Store 55(udata) 79 + 80: 46(fvec4) Load 48(f4) + 81: 53(ivec4) Bitcast 80 + 82: 53(ivec4) Load 55(udata) + 83: 53(ivec4) IAdd 82 81 + Store 55(udata) 83 + Store 85(fdata) 87 + 90: 6(int) Load 89(i1) + 91: 12(float) Bitcast 90 + 93: 92(ptr) AccessChain 85(fdata) 18 + 94: 12(float) Load 93 + 95: 12(float) FAdd 94 91 + 96: 92(ptr) AccessChain 85(fdata) 18 + Store 96 95 + 99: 28(ivec2) Load 98(i2) + 100: 24(fvec2) Bitcast 99 + 101: 46(fvec4) Load 85(fdata) + 102: 24(fvec2) VectorShuffle 101 101 0 1 + 103: 24(fvec2) FAdd 102 100 + 104: 46(fvec4) Load 85(fdata) + 105: 46(fvec4) VectorShuffle 104 103 4 5 2 3 + Store 85(fdata) 105 + 108: 39(ivec3) Load 107(i3) + 109: 35(fvec3) Bitcast 108 + 110: 46(fvec4) Load 85(fdata) + 111: 35(fvec3) VectorShuffle 110 110 0 1 2 + 112: 35(fvec3) FAdd 111 109 + 113: 46(fvec4) Load 85(fdata) + 114: 46(fvec4) VectorShuffle 113 112 4 5 6 3 + Store 85(fdata) 114 + 117: 7(ivec4) Load 116(i4) + 118: 46(fvec4) Bitcast 117 + 119: 46(fvec4) Load 85(fdata) + 120: 46(fvec4) FAdd 119 118 + Store 85(fdata) 120 + 123: 17(int) Load 122(u1) + 124: 12(float) Bitcast 123 + 125: 92(ptr) AccessChain 85(fdata) 18 + 126: 12(float) Load 125 + 127: 12(float) FAdd 126 124 + 128: 92(ptr) AccessChain 85(fdata) 18 + Store 128 127 + 131: 65(ivec2) Load 130(u2) + 132: 24(fvec2) Bitcast 131 + 133: 46(fvec4) Load 85(fdata) + 134: 24(fvec2) VectorShuffle 133 133 0 1 + 135: 24(fvec2) FAdd 134 132 + 136: 46(fvec4) Load 85(fdata) + 137: 46(fvec4) VectorShuffle 136 135 4 5 2 3 + Store 85(fdata) 137 + 140: 73(ivec3) Load 139(u3) + 141: 35(fvec3) Bitcast 140 + 142: 46(fvec4) Load 85(fdata) + 143: 35(fvec3) VectorShuffle 142 142 0 1 2 + 144: 35(fvec3) FAdd 143 141 + 145: 46(fvec4) Load 85(fdata) + 146: 46(fvec4) VectorShuffle 145 144 4 5 6 3 + Store 85(fdata) 146 + 149: 53(ivec4) Load 148(u4) + 150: 46(fvec4) Bitcast 149 + 151: 46(fvec4) Load 85(fdata) + 152: 46(fvec4) FAdd 151 150 + Store 85(fdata) 152 + 156: 7(ivec4) Load 9(idata) + 157: 53(ivec4) Bitcast 156 + 158: 53(ivec4) Load 55(udata) + 161: 160(bvec4) IEqual 157 158 + 162: 159(bool) All 161 + SelectionMerge 164 None + BranchConditional 162 163 166 + 163: Label + 165: 46(fvec4) Load 85(fdata) + Store 155 165 + Branch 164 + 166: Label + 167: 46(fvec4) Load 85(fdata) + 170: 46(fvec4) FAdd 167 169 + Store 155 170 + Branch 164 + 164: Label + 171: 46(fvec4) Load 155 + Store 154(fragColor) 171 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bool.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bool.vert.out new file mode 100644 index 0000000..2810ff1 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bool.vert.out @@ -0,0 +1,79 @@ +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 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 24 + Source GLSL 450 + Name 4 "main" + Name 10 "foo(b1;" + Name 9 "b" + Name 22 "gl_PerVertex" + MemberName 22(gl_PerVertex) 0 "gl_Position" + MemberName 22(gl_PerVertex) 1 "gl_PointSize" + MemberName 22(gl_PerVertex) 2 "gl_ClipDistance" + MemberName 22(gl_PerVertex) 3 "gl_CullDistance" + Name 24 "" + Name 27 "ubname" + MemberName 27(ubname) 0 "b" + Name 29 "ubinst" + Name 30 "param" + MemberDecorate 22(gl_PerVertex) 0 BuiltIn Position + MemberDecorate 22(gl_PerVertex) 1 BuiltIn PointSize + MemberDecorate 22(gl_PerVertex) 2 BuiltIn ClipDistance + MemberDecorate 22(gl_PerVertex) 3 BuiltIn CullDistance + Decorate 22(gl_PerVertex) Block + MemberDecorate 27(ubname) 0 Offset 0 + Decorate 27(ubname) Block + Decorate 29(ubinst) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeBool + 7: TypePointer Function 6(bool) + 8: TypeFunction 6(bool) 7(ptr) + 13: 6(bool) ConstantFalse + 17: TypeFloat 32 + 18: TypeVector 17(float) 4 + 19: TypeInt 32 0 + 20: 19(int) Constant 1 + 21: TypeArray 17(float) 20 +22(gl_PerVertex): TypeStruct 18(fvec4) 17(float) 21 21 + 23: TypePointer Output 22(gl_PerVertex) + 24: 23(ptr) Variable Output + 25: TypeInt 32 1 + 26: 25(int) Constant 0 + 27(ubname): TypeStruct 19(int) + 28: TypePointer Uniform 27(ubname) + 29(ubinst): 28(ptr) Variable Uniform + 31: TypePointer Uniform 19(int) + 34: 19(int) Constant 0 + 37: 17(float) Constant 0 + 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) + 4(main): 2 Function None 3 + 5: Label + 30(param): 7(ptr) Variable Function + 32: 31(ptr) AccessChain 29(ubinst) 26 + 33: 19(int) Load 32 + 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 + Return + FunctionEnd + 10(foo(b1;): 6(bool) Function None 8 + 9(b): 7(ptr) FunctionParameter + 11: Label + 12: 6(bool) Load 9(b) + 14: 6(bool) LogicalNotEqual 12 13 + ReturnValue 14 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.boolInBlock.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.boolInBlock.frag.out new file mode 100644 index 0000000..2181f26 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.boolInBlock.frag.out @@ -0,0 +1,165 @@ +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 +// Id's are bound by 107 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 75 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + Name 4 "main" + Name 14 "foo(vb4;vb2;" + Name 12 "paramb4" + Name 13 "paramb2" + Name 17 "b1" + Name 24 "Buffer" + MemberName 24(Buffer) 0 "b2" + Name 26 "" + Name 39 "Uniform" + MemberName 39(Uniform) 0 "b4" + Name 41 "" + Name 62 "param" + Name 67 "param" + Name 75 "fragColor" + MemberDecorate 24(Buffer) 0 Offset 0 + Decorate 24(Buffer) BufferBlock + Decorate 26 DescriptorSet 0 + Decorate 26 Binding 1 + MemberDecorate 39(Uniform) 0 Offset 0 + Decorate 39(Uniform) Block + Decorate 41 DescriptorSet 0 + Decorate 41 Binding 0 + Decorate 75(fragColor) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeBool + 7: TypeVector 6(bool) 4 + 8: TypePointer Function 7(bvec4) + 9: TypeVector 6(bool) 2 + 10: TypePointer Function 9(bvec2) + 11: TypeFunction 2 8(ptr) 10(ptr) + 16: TypePointer Function 6(bool) + 22: TypeInt 32 0 + 23: TypeVector 22(int) 2 + 24(Buffer): TypeStruct 23(ivec2) + 25: TypePointer Uniform 24(Buffer) + 26: 25(ptr) Variable Uniform + 27: TypeInt 32 1 + 28: 27(int) Constant 0 + 29: 6(bool) ConstantFalse + 30: 9(bvec2) ConstantComposite 29 29 + 31: 22(int) Constant 0 + 32: 23(ivec2) ConstantComposite 31 31 + 33: 22(int) Constant 1 + 34: 23(ivec2) ConstantComposite 33 33 + 36: TypePointer Uniform 23(ivec2) + 38: TypeVector 22(int) 4 + 39(Uniform): TypeStruct 38(ivec4) + 40: TypePointer Uniform 39(Uniform) + 41: 40(ptr) Variable Uniform + 42: TypePointer Uniform 38(ivec4) + 65: 38(ivec4) ConstantComposite 31 31 31 31 + 72: TypeFloat 32 + 73: TypeVector 72(float) 4 + 74: TypePointer Output 73(fvec4) + 75(fragColor): 74(ptr) Variable Output + 87: 72(float) Constant 0 + 88: 72(float) Constant 1065353216 + 4(main): 2 Function None 3 + 5: Label + 62(param): 8(ptr) Variable Function + 67(param): 10(ptr) Variable Function + 35: 23(ivec2) Select 30 34 32 + 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 + 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 + 53: 9(bvec2) CompositeConstruct 52 52 + 54: 23(ivec2) Select 53 34 32 + 55: 36(ptr) AccessChain 26 28 + Store 55 54 + Branch 48 + 48: Label + 56: 36(ptr) AccessChain 26 28 + 57: 23(ivec2) Load 56 + 58: 22(int) CompositeExtract 57 0 + 59: 6(bool) INotEqual 58 31 + SelectionMerge 61 None + BranchConditional 59 60 61 + 60: Label + 63: 42(ptr) AccessChain 41 28 + 64: 38(ivec4) Load 63 + 66: 7(bvec4) INotEqual 64 65 + 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 + 71: 36(ptr) AccessChain 26 28 + Store 71 70 + Branch 61 + 61: Label + 76: 42(ptr) AccessChain 41 28 + 77: 38(ivec4) Load 76 + 78: 22(int) CompositeExtract 77 0 + 79: 6(bool) INotEqual 78 31 + 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 + Branch 81 + 81: Label + 86: 6(bool) Phi 79 61 85 80 + 89: 72(float) Select 86 88 87 + 90: 73(fvec4) CompositeConstruct 89 89 89 89 + Store 75(fragColor) 90 + 91: 42(ptr) AccessChain 41 28 + 92: 38(ivec4) Load 91 + 93: 22(int) CompositeExtract 92 0 + 94: 6(bool) INotEqual 93 31 + 95: 6(bool) LogicalNot 94 + SelectionMerge 97 None + BranchConditional 95 96 97 + 96: Label + 98: 42(ptr) AccessChain 41 28 + 99: 38(ivec4) Load 98 + 100: 22(int) CompositeExtract 99 1 + 101: 6(bool) INotEqual 100 31 + Branch 97 + 97: Label + 102: 6(bool) Phi 94 81 101 96 + 103: 72(float) Select 102 88 87 + 104: 73(fvec4) CompositeConstruct 103 103 103 103 + 105: 73(fvec4) Load 75(fragColor) + 106: 73(fvec4) FSub 105 104 + Store 75(fragColor) 106 + Return + FunctionEnd +14(foo(vb4;vb2;): 2 Function None 11 + 12(paramb4): 8(ptr) FunctionParameter + 13(paramb2): 10(ptr) FunctionParameter + 15: Label + 17(b1): 16(ptr) Variable Function + 18: 7(bvec4) Load 12(paramb4) + 19: 6(bool) CompositeExtract 18 2 + Store 17(b1) 19 + 20: 6(bool) Load 17(b1) + 21: 9(bvec2) CompositeConstruct 20 20 + Store 13(paramb2) 21 + Return + FunctionEnd 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 new file mode 100644 index 0000000..9093135 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.branch-return.vert.out @@ -0,0 +1,67 @@ +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 +// Id's are bound by 38 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 8 20 + Source ESSL 310 + Name 4 "main" + Name 8 "gl_InstanceIndex" + Name 18 "gl_PerVertex" + MemberName 18(gl_PerVertex) 0 "gl_Position" + MemberName 18(gl_PerVertex) 1 "gl_PointSize" + Name 20 "" + Decorate 8(gl_InstanceIndex) BuiltIn InstanceIndex + MemberDecorate 18(gl_PerVertex) 0 BuiltIn Position + MemberDecorate 18(gl_PerVertex) 1 BuiltIn PointSize + Decorate 18(gl_PerVertex) Block + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypePointer Input 6(int) +8(gl_InstanceIndex): 7(ptr) Variable Input + 16: TypeFloat 32 + 17: TypeVector 16(float) 4 +18(gl_PerVertex): TypeStruct 17(fvec4) 16(float) + 19: TypePointer Output 18(gl_PerVertex) + 20: 19(ptr) Variable Output + 21: 6(int) Constant 0 + 22: 16(float) Constant 0 + 23: 17(fvec4) ConstantComposite 22 22 22 22 + 24: TypePointer Output 17(fvec4) + 30: 16(float) Constant 1039918957 + 31: TypeInt 32 0 + 32: 31(int) Constant 0 + 33: TypePointer Output 16(float) + 4(main): 2 Function None 3 + 5: Label + 9: 6(int) Load 8(gl_InstanceIndex) + SelectionMerge 14 None + Switch 9 14 + case 0: 10 + case 1: 11 + case 2: 12 + case 3: 13 + 10: Label + Return + 11: Label + 25: 24(ptr) AccessChain 20 21 + Store 25 23 + Branch 14 + 12: Label + Return + 13: Label + Return + 14: Label + 34: 33(ptr) AccessChain 20 21 32 + 35: 16(float) Load 34 + 36: 16(float) FAdd 35 30 + 37: 33(ptr) AccessChain 20 21 32 + Store 37 36 + Return + FunctionEnd 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 new file mode 100644 index 0000000..8fb6215 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.buffer.autoassign.frag.out @@ -0,0 +1,92 @@ +spv.buffer.autoassign.frag +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 50 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 47 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + Name 10 "@main(" + Name 13 "psout" + Name 16 "MyUB1" + MemberName 16(MyUB1) 0 "g_a" + MemberName 16(MyUB1) 1 "g_b" + Name 18 "" + Name 28 "MyUB2" + MemberName 28(MyUB2) 0 "g_c" + Name 30 "" + Name 34 "MyUB3" + MemberName 34(MyUB3) 0 "g_d" + Name 36 "" + Name 47 "Color" + MemberDecorate 16(MyUB1) 0 Offset 0 + MemberDecorate 16(MyUB1) 1 Offset 4 + Decorate 16(MyUB1) Block + Decorate 18 DescriptorSet 0 + Decorate 18 Binding 20 + MemberDecorate 28(MyUB2) 0 Offset 0 + Decorate 28(MyUB2) Block + Decorate 30 DescriptorSet 0 + Decorate 30 Binding 15 + MemberDecorate 34(MyUB3) 0 Offset 0 + Decorate 34(MyUB3) Block + Decorate 36 DescriptorSet 0 + Decorate 36 Binding 16 + Decorate 47(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: TypePointer Function 8(PS_OUTPUT) + 14: TypeInt 32 1 + 15: 14(int) Constant 0 + 16(MyUB1): TypeStruct 6(float) 14(int) + 17: TypePointer Uniform 16(MyUB1) + 18: 17(ptr) Variable Uniform + 19: TypePointer Uniform 6(float) + 22: 14(int) Constant 1 + 23: TypePointer Uniform 14(int) + 28(MyUB2): TypeStruct 6(float) + 29: TypePointer Uniform 28(MyUB2) + 30: 29(ptr) Variable Uniform + 34(MyUB3): TypeStruct 6(float) + 35: TypePointer Uniform 34(MyUB3) + 36: 35(ptr) Variable Uniform + 41: TypePointer Function 7(fvec4) + 46: TypePointer Output 7(fvec4) + 47(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 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 13(psout): 12(ptr) Variable Function + 20: 19(ptr) AccessChain 18 15 + 21: 6(float) Load 20 + 24: 23(ptr) AccessChain 18 22 + 25: 14(int) Load 24 + 26: 6(float) ConvertSToF 25 + 27: 6(float) FAdd 21 26 + 31: 19(ptr) AccessChain 30 15 + 32: 6(float) Load 31 + 33: 6(float) FAdd 27 32 + 37: 19(ptr) AccessChain 36 15 + 38: 6(float) Load 37 + 39: 6(float) FAdd 33 38 + 40: 7(fvec4) CompositeConstruct 39 39 39 39 + 42: 41(ptr) AccessChain 13(psout) 15 + Store 42 40 + 43:8(PS_OUTPUT) Load 13(psout) + ReturnValue 43 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.conditionalDiscard.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.conditionalDiscard.frag.out new file mode 100755 index 0000000..b3cb8e8 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.conditionalDiscard.frag.out @@ -0,0 +1,59 @@ +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 +// Id's are bound by 36 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 17 34 + ExecutionMode 4 OriginUpperLeft + Source GLSL 400 + Name 4 "main" + Name 9 "v" + Name 13 "tex" + Name 17 "coord" + Name 34 "gl_FragColor" + Decorate 13(tex) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 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 + 21: 6(float) Constant 1036831949 + 22: 6(float) Constant 1045220557 + 23: 6(float) Constant 1050253722 + 24: 6(float) Constant 1053609165 + 25: 7(fvec4) ConstantComposite 21 22 23 24 + 26: TypeBool + 27: TypeVector 26(bool) 4 + 33: TypePointer Output 7(fvec4) +34(gl_FragColor): 33(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 9(v): 8(ptr) Variable Function + 14: 11 Load 13(tex) + 18: 15(fvec2) Load 17(coord) + 19: 7(fvec4) ImageSampleImplicitLod 14 18 + Store 9(v) 19 + 20: 7(fvec4) Load 9(v) + 28: 27(bvec4) FOrdEqual 20 25 + 29: 26(bool) All 28 + SelectionMerge 31 None + BranchConditional 29 30 31 + 30: Label + Kill + 31: Label + 35: 7(fvec4) Load 9(v) + Store 34(gl_FragColor) 35 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.conversion.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.conversion.frag.out new file mode 100755 index 0000000..b38d84e --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.conversion.frag.out @@ -0,0 +1,573 @@ +spv.conversion.frag +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 455 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 39 53 157 322 446 448 450 452 454 + ExecutionMode 4 OriginUpperLeft + Source GLSL 140 + Name 4 "main" + Name 8 "b" + Name 11 "u_i" + Name 18 "u_f" + Name 25 "b2" + Name 33 "b3" + Name 39 "i_i" + Name 45 "b4" + Name 53 "i_f" + Name 58 "i" + Name 68 "i2" + Name 71 "u_f2" + Name 81 "i3" + Name 84 "u_f3" + Name 94 "i4" + Name 97 "u_f4" + Name 106 "f" + Name 110 "f2" + Name 114 "f3" + Name 118 "f4" + Name 157 "i_i4" + Name 322 "gl_FragColor" + Name 417 "cv2" + Name 418 "cv5" + Name 428 "u_b" + Name 430 "u_b2" + Name 432 "u_b3" + Name 434 "u_b4" + Name 436 "u_i2" + Name 438 "u_i3" + Name 440 "u_i4" + Name 441 "i_b" + Name 442 "i_b2" + Name 443 "i_b3" + Name 444 "i_b4" + Name 446 "i_i2" + Name 448 "i_i3" + Name 450 "i_f2" + Name 452 "i_f3" + Name 454 "i_f4" + Decorate 39(i_i) Flat + Decorate 157(i_i4) Flat + Decorate 446(i_i2) Flat + Decorate 448(i_i3) Flat + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeBool + 7: TypePointer Function 6(bool) + 9: TypeInt 32 1 + 10: TypePointer Private 9(int) + 11(u_i): 10(ptr) Variable Private + 13: TypeInt 32 0 + 14: 13(int) Constant 0 + 16: TypeFloat 32 + 17: TypePointer Private 16(float) + 18(u_f): 17(ptr) Variable Private + 20: 16(float) Constant 0 + 23: TypeVector 6(bool) 2 + 24: TypePointer Function 23(bvec2) + 31: TypeVector 6(bool) 3 + 32: TypePointer Function 31(bvec3) + 38: TypePointer Input 9(int) + 39(i_i): 38(ptr) Variable Input + 43: TypeVector 6(bool) 4 + 44: TypePointer Function 43(bvec4) + 52: TypePointer Input 16(float) + 53(i_f): 52(ptr) Variable Input + 57: TypePointer Function 9(int) + 62: 9(int) Constant 0 + 63: 9(int) Constant 1 + 66: TypeVector 9(int) 2 + 67: TypePointer Function 66(ivec2) + 69: TypeVector 16(float) 2 + 70: TypePointer Private 69(fvec2) + 71(u_f2): 70(ptr) Variable Private + 75: 66(ivec2) ConstantComposite 62 62 + 76: 66(ivec2) ConstantComposite 63 63 + 79: TypeVector 9(int) 3 + 80: TypePointer Function 79(ivec3) + 82: TypeVector 16(float) 3 + 83: TypePointer Private 82(fvec3) + 84(u_f3): 83(ptr) Variable Private + 88: 79(ivec3) ConstantComposite 62 62 62 + 89: 79(ivec3) ConstantComposite 63 63 63 + 92: TypeVector 9(int) 4 + 93: TypePointer Function 92(ivec4) + 95: TypeVector 16(float) 4 + 96: TypePointer Private 95(fvec4) + 97(u_f4): 96(ptr) Variable Private + 101: 92(ivec4) ConstantComposite 62 62 62 62 + 102: 92(ivec4) ConstantComposite 63 63 63 63 + 105: TypePointer Function 16(float) + 109: TypePointer Function 69(fvec2) + 113: TypePointer Function 82(fvec3) + 117: TypePointer Function 95(fvec4) + 124: 16(float) Constant 1065353216 + 132: 69(fvec2) ConstantComposite 20 20 + 133: 69(fvec2) ConstantComposite 124 124 + 141: 82(fvec3) ConstantComposite 20 20 20 + 142: 82(fvec3) ConstantComposite 124 124 124 + 150: 95(fvec4) ConstantComposite 20 20 20 20 + 151: 95(fvec4) ConstantComposite 124 124 124 124 + 156: TypePointer Input 92(ivec4) + 157(i_i4): 156(ptr) Variable Input + 159: TypeVector 13(int) 4 + 160: 159(ivec4) ConstantComposite 14 14 14 14 + 315: 13(int) Constant 1 + 321: TypePointer Output 95(fvec4) +322(gl_FragColor): 321(ptr) Variable Output + 367: 13(int) Constant 2 + 380: 13(int) Constant 3 + 427: TypePointer Private 6(bool) + 428(u_b): 427(ptr) Variable Private + 429: TypePointer Private 23(bvec2) + 430(u_b2): 429(ptr) Variable Private + 431: TypePointer Private 31(bvec3) + 432(u_b3): 431(ptr) Variable Private + 433: TypePointer Private 43(bvec4) + 434(u_b4): 433(ptr) Variable Private + 435: TypePointer Private 66(ivec2) + 436(u_i2): 435(ptr) Variable Private + 437: TypePointer Private 79(ivec3) + 438(u_i3): 437(ptr) Variable Private + 439: TypePointer Private 92(ivec4) + 440(u_i4): 439(ptr) Variable Private + 441(i_b): 427(ptr) Variable Private + 442(i_b2): 429(ptr) Variable Private + 443(i_b3): 431(ptr) Variable Private + 444(i_b4): 433(ptr) Variable Private + 445: TypePointer Input 66(ivec2) + 446(i_i2): 445(ptr) Variable Input + 447: TypePointer Input 79(ivec3) + 448(i_i3): 447(ptr) Variable Input + 449: TypePointer Input 69(fvec2) + 450(i_f2): 449(ptr) Variable Input + 451: TypePointer Input 82(fvec3) + 452(i_f3): 451(ptr) Variable Input + 453: TypePointer Input 95(fvec4) + 454(i_f4): 453(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 8(b): 7(ptr) Variable Function + 25(b2): 24(ptr) Variable Function + 33(b3): 32(ptr) Variable Function + 45(b4): 44(ptr) Variable Function + 58(i): 57(ptr) Variable Function + 68(i2): 67(ptr) Variable Function + 81(i3): 80(ptr) Variable Function + 94(i4): 93(ptr) Variable Function + 106(f): 105(ptr) Variable Function + 110(f2): 109(ptr) Variable Function + 114(f3): 113(ptr) Variable Function + 118(f4): 117(ptr) Variable Function + 297: 105(ptr) Variable Function + 307: 105(ptr) Variable Function + 323: 117(ptr) Variable Function + 417(cv2): 93(ptr) Variable Function + 418(cv5): 44(ptr) Variable Function + 12: 9(int) Load 11(u_i) + 15: 6(bool) INotEqual 12 14 + 19: 16(float) Load 18(u_f) + 21: 6(bool) FOrdNotEqual 19 20 + 22: 6(bool) LogicalNotEqual 15 21 + Store 8(b) 22 + 26: 9(int) Load 11(u_i) + 27: 6(bool) INotEqual 26 14 + 28: 16(float) Load 18(u_f) + 29: 6(bool) FOrdNotEqual 28 20 + 30: 23(bvec2) CompositeConstruct 27 29 + Store 25(b2) 30 + 34: 9(int) Load 11(u_i) + 35: 6(bool) INotEqual 34 14 + 36: 16(float) Load 18(u_f) + 37: 6(bool) FOrdNotEqual 36 20 + 40: 9(int) Load 39(i_i) + 41: 6(bool) INotEqual 40 14 + 42: 31(bvec3) CompositeConstruct 35 37 41 + Store 33(b3) 42 + 46: 9(int) Load 11(u_i) + 47: 6(bool) INotEqual 46 14 + 48: 16(float) Load 18(u_f) + 49: 6(bool) FOrdNotEqual 48 20 + 50: 9(int) Load 39(i_i) + 51: 6(bool) INotEqual 50 14 + 54: 16(float) Load 53(i_f) + 55: 6(bool) FOrdNotEqual 54 20 + 56: 43(bvec4) CompositeConstruct 47 49 51 55 + Store 45(b4) 56 + 59: 16(float) Load 18(u_f) + 60: 9(int) ConvertFToS 59 + 61: 6(bool) Load 8(b) + 64: 9(int) Select 61 63 62 + 65: 9(int) IAdd 60 64 + Store 58(i) 65 + 72: 69(fvec2) Load 71(u_f2) + 73: 66(ivec2) ConvertFToS 72 + 74: 23(bvec2) Load 25(b2) + 77: 66(ivec2) Select 74 76 75 + 78: 66(ivec2) IAdd 73 77 + Store 68(i2) 78 + 85: 82(fvec3) Load 84(u_f3) + 86: 79(ivec3) ConvertFToS 85 + 87: 31(bvec3) Load 33(b3) + 90: 79(ivec3) Select 87 89 88 + 91: 79(ivec3) IAdd 86 90 + Store 81(i3) 91 + 98: 95(fvec4) Load 97(u_f4) + 99: 92(ivec4) ConvertFToS 98 + 100: 43(bvec4) Load 45(b4) + 103: 92(ivec4) Select 100 102 101 + 104: 92(ivec4) IAdd 99 103 + Store 94(i4) 104 + 107: 9(int) Load 58(i) + 108: 16(float) ConvertSToF 107 + Store 106(f) 108 + 111: 66(ivec2) Load 68(i2) + 112: 69(fvec2) ConvertSToF 111 + Store 110(f2) 112 + 115: 79(ivec3) Load 81(i3) + 116: 82(fvec3) ConvertSToF 115 + Store 114(f3) 116 + 119: 92(ivec4) Load 94(i4) + 120: 95(fvec4) ConvertSToF 119 + Store 118(f4) 120 + 121: 9(int) Load 58(i) + 122: 16(float) ConvertSToF 121 + 123: 6(bool) Load 8(b) + 125: 16(float) Select 123 124 20 + 126: 16(float) FAdd 122 125 + 127: 16(float) Load 106(f) + 128: 16(float) FAdd 127 126 + Store 106(f) 128 + 129: 66(ivec2) Load 68(i2) + 130: 69(fvec2) ConvertSToF 129 + 131: 23(bvec2) Load 25(b2) + 134: 69(fvec2) Select 131 133 132 + 135: 69(fvec2) FAdd 130 134 + 136: 69(fvec2) Load 110(f2) + 137: 69(fvec2) FSub 136 135 + Store 110(f2) 137 + 138: 79(ivec3) Load 81(i3) + 139: 82(fvec3) ConvertSToF 138 + 140: 31(bvec3) Load 33(b3) + 143: 82(fvec3) Select 140 142 141 + 144: 82(fvec3) FAdd 139 143 + 145: 82(fvec3) Load 114(f3) + 146: 82(fvec3) FDiv 145 144 + Store 114(f3) 146 + 147: 92(ivec4) Load 94(i4) + 148: 95(fvec4) ConvertSToF 147 + 149: 43(bvec4) Load 45(b4) + 152: 95(fvec4) Select 149 151 150 + 153: 95(fvec4) FAdd 148 152 + 154: 95(fvec4) Load 118(f4) + 155: 95(fvec4) FAdd 154 153 + Store 118(f4) 155 + 158: 92(ivec4) Load 157(i_i4) + 161: 43(bvec4) INotEqual 158 160 + 162: 95(fvec4) Select 161 151 150 + 163: 95(fvec4) Load 118(f4) + 164: 95(fvec4) FAdd 163 162 + Store 118(f4) 164 + 165: 95(fvec4) Load 97(u_f4) + 166: 43(bvec4) FOrdNotEqual 165 150 + 167: 95(fvec4) Select 166 151 150 + 168: 95(fvec4) Load 118(f4) + 169: 95(fvec4) FAdd 168 167 + Store 118(f4) 169 + 170: 16(float) Load 106(f) + 171: 9(int) Load 58(i) + 172: 16(float) ConvertSToF 171 + 173: 16(float) FSub 170 172 + 174: 16(float) Load 106(f) + 175: 16(float) FAdd 174 173 + Store 106(f) 175 + 176: 16(float) Load 106(f) + 177: 9(int) Load 58(i) + 178: 16(float) ConvertSToF 177 + 179: 69(fvec2) CompositeConstruct 176 178 + 180: 66(ivec2) Load 68(i2) + 181: 69(fvec2) ConvertSToF 180 + 182: 69(fvec2) FAdd 179 181 + 183: 69(fvec2) Load 110(f2) + 184: 69(fvec2) FAdd 183 182 + Store 110(f2) 184 + 185: 79(ivec3) Load 81(i3) + 186: 82(fvec3) ConvertSToF 185 + 187: 16(float) Load 106(f) + 188: 9(int) Load 58(i) + 189: 16(float) ConvertSToF 188 + 190: 16(float) Load 106(f) + 191: 82(fvec3) CompositeConstruct 187 189 190 + 192: 82(fvec3) FAdd 186 191 + 193: 82(fvec3) Load 114(f3) + 194: 82(fvec3) FAdd 193 192 + Store 114(f3) 194 + 195: 6(bool) Load 8(b) + 196: 16(float) Select 195 124 20 + 197: 9(int) Load 58(i) + 198: 16(float) ConvertSToF 197 + 199: 16(float) Load 106(f) + 200: 9(int) Load 58(i) + 201: 16(float) ConvertSToF 200 + 202: 95(fvec4) CompositeConstruct 196 198 199 201 + 203: 92(ivec4) Load 94(i4) + 204: 95(fvec4) ConvertSToF 203 + 205: 95(fvec4) FAdd 202 204 + 206: 95(fvec4) Load 118(f4) + 207: 95(fvec4) FAdd 206 205 + Store 118(f4) 207 + 208: 16(float) Load 106(f) + 209: 9(int) Load 58(i) + 210: 16(float) ConvertSToF 209 + 211: 69(fvec2) CompositeConstruct 208 210 + 212: 9(int) Load 58(i) + 213: 16(float) ConvertSToF 212 + 214: 69(fvec2) VectorTimesScalar 211 213 + 215: 69(fvec2) Load 110(f2) + 216: 69(fvec2) FAdd 215 214 + Store 110(f2) 216 + 217: 16(float) Load 106(f) + 218: 9(int) Load 58(i) + 219: 16(float) ConvertSToF 218 + 220: 16(float) Load 106(f) + 221: 82(fvec3) CompositeConstruct 217 219 220 + 222: 9(int) Load 58(i) + 223: 16(float) ConvertSToF 222 + 224: 82(fvec3) CompositeConstruct 223 223 223 + 225: 82(fvec3) FAdd 221 224 + 226: 82(fvec3) Load 114(f3) + 227: 82(fvec3) FAdd 226 225 + Store 114(f3) 227 + 228: 9(int) Load 58(i) + 229: 16(float) ConvertSToF 228 + 230: 6(bool) Load 8(b) + 231: 16(float) Select 230 124 20 + 232: 9(int) Load 58(i) + 233: 16(float) ConvertSToF 232 + 234: 16(float) Load 106(f) + 235: 9(int) Load 58(i) + 236: 16(float) ConvertSToF 235 + 237: 95(fvec4) CompositeConstruct 231 233 234 236 + 238: 95(fvec4) CompositeConstruct 229 229 229 229 + 239: 95(fvec4) FSub 238 237 + 240: 95(fvec4) Load 118(f4) + 241: 95(fvec4) FAdd 240 239 + Store 118(f4) 241 + 242: 16(float) Load 106(f) + 243: 9(int) ConvertFToS 242 + 244: 9(int) Load 58(i) + 245: 66(ivec2) CompositeConstruct 243 244 + 246: 66(ivec2) Load 68(i2) + 247: 66(ivec2) IAdd 246 245 + Store 68(i2) 247 + 248: 16(float) Load 106(f) + 249: 9(int) ConvertFToS 248 + 250: 9(int) Load 58(i) + 251: 16(float) Load 106(f) + 252: 9(int) ConvertFToS 251 + 253: 79(ivec3) CompositeConstruct 249 250 252 + 254: 79(ivec3) Load 81(i3) + 255: 79(ivec3) IAdd 254 253 + Store 81(i3) 255 + 256: 6(bool) Load 8(b) + 257: 9(int) Select 256 63 62 + 258: 9(int) Load 58(i) + 259: 16(float) Load 106(f) + 260: 9(int) ConvertFToS 259 + 261: 9(int) Load 58(i) + 262: 92(ivec4) CompositeConstruct 257 258 260 261 + 263: 92(ivec4) Load 94(i4) + 264: 92(ivec4) IAdd 263 262 + Store 94(i4) 264 + 265: 16(float) Load 106(f) + 266: 9(int) Load 58(i) + 267: 16(float) ConvertSToF 266 + 268: 6(bool) FOrdLessThan 265 267 + 269: 6(bool) LogicalNot 268 + SelectionMerge 271 None + BranchConditional 269 270 271 + 270: Label + 272: 9(int) Load 58(i) + 273: 16(float) ConvertSToF 272 + 274: 16(float) Load 106(f) + 275: 6(bool) FOrdLessThan 273 274 + Branch 271 + 271: Label + 276: 6(bool) Phi 268 5 275 270 + 277: 6(bool) LogicalNot 276 + SelectionMerge 279 None + BranchConditional 277 278 279 + 278: Label + 280: 69(fvec2) Load 110(f2) + 281: 66(ivec2) Load 68(i2) + 282: 69(fvec2) ConvertSToF 281 + 283: 23(bvec2) FOrdEqual 280 282 + 284: 6(bool) All 283 + Branch 279 + 279: Label + 285: 6(bool) Phi 276 271 284 278 + 286: 6(bool) LogicalNot 285 + SelectionMerge 288 None + BranchConditional 286 287 288 + 287: Label + 289: 79(ivec3) Load 81(i3) + 290: 82(fvec3) ConvertSToF 289 + 291: 82(fvec3) Load 114(f3) + 292: 31(bvec3) FOrdNotEqual 290 291 + 293: 6(bool) Any 292 + Branch 288 + 288: Label + 294: 6(bool) Phi 285 279 293 287 + SelectionMerge 296 None + BranchConditional 294 295 296 + 295: Label + 298: 6(bool) Load 8(b) + SelectionMerge 300 None + BranchConditional 298 299 303 + 299: Label + 301: 9(int) Load 58(i) + 302: 16(float) ConvertSToF 301 + Store 297 302 + Branch 300 + 303: Label + 304: 105(ptr) AccessChain 110(f2) 14 + 305: 16(float) Load 304 + Store 297 305 + Branch 300 + 300: Label + 306: 16(float) Load 297 + 308: 23(bvec2) Load 25(b2) + 309: 6(bool) CompositeExtract 308 0 + SelectionMerge 311 None + BranchConditional 309 310 314 + 310: Label + 312: 105(ptr) AccessChain 114(f3) 14 + 313: 16(float) Load 312 + Store 307 313 + Branch 311 + 314: Label + 316: 57(ptr) AccessChain 68(i2) 315 + 317: 9(int) Load 316 + 318: 16(float) ConvertSToF 317 + Store 307 318 + Branch 311 + 311: Label + 319: 16(float) Load 307 + 320: 16(float) FAdd 306 319 + Store 106(f) 320 + Branch 296 + 296: Label + 324: 6(bool) Load 8(b) + 325: 23(bvec2) Load 25(b2) + 326: 6(bool) CompositeExtract 325 0 + 327: 6(bool) LogicalOr 324 326 + 328: 23(bvec2) Load 25(b2) + 329: 6(bool) CompositeExtract 328 1 + 330: 6(bool) LogicalOr 327 329 + 331: 31(bvec3) Load 33(b3) + 332: 6(bool) CompositeExtract 331 0 + 333: 6(bool) LogicalOr 330 332 + 334: 31(bvec3) Load 33(b3) + 335: 6(bool) CompositeExtract 334 1 + 336: 6(bool) LogicalOr 333 335 + 337: 31(bvec3) Load 33(b3) + 338: 6(bool) CompositeExtract 337 2 + 339: 6(bool) LogicalOr 336 338 + 340: 43(bvec4) Load 45(b4) + 341: 6(bool) CompositeExtract 340 0 + 342: 6(bool) LogicalOr 339 341 + 343: 43(bvec4) Load 45(b4) + 344: 6(bool) CompositeExtract 343 1 + 345: 6(bool) LogicalOr 342 344 + 346: 43(bvec4) Load 45(b4) + 347: 6(bool) CompositeExtract 346 2 + 348: 6(bool) LogicalOr 345 347 + 349: 43(bvec4) Load 45(b4) + 350: 6(bool) CompositeExtract 349 3 + 351: 6(bool) LogicalOr 348 350 + SelectionMerge 353 None + BranchConditional 351 352 415 + 352: Label + 354: 9(int) Load 58(i) + 355: 57(ptr) AccessChain 68(i2) 14 + 356: 9(int) Load 355 + 357: 9(int) IAdd 354 356 + 358: 57(ptr) AccessChain 68(i2) 315 + 359: 9(int) Load 358 + 360: 9(int) IAdd 357 359 + 361: 57(ptr) AccessChain 81(i3) 14 + 362: 9(int) Load 361 + 363: 9(int) IAdd 360 362 + 364: 57(ptr) AccessChain 81(i3) 315 + 365: 9(int) Load 364 + 366: 9(int) IAdd 363 365 + 368: 57(ptr) AccessChain 81(i3) 367 + 369: 9(int) Load 368 + 370: 9(int) IAdd 366 369 + 371: 57(ptr) AccessChain 94(i4) 14 + 372: 9(int) Load 371 + 373: 9(int) IAdd 370 372 + 374: 57(ptr) AccessChain 94(i4) 315 + 375: 9(int) Load 374 + 376: 9(int) IAdd 373 375 + 377: 57(ptr) AccessChain 94(i4) 367 + 378: 9(int) Load 377 + 379: 9(int) IAdd 376 378 + 381: 57(ptr) AccessChain 94(i4) 380 + 382: 9(int) Load 381 + 383: 9(int) IAdd 379 382 + 384: 16(float) ConvertSToF 383 + 385: 16(float) Load 106(f) + 386: 16(float) FAdd 384 385 + 387: 105(ptr) AccessChain 110(f2) 14 + 388: 16(float) Load 387 + 389: 16(float) FAdd 386 388 + 390: 105(ptr) AccessChain 110(f2) 315 + 391: 16(float) Load 390 + 392: 16(float) FAdd 389 391 + 393: 105(ptr) AccessChain 114(f3) 14 + 394: 16(float) Load 393 + 395: 16(float) FAdd 392 394 + 396: 105(ptr) AccessChain 114(f3) 315 + 397: 16(float) Load 396 + 398: 16(float) FAdd 395 397 + 399: 105(ptr) AccessChain 114(f3) 367 + 400: 16(float) Load 399 + 401: 16(float) FAdd 398 400 + 402: 105(ptr) AccessChain 118(f4) 14 + 403: 16(float) Load 402 + 404: 16(float) FAdd 401 403 + 405: 105(ptr) AccessChain 118(f4) 315 + 406: 16(float) Load 405 + 407: 16(float) FAdd 404 406 + 408: 105(ptr) AccessChain 118(f4) 367 + 409: 16(float) Load 408 + 410: 16(float) FAdd 407 409 + 411: 105(ptr) AccessChain 118(f4) 380 + 412: 16(float) Load 411 + 413: 16(float) FAdd 410 412 + 414: 95(fvec4) CompositeConstruct 413 413 413 413 + Store 323 414 + Branch 353 + 415: Label + Store 323 151 + Branch 353 + 353: Label + 416: 95(fvec4) Load 323 + Store 322(gl_FragColor) 416 + Store 417(cv2) 102 + 419: 92(ivec4) Load 417(cv2) + 420: 43(bvec4) INotEqual 419 160 + Store 418(cv5) 420 + 421: 43(bvec4) Load 418(cv5) + 422: 95(fvec4) Select 421 151 150 + 423: 16(float) CompositeExtract 422 0 + 424: 95(fvec4) Load 322(gl_FragColor) + 425: 95(fvec4) CompositeConstruct 423 423 423 423 + 426: 95(fvec4) FAdd 424 425 + Store 322(gl_FragColor) 426 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.dataOut.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.dataOut.frag.out new file mode 100755 index 0000000..9dbe5d1 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.dataOut.frag.out @@ -0,0 +1,35 @@ +spv.dataOut.frag +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 20 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 12 16 + ExecutionMode 4 OriginUpperLeft + Source GLSL 140 + Name 4 "main" + Name 12 "gl_FragData" + Name 16 "Color" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypeInt 32 0 + 9: 8(int) Constant 32 + 10: TypeArray 7(fvec4) 9 + 11: TypePointer Output 10 + 12(gl_FragData): 11(ptr) Variable Output + 13: TypeInt 32 1 + 14: 13(int) Constant 1 + 15: TypePointer Input 7(fvec4) + 16(Color): 15(ptr) Variable Input + 18: TypePointer Output 7(fvec4) + 4(main): 2 Function None 3 + 5: Label + 17: 7(fvec4) Load 16(Color) + 19: 18(ptr) AccessChain 12(gl_FragData) 14 + Store 19 17 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.dataOutIndirect.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.dataOutIndirect.frag.out new file mode 100755 index 0000000..663092f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.dataOutIndirect.frag.out @@ -0,0 +1,47 @@ +spv.dataOutIndirect.frag +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 26 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 12 22 + ExecutionMode 4 OriginUpperLeft + Source GLSL 140 + Name 4 "main" + Name 12 "fcolor" + Name 14 "b" + MemberName 14(b) 0 "i" + Name 16 "bName" + Name 22 "Color" + MemberDecorate 14(b) 0 Offset 0 + Decorate 14(b) Block + Decorate 16(bName) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypeInt 32 0 + 9: 8(int) Constant 4 + 10: TypeArray 7(fvec4) 9 + 11: TypePointer Output 10 + 12(fcolor): 11(ptr) Variable Output + 13: TypeInt 32 1 + 14(b): TypeStruct 13(int) + 15: TypePointer Uniform 14(b) + 16(bName): 15(ptr) Variable Uniform + 17: 13(int) Constant 0 + 18: TypePointer Uniform 13(int) + 21: TypePointer Input 7(fvec4) + 22(Color): 21(ptr) Variable Input + 24: TypePointer Output 7(fvec4) + 4(main): 2 Function None 3 + 5: Label + 19: 18(ptr) AccessChain 16(bName) 17 + 20: 13(int) Load 19 + 23: 7(fvec4) Load 22(Color) + 25: 24(ptr) AccessChain 12(fcolor) 20 + Store 25 23 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.dataOutIndirect.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.dataOutIndirect.vert.out new file mode 100755 index 0000000..1523fab --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.dataOutIndirect.vert.out @@ -0,0 +1,66 @@ +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 +// Id's are bound by 38 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 25 28 34 + Source GLSL 140 + Name 4 "main" + Name 8 "i" + Name 25 "colorOut" + Name 28 "color" + Name 34 "gl_Position" + Decorate 34(gl_Position) BuiltIn Position + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypePointer Function 6(int) + 9: 6(int) Constant 1 + 16: 6(int) Constant 5 + 17: TypeBool + 19: TypeFloat 32 + 20: TypeVector 19(float) 4 + 21: TypeInt 32 0 + 22: 21(int) Constant 6 + 23: TypeArray 20(fvec4) 22 + 24: TypePointer Output 23 + 25(colorOut): 24(ptr) Variable Output + 27: TypePointer Input 20(fvec4) + 28(color): 27(ptr) Variable Input + 30: TypePointer Output 20(fvec4) + 34(gl_Position): 30(ptr) Variable Output + 35: 6(int) Constant 2 + 4(main): 2 Function None 3 + 5: Label + 8(i): 7(ptr) Variable Function + Store 8(i) 9 + Branch 10 + 10: Label + LoopMerge 12 13 None + Branch 14 + 14: Label + 15: 6(int) Load 8(i) + 18: 17(bool) SLessThan 15 16 + BranchConditional 18 11 12 + 11: Label + 26: 6(int) Load 8(i) + 29: 20(fvec4) Load 28(color) + 31: 30(ptr) AccessChain 25(colorOut) 26 + Store 31 29 + Branch 13 + 13: Label + 32: 6(int) Load 8(i) + 33: 6(int) IAdd 32 9 + Store 8(i) 33 + Branch 10 + 12: Label + 36: 30(ptr) AccessChain 25(colorOut) 35 + 37: 20(fvec4) Load 36 + Store 34(gl_Position) 37 + Return + 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 new file mode 100644 index 0000000..b6613ef --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.deepRvalue.frag.out @@ -0,0 +1,194 @@ +spv.deepRvalue.frag +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 150 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 144 + ExecutionMode 4 OriginUpperLeft + Source GLSL 330 + Name 4 "main" + Name 9 "v1" + Name 15 "v2" + Name 21 "v3" + Name 27 "v4" + Name 35 "m" + Name 63 "mm" + Name 80 "f" + Name 87 "g" + 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" + Decorate 111(samp2D) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Private 7(fvec4) + 9(v1): 8(ptr) Variable Private + 10: 6(float) Constant 1073741824 + 11: 6(float) Constant 1077936128 + 12: 6(float) Constant 1084227584 + 13: 6(float) Constant 1088421888 + 14: 7(fvec4) ConstantComposite 10 11 12 13 + 15(v2): 8(ptr) Variable Private + 16: 6(float) Constant 1093664768 + 17: 6(float) Constant 1095761920 + 18: 6(float) Constant 1099431936 + 19: 6(float) Constant 1100480512 + 20: 7(fvec4) ConstantComposite 16 17 18 19 + 21(v3): 8(ptr) Variable Private + 22: 6(float) Constant 1102577664 + 23: 6(float) Constant 1105723392 + 24: 6(float) Constant 1106771968 + 25: 6(float) Constant 1108606976 + 26: 7(fvec4) ConstantComposite 22 23 24 25 + 27(v4): 8(ptr) Variable Private + 28: 6(float) Constant 1109655552 + 29: 6(float) Constant 1110179840 + 30: 6(float) Constant 1111228416 + 31: 6(float) Constant 1112801280 + 32: 7(fvec4) ConstantComposite 28 29 30 31 + 33: TypeMatrix 7(fvec4) 4 + 34: TypePointer Function 33 + 40: 6(float) Constant 1065353216 + 41: 6(float) Constant 0 + 79: TypePointer Function 6(float) + 81: TypeInt 32 1 + 82: 81(int) Constant 1 + 83: TypeInt 32 0 + 84: 83(int) Constant 3 + 103: 81(int) Constant 2 + 104: 83(int) Constant 1 + 108: TypeImage 6(float) 2D sampled format:Unknown + 109: TypeSampledImage 108 + 110: TypePointer UniformConstant 109 + 111(samp2D): 110(ptr) Variable UniformConstant + 113: TypeVector 6(float) 2 + 114: 6(float) Constant 1056964608 + 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 + 4(main): 2 Function None 3 + 5: Label + 35(m): 34(ptr) Variable Function + 63(mm): 34(ptr) Variable Function + 80(f): 79(ptr) Variable Function + 87(g): 79(ptr) Variable Function + 106(h): 79(ptr) Variable Function + 107(i): 79(ptr) Variable Function + 131(t): 130(ptr) Variable Function + Store 9(v1) 14 + Store 15(v2) 20 + Store 21(v3) 26 + Store 27(v4) 32 + 36: 7(fvec4) Load 9(v1) + 37: 7(fvec4) Load 15(v2) + 38: 7(fvec4) Load 21(v3) + 39: 7(fvec4) Load 27(v4) + 42: 6(float) CompositeExtract 36 0 + 43: 6(float) CompositeExtract 36 1 + 44: 6(float) CompositeExtract 36 2 + 45: 6(float) CompositeExtract 36 3 + 46: 6(float) CompositeExtract 37 0 + 47: 6(float) CompositeExtract 37 1 + 48: 6(float) CompositeExtract 37 2 + 49: 6(float) CompositeExtract 37 3 + 50: 6(float) CompositeExtract 38 0 + 51: 6(float) CompositeExtract 38 1 + 52: 6(float) CompositeExtract 38 2 + 53: 6(float) CompositeExtract 38 3 + 54: 6(float) CompositeExtract 39 0 + 55: 6(float) CompositeExtract 39 1 + 56: 6(float) CompositeExtract 39 2 + 57: 6(float) CompositeExtract 39 3 + 58: 7(fvec4) CompositeConstruct 42 43 44 45 + 59: 7(fvec4) CompositeConstruct 46 47 48 49 + 60: 7(fvec4) CompositeConstruct 50 51 52 53 + 61: 7(fvec4) CompositeConstruct 54 55 56 57 + 62: 33 CompositeConstruct 58 59 60 61 + Store 35(m) 62 + 64: 33 Load 35(m) + 65: 33 Load 35(m) + 66: 7(fvec4) CompositeExtract 64 0 + 67: 7(fvec4) CompositeExtract 65 0 + 68: 7(fvec4) FMul 66 67 + 69: 7(fvec4) CompositeExtract 64 1 + 70: 7(fvec4) CompositeExtract 65 1 + 71: 7(fvec4) FMul 69 70 + 72: 7(fvec4) CompositeExtract 64 2 + 73: 7(fvec4) CompositeExtract 65 2 + 74: 7(fvec4) FMul 72 73 + 75: 7(fvec4) CompositeExtract 64 3 + 76: 7(fvec4) CompositeExtract 65 3 + 77: 7(fvec4) FMul 75 76 + 78: 33 CompositeConstruct 68 71 74 77 + Store 63(mm) 78 + 85: 79(ptr) AccessChain 63(mm) 82 84 + 86: 6(float) Load 85 + Store 80(f) 86 + 88: 33 Load 35(m) + 89: 33 Load 35(m) + 90: 7(fvec4) CompositeExtract 88 0 + 91: 7(fvec4) CompositeExtract 89 0 + 92: 7(fvec4) FMul 90 91 + 93: 7(fvec4) CompositeExtract 88 1 + 94: 7(fvec4) CompositeExtract 89 1 + 95: 7(fvec4) FMul 93 94 + 96: 7(fvec4) CompositeExtract 88 2 + 97: 7(fvec4) CompositeExtract 89 2 + 98: 7(fvec4) FMul 96 97 + 99: 7(fvec4) CompositeExtract 88 3 + 100: 7(fvec4) CompositeExtract 89 3 + 101: 7(fvec4) FMul 99 100 + 102: 33 CompositeConstruct 92 95 98 101 + 105: 6(float) CompositeExtract 102 2 1 + Store 87(g) 105 + Store 106(h) 12 + 112: 109 Load 111(samp2D) + 116: 7(fvec4) ImageSampleImplicitLod 112 115 + 117: 6(float) CompositeExtract 116 1 + Store 107(i) 117 + 118: 6(float) Load 107(i) + 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 + 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 new file mode 100755 index 0000000..247b2f3 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.depthOut.frag.out @@ -0,0 +1,36 @@ +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 +// Id's are bound by 15 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 8 10 14 + ExecutionMode 4 OriginUpperLeft + ExecutionMode 4 DepthGreater + ExecutionMode 4 DepthReplacing + Source GLSL 450 + Name 4 "main" + Name 8 "gl_FragDepth" + Name 10 "Depth" + Name 14 "Color" + Decorate 8(gl_FragDepth) BuiltIn FragDepth + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypePointer Output 6(float) + 8(gl_FragDepth): 7(ptr) Variable Output + 9: TypePointer Input 6(float) + 10(Depth): 9(ptr) Variable Input + 12: TypeVector 6(float) 4 + 13: TypePointer Input 12(fvec4) + 14(Color): 13(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 11: 6(float) Load 10(Depth) + Store 8(gl_FragDepth) 11 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.deviceGroup.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.deviceGroup.frag.out new file mode 100755 index 0000000..42e045b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.deviceGroup.frag.out @@ -0,0 +1,39 @@ +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 +// Id's are bound by 17 + + Capability Shader + Capability DeviceGroup + Extension "SPV_KHR_device_group" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 9 12 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + SourceExtension "GL_EXT_device_group" + Name 4 "main" + Name 9 "color" + Name 12 "gl_DeviceIndex" + Decorate 12(gl_DeviceIndex) Flat + Decorate 12(gl_DeviceIndex) BuiltIn DeviceIndex + 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: TypeInt 32 1 + 11: TypePointer Input 10(int) +12(gl_DeviceIndex): 11(ptr) Variable Input + 15: 6(float) Constant 0 + 4(main): 2 Function None 3 + 5: Label + 13: 10(int) Load 12(gl_DeviceIndex) + 14: 6(float) ConvertSToF 13 + 16: 7(fvec4) CompositeConstruct 14 15 15 15 + Store 9(color) 16 + Return + FunctionEnd 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 new file mode 100755 index 0000000..173ea26 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.discard-dce.frag.out @@ -0,0 +1,126 @@ +spv.discard-dce.frag +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 84 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 21 59 + ExecutionMode 4 OriginUpperLeft + Source GLSL 140 + Name 4 "main" + Name 9 "white" + Name 12 "black" + Name 15 "color" + Name 18 "x" + Name 21 "tex_coord" + Name 30 "y" + Name 36 "radius" + Name 59 "gl_FragColor" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 10: 6(float) Constant 1065353216 + 11: 7(fvec4) ConstantComposite 10 10 10 10 + 13: 6(float) Constant 1045220557 + 14: 7(fvec4) ConstantComposite 13 13 13 13 + 17: TypePointer Function 6(float) + 19: TypeVector 6(float) 2 + 20: TypePointer Input 19(fvec2) + 21(tex_coord): 20(ptr) Variable Input + 22: TypeInt 32 0 + 23: 22(int) Constant 0 + 24: TypePointer Input 6(float) + 27: 6(float) Constant 1073741824 + 31: 22(int) Constant 1 + 46: TypeBool + 51: 6(float) Constant 1066192077 + 58: TypePointer Output 7(fvec4) +59(gl_FragColor): 58(ptr) Variable Output + 62: 6(float) Constant 1067030938 + 71: 6(float) Constant 1061158912 + 76: 6(float) Constant 1098907648 + 4(main): 2 Function None 3 + 5: Label + 9(white): 8(ptr) Variable Function + 12(black): 8(ptr) Variable Function + 15(color): 8(ptr) Variable Function + 18(x): 17(ptr) Variable Function + 30(y): 17(ptr) Variable Function + 36(radius): 17(ptr) Variable Function + Store 9(white) 11 + Store 12(black) 14 + 16: 7(fvec4) Load 9(white) + Store 15(color) 16 + 25: 24(ptr) AccessChain 21(tex_coord) 23 + 26: 6(float) Load 25 + 28: 6(float) FMul 26 27 + 29: 6(float) FSub 28 10 + Store 18(x) 29 + 32: 24(ptr) AccessChain 21(tex_coord) 31 + 33: 6(float) Load 32 + 34: 6(float) FMul 33 27 + 35: 6(float) FSub 34 10 + Store 30(y) 35 + 37: 6(float) Load 18(x) + 38: 6(float) Load 18(x) + 39: 6(float) FMul 37 38 + 40: 6(float) Load 30(y) + 41: 6(float) Load 30(y) + 42: 6(float) FMul 40 41 + 43: 6(float) FAdd 39 42 + 44: 6(float) ExtInst 1(GLSL.std.450) 31(Sqrt) 43 + Store 36(radius) 44 + 45: 6(float) Load 36(radius) + 47: 46(bool) FOrdGreaterThan 45 10 + SelectionMerge 49 None + BranchConditional 47 48 49 + 48: Label + 50: 6(float) Load 36(radius) + 52: 46(bool) FOrdGreaterThan 50 51 + SelectionMerge 54 None + BranchConditional 52 53 54 + 53: Label + 55: 7(fvec4) Load 15(color) + 56: 7(fvec4) CompositeConstruct 10 10 10 10 + 57: 7(fvec4) FAdd 55 56 + Store 15(color) 57 + Branch 54 + 54: Label + 60: 7(fvec4) Load 15(color) + Store 59(gl_FragColor) 60 + 61: 6(float) Load 36(radius) + 63: 46(bool) FOrdGreaterThan 61 62 + SelectionMerge 65 None + BranchConditional 63 64 65 + 64: Label + 66: 7(fvec4) Load 15(color) + 67: 7(fvec4) CompositeConstruct 10 10 10 10 + 68: 7(fvec4) FAdd 66 67 + Store 15(color) 68 + Branch 65 + 65: Label + Kill + 49: Label + 70: 6(float) Load 36(radius) + 72: 46(bool) FOrdGreaterThanEqual 70 71 + SelectionMerge 74 None + BranchConditional 72 73 74 + 73: Label + 75: 6(float) Load 36(radius) + 77: 6(float) ExtInst 1(GLSL.std.450) 26(Pow) 75 76 + 78: 6(float) FDiv 77 27 + 79: 6(float) ExtInst 1(GLSL.std.450) 4(FAbs) 78 + 80: 7(fvec4) Load 15(color) + 81: 7(fvec4) CompositeConstruct 79 79 79 79 + 82: 7(fvec4) FSub 80 81 + Store 15(color) 82 + Branch 74 + 74: Label + 83: 7(fvec4) Load 15(color) + Store 59(gl_FragColor) 83 + Return + FunctionEnd 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 new file mode 100755 index 0000000..d6d4c28 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.do-simple.vert.out @@ -0,0 +1,42 @@ +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 +// Id's are bound by 21 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" + Source ESSL 310 + Name 4 "main" + Name 8 "i" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypePointer Function 6(int) + 9: 6(int) Constant 0 + 15: 6(int) Constant 1 + 18: 6(int) Constant 10 + 19: TypeBool + 4(main): 2 Function None 3 + 5: Label + 8(i): 7(ptr) Variable Function + Store 8(i) 9 + Branch 10 + 10: Label + LoopMerge 12 13 None + Branch 11 + 11: Label + 14: 6(int) Load 8(i) + 16: 6(int) IAdd 14 15 + Store 8(i) 16 + Branch 13 + 13: Label + 17: 6(int) Load 8(i) + 20: 19(bool) SLessThan 17 18 + BranchConditional 20 10 12 + 12: Label + Return + FunctionEnd 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 new file mode 100644 index 0000000..d1d0c85 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.do-while-continue-break.vert.out @@ -0,0 +1,80 @@ +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 +// Id's are bound by 43 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" + Source ESSL 310 + Name 4 "main" + Name 8 "i" + Name 14 "A" + Name 21 "B" + Name 24 "C" + Name 30 "D" + Name 33 "E" + Name 35 "F" + Name 41 "G" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypePointer Function 6(int) + 9: 6(int) Constant 0 + 16: 6(int) Constant 2 + 17: TypeBool + 22: 6(int) Constant 1 + 26: 6(int) Constant 5 + 31: 6(int) Constant 3 + 34: 6(int) Constant 42 + 36: 6(int) Constant 99 + 39: 6(int) Constant 19 + 42: 6(int) Constant 12 + 4(main): 2 Function None 3 + 5: Label + 8(i): 7(ptr) Variable Function + 14(A): 7(ptr) Variable Function + 21(B): 7(ptr) Variable Function + 24(C): 7(ptr) Variable Function + 30(D): 7(ptr) Variable Function + 33(E): 7(ptr) Variable Function + 35(F): 7(ptr) Variable Function + 41(G): 7(ptr) Variable Function + Store 8(i) 9 + Branch 10 + 10: Label + LoopMerge 12 13 None + Branch 11 + 11: Label + Store 14(A) 9 + 15: 6(int) Load 8(i) + 18: 17(bool) IEqual 15 16 + SelectionMerge 20 None + BranchConditional 18 19 20 + 19: Label + Store 21(B) 22 + Branch 13 + 20: Label + 25: 6(int) Load 8(i) + 27: 17(bool) IEqual 25 26 + SelectionMerge 29 None + BranchConditional 27 28 29 + 28: Label + Store 30(D) 31 + Branch 12 + 29: Label + Store 35(F) 36 + Branch 13 + 13: Label + 37: 6(int) Load 8(i) + 38: 6(int) IAdd 37 22 + Store 8(i) 38 + 40: 17(bool) SLessThan 38 39 + BranchConditional 40 10 12 + 12: Label + Store 41(G) 42 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.doWhileLoop.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.doWhileLoop.frag.out new file mode 100755 index 0000000..9b8cee7 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.doWhileLoop.frag.out @@ -0,0 +1,59 @@ +spv.doWhileLoop.frag +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 34 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 11 17 27 32 + ExecutionMode 4 OriginUpperLeft + Source GLSL 140 + Name 4 "main" + Name 9 "color" + Name 11 "BaseColor" + Name 17 "bigColor" + Name 27 "d" + Name 32 "gl_FragColor" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 10: TypePointer Input 7(fvec4) + 11(BaseColor): 10(ptr) Variable Input + 17(bigColor): 10(ptr) Variable Input + 21: TypeInt 32 0 + 22: 21(int) Constant 0 + 23: TypePointer Function 6(float) + 26: TypePointer Input 6(float) + 27(d): 26(ptr) Variable Input + 29: TypeBool + 31: TypePointer Output 7(fvec4) +32(gl_FragColor): 31(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 9(color): 8(ptr) Variable Function + 12: 7(fvec4) Load 11(BaseColor) + Store 9(color) 12 + Branch 13 + 13: Label + LoopMerge 15 16 None + Branch 14 + 14: Label + 18: 7(fvec4) Load 17(bigColor) + 19: 7(fvec4) Load 9(color) + 20: 7(fvec4) FAdd 19 18 + Store 9(color) 20 + Branch 16 + 16: Label + 24: 23(ptr) AccessChain 9(color) 22 + 25: 6(float) Load 24 + 28: 6(float) Load 27(d) + 30: 29(bool) FOrdLessThan 25 28 + BranchConditional 30 13 15 + 15: Label + 33: 7(fvec4) Load 9(color) + Store 32(gl_FragColor) 33 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.double.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.double.comp.out new file mode 100755 index 0000000..3b1bdc8 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.double.comp.out @@ -0,0 +1,100 @@ +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 +// Id's are bound by 60 + + Capability Shader + Capability Float64 + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "main" 26 33 + ExecutionMode 4 LocalSize 1 1 1 + Source GLSL 430 + Name 4 "main" + Name 8 "bufName" + MemberName 8(bufName) 0 "f" + MemberName 8(bufName) 1 "d" + Name 10 "bufInst" + Name 22 "storePos" + Name 26 "gl_GlobalInvocationID" + Name 32 "localCoef" + Name 33 "gl_LocalInvocationID" + Name 49 "aa" + Name 54 "globalCoef" + Name 59 "destTex" + MemberDecorate 8(bufName) 0 Offset 0 + MemberDecorate 8(bufName) 1 Offset 8 + Decorate 8(bufName) BufferBlock + Decorate 10(bufInst) DescriptorSet 0 + Decorate 26(gl_GlobalInvocationID) BuiltIn GlobalInvocationId + Decorate 33(gl_LocalInvocationID) BuiltIn LocalInvocationId + Decorate 59(destTex) DescriptorSet 0 + Decorate 59(destTex) NonReadable + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeFloat 64 + 8(bufName): TypeStruct 6(float) 7(float) + 9: TypePointer Uniform 8(bufName) + 10(bufInst): 9(ptr) Variable Uniform + 11: TypeInt 32 1 + 12: 11(int) Constant 1 + 13: 7(float) Constant 1413754136 1074340347 + 14: TypePointer Uniform 7(float) + 16: 11(int) Constant 0 + 17: 6(float) Constant 1095307129 + 18: TypePointer Uniform 6(float) + 20: TypeVector 11(int) 2 + 21: TypePointer Function 20(ivec2) + 23: TypeInt 32 0 + 24: TypeVector 23(int) 3 + 25: TypePointer Input 24(ivec3) +26(gl_GlobalInvocationID): 25(ptr) Variable Input + 27: TypeVector 23(int) 2 + 31: TypePointer Function 7(float) +33(gl_LocalInvocationID): 25(ptr) Variable Input + 37: 11(int) Constant 8 + 40: TypeVector 6(float) 2 + 42: 6(float) Constant 1090519040 + 47: TypeVector 7(float) 4 + 48: TypePointer Function 47(fvec4) + 50: 7(float) Constant 2576980378 1071225241 + 51: 7(float) Constant 2576980378 1070176665 + 52: 7(float) Constant 858993459 1070805811 + 53: 47(fvec4) ConstantComposite 50 51 52 50 + 55: 7(float) Constant 0 1072693248 + 56: 7(float) Constant 3229815407 1074340298 + 57: TypeImage 6(float) 2D nonsampled format:Unknown + 58: TypePointer UniformConstant 57 + 59(destTex): 58(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label + 22(storePos): 21(ptr) Variable Function + 32(localCoef): 31(ptr) Variable Function + 49(aa): 48(ptr) Variable Function + 54(globalCoef): 31(ptr) Variable Function + 15: 14(ptr) AccessChain 10(bufInst) 12 + Store 15 13 + 19: 18(ptr) AccessChain 10(bufInst) 16 + Store 19 17 + 28: 24(ivec3) Load 26(gl_GlobalInvocationID) + 29: 27(ivec2) VectorShuffle 28 28 0 1 + 30: 20(ivec2) Bitcast 29 + Store 22(storePos) 30 + 34: 24(ivec3) Load 33(gl_LocalInvocationID) + 35: 27(ivec2) VectorShuffle 34 34 0 1 + 36: 20(ivec2) Bitcast 35 + 38: 20(ivec2) CompositeConstruct 37 37 + 39: 20(ivec2) ISub 36 38 + 41: 40(fvec2) ConvertSToF 39 + 43: 40(fvec2) CompositeConstruct 42 42 + 44: 40(fvec2) FDiv 41 43 + 45: 6(float) ExtInst 1(GLSL.std.450) 66(Length) 44 + 46: 7(float) FConvert 45 + Store 32(localCoef) 46 + Store 49(aa) 53 + Store 54(globalCoef) 55 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.drawParams.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.drawParams.vert.out new file mode 100755 index 0000000..b75efe0 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.drawParams.vert.out @@ -0,0 +1,59 @@ +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 +// Id's are bound by 29 + + Capability Shader + Capability DrawParameters + Extension "SPV_KHR_shader_draw_parameters" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 10 13 16 21 + Source GLSL 450 + SourceExtension "GL_ARB_shader_draw_parameters" + Name 4 "main" + Name 8 "a" + Name 10 "gl_BaseVertexARB" + Name 12 "b" + Name 13 "gl_BaseInstanceARB" + Name 15 "c" + Name 16 "gl_DrawIDARB" + Name 21 "pos" + Decorate 10(gl_BaseVertexARB) BuiltIn BaseVertex + Decorate 13(gl_BaseInstanceARB) BuiltIn BaseInstance + Decorate 16(gl_DrawIDARB) BuiltIn DrawIndex + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypePointer Function 6(int) + 9: TypePointer Input 6(int) +10(gl_BaseVertexARB): 9(ptr) Variable Input +13(gl_BaseInstanceARB): 9(ptr) Variable Input +16(gl_DrawIDARB): 9(ptr) Variable Input + 18: TypeFloat 32 + 19: TypeVector 18(float) 3 + 20: TypePointer Output 19(fvec3) + 21(pos): 20(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 8(a): 7(ptr) Variable Function + 12(b): 7(ptr) Variable Function + 15(c): 7(ptr) Variable Function + 11: 6(int) Load 10(gl_BaseVertexARB) + Store 8(a) 11 + 14: 6(int) Load 13(gl_BaseInstanceARB) + Store 12(b) 14 + 17: 6(int) Load 16(gl_DrawIDARB) + Store 15(c) 17 + 22: 6(int) Load 8(a) + 23: 18(float) ConvertSToF 22 + 24: 6(int) Load 12(b) + 25: 18(float) ConvertSToF 24 + 26: 6(int) Load 15(c) + 27: 18(float) ConvertSToF 26 + 28: 19(fvec3) CompositeConstruct 23 25 27 + Store 21(pos) 28 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.earlyReturnDiscard.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.earlyReturnDiscard.frag.out new file mode 100755 index 0000000..41441b7 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.earlyReturnDiscard.frag.out @@ -0,0 +1,169 @@ +spv.earlyReturnDiscard.frag +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 110 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 11 14 17 19 25 30 39 51 63 105 109 + ExecutionMode 4 OriginUpperLeft + Source GLSL 140 + Name 4 "main" + Name 9 "color" + Name 11 "BaseColor" + Name 13 "color2" + Name 14 "otherColor" + Name 17 "c" + Name 19 "d" + Name 25 "bigColor" + Name 30 "smallColor" + Name 39 "minimum" + Name 51 "threshhold" + Name 63 "threshhold2" + Name 77 "b" + Name 105 "gl_FragColor" + Name 109 "threshhold3" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 10: TypePointer Input 7(fvec4) + 11(BaseColor): 10(ptr) Variable Input + 14(otherColor): 10(ptr) Variable Input + 16: TypePointer Input 6(float) + 17(c): 16(ptr) Variable Input + 19(d): 16(ptr) Variable Input + 21: TypeBool + 25(bigColor): 10(ptr) Variable Input + 30(smallColor): 10(ptr) Variable Input + 34: TypeInt 32 0 + 35: 34(int) Constant 2 + 36: TypePointer Function 6(float) + 39(minimum): 16(ptr) Variable Input + 47: 6(float) Constant 1065353216 + 51(threshhold): 16(ptr) Variable Input + 60: 34(int) Constant 3 + 63(threshhold2): 16(ptr) Variable Input + 76: TypePointer Private 21(bool) + 77(b): 76(ptr) Variable Private + 85: 34(int) Constant 0 + 104: TypePointer Output 7(fvec4) +105(gl_FragColor): 104(ptr) Variable Output +109(threshhold3): 16(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 9(color): 8(ptr) Variable Function + 13(color2): 8(ptr) Variable Function + 12: 7(fvec4) Load 11(BaseColor) + Store 9(color) 12 + 15: 7(fvec4) Load 14(otherColor) + Store 13(color2) 15 + 18: 6(float) Load 17(c) + 20: 6(float) Load 19(d) + 22: 21(bool) FOrdGreaterThan 18 20 + SelectionMerge 24 None + BranchConditional 22 23 29 + 23: Label + 26: 7(fvec4) Load 25(bigColor) + 27: 7(fvec4) Load 9(color) + 28: 7(fvec4) FAdd 27 26 + Store 9(color) 28 + Branch 24 + 29: Label + 31: 7(fvec4) Load 30(smallColor) + 32: 7(fvec4) Load 9(color) + 33: 7(fvec4) FAdd 32 31 + Store 9(color) 33 + Branch 24 + 24: Label + 37: 36(ptr) AccessChain 9(color) 35 + 38: 6(float) Load 37 + 40: 6(float) Load 39(minimum) + 41: 21(bool) FOrdLessThan 38 40 + SelectionMerge 43 None + BranchConditional 41 42 43 + 42: Label + Return + 43: Label + 45: 36(ptr) AccessChain 9(color) 35 + 46: 6(float) Load 45 + 48: 6(float) FAdd 46 47 + Store 45 48 + 49: 36(ptr) AccessChain 9(color) 35 + 50: 6(float) Load 49 + 52: 6(float) Load 51(threshhold) + 53: 21(bool) FOrdGreaterThan 50 52 + SelectionMerge 55 None + BranchConditional 53 54 55 + 54: Label + Kill + 55: Label + 57: 7(fvec4) Load 9(color) + 58: 7(fvec4) CompositeConstruct 47 47 47 47 + 59: 7(fvec4) FAdd 57 58 + Store 9(color) 59 + 61: 36(ptr) AccessChain 9(color) 60 + 62: 6(float) Load 61 + 64: 6(float) Load 63(threshhold2) + 65: 21(bool) FOrdGreaterThan 62 64 + SelectionMerge 67 None + BranchConditional 65 66 97 + 66: Label + 68: 36(ptr) AccessChain 9(color) 35 + 69: 6(float) Load 68 + 70: 6(float) Load 63(threshhold2) + 71: 21(bool) FOrdGreaterThan 69 70 + SelectionMerge 73 None + BranchConditional 71 72 75 + 72: Label + Return + 75: Label + 78: 21(bool) Load 77(b) + SelectionMerge 80 None + BranchConditional 78 79 84 + 79: Label + 81: 36(ptr) AccessChain 9(color) 35 + 82: 6(float) Load 81 + 83: 6(float) FAdd 82 47 + Store 81 83 + Branch 80 + 84: Label + 86: 36(ptr) AccessChain 9(color) 85 + 87: 6(float) Load 86 + 88: 6(float) Load 39(minimum) + 89: 21(bool) FOrdLessThan 87 88 + SelectionMerge 91 None + BranchConditional 89 90 93 + 90: Label + Kill + 93: Label + 94: 7(fvec4) Load 9(color) + 95: 7(fvec4) CompositeConstruct 47 47 47 47 + 96: 7(fvec4) FAdd 94 95 + Store 9(color) 96 + Branch 91 + 91: Label + Branch 80 + 80: Label + Branch 73 + 73: Label + Branch 67 + 97: Label + 98: 21(bool) Load 77(b) + SelectionMerge 100 None + BranchConditional 98 99 102 + 99: Label + Kill + 102: Label + Return + 100: Label + Branch 67 + 67: Label + 106: 7(fvec4) Load 9(color) + 107: 7(fvec4) Load 13(color2) + 108: 7(fvec4) FMul 106 107 + Store 105(gl_FragColor) 108 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.float16.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.float16.frag.out new file mode 100644 index 0000000..78156e4 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.float16.frag.out @@ -0,0 +1,835 @@ +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 +// Id's are bound by 534 + + Capability Shader + Capability Float16 + Capability Float64 + Capability Int64 + Capability DerivativeControl + Capability InterpolationFunction + Extension "SPV_AMD_gpu_shader_half_float" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 465 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + SourceExtension "GL_AMD_gpu_shader_half_float" + SourceExtension "GL_ARB_gpu_shader_int64" + Name 4 "main" + Name 6 "literal(" + Name 8 "operators(" + Name 10 "typeCast(" + Name 12 "builtinAngleTrigFuncs(" + Name 14 "builtinExpFuncs(" + Name 16 "builtinCommonFuncs(" + Name 18 "builtinPackUnpackFuncs(" + Name 20 "builtinGeometryFuncs(" + Name 22 "builtinMatrixFuncs(" + Name 24 "builtinVecRelFuncs(" + Name 26 "builtinFragProcFuncs(" + Name 31 "f16v" + Name 42 "f16v" + Name 64 "f16m" + Name 87 "f16" + Name 111 "b" + Name 153 "f16v" + Name 156 "bv" + Name 167 "fv" + Name 175 "dv" + Name 186 "iv" + Name 193 "uv" + Name 201 "i64v" + Name 209 "u64v" + Name 216 "f16v2" + Name 217 "f16v1" + Name 249 "f16v2" + Name 250 "f16v1" + Name 266 "f16v2" + Name 267 "f16v1" + Name 288 "f16" + Name 292 "f16v3" + Name 332 "bv" + Name 353 "b" + Name 363 "iv" + Name 364 "ResType" + Name 372 "u" + Name 373 "f16v" + Name 378 "f16" + Name 379 "f16v1" + Name 383 "f16v2" + Name 389 "f16v3" + Name 408 "f16m3" + Name 409 "f16m1" + Name 411 "f16m2" + Name 420 "f16v1" + Name 422 "f16v2" + Name 427 "f16m4" + Name 430 "f16" + Name 433 "f16m5" + Name 438 "f16m6" + Name 439 "f16m7" + Name 442 "bv" + Name 443 "f16v1" + Name 445 "f16v2" + Name 463 "f16v" + Name 465 "if16v" + Name 514 "S" + MemberName 514(S) 0 "x" + MemberName 514(S) 1 "y" + MemberName 514(S) 2 "z" + Name 516 "B1" + MemberName 516(B1) 0 "a" + MemberName 516(B1) 1 "b" + MemberName 516(B1) 2 "c" + MemberName 516(B1) 3 "d" + MemberName 516(B1) 4 "e" + MemberName 516(B1) 5 "f" + MemberName 516(B1) 6 "g" + MemberName 516(B1) 7 "h" + Name 518 "" + Name 521 "S" + MemberName 521(S) 0 "x" + MemberName 521(S) 1 "y" + MemberName 521(S) 2 "z" + Name 523 "B2" + MemberName 523(B2) 0 "o" + MemberName 523(B2) 1 "p" + MemberName 523(B2) 2 "q" + MemberName 523(B2) 3 "r" + MemberName 523(B2) 4 "s" + MemberName 523(B2) 5 "t" + MemberName 523(B2) 6 "u" + MemberName 523(B2) 7 "v" + Name 525 "" + Name 526 "sf16" + Name 527 "sf" + Name 528 "sd" + Decorate 512 ArrayStride 16 + Decorate 513 ArrayStride 32 + MemberDecorate 514(S) 0 Offset 0 + MemberDecorate 514(S) 1 Offset 4 + MemberDecorate 514(S) 2 Offset 8 + Decorate 515 ArrayStride 16 + MemberDecorate 516(B1) 0 Offset 0 + MemberDecorate 516(B1) 1 Offset 4 + MemberDecorate 516(B1) 2 Offset 8 + MemberDecorate 516(B1) 3 Offset 16 + MemberDecorate 516(B1) 4 ColMajor + MemberDecorate 516(B1) 4 Offset 48 + MemberDecorate 516(B1) 4 MatrixStride 16 + MemberDecorate 516(B1) 5 ColMajor + MemberDecorate 516(B1) 5 Offset 80 + MemberDecorate 516(B1) 5 MatrixStride 16 + MemberDecorate 516(B1) 6 Offset 144 + MemberDecorate 516(B1) 7 Offset 160 + Decorate 516(B1) Block + Decorate 518 DescriptorSet 0 + Decorate 519 ArrayStride 2 + Decorate 520 ArrayStride 12 + MemberDecorate 521(S) 0 Offset 0 + MemberDecorate 521(S) 1 Offset 4 + MemberDecorate 521(S) 2 Offset 8 + Decorate 522 ArrayStride 16 + MemberDecorate 523(B2) 0 Offset 0 + MemberDecorate 523(B2) 1 Offset 4 + MemberDecorate 523(B2) 2 Offset 8 + MemberDecorate 523(B2) 3 Offset 14 + MemberDecorate 523(B2) 4 RowMajor + MemberDecorate 523(B2) 4 Offset 20 + MemberDecorate 523(B2) 4 MatrixStride 4 + MemberDecorate 523(B2) 5 RowMajor + MemberDecorate 523(B2) 5 Offset 32 + MemberDecorate 523(B2) 5 MatrixStride 4 + MemberDecorate 523(B2) 6 Offset 56 + MemberDecorate 523(B2) 7 Offset 72 + Decorate 523(B2) BufferBlock + Decorate 525 DescriptorSet 0 + Decorate 526(sf16) SpecId 100 + Decorate 527(sf) SpecId 101 + Decorate 528(sd) SpecId 102 + 2: TypeVoid + 3: TypeFunction 2 + 28: TypeFloat 16 + 29: TypeVector 28(float) 2 + 30: TypePointer Function 29(fvec2) + 32: 28(float) Constant 16 + 33: TypeInt 32 0 + 34: 33(int) Constant 0 + 35: TypePointer Function 28(float) + 37: 28(float) Constant 46080 + 38: 28(float) Constant 10158 + 39: 29(fvec2) ConstantComposite 37 38 + 56: 28(float) Constant 15360 + 62: TypeMatrix 29(fvec2) 2 + 63: TypePointer Function 62 + 90: 33(int) Constant 1 + 109: TypeBool + 110: TypePointer Function 109(bool) + 151: TypeVector 28(float) 3 + 152: TypePointer Function 151(fvec3) + 154: TypeVector 109(bool) 3 + 155: TypePointer Function 154(bvec3) + 158: 28(float) Constant 0 + 159: 151(fvec3) ConstantComposite 158 158 158 + 160: 151(fvec3) ConstantComposite 56 56 56 + 164: TypeFloat 32 + 165: TypeVector 164(float) 3 + 166: TypePointer Function 165(fvec3) + 172: TypeFloat 64 + 173: TypeVector 172(float) 3 + 174: TypePointer Function 173(fvec3) + 183: TypeInt 32 1 + 184: TypeVector 183(int) 3 + 185: TypePointer Function 184(ivec3) + 191: TypeVector 33(int) 3 + 192: TypePointer Function 191(ivec3) + 198: TypeInt 64 1 + 199: TypeVector 198(int) 3 + 200: TypePointer Function 199(ivec3) + 206: TypeInt 64 0 + 207: TypeVector 206(int) 3 + 208: TypePointer Function 207(ivec3) + 214: TypeVector 28(float) 4 + 215: TypePointer Function 214(fvec4) + 364(ResType): TypeStruct 151(fvec3) 184(ivec3) + 371: TypePointer Function 33(int) + 406: TypeMatrix 151(fvec3) 2 + 407: TypePointer Function 406 + 425: TypeMatrix 29(fvec2) 3 + 426: TypePointer Function 425 + 431: TypeMatrix 151(fvec3) 3 + 432: TypePointer Function 431 + 436: TypeMatrix 214(fvec4) 4 + 437: TypePointer Function 436 + 464: TypePointer Input 151(fvec3) + 465(if16v): 464(ptr) Variable Input + 466: TypePointer Input 28(float) + 503: 183(int) Constant 1 + 508: 28(float) Constant 14336 + 509: 29(fvec2) ConstantComposite 508 508 + 511: 33(int) Constant 2 + 512: TypeArray 28(float) 511 + 513: TypeArray 406 511 + 514(S): TypeStruct 28(float) 29(fvec2) 151(fvec3) + 515: TypeArray 514(S) 511 + 516(B1): TypeStruct 28(float) 29(fvec2) 151(fvec3) 512 406 513 514(S) 515 + 517: TypePointer Uniform 516(B1) + 518: 517(ptr) Variable Uniform + 519: TypeArray 28(float) 511 + 520: TypeArray 406 511 + 521(S): TypeStruct 28(float) 29(fvec2) 151(fvec3) + 522: TypeArray 521(S) 511 + 523(B2): TypeStruct 28(float) 29(fvec2) 151(fvec3) 519 406 520 521(S) 522 + 524: TypePointer Uniform 523(B2) + 525: 524(ptr) Variable Uniform + 526(sf16): 28(float) SpecConstant 12288 + 527(sf): 164(float) SpecConstant 1048576000 + 528(sd): 172(float) SpecConstant 0 1071644672 + 529: 164(float) SpecConstantOp 115 526(sf16) + 530: 164(float) SpecConstantOp 115 526(sf16) + 531: 172(float) SpecConstantOp 115 530 + 532: 28(float) SpecConstantOp 115 527(sf) + 533: 28(float) SpecConstantOp 115 528(sd) + 4(main): 2 Function None 3 + 5: Label + Return + FunctionEnd + 6(literal(): 2 Function None 3 + 7: Label + 31(f16v): 30(ptr) Variable Function + 36: 35(ptr) AccessChain 31(f16v) 34 + Store 36 32 + 40: 29(fvec2) Load 31(f16v) + 41: 29(fvec2) FAdd 40 39 + Store 31(f16v) 41 + Return + FunctionEnd + 8(operators(): 2 Function None 3 + 9: Label + 42(f16v): 30(ptr) Variable Function + 64(f16m): 63(ptr) Variable Function + 87(f16): 35(ptr) Variable Function + 111(b): 110(ptr) Variable Function + 43: 29(fvec2) Load 42(f16v) + 44: 29(fvec2) Load 42(f16v) + 45: 29(fvec2) FAdd 44 43 + Store 42(f16v) 45 + 46: 29(fvec2) Load 42(f16v) + 47: 29(fvec2) Load 42(f16v) + 48: 29(fvec2) FSub 47 46 + Store 42(f16v) 48 + 49: 29(fvec2) Load 42(f16v) + 50: 29(fvec2) Load 42(f16v) + 51: 29(fvec2) FMul 50 49 + Store 42(f16v) 51 + 52: 29(fvec2) Load 42(f16v) + 53: 29(fvec2) Load 42(f16v) + 54: 29(fvec2) FDiv 53 52 + Store 42(f16v) 54 + 55: 29(fvec2) Load 42(f16v) + 57: 29(fvec2) CompositeConstruct 56 56 + 58: 29(fvec2) FAdd 55 57 + Store 42(f16v) 58 + 59: 29(fvec2) Load 42(f16v) + 60: 29(fvec2) CompositeConstruct 56 56 + 61: 29(fvec2) FSub 59 60 + Store 42(f16v) 61 + 65: 62 Load 64(f16m) + 66: 29(fvec2) CompositeConstruct 56 56 + 67: 29(fvec2) CompositeExtract 65 0 + 68: 29(fvec2) FAdd 67 66 + 69: 29(fvec2) CompositeExtract 65 1 + 70: 29(fvec2) FAdd 69 66 + 71: 62 CompositeConstruct 68 70 + Store 64(f16m) 71 + 72: 62 Load 64(f16m) + 73: 29(fvec2) CompositeConstruct 56 56 + 74: 29(fvec2) CompositeExtract 72 0 + 75: 29(fvec2) FSub 74 73 + 76: 29(fvec2) CompositeExtract 72 1 + 77: 29(fvec2) FSub 76 73 + 78: 62 CompositeConstruct 75 77 + Store 64(f16m) 78 + 79: 29(fvec2) Load 42(f16v) + 80: 29(fvec2) FNegate 79 + Store 42(f16v) 80 + 81: 62 Load 64(f16m) + 82: 29(fvec2) CompositeExtract 81 0 + 83: 29(fvec2) FNegate 82 + 84: 29(fvec2) CompositeExtract 81 1 + 85: 29(fvec2) FNegate 84 + 86: 62 CompositeConstruct 83 85 + Store 64(f16m) 86 + 88: 35(ptr) AccessChain 42(f16v) 34 + 89: 28(float) Load 88 + 91: 35(ptr) AccessChain 42(f16v) 90 + 92: 28(float) Load 91 + 93: 28(float) FAdd 89 92 + Store 87(f16) 93 + 94: 35(ptr) AccessChain 42(f16v) 34 + 95: 28(float) Load 94 + 96: 35(ptr) AccessChain 42(f16v) 90 + 97: 28(float) Load 96 + 98: 28(float) FSub 95 97 + Store 87(f16) 98 + 99: 35(ptr) AccessChain 42(f16v) 34 + 100: 28(float) Load 99 + 101: 35(ptr) AccessChain 42(f16v) 90 + 102: 28(float) Load 101 + 103: 28(float) FMul 100 102 + Store 87(f16) 103 + 104: 35(ptr) AccessChain 42(f16v) 34 + 105: 28(float) Load 104 + 106: 35(ptr) AccessChain 42(f16v) 90 + 107: 28(float) Load 106 + 108: 28(float) FDiv 105 107 + Store 87(f16) 108 + 112: 35(ptr) AccessChain 42(f16v) 34 + 113: 28(float) Load 112 + 114: 28(float) Load 87(f16) + 115: 109(bool) FOrdNotEqual 113 114 + Store 111(b) 115 + 116: 35(ptr) AccessChain 42(f16v) 90 + 117: 28(float) Load 116 + 118: 28(float) Load 87(f16) + 119: 109(bool) FOrdEqual 117 118 + Store 111(b) 119 + 120: 35(ptr) AccessChain 42(f16v) 34 + 121: 28(float) Load 120 + 122: 28(float) Load 87(f16) + 123: 109(bool) FOrdGreaterThan 121 122 + Store 111(b) 123 + 124: 35(ptr) AccessChain 42(f16v) 90 + 125: 28(float) Load 124 + 126: 28(float) Load 87(f16) + 127: 109(bool) FOrdLessThan 125 126 + Store 111(b) 127 + 128: 35(ptr) AccessChain 42(f16v) 34 + 129: 28(float) Load 128 + 130: 28(float) Load 87(f16) + 131: 109(bool) FOrdGreaterThanEqual 129 130 + Store 111(b) 131 + 132: 35(ptr) AccessChain 42(f16v) 90 + 133: 28(float) Load 132 + 134: 28(float) Load 87(f16) + 135: 109(bool) FOrdLessThanEqual 133 134 + Store 111(b) 135 + 136: 29(fvec2) Load 42(f16v) + 137: 28(float) Load 87(f16) + 138: 29(fvec2) VectorTimesScalar 136 137 + Store 42(f16v) 138 + 139: 62 Load 64(f16m) + 140: 28(float) Load 87(f16) + 141: 62 MatrixTimesScalar 139 140 + Store 64(f16m) 141 + 142: 62 Load 64(f16m) + 143: 29(fvec2) Load 42(f16v) + 144: 29(fvec2) MatrixTimesVector 142 143 + Store 42(f16v) 144 + 145: 29(fvec2) Load 42(f16v) + 146: 62 Load 64(f16m) + 147: 29(fvec2) VectorTimesMatrix 145 146 + Store 42(f16v) 147 + 148: 62 Load 64(f16m) + 149: 62 Load 64(f16m) + 150: 62 MatrixTimesMatrix 148 149 + Store 64(f16m) 150 + Return + FunctionEnd + 10(typeCast(): 2 Function None 3 + 11: Label + 153(f16v): 152(ptr) Variable Function + 156(bv): 155(ptr) Variable Function + 167(fv): 166(ptr) Variable Function + 175(dv): 174(ptr) Variable Function + 186(iv): 185(ptr) Variable Function + 193(uv): 192(ptr) Variable Function + 201(i64v): 200(ptr) Variable Function + 209(u64v): 208(ptr) Variable Function + 157: 154(bvec3) Load 156(bv) + 161: 151(fvec3) Select 157 160 159 + Store 153(f16v) 161 + 162: 151(fvec3) Load 153(f16v) + 163: 154(bvec3) FOrdNotEqual 162 159 + Store 156(bv) 163 + 168: 165(fvec3) Load 167(fv) + 169: 151(fvec3) FConvert 168 + Store 153(f16v) 169 + 170: 151(fvec3) Load 153(f16v) + 171: 165(fvec3) FConvert 170 + Store 167(fv) 171 + 176: 173(fvec3) Load 175(dv) + 177: 151(fvec3) FConvert 176 + Store 153(f16v) 177 + 178: 173(fvec3) Load 175(dv) + 179: 172(float) CompositeExtract 178 0 + 180: 172(float) CompositeExtract 178 1 + 181: 172(float) CompositeExtract 178 2 + 182: 173(fvec3) CompositeConstruct 179 180 181 + Store 175(dv) 182 + 187: 184(ivec3) Load 186(iv) + 188: 151(fvec3) ConvertSToF 187 + Store 153(f16v) 188 + 189: 151(fvec3) Load 153(f16v) + 190: 184(ivec3) ConvertFToS 189 + Store 186(iv) 190 + 194: 191(ivec3) Load 193(uv) + 195: 151(fvec3) ConvertUToF 194 + Store 153(f16v) 195 + 196: 151(fvec3) Load 153(f16v) + 197: 191(ivec3) ConvertFToU 196 + Store 193(uv) 197 + 202: 199(ivec3) Load 201(i64v) + 203: 151(fvec3) ConvertSToF 202 + Store 153(f16v) 203 + 204: 151(fvec3) Load 153(f16v) + 205: 199(ivec3) ConvertFToS 204 + Store 201(i64v) 205 + 210: 207(ivec3) Load 209(u64v) + 211: 151(fvec3) ConvertUToF 210 + Store 153(f16v) 211 + 212: 151(fvec3) Load 153(f16v) + 213: 207(ivec3) ConvertFToU 212 + Store 209(u64v) 213 + Return + FunctionEnd +12(builtinAngleTrigFuncs(): 2 Function None 3 + 13: Label + 216(f16v2): 215(ptr) Variable Function + 217(f16v1): 215(ptr) Variable Function + 218: 214(fvec4) Load 217(f16v1) + 219: 214(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 218 + Store 216(f16v2) 219 + 220: 214(fvec4) Load 217(f16v1) + 221: 214(fvec4) ExtInst 1(GLSL.std.450) 12(Degrees) 220 + Store 216(f16v2) 221 + 222: 214(fvec4) Load 217(f16v1) + 223: 214(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 222 + Store 216(f16v2) 223 + 224: 214(fvec4) Load 217(f16v1) + 225: 214(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 224 + Store 216(f16v2) 225 + 226: 214(fvec4) Load 217(f16v1) + 227: 214(fvec4) ExtInst 1(GLSL.std.450) 15(Tan) 226 + Store 216(f16v2) 227 + 228: 214(fvec4) Load 217(f16v1) + 229: 214(fvec4) ExtInst 1(GLSL.std.450) 16(Asin) 228 + Store 216(f16v2) 229 + 230: 214(fvec4) Load 217(f16v1) + 231: 214(fvec4) ExtInst 1(GLSL.std.450) 17(Acos) 230 + Store 216(f16v2) 231 + 232: 214(fvec4) Load 217(f16v1) + 233: 214(fvec4) Load 216(f16v2) + 234: 214(fvec4) ExtInst 1(GLSL.std.450) 25(Atan2) 232 233 + Store 216(f16v2) 234 + 235: 214(fvec4) Load 217(f16v1) + 236: 214(fvec4) ExtInst 1(GLSL.std.450) 18(Atan) 235 + Store 216(f16v2) 236 + 237: 214(fvec4) Load 217(f16v1) + 238: 214(fvec4) ExtInst 1(GLSL.std.450) 19(Sinh) 237 + Store 216(f16v2) 238 + 239: 214(fvec4) Load 217(f16v1) + 240: 214(fvec4) ExtInst 1(GLSL.std.450) 20(Cosh) 239 + Store 216(f16v2) 240 + 241: 214(fvec4) Load 217(f16v1) + 242: 214(fvec4) ExtInst 1(GLSL.std.450) 21(Tanh) 241 + Store 216(f16v2) 242 + 243: 214(fvec4) Load 217(f16v1) + 244: 214(fvec4) ExtInst 1(GLSL.std.450) 22(Asinh) 243 + Store 216(f16v2) 244 + 245: 214(fvec4) Load 217(f16v1) + 246: 214(fvec4) ExtInst 1(GLSL.std.450) 23(Acosh) 245 + Store 216(f16v2) 246 + 247: 214(fvec4) Load 217(f16v1) + 248: 214(fvec4) ExtInst 1(GLSL.std.450) 24(Atanh) 247 + Store 216(f16v2) 248 + Return + FunctionEnd +14(builtinExpFuncs(): 2 Function None 3 + 15: Label + 249(f16v2): 30(ptr) Variable Function + 250(f16v1): 30(ptr) Variable Function + 251: 29(fvec2) Load 250(f16v1) + 252: 29(fvec2) Load 249(f16v2) + 253: 29(fvec2) ExtInst 1(GLSL.std.450) 26(Pow) 251 252 + Store 249(f16v2) 253 + 254: 29(fvec2) Load 250(f16v1) + 255: 29(fvec2) ExtInst 1(GLSL.std.450) 27(Exp) 254 + Store 249(f16v2) 255 + 256: 29(fvec2) Load 250(f16v1) + 257: 29(fvec2) ExtInst 1(GLSL.std.450) 28(Log) 256 + Store 249(f16v2) 257 + 258: 29(fvec2) Load 250(f16v1) + 259: 29(fvec2) ExtInst 1(GLSL.std.450) 29(Exp2) 258 + Store 249(f16v2) 259 + 260: 29(fvec2) Load 250(f16v1) + 261: 29(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 260 + Store 249(f16v2) 261 + 262: 29(fvec2) Load 250(f16v1) + 263: 29(fvec2) ExtInst 1(GLSL.std.450) 31(Sqrt) 262 + Store 249(f16v2) 263 + 264: 29(fvec2) Load 250(f16v1) + 265: 29(fvec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 264 + Store 249(f16v2) 265 + Return + FunctionEnd +16(builtinCommonFuncs(): 2 Function None 3 + 17: Label + 266(f16v2): 152(ptr) Variable Function + 267(f16v1): 152(ptr) Variable Function + 288(f16): 35(ptr) Variable Function + 292(f16v3): 152(ptr) Variable Function + 332(bv): 155(ptr) Variable Function + 353(b): 110(ptr) Variable Function + 363(iv): 185(ptr) Variable Function + 268: 151(fvec3) Load 267(f16v1) + 269: 151(fvec3) ExtInst 1(GLSL.std.450) 4(FAbs) 268 + Store 266(f16v2) 269 + 270: 151(fvec3) Load 267(f16v1) + 271: 151(fvec3) ExtInst 1(GLSL.std.450) 6(FSign) 270 + Store 266(f16v2) 271 + 272: 151(fvec3) Load 267(f16v1) + 273: 151(fvec3) ExtInst 1(GLSL.std.450) 8(Floor) 272 + Store 266(f16v2) 273 + 274: 151(fvec3) Load 267(f16v1) + 275: 151(fvec3) ExtInst 1(GLSL.std.450) 3(Trunc) 274 + Store 266(f16v2) 275 + 276: 151(fvec3) Load 267(f16v1) + 277: 151(fvec3) ExtInst 1(GLSL.std.450) 1(Round) 276 + Store 266(f16v2) 277 + 278: 151(fvec3) Load 267(f16v1) + 279: 151(fvec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 278 + Store 266(f16v2) 279 + 280: 151(fvec3) Load 267(f16v1) + 281: 151(fvec3) ExtInst 1(GLSL.std.450) 9(Ceil) 280 + Store 266(f16v2) 281 + 282: 151(fvec3) Load 267(f16v1) + 283: 151(fvec3) ExtInst 1(GLSL.std.450) 10(Fract) 282 + Store 266(f16v2) 283 + 284: 151(fvec3) Load 267(f16v1) + 285: 151(fvec3) Load 266(f16v2) + 286: 151(fvec3) FMod 284 285 + Store 266(f16v2) 286 + 287: 151(fvec3) Load 267(f16v1) + 289: 28(float) Load 288(f16) + 290: 151(fvec3) CompositeConstruct 289 289 289 + 291: 151(fvec3) FMod 287 290 + Store 266(f16v2) 291 + 293: 151(fvec3) Load 267(f16v1) + 294: 151(fvec3) ExtInst 1(GLSL.std.450) 35(Modf) 293 266(f16v2) + Store 292(f16v3) 294 + 295: 151(fvec3) Load 267(f16v1) + 296: 151(fvec3) Load 266(f16v2) + 297: 151(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 295 296 + Store 292(f16v3) 297 + 298: 151(fvec3) Load 267(f16v1) + 299: 28(float) Load 288(f16) + 300: 151(fvec3) CompositeConstruct 299 299 299 + 301: 151(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 298 300 + Store 292(f16v3) 301 + 302: 151(fvec3) Load 267(f16v1) + 303: 151(fvec3) Load 266(f16v2) + 304: 151(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 302 303 + Store 292(f16v3) 304 + 305: 151(fvec3) Load 267(f16v1) + 306: 28(float) Load 288(f16) + 307: 151(fvec3) CompositeConstruct 306 306 306 + 308: 151(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 305 307 + Store 292(f16v3) 308 + 309: 151(fvec3) Load 267(f16v1) + 310: 28(float) Load 288(f16) + 311: 35(ptr) AccessChain 266(f16v2) 34 + 312: 28(float) Load 311 + 313: 151(fvec3) CompositeConstruct 310 310 310 + 314: 151(fvec3) CompositeConstruct 312 312 312 + 315: 151(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 309 313 314 + Store 292(f16v3) 315 + 316: 151(fvec3) Load 267(f16v1) + 317: 151(fvec3) Load 266(f16v2) + 318: 28(float) Load 288(f16) + 319: 151(fvec3) CompositeConstruct 318 318 318 + 320: 151(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 316 317 319 + Store 292(f16v3) 320 + 321: 151(fvec3) Load 267(f16v1) + 322: 151(fvec3) Load 266(f16v2) + 323: 28(float) Load 288(f16) + 324: 151(fvec3) CompositeConstruct 323 323 323 + 325: 151(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 321 322 324 + Store 292(f16v3) 325 + 326: 151(fvec3) Load 267(f16v1) + 327: 151(fvec3) Load 266(f16v2) + 328: 151(fvec3) Load 292(f16v3) + 329: 151(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 326 327 328 + Store 292(f16v3) 329 + 330: 151(fvec3) Load 267(f16v1) + 331: 151(fvec3) Load 266(f16v2) + 333: 154(bvec3) Load 332(bv) + 334: 151(fvec3) Select 333 331 330 + Store 292(f16v3) 334 + 335: 151(fvec3) Load 267(f16v1) + 336: 151(fvec3) Load 266(f16v2) + 337: 151(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 335 336 + Store 292(f16v3) 337 + 338: 28(float) Load 288(f16) + 339: 151(fvec3) Load 292(f16v3) + 340: 151(fvec3) CompositeConstruct 338 338 338 + 341: 151(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 340 339 + Store 292(f16v3) 341 + 342: 151(fvec3) Load 267(f16v1) + 343: 151(fvec3) Load 266(f16v2) + 344: 151(fvec3) Load 292(f16v3) + 345: 151(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 342 343 344 + Store 292(f16v3) 345 + 346: 28(float) Load 288(f16) + 347: 35(ptr) AccessChain 267(f16v1) 34 + 348: 28(float) Load 347 + 349: 151(fvec3) Load 266(f16v2) + 350: 151(fvec3) CompositeConstruct 346 346 346 + 351: 151(fvec3) CompositeConstruct 348 348 348 + 352: 151(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 350 351 349 + Store 292(f16v3) 352 + 354: 28(float) Load 288(f16) + 355: 109(bool) IsNan 354 + Store 353(b) 355 + 356: 151(fvec3) Load 267(f16v1) + 357: 154(bvec3) IsInf 356 + Store 332(bv) 357 + 358: 151(fvec3) Load 267(f16v1) + 359: 151(fvec3) Load 266(f16v2) + 360: 151(fvec3) Load 292(f16v3) + 361: 151(fvec3) ExtInst 1(GLSL.std.450) 50(Fma) 358 359 360 + Store 292(f16v3) 361 + 362: 151(fvec3) Load 267(f16v1) + 365:364(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 362 + 366: 184(ivec3) CompositeExtract 365 1 + Store 363(iv) 366 + 367: 151(fvec3) CompositeExtract 365 0 + Store 266(f16v2) 367 + 368: 151(fvec3) Load 267(f16v1) + 369: 184(ivec3) Load 363(iv) + 370: 151(fvec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 368 369 + Store 266(f16v2) 370 + Return + FunctionEnd +18(builtinPackUnpackFuncs(): 2 Function None 3 + 19: Label + 372(u): 371(ptr) Variable Function + 373(f16v): 30(ptr) Variable Function + 374: 29(fvec2) Load 373(f16v) + 375: 33(int) Bitcast 374 + Store 372(u) 375 + 376: 33(int) Load 372(u) + 377: 29(fvec2) Bitcast 376 + Store 373(f16v) 377 + Return + FunctionEnd +20(builtinGeometryFuncs(): 2 Function None 3 + 21: Label + 378(f16): 35(ptr) Variable Function + 379(f16v1): 152(ptr) Variable Function + 383(f16v2): 152(ptr) Variable Function + 389(f16v3): 152(ptr) Variable Function + 380: 151(fvec3) Load 379(f16v1) + 381: 28(float) ExtInst 1(GLSL.std.450) 66(Length) 380 + Store 378(f16) 381 + 382: 151(fvec3) Load 379(f16v1) + 384: 151(fvec3) Load 383(f16v2) + 385: 28(float) ExtInst 1(GLSL.std.450) 67(Distance) 382 384 + Store 378(f16) 385 + 386: 151(fvec3) Load 379(f16v1) + 387: 151(fvec3) Load 383(f16v2) + 388: 28(float) Dot 386 387 + Store 378(f16) 388 + 390: 151(fvec3) Load 379(f16v1) + 391: 151(fvec3) Load 383(f16v2) + 392: 151(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 390 391 + Store 389(f16v3) 392 + 393: 151(fvec3) Load 379(f16v1) + 394: 151(fvec3) ExtInst 1(GLSL.std.450) 69(Normalize) 393 + Store 383(f16v2) 394 + 395: 151(fvec3) Load 379(f16v1) + 396: 151(fvec3) Load 383(f16v2) + 397: 151(fvec3) Load 389(f16v3) + 398: 151(fvec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 395 396 397 + Store 389(f16v3) 398 + 399: 151(fvec3) Load 379(f16v1) + 400: 151(fvec3) Load 383(f16v2) + 401: 151(fvec3) ExtInst 1(GLSL.std.450) 71(Reflect) 399 400 + Store 389(f16v3) 401 + 402: 151(fvec3) Load 379(f16v1) + 403: 151(fvec3) Load 383(f16v2) + 404: 28(float) Load 378(f16) + 405: 151(fvec3) ExtInst 1(GLSL.std.450) 72(Refract) 402 403 404 + Store 389(f16v3) 405 + Return + FunctionEnd +22(builtinMatrixFuncs(): 2 Function None 3 + 23: Label + 408(f16m3): 407(ptr) Variable Function + 409(f16m1): 407(ptr) Variable Function + 411(f16m2): 407(ptr) Variable Function + 420(f16v1): 152(ptr) Variable Function + 422(f16v2): 30(ptr) Variable Function + 427(f16m4): 426(ptr) Variable Function + 430(f16): 35(ptr) Variable Function + 433(f16m5): 432(ptr) Variable Function + 438(f16m6): 437(ptr) Variable Function + 439(f16m7): 437(ptr) Variable Function + 410: 406 Load 409(f16m1) + 412: 406 Load 411(f16m2) + 413: 151(fvec3) CompositeExtract 410 0 + 414: 151(fvec3) CompositeExtract 412 0 + 415: 151(fvec3) FMul 413 414 + 416: 151(fvec3) CompositeExtract 410 1 + 417: 151(fvec3) CompositeExtract 412 1 + 418: 151(fvec3) FMul 416 417 + 419: 406 CompositeConstruct 415 418 + Store 408(f16m3) 419 + 421: 151(fvec3) Load 420(f16v1) + 423: 29(fvec2) Load 422(f16v2) + 424: 406 OuterProduct 421 423 + Store 409(f16m1) 424 + 428: 406 Load 409(f16m1) + 429: 425 Transpose 428 + Store 427(f16m4) 429 + 434: 431 Load 433(f16m5) + 435: 28(float) ExtInst 1(GLSL.std.450) 33(Determinant) 434 + Store 430(f16) 435 + 440: 436 Load 439(f16m7) + 441: 436 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 440 + Store 438(f16m6) 441 + Return + FunctionEnd +24(builtinVecRelFuncs(): 2 Function None 3 + 25: Label + 442(bv): 155(ptr) Variable Function + 443(f16v1): 152(ptr) Variable Function + 445(f16v2): 152(ptr) Variable Function + 444: 151(fvec3) Load 443(f16v1) + 446: 151(fvec3) Load 445(f16v2) + 447: 154(bvec3) FOrdLessThan 444 446 + Store 442(bv) 447 + 448: 151(fvec3) Load 443(f16v1) + 449: 151(fvec3) Load 445(f16v2) + 450: 154(bvec3) FOrdLessThanEqual 448 449 + Store 442(bv) 450 + 451: 151(fvec3) Load 443(f16v1) + 452: 151(fvec3) Load 445(f16v2) + 453: 154(bvec3) FOrdGreaterThan 451 452 + Store 442(bv) 453 + 454: 151(fvec3) Load 443(f16v1) + 455: 151(fvec3) Load 445(f16v2) + 456: 154(bvec3) FOrdGreaterThanEqual 454 455 + Store 442(bv) 456 + 457: 151(fvec3) Load 443(f16v1) + 458: 151(fvec3) Load 445(f16v2) + 459: 154(bvec3) FOrdEqual 457 458 + Store 442(bv) 459 + 460: 151(fvec3) Load 443(f16v1) + 461: 151(fvec3) Load 445(f16v2) + 462: 154(bvec3) FOrdNotEqual 460 461 + Store 442(bv) 462 + Return + FunctionEnd +26(builtinFragProcFuncs(): 2 Function None 3 + 27: Label + 463(f16v): 152(ptr) Variable Function + 467: 466(ptr) AccessChain 465(if16v) 34 + 468: 28(float) Load 467 + 469: 28(float) DPdx 468 + 470: 35(ptr) AccessChain 463(f16v) 34 + Store 470 469 + 471: 466(ptr) AccessChain 465(if16v) 90 + 472: 28(float) Load 471 + 473: 28(float) DPdy 472 + 474: 35(ptr) AccessChain 463(f16v) 90 + Store 474 473 + 475: 151(fvec3) Load 465(if16v) + 476: 29(fvec2) VectorShuffle 475 475 0 1 + 477: 29(fvec2) DPdxFine 476 + 478: 151(fvec3) Load 463(f16v) + 479: 151(fvec3) VectorShuffle 478 477 3 4 2 + Store 463(f16v) 479 + 480: 151(fvec3) Load 465(if16v) + 481: 29(fvec2) VectorShuffle 480 480 0 1 + 482: 29(fvec2) DPdyFine 481 + 483: 151(fvec3) Load 463(f16v) + 484: 151(fvec3) VectorShuffle 483 482 3 4 2 + Store 463(f16v) 484 + 485: 151(fvec3) Load 465(if16v) + 486: 151(fvec3) DPdxCoarse 485 + Store 463(f16v) 486 + 487: 151(fvec3) Load 465(if16v) + 488: 151(fvec3) DPdxCoarse 487 + Store 463(f16v) 488 + 489: 466(ptr) AccessChain 465(if16v) 34 + 490: 28(float) Load 489 + 491: 28(float) Fwidth 490 + 492: 35(ptr) AccessChain 463(f16v) 34 + Store 492 491 + 493: 151(fvec3) Load 465(if16v) + 494: 29(fvec2) VectorShuffle 493 493 0 1 + 495: 29(fvec2) FwidthFine 494 + 496: 151(fvec3) Load 463(f16v) + 497: 151(fvec3) VectorShuffle 496 495 3 4 2 + Store 463(f16v) 497 + 498: 151(fvec3) Load 465(if16v) + 499: 151(fvec3) FwidthCoarse 498 + Store 463(f16v) 499 + 500: 466(ptr) AccessChain 465(if16v) 34 + 501: 28(float) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 500 + 502: 35(ptr) AccessChain 463(f16v) 34 + Store 502 501 + 504: 151(fvec3) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 465(if16v) 503 + 505: 29(fvec2) VectorShuffle 504 504 0 1 + 506: 151(fvec3) Load 463(f16v) + 507: 151(fvec3) VectorShuffle 506 505 3 4 2 + Store 463(f16v) 507 + 510: 151(fvec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 465(if16v) 509 + Store 463(f16v) 510 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.flowControl.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.flowControl.frag.out new file mode 100755 index 0000000..274cb74 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.flowControl.frag.out @@ -0,0 +1,69 @@ +spv.flowControl.frag +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 39 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 11 14 17 19 25 30 35 + ExecutionMode 4 OriginUpperLeft + Source GLSL 140 + Name 4 "main" + Name 9 "color" + Name 11 "BaseColor" + Name 13 "color2" + Name 14 "otherColor" + Name 17 "c" + Name 19 "d" + Name 25 "bigColor" + Name 30 "smallColor" + Name 35 "gl_FragColor" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 10: TypePointer Input 7(fvec4) + 11(BaseColor): 10(ptr) Variable Input + 14(otherColor): 10(ptr) Variable Input + 16: TypePointer Input 6(float) + 17(c): 16(ptr) Variable Input + 19(d): 16(ptr) Variable Input + 21: TypeBool + 25(bigColor): 10(ptr) Variable Input + 30(smallColor): 10(ptr) Variable Input + 34: TypePointer Output 7(fvec4) +35(gl_FragColor): 34(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 9(color): 8(ptr) Variable Function + 13(color2): 8(ptr) Variable Function + 12: 7(fvec4) Load 11(BaseColor) + Store 9(color) 12 + 15: 7(fvec4) Load 14(otherColor) + Store 13(color2) 15 + 18: 6(float) Load 17(c) + 20: 6(float) Load 19(d) + 22: 21(bool) FOrdGreaterThan 18 20 + SelectionMerge 24 None + BranchConditional 22 23 29 + 23: Label + 26: 7(fvec4) Load 25(bigColor) + 27: 7(fvec4) Load 9(color) + 28: 7(fvec4) FAdd 27 26 + Store 9(color) 28 + Branch 24 + 29: Label + 31: 7(fvec4) Load 30(smallColor) + 32: 7(fvec4) Load 9(color) + 33: 7(fvec4) FAdd 32 31 + Store 9(color) 33 + Branch 24 + 24: Label + 36: 7(fvec4) Load 9(color) + 37: 7(fvec4) Load 13(color2) + 38: 7(fvec4) FMul 36 37 + Store 35(gl_FragColor) 38 + Return + FunctionEnd 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 new file mode 100644 index 0000000..939d082 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.for-complex-condition.vert.out @@ -0,0 +1,60 @@ +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 +// Id's are bound by 31 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 17 27 + Source GLSL 450 + Name 4 "main" + Name 8 "i" + Name 17 "flag" + Name 27 "r" + Decorate 17(flag) RelaxedPrecision + Decorate 17(flag) Location 0 + Decorate 18 RelaxedPrecision + Decorate 27(r) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypePointer Function 6(int) + 9: 6(int) Constant 0 + 16: TypePointer Input 6(int) + 17(flag): 16(ptr) Variable Input + 19: 6(int) Constant 1 + 20: TypeBool + 22: 6(int) Constant 10 + 23: 6(int) Constant 15 + 26: TypePointer Output 6(int) + 27(r): 26(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 8(i): 7(ptr) Variable Function + Store 8(i) 9 + Branch 10 + 10: Label + LoopMerge 12 13 None + Branch 14 + 14: Label + 15: 6(int) Load 8(i) + 18: 6(int) Load 17(flag) + 21: 20(bool) IEqual 18 19 + 24: 6(int) Select 21 22 23 + 25: 20(bool) SLessThan 15 24 + BranchConditional 25 11 12 + 11: Label + 28: 6(int) Load 8(i) + Store 27(r) 28 + Branch 13 + 13: Label + 29: 6(int) Load 8(i) + 30: 6(int) IAdd 29 19 + Store 8(i) 30 + Branch 10 + 12: Label + Return + FunctionEnd 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 new file mode 100644 index 0000000..764001d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.for-continue-break.vert.out @@ -0,0 +1,83 @@ +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 +// Id's are bound by 45 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" + Source ESSL 310 + Name 4 "main" + Name 8 "i" + Name 19 "A" + Name 27 "B" + Name 29 "C" + Name 36 "D" + Name 38 "E" + Name 39 "F" + Name 43 "G" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypePointer Function 6(int) + 9: 6(int) Constant 0 + 16: 6(int) Constant 10 + 17: TypeBool + 20: 6(int) Constant 1 + 22: 6(int) Constant 2 + 31: 6(int) Constant 3 + 40: 6(int) Constant 12 + 44: 6(int) Constant 99 + 4(main): 2 Function None 3 + 5: Label + 8(i): 7(ptr) Variable Function + 19(A): 7(ptr) Variable Function + 27(B): 7(ptr) Variable Function + 29(C): 7(ptr) Variable Function + 36(D): 7(ptr) Variable Function + 38(E): 7(ptr) Variable Function + 39(F): 7(ptr) Variable Function + 43(G): 7(ptr) Variable Function + Store 8(i) 9 + Branch 10 + 10: Label + LoopMerge 12 13 None + Branch 14 + 14: Label + 15: 6(int) Load 8(i) + 18: 17(bool) SLessThan 15 16 + BranchConditional 18 11 12 + 11: Label + Store 19(A) 20 + 21: 6(int) Load 8(i) + 23: 6(int) SMod 21 22 + 24: 17(bool) IEqual 23 9 + SelectionMerge 26 None + BranchConditional 24 25 26 + 25: Label + Store 27(B) 20 + Branch 13 + 26: Label + 30: 6(int) Load 8(i) + 32: 6(int) SMod 30 31 + 33: 17(bool) IEqual 32 9 + SelectionMerge 35 None + BranchConditional 33 34 35 + 34: Label + Store 36(D) 20 + Branch 12 + 35: Label + Store 39(F) 40 + Branch 13 + 13: Label + 41: 6(int) Load 8(i) + 42: 6(int) IAdd 41 20 + Store 8(i) 42 + Branch 10 + 12: Label + Store 43(G) 44 + Return + FunctionEnd 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 new file mode 100644 index 0000000..0ec3584 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.for-nobody.vert.out @@ -0,0 +1,50 @@ +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 +// Id's are bound by 25 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 23 + Source GLSL 450 + Name 4 "main" + Name 8 "i" + Name 23 "r" + Decorate 23(r) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypePointer Function 6(int) + 9: 6(int) Constant 0 + 16: 6(int) Constant 10 + 17: TypeBool + 20: 6(int) Constant 1 + 22: TypePointer Output 6(int) + 23(r): 22(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 8(i): 7(ptr) Variable Function + Store 8(i) 9 + Branch 10 + 10: Label + LoopMerge 12 13 None + Branch 14 + 14: Label + 15: 6(int) Load 8(i) + 18: 17(bool) SLessThan 15 16 + BranchConditional 18 11 12 + 11: Label + Branch 13 + 13: Label + 19: 6(int) Load 8(i) + 21: 6(int) IAdd 19 20 + Store 8(i) 21 + Branch 10 + 12: Label + 24: 6(int) Load 8(i) + Store 23(r) 24 + Return + FunctionEnd 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 new file mode 100644 index 0000000..c7346f9 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.for-notest.vert.out @@ -0,0 +1,44 @@ +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 +// Id's are bound by 20 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 15 + Source GLSL 450 + Name 4 "main" + Name 8 "i" + Name 15 "r" + Decorate 15(r) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypePointer Function 6(int) + 9: 6(int) Constant 0 + 14: TypePointer Output 6(int) + 15(r): 14(ptr) Variable Output + 18: 6(int) Constant 1 + 4(main): 2 Function None 3 + 5: Label + 8(i): 7(ptr) Variable Function + Store 8(i) 9 + Branch 10 + 10: Label + LoopMerge 12 13 None + Branch 11 + 11: Label + 16: 6(int) Load 8(i) + Store 15(r) 16 + Branch 13 + 13: Label + 17: 6(int) Load 8(i) + 19: 6(int) IAdd 17 18 + Store 8(i) 19 + Branch 10 + 12: Label + Return + FunctionEnd 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 new file mode 100755 index 0000000..996b65a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.for-simple.vert.out @@ -0,0 +1,48 @@ +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 +// Id's are bound by 24 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" + Source ESSL 310 + Name 4 "main" + Name 8 "i" + Name 19 "j" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypePointer Function 6(int) + 9: 6(int) Constant 0 + 16: 6(int) Constant 10 + 17: TypeBool + 20: 6(int) Constant 12 + 22: 6(int) Constant 1 + 4(main): 2 Function None 3 + 5: Label + 8(i): 7(ptr) Variable Function + 19(j): 7(ptr) Variable Function + Store 8(i) 9 + Branch 10 + 10: Label + LoopMerge 12 13 None + Branch 14 + 14: Label + 15: 6(int) Load 8(i) + 18: 17(bool) SLessThan 15 16 + BranchConditional 18 11 12 + 11: Label + Store 19(j) 20 + Branch 13 + 13: Label + 21: 6(int) Load 8(i) + 23: 6(int) IAdd 21 22 + Store 8(i) 23 + Branch 10 + 12: Label + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.forLoop.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.forLoop.frag.out new file mode 100755 index 0000000..628c791 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.forLoop.frag.out @@ -0,0 +1,211 @@ +spv.forLoop.frag +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 131 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 11 24 28 36 53 104 + ExecutionMode 4 OriginUpperLeft + Source GLSL 140 + Name 4 "main" + Name 9 "color" + Name 11 "BaseColor" + Name 15 "i" + Name 24 "Count" + Name 28 "bigColor" + Name 36 "gl_FragColor" + Name 39 "sum" + Name 41 "i" + Name 53 "v4" + Name 63 "i" + Name 71 "tv4" + Name 88 "r" + Name 94 "i" + Name 104 "f" + Name 117 "i" + Decorate 24(Count) Flat + Decorate 53(v4) Flat + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 10: TypePointer Input 7(fvec4) + 11(BaseColor): 10(ptr) Variable Input + 13: TypeInt 32 1 + 14: TypePointer Function 13(int) + 16: 13(int) Constant 0 + 23: TypePointer Input 13(int) + 24(Count): 23(ptr) Variable Input + 26: TypeBool + 28(bigColor): 10(ptr) Variable Input + 33: 13(int) Constant 1 + 35: TypePointer Output 7(fvec4) +36(gl_FragColor): 35(ptr) Variable Output + 38: TypePointer Function 6(float) + 40: 6(float) Constant 0 + 48: 13(int) Constant 4 + 50: TypeInt 32 0 + 51: TypeVector 50(int) 4 + 52: TypePointer Input 51(ivec4) + 53(v4): 52(ptr) Variable Input + 55: TypePointer Input 50(int) + 76: 50(int) Constant 4 + 89: TypeVector 6(float) 3 + 103: TypePointer Input 6(float) + 104(f): 103(ptr) Variable Input + 106: 50(int) Constant 3 + 124: 13(int) Constant 16 + 4(main): 2 Function None 3 + 5: Label + 9(color): 8(ptr) Variable Function + 15(i): 14(ptr) Variable Function + 39(sum): 38(ptr) Variable Function + 41(i): 14(ptr) Variable Function + 63(i): 14(ptr) Variable Function + 71(tv4): 8(ptr) Variable Function + 88(r): 8(ptr) Variable Function + 94(i): 14(ptr) Variable Function + 117(i): 14(ptr) Variable Function + 12: 7(fvec4) Load 11(BaseColor) + Store 9(color) 12 + Store 15(i) 16 + Branch 17 + 17: Label + LoopMerge 19 20 None + Branch 21 + 21: Label + 22: 13(int) Load 15(i) + 25: 13(int) Load 24(Count) + 27: 26(bool) SLessThan 22 25 + BranchConditional 27 18 19 + 18: Label + 29: 7(fvec4) Load 28(bigColor) + 30: 7(fvec4) Load 9(color) + 31: 7(fvec4) FAdd 30 29 + Store 9(color) 31 + Branch 20 + 20: Label + 32: 13(int) Load 15(i) + 34: 13(int) IAdd 32 33 + Store 15(i) 34 + Branch 17 + 19: Label + 37: 7(fvec4) Load 9(color) + Store 36(gl_FragColor) 37 + Store 39(sum) 40 + Store 41(i) 16 + Branch 42 + 42: Label + LoopMerge 44 45 None + Branch 46 + 46: Label + 47: 13(int) Load 41(i) + 49: 26(bool) SLessThan 47 48 + BranchConditional 49 43 44 + 43: Label + 54: 13(int) Load 41(i) + 56: 55(ptr) AccessChain 53(v4) 54 + 57: 50(int) Load 56 + 58: 6(float) ConvertUToF 57 + 59: 6(float) Load 39(sum) + 60: 6(float) FAdd 59 58 + Store 39(sum) 60 + Branch 45 + 45: Label + 61: 13(int) Load 41(i) + 62: 13(int) IAdd 61 33 + Store 41(i) 62 + Branch 42 + 44: Label + Store 63(i) 16 + Branch 64 + 64: Label + LoopMerge 66 67 None + Branch 68 + 68: Label + 69: 13(int) Load 63(i) + 70: 26(bool) SLessThan 69 48 + BranchConditional 70 65 66 + 65: Label + 72: 13(int) Load 63(i) + 73: 13(int) Load 63(i) + 74: 55(ptr) AccessChain 53(v4) 73 + 75: 50(int) Load 74 + 77: 50(int) IMul 75 76 + 78: 6(float) ConvertUToF 77 + 79: 38(ptr) AccessChain 71(tv4) 72 + Store 79 78 + Branch 67 + 67: Label + 80: 13(int) Load 63(i) + 81: 13(int) IAdd 80 33 + Store 63(i) 81 + Branch 64 + 66: Label + 82: 6(float) Load 39(sum) + 83: 7(fvec4) CompositeConstruct 82 82 82 82 + 84: 7(fvec4) Load 71(tv4) + 85: 7(fvec4) FAdd 83 84 + 86: 7(fvec4) Load 36(gl_FragColor) + 87: 7(fvec4) FAdd 86 85 + Store 36(gl_FragColor) 87 + 90: 7(fvec4) Load 11(BaseColor) + 91: 89(fvec3) VectorShuffle 90 90 0 1 2 + 92: 7(fvec4) Load 88(r) + 93: 7(fvec4) VectorShuffle 92 91 4 5 6 3 + Store 88(r) 93 + Store 94(i) 16 + Branch 95 + 95: Label + LoopMerge 97 98 None + Branch 99 + 99: Label + 100: 13(int) Load 94(i) + 101: 13(int) Load 24(Count) + 102: 26(bool) SLessThan 100 101 + BranchConditional 102 96 97 + 96: Label + 105: 6(float) Load 104(f) + 107: 38(ptr) AccessChain 88(r) 106 + Store 107 105 + Branch 98 + 98: Label + 108: 13(int) Load 94(i) + 109: 13(int) IAdd 108 33 + Store 94(i) 109 + Branch 95 + 97: Label + 110: 7(fvec4) Load 88(r) + 111: 89(fvec3) VectorShuffle 110 110 0 1 2 + 112: 7(fvec4) Load 36(gl_FragColor) + 113: 89(fvec3) VectorShuffle 112 112 0 1 2 + 114: 89(fvec3) FAdd 113 111 + 115: 7(fvec4) Load 36(gl_FragColor) + 116: 7(fvec4) VectorShuffle 115 114 4 5 6 3 + Store 36(gl_FragColor) 116 + Store 117(i) 16 + Branch 118 + 118: Label + LoopMerge 120 121 None + Branch 122 + 122: Label + 123: 13(int) Load 117(i) + 125: 26(bool) SLessThan 123 124 + BranchConditional 125 119 120 + 119: Label + 126: 6(float) Load 104(f) + 127: 7(fvec4) Load 36(gl_FragColor) + 128: 7(fvec4) VectorTimesScalar 127 126 + Store 36(gl_FragColor) 128 + Branch 121 + 121: Label + 129: 13(int) Load 117(i) + 130: 13(int) IAdd 129 48 + Store 117(i) 130 + Branch 118 + 120: Label + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.forwardFun.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.forwardFun.frag.out new file mode 100755 index 0000000..6575953 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.forwardFun.frag.out @@ -0,0 +1,113 @@ +spv.forwardFun.frag +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 60 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 20 30 36 59 + ExecutionMode 4 OriginUpperLeft + Source GLSL 140 + Name 4 "main" + Name 6 "bar(" + Name 10 "unreachableReturn(" + Name 16 "foo(vf4;" + Name 15 "bar" + Name 18 "color" + Name 20 "BaseColor" + Name 21 "param" + Name 27 "f" + Name 30 "gl_FragColor" + Name 36 "d" + Name 59 "bigColor" + Decorate 10(unreachableReturn() RelaxedPrecision + Decorate 16(foo(vf4;) RelaxedPrecision + Decorate 15(bar) RelaxedPrecision + Decorate 18(color) RelaxedPrecision + Decorate 20(BaseColor) RelaxedPrecision + Decorate 22 RelaxedPrecision + Decorate 23 RelaxedPrecision + Decorate 24 RelaxedPrecision + Decorate 27(f) RelaxedPrecision + Decorate 28 RelaxedPrecision + Decorate 30(gl_FragColor) RelaxedPrecision + Decorate 31 RelaxedPrecision + Decorate 32 RelaxedPrecision + Decorate 33 RelaxedPrecision + Decorate 36(d) RelaxedPrecision + Decorate 37 RelaxedPrecision + Decorate 52 RelaxedPrecision + Decorate 55 RelaxedPrecision + Decorate 56 RelaxedPrecision + Decorate 59(bigColor) RelaxedPrecision + 2: TypeVoid + 3: TypeFunction 2 + 8: TypeFloat 32 + 9: TypeFunction 8(float) + 12: TypeVector 8(float) 4 + 13: TypePointer Function 12(fvec4) + 14: TypeFunction 8(float) 13(ptr) + 19: TypePointer Input 12(fvec4) + 20(BaseColor): 19(ptr) Variable Input + 26: TypePointer Function 8(float) + 29: TypePointer Output 12(fvec4) +30(gl_FragColor): 29(ptr) Variable Output + 35: TypePointer Input 8(float) + 36(d): 35(ptr) Variable Input + 38: 8(float) Constant 1082549862 + 39: TypeBool + 43: 8(float) Constant 1067030938 + 46: 8(float) Constant 1083179008 + 49: TypeInt 32 0 + 50: 49(int) Constant 0 + 53: 49(int) Constant 1 + 59(bigColor): 19(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 18(color): 13(ptr) Variable Function + 21(param): 13(ptr) Variable Function + 27(f): 26(ptr) Variable Function + 22: 12(fvec4) Load 20(BaseColor) + Store 21(param) 22 + 23: 8(float) FunctionCall 16(foo(vf4;) 21(param) + 24: 12(fvec4) CompositeConstruct 23 23 23 23 + Store 18(color) 24 + 25: 2 FunctionCall 6(bar() + 28: 8(float) FunctionCall 10(unreachableReturn() + Store 27(f) 28 + 31: 12(fvec4) Load 18(color) + 32: 8(float) Load 27(f) + 33: 12(fvec4) VectorTimesScalar 31 32 + Store 30(gl_FragColor) 33 + Return + FunctionEnd + 6(bar(): 2 Function None 3 + 7: Label + Return + FunctionEnd +10(unreachableReturn(): 8(float) Function None 9 + 11: Label + 34: 2 FunctionCall 6(bar() + 37: 8(float) Load 36(d) + 40: 39(bool) FOrdLessThan 37 38 + SelectionMerge 42 None + BranchConditional 40 41 45 + 41: Label + ReturnValue 43 + 45: Label + ReturnValue 46 + 42: Label + 48: 8(float) Undef + ReturnValue 48 + FunctionEnd + 16(foo(vf4;): 8(float) Function None 14 + 15(bar): 13(ptr) FunctionParameter + 17: Label + 51: 26(ptr) AccessChain 15(bar) 50 + 52: 8(float) Load 51 + 54: 26(ptr) AccessChain 15(bar) 53 + 55: 8(float) Load 54 + 56: 8(float) FAdd 52 55 + ReturnValue 56 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.functionCall.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.functionCall.frag.out new file mode 100755 index 0000000..69a525f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.functionCall.frag.out @@ -0,0 +1,123 @@ +spv.functionCall.frag +WARNING: 0:3: varying deprecated in version 130; may be removed in future release +WARNING: 0:4: varying deprecated in version 130; may be removed in future release +WARNING: 0:5: varying deprecated in version 130; may be removed in future release + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 76 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 35 58 69 75 + ExecutionMode 4 OriginUpperLeft + Source GLSL 140 + Name 4 "main" + Name 11 "foo(vf4;" + Name 10 "bar" + Name 13 "bar(" + Name 16 "unreachableReturn(" + Name 18 "missingReturn(" + Name 21 "h" + Name 35 "d" + Name 56 "color" + Name 58 "BaseColor" + Name 59 "param" + Name 64 "f" + Name 66 "g" + Name 69 "gl_FragColor" + Name 75 "bigColor" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 9: TypeFunction 6(float) 8(ptr) + 15: TypeFunction 6(float) + 20: TypePointer Private 6(float) + 21(h): 20(ptr) Variable Private + 22: 6(float) Constant 0 + 23: TypeInt 32 0 + 24: 23(int) Constant 0 + 25: TypePointer Function 6(float) + 28: 23(int) Constant 1 + 34: TypePointer Input 6(float) + 35(d): 34(ptr) Variable Input + 37: 6(float) Constant 1082549862 + 38: TypeBool + 42: 6(float) Constant 1067030938 + 45: 6(float) Constant 1083179008 + 53: 6(float) Constant 1081711002 + 57: TypePointer Input 7(fvec4) + 58(BaseColor): 57(ptr) Variable Input + 68: TypePointer Output 7(fvec4) +69(gl_FragColor): 68(ptr) Variable Output + 75(bigColor): 57(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 56(color): 8(ptr) Variable Function + 59(param): 8(ptr) Variable Function + 64(f): 25(ptr) Variable Function + 66(g): 25(ptr) Variable Function + Store 21(h) 22 + 60: 7(fvec4) Load 58(BaseColor) + Store 59(param) 60 + 61: 6(float) FunctionCall 11(foo(vf4;) 59(param) + 62: 7(fvec4) CompositeConstruct 61 61 61 61 + Store 56(color) 62 + 63: 2 FunctionCall 13(bar() + 65: 6(float) FunctionCall 16(unreachableReturn() + Store 64(f) 65 + 67: 6(float) FunctionCall 18(missingReturn() + Store 66(g) 67 + 70: 7(fvec4) Load 56(color) + 71: 6(float) Load 64(f) + 72: 7(fvec4) VectorTimesScalar 70 71 + 73: 6(float) Load 21(h) + 74: 7(fvec4) VectorTimesScalar 72 73 + Store 69(gl_FragColor) 74 + Return + FunctionEnd + 11(foo(vf4;): 6(float) Function None 9 + 10(bar): 8(ptr) FunctionParameter + 12: Label + 26: 25(ptr) AccessChain 10(bar) 24 + 27: 6(float) Load 26 + 29: 25(ptr) AccessChain 10(bar) 28 + 30: 6(float) Load 29 + 31: 6(float) FAdd 27 30 + ReturnValue 31 + FunctionEnd + 13(bar(): 2 Function None 3 + 14: Label + Return + FunctionEnd +16(unreachableReturn(): 6(float) Function None 15 + 17: Label + 36: 6(float) Load 35(d) + 39: 38(bool) FOrdLessThan 36 37 + SelectionMerge 41 None + BranchConditional 39 40 44 + 40: Label + ReturnValue 42 + 44: Label + ReturnValue 45 + 41: Label + 47: 6(float) Undef + ReturnValue 47 + FunctionEnd +18(missingReturn(): 6(float) Function None 15 + 19: Label + 48: 6(float) Load 35(d) + 49: 38(bool) FOrdLessThan 48 45 + SelectionMerge 51 None + BranchConditional 49 50 51 + 50: Label + 52: 6(float) Load 35(d) + Store 21(h) 52 + ReturnValue 53 + 51: Label + 55: 6(float) Undef + ReturnValue 55 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.functionNestedOpaque.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.functionNestedOpaque.vert.out new file mode 100644 index 0000000..1dae381 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.functionNestedOpaque.vert.out @@ -0,0 +1,67 @@ +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 +// Id's are bound by 39 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" + Source GLSL 450 + Name 4 "main" + Name 12 "foo(s21;" + Name 11 "t" + Name 14 "S" + MemberName 14(S) 0 "s" + Name 18 "barc(struct-S-s211;" + Name 17 "p" + Name 21 "bar(struct-S-s211;" + Name 20 "p" + Name 36 "si" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeImage 6(float) 2D sampled format:Unknown + 8: TypeSampledImage 7 + 9: TypePointer UniformConstant 8 + 10: TypeFunction 2 9(ptr) + 14(S): TypeStruct 8 + 15: TypePointer UniformConstant 14(S) + 16: TypeFunction 2 15(ptr) + 24: TypeVector 6(float) 2 + 25: 6(float) Constant 1056964608 + 26: 24(fvec2) ConstantComposite 25 25 + 27: TypeVector 6(float) 4 + 28: 6(float) Constant 0 + 30: TypeInt 32 1 + 31: 30(int) Constant 0 + 36(si): 15(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label + 37: 2 FunctionCall 18(barc(struct-S-s211;) 36(si) + 38: 2 FunctionCall 21(bar(struct-S-s211;) 36(si) + Return + FunctionEnd + 12(foo(s21;): 2 Function None 10 + 11(t): 9(ptr) FunctionParameter + 13: Label + 23: 8 Load 11(t) + 29: 27(fvec4) ImageSampleExplicitLod 23 26 Lod 28 + Return + FunctionEnd +18(barc(struct-S-s211;): 2 Function None 16 + 17(p): 15(ptr) FunctionParameter + 19: Label + 32: 9(ptr) AccessChain 17(p) 31 + 33: 2 FunctionCall 12(foo(s21;) 32 + Return + FunctionEnd +21(bar(struct-S-s211;): 2 Function None 16 + 20(p): 15(ptr) FunctionParameter + 22: Label + 34: 9(ptr) AccessChain 20(p) 31 + 35: 2 FunctionCall 12(foo(s21;) 34 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.functionSemantics.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.functionSemantics.frag.out new file mode 100755 index 0000000..005a315 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.functionSemantics.frag.out @@ -0,0 +1,228 @@ +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 +// Id's are bound by 156 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 76 152 + ExecutionMode 4 OriginUpperLeft + Source GLSL 400 + Name 4 "main" + Name 15 "foo(i1;i1;i1;i1;i1;i1;" + Name 9 "a" + Name 10 "b" + Name 11 "c" + Name 12 "d" + Name 13 "e" + Name 14 "f" + Name 25 "foo2(f1;vf3;i1;" + Name 22 "a" + Name 23 "b" + Name 24 "r" + Name 28 "foo3(" + Name 30 "sum" + Name 76 "u" + Name 89 "t" + Name 92 "s" + MemberName 92(s) 0 "t" + Name 94 "f" + Name 98 "color" + Name 104 "e" + Name 105 "param" + Name 106 "param" + Name 107 "param" + Name 108 "param" + Name 123 "ret" + Name 125 "tempReturn" + Name 130 "tempArg" + Name 131 "param" + Name 132 "param" + Name 133 "param" + Name 136 "arg" + Name 152 "gl_FragColor" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypePointer Function 6(int) + 8: TypeFunction 6(int) 7(ptr) 6(int) 7(ptr) 6(int) 7(ptr) 7(ptr) + 17: TypeFloat 32 + 18: TypePointer Function 17(float) + 19: TypeVector 17(float) 3 + 20: TypePointer Function 19(fvec3) + 21: TypeFunction 6(int) 18(ptr) 20(ptr) 7(ptr) + 27: TypeFunction 6(int) + 38: 6(int) Constant 64 + 43: 6(int) Constant 1024 + 62: 17(float) Constant 1077936128 + 66: 17(float) Constant 1084227584 + 67: TypeInt 32 0 + 68: 67(int) Constant 1 + 75: TypePointer Input 17(float) + 76(u): 75(ptr) Variable Input + 78: 17(float) Constant 1078774989 + 79: TypeBool + 84: 6(int) Constant 1000000 + 86: 6(int) Constant 2000000 + 90: 6(int) Constant 2 + 91: TypeVector 6(int) 4 + 92(s): TypeStruct 91(ivec4) + 93: TypePointer Function 92(s) + 95: 6(int) Constant 0 + 96: 6(int) Constant 32 + 99: 6(int) Constant 1 + 103: 6(int) Constant 8 + 115: 6(int) Constant 128 + 124: TypePointer Private 6(int) + 125(tempReturn): 124(ptr) Variable Private + 126: 17(float) Constant 1082130432 + 127: 17(float) Constant 1065353216 + 128: 17(float) Constant 1073741824 + 129: 19(fvec3) ConstantComposite 127 128 62 + 150: TypeVector 17(float) 4 + 151: TypePointer Output 150(fvec4) +152(gl_FragColor): 151(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 89(t): 7(ptr) Variable Function + 94(f): 93(ptr) Variable Function + 98(color): 7(ptr) Variable Function + 104(e): 7(ptr) Variable Function + 105(param): 7(ptr) Variable Function + 106(param): 7(ptr) Variable Function + 107(param): 7(ptr) Variable Function + 108(param): 7(ptr) Variable Function + 123(ret): 18(ptr) Variable Function + 130(tempArg): 7(ptr) Variable Function + 131(param): 18(ptr) Variable Function + 132(param): 20(ptr) Variable Function + 133(param): 7(ptr) Variable Function + 136(arg): 18(ptr) Variable Function + Store 89(t) 90 + 97: 7(ptr) AccessChain 94(f) 95 68 + Store 97 96 + 100: 6(int) Load 89(t) + 101: 6(int) Load 89(t) + 102: 6(int) IAdd 100 101 + Store 105(param) 99 + Store 106(param) 102 + 109: 7(ptr) AccessChain 94(f) 95 68 + 110: 6(int) Load 109 + Store 108(param) 110 + 111: 6(int) FunctionCall 15(foo(i1;i1;i1;i1;i1;i1;) 105(param) 90 106(param) 103 107(param) 108(param) + 112: 6(int) Load 107(param) + Store 104(e) 112 + 113: 6(int) Load 108(param) + 114: 7(ptr) AccessChain 94(f) 95 68 + Store 114 113 + Store 98(color) 111 + 116: 6(int) Load 104(e) + 117: 7(ptr) AccessChain 94(f) 95 68 + 118: 6(int) Load 117 + 119: 6(int) IAdd 116 118 + 120: 6(int) IMul 115 119 + 121: 6(int) Load 98(color) + 122: 6(int) IAdd 121 120 + Store 98(color) 122 + Store 131(param) 126 + Store 132(param) 129 + 134: 6(int) FunctionCall 25(foo2(f1;vf3;i1;) 131(param) 132(param) 133(param) + 135: 6(int) Load 133(param) + Store 130(tempArg) 135 + Store 125(tempReturn) 134 + 137: 6(int) Load 130(tempArg) + 138: 17(float) ConvertSToF 137 + Store 136(arg) 138 + 139: 6(int) Load 125(tempReturn) + 140: 17(float) ConvertSToF 139 + Store 123(ret) 140 + 141: 17(float) Load 123(ret) + 142: 17(float) Load 136(arg) + 143: 17(float) FAdd 141 142 + 144: 6(int) ConvertFToS 143 + 145: 6(int) Load 98(color) + 146: 6(int) IAdd 145 144 + Store 98(color) 146 + 147: 6(int) FunctionCall 28(foo3() + 148: 6(int) Load 98(color) + 149: 6(int) IAdd 148 147 + Store 98(color) 149 + 153: 6(int) Load 98(color) + 154: 17(float) ConvertSToF 153 + 155: 150(fvec4) CompositeConstruct 154 154 154 154 + Store 152(gl_FragColor) 155 + Return + FunctionEnd +15(foo(i1;i1;i1;i1;i1;i1;): 6(int) Function None 8 + 9(a): 7(ptr) FunctionParameter + 10(b): 6(int) FunctionParameter + 11(c): 7(ptr) FunctionParameter + 12(d): 6(int) FunctionParameter + 13(e): 7(ptr) FunctionParameter + 14(f): 7(ptr) FunctionParameter + 16: Label + 30(sum): 7(ptr) Variable Function + 31: 6(int) Load 9(a) + 32: 6(int) IAdd 31 10(b) + 33: 6(int) Load 11(c) + 34: 6(int) IAdd 32 33 + 35: 6(int) IAdd 34 12(d) + 36: 6(int) Load 14(f) + 37: 6(int) IAdd 35 36 + Store 30(sum) 37 + 39: 6(int) Load 9(a) + 40: 6(int) IMul 39 38 + Store 9(a) 40 + 41: 6(int) Load 11(c) + 42: 6(int) IMul 41 38 + Store 11(c) 42 + Store 13(e) 43 + 44: 6(int) Load 14(f) + 45: 6(int) IMul 44 38 + Store 14(f) 45 + 46: 6(int) Load 9(a) + 47: 6(int) IMul 38 10(b) + 48: 6(int) IAdd 46 47 + 49: 6(int) Load 11(c) + 50: 6(int) IAdd 48 49 + 51: 6(int) IMul 38 12(d) + 52: 6(int) IAdd 50 51 + 53: 6(int) Load 13(e) + 54: 6(int) IAdd 52 53 + 55: 6(int) Load 14(f) + 56: 6(int) IAdd 54 55 + 57: 6(int) Load 30(sum) + 58: 6(int) IAdd 57 56 + Store 30(sum) 58 + 59: 6(int) Load 30(sum) + ReturnValue 59 + FunctionEnd +25(foo2(f1;vf3;i1;): 6(int) Function None 21 + 22(a): 18(ptr) FunctionParameter + 23(b): 20(ptr) FunctionParameter + 24(r): 7(ptr) FunctionParameter + 26: Label + 63: 17(float) Load 22(a) + 64: 17(float) FMul 62 63 + 65: 6(int) ConvertFToS 64 + Store 24(r) 65 + 69: 18(ptr) AccessChain 23(b) 68 + 70: 17(float) Load 69 + 71: 17(float) FMul 66 70 + 72: 6(int) ConvertFToS 71 + ReturnValue 72 + FunctionEnd + 28(foo3(): 6(int) Function None 27 + 29: Label + 77: 17(float) Load 76(u) + 80: 79(bool) FOrdGreaterThan 77 78 + SelectionMerge 82 None + BranchConditional 80 81 82 + 81: Label + Kill + 82: Label + ReturnValue 86 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.glFragColor.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.glFragColor.frag.out new file mode 100755 index 0000000..febbdf4 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.glFragColor.frag.out @@ -0,0 +1,26 @@ +spv.glFragColor.frag +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 12 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 9 + ExecutionMode 4 OriginLowerLeft + Source GLSL 330 + Name 4 "main" + Name 9 "gl_FragColor" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Output 7(fvec4) + 9(gl_FragColor): 8(ptr) Variable Output + 10: 6(float) Constant 1065353216 + 11: 7(fvec4) ConstantComposite 10 10 10 10 + 4(main): 2 Function None 3 + 5: Label + Store 9(gl_FragColor) 11 + Return + FunctionEnd 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 new file mode 100644 index 0000000..11818f6 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.glsl.register.autoassign.frag.out @@ -0,0 +1,224 @@ +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 +// Id's are bound by 142 + + Capability Shader + Capability Sampled1D + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 137 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + Name 4 "main" + Name 9 "Func1(" + Name 11 "Func2(" + Name 13 "Func2_unused(" + Name 17 "g_tTex1" + Name 21 "g_sSamp1" + Name 27 "g_tTex2" + Name 29 "g_sSamp2" + Name 39 "g_tTex3" + Name 46 "g_sSamp3" + Name 64 "g_tTex4" + Name 69 "g_sSamp4" + Name 84 "g_tTex5" + Name 86 "g_sSamp5" + Name 93 "MyStruct_t" + MemberName 93(MyStruct_t) 0 "a" + MemberName 93(MyStruct_t) 1 "b" + MemberName 93(MyStruct_t) 2 "c" + Name 95 "myblock" + MemberName 95(myblock) 0 "mystruct" + MemberName 95(myblock) 1 "myvec4_a" + MemberName 95(myblock) 2 "myvec4_b" + MemberName 95(myblock) 3 "myint4_a" + Name 97 "" + Name 119 "g_tTex_unused1" + Name 121 "g_sSamp_unused1" + Name 126 "g_tTex_unused2" + Name 128 "g_sSamp_unused2" + Name 137 "FragColor" + Name 141 "g_tTex_unused3" + Decorate 17(g_tTex1) DescriptorSet 0 + Decorate 17(g_tTex1) Binding 11 + Decorate 21(g_sSamp1) DescriptorSet 0 + Decorate 21(g_sSamp1) Binding 5 + Decorate 27(g_tTex2) DescriptorSet 0 + Decorate 27(g_tTex2) Binding 14 + Decorate 29(g_sSamp2) DescriptorSet 0 + Decorate 29(g_sSamp2) Binding 6 + Decorate 39(g_tTex3) DescriptorSet 0 + Decorate 39(g_tTex3) Binding 13 + Decorate 46(g_sSamp3) DescriptorSet 0 + Decorate 46(g_sSamp3) Binding 7 + Decorate 64(g_tTex4) DescriptorSet 0 + Decorate 64(g_tTex4) Binding 15 + Decorate 69(g_sSamp4) DescriptorSet 0 + Decorate 69(g_sSamp4) Binding 8 + Decorate 84(g_tTex5) DescriptorSet 0 + Decorate 84(g_tTex5) Binding 16 + Decorate 86(g_sSamp5) DescriptorSet 0 + Decorate 86(g_sSamp5) Binding 9 + MemberDecorate 93(MyStruct_t) 0 Offset 0 + MemberDecorate 93(MyStruct_t) 1 Offset 4 + MemberDecorate 93(MyStruct_t) 2 Offset 16 + MemberDecorate 95(myblock) 0 Offset 0 + MemberDecorate 95(myblock) 1 Offset 32 + MemberDecorate 95(myblock) 2 Offset 48 + MemberDecorate 95(myblock) 3 Offset 64 + Decorate 95(myblock) Block + Decorate 97 DescriptorSet 0 + Decorate 97 Binding 24 + Decorate 119(g_tTex_unused1) DescriptorSet 0 + Decorate 119(g_tTex_unused1) Binding 10 + Decorate 121(g_sSamp_unused1) DescriptorSet 0 + Decorate 126(g_tTex_unused2) DescriptorSet 0 + Decorate 126(g_tTex_unused2) Binding 12 + Decorate 128(g_sSamp_unused2) DescriptorSet 0 + Decorate 141(g_tTex_unused3) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypeFunction 7(fvec4) + 15: TypeImage 6(float) 1D sampled format:Unknown + 16: TypePointer UniformConstant 15 + 17(g_tTex1): 16(ptr) Variable UniformConstant + 19: TypeSampler + 20: TypePointer UniformConstant 19 + 21(g_sSamp1): 20(ptr) Variable UniformConstant + 23: TypeSampledImage 15 + 25: 6(float) Constant 1036831949 + 27(g_tTex2): 16(ptr) Variable UniformConstant + 29(g_sSamp2): 20(ptr) Variable UniformConstant + 32: 6(float) Constant 1045220557 + 35: TypeInt 32 0 + 36: 35(int) Constant 2 + 37: TypeArray 15 36 + 38: TypePointer UniformConstant 37 + 39(g_tTex3): 38(ptr) Variable UniformConstant + 40: TypeInt 32 1 + 41: 40(int) Constant 0 + 44: TypeArray 19 36 + 45: TypePointer UniformConstant 44 + 46(g_sSamp3): 45(ptr) Variable UniformConstant + 50: 6(float) Constant 1050253722 + 53: 40(int) Constant 1 + 61: 35(int) Constant 3 + 62: TypeArray 15 61 + 63: TypePointer UniformConstant 62 + 64(g_tTex4): 63(ptr) Variable UniformConstant + 67: TypeArray 19 61 + 68: TypePointer UniformConstant 67 + 69(g_sSamp4): 68(ptr) Variable UniformConstant + 73: 6(float) Constant 1053609165 + 76: 40(int) Constant 2 + 84(g_tTex5): 16(ptr) Variable UniformConstant + 86(g_sSamp5): 20(ptr) Variable UniformConstant + 89: 6(float) Constant 1056964608 + 92: TypeVector 6(float) 3 + 93(MyStruct_t): TypeStruct 40(int) 6(float) 92(fvec3) + 94: TypeVector 40(int) 4 + 95(myblock): TypeStruct 93(MyStruct_t) 7(fvec4) 7(fvec4) 94(ivec4) + 96: TypePointer Uniform 95(myblock) + 97: 96(ptr) Variable Uniform + 98: 35(int) Constant 1 + 99: TypePointer Uniform 6(float) +119(g_tTex_unused1): 16(ptr) Variable UniformConstant +121(g_sSamp_unused1): 20(ptr) Variable UniformConstant + 124: 6(float) Constant 1066192077 +126(g_tTex_unused2): 16(ptr) Variable UniformConstant +128(g_sSamp_unused2): 20(ptr) Variable UniformConstant + 131: 6(float) Constant 1067030938 + 136: TypePointer Output 7(fvec4) + 137(FragColor): 136(ptr) Variable Output +141(g_tTex_unused3): 16(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label + 138: 7(fvec4) FunctionCall 9(Func1() + 139: 7(fvec4) FunctionCall 11(Func2() + 140: 7(fvec4) FAdd 138 139 + Store 137(FragColor) 140 + Return + FunctionEnd + 9(Func1(): 7(fvec4) Function None 8 + 10: Label + 18: 15 Load 17(g_tTex1) + 22: 19 Load 21(g_sSamp1) + 24: 23 SampledImage 18 22 + 26: 7(fvec4) ImageSampleImplicitLod 24 25 + 28: 15 Load 27(g_tTex2) + 30: 19 Load 29(g_sSamp2) + 31: 23 SampledImage 28 30 + 33: 7(fvec4) ImageSampleImplicitLod 31 32 + 34: 7(fvec4) FAdd 26 33 + 42: 16(ptr) AccessChain 39(g_tTex3) 41 + 43: 15 Load 42 + 47: 20(ptr) AccessChain 46(g_sSamp3) 41 + 48: 19 Load 47 + 49: 23 SampledImage 43 48 + 51: 7(fvec4) ImageSampleImplicitLod 49 50 + 52: 7(fvec4) FAdd 34 51 + 54: 16(ptr) AccessChain 39(g_tTex3) 53 + 55: 15 Load 54 + 56: 20(ptr) AccessChain 46(g_sSamp3) 53 + 57: 19 Load 56 + 58: 23 SampledImage 55 57 + 59: 7(fvec4) ImageSampleImplicitLod 58 50 + 60: 7(fvec4) FAdd 52 59 + 65: 16(ptr) AccessChain 64(g_tTex4) 53 + 66: 15 Load 65 + 70: 20(ptr) AccessChain 69(g_sSamp4) 53 + 71: 19 Load 70 + 72: 23 SampledImage 66 71 + 74: 7(fvec4) ImageSampleImplicitLod 72 73 + 75: 7(fvec4) FAdd 60 74 + 77: 16(ptr) AccessChain 64(g_tTex4) 76 + 78: 15 Load 77 + 79: 20(ptr) AccessChain 69(g_sSamp4) 76 + 80: 19 Load 79 + 81: 23 SampledImage 78 80 + 82: 7(fvec4) ImageSampleImplicitLod 81 73 + 83: 7(fvec4) FAdd 75 82 + 85: 15 Load 84(g_tTex5) + 87: 19 Load 86(g_sSamp5) + 88: 23 SampledImage 85 87 + 90: 7(fvec4) ImageSampleImplicitLod 88 89 + 91: 7(fvec4) FAdd 83 90 + 100: 99(ptr) AccessChain 97 41 76 98 + 101: 6(float) Load 100 + 102: 7(fvec4) CompositeConstruct 101 101 101 101 + 103: 7(fvec4) FAdd 91 102 + ReturnValue 103 + FunctionEnd + 11(Func2(): 7(fvec4) Function None 8 + 12: Label + 106: 15 Load 17(g_tTex1) + 107: 19 Load 21(g_sSamp1) + 108: 23 SampledImage 106 107 + 109: 7(fvec4) ImageSampleImplicitLod 108 25 + 110: 16(ptr) AccessChain 39(g_tTex3) 53 + 111: 15 Load 110 + 112: 20(ptr) AccessChain 46(g_sSamp3) 53 + 113: 19 Load 112 + 114: 23 SampledImage 111 113 + 115: 7(fvec4) ImageSampleImplicitLod 114 50 + 116: 7(fvec4) FAdd 109 115 + ReturnValue 116 + FunctionEnd +13(Func2_unused(): 7(fvec4) Function None 8 + 14: Label + 120: 15 Load 119(g_tTex_unused1) + 122: 19 Load 121(g_sSamp_unused1) + 123: 23 SampledImage 120 122 + 125: 7(fvec4) ImageSampleImplicitLod 123 124 + 127: 15 Load 126(g_tTex_unused2) + 129: 19 Load 128(g_sSamp_unused2) + 130: 23 SampledImage 127 129 + 132: 7(fvec4) ImageSampleImplicitLod 130 131 + 133: 7(fvec4) FAdd 125 132 + ReturnValue 133 + FunctionEnd 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 new file mode 100644 index 0000000..327ac04 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.glsl.register.noautoassign.frag.out @@ -0,0 +1,218 @@ +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 +// Id's are bound by 142 + + Capability Shader + Capability Sampled1D + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 137 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + Name 4 "main" + Name 9 "Func1(" + Name 11 "Func2(" + Name 13 "Func2_unused(" + Name 17 "g_tTex1" + Name 21 "g_sSamp1" + Name 27 "g_tTex2" + Name 29 "g_sSamp2" + Name 39 "g_tTex3" + Name 46 "g_sSamp3" + Name 64 "g_tTex4" + Name 69 "g_sSamp4" + Name 84 "g_tTex5" + Name 86 "g_sSamp5" + Name 93 "MyStruct_t" + MemberName 93(MyStruct_t) 0 "a" + MemberName 93(MyStruct_t) 1 "b" + MemberName 93(MyStruct_t) 2 "c" + Name 95 "myblock" + MemberName 95(myblock) 0 "mystruct" + MemberName 95(myblock) 1 "myvec4_a" + MemberName 95(myblock) 2 "myvec4_b" + MemberName 95(myblock) 3 "myint4_a" + Name 97 "" + Name 119 "g_tTex_unused1" + Name 121 "g_sSamp_unused1" + Name 126 "g_tTex_unused2" + Name 128 "g_sSamp_unused2" + Name 137 "FragColor" + Name 141 "g_tTex_unused3" + Decorate 17(g_tTex1) DescriptorSet 0 + Decorate 17(g_tTex1) Binding 11 + Decorate 21(g_sSamp1) DescriptorSet 0 + Decorate 21(g_sSamp1) Binding 5 + Decorate 27(g_tTex2) DescriptorSet 0 + Decorate 29(g_sSamp2) DescriptorSet 0 + Decorate 39(g_tTex3) DescriptorSet 0 + Decorate 39(g_tTex3) Binding 13 + Decorate 46(g_sSamp3) DescriptorSet 0 + Decorate 46(g_sSamp3) Binding 7 + Decorate 64(g_tTex4) DescriptorSet 0 + Decorate 69(g_sSamp4) DescriptorSet 0 + Decorate 84(g_tTex5) DescriptorSet 0 + Decorate 86(g_sSamp5) DescriptorSet 0 + MemberDecorate 93(MyStruct_t) 0 Offset 0 + MemberDecorate 93(MyStruct_t) 1 Offset 4 + MemberDecorate 93(MyStruct_t) 2 Offset 16 + MemberDecorate 95(myblock) 0 Offset 0 + MemberDecorate 95(myblock) 1 Offset 32 + MemberDecorate 95(myblock) 2 Offset 48 + MemberDecorate 95(myblock) 3 Offset 64 + Decorate 95(myblock) Block + Decorate 97 DescriptorSet 0 + Decorate 97 Binding 19 + Decorate 119(g_tTex_unused1) DescriptorSet 0 + Decorate 119(g_tTex_unused1) Binding 10 + Decorate 121(g_sSamp_unused1) DescriptorSet 0 + Decorate 126(g_tTex_unused2) DescriptorSet 0 + Decorate 126(g_tTex_unused2) Binding 12 + Decorate 128(g_sSamp_unused2) DescriptorSet 0 + Decorate 141(g_tTex_unused3) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypeFunction 7(fvec4) + 15: TypeImage 6(float) 1D sampled format:Unknown + 16: TypePointer UniformConstant 15 + 17(g_tTex1): 16(ptr) Variable UniformConstant + 19: TypeSampler + 20: TypePointer UniformConstant 19 + 21(g_sSamp1): 20(ptr) Variable UniformConstant + 23: TypeSampledImage 15 + 25: 6(float) Constant 1036831949 + 27(g_tTex2): 16(ptr) Variable UniformConstant + 29(g_sSamp2): 20(ptr) Variable UniformConstant + 32: 6(float) Constant 1045220557 + 35: TypeInt 32 0 + 36: 35(int) Constant 2 + 37: TypeArray 15 36 + 38: TypePointer UniformConstant 37 + 39(g_tTex3): 38(ptr) Variable UniformConstant + 40: TypeInt 32 1 + 41: 40(int) Constant 0 + 44: TypeArray 19 36 + 45: TypePointer UniformConstant 44 + 46(g_sSamp3): 45(ptr) Variable UniformConstant + 50: 6(float) Constant 1050253722 + 53: 40(int) Constant 1 + 61: 35(int) Constant 3 + 62: TypeArray 15 61 + 63: TypePointer UniformConstant 62 + 64(g_tTex4): 63(ptr) Variable UniformConstant + 67: TypeArray 19 61 + 68: TypePointer UniformConstant 67 + 69(g_sSamp4): 68(ptr) Variable UniformConstant + 73: 6(float) Constant 1053609165 + 76: 40(int) Constant 2 + 84(g_tTex5): 16(ptr) Variable UniformConstant + 86(g_sSamp5): 20(ptr) Variable UniformConstant + 89: 6(float) Constant 1056964608 + 92: TypeVector 6(float) 3 + 93(MyStruct_t): TypeStruct 40(int) 6(float) 92(fvec3) + 94: TypeVector 40(int) 4 + 95(myblock): TypeStruct 93(MyStruct_t) 7(fvec4) 7(fvec4) 94(ivec4) + 96: TypePointer Uniform 95(myblock) + 97: 96(ptr) Variable Uniform + 98: 35(int) Constant 1 + 99: TypePointer Uniform 6(float) +119(g_tTex_unused1): 16(ptr) Variable UniformConstant +121(g_sSamp_unused1): 20(ptr) Variable UniformConstant + 124: 6(float) Constant 1066192077 +126(g_tTex_unused2): 16(ptr) Variable UniformConstant +128(g_sSamp_unused2): 20(ptr) Variable UniformConstant + 131: 6(float) Constant 1067030938 + 136: TypePointer Output 7(fvec4) + 137(FragColor): 136(ptr) Variable Output +141(g_tTex_unused3): 16(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label + 138: 7(fvec4) FunctionCall 9(Func1() + 139: 7(fvec4) FunctionCall 11(Func2() + 140: 7(fvec4) FAdd 138 139 + Store 137(FragColor) 140 + Return + FunctionEnd + 9(Func1(): 7(fvec4) Function None 8 + 10: Label + 18: 15 Load 17(g_tTex1) + 22: 19 Load 21(g_sSamp1) + 24: 23 SampledImage 18 22 + 26: 7(fvec4) ImageSampleImplicitLod 24 25 + 28: 15 Load 27(g_tTex2) + 30: 19 Load 29(g_sSamp2) + 31: 23 SampledImage 28 30 + 33: 7(fvec4) ImageSampleImplicitLod 31 32 + 34: 7(fvec4) FAdd 26 33 + 42: 16(ptr) AccessChain 39(g_tTex3) 41 + 43: 15 Load 42 + 47: 20(ptr) AccessChain 46(g_sSamp3) 41 + 48: 19 Load 47 + 49: 23 SampledImage 43 48 + 51: 7(fvec4) ImageSampleImplicitLod 49 50 + 52: 7(fvec4) FAdd 34 51 + 54: 16(ptr) AccessChain 39(g_tTex3) 53 + 55: 15 Load 54 + 56: 20(ptr) AccessChain 46(g_sSamp3) 53 + 57: 19 Load 56 + 58: 23 SampledImage 55 57 + 59: 7(fvec4) ImageSampleImplicitLod 58 50 + 60: 7(fvec4) FAdd 52 59 + 65: 16(ptr) AccessChain 64(g_tTex4) 53 + 66: 15 Load 65 + 70: 20(ptr) AccessChain 69(g_sSamp4) 53 + 71: 19 Load 70 + 72: 23 SampledImage 66 71 + 74: 7(fvec4) ImageSampleImplicitLod 72 73 + 75: 7(fvec4) FAdd 60 74 + 77: 16(ptr) AccessChain 64(g_tTex4) 76 + 78: 15 Load 77 + 79: 20(ptr) AccessChain 69(g_sSamp4) 76 + 80: 19 Load 79 + 81: 23 SampledImage 78 80 + 82: 7(fvec4) ImageSampleImplicitLod 81 73 + 83: 7(fvec4) FAdd 75 82 + 85: 15 Load 84(g_tTex5) + 87: 19 Load 86(g_sSamp5) + 88: 23 SampledImage 85 87 + 90: 7(fvec4) ImageSampleImplicitLod 88 89 + 91: 7(fvec4) FAdd 83 90 + 100: 99(ptr) AccessChain 97 41 76 98 + 101: 6(float) Load 100 + 102: 7(fvec4) CompositeConstruct 101 101 101 101 + 103: 7(fvec4) FAdd 91 102 + ReturnValue 103 + FunctionEnd + 11(Func2(): 7(fvec4) Function None 8 + 12: Label + 106: 15 Load 17(g_tTex1) + 107: 19 Load 21(g_sSamp1) + 108: 23 SampledImage 106 107 + 109: 7(fvec4) ImageSampleImplicitLod 108 25 + 110: 16(ptr) AccessChain 39(g_tTex3) 53 + 111: 15 Load 110 + 112: 20(ptr) AccessChain 46(g_sSamp3) 53 + 113: 19 Load 112 + 114: 23 SampledImage 111 113 + 115: 7(fvec4) ImageSampleImplicitLod 114 50 + 116: 7(fvec4) FAdd 109 115 + ReturnValue 116 + FunctionEnd +13(Func2_unused(): 7(fvec4) Function None 8 + 14: Label + 120: 15 Load 119(g_tTex_unused1) + 122: 19 Load 121(g_sSamp_unused1) + 123: 23 SampledImage 120 122 + 125: 7(fvec4) ImageSampleImplicitLod 123 124 + 127: 15 Load 126(g_tTex_unused2) + 129: 19 Load 128(g_sSamp_unused2) + 130: 23 SampledImage 127 129 + 132: 7(fvec4) ImageSampleImplicitLod 130 131 + 133: 7(fvec4) FAdd 125 132 + ReturnValue 133 + 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 new file mode 100644 index 0000000..ee29baf --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.image.frag.out @@ -0,0 +1,509 @@ +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 + + Capability Shader + Capability SampledRect + Capability Sampled1D + Capability SampledCubeArray + Capability SampledBuffer + 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 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + Name 4 "main" + Name 9 "iv" + Name 15 "i1D" + Name 27 "i2D" + Name 38 "i3D" + Name 45 "iCube" + Name 55 "iCubeArray" + Name 62 "i2DRect" + Name 72 "i1DArray" + Name 82 "i2DArray" + Name 89 "iBuffer" + Name 98 "i2DMS" + Name 108 "i2DMSArray" + Name 127 "v" + Name 132 "ic1D" + Name 142 "ic2D" + Name 152 "ic3D" + Name 229 "ui" + Name 232 "ii1D" + Name 245 "ui2D" + Name 248 "value" + Name 357 "wo2D" + Name 362 "fragData" + Name 373 "ic4D" + Decorate 15(i1D) DescriptorSet 0 + Decorate 15(i1D) Binding 0 + Decorate 27(i2D) DescriptorSet 0 + Decorate 27(i2D) Binding 1 + Decorate 38(i3D) DescriptorSet 0 + Decorate 38(i3D) Binding 2 + Decorate 45(iCube) DescriptorSet 0 + Decorate 45(iCube) Binding 3 + Decorate 55(iCubeArray) DescriptorSet 0 + Decorate 55(iCubeArray) Binding 4 + Decorate 62(i2DRect) DescriptorSet 0 + Decorate 62(i2DRect) Binding 5 + Decorate 72(i1DArray) DescriptorSet 0 + Decorate 72(i1DArray) Binding 6 + Decorate 82(i2DArray) DescriptorSet 0 + Decorate 82(i2DArray) Binding 7 + Decorate 89(iBuffer) DescriptorSet 0 + Decorate 89(iBuffer) Binding 8 + Decorate 98(i2DMS) DescriptorSet 0 + Decorate 98(i2DMS) Binding 9 + Decorate 108(i2DMSArray) DescriptorSet 0 + Decorate 108(i2DMSArray) Binding 10 + Decorate 132(ic1D) Flat + Decorate 142(ic2D) Flat + Decorate 152(ic3D) Flat + Decorate 232(ii1D) DescriptorSet 0 + Decorate 232(ii1D) Binding 11 + Decorate 245(ui2D) DescriptorSet 0 + Decorate 245(ui2D) Binding 12 + Decorate 248(value) Flat + Decorate 357(wo2D) DescriptorSet 0 + Decorate 357(wo2D) Binding 1 + Decorate 357(wo2D) NonReadable + Decorate 373(ic4D) Flat + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypeVector 6(int) 3 + 8: TypePointer Function 7(ivec3) + 10: 6(int) Constant 0 + 11: 7(ivec3) ConstantComposite 10 10 10 + 12: TypeFloat 32 + 13: TypeImage 12(float) 1D nonsampled format:Rgba32f + 14: TypePointer UniformConstant 13 + 15(i1D): 14(ptr) Variable UniformConstant + 18: TypeInt 32 0 + 19: 18(int) Constant 0 + 20: TypePointer Function 6(int) + 25: TypeImage 12(float) 2D nonsampled format:Rgba32f + 26: TypePointer UniformConstant 25 + 27(i2D): 26(ptr) Variable UniformConstant + 29: TypeVector 6(int) 2 + 36: TypeImage 12(float) 3D nonsampled format:Rgba32f + 37: TypePointer UniformConstant 36 + 38(i3D): 37(ptr) Variable UniformConstant + 43: TypeImage 12(float) Cube nonsampled format:Rgba32f + 44: TypePointer UniformConstant 43 + 45(iCube): 44(ptr) Variable UniformConstant + 53: TypeImage 12(float) Cube array nonsampled format:Rgba32f + 54: TypePointer UniformConstant 53 + 55(iCubeArray): 54(ptr) Variable UniformConstant + 60: TypeImage 12(float) Rect nonsampled format:Rgba32f + 61: TypePointer UniformConstant 60 + 62(i2DRect): 61(ptr) Variable UniformConstant + 70: TypeImage 12(float) 1D array nonsampled format:Rgba32f + 71: TypePointer UniformConstant 70 + 72(i1DArray): 71(ptr) Variable UniformConstant + 80: TypeImage 12(float) 2D array nonsampled format:Rg16 + 81: TypePointer UniformConstant 80 + 82(i2DArray): 81(ptr) Variable UniformConstant + 87: TypeImage 12(float) Buffer nonsampled format:Rgba32f + 88: TypePointer UniformConstant 87 + 89(iBuffer): 88(ptr) Variable UniformConstant + 96: TypeImage 12(float) 2D multi-sampled nonsampled format:Rgba32f + 97: TypePointer UniformConstant 96 + 98(i2DMS): 97(ptr) Variable UniformConstant + 106: TypeImage 12(float) 2D array multi-sampled nonsampled format:Rgba32f + 107: TypePointer UniformConstant 106 + 108(i2DMSArray): 107(ptr) Variable UniformConstant + 125: TypeVector 12(float) 4 + 126: TypePointer Function 125(fvec4) + 128: 12(float) Constant 0 + 129: 125(fvec4) ConstantComposite 128 128 128 128 + 131: TypePointer Input 6(int) + 132(ic1D): 131(ptr) Variable Input + 141: TypePointer Input 29(ivec2) + 142(ic2D): 141(ptr) Variable Input + 151: TypePointer Input 7(ivec3) + 152(ic3D): 151(ptr) Variable Input + 210: 6(int) Constant 1 + 216: 6(int) Constant 2 + 220: 6(int) Constant 3 + 226: 6(int) Constant 4 + 228: TypePointer Function 18(int) + 230: TypeImage 6(int) 1D nonsampled format:R32i + 231: TypePointer UniformConstant 230 + 232(ii1D): 231(ptr) Variable UniformConstant + 234: 6(int) Constant 10 + 235: TypePointer Image 6(int) + 237: 18(int) Constant 1 + 243: TypeImage 18(int) 2D nonsampled format:R32ui + 244: TypePointer UniformConstant 243 + 245(ui2D): 244(ptr) Variable UniformConstant + 247: TypePointer Input 18(int) + 248(value): 247(ptr) Variable Input + 250: TypePointer Image 18(int) + 256: 6(int) Constant 11 + 270: 6(int) Constant 12 + 284: 6(int) Constant 13 + 298: 6(int) Constant 14 + 312: 6(int) Constant 15 + 326: 6(int) Constant 16 + 340: 6(int) Constant 18 + 341: 6(int) Constant 17 + 349: 18(int) Constant 19 + 355: TypeImage 12(float) 2D nonsampled format:Unknown + 356: TypePointer UniformConstant 355 + 357(wo2D): 356(ptr) Variable UniformConstant + 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 + 4(main): 2 Function None 3 + 5: Label + 9(iv): 8(ptr) Variable Function + 127(v): 126(ptr) Variable Function + 229(ui): 228(ptr) Variable Function + Store 9(iv) 11 + 16: 13 Load 15(i1D) + 17: 6(int) ImageQuerySize 16 + 21: 20(ptr) AccessChain 9(iv) 19 + 22: 6(int) Load 21 + 23: 6(int) IAdd 22 17 + 24: 20(ptr) AccessChain 9(iv) 19 + Store 24 23 + 28: 25 Load 27(i2D) + 30: 29(ivec2) ImageQuerySize 28 + 31: 7(ivec3) Load 9(iv) + 32: 29(ivec2) VectorShuffle 31 31 0 1 + 33: 29(ivec2) IAdd 32 30 + 34: 7(ivec3) Load 9(iv) + 35: 7(ivec3) VectorShuffle 34 33 3 4 2 + Store 9(iv) 35 + 39: 36 Load 38(i3D) + 40: 7(ivec3) ImageQuerySize 39 + 41: 7(ivec3) Load 9(iv) + 42: 7(ivec3) IAdd 41 40 + Store 9(iv) 42 + 46: 43 Load 45(iCube) + 47: 29(ivec2) ImageQuerySize 46 + 48: 7(ivec3) Load 9(iv) + 49: 29(ivec2) VectorShuffle 48 48 0 1 + 50: 29(ivec2) IAdd 49 47 + 51: 7(ivec3) Load 9(iv) + 52: 7(ivec3) VectorShuffle 51 50 3 4 2 + Store 9(iv) 52 + 56: 53 Load 55(iCubeArray) + 57: 7(ivec3) ImageQuerySize 56 + 58: 7(ivec3) Load 9(iv) + 59: 7(ivec3) IAdd 58 57 + Store 9(iv) 59 + 63: 60 Load 62(i2DRect) + 64: 29(ivec2) ImageQuerySize 63 + 65: 7(ivec3) Load 9(iv) + 66: 29(ivec2) VectorShuffle 65 65 0 1 + 67: 29(ivec2) IAdd 66 64 + 68: 7(ivec3) Load 9(iv) + 69: 7(ivec3) VectorShuffle 68 67 3 4 2 + Store 9(iv) 69 + 73: 70 Load 72(i1DArray) + 74: 29(ivec2) ImageQuerySize 73 + 75: 7(ivec3) Load 9(iv) + 76: 29(ivec2) VectorShuffle 75 75 0 1 + 77: 29(ivec2) IAdd 76 74 + 78: 7(ivec3) Load 9(iv) + 79: 7(ivec3) VectorShuffle 78 77 3 4 2 + Store 9(iv) 79 + 83: 80 Load 82(i2DArray) + 84: 7(ivec3) ImageQuerySize 83 + 85: 7(ivec3) Load 9(iv) + 86: 7(ivec3) IAdd 85 84 + Store 9(iv) 86 + 90: 87 Load 89(iBuffer) + 91: 6(int) ImageQuerySize 90 + 92: 20(ptr) AccessChain 9(iv) 19 + 93: 6(int) Load 92 + 94: 6(int) IAdd 93 91 + 95: 20(ptr) AccessChain 9(iv) 19 + Store 95 94 + 99: 96 Load 98(i2DMS) + 100: 29(ivec2) ImageQuerySize 99 + 101: 7(ivec3) Load 9(iv) + 102: 29(ivec2) VectorShuffle 101 101 0 1 + 103: 29(ivec2) IAdd 102 100 + 104: 7(ivec3) Load 9(iv) + 105: 7(ivec3) VectorShuffle 104 103 3 4 2 + Store 9(iv) 105 + 109: 106 Load 108(i2DMSArray) + 110: 7(ivec3) ImageQuerySize 109 + 111: 7(ivec3) Load 9(iv) + 112: 7(ivec3) IAdd 111 110 + Store 9(iv) 112 + 113: 96 Load 98(i2DMS) + 114: 6(int) ImageQuerySamples 113 + 115: 20(ptr) AccessChain 9(iv) 19 + 116: 6(int) Load 115 + 117: 6(int) IAdd 116 114 + 118: 20(ptr) AccessChain 9(iv) 19 + Store 118 117 + 119: 106 Load 108(i2DMSArray) + 120: 6(int) ImageQuerySamples 119 + 121: 20(ptr) AccessChain 9(iv) 19 + 122: 6(int) Load 121 + 123: 6(int) IAdd 122 120 + 124: 20(ptr) AccessChain 9(iv) 19 + Store 124 123 + Store 127(v) 129 + 130: 13 Load 15(i1D) + 133: 6(int) Load 132(ic1D) + 134: 125(fvec4) ImageRead 130 133 + 135: 125(fvec4) Load 127(v) + 136: 125(fvec4) FAdd 135 134 + Store 127(v) 136 + 137: 13 Load 15(i1D) + 138: 6(int) Load 132(ic1D) + 139: 125(fvec4) Load 127(v) + ImageWrite 137 138 139 + 140: 25 Load 27(i2D) + 143: 29(ivec2) Load 142(ic2D) + 144: 125(fvec4) ImageRead 140 143 + 145: 125(fvec4) Load 127(v) + 146: 125(fvec4) FAdd 145 144 + Store 127(v) 146 + 147: 25 Load 27(i2D) + 148: 29(ivec2) Load 142(ic2D) + 149: 125(fvec4) Load 127(v) + ImageWrite 147 148 149 + 150: 36 Load 38(i3D) + 153: 7(ivec3) Load 152(ic3D) + 154: 125(fvec4) ImageRead 150 153 + 155: 125(fvec4) Load 127(v) + 156: 125(fvec4) FAdd 155 154 + Store 127(v) 156 + 157: 36 Load 38(i3D) + 158: 7(ivec3) Load 152(ic3D) + 159: 125(fvec4) Load 127(v) + ImageWrite 157 158 159 + 160: 43 Load 45(iCube) + 161: 7(ivec3) Load 152(ic3D) + 162: 125(fvec4) ImageRead 160 161 + 163: 125(fvec4) Load 127(v) + 164: 125(fvec4) FAdd 163 162 + Store 127(v) 164 + 165: 43 Load 45(iCube) + 166: 7(ivec3) Load 152(ic3D) + 167: 125(fvec4) Load 127(v) + ImageWrite 165 166 167 + 168: 53 Load 55(iCubeArray) + 169: 7(ivec3) Load 152(ic3D) + 170: 125(fvec4) ImageRead 168 169 + 171: 125(fvec4) Load 127(v) + 172: 125(fvec4) FAdd 171 170 + Store 127(v) 172 + 173: 53 Load 55(iCubeArray) + 174: 7(ivec3) Load 152(ic3D) + 175: 125(fvec4) Load 127(v) + ImageWrite 173 174 175 + 176: 60 Load 62(i2DRect) + 177: 29(ivec2) Load 142(ic2D) + 178: 125(fvec4) ImageRead 176 177 + 179: 125(fvec4) Load 127(v) + 180: 125(fvec4) FAdd 179 178 + Store 127(v) 180 + 181: 60 Load 62(i2DRect) + 182: 29(ivec2) Load 142(ic2D) + 183: 125(fvec4) Load 127(v) + ImageWrite 181 182 183 + 184: 70 Load 72(i1DArray) + 185: 29(ivec2) Load 142(ic2D) + 186: 125(fvec4) ImageRead 184 185 + 187: 125(fvec4) Load 127(v) + 188: 125(fvec4) FAdd 187 186 + Store 127(v) 188 + 189: 70 Load 72(i1DArray) + 190: 29(ivec2) Load 142(ic2D) + 191: 125(fvec4) Load 127(v) + ImageWrite 189 190 191 + 192: 80 Load 82(i2DArray) + 193: 7(ivec3) Load 152(ic3D) + 194: 125(fvec4) ImageRead 192 193 + 195: 125(fvec4) Load 127(v) + 196: 125(fvec4) FAdd 195 194 + Store 127(v) 196 + 197: 80 Load 82(i2DArray) + 198: 7(ivec3) Load 152(ic3D) + 199: 125(fvec4) Load 127(v) + ImageWrite 197 198 199 + 200: 87 Load 89(iBuffer) + 201: 6(int) Load 132(ic1D) + 202: 125(fvec4) ImageRead 200 201 + 203: 125(fvec4) Load 127(v) + 204: 125(fvec4) FAdd 203 202 + Store 127(v) 204 + 205: 87 Load 89(iBuffer) + 206: 6(int) Load 132(ic1D) + 207: 125(fvec4) Load 127(v) + ImageWrite 205 206 207 + 208: 96 Load 98(i2DMS) + 209: 29(ivec2) Load 142(ic2D) + 211: 125(fvec4) ImageRead 208 209 Sample 210 + 212: 125(fvec4) Load 127(v) + 213: 125(fvec4) FAdd 212 211 + Store 127(v) 213 + 214: 96 Load 98(i2DMS) + 215: 29(ivec2) Load 142(ic2D) + 217: 125(fvec4) Load 127(v) + ImageWrite 214 215 217 Sample 216 + 218: 106 Load 108(i2DMSArray) + 219: 7(ivec3) Load 152(ic3D) + 221: 125(fvec4) ImageRead 218 219 Sample 220 + 222: 125(fvec4) Load 127(v) + 223: 125(fvec4) FAdd 222 221 + Store 127(v) 223 + 224: 106 Load 108(i2DMSArray) + 225: 7(ivec3) Load 152(ic3D) + 227: 125(fvec4) Load 127(v) + ImageWrite 224 225 227 Sample 226 + Store 229(ui) 19 + 233: 6(int) Load 132(ic1D) + 236: 235(ptr) ImageTexelPointer 232(ii1D) 233 19 + 238: 6(int) AtomicIAdd 236 237 19 234 + 239: 20(ptr) AccessChain 9(iv) 19 + 240: 6(int) Load 239 + 241: 6(int) IAdd 240 238 + 242: 20(ptr) AccessChain 9(iv) 19 + Store 242 241 + 246: 29(ivec2) Load 142(ic2D) + 249: 18(int) Load 248(value) + 251: 250(ptr) ImageTexelPointer 245(ui2D) 246 19 + 252: 18(int) AtomicIAdd 251 237 19 249 + 253: 18(int) Load 229(ui) + 254: 18(int) IAdd 253 252 + Store 229(ui) 254 + 255: 6(int) Load 132(ic1D) + 257: 235(ptr) ImageTexelPointer 232(ii1D) 255 19 + 258: 6(int) AtomicSMin 257 237 19 256 + 259: 20(ptr) AccessChain 9(iv) 19 + 260: 6(int) Load 259 + 261: 6(int) IAdd 260 258 + 262: 20(ptr) AccessChain 9(iv) 19 + Store 262 261 + 263: 29(ivec2) Load 142(ic2D) + 264: 18(int) Load 248(value) + 265: 250(ptr) ImageTexelPointer 245(ui2D) 263 19 + 266: 18(int) AtomicUMin 265 237 19 264 + 267: 18(int) Load 229(ui) + 268: 18(int) IAdd 267 266 + Store 229(ui) 268 + 269: 6(int) Load 132(ic1D) + 271: 235(ptr) ImageTexelPointer 232(ii1D) 269 19 + 272: 6(int) AtomicSMax 271 237 19 270 + 273: 20(ptr) AccessChain 9(iv) 19 + 274: 6(int) Load 273 + 275: 6(int) IAdd 274 272 + 276: 20(ptr) AccessChain 9(iv) 19 + Store 276 275 + 277: 29(ivec2) Load 142(ic2D) + 278: 18(int) Load 248(value) + 279: 250(ptr) ImageTexelPointer 245(ui2D) 277 19 + 280: 18(int) AtomicUMax 279 237 19 278 + 281: 18(int) Load 229(ui) + 282: 18(int) IAdd 281 280 + Store 229(ui) 282 + 283: 6(int) Load 132(ic1D) + 285: 235(ptr) ImageTexelPointer 232(ii1D) 283 19 + 286: 6(int) AtomicAnd 285 237 19 284 + 287: 20(ptr) AccessChain 9(iv) 19 + 288: 6(int) Load 287 + 289: 6(int) IAdd 288 286 + 290: 20(ptr) AccessChain 9(iv) 19 + Store 290 289 + 291: 29(ivec2) Load 142(ic2D) + 292: 18(int) Load 248(value) + 293: 250(ptr) ImageTexelPointer 245(ui2D) 291 19 + 294: 18(int) AtomicAnd 293 237 19 292 + 295: 18(int) Load 229(ui) + 296: 18(int) IAdd 295 294 + Store 229(ui) 296 + 297: 6(int) Load 132(ic1D) + 299: 235(ptr) ImageTexelPointer 232(ii1D) 297 19 + 300: 6(int) AtomicOr 299 237 19 298 + 301: 20(ptr) AccessChain 9(iv) 19 + 302: 6(int) Load 301 + 303: 6(int) IAdd 302 300 + 304: 20(ptr) AccessChain 9(iv) 19 + Store 304 303 + 305: 29(ivec2) Load 142(ic2D) + 306: 18(int) Load 248(value) + 307: 250(ptr) ImageTexelPointer 245(ui2D) 305 19 + 308: 18(int) AtomicOr 307 237 19 306 + 309: 18(int) Load 229(ui) + 310: 18(int) IAdd 309 308 + Store 229(ui) 310 + 311: 6(int) Load 132(ic1D) + 313: 235(ptr) ImageTexelPointer 232(ii1D) 311 19 + 314: 6(int) AtomicXor 313 237 19 312 + 315: 20(ptr) AccessChain 9(iv) 19 + 316: 6(int) Load 315 + 317: 6(int) IAdd 316 314 + 318: 20(ptr) AccessChain 9(iv) 19 + Store 318 317 + 319: 29(ivec2) Load 142(ic2D) + 320: 18(int) Load 248(value) + 321: 250(ptr) ImageTexelPointer 245(ui2D) 319 19 + 322: 18(int) AtomicXor 321 237 19 320 + 323: 18(int) Load 229(ui) + 324: 18(int) IAdd 323 322 + Store 229(ui) 324 + 325: 6(int) Load 132(ic1D) + 327: 235(ptr) ImageTexelPointer 232(ii1D) 325 19 + 328: 6(int) AtomicExchange 327 237 19 326 + 329: 20(ptr) AccessChain 9(iv) 19 + 330: 6(int) Load 329 + 331: 6(int) IAdd 330 328 + 332: 20(ptr) AccessChain 9(iv) 19 + Store 332 331 + 333: 29(ivec2) Load 142(ic2D) + 334: 18(int) Load 248(value) + 335: 250(ptr) ImageTexelPointer 245(ui2D) 333 19 + 336: 18(int) AtomicExchange 335 237 19 334 + 337: 18(int) Load 229(ui) + 338: 18(int) IAdd 337 336 + Store 229(ui) 338 + 339: 6(int) Load 132(ic1D) + 342: 235(ptr) ImageTexelPointer 232(ii1D) 339 19 + 343: 6(int) AtomicCompareExchange 342 237 19 19 341 340 + 344: 20(ptr) AccessChain 9(iv) 19 + 345: 6(int) Load 344 + 346: 6(int) IAdd 345 343 + 347: 20(ptr) AccessChain 9(iv) 19 + Store 347 346 + 348: 29(ivec2) Load 142(ic2D) + 350: 18(int) Load 248(value) + 351: 250(ptr) ImageTexelPointer 245(ui2D) 348 19 + 352: 18(int) AtomicCompareExchange 351 237 19 19 350 349 + 353: 18(int) Load 229(ui) + 354: 18(int) IAdd 353 352 + Store 229(ui) 354 + 358: 355 Load 357(wo2D) + 359: 29(ivec2) Load 142(ic2D) + 360: 125(fvec4) Load 127(v) + ImageWrite 358 359 360 + 363: 18(int) Load 229(ui) + 364: 20(ptr) AccessChain 9(iv) 237 + 365: 6(int) Load 364 + 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 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.image.load-formatted.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.image.load-formatted.frag.out new file mode 100644 index 0000000..172a3a1 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.image.load-formatted.frag.out @@ -0,0 +1,352 @@ +spv.image.load-formatted.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 240 + + Capability Shader + Capability SampledRect + Capability Sampled1D + Capability SampledCubeArray + Capability SampledBuffer + Capability ImageMSArray + Capability ImageQuery + Capability StorageImageReadWithoutFormat + Capability StorageImageWriteWithoutFormat + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 132 142 152 233 237 239 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + SourceExtension "GL_EXT_shader_image_load_formatted" + Name 4 "main" + Name 9 "iv" + Name 15 "i1D" + Name 27 "i2D" + Name 38 "i3D" + Name 45 "iCube" + Name 55 "iCubeArray" + Name 62 "i2DRect" + Name 72 "i1DArray" + Name 82 "i2DArray" + Name 89 "iBuffer" + Name 98 "i2DMS" + Name 108 "i2DMSArray" + Name 127 "v" + Name 132 "ic1D" + Name 142 "ic2D" + Name 152 "ic3D" + Name 228 "wo2D" + Name 233 "fragData" + Name 237 "ic4D" + Name 239 "value" + Decorate 15(i1D) DescriptorSet 0 + Decorate 15(i1D) Binding 0 + Decorate 27(i2D) DescriptorSet 0 + Decorate 27(i2D) Binding 1 + Decorate 38(i3D) DescriptorSet 0 + Decorate 38(i3D) Binding 2 + Decorate 45(iCube) DescriptorSet 0 + Decorate 45(iCube) Binding 3 + Decorate 55(iCubeArray) DescriptorSet 0 + Decorate 55(iCubeArray) Binding 4 + Decorate 62(i2DRect) DescriptorSet 0 + Decorate 62(i2DRect) Binding 5 + Decorate 72(i1DArray) DescriptorSet 0 + Decorate 72(i1DArray) Binding 6 + Decorate 82(i2DArray) DescriptorSet 0 + Decorate 82(i2DArray) Binding 7 + Decorate 89(iBuffer) DescriptorSet 0 + Decorate 89(iBuffer) Binding 8 + Decorate 98(i2DMS) DescriptorSet 0 + Decorate 98(i2DMS) Binding 9 + Decorate 108(i2DMSArray) DescriptorSet 0 + Decorate 108(i2DMSArray) Binding 10 + Decorate 132(ic1D) Flat + Decorate 142(ic2D) Flat + Decorate 152(ic3D) Flat + Decorate 228(wo2D) DescriptorSet 0 + Decorate 228(wo2D) Binding 1 + Decorate 228(wo2D) NonReadable + Decorate 237(ic4D) Flat + Decorate 239(value) Flat + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypeVector 6(int) 3 + 8: TypePointer Function 7(ivec3) + 10: 6(int) Constant 0 + 11: 7(ivec3) ConstantComposite 10 10 10 + 12: TypeFloat 32 + 13: TypeImage 12(float) 1D nonsampled format:Unknown + 14: TypePointer UniformConstant 13 + 15(i1D): 14(ptr) Variable UniformConstant + 18: TypeInt 32 0 + 19: 18(int) Constant 0 + 20: TypePointer Function 6(int) + 25: TypeImage 12(float) 2D nonsampled format:Unknown + 26: TypePointer UniformConstant 25 + 27(i2D): 26(ptr) Variable UniformConstant + 29: TypeVector 6(int) 2 + 36: TypeImage 12(float) 3D nonsampled format:Unknown + 37: TypePointer UniformConstant 36 + 38(i3D): 37(ptr) Variable UniformConstant + 43: TypeImage 12(float) Cube nonsampled format:Unknown + 44: TypePointer UniformConstant 43 + 45(iCube): 44(ptr) Variable UniformConstant + 53: TypeImage 12(float) Cube array nonsampled format:Unknown + 54: TypePointer UniformConstant 53 + 55(iCubeArray): 54(ptr) Variable UniformConstant + 60: TypeImage 12(float) Rect nonsampled format:Unknown + 61: TypePointer UniformConstant 60 + 62(i2DRect): 61(ptr) Variable UniformConstant + 70: TypeImage 12(float) 1D array nonsampled format:Unknown + 71: TypePointer UniformConstant 70 + 72(i1DArray): 71(ptr) Variable UniformConstant + 80: TypeImage 12(float) 2D array nonsampled format:Unknown + 81: TypePointer UniformConstant 80 + 82(i2DArray): 81(ptr) Variable UniformConstant + 87: TypeImage 12(float) Buffer nonsampled format:Unknown + 88: TypePointer UniformConstant 87 + 89(iBuffer): 88(ptr) Variable UniformConstant + 96: TypeImage 12(float) 2D multi-sampled nonsampled format:Unknown + 97: TypePointer UniformConstant 96 + 98(i2DMS): 97(ptr) Variable UniformConstant + 106: TypeImage 12(float) 2D array multi-sampled nonsampled format:Unknown + 107: TypePointer UniformConstant 106 + 108(i2DMSArray): 107(ptr) Variable UniformConstant + 125: TypeVector 12(float) 4 + 126: TypePointer Function 125(fvec4) + 128: 12(float) Constant 0 + 129: 125(fvec4) ConstantComposite 128 128 128 128 + 131: TypePointer Input 6(int) + 132(ic1D): 131(ptr) Variable Input + 141: TypePointer Input 29(ivec2) + 142(ic2D): 141(ptr) Variable Input + 151: TypePointer Input 7(ivec3) + 152(ic3D): 151(ptr) Variable Input + 210: 6(int) Constant 1 + 216: 6(int) Constant 2 + 220: 6(int) Constant 3 + 226: 6(int) Constant 4 + 228(wo2D): 26(ptr) Variable UniformConstant + 232: TypePointer Output 125(fvec4) + 233(fragData): 232(ptr) Variable Output + 235: TypeVector 6(int) 4 + 236: TypePointer Input 235(ivec4) + 237(ic4D): 236(ptr) Variable Input + 238: TypePointer Input 18(int) + 239(value): 238(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 9(iv): 8(ptr) Variable Function + 127(v): 126(ptr) Variable Function + Store 9(iv) 11 + 16: 13 Load 15(i1D) + 17: 6(int) ImageQuerySize 16 + 21: 20(ptr) AccessChain 9(iv) 19 + 22: 6(int) Load 21 + 23: 6(int) IAdd 22 17 + 24: 20(ptr) AccessChain 9(iv) 19 + Store 24 23 + 28: 25 Load 27(i2D) + 30: 29(ivec2) ImageQuerySize 28 + 31: 7(ivec3) Load 9(iv) + 32: 29(ivec2) VectorShuffle 31 31 0 1 + 33: 29(ivec2) IAdd 32 30 + 34: 7(ivec3) Load 9(iv) + 35: 7(ivec3) VectorShuffle 34 33 3 4 2 + Store 9(iv) 35 + 39: 36 Load 38(i3D) + 40: 7(ivec3) ImageQuerySize 39 + 41: 7(ivec3) Load 9(iv) + 42: 7(ivec3) IAdd 41 40 + Store 9(iv) 42 + 46: 43 Load 45(iCube) + 47: 29(ivec2) ImageQuerySize 46 + 48: 7(ivec3) Load 9(iv) + 49: 29(ivec2) VectorShuffle 48 48 0 1 + 50: 29(ivec2) IAdd 49 47 + 51: 7(ivec3) Load 9(iv) + 52: 7(ivec3) VectorShuffle 51 50 3 4 2 + Store 9(iv) 52 + 56: 53 Load 55(iCubeArray) + 57: 7(ivec3) ImageQuerySize 56 + 58: 7(ivec3) Load 9(iv) + 59: 7(ivec3) IAdd 58 57 + Store 9(iv) 59 + 63: 60 Load 62(i2DRect) + 64: 29(ivec2) ImageQuerySize 63 + 65: 7(ivec3) Load 9(iv) + 66: 29(ivec2) VectorShuffle 65 65 0 1 + 67: 29(ivec2) IAdd 66 64 + 68: 7(ivec3) Load 9(iv) + 69: 7(ivec3) VectorShuffle 68 67 3 4 2 + Store 9(iv) 69 + 73: 70 Load 72(i1DArray) + 74: 29(ivec2) ImageQuerySize 73 + 75: 7(ivec3) Load 9(iv) + 76: 29(ivec2) VectorShuffle 75 75 0 1 + 77: 29(ivec2) IAdd 76 74 + 78: 7(ivec3) Load 9(iv) + 79: 7(ivec3) VectorShuffle 78 77 3 4 2 + Store 9(iv) 79 + 83: 80 Load 82(i2DArray) + 84: 7(ivec3) ImageQuerySize 83 + 85: 7(ivec3) Load 9(iv) + 86: 7(ivec3) IAdd 85 84 + Store 9(iv) 86 + 90: 87 Load 89(iBuffer) + 91: 6(int) ImageQuerySize 90 + 92: 20(ptr) AccessChain 9(iv) 19 + 93: 6(int) Load 92 + 94: 6(int) IAdd 93 91 + 95: 20(ptr) AccessChain 9(iv) 19 + Store 95 94 + 99: 96 Load 98(i2DMS) + 100: 29(ivec2) ImageQuerySize 99 + 101: 7(ivec3) Load 9(iv) + 102: 29(ivec2) VectorShuffle 101 101 0 1 + 103: 29(ivec2) IAdd 102 100 + 104: 7(ivec3) Load 9(iv) + 105: 7(ivec3) VectorShuffle 104 103 3 4 2 + Store 9(iv) 105 + 109: 106 Load 108(i2DMSArray) + 110: 7(ivec3) ImageQuerySize 109 + 111: 7(ivec3) Load 9(iv) + 112: 7(ivec3) IAdd 111 110 + Store 9(iv) 112 + 113: 96 Load 98(i2DMS) + 114: 6(int) ImageQuerySamples 113 + 115: 20(ptr) AccessChain 9(iv) 19 + 116: 6(int) Load 115 + 117: 6(int) IAdd 116 114 + 118: 20(ptr) AccessChain 9(iv) 19 + Store 118 117 + 119: 106 Load 108(i2DMSArray) + 120: 6(int) ImageQuerySamples 119 + 121: 20(ptr) AccessChain 9(iv) 19 + 122: 6(int) Load 121 + 123: 6(int) IAdd 122 120 + 124: 20(ptr) AccessChain 9(iv) 19 + Store 124 123 + Store 127(v) 129 + 130: 13 Load 15(i1D) + 133: 6(int) Load 132(ic1D) + 134: 125(fvec4) ImageRead 130 133 + 135: 125(fvec4) Load 127(v) + 136: 125(fvec4) FAdd 135 134 + Store 127(v) 136 + 137: 13 Load 15(i1D) + 138: 6(int) Load 132(ic1D) + 139: 125(fvec4) Load 127(v) + ImageWrite 137 138 139 + 140: 25 Load 27(i2D) + 143: 29(ivec2) Load 142(ic2D) + 144: 125(fvec4) ImageRead 140 143 + 145: 125(fvec4) Load 127(v) + 146: 125(fvec4) FAdd 145 144 + Store 127(v) 146 + 147: 25 Load 27(i2D) + 148: 29(ivec2) Load 142(ic2D) + 149: 125(fvec4) Load 127(v) + ImageWrite 147 148 149 + 150: 36 Load 38(i3D) + 153: 7(ivec3) Load 152(ic3D) + 154: 125(fvec4) ImageRead 150 153 + 155: 125(fvec4) Load 127(v) + 156: 125(fvec4) FAdd 155 154 + Store 127(v) 156 + 157: 36 Load 38(i3D) + 158: 7(ivec3) Load 152(ic3D) + 159: 125(fvec4) Load 127(v) + ImageWrite 157 158 159 + 160: 43 Load 45(iCube) + 161: 7(ivec3) Load 152(ic3D) + 162: 125(fvec4) ImageRead 160 161 + 163: 125(fvec4) Load 127(v) + 164: 125(fvec4) FAdd 163 162 + Store 127(v) 164 + 165: 43 Load 45(iCube) + 166: 7(ivec3) Load 152(ic3D) + 167: 125(fvec4) Load 127(v) + ImageWrite 165 166 167 + 168: 53 Load 55(iCubeArray) + 169: 7(ivec3) Load 152(ic3D) + 170: 125(fvec4) ImageRead 168 169 + 171: 125(fvec4) Load 127(v) + 172: 125(fvec4) FAdd 171 170 + Store 127(v) 172 + 173: 53 Load 55(iCubeArray) + 174: 7(ivec3) Load 152(ic3D) + 175: 125(fvec4) Load 127(v) + ImageWrite 173 174 175 + 176: 60 Load 62(i2DRect) + 177: 29(ivec2) Load 142(ic2D) + 178: 125(fvec4) ImageRead 176 177 + 179: 125(fvec4) Load 127(v) + 180: 125(fvec4) FAdd 179 178 + Store 127(v) 180 + 181: 60 Load 62(i2DRect) + 182: 29(ivec2) Load 142(ic2D) + 183: 125(fvec4) Load 127(v) + ImageWrite 181 182 183 + 184: 70 Load 72(i1DArray) + 185: 29(ivec2) Load 142(ic2D) + 186: 125(fvec4) ImageRead 184 185 + 187: 125(fvec4) Load 127(v) + 188: 125(fvec4) FAdd 187 186 + Store 127(v) 188 + 189: 70 Load 72(i1DArray) + 190: 29(ivec2) Load 142(ic2D) + 191: 125(fvec4) Load 127(v) + ImageWrite 189 190 191 + 192: 80 Load 82(i2DArray) + 193: 7(ivec3) Load 152(ic3D) + 194: 125(fvec4) ImageRead 192 193 + 195: 125(fvec4) Load 127(v) + 196: 125(fvec4) FAdd 195 194 + Store 127(v) 196 + 197: 80 Load 82(i2DArray) + 198: 7(ivec3) Load 152(ic3D) + 199: 125(fvec4) Load 127(v) + ImageWrite 197 198 199 + 200: 87 Load 89(iBuffer) + 201: 6(int) Load 132(ic1D) + 202: 125(fvec4) ImageRead 200 201 + 203: 125(fvec4) Load 127(v) + 204: 125(fvec4) FAdd 203 202 + Store 127(v) 204 + 205: 87 Load 89(iBuffer) + 206: 6(int) Load 132(ic1D) + 207: 125(fvec4) Load 127(v) + ImageWrite 205 206 207 + 208: 96 Load 98(i2DMS) + 209: 29(ivec2) Load 142(ic2D) + 211: 125(fvec4) ImageRead 208 209 Sample 210 + 212: 125(fvec4) Load 127(v) + 213: 125(fvec4) FAdd 212 211 + Store 127(v) 213 + 214: 96 Load 98(i2DMS) + 215: 29(ivec2) Load 142(ic2D) + 217: 125(fvec4) Load 127(v) + ImageWrite 214 215 217 Sample 216 + 218: 106 Load 108(i2DMSArray) + 219: 7(ivec3) Load 152(ic3D) + 221: 125(fvec4) ImageRead 218 219 Sample 220 + 222: 125(fvec4) Load 127(v) + 223: 125(fvec4) FAdd 222 221 + Store 127(v) 223 + 224: 106 Load 108(i2DMSArray) + 225: 7(ivec3) Load 152(ic3D) + 227: 125(fvec4) Load 127(v) + ImageWrite 224 225 227 Sample 226 + 229: 25 Load 228(wo2D) + 230: 29(ivec2) Load 142(ic2D) + 231: 125(fvec4) Load 127(v) + ImageWrite 229 230 231 + 234: 125(fvec4) Load 127(v) + Store 233(fragData) 234 + 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 new file mode 100644 index 0000000..df35fea --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.int64.frag.out @@ -0,0 +1,658 @@ +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 +// Id's are bound by 480 + + Capability Shader + Capability Float64 + Capability Int64 + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + SourceExtension "GL_ARB_gpu_shader_int64" + Name 4 "main" + Name 6 "literal(" + Name 8 "typeCast(" + Name 10 "operators(" + Name 12 "builtinFuncs(" + Name 16 "u64Max" + Name 20 "i64" + Name 28 "Uniforms" + MemberName 28(Uniforms) 0 "index" + Name 30 "" + Name 37 "indexable" + Name 41 "u64" + Name 49 "indexable" + Name 54 "i64v" + Name 58 "bv" + Name 67 "u64v" + Name 76 "iv" + Name 83 "uv" + Name 91 "fv" + Name 97 "dv" + Name 134 "u64v" + Name 139 "i64" + Name 159 "i" + Name 166 "uv" + Name 218 "b" + Name 278 "i64v" + Name 281 "i64" + Name 291 "u64v" + Name 293 "u64" + Name 365 "dv" + Name 384 "iv" + Name 389 "uv" + Name 393 "bv" + Name 454 "Block" + MemberName 454(Block) 0 "i64v" + MemberName 454(Block) 1 "u64" + Name 456 "block" + Name 457 "si64" + Name 458 "su64" + Name 459 "si" + Name 460 "su" + Name 461 "sb" + MemberDecorate 28(Uniforms) 0 Offset 0 + Decorate 28(Uniforms) Block + Decorate 30 DescriptorSet 0 + Decorate 30 Binding 0 + MemberDecorate 454(Block) 0 Offset 0 + MemberDecorate 454(Block) 1 Offset 24 + Decorate 454(Block) Block + Decorate 456(block) DescriptorSet 0 + Decorate 456(block) Binding 1 + Decorate 457(si64) SpecId 100 + Decorate 458(su64) SpecId 101 + Decorate 459(si) SpecId 102 + Decorate 460(su) SpecId 103 + Decorate 461(sb) SpecId 104 + 2: TypeVoid + 3: TypeFunction 2 + 14: TypeInt 64 0 + 15: TypePointer Private 14(int) + 16(u64Max): 15(ptr) Variable Private + 17: 14(int) Constant 4294967295 4294967295 + 18: TypeInt 64 1 + 19: TypePointer Function 18(int) + 21: TypeInt 32 0 + 22: 21(int) Constant 3 + 23: TypeArray 18(int) 22 + 24: 18(int) Constant 4008636143 4008636142 + 25: 18(int) Constant 4294967295 4294967295 + 26: 18(int) Constant 0 1 + 27: 23 ConstantComposite 24 25 26 + 28(Uniforms): TypeStruct 21(int) + 29: TypePointer Uniform 28(Uniforms) + 30: 29(ptr) Variable Uniform + 31: TypeInt 32 1 + 32: 31(int) Constant 0 + 33: TypePointer Uniform 21(int) + 36: TypePointer Function 23 + 40: TypePointer Function 14(int) + 42: TypeArray 14(int) 22 + 43: 14(int) Constant 0 1 + 44: 14(int) Constant 4294967295 1 + 45: 42 ConstantComposite 17 43 44 + 48: TypePointer Function 42 + 52: TypeVector 18(int) 2 + 53: TypePointer Function 52(ivec2) + 55: TypeBool + 56: TypeVector 55(bool) 2 + 57: TypePointer Function 56(bvec2) + 60: 18(int) Constant 0 0 + 61: 18(int) Constant 1 0 + 62: 52(ivec2) ConstantComposite 60 60 + 63: 52(ivec2) ConstantComposite 61 61 + 65: TypeVector 14(int) 2 + 66: TypePointer Function 65(ivec2) + 69: 14(int) Constant 0 0 + 70: 14(int) Constant 1 0 + 71: 65(ivec2) ConstantComposite 69 69 + 72: 65(ivec2) ConstantComposite 70 70 + 74: TypeVector 31(int) 2 + 75: TypePointer Function 74(ivec2) + 81: TypeVector 21(int) 2 + 82: TypePointer Function 81(ivec2) + 88: TypeFloat 32 + 89: TypeVector 88(float) 2 + 90: TypePointer Function 89(fvec2) + 94: TypeFloat 64 + 95: TypeVector 94(float) 2 + 96: TypePointer Function 95(fvec2) + 132: TypeVector 14(int) 3 + 133: TypePointer Function 132(ivec3) + 136: TypeVector 18(int) 3 + 158: TypePointer Function 31(int) + 164: TypeVector 21(int) 3 + 165: TypePointer Function 164(ivec3) + 199: TypeVector 31(int) 3 + 202: 21(int) Constant 1 + 203: TypePointer Function 21(int) + 209: 21(int) Constant 2 + 217: TypePointer Function 55(bool) + 219: 21(int) Constant 0 + 289: 52(ivec2) ConstantComposite 25 25 + 298: 132(ivec3) ConstantComposite 69 69 69 + 340: 55(bool) ConstantTrue + 347: 55(bool) ConstantFalse + 348: 56(bvec2) ConstantComposite 347 347 + 360: TypeVector 55(bool) 3 + 361: 360(bvec3) ConstantComposite 347 347 347 + 363: TypeVector 94(float) 3 + 364: TypePointer Function 363(fvec3) + 369: TypePointer Function 94(float) + 380: 31(int) Constant 1 + 381: 31(int) Constant 2 + 382: 74(ivec2) ConstantComposite 380 381 + 387: 81(ivec2) ConstantComposite 209 22 + 392: TypePointer Function 360(bvec3) + 454(Block): TypeStruct 136(ivec3) 14(int) + 455: TypePointer Uniform 454(Block) + 456(block): 455(ptr) Variable Uniform + 457(si64): 18(int) SpecConstant 4294967286 4294967295 + 458(su64): 14(int) SpecConstant 20 0 + 459(si): 31(int) SpecConstant 4294967291 + 460(su): 21(int) SpecConstant 4 + 461(sb): 55(bool) SpecConstantTrue + 462: 55(bool) SpecConstantOp 171 457(si64) 69 + 463: 55(bool) SpecConstantOp 171 458(su64) 69 + 464: 18(int) SpecConstantOp 169 461(sb) 61 60 + 465: 14(int) SpecConstantOp 169 461(sb) 70 69 + 466: 31(int) SpecConstantOp 114 457(si64) + 467: 18(int) SpecConstantOp 114 459(si) + 468: 21(int) SpecConstantOp 113 458(su64) + 469: 14(int) SpecConstantOp 113 460(su) + 470: 18(int) SpecConstantOp 128 458(su64) 69 + 471: 14(int) SpecConstantOp 128 457(si64) 69 + 472: 21(int) SpecConstantOp 113 458(su64) + 473: 31(int) SpecConstantOp 128 472 219 + 474: 18(int) SpecConstantOp 114 459(si) + 475: 14(int) SpecConstantOp 128 474 69 + 476: 31(int) SpecConstantOp 114 457(si64) + 477: 21(int) SpecConstantOp 128 476 219 + 478: 14(int) SpecConstantOp 113 460(su) + 479: 18(int) SpecConstantOp 128 478 69 + 4(main): 2 Function None 3 + 5: Label + Store 16(u64Max) 17 + Return + FunctionEnd + 6(literal(): 2 Function None 3 + 7: Label + 20(i64): 19(ptr) Variable Function + 37(indexable): 36(ptr) Variable Function + 41(u64): 40(ptr) Variable Function + 49(indexable): 48(ptr) Variable Function + 34: 33(ptr) AccessChain 30 32 + 35: 21(int) Load 34 + Store 37(indexable) 27 + 38: 19(ptr) AccessChain 37(indexable) 35 + 39: 18(int) Load 38 + Store 20(i64) 39 + 46: 33(ptr) AccessChain 30 32 + 47: 21(int) Load 46 + Store 49(indexable) 45 + 50: 40(ptr) AccessChain 49(indexable) 47 + 51: 14(int) Load 50 + Store 41(u64) 51 + Return + FunctionEnd + 8(typeCast(): 2 Function None 3 + 9: Label + 54(i64v): 53(ptr) Variable Function + 58(bv): 57(ptr) Variable Function + 67(u64v): 66(ptr) Variable Function + 76(iv): 75(ptr) Variable Function + 83(uv): 82(ptr) Variable Function + 91(fv): 90(ptr) Variable Function + 97(dv): 96(ptr) Variable Function + 59: 56(bvec2) Load 58(bv) + 64: 52(ivec2) Select 59 63 62 + Store 54(i64v) 64 + 68: 56(bvec2) Load 58(bv) + 73: 65(ivec2) Select 68 72 71 + Store 67(u64v) 73 + 77: 74(ivec2) Load 76(iv) + 78: 52(ivec2) SConvert 77 + Store 54(i64v) 78 + 79: 52(ivec2) Load 54(i64v) + 80: 74(ivec2) SConvert 79 + Store 76(iv) 80 + 84: 81(ivec2) Load 83(uv) + 85: 65(ivec2) UConvert 84 + Store 67(u64v) 85 + 86: 65(ivec2) Load 67(u64v) + 87: 81(ivec2) UConvert 86 + Store 83(uv) 87 + 92: 52(ivec2) Load 54(i64v) + 93: 89(fvec2) ConvertSToF 92 + Store 91(fv) 93 + 98: 52(ivec2) Load 54(i64v) + 99: 95(fvec2) ConvertSToF 98 + Store 97(dv) 99 + 100: 65(ivec2) Load 67(u64v) + 101: 89(fvec2) ConvertUToF 100 + Store 91(fv) 101 + 102: 65(ivec2) Load 67(u64v) + 103: 95(fvec2) ConvertUToF 102 + Store 97(dv) 103 + 104: 89(fvec2) Load 91(fv) + 105: 52(ivec2) ConvertFToS 104 + Store 54(i64v) 105 + 106: 95(fvec2) Load 97(dv) + 107: 52(ivec2) ConvertFToS 106 + Store 54(i64v) 107 + 108: 89(fvec2) Load 91(fv) + 109: 65(ivec2) ConvertFToU 108 + Store 67(u64v) 109 + 110: 95(fvec2) Load 97(dv) + 111: 65(ivec2) ConvertFToU 110 + Store 67(u64v) 111 + 112: 52(ivec2) Load 54(i64v) + 113: 56(bvec2) INotEqual 112 71 + Store 58(bv) 113 + 114: 65(ivec2) Load 67(u64v) + 115: 56(bvec2) INotEqual 114 71 + Store 58(bv) 115 + 116: 52(ivec2) Load 54(i64v) + 117: 65(ivec2) Bitcast 116 + Store 67(u64v) 117 + 118: 65(ivec2) Load 67(u64v) + 119: 52(ivec2) Bitcast 118 + Store 54(i64v) 119 + 120: 52(ivec2) Load 54(i64v) + 121: 74(ivec2) SConvert 120 + 122: 81(ivec2) Bitcast 121 + Store 83(uv) 122 + 123: 81(ivec2) Load 83(uv) + 124: 65(ivec2) UConvert 123 + 125: 52(ivec2) Bitcast 124 + Store 54(i64v) 125 + 126: 65(ivec2) Load 67(u64v) + 127: 81(ivec2) UConvert 126 + 128: 74(ivec2) Bitcast 127 + Store 76(iv) 128 + 129: 74(ivec2) Load 76(iv) + 130: 52(ivec2) SConvert 129 + 131: 65(ivec2) Bitcast 130 + Store 67(u64v) 131 + Return + FunctionEnd + 10(operators(): 2 Function None 3 + 11: Label + 134(u64v): 133(ptr) Variable Function + 139(i64): 19(ptr) Variable Function + 159(i): 158(ptr) Variable Function + 166(uv): 165(ptr) Variable Function + 218(b): 217(ptr) Variable Function + 135: 132(ivec3) Load 134(u64v) + 137: 136(ivec3) CompositeConstruct 61 61 61 + 138: 132(ivec3) IAdd 135 137 + Store 134(u64v) 138 + 140: 18(int) Load 139(i64) + 141: 18(int) ISub 140 61 + Store 139(i64) 141 + 142: 18(int) Load 139(i64) + 143: 18(int) IAdd 142 61 + Store 139(i64) 143 + 144: 132(ivec3) Load 134(u64v) + 145: 136(ivec3) CompositeConstruct 61 61 61 + 146: 132(ivec3) ISub 144 145 + Store 134(u64v) 146 + 147: 132(ivec3) Load 134(u64v) + 148: 132(ivec3) Not 147 + Store 134(u64v) 148 + 149: 18(int) Load 139(i64) + Store 139(i64) 149 + 150: 132(ivec3) Load 134(u64v) + 151: 132(ivec3) SNegate 150 + Store 134(u64v) 151 + 152: 18(int) Load 139(i64) + 153: 18(int) Load 139(i64) + 154: 18(int) IAdd 153 152 + Store 139(i64) 154 + 155: 132(ivec3) Load 134(u64v) + 156: 132(ivec3) Load 134(u64v) + 157: 132(ivec3) ISub 156 155 + Store 134(u64v) 157 + 160: 31(int) Load 159(i) + 161: 18(int) SConvert 160 + 162: 18(int) Load 139(i64) + 163: 18(int) IMul 162 161 + Store 139(i64) 163 + 167: 164(ivec3) Load 166(uv) + 168: 132(ivec3) UConvert 167 + 169: 132(ivec3) Load 134(u64v) + 170: 132(ivec3) UDiv 169 168 + Store 134(u64v) 170 + 171: 31(int) Load 159(i) + 172: 18(int) SConvert 171 + 173: 14(int) Bitcast 172 + 174: 132(ivec3) Load 134(u64v) + 175: 132(ivec3) CompositeConstruct 173 173 173 + 176: 132(ivec3) UMod 174 175 + Store 134(u64v) 176 + 177: 132(ivec3) Load 134(u64v) + 178: 164(ivec3) Load 166(uv) + 179: 132(ivec3) UConvert 178 + 180: 132(ivec3) IAdd 177 179 + Store 134(u64v) 180 + 181: 18(int) Load 139(i64) + 182: 31(int) Load 159(i) + 183: 18(int) SConvert 182 + 184: 18(int) ISub 181 183 + Store 139(i64) 184 + 185: 132(ivec3) Load 134(u64v) + 186: 164(ivec3) Load 166(uv) + 187: 132(ivec3) UConvert 186 + 188: 132(ivec3) IMul 185 187 + Store 134(u64v) 188 + 189: 18(int) Load 139(i64) + 190: 31(int) Load 159(i) + 191: 18(int) SConvert 190 + 192: 18(int) IMul 189 191 + Store 139(i64) 192 + 193: 18(int) Load 139(i64) + 194: 31(int) Load 159(i) + 195: 18(int) SConvert 194 + 196: 18(int) SMod 193 195 + Store 139(i64) 196 + 197: 31(int) Load 159(i) + 198: 132(ivec3) Load 134(u64v) + 200: 199(ivec3) CompositeConstruct 197 197 197 + 201: 132(ivec3) ShiftLeftLogical 198 200 + Store 134(u64v) 201 + 204: 203(ptr) AccessChain 166(uv) 202 + 205: 21(int) Load 204 + 206: 18(int) Load 139(i64) + 207: 18(int) ShiftRightArithmetic 206 205 + Store 139(i64) 207 + 208: 18(int) Load 139(i64) + 210: 40(ptr) AccessChain 134(u64v) 209 + 211: 14(int) Load 210 + 212: 18(int) ShiftLeftLogical 208 211 + Store 139(i64) 212 + 213: 132(ivec3) Load 134(u64v) + 214: 18(int) Load 139(i64) + 215: 136(ivec3) CompositeConstruct 214 214 214 + 216: 132(ivec3) ShiftLeftLogical 213 215 + Store 134(u64v) 216 + 220: 40(ptr) AccessChain 134(u64v) 219 + 221: 14(int) Load 220 + 222: 18(int) Load 139(i64) + 223: 14(int) Bitcast 222 + 224: 55(bool) INotEqual 221 223 + Store 218(b) 224 + 225: 18(int) Load 139(i64) + 226: 14(int) Bitcast 225 + 227: 40(ptr) AccessChain 134(u64v) 219 + 228: 14(int) Load 227 + 229: 55(bool) IEqual 226 228 + Store 218(b) 229 + 230: 40(ptr) AccessChain 134(u64v) 219 + 231: 14(int) Load 230 + 232: 203(ptr) AccessChain 166(uv) 202 + 233: 21(int) Load 232 + 234: 14(int) UConvert 233 + 235: 55(bool) UGreaterThan 231 234 + Store 218(b) 235 + 236: 18(int) Load 139(i64) + 237: 31(int) Load 159(i) + 238: 18(int) SConvert 237 + 239: 55(bool) SLessThan 236 238 + Store 218(b) 239 + 240: 40(ptr) AccessChain 134(u64v) 202 + 241: 14(int) Load 240 + 242: 203(ptr) AccessChain 166(uv) 219 + 243: 21(int) Load 242 + 244: 14(int) UConvert 243 + 245: 55(bool) UGreaterThanEqual 241 244 + Store 218(b) 245 + 246: 18(int) Load 139(i64) + 247: 31(int) Load 159(i) + 248: 18(int) SConvert 247 + 249: 55(bool) SLessThanEqual 246 248 + Store 218(b) 249 + 250: 31(int) Load 159(i) + 251: 18(int) SConvert 250 + 252: 14(int) Bitcast 251 + 253: 132(ivec3) Load 134(u64v) + 254: 132(ivec3) CompositeConstruct 252 252 252 + 255: 132(ivec3) BitwiseOr 253 254 + Store 134(u64v) 255 + 256: 18(int) Load 139(i64) + 257: 31(int) Load 159(i) + 258: 18(int) SConvert 257 + 259: 18(int) BitwiseOr 256 258 + Store 139(i64) 259 + 260: 31(int) Load 159(i) + 261: 18(int) SConvert 260 + 262: 18(int) Load 139(i64) + 263: 18(int) BitwiseAnd 262 261 + Store 139(i64) 263 + 264: 132(ivec3) Load 134(u64v) + 265: 164(ivec3) Load 166(uv) + 266: 132(ivec3) UConvert 265 + 267: 132(ivec3) BitwiseAnd 264 266 + Store 134(u64v) 267 + 268: 18(int) Load 139(i64) + 269: 14(int) Bitcast 268 + 270: 132(ivec3) Load 134(u64v) + 271: 132(ivec3) CompositeConstruct 269 269 269 + 272: 132(ivec3) BitwiseXor 270 271 + Store 134(u64v) 272 + 273: 132(ivec3) Load 134(u64v) + 274: 18(int) Load 139(i64) + 275: 14(int) Bitcast 274 + 276: 132(ivec3) CompositeConstruct 275 275 275 + 277: 132(ivec3) BitwiseXor 273 276 + Store 134(u64v) 277 + Return + FunctionEnd +12(builtinFuncs(): 2 Function None 3 + 13: Label + 278(i64v): 53(ptr) Variable Function + 281(i64): 19(ptr) Variable Function + 291(u64v): 133(ptr) Variable Function + 293(u64): 40(ptr) Variable Function + 365(dv): 364(ptr) Variable Function + 384(iv): 75(ptr) Variable Function + 389(uv): 82(ptr) Variable Function + 393(bv): 392(ptr) Variable Function + 279: 52(ivec2) Load 278(i64v) + 280: 52(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 279 + Store 278(i64v) 280 + 282: 18(int) Load 281(i64) + 283: 18(int) ExtInst 1(GLSL.std.450) 7(SSign) 282 + Store 281(i64) 283 + 284: 52(ivec2) Load 278(i64v) + 285: 18(int) Load 281(i64) + 286: 52(ivec2) CompositeConstruct 285 285 + 287: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 284 286 + Store 278(i64v) 287 + 288: 52(ivec2) Load 278(i64v) + 290: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 288 289 + Store 278(i64v) 290 + 292: 132(ivec3) Load 291(u64v) + 294: 14(int) Load 293(u64) + 295: 132(ivec3) CompositeConstruct 294 294 294 + 296: 132(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 292 295 + Store 291(u64v) 296 + 297: 132(ivec3) Load 291(u64v) + 299: 132(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 297 298 + Store 291(u64v) 299 + 300: 52(ivec2) Load 278(i64v) + 301: 18(int) Load 281(i64) + 302: 52(ivec2) CompositeConstruct 301 301 + 303: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 300 302 + Store 278(i64v) 303 + 304: 52(ivec2) Load 278(i64v) + 305: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 304 289 + Store 278(i64v) 305 + 306: 132(ivec3) Load 291(u64v) + 307: 14(int) Load 293(u64) + 308: 132(ivec3) CompositeConstruct 307 307 307 + 309: 132(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 306 308 + Store 291(u64v) 309 + 310: 132(ivec3) Load 291(u64v) + 311: 132(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 310 298 + Store 291(u64v) 311 + 312: 52(ivec2) Load 278(i64v) + 313: 18(int) Load 281(i64) + 314: 18(int) SNegate 313 + 315: 18(int) Load 281(i64) + 316: 52(ivec2) CompositeConstruct 314 314 + 317: 52(ivec2) CompositeConstruct 315 315 + 318: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 312 316 317 + Store 278(i64v) 318 + 319: 52(ivec2) Load 278(i64v) + 320: 52(ivec2) Load 278(i64v) + 321: 52(ivec2) SNegate 320 + 322: 52(ivec2) Load 278(i64v) + 323: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 319 321 322 + Store 278(i64v) 323 + 324: 132(ivec3) Load 291(u64v) + 325: 14(int) Load 293(u64) + 326: 14(int) SNegate 325 + 327: 14(int) Load 293(u64) + 328: 132(ivec3) CompositeConstruct 326 326 326 + 329: 132(ivec3) CompositeConstruct 327 327 327 + 330: 132(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 324 328 329 + Store 291(u64v) 330 + 331: 132(ivec3) Load 291(u64v) + 332: 132(ivec3) Load 291(u64v) + 333: 132(ivec3) SNegate 332 + 334: 132(ivec3) Load 291(u64v) + 335: 132(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 331 333 334 + Store 291(u64v) 335 + 336: 19(ptr) AccessChain 278(i64v) 219 + 337: 18(int) Load 336 + 338: 19(ptr) AccessChain 278(i64v) 202 + 339: 18(int) Load 338 + 341: 18(int) Select 340 339 337 + Store 281(i64) 341 + 342: 18(int) Load 281(i64) + 343: 52(ivec2) CompositeConstruct 342 342 + 344: 18(int) Load 281(i64) + 345: 18(int) SNegate 344 + 346: 52(ivec2) CompositeConstruct 345 345 + 349: 52(ivec2) Select 348 346 343 + Store 278(i64v) 349 + 350: 40(ptr) AccessChain 291(u64v) 219 + 351: 14(int) Load 350 + 352: 40(ptr) AccessChain 291(u64v) 202 + 353: 14(int) Load 352 + 354: 14(int) Select 340 353 351 + Store 293(u64) 354 + 355: 14(int) Load 293(u64) + 356: 132(ivec3) CompositeConstruct 355 355 355 + 357: 14(int) Load 293(u64) + 358: 14(int) SNegate 357 + 359: 132(ivec3) CompositeConstruct 358 358 358 + 362: 132(ivec3) Select 361 359 356 + Store 291(u64v) 362 + 366: 363(fvec3) Load 365(dv) + 367: 95(fvec2) VectorShuffle 366 366 0 1 + 368: 52(ivec2) Bitcast 367 + Store 278(i64v) 368 + 370: 369(ptr) AccessChain 365(dv) 209 + 371: 94(float) Load 370 + 372: 14(int) Bitcast 371 + 373: 40(ptr) AccessChain 291(u64v) 219 + Store 373 372 + 374: 52(ivec2) Load 278(i64v) + 375: 95(fvec2) Bitcast 374 + 376: 363(fvec3) Load 365(dv) + 377: 363(fvec3) VectorShuffle 376 375 3 4 2 + Store 365(dv) 377 + 378: 132(ivec3) Load 291(u64v) + 379: 363(fvec3) Bitcast 378 + Store 365(dv) 379 + 383: 18(int) Bitcast 382 + Store 281(i64) 383 + 385: 18(int) Load 281(i64) + 386: 74(ivec2) Bitcast 385 + Store 384(iv) 386 + 388: 14(int) Bitcast 387 + Store 293(u64) 388 + 390: 14(int) Load 293(u64) + 391: 81(ivec2) Bitcast 390 + Store 389(uv) 391 + 394: 132(ivec3) Load 291(u64v) + 395: 14(int) Load 293(u64) + 396: 132(ivec3) CompositeConstruct 395 395 395 + 397: 360(bvec3) ULessThan 394 396 + Store 393(bv) 397 + 398: 52(ivec2) Load 278(i64v) + 399: 18(int) Load 281(i64) + 400: 52(ivec2) CompositeConstruct 399 399 + 401: 56(bvec2) SLessThan 398 400 + 402: 360(bvec3) Load 393(bv) + 403: 360(bvec3) VectorShuffle 402 401 3 4 2 + Store 393(bv) 403 + 404: 132(ivec3) Load 291(u64v) + 405: 14(int) Load 293(u64) + 406: 132(ivec3) CompositeConstruct 405 405 405 + 407: 360(bvec3) ULessThanEqual 404 406 + Store 393(bv) 407 + 408: 52(ivec2) Load 278(i64v) + 409: 18(int) Load 281(i64) + 410: 52(ivec2) CompositeConstruct 409 409 + 411: 56(bvec2) SLessThanEqual 408 410 + 412: 360(bvec3) Load 393(bv) + 413: 360(bvec3) VectorShuffle 412 411 3 4 2 + Store 393(bv) 413 + 414: 132(ivec3) Load 291(u64v) + 415: 14(int) Load 293(u64) + 416: 132(ivec3) CompositeConstruct 415 415 415 + 417: 360(bvec3) UGreaterThan 414 416 + Store 393(bv) 417 + 418: 52(ivec2) Load 278(i64v) + 419: 18(int) Load 281(i64) + 420: 52(ivec2) CompositeConstruct 419 419 + 421: 56(bvec2) SGreaterThan 418 420 + 422: 360(bvec3) Load 393(bv) + 423: 360(bvec3) VectorShuffle 422 421 3 4 2 + Store 393(bv) 423 + 424: 132(ivec3) Load 291(u64v) + 425: 14(int) Load 293(u64) + 426: 132(ivec3) CompositeConstruct 425 425 425 + 427: 360(bvec3) UGreaterThanEqual 424 426 + Store 393(bv) 427 + 428: 52(ivec2) Load 278(i64v) + 429: 18(int) Load 281(i64) + 430: 52(ivec2) CompositeConstruct 429 429 + 431: 56(bvec2) SGreaterThanEqual 428 430 + 432: 360(bvec3) Load 393(bv) + 433: 360(bvec3) VectorShuffle 432 431 3 4 2 + Store 393(bv) 433 + 434: 132(ivec3) Load 291(u64v) + 435: 14(int) Load 293(u64) + 436: 132(ivec3) CompositeConstruct 435 435 435 + 437: 360(bvec3) IEqual 434 436 + Store 393(bv) 437 + 438: 52(ivec2) Load 278(i64v) + 439: 18(int) Load 281(i64) + 440: 52(ivec2) CompositeConstruct 439 439 + 441: 56(bvec2) IEqual 438 440 + 442: 360(bvec3) Load 393(bv) + 443: 360(bvec3) VectorShuffle 442 441 3 4 2 + Store 393(bv) 443 + 444: 132(ivec3) Load 291(u64v) + 445: 14(int) Load 293(u64) + 446: 132(ivec3) CompositeConstruct 445 445 445 + 447: 360(bvec3) INotEqual 444 446 + Store 393(bv) 447 + 448: 52(ivec2) Load 278(i64v) + 449: 18(int) Load 281(i64) + 450: 52(ivec2) CompositeConstruct 449 449 + 451: 56(bvec2) INotEqual 448 450 + 452: 360(bvec3) Load 393(bv) + 453: 360(bvec3) VectorShuffle 452 451 3 4 2 + Store 393(bv) 453 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.intOps.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.intOps.vert.out new file mode 100644 index 0000000..93d2dfd --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.intOps.vert.out @@ -0,0 +1,349 @@ +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 +// Id's are bound by 268 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 9 15 21 26 47 67 83 100 121 142 146 156 173 182 247 + Source ESSL 310 + Name 4 "main" + Name 9 "iout" + Name 15 "uout" + Name 21 "fout" + Name 26 "u2" + Name 30 "u2out" + Name 31 "ResType" + Name 47 "u1" + Name 51 "u1out" + Name 52 "ResType" + Name 67 "u4" + Name 71 "u4outHi" + Name 72 "u4outLow" + Name 73 "ResType" + Name 83 "i4" + Name 87 "i4outHi" + Name 88 "i4outLow" + Name 89 "ResType" + Name 100 "v3" + Name 104 "i3out" + Name 105 "ResType" + Name 121 "v1" + Name 124 "i1out" + Name 125 "ResType" + Name 142 "v2" + Name 146 "i2" + Name 156 "i1" + Name 173 "u3" + Name 182 "i3" + Name 247 "v4" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypeVector 6(int) 4 + 8: TypePointer Output 7(ivec4) + 9(iout): 8(ptr) Variable Output + 10: 6(int) Constant 0 + 11: 7(ivec4) ConstantComposite 10 10 10 10 + 12: TypeInt 32 0 + 13: TypeVector 12(int) 4 + 14: TypePointer Output 13(ivec4) + 15(uout): 14(ptr) Variable Output + 16: 12(int) Constant 0 + 17: 13(ivec4) ConstantComposite 16 16 16 16 + 18: TypeFloat 32 + 19: TypeVector 18(float) 4 + 20: TypePointer Output 19(fvec4) + 21(fout): 20(ptr) Variable Output + 22: 18(float) Constant 0 + 23: 19(fvec4) ConstantComposite 22 22 22 22 + 24: TypeVector 12(int) 2 + 25: TypePointer Input 24(ivec2) + 26(u2): 25(ptr) Variable Input + 29: TypePointer Function 24(ivec2) + 31(ResType): TypeStruct 24(ivec2) 24(ivec2) + 46: TypePointer Input 12(int) + 47(u1): 46(ptr) Variable Input + 50: TypePointer Function 12(int) + 52(ResType): TypeStruct 12(int) 12(int) + 56: TypePointer Output 12(int) + 66: TypePointer Input 13(ivec4) + 67(u4): 66(ptr) Variable Input + 70: TypePointer Function 13(ivec4) + 73(ResType): TypeStruct 13(ivec4) 13(ivec4) + 82: TypePointer Input 7(ivec4) + 83(i4): 82(ptr) Variable Input + 86: TypePointer Function 7(ivec4) + 89(ResType): TypeStruct 7(ivec4) 7(ivec4) + 98: TypeVector 18(float) 3 + 99: TypePointer Input 98(fvec3) + 100(v3): 99(ptr) Variable Input + 102: TypeVector 6(int) 3 + 103: TypePointer Function 102(ivec3) + 105(ResType): TypeStruct 98(fvec3) 102(ivec3) + 120: TypePointer Input 18(float) + 121(v1): 120(ptr) Variable Input + 123: TypePointer Function 6(int) + 125(ResType): TypeStruct 18(float) 6(int) + 129: TypePointer Output 18(float) + 135: TypePointer Output 6(int) + 140: TypeVector 18(float) 2 + 141: TypePointer Input 140(fvec2) + 142(v2): 141(ptr) Variable Input + 144: TypeVector 6(int) 2 + 145: TypePointer Input 144(ivec2) + 146(i2): 145(ptr) Variable Input + 155: TypePointer Input 6(int) + 156(i1): 155(ptr) Variable Input + 164: 6(int) Constant 4 + 165: 6(int) Constant 5 + 171: TypeVector 12(int) 3 + 172: TypePointer Input 171(ivec3) + 173(u3): 172(ptr) Variable Input + 181: TypePointer Input 102(ivec3) + 182(i3): 181(ptr) Variable Input + 246: TypePointer Input 19(fvec4) + 247(v4): 246(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 30(u2out): 29(ptr) Variable Function + 51(u1out): 50(ptr) Variable Function + 71(u4outHi): 70(ptr) Variable Function + 72(u4outLow): 70(ptr) Variable Function + 87(i4outHi): 86(ptr) Variable Function + 88(i4outLow): 86(ptr) Variable Function + 104(i3out): 103(ptr) Variable Function + 124(i1out): 123(ptr) Variable Function + Store 9(iout) 11 + Store 15(uout) 17 + Store 21(fout) 23 + 27: 24(ivec2) Load 26(u2) + 28: 24(ivec2) Load 26(u2) + 32: 31(ResType) IAddCarry 27 28 + 33: 24(ivec2) CompositeExtract 32 1 + Store 30(u2out) 33 + 34: 24(ivec2) CompositeExtract 32 0 + 35: 13(ivec4) Load 15(uout) + 36: 24(ivec2) VectorShuffle 35 35 0 1 + 37: 24(ivec2) IAdd 36 34 + 38: 13(ivec4) Load 15(uout) + 39: 13(ivec4) VectorShuffle 38 37 4 5 2 3 + Store 15(uout) 39 + 40: 24(ivec2) Load 30(u2out) + 41: 13(ivec4) Load 15(uout) + 42: 24(ivec2) VectorShuffle 41 41 0 1 + 43: 24(ivec2) IAdd 42 40 + 44: 13(ivec4) Load 15(uout) + 45: 13(ivec4) VectorShuffle 44 43 4 5 2 3 + Store 15(uout) 45 + 48: 12(int) Load 47(u1) + 49: 12(int) Load 47(u1) + 53: 52(ResType) ISubBorrow 48 49 + 54: 12(int) CompositeExtract 53 1 + Store 51(u1out) 54 + 55: 12(int) CompositeExtract 53 0 + 57: 56(ptr) AccessChain 15(uout) 16 + 58: 12(int) Load 57 + 59: 12(int) IAdd 58 55 + 60: 56(ptr) AccessChain 15(uout) 16 + Store 60 59 + 61: 12(int) Load 51(u1out) + 62: 56(ptr) AccessChain 15(uout) 16 + 63: 12(int) Load 62 + 64: 12(int) IAdd 63 61 + 65: 56(ptr) AccessChain 15(uout) 16 + Store 65 64 + 68: 13(ivec4) Load 67(u4) + 69: 13(ivec4) Load 67(u4) + 74: 73(ResType) UMulExtended 68 69 + 75: 13(ivec4) CompositeExtract 74 0 + Store 72(u4outLow) 75 + 76: 13(ivec4) CompositeExtract 74 1 + Store 71(u4outHi) 76 + 77: 13(ivec4) Load 71(u4outHi) + 78: 13(ivec4) Load 72(u4outLow) + 79: 13(ivec4) IAdd 77 78 + 80: 13(ivec4) Load 15(uout) + 81: 13(ivec4) IAdd 80 79 + Store 15(uout) 81 + 84: 7(ivec4) Load 83(i4) + 85: 7(ivec4) Load 83(i4) + 90: 89(ResType) SMulExtended 84 85 + 91: 7(ivec4) CompositeExtract 90 0 + Store 88(i4outLow) 91 + 92: 7(ivec4) CompositeExtract 90 1 + Store 87(i4outHi) 92 + 93: 7(ivec4) Load 88(i4outLow) + 94: 7(ivec4) Load 87(i4outHi) + 95: 7(ivec4) IAdd 93 94 + 96: 7(ivec4) Load 9(iout) + 97: 7(ivec4) IAdd 96 95 + Store 9(iout) 97 + 101: 98(fvec3) Load 100(v3) + 106:105(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 101 + 107: 102(ivec3) CompositeExtract 106 1 + Store 104(i3out) 107 + 108: 98(fvec3) CompositeExtract 106 0 + 109: 19(fvec4) Load 21(fout) + 110: 98(fvec3) VectorShuffle 109 109 0 1 2 + 111: 98(fvec3) FAdd 110 108 + 112: 19(fvec4) Load 21(fout) + 113: 19(fvec4) VectorShuffle 112 111 4 5 6 3 + Store 21(fout) 113 + 114: 102(ivec3) Load 104(i3out) + 115: 7(ivec4) Load 9(iout) + 116: 102(ivec3) VectorShuffle 115 115 0 1 2 + 117: 102(ivec3) IAdd 116 114 + 118: 7(ivec4) Load 9(iout) + 119: 7(ivec4) VectorShuffle 118 117 4 5 6 3 + Store 9(iout) 119 + 122: 18(float) Load 121(v1) + 126:125(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 122 + 127: 6(int) CompositeExtract 126 1 + Store 124(i1out) 127 + 128: 18(float) CompositeExtract 126 0 + 130: 129(ptr) AccessChain 21(fout) 16 + 131: 18(float) Load 130 + 132: 18(float) FAdd 131 128 + 133: 129(ptr) AccessChain 21(fout) 16 + Store 133 132 + 134: 6(int) Load 124(i1out) + 136: 135(ptr) AccessChain 9(iout) 16 + 137: 6(int) Load 136 + 138: 6(int) IAdd 137 134 + 139: 135(ptr) AccessChain 9(iout) 16 + Store 139 138 + 143: 140(fvec2) Load 142(v2) + 147: 144(ivec2) Load 146(i2) + 148: 140(fvec2) ExtInst 1(GLSL.std.450) 53(Ldexp) 143 147 + 149: 19(fvec4) Load 21(fout) + 150: 140(fvec2) VectorShuffle 149 149 0 1 + 151: 140(fvec2) FAdd 150 148 + 152: 19(fvec4) Load 21(fout) + 153: 19(fvec4) VectorShuffle 152 151 4 5 2 3 + Store 21(fout) 153 + 154: 18(float) Load 121(v1) + 157: 6(int) Load 156(i1) + 158: 18(float) ExtInst 1(GLSL.std.450) 53(Ldexp) 154 157 + 159: 129(ptr) AccessChain 21(fout) 16 + 160: 18(float) Load 159 + 161: 18(float) FAdd 160 158 + 162: 129(ptr) AccessChain 21(fout) 16 + Store 162 161 + 163: 6(int) Load 156(i1) + 166: 6(int) BitFieldSExtract 163 164 165 + 167: 135(ptr) AccessChain 9(iout) 16 + 168: 6(int) Load 167 + 169: 6(int) IAdd 168 166 + 170: 135(ptr) AccessChain 9(iout) 16 + Store 170 169 + 174: 171(ivec3) Load 173(u3) + 175: 171(ivec3) BitFieldUExtract 174 164 165 + 176: 13(ivec4) Load 15(uout) + 177: 171(ivec3) VectorShuffle 176 176 0 1 2 + 178: 171(ivec3) IAdd 177 175 + 179: 13(ivec4) Load 15(uout) + 180: 13(ivec4) VectorShuffle 179 178 4 5 6 3 + Store 15(uout) 180 + 183: 102(ivec3) Load 182(i3) + 184: 102(ivec3) Load 182(i3) + 185: 102(ivec3) BitFieldInsert 183 184 164 165 + 186: 7(ivec4) Load 9(iout) + 187: 102(ivec3) VectorShuffle 186 186 0 1 2 + 188: 102(ivec3) IAdd 187 185 + 189: 7(ivec4) Load 9(iout) + 190: 7(ivec4) VectorShuffle 189 188 4 5 6 3 + Store 9(iout) 190 + 191: 12(int) Load 47(u1) + 192: 12(int) Load 47(u1) + 193: 12(int) BitFieldInsert 191 192 164 165 + 194: 56(ptr) AccessChain 15(uout) 16 + 195: 12(int) Load 194 + 196: 12(int) IAdd 195 193 + 197: 56(ptr) AccessChain 15(uout) 16 + Store 197 196 + 198: 144(ivec2) Load 146(i2) + 199: 144(ivec2) BitReverse 198 + 200: 7(ivec4) Load 9(iout) + 201: 144(ivec2) VectorShuffle 200 200 0 1 + 202: 144(ivec2) IAdd 201 199 + 203: 7(ivec4) Load 9(iout) + 204: 7(ivec4) VectorShuffle 203 202 4 5 2 3 + Store 9(iout) 204 + 205: 13(ivec4) Load 67(u4) + 206: 13(ivec4) BitReverse 205 + 207: 13(ivec4) Load 15(uout) + 208: 13(ivec4) IAdd 207 206 + Store 15(uout) 208 + 209: 6(int) Load 156(i1) + 210: 6(int) BitCount 209 + 211: 135(ptr) AccessChain 9(iout) 16 + 212: 6(int) Load 211 + 213: 6(int) IAdd 212 210 + 214: 135(ptr) AccessChain 9(iout) 16 + Store 214 213 + 215: 171(ivec3) Load 173(u3) + 216: 102(ivec3) BitCount 215 + 217: 7(ivec4) Load 9(iout) + 218: 102(ivec3) VectorShuffle 217 217 0 1 2 + 219: 102(ivec3) IAdd 218 216 + 220: 7(ivec4) Load 9(iout) + 221: 7(ivec4) VectorShuffle 220 219 4 5 6 3 + Store 9(iout) 221 + 222: 144(ivec2) Load 146(i2) + 223: 144(ivec2) ExtInst 1(GLSL.std.450) 73(FindILsb) 222 + 224: 7(ivec4) Load 9(iout) + 225: 144(ivec2) VectorShuffle 224 224 0 1 + 226: 144(ivec2) IAdd 225 223 + 227: 7(ivec4) Load 9(iout) + 228: 7(ivec4) VectorShuffle 227 226 4 5 2 3 + Store 9(iout) 228 + 229: 13(ivec4) Load 67(u4) + 230: 7(ivec4) ExtInst 1(GLSL.std.450) 73(FindILsb) 229 + 231: 7(ivec4) Load 9(iout) + 232: 7(ivec4) IAdd 231 230 + Store 9(iout) 232 + 233: 6(int) Load 156(i1) + 234: 6(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 233 + 235: 135(ptr) AccessChain 9(iout) 16 + 236: 6(int) Load 235 + 237: 6(int) IAdd 236 234 + 238: 135(ptr) AccessChain 9(iout) 16 + Store 238 237 + 239: 24(ivec2) Load 26(u2) + 240: 144(ivec2) ExtInst 1(GLSL.std.450) 75(FindUMsb) 239 + 241: 7(ivec4) Load 9(iout) + 242: 144(ivec2) VectorShuffle 241 241 0 1 + 243: 144(ivec2) IAdd 242 240 + 244: 7(ivec4) Load 9(iout) + 245: 7(ivec4) VectorShuffle 244 243 4 5 2 3 + Store 9(iout) 245 + 248: 19(fvec4) Load 247(v4) + 249: 12(int) ExtInst 1(GLSL.std.450) 55(PackUnorm4x8) 248 + 250: 56(ptr) AccessChain 15(uout) 16 + 251: 12(int) Load 250 + 252: 12(int) IAdd 251 249 + 253: 56(ptr) AccessChain 15(uout) 16 + Store 253 252 + 254: 19(fvec4) Load 247(v4) + 255: 12(int) ExtInst 1(GLSL.std.450) 54(PackSnorm4x8) 254 + 256: 56(ptr) AccessChain 15(uout) 16 + 257: 12(int) Load 256 + 258: 12(int) IAdd 257 255 + 259: 56(ptr) AccessChain 15(uout) 16 + Store 259 258 + 260: 12(int) Load 47(u1) + 261: 19(fvec4) ExtInst 1(GLSL.std.450) 64(UnpackUnorm4x8) 260 + 262: 19(fvec4) Load 21(fout) + 263: 19(fvec4) FAdd 262 261 + Store 21(fout) 263 + 264: 12(int) Load 47(u1) + 265: 19(fvec4) ExtInst 1(GLSL.std.450) 63(UnpackSnorm4x8) 264 + 266: 19(fvec4) Load 21(fout) + 267: 19(fvec4) FAdd 266 265 + Store 21(fout) 267 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.interpOps.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.interpOps.frag.out new file mode 100644 index 0000000..88d8e53 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.interpOps.frag.out @@ -0,0 +1,139 @@ +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 +// Id's are bound by 100 + + Capability Shader + Capability InterpolationFunction + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 13 24 33 41 47 72 98 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + Name 4 "main" + Name 9 "f4" + Name 13 "if1" + Name 24 "if2" + Name 33 "if3" + Name 41 "if4" + Name 47 "samp" + Name 72 "offset" + Name 98 "fragColor" + Decorate 47(samp) Flat + Decorate 72(offset) Flat + 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: TypePointer Input 6(float) + 13(if1): 12(ptr) Variable Input + 15: TypeInt 32 0 + 16: 15(int) Constant 0 + 17: TypePointer Function 6(float) + 22: TypeVector 6(float) 2 + 23: TypePointer Input 22(fvec2) + 24(if2): 23(ptr) Variable Input + 31: TypeVector 6(float) 3 + 32: TypePointer Input 31(fvec3) + 33(if3): 32(ptr) Variable Input + 40: TypePointer Input 7(fvec4) + 41(if4): 40(ptr) Variable Input + 45: TypeInt 32 1 + 46: TypePointer Input 45(int) + 47(samp): 46(ptr) Variable Input + 72(offset): 23(ptr) Variable Input + 97: TypePointer Output 7(fvec4) + 98(fragColor): 97(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 9(f4): 8(ptr) Variable Function + Store 9(f4) 11 + 14: 6(float) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 13(if1) + 18: 17(ptr) AccessChain 9(f4) 16 + 19: 6(float) Load 18 + 20: 6(float) FAdd 19 14 + 21: 17(ptr) AccessChain 9(f4) 16 + Store 21 20 + 25: 22(fvec2) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 24(if2) + 26: 7(fvec4) Load 9(f4) + 27: 22(fvec2) VectorShuffle 26 26 0 1 + 28: 22(fvec2) FAdd 27 25 + 29: 7(fvec4) Load 9(f4) + 30: 7(fvec4) VectorShuffle 29 28 4 5 2 3 + Store 9(f4) 30 + 34: 31(fvec3) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 33(if3) + 35: 7(fvec4) Load 9(f4) + 36: 31(fvec3) VectorShuffle 35 35 0 1 2 + 37: 31(fvec3) FAdd 36 34 + 38: 7(fvec4) Load 9(f4) + 39: 7(fvec4) VectorShuffle 38 37 4 5 6 3 + Store 9(f4) 39 + 42: 7(fvec4) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 41(if4) + 43: 7(fvec4) Load 9(f4) + 44: 7(fvec4) FAdd 43 42 + Store 9(f4) 44 + 48: 45(int) Load 47(samp) + 49: 6(float) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 13(if1) 48 + 50: 17(ptr) AccessChain 9(f4) 16 + 51: 6(float) Load 50 + 52: 6(float) FAdd 51 49 + 53: 17(ptr) AccessChain 9(f4) 16 + Store 53 52 + 54: 45(int) Load 47(samp) + 55: 22(fvec2) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 24(if2) 54 + 56: 7(fvec4) Load 9(f4) + 57: 22(fvec2) VectorShuffle 56 56 0 1 + 58: 22(fvec2) FAdd 57 55 + 59: 7(fvec4) Load 9(f4) + 60: 7(fvec4) VectorShuffle 59 58 4 5 2 3 + Store 9(f4) 60 + 61: 45(int) Load 47(samp) + 62: 31(fvec3) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 33(if3) 61 + 63: 7(fvec4) Load 9(f4) + 64: 31(fvec3) VectorShuffle 63 63 0 1 2 + 65: 31(fvec3) FAdd 64 62 + 66: 7(fvec4) Load 9(f4) + 67: 7(fvec4) VectorShuffle 66 65 4 5 6 3 + Store 9(f4) 67 + 68: 45(int) Load 47(samp) + 69: 7(fvec4) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 41(if4) 68 + 70: 7(fvec4) Load 9(f4) + 71: 7(fvec4) FAdd 70 69 + Store 9(f4) 71 + 73: 22(fvec2) Load 72(offset) + 74: 6(float) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 13(if1) 73 + 75: 17(ptr) AccessChain 9(f4) 16 + 76: 6(float) Load 75 + 77: 6(float) FAdd 76 74 + 78: 17(ptr) AccessChain 9(f4) 16 + Store 78 77 + 79: 22(fvec2) Load 72(offset) + 80: 22(fvec2) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 24(if2) 79 + 81: 7(fvec4) Load 9(f4) + 82: 22(fvec2) VectorShuffle 81 81 0 1 + 83: 22(fvec2) FAdd 82 80 + 84: 7(fvec4) Load 9(f4) + 85: 7(fvec4) VectorShuffle 84 83 4 5 2 3 + Store 9(f4) 85 + 86: 22(fvec2) Load 72(offset) + 87: 31(fvec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 33(if3) 86 + 88: 7(fvec4) Load 9(f4) + 89: 31(fvec3) VectorShuffle 88 88 0 1 2 + 90: 31(fvec3) FAdd 89 87 + 91: 7(fvec4) Load 9(f4) + 92: 7(fvec4) VectorShuffle 91 90 4 5 6 3 + Store 9(f4) 92 + 93: 22(fvec2) Load 72(offset) + 94: 7(fvec4) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 41(if4) 93 + 95: 7(fvec4) Load 9(f4) + 96: 7(fvec4) FAdd 95 94 + Store 9(f4) 96 + 99: 7(fvec4) Load 9(f4) + Store 98(fragColor) 99 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.layoutNested.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.layoutNested.vert.out new file mode 100644 index 0000000..0d0b28b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.layoutNested.vert.out @@ -0,0 +1,243 @@ +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 +// Id's are bound by 66 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 62 65 + Source GLSL 450 + Name 4 "main" + Name 14 "S" + MemberName 14(S) 0 "a" + MemberName 14(S) 1 "b" + MemberName 14(S) 2 "c" + Name 19 "Block140" + MemberName 19(Block140) 0 "u" + MemberName 19(Block140) 1 "s" + MemberName 19(Block140) 2 "v" + Name 21 "inst140" + Name 23 "S" + MemberName 23(S) 0 "a" + MemberName 23(S) 1 "b" + MemberName 23(S) 2 "c" + Name 26 "Block430" + MemberName 26(Block430) 0 "u" + MemberName 26(Block430) 1 "s" + MemberName 26(Block430) 2 "v" + Name 28 "inst430" + Name 29 "S" + MemberName 29(S) 0 "a" + MemberName 29(S) 1 "b" + MemberName 29(S) 2 "c" + Name 31 "s" + Name 32 "T" + MemberName 32(T) 0 "m" + MemberName 32(T) 1 "a" + Name 34 "t" + Name 35 "T" + MemberName 35(T) 0 "m" + MemberName 35(T) 1 "a" + Name 36 "Nestor" + MemberName 36(Nestor) 0 "nestorT" + Name 37 "Bt1" + MemberName 37(Bt1) 0 "nt" + Name 39 "Btn1" + Name 40 "T" + MemberName 40(T) 0 "m" + MemberName 40(T) 1 "a" + Name 41 "Nestor" + MemberName 41(Nestor) 0 "nestorT" + Name 42 "Bt2" + MemberName 42(Bt2) 0 "nt" + Name 44 "Btn2" + Name 45 "Bt3" + MemberName 45(Bt3) 0 "ntcol" + MemberName 45(Bt3) 1 "ntrow" + Name 47 "Btn3" + Name 48 "T" + MemberName 48(T) 0 "m" + MemberName 48(T) 1 "a" + Name 49 "Nestor" + MemberName 49(Nestor) 0 "nestorT" + Name 50 "bBt1" + MemberName 50(bBt1) 0 "nt" + Name 52 "bBtn1" + Name 53 "T" + MemberName 53(T) 0 "m" + MemberName 53(T) 1 "a" + Name 54 "Nestor" + MemberName 54(Nestor) 0 "nestorT" + Name 55 "bBt2" + MemberName 55(bBt2) 0 "nt" + Name 57 "bBtn2" + Name 58 "bBt3" + MemberName 58(bBt3) 0 "ntcol" + MemberName 58(bBt3) 1 "ntrow" + Name 60 "bBtn3" + Name 62 "sout" + Name 63 "S" + MemberName 63(S) 0 "a" + MemberName 63(S) 1 "b" + MemberName 63(S) 2 "c" + Name 65 "soutinv" + Decorate 13 ArrayStride 32 + MemberDecorate 14(S) 0 Offset 0 + MemberDecorate 14(S) 1 ColMajor + MemberDecorate 14(S) 1 RelaxedPrecision + MemberDecorate 14(S) 1 Offset 16 + MemberDecorate 14(S) 1 MatrixStride 16 + MemberDecorate 14(S) 2 RelaxedPrecision + MemberDecorate 14(S) 2 Offset 144 + Decorate 16 ArrayStride 160 + Decorate 18 ArrayStride 480 + MemberDecorate 19(Block140) 0 RelaxedPrecision + MemberDecorate 19(Block140) 0 Offset 0 + MemberDecorate 19(Block140) 1 Offset 16 + MemberDecorate 19(Block140) 2 RelaxedPrecision + MemberDecorate 19(Block140) 2 Offset 976 + Decorate 19(Block140) Block + Decorate 21(inst140) DescriptorSet 0 + Decorate 21(inst140) Binding 0 + Decorate 22 ArrayStride 16 + MemberDecorate 23(S) 0 Offset 0 + MemberDecorate 23(S) 1 ColMajor + MemberDecorate 23(S) 1 RelaxedPrecision + MemberDecorate 23(S) 1 Offset 16 + MemberDecorate 23(S) 1 MatrixStride 8 + MemberDecorate 23(S) 2 RelaxedPrecision + MemberDecorate 23(S) 2 Offset 80 + Decorate 24 ArrayStride 96 + Decorate 25 ArrayStride 288 + MemberDecorate 26(Block430) 0 RelaxedPrecision + MemberDecorate 26(Block430) 0 Offset 0 + MemberDecorate 26(Block430) 1 Offset 16 + MemberDecorate 26(Block430) 2 RelaxedPrecision + MemberDecorate 26(Block430) 2 Offset 592 + Decorate 26(Block430) BufferBlock + Decorate 28(inst430) DescriptorSet 0 + Decorate 28(inst430) Binding 1 + MemberDecorate 29(S) 1 RelaxedPrecision + MemberDecorate 29(S) 2 RelaxedPrecision + MemberDecorate 35(T) 0 RowMajor + MemberDecorate 35(T) 0 Offset 0 + MemberDecorate 35(T) 0 MatrixStride 16 + MemberDecorate 35(T) 1 Offset 32 + MemberDecorate 36(Nestor) 0 Offset 0 + MemberDecorate 37(Bt1) 0 Offset 0 + Decorate 37(Bt1) Block + Decorate 39(Btn1) DescriptorSet 1 + Decorate 39(Btn1) Binding 0 + MemberDecorate 40(T) 0 ColMajor + MemberDecorate 40(T) 0 Offset 0 + MemberDecorate 40(T) 0 MatrixStride 16 + MemberDecorate 40(T) 1 Offset 32 + MemberDecorate 41(Nestor) 0 Offset 0 + MemberDecorate 42(Bt2) 0 Offset 0 + Decorate 42(Bt2) Block + Decorate 44(Btn2) DescriptorSet 1 + Decorate 44(Btn2) Binding 0 + MemberDecorate 45(Bt3) 0 Offset 0 + MemberDecorate 45(Bt3) 1 Offset 48 + Decorate 45(Bt3) Block + Decorate 47(Btn3) DescriptorSet 1 + Decorate 47(Btn3) Binding 0 + MemberDecorate 48(T) 0 RowMajor + MemberDecorate 48(T) 0 Offset 0 + MemberDecorate 48(T) 0 MatrixStride 8 + MemberDecorate 48(T) 1 Offset 16 + MemberDecorate 49(Nestor) 0 Offset 0 + MemberDecorate 50(bBt1) 0 Offset 0 + Decorate 50(bBt1) BufferBlock + Decorate 52(bBtn1) DescriptorSet 1 + Decorate 52(bBtn1) Binding 0 + MemberDecorate 53(T) 0 ColMajor + MemberDecorate 53(T) 0 Offset 0 + MemberDecorate 53(T) 0 MatrixStride 8 + MemberDecorate 53(T) 1 Offset 16 + MemberDecorate 54(Nestor) 0 Offset 0 + MemberDecorate 55(bBt2) 0 Offset 0 + Decorate 55(bBt2) BufferBlock + Decorate 57(bBtn2) DescriptorSet 1 + Decorate 57(bBtn2) Binding 0 + MemberDecorate 58(bBt3) 0 Offset 0 + MemberDecorate 58(bBt3) 1 Offset 24 + Decorate 58(bBt3) BufferBlock + Decorate 60(bBtn3) DescriptorSet 1 + Decorate 60(bBtn3) Binding 0 + Decorate 62(sout) Flat + MemberDecorate 63(S) 0 Invariant + MemberDecorate 63(S) 1 RelaxedPrecision + MemberDecorate 63(S) 1 Invariant + MemberDecorate 63(S) 2 RelaxedPrecision + MemberDecorate 63(S) 2 Invariant + Decorate 65(soutinv) Invariant + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypeInt 32 0 + 8: TypeVector 7(int) 3 + 9: TypeFloat 32 + 10: TypeVector 9(float) 2 + 11: TypeMatrix 10(fvec2) 2 + 12: 7(int) Constant 4 + 13: TypeArray 11 12 + 14(S): TypeStruct 8(ivec3) 13 7(int) + 15: 7(int) Constant 3 + 16: TypeArray 14(S) 15 + 17: 7(int) Constant 2 + 18: TypeArray 16 17 + 19(Block140): TypeStruct 6(int) 18 10(fvec2) + 20: TypePointer Uniform 19(Block140) + 21(inst140): 20(ptr) Variable Uniform + 22: TypeArray 11 12 + 23(S): TypeStruct 8(ivec3) 22 7(int) + 24: TypeArray 23(S) 15 + 25: TypeArray 24 17 + 26(Block430): TypeStruct 6(int) 25 10(fvec2) + 27: TypePointer Uniform 26(Block430) + 28(inst430): 27(ptr) Variable Uniform + 29(S): TypeStruct 8(ivec3) 13 7(int) + 30: TypePointer Private 29(S) + 31(s): 30(ptr) Variable Private + 32(T): TypeStruct 11 6(int) + 33: TypePointer Private 32(T) + 34(t): 33(ptr) Variable Private + 35(T): TypeStruct 11 6(int) + 36(Nestor): TypeStruct 35(T) + 37(Bt1): TypeStruct 36(Nestor) + 38: TypePointer Uniform 37(Bt1) + 39(Btn1): 38(ptr) Variable Uniform + 40(T): TypeStruct 11 6(int) + 41(Nestor): TypeStruct 40(T) + 42(Bt2): TypeStruct 41(Nestor) + 43: TypePointer Uniform 42(Bt2) + 44(Btn2): 43(ptr) Variable Uniform + 45(Bt3): TypeStruct 41(Nestor) 36(Nestor) + 46: TypePointer Uniform 45(Bt3) + 47(Btn3): 46(ptr) Variable Uniform + 48(T): TypeStruct 11 6(int) + 49(Nestor): TypeStruct 48(T) + 50(bBt1): TypeStruct 49(Nestor) + 51: TypePointer Uniform 50(bBt1) + 52(bBtn1): 51(ptr) Variable Uniform + 53(T): TypeStruct 11 6(int) + 54(Nestor): TypeStruct 53(T) + 55(bBt2): TypeStruct 54(Nestor) + 56: TypePointer Uniform 55(bBt2) + 57(bBtn2): 56(ptr) Variable Uniform + 58(bBt3): TypeStruct 49(Nestor) 54(Nestor) + 59: TypePointer Uniform 58(bBt3) + 60(bBtn3): 59(ptr) Variable Uniform + 61: TypePointer Output 29(S) + 62(sout): 61(ptr) Variable Output + 63(S): TypeStruct 8(ivec3) 13 7(int) + 64: TypePointer Output 63(S) + 65(soutinv): 64(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.length.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.length.frag.out new file mode 100755 index 0000000..76f6ca6 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.length.frag.out @@ -0,0 +1,51 @@ +spv.length.frag +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 33 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 14 26 + ExecutionMode 4 OriginUpperLeft + Source GLSL 140 + Name 4 "main" + Name 9 "t" + Name 14 "v" + Name 26 "gl_FragColor" + Name 32 "u" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 2 + 8: TypePointer Function 7(fvec2) + 10: TypeInt 32 0 + 11: 10(int) Constant 2 + 12: TypeArray 7(fvec2) 11 + 13: TypePointer Input 12 + 14(v): 13(ptr) Variable Input + 15: TypeInt 32 1 + 16: 15(int) Constant 0 + 17: TypePointer Input 7(fvec2) + 20: 15(int) Constant 1 + 24: TypeVector 6(float) 4 + 25: TypePointer Output 24(fvec4) +26(gl_FragColor): 25(ptr) Variable Output + 27: 6(float) Constant 1106247680 + 28: 24(fvec4) ConstantComposite 27 27 27 27 + 29: 10(int) Constant 3 + 30: TypeArray 24(fvec4) 29 + 31: TypePointer Private 30 + 32(u): 31(ptr) Variable Private + 4(main): 2 Function None 3 + 5: Label + 9(t): 8(ptr) Variable Function + 18: 17(ptr) AccessChain 14(v) 16 + 19: 7(fvec2) Load 18 + 21: 17(ptr) AccessChain 14(v) 20 + 22: 7(fvec2) Load 21 + 23: 7(fvec2) FAdd 19 22 + Store 9(t) 23 + Store 26(gl_FragColor) 28 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.localAggregates.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.localAggregates.frag.out new file mode 100755 index 0000000..7ffa874 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.localAggregates.frag.out @@ -0,0 +1,216 @@ +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 +// Id's are bound by 136 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 15 40 90 98 108 134 135 + ExecutionMode 4 OriginUpperLeft + Source GLSL 400 + Name 4 "main" + Name 8 "s1" + MemberName 8(s1) 0 "i" + MemberName 8(s1) 1 "f" + Name 10 "s2" + MemberName 10(s2) 0 "i" + MemberName 10(s2) 1 "f" + MemberName 10(s2) 2 "s1_1" + MemberName 10(s2) 3 "bleh" + Name 12 "locals2" + Name 13 "s3" + MemberName 13(s3) 0 "s2_1" + MemberName 13(s3) 1 "i" + MemberName 13(s3) 2 "f" + MemberName 13(s3) 3 "s1_1" + Name 15 "foo3" + Name 36 "localFArray" + Name 40 "coord" + Name 49 "localIArray" + Name 68 "x" + Name 70 "localArray" + Name 75 "i" + Name 84 "a" + Name 90 "condition" + Name 98 "color" + Name 108 "gl_FragColor" + Name 128 "samp2D" + Name 134 "foo" + Name 135 "foo2" + Decorate 15(foo3) Flat + Decorate 90(condition) Flat + Decorate 128(samp2D) DescriptorSet 0 + Decorate 134(foo) Flat + Decorate 135(foo2) Flat + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypeFloat 32 + 8(s1): TypeStruct 6(int) 7(float) + 9: TypeVector 7(float) 4 + 10(s2): TypeStruct 6(int) 7(float) 8(s1) 9(fvec4) + 11: TypePointer Function 10(s2) + 13(s3): TypeStruct 10(s2) 6(int) 7(float) 8(s1) + 14: TypePointer Input 13(s3) + 15(foo3): 14(ptr) Variable Input + 16: 6(int) Constant 0 + 17: TypePointer Input 10(s2) + 20: TypePointer Input 6(int) + 23: TypeBool + 27: 6(int) Constant 2 + 28: 6(int) Constant 1 + 29: 7(float) Constant 1065353216 + 30: TypePointer Function 7(float) + 32: TypeInt 32 0 + 33: 32(int) Constant 16 + 34: TypeArray 7(float) 33 + 35: TypePointer Function 34 + 37: 6(int) Constant 4 + 38: TypeVector 7(float) 2 + 39: TypePointer Input 38(fvec2) + 40(coord): 39(ptr) Variable Input + 41: 32(int) Constant 0 + 42: TypePointer Input 7(float) + 46: 32(int) Constant 8 + 47: TypeArray 6(int) 46 + 48: TypePointer Function 47 + 52: TypePointer Function 6(int) + 69: 6(int) Constant 5 + 82: 6(int) Constant 16 + 86: 7(float) Constant 0 + 90(condition): 20(ptr) Variable Input + 96: 6(int) Constant 3 + 97: TypePointer Input 9(fvec4) + 98(color): 97(ptr) Variable Input + 100: TypePointer Function 9(fvec4) + 102: 32(int) Constant 1 + 105: 32(int) Constant 2 + 107: TypePointer Output 9(fvec4) +108(gl_FragColor): 107(ptr) Variable Output + 125: TypeImage 7(float) 2D sampled format:Unknown + 126: TypeSampledImage 125 + 127: TypePointer UniformConstant 126 + 128(samp2D): 127(ptr) Variable UniformConstant + 133: TypePointer Input 8(s1) + 134(foo): 133(ptr) Variable Input + 135(foo2): 17(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 12(locals2): 11(ptr) Variable Function + 36(localFArray): 35(ptr) Variable Function + 49(localIArray): 48(ptr) Variable Function + 68(x): 52(ptr) Variable Function + 70(localArray): 35(ptr) Variable Function + 75(i): 52(ptr) Variable Function + 84(a): 35(ptr) Variable Function + 18: 17(ptr) AccessChain 15(foo3) 16 + 19: 10(s2) Load 18 + Store 12(locals2) 19 + 21: 20(ptr) AccessChain 15(foo3) 16 16 + 22: 6(int) Load 21 + 24: 23(bool) SGreaterThan 22 16 + SelectionMerge 26 None + BranchConditional 24 25 54 + 25: Label + 31: 30(ptr) AccessChain 12(locals2) 27 28 + Store 31 29 + 43: 42(ptr) AccessChain 40(coord) 41 + 44: 7(float) Load 43 + 45: 30(ptr) AccessChain 36(localFArray) 37 + Store 45 44 + 50: 20(ptr) AccessChain 15(foo3) 16 16 + 51: 6(int) Load 50 + 53: 52(ptr) AccessChain 49(localIArray) 27 + Store 53 51 + Branch 26 + 54: Label + 55: 42(ptr) AccessChain 40(coord) 41 + 56: 7(float) Load 55 + 57: 30(ptr) AccessChain 12(locals2) 27 28 + Store 57 56 + 58: 30(ptr) AccessChain 36(localFArray) 37 + Store 58 29 + 59: 52(ptr) AccessChain 49(localIArray) 27 + Store 59 16 + Branch 26 + 26: Label + 60: 52(ptr) AccessChain 49(localIArray) 27 + 61: 6(int) Load 60 + 62: 23(bool) IEqual 61 16 + SelectionMerge 64 None + BranchConditional 62 63 64 + 63: Label + 65: 30(ptr) AccessChain 36(localFArray) 37 + 66: 7(float) Load 65 + 67: 7(float) FAdd 66 29 + Store 65 67 + Branch 64 + 64: Label + Store 68(x) 69 + 71: 6(int) Load 68(x) + 72: 42(ptr) AccessChain 40(coord) 41 + 73: 7(float) Load 72 + 74: 30(ptr) AccessChain 70(localArray) 71 + Store 74 73 + Store 75(i) 16 + Branch 76 + 76: Label + LoopMerge 78 79 None + Branch 80 + 80: Label + 81: 6(int) Load 75(i) + 83: 23(bool) SLessThan 81 82 + BranchConditional 83 77 78 + 77: Label + 85: 6(int) Load 75(i) + 87: 30(ptr) AccessChain 84(a) 85 + Store 87 86 + Branch 79 + 79: Label + 88: 6(int) Load 75(i) + 89: 6(int) IAdd 88 28 + Store 75(i) 89 + Branch 76 + 78: Label + 91: 6(int) Load 90(condition) + 92: 23(bool) IEqual 91 28 + SelectionMerge 94 None + BranchConditional 92 93 94 + 93: Label + 95: 34 Load 70(localArray) + Store 84(a) 95 + Branch 94 + 94: Label + 99: 9(fvec4) Load 98(color) + 101: 100(ptr) AccessChain 12(locals2) 96 + Store 101 99 + 103: 42(ptr) AccessChain 40(coord) 102 + 104: 7(float) Load 103 + 106: 30(ptr) AccessChain 12(locals2) 96 105 + Store 106 104 + 109: 100(ptr) AccessChain 12(locals2) 96 + 110: 9(fvec4) Load 109 + 111: 30(ptr) AccessChain 36(localFArray) 37 + 112: 7(float) Load 111 + 113: 30(ptr) AccessChain 12(locals2) 27 28 + 114: 7(float) Load 113 + 115: 7(float) FAdd 112 114 + 116: 6(int) Load 68(x) + 117: 30(ptr) AccessChain 70(localArray) 116 + 118: 7(float) Load 117 + 119: 7(float) FAdd 115 118 + 120: 6(int) Load 68(x) + 121: 30(ptr) AccessChain 84(a) 120 + 122: 7(float) Load 121 + 123: 7(float) FAdd 119 122 + 124: 9(fvec4) VectorTimesScalar 110 123 + 129: 126 Load 128(samp2D) + 130: 38(fvec2) Load 40(coord) + 131: 9(fvec4) ImageSampleImplicitLod 129 130 + 132: 9(fvec4) FMul 124 131 + Store 108(gl_FragColor) 132 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.loops.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.loops.frag.out new file mode 100755 index 0000000..8b1b480 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.loops.frag.out @@ -0,0 +1,1104 @@ +spv.loops.frag +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 725 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 11 54 57 71 106 114 118 131 137 157 160 171 308 344 350 366 380 418 450 469 512 544 552 562 588 615 624 629 649 687 698 + ExecutionMode 4 OriginUpperLeft + Source GLSL 140 + Name 4 "main" + Name 9 "color" + Name 11 "BaseColor" + Name 54 "d" + Name 57 "bigColor" + Name 71 "bigColor1_1" + Name 106 "d2" + Name 114 "d3" + Name 118 "bigColor1_2" + Name 131 "bigColor1_3" + Name 137 "d4" + Name 148 "i" + Name 157 "Count" + Name 160 "bigColor2" + Name 171 "bigColor3" + Name 179 "i" + Name 195 "i" + Name 231 "i" + Name 254 "i" + Name 279 "i" + Name 308 "bigColor4" + Name 344 "bigColor5" + Name 350 "d5" + Name 366 "d6" + Name 380 "bigColor6" + Name 418 "d7" + Name 450 "bigColor7" + Name 469 "d8" + Name 512 "d9" + Name 544 "d10" + Name 552 "d11" + Name 562 "d12" + Name 588 "bigColor8" + Name 615 "gl_FragColor" + Name 624 "d14" + Name 629 "d15" + Name 649 "d16" + Name 687 "d18" + Name 698 "d17" + Decorate 157(Count) Flat + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 10: TypePointer Input 7(fvec4) + 11(BaseColor): 10(ptr) Variable Input + 18: TypeBool + 19: 18(bool) ConstantTrue + 20: TypeInt 32 0 + 21: 20(int) Constant 0 + 22: TypePointer Function 6(float) + 25: 6(float) Constant 1051260355 + 29: 7(fvec4) ConstantComposite 25 25 25 25 + 35: 6(float) Constant 1059648963 + 39: 7(fvec4) ConstantComposite 35 35 35 35 + 53: TypePointer Input 6(float) + 54(d): 53(ptr) Variable Input + 57(bigColor): 10(ptr) Variable Input + 66: 20(int) Constant 2 + 71(bigColor1_1): 10(ptr) Variable Input + 75: 20(int) Constant 3 + 93: 6(float) Constant 1109917696 + 96: 6(float) Constant 1065353216 + 106(d2): 53(ptr) Variable Input + 111: 20(int) Constant 1 + 114(d3): 53(ptr) Variable Input +118(bigColor1_2): 10(ptr) Variable Input +131(bigColor1_3): 10(ptr) Variable Input + 137(d4): 53(ptr) Variable Input + 146: TypeInt 32 1 + 147: TypePointer Function 146(int) + 149: 146(int) Constant 0 + 156: TypePointer Input 146(int) + 157(Count): 156(ptr) Variable Input + 160(bigColor2): 10(ptr) Variable Input + 165: 146(int) Constant 1 + 171(bigColor3): 10(ptr) Variable Input + 186: 146(int) Constant 42 + 202: 146(int) Constant 100 + 206: 6(float) Constant 1101004800 + 238: 146(int) Constant 120 + 308(bigColor4): 10(ptr) Variable Input + 344(bigColor5): 10(ptr) Variable Input + 350(d5): 53(ptr) Variable Input + 366(d6): 53(ptr) Variable Input + 380(bigColor6): 10(ptr) Variable Input + 418(d7): 53(ptr) Variable Input + 445: 6(float) Constant 0 + 450(bigColor7): 10(ptr) Variable Input + 469(d8): 53(ptr) Variable Input + 486: 6(float) Constant 1073741824 + 512(d9): 53(ptr) Variable Input + 528: 6(float) Constant 1084227584 + 544(d10): 53(ptr) Variable Input + 552(d11): 53(ptr) Variable Input + 562(d12): 53(ptr) Variable Input + 586: 6(float) Constant 1092616192 + 588(bigColor8): 10(ptr) Variable Input + 614: TypePointer Output 7(fvec4) +615(gl_FragColor): 614(ptr) Variable Output + 624(d14): 53(ptr) Variable Input + 629(d15): 53(ptr) Variable Input + 649(d16): 53(ptr) Variable Input + 687(d18): 53(ptr) Variable Input + 698(d17): 53(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 9(color): 8(ptr) Variable Function + 148(i): 147(ptr) Variable Function + 179(i): 147(ptr) Variable Function + 195(i): 147(ptr) Variable Function + 231(i): 147(ptr) Variable Function + 254(i): 147(ptr) Variable Function + 279(i): 147(ptr) Variable Function + 12: 7(fvec4) Load 11(BaseColor) + Store 9(color) 12 + Branch 13 + 13: Label + LoopMerge 15 16 None + Branch 17 + 17: Label + BranchConditional 19 14 15 + 14: Label + 23: 22(ptr) AccessChain 9(color) 21 + 24: 6(float) Load 23 + 26: 18(bool) FOrdLessThan 24 25 + SelectionMerge 28 None + BranchConditional 26 27 28 + 27: Label + 30: 7(fvec4) Load 9(color) + 31: 7(fvec4) FAdd 30 29 + Store 9(color) 31 + Branch 15 + 28: Label + 33: 22(ptr) AccessChain 9(color) 21 + 34: 6(float) Load 33 + 36: 18(bool) FOrdLessThan 34 35 + SelectionMerge 38 None + BranchConditional 36 37 38 + 37: Label + 40: 7(fvec4) Load 9(color) + 41: 7(fvec4) FAdd 40 39 + Store 9(color) 41 + Branch 15 + 38: Label + 43: 7(fvec4) Load 9(color) + 44: 7(fvec4) FAdd 43 29 + Store 9(color) 44 + Branch 15 + 16: Label + Branch 13 + 15: Label + Branch 46 + 46: Label + LoopMerge 48 49 None + Branch 50 + 50: Label + 51: 22(ptr) AccessChain 9(color) 21 + 52: 6(float) Load 51 + 55: 6(float) Load 54(d) + 56: 18(bool) FOrdLessThan 52 55 + BranchConditional 56 47 48 + 47: Label + 58: 7(fvec4) Load 57(bigColor) + 59: 7(fvec4) Load 9(color) + 60: 7(fvec4) FAdd 59 58 + Store 9(color) 60 + Branch 49 + 49: Label + Branch 46 + 48: Label + Branch 61 + 61: Label + LoopMerge 63 64 None + Branch 65 + 65: Label + 67: 22(ptr) AccessChain 9(color) 66 + 68: 6(float) Load 67 + 69: 6(float) Load 54(d) + 70: 18(bool) FOrdLessThan 68 69 + BranchConditional 70 62 63 + 62: Label + 72: 7(fvec4) Load 71(bigColor1_1) + 73: 7(fvec4) Load 9(color) + 74: 7(fvec4) FAdd 73 72 + Store 9(color) 74 + 76: 22(ptr) AccessChain 9(color) 75 + 77: 6(float) Load 76 + 78: 6(float) Load 54(d) + 79: 18(bool) FOrdLessThan 77 78 + SelectionMerge 81 None + BranchConditional 79 80 81 + 80: Label + Branch 64 + 81: Label + 83: 7(fvec4) Load 71(bigColor1_1) + 84: 7(fvec4) Load 9(color) + 85: 7(fvec4) FAdd 84 83 + Store 9(color) 85 + Branch 64 + 64: Label + Branch 61 + 63: Label + Branch 86 + 86: Label + LoopMerge 88 89 None + Branch 90 + 90: Label + 91: 22(ptr) AccessChain 9(color) 21 + 92: 6(float) Load 91 + 94: 18(bool) FOrdLessThan 92 93 + BranchConditional 94 87 88 + 87: Label + 95: 7(fvec4) Load 9(color) + 97: 7(fvec4) CompositeConstruct 96 96 96 96 + 98: 7(fvec4) FAdd 95 97 + Store 9(color) 98 + Branch 89 + 89: Label + Branch 86 + 88: Label + Branch 99 + 99: Label + LoopMerge 101 102 None + Branch 103 + 103: Label + 104: 22(ptr) AccessChain 9(color) 75 + 105: 6(float) Load 104 + 107: 6(float) Load 106(d2) + 108: 18(bool) FOrdLessThan 105 107 + SelectionMerge 110 None + BranchConditional 108 109 110 + 109: Label + 112: 22(ptr) AccessChain 9(color) 111 + 113: 6(float) Load 112 + 115: 6(float) Load 114(d3) + 116: 18(bool) FOrdLessThan 113 115 + Branch 110 + 110: Label + 117: 18(bool) Phi 108 103 116 109 + BranchConditional 117 100 101 + 100: Label + 119: 7(fvec4) Load 118(bigColor1_2) + 120: 7(fvec4) Load 9(color) + 121: 7(fvec4) FAdd 120 119 + Store 9(color) 121 + Branch 102 + 102: Label + Branch 99 + 101: Label + Branch 122 + 122: Label + LoopMerge 124 125 None + Branch 126 + 126: Label + 127: 22(ptr) AccessChain 9(color) 66 + 128: 6(float) Load 127 + 129: 6(float) Load 114(d3) + 130: 18(bool) FOrdLessThan 128 129 + BranchConditional 130 123 124 + 123: Label + 132: 7(fvec4) Load 131(bigColor1_3) + 133: 7(fvec4) Load 9(color) + 134: 7(fvec4) FAdd 133 132 + Store 9(color) 134 + 135: 22(ptr) AccessChain 9(color) 111 + 136: 6(float) Load 135 + 138: 6(float) Load 137(d4) + 139: 18(bool) FOrdLessThan 136 138 + SelectionMerge 141 None + BranchConditional 139 140 141 + 140: Label + Branch 124 + 141: Label + 143: 7(fvec4) Load 131(bigColor1_3) + 144: 7(fvec4) Load 9(color) + 145: 7(fvec4) FAdd 144 143 + Store 9(color) 145 + Branch 125 + 125: Label + Branch 122 + 124: Label + Store 148(i) 149 + Branch 150 + 150: Label + LoopMerge 152 153 None + Branch 154 + 154: Label + 155: 146(int) Load 148(i) + 158: 146(int) Load 157(Count) + 159: 18(bool) SLessThan 155 158 + BranchConditional 159 151 152 + 151: Label + 161: 7(fvec4) Load 160(bigColor2) + 162: 7(fvec4) Load 9(color) + 163: 7(fvec4) FAdd 162 161 + Store 9(color) 163 + Branch 153 + 153: Label + 164: 146(int) Load 148(i) + 166: 146(int) IAdd 164 165 + Store 148(i) 166 + Branch 150 + 152: Label + Branch 167 + 167: Label + LoopMerge 169 170 None + Branch 168 + 168: Label + 172: 7(fvec4) Load 171(bigColor3) + 173: 7(fvec4) Load 9(color) + 174: 7(fvec4) FAdd 173 172 + Store 9(color) 174 + Branch 170 + 170: Label + 175: 22(ptr) AccessChain 9(color) 21 + 176: 6(float) Load 175 + 177: 6(float) Load 106(d2) + 178: 18(bool) FOrdLessThan 176 177 + BranchConditional 178 167 169 + 169: Label + Store 179(i) 149 + Branch 180 + 180: Label + LoopMerge 182 183 None + Branch 184 + 184: Label + 185: 146(int) Load 179(i) + 187: 18(bool) SLessThan 185 186 + BranchConditional 187 181 182 + 181: Label + 188: 6(float) Load 114(d3) + 189: 22(ptr) AccessChain 9(color) 66 + 190: 6(float) Load 189 + 191: 6(float) FAdd 190 188 + 192: 22(ptr) AccessChain 9(color) 66 + Store 192 191 + Branch 183 + 183: Label + 193: 146(int) Load 179(i) + 194: 146(int) IAdd 193 165 + Store 179(i) 194 + Branch 180 + 182: Label + Store 195(i) 149 + Branch 196 + 196: Label + LoopMerge 198 199 None + Branch 200 + 200: Label + 201: 146(int) Load 195(i) + 203: 18(bool) SLessThan 201 202 + BranchConditional 203 197 198 + 197: Label + 204: 22(ptr) AccessChain 9(color) 66 + 205: 6(float) Load 204 + 207: 18(bool) FOrdLessThan 205 206 + SelectionMerge 209 None + BranchConditional 207 208 213 + 208: Label + 210: 22(ptr) AccessChain 9(color) 21 + 211: 6(float) Load 210 + 212: 6(float) FAdd 211 96 + Store 210 212 + Branch 209 + 213: Label + 214: 22(ptr) AccessChain 9(color) 111 + 215: 6(float) Load 214 + 216: 6(float) FAdd 215 96 + Store 214 216 + Branch 209 + 209: Label + 217: 22(ptr) AccessChain 9(color) 75 + 218: 6(float) Load 217 + 219: 18(bool) FOrdLessThan 218 206 + SelectionMerge 221 None + BranchConditional 219 220 221 + 220: Label + 222: 22(ptr) AccessChain 9(color) 66 + 223: 6(float) Load 222 + 224: 22(ptr) AccessChain 9(color) 111 + 225: 6(float) Load 224 + 226: 18(bool) FOrdGreaterThan 223 225 + SelectionMerge 228 None + BranchConditional 226 227 228 + 227: Label + Branch 228 + 228: Label + Branch 221 + 221: Label + Branch 199 + 199: Label + 229: 146(int) Load 195(i) + 230: 146(int) IAdd 229 165 + Store 195(i) 230 + Branch 196 + 198: Label + Store 231(i) 149 + Branch 232 + 232: Label + LoopMerge 234 235 None + Branch 236 + 236: Label + 237: 146(int) Load 231(i) + 239: 18(bool) SLessThan 237 238 + BranchConditional 239 233 234 + 233: Label + 240: 22(ptr) AccessChain 9(color) 66 + 241: 6(float) Load 240 + 242: 18(bool) FOrdLessThan 241 206 + SelectionMerge 244 None + BranchConditional 242 243 248 + 243: Label + 245: 22(ptr) AccessChain 9(color) 21 + 246: 6(float) Load 245 + 247: 6(float) FAdd 246 96 + Store 245 247 + Branch 244 + 248: Label + 249: 22(ptr) AccessChain 9(color) 111 + 250: 6(float) Load 249 + 251: 6(float) FAdd 250 96 + Store 249 251 + Branch 244 + 244: Label + Branch 235 + 235: Label + 252: 146(int) Load 231(i) + 253: 146(int) IAdd 252 165 + Store 231(i) 253 + Branch 232 + 234: Label + Store 254(i) 149 + Branch 255 + 255: Label + LoopMerge 257 258 None + Branch 259 + 259: Label + 260: 146(int) Load 254(i) + 261: 18(bool) SLessThan 260 186 + BranchConditional 261 256 257 + 256: Label + 262: 6(float) Load 114(d3) + 263: 22(ptr) AccessChain 9(color) 66 + 264: 6(float) Load 263 + 265: 6(float) FAdd 264 262 + 266: 22(ptr) AccessChain 9(color) 66 + Store 266 265 + 267: 22(ptr) AccessChain 9(color) 21 + 268: 6(float) Load 267 + 269: 6(float) Load 137(d4) + 270: 18(bool) FOrdLessThan 268 269 + SelectionMerge 272 None + BranchConditional 270 271 272 + 271: Label + Branch 258 + 272: Label + 274: 22(ptr) AccessChain 9(color) 75 + 275: 6(float) Load 274 + 276: 6(float) FAdd 275 96 + Store 274 276 + Branch 258 + 258: Label + 277: 146(int) Load 254(i) + 278: 146(int) IAdd 277 165 + Store 254(i) 278 + Branch 255 + 257: Label + Store 279(i) 149 + Branch 280 + 280: Label + LoopMerge 282 283 None + Branch 284 + 284: Label + 285: 146(int) Load 279(i) + 286: 18(bool) SLessThan 285 186 + BranchConditional 286 281 282 + 281: Label + 287: 6(float) Load 114(d3) + 288: 22(ptr) AccessChain 9(color) 66 + 289: 6(float) Load 288 + 290: 6(float) FAdd 289 287 + 291: 22(ptr) AccessChain 9(color) 66 + Store 291 290 + 292: 22(ptr) AccessChain 9(color) 21 + 293: 6(float) Load 292 + 294: 6(float) Load 137(d4) + 295: 18(bool) FOrdLessThan 293 294 + SelectionMerge 297 None + BranchConditional 295 296 297 + 296: Label + Branch 282 + 297: Label + 299: 22(ptr) AccessChain 9(color) 75 + 300: 6(float) Load 299 + 301: 6(float) FAdd 300 96 + Store 299 301 + Branch 283 + 283: Label + 302: 146(int) Load 279(i) + 303: 146(int) IAdd 302 165 + Store 279(i) 303 + Branch 280 + 282: Label + Branch 304 + 304: Label + LoopMerge 306 307 None + Branch 305 + 305: Label + 309: 7(fvec4) Load 308(bigColor4) + 310: 7(fvec4) Load 9(color) + 311: 7(fvec4) FAdd 310 309 + Store 9(color) 311 + 312: 22(ptr) AccessChain 9(color) 21 + 313: 6(float) Load 312 + 314: 6(float) Load 137(d4) + 315: 18(bool) FOrdLessThan 313 314 + SelectionMerge 317 None + BranchConditional 315 316 317 + 316: Label + Branch 307 + 317: Label + 319: 22(ptr) AccessChain 9(color) 111 + 320: 6(float) Load 319 + 321: 6(float) Load 137(d4) + 322: 18(bool) FOrdLessThan 320 321 + SelectionMerge 324 None + BranchConditional 322 323 330 + 323: Label + 325: 6(float) Load 137(d4) + 326: 22(ptr) AccessChain 9(color) 111 + 327: 6(float) Load 326 + 328: 6(float) FAdd 327 325 + 329: 22(ptr) AccessChain 9(color) 111 + Store 329 328 + Branch 324 + 330: Label + 331: 6(float) Load 137(d4) + 332: 22(ptr) AccessChain 9(color) 21 + 333: 6(float) Load 332 + 334: 6(float) FAdd 333 331 + 335: 22(ptr) AccessChain 9(color) 21 + Store 335 334 + Branch 324 + 324: Label + Branch 307 + 307: Label + 336: 22(ptr) AccessChain 9(color) 66 + 337: 6(float) Load 336 + 338: 6(float) Load 137(d4) + 339: 18(bool) FOrdLessThan 337 338 + BranchConditional 339 304 306 + 306: Label + Branch 340 + 340: Label + LoopMerge 342 343 None + Branch 341 + 341: Label + 345: 7(fvec4) Load 344(bigColor5) + 346: 7(fvec4) Load 9(color) + 347: 7(fvec4) FAdd 346 345 + Store 9(color) 347 + 348: 22(ptr) AccessChain 9(color) 111 + 349: 6(float) Load 348 + 351: 6(float) Load 350(d5) + 352: 18(bool) FOrdLessThan 349 351 + SelectionMerge 354 None + BranchConditional 352 353 354 + 353: Label + 355: 6(float) Load 350(d5) + 356: 22(ptr) AccessChain 9(color) 111 + 357: 6(float) Load 356 + 358: 6(float) FAdd 357 355 + 359: 22(ptr) AccessChain 9(color) 111 + Store 359 358 + Branch 354 + 354: Label + Branch 343 + 343: Label + 360: 22(ptr) AccessChain 9(color) 21 + 361: 6(float) Load 360 + 362: 6(float) Load 350(d5) + 363: 18(bool) FOrdLessThan 361 362 + BranchConditional 363 340 342 + 342: Label + 364: 22(ptr) AccessChain 9(color) 21 + 365: 6(float) Load 364 + 367: 6(float) Load 366(d6) + 368: 18(bool) FOrdLessThan 365 367 + SelectionMerge 370 None + BranchConditional 368 369 384 + 369: Label + Branch 371 + 371: Label + LoopMerge 373 374 None + Branch 375 + 375: Label + 376: 22(ptr) AccessChain 9(color) 111 + 377: 6(float) Load 376 + 378: 6(float) Load 366(d6) + 379: 18(bool) FOrdLessThan 377 378 + BranchConditional 379 372 373 + 372: Label + 381: 7(fvec4) Load 380(bigColor6) + 382: 7(fvec4) Load 9(color) + 383: 7(fvec4) FAdd 382 381 + Store 9(color) 383 + Branch 374 + 374: Label + Branch 371 + 373: Label + Branch 370 + 384: Label + Branch 385 + 385: Label + LoopMerge 387 388 None + Branch 389 + 389: Label + 390: 22(ptr) AccessChain 9(color) 66 + 391: 6(float) Load 390 + 392: 6(float) Load 366(d6) + 393: 18(bool) FOrdLessThan 391 392 + BranchConditional 393 386 387 + 386: Label + 394: 53(ptr) AccessChain 380(bigColor6) 66 + 395: 6(float) Load 394 + 396: 22(ptr) AccessChain 9(color) 66 + 397: 6(float) Load 396 + 398: 6(float) FAdd 397 395 + 399: 22(ptr) AccessChain 9(color) 66 + Store 399 398 + Branch 388 + 388: Label + Branch 385 + 387: Label + Branch 370 + 370: Label + 400: 22(ptr) AccessChain 9(color) 21 + 401: 6(float) Load 400 + 402: 6(float) Load 366(d6) + 403: 18(bool) FOrdLessThan 401 402 + SelectionMerge 405 None + BranchConditional 403 404 424 + 404: Label + Branch 406 + 406: Label + LoopMerge 408 409 None + Branch 410 + 410: Label + 411: 22(ptr) AccessChain 9(color) 111 + 412: 6(float) Load 411 + 413: 6(float) Load 366(d6) + 414: 18(bool) FOrdLessThan 412 413 + BranchConditional 414 407 408 + 407: Label + 415: 7(fvec4) Load 380(bigColor6) + 416: 7(fvec4) Load 9(color) + 417: 7(fvec4) FAdd 416 415 + Store 9(color) 417 + 419: 6(float) Load 418(d7) + 420: 18(bool) FOrdLessThan 419 96 + SelectionMerge 422 None + BranchConditional 420 421 422 + 421: Label + Branch 408 + 422: Label + Branch 409 + 409: Label + Branch 406 + 408: Label + Branch 405 + 424: Label + Branch 425 + 425: Label + LoopMerge 427 428 None + Branch 429 + 429: Label + 430: 22(ptr) AccessChain 9(color) 66 + 431: 6(float) Load 430 + 432: 6(float) Load 366(d6) + 433: 18(bool) FOrdLessThan 431 432 + BranchConditional 433 426 427 + 426: Label + 434: 53(ptr) AccessChain 380(bigColor6) 66 + 435: 6(float) Load 434 + 436: 22(ptr) AccessChain 9(color) 66 + 437: 6(float) Load 436 + 438: 6(float) FAdd 437 435 + 439: 22(ptr) AccessChain 9(color) 66 + Store 439 438 + Branch 428 + 428: Label + Branch 425 + 427: Label + Branch 405 + 405: Label + Branch 440 + 440: Label + LoopMerge 442 443 None + Branch 441 + 441: Label + 444: 6(float) Load 418(d7) + 446: 18(bool) FOrdLessThan 444 445 + SelectionMerge 448 None + BranchConditional 446 447 448 + 447: Label + Branch 442 + 448: Label + 451: 7(fvec4) Load 450(bigColor7) + 452: 7(fvec4) Load 9(color) + 453: 7(fvec4) FAdd 452 451 + Store 9(color) 453 + 454: 6(float) Load 418(d7) + 455: 18(bool) FOrdLessThan 454 96 + SelectionMerge 457 None + BranchConditional 455 456 457 + 456: Label + 458: 22(ptr) AccessChain 9(color) 66 + 459: 6(float) Load 458 + 460: 6(float) FAdd 459 96 + Store 458 460 + Branch 442 + 457: Label + 462: 7(fvec4) Load 11(BaseColor) + 463: 7(fvec4) Load 9(color) + 464: 7(fvec4) FAdd 463 462 + Store 9(color) 464 + Branch 443 + 443: Label + BranchConditional 19 440 442 + 442: Label + Branch 465 + 465: Label + LoopMerge 467 468 None + Branch 466 + 466: Label + 470: 6(float) Load 469(d8) + 471: 18(bool) FOrdLessThan 470 445 + SelectionMerge 473 None + BranchConditional 471 472 473 + 472: Label + Branch 467 + 473: Label + 475: 7(fvec4) Load 450(bigColor7) + 476: 7(fvec4) Load 9(color) + 477: 7(fvec4) FAdd 476 475 + Store 9(color) 477 + 478: 6(float) Load 469(d8) + 479: 18(bool) FOrdLessThan 478 96 + SelectionMerge 481 None + BranchConditional 479 480 481 + 480: Label + 482: 22(ptr) AccessChain 9(color) 66 + 483: 6(float) Load 482 + 484: 6(float) FAdd 483 96 + Store 482 484 + 485: 6(float) Load 469(d8) + 487: 18(bool) FOrdLessThan 485 486 + SelectionMerge 489 None + BranchConditional 487 488 493 + 488: Label + 490: 22(ptr) AccessChain 9(color) 111 + 491: 6(float) Load 490 + 492: 6(float) FAdd 491 96 + Store 490 492 + Branch 489 + 493: Label + 494: 22(ptr) AccessChain 9(color) 21 + 495: 6(float) Load 494 + 496: 6(float) FAdd 495 96 + Store 494 496 + Branch 489 + 489: Label + Branch 467 + 481: Label + 498: 7(fvec4) Load 11(BaseColor) + 499: 7(fvec4) Load 9(color) + 500: 7(fvec4) FAdd 499 498 + Store 9(color) 500 + Branch 468 + 468: Label + 501: 22(ptr) AccessChain 9(color) 66 + 502: 6(float) Load 501 + 503: 6(float) Load 469(d8) + 504: 18(bool) FOrdLessThan 502 503 + BranchConditional 504 465 467 + 467: Label + Branch 505 + 505: Label + LoopMerge 507 508 None + Branch 509 + 509: Label + 510: 22(ptr) AccessChain 9(color) 75 + 511: 6(float) Load 510 + 513: 6(float) Load 512(d9) + 514: 18(bool) FOrdLessThan 511 513 + BranchConditional 514 506 507 + 506: Label + 515: 6(float) Load 512(d9) + 516: 6(float) Load 469(d8) + 517: 18(bool) FOrdGreaterThan 515 516 + SelectionMerge 519 None + BranchConditional 517 518 519 + 518: Label + 520: 22(ptr) AccessChain 9(color) 21 + 521: 6(float) Load 520 + 522: 6(float) Load 418(d7) + 523: 18(bool) FOrdLessThanEqual 521 522 + SelectionMerge 525 None + BranchConditional 523 524 525 + 524: Label + 526: 22(ptr) AccessChain 9(color) 66 + 527: 6(float) Load 526 + 529: 18(bool) FOrdEqual 527 528 + SelectionMerge 531 None + BranchConditional 529 530 535 + 530: Label + 532: 22(ptr) AccessChain 9(color) 75 + 533: 6(float) Load 532 + 534: 6(float) FAdd 533 96 + Store 532 534 + Branch 531 + 535: Label + Branch 507 + 531: Label + Branch 525 + 525: Label + Branch 519 + 519: Label + Branch 508 + 508: Label + Branch 505 + 507: Label + Branch 537 + 537: Label + LoopMerge 539 540 None + Branch 541 + 541: Label + 542: 22(ptr) AccessChain 9(color) 66 + 543: 6(float) Load 542 + 545: 6(float) Load 544(d10) + 546: 18(bool) FOrdLessThan 543 545 + BranchConditional 546 538 539 + 538: Label + 547: 22(ptr) AccessChain 9(color) 111 + 548: 6(float) Load 547 + 549: 6(float) FAdd 548 96 + Store 547 549 + 550: 22(ptr) AccessChain 9(color) 111 + 551: 6(float) Load 550 + 553: 6(float) Load 552(d11) + 554: 18(bool) FOrdLessThan 551 553 + SelectionMerge 556 None + BranchConditional 554 555 556 + 555: Label + 557: 22(ptr) AccessChain 9(color) 66 + 558: 6(float) Load 557 + 559: 6(float) FAdd 558 96 + Store 557 559 + 560: 22(ptr) AccessChain 9(color) 75 + 561: 6(float) Load 560 + 563: 6(float) Load 562(d12) + 564: 18(bool) FOrdLessThan 561 563 + SelectionMerge 566 None + BranchConditional 564 565 570 + 565: Label + 567: 22(ptr) AccessChain 9(color) 75 + 568: 6(float) Load 567 + 569: 6(float) FAdd 568 96 + Store 567 569 + Branch 566 + 570: Label + 571: 22(ptr) AccessChain 9(color) 21 + 572: 6(float) Load 571 + 573: 6(float) FAdd 572 96 + Store 571 573 + Branch 566 + 566: Label + Branch 540 + 556: Label + 575: 7(fvec4) Load 9(color) + 576: 7(fvec4) CompositeConstruct 96 96 96 96 + 577: 7(fvec4) FAdd 575 576 + Store 9(color) 577 + Branch 539 + 540: Label + Branch 537 + 539: Label + Branch 579 + 579: Label + LoopMerge 581 582 None + Branch 583 + 583: Label + 584: 22(ptr) AccessChain 9(color) 21 + 585: 6(float) Load 584 + 587: 18(bool) FOrdLessThan 585 586 + BranchConditional 587 580 581 + 580: Label + 589: 7(fvec4) Load 588(bigColor8) + 590: 7(fvec4) Load 9(color) + 591: 7(fvec4) FAdd 590 589 + Store 9(color) 591 + 592: 22(ptr) AccessChain 9(color) 66 + 593: 6(float) Load 592 + 594: 6(float) Load 469(d8) + 595: 18(bool) FOrdLessThan 593 594 + SelectionMerge 597 None + BranchConditional 595 596 597 + 596: Label + 598: 22(ptr) AccessChain 9(color) 75 + 599: 6(float) Load 598 + 600: 6(float) Load 366(d6) + 601: 18(bool) FOrdLessThan 599 600 + SelectionMerge 603 None + BranchConditional 601 602 603 + 602: Label + Branch 582 + 603: Label + Branch 597 + 597: Label + 605: 53(ptr) AccessChain 588(bigColor8) 21 + 606: 6(float) Load 605 + 607: 22(ptr) AccessChain 9(color) 111 + 608: 6(float) Load 607 + 609: 6(float) FAdd 608 606 + 610: 22(ptr) AccessChain 9(color) 111 + Store 610 609 + Branch 582 + 582: Label + Branch 579 + 581: Label + 611: 7(fvec4) Load 9(color) + 612: 7(fvec4) CompositeConstruct 96 96 96 96 + 613: 7(fvec4) FAdd 611 612 + Store 9(color) 613 + 616: 7(fvec4) Load 9(color) + Store 615(gl_FragColor) 616 + Branch 617 + 617: Label + LoopMerge 619 620 None + Branch 621 + 621: Label + 622: 22(ptr) AccessChain 9(color) 21 + 623: 6(float) Load 622 + 625: 6(float) Load 624(d14) + 626: 18(bool) FOrdLessThan 623 625 + BranchConditional 626 618 619 + 618: Label + 627: 22(ptr) AccessChain 9(color) 111 + 628: 6(float) Load 627 + 630: 6(float) Load 629(d15) + 631: 18(bool) FOrdLessThan 628 630 + SelectionMerge 633 None + BranchConditional 631 632 635 + 632: Label + Return + 635: Label + 636: 7(fvec4) Load 9(color) + 637: 7(fvec4) CompositeConstruct 96 96 96 96 + 638: 7(fvec4) FAdd 636 637 + Store 9(color) 638 + Branch 633 + 633: Label + Branch 620 + 620: Label + Branch 617 + 619: Label + 639: 7(fvec4) Load 9(color) + 640: 7(fvec4) CompositeConstruct 96 96 96 96 + 641: 7(fvec4) FAdd 639 640 + Store 9(color) 641 + Branch 642 + 642: Label + LoopMerge 644 645 None + Branch 646 + 646: Label + 647: 22(ptr) AccessChain 9(color) 75 + 648: 6(float) Load 647 + 650: 6(float) Load 649(d16) + 651: 18(bool) FOrdLessThan 648 650 + BranchConditional 651 643 644 + 643: Label + 652: 22(ptr) AccessChain 9(color) 75 + 653: 6(float) Load 652 + 654: 6(float) FAdd 653 96 + Store 652 654 + Branch 645 + 645: Label + Branch 642 + 644: Label + Branch 655 + 655: Label + LoopMerge 657 658 None + Branch 659 + 659: Label + 660: 22(ptr) AccessChain 9(color) 75 + 661: 6(float) Load 660 + 662: 6(float) Load 106(d2) + 663: 18(bool) FOrdLessThan 661 662 + SelectionMerge 665 None + BranchConditional 663 664 665 + 664: Label + 666: 22(ptr) AccessChain 9(color) 111 + 667: 6(float) Load 666 + 668: 6(float) Load 114(d3) + 669: 18(bool) FOrdLessThan 667 668 + Branch 665 + 665: Label + 670: 18(bool) Phi 663 659 669 664 + BranchConditional 670 656 657 + 656: Label + 671: 7(fvec4) Load 118(bigColor1_2) + 672: 7(fvec4) Load 9(color) + 673: 7(fvec4) FAdd 672 671 + Store 9(color) 673 + 674: 22(ptr) AccessChain 9(color) 66 + 675: 6(float) Load 674 + 676: 6(float) Load 114(d3) + 677: 18(bool) FOrdLessThan 675 676 + SelectionMerge 679 None + BranchConditional 677 678 679 + 678: Label + Return + 679: Label + Branch 658 + 658: Label + Branch 655 + 657: Label + Branch 681 + 681: Label + LoopMerge 683 684 None + Branch 682 + 682: Label + 685: 22(ptr) AccessChain 9(color) 111 + 686: 6(float) Load 685 + 688: 6(float) Load 687(d18) + 689: 18(bool) FOrdLessThan 686 688 + SelectionMerge 691 None + BranchConditional 689 690 691 + 690: Label + Return + 691: Label + 693: 7(fvec4) Load 9(color) + 694: 7(fvec4) CompositeConstruct 96 96 96 96 + 695: 7(fvec4) FAdd 693 694 + Store 9(color) 695 + Branch 684 + 684: Label + 696: 22(ptr) AccessChain 9(color) 21 + 697: 6(float) Load 696 + 699: 6(float) Load 698(d17) + 700: 18(bool) FOrdLessThan 697 699 + BranchConditional 700 681 683 + 683: Label + Branch 701 + 701: Label + LoopMerge 703 704 None + Branch 705 + 705: Label + 706: 22(ptr) AccessChain 9(color) 111 + 707: 6(float) Load 706 + 708: 6(float) Load 649(d16) + 709: 18(bool) FOrdLessThan 707 708 + BranchConditional 709 702 703 + 702: Label + 710: 22(ptr) AccessChain 9(color) 75 + 711: 6(float) Load 710 + 712: 6(float) Load 649(d16) + 713: 18(bool) FOrdLessThan 711 712 + SelectionMerge 715 None + BranchConditional 713 714 717 + 714: Label + Kill + 717: Label + 718: 7(fvec4) Load 9(color) + 719: 7(fvec4) CompositeConstruct 96 96 96 96 + 720: 7(fvec4) FAdd 718 719 + Store 9(color) 720 + Branch 715 + 715: Label + Branch 704 + 704: Label + Branch 701 + 703: Label + 721: 7(fvec4) Load 9(color) + 722: 7(fvec4) CompositeConstruct 96 96 96 96 + 723: 7(fvec4) FAdd 721 722 + Store 9(color) 723 + 724: 7(fvec4) Load 9(color) + Store 615(gl_FragColor) 724 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.loopsArtificial.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.loopsArtificial.frag.out new file mode 100755 index 0000000..707a78d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.loopsArtificial.frag.out @@ -0,0 +1,239 @@ +spv.loopsArtificial.frag +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 158 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 11 17 27 80 140 142 143 144 145 146 147 148 149 150 151 152 153 154 157 + ExecutionMode 4 OriginUpperLeft + Source GLSL 140 + Name 4 "main" + Name 9 "color" + Name 11 "BaseColor" + Name 17 "bigColor4" + Name 27 "d4" + Name 80 "d13" + Name 140 "gl_FragColor" + Name 142 "bigColor" + Name 143 "bigColor1_1" + Name 144 "bigColor1_2" + Name 145 "bigColor1_3" + Name 146 "bigColor2" + Name 147 "bigColor3" + Name 148 "bigColor5" + Name 149 "bigColor6" + Name 150 "bigColor7" + Name 151 "bigColor8" + Name 152 "d" + Name 153 "d2" + Name 154 "d3" + Name 157 "Count" + Decorate 157(Count) Flat + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 10: TypePointer Input 7(fvec4) + 11(BaseColor): 10(ptr) Variable Input + 17(bigColor4): 10(ptr) Variable Input + 21: TypeInt 32 0 + 22: 21(int) Constant 0 + 23: TypePointer Function 6(float) + 26: TypePointer Input 6(float) + 27(d4): 26(ptr) Variable Input + 29: TypeBool + 33: 6(float) Constant 1073741824 + 34: 21(int) Constant 2 + 47: 6(float) Constant 1065353216 + 50: 21(int) Constant 1 + 77: 21(int) Constant 3 + 80(d13): 26(ptr) Variable Input + 139: TypePointer Output 7(fvec4) +140(gl_FragColor): 139(ptr) Variable Output + 142(bigColor): 10(ptr) Variable Input +143(bigColor1_1): 10(ptr) Variable Input +144(bigColor1_2): 10(ptr) Variable Input +145(bigColor1_3): 10(ptr) Variable Input + 146(bigColor2): 10(ptr) Variable Input + 147(bigColor3): 10(ptr) Variable Input + 148(bigColor5): 10(ptr) Variable Input + 149(bigColor6): 10(ptr) Variable Input + 150(bigColor7): 10(ptr) Variable Input + 151(bigColor8): 10(ptr) Variable Input + 152(d): 26(ptr) Variable Input + 153(d2): 26(ptr) Variable Input + 154(d3): 26(ptr) Variable Input + 155: TypeInt 32 1 + 156: TypePointer Input 155(int) + 157(Count): 156(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 9(color): 8(ptr) Variable Function + 12: 7(fvec4) Load 11(BaseColor) + Store 9(color) 12 + Branch 13 + 13: Label + LoopMerge 15 16 None + Branch 14 + 14: Label + 18: 7(fvec4) Load 17(bigColor4) + 19: 7(fvec4) Load 9(color) + 20: 7(fvec4) FAdd 19 18 + Store 9(color) 20 + 24: 23(ptr) AccessChain 9(color) 22 + 25: 6(float) Load 24 + 28: 6(float) Load 27(d4) + 30: 29(bool) FOrdLessThan 25 28 + SelectionMerge 32 None + BranchConditional 30 31 32 + 31: Label + 35: 23(ptr) AccessChain 9(color) 34 + 36: 6(float) Load 35 + 37: 6(float) FAdd 36 33 + 38: 23(ptr) AccessChain 9(color) 34 + Store 38 37 + 39: 23(ptr) AccessChain 9(color) 34 + 40: 6(float) Load 39 + 41: 6(float) Load 27(d4) + 42: 29(bool) FOrdLessThan 40 41 + SelectionMerge 44 None + BranchConditional 42 43 44 + 43: Label + 45: 23(ptr) AccessChain 9(color) 22 + 46: 6(float) Load 45 + 48: 6(float) FAdd 46 47 + Store 45 48 + Branch 16 + 44: Label + Branch 32 + 32: Label + 51: 23(ptr) AccessChain 9(color) 50 + 52: 6(float) Load 51 + 53: 6(float) Load 27(d4) + 54: 29(bool) FOrdLessThan 52 53 + SelectionMerge 56 None + BranchConditional 54 55 62 + 55: Label + 57: 6(float) Load 27(d4) + 58: 23(ptr) AccessChain 9(color) 50 + 59: 6(float) Load 58 + 60: 6(float) FAdd 59 57 + 61: 23(ptr) AccessChain 9(color) 50 + Store 61 60 + Branch 56 + 62: Label + 63: 6(float) Load 27(d4) + 64: 23(ptr) AccessChain 9(color) 22 + 65: 6(float) Load 64 + 66: 6(float) FAdd 65 63 + 67: 23(ptr) AccessChain 9(color) 22 + Store 67 66 + Branch 56 + 56: Label + Branch 16 + 16: Label + 68: 23(ptr) AccessChain 9(color) 34 + 69: 6(float) Load 68 + 70: 6(float) Load 27(d4) + 71: 29(bool) FOrdLessThan 69 70 + BranchConditional 71 13 15 + 15: Label + Branch 72 + 72: Label + LoopMerge 74 75 None + Branch 76 + 76: Label + 78: 23(ptr) AccessChain 9(color) 77 + 79: 6(float) Load 78 + 81: 6(float) Load 80(d13) + 82: 29(bool) FOrdLessThan 79 81 + BranchConditional 82 73 74 + 73: Label + 83: 23(ptr) AccessChain 9(color) 34 + 84: 6(float) Load 83 + 85: 6(float) Load 80(d13) + 86: 29(bool) FOrdLessThan 84 85 + SelectionMerge 88 None + BranchConditional 86 87 92 + 87: Label + 89: 7(fvec4) Load 9(color) + 90: 7(fvec4) CompositeConstruct 47 47 47 47 + 91: 7(fvec4) FAdd 89 90 + Store 9(color) 91 + Branch 88 + 92: Label + 93: 7(fvec4) Load 9(color) + 94: 7(fvec4) CompositeConstruct 47 47 47 47 + 95: 7(fvec4) FSub 93 94 + Store 9(color) 95 + Branch 88 + 88: Label + 96: 7(fvec4) Load 17(bigColor4) + 97: 7(fvec4) Load 9(color) + 98: 7(fvec4) FAdd 97 96 + Store 9(color) 98 + 99: 23(ptr) AccessChain 9(color) 22 + 100: 6(float) Load 99 + 101: 6(float) Load 27(d4) + 102: 29(bool) FOrdLessThan 100 101 + SelectionMerge 104 None + BranchConditional 102 103 104 + 103: Label + 105: 23(ptr) AccessChain 9(color) 34 + 106: 6(float) Load 105 + 107: 6(float) FAdd 106 33 + 108: 23(ptr) AccessChain 9(color) 34 + Store 108 107 + 109: 23(ptr) AccessChain 9(color) 34 + 110: 6(float) Load 109 + 111: 6(float) Load 27(d4) + 112: 29(bool) FOrdLessThan 110 111 + SelectionMerge 114 None + BranchConditional 112 113 114 + 113: Label + 115: 23(ptr) AccessChain 9(color) 22 + 116: 6(float) Load 115 + 117: 6(float) FAdd 116 47 + Store 115 117 + Branch 75 + 114: Label + Branch 104 + 104: Label + 119: 23(ptr) AccessChain 9(color) 50 + 120: 6(float) Load 119 + 121: 6(float) Load 27(d4) + 122: 29(bool) FOrdLessThan 120 121 + SelectionMerge 124 None + BranchConditional 122 123 130 + 123: Label + 125: 6(float) Load 27(d4) + 126: 23(ptr) AccessChain 9(color) 50 + 127: 6(float) Load 126 + 128: 6(float) FAdd 127 125 + 129: 23(ptr) AccessChain 9(color) 50 + Store 129 128 + Branch 124 + 130: Label + 131: 6(float) Load 27(d4) + 132: 23(ptr) AccessChain 9(color) 22 + 133: 6(float) Load 132 + 134: 6(float) FAdd 133 131 + 135: 23(ptr) AccessChain 9(color) 22 + Store 135 134 + Branch 124 + 124: Label + Branch 75 + 75: Label + Branch 72 + 74: Label + 136: 7(fvec4) Load 9(color) + 137: 7(fvec4) CompositeConstruct 47 47 47 47 + 138: 7(fvec4) FAdd 136 137 + Store 9(color) 138 + 141: 7(fvec4) Load 9(color) + Store 140(gl_FragColor) 141 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.matFun.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.matFun.vert.out new file mode 100755 index 0000000..38d9d2c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.matFun.vert.out @@ -0,0 +1,157 @@ +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 +// Id's are bound by 103 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 76 81 + Source GLSL 400 + Name 4 "main" + Name 14 "xf(mf33;vf3;" + Name 12 "m" + Name 13 "v" + Name 21 "Mat3(mf44;" + Name 20 "m" + Name 26 "mxv(mf44;vf3;" + Name 24 "m4" + Name 25 "v" + Name 65 "param" + Name 74 "gl_PerVertex" + MemberName 74(gl_PerVertex) 0 "gl_Position" + MemberName 74(gl_PerVertex) 1 "gl_PointSize" + MemberName 74(gl_PerVertex) 2 "gl_ClipDistance" + Name 76 "" + Name 77 "bl" + MemberName 77(bl) 0 "m4" + MemberName 77(bl) 1 "m3" + Name 79 "bName" + Name 81 "v3" + Name 82 "param" + Name 86 "param" + Name 89 "param" + Name 93 "param" + MemberDecorate 74(gl_PerVertex) 0 BuiltIn Position + MemberDecorate 74(gl_PerVertex) 1 BuiltIn PointSize + MemberDecorate 74(gl_PerVertex) 2 BuiltIn ClipDistance + Decorate 74(gl_PerVertex) Block + MemberDecorate 77(bl) 0 ColMajor + MemberDecorate 77(bl) 0 Offset 0 + MemberDecorate 77(bl) 0 MatrixStride 16 + MemberDecorate 77(bl) 1 ColMajor + MemberDecorate 77(bl) 1 Offset 64 + MemberDecorate 77(bl) 1 MatrixStride 16 + Decorate 77(bl) Block + Decorate 79(bName) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 3 + 8: TypeMatrix 7(fvec3) 3 + 9: TypePointer Function 8 + 10: TypePointer Function 7(fvec3) + 11: TypeFunction 7(fvec3) 9(ptr) 10(ptr) + 16: TypeVector 6(float) 4 + 17: TypeMatrix 16(fvec4) 4 + 18: TypePointer Function 17 + 19: TypeFunction 8 18(ptr) + 23: TypeFunction 7(fvec3) 18(ptr) 10(ptr) + 33: TypeInt 32 1 + 34: 33(int) Constant 0 + 35: TypePointer Function 16(fvec4) + 39: 33(int) Constant 1 + 43: 33(int) Constant 2 + 47: 6(float) Constant 1065353216 + 48: 6(float) Constant 0 + 71: TypeInt 32 0 + 72: 71(int) Constant 1 + 73: TypeArray 6(float) 72 +74(gl_PerVertex): TypeStruct 16(fvec4) 6(float) 73 + 75: TypePointer Output 74(gl_PerVertex) + 76: 75(ptr) Variable Output + 77(bl): TypeStruct 17 8 + 78: TypePointer Uniform 77(bl) + 79(bName): 78(ptr) Variable Uniform + 80: TypePointer Input 7(fvec3) + 81(v3): 80(ptr) Variable Input + 83: TypePointer Uniform 17 + 90: TypePointer Uniform 8 + 101: TypePointer Output 16(fvec4) + 4(main): 2 Function None 3 + 5: Label + 82(param): 18(ptr) Variable Function + 86(param): 10(ptr) Variable Function + 89(param): 9(ptr) Variable Function + 93(param): 10(ptr) Variable Function + 84: 83(ptr) AccessChain 79(bName) 34 + 85: 17 Load 84 + Store 82(param) 85 + 87: 7(fvec3) Load 81(v3) + Store 86(param) 87 + 88: 7(fvec3) FunctionCall 26(mxv(mf44;vf3;) 82(param) 86(param) + 91: 90(ptr) AccessChain 79(bName) 39 + 92: 8 Load 91 + Store 89(param) 92 + 94: 7(fvec3) Load 81(v3) + Store 93(param) 94 + 95: 7(fvec3) FunctionCall 14(xf(mf33;vf3;) 89(param) 93(param) + 96: 7(fvec3) FAdd 88 95 + 97: 6(float) CompositeExtract 96 0 + 98: 6(float) CompositeExtract 96 1 + 99: 6(float) CompositeExtract 96 2 + 100: 16(fvec4) CompositeConstruct 97 98 99 47 + 102: 101(ptr) AccessChain 76 34 + Store 102 100 + Return + FunctionEnd +14(xf(mf33;vf3;): 7(fvec3) Function None 11 + 12(m): 9(ptr) FunctionParameter + 13(v): 10(ptr) FunctionParameter + 15: Label + 28: 7(fvec3) Load 13(v) + 29: 8 Load 12(m) + 30: 7(fvec3) VectorTimesMatrix 28 29 + ReturnValue 30 + FunctionEnd + 21(Mat3(mf44;): 8 Function None 19 + 20(m): 18(ptr) FunctionParameter + 22: Label + 36: 35(ptr) AccessChain 20(m) 34 + 37: 16(fvec4) Load 36 + 38: 7(fvec3) VectorShuffle 37 37 0 1 2 + 40: 35(ptr) AccessChain 20(m) 39 + 41: 16(fvec4) Load 40 + 42: 7(fvec3) VectorShuffle 41 41 0 1 2 + 44: 35(ptr) AccessChain 20(m) 43 + 45: 16(fvec4) Load 44 + 46: 7(fvec3) VectorShuffle 45 45 0 1 2 + 49: 6(float) CompositeExtract 38 0 + 50: 6(float) CompositeExtract 38 1 + 51: 6(float) CompositeExtract 38 2 + 52: 6(float) CompositeExtract 42 0 + 53: 6(float) CompositeExtract 42 1 + 54: 6(float) CompositeExtract 42 2 + 55: 6(float) CompositeExtract 46 0 + 56: 6(float) CompositeExtract 46 1 + 57: 6(float) CompositeExtract 46 2 + 58: 7(fvec3) CompositeConstruct 49 50 51 + 59: 7(fvec3) CompositeConstruct 52 53 54 + 60: 7(fvec3) CompositeConstruct 55 56 57 + 61: 8 CompositeConstruct 58 59 60 + ReturnValue 61 + FunctionEnd +26(mxv(mf44;vf3;): 7(fvec3) Function None 23 + 24(m4): 18(ptr) FunctionParameter + 25(v): 10(ptr) FunctionParameter + 27: Label + 65(param): 18(ptr) Variable Function + 64: 7(fvec3) Load 25(v) + 66: 17 Load 24(m4) + Store 65(param) 66 + 67: 8 FunctionCall 21(Mat3(mf44;) 65(param) + 68: 7(fvec3) VectorTimesMatrix 64 67 + ReturnValue 68 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.matrix.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.matrix.frag.out new file mode 100644 index 0000000..c7077b9 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.matrix.frag.out @@ -0,0 +1,336 @@ +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 +// Id's are bound by 286 + + Capability Shader + Capability Float64 + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 12 14 28 161 169 187 + ExecutionMode 4 OriginUpperLeft + Source GLSL 420 + Name 4 "main" + Name 10 "sum34" + Name 12 "m1" + Name 14 "m2" + Name 28 "f" + Name 140 "dm" + Name 159 "sum3" + Name 161 "v4" + Name 166 "sum4" + Name 169 "v3" + Name 174 "m43" + Name 179 "m4" + Name 187 "color" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypeMatrix 7(fvec4) 3 + 9: TypePointer Function 8 + 11: TypePointer Input 8 + 12(m1): 11(ptr) Variable Input + 14(m2): 11(ptr) Variable Input + 27: TypePointer Input 6(float) + 28(f): 27(ptr) Variable Input + 81: 6(float) Constant 1065353216 + 136: TypeFloat 64 + 137: TypeVector 136(float) 4 + 138: TypeMatrix 137(fvec4) 3 + 139: TypePointer Function 138 + 157: TypeVector 6(float) 3 + 158: TypePointer Function 157(fvec3) + 160: TypePointer Input 7(fvec4) + 161(v4): 160(ptr) Variable Input + 165: TypePointer Function 7(fvec4) + 168: TypePointer Input 157(fvec3) + 169(v3): 168(ptr) Variable Input + 172: TypeMatrix 157(fvec3) 4 + 173: TypePointer Function 172 + 177: TypeMatrix 7(fvec4) 4 + 178: TypePointer Function 177 + 186: TypePointer Output 7(fvec4) + 187(color): 186(ptr) Variable Output + 208: 6(float) Constant 0 + 270: TypeVector 6(float) 2 + 271: TypeMatrix 270(fvec2) 2 + 279: 6(float) Constant 1088841318 + 4(main): 2 Function None 3 + 5: Label + 10(sum34): 9(ptr) Variable Function + 140(dm): 139(ptr) Variable Function + 159(sum3): 158(ptr) Variable Function + 166(sum4): 165(ptr) Variable Function + 174(m43): 173(ptr) Variable Function + 179(m4): 178(ptr) Variable Function + 13: 8 Load 12(m1) + 15: 8 Load 14(m2) + 16: 7(fvec4) CompositeExtract 13 0 + 17: 7(fvec4) CompositeExtract 15 0 + 18: 7(fvec4) FSub 16 17 + 19: 7(fvec4) CompositeExtract 13 1 + 20: 7(fvec4) CompositeExtract 15 1 + 21: 7(fvec4) FSub 19 20 + 22: 7(fvec4) CompositeExtract 13 2 + 23: 7(fvec4) CompositeExtract 15 2 + 24: 7(fvec4) FSub 22 23 + 25: 8 CompositeConstruct 18 21 24 + Store 10(sum34) 25 + 26: 8 Load 12(m1) + 29: 6(float) Load 28(f) + 30: 8 MatrixTimesScalar 26 29 + 31: 8 Load 10(sum34) + 32: 7(fvec4) CompositeExtract 31 0 + 33: 7(fvec4) CompositeExtract 30 0 + 34: 7(fvec4) FAdd 32 33 + 35: 7(fvec4) CompositeExtract 31 1 + 36: 7(fvec4) CompositeExtract 30 1 + 37: 7(fvec4) FAdd 35 36 + 38: 7(fvec4) CompositeExtract 31 2 + 39: 7(fvec4) CompositeExtract 30 2 + 40: 7(fvec4) FAdd 38 39 + 41: 8 CompositeConstruct 34 37 40 + Store 10(sum34) 41 + 42: 6(float) Load 28(f) + 43: 8 Load 12(m1) + 44: 8 MatrixTimesScalar 43 42 + 45: 8 Load 10(sum34) + 46: 7(fvec4) CompositeExtract 45 0 + 47: 7(fvec4) CompositeExtract 44 0 + 48: 7(fvec4) FAdd 46 47 + 49: 7(fvec4) CompositeExtract 45 1 + 50: 7(fvec4) CompositeExtract 44 1 + 51: 7(fvec4) FAdd 49 50 + 52: 7(fvec4) CompositeExtract 45 2 + 53: 7(fvec4) CompositeExtract 44 2 + 54: 7(fvec4) FAdd 52 53 + 55: 8 CompositeConstruct 48 51 54 + Store 10(sum34) 55 + 56: 8 Load 12(m1) + 57: 8 Load 14(m2) + 58: 7(fvec4) CompositeExtract 56 0 + 59: 7(fvec4) CompositeExtract 57 0 + 60: 7(fvec4) FMul 58 59 + 61: 7(fvec4) CompositeExtract 56 1 + 62: 7(fvec4) CompositeExtract 57 1 + 63: 7(fvec4) FMul 61 62 + 64: 7(fvec4) CompositeExtract 56 2 + 65: 7(fvec4) CompositeExtract 57 2 + 66: 7(fvec4) FMul 64 65 + 67: 8 CompositeConstruct 60 63 66 + 68: 8 Load 10(sum34) + 69: 7(fvec4) CompositeExtract 68 0 + 70: 7(fvec4) CompositeExtract 67 0 + 71: 7(fvec4) FDiv 69 70 + 72: 7(fvec4) CompositeExtract 68 1 + 73: 7(fvec4) CompositeExtract 67 1 + 74: 7(fvec4) FDiv 72 73 + 75: 7(fvec4) CompositeExtract 68 2 + 76: 7(fvec4) CompositeExtract 67 2 + 77: 7(fvec4) FDiv 75 76 + 78: 8 CompositeConstruct 71 74 77 + Store 10(sum34) 78 + 79: 8 Load 12(m1) + 80: 6(float) Load 28(f) + 82: 6(float) FDiv 81 80 + 83: 8 MatrixTimesScalar 79 82 + 84: 8 Load 10(sum34) + 85: 7(fvec4) CompositeExtract 84 0 + 86: 7(fvec4) CompositeExtract 83 0 + 87: 7(fvec4) FAdd 85 86 + 88: 7(fvec4) CompositeExtract 84 1 + 89: 7(fvec4) CompositeExtract 83 1 + 90: 7(fvec4) FAdd 88 89 + 91: 7(fvec4) CompositeExtract 84 2 + 92: 7(fvec4) CompositeExtract 83 2 + 93: 7(fvec4) FAdd 91 92 + 94: 8 CompositeConstruct 87 90 93 + Store 10(sum34) 94 + 95: 6(float) Load 28(f) + 96: 8 Load 12(m1) + 97: 7(fvec4) CompositeConstruct 95 95 95 95 + 98: 7(fvec4) CompositeExtract 96 0 + 99: 7(fvec4) FDiv 97 98 + 100: 7(fvec4) CompositeExtract 96 1 + 101: 7(fvec4) FDiv 97 100 + 102: 7(fvec4) CompositeExtract 96 2 + 103: 7(fvec4) FDiv 97 102 + 104: 8 CompositeConstruct 99 101 103 + 105: 8 Load 10(sum34) + 106: 7(fvec4) CompositeExtract 105 0 + 107: 7(fvec4) CompositeExtract 104 0 + 108: 7(fvec4) FAdd 106 107 + 109: 7(fvec4) CompositeExtract 105 1 + 110: 7(fvec4) CompositeExtract 104 1 + 111: 7(fvec4) FAdd 109 110 + 112: 7(fvec4) CompositeExtract 105 2 + 113: 7(fvec4) CompositeExtract 104 2 + 114: 7(fvec4) FAdd 112 113 + 115: 8 CompositeConstruct 108 111 114 + Store 10(sum34) 115 + 116: 6(float) Load 28(f) + 117: 8 Load 10(sum34) + 118: 7(fvec4) CompositeConstruct 116 116 116 116 + 119: 7(fvec4) CompositeExtract 117 0 + 120: 7(fvec4) FAdd 119 118 + 121: 7(fvec4) CompositeExtract 117 1 + 122: 7(fvec4) FAdd 121 118 + 123: 7(fvec4) CompositeExtract 117 2 + 124: 7(fvec4) FAdd 123 118 + 125: 8 CompositeConstruct 120 122 124 + Store 10(sum34) 125 + 126: 6(float) Load 28(f) + 127: 8 Load 10(sum34) + 128: 7(fvec4) CompositeConstruct 126 126 126 126 + 129: 7(fvec4) CompositeExtract 127 0 + 130: 7(fvec4) FSub 129 128 + 131: 7(fvec4) CompositeExtract 127 1 + 132: 7(fvec4) FSub 131 128 + 133: 7(fvec4) CompositeExtract 127 2 + 134: 7(fvec4) FSub 133 128 + 135: 8 CompositeConstruct 130 132 134 + Store 10(sum34) 135 + 141: 8 Load 10(sum34) + 142: 7(fvec4) CompositeExtract 141 0 + 143: 137(fvec4) FConvert 142 + 144: 7(fvec4) CompositeExtract 141 1 + 145: 137(fvec4) FConvert 144 + 146: 7(fvec4) CompositeExtract 141 2 + 147: 137(fvec4) FConvert 146 + 148: 138 CompositeConstruct 143 145 147 + Store 140(dm) 148 + 149: 138 Load 140(dm) + 150: 137(fvec4) CompositeExtract 149 0 + 151: 7(fvec4) FConvert 150 + 152: 137(fvec4) CompositeExtract 149 1 + 153: 7(fvec4) FConvert 152 + 154: 137(fvec4) CompositeExtract 149 2 + 155: 7(fvec4) FConvert 154 + 156: 8 CompositeConstruct 151 153 155 + Store 10(sum34) 156 + 162: 7(fvec4) Load 161(v4) + 163: 8 Load 14(m2) + 164: 157(fvec3) VectorTimesMatrix 162 163 + Store 159(sum3) 164 + 167: 8 Load 14(m2) + 170: 157(fvec3) Load 169(v3) + 171: 7(fvec4) MatrixTimesVector 167 170 + Store 166(sum4) 171 + 175: 8 Load 10(sum34) + 176: 172 Transpose 175 + Store 174(m43) 176 + 180: 8 Load 12(m1) + 181: 172 Load 174(m43) + 182: 177 MatrixTimesMatrix 180 181 + Store 179(m4) 182 + 183: 7(fvec4) Load 161(v4) + 184: 177 Load 179(m4) + 185: 7(fvec4) VectorTimesMatrix 183 184 + Store 166(sum4) 185 + 188: 7(fvec4) Load 166(sum4) + Store 187(color) 188 + 189: 8 Load 10(sum34) + 190: 7(fvec4) CompositeConstruct 81 81 81 81 + 191: 7(fvec4) CompositeExtract 189 0 + 192: 7(fvec4) FAdd 191 190 + 193: 7(fvec4) CompositeExtract 189 1 + 194: 7(fvec4) FAdd 193 190 + 195: 7(fvec4) CompositeExtract 189 2 + 196: 7(fvec4) FAdd 195 190 + 197: 8 CompositeConstruct 192 194 196 + Store 10(sum34) 197 + 198: 8 Load 10(sum34) + 199: 7(fvec4) CompositeConstruct 81 81 81 81 + 200: 7(fvec4) CompositeExtract 198 0 + 201: 7(fvec4) FSub 200 199 + 202: 7(fvec4) CompositeExtract 198 1 + 203: 7(fvec4) FSub 202 199 + 204: 7(fvec4) CompositeExtract 198 2 + 205: 7(fvec4) FSub 204 199 + 206: 8 CompositeConstruct 201 203 205 + Store 10(sum34) 206 + 207: 6(float) Load 28(f) + 209: 7(fvec4) CompositeConstruct 207 208 208 208 + 210: 7(fvec4) CompositeConstruct 208 207 208 208 + 211: 7(fvec4) CompositeConstruct 208 208 207 208 + 212: 8 CompositeConstruct 209 210 211 + 213: 8 Load 10(sum34) + 214: 7(fvec4) CompositeExtract 213 0 + 215: 7(fvec4) CompositeExtract 212 0 + 216: 7(fvec4) FAdd 214 215 + 217: 7(fvec4) CompositeExtract 213 1 + 218: 7(fvec4) CompositeExtract 212 1 + 219: 7(fvec4) FAdd 217 218 + 220: 7(fvec4) CompositeExtract 213 2 + 221: 7(fvec4) CompositeExtract 212 2 + 222: 7(fvec4) FAdd 220 221 + 223: 8 CompositeConstruct 216 219 222 + Store 10(sum34) 223 + 224: 157(fvec3) Load 169(v3) + 225: 6(float) Load 28(f) + 226: 157(fvec3) Load 169(v3) + 227: 6(float) Load 28(f) + 228: 157(fvec3) Load 169(v3) + 229: 6(float) Load 28(f) + 230: 6(float) CompositeExtract 224 0 + 231: 6(float) CompositeExtract 224 1 + 232: 6(float) CompositeExtract 224 2 + 233: 6(float) CompositeExtract 226 0 + 234: 6(float) CompositeExtract 226 1 + 235: 6(float) CompositeExtract 226 2 + 236: 6(float) CompositeExtract 228 0 + 237: 6(float) CompositeExtract 228 1 + 238: 6(float) CompositeExtract 228 2 + 239: 7(fvec4) CompositeConstruct 230 231 232 225 + 240: 7(fvec4) CompositeConstruct 233 234 235 227 + 241: 7(fvec4) CompositeConstruct 236 237 238 229 + 242: 8 CompositeConstruct 239 240 241 + 243: 8 Load 10(sum34) + 244: 7(fvec4) CompositeExtract 243 0 + 245: 7(fvec4) CompositeExtract 242 0 + 246: 7(fvec4) FAdd 244 245 + 247: 7(fvec4) CompositeExtract 243 1 + 248: 7(fvec4) CompositeExtract 242 1 + 249: 7(fvec4) FAdd 247 248 + 250: 7(fvec4) CompositeExtract 243 2 + 251: 7(fvec4) CompositeExtract 242 2 + 252: 7(fvec4) FAdd 250 251 + 253: 8 CompositeConstruct 246 249 252 + Store 10(sum34) 253 + 254: 157(fvec3) Load 159(sum3) + 255: 172 Load 174(m43) + 256: 7(fvec4) VectorTimesMatrix 254 255 + 257: 7(fvec4) Load 166(sum4) + 258: 7(fvec4) FAdd 256 257 + 259: 7(fvec4) Load 187(color) + 260: 7(fvec4) FAdd 259 258 + Store 187(color) 260 + 261: 172 Load 174(m43) + 262: 6(float) CompositeExtract 261 0 0 + 263: 6(float) CompositeExtract 261 0 1 + 264: 6(float) CompositeExtract 261 0 2 + 265: 6(float) CompositeExtract 261 1 0 + 266: 7(fvec4) CompositeConstruct 262 263 264 265 + 267: 7(fvec4) Load 187(color) + 268: 7(fvec4) FAdd 267 266 + Store 187(color) 268 + 269: 6(float) Load 28(f) + 272: 270(fvec2) CompositeConstruct 269 208 + 273: 270(fvec2) CompositeConstruct 208 269 + 274: 271 CompositeConstruct 272 273 + 275: 6(float) CompositeExtract 274 0 0 + 276: 6(float) CompositeExtract 274 0 1 + 277: 6(float) CompositeExtract 274 1 0 + 278: 157(fvec3) CompositeConstruct 275 276 277 + 280: 6(float) CompositeExtract 278 0 + 281: 6(float) CompositeExtract 278 1 + 282: 6(float) CompositeExtract 278 2 + 283: 7(fvec4) CompositeConstruct 280 281 282 279 + 284: 7(fvec4) Load 187(color) + 285: 7(fvec4) FAdd 284 283 + Store 187(color) 285 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.matrix2.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.matrix2.frag.out new file mode 100644 index 0000000..78facff --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.matrix2.frag.out @@ -0,0 +1,269 @@ +spv.matrix2.frag +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 221 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 12 16 37 38 65 87 147 158 181 218 219 220 + ExecutionMode 4 OriginUpperLeft + Source GLSL 150 + Name 4 "main" + Name 10 "m34" + Name 12 "v" + Name 16 "u" + Name 37 "FragColor" + Name 38 "Color" + Name 63 "m44" + Name 65 "un34" + Name 87 "um43" + Name 147 "um4" + Name 156 "inv" + Name 158 "um2" + Name 179 "inv3" + Name 181 "um3" + Name 190 "inv4" + Name 218 "colorTransform" + Name 219 "m" + Name 220 "n" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypeMatrix 7(fvec4) 3 + 9: TypePointer Function 8 + 11: TypePointer Input 7(fvec4) + 12(v): 11(ptr) Variable Input + 14: TypeVector 6(float) 3 + 15: TypePointer Input 14(fvec3) + 16(u): 15(ptr) Variable Input + 19: 6(float) Constant 1082759578 + 20: 6(float) Constant 0 + 21: 7(fvec4) ConstantComposite 19 20 20 20 + 22: 7(fvec4) ConstantComposite 20 19 20 20 + 23: 7(fvec4) ConstantComposite 20 20 19 20 + 24: 8 ConstantComposite 21 22 23 + 36: TypePointer Output 7(fvec4) + 37(FragColor): 36(ptr) Variable Output + 38(Color): 15(ptr) Variable Input + 40: 6(float) Constant 1065353216 + 54: TypeInt 32 0 + 55: 54(int) Constant 0 + 56: TypePointer Input 6(float) + 61: TypeMatrix 7(fvec4) 4 + 62: TypePointer Function 61 + 64: TypePointer Input 8 + 65(un34): 64(ptr) Variable Input + 85: TypeMatrix 14(fvec3) 4 + 86: TypePointer Input 85 + 87(um43): 86(ptr) Variable Input + 146: TypePointer Input 61 + 147(um4): 146(ptr) Variable Input + 153: TypeVector 6(float) 2 + 154: TypeMatrix 153(fvec2) 2 + 155: TypePointer Function 154 + 157: TypePointer Input 154 + 158(um2): 157(ptr) Variable Input + 161: TypeInt 32 1 + 162: 161(int) Constant 0 + 163: TypePointer Function 6(float) + 166: 161(int) Constant 1 + 169: 54(int) Constant 1 + 177: TypeMatrix 14(fvec3) 3 + 178: TypePointer Function 177 + 180: TypePointer Input 177 + 181(um3): 180(ptr) Variable Input + 184: 161(int) Constant 2 + 210: 54(int) Constant 3 + 211: TypePointer Output 6(float) +218(colorTransform): 180(ptr) Variable Input + 219(m): 146(ptr) Variable Input + 220(n): 146(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 10(m34): 9(ptr) Variable Function + 63(m44): 62(ptr) Variable Function + 156(inv): 155(ptr) Variable Function + 179(inv3): 178(ptr) Variable Function + 190(inv4): 62(ptr) Variable Function + 13: 7(fvec4) Load 12(v) + 17: 14(fvec3) Load 16(u) + 18: 8 OuterProduct 13 17 + Store 10(m34) 18 + 25: 8 Load 10(m34) + 26: 7(fvec4) CompositeExtract 25 0 + 27: 7(fvec4) CompositeExtract 24 0 + 28: 7(fvec4) FAdd 26 27 + 29: 7(fvec4) CompositeExtract 25 1 + 30: 7(fvec4) CompositeExtract 24 1 + 31: 7(fvec4) FAdd 29 30 + 32: 7(fvec4) CompositeExtract 25 2 + 33: 7(fvec4) CompositeExtract 24 2 + 34: 7(fvec4) FAdd 32 33 + 35: 8 CompositeConstruct 28 31 34 + Store 10(m34) 35 + 39: 14(fvec3) Load 38(Color) + 41: 6(float) CompositeExtract 39 0 + 42: 6(float) CompositeExtract 39 1 + 43: 6(float) CompositeExtract 39 2 + 44: 7(fvec4) CompositeConstruct 41 42 43 40 + Store 37(FragColor) 44 + 45: 7(fvec4) Load 37(FragColor) + 46: 8 Load 10(m34) + 47: 14(fvec3) VectorTimesMatrix 45 46 + 48: 6(float) CompositeExtract 47 0 + 49: 6(float) CompositeExtract 47 1 + 50: 6(float) CompositeExtract 47 2 + 51: 7(fvec4) CompositeConstruct 48 49 50 40 + 52: 7(fvec4) Load 37(FragColor) + 53: 7(fvec4) FMul 52 51 + Store 37(FragColor) 53 + 57: 56(ptr) AccessChain 12(v) 55 + 58: 6(float) Load 57 + 59: 8 Load 10(m34) + 60: 8 MatrixTimesScalar 59 58 + Store 10(m34) 60 + 66: 8 Load 65(un34) + 67: 6(float) CompositeExtract 66 0 0 + 68: 6(float) CompositeExtract 66 0 1 + 69: 6(float) CompositeExtract 66 0 2 + 70: 6(float) CompositeExtract 66 0 3 + 71: 6(float) CompositeExtract 66 1 0 + 72: 6(float) CompositeExtract 66 1 1 + 73: 6(float) CompositeExtract 66 1 2 + 74: 6(float) CompositeExtract 66 1 3 + 75: 6(float) CompositeExtract 66 2 0 + 76: 6(float) CompositeExtract 66 2 1 + 77: 6(float) CompositeExtract 66 2 2 + 78: 6(float) CompositeExtract 66 2 3 + 79: 7(fvec4) CompositeConstruct 67 68 69 70 + 80: 7(fvec4) CompositeConstruct 71 72 73 74 + 81: 7(fvec4) CompositeConstruct 75 76 77 78 + 82: 7(fvec4) CompositeConstruct 20 20 20 40 + 83: 61 CompositeConstruct 79 80 81 82 + Store 63(m44) 83 + 84: 8 Load 10(m34) + 88: 85 Load 87(um43) + 89: 61 MatrixTimesMatrix 84 88 + 90: 61 Load 63(m44) + 91: 7(fvec4) CompositeExtract 90 0 + 92: 7(fvec4) CompositeExtract 89 0 + 93: 7(fvec4) FAdd 91 92 + 94: 7(fvec4) CompositeExtract 90 1 + 95: 7(fvec4) CompositeExtract 89 1 + 96: 7(fvec4) FAdd 94 95 + 97: 7(fvec4) CompositeExtract 90 2 + 98: 7(fvec4) CompositeExtract 89 2 + 99: 7(fvec4) FAdd 97 98 + 100: 7(fvec4) CompositeExtract 90 3 + 101: 7(fvec4) CompositeExtract 89 3 + 102: 7(fvec4) FAdd 100 101 + 103: 61 CompositeConstruct 93 96 99 102 + Store 63(m44) 103 + 104: 61 Load 63(m44) + 105: 7(fvec4) CompositeExtract 104 0 + 106: 7(fvec4) FNegate 105 + 107: 7(fvec4) CompositeExtract 104 1 + 108: 7(fvec4) FNegate 107 + 109: 7(fvec4) CompositeExtract 104 2 + 110: 7(fvec4) FNegate 109 + 111: 7(fvec4) CompositeExtract 104 3 + 112: 7(fvec4) FNegate 111 + 113: 61 CompositeConstruct 106 108 110 112 + 114: 7(fvec4) Load 12(v) + 115: 7(fvec4) MatrixTimesVector 113 114 + 116: 7(fvec4) Load 37(FragColor) + 117: 7(fvec4) FAdd 116 115 + Store 37(FragColor) 117 + 118: 61 Load 63(m44) + 119: 61 Load 63(m44) + 120: 7(fvec4) CompositeExtract 118 0 + 121: 7(fvec4) CompositeExtract 119 0 + 122: 7(fvec4) FMul 120 121 + 123: 7(fvec4) CompositeExtract 118 1 + 124: 7(fvec4) CompositeExtract 119 1 + 125: 7(fvec4) FMul 123 124 + 126: 7(fvec4) CompositeExtract 118 2 + 127: 7(fvec4) CompositeExtract 119 2 + 128: 7(fvec4) FMul 126 127 + 129: 7(fvec4) CompositeExtract 118 3 + 130: 7(fvec4) CompositeExtract 119 3 + 131: 7(fvec4) FMul 129 130 + 132: 61 CompositeConstruct 122 125 128 131 + 133: 7(fvec4) Load 37(FragColor) + 134: 7(fvec4) VectorTimesMatrix 133 132 + Store 37(FragColor) 134 + 135: 85 Load 87(um43) + 136: 8 Transpose 135 + Store 10(m34) 136 + 137: 7(fvec4) Load 37(FragColor) + 138: 8 Load 10(m34) + 139: 14(fvec3) VectorTimesMatrix 137 138 + 140: 6(float) CompositeExtract 139 0 + 141: 6(float) CompositeExtract 139 1 + 142: 6(float) CompositeExtract 139 2 + 143: 7(fvec4) CompositeConstruct 140 141 142 40 + 144: 7(fvec4) Load 37(FragColor) + 145: 7(fvec4) FMul 144 143 + Store 37(FragColor) 145 + 148: 61 Load 147(um4) + 149: 6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 148 + 150: 7(fvec4) CompositeConstruct 149 149 149 149 + 151: 7(fvec4) Load 37(FragColor) + 152: 7(fvec4) FMul 151 150 + Store 37(FragColor) 152 + 159: 154 Load 158(um2) + 160: 154 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 159 + Store 156(inv) 160 + 164: 163(ptr) AccessChain 156(inv) 162 55 + 165: 6(float) Load 164 + 167: 163(ptr) AccessChain 156(inv) 166 55 + 168: 6(float) Load 167 + 170: 163(ptr) AccessChain 156(inv) 162 169 + 171: 6(float) Load 170 + 172: 163(ptr) AccessChain 156(inv) 166 169 + 173: 6(float) Load 172 + 174: 7(fvec4) CompositeConstruct 165 168 171 173 + 175: 7(fvec4) Load 37(FragColor) + 176: 7(fvec4) FMul 175 174 + Store 37(FragColor) 176 + 182: 177 Load 181(um3) + 183: 177 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 182 + Store 179(inv3) 183 + 185: 163(ptr) AccessChain 179(inv3) 184 169 + 186: 6(float) Load 185 + 187: 7(fvec4) CompositeConstruct 186 186 186 186 + 188: 7(fvec4) Load 37(FragColor) + 189: 7(fvec4) FMul 188 187 + Store 37(FragColor) 189 + 191: 61 Load 147(um4) + 192: 61 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 191 + Store 190(inv4) 192 + 193: 61 Load 190(inv4) + 194: 7(fvec4) Load 37(FragColor) + 195: 7(fvec4) VectorTimesMatrix 194 193 + Store 37(FragColor) 195 + 196: 7(fvec4) Load 37(FragColor) + 197: 8 Load 65(un34) + 198: 8 Load 65(un34) + 199: 7(fvec4) CompositeExtract 197 0 + 200: 7(fvec4) CompositeExtract 198 0 + 201: 7(fvec4) FMul 199 200 + 202: 7(fvec4) CompositeExtract 197 1 + 203: 7(fvec4) CompositeExtract 198 1 + 204: 7(fvec4) FMul 202 203 + 205: 7(fvec4) CompositeExtract 197 2 + 206: 7(fvec4) CompositeExtract 198 2 + 207: 7(fvec4) FMul 205 206 + 208: 8 CompositeConstruct 201 204 207 + 209: 14(fvec3) VectorTimesMatrix 196 208 + 212: 211(ptr) AccessChain 37(FragColor) 210 + 213: 6(float) Load 212 + 214: 6(float) CompositeExtract 209 0 + 215: 6(float) CompositeExtract 209 1 + 216: 6(float) CompositeExtract 209 2 + 217: 7(fvec4) CompositeConstruct 214 215 216 213 + Store 37(FragColor) 217 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.memoryQualifier.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.memoryQualifier.frag.out new file mode 100644 index 0000000..a990e47 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.memoryQualifier.frag.out @@ -0,0 +1,177 @@ +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 +// Id's are bound by 97 + + Capability Shader + Capability SampledRect + Capability Sampled1D + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + Name 4 "main" + Name 9 "texel" + Name 12 "i1D" + Name 19 "i2D" + Name 28 "i2DRect" + Name 35 "i3D" + Name 44 "iCube" + Name 49 "Data" + MemberName 49(Data) 0 "f1" + MemberName 49(Data) 1 "f2" + Name 50 "Buffer" + MemberName 50(Buffer) 0 "f1" + MemberName 50(Buffer) 1 "f2" + MemberName 50(Buffer) 2 "f3" + MemberName 50(Buffer) 3 "f4" + MemberName 50(Buffer) 4 "i1" + MemberName 50(Buffer) 5 "data" + Name 52 "" + Decorate 12(i1D) DescriptorSet 0 + Decorate 12(i1D) Binding 0 + Decorate 12(i1D) Coherent + Decorate 19(i2D) DescriptorSet 0 + Decorate 19(i2D) Binding 1 + Decorate 19(i2D) Volatile + Decorate 28(i2DRect) DescriptorSet 0 + Decorate 28(i2DRect) Binding 2 + Decorate 28(i2DRect) Restrict + Decorate 35(i3D) DescriptorSet 0 + Decorate 35(i3D) Binding 3 + Decorate 35(i3D) NonWritable + 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 + MemberDecorate 50(Buffer) 0 Offset 0 + MemberDecorate 50(Buffer) 1 Coherent + MemberDecorate 50(Buffer) 1 Restrict + MemberDecorate 50(Buffer) 1 Offset 8 + MemberDecorate 50(Buffer) 2 Coherent + MemberDecorate 50(Buffer) 2 NonWritable + MemberDecorate 50(Buffer) 2 Offset 16 + MemberDecorate 50(Buffer) 3 Coherent + MemberDecorate 50(Buffer) 3 NonReadable + MemberDecorate 50(Buffer) 3 Offset 32 + MemberDecorate 50(Buffer) 4 Coherent + MemberDecorate 50(Buffer) 4 Offset 48 + MemberDecorate 50(Buffer) 5 Coherent + MemberDecorate 50(Buffer) 5 Offset 56 + Decorate 50(Buffer) BufferBlock + Decorate 52 DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 10: TypeImage 6(float) 1D nonsampled format:R32f + 11: TypePointer UniformConstant 10 + 12(i1D): 11(ptr) Variable UniformConstant + 14: TypeInt 32 1 + 15: 14(int) Constant 1 + 17: TypeImage 6(float) 2D nonsampled format:R32f + 18: TypePointer UniformConstant 17 + 19(i2D): 18(ptr) Variable UniformConstant + 21: TypeVector 14(int) 2 + 22: 21(ivec2) ConstantComposite 15 15 + 26: TypeImage 6(float) Rect nonsampled format:R32f + 27: TypePointer UniformConstant 26 + 28(i2DRect): 27(ptr) Variable UniformConstant + 33: TypeImage 6(float) 3D nonsampled format:R32f + 34: TypePointer UniformConstant 33 + 35(i3D): 34(ptr) Variable UniformConstant + 37: TypeVector 14(int) 3 + 38: 37(ivec3) ConstantComposite 15 15 15 + 42: TypeImage 6(float) Cube nonsampled format:R32f + 43: TypePointer UniformConstant 42 + 44(iCube): 43(ptr) Variable UniformConstant + 47: TypeVector 6(float) 2 + 48: TypeVector 6(float) 3 + 49(Data): TypeStruct 6(float) 47(fvec2) + 50(Buffer): TypeStruct 6(float) 47(fvec2) 48(fvec3) 7(fvec4) 14(int) 49(Data) + 51: TypePointer Uniform 50(Buffer) + 52: 51(ptr) Variable Uniform + 53: 14(int) Constant 4 + 54: TypePointer Uniform 14(int) + 57: 14(int) Constant 0 + 58: TypePointer Uniform 6(float) + 61: TypePointer Function 6(float) + 63: TypePointer Uniform 47(fvec2) + 71: 14(int) Constant 2 + 72: TypePointer Uniform 48(fvec3) + 80: 14(int) Constant 5 + 83: TypeInt 32 0 + 84: 83(int) Constant 1 + 88: 83(int) Constant 3 + 93: 14(int) Constant 3 + 95: TypePointer Uniform 7(fvec4) + 4(main): 2 Function None 3 + 5: Label + 9(texel): 8(ptr) Variable Function + 13: 10 Load 12(i1D) + 16: 7(fvec4) ImageRead 13 15 + Store 9(texel) 16 + 20: 17 Load 19(i2D) + 23: 7(fvec4) ImageRead 20 22 + 24: 7(fvec4) Load 9(texel) + 25: 7(fvec4) FAdd 24 23 + Store 9(texel) 25 + 29: 26 Load 28(i2DRect) + 30: 7(fvec4) ImageRead 29 22 + 31: 7(fvec4) Load 9(texel) + 32: 7(fvec4) FAdd 31 30 + Store 9(texel) 32 + 36: 33 Load 35(i3D) + 39: 7(fvec4) ImageRead 36 38 + 40: 7(fvec4) Load 9(texel) + 41: 7(fvec4) FAdd 40 39 + Store 9(texel) 41 + 45: 42 Load 44(iCube) + 46: 7(fvec4) Load 9(texel) + ImageWrite 45 38 46 + 55: 54(ptr) AccessChain 52 53 + 56: 14(int) Load 55 + 59: 58(ptr) AccessChain 52 57 + 60: 6(float) Load 59 + 62: 61(ptr) AccessChain 9(texel) 56 + Store 62 60 + 64: 63(ptr) AccessChain 52 15 + 65: 47(fvec2) Load 64 + 66: 7(fvec4) Load 9(texel) + 67: 47(fvec2) VectorShuffle 66 66 0 1 + 68: 47(fvec2) FAdd 67 65 + 69: 7(fvec4) Load 9(texel) + 70: 7(fvec4) VectorShuffle 69 68 4 5 2 3 + Store 9(texel) 70 + 73: 72(ptr) AccessChain 52 71 + 74: 48(fvec3) Load 73 + 75: 7(fvec4) Load 9(texel) + 76: 48(fvec3) VectorShuffle 75 75 0 1 2 + 77: 48(fvec3) FSub 76 74 + 78: 7(fvec4) Load 9(texel) + 79: 7(fvec4) VectorShuffle 78 77 4 5 6 3 + Store 9(texel) 79 + 81: 58(ptr) AccessChain 52 80 57 + 82: 6(float) Load 81 + 85: 58(ptr) AccessChain 52 80 15 84 + 86: 6(float) Load 85 + 87: 6(float) FAdd 82 86 + 89: 61(ptr) AccessChain 9(texel) 88 + 90: 6(float) Load 89 + 91: 6(float) FAdd 90 87 + 92: 61(ptr) AccessChain 9(texel) 88 + Store 92 91 + 94: 7(fvec4) Load 9(texel) + 96: 95(ptr) AccessChain 52 93 + Store 96 94 + Return + FunctionEnd 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 new file mode 100644 index 0000000..58bbb06 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.merge-unreachable.frag.out @@ -0,0 +1,43 @@ +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 +// Id's are bound by 25 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 9 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + Name 4 "main" + Name 9 "v" + Decorate 9(v) Location 1 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Input 7(fvec4) + 9(v): 8(ptr) Variable Input + 11: 6(float) Constant 1036831949 + 12: 6(float) Constant 1045220557 + 13: 6(float) Constant 1050253722 + 14: 6(float) Constant 1053609165 + 15: 7(fvec4) ConstantComposite 11 12 13 14 + 16: TypeBool + 17: TypeVector 16(bool) 4 + 4(main): 2 Function None 3 + 5: Label + 10: 7(fvec4) Load 9(v) + 18: 17(bvec4) FOrdEqual 10 15 + 19: 16(bool) All 18 + SelectionMerge 21 None + BranchConditional 19 20 23 + 20: Label + Kill + 23: Label + Return + 21: Label + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiStruct.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiStruct.comp.out new file mode 100755 index 0000000..f8c0eea --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiStruct.comp.out @@ -0,0 +1,264 @@ +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 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "main" + ExecutionMode 4 LocalSize 1 1 1 + Source GLSL 450 + Name 4 "main" + Name 12 "MyStruct" + MemberName 12(MyStruct) 0 "foo" + MemberName 12(MyStruct) 1 "sb" + Name 14 "t" + Name 16 "MyStruct" + MemberName 16(MyStruct) 0 "foo" + MemberName 16(MyStruct) 1 "sb" + 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" + Decorate 15 ArrayStride 8 + MemberDecorate 16(MyStruct) 0 Offset 0 + MemberDecorate 16(MyStruct) 1 Offset 16 + MemberDecorate 17(SSBO0) 0 Offset 0 + 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 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 2 + 8: TypeInt 32 0 + 9: 8(int) Constant 2 + 10: TypeArray 7(fvec2) 9 + 11: TypeBool + 12(MyStruct): TypeStruct 10 11(bool) + 13: TypePointer Function 12(MyStruct) + 15: TypeArray 7(fvec2) 9 + 16(MyStruct): TypeStruct 15 8(int) + 17(SSBO0): TypeStruct 16(MyStruct) + 18: TypePointer Uniform 17(SSBO0) + 19(inBuf): 18(ptr) Variable Uniform + 20: TypeInt 32 1 + 21: 20(int) Constant 0 + 22: TypePointer Uniform 16(MyStruct) + 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 + 4(main): 2 Function None 3 + 5: Label + 14(t): 13(ptr) Variable Function + 86(n): 85(ptr) Variable Function + 23: 22(ptr) AccessChain 19(inBuf) 21 + 24:16(MyStruct) Load 23 + 25: 15 CompositeExtract 24 0 + 27: 26(ptr) AccessChain 14(t) 21 + 28: 7(fvec2) CompositeExtract 25 0 + 30: 29(ptr) AccessChain 27 21 + Store 30 28 + 31: 7(fvec2) CompositeExtract 25 1 + 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 + 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 + Store 108 107 + 109: 8(int) CompositeExtract 101 1 + 110: 35(ptr) AccessChain 102 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 + 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 new file mode 100755 index 0000000..b9b0cb2 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiStructFuncall.frag.out @@ -0,0 +1,116 @@ +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 +// Id's are bound by 63 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + Name 4 "main" + Name 9 "S" + MemberName 9(S) 0 "m" + Name 12 "fooConst(struct-S-mf441;" + Name 11 "s" + Name 17 "foo(struct-S-mf441;" + Name 16 "s" + Name 20 "fooOut(struct-S-mf441;" + Name 19 "s" + Name 22 "S" + MemberName 22(S) 0 "m" + Name 23 "blockName" + MemberName 23(blockName) 0 "s1" + Name 25 "" + Name 33 "s2" + Name 36 "S" + MemberName 36(S) 0 "m" + Name 38 "param" + Name 45 "param" + Name 48 "param" + Name 59 "param" + MemberDecorate 22(S) 0 ColMajor + MemberDecorate 22(S) 0 Offset 0 + MemberDecorate 22(S) 0 MatrixStride 16 + MemberDecorate 23(blockName) 0 Offset 0 + Decorate 23(blockName) BufferBlock + Decorate 25 DescriptorSet 0 + MemberDecorate 36(S) 0 ColMajor + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypeMatrix 7(fvec4) 4 + 9(S): TypeStruct 8 + 10: TypeFunction 2 9(S) + 14: TypePointer Function 9(S) + 15: TypeFunction 2 14(ptr) + 22(S): TypeStruct 8 + 23(blockName): TypeStruct 22(S) + 24: TypePointer Uniform 23(blockName) + 25: 24(ptr) Variable Uniform + 26: TypeInt 32 1 + 27: 26(int) Constant 0 + 28: TypePointer Uniform 22(S) + 32: TypePointer Private 9(S) + 33(s2): 32(ptr) Variable Private + 36(S): TypeStruct 8 + 37: TypePointer Function 36(S) + 42: TypePointer Function 8 + 57: TypePointer Uniform 8 + 4(main): 2 Function None 3 + 5: Label + 38(param): 37(ptr) Variable Function + 45(param): 14(ptr) Variable Function + 48(param): 37(ptr) Variable Function + 59(param): 14(ptr) Variable Function + 29: 28(ptr) AccessChain 25 27 + 30: 22(S) Load 29 + 31: 2 FunctionCall 12(fooConst(struct-S-mf441;) 30 + 34: 9(S) Load 33(s2) + 35: 2 FunctionCall 12(fooConst(struct-S-mf441;) 34 + 39: 28(ptr) AccessChain 25 27 + 40: 22(S) Load 39 + 41: 8 CompositeExtract 40 0 + 43: 42(ptr) AccessChain 38(param) 27 + Store 43 41 + 44: 2 FunctionCall 17(foo(struct-S-mf441;) 38(param) + 46: 9(S) Load 33(s2) + Store 45(param) 46 + 47: 2 FunctionCall 17(foo(struct-S-mf441;) 45(param) + 49: 28(ptr) AccessChain 25 27 + 50: 22(S) Load 49 + 51: 8 CompositeExtract 50 0 + 52: 42(ptr) AccessChain 48(param) 27 + Store 52 51 + 53: 2 FunctionCall 20(fooOut(struct-S-mf441;) 48(param) + 54: 36(S) Load 48(param) + 55: 28(ptr) AccessChain 25 27 + 56: 8 CompositeExtract 54 0 + 58: 57(ptr) AccessChain 55 27 + Store 58 56 + 60: 9(S) Load 33(s2) + Store 59(param) 60 + 61: 2 FunctionCall 20(fooOut(struct-S-mf441;) 59(param) + 62: 9(S) Load 59(param) + Store 33(s2) 62 + Return + FunctionEnd +12(fooConst(struct-S-mf441;): 2 Function None 10 + 11(s): 9(S) FunctionParameter + 13: Label + Return + FunctionEnd +17(foo(struct-S-mf441;): 2 Function None 15 + 16(s): 14(ptr) FunctionParameter + 18: Label + Return + FunctionEnd +20(fooOut(struct-S-mf441;): 2 Function None 15 + 19(s): 14(ptr) FunctionParameter + 21: Label + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiView.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiView.frag.out new file mode 100755 index 0000000..de2a549 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiView.frag.out @@ -0,0 +1,39 @@ +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 +// Id's are bound by 17 + + Capability Shader + Capability MultiView + Extension "SPV_KHR_multiview" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 9 12 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + SourceExtension "GL_EXT_multiview" + Name 4 "main" + Name 9 "color" + Name 12 "gl_ViewIndex" + Decorate 12(gl_ViewIndex) Flat + Decorate 12(gl_ViewIndex) BuiltIn ViewIndex + 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: TypeInt 32 1 + 11: TypePointer Input 10(int) +12(gl_ViewIndex): 11(ptr) Variable Input + 15: 6(float) Constant 0 + 4(main): 2 Function None 3 + 5: Label + 13: 10(int) Load 12(gl_ViewIndex) + 14: 6(float) ConvertSToF 13 + 16: 7(fvec4) CompositeConstruct 14 15 15 15 + Store 9(color) 16 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out new file mode 100644 index 0000000..f93aa01 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out @@ -0,0 +1,77 @@ +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 +// Id's are bound by 37 + + Capability Tessellation + Capability PerViewAttributesNV + Extension "SPV_NVX_multiview_per_view_attributes" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint TessellationControl 4 "main" 17 19 31 + ExecutionMode 4 OutputVertices 4 + Source GLSL 450 + SourceExtension "GL_NVX_multiview_per_view_attributes" + Name 4 "main" + Name 13 "gl_PerVertex" + MemberName 13(gl_PerVertex) 0 "gl_PositionPerViewNV" + MemberName 13(gl_PerVertex) 1 "gl_ViewportMaskPerViewNV" + Name 17 "gl_out" + Name 19 "gl_InvocationID" + 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) 5 "gl_PositionPerViewNV" + Name 31 "gl_in" + MemberDecorate 13(gl_PerVertex) 0 BuiltIn PositionPerViewNV + MemberDecorate 13(gl_PerVertex) 1 BuiltIn ViewportMaskPerViewNV + Decorate 13(gl_PerVertex) Block + Decorate 19(gl_InvocationID) BuiltIn InvocationId + 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 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypeInt 32 0 + 9: 8(int) Constant 1 + 10: TypeArray 7(fvec4) 9 + 11: TypeInt 32 1 + 12: TypeArray 11(int) 9 +13(gl_PerVertex): TypeStruct 10 12 + 14: 8(int) Constant 4 + 15: TypeArray 13(gl_PerVertex) 14 + 16: TypePointer Output 15 + 17(gl_out): 16(ptr) Variable Output + 18: TypePointer Input 11(int) +19(gl_InvocationID): 18(ptr) Variable Input + 21: 11(int) Constant 1 + 22: 11(int) Constant 0 + 23: TypePointer Output 11(int) + 26: TypeArray 6(float) 9 +27(gl_PerVertex): TypeStruct 7(fvec4) 6(float) 26 26 10 + 28: 8(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) + 4(main): 2 Function None 3 + 5: Label + 20: 11(int) Load 19(gl_InvocationID) + 24: 23(ptr) AccessChain 17(gl_out) 20 21 22 + Store 24 21 + 25: 11(int) Load 19(gl_InvocationID) + 33: 32(ptr) AccessChain 31(gl_in) 21 22 + 34: 7(fvec4) Load 33 + 36: 35(ptr) AccessChain 17(gl_out) 25 22 22 + Store 36 34 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiviewPerViewAttributes.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiviewPerViewAttributes.vert.out new file mode 100644 index 0000000..350944a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiviewPerViewAttributes.vert.out @@ -0,0 +1,62 @@ +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 +// Id's are bound by 29 + + Capability Shader + Capability PerViewAttributesNV + Extension "SPV_NVX_multiview_per_view_attributes" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 11 20 24 + Source GLSL 450 + SourceExtension "GL_NVX_multiview_per_view_attributes" + Name 4 "main" + Name 11 "gl_ViewportMaskPerViewNV" + Name 20 "gl_PositionPerViewNV" + Name 22 "gl_PerVertex" + MemberName 22(gl_PerVertex) 0 "gl_Position" + MemberName 22(gl_PerVertex) 1 "gl_PointSize" + MemberName 22(gl_PerVertex) 2 "gl_ClipDistance" + MemberName 22(gl_PerVertex) 3 "gl_CullDistance" + Name 24 "" + Decorate 11(gl_ViewportMaskPerViewNV) BuiltIn ViewportMaskPerViewNV + Decorate 20(gl_PositionPerViewNV) BuiltIn PositionPerViewNV + MemberDecorate 22(gl_PerVertex) 0 BuiltIn Position + MemberDecorate 22(gl_PerVertex) 1 BuiltIn PointSize + MemberDecorate 22(gl_PerVertex) 2 BuiltIn ClipDistance + MemberDecorate 22(gl_PerVertex) 3 BuiltIn CullDistance + Decorate 22(gl_PerVertex) Block + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypeInt 32 0 + 8: 7(int) Constant 1 + 9: TypeArray 6(int) 8 + 10: TypePointer Output 9 +11(gl_ViewportMaskPerViewNV): 10(ptr) Variable Output + 12: 6(int) Constant 0 + 13: 6(int) Constant 1 + 14: TypePointer Output 6(int) + 16: TypeFloat 32 + 17: TypeVector 16(float) 4 + 18: TypeArray 17(fvec4) 8 + 19: TypePointer Output 18 +20(gl_PositionPerViewNV): 19(ptr) Variable Output + 21: TypeArray 16(float) 8 +22(gl_PerVertex): TypeStruct 17(fvec4) 16(float) 21 21 + 23: TypePointer Output 22(gl_PerVertex) + 24: 23(ptr) Variable Output + 25: TypePointer Output 17(fvec4) + 4(main): 2 Function None 3 + 5: Label + 15: 14(ptr) AccessChain 11(gl_ViewportMaskPerViewNV) 12 + Store 15 13 + 26: 25(ptr) AccessChain 24 12 + 27: 17(fvec4) Load 26 + 28: 25(ptr) AccessChain 20(gl_PositionPerViewNV) 12 + Store 28 27 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.newTexture.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.newTexture.frag.out new file mode 100755 index 0000000..ea694ee --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.newTexture.frag.out @@ -0,0 +1,383 @@ +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 +// Id's are bound by 284 + + Capability Shader + Capability SampledRect + Capability SampledCubeArray + Capability ImageQuery + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 17 26 29 55 81 84 92 253 283 + ExecutionMode 4 OriginUpperLeft + Source GLSL 430 + Name 4 "main" + Name 9 "v" + Name 13 "s2D" + Name 17 "c2D" + Name 23 "sCubeArrayShadow" + Name 26 "c4D" + Name 29 "c1D" + Name 42 "s3D" + Name 51 "s2DArray" + Name 55 "c3D" + Name 64 "s2DShadow" + Name 81 "ic3D" + Name 84 "ic1D" + Name 92 "ic2D" + Name 102 "sr" + Name 128 "sCube" + Name 139 "s2DArrayShadow" + Name 167 "iv" + Name 171 "is2D" + Name 208 "is3D" + Name 220 "isCube" + Name 232 "is2DArray" + Name 243 "iv2" + Name 247 "sCubeShadow" + Name 253 "FragData" + Name 265 "is2Dms" + Name 269 "us2D" + Name 273 "us3D" + Name 277 "usCube" + Name 281 "us2DArray" + Name 283 "ic4D" + Decorate 13(s2D) DescriptorSet 0 + Decorate 23(sCubeArrayShadow) DescriptorSet 0 + Decorate 42(s3D) DescriptorSet 0 + Decorate 51(s2DArray) DescriptorSet 0 + Decorate 64(s2DShadow) DescriptorSet 0 + Decorate 81(ic3D) Flat + Decorate 84(ic1D) Flat + Decorate 92(ic2D) Flat + Decorate 102(sr) DescriptorSet 0 + Decorate 128(sCube) DescriptorSet 0 + Decorate 139(s2DArrayShadow) DescriptorSet 0 + Decorate 171(is2D) DescriptorSet 0 + Decorate 208(is3D) DescriptorSet 0 + Decorate 220(isCube) DescriptorSet 0 + Decorate 232(is2DArray) DescriptorSet 0 + Decorate 247(sCubeShadow) DescriptorSet 0 + Decorate 265(is2Dms) DescriptorSet 0 + Decorate 269(us2D) DescriptorSet 0 + Decorate 273(us3D) DescriptorSet 0 + Decorate 277(usCube) DescriptorSet 0 + Decorate 281(us2DArray) DescriptorSet 0 + Decorate 283(ic4D) Flat + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 10: TypeImage 6(float) 2D sampled format:Unknown + 11: TypeSampledImage 10 + 12: TypePointer UniformConstant 11 + 13(s2D): 12(ptr) Variable UniformConstant + 15: TypeVector 6(float) 2 + 16: TypePointer Input 15(fvec2) + 17(c2D): 16(ptr) Variable Input + 20: TypeImage 6(float) Cube depth array sampled format:Unknown + 21: TypeSampledImage 20 + 22: TypePointer UniformConstant 21 +23(sCubeArrayShadow): 22(ptr) Variable UniformConstant + 25: TypePointer Input 7(fvec4) + 26(c4D): 25(ptr) Variable Input + 28: TypePointer Input 6(float) + 29(c1D): 28(ptr) Variable Input + 32: TypeInt 32 0 + 33: 32(int) Constant 1 + 34: TypePointer Function 6(float) + 39: TypeImage 6(float) 3D sampled format:Unknown + 40: TypeSampledImage 39 + 41: TypePointer UniformConstant 40 + 42(s3D): 41(ptr) Variable UniformConstant + 48: TypeImage 6(float) 2D array sampled format:Unknown + 49: TypeSampledImage 48 + 50: TypePointer UniformConstant 49 + 51(s2DArray): 50(ptr) Variable UniformConstant + 53: TypeVector 6(float) 3 + 54: TypePointer Input 53(fvec3) + 55(c3D): 54(ptr) Variable Input + 57: 6(float) Constant 1067030938 + 61: TypeImage 6(float) 2D depth sampled format:Unknown + 62: TypeSampledImage 61 + 63: TypePointer UniformConstant 62 + 64(s2DShadow): 63(ptr) Variable UniformConstant + 67: TypeInt 32 1 + 68: TypeVector 67(int) 2 + 69: 67(int) Constant 3 + 70: 68(ivec2) ConstantComposite 69 69 + 79: TypeVector 67(int) 3 + 80: TypePointer Input 79(ivec3) + 81(ic3D): 80(ptr) Variable Input + 83: TypePointer Input 67(int) + 84(ic1D): 83(ptr) Variable Input + 91: TypePointer Input 68(ivec2) + 92(ic2D): 91(ptr) Variable Input + 94: 67(int) Constant 4 + 99: TypeImage 6(float) Rect sampled format:Unknown + 100: TypeSampledImage 99 + 101: TypePointer UniformConstant 100 + 102(sr): 101(ptr) Variable UniformConstant + 105: 68(ivec2) ConstantComposite 94 94 + 125: TypeImage 6(float) Cube sampled format:Unknown + 126: TypeSampledImage 125 + 127: TypePointer UniformConstant 126 + 128(sCube): 127(ptr) Variable UniformConstant + 136: TypeImage 6(float) 2D depth array sampled format:Unknown + 137: TypeSampledImage 136 + 138: TypePointer UniformConstant 137 +139(s2DArrayShadow): 138(ptr) Variable UniformConstant + 146: 32(int) Constant 0 + 165: TypeVector 67(int) 4 + 166: TypePointer Function 165(ivec4) + 168: TypeImage 67(int) 2D sampled format:Unknown + 169: TypeSampledImage 168 + 170: TypePointer UniformConstant 169 + 171(is2D): 170(ptr) Variable UniformConstant + 205: TypeImage 67(int) 3D sampled format:Unknown + 206: TypeSampledImage 205 + 207: TypePointer UniformConstant 206 + 208(is3D): 207(ptr) Variable UniformConstant + 211: 6(float) Constant 1082549862 + 217: TypeImage 67(int) Cube sampled format:Unknown + 218: TypeSampledImage 217 + 219: TypePointer UniformConstant 218 + 220(isCube): 219(ptr) Variable UniformConstant + 229: TypeImage 67(int) 2D array sampled format:Unknown + 230: TypeSampledImage 229 + 231: TypePointer UniformConstant 230 + 232(is2DArray): 231(ptr) Variable UniformConstant + 242: TypePointer Function 68(ivec2) + 244: TypeImage 6(float) Cube depth sampled format:Unknown + 245: TypeSampledImage 244 + 246: TypePointer UniformConstant 245 +247(sCubeShadow): 246(ptr) Variable UniformConstant + 249: 67(int) Constant 2 + 252: TypePointer Output 7(fvec4) + 253(FragData): 252(ptr) Variable Output + 257: 6(float) Constant 0 + 262: TypeImage 67(int) 2D multi-sampled sampled format:Unknown + 263: TypeSampledImage 262 + 264: TypePointer UniformConstant 263 + 265(is2Dms): 264(ptr) Variable UniformConstant + 266: TypeImage 32(int) 2D sampled format:Unknown + 267: TypeSampledImage 266 + 268: TypePointer UniformConstant 267 + 269(us2D): 268(ptr) Variable UniformConstant + 270: TypeImage 32(int) 3D sampled format:Unknown + 271: TypeSampledImage 270 + 272: TypePointer UniformConstant 271 + 273(us3D): 272(ptr) Variable UniformConstant + 274: TypeImage 32(int) Cube sampled format:Unknown + 275: TypeSampledImage 274 + 276: TypePointer UniformConstant 275 + 277(usCube): 276(ptr) Variable UniformConstant + 278: TypeImage 32(int) 2D array sampled format:Unknown + 279: TypeSampledImage 278 + 280: TypePointer UniformConstant 279 + 281(us2DArray): 280(ptr) Variable UniformConstant + 282: TypePointer Input 165(ivec4) + 283(ic4D): 282(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 9(v): 8(ptr) Variable Function + 167(iv): 166(ptr) Variable Function + 243(iv2): 242(ptr) Variable Function + 14: 11 Load 13(s2D) + 18: 15(fvec2) Load 17(c2D) + 19: 7(fvec4) ImageSampleImplicitLod 14 18 + Store 9(v) 19 + 24: 21 Load 23(sCubeArrayShadow) + 27: 7(fvec4) Load 26(c4D) + 30: 6(float) Load 29(c1D) + 31: 6(float) ImageSampleDrefImplicitLod 24 27 30 + 35: 34(ptr) AccessChain 9(v) 33 + 36: 6(float) Load 35 + 37: 6(float) FAdd 36 31 + 38: 34(ptr) AccessChain 9(v) 33 + Store 38 37 + 43: 40 Load 42(s3D) + 44: 7(fvec4) Load 26(c4D) + 45: 7(fvec4) ImageSampleProjImplicitLod 43 44 + 46: 7(fvec4) Load 9(v) + 47: 7(fvec4) FAdd 46 45 + Store 9(v) 47 + 52: 49 Load 51(s2DArray) + 56: 53(fvec3) Load 55(c3D) + 58: 7(fvec4) ImageSampleExplicitLod 52 56 Lod 57 + 59: 7(fvec4) Load 9(v) + 60: 7(fvec4) FAdd 59 58 + Store 9(v) 60 + 65: 62 Load 64(s2DShadow) + 66: 53(fvec3) Load 55(c3D) + 71: 6(float) Load 29(c1D) + 72: 6(float) CompositeExtract 66 2 + 73: 6(float) ImageSampleDrefImplicitLod 65 66 72 Bias ConstOffset 71 70 + 74: 34(ptr) AccessChain 9(v) 33 + 75: 6(float) Load 74 + 76: 6(float) FAdd 75 73 + 77: 34(ptr) AccessChain 9(v) 33 + Store 77 76 + 78: 40 Load 42(s3D) + 82: 79(ivec3) Load 81(ic3D) + 85: 67(int) Load 84(ic1D) + 86: 39 Image 78 + 87: 7(fvec4) ImageFetch 86 82 Lod 85 + 88: 7(fvec4) Load 9(v) + 89: 7(fvec4) FAdd 88 87 + Store 9(v) 89 + 90: 11 Load 13(s2D) + 93: 68(ivec2) Load 92(ic2D) + 95: 10 Image 90 + 96: 7(fvec4) ImageFetch 95 93 Lod ConstOffset 94 70 + 97: 7(fvec4) Load 9(v) + 98: 7(fvec4) FAdd 97 96 + Store 9(v) 98 + 103: 100 Load 102(sr) + 104: 68(ivec2) Load 92(ic2D) + 106: 99 Image 103 + 107: 7(fvec4) ImageFetch 106 104 ConstOffset 105 + 108: 7(fvec4) Load 9(v) + 109: 7(fvec4) FAdd 108 107 + Store 9(v) 109 + 110: 62 Load 64(s2DShadow) + 111: 53(fvec3) Load 55(c3D) + 112: 6(float) Load 29(c1D) + 113: 6(float) CompositeExtract 111 2 + 114: 6(float) ImageSampleDrefExplicitLod 110 111 113 Lod ConstOffset 112 70 + 115: 34(ptr) AccessChain 9(v) 33 + 116: 6(float) Load 115 + 117: 6(float) FAdd 116 114 + 118: 34(ptr) AccessChain 9(v) 33 + Store 118 117 + 119: 11 Load 13(s2D) + 120: 53(fvec3) Load 55(c3D) + 121: 6(float) Load 29(c1D) + 122: 7(fvec4) ImageSampleProjExplicitLod 119 120 Lod ConstOffset 121 70 + 123: 7(fvec4) Load 9(v) + 124: 7(fvec4) FAdd 123 122 + Store 9(v) 124 + 129: 126 Load 128(sCube) + 130: 53(fvec3) Load 55(c3D) + 131: 53(fvec3) Load 55(c3D) + 132: 53(fvec3) Load 55(c3D) + 133: 7(fvec4) ImageSampleExplicitLod 129 130 Grad 131 132 + 134: 7(fvec4) Load 9(v) + 135: 7(fvec4) FAdd 134 133 + Store 9(v) 135 + 140: 137 Load 139(s2DArrayShadow) + 141: 7(fvec4) Load 26(c4D) + 142: 15(fvec2) Load 17(c2D) + 143: 15(fvec2) Load 17(c2D) + 144: 6(float) CompositeExtract 141 3 + 145: 6(float) ImageSampleDrefExplicitLod 140 141 144 Grad ConstOffset 142 143 70 + 147: 34(ptr) AccessChain 9(v) 146 + 148: 6(float) Load 147 + 149: 6(float) FAdd 148 145 + 150: 34(ptr) AccessChain 9(v) 146 + Store 150 149 + 151: 40 Load 42(s3D) + 152: 7(fvec4) Load 26(c4D) + 153: 53(fvec3) Load 55(c3D) + 154: 53(fvec3) Load 55(c3D) + 155: 7(fvec4) ImageSampleProjExplicitLod 151 152 Grad 153 154 + 156: 7(fvec4) Load 9(v) + 157: 7(fvec4) FAdd 156 155 + Store 9(v) 157 + 158: 11 Load 13(s2D) + 159: 53(fvec3) Load 55(c3D) + 160: 15(fvec2) Load 17(c2D) + 161: 15(fvec2) Load 17(c2D) + 162: 7(fvec4) ImageSampleProjExplicitLod 158 159 Grad ConstOffset 160 161 70 + 163: 7(fvec4) Load 9(v) + 164: 7(fvec4) FAdd 163 162 + Store 9(v) 164 + 172: 169 Load 171(is2D) + 173: 15(fvec2) Load 17(c2D) + 174: 165(ivec4) ImageSampleImplicitLod 172 173 + Store 167(iv) 174 + 175: 165(ivec4) Load 167(iv) + 176: 7(fvec4) ConvertSToF 175 + 177: 7(fvec4) Load 9(v) + 178: 7(fvec4) FAdd 177 176 + Store 9(v) 178 + 179: 169 Load 171(is2D) + 180: 7(fvec4) Load 26(c4D) + 181: 6(float) CompositeExtract 180 3 + 182: 7(fvec4) CompositeInsert 181 180 2 + 183: 165(ivec4) ImageSampleProjImplicitLod 179 182 ConstOffset 70 + Store 167(iv) 183 + 184: 165(ivec4) Load 167(iv) + 185: 7(fvec4) ConvertSToF 184 + 186: 7(fvec4) Load 9(v) + 187: 7(fvec4) FAdd 186 185 + Store 9(v) 187 + 188: 169 Load 171(is2D) + 189: 53(fvec3) Load 55(c3D) + 190: 6(float) Load 29(c1D) + 191: 165(ivec4) ImageSampleProjExplicitLod 188 189 Lod 190 + Store 167(iv) 191 + 192: 165(ivec4) Load 167(iv) + 193: 7(fvec4) ConvertSToF 192 + 194: 7(fvec4) Load 9(v) + 195: 7(fvec4) FAdd 194 193 + Store 9(v) 195 + 196: 169 Load 171(is2D) + 197: 53(fvec3) Load 55(c3D) + 198: 15(fvec2) Load 17(c2D) + 199: 15(fvec2) Load 17(c2D) + 200: 165(ivec4) ImageSampleProjExplicitLod 196 197 Grad 198 199 + Store 167(iv) 200 + 201: 165(ivec4) Load 167(iv) + 202: 7(fvec4) ConvertSToF 201 + 203: 7(fvec4) Load 9(v) + 204: 7(fvec4) FAdd 203 202 + Store 9(v) 204 + 209: 206 Load 208(is3D) + 210: 53(fvec3) Load 55(c3D) + 212: 165(ivec4) ImageSampleImplicitLod 209 210 Bias 211 + Store 167(iv) 212 + 213: 165(ivec4) Load 167(iv) + 214: 7(fvec4) ConvertSToF 213 + 215: 7(fvec4) Load 9(v) + 216: 7(fvec4) FAdd 215 214 + Store 9(v) 216 + 221: 218 Load 220(isCube) + 222: 53(fvec3) Load 55(c3D) + 223: 6(float) Load 29(c1D) + 224: 165(ivec4) ImageSampleExplicitLod 221 222 Lod 223 + Store 167(iv) 224 + 225: 165(ivec4) Load 167(iv) + 226: 7(fvec4) ConvertSToF 225 + 227: 7(fvec4) Load 9(v) + 228: 7(fvec4) FAdd 227 226 + Store 9(v) 228 + 233: 230 Load 232(is2DArray) + 234: 79(ivec3) Load 81(ic3D) + 235: 67(int) Load 84(ic1D) + 236: 229 Image 233 + 237: 165(ivec4) ImageFetch 236 234 Lod 235 + Store 167(iv) 237 + 238: 165(ivec4) Load 167(iv) + 239: 7(fvec4) ConvertSToF 238 + 240: 7(fvec4) Load 9(v) + 241: 7(fvec4) FAdd 240 239 + Store 9(v) 241 + 248: 245 Load 247(sCubeShadow) + 250: 244 Image 248 + 251: 68(ivec2) ImageQuerySizeLod 250 249 + Store 243(iv2) 251 + 254: 7(fvec4) Load 9(v) + 255: 68(ivec2) Load 243(iv2) + 256: 15(fvec2) ConvertSToF 255 + 258: 6(float) CompositeExtract 256 0 + 259: 6(float) CompositeExtract 256 1 + 260: 7(fvec4) CompositeConstruct 258 259 257 257 + 261: 7(fvec4) FAdd 254 260 + Store 253(FragData) 261 + 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 new file mode 100644 index 0000000..41d2a43 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.noDeadDecorations.vert.out @@ -0,0 +1,60 @@ +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 +// Id's are bound by 32 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 22 + Source ESSL 310 + Name 4 "main" + Name 10 "func(f1;" + Name 9 "a" + Name 20 "gl_PerVertex" + MemberName 20(gl_PerVertex) 0 "gl_Position" + MemberName 20(gl_PerVertex) 1 "gl_PointSize" + Name 22 "" + Name 26 "param" + Decorate 10(func(f1;) RelaxedPrecision + Decorate 9(a) RelaxedPrecision + Decorate 12 RelaxedPrecision + Decorate 13 RelaxedPrecision + MemberDecorate 20(gl_PerVertex) 0 BuiltIn Position + MemberDecorate 20(gl_PerVertex) 1 BuiltIn PointSize + Decorate 20(gl_PerVertex) Block + Decorate 27 RelaxedPrecision + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypePointer Function 6(float) + 8: TypeFunction 6(float) 7(ptr) + 16: 6(float) Constant 3212836864 + 19: TypeVector 6(float) 4 +20(gl_PerVertex): TypeStruct 19(fvec4) 6(float) + 21: TypePointer Output 20(gl_PerVertex) + 22: 21(ptr) Variable Output + 23: TypeInt 32 1 + 24: 23(int) Constant 0 + 25: 6(float) Constant 0 + 28: TypeInt 32 0 + 29: 28(int) Constant 0 + 30: TypePointer Output 6(float) + 4(main): 2 Function None 3 + 5: Label + 26(param): 7(ptr) Variable Function + Store 26(param) 25 + 27: 6(float) FunctionCall 10(func(f1;) 26(param) + 31: 30(ptr) AccessChain 22 24 29 + Store 31 27 + Return + FunctionEnd + 10(func(f1;): 6(float) Function None 8 + 9(a): 7(ptr) FunctionParameter + 11: Label + 12: 6(float) Load 9(a) + 13: 6(float) FNegate 12 + ReturnValue 13 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.noWorkgroup.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.noWorkgroup.comp.out new file mode 100755 index 0000000..0f88436 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.noWorkgroup.comp.out @@ -0,0 +1,30 @@ +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 +// Id's are bound by 12 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "main" + ExecutionMode 4 LocalSize 1 1 1 + Source GLSL 450 + Name 4 "main" + Decorate 7 SpecId 18 + Decorate 8 SpecId 10 + Decorate 9 SpecId 19 + Decorate 11 BuiltIn WorkgroupSize + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: 6(int) SpecConstant 1 + 8: 6(int) SpecConstant 1 + 9: 6(int) SpecConstant 1 + 10: TypeVector 6(int) 3 + 11: 10(ivec3) SpecConstantComposite 7 8 9 + 4(main): 2 Function None 3 + 5: Label + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.nonSquare.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.nonSquare.vert.out new file mode 100755 index 0000000..684d4f1 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.nonSquare.vert.out @@ -0,0 +1,112 @@ +spv.nonSquare.vert +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 90 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 12 22 28 55 + Source GLSL 140 + Name 4 "main" + Name 9 "a" + Name 12 "v3" + Name 16 "m23" + Name 19 "b" + Name 22 "m32" + Name 28 "gl_Position" + Name 55 "v4" + Decorate 28(gl_Position) BuiltIn Position + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 2 + 8: TypePointer Function 7(fvec2) + 10: TypeVector 6(float) 3 + 11: TypePointer Input 10(fvec3) + 12(v3): 11(ptr) Variable Input + 14: TypeMatrix 10(fvec3) 2 + 15: TypePointer Function 14 + 20: TypeMatrix 7(fvec2) 3 + 21: TypePointer Output 20 + 22(m32): 21(ptr) Variable Output + 26: TypeVector 6(float) 4 + 27: TypePointer Output 26(fvec4) + 28(gl_Position): 27(ptr) Variable Output + 31: TypeMatrix 10(fvec3) 3 + 35: 6(float) Constant 0 + 40: TypeMatrix 26(fvec4) 4 + 41: 6(float) Constant 1077936128 + 42: 6(float) Constant 1086324736 + 43: 26(fvec4) ConstantComposite 41 42 35 35 + 44: 6(float) Constant 1091567616 + 45: 6(float) Constant 1094713344 + 46: 26(fvec4) ConstantComposite 44 45 35 35 + 47: 6(float) Constant 1097859072 + 48: 6(float) Constant 1099956224 + 49: 26(fvec4) ConstantComposite 47 48 35 35 + 50: 6(float) Constant 1101529088 + 51: 6(float) Constant 1103101952 + 52: 26(fvec4) ConstantComposite 50 51 35 35 + 53: 40 ConstantComposite 43 46 49 52 + 54: TypePointer Input 26(fvec4) + 55(v4): 54(ptr) Variable Input + 59: 6(float) Constant 1112014848 + 60: 6(float) Constant 1121714176 + 61: 6(float) Constant 1126825984 + 62: 6(float) Constant 1130758144 + 63: 26(fvec4) ConstantComposite 59 60 61 62 + 65: 6(float) Constant 1106247680 + 66: 6(float) Constant 1114636288 + 67: 26(fvec4) ConstantComposite 65 66 35 35 + 69: 6(float) Constant 1101004800 + 70: 6(float) Constant 1092616192 + 71: 6(float) Constant 1084227584 + 72: 26(fvec4) ConstantComposite 69 70 42 71 + 74: 7(fvec2) ConstantComposite 70 69 + 75: TypeMatrix 26(fvec4) 2 + 76: 26(fvec4) ConstantComposite 41 35 35 35 + 77: 26(fvec4) ConstantComposite 35 41 35 35 + 78: 75 ConstantComposite 76 77 + 79: TypeMatrix 7(fvec2) 4 + 80: 6(float) Constant 1065353216 + 81: 6(float) Constant 1073741824 + 82: 7(fvec2) ConstantComposite 80 81 + 83: 6(float) Constant 1082130432 + 84: 7(fvec2) ConstantComposite 41 83 + 85: 7(fvec2) ConstantComposite 71 42 + 86: 6(float) Constant 1088421888 + 87: 6(float) Constant 1090519040 + 88: 7(fvec2) ConstantComposite 86 87 + 89: 79 ConstantComposite 82 84 85 88 + 4(main): 2 Function None 3 + 5: Label + 9(a): 8(ptr) Variable Function + 16(m23): 15(ptr) Variable Function + 19(b): 8(ptr) Variable Function + 13: 10(fvec3) Load 12(v3) + 17: 14 Load 16(m23) + 18: 7(fvec2) VectorTimesMatrix 13 17 + Store 9(a) 18 + 23: 20 Load 22(m32) + 24: 10(fvec3) Load 12(v3) + 25: 7(fvec2) MatrixTimesVector 23 24 + Store 19(b) 25 + 29: 14 Load 16(m23) + 30: 20 Load 22(m32) + 32: 31 MatrixTimesMatrix 29 30 + 33: 10(fvec3) Load 12(v3) + 34: 10(fvec3) MatrixTimesVector 32 33 + 36: 6(float) CompositeExtract 34 0 + 37: 6(float) CompositeExtract 34 1 + 38: 6(float) CompositeExtract 34 2 + 39: 26(fvec4) CompositeConstruct 36 37 38 35 + 56: 26(fvec4) Load 55(v4) + 57: 26(fvec4) MatrixTimesVector 53 56 + 58: 26(fvec4) FAdd 39 57 + 64: 26(fvec4) FAdd 58 63 + 68: 26(fvec4) FAdd 64 67 + 73: 26(fvec4) FAdd 68 72 + Store 28(gl_Position) 73 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.offsets.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.offsets.frag.out new file mode 100755 index 0000000..ea4be8f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.offsets.frag.out @@ -0,0 +1,55 @@ +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 +// Id's are bound by 15 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + Name 4 "main" + Name 7 "n1" + MemberName 7(n1) 0 "a" + MemberName 7(n1) 1 "b" + MemberName 7(n1) 2 "c" + MemberName 7(n1) 3 "d" + Name 9 "i1" + Name 12 "n2" + MemberName 12(n2) 0 "e" + MemberName 12(n2) 1 "f" + MemberName 12(n2) 2 "g" + MemberName 12(n2) 3 "h" + Name 14 "i2" + MemberDecorate 7(n1) 0 Offset 8 + MemberDecorate 7(n1) 1 Offset 4 + MemberDecorate 7(n1) 2 Offset 0 + MemberDecorate 7(n1) 3 Offset 12 + Decorate 7(n1) Block + Decorate 9(i1) DescriptorSet 0 + Decorate 9(i1) Binding 0 + MemberDecorate 12(n2) 0 Offset 32 + MemberDecorate 12(n2) 1 Offset 48 + MemberDecorate 12(n2) 2 Offset 16 + MemberDecorate 12(n2) 3 Offset 0 + Decorate 12(n2) BufferBlock + Decorate 14(i2) DescriptorSet 0 + Decorate 14(i2) Binding 1 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7(n1): TypeStruct 6(int) 6(int) 6(int) 6(int) + 8: TypePointer Uniform 7(n1) + 9(i1): 8(ptr) Variable Uniform + 10: TypeFloat 32 + 11: TypeVector 10(float) 3 + 12(n2): TypeStruct 11(fvec3) 11(fvec3) 11(fvec3) 11(fvec3) + 13: TypePointer Uniform 12(n2) + 14(i2): 13(ptr) Variable Uniform + 4(main): 2 Function None 3 + 5: Label + 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 new file mode 100644 index 0000000..4bae395 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.precise.tesc.out @@ -0,0 +1,118 @@ +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 +// Id's are bound by 72 + + Capability Tessellation + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint TessellationControl 4 "main" 12 15 20 30 40 45 + ExecutionMode 4 OutputVertices 3 + Source ESSL 310 + SourceExtension "GL_EXT_gpu_shader5" + SourceExtension "GL_EXT_shader_io_blocks" + SourceExtension "GL_EXT_tessellation_shader" + Name 4 "main" + Name 12 "in_te_position" + Name 15 "gl_InvocationID" + Name 20 "in_tc_position" + Name 30 "gl_TessLevelInner" + Name 40 "gl_TessLevelOuter" + Name 45 "in_tc_tessParam" + Decorate 12(in_te_position) Location 0 + Decorate 15(gl_InvocationID) BuiltIn InvocationId + Decorate 20(in_tc_position) Location 0 + Decorate 30(gl_TessLevelInner) Patch + Decorate 30(gl_TessLevelInner) BuiltIn TessLevelInner + Decorate 40(gl_TessLevelOuter) Patch + Decorate 40(gl_TessLevelOuter) BuiltIn TessLevelOuter + Decorate 45(in_tc_tessParam) Location 1 + Decorate 52 NoContraction + Decorate 53 NoContraction + Decorate 54 NoContraction + Decorate 60 NoContraction + Decorate 61 NoContraction + Decorate 62 NoContraction + Decorate 68 NoContraction + Decorate 69 NoContraction + Decorate 70 NoContraction + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 2 + 8: TypeInt 32 0 + 9: 8(int) Constant 3 + 10: TypeArray 7(fvec2) 9 + 11: TypePointer Output 10 +12(in_te_position): 11(ptr) Variable Output + 13: TypeInt 32 1 + 14: TypePointer Input 13(int) +15(gl_InvocationID): 14(ptr) Variable Input + 17: 8(int) Constant 32 + 18: TypeArray 7(fvec2) 17 + 19: TypePointer Input 18 +20(in_tc_position): 19(ptr) Variable Input + 22: TypePointer Input 7(fvec2) + 25: TypePointer Output 7(fvec2) + 27: 8(int) Constant 2 + 28: TypeArray 6(float) 27 + 29: TypePointer Output 28 +30(gl_TessLevelInner): 29(ptr) Variable Output + 31: 13(int) Constant 0 + 32: 6(float) Constant 1084227584 + 33: TypePointer Output 6(float) + 35: 13(int) Constant 1 + 37: 8(int) Constant 4 + 38: TypeArray 6(float) 37 + 39: TypePointer Output 38 +40(gl_TessLevelOuter): 39(ptr) Variable Output + 41: 6(float) Constant 1065353216 + 42: 6(float) Constant 1105985536 + 43: TypeArray 6(float) 17 + 44: TypePointer Input 43 +45(in_tc_tessParam): 44(ptr) Variable Input + 46: TypePointer Input 6(float) + 49: 13(int) Constant 2 + 4(main): 2 Function None 3 + 5: Label + 16: 13(int) Load 15(gl_InvocationID) + 21: 13(int) Load 15(gl_InvocationID) + 23: 22(ptr) AccessChain 20(in_tc_position) 21 + 24: 7(fvec2) Load 23 + 26: 25(ptr) AccessChain 12(in_te_position) 16 + Store 26 24 + 34: 33(ptr) AccessChain 30(gl_TessLevelInner) 31 + Store 34 32 + 36: 33(ptr) AccessChain 30(gl_TessLevelInner) 35 + Store 36 32 + 47: 46(ptr) AccessChain 45(in_tc_tessParam) 35 + 48: 6(float) Load 47 + 50: 46(ptr) AccessChain 45(in_tc_tessParam) 49 + 51: 6(float) Load 50 + 52: 6(float) FAdd 48 51 + 53: 6(float) FMul 42 52 + 54: 6(float) FAdd 41 53 + 55: 33(ptr) AccessChain 40(gl_TessLevelOuter) 31 + Store 55 54 + 56: 46(ptr) AccessChain 45(in_tc_tessParam) 49 + 57: 6(float) Load 56 + 58: 46(ptr) AccessChain 45(in_tc_tessParam) 31 + 59: 6(float) Load 58 + 60: 6(float) FAdd 57 59 + 61: 6(float) FMul 42 60 + 62: 6(float) FAdd 41 61 + 63: 33(ptr) AccessChain 40(gl_TessLevelOuter) 35 + Store 63 62 + 64: 46(ptr) AccessChain 45(in_tc_tessParam) 31 + 65: 6(float) Load 64 + 66: 46(ptr) AccessChain 45(in_tc_tessParam) 35 + 67: 6(float) Load 66 + 68: 6(float) FAdd 65 67 + 69: 6(float) FMul 42 68 + 70: 6(float) FAdd 41 69 + 71: 33(ptr) AccessChain 40(gl_TessLevelOuter) 49 + Store 71 70 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.precise.tese.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.precise.tese.out new file mode 100644 index 0000000..4f1839c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.precise.tese.out @@ -0,0 +1,187 @@ +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 +// Id's are bound by 119 + + Capability Tessellation + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint TessellationEvaluation 4 "main" 12 21 62 112 + ExecutionMode 4 Triangles + ExecutionMode 4 SpacingEqual + ExecutionMode 4 VertexOrderCcw + Source ESSL 310 + SourceExtension "GL_EXT_gpu_shader5" + SourceExtension "GL_EXT_shader_io_blocks" + SourceExtension "GL_EXT_tessellation_shader" + Name 4 "main" + Name 9 "pos" + Name 12 "gl_TessCoord" + Name 21 "in_te_position" + Name 45 "f" + Name 62 "in_f_color" + Name 73 "bits" + Name 77 "numBits" + Name 78 "i" + Name 110 "gl_PerVertex" + MemberName 110(gl_PerVertex) 0 "gl_Position" + MemberName 110(gl_PerVertex) 1 "gl_PointSize" + Name 112 "" + Decorate 12(gl_TessCoord) BuiltIn TessCoord + Decorate 21(in_te_position) Location 0 + Decorate 27 NoContraction + Decorate 34 NoContraction + Decorate 35 NoContraction + Decorate 42 NoContraction + Decorate 43 NoContraction + Decorate 62(in_f_color) RelaxedPrecision + Decorate 62(in_f_color) Location 0 + Decorate 67 RelaxedPrecision + Decorate 68 RelaxedPrecision + Decorate 69 RelaxedPrecision + Decorate 70 RelaxedPrecision + Decorate 97 NoContraction + Decorate 99 NoContraction + Decorate 101 NoContraction + Decorate 106 NoContraction + Decorate 109 NoContraction + MemberDecorate 110(gl_PerVertex) 0 BuiltIn Position + MemberDecorate 110(gl_PerVertex) 1 BuiltIn PointSize + Decorate 110(gl_PerVertex) Block + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 2 + 8: TypePointer Function 7(fvec2) + 10: TypeVector 6(float) 3 + 11: TypePointer Input 10(fvec3) +12(gl_TessCoord): 11(ptr) Variable Input + 13: TypeInt 32 0 + 14: 13(int) Constant 0 + 15: TypePointer Input 6(float) + 18: 13(int) Constant 32 + 19: TypeArray 7(fvec2) 18 + 20: TypePointer Input 19 +21(in_te_position): 20(ptr) Variable Input + 22: TypeInt 32 1 + 23: 22(int) Constant 0 + 24: TypePointer Input 7(fvec2) + 28: 13(int) Constant 1 + 31: 22(int) Constant 1 + 36: 13(int) Constant 2 + 39: 22(int) Constant 2 + 44: TypePointer Function 6(float) + 46: 6(float) Constant 1077936128 + 57: 6(float) Constant 1056964608 + 60: TypeVector 6(float) 4 + 61: TypePointer Output 60(fvec4) + 62(in_f_color): 61(ptr) Variable Output + 66: 6(float) Constant 1065353216 + 71: TypeVector 13(int) 2 + 72: TypePointer Function 71(ivec2) + 76: TypePointer Function 13(int) + 85: TypeBool + 105: 6(float) Constant 1025758986 +110(gl_PerVertex): TypeStruct 60(fvec4) 6(float) + 111: TypePointer Output 110(gl_PerVertex) + 112: 111(ptr) Variable Output + 114: 6(float) Constant 0 + 4(main): 2 Function None 3 + 5: Label + 9(pos): 8(ptr) Variable Function + 45(f): 44(ptr) Variable Function + 73(bits): 72(ptr) Variable Function + 77(numBits): 76(ptr) Variable Function + 78(i): 76(ptr) Variable Function + 16: 15(ptr) AccessChain 12(gl_TessCoord) 14 + 17: 6(float) Load 16 + 25: 24(ptr) AccessChain 21(in_te_position) 23 + 26: 7(fvec2) Load 25 + 27: 7(fvec2) VectorTimesScalar 26 17 + 29: 15(ptr) AccessChain 12(gl_TessCoord) 28 + 30: 6(float) Load 29 + 32: 24(ptr) AccessChain 21(in_te_position) 31 + 33: 7(fvec2) Load 32 + 34: 7(fvec2) VectorTimesScalar 33 30 + 35: 7(fvec2) FAdd 27 34 + 37: 15(ptr) AccessChain 12(gl_TessCoord) 36 + 38: 6(float) Load 37 + 40: 24(ptr) AccessChain 21(in_te_position) 39 + 41: 7(fvec2) Load 40 + 42: 7(fvec2) VectorTimesScalar 41 38 + 43: 7(fvec2) FAdd 35 42 + Store 9(pos) 43 + 47: 15(ptr) AccessChain 12(gl_TessCoord) 14 + 48: 6(float) Load 47 + 49: 15(ptr) AccessChain 12(gl_TessCoord) 28 + 50: 6(float) Load 49 + 51: 15(ptr) AccessChain 12(gl_TessCoord) 36 + 52: 6(float) Load 51 + 53: 6(float) ExtInst 1(GLSL.std.450) 37(FMin) 50 52 + 54: 6(float) ExtInst 1(GLSL.std.450) 37(FMin) 48 53 + 55: 6(float) FMul 46 54 + 56: 6(float) ExtInst 1(GLSL.std.450) 31(Sqrt) 55 + 58: 6(float) FMul 56 57 + 59: 6(float) FAdd 58 57 + Store 45(f) 59 + 63: 10(fvec3) Load 12(gl_TessCoord) + 64: 6(float) Load 45(f) + 65: 10(fvec3) VectorTimesScalar 63 64 + 67: 6(float) CompositeExtract 65 0 + 68: 6(float) CompositeExtract 65 1 + 69: 6(float) CompositeExtract 65 2 + 70: 60(fvec4) CompositeConstruct 67 68 69 66 + Store 62(in_f_color) 70 + 74: 7(fvec2) Load 9(pos) + 75: 71(ivec2) Bitcast 74 + Store 73(bits) 75 + Store 77(numBits) 14 + Store 78(i) 14 + Branch 79 + 79: Label + LoopMerge 81 82 None + Branch 83 + 83: Label + 84: 13(int) Load 78(i) + 86: 85(bool) ULessThan 84 18 + BranchConditional 86 80 81 + 80: Label + 87: 76(ptr) AccessChain 73(bits) 14 + 88: 13(int) Load 87 + 89: 13(int) Load 78(i) + 90: 13(int) ShiftLeftLogical 88 89 + 91: 13(int) BitwiseAnd 90 28 + 92: 76(ptr) AccessChain 73(bits) 28 + 93: 13(int) Load 92 + 94: 13(int) Load 78(i) + 95: 13(int) ShiftLeftLogical 93 94 + 96: 13(int) BitwiseAnd 95 28 + 97: 13(int) IAdd 91 96 + 98: 13(int) Load 77(numBits) + 99: 13(int) IAdd 98 97 + Store 77(numBits) 99 + Branch 82 + 82: Label + 100: 13(int) Load 78(i) + 101: 13(int) IAdd 100 31 + Store 78(i) 101 + Branch 79 + 81: Label + 102: 13(int) Load 77(numBits) + 103: 13(int) BitwiseAnd 102 28 + 104: 6(float) ConvertUToF 103 + 106: 6(float) FMul 104 105 + 107: 7(fvec2) Load 9(pos) + 108: 7(fvec2) CompositeConstruct 106 106 + 109: 7(fvec2) FAdd 107 108 + Store 9(pos) 109 + 113: 7(fvec2) Load 9(pos) + 115: 6(float) CompositeExtract 113 0 + 116: 6(float) CompositeExtract 113 1 + 117: 60(fvec4) CompositeConstruct 115 116 114 66 + 118: 61(ptr) AccessChain 112 23 + Store 118 117 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.precision.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.precision.frag.out new file mode 100755 index 0000000..f49b356 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.precision.frag.out @@ -0,0 +1,230 @@ +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 +// Id's are bound by 127 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 23 59 61 73 116 + ExecutionMode 4 OriginUpperLeft + Source ESSL 310 + Name 4 "main" + Name 12 "foo(vf3;" + Name 11 "mv3" + Name 19 "boolfun(vb2;" + Name 18 "bv2" + Name 23 "highfin" + Name 38 "sum" + Name 40 "uniform_medium" + Name 42 "uniform_high" + Name 48 "uniform_low" + Name 53 "arg1" + Name 55 "arg2" + Name 57 "d" + Name 59 "lowfin" + Name 61 "mediumfin" + Name 65 "global_highp" + Name 69 "local_highp" + Name 73 "mediumfout" + Name 104 "ub2" + Name 105 "param" + Name 114 "S" + MemberName 114(S) 0 "a" + MemberName 114(S) 1 "b" + Name 116 "s" + Decorate 12(foo(vf3;) RelaxedPrecision + Decorate 11(mv3) RelaxedPrecision + Decorate 38(sum) RelaxedPrecision + Decorate 40(uniform_medium) RelaxedPrecision + Decorate 41 RelaxedPrecision + Decorate 46 RelaxedPrecision + Decorate 48(uniform_low) RelaxedPrecision + Decorate 49 RelaxedPrecision + Decorate 50 RelaxedPrecision + Decorate 51 RelaxedPrecision + Decorate 53(arg1) RelaxedPrecision + Decorate 55(arg2) RelaxedPrecision + Decorate 57(d) RelaxedPrecision + Decorate 59(lowfin) RelaxedPrecision + Decorate 60 RelaxedPrecision + Decorate 61(mediumfin) RelaxedPrecision + Decorate 62 RelaxedPrecision + Decorate 63 RelaxedPrecision + Decorate 73(mediumfout) RelaxedPrecision + Decorate 74 RelaxedPrecision + Decorate 75 RelaxedPrecision + Decorate 76 RelaxedPrecision + Decorate 77 RelaxedPrecision + Decorate 78 RelaxedPrecision + Decorate 79 RelaxedPrecision + Decorate 83 RelaxedPrecision + Decorate 85 RelaxedPrecision + Decorate 87 RelaxedPrecision + Decorate 88 RelaxedPrecision + Decorate 90 RelaxedPrecision + Decorate 91 RelaxedPrecision + Decorate 94 RelaxedPrecision + Decorate 95 RelaxedPrecision + Decorate 96 RelaxedPrecision + Decorate 97 RelaxedPrecision + Decorate 98 RelaxedPrecision + Decorate 99 RelaxedPrecision + Decorate 100 RelaxedPrecision + Decorate 101 RelaxedPrecision + Decorate 102 RelaxedPrecision + Decorate 110 RelaxedPrecision + Decorate 112 RelaxedPrecision + Decorate 113 RelaxedPrecision + MemberDecorate 114(S) 1 RelaxedPrecision + Decorate 120 RelaxedPrecision + Decorate 124 RelaxedPrecision + Decorate 125 RelaxedPrecision + Decorate 126 RelaxedPrecision + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 3 + 8: TypePointer Function 7(fvec3) + 9: TypeVector 6(float) 2 + 10: TypeFunction 9(fvec2) 8(ptr) + 14: TypeBool + 15: TypeVector 14(bool) 2 + 16: TypePointer Function 15(bvec2) + 17: TypeFunction 14(bool) 16(ptr) + 21: TypeVector 6(float) 4 + 22: TypePointer Input 21(fvec4) + 23(highfin): 22(ptr) Variable Input + 29: 14(bool) ConstantFalse + 30: 14(bool) ConstantTrue + 31: 15(bvec2) ConstantComposite 29 30 + 36: TypeInt 32 1 + 37: TypePointer Function 36(int) + 39: TypePointer Private 36(int) +40(uniform_medium): 39(ptr) Variable Private +42(uniform_high): 39(ptr) Variable Private + 48(uniform_low): 39(ptr) Variable Private + 52: TypePointer Function 6(float) + 54: 6(float) Constant 1078774989 + 56: 6(float) Constant 1232730691 + 58: TypePointer Input 6(float) + 59(lowfin): 58(ptr) Variable Input + 61(mediumfin): 58(ptr) Variable Input + 64: TypePointer Private 6(float) +65(global_highp): 64(ptr) Variable Private + 68: TypePointer Function 21(fvec4) + 72: TypePointer Output 21(fvec4) + 73(mediumfout): 72(ptr) Variable Output + 82: 36(int) Constant 4 + 84: TypeVector 36(int) 2 + 92: TypeInt 32 0 + 93: 92(int) Constant 0 + 103: TypePointer Private 15(bvec2) + 104(ub2): 103(ptr) Variable Private + 111: 6(float) Constant 1065353216 + 114(S): TypeStruct 6(float) 6(float) + 115: TypePointer Input 114(S) + 116(s): 115(ptr) Variable Input + 117: 36(int) Constant 0 + 122: 36(int) Constant 1 + 4(main): 2 Function None 3 + 5: Label + 38(sum): 37(ptr) Variable Function + 53(arg1): 52(ptr) Variable Function + 55(arg2): 52(ptr) Variable Function + 57(d): 52(ptr) Variable Function + 69(local_highp): 68(ptr) Variable Function + 105(param): 16(ptr) Variable Function + 41: 36(int) Load 40(uniform_medium) + 43: 36(int) Load 42(uniform_high) + 44: 36(int) IAdd 41 43 + Store 38(sum) 44 + 45: 36(int) Load 42(uniform_high) + 46: 36(int) Load 38(sum) + 47: 36(int) IAdd 46 45 + Store 38(sum) 47 + 49: 36(int) Load 48(uniform_low) + 50: 36(int) Load 38(sum) + 51: 36(int) IAdd 50 49 + Store 38(sum) 51 + Store 53(arg1) 54 + Store 55(arg2) 56 + 60: 6(float) Load 59(lowfin) + 62: 6(float) Load 61(mediumfin) + 63: 6(float) ExtInst 1(GLSL.std.450) 67(Distance) 60 62 + Store 57(d) 63 + 66: 21(fvec4) Load 23(highfin) + 67: 6(float) ExtInst 1(GLSL.std.450) 66(Length) 66 + Store 65(global_highp) 67 + 70: 6(float) Load 65(global_highp) + 71: 21(fvec4) CompositeConstruct 70 70 70 70 + Store 69(local_highp) 71 + 74: 6(float) Load 57(d) + 75: 6(float) ExtInst 1(GLSL.std.450) 13(Sin) 74 + 76: 21(fvec4) CompositeConstruct 75 75 75 75 + 77: 6(float) Load 55(arg2) + 78: 21(fvec4) CompositeConstruct 77 77 77 77 + 79: 21(fvec4) FAdd 76 78 + 80: 21(fvec4) Load 69(local_highp) + 81: 21(fvec4) FAdd 79 80 + Store 73(mediumfout) 81 + 83: 36(int) Load 48(uniform_low) + 85: 84(ivec2) CompositeConstruct 83 83 + 86: 36(int) Load 42(uniform_high) + 87: 84(ivec2) CompositeConstruct 86 86 + 88: 84(ivec2) IMul 85 87 + 89: 36(int) Load 42(uniform_high) + 90: 84(ivec2) CompositeConstruct 89 89 + 91: 84(ivec2) IAdd 88 90 + 94: 36(int) CompositeExtract 91 0 + 95: 36(int) IAdd 82 94 + 96: 36(int) Load 38(sum) + 97: 36(int) IAdd 96 95 + Store 38(sum) 97 + 98: 36(int) Load 38(sum) + 99: 6(float) ConvertSToF 98 + 100: 21(fvec4) CompositeConstruct 99 99 99 99 + 101: 21(fvec4) Load 73(mediumfout) + 102: 21(fvec4) FAdd 101 100 + Store 73(mediumfout) 102 + 106: 15(bvec2) Load 104(ub2) + Store 105(param) 106 + 107: 14(bool) FunctionCall 19(boolfun(vb2;) 105(param) + SelectionMerge 109 None + BranchConditional 107 108 109 + 108: Label + 110: 21(fvec4) Load 73(mediumfout) + 112: 21(fvec4) CompositeConstruct 111 111 111 111 + 113: 21(fvec4) FAdd 110 112 + Store 73(mediumfout) 113 + Branch 109 + 109: Label + 118: 58(ptr) AccessChain 116(s) 117 + 119: 6(float) Load 118 + 120: 21(fvec4) Load 73(mediumfout) + 121: 21(fvec4) VectorTimesScalar 120 119 + Store 73(mediumfout) 121 + 123: 58(ptr) AccessChain 116(s) 122 + 124: 6(float) Load 123 + 125: 21(fvec4) Load 73(mediumfout) + 126: 21(fvec4) VectorTimesScalar 125 124 + Store 73(mediumfout) 126 + Return + FunctionEnd + 12(foo(vf3;): 9(fvec2) Function None 10 + 11(mv3): 8(ptr) FunctionParameter + 13: Label + 24: 21(fvec4) Load 23(highfin) + 25: 9(fvec2) VectorShuffle 24 24 0 1 + ReturnValue 25 + FunctionEnd +19(boolfun(vb2;): 14(bool) Function None 17 + 18(bv2): 16(ptr) FunctionParameter + 20: Label + 28: 15(bvec2) Load 18(bv2) + 32: 15(bvec2) LogicalEqual 28 31 + 33: 14(bool) All 32 + ReturnValue 33 + 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 new file mode 100755 index 0000000..410286c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.prepost.frag.out @@ -0,0 +1,143 @@ +spv.prepost.frag +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 94 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 90 + ExecutionMode 4 OriginUpperLeft + Source GLSL 140 + Name 4 "main" + Name 8 "index" + Name 14 "s" + MemberName 14(s) 0 "y" + Name 16 "str" + Name 22 "t" + Name 50 "x" + Name 61 "y" + Name 66 "z" + Name 73 "v" + Name 90 "gl_FragColor" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypePointer Function 6(int) + 9: 6(int) Constant 5 + 10: TypeFloat 32 + 11: TypeInt 32 0 + 12: 11(int) Constant 5 + 13: TypeArray 10(float) 12 + 14(s): TypeStruct 13 + 15: TypePointer Function 14(s) + 17: 6(int) Constant 0 + 18: 6(int) Constant 4 + 19: 10(float) Constant 1073741824 + 20: TypePointer Function 10(float) + 24: 6(int) Constant 1 + 28: 10(float) Constant 1065353216 + 71: TypeVector 10(float) 4 + 72: TypePointer Function 71(fvec4) + 74: 10(float) Constant 1077936128 + 75: 10(float) Constant 1082130432 + 76: 71(fvec4) ConstantComposite 28 19 74 75 + 77: 11(int) Constant 2 + 81: 11(int) Constant 1 + 83: 11(int) Constant 3 + 87: 11(int) Constant 0 + 89: TypePointer Output 71(fvec4) +90(gl_FragColor): 89(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 8(index): 7(ptr) Variable Function + 16(str): 15(ptr) Variable Function + 22(t): 20(ptr) Variable Function + 50(x): 20(ptr) Variable Function + 61(y): 20(ptr) Variable Function + 66(z): 20(ptr) Variable Function + 73(v): 72(ptr) Variable Function + Store 8(index) 9 + 21: 20(ptr) AccessChain 16(str) 17 18 + Store 21 19 + 23: 6(int) Load 8(index) + 25: 6(int) ISub 23 24 + Store 8(index) 25 + 26: 20(ptr) AccessChain 16(str) 17 25 + 27: 10(float) Load 26 + 29: 10(float) FAdd 27 28 + Store 26 29 + Store 22(t) 29 + 30: 10(float) Load 22(t) + 31: 20(ptr) AccessChain 16(str) 17 18 + 32: 10(float) Load 31 + 33: 10(float) FAdd 32 30 + 34: 20(ptr) AccessChain 16(str) 17 18 + Store 34 33 + 35: 20(ptr) AccessChain 16(str) 17 18 + 36: 10(float) Load 35 + 37: 10(float) FSub 36 28 + Store 35 37 + Store 22(t) 36 + 38: 6(int) Load 8(index) + 39: 6(int) IAdd 38 24 + Store 8(index) 39 + 40: 10(float) Load 22(t) + 41: 20(ptr) AccessChain 16(str) 17 38 + 42: 10(float) Load 41 + 43: 10(float) FAdd 42 40 + 44: 20(ptr) AccessChain 16(str) 17 38 + Store 44 43 + 45: 6(int) Load 8(index) + 46: 6(int) ISub 45 24 + Store 8(index) 46 + 47: 20(ptr) AccessChain 16(str) 17 46 + 48: 10(float) Load 47 + 49: 10(float) FSub 48 28 + Store 47 49 + 51: 20(ptr) AccessChain 16(str) 17 18 + 52: 10(float) Load 51 + Store 50(x) 52 + 53: 10(float) Load 50(x) + 54: 10(float) FAdd 53 28 + Store 50(x) 54 + 55: 10(float) Load 50(x) + 56: 10(float) FSub 55 28 + Store 50(x) 56 + 57: 10(float) Load 50(x) + 58: 10(float) FAdd 57 28 + Store 50(x) 58 + 59: 10(float) Load 50(x) + 60: 10(float) FSub 59 28 + Store 50(x) 60 + 62: 10(float) Load 50(x) + 63: 10(float) Load 50(x) + 64: 10(float) FAdd 63 28 + Store 50(x) 64 + 65: 10(float) FMul 62 64 + Store 61(y) 65 + 67: 10(float) Load 61(y) + 68: 10(float) Load 50(x) + 69: 10(float) FSub 68 28 + Store 50(x) 69 + 70: 10(float) FMul 67 68 + Store 66(z) 70 + Store 73(v) 76 + 78: 20(ptr) AccessChain 73(v) 77 + 79: 10(float) Load 78 + 80: 10(float) FSub 79 28 + Store 78 80 + 82: 20(ptr) AccessChain 73(v) 81 + Store 82 79 + 84: 20(ptr) AccessChain 73(v) 83 + 85: 10(float) Load 84 + 86: 10(float) FSub 85 28 + Store 84 86 + 88: 20(ptr) AccessChain 73(v) 87 + Store 88 86 + 91: 10(float) Load 66(z) + 92: 71(fvec4) Load 73(v) + 93: 71(fvec4) VectorTimesScalar 92 91 + Store 90(gl_FragColor) 93 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.pushConstant.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.pushConstant.vert.out new file mode 100644 index 0000000..bdefd63 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.pushConstant.vert.out @@ -0,0 +1,63 @@ +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 +// Id's are bound by 35 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 24 + Source GLSL 400 + Name 4 "main" + Name 11 "Material" + MemberName 11(Material) 0 "kind" + MemberName 11(Material) 1 "fa" + Name 13 "matInst" + Name 24 "color" + Decorate 10 ArrayStride 4 + MemberDecorate 11(Material) 0 Offset 0 + MemberDecorate 11(Material) 1 Offset 4 + Decorate 11(Material) Block + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypeFloat 32 + 8: TypeInt 32 0 + 9: 8(int) Constant 3 + 10: TypeArray 7(float) 9 + 11(Material): TypeStruct 6(int) 10 + 12: TypePointer PushConstant 11(Material) + 13(matInst): 12(ptr) Variable PushConstant + 14: 6(int) Constant 0 + 15: TypePointer PushConstant 6(int) + 22: TypeVector 7(float) 4 + 23: TypePointer Output 22(fvec4) + 24(color): 23(ptr) Variable Output + 25: 7(float) Constant 1045220557 + 26: 22(fvec4) ConstantComposite 25 25 25 25 + 28: 7(float) Constant 1056964608 + 29: 22(fvec4) ConstantComposite 28 28 28 28 + 31: 7(float) Constant 0 + 32: 22(fvec4) ConstantComposite 31 31 31 31 + 4(main): 2 Function None 3 + 5: Label + 16: 15(ptr) AccessChain 13(matInst) 14 + 17: 6(int) Load 16 + SelectionMerge 21 None + Switch 17 20 + case 1: 18 + case 2: 19 + 20: Label + Store 24(color) 32 + Branch 21 + 18: Label + Store 24(color) 26 + Branch 21 + 19: Label + Store 24(color) 29 + Branch 21 + 21: Label + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.pushConstantAnon.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.pushConstantAnon.vert.out new file mode 100755 index 0000000..9559815 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.pushConstantAnon.vert.out @@ -0,0 +1,66 @@ +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 +// Id's are bound by 38 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 24 + Source GLSL 400 + Name 4 "main" + Name 11 "Material" + MemberName 11(Material) 0 "kind" + MemberName 11(Material) 1 "fa" + Name 13 "" + Name 24 "color" + Decorate 10 ArrayStride 4 + MemberDecorate 11(Material) 0 Offset 0 + MemberDecorate 11(Material) 1 Offset 4 + Decorate 11(Material) Block + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypeFloat 32 + 8: TypeInt 32 0 + 9: 8(int) Constant 3 + 10: TypeArray 7(float) 9 + 11(Material): TypeStruct 6(int) 10 + 12: TypePointer PushConstant 11(Material) + 13: 12(ptr) Variable PushConstant + 14: 6(int) Constant 0 + 15: TypePointer PushConstant 6(int) + 22: TypeVector 7(float) 4 + 23: TypePointer Output 22(fvec4) + 24(color): 23(ptr) Variable Output + 25: 7(float) Constant 1045220557 + 26: 22(fvec4) ConstantComposite 25 25 25 25 + 28: 7(float) Constant 1056964608 + 29: 22(fvec4) ConstantComposite 28 28 28 28 + 31: 6(int) Constant 1 + 32: TypePointer PushConstant 7(float) + 4(main): 2 Function None 3 + 5: Label + 16: 15(ptr) AccessChain 13 14 + 17: 6(int) Load 16 + SelectionMerge 21 None + Switch 17 20 + case 1: 18 + case 2: 19 + 20: Label + 33: 32(ptr) AccessChain 13 31 31 + 34: 7(float) Load 33 + 35: 22(fvec4) CompositeConstruct 34 34 34 34 + Store 24(color) 35 + Branch 21 + 18: Label + Store 24(color) 26 + Branch 21 + 19: Label + Store 24(color) 29 + Branch 21 + 21: Label + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.qualifiers.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.qualifiers.vert.out new file mode 100755 index 0000000..37f474c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.qualifiers.vert.out @@ -0,0 +1,50 @@ +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 +// Id's are bound by 21 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 9 11 13 15 17 19 + Source GLSL 430 + Name 4 "main" + Name 9 "outVc" + Name 11 "inV" + Name 13 "outVs" + Name 15 "outVf" + Name 17 "outVn" + Name 19 "outVcn" + Decorate 9(outVc) Centroid + Decorate 15(outVf) Flat + Decorate 17(outVn) NoPerspective + Decorate 19(outVcn) NoPerspective + Decorate 19(outVcn) Centroid + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Output 7(fvec4) + 9(outVc): 8(ptr) Variable Output + 10: TypePointer Input 7(fvec4) + 11(inV): 10(ptr) Variable Input + 13(outVs): 8(ptr) Variable Output + 15(outVf): 8(ptr) Variable Output + 17(outVn): 8(ptr) Variable Output + 19(outVcn): 8(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 12: 7(fvec4) Load 11(inV) + Store 9(outVc) 12 + 14: 7(fvec4) Load 11(inV) + Store 13(outVs) 14 + 16: 7(fvec4) Load 11(inV) + Store 15(outVf) 16 + 18: 7(fvec4) Load 11(inV) + Store 17(outVn) 18 + 20: 7(fvec4) Load 11(inV) + Store 19(outVcn) 20 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.queryL.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.queryL.frag.out new file mode 100755 index 0000000..fbdcbc8 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.queryL.frag.out @@ -0,0 +1,314 @@ +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 +// Id's are bound by 224 + + Capability Shader + Capability SampledRect + Capability Sampled1D + Capability SampledCubeArray + Capability SampledBuffer + Capability ImageQuery + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" + ExecutionMode 4 OriginUpperLeft + Source GLSL 430 + Name 4 "main" + Name 9 "lod" + Name 13 "samp1D" + Name 16 "pf" + Name 23 "isamp2D" + Name 25 "pf2" + Name 34 "usamp3D" + Name 38 "pf3" + Name 46 "sampCube" + Name 55 "isamp1DA" + Name 64 "usamp2DA" + Name 73 "isampCubeA" + Name 82 "samp1Ds" + Name 91 "samp2Ds" + Name 100 "sampCubes" + Name 109 "samp1DAs" + Name 118 "samp2DAs" + Name 127 "sampCubeAs" + Name 134 "levels" + Name 141 "usamp2D" + Name 150 "isamp3D" + Name 159 "isampCube" + Name 173 "samp2DA" + Name 182 "usampCubeA" + Name 219 "sampBuf" + Name 223 "sampRect" + Decorate 13(samp1D) DescriptorSet 0 + Decorate 23(isamp2D) DescriptorSet 0 + Decorate 34(usamp3D) DescriptorSet 0 + Decorate 46(sampCube) DescriptorSet 0 + Decorate 55(isamp1DA) DescriptorSet 0 + Decorate 64(usamp2DA) DescriptorSet 0 + Decorate 73(isampCubeA) DescriptorSet 0 + Decorate 82(samp1Ds) DescriptorSet 0 + Decorate 91(samp2Ds) DescriptorSet 0 + Decorate 100(sampCubes) DescriptorSet 0 + Decorate 109(samp1DAs) DescriptorSet 0 + Decorate 118(samp2DAs) DescriptorSet 0 + Decorate 127(sampCubeAs) DescriptorSet 0 + Decorate 141(usamp2D) DescriptorSet 0 + Decorate 150(isamp3D) DescriptorSet 0 + Decorate 159(isampCube) DescriptorSet 0 + Decorate 173(samp2DA) DescriptorSet 0 + Decorate 182(usampCubeA) DescriptorSet 0 + Decorate 219(sampBuf) DescriptorSet 0 + Decorate 223(sampRect) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 2 + 8: TypePointer Function 7(fvec2) + 10: TypeImage 6(float) 1D sampled format:Unknown + 11: TypeSampledImage 10 + 12: TypePointer UniformConstant 11 + 13(samp1D): 12(ptr) Variable UniformConstant + 15: TypePointer Function 6(float) + 19: TypeInt 32 1 + 20: TypeImage 19(int) 2D sampled format:Unknown + 21: TypeSampledImage 20 + 22: TypePointer UniformConstant 21 + 23(isamp2D): 22(ptr) Variable UniformConstant + 30: TypeInt 32 0 + 31: TypeImage 30(int) 3D sampled format:Unknown + 32: TypeSampledImage 31 + 33: TypePointer UniformConstant 32 + 34(usamp3D): 33(ptr) Variable UniformConstant + 36: TypeVector 6(float) 3 + 37: TypePointer Function 36(fvec3) + 43: TypeImage 6(float) Cube sampled format:Unknown + 44: TypeSampledImage 43 + 45: TypePointer UniformConstant 44 + 46(sampCube): 45(ptr) Variable UniformConstant + 52: TypeImage 19(int) 1D array sampled format:Unknown + 53: TypeSampledImage 52 + 54: TypePointer UniformConstant 53 + 55(isamp1DA): 54(ptr) Variable UniformConstant + 61: TypeImage 30(int) 2D array sampled format:Unknown + 62: TypeSampledImage 61 + 63: TypePointer UniformConstant 62 + 64(usamp2DA): 63(ptr) Variable UniformConstant + 70: TypeImage 19(int) Cube array sampled format:Unknown + 71: TypeSampledImage 70 + 72: TypePointer UniformConstant 71 + 73(isampCubeA): 72(ptr) Variable UniformConstant + 79: TypeImage 6(float) 1D depth sampled format:Unknown + 80: TypeSampledImage 79 + 81: TypePointer UniformConstant 80 + 82(samp1Ds): 81(ptr) Variable UniformConstant + 88: TypeImage 6(float) 2D depth sampled format:Unknown + 89: TypeSampledImage 88 + 90: TypePointer UniformConstant 89 + 91(samp2Ds): 90(ptr) Variable UniformConstant + 97: TypeImage 6(float) Cube depth sampled format:Unknown + 98: TypeSampledImage 97 + 99: TypePointer UniformConstant 98 + 100(sampCubes): 99(ptr) Variable UniformConstant + 106: TypeImage 6(float) 1D depth array sampled format:Unknown + 107: TypeSampledImage 106 + 108: TypePointer UniformConstant 107 + 109(samp1DAs): 108(ptr) Variable UniformConstant + 115: TypeImage 6(float) 2D depth array sampled format:Unknown + 116: TypeSampledImage 115 + 117: TypePointer UniformConstant 116 + 118(samp2DAs): 117(ptr) Variable UniformConstant + 124: TypeImage 6(float) Cube depth array sampled format:Unknown + 125: TypeSampledImage 124 + 126: TypePointer UniformConstant 125 + 127(sampCubeAs): 126(ptr) Variable UniformConstant + 133: TypePointer Function 19(int) + 138: TypeImage 30(int) 2D sampled format:Unknown + 139: TypeSampledImage 138 + 140: TypePointer UniformConstant 139 + 141(usamp2D): 140(ptr) Variable UniformConstant + 147: TypeImage 19(int) 3D sampled format:Unknown + 148: TypeSampledImage 147 + 149: TypePointer UniformConstant 148 + 150(isamp3D): 149(ptr) Variable UniformConstant + 156: TypeImage 19(int) Cube sampled format:Unknown + 157: TypeSampledImage 156 + 158: TypePointer UniformConstant 157 + 159(isampCube): 158(ptr) Variable UniformConstant + 170: TypeImage 6(float) 2D array sampled format:Unknown + 171: TypeSampledImage 170 + 172: TypePointer UniformConstant 171 + 173(samp2DA): 172(ptr) Variable UniformConstant + 179: TypeImage 30(int) Cube array sampled format:Unknown + 180: TypeSampledImage 179 + 181: TypePointer UniformConstant 180 + 182(usampCubeA): 181(ptr) Variable UniformConstant + 216: TypeImage 6(float) Buffer sampled format:Unknown + 217: TypeSampledImage 216 + 218: TypePointer UniformConstant 217 + 219(sampBuf): 218(ptr) Variable UniformConstant + 220: TypeImage 6(float) Rect sampled format:Unknown + 221: TypeSampledImage 220 + 222: TypePointer UniformConstant 221 + 223(sampRect): 222(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label + 9(lod): 8(ptr) Variable Function + 16(pf): 15(ptr) Variable Function + 25(pf2): 8(ptr) Variable Function + 38(pf3): 37(ptr) Variable Function + 134(levels): 133(ptr) Variable Function + 14: 11 Load 13(samp1D) + 17: 6(float) Load 16(pf) + 18: 7(fvec2) ImageQueryLod 14 17 + Store 9(lod) 18 + 24: 21 Load 23(isamp2D) + 26: 7(fvec2) Load 25(pf2) + 27: 7(fvec2) ImageQueryLod 24 26 + 28: 7(fvec2) Load 9(lod) + 29: 7(fvec2) FAdd 28 27 + Store 9(lod) 29 + 35: 32 Load 34(usamp3D) + 39: 36(fvec3) Load 38(pf3) + 40: 7(fvec2) ImageQueryLod 35 39 + 41: 7(fvec2) Load 9(lod) + 42: 7(fvec2) FAdd 41 40 + Store 9(lod) 42 + 47: 44 Load 46(sampCube) + 48: 36(fvec3) Load 38(pf3) + 49: 7(fvec2) ImageQueryLod 47 48 + 50: 7(fvec2) Load 9(lod) + 51: 7(fvec2) FAdd 50 49 + Store 9(lod) 51 + 56: 53 Load 55(isamp1DA) + 57: 6(float) Load 16(pf) + 58: 7(fvec2) ImageQueryLod 56 57 + 59: 7(fvec2) Load 9(lod) + 60: 7(fvec2) FAdd 59 58 + Store 9(lod) 60 + 65: 62 Load 64(usamp2DA) + 66: 7(fvec2) Load 25(pf2) + 67: 7(fvec2) ImageQueryLod 65 66 + 68: 7(fvec2) Load 9(lod) + 69: 7(fvec2) FAdd 68 67 + Store 9(lod) 69 + 74: 71 Load 73(isampCubeA) + 75: 36(fvec3) Load 38(pf3) + 76: 7(fvec2) ImageQueryLod 74 75 + 77: 7(fvec2) Load 9(lod) + 78: 7(fvec2) FAdd 77 76 + Store 9(lod) 78 + 83: 80 Load 82(samp1Ds) + 84: 6(float) Load 16(pf) + 85: 7(fvec2) ImageQueryLod 83 84 + 86: 7(fvec2) Load 9(lod) + 87: 7(fvec2) FAdd 86 85 + Store 9(lod) 87 + 92: 89 Load 91(samp2Ds) + 93: 7(fvec2) Load 25(pf2) + 94: 7(fvec2) ImageQueryLod 92 93 + 95: 7(fvec2) Load 9(lod) + 96: 7(fvec2) FAdd 95 94 + Store 9(lod) 96 + 101: 98 Load 100(sampCubes) + 102: 36(fvec3) Load 38(pf3) + 103: 7(fvec2) ImageQueryLod 101 102 + 104: 7(fvec2) Load 9(lod) + 105: 7(fvec2) FAdd 104 103 + Store 9(lod) 105 + 110: 107 Load 109(samp1DAs) + 111: 6(float) Load 16(pf) + 112: 7(fvec2) ImageQueryLod 110 111 + 113: 7(fvec2) Load 9(lod) + 114: 7(fvec2) FAdd 113 112 + Store 9(lod) 114 + 119: 116 Load 118(samp2DAs) + 120: 7(fvec2) Load 25(pf2) + 121: 7(fvec2) ImageQueryLod 119 120 + 122: 7(fvec2) Load 9(lod) + 123: 7(fvec2) FAdd 122 121 + Store 9(lod) 123 + 128: 125 Load 127(sampCubeAs) + 129: 36(fvec3) Load 38(pf3) + 130: 7(fvec2) ImageQueryLod 128 129 + 131: 7(fvec2) Load 9(lod) + 132: 7(fvec2) FAdd 131 130 + Store 9(lod) 132 + 135: 11 Load 13(samp1D) + 136: 10 Image 135 + 137: 19(int) ImageQueryLevels 136 + Store 134(levels) 137 + 142: 139 Load 141(usamp2D) + 143: 138 Image 142 + 144: 19(int) ImageQueryLevels 143 + 145: 19(int) Load 134(levels) + 146: 19(int) IAdd 145 144 + Store 134(levels) 146 + 151: 148 Load 150(isamp3D) + 152: 147 Image 151 + 153: 19(int) ImageQueryLevels 152 + 154: 19(int) Load 134(levels) + 155: 19(int) IAdd 154 153 + Store 134(levels) 155 + 160: 157 Load 159(isampCube) + 161: 156 Image 160 + 162: 19(int) ImageQueryLevels 161 + 163: 19(int) Load 134(levels) + 164: 19(int) IAdd 163 162 + Store 134(levels) 164 + 165: 53 Load 55(isamp1DA) + 166: 52 Image 165 + 167: 19(int) ImageQueryLevels 166 + 168: 19(int) Load 134(levels) + 169: 19(int) IAdd 168 167 + Store 134(levels) 169 + 174: 171 Load 173(samp2DA) + 175: 170 Image 174 + 176: 19(int) ImageQueryLevels 175 + 177: 19(int) Load 134(levels) + 178: 19(int) IAdd 177 176 + Store 134(levels) 178 + 183: 180 Load 182(usampCubeA) + 184: 179 Image 183 + 185: 19(int) ImageQueryLevels 184 + 186: 19(int) Load 134(levels) + 187: 19(int) IAdd 186 185 + Store 134(levels) 187 + 188: 80 Load 82(samp1Ds) + 189: 79 Image 188 + 190: 19(int) ImageQueryLevels 189 + Store 134(levels) 190 + 191: 89 Load 91(samp2Ds) + 192: 88 Image 191 + 193: 19(int) ImageQueryLevels 192 + 194: 19(int) Load 134(levels) + 195: 19(int) IAdd 194 193 + Store 134(levels) 195 + 196: 98 Load 100(sampCubes) + 197: 97 Image 196 + 198: 19(int) ImageQueryLevels 197 + 199: 19(int) Load 134(levels) + 200: 19(int) IAdd 199 198 + Store 134(levels) 200 + 201: 107 Load 109(samp1DAs) + 202: 106 Image 201 + 203: 19(int) ImageQueryLevels 202 + 204: 19(int) Load 134(levels) + 205: 19(int) IAdd 204 203 + Store 134(levels) 205 + 206: 116 Load 118(samp2DAs) + 207: 115 Image 206 + 208: 19(int) ImageQueryLevels 207 + 209: 19(int) Load 134(levels) + 210: 19(int) IAdd 209 208 + Store 134(levels) 210 + 211: 125 Load 127(sampCubeAs) + 212: 124 Image 211 + 213: 19(int) ImageQueryLevels 212 + 214: 19(int) Load 134(levels) + 215: 19(int) IAdd 214 213 + Store 134(levels) 215 + Return + FunctionEnd 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 new file mode 100644 index 0000000..c8273dd --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.register.autoassign-2.frag.out @@ -0,0 +1,80 @@ +spv.register.autoassign-2.frag +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 47 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 44 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + Name 12 "@main(struct-PS_OUTPUT-vf41;" + Name 11 "psout" + Name 18 "g_tScene[0]" + Name 22 "g_tSamp" + Name 31 "g_tScene[1]" + Name 39 "psout" + Name 40 "param" + Name 44 "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 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8(PS_OUTPUT): TypeStruct 7(fvec4) + 9: TypePointer Function 8(PS_OUTPUT) + 10: TypeFunction 2 9(ptr) + 14: TypeInt 32 1 + 15: 14(int) Constant 0 + 16: TypeImage 6(float) 2D sampled format:Unknown + 17: TypePointer UniformConstant 16 + 18(g_tScene[0]): 17(ptr) Variable UniformConstant + 20: TypeSampler + 21: TypePointer UniformConstant 20 + 22(g_tSamp): 21(ptr) Variable UniformConstant + 24: TypeSampledImage 16 + 26: TypeVector 6(float) 2 + 27: 6(float) Constant 1050253722 + 28: 6(float) Constant 1053609165 + 29: 26(fvec2) ConstantComposite 27 28 + 31(g_tScene[1]): 17(ptr) Variable UniformConstant + 37: TypePointer Function 7(fvec4) + 43: TypePointer Output 7(fvec4) + 44(Color): 43(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 39(psout): 9(ptr) Variable Function + 40(param): 9(ptr) Variable Function + 41: 2 FunctionCall 12(@main(struct-PS_OUTPUT-vf41;) 40(param) + 42:8(PS_OUTPUT) Load 40(param) + Store 39(psout) 42 + 45: 37(ptr) AccessChain 39(psout) 15 + 46: 7(fvec4) Load 45 + Store 44(Color) 46 + Return + FunctionEnd +12(@main(struct-PS_OUTPUT-vf41;): 2 Function None 10 + 11(psout): 9(ptr) FunctionParameter + 13: Label + 19: 16 Load 18(g_tScene[0]) + 23: 20 Load 22(g_tSamp) + 25: 24 SampledImage 19 23 + 30: 7(fvec4) ImageSampleImplicitLod 25 29 + 32: 16 Load 31(g_tScene[1]) + 33: 20 Load 22(g_tSamp) + 34: 24 SampledImage 32 33 + 35: 7(fvec4) ImageSampleImplicitLod 34 29 + 36: 7(fvec4) FAdd 30 35 + 38: 37(ptr) AccessChain 11(psout) 15 + Store 38 36 + Return + FunctionEnd 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 new file mode 100644 index 0000000..ae048ce --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.register.autoassign.frag.out @@ -0,0 +1,240 @@ +spv.register.autoassign.frag +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 155 + + Capability Shader + Capability Sampled1D + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main_ep" 151 + ExecutionMode 4 OriginUpperLeft + Name 4 "main_ep" + Name 9 "Func1(" + Name 11 "Func2(" + Name 13 "Func2_unused(" + Name 15 "PS_OUTPUT" + MemberName 15(PS_OUTPUT) 0 "Color" + Name 17 "@main_ep(" + Name 21 "g_tTex1" + Name 25 "g_sSamp1" + Name 31 "g_tTex2" + Name 33 "g_sSamp2" + Name 43 "g_tTex3" + Name 50 "g_sSamp3" + Name 68 "g_tTex4" + Name 73 "g_sSamp4" + Name 88 "g_tTex5" + Name 90 "g_sSamp5" + Name 97 "MyStruct_t" + MemberName 97(MyStruct_t) 0 "a" + MemberName 97(MyStruct_t) 1 "b" + MemberName 97(MyStruct_t) 2 "c" + Name 99 "$Global" + MemberName 99($Global) 0 "mystruct" + MemberName 99($Global) 1 "myfloat4_a" + MemberName 99($Global) 2 "myfloat4_b" + MemberName 99($Global) 3 "myint4_a" + Name 101 "" + Name 123 "g_tTex_unused1" + Name 125 "g_sSamp_unused1" + Name 130 "g_tTex_unused2" + Name 132 "g_sSamp_unused2" + Name 141 "psout" + Name 151 "Color" + Name 154 "g_tTex_unused3" + Decorate 21(g_tTex1) DescriptorSet 0 + Decorate 21(g_tTex1) Binding 11 + Decorate 25(g_sSamp1) DescriptorSet 0 + Decorate 25(g_sSamp1) Binding 5 + Decorate 31(g_tTex2) DescriptorSet 0 + Decorate 31(g_tTex2) Binding 14 + Decorate 33(g_sSamp2) DescriptorSet 0 + Decorate 33(g_sSamp2) Binding 6 + Decorate 43(g_tTex3) DescriptorSet 0 + Decorate 43(g_tTex3) Binding 13 + Decorate 50(g_sSamp3) DescriptorSet 0 + Decorate 50(g_sSamp3) Binding 7 + Decorate 68(g_tTex4) DescriptorSet 0 + Decorate 68(g_tTex4) Binding 15 + Decorate 73(g_sSamp4) DescriptorSet 0 + Decorate 73(g_sSamp4) Binding 8 + Decorate 88(g_tTex5) DescriptorSet 0 + Decorate 88(g_tTex5) Binding 16 + Decorate 90(g_sSamp5) DescriptorSet 0 + Decorate 90(g_sSamp5) Binding 9 + MemberDecorate 97(MyStruct_t) 0 Offset 0 + MemberDecorate 97(MyStruct_t) 1 Offset 4 + MemberDecorate 97(MyStruct_t) 2 Offset 16 + MemberDecorate 99($Global) 0 Offset 0 + MemberDecorate 99($Global) 1 Offset 32 + MemberDecorate 99($Global) 2 Offset 48 + MemberDecorate 99($Global) 3 Offset 64 + Decorate 99($Global) Block + Decorate 101 DescriptorSet 0 + Decorate 101 Binding 20 + Decorate 123(g_tTex_unused1) DescriptorSet 0 + Decorate 123(g_tTex_unused1) Binding 10 + Decorate 125(g_sSamp_unused1) DescriptorSet 0 + 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 154(g_tTex_unused3) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypeFunction 7(fvec4) + 15(PS_OUTPUT): TypeStruct 7(fvec4) + 16: TypeFunction 15(PS_OUTPUT) + 19: TypeImage 6(float) 1D sampled format:Unknown + 20: TypePointer UniformConstant 19 + 21(g_tTex1): 20(ptr) Variable UniformConstant + 23: TypeSampler + 24: TypePointer UniformConstant 23 + 25(g_sSamp1): 24(ptr) Variable UniformConstant + 27: TypeSampledImage 19 + 29: 6(float) Constant 1036831949 + 31(g_tTex2): 20(ptr) Variable UniformConstant + 33(g_sSamp2): 24(ptr) Variable UniformConstant + 36: 6(float) Constant 1045220557 + 39: TypeInt 32 0 + 40: 39(int) Constant 2 + 41: TypeArray 19 40 + 42: TypePointer UniformConstant 41 + 43(g_tTex3): 42(ptr) Variable UniformConstant + 44: TypeInt 32 1 + 45: 44(int) Constant 0 + 48: TypeArray 23 40 + 49: TypePointer UniformConstant 48 + 50(g_sSamp3): 49(ptr) Variable UniformConstant + 54: 6(float) Constant 1050253722 + 57: 44(int) Constant 1 + 65: 39(int) Constant 3 + 66: TypeArray 19 65 + 67: TypePointer UniformConstant 66 + 68(g_tTex4): 67(ptr) Variable UniformConstant + 71: TypeArray 23 65 + 72: TypePointer UniformConstant 71 + 73(g_sSamp4): 72(ptr) Variable UniformConstant + 77: 6(float) Constant 1053609165 + 80: 44(int) Constant 2 + 88(g_tTex5): 20(ptr) Variable UniformConstant + 90(g_sSamp5): 24(ptr) Variable UniformConstant + 93: 6(float) Constant 1056964608 + 96: TypeVector 6(float) 3 + 97(MyStruct_t): TypeStruct 44(int) 6(float) 96(fvec3) + 98: TypeVector 44(int) 4 + 99($Global): TypeStruct 97(MyStruct_t) 7(fvec4) 7(fvec4) 98(ivec4) + 100: TypePointer Uniform 99($Global) + 101: 100(ptr) Variable Uniform + 102: 39(int) Constant 1 + 103: TypePointer Uniform 6(float) +123(g_tTex_unused1): 20(ptr) Variable UniformConstant +125(g_sSamp_unused1): 24(ptr) Variable UniformConstant + 128: 6(float) Constant 1066192077 +130(g_tTex_unused2): 20(ptr) Variable UniformConstant +132(g_sSamp_unused2): 24(ptr) Variable UniformConstant + 135: 6(float) Constant 1067030938 + 140: TypePointer Function 15(PS_OUTPUT) + 145: TypePointer Function 7(fvec4) + 150: TypePointer Output 7(fvec4) + 151(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 + Return + FunctionEnd + 9(Func1(): 7(fvec4) Function None 8 + 10: Label + 22: 19 Load 21(g_tTex1) + 26: 23 Load 25(g_sSamp1) + 28: 27 SampledImage 22 26 + 30: 7(fvec4) ImageSampleImplicitLod 28 29 + 32: 19 Load 31(g_tTex2) + 34: 23 Load 33(g_sSamp2) + 35: 27 SampledImage 32 34 + 37: 7(fvec4) ImageSampleImplicitLod 35 36 + 38: 7(fvec4) FAdd 30 37 + 46: 20(ptr) AccessChain 43(g_tTex3) 45 + 47: 19 Load 46 + 51: 24(ptr) AccessChain 50(g_sSamp3) 45 + 52: 23 Load 51 + 53: 27 SampledImage 47 52 + 55: 7(fvec4) ImageSampleImplicitLod 53 54 + 56: 7(fvec4) FAdd 38 55 + 58: 20(ptr) AccessChain 43(g_tTex3) 57 + 59: 19 Load 58 + 60: 24(ptr) AccessChain 50(g_sSamp3) 57 + 61: 23 Load 60 + 62: 27 SampledImage 59 61 + 63: 7(fvec4) ImageSampleImplicitLod 62 54 + 64: 7(fvec4) FAdd 56 63 + 69: 20(ptr) AccessChain 68(g_tTex4) 57 + 70: 19 Load 69 + 74: 24(ptr) AccessChain 73(g_sSamp4) 57 + 75: 23 Load 74 + 76: 27 SampledImage 70 75 + 78: 7(fvec4) ImageSampleImplicitLod 76 77 + 79: 7(fvec4) FAdd 64 78 + 81: 20(ptr) AccessChain 68(g_tTex4) 80 + 82: 19 Load 81 + 83: 24(ptr) AccessChain 73(g_sSamp4) 80 + 84: 23 Load 83 + 85: 27 SampledImage 82 84 + 86: 7(fvec4) ImageSampleImplicitLod 85 77 + 87: 7(fvec4) FAdd 79 86 + 89: 19 Load 88(g_tTex5) + 91: 23 Load 90(g_sSamp5) + 92: 27 SampledImage 89 91 + 94: 7(fvec4) ImageSampleImplicitLod 92 93 + 95: 7(fvec4) FAdd 87 94 + 104: 103(ptr) AccessChain 101 45 80 102 + 105: 6(float) Load 104 + 106: 7(fvec4) CompositeConstruct 105 105 105 105 + 107: 7(fvec4) FAdd 95 106 + ReturnValue 107 + FunctionEnd + 11(Func2(): 7(fvec4) Function None 8 + 12: Label + 110: 19 Load 21(g_tTex1) + 111: 23 Load 25(g_sSamp1) + 112: 27 SampledImage 110 111 + 113: 7(fvec4) ImageSampleImplicitLod 112 29 + 114: 20(ptr) AccessChain 43(g_tTex3) 57 + 115: 19 Load 114 + 116: 24(ptr) AccessChain 50(g_sSamp3) 57 + 117: 23 Load 116 + 118: 27 SampledImage 115 117 + 119: 7(fvec4) ImageSampleImplicitLod 118 54 + 120: 7(fvec4) FAdd 113 119 + ReturnValue 120 + FunctionEnd +13(Func2_unused(): 7(fvec4) Function None 8 + 14: Label + 124: 19 Load 123(g_tTex_unused1) + 126: 23 Load 125(g_sSamp_unused1) + 127: 27 SampledImage 124 126 + 129: 7(fvec4) ImageSampleImplicitLod 127 128 + 131: 19 Load 130(g_tTex_unused2) + 133: 23 Load 132(g_sSamp_unused2) + 134: 27 SampledImage 131 133 + 136: 7(fvec4) ImageSampleImplicitLod 134 135 + 137: 7(fvec4) FAdd 129 136 + ReturnValue 137 + FunctionEnd + 17(@main_ep():15(PS_OUTPUT) Function None 16 + 18: Label + 141(psout): 140(ptr) Variable Function + 142: 7(fvec4) FunctionCall 9(Func1() + 143: 7(fvec4) FunctionCall 11(Func2() + 144: 7(fvec4) FAdd 142 143 + 146: 145(ptr) AccessChain 141(psout) 45 + Store 146 144 + 147:15(PS_OUTPUT) Load 141(psout) + ReturnValue 147 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.register.autoassign.rangetest.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.register.autoassign.rangetest.frag.out new file mode 100644 index 0000000..8eb76c9 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.register.autoassign.rangetest.frag.out @@ -0,0 +1,5 @@ +spv.register.autoassign.rangetest.frag +INTERNAL ERROR: mapped binding out of range: g_tSamp +INTERNAL ERROR: mapped binding out of range: g_tScene + +SPIR-V is not generated for failed compile or link 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 new file mode 100644 index 0000000..afadc48 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.register.noautoassign.frag.out @@ -0,0 +1,233 @@ +spv.register.noautoassign.frag +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 155 + + Capability Shader + Capability Sampled1D + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main_ep" 151 + ExecutionMode 4 OriginUpperLeft + Name 4 "main_ep" + Name 9 "Func1(" + Name 11 "Func2(" + Name 13 "Func2_unused(" + Name 15 "PS_OUTPUT" + MemberName 15(PS_OUTPUT) 0 "Color" + Name 17 "@main_ep(" + Name 21 "g_tTex1" + Name 25 "g_sSamp1" + Name 31 "g_tTex2" + Name 33 "g_sSamp2" + Name 43 "g_tTex3" + Name 50 "g_sSamp3" + Name 68 "g_tTex4" + Name 73 "g_sSamp4" + Name 88 "g_tTex5" + Name 90 "g_sSamp5" + Name 97 "MyStruct_t" + MemberName 97(MyStruct_t) 0 "a" + MemberName 97(MyStruct_t) 1 "b" + MemberName 97(MyStruct_t) 2 "c" + Name 99 "$Global" + MemberName 99($Global) 0 "mystruct" + MemberName 99($Global) 1 "myfloat4_a" + MemberName 99($Global) 2 "myfloat4_b" + MemberName 99($Global) 3 "myint4_a" + Name 101 "" + Name 123 "g_tTex_unused1" + Name 125 "g_sSamp_unused1" + Name 130 "g_tTex_unused2" + Name 132 "g_sSamp_unused2" + Name 141 "psout" + Name 151 "Color" + Name 154 "g_tTex_unused3" + Decorate 21(g_tTex1) DescriptorSet 0 + Decorate 21(g_tTex1) Binding 11 + Decorate 25(g_sSamp1) DescriptorSet 0 + Decorate 25(g_sSamp1) Binding 5 + Decorate 31(g_tTex2) DescriptorSet 0 + Decorate 33(g_sSamp2) DescriptorSet 0 + Decorate 43(g_tTex3) DescriptorSet 0 + Decorate 43(g_tTex3) Binding 13 + Decorate 50(g_sSamp3) DescriptorSet 0 + Decorate 50(g_sSamp3) Binding 7 + Decorate 68(g_tTex4) DescriptorSet 0 + Decorate 73(g_sSamp4) DescriptorSet 0 + Decorate 88(g_tTex5) DescriptorSet 0 + Decorate 90(g_sSamp5) DescriptorSet 0 + MemberDecorate 97(MyStruct_t) 0 Offset 0 + MemberDecorate 97(MyStruct_t) 1 Offset 4 + MemberDecorate 97(MyStruct_t) 2 Offset 16 + MemberDecorate 99($Global) 0 Offset 0 + MemberDecorate 99($Global) 1 Offset 32 + MemberDecorate 99($Global) 2 Offset 48 + MemberDecorate 99($Global) 3 Offset 64 + Decorate 99($Global) Block + Decorate 101 DescriptorSet 0 + Decorate 123(g_tTex_unused1) DescriptorSet 0 + Decorate 123(g_tTex_unused1) Binding 10 + Decorate 125(g_sSamp_unused1) DescriptorSet 0 + 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 154(g_tTex_unused3) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypeFunction 7(fvec4) + 15(PS_OUTPUT): TypeStruct 7(fvec4) + 16: TypeFunction 15(PS_OUTPUT) + 19: TypeImage 6(float) 1D sampled format:Unknown + 20: TypePointer UniformConstant 19 + 21(g_tTex1): 20(ptr) Variable UniformConstant + 23: TypeSampler + 24: TypePointer UniformConstant 23 + 25(g_sSamp1): 24(ptr) Variable UniformConstant + 27: TypeSampledImage 19 + 29: 6(float) Constant 1036831949 + 31(g_tTex2): 20(ptr) Variable UniformConstant + 33(g_sSamp2): 24(ptr) Variable UniformConstant + 36: 6(float) Constant 1045220557 + 39: TypeInt 32 0 + 40: 39(int) Constant 2 + 41: TypeArray 19 40 + 42: TypePointer UniformConstant 41 + 43(g_tTex3): 42(ptr) Variable UniformConstant + 44: TypeInt 32 1 + 45: 44(int) Constant 0 + 48: TypeArray 23 40 + 49: TypePointer UniformConstant 48 + 50(g_sSamp3): 49(ptr) Variable UniformConstant + 54: 6(float) Constant 1050253722 + 57: 44(int) Constant 1 + 65: 39(int) Constant 3 + 66: TypeArray 19 65 + 67: TypePointer UniformConstant 66 + 68(g_tTex4): 67(ptr) Variable UniformConstant + 71: TypeArray 23 65 + 72: TypePointer UniformConstant 71 + 73(g_sSamp4): 72(ptr) Variable UniformConstant + 77: 6(float) Constant 1053609165 + 80: 44(int) Constant 2 + 88(g_tTex5): 20(ptr) Variable UniformConstant + 90(g_sSamp5): 24(ptr) Variable UniformConstant + 93: 6(float) Constant 1056964608 + 96: TypeVector 6(float) 3 + 97(MyStruct_t): TypeStruct 44(int) 6(float) 96(fvec3) + 98: TypeVector 44(int) 4 + 99($Global): TypeStruct 97(MyStruct_t) 7(fvec4) 7(fvec4) 98(ivec4) + 100: TypePointer Uniform 99($Global) + 101: 100(ptr) Variable Uniform + 102: 39(int) Constant 1 + 103: TypePointer Uniform 6(float) +123(g_tTex_unused1): 20(ptr) Variable UniformConstant +125(g_sSamp_unused1): 24(ptr) Variable UniformConstant + 128: 6(float) Constant 1066192077 +130(g_tTex_unused2): 20(ptr) Variable UniformConstant +132(g_sSamp_unused2): 24(ptr) Variable UniformConstant + 135: 6(float) Constant 1067030938 + 140: TypePointer Function 15(PS_OUTPUT) + 145: TypePointer Function 7(fvec4) + 150: TypePointer Output 7(fvec4) + 151(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 + Return + FunctionEnd + 9(Func1(): 7(fvec4) Function None 8 + 10: Label + 22: 19 Load 21(g_tTex1) + 26: 23 Load 25(g_sSamp1) + 28: 27 SampledImage 22 26 + 30: 7(fvec4) ImageSampleImplicitLod 28 29 + 32: 19 Load 31(g_tTex2) + 34: 23 Load 33(g_sSamp2) + 35: 27 SampledImage 32 34 + 37: 7(fvec4) ImageSampleImplicitLod 35 36 + 38: 7(fvec4) FAdd 30 37 + 46: 20(ptr) AccessChain 43(g_tTex3) 45 + 47: 19 Load 46 + 51: 24(ptr) AccessChain 50(g_sSamp3) 45 + 52: 23 Load 51 + 53: 27 SampledImage 47 52 + 55: 7(fvec4) ImageSampleImplicitLod 53 54 + 56: 7(fvec4) FAdd 38 55 + 58: 20(ptr) AccessChain 43(g_tTex3) 57 + 59: 19 Load 58 + 60: 24(ptr) AccessChain 50(g_sSamp3) 57 + 61: 23 Load 60 + 62: 27 SampledImage 59 61 + 63: 7(fvec4) ImageSampleImplicitLod 62 54 + 64: 7(fvec4) FAdd 56 63 + 69: 20(ptr) AccessChain 68(g_tTex4) 57 + 70: 19 Load 69 + 74: 24(ptr) AccessChain 73(g_sSamp4) 57 + 75: 23 Load 74 + 76: 27 SampledImage 70 75 + 78: 7(fvec4) ImageSampleImplicitLod 76 77 + 79: 7(fvec4) FAdd 64 78 + 81: 20(ptr) AccessChain 68(g_tTex4) 80 + 82: 19 Load 81 + 83: 24(ptr) AccessChain 73(g_sSamp4) 80 + 84: 23 Load 83 + 85: 27 SampledImage 82 84 + 86: 7(fvec4) ImageSampleImplicitLod 85 77 + 87: 7(fvec4) FAdd 79 86 + 89: 19 Load 88(g_tTex5) + 91: 23 Load 90(g_sSamp5) + 92: 27 SampledImage 89 91 + 94: 7(fvec4) ImageSampleImplicitLod 92 93 + 95: 7(fvec4) FAdd 87 94 + 104: 103(ptr) AccessChain 101 45 80 102 + 105: 6(float) Load 104 + 106: 7(fvec4) CompositeConstruct 105 105 105 105 + 107: 7(fvec4) FAdd 95 106 + ReturnValue 107 + FunctionEnd + 11(Func2(): 7(fvec4) Function None 8 + 12: Label + 110: 19 Load 21(g_tTex1) + 111: 23 Load 25(g_sSamp1) + 112: 27 SampledImage 110 111 + 113: 7(fvec4) ImageSampleImplicitLod 112 29 + 114: 20(ptr) AccessChain 43(g_tTex3) 57 + 115: 19 Load 114 + 116: 24(ptr) AccessChain 50(g_sSamp3) 57 + 117: 23 Load 116 + 118: 27 SampledImage 115 117 + 119: 7(fvec4) ImageSampleImplicitLod 118 54 + 120: 7(fvec4) FAdd 113 119 + ReturnValue 120 + FunctionEnd +13(Func2_unused(): 7(fvec4) Function None 8 + 14: Label + 124: 19 Load 123(g_tTex_unused1) + 126: 23 Load 125(g_sSamp_unused1) + 127: 27 SampledImage 124 126 + 129: 7(fvec4) ImageSampleImplicitLod 127 128 + 131: 19 Load 130(g_tTex_unused2) + 133: 23 Load 132(g_sSamp_unused2) + 134: 27 SampledImage 131 133 + 136: 7(fvec4) ImageSampleImplicitLod 134 135 + 137: 7(fvec4) FAdd 129 136 + ReturnValue 137 + FunctionEnd + 17(@main_ep():15(PS_OUTPUT) Function None 16 + 18: Label + 141(psout): 140(ptr) Variable Function + 142: 7(fvec4) FunctionCall 9(Func1() + 143: 7(fvec4) FunctionCall 11(Func2() + 144: 7(fvec4) FAdd 142 143 + 146: 145(ptr) AccessChain 141(psout) 45 + Store 146 144 + 147:15(PS_OUTPUT) Load 141(psout) + ReturnValue 147 + 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 new file mode 100644 index 0000000..e2b544a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.rw.autoassign.frag.out @@ -0,0 +1,73 @@ +spv.rw.autoassign.frag +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 42 + + Capability Shader + Capability Sampled1D + Capability SampledBuffer + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 39 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 8 "PS_OUTPUT" + MemberName 8(PS_OUTPUT) 0 "Color" + Name 10 "@main(" + Name 13 "r00" + Name 16 "g_tTex1df1" + Name 23 "r01" + Name 26 "g_tBuf1du1" + Name 30 "psout" + Name 39 "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 + 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: TypePointer Function 6(float) + 14: TypeImage 6(float) 1D nonsampled format:R32f + 15: TypePointer UniformConstant 14 + 16(g_tTex1df1): 15(ptr) Variable UniformConstant + 18: TypeInt 32 1 + 19: 18(int) Constant 0 + 21: TypeInt 32 0 + 22: TypePointer Function 21(int) + 24: TypeImage 21(int) Buffer nonsampled format:R32ui + 25: TypePointer UniformConstant 24 + 26(g_tBuf1du1): 25(ptr) Variable UniformConstant + 29: TypePointer Function 8(PS_OUTPUT) + 31: 6(float) Constant 0 + 32: 7(fvec4) ConstantComposite 31 31 31 31 + 33: TypePointer Function 7(fvec4) + 38: TypePointer Output 7(fvec4) + 39(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 + Return + FunctionEnd + 10(@main():8(PS_OUTPUT) Function None 9 + 11: Label + 13(r00): 12(ptr) Variable Function + 23(r01): 22(ptr) Variable Function + 30(psout): 29(ptr) Variable Function + 17: 14 Load 16(g_tTex1df1) + 20: 6(float) ImageRead 17 19 + Store 13(r00) 20 + 27: 24 Load 26(g_tBuf1du1) + 28: 21(int) ImageRead 27 19 + Store 23(r01) 28 + 34: 33(ptr) AccessChain 30(psout) 19 + Store 34 32 + 35:8(PS_OUTPUT) Load 30(psout) + ReturnValue 35 + 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 new file mode 100644 index 0000000..6bae6bd --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.sampleMaskOverrideCoverage.frag.out @@ -0,0 +1,42 @@ +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 +// 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 + EntryPoint Fragment 4 "main" 11 19 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + SourceExtension "GL_NV_sample_mask_override_coverage" + Name 4 "main" + Name 11 "gl_SampleMask" + Name 19 "color" + Decorate 11(gl_SampleMask) BuiltIn SampleMask + Decorate 11(gl_SampleMask) OverrideCoverageNV + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypeInt 32 0 + 8: 7(int) Constant 1 + 9: TypeArray 6(int) 8 + 10: TypePointer Output 9 +11(gl_SampleMask): 10(ptr) Variable Output + 12: 6(int) Constant 0 + 13: 6(int) Constant 4294967295 + 14: TypePointer Output 6(int) + 16: TypeFloat 32 + 17: TypeVector 16(float) 4 + 18: TypePointer Input 17(fvec4) + 19(color): 18(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 15: 14(ptr) AccessChain 11(gl_SampleMask) 12 + Store 15 13 + 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 new file mode 100644 index 0000000..c654117 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.separate.frag.out @@ -0,0 +1,423 @@ +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 +// Id's are bound by 319 + + Capability Shader + Capability SampledRect + Capability Sampled1D + Capability SampledCubeArray + Capability SampledBuffer + Capability ImageMSArray + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 11 34 + ExecutionMode 4 OriginUpperLeft + Source GLSL 400 + Name 4 "main" + Name 6 "foo(" + Name 11 "color" + Name 14 "t2d" + Name 18 "s" + Name 31 "t3d" + Name 34 "i" + Name 41 "sA" + Name 58 "tex2D" + Name 64 "texCube" + Name 71 "texCubeArray" + Name 77 "sShadow" + Name 84 "itexCubeArray" + Name 91 "utexCubeArray" + Name 98 "tex1DArray" + Name 106 "itex1DArray" + Name 113 "utex1D" + Name 120 "itex1D" + Name 127 "utex1DArray" + Name 134 "texBuffer" + Name 146 "tex2DArray" + Name 158 "itex2D" + Name 165 "itex3D" + Name 172 "itexCube" + Name 179 "itex2DArray" + Name 186 "utex2D" + Name 193 "utex3D" + Name 200 "utexCube" + Name 207 "utex2DArray" + Name 214 "itex2DRect" + Name 221 "utex2DRect" + Name 228 "itexBuffer" + Name 235 "utexBuffer" + Name 242 "tex2DMS" + Name 249 "itex2DMS" + Name 256 "utex2DMS" + Name 263 "tex2DMSArray" + Name 270 "itex2DMSArray" + Name 277 "utex2DMSArray" + Name 284 "tex1D" + Name 294 "tex3D" + Name 305 "tex2DRect" + Decorate 14(t2d) DescriptorSet 0 + Decorate 18(s) DescriptorSet 0 + Decorate 31(t3d) DescriptorSet 0 + Decorate 34(i) Flat + Decorate 41(sA) DescriptorSet 0 + Decorate 58(tex2D) DescriptorSet 0 + Decorate 64(texCube) DescriptorSet 0 + Decorate 71(texCubeArray) DescriptorSet 0 + Decorate 77(sShadow) DescriptorSet 0 + Decorate 84(itexCubeArray) DescriptorSet 0 + Decorate 91(utexCubeArray) DescriptorSet 0 + Decorate 98(tex1DArray) DescriptorSet 0 + Decorate 106(itex1DArray) DescriptorSet 0 + Decorate 113(utex1D) DescriptorSet 0 + Decorate 120(itex1D) DescriptorSet 0 + Decorate 127(utex1DArray) DescriptorSet 0 + Decorate 134(texBuffer) DescriptorSet 0 + Decorate 146(tex2DArray) DescriptorSet 0 + Decorate 158(itex2D) DescriptorSet 0 + Decorate 165(itex3D) DescriptorSet 0 + Decorate 172(itexCube) DescriptorSet 0 + Decorate 179(itex2DArray) DescriptorSet 0 + Decorate 186(utex2D) DescriptorSet 0 + Decorate 193(utex3D) DescriptorSet 0 + Decorate 200(utexCube) DescriptorSet 0 + Decorate 207(utex2DArray) DescriptorSet 0 + Decorate 214(itex2DRect) DescriptorSet 0 + Decorate 221(utex2DRect) DescriptorSet 0 + Decorate 228(itexBuffer) DescriptorSet 0 + Decorate 235(utexBuffer) DescriptorSet 0 + Decorate 242(tex2DMS) DescriptorSet 0 + Decorate 249(itex2DMS) DescriptorSet 0 + Decorate 256(utex2DMS) DescriptorSet 0 + Decorate 263(tex2DMSArray) DescriptorSet 0 + Decorate 270(itex2DMSArray) DescriptorSet 0 + Decorate 277(utex2DMSArray) DescriptorSet 0 + Decorate 284(tex1D) DescriptorSet 0 + Decorate 294(tex3D) DescriptorSet 0 + Decorate 305(tex2DRect) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 8: TypeFloat 32 + 9: TypeVector 8(float) 4 + 10: TypePointer Output 9(fvec4) + 11(color): 10(ptr) Variable Output + 12: TypeImage 8(float) 2D sampled format:Unknown + 13: TypePointer UniformConstant 12 + 14(t2d): 13(ptr) Variable UniformConstant + 16: TypeSampler + 17: TypePointer UniformConstant 16 + 18(s): 17(ptr) Variable UniformConstant + 20: TypeSampledImage 12 + 22: TypeVector 8(float) 2 + 23: 8(float) Constant 1056964608 + 24: 22(fvec2) ConstantComposite 23 23 + 26: TypeImage 8(float) 3D sampled format:Unknown + 27: TypeInt 32 0 + 28: 27(int) Constant 4 + 29: TypeArray 26 28 + 30: TypePointer UniformConstant 29 + 31(t3d): 30(ptr) Variable UniformConstant + 32: TypeInt 32 1 + 33: TypePointer Input 32(int) + 34(i): 33(ptr) Variable Input + 36: TypePointer UniformConstant 26 + 39: TypeArray 16 28 + 40: TypePointer UniformConstant 39 + 41(sA): 40(ptr) Variable UniformConstant + 42: 32(int) Constant 2 + 45: TypeSampledImage 26 + 47: TypeVector 8(float) 3 + 48: 47(fvec3) ConstantComposite 23 23 23 + 58(tex2D): 13(ptr) Variable UniformConstant + 62: TypeImage 8(float) Cube sampled format:Unknown + 63: TypePointer UniformConstant 62 + 64(texCube): 63(ptr) Variable UniformConstant + 67: TypeSampledImage 62 + 69: TypeImage 8(float) Cube array sampled format:Unknown + 70: TypePointer UniformConstant 69 +71(texCubeArray): 70(ptr) Variable UniformConstant + 74: TypeSampledImage 69 + 77(sShadow): 17(ptr) Variable UniformConstant + 79: TypeImage 8(float) Cube depth array sampled format:Unknown + 80: TypeSampledImage 79 + 82: TypeImage 32(int) Cube array sampled format:Unknown + 83: TypePointer UniformConstant 82 +84(itexCubeArray): 83(ptr) Variable UniformConstant + 87: TypeSampledImage 82 + 89: TypeImage 27(int) Cube array sampled format:Unknown + 90: TypePointer UniformConstant 89 +91(utexCubeArray): 90(ptr) Variable UniformConstant + 94: TypeSampledImage 89 + 96: TypeImage 8(float) 1D array sampled format:Unknown + 97: TypePointer UniformConstant 96 + 98(tex1DArray): 97(ptr) Variable UniformConstant + 101: TypeImage 8(float) 1D depth array sampled format:Unknown + 102: TypeSampledImage 101 + 104: TypeImage 32(int) 1D array sampled format:Unknown + 105: TypePointer UniformConstant 104 +106(itex1DArray): 105(ptr) Variable UniformConstant + 109: TypeSampledImage 104 + 111: TypeImage 27(int) 1D sampled format:Unknown + 112: TypePointer UniformConstant 111 + 113(utex1D): 112(ptr) Variable UniformConstant + 116: TypeSampledImage 111 + 118: TypeImage 32(int) 1D sampled format:Unknown + 119: TypePointer UniformConstant 118 + 120(itex1D): 119(ptr) Variable UniformConstant + 123: TypeSampledImage 118 + 125: TypeImage 27(int) 1D array sampled format:Unknown + 126: TypePointer UniformConstant 125 +127(utex1DArray): 126(ptr) Variable UniformConstant + 130: TypeSampledImage 125 + 132: TypeImage 8(float) Buffer sampled format:Unknown + 133: TypePointer UniformConstant 132 + 134(texBuffer): 133(ptr) Variable UniformConstant + 137: TypeSampledImage 132 + 141: TypeImage 8(float) Cube depth sampled format:Unknown + 142: TypeSampledImage 141 + 144: TypeImage 8(float) 2D array sampled format:Unknown + 145: TypePointer UniformConstant 144 + 146(tex2DArray): 145(ptr) Variable UniformConstant + 149: TypeSampledImage 144 + 153: TypeImage 8(float) 2D depth array sampled format:Unknown + 154: TypeSampledImage 153 + 156: TypeImage 32(int) 2D sampled format:Unknown + 157: TypePointer UniformConstant 156 + 158(itex2D): 157(ptr) Variable UniformConstant + 161: TypeSampledImage 156 + 163: TypeImage 32(int) 3D sampled format:Unknown + 164: TypePointer UniformConstant 163 + 165(itex3D): 164(ptr) Variable UniformConstant + 168: TypeSampledImage 163 + 170: TypeImage 32(int) Cube sampled format:Unknown + 171: TypePointer UniformConstant 170 + 172(itexCube): 171(ptr) Variable UniformConstant + 175: TypeSampledImage 170 + 177: TypeImage 32(int) 2D array sampled format:Unknown + 178: TypePointer UniformConstant 177 +179(itex2DArray): 178(ptr) Variable UniformConstant + 182: TypeSampledImage 177 + 184: TypeImage 27(int) 2D sampled format:Unknown + 185: TypePointer UniformConstant 184 + 186(utex2D): 185(ptr) Variable UniformConstant + 189: TypeSampledImage 184 + 191: TypeImage 27(int) 3D sampled format:Unknown + 192: TypePointer UniformConstant 191 + 193(utex3D): 192(ptr) Variable UniformConstant + 196: TypeSampledImage 191 + 198: TypeImage 27(int) Cube sampled format:Unknown + 199: TypePointer UniformConstant 198 + 200(utexCube): 199(ptr) Variable UniformConstant + 203: TypeSampledImage 198 + 205: TypeImage 27(int) 2D array sampled format:Unknown + 206: TypePointer UniformConstant 205 +207(utex2DArray): 206(ptr) Variable UniformConstant + 210: TypeSampledImage 205 + 212: TypeImage 32(int) Rect sampled format:Unknown + 213: TypePointer UniformConstant 212 + 214(itex2DRect): 213(ptr) Variable UniformConstant + 217: TypeSampledImage 212 + 219: TypeImage 27(int) Rect sampled format:Unknown + 220: TypePointer UniformConstant 219 + 221(utex2DRect): 220(ptr) Variable UniformConstant + 224: TypeSampledImage 219 + 226: TypeImage 32(int) Buffer sampled format:Unknown + 227: TypePointer UniformConstant 226 + 228(itexBuffer): 227(ptr) Variable UniformConstant + 231: TypeSampledImage 226 + 233: TypeImage 27(int) Buffer sampled format:Unknown + 234: TypePointer UniformConstant 233 + 235(utexBuffer): 234(ptr) Variable UniformConstant + 238: TypeSampledImage 233 + 240: TypeImage 8(float) 2D multi-sampled sampled format:Unknown + 241: TypePointer UniformConstant 240 + 242(tex2DMS): 241(ptr) Variable UniformConstant + 245: TypeSampledImage 240 + 247: TypeImage 32(int) 2D multi-sampled sampled format:Unknown + 248: TypePointer UniformConstant 247 + 249(itex2DMS): 248(ptr) Variable UniformConstant + 252: TypeSampledImage 247 + 254: TypeImage 27(int) 2D multi-sampled sampled format:Unknown + 255: TypePointer UniformConstant 254 + 256(utex2DMS): 255(ptr) Variable UniformConstant + 259: TypeSampledImage 254 + 261: TypeImage 8(float) 2D array multi-sampled sampled format:Unknown + 262: TypePointer UniformConstant 261 +263(tex2DMSArray): 262(ptr) Variable UniformConstant + 266: TypeSampledImage 261 + 268: TypeImage 32(int) 2D array multi-sampled sampled format:Unknown + 269: TypePointer UniformConstant 268 +270(itex2DMSArray): 269(ptr) Variable UniformConstant + 273: TypeSampledImage 268 + 275: TypeImage 27(int) 2D array multi-sampled sampled format:Unknown + 276: TypePointer UniformConstant 275 +277(utex2DMSArray): 276(ptr) Variable UniformConstant + 280: TypeSampledImage 275 + 282: TypeImage 8(float) 1D sampled format:Unknown + 283: TypePointer UniformConstant 282 + 284(tex1D): 283(ptr) Variable UniformConstant + 287: TypeSampledImage 282 + 291: TypeImage 8(float) 1D depth sampled format:Unknown + 292: TypeSampledImage 291 + 294(tex3D): 36(ptr) Variable UniformConstant + 300: TypeImage 8(float) 2D depth sampled format:Unknown + 301: TypeSampledImage 300 + 303: TypeImage 8(float) Rect sampled format:Unknown + 304: TypePointer UniformConstant 303 + 305(tex2DRect): 304(ptr) Variable UniformConstant + 308: TypeSampledImage 303 + 312: TypeImage 8(float) Rect depth sampled format:Unknown + 313: TypeSampledImage 312 + 317: TypeSampledImage 96 + 4(main): 2 Function None 3 + 5: Label + 15: 12 Load 14(t2d) + 19: 16 Load 18(s) + 21: 20 SampledImage 15 19 + 25: 9(fvec4) ImageSampleImplicitLod 21 24 + Store 11(color) 25 + 35: 32(int) Load 34(i) + 37: 36(ptr) AccessChain 31(t3d) 35 + 38: 26 Load 37 + 43: 17(ptr) AccessChain 41(sA) 42 + 44: 16 Load 43 + 46: 45 SampledImage 38 44 + 49: 9(fvec4) ImageSampleImplicitLod 46 48 + 50: 9(fvec4) Load 11(color) + 51: 9(fvec4) FAdd 50 49 + Store 11(color) 51 + 52: 12 Load 14(t2d) + 53: 16 Load 18(s) + 54: 20 SampledImage 52 53 + 55: 9(fvec4) ImageSampleImplicitLod 54 24 + 56: 9(fvec4) Load 11(color) + 57: 9(fvec4) FAdd 56 55 + Store 11(color) 57 + Return + FunctionEnd + 6(foo(): 2 Function None 3 + 7: Label + 59: 12 Load 58(tex2D) + 60: 16 Load 18(s) + 61: 20 SampledImage 59 60 + 65: 62 Load 64(texCube) + 66: 16 Load 18(s) + 68: 67 SampledImage 65 66 + 72: 69 Load 71(texCubeArray) + 73: 16 Load 18(s) + 75: 74 SampledImage 72 73 + 76: 69 Load 71(texCubeArray) + 78: 16 Load 77(sShadow) + 81: 80 SampledImage 76 78 + 85: 82 Load 84(itexCubeArray) + 86: 16 Load 18(s) + 88: 87 SampledImage 85 86 + 92: 89 Load 91(utexCubeArray) + 93: 16 Load 18(s) + 95: 94 SampledImage 92 93 + 99: 96 Load 98(tex1DArray) + 100: 16 Load 77(sShadow) + 103: 102 SampledImage 99 100 + 107: 104 Load 106(itex1DArray) + 108: 16 Load 18(s) + 110: 109 SampledImage 107 108 + 114: 111 Load 113(utex1D) + 115: 16 Load 18(s) + 117: 116 SampledImage 114 115 + 121: 118 Load 120(itex1D) + 122: 16 Load 18(s) + 124: 123 SampledImage 121 122 + 128: 125 Load 127(utex1DArray) + 129: 16 Load 18(s) + 131: 130 SampledImage 128 129 + 135: 132 Load 134(texBuffer) + 136: 16 Load 18(s) + 138: 137 SampledImage 135 136 + 139: 62 Load 64(texCube) + 140: 16 Load 77(sShadow) + 143: 142 SampledImage 139 140 + 147: 144 Load 146(tex2DArray) + 148: 16 Load 18(s) + 150: 149 SampledImage 147 148 + 151: 144 Load 146(tex2DArray) + 152: 16 Load 77(sShadow) + 155: 154 SampledImage 151 152 + 159: 156 Load 158(itex2D) + 160: 16 Load 18(s) + 162: 161 SampledImage 159 160 + 166: 163 Load 165(itex3D) + 167: 16 Load 18(s) + 169: 168 SampledImage 166 167 + 173: 170 Load 172(itexCube) + 174: 16 Load 18(s) + 176: 175 SampledImage 173 174 + 180: 177 Load 179(itex2DArray) + 181: 16 Load 18(s) + 183: 182 SampledImage 180 181 + 187: 184 Load 186(utex2D) + 188: 16 Load 18(s) + 190: 189 SampledImage 187 188 + 194: 191 Load 193(utex3D) + 195: 16 Load 18(s) + 197: 196 SampledImage 194 195 + 201: 198 Load 200(utexCube) + 202: 16 Load 18(s) + 204: 203 SampledImage 201 202 + 208: 205 Load 207(utex2DArray) + 209: 16 Load 18(s) + 211: 210 SampledImage 208 209 + 215: 212 Load 214(itex2DRect) + 216: 16 Load 18(s) + 218: 217 SampledImage 215 216 + 222: 219 Load 221(utex2DRect) + 223: 16 Load 18(s) + 225: 224 SampledImage 222 223 + 229: 226 Load 228(itexBuffer) + 230: 16 Load 18(s) + 232: 231 SampledImage 229 230 + 236: 233 Load 235(utexBuffer) + 237: 16 Load 18(s) + 239: 238 SampledImage 236 237 + 243: 240 Load 242(tex2DMS) + 244: 16 Load 18(s) + 246: 245 SampledImage 243 244 + 250: 247 Load 249(itex2DMS) + 251: 16 Load 18(s) + 253: 252 SampledImage 250 251 + 257: 254 Load 256(utex2DMS) + 258: 16 Load 18(s) + 260: 259 SampledImage 257 258 + 264: 261 Load 263(tex2DMSArray) + 265: 16 Load 18(s) + 267: 266 SampledImage 264 265 + 271: 268 Load 270(itex2DMSArray) + 272: 16 Load 18(s) + 274: 273 SampledImage 271 272 + 278: 275 Load 277(utex2DMSArray) + 279: 16 Load 18(s) + 281: 280 SampledImage 278 279 + 285: 282 Load 284(tex1D) + 286: 16 Load 18(s) + 288: 287 SampledImage 285 286 + 289: 282 Load 284(tex1D) + 290: 16 Load 77(sShadow) + 293: 292 SampledImage 289 290 + 295: 26 Load 294(tex3D) + 296: 16 Load 18(s) + 297: 45 SampledImage 295 296 + 298: 12 Load 58(tex2D) + 299: 16 Load 77(sShadow) + 302: 301 SampledImage 298 299 + 306: 303 Load 305(tex2DRect) + 307: 16 Load 18(s) + 309: 308 SampledImage 306 307 + 310: 303 Load 305(tex2DRect) + 311: 16 Load 77(sShadow) + 314: 313 SampledImage 310 311 + 315: 96 Load 98(tex1DArray) + 316: 16 Load 18(s) + 318: 317 SampledImage 315 316 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.set.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.set.vert.out new file mode 100755 index 0000000..38cb669 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.set.vert.out @@ -0,0 +1,47 @@ +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 +// Id's are bound by 22 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 9 + Source GLSL 450 + Name 4 "main" + Name 9 "color" + Name 10 "setBuf" + MemberName 10(setBuf) 0 "color" + Name 12 "setBufInst" + Name 21 "samp2D" + MemberDecorate 10(setBuf) 0 Offset 0 + Decorate 10(setBuf) BufferBlock + Decorate 12(setBufInst) DescriptorSet 0 + Decorate 12(setBufInst) Binding 8 + Decorate 21(samp2D) DescriptorSet 4 + Decorate 21(samp2D) Binding 7 + 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(setBuf): TypeStruct 7(fvec4) + 11: TypePointer Uniform 10(setBuf) + 12(setBufInst): 11(ptr) Variable Uniform + 13: TypeInt 32 1 + 14: 13(int) Constant 0 + 15: TypePointer Uniform 7(fvec4) + 18: TypeImage 6(float) 2D sampled format:Unknown + 19: TypeSampledImage 18 + 20: TypePointer UniformConstant 19 + 21(samp2D): 20(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label + 16: 15(ptr) AccessChain 12(setBufInst) 14 + 17: 7(fvec4) Load 16 + Store 9(color) 17 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderBallot.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderBallot.comp.out new file mode 100644 index 0000000..b8d5e3a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderBallot.comp.out @@ -0,0 +1,375 @@ +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 +// Id's are bound by 298 + + Capability Shader + Capability Int64 + Capability SubgroupBallotKHR + Extension "SPV_KHR_shader_ballot" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "main" 10 12 21 23 26 29 32 + ExecutionMode 4 LocalSize 8 8 1 + Source GLSL 450 + SourceExtension "GL_ARB_gpu_shader_int64" + SourceExtension "GL_ARB_shader_ballot" + Name 4 "main" + Name 8 "invocation" + Name 10 "gl_SubGroupInvocationARB" + Name 12 "gl_SubGroupSizeARB" + Name 19 "relMask" + Name 21 "gl_SubGroupEqMaskARB" + Name 23 "gl_SubGroupGeMaskARB" + Name 26 "gl_SubGroupGtMaskARB" + Name 29 "gl_SubGroupLeMaskARB" + Name 32 "gl_SubGroupLtMaskARB" + Name 52 "Buffers" + MemberName 52(Buffers) 0 "f4" + MemberName 52(Buffers) 1 "i4" + MemberName 52(Buffers) 2 "u4" + Name 55 "data" + Decorate 10(gl_SubGroupInvocationARB) BuiltIn SubgroupLocalInvocationId + Decorate 12(gl_SubGroupSizeARB) BuiltIn SubgroupSize + Decorate 21(gl_SubGroupEqMaskARB) BuiltIn SubgroupEqMaskKHR + Decorate 23(gl_SubGroupGeMaskARB) BuiltIn SubgroupGeMaskKHR + Decorate 26(gl_SubGroupGtMaskARB) BuiltIn SubgroupGtMaskKHR + Decorate 29(gl_SubGroupLeMaskARB) BuiltIn SubgroupLeMaskKHR + Decorate 32(gl_SubGroupLtMaskARB) BuiltIn SubgroupLtMaskKHR + MemberDecorate 52(Buffers) 0 Offset 0 + MemberDecorate 52(Buffers) 1 Offset 16 + MemberDecorate 52(Buffers) 2 Offset 32 + Decorate 52(Buffers) BufferBlock + Decorate 55(data) DescriptorSet 0 + Decorate 55(data) Binding 0 + Decorate 297 BuiltIn WorkgroupSize + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: TypePointer Function 6(int) + 9: TypePointer Input 6(int) +10(gl_SubGroupInvocationARB): 9(ptr) Variable Input +12(gl_SubGroupSizeARB): 9(ptr) Variable Input + 15: 6(int) Constant 4 + 17: TypeInt 64 0 + 18: TypePointer Function 17(int) + 20: TypePointer Input 17(int) +21(gl_SubGroupEqMaskARB): 20(ptr) Variable Input +23(gl_SubGroupGeMaskARB): 20(ptr) Variable Input +26(gl_SubGroupGtMaskARB): 20(ptr) Variable Input +29(gl_SubGroupLeMaskARB): 20(ptr) Variable Input +32(gl_SubGroupLtMaskARB): 20(ptr) Variable Input + 36: TypeBool + 37: 36(bool) ConstantTrue + 38: TypeVector 6(int) 4 + 42: TypeVector 6(int) 2 + 48: TypeFloat 32 + 49: TypeVector 48(float) 4 + 50: TypeInt 32 1 + 51: TypeVector 50(int) 4 + 52(Buffers): TypeStruct 49(fvec4) 51(ivec4) 38(ivec4) + 53: TypeArray 52(Buffers) 15 + 54: TypePointer Uniform 53 + 55(data): 54(ptr) Variable Uniform + 57: 50(int) Constant 0 + 58: 6(int) Constant 0 + 59: TypePointer Uniform 48(float) + 66: 50(int) Constant 1 + 67: TypeVector 48(float) 2 + 68: TypePointer Uniform 49(fvec4) + 82: 50(int) Constant 2 + 83: TypeVector 48(float) 3 + 99: 50(int) Constant 3 + 114: TypePointer Uniform 50(int) + 121: TypeVector 50(int) 2 + 122: TypePointer Uniform 51(ivec4) + 136: TypeVector 50(int) 3 + 166: TypePointer Uniform 6(int) + 173: TypePointer Uniform 38(ivec4) + 187: TypeVector 6(int) 3 + 295: 6(int) Constant 8 + 296: 6(int) Constant 1 + 297: 187(ivec3) ConstantComposite 295 295 296 + 4(main): 2 Function None 3 + 5: Label + 8(invocation): 7(ptr) Variable Function + 19(relMask): 18(ptr) Variable Function + 11: 6(int) Load 10(gl_SubGroupInvocationARB) + 13: 6(int) Load 12(gl_SubGroupSizeARB) + 14: 6(int) IAdd 11 13 + 16: 6(int) UMod 14 15 + Store 8(invocation) 16 + 22: 17(int) Load 21(gl_SubGroupEqMaskARB) + 24: 17(int) Load 23(gl_SubGroupGeMaskARB) + 25: 17(int) IAdd 22 24 + 27: 17(int) Load 26(gl_SubGroupGtMaskARB) + 28: 17(int) IAdd 25 27 + 30: 17(int) Load 29(gl_SubGroupLeMaskARB) + 31: 17(int) IAdd 28 30 + 33: 17(int) Load 32(gl_SubGroupLtMaskARB) + 34: 17(int) IAdd 31 33 + Store 19(relMask) 34 + 35: 17(int) Load 19(relMask) + 39: 38(ivec4) SubgroupBallotKHR 37 + 40: 6(int) CompositeExtract 39 0 + 41: 6(int) CompositeExtract 39 1 + 43: 42(ivec2) CompositeConstruct 40 41 + 44: 17(int) Bitcast 43 + 45: 36(bool) IEqual 35 44 + SelectionMerge 47 None + BranchConditional 45 46 216 + 46: Label + 56: 6(int) Load 8(invocation) + 60: 59(ptr) AccessChain 55(data) 57 57 58 + 61: 48(float) Load 60 + 62: 6(int) Load 8(invocation) + 63: 48(float) SubgroupReadInvocationKHR 61 62 + 64: 59(ptr) AccessChain 55(data) 56 57 58 + Store 64 63 + 65: 6(int) Load 8(invocation) + 69: 68(ptr) AccessChain 55(data) 66 57 + 70: 49(fvec4) Load 69 + 71: 67(fvec2) VectorShuffle 70 70 0 1 + 72: 6(int) Load 8(invocation) + 73: 48(float) CompositeExtract 71 0 + 74: 48(float) SubgroupReadInvocationKHR 73 72 + 75: 48(float) CompositeExtract 71 1 + 76: 48(float) SubgroupReadInvocationKHR 75 72 + 77: 67(fvec2) CompositeConstruct 74 76 + 78: 68(ptr) AccessChain 55(data) 65 57 + 79: 49(fvec4) Load 78 + 80: 49(fvec4) VectorShuffle 79 77 4 5 2 3 + Store 78 80 + 81: 6(int) Load 8(invocation) + 84: 68(ptr) AccessChain 55(data) 82 57 + 85: 49(fvec4) Load 84 + 86: 83(fvec3) VectorShuffle 85 85 0 1 2 + 87: 6(int) Load 8(invocation) + 88: 48(float) CompositeExtract 86 0 + 89: 48(float) SubgroupReadInvocationKHR 88 87 + 90: 48(float) CompositeExtract 86 1 + 91: 48(float) SubgroupReadInvocationKHR 90 87 + 92: 48(float) CompositeExtract 86 2 + 93: 48(float) SubgroupReadInvocationKHR 92 87 + 94: 83(fvec3) CompositeConstruct 89 91 93 + 95: 68(ptr) AccessChain 55(data) 81 57 + 96: 49(fvec4) Load 95 + 97: 49(fvec4) VectorShuffle 96 94 4 5 6 3 + Store 95 97 + 98: 6(int) Load 8(invocation) + 100: 68(ptr) AccessChain 55(data) 99 57 + 101: 49(fvec4) Load 100 + 102: 6(int) Load 8(invocation) + 103: 48(float) CompositeExtract 101 0 + 104: 48(float) SubgroupReadInvocationKHR 103 102 + 105: 48(float) CompositeExtract 101 1 + 106: 48(float) SubgroupReadInvocationKHR 105 102 + 107: 48(float) CompositeExtract 101 2 + 108: 48(float) SubgroupReadInvocationKHR 107 102 + 109: 48(float) CompositeExtract 101 3 + 110: 48(float) SubgroupReadInvocationKHR 109 102 + 111: 49(fvec4) CompositeConstruct 104 106 108 110 + 112: 68(ptr) AccessChain 55(data) 98 57 + Store 112 111 + 113: 6(int) Load 8(invocation) + 115: 114(ptr) AccessChain 55(data) 57 66 58 + 116: 50(int) Load 115 + 117: 6(int) Load 8(invocation) + 118: 50(int) SubgroupReadInvocationKHR 116 117 + 119: 114(ptr) AccessChain 55(data) 113 66 58 + Store 119 118 + 120: 6(int) Load 8(invocation) + 123: 122(ptr) AccessChain 55(data) 66 66 + 124: 51(ivec4) Load 123 + 125: 121(ivec2) VectorShuffle 124 124 0 1 + 126: 6(int) Load 8(invocation) + 127: 50(int) CompositeExtract 125 0 + 128: 50(int) SubgroupReadInvocationKHR 127 126 + 129: 50(int) CompositeExtract 125 1 + 130: 50(int) SubgroupReadInvocationKHR 129 126 + 131: 121(ivec2) CompositeConstruct 128 130 + 132: 122(ptr) AccessChain 55(data) 120 66 + 133: 51(ivec4) Load 132 + 134: 51(ivec4) VectorShuffle 133 131 4 5 2 3 + Store 132 134 + 135: 6(int) Load 8(invocation) + 137: 122(ptr) AccessChain 55(data) 82 66 + 138: 51(ivec4) Load 137 + 139: 136(ivec3) VectorShuffle 138 138 0 1 2 + 140: 6(int) Load 8(invocation) + 141: 50(int) CompositeExtract 139 0 + 142: 50(int) SubgroupReadInvocationKHR 141 140 + 143: 50(int) CompositeExtract 139 1 + 144: 50(int) SubgroupReadInvocationKHR 143 140 + 145: 50(int) CompositeExtract 139 2 + 146: 50(int) SubgroupReadInvocationKHR 145 140 + 147: 136(ivec3) CompositeConstruct 142 144 146 + 148: 122(ptr) AccessChain 55(data) 135 66 + 149: 51(ivec4) Load 148 + 150: 51(ivec4) VectorShuffle 149 147 4 5 6 3 + Store 148 150 + 151: 6(int) Load 8(invocation) + 152: 122(ptr) AccessChain 55(data) 99 66 + 153: 51(ivec4) Load 152 + 154: 6(int) Load 8(invocation) + 155: 50(int) CompositeExtract 153 0 + 156: 50(int) SubgroupReadInvocationKHR 155 154 + 157: 50(int) CompositeExtract 153 1 + 158: 50(int) SubgroupReadInvocationKHR 157 154 + 159: 50(int) CompositeExtract 153 2 + 160: 50(int) SubgroupReadInvocationKHR 159 154 + 161: 50(int) CompositeExtract 153 3 + 162: 50(int) SubgroupReadInvocationKHR 161 154 + 163: 51(ivec4) CompositeConstruct 156 158 160 162 + 164: 122(ptr) AccessChain 55(data) 151 66 + Store 164 163 + 165: 6(int) Load 8(invocation) + 167: 166(ptr) AccessChain 55(data) 57 82 58 + 168: 6(int) Load 167 + 169: 6(int) Load 8(invocation) + 170: 6(int) SubgroupReadInvocationKHR 168 169 + 171: 166(ptr) AccessChain 55(data) 165 82 58 + Store 171 170 + 172: 6(int) Load 8(invocation) + 174: 173(ptr) AccessChain 55(data) 66 82 + 175: 38(ivec4) Load 174 + 176: 42(ivec2) VectorShuffle 175 175 0 1 + 177: 6(int) Load 8(invocation) + 178: 6(int) CompositeExtract 176 0 + 179: 6(int) SubgroupReadInvocationKHR 178 177 + 180: 6(int) CompositeExtract 176 1 + 181: 6(int) SubgroupReadInvocationKHR 180 177 + 182: 42(ivec2) CompositeConstruct 179 181 + 183: 173(ptr) AccessChain 55(data) 172 82 + 184: 38(ivec4) Load 183 + 185: 38(ivec4) VectorShuffle 184 182 4 5 2 3 + Store 183 185 + 186: 6(int) Load 8(invocation) + 188: 173(ptr) AccessChain 55(data) 82 82 + 189: 38(ivec4) Load 188 + 190: 187(ivec3) VectorShuffle 189 189 0 1 2 + 191: 6(int) Load 8(invocation) + 192: 6(int) CompositeExtract 190 0 + 193: 6(int) SubgroupReadInvocationKHR 192 191 + 194: 6(int) CompositeExtract 190 1 + 195: 6(int) SubgroupReadInvocationKHR 194 191 + 196: 6(int) CompositeExtract 190 2 + 197: 6(int) SubgroupReadInvocationKHR 196 191 + 198: 187(ivec3) CompositeConstruct 193 195 197 + 199: 173(ptr) AccessChain 55(data) 186 82 + 200: 38(ivec4) Load 199 + 201: 38(ivec4) VectorShuffle 200 198 4 5 6 3 + Store 199 201 + 202: 6(int) Load 8(invocation) + 203: 173(ptr) AccessChain 55(data) 99 82 + 204: 38(ivec4) Load 203 + 205: 6(int) Load 8(invocation) + 206: 6(int) CompositeExtract 204 0 + 207: 6(int) SubgroupReadInvocationKHR 206 205 + 208: 6(int) CompositeExtract 204 1 + 209: 6(int) SubgroupReadInvocationKHR 208 205 + 210: 6(int) CompositeExtract 204 2 + 211: 6(int) SubgroupReadInvocationKHR 210 205 + 212: 6(int) CompositeExtract 204 3 + 213: 6(int) SubgroupReadInvocationKHR 212 205 + 214: 38(ivec4) CompositeConstruct 207 209 211 213 + 215: 173(ptr) AccessChain 55(data) 202 82 + Store 215 214 + Branch 47 + 216: Label + 217: 6(int) Load 8(invocation) + 218: 59(ptr) AccessChain 55(data) 57 57 58 + 219: 48(float) Load 218 + 220: 48(float) SubgroupFirstInvocationKHR 219 + 221: 59(ptr) AccessChain 55(data) 217 57 58 + Store 221 220 + 222: 6(int) Load 8(invocation) + 223: 68(ptr) AccessChain 55(data) 66 57 + 224: 49(fvec4) Load 223 + 225: 67(fvec2) VectorShuffle 224 224 0 1 + 226: 67(fvec2) SubgroupFirstInvocationKHR 225 + 227: 68(ptr) AccessChain 55(data) 222 57 + 228: 49(fvec4) Load 227 + 229: 49(fvec4) VectorShuffle 228 226 4 5 2 3 + Store 227 229 + 230: 6(int) Load 8(invocation) + 231: 68(ptr) AccessChain 55(data) 82 57 + 232: 49(fvec4) Load 231 + 233: 83(fvec3) VectorShuffle 232 232 0 1 2 + 234: 83(fvec3) SubgroupFirstInvocationKHR 233 + 235: 68(ptr) AccessChain 55(data) 230 57 + 236: 49(fvec4) Load 235 + 237: 49(fvec4) VectorShuffle 236 234 4 5 6 3 + Store 235 237 + 238: 6(int) Load 8(invocation) + 239: 68(ptr) AccessChain 55(data) 99 57 + 240: 49(fvec4) Load 239 + 241: 49(fvec4) SubgroupFirstInvocationKHR 240 + 242: 68(ptr) AccessChain 55(data) 238 57 + Store 242 241 + 243: 6(int) Load 8(invocation) + 244: 114(ptr) AccessChain 55(data) 57 66 58 + 245: 50(int) Load 244 + 246: 50(int) SubgroupFirstInvocationKHR 245 + 247: 114(ptr) AccessChain 55(data) 243 66 58 + Store 247 246 + 248: 6(int) Load 8(invocation) + 249: 122(ptr) AccessChain 55(data) 66 66 + 250: 51(ivec4) Load 249 + 251: 121(ivec2) VectorShuffle 250 250 0 1 + 252: 121(ivec2) SubgroupFirstInvocationKHR 251 + 253: 122(ptr) AccessChain 55(data) 248 66 + 254: 51(ivec4) Load 253 + 255: 51(ivec4) VectorShuffle 254 252 4 5 2 3 + Store 253 255 + 256: 6(int) Load 8(invocation) + 257: 122(ptr) AccessChain 55(data) 82 66 + 258: 51(ivec4) Load 257 + 259: 136(ivec3) VectorShuffle 258 258 0 1 2 + 260: 136(ivec3) SubgroupFirstInvocationKHR 259 + 261: 122(ptr) AccessChain 55(data) 256 66 + 262: 51(ivec4) Load 261 + 263: 51(ivec4) VectorShuffle 262 260 4 5 6 3 + Store 261 263 + 264: 6(int) Load 8(invocation) + 265: 122(ptr) AccessChain 55(data) 99 66 + 266: 51(ivec4) Load 265 + 267: 51(ivec4) SubgroupFirstInvocationKHR 266 + 268: 122(ptr) AccessChain 55(data) 264 66 + Store 268 267 + 269: 6(int) Load 8(invocation) + 270: 166(ptr) AccessChain 55(data) 57 82 58 + 271: 6(int) Load 270 + 272: 6(int) SubgroupFirstInvocationKHR 271 + 273: 166(ptr) AccessChain 55(data) 269 82 58 + Store 273 272 + 274: 6(int) Load 8(invocation) + 275: 173(ptr) AccessChain 55(data) 66 82 + 276: 38(ivec4) Load 275 + 277: 42(ivec2) VectorShuffle 276 276 0 1 + 278: 42(ivec2) SubgroupFirstInvocationKHR 277 + 279: 173(ptr) AccessChain 55(data) 274 82 + 280: 38(ivec4) Load 279 + 281: 38(ivec4) VectorShuffle 280 278 4 5 2 3 + Store 279 281 + 282: 6(int) Load 8(invocation) + 283: 173(ptr) AccessChain 55(data) 82 82 + 284: 38(ivec4) Load 283 + 285: 187(ivec3) VectorShuffle 284 284 0 1 2 + 286: 187(ivec3) SubgroupFirstInvocationKHR 285 + 287: 173(ptr) AccessChain 55(data) 282 82 + 288: 38(ivec4) Load 287 + 289: 38(ivec4) VectorShuffle 288 286 4 5 6 3 + Store 287 289 + 290: 6(int) Load 8(invocation) + 291: 173(ptr) AccessChain 55(data) 99 82 + 292: 38(ivec4) Load 291 + 293: 38(ivec4) SubgroupFirstInvocationKHR 292 + 294: 173(ptr) AccessChain 55(data) 290 82 + Store 294 293 + Branch 47 + 47: Label + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderBallotAMD.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderBallotAMD.comp.out new file mode 100644 index 0000000..bb7f8c1 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderBallotAMD.comp.out @@ -0,0 +1,1217 @@ +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 +// Id's are bound by 1048 + + Capability Shader + Capability Float16 + Capability Float64 + Capability Int64 + Capability Groups + Extension "SPV_AMD_gpu_shader_half_float" + Extension "SPV_AMD_shader_ballot" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "main" + ExecutionMode 4 LocalSize 8 8 1 + Source GLSL 450 + SourceExtension "GL_AMD_gpu_shader_half_float" + SourceExtension "GL_AMD_shader_ballot" + SourceExtension "GL_ARB_gpu_shader_int64" + Name 4 "main" + Name 18 "Buffers" + MemberName 18(Buffers) 0 "i" + MemberName 18(Buffers) 1 "uv" + MemberName 18(Buffers) 2 "fv" + MemberName 18(Buffers) 3 "dv" + MemberName 18(Buffers) 4 "i64" + MemberName 18(Buffers) 5 "u64v" + MemberName 18(Buffers) 6 "f16v" + Name 20 "" + MemberDecorate 18(Buffers) 0 Offset 0 + MemberDecorate 18(Buffers) 1 Offset 8 + MemberDecorate 18(Buffers) 2 Offset 16 + MemberDecorate 18(Buffers) 3 Offset 32 + MemberDecorate 18(Buffers) 4 Offset 64 + MemberDecorate 18(Buffers) 5 Offset 80 + MemberDecorate 18(Buffers) 6 Offset 96 + Decorate 18(Buffers) BufferBlock + Decorate 20 DescriptorSet 0 + Decorate 20 Binding 0 + Decorate 1047 BuiltIn WorkgroupSize + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypeInt 32 0 + 8: TypeVector 7(int) 2 + 9: TypeFloat 32 + 10: TypeVector 9(float) 3 + 11: TypeFloat 64 + 12: TypeVector 11(float) 4 + 13: TypeInt 64 1 + 14: TypeInt 64 0 + 15: TypeVector 14(int) 2 + 16: TypeFloat 16 + 17: TypeVector 16(float) 3 + 18(Buffers): TypeStruct 6(int) 8(ivec2) 10(fvec3) 12(fvec4) 13(int) 15(ivec2) 17(fvec3) + 19: TypePointer Uniform 18(Buffers) + 20: 19(ptr) Variable Uniform + 21: 6(int) Constant 0 + 22: TypePointer Uniform 6(int) + 25: 7(int) Constant 3 + 28: 6(int) Constant 1 + 29: TypePointer Uniform 8(ivec2) + 38: 6(int) Constant 2 + 39: TypePointer Uniform 10(fvec3) + 50: 6(int) Constant 3 + 51: TypePointer Uniform 12(fvec4) + 64: 6(int) Constant 4 + 65: TypePointer Uniform 13(int) + 70: 6(int) Constant 5 + 71: TypePointer Uniform 15(ivec2) + 80: 6(int) Constant 6 + 81: TypePointer Uniform 17(fvec3) + 1044: TypeVector 7(int) 3 + 1045: 7(int) Constant 8 + 1046: 7(int) Constant 1 + 1047: 1044(ivec3) ConstantComposite 1045 1045 1046 + 4(main): 2 Function None 3 + 5: Label + 23: 22(ptr) AccessChain 20 21 + 24: 6(int) Load 23 + 26: 6(int) GroupSMin 25 Reduce 24 + 27: 22(ptr) AccessChain 20 21 + Store 27 26 + 30: 29(ptr) AccessChain 20 28 + 31: 8(ivec2) Load 30 + 32: 7(int) CompositeExtract 31 0 + 33: 7(int) GroupUMin 25 Reduce 32 + 34: 7(int) CompositeExtract 31 1 + 35: 7(int) GroupUMin 25 Reduce 34 + 36: 8(ivec2) CompositeConstruct 33 35 + 37: 29(ptr) AccessChain 20 28 + Store 37 36 + 40: 39(ptr) AccessChain 20 38 + 41: 10(fvec3) Load 40 + 42: 9(float) CompositeExtract 41 0 + 43: 9(float) GroupFMin 25 Reduce 42 + 44: 9(float) CompositeExtract 41 1 + 45: 9(float) GroupFMin 25 Reduce 44 + 46: 9(float) CompositeExtract 41 2 + 47: 9(float) GroupFMin 25 Reduce 46 + 48: 10(fvec3) CompositeConstruct 43 45 47 + 49: 39(ptr) AccessChain 20 38 + Store 49 48 + 52: 51(ptr) AccessChain 20 50 + 53: 12(fvec4) Load 52 + 54: 11(float) CompositeExtract 53 0 + 55: 11(float) GroupFMin 25 Reduce 54 + 56: 11(float) CompositeExtract 53 1 + 57: 11(float) GroupFMin 25 Reduce 56 + 58: 11(float) CompositeExtract 53 2 + 59: 11(float) GroupFMin 25 Reduce 58 + 60: 11(float) CompositeExtract 53 3 + 61: 11(float) GroupFMin 25 Reduce 60 + 62: 12(fvec4) CompositeConstruct 55 57 59 61 + 63: 51(ptr) AccessChain 20 50 + Store 63 62 + 66: 65(ptr) AccessChain 20 64 + 67: 13(int) Load 66 + 68: 13(int) GroupSMin 25 Reduce 67 + 69: 65(ptr) AccessChain 20 64 + Store 69 68 + 72: 71(ptr) AccessChain 20 70 + 73: 15(ivec2) Load 72 + 74: 14(int) CompositeExtract 73 0 + 75: 14(int) GroupUMin 25 Reduce 74 + 76: 14(int) CompositeExtract 73 1 + 77: 14(int) GroupUMin 25 Reduce 76 + 78: 15(ivec2) CompositeConstruct 75 77 + 79: 71(ptr) AccessChain 20 70 + Store 79 78 + 82: 81(ptr) AccessChain 20 80 + 83: 17(fvec3) Load 82 + 84: 16(float) CompositeExtract 83 0 + 85: 16(float) GroupFMin 25 Reduce 84 + 86: 16(float) CompositeExtract 83 1 + 87: 16(float) GroupFMin 25 Reduce 86 + 88: 16(float) CompositeExtract 83 2 + 89: 16(float) GroupFMin 25 Reduce 88 + 90: 17(fvec3) CompositeConstruct 85 87 89 + 91: 81(ptr) AccessChain 20 80 + Store 91 90 + 92: 22(ptr) AccessChain 20 21 + 93: 6(int) Load 92 + 94: 6(int) GroupSMax 25 Reduce 93 + 95: 22(ptr) AccessChain 20 21 + Store 95 94 + 96: 29(ptr) AccessChain 20 28 + 97: 8(ivec2) Load 96 + 98: 7(int) CompositeExtract 97 0 + 99: 7(int) GroupUMax 25 Reduce 98 + 100: 7(int) CompositeExtract 97 1 + 101: 7(int) GroupUMax 25 Reduce 100 + 102: 8(ivec2) CompositeConstruct 99 101 + 103: 29(ptr) AccessChain 20 28 + Store 103 102 + 104: 39(ptr) AccessChain 20 38 + 105: 10(fvec3) Load 104 + 106: 9(float) CompositeExtract 105 0 + 107: 9(float) GroupFMax 25 Reduce 106 + 108: 9(float) CompositeExtract 105 1 + 109: 9(float) GroupFMax 25 Reduce 108 + 110: 9(float) CompositeExtract 105 2 + 111: 9(float) GroupFMax 25 Reduce 110 + 112: 10(fvec3) CompositeConstruct 107 109 111 + 113: 39(ptr) AccessChain 20 38 + Store 113 112 + 114: 51(ptr) AccessChain 20 50 + 115: 12(fvec4) Load 114 + 116: 11(float) CompositeExtract 115 0 + 117: 11(float) GroupFMax 25 Reduce 116 + 118: 11(float) CompositeExtract 115 1 + 119: 11(float) GroupFMax 25 Reduce 118 + 120: 11(float) CompositeExtract 115 2 + 121: 11(float) GroupFMax 25 Reduce 120 + 122: 11(float) CompositeExtract 115 3 + 123: 11(float) GroupFMax 25 Reduce 122 + 124: 12(fvec4) CompositeConstruct 117 119 121 123 + 125: 51(ptr) AccessChain 20 50 + Store 125 124 + 126: 65(ptr) AccessChain 20 64 + 127: 13(int) Load 126 + 128: 13(int) GroupSMax 25 Reduce 127 + 129: 65(ptr) AccessChain 20 64 + Store 129 128 + 130: 71(ptr) AccessChain 20 70 + 131: 15(ivec2) Load 130 + 132: 14(int) CompositeExtract 131 0 + 133: 14(int) GroupUMax 25 Reduce 132 + 134: 14(int) CompositeExtract 131 1 + 135: 14(int) GroupUMax 25 Reduce 134 + 136: 15(ivec2) CompositeConstruct 133 135 + 137: 71(ptr) AccessChain 20 70 + Store 137 136 + 138: 81(ptr) AccessChain 20 80 + 139: 17(fvec3) Load 138 + 140: 16(float) CompositeExtract 139 0 + 141: 16(float) GroupFMax 25 Reduce 140 + 142: 16(float) CompositeExtract 139 1 + 143: 16(float) GroupFMax 25 Reduce 142 + 144: 16(float) CompositeExtract 139 2 + 145: 16(float) GroupFMax 25 Reduce 144 + 146: 17(fvec3) CompositeConstruct 141 143 145 + 147: 81(ptr) AccessChain 20 80 + Store 147 146 + 148: 22(ptr) AccessChain 20 21 + 149: 6(int) Load 148 + 150: 6(int) GroupIAdd 25 Reduce 149 + 151: 22(ptr) AccessChain 20 21 + Store 151 150 + 152: 29(ptr) AccessChain 20 28 + 153: 8(ivec2) Load 152 + 154: 7(int) CompositeExtract 153 0 + 155: 7(int) GroupIAdd 25 Reduce 154 + 156: 7(int) CompositeExtract 153 1 + 157: 7(int) GroupIAdd 25 Reduce 156 + 158: 8(ivec2) CompositeConstruct 155 157 + 159: 29(ptr) AccessChain 20 28 + Store 159 158 + 160: 39(ptr) AccessChain 20 38 + 161: 10(fvec3) Load 160 + 162: 9(float) CompositeExtract 161 0 + 163: 9(float) GroupFAdd 25 Reduce 162 + 164: 9(float) CompositeExtract 161 1 + 165: 9(float) GroupFAdd 25 Reduce 164 + 166: 9(float) CompositeExtract 161 2 + 167: 9(float) GroupFAdd 25 Reduce 166 + 168: 10(fvec3) CompositeConstruct 163 165 167 + 169: 39(ptr) AccessChain 20 38 + Store 169 168 + 170: 51(ptr) AccessChain 20 50 + 171: 12(fvec4) Load 170 + 172: 11(float) CompositeExtract 171 0 + 173: 11(float) GroupFAdd 25 Reduce 172 + 174: 11(float) CompositeExtract 171 1 + 175: 11(float) GroupFAdd 25 Reduce 174 + 176: 11(float) CompositeExtract 171 2 + 177: 11(float) GroupFAdd 25 Reduce 176 + 178: 11(float) CompositeExtract 171 3 + 179: 11(float) GroupFAdd 25 Reduce 178 + 180: 12(fvec4) CompositeConstruct 173 175 177 179 + 181: 51(ptr) AccessChain 20 50 + Store 181 180 + 182: 65(ptr) AccessChain 20 64 + 183: 13(int) Load 182 + 184: 13(int) GroupIAdd 25 Reduce 183 + 185: 65(ptr) AccessChain 20 64 + Store 185 184 + 186: 71(ptr) AccessChain 20 70 + 187: 15(ivec2) Load 186 + 188: 14(int) CompositeExtract 187 0 + 189: 14(int) GroupIAdd 25 Reduce 188 + 190: 14(int) CompositeExtract 187 1 + 191: 14(int) GroupIAdd 25 Reduce 190 + 192: 15(ivec2) CompositeConstruct 189 191 + 193: 71(ptr) AccessChain 20 70 + Store 193 192 + 194: 81(ptr) AccessChain 20 80 + 195: 17(fvec3) Load 194 + 196: 16(float) CompositeExtract 195 0 + 197: 16(float) GroupFAdd 25 Reduce 196 + 198: 16(float) CompositeExtract 195 1 + 199: 16(float) GroupFAdd 25 Reduce 198 + 200: 16(float) CompositeExtract 195 2 + 201: 16(float) GroupFAdd 25 Reduce 200 + 202: 17(fvec3) CompositeConstruct 197 199 201 + 203: 81(ptr) AccessChain 20 80 + Store 203 202 + 204: 22(ptr) AccessChain 20 21 + 205: 6(int) Load 204 + 206: 6(int) GroupSMinNonUniformAMD 25 Reduce 205 + 207: 22(ptr) AccessChain 20 21 + Store 207 206 + 208: 29(ptr) AccessChain 20 28 + 209: 8(ivec2) Load 208 + 210: 7(int) CompositeExtract 209 0 + 211: 7(int) GroupUMinNonUniformAMD 25 Reduce 210 + 212: 7(int) CompositeExtract 209 1 + 213: 7(int) GroupUMinNonUniformAMD 25 Reduce 212 + 214: 8(ivec2) CompositeConstruct 211 213 + 215: 29(ptr) AccessChain 20 28 + Store 215 214 + 216: 39(ptr) AccessChain 20 38 + 217: 10(fvec3) Load 216 + 218: 9(float) CompositeExtract 217 0 + 219: 9(float) GroupFMinNonUniformAMD 25 Reduce 218 + 220: 9(float) CompositeExtract 217 1 + 221: 9(float) GroupFMinNonUniformAMD 25 Reduce 220 + 222: 9(float) CompositeExtract 217 2 + 223: 9(float) GroupFMinNonUniformAMD 25 Reduce 222 + 224: 10(fvec3) CompositeConstruct 219 221 223 + 225: 39(ptr) AccessChain 20 38 + Store 225 224 + 226: 51(ptr) AccessChain 20 50 + 227: 12(fvec4) Load 226 + 228: 11(float) CompositeExtract 227 0 + 229: 11(float) GroupFMinNonUniformAMD 25 Reduce 228 + 230: 11(float) CompositeExtract 227 1 + 231: 11(float) GroupFMinNonUniformAMD 25 Reduce 230 + 232: 11(float) CompositeExtract 227 2 + 233: 11(float) GroupFMinNonUniformAMD 25 Reduce 232 + 234: 11(float) CompositeExtract 227 3 + 235: 11(float) GroupFMinNonUniformAMD 25 Reduce 234 + 236: 12(fvec4) CompositeConstruct 229 231 233 235 + 237: 51(ptr) AccessChain 20 50 + Store 237 236 + 238: 65(ptr) AccessChain 20 64 + 239: 13(int) Load 238 + 240: 13(int) GroupSMinNonUniformAMD 25 Reduce 239 + 241: 65(ptr) AccessChain 20 64 + Store 241 240 + 242: 71(ptr) AccessChain 20 70 + 243: 15(ivec2) Load 242 + 244: 14(int) CompositeExtract 243 0 + 245: 14(int) GroupUMinNonUniformAMD 25 Reduce 244 + 246: 14(int) CompositeExtract 243 1 + 247: 14(int) GroupUMinNonUniformAMD 25 Reduce 246 + 248: 15(ivec2) CompositeConstruct 245 247 + 249: 71(ptr) AccessChain 20 70 + Store 249 248 + 250: 81(ptr) AccessChain 20 80 + 251: 17(fvec3) Load 250 + 252: 16(float) CompositeExtract 251 0 + 253: 16(float) GroupFMinNonUniformAMD 25 Reduce 252 + 254: 16(float) CompositeExtract 251 1 + 255: 16(float) GroupFMinNonUniformAMD 25 Reduce 254 + 256: 16(float) CompositeExtract 251 2 + 257: 16(float) GroupFMinNonUniformAMD 25 Reduce 256 + 258: 17(fvec3) CompositeConstruct 253 255 257 + 259: 81(ptr) AccessChain 20 80 + Store 259 258 + 260: 22(ptr) AccessChain 20 21 + 261: 6(int) Load 260 + 262: 6(int) GroupSMaxNonUniformAMD 25 Reduce 261 + 263: 22(ptr) AccessChain 20 21 + Store 263 262 + 264: 29(ptr) AccessChain 20 28 + 265: 8(ivec2) Load 264 + 266: 7(int) CompositeExtract 265 0 + 267: 7(int) GroupUMaxNonUniformAMD 25 Reduce 266 + 268: 7(int) CompositeExtract 265 1 + 269: 7(int) GroupUMaxNonUniformAMD 25 Reduce 268 + 270: 8(ivec2) CompositeConstruct 267 269 + 271: 29(ptr) AccessChain 20 28 + Store 271 270 + 272: 39(ptr) AccessChain 20 38 + 273: 10(fvec3) Load 272 + 274: 9(float) CompositeExtract 273 0 + 275: 9(float) GroupFMaxNonUniformAMD 25 Reduce 274 + 276: 9(float) CompositeExtract 273 1 + 277: 9(float) GroupFMaxNonUniformAMD 25 Reduce 276 + 278: 9(float) CompositeExtract 273 2 + 279: 9(float) GroupFMaxNonUniformAMD 25 Reduce 278 + 280: 10(fvec3) CompositeConstruct 275 277 279 + 281: 39(ptr) AccessChain 20 38 + Store 281 280 + 282: 51(ptr) AccessChain 20 50 + 283: 12(fvec4) Load 282 + 284: 11(float) CompositeExtract 283 0 + 285: 11(float) GroupFMaxNonUniformAMD 25 Reduce 284 + 286: 11(float) CompositeExtract 283 1 + 287: 11(float) GroupFMaxNonUniformAMD 25 Reduce 286 + 288: 11(float) CompositeExtract 283 2 + 289: 11(float) GroupFMaxNonUniformAMD 25 Reduce 288 + 290: 11(float) CompositeExtract 283 3 + 291: 11(float) GroupFMaxNonUniformAMD 25 Reduce 290 + 292: 12(fvec4) CompositeConstruct 285 287 289 291 + 293: 51(ptr) AccessChain 20 50 + Store 293 292 + 294: 65(ptr) AccessChain 20 64 + 295: 13(int) Load 294 + 296: 13(int) GroupSMaxNonUniformAMD 25 Reduce 295 + 297: 65(ptr) AccessChain 20 64 + Store 297 296 + 298: 71(ptr) AccessChain 20 70 + 299: 15(ivec2) Load 298 + 300: 14(int) CompositeExtract 299 0 + 301: 14(int) GroupUMaxNonUniformAMD 25 Reduce 300 + 302: 14(int) CompositeExtract 299 1 + 303: 14(int) GroupUMaxNonUniformAMD 25 Reduce 302 + 304: 15(ivec2) CompositeConstruct 301 303 + 305: 71(ptr) AccessChain 20 70 + Store 305 304 + 306: 81(ptr) AccessChain 20 80 + 307: 17(fvec3) Load 306 + 308: 16(float) CompositeExtract 307 0 + 309: 16(float) GroupFMaxNonUniformAMD 25 Reduce 308 + 310: 16(float) CompositeExtract 307 1 + 311: 16(float) GroupFMaxNonUniformAMD 25 Reduce 310 + 312: 16(float) CompositeExtract 307 2 + 313: 16(float) GroupFMaxNonUniformAMD 25 Reduce 312 + 314: 17(fvec3) CompositeConstruct 309 311 313 + 315: 81(ptr) AccessChain 20 80 + Store 315 314 + 316: 22(ptr) AccessChain 20 21 + 317: 6(int) Load 316 + 318: 6(int) GroupIAddNonUniformAMD 25 Reduce 317 + 319: 22(ptr) AccessChain 20 21 + Store 319 318 + 320: 29(ptr) AccessChain 20 28 + 321: 8(ivec2) Load 320 + 322: 7(int) CompositeExtract 321 0 + 323: 7(int) GroupIAddNonUniformAMD 25 Reduce 322 + 324: 7(int) CompositeExtract 321 1 + 325: 7(int) GroupIAddNonUniformAMD 25 Reduce 324 + 326: 8(ivec2) CompositeConstruct 323 325 + 327: 29(ptr) AccessChain 20 28 + Store 327 326 + 328: 39(ptr) AccessChain 20 38 + 329: 10(fvec3) Load 328 + 330: 9(float) CompositeExtract 329 0 + 331: 9(float) GroupFAddNonUniformAMD 25 Reduce 330 + 332: 9(float) CompositeExtract 329 1 + 333: 9(float) GroupFAddNonUniformAMD 25 Reduce 332 + 334: 9(float) CompositeExtract 329 2 + 335: 9(float) GroupFAddNonUniformAMD 25 Reduce 334 + 336: 10(fvec3) CompositeConstruct 331 333 335 + 337: 39(ptr) AccessChain 20 38 + Store 337 336 + 338: 51(ptr) AccessChain 20 50 + 339: 12(fvec4) Load 338 + 340: 11(float) CompositeExtract 339 0 + 341: 11(float) GroupFAddNonUniformAMD 25 Reduce 340 + 342: 11(float) CompositeExtract 339 1 + 343: 11(float) GroupFAddNonUniformAMD 25 Reduce 342 + 344: 11(float) CompositeExtract 339 2 + 345: 11(float) GroupFAddNonUniformAMD 25 Reduce 344 + 346: 11(float) CompositeExtract 339 3 + 347: 11(float) GroupFAddNonUniformAMD 25 Reduce 346 + 348: 12(fvec4) CompositeConstruct 341 343 345 347 + 349: 51(ptr) AccessChain 20 50 + Store 349 348 + 350: 65(ptr) AccessChain 20 64 + 351: 13(int) Load 350 + 352: 13(int) GroupIAddNonUniformAMD 25 Reduce 351 + 353: 65(ptr) AccessChain 20 64 + Store 353 352 + 354: 71(ptr) AccessChain 20 70 + 355: 15(ivec2) Load 354 + 356: 14(int) CompositeExtract 355 0 + 357: 14(int) GroupIAddNonUniformAMD 25 Reduce 356 + 358: 14(int) CompositeExtract 355 1 + 359: 14(int) GroupIAddNonUniformAMD 25 Reduce 358 + 360: 15(ivec2) CompositeConstruct 357 359 + 361: 71(ptr) AccessChain 20 70 + Store 361 360 + 362: 81(ptr) AccessChain 20 80 + 363: 17(fvec3) Load 362 + 364: 16(float) CompositeExtract 363 0 + 365: 16(float) GroupFAddNonUniformAMD 25 Reduce 364 + 366: 16(float) CompositeExtract 363 1 + 367: 16(float) GroupFAddNonUniformAMD 25 Reduce 366 + 368: 16(float) CompositeExtract 363 2 + 369: 16(float) GroupFAddNonUniformAMD 25 Reduce 368 + 370: 17(fvec3) CompositeConstruct 365 367 369 + 371: 81(ptr) AccessChain 20 80 + Store 371 370 + 372: 22(ptr) AccessChain 20 21 + 373: 6(int) Load 372 + 374: 6(int) GroupSMin 25 InclusiveScan 373 + 375: 22(ptr) AccessChain 20 21 + Store 375 374 + 376: 29(ptr) AccessChain 20 28 + 377: 8(ivec2) Load 376 + 378: 7(int) CompositeExtract 377 0 + 379: 7(int) GroupUMin 25 InclusiveScan 378 + 380: 7(int) CompositeExtract 377 1 + 381: 7(int) GroupUMin 25 InclusiveScan 380 + 382: 8(ivec2) CompositeConstruct 379 381 + 383: 29(ptr) AccessChain 20 28 + Store 383 382 + 384: 39(ptr) AccessChain 20 38 + 385: 10(fvec3) Load 384 + 386: 9(float) CompositeExtract 385 0 + 387: 9(float) GroupFMin 25 InclusiveScan 386 + 388: 9(float) CompositeExtract 385 1 + 389: 9(float) GroupFMin 25 InclusiveScan 388 + 390: 9(float) CompositeExtract 385 2 + 391: 9(float) GroupFMin 25 InclusiveScan 390 + 392: 10(fvec3) CompositeConstruct 387 389 391 + 393: 39(ptr) AccessChain 20 38 + Store 393 392 + 394: 51(ptr) AccessChain 20 50 + 395: 12(fvec4) Load 394 + 396: 11(float) CompositeExtract 395 0 + 397: 11(float) GroupFMin 25 InclusiveScan 396 + 398: 11(float) CompositeExtract 395 1 + 399: 11(float) GroupFMin 25 InclusiveScan 398 + 400: 11(float) CompositeExtract 395 2 + 401: 11(float) GroupFMin 25 InclusiveScan 400 + 402: 11(float) CompositeExtract 395 3 + 403: 11(float) GroupFMin 25 InclusiveScan 402 + 404: 12(fvec4) CompositeConstruct 397 399 401 403 + 405: 51(ptr) AccessChain 20 50 + Store 405 404 + 406: 65(ptr) AccessChain 20 64 + 407: 13(int) Load 406 + 408: 13(int) GroupSMin 25 InclusiveScan 407 + 409: 65(ptr) AccessChain 20 64 + Store 409 408 + 410: 71(ptr) AccessChain 20 70 + 411: 15(ivec2) Load 410 + 412: 14(int) CompositeExtract 411 0 + 413: 14(int) GroupUMin 25 InclusiveScan 412 + 414: 14(int) CompositeExtract 411 1 + 415: 14(int) GroupUMin 25 InclusiveScan 414 + 416: 15(ivec2) CompositeConstruct 413 415 + 417: 71(ptr) AccessChain 20 70 + Store 417 416 + 418: 81(ptr) AccessChain 20 80 + 419: 17(fvec3) Load 418 + 420: 16(float) CompositeExtract 419 0 + 421: 16(float) GroupFMin 25 InclusiveScan 420 + 422: 16(float) CompositeExtract 419 1 + 423: 16(float) GroupFMin 25 InclusiveScan 422 + 424: 16(float) CompositeExtract 419 2 + 425: 16(float) GroupFMin 25 InclusiveScan 424 + 426: 17(fvec3) CompositeConstruct 421 423 425 + 427: 81(ptr) AccessChain 20 80 + Store 427 426 + 428: 22(ptr) AccessChain 20 21 + 429: 6(int) Load 428 + 430: 6(int) GroupSMax 25 InclusiveScan 429 + 431: 22(ptr) AccessChain 20 21 + Store 431 430 + 432: 29(ptr) AccessChain 20 28 + 433: 8(ivec2) Load 432 + 434: 7(int) CompositeExtract 433 0 + 435: 7(int) GroupUMax 25 InclusiveScan 434 + 436: 7(int) CompositeExtract 433 1 + 437: 7(int) GroupUMax 25 InclusiveScan 436 + 438: 8(ivec2) CompositeConstruct 435 437 + 439: 29(ptr) AccessChain 20 28 + Store 439 438 + 440: 39(ptr) AccessChain 20 38 + 441: 10(fvec3) Load 440 + 442: 9(float) CompositeExtract 441 0 + 443: 9(float) GroupFMax 25 InclusiveScan 442 + 444: 9(float) CompositeExtract 441 1 + 445: 9(float) GroupFMax 25 InclusiveScan 444 + 446: 9(float) CompositeExtract 441 2 + 447: 9(float) GroupFMax 25 InclusiveScan 446 + 448: 10(fvec3) CompositeConstruct 443 445 447 + 449: 39(ptr) AccessChain 20 38 + Store 449 448 + 450: 51(ptr) AccessChain 20 50 + 451: 12(fvec4) Load 450 + 452: 11(float) CompositeExtract 451 0 + 453: 11(float) GroupFMax 25 InclusiveScan 452 + 454: 11(float) CompositeExtract 451 1 + 455: 11(float) GroupFMax 25 InclusiveScan 454 + 456: 11(float) CompositeExtract 451 2 + 457: 11(float) GroupFMax 25 InclusiveScan 456 + 458: 11(float) CompositeExtract 451 3 + 459: 11(float) GroupFMax 25 InclusiveScan 458 + 460: 12(fvec4) CompositeConstruct 453 455 457 459 + 461: 51(ptr) AccessChain 20 50 + Store 461 460 + 462: 65(ptr) AccessChain 20 64 + 463: 13(int) Load 462 + 464: 13(int) GroupSMax 25 InclusiveScan 463 + 465: 65(ptr) AccessChain 20 64 + Store 465 464 + 466: 71(ptr) AccessChain 20 70 + 467: 15(ivec2) Load 466 + 468: 14(int) CompositeExtract 467 0 + 469: 14(int) GroupUMax 25 InclusiveScan 468 + 470: 14(int) CompositeExtract 467 1 + 471: 14(int) GroupUMax 25 InclusiveScan 470 + 472: 15(ivec2) CompositeConstruct 469 471 + 473: 71(ptr) AccessChain 20 70 + Store 473 472 + 474: 81(ptr) AccessChain 20 80 + 475: 17(fvec3) Load 474 + 476: 16(float) CompositeExtract 475 0 + 477: 16(float) GroupFMax 25 InclusiveScan 476 + 478: 16(float) CompositeExtract 475 1 + 479: 16(float) GroupFMax 25 InclusiveScan 478 + 480: 16(float) CompositeExtract 475 2 + 481: 16(float) GroupFMax 25 InclusiveScan 480 + 482: 17(fvec3) CompositeConstruct 477 479 481 + 483: 81(ptr) AccessChain 20 80 + Store 483 482 + 484: 22(ptr) AccessChain 20 21 + 485: 6(int) Load 484 + 486: 6(int) GroupIAdd 25 InclusiveScan 485 + 487: 22(ptr) AccessChain 20 21 + Store 487 486 + 488: 29(ptr) AccessChain 20 28 + 489: 8(ivec2) Load 488 + 490: 7(int) CompositeExtract 489 0 + 491: 7(int) GroupIAdd 25 InclusiveScan 490 + 492: 7(int) CompositeExtract 489 1 + 493: 7(int) GroupIAdd 25 InclusiveScan 492 + 494: 8(ivec2) CompositeConstruct 491 493 + 495: 29(ptr) AccessChain 20 28 + Store 495 494 + 496: 39(ptr) AccessChain 20 38 + 497: 10(fvec3) Load 496 + 498: 9(float) CompositeExtract 497 0 + 499: 9(float) GroupFAdd 25 InclusiveScan 498 + 500: 9(float) CompositeExtract 497 1 + 501: 9(float) GroupFAdd 25 InclusiveScan 500 + 502: 9(float) CompositeExtract 497 2 + 503: 9(float) GroupFAdd 25 InclusiveScan 502 + 504: 10(fvec3) CompositeConstruct 499 501 503 + 505: 39(ptr) AccessChain 20 38 + Store 505 504 + 506: 51(ptr) AccessChain 20 50 + 507: 12(fvec4) Load 506 + 508: 11(float) CompositeExtract 507 0 + 509: 11(float) GroupFAdd 25 InclusiveScan 508 + 510: 11(float) CompositeExtract 507 1 + 511: 11(float) GroupFAdd 25 InclusiveScan 510 + 512: 11(float) CompositeExtract 507 2 + 513: 11(float) GroupFAdd 25 InclusiveScan 512 + 514: 11(float) CompositeExtract 507 3 + 515: 11(float) GroupFAdd 25 InclusiveScan 514 + 516: 12(fvec4) CompositeConstruct 509 511 513 515 + 517: 51(ptr) AccessChain 20 50 + Store 517 516 + 518: 65(ptr) AccessChain 20 64 + 519: 13(int) Load 518 + 520: 13(int) GroupIAdd 25 InclusiveScan 519 + 521: 65(ptr) AccessChain 20 64 + Store 521 520 + 522: 71(ptr) AccessChain 20 70 + 523: 15(ivec2) Load 522 + 524: 14(int) CompositeExtract 523 0 + 525: 14(int) GroupIAdd 25 InclusiveScan 524 + 526: 14(int) CompositeExtract 523 1 + 527: 14(int) GroupIAdd 25 InclusiveScan 526 + 528: 15(ivec2) CompositeConstruct 525 527 + 529: 71(ptr) AccessChain 20 70 + Store 529 528 + 530: 81(ptr) AccessChain 20 80 + 531: 17(fvec3) Load 530 + 532: 16(float) CompositeExtract 531 0 + 533: 16(float) GroupFAdd 25 InclusiveScan 532 + 534: 16(float) CompositeExtract 531 1 + 535: 16(float) GroupFAdd 25 InclusiveScan 534 + 536: 16(float) CompositeExtract 531 2 + 537: 16(float) GroupFAdd 25 InclusiveScan 536 + 538: 17(fvec3) CompositeConstruct 533 535 537 + 539: 81(ptr) AccessChain 20 80 + Store 539 538 + 540: 22(ptr) AccessChain 20 21 + 541: 6(int) Load 540 + 542: 6(int) GroupSMin 25 ExclusiveScan 541 + 543: 22(ptr) AccessChain 20 21 + Store 543 542 + 544: 29(ptr) AccessChain 20 28 + 545: 8(ivec2) Load 544 + 546: 7(int) CompositeExtract 545 0 + 547: 7(int) GroupUMin 25 ExclusiveScan 546 + 548: 7(int) CompositeExtract 545 1 + 549: 7(int) GroupUMin 25 ExclusiveScan 548 + 550: 8(ivec2) CompositeConstruct 547 549 + 551: 29(ptr) AccessChain 20 28 + Store 551 550 + 552: 39(ptr) AccessChain 20 38 + 553: 10(fvec3) Load 552 + 554: 9(float) CompositeExtract 553 0 + 555: 9(float) GroupFMin 25 ExclusiveScan 554 + 556: 9(float) CompositeExtract 553 1 + 557: 9(float) GroupFMin 25 ExclusiveScan 556 + 558: 9(float) CompositeExtract 553 2 + 559: 9(float) GroupFMin 25 ExclusiveScan 558 + 560: 10(fvec3) CompositeConstruct 555 557 559 + 561: 39(ptr) AccessChain 20 38 + Store 561 560 + 562: 51(ptr) AccessChain 20 50 + 563: 12(fvec4) Load 562 + 564: 11(float) CompositeExtract 563 0 + 565: 11(float) GroupFMin 25 ExclusiveScan 564 + 566: 11(float) CompositeExtract 563 1 + 567: 11(float) GroupFMin 25 ExclusiveScan 566 + 568: 11(float) CompositeExtract 563 2 + 569: 11(float) GroupFMin 25 ExclusiveScan 568 + 570: 11(float) CompositeExtract 563 3 + 571: 11(float) GroupFMin 25 ExclusiveScan 570 + 572: 12(fvec4) CompositeConstruct 565 567 569 571 + 573: 51(ptr) AccessChain 20 50 + Store 573 572 + 574: 65(ptr) AccessChain 20 64 + 575: 13(int) Load 574 + 576: 13(int) GroupSMin 25 ExclusiveScan 575 + 577: 65(ptr) AccessChain 20 64 + Store 577 576 + 578: 71(ptr) AccessChain 20 70 + 579: 15(ivec2) Load 578 + 580: 14(int) CompositeExtract 579 0 + 581: 14(int) GroupUMin 25 ExclusiveScan 580 + 582: 14(int) CompositeExtract 579 1 + 583: 14(int) GroupUMin 25 ExclusiveScan 582 + 584: 15(ivec2) CompositeConstruct 581 583 + 585: 71(ptr) AccessChain 20 70 + Store 585 584 + 586: 81(ptr) AccessChain 20 80 + 587: 17(fvec3) Load 586 + 588: 16(float) CompositeExtract 587 0 + 589: 16(float) GroupFMin 25 ExclusiveScan 588 + 590: 16(float) CompositeExtract 587 1 + 591: 16(float) GroupFMin 25 ExclusiveScan 590 + 592: 16(float) CompositeExtract 587 2 + 593: 16(float) GroupFMin 25 ExclusiveScan 592 + 594: 17(fvec3) CompositeConstruct 589 591 593 + 595: 81(ptr) AccessChain 20 80 + Store 595 594 + 596: 22(ptr) AccessChain 20 21 + 597: 6(int) Load 596 + 598: 6(int) GroupSMax 25 ExclusiveScan 597 + 599: 22(ptr) AccessChain 20 21 + Store 599 598 + 600: 29(ptr) AccessChain 20 28 + 601: 8(ivec2) Load 600 + 602: 7(int) CompositeExtract 601 0 + 603: 7(int) GroupUMax 25 ExclusiveScan 602 + 604: 7(int) CompositeExtract 601 1 + 605: 7(int) GroupUMax 25 ExclusiveScan 604 + 606: 8(ivec2) CompositeConstruct 603 605 + 607: 29(ptr) AccessChain 20 28 + Store 607 606 + 608: 39(ptr) AccessChain 20 38 + 609: 10(fvec3) Load 608 + 610: 9(float) CompositeExtract 609 0 + 611: 9(float) GroupFMax 25 ExclusiveScan 610 + 612: 9(float) CompositeExtract 609 1 + 613: 9(float) GroupFMax 25 ExclusiveScan 612 + 614: 9(float) CompositeExtract 609 2 + 615: 9(float) GroupFMax 25 ExclusiveScan 614 + 616: 10(fvec3) CompositeConstruct 611 613 615 + 617: 39(ptr) AccessChain 20 38 + Store 617 616 + 618: 51(ptr) AccessChain 20 50 + 619: 12(fvec4) Load 618 + 620: 11(float) CompositeExtract 619 0 + 621: 11(float) GroupFMax 25 ExclusiveScan 620 + 622: 11(float) CompositeExtract 619 1 + 623: 11(float) GroupFMax 25 ExclusiveScan 622 + 624: 11(float) CompositeExtract 619 2 + 625: 11(float) GroupFMax 25 ExclusiveScan 624 + 626: 11(float) CompositeExtract 619 3 + 627: 11(float) GroupFMax 25 ExclusiveScan 626 + 628: 12(fvec4) CompositeConstruct 621 623 625 627 + 629: 51(ptr) AccessChain 20 50 + Store 629 628 + 630: 65(ptr) AccessChain 20 64 + 631: 13(int) Load 630 + 632: 13(int) GroupSMax 25 ExclusiveScan 631 + 633: 65(ptr) AccessChain 20 64 + Store 633 632 + 634: 71(ptr) AccessChain 20 70 + 635: 15(ivec2) Load 634 + 636: 14(int) CompositeExtract 635 0 + 637: 14(int) GroupUMax 25 ExclusiveScan 636 + 638: 14(int) CompositeExtract 635 1 + 639: 14(int) GroupUMax 25 ExclusiveScan 638 + 640: 15(ivec2) CompositeConstruct 637 639 + 641: 71(ptr) AccessChain 20 70 + Store 641 640 + 642: 81(ptr) AccessChain 20 80 + 643: 17(fvec3) Load 642 + 644: 16(float) CompositeExtract 643 0 + 645: 16(float) GroupFMax 25 ExclusiveScan 644 + 646: 16(float) CompositeExtract 643 1 + 647: 16(float) GroupFMax 25 ExclusiveScan 646 + 648: 16(float) CompositeExtract 643 2 + 649: 16(float) GroupFMax 25 ExclusiveScan 648 + 650: 17(fvec3) CompositeConstruct 645 647 649 + 651: 81(ptr) AccessChain 20 80 + Store 651 650 + 652: 22(ptr) AccessChain 20 21 + 653: 6(int) Load 652 + 654: 6(int) GroupIAdd 25 ExclusiveScan 653 + 655: 22(ptr) AccessChain 20 21 + Store 655 654 + 656: 29(ptr) AccessChain 20 28 + 657: 8(ivec2) Load 656 + 658: 7(int) CompositeExtract 657 0 + 659: 7(int) GroupIAdd 25 ExclusiveScan 658 + 660: 7(int) CompositeExtract 657 1 + 661: 7(int) GroupIAdd 25 ExclusiveScan 660 + 662: 8(ivec2) CompositeConstruct 659 661 + 663: 29(ptr) AccessChain 20 28 + Store 663 662 + 664: 39(ptr) AccessChain 20 38 + 665: 10(fvec3) Load 664 + 666: 9(float) CompositeExtract 665 0 + 667: 9(float) GroupFAdd 25 ExclusiveScan 666 + 668: 9(float) CompositeExtract 665 1 + 669: 9(float) GroupFAdd 25 ExclusiveScan 668 + 670: 9(float) CompositeExtract 665 2 + 671: 9(float) GroupFAdd 25 ExclusiveScan 670 + 672: 10(fvec3) CompositeConstruct 667 669 671 + 673: 39(ptr) AccessChain 20 38 + Store 673 672 + 674: 51(ptr) AccessChain 20 50 + 675: 12(fvec4) Load 674 + 676: 11(float) CompositeExtract 675 0 + 677: 11(float) GroupFAdd 25 ExclusiveScan 676 + 678: 11(float) CompositeExtract 675 1 + 679: 11(float) GroupFAdd 25 ExclusiveScan 678 + 680: 11(float) CompositeExtract 675 2 + 681: 11(float) GroupFAdd 25 ExclusiveScan 680 + 682: 11(float) CompositeExtract 675 3 + 683: 11(float) GroupFAdd 25 ExclusiveScan 682 + 684: 12(fvec4) CompositeConstruct 677 679 681 683 + 685: 51(ptr) AccessChain 20 50 + Store 685 684 + 686: 65(ptr) AccessChain 20 64 + 687: 13(int) Load 686 + 688: 13(int) GroupIAdd 25 ExclusiveScan 687 + 689: 65(ptr) AccessChain 20 64 + Store 689 688 + 690: 71(ptr) AccessChain 20 70 + 691: 15(ivec2) Load 690 + 692: 14(int) CompositeExtract 691 0 + 693: 14(int) GroupIAdd 25 ExclusiveScan 692 + 694: 14(int) CompositeExtract 691 1 + 695: 14(int) GroupIAdd 25 ExclusiveScan 694 + 696: 15(ivec2) CompositeConstruct 693 695 + 697: 71(ptr) AccessChain 20 70 + Store 697 696 + 698: 81(ptr) AccessChain 20 80 + 699: 17(fvec3) Load 698 + 700: 16(float) CompositeExtract 699 0 + 701: 16(float) GroupFAdd 25 ExclusiveScan 700 + 702: 16(float) CompositeExtract 699 1 + 703: 16(float) GroupFAdd 25 ExclusiveScan 702 + 704: 16(float) CompositeExtract 699 2 + 705: 16(float) GroupFAdd 25 ExclusiveScan 704 + 706: 17(fvec3) CompositeConstruct 701 703 705 + 707: 81(ptr) AccessChain 20 80 + Store 707 706 + 708: 22(ptr) AccessChain 20 21 + 709: 6(int) Load 708 + 710: 6(int) GroupSMinNonUniformAMD 25 InclusiveScan 709 + 711: 22(ptr) AccessChain 20 21 + Store 711 710 + 712: 29(ptr) AccessChain 20 28 + 713: 8(ivec2) Load 712 + 714: 7(int) CompositeExtract 713 0 + 715: 7(int) GroupUMinNonUniformAMD 25 InclusiveScan 714 + 716: 7(int) CompositeExtract 713 1 + 717: 7(int) GroupUMinNonUniformAMD 25 InclusiveScan 716 + 718: 8(ivec2) CompositeConstruct 715 717 + 719: 29(ptr) AccessChain 20 28 + Store 719 718 + 720: 39(ptr) AccessChain 20 38 + 721: 10(fvec3) Load 720 + 722: 9(float) CompositeExtract 721 0 + 723: 9(float) GroupFMinNonUniformAMD 25 InclusiveScan 722 + 724: 9(float) CompositeExtract 721 1 + 725: 9(float) GroupFMinNonUniformAMD 25 InclusiveScan 724 + 726: 9(float) CompositeExtract 721 2 + 727: 9(float) GroupFMinNonUniformAMD 25 InclusiveScan 726 + 728: 10(fvec3) CompositeConstruct 723 725 727 + 729: 39(ptr) AccessChain 20 38 + Store 729 728 + 730: 51(ptr) AccessChain 20 50 + 731: 12(fvec4) Load 730 + 732: 11(float) CompositeExtract 731 0 + 733: 11(float) GroupFMinNonUniformAMD 25 InclusiveScan 732 + 734: 11(float) CompositeExtract 731 1 + 735: 11(float) GroupFMinNonUniformAMD 25 InclusiveScan 734 + 736: 11(float) CompositeExtract 731 2 + 737: 11(float) GroupFMinNonUniformAMD 25 InclusiveScan 736 + 738: 11(float) CompositeExtract 731 3 + 739: 11(float) GroupFMinNonUniformAMD 25 InclusiveScan 738 + 740: 12(fvec4) CompositeConstruct 733 735 737 739 + 741: 51(ptr) AccessChain 20 50 + Store 741 740 + 742: 65(ptr) AccessChain 20 64 + 743: 13(int) Load 742 + 744: 13(int) GroupSMinNonUniformAMD 25 InclusiveScan 743 + 745: 65(ptr) AccessChain 20 64 + Store 745 744 + 746: 71(ptr) AccessChain 20 70 + 747: 15(ivec2) Load 746 + 748: 14(int) CompositeExtract 747 0 + 749: 14(int) GroupUMinNonUniformAMD 25 InclusiveScan 748 + 750: 14(int) CompositeExtract 747 1 + 751: 14(int) GroupUMinNonUniformAMD 25 InclusiveScan 750 + 752: 15(ivec2) CompositeConstruct 749 751 + 753: 71(ptr) AccessChain 20 70 + Store 753 752 + 754: 81(ptr) AccessChain 20 80 + 755: 17(fvec3) Load 754 + 756: 16(float) CompositeExtract 755 0 + 757: 16(float) GroupFMinNonUniformAMD 25 InclusiveScan 756 + 758: 16(float) CompositeExtract 755 1 + 759: 16(float) GroupFMinNonUniformAMD 25 InclusiveScan 758 + 760: 16(float) CompositeExtract 755 2 + 761: 16(float) GroupFMinNonUniformAMD 25 InclusiveScan 760 + 762: 17(fvec3) CompositeConstruct 757 759 761 + 763: 81(ptr) AccessChain 20 80 + Store 763 762 + 764: 22(ptr) AccessChain 20 21 + 765: 6(int) Load 764 + 766: 6(int) GroupSMaxNonUniformAMD 25 InclusiveScan 765 + 767: 22(ptr) AccessChain 20 21 + Store 767 766 + 768: 29(ptr) AccessChain 20 28 + 769: 8(ivec2) Load 768 + 770: 7(int) CompositeExtract 769 0 + 771: 7(int) GroupUMaxNonUniformAMD 25 InclusiveScan 770 + 772: 7(int) CompositeExtract 769 1 + 773: 7(int) GroupUMaxNonUniformAMD 25 InclusiveScan 772 + 774: 8(ivec2) CompositeConstruct 771 773 + 775: 29(ptr) AccessChain 20 28 + Store 775 774 + 776: 39(ptr) AccessChain 20 38 + 777: 10(fvec3) Load 776 + 778: 9(float) CompositeExtract 777 0 + 779: 9(float) GroupFMaxNonUniformAMD 25 InclusiveScan 778 + 780: 9(float) CompositeExtract 777 1 + 781: 9(float) GroupFMaxNonUniformAMD 25 InclusiveScan 780 + 782: 9(float) CompositeExtract 777 2 + 783: 9(float) GroupFMaxNonUniformAMD 25 InclusiveScan 782 + 784: 10(fvec3) CompositeConstruct 779 781 783 + 785: 39(ptr) AccessChain 20 38 + Store 785 784 + 786: 51(ptr) AccessChain 20 50 + 787: 12(fvec4) Load 786 + 788: 11(float) CompositeExtract 787 0 + 789: 11(float) GroupFMaxNonUniformAMD 25 InclusiveScan 788 + 790: 11(float) CompositeExtract 787 1 + 791: 11(float) GroupFMaxNonUniformAMD 25 InclusiveScan 790 + 792: 11(float) CompositeExtract 787 2 + 793: 11(float) GroupFMaxNonUniformAMD 25 InclusiveScan 792 + 794: 11(float) CompositeExtract 787 3 + 795: 11(float) GroupFMaxNonUniformAMD 25 InclusiveScan 794 + 796: 12(fvec4) CompositeConstruct 789 791 793 795 + 797: 51(ptr) AccessChain 20 50 + Store 797 796 + 798: 65(ptr) AccessChain 20 64 + 799: 13(int) Load 798 + 800: 13(int) GroupSMaxNonUniformAMD 25 InclusiveScan 799 + 801: 65(ptr) AccessChain 20 64 + Store 801 800 + 802: 71(ptr) AccessChain 20 70 + 803: 15(ivec2) Load 802 + 804: 14(int) CompositeExtract 803 0 + 805: 14(int) GroupUMaxNonUniformAMD 25 InclusiveScan 804 + 806: 14(int) CompositeExtract 803 1 + 807: 14(int) GroupUMaxNonUniformAMD 25 InclusiveScan 806 + 808: 15(ivec2) CompositeConstruct 805 807 + 809: 71(ptr) AccessChain 20 70 + Store 809 808 + 810: 81(ptr) AccessChain 20 80 + 811: 17(fvec3) Load 810 + 812: 16(float) CompositeExtract 811 0 + 813: 16(float) GroupFMaxNonUniformAMD 25 InclusiveScan 812 + 814: 16(float) CompositeExtract 811 1 + 815: 16(float) GroupFMaxNonUniformAMD 25 InclusiveScan 814 + 816: 16(float) CompositeExtract 811 2 + 817: 16(float) GroupFMaxNonUniformAMD 25 InclusiveScan 816 + 818: 17(fvec3) CompositeConstruct 813 815 817 + 819: 81(ptr) AccessChain 20 80 + Store 819 818 + 820: 22(ptr) AccessChain 20 21 + 821: 6(int) Load 820 + 822: 6(int) GroupIAddNonUniformAMD 25 InclusiveScan 821 + 823: 22(ptr) AccessChain 20 21 + Store 823 822 + 824: 29(ptr) AccessChain 20 28 + 825: 8(ivec2) Load 824 + 826: 7(int) CompositeExtract 825 0 + 827: 7(int) GroupIAddNonUniformAMD 25 InclusiveScan 826 + 828: 7(int) CompositeExtract 825 1 + 829: 7(int) GroupIAddNonUniformAMD 25 InclusiveScan 828 + 830: 8(ivec2) CompositeConstruct 827 829 + 831: 29(ptr) AccessChain 20 28 + Store 831 830 + 832: 39(ptr) AccessChain 20 38 + 833: 10(fvec3) Load 832 + 834: 9(float) CompositeExtract 833 0 + 835: 9(float) GroupFAddNonUniformAMD 25 InclusiveScan 834 + 836: 9(float) CompositeExtract 833 1 + 837: 9(float) GroupFAddNonUniformAMD 25 InclusiveScan 836 + 838: 9(float) CompositeExtract 833 2 + 839: 9(float) GroupFAddNonUniformAMD 25 InclusiveScan 838 + 840: 10(fvec3) CompositeConstruct 835 837 839 + 841: 39(ptr) AccessChain 20 38 + Store 841 840 + 842: 51(ptr) AccessChain 20 50 + 843: 12(fvec4) Load 842 + 844: 11(float) CompositeExtract 843 0 + 845: 11(float) GroupFAddNonUniformAMD 25 InclusiveScan 844 + 846: 11(float) CompositeExtract 843 1 + 847: 11(float) GroupFAddNonUniformAMD 25 InclusiveScan 846 + 848: 11(float) CompositeExtract 843 2 + 849: 11(float) GroupFAddNonUniformAMD 25 InclusiveScan 848 + 850: 11(float) CompositeExtract 843 3 + 851: 11(float) GroupFAddNonUniformAMD 25 InclusiveScan 850 + 852: 12(fvec4) CompositeConstruct 845 847 849 851 + 853: 51(ptr) AccessChain 20 50 + Store 853 852 + 854: 65(ptr) AccessChain 20 64 + 855: 13(int) Load 854 + 856: 13(int) GroupIAddNonUniformAMD 25 InclusiveScan 855 + 857: 65(ptr) AccessChain 20 64 + Store 857 856 + 858: 71(ptr) AccessChain 20 70 + 859: 15(ivec2) Load 858 + 860: 14(int) CompositeExtract 859 0 + 861: 14(int) GroupIAddNonUniformAMD 25 InclusiveScan 860 + 862: 14(int) CompositeExtract 859 1 + 863: 14(int) GroupIAddNonUniformAMD 25 InclusiveScan 862 + 864: 15(ivec2) CompositeConstruct 861 863 + 865: 71(ptr) AccessChain 20 70 + Store 865 864 + 866: 81(ptr) AccessChain 20 80 + 867: 17(fvec3) Load 866 + 868: 16(float) CompositeExtract 867 0 + 869: 16(float) GroupFAddNonUniformAMD 25 InclusiveScan 868 + 870: 16(float) CompositeExtract 867 1 + 871: 16(float) GroupFAddNonUniformAMD 25 InclusiveScan 870 + 872: 16(float) CompositeExtract 867 2 + 873: 16(float) GroupFAddNonUniformAMD 25 InclusiveScan 872 + 874: 17(fvec3) CompositeConstruct 869 871 873 + 875: 81(ptr) AccessChain 20 80 + Store 875 874 + 876: 22(ptr) AccessChain 20 21 + 877: 6(int) Load 876 + 878: 6(int) GroupSMinNonUniformAMD 25 ExclusiveScan 877 + 879: 22(ptr) AccessChain 20 21 + Store 879 878 + 880: 29(ptr) AccessChain 20 28 + 881: 8(ivec2) Load 880 + 882: 7(int) CompositeExtract 881 0 + 883: 7(int) GroupUMinNonUniformAMD 25 ExclusiveScan 882 + 884: 7(int) CompositeExtract 881 1 + 885: 7(int) GroupUMinNonUniformAMD 25 ExclusiveScan 884 + 886: 8(ivec2) CompositeConstruct 883 885 + 887: 29(ptr) AccessChain 20 28 + Store 887 886 + 888: 39(ptr) AccessChain 20 38 + 889: 10(fvec3) Load 888 + 890: 9(float) CompositeExtract 889 0 + 891: 9(float) GroupFMinNonUniformAMD 25 ExclusiveScan 890 + 892: 9(float) CompositeExtract 889 1 + 893: 9(float) GroupFMinNonUniformAMD 25 ExclusiveScan 892 + 894: 9(float) CompositeExtract 889 2 + 895: 9(float) GroupFMinNonUniformAMD 25 ExclusiveScan 894 + 896: 10(fvec3) CompositeConstruct 891 893 895 + 897: 39(ptr) AccessChain 20 38 + Store 897 896 + 898: 51(ptr) AccessChain 20 50 + 899: 12(fvec4) Load 898 + 900: 11(float) CompositeExtract 899 0 + 901: 11(float) GroupFMinNonUniformAMD 25 ExclusiveScan 900 + 902: 11(float) CompositeExtract 899 1 + 903: 11(float) GroupFMinNonUniformAMD 25 ExclusiveScan 902 + 904: 11(float) CompositeExtract 899 2 + 905: 11(float) GroupFMinNonUniformAMD 25 ExclusiveScan 904 + 906: 11(float) CompositeExtract 899 3 + 907: 11(float) GroupFMinNonUniformAMD 25 ExclusiveScan 906 + 908: 12(fvec4) CompositeConstruct 901 903 905 907 + 909: 51(ptr) AccessChain 20 50 + Store 909 908 + 910: 65(ptr) AccessChain 20 64 + 911: 13(int) Load 910 + 912: 13(int) GroupSMinNonUniformAMD 25 ExclusiveScan 911 + 913: 65(ptr) AccessChain 20 64 + Store 913 912 + 914: 71(ptr) AccessChain 20 70 + 915: 15(ivec2) Load 914 + 916: 14(int) CompositeExtract 915 0 + 917: 14(int) GroupUMinNonUniformAMD 25 ExclusiveScan 916 + 918: 14(int) CompositeExtract 915 1 + 919: 14(int) GroupUMinNonUniformAMD 25 ExclusiveScan 918 + 920: 15(ivec2) CompositeConstruct 917 919 + 921: 71(ptr) AccessChain 20 70 + Store 921 920 + 922: 81(ptr) AccessChain 20 80 + 923: 17(fvec3) Load 922 + 924: 16(float) CompositeExtract 923 0 + 925: 16(float) GroupFMinNonUniformAMD 25 ExclusiveScan 924 + 926: 16(float) CompositeExtract 923 1 + 927: 16(float) GroupFMinNonUniformAMD 25 ExclusiveScan 926 + 928: 16(float) CompositeExtract 923 2 + 929: 16(float) GroupFMinNonUniformAMD 25 ExclusiveScan 928 + 930: 17(fvec3) CompositeConstruct 925 927 929 + 931: 81(ptr) AccessChain 20 80 + Store 931 930 + 932: 22(ptr) AccessChain 20 21 + 933: 6(int) Load 932 + 934: 6(int) GroupSMaxNonUniformAMD 25 ExclusiveScan 933 + 935: 22(ptr) AccessChain 20 21 + Store 935 934 + 936: 29(ptr) AccessChain 20 28 + 937: 8(ivec2) Load 936 + 938: 7(int) CompositeExtract 937 0 + 939: 7(int) GroupUMaxNonUniformAMD 25 ExclusiveScan 938 + 940: 7(int) CompositeExtract 937 1 + 941: 7(int) GroupUMaxNonUniformAMD 25 ExclusiveScan 940 + 942: 8(ivec2) CompositeConstruct 939 941 + 943: 29(ptr) AccessChain 20 28 + Store 943 942 + 944: 39(ptr) AccessChain 20 38 + 945: 10(fvec3) Load 944 + 946: 9(float) CompositeExtract 945 0 + 947: 9(float) GroupFMaxNonUniformAMD 25 ExclusiveScan 946 + 948: 9(float) CompositeExtract 945 1 + 949: 9(float) GroupFMaxNonUniformAMD 25 ExclusiveScan 948 + 950: 9(float) CompositeExtract 945 2 + 951: 9(float) GroupFMaxNonUniformAMD 25 ExclusiveScan 950 + 952: 10(fvec3) CompositeConstruct 947 949 951 + 953: 39(ptr) AccessChain 20 38 + Store 953 952 + 954: 51(ptr) AccessChain 20 50 + 955: 12(fvec4) Load 954 + 956: 11(float) CompositeExtract 955 0 + 957: 11(float) GroupFMaxNonUniformAMD 25 ExclusiveScan 956 + 958: 11(float) CompositeExtract 955 1 + 959: 11(float) GroupFMaxNonUniformAMD 25 ExclusiveScan 958 + 960: 11(float) CompositeExtract 955 2 + 961: 11(float) GroupFMaxNonUniformAMD 25 ExclusiveScan 960 + 962: 11(float) CompositeExtract 955 3 + 963: 11(float) GroupFMaxNonUniformAMD 25 ExclusiveScan 962 + 964: 12(fvec4) CompositeConstruct 957 959 961 963 + 965: 51(ptr) AccessChain 20 50 + Store 965 964 + 966: 65(ptr) AccessChain 20 64 + 967: 13(int) Load 966 + 968: 13(int) GroupSMaxNonUniformAMD 25 ExclusiveScan 967 + 969: 65(ptr) AccessChain 20 64 + Store 969 968 + 970: 71(ptr) AccessChain 20 70 + 971: 15(ivec2) Load 970 + 972: 14(int) CompositeExtract 971 0 + 973: 14(int) GroupUMaxNonUniformAMD 25 ExclusiveScan 972 + 974: 14(int) CompositeExtract 971 1 + 975: 14(int) GroupUMaxNonUniformAMD 25 ExclusiveScan 974 + 976: 15(ivec2) CompositeConstruct 973 975 + 977: 71(ptr) AccessChain 20 70 + Store 977 976 + 978: 81(ptr) AccessChain 20 80 + 979: 17(fvec3) Load 978 + 980: 16(float) CompositeExtract 979 0 + 981: 16(float) GroupFMaxNonUniformAMD 25 ExclusiveScan 980 + 982: 16(float) CompositeExtract 979 1 + 983: 16(float) GroupFMaxNonUniformAMD 25 ExclusiveScan 982 + 984: 16(float) CompositeExtract 979 2 + 985: 16(float) GroupFMaxNonUniformAMD 25 ExclusiveScan 984 + 986: 17(fvec3) CompositeConstruct 981 983 985 + 987: 81(ptr) AccessChain 20 80 + Store 987 986 + 988: 22(ptr) AccessChain 20 21 + 989: 6(int) Load 988 + 990: 6(int) GroupIAddNonUniformAMD 25 ExclusiveScan 989 + 991: 22(ptr) AccessChain 20 21 + Store 991 990 + 992: 29(ptr) AccessChain 20 28 + 993: 8(ivec2) Load 992 + 994: 7(int) CompositeExtract 993 0 + 995: 7(int) GroupIAddNonUniformAMD 25 ExclusiveScan 994 + 996: 7(int) CompositeExtract 993 1 + 997: 7(int) GroupIAddNonUniformAMD 25 ExclusiveScan 996 + 998: 8(ivec2) CompositeConstruct 995 997 + 999: 29(ptr) AccessChain 20 28 + Store 999 998 + 1000: 39(ptr) AccessChain 20 38 + 1001: 10(fvec3) Load 1000 + 1002: 9(float) CompositeExtract 1001 0 + 1003: 9(float) GroupFAddNonUniformAMD 25 ExclusiveScan 1002 + 1004: 9(float) CompositeExtract 1001 1 + 1005: 9(float) GroupFAddNonUniformAMD 25 ExclusiveScan 1004 + 1006: 9(float) CompositeExtract 1001 2 + 1007: 9(float) GroupFAddNonUniformAMD 25 ExclusiveScan 1006 + 1008: 10(fvec3) CompositeConstruct 1003 1005 1007 + 1009: 39(ptr) AccessChain 20 38 + Store 1009 1008 + 1010: 51(ptr) AccessChain 20 50 + 1011: 12(fvec4) Load 1010 + 1012: 11(float) CompositeExtract 1011 0 + 1013: 11(float) GroupFAddNonUniformAMD 25 ExclusiveScan 1012 + 1014: 11(float) CompositeExtract 1011 1 + 1015: 11(float) GroupFAddNonUniformAMD 25 ExclusiveScan 1014 + 1016: 11(float) CompositeExtract 1011 2 + 1017: 11(float) GroupFAddNonUniformAMD 25 ExclusiveScan 1016 + 1018: 11(float) CompositeExtract 1011 3 + 1019: 11(float) GroupFAddNonUniformAMD 25 ExclusiveScan 1018 + 1020: 12(fvec4) CompositeConstruct 1013 1015 1017 1019 + 1021: 51(ptr) AccessChain 20 50 + Store 1021 1020 + 1022: 65(ptr) AccessChain 20 64 + 1023: 13(int) Load 1022 + 1024: 13(int) GroupIAddNonUniformAMD 25 ExclusiveScan 1023 + 1025: 65(ptr) AccessChain 20 64 + Store 1025 1024 + 1026: 71(ptr) AccessChain 20 70 + 1027: 15(ivec2) Load 1026 + 1028: 14(int) CompositeExtract 1027 0 + 1029: 14(int) GroupIAddNonUniformAMD 25 ExclusiveScan 1028 + 1030: 14(int) CompositeExtract 1027 1 + 1031: 14(int) GroupIAddNonUniformAMD 25 ExclusiveScan 1030 + 1032: 15(ivec2) CompositeConstruct 1029 1031 + 1033: 71(ptr) AccessChain 20 70 + Store 1033 1032 + 1034: 81(ptr) AccessChain 20 80 + 1035: 17(fvec3) Load 1034 + 1036: 16(float) CompositeExtract 1035 0 + 1037: 16(float) GroupFAddNonUniformAMD 25 ExclusiveScan 1036 + 1038: 16(float) CompositeExtract 1035 1 + 1039: 16(float) GroupFAddNonUniformAMD 25 ExclusiveScan 1038 + 1040: 16(float) CompositeExtract 1035 2 + 1041: 16(float) GroupFAddNonUniformAMD 25 ExclusiveScan 1040 + 1042: 17(fvec3) CompositeConstruct 1037 1039 1041 + 1043: 81(ptr) AccessChain 20 80 + Store 1043 1042 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderDrawParams.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderDrawParams.vert.out new file mode 100644 index 0000000..41ad78d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderDrawParams.vert.out @@ -0,0 +1,104 @@ +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 +// Id's are bound by 53 + + Capability Shader + Capability DrawParameters + Extension "SPV_KHR_shader_draw_parameters" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 9 16 29 37 + Source GLSL 450 + SourceExtension "GL_ARB_shader_draw_parameters" + Name 4 "main" + Name 9 "gl_BaseVertexARB" + Name 16 "gl_BaseInstanceARB" + 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" + Name 29 "" + Name 34 "Block" + MemberName 34(Block) 0 "pos" + Name 36 "block" + Name 37 "gl_DrawIDARB" + Decorate 9(gl_BaseVertexARB) BuiltIn BaseVertex + Decorate 16(gl_BaseInstanceARB) BuiltIn BaseInstance + 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 31 ArrayStride 16 + Decorate 33 ArrayStride 64 + MemberDecorate 34(Block) 0 Offset 0 + Decorate 34(Block) Block + Decorate 36(block) DescriptorSet 0 + Decorate 36(block) Binding 0 + Decorate 37(gl_DrawIDARB) BuiltIn DrawIndex + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeBool + 7: TypeInt 32 1 + 8: TypePointer Input 7(int) +9(gl_BaseVertexARB): 8(ptr) Variable Input + 11: 7(int) Constant 0 +16(gl_BaseInstanceARB): 8(ptr) Variable Input + 22: TypeFloat 32 + 23: TypeVector 22(float) 4 + 24: TypeInt 32 0 + 25: 24(int) Constant 1 + 26: TypeArray 22(float) 25 +27(gl_PerVertex): TypeStruct 23(fvec4) 22(float) 26 26 + 28: TypePointer Output 27(gl_PerVertex) + 29: 28(ptr) Variable Output + 30: 24(int) Constant 4 + 31: TypeArray 23(fvec4) 30 + 32: 24(int) Constant 2 + 33: TypeArray 31 32 + 34(Block): TypeStruct 33 + 35: TypePointer Uniform 34(Block) + 36(block): 35(ptr) Variable Uniform +37(gl_DrawIDARB): 8(ptr) Variable Input + 39: 7(int) Constant 4 + 41: TypePointer Uniform 23(fvec4) + 44: TypePointer Output 23(fvec4) + 47: 7(int) Constant 1 + 4(main): 2 Function None 3 + 5: Label + 10: 7(int) Load 9(gl_BaseVertexARB) + 12: 6(bool) SGreaterThan 10 11 + 13: 6(bool) LogicalNot 12 + SelectionMerge 15 None + BranchConditional 13 14 15 + 14: Label + 17: 7(int) Load 16(gl_BaseInstanceARB) + 18: 6(bool) SGreaterThan 17 11 + Branch 15 + 15: Label + 19: 6(bool) Phi 12 5 18 14 + SelectionMerge 21 None + BranchConditional 19 20 46 + 20: Label + 38: 7(int) Load 37(gl_DrawIDARB) + 40: 7(int) SMod 38 39 + 42: 41(ptr) AccessChain 36(block) 11 11 40 + 43: 23(fvec4) Load 42 + 45: 44(ptr) AccessChain 29 11 + Store 45 43 + Branch 21 + 46: Label + 48: 7(int) Load 37(gl_DrawIDARB) + 49: 7(int) SMod 48 39 + 50: 41(ptr) AccessChain 36(block) 11 47 49 + 51: 23(fvec4) Load 50 + 52: 44(ptr) AccessChain 29 11 + Store 52 51 + Branch 21 + 21: Label + 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 new file mode 100644 index 0000000..0277149 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderGroupVote.comp.out @@ -0,0 +1,64 @@ +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 +// Id's are bound by 33 + + Capability Shader + Capability SubgroupVoteKHR + Extension "SPV_KHR_subgroup_vote" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "main" + ExecutionMode 4 LocalSize 4 4 1 + Source GLSL 450 + SourceExtension "GL_ARB_shader_group_vote" + Name 4 "main" + Name 8 "b1" + Name 10 "Buffers" + MemberName 10(Buffers) 0 "b" + Name 12 "" + MemberDecorate 10(Buffers) 0 Offset 0 + Decorate 10(Buffers) BufferBlock + Decorate 12 DescriptorSet 0 + Decorate 12 Binding 0 + Decorate 32 BuiltIn WorkgroupSize + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeBool + 7: TypePointer Function 6(bool) + 9: TypeInt 32 0 + 10(Buffers): TypeStruct 9(int) + 11: TypePointer Uniform 10(Buffers) + 12: 11(ptr) Variable Uniform + 13: TypeInt 32 1 + 14: 13(int) Constant 0 + 15: TypePointer Uniform 9(int) + 18: 9(int) Constant 0 + 27: 9(int) Constant 1 + 30: TypeVector 9(int) 3 + 31: 9(int) Constant 4 + 32: 30(ivec3) ConstantComposite 31 31 27 + 4(main): 2 Function None 3 + 5: Label + 8(b1): 7(ptr) Variable Function + 16: 15(ptr) AccessChain 12 14 + 17: 9(int) Load 16 + 19: 6(bool) INotEqual 17 18 + Store 8(b1) 19 + 20: 6(bool) Load 8(b1) + 21: 6(bool) SubgroupAnyKHR 20 + Store 8(b1) 21 + 22: 6(bool) Load 8(b1) + 23: 6(bool) SubgroupAllKHR 22 + Store 8(b1) 23 + 24: 6(bool) Load 8(b1) + 25: 6(bool) SubgroupAllEqualKHR 24 + Store 8(b1) 25 + 26: 6(bool) Load 8(b1) + 28: 9(int) Select 26 27 18 + 29: 15(ptr) AccessChain 12 14 + Store 29 28 + 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 new file mode 100644 index 0000000..498c287 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shiftOps.frag.out @@ -0,0 +1,66 @@ +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 +// Id's are bound by 38 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 9 11 15 25 27 30 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + Name 4 "main" + Name 9 "icolor" + Name 11 "i3" + Name 15 "u1" + Name 25 "ucolor" + Name 27 "u3" + Name 30 "i1" + Decorate 11(i3) Flat + Decorate 15(u1) Flat + Decorate 27(u3) Flat + Decorate 30(i1) Flat + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypeVector 6(int) 3 + 8: TypePointer Output 7(ivec3) + 9(icolor): 8(ptr) Variable Output + 10: TypePointer Input 7(ivec3) + 11(i3): 10(ptr) Variable Input + 13: TypeInt 32 0 + 14: TypePointer Input 13(int) + 15(u1): 14(ptr) Variable Input + 17: TypeVector 13(int) 3 + 20: 13(int) Constant 4 + 24: TypePointer Output 17(ivec3) + 25(ucolor): 24(ptr) Variable Output + 26: TypePointer Input 17(ivec3) + 27(u3): 26(ptr) Variable Input + 29: TypePointer Input 6(int) + 30(i1): 29(ptr) Variable Input + 34: 6(int) Constant 5 + 4(main): 2 Function None 3 + 5: Label + 12: 7(ivec3) Load 11(i3) + 16: 13(int) Load 15(u1) + 18: 17(ivec3) CompositeConstruct 16 16 16 + 19: 7(ivec3) ShiftLeftLogical 12 18 + Store 9(icolor) 19 + 21: 7(ivec3) Load 9(icolor) + 22: 17(ivec3) CompositeConstruct 20 20 20 + 23: 7(ivec3) ShiftLeftLogical 21 22 + Store 9(icolor) 23 + 28: 17(ivec3) Load 27(u3) + 31: 6(int) Load 30(i1) + 32: 7(ivec3) CompositeConstruct 31 31 31 + 33: 17(ivec3) ShiftRightLogical 28 32 + Store 25(ucolor) 33 + 35: 17(ivec3) Load 25(ucolor) + 36: 7(ivec3) CompositeConstruct 34 34 34 + 37: 17(ivec3) ShiftRightLogical 35 36 + Store 25(ucolor) 37 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shortCircuit.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shortCircuit.frag.out new file mode 100644 index 0000000..7d5189a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shortCircuit.frag.out @@ -0,0 +1,237 @@ +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 +// Id's are bound by 147 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 12 24 34 113 140 142 + ExecutionMode 4 OriginUpperLeft + Source GLSL 400 + Name 4 "main" + Name 8 "foo(" + Name 12 "of1" + Name 24 "of4" + Name 27 "ub" + Name 34 "ui" + Name 44 "uba" + Name 113 "uf" + Name 140 "uiv4" + Name 142 "uv4" + Name 145 "ub41" + Name 146 "ub42" + Decorate 34(ui) Flat + Decorate 140(uiv4) Flat + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeBool + 7: TypeFunction 6(bool) + 10: TypeFloat 32 + 11: TypePointer Output 10(float) + 12(of1): 11(ptr) Variable Output + 14: 10(float) Constant 1065353216 + 17: 10(float) Constant 1092616192 + 21: 10(float) Constant 0 + 22: TypeVector 10(float) 4 + 23: TypePointer Output 22(fvec4) + 24(of4): 23(ptr) Variable Output + 25: 22(fvec4) ConstantComposite 21 21 21 21 + 26: TypePointer Private 6(bool) + 27(ub): 26(ptr) Variable Private + 32: TypeInt 32 1 + 33: TypePointer Input 32(int) + 34(ui): 33(ptr) Variable Input + 36: 32(int) Constant 2 + 44(uba): 26(ptr) Variable Private + 112: TypePointer Input 10(float) + 113(uf): 112(ptr) Variable Input + 116: 10(float) Constant 1082130432 + 138: TypeVector 32(int) 4 + 139: TypePointer Input 138(ivec4) + 140(uiv4): 139(ptr) Variable Input + 141: TypePointer Input 22(fvec4) + 142(uv4): 141(ptr) Variable Input + 143: TypeVector 6(bool) 4 + 144: TypePointer Private 143(bvec4) + 145(ub41): 144(ptr) Variable Private + 146(ub42): 144(ptr) Variable Private + 4(main): 2 Function None 3 + 5: Label + Store 12(of1) 21 + Store 24(of4) 25 + 28: 6(bool) Load 27(ub) + 29: 6(bool) LogicalNot 28 + SelectionMerge 31 None + BranchConditional 29 30 31 + 30: Label + 35: 32(int) Load 34(ui) + 37: 6(bool) SGreaterThan 35 36 + Branch 31 + 31: Label + 38: 6(bool) Phi 28 5 37 30 + SelectionMerge 40 None + BranchConditional 38 39 40 + 39: Label + 41: 10(float) Load 12(of1) + 42: 10(float) FAdd 41 14 + Store 12(of1) 42 + Branch 40 + 40: Label + 43: 6(bool) Load 27(ub) + 45: 6(bool) Load 44(uba) + 46: 6(bool) LogicalNot 45 + 47: 6(bool) LogicalAnd 43 46 + SelectionMerge 49 None + BranchConditional 47 48 49 + 48: Label + 50: 10(float) Load 12(of1) + 51: 10(float) FAdd 50 14 + Store 12(of1) 51 + Branch 49 + 49: Label + 52: 6(bool) Load 27(ub) + 53: 6(bool) LogicalNot 52 + SelectionMerge 55 None + BranchConditional 53 54 55 + 54: Label + 56: 6(bool) FunctionCall 8(foo() + Branch 55 + 55: Label + 57: 6(bool) Phi 52 49 56 54 + SelectionMerge 59 None + BranchConditional 57 58 59 + 58: Label + 60: 10(float) Load 12(of1) + 61: 10(float) FAdd 60 14 + Store 12(of1) 61 + Branch 59 + 59: Label + 62: 6(bool) Load 27(ub) + SelectionMerge 64 None + BranchConditional 62 63 64 + 63: Label + 65: 6(bool) FunctionCall 8(foo() + Branch 64 + 64: Label + 66: 6(bool) Phi 62 59 65 63 + SelectionMerge 68 None + BranchConditional 66 67 68 + 67: Label + 69: 10(float) Load 12(of1) + 70: 10(float) FAdd 69 14 + Store 12(of1) 70 + Branch 68 + 68: Label + 71: 6(bool) FunctionCall 8(foo() + 72: 6(bool) Load 27(ub) + 73: 6(bool) LogicalOr 71 72 + SelectionMerge 75 None + BranchConditional 73 74 75 + 74: Label + 76: 10(float) Load 12(of1) + 77: 10(float) FAdd 76 14 + Store 12(of1) 77 + Branch 75 + 75: Label + 78: 6(bool) FunctionCall 8(foo() + 79: 6(bool) Load 27(ub) + 80: 6(bool) LogicalAnd 78 79 + SelectionMerge 82 None + BranchConditional 80 81 82 + 81: Label + 83: 10(float) Load 12(of1) + 84: 10(float) FAdd 83 14 + Store 12(of1) 84 + Branch 82 + 82: Label + 85: 6(bool) Load 27(ub) + 86: 6(bool) LogicalNot 85 + SelectionMerge 88 None + BranchConditional 86 87 88 + 87: Label + 89: 10(float) Load 12(of1) + 90: 10(float) FAdd 89 14 + Store 12(of1) 90 + 91: 6(bool) FOrdGreaterThan 90 14 + Branch 88 + 88: Label + 92: 6(bool) Phi 85 82 91 87 + SelectionMerge 94 None + BranchConditional 92 93 94 + 93: Label + 95: 22(fvec4) Load 24(of4) + 96: 22(fvec4) CompositeConstruct 14 14 14 14 + 97: 22(fvec4) FAdd 95 96 + Store 24(of4) 97 + Branch 94 + 94: Label + 98: 10(float) Load 12(of1) + 99: 10(float) FAdd 98 14 + Store 12(of1) 99 + 100: 6(bool) FOrdGreaterThan 99 14 + 101: 6(bool) Load 27(ub) + 102: 6(bool) LogicalOr 100 101 + SelectionMerge 104 None + BranchConditional 102 103 104 + 103: Label + 105: 22(fvec4) Load 24(of4) + 106: 22(fvec4) CompositeConstruct 14 14 14 14 + 107: 22(fvec4) FAdd 105 106 + Store 24(of4) 107 + Branch 104 + 104: Label + 108: 6(bool) Load 27(ub) + 109: 6(bool) LogicalNot 108 + SelectionMerge 111 None + BranchConditional 109 110 111 + 110: Label + 114: 10(float) Load 113(uf) + 115: 10(float) ExtInst 1(GLSL.std.450) 13(Sin) 114 + 117: 10(float) FMul 115 116 + 118: 10(float) Load 12(of1) + 119: 6(bool) FOrdGreaterThan 117 118 + Branch 111 + 111: Label + 120: 6(bool) Phi 108 104 119 110 + SelectionMerge 122 None + BranchConditional 120 121 122 + 121: Label + 123: 10(float) Load 12(of1) + 124: 10(float) FAdd 123 14 + Store 12(of1) 124 + Branch 122 + 122: Label + 125: 6(bool) Load 27(ub) + SelectionMerge 127 None + BranchConditional 125 126 127 + 126: Label + 128: 10(float) Load 113(uf) + 129: 10(float) ExtInst 1(GLSL.std.450) 13(Sin) 128 + 130: 10(float) FMul 129 116 + 131: 10(float) Load 12(of1) + 132: 6(bool) FOrdGreaterThan 130 131 + Branch 127 + 127: Label + 133: 6(bool) Phi 125 122 132 126 + SelectionMerge 135 None + BranchConditional 133 134 135 + 134: Label + 136: 10(float) Load 12(of1) + 137: 10(float) FAdd 136 14 + Store 12(of1) 137 + Branch 135 + 135: Label + Return + FunctionEnd + 8(foo(): 6(bool) Function None 7 + 9: Label + 13: 10(float) Load 12(of1) + 15: 10(float) FAdd 13 14 + Store 12(of1) 15 + 16: 10(float) Load 12(of1) + 18: 6(bool) FOrdGreaterThan 16 17 + ReturnValue 18 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.simpleFunctionCall.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.simpleFunctionCall.frag.out new file mode 100755 index 0000000..2e6b671 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.simpleFunctionCall.frag.out @@ -0,0 +1,35 @@ +spv.simpleFunctionCall.frag +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 19 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 12 17 + ExecutionMode 4 OriginUpperLeft + Source GLSL 150 + Name 4 "main" + Name 9 "foo(" + Name 12 "BaseColor" + Name 17 "gl_FragColor" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypeFunction 7(fvec4) + 11: TypePointer Input 7(fvec4) + 12(BaseColor): 11(ptr) Variable Input + 16: TypePointer Output 7(fvec4) +17(gl_FragColor): 16(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 18: 7(fvec4) FunctionCall 9(foo() + Store 17(gl_FragColor) 18 + Return + FunctionEnd + 9(foo(): 7(fvec4) Function None 8 + 10: Label + 13: 7(fvec4) Load 12(BaseColor) + ReturnValue 13 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.simpleMat.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.simpleMat.vert.out new file mode 100755 index 0000000..2cad631 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.simpleMat.vert.out @@ -0,0 +1,60 @@ +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 +// Id's are bound by 39 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 9 12 15 19 23 34 + Source GLSL 330 + Name 4 "main" + Name 9 "glPos" + Name 12 "mvp" + Name 15 "v" + Name 19 "f" + Name 23 "am3" + Name 34 "arraym" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Output 7(fvec4) + 9(glPos): 8(ptr) Variable Output + 10: TypeMatrix 7(fvec4) 4 + 11: TypePointer Output 10 + 12(mvp): 11(ptr) Variable Output + 14: TypePointer Input 7(fvec4) + 15(v): 14(ptr) Variable Input + 18: TypePointer Output 6(float) + 19(f): 18(ptr) Variable Output + 20: TypeVector 6(float) 3 + 21: TypeMatrix 20(fvec3) 3 + 22: TypePointer Input 21 + 23(am3): 22(ptr) Variable Input + 24: TypeInt 32 1 + 25: 24(int) Constant 2 + 26: TypeInt 32 0 + 27: 26(int) Constant 1 + 28: TypePointer Input 6(float) + 31: 26(int) Constant 3 + 32: TypeArray 10 31 + 33: TypePointer Input 32 + 34(arraym): 33(ptr) Variable Input + 35: 24(int) Constant 1 + 4(main): 2 Function None 3 + 5: Label + 13: 10 Load 12(mvp) + 16: 7(fvec4) Load 15(v) + 17: 7(fvec4) MatrixTimesVector 13 16 + Store 9(glPos) 17 + 29: 28(ptr) AccessChain 23(am3) 25 27 + 30: 6(float) Load 29 + 36: 28(ptr) AccessChain 34(arraym) 35 25 31 + 37: 6(float) Load 36 + 38: 6(float) FAdd 30 37 + Store 19(f) 38 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.sparseTexture.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.sparseTexture.frag.out new file mode 100644 index 0000000..431ef15 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.sparseTexture.frag.out @@ -0,0 +1,589 @@ +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 +// Id's are bound by 438 + + Capability Shader + Capability SampledRect + Capability SparseResidency + Capability SampledCubeArray + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 33 48 89 365 393 405 423 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + SourceExtension "GL_ARB_sparse_texture2" + Name 4 "main" + Name 8 "resident" + Name 13 "texel" + Name 18 "itexel" + Name 23 "utexel" + Name 29 "s2D" + Name 33 "c2" + Name 35 "ResType" + Name 44 "s3D" + Name 48 "c3" + Name 59 "isCube" + Name 62 "ResType" + Name 71 "s2DShadow" + Name 77 "ResType" + Name 86 "sCubeArrayShadow" + Name 89 "c4" + Name 108 "usCubeArray" + Name 111 "ResType" + Name 140 "us2DRect" + Name 154 "s2DArrayShadow" + Name 188 "s2DMS" + Name 228 "is2DArray" + Name 261 "sCubeShadow" + Name 294 "s2DRectShadow" + Name 365 "offsets" + Name 390 "i2D" + Name 393 "ic2" + Name 402 "ii3D" + Name 405 "ic3" + Name 414 "i2DMS" + Name 423 "outColor" + Decorate 29(s2D) DescriptorSet 0 + Decorate 44(s3D) DescriptorSet 0 + Decorate 59(isCube) DescriptorSet 0 + Decorate 71(s2DShadow) DescriptorSet 0 + Decorate 86(sCubeArrayShadow) DescriptorSet 0 + Decorate 108(usCubeArray) DescriptorSet 0 + Decorate 140(us2DRect) DescriptorSet 0 + Decorate 154(s2DArrayShadow) DescriptorSet 0 + Decorate 188(s2DMS) DescriptorSet 0 + Decorate 228(is2DArray) DescriptorSet 0 + Decorate 261(sCubeShadow) DescriptorSet 0 + Decorate 294(s2DRectShadow) DescriptorSet 0 + Decorate 365(offsets) Flat + Decorate 390(i2D) DescriptorSet 0 + Decorate 393(ic2) Flat + Decorate 402(ii3D) DescriptorSet 0 + Decorate 405(ic3) Flat + Decorate 414(i2DMS) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypePointer Function 6(int) + 9: 6(int) Constant 0 + 10: TypeFloat 32 + 11: TypeVector 10(float) 4 + 12: TypePointer Function 11(fvec4) + 14: 10(float) Constant 0 + 15: 11(fvec4) ConstantComposite 14 14 14 14 + 16: TypeVector 6(int) 4 + 17: TypePointer Function 16(ivec4) + 19: 16(ivec4) ConstantComposite 9 9 9 9 + 20: TypeInt 32 0 + 21: TypeVector 20(int) 4 + 22: TypePointer Function 21(ivec4) + 24: 20(int) Constant 0 + 25: 21(ivec4) ConstantComposite 24 24 24 24 + 26: TypeImage 10(float) 2D sampled format:Unknown + 27: TypeSampledImage 26 + 28: TypePointer UniformConstant 27 + 29(s2D): 28(ptr) Variable UniformConstant + 31: TypeVector 10(float) 2 + 32: TypePointer Input 31(fvec2) + 33(c2): 32(ptr) Variable Input + 35(ResType): TypeStruct 6(int) 11(fvec4) + 41: TypeImage 10(float) 3D sampled format:Unknown + 42: TypeSampledImage 41 + 43: TypePointer UniformConstant 42 + 44(s3D): 43(ptr) Variable UniformConstant + 46: TypeVector 10(float) 3 + 47: TypePointer Input 46(fvec3) + 48(c3): 47(ptr) Variable Input + 50: 10(float) Constant 1073741824 + 56: TypeImage 6(int) Cube sampled format:Unknown + 57: TypeSampledImage 56 + 58: TypePointer UniformConstant 57 + 59(isCube): 58(ptr) Variable UniformConstant + 62(ResType): TypeStruct 6(int) 16(ivec4) + 68: TypeImage 10(float) 2D depth sampled format:Unknown + 69: TypeSampledImage 68 + 70: TypePointer UniformConstant 69 + 71(s2DShadow): 70(ptr) Variable UniformConstant + 74: TypePointer Function 10(float) + 77(ResType): TypeStruct 6(int) 10(float) + 83: TypeImage 10(float) Cube depth array sampled format:Unknown + 84: TypeSampledImage 83 + 85: TypePointer UniformConstant 84 +86(sCubeArrayShadow): 85(ptr) Variable UniformConstant + 88: TypePointer Input 11(fvec4) + 89(c4): 88(ptr) Variable Input + 91: 10(float) Constant 1065353216 + 105: TypeImage 20(int) Cube array sampled format:Unknown + 106: TypeSampledImage 105 + 107: TypePointer UniformConstant 106 +108(usCubeArray): 107(ptr) Variable UniformConstant + 111(ResType): TypeStruct 6(int) 21(ivec4) + 119: 20(int) Constant 1 + 129: TypeVector 6(int) 3 + 130: 6(int) Constant 2 + 131: 129(ivec3) ConstantComposite 130 130 130 + 137: TypeImage 20(int) Rect sampled format:Unknown + 138: TypeSampledImage 137 + 139: TypePointer UniformConstant 138 + 140(us2DRect): 139(ptr) Variable UniformConstant + 143: TypeVector 6(int) 2 + 144: 6(int) Constant 3 + 145: 143(ivec2) ConstantComposite 144 144 + 151: TypeImage 10(float) 2D depth array sampled format:Unknown + 152: TypeSampledImage 151 + 153: TypePointer UniformConstant 152 +154(s2DArrayShadow): 153(ptr) Variable UniformConstant + 157: 6(int) Constant 5 + 158: 143(ivec2) ConstantComposite 157 157 + 159: 20(int) Constant 2 + 185: TypeImage 10(float) 2D multi-sampled sampled format:Unknown + 186: TypeSampledImage 185 + 187: TypePointer UniformConstant 186 + 188(s2DMS): 187(ptr) Variable UniformConstant + 192: 6(int) Constant 4 + 202: 129(ivec3) ConstantComposite 192 192 192 + 225: TypeImage 6(int) 2D array sampled format:Unknown + 226: TypeSampledImage 225 + 227: TypePointer UniformConstant 226 + 228(is2DArray): 227(ptr) Variable UniformConstant + 231: 6(int) Constant 6 + 232: 143(ivec2) ConstantComposite 231 231 + 240: 6(int) Constant 7 + 241: 143(ivec2) ConstantComposite 240 240 + 258: TypeImage 10(float) Cube depth sampled format:Unknown + 259: TypeSampledImage 258 + 260: TypePointer UniformConstant 259 +261(sCubeShadow): 260(ptr) Variable UniformConstant + 291: TypeImage 10(float) Rect depth sampled format:Unknown + 292: TypeSampledImage 291 + 293: TypePointer UniformConstant 292 +294(s2DRectShadow): 293(ptr) Variable UniformConstant + 299: 20(int) Constant 3 + 311: 143(ivec2) ConstantComposite 130 130 + 340: 143(ivec2) ConstantComposite 192 192 + 362: 20(int) Constant 4 + 363: TypeArray 143(ivec2) 362 + 364: TypePointer Input 363 + 365(offsets): 364(ptr) Variable Input + 388: TypeImage 10(float) 2D nonsampled format:Rgba32f + 389: TypePointer UniformConstant 388 + 390(i2D): 389(ptr) Variable UniformConstant + 392: TypePointer Input 143(ivec2) + 393(ic2): 392(ptr) Variable Input + 400: TypeImage 6(int) 3D nonsampled format:Rgba32i + 401: TypePointer UniformConstant 400 + 402(ii3D): 401(ptr) Variable UniformConstant + 404: TypePointer Input 129(ivec3) + 405(ic3): 404(ptr) Variable Input + 412: TypeImage 10(float) 2D multi-sampled nonsampled format:Rgba32f + 413: TypePointer UniformConstant 412 + 414(i2DMS): 413(ptr) Variable UniformConstant + 422: TypePointer Output 11(fvec4) + 423(outColor): 422(ptr) Variable Output + 426: TypeBool + 4(main): 2 Function None 3 + 5: Label + 8(resident): 7(ptr) Variable Function + 13(texel): 12(ptr) Variable Function + 18(itexel): 17(ptr) Variable Function + 23(utexel): 22(ptr) Variable Function + 424: 12(ptr) Variable Function + Store 8(resident) 9 + Store 13(texel) 15 + Store 18(itexel) 19 + Store 23(utexel) 25 + 30: 27 Load 29(s2D) + 34: 31(fvec2) Load 33(c2) + 36: 35(ResType) ImageSparseSampleImplicitLod 30 34 + 37: 11(fvec4) CompositeExtract 36 1 + Store 13(texel) 37 + 38: 6(int) CompositeExtract 36 0 + 39: 6(int) Load 8(resident) + 40: 6(int) BitwiseOr 39 38 + Store 8(resident) 40 + 45: 42 Load 44(s3D) + 49: 46(fvec3) Load 48(c3) + 51: 35(ResType) ImageSparseSampleImplicitLod 45 49 Bias 50 + 52: 11(fvec4) CompositeExtract 51 1 + Store 13(texel) 52 + 53: 6(int) CompositeExtract 51 0 + 54: 6(int) Load 8(resident) + 55: 6(int) BitwiseOr 54 53 + Store 8(resident) 55 + 60: 57 Load 59(isCube) + 61: 46(fvec3) Load 48(c3) + 63: 62(ResType) ImageSparseSampleImplicitLod 60 61 + 64: 16(ivec4) CompositeExtract 63 1 + Store 18(itexel) 64 + 65: 6(int) CompositeExtract 63 0 + 66: 6(int) Load 8(resident) + 67: 6(int) BitwiseOr 66 65 + Store 8(resident) 67 + 72: 69 Load 71(s2DShadow) + 73: 46(fvec3) Load 48(c3) + 75: 74(ptr) AccessChain 13(texel) 24 + 76: 10(float) CompositeExtract 73 2 + 78: 77(ResType) ImageSparseSampleDrefImplicitLod 72 73 76 + 79: 10(float) CompositeExtract 78 1 + Store 75 79 + 80: 6(int) CompositeExtract 78 0 + 81: 6(int) Load 8(resident) + 82: 6(int) BitwiseOr 81 80 + Store 8(resident) 82 + 87: 84 Load 86(sCubeArrayShadow) + 90: 11(fvec4) Load 89(c4) + 92: 74(ptr) AccessChain 13(texel) 24 + 93: 77(ResType) ImageSparseSampleDrefImplicitLod 87 90 91 + 94: 10(float) CompositeExtract 93 1 + Store 92 94 + 95: 6(int) CompositeExtract 93 0 + 96: 6(int) Load 8(resident) + 97: 6(int) BitwiseOr 96 95 + Store 8(resident) 97 + 98: 27 Load 29(s2D) + 99: 31(fvec2) Load 33(c2) + 100: 35(ResType) ImageSparseSampleExplicitLod 98 99 Lod 50 + 101: 11(fvec4) CompositeExtract 100 1 + Store 13(texel) 101 + 102: 6(int) CompositeExtract 100 0 + 103: 6(int) Load 8(resident) + 104: 6(int) BitwiseOr 103 102 + Store 8(resident) 104 + 109: 106 Load 108(usCubeArray) + 110: 11(fvec4) Load 89(c4) + 112:111(ResType) ImageSparseSampleExplicitLod 109 110 Lod 91 + 113: 21(ivec4) CompositeExtract 112 1 + Store 23(utexel) 113 + 114: 6(int) CompositeExtract 112 0 + 115: 6(int) Load 8(resident) + 116: 6(int) BitwiseOr 115 114 + Store 8(resident) 116 + 117: 69 Load 71(s2DShadow) + 118: 46(fvec3) Load 48(c3) + 120: 74(ptr) AccessChain 13(texel) 119 + 121: 10(float) CompositeExtract 118 2 + 122: 77(ResType) ImageSparseSampleDrefExplicitLod 117 118 121 Lod 50 + 123: 10(float) CompositeExtract 122 1 + Store 120 123 + 124: 6(int) CompositeExtract 122 0 + 125: 6(int) Load 8(resident) + 126: 6(int) BitwiseOr 125 124 + Store 8(resident) 126 + 127: 42 Load 44(s3D) + 128: 46(fvec3) Load 48(c3) + 132: 35(ResType) ImageSparseSampleImplicitLod 127 128 Bias ConstOffset 50 131 + 133: 11(fvec4) CompositeExtract 132 1 + Store 13(texel) 133 + 134: 6(int) CompositeExtract 132 0 + 135: 6(int) Load 8(resident) + 136: 6(int) BitwiseOr 135 134 + Store 8(resident) 136 + 141: 138 Load 140(us2DRect) + 142: 31(fvec2) Load 33(c2) + 146:111(ResType) ImageSparseSampleImplicitLod 141 142 ConstOffset 145 + 147: 21(ivec4) CompositeExtract 146 1 + Store 23(utexel) 147 + 148: 6(int) CompositeExtract 146 0 + 149: 6(int) Load 8(resident) + 150: 6(int) BitwiseOr 149 148 + Store 8(resident) 150 + 155: 152 Load 154(s2DArrayShadow) + 156: 11(fvec4) Load 89(c4) + 160: 74(ptr) AccessChain 13(texel) 159 + 161: 10(float) CompositeExtract 156 3 + 162: 77(ResType) ImageSparseSampleDrefImplicitLod 155 156 161 ConstOffset 158 + 163: 10(float) CompositeExtract 162 1 + Store 160 163 + 164: 6(int) CompositeExtract 162 0 + 165: 6(int) Load 8(resident) + 166: 6(int) BitwiseOr 165 164 + Store 8(resident) 166 + 167: 27 Load 29(s2D) + 168: 31(fvec2) Load 33(c2) + 169: 143(ivec2) ConvertFToS 168 + 170: 26 Image 167 + 171: 35(ResType) ImageSparseFetch 170 169 Lod 130 + 172: 11(fvec4) CompositeExtract 171 1 + Store 13(texel) 172 + 173: 6(int) CompositeExtract 171 0 + 174: 6(int) Load 8(resident) + 175: 6(int) BitwiseOr 174 173 + Store 8(resident) 175 + 176: 138 Load 140(us2DRect) + 177: 31(fvec2) Load 33(c2) + 178: 143(ivec2) ConvertFToS 177 + 179: 137 Image 176 + 180:111(ResType) ImageSparseFetch 179 178 + 181: 21(ivec4) CompositeExtract 180 1 + Store 23(utexel) 181 + 182: 6(int) CompositeExtract 180 0 + 183: 6(int) Load 8(resident) + 184: 6(int) BitwiseOr 183 182 + Store 8(resident) 184 + 189: 186 Load 188(s2DMS) + 190: 31(fvec2) Load 33(c2) + 191: 143(ivec2) ConvertFToS 190 + 193: 185 Image 189 + 194: 35(ResType) ImageSparseFetch 193 191 Sample 192 + 195: 11(fvec4) CompositeExtract 194 1 + Store 13(texel) 195 + 196: 6(int) CompositeExtract 194 0 + 197: 6(int) Load 8(resident) + 198: 6(int) BitwiseOr 197 196 + Store 8(resident) 198 + 199: 42 Load 44(s3D) + 200: 46(fvec3) Load 48(c3) + 201: 129(ivec3) ConvertFToS 200 + 203: 41 Image 199 + 204: 35(ResType) ImageSparseFetch 203 201 Lod ConstOffset 130 202 + 205: 11(fvec4) CompositeExtract 204 1 + Store 13(texel) 205 + 206: 6(int) CompositeExtract 204 0 + 207: 6(int) Load 8(resident) + 208: 6(int) BitwiseOr 207 206 + Store 8(resident) 208 + 209: 138 Load 140(us2DRect) + 210: 31(fvec2) Load 33(c2) + 211: 143(ivec2) ConvertFToS 210 + 212: 137 Image 209 + 213:111(ResType) ImageSparseFetch 212 211 ConstOffset 145 + 214: 21(ivec4) CompositeExtract 213 1 + Store 23(utexel) 214 + 215: 6(int) CompositeExtract 213 0 + 216: 6(int) Load 8(resident) + 217: 6(int) BitwiseOr 216 215 + Store 8(resident) 217 + 218: 27 Load 29(s2D) + 219: 31(fvec2) Load 33(c2) + 220: 35(ResType) ImageSparseSampleExplicitLod 218 219 Lod ConstOffset 50 158 + 221: 11(fvec4) CompositeExtract 220 1 + Store 13(texel) 221 + 222: 6(int) CompositeExtract 220 0 + 223: 6(int) Load 8(resident) + 224: 6(int) BitwiseOr 223 222 + Store 8(resident) 224 + 229: 226 Load 228(is2DArray) + 230: 46(fvec3) Load 48(c3) + 233: 62(ResType) ImageSparseSampleExplicitLod 229 230 Lod ConstOffset 50 232 + 234: 16(ivec4) CompositeExtract 233 1 + Store 18(itexel) 234 + 235: 6(int) CompositeExtract 233 0 + 236: 6(int) Load 8(resident) + 237: 6(int) BitwiseOr 236 235 + Store 8(resident) 237 + 238: 69 Load 71(s2DShadow) + 239: 46(fvec3) Load 48(c3) + 242: 74(ptr) AccessChain 13(texel) 159 + 243: 10(float) CompositeExtract 239 2 + 244: 77(ResType) ImageSparseSampleDrefExplicitLod 238 239 243 Lod ConstOffset 50 241 + 245: 10(float) CompositeExtract 244 1 + Store 242 245 + 246: 6(int) CompositeExtract 244 0 + 247: 6(int) Load 8(resident) + 248: 6(int) BitwiseOr 247 246 + Store 8(resident) 248 + 249: 42 Load 44(s3D) + 250: 46(fvec3) Load 48(c3) + 251: 46(fvec3) Load 48(c3) + 252: 46(fvec3) Load 48(c3) + 253: 35(ResType) ImageSparseSampleExplicitLod 249 250 Grad 251 252 + 254: 11(fvec4) CompositeExtract 253 1 + Store 13(texel) 254 + 255: 6(int) CompositeExtract 253 0 + 256: 6(int) Load 8(resident) + 257: 6(int) BitwiseOr 256 255 + Store 8(resident) 257 + 262: 259 Load 261(sCubeShadow) + 263: 11(fvec4) Load 89(c4) + 264: 46(fvec3) Load 48(c3) + 265: 46(fvec3) Load 48(c3) + 266: 74(ptr) AccessChain 13(texel) 119 + 267: 10(float) CompositeExtract 263 3 + 268: 77(ResType) ImageSparseSampleDrefExplicitLod 262 263 267 Grad 264 265 + 269: 10(float) CompositeExtract 268 1 + Store 266 269 + 270: 6(int) CompositeExtract 268 0 + 271: 6(int) Load 8(resident) + 272: 6(int) BitwiseOr 271 270 + Store 8(resident) 272 + 273: 106 Load 108(usCubeArray) + 274: 11(fvec4) Load 89(c4) + 275: 46(fvec3) Load 48(c3) + 276: 46(fvec3) Load 48(c3) + 277:111(ResType) ImageSparseSampleExplicitLod 273 274 Grad 275 276 + 278: 21(ivec4) CompositeExtract 277 1 + Store 23(utexel) 278 + 279: 6(int) CompositeExtract 277 0 + 280: 6(int) Load 8(resident) + 281: 6(int) BitwiseOr 280 279 + Store 8(resident) 281 + 282: 27 Load 29(s2D) + 283: 31(fvec2) Load 33(c2) + 284: 31(fvec2) Load 33(c2) + 285: 31(fvec2) Load 33(c2) + 286: 35(ResType) ImageSparseSampleExplicitLod 282 283 Grad ConstOffset 284 285 158 + 287: 11(fvec4) CompositeExtract 286 1 + Store 13(texel) 287 + 288: 6(int) CompositeExtract 286 0 + 289: 6(int) Load 8(resident) + 290: 6(int) BitwiseOr 289 288 + Store 8(resident) 290 + 295: 292 Load 294(s2DRectShadow) + 296: 46(fvec3) Load 48(c3) + 297: 31(fvec2) Load 33(c2) + 298: 31(fvec2) Load 33(c2) + 300: 74(ptr) AccessChain 13(texel) 299 + 301: 10(float) CompositeExtract 296 2 + 302: 77(ResType) ImageSparseSampleDrefExplicitLod 295 296 301 Grad ConstOffset 297 298 232 + 303: 10(float) CompositeExtract 302 1 + Store 300 303 + 304: 6(int) CompositeExtract 302 0 + 305: 6(int) Load 8(resident) + 306: 6(int) BitwiseOr 305 304 + Store 8(resident) 306 + 307: 226 Load 228(is2DArray) + 308: 46(fvec3) Load 48(c3) + 309: 31(fvec2) Load 33(c2) + 310: 31(fvec2) Load 33(c2) + 312: 62(ResType) ImageSparseSampleExplicitLod 307 308 Grad ConstOffset 309 310 311 + 313: 16(ivec4) CompositeExtract 312 1 + Store 18(itexel) 313 + 314: 6(int) CompositeExtract 312 0 + 315: 6(int) Load 8(resident) + 316: 6(int) BitwiseOr 315 314 + Store 8(resident) 316 + 317: 27 Load 29(s2D) + 318: 31(fvec2) Load 33(c2) + 319: 35(ResType) ImageSparseGather 317 318 9 + 320: 11(fvec4) CompositeExtract 319 1 + Store 13(texel) 320 + 321: 6(int) CompositeExtract 319 0 + 322: 6(int) Load 8(resident) + 323: 6(int) BitwiseOr 322 321 + Store 8(resident) 323 + 324: 226 Load 228(is2DArray) + 325: 46(fvec3) Load 48(c3) + 326: 62(ResType) ImageSparseGather 324 325 130 + 327: 16(ivec4) CompositeExtract 326 1 + Store 18(itexel) 327 + 328: 6(int) CompositeExtract 326 0 + 329: 6(int) Load 8(resident) + 330: 6(int) BitwiseOr 329 328 + Store 8(resident) 330 + 331: 152 Load 154(s2DArrayShadow) + 332: 46(fvec3) Load 48(c3) + 333: 35(ResType) ImageSparseDrefGather 331 332 50 + 334: 11(fvec4) CompositeExtract 333 1 + Store 13(texel) 334 + 335: 6(int) CompositeExtract 333 0 + 336: 6(int) Load 8(resident) + 337: 6(int) BitwiseOr 336 335 + Store 8(resident) 337 + 338: 27 Load 29(s2D) + 339: 31(fvec2) Load 33(c2) + 341: 35(ResType) ImageSparseGather 338 339 9 ConstOffset 340 + 342: 11(fvec4) CompositeExtract 341 1 + Store 13(texel) 342 + 343: 6(int) CompositeExtract 341 0 + 344: 6(int) Load 8(resident) + 345: 6(int) BitwiseOr 344 343 + Store 8(resident) 345 + 346: 226 Load 228(is2DArray) + 347: 46(fvec3) Load 48(c3) + 348: 62(ResType) ImageSparseGather 346 347 130 ConstOffset 158 + 349: 16(ivec4) CompositeExtract 348 1 + Store 18(itexel) 349 + 350: 6(int) CompositeExtract 348 0 + 351: 6(int) Load 8(resident) + 352: 6(int) BitwiseOr 351 350 + Store 8(resident) 352 + 353: 292 Load 294(s2DRectShadow) + 354: 31(fvec2) Load 33(c2) + 355: 35(ResType) ImageSparseDrefGather 353 354 50 ConstOffset 241 + 356: 11(fvec4) CompositeExtract 355 1 + Store 13(texel) 356 + 357: 6(int) CompositeExtract 355 0 + 358: 6(int) Load 8(resident) + 359: 6(int) BitwiseOr 358 357 + Store 8(resident) 359 + 360: 27 Load 29(s2D) + 361: 31(fvec2) Load 33(c2) + 366: 363 Load 365(offsets) + 367: 35(ResType) ImageSparseGather 360 361 9 ConstOffsets 366 + 368: 11(fvec4) CompositeExtract 367 1 + Store 13(texel) 368 + 369: 6(int) CompositeExtract 367 0 + 370: 6(int) Load 8(resident) + 371: 6(int) BitwiseOr 370 369 + Store 8(resident) 371 + 372: 226 Load 228(is2DArray) + 373: 46(fvec3) Load 48(c3) + 374: 363 Load 365(offsets) + 375: 62(ResType) ImageSparseGather 372 373 130 ConstOffsets 374 + 376: 16(ivec4) CompositeExtract 375 1 + Store 18(itexel) 376 + 377: 6(int) CompositeExtract 375 0 + 378: 6(int) Load 8(resident) + 379: 6(int) BitwiseOr 378 377 + Store 8(resident) 379 + 380: 292 Load 294(s2DRectShadow) + 381: 31(fvec2) Load 33(c2) + 382: 363 Load 365(offsets) + 383: 35(ResType) ImageSparseDrefGather 380 381 50 ConstOffsets 382 + 384: 11(fvec4) CompositeExtract 383 1 + Store 13(texel) 384 + 385: 6(int) CompositeExtract 383 0 + 386: 6(int) Load 8(resident) + 387: 6(int) BitwiseOr 386 385 + Store 8(resident) 387 + 391: 388 Load 390(i2D) + 394: 143(ivec2) Load 393(ic2) + 395: 35(ResType) ImageSparseRead 391 394 + 396: 11(fvec4) CompositeExtract 395 1 + Store 13(texel) 396 + 397: 6(int) CompositeExtract 395 0 + 398: 6(int) Load 8(resident) + 399: 6(int) BitwiseOr 398 397 + Store 8(resident) 399 + 403: 400 Load 402(ii3D) + 406: 129(ivec3) Load 405(ic3) + 407: 62(ResType) ImageSparseRead 403 406 + 408: 16(ivec4) CompositeExtract 407 1 + Store 18(itexel) 408 + 409: 6(int) CompositeExtract 407 0 + 410: 6(int) Load 8(resident) + 411: 6(int) BitwiseOr 410 409 + Store 8(resident) 411 + 415: 412 Load 414(i2DMS) + 416: 143(ivec2) Load 393(ic2) + 417: 35(ResType) ImageSparseRead 415 416 Sample 144 + 418: 11(fvec4) CompositeExtract 417 1 + Store 13(texel) 418 + 419: 6(int) CompositeExtract 417 0 + 420: 6(int) Load 8(resident) + 421: 6(int) BitwiseOr 420 419 + Store 8(resident) 421 + 425: 6(int) Load 8(resident) + 427: 426(bool) ImageSparseTexelsResident 425 + SelectionMerge 429 None + BranchConditional 427 428 431 + 428: Label + 430: 11(fvec4) Load 13(texel) + Store 424 430 + Branch 429 + 431: Label + 432: 16(ivec4) Load 18(itexel) + 433: 11(fvec4) ConvertSToF 432 + 434: 21(ivec4) Load 23(utexel) + 435: 11(fvec4) ConvertUToF 434 + 436: 11(fvec4) FAdd 433 435 + Store 424 436 + Branch 429 + 429: Label + 437: 11(fvec4) Load 424 + Store 423(outColor) 437 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.sparseTextureClamp.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.sparseTextureClamp.frag.out new file mode 100644 index 0000000..175dc35 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.sparseTextureClamp.frag.out @@ -0,0 +1,467 @@ +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 +// Id's are bound by 360 + + Capability Shader + Capability SampledRect + Capability SparseResidency + Capability MinLod + Capability SampledCubeArray + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 33 36 51 95 345 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + SourceExtension "GL_ARB_sparse_texture_clamp" + Name 4 "main" + Name 8 "resident" + Name 13 "texel" + Name 18 "itexel" + Name 23 "utexel" + Name 29 "s2D" + Name 33 "c2" + Name 36 "lodClamp" + Name 38 "ResType" + Name 47 "s3D" + Name 51 "c3" + Name 63 "isCube" + Name 67 "ResType" + Name 76 "s2DShadow" + Name 83 "ResType" + Name 92 "sCubeArrayShadow" + Name 95 "c4" + Name 154 "us2DRect" + Name 161 "ResType" + Name 170 "s2DArrayShadow" + Name 218 "sCubeShadow" + Name 235 "usCubeArray" + Name 286 "s2DRectShadow" + Name 305 "is2DArray" + Name 345 "outColor" + Decorate 29(s2D) DescriptorSet 0 + Decorate 47(s3D) DescriptorSet 0 + Decorate 63(isCube) DescriptorSet 0 + Decorate 76(s2DShadow) DescriptorSet 0 + Decorate 92(sCubeArrayShadow) DescriptorSet 0 + Decorate 154(us2DRect) DescriptorSet 0 + Decorate 170(s2DArrayShadow) DescriptorSet 0 + Decorate 218(sCubeShadow) DescriptorSet 0 + Decorate 235(usCubeArray) DescriptorSet 0 + Decorate 286(s2DRectShadow) DescriptorSet 0 + Decorate 305(is2DArray) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypePointer Function 6(int) + 9: 6(int) Constant 0 + 10: TypeFloat 32 + 11: TypeVector 10(float) 4 + 12: TypePointer Function 11(fvec4) + 14: 10(float) Constant 0 + 15: 11(fvec4) ConstantComposite 14 14 14 14 + 16: TypeVector 6(int) 4 + 17: TypePointer Function 16(ivec4) + 19: 16(ivec4) ConstantComposite 9 9 9 9 + 20: TypeInt 32 0 + 21: TypeVector 20(int) 4 + 22: TypePointer Function 21(ivec4) + 24: 20(int) Constant 0 + 25: 21(ivec4) ConstantComposite 24 24 24 24 + 26: TypeImage 10(float) 2D sampled format:Unknown + 27: TypeSampledImage 26 + 28: TypePointer UniformConstant 27 + 29(s2D): 28(ptr) Variable UniformConstant + 31: TypeVector 10(float) 2 + 32: TypePointer Input 31(fvec2) + 33(c2): 32(ptr) Variable Input + 35: TypePointer Input 10(float) + 36(lodClamp): 35(ptr) Variable Input + 38(ResType): TypeStruct 6(int) 11(fvec4) + 44: TypeImage 10(float) 3D sampled format:Unknown + 45: TypeSampledImage 44 + 46: TypePointer UniformConstant 45 + 47(s3D): 46(ptr) Variable UniformConstant + 49: TypeVector 10(float) 3 + 50: TypePointer Input 49(fvec3) + 51(c3): 50(ptr) Variable Input + 54: 10(float) Constant 1073741824 + 60: TypeImage 6(int) Cube sampled format:Unknown + 61: TypeSampledImage 60 + 62: TypePointer UniformConstant 61 + 63(isCube): 62(ptr) Variable UniformConstant + 67(ResType): TypeStruct 6(int) 16(ivec4) + 73: TypeImage 10(float) 2D depth sampled format:Unknown + 74: TypeSampledImage 73 + 75: TypePointer UniformConstant 74 + 76(s2DShadow): 75(ptr) Variable UniformConstant + 80: TypePointer Function 10(float) + 83(ResType): TypeStruct 6(int) 10(float) + 89: TypeImage 10(float) Cube depth array sampled format:Unknown + 90: TypeSampledImage 89 + 91: TypePointer UniformConstant 90 +92(sCubeArrayShadow): 91(ptr) Variable UniformConstant + 94: TypePointer Input 11(fvec4) + 95(c4): 94(ptr) Variable Input + 97: 10(float) Constant 1065353216 + 142: TypeVector 6(int) 3 + 143: 6(int) Constant 2 + 144: 142(ivec3) ConstantComposite 143 143 143 + 151: TypeImage 20(int) Rect sampled format:Unknown + 152: TypeSampledImage 151 + 153: TypePointer UniformConstant 152 + 154(us2DRect): 153(ptr) Variable UniformConstant + 157: TypeVector 6(int) 2 + 158: 6(int) Constant 3 + 159: 157(ivec2) ConstantComposite 158 158 + 161(ResType): TypeStruct 6(int) 21(ivec4) + 167: TypeImage 10(float) 2D depth array sampled format:Unknown + 168: TypeSampledImage 167 + 169: TypePointer UniformConstant 168 +170(s2DArrayShadow): 169(ptr) Variable UniformConstant + 173: 6(int) Constant 5 + 174: 157(ivec2) ConstantComposite 173 173 + 176: 20(int) Constant 2 + 215: TypeImage 10(float) Cube depth sampled format:Unknown + 216: TypeSampledImage 215 + 217: TypePointer UniformConstant 216 +218(sCubeShadow): 217(ptr) Variable UniformConstant + 224: 20(int) Constant 1 + 232: TypeImage 20(int) Cube array sampled format:Unknown + 233: TypeSampledImage 232 + 234: TypePointer UniformConstant 233 +235(usCubeArray): 234(ptr) Variable UniformConstant + 283: TypeImage 10(float) Rect depth sampled format:Unknown + 284: TypeSampledImage 283 + 285: TypePointer UniformConstant 284 +286(s2DRectShadow): 285(ptr) Variable UniformConstant + 291: 6(int) Constant 6 + 292: 157(ivec2) ConstantComposite 291 291 + 294: 20(int) Constant 3 + 302: TypeImage 6(int) 2D array sampled format:Unknown + 303: TypeSampledImage 302 + 304: TypePointer UniformConstant 303 + 305(is2DArray): 304(ptr) Variable UniformConstant + 310: 157(ivec2) ConstantComposite 143 143 + 344: TypePointer Output 11(fvec4) + 345(outColor): 344(ptr) Variable Output + 348: TypeBool + 4(main): 2 Function None 3 + 5: Label + 8(resident): 7(ptr) Variable Function + 13(texel): 12(ptr) Variable Function + 18(itexel): 17(ptr) Variable Function + 23(utexel): 22(ptr) Variable Function + 346: 12(ptr) Variable Function + Store 8(resident) 9 + Store 13(texel) 15 + Store 18(itexel) 19 + Store 23(utexel) 25 + 30: 27 Load 29(s2D) + 34: 31(fvec2) Load 33(c2) + 37: 10(float) Load 36(lodClamp) + 39: 38(ResType) ImageSparseSampleImplicitLod 30 34 MinLod 37 + 40: 11(fvec4) CompositeExtract 39 1 + Store 13(texel) 40 + 41: 6(int) CompositeExtract 39 0 + 42: 6(int) Load 8(resident) + 43: 6(int) BitwiseOr 42 41 + Store 8(resident) 43 + 48: 45 Load 47(s3D) + 52: 49(fvec3) Load 51(c3) + 53: 10(float) Load 36(lodClamp) + 55: 38(ResType) ImageSparseSampleImplicitLod 48 52 Bias MinLod 54 53 + 56: 11(fvec4) CompositeExtract 55 1 + Store 13(texel) 56 + 57: 6(int) CompositeExtract 55 0 + 58: 6(int) Load 8(resident) + 59: 6(int) BitwiseOr 58 57 + Store 8(resident) 59 + 64: 61 Load 63(isCube) + 65: 49(fvec3) Load 51(c3) + 66: 10(float) Load 36(lodClamp) + 68: 67(ResType) ImageSparseSampleImplicitLod 64 65 MinLod 66 + 69: 16(ivec4) CompositeExtract 68 1 + Store 18(itexel) 69 + 70: 6(int) CompositeExtract 68 0 + 71: 6(int) Load 8(resident) + 72: 6(int) BitwiseOr 71 70 + Store 8(resident) 72 + 77: 74 Load 76(s2DShadow) + 78: 49(fvec3) Load 51(c3) + 79: 10(float) Load 36(lodClamp) + 81: 80(ptr) AccessChain 13(texel) 24 + 82: 10(float) CompositeExtract 78 2 + 84: 83(ResType) ImageSparseSampleDrefImplicitLod 77 78 82 MinLod 79 + 85: 10(float) CompositeExtract 84 1 + Store 81 85 + 86: 6(int) CompositeExtract 84 0 + 87: 6(int) Load 8(resident) + 88: 6(int) BitwiseOr 87 86 + Store 8(resident) 88 + 93: 90 Load 92(sCubeArrayShadow) + 96: 11(fvec4) Load 95(c4) + 98: 10(float) Load 36(lodClamp) + 99: 80(ptr) AccessChain 13(texel) 24 + 100: 83(ResType) ImageSparseSampleDrefImplicitLod 93 96 97 MinLod 98 + 101: 10(float) CompositeExtract 100 1 + Store 99 101 + 102: 6(int) CompositeExtract 100 0 + 103: 6(int) Load 8(resident) + 104: 6(int) BitwiseOr 103 102 + Store 8(resident) 104 + 105: 27 Load 29(s2D) + 106: 31(fvec2) Load 33(c2) + 107: 10(float) Load 36(lodClamp) + 108: 11(fvec4) ImageSampleImplicitLod 105 106 MinLod 107 + 109: 11(fvec4) Load 13(texel) + 110: 11(fvec4) FAdd 109 108 + Store 13(texel) 110 + 111: 45 Load 47(s3D) + 112: 49(fvec3) Load 51(c3) + 113: 10(float) Load 36(lodClamp) + 114: 11(fvec4) ImageSampleImplicitLod 111 112 Bias MinLod 54 113 + 115: 11(fvec4) Load 13(texel) + 116: 11(fvec4) FAdd 115 114 + Store 13(texel) 116 + 117: 61 Load 63(isCube) + 118: 49(fvec3) Load 51(c3) + 119: 10(float) Load 36(lodClamp) + 120: 16(ivec4) ImageSampleImplicitLod 117 118 MinLod 119 + 121: 16(ivec4) Load 18(itexel) + 122: 16(ivec4) IAdd 121 120 + Store 18(itexel) 122 + 123: 74 Load 76(s2DShadow) + 124: 49(fvec3) Load 51(c3) + 125: 10(float) Load 36(lodClamp) + 126: 10(float) CompositeExtract 124 2 + 127: 10(float) ImageSampleDrefImplicitLod 123 124 126 MinLod 125 + 128: 80(ptr) AccessChain 13(texel) 24 + 129: 10(float) Load 128 + 130: 10(float) FAdd 129 127 + 131: 80(ptr) AccessChain 13(texel) 24 + Store 131 130 + 132: 90 Load 92(sCubeArrayShadow) + 133: 11(fvec4) Load 95(c4) + 134: 10(float) Load 36(lodClamp) + 135: 10(float) ImageSampleDrefImplicitLod 132 133 97 MinLod 134 + 136: 80(ptr) AccessChain 13(texel) 24 + 137: 10(float) Load 136 + 138: 10(float) FAdd 137 135 + 139: 80(ptr) AccessChain 13(texel) 24 + Store 139 138 + 140: 45 Load 47(s3D) + 141: 49(fvec3) Load 51(c3) + 145: 10(float) Load 36(lodClamp) + 146: 38(ResType) ImageSparseSampleImplicitLod 140 141 Bias ConstOffset MinLod 54 144 145 + 147: 11(fvec4) CompositeExtract 146 1 + Store 13(texel) 147 + 148: 6(int) CompositeExtract 146 0 + 149: 6(int) Load 8(resident) + 150: 6(int) BitwiseOr 149 148 + Store 8(resident) 150 + 155: 152 Load 154(us2DRect) + 156: 31(fvec2) Load 33(c2) + 160: 10(float) Load 36(lodClamp) + 162:161(ResType) ImageSparseSampleImplicitLod 155 156 ConstOffset MinLod 159 160 + 163: 21(ivec4) CompositeExtract 162 1 + Store 23(utexel) 163 + 164: 6(int) CompositeExtract 162 0 + 165: 6(int) Load 8(resident) + 166: 6(int) BitwiseOr 165 164 + Store 8(resident) 166 + 171: 168 Load 170(s2DArrayShadow) + 172: 11(fvec4) Load 95(c4) + 175: 10(float) Load 36(lodClamp) + 177: 80(ptr) AccessChain 13(texel) 176 + 178: 10(float) CompositeExtract 172 3 + 179: 83(ResType) ImageSparseSampleDrefImplicitLod 171 172 178 ConstOffset MinLod 174 175 + 180: 10(float) CompositeExtract 179 1 + Store 177 180 + 181: 6(int) CompositeExtract 179 0 + 182: 6(int) Load 8(resident) + 183: 6(int) BitwiseOr 182 181 + Store 8(resident) 183 + 184: 45 Load 47(s3D) + 185: 49(fvec3) Load 51(c3) + 186: 10(float) Load 36(lodClamp) + 187: 11(fvec4) ImageSampleImplicitLod 184 185 Bias ConstOffset MinLod 54 144 186 + 188: 11(fvec4) Load 13(texel) + 189: 11(fvec4) FAdd 188 187 + Store 13(texel) 189 + 190: 152 Load 154(us2DRect) + 191: 31(fvec2) Load 33(c2) + 192: 10(float) Load 36(lodClamp) + 193: 21(ivec4) ImageSampleImplicitLod 190 191 ConstOffset MinLod 159 192 + 194: 21(ivec4) Load 23(utexel) + 195: 21(ivec4) IAdd 194 193 + Store 23(utexel) 195 + 196: 168 Load 170(s2DArrayShadow) + 197: 11(fvec4) Load 95(c4) + 198: 10(float) Load 36(lodClamp) + 199: 10(float) CompositeExtract 197 3 + 200: 10(float) ImageSampleDrefImplicitLod 196 197 199 ConstOffset MinLod 174 198 + 201: 80(ptr) AccessChain 13(texel) 176 + 202: 10(float) Load 201 + 203: 10(float) FAdd 202 200 + 204: 80(ptr) AccessChain 13(texel) 176 + Store 204 203 + 205: 45 Load 47(s3D) + 206: 49(fvec3) Load 51(c3) + 207: 49(fvec3) Load 51(c3) + 208: 49(fvec3) Load 51(c3) + 209: 10(float) Load 36(lodClamp) + 210: 38(ResType) ImageSparseSampleExplicitLod 205 206 Grad MinLod 207 208 209 + 211: 11(fvec4) CompositeExtract 210 1 + Store 13(texel) 211 + 212: 6(int) CompositeExtract 210 0 + 213: 6(int) Load 8(resident) + 214: 6(int) BitwiseOr 213 212 + Store 8(resident) 214 + 219: 216 Load 218(sCubeShadow) + 220: 11(fvec4) Load 95(c4) + 221: 49(fvec3) Load 51(c3) + 222: 49(fvec3) Load 51(c3) + 223: 10(float) Load 36(lodClamp) + 225: 80(ptr) AccessChain 13(texel) 224 + 226: 10(float) CompositeExtract 220 3 + 227: 83(ResType) ImageSparseSampleDrefExplicitLod 219 220 226 Grad MinLod 221 222 223 + 228: 10(float) CompositeExtract 227 1 + Store 225 228 + 229: 6(int) CompositeExtract 227 0 + 230: 6(int) Load 8(resident) + 231: 6(int) BitwiseOr 230 229 + Store 8(resident) 231 + 236: 233 Load 235(usCubeArray) + 237: 11(fvec4) Load 95(c4) + 238: 49(fvec3) Load 51(c3) + 239: 49(fvec3) Load 51(c3) + 240: 10(float) Load 36(lodClamp) + 241:161(ResType) ImageSparseSampleExplicitLod 236 237 Grad MinLod 238 239 240 + 242: 21(ivec4) CompositeExtract 241 1 + Store 23(utexel) 242 + 243: 6(int) CompositeExtract 241 0 + 244: 6(int) Load 8(resident) + 245: 6(int) BitwiseOr 244 243 + Store 8(resident) 245 + 246: 45 Load 47(s3D) + 247: 49(fvec3) Load 51(c3) + 248: 49(fvec3) Load 51(c3) + 249: 49(fvec3) Load 51(c3) + 250: 10(float) Load 36(lodClamp) + 251: 11(fvec4) ImageSampleExplicitLod 246 247 Grad MinLod 248 249 250 + 252: 11(fvec4) Load 13(texel) + 253: 11(fvec4) FAdd 252 251 + Store 13(texel) 253 + 254: 216 Load 218(sCubeShadow) + 255: 11(fvec4) Load 95(c4) + 256: 49(fvec3) Load 51(c3) + 257: 49(fvec3) Load 51(c3) + 258: 10(float) Load 36(lodClamp) + 259: 10(float) CompositeExtract 255 3 + 260: 10(float) ImageSampleDrefExplicitLod 254 255 259 Grad MinLod 256 257 258 + 261: 80(ptr) AccessChain 13(texel) 224 + 262: 10(float) Load 261 + 263: 10(float) FAdd 262 260 + 264: 80(ptr) AccessChain 13(texel) 224 + Store 264 263 + 265: 233 Load 235(usCubeArray) + 266: 11(fvec4) Load 95(c4) + 267: 49(fvec3) Load 51(c3) + 268: 49(fvec3) Load 51(c3) + 269: 10(float) Load 36(lodClamp) + 270: 21(ivec4) ImageSampleExplicitLod 265 266 Grad MinLod 267 268 269 + 271: 21(ivec4) Load 23(utexel) + 272: 21(ivec4) IAdd 271 270 + Store 23(utexel) 272 + 273: 27 Load 29(s2D) + 274: 31(fvec2) Load 33(c2) + 275: 31(fvec2) Load 33(c2) + 276: 31(fvec2) Load 33(c2) + 277: 10(float) Load 36(lodClamp) + 278: 38(ResType) ImageSparseSampleExplicitLod 273 274 Grad ConstOffset MinLod 275 276 174 277 + 279: 11(fvec4) CompositeExtract 278 1 + Store 13(texel) 279 + 280: 6(int) CompositeExtract 278 0 + 281: 6(int) Load 8(resident) + 282: 6(int) BitwiseOr 281 280 + Store 8(resident) 282 + 287: 284 Load 286(s2DRectShadow) + 288: 49(fvec3) Load 51(c3) + 289: 31(fvec2) Load 33(c2) + 290: 31(fvec2) Load 33(c2) + 293: 10(float) Load 36(lodClamp) + 295: 80(ptr) AccessChain 13(texel) 294 + 296: 10(float) CompositeExtract 288 2 + 297: 83(ResType) ImageSparseSampleDrefExplicitLod 287 288 296 Grad ConstOffset MinLod 289 290 292 293 + 298: 10(float) CompositeExtract 297 1 + Store 295 298 + 299: 6(int) CompositeExtract 297 0 + 300: 6(int) Load 8(resident) + 301: 6(int) BitwiseOr 300 299 + Store 8(resident) 301 + 306: 303 Load 305(is2DArray) + 307: 49(fvec3) Load 51(c3) + 308: 31(fvec2) Load 33(c2) + 309: 31(fvec2) Load 33(c2) + 311: 10(float) Load 36(lodClamp) + 312: 67(ResType) ImageSparseSampleExplicitLod 306 307 Grad ConstOffset MinLod 308 309 310 311 + 313: 16(ivec4) CompositeExtract 312 1 + Store 18(itexel) 313 + 314: 6(int) CompositeExtract 312 0 + 315: 6(int) Load 8(resident) + 316: 6(int) BitwiseOr 315 314 + Store 8(resident) 316 + 317: 27 Load 29(s2D) + 318: 31(fvec2) Load 33(c2) + 319: 31(fvec2) Load 33(c2) + 320: 31(fvec2) Load 33(c2) + 321: 10(float) Load 36(lodClamp) + 322: 11(fvec4) ImageSampleExplicitLod 317 318 Grad ConstOffset MinLod 319 320 174 321 + 323: 11(fvec4) Load 13(texel) + 324: 11(fvec4) FAdd 323 322 + Store 13(texel) 324 + 325: 284 Load 286(s2DRectShadow) + 326: 49(fvec3) Load 51(c3) + 327: 31(fvec2) Load 33(c2) + 328: 31(fvec2) Load 33(c2) + 329: 10(float) Load 36(lodClamp) + 330: 10(float) CompositeExtract 326 2 + 331: 10(float) ImageSampleDrefExplicitLod 325 326 330 Grad ConstOffset MinLod 327 328 292 329 + 332: 80(ptr) AccessChain 13(texel) 294 + 333: 10(float) Load 332 + 334: 10(float) FAdd 333 331 + 335: 80(ptr) AccessChain 13(texel) 294 + Store 335 334 + 336: 303 Load 305(is2DArray) + 337: 49(fvec3) Load 51(c3) + 338: 31(fvec2) Load 33(c2) + 339: 31(fvec2) Load 33(c2) + 340: 10(float) Load 36(lodClamp) + 341: 16(ivec4) ImageSampleExplicitLod 336 337 Grad ConstOffset MinLod 338 339 310 340 + 342: 16(ivec4) Load 18(itexel) + 343: 16(ivec4) IAdd 342 341 + Store 18(itexel) 343 + 347: 6(int) Load 8(resident) + 349: 348(bool) ImageSparseTexelsResident 347 + SelectionMerge 351 None + BranchConditional 349 350 353 + 350: Label + 352: 11(fvec4) Load 13(texel) + Store 346 352 + Branch 351 + 353: Label + 354: 16(ivec4) Load 18(itexel) + 355: 11(fvec4) ConvertSToF 354 + 356: 21(ivec4) Load 23(utexel) + 357: 11(fvec4) ConvertUToF 356 + 358: 11(fvec4) FAdd 355 357 + Store 346 358 + Branch 351 + 351: Label + 359: 11(fvec4) Load 346 + Store 345(outColor) 359 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConst.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConst.vert.out new file mode 100755 index 0000000..5e2020f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConst.vert.out @@ -0,0 +1,58 @@ +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 +// Id's are bound by 27 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 13 25 26 + 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 18 "a" + 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 + MemberDecorate 11(gl_PerVertex) 3 BuiltIn CullDistance + Decorate 11(gl_PerVertex) Block + Decorate 18(a) SpecId 11 + 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 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(a): 14(int) SpecConstant 8 + 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 + 19: 6(float) ConvertSToF 18(a) + 20: 7(fvec4) CompositeConstruct 19 19 19 19 + 21: 7(fvec4) FDiv 17 20 + 23: 22(ptr) AccessChain 13 15 + Store 23 21 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConstant.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConstant.comp.out new file mode 100644 index 0000000..481ed68 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConstant.comp.out @@ -0,0 +1,51 @@ +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 +// Id's are bound by 27 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "main" + ExecutionMode 4 LocalSize 32 32 1 + Source GLSL 450 + Name 4 "main" + Name 7 "bn" + MemberName 7(bn) 0 "a" + Name 9 "bi" + MemberDecorate 7(bn) 0 Offset 0 + Decorate 7(bn) BufferBlock + Decorate 9(bi) DescriptorSet 0 + Decorate 12 SpecId 18 + Decorate 14 SpecId 19 + Decorate 16 BuiltIn WorkgroupSize + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7(bn): TypeStruct 6(int) + 8: TypePointer Uniform 7(bn) + 9(bi): 8(ptr) Variable Uniform + 10: TypeInt 32 1 + 11: 10(int) Constant 0 + 12: 6(int) SpecConstant 32 + 13: 6(int) Constant 32 + 14: 6(int) SpecConstant 1 + 15: TypeVector 6(int) 3 + 16: 15(ivec3) SpecConstantComposite 12 13 14 + 17: 6(int) Constant 0 + 18: 6(int) SpecConstantOp 81 16 0 + 19: 6(int) Constant 1 + 20: 6(int) SpecConstantOp 81 16 1(GLSL.std.450) + 21: 6(int) SpecConstantOp 132 18 20 + 22: 6(int) Constant 2 + 23: 6(int) SpecConstantOp 81 16 2 + 24: 6(int) SpecConstantOp 132 21 23 + 25: TypePointer Uniform 6(int) + 4(main): 2 Function None 3 + 5: Label + 26: 25(ptr) AccessChain 9(bi) 11 + Store 26 24 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConstant.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConstant.vert.out new file mode 100644 index 0000000..ea4e542 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConstant.vert.out @@ -0,0 +1,144 @@ +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 +// Id's are bound by 81 + + Capability Shader + Capability Float64 + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 20 22 28 53 + Source GLSL 400 + Name 4 "main" + Name 9 "arraySize" + Name 14 "foo(vf4[s1518];" + Name 13 "p" + Name 17 "builtin_spec_constant(" + Name 20 "color" + Name 22 "ucol" + Name 28 "size" + Name 30 "spBool" + Name 34 "scale" + Name 39 "spDouble" + Name 40 "spFloat" + Name 47 "param" + Name 50 "dupArraySize" + Name 53 "dupUcol" + Name 60 "spDupBool" + Name 63 "dupScale" + Name 67 "spDupDouble" + Name 68 "spDupFloat" + Name 76 "result" + Name 77 "gl_MaxImageUnits" + Decorate 9(arraySize) SpecId 16 + Decorate 30(spBool) SpecId 17 + Decorate 34(scale) SpecId 22 + Decorate 39(spDouble) SpecId 19 + Decorate 40(spFloat) SpecId 18 + Decorate 50(dupArraySize) SpecId 116 + Decorate 60(spDupBool) SpecId 117 + Decorate 63(dupScale) SpecId 122 + Decorate 67(spDupDouble) SpecId 119 + Decorate 68(spDupFloat) SpecId 118 + Decorate 77(gl_MaxImageUnits) SpecId 24 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypeInt 32 1 + 9(arraySize): 8(int) SpecConstant 5 + 10: TypeArray 7(fvec4) 9(arraySize) + 11: TypePointer Function 10 + 12: TypeFunction 2 11(ptr) + 16: TypeFunction 8(int) + 19: TypePointer Output 7(fvec4) + 20(color): 19(ptr) Variable Output + 21: TypePointer Input 10 + 22(ucol): 21(ptr) Variable Input + 23: 8(int) Constant 2 + 24: TypePointer Input 7(fvec4) + 27: TypePointer Output 8(int) + 28(size): 27(ptr) Variable Output + 29: TypeBool + 30(spBool): 29(bool) SpecConstantTrue + 33: TypeInt 32 0 + 34(scale): 33(int) SpecConstant 2 + 38: TypeFloat 64 + 39(spDouble): 38(float) SpecConstant 1413754136 1074340347 + 40(spFloat): 6(float) SpecConstant 1078523331 + 41: 38(float) SpecConstantOp 115 40(spFloat) +50(dupArraySize): 8(int) SpecConstant 12 + 51: TypeArray 7(fvec4) 50(dupArraySize) + 52: TypePointer Input 51 + 53(dupUcol): 52(ptr) Variable Input + 60(spDupBool): 29(bool) SpecConstantTrue + 63(dupScale): 33(int) SpecConstant 2 + 67(spDupDouble): 38(float) SpecConstant 1413754136 1074340347 + 68(spDupFloat): 6(float) SpecConstant 1078523331 + 69: 38(float) SpecConstantOp 115 68(spDupFloat) + 75: TypePointer Function 8(int) +77(gl_MaxImageUnits): 8(int) SpecConstant 8 + 4(main): 2 Function None 3 + 5: Label + 47(param): 11(ptr) Variable Function + 25: 24(ptr) AccessChain 22(ucol) 23 + 26: 7(fvec4) Load 25 + Store 20(color) 26 + Store 28(size) 9(arraySize) + SelectionMerge 32 None + BranchConditional 30(spBool) 31 32 + 31: Label + 35: 6(float) ConvertUToF 34(scale) + 36: 7(fvec4) Load 20(color) + 37: 7(fvec4) VectorTimesScalar 36 35 + Store 20(color) 37 + Branch 32 + 32: Label + 42: 38(float) FDiv 39(spDouble) 41 + 43: 6(float) FConvert 42 + 44: 7(fvec4) Load 20(color) + 45: 7(fvec4) CompositeConstruct 43 43 43 43 + 46: 7(fvec4) FAdd 44 45 + Store 20(color) 46 + 48: 10 Load 22(ucol) + Store 47(param) 48 + 49: 2 FunctionCall 14(foo(vf4[s1518];) 47(param) + Return + FunctionEnd +14(foo(vf4[s1518];): 2 Function None 12 + 13(p): 11(ptr) FunctionParameter + 15: Label + 54: 24(ptr) AccessChain 53(dupUcol) 23 + 55: 7(fvec4) Load 54 + 56: 7(fvec4) Load 20(color) + 57: 7(fvec4) FAdd 56 55 + Store 20(color) 57 + 58: 8(int) Load 28(size) + 59: 8(int) IAdd 58 50(dupArraySize) + Store 28(size) 59 + SelectionMerge 62 None + BranchConditional 60(spDupBool) 61 62 + 61: Label + 64: 6(float) ConvertUToF 63(dupScale) + 65: 7(fvec4) Load 20(color) + 66: 7(fvec4) VectorTimesScalar 65 64 + Store 20(color) 66 + Branch 62 + 62: Label + 70: 38(float) FDiv 67(spDupDouble) 69 + 71: 6(float) FConvert 70 + 72: 7(fvec4) Load 20(color) + 73: 7(fvec4) CompositeConstruct 71 71 71 71 + 74: 7(fvec4) FAdd 72 73 + Store 20(color) 74 + Return + FunctionEnd +17(builtin_spec_constant(): 8(int) Function None 16 + 18: Label + 76(result): 75(ptr) Variable Function + Store 76(result) 77(gl_MaxImageUnits) + 78: 8(int) Load 76(result) + ReturnValue 78 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConstantComposite.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConstantComposite.vert.out new file mode 100644 index 0000000..9079554 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConstantComposite.vert.out @@ -0,0 +1,89 @@ +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 +// Id's are bound by 43 + + Capability Shader + Capability Float64 + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 27 42 + Source GLSL 450 + Name 4 "main" + Name 6 "refer_primary_spec_const(" + Name 8 "refer_composite_spec_const(" + Name 10 "refer_copmosite_dot_dereference(" + Name 12 "refer_composite_bracket_dereference(" + Name 16 "refer_spec_const_array_length(" + Name 18 "declare_spec_const_in_func(" + Name 21 "spec_bool" + Name 27 "color" + Name 28 "spec_int" + Name 33 "len" + Name 37 "spec_float" + Name 39 "spec_double" + Name 42 "global_vec4_array_with_spec_length" + Decorate 21(spec_bool) SpecId 203 + Decorate 28(spec_int) SpecId 200 + Decorate 37(spec_float) SpecId 201 + Decorate 39(spec_double) SpecId 202 + 2: TypeVoid + 3: TypeFunction 2 + 14: TypeInt 32 1 + 15: TypeFunction 14(int) + 20: TypeBool + 21(spec_bool): 20(bool) SpecConstantTrue + 24: TypeFloat 32 + 25: TypeVector 24(float) 4 + 26: TypePointer Output 25(fvec4) + 27(color): 26(ptr) Variable Output + 28(spec_int): 14(int) SpecConstant 3 + 32: TypePointer Function 14(int) + 37(spec_float): 24(float) SpecConstant 1078523331 + 38: TypeFloat 64 + 39(spec_double): 38(float) SpecConstant 1413754136 1074340347 + 40: TypeArray 25(fvec4) 28(spec_int) + 41: TypePointer Input 40 +42(global_vec4_array_with_spec_length): 41(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + Return + FunctionEnd +6(refer_primary_spec_const(): 2 Function None 3 + 7: Label + SelectionMerge 23 None + BranchConditional 21(spec_bool) 22 23 + 22: Label + 29: 24(float) ConvertSToF 28(spec_int) + 30: 25(fvec4) Load 27(color) + 31: 25(fvec4) VectorTimesScalar 30 29 + Store 27(color) 31 + Branch 23 + 23: Label + Return + FunctionEnd +8(refer_composite_spec_const(): 2 Function None 3 + 9: Label + Return + FunctionEnd +10(refer_copmosite_dot_dereference(): 2 Function None 3 + 11: Label + Return + FunctionEnd +12(refer_composite_bracket_dereference(): 2 Function None 3 + 13: Label + Return + FunctionEnd +16(refer_spec_const_array_length(): 14(int) Function None 15 + 17: Label + 33(len): 32(ptr) Variable Function + Store 33(len) 28(spec_int) + 34: 14(int) Load 33(len) + ReturnValue 34 + FunctionEnd +18(declare_spec_const_in_func(): 2 Function None 3 + 19: Label + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConstantOperations.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConstantOperations.vert.out new file mode 100644 index 0000000..597820b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConstantOperations.vert.out @@ -0,0 +1,203 @@ +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 + + Capability Shader + Capability Float64 + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" + Source GLSL 450 + Name 4 "main" + Name 8 "non_const_array_size_from_spec_const(" + Name 11 "i" + Name 19 "sp_int" + Name 27 "array" + Name 40 "sp_float" + Name 42 "sp_uint" + Name 43 "sp_sint" + Name 45 "sp_double" + Name 135 "a" + Name 136 "b" + Name 137 "c" + Name 142 "ternayArray1" + Decorate 19(sp_int) SpecId 201 + Decorate 40(sp_float) SpecId 200 + Decorate 42(sp_uint) SpecId 202 + Decorate 43(sp_sint) SpecId 203 + Decorate 45(sp_double) SpecId 204 + Decorate 135(a) SpecId 210 + Decorate 136(b) SpecId 211 + Decorate 137(c) SpecId 212 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypeFunction 6(int) + 10: TypePointer Function 6(int) + 12: 6(int) Constant 0 + 19(sp_int): 6(int) SpecConstant 10 + 20: 6(int) Constant 2 + 21: 6(int) SpecConstantOp 128 19(sp_int) 20 + 22: TypeBool + 24: 6(int) SpecConstantOp 128 19(sp_int) 20 + 25: TypeArray 6(int) 24 + 26: TypePointer Function 25 + 29: 6(int) Constant 1023 + 32: 6(int) Constant 1 + 34: 6(int) SpecConstantOp 128 19(sp_int) 32 + 39: TypeFloat 32 + 40(sp_float): 39(float) SpecConstant 1078530010 + 41: TypeInt 32 0 + 42(sp_uint): 41(int) SpecConstant 100 + 43(sp_sint): 6(int) SpecConstant 4294967286 + 44: TypeFloat 64 + 45(sp_double): 44(float) SpecConstant 2333366019 1074118410 + 46: 39(float) SpecConstantOp 115 45(sp_double) + 47: 44(float) SpecConstantOp 115 40(sp_float) + 48: 41(int) Constant 0 + 49: 22(bool) SpecConstantOp 171 19(sp_int) 48 + 50: 22(bool) SpecConstantOp 171 42(sp_uint) 48 + 51: 6(int) SpecConstantOp 169 49 32 12 + 52: 41(int) Constant 1 + 53: 41(int) SpecConstantOp 169 49 52 48 + 54: 41(int) SpecConstantOp 128 43(sp_sint) 48 + 55: 6(int) SpecConstantOp 128 42(sp_uint) 48 + 56: 6(int) SpecConstantOp 126 19(sp_int) + 57: 6(int) SpecConstantOp 200 19(sp_int) + 58: 6(int) SpecConstantOp 128 19(sp_int) 20 + 59: 6(int) SpecConstantOp 128 19(sp_int) 20 + 60: 6(int) Constant 3 + 61: 6(int) SpecConstantOp 130 59 60 + 62: 6(int) Constant 4 + 63: 6(int) SpecConstantOp 130 58 62 + 64: 6(int) SpecConstantOp 132 43(sp_sint) 20 + 65: 41(int) Constant 2 + 66: 41(int) SpecConstantOp 132 42(sp_uint) 65 + 67: 6(int) Constant 5 + 68: 6(int) SpecConstantOp 135 64 67 + 69: 41(int) Constant 5 + 70: 41(int) SpecConstantOp 134 66 69 + 71: 6(int) SpecConstantOp 139 43(sp_sint) 62 + 72: 41(int) Constant 4 + 73: 41(int) SpecConstantOp 137 42(sp_uint) 72 + 74: 6(int) SpecConstantOp 132 43(sp_sint) 60 + 75: 6(int) SpecConstantOp 135 74 67 + 76: 6(int) Constant 10 + 77: 6(int) SpecConstantOp 195 43(sp_sint) 76 + 78: 6(int) Constant 20 + 79: 41(int) SpecConstantOp 194 42(sp_uint) 78 + 80: 6(int) SpecConstantOp 196 43(sp_sint) 32 + 81: 41(int) SpecConstantOp 196 42(sp_uint) 20 + 82: 6(int) Constant 256 + 83: 6(int) SpecConstantOp 197 43(sp_sint) 82 + 84: 41(int) Constant 512 + 85: 41(int) SpecConstantOp 198 42(sp_uint) 84 + 86: 22(bool) SpecConstantOp 177 19(sp_int) 43(sp_sint) + 87: 22(bool) SpecConstantOp 170 42(sp_uint) 42(sp_uint) + 88: 22(bool) SpecConstantOp 173 19(sp_int) 43(sp_sint) + 89: 6(int) Constant 30 + 90: TypeVector 6(int) 4 + 91: 90(ivec4) SpecConstantComposite 78 89 19(sp_int) 19(sp_int) + 92: 41(int) Constant 4294967295 + 93: 41(int) Constant 4294967294 + 94: TypeVector 41(int) 4 + 95: 94(ivec4) SpecConstantComposite 42(sp_uint) 42(sp_uint) 92 93 + 96: TypeVector 22(bool) 4 + 97: 94(ivec4) ConstantComposite 48 48 48 48 + 98: 96(bvec4) SpecConstantOp 171 91 97 + 99: 96(bvec4) SpecConstantOp 171 95 97 + 100: 90(ivec4) ConstantComposite 12 12 12 12 + 101: 90(ivec4) ConstantComposite 32 32 32 32 + 102: 90(ivec4) SpecConstantOp 169 98 101 100 + 103: 94(ivec4) ConstantComposite 52 52 52 52 + 104: 94(ivec4) SpecConstantOp 169 98 103 97 + 105: 94(ivec4) SpecConstantOp 128 91 97 + 106: 90(ivec4) SpecConstantOp 128 95 97 + 107: 90(ivec4) SpecConstantOp 200 91 + 108: 90(ivec4) SpecConstantOp 126 91 + 109: 90(ivec4) ConstantComposite 20 20 20 20 + 110: 90(ivec4) SpecConstantOp 128 91 109 + 111: 90(ivec4) SpecConstantOp 128 91 109 + 112: 90(ivec4) ConstantComposite 60 60 60 60 + 113: 90(ivec4) SpecConstantOp 130 111 112 + 114: 90(ivec4) ConstantComposite 62 62 62 62 + 115: 90(ivec4) SpecConstantOp 130 113 114 + 116: 90(ivec4) SpecConstantOp 132 91 109 + 117: 90(ivec4) ConstantComposite 67 67 67 67 + 118: 90(ivec4) SpecConstantOp 135 116 117 + 119: 90(ivec4) SpecConstantOp 139 91 114 + 120: 90(ivec4) ConstantComposite 76 76 76 76 + 121: 90(ivec4) SpecConstantOp 195 91 120 + 122: 90(ivec4) SpecConstantOp 196 91 109 + 123: 6(int) Constant 1024 + 124: 90(ivec4) ConstantComposite 123 123 123 123 + 125: 90(ivec4) SpecConstantOp 197 91 124 + 126: 41(int) Constant 2048 + 127: 94(ivec4) ConstantComposite 126 126 126 126 + 128: 94(ivec4) SpecConstantOp 198 95 127 + 129: 6(int) SpecConstantOp 81 91 0 + 130: TypeVector 6(int) 2 + 131: 130(ivec2) SpecConstantOp 79 91 91 1(GLSL.std.450) 0 + 132: TypeVector 6(int) 3 + 133: 132(ivec3) SpecConstantOp 79 91 91 2 1(GLSL.std.450) 0 + 134: 90(ivec4) SpecConstantOp 79 91 91 1(GLSL.std.450) 2 0 3 + 135(a): 6(int) SpecConstant 4 + 136(b): 6(int) SpecConstant 6 + 137(c): 22(bool) SpecConstantTrue + 138: 22(bool) SpecConstantOp 173 135(a) 136(b) + 139: 6(int) SpecConstantOp 169 138 135(a) 136(b) + 140: TypeArray 6(int) 139 + 141: TypePointer Private 140 +142(ternayArray1): 141(ptr) Variable Private + 143: 6(int) Constant 13 + 144: 6(int) Constant 17 + 145: 6(int) SpecConstantOp 169 137(c) 143 144 + 146: 6(int) SpecConstantOp 169 137(c) 135(a) 144 + 147: 22(bool) ConstantTrue + 148: 6(int) SpecConstantOp 169 147 135(a) 144 + 149: 22(bool) SpecConstantOp 173 135(a) 136(b) + 150: 6(int) SpecConstantOp 128 143 135(a) + 151: 6(int) SpecConstantOp 132 144 136(b) + 152: 6(int) SpecConstantOp 169 149 150 151 + 153: 22(bool) SpecConstantOp 168 137(c) + 154: TypeVector 39(float) 2 + 155: 39(float) Constant 1065353216 + 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 + 4(main): 2 Function None 3 + 5: Label + Return + FunctionEnd +8(non_const_array_size_from_spec_const(): 6(int) Function None 7 + 9: Label + 11(i): 10(ptr) Variable Function + 27(array): 26(ptr) Variable Function + Store 11(i) 12 + Branch 13 + 13: Label + LoopMerge 15 16 None + Branch 17 + 17: Label + 18: 6(int) Load 11(i) + 23: 22(bool) SLessThan 18 21 + BranchConditional 23 14 15 + 14: Label + 28: 6(int) Load 11(i) + 30: 10(ptr) AccessChain 27(array) 28 + Store 30 29 + Branch 16 + 16: Label + 31: 6(int) Load 11(i) + 33: 6(int) IAdd 31 32 + Store 11(i) 33 + Branch 13 + 15: Label + 35: 10(ptr) AccessChain 27(array) 34 + 36: 6(int) Load 35 + ReturnValue 36 + FunctionEnd 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 new file mode 100644 index 0000000..8d10b6b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.ssbo.autoassign.frag.out @@ -0,0 +1,153 @@ +spv.ssbo.autoassign.frag +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 95 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 88 91 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 11 "@main(vf4;" + Name 10 "pos" + Name 13 "vTmp" + Name 14 "BufType" + MemberName 14(BufType) 0 "va" + MemberName 14(BufType) 1 "vb" + Name 16 "SB0" + MemberName 16(SB0) 0 "@data" + Name 18 "SB0" + Name 26 "TestCB" + 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 + 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 + MemberDecorate 16(SB0) 0 Offset 0 + Decorate 16(SB0) BufferBlock + Decorate 18(SB0) DescriptorSet 0 + Decorate 18(SB0) Binding 30 + MemberDecorate 26(TestCB) 0 Offset 0 + MemberDecorate 26(TestCB) 1 Offset 4 + 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 + 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(BufType): TypeStruct 7(fvec4) 7(fvec4) + 15: TypeRuntimeArray 14(BufType) + 16(SB0): TypeStruct 15 + 17: TypePointer Uniform 16(SB0) + 18(SB0): 17(ptr) Variable Uniform + 19: TypeInt 32 1 + 20: 19(int) Constant 0 + 21: TypeInt 32 0 + 22: 21(int) Constant 1 + 23: TypePointer Function 6(float) + 26(TestCB): TypeStruct 21(int) 21(int) + 27: TypePointer Uniform 26(TestCB) + 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 + 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 + Return + FunctionEnd + 11(@main(vf4;): 7(fvec4) Function None 9 + 10(pos): 8(ptr) FunctionParameter + 12: Label + 13(vTmp): 8(ptr) Variable Function + 24: 23(ptr) AccessChain 10(pos) 22 + 25: 6(float) Load 24 + 30: 29(ptr) AccessChain 28 20 + 31: 21(int) Load 30 + 32: 6(float) ConvertUToF 31 + 33: 6(float) FMul 25 32 + 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 + 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 new file mode 100644 index 0000000..8fd6dd5 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.stereoViewRendering.tesc.out @@ -0,0 +1,85 @@ +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 +// Id's are bound by 38 + + Capability Tessellation + Capability ShaderViewportMaskNV + Capability ShaderStereoViewNV + 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 + 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" + 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 + 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 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypeFloat 32 + 8: TypeVector 7(float) 4 + 9: TypeInt 32 0 + 10: 9(int) Constant 2 + 11: TypeArray 6(int) 10 +12(gl_PerVertex): TypeStruct 6(int) 8(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) +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) + 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 + 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 new file mode 100644 index 0000000..d6c6956 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.stereoViewRendering.vert.out @@ -0,0 +1,69 @@ +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 +// Id's are bound by 27 + + Capability Shader + Capability Geometry + Capability ShaderViewportIndexLayerNV + Capability ShaderViewportMaskNV + Capability ShaderStereoViewNV + Extension "SPV_NV_stereo_view_rendering" + Extension "SPV_NV_viewport_array2" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 11 19 23 26 + Source GLSL 450 + SourceExtension "GL_NV_stereo_view_rendering" + SourceExtension "GL_NV_viewport_array2" + Name 4 "main" + Name 11 "gl_SecondaryViewportMaskNV" + Name 19 "gl_SecondaryPositionNV" + 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 23 "" + Name 26 "gl_Layer" + Decorate 11(gl_SecondaryViewportMaskNV) BuiltIn SecondaryViewportMaskNV + Decorate 19(gl_SecondaryPositionNV) BuiltIn SecondaryPositionNV + 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 26(gl_Layer) BuiltIn Layer + Decorate 26(gl_Layer) ViewportRelativeNV + Decorate 26(gl_Layer) SecondaryViewportRelativeNV 2 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypeInt 32 0 + 8: 7(int) Constant 1 + 9: TypeArray 6(int) 8 + 10: TypePointer Output 9 +11(gl_SecondaryViewportMaskNV): 10(ptr) Variable Output + 12: 6(int) Constant 0 + 13: 6(int) Constant 1 + 14: TypePointer Output 6(int) + 16: TypeFloat 32 + 17: TypeVector 16(float) 4 + 18: TypePointer Output 17(fvec4) +19(gl_SecondaryPositionNV): 18(ptr) Variable Output + 20: TypeArray 16(float) 8 +21(gl_PerVertex): TypeStruct 17(fvec4) 16(float) 20 20 + 22: TypePointer Output 21(gl_PerVertex) + 23: 22(ptr) Variable Output + 26(gl_Layer): 14(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 15: 14(ptr) AccessChain 11(gl_SecondaryViewportMaskNV) 12 + Store 15 13 + 24: 18(ptr) AccessChain 23 12 + 25: 17(fvec4) Load 24 + Store 19(gl_SecondaryPositionNV) 25 + 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 new file mode 100755 index 0000000..eb796f7 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.structAssignment.frag.out @@ -0,0 +1,98 @@ +spv.structAssignment.frag +WARNING: 0:6: '' : 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 +// Id's are bound by 50 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 31 44 + ExecutionMode 4 OriginUpperLeft + Source GLSL 140 + Name 4 "main" + Name 8 "lunarStruct1" + MemberName 8(lunarStruct1) 0 "i" + MemberName 8(lunarStruct1) 1 "f" + Name 9 "lunarStruct2" + MemberName 9(lunarStruct2) 0 "i" + MemberName 9(lunarStruct2) 1 "f" + MemberName 9(lunarStruct2) 2 "s1_1" + Name 10 "lunarStruct3" + MemberName 10(lunarStruct3) 0 "s2_1" + MemberName 10(lunarStruct3) 1 "i" + MemberName 10(lunarStruct3) 2 "f" + MemberName 10(lunarStruct3) 3 "s1_1" + Name 12 "foo3" + Name 22 "locals2" + Name 27 "foo2" + Name 31 "gl_FragColor" + Name 40 "samp2D" + Name 44 "coord" + Name 49 "foo" + MemberDecorate 8(lunarStruct1) 0 RelaxedPrecision + MemberDecorate 9(lunarStruct2) 0 RelaxedPrecision + MemberDecorate 10(lunarStruct3) 1 RelaxedPrecision + Decorate 16 RelaxedPrecision + Decorate 40(samp2D) DescriptorSet 0 + Decorate 44(coord) RelaxedPrecision + Decorate 45 RelaxedPrecision + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypeFloat 32 + 8(lunarStruct1): TypeStruct 6(int) 7(float) + 9(lunarStruct2): TypeStruct 6(int) 7(float) 8(lunarStruct1) +10(lunarStruct3): TypeStruct 9(lunarStruct2) 6(int) 7(float) 8(lunarStruct1) + 11: TypePointer Private 10(lunarStruct3) + 12(foo3): 11(ptr) Variable Private + 13: 6(int) Constant 0 + 14: TypePointer Private 6(int) + 17: TypeBool + 21: TypePointer Function 9(lunarStruct2) + 23: TypePointer Private 9(lunarStruct2) + 27(foo2): 23(ptr) Variable Private + 29: TypeVector 7(float) 4 + 30: TypePointer Output 29(fvec4) +31(gl_FragColor): 30(ptr) Variable Output + 32: 6(int) Constant 2 + 33: 6(int) Constant 1 + 34: TypePointer Function 7(float) + 37: TypeImage 7(float) 2D sampled format:Unknown + 38: TypeSampledImage 37 + 39: TypePointer UniformConstant 38 + 40(samp2D): 39(ptr) Variable UniformConstant + 42: TypeVector 7(float) 2 + 43: TypePointer Input 42(fvec2) + 44(coord): 43(ptr) Variable Input + 48: TypePointer Private 8(lunarStruct1) + 49(foo): 48(ptr) Variable Private + 4(main): 2 Function None 3 + 5: Label + 22(locals2): 21(ptr) Variable Function + 15: 14(ptr) AccessChain 12(foo3) 13 13 + 16: 6(int) Load 15 + 18: 17(bool) SGreaterThan 16 13 + SelectionMerge 20 None + BranchConditional 18 19 26 + 19: Label + 24: 23(ptr) AccessChain 12(foo3) 13 + 25:9(lunarStruct2) Load 24 + Store 22(locals2) 25 + Branch 20 + 26: Label + 28:9(lunarStruct2) Load 27(foo2) + Store 22(locals2) 28 + Branch 20 + 20: Label + 35: 34(ptr) AccessChain 22(locals2) 32 33 + 36: 7(float) Load 35 + 41: 38 Load 40(samp2D) + 45: 42(fvec2) Load 44(coord) + 46: 29(fvec4) ImageSampleImplicitLod 41 45 + 47: 29(fvec4) VectorTimesScalar 46 36 + Store 31(gl_FragColor) 47 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.structDeref.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.structDeref.frag.out new file mode 100755 index 0000000..e60159f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.structDeref.frag.out @@ -0,0 +1,187 @@ +spv.structDeref.frag +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 123 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 61 99 + ExecutionMode 4 OriginUpperLeft + Source GLSL 140 + Name 4 "main" + Name 8 "s0" + MemberName 8(s0) 0 "i" + Name 9 "s1" + MemberName 9(s1) 0 "i" + MemberName 9(s1) 1 "f" + MemberName 9(s1) 2 "s0_1" + Name 10 "s2" + MemberName 10(s2) 0 "i" + MemberName 10(s2) 1 "f" + MemberName 10(s2) 2 "s1_1" + Name 14 "s3" + MemberName 14(s3) 0 "s2_1" + MemberName 14(s3) 1 "i" + MemberName 14(s3) 2 "f" + MemberName 14(s3) 3 "s1_1" + Name 16 "foo3" + Name 27 "locals2" + Name 40 "fArray" + Name 46 "locals1Array" + Name 49 "foo1" + Name 53 "locals0" + Name 54 "s00" + MemberName 54(s00) 0 "s0_0" + Name 56 "locals00" + Name 61 "coord" + Name 71 "foo0" + Name 86 "foo00" + Name 99 "gl_FragColor" + Name 116 "samp2D" + Name 122 "foo2" + Decorate 116(samp2D) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypeFloat 32 + 8(s0): TypeStruct 6(int) + 9(s1): TypeStruct 6(int) 7(float) 8(s0) + 10(s2): TypeStruct 6(int) 7(float) 9(s1) + 11: TypeInt 32 0 + 12: 11(int) Constant 12 + 13: TypeArray 10(s2) 12 + 14(s3): TypeStruct 13 6(int) 7(float) 9(s1) + 15: TypePointer Private 14(s3) + 16(foo3): 15(ptr) Variable Private + 17: 6(int) Constant 0 + 18: 6(int) Constant 9 + 19: TypePointer Private 6(int) + 22: TypeBool + 26: TypePointer Function 10(s2) + 28: 6(int) Constant 1 + 29: 7(float) Constant 1065353216 + 30: TypePointer Function 7(float) + 32: 6(int) Constant 2 + 33: 8(s0) ConstantComposite 17 + 34: 9(s1) ConstantComposite 17 29 33 + 35: TypePointer Function 9(s1) + 37: 11(int) Constant 6 + 38: TypeArray 7(float) 37 + 39: TypePointer Function 38 + 41: 7(float) Constant 0 + 42: 38 ConstantComposite 41 41 41 41 41 41 + 43: 11(int) Constant 10 + 44: TypeArray 9(s1) 43 + 45: TypePointer Function 44 + 47: 6(int) Constant 6 + 48: TypePointer Private 9(s1) + 49(foo1): 48(ptr) Variable Private + 52: TypePointer Function 8(s0) + 54(s00): TypeStruct 8(s0) + 55: TypePointer Function 54(s00) + 57: 54(s00) ConstantComposite 33 + 59: TypeVector 7(float) 2 + 60: TypePointer Input 59(fvec2) + 61(coord): 60(ptr) Variable Input + 62: 11(int) Constant 0 + 63: TypePointer Input 7(float) + 67: 11(int) Constant 1 + 70: TypePointer Private 8(s0) + 71(foo0): 70(ptr) Variable Private + 75: 7(float) Constant 1073741824 + 76: 7(float) Constant 1077936128 + 77: 7(float) Constant 1082130432 + 78: 7(float) Constant 1084227584 + 79: 38 ConstantComposite 41 29 75 76 77 78 + 85: TypePointer Private 54(s00) + 86(foo00): 85(ptr) Variable Private + 88: TypePointer Function 6(int) + 91: 6(int) Constant 5 + 97: TypeVector 7(float) 4 + 98: TypePointer Output 97(fvec4) +99(gl_FragColor): 98(ptr) Variable Output + 106: 6(int) Constant 3 + 113: TypeImage 7(float) 2D sampled format:Unknown + 114: TypeSampledImage 113 + 115: TypePointer UniformConstant 114 + 116(samp2D): 115(ptr) Variable UniformConstant + 121: TypePointer Private 10(s2) + 122(foo2): 121(ptr) Variable Private + 4(main): 2 Function None 3 + 5: Label + 27(locals2): 26(ptr) Variable Function + 40(fArray): 39(ptr) Variable Function +46(locals1Array): 45(ptr) Variable Function + 53(locals0): 52(ptr) Variable Function + 56(locals00): 55(ptr) Variable Function + 20: 19(ptr) AccessChain 16(foo3) 17 18 17 + 21: 6(int) Load 20 + 23: 22(bool) SGreaterThan 21 17 + SelectionMerge 25 None + BranchConditional 23 24 58 + 24: Label + 31: 30(ptr) AccessChain 27(locals2) 28 + Store 31 29 + 36: 35(ptr) AccessChain 27(locals2) 32 + Store 36 34 + Store 40(fArray) 42 + 50: 9(s1) Load 49(foo1) + 51: 35(ptr) AccessChain 46(locals1Array) 47 + Store 51 50 + Store 53(locals0) 33 + Store 56(locals00) 57 + Branch 25 + 58: Label + 64: 63(ptr) AccessChain 61(coord) 62 + 65: 7(float) Load 64 + 66: 30(ptr) AccessChain 27(locals2) 28 + Store 66 65 + 68: 63(ptr) AccessChain 61(coord) 67 + 69: 7(float) Load 68 + 72: 8(s0) Load 71(foo0) + 73: 9(s1) CompositeConstruct 28 69 72 + 74: 35(ptr) AccessChain 27(locals2) 32 + Store 74 73 + Store 40(fArray) 79 + 80: 35(ptr) AccessChain 27(locals2) 32 + 81: 9(s1) Load 80 + 82: 35(ptr) AccessChain 46(locals1Array) 47 + Store 82 81 + 83: 70(ptr) AccessChain 49(foo1) 32 + 84: 8(s0) Load 83 + Store 53(locals0) 84 + 87: 54(s00) Load 86(foo00) + Store 56(locals00) 87 + Branch 25 + 25: Label + 89: 88(ptr) AccessChain 53(locals0) 17 + 90: 6(int) Load 89 + 92: 22(bool) SGreaterThan 90 91 + SelectionMerge 94 None + BranchConditional 92 93 94 + 93: Label + 95: 52(ptr) AccessChain 56(locals00) 17 + 96: 8(s0) Load 95 + Store 53(locals0) 96 + Branch 94 + 94: Label + 100: 88(ptr) AccessChain 53(locals0) 17 + 101: 6(int) Load 100 + 102: 7(float) ConvertSToF 101 + 103: 30(ptr) AccessChain 46(locals1Array) 47 28 + 104: 7(float) Load 103 + 105: 7(float) FAdd 102 104 + 107: 30(ptr) AccessChain 40(fArray) 106 + 108: 7(float) Load 107 + 109: 7(float) FAdd 105 108 + 110: 30(ptr) AccessChain 27(locals2) 32 28 + 111: 7(float) Load 110 + 112: 7(float) FAdd 109 111 + 117: 114 Load 116(samp2D) + 118: 59(fvec2) Load 61(coord) + 119: 97(fvec4) ImageSampleImplicitLod 117 118 + 120: 97(fvec4) VectorTimesScalar 119 112 + Store 99(gl_FragColor) 120 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.structure.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.structure.frag.out new file mode 100755 index 0000000..f7cb2d2 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.structure.frag.out @@ -0,0 +1,95 @@ +spv.structure.frag +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 60 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 45 54 + ExecutionMode 4 OriginUpperLeft + Source GLSL 140 + Name 4 "main" + Name 8 "scale" + Name 18 "lunarStruct1" + MemberName 18(lunarStruct1) 0 "i" + MemberName 18(lunarStruct1) 1 "f" + MemberName 18(lunarStruct1) 2 "color" + Name 21 "lunarStruct2" + MemberName 21(lunarStruct2) 0 "i" + MemberName 21(lunarStruct2) 1 "f" + MemberName 21(lunarStruct2) 2 "s1_1" + Name 24 "foo2" + Name 45 "gl_FragColor" + Name 50 "samp2D" + Name 54 "coord" + Name 59 "foo" + Decorate 50(samp2D) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypePointer Function 6(float) + 9: 6(float) Constant 0 + 10: TypeInt 32 1 + 11: TypeInt 32 0 + 12: 11(int) Constant 5 + 13: TypeArray 10(int) 12 + 14: 11(int) Constant 4 + 15: TypeArray 6(float) 14 + 16: TypeVector 6(float) 4 + 17: TypeArray 16(fvec4) 12 +18(lunarStruct1): TypeStruct 10(int) 15 17 + 19: 11(int) Constant 7 + 20: TypeArray 18(lunarStruct1) 19 +21(lunarStruct2): TypeStruct 13 6(float) 20 + 22: TypeArray 21(lunarStruct2) 12 + 23: TypePointer Private 22 + 24(foo2): 23(ptr) Variable Private + 25: 10(int) Constant 3 + 26: 10(int) Constant 0 + 27: 10(int) Constant 4 + 28: TypePointer Private 10(int) + 31: TypeBool + 35: 10(int) Constant 2 + 36: 11(int) Constant 0 + 37: TypePointer Private 6(float) + 41: 10(int) Constant 1 + 44: TypePointer Output 16(fvec4) +45(gl_FragColor): 44(ptr) Variable Output + 47: TypeImage 6(float) 2D sampled format:Unknown + 48: TypeSampledImage 47 + 49: TypePointer UniformConstant 48 + 50(samp2D): 49(ptr) Variable UniformConstant + 52: TypeVector 6(float) 2 + 53: TypePointer Input 52(fvec2) + 54(coord): 53(ptr) Variable Input + 58: TypePointer Private 18(lunarStruct1) + 59(foo): 58(ptr) Variable Private + 4(main): 2 Function None 3 + 5: Label + 8(scale): 7(ptr) Variable Function + Store 8(scale) 9 + 29: 28(ptr) AccessChain 24(foo2) 25 26 27 + 30: 10(int) Load 29 + 32: 31(bool) SGreaterThan 30 26 + SelectionMerge 34 None + BranchConditional 32 33 40 + 33: Label + 38: 37(ptr) AccessChain 24(foo2) 25 35 35 35 25 36 + 39: 6(float) Load 38 + Store 8(scale) 39 + Branch 34 + 40: Label + 42: 37(ptr) AccessChain 24(foo2) 25 35 35 41 25 + 43: 6(float) Load 42 + Store 8(scale) 43 + Branch 34 + 34: Label + 46: 6(float) Load 8(scale) + 51: 48 Load 50(samp2D) + 55: 52(fvec2) Load 54(coord) + 56: 16(fvec4) ImageSampleImplicitLod 51 55 + 57: 16(fvec4) VectorTimesScalar 56 46 + Store 45(gl_FragColor) 57 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subpass.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subpass.frag.out new file mode 100644 index 0000000..c242111 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subpass.frag.out @@ -0,0 +1,114 @@ +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 +// Id's are bound by 67 + + Capability Shader + Capability InputAttachment + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 15 27 53 + ExecutionMode 4 OriginUpperLeft + Source GLSL 400 + Name 4 "main" + Name 11 "foo(iIPM1;" + Name 10 "sb" + Name 15 "icolor" + Name 27 "color" + Name 30 "sub" + Name 35 "subMS" + Name 42 "isub" + Name 45 "isubMS" + Name 53 "ucolor" + Name 56 "usub" + Name 61 "usubMS" + Decorate 30(sub) DescriptorSet 0 + Decorate 30(sub) InputAttachmentIndex 1 + Decorate 35(subMS) DescriptorSet 0 + Decorate 35(subMS) InputAttachmentIndex 2 + Decorate 42(isub) DescriptorSet 0 + Decorate 42(isub) InputAttachmentIndex 3 + Decorate 45(isubMS) DescriptorSet 0 + Decorate 45(isubMS) InputAttachmentIndex 4 + Decorate 56(usub) DescriptorSet 0 + Decorate 56(usub) InputAttachmentIndex 5 + Decorate 61(usubMS) DescriptorSet 0 + Decorate 61(usubMS) InputAttachmentIndex 6 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypeImage 6(int) SubpassData multi-sampled nonsampled format:Unknown + 8: TypePointer UniformConstant 7 + 9: TypeFunction 2 8(ptr) + 13: TypeVector 6(int) 4 + 14: TypePointer Output 13(ivec4) + 15(icolor): 14(ptr) Variable Output + 17: 6(int) Constant 3 + 18: 6(int) Constant 0 + 19: TypeVector 6(int) 2 + 20: 19(ivec2) ConstantComposite 18 18 + 24: TypeFloat 32 + 25: TypeVector 24(float) 4 + 26: TypePointer Output 25(fvec4) + 27(color): 26(ptr) Variable Output + 28: TypeImage 24(float) SubpassData nonsampled format:Unknown + 29: TypePointer UniformConstant 28 + 30(sub): 29(ptr) Variable UniformConstant + 33: TypeImage 24(float) SubpassData multi-sampled nonsampled format:Unknown + 34: TypePointer UniformConstant 33 + 35(subMS): 34(ptr) Variable UniformConstant + 40: TypeImage 6(int) SubpassData nonsampled format:Unknown + 41: TypePointer UniformConstant 40 + 42(isub): 41(ptr) Variable UniformConstant + 45(isubMS): 8(ptr) Variable UniformConstant + 50: TypeInt 32 0 + 51: TypeVector 50(int) 4 + 52: TypePointer Output 51(ivec4) + 53(ucolor): 52(ptr) Variable Output + 54: TypeImage 50(int) SubpassData nonsampled format:Unknown + 55: TypePointer UniformConstant 54 + 56(usub): 55(ptr) Variable UniformConstant + 59: TypeImage 50(int) SubpassData multi-sampled nonsampled format:Unknown + 60: TypePointer UniformConstant 59 + 61(usubMS): 60(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label + 31: 28 Load 30(sub) + 32: 25(fvec4) ImageRead 31 20 + Store 27(color) 32 + 36: 33 Load 35(subMS) + 37: 25(fvec4) ImageRead 36 20 Sample 17 + 38: 25(fvec4) Load 27(color) + 39: 25(fvec4) FAdd 38 37 + Store 27(color) 39 + 43: 40 Load 42(isub) + 44: 13(ivec4) ImageRead 43 20 + Store 15(icolor) 44 + 46: 7 Load 45(isubMS) + 47: 13(ivec4) ImageRead 46 20 Sample 17 + 48: 13(ivec4) Load 15(icolor) + 49: 13(ivec4) IAdd 48 47 + Store 15(icolor) 49 + 57: 54 Load 56(usub) + 58: 51(ivec4) ImageRead 57 20 + Store 53(ucolor) 58 + 62: 59 Load 61(usubMS) + 63: 51(ivec4) ImageRead 62 20 Sample 17 + 64: 51(ivec4) Load 53(ucolor) + 65: 51(ivec4) IAdd 64 63 + Store 53(ucolor) 65 + 66: 2 FunctionCall 11(foo(iIPM1;) 45(isubMS) + Return + FunctionEnd + 11(foo(iIPM1;): 2 Function None 9 + 10(sb): 8(ptr) FunctionParameter + 12: Label + 16: 7 Load 10(sb) + 21: 13(ivec4) ImageRead 16 20 Sample 17 + 22: 13(ivec4) Load 15(icolor) + 23: 13(ivec4) IAdd 22 21 + Store 15(icolor) 23 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.switch.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.switch.frag.out new file mode 100755 index 0000000..86acb6c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.switch.frag.out @@ -0,0 +1,528 @@ +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 +// Id's are bound by 269 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 62 75 129 227 233 + ExecutionMode 4 OriginUpperLeft + Source ESSL 310 + Name 4 "main" + Name 15 "foo1(vf4;vf4;i1;" + Name 12 "v1" + Name 13 "v2" + Name 14 "i1" + Name 20 "foo2(vf4;vf4;i1;" + Name 17 "v1" + Name 18 "v2" + Name 19 "i1" + Name 60 "local" + Name 62 "c" + Name 73 "f" + Name 75 "x" + Name 129 "d" + Name 155 "i" + Name 175 "j" + Name 227 "color" + Name 233 "v" + Name 234 "param" + Name 236 "param" + Name 238 "param" + Name 246 "param" + Name 248 "param" + Name 250 "param" + Decorate 15(foo1(vf4;vf4;i1;) RelaxedPrecision + Decorate 12(v1) RelaxedPrecision + Decorate 13(v2) RelaxedPrecision + Decorate 14(i1) RelaxedPrecision + Decorate 20(foo2(vf4;vf4;i1;) RelaxedPrecision + Decorate 17(v1) RelaxedPrecision + Decorate 18(v2) RelaxedPrecision + Decorate 19(i1) RelaxedPrecision + Decorate 22 RelaxedPrecision + Decorate 27 RelaxedPrecision + Decorate 29 RelaxedPrecision + Decorate 31 RelaxedPrecision + Decorate 32 RelaxedPrecision + Decorate 33 RelaxedPrecision + Decorate 40 RelaxedPrecision + Decorate 46 RelaxedPrecision + Decorate 51 RelaxedPrecision + Decorate 53 RelaxedPrecision + Decorate 54 RelaxedPrecision + Decorate 55 RelaxedPrecision + Decorate 60(local) RelaxedPrecision + Decorate 62(c) RelaxedPrecision + Decorate 62(c) Flat + Decorate 63 RelaxedPrecision + Decorate 64 RelaxedPrecision + Decorate 66 RelaxedPrecision + Decorate 67 RelaxedPrecision + Decorate 73(f) RelaxedPrecision + Decorate 75(x) RelaxedPrecision + Decorate 76 RelaxedPrecision + Decorate 77 RelaxedPrecision + Decorate 79 RelaxedPrecision + Decorate 80 RelaxedPrecision + Decorate 82 RelaxedPrecision + Decorate 83 RelaxedPrecision + Decorate 85 RelaxedPrecision + Decorate 90 RelaxedPrecision + Decorate 91 RelaxedPrecision + Decorate 92 RelaxedPrecision + Decorate 93 RelaxedPrecision + Decorate 94 RelaxedPrecision + Decorate 95 RelaxedPrecision + Decorate 96 RelaxedPrecision + Decorate 97 RelaxedPrecision + Decorate 99 RelaxedPrecision + Decorate 100 RelaxedPrecision + Decorate 101 RelaxedPrecision + Decorate 102 RelaxedPrecision + Decorate 104 RelaxedPrecision + Decorate 108 RelaxedPrecision + Decorate 109 RelaxedPrecision + Decorate 110 RelaxedPrecision + Decorate 111 RelaxedPrecision + Decorate 113 RelaxedPrecision + Decorate 114 RelaxedPrecision + Decorate 115 RelaxedPrecision + Decorate 116 RelaxedPrecision + Decorate 119 RelaxedPrecision + Decorate 124 RelaxedPrecision + Decorate 125 RelaxedPrecision + Decorate 126 RelaxedPrecision + Decorate 127 RelaxedPrecision + Decorate 129(d) RelaxedPrecision + Decorate 129(d) Flat + Decorate 130 RelaxedPrecision + Decorate 134 RelaxedPrecision + Decorate 135 RelaxedPrecision + Decorate 136 RelaxedPrecision + Decorate 137 RelaxedPrecision + Decorate 138 RelaxedPrecision + Decorate 139 RelaxedPrecision + Decorate 140 RelaxedPrecision + Decorate 142 RelaxedPrecision + Decorate 143 RelaxedPrecision + Decorate 144 RelaxedPrecision + Decorate 145 RelaxedPrecision + Decorate 146 RelaxedPrecision + Decorate 150 RelaxedPrecision + Decorate 151 RelaxedPrecision + Decorate 152 RelaxedPrecision + Decorate 153 RelaxedPrecision + Decorate 155(i) RelaxedPrecision + Decorate 162 RelaxedPrecision + Decorate 166 RelaxedPrecision + Decorate 171 RelaxedPrecision + Decorate 172 RelaxedPrecision + Decorate 173 RelaxedPrecision + Decorate 174 RelaxedPrecision + Decorate 175(j) RelaxedPrecision + Decorate 182 RelaxedPrecision + Decorate 185 RelaxedPrecision + Decorate 186 RelaxedPrecision + Decorate 187 RelaxedPrecision + Decorate 193 RelaxedPrecision + Decorate 194 RelaxedPrecision + Decorate 196 RelaxedPrecision + Decorate 197 RelaxedPrecision + Decorate 198 RelaxedPrecision + Decorate 199 RelaxedPrecision + Decorate 202 RelaxedPrecision + Decorate 203 RelaxedPrecision + Decorate 204 RelaxedPrecision + Decorate 205 RelaxedPrecision + Decorate 207 RelaxedPrecision + Decorate 213 RelaxedPrecision + Decorate 214 RelaxedPrecision + Decorate 215 RelaxedPrecision + Decorate 219 RelaxedPrecision + Decorate 220 RelaxedPrecision + Decorate 221 RelaxedPrecision + Decorate 222 RelaxedPrecision + Decorate 227(color) RelaxedPrecision + Decorate 228 RelaxedPrecision + Decorate 229 RelaxedPrecision + Decorate 230 RelaxedPrecision + Decorate 231 RelaxedPrecision + Decorate 233(v) RelaxedPrecision + Decorate 235 RelaxedPrecision + Decorate 237 RelaxedPrecision + Decorate 239 RelaxedPrecision + Decorate 240 RelaxedPrecision + Decorate 243 RelaxedPrecision + Decorate 244 RelaxedPrecision + Decorate 245 RelaxedPrecision + Decorate 247 RelaxedPrecision + Decorate 249 RelaxedPrecision + Decorate 251 RelaxedPrecision + Decorate 252 RelaxedPrecision + Decorate 254 RelaxedPrecision + Decorate 255 RelaxedPrecision + Decorate 256 RelaxedPrecision + Decorate 257 RelaxedPrecision + Decorate 264 RelaxedPrecision + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 9: TypeInt 32 1 + 10: TypePointer Function 9(int) + 11: TypeFunction 7(fvec4) 8(ptr) 8(ptr) 10(ptr) + 36: 6(float) Constant 0 + 37: 7(fvec4) ConstantComposite 36 36 36 36 + 48: 6(float) Constant 1065353216 + 49: 7(fvec4) ConstantComposite 48 48 48 48 + 61: TypePointer Input 9(int) + 62(c): 61(ptr) Variable Input + 65: 9(int) Constant 1 + 72: TypePointer Function 6(float) + 74: TypePointer Input 6(float) + 75(x): 74(ptr) Variable Input + 129(d): 61(ptr) Variable Input + 156: 9(int) Constant 0 + 163: 9(int) Constant 10 + 164: TypeBool + 176: 9(int) Constant 20 + 183: 9(int) Constant 30 + 188: 6(float) Constant 1120429670 + 208: 6(float) Constant 1079739679 + 226: TypePointer Output 6(float) + 227(color): 226(ptr) Variable Output + 232: TypePointer Input 7(fvec4) + 233(v): 232(ptr) Variable Input + 241: TypeInt 32 0 + 242: 241(int) Constant 1 + 253: 241(int) Constant 2 + 4(main): 2 Function None 3 + 5: Label + 60(local): 10(ptr) Variable Function + 73(f): 72(ptr) Variable Function + 155(i): 10(ptr) Variable Function + 175(j): 10(ptr) Variable Function + 234(param): 8(ptr) Variable Function + 236(param): 8(ptr) Variable Function + 238(param): 10(ptr) Variable Function + 246(param): 8(ptr) Variable Function + 248(param): 8(ptr) Variable Function + 250(param): 10(ptr) Variable Function + 63: 9(int) Load 62(c) + Store 60(local) 63 + 64: 9(int) Load 60(local) + 66: 9(int) IAdd 64 65 + Store 60(local) 66 + 67: 9(int) Load 62(c) + SelectionMerge 71 None + Switch 67 70 + case 1: 68 + case 2: 69 + 70: Label + 82: 6(float) Load 75(x) + 83: 6(float) ExtInst 1(GLSL.std.450) 15(Tan) 82 + Store 73(f) 83 + Branch 71 + 68: Label + 76: 6(float) Load 75(x) + 77: 6(float) ExtInst 1(GLSL.std.450) 13(Sin) 76 + Store 73(f) 77 + Branch 71 + 69: Label + 79: 6(float) Load 75(x) + 80: 6(float) ExtInst 1(GLSL.std.450) 14(Cos) 79 + Store 73(f) 80 + Branch 71 + 71: Label + 85: 9(int) Load 62(c) + SelectionMerge 89 None + Switch 85 88 + case 1: 86 + case 2: 87 + 88: Label + 99: 6(float) Load 75(x) + 100: 6(float) ExtInst 1(GLSL.std.450) 15(Tan) 99 + 101: 6(float) Load 73(f) + 102: 6(float) FAdd 101 100 + Store 73(f) 102 + Branch 89 + 86: Label + 90: 6(float) Load 75(x) + 91: 6(float) ExtInst 1(GLSL.std.450) 13(Sin) 90 + 92: 6(float) Load 73(f) + 93: 6(float) FAdd 92 91 + Store 73(f) 93 + Branch 87 + 87: Label + 94: 6(float) Load 75(x) + 95: 6(float) ExtInst 1(GLSL.std.450) 14(Cos) 94 + 96: 6(float) Load 73(f) + 97: 6(float) FAdd 96 95 + Store 73(f) 97 + Branch 89 + 89: Label + 104: 9(int) Load 62(c) + SelectionMerge 107 None + Switch 104 107 + case 1: 105 + case 2: 106 + 105: Label + 108: 6(float) Load 75(x) + 109: 6(float) ExtInst 1(GLSL.std.450) 13(Sin) 108 + 110: 6(float) Load 73(f) + 111: 6(float) FAdd 110 109 + Store 73(f) 111 + Branch 107 + 106: Label + 113: 6(float) Load 75(x) + 114: 6(float) ExtInst 1(GLSL.std.450) 14(Cos) 113 + 115: 6(float) Load 73(f) + 116: 6(float) FAdd 115 114 + Store 73(f) 116 + Branch 107 + 107: Label + 119: 9(int) Load 62(c) + SelectionMerge 123 None + Switch 119 122 + case 1: 120 + case 2: 121 + 122: Label + 150: 6(float) Load 75(x) + 151: 6(float) ExtInst 1(GLSL.std.450) 15(Tan) 150 + 152: 6(float) Load 73(f) + 153: 6(float) FAdd 152 151 + Store 73(f) 153 + Branch 123 + 120: Label + 124: 6(float) Load 75(x) + 125: 6(float) ExtInst 1(GLSL.std.450) 13(Sin) 124 + 126: 6(float) Load 73(f) + 127: 6(float) FAdd 126 125 + Store 73(f) 127 + Branch 123 + 121: Label + 130: 9(int) Load 129(d) + SelectionMerge 133 None + Switch 130 133 + case 1: 131 + case 2: 132 + 131: Label + 134: 6(float) Load 75(x) + 135: 6(float) Load 75(x) + 136: 6(float) FMul 134 135 + 137: 6(float) Load 75(x) + 138: 6(float) FMul 136 137 + 139: 6(float) Load 73(f) + 140: 6(float) FAdd 139 138 + Store 73(f) 140 + Branch 133 + 132: Label + 142: 6(float) Load 75(x) + 143: 6(float) Load 75(x) + 144: 6(float) FMul 142 143 + 145: 6(float) Load 73(f) + 146: 6(float) FAdd 145 144 + Store 73(f) 146 + Branch 133 + 133: Label + Branch 123 + 123: Label + Store 155(i) 156 + Branch 157 + 157: Label + LoopMerge 159 160 None + Branch 161 + 161: Label + 162: 9(int) Load 155(i) + 165: 164(bool) SLessThan 162 163 + BranchConditional 165 158 159 + 158: Label + 166: 9(int) Load 62(c) + SelectionMerge 170 None + Switch 166 169 + case 1: 167 + case 2: 168 + 169: Label + 202: 6(float) Load 75(x) + 203: 6(float) ExtInst 1(GLSL.std.450) 15(Tan) 202 + 204: 6(float) Load 73(f) + 205: 6(float) FAdd 204 203 + Store 73(f) 205 + Branch 170 + 167: Label + 171: 6(float) Load 75(x) + 172: 6(float) ExtInst 1(GLSL.std.450) 13(Sin) 171 + 173: 6(float) Load 73(f) + 174: 6(float) FAdd 173 172 + Store 73(f) 174 + Store 175(j) 176 + Branch 177 + 177: Label + LoopMerge 179 180 None + Branch 181 + 181: Label + 182: 9(int) Load 175(j) + 184: 164(bool) SLessThan 182 183 + BranchConditional 184 178 179 + 178: Label + 185: 6(float) Load 73(f) + 186: 6(float) FAdd 185 48 + Store 73(f) 186 + 187: 6(float) Load 73(f) + 189: 164(bool) FOrdLessThan 187 188 + SelectionMerge 191 None + BranchConditional 189 190 191 + 190: Label + Branch 179 + 191: Label + Branch 180 + 180: Label + 193: 9(int) Load 175(j) + 194: 9(int) IAdd 193 65 + Store 175(j) 194 + Branch 177 + 179: Label + Branch 170 + 168: Label + 196: 6(float) Load 75(x) + 197: 6(float) ExtInst 1(GLSL.std.450) 14(Cos) 196 + 198: 6(float) Load 73(f) + 199: 6(float) FAdd 198 197 + Store 73(f) 199 + Branch 170 + 170: Label + 207: 6(float) Load 73(f) + 209: 164(bool) FOrdLessThan 207 208 + SelectionMerge 211 None + BranchConditional 209 210 211 + 210: Label + Branch 159 + 211: Label + Branch 160 + 160: Label + 213: 9(int) Load 155(i) + 214: 9(int) IAdd 213 65 + Store 155(i) 214 + Branch 157 + 159: Label + 215: 9(int) Load 62(c) + SelectionMerge 218 None + Switch 215 218 + case 1: 216 + case 2: 217 + 216: Label + 219: 6(float) Load 75(x) + 220: 6(float) ExtInst 1(GLSL.std.450) 13(Sin) 219 + 221: 6(float) Load 73(f) + 222: 6(float) FAdd 221 220 + Store 73(f) 222 + Branch 218 + 217: Label + Branch 218 + 218: Label + 228: 6(float) Load 73(f) + 229: 9(int) Load 60(local) + 230: 6(float) ConvertSToF 229 + 231: 6(float) FAdd 228 230 + Store 227(color) 231 + 235: 7(fvec4) Load 233(v) + Store 234(param) 235 + 237: 7(fvec4) Load 233(v) + Store 236(param) 237 + 239: 9(int) Load 62(c) + Store 238(param) 239 + 240: 7(fvec4) FunctionCall 15(foo1(vf4;vf4;i1;) 234(param) 236(param) 238(param) + 243: 6(float) CompositeExtract 240 1 + 244: 6(float) Load 227(color) + 245: 6(float) FAdd 244 243 + Store 227(color) 245 + 247: 7(fvec4) Load 233(v) + Store 246(param) 247 + 249: 7(fvec4) Load 233(v) + Store 248(param) 249 + 251: 9(int) Load 62(c) + Store 250(param) 251 + 252: 7(fvec4) FunctionCall 20(foo2(vf4;vf4;i1;) 246(param) 248(param) 250(param) + 254: 6(float) CompositeExtract 252 2 + 255: 6(float) Load 227(color) + 256: 6(float) FAdd 255 254 + Store 227(color) 256 + 257: 9(int) Load 62(c) + SelectionMerge 260 None + Switch 257 259 + case 0: 258 + 259: Label + Branch 260 + 258: Label + Branch 260 + 260: Label + 264: 9(int) Load 62(c) + SelectionMerge 266 None + Switch 264 265 + 265: Label + Branch 266 + 266: Label + Return + FunctionEnd +15(foo1(vf4;vf4;i1;): 7(fvec4) Function None 11 + 12(v1): 8(ptr) FunctionParameter + 13(v2): 8(ptr) FunctionParameter + 14(i1): 10(ptr) FunctionParameter + 16: Label + 22: 9(int) Load 14(i1) + SelectionMerge 26 None + Switch 22 26 + case 0: 23 + case 2: 24 + case 1: 24 + case 3: 25 + 23: Label + 27: 7(fvec4) Load 12(v1) + ReturnValue 27 + 24: Label + 29: 7(fvec4) Load 13(v2) + ReturnValue 29 + 25: Label + 31: 7(fvec4) Load 12(v1) + 32: 7(fvec4) Load 13(v2) + 33: 7(fvec4) FMul 31 32 + ReturnValue 33 + 26: Label + ReturnValue 37 + FunctionEnd +20(foo2(vf4;vf4;i1;): 7(fvec4) Function None 11 + 17(v1): 8(ptr) FunctionParameter + 18(v2): 8(ptr) FunctionParameter + 19(i1): 10(ptr) FunctionParameter + 21: Label + 40: 9(int) Load 19(i1) + SelectionMerge 45 None + Switch 40 45 + case 0: 41 + case 2: 42 + case 1: 43 + case 3: 44 + 41: Label + 46: 7(fvec4) Load 17(v1) + ReturnValue 46 + 42: Label + ReturnValue 49 + 43: Label + 51: 7(fvec4) Load 18(v2) + ReturnValue 51 + 44: Label + 53: 7(fvec4) Load 17(v1) + 54: 7(fvec4) Load 18(v2) + 55: 7(fvec4) FMul 53 54 + ReturnValue 55 + 45: Label + ReturnValue 37 + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.swizzle.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.swizzle.frag.out new file mode 100755 index 0000000..46978f8 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.swizzle.frag.out @@ -0,0 +1,166 @@ +spv.swizzle.frag +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 108 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 14 30 69 107 + ExecutionMode 4 OriginUpperLeft + Source GLSL 140 + Name 4 "main" + Name 8 "blendscale" + Name 12 "w" + Name 14 "u" + Name 16 "w_dep" + Name 18 "w_reorder" + Name 20 "w2" + Name 22 "w_flow" + Name 30 "t" + Name 49 "w_undef" + Name 56 "p" + Name 69 "gl_FragColor" + Name 81 "c" + Name 83 "rep" + Name 107 "blend" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypePointer Function 6(float) + 9: 6(float) Constant 1071971828 + 10: TypeVector 6(float) 4 + 11: TypePointer Function 10(fvec4) + 13: TypePointer Input 10(fvec4) + 14(u): 13(ptr) Variable Input + 25: TypeInt 32 0 + 26: 25(int) Constant 2 + 28: TypeVector 6(float) 2 + 29: TypePointer Input 28(fvec2) + 30(t): 29(ptr) Variable Input + 35: 25(int) Constant 0 + 40: 25(int) Constant 1 + 54: TypeBool + 55: TypePointer Private 54(bool) + 56(p): 55(ptr) Variable Private + 60: TypePointer Input 6(float) + 68: TypePointer Output 10(fvec4) +69(gl_FragColor): 68(ptr) Variable Output + 80: TypePointer Function 28(fvec2) + 84: 6(float) Constant 0 + 85: 6(float) Constant 1065353216 + 86: 10(fvec4) ConstantComposite 84 84 84 85 + 92: 6(float) Constant 3212836864 + 102: 6(float) Constant 1079613850 + 107(blend): 60(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 8(blendscale): 7(ptr) Variable Function + 12(w): 11(ptr) Variable Function + 16(w_dep): 11(ptr) Variable Function + 18(w_reorder): 11(ptr) Variable Function + 20(w2): 11(ptr) Variable Function + 22(w_flow): 11(ptr) Variable Function + 49(w_undef): 11(ptr) Variable Function + 81(c): 80(ptr) Variable Function + 83(rep): 11(ptr) Variable Function + Store 8(blendscale) 9 + 15: 10(fvec4) Load 14(u) + Store 12(w) 15 + 17: 10(fvec4) Load 14(u) + Store 16(w_dep) 17 + 19: 10(fvec4) Load 14(u) + Store 18(w_reorder) 19 + 21: 10(fvec4) Load 14(u) + Store 20(w2) 21 + 23: 10(fvec4) Load 14(u) + Store 22(w_flow) 23 + 24: 6(float) Load 8(blendscale) + 27: 7(ptr) AccessChain 18(w_reorder) 26 + Store 27 24 + 31: 28(fvec2) Load 30(t) + 32: 10(fvec4) Load 12(w) + 33: 10(fvec4) VectorShuffle 32 31 0 5 2 4 + Store 12(w) 33 + 34: 6(float) Load 8(blendscale) + 36: 7(ptr) AccessChain 18(w_reorder) 35 + Store 36 34 + 37: 10(fvec4) Load 14(u) + 38: 10(fvec4) VectorShuffle 37 37 2 3 0 1 + Store 20(w2) 38 + 39: 6(float) Load 8(blendscale) + 41: 7(ptr) AccessChain 18(w_reorder) 40 + Store 41 39 + 42: 10(fvec4) Load 20(w2) + 43: 28(fvec2) VectorShuffle 42 42 0 2 + 44: 10(fvec4) Load 16(w_dep) + 45: 10(fvec4) VectorShuffle 44 43 4 5 2 3 + Store 16(w_dep) 45 + 46: 28(fvec2) Load 30(t) + 47: 10(fvec4) Load 16(w_dep) + 48: 10(fvec4) VectorShuffle 47 46 0 1 4 5 + Store 16(w_dep) 48 + 50: 10(fvec4) Load 14(u) + 51: 28(fvec2) VectorShuffle 50 50 2 3 + 52: 10(fvec4) Load 49(w_undef) + 53: 10(fvec4) VectorShuffle 52 51 4 5 2 3 + Store 49(w_undef) 53 + 57: 54(bool) Load 56(p) + SelectionMerge 59 None + BranchConditional 57 58 64 + 58: Label + 61: 60(ptr) AccessChain 30(t) 35 + 62: 6(float) Load 61 + 63: 7(ptr) AccessChain 22(w_flow) 35 + Store 63 62 + Branch 59 + 64: Label + 65: 60(ptr) AccessChain 30(t) 40 + 66: 6(float) Load 65 + 67: 7(ptr) AccessChain 22(w_flow) 35 + Store 67 66 + Branch 59 + 59: Label + 70: 10(fvec4) Load 18(w_reorder) + 71: 10(fvec4) Load 49(w_undef) + 72: 10(fvec4) Load 12(w) + 73: 10(fvec4) Load 20(w2) + 74: 10(fvec4) FMul 72 73 + 75: 10(fvec4) Load 16(w_dep) + 76: 10(fvec4) FMul 74 75 + 77: 10(fvec4) Load 22(w_flow) + 78: 10(fvec4) FMul 76 77 + 79: 10(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 70 71 78 + Store 69(gl_FragColor) 79 + 82: 28(fvec2) Load 30(t) + Store 81(c) 82 + Store 83(rep) 86 + 87: 7(ptr) AccessChain 81(c) 35 + 88: 6(float) Load 87 + 89: 54(bool) FOrdLessThan 88 84 + SelectionMerge 91 None + BranchConditional 89 90 91 + 90: Label + 93: 7(ptr) AccessChain 81(c) 35 + 94: 6(float) Load 93 + 95: 6(float) FMul 94 92 + 96: 7(ptr) AccessChain 81(c) 35 + Store 96 95 + Branch 91 + 91: Label + 97: 7(ptr) AccessChain 81(c) 35 + 98: 6(float) Load 97 + 99: 54(bool) FOrdLessThanEqual 98 85 + SelectionMerge 101 None + BranchConditional 99 100 101 + 100: Label + 103: 7(ptr) AccessChain 83(rep) 35 + Store 103 102 + Branch 101 + 101: Label + 104: 10(fvec4) Load 83(rep) + 105: 10(fvec4) Load 69(gl_FragColor) + 106: 10(fvec4) FAdd 105 104 + Store 69(gl_FragColor) 106 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.swizzleInversion.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.swizzleInversion.frag.out new file mode 100755 index 0000000..bf0699a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.swizzleInversion.frag.out @@ -0,0 +1,77 @@ +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 +// Id's are bound by 46 + + Capability Shader + Capability InterpolationFunction + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 12 37 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + Name 4 "main" + Name 9 "v43" + Name 12 "in4" + Name 17 "v42" + Name 23 "v44" + Name 29 "v41" + Name 35 "v33" + Name 37 "in3" + Name 40 "v32" + Name 43 "v31" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 3 + 8: TypePointer Function 7(fvec3) + 10: TypeVector 6(float) 4 + 11: TypePointer Input 10(fvec4) + 12(in4): 11(ptr) Variable Input + 15: TypeVector 6(float) 2 + 16: TypePointer Function 15(fvec2) + 18: TypeInt 32 1 + 19: 18(int) Constant 1 + 22: TypePointer Function 10(fvec4) + 24: 6(float) Constant 1073741824 + 25: 15(fvec2) ConstantComposite 24 24 + 28: TypePointer Function 6(float) + 30: TypeInt 32 0 + 31: 30(int) Constant 1 + 32: TypePointer Input 6(float) + 36: TypePointer Input 7(fvec3) + 37(in3): 36(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 9(v43): 8(ptr) Variable Function + 17(v42): 16(ptr) Variable Function + 23(v44): 22(ptr) Variable Function + 29(v41): 28(ptr) Variable Function + 35(v33): 8(ptr) Variable Function + 40(v32): 16(ptr) Variable Function + 43(v31): 28(ptr) Variable Function + 13: 10(fvec4) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 12(in4) + 14: 7(fvec3) VectorShuffle 13 13 3 2 0 + Store 9(v43) 14 + 20: 10(fvec4) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 12(in4) 19 + 21: 15(fvec2) VectorShuffle 20 20 2 0 + Store 17(v42) 21 + 26: 10(fvec4) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 12(in4) 25 + 27: 10(fvec4) VectorShuffle 26 26 2 1 0 3 + Store 23(v44) 27 + 33: 32(ptr) AccessChain 12(in4) 31 + 34: 6(float) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 33 25 + Store 29(v41) 34 + 38: 7(fvec3) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 37(in3) + 39: 7(fvec3) VectorShuffle 38 38 1 2 0 + Store 35(v33) 39 + 41: 7(fvec3) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 37(in3) 19 + 42: 15(fvec2) VectorShuffle 41 41 2 0 + Store 40(v32) 42 + 44: 32(ptr) AccessChain 12(in4) 31 + 45: 6(float) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 44 25 + Store 43(v31) 45 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.test.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.test.frag.out new file mode 100644 index 0000000..bf0135a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.test.frag.out @@ -0,0 +1,86 @@ +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 +// Id's are bound by 55 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 20 22 37 43 46 49 + ExecutionMode 4 OriginUpperLeft + Source GLSL 400 + Name 4 "main" + Name 8 "blendscale" + Name 12 "v" + Name 16 "texSampler2D" + Name 20 "t" + Name 22 "scale" + Name 29 "w" + Name 33 "texSampler3D" + Name 37 "coords" + Name 43 "gl_FragColor" + Name 46 "u" + Name 49 "blend" + Decorate 16(texSampler2D) DescriptorSet 0 + Decorate 33(texSampler3D) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypePointer Function 6(float) + 9: 6(float) Constant 1071971828 + 10: TypeVector 6(float) 4 + 11: TypePointer Function 10(fvec4) + 13: TypeImage 6(float) 2D sampled format:Unknown + 14: TypeSampledImage 13 + 15: TypePointer UniformConstant 14 +16(texSampler2D): 15(ptr) Variable UniformConstant + 18: TypeVector 6(float) 2 + 19: TypePointer Input 18(fvec2) + 20(t): 19(ptr) Variable Input + 22(scale): 19(ptr) Variable Input + 30: TypeImage 6(float) 3D sampled format:Unknown + 31: TypeSampledImage 30 + 32: TypePointer UniformConstant 31 +33(texSampler3D): 32(ptr) Variable UniformConstant + 35: TypeVector 6(float) 3 + 36: TypePointer Input 35(fvec3) + 37(coords): 36(ptr) Variable Input + 42: TypePointer Output 10(fvec4) +43(gl_FragColor): 42(ptr) Variable Output + 45: TypePointer Input 10(fvec4) + 46(u): 45(ptr) Variable Input + 48: TypePointer Input 6(float) + 49(blend): 48(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 8(blendscale): 7(ptr) Variable Function + 12(v): 11(ptr) Variable Function + 29(w): 11(ptr) Variable Function + Store 8(blendscale) 9 + 17: 14 Load 16(texSampler2D) + 21: 18(fvec2) Load 20(t) + 23: 18(fvec2) Load 22(scale) + 24: 18(fvec2) FAdd 21 23 + 25: 18(fvec2) Load 22(scale) + 26: 18(fvec2) FDiv 24 25 + 27: 10(fvec4) ImageSampleImplicitLod 17 26 + 28: 10(fvec4) VectorShuffle 27 27 3 2 1 0 + Store 12(v) 28 + 34: 31 Load 33(texSampler3D) + 38: 35(fvec3) Load 37(coords) + 39: 10(fvec4) ImageSampleImplicitLod 34 38 + 40: 10(fvec4) Load 12(v) + 41: 10(fvec4) FAdd 39 40 + Store 29(w) 41 + 44: 10(fvec4) Load 29(w) + 47: 10(fvec4) Load 46(u) + 50: 6(float) Load 49(blend) + 51: 6(float) Load 8(blendscale) + 52: 6(float) FMul 50 51 + 53: 10(fvec4) CompositeConstruct 52 52 52 52 + 54: 10(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 44 47 53 + Store 43(gl_FragColor) 54 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.test.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.test.vert.out new file mode 100644 index 0000000..623d16b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.test.vert.out @@ -0,0 +1,45 @@ +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 +// Id's are bound by 24 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 9 11 15 18 21 + Source GLSL 140 + Name 4 "main" + Name 9 "uv" + Name 11 "uv_in" + Name 15 "gl_Position" + Name 18 "transform" + Name 21 "position" + Decorate 15(gl_Position) BuiltIn Position + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 2 + 8: TypePointer Output 7(fvec2) + 9(uv): 8(ptr) Variable Output + 10: TypePointer Input 7(fvec2) + 11(uv_in): 10(ptr) Variable Input + 13: TypeVector 6(float) 4 + 14: TypePointer Output 13(fvec4) + 15(gl_Position): 14(ptr) Variable Output + 16: TypeMatrix 13(fvec4) 4 + 17: TypePointer Input 16 + 18(transform): 17(ptr) Variable Input + 20: TypePointer Input 13(fvec4) + 21(position): 20(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 12: 7(fvec2) Load 11(uv_in) + Store 9(uv) 12 + 19: 16 Load 18(transform) + 22: 13(fvec4) Load 21(position) + 23: 13(fvec4) MatrixTimesVector 19 22 + Store 15(gl_Position) 23 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.texture.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.texture.frag.out new file mode 100755 index 0000000..467f254 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.texture.frag.out @@ -0,0 +1,395 @@ +spv.texture.frag +WARNING: 0:10: varying deprecated in version 130; may be removed in future release +WARNING: 0:11: varying deprecated in version 130; may be removed in future release +WARNING: 0:12: varying deprecated in version 130; may be removed in future release + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 305 + + Capability Shader + Capability Sampled1D + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 47 291 294 297 303 304 + ExecutionMode 4 OriginUpperLeft + Source GLSL 140 + Name 4 "main" + Name 8 "blendscale" + Name 10 "bias" + Name 12 "lod" + Name 14 "proj" + Name 15 "coords1D" + Name 18 "coords3D" + Name 24 "coords4D" + Name 26 "color" + Name 32 "texSampler1D" + Name 47 "coords2D" + Name 76 "texSampler2D" + Name 104 "texSampler3D" + Name 130 "texSamplerCube" + Name 145 "shadowSampler1D" + Name 164 "shadowSampler2D" + Name 221 "iCoords2D" + Name 226 "iLod" + Name 236 "gradX" + Name 239 "gradY" + Name 291 "gl_FragColor" + Name 294 "u" + Name 297 "blend" + Name 303 "scale" + Name 304 "t" + Decorate 32(texSampler1D) DescriptorSet 0 + Decorate 76(texSampler2D) DescriptorSet 0 + Decorate 104(texSampler3D) DescriptorSet 0 + Decorate 130(texSamplerCube) DescriptorSet 0 + Decorate 145(shadowSampler1D) DescriptorSet 0 + Decorate 164(shadowSampler2D) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypePointer Function 6(float) + 9: 6(float) Constant 1071971828 + 11: 6(float) Constant 1073741824 + 13: 6(float) Constant 1077936128 + 16: TypeVector 6(float) 3 + 17: TypePointer Function 16(fvec3) + 19: 6(float) Constant 1076753334 + 20: 6(float) Constant 1079836148 + 21: 16(fvec3) ConstantComposite 9 19 20 + 22: TypeVector 6(float) 4 + 23: TypePointer Function 22(fvec4) + 25: 22(fvec4) ConstantComposite 9 19 20 11 + 27: 6(float) Constant 0 + 28: 22(fvec4) ConstantComposite 27 27 27 27 + 29: TypeImage 6(float) 1D sampled format:Unknown + 30: TypeSampledImage 29 + 31: TypePointer UniformConstant 30 +32(texSampler1D): 31(ptr) Variable UniformConstant + 45: TypeVector 6(float) 2 + 46: TypePointer Input 45(fvec2) + 47(coords2D): 46(ptr) Variable Input + 73: TypeImage 6(float) 2D sampled format:Unknown + 74: TypeSampledImage 73 + 75: TypePointer UniformConstant 74 +76(texSampler2D): 75(ptr) Variable UniformConstant + 101: TypeImage 6(float) 3D sampled format:Unknown + 102: TypeSampledImage 101 + 103: TypePointer UniformConstant 102 +104(texSampler3D): 103(ptr) Variable UniformConstant + 127: TypeImage 6(float) Cube sampled format:Unknown + 128: TypeSampledImage 127 + 129: TypePointer UniformConstant 128 +130(texSamplerCube): 129(ptr) Variable UniformConstant + 142: TypeImage 6(float) 1D depth sampled format:Unknown + 143: TypeSampledImage 142 + 144: TypePointer UniformConstant 143 +145(shadowSampler1D): 144(ptr) Variable UniformConstant + 161: TypeImage 6(float) 2D depth sampled format:Unknown + 162: TypeSampledImage 161 + 163: TypePointer UniformConstant 162 +164(shadowSampler2D): 163(ptr) Variable UniformConstant + 218: TypeInt 32 1 + 219: TypeVector 218(int) 2 + 220: TypePointer Function 219(ivec2) + 222: 218(int) Constant 0 + 223: 218(int) Constant 5 + 224: 219(ivec2) ConstantComposite 222 223 + 225: TypePointer Function 218(int) + 227: 218(int) Constant 1 + 235: TypePointer Function 45(fvec2) + 264: 218(int) Constant 3 + 265: 218(int) Constant 4294967289 + 266: 219(ivec2) ConstantComposite 264 265 + 290: TypePointer Output 22(fvec4) +291(gl_FragColor): 290(ptr) Variable Output + 293: TypePointer Input 22(fvec4) + 294(u): 293(ptr) Variable Input + 296: TypePointer Input 6(float) + 297(blend): 296(ptr) Variable Input + 303(scale): 46(ptr) Variable Input + 304(t): 46(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 8(blendscale): 7(ptr) Variable Function + 10(bias): 7(ptr) Variable Function + 12(lod): 7(ptr) Variable Function + 14(proj): 7(ptr) Variable Function + 15(coords1D): 7(ptr) Variable Function + 18(coords3D): 17(ptr) Variable Function + 24(coords4D): 23(ptr) Variable Function + 26(color): 23(ptr) Variable Function + 221(iCoords2D): 220(ptr) Variable Function + 226(iLod): 225(ptr) Variable Function + 236(gradX): 235(ptr) Variable Function + 239(gradY): 235(ptr) Variable Function + Store 8(blendscale) 9 + Store 10(bias) 11 + Store 12(lod) 13 + Store 14(proj) 11 + Store 15(coords1D) 9 + Store 18(coords3D) 21 + Store 24(coords4D) 25 + Store 26(color) 28 + 33: 30 Load 32(texSampler1D) + 34: 6(float) Load 15(coords1D) + 35: 22(fvec4) ImageSampleImplicitLod 33 34 + 36: 22(fvec4) Load 26(color) + 37: 22(fvec4) FAdd 36 35 + Store 26(color) 37 + 38: 30 Load 32(texSampler1D) + 39: 6(float) Load 15(coords1D) + 40: 6(float) Load 10(bias) + 41: 22(fvec4) ImageSampleImplicitLod 38 39 Bias 40 + 42: 22(fvec4) Load 26(color) + 43: 22(fvec4) FAdd 42 41 + Store 26(color) 43 + 44: 30 Load 32(texSampler1D) + 48: 45(fvec2) Load 47(coords2D) + 49: 22(fvec4) ImageSampleProjImplicitLod 44 48 + 50: 22(fvec4) Load 26(color) + 51: 22(fvec4) FAdd 50 49 + Store 26(color) 51 + 52: 30 Load 32(texSampler1D) + 53: 22(fvec4) Load 24(coords4D) + 54: 6(float) CompositeExtract 53 3 + 55: 22(fvec4) CompositeInsert 54 53 1 + 56: 22(fvec4) ImageSampleProjImplicitLod 52 55 + 57: 22(fvec4) Load 26(color) + 58: 22(fvec4) FAdd 57 56 + Store 26(color) 58 + 59: 30 Load 32(texSampler1D) + 60: 45(fvec2) Load 47(coords2D) + 61: 6(float) Load 10(bias) + 62: 22(fvec4) ImageSampleProjImplicitLod 59 60 Bias 61 + 63: 22(fvec4) Load 26(color) + 64: 22(fvec4) FAdd 63 62 + Store 26(color) 64 + 65: 30 Load 32(texSampler1D) + 66: 22(fvec4) Load 24(coords4D) + 67: 6(float) Load 10(bias) + 68: 6(float) CompositeExtract 66 3 + 69: 22(fvec4) CompositeInsert 68 66 1 + 70: 22(fvec4) ImageSampleProjImplicitLod 65 69 Bias 67 + 71: 22(fvec4) Load 26(color) + 72: 22(fvec4) FAdd 71 70 + Store 26(color) 72 + 77: 74 Load 76(texSampler2D) + 78: 45(fvec2) Load 47(coords2D) + 79: 22(fvec4) ImageSampleImplicitLod 77 78 + 80: 22(fvec4) Load 26(color) + 81: 22(fvec4) FAdd 80 79 + Store 26(color) 81 + 82: 74 Load 76(texSampler2D) + 83: 45(fvec2) Load 47(coords2D) + 84: 6(float) Load 10(bias) + 85: 22(fvec4) ImageSampleImplicitLod 82 83 Bias 84 + 86: 22(fvec4) Load 26(color) + 87: 22(fvec4) FAdd 86 85 + Store 26(color) 87 + 88: 74 Load 76(texSampler2D) + 89: 16(fvec3) Load 18(coords3D) + 90: 22(fvec4) ImageSampleProjImplicitLod 88 89 + 91: 22(fvec4) Load 26(color) + 92: 22(fvec4) FAdd 91 90 + Store 26(color) 92 + 93: 74 Load 76(texSampler2D) + 94: 22(fvec4) Load 24(coords4D) + 95: 6(float) Load 10(bias) + 96: 6(float) CompositeExtract 94 3 + 97: 22(fvec4) CompositeInsert 96 94 2 + 98: 22(fvec4) ImageSampleProjImplicitLod 93 97 Bias 95 + 99: 22(fvec4) Load 26(color) + 100: 22(fvec4) FAdd 99 98 + Store 26(color) 100 + 105: 102 Load 104(texSampler3D) + 106: 16(fvec3) Load 18(coords3D) + 107: 22(fvec4) ImageSampleImplicitLod 105 106 + 108: 22(fvec4) Load 26(color) + 109: 22(fvec4) FAdd 108 107 + Store 26(color) 109 + 110: 102 Load 104(texSampler3D) + 111: 16(fvec3) Load 18(coords3D) + 112: 6(float) Load 10(bias) + 113: 22(fvec4) ImageSampleImplicitLod 110 111 Bias 112 + 114: 22(fvec4) Load 26(color) + 115: 22(fvec4) FAdd 114 113 + Store 26(color) 115 + 116: 102 Load 104(texSampler3D) + 117: 22(fvec4) Load 24(coords4D) + 118: 22(fvec4) ImageSampleProjImplicitLod 116 117 + 119: 22(fvec4) Load 26(color) + 120: 22(fvec4) FAdd 119 118 + Store 26(color) 120 + 121: 102 Load 104(texSampler3D) + 122: 22(fvec4) Load 24(coords4D) + 123: 6(float) Load 10(bias) + 124: 22(fvec4) ImageSampleProjImplicitLod 121 122 Bias 123 + 125: 22(fvec4) Load 26(color) + 126: 22(fvec4) FAdd 125 124 + Store 26(color) 126 + 131: 128 Load 130(texSamplerCube) + 132: 16(fvec3) Load 18(coords3D) + 133: 22(fvec4) ImageSampleImplicitLod 131 132 + 134: 22(fvec4) Load 26(color) + 135: 22(fvec4) FAdd 134 133 + Store 26(color) 135 + 136: 128 Load 130(texSamplerCube) + 137: 16(fvec3) Load 18(coords3D) + 138: 6(float) Load 10(bias) + 139: 22(fvec4) ImageSampleImplicitLod 136 137 Bias 138 + 140: 22(fvec4) Load 26(color) + 141: 22(fvec4) FAdd 140 139 + Store 26(color) 141 + 146: 143 Load 145(shadowSampler1D) + 147: 16(fvec3) Load 18(coords3D) + 148: 6(float) CompositeExtract 147 2 + 149: 6(float) ImageSampleDrefImplicitLod 146 147 148 + 150: 22(fvec4) Load 26(color) + 151: 22(fvec4) CompositeConstruct 149 149 149 149 + 152: 22(fvec4) FAdd 150 151 + Store 26(color) 152 + 153: 143 Load 145(shadowSampler1D) + 154: 16(fvec3) Load 18(coords3D) + 155: 6(float) Load 10(bias) + 156: 6(float) CompositeExtract 154 2 + 157: 6(float) ImageSampleDrefImplicitLod 153 154 156 Bias 155 + 158: 22(fvec4) Load 26(color) + 159: 22(fvec4) CompositeConstruct 157 157 157 157 + 160: 22(fvec4) FAdd 158 159 + Store 26(color) 160 + 165: 162 Load 164(shadowSampler2D) + 166: 16(fvec3) Load 18(coords3D) + 167: 6(float) CompositeExtract 166 2 + 168: 6(float) ImageSampleDrefImplicitLod 165 166 167 + 169: 22(fvec4) Load 26(color) + 170: 22(fvec4) CompositeConstruct 168 168 168 168 + 171: 22(fvec4) FAdd 169 170 + Store 26(color) 171 + 172: 162 Load 164(shadowSampler2D) + 173: 16(fvec3) Load 18(coords3D) + 174: 6(float) Load 10(bias) + 175: 6(float) CompositeExtract 173 2 + 176: 6(float) ImageSampleDrefImplicitLod 172 173 175 Bias 174 + 177: 22(fvec4) Load 26(color) + 178: 22(fvec4) CompositeConstruct 176 176 176 176 + 179: 22(fvec4) FAdd 177 178 + Store 26(color) 179 + 180: 143 Load 145(shadowSampler1D) + 181: 22(fvec4) Load 24(coords4D) + 182: 6(float) CompositeExtract 181 2 + 183: 6(float) CompositeExtract 181 3 + 184: 22(fvec4) CompositeInsert 183 181 1 + 185: 6(float) ImageSampleProjDrefImplicitLod 180 184 182 + 186: 22(fvec4) Load 26(color) + 187: 22(fvec4) CompositeConstruct 185 185 185 185 + 188: 22(fvec4) FAdd 186 187 + Store 26(color) 188 + 189: 143 Load 145(shadowSampler1D) + 190: 22(fvec4) Load 24(coords4D) + 191: 6(float) Load 10(bias) + 192: 6(float) CompositeExtract 190 2 + 193: 6(float) CompositeExtract 190 3 + 194: 22(fvec4) CompositeInsert 193 190 1 + 195: 6(float) ImageSampleProjDrefImplicitLod 189 194 192 Bias 191 + 196: 22(fvec4) Load 26(color) + 197: 22(fvec4) CompositeConstruct 195 195 195 195 + 198: 22(fvec4) FAdd 196 197 + Store 26(color) 198 + 199: 162 Load 164(shadowSampler2D) + 200: 22(fvec4) Load 24(coords4D) + 201: 6(float) CompositeExtract 200 2 + 202: 6(float) CompositeExtract 200 3 + 203: 22(fvec4) CompositeInsert 202 200 2 + 204: 6(float) ImageSampleProjDrefImplicitLod 199 203 201 + 205: 22(fvec4) Load 26(color) + 206: 22(fvec4) CompositeConstruct 204 204 204 204 + 207: 22(fvec4) FAdd 205 206 + Store 26(color) 207 + 208: 162 Load 164(shadowSampler2D) + 209: 22(fvec4) Load 24(coords4D) + 210: 6(float) Load 10(bias) + 211: 6(float) CompositeExtract 209 2 + 212: 6(float) CompositeExtract 209 3 + 213: 22(fvec4) CompositeInsert 212 209 2 + 214: 6(float) ImageSampleProjDrefImplicitLod 208 213 211 Bias 210 + 215: 22(fvec4) Load 26(color) + 216: 22(fvec4) CompositeConstruct 214 214 214 214 + 217: 22(fvec4) FAdd 215 216 + Store 26(color) 217 + Store 221(iCoords2D) 224 + Store 226(iLod) 227 + 228: 74 Load 76(texSampler2D) + 229: 219(ivec2) Load 221(iCoords2D) + 230: 218(int) Load 226(iLod) + 231: 73 Image 228 + 232: 22(fvec4) ImageFetch 231 229 Lod 230 + 233: 22(fvec4) Load 26(color) + 234: 22(fvec4) FAdd 233 232 + Store 26(color) 234 + 237: 45(fvec2) Load 47(coords2D) + 238: 45(fvec2) DPdx 237 + Store 236(gradX) 238 + 240: 45(fvec2) Load 47(coords2D) + 241: 45(fvec2) DPdy 240 + Store 239(gradY) 241 + 242: 74 Load 76(texSampler2D) + 243: 45(fvec2) Load 47(coords2D) + 244: 45(fvec2) Load 236(gradX) + 245: 45(fvec2) Load 239(gradY) + 246: 22(fvec4) ImageSampleExplicitLod 242 243 Grad 244 245 + 247: 22(fvec4) Load 26(color) + 248: 22(fvec4) FAdd 247 246 + Store 26(color) 248 + 249: 74 Load 76(texSampler2D) + 250: 45(fvec2) Load 47(coords2D) + 251: 6(float) Load 14(proj) + 252: 6(float) CompositeExtract 250 0 + 253: 6(float) CompositeExtract 250 1 + 254: 16(fvec3) CompositeConstruct 252 253 251 + 255: 45(fvec2) Load 236(gradX) + 256: 45(fvec2) Load 239(gradY) + 257: 22(fvec4) ImageSampleProjExplicitLod 249 254 Grad 255 256 + 258: 22(fvec4) Load 26(color) + 259: 22(fvec4) FAdd 258 257 + Store 26(color) 259 + 260: 74 Load 76(texSampler2D) + 261: 45(fvec2) Load 47(coords2D) + 262: 45(fvec2) Load 236(gradX) + 263: 45(fvec2) Load 239(gradY) + 267: 22(fvec4) ImageSampleExplicitLod 260 261 Grad ConstOffset 262 263 266 + 268: 22(fvec4) Load 26(color) + 269: 22(fvec4) FAdd 268 267 + Store 26(color) 269 + 270: 74 Load 76(texSampler2D) + 271: 16(fvec3) Load 18(coords3D) + 272: 45(fvec2) Load 236(gradX) + 273: 45(fvec2) Load 239(gradY) + 274: 22(fvec4) ImageSampleProjExplicitLod 270 271 Grad ConstOffset 272 273 266 + 275: 22(fvec4) Load 26(color) + 276: 22(fvec4) FAdd 275 274 + Store 26(color) 276 + 277: 162 Load 164(shadowSampler2D) + 278: 45(fvec2) Load 47(coords2D) + 279: 6(float) Load 12(lod) + 280: 6(float) CompositeExtract 278 0 + 281: 6(float) CompositeExtract 278 1 + 282: 16(fvec3) CompositeConstruct 280 281 279 + 283: 45(fvec2) Load 236(gradX) + 284: 45(fvec2) Load 239(gradY) + 285: 6(float) CompositeExtract 282 2 + 286: 6(float) ImageSampleDrefExplicitLod 277 282 285 Grad 283 284 + 287: 22(fvec4) Load 26(color) + 288: 22(fvec4) CompositeConstruct 286 286 286 286 + 289: 22(fvec4) FAdd 287 288 + Store 26(color) 289 + 292: 22(fvec4) Load 26(color) + 295: 22(fvec4) Load 294(u) + 298: 6(float) Load 297(blend) + 299: 6(float) Load 8(blendscale) + 300: 6(float) FMul 298 299 + 301: 22(fvec4) CompositeConstruct 300 300 300 300 + 302: 22(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 292 295 301 + Store 291(gl_FragColor) 302 + 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 new file mode 100755 index 0000000..c361549 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.texture.vert.out @@ -0,0 +1,201 @@ +spv.texture.vert +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 150 + + Capability Shader + Capability Sampled1D + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 39 148 + Source GLSL 140 + Name 4 "main" + Name 8 "lod" + Name 10 "coords1D" + Name 14 "coords3D" + Name 20 "coords4D" + Name 23 "color" + Name 29 "texSampler1D" + Name 39 "coords2D" + Name 56 "texSampler2D" + Name 80 "texSampler3D" + Name 96 "texSamplerCube" + Name 106 "shadowSampler1D" + Name 118 "shadowSampler2D" + Name 148 "gl_Position" + Decorate 29(texSampler1D) DescriptorSet 0 + Decorate 56(texSampler2D) DescriptorSet 0 + Decorate 80(texSampler3D) DescriptorSet 0 + Decorate 96(texSamplerCube) DescriptorSet 0 + Decorate 106(shadowSampler1D) DescriptorSet 0 + Decorate 118(shadowSampler2D) DescriptorSet 0 + Decorate 148(gl_Position) BuiltIn Position + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypePointer Function 6(float) + 9: 6(float) Constant 1077936128 + 11: 6(float) Constant 1071971828 + 12: TypeVector 6(float) 3 + 13: TypePointer Function 12(fvec3) + 15: 6(float) Constant 1076753334 + 16: 6(float) Constant 1079836148 + 17: 12(fvec3) ConstantComposite 11 15 16 + 18: TypeVector 6(float) 4 + 19: TypePointer Function 18(fvec4) + 21: 6(float) Constant 1073741824 + 22: 18(fvec4) ConstantComposite 11 15 16 21 + 24: 6(float) Constant 0 + 25: 18(fvec4) ConstantComposite 24 24 24 24 + 26: TypeImage 6(float) 1D sampled format:Unknown + 27: TypeSampledImage 26 + 28: TypePointer UniformConstant 27 +29(texSampler1D): 28(ptr) Variable UniformConstant + 37: TypeVector 6(float) 2 + 38: TypePointer Input 37(fvec2) + 39(coords2D): 38(ptr) Variable Input + 53: TypeImage 6(float) 2D sampled format:Unknown + 54: TypeSampledImage 53 + 55: TypePointer UniformConstant 54 +56(texSampler2D): 55(ptr) Variable UniformConstant + 77: TypeImage 6(float) 3D sampled format:Unknown + 78: TypeSampledImage 77 + 79: TypePointer UniformConstant 78 +80(texSampler3D): 79(ptr) Variable UniformConstant + 93: TypeImage 6(float) Cube sampled format:Unknown + 94: TypeSampledImage 93 + 95: TypePointer UniformConstant 94 +96(texSamplerCube): 95(ptr) Variable UniformConstant + 103: TypeImage 6(float) 1D depth sampled format:Unknown + 104: TypeSampledImage 103 + 105: TypePointer UniformConstant 104 +106(shadowSampler1D): 105(ptr) Variable UniformConstant + 115: TypeImage 6(float) 2D depth sampled format:Unknown + 116: TypeSampledImage 115 + 117: TypePointer UniformConstant 116 +118(shadowSampler2D): 117(ptr) Variable UniformConstant + 147: TypePointer Output 18(fvec4) +148(gl_Position): 147(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 8(lod): 7(ptr) Variable Function + 10(coords1D): 7(ptr) Variable Function + 14(coords3D): 13(ptr) Variable Function + 20(coords4D): 19(ptr) Variable Function + 23(color): 19(ptr) Variable Function + Store 8(lod) 9 + Store 10(coords1D) 11 + Store 14(coords3D) 17 + Store 20(coords4D) 22 + Store 23(color) 25 + 30: 27 Load 29(texSampler1D) + 31: 6(float) Load 10(coords1D) + 32: 6(float) Load 8(lod) + 33: 18(fvec4) ImageSampleExplicitLod 30 31 Lod 32 + 34: 18(fvec4) Load 23(color) + 35: 18(fvec4) FAdd 34 33 + Store 23(color) 35 + 36: 27 Load 29(texSampler1D) + 40: 37(fvec2) Load 39(coords2D) + 41: 6(float) Load 8(lod) + 42: 18(fvec4) ImageSampleProjExplicitLod 36 40 Lod 41 + 43: 18(fvec4) Load 23(color) + 44: 18(fvec4) FAdd 43 42 + Store 23(color) 44 + 45: 27 Load 29(texSampler1D) + 46: 18(fvec4) Load 20(coords4D) + 47: 6(float) Load 8(lod) + 48: 6(float) CompositeExtract 46 3 + 49: 18(fvec4) CompositeInsert 48 46 1 + 50: 18(fvec4) ImageSampleProjExplicitLod 45 49 Lod 47 + 51: 18(fvec4) Load 23(color) + 52: 18(fvec4) FAdd 51 50 + Store 23(color) 52 + 57: 54 Load 56(texSampler2D) + 58: 37(fvec2) Load 39(coords2D) + 59: 6(float) Load 8(lod) + 60: 18(fvec4) ImageSampleExplicitLod 57 58 Lod 59 + 61: 18(fvec4) Load 23(color) + 62: 18(fvec4) FAdd 61 60 + Store 23(color) 62 + 63: 54 Load 56(texSampler2D) + 64: 12(fvec3) Load 14(coords3D) + 65: 6(float) Load 8(lod) + 66: 18(fvec4) ImageSampleProjExplicitLod 63 64 Lod 65 + 67: 18(fvec4) Load 23(color) + 68: 18(fvec4) FAdd 67 66 + Store 23(color) 68 + 69: 54 Load 56(texSampler2D) + 70: 18(fvec4) Load 20(coords4D) + 71: 6(float) Load 8(lod) + 72: 6(float) CompositeExtract 70 3 + 73: 18(fvec4) CompositeInsert 72 70 2 + 74: 18(fvec4) ImageSampleProjExplicitLod 69 73 Lod 71 + 75: 18(fvec4) Load 23(color) + 76: 18(fvec4) FAdd 75 74 + Store 23(color) 76 + 81: 78 Load 80(texSampler3D) + 82: 12(fvec3) Load 14(coords3D) + 83: 6(float) Load 8(lod) + 84: 18(fvec4) ImageSampleExplicitLod 81 82 Lod 83 + 85: 18(fvec4) Load 23(color) + 86: 18(fvec4) FAdd 85 84 + Store 23(color) 86 + 87: 78 Load 80(texSampler3D) + 88: 18(fvec4) Load 20(coords4D) + 89: 6(float) Load 8(lod) + 90: 18(fvec4) ImageSampleProjExplicitLod 87 88 Lod 89 + 91: 18(fvec4) Load 23(color) + 92: 18(fvec4) FAdd 91 90 + Store 23(color) 92 + 97: 94 Load 96(texSamplerCube) + 98: 12(fvec3) Load 14(coords3D) + 99: 6(float) Load 8(lod) + 100: 18(fvec4) ImageSampleExplicitLod 97 98 Lod 99 + 101: 18(fvec4) Load 23(color) + 102: 18(fvec4) FAdd 101 100 + Store 23(color) 102 + 107: 104 Load 106(shadowSampler1D) + 108: 12(fvec3) Load 14(coords3D) + 109: 6(float) Load 8(lod) + 110: 6(float) CompositeExtract 108 2 + 111: 6(float) ImageSampleDrefExplicitLod 107 108 110 Lod 109 + 112: 18(fvec4) Load 23(color) + 113: 18(fvec4) CompositeConstruct 111 111 111 111 + 114: 18(fvec4) FAdd 112 113 + Store 23(color) 114 + 119: 116 Load 118(shadowSampler2D) + 120: 12(fvec3) Load 14(coords3D) + 121: 6(float) Load 8(lod) + 122: 6(float) CompositeExtract 120 2 + 123: 6(float) ImageSampleDrefExplicitLod 119 120 122 Lod 121 + 124: 18(fvec4) Load 23(color) + 125: 18(fvec4) CompositeConstruct 123 123 123 123 + 126: 18(fvec4) FAdd 124 125 + Store 23(color) 126 + 127: 104 Load 106(shadowSampler1D) + 128: 18(fvec4) Load 20(coords4D) + 129: 6(float) Load 8(lod) + 130: 6(float) CompositeExtract 128 2 + 131: 6(float) CompositeExtract 128 3 + 132: 18(fvec4) CompositeInsert 131 128 1 + 133: 6(float) ImageSampleProjDrefExplicitLod 127 132 130 Lod 129 + 134: 18(fvec4) Load 23(color) + 135: 18(fvec4) CompositeConstruct 133 133 133 133 + 136: 18(fvec4) FAdd 134 135 + Store 23(color) 136 + 137: 116 Load 118(shadowSampler2D) + 138: 18(fvec4) Load 20(coords4D) + 139: 6(float) Load 8(lod) + 140: 6(float) CompositeExtract 138 2 + 141: 6(float) CompositeExtract 138 3 + 142: 18(fvec4) CompositeInsert 141 138 2 + 143: 6(float) ImageSampleProjDrefExplicitLod 137 142 140 Lod 139 + 144: 18(fvec4) Load 23(color) + 145: 18(fvec4) CompositeConstruct 143 143 143 143 + 146: 18(fvec4) FAdd 144 145 + Store 23(color) 146 + 149: 18(fvec4) Load 23(color) + Store 148(gl_Position) 149 + 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 new file mode 100755 index 0000000..9a2d8e3 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.types.frag.out @@ -0,0 +1,336 @@ +spv.types.frag +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 260 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 91 93 100 102 109 111 118 120 127 129 136 138 145 147 154 156 160 + ExecutionMode 4 OriginUpperLeft + Source GLSL 140 + Name 4 "main" + Name 8 "b" + Name 10 "u_b" + Name 12 "i_b" + Name 17 "b2" + Name 19 "u_b2" + Name 22 "i_b2" + Name 35 "b3" + Name 37 "u_b3" + Name 40 "i_b3" + Name 59 "b4" + Name 61 "u_b4" + Name 64 "i_b4" + Name 89 "i" + Name 91 "u_i" + Name 93 "i_i" + Name 98 "i2" + Name 100 "u_i2" + Name 102 "i_i2" + Name 107 "i3" + Name 109 "u_i3" + Name 111 "i_i3" + Name 116 "i4" + Name 118 "u_i4" + Name 120 "i_i4" + Name 125 "f" + Name 127 "u_f" + Name 129 "i_f" + Name 134 "f2" + Name 136 "u_f2" + Name 138 "i_f2" + Name 143 "f3" + Name 145 "u_f3" + Name 147 "i_f3" + Name 152 "f4" + Name 154 "u_f4" + Name 156 "i_f4" + Name 160 "gl_FragColor" + Decorate 91(u_i) Flat + Decorate 93(i_i) Flat + Decorate 100(u_i2) Flat + Decorate 102(i_i2) Flat + Decorate 109(u_i3) Flat + Decorate 111(i_i3) Flat + Decorate 118(u_i4) Flat + Decorate 120(i_i4) Flat + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeBool + 7: TypePointer Function 6(bool) + 9: TypePointer Private 6(bool) + 10(u_b): 9(ptr) Variable Private + 12(i_b): 9(ptr) Variable Private + 15: TypeVector 6(bool) 2 + 16: TypePointer Function 15(bvec2) + 18: TypePointer Private 15(bvec2) + 19(u_b2): 18(ptr) Variable Private + 22(i_b2): 18(ptr) Variable Private + 33: TypeVector 6(bool) 3 + 34: TypePointer Function 33(bvec3) + 36: TypePointer Private 33(bvec3) + 37(u_b3): 36(ptr) Variable Private + 40(i_b3): 36(ptr) Variable Private + 57: TypeVector 6(bool) 4 + 58: TypePointer Function 57(bvec4) + 60: TypePointer Private 57(bvec4) + 61(u_b4): 60(ptr) Variable Private + 64(i_b4): 60(ptr) Variable Private + 87: TypeInt 32 1 + 88: TypePointer Function 87(int) + 90: TypePointer Input 87(int) + 91(u_i): 90(ptr) Variable Input + 93(i_i): 90(ptr) Variable Input + 96: TypeVector 87(int) 2 + 97: TypePointer Function 96(ivec2) + 99: TypePointer Input 96(ivec2) + 100(u_i2): 99(ptr) Variable Input + 102(i_i2): 99(ptr) Variable Input + 105: TypeVector 87(int) 3 + 106: TypePointer Function 105(ivec3) + 108: TypePointer Input 105(ivec3) + 109(u_i3): 108(ptr) Variable Input + 111(i_i3): 108(ptr) Variable Input + 114: TypeVector 87(int) 4 + 115: TypePointer Function 114(ivec4) + 117: TypePointer Input 114(ivec4) + 118(u_i4): 117(ptr) Variable Input + 120(i_i4): 117(ptr) Variable Input + 123: TypeFloat 32 + 124: TypePointer Function 123(float) + 126: TypePointer Input 123(float) + 127(u_f): 126(ptr) Variable Input + 129(i_f): 126(ptr) Variable Input + 132: TypeVector 123(float) 2 + 133: TypePointer Function 132(fvec2) + 135: TypePointer Input 132(fvec2) + 136(u_f2): 135(ptr) Variable Input + 138(i_f2): 135(ptr) Variable Input + 141: TypeVector 123(float) 3 + 142: TypePointer Function 141(fvec3) + 144: TypePointer Input 141(fvec3) + 145(u_f3): 144(ptr) Variable Input + 147(i_f3): 144(ptr) Variable Input + 150: TypeVector 123(float) 4 + 151: TypePointer Function 150(fvec4) + 153: TypePointer Input 150(fvec4) + 154(u_f4): 153(ptr) Variable Input + 156(i_f4): 153(ptr) Variable Input + 159: TypePointer Output 150(fvec4) +160(gl_FragColor): 159(ptr) Variable Output + 193: TypeInt 32 0 + 194: 193(int) Constant 0 + 198: 193(int) Constant 1 + 208: 193(int) Constant 2 + 221: 193(int) Constant 3 + 257: 123(float) Constant 1065353216 + 258: 150(fvec4) ConstantComposite 257 257 257 257 + 4(main): 2 Function None 3 + 5: Label + 8(b): 7(ptr) Variable Function + 17(b2): 16(ptr) Variable Function + 35(b3): 34(ptr) Variable Function + 59(b4): 58(ptr) Variable Function + 89(i): 88(ptr) Variable Function + 98(i2): 97(ptr) Variable Function + 107(i3): 106(ptr) Variable Function + 116(i4): 115(ptr) Variable Function + 125(f): 124(ptr) Variable Function + 134(f2): 133(ptr) Variable Function + 143(f3): 142(ptr) Variable Function + 152(f4): 151(ptr) Variable Function + 161: 151(ptr) Variable Function + 11: 6(bool) Load 10(u_b) + 13: 6(bool) Load 12(i_b) + 14: 6(bool) LogicalAnd 11 13 + Store 8(b) 14 + 20: 15(bvec2) Load 19(u_b2) + 21: 6(bool) CompositeExtract 20 0 + 23: 15(bvec2) Load 22(i_b2) + 24: 6(bool) CompositeExtract 23 0 + 25: 6(bool) LogicalAnd 21 24 + 26: 15(bvec2) Load 19(u_b2) + 27: 6(bool) CompositeExtract 26 1 + 28: 6(bool) LogicalAnd 25 27 + 29: 15(bvec2) Load 22(i_b2) + 30: 6(bool) CompositeExtract 29 1 + 31: 6(bool) LogicalAnd 28 30 + 32: 15(bvec2) CompositeConstruct 31 31 + Store 17(b2) 32 + 38: 33(bvec3) Load 37(u_b3) + 39: 6(bool) CompositeExtract 38 0 + 41: 33(bvec3) Load 40(i_b3) + 42: 6(bool) CompositeExtract 41 0 + 43: 6(bool) LogicalAnd 39 42 + 44: 33(bvec3) Load 37(u_b3) + 45: 6(bool) CompositeExtract 44 1 + 46: 6(bool) LogicalAnd 43 45 + 47: 33(bvec3) Load 40(i_b3) + 48: 6(bool) CompositeExtract 47 1 + 49: 6(bool) LogicalAnd 46 48 + 50: 33(bvec3) Load 37(u_b3) + 51: 6(bool) CompositeExtract 50 2 + 52: 6(bool) LogicalAnd 49 51 + 53: 33(bvec3) Load 40(i_b3) + 54: 6(bool) CompositeExtract 53 2 + 55: 6(bool) LogicalAnd 52 54 + 56: 33(bvec3) CompositeConstruct 55 55 55 + Store 35(b3) 56 + 62: 57(bvec4) Load 61(u_b4) + 63: 6(bool) CompositeExtract 62 0 + 65: 57(bvec4) Load 64(i_b4) + 66: 6(bool) CompositeExtract 65 0 + 67: 6(bool) LogicalAnd 63 66 + 68: 57(bvec4) Load 61(u_b4) + 69: 6(bool) CompositeExtract 68 1 + 70: 6(bool) LogicalAnd 67 69 + 71: 57(bvec4) Load 64(i_b4) + 72: 6(bool) CompositeExtract 71 1 + 73: 6(bool) LogicalAnd 70 72 + 74: 57(bvec4) Load 61(u_b4) + 75: 6(bool) CompositeExtract 74 2 + 76: 6(bool) LogicalAnd 73 75 + 77: 57(bvec4) Load 64(i_b4) + 78: 6(bool) CompositeExtract 77 2 + 79: 6(bool) LogicalAnd 76 78 + 80: 57(bvec4) Load 61(u_b4) + 81: 6(bool) CompositeExtract 80 3 + 82: 6(bool) LogicalAnd 79 81 + 83: 57(bvec4) Load 64(i_b4) + 84: 6(bool) CompositeExtract 83 3 + 85: 6(bool) LogicalAnd 82 84 + 86: 57(bvec4) CompositeConstruct 85 85 85 85 + Store 59(b4) 86 + 92: 87(int) Load 91(u_i) + 94: 87(int) Load 93(i_i) + 95: 87(int) IAdd 92 94 + Store 89(i) 95 + 101: 96(ivec2) Load 100(u_i2) + 103: 96(ivec2) Load 102(i_i2) + 104: 96(ivec2) IAdd 101 103 + Store 98(i2) 104 + 110: 105(ivec3) Load 109(u_i3) + 112: 105(ivec3) Load 111(i_i3) + 113: 105(ivec3) IAdd 110 112 + Store 107(i3) 113 + 119: 114(ivec4) Load 118(u_i4) + 121: 114(ivec4) Load 120(i_i4) + 122: 114(ivec4) IAdd 119 121 + Store 116(i4) 122 + 128: 123(float) Load 127(u_f) + 130: 123(float) Load 129(i_f) + 131: 123(float) FAdd 128 130 + Store 125(f) 131 + 137: 132(fvec2) Load 136(u_f2) + 139: 132(fvec2) Load 138(i_f2) + 140: 132(fvec2) FAdd 137 139 + Store 134(f2) 140 + 146: 141(fvec3) Load 145(u_f3) + 148: 141(fvec3) Load 147(i_f3) + 149: 141(fvec3) FAdd 146 148 + Store 143(f3) 149 + 155: 150(fvec4) Load 154(u_f4) + 157: 150(fvec4) Load 156(i_f4) + 158: 150(fvec4) FAdd 155 157 + Store 152(f4) 158 + 162: 6(bool) Load 8(b) + 163: 15(bvec2) Load 17(b2) + 164: 6(bool) CompositeExtract 163 0 + 165: 6(bool) LogicalOr 162 164 + 166: 15(bvec2) Load 17(b2) + 167: 6(bool) CompositeExtract 166 1 + 168: 6(bool) LogicalOr 165 167 + 169: 33(bvec3) Load 35(b3) + 170: 6(bool) CompositeExtract 169 0 + 171: 6(bool) LogicalOr 168 170 + 172: 33(bvec3) Load 35(b3) + 173: 6(bool) CompositeExtract 172 1 + 174: 6(bool) LogicalOr 171 173 + 175: 33(bvec3) Load 35(b3) + 176: 6(bool) CompositeExtract 175 2 + 177: 6(bool) LogicalOr 174 176 + 178: 57(bvec4) Load 59(b4) + 179: 6(bool) CompositeExtract 178 0 + 180: 6(bool) LogicalOr 177 179 + 181: 57(bvec4) Load 59(b4) + 182: 6(bool) CompositeExtract 181 1 + 183: 6(bool) LogicalOr 180 182 + 184: 57(bvec4) Load 59(b4) + 185: 6(bool) CompositeExtract 184 2 + 186: 6(bool) LogicalOr 183 185 + 187: 57(bvec4) Load 59(b4) + 188: 6(bool) CompositeExtract 187 3 + 189: 6(bool) LogicalOr 186 188 + SelectionMerge 191 None + BranchConditional 189 190 256 + 190: Label + 192: 87(int) Load 89(i) + 195: 88(ptr) AccessChain 98(i2) 194 + 196: 87(int) Load 195 + 197: 87(int) IAdd 192 196 + 199: 88(ptr) AccessChain 98(i2) 198 + 200: 87(int) Load 199 + 201: 87(int) IAdd 197 200 + 202: 88(ptr) AccessChain 107(i3) 194 + 203: 87(int) Load 202 + 204: 87(int) IAdd 201 203 + 205: 88(ptr) AccessChain 107(i3) 198 + 206: 87(int) Load 205 + 207: 87(int) IAdd 204 206 + 209: 88(ptr) AccessChain 107(i3) 208 + 210: 87(int) Load 209 + 211: 87(int) IAdd 207 210 + 212: 88(ptr) AccessChain 116(i4) 194 + 213: 87(int) Load 212 + 214: 87(int) IAdd 211 213 + 215: 88(ptr) AccessChain 116(i4) 198 + 216: 87(int) Load 215 + 217: 87(int) IAdd 214 216 + 218: 88(ptr) AccessChain 116(i4) 208 + 219: 87(int) Load 218 + 220: 87(int) IAdd 217 219 + 222: 88(ptr) AccessChain 116(i4) 221 + 223: 87(int) Load 222 + 224: 87(int) IAdd 220 223 + 225: 123(float) ConvertSToF 224 + 226: 123(float) Load 125(f) + 227: 123(float) FAdd 225 226 + 228: 124(ptr) AccessChain 134(f2) 194 + 229: 123(float) Load 228 + 230: 123(float) FAdd 227 229 + 231: 124(ptr) AccessChain 134(f2) 198 + 232: 123(float) Load 231 + 233: 123(float) FAdd 230 232 + 234: 124(ptr) AccessChain 143(f3) 194 + 235: 123(float) Load 234 + 236: 123(float) FAdd 233 235 + 237: 124(ptr) AccessChain 143(f3) 198 + 238: 123(float) Load 237 + 239: 123(float) FAdd 236 238 + 240: 124(ptr) AccessChain 143(f3) 208 + 241: 123(float) Load 240 + 242: 123(float) FAdd 239 241 + 243: 124(ptr) AccessChain 152(f4) 194 + 244: 123(float) Load 243 + 245: 123(float) FAdd 242 244 + 246: 124(ptr) AccessChain 152(f4) 198 + 247: 123(float) Load 246 + 248: 123(float) FAdd 245 247 + 249: 124(ptr) AccessChain 152(f4) 208 + 250: 123(float) Load 249 + 251: 123(float) FAdd 248 250 + 252: 124(ptr) AccessChain 152(f4) 221 + 253: 123(float) Load 252 + 254: 123(float) FAdd 251 253 + 255: 150(fvec4) CompositeConstruct 254 254 254 254 + Store 161 255 + Branch 191 + 256: Label + Store 161 258 + Branch 191 + 191: Label + 259: 150(fvec4) Load 161 + Store 160(gl_FragColor) 259 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.uint.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.uint.frag.out new file mode 100755 index 0000000..e9ba0ce --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.uint.frag.out @@ -0,0 +1,443 @@ +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 +// Id's are bound by 213 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 15 68 77 206 208 210 + ExecutionMode 4 OriginUpperLeft + Source ESSL 310 + Name 4 "main" + Name 8 "count" + Name 12 "u" + Name 15 "t" + Name 55 "shiftedii" + Name 57 "shiftedui" + Name 59 "shiftediu" + Name 60 "shifteduu" + Name 68 "c" + Name 72 "usampler" + Name 77 "tc" + Name 111 "af" + Name 115 "ab" + Name 118 "ai" + Name 152 "mask1" + Name 154 "mask2" + Name 156 "mask3" + Name 160 "mask4" + Name 206 "f" + Name 208 "v" + Name 210 "i" + Name 212 "b" + Decorate 8(count) RelaxedPrecision + Decorate 12(u) RelaxedPrecision + Decorate 15(t) RelaxedPrecision + Decorate 15(t) Flat + Decorate 19 RelaxedPrecision + Decorate 21 RelaxedPrecision + Decorate 27 RelaxedPrecision + Decorate 28 RelaxedPrecision + Decorate 32 RelaxedPrecision + Decorate 33 RelaxedPrecision + Decorate 38 RelaxedPrecision + Decorate 39 RelaxedPrecision + Decorate 43 RelaxedPrecision + Decorate 44 RelaxedPrecision + Decorate 48 RelaxedPrecision + Decorate 49 RelaxedPrecision + Decorate 53 RelaxedPrecision + Decorate 54 RelaxedPrecision + Decorate 55(shiftedii) RelaxedPrecision + Decorate 57(shiftedui) RelaxedPrecision + Decorate 59(shiftediu) RelaxedPrecision + Decorate 60(shifteduu) RelaxedPrecision + Decorate 61 RelaxedPrecision + Decorate 62 RelaxedPrecision + Decorate 68(c) RelaxedPrecision + Decorate 72(usampler) RelaxedPrecision + Decorate 72(usampler) DescriptorSet 0 + Decorate 73 RelaxedPrecision + Decorate 77(tc) RelaxedPrecision + Decorate 78 RelaxedPrecision + Decorate 79 RelaxedPrecision + Decorate 80 RelaxedPrecision + Decorate 81 RelaxedPrecision + Decorate 85 RelaxedPrecision + Decorate 86 RelaxedPrecision + Decorate 88 RelaxedPrecision + Decorate 89 RelaxedPrecision + Decorate 90 RelaxedPrecision + Decorate 91 RelaxedPrecision + Decorate 92 RelaxedPrecision + Decorate 97 RelaxedPrecision + Decorate 98 RelaxedPrecision + Decorate 101 RelaxedPrecision + Decorate 102 RelaxedPrecision + Decorate 105 RelaxedPrecision + Decorate 111(af) RelaxedPrecision + Decorate 112 RelaxedPrecision + Decorate 113 RelaxedPrecision + Decorate 116 RelaxedPrecision + Decorate 118(ai) RelaxedPrecision + Decorate 119 RelaxedPrecision + Decorate 120 RelaxedPrecision + Decorate 121 RelaxedPrecision + Decorate 122 RelaxedPrecision + Decorate 124 RelaxedPrecision + Decorate 125 RelaxedPrecision + Decorate 126 RelaxedPrecision + Decorate 127 RelaxedPrecision + Decorate 128 RelaxedPrecision + Decorate 129 RelaxedPrecision + Decorate 130 RelaxedPrecision + Decorate 131 RelaxedPrecision + Decorate 135 RelaxedPrecision + Decorate 136 RelaxedPrecision + Decorate 140 RelaxedPrecision + Decorate 141 RelaxedPrecision + Decorate 145 RelaxedPrecision + Decorate 146 RelaxedPrecision + Decorate 150 RelaxedPrecision + Decorate 151 RelaxedPrecision + Decorate 152(mask1) RelaxedPrecision + Decorate 154(mask2) RelaxedPrecision + Decorate 156(mask3) RelaxedPrecision + Decorate 157 RelaxedPrecision + Decorate 159 RelaxedPrecision + Decorate 160(mask4) RelaxedPrecision + Decorate 162 RelaxedPrecision + Decorate 163 RelaxedPrecision + Decorate 167 RelaxedPrecision + Decorate 168 RelaxedPrecision + Decorate 169 RelaxedPrecision + Decorate 170 RelaxedPrecision + Decorate 171 RelaxedPrecision + Decorate 175 RelaxedPrecision + Decorate 176 RelaxedPrecision + Decorate 177 RelaxedPrecision + Decorate 178 RelaxedPrecision + Decorate 179 RelaxedPrecision + Decorate 180 RelaxedPrecision + Decorate 184 RelaxedPrecision + Decorate 185 RelaxedPrecision + Decorate 186 RelaxedPrecision + Decorate 187 RelaxedPrecision + Decorate 188 RelaxedPrecision + Decorate 192 RelaxedPrecision + Decorate 193 RelaxedPrecision + Decorate 194 RelaxedPrecision + Decorate 195 RelaxedPrecision + Decorate 196 RelaxedPrecision + Decorate 197 RelaxedPrecision + Decorate 198 RelaxedPrecision + Decorate 202 RelaxedPrecision + Decorate 203 RelaxedPrecision + Decorate 206(f) RelaxedPrecision + Decorate 208(v) RelaxedPrecision + Decorate 208(v) Flat + Decorate 210(i) RelaxedPrecision + Decorate 210(i) Flat + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypePointer Function 6(int) + 9: 6(int) Constant 1 + 10: TypeInt 32 0 + 11: TypePointer Function 10(int) + 13: TypeVector 10(int) 2 + 14: TypePointer Input 13(ivec2) + 15(t): 14(ptr) Variable Input + 16: 10(int) Constant 1 + 17: TypePointer Input 10(int) + 20: 10(int) Constant 3 + 22: TypeBool + 23: 22(bool) ConstantTrue + 26: 6(int) Constant 2 + 31: 6(int) Constant 3 + 34: 22(bool) ConstantFalse + 37: 6(int) Constant 5 + 42: 6(int) Constant 7 + 47: 6(int) Constant 11 + 52: 6(int) Constant 13 + 56: 6(int) Constant 4294967295 + 58: 10(int) Constant 4194303 + 66: TypeVector 10(int) 4 + 67: TypePointer Output 66(ivec4) + 68(c): 67(ptr) Variable Output + 69: TypeImage 10(int) 2D sampled format:Unknown + 70: TypeSampledImage 69 + 71: TypePointer UniformConstant 70 + 72(usampler): 71(ptr) Variable UniformConstant + 74: TypeFloat 32 + 75: TypeVector 74(float) 2 + 76: TypePointer Input 75(fvec2) + 77(tc): 76(ptr) Variable Input + 87: 74(float) Constant 1065353216 + 99: 74(float) Constant 1073741824 + 100: 75(fvec2) ConstantComposite 99 99 + 103: 10(int) Constant 0 + 106: 10(int) Constant 4 + 110: TypePointer Function 74(float) + 114: TypePointer Function 22(bool) + 134: 6(int) Constant 17 + 139: 6(int) Constant 19 + 144: 6(int) Constant 23 + 149: 6(int) Constant 27 + 153: 10(int) Constant 161 + 155: 10(int) Constant 2576 + 158: 6(int) Constant 4 + 161: 10(int) Constant 2737 + 199: 10(int) Constant 4294967295 + 200: TypePointer Output 10(int) + 205: TypePointer Input 74(float) + 206(f): 205(ptr) Variable Input + 207: TypePointer Input 66(ivec4) + 208(v): 207(ptr) Variable Input + 209: TypePointer Input 6(int) + 210(i): 209(ptr) Variable Input + 211: TypePointer Private 22(bool) + 212(b): 211(ptr) Variable Private + 4(main): 2 Function None 3 + 5: Label + 8(count): 7(ptr) Variable Function + 12(u): 11(ptr) Variable Function + 55(shiftedii): 7(ptr) Variable Function + 57(shiftedui): 11(ptr) Variable Function + 59(shiftediu): 7(ptr) Variable Function + 60(shifteduu): 11(ptr) Variable Function + 111(af): 110(ptr) Variable Function + 115(ab): 114(ptr) Variable Function + 118(ai): 7(ptr) Variable Function + 152(mask1): 11(ptr) Variable Function + 154(mask2): 11(ptr) Variable Function + 156(mask3): 11(ptr) Variable Function + 160(mask4): 11(ptr) Variable Function + Store 8(count) 9 + 18: 17(ptr) AccessChain 15(t) 16 + 19: 10(int) Load 18 + 21: 10(int) IAdd 19 20 + Store 12(u) 21 + SelectionMerge 25 None + BranchConditional 23 24 25 + 24: Label + 27: 6(int) Load 8(count) + 28: 6(int) IMul 27 26 + Store 8(count) 28 + Branch 25 + 25: Label + SelectionMerge 30 None + BranchConditional 23 29 30 + 29: Label + 32: 6(int) Load 8(count) + 33: 6(int) IMul 32 31 + Store 8(count) 33 + Branch 30 + 30: Label + SelectionMerge 36 None + BranchConditional 34 35 36 + 35: Label + 38: 6(int) Load 8(count) + 39: 6(int) IMul 38 37 + Store 8(count) 39 + Branch 36 + 36: Label + SelectionMerge 41 None + BranchConditional 23 40 41 + 40: Label + 43: 6(int) Load 8(count) + 44: 6(int) IMul 43 42 + Store 8(count) 44 + Branch 41 + 41: Label + SelectionMerge 46 None + BranchConditional 23 45 46 + 45: Label + 48: 6(int) Load 8(count) + 49: 6(int) IMul 48 47 + Store 8(count) 49 + Branch 46 + 46: Label + SelectionMerge 51 None + BranchConditional 34 50 51 + 50: Label + 53: 6(int) Load 8(count) + 54: 6(int) IMul 53 52 + Store 8(count) 54 + Branch 51 + 51: Label + Store 55(shiftedii) 56 + Store 57(shiftedui) 58 + Store 59(shiftediu) 56 + Store 60(shifteduu) 58 + 61: 6(int) Load 55(shiftedii) + 62: 6(int) Load 59(shiftediu) + 63: 22(bool) IEqual 61 62 + SelectionMerge 65 None + BranchConditional 63 64 65 + 64: Label + 73: 70 Load 72(usampler) + 78: 75(fvec2) Load 77(tc) + 79: 66(ivec4) ImageSampleImplicitLod 73 78 + Store 68(c) 79 + Branch 65 + 65: Label + 80: 10(int) Load 57(shiftedui) + 81: 10(int) Load 60(shifteduu) + 82: 22(bool) IEqual 80 81 + SelectionMerge 84 None + BranchConditional 82 83 84 + 83: Label + 85: 70 Load 72(usampler) + 86: 75(fvec2) Load 77(tc) + 88: 75(fvec2) CompositeConstruct 87 87 + 89: 75(fvec2) FAdd 86 88 + 90: 66(ivec4) ImageSampleImplicitLod 85 89 + Store 68(c) 90 + Branch 84 + 84: Label + 91: 6(int) Load 55(shiftedii) + 92: 10(int) Load 57(shiftedui) + 93: 6(int) Bitcast 92 + 94: 22(bool) IEqual 91 93 + SelectionMerge 96 None + BranchConditional 94 95 96 + 95: Label + 97: 70 Load 72(usampler) + 98: 75(fvec2) Load 77(tc) + 101: 75(fvec2) FSub 98 100 + 102: 66(ivec4) ImageSampleImplicitLod 97 101 + Store 68(c) 102 + Branch 96 + 96: Label + 104: 17(ptr) AccessChain 15(t) 103 + 105: 10(int) Load 104 + 107: 22(bool) UGreaterThan 105 106 + SelectionMerge 109 None + BranchConditional 107 108 109 + 108: Label + 112: 10(int) Load 12(u) + 113: 74(float) ConvertUToF 112 + Store 111(af) 113 + 116: 10(int) Load 12(u) + 117: 22(bool) INotEqual 116 103 + Store 115(ab) 117 + 119: 10(int) Load 12(u) + 120: 6(int) Bitcast 119 + Store 118(ai) 120 + 121: 74(float) Load 111(af) + 122: 10(int) ConvertFToU 121 + 123: 22(bool) Load 115(ab) + 124: 10(int) Select 123 16 103 + 125: 6(int) Load 118(ai) + 126: 10(int) Bitcast 125 + 127: 6(int) Load 8(count) + 128: 10(int) Bitcast 127 + 129: 66(ivec4) CompositeConstruct 122 124 126 128 + 130: 66(ivec4) Load 68(c) + 131: 66(ivec4) IAdd 130 129 + Store 68(c) 131 + Branch 109 + 109: Label + SelectionMerge 133 None + BranchConditional 23 132 133 + 132: Label + 135: 6(int) Load 8(count) + 136: 6(int) IMul 135 134 + Store 8(count) 136 + Branch 133 + 133: Label + SelectionMerge 138 None + BranchConditional 34 137 138 + 137: Label + 140: 6(int) Load 8(count) + 141: 6(int) IMul 140 139 + Store 8(count) 141 + Branch 138 + 138: Label + SelectionMerge 143 None + BranchConditional 23 142 143 + 142: Label + 145: 6(int) Load 8(count) + 146: 6(int) IMul 145 144 + Store 8(count) 146 + Branch 143 + 143: Label + SelectionMerge 148 None + BranchConditional 23 147 148 + 147: Label + 150: 6(int) Load 8(count) + 151: 6(int) IMul 150 149 + Store 8(count) 151 + Branch 148 + 148: Label + Store 152(mask1) 153 + Store 154(mask2) 155 + 157: 10(int) Load 152(mask1) + 159: 10(int) ShiftLeftLogical 157 158 + Store 156(mask3) 159 + Store 160(mask4) 161 + 162: 10(int) Load 156(mask3) + 163: 10(int) Load 154(mask2) + 164: 22(bool) IEqual 162 163 + SelectionMerge 166 None + BranchConditional 164 165 166 + 165: Label + 167: 6(int) Load 8(count) + 168: 6(int) IMul 167 26 + Store 8(count) 168 + Branch 166 + 166: Label + 169: 10(int) Load 156(mask3) + 170: 10(int) Load 152(mask1) + 171: 10(int) BitwiseAnd 169 170 + 172: 22(bool) INotEqual 171 103 + SelectionMerge 174 None + BranchConditional 172 173 174 + 173: Label + 175: 6(int) Load 8(count) + 176: 6(int) IMul 175 31 + Store 8(count) 176 + Branch 174 + 174: Label + 177: 10(int) Load 152(mask1) + 178: 10(int) Load 156(mask3) + 179: 10(int) BitwiseOr 177 178 + 180: 10(int) Load 160(mask4) + 181: 22(bool) IEqual 179 180 + SelectionMerge 183 None + BranchConditional 181 182 183 + 182: Label + 184: 6(int) Load 8(count) + 185: 6(int) IMul 184 37 + Store 8(count) 185 + Branch 183 + 183: Label + 186: 10(int) Load 152(mask1) + 187: 10(int) Load 160(mask4) + 188: 10(int) BitwiseXor 186 187 + 189: 22(bool) IEqual 188 155 + SelectionMerge 191 None + BranchConditional 189 190 191 + 190: Label + 192: 6(int) Load 8(count) + 193: 6(int) IMul 192 42 + Store 8(count) 193 + Branch 191 + 191: Label + 194: 6(int) Load 8(count) + 195: 10(int) Bitcast 194 + 196: 66(ivec4) CompositeConstruct 195 195 195 195 + 197: 66(ivec4) Load 68(c) + 198: 66(ivec4) IAdd 197 196 + Store 68(c) 198 + 201: 200(ptr) AccessChain 68(c) 103 + 202: 10(int) Load 201 + 203: 10(int) IAdd 202 199 + 204: 200(ptr) AccessChain 68(c) 103 + Store 204 203 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.uniformArray.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.uniformArray.frag.out new file mode 100644 index 0000000..447ad4f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.uniformArray.frag.out @@ -0,0 +1,76 @@ +spv.uniformArray.frag +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 53 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 14 25 35 47 + ExecutionMode 4 OriginUpperLeft + Source GLSL 140 + Name 4 "main" + Name 9 "texColor" + Name 14 "color" + Name 25 "inColor" + Name 35 "alpha" + Name 47 "gl_FragColor" + Name 52 "texSampler2D" + Decorate 52(texSampler2D) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 10: TypeInt 32 0 + 11: 10(int) Constant 6 + 12: TypeArray 7(fvec4) 11 + 13: TypePointer Input 12 + 14(color): 13(ptr) Variable Input + 15: TypeInt 32 1 + 16: 15(int) Constant 1 + 17: TypePointer Input 7(fvec4) + 23: TypeVector 6(float) 3 + 24: TypePointer Input 23(fvec3) + 25(inColor): 24(ptr) Variable Input + 32: 10(int) Constant 16 + 33: TypeArray 6(float) 32 + 34: TypePointer Input 33 + 35(alpha): 34(ptr) Variable Input + 36: 15(int) Constant 12 + 37: TypePointer Input 6(float) + 40: 10(int) Constant 3 + 41: TypePointer Function 6(float) + 46: TypePointer Output 7(fvec4) +47(gl_FragColor): 46(ptr) Variable Output + 49: TypeImage 6(float) 2D sampled format:Unknown + 50: TypeSampledImage 49 + 51: TypePointer UniformConstant 50 +52(texSampler2D): 51(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label + 9(texColor): 8(ptr) Variable Function + 18: 17(ptr) AccessChain 14(color) 16 + 19: 7(fvec4) Load 18 + 20: 17(ptr) AccessChain 14(color) 16 + 21: 7(fvec4) Load 20 + 22: 7(fvec4) FAdd 19 21 + Store 9(texColor) 22 + 26: 23(fvec3) Load 25(inColor) + 27: 7(fvec4) Load 9(texColor) + 28: 23(fvec3) VectorShuffle 27 27 0 1 2 + 29: 23(fvec3) FAdd 28 26 + 30: 7(fvec4) Load 9(texColor) + 31: 7(fvec4) VectorShuffle 30 29 4 5 6 3 + Store 9(texColor) 31 + 38: 37(ptr) AccessChain 35(alpha) 36 + 39: 6(float) Load 38 + 42: 41(ptr) AccessChain 9(texColor) 40 + 43: 6(float) Load 42 + 44: 6(float) FAdd 43 39 + 45: 41(ptr) AccessChain 9(texColor) 40 + Store 45 44 + 48: 7(fvec4) Load 9(texColor) + Store 47(gl_FragColor) 48 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.variableArrayIndex.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.variableArrayIndex.frag.out new file mode 100755 index 0000000..b4d3fe0 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.variableArrayIndex.frag.out @@ -0,0 +1,145 @@ +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 +// Id's are bound by 93 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 10 20 34 36 54 63 + ExecutionMode 4 OriginUpperLeft + Source GLSL 400 + Name 4 "main" + Name 8 "iLocal" + Name 10 "Count" + Name 13 "lunarStruct1" + MemberName 13(lunarStruct1) 0 "i" + MemberName 13(lunarStruct1) 1 "f" + Name 14 "lunarStruct2" + MemberName 14(lunarStruct2) 0 "i" + MemberName 14(lunarStruct2) 1 "f" + MemberName 14(lunarStruct2) 2 "s1_1" + Name 18 "lunarStruct3" + MemberName 18(lunarStruct3) 0 "s2_1" + MemberName 18(lunarStruct3) 1 "i" + MemberName 18(lunarStruct3) 2 "f" + MemberName 18(lunarStruct3) 3 "s1_1" + Name 20 "foo3" + Name 30 "scale" + Name 34 "foo2" + Name 36 "foo" + Name 54 "gl_FragColor" + Name 59 "samp2D" + Name 63 "coord" + Name 69 "constructed" + Decorate 10(Count) Flat + Decorate 20(foo3) Flat + Decorate 34(foo2) Flat + Decorate 36(foo) Flat + Decorate 59(samp2D) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypePointer Function 6(int) + 9: TypePointer Input 6(int) + 10(Count): 9(ptr) Variable Input + 12: TypeFloat 32 +13(lunarStruct1): TypeStruct 6(int) 12(float) +14(lunarStruct2): TypeStruct 6(int) 12(float) 13(lunarStruct1) + 15: TypeInt 32 0 + 16: 15(int) Constant 3 + 17: TypeArray 14(lunarStruct2) 16 +18(lunarStruct3): TypeStruct 17 6(int) 12(float) 13(lunarStruct1) + 19: TypePointer Input 18(lunarStruct3) + 20(foo3): 19(ptr) Variable Input + 21: 6(int) Constant 0 + 22: 6(int) Constant 1 + 25: TypeBool + 29: TypePointer Function 12(float) + 31: 15(int) Constant 5 + 32: TypeArray 14(lunarStruct2) 31 + 33: TypePointer Input 32 + 34(foo2): 33(ptr) Variable Input + 35: TypePointer Input 13(lunarStruct1) + 36(foo): 35(ptr) Variable Input + 41: 6(int) Constant 2 + 46: TypePointer Input 12(float) + 52: TypeVector 12(float) 4 + 53: TypePointer Output 52(fvec4) +54(gl_FragColor): 53(ptr) Variable Output + 56: TypeImage 12(float) 2D sampled format:Unknown + 57: TypeSampledImage 56 + 58: TypePointer UniformConstant 57 + 59(samp2D): 58(ptr) Variable UniformConstant + 61: TypeVector 12(float) 2 + 62: TypePointer Input 61(fvec2) + 63(coord): 62(ptr) Variable Input + 67: TypeArray 61(fvec2) 16 + 68: TypePointer Function 67 + 73: 12(float) Constant 1065353216 + 74: 12(float) Constant 1073741824 + 75: 61(fvec2) ConstantComposite 73 74 + 79: TypePointer Function 61(fvec2) + 4(main): 2 Function None 3 + 5: Label + 8(iLocal): 7(ptr) Variable Function + 30(scale): 29(ptr) Variable Function + 69(constructed): 68(ptr) Variable Function + 11: 6(int) Load 10(Count) + Store 8(iLocal) 11 + 23: 9(ptr) AccessChain 20(foo3) 21 22 21 + 24: 6(int) Load 23 + 26: 25(bool) SGreaterThan 24 21 + SelectionMerge 28 None + BranchConditional 26 27 49 + 27: Label + 37: 9(ptr) AccessChain 36(foo) 21 + 38: 6(int) Load 37 + 39: 9(ptr) AccessChain 20(foo3) 21 38 21 + 40: 6(int) Load 39 + 42: 6(int) IAdd 40 41 + 43: 6(int) Load 8(iLocal) + 44: 6(int) IAdd 43 22 + Store 8(iLocal) 44 + 45: 6(int) IAdd 42 44 + 47: 46(ptr) AccessChain 34(foo2) 45 41 22 + 48: 12(float) Load 47 + Store 30(scale) 48 + Branch 28 + 49: Label + 50: 46(ptr) AccessChain 20(foo3) 21 21 41 22 + 51: 12(float) Load 50 + Store 30(scale) 51 + Branch 28 + 28: Label + 55: 12(float) Load 30(scale) + 60: 57 Load 59(samp2D) + 64: 61(fvec2) Load 63(coord) + 65: 52(fvec4) ImageSampleImplicitLod 60 64 + 66: 52(fvec4) VectorTimesScalar 65 55 + Store 54(gl_FragColor) 66 + 70: 61(fvec2) Load 63(coord) + 71: 12(float) Load 30(scale) + 72: 61(fvec2) CompositeConstruct 71 71 + 76: 67 CompositeConstruct 70 72 75 + Store 69(constructed) 76 + 77: 9(ptr) AccessChain 36(foo) 21 + 78: 6(int) Load 77 + 80: 79(ptr) AccessChain 69(constructed) 78 + 81: 61(fvec2) Load 80 + 82: 9(ptr) AccessChain 36(foo) 21 + 83: 6(int) Load 82 + 84: 79(ptr) AccessChain 69(constructed) 83 + 85: 61(fvec2) Load 84 + 86: 12(float) CompositeExtract 81 0 + 87: 12(float) CompositeExtract 81 1 + 88: 12(float) CompositeExtract 85 0 + 89: 12(float) CompositeExtract 85 1 + 90: 52(fvec4) CompositeConstruct 86 87 88 89 + 91: 52(fvec4) Load 54(gl_FragColor) + 92: 52(fvec4) FAdd 91 90 + Store 54(gl_FragColor) 92 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.varyingArray.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.varyingArray.frag.out new file mode 100755 index 0000000..58833ea --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.varyingArray.frag.out @@ -0,0 +1,85 @@ +spv.varyingArray.frag +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 61 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 19 34 39 45 48 + ExecutionMode 4 OriginUpperLeft + Source GLSL 140 + Name 4 "main" + Name 9 "texColor" + Name 13 "texSampler2D" + Name 19 "TexCoord" + Name 34 "color" + Name 39 "alpha" + Name 45 "gl_FragColor" + Name 48 "foo" + Decorate 13(texSampler2D) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 10: TypeImage 6(float) 2D sampled format:Unknown + 11: TypeSampledImage 10 + 12: TypePointer UniformConstant 11 +13(texSampler2D): 12(ptr) Variable UniformConstant + 15: TypeInt 32 0 + 16: 15(int) Constant 6 + 17: TypeArray 7(fvec4) 16 + 18: TypePointer Input 17 + 19(TexCoord): 18(ptr) Variable Input + 20: TypeInt 32 1 + 21: 20(int) Constant 4 + 22: TypePointer Input 7(fvec4) + 25: 20(int) Constant 5 + 29: TypeVector 6(float) 2 + 34(color): 22(ptr) Variable Input + 38: TypePointer Input 6(float) + 39(alpha): 38(ptr) Variable Input + 41: 15(int) Constant 3 + 42: TypePointer Function 6(float) + 44: TypePointer Output 7(fvec4) +45(gl_FragColor): 44(ptr) Variable Output + 46: TypeArray 7(fvec4) 41 + 47: TypePointer Input 46 + 48(foo): 47(ptr) Variable Input + 49: 20(int) Constant 1 + 52: 20(int) Constant 0 + 4(main): 2 Function None 3 + 5: Label + 9(texColor): 8(ptr) Variable Function + 14: 11 Load 13(texSampler2D) + 23: 22(ptr) AccessChain 19(TexCoord) 21 + 24: 7(fvec4) Load 23 + 26: 22(ptr) AccessChain 19(TexCoord) 25 + 27: 7(fvec4) Load 26 + 28: 7(fvec4) FAdd 24 27 + 30: 6(float) CompositeExtract 28 0 + 31: 6(float) CompositeExtract 28 1 + 32: 29(fvec2) CompositeConstruct 30 31 + 33: 7(fvec4) ImageSampleImplicitLod 14 32 + Store 9(texColor) 33 + 35: 7(fvec4) Load 34(color) + 36: 7(fvec4) Load 9(texColor) + 37: 7(fvec4) FAdd 36 35 + Store 9(texColor) 37 + 40: 6(float) Load 39(alpha) + 43: 42(ptr) AccessChain 9(texColor) 41 + Store 43 40 + 50: 22(ptr) AccessChain 48(foo) 49 + 51: 7(fvec4) Load 50 + 53: 22(ptr) AccessChain 19(TexCoord) 52 + 54: 7(fvec4) Load 53 + 55: 7(fvec4) FAdd 51 54 + 56: 22(ptr) AccessChain 19(TexCoord) 21 + 57: 7(fvec4) Load 56 + 58: 7(fvec4) FAdd 55 57 + 59: 7(fvec4) Load 9(texColor) + 60: 7(fvec4) FAdd 58 59 + Store 45(gl_FragColor) 60 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.varyingArrayIndirect.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.varyingArrayIndirect.frag.out new file mode 100755 index 0000000..9c01840 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.varyingArrayIndirect.frag.out @@ -0,0 +1,98 @@ +spv.varyingArrayIndirect.frag +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 70 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 19 22 30 31 45 50 56 + ExecutionMode 4 OriginUpperLeft + Source GLSL 140 + Name 4 "main" + Name 9 "texColor" + Name 13 "texSampler2D" + Name 19 "userIn" + Name 22 "b" + Name 30 "TexCoord" + Name 31 "a" + Name 45 "color" + Name 50 "alpha" + Name 56 "gl_FragColor" + Decorate 13(texSampler2D) DescriptorSet 0 + Decorate 22(b) Flat + Decorate 31(a) Flat + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 10: TypeImage 6(float) 2D sampled format:Unknown + 11: TypeSampledImage 10 + 12: TypePointer UniformConstant 11 +13(texSampler2D): 12(ptr) Variable UniformConstant + 15: TypeInt 32 0 + 16: 15(int) Constant 2 + 17: TypeArray 7(fvec4) 16 + 18: TypePointer Input 17 + 19(userIn): 18(ptr) Variable Input + 20: TypeInt 32 1 + 21: TypePointer Input 20(int) + 22(b): 21(ptr) Variable Input + 24: TypePointer Input 7(fvec4) + 27: 15(int) Constant 6 + 28: TypeArray 7(fvec4) 27 + 29: TypePointer Input 28 + 30(TexCoord): 29(ptr) Variable Input + 31(a): 21(ptr) Variable Input + 36: 20(int) Constant 5 + 40: TypeVector 6(float) 2 + 45(color): 24(ptr) Variable Input + 49: TypePointer Input 6(float) + 50(alpha): 49(ptr) Variable Input + 52: 15(int) Constant 3 + 53: TypePointer Function 6(float) + 55: TypePointer Output 7(fvec4) +56(gl_FragColor): 55(ptr) Variable Output + 57: 20(int) Constant 0 + 4(main): 2 Function None 3 + 5: Label + 9(texColor): 8(ptr) Variable Function + 14: 11 Load 13(texSampler2D) + 23: 20(int) Load 22(b) + 25: 24(ptr) AccessChain 19(userIn) 23 + 26: 7(fvec4) Load 25 + 32: 20(int) Load 31(a) + 33: 24(ptr) AccessChain 30(TexCoord) 32 + 34: 7(fvec4) Load 33 + 35: 7(fvec4) FAdd 26 34 + 37: 24(ptr) AccessChain 30(TexCoord) 36 + 38: 7(fvec4) Load 37 + 39: 7(fvec4) FAdd 35 38 + 41: 6(float) CompositeExtract 39 0 + 42: 6(float) CompositeExtract 39 1 + 43: 40(fvec2) CompositeConstruct 41 42 + 44: 7(fvec4) ImageSampleImplicitLod 14 43 + Store 9(texColor) 44 + 46: 7(fvec4) Load 45(color) + 47: 7(fvec4) Load 9(texColor) + 48: 7(fvec4) FAdd 47 46 + Store 9(texColor) 48 + 51: 6(float) Load 50(alpha) + 54: 53(ptr) AccessChain 9(texColor) 52 + Store 54 51 + 58: 24(ptr) AccessChain 30(TexCoord) 57 + 59: 7(fvec4) Load 58 + 60: 20(int) Load 22(b) + 61: 24(ptr) AccessChain 30(TexCoord) 60 + 62: 7(fvec4) Load 61 + 63: 7(fvec4) FAdd 59 62 + 64: 7(fvec4) Load 9(texColor) + 65: 7(fvec4) FAdd 63 64 + 66: 20(int) Load 31(a) + 67: 24(ptr) AccessChain 19(userIn) 66 + 68: 7(fvec4) Load 67 + 69: 7(fvec4) FAdd 65 68 + Store 56(gl_FragColor) 69 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.viewportArray2.tesc.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.viewportArray2.tesc.out new file mode 100644 index 0000000..fdfa2b8 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.viewportArray2.tesc.out @@ -0,0 +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 +// Id's are bound by 25 + + Capability Tessellation + Capability MultiViewport + Capability ShaderViewportIndexLayerNV + Capability ShaderViewportMaskNV + Extension "SPV_NV_viewport_array2" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint TessellationControl 4 "main" 14 16 + 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" + 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 + Decorate 10(gl_PerVertex) Block + Decorate 16(gl_InvocationID) BuiltIn InvocationId + 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 + 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) + 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 + 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 new file mode 100644 index 0000000..766685f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.viewportArray2.vert.out @@ -0,0 +1,48 @@ +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 +// Id's are bound by 19 + + Capability Shader + Capability Geometry + Capability MultiViewport + Capability ShaderViewportIndexLayerNV + Capability ShaderViewportMaskNV + Extension "SPV_NV_viewport_array2" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 11 16 18 + Source GLSL 450 + SourceExtension "GL_ARB_shader_viewport_layer_array" + SourceExtension "GL_NV_viewport_array2" + Name 4 "main" + Name 11 "gl_ViewportMask" + Name 16 "gl_ViewportIndex" + Name 18 "gl_Layer" + Decorate 11(gl_ViewportMask) BuiltIn ViewportMaskNV + Decorate 16(gl_ViewportIndex) BuiltIn ViewportIndex + Decorate 18(gl_Layer) BuiltIn Layer + Decorate 18(gl_Layer) ViewportRelativeNV + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypeInt 32 0 + 8: 7(int) Constant 1 + 9: TypeArray 6(int) 8 + 10: TypePointer Output 9 +11(gl_ViewportMask): 10(ptr) Variable Output + 12: 6(int) Constant 0 + 13: 6(int) Constant 1 + 14: TypePointer Output 6(int) +16(gl_ViewportIndex): 14(ptr) Variable Output + 17: 6(int) Constant 2 + 18(gl_Layer): 14(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 15: 14(ptr) AccessChain 11(gl_ViewportMask) 12 + Store 15 13 + Store 16(gl_ViewportIndex) 17 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.voidFunction.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.voidFunction.frag.out new file mode 100755 index 0000000..4434861 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.voidFunction.frag.out @@ -0,0 +1,73 @@ +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 +// Id's are bound by 43 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 24 37 40 42 + ExecutionMode 4 OriginUpperLeft + Source GLSL 400 + Name 4 "main" + Name 6 "foo(" + Name 8 "foo2(" + Name 12 "bar" + Name 22 "outColor" + Name 24 "bigColor" + Name 37 "gl_FragColor" + Name 40 "BaseColor" + Name 42 "d" + 2: TypeVoid + 3: TypeFunction 2 + 10: TypeFloat 32 + 11: TypePointer Private 10(float) + 12(bar): 11(ptr) Variable Private + 13: 10(float) Constant 1073741824 + 15: 10(float) Constant 1065353216 + 20: TypeVector 10(float) 4 + 21: TypePointer Function 20(fvec4) + 23: TypePointer Input 20(fvec4) + 24(bigColor): 23(ptr) Variable Input + 29: TypeInt 32 0 + 30: 29(int) Constant 0 + 31: TypePointer Function 10(float) + 36: TypePointer Output 20(fvec4) +37(gl_FragColor): 36(ptr) Variable Output + 40(BaseColor): 23(ptr) Variable Input + 41: TypePointer Input 10(float) + 42(d): 41(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 22(outColor): 21(ptr) Variable Function + Store 12(bar) 13 + 25: 20(fvec4) Load 24(bigColor) + Store 22(outColor) 25 + 26: 2 FunctionCall 6(foo() + 27: 2 FunctionCall 8(foo2() + 28: 10(float) Load 12(bar) + 32: 31(ptr) AccessChain 22(outColor) 30 + 33: 10(float) Load 32 + 34: 10(float) FAdd 33 28 + 35: 31(ptr) AccessChain 22(outColor) 30 + Store 35 34 + 38: 20(fvec4) Load 22(outColor) + Store 37(gl_FragColor) 38 + Return + FunctionEnd + 6(foo(): 2 Function None 3 + 7: Label + 14: 10(float) Load 12(bar) + 16: 10(float) FAdd 14 15 + Store 12(bar) 16 + Return + FunctionEnd + 8(foo2(): 2 Function None 3 + 9: Label + 18: 10(float) Load 12(bar) + 19: 10(float) FAdd 18 15 + Store 12(bar) 19 + Return + FunctionEnd 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 new file mode 100644 index 0000000..73dc35c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.while-continue-break.vert.out @@ -0,0 +1,75 @@ +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 +// Id's are bound by 41 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" + Source ESSL 310 + Name 4 "main" + Name 8 "i" + Name 19 "A" + Name 27 "B" + Name 29 "C" + Name 39 "D" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypePointer Function 6(int) + 9: 6(int) Constant 0 + 16: 6(int) Constant 10 + 17: TypeBool + 20: 6(int) Constant 1 + 22: 6(int) Constant 2 + 31: 6(int) Constant 5 + 40: 6(int) Constant 3 + 4(main): 2 Function None 3 + 5: Label + 8(i): 7(ptr) Variable Function + 19(A): 7(ptr) Variable Function + 27(B): 7(ptr) Variable Function + 29(C): 7(ptr) Variable Function + 39(D): 7(ptr) Variable Function + Store 8(i) 9 + Branch 10 + 10: Label + LoopMerge 12 13 None + Branch 14 + 14: Label + 15: 6(int) Load 8(i) + 18: 17(bool) SLessThan 15 16 + BranchConditional 18 11 12 + 11: Label + Store 19(A) 20 + 21: 6(int) Load 8(i) + 23: 6(int) SMod 21 22 + 24: 17(bool) IEqual 23 9 + SelectionMerge 26 None + BranchConditional 24 25 26 + 25: Label + Store 27(B) 22 + Branch 13 + 26: Label + 30: 6(int) Load 8(i) + 32: 6(int) SMod 30 31 + 33: 17(bool) IEqual 32 9 + SelectionMerge 35 None + BranchConditional 33 34 35 + 34: Label + Store 27(B) 22 + Branch 12 + 35: Label + 37: 6(int) Load 8(i) + 38: 6(int) IAdd 37 20 + Store 8(i) 38 + Branch 13 + 13: Label + Branch 10 + 12: Label + Store 39(D) 40 + Return + FunctionEnd 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 new file mode 100755 index 0000000..82121dd --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.while-simple.vert.out @@ -0,0 +1,44 @@ +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 +// Id's are bound by 22 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" + Source ESSL 310 + Name 4 "main" + Name 8 "i" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypePointer Function 6(int) + 9: 6(int) Constant 0 + 16: 6(int) Constant 10 + 17: TypeBool + 20: 6(int) Constant 1 + 4(main): 2 Function None 3 + 5: Label + 8(i): 7(ptr) Variable Function + Store 8(i) 9 + Branch 10 + 10: Label + LoopMerge 12 13 None + Branch 14 + 14: Label + 15: 6(int) Load 8(i) + 18: 17(bool) SLessThan 15 16 + BranchConditional 18 11 12 + 11: Label + 19: 6(int) Load 8(i) + 21: 6(int) IAdd 19 20 + Store 8(i) 21 + Branch 13 + 13: Label + Branch 10 + 12: Label + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.whileLoop.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.whileLoop.frag.out new file mode 100755 index 0000000..ce1e195 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.whileLoop.frag.out @@ -0,0 +1,61 @@ +spv.whileLoop.frag +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 35 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 11 24 28 33 + ExecutionMode 4 OriginUpperLeft + Source GLSL 140 + Name 4 "main" + Name 9 "color" + Name 11 "BaseColor" + Name 24 "d" + Name 28 "bigColor" + Name 33 "gl_FragColor" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 10: TypePointer Input 7(fvec4) + 11(BaseColor): 10(ptr) Variable Input + 18: TypeInt 32 0 + 19: 18(int) Constant 0 + 20: TypePointer Function 6(float) + 23: TypePointer Input 6(float) + 24(d): 23(ptr) Variable Input + 26: TypeBool + 28(bigColor): 10(ptr) Variable Input + 32: TypePointer Output 7(fvec4) +33(gl_FragColor): 32(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 9(color): 8(ptr) Variable Function + 12: 7(fvec4) Load 11(BaseColor) + Store 9(color) 12 + Branch 13 + 13: Label + LoopMerge 15 16 None + Branch 17 + 17: Label + 21: 20(ptr) AccessChain 9(color) 19 + 22: 6(float) Load 21 + 25: 6(float) Load 24(d) + 27: 26(bool) FOrdLessThan 22 25 + BranchConditional 27 14 15 + 14: Label + 29: 7(fvec4) Load 28(bigColor) + 30: 7(fvec4) Load 9(color) + 31: 7(fvec4) FAdd 30 29 + Store 9(color) 31 + Branch 16 + 16: Label + Branch 13 + 15: Label + 34: 7(fvec4) Load 9(color) + Store 33(gl_FragColor) 34 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/structAssignment.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/structAssignment.frag.out new file mode 100644 index 0000000..5bd2ca8 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/structAssignment.frag.out @@ -0,0 +1,103 @@ +structAssignment.frag +WARNING: 0:4: varying deprecated in version 130; may be removed in future release + +Shader version: 130 +0:? Sequence +0:29 Function Definition: main( ( global void) +0:29 Function Parameters: +0:? Sequence +0:33 Test condition and select ( temp void) +0:33 Condition +0:33 Compare Greater Than ( temp bool) +0:33 i: direct index for structure ( global int) +0:33 s2_1: direct index for structure ( global structure{ global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:33 'foo3' ( uniform structure{ global structure{ global int i, global float f, global structure{ global int i, global float f} s1_1} s2_1, global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:33 Constant: +0:33 0 (const int) +0:33 Constant: +0:33 0 (const int) +0:33 Constant: +0:33 0 (const int) +0:33 true case +0:34 move second child to first child ( temp structure{ global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:34 'locals2' ( temp structure{ global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:34 s2_1: direct index for structure ( global structure{ global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:34 'foo3' ( uniform structure{ global structure{ global int i, global float f, global structure{ global int i, global float f} s1_1} s2_1, global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:34 Constant: +0:34 0 (const int) +0:33 false case +0:36 move second child to first child ( temp structure{ global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:36 'locals2' ( temp structure{ global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:36 'foo2' ( uniform structure{ global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:38 move second child to first child ( temp 4-component vector of float) +0:38 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:38 vector-scale ( temp 4-component vector of float) +0:38 f: direct index for structure ( global float) +0:38 s1_1: direct index for structure ( global structure{ global int i, global float f}) +0:38 'locals2' ( temp structure{ global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:38 Constant: +0:38 2 (const int) +0:38 Constant: +0:38 1 (const int) +0:38 texture ( global 4-component vector of float) +0:38 'sampler' ( uniform sampler2D) +0:38 'coord' ( smooth in 2-component vector of float) +0:? Linker Objects +0:? 'sampler' ( uniform sampler2D) +0:? 'coord' ( smooth in 2-component vector of float) +0:? 'foo' ( uniform structure{ global int i, global float f}) +0:? 'foo2' ( uniform structure{ global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:? 'foo3' ( uniform structure{ global structure{ global int i, global float f, global structure{ global int i, global float f} s1_1} s2_1, global int i, global float f, global structure{ global int i, global float f} s1_1}) + + +Linked fragment stage: + + +Shader version: 130 +0:? Sequence +0:29 Function Definition: main( ( global void) +0:29 Function Parameters: +0:? Sequence +0:33 Test condition and select ( temp void) +0:33 Condition +0:33 Compare Greater Than ( temp bool) +0:33 i: direct index for structure ( global int) +0:33 s2_1: direct index for structure ( global structure{ global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:33 'foo3' ( uniform structure{ global structure{ global int i, global float f, global structure{ global int i, global float f} s1_1} s2_1, global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:33 Constant: +0:33 0 (const int) +0:33 Constant: +0:33 0 (const int) +0:33 Constant: +0:33 0 (const int) +0:33 true case +0:34 move second child to first child ( temp structure{ global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:34 'locals2' ( temp structure{ global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:34 s2_1: direct index for structure ( global structure{ global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:34 'foo3' ( uniform structure{ global structure{ global int i, global float f, global structure{ global int i, global float f} s1_1} s2_1, global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:34 Constant: +0:34 0 (const int) +0:33 false case +0:36 move second child to first child ( temp structure{ global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:36 'locals2' ( temp structure{ global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:36 'foo2' ( uniform structure{ global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:38 move second child to first child ( temp 4-component vector of float) +0:38 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:38 vector-scale ( temp 4-component vector of float) +0:38 f: direct index for structure ( global float) +0:38 s1_1: direct index for structure ( global structure{ global int i, global float f}) +0:38 'locals2' ( temp structure{ global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:38 Constant: +0:38 2 (const int) +0:38 Constant: +0:38 1 (const int) +0:38 texture ( global 4-component vector of float) +0:38 'sampler' ( uniform sampler2D) +0:38 'coord' ( smooth in 2-component vector of float) +0:? Linker Objects +0:? 'sampler' ( uniform sampler2D) +0:? 'coord' ( smooth in 2-component vector of float) +0:? 'foo' ( uniform structure{ global int i, global float f}) +0:? 'foo2' ( uniform structure{ global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:? 'foo3' ( uniform structure{ global structure{ global int i, global float f, global structure{ global int i, global float f} s1_1} s2_1, global int i, global float f, global structure{ global int i, global float f} s1_1}) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/structDeref.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/structDeref.frag.out new file mode 100644 index 0000000..c3f964c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/structDeref.frag.out @@ -0,0 +1,345 @@ +structDeref.frag +WARNING: 0:4: varying deprecated in version 130; may be removed in future release + +Shader version: 130 +0:? Sequence +0:41 Function Definition: main( ( global void) +0:41 Function Parameters: +0:? Sequence +0:51 Test condition and select ( temp void) +0:51 Condition +0:51 Compare Greater Than ( temp bool) +0:51 i: direct index for structure ( global int) +0:51 direct index ( temp structure{ global int i, global float f, global structure{ global int i, global float f, global structure{ global int i} s0_1} s1_1}) +0:51 s2_1: direct index for structure ( global 12-element array of structure{ global int i, global float f, global structure{ global int i, global float f, global structure{ global int i} s0_1} s1_1}) +0:51 'foo3' ( uniform structure{ global 12-element array of structure{ global int i, global float f, global structure{ global int i, global float f, global structure{ global int i} s0_1} s1_1} s2_1, global int i, global float f, global structure{ global int i, global float f, global structure{ global int i} s0_1} s1_1}) +0:51 Constant: +0:51 0 (const int) +0:51 Constant: +0:51 9 (const int) +0:51 Constant: +0:51 0 (const int) +0:51 Constant: +0:51 0 (const int) +0:51 true case +0:52 Sequence +0:52 move second child to first child ( temp float) +0:52 f: direct index for structure ( global float) +0:52 'locals2' ( temp structure{ global int i, global float f, global structure{ global int i, global float f, global structure{ global int i} s0_1} s1_1}) +0:52 Constant: +0:52 1 (const int) +0:52 Constant: +0:52 1.000000 +0:53 move second child to first child ( temp structure{ global int i, global float f, global structure{ global int i} s0_1}) +0:53 s1_1: direct index for structure ( global structure{ global int i, global float f, global structure{ global int i} s0_1}) +0:53 'locals2' ( temp structure{ global int i, global float f, global structure{ global int i, global float f, global structure{ global int i} s0_1} s1_1}) +0:53 Constant: +0:53 2 (const int) +0:53 Constant: +0:53 0 (const int) +0:53 1.000000 +0:53 0 (const int) +0:54 move second child to first child ( temp 6-element array of float) +0:54 'fArray' ( temp 6-element array of float) +0:54 Constant: +0:54 0.000000 +0:54 0.000000 +0:54 0.000000 +0:54 0.000000 +0:54 0.000000 +0:54 0.000000 +0:55 move second child to first child ( temp structure{ global int i, global float f, global structure{ global int i} s0_1}) +0:55 direct index ( temp structure{ global int i, global float f, global structure{ global int i} s0_1}) +0:55 'locals1Array' ( temp 10-element array of structure{ global int i, global float f, global structure{ global int i} s0_1}) +0:55 Constant: +0:55 6 (const int) +0:55 'foo1' ( uniform structure{ global int i, global float f, global structure{ global int i} s0_1}) +0:56 move second child to first child ( temp structure{ global int i}) +0:56 'locals0' ( temp structure{ global int i}) +0:56 Constant: +0:56 0 (const int) +0:57 move second child to first child ( temp structure{ global structure{ global int i} s0_0}) +0:57 'locals00' ( temp structure{ global structure{ global int i} s0_0}) +0:57 Constant: +0:57 0 (const int) +0:51 false case +0:59 Sequence +0:59 move second child to first child ( temp float) +0:59 f: direct index for structure ( global float) +0:59 'locals2' ( temp structure{ global int i, global float f, global structure{ global int i, global float f, global structure{ global int i} s0_1} s1_1}) +0:59 Constant: +0:59 1 (const int) +0:59 direct index ( temp float) +0:59 'coord' ( smooth in 2-component vector of float) +0:59 Constant: +0:59 0 (const int) +0:60 move second child to first child ( temp structure{ global int i, global float f, global structure{ global int i} s0_1}) +0:60 s1_1: direct index for structure ( global structure{ global int i, global float f, global structure{ global int i} s0_1}) +0:60 'locals2' ( temp structure{ global int i, global float f, global structure{ global int i, global float f, global structure{ global int i} s0_1} s1_1}) +0:60 Constant: +0:60 2 (const int) +0:60 Construct structure ( temp structure{ global int i, global float f, global structure{ global int i} s0_1}) +0:60 Constant: +0:60 1 (const int) +0:60 direct index ( temp float) +0:60 'coord' ( smooth in 2-component vector of float) +0:60 Constant: +0:60 1 (const int) +0:60 'foo0' ( uniform structure{ global int i}) +0:61 move second child to first child ( temp 6-element array of float) +0:61 'fArray' ( temp 6-element array of float) +0:61 Constant: +0:61 0.000000 +0:61 1.000000 +0:61 2.000000 +0:61 3.000000 +0:61 4.000000 +0:61 5.000000 +0:62 move second child to first child ( temp structure{ global int i, global float f, global structure{ global int i} s0_1}) +0:62 direct index ( temp structure{ global int i, global float f, global structure{ global int i} s0_1}) +0:62 'locals1Array' ( temp 10-element array of structure{ global int i, global float f, global structure{ global int i} s0_1}) +0:62 Constant: +0:62 6 (const int) +0:62 s1_1: direct index for structure ( global structure{ global int i, global float f, global structure{ global int i} s0_1}) +0:62 'locals2' ( temp structure{ global int i, global float f, global structure{ global int i, global float f, global structure{ global int i} s0_1} s1_1}) +0:62 Constant: +0:62 2 (const int) +0:63 move second child to first child ( temp structure{ global int i}) +0:63 'locals0' ( temp structure{ global int i}) +0:63 s0_1: direct index for structure ( global structure{ global int i}) +0:63 'foo1' ( uniform structure{ global int i, global float f, global structure{ global int i} s0_1}) +0:63 Constant: +0:63 2 (const int) +0:64 move second child to first child ( temp structure{ global structure{ global int i} s0_0}) +0:64 'locals00' ( temp structure{ global structure{ global int i} s0_0}) +0:64 'foo00' ( uniform structure{ global structure{ global int i} s0_0}) +0:67 Test condition and select ( temp void) +0:67 Condition +0:67 Compare Greater Than ( temp bool) +0:67 i: direct index for structure ( global int) +0:67 'locals0' ( temp structure{ global int i}) +0:67 Constant: +0:67 0 (const int) +0:67 Constant: +0:67 5 (const int) +0:67 true case +0:68 move second child to first child ( temp structure{ global int i}) +0:68 'locals0' ( temp structure{ global int i}) +0:68 s0_0: direct index for structure ( global structure{ global int i}) +0:68 'locals00' ( temp structure{ global structure{ global int i} s0_0}) +0:68 Constant: +0:68 0 (const int) +0:70 move second child to first child ( temp 4-component vector of float) +0:70 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:70 vector-scale ( temp 4-component vector of float) +0:70 add ( temp float) +0:70 add ( temp float) +0:70 add ( temp float) +0:70 Convert int to float ( temp float) +0:70 i: direct index for structure ( global int) +0:70 'locals0' ( temp structure{ global int i}) +0:70 Constant: +0:70 0 (const int) +0:70 f: direct index for structure ( global float) +0:70 direct index ( temp structure{ global int i, global float f, global structure{ global int i} s0_1}) +0:70 'locals1Array' ( temp 10-element array of structure{ global int i, global float f, global structure{ global int i} s0_1}) +0:70 Constant: +0:70 6 (const int) +0:70 Constant: +0:70 1 (const int) +0:70 direct index ( temp float) +0:70 'fArray' ( temp 6-element array of float) +0:70 Constant: +0:70 3 (const int) +0:70 f: direct index for structure ( global float) +0:70 s1_1: direct index for structure ( global structure{ global int i, global float f, global structure{ global int i} s0_1}) +0:70 'locals2' ( temp structure{ global int i, global float f, global structure{ global int i, global float f, global structure{ global int i} s0_1} s1_1}) +0:70 Constant: +0:70 2 (const int) +0:70 Constant: +0:70 1 (const int) +0:70 texture ( global 4-component vector of float) +0:70 'sampler' ( uniform sampler2D) +0:70 'coord' ( smooth in 2-component vector of float) +0:? Linker Objects +0:? 'sampler' ( uniform sampler2D) +0:? 'coord' ( smooth in 2-component vector of float) +0:? 'foo0' ( uniform structure{ global int i}) +0:? 'foo1' ( uniform structure{ global int i, global float f, global structure{ global int i} s0_1}) +0:? 'foo2' ( uniform structure{ global int i, global float f, global structure{ global int i, global float f, global structure{ global int i} s0_1} s1_1}) +0:? 'foo3' ( uniform structure{ global 12-element array of structure{ global int i, global float f, global structure{ global int i, global float f, global structure{ global int i} s0_1} s1_1} s2_1, global int i, global float f, global structure{ global int i, global float f, global structure{ global int i} s0_1} s1_1}) +0:? 'foo00' ( uniform structure{ global structure{ global int i} s0_0}) + + +Linked fragment stage: + + +Shader version: 130 +0:? Sequence +0:41 Function Definition: main( ( global void) +0:41 Function Parameters: +0:? Sequence +0:51 Test condition and select ( temp void) +0:51 Condition +0:51 Compare Greater Than ( temp bool) +0:51 i: direct index for structure ( global int) +0:51 direct index ( temp structure{ global int i, global float f, global structure{ global int i, global float f, global structure{ global int i} s0_1} s1_1}) +0:51 s2_1: direct index for structure ( global 12-element array of structure{ global int i, global float f, global structure{ global int i, global float f, global structure{ global int i} s0_1} s1_1}) +0:51 'foo3' ( uniform structure{ global 12-element array of structure{ global int i, global float f, global structure{ global int i, global float f, global structure{ global int i} s0_1} s1_1} s2_1, global int i, global float f, global structure{ global int i, global float f, global structure{ global int i} s0_1} s1_1}) +0:51 Constant: +0:51 0 (const int) +0:51 Constant: +0:51 9 (const int) +0:51 Constant: +0:51 0 (const int) +0:51 Constant: +0:51 0 (const int) +0:51 true case +0:52 Sequence +0:52 move second child to first child ( temp float) +0:52 f: direct index for structure ( global float) +0:52 'locals2' ( temp structure{ global int i, global float f, global structure{ global int i, global float f, global structure{ global int i} s0_1} s1_1}) +0:52 Constant: +0:52 1 (const int) +0:52 Constant: +0:52 1.000000 +0:53 move second child to first child ( temp structure{ global int i, global float f, global structure{ global int i} s0_1}) +0:53 s1_1: direct index for structure ( global structure{ global int i, global float f, global structure{ global int i} s0_1}) +0:53 'locals2' ( temp structure{ global int i, global float f, global structure{ global int i, global float f, global structure{ global int i} s0_1} s1_1}) +0:53 Constant: +0:53 2 (const int) +0:53 Constant: +0:53 0 (const int) +0:53 1.000000 +0:53 0 (const int) +0:54 move second child to first child ( temp 6-element array of float) +0:54 'fArray' ( temp 6-element array of float) +0:54 Constant: +0:54 0.000000 +0:54 0.000000 +0:54 0.000000 +0:54 0.000000 +0:54 0.000000 +0:54 0.000000 +0:55 move second child to first child ( temp structure{ global int i, global float f, global structure{ global int i} s0_1}) +0:55 direct index ( temp structure{ global int i, global float f, global structure{ global int i} s0_1}) +0:55 'locals1Array' ( temp 10-element array of structure{ global int i, global float f, global structure{ global int i} s0_1}) +0:55 Constant: +0:55 6 (const int) +0:55 'foo1' ( uniform structure{ global int i, global float f, global structure{ global int i} s0_1}) +0:56 move second child to first child ( temp structure{ global int i}) +0:56 'locals0' ( temp structure{ global int i}) +0:56 Constant: +0:56 0 (const int) +0:57 move second child to first child ( temp structure{ global structure{ global int i} s0_0}) +0:57 'locals00' ( temp structure{ global structure{ global int i} s0_0}) +0:57 Constant: +0:57 0 (const int) +0:51 false case +0:59 Sequence +0:59 move second child to first child ( temp float) +0:59 f: direct index for structure ( global float) +0:59 'locals2' ( temp structure{ global int i, global float f, global structure{ global int i, global float f, global structure{ global int i} s0_1} s1_1}) +0:59 Constant: +0:59 1 (const int) +0:59 direct index ( temp float) +0:59 'coord' ( smooth in 2-component vector of float) +0:59 Constant: +0:59 0 (const int) +0:60 move second child to first child ( temp structure{ global int i, global float f, global structure{ global int i} s0_1}) +0:60 s1_1: direct index for structure ( global structure{ global int i, global float f, global structure{ global int i} s0_1}) +0:60 'locals2' ( temp structure{ global int i, global float f, global structure{ global int i, global float f, global structure{ global int i} s0_1} s1_1}) +0:60 Constant: +0:60 2 (const int) +0:60 Construct structure ( temp structure{ global int i, global float f, global structure{ global int i} s0_1}) +0:60 Constant: +0:60 1 (const int) +0:60 direct index ( temp float) +0:60 'coord' ( smooth in 2-component vector of float) +0:60 Constant: +0:60 1 (const int) +0:60 'foo0' ( uniform structure{ global int i}) +0:61 move second child to first child ( temp 6-element array of float) +0:61 'fArray' ( temp 6-element array of float) +0:61 Constant: +0:61 0.000000 +0:61 1.000000 +0:61 2.000000 +0:61 3.000000 +0:61 4.000000 +0:61 5.000000 +0:62 move second child to first child ( temp structure{ global int i, global float f, global structure{ global int i} s0_1}) +0:62 direct index ( temp structure{ global int i, global float f, global structure{ global int i} s0_1}) +0:62 'locals1Array' ( temp 10-element array of structure{ global int i, global float f, global structure{ global int i} s0_1}) +0:62 Constant: +0:62 6 (const int) +0:62 s1_1: direct index for structure ( global structure{ global int i, global float f, global structure{ global int i} s0_1}) +0:62 'locals2' ( temp structure{ global int i, global float f, global structure{ global int i, global float f, global structure{ global int i} s0_1} s1_1}) +0:62 Constant: +0:62 2 (const int) +0:63 move second child to first child ( temp structure{ global int i}) +0:63 'locals0' ( temp structure{ global int i}) +0:63 s0_1: direct index for structure ( global structure{ global int i}) +0:63 'foo1' ( uniform structure{ global int i, global float f, global structure{ global int i} s0_1}) +0:63 Constant: +0:63 2 (const int) +0:64 move second child to first child ( temp structure{ global structure{ global int i} s0_0}) +0:64 'locals00' ( temp structure{ global structure{ global int i} s0_0}) +0:64 'foo00' ( uniform structure{ global structure{ global int i} s0_0}) +0:67 Test condition and select ( temp void) +0:67 Condition +0:67 Compare Greater Than ( temp bool) +0:67 i: direct index for structure ( global int) +0:67 'locals0' ( temp structure{ global int i}) +0:67 Constant: +0:67 0 (const int) +0:67 Constant: +0:67 5 (const int) +0:67 true case +0:68 move second child to first child ( temp structure{ global int i}) +0:68 'locals0' ( temp structure{ global int i}) +0:68 s0_0: direct index for structure ( global structure{ global int i}) +0:68 'locals00' ( temp structure{ global structure{ global int i} s0_0}) +0:68 Constant: +0:68 0 (const int) +0:70 move second child to first child ( temp 4-component vector of float) +0:70 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:70 vector-scale ( temp 4-component vector of float) +0:70 add ( temp float) +0:70 add ( temp float) +0:70 add ( temp float) +0:70 Convert int to float ( temp float) +0:70 i: direct index for structure ( global int) +0:70 'locals0' ( temp structure{ global int i}) +0:70 Constant: +0:70 0 (const int) +0:70 f: direct index for structure ( global float) +0:70 direct index ( temp structure{ global int i, global float f, global structure{ global int i} s0_1}) +0:70 'locals1Array' ( temp 10-element array of structure{ global int i, global float f, global structure{ global int i} s0_1}) +0:70 Constant: +0:70 6 (const int) +0:70 Constant: +0:70 1 (const int) +0:70 direct index ( temp float) +0:70 'fArray' ( temp 6-element array of float) +0:70 Constant: +0:70 3 (const int) +0:70 f: direct index for structure ( global float) +0:70 s1_1: direct index for structure ( global structure{ global int i, global float f, global structure{ global int i} s0_1}) +0:70 'locals2' ( temp structure{ global int i, global float f, global structure{ global int i, global float f, global structure{ global int i} s0_1} s1_1}) +0:70 Constant: +0:70 2 (const int) +0:70 Constant: +0:70 1 (const int) +0:70 texture ( global 4-component vector of float) +0:70 'sampler' ( uniform sampler2D) +0:70 'coord' ( smooth in 2-component vector of float) +0:? Linker Objects +0:? 'sampler' ( uniform sampler2D) +0:? 'coord' ( smooth in 2-component vector of float) +0:? 'foo0' ( uniform structure{ global int i}) +0:? 'foo1' ( uniform structure{ global int i, global float f, global structure{ global int i} s0_1}) +0:? 'foo2' ( uniform structure{ global int i, global float f, global structure{ global int i, global float f, global structure{ global int i} s0_1} s1_1}) +0:? 'foo3' ( uniform structure{ global 12-element array of structure{ global int i, global float f, global structure{ global int i, global float f, global structure{ global int i} s0_1} s1_1} s2_1, global int i, global float f, global structure{ global int i, global float f, global structure{ global int i} s0_1} s1_1}) +0:? 'foo00' ( uniform structure{ global structure{ global int i} s0_0}) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/structure.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/structure.frag.out new file mode 100644 index 0000000..d12dceb --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/structure.frag.out @@ -0,0 +1,165 @@ +structure.frag +WARNING: 0:3: varying deprecated in version 130; may be removed in future release + +Shader version: 130 +0:? Sequence +0:20 Function Definition: main( ( global void) +0:20 Function Parameters: +0:22 Sequence +0:22 Sequence +0:22 move second child to first child ( temp float) +0:22 'scale' ( temp float) +0:22 Constant: +0:22 0.000000 +0:24 Test condition and select ( temp void) +0:24 Condition +0:24 Compare Greater Than ( temp bool) +0:24 direct index ( temp int) +0:24 i: direct index for structure ( global 5-element array of int) +0:24 direct index ( temp structure{ global 5-element array of int i, global float f, global 7-element array of structure{ global int i, global 4-element array of float f, global 5-element array of 4-component vector of float color} s1_1}) +0:24 'foo2' ( uniform 5-element array of structure{ global 5-element array of int i, global float f, global 7-element array of structure{ global int i, global 4-element array of float f, global 5-element array of 4-component vector of float color} s1_1}) +0:24 Constant: +0:24 3 (const int) +0:24 Constant: +0:24 0 (const int) +0:24 Constant: +0:24 4 (const int) +0:24 Constant: +0:24 0 (const int) +0:24 true case +0:25 move second child to first child ( temp float) +0:25 'scale' ( temp float) +0:25 direct index ( temp float) +0:25 direct index ( temp 4-component vector of float) +0:25 color: direct index for structure ( global 5-element array of 4-component vector of float) +0:25 direct index ( temp structure{ global int i, global 4-element array of float f, global 5-element array of 4-component vector of float color}) +0:25 s1_1: direct index for structure ( global 7-element array of structure{ global int i, global 4-element array of float f, global 5-element array of 4-component vector of float color}) +0:25 direct index ( temp structure{ global 5-element array of int i, global float f, global 7-element array of structure{ global int i, global 4-element array of float f, global 5-element array of 4-component vector of float color} s1_1}) +0:25 'foo2' ( uniform 5-element array of structure{ global 5-element array of int i, global float f, global 7-element array of structure{ global int i, global 4-element array of float f, global 5-element array of 4-component vector of float color} s1_1}) +0:25 Constant: +0:25 3 (const int) +0:25 Constant: +0:25 2 (const int) +0:25 Constant: +0:25 2 (const int) +0:25 Constant: +0:25 2 (const int) +0:25 Constant: +0:25 3 (const int) +0:25 Constant: +0:25 0 (const int) +0:24 false case +0:27 move second child to first child ( temp float) +0:27 'scale' ( temp float) +0:27 direct index ( temp float) +0:27 f: direct index for structure ( global 4-element array of float) +0:27 direct index ( temp structure{ global int i, global 4-element array of float f, global 5-element array of 4-component vector of float color}) +0:27 s1_1: direct index for structure ( global 7-element array of structure{ global int i, global 4-element array of float f, global 5-element array of 4-component vector of float color}) +0:27 direct index ( temp structure{ global 5-element array of int i, global float f, global 7-element array of structure{ global int i, global 4-element array of float f, global 5-element array of 4-component vector of float color} s1_1}) +0:27 'foo2' ( uniform 5-element array of structure{ global 5-element array of int i, global float f, global 7-element array of structure{ global int i, global 4-element array of float f, global 5-element array of 4-component vector of float color} s1_1}) +0:27 Constant: +0:27 3 (const int) +0:27 Constant: +0:27 2 (const int) +0:27 Constant: +0:27 2 (const int) +0:27 Constant: +0:27 1 (const int) +0:27 Constant: +0:27 3 (const int) +0:29 move second child to first child ( temp 4-component vector of float) +0:29 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:29 vector-scale ( temp 4-component vector of float) +0:29 'scale' ( temp float) +0:29 texture ( global 4-component vector of float) +0:29 'sampler' ( uniform sampler2D) +0:29 'coord' ( smooth in 2-component vector of float) +0:? Linker Objects +0:? 'sampler' ( uniform sampler2D) +0:? 'coord' ( smooth in 2-component vector of float) +0:? 'foo' ( uniform structure{ global int i, global 4-element array of float f, global 5-element array of 4-component vector of float color}) +0:? 'foo2' ( uniform 5-element array of structure{ global 5-element array of int i, global float f, global 7-element array of structure{ global int i, global 4-element array of float f, global 5-element array of 4-component vector of float color} s1_1}) + + +Linked fragment stage: + + +Shader version: 130 +0:? Sequence +0:20 Function Definition: main( ( global void) +0:20 Function Parameters: +0:22 Sequence +0:22 Sequence +0:22 move second child to first child ( temp float) +0:22 'scale' ( temp float) +0:22 Constant: +0:22 0.000000 +0:24 Test condition and select ( temp void) +0:24 Condition +0:24 Compare Greater Than ( temp bool) +0:24 direct index ( temp int) +0:24 i: direct index for structure ( global 5-element array of int) +0:24 direct index ( temp structure{ global 5-element array of int i, global float f, global 7-element array of structure{ global int i, global 4-element array of float f, global 5-element array of 4-component vector of float color} s1_1}) +0:24 'foo2' ( uniform 5-element array of structure{ global 5-element array of int i, global float f, global 7-element array of structure{ global int i, global 4-element array of float f, global 5-element array of 4-component vector of float color} s1_1}) +0:24 Constant: +0:24 3 (const int) +0:24 Constant: +0:24 0 (const int) +0:24 Constant: +0:24 4 (const int) +0:24 Constant: +0:24 0 (const int) +0:24 true case +0:25 move second child to first child ( temp float) +0:25 'scale' ( temp float) +0:25 direct index ( temp float) +0:25 direct index ( temp 4-component vector of float) +0:25 color: direct index for structure ( global 5-element array of 4-component vector of float) +0:25 direct index ( temp structure{ global int i, global 4-element array of float f, global 5-element array of 4-component vector of float color}) +0:25 s1_1: direct index for structure ( global 7-element array of structure{ global int i, global 4-element array of float f, global 5-element array of 4-component vector of float color}) +0:25 direct index ( temp structure{ global 5-element array of int i, global float f, global 7-element array of structure{ global int i, global 4-element array of float f, global 5-element array of 4-component vector of float color} s1_1}) +0:25 'foo2' ( uniform 5-element array of structure{ global 5-element array of int i, global float f, global 7-element array of structure{ global int i, global 4-element array of float f, global 5-element array of 4-component vector of float color} s1_1}) +0:25 Constant: +0:25 3 (const int) +0:25 Constant: +0:25 2 (const int) +0:25 Constant: +0:25 2 (const int) +0:25 Constant: +0:25 2 (const int) +0:25 Constant: +0:25 3 (const int) +0:25 Constant: +0:25 0 (const int) +0:24 false case +0:27 move second child to first child ( temp float) +0:27 'scale' ( temp float) +0:27 direct index ( temp float) +0:27 f: direct index for structure ( global 4-element array of float) +0:27 direct index ( temp structure{ global int i, global 4-element array of float f, global 5-element array of 4-component vector of float color}) +0:27 s1_1: direct index for structure ( global 7-element array of structure{ global int i, global 4-element array of float f, global 5-element array of 4-component vector of float color}) +0:27 direct index ( temp structure{ global 5-element array of int i, global float f, global 7-element array of structure{ global int i, global 4-element array of float f, global 5-element array of 4-component vector of float color} s1_1}) +0:27 'foo2' ( uniform 5-element array of structure{ global 5-element array of int i, global float f, global 7-element array of structure{ global int i, global 4-element array of float f, global 5-element array of 4-component vector of float color} s1_1}) +0:27 Constant: +0:27 3 (const int) +0:27 Constant: +0:27 2 (const int) +0:27 Constant: +0:27 2 (const int) +0:27 Constant: +0:27 1 (const int) +0:27 Constant: +0:27 3 (const int) +0:29 move second child to first child ( temp 4-component vector of float) +0:29 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:29 vector-scale ( temp 4-component vector of float) +0:29 'scale' ( temp float) +0:29 texture ( global 4-component vector of float) +0:29 'sampler' ( uniform sampler2D) +0:29 'coord' ( smooth in 2-component vector of float) +0:? Linker Objects +0:? 'sampler' ( uniform sampler2D) +0:? 'coord' ( smooth in 2-component vector of float) +0:? 'foo' ( uniform structure{ global int i, global 4-element array of float f, global 5-element array of 4-component vector of float color}) +0:? 'foo2' ( uniform 5-element array of structure{ global 5-element array of int i, global float f, global 7-element array of structure{ global int i, global 4-element array of float f, global 5-element array of 4-component vector of float color} s1_1}) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/switch.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/switch.frag.out new file mode 100644 index 0000000..9649c9b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/switch.frag.out @@ -0,0 +1,691 @@ +switch.frag +ERROR: 0:11: 'switch' : condition must be a scalar integer expression +ERROR: 0:14: 'switch' : condition must be a scalar integer expression +ERROR: 0:21: 'switch' : last case/default label not followed by statements +ERROR: 0:28: 'switch' : cannot have statements before first case/default label +ERROR: 0:43: 'default' : duplicate label +ERROR: 0:63: 'case' : duplicated value +ERROR: 0:65: 'case' : scalar integer expression required +ERROR: 0:67: 'case' : constant expression required +ERROR: 0:89: '' : break statement only allowed in switch and loops +ERROR: 0:99: 'case' : cannot be nested inside control flow +ERROR: 0:104: 'case' : cannot be nested inside control flow +ERROR: 0:108: 'case' : cannot be nested inside control flow +ERROR: 0:115: 'default' : cannot be nested inside control flow +ERROR: 0:119: 'case' : cannot appear outside switch statement +ERROR: 0:120: 'default' : cannot appear outside switch statement +ERROR: 0:126: 'onlyInSwitch' : undeclared identifier +ERROR: 0:128: 'switch' : last case/default label not followed by statements +ERROR: 0:140: 'nestedX' : undeclared identifier +ERROR: 0:157: 'nestedZ' : undeclared identifier +ERROR: 19 compilation errors. No code generated. + + +Shader version: 300 +ERROR: node is still EOpNull! +0:6 Function Definition: main( ( global void) +0:6 Function Parameters: +0:? Sequence +0:11 'f' ( temp highp float) +0:14 'a' ( temp 2-element array of mediump int) +0:17 'c' ( uniform mediump int) +0:21 switch +0:21 condition +0:21 'c' ( uniform mediump int) +0:21 body +0:21 Sequence +0:23 case: with expression +0:23 Constant: +0:23 2 (const int) +0:21 Sequence +0:21 Branch: Break +0:26 switch +0:26 condition +0:26 'c' ( uniform mediump int) +0:26 body +0:26 Sequence +0:28 Sequence +0:28 move second child to first child ( temp highp float) +0:28 'f' ( temp highp float) +0:28 sine ( global highp float) +0:28 'x' ( smooth in highp float) +0:29 case: with expression +0:29 Constant: +0:29 2 (const int) +0:? Sequence +0:30 move second child to first child ( temp highp float) +0:30 'f' ( temp highp float) +0:30 cosine ( global highp float) +0:30 'x' ( smooth in highp float) +0:31 Branch: Break +0:34 switch +0:34 condition +0:34 'c' ( uniform mediump int) +0:34 body +0:34 Sequence +0:35 default: +0:? Sequence +0:36 Branch: Break +0:37 case: with expression +0:37 Constant: +0:37 1 (const int) +0:? Sequence +0:38 move second child to first child ( temp highp float) +0:38 'f' ( temp highp float) +0:38 sine ( global highp float) +0:38 'x' ( smooth in highp float) +0:39 Branch: Break +0:40 case: with expression +0:40 Constant: +0:40 2 (const int) +0:? Sequence +0:41 move second child to first child ( temp highp float) +0:41 'f' ( temp highp float) +0:41 cosine ( global highp float) +0:41 'x' ( smooth in highp float) +0:42 Branch: Break +0:43 default: +0:? Sequence +0:44 move second child to first child ( temp highp float) +0:44 'f' ( temp highp float) +0:44 tangent ( global highp float) +0:44 'x' ( smooth in highp float) +0:47 switch +0:47 condition +0:47 'c' ( uniform mediump int) +0:47 body +0:47 Sequence +0:48 case: with expression +0:48 Constant: +0:48 1 (const int) +0:? Sequence +0:49 move second child to first child ( temp highp float) +0:49 'f' ( temp highp float) +0:49 sine ( global highp float) +0:49 'x' ( smooth in highp float) +0:50 Branch: Break +0:51 case: with expression +0:51 Constant: +0:51 2 (const int) +0:? Sequence +0:52 switch +0:52 condition +0:52 'd' ( uniform mediump int) +0:52 body +0:52 Sequence +0:53 case: with expression +0:53 Constant: +0:53 1 (const int) +0:? Sequence +0:54 move second child to first child ( temp highp float) +0:54 'f' ( temp highp float) +0:54 component-wise multiply ( temp highp float) +0:54 component-wise multiply ( temp highp float) +0:54 'x' ( smooth in highp float) +0:54 'x' ( smooth in highp float) +0:54 'x' ( smooth in highp float) +0:55 Branch: Break +0:56 case: with expression +0:56 Constant: +0:56 2 (const int) +0:? Sequence +0:57 move second child to first child ( temp highp float) +0:57 'f' ( temp highp float) +0:57 component-wise multiply ( temp highp float) +0:57 'x' ( smooth in highp float) +0:57 'x' ( smooth in highp float) +0:58 Branch: Break +0:60 Branch: Break +0:61 default: +0:? Sequence +0:62 move second child to first child ( temp highp float) +0:62 'f' ( temp highp float) +0:62 tangent ( global highp float) +0:62 'x' ( smooth in highp float) +0:63 case: with expression +0:63 Constant: +0:63 1 (const int) +0:? Sequence +0:64 Branch: Break +0:65 case: with expression +0:65 Constant: +0:65 3.800000 +0:? Sequence +0:66 Branch: Break +0:67 case: with expression +0:67 'c' ( uniform mediump int) +0:? Sequence +0:68 Branch: Break +0:71 switch +0:71 condition +0:71 'c' ( uniform mediump int) +0:71 body +0:71 Sequence +0:72 case: with expression +0:72 Constant: +0:72 1 (const int) +0:? Sequence +0:73 move second child to first child ( temp highp float) +0:73 'f' ( temp highp float) +0:73 sine ( global highp float) +0:73 'x' ( smooth in highp float) +0:74 Branch: Break +0:75 case: with expression +0:75 Constant: +0:75 2 (const int) +0:? Sequence +0:76 switch +0:76 condition +0:76 'd' ( uniform mediump int) +0:76 body +0:76 Sequence +0:77 case: with expression +0:77 Constant: +0:77 1 (const int) +0:? Sequence +0:78 move second child to first child ( temp highp float) +0:78 'f' ( temp highp float) +0:78 component-wise multiply ( temp highp float) +0:78 component-wise multiply ( temp highp float) +0:78 'x' ( smooth in highp float) +0:78 'x' ( smooth in highp float) +0:78 'x' ( smooth in highp float) +0:79 Branch: Break +0:80 case: with expression +0:80 Constant: +0:80 2 (const int) +0:? Sequence +0:81 move second child to first child ( temp highp float) +0:81 'f' ( temp highp float) +0:81 component-wise multiply ( temp highp float) +0:81 'x' ( smooth in highp float) +0:81 'x' ( smooth in highp float) +0:82 Branch: Break +0:84 Branch: Break +0:85 default: +0:? Sequence +0:86 move second child to first child ( temp highp float) +0:86 'f' ( temp highp float) +0:86 tangent ( global highp float) +0:86 'x' ( smooth in highp float) +0:89 Branch: Break +0:91 switch +0:91 condition +0:91 'c' ( uniform mediump int) +0:91 body +0:91 Sequence +0:92 case: with expression +0:92 Constant: +0:92 1 (const int) +0:? Sequence +0:93 move second child to first child ( temp highp float) +0:93 'f' ( temp highp float) +0:93 sine ( global highp float) +0:93 'x' ( smooth in highp float) +0:94 Branch: Break +0:95 case: with expression +0:95 Constant: +0:95 2 (const int) +0:? Sequence +0:96 switch +0:96 condition +0:96 'd' ( uniform mediump int) +0:96 body +0:96 Sequence +0:97 case: with expression +0:97 Constant: +0:97 1 (const int) +0:? Sequence +0:? Sequence +0:100 Branch: Break +0:102 move second child to first child ( temp highp float) +0:102 'f' ( temp highp float) +0:102 component-wise multiply ( temp highp float) +0:102 component-wise multiply ( temp highp float) +0:102 'x' ( smooth in highp float) +0:102 'x' ( smooth in highp float) +0:102 'x' ( smooth in highp float) +0:103 Test condition and select ( temp void) +0:103 Condition +0:103 Compare Less Than ( temp bool) +0:103 'c' ( uniform mediump int) +0:103 'd' ( uniform mediump int) +0:103 true case +0:? Sequence +0:105 move second child to first child ( temp highp float) +0:105 'f' ( temp highp float) +0:105 component-wise multiply ( temp highp float) +0:105 'x' ( smooth in highp float) +0:105 'x' ( smooth in highp float) +0:107 Test condition and select ( temp void) +0:107 Condition +0:107 Compare Less Than ( temp bool) +0:107 'd' ( uniform mediump int) +0:107 'c' ( uniform mediump int) +0:107 true case is null +0:109 Branch: Break +0:111 Branch: Break +0:112 case: with expression +0:112 Constant: +0:112 4 (const int) +0:? Sequence +0:113 move second child to first child ( temp highp float) +0:113 'f' ( temp highp float) +0:113 tangent ( global highp float) +0:113 'x' ( smooth in highp float) +0:114 Test condition and select ( temp void) +0:114 Condition +0:114 Compare Less Than ( temp bool) +0:114 'f' ( temp highp float) +0:114 Constant: +0:114 0.000000 +0:114 true case is null +0:116 Branch: Break +0:122 switch +0:122 condition +0:122 Constant: +0:122 0 (const int) +0:122 body +0:122 Sequence +0:123 default: +0:? Sequence +0:124 Sequence +0:124 move second child to first child ( temp mediump int) +0:124 'onlyInSwitch' ( temp mediump int) +0:124 Constant: +0:124 0 (const int) +0:126 'onlyInSwitch' ( temp float) +0:128 switch +0:128 condition +0:128 Constant: +0:128 0 (const int) +0:128 body +0:128 Sequence +0:129 default: +0:128 Sequence +0:128 Branch: Break +0:133 switch +0:133 condition +0:133 'c' ( uniform mediump int) +0:133 body +0:133 Sequence +0:134 case: with expression +0:134 Constant: +0:134 1 (const int) +0:? Sequence +0:? Sequence +0:137 Branch: Break +0:139 case: with expression +0:139 Constant: +0:139 2 (const int) +0:? Sequence +0:140 'nestedX' ( temp float) +0:143 Branch: Break +0:144 case: with expression +0:144 Constant: +0:144 3 (const int) +0:? Sequence +0:146 Branch: Break +0:147 Branch: Break +0:148 case: with expression +0:148 Constant: +0:148 4 (const int) +0:? Sequence +0:149 Sequence +0:149 move second child to first child ( temp mediump int) +0:149 'linearY' ( temp mediump int) +0:149 'linearZ' ( temp mediump int) +0:150 Branch: Break +0:151 case: with expression +0:151 Constant: +0:151 5 (const int) +0:? Sequence +0:153 Branch: Break +0:154 case: with expression +0:154 Constant: +0:154 6 (const int) +0:? Sequence +0:155 Constant: +0:155 4 (const int) +0:157 'nestedZ' ( temp float) +0:? Linker Objects +0:? 'c' ( uniform mediump int) +0:? 'd' ( uniform mediump int) +0:? 'x' ( smooth in highp float) + + +Linked fragment stage: + + +Shader version: 300 +ERROR: node is still EOpNull! +0:6 Function Definition: main( ( global void) +0:6 Function Parameters: +0:? Sequence +0:11 'f' ( temp highp float) +0:14 'a' ( temp 2-element array of mediump int) +0:17 'c' ( uniform mediump int) +0:21 switch +0:21 condition +0:21 'c' ( uniform mediump int) +0:21 body +0:21 Sequence +0:23 case: with expression +0:23 Constant: +0:23 2 (const int) +0:21 Sequence +0:21 Branch: Break +0:26 switch +0:26 condition +0:26 'c' ( uniform mediump int) +0:26 body +0:26 Sequence +0:28 Sequence +0:28 move second child to first child ( temp highp float) +0:28 'f' ( temp highp float) +0:28 sine ( global highp float) +0:28 'x' ( smooth in highp float) +0:29 case: with expression +0:29 Constant: +0:29 2 (const int) +0:? Sequence +0:30 move second child to first child ( temp highp float) +0:30 'f' ( temp highp float) +0:30 cosine ( global highp float) +0:30 'x' ( smooth in highp float) +0:31 Branch: Break +0:34 switch +0:34 condition +0:34 'c' ( uniform mediump int) +0:34 body +0:34 Sequence +0:35 default: +0:? Sequence +0:36 Branch: Break +0:37 case: with expression +0:37 Constant: +0:37 1 (const int) +0:? Sequence +0:38 move second child to first child ( temp highp float) +0:38 'f' ( temp highp float) +0:38 sine ( global highp float) +0:38 'x' ( smooth in highp float) +0:39 Branch: Break +0:40 case: with expression +0:40 Constant: +0:40 2 (const int) +0:? Sequence +0:41 move second child to first child ( temp highp float) +0:41 'f' ( temp highp float) +0:41 cosine ( global highp float) +0:41 'x' ( smooth in highp float) +0:42 Branch: Break +0:43 default: +0:? Sequence +0:44 move second child to first child ( temp highp float) +0:44 'f' ( temp highp float) +0:44 tangent ( global highp float) +0:44 'x' ( smooth in highp float) +0:47 switch +0:47 condition +0:47 'c' ( uniform mediump int) +0:47 body +0:47 Sequence +0:48 case: with expression +0:48 Constant: +0:48 1 (const int) +0:? Sequence +0:49 move second child to first child ( temp highp float) +0:49 'f' ( temp highp float) +0:49 sine ( global highp float) +0:49 'x' ( smooth in highp float) +0:50 Branch: Break +0:51 case: with expression +0:51 Constant: +0:51 2 (const int) +0:? Sequence +0:52 switch +0:52 condition +0:52 'd' ( uniform mediump int) +0:52 body +0:52 Sequence +0:53 case: with expression +0:53 Constant: +0:53 1 (const int) +0:? Sequence +0:54 move second child to first child ( temp highp float) +0:54 'f' ( temp highp float) +0:54 component-wise multiply ( temp highp float) +0:54 component-wise multiply ( temp highp float) +0:54 'x' ( smooth in highp float) +0:54 'x' ( smooth in highp float) +0:54 'x' ( smooth in highp float) +0:55 Branch: Break +0:56 case: with expression +0:56 Constant: +0:56 2 (const int) +0:? Sequence +0:57 move second child to first child ( temp highp float) +0:57 'f' ( temp highp float) +0:57 component-wise multiply ( temp highp float) +0:57 'x' ( smooth in highp float) +0:57 'x' ( smooth in highp float) +0:58 Branch: Break +0:60 Branch: Break +0:61 default: +0:? Sequence +0:62 move second child to first child ( temp highp float) +0:62 'f' ( temp highp float) +0:62 tangent ( global highp float) +0:62 'x' ( smooth in highp float) +0:63 case: with expression +0:63 Constant: +0:63 1 (const int) +0:? Sequence +0:64 Branch: Break +0:65 case: with expression +0:65 Constant: +0:65 3.800000 +0:? Sequence +0:66 Branch: Break +0:67 case: with expression +0:67 'c' ( uniform mediump int) +0:? Sequence +0:68 Branch: Break +0:71 switch +0:71 condition +0:71 'c' ( uniform mediump int) +0:71 body +0:71 Sequence +0:72 case: with expression +0:72 Constant: +0:72 1 (const int) +0:? Sequence +0:73 move second child to first child ( temp highp float) +0:73 'f' ( temp highp float) +0:73 sine ( global highp float) +0:73 'x' ( smooth in highp float) +0:74 Branch: Break +0:75 case: with expression +0:75 Constant: +0:75 2 (const int) +0:? Sequence +0:76 switch +0:76 condition +0:76 'd' ( uniform mediump int) +0:76 body +0:76 Sequence +0:77 case: with expression +0:77 Constant: +0:77 1 (const int) +0:? Sequence +0:78 move second child to first child ( temp highp float) +0:78 'f' ( temp highp float) +0:78 component-wise multiply ( temp highp float) +0:78 component-wise multiply ( temp highp float) +0:78 'x' ( smooth in highp float) +0:78 'x' ( smooth in highp float) +0:78 'x' ( smooth in highp float) +0:79 Branch: Break +0:80 case: with expression +0:80 Constant: +0:80 2 (const int) +0:? Sequence +0:81 move second child to first child ( temp highp float) +0:81 'f' ( temp highp float) +0:81 component-wise multiply ( temp highp float) +0:81 'x' ( smooth in highp float) +0:81 'x' ( smooth in highp float) +0:82 Branch: Break +0:84 Branch: Break +0:85 default: +0:? Sequence +0:86 move second child to first child ( temp highp float) +0:86 'f' ( temp highp float) +0:86 tangent ( global highp float) +0:86 'x' ( smooth in highp float) +0:89 Branch: Break +0:91 switch +0:91 condition +0:91 'c' ( uniform mediump int) +0:91 body +0:91 Sequence +0:92 case: with expression +0:92 Constant: +0:92 1 (const int) +0:? Sequence +0:93 move second child to first child ( temp highp float) +0:93 'f' ( temp highp float) +0:93 sine ( global highp float) +0:93 'x' ( smooth in highp float) +0:94 Branch: Break +0:95 case: with expression +0:95 Constant: +0:95 2 (const int) +0:? Sequence +0:96 switch +0:96 condition +0:96 'd' ( uniform mediump int) +0:96 body +0:96 Sequence +0:97 case: with expression +0:97 Constant: +0:97 1 (const int) +0:? Sequence +0:? Sequence +0:100 Branch: Break +0:102 move second child to first child ( temp highp float) +0:102 'f' ( temp highp float) +0:102 component-wise multiply ( temp highp float) +0:102 component-wise multiply ( temp highp float) +0:102 'x' ( smooth in highp float) +0:102 'x' ( smooth in highp float) +0:102 'x' ( smooth in highp float) +0:103 Test condition and select ( temp void) +0:103 Condition +0:103 Compare Less Than ( temp bool) +0:103 'c' ( uniform mediump int) +0:103 'd' ( uniform mediump int) +0:103 true case +0:? Sequence +0:105 move second child to first child ( temp highp float) +0:105 'f' ( temp highp float) +0:105 component-wise multiply ( temp highp float) +0:105 'x' ( smooth in highp float) +0:105 'x' ( smooth in highp float) +0:107 Test condition and select ( temp void) +0:107 Condition +0:107 Compare Less Than ( temp bool) +0:107 'd' ( uniform mediump int) +0:107 'c' ( uniform mediump int) +0:107 true case is null +0:109 Branch: Break +0:111 Branch: Break +0:112 case: with expression +0:112 Constant: +0:112 4 (const int) +0:? Sequence +0:113 move second child to first child ( temp highp float) +0:113 'f' ( temp highp float) +0:113 tangent ( global highp float) +0:113 'x' ( smooth in highp float) +0:114 Test condition and select ( temp void) +0:114 Condition +0:114 Compare Less Than ( temp bool) +0:114 'f' ( temp highp float) +0:114 Constant: +0:114 0.000000 +0:114 true case is null +0:116 Branch: Break +0:122 switch +0:122 condition +0:122 Constant: +0:122 0 (const int) +0:122 body +0:122 Sequence +0:123 default: +0:? Sequence +0:124 Sequence +0:124 move second child to first child ( temp mediump int) +0:124 'onlyInSwitch' ( temp mediump int) +0:124 Constant: +0:124 0 (const int) +0:126 'onlyInSwitch' ( temp float) +0:128 switch +0:128 condition +0:128 Constant: +0:128 0 (const int) +0:128 body +0:128 Sequence +0:129 default: +0:128 Sequence +0:128 Branch: Break +0:133 switch +0:133 condition +0:133 'c' ( uniform mediump int) +0:133 body +0:133 Sequence +0:134 case: with expression +0:134 Constant: +0:134 1 (const int) +0:? Sequence +0:? Sequence +0:137 Branch: Break +0:139 case: with expression +0:139 Constant: +0:139 2 (const int) +0:? Sequence +0:140 'nestedX' ( temp float) +0:143 Branch: Break +0:144 case: with expression +0:144 Constant: +0:144 3 (const int) +0:? Sequence +0:146 Branch: Break +0:147 Branch: Break +0:148 case: with expression +0:148 Constant: +0:148 4 (const int) +0:? Sequence +0:149 Sequence +0:149 move second child to first child ( temp mediump int) +0:149 'linearY' ( temp mediump int) +0:149 'linearZ' ( temp mediump int) +0:150 Branch: Break +0:151 case: with expression +0:151 Constant: +0:151 5 (const int) +0:? Sequence +0:153 Branch: Break +0:154 case: with expression +0:154 Constant: +0:154 6 (const int) +0:? Sequence +0:155 Constant: +0:155 4 (const int) +0:157 'nestedZ' ( temp float) +0:? Linker Objects +0:? 'c' ( uniform mediump int) +0:? 'd' ( uniform mediump int) +0:? 'x' ( smooth in highp float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/swizzle.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/swizzle.frag.out new file mode 100644 index 0000000..b66a945 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/swizzle.frag.out @@ -0,0 +1,423 @@ +swizzle.frag +Shader version: 110 +0:? Sequence +0:9 Function Definition: main( ( global void) +0:9 Function Parameters: +0:11 Sequence +0:11 Sequence +0:11 move second child to first child ( temp float) +0:11 'blendscale' ( temp float) +0:11 Constant: +0:11 1.789000 +0:13 Sequence +0:13 move second child to first child ( temp 4-component vector of float) +0:13 'w' ( temp 4-component vector of float) +0:13 'u' ( uniform 4-component vector of float) +0:15 Sequence +0:15 move second child to first child ( temp 4-component vector of float) +0:15 'w_dep' ( temp 4-component vector of float) +0:15 'u' ( uniform 4-component vector of float) +0:16 Sequence +0:16 move second child to first child ( temp 4-component vector of float) +0:16 'w_reorder' ( temp 4-component vector of float) +0:16 'u' ( uniform 4-component vector of float) +0:17 Sequence +0:17 move second child to first child ( temp 4-component vector of float) +0:17 'w2' ( temp 4-component vector of float) +0:17 'u' ( uniform 4-component vector of float) +0:18 Sequence +0:18 move second child to first child ( temp 4-component vector of float) +0:18 'w_flow' ( temp 4-component vector of float) +0:18 'u' ( uniform 4-component vector of float) +0:20 move second child to first child ( temp float) +0:20 direct index ( temp float) +0:20 'w_reorder' ( temp 4-component vector of float) +0:20 Constant: +0:20 2 (const int) +0:20 'blendscale' ( temp float) +0:22 move second child to first child ( temp 2-component vector of float) +0:22 vector swizzle ( temp 2-component vector of float) +0:22 'w' ( temp 4-component vector of float) +0:22 Sequence +0:22 Constant: +0:22 3 (const int) +0:22 Constant: +0:22 1 (const int) +0:22 't' ( smooth in 2-component vector of float) +0:24 move second child to first child ( temp float) +0:24 direct index ( temp float) +0:24 'w_reorder' ( temp 4-component vector of float) +0:24 Constant: +0:24 0 (const int) +0:24 'blendscale' ( temp float) +0:26 move second child to first child ( temp 4-component vector of float) +0:26 vector swizzle ( temp 4-component vector of float) +0:26 'w2' ( temp 4-component vector of float) +0:26 Sequence +0:26 Constant: +0:26 0 (const int) +0:26 Constant: +0:26 1 (const int) +0:26 Constant: +0:26 2 (const int) +0:26 Constant: +0:26 3 (const int) +0:26 vector swizzle ( temp 4-component vector of float) +0:26 'u' ( uniform 4-component vector of float) +0:26 Sequence +0:26 Constant: +0:26 2 (const int) +0:26 Constant: +0:26 3 (const int) +0:26 Constant: +0:26 0 (const int) +0:26 Constant: +0:26 1 (const int) +0:28 move second child to first child ( temp float) +0:28 direct index ( temp float) +0:28 'w_reorder' ( temp 4-component vector of float) +0:28 Constant: +0:28 1 (const int) +0:28 'blendscale' ( temp float) +0:30 move second child to first child ( temp 2-component vector of float) +0:30 vector swizzle ( temp 2-component vector of float) +0:30 'w_dep' ( temp 4-component vector of float) +0:30 Sequence +0:30 Constant: +0:30 0 (const int) +0:30 Constant: +0:30 1 (const int) +0:30 vector swizzle ( temp 2-component vector of float) +0:30 'w2' ( temp 4-component vector of float) +0:30 Sequence +0:30 Constant: +0:30 0 (const int) +0:30 Constant: +0:30 2 (const int) +0:31 move second child to first child ( temp 2-component vector of float) +0:31 vector swizzle ( temp 2-component vector of float) +0:31 'w_dep' ( temp 4-component vector of float) +0:31 Sequence +0:31 Constant: +0:31 2 (const int) +0:31 Constant: +0:31 3 (const int) +0:31 't' ( smooth in 2-component vector of float) +0:33 move second child to first child ( temp 2-component vector of float) +0:33 vector swizzle ( temp 2-component vector of float) +0:33 'w_undef' ( temp 4-component vector of float) +0:33 Sequence +0:33 Constant: +0:33 0 (const int) +0:33 Constant: +0:33 1 (const int) +0:33 vector swizzle ( temp 2-component vector of float) +0:33 'u' ( uniform 4-component vector of float) +0:33 Sequence +0:33 Constant: +0:33 2 (const int) +0:33 Constant: +0:33 3 (const int) +0:35 Test condition and select ( temp void) +0:35 Condition +0:35 'p' ( uniform bool) +0:35 true case +0:36 move second child to first child ( temp float) +0:36 direct index ( temp float) +0:36 'w_flow' ( temp 4-component vector of float) +0:36 Constant: +0:36 0 (const int) +0:36 direct index ( temp float) +0:36 't' ( smooth in 2-component vector of float) +0:36 Constant: +0:36 0 (const int) +0:35 false case +0:38 move second child to first child ( temp float) +0:38 direct index ( temp float) +0:38 'w_flow' ( temp 4-component vector of float) +0:38 Constant: +0:38 0 (const int) +0:38 direct index ( temp float) +0:38 't' ( smooth in 2-component vector of float) +0:38 Constant: +0:38 1 (const int) +0:40 move second child to first child ( temp 4-component vector of float) +0:40 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:40 mix ( global 4-component vector of float) +0:40 'w_reorder' ( temp 4-component vector of float) +0:40 'w_undef' ( temp 4-component vector of float) +0:40 component-wise multiply ( temp 4-component vector of float) +0:40 component-wise multiply ( temp 4-component vector of float) +0:40 component-wise multiply ( temp 4-component vector of float) +0:40 'w' ( temp 4-component vector of float) +0:40 'w2' ( temp 4-component vector of float) +0:40 'w_dep' ( temp 4-component vector of float) +0:40 'w_flow' ( temp 4-component vector of float) +0:42 Sequence +0:42 move second child to first child ( temp 2-component vector of float) +0:42 'c' ( temp 2-component vector of float) +0:42 't' ( smooth in 2-component vector of float) +0:43 Sequence +0:43 move second child to first child ( temp 4-component vector of float) +0:43 'rep' ( temp 4-component vector of float) +0:43 Constant: +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 1.000000 +0:45 Test condition and select ( temp void) +0:45 Condition +0:45 Compare Less Than ( temp bool) +0:45 direct index ( temp float) +0:45 'c' ( temp 2-component vector of float) +0:45 Constant: +0:45 0 (const int) +0:45 Constant: +0:45 0.000000 +0:45 true case +0:46 multiply second child into first child ( temp float) +0:46 direct index ( temp float) +0:46 'c' ( temp 2-component vector of float) +0:46 Constant: +0:46 0 (const int) +0:46 Constant: +0:46 -1.000000 +0:48 Test condition and select ( temp void) +0:48 Condition +0:48 Compare Less Than or Equal ( temp bool) +0:48 direct index ( temp float) +0:48 'c' ( temp 2-component vector of float) +0:48 Constant: +0:48 0 (const int) +0:48 Constant: +0:48 1.000000 +0:48 true case +0:49 move second child to first child ( temp float) +0:49 direct index ( temp float) +0:49 'rep' ( temp 4-component vector of float) +0:49 Constant: +0:49 0 (const int) +0:49 Constant: +0:49 3.400000 +0:51 add second child into first child ( temp 4-component vector of float) +0:51 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:51 'rep' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'blend' ( uniform float) +0:? 'u' ( uniform 4-component vector of float) +0:? 'p' ( uniform bool) +0:? 't' ( smooth in 2-component vector of float) + + +Linked fragment stage: + + +Shader version: 110 +0:? Sequence +0:9 Function Definition: main( ( global void) +0:9 Function Parameters: +0:11 Sequence +0:11 Sequence +0:11 move second child to first child ( temp float) +0:11 'blendscale' ( temp float) +0:11 Constant: +0:11 1.789000 +0:13 Sequence +0:13 move second child to first child ( temp 4-component vector of float) +0:13 'w' ( temp 4-component vector of float) +0:13 'u' ( uniform 4-component vector of float) +0:15 Sequence +0:15 move second child to first child ( temp 4-component vector of float) +0:15 'w_dep' ( temp 4-component vector of float) +0:15 'u' ( uniform 4-component vector of float) +0:16 Sequence +0:16 move second child to first child ( temp 4-component vector of float) +0:16 'w_reorder' ( temp 4-component vector of float) +0:16 'u' ( uniform 4-component vector of float) +0:17 Sequence +0:17 move second child to first child ( temp 4-component vector of float) +0:17 'w2' ( temp 4-component vector of float) +0:17 'u' ( uniform 4-component vector of float) +0:18 Sequence +0:18 move second child to first child ( temp 4-component vector of float) +0:18 'w_flow' ( temp 4-component vector of float) +0:18 'u' ( uniform 4-component vector of float) +0:20 move second child to first child ( temp float) +0:20 direct index ( temp float) +0:20 'w_reorder' ( temp 4-component vector of float) +0:20 Constant: +0:20 2 (const int) +0:20 'blendscale' ( temp float) +0:22 move second child to first child ( temp 2-component vector of float) +0:22 vector swizzle ( temp 2-component vector of float) +0:22 'w' ( temp 4-component vector of float) +0:22 Sequence +0:22 Constant: +0:22 3 (const int) +0:22 Constant: +0:22 1 (const int) +0:22 't' ( smooth in 2-component vector of float) +0:24 move second child to first child ( temp float) +0:24 direct index ( temp float) +0:24 'w_reorder' ( temp 4-component vector of float) +0:24 Constant: +0:24 0 (const int) +0:24 'blendscale' ( temp float) +0:26 move second child to first child ( temp 4-component vector of float) +0:26 vector swizzle ( temp 4-component vector of float) +0:26 'w2' ( temp 4-component vector of float) +0:26 Sequence +0:26 Constant: +0:26 0 (const int) +0:26 Constant: +0:26 1 (const int) +0:26 Constant: +0:26 2 (const int) +0:26 Constant: +0:26 3 (const int) +0:26 vector swizzle ( temp 4-component vector of float) +0:26 'u' ( uniform 4-component vector of float) +0:26 Sequence +0:26 Constant: +0:26 2 (const int) +0:26 Constant: +0:26 3 (const int) +0:26 Constant: +0:26 0 (const int) +0:26 Constant: +0:26 1 (const int) +0:28 move second child to first child ( temp float) +0:28 direct index ( temp float) +0:28 'w_reorder' ( temp 4-component vector of float) +0:28 Constant: +0:28 1 (const int) +0:28 'blendscale' ( temp float) +0:30 move second child to first child ( temp 2-component vector of float) +0:30 vector swizzle ( temp 2-component vector of float) +0:30 'w_dep' ( temp 4-component vector of float) +0:30 Sequence +0:30 Constant: +0:30 0 (const int) +0:30 Constant: +0:30 1 (const int) +0:30 vector swizzle ( temp 2-component vector of float) +0:30 'w2' ( temp 4-component vector of float) +0:30 Sequence +0:30 Constant: +0:30 0 (const int) +0:30 Constant: +0:30 2 (const int) +0:31 move second child to first child ( temp 2-component vector of float) +0:31 vector swizzle ( temp 2-component vector of float) +0:31 'w_dep' ( temp 4-component vector of float) +0:31 Sequence +0:31 Constant: +0:31 2 (const int) +0:31 Constant: +0:31 3 (const int) +0:31 't' ( smooth in 2-component vector of float) +0:33 move second child to first child ( temp 2-component vector of float) +0:33 vector swizzle ( temp 2-component vector of float) +0:33 'w_undef' ( temp 4-component vector of float) +0:33 Sequence +0:33 Constant: +0:33 0 (const int) +0:33 Constant: +0:33 1 (const int) +0:33 vector swizzle ( temp 2-component vector of float) +0:33 'u' ( uniform 4-component vector of float) +0:33 Sequence +0:33 Constant: +0:33 2 (const int) +0:33 Constant: +0:33 3 (const int) +0:35 Test condition and select ( temp void) +0:35 Condition +0:35 'p' ( uniform bool) +0:35 true case +0:36 move second child to first child ( temp float) +0:36 direct index ( temp float) +0:36 'w_flow' ( temp 4-component vector of float) +0:36 Constant: +0:36 0 (const int) +0:36 direct index ( temp float) +0:36 't' ( smooth in 2-component vector of float) +0:36 Constant: +0:36 0 (const int) +0:35 false case +0:38 move second child to first child ( temp float) +0:38 direct index ( temp float) +0:38 'w_flow' ( temp 4-component vector of float) +0:38 Constant: +0:38 0 (const int) +0:38 direct index ( temp float) +0:38 't' ( smooth in 2-component vector of float) +0:38 Constant: +0:38 1 (const int) +0:40 move second child to first child ( temp 4-component vector of float) +0:40 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:40 mix ( global 4-component vector of float) +0:40 'w_reorder' ( temp 4-component vector of float) +0:40 'w_undef' ( temp 4-component vector of float) +0:40 component-wise multiply ( temp 4-component vector of float) +0:40 component-wise multiply ( temp 4-component vector of float) +0:40 component-wise multiply ( temp 4-component vector of float) +0:40 'w' ( temp 4-component vector of float) +0:40 'w2' ( temp 4-component vector of float) +0:40 'w_dep' ( temp 4-component vector of float) +0:40 'w_flow' ( temp 4-component vector of float) +0:42 Sequence +0:42 move second child to first child ( temp 2-component vector of float) +0:42 'c' ( temp 2-component vector of float) +0:42 't' ( smooth in 2-component vector of float) +0:43 Sequence +0:43 move second child to first child ( temp 4-component vector of float) +0:43 'rep' ( temp 4-component vector of float) +0:43 Constant: +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 1.000000 +0:45 Test condition and select ( temp void) +0:45 Condition +0:45 Compare Less Than ( temp bool) +0:45 direct index ( temp float) +0:45 'c' ( temp 2-component vector of float) +0:45 Constant: +0:45 0 (const int) +0:45 Constant: +0:45 0.000000 +0:45 true case +0:46 multiply second child into first child ( temp float) +0:46 direct index ( temp float) +0:46 'c' ( temp 2-component vector of float) +0:46 Constant: +0:46 0 (const int) +0:46 Constant: +0:46 -1.000000 +0:48 Test condition and select ( temp void) +0:48 Condition +0:48 Compare Less Than or Equal ( temp bool) +0:48 direct index ( temp float) +0:48 'c' ( temp 2-component vector of float) +0:48 Constant: +0:48 0 (const int) +0:48 Constant: +0:48 1.000000 +0:48 true case +0:49 move second child to first child ( temp float) +0:49 direct index ( temp float) +0:49 'rep' ( temp 4-component vector of float) +0:49 Constant: +0:49 0 (const int) +0:49 Constant: +0:49 3.400000 +0:51 add second child into first child ( temp 4-component vector of float) +0:51 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:51 'rep' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'blend' ( uniform float) +0:? 'u' ( uniform 4-component vector of float) +0:? 'p' ( uniform bool) +0:? 't' ( smooth in 2-component vector of float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/syntaxError.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/syntaxError.frag.out new file mode 100644 index 0000000..cdda760 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/syntaxError.frag.out @@ -0,0 +1,24 @@ +syntaxError.frag +ERROR: 0:9: 'vec5' : undeclared identifier +ERROR: 0:9: '' : syntax error +ERROR: 2 compilation errors. No code generated. + + +Shader version: 120 +ERROR: node is still EOpNull! +0:? Linker Objects +0:? 'bigColor' ( uniform 4-component vector of float) +0:? 'BaseColor' ( smooth in 4-component vector of float) +0:? 'd' ( uniform float) + + +Linked fragment stage: + + +Shader version: 120 +ERROR: node is still EOpNull! +0:? Linker Objects +0:? 'bigColor' ( uniform 4-component vector of float) +0:? 'BaseColor' ( smooth in 4-component vector of float) +0:? 'd' ( uniform float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/test.conf b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/test.conf new file mode 100644 index 0000000..f156c5c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/test.conf @@ -0,0 +1,92 @@ +MaxLights 32 +MaxClipPlanes 6 +MaxTextureUnits 32 +MaxTextureCoords 32 +MaxVertexAttribs 64 +MaxVertexUniformComponents 4096 +MaxVaryingFloats 64 +MaxVertexTextureImageUnits 32 +MaxCombinedTextureImageUnits 80 +MaxTextureImageUnits 32 +MaxFragmentUniformComponents 4096 +MaxDrawBuffers 32 +MaxVertexUniformVectors 128 +MaxVaryingVectors 8 +MaxFragmentUniformVectors 16 +MaxVertexOutputVectors 16 +MaxFragmentInputVectors 15 +MinProgramTexelOffset -8 +MaxProgramTexelOffset 7 +MaxClipDistances 8 +MaxComputeWorkGroupCountX 65535 +MaxComputeWorkGroupCountY 65535 +MaxComputeWorkGroupCountZ 65535 +MaxComputeWorkGroupSizeX 1024 +MaxComputeWorkGroupSizeY 1024 +MaxComputeWorkGroupSizeZ 64 +MaxComputeUniformComponents 1024 +MaxComputeTextureImageUnits 16 +MaxComputeImageUniforms 8 +MaxComputeAtomicCounters 8 +MaxComputeAtomicCounterBuffers 1 +MaxVaryingComponents 60 +MaxVertexOutputComponents 64 +MaxGeometryInputComponents 64 +MaxGeometryOutputComponents 128 +MaxFragmentInputComponents 128 +MaxImageUnits 8 +MaxCombinedImageUnitsAndFragmentOutputs 8 +MaxCombinedShaderOutputResources 8 +MaxImageSamples 0 +MaxVertexImageUniforms 0 +MaxTessControlImageUniforms 0 +MaxTessEvaluationImageUniforms 0 +MaxGeometryImageUniforms 0 +MaxFragmentImageUniforms 8 +MaxCombinedImageUniforms 8 +MaxGeometryTextureImageUnits 16 +MaxGeometryOutputVertices 256 +MaxGeometryTotalOutputComponents 1024 +MaxGeometryUniformComponents 1024 +MaxGeometryVaryingComponents 64 +MaxTessControlInputComponents 128 +MaxTessControlOutputComponents 128 +MaxTessControlTextureImageUnits 16 +MaxTessControlUniformComponents 1024 +MaxTessControlTotalOutputComponents 4096 +MaxTessEvaluationInputComponents 128 +MaxTessEvaluationOutputComponents 128 +MaxTessEvaluationTextureImageUnits 16 +MaxTessEvaluationUniformComponents 1024 +MaxTessPatchComponents 120 +MaxPatchVertices 32 +MaxTessGenLevel 64 +MaxViewports 16 +MaxVertexAtomicCounters 0 +MaxTessControlAtomicCounters 0 +MaxTessEvaluationAtomicCounters 0 +MaxGeometryAtomicCounters 0 +MaxFragmentAtomicCounters 8 +MaxCombinedAtomicCounters 8 +MaxAtomicCounterBindings 1 +MaxVertexAtomicCounterBuffers 0 +MaxTessControlAtomicCounterBuffers 0 +MaxTessEvaluationAtomicCounterBuffers 0 +MaxGeometryAtomicCounterBuffers 0 +MaxFragmentAtomicCounterBuffers 1 +MaxCombinedAtomicCounterBuffers 1 +MaxAtomicCounterBufferSize 16384 +MaxTransformFeedbackBuffers 4 +MaxTransformFeedbackInterleavedComponents 64 +MaxCullDistances 8 +MaxCombinedClipAndCullDistances 8 +MaxSamples 4 +nonInductiveForLoops 1 +whileLoops 1 +doWhileLoops 1 +generalUniformIndexing 1 +generalAttributeMatrixVectorIndexing 1 +generalVaryingIndexing 1 +generalSamplerIndexing 1 +generalVariableIndexing 1 +generalConstantMatrixVectorIndexing 1 diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/test.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/test.frag.out new file mode 100644 index 0000000..4f6faaf --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/test.frag.out @@ -0,0 +1,115 @@ +test.frag +Shader version: 110 +0:? Sequence +0:13 Function Definition: main( ( global void) +0:13 Function Parameters: +0:15 Sequence +0:15 Sequence +0:15 move second child to first child ( temp float) +0:15 'blendscale' ( temp float) +0:15 Constant: +0:15 1.789000 +0:17 Sequence +0:17 move second child to first child ( temp 4-component vector of float) +0:17 'v' ( temp 4-component vector of float) +0:17 vector swizzle ( temp 4-component vector of float) +0:17 texture ( global 4-component vector of float) +0:17 'texSampler2D' ( uniform sampler2D) +0:17 divide ( temp 2-component vector of float) +0:17 add ( temp 2-component vector of float) +0:17 't' ( smooth in 2-component vector of float) +0:17 'scale' ( uniform 2-component vector of float) +0:17 'scale' ( uniform 2-component vector of float) +0:17 Sequence +0:17 Constant: +0:17 3 (const int) +0:17 Constant: +0:17 2 (const int) +0:17 Constant: +0:17 1 (const int) +0:17 Constant: +0:17 0 (const int) +0:19 Sequence +0:19 move second child to first child ( temp 4-component vector of float) +0:19 'w' ( temp 4-component vector of float) +0:19 add ( temp 4-component vector of float) +0:19 texture ( global 4-component vector of float) +0:19 'texSampler3D' ( uniform sampler3D) +0:19 'coords' ( smooth in 3-component vector of float) +0:19 'v' ( temp 4-component vector of float) +0:21 move second child to first child ( temp 4-component vector of float) +0:21 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:21 mix ( global 4-component vector of float) +0:21 'w' ( temp 4-component vector of float) +0:21 'u' ( uniform 4-component vector of float) +0:21 component-wise multiply ( temp float) +0:21 'blend' ( uniform float) +0:21 'blendscale' ( temp float) +0:? Linker Objects +0:? 'texSampler2D' ( uniform sampler2D) +0:? 'texSampler3D' ( uniform sampler3D) +0:? 'blend' ( uniform float) +0:? 'scale' ( uniform 2-component vector of float) +0:? 'u' ( uniform 4-component vector of float) +0:? 't' ( smooth in 2-component vector of float) +0:? 'coords' ( smooth in 3-component vector of float) + + +Linked fragment stage: + + +Shader version: 110 +0:? Sequence +0:13 Function Definition: main( ( global void) +0:13 Function Parameters: +0:15 Sequence +0:15 Sequence +0:15 move second child to first child ( temp float) +0:15 'blendscale' ( temp float) +0:15 Constant: +0:15 1.789000 +0:17 Sequence +0:17 move second child to first child ( temp 4-component vector of float) +0:17 'v' ( temp 4-component vector of float) +0:17 vector swizzle ( temp 4-component vector of float) +0:17 texture ( global 4-component vector of float) +0:17 'texSampler2D' ( uniform sampler2D) +0:17 divide ( temp 2-component vector of float) +0:17 add ( temp 2-component vector of float) +0:17 't' ( smooth in 2-component vector of float) +0:17 'scale' ( uniform 2-component vector of float) +0:17 'scale' ( uniform 2-component vector of float) +0:17 Sequence +0:17 Constant: +0:17 3 (const int) +0:17 Constant: +0:17 2 (const int) +0:17 Constant: +0:17 1 (const int) +0:17 Constant: +0:17 0 (const int) +0:19 Sequence +0:19 move second child to first child ( temp 4-component vector of float) +0:19 'w' ( temp 4-component vector of float) +0:19 add ( temp 4-component vector of float) +0:19 texture ( global 4-component vector of float) +0:19 'texSampler3D' ( uniform sampler3D) +0:19 'coords' ( smooth in 3-component vector of float) +0:19 'v' ( temp 4-component vector of float) +0:21 move second child to first child ( temp 4-component vector of float) +0:21 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:21 mix ( global 4-component vector of float) +0:21 'w' ( temp 4-component vector of float) +0:21 'u' ( uniform 4-component vector of float) +0:21 component-wise multiply ( temp float) +0:21 'blend' ( uniform float) +0:21 'blendscale' ( temp float) +0:? Linker Objects +0:? 'texSampler2D' ( uniform sampler2D) +0:? 'texSampler3D' ( uniform sampler3D) +0:? 'blend' ( uniform float) +0:? 'scale' ( uniform 2-component vector of float) +0:? 'u' ( uniform 4-component vector of float) +0:? 't' ( smooth in 2-component vector of float) +0:? 'coords' ( smooth in 3-component vector of float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/texture.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/texture.frag.out new file mode 100644 index 0000000..8e9a710 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/texture.frag.out @@ -0,0 +1,564 @@ +texture.frag +WARNING: 0:14: varying deprecated in version 130; may be removed in future release +WARNING: 0:15: varying deprecated in version 130; may be removed in future release + +Shader version: 130 +0:? Sequence +0:17 Function Definition: main( ( global void) +0:17 Function Parameters: +0:19 Sequence +0:19 Sequence +0:19 move second child to first child ( temp float) +0:19 'blendscale' ( temp float) +0:19 Constant: +0:19 1.789000 +0:20 Sequence +0:20 move second child to first child ( temp float) +0:20 'bias' ( temp float) +0:20 Constant: +0:20 2.000000 +0:21 Sequence +0:21 move second child to first child ( temp float) +0:21 'lod' ( temp float) +0:21 Constant: +0:21 3.000000 +0:22 Sequence +0:22 move second child to first child ( temp float) +0:22 'proj' ( temp float) +0:22 Constant: +0:22 2.000000 +0:23 Sequence +0:23 move second child to first child ( temp float) +0:23 'coords1D' ( temp float) +0:23 Constant: +0:23 1.789000 +0:24 Sequence +0:24 move second child to first child ( temp 3-component vector of float) +0:24 'coords3D' ( temp 3-component vector of float) +0:24 Constant: +0:24 1.789000 +0:24 2.718000 +0:24 3.453000 +0:25 Sequence +0:25 move second child to first child ( temp 4-component vector of float) +0:25 'coords4D' ( temp 4-component vector of float) +0:25 Constant: +0:25 1.789000 +0:25 2.718000 +0:25 3.453000 +0:25 2.000000 +0:26 Sequence +0:26 move second child to first child ( temp 4-component vector of float) +0:26 'color' ( temp 4-component vector of float) +0:26 Constant: +0:26 0.000000 +0:26 0.000000 +0:26 0.000000 +0:26 0.000000 +0:28 add second child into first child ( temp 4-component vector of float) +0:28 'color' ( temp 4-component vector of float) +0:28 texture ( global 4-component vector of float) +0:28 'texSampler1D' ( uniform sampler1D) +0:28 'coords1D' ( temp float) +0:29 add second child into first child ( temp 4-component vector of float) +0:29 'color' ( temp 4-component vector of float) +0:29 texture ( global 4-component vector of float) +0:29 'texSampler1D' ( uniform sampler1D) +0:29 'coords1D' ( temp float) +0:29 'bias' ( temp float) +0:30 add second child into first child ( temp 4-component vector of float) +0:30 'color' ( temp 4-component vector of float) +0:30 textureProj ( global 4-component vector of float) +0:30 'texSampler1D' ( uniform sampler1D) +0:30 'coords2D' ( smooth in 2-component vector of float) +0:31 add second child into first child ( temp 4-component vector of float) +0:31 'color' ( temp 4-component vector of float) +0:31 textureProj ( global 4-component vector of float) +0:31 'texSampler1D' ( uniform sampler1D) +0:31 'coords4D' ( temp 4-component vector of float) +0:32 add second child into first child ( temp 4-component vector of float) +0:32 'color' ( temp 4-component vector of float) +0:32 textureProj ( global 4-component vector of float) +0:32 'texSampler1D' ( uniform sampler1D) +0:32 'coords2D' ( smooth in 2-component vector of float) +0:32 'bias' ( temp float) +0:33 add second child into first child ( temp 4-component vector of float) +0:33 'color' ( temp 4-component vector of float) +0:33 textureProj ( global 4-component vector of float) +0:33 'texSampler1D' ( uniform sampler1D) +0:33 'coords4D' ( temp 4-component vector of float) +0:33 'bias' ( temp float) +0:35 add second child into first child ( temp 4-component vector of float) +0:35 'color' ( temp 4-component vector of float) +0:35 texture ( global 4-component vector of float) +0:35 'texSampler2D' ( uniform sampler2D) +0:35 'coords2D' ( smooth in 2-component vector of float) +0:36 add second child into first child ( temp 4-component vector of float) +0:36 'color' ( temp 4-component vector of float) +0:36 texture ( global 4-component vector of float) +0:36 'texSampler2D' ( uniform sampler2D) +0:36 'coords2D' ( smooth in 2-component vector of float) +0:36 'bias' ( temp float) +0:37 add second child into first child ( temp 4-component vector of float) +0:37 'color' ( temp 4-component vector of float) +0:37 textureProj ( global 4-component vector of float) +0:37 'texSampler2D' ( uniform sampler2D) +0:37 'coords3D' ( temp 3-component vector of float) +0:38 add second child into first child ( temp 4-component vector of float) +0:38 'color' ( temp 4-component vector of float) +0:38 textureProj ( global 4-component vector of float) +0:38 'texSampler2D' ( uniform sampler2D) +0:38 'coords4D' ( temp 4-component vector of float) +0:38 'bias' ( temp float) +0:40 add second child into first child ( temp 4-component vector of float) +0:40 'color' ( temp 4-component vector of float) +0:40 texture ( global 4-component vector of float) +0:40 'texSampler3D' ( uniform sampler3D) +0:40 'coords3D' ( temp 3-component vector of float) +0:41 add second child into first child ( temp 4-component vector of float) +0:41 'color' ( temp 4-component vector of float) +0:41 texture ( global 4-component vector of float) +0:41 'texSampler3D' ( uniform sampler3D) +0:41 'coords3D' ( temp 3-component vector of float) +0:41 'bias' ( temp float) +0:42 add second child into first child ( temp 4-component vector of float) +0:42 'color' ( temp 4-component vector of float) +0:42 textureProj ( global 4-component vector of float) +0:42 'texSampler3D' ( uniform sampler3D) +0:42 'coords4D' ( temp 4-component vector of float) +0:43 add second child into first child ( temp 4-component vector of float) +0:43 'color' ( temp 4-component vector of float) +0:43 textureProj ( global 4-component vector of float) +0:43 'texSampler3D' ( uniform sampler3D) +0:43 'coords4D' ( temp 4-component vector of float) +0:43 'bias' ( temp float) +0:45 add second child into first child ( temp 4-component vector of float) +0:45 'color' ( temp 4-component vector of float) +0:45 texture ( global 4-component vector of float) +0:45 'texSamplerCube' ( uniform samplerCube) +0:45 'coords3D' ( temp 3-component vector of float) +0:46 add second child into first child ( temp 4-component vector of float) +0:46 'color' ( temp 4-component vector of float) +0:46 texture ( global 4-component vector of float) +0:46 'texSamplerCube' ( uniform samplerCube) +0:46 'coords3D' ( temp 3-component vector of float) +0:46 'bias' ( temp float) +0:48 add second child into first child ( temp 4-component vector of float) +0:48 'color' ( temp 4-component vector of float) +0:48 texture ( global 4-component vector of float) +0:48 'shadowSampler1D' ( uniform sampler1DShadow) +0:48 'coords3D' ( temp 3-component vector of float) +0:49 add second child into first child ( temp 4-component vector of float) +0:49 'color' ( temp 4-component vector of float) +0:49 texture ( global 4-component vector of float) +0:49 'shadowSampler1D' ( uniform sampler1DShadow) +0:49 'coords3D' ( temp 3-component vector of float) +0:49 'bias' ( temp float) +0:50 add second child into first child ( temp 4-component vector of float) +0:50 'color' ( temp 4-component vector of float) +0:50 texture ( global 4-component vector of float) +0:50 'shadowSampler2D' ( uniform sampler2DShadow) +0:50 'coords3D' ( temp 3-component vector of float) +0:51 add second child into first child ( temp 4-component vector of float) +0:51 'color' ( temp 4-component vector of float) +0:51 texture ( global 4-component vector of float) +0:51 'shadowSampler2D' ( uniform sampler2DShadow) +0:51 'coords3D' ( temp 3-component vector of float) +0:51 'bias' ( temp float) +0:52 add second child into first child ( temp 4-component vector of float) +0:52 'color' ( temp 4-component vector of float) +0:52 textureProj ( global 4-component vector of float) +0:52 'shadowSampler1D' ( uniform sampler1DShadow) +0:52 'coords4D' ( temp 4-component vector of float) +0:53 add second child into first child ( temp 4-component vector of float) +0:53 'color' ( temp 4-component vector of float) +0:53 textureProj ( global 4-component vector of float) +0:53 'shadowSampler1D' ( uniform sampler1DShadow) +0:53 'coords4D' ( temp 4-component vector of float) +0:53 'bias' ( temp float) +0:54 add second child into first child ( temp 4-component vector of float) +0:54 'color' ( temp 4-component vector of float) +0:54 textureProj ( global 4-component vector of float) +0:54 'shadowSampler2D' ( uniform sampler2DShadow) +0:54 'coords4D' ( temp 4-component vector of float) +0:55 add second child into first child ( temp 4-component vector of float) +0:55 'color' ( temp 4-component vector of float) +0:55 textureProj ( global 4-component vector of float) +0:55 'shadowSampler2D' ( uniform sampler2DShadow) +0:55 'coords4D' ( temp 4-component vector of float) +0:55 'bias' ( temp float) +0:57 Sequence +0:57 move second child to first child ( temp 2-component vector of int) +0:57 'iCoords2D' ( temp 2-component vector of int) +0:57 Constant: +0:57 0 (const int) +0:57 5 (const int) +0:58 Sequence +0:58 move second child to first child ( temp int) +0:58 'iLod' ( temp int) +0:58 Constant: +0:58 1 (const int) +0:60 add second child into first child ( temp 4-component vector of float) +0:60 'color' ( temp 4-component vector of float) +0:60 textureFetch ( global 4-component vector of float) +0:60 'texSampler2D' ( uniform sampler2D) +0:60 'iCoords2D' ( temp 2-component vector of int) +0:60 'iLod' ( temp int) +0:62 Sequence +0:62 move second child to first child ( temp 2-component vector of float) +0:62 'gradX' ( temp 2-component vector of float) +0:62 dPdx ( global 2-component vector of float) +0:62 'coords2D' ( smooth in 2-component vector of float) +0:63 Sequence +0:63 move second child to first child ( temp 2-component vector of float) +0:63 'gradY' ( temp 2-component vector of float) +0:63 dPdy ( global 2-component vector of float) +0:63 'coords2D' ( smooth in 2-component vector of float) +0:66 add second child into first child ( temp 4-component vector of float) +0:66 'color' ( temp 4-component vector of float) +0:66 textureGrad ( global 4-component vector of float) +0:66 'texSampler2D' ( uniform sampler2D) +0:66 'coords2D' ( smooth in 2-component vector of float) +0:66 'gradX' ( temp 2-component vector of float) +0:66 'gradY' ( temp 2-component vector of float) +0:67 add second child into first child ( temp 4-component vector of float) +0:67 'color' ( temp 4-component vector of float) +0:67 textureProjGrad ( global 4-component vector of float) +0:67 'texSampler2D' ( uniform sampler2D) +0:67 Construct vec3 ( temp 3-component vector of float) +0:67 'coords2D' ( smooth in 2-component vector of float) +0:67 'proj' ( temp float) +0:67 'gradX' ( temp 2-component vector of float) +0:67 'gradY' ( temp 2-component vector of float) +0:68 add second child into first child ( temp 4-component vector of float) +0:68 'color' ( temp 4-component vector of float) +0:68 textureGradOffset ( global 4-component vector of float) +0:68 'texSampler2D' ( uniform sampler2D) +0:68 'coords2D' ( smooth in 2-component vector of float) +0:68 'gradX' ( temp 2-component vector of float) +0:68 'gradY' ( temp 2-component vector of float) +0:68 Constant: +0:68 3 (const int) +0:68 -7 (const int) +0:69 add second child into first child ( temp 4-component vector of float) +0:69 'color' ( temp 4-component vector of float) +0:69 textureProjGradOffset ( global 4-component vector of float) +0:69 'texSampler2D' ( uniform sampler2D) +0:69 'coords3D' ( temp 3-component vector of float) +0:69 'gradX' ( temp 2-component vector of float) +0:69 'gradY' ( temp 2-component vector of float) +0:69 Constant: +0:69 3 (const int) +0:69 -7 (const int) +0:70 add second child into first child ( temp 4-component vector of float) +0:70 'color' ( temp 4-component vector of float) +0:70 textureGrad ( global float) +0:70 'shadowSampler2D' ( uniform sampler2DShadow) +0:70 Construct vec3 ( temp 3-component vector of float) +0:70 'coords2D' ( smooth in 2-component vector of float) +0:70 'lod' ( temp float) +0:70 'gradX' ( temp 2-component vector of float) +0:70 'gradY' ( temp 2-component vector of float) +0:72 move second child to first child ( temp 4-component vector of float) +0:72 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:72 mix ( global 4-component vector of float) +0:72 'color' ( temp 4-component vector of float) +0:72 'u' ( uniform 4-component vector of float) +0:72 component-wise multiply ( temp float) +0:72 'blend' ( uniform float) +0:72 'blendscale' ( temp float) +0:? Linker Objects +0:? 'texSampler1D' ( uniform sampler1D) +0:? 'texSampler2D' ( uniform sampler2D) +0:? 'texSampler3D' ( uniform sampler3D) +0:? 'texSamplerCube' ( uniform samplerCube) +0:? 'shadowSampler1D' ( uniform sampler1DShadow) +0:? 'shadowSampler2D' ( uniform sampler2DShadow) +0:? 'blend' ( uniform float) +0:? 'scale' ( uniform 2-component vector of float) +0:? 'u' ( uniform 4-component vector of float) +0:? 't' ( smooth in 2-component vector of float) +0:? 'coords2D' ( smooth in 2-component vector of float) + + +Linked fragment stage: + + +Shader version: 130 +0:? Sequence +0:17 Function Definition: main( ( global void) +0:17 Function Parameters: +0:19 Sequence +0:19 Sequence +0:19 move second child to first child ( temp float) +0:19 'blendscale' ( temp float) +0:19 Constant: +0:19 1.789000 +0:20 Sequence +0:20 move second child to first child ( temp float) +0:20 'bias' ( temp float) +0:20 Constant: +0:20 2.000000 +0:21 Sequence +0:21 move second child to first child ( temp float) +0:21 'lod' ( temp float) +0:21 Constant: +0:21 3.000000 +0:22 Sequence +0:22 move second child to first child ( temp float) +0:22 'proj' ( temp float) +0:22 Constant: +0:22 2.000000 +0:23 Sequence +0:23 move second child to first child ( temp float) +0:23 'coords1D' ( temp float) +0:23 Constant: +0:23 1.789000 +0:24 Sequence +0:24 move second child to first child ( temp 3-component vector of float) +0:24 'coords3D' ( temp 3-component vector of float) +0:24 Constant: +0:24 1.789000 +0:24 2.718000 +0:24 3.453000 +0:25 Sequence +0:25 move second child to first child ( temp 4-component vector of float) +0:25 'coords4D' ( temp 4-component vector of float) +0:25 Constant: +0:25 1.789000 +0:25 2.718000 +0:25 3.453000 +0:25 2.000000 +0:26 Sequence +0:26 move second child to first child ( temp 4-component vector of float) +0:26 'color' ( temp 4-component vector of float) +0:26 Constant: +0:26 0.000000 +0:26 0.000000 +0:26 0.000000 +0:26 0.000000 +0:28 add second child into first child ( temp 4-component vector of float) +0:28 'color' ( temp 4-component vector of float) +0:28 texture ( global 4-component vector of float) +0:28 'texSampler1D' ( uniform sampler1D) +0:28 'coords1D' ( temp float) +0:29 add second child into first child ( temp 4-component vector of float) +0:29 'color' ( temp 4-component vector of float) +0:29 texture ( global 4-component vector of float) +0:29 'texSampler1D' ( uniform sampler1D) +0:29 'coords1D' ( temp float) +0:29 'bias' ( temp float) +0:30 add second child into first child ( temp 4-component vector of float) +0:30 'color' ( temp 4-component vector of float) +0:30 textureProj ( global 4-component vector of float) +0:30 'texSampler1D' ( uniform sampler1D) +0:30 'coords2D' ( smooth in 2-component vector of float) +0:31 add second child into first child ( temp 4-component vector of float) +0:31 'color' ( temp 4-component vector of float) +0:31 textureProj ( global 4-component vector of float) +0:31 'texSampler1D' ( uniform sampler1D) +0:31 'coords4D' ( temp 4-component vector of float) +0:32 add second child into first child ( temp 4-component vector of float) +0:32 'color' ( temp 4-component vector of float) +0:32 textureProj ( global 4-component vector of float) +0:32 'texSampler1D' ( uniform sampler1D) +0:32 'coords2D' ( smooth in 2-component vector of float) +0:32 'bias' ( temp float) +0:33 add second child into first child ( temp 4-component vector of float) +0:33 'color' ( temp 4-component vector of float) +0:33 textureProj ( global 4-component vector of float) +0:33 'texSampler1D' ( uniform sampler1D) +0:33 'coords4D' ( temp 4-component vector of float) +0:33 'bias' ( temp float) +0:35 add second child into first child ( temp 4-component vector of float) +0:35 'color' ( temp 4-component vector of float) +0:35 texture ( global 4-component vector of float) +0:35 'texSampler2D' ( uniform sampler2D) +0:35 'coords2D' ( smooth in 2-component vector of float) +0:36 add second child into first child ( temp 4-component vector of float) +0:36 'color' ( temp 4-component vector of float) +0:36 texture ( global 4-component vector of float) +0:36 'texSampler2D' ( uniform sampler2D) +0:36 'coords2D' ( smooth in 2-component vector of float) +0:36 'bias' ( temp float) +0:37 add second child into first child ( temp 4-component vector of float) +0:37 'color' ( temp 4-component vector of float) +0:37 textureProj ( global 4-component vector of float) +0:37 'texSampler2D' ( uniform sampler2D) +0:37 'coords3D' ( temp 3-component vector of float) +0:38 add second child into first child ( temp 4-component vector of float) +0:38 'color' ( temp 4-component vector of float) +0:38 textureProj ( global 4-component vector of float) +0:38 'texSampler2D' ( uniform sampler2D) +0:38 'coords4D' ( temp 4-component vector of float) +0:38 'bias' ( temp float) +0:40 add second child into first child ( temp 4-component vector of float) +0:40 'color' ( temp 4-component vector of float) +0:40 texture ( global 4-component vector of float) +0:40 'texSampler3D' ( uniform sampler3D) +0:40 'coords3D' ( temp 3-component vector of float) +0:41 add second child into first child ( temp 4-component vector of float) +0:41 'color' ( temp 4-component vector of float) +0:41 texture ( global 4-component vector of float) +0:41 'texSampler3D' ( uniform sampler3D) +0:41 'coords3D' ( temp 3-component vector of float) +0:41 'bias' ( temp float) +0:42 add second child into first child ( temp 4-component vector of float) +0:42 'color' ( temp 4-component vector of float) +0:42 textureProj ( global 4-component vector of float) +0:42 'texSampler3D' ( uniform sampler3D) +0:42 'coords4D' ( temp 4-component vector of float) +0:43 add second child into first child ( temp 4-component vector of float) +0:43 'color' ( temp 4-component vector of float) +0:43 textureProj ( global 4-component vector of float) +0:43 'texSampler3D' ( uniform sampler3D) +0:43 'coords4D' ( temp 4-component vector of float) +0:43 'bias' ( temp float) +0:45 add second child into first child ( temp 4-component vector of float) +0:45 'color' ( temp 4-component vector of float) +0:45 texture ( global 4-component vector of float) +0:45 'texSamplerCube' ( uniform samplerCube) +0:45 'coords3D' ( temp 3-component vector of float) +0:46 add second child into first child ( temp 4-component vector of float) +0:46 'color' ( temp 4-component vector of float) +0:46 texture ( global 4-component vector of float) +0:46 'texSamplerCube' ( uniform samplerCube) +0:46 'coords3D' ( temp 3-component vector of float) +0:46 'bias' ( temp float) +0:48 add second child into first child ( temp 4-component vector of float) +0:48 'color' ( temp 4-component vector of float) +0:48 texture ( global 4-component vector of float) +0:48 'shadowSampler1D' ( uniform sampler1DShadow) +0:48 'coords3D' ( temp 3-component vector of float) +0:49 add second child into first child ( temp 4-component vector of float) +0:49 'color' ( temp 4-component vector of float) +0:49 texture ( global 4-component vector of float) +0:49 'shadowSampler1D' ( uniform sampler1DShadow) +0:49 'coords3D' ( temp 3-component vector of float) +0:49 'bias' ( temp float) +0:50 add second child into first child ( temp 4-component vector of float) +0:50 'color' ( temp 4-component vector of float) +0:50 texture ( global 4-component vector of float) +0:50 'shadowSampler2D' ( uniform sampler2DShadow) +0:50 'coords3D' ( temp 3-component vector of float) +0:51 add second child into first child ( temp 4-component vector of float) +0:51 'color' ( temp 4-component vector of float) +0:51 texture ( global 4-component vector of float) +0:51 'shadowSampler2D' ( uniform sampler2DShadow) +0:51 'coords3D' ( temp 3-component vector of float) +0:51 'bias' ( temp float) +0:52 add second child into first child ( temp 4-component vector of float) +0:52 'color' ( temp 4-component vector of float) +0:52 textureProj ( global 4-component vector of float) +0:52 'shadowSampler1D' ( uniform sampler1DShadow) +0:52 'coords4D' ( temp 4-component vector of float) +0:53 add second child into first child ( temp 4-component vector of float) +0:53 'color' ( temp 4-component vector of float) +0:53 textureProj ( global 4-component vector of float) +0:53 'shadowSampler1D' ( uniform sampler1DShadow) +0:53 'coords4D' ( temp 4-component vector of float) +0:53 'bias' ( temp float) +0:54 add second child into first child ( temp 4-component vector of float) +0:54 'color' ( temp 4-component vector of float) +0:54 textureProj ( global 4-component vector of float) +0:54 'shadowSampler2D' ( uniform sampler2DShadow) +0:54 'coords4D' ( temp 4-component vector of float) +0:55 add second child into first child ( temp 4-component vector of float) +0:55 'color' ( temp 4-component vector of float) +0:55 textureProj ( global 4-component vector of float) +0:55 'shadowSampler2D' ( uniform sampler2DShadow) +0:55 'coords4D' ( temp 4-component vector of float) +0:55 'bias' ( temp float) +0:57 Sequence +0:57 move second child to first child ( temp 2-component vector of int) +0:57 'iCoords2D' ( temp 2-component vector of int) +0:57 Constant: +0:57 0 (const int) +0:57 5 (const int) +0:58 Sequence +0:58 move second child to first child ( temp int) +0:58 'iLod' ( temp int) +0:58 Constant: +0:58 1 (const int) +0:60 add second child into first child ( temp 4-component vector of float) +0:60 'color' ( temp 4-component vector of float) +0:60 textureFetch ( global 4-component vector of float) +0:60 'texSampler2D' ( uniform sampler2D) +0:60 'iCoords2D' ( temp 2-component vector of int) +0:60 'iLod' ( temp int) +0:62 Sequence +0:62 move second child to first child ( temp 2-component vector of float) +0:62 'gradX' ( temp 2-component vector of float) +0:62 dPdx ( global 2-component vector of float) +0:62 'coords2D' ( smooth in 2-component vector of float) +0:63 Sequence +0:63 move second child to first child ( temp 2-component vector of float) +0:63 'gradY' ( temp 2-component vector of float) +0:63 dPdy ( global 2-component vector of float) +0:63 'coords2D' ( smooth in 2-component vector of float) +0:66 add second child into first child ( temp 4-component vector of float) +0:66 'color' ( temp 4-component vector of float) +0:66 textureGrad ( global 4-component vector of float) +0:66 'texSampler2D' ( uniform sampler2D) +0:66 'coords2D' ( smooth in 2-component vector of float) +0:66 'gradX' ( temp 2-component vector of float) +0:66 'gradY' ( temp 2-component vector of float) +0:67 add second child into first child ( temp 4-component vector of float) +0:67 'color' ( temp 4-component vector of float) +0:67 textureProjGrad ( global 4-component vector of float) +0:67 'texSampler2D' ( uniform sampler2D) +0:67 Construct vec3 ( temp 3-component vector of float) +0:67 'coords2D' ( smooth in 2-component vector of float) +0:67 'proj' ( temp float) +0:67 'gradX' ( temp 2-component vector of float) +0:67 'gradY' ( temp 2-component vector of float) +0:68 add second child into first child ( temp 4-component vector of float) +0:68 'color' ( temp 4-component vector of float) +0:68 textureGradOffset ( global 4-component vector of float) +0:68 'texSampler2D' ( uniform sampler2D) +0:68 'coords2D' ( smooth in 2-component vector of float) +0:68 'gradX' ( temp 2-component vector of float) +0:68 'gradY' ( temp 2-component vector of float) +0:68 Constant: +0:68 3 (const int) +0:68 -7 (const int) +0:69 add second child into first child ( temp 4-component vector of float) +0:69 'color' ( temp 4-component vector of float) +0:69 textureProjGradOffset ( global 4-component vector of float) +0:69 'texSampler2D' ( uniform sampler2D) +0:69 'coords3D' ( temp 3-component vector of float) +0:69 'gradX' ( temp 2-component vector of float) +0:69 'gradY' ( temp 2-component vector of float) +0:69 Constant: +0:69 3 (const int) +0:69 -7 (const int) +0:70 add second child into first child ( temp 4-component vector of float) +0:70 'color' ( temp 4-component vector of float) +0:70 textureGrad ( global float) +0:70 'shadowSampler2D' ( uniform sampler2DShadow) +0:70 Construct vec3 ( temp 3-component vector of float) +0:70 'coords2D' ( smooth in 2-component vector of float) +0:70 'lod' ( temp float) +0:70 'gradX' ( temp 2-component vector of float) +0:70 'gradY' ( temp 2-component vector of float) +0:72 move second child to first child ( temp 4-component vector of float) +0:72 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:72 mix ( global 4-component vector of float) +0:72 'color' ( temp 4-component vector of float) +0:72 'u' ( uniform 4-component vector of float) +0:72 component-wise multiply ( temp float) +0:72 'blend' ( uniform float) +0:72 'blendscale' ( temp float) +0:? Linker Objects +0:? 'texSampler1D' ( uniform sampler1D) +0:? 'texSampler2D' ( uniform sampler2D) +0:? 'texSampler3D' ( uniform sampler3D) +0:? 'texSamplerCube' ( uniform samplerCube) +0:? 'shadowSampler1D' ( uniform sampler1DShadow) +0:? 'shadowSampler2D' ( uniform sampler2DShadow) +0:? 'blend' ( uniform float) +0:? 'scale' ( uniform 2-component vector of float) +0:? 'u' ( uniform 4-component vector of float) +0:? 't' ( smooth in 2-component vector of float) +0:? 'coords2D' ( smooth in 2-component vector of float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/tokenLength.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/tokenLength.vert.out new file mode 100644 index 0000000..c473858 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/tokenLength.vert.out @@ -0,0 +1,220 @@ +tokenLength.vert +ERROR: 0:9: '' : numeric literal too big +ERROR: 0:10: '' : numeric literal too big +ERROR: 0:13: '' : octal literal too big +ERROR: 0:14: '' : hexadecimal literal too big +ERROR: 0:23: '' : float literal too long +ERROR: 0:32: '' : name too long +ERROR: 0:33: '' : hexadecimal literal too big +ERROR: 0:34: '' : numeric literal too long +ERROR: 0:34: '' : octal literal too big +ERROR: 0:35: '' : numeric literal too long +ERROR: 0:35: '' : numeric literal too big +ERROR: 0:36: '' : float literal too long +WARNING: 0:39: '#extension' : extension not supported: a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhooooooooooooooooooooooooooooooohhhhhhhhhhhhhhhhh01234 +ERROR: 0:40: '' : name too long +WARNING: 0:40: '#extension' : extension not supported: a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhooooooooooooooooooooooooooooooohhhhhhhhhhhhhhhhh01234 +ERROR: 0:43: '' : name too long +ERROR: 0:44: '#extension' : ':' missing after extension name +ERROR: 0:47: '#error' : in long non - zero # if +ERROR: 0:50: '#error' : in long zero # if +ERROR: 0:52: '' : numeric literal too long +ERROR: 0:53: '#error' : in too long # if +ERROR: 0:56: 'preprocessor evaluation' : undefined macro in expression not allowed in es profile A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001 +ERROR: 0:59: 'preprocessor evaluation' : undefined macro in expression not allowed in es profile A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +ERROR: 0:62: '' : name too long +ERROR: 0:62: 'preprocessor evaluation' : undefined macro in expression not allowed in es profile A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +ERROR: 0:67: '' : numeric literal too long +ERROR: 0:70: '' : name too long +ERROR: 0:70: 'preprocessor evaluation' : undefined macro in expression not allowed in es profile A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +ERROR: 26 compilation errors. No code generated. + + +Shader version: 300 +ERROR: node is still EOpNull! +0:9 Sequence +0:9 move second child to first child ( temp highp int) +0:9 'E1' ( global highp int) +0:9 Constant: +0:9 -1 (const int) +0:10 Sequence +0:10 move second child to first child ( temp highp int) +0:10 'E2' ( global highp int) +0:10 Constant: +0:10 -1 (const int) +0:11 Sequence +0:11 move second child to first child ( temp highp int) +0:11 'B' ( global highp int) +0:11 Constant: +0:11 -1 (const int) +0:13 Sequence +0:13 move second child to first child ( temp highp int) +0:13 'OE' ( global highp int) +0:13 Constant: +0:13 1073741823 (const int) +0:14 Sequence +0:14 move second child to first child ( temp highp int) +0:14 'HE' ( global highp int) +0:14 Constant: +0:14 -1 (const int) +0:17 Sequence +0:17 move second child to first child ( temp highp float) +0:17 'F' ( global highp float) +0:17 Constant: +0:17 1.012346 +0:20 Sequence +0:20 move second child to first child ( temp highp float) +0:20 'G' ( global highp float) +0:20 Constant: +0:20 1.012346 +0:23 Sequence +0:23 move second child to first child ( temp highp float) +0:23 'E3' ( global highp float) +0:23 Constant: +0:23 1.012346 +0:25 Function Definition: main( ( global void) +0:25 Function Parameters: +0:27 Sequence +0:27 move second child to first child ( temp highp 4-component vector of float) +0:27 'gl_Position' ( gl_Position highp 4-component vector of float Position) +0:28 Construct vec4 ( temp highp 4-component vector of float) +0:27 'ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789' ( in highp float) +0:28 Convert int to float ( temp highp float) +0:28 'B' ( global highp int) +0:28 'F' ( global highp float) +0:28 'G' ( global highp float) +0:33 Sequence +0:33 move second child to first child ( temp highp int) +0:33 'superH' ( global highp int) +0:33 Constant: +0:33 -1 (const int) +0:34 Sequence +0:34 move second child to first child ( temp highp int) +0:34 'superO' ( global highp int) +0:34 Constant: +0:34 1073741823 (const int) +0:35 Sequence +0:35 move second child to first child ( temp highp int) +0:35 'superI' ( global highp int) +0:35 Constant: +0:35 -1 (const int) +0:36 Sequence +0:36 move second child to first child ( temp highp float) +0:36 'superF' ( global highp float) +0:36 Constant: +0:36 1.012346 +0:? Linker Objects +0:? 'BCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789' ( in highp float) +0:? 'ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789' ( in highp float) +0:? 'E1' ( global highp int) +0:? 'E2' ( global highp int) +0:? 'B' ( global highp int) +0:? 'OE' ( global highp int) +0:? 'HE' ( global highp int) +0:? 'F' ( global highp float) +0:? 'G' ( global highp float) +0:? 'E3' ( global highp float) +0:? 'BCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789B' ( global highp float) +0:? 'superH' ( global highp int) +0:? 'superO' ( global highp int) +0:? 'superI' ( global highp int) +0:? 'superF' ( global highp float) +0:? 'gl_VertexID' ( gl_VertexId highp int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId highp int InstanceId) + + +Linked vertex stage: + + +Shader version: 300 +ERROR: node is still EOpNull! +0:9 Sequence +0:9 move second child to first child ( temp highp int) +0:9 'E1' ( global highp int) +0:9 Constant: +0:9 -1 (const int) +0:10 Sequence +0:10 move second child to first child ( temp highp int) +0:10 'E2' ( global highp int) +0:10 Constant: +0:10 -1 (const int) +0:11 Sequence +0:11 move second child to first child ( temp highp int) +0:11 'B' ( global highp int) +0:11 Constant: +0:11 -1 (const int) +0:13 Sequence +0:13 move second child to first child ( temp highp int) +0:13 'OE' ( global highp int) +0:13 Constant: +0:13 1073741823 (const int) +0:14 Sequence +0:14 move second child to first child ( temp highp int) +0:14 'HE' ( global highp int) +0:14 Constant: +0:14 -1 (const int) +0:17 Sequence +0:17 move second child to first child ( temp highp float) +0:17 'F' ( global highp float) +0:17 Constant: +0:17 1.012346 +0:20 Sequence +0:20 move second child to first child ( temp highp float) +0:20 'G' ( global highp float) +0:20 Constant: +0:20 1.012346 +0:23 Sequence +0:23 move second child to first child ( temp highp float) +0:23 'E3' ( global highp float) +0:23 Constant: +0:23 1.012346 +0:25 Function Definition: main( ( global void) +0:25 Function Parameters: +0:27 Sequence +0:27 move second child to first child ( temp highp 4-component vector of float) +0:27 'gl_Position' ( gl_Position highp 4-component vector of float Position) +0:28 Construct vec4 ( temp highp 4-component vector of float) +0:27 'ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789' ( in highp float) +0:28 Convert int to float ( temp highp float) +0:28 'B' ( global highp int) +0:28 'F' ( global highp float) +0:28 'G' ( global highp float) +0:33 Sequence +0:33 move second child to first child ( temp highp int) +0:33 'superH' ( global highp int) +0:33 Constant: +0:33 -1 (const int) +0:34 Sequence +0:34 move second child to first child ( temp highp int) +0:34 'superO' ( global highp int) +0:34 Constant: +0:34 1073741823 (const int) +0:35 Sequence +0:35 move second child to first child ( temp highp int) +0:35 'superI' ( global highp int) +0:35 Constant: +0:35 -1 (const int) +0:36 Sequence +0:36 move second child to first child ( temp highp float) +0:36 'superF' ( global highp float) +0:36 Constant: +0:36 1.012346 +0:? Linker Objects +0:? 'BCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789' ( in highp float) +0:? 'ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789' ( in highp float) +0:? 'E1' ( global highp int) +0:? 'E2' ( global highp int) +0:? 'B' ( global highp int) +0:? 'OE' ( global highp int) +0:? 'HE' ( global highp int) +0:? 'F' ( global highp float) +0:? 'G' ( global highp float) +0:? 'E3' ( global highp float) +0:? 'BCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789B' ( global highp float) +0:? 'superH' ( global highp int) +0:? 'superO' ( global highp int) +0:? 'superI' ( global highp int) +0:? 'superF' ( global 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/tokenPaste.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/tokenPaste.vert.out new file mode 100755 index 0000000..e544d9e --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/tokenPaste.vert.out @@ -0,0 +1,119 @@ +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 +ERROR: 0:52: '##' : not supported for these tokens +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. + + +Shader version: 450 +ERROR: node is still EOpNull! +0:52 Sequence +0:52 move second child to first child ( temp int) +0:52 'a' ( global int) +0:52 Constant: +0:52 11 (const int) +0:58 Sequence +0:58 move second child to first child ( temp int) +0:58 'cop' ( global int) +0:58 Constant: +0:58 160 (const int) +0:59 Sequence +0:59 move second child to first child ( temp bool) +0:59 'dop' ( global bool) +0:59 Constant: +0:59 true (const bool) +0:63 Function Definition: ShouldntExpandToThis( ( global void) +0:63 Function Parameters: +0:65 Sequence +0:65 Sequence +0:65 move second child to first child ( temp int) +0:65 'e' ( temp int) +0:65 Constant: +0:65 16 (const int) +0:66 right shift second child into first child ( temp int) +0:66 'e' ( temp int) +0:66 Constant: +0:66 2 (const int) +0:69 Sequence +0:69 move second child to first child ( temp bool) +0:69 'f' ( temp bool) +0:69 Compare Greater Than ( temp bool) +0:69 'e' ( temp int) +0:69 Constant: +0:69 5 (const int) +0:? Linker Objects +0:? 'SecondExpansion' ( global int) +0:? 'PostPasteExpansion' ( global int) +0:? 'foo27' ( global float) +0:? 'foo155' ( uniform float) +0:? 'foo719' ( global float) +0:? 'barfoo' ( uniform float) +0:? 'argless' ( global float) +0:? 'dc1' ( global float) +0:? 'dc2' ( global float) +0:? 'foo875' ( uniform float) +0:? 'ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF012345' ( global float) +0:? 'a' ( global int) +0:? 'aop' ( const int) +0:? 10 (const int) +0:? 'bop' ( const int) +0:? 4 (const int) +0:? 'cop' ( global int) +0:? 'dop' ( global bool) +0:? 'argPaste2' ( uniform int) +0:? 'argPaste20suff' ( uniform int) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + + +Linked vertex stage: + +ERROR: Linking vertex stage: Missing entry point: Each stage requires one entry point + +Shader version: 450 +ERROR: node is still EOpNull! +0:52 Sequence +0:52 move second child to first child ( temp int) +0:52 'a' ( global int) +0:52 Constant: +0:52 11 (const int) +0:58 Sequence +0:58 move second child to first child ( temp int) +0:58 'cop' ( global int) +0:58 Constant: +0:58 160 (const int) +0:59 Sequence +0:59 move second child to first child ( temp bool) +0:59 'dop' ( global bool) +0:59 Constant: +0:59 true (const bool) +0:? Linker Objects +0:? 'SecondExpansion' ( global int) +0:? 'PostPasteExpansion' ( global int) +0:? 'foo27' ( global float) +0:? 'foo155' ( uniform float) +0:? 'foo719' ( global float) +0:? 'barfoo' ( uniform float) +0:? 'argless' ( global float) +0:? 'dc1' ( global float) +0:? 'dc2' ( global float) +0:? 'foo875' ( uniform float) +0:? 'ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF012345' ( global float) +0:? 'a' ( global int) +0:? 'aop' ( const int) +0:? 10 (const int) +0:? 'bop' ( const int) +0:? 4 (const int) +0:? 'cop' ( global int) +0:? 'dop' ( global bool) +0:? 'argPaste2' ( uniform int) +0:? 'argPaste20suff' ( uniform int) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/types.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/types.frag.out new file mode 100644 index 0000000..94815b6 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/types.frag.out @@ -0,0 +1,677 @@ +types.frag +Shader version: 130 +0:? Sequence +0:33 Function Definition: main( ( global void) +0:33 Function Parameters: +0:35 Sequence +0:35 Sequence +0:35 move second child to first child ( temp bool) +0:35 'b' ( temp bool) +0:35 logical-and ( temp bool) +0:35 'u_b' ( uniform bool) +0:35 'i_b' ( uniform bool) +0:36 Sequence +0:36 move second child to first child ( temp 2-component vector of bool) +0:36 'b2' ( temp 2-component vector of bool) +0:36 Construct bvec2 ( temp 2-component vector of bool) +0:36 logical-and ( temp bool) +0:36 logical-and ( temp bool) +0:36 logical-and ( temp bool) +0:36 direct index ( temp bool) +0:36 'u_b2' ( uniform 2-component vector of bool) +0:36 Constant: +0:36 0 (const int) +0:36 direct index ( temp bool) +0:36 'i_b2' ( uniform 2-component vector of bool) +0:36 Constant: +0:36 0 (const int) +0:36 direct index ( temp bool) +0:36 'u_b2' ( uniform 2-component vector of bool) +0:36 Constant: +0:36 1 (const int) +0:36 direct index ( temp bool) +0:36 'i_b2' ( uniform 2-component vector of bool) +0:36 Constant: +0:36 1 (const int) +0:37 Sequence +0:37 move second child to first child ( temp 3-component vector of bool) +0:37 'b3' ( temp 3-component vector of bool) +0:37 Construct bvec3 ( temp 3-component vector of bool) +0:37 logical-and ( temp bool) +0:37 logical-and ( temp bool) +0:37 logical-and ( temp bool) +0:37 logical-and ( temp bool) +0:37 logical-and ( temp bool) +0:37 direct index ( temp bool) +0:37 'u_b3' ( uniform 3-component vector of bool) +0:37 Constant: +0:37 0 (const int) +0:37 direct index ( temp bool) +0:37 'i_b3' ( uniform 3-component vector of bool) +0:37 Constant: +0:37 0 (const int) +0:37 direct index ( temp bool) +0:37 'u_b3' ( uniform 3-component vector of bool) +0:37 Constant: +0:37 1 (const int) +0:37 direct index ( temp bool) +0:37 'i_b3' ( uniform 3-component vector of bool) +0:37 Constant: +0:37 1 (const int) +0:37 direct index ( temp bool) +0:37 'u_b3' ( uniform 3-component vector of bool) +0:37 Constant: +0:37 2 (const int) +0:37 direct index ( temp bool) +0:37 'i_b3' ( uniform 3-component vector of bool) +0:37 Constant: +0:37 2 (const int) +0:38 Sequence +0:38 move second child to first child ( temp 4-component vector of bool) +0:38 'b4' ( temp 4-component vector of bool) +0:38 Construct bvec4 ( temp 4-component vector of bool) +0:38 logical-and ( temp bool) +0:38 logical-and ( temp bool) +0:38 logical-and ( temp bool) +0:38 logical-and ( temp bool) +0:38 logical-and ( temp bool) +0:38 logical-and ( temp bool) +0:38 logical-and ( temp bool) +0:38 direct index ( temp bool) +0:38 'u_b4' ( uniform 4-component vector of bool) +0:38 Constant: +0:38 0 (const int) +0:38 direct index ( temp bool) +0:38 'i_b4' ( uniform 4-component vector of bool) +0:38 Constant: +0:38 0 (const int) +0:38 direct index ( temp bool) +0:38 'u_b4' ( uniform 4-component vector of bool) +0:38 Constant: +0:38 1 (const int) +0:38 direct index ( temp bool) +0:38 'i_b4' ( uniform 4-component vector of bool) +0:38 Constant: +0:38 1 (const int) +0:38 direct index ( temp bool) +0:38 'u_b4' ( uniform 4-component vector of bool) +0:38 Constant: +0:38 2 (const int) +0:38 direct index ( temp bool) +0:38 'i_b4' ( uniform 4-component vector of bool) +0:38 Constant: +0:38 2 (const int) +0:38 direct index ( temp bool) +0:38 'u_b4' ( uniform 4-component vector of bool) +0:38 Constant: +0:38 3 (const int) +0:38 direct index ( temp bool) +0:38 'i_b4' ( uniform 4-component vector of bool) +0:38 Constant: +0:38 3 (const int) +0:40 Sequence +0:40 move second child to first child ( temp int) +0:40 'i' ( temp int) +0:40 add ( temp int) +0:40 'u_i' ( uniform int) +0:40 'i_i' ( flat in int) +0:41 Sequence +0:41 move second child to first child ( temp 2-component vector of int) +0:41 'i2' ( temp 2-component vector of int) +0:41 add ( temp 2-component vector of int) +0:41 'u_i2' ( uniform 2-component vector of int) +0:41 'i_i2' ( flat in 2-component vector of int) +0:42 Sequence +0:42 move second child to first child ( temp 3-component vector of int) +0:42 'i3' ( temp 3-component vector of int) +0:42 add ( temp 3-component vector of int) +0:42 'u_i3' ( uniform 3-component vector of int) +0:42 'i_i3' ( flat in 3-component vector of int) +0:43 Sequence +0:43 move second child to first child ( temp 4-component vector of int) +0:43 'i4' ( temp 4-component vector of int) +0:43 add ( temp 4-component vector of int) +0:43 'u_i4' ( uniform 4-component vector of int) +0:43 'i_i4' ( flat in 4-component vector of int) +0:45 Sequence +0:45 move second child to first child ( temp float) +0:45 'f' ( temp float) +0:45 add ( temp float) +0:45 'u_f' ( uniform float) +0:45 'i_f' ( smooth in float) +0:46 Sequence +0:46 move second child to first child ( temp 2-component vector of float) +0:46 'f2' ( temp 2-component vector of float) +0:46 add ( temp 2-component vector of float) +0:46 'u_f2' ( uniform 2-component vector of float) +0:46 'i_f2' ( smooth in 2-component vector of float) +0:47 Sequence +0:47 move second child to first child ( temp 3-component vector of float) +0:47 'f3' ( temp 3-component vector of float) +0:47 add ( temp 3-component vector of float) +0:47 'u_f3' ( uniform 3-component vector of float) +0:47 'i_f3' ( smooth in 3-component vector of float) +0:48 Sequence +0:48 move second child to first child ( temp 4-component vector of float) +0:48 'f4' ( temp 4-component vector of float) +0:48 add ( temp 4-component vector of float) +0:48 'u_f4' ( uniform 4-component vector of float) +0:48 'i_f4' ( smooth in 4-component vector of float) +0:50 move second child to first child ( temp 4-component vector of float) +0:50 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:60 Test condition and select ( temp 4-component vector of float) +0:60 Condition +0:59 logical-or ( temp bool) +0:58 logical-or ( temp bool) +0:57 logical-or ( temp bool) +0:56 logical-or ( temp bool) +0:55 logical-or ( temp bool) +0:54 logical-or ( temp bool) +0:53 logical-or ( temp bool) +0:52 logical-or ( temp bool) +0:51 logical-or ( temp bool) +0:51 'b' ( temp bool) +0:52 direct index ( temp bool) +0:52 'b2' ( temp 2-component vector of bool) +0:52 Constant: +0:52 0 (const int) +0:53 direct index ( temp bool) +0:53 'b2' ( temp 2-component vector of bool) +0:53 Constant: +0:53 1 (const int) +0:54 direct index ( temp bool) +0:54 'b3' ( temp 3-component vector of bool) +0:54 Constant: +0:54 0 (const int) +0:55 direct index ( temp bool) +0:55 'b3' ( temp 3-component vector of bool) +0:55 Constant: +0:55 1 (const int) +0:56 direct index ( temp bool) +0:56 'b3' ( temp 3-component vector of bool) +0:56 Constant: +0:56 2 (const int) +0:57 direct index ( temp bool) +0:57 'b4' ( temp 4-component vector of bool) +0:57 Constant: +0:57 0 (const int) +0:58 direct index ( temp bool) +0:58 'b4' ( temp 4-component vector of bool) +0:58 Constant: +0:58 1 (const int) +0:59 direct index ( temp bool) +0:59 'b4' ( temp 4-component vector of bool) +0:59 Constant: +0:59 2 (const int) +0:60 direct index ( temp bool) +0:60 'b4' ( temp 4-component vector of bool) +0:60 Constant: +0:60 3 (const int) +0:60 true case +0:79 Construct vec4 ( temp 4-component vector of float) +0:79 add ( temp float) +0:78 add ( temp float) +0:77 add ( temp float) +0:76 add ( temp float) +0:75 add ( temp float) +0:74 add ( temp float) +0:73 add ( temp float) +0:72 add ( temp float) +0:71 add ( temp float) +0:70 add ( temp float) +0:69 Convert int to float ( temp float) +0:69 add ( temp int) +0:68 add ( temp int) +0:67 add ( temp int) +0:66 add ( temp int) +0:65 add ( temp int) +0:64 add ( temp int) +0:63 add ( temp int) +0:62 add ( temp int) +0:61 add ( temp int) +0:61 'i' ( temp int) +0:62 direct index ( temp int) +0:62 'i2' ( temp 2-component vector of int) +0:62 Constant: +0:62 0 (const int) +0:63 direct index ( temp int) +0:63 'i2' ( temp 2-component vector of int) +0:63 Constant: +0:63 1 (const int) +0:64 direct index ( temp int) +0:64 'i3' ( temp 3-component vector of int) +0:64 Constant: +0:64 0 (const int) +0:65 direct index ( temp int) +0:65 'i3' ( temp 3-component vector of int) +0:65 Constant: +0:65 1 (const int) +0:66 direct index ( temp int) +0:66 'i3' ( temp 3-component vector of int) +0:66 Constant: +0:66 2 (const int) +0:67 direct index ( temp int) +0:67 'i4' ( temp 4-component vector of int) +0:67 Constant: +0:67 0 (const int) +0:68 direct index ( temp int) +0:68 'i4' ( temp 4-component vector of int) +0:68 Constant: +0:68 1 (const int) +0:69 direct index ( temp int) +0:69 'i4' ( temp 4-component vector of int) +0:69 Constant: +0:69 2 (const int) +0:70 direct index ( temp int) +0:70 'i4' ( temp 4-component vector of int) +0:70 Constant: +0:70 3 (const int) +0:71 'f' ( temp float) +0:72 direct index ( temp float) +0:72 'f2' ( temp 2-component vector of float) +0:72 Constant: +0:72 0 (const int) +0:73 direct index ( temp float) +0:73 'f2' ( temp 2-component vector of float) +0:73 Constant: +0:73 1 (const int) +0:74 direct index ( temp float) +0:74 'f3' ( temp 3-component vector of float) +0:74 Constant: +0:74 0 (const int) +0:75 direct index ( temp float) +0:75 'f3' ( temp 3-component vector of float) +0:75 Constant: +0:75 1 (const int) +0:76 direct index ( temp float) +0:76 'f3' ( temp 3-component vector of float) +0:76 Constant: +0:76 2 (const int) +0:77 direct index ( temp float) +0:77 'f4' ( temp 4-component vector of float) +0:77 Constant: +0:77 0 (const int) +0:78 direct index ( temp float) +0:78 'f4' ( temp 4-component vector of float) +0:78 Constant: +0:78 1 (const int) +0:79 direct index ( temp float) +0:79 'f4' ( temp 4-component vector of float) +0:79 Constant: +0:79 2 (const int) +0:80 direct index ( temp float) +0:80 'f4' ( temp 4-component vector of float) +0:80 Constant: +0:80 3 (const int) +0:60 false case +0:80 Constant: +0:80 1.000000 +0:80 1.000000 +0:80 1.000000 +0:80 1.000000 +0:? Linker Objects +0:? 'u_b' ( uniform bool) +0:? 'u_b2' ( uniform 2-component vector of bool) +0:? 'u_b3' ( uniform 3-component vector of bool) +0:? 'u_b4' ( uniform 4-component vector of bool) +0:? 'u_i' ( uniform int) +0:? 'u_i2' ( uniform 2-component vector of int) +0:? 'u_i3' ( uniform 3-component vector of int) +0:? 'u_i4' ( uniform 4-component vector of int) +0:? 'u_f' ( uniform float) +0:? 'u_f2' ( uniform 2-component vector of float) +0:? 'u_f3' ( uniform 3-component vector of float) +0:? 'u_f4' ( uniform 4-component vector of float) +0:? 'i_b' ( uniform bool) +0:? 'i_b2' ( uniform 2-component vector of bool) +0:? 'i_b3' ( uniform 3-component vector of bool) +0:? 'i_b4' ( uniform 4-component vector of bool) +0:? 'i_i' ( flat in int) +0:? 'i_i2' ( flat in 2-component vector of int) +0:? 'i_i3' ( flat in 3-component vector of int) +0:? 'i_i4' ( flat in 4-component vector of int) +0:? 'i_f' ( smooth in float) +0:? 'i_f2' ( smooth in 2-component vector of float) +0:? 'i_f3' ( smooth in 3-component vector of float) +0:? 'i_f4' ( smooth in 4-component vector of float) + + +Linked fragment stage: + + +Shader version: 130 +0:? Sequence +0:33 Function Definition: main( ( global void) +0:33 Function Parameters: +0:35 Sequence +0:35 Sequence +0:35 move second child to first child ( temp bool) +0:35 'b' ( temp bool) +0:35 logical-and ( temp bool) +0:35 'u_b' ( uniform bool) +0:35 'i_b' ( uniform bool) +0:36 Sequence +0:36 move second child to first child ( temp 2-component vector of bool) +0:36 'b2' ( temp 2-component vector of bool) +0:36 Construct bvec2 ( temp 2-component vector of bool) +0:36 logical-and ( temp bool) +0:36 logical-and ( temp bool) +0:36 logical-and ( temp bool) +0:36 direct index ( temp bool) +0:36 'u_b2' ( uniform 2-component vector of bool) +0:36 Constant: +0:36 0 (const int) +0:36 direct index ( temp bool) +0:36 'i_b2' ( uniform 2-component vector of bool) +0:36 Constant: +0:36 0 (const int) +0:36 direct index ( temp bool) +0:36 'u_b2' ( uniform 2-component vector of bool) +0:36 Constant: +0:36 1 (const int) +0:36 direct index ( temp bool) +0:36 'i_b2' ( uniform 2-component vector of bool) +0:36 Constant: +0:36 1 (const int) +0:37 Sequence +0:37 move second child to first child ( temp 3-component vector of bool) +0:37 'b3' ( temp 3-component vector of bool) +0:37 Construct bvec3 ( temp 3-component vector of bool) +0:37 logical-and ( temp bool) +0:37 logical-and ( temp bool) +0:37 logical-and ( temp bool) +0:37 logical-and ( temp bool) +0:37 logical-and ( temp bool) +0:37 direct index ( temp bool) +0:37 'u_b3' ( uniform 3-component vector of bool) +0:37 Constant: +0:37 0 (const int) +0:37 direct index ( temp bool) +0:37 'i_b3' ( uniform 3-component vector of bool) +0:37 Constant: +0:37 0 (const int) +0:37 direct index ( temp bool) +0:37 'u_b3' ( uniform 3-component vector of bool) +0:37 Constant: +0:37 1 (const int) +0:37 direct index ( temp bool) +0:37 'i_b3' ( uniform 3-component vector of bool) +0:37 Constant: +0:37 1 (const int) +0:37 direct index ( temp bool) +0:37 'u_b3' ( uniform 3-component vector of bool) +0:37 Constant: +0:37 2 (const int) +0:37 direct index ( temp bool) +0:37 'i_b3' ( uniform 3-component vector of bool) +0:37 Constant: +0:37 2 (const int) +0:38 Sequence +0:38 move second child to first child ( temp 4-component vector of bool) +0:38 'b4' ( temp 4-component vector of bool) +0:38 Construct bvec4 ( temp 4-component vector of bool) +0:38 logical-and ( temp bool) +0:38 logical-and ( temp bool) +0:38 logical-and ( temp bool) +0:38 logical-and ( temp bool) +0:38 logical-and ( temp bool) +0:38 logical-and ( temp bool) +0:38 logical-and ( temp bool) +0:38 direct index ( temp bool) +0:38 'u_b4' ( uniform 4-component vector of bool) +0:38 Constant: +0:38 0 (const int) +0:38 direct index ( temp bool) +0:38 'i_b4' ( uniform 4-component vector of bool) +0:38 Constant: +0:38 0 (const int) +0:38 direct index ( temp bool) +0:38 'u_b4' ( uniform 4-component vector of bool) +0:38 Constant: +0:38 1 (const int) +0:38 direct index ( temp bool) +0:38 'i_b4' ( uniform 4-component vector of bool) +0:38 Constant: +0:38 1 (const int) +0:38 direct index ( temp bool) +0:38 'u_b4' ( uniform 4-component vector of bool) +0:38 Constant: +0:38 2 (const int) +0:38 direct index ( temp bool) +0:38 'i_b4' ( uniform 4-component vector of bool) +0:38 Constant: +0:38 2 (const int) +0:38 direct index ( temp bool) +0:38 'u_b4' ( uniform 4-component vector of bool) +0:38 Constant: +0:38 3 (const int) +0:38 direct index ( temp bool) +0:38 'i_b4' ( uniform 4-component vector of bool) +0:38 Constant: +0:38 3 (const int) +0:40 Sequence +0:40 move second child to first child ( temp int) +0:40 'i' ( temp int) +0:40 add ( temp int) +0:40 'u_i' ( uniform int) +0:40 'i_i' ( flat in int) +0:41 Sequence +0:41 move second child to first child ( temp 2-component vector of int) +0:41 'i2' ( temp 2-component vector of int) +0:41 add ( temp 2-component vector of int) +0:41 'u_i2' ( uniform 2-component vector of int) +0:41 'i_i2' ( flat in 2-component vector of int) +0:42 Sequence +0:42 move second child to first child ( temp 3-component vector of int) +0:42 'i3' ( temp 3-component vector of int) +0:42 add ( temp 3-component vector of int) +0:42 'u_i3' ( uniform 3-component vector of int) +0:42 'i_i3' ( flat in 3-component vector of int) +0:43 Sequence +0:43 move second child to first child ( temp 4-component vector of int) +0:43 'i4' ( temp 4-component vector of int) +0:43 add ( temp 4-component vector of int) +0:43 'u_i4' ( uniform 4-component vector of int) +0:43 'i_i4' ( flat in 4-component vector of int) +0:45 Sequence +0:45 move second child to first child ( temp float) +0:45 'f' ( temp float) +0:45 add ( temp float) +0:45 'u_f' ( uniform float) +0:45 'i_f' ( smooth in float) +0:46 Sequence +0:46 move second child to first child ( temp 2-component vector of float) +0:46 'f2' ( temp 2-component vector of float) +0:46 add ( temp 2-component vector of float) +0:46 'u_f2' ( uniform 2-component vector of float) +0:46 'i_f2' ( smooth in 2-component vector of float) +0:47 Sequence +0:47 move second child to first child ( temp 3-component vector of float) +0:47 'f3' ( temp 3-component vector of float) +0:47 add ( temp 3-component vector of float) +0:47 'u_f3' ( uniform 3-component vector of float) +0:47 'i_f3' ( smooth in 3-component vector of float) +0:48 Sequence +0:48 move second child to first child ( temp 4-component vector of float) +0:48 'f4' ( temp 4-component vector of float) +0:48 add ( temp 4-component vector of float) +0:48 'u_f4' ( uniform 4-component vector of float) +0:48 'i_f4' ( smooth in 4-component vector of float) +0:50 move second child to first child ( temp 4-component vector of float) +0:50 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:60 Test condition and select ( temp 4-component vector of float) +0:60 Condition +0:59 logical-or ( temp bool) +0:58 logical-or ( temp bool) +0:57 logical-or ( temp bool) +0:56 logical-or ( temp bool) +0:55 logical-or ( temp bool) +0:54 logical-or ( temp bool) +0:53 logical-or ( temp bool) +0:52 logical-or ( temp bool) +0:51 logical-or ( temp bool) +0:51 'b' ( temp bool) +0:52 direct index ( temp bool) +0:52 'b2' ( temp 2-component vector of bool) +0:52 Constant: +0:52 0 (const int) +0:53 direct index ( temp bool) +0:53 'b2' ( temp 2-component vector of bool) +0:53 Constant: +0:53 1 (const int) +0:54 direct index ( temp bool) +0:54 'b3' ( temp 3-component vector of bool) +0:54 Constant: +0:54 0 (const int) +0:55 direct index ( temp bool) +0:55 'b3' ( temp 3-component vector of bool) +0:55 Constant: +0:55 1 (const int) +0:56 direct index ( temp bool) +0:56 'b3' ( temp 3-component vector of bool) +0:56 Constant: +0:56 2 (const int) +0:57 direct index ( temp bool) +0:57 'b4' ( temp 4-component vector of bool) +0:57 Constant: +0:57 0 (const int) +0:58 direct index ( temp bool) +0:58 'b4' ( temp 4-component vector of bool) +0:58 Constant: +0:58 1 (const int) +0:59 direct index ( temp bool) +0:59 'b4' ( temp 4-component vector of bool) +0:59 Constant: +0:59 2 (const int) +0:60 direct index ( temp bool) +0:60 'b4' ( temp 4-component vector of bool) +0:60 Constant: +0:60 3 (const int) +0:60 true case +0:79 Construct vec4 ( temp 4-component vector of float) +0:79 add ( temp float) +0:78 add ( temp float) +0:77 add ( temp float) +0:76 add ( temp float) +0:75 add ( temp float) +0:74 add ( temp float) +0:73 add ( temp float) +0:72 add ( temp float) +0:71 add ( temp float) +0:70 add ( temp float) +0:69 Convert int to float ( temp float) +0:69 add ( temp int) +0:68 add ( temp int) +0:67 add ( temp int) +0:66 add ( temp int) +0:65 add ( temp int) +0:64 add ( temp int) +0:63 add ( temp int) +0:62 add ( temp int) +0:61 add ( temp int) +0:61 'i' ( temp int) +0:62 direct index ( temp int) +0:62 'i2' ( temp 2-component vector of int) +0:62 Constant: +0:62 0 (const int) +0:63 direct index ( temp int) +0:63 'i2' ( temp 2-component vector of int) +0:63 Constant: +0:63 1 (const int) +0:64 direct index ( temp int) +0:64 'i3' ( temp 3-component vector of int) +0:64 Constant: +0:64 0 (const int) +0:65 direct index ( temp int) +0:65 'i3' ( temp 3-component vector of int) +0:65 Constant: +0:65 1 (const int) +0:66 direct index ( temp int) +0:66 'i3' ( temp 3-component vector of int) +0:66 Constant: +0:66 2 (const int) +0:67 direct index ( temp int) +0:67 'i4' ( temp 4-component vector of int) +0:67 Constant: +0:67 0 (const int) +0:68 direct index ( temp int) +0:68 'i4' ( temp 4-component vector of int) +0:68 Constant: +0:68 1 (const int) +0:69 direct index ( temp int) +0:69 'i4' ( temp 4-component vector of int) +0:69 Constant: +0:69 2 (const int) +0:70 direct index ( temp int) +0:70 'i4' ( temp 4-component vector of int) +0:70 Constant: +0:70 3 (const int) +0:71 'f' ( temp float) +0:72 direct index ( temp float) +0:72 'f2' ( temp 2-component vector of float) +0:72 Constant: +0:72 0 (const int) +0:73 direct index ( temp float) +0:73 'f2' ( temp 2-component vector of float) +0:73 Constant: +0:73 1 (const int) +0:74 direct index ( temp float) +0:74 'f3' ( temp 3-component vector of float) +0:74 Constant: +0:74 0 (const int) +0:75 direct index ( temp float) +0:75 'f3' ( temp 3-component vector of float) +0:75 Constant: +0:75 1 (const int) +0:76 direct index ( temp float) +0:76 'f3' ( temp 3-component vector of float) +0:76 Constant: +0:76 2 (const int) +0:77 direct index ( temp float) +0:77 'f4' ( temp 4-component vector of float) +0:77 Constant: +0:77 0 (const int) +0:78 direct index ( temp float) +0:78 'f4' ( temp 4-component vector of float) +0:78 Constant: +0:78 1 (const int) +0:79 direct index ( temp float) +0:79 'f4' ( temp 4-component vector of float) +0:79 Constant: +0:79 2 (const int) +0:80 direct index ( temp float) +0:80 'f4' ( temp 4-component vector of float) +0:80 Constant: +0:80 3 (const int) +0:60 false case +0:80 Constant: +0:80 1.000000 +0:80 1.000000 +0:80 1.000000 +0:80 1.000000 +0:? Linker Objects +0:? 'u_b' ( uniform bool) +0:? 'u_b2' ( uniform 2-component vector of bool) +0:? 'u_b3' ( uniform 3-component vector of bool) +0:? 'u_b4' ( uniform 4-component vector of bool) +0:? 'u_i' ( uniform int) +0:? 'u_i2' ( uniform 2-component vector of int) +0:? 'u_i3' ( uniform 3-component vector of int) +0:? 'u_i4' ( uniform 4-component vector of int) +0:? 'u_f' ( uniform float) +0:? 'u_f2' ( uniform 2-component vector of float) +0:? 'u_f3' ( uniform 3-component vector of float) +0:? 'u_f4' ( uniform 4-component vector of float) +0:? 'i_b' ( uniform bool) +0:? 'i_b2' ( uniform 2-component vector of bool) +0:? 'i_b3' ( uniform 3-component vector of bool) +0:? 'i_b4' ( uniform 4-component vector of bool) +0:? 'i_i' ( flat in int) +0:? 'i_i2' ( flat in 2-component vector of int) +0:? 'i_i3' ( flat in 3-component vector of int) +0:? 'i_i4' ( flat in 4-component vector of int) +0:? 'i_f' ( smooth in float) +0:? 'i_f2' ( smooth in 2-component vector of float) +0:? 'i_f3' ( smooth in 3-component vector of float) +0:? 'i_f4' ( smooth in 4-component vector of float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/uint.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/uint.frag.out new file mode 100644 index 0000000..3a12d6b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/uint.frag.out @@ -0,0 +1,607 @@ +uint.frag +ERROR: 0:2: 'uint' : must be qualified as flat in +ERROR: 0:6: 'in' : cannot be bool +ERROR: 0:20: 'const' : non-matching or non-convertible constant type for const initializer +ERROR: 0:24: 'const' : non-matching or non-convertible constant type for const initializer +ERROR: 0:34: 'const' : non-matching or non-convertible constant type for const initializer +ERROR: 0:37: 'const' : non-matching or non-convertible constant type for const initializer +ERROR: 0:48: '=' : cannot convert from ' const int' to ' temp mediump uint' +ERROR: 0:51: '=' : cannot convert from ' const int' to ' temp mediump uint' +ERROR: 0:63: 'float' : type requires declaration of default precision qualifier +ERROR: 9 compilation errors. No code generated. + + +Shader version: 300 +ERROR: node is still EOpNull! +0:15 Function Definition: main( ( global void) +0:15 Function Parameters: +0:17 Sequence +0:17 Sequence +0:17 move second child to first child ( temp mediump int) +0:17 'count' ( temp mediump int) +0:17 Constant: +0:17 1 (const int) +0:19 Sequence +0:19 move second child to first child ( temp mediump uint) +0:19 'u' ( temp mediump uint) +0:19 add ( temp mediump uint) +0:19 direct index ( temp mediump uint) +0:19 't' ( flat in mediump 2-component vector of uint) +0:19 Constant: +0:19 1 (const int) +0:19 Constant: +0:19 3 (const uint) +0:27 Test condition and select ( temp void) +0:27 Condition +0:27 Constant: +0:27 true (const bool) +0:27 true case +0:28 multiply second child into first child ( temp mediump int) +0:28 'count' ( temp mediump int) +0:28 Constant: +0:28 2 (const int) +0:29 Test condition and select ( temp void) +0:29 Condition +0:29 Constant: +0:29 true (const bool) +0:29 true case +0:30 multiply second child into first child ( temp mediump int) +0:30 'count' ( temp mediump int) +0:30 Constant: +0:30 3 (const int) +0:31 Test condition and select ( temp void) +0:31 Condition +0:31 Constant: +0:31 false (const bool) +0:31 true case +0:32 multiply second child into first child ( temp mediump int) +0:32 'count' ( temp mediump int) +0:32 Constant: +0:32 5 (const int) +0:41 Test condition and select ( temp void) +0:41 Condition +0:41 Constant: +0:41 true (const bool) +0:41 true case +0:42 multiply second child into first child ( temp mediump int) +0:42 'count' ( temp mediump int) +0:42 Constant: +0:42 7 (const int) +0:43 Test condition and select ( temp void) +0:43 Condition +0:43 Constant: +0:43 true (const bool) +0:43 true case +0:44 multiply second child into first child ( temp mediump int) +0:44 'count' ( temp mediump int) +0:44 Constant: +0:44 11 (const int) +0:45 Test condition and select ( temp void) +0:45 Condition +0:45 Constant: +0:45 false (const bool) +0:45 true case +0:46 multiply second child into first child ( temp mediump int) +0:46 'count' ( temp mediump int) +0:46 Constant: +0:46 13 (const int) +0:49 Sequence +0:49 move second child to first child ( temp mediump int) +0:49 'shiftedii' ( temp mediump int) +0:49 Constant: +0:49 -1 (const int) +0:50 Sequence +0:50 move second child to first child ( temp mediump uint) +0:50 'shiftedui' ( temp mediump uint) +0:50 Constant: +0:50 4194303 (const uint) +0:52 Sequence +0:52 move second child to first child ( temp mediump int) +0:52 'shiftediu' ( temp mediump int) +0:52 Constant: +0:52 -1 (const int) +0:53 Sequence +0:53 move second child to first child ( temp mediump uint) +0:53 'shifteduu' ( temp mediump uint) +0:53 Constant: +0:53 4194303 (const uint) +0:55 Test condition and select ( temp void) +0:55 Condition +0:55 Compare Equal ( temp bool) +0:55 'shiftedii' ( temp mediump int) +0:55 'shiftediu' ( temp mediump int) +0:55 true case +0:56 move second child to first child ( temp mediump 4-component vector of uint) +0:56 'c' ( out mediump 4-component vector of uint) +0:56 texture ( global lowp 4-component vector of uint, operation at highp) +0:56 'usampler' ( uniform lowp usampler2D) +0:56 'tc' ( smooth in highp 2-component vector of float) +0:57 Test condition and select ( temp void) +0:57 Condition +0:57 Compare Equal ( temp bool) +0:57 'shiftedui' ( temp mediump uint) +0:57 'shifteduu' ( temp mediump uint) +0:57 true case +0:58 move second child to first child ( temp mediump 4-component vector of uint) +0:58 'c' ( out mediump 4-component vector of uint) +0:58 texture ( global lowp 4-component vector of uint, operation at highp) +0:58 'usampler' ( uniform lowp usampler2D) +0:58 add ( temp highp 2-component vector of float) +0:58 'tc' ( smooth in highp 2-component vector of float) +0:58 Constant: +0:58 1.000000 +0:59 Test condition and select ( temp void) +0:59 Condition +0:59 Compare Equal ( temp bool) +0:59 'shiftedii' ( temp mediump int) +0:59 Convert uint to int ( temp int) +0:59 'shiftedui' ( temp mediump uint) +0:59 true case +0:60 move second child to first child ( temp mediump 4-component vector of uint) +0:60 'c' ( out mediump 4-component vector of uint) +0:60 texture ( global lowp 4-component vector of uint, operation at highp) +0:60 'usampler' ( uniform lowp usampler2D) +0:60 subtract ( temp highp 2-component vector of float) +0:60 'tc' ( smooth in highp 2-component vector of float) +0:60 Constant: +0:60 2.000000 +0:60 2.000000 +0:62 Test condition and select ( temp void) +0:62 Condition +0:62 Compare Greater Than ( temp bool) +0:62 direct index ( temp mediump uint) +0:62 't' ( flat in mediump 2-component vector of uint) +0:62 Constant: +0:62 0 (const int) +0:62 Constant: +0:62 4 (const uint) +0:62 true case +0:63 Sequence +0:63 Sequence +0:63 move second child to first child ( temp mediump float) +0:63 'af' ( temp mediump float) +0:63 Convert uint to float ( temp mediump float) +0:63 'u' ( temp mediump uint) +0:64 Sequence +0:64 move second child to first child ( temp bool) +0:64 'ab' ( temp bool) +0:64 Convert uint to bool ( temp bool) +0:64 'u' ( temp mediump uint) +0:65 Sequence +0:65 move second child to first child ( temp mediump int) +0:65 'ai' ( temp mediump int) +0:65 Convert uint to int ( temp mediump int) +0:65 'u' ( temp mediump uint) +0:67 add second child into first child ( temp mediump 4-component vector of uint) +0:67 'c' ( out mediump 4-component vector of uint) +0:67 Construct uvec4 ( temp mediump 4-component vector of uint) +0:67 Convert float to uint ( temp mediump uint) +0:67 'af' ( temp mediump float) +0:67 Convert bool to uint ( temp mediump uint) +0:67 'ab' ( temp bool) +0:67 Convert int to uint ( temp mediump uint) +0:67 'ai' ( temp mediump int) +0:67 Convert int to uint ( temp mediump uint) +0:67 'count' ( temp mediump int) +0:75 Test condition and select ( temp void) +0:75 Condition +0:75 Constant: +0:75 true (const bool) +0:75 true case +0:76 multiply second child into first child ( temp mediump int) +0:76 'count' ( temp mediump int) +0:76 Constant: +0:76 17 (const int) +0:78 Test condition and select ( temp void) +0:78 Condition +0:78 Constant: +0:78 false (const bool) +0:78 true case +0:79 multiply second child into first child ( temp mediump int) +0:79 'count' ( temp mediump int) +0:79 Constant: +0:79 19 (const int) +0:81 Test condition and select ( temp void) +0:81 Condition +0:81 Constant: +0:81 true (const bool) +0:81 true case +0:82 multiply second child into first child ( temp mediump int) +0:82 'count' ( temp mediump int) +0:82 Constant: +0:82 23 (const int) +0:84 Test condition and select ( temp void) +0:84 Condition +0:84 Constant: +0:84 true (const bool) +0:84 true case +0:85 multiply second child into first child ( temp mediump int) +0:85 'count' ( temp mediump int) +0:85 Constant: +0:85 27 (const int) +0:87 Sequence +0:87 move second child to first child ( temp mediump uint) +0:87 'mask1' ( temp mediump uint) +0:87 Constant: +0:87 161 (const uint) +0:88 Sequence +0:88 move second child to first child ( temp mediump uint) +0:88 'mask2' ( temp mediump uint) +0:88 Constant: +0:88 2576 (const uint) +0:89 Sequence +0:89 move second child to first child ( temp mediump uint) +0:89 'mask3' ( temp mediump uint) +0:89 left-shift ( temp mediump uint) +0:89 'mask1' ( temp mediump uint) +0:89 Constant: +0:89 4 (const int) +0:90 Sequence +0:90 move second child to first child ( temp mediump uint) +0:90 'mask4' ( temp mediump uint) +0:90 Constant: +0:90 2737 (const uint) +0:92 Test condition and select ( temp void) +0:92 Condition +0:92 Compare Equal ( temp bool) +0:92 'mask3' ( temp mediump uint) +0:92 'mask2' ( temp mediump uint) +0:92 true case +0:93 multiply second child into first child ( temp mediump int) +0:93 'count' ( temp mediump int) +0:93 Constant: +0:93 100 (const int) +0:95 Test condition and select ( temp void) +0:95 Condition +0:95 Compare Not Equal ( temp bool) +0:95 bitwise and ( temp mediump uint) +0:95 'mask3' ( temp mediump uint) +0:95 'mask1' ( temp mediump uint) +0:95 Constant: +0:95 0 (const uint) +0:95 true case +0:96 multiply second child into first child ( temp mediump int) +0:96 'count' ( temp mediump int) +0:96 Constant: +0:96 101 (const int) +0:98 Test condition and select ( temp void) +0:98 Condition +0:98 Compare Equal ( temp bool) +0:98 inclusive-or ( temp mediump uint) +0:98 'mask1' ( temp mediump uint) +0:98 'mask3' ( temp mediump uint) +0:98 'mask4' ( temp mediump uint) +0:98 true case +0:99 multiply second child into first child ( temp mediump int) +0:99 'count' ( temp mediump int) +0:99 Constant: +0:99 102 (const int) +0:101 Test condition and select ( temp void) +0:101 Condition +0:101 Compare Equal ( temp bool) +0:101 exclusive-or ( temp mediump uint) +0:101 'mask1' ( temp mediump uint) +0:101 'mask4' ( temp mediump uint) +0:101 Constant: +0:101 2576 (const uint) +0:101 true case +0:102 multiply second child into first child ( temp mediump int) +0:102 'count' ( temp mediump int) +0:102 Constant: +0:102 103 (const int) +0:104 add second child into first child ( temp mediump 4-component vector of uint) +0:104 'c' ( out mediump 4-component vector of uint) +0:104 Construct uvec4 ( temp mediump 4-component vector of uint) +0:104 Convert int to uint ( temp mediump uint) +0:104 'count' ( temp mediump int) +0:? Linker Objects +0:? 'badu' ( smooth in mediump 2-component vector of uint) +0:? 't' ( flat in mediump 2-component vector of uint) +0:? 'f' ( smooth in highp float) +0:? 'tc' ( smooth in highp 2-component vector of float) +0:? 'bad' ( smooth in bool) +0:? 'v' ( uniform mediump 4-component vector of uint) +0:? 'i' ( uniform mediump int) +0:? 'b' ( uniform bool) +0:? 'c' ( out mediump 4-component vector of uint) +0:? 'usampler' ( uniform lowp usampler2D) + + +Linked fragment stage: + + +Shader version: 300 +ERROR: node is still EOpNull! +0:15 Function Definition: main( ( global void) +0:15 Function Parameters: +0:17 Sequence +0:17 Sequence +0:17 move second child to first child ( temp mediump int) +0:17 'count' ( temp mediump int) +0:17 Constant: +0:17 1 (const int) +0:19 Sequence +0:19 move second child to first child ( temp mediump uint) +0:19 'u' ( temp mediump uint) +0:19 add ( temp mediump uint) +0:19 direct index ( temp mediump uint) +0:19 't' ( flat in mediump 2-component vector of uint) +0:19 Constant: +0:19 1 (const int) +0:19 Constant: +0:19 3 (const uint) +0:27 Test condition and select ( temp void) +0:27 Condition +0:27 Constant: +0:27 true (const bool) +0:27 true case +0:28 multiply second child into first child ( temp mediump int) +0:28 'count' ( temp mediump int) +0:28 Constant: +0:28 2 (const int) +0:29 Test condition and select ( temp void) +0:29 Condition +0:29 Constant: +0:29 true (const bool) +0:29 true case +0:30 multiply second child into first child ( temp mediump int) +0:30 'count' ( temp mediump int) +0:30 Constant: +0:30 3 (const int) +0:31 Test condition and select ( temp void) +0:31 Condition +0:31 Constant: +0:31 false (const bool) +0:31 true case +0:32 multiply second child into first child ( temp mediump int) +0:32 'count' ( temp mediump int) +0:32 Constant: +0:32 5 (const int) +0:41 Test condition and select ( temp void) +0:41 Condition +0:41 Constant: +0:41 true (const bool) +0:41 true case +0:42 multiply second child into first child ( temp mediump int) +0:42 'count' ( temp mediump int) +0:42 Constant: +0:42 7 (const int) +0:43 Test condition and select ( temp void) +0:43 Condition +0:43 Constant: +0:43 true (const bool) +0:43 true case +0:44 multiply second child into first child ( temp mediump int) +0:44 'count' ( temp mediump int) +0:44 Constant: +0:44 11 (const int) +0:45 Test condition and select ( temp void) +0:45 Condition +0:45 Constant: +0:45 false (const bool) +0:45 true case +0:46 multiply second child into first child ( temp mediump int) +0:46 'count' ( temp mediump int) +0:46 Constant: +0:46 13 (const int) +0:49 Sequence +0:49 move second child to first child ( temp mediump int) +0:49 'shiftedii' ( temp mediump int) +0:49 Constant: +0:49 -1 (const int) +0:50 Sequence +0:50 move second child to first child ( temp mediump uint) +0:50 'shiftedui' ( temp mediump uint) +0:50 Constant: +0:50 4194303 (const uint) +0:52 Sequence +0:52 move second child to first child ( temp mediump int) +0:52 'shiftediu' ( temp mediump int) +0:52 Constant: +0:52 -1 (const int) +0:53 Sequence +0:53 move second child to first child ( temp mediump uint) +0:53 'shifteduu' ( temp mediump uint) +0:53 Constant: +0:53 4194303 (const uint) +0:55 Test condition and select ( temp void) +0:55 Condition +0:55 Compare Equal ( temp bool) +0:55 'shiftedii' ( temp mediump int) +0:55 'shiftediu' ( temp mediump int) +0:55 true case +0:56 move second child to first child ( temp mediump 4-component vector of uint) +0:56 'c' ( out mediump 4-component vector of uint) +0:56 texture ( global lowp 4-component vector of uint, operation at highp) +0:56 'usampler' ( uniform lowp usampler2D) +0:56 'tc' ( smooth in highp 2-component vector of float) +0:57 Test condition and select ( temp void) +0:57 Condition +0:57 Compare Equal ( temp bool) +0:57 'shiftedui' ( temp mediump uint) +0:57 'shifteduu' ( temp mediump uint) +0:57 true case +0:58 move second child to first child ( temp mediump 4-component vector of uint) +0:58 'c' ( out mediump 4-component vector of uint) +0:58 texture ( global lowp 4-component vector of uint, operation at highp) +0:58 'usampler' ( uniform lowp usampler2D) +0:58 add ( temp highp 2-component vector of float) +0:58 'tc' ( smooth in highp 2-component vector of float) +0:58 Constant: +0:58 1.000000 +0:59 Test condition and select ( temp void) +0:59 Condition +0:59 Compare Equal ( temp bool) +0:59 'shiftedii' ( temp mediump int) +0:59 Convert uint to int ( temp int) +0:59 'shiftedui' ( temp mediump uint) +0:59 true case +0:60 move second child to first child ( temp mediump 4-component vector of uint) +0:60 'c' ( out mediump 4-component vector of uint) +0:60 texture ( global lowp 4-component vector of uint, operation at highp) +0:60 'usampler' ( uniform lowp usampler2D) +0:60 subtract ( temp highp 2-component vector of float) +0:60 'tc' ( smooth in highp 2-component vector of float) +0:60 Constant: +0:60 2.000000 +0:60 2.000000 +0:62 Test condition and select ( temp void) +0:62 Condition +0:62 Compare Greater Than ( temp bool) +0:62 direct index ( temp mediump uint) +0:62 't' ( flat in mediump 2-component vector of uint) +0:62 Constant: +0:62 0 (const int) +0:62 Constant: +0:62 4 (const uint) +0:62 true case +0:63 Sequence +0:63 Sequence +0:63 move second child to first child ( temp mediump float) +0:63 'af' ( temp mediump float) +0:63 Convert uint to float ( temp mediump float) +0:63 'u' ( temp mediump uint) +0:64 Sequence +0:64 move second child to first child ( temp bool) +0:64 'ab' ( temp bool) +0:64 Convert uint to bool ( temp bool) +0:64 'u' ( temp mediump uint) +0:65 Sequence +0:65 move second child to first child ( temp mediump int) +0:65 'ai' ( temp mediump int) +0:65 Convert uint to int ( temp mediump int) +0:65 'u' ( temp mediump uint) +0:67 add second child into first child ( temp mediump 4-component vector of uint) +0:67 'c' ( out mediump 4-component vector of uint) +0:67 Construct uvec4 ( temp mediump 4-component vector of uint) +0:67 Convert float to uint ( temp mediump uint) +0:67 'af' ( temp mediump float) +0:67 Convert bool to uint ( temp mediump uint) +0:67 'ab' ( temp bool) +0:67 Convert int to uint ( temp mediump uint) +0:67 'ai' ( temp mediump int) +0:67 Convert int to uint ( temp mediump uint) +0:67 'count' ( temp mediump int) +0:75 Test condition and select ( temp void) +0:75 Condition +0:75 Constant: +0:75 true (const bool) +0:75 true case +0:76 multiply second child into first child ( temp mediump int) +0:76 'count' ( temp mediump int) +0:76 Constant: +0:76 17 (const int) +0:78 Test condition and select ( temp void) +0:78 Condition +0:78 Constant: +0:78 false (const bool) +0:78 true case +0:79 multiply second child into first child ( temp mediump int) +0:79 'count' ( temp mediump int) +0:79 Constant: +0:79 19 (const int) +0:81 Test condition and select ( temp void) +0:81 Condition +0:81 Constant: +0:81 true (const bool) +0:81 true case +0:82 multiply second child into first child ( temp mediump int) +0:82 'count' ( temp mediump int) +0:82 Constant: +0:82 23 (const int) +0:84 Test condition and select ( temp void) +0:84 Condition +0:84 Constant: +0:84 true (const bool) +0:84 true case +0:85 multiply second child into first child ( temp mediump int) +0:85 'count' ( temp mediump int) +0:85 Constant: +0:85 27 (const int) +0:87 Sequence +0:87 move second child to first child ( temp mediump uint) +0:87 'mask1' ( temp mediump uint) +0:87 Constant: +0:87 161 (const uint) +0:88 Sequence +0:88 move second child to first child ( temp mediump uint) +0:88 'mask2' ( temp mediump uint) +0:88 Constant: +0:88 2576 (const uint) +0:89 Sequence +0:89 move second child to first child ( temp mediump uint) +0:89 'mask3' ( temp mediump uint) +0:89 left-shift ( temp mediump uint) +0:89 'mask1' ( temp mediump uint) +0:89 Constant: +0:89 4 (const int) +0:90 Sequence +0:90 move second child to first child ( temp mediump uint) +0:90 'mask4' ( temp mediump uint) +0:90 Constant: +0:90 2737 (const uint) +0:92 Test condition and select ( temp void) +0:92 Condition +0:92 Compare Equal ( temp bool) +0:92 'mask3' ( temp mediump uint) +0:92 'mask2' ( temp mediump uint) +0:92 true case +0:93 multiply second child into first child ( temp mediump int) +0:93 'count' ( temp mediump int) +0:93 Constant: +0:93 100 (const int) +0:95 Test condition and select ( temp void) +0:95 Condition +0:95 Compare Not Equal ( temp bool) +0:95 bitwise and ( temp mediump uint) +0:95 'mask3' ( temp mediump uint) +0:95 'mask1' ( temp mediump uint) +0:95 Constant: +0:95 0 (const uint) +0:95 true case +0:96 multiply second child into first child ( temp mediump int) +0:96 'count' ( temp mediump int) +0:96 Constant: +0:96 101 (const int) +0:98 Test condition and select ( temp void) +0:98 Condition +0:98 Compare Equal ( temp bool) +0:98 inclusive-or ( temp mediump uint) +0:98 'mask1' ( temp mediump uint) +0:98 'mask3' ( temp mediump uint) +0:98 'mask4' ( temp mediump uint) +0:98 true case +0:99 multiply second child into first child ( temp mediump int) +0:99 'count' ( temp mediump int) +0:99 Constant: +0:99 102 (const int) +0:101 Test condition and select ( temp void) +0:101 Condition +0:101 Compare Equal ( temp bool) +0:101 exclusive-or ( temp mediump uint) +0:101 'mask1' ( temp mediump uint) +0:101 'mask4' ( temp mediump uint) +0:101 Constant: +0:101 2576 (const uint) +0:101 true case +0:102 multiply second child into first child ( temp mediump int) +0:102 'count' ( temp mediump int) +0:102 Constant: +0:102 103 (const int) +0:104 add second child into first child ( temp mediump 4-component vector of uint) +0:104 'c' ( out mediump 4-component vector of uint) +0:104 Construct uvec4 ( temp mediump 4-component vector of uint) +0:104 Convert int to uint ( temp mediump uint) +0:104 'count' ( temp mediump int) +0:? Linker Objects +0:? 'badu' ( smooth in mediump 2-component vector of uint) +0:? 't' ( flat in mediump 2-component vector of uint) +0:? 'f' ( smooth in highp float) +0:? 'tc' ( smooth in highp 2-component vector of float) +0:? 'bad' ( smooth in bool) +0:? 'v' ( uniform mediump 4-component vector of uint) +0:? 'i' ( uniform mediump int) +0:? 'b' ( uniform bool) +0:? 'c' ( out mediump 4-component vector of uint) +0:? 'usampler' ( uniform lowp usampler2D) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/uniformArray.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/uniformArray.frag.out new file mode 100644 index 0000000..51b9ff0 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/uniformArray.frag.out @@ -0,0 +1,97 @@ +uniformArray.frag +Shader version: 130 +0:? Sequence +0:7 Function Definition: main( ( global void) +0:7 Function Parameters: +0:9 Sequence +0:9 Sequence +0:9 move second child to first child ( temp 4-component vector of float) +0:9 'texColor' ( temp 4-component vector of float) +0:9 add ( temp 4-component vector of float) +0:9 direct index ( temp 4-component vector of float) +0:9 'color' ( uniform 6-element array of 4-component vector of float) +0:9 Constant: +0:9 1 (const int) +0:9 direct index ( temp 4-component vector of float) +0:9 'color' ( uniform 6-element array of 4-component vector of float) +0:9 Constant: +0:9 1 (const int) +0:11 add second child into first child ( temp 3-component vector of float) +0:11 vector swizzle ( temp 3-component vector of float) +0:11 'texColor' ( temp 4-component vector of float) +0:11 Sequence +0:11 Constant: +0:11 0 (const int) +0:11 Constant: +0:11 1 (const int) +0:11 Constant: +0:11 2 (const int) +0:11 'inColor' ( uniform 3-component vector of float) +0:13 add second child into first child ( temp float) +0:13 direct index ( temp float) +0:13 'texColor' ( temp 4-component vector of float) +0:13 Constant: +0:13 3 (const int) +0:13 direct index ( temp float) +0:13 'alpha' ( uniform 16-element array of float) +0:13 Constant: +0:13 12 (const int) +0:15 move second child to first child ( temp 4-component vector of float) +0:15 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:15 'texColor' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'texSampler2D' ( uniform sampler2D) +0:? 'inColor' ( uniform 3-component vector of float) +0:? 'color' ( uniform 6-element array of 4-component vector of float) +0:? 'alpha' ( uniform 16-element array of float) + + +Linked fragment stage: + + +Shader version: 130 +0:? Sequence +0:7 Function Definition: main( ( global void) +0:7 Function Parameters: +0:9 Sequence +0:9 Sequence +0:9 move second child to first child ( temp 4-component vector of float) +0:9 'texColor' ( temp 4-component vector of float) +0:9 add ( temp 4-component vector of float) +0:9 direct index ( temp 4-component vector of float) +0:9 'color' ( uniform 6-element array of 4-component vector of float) +0:9 Constant: +0:9 1 (const int) +0:9 direct index ( temp 4-component vector of float) +0:9 'color' ( uniform 6-element array of 4-component vector of float) +0:9 Constant: +0:9 1 (const int) +0:11 add second child into first child ( temp 3-component vector of float) +0:11 vector swizzle ( temp 3-component vector of float) +0:11 'texColor' ( temp 4-component vector of float) +0:11 Sequence +0:11 Constant: +0:11 0 (const int) +0:11 Constant: +0:11 1 (const int) +0:11 Constant: +0:11 2 (const int) +0:11 'inColor' ( uniform 3-component vector of float) +0:13 add second child into first child ( temp float) +0:13 direct index ( temp float) +0:13 'texColor' ( temp 4-component vector of float) +0:13 Constant: +0:13 3 (const int) +0:13 direct index ( temp float) +0:13 'alpha' ( uniform 16-element array of float) +0:13 Constant: +0:13 12 (const int) +0:15 move second child to first child ( temp 4-component vector of float) +0:15 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:15 'texColor' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'texSampler2D' ( uniform sampler2D) +0:? 'inColor' ( uniform 3-component vector of float) +0:? 'color' ( uniform 6-element array of 4-component vector of float) +0:? 'alpha' ( uniform 16-element array of float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/variableArrayIndex.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/variableArrayIndex.frag.out new file mode 100644 index 0000000..ddfb25b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/variableArrayIndex.frag.out @@ -0,0 +1,225 @@ +variableArrayIndex.frag +WARNING: 0:3: varying deprecated in version 130; may be removed in future release + +Shader version: 130 +0:? Sequence +0:29 Function Definition: main( ( global void) +0:29 Function Parameters: +0:? Sequence +0:32 Sequence +0:32 move second child to first child ( temp int) +0:32 'iLocal' ( temp int) +0:32 'Count' ( uniform int) +0:34 Test condition and select ( temp void) +0:34 Condition +0:34 Compare Greater Than ( temp bool) +0:34 i: direct index for structure ( global int) +0:34 direct index ( temp structure{ global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:34 s2_1: direct index for structure ( global 3-element array of structure{ global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:34 'foo3' ( uniform structure{ global 3-element array of structure{ global int i, global float f, global structure{ global int i, global float f} s1_1} s2_1, global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:34 Constant: +0:34 0 (const int) +0:34 Constant: +0:34 1 (const int) +0:34 Constant: +0:34 0 (const int) +0:34 Constant: +0:34 0 (const int) +0:34 true case +0:35 move second child to first child ( temp float) +0:35 'scale' ( temp float) +0:35 f: direct index for structure ( global float) +0:35 s1_1: direct index for structure ( global structure{ global int i, global float f}) +0:35 indirect index ( temp structure{ global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:35 'foo2' ( uniform 5-element array of structure{ global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:35 add ( temp int) +0:35 add ( temp int) +0:35 i: direct index for structure ( global int) +0:35 indirect index ( temp structure{ global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:35 s2_1: direct index for structure ( global 3-element array of structure{ global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:35 'foo3' ( uniform structure{ global 3-element array of structure{ global int i, global float f, global structure{ global int i, global float f} s1_1} s2_1, global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:35 Constant: +0:35 0 (const int) +0:35 i: direct index for structure ( global int) +0:35 'foo' ( uniform structure{ global int i, global float f}) +0:35 Constant: +0:35 0 (const int) +0:35 Constant: +0:35 0 (const int) +0:35 Constant: +0:35 2 (const int) +0:35 Pre-Increment ( temp int) +0:35 'iLocal' ( temp int) +0:35 Constant: +0:35 2 (const int) +0:35 Constant: +0:35 1 (const int) +0:34 false case +0:37 move second child to first child ( temp float) +0:37 'scale' ( temp float) +0:37 f: direct index for structure ( global float) +0:37 s1_1: direct index for structure ( global structure{ global int i, global float f}) +0:37 direct index ( temp structure{ global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:37 s2_1: direct index for structure ( global 3-element array of structure{ global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:37 'foo3' ( uniform structure{ global 3-element array of structure{ global int i, global float f, global structure{ global int i, global float f} s1_1} s2_1, global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:37 Constant: +0:37 0 (const int) +0:37 Constant: +0:37 0 (const int) +0:37 Constant: +0:37 2 (const int) +0:37 Constant: +0:37 1 (const int) +0:43 move second child to first child ( temp 4-component vector of float) +0:43 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:43 vector-scale ( temp 4-component vector of float) +0:43 'scale' ( temp float) +0:43 texture ( global 4-component vector of float) +0:43 'sampler' ( uniform sampler2D) +0:43 'coord' ( smooth in 2-component vector of float) +0:45 Sequence +0:45 move second child to first child ( temp 3-element array of 2-component vector of float) +0:45 'constructed' ( temp 3-element array of 2-component vector of float) +0:45 Construct vec2 ( temp 3-element array of 2-component vector of float) +0:45 'coord' ( smooth in 2-component vector of float) +0:45 Construct vec2 ( temp 2-component vector of float) +0:45 'scale' ( temp float) +0:45 Constant: +0:45 1.000000 +0:45 2.000000 +0:46 add second child into first child ( temp 4-component vector of float) +0:46 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:46 Construct vec4 ( temp 4-component vector of float) +0:46 indirect index ( temp 2-component vector of float) +0:46 'constructed' ( temp 3-element array of 2-component vector of float) +0:46 i: direct index for structure ( global int) +0:46 'foo' ( uniform structure{ global int i, global float f}) +0:46 Constant: +0:46 0 (const int) +0:46 indirect index ( temp 2-component vector of float) +0:46 'constructed' ( temp 3-element array of 2-component vector of float) +0:46 i: direct index for structure ( global int) +0:46 'foo' ( uniform structure{ global int i, global float f}) +0:46 Constant: +0:46 0 (const int) +0:? Linker Objects +0:? 'sampler' ( uniform sampler2D) +0:? 'coord' ( smooth in 2-component vector of float) +0:? 'foo' ( uniform structure{ global int i, global float f}) +0:? 'foo2' ( uniform 5-element array of structure{ global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:? 'foo3' ( uniform structure{ global 3-element array of structure{ global int i, global float f, global structure{ global int i, global float f} s1_1} s2_1, global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:? 'Count' ( uniform int) + + +Linked fragment stage: + + +Shader version: 130 +0:? Sequence +0:29 Function Definition: main( ( global void) +0:29 Function Parameters: +0:? Sequence +0:32 Sequence +0:32 move second child to first child ( temp int) +0:32 'iLocal' ( temp int) +0:32 'Count' ( uniform int) +0:34 Test condition and select ( temp void) +0:34 Condition +0:34 Compare Greater Than ( temp bool) +0:34 i: direct index for structure ( global int) +0:34 direct index ( temp structure{ global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:34 s2_1: direct index for structure ( global 3-element array of structure{ global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:34 'foo3' ( uniform structure{ global 3-element array of structure{ global int i, global float f, global structure{ global int i, global float f} s1_1} s2_1, global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:34 Constant: +0:34 0 (const int) +0:34 Constant: +0:34 1 (const int) +0:34 Constant: +0:34 0 (const int) +0:34 Constant: +0:34 0 (const int) +0:34 true case +0:35 move second child to first child ( temp float) +0:35 'scale' ( temp float) +0:35 f: direct index for structure ( global float) +0:35 s1_1: direct index for structure ( global structure{ global int i, global float f}) +0:35 indirect index ( temp structure{ global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:35 'foo2' ( uniform 5-element array of structure{ global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:35 add ( temp int) +0:35 add ( temp int) +0:35 i: direct index for structure ( global int) +0:35 indirect index ( temp structure{ global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:35 s2_1: direct index for structure ( global 3-element array of structure{ global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:35 'foo3' ( uniform structure{ global 3-element array of structure{ global int i, global float f, global structure{ global int i, global float f} s1_1} s2_1, global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:35 Constant: +0:35 0 (const int) +0:35 i: direct index for structure ( global int) +0:35 'foo' ( uniform structure{ global int i, global float f}) +0:35 Constant: +0:35 0 (const int) +0:35 Constant: +0:35 0 (const int) +0:35 Constant: +0:35 2 (const int) +0:35 Pre-Increment ( temp int) +0:35 'iLocal' ( temp int) +0:35 Constant: +0:35 2 (const int) +0:35 Constant: +0:35 1 (const int) +0:34 false case +0:37 move second child to first child ( temp float) +0:37 'scale' ( temp float) +0:37 f: direct index for structure ( global float) +0:37 s1_1: direct index for structure ( global structure{ global int i, global float f}) +0:37 direct index ( temp structure{ global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:37 s2_1: direct index for structure ( global 3-element array of structure{ global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:37 'foo3' ( uniform structure{ global 3-element array of structure{ global int i, global float f, global structure{ global int i, global float f} s1_1} s2_1, global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:37 Constant: +0:37 0 (const int) +0:37 Constant: +0:37 0 (const int) +0:37 Constant: +0:37 2 (const int) +0:37 Constant: +0:37 1 (const int) +0:43 move second child to first child ( temp 4-component vector of float) +0:43 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:43 vector-scale ( temp 4-component vector of float) +0:43 'scale' ( temp float) +0:43 texture ( global 4-component vector of float) +0:43 'sampler' ( uniform sampler2D) +0:43 'coord' ( smooth in 2-component vector of float) +0:45 Sequence +0:45 move second child to first child ( temp 3-element array of 2-component vector of float) +0:45 'constructed' ( temp 3-element array of 2-component vector of float) +0:45 Construct vec2 ( temp 3-element array of 2-component vector of float) +0:45 'coord' ( smooth in 2-component vector of float) +0:45 Construct vec2 ( temp 2-component vector of float) +0:45 'scale' ( temp float) +0:45 Constant: +0:45 1.000000 +0:45 2.000000 +0:46 add second child into first child ( temp 4-component vector of float) +0:46 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:46 Construct vec4 ( temp 4-component vector of float) +0:46 indirect index ( temp 2-component vector of float) +0:46 'constructed' ( temp 3-element array of 2-component vector of float) +0:46 i: direct index for structure ( global int) +0:46 'foo' ( uniform structure{ global int i, global float f}) +0:46 Constant: +0:46 0 (const int) +0:46 indirect index ( temp 2-component vector of float) +0:46 'constructed' ( temp 3-element array of 2-component vector of float) +0:46 i: direct index for structure ( global int) +0:46 'foo' ( uniform structure{ global int i, global float f}) +0:46 Constant: +0:46 0 (const int) +0:? Linker Objects +0:? 'sampler' ( uniform sampler2D) +0:? 'coord' ( smooth in 2-component vector of float) +0:? 'foo' ( uniform structure{ global int i, global float f}) +0:? 'foo2' ( uniform 5-element array of structure{ global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:? 'foo3' ( uniform structure{ global 3-element array of structure{ global int i, global float f, global structure{ global int i, global float f} s1_1} s2_1, global int i, global float f, global structure{ global int i, global float f} s1_1}) +0:? 'Count' ( uniform int) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/varyingArray.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/varyingArray.frag.out new file mode 100644 index 0000000..a7b9d23 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/varyingArray.frag.out @@ -0,0 +1,118 @@ +varyingArray.frag +WARNING: 0:3: varying deprecated in version 130; may be removed in future release +WARNING: 0:4: varying deprecated in version 130; may be removed in future release +WARNING: 0:6: varying deprecated in version 130; may be removed in future release +WARNING: 0:8: varying deprecated in version 130; may be removed in future release + +Shader version: 130 +0:? Sequence +0:10 Function Definition: main( ( global void) +0:10 Function Parameters: +0:12 Sequence +0:12 Sequence +0:12 move second child to first child ( temp 4-component vector of float) +0:12 'texColor' ( temp 4-component vector of float) +0:12 texture ( global 4-component vector of float) +0:12 'texSampler2D' ( uniform sampler2D) +0:12 Construct vec2 ( temp 2-component vector of float) +0:12 add ( temp 4-component vector of float) +0:12 direct index ( smooth temp 4-component vector of float TexCoord) +0:12 'gl_TexCoord' ( smooth in 6-element array of 4-component vector of float TexCoord) +0:12 Constant: +0:12 4 (const int) +0:12 direct index ( smooth temp 4-component vector of float TexCoord) +0:12 'gl_TexCoord' ( smooth in 6-element array of 4-component vector of float TexCoord) +0:12 Constant: +0:12 5 (const int) +0:14 add second child into first child ( temp 4-component vector of float) +0:14 'texColor' ( temp 4-component vector of float) +0:14 'color' ( smooth in 4-component vector of float) +0:16 move second child to first child ( temp float) +0:16 direct index ( temp float) +0:16 'texColor' ( temp 4-component vector of float) +0:16 Constant: +0:16 3 (const int) +0:16 'alpha' ( smooth in float) +0:18 move second child to first child ( temp 4-component vector of float) +0:18 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:18 add ( temp 4-component vector of float) +0:18 add ( temp 4-component vector of float) +0:18 add ( temp 4-component vector of float) +0:18 direct index ( smooth temp 4-component vector of float) +0:18 'foo' ( smooth in 3-element array of 4-component vector of float) +0:18 Constant: +0:18 1 (const int) +0:18 direct index ( smooth temp 4-component vector of float TexCoord) +0:18 'gl_TexCoord' ( smooth in 6-element array of 4-component vector of float TexCoord) +0:18 Constant: +0:18 0 (const int) +0:18 direct index ( smooth temp 4-component vector of float TexCoord) +0:18 'gl_TexCoord' ( smooth in 6-element array of 4-component vector of float TexCoord) +0:18 Constant: +0:18 4 (const int) +0:18 'texColor' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'texSampler2D' ( uniform sampler2D) +0:? 'color' ( smooth in 4-component vector of float) +0:? 'alpha' ( smooth in float) +0:? 'gl_TexCoord' ( smooth in 6-element array of 4-component vector of float TexCoord) +0:? 'foo' ( smooth in 3-element array of 4-component vector of float) + + +Linked fragment stage: + + +Shader version: 130 +0:? Sequence +0:10 Function Definition: main( ( global void) +0:10 Function Parameters: +0:12 Sequence +0:12 Sequence +0:12 move second child to first child ( temp 4-component vector of float) +0:12 'texColor' ( temp 4-component vector of float) +0:12 texture ( global 4-component vector of float) +0:12 'texSampler2D' ( uniform sampler2D) +0:12 Construct vec2 ( temp 2-component vector of float) +0:12 add ( temp 4-component vector of float) +0:12 direct index ( smooth temp 4-component vector of float TexCoord) +0:12 'gl_TexCoord' ( smooth in 6-element array of 4-component vector of float TexCoord) +0:12 Constant: +0:12 4 (const int) +0:12 direct index ( smooth temp 4-component vector of float TexCoord) +0:12 'gl_TexCoord' ( smooth in 6-element array of 4-component vector of float TexCoord) +0:12 Constant: +0:12 5 (const int) +0:14 add second child into first child ( temp 4-component vector of float) +0:14 'texColor' ( temp 4-component vector of float) +0:14 'color' ( smooth in 4-component vector of float) +0:16 move second child to first child ( temp float) +0:16 direct index ( temp float) +0:16 'texColor' ( temp 4-component vector of float) +0:16 Constant: +0:16 3 (const int) +0:16 'alpha' ( smooth in float) +0:18 move second child to first child ( temp 4-component vector of float) +0:18 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:18 add ( temp 4-component vector of float) +0:18 add ( temp 4-component vector of float) +0:18 add ( temp 4-component vector of float) +0:18 direct index ( smooth temp 4-component vector of float) +0:18 'foo' ( smooth in 3-element array of 4-component vector of float) +0:18 Constant: +0:18 1 (const int) +0:18 direct index ( smooth temp 4-component vector of float TexCoord) +0:18 'gl_TexCoord' ( smooth in 6-element array of 4-component vector of float TexCoord) +0:18 Constant: +0:18 0 (const int) +0:18 direct index ( smooth temp 4-component vector of float TexCoord) +0:18 'gl_TexCoord' ( smooth in 6-element array of 4-component vector of float TexCoord) +0:18 Constant: +0:18 4 (const int) +0:18 'texColor' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'texSampler2D' ( uniform sampler2D) +0:? 'color' ( smooth in 4-component vector of float) +0:? 'alpha' ( smooth in float) +0:? 'gl_TexCoord' ( smooth in 6-element array of 4-component vector of float TexCoord) +0:? 'foo' ( smooth in 3-element array of 4-component vector of float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/varyingArrayIndirect.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/varyingArrayIndirect.frag.out new file mode 100644 index 0000000..23872b4 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/varyingArrayIndirect.frag.out @@ -0,0 +1,124 @@ +varyingArrayIndirect.frag +WARNING: 0:3: varying deprecated in version 130; may be removed in future release +WARNING: 0:4: varying deprecated in version 130; may be removed in future release +WARNING: 0:6: varying deprecated in version 130; may be removed in future release +WARNING: 0:8: varying deprecated in version 130; may be removed in future release + +Shader version: 130 +0:? Sequence +0:12 Function Definition: main( ( global void) +0:12 Function Parameters: +0:14 Sequence +0:14 Sequence +0:14 move second child to first child ( temp 4-component vector of float) +0:14 'texColor' ( temp 4-component vector of float) +0:14 texture ( global 4-component vector of float) +0:14 'texSampler2D' ( uniform sampler2D) +0:14 Construct vec2 ( temp 2-component vector of float) +0:14 add ( temp 4-component vector of float) +0:14 add ( temp 4-component vector of float) +0:14 indirect index ( smooth temp 4-component vector of float) +0:14 'userIn' ( smooth in 2-element array of 4-component vector of float) +0:14 'b' ( uniform int) +0:14 indirect index ( smooth temp 4-component vector of float TexCoord) +0:14 'gl_TexCoord' ( smooth in 6-element array of 4-component vector of float TexCoord) +0:14 'a' ( uniform int) +0:14 direct index ( smooth temp 4-component vector of float TexCoord) +0:14 'gl_TexCoord' ( smooth in 6-element array of 4-component vector of float TexCoord) +0:14 Constant: +0:14 5 (const int) +0:16 add second child into first child ( temp 4-component vector of float) +0:16 'texColor' ( temp 4-component vector of float) +0:16 'color' ( smooth in 4-component vector of float) +0:18 move second child to first child ( temp float) +0:18 direct index ( temp float) +0:18 'texColor' ( temp 4-component vector of float) +0:18 Constant: +0:18 3 (const int) +0:18 'alpha' ( smooth in float) +0:20 move second child to first child ( temp 4-component vector of float) +0:20 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:20 add ( temp 4-component vector of float) +0:20 add ( temp 4-component vector of float) +0:20 add ( temp 4-component vector of float) +0:20 direct index ( smooth temp 4-component vector of float TexCoord) +0:20 'gl_TexCoord' ( smooth in 6-element array of 4-component vector of float TexCoord) +0:20 Constant: +0:20 0 (const int) +0:20 indirect index ( smooth temp 4-component vector of float TexCoord) +0:20 'gl_TexCoord' ( smooth in 6-element array of 4-component vector of float TexCoord) +0:20 'b' ( uniform int) +0:20 'texColor' ( temp 4-component vector of float) +0:20 indirect index ( smooth temp 4-component vector of float) +0:20 'userIn' ( smooth in 2-element array of 4-component vector of float) +0:20 'a' ( uniform int) +0:? Linker Objects +0:? 'texSampler2D' ( uniform sampler2D) +0:? 'color' ( smooth in 4-component vector of float) +0:? 'alpha' ( smooth in float) +0:? 'gl_TexCoord' ( smooth in 6-element array of 4-component vector of float TexCoord) +0:? 'userIn' ( smooth in 2-element array of 4-component vector of float) +0:? 'a' ( uniform int) +0:? 'b' ( uniform int) + + +Linked fragment stage: + + +Shader version: 130 +0:? Sequence +0:12 Function Definition: main( ( global void) +0:12 Function Parameters: +0:14 Sequence +0:14 Sequence +0:14 move second child to first child ( temp 4-component vector of float) +0:14 'texColor' ( temp 4-component vector of float) +0:14 texture ( global 4-component vector of float) +0:14 'texSampler2D' ( uniform sampler2D) +0:14 Construct vec2 ( temp 2-component vector of float) +0:14 add ( temp 4-component vector of float) +0:14 add ( temp 4-component vector of float) +0:14 indirect index ( smooth temp 4-component vector of float) +0:14 'userIn' ( smooth in 2-element array of 4-component vector of float) +0:14 'b' ( uniform int) +0:14 indirect index ( smooth temp 4-component vector of float TexCoord) +0:14 'gl_TexCoord' ( smooth in 6-element array of 4-component vector of float TexCoord) +0:14 'a' ( uniform int) +0:14 direct index ( smooth temp 4-component vector of float TexCoord) +0:14 'gl_TexCoord' ( smooth in 6-element array of 4-component vector of float TexCoord) +0:14 Constant: +0:14 5 (const int) +0:16 add second child into first child ( temp 4-component vector of float) +0:16 'texColor' ( temp 4-component vector of float) +0:16 'color' ( smooth in 4-component vector of float) +0:18 move second child to first child ( temp float) +0:18 direct index ( temp float) +0:18 'texColor' ( temp 4-component vector of float) +0:18 Constant: +0:18 3 (const int) +0:18 'alpha' ( smooth in float) +0:20 move second child to first child ( temp 4-component vector of float) +0:20 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:20 add ( temp 4-component vector of float) +0:20 add ( temp 4-component vector of float) +0:20 add ( temp 4-component vector of float) +0:20 direct index ( smooth temp 4-component vector of float TexCoord) +0:20 'gl_TexCoord' ( smooth in 6-element array of 4-component vector of float TexCoord) +0:20 Constant: +0:20 0 (const int) +0:20 indirect index ( smooth temp 4-component vector of float TexCoord) +0:20 'gl_TexCoord' ( smooth in 6-element array of 4-component vector of float TexCoord) +0:20 'b' ( uniform int) +0:20 'texColor' ( temp 4-component vector of float) +0:20 indirect index ( smooth temp 4-component vector of float) +0:20 'userIn' ( smooth in 2-element array of 4-component vector of float) +0:20 'a' ( uniform int) +0:? Linker Objects +0:? 'texSampler2D' ( uniform sampler2D) +0:? 'color' ( smooth in 4-component vector of float) +0:? 'alpha' ( smooth in float) +0:? 'gl_TexCoord' ( smooth in 6-element array of 4-component vector of float TexCoord) +0:? 'userIn' ( smooth in 2-element array of 4-component vector of float) +0:? 'a' ( uniform int) +0:? 'b' ( uniform int) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/versionsClean.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/versionsClean.frag.out new file mode 100644 index 0000000..721d73c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/versionsClean.frag.out @@ -0,0 +1,44 @@ +versionsClean.frag +ERROR: #version: statement must appear first in es-profile shader; before comments or newlines +ERROR: 0:34: '#version' : must occur first in shader +ERROR: 2 compilation errors. No code generated. + + +Shader version: 300 +ERROR: node is still EOpNull! +0:41 Function Definition: main( ( global void) +0:41 Function Parameters: +0:43 Sequence +0:43 move second child to first child ( temp highp 4-component vector of float) +0:43 'foo' ( out highp 4-component vector of float) +0:43 Construct vec4 ( temp highp 4-component vector of float) +0:43 'color' ( smooth in highp 3-component vector of float) +0:43 Constant: +0:43 142.000000 +0:44 Branch: Kill +0:? Linker Objects +0:? 'color' ( smooth in highp 3-component vector of float) +0:? 'foo' ( out highp 4-component vector of float) +0:? 'bar' ( uniform highp sampler2DArrayShadow) + + +Linked fragment stage: + + +Shader version: 300 +ERROR: node is still EOpNull! +0:41 Function Definition: main( ( global void) +0:41 Function Parameters: +0:43 Sequence +0:43 move second child to first child ( temp highp 4-component vector of float) +0:43 'foo' ( out highp 4-component vector of float) +0:43 Construct vec4 ( temp highp 4-component vector of float) +0:43 'color' ( smooth in highp 3-component vector of float) +0:43 Constant: +0:43 142.000000 +0:44 Branch: Kill +0:? Linker Objects +0:? 'color' ( smooth in highp 3-component vector of float) +0:? 'foo' ( out highp 4-component vector of float) +0:? 'bar' ( uniform highp sampler2DArrayShadow) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/versionsClean.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/versionsClean.vert.out new file mode 100644 index 0000000..cd9da12 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/versionsClean.vert.out @@ -0,0 +1,49 @@ +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) +0:40 Function Parameters: +0:42 Sequence +0:42 move second child to first child ( temp 4-component vector of float) +0:42 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) +0:42 '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, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:42 Constant: +0:42 0 (const uint) +0:42 Construct vec4 ( temp 4-component vector of float) +0:42 'color' ( in 3-component vector of float) +0:42 Constant: +0:42 142.000000 +0:? Linker Objects +0:? 'color' ( in 3-component vector of float) +0:? 'foo' ( uniform sampler2DRect) +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, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + + +Linked vertex stage: + + +Shader version: 420 +0:? Sequence +0:40 Function Definition: main( ( global void) +0:40 Function Parameters: +0:42 Sequence +0:42 move second child to first child ( temp 4-component vector of float) +0:42 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) +0:42 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:42 Constant: +0:42 0 (const uint) +0:42 Construct vec4 ( temp 4-component vector of float) +0:42 'color' ( in 3-component vector of float) +0:42 Constant: +0:42 142.000000 +0:? Linker Objects +0:? 'color' ( in 3-component vector of float) +0:? 'foo' ( uniform sampler2DRect) +0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/versionsErrors.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/versionsErrors.frag.out new file mode 100644 index 0000000..dbeb941 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/versionsErrors.frag.out @@ -0,0 +1,44 @@ +versionsErrors.frag +ERROR: #version: versions before 150 do not allow a profile token +ERROR: 0:38: 'attribute' : not supported in this stage: fragment +ERROR: 0:40: 'sampler2DRect' : Reserved word. +ERROR: 0:44: 'floating-point suffix' : not supported for this version or the enabled extensions +ERROR: 4 compilation errors. No code generated. + + +Shader version: 110 +ERROR: node is still EOpNull! +0:42 Function Definition: main( ( global void) +0:42 Function Parameters: +0:44 Sequence +0:44 move second child to first child ( temp 4-component vector of float) +0:44 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:44 Construct vec4 ( temp 4-component vector of float) +0:44 'color' ( smooth in 3-component vector of float) +0:44 Constant: +0:44 142.000000 +0:45 Branch: Kill +0:? Linker Objects +0:? 'color' ( smooth in 3-component vector of float) +0:? 'foo' ( uniform sampler2DRect) + + +Linked fragment stage: + + +Shader version: 110 +ERROR: node is still EOpNull! +0:42 Function Definition: main( ( global void) +0:42 Function Parameters: +0:44 Sequence +0:44 move second child to first child ( temp 4-component vector of float) +0:44 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:44 Construct vec4 ( temp 4-component vector of float) +0:44 'color' ( smooth in 3-component vector of float) +0:44 Constant: +0:44 142.000000 +0:45 Branch: Kill +0:? Linker Objects +0:? 'color' ( smooth in 3-component vector of float) +0:? 'foo' ( uniform sampler2DRect) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/versionsErrors.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/versionsErrors.vert.out new file mode 100644 index 0000000..0d37136 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/versionsErrors.vert.out @@ -0,0 +1,58 @@ +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 +ERROR: 2 compilation errors. No code generated. + + +Shader version: 420 +Requested GL_ARB_texture_rectangle +ERROR: node is still EOpNull! +0:42 Function Definition: main( ( global void) +0:42 Function Parameters: +0:44 Sequence +0:44 move second child to first child ( temp 4-component vector of float) +0:44 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) +0:44 '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, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:44 Constant: +0:44 0 (const uint) +0:44 Construct vec4 ( temp 4-component vector of float) +0:44 'color' ( in 3-component vector of float) +0:44 Constant: +0:44 142.000000 +0:45 Branch: Kill +0:? Linker Objects +0:? 'color' ( in 3-component vector of float) +0:? 'foo' ( uniform sampler2DRect) +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, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + + +Linked vertex stage: + + +Shader version: 420 +Requested GL_ARB_texture_rectangle +ERROR: node is still EOpNull! +0:42 Function Definition: main( ( global void) +0:42 Function Parameters: +0:44 Sequence +0:44 move second child to first child ( temp 4-component vector of float) +0:44 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) +0:44 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:44 Constant: +0:44 0 (const uint) +0:44 Construct vec4 ( temp 4-component vector of float) +0:44 'color' ( in 3-component vector of float) +0:44 Constant: +0:44 142.000000 +0:45 Branch: Kill +0:? Linker Objects +0:? 'color' ( in 3-component vector of float) +0:? 'foo' ( uniform sampler2DRect) +0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/voidFunction.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/voidFunction.frag.out new file mode 100644 index 0000000..a38509f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/voidFunction.frag.out @@ -0,0 +1,91 @@ +voidFunction.frag +Shader version: 120 +0:? Sequence +0:7 Sequence +0:7 move second child to first child ( temp float) +0:7 'bar' ( global float) +0:7 Constant: +0:7 2.000000 +0:9 Function Definition: foo( ( global void) +0:9 Function Parameters: +0:11 Sequence +0:11 Post-Increment ( temp float) +0:11 'bar' ( global float) +0:13 Branch: Return +0:16 Function Definition: foo2( ( global void) +0:16 Function Parameters: +0:18 Sequence +0:18 Post-Increment ( temp float) +0:18 'bar' ( global float) +0:21 Function Definition: main( ( global void) +0:21 Function Parameters: +0:23 Sequence +0:23 Sequence +0:23 move second child to first child ( temp 4-component vector of float) +0:23 'outColor' ( temp 4-component vector of float) +0:23 'bigColor' ( uniform 4-component vector of float) +0:25 Function Call: foo( ( global void) +0:27 Function Call: foo2( ( global void) +0:29 add second child into first child ( temp float) +0:29 direct index ( temp float) +0:29 'outColor' ( temp 4-component vector of float) +0:29 Constant: +0:29 0 (const int) +0:29 'bar' ( global float) +0:31 move second child to first child ( temp 4-component vector of float) +0:31 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:31 'outColor' ( temp 4-component vector of float) +0:33 Branch: Return +0:? Linker Objects +0:? 'bigColor' ( uniform 4-component vector of float) +0:? 'BaseColor' ( smooth in 4-component vector of float) +0:? 'd' ( uniform float) +0:? 'bar' ( global float) + + +Linked fragment stage: + + +Shader version: 120 +0:? Sequence +0:7 Sequence +0:7 move second child to first child ( temp float) +0:7 'bar' ( global float) +0:7 Constant: +0:7 2.000000 +0:9 Function Definition: foo( ( global void) +0:9 Function Parameters: +0:11 Sequence +0:11 Post-Increment ( temp float) +0:11 'bar' ( global float) +0:13 Branch: Return +0:16 Function Definition: foo2( ( global void) +0:16 Function Parameters: +0:18 Sequence +0:18 Post-Increment ( temp float) +0:18 'bar' ( global float) +0:21 Function Definition: main( ( global void) +0:21 Function Parameters: +0:23 Sequence +0:23 Sequence +0:23 move second child to first child ( temp 4-component vector of float) +0:23 'outColor' ( temp 4-component vector of float) +0:23 'bigColor' ( uniform 4-component vector of float) +0:25 Function Call: foo( ( global void) +0:27 Function Call: foo2( ( global void) +0:29 add second child into first child ( temp float) +0:29 direct index ( temp float) +0:29 'outColor' ( temp 4-component vector of float) +0:29 Constant: +0:29 0 (const int) +0:29 'bar' ( global float) +0:31 move second child to first child ( temp 4-component vector of float) +0:31 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:31 'outColor' ( temp 4-component vector of float) +0:33 Branch: Return +0:? Linker Objects +0:? 'bigColor' ( uniform 4-component vector of float) +0:? 'BaseColor' ( smooth in 4-component vector of float) +0:? 'd' ( uniform float) +0:? 'bar' ( global float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/vulkan.ast.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/vulkan.ast.vert.out new file mode 100755 index 0000000..bfc38c0 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/vulkan.ast.vert.out @@ -0,0 +1,327 @@ +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) +0:7 Function Parameters: +0:9 Sequence +0:9 Convert float to bool ( temp bool) +0:9 'scf1' ( specialization-constant const highp float) +0:9 1.000000 +0:10 Construct bool ( specialization-constant const bool) +0:10 'scbt' ( specialization-constant const bool) +0:10 true (const bool) +0:11 Convert int to bool ( specialization-constant const bool) +0:11 'sci2' ( specialization-constant const highp int) +0:11 2 (const int) +0:13 Construct float ( temp float) +0:13 'scf1' ( specialization-constant const highp float) +0:13 1.000000 +0:14 Convert bool to float ( temp float) +0:14 'scbt' ( specialization-constant const bool) +0:14 true (const bool) +0:15 Convert int to float ( temp float) +0:15 'sci2' ( specialization-constant const highp int) +0:15 2 (const int) +0:17 Convert float to int ( temp int) +0:17 'scf1' ( specialization-constant const highp float) +0:17 1.000000 +0:18 Convert bool to int ( specialization-constant const int) +0:18 'scbt' ( specialization-constant const bool) +0:18 true (const bool) +0:19 Construct int ( specialization-constant const int) +0:19 'sci2' ( specialization-constant const highp int) +0:19 2 (const int) +0:21 component-wise multiply ( temp highp float) +0:21 'scf1' ( specialization-constant const highp float) +0:21 1.000000 +0:21 'scf1' ( specialization-constant const highp float) +0:21 1.000000 +0:22 logical-or ( specialization-constant const bool) +0:22 'scbt' ( specialization-constant const bool) +0:22 true (const bool) +0:22 'scbt' ( specialization-constant const bool) +0:22 true (const bool) +0:23 component-wise multiply ( specialization-constant const highp int) +0:23 'sci2' ( specialization-constant const highp int) +0:23 2 (const int) +0:23 'sci2' ( specialization-constant const highp int) +0:23 2 (const int) +0:24 add ( temp highp float) +0:24 'scf1' ( specialization-constant const highp float) +0:24 1.000000 +0:24 Convert int to float ( temp highp float) +0:24 'sci2' ( specialization-constant const highp int) +0:24 2 (const int) +0:26 Negate value ( temp highp float) +0:26 'scf1' ( specialization-constant const highp float) +0:26 1.000000 +0:27 Negate conditional ( specialization-constant const bool) +0:27 'scbt' ( specialization-constant const bool) +0:27 true (const bool) +0:28 Negate value ( specialization-constant const highp int) +0:28 'sci2' ( specialization-constant const highp int) +0:28 2 (const int) +0:30 Compare Greater Than ( temp bool) +0:30 'scf1' ( specialization-constant const highp float) +0:30 1.000000 +0:30 'scf1' ( specialization-constant const highp float) +0:30 1.000000 +0:31 Compare Greater Than ( specialization-constant const bool) +0:31 'sci2' ( specialization-constant const highp int) +0:31 2 (const int) +0:31 'sci2' ( specialization-constant const highp int) +0:31 2 (const int) +0:33 Compare Not Equal ( temp bool) +0:33 'scf1' ( specialization-constant const highp float) +0:33 1.000000 +0:33 'scf1' ( specialization-constant const highp float) +0:33 1.000000 +0:34 Compare Not Equal ( specialization-constant const bool) +0:34 'scbt' ( specialization-constant const bool) +0:34 true (const bool) +0:34 'scbt' ( specialization-constant const bool) +0:34 true (const bool) +0:35 Compare Not Equal ( specialization-constant const bool) +0:35 'sci2' ( specialization-constant const highp int) +0:35 2 (const int) +0:35 'sci2' ( specialization-constant const highp int) +0:35 2 (const int) +0:37 Construct ivec2 ( specialization-constant const 2-component vector of int) +0:37 'sci2' ( specialization-constant const highp int) +0:37 2 (const int) +0:37 'sci2' ( specialization-constant const highp int) +0:37 2 (const int) +0:38 Construct ivec2 ( temp 2-element array of 2-component vector of int) +0:38 Construct ivec2 ( specialization-constant const 2-component vector of int) +0:38 'sci2' ( specialization-constant const highp int) +0:38 2 (const int) +0:38 'sci2' ( specialization-constant const highp int) +0:38 2 (const int) +0:38 Construct ivec2 ( specialization-constant const 2-component vector of int) +0:38 'sci2' ( specialization-constant const highp int) +0:38 2 (const int) +0:38 'sci2' ( specialization-constant const highp int) +0:38 2 (const int) +0:40 Construct vec2 ( temp 2-component vector of float) +0:40 'scf1' ( specialization-constant const highp float) +0:40 1.000000 +0:40 'scf1' ( specialization-constant const highp float) +0:40 1.000000 +0:41 Construct vec2 ( temp 2-element array of 2-component vector of float) +0:41 Construct vec2 ( temp 2-component vector of float) +0:41 'scf1' ( specialization-constant const highp float) +0:41 1.000000 +0:41 'scf1' ( specialization-constant const highp float) +0:41 1.000000 +0:41 Construct vec2 ( temp 2-component vector of float) +0:41 'scf1' ( specialization-constant const highp float) +0:41 1.000000 +0:41 'scf1' ( specialization-constant const highp float) +0:41 1.000000 +0:? Linker Objects +0:? 'scf1' ( specialization-constant const highp float) +0:? 1.000000 +0:? 'scbt' ( specialization-constant const bool) +0:? true (const bool) +0:? 'sci2' ( specialization-constant const highp int) +0:? 2 (const int) + + +Linked vertex stage: + + +Shader version: 450 +0:? Sequence +0:7 Function Definition: main( ( global void) +0:7 Function Parameters: +0:9 Sequence +0:9 Convert float to bool ( temp bool) +0:9 'scf1' ( specialization-constant const highp float) +0:9 1.000000 +0:10 Construct bool ( specialization-constant const bool) +0:10 'scbt' ( specialization-constant const bool) +0:10 true (const bool) +0:11 Convert int to bool ( specialization-constant const bool) +0:11 'sci2' ( specialization-constant const highp int) +0:11 2 (const int) +0:13 Construct float ( temp float) +0:13 'scf1' ( specialization-constant const highp float) +0:13 1.000000 +0:14 Convert bool to float ( temp float) +0:14 'scbt' ( specialization-constant const bool) +0:14 true (const bool) +0:15 Convert int to float ( temp float) +0:15 'sci2' ( specialization-constant const highp int) +0:15 2 (const int) +0:17 Convert float to int ( temp int) +0:17 'scf1' ( specialization-constant const highp float) +0:17 1.000000 +0:18 Convert bool to int ( specialization-constant const int) +0:18 'scbt' ( specialization-constant const bool) +0:18 true (const bool) +0:19 Construct int ( specialization-constant const int) +0:19 'sci2' ( specialization-constant const highp int) +0:19 2 (const int) +0:21 component-wise multiply ( temp highp float) +0:21 'scf1' ( specialization-constant const highp float) +0:21 1.000000 +0:21 'scf1' ( specialization-constant const highp float) +0:21 1.000000 +0:22 logical-or ( specialization-constant const bool) +0:22 'scbt' ( specialization-constant const bool) +0:22 true (const bool) +0:22 'scbt' ( specialization-constant const bool) +0:22 true (const bool) +0:23 component-wise multiply ( specialization-constant const highp int) +0:23 'sci2' ( specialization-constant const highp int) +0:23 2 (const int) +0:23 'sci2' ( specialization-constant const highp int) +0:23 2 (const int) +0:24 add ( temp highp float) +0:24 'scf1' ( specialization-constant const highp float) +0:24 1.000000 +0:24 Convert int to float ( temp highp float) +0:24 'sci2' ( specialization-constant const highp int) +0:24 2 (const int) +0:26 Negate value ( temp highp float) +0:26 'scf1' ( specialization-constant const highp float) +0:26 1.000000 +0:27 Negate conditional ( specialization-constant const bool) +0:27 'scbt' ( specialization-constant const bool) +0:27 true (const bool) +0:28 Negate value ( specialization-constant const highp int) +0:28 'sci2' ( specialization-constant const highp int) +0:28 2 (const int) +0:30 Compare Greater Than ( temp bool) +0:30 'scf1' ( specialization-constant const highp float) +0:30 1.000000 +0:30 'scf1' ( specialization-constant const highp float) +0:30 1.000000 +0:31 Compare Greater Than ( specialization-constant const bool) +0:31 'sci2' ( specialization-constant const highp int) +0:31 2 (const int) +0:31 'sci2' ( specialization-constant const highp int) +0:31 2 (const int) +0:33 Compare Not Equal ( temp bool) +0:33 'scf1' ( specialization-constant const highp float) +0:33 1.000000 +0:33 'scf1' ( specialization-constant const highp float) +0:33 1.000000 +0:34 Compare Not Equal ( specialization-constant const bool) +0:34 'scbt' ( specialization-constant const bool) +0:34 true (const bool) +0:34 'scbt' ( specialization-constant const bool) +0:34 true (const bool) +0:35 Compare Not Equal ( specialization-constant const bool) +0:35 'sci2' ( specialization-constant const highp int) +0:35 2 (const int) +0:35 'sci2' ( specialization-constant const highp int) +0:35 2 (const int) +0:37 Construct ivec2 ( specialization-constant const 2-component vector of int) +0:37 'sci2' ( specialization-constant const highp int) +0:37 2 (const int) +0:37 'sci2' ( specialization-constant const highp int) +0:37 2 (const int) +0:38 Construct ivec2 ( temp 2-element array of 2-component vector of int) +0:38 Construct ivec2 ( specialization-constant const 2-component vector of int) +0:38 'sci2' ( specialization-constant const highp int) +0:38 2 (const int) +0:38 'sci2' ( specialization-constant const highp int) +0:38 2 (const int) +0:38 Construct ivec2 ( specialization-constant const 2-component vector of int) +0:38 'sci2' ( specialization-constant const highp int) +0:38 2 (const int) +0:38 'sci2' ( specialization-constant const highp int) +0:38 2 (const int) +0:40 Construct vec2 ( temp 2-component vector of float) +0:40 'scf1' ( specialization-constant const highp float) +0:40 1.000000 +0:40 'scf1' ( specialization-constant const highp float) +0:40 1.000000 +0:41 Construct vec2 ( temp 2-element array of 2-component vector of float) +0:41 Construct vec2 ( temp 2-component vector of float) +0:41 'scf1' ( specialization-constant const highp float) +0:41 1.000000 +0:41 'scf1' ( specialization-constant const highp float) +0:41 1.000000 +0:41 Construct vec2 ( temp 2-component vector of float) +0:41 'scf1' ( specialization-constant const highp float) +0:41 1.000000 +0:41 'scf1' ( specialization-constant const highp float) +0:41 1.000000 +0:? Linker Objects +0:? 'scf1' ( specialization-constant const highp float) +0:? 1.000000 +0:? 'scbt' ( specialization-constant const bool) +0:? true (const bool) +0:? 'sci2' ( specialization-constant const highp int) +0:? 2 (const int) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 50 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" + Source GLSL 450 + Name 4 "main" + Name 7 "scf1" + Name 11 "scbt" + Name 13 "sci2" + Decorate 7(scf1) SpecId 200 + Decorate 11(scbt) SpecId 201 + Decorate 13(sci2) SpecId 202 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7(scf1): 6(float) SpecConstant 1065353216 + 8: TypeBool + 9: 6(float) Constant 0 + 11(scbt): 8(bool) SpecConstantTrue + 12: TypeInt 32 1 + 13(sci2): 12(int) SpecConstant 2 + 14: TypeInt 32 0 + 15: 14(int) Constant 0 + 16: 8(bool) SpecConstantOp 171 13(sci2) 15 + 17: 6(float) Constant 1065353216 + 21: 12(int) Constant 0 + 22: 12(int) Constant 1 + 23: 12(int) SpecConstantOp 169 11(scbt) 22 21 + 25: 8(bool) SpecConstantOp 166 11(scbt) 11(scbt) + 26: 12(int) SpecConstantOp 132 13(sci2) 13(sci2) + 30: 8(bool) SpecConstantOp 168 11(scbt) + 31: 12(int) SpecConstantOp 126 13(sci2) + 33: 8(bool) SpecConstantOp 173 13(sci2) 13(sci2) + 35: 8(bool) SpecConstantOp 165 11(scbt) 11(scbt) + 36: 8(bool) SpecConstantOp 171 13(sci2) 13(sci2) + 37: TypeVector 12(int) 2 + 38: 37(ivec2) SpecConstantComposite 13(sci2) 13(sci2) + 39: 37(ivec2) SpecConstantComposite 13(sci2) 13(sci2) + 40: 37(ivec2) SpecConstantComposite 13(sci2) 13(sci2) + 41: 14(int) Constant 2 + 42: TypeArray 37(ivec2) 41 + 44: TypeVector 6(float) 2 + 48: TypeArray 44(fvec2) 41 + 4(main): 2 Function None 3 + 5: Label + 10: 8(bool) FOrdNotEqual 7(scf1) 9 + 18: 6(float) Select 11(scbt) 17 9 + 19: 6(float) ConvertSToF 13(sci2) + 20: 12(int) ConvertFToS 7(scf1) + 24: 6(float) FMul 7(scf1) 7(scf1) + 27: 6(float) ConvertSToF 13(sci2) + 28: 6(float) FAdd 7(scf1) 27 + 29: 6(float) FNegate 7(scf1) + 32: 8(bool) FOrdGreaterThan 7(scf1) 7(scf1) + 34: 8(bool) FOrdNotEqual 7(scf1) 7(scf1) + 43: 42 CompositeConstruct 39 40 + 45: 44(fvec2) CompositeConstruct 7(scf1) 7(scf1) + 46: 44(fvec2) CompositeConstruct 7(scf1) 7(scf1) + 47: 44(fvec2) CompositeConstruct 7(scf1) 7(scf1) + 49: 48 CompositeConstruct 46 47 + Return + FunctionEnd diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/vulkan.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/vulkan.comp.out new file mode 100644 index 0000000..5eb4c5b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/vulkan.comp.out @@ -0,0 +1,7 @@ +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. + + +SPIR-V is not generated for failed compile or link diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/vulkan.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/vulkan.frag.out new file mode 100644 index 0000000..27edff9 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/vulkan.frag.out @@ -0,0 +1,48 @@ +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 +ERROR: 0:17: 'sampler2D' : sampler-constructor second argument must be a scalar type 'sampler' +ERROR: 0:18: 'sampler2D' : sampler-constructor second argument must be a scalar type 'sampler' +ERROR: 0:19: 'sampler2D' : sampler-constructor second argument must be a scalar type 'sampler' +ERROR: 0:21: 'sampler3D' : sampler-constructor cannot make an array of samplers +ERROR: 0:22: 'sampler2D' : sampler-constructor first argument must be a scalar textureXXX type +ERROR: 0:23: 'sampler2D' : sampler-constructor first argument must match type and dimensionality of constructor type +ERROR: 0:24: 'sampler2D' : sampler-constructor second argument presence of shadow must match constructor presence of shadow +ERROR: 0:25: 'sampler2DShadow' : sampler-constructor second argument presence of shadow must match constructor presence of shadow +ERROR: 0:28: 'sampler2D' : sampler/image types can only be used in uniform variables or function parameters: s2D +ERROR: 0:29: 'sampler3D' : sampler-constructor cannot make an array of samplers +ERROR: 0:29: 'sampler3D' : sampler/image types can only be used in uniform variables or function parameters: s3d +ERROR: 0:29: '=' : cannot convert from ' const float' to ' global 4-element array of highp sampler3D' +ERROR: 0:39: 'push_constant' : can only be used with a uniform +ERROR: 0:43: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan +ERROR: 0:43: 'push_constant' : can only be used with a block +ERROR: 0:45: 'push_constant' : cannot declare a default, can only be used on a block +ERROR: 0:52: 'input_attachment_index' : can only be used with a subpass +ERROR: 0:53: 'input_attachment_index' : can only be used with a subpass +ERROR: 0:54: 'subpass' : requires an input_attachment_index layout qualifier +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:67: 'subroutine' : not allowed when generating SPIR-V +ERROR: 0:67: 'uniform' : no qualifiers allowed for function return +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 +WARNING: 0:82: '' : all default precisions are highp; use precision statements to quiet warning, e.g.: + "precision mediump int; precision highp float;" +ERROR: 0:91: 'call argument' : sampler constructor must appear at point of use +ERROR: 0:92: 'call argument' : sampler constructor must appear at point of use +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: Linking fragment stage: Only one push_constant block is allowed per stage + +SPIR-V is not generated for failed compile or link diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/vulkan.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/vulkan.vert.out new file mode 100644 index 0000000..1e74417 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/vulkan.vert.out @@ -0,0 +1,29 @@ +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 +ERROR: 0:6: 'subpass input' : not supported in this stage: vertex +ERROR: 0:7: 'subpass input' : not supported in this stage: vertex +ERROR: 0:8: 'subpass input' : not supported in this stage: vertex +ERROR: 0:12: 'constant_id' : can only be applied to a scalar +ERROR: 0:13: 'constant_id' : specialization-constant id already used +ERROR: 0:13: 'constant_id' : can only be applied to 'const'-qualified scalar +ERROR: 0:13: 'constant_id' : cannot be applied to this type +ERROR: 0:14: 'constant_id' : specialization-constant id is too large +ERROR: 0:15: 'constant_id' : can only be applied to a scalar +ERROR: 0:16: 'constant_id' : specialization-constant id already used +ERROR: 0:16: 'constant_id' : cannot declare a default, can only be used on a scalar +ERROR: 0:20: 'subpassLoad' : no matching overloaded function found +ERROR: 0:20: 'assign' : cannot convert from ' const float' to ' smooth out highp 4-component vector of float' +ERROR: 0:23: 'atomic counter types' : not allowed when using GLSL for Vulkan +ERROR: 0:24: 'shared' : not allowed when generating SPIR-V +ERROR: 0:25: 'packed' : not allowed when generating SPIR-V +ERROR: 0:32: 'initializer' : can't use with types containing arrays sized with a specialization constant +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. + + +SPIR-V is not generated for failed compile or link diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/whileLoop.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/whileLoop.frag.out new file mode 100644 index 0000000..cfe972d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/whileLoop.frag.out @@ -0,0 +1,65 @@ +whileLoop.frag +Shader version: 110 +0:? Sequence +0:7 Function Definition: main( ( global void) +0:7 Function Parameters: +0:9 Sequence +0:9 Sequence +0:9 move second child to first child ( temp 4-component vector of float) +0:9 'color' ( temp 4-component vector of float) +0:9 'BaseColor' ( smooth in 4-component vector of float) +0:11 Loop with condition tested first +0:11 Loop Condition +0:11 Compare Less Than ( temp bool) +0:11 direct index ( temp float) +0:11 'color' ( temp 4-component vector of float) +0:11 Constant: +0:11 0 (const int) +0:11 'd' ( uniform float) +0:11 Loop Body +0:12 Sequence +0:12 add second child into first child ( temp 4-component vector of float) +0:12 'color' ( temp 4-component vector of float) +0:12 'bigColor' ( uniform 4-component vector of float) +0:15 move second child to first child ( temp 4-component vector of float) +0:15 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:15 'color' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'bigColor' ( uniform 4-component vector of float) +0:? 'BaseColor' ( smooth in 4-component vector of float) +0:? 'd' ( uniform float) + + +Linked fragment stage: + + +Shader version: 110 +0:? Sequence +0:7 Function Definition: main( ( global void) +0:7 Function Parameters: +0:9 Sequence +0:9 Sequence +0:9 move second child to first child ( temp 4-component vector of float) +0:9 'color' ( temp 4-component vector of float) +0:9 'BaseColor' ( smooth in 4-component vector of float) +0:11 Loop with condition tested first +0:11 Loop Condition +0:11 Compare Less Than ( temp bool) +0:11 direct index ( temp float) +0:11 'color' ( temp 4-component vector of float) +0:11 Constant: +0:11 0 (const int) +0:11 'd' ( uniform float) +0:11 Loop Body +0:12 Sequence +0:12 add second child into first child ( temp 4-component vector of float) +0:12 'color' ( temp 4-component vector of float) +0:12 'bigColor' ( uniform 4-component vector of float) +0:15 move second child to first child ( temp 4-component vector of float) +0:15 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:15 'color' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'bigColor' ( uniform 4-component vector of float) +0:? 'BaseColor' ( smooth in 4-component vector of float) +0:? 'd' ( uniform float) + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/bump b/3rdparty/bgfx/3rdparty/glslang/Test/bump new file mode 100755 index 0000000..f23be33 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/bump @@ -0,0 +1,2 @@ +cp localResults/* baseResults/ + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/comment.frag b/3rdparty/bgfx/3rdparty/glslang/Test/comment.frag new file mode 100644 index 0000000..f5c565c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/comment.frag @@ -0,0 +1,19 @@ + + // +/* anotehn t* ontuh * / tnoahnt /* oo */ +/* multi line... + +ao */ +/* no escape \ +oanot */ +// escape nothing \o oeu +// escape newline \ +still in a comment +// escape newline \ + +// a different comment +#version 430 core +in vec4 v; +void main() {} + + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/conditionalDiscard.frag b/3rdparty/bgfx/3rdparty/glslang/Test/conditionalDiscard.frag new file mode 100644 index 0000000..58e6fa5 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/conditionalDiscard.frag @@ -0,0 +1,14 @@ +#version 110 + +uniform sampler2D tex; +varying vec2 coord; + +void main (void) +{ + vec4 v = texture2D(tex, coord); + + if (v == vec4(0.1,0.2,0.3,0.4)) + discard; + + gl_FragColor = v; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/constErrors.frag b/3rdparty/bgfx/3rdparty/glslang/Test/constErrors.frag new file mode 100644 index 0000000..0067af1 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/constErrors.frag @@ -0,0 +1,35 @@ +#version 330 + +in vec4 inVar; +out vec4 outVar; + +const int constInt = 3; + +uniform int uniformInt; + +void main() +{ + const int a1 = 2; // okay + const int a2 = constInt; // okay + const int a3 = uniformInt; // error + + vec4 c[constInt]; // okay + vec4 d[uniformInt]; // error + vec4 e[constInt + uniformInt]; // error + vec4 f[uniformInt + constInt]; // error + + vec4 g[int(sin(0.3)) + 1]; // okay +} + +const struct S { + vec3 v3; + ivec2 iv2; +} s = S(vec3(3.0), ivec2(3, constInt + uniformInt)); // ERROR, non-const y componenent + +const struct S2 { + vec3 v3; + ivec2 iv2; + mat2x4 m; +} s2 = S2(vec3(3.0), ivec2(3, constInt), mat2x4(1.0, 2.0, 3.0, inVar.x, 5.0, 6.0, 7.0, 8.0)); // ERROR, non-constant matrix + +const float f = 3; // okay, type conversion diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/constFold.frag b/3rdparty/bgfx/3rdparty/glslang/Test/constFold.frag new file mode 100644 index 0000000..7306078 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/constFold.frag @@ -0,0 +1,148 @@ +#version 430 + +const int a = 1; +const int b = 2; +const int c = a + b; // 3 +const int d = c - a; // 2 +const float e = float(d); // 2.0 +const float f = e * float(c); // 6.0 +const float g = f / float(d); // 3.0 + +const vec2 pytho = vec2(3.0, 4.0); + +in vec4 inv; +out vec4 FragColor; +out vec2 out2; +out vec4 out3; +out vec4 out4; +out ivec4 out5; +out vec3 out6; +out vec4 out7; +out vec4 out8; +out vec4 out9; +out vec4 out10; +out vec4 out11; +out ivec2 out12; +out uvec3 out13; + +void main() +{ + vec4 dx = dFdx(inv); + const ivec4 v = ivec4(a, b, c, d); + vec4 array2[v.y]; // 2 + const ivec4 u = ~v; + + const float h = degrees(g); // 171.88 + + FragColor = vec4(e, f, g, h); // 2, 6, 3, 171.88 + + vec4 array3[c]; // 3 + vec4 arrayMax[int(max(float(array2.length()), float(array3.length())))]; + vec4 arrayMin[int(min(float(array2.length()), float(array3.length())))]; + FragColor = vec4(arrayMax.length(), arrayMin.length(), sin(3.14), cos(3.14)); // 3, 2, .00159, -.999 + out2 = length(pytho) + normalize(pytho) + dFdx(pytho) + dFdy(pytho) + fwidth(pytho); // 5+3/5, 5+4/5 + out3 = vec4(exp(3.0), log(10.0), exp2(4.0), log2(256.0)); // 20.08, 2.3, 16, 8 + out4 = vec4(sqrt(100.0), inversesqrt(100.0), abs(-4.7), abs(10.9)); // 10, .1, 4.7, 10.9 + out5 = ivec4(abs(-8) + sign(0), abs(17), sign(-12), sign(9)); // 8, 17, -1, 1 + out6 = vec3(sign(-8.8), sign(18.0), sign(0.0)); // -1.0, 1.0, 0.0 + out7 = vec4(floor(4.2), ceil(-4.1), trunc(5.9), trunc(-5.9)); // 4, -4, 5, -5 + out8 = vec4(round(4.4), round(4.6), roundEven(4.5), roundEven(-5.5)); // 4, 5, 4, -6 + out9 = vec4(roundEven(7.5), roundEven(-4.5), fract(2.345), fract(-2.6)); // 8, -4, .345, 0.4 + out10 = vec4(isinf(4.0/0.0), isinf(-3.0/0.0), isinf(0.0/0.0), isinf(-93048593405938405938405.0)); // true, true, false, false -> 1.0, 1.0, 0.0, 0.0 + out11 = vec4(isnan(4.0/0.0), isnan(-3.0/0.0), isnan(0.0/0.0), isnan(-93048593405938405938405.0)); // false, false, true, false -> 0.0, 1.0, 0.0, 0.0 + out11 = vec4(tan(0.8), atan(1.029), atan(8.0, 10.0), atan(10000.0)); // 1.029, 0.8, 0.6747, 1.57 + out11 = vec4(asin(0.0), asin(0.5), acos(0.0), acos(0.5)); // 0.0, .523599, 1.57, 1.047 + + const vec4 v1 = vec4(1.0, 0.0, 0.5, -0.2); + const vec4 v2 = vec4(0.2, 0.3, 0.4, 0.5); + out11 = atan(v1, v2); // 1.373401, 0.0, 0.896055, -0.380506 + + const ivec2 v3 = ivec2(15.0, 17.0); + const ivec2 v4 = ivec2(17.0, 15.0); + out12 = min(v3, 16); // 15, 16 + out12 = max(v3, v4); // 17, 17 + out2 = pow(vec2(v3), vec2(2.5, 3.0)); // 871.4, 4913 + out13 = clamp(uvec3(1, 20, 50), 10u, 30u); // 10, 20, 30 + out2 = mix(vec2(3.0, 4.0), vec2(5.0, 6.0), bvec2(false, true)); // 3.0, 6.0 + out2 = mix(vec2(3.0, 4.0), vec2(5.0, 6.0), 0.25); // 3.5, 4.5 + out2 = step(0.5, vec2(0.2, 0.6)); // 0.0, 1.0 + out11 = smoothstep(50.0, 60.0, vec4(40.0, 51.0, 55.0, 70.0)); // 0.0, 0.028, 0.5, 1.0 +} + +const struct S { + vec3 v3; + ivec2 iv2; + mat2x4 m; +} s = S(vec3(3.0), ivec2(3, a + b), mat2x4(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0)); + +void foo() +{ + float a[s.iv2.y]; // 3 element array + a[0] = s.m[1].z; // 7.0 + b % 0; // int + b / 0; + e / 0; + const uint ua = 5; + const uvec2 ub = uvec2(6, 7); + const uint uc = 8; + ub % 4u; + 0u % uc; + ub % 0u; +} + +const mat2 m2 = mat2(2, 3, 4, 5); +const mat3 m3 = mat3(m2); +const int mc = int(m3[2][2]); +float a1[mc]; +float a2[int(m3[2][1]) + 2]; // size 2 +float a3[int(m3[1][0])]; // size 4 +const vec2 v2 = vec2(1, 2); +const vec3 v3 = vec3(3, 4, 5); +float a4[uint(mat3(v2, v3, v2, v2)[2][2])]; // size 2 + +void foo2() +{ + a1[0]; // array size 1 + a2[0]; // array size 2 + a3[0]; // array size 4 + a4[0]; // array size 2 + v2[-1]; // ERROR + v3[4]; // ERROR + m3[0][-2]; // ERROR + m2[-1][1]; // ERROR + m3[1][3]; // ERROR + m3[3][1]; // ERROR + int p; + p = -2147483647 / -1; + p = -2147483648 / -1; + p = 2147483647 / -1; + float f = vec4(7.8 < 2.4 ? -1.333 : 1.444).a; + f = vec4(inv.x < 2.4 ? -1.0 : 1.0).a; // not folded, ensuring no propagation +} + +const mat2 mm2 = mat2(1.0, 2.0, 3.0, 4.0); +const mat3x2 mm32 = mat3x2(10.0, 11.0, 12.0, 13.0, 14.0, 15.0); + +void foo3() +{ + mat3x2 r32 = mm2 * mm32; +} + +struct cag { + int i; + float f; + bool b; +}; +const cag a0[3] = cag[3](cag(3, 2.0, true), cag(1, 5.0, true), cag(1, 9.0, false)); + +void foo4() +{ + int a = int(a0[2].f); +} + +const bool cval1 = all(bvec4(true, true, true, true)); +const bool cval2 = all(bvec4(false, false, false, false)); +const bool cval3 = all(bvec4(true, true, false, true)); +const bool cval4 = any(bvec4(true, true, true, true)); +const bool cval5 = any(bvec4(false, false, false, false)); +const bool cval6 = any(bvec4(false, true, false, false)); diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/conversion.frag b/3rdparty/bgfx/3rdparty/glslang/Test/conversion.frag new file mode 100644 index 0000000..f17293b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/conversion.frag @@ -0,0 +1,112 @@ +#version 130 + +uniform bool u_b; +uniform bvec2 u_b2; +uniform bvec3 u_b3; +uniform bvec4 u_b4; + +uniform int u_i; +uniform ivec2 u_i2; +uniform ivec3 u_i3; +uniform ivec4 u_i4; + +uniform float u_f; +uniform vec2 u_f2; +uniform vec3 u_f3; +uniform vec4 u_f4; + +uniform bool i_b; +uniform bvec2 i_b2; +uniform bvec3 i_b3; +uniform bvec4 i_b4; + +flat in int i_i; +flat in ivec2 i_i2; +flat in ivec3 i_i3; +flat in ivec4 i_i4; + +in float i_f; +in vec2 i_f2; +in vec3 i_f3; +in vec4 i_f4; + +void main() +{ + bool b = bool(u_i) ^^ bool(u_f); + bvec2 b2 = bvec2(u_i, u_f); + bvec3 b3 = bvec3(u_i, u_f, i_i); + bvec4 b4 = bvec4(u_i, u_f, i_i, i_f); + + int i = int(u_f) + int(b); + ivec2 i2 = ivec2(u_f2) + ivec2(b2); + ivec3 i3 = ivec3(u_f3) + ivec3(b3); + ivec4 i4 = ivec4(u_f4) + ivec4(b4); + + float f = i; + vec2 f2 = i2; + vec3 f3 = i3; + vec4 f4 = i4; + + f += (float(i) + float(b)); + f2 -= vec2(i2) + vec2(b2); + f3 /= vec3(i3) + vec3(b3); + f4 += vec4(i4) + vec4(b4); + + f4 += vec4(bvec4(i_i4)); + f4 += vec4(bvec4(u_f4)); + + f += f - i; + f2 += vec2(f, i) + i2; + f3 += i3 + vec3(f, i, f); + f4 += vec4(b, i, f, i) + i4; + + f2 += vec2(f, i) * i; + f3 += vec3(f, i, f) + i; + f4 += i - vec4(b, i, f, i); + + i2 += ivec2(f, i); + i3 += ivec3(f, i, f); + i4 += ivec4(b, i, f, i); + + if (f < i || i < f || + f2 == i2 || + i3 != f3) + f = (b ? i : f2.x) + (b2.x ? f3.x : i2.y); + + gl_FragColor = + b || + b2.x || + b2.y || + b3.x || + b3.y || + b3.z || + b4.x || + b4.y || + b4.z || + b4.w ? vec4( + i + + i2.x + + i2.y + + i3.x + + i3.y + + i3.z + + i4.x + + i4.y + + i4.z + + i4.w + + f + + f2.x + + f2.y + + f3.x + + f3.y + + f3.z + + f4.x + + f4.y + + f4.z + + f4.w) : vec4(1.0); + + // with constants... + ivec4 cv2 = ivec4(1.0); + bvec4 cv5 = bvec4(cv2); + gl_FragColor += float(cv5); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/cppBad.vert b/3rdparty/bgfx/3rdparty/glslang/Test/cppBad.vert new file mode 100644 index 0000000..49600f9 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/cppBad.vert @@ -0,0 +1,5 @@ +#define m#0# +#if m + +#define n() +int n" \ No newline at end of file diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/cppBad2.vert b/3rdparty/bgfx/3rdparty/glslang/Test/cppBad2.vert new file mode 100755 index 0000000..5e61b49 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/cppBad2.vert @@ -0,0 +1,3 @@ +#define a b( +#define b(x) +b(a) \ No newline at end of file diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/cppComplexExpr.vert b/3rdparty/bgfx/3rdparty/glslang/Test/cppComplexExpr.vert new file mode 100644 index 0000000..bce5ffa --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/cppComplexExpr.vert @@ -0,0 +1,183 @@ +#version 300 es +#define ON1 +#define ON2 +float sum = 0.0; + +void main() +{ +#if defined(ON1) && (defined(OFF) || defined(ON2)) +//yes + sum += 1.0; +#endif + +#if !defined(ON1) || (defined(OFF) || (!defined(OFF2) && defined(ON2))) +//yes + sum += 20.0; +#endif + +#if defined(ON1) && (defined(OFF) || !defined(ON2)) +//no + sum += 0.1; +#endif + +#if !defined(ON1) || (defined(OFF) || !defined(OFF2) && !defined(ON2)) +//no + sum += 0.2; +#endif + +#if !defined(ON1) || !defined(OFF) || defined(ON2) && defined(OFF2) +//yes + sum += 300.0; +#endif + +#if (!defined(ON1) || !defined(OFF) || defined(ON2)) && defined(OFF2) +//no + sum += 0.4; +#endif + +// sum should be 321.0 + gl_Position = vec4(sum); +} + +#define ADD(a, b) a + b + ((a) + ((b))); + +float foo() +{ + return ADD(gl_Position.xyxwx, 3.0) // ERROR, should be this line number + return ADD(gl_Position.y, 3.0) +} + +#define BIG aonetuhanoethuanoenaoethu snaoetuhs onethausoentuas hnoethaueohnatuoeh santuoehsantouhe snathoensuta hsnoethuasntoe hsnuathoesnuathoenstuh nsoethantseuh toae ua \ + antoeh uantheount oentahoent uahnsoethasnutoehansteuo santhu sneoathu snoethasnut oesanthoesna thusenotha nsthasunoeth ausntehsunathoensuathoesnta uhnsoetha usntoeh uanhs unosethu \ + antoehunatoehu natoehua oentha neotuhan toehu natoehu ntahoe nutah eu natoheunathoen uasoenuasoent asntoehsan tuosnthnu aohenuath eontha untoh eunth unth anth unth nth nth nt \ + a ntoehanu tunth nsont uhansoethausn oehsanthnt heauo eanthuo sh nahnoethansu tohe sanuthoe snathuoesntha snuothe anthusonehtasuntoeh asnuthonsa teauhntoeha onetuha nth \ + anoethuan toentauh noethauntohe anuthoe nathu noethaun oethanuthoe nathuoe ntahu enotha unetha ntuhenaothu enotahun eotha ntoehu aoehuntha enotuh aonethau noethu anoethuna toheua \ + ontehanutoe hnuathoena aoteha aonetuha + +// identical +#define BIG aonetuhanoethuanoenaoethu snaoetuhs onethausoentuas hnoethaueohnatuoeh santuoehsantouhe snathoensuta hsnoethuasntoe hsnuathoesnuathoenstuh nsoethantseuh toae ua \ + antoeh uantheount oentahoent uahnsoethasnutoehansteuo santhu sneoathu snoethasnut oesanthoesna thusenotha nsthasunoeth ausntehsunathoensuathoesnta uhnsoetha usntoeh uanhs unosethu \ + antoehunatoehu natoehua oentha neotuhan toehu natoehu ntahoe nutah eu natoheunathoen uasoenuasoent asntoehsan tuosnthnu aohenuath eontha untoh eunth unth anth unth nth nth nt \ + a ntoehanu tunth nsont uhansoethausn oehsanthnt heauo eanthuo sh nahnoethansu tohe sanuthoe snathuoesntha snuothe anthusonehtasuntoeh asnuthonsa teauhntoeha onetuha nth \ + anoethuan toentauh noethauntohe anuthoe nathu noethaun oethanuthoe nathuoe ntahu enotha unetha ntuhenaothu enotahun eotha ntoehu aoehuntha enotuh aonethau noethu anoethuna toheua \ + ontehanutoe hnuathoena aoteha aonetuha + +// ERROR, one character different +#define BIG aonetuhanoethuanoenaoethu snaoetuhs onethausoentuas hnoethaueohnatuoeh santuoehsantouhe snathoensuta hsnoethuasntoe hsnuathoesnuathoenstuh nsoethantseuh toae ua \ + antoeh uantheount oentahoent uahnsoethasnutoehansteuo santhu sneoathu snoethasnut oesanthoesna thusenotha nsthasunoeth ausntehsunathoensuathoesnta uhnsoetha usntoeh uanhs unosethu \ + antoehunatoehu natoehua oentha neotuhan toehu natoehu ntahoe nutah eu natoheunathoen uasoenuasoent asntoehsan tuosnthnu aohenuath eontha untoh eunth unth anth unth nth nth nt \ + a ntoehanu tunth nsont uhansoethasn oehsanthnt heauo eanthuo sh nahnoethansu tohe sanuthoe snathuoesntha snuothe anthusonehtasuntoeh asnuthonsa teauhntoeha onetuha nth \ + anoethuan toentauh noethauntohe anuthoe nathu noethaun oethanuthoe nathuoe ntahu enotha unetha ntuhenaothu enotahun eotha ntoehu aoehuntha enotuh aonethau noethu anoethuna toheua \ + ontehanutoe hnuathoena aoteha aonetuha + +#define BIGARGS1(aonthanotehu, bonthanotehu, conthanotehu, donthanotehu, eonthanotehu, fonthanotehu, gonthanotehu, honthanotehu, ionthanotehu, jonthanotehu, konthanotehu) jonthanotehu +#define BIGARGS2(aonthanotehu, bonthanotehu, conthanotehu, donthanotehu, eonthanotehu, fonthanotehu, gonthanotehu, honthanotehu, ionthanotehu, jonthanotehu, konthanotehu) jonthanotehu +#define BIGARGS3(aonthanotehu, bonthanotehu, conthanotehu, donthanotehu, eonthanotehu, fonthanotehu, gonthanotehu, honthanotehu, ionthanotehu, jonthanotehu, konthanotehu) jonthanotehu +#define BIGARGS4(aonthanotehu, bonthanotehu, conthanotehu, donthanotehu, eonthanotehu, fonthanotehu, gonthanotehu, honthanotehu, ionthanotehu, jonthanotehu, konthanotehu) jonthanotehu + + +#define foobar(a, b) a + b + +#if foobar(1.1, 2.2) +#error good macro +#else +#error bad macro +#endif + +#if foobar(1 +; +# +# +#endif +#if foobar(1, +; +# +# +#endif +float c = foobar(1.1, 2.2 + ); +#if foobar(1.1, 2.2 +) +#if foobar(1.1, 2.2 +#endif +#endif + +#define VAL0 0 +#define VAL1 1 + +#if UNDEF +#error bad 0 +#else +#error good 0 +#endif + +#if VAL1 || UNDEF +#error good 1 +#else +#error bad 1 +#endif + +#if VAL1 && UNDEF // UNDEF ERROR +#endif + +#if VAL0 || UNDEF // UNDEF ERROR +#endif + +#if VAL0 && UNDEF +#error bad 2 +#else +#error good 1 +#endif + +#if VAL1 || (VAL1 && UNDEF) +#error good 3 +#else +#error bad 3 +#endif + +#if VAL1 && (VAL1 || UNDEF) +#error good 4 +#else +#error bad 4 +#endif + +#if VAL1 < VAL1 || VAL1 > VAL1 || UNDEF // UNDEF ERROR +#endif + +#if VAL1 < VAL1 || VAL1 > VAL1 && UNDEF +#endif + +#if VAL1 || UNDEF && UNDEF2 +#endif + +#if VAL0 || UNDEF && UNDEF2 // UNDEF ERROR +#endif + +#if (VAL1 || UNDEF) && UNDEF2 // UNDEF2 ERROR +#endif + +#if (VAL0 && UNDEF) || UNDEF2 // UNDEF2 ERROR +#endif + +#line 3000 +#error line of this error should be 3000 + +#define __LINE__ 30 +#define __FILE__ +#define __VERSION__ +#define GL_SOME_EXTENSION +#undef __LINE__ +#undef __FILE__ +#undef __VERSION__ +#undef GL_SOME_EXTENSION + +#line 4000 +#line 200 % 0 // ERROR, div by 0 +#if __LINE__ / 0 // ERROR, div by 0 +#endif + +#if 7% // ERROR incomplete expression + +#line 10000 +#if 0 +// ERROR, EOF \ No newline at end of file diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/cppIndent.vert b/3rdparty/bgfx/3rdparty/glslang/Test/cppIndent.vert new file mode 100644 index 0000000..41bb12e --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/cppIndent.vert @@ -0,0 +1,61 @@ +#version 110 + +#define ON + +float sum = 0.0; + +void main() +{ + +#ifdef ON +//yes +sum += 1.0; +#endif + +#ifdef OFF + //no + sum += 20.0; +#endif + + #if defined(ON) + //yes + sum += 300.0; + #endif + + #if defined(OFF) + //no + sum += 4000.0; + #endif + + #if !defined(ON) + //no + sum += 50000.0; + #endif + + #if !defined(OFF) + //yes + sum += 600000.0; + #endif + + #if defined (ON) && defined (OFF) +//no +sum += 7000000.0; + #endif + +#if defined ( ON ) && ! defined(OFF) +//yes +sum += 80000000.0; +#endif + +#if defined(OFF) || defined(ON) +//yes +sum += 900000000.0; +#endif + +// sum should be 980600301.0 + gl_Position = vec4(sum); +} + +#define FUNC(a,b) a+b +// needs to be last test in file due to syntax error +void foo986(){ FUNC( (((2)))), 4); } // ERROR, too few arguments ) diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/cppNest.vert b/3rdparty/bgfx/3rdparty/glslang/Test/cppNest.vert new file mode 100644 index 0000000..26038ea --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/cppNest.vert @@ -0,0 +1,177 @@ +#version 110 + +#define ON + +float sum = 0.0; + +void main() +{ + +#ifdef ON +//yes +sum += 1.0; + + #ifdef OFF + //no + sum += 20.0; + #endif + + #if defined(ON) + //yes + sum += 300.0; + #endif + +#endif + + +#if defined(OFF) +//no +sum += 4000.0; + +#if !defined(ON) +//no +sum += 50000.0; +#endif + + //no + sum += 0.1; + #ifdef ON + //no + sum += 0.2; + #endif + + //no + sum += 0.01; + #ifdef ON + //no + sum += 0.02; + #else + //no + sum += 0.03; + #endif + +//no + sum + 0.3; + +#endif + + +#if !defined(OFF) +//yes +sum += 600000.0; + + #if defined(ON) && !defined(OFF) + //yes + sum += 80000000.0; + + #if defined(OFF) || defined(ON) + //yes + sum += 900000000.0; + + #if defined(ON) && defined(OFF) + //no + sum += 0.7; + #elif !defined(OFF) + //yes + sum += 7000000.0; + #endif + + #endif + + #endif + +#endif + +// sum should be 987600301.0 + gl_Position = vec4(sum); +} + +#define A 1 +#define C 0 +#define E 0 +#define F 1 +#if A + #if C + #if E + int selected4 = 1; + #elif F + int selected4 = 2; + #else + int selected4 = 3; + #endif + #endif + int selected4 = 4; +#endif + +#define ZA 1 +#define ZC 1 +#define ZE 0 +#define ZF 1 +#if ZA + #if ZC + #if ZE + int selected2 = 1; + #elif ZF + int selected2 = 2; + #else + int selected2 = 3; + #endif + #endif +#endif + +#define AZA 1 +#define AZC 1 +#define AZE 0 +#define AZF 0 +#if AZA + #if AZC + #if AZE + int selected3 = 1; + #elif AZF + int selected3 = 2; + #else + int selected3 = 3; + #endif + #endif +#endif + +// ERROR cases... + +#if 0 +int; +#else +int; +#elif 1 +int; +#endif + +#if 0 +int; +#else +int; +#else +int; +#endif + +#if 0 + #if 0 + int; + #else + int; + #elif 1 + int; + #endif + + #if 0 + int; + #else + int; + #else + int; + #endif +#endif + +#define FUNC(a,b) a+b +void foo985(){ FUNC( (((2))), ((3),4)); } +// needs to be last test in file +void foo987(){ FUNC(((); } // ERROR, EOF in argument diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/cppSimple.vert b/3rdparty/bgfx/3rdparty/glslang/Test/cppSimple.vert new file mode 100644 index 0000000..198203a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/cppSimple.vert @@ -0,0 +1,343 @@ +#version 400 + +#define ON + +float sum = 0.0; + +void main() +{ + +#ifdef ON +//yes +sum += 1.0; +#endif + +#ifdef OFF +//no +sum += 20.0; +#endif + +#if defined(ON) +//yes +sum += 300.0; +#endif + +#if defined(OFF) +//no +sum += 4000.0; +#endif + +#if !defined(ON) +//no +sum += 50000.0; +#endif + +#ifndef OFF +//yes +sum += 600000.0; +#else +//no +sum += 0.6; +#endif + +#if defined(ON) && defined(OFF) +//no +sum += 0.7; +#elif !defined(OFF) +//yes +sum += 7000000.0; +#endif + +#if defined(ON) && !defined(OFF) +//yes +sum += 80000000.0; +#endif + +#if defined(OFF) || defined(ON) +//yes +sum += 900000000.0; +#endif + +#if NEVER_DEFINED +//no +sum += 0.04; +#else +sum += 0.05; +#endif + +// sum should be 987600301.7 + gl_Position = vec4(sum); +} + +#define A 0 +# define B 0 + # define C 0 + +#if (A == B) || (A == C) +#error good1 +#endif + +#if A == B || (A == C) +#error good2 +#endif + +#if (A == B || (A == C)) +#error good3 +#endif + +#if (AA == BB) || (AA == CC) +#error good4 +#endif + +#if AA == BB || (AA == CC) +#error good5 +#endif + +#if ((AA == BB || (AA == CC))) +#error good6 +#endif + +#if (A == B || (A == C) +#error bad1 +#endif + +#if A == B || A == C) +#error bad2 +#endif + +#if (A == B || (A == C) +#error bad3 +#endif + +#if AA == BB) || (AA == CC) +#error bad4 +#endif + +#if AA == BB || (AA == CC +#error bad5 +#endif + +#if ((AA == BB || (AA == CC)))) +#error bad6 +#endif extra tokens + +int linenumber = __LINE__; +int filenumber = __FILE__; +int version = __VERSION__; + +#define PI (3.14) +#define TWOPI (2.0 * PI) +float twoPi = TWOPI; + +//#define PASTE(a,b) a ## b +//float PASTE(tod, ay) = 17; + +"boo" // ERROR +int a = length("aoenatuh"); // ERROR +#define QUOTE "abcd" // okay +'int'; // ERROR +#define SINGLE 'a' // okay +// ERROR: all the following are reserved +#define GL_ +#define GL_Macro 1 +#define __M +#define M__ +#define ABC__DE abc + +#if 4 +#else extra +#elif +// ERROR elif after else +#endif + +#if blah + #if 0 + #else extra + #ifdef M + #else + #else + // ERROR else after else + #endif extra + #endif +#endif + +#define m1(a,a) // ERROR +#define m2(a,b) + +// okay +#define m3 (a) +#define m3 (a) + +// ERROR +#define m4(b) +#define m4 (b) + +// ERROR +#define m5 (b) +#define m5(b) + +// ERROR +#define m6(a) +#define m6 + +// ERROR (whitespace) +#define m7 (a) +#define m7 ( a) + +#define m80(a,b) is + exactly m3 the same +#define m80(a,b) is + exactly m3 the same + +// ERROR +#define m8(a,b) almost + exactly m3 the same +#define m8(a,b) almost + exactly m3 thee same + +// ERROR +#define m9(a,b,c) aoe +#define m9(a,d,c) aoe + +#define n1 0xf +int n = n1; + +#define f1 .08e-2Lf +double f = f1; + +#undef __VERSION__ +#undef GL_ARB_texture_rectangle + +# + # + # +## +# # +# 0x25 +#### +####ff +#########ff fg 0x25 +#pragma +#pragma(aoent) + # pragma +#pragma STDGL +#pragma optimize( on) +#pragma optimize(off) +#pragma debug( on) +#pragma debug(off ) +#pragma optimize( on) anoteun +#pragma optimize(off +#pragma debug( on) ( +#pragma debug(off aoeua) +#pragma optimize( on) +#pragma optimize(off,) +#pragma debug( on, aoeu) +#pragma debugoff ) +#pragma aontheu natoeh uantheo uasotea noeahuonea uonethau onethuanoeth aunotehau noeth anthoeua anoethuantoeh uantoehu natoehu naoteh unotaehu noethua onetuh aou +# \ + +# \ + error good continuation + +#flizbit + +#define directive error + +#directive directive was expanded + +#line 12000 +#error line should be 12000 +#line 13000 7 +#error line should be 13000, string 7 +#define L1 14000 +#define L2 13 +#define F1 5 +#define F2 7 +#line L1 + L2 +#error line should be 14013, string 7 +#line L1 + L2 F1 + F2 // antoeuh sat comment +#error line should be 14013, string 12 +#line L1 + L2 + F1 + F2 +#error line should be 14025, string 12 +#line 1234 F1 + F2 extra +#define empty_extra +#line 1235 F1 + F2 empty_extra +#define moreEmpty empty_extra +#line 1236 F1 + F2 moreEmpty empty_extra // okay, lots of nothin +#line 1237 F1 + F2 moreEmpty empty_extra extra // ERROR, 'extra' +#line 1238 F1 + F2 moreEmpty empty_extra +#line 1239 empty_extra F1 empty_extra + empty_extra F2 empty_extra moreEmpty empty_extra +#line (20000) +#error line should be 20000 +#line (20000+10) +#error line should be 20010 +#line +20020 +#error line should be 20020 + +#define VAL1 1.0 +#define VAL2 2.0 + +#define RES2 /* test a multiline + comment in a macro definition */ (RES1 * VAL2) +#define RES1 (VAL2 / VAL1) +#define RES2 /* comment */(RES1 * VAL2) +#define /* */SUM_VALUES (RES2 + RES1) + +void foo234() +{ + gl_Position = vec4(SUM_VALUES); +} + +// more whitespace recording tests +#define SPACE_AT_END(a,b) spaceAtEndIsOkay +#define SPACE_AT_END(a,b) spaceAtEndIsOkay // space at end + +#define SPACE_AT_BEGIN(a,b)spaceAtBeginIsOkay +#define SPACE_AT_BEGIN(a,b) spaceAtBeginIsOkay + +// space in middle is an error +#define SPACE_IN_MIDDLE(a,b) space +in middle +#define SPACE_IN_MIDDLE(a,b) space + in middle + +#define FIRSTPART 17 +#define SECONDPART + 5 + +#if FIRSTPART SECONDPART == 22 +#error good evaluation 1 +#endif + +#if moreEmpty FIRSTPART moreEmpty SECONDPART moreEmpty == moreEmpty 22 moreEmpty +#error good evaluation 2 +#endif + +// ERRORS... +#line 9000 +#if defined(OUNH +#endif +#if defined OUNH) +#endif + +// recursion (okay) +#define RECURSE RECURSE +int RECURSE; +#define R2 R1 +#define R1 R2 +#undef RECURSE +int R1 = RECURSE; + +#define FOOOM(a,b) a + b +int aoeua = FOOOM; +#if FOOOM +#endif + +#line 9500 +#if\376 +#endif +#if \376 +#endif +#if \377 +#endif +#error\377 +#error \ 376 +#error \377 + +#line 10000 +#if 1 +#else +// ERROR, missing #endif \ No newline at end of file diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/dataOut.frag b/3rdparty/bgfx/3rdparty/glslang/Test/dataOut.frag new file mode 100644 index 0000000..258f534 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/dataOut.frag @@ -0,0 +1,8 @@ +#version 130 + +varying vec4 Color; + +void main() +{ + gl_FragData[1] = Color; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/dataOutIndirect.frag b/3rdparty/bgfx/3rdparty/glslang/Test/dataOutIndirect.frag new file mode 100644 index 0000000..d6b8667 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/dataOutIndirect.frag @@ -0,0 +1,10 @@ +#version 130 + +varying vec4 Color; + +uniform int i; + +void main() +{ + gl_FragData[i] = Color; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/dce.frag b/3rdparty/bgfx/3rdparty/glslang/Test/dce.frag new file mode 100644 index 0000000..119a98d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/dce.frag @@ -0,0 +1,56 @@ +#version 400 + +const bool flag = false; + +int c = 0; + +void bar() +{ + if (flag) + ++c; // should still show up in AST + else + ++c; + + flag ? ++c : ++c; // both should still show up in AST + + switch (c) { + case 1: + ++c; + break; + ++c; // should still show up in AST + case 2: + break; + ++c; // should still show up in AST + default: + break; + } + + for (int i = 0; i < 0; ++i) + ++c; // should still show up in AST + + for (int i = 0; i < 10; ++i) { + if (c < 3) { + break; + ++c; // should still show up in AST + } else { + continue; + ++c; // should still show up in AST + } + } + + return; + + ++c; // should still show up in AST +} + +int foo() // not called, but should still show up in AST +{ + if (c > 4) { + return 4; + ++c; // should still show up in AST + } + + return 5; + + ++c; // should still show up in AST +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/decls.frag b/3rdparty/bgfx/3rdparty/glslang/Test/decls.frag new file mode 100644 index 0000000..486e796 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/decls.frag @@ -0,0 +1,49 @@ +#version 120 + +int a; +int b, c; +int d1 = 1; +int e2 = 2, f; +int g, h3 = 3; + +int i4[4]; +int j, k5[5]; +int m6[6], m7[7]; +int n8[8], p; + +int ii4[4] = int[](1, 2, 3, 4); +int ij, ik5[5] = int[](5, 6, 7, 8, 9); +int im2[2] = int[](10, 11), im3[3] = int[](12, 13, 14); +int in8[4] = int[](21, 22, 23, 24), ip; + +void vi4[4] = int[](1, 2, 3, 4); +void vj, vk5[5] = int[](5, 6, 7, 8, 9); +void vm2[2] = int[](10, 11), vm3[3] = int[](12, 13, 14); +void vn8[4] = int[](21, 22, 23, 24), vp; + +const int cii4[4] = int[](1, 2, 3, 4); +const int cij, cik5[5] = int[](5, 6, 7, 8, 9); +const int cim2[2] = int[](10, 11), cim3[3] = int[](12, 13, 14); +const int cin8[4] = int[](21, 22, 23, 24), cip; + +uniform int uii4[4] = int[](1, 2, 3, 4); +uniform int uij, uik5[5] = int[](5, 6, 7, 8, 9); +uniform int uim2[2] = int[](10, 11), uim3[3] = int[](12, 13, 14); +uniform int uin8[4] = int[](21, 22, 23, 24), uip; + +int gl_vi4[4] = int[](1, 2, 3, 4); +int gl_vj, gl_vk5[5] = int[](5, 6, 7, 8, 9); +int gl_vm2[2] = int[](10, 11), gl_vm3[3] = int[](12, 13, 14); +int gl_vn8[4] = int[](21, 22, 23, 24), gl_vp; + +void main() +{ + while (bool cond = b < c); + while (int icond = b); + while (bool gl_cond = b < c); +} + +int foob__vi4[4] = int[](1, 2, 3, 4); +int foob__vj, foob__vk5[5] = int[](5, 6, 7, 8, 9); +int __foobvm2[2] = int[](10, 11), __foobvm3[3] = int[](12, 13, 14); +int foob__vn8[4] = int[](21, 22, 23, 24), foob__vp; diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/deepRvalue.frag b/3rdparty/bgfx/3rdparty/glslang/Test/deepRvalue.frag new file mode 100644 index 0000000..4d88086 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/deepRvalue.frag @@ -0,0 +1,36 @@ +#version 120 + +uniform sampler2D sampler; + +vec4 v1 = vec4(2.0, 3.0, 5.0, 7.0); +vec4 v2 = vec4(11.0, 13.0, 17.0, 19.0); +vec4 v3 = vec4(23.0, 29.0, 31.0, 37.0); +vec4 v4 = vec4(41.0, 43.0, 47.0, 53.0); + +struct str { + int a; + vec2 b[3]; + bool c; +}; + +void main() +{ + mat4 m = mat4(v1, v2, v3, v4); + + mat4 mm = matrixCompMult(m, m); + float f = mm[1].w; // should be 19 * 19 = 361 + + // do a deep access to a spontaneous r-value + float g = matrixCompMult(m, m)[2].y; // should be 29 * 29 = 841 + + float h = str(1, vec2[3](vec2(2.0, 3.0), vec2(4.0, 5.0), vec2(6.0, 7.0)), true).b[1][1]; // should be 5.0 + + float i = texture2D(sampler, vec2(0.5,0.5)).y; + + i += (i > 0.1 ? v1 : v2)[3]; + + str t; + i += (t = str(1, vec2[3](vec2(2.0, 3.0), vec2(4.0, 5.0), vec2(6.0, 7.0)), true)).b[2].y; // should be 7.0 + + gl_FragColor = vec4(f, g, h, i); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/depthOut.frag b/3rdparty/bgfx/3rdparty/glslang/Test/depthOut.frag new file mode 100644 index 0000000..5a89271 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/depthOut.frag @@ -0,0 +1,10 @@ +#version 130 + +varying vec4 Color; +varying float Depth; + +void main() +{ + gl_FragDepth = Depth; + gl_FragColor = Color; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/discard-dce.frag b/3rdparty/bgfx/3rdparty/glslang/Test/discard-dce.frag new file mode 100644 index 0000000..f2fef4d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/discard-dce.frag @@ -0,0 +1,35 @@ +#version 110 +varying vec2 tex_coord; + +void main (void) +{ + vec4 white = vec4(1.0); + vec4 black = vec4(0.2); + vec4 color = white; + + // First, cut out our circle + float x = tex_coord.x*2.0 - 1.0; + float y = tex_coord.y*2.0 - 1.0; + + float radius = sqrt(x*x + y*y); + if (radius > 1.0) { + if (radius > 1.1) { + ++color; + } + + gl_FragColor = color; + + if (radius > 1.2) { + ++color; + } + + discard; + } + + // If we're near an edge, darken us a tiny bit + if (radius >= 0.75) + color -= abs(pow(radius, 16.0)/2.0); + + gl_FragColor = color; + +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/doWhileLoop.frag b/3rdparty/bgfx/3rdparty/glslang/Test/doWhileLoop.frag new file mode 100644 index 0000000..3d6f93c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/doWhileLoop.frag @@ -0,0 +1,16 @@ +#version 110 + +uniform vec4 bigColor; +varying vec4 BaseColor; +uniform float d; + +void main() +{ + vec4 color = BaseColor; + + do { + color += bigColor; + } while (color.x < d); + + gl_FragColor = color; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/earlyReturnDiscard.frag b/3rdparty/bgfx/3rdparty/glslang/Test/earlyReturnDiscard.frag new file mode 100644 index 0000000..718ea72 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/earlyReturnDiscard.frag @@ -0,0 +1,102 @@ +#version 110 + +uniform float d; +uniform vec4 bigColor, smallColor; +uniform vec4 otherColor; + +varying float c; + +uniform float threshhold; +uniform float threshhold2; +uniform float threshhold3; + +uniform float minimum; + +varying vec4 BaseColor; + +uniform bool b; + +void main() +{ + vec4 color = BaseColor; + vec4 color2; + + color2 = otherColor; + + if (c > d) + color += bigColor; + else + color += smallColor; + + if (color.z < minimum) + return; + + color.z++; + + if (color.z > threshhold) + discard; + + color++; + + // Two path, different rest + if (color.w > threshhold2) { + if (color.z > threshhold2) + return; + else if (b) + color.z++; + else { + if (color.x < minimum) { + discard; + } else { + color++; + } + } + } else { + if (b) + discard; + else + return; + } + + + // // Two path, shared rest + // if (color.w > threshhold2) { + // if (color.z > threshhold2) + // return; + // else if (b) + // color++; + // else { + // if (color.x < minimum) { + // discard; + // } else { + // color++; + // } + // } + // } else { + // if (b) + // discard; + // else + // return; + // } + + + // // One path + // if (color.w > threshhold2) { + // if (color.z > threshhold2) + // return; + // else { + // if (color.x < minimum) { + // discard; + // } else { + // color++; + // } + // } + // } else { + // if (b) + // discard; + // else + // return; + // } + + gl_FragColor = color * color2; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/empty.frag b/3rdparty/bgfx/3rdparty/glslang/Test/empty.frag new file mode 100644 index 0000000..e69de29 diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/empty2.frag b/3rdparty/bgfx/3rdparty/glslang/Test/empty2.frag new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/empty2.frag @@ -0,0 +1 @@ + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/empty3.frag b/3rdparty/bgfx/3rdparty/glslang/Test/empty3.frag new file mode 100644 index 0000000..14cd83d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/empty3.frag @@ -0,0 +1 @@ +#version 110 diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/errors.frag b/3rdparty/bgfx/3rdparty/glslang/Test/errors.frag new file mode 100644 index 0000000..99cf2b9 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/errors.frag @@ -0,0 +1,4 @@ +int main(int foo) +{ + return 1; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/es-link1.frag b/3rdparty/bgfx/3rdparty/glslang/Test/es-link1.frag new file mode 100644 index 0000000..fe4da41 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/es-link1.frag @@ -0,0 +1,8 @@ +#version 100 + +mediump vec4 calculateColor(); + +void main() +{ + gl_FragColor = calculateColor(); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/es-link2.frag b/3rdparty/bgfx/3rdparty/glslang/Test/es-link2.frag new file mode 100644 index 0000000..e7b5a47 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/es-link2.frag @@ -0,0 +1,8 @@ +#version 100 + +varying mediump vec4 varyingColor; + +mediump vec4 calculateColor() +{ + return varyingColor * 0.5; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/flowControl.frag b/3rdparty/bgfx/3rdparty/glslang/Test/flowControl.frag new file mode 100644 index 0000000..eaa6fb1 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/flowControl.frag @@ -0,0 +1,23 @@ +#version 120 + +uniform float d; +uniform vec4 bigColor, smallColor; +uniform vec4 otherColor; + +varying float c; +varying vec4 BaseColor; + +void main() +{ + vec4 color = BaseColor; + vec4 color2; + + color2 = otherColor; + + if (c > d) + color += bigColor; + else + color += smallColor; + + gl_FragColor = color * color2; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/forLoop.frag b/3rdparty/bgfx/3rdparty/glslang/Test/forLoop.frag new file mode 100644 index 0000000..117ecad --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/forLoop.frag @@ -0,0 +1,41 @@ +#version 130 + +uniform vec4 bigColor; +in vec4 BaseColor; +in float f; + +uniform int Count; +uniform uvec4 v4; + +void main() +{ + vec4 color = BaseColor; + + for (int i = 0; i < Count; ++i) { + color += bigColor; + } + + gl_FragColor = color; + + float sum = 0.0; + for (int i = 0; i < 4; ++i) + sum += v4[i]; + + vec4 tv4; + + for (int i = 0; i < 4; ++i) + tv4[i] = v4[i] * 4u; + + gl_FragColor += vec4(sum) + tv4; + + vec4 r; + r.xyz = BaseColor.xyz; + + for (int i = 0; i < Count; ++i) + r.w = f; + + gl_FragColor.xyz += r.xyz; + + for (int i = 0; i < 16; i += 4) + gl_FragColor *= f; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/forwardRef.frag b/3rdparty/bgfx/3rdparty/glslang/Test/forwardRef.frag new file mode 100644 index 0000000..49f3504 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/forwardRef.frag @@ -0,0 +1,37 @@ +#version 110 + +uniform vec4 bigColor; +varying vec4 BaseColor; +uniform float d; + +void bar(); +float foo(vec4); +float unreachableReturn(); + +void main() +{ + vec4 color = vec4(foo(BaseColor)); + + bar(); + float f = unreachableReturn(); + + gl_FragColor = color * f; +} + +void bar() +{ +} + +float unreachableReturn() +{ + bar(); + if (d < 4.2) + return 1.2; + else + return 4.5; +} + +float foo(vec4 bar) +{ + return bar.x + bar.y; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/functionCall.frag b/3rdparty/bgfx/3rdparty/glslang/Test/functionCall.frag new file mode 100644 index 0000000..e1fc0e0 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/functionCall.frag @@ -0,0 +1,44 @@ +#version 130 + +uniform vec4 bigColor; +varying vec4 BaseColor; +uniform float d; + +float h = 0.0; + +float foo(vec4 bar) +{ + return bar.x + bar.y; +} + +void bar() +{ +} + +float unreachableReturn() +{ + if (d < 4.2) + return 1.2; + else + return 4.5; + // might be another return inserted here by builders, has to be correct type +} + +float missingReturn() +{ + if (d < 4.5) { + h = d; + return 3.9; + } +} + +void main() +{ + vec4 color = vec4(foo(BaseColor)); + + bar(); + float f = unreachableReturn(); + float g = missingReturn(); + + gl_FragColor = color * f * h; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/functionSemantics.frag b/3rdparty/bgfx/3rdparty/glslang/Test/functionSemantics.frag new file mode 100644 index 0000000..e5c3ed0 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/functionSemantics.frag @@ -0,0 +1,75 @@ +#version 400 + +uniform float u; + +int foo(int a, const int b, in int c, const in int d, out int e, inout int f) +{ + int sum = a + b + c + d + f; // no e, it is out only + // sum should be 47 now + + a *= 64; + // no b, it is read only + c *= 64; + // no d, it is read only + e = 64 * 16; // e starts undefined + f *= 64; + + sum += a + 64 * b + c + 64 * d + e + f; // everything has a value now, totaling of 64(1+2+4+8+16+32) = 64*63 = 4032 + // sum should be 4032 + 47 = 4079 + + return sum; +} + +int foo2(float a, vec3 b, out int r) +{ + r = int(3.0 * a); + return int(5.0 * b.y); +} + +int foo3() +{ + if (u > 3.2) { + discard; + return 1000000; + } + + return 2000000; +} + +void main() +{ + int e; + int t = 2; + struct s { + ivec4 t; + } f; + f.t.y = 32; + + // test the different qualifers + int color = foo(1, 2, t+t, 8, e, f.t.y); + + color += 128 * (e + f.t.y); // right side should be 128(64(16 + 32)) = 393216 + // sum should be 4079 + 393216 = 397295 + + // test conversions + float arg; + float ret; + ret = foo2(4, ivec3(1,2,3), arg); // ret = 10, param = 12.0 + color += int(ret + arg); // adds 22, for total of 397317 + + color += foo3(); // theoretically, add 2000000, for total of 2397317 + + gl_FragColor = vec4(color); +} + +vec3 m(vec2); +void aggCall() +{ + float F; + m(ivec2(F)); // test input conversion of single argument that's an aggregate; other function tests in 120.vert +} + +vec4 badConv() +{ + return u; // ERROR, can change scalar to vector +} \ No newline at end of file diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glslangValidator b/3rdparty/bgfx/3rdparty/glslang/Test/glslangValidator new file mode 100755 index 0000000..856aa1a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/glslangValidator @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +../build/install/bin/glslangValidator $* diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glspv.esversion.vert b/3rdparty/bgfx/3rdparty/glslang/Test/glspv.esversion.vert new file mode 100644 index 0000000..23501bf --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/glspv.esversion.vert @@ -0,0 +1,5 @@ +#version 310 es + +void main() +{ +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glspv.frag b/3rdparty/bgfx/3rdparty/glslang/Test/glspv.frag new file mode 100644 index 0000000..cea8e13 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/glspv.frag @@ -0,0 +1,14 @@ +#version 330 + +#ifdef GL_SPIRV +#error GL_SPIRV is set ( correct, not an error ) +#if GL_SPIRV == 100 +#error GL_SPIR is 100 +#endif +#endif + +void main() +{ +} + +layout(input_attachment_index = 1) uniform subpassInput sub; // ERROR, no inputs diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glspv.version.frag b/3rdparty/bgfx/3rdparty/glslang/Test/glspv.version.frag new file mode 100644 index 0000000..c9c6779 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/glspv.version.frag @@ -0,0 +1,5 @@ +#version 330 compatibility + +void main() +{ +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glspv.version.vert b/3rdparty/bgfx/3rdparty/glslang/Test/glspv.version.vert new file mode 100644 index 0000000..c8573b7 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/glspv.version.vert @@ -0,0 +1,5 @@ +#version 150 + +void main() +{ +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glspv.vert b/3rdparty/bgfx/3rdparty/glslang/Test/glspv.vert new file mode 100644 index 0000000..d2724ca --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/glspv.vert @@ -0,0 +1,20 @@ +#version 450 + +layout(push_constant) uniform Material { int a; } mat; // ERROR, can't use push_constant + +layout(set = 0, binding = 0, std140) uniform Bt1 { int a; } bt1; +layout(set = 1, binding = 0, std140) uniform Bt2 { int a; } bt2; // ERROR, set has to be 0 + +layout(shared) uniform Bt3 { int a; } bt3; // ERROR, no shared +layout(packed) uniform Bt4 { int a; } bt4; // ERROR, no shared + +void main() +{ + gl_VertexIndex; // ERROR, not preset + gl_InstanceIndex; // ERROR, not present + gl_VertexID; + gl_InstanceID; + gl_DepthRangeParameters; // ERROR, not present +} + +uniform sampler s; // ERROR, no sampler diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.amend.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.amend.frag new file mode 100755 index 0000000..7c18273 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.amend.frag @@ -0,0 +1,28 @@ +float4 a; +float b; +static float4 m = a * b; +void f1() +{ + a * b; +} + +float3 c; + +void f2() +{ + a.x + b + c.x; +} + +void f3() +{ + c; +} + +int d; + +void f4() +{ + d * a; +} + +int e; \ No newline at end of file diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.array.flatten.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.array.flatten.frag new file mode 100644 index 0000000..987ce1b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.array.flatten.frag @@ -0,0 +1,38 @@ + +// uniform Texture1D g_tex3[3][2]; // TODO: legal in HLSL, but we don't handle it yet. + +uniform Texture1D g_tex[3]; +uniform Texture1D g_tex_explicit[3] : register(t1); + +SamplerState g_samp[3]; +SamplerState g_samp_explicit[3] : register(s5); + +uniform float3x3 g_mats[4]; +uniform float3x3 g_mats_explicit[4] : register(b10); +uniform float g_floats[4]; + +// uniform float g_floats[4] = { 10, 11, 12, 13 }; // TODO: ... add when initializer lists can be flattened. + +float4 TestFn1() +{ + return g_tex[1].Sample(g_samp[1], 0.2); +} + +float4 TestFn2(Texture1D l_tex[3], SamplerState l_samp[3]) +{ + return l_tex[2].Sample(l_samp[2], 0.2); +} + +static int not_flattened_a[5] = { 1, 2, 3, 4, 5 }; + +struct PS_OUTPUT { float4 color : SV_Target0; }; + +void main(out PS_OUTPUT ps_output) +{ + // test flattening for local assignment initialization + SamplerState local_sampler_array[3] = g_samp; + Texture1D local_texture_array[3] = g_tex; + float local_float_array[4] = g_floats; + + ps_output.color = TestFn1() + TestFn2(g_tex, g_samp); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.array.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.array.frag new file mode 100644 index 0000000..1abba89 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.array.frag @@ -0,0 +1,11 @@ +float4 a[4]; + +struct { + float4 m[7]; +} s[11]; + +float4 PixelShaderFunction(int i, float4 input[3]) : COLOR0 +{ + 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 diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.array.implicit-size.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.array.implicit-size.frag new file mode 100644 index 0000000..e7a54f4 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.array.implicit-size.frag @@ -0,0 +1,32 @@ + +// array size from initializer +static float g_array [ ] = { 1, 2, 3, 4, 5 }; + +// Unused: array size from initializer +static float g_array_unused [ ] = { 1, 2, 3, 4, 5, 6, 7 }; + +// Test initializer sizing for arrayed structs +static struct mystruct { + int i; + float f; +} g_mystruct[] = { + { 1, 2.0 }, + { 3, 4.0 }, +}; + +struct PS_OUTPUT { float4 color : SV_Target0; }; + +// INVALID: implicit size requires an initializer expression. +// uniform float bad[]; + +// INVALID: function parameters cannot be implicitly sized +// void BadFunction(int a[]) { } + +void main(out PS_OUTPUT ps_output) +{ + // local array sized from initializers + float l_array[] = { 1, 2, 3 }; + int idx; + + ps_output.color = g_array[0] + g_array[4] + l_array[1] + g_mystruct[0].f + g_array[idx]; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.array.multidim.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.array.multidim.frag new file mode 100644 index 0000000..524a889 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.array.multidim.frag @@ -0,0 +1,20 @@ + +float float_array[5][4][3]; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; +}; + +PS_OUTPUT main() +{ + float4 float4_array_1[2][3]; + float4 float4_array_2[5][3]; + + float4_array_1[1][2] = float_array[2][3][1]; + float4_array_2[1] = float4_array_1[0]; + + PS_OUTPUT psout; + psout.Color = float4_array_1[1][2]; + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.assoc.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.assoc.frag new file mode 100644 index 0000000..8ce1050 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.assoc.frag @@ -0,0 +1,11 @@ +float4 PixelShaderFunction( + float4 a1, + float4 a2, + float4 a3, + float4 a4, + float4 a5 + ) : COLOR0 +{ + a1 = a2 = a3 = a4 = a5; + return a1 + a2 + a3 + a4 + a5; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.attribute.expression.comp b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.attribute.expression.comp new file mode 100644 index 0000000..535fbad --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.attribute.expression.comp @@ -0,0 +1,15 @@ + +uniform int bound; + +#define FOO 3 +#define BAR 2 + +[numthreads(2+2, 2*3, (1+FOO)*BAR)] +float4 main() : SV_TARGET +{ + [unroll(5*2 + 1) ] + for (int x=0; x OutputStream) +{ + PSInput Vert; + + Vert.myfloat = test[0] + test[1] + test[2]; + Vert.something = VertexID[0]; + + OutputStream.Append(Vert); + OutputStream.Append(Vert); + OutputStream.RestartStrip(); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.buffer.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.buffer.frag new file mode 100644 index 0000000..b93dcd3 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.buffer.frag @@ -0,0 +1,32 @@ +cbuffer { + float4 v1; +}; + +tbuffer { + float4 v2; +}; + +cbuffer cbufName : register(b2, space10) { + float4 v3; + int i3 : packoffset(c1.y); +}; + +tbuffer tbufName : register(b8) { + float4 v4 : packoffset(c1); + int i4 : packoffset(c3); + float f1 : packoffset(c3.w); + float f3 : packoffset(c4.x); + 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; +}; + +float4 PixelShaderFunction(float4 input) : COLOR0 +{ + return input + v1 + v2 + v3 + v4; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.calculatelod.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.calculatelod.dx10.frag new file mode 100644 index 0000000..0fb7607 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.calculatelod.dx10.frag @@ -0,0 +1,44 @@ +SamplerState g_sSamp : register(s0); + +Texture1DArray g_tTex1df4a : register(t1); + +uniform Texture1DArray g_tTex1df4 : register(t0); +Texture1DArray g_tTex1di4a; +Texture1DArray g_tTex1du4a; + +Texture2DArray g_tTex2df4a; +Texture2DArray g_tTex2di4a; +Texture2DArray g_tTex2du4a; + +TextureCubeArray g_tTexcdf4a; +TextureCubeArray g_tTexcdi4a; +TextureCubeArray g_tTexcdu4a; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + // LOD queries do not pass array level in coordinate. + float txval10 = g_tTex1df4a . CalculateLevelOfDetail(g_sSamp, 0.1); + float txval11 = g_tTex1di4a . CalculateLevelOfDetail(g_sSamp, 0.2); + float txval12 = g_tTex1du4a . CalculateLevelOfDetail(g_sSamp, 0.3); + + float txval20 = g_tTex2df4a . CalculateLevelOfDetail(g_sSamp, float2(0.1, 0.2)); + float txval21 = g_tTex2di4a . CalculateLevelOfDetail(g_sSamp, float2(0.3, 0.4)); + float txval22 = g_tTex2du4a . CalculateLevelOfDetail(g_sSamp, float2(0.5, 0.6)); + + float txval40 = g_tTexcdf4a . CalculateLevelOfDetail(g_sSamp, float3(0.1, 0.2, 0.3)); + float txval41 = g_tTexcdi4a . CalculateLevelOfDetail(g_sSamp, float3(0.4, 0.5, 0.6)); + float txval42 = g_tTexcdu4a . CalculateLevelOfDetail(g_sSamp, float3(0.7, 0.8, 0.9)); + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.calculatelodunclamped.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.calculatelodunclamped.dx10.frag new file mode 100644 index 0000000..4c79aed --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.calculatelodunclamped.dx10.frag @@ -0,0 +1,44 @@ +SamplerState g_sSamp : register(s0); + +Texture1DArray g_tTex1df4a : register(t1); + +uniform Texture1DArray g_tTex1df4 : register(t0); +Texture1DArray g_tTex1di4a; +Texture1DArray g_tTex1du4a; + +Texture2DArray g_tTex2df4a; +Texture2DArray g_tTex2di4a; +Texture2DArray g_tTex2du4a; + +TextureCubeArray g_tTexcdf4a; +TextureCubeArray g_tTexcdi4a; +TextureCubeArray g_tTexcdu4a; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + // LOD queries do not pass array level in coordinate. + float txval10 = g_tTex1df4a . CalculateLevelOfDetailUnclamped(g_sSamp, 0.1); + float txval11 = g_tTex1di4a . CalculateLevelOfDetailUnclamped(g_sSamp, 0.2); + float txval12 = g_tTex1du4a . CalculateLevelOfDetailUnclamped(g_sSamp, 0.3); + + float txval20 = g_tTex2df4a . CalculateLevelOfDetailUnclamped(g_sSamp, float2(0.1, 0.2)); + float txval21 = g_tTex2di4a . CalculateLevelOfDetailUnclamped(g_sSamp, float2(0.3, 0.4)); + float txval22 = g_tTex2du4a . CalculateLevelOfDetailUnclamped(g_sSamp, float2(0.5, 0.6)); + + float txval40 = g_tTexcdf4a . CalculateLevelOfDetailUnclamped(g_sSamp, float3(0.1, 0.2, 0.3)); + float txval41 = g_tTexcdi4a . CalculateLevelOfDetailUnclamped(g_sSamp, float3(0.4, 0.5, 0.6)); + float txval42 = g_tTexcdu4a . CalculateLevelOfDetailUnclamped(g_sSamp, float3(0.7, 0.8, 0.9)); + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.cast.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.cast.frag new file mode 100644 index 0000000..c8dc821 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.cast.frag @@ -0,0 +1,4 @@ +float4 PixelShaderFunction(float4 input) : COLOR0 +{ + return (float4)input + (int4)input + (float4)1.198; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.comparison.vec.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.comparison.vec.frag new file mode 100644 index 0000000..b8f93c9 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.comparison.vec.frag @@ -0,0 +1,34 @@ +uniform float4 uf4; + +void Bug1( float4 a ) +{ + float4 v04 = float4( 0.0, 0.0, 0.0, 0.0 ); + float v01 = 0.0; + + bool4 r00 = a == v04; + bool4 r01 = a != v04; + bool4 r02 = a < v04; + bool4 r03 = a > v04; + + bool4 r10 = a == v01; + bool4 r11 = a != v01; + bool4 r12 = a < v01; + bool4 r13 = a > v01; + + bool4 r20 = v01 == a; + bool4 r21 = v01 != a; + bool4 r22 = v01 < a; + bool4 r23 = v01 > a; +} + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; +}; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + psout.Color = 0; + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.conditional.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.conditional.frag new file mode 100644 index 0000000..128c593 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.conditional.frag @@ -0,0 +1,16 @@ +float4 PixelShaderFunction(float4 input) : COLOR0 +{ + int a = 1 < 2 ? 3 < 4 ? 5 : 6 : 7; + int b = 1 < 2 ? 3 > 4 ? 5 : 6 : 7; + int c = 1 > 2 ? 3 > 4 ? 5 : 6 : 7; + int d = 1 > 2 ? 3 < 4 ? 5 : 6 : 7; + float4 ret = a * input + + b * input + + c * input + + d * input; + int e; + 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; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.constructexpr.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.constructexpr.frag new file mode 100644 index 0000000..7048f62 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.constructexpr.frag @@ -0,0 +1,17 @@ +struct PS_OUTPUT { float4 color : SV_Target0; }; + +PS_OUTPUT main() +{ + // Evaluates to a sequence: 3, 4, 5, 6, 7, 8, and a float2(9,10), float2(11,12) sequence + (int(3)); + (int(3) + int(1)); + (int(3) + int(1) + int(1)); + (((int(6)))); + (int(7.0)); + ((int((2)) ? 8 : 8)); + (float2(9, 10), float2(11, 12)); + + PS_OUTPUT ps_output; + ps_output.color = 1.0; + return ps_output; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.deadFunctionMissingBody.vert b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.deadFunctionMissingBody.vert new file mode 100644 index 0000000..a5f965a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.deadFunctionMissingBody.vert @@ -0,0 +1,8 @@ +float4 main(): SV_Target0 { return 0; } +struct Surface { float3 albedo; }; +Surface surfaceShader(float fade); +Surface surfaceShaderExec() +{ + float fade = 0; + return surfaceShader(0); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.depthGreater.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.depthGreater.frag new file mode 100644 index 0000000..ca41f08 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.depthGreater.frag @@ -0,0 +1,4 @@ +void PixelShaderFunction(out float depth : SV_DepthGreaterEqual) +{ + depth = 0.2; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.depthLess.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.depthLess.frag new file mode 100644 index 0000000..aca7dbb --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.depthLess.frag @@ -0,0 +1,4 @@ +float PixelShaderFunction() : SV_DepthLessEqual +{ + return 0.2; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.discard.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.discard.frag new file mode 100644 index 0000000..7d9271c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.discard.frag @@ -0,0 +1,14 @@ +void foo(float f) +{ + if (f < 1.0) + discard; +} + +void PixelShaderFunction(float4 input) : COLOR0 +{ + foo(input.z); + if (input.x) + discard; + float f = input.x; + discard; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.doLoop.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.doLoop.frag new file mode 100644 index 0000000..251a8c1 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.doLoop.frag @@ -0,0 +1,6 @@ +float4 PixelShaderFunction(float4 input) : COLOR0 +{ + [unroll] do {} while (false); + [unroll] do {;} while (false); + do { return input; } while (all(input == input)); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.emptystructreturn.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.emptystructreturn.frag new file mode 100644 index 0000000..f6a772a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.emptystructreturn.frag @@ -0,0 +1,13 @@ +struct ps_in +{ +}; + +struct ps_out +{ +}; + +ps_out main (ps_in i) +{ + ps_out o; + return o; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.emptystructreturn.vert b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.emptystructreturn.vert new file mode 100644 index 0000000..8ac6578 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.emptystructreturn.vert @@ -0,0 +1,13 @@ +struct vs_in +{ +}; + +struct vs_out +{ +}; + +vs_out main (vs_in i) +{ + vs_out o; + return o; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.entry-in.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.entry-in.frag new file mode 100644 index 0000000..e15955d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.entry-in.frag @@ -0,0 +1,20 @@ +struct InParam { + float2 v; + float4 fragCoord : SV_POSITION; + int2 i2; +}; + +float fun(InParam p) +{ + return p.v.y + p.fragCoord.x; +} + +float4 PixelShaderFunction(InParam i) : COLOR0 +{ + InParam local; + local = i; + float ret1 = fun(local); + float ret2 = fun(i); + + return local.fragCoord * ret1 * ret2; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.entry-out.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.entry-out.frag new file mode 100644 index 0000000..27b4dd6 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.entry-out.frag @@ -0,0 +1,23 @@ +struct OutParam { + float2 v; + int2 i; +}; + +void fun(out OutParam op) +{ + op.v = float2(0.4); + op.i = int2(7); +} + +float4 PixelShaderFunction(float4 input, out float4 out1, out OutParam out2, out OutParam out3) : COLOR0 +{ + out1 = input; + out2.v = 2.0; + out2.i = 3; + OutParam local; + local.v = 12.0; + local.i = 13; + fun(out3); + + return out1; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.entry.rename.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.entry.rename.frag new file mode 100644 index 0000000..188dfc5 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.entry.rename.frag @@ -0,0 +1,15 @@ + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; +}; + +void not_the_entry_point() { } +int also_not_the_entry_point; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + psout.Color = 0; + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.flatten.return.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.flatten.return.frag new file mode 100644 index 0000000..4aa3f50 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.flatten.return.frag @@ -0,0 +1,18 @@ + +struct PS_OUTPUT +{ + float4 color : SV_Target0; + float other_struct_member1; + float other_struct_member2; + float other_struct_member3; +}; + +PS_OUTPUT Func1() +{ + return PS_OUTPUT(float4(1,1,1,1), 2, 3, 4); +} + +PS_OUTPUT main() +{ + return Func1(); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.float1.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.float1.frag new file mode 100644 index 0000000..f9c0a6e --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.float1.frag @@ -0,0 +1,7 @@ +static float1 f1 = float1(1.0); +static float scalar = 2.0; + +float1 ShaderFunction(float1 inFloat1 : COLOR, float inScalar) : COLOR0 +{ + return f1 * scalar + inFloat1 * inScalar; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.float4.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.float4.frag new file mode 100644 index 0000000..b541f5d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.float4.frag @@ -0,0 +1,11 @@ +float4 AmbientColor = float4(1, 0.5, 0, 1); + +bool ff1 : SV_IsFrontFace; +float ff2 : packoffset(c1.y); +float4 ff3 : packoffset(c2) : register(ps_5_0, s0) ; +float4 ff4 : VPOS : packoffset(c3) : register(ps_5_0, s1) ; + +float4 ShaderFunction(float4 input) : COLOR0 +{ + return input * AmbientColor; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.forLoop.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.forLoop.frag new file mode 100644 index 0000000..9378996 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.forLoop.frag @@ -0,0 +1,13 @@ +float4 PixelShaderFunction(float4 input) : COLOR0 +{ + for (;;) ; + for (++input; ; ) ; + [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; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.frag new file mode 100644 index 0000000..1620ed5 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.frag @@ -0,0 +1,12 @@ +float4 AmbientColor = float4(1, 0.5, 0, 1); +float AmbientIntensity = 0.1; + +float4 PixelShaderFunction(float4 input) : COLOR0 +{ + return input * AmbientIntensity + AmbientColor; + return input * input + input * input; + return input + input * input + input; + return ++input * -+-+--input; + return input++ + ++input; + return sin(input); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gather.array.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gather.array.dx10.frag new file mode 100644 index 0000000..788c333 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gather.array.dx10.frag @@ -0,0 +1,43 @@ +SamplerState g_sSamp : register(s0); + +Texture1DArray g_tTex1df4a : register(t1); + +uniform Texture1DArray g_tTex1df4 : register(t0); +Texture1DArray g_tTex1di4a; +Texture1DArray g_tTex1du4a; + +Texture2DArray g_tTex2df4a; +Texture2DArray g_tTex2di4a; +Texture2DArray g_tTex2du4a; + +TextureCubeArray g_tTexcdf4a; +TextureCubeArray g_tTexcdi4a; +TextureCubeArray g_tTexcdu4a; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + // No 1D gathers + + float4 txval20 = g_tTex2df4a . Gather(g_sSamp, float3(0.1, 0.2, 0.3)); + int4 txval21 = g_tTex2di4a . Gather(g_sSamp, float3(0.3, 0.4, 0.5)); + uint4 txval22 = g_tTex2du4a . Gather(g_sSamp, float3(0.5, 0.6, 0.7)); + + // no 3D gathers + + float4 txval40 = g_tTexcdf4a . Gather(g_sSamp, float4(0.1, 0.2, 0.3, 0.4)); + int4 txval41 = g_tTexcdi4a . Gather(g_sSamp, float4(0.4, 0.5, 0.6, 0.7)); + uint4 txval42 = g_tTexcdu4a . Gather(g_sSamp, float4(0.7, 0.8, 0.9, 1.0)); + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gather.basic.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gather.basic.dx10.frag new file mode 100644 index 0000000..be0cd31 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gather.basic.dx10.frag @@ -0,0 +1,48 @@ +SamplerState g_sSamp : register(s0); +uniform sampler2D g_sSamp2d; + +Texture1D g_tTex1df4a : register(t1); + +uniform Texture1D g_tTex1df4 : register(t0); +Texture1D g_tTex1di4; +Texture1D g_tTex1du4; + +Texture2D g_tTex2df4; +Texture2D g_tTex2di4; +Texture2D g_tTex2du4; + +Texture3D g_tTex3df4; +Texture3D g_tTex3di4; +Texture3D g_tTex3du4; + +TextureCube g_tTexcdf4; +TextureCube g_tTexcdi4; +TextureCube g_tTexcdu4; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + // no 1D gathers + + float4 txval20 = g_tTex2df4 . Gather(g_sSamp, float2(0.1, 0.2)); + int4 txval21 = g_tTex2di4 . Gather(g_sSamp, float2(0.3, 0.4)); + uint4 txval22 = g_tTex2du4 . Gather(g_sSamp, float2(0.5, 0.6)); + + // no 3D gathers + + float4 txval40 = g_tTexcdf4 . Gather(g_sSamp, float3(0.1, 0.2, 0.3)); + int4 txval41 = g_tTexcdi4 . Gather(g_sSamp, float3(0.4, 0.5, 0.6)); + uint4 txval42 = g_tTexcdu4 . Gather(g_sSamp, float3(0.7, 0.8, 0.9)); + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gather.basic.dx10.vert b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gather.basic.dx10.vert new file mode 100644 index 0000000..4996f18 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gather.basic.dx10.vert @@ -0,0 +1,46 @@ +SamplerState g_sSamp : register(s0); +uniform sampler2D g_sSamp2d; + +Texture1D g_tTex1df4a : register(t1); + +uniform Texture1D g_tTex1df4 : register(t0); +Texture1D g_tTex1di4; +Texture1D g_tTex1du4; + +Texture2D g_tTex2df4; +Texture2D g_tTex2di4; +Texture2D g_tTex2du4; + +Texture3D g_tTex3df4; +Texture3D g_tTex3di4; +Texture3D g_tTex3du4; + +TextureCube g_tTexcdf4; +TextureCube g_tTexcdi4; +TextureCube g_tTexcdu4; + +struct VS_OUTPUT +{ + float4 Pos : SV_Position; +}; + +VS_OUTPUT main() +{ + VS_OUTPUT vsout; + + // no 1D gathers + + float4 txval20 = g_tTex2df4 . Gather(g_sSamp, float2(0.1, 0.2)); + int4 txval21 = g_tTex2di4 . Gather(g_sSamp, float2(0.3, 0.4)); + uint4 txval22 = g_tTex2du4 . Gather(g_sSamp, float2(0.5, 0.6)); + + // no 3D gathers + + float4 txval40 = g_tTexcdf4 . Gather(g_sSamp, float3(0.1, 0.2, 0.3)); + int4 txval41 = g_tTexcdi4 . Gather(g_sSamp, float3(0.4, 0.5, 0.6)); + uint4 txval42 = g_tTexcdu4 . Gather(g_sSamp, float3(0.7, 0.8, 0.9)); + + vsout.Pos = float4(0,0,0,0); + + return vsout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gather.offset.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gather.offset.dx10.frag new file mode 100644 index 0000000..4d095c0 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gather.offset.dx10.frag @@ -0,0 +1,44 @@ +SamplerState g_sSamp : register(s0); + +Texture1D g_tTex1df4a : register(t1); + +uniform Texture1D g_tTex1df4 : register(t0); +Texture1D g_tTex1di4; +Texture1D g_tTex1du4; + +Texture2D g_tTex2df4; +Texture2D g_tTex2di4; +Texture2D g_tTex2du4; + +Texture3D g_tTex3df4; +Texture3D g_tTex3di4; +Texture3D g_tTex3du4; + +TextureCube g_tTexcdf4; +TextureCube g_tTexcdi4; +TextureCube g_tTexcdu4; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + // no 1D Gathers + + float4 txval20 = g_tTex2df4 . Gather(g_sSamp, float2(0.1, 0.2), int2(1,0)); + int4 txval21 = g_tTex2di4 . Gather(g_sSamp, float2(0.3, 0.4), int2(1,1)); + uint4 txval22 = g_tTex2du4 . Gather(g_sSamp, float2(0.5, 0.6), int2(1,-1)); + + // no 3D gathers + // No Cube offset gathers + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gather.offsetarray.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gather.offsetarray.dx10.frag new file mode 100644 index 0000000..5cc9252 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gather.offsetarray.dx10.frag @@ -0,0 +1,36 @@ +SamplerState g_sSamp : register(s0); + +Texture1DArray g_tTex1df4a : register(t1); + +uniform Texture1DArray g_tTex1df4 : register(t0); +Texture1DArray g_tTex1di4; +Texture1DArray g_tTex1du4; + +Texture2DArray g_tTex2df4; +Texture2DArray g_tTex2di4; +Texture2DArray g_tTex2du4; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + // No 1D gathers + + float4 txval20 = g_tTex2df4 . Gather(g_sSamp, float3(0.1, 0.2, 0.3), int2(1,0)); + int4 txval21 = g_tTex2di4 . Gather(g_sSamp, float3(0.3, 0.4, 0.4), int2(1,1)); + uint4 txval22 = g_tTex2du4 . Gather(g_sSamp, float3(0.5, 0.6, 0.7), int2(1,-1)); + + // No 3D gathers + // No Cube offset gathers + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gatherRGBA.array.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gatherRGBA.array.dx10.frag new file mode 100644 index 0000000..279b6d6 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gatherRGBA.array.dx10.frag @@ -0,0 +1,71 @@ +SamplerState g_sSamp : register(s0); +uniform sampler2D g_sSamp2d; + +uniform Texture1DArray g_tTex1df4a : register(t0); +Texture1DArray g_tTex1di4a; +Texture1DArray g_tTex1du4a; + +Texture2DArray g_tTex2df4a; +Texture2DArray g_tTex2di4a; +Texture2DArray g_tTex2du4a; + +TextureCubeArray g_tTexcdf4a; +TextureCubeArray g_tTexcdi4a; +TextureCubeArray g_tTexcdu4a; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +uniform float c1; +uniform float2 c2; +uniform float3 c3; +uniform float4 c4; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + // no 1D gathers + + float4 txval00 = g_tTex2df4a . GatherRed(g_sSamp, c3); + int4 txval01 = g_tTex2di4a . GatherRed(g_sSamp, c3); + uint4 txval02 = g_tTex2du4a . GatherRed(g_sSamp, c3); + + float4 txval10 = g_tTex2df4a . GatherGreen(g_sSamp, c3); + int4 txval11 = g_tTex2di4a . GatherGreen(g_sSamp, c3); + uint4 txval12 = g_tTex2du4a . GatherGreen(g_sSamp, c3); + + float4 txval20 = g_tTex2df4a . GatherBlue(g_sSamp, c3); + int4 txval21 = g_tTex2di4a . GatherBlue(g_sSamp, c3); + uint4 txval22 = g_tTex2du4a . GatherBlue(g_sSamp, c3); + + float4 txval30 = g_tTex2df4a . GatherAlpha(g_sSamp, c3); + int4 txval31 = g_tTex2di4a . GatherAlpha(g_sSamp, c3); + uint4 txval32 = g_tTex2du4a . GatherAlpha(g_sSamp, c3); + + // no 3D gathers + + float4 txval40 = g_tTexcdf4a . GatherRed(g_sSamp, c4); + int4 txval41 = g_tTexcdi4a . GatherRed(g_sSamp, c4); + uint4 txval42 = g_tTexcdu4a . GatherRed(g_sSamp, c4); + + float4 txval50 = g_tTexcdf4a . GatherGreen(g_sSamp, c4); + int4 txval51 = g_tTexcdi4a . GatherGreen(g_sSamp, c4); + uint4 txval52 = g_tTexcdu4a . GatherGreen(g_sSamp, c4); + + float4 txval60 = g_tTexcdf4a . GatherBlue(g_sSamp, c4); + int4 txval61 = g_tTexcdi4a . GatherBlue(g_sSamp, c4); + uint4 txval62 = g_tTexcdu4a . GatherBlue(g_sSamp, c4); + + float4 txval70 = g_tTexcdf4a . GatherAlpha(g_sSamp, c4); + int4 txval71 = g_tTexcdi4a . GatherAlpha(g_sSamp, c4); + uint4 txval72 = g_tTexcdu4a . GatherAlpha(g_sSamp, c4); + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gatherRGBA.basic.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gatherRGBA.basic.dx10.frag new file mode 100644 index 0000000..17fae19 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gatherRGBA.basic.dx10.frag @@ -0,0 +1,77 @@ +SamplerState g_sSamp : register(s0); +uniform sampler2D g_sSamp2d; + +Texture1D g_tTex1df4a : register(t1); + +uniform Texture1D g_tTex1df4 : register(t0); +Texture1D g_tTex1di4; +Texture1D g_tTex1du4; + +Texture2D g_tTex2df4; +Texture2D g_tTex2di4; +Texture2D g_tTex2du4; + +Texture3D g_tTex3df4; +Texture3D g_tTex3di4; +Texture3D g_tTex3du4; + +TextureCube g_tTexcdf4; +TextureCube g_tTexcdi4; +TextureCube g_tTexcdu4; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +uniform float c1; +uniform float2 c2; +uniform float3 c3; +uniform float4 c4; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + // no 1D gathers + + float4 txval00 = g_tTex2df4 . GatherRed(g_sSamp, c2); + int4 txval01 = g_tTex2di4 . GatherRed(g_sSamp, c2); + uint4 txval02 = g_tTex2du4 . GatherRed(g_sSamp, c2); + + float4 txval10 = g_tTex2df4 . GatherGreen(g_sSamp, c2); + int4 txval11 = g_tTex2di4 . GatherGreen(g_sSamp, c2); + uint4 txval12 = g_tTex2du4 . GatherGreen(g_sSamp, c2); + + float4 txval20 = g_tTex2df4 . GatherBlue(g_sSamp, c2); + int4 txval21 = g_tTex2di4 . GatherBlue(g_sSamp, c2); + uint4 txval22 = g_tTex2du4 . GatherBlue(g_sSamp, c2); + + float4 txval30 = g_tTex2df4 . GatherAlpha(g_sSamp, c2); + int4 txval31 = g_tTex2di4 . GatherAlpha(g_sSamp, c2); + uint4 txval32 = g_tTex2du4 . GatherAlpha(g_sSamp, c2); + + // no 3D gathers + + float4 txval40 = g_tTexcdf4 . GatherRed(g_sSamp, c3); + int4 txval41 = g_tTexcdi4 . GatherRed(g_sSamp, c3); + uint4 txval42 = g_tTexcdu4 . GatherRed(g_sSamp, c3); + + float4 txval50 = g_tTexcdf4 . GatherGreen(g_sSamp, c3); + int4 txval51 = g_tTexcdi4 . GatherGreen(g_sSamp, c3); + uint4 txval52 = g_tTexcdu4 . GatherGreen(g_sSamp, c3); + + float4 txval60 = g_tTexcdf4 . GatherBlue(g_sSamp, c3); + int4 txval61 = g_tTexcdi4 . GatherBlue(g_sSamp, c3); + uint4 txval62 = g_tTexcdu4 . GatherBlue(g_sSamp, c3); + + float4 txval70 = g_tTexcdf4 . GatherAlpha(g_sSamp, c3); + int4 txval71 = g_tTexcdi4 . GatherAlpha(g_sSamp, c3); + uint4 txval72 = g_tTexcdu4 . GatherAlpha(g_sSamp, c3); + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gatherRGBA.offset.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gatherRGBA.offset.dx10.frag new file mode 100644 index 0000000..a8909b4 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gatherRGBA.offset.dx10.frag @@ -0,0 +1,116 @@ +SamplerState g_sSamp : register(s0); +uniform sampler2D g_sSamp2d; + +Texture1D g_tTex1df4a : register(t1); + +uniform Texture1D g_tTex1df4 : register(t0); +Texture1D g_tTex1di4; +Texture1D g_tTex1du4; + +Texture2D g_tTex2df4; +Texture2D g_tTex2di4; +Texture2D g_tTex2du4; + +Texture3D g_tTex3df4; +Texture3D g_tTex3di4; +Texture3D g_tTex3du4; + +TextureCube g_tTexcdf4; +TextureCube g_tTexcdi4; +TextureCube g_tTexcdu4; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +uniform float c1; +uniform float2 c2; +uniform float3 c3; +uniform float4 c4; + +uniform int o1; +uniform int2 o2; +uniform int3 o3; +uniform int4 o4; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + uint status; + + // no 1D gathers + + float4 txval001 = g_tTex2df4 . GatherRed(g_sSamp, c2, o2); + int4 txval011 = g_tTex2di4 . GatherRed(g_sSamp, c2, o2); + uint4 txval021 = g_tTex2du4 . GatherRed(g_sSamp, c2, o2); + + float4 txval004 = g_tTex2df4 . GatherRed(g_sSamp, c2, o2, o2, o2, o2); + int4 txval014 = g_tTex2di4 . GatherRed(g_sSamp, c2, o2, o2, o2, o2); + uint4 txval024 = g_tTex2du4 . GatherRed(g_sSamp, c2, o2, o2, o2, o2); + + // float4 txval00s = g_tTex2df4 . GatherRed(g_sSamp, c2, o2, status); + // int4 txval01s = g_tTex2di4 . GatherRed(g_sSamp, c2, o2, status); + // uint4 txval02s = g_tTex2du4 . GatherRed(g_sSamp, c2, o2, status); + + // float4 txval004s = g_tTex2df4 . GatherRed(g_sSamp, c2, o2, o2, o2, o2, status); + // int4 txval014s = g_tTex2di4 . GatherRed(g_sSamp, c2, o2, o2, o2, o2, status); + // uint4 txval024s = g_tTex2du4 . GatherRed(g_sSamp, c2, o2, o2, o2, o2, status); + + float4 txval101 = g_tTex2df4 . GatherGreen(g_sSamp, c2, o2); + int4 txval111 = g_tTex2di4 . GatherGreen(g_sSamp, c2, o2); + uint4 txval121 = g_tTex2du4 . GatherGreen(g_sSamp, c2, o2); + + float4 txval104 = g_tTex2df4 . GatherGreen(g_sSamp, c2, o2, o2, o2, o2); + int4 txval114 = g_tTex2di4 . GatherGreen(g_sSamp, c2, o2, o2, o2, o2); + uint4 txval124 = g_tTex2du4 . GatherGreen(g_sSamp, c2, o2, o2, o2, o2); + + // float4 txval10s = g_tTex2df4 . GatherGreen(g_sSamp, c2, o2, status); + // int4 txval11s = g_tTex2di4 . GatherGreen(g_sSamp, c2, o2, status); + // uint4 txval12s = g_tTex2du4 . GatherGreen(g_sSamp, c2, o2, status); + + // float4 txval104 = g_tTex2df4 . GatherGreen(g_sSamp, c2, o2, o2, o2, o2, status); + // int4 txval114 = g_tTex2di4 . GatherGreen(g_sSamp, c2, o2, o2, o2, o2, status); + // uint4 txval124 = g_tTex2du4 . GatherGreen(g_sSamp, c2, o2, o2, o2, o2, status); + + float4 txval201 = g_tTex2df4 . GatherBlue(g_sSamp, c2, o2); + int4 txval211 = g_tTex2di4 . GatherBlue(g_sSamp, c2, o2); + uint4 txval221 = g_tTex2du4 . GatherBlue(g_sSamp, c2, o2); + + float4 txval204 = g_tTex2df4 . GatherBlue(g_sSamp, c2, o2, o2, o2, o2); + int4 txval214 = g_tTex2di4 . GatherBlue(g_sSamp, c2, o2, o2, o2, o2); + uint4 txval224 = g_tTex2du4 . GatherBlue(g_sSamp, c2, o2, o2, o2, o2); + + // float4 txval204s = g_tTex2df4 . GatherBlue(g_sSamp, c2, o2, o2, o2, o2, status); + // int4 txval214s = g_tTex2di4 . GatherBlue(g_sSamp, c2, o2, o2, o2, o2, status); + // uint4 txval224s = g_tTex2du4 . GatherBlue(g_sSamp, c2, o2, o2, o2, o2, status); + + // float4 txval20s = g_tTex2df4 . GatherBlue(g_sSamp, c2, o2, status); + // int4 txval21s = g_tTex2di4 . GatherBlue(g_sSamp, c2, o2, status); + // uint4 txval22s = g_tTex2du4 . GatherBlue(g_sSamp, c2, o2, status); + + float4 txval301 = g_tTex2df4 . GatherAlpha(g_sSamp, c2, o2); + int4 txval311 = g_tTex2di4 . GatherAlpha(g_sSamp, c2, o2); + uint4 txval321 = g_tTex2du4 . GatherAlpha(g_sSamp, c2, o2); + + float4 txval304 = g_tTex2df4 . GatherAlpha(g_sSamp, c2, o2, o2, o2, o2); + int4 txval314 = g_tTex2di4 . GatherAlpha(g_sSamp, c2, o2, o2, o2, o2); + uint4 txval324 = g_tTex2du4 . GatherAlpha(g_sSamp, c2, o2, o2, o2, o2); + + // float4 txval304s = g_tTex2df4 . GatherAlpha(g_sSamp, c2, o2, o2, o2, o2, status); + // int4 txval314s = g_tTex2di4 . GatherAlpha(g_sSamp, c2, o2, o2, o2, o2, status); + // uint4 txval324s = g_tTex2du4 . GatherAlpha(g_sSamp, c2, o2, o2, o2, o2, status); + + // float4 txval30s = g_tTex2df4 . GatherAlpha(g_sSamp, c2, o2, status); + // int4 txval31s = g_tTex2di4 . GatherAlpha(g_sSamp, c2, o2, status); + // uint4 txval32s = g_tTex2du4 . GatherAlpha(g_sSamp, c2, o2, status); + + // no 3D gathers with offset + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gatherRGBA.offsetarray.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gatherRGBA.offsetarray.dx10.frag new file mode 100644 index 0000000..ca32f56 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gatherRGBA.offsetarray.dx10.frag @@ -0,0 +1,110 @@ +SamplerState g_sSamp : register(s0); +uniform sampler2D g_sSamp2d; + +uniform Texture1DArray g_tTex1df4a : register(t0); +Texture1DArray g_tTex1di4a; +Texture1DArray g_tTex1du4a; + +Texture2DArray g_tTex2df4a; +Texture2DArray g_tTex2di4a; +Texture2DArray g_tTex2du4a; + +TextureCubeArray g_tTexcdf4a; +TextureCubeArray g_tTexcdi4a; +TextureCubeArray g_tTexcdu4a; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +uniform float c1; +uniform float2 c2; +uniform float3 c3; +uniform float4 c4; + +uniform int o1; +uniform int2 o2; +uniform int3 o3; +uniform int4 o4; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + uint status; + + // no 1D gathers + + float4 txval001 = g_tTex2df4a . GatherRed(g_sSamp, c3, o2); + int4 txval011 = g_tTex2di4a . GatherRed(g_sSamp, c3, o2); + uint4 txval021 = g_tTex2du4a . GatherRed(g_sSamp, c3, o2); + + float4 txval004 = g_tTex2df4a . GatherRed(g_sSamp, c3, o2, o2, o2, o2); + int4 txval014 = g_tTex2di4a . GatherRed(g_sSamp, c3, o2, o2, o2, o2); + uint4 txval024 = g_tTex2du4a . GatherRed(g_sSamp, c3, o2, o2, o2, o2); + + // float4 txval00s = g_tTex2df4a . GatherRed(g_sSamp, c3, o2, status); + // int4 txval01s = g_tTex2di4a . GatherRed(g_sSamp, c3, o2, status); + // uint4 txval02s = g_tTex2du4a . GatherRed(g_sSamp, c3, o2, status); + + // float4 txval004s = g_tTex2df4a . GatherRed(g_sSamp, c3, o2, o2, o2, o2, status); + // int4 txval014s = g_tTex2di4a . GatherRed(g_sSamp, c3, o2, o2, o2, o2, status); + // uint4 txval024s = g_tTex2du4a . GatherRed(g_sSamp, c3, o2, o2, o2, o2, status); + + float4 txval101 = g_tTex2df4a . GatherGreen(g_sSamp, c3, o2); + int4 txval111 = g_tTex2di4a . GatherGreen(g_sSamp, c3, o2); + uint4 txval121 = g_tTex2du4a . GatherGreen(g_sSamp, c3, o2); + + float4 txval104 = g_tTex2df4a . GatherGreen(g_sSamp, c3, o2, o2, o2, o2); + int4 txval114 = g_tTex2di4a . GatherGreen(g_sSamp, c3, o2, o2, o2, o2); + uint4 txval124 = g_tTex2du4a . GatherGreen(g_sSamp, c3, o2, o2, o2, o2); + + // float4 txval10s = g_tTex2df4a . GatherGreen(g_sSamp, c3, o2, status); + // int4 txval11s = g_tTex2di4a . GatherGreen(g_sSamp, c3, o2, status); + // uint4 txval12s = g_tTex2du4a . GatherGreen(g_sSamp, c3, o2, status); + + // float4 txval104 = g_tTex2df4a . GatherGreen(g_sSamp, c3, o2, o2, o2, o2, status); + // int4 txval114 = g_tTex2di4a . GatherGreen(g_sSamp, c3, o2, o2, o2, o2, status); + // uint4 txval124 = g_tTex2du4a . GatherGreen(g_sSamp, c3, o2, o2, o2, o2, status); + + float4 txval201 = g_tTex2df4a . GatherBlue(g_sSamp, c3, o2); + int4 txval211 = g_tTex2di4a . GatherBlue(g_sSamp, c3, o2); + uint4 txval221 = g_tTex2du4a . GatherBlue(g_sSamp, c3, o2); + + float4 txval204 = g_tTex2df4a . GatherBlue(g_sSamp, c3, o2, o2, o2, o2); + int4 txval214 = g_tTex2di4a . GatherBlue(g_sSamp, c3, o2, o2, o2, o2); + uint4 txval224 = g_tTex2du4a . GatherBlue(g_sSamp, c3, o2, o2, o2, o2); + + // float4 txval204s = g_tTex2df4a . GatherBlue(g_sSamp, c3, o2, o2, o2, o2, status); + // int4 txval214s = g_tTex2di4a . GatherBlue(g_sSamp, c3, o2, o2, o2, o2, status); + // uint4 txval224s = g_tTex2du4a . GatherBlue(g_sSamp, c3, o2, o2, o2, o2, status); + + // float4 txval20s = g_tTex2df4a . GatherBlue(g_sSamp, c3, o2, status); + // int4 txval21s = g_tTex2di4a . GatherBlue(g_sSamp, c3, o2, status); + // uint4 txval22s = g_tTex2du4a . GatherBlue(g_sSamp, c3, o2, status); + + float4 txval301 = g_tTex2df4a . GatherAlpha(g_sSamp, c3, o2); + int4 txval311 = g_tTex2di4a . GatherAlpha(g_sSamp, c3, o2); + uint4 txval321 = g_tTex2du4a . GatherAlpha(g_sSamp, c3, o2); + + float4 txval304 = g_tTex2df4a . GatherAlpha(g_sSamp, c3, o2, o2, o2, o2); + int4 txval314 = g_tTex2di4a . GatherAlpha(g_sSamp, c3, o2, o2, o2, o2); + uint4 txval324 = g_tTex2du4a . GatherAlpha(g_sSamp, c3, o2, o2, o2, o2); + + // float4 txval304s = g_tTex2df4a . GatherAlpha(g_sSamp, c3, o2, o2, o2, o2, status); + // int4 txval314s = g_tTex2di4a . GatherAlpha(g_sSamp, c3, o2, o2, o2, o2, status); + // uint4 txval324s = g_tTex2du4a . GatherAlpha(g_sSamp, c3, o2, o2, o2, o2, status); + + // float4 txval30s = g_tTex2df4a . GatherAlpha(g_sSamp, c3, o2, status); + // int4 txval31s = g_tTex2di4a . GatherAlpha(g_sSamp, c3, o2, status); + // uint4 txval32s = g_tTex2du4a . GatherAlpha(g_sSamp, c3, o2, status); + + // no 3D gathers with offset + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gathercmpRGBA.array.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gathercmpRGBA.array.dx10.frag new file mode 100644 index 0000000..4ed7f4b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gathercmpRGBA.array.dx10.frag @@ -0,0 +1,70 @@ +SamplerComparisonState g_sSampCmp : register(s0); + +uniform Texture1DArray g_tTex1df4a : register(t0); +Texture1DArray g_tTex1di4a; +Texture1DArray g_tTex1du4a; + +Texture2DArray g_tTex2df4a; +Texture2DArray g_tTex2di4a; +Texture2DArray g_tTex2du4a; + +TextureCubeArray g_tTexcdf4a; +TextureCubeArray g_tTexcdi4a; +TextureCubeArray g_tTexcdu4a; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +uniform float c1; +uniform float2 c2; +uniform float3 c3; +uniform float4 c4; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + // no 1D gathers + + 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); + + float4 txval10 = g_tTex2df4a . GatherCmpGreen(g_sSampCmp, c3, .75); + int4 txval11 = g_tTex2di4a . GatherCmpGreen(g_sSampCmp, c3, .75); + uint4 txval12 = g_tTex2du4a . GatherCmpGreen(g_sSampCmp, c3, .75); + + float4 txval20 = g_tTex2df4a . GatherCmpBlue(g_sSampCmp, c3, .75); + int4 txval21 = g_tTex2di4a . GatherCmpBlue(g_sSampCmp, c3, .75); + uint4 txval22 = g_tTex2du4a . GatherCmpBlue(g_sSampCmp, c3, .75); + + float4 txval30 = g_tTex2df4a . GatherCmpAlpha(g_sSampCmp, c3, .75); + int4 txval31 = g_tTex2di4a . GatherCmpAlpha(g_sSampCmp, c3, .75); + uint4 txval32 = g_tTex2du4a . GatherCmpAlpha(g_sSampCmp, c3, .75); + + // no 3D gathers + + float4 txval40 = g_tTexcdf4a . GatherCmpRed(g_sSampCmp, c4, .75); + int4 txval41 = g_tTexcdi4a . GatherCmpRed(g_sSampCmp, c4, .75); + uint4 txval42 = g_tTexcdu4a . GatherCmpRed(g_sSampCmp, c4, .75); + + float4 txval50 = g_tTexcdf4a . GatherCmpGreen(g_sSampCmp, c4, .75); + int4 txval51 = g_tTexcdi4a . GatherCmpGreen(g_sSampCmp, c4, .75); + uint4 txval52 = g_tTexcdu4a . GatherCmpGreen(g_sSampCmp, c4, .75); + + float4 txval60 = g_tTexcdf4a . GatherCmpBlue(g_sSampCmp, c4, .75); + int4 txval61 = g_tTexcdi4a . GatherCmpBlue(g_sSampCmp, c4, .75); + uint4 txval62 = g_tTexcdu4a . GatherCmpBlue(g_sSampCmp, c4, .75); + + float4 txval70 = g_tTexcdf4a . GatherCmpAlpha(g_sSampCmp, c4, .75); + int4 txval71 = g_tTexcdi4a . GatherCmpAlpha(g_sSampCmp, c4, .75); + uint4 txval72 = g_tTexcdu4a . GatherCmpAlpha(g_sSampCmp, c4, .75); + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gathercmpRGBA.basic.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gathercmpRGBA.basic.dx10.frag new file mode 100644 index 0000000..9dc1631 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gathercmpRGBA.basic.dx10.frag @@ -0,0 +1,76 @@ +SamplerComparisonState g_sSampCmp : register(s0); + +Texture1D g_tTex1df4a : register(t1); + +uniform Texture1D g_tTex1df4 : register(t0); +Texture1D g_tTex1di4; +Texture1D g_tTex1du4; + +Texture2D g_tTex2df4; +Texture2D g_tTex2di4; +Texture2D g_tTex2du4; + +Texture3D g_tTex3df4; +Texture3D g_tTex3di4; +Texture3D g_tTex3du4; + +TextureCube g_tTexcdf4; +TextureCube g_tTexcdi4; +TextureCube g_tTexcdu4; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +uniform float c1; +uniform float2 c2; +uniform float3 c3; +uniform float4 c4; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + // no 1D gathers + + float4 txval00 = g_tTex2df4 . GatherCmpRed(g_sSampCmp, c2, 0.75); + int4 txval01 = g_tTex2di4 . GatherCmpRed(g_sSampCmp, c2, 0.75); + uint4 txval02 = g_tTex2du4 . GatherCmpRed(g_sSampCmp, c2, 0.75); + + float4 txval10 = g_tTex2df4 . GatherCmpGreen(g_sSampCmp, c2, 0.75); + int4 txval11 = g_tTex2di4 . GatherCmpGreen(g_sSampCmp, c2, 0.75); + uint4 txval12 = g_tTex2du4 . GatherCmpGreen(g_sSampCmp, c2, 0.75); + + float4 txval20 = g_tTex2df4 . GatherCmpBlue(g_sSampCmp, c2, 0.75); + int4 txval21 = g_tTex2di4 . GatherCmpBlue(g_sSampCmp, c2, 0.75); + uint4 txval22 = g_tTex2du4 . GatherCmpBlue(g_sSampCmp, c2, 0.75); + + float4 txval30 = g_tTex2df4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75); + int4 txval31 = g_tTex2di4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75); + uint4 txval32 = g_tTex2du4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75); + + // no 3D gathers + + float4 txval40 = g_tTexcdf4 . GatherCmpRed(g_sSampCmp, c3, 0.75); + int4 txval41 = g_tTexcdi4 . GatherCmpRed(g_sSampCmp, c3, 0.75); + uint4 txval42 = g_tTexcdu4 . GatherCmpRed(g_sSampCmp, c3, 0.75); + + float4 txval50 = g_tTexcdf4 . GatherCmpGreen(g_sSampCmp, c3, 0.75); + int4 txval51 = g_tTexcdi4 . GatherCmpGreen(g_sSampCmp, c3, 0.75); + uint4 txval52 = g_tTexcdu4 . GatherCmpGreen(g_sSampCmp, c3, 0.75); + + float4 txval60 = g_tTexcdf4 . GatherCmpBlue(g_sSampCmp, c3, 0.75); + int4 txval61 = g_tTexcdi4 . GatherCmpBlue(g_sSampCmp, c3, 0.75); + uint4 txval62 = g_tTexcdu4 . GatherCmpBlue(g_sSampCmp, c3, 0.75); + + float4 txval70 = g_tTexcdf4 . GatherCmpAlpha(g_sSampCmp, c3, 0.75); + int4 txval71 = g_tTexcdi4 . GatherCmpAlpha(g_sSampCmp, c3, 0.75); + uint4 txval72 = g_tTexcdu4 . GatherCmpAlpha(g_sSampCmp, c3, 0.75); + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gathercmpRGBA.offset.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gathercmpRGBA.offset.dx10.frag new file mode 100644 index 0000000..18e3a37 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gathercmpRGBA.offset.dx10.frag @@ -0,0 +1,118 @@ +SamplerComparisonState g_sSampCmp : register(s0); + +Texture1D g_tTex1df4a : register(t1); + +uniform Texture1D g_tTex1df4 : register(t0); +Texture1D g_tTex1di4; +Texture1D g_tTex1du4; + +Texture2D g_tTex2df4; +Texture2D g_tTex2di4; +Texture2D g_tTex2du4; + +Texture3D g_tTex3df4; +Texture3D g_tTex3di4; +Texture3D g_tTex3du4; + +TextureCube g_tTexcdf4; +TextureCube g_tTexcdi4; +TextureCube g_tTexcdu4; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +uniform float c1; +uniform float2 c2; +uniform float3 c3; +uniform float4 c4; + + + + + + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + uint status; + + // no 1D gathers + + float4 txval001 = g_tTex2df4 . GatherCmpRed(g_sSampCmp, c2, 0.75, int2(1,0)); + int4 txval011 = g_tTex2di4 . GatherCmpRed(g_sSampCmp, c2, 0.75, int2(1,-1)); + uint4 txval021 = g_tTex2du4 . GatherCmpRed(g_sSampCmp, c2, 0.75, int2(1,1)); + + float4 txval004 = g_tTex2df4 . GatherCmpRed(g_sSampCmp, c2, 0.75, int2(1,0), int2(1,0), int2(1,0), int2(1,0)); + 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); + + // GatherCmpGreen not implemented pending OpImageDrefGather component input + // float4 txval101 = g_tTex2df4 . GatherCmpGreen(g_sSampCmp, c2, 0.75, int2(1,0)); + // int4 txval111 = g_tTex2di4 . GatherCmpGreen(g_sSampCmp, c2, 0.75, int2(1,0)); + // uint4 txval121 = g_tTex2du4 . GatherCmpGreen(g_sSampCmp, c2, 0.75, int2(1,0)); + + // float4 txval104 = g_tTex2df4 . GatherCmpGreen(g_sSampCmp, c2, 0.75, int2(1,0), int2(1,0), int2(1,0), int2(1,0)); + // int4 txval114 = g_tTex2di4 . GatherCmpGreen(g_sSampCmp, c2, 0.75, int2(1,0), int2(1,0), int2(1,0), int2(1,0)); + // uint4 txval124 = g_tTex2du4 . GatherCmpGreen(g_sSampCmp, c2, 0.75, int2(1,0), int2(1,0), int2(1,0), int2(1,0)); + + // float4 txval10s = g_tTex2df4 . GatherCmpGreen(g_sSampCmp, c2, 0.75, int2(1,0), status); + // int4 txval11s = g_tTex2di4 . GatherCmpGreen(g_sSampCmp, c2, 0.75, int2(1,0), status); + // uint4 txval12s = g_tTex2du4 . GatherCmpGreen(g_sSampCmp, c2, 0.75, int2(1,0), status); + + // float4 txval104 = g_tTex2df4 . GatherCmpGreen(g_sSampCmp, c2, 0.75, int2(1,0), int2(1,0), int2(1,0), int2(1,0), status); + // int4 txval114 = g_tTex2di4 . GatherCmpGreen(g_sSampCmp, c2, 0.75, int2(1,0), int2(1,0), int2(1,0), int2(1,0), status); + // uint4 txval124 = g_tTex2du4 . GatherCmpGreen(g_sSampCmp, c2, 0.75, int2(1,0), int2(1,0), int2(1,0), int2(1,0), status); + + // GatherCmpBlue not implemented pending OpImageDrefGather component input + // float4 txval201 = g_tTex2df4 . GatherCmpBlue(g_sSampCmp, c2, 0.75, int2(1,0)); + // int4 txval211 = g_tTex2di4 . GatherCmpBlue(g_sSampCmp, c2, 0.75, int2(1,0)); + // uint4 txval221 = g_tTex2du4 . GatherCmpBlue(g_sSampCmp, c2, 0.75, int2(1,0)); + + // float4 txval204 = g_tTex2df4 . GatherCmpBlue(g_sSampCmp, c2, 0.75, int2(1,0), int2(1,0), int2(1,0), int2(1,0)); + // int4 txval214 = g_tTex2di4 . GatherCmpBlue(g_sSampCmp, c2, 0.75, int2(1,0), int2(1,0), int2(1,0), int2(1,0)); + // uint4 txval224 = g_tTex2du4 . GatherCmpBlue(g_sSampCmp, c2, 0.75, int2(1,0), int2(1,0), int2(1,0), int2(1,0)); + + // float4 txval204s = g_tTex2df4 . GatherCmpBlue(g_sSampCmp, c2, 0.75, int2(1,0), int2(1,0), int2(1,0), int2(1,0), status); + // int4 txval214s = g_tTex2di4 . GatherCmpBlue(g_sSampCmp, c2, 0.75, int2(1,0), int2(1,0), int2(1,0), int2(1,0), status); + // uint4 txval224s = g_tTex2du4 . GatherCmpBlue(g_sSampCmp, c2, 0.75, int2(1,0), int2(1,0), int2(1,0), int2(1,0), status); + + // float4 txval20s = g_tTex2df4 . GatherCmpBlue(g_sSampCmp, c2, 0.75, int2(1,0), status); + // int4 txval21s = g_tTex2di4 . GatherCmpBlue(g_sSampCmp, c2, 0.75, int2(1,0), status); + // uint4 txval22s = g_tTex2du4 . GatherCmpBlue(g_sSampCmp, c2, 0.75, int2(1,0), status); + + // GatherCmpAlpha not implemented pending OpImageDrefGather component input + // float4 txval301 = g_tTex2df4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75, int2(1,0)); + // int4 txval311 = g_tTex2di4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75, int2(1,0)); + // uint4 txval321 = g_tTex2du4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75, int2(1,0)); + + // float4 txval304 = g_tTex2df4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75, int2(1,0), int2(1,0), int2(1,0), int2(1,0)); + // int4 txval314 = g_tTex2di4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75, int2(1,0), int2(1,0), int2(1,0), int2(1,0)); + // uint4 txval324 = g_tTex2du4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75, int2(1,0), int2(1,0), int2(1,0), int2(1,0)); + + // float4 txval304s = g_tTex2df4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75, int2(1,0), int2(1,0), int2(1,0), int2(1,0), status); + // int4 txval314s = g_tTex2di4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75, int2(1,0), int2(1,0), int2(1,0), int2(1,0), status); + // uint4 txval324s = g_tTex2du4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75, int2(1,0), int2(1,0), int2(1,0), int2(1,0), status); + + // float4 txval30s = g_tTex2df4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75, int2(1,0), status); + // int4 txval31s = g_tTex2di4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75, int2(1,0), status); + // uint4 txval32s = g_tTex2du4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75, int2(1,0), status); + + // no 3D gathers with offset + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gathercmpRGBA.offsetarray.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gathercmpRGBA.offsetarray.dx10.frag new file mode 100644 index 0000000..11131bc --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gathercmpRGBA.offsetarray.dx10.frag @@ -0,0 +1,109 @@ +SamplerComparisonState g_sSampCmp : register(s0); + +uniform Texture1DArray g_tTex1df4a : register(t0); +Texture1DArray g_tTex1di4a; +Texture1DArray g_tTex1du4a; + +Texture2DArray g_tTex2df4a; +Texture2DArray g_tTex2di4a; +Texture2DArray g_tTex2du4a; + +TextureCubeArray g_tTexcdf4a; +TextureCubeArray g_tTexcdi4a; +TextureCubeArray g_tTexcdu4a; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +uniform float c1; +uniform float2 c2; +uniform float3 c3; +uniform float4 c4; + +uniform int o1; +uniform int2 o2; +uniform int3 o3; +uniform int4 o4; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + uint status; + + // no 1D gathers + + 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); + + float4 txval004 = g_tTex2df4a . GatherCmpRed(g_sSampCmp, c3, 0.75, o2, o2, o2, o2); + int4 txval014 = g_tTex2di4a . GatherCmpRed(g_sSampCmp, c3, 0.75, o2, o2, o2, o2); + uint4 txval024 = g_tTex2du4a . GatherCmpRed(g_sSampCmp, c3, 0.75, o2, o2, o2, o2); + + // float4 txval00s = g_tTex2df4a . GatherCmpRed(g_sSampCmp, c3, 0.75, o2, status); + // int4 txval01s = g_tTex2di4a . GatherCmpRed(g_sSampCmp, c3, 0.75, o2, status); + // uint4 txval02s = g_tTex2du4a . GatherCmpRed(g_sSampCmp, c3, 0.75, o2, status); + + // float4 txval004s = g_tTex2df4a . GatherCmpRed(g_sSampCmp, c3, 0.75, o2, o2, o2, o2, status); + // int4 txval014s = g_tTex2di4a . GatherCmpRed(g_sSampCmp, c3, 0.75, o2, o2, o2, o2, status); + // uint4 txval024s = g_tTex2du4a . GatherCmpRed(g_sSampCmp, c3, 0.75, o2, o2, o2, o2, status); + + float4 txval101 = g_tTex2df4a . GatherCmpGreen(g_sSampCmp, c3, 0.75, o2); + int4 txval111 = g_tTex2di4a . GatherCmpGreen(g_sSampCmp, c3, 0.75, o2); + uint4 txval121 = g_tTex2du4a . GatherCmpGreen(g_sSampCmp, c3, 0.75, o2); + + float4 txval104 = g_tTex2df4a . GatherCmpGreen(g_sSampCmp, c3, 0.75, o2, o2, o2, o2); + int4 txval114 = g_tTex2di4a . GatherCmpGreen(g_sSampCmp, c3, 0.75, o2, o2, o2, o2); + uint4 txval124 = g_tTex2du4a . GatherCmpGreen(g_sSampCmp, c3, 0.75, o2, o2, o2, o2); + + // float4 txval10s = g_tTex2df4a . GatherCmpGreen(g_sSampCmp, c3, 0.75, o2, status); + // int4 txval11s = g_tTex2di4a . GatherCmpGreen(g_sSampCmp, c3, 0.75, o2, status); + // uint4 txval12s = g_tTex2du4a . GatherCmpGreen(g_sSampCmp, c3, 0.75, o2, status); + + // float4 txval104 = g_tTex2df4a . GatherCmpGreen(g_sSampCmp, c3, 0.75, o2, o2, o2, o2, status); + // int4 txval114 = g_tTex2di4a . GatherCmpGreen(g_sSampCmp, c3, 0.75, o2, o2, o2, o2, status); + // uint4 txval124 = g_tTex2du4a . GatherCmpGreen(g_sSampCmp, c3, 0.75, o2, o2, o2, o2, status); + + float4 txval201 = g_tTex2df4a . GatherCmpBlue(g_sSampCmp, c3, 0.75, o2); + int4 txval211 = g_tTex2di4a . GatherCmpBlue(g_sSampCmp, c3, 0.75, o2); + uint4 txval221 = g_tTex2du4a . GatherCmpBlue(g_sSampCmp, c3, 0.75, o2); + + float4 txval204 = g_tTex2df4a . GatherCmpBlue(g_sSampCmp, c3, 0.75, o2, o2, o2, o2); + int4 txval214 = g_tTex2di4a . GatherCmpBlue(g_sSampCmp, c3, 0.75, o2, o2, o2, o2); + uint4 txval224 = g_tTex2du4a . GatherCmpBlue(g_sSampCmp, c3, 0.75, o2, o2, o2, o2); + + // float4 txval204s = g_tTex2df4a . GatherCmpBlue(g_sSampCmp, c3, 0.75, o2, o2, o2, o2, status); + // int4 txval214s = g_tTex2di4a . GatherCmpBlue(g_sSampCmp, c3, 0.75, o2, o2, o2, o2, status); + // uint4 txval224s = g_tTex2du4a . GatherCmpBlue(g_sSampCmp, c3, 0.75, o2, o2, o2, o2, status); + + // float4 txval20s = g_tTex2df4a . GatherCmpBlue(g_sSampCmp, c3, 0.75, o2, status); + // int4 txval21s = g_tTex2di4a . GatherCmpBlue(g_sSampCmp, c3, 0.75, o2, status); + // uint4 txval22s = g_tTex2du4a . GatherCmpBlue(g_sSampCmp, c3, 0.75, o2, status); + + float4 txval301 = g_tTex2df4a . GatherCmpAlpha(g_sSampCmp, c3, 0.75, o2); + int4 txval311 = g_tTex2di4a . GatherCmpAlpha(g_sSampCmp, c3, 0.75, o2); + uint4 txval321 = g_tTex2du4a . GatherCmpAlpha(g_sSampCmp, c3, 0.75, o2); + + float4 txval304 = g_tTex2df4a . GatherCmpAlpha(g_sSampCmp, c3, 0.75, o2, o2, o2, o2); + int4 txval314 = g_tTex2di4a . GatherCmpAlpha(g_sSampCmp, c3, 0.75, o2, o2, o2, o2); + uint4 txval324 = g_tTex2du4a . GatherCmpAlpha(g_sSampCmp, c3, 0.75, o2, o2, o2, o2); + + // float4 txval304s = g_tTex2df4a . GatherCmpAlpha(g_sSampCmp, c3, 0.75, o2, o2, o2, o2, status); + // int4 txval314s = g_tTex2di4a . GatherCmpAlpha(g_sSampCmp, c3, 0.75, o2, o2, o2, o2, status); + // uint4 txval324s = g_tTex2du4a . GatherCmpAlpha(g_sSampCmp, c3, 0.75, o2, o2, o2, o2, status); + + // float4 txval30s = g_tTex2df4a . GatherCmpAlpha(g_sSampCmp, c3, 0.75, o2, status); + // int4 txval31s = g_tTex2di4a . GatherCmpAlpha(g_sSampCmp, c3, 0.75, o2, status); + // uint4 txval32s = g_tTex2du4a . GatherCmpAlpha(g_sSampCmp, c3, 0.75, o2, status); + + // no 3D gathers with offset + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.getdimensions.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.getdimensions.dx10.frag new file mode 100644 index 0000000..bd9cc3b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.getdimensions.dx10.frag @@ -0,0 +1,280 @@ +SamplerState g_sSamp : register(s0); + +uniform Texture1D g_tTex1df4 : register(t0); +Texture1D g_tTex1di4; +Texture1D g_tTex1du4; + +Texture2D g_tTex2df4; +Texture2D g_tTex2di4; +Texture2D g_tTex2du4; + +Texture3D g_tTex3df4; +Texture3D g_tTex3di4; +Texture3D g_tTex3du4; + +TextureCube g_tTexcdf4; +TextureCube g_tTexcdi4; +TextureCube g_tTexcdu4; + +Texture1DArray g_tTex1df4a; +Texture1DArray g_tTex1di4a; +Texture1DArray g_tTex1du4a; + +Texture2DArray g_tTex2df4a; +Texture2DArray g_tTex2di4a; +Texture2DArray g_tTex2du4a; + +TextureCubeArray g_tTexcdf4a; +TextureCubeArray g_tTexcdi4a; +TextureCubeArray g_tTexcdu4a; + +Texture2DMS g_tTex2dmsf4; +Texture2DMS g_tTex2dmsi4; +Texture2DMS g_tTex2dmsu4; + +Texture2DMSArray g_tTex2dmsf4a; +Texture2DMSArray g_tTex2dmsi4a; +Texture2DMSArray g_tTex2dmsu4a; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + uint MipLevel; + uint WidthU; + uint HeightU; + uint ElementsU; + uint DepthU; + uint NumberOfLevelsU; + uint NumberOfSamplesU; + + float WidthF; + float HeightF; + float ElementsF; + float DepthF; + float NumberOfLevelsF; + float NumberOfSamplesF; + + // 1D, float tx, uint params + g_tTex1df4 . GetDimensions(WidthU); + g_tTex1df4 . GetDimensions(6, WidthU, NumberOfLevelsU); + + // 1D, int, uint params + g_tTex1di4 . GetDimensions(WidthU); + g_tTex1di4 . GetDimensions(6, WidthU, NumberOfLevelsU); + + // 1D, uint, uint params + g_tTex1du4 . GetDimensions(WidthU); + g_tTex1du4 . GetDimensions(6, WidthU, NumberOfLevelsU); + + // 1DArray, float tx, uint params + g_tTex1df4a . GetDimensions(WidthU, ElementsU); + g_tTex1df4a . GetDimensions(6, WidthU, ElementsU, NumberOfLevelsU); + + // 1DArray, int, uint params + g_tTex1di4a . GetDimensions(WidthU, ElementsU); + g_tTex1di4a . GetDimensions(6, WidthU, ElementsU, NumberOfLevelsU); + + // 1DArray, uint, uint params + g_tTex1du4a . GetDimensions(WidthU, ElementsU); + g_tTex1du4a . GetDimensions(6, WidthU, ElementsU, NumberOfLevelsU); + + // 2D, float tx, uint params + g_tTex2df4 . GetDimensions(WidthU, HeightU); + g_tTex2df4 . GetDimensions(6, WidthU, HeightU, NumberOfLevelsU); + + // 2D, int, uint params + g_tTex2di4 . GetDimensions(WidthU, HeightU); + g_tTex2di4 . GetDimensions(6, WidthU, HeightU, NumberOfLevelsU); + + // 2D, uint, uint params + g_tTex2du4 . GetDimensions(WidthU, HeightU); + g_tTex2du4 . GetDimensions(6, WidthU, HeightU, NumberOfLevelsU); + + // 2Darray, float tx, uint params + g_tTex2df4a . GetDimensions(WidthU, HeightU, ElementsU); + g_tTex2df4a . GetDimensions(6, WidthU, HeightU, ElementsU, NumberOfLevelsU); + + // 2Darray, int, uint params + g_tTex2di4a . GetDimensions(WidthU, HeightU, ElementsU); + g_tTex2di4a . GetDimensions(6, WidthU, HeightU, ElementsU, NumberOfLevelsU); + + // 2Darray, uint, uint params + g_tTex2du4a . GetDimensions(WidthU, HeightU, ElementsU); + g_tTex2du4a . GetDimensions(6, WidthU, HeightU, ElementsU, NumberOfLevelsU); + + // 3D, float tx, uint params + g_tTex3df4 . GetDimensions(WidthU, HeightU, DepthU); + g_tTex3df4 . GetDimensions(6, WidthU, HeightU, DepthU, NumberOfLevelsU); + + // 3D, int, uint params + g_tTex3di4 . GetDimensions(WidthU, HeightU, DepthU); + g_tTex3di4 . GetDimensions(6, WidthU, HeightU, DepthU, NumberOfLevelsU); + + // 3D, uint, uint params + g_tTex3du4 . GetDimensions(WidthU, HeightU, DepthU); + g_tTex3du4 . GetDimensions(6, WidthU, HeightU, DepthU, NumberOfLevelsU); + + // Cube, float tx, uint params + g_tTexcdf4 . GetDimensions(WidthU, HeightU); + g_tTexcdf4 . GetDimensions(6, WidthU, HeightU, NumberOfLevelsU); + + // Cube, int, uint params + g_tTexcdi4 . GetDimensions(WidthU, HeightU); + g_tTexcdi4 . GetDimensions(6, WidthU, HeightU, NumberOfLevelsU); + + // Cube, uint, uint params + g_tTexcdu4 . GetDimensions(WidthU, HeightU); + g_tTexcdu4 . GetDimensions(6, WidthU, HeightU, NumberOfLevelsU); + + // Cubearray, float tx, uint params + g_tTexcdf4a . GetDimensions(WidthU, HeightU, ElementsU); + g_tTexcdf4a . GetDimensions(6, WidthU, HeightU, ElementsU, NumberOfLevelsU); + + // Cubearray, int, uint params + g_tTexcdi4a . GetDimensions(WidthU, HeightU, ElementsU); + g_tTexcdi4a . GetDimensions(6, WidthU, HeightU, ElementsU, NumberOfLevelsU); + + // Cubearray, uint, uint params + g_tTexcdu4a . GetDimensions(WidthU, HeightU, ElementsU); + g_tTexcdu4a . GetDimensions(6, WidthU, HeightU, ElementsU, NumberOfLevelsU); + + // 2DMS, float tx, uint params + g_tTex2dmsf4 . GetDimensions(WidthU, HeightU, NumberOfSamplesU); + + // 2DMS, int tx, uint params + g_tTex2dmsi4 . GetDimensions(WidthU, HeightU, NumberOfSamplesU); + + // 2DMS, uint tx, uint params + g_tTex2dmsu4 . GetDimensions(WidthU, HeightU, NumberOfSamplesU); + + // 2DMSArray, float tx, uint params + g_tTex2dmsf4a . GetDimensions(WidthU, HeightU, ElementsU, NumberOfSamplesU); + + // 2DMSArray, int tx, uint params + g_tTex2dmsi4a . GetDimensions(WidthU, HeightU, ElementsU, NumberOfSamplesU); + + // 2DMSArray, uint tx, uint params + g_tTex2dmsu4a . GetDimensions(WidthU, HeightU, ElementsU, NumberOfSamplesU); + + // TODO: *************************************************** + // Change this to 1 to enable float overloads when the HLSL + // function overload resolution is fixed. +#define OVERLOAD_FIX 0 + + // TODO: enable when function overload resolution rules are fixed +#if OVERLOAD_FIX + // 1D, float tx, float params + g_tTex1df4 . GetDimensions(WidthF); + g_tTex1df4 . GetDimensions(6, WidthF, NumberOfLevelsF); + + // 1D, int, float params + g_tTex1di4 . GetDimensions(WidthF); + g_tTex1di4 . GetDimensions(6, WidthF, NumberOfLevelsF); + + // 1D, uint, float params + g_tTex1du4 . GetDimensions(WidthF); + g_tTex1du4 . GetDimensions(6, WidthF, NumberOfLevelsF); + + // 1DArray, float tx, float params + g_tTex1df4a . GetDimensions(WidthF, ElementsF); + g_tTex1df4a . GetDimensions(6, WidthF, ElementsF, NumberOfLevelsF); + + // 1DArray, int, float params + g_tTex1di4a . GetDimensions(WidthF, ElementsF); + g_tTex1di4a . GetDimensions(6, WidthF, ElementsF, NumberOfLevelsF); + + // 1DArray, uint, float params + g_tTex1du4a . GetDimensions(WidthF, ElementsF); + g_tTex1du4a . GetDimensions(6, WidthF, ElementsF, NumberOfLevelsF); + + // 2D, float tx, float params + g_tTex2df4 . GetDimensions(WidthF, HeightF); + g_tTex2df4 . GetDimensions(6, WidthF, HeightF, NumberOfLevelsF); + + // 2D, int, float params + g_tTex2di4 . GetDimensions(WidthF, HeightF); + g_tTex2di4 . GetDimensions(6, WidthF, HeightF, NumberOfLevelsF); + + // 2D, uint, float params + g_tTex2du4 . GetDimensions(WidthF, HeightF); + g_tTex2du4 . GetDimensions(6, WidthF, HeightF, NumberOfLevelsF); + + // 2Darray, float tx, float params + g_tTex2df4a . GetDimensions(WidthF, HeightF, ElementsF); + g_tTex2df4a . GetDimensions(6, WidthF, HeightF, ElementsF, NumberOfLevelsF); + + // 2Darray, int, float params + g_tTex2di4a . GetDimensions(WidthF, HeightF, ElementsF); + g_tTex2di4a . GetDimensions(6, WidthF, HeightF, ElementsF, NumberOfLevelsF); + + // 2Darray, uint, float params + g_tTex2du4a . GetDimensions(WidthF, HeightF, ElementsF); + g_tTex2du4a . GetDimensions(6, WidthF, HeightF, ElementsF, NumberOfLevelsF); + + // 3D, float tx, float params + g_tTex3df4 . GetDimensions(WidthF, HeightF, DepthF); + g_tTex3df4 . GetDimensions(6, WidthF, HeightF, DepthF, NumberOfLevelsF); + + // 3D, int, float params + g_tTex3di4 . GetDimensions(WidthF, HeightF, DepthF); + g_tTex3di4 . GetDimensions(6, WidthF, HeightF, DepthF, NumberOfLevelsF); + + // 3D, uint, float params + g_tTex3du4 . GetDimensions(WidthF, HeightF, DepthF); + g_tTex3du4 . GetDimensions(6, WidthF, HeightF, DepthF, NumberOfLevelsF); + + // Cube, float tx, float params + g_tTexcdf4 . GetDimensions(WidthF, HeightF); + g_tTexcdf4 . GetDimensions(6, WidthF, HeightF, NumberOfLevelsF); + + // Cube, int, float params + g_tTexcdi4 . GetDimensions(WidthF, HeightF); + g_tTexcdi4 . GetDimensions(6, WidthF, HeightF, NumberOfLevelsF); + + // Cube, uint, float params + g_tTexcdu4 . GetDimensions(WidthF, HeightF); + g_tTexcdu4 . GetDimensions(6, WidthF, HeightF, NumberOfLevelsF); + + // Cubearray, float tx, float params + g_tTexcdf4a . GetDimensions(WidthF, HeightF, ElementsF); + g_tTexcdf4a . GetDimensions(6, WidthF, HeightF, ElementsF, NumberOfLevelsF); + + // Cubearray, int, float params + g_tTexcdi4a . GetDimensions(WidthF, HeightF, ElementsF); + g_tTexcdi4a . GetDimensions(6, WidthF, HeightF, ElementsF, NumberOfLevelsF); + + // Cubearray, uint, float params + g_tTexcdu4a . GetDimensions(WidthF, HeightF, ElementsF); + g_tTexcdu4a . GetDimensions(6, WidthF, HeightF, ElementsF, NumberOfLevelsF); + + // 2DMS, float tx, uint params + g_tTex2dmsf4 . GetDimensions(WidthF, HeightF, NumberOfSamplesF); + + // 2DMS, int tx, uint params + g_tTex2dmsi4 . GetDimensions(WidthF, HeightF, NumberOfSamplesF); + + // 2DMS, uint tx, uint params + g_tTex2dmsu4 . GetDimensions(WidthF, HeightF, NumberOfSamplesF); + + // 2DMSArray, float tx, uint params + g_tTex2dmsf4a . GetDimensions(WidthF, HeightF, ElementsF, NumberOfSamplesF); + + // 2DMSArray, int tx, uint params + g_tTex2dmsi4a . GetDimensions(WidthF, HeightF, ElementsF, NumberOfSamplesF); + + // 2DMSArray, uint tx, uint params + g_tTex2dmsu4a . GetDimensions(WidthF, HeightF, ElementsF, NumberOfSamplesF); +#endif // OVERLOAD_FIX + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.getdimensions.dx10.vert b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.getdimensions.dx10.vert new file mode 100644 index 0000000..0249b1c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.getdimensions.dx10.vert @@ -0,0 +1,27 @@ +SamplerState g_sSamp : register(s0); + +uniform Texture1D g_tTex1df4 : register(t0); + +struct VS_OUTPUT +{ + float4 Pos : SV_Position; +}; + +VS_OUTPUT main() +{ + VS_OUTPUT vsout; + + uint WidthU; + uint NumberOfLevelsU; + + // Most of the tests are in the hlsl.getdimensions.dx10.frag on the fragment side. + // This is just to establish that GetDimensions appears in the vertex stage. + + // 1D, float tx, uint params + g_tTex1df4 . GetDimensions(WidthU); + g_tTex1df4 . GetDimensions(6, WidthU, NumberOfLevelsU); + + vsout.Pos = float4(0,0,0,0); + + return vsout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.getdimensions.rw.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.getdimensions.rw.dx10.frag new file mode 100644 index 0000000..957a808 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.getdimensions.rw.dx10.frag @@ -0,0 +1,96 @@ +SamplerState g_sSamp : register(s0); + +RWTexture1D g_tTex1df4 : register(t0); +RWTexture1D g_tTex1di4; +RWTexture1D g_tTex1du4; + +RWTexture2D g_tTex2df4; +RWTexture2D g_tTex2di4; +RWTexture2D g_tTex2du4; + +RWTexture3D g_tTex3df4; +RWTexture3D g_tTex3di4; +RWTexture3D g_tTex3du4; + +RWTexture1DArray g_tTex1df4a; +RWTexture1DArray g_tTex1di4a; +RWTexture1DArray g_tTex1du4a; + +RWTexture2DArray g_tTex2df4a; +RWTexture2DArray g_tTex2di4a; +RWTexture2DArray g_tTex2du4a; + +RWBuffer g_tBuffF; +RWBuffer g_tBuffI; +RWBuffer g_tBuffU; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +uniform int c1; +uniform int2 c2; +uniform int3 c3; +uniform int4 c4; + +uniform int o1; +uniform int2 o2; +uniform int3 o3; +uniform int4 o4; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + uint MipLevel; + uint WidthU; + uint HeightU; + uint ElementsU; + uint DepthU; + uint NumberOfLevelsU; + uint NumberOfSamplesU; + + float WidthF; + float HeightF; + float ElementsF; + float DepthF; + float NumberOfLevelsF; + float NumberOfSamplesF; + + // 1D, float/int/uint, uint params + g_tTex1df4.GetDimensions(WidthU); + g_tTex1di4.GetDimensions(WidthU); + g_tTex1du4.GetDimensions(WidthU); + + // buffer, float/int/uint, uint params + g_tBuffF.GetDimensions(WidthU); + g_tBuffI.GetDimensions(WidthU); + g_tBuffU.GetDimensions(WidthU); + + // 1DArray, float/int/uint, uint params + g_tTex1df4a.GetDimensions(WidthU, ElementsU); + g_tTex1di4a.GetDimensions(WidthU, ElementsU); + g_tTex1du4a.GetDimensions(WidthU, ElementsU); + + // 2D, float/int/uint, uint params + g_tTex2df4.GetDimensions(WidthU, HeightU); + g_tTex2di4.GetDimensions(WidthU, HeightU); + g_tTex2du4.GetDimensions(WidthU, HeightU); + + // 2DArray, float/int/uint, uint params + g_tTex2df4a.GetDimensions(WidthU, HeightU, ElementsU); + g_tTex2di4a.GetDimensions(WidthU, HeightU, ElementsU); + g_tTex2du4a.GetDimensions(WidthU, HeightU, ElementsU); + + // 3D, float/int/uint, uint params + g_tTex3df4.GetDimensions(WidthU, HeightU, DepthU); + g_tTex3di4.GetDimensions(WidthU, HeightU, DepthU); + g_tTex3du4.GetDimensions(WidthU, HeightU, DepthU); + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.getsampleposition.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.getsampleposition.dx10.frag new file mode 100644 index 0000000..a7a93b3 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.getsampleposition.dx10.frag @@ -0,0 +1,23 @@ +SamplerState g_sSamp : register(s0); + +Texture2DMS g_tTex2dmsf4; +Texture2DMSArray g_tTex2dmsf4a; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + float2 r00 = g_tTex2dmsf4.GetSamplePosition(1); + float2 r01 = g_tTex2dmsf4a.GetSamplePosition(2); + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.hull.1.tesc b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.hull.1.tesc new file mode 100644 index 0000000..4959b45 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.hull.1.tesc @@ -0,0 +1,39 @@ +// *** +// invocation ID coming from input to entry point +// *** + +struct VS_OUT +{ + float3 cpoint : CPOINT; +}; + +struct HS_CONSTANT_OUT +{ + float edges[2] : SV_TessFactor; +}; + +struct HS_OUT +{ + float3 cpoint : CPOINT; +}; + +[domain("isoline")] +[partitioning("integer")] +[outputtopology("line")] +[outputcontrolpoints(4)] +[patchconstantfunc("PCF")] +HS_OUT main(InputPatch ip, uint m_cpid : SV_OutputControlPointID) +{ + HS_OUT output; + output.cpoint = ip[0].cpoint; + return output; +} + +HS_CONSTANT_OUT PCF(uint pid : SV_PrimitiveId) +{ + 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.2.tesc b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.hull.2.tesc new file mode 100644 index 0000000..3c0afcc --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.hull.2.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("isoline")] +[partitioning("integer")] +[outputtopology("line")] +[outputcontrolpoints(4)] +[patchconstantfunc("PCF")] +HS_OUT main(InputPatch 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.void.tesc b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.hull.void.tesc new file mode 100644 index 0000000..971d613 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.hull.void.tesc @@ -0,0 +1,34 @@ +// *** +// void patchconstantfunction input and return +// *** + +struct VS_OUT +{ + float3 cpoint : CPOINT; +}; + +struct HS_CONSTANT_OUT +{ + float edges[2] : SV_TessFactor; +}; + +struct HS_OUT +{ + float3 cpoint : CPOINT; +}; + +[domain("tri")] +[partitioning("fractional_even")] +[outputtopology("line")] +[outputcontrolpoints(3)] +[patchconstantfunc("PCF")] +HS_OUT main(InputPatch ip) +{ + HS_OUT output; + output.cpoint = ip[0].cpoint; + return output; +} + +void PCF() +{ +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.identifier.sample.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.identifier.sample.frag new file mode 100644 index 0000000..d3f8242 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.identifier.sample.frag @@ -0,0 +1,18 @@ + +struct MyStruct { + sample float a; + noperspective float b; + linear float c; + centroid float d; +}; + +int sample(int x) { return x; } // HLSL allows this as an identifier as well. + +float4 main() : SV_Target0 +{ + // HLSL allows this as an identifier as well. + // However, this is not true of other qualifier keywords such as "linear". + float4 sample = float4(3,4,5,6); + + return sample.rgba; // 'sample' can participate in an expression. +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.if.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.if.frag new file mode 100644 index 0000000..b62eda1 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.if.frag @@ -0,0 +1,35 @@ +float4 PixelShaderFunction(float4 input) : COLOR0 +{ + if (all(input == input)) + return input; + + if (all(input == input)) + return input; + else + return -input; + + if (all(input == input)) + ; + + if (all(input == input)) + ; + else + ; + + [flatten] if (all(input == input)) { + return input; + } + + if (all(input == input)) { + return input; + } else { + return -input; + } + + int ii; + if (float ii = input.z) + ++ii; + ++ii; + if (float(ii) == 1.0) + ++ii; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.init.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.init.frag new file mode 100644 index 0000000..8caf3c7 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.init.frag @@ -0,0 +1,41 @@ +static float4 a1 = float4(1, 0.5, 0, 1), b1 = float4(2.0, 2.5, 2.1, 2.2); +static float4 a1i = {1, 0.5, 0, 1}, b1i = {2.0, 2.5, 2.1, 2.2}; +static float a2 = 0.2, b2; +static float a3, b3 = 0.3; +static float a4, b4 = 0.4, c4; +static float a5 = 0.5, b5, c5 = 1.5; + +struct Single1 { int f; }; +static Single1 single1 = { 10 }; + +struct Single2 { uint2 v; }; +static Single2 single2 = { { 1, 2 } }; + +struct Single3 { Single1 s1; }; +static Single3 single3 = { { 3 } }; + +struct Single4 { Single2 s1; }; +static Single4 single4 = { { { 4u, 5u } } }; + +float4 ShaderFunction(float4 input) : COLOR0 +{ + float4 a2 = float4(0.2, 0.3, 0.4, 0.5); + struct S1 { + float f; + int i; + }; + struct S2 { + int j; + float g; + S1 s1; + }; + S2 s2i = { 9, a5, { (a3,a4), 12} }, s2 = S2(9, a5, S1((a3,a4), 12)); + float a8 = (a2, b2), a9 = a5; + + return input * a1; +} + +cbuffer Constants +{ + float a = 1.0f, b, c = 2.0f; +}; diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.init2.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.init2.frag new file mode 100644 index 0000000..2b9b7e6 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.init2.frag @@ -0,0 +1,51 @@ + +void Test1() +{ + struct mystruct { float2 a; }; + mystruct test1 = { + { 1, 2, }, // test trailing commas in list + }; + + mystruct test2 = { + float2(3, 4), + }; + + // mystruct test3 = { + // { { 5, 6, } }, // TODO: test unneeded levels + // }; + + float test4 = { 7, } ; // test scalar initialization + + struct mystruct2 { float a; float b; float c; }; + mystruct2 test5 = { {8,}, {9,}, {10}, }; + const mystruct2 constTest5 = { {8,}, {9,}, {10}, }; + constTest5.c; + + const float step = 1.f; + float n = 0; + const float3 a[8] = { + normalize(float3(1, 1, 1)) * (n += step), + normalize(float3(-1, -1, -1)) * (n += step), + normalize(float3(-1, -1, 1)) * (n += step), + normalize(float3(-1, 1, -1)) * (n += step), + normalize(float3(-1, 1, 1)) * (n += step), + normalize(float3(1, -1, -1)) * (n += step), + normalize(float3(1, -1, 1)) * (n += step), + normalize(float3(1, 1, -1)) * (n += step) }; + + const struct one { float3 a; } oneNonConst = { normalize(float3(-1, 1, 1)) * (n += step) }; + const struct two { float3 a; + float3 b; } twoNonConst = { normalize(float3(-1, 1, 1)) * (n += step), + normalize(float3(-1, 1, 1)) * (n += step) }; +} + +struct PS_OUTPUT { float4 color : SV_Target0; }; + +PS_OUTPUT main() +{ + Test1(); + + PS_OUTPUT ps_output; + ps_output.color = 1.0; + return ps_output; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.inoutquals.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.inoutquals.frag new file mode 100644 index 0000000..9328dfb --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.inoutquals.frag @@ -0,0 +1,25 @@ +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +inline void MyFunc(in float x, out float y, inout float z) +{ + y = x; + z = y; + x = -1; // no effect since x = in param +} + +PS_OUTPUT main(noperspective in float4 inpos : SV_Position, out int sampleMask : SV_Coverage) +{ + PS_OUTPUT psout; + + float x = 7, y, z = 3; + MyFunc(x, y, z); + + psout.Color = float4(x, y, z, 1); + psout.Depth = inpos.w; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.barriers.comp b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.barriers.comp new file mode 100644 index 0000000..c9f6a8d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.barriers.comp @@ -0,0 +1,13 @@ + +float ComputeShaderFunction() +{ + AllMemoryBarrier(); + AllMemoryBarrierWithGroupSync(); + DeviceMemoryBarrier(); + DeviceMemoryBarrierWithGroupSync(); + GroupMemoryBarrier(); + GroupMemoryBarrierWithGroupSync(); + + return 0.0; +} + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.comp b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.comp new file mode 100644 index 0000000..bce2d27 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.comp @@ -0,0 +1,129 @@ + + +groupshared uint gs_ua; +groupshared uint gs_ub; +groupshared uint gs_uc; +groupshared uint2 gs_ua2; +groupshared uint2 gs_ub2; +groupshared uint2 gs_uc2; +groupshared uint3 gs_ua3; +groupshared uint3 gs_ub3; +groupshared uint3 gs_uc3; +groupshared uint4 gs_ua4; +groupshared uint4 gs_ub4; +groupshared uint4 gs_uc4; + +float ComputeShaderFunctionS(float inF0, float inF1, float inF2, uint inU0, uint inU1) +{ + uint out_u1; + + // Don't repeat all the pixel/vertex fns - just one for sanity. + all(inF0); + + // Test atomics + InterlockedAdd(gs_ua, gs_ub); + InterlockedAdd(gs_ua, gs_ub, out_u1); + InterlockedAnd(gs_ua, gs_ub); + InterlockedAnd(gs_ua, gs_ub, out_u1); + InterlockedCompareExchange(gs_ua, gs_ub, gs_uc, out_u1); + InterlockedExchange(gs_ua, gs_ub, out_u1); + InterlockedMax(gs_ua, gs_ub); + InterlockedMax(gs_ua, gs_ub, out_u1); + InterlockedMin(gs_ua, gs_ub); + InterlockedMin(gs_ua, gs_ub, out_u1); + InterlockedOr(gs_ua, gs_ub); + InterlockedOr(gs_ua, gs_ub, out_u1); + InterlockedXor(gs_ua, gs_ub); + InterlockedXor(gs_ua, gs_ub, out_u1); + + // CheckAccessFullyMapped(3); // TODO: ... + + return 0.0; +} + +float1 ComputeShaderFunction1(float1 inF0, float1 inF1, float1 inF2) +{ + // TODO: ... add when float1 prototypes are generated + return 0.0; +} + +float2 ComputeShaderFunction2(float2 inF0, float2 inF1, float2 inF2, uint2 inU0, uint2 inU1) +{ + uint2 out_u2; + + // Don't repeat all the pixel/vertex fns - just one for sanity. + all(inF0); + + // Test atomics + InterlockedAdd(gs_ua2, gs_ub2); + InterlockedAdd(gs_ua2, gs_ub2, out_u2); + InterlockedAnd(gs_ua2, gs_ub2); + InterlockedAnd(gs_ua2, gs_ub2, out_u2); + InterlockedCompareExchange(gs_ua2, gs_ub2, gs_uc2, out_u2); + InterlockedExchange(gs_ua2, gs_ub2, out_u2); + InterlockedMax(gs_ua2, gs_ub2); + InterlockedMax(gs_ua2, gs_ub2, out_u2); + InterlockedMin(gs_ua2, gs_ub2); + InterlockedMin(gs_ua2, gs_ub2, out_u2); + InterlockedOr(gs_ua2, gs_ub2); + InterlockedOr(gs_ua2, gs_ub2, out_u2); + InterlockedXor(gs_ua2, gs_ub2); + InterlockedXor(gs_ua2, gs_ub2, out_u2); + + // TODO: ... add when float1 prototypes are generated + return float2(1,2); +} + +float3 ComputeShaderFunction3(float3 inF0, float3 inF1, float3 inF2, uint3 inU0, uint3 inU1) +{ + uint3 out_u3; + + // Don't repeat all the pixel/vertex fns - just one for sanity. + all(inF0); + + // Test atomics + InterlockedAdd(gs_ua3, gs_ub3); + InterlockedAdd(gs_ua3, gs_ub3, out_u3); + InterlockedAnd(gs_ua3, gs_ub3); + InterlockedAnd(gs_ua3, gs_ub3, out_u3); + InterlockedCompareExchange(gs_ua3, gs_ub3, gs_uc3, out_u3); + InterlockedExchange(gs_ua3, gs_ub3, out_u3); + InterlockedMax(gs_ua3, gs_ub3); + InterlockedMax(gs_ua3, gs_ub3, out_u3); + InterlockedMin(gs_ua3, gs_ub3); + InterlockedMin(gs_ua3, gs_ub3, out_u3); + InterlockedOr(gs_ua3, gs_ub3); + InterlockedOr(gs_ua3, gs_ub3, out_u3); + InterlockedXor(gs_ua3, gs_ub3); + InterlockedXor(gs_ua3, gs_ub3, out_u3); + + // TODO: ... add when float1 prototypes are generated + return float3(1,2,3); +} + +float4 ComputeShaderFunction(float4 inF0, float4 inF1, float4 inF2, uint4 inU0, uint4 inU1) +{ + uint4 out_u4; + + // Don't repeat all the pixel/vertex fns - just one for sanity. + all(inF0); + + // Test atomics + InterlockedAdd(gs_ua4, gs_ub4); + InterlockedAdd(gs_ua4, gs_ub4, out_u4); + InterlockedAnd(gs_ua4, gs_ub4); + InterlockedAnd(gs_ua4, gs_ub4, out_u4); + InterlockedCompareExchange(gs_ua4, gs_ub4, gs_uc4, out_u4); + InterlockedExchange(gs_ua4, gs_ub4, out_u4); + InterlockedMax(gs_ua4, gs_ub4); + InterlockedMax(gs_ua4, gs_ub4, out_u4); + InterlockedMin(gs_ua4, gs_ub4); + InterlockedMin(gs_ua4, gs_ub4, out_u4); + InterlockedOr(gs_ua4, gs_ub4); + InterlockedOr(gs_ua4, gs_ub4, out_u4); + InterlockedXor(gs_ua4, gs_ub4); + InterlockedXor(gs_ua4, gs_ub4, out_u4); + + // TODO: ... add when float1 prototypes are generated + return float4(1,2,3,4); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.d3dcolortoubyte4.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.d3dcolortoubyte4.frag new file mode 100644 index 0000000..295374f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.d3dcolortoubyte4.frag @@ -0,0 +1,7 @@ + +uniform float4 col4; + +int4 main() : SV_Target0 +{ + return D3DCOLORtoUBYTE4(col4); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.double.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.double.frag new file mode 100644 index 0000000..013422a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.double.frag @@ -0,0 +1,11 @@ + +float PixelShaderFunction(double inDV1a, double inDV1b, double inDV1c, + double2 inDV2, double3 inDV3, double4 inDV4, + uint inU1a, uint inU1b) +{ + double r00 = fma(inDV1a, inDV1b, inDV1c); + double r01 = asdouble(inU1a, inU1b); + + return 0.0; +} + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.evalfns.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.evalfns.frag new file mode 100644 index 0000000..9638706 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.evalfns.frag @@ -0,0 +1,10 @@ + +void main(float inF1, float2 inF2, float3 inF3, float4 inF4, int2 inI2) : COLOR +{ + EvaluateAttributeSnapped(inF1, int2(8,15)); + EvaluateAttributeSnapped(inF2, int2(0,1)); + EvaluateAttributeSnapped(inF3, int2(3,10)); + EvaluateAttributeSnapped(inF4, int2(7,8)); + + EvaluateAttributeSnapped(inF1, inI2); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.f1632.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.f1632.frag new file mode 100644 index 0000000..f406860 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.f1632.frag @@ -0,0 +1,29 @@ +float PixelShaderFunctionS(uint inF0) +{ + return f16tof32(inF0); +} + +float1 PixelShaderFunction1(uint1 inF0) +{ + return f16tof32(inF0); +} + +float2 PixelShaderFunction2(uint2 inF0) +{ + return f16tof32(inF0); +} + +float3 PixelShaderFunction3(uint3 inF0) +{ + return f16tof32(inF0); +} + +float4 PixelShaderFunction(uint4 inF0) +{ + return f16tof32(inF0); +} + +float4 main() : SV_Target0 +{ + return 0; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.f3216.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.f3216.frag new file mode 100644 index 0000000..f31136d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.f3216.frag @@ -0,0 +1,29 @@ +uint PixelShaderFunctionS(float inF0) +{ + return f32tof16(inF0); +} + +uint1 PixelShaderFunction1(float1 inF0) +{ + return f32tof16(inF0); +} + +uint2 PixelShaderFunction2(float2 inF0) +{ + return f32tof16(inF0); +} + +uint3 PixelShaderFunction3(float3 inF0) +{ + return f32tof16(inF0); +} + +uint4 PixelShaderFunction(float4 inF0) +{ + return f32tof16(inF0); +} + +float4 main() : SV_Target0 +{ + return 0; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.frag new file mode 100644 index 0000000..15db637 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.frag @@ -0,0 +1,493 @@ + + +groupshared uint gs_ua; +groupshared uint gs_ub; +groupshared uint gs_uc; +groupshared uint2 gs_ua2; +groupshared uint2 gs_ub2; +groupshared uint2 gs_uc2; +groupshared uint3 gs_ua3; +groupshared uint3 gs_ub3; +groupshared uint3 gs_uc3; +groupshared uint4 gs_ua4; +groupshared uint4 gs_ub4; +groupshared uint4 gs_uc4; + +float PixelShaderFunctionS(float inF0, float inF1, float inF2, uint inU0, uint inU1) +{ + uint out_u1; + + bool r000 = all(inF0); + float r001 = abs(inF0); + float r002 = acos(inF0); + bool r003 = any(inF0); + float r004 = asin(inF0); + int r005 = asint(inF0); + uint r006 = asuint(inF0); + float r007 = asfloat(inU0); + // asdouble(inU0, inU1); // TODO: enable when HLSL parser used for intrinsics + float r009 = atan(inF0); + float r010 = atan2(inF0, inF1); + float r011 = ceil(inF0); + float r012 = clamp(inF0, inF1, inF2); + clip(inF0); + float r014 = cos(inF0); + float r015 = cosh(inF0); + int r016 = countbits(7); + float r017 = ddx(inF0); + float r018 = ddx_coarse(inF0); + float r019 = ddx_fine(inF0); + float r020 = ddy(inF0); + float r021 = ddy_coarse(inF0); + float r022 = ddy_fine(inF0); + float r023 = degrees(inF0); + // EvaluateAttributeAtCentroid(inF0); + // EvaluateAttributeAtSample(inF0, 0); + // TODO: EvaluateAttributeSnapped(inF0, int2(1,2)); + float r027 = exp(inF0); + float r028 = exp2(inF0); + uint r029 = firstbithigh(7); + uint r030 = firstbitlow(7); + float r031 = floor(inF0); + // 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); + float r039 = ldexp(inF0, inF1); + float r039a = lerp(inF0, inF1, inF2); + float r040 = log(inF0); + float r041 = log10(inF0); + float r042 = log2(inF0); + float r043 = max(inF0, inF1); + float r044 = min(inF0, inF1); + float r045 = pow(inF0, inF1); + float r046 = radians(inF0); + float r047 = rcp(inF0); + uint r048 = reversebits(2); + float r049 = round(inF0); + float r050 = rsqrt(inF0); + float r051 = saturate(inF0); + float r052 = sign(inF0); + float r053 = sin(inF0); + sincos(inF0, inF1, inF2); + float r055 = sinh(inF0); + float r056 = smoothstep(inF0, inF1, inF2); + float r057 = sqrt(inF0); + float r058 = step(inF0, inF1); + float r059 = tan(inF0); + float r060 = tanh(inF0); + // TODO: sampler intrinsics, when we can declare the types. + float r061 = trunc(inF0); + + return 0.0; +} + +float1 PixelShaderFunction1(float1 inF0, float1 inF1, float1 inF2) +{ + // TODO: ... add when float1 prototypes are generated + return 0.0; +} + +float2 PixelShaderFunction2(float2 inF0, float2 inF1, float2 inF2, uint2 inU0, uint2 inU1) +{ + uint2 out_u2; + + bool r000 = all(inF0); + float2 r001 = abs(inF0); + float2 r002 = acos(inF0); + bool r003 = any(inF0); + float2 r004 = asin(inF0); + int2 r005 = asint(inF0); + uint2 r006 = asuint(inF0); + float2 r007 = asfloat(inU0); + // asdouble(inU0, inU1); // TODO: enable when HLSL parser used for intrinsics + float2 r009 = atan(inF0); + float2 r010 = atan2(inF0, inF1); + float2 r011 = ceil(inF0); + float2 r012 = clamp(inF0, inF1, inF2); + clip(inF0); + float2 r013 = cos(inF0); + float2 r015 = cosh(inF0); + int2 r016 = countbits(int2(7,3)); + float2 r017 = ddx(inF0); + float2 r018 = ddx_coarse(inF0); + float2 r019 = ddx_fine(inF0); + float2 r020 = ddy(inF0); + float2 r021 = ddy_coarse(inF0); + float2 r022 = ddy_fine(inF0); + float2 r023 = degrees(inF0); + // EvaluateAttributeAtCentroid(inF0); + // EvaluateAttributeAtSample(inF0, 0); + // TODO: EvaluateAttributeSnapped(inF0, int2(1,2)); + float r026 = distance(inF0, inF1); + float r027 = dot(inF0, inF1); + // EvaluateAttributeAtCentroid(inF0); + // EvaluateAttributeAtSample(inF0, 0); + // TODO: EvaluateAttributeSnapped(inF0, int2(1,2)); + float2 r028 = exp(inF0); + float2 r029 = exp2(inF0); + float2 r030 = faceforward(inF0, inF1, inF2); + uint2 r031 = firstbithigh(uint2(7,8)); + uint2 r032 = firstbitlow(uint2(7,8)); + float2 r033 = floor(inF0); + // 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); + float2 r041 = ldexp(inF0, inF1); + float2 r039a = lerp(inF0, inF1, inF2); + float r042 = length(inF0); + float2 r043 = log(inF0); + float2 r044 = log10(inF0); + float2 r045 = log2(inF0); + float2 r046 = max(inF0, inF1); + float2 r047 = min(inF0, inF1); + float2 r048 = normalize(inF0); + float2 r049 = pow(inF0, inF1); + float2 r050 = radians(inF0); + float2 r051 = rcp(inF0); + float2 r052 = reflect(inF0, inF1); + float2 r053 = refract(inF0, inF1, 2.0); + uint2 r054 = reversebits(uint2(1,2)); + float2 r055 = round(inF0); + float2 r056 = rsqrt(inF0); + float2 r057 = saturate(inF0); + float2 r058 = sign(inF0); + float2 r059 = sin(inF0); + sincos(inF0, inF1, inF2); + float2 r060 = sinh(inF0); + float2 r061 = smoothstep(inF0, inF1, inF2); + float2 r062 = sqrt(inF0); + float2 r063 = step(inF0, inF1); + float2 r064 = tan(inF0); + float2 r065 = tanh(inF0); + // TODO: sampler intrinsics, when we can declare the types. + float2 r066 = trunc(inF0); + + // TODO: ... add when float1 prototypes are generated + return float2(1,2); +} + +float3 PixelShaderFunction3(float3 inF0, float3 inF1, float3 inF2, uint3 inU0, uint3 inU1) +{ + uint3 out_u3; + + bool r000 = all(inF0); + float3 r001 = abs(inF0); + float3 r002 = acos(inF0); + bool r003 = any(inF0); + float3 r004 = asin(inF0); + int3 r005 = asint(inF0); + uint3 r006 = asuint(inF0); + float3 r007 = asfloat(inU0); + // asdouble(inU0, inU1); // TODO: enable when HLSL parser used for intrinsics + float3 r009 = atan(inF0); + float3 r010 = atan2(inF0, inF1); + float3 r011 = ceil(inF0); + float3 r012 = clamp(inF0, inF1, inF2); + clip(inF0); + float3 r013 = cos(inF0); + float3 r014 = cosh(inF0); + uint3 r015 = countbits(uint3(7,3,5)); + float3 r016 = cross(inF0, inF1); + float3 r017 = ddx(inF0); + float3 r018 = ddx_coarse(inF0); + float3 r019 = ddx_fine(inF0); + float3 r020 = ddy(inF0); + float3 r021 = ddy_coarse(inF0); + float3 r022 = ddy_fine(inF0); + float3 r023 = degrees(inF0); + float r024 = distance(inF0, inF1); + float r025 = dot(inF0, inF1); + // EvaluateAttributeAtCentroid(inF0); + // EvaluateAttributeAtSample(inF0, 0); + // TODO: EvaluateAttributeSnapped(inF0, int2(1,2)); + float3 r029 = exp(inF0); + float3 r030 = exp2(inF0); + float3 r031 = faceforward(inF0, inF1, inF2); + uint3 r032 = firstbithigh(uint3(2,3,4)); + uint3 r033 = firstbitlow(uint3(2,3,4)); + float3 r034 = floor(inF0); + // 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); + float3 r042 = ldexp(inF0, inF1); + float3 r039a = lerp(inF0, inF1, inF2); + float3 r039b = lerp(inF0, inF1, 0.3); // test vec,vec,scalar lerp + float r043 = length(inF0); + float3 r044 = log(inF0); + float3 r045 = log10(inF0); + float3 r046 = log2(inF0); + float3 r047 = max(inF0, inF1); + float3 r048 = min(inF0, inF1); + float3 r049 = normalize(inF0); + float3 r050 = pow(inF0, inF1); + float3 r051 = radians(inF0); + float3 r052 = rcp(inF0); + float3 r053 = reflect(inF0, inF1); + float3 r054 = refract(inF0, inF1, 2.0); + uint3 r055 = reversebits(uint3(1,2,3)); + float3 r056 = round(inF0); + float3 r057 = rsqrt(inF0); + float3 r058 = saturate(inF0); + float3 r059 = sign(inF0); + float3 r060 = sin(inF0); + sincos(inF0, inF1, inF2); + float3 r061 = sinh(inF0); + float3 r062 = smoothstep(inF0, inF1, inF2); + float3 r063 = sqrt(inF0); + float3 r064 = step(inF0, inF1); + float3 r065 = tan(inF0); + float3 r066 = tanh(inF0); + // TODO: sampler intrinsics, when we can declare the types. + float3 r067 = trunc(inF0); + + // TODO: ... add when float1 prototypes are generated + return float3(1,2,3); +} + +float4 PixelShaderFunction(float4 inF0, float4 inF1, float4 inF2, uint4 inU0, uint4 inU1) +{ + uint4 out_u4; + + bool r000 = all(inF0); + float4 r001 = abs(inF0); + float4 r002 = acos(inF0); + bool r003 = any(inF0); + float4 r004 = asin(inF0); + int4 r005 = asint(inF0); + uint4 r006 = asuint(inF0); + float4 r007 = asfloat(inU0); + // asdouble(inU0, inU1); // TODO: enable when HLSL parser used for intrinsics + float4 r009 = atan(inF0); + float4 r010 = atan2(inF0, inF1); + float4 r011 = ceil(inF0); + float4 r012 = clamp(inF0, inF1, inF2); + clip(inF0); + float4 r013 = cos(inF0); + float4 r014 = cosh(inF0); + uint4 r015 = countbits(uint4(7,3,5,2)); + float4 r016 = ddx(inF0); + float4 r017 = ddx_coarse(inF0); + float4 r018 = ddx_fine(inF0); + float4 r019 = ddy(inF0); + float4 r020 = ddy_coarse(inF0); + float4 r021 = ddy_fine(inF0); + float4 r022 = degrees(inF0); + float r023 = distance(inF0, inF1); + float r024 = dot(inF0, inF1); + float4 r025 = dst(inF0, inF1); + // EvaluateAttributeAtCentroid(inF0); + // EvaluateAttributeAtSample(inF0, 0); + // TODO: EvaluateAttributeSnapped(inF0, int2(1,2)); + float4 r029 = exp(inF0); + float4 r030 = exp2(inF0); + float4 r031 = faceforward(inF0, inF1, inF2); + uint4 r032 = firstbithigh(uint4(7,8,9,10)); + uint4 r033 = firstbitlow(uint4(7,8,9,10)); + float4 r034 = floor(inF0); + // 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); + float4 r042 = ldexp(inF0, inF1); + float4 r039a = lerp(inF0, inF1, inF2); + float r043 = length(inF0); + float4 r044 = log(inF0); + float4 r045 = log10(inF0); + float4 r046 = log2(inF0); + float4 r047 = max(inF0, inF1); + float4 r048 = min(inF0, inF1); + float4 r049 = normalize(inF0); + float4 r050 = pow(inF0, inF1); + float4 r051 = radians(inF0); + float4 r052 = rcp(inF0); + float4 r053 = reflect(inF0, inF1); + float4 r054 = refract(inF0, inF1, 2.0); + uint4 r055 = reversebits(uint4(1,2,3,4)); + float4 r056 = round(inF0); + float4 r057 = rsqrt(inF0); + float4 r058 = saturate(inF0); + float4 r059 = sign(inF0); + float4 r060 = sin(inF0); + sincos(inF0, inF1, inF2); + float4 r061 = sinh(inF0); + float4 r062 = smoothstep(inF0, inF1, inF2); + float4 r063 = sqrt(inF0); + float4 r064 = step(inF0, inF1); + float4 r065 = tan(inF0); + float4 r066 = tanh(inF0); + // TODO: sampler intrinsics, when we can declare the types. + float4 r067 = trunc(inF0); + + // TODO: ... add when float1 prototypes are generated + return float4(1,2,3,4); +} + +// TODO: for mats: +// asfloat(inU0); \ +// asint(inF0); \ +// asuint(inF0); \ + +// TODO: FXC doesn't accept this with (), but glslang doesn't accept it without. +#define MATFNS(MT) \ + bool r000 = all(inF0); \ + MT r001 = abs(inF0); \ + acos(inF0); \ + bool r003 = any(inF0); \ + MT r004 = asin(inF0); \ + MT r005 = atan(inF0); \ + MT r006 = atan2(inF0, inF1); \ + MT r007 = ceil(inF0); \ + clip(inF0); \ + MT r008 = clamp(inF0, inF1, inF2); \ + MT r009 = cos(inF0); \ + MT r010 = cosh(inF0); \ + MT r011 = ddx(inF0); \ + MT r012 = ddx_coarse(inF0); \ + MT r013 = ddx_fine(inF0); \ + MT r014 = ddy(inF0); \ + MT r015 = ddy_coarse(inF0); \ + MT r016 = ddy_fine(inF0); \ + MT r017 = degrees(inF0); \ + float r018 = determinant(inF0); \ + MT r019 = exp(inF0); \ + MT R020 = exp2(inF0); \ + 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); \ + MT r027 = log(inF0); \ + MT r028 = log10(inF0); \ + MT r029 = log2(inF0); \ + MT r030 = max(inF0, inF1); \ + MT r031 = min(inF0, inF1); \ + MT r032 = pow(inF0, inF1); \ + MT r033 = radians(inF0); \ + MT r034 = round(inF0); \ + MT r035 = rsqrt(inF0); \ + MT r036 = saturate(inF0); \ + MT r037 = sign(inF0); \ + MT r038 = sin(inF0); \ + sincos(inF0, inF1, inF2); \ + MT r039 = sinh(inF0); \ + MT r049 = smoothstep(inF0, inF1, inF2); \ + MT r041 = sqrt(inF0); \ + MT r042 = step(inF0, inF1); \ + MT r043 = tan(inF0); \ + MT r044 = tanh(inF0); \ + transpose(inF0); \ + MT r046 = trunc(inF0); + +// TODO: turn on non-square matrix tests when protos are available. + +float2x2 PixelShaderFunction2x2(float2x2 inF0, float2x2 inF1, float2x2 inF2) +{ + // TODO: FXC doesn't accept this with (), but glslang doesn't accept it without. + MATFNS(float2x2); + + // TODO: ... add when float1 prototypes are generated + return float2x2(2,2,2,2); +} + +float3x3 PixelShaderFunction3x3(float3x3 inF0, float3x3 inF1, float3x3 inF2) +{ + // TODO: FXC doesn't accept this with (), but glslang doesn't accept it without. + MATFNS(float3x3); + + // TODO: ... add when float1 prototypes are generated + return float3x3(3,3,3,3,3,3,3,3,3); +} + +float4x4 PixelShaderFunction4x4(float4x4 inF0, float4x4 inF1, float4x4 inF2) +{ + // TODO: FXC doesn't accept this with (), but glslang doesn't accept it without. + MATFNS(float4x4); + + // TODO: ... add when float1 prototypes are generated + return float4x4(4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4); +} + +#define TESTGENMUL(ST, VT, MT) \ + ST r0 = mul(inF0, inF1); \ + VT r1 = mul(inFV0, inF0); \ + VT r2 = mul(inF0, inFV0); \ + ST r3 = mul(inFV0, inFV1); \ + VT r4 = mul(inFM0, inFV0); \ + VT r5 = mul(inFV0, inFM0); \ + MT r6 = mul(inFM0, inF0); \ + MT r7 = mul(inF0, inFM0); \ + MT r8 = mul(inFM0, inFM1); + + +void TestGenMul2(float inF0, float inF1, + float2 inFV0, float2 inFV1, + float2x2 inFM0, float2x2 inFM1) +{ + TESTGENMUL(float, float2, float2x2); +} + +void TestGenMul3(float inF0, float inF1, + float3 inFV0, float3 inFV1, + float3x3 inFM0, float3x3 inFM1) +{ + TESTGENMUL(float, float3, float3x3); +} + +void TestGenMul4(float inF0, float inF1, + float4 inFV0, float4 inFV1, + float4x4 inFM0, float4x4 inFM1) +{ + TESTGENMUL(float, float4, float4x4); +} + +// Test some non-square mats +void TestGenMulNxM(float inF0, float inF1, + float2 inFV2, float3 inFV3, + float2x3 inFM2x3, float3x2 inFM3x2, + float3x3 inFM3x3, float3x4 inFM3x4, + float2x4 inFM2x4) +{ + float r00 = mul(inF0, inF1); // S=S*S + float2 r01 = mul(inFV2, inF0); // V=V*S + float3 r02 = mul(inFV3, inF0); // V=V*S + float2 r03 = mul(inF0, inFV2); // V=S*V + float3 r04 = mul(inF0, inFV3); // V=S*V + float r05 = mul(inFV2, inFV2); // S=V*V + float r06 = mul(inFV3, inFV3); // S=V*V + float3 r07 = mul(inFV2, inFM2x3); // V=V*M (return V dim is Mcols) + float2 r08 = mul(inFV3, inFM3x2); // V=V*M (return V dim is Mcols) + float2 r09 = mul(inFM2x3, inFV3); // V=M*V (return V dim is Mrows) + float3 r10 = mul(inFM3x2, inFV2); // V=M*V (return V dim is Mrows) + float2x3 r11 = mul(inFM2x3, inF0); + float3x2 r12 = mul(inFM3x2, inF0); + float2x2 r13 = mul(inFM2x3, inFM3x2); + float2x3 r14 = mul(inFM2x3, inFM3x3); + float2x4 r15 = mul(inFM2x3, inFM3x4); + float3x4 r16 = mul(inFM3x2, inFM2x4); +} + +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.intrinsics.lit.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.lit.frag new file mode 100644 index 0000000..bf4069a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.lit.frag @@ -0,0 +1,4 @@ +void PixelShaderFunction(float n_dot_l, float n_dot_h, float m) +{ + float4 r0 = lit(n_dot_l, n_dot_h, m); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.negative.comp b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.negative.comp new file mode 100644 index 0000000..fe612d6 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.negative.comp @@ -0,0 +1,201 @@ +float ComputeShaderFunctionS(float inF0, float inF1, float inF2, int inI0) +{ + uint out_u1; + + // AllMemoryBarrier(); // invalid in fragment stage TODO: parser currently crashes on empty arg list + // AllMemoryBarrierWithGroupSync(); // invalid in fragment stage TODO: parser currently crashes on empty arg list + // asdouble(inF0, inF1); // expected error: only integer inputs + // CheckAccessFullyMapped(3.0); // expected error: only valid on integers + // clip(inF0); // expected error: only valid in pixel stage + // countbits(inF0); // expected error: only integer inputs + // cross(inF0, inF1); // expected error: only on float3 inputs + // D3DCOLORtoUBYTE4(inF0); // expected error: only on float4 inputs + // ddx(inF0); // expected error: only valid in pixel stage + // ddx_coarse(inF0); // expected error: only valid in pixel stage + // ddx_fine(inF0); // expected error: only valid in pixel stage + // ddy(inF0); // expected error: only valid in pixel stage + // ddy_coarse(inF0); // expected error: only valid in pixel stage + // ddy_fine(inF0); // expected error: only valid in pixel stage + // determinant(inF0); // expected error: only valid on mats + // EvaluateAttributeAtCentroid(inF0); // expected error: only interpolant + // EvaluateAttributeAtSample(inF0, 2); // expected error: only interpolant + // EvaluateAttributeSnapped(inF0, int2(2)); // expected error: only interpolant + // f16tof32(inF0); // expected error: only integer inputs + // firstbithigh(inF0); // expected error: only integer inputs + // firstbitlow(inF0); // expected error: only integer inputs + // fma(inF0, inF1, inF2); // TODO: this might auto-promote: need to check against FXC + // fwidth(inF0); // expected error: only valid in pixel stage + // InterlockedAdd(gs_ua, gs_ub); // expected error: only valid in pixel stage + // InterlockedAdd(gs_ua, gs_ub, out_u1); // expected error: only valid in pixel stage + // InterlockedAnd(gs_ua, gs_ub); // expected error: only valid in pixel stage + // InterlockedAnd(gs_ua, gs_ub, out_u1); // expected error: only valid in pixel stage + // InterlockedCompareExchange(gs_ua, gs_ub, gs_uc, out_u1); // expected error: only valid in pixel stage + // InterlockedExchange(gs_ua, gs_ub, out_u1);// expected error: only valid in pixel stage + // InterlockedMax(gs_ua, gs_ub); // expected error: only valid in pixel stage + // InterlockedMax(gs_ua, gs_ub, out_u1); // expected error: only valid in pixel stage + // InterlockedMin(gs_ua, gs_ub); // expected error: only valid in pixel stage + // InterlockedMin(gs_ua, gs_ub, out_u1); // expected error: only valid in pixel stage + // InterlockedOr(gs_ua, gs_ub); // expected error: only valid in pixel stage + // InterlockedOr(gs_ua, gs_ub, out_u1); // expected error: only valid in pixel stage + // InterlockedXor(gs_ua, gs_ub); // expected error: only valid in pixel stage + // InterlockedXor(gs_ua, gs_ub, out_u1); // expected error: only valid in pixel stage + // length(inF0); // expect error: invalid on scalars + // msad4(inF0, float2(0), float4(0)); // expected error: only integer inputs + // normalize(inF0); // expect error: invalid on scalars + // reflect(inF0, inF1); // expect error: invalid on scalars + // refract(inF0, inF1, inF2); // expect error: invalid on scalars + // refract(float2(0), float2(0), float2(0)); // expected error: last parameter only scalar + // reversebits(inF0); // expected error: only integer inputs + // transpose(inF0); // expect error: only valid on mats + + // TODO: texture intrinsics, when we can declare samplers. + + return 0.0; +} + +float1 ComputeShaderFunction1(float1 inF0, float1 inF1, float1 inF2, int1 inI0) +{ + // TODO: ... add when float1 prototypes are generated + + // GetRenderTargetSamplePosition(inF0); // expected error: only integer inputs + + return 0.0; +} + +float2 ComputeShaderFunction2(float2 inF0, float2 inF1, float2 inF2, int2 inI0) +{ + uint2 out_u2; + + // asdouble(inF0, inF1); // expected error: only integer inputs + // CheckAccessFullyMapped(inF0); // expect error: only valid on scalars + // countbits(inF0); // expected error: only integer inputs + // cross(inF0, inF1); // expected error: only on float3 inputs + // D3DCOLORtoUBYTE4(inF0); // expected error: only on float4 inputs + // ddx(inF0); // only valid in pixel stage + // ddx_coarse(inF0); // only valid in pixel stage + // ddx_fine(inF0); // only valid in pixel stage + // ddy(inF0); // only valid in pixel stage + // ddy_coarse(inF0); // only valid in pixel stage + // ddy_fine(inF0); // only valid in pixel stage + // determinant(inF0); // expect error: only valid on mats + // EvaluateAttributeAtCentroid(inF0); // expected error: only interpolant + // EvaluateAttributeAtSample(inF0, 2); // expected error: only interpolant + // EvaluateAttributeSnapped(inF0, int2(2)); // expected error: only interpolant + // f16tof32(inF0); // expected error: only integer inputs + // firstbithigh(inF0); // expected error: only integer inputs + // firstbitlow(inF0); // expected error: only integer inputs + // fma(inF0, inF1, inF2); // TODO: this might auto-promote: need to check against FXC + // fwidth(inF0); // expected error: only valid in pixel stage + // InterlockedAdd(gs_ua2, gs_ub2); // expected error: only valid in pixel stage + // InterlockedAdd(gs_ua2, gs_ub2, out_u2); // expected error: only valid in pixel stage + // InterlockedAnd(gs_ua2, gs_ub2); // expected error: only valid in pixel stage + // InterlockedAnd(gs_ua2, gs_ub2, out_u2); // expected error: only valid in pixel stage + // InterlockedCompareExchange(gs_ua2, gs_ub2, gs_uc2, out_u2); // expected error: only valid in pixel stage + // InterlockedExchange(gs_ua2, gs_ub2, out_u2);// expected error: only valid in pixel stage + // InterlockedMax(gs_ua2, gs_ub2); // expected error: only valid in pixel stage + // InterlockedMax(gs_ua2, gs_ub2, out_u2); // expected error: only valid in pixel stage + // InterlockedMin(gs_ua2, gs_ub2); // expected error: only valid in pixel stage + // InterlockedMin(gs_ua2, gs_ub2, out_u2); // expected error: only valid in pixel stage + // InterlockedOr(gs_ua2, gs_ub2); // expected error: only valid in pixel stage + // InterlockedOr(gs_ua2, gs_ub2, out_u2); // expected error: only valid in pixel stage + // InterlockedXor(gs_ua2, gs_ub2); // expected error: only valid in pixel stage + // InterlockedXor(gs_ua2, gs_ub2, out_u2); // expected error: only valid in pixel stage + // noise(inF0); // expected error: only valid in pixel stage + // reversebits(inF0); // expected error: only integer inputs + // transpose(inF0); // expect error: only valid on mats + + // TODO: texture intrinsics, when we can declare samplers. + + return float2(1,2); +} + +float3 ComputeShaderFunction3(float3 inF0, float3 inF1, float3 inF2, int3 inI0) +{ + uint3 out_u3; + + // CheckAccessFullyMapped(inF0); // expect error: only valid on scalars + // countbits(inF0); // expected error: only integer inputs + // ddx(inF0); // only valid in pixel stage + // ddx_coarse(inF0); // only valid in pixel stage + // ddx_fine(inF0); // only valid in pixel stage + // ddy(inF0); // only valid in pixel stage + // ddy_coarse(inF0); // only valid in pixel stage + // ddy_fine(inF0); // only valid in pixel stage + // D3DCOLORtoUBYTE4(inF0); // expected error: only on float4 inputs + // determinant(inF0); // expect error: only valid on mats + // EvaluateAttributeAtCentroid(inF0); // expected error: only interpolant + // EvaluateAttributeAtSample(inF0, 2); // expected error: only interpolant + // EvaluateAttributeSnapped(inF0, int2(2)); // expected error: only interpolant + // f16tof32(inF0); // expected error: only integer inputs + // firstbithigh(inF0); // expected error: only integer inputs + // firstbitlow(inF0); // expected error: only integer inputs + // fma(inF0, inF1, inF2); // TODO: this might auto-promote: need to check against FXC + // fwidth(inF0); // expected error: only valid in pixel stage + // InterlockedAdd(gs_ua3, gs_ub3); // expected error: only valid in pixel stage + // InterlockedAdd(gs_ua3, gs_ub3, out_u3); // expected error: only valid in pixel stage + // InterlockedAnd(gs_ua3, gs_ub3); // expected error: only valid in pixel stage + // InterlockedAnd(gs_ua3, gs_ub3, out_u3); // expected error: only valid in pixel stage + // InterlockedCompareExchange(gs_ua3, gs_ub3, gs_uc3, out_u3); // expected error: only valid in pixel stage + // InterlockedExchange(gs_ua3, gs_ub3, out_u3); // expected error: only valid in pixel stage + // InterlockedMax(gs_ua3, gs_ub3); // expected error: only valid in pixel stage + // InterlockedMax(gs_ua3, gs_ub3, out_u3); // expected error: only valid in pixel stage + // InterlockedMin(gs_ua3, gs_ub3); // expected error: only valid in pixel stage + // InterlockedMin(gs_ua3, gs_ub3, out_u3); // expected error: only valid in pixel stage + // InterlockedOr(gs_ua3, gs_ub3); // expected error: only valid in pixel stage + // InterlockedOr(gs_ua3, gs_ub3, out_u3); // expected error: only valid in pixel stage + // InterlockedXor(gs_ua3, gs_ub3); // expected error: only valid in pixel stage + // InterlockedXor(gs_ua3, gs_ub3, out_u3); // expected error: only valid in pixel stage + // noise(inF0); // expected error: only valid in pixel stage + // reversebits(inF0); // expected error: only integer inputs + // transpose(inF0); // expect error: only valid on mats + + // TODO: texture intrinsics, when we can declare samplers. + + return float3(1,2,3); +} + +float4 ComputeShaderFunction(float4 inF0, float4 inF1, float4 inF2, int4 inI0) +{ + uint4 out_u4; + + // CheckAccessFullyMapped(inF0); // expect error: only valid on scalars + // countbits(inF0); // expected error: only integer inputs + // cross(inF0, inF1); // expected error: only on float3 inputs + // determinant(inF0); // expect error: only valid on mats + // ddx(inF0); // only valid in pixel stage + // ddx_coarse(inF0); // only valid in pixel stage + // ddx_fine(inF0); // only valid in pixel stage + // ddy(inF0); // only valid in pixel stage + // ddy_coarse(inF0); // only valid in pixel stage + // ddy_fine(inF0); // only valid in pixel stage + // EvaluateAttributeAtCentroid(inF0); // expected error: only valid in pixel stage + // EvaluateAttributeAtSample(inF0, 2); // expected error: only valid in pixel stage + // EvaluateAttributeSnapped(inF0, int2(2)); // expected error: only valid in pixel stage + // f16tof32(inF0); // expected error: only integer inputs + // firstbithigh(inF0); // expected error: only integer inputs + // firstbitlow(inF0); // expected error: only integer inputs + // fma(inF0, inF1, inF2); // TODO: this might auto-promote: need to check against FXC + // fwidth(inF0); // expected error: only valid in pixel stage + // InterlockedAdd(gs_ua4, gs_ub4); // expected error: only valid in pixel stage + // InterlockedAdd(gs_ua4, gs_ub4, out_u4); // expected error: only valid in pixel stage + // InterlockedAnd(gs_ua4, gs_ub4); // expected error: only valid in pixel stage + // InterlockedAnd(gs_ua4, gs_ub4, out_u4); // expected error: only valid in pixel stage + // InterlockedCompareExchange(gs_ua4, gs_ub4, gs_uc4, out_u4); // expected error: only valid in pixel stage + // InterlockedExchange(gs_ua4, gs_ub4, out_u4); // expected error: only valid in pixel stage + // InterlockedMax(gs_ua4, gs_ub4); // expected error: only valid in pixel stage + // InterlockedMax(gs_ua4, gs_ub4, out_u4); // expected error: only valid in pixel stage + // InterlockedMin(gs_ua4, gs_ub4); // expected error: only valid in pixel stage + // InterlockedMin(gs_ua4, gs_ub4, out_u4); // expected error: only valid in pixel stage + // InterlockedOr(gs_ua4, gs_ub4); // expected error: only valid in pixel stage + // InterlockedOr(gs_ua4, gs_ub4, out_u4); // expected error: only valid in pixel stage + // InterlockedXor(gs_ua4, gs_ub4); // expected error: only valid in pixel stage + // InterlockedXor(gs_ua4, gs_ub4, out_u4); // expected error: only valid in pixel stage + // noise(inF0); // expected error: only valid in pixel stage + // reversebits(inF0); // expected error: only integer inputs + // transpose(inF0); // expect error: only valid on mats + + // TODO: texture intrinsics, when we can declare samplers. + + return float4(1,2,3,4); +} + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.negative.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.negative.frag new file mode 100644 index 0000000..8afaf87 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.negative.frag @@ -0,0 +1,136 @@ +float PixelShaderFunctionS(float inF0, float inF1, float inF2, int inI0) +{ + // AllMemoryBarrier(); // TODO: expected error: invalid in fragment stage + // AllMemoryBarrierWithGroupSync(); // TODO: expected error: invalid in fragment stage + asdouble(inF0, inF1); // expected error: only integer inputs + CheckAccessFullyMapped(3.0); // expected error: only valid on integers + countbits(inF0); // expected error: only integer inputs + cross(inF0, inF1); // expected error: only on float3 inputs + D3DCOLORtoUBYTE4(inF0); // expected error: only on float4 inputs + determinant(inF0); // expected error: only valid on mats + // DeviceMemoryBarrierWithGroupSync(); // TODO: expected error: only valid in compute stage + f16tof32(inF0); // expected error: only integer inputs + firstbithigh(inF0); // expected error: only integer inputs + firstbitlow(inF0); // expected error: only integer inputs + // fma(inF0, inF1, inF2); // TODO: this might auto-promote: need to check against FXC + // InterlockedAdd(inI0, inI0, 3); // expected error: last parameter is out TODO: accepted even though marked as out in proto generator + // InterlockedAnd(inI0, inI0, 3); // expected error: last parameter is out TODO: accepted even though marked as out i // InterlockedMax(inI0, inI0, 3); // expected error: last parameter is out TODO: accepted even though marked as out in proto generator + // InterlockedMin(inI0, inI0, 3); // expected error: last parameter is out TODO: accepted even though marked as out in proto generator + // InterlockedOor(inI0, inI0, 3); // expected error: last parameter is out TODO: accepted even though marked as out in proto generator + // InterlockedXor(inI0, inI0, 3); // expected error: last parameter is out TODO: accepted even though marked as out in proto generator + // GroupMemoryBarrier(); // TODO: expected error: invalid in fragment stage + // GroupMemoryBarrierWithGroupSync(); // TODO: expected error: invalid in fragment stage + length(inF0); // expected error: invalid on scalars + msad4(inF0, float2(0), float4(0)); // expected error: only integer inputs + normalize(inF0); // expected error: invalid on scalars + reflect(inF0, inF1); // expected error: invalid on scalars + refract(inF0, inF1, inF2); // expected error: invalid on scalars + refract(float2(0), float2(0), float2(0)); // expected error: last parameter only scalar + reversebits(inF0); // expected error: only integer inputs + transpose(inF0); // expected error: only valid on mats + + return 0.0; +} + +float1 PixelShaderFunction1(float1 inF0, float1 inF1, float1 inF2, int1 inI0) +{ + // TODO: ... add when float1 prototypes are generated + + GetRenderTargetSamplePosition(inF0); // expected error: only integer inputs + + return 0.0; +} + +float2 PixelShaderFunction2(float2 inF0, float2 inF1, float2 inF2, int2 inI0) +{ + asdouble(inF0, inF1); // expected error: only integer inputs + CheckAccessFullyMapped(inF0); // expected error: only valid on scalars + countbits(inF0); // expected error: only integer inputs + cross(inF0, inF1); // expected error: only on float3 inputs + D3DCOLORtoUBYTE4(inF0); // expected error: only on float4 inputs + determinant(inF0); // expected error: only valid on mats + f16tof32(inF0); // expected error: only integer inputs + firstbithigh(inF0); // expected error: only integer inputs + firstbitlow(inF0); // expected error: only integer inputs + // fma(inF0, inF1, inF2); // TODO: this might auto-promote: need to check against FXC + reversebits(inF0); // expected error: only integer inputs + transpose(inF0); // expected error: only valid on mats + + return float2(1,2); +} + +float3 PixelShaderFunction3(float3 inF0, float3 inF1, float3 inF2, int3 inI0) +{ + CheckAccessFullyMapped(inF0); // expected error: only valid on scalars + countbits(inF0); // expected error: only integer inputs + D3DCOLORtoUBYTE4(inF0); // expected error: only on float4 inputs + determinant(inF0); // expected error: only valid on mats + f16tof32(inF0); // expected error: only integer inputs + firstbithigh(inF0); // expected error: only integer inputs + firstbitlow(inF0); // expected error: only integer inputs + // fma(inF0, inF1, inF2); // TODO: this might auto-promote: need to check against FXC + reversebits(inF0); // expected error: only integer inputs + transpose(inF0); // expected error: only valid on mats + + + return float3(1,2,3); +} + +float4 PixelShaderFunction(float4 inF0, float4 inF1, float4 inF2, int4 inI0) +{ + CheckAccessFullyMapped(inF0); // expected error: only valid on scalars + countbits(inF0); // expected error: only integer inputs + cross(inF0, inF1); // expected error: only on float3 inputs + determinant(inF0); // expected error: only valid on mats + f16tof32(inF0); // expected error: only integer inputs + firstbithigh(inF0); // expected error: only integer inputs + firstbitlow(inF0); // expected error: only integer inputs + // fma(inF0, inF1, inF2); // TODO: this might auto-promote: need to check against FXC + reversebits(inF0); // expected error: only integer inputs + transpose(inF0); // expected error: only valid on mats + + return float4(1,2,3,4); +} + +// TODO: FXC doesn't accept this with (), but glslang doesn't accept it without. +#define MATFNS() \ + countbits(inF0); \ + D3DCOLORtoUBYTE4(inF0); \ + cross(inF0, inF1); \ + f16tof32(inF0); \ + firstbithigh(inF0); \ + firstbitlow(inF0); \ + reversebits(inF0); \ + length(inF0); \ + noise(inF0); \ + normalize(inF0); \ + reflect(inF0, inF1); \ + refract(inF0, inF1, 1.0); \ + reversebits(inF0); \ + + +// TODO: turn on non-square matrix tests when protos are available. + +float2x2 PixelShaderFunction2x2(float2x2 inF0, float2x2 inF1, float2x2 inF2) +{ + // TODO: FXC doesn't accept this with (), but glslang doesn't accept it without. + MATFNS() + + return float2x2(2,2,2,2); +} + +float3x3 PixelShaderFunction3x3(float3x3 inF0, float3x3 inF1, float3x3 inF2) +{ + // TODO: FXC doesn't accept this with (), but glslang doesn't accept it without. + MATFNS() + + return float3x3(3,3,3,3,3,3,3,3,3); +} + +float4x4 PixelShaderFunction4x4(float4x4 inF0, float4x4 inF1, float4x4 inF2) +{ + // TODO: FXC doesn't accept this with (), but glslang doesn't accept it without. + MATFNS() + + return float4x4(4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.negative.vert b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.negative.vert new file mode 100644 index 0000000..6224b25 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.negative.vert @@ -0,0 +1,247 @@ +static uint gs_ua; +static uint gs_ub; +static uint gs_uc; +static uint2 gs_ua2; +static uint2 gs_ub2; +static uint2 gs_uc2; +static uint3 gs_ua3; +static uint3 gs_ub3; +static uint3 gs_uc3; +static uint4 gs_ua4; +static uint4 gs_ub4; +static uint4 gs_uc4; + +float VertexShaderFunctionS(float inF0, float inF1, float inF2, int inI0) +{ + uint out_u1; + + // AllMemoryBarrier(); // expected error: only valid in compute stage + // AllMemoryBarrierWithGroupSync(); // expected error: only valid in compute stage + // asdouble(inF0, inF1); // expected error: only integer inputs + // CheckAccessFullyMapped(3.0); // expected error: only valid on integers + // CheckAccessFullyMapped(3); // expected error: only valid in pixel & compute stages + // clip(inF0); // expected error: only valid in pixel stage + // countbits(inF0); // expected error: only integer inputs + // cross(inF0, inF1); // expected error: only on float3 inputs + // D3DCOLORtoUBYTE4(inF0); // expected error: only on float4 inputs + // DeviceMemoryBarrier(); // expected error: only valid in pixel & compute stages + // DeviceMemoryBarrierWithGroupSync(); // expected error: only valid in compute stage + // ddx(inF0); // expected error: only valid in pixel stage + // ddx_coarse(inF0); // expected error: only valid in pixel stage + // ddx_fine(inF0); // expected error: only valid in pixel stage + // ddy(inF0); // expected error: only valid in pixel stage + // ddy_coarse(inF0); // expected error: only valid in pixel stage + // ddy_fine(inF0); // expected error: only valid in pixel stage + // determinant(inF0); // expected error: only valid on mats + // EvaluateAttributeAtCentroid(inF0); // expected error: only interpolant + // EvaluateAttributeAtSample(inF0, 2); // expected error: only interpolant + // EvaluateAttributeSnapped(inF0, int2(2)); // expected error: only interpolant + // f16tof32(inF0); // expected error: only integer inputs + // firstbithigh(inF0); // expected error: only integer inputs + // firstbitlow(inF0); // expected error: only integer inputs + // fma(inF0, inF1, inF2); // TODO: this might auto-promote: need to check against FXC + // fwidth(inF0); // expected error: only valid in pixel stage + // InterlockedAdd(gs_ua, gs_ub); // expected error: only valid in pixel stage + // InterlockedAdd(gs_ua, gs_ub, out_u1); // expected error: only valid in pixel stage + // InterlockedAnd(gs_ua, gs_ub); // expected error: only valid in pixel stage + // InterlockedAnd(gs_ua, gs_ub, out_u1); // expected error: only valid in pixel stage + // InterlockedCompareExchange(gs_ua, gs_ub, gs_uc, out_u1); // expected error: only valid in pixel stage + // InterlockedExchange(gs_ua, gs_ub, out_u1);// expected error: only valid in pixel stage + // InterlockedMax(gs_ua, gs_ub); // expected error: only valid in pixel stage + // InterlockedMax(gs_ua, gs_ub, out_u1); // expected error: only valid in pixel stage + // InterlockedMin(gs_ua, gs_ub); // expected error: only valid in pixel stage + // InterlockedMin(gs_ua, gs_ub, out_u1); // expected error: only valid in pixel stage + // InterlockedOr(gs_ua, gs_ub); // expected error: only valid in pixel stage + // InterlockedOr(gs_ua, gs_ub, out_u1); // expected error: only valid in pixel stage + // InterlockedXor(gs_ua, gs_ub); // expected error: only valid in pixel stage + // InterlockedXor(gs_ua, gs_ub, out_u1); // expected error: only valid in pixel stage + // GroupMemoryBarrier(); // expected error: only valid in compute stage + // GroupMemoryBarrierWithGroupSync(); // expected error: only valid in compute stage + // length(inF0); // expect error: invalid on scalars + // msad4(inF0, float2(0), float4(0)); // expected error: only integer inputs + // normalize(inF0); // expect error: invalid on scalars + // reflect(inF0, inF1); // expect error: invalid on scalars + // refract(inF0, inF1, inF2); // expect error: invalid on scalars + // refract(float2(0), float2(0), float2(0)); // expected error: last parameter only scalar + // reversebits(inF0); // expected error: only integer inputs + // transpose(inF0); // expect error: only valid on mats + + // TODO: texture intrinsics, when we can declare samplers. + + return 0.0; +} + +float1 VertexShaderFunction1(float1 inF0, float1 inF1, float1 inF2, int1 inI0) +{ + // TODO: ... add when float1 prototypes are generated + + // GetRenderTargetSamplePosition(inF0); // expected error: only integer inputs + + return 0.0; +} + +float2 VertexShaderFunction2(float2 inF0, float2 inF1, float2 inF2, int2 inI0) +{ + uint2 out_u2; + + // asdouble(inF0, inF1); // expected error: only integer inputs + // CheckAccessFullyMapped(inF0); // expect error: only valid on scalars + // countbits(inF0); // expected error: only integer inputs + // cross(inF0, inF1); // expected error: only on float3 inputs + // D3DCOLORtoUBYTE4(inF0); // expected error: only on float4 inputs + // ddx(inF0); // only valid in pixel stage + // ddx_coarse(inF0); // only valid in pixel stage + // ddx_fine(inF0); // only valid in pixel stage + // ddy(inF0); // only valid in pixel stage + // ddy_coarse(inF0); // only valid in pixel stage + // ddy_fine(inF0); // only valid in pixel stage + // determinant(inF0); // expect error: only valid on mats + // EvaluateAttributeAtCentroid(inF0); // expected error: only interpolant + // EvaluateAttributeAtSample(inF0, 2); // expected error: only interpolant + // EvaluateAttributeSnapped(inF0, int2(2)); // expected error: only interpolant + // f16tof32(inF0); // expected error: only integer inputs + // firstbithigh(inF0); // expected error: only integer inputs + // firstbitlow(inF0); // expected error: only integer inputs + // fma(inF0, inF1, inF2); // TODO: this might auto-promote: need to check against FXC + // fwidth(inF0); // expected error: only valid in pixel stage + // InterlockedAdd(gs_ua2, gs_ub2); // expected error: only valid in pixel stage + // InterlockedAdd(gs_ua2, gs_ub2, out_u2); // expected error: only valid in pixel stage + // InterlockedAnd(gs_ua2, gs_ub2); // expected error: only valid in pixel stage + // InterlockedAnd(gs_ua2, gs_ub2, out_u2); // expected error: only valid in pixel stage + // InterlockedCompareExchange(gs_ua2, gs_ub2, gs_uc2, out_u2); // expected error: only valid in pixel stage + // InterlockedExchange(gs_ua2, gs_ub2, out_u2); // expected error: only valid in pixel stage + // InterlockedMax(gs_ua2, gs_ub2); // expected error: only valid in pixel stage + // InterlockedMax(gs_ua2, gs_ub2, out_u2); // expected error: only valid in pixel stage + // InterlockedMin(gs_ua2, gs_ub2); // expected error: only valid in pixel stage + // InterlockedMin(gs_ua2, gs_ub2, out_u2); // expected error: only valid in pixel stage + // InterlockedOr(gs_ua2, gs_ub2); // expected error: only valid in pixel stage + // InterlockedOr(gs_ua2, gs_ub2, out_u2); // expected error: only valid in pixel stage + // InterlockedXor(gs_ua2, gs_ub2); // expected error: only valid in pixel stage + // InterlockedXor(gs_ua2, gs_ub2, out_u2); // expected error: only valid in pixel stage + // noise(inF0); // expected error: only valid in pixel stage + // reversebits(inF0); // expected error: only integer inputs + // transpose(inF0); // expect error: only valid on mats + + // TODO: texture intrinsics, when we can declare samplers. + + return float2(1,2); +} + +float3 VertexShaderFunction3(float3 inF0, float3 inF1, float3 inF2, int3 inI0) +{ + uint3 out_u3; + + // CheckAccessFullyMapped(inF0); // expect error: only valid on scalars + // countbits(inF0); // expected error: only integer inputs + // ddx(inF0); // only valid in pixel stage + // ddx_coarse(inF0); // only valid in pixel stage + // ddx_fine(inF0); // only valid in pixel stage + // ddy(inF0); // only valid in pixel stage + // ddy_coarse(inF0); // only valid in pixel stage + // ddy_fine(inF0); // only valid in pixel stage + // D3DCOLORtoUBYTE4(inF0); // expected error: only on float4 inputs + // determinant(inF0); // expect error: only valid on mats + // EvaluateAttributeAtCentroid(inF0); // expected error: only interpolant + // EvaluateAttributeAtSample(inF0, 2); // expected error: only interpolant + // EvaluateAttributeSnapped(inF0, int2(2)); // expected error: only interpolant + // f16tof32(inF0); // expected error: only integer inputs + // firstbithigh(inF0); // expected error: only integer inputs + // firstbitlow(inF0); // expected error: only integer inputs + // fma(inF0, inF1, inF2); // TODO: this might auto-promote: need to check against FXC + // fwidth(inF0); // expected error: only valid in pixel stage + // InterlockedAdd(gs_ua3, gs_ub3); // expected error: only valid in pixel stage + // InterlockedAdd(gs_ua3, gs_ub3, out_u3); // expected error: only valid in pixel stage + // InterlockedAnd(gs_ua3, gs_ub3); // expected error: only valid in pixel stage + // InterlockedAnd(gs_ua3, gs_ub3, out_u3); // expected error: only valid in pixel stage + // InterlockedCompareExchange(gs_ua3, gs_ub3, gs_uc3, out_u3); // expected error: only valid in pixel stage + // InterlockedExchange(gs_ua3, gs_ub3, out_u3); // expected error: only valid in pixel stage + // InterlockedMax(gs_ua3, gs_ub3); // expected error: only valid in pixel stage + // InterlockedMax(gs_ua3, gs_ub3, out_u3); // expected error: only valid in pixel stage + // InterlockedMin(gs_ua3, gs_ub3); // expected error: only valid in pixel stage + // InterlockedMin(gs_ua3, gs_ub3, out_u3); // expected error: only valid in pixel stage + // InterlockedOr(gs_ua3, gs_ub3); // expected error: only valid in pixel stage + // InterlockedOr(gs_ua3, gs_ub3, out_u3); // expected error: only valid in pixel stage + // InterlockedXor(gs_ua3, gs_ub3); // expected error: only valid in pixel stage + // InterlockedXor(gs_ua3, gs_ub3, out_u3); // expected error: only valid in pixel stage + // noise(inF0); // expected error: only valid in pixel stage + // reversebits(inF0); // expected error: only integer inputs + // transpose(inF0); // expect error: only valid on mats + + // TODO: texture intrinsics, when we can declare samplers. + + return float3(1,2,3); +} + +float4 VertexShaderFunction(float4 inF0, float4 inF1, float4 inF2, int4 inI0) +{ + uint4 out_u4; + + // CheckAccessFullyMapped(inF0); // expect error: only valid on scalars + // countbits(inF0); // expected error: only integer inputs + // cross(inF0, inF1); // expected error: only on float3 inputs + // determinant(inF0); // expect error: only valid on mats + // ddx(inF0); // only valid in pixel stage + // ddx_coarse(inF0); // only valid in pixel stage + // ddx_fine(inF0); // only valid in pixel stage + // ddy(inF0); // only valid in pixel stage + // ddy_coarse(inF0); // only valid in pixel stage + // ddy_fine(inF0); // only valid in pixel stage + // EvaluateAttributeAtCentroid(inF0); // expected error: only interpolant + // EvaluateAttributeAtSample(inF0, 2); // expected error: only interpolant + // EvaluateAttributeSnapped(inF0, int2(2)); // expected error: only interpolant + // f16tof32(inF0); // expected error: only integer inputs + // firstbithigh(inF0); // expected error: only integer inputs + // firstbitlow(inF0); // expected error: only integer inputs + // fma(inF0, inF1, inF2); // TODO: this might auto-promote: need to check against FXC + // fwidth(inF0); // expected error: only valid in pixel stage + // InterlockedAdd(gs_ua4, gs_ub4); // expected error: only valid in pixel stage + // InterlockedAdd(gs_ua4, gs_ub4, out_u4); // expected error: only valid in pixel stage + // InterlockedAnd(gs_ua4, gs_ub4); // expected error: only valid in pixel stage + // InterlockedAnd(gs_ua4, gs_ub4, out_u4); // expected error: only valid in pixel stage + // InterlockedCompareExchange(gs_ua4, gs_ub4, gs_uc4, out_u4); // expected error: only valid in pixel stage + // InterlockedExchange(gs_ua4, gs_ub4, out_u4); // expected error: only valid in pixel stage + // InterlockedMax(gs_ua4, gs_ub4); // expected error: only valid in pixel stage + // InterlockedMax(gs_ua4, gs_ub4, out_u4); // expected error: only valid in pixel stage + // InterlockedMin(gs_ua4, gs_ub4); // expected error: only valid in pixel stage + // InterlockedMin(gs_ua4, gs_ub4, out_u4); // expected error: only valid in pixel stage + // InterlockedOr(gs_ua4, gs_ub4); // expected error: only valid in pixel stage + // InterlockedOr(gs_ua4, gs_ub4, out_u4); // expected error: only valid in pixel stage + // InterlockedXor(gs_ua4, gs_ub4); // expected error: only valid in pixel stage + // InterlockedXor(gs_ua4, gs_ub4, out_u4); // expected error: only valid in pixel stage + // noise(inF0); // expected error: only valid in pixel stage + // reversebits(inF0); // expected error: only integer inputs + // transpose(inF0); // expect error: only valid on mats + + // TODO: texture intrinsics, when we can declare samplers. + + return float4(1,2,3,4); +} + +// TODO: FXC doesn't accept this with (), but glslang doesn't accept it without. +#define MATFNS() + +// TODO: turn on non-square matrix tests when protos are available. + +float2x2 VertexShaderFunction2x2(float2x2 inF0, float2x2 inF1, float2x2 inF2) +{ + // TODO: FXC doesn't accept this with (), but glslang doesn't accept it without. + MATFNS() + + return float2x2(2,2,2,2); +} + +float3x3 VertexShaderFunction3x3(float3x3 inF0, float3x3 inF1, float3x3 inF2) +{ + // TODO: FXC doesn't accept this with (), but glslang doesn't accept it without. + MATFNS() + + return float3x3(3,3,3,3,3,3,3,3,3); +} + +float4x4 VertexShaderFunction4x4(float4x4 inF0, float4x4 inF1, float4x4 inF2) +{ + // TODO: FXC doesn't accept this with (), but glslang doesn't accept it without. + MATFNS() + + return float4x4(4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.promote.down.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.promote.down.frag new file mode 100644 index 0000000..5f4882b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.promote.down.frag @@ -0,0 +1,22 @@ + +struct PS_OUTPUT { float4 color : SV_Target0; }; + +int i; +uint u; +float f; +bool b; + +int2 i2; +uint2 u2; +float2 f2; +bool2 b2; + +PS_OUTPUT main() +{ + uint r00 = countbits(f); + uint2 r01 = reversebits(f2); + + PS_OUTPUT ps_output; + ps_output.color = float4(0,0,0,0); + return ps_output; +}; diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.promote.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.promote.frag new file mode 100644 index 0000000..89d3e68 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.promote.frag @@ -0,0 +1,79 @@ + +struct PS_OUTPUT { float4 color : SV_Target0; }; + +int i; +uint u; +float f; +bool b; + +int2 i2; +uint2 u2; +float2 f2; +bool2 b2; + +Buffer g_tTexbfs; +Texture1D g_tTex1df4; +uint upos; +float fpos; + +PS_OUTPUT main() +{ + // Same shapes: + + float r00 = max(b, f); + uint r01 = max(b, u); + int r02 = max(b, i); + float r03 = max(i, f); + float r04 = max(u, f); + + float2 r10 = max(b2, f2); + uint2 r11 = max(b2, u2); + int2 r12 = max(b2, i2); + float2 r13 = max(i2, f2); + float2 r14 = max(u2, f2); + + float2 r20 = clamp(i2, u2, f2); // 3 args, converts all to best type. + uint2 r21 = clamp(b2, u2, b2); + float2 r22 = clamp(b2, f2, b2); + + // Mixed shapes: + float2 r30 = max(b, f2); + uint2 r31 = max(b, u2); + int2 r32 = max(b, i2); + float2 r33 = max(i, f2); + float2 r34 = max(u, f2); + + float2 r40 = clamp(i, u2, f2); // 3 args, converts all to best type. + uint2 r41 = clamp(b2, u, b2); + float2 r42 = clamp(b2, f, b); + int2 r43 = clamp(i, i2, u2); + + float r50 = g_tTexbfs.Load(upos); + float r51 = g_tTexbfs.Load(fpos); + + int MipLevel; + + uint WidthU; + uint HeightU; + uint ElementsU; + uint DepthU; + uint NumberOfLevelsU; + uint NumberOfSamplesU; + + int WidthI; + int HeightI; + int ElementsI; + int DepthI; + int NumberOfLevelsI; + int NumberOfSamplesI; + + g_tTex1df4 . GetDimensions(WidthI); + g_tTex1df4 . GetDimensions(6, WidthI, NumberOfLevelsU); + g_tTex1df4 . GetDimensions(6, WidthU, NumberOfLevelsI); + g_tTex1df4 . GetDimensions(6, WidthI, NumberOfLevelsI); + + // max(i2, f2); + PS_OUTPUT ps_output; + ps_output.color = r00; + return ps_output; +}; diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.promote.outputs.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.promote.outputs.frag new file mode 100644 index 0000000..42fa3e8 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.promote.outputs.frag @@ -0,0 +1,49 @@ + +struct PS_OUTPUT { float4 color : SV_Target0; }; + +int i; +uint u; +float f; +bool b; + +int2 i2; +uint2 u2; +float2 f2; +bool2 b2; + +Buffer g_tTexbfs; +Texture1D g_tTex1df4; +uint upos; +float fpos; + +PS_OUTPUT main() +{ + int MipLevel; + + uint WidthU; + uint HeightU; + uint ElementsU; + uint DepthU; + uint NumberOfLevelsU; + uint NumberOfSamplesU; + + int WidthI; + int HeightI; + int ElementsI; + int DepthI; + int NumberOfLevelsI; + int NumberOfSamplesI; + + saturate(fpos); + + // Test output promotions + g_tTex1df4 . GetDimensions(WidthI); + g_tTex1df4 . GetDimensions(6, WidthI, NumberOfLevelsU); + g_tTex1df4 . GetDimensions(6, WidthU, NumberOfLevelsI); + g_tTex1df4 . GetDimensions(6, WidthI, NumberOfLevelsI); + + // max(i2, f2); + PS_OUTPUT ps_output; + ps_output.color = 0; + return ps_output; +}; diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.vert b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.vert new file mode 100644 index 0000000..de9476c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.vert @@ -0,0 +1,419 @@ +float VertexShaderFunctionS(float inF0, float inF1, float inF2, uint inU0, uint inU1) +{ + all(inF0); + abs(inF0); + acos(inF0); + any(inF0); + asin(inF0); + asint(inF0); + asuint(inF0); + asfloat(inU0); + // asdouble(inU0, inU1); // TODO: enable when HLSL parser used for intrinsics + atan(inF0); + atan2(inF0, inF1); + ceil(inF0); + clamp(inF0, inF1, inF2); + cos(inF0); + cosh(inF0); + countbits(7); + degrees(inF0); + // EvaluateAttributeAtCentroid(inF0); + // EvaluateAttributeAtSample(inF0, 0); + // TODO: EvaluateAttributeSnapped(inF0, int2(1,2)); + exp(inF0); + exp2(inF0); + firstbithigh(7); + firstbitlow(7); + floor(inF0); + // TODO: fma(inD0, inD1, inD2); + fmod(inF0, inF1); + frac(inF0); + frexp(inF0, inF1); + isinf(inF0); + isnan(inF0); + ldexp(inF0, inF1); + lerp(inF0, inF1, inF2); + log(inF0); + log10(inF0); + log2(inF0); + max(inF0, inF1); + min(inF0, inF1); + // TODO: mul(inF0, inF1); + pow(inF0, inF1); + radians(inF0); + reversebits(2); + round(inF0); + rsqrt(inF0); + saturate(inF0); + sign(inF0); + sin(inF0); + sincos(inF0, inF1, inF2); + sinh(inF0); + smoothstep(inF0, inF1, inF2); + sqrt(inF0); + step(inF0, inF1); + tan(inF0); + tanh(inF0); + // TODO: sampler intrinsics, when we can declare the types. + trunc(inF0); + + return 0.0; +} + +float1 VertexShaderFunction1(float1 inF0, float1 inF1, float1 inF2) +{ + // TODO: ... add when float1 prototypes are generated + return 0.0; +} + +float2 VertexShaderFunction2(float2 inF0, float2 inF1, float2 inF2, uint2 inU0, uint2 inU1) +{ + all(inF0); + abs(inF0); + acos(inF0); + any(inF0); + asin(inF0); + asint(inF0); + asuint(inF0); + asfloat(inU0); + // asdouble(inU0, inU1); // TODO: enable when HLSL parser used for intrinsics + atan(inF0); + atan2(inF0, inF1); + ceil(inF0); + clamp(inF0, inF1, inF2); + cos(inF0); + cosh(inF0); + countbits(int2(7,3)); + degrees(inF0); + distance(inF0, inF1); + dot(inF0, inF1); + // EvaluateAttributeAtCentroid(inF0); + // EvaluateAttributeAtSample(inF0, 0); + // TODO: EvaluateAttributeSnapped(inF0, int2(1,2)); + exp(inF0); + exp2(inF0); + faceforward(inF0, inF1, inF2); + firstbithigh(7); + firstbitlow(7); + floor(inF0); + // TODO: fma(inD0, inD1, inD2); + fmod(inF0, inF1); + frac(inF0); + frexp(inF0, inF1); + isinf(inF0); + isnan(inF0); + ldexp(inF0, inF1); + lerp(inF0, inF1, inF2); + length(inF0); + log(inF0); + log10(inF0); + log2(inF0); + max(inF0, inF1); + min(inF0, inF1); + // TODO: mul(inF0, inF1); + normalize(inF0); + pow(inF0, inF1); + radians(inF0); + reflect(inF0, inF1); + refract(inF0, inF1, 2.0); + reversebits(int2(1,2)); + round(inF0); + rsqrt(inF0); + saturate(inF0); + sign(inF0); + sin(inF0); + sincos(inF0, inF1, inF2); + sinh(inF0); + smoothstep(inF0, inF1, inF2); + sqrt(inF0); + step(inF0, inF1); + tan(inF0); + tanh(inF0); + // TODO: sampler intrinsics, when we can declare the types. + trunc(inF0); + + // TODO: ... add when float1 prototypes are generated + return float2(1,2); +} + +float3 VertexShaderFunction3(float3 inF0, float3 inF1, float3 inF2, uint3 inU0, uint3 inU1) +{ + all(inF0); + abs(inF0); + acos(inF0); + any(inF0); + asin(inF0); + asint(inF0); + asuint(inF0); + asfloat(inU0); + // asdouble(inU0, inU1); // TODO: enable when HLSL parser used for intrinsics + atan(inF0); + atan2(inF0, inF1); + ceil(inF0); + clamp(inF0, inF1, inF2); + cos(inF0); + cosh(inF0); + countbits(int3(7,3,5)); + cross(inF0, inF1); + degrees(inF0); + distance(inF0, inF1); + dot(inF0, inF1); + // EvaluateAttributeAtCentroid(inF0); + // EvaluateAttributeAtSample(inF0, 0); + // TODO: EvaluateAttributeSnapped(inF0, int2(1,2)); + exp(inF0); + exp2(inF0); + faceforward(inF0, inF1, inF2); + firstbithigh(7); + firstbitlow(7); + floor(inF0); + // TODO: fma(inD0, inD1, inD2); + fmod(inF0, inF1); + frac(inF0); + frexp(inF0, inF1); + isinf(inF0); + isnan(inF0); + ldexp(inF0, inF1); + lerp(inF0, inF1, inF2); + length(inF0); + log(inF0); + log10(inF0); + log2(inF0); + max(inF0, inF1); + min(inF0, inF1); + // TODO: mul(inF0, inF1); + normalize(inF0); + pow(inF0, inF1); + radians(inF0); + reflect(inF0, inF1); + refract(inF0, inF1, 2.0); + reversebits(int3(1,2,3)); + round(inF0); + rsqrt(inF0); + saturate(inF0); + sign(inF0); + sin(inF0); + sincos(inF0, inF1, inF2); + sinh(inF0); + smoothstep(inF0, inF1, inF2); + sqrt(inF0); + step(inF0, inF1); + tan(inF0); + tanh(inF0); + // TODO: sampler intrinsics, when we can declare the types. + trunc(inF0); + + // TODO: ... add when float1 prototypes are generated + return float3(1,2,3); +} + +float4 VertexShaderFunction4(float4 inF0, float4 inF1, float4 inF2, uint4 inU0, uint4 inU1) +{ + all(inF0); + abs(inF0); + acos(inF0); + any(inF0); + asin(inF0); + asint(inF0); + asuint(inF0); + asfloat(inU0); + // asdouble(inU0, inU1); // TODO: enable when HLSL parser used for intrinsics + atan(inF0); + atan2(inF0, inF1); + ceil(inF0); + clamp(inF0, inF1, inF2); + cos(inF0); + cosh(inF0); + countbits(int4(7,3,5,2)); + degrees(inF0); + distance(inF0, inF1); + dot(inF0, inF1); + dst(inF0, inF1); + // EvaluateAttributeAtCentroid(inF0); + // EvaluateAttributeAtSample(inF0, 0); + // TODO: EvaluateAttributeSnapped(inF0, int2(1,2)); + exp(inF0); + exp2(inF0); + faceforward(inF0, inF1, inF2); + firstbithigh(7); + firstbitlow(7); + floor(inF0); + // TODO: fma(inD0, inD1, inD2); + fmod(inF0, inF1); + frac(inF0); + frexp(inF0, inF1); + isinf(inF0); + isnan(inF0); + ldexp(inF0, inF1); + lerp(inF0, inF1, inF2); + length(inF0); + log(inF0); + log10(inF0); + log2(inF0); + max(inF0, inF1); + min(inF0, inF1); + // TODO: mul(inF0, inF1); + normalize(inF0); + pow(inF0, inF1); + radians(inF0); + reflect(inF0, inF1); + refract(inF0, inF1, 2.0); + reversebits(int4(1,2,3,4)); + round(inF0); + rsqrt(inF0); + saturate(inF0); + sign(inF0); + sin(inF0); + sincos(inF0, inF1, inF2); + sinh(inF0); + smoothstep(inF0, inF1, inF2); + sqrt(inF0); + step(inF0, inF1); + tan(inF0); + tanh(inF0); + // TODO: sampler intrinsics, when we can declare the types. + trunc(inF0); + + // TODO: ... add when float1 prototypes are generated + return float4(1,2,3,4); +} + +// TODO: for mats: +// asfloat(inU0); \ +// asint(inF0); \ +// asuint(inF0); \ + +// TODO: FXC doesn't accept this with (), but glslang doesn't accept it without. +#define MATFNS() \ + all(inF0); \ + abs(inF0); \ + acos(inF0); \ + any(inF0); \ + asin(inF0); \ + atan(inF0); \ + atan2(inF0, inF1); \ + ceil(inF0); \ + clamp(inF0, inF1, inF2); \ + cos(inF0); \ + cosh(inF0); \ + degrees(inF0); \ + determinant(inF0); \ + exp(inF0); \ + exp2(inF0); \ + firstbithigh(7); \ + firstbitlow(7); \ + floor(inF0); \ + fmod(inF0, inF1); \ + frac(inF0); \ + frexp(inF0, inF1); \ + ldexp(inF0, inF1); \ + lerp(inF0, inF1, inF2); \ + log(inF0); \ + log10(inF0); \ + log2(inF0); \ + max(inF0, inF1); \ + min(inF0, inF1); \ + pow(inF0, inF1); \ + radians(inF0); \ + round(inF0); \ + rsqrt(inF0); \ + saturate(inF0); \ + sign(inF0); \ + sin(inF0); \ + sincos(inF0, inF1, inF2); \ + sinh(inF0); \ + smoothstep(inF0, inF1, inF2); \ + sqrt(inF0); \ + step(inF0, inF1); \ + tan(inF0); \ + tanh(inF0); \ + transpose(inF0); \ + trunc(inF0); + +// TODO: turn on non-square matrix tests when protos are available. + +float2x2 VertexShaderFunction2x2(float2x2 inF0, float2x2 inF1, float2x2 inF2) +{ + // TODO: FXC doesn't accept this with (), but glslang doesn't accept it without. + MATFNS(); + + // TODO: ... add when float1 prototypes are generated + return float2x2(2,2,2,2); +} + +float3x3 VertexShaderFunction3x3(float3x3 inF0, float3x3 inF1, float3x3 inF2) +{ + // TODO: FXC doesn't accept this with (), but glslang doesn't accept it without. + MATFNS(); + + // TODO: ... add when float1 prototypes are generated + return float3x3(3,3,3,3,3,3,3,3,3); +} + +float4x4 VertexShaderFunction4x4(float4x4 inF0, float4x4 inF1, float4x4 inF2) +{ + // TODO: FXC doesn't accept this with (), but glslang doesn't accept it without. + MATFNS(); + + // TODO: ... add when float1 prototypes are generated + return float4x4(4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4); +} + +#define TESTGENMUL(ST, VT, MT) \ + ST r0 = mul(inF0, inF1); \ + VT r1 = mul(inFV0, inF0); \ + VT r2 = mul(inF0, inFV0); \ + ST r3 = mul(inFV0, inFV1); \ + VT r4 = mul(inFM0, inFV0); \ + VT r5 = mul(inFV0, inFM0); \ + MT r6 = mul(inFM0, inF0); \ + MT r7 = mul(inF0, inFM0); \ + MT r8 = mul(inFM0, inFM1); + + +void TestGenMul2(float inF0, float inF1, + float2 inFV0, float2 inFV1, + float2x2 inFM0, float2x2 inFM1) +{ + TESTGENMUL(float, float2, float2x2); +} + +void TestGenMul3(float inF0, float inF1, + float3 inFV0, float3 inFV1, + float3x3 inFM0, float3x3 inFM1) +{ + TESTGENMUL(float, float3, float3x3); +} + +void TestGenMul4(float inF0, float inF1, + float4 inFV0, float4 inFV1, + float4x4 inFM0, float4x4 inFM1) +{ + TESTGENMUL(float, float4, float4x4); +} + +// Test some non-square mats +void TestGenMulNxM(float inF0, float inF1, + float2 inFV2, float3 inFV3, + float2x3 inFM2x3, float3x2 inFM3x2, + float3x3 inFM3x3, float3x4 inFM3x4, + float2x4 inFM2x4) +{ + float r00 = mul(inF0, inF1); // S=S*S + float2 r01 = mul(inFV2, inF0); // V=V*S + float3 r02 = mul(inFV3, inF0); // V=V*S + float2 r03 = mul(inF0, inFV2); // V=S*V + float3 r04 = mul(inF0, inFV3); // V=S*V + float r05 = mul(inFV2, inFV2); // S=V*V + float r06 = mul(inFV3, inFV3); // S=V*V + float3 r07 = mul(inFV2, inFM2x3); // V=V*M (return V dim is Mcols) + float2 r08 = mul(inFV3, inFM3x2); // V=V*M (return V dim is Mcols) + float2 r09 = mul(inFM2x3, inFV3); // V=M*V (return V dim is Mrows) + float3 r10 = mul(inFM3x2, inFV2); // V=M*V (return V dim is Mrows) + float2x3 r11 = mul(inFM2x3, inF0); + float3x2 r12 = mul(inFM3x2, inF0); + float2x2 r13 = mul(inFM2x3, inFM3x2); + float2x3 r14 = mul(inFM2x3, inFM3x3); + float2x4 r15 = mul(inFM2x3, inFM3x4); + float3x4 r16 = mul(inFM3x2, inFM2x4); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.layout.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.layout.frag new file mode 100644 index 0000000..4c2f7ce --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.layout.frag @@ -0,0 +1,18 @@ +layout(set=3,binding=5) tbuffer tbufName { + layout(offset = 16) float4 v1; +}; + +layout(push_constant) tbuffer tbufName2 { + float4 v5; +}; + +layout(constant_id=17) const int specConst = 10; + +tbuffer tbufName2 : layout(set=4,binding=7) { + layout(offset = 16) float4 v1PostLayout; +}; + +float4 PixelShaderFunction(float4 input) : COLOR0 +{ + return input + v1 + v5 + v1PostLayout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.load.2dms.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.load.2dms.dx10.frag new file mode 100644 index 0000000..29974f5 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.load.2dms.dx10.frag @@ -0,0 +1,56 @@ +SamplerState g_sSamp : register(s0); + +Texture2DMS g_tTex2dmsf4; +Texture2DMS g_tTex2dmsi4; +Texture2DMS g_tTex2dmsu4; + +Texture2DMSArray g_tTex2dmsf4a; +Texture2DMSArray g_tTex2dmsi4a; +Texture2DMSArray g_tTex2dmsu4a; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +uniform int c1; +uniform int2 c2; +uniform int3 c3; +uniform int4 c4; + +uniform int o1; +uniform int2 o2; +uniform int3 o3; +uniform int4 o4; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + // 2DMS, no offset + g_tTex2dmsf4.Load(c2, 3); + g_tTex2dmsi4.Load(c2, 3); + g_tTex2dmsu4.Load(c2, 3); + + // 2DMS, offset + g_tTex2dmsf4.Load(c2, 3, o2); + g_tTex2dmsi4.Load(c2, 3, o2); + g_tTex2dmsu4.Load(c2, 3, o2); + + // 2DMSArray, no offset + g_tTex2dmsf4a.Load(c3, 3); + g_tTex2dmsi4a.Load(c3, 3); + g_tTex2dmsu4a.Load(c3, 3); + + // 2DMSArray, offset + g_tTex2dmsf4a.Load(c3, 3, o2); + g_tTex2dmsi4a.Load(c3, 3, o2); + g_tTex2dmsu4a.Load(c3, 3, o2); + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.load.array.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.load.array.dx10.frag new file mode 100644 index 0000000..253de3e --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.load.array.dx10.frag @@ -0,0 +1,71 @@ +SamplerState g_sSamp : register(s0); + +uniform Texture1D g_tTex1df4 : register(t0); +Texture1D g_tTex1di4; +Texture1D g_tTex1du4; + +Texture2D g_tTex2df4; +Texture2D g_tTex2di4; +Texture2D g_tTex2du4; + +Texture3D g_tTex3df4; +Texture3D g_tTex3di4; +Texture3D g_tTex3du4; + +TextureCube g_tTexcdf4; +TextureCube g_tTexcdi4; +TextureCube g_tTexcdu4; + +Texture1DArray g_tTex1df4a; +Texture1DArray g_tTex1di4a; +Texture1DArray g_tTex1du4a; + +Texture2DArray g_tTex2df4a; +Texture2DArray g_tTex2di4a; +Texture2DArray g_tTex2du4a; + +TextureCubeArray g_tTexcdf4a; +TextureCubeArray g_tTexcdi4a; +TextureCubeArray g_tTexcdu4a; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +uniform int c1; +uniform int2 c2; +uniform int3 c3; +uniform int4 c4; + +uniform int o1; +uniform int2 o2; +uniform int3 o3; +uniform int4 o4; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + // 1DArray + g_tTex1df4a.Load(c3); + g_tTex1di4a.Load(c3); + g_tTex1du4a.Load(c3); + + // 2DArray + g_tTex2df4a.Load(c4); + g_tTex2di4a.Load(c4); + g_tTex2du4a.Load(c4); + + // Offset has no Cube or CubeArray forms + + // TODO: + // Load, SampleIndex + // Load, SampleIndex, Offset + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.load.basic.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.load.basic.dx10.frag new file mode 100644 index 0000000..abb594e --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.load.basic.dx10.frag @@ -0,0 +1,76 @@ +SamplerState g_sSamp : register(s0); + +uniform Texture1D g_tTex1df4 : register(t0); +Texture1D g_tTex1di4; +Texture1D g_tTex1du4; + +Texture2D g_tTex2df4; +Texture2D g_tTex2di4; +Texture2D g_tTex2du4; + +Texture3D g_tTex3df4; +Texture3D g_tTex3di4; +Texture3D g_tTex3du4; + +TextureCube g_tTexcdf4; +TextureCube g_tTexcdi4; +TextureCube g_tTexcdu4; + +Texture1DArray g_tTex1df4a; +Texture1DArray g_tTex1di4a; +Texture1DArray g_tTex1du4a; + +Texture2DArray g_tTex2df4a; +Texture2DArray g_tTex2di4a; +Texture2DArray g_tTex2du4a; + +TextureCubeArray g_tTexcdf4a; +TextureCubeArray g_tTexcdi4a; +TextureCubeArray g_tTexcdu4a; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +uniform int c1; +uniform int2 c2; +uniform int3 c3; +uniform int4 c4; + +uniform int o1; +uniform int2 o2; +uniform int3 o3; +uniform int4 o4; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + // 1D + g_tTex1df4.Load(c2); + g_tTex1di4.Load(c2); + g_tTex1du4.Load(c2); + + // 2D + g_tTex2df4.Load(c3); + g_tTex2di4.Load(c3); + g_tTex2du4.Load(c3); + + // 3D + g_tTex3df4.Load(c4); + g_tTex3di4.Load(c4); + g_tTex3du4.Load(c4); + + // Offset has no Cube or CubeArray forms + + // TODO: + // Load, SampleIndex + // Load, SampleIndex, Offset + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.load.basic.dx10.vert b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.load.basic.dx10.vert new file mode 100644 index 0000000..750b984 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.load.basic.dx10.vert @@ -0,0 +1,70 @@ +SamplerState g_sSamp : register(s0); + +uniform Texture1D g_tTex1df4 : register(t0); +Texture1D g_tTex1di4; +Texture1D g_tTex1du4; + +Texture2D g_tTex2df4; +Texture2D g_tTex2di4; +Texture2D g_tTex2du4; + +Texture3D g_tTex3df4; +Texture3D g_tTex3di4; +Texture3D g_tTex3du4; + +TextureCube g_tTexcdf4; +TextureCube g_tTexcdi4; +TextureCube g_tTexcdu4; + +Texture1DArray g_tTex1df4a; +Texture1DArray g_tTex1di4a; +Texture1DArray g_tTex1du4a; + +Texture2DArray g_tTex2df4a; +Texture2DArray g_tTex2di4a; +Texture2DArray g_tTex2du4a; + +TextureCubeArray g_tTexcdf4a; +TextureCubeArray g_tTexcdi4a; +TextureCubeArray g_tTexcdu4a; + +struct VS_OUTPUT +{ + float4 Pos : SV_Position; +}; + +uniform int c1; +uniform int2 c2; +uniform int3 c3; +uniform int4 c4; + +uniform int o1; +uniform int2 o2; +uniform int3 o3; +uniform int4 o4; + +VS_OUTPUT main() +{ + VS_OUTPUT vsout; + + // 1D + g_tTex1df4.Load(c2); + g_tTex1di4.Load(c2); + g_tTex1du4.Load(c2); + + // 2D + g_tTex2df4.Load(c3); + g_tTex2di4.Load(c3); + g_tTex2du4.Load(c3); + + // 3D + g_tTex3df4.Load(c4); + g_tTex3di4.Load(c4); + g_tTex3du4.Load(c4); + + // Offset has no Cube or CubeArray forms + + vsout.Pos = float4(0,0,0,0); + + return vsout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.load.buffer.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.load.buffer.dx10.frag new file mode 100644 index 0000000..60a61df --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.load.buffer.dx10.frag @@ -0,0 +1,38 @@ +uniform Buffer g_tTexbf4_test : register(t0); + +Buffer g_tTexbf4; // default is float4 +Buffer g_tTexbi4; +Buffer g_tTexbu4; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +uniform int c1; +uniform int2 c2; +uniform int3 c3; +uniform int4 c4; + +uniform int o1; +uniform int2 o2; +uniform int3 o3; +uniform int4 o4; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + // Buffer + float4 r00 = g_tTexbf4.Load(c1); + int4 r01 = g_tTexbi4.Load(c1); + uint4 r02 = g_tTexbu4.Load(c1); + + // TODO: other types that can be put in sampler buffers, like float2x2, and float3. + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.load.buffer.float.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.load.buffer.float.dx10.frag new file mode 100644 index 0000000..eeea9a6 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.load.buffer.float.dx10.frag @@ -0,0 +1,38 @@ +uniform Buffer g_tTexbfs_test : register(t0); + +Buffer g_tTexbfs; +Buffer g_tTexbis; +Buffer g_tTexbus; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +uniform int c1; +uniform int2 c2; +uniform int3 c3; +uniform int4 c4; + +uniform int o1; +uniform int2 o2; +uniform int3 o3; +uniform int4 o4; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + // Buffer + float r00 = g_tTexbfs.Load(c1); + int r01 = g_tTexbis.Load(c1); + uint r02 = g_tTexbus.Load(c1); + + // TODO: other types that can be put in sampler buffers, like float2x2, and float3. + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.load.offset.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.load.offset.dx10.frag new file mode 100644 index 0000000..bc946ee --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.load.offset.dx10.frag @@ -0,0 +1,76 @@ +SamplerState g_sSamp : register(s0); + +uniform Texture1D g_tTex1df4 : register(t0); +Texture1D g_tTex1di4; +Texture1D g_tTex1du4; + +Texture2D g_tTex2df4; +Texture2D g_tTex2di4; +Texture2D g_tTex2du4; + +Texture3D g_tTex3df4; +Texture3D g_tTex3di4; +Texture3D g_tTex3du4; + +TextureCube g_tTexcdf4; +TextureCube g_tTexcdi4; +TextureCube g_tTexcdu4; + +Texture1DArray g_tTex1df4a; +Texture1DArray g_tTex1di4a; +Texture1DArray g_tTex1du4a; + +Texture2DArray g_tTex2df4a; +Texture2DArray g_tTex2di4a; +Texture2DArray g_tTex2du4a; + +TextureCubeArray g_tTexcdf4a; +TextureCubeArray g_tTexcdi4a; +TextureCubeArray g_tTexcdu4a; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +uniform int c1; +uniform int2 c2; +uniform int3 c3; +uniform int4 c4; + +uniform int o1; +uniform int2 o2; +uniform int3 o3; +uniform int4 o4; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + // 1D + g_tTex1df4.Load(c2, o1); + g_tTex1di4.Load(c2, o1); + g_tTex1du4.Load(c2, o1); + + // 2D + g_tTex2df4.Load(c3, o2); + g_tTex2di4.Load(c3, o2); + g_tTex2du4.Load(c3, o2); + + // 3D + g_tTex3df4.Load(c4, o3); + g_tTex3di4.Load(c4, o3); + g_tTex3du4.Load(c4, o3); + + // Offset has no Cube or CubeArray forms + + // TODO: + // Load, SampleIndex + // Load, SampleIndex, Offset + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.load.offsetarray.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.load.offsetarray.dx10.frag new file mode 100644 index 0000000..12b6a9e --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.load.offsetarray.dx10.frag @@ -0,0 +1,69 @@ +SamplerState g_sSamp : register(s0); + +uniform Texture1D g_tTex1df4 : register(t0); +Texture1D g_tTex1di4; +Texture1D g_tTex1du4; + +Texture2D g_tTex2df4; +Texture2D g_tTex2di4; +Texture2D g_tTex2du4; + +Texture3D g_tTex3df4; +Texture3D g_tTex3di4; +Texture3D g_tTex3du4; + +TextureCube g_tTexcdf4; +TextureCube g_tTexcdi4; +TextureCube g_tTexcdu4; + +Texture1DArray g_tTex1df4a; +Texture1DArray g_tTex1di4a; +Texture1DArray g_tTex1du4a; + +Texture2DArray g_tTex2df4a; +Texture2DArray g_tTex2di4a; +Texture2DArray g_tTex2du4a; + +TextureCubeArray g_tTexcdf4a; +TextureCubeArray g_tTexcdi4a; +TextureCubeArray g_tTexcdu4a; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +uniform int c1; +uniform int2 c2; +uniform int3 c3; +uniform int4 c4; + +uniform int o1; +uniform int2 o2; +uniform int3 o3; +uniform int4 o4; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + // 1DArray + g_tTex1df4a.Load(c3, o1); + g_tTex1di4a.Load(c3, o1); + g_tTex1du4a.Load(c3, o1); + + // 2DArray + g_tTex2df4a.Load(c4, o2); + g_tTex2di4a.Load(c4, o2); + g_tTex2du4a.Load(c4, o2); + + // TODO: + // Load, SampleIndex + // Load, SampleIndex, Offset + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.load.rwbuffer.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.load.rwbuffer.dx10.frag new file mode 100644 index 0000000..accd5f0 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.load.rwbuffer.dx10.frag @@ -0,0 +1,32 @@ + +RWBuffer g_tBuffF; +RWBuffer g_tBuffI; +RWBuffer g_tBuffU; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; +}; + +uniform int c1; +uniform int2 c2; +uniform int3 c3; +uniform int4 c4; + +uniform int o1; +uniform int2 o2; +uniform int3 o3; +uniform int4 o4; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + g_tBuffF.Load(c1); + g_tBuffU.Load(c1); + g_tBuffI.Load(c1); + + psout.Color = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.load.rwtexture.array.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.load.rwtexture.array.dx10.frag new file mode 100644 index 0000000..38e2909 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.load.rwtexture.array.dx10.frag @@ -0,0 +1,57 @@ +SamplerState g_sSamp : register(s0); + +RWTexture1D g_tTex1df4 : register(t0); +RWTexture1D g_tTex1di4; +RWTexture1D g_tTex1du4; + +RWTexture2D g_tTex2df4; +RWTexture2D g_tTex2di4; +RWTexture2D g_tTex2du4; + +RWTexture3D g_tTex3df4; +RWTexture3D g_tTex3di4; +RWTexture3D g_tTex3du4; + +RWTexture1DArray g_tTex1df4a; +RWTexture1DArray g_tTex1di4a; +RWTexture1DArray g_tTex1du4a; + +RWTexture2DArray g_tTex2df4a; +RWTexture2DArray g_tTex2di4a; +RWTexture2DArray g_tTex2du4a; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +uniform int c1; +uniform int2 c2; +uniform int3 c3; +uniform int4 c4; + +uniform int o1; +uniform int2 o2; +uniform int3 o3; +uniform int4 o4; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + // 1D + g_tTex1df4a.Load(c2); + g_tTex1di4a.Load(c2); + g_tTex1du4a.Load(c2); + + // 2D + g_tTex2df4a.Load(c3); + g_tTex2di4a.Load(c3); + g_tTex2du4a.Load(c3); + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.load.rwtexture.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.load.rwtexture.dx10.frag new file mode 100644 index 0000000..c095077 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.load.rwtexture.dx10.frag @@ -0,0 +1,62 @@ +SamplerState g_sSamp : register(s0); + +RWTexture1D g_tTex1df4 : register(t0); +RWTexture1D g_tTex1di4; +RWTexture1D g_tTex1du4; + +RWTexture2D g_tTex2df4; +RWTexture2D g_tTex2di4; +RWTexture2D g_tTex2du4; + +RWTexture3D g_tTex3df4; +RWTexture3D g_tTex3di4; +RWTexture3D g_tTex3du4; + +RWTexture1DArray g_tTex1df4a; +RWTexture1DArray g_tTex1di4a; +RWTexture1DArray g_tTex1du4a; + +RWTexture2DArray g_tTex2df4a; +RWTexture2DArray g_tTex2di4a; +RWTexture2DArray g_tTex2du4a; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +uniform int c1; +uniform int2 c2; +uniform int3 c3; +uniform int4 c4; + +uniform int o1; +uniform int2 o2; +uniform int3 o3; +uniform int4 o4; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + // 1D + g_tTex1df4.Load(c1); + g_tTex1di4.Load(c1); + g_tTex1du4.Load(c1); + + // 2D + g_tTex2df4.Load(c2); + g_tTex2di4.Load(c2); + g_tTex2du4.Load(c2); + + // 3D + g_tTex3df4.Load(c3); + g_tTex3di4.Load(c3); + g_tTex3du4.Load(c3); + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.logical.binary.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.logical.binary.frag new file mode 100644 index 0000000..06bc9f2 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.logical.binary.frag @@ -0,0 +1,21 @@ +struct PS_OUTPUT +{ + float4 Color : SV_Target0; +}; + +uniform int ival; +uniform int4 ival4; +uniform float fval; +uniform float4 fval4; + +PS_OUTPUT main() +{ + if (ival && fval); + if (ival || fval); + + PS_OUTPUT psout; + psout.Color = 1.0; + return psout; +} + + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.logical.binary.vec.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.logical.binary.vec.frag new file mode 100644 index 0000000..e94c8f5 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.logical.binary.vec.frag @@ -0,0 +1,24 @@ +struct PS_OUTPUT +{ + float4 Color : SV_Target0; +}; + +uniform bool4 b4a, b4b; +uniform bool b1a, b1b; + +PS_OUTPUT main() +{ + bool4 r00 = !b4a; + bool4 r01 = b4a && b4b; // vec, vec + bool4 r02 = b4a || b4b; // vec, vec + + bool4 r10 = b1a && b4b; // scalar, vec + bool4 r11 = b1a || b4b; // scalar, vec + + bool4 r20 = b4a && b1b; // vec, scalar + bool4 r21 = b4a || b1b; // vec, scalar + + PS_OUTPUT psout; + psout.Color = r00 || r01 || r02 || r10 || r11 || r20 || r21; + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.logical.unary.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.logical.unary.frag new file mode 100644 index 0000000..cbcb3bf --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.logical.unary.frag @@ -0,0 +1,29 @@ +struct PS_OUTPUT +{ + float4 Color : SV_Target0; +}; + +uniform int ival; +uniform int4 ival4; +uniform float fval; +uniform float4 fval4; + +PS_OUTPUT main() +{ + !ival; // scalar int + !ival4; // vector int + + !fval; // scalar float + !fval4; // vector float + + if (ival); + if (fval); + if (!ival); + if (!fval); + + PS_OUTPUT psout; + psout.Color = 1.0; + return psout; +} + + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.matNx1.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.matNx1.frag new file mode 100644 index 0000000..515bd47 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.matNx1.frag @@ -0,0 +1,31 @@ + +void TestMatNx1() +{ + float1x1 f1x1; + float2x1 f2x1; + float3x1 f3x1; + float4x1 f4x1; + + float1x2 f1x2; + float1x3 f1x3; + float1x4 f1x4; + + float1x1 r00 = transpose(f1x1); + float1x2 r01 = transpose(f2x1); + float1x3 r02 = transpose(f3x1); + float1x4 r03 = transpose(f4x1); + + float1x1 r10 = transpose(f1x1); + float2x1 r11 = transpose(f1x2); + float3x1 r12 = transpose(f1x3); + float4x1 r13 = transpose(f1x4); +} + +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.matType.bool.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.matType.bool.frag new file mode 100644 index 0000000..e4a62e3 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.matType.bool.frag @@ -0,0 +1,53 @@ + +void TestBoolMatTypes() +{ + bool1x1 b1x1; + bool2x1 b2x1; + bool3x1 b3x1; + bool4x1 b4x1; + + bool1x2 b1x2; + bool2x2 b2x2; + bool3x2 b3x2; + bool4x2 b4x2; + + bool1x3 b1x3; + bool2x3 b2x3; + bool3x3 b3x3; + bool4x3 b4x3; + + bool1x4 b1x4; + bool2x4 b2x4; + bool3x4 b3x4; + bool4x4 b4x4; + + // TODO: Currently SPIR-V disallows Nx1 or 1xN mats. + bool1x1 r00 = transpose(b1x1); + bool1x2 r01 = transpose(b2x1); + bool1x3 r02 = transpose(b3x1); + bool1x4 r03 = transpose(b4x1); + + bool2x1 r10 = transpose(b1x2); + bool2x2 r11 = transpose(b2x2); + bool2x3 r12 = transpose(b3x2); + bool2x4 r13 = transpose(b4x2); + + bool3x1 r20 = transpose(b1x3); + bool3x2 r21 = transpose(b2x3); + bool3x3 r22 = transpose(b3x3); + bool3x4 r23 = transpose(b4x3); + + bool4x1 r30 = transpose(b1x4); + bool4x2 r31 = transpose(b2x4); + bool4x3 r32 = transpose(b3x4); + bool4x4 r33 = transpose(b4x4); +} + +struct PS_OUTPUT { float4 color : SV_Target0; }; + +PS_OUTPUT main() +{ + PS_OUTPUT ps_output; + ps_output.color = float4(0,0,0,0); + return ps_output; +}; diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.matType.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.matType.frag new file mode 100644 index 0000000..ee7c047 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.matType.frag @@ -0,0 +1,11 @@ +float1 f1 = float1(1.0); +float1x1 fmat11; +float4x1 fmat41; +float1x2 fmat12; +double2x3 dmat23; +int4x4 int44; + +float1 ShaderFunction(float1 inFloat1, float inScalar) : COLOR0 +{ + return inFloat1; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.matType.int.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.matType.int.frag new file mode 100644 index 0000000..09e9f2a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.matType.int.frag @@ -0,0 +1,97 @@ + +void TestIntMatTypes() +{ + int1x1 i1x1; + int2x1 i2x1; + int3x1 i3x1; + int4x1 i4x1; + + int1x2 i1x2; + int2x2 i2x2; + int3x2 i3x2; + int4x2 i4x2; + + int1x3 i1x3; + int2x3 i2x3; + int3x3 i3x3; + int4x3 i4x3; + + int1x4 i1x4; + int2x4 i2x4; + int3x4 i3x4; + int4x4 i4x4; + + // TODO: Currently SPIR-V disallows Nx1 or 1xN mats. + int1x1 r00 = transpose(i1x1); + int1x2 r01 = transpose(i2x1); + int1x3 r02 = transpose(i3x1); + int1x4 r03 = transpose(i4x1); + + int2x1 r10 = transpose(i1x2); + int2x2 r11 = transpose(i2x2); + int2x3 r12 = transpose(i3x2); + int2x4 r13 = transpose(i4x2); + + int3x1 r20 = transpose(i1x3); + int3x2 r21 = transpose(i2x3); + int3x3 r22 = transpose(i3x3); + int3x4 r23 = transpose(i4x3); + + int4x1 r30 = transpose(i1x4); + int4x2 r31 = transpose(i2x4); + int4x3 r32 = transpose(i3x4); + int4x4 r33 = transpose(i4x4); +} + +void TestUintMatTypes() +{ + uint1x1 u1x1; + uint2x1 u2x1; + uint3x1 u3x1; + uint4x1 u4x1; + + uint1x2 u1x2; + uint2x2 u2x2; + uint3x2 u3x2; + uint4x2 u4x2; + + uint1x3 u1x3; + uint2x3 u2x3; + uint3x3 u3x3; + uint4x3 u4x3; + + uint1x4 u1x4; + uint2x4 u2x4; + uint3x4 u3x4; + uint4x4 u4x4; + + // TODO: Currently SPIR-V disallows Nx1 or 1xN mats. + uint1x1 r00 = transpose(u1x1); + uint1x2 r01 = transpose(u2x1); + uint1x3 r02 = transpose(u3x1); + uint1x4 r03 = transpose(u4x1); + + uint2x1 r10 = transpose(u1x2); + uint2x2 r11 = transpose(u2x2); + uint2x3 r12 = transpose(u3x2); + uint2x4 r13 = transpose(u4x2); + + uint3x1 r20 = transpose(u1x3); + uint3x2 r21 = transpose(u2x3); + uint3x3 r22 = transpose(u3x3); + uint3x4 r23 = transpose(u4x3); + + uint4x1 r30 = transpose(u1x4); + uint4x2 r31 = transpose(u2x4); + uint4x3 r32 = transpose(u3x4); + uint4x4 r33 = transpose(u4x4); +} + +struct PS_OUTPUT { float4 color : SV_Target0; }; + +PS_OUTPUT main() +{ + PS_OUTPUT ps_output; + ps_output.color = float4(0,0,0,0); + return ps_output; +}; diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.matrixSwizzle.vert b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.matrixSwizzle.vert new file mode 100644 index 0000000..c06996b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.matrixSwizzle.vert @@ -0,0 +1,33 @@ +void ShaderFunction(float inf) : COLOR0 +{ + float3x4 m; + + // tests that convert to non-matrix swizzles + + m._34 = 1.0; // AST should have a normal component select + m._m23 = 2.0; // same code + m[2][3] = 2.0; // same code + + m._11_12_13_14 = float4(3.0); // AST should have normal column selection (first row) + m._m10_m11_m12_m13 = float4(3.0); // AST should have normal column selection (second row) + m[1] = float4(3.0); // same code + + // tests that stay as matrix swizzles + + float3 f3; + m._11_22_23 = f3; + m._21_12_31 = float3(5.0); + m._11_12_21 = 2 * f3; + + // r-value + f3 = m._21_12_31; +} + +float3x3 createMat3x3(float3 a, float3 b, float3 c) +{ + float3x3 m; + m._11_21_31 = a; + m._12_22_32 = b; + m._13_23_33 = c; + return m; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.matrixindex.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.matrixindex.frag new file mode 100644 index 0000000..f352c0e --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.matrixindex.frag @@ -0,0 +1,49 @@ +uniform int idx; +uniform float3x2 um; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; +}; + +PS_OUTPUT main() +{ + // matrices of 3 rows, 2 columns (regardless of row vs col major storage) + const float3x2 m1 = { { 10, 11 }, // row-wise initialization + { 12, 13 }, + { 14, 15 } }; + + const float3x2 m2 = { 20, 21, 22, 23, 24, 25 }; // component-wise matrix initialization is allowed + const float3x2 m3 = { 30, 31, 33, 33, 34, 35 }; // component-wise matrix initialization is allowed + + // These can be observed in the AST post-const folding to ensure we obtain the right value, + // as given in comments to the right of each line. Note that the first indirection into a + // matrix returns a row vector. + float e1_00 = m1[0][0]; // 10 + float e1_01 = m1[0][1]; // 11 + float e1_10 = m1[1][0]; // 12 + float e1_11 = m1[1][1]; // 13 + float e1_20 = m1[2][0]; // 14 + float e1_21 = m1[2][1]; // 15 + + float e2_00 = m2[0][0]; // 20 + float e2_01 = m2[0][1]; // 21 + float e2_10 = m2[1][0]; // 22 + float e2_11 = m2[1][1]; // 23 + float e2_20 = m2[2][0]; // 24 + float e2_21 = m2[2][1]; // 25 + + // float e3a_00 = m3._m00; // TODO... also as an lvalue for a non-const matrix + // float e3b_00 = m3._11; // TODO... also as an lvalue for a non-const matrix + + float2 r0a = m1[0]; // row0: 10,11: types must match: constant index into constant + float2 r1a = m1[1]; // row1: 12,13: ... + float2 r2a = m1[2]; // row2: 14,15: ... + + float2 r0b = m2[idx]; // types should match: variable index into constant + float2 r0c = um[idx]; // types should match: variable index into variable + + PS_OUTPUT psout; + psout.Color = e2_11; // 23 + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.max.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.max.frag new file mode 100644 index 0000000..6d1ea0b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.max.frag @@ -0,0 +1,4 @@ +float4 PixelShaderFunction(float4 input1, float4 input2) : COLOR0 +{ + return max(input1, input2); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.mintypes.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.mintypes.frag new file mode 100644 index 0000000..ad47e68 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.mintypes.frag @@ -0,0 +1,49 @@ +struct PS_OUTPUT +{ + float4 Color : SV_Target0; +}; + +uniform min16float b1a, b1b; + +PS_OUTPUT main() +{ + min16float mf16; + min16float1 mf16_1; + min16float2 mf16_2; + min16float3 mf16_3; + min16float4 mf16_4; + + min10float mf10; + min10float1 mf10_1; + min10float2 mf10_2; + min10float3 mf10_3; + min10float4 mf12_4; + + min16int mi16; + min16int1 mi16_1; + min16int2 mi16_2; + min16int3 mi16_3; + min16int4 mi16_4; + + min12int mi12; + min12int1 mi12_1; + min12int2 mi12_2; + min12int3 mi12_3; + min12int4 mi12_4; + + min16uint mu16; + min16uint1 mu16_1; + min16uint2 mu16_2; + min16uint3 mu16_3; + min16uint4 mu16_4; + + mf16_2 + mf16; + mf10_2 + mf10; + mi16_2 + mi16; + mi12_2 + mi12; + mu16_2 + mu16; + + PS_OUTPUT psout; + psout.Color = 0; + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.multiEntry.vert b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.multiEntry.vert new file mode 100755 index 0000000..d155c26 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.multiEntry.vert @@ -0,0 +1,11 @@ +Buffer Position; + +float4 FakeEntrypoint(uint Index : SV_VERTEXID) : SV_POSITION +{ + return Position.Load(Index); +} + +float4 RealEntrypoint(uint Index : SV_VERTEXID) : SV_POSITION +{ + return FakeEntrypoint(Index); +} \ No newline at end of file diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.multiReturn.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.multiReturn.frag new file mode 100755 index 0000000..fdab772 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.multiReturn.frag @@ -0,0 +1,19 @@ +struct S { + float f; + float3 v; + float3x3 m; +}; + +cbuffer bufName { + S s; +}; + +S foo() +{ + return s; +} + +void main() +{ + foo(); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.nonstaticMemberFunction.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.nonstaticMemberFunction.frag new file mode 100755 index 0000000..3655ed0 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.nonstaticMemberFunction.frag @@ -0,0 +1,35 @@ +static float2 i = float2(1.0, 2.0); + +struct type1 +{ + void setmem(float4 m) { memVar = m; } + void seti(int si) { i = si; } + float4 memVar; + float4 memFun(float4 a) : SV_Position + { + return i * a + memVar; + } + int memFun(int a) : SV_Position + { + return i + a - memVar.z; + } + int i; +}; + +static float2 j = i; + +struct type2 +{ + float2 memFun() { return i; } +}; + +float4 main() : SV_Target0 +{ + type1 test; + test.setmem(float4(2.0,2.0,2.0,2.0)); + test.seti(17); + float4 f4 = float4(1.0,1.0,1.0,1.0); + f4 += test.memFun(float4(5.0f,5.0f,5.0f,5.0f)); + f4 += test.memFun(7); + return f4; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.numericsuffixes.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.numericsuffixes.frag new file mode 100644 index 0000000..bccb786 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.numericsuffixes.frag @@ -0,0 +1,24 @@ + +struct PS_OUTPUT { float4 color : SV_Target0; }; + +PS_OUTPUT main() +{ + // Test numeric suffixes + float r00 = 1.0f; // float + uint r01 = 1u; // lower uint + uint r02 = 2U; // upper uint + uint r03 = 0xabcu; // lower hex uint + uint r04 = 0xABCU; // upper hex uint (upper 0X is not accepted) + int r05 = 5l; // lower long int + int r06 = 6L; // upper long int + int r07 = 071; // octal + uint r08 = 072u; // unsigned octal + float r09 = 1.h; // half + float r10 = 1.H; // half + float r11 = 1.1h; // half + float r12 = 1.1H; // half + + PS_OUTPUT ps_output; + ps_output.color = r07; // gets 71 octal = 57 decimal + return ps_output; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.numthreads.comp b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.numthreads.comp new file mode 100644 index 0000000..fcc97f3 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.numthreads.comp @@ -0,0 +1,14 @@ + +[numthreads(8,8,1)] +void main(uint3 tid : SV_DispatchThreadID ) +{ +} + +[numTHreaDs(4,4,2)] // case insensitive +void main_aux1(uint3 tid : SV_DispatchThreadID ) +{ +} + +[numthreads(1,4,8)] +void main_aux2(uint3 tid : SV_DispatchThreadID ); + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.overload.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.overload.frag new file mode 100644 index 0000000..b5ddf49 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.overload.frag @@ -0,0 +1,142 @@ +// function selection under type conversion +void foo1(double a, bool b) {} +void foo1(double a, uint b) {} +void foo1(double a, int b) {} +void foo1(double a, float b) {} +void foo1(double a, double b){} + +// uint -> int +void foo2(int a, bool b) {} +void foo2(int a, uint b) {} +void foo2(int a, int b) {} +void foo2(int a, float b) {} +void foo2(int a, double b){} + +// everything can promote +void foo3(bool b) {} +void foo4(uint b) {} +void foo5(int b) {} +void foo6(float b) {} +void foo7(double b){} + +// shorter forward chain better than longer or backward chain +void foo8(float) {} +void foo8(double) {} +void foo9(int) {} +void foo9(uint) {} +void foo10(bool) {} +void foo10(int) {} + +// shape change is worse +void foo11(float3) {} +void foo11(double) {} +void foo11(int3) {} +void foo11(uint) {} +void foo12(float1) {} +void foo12(double3) {} +void foo16(uint) {} +void foo16(uint2) {} + +// shape change +void foo13(float3) {} +void foo14(int1) {} +void foo15(bool1) {} + +float4 PixelShaderFunction(float4 input) : COLOR0 +{ + bool b; + double d; + uint u; + int i; + float f; + + foo1(d, b); + foo1(d, d); + foo1(d, u); + foo1(d, i); + foo1(d, f); + + foo1(f, b); + foo1(f, d); + foo1(f, u); + foo1(f, i); + foo1(f, f); + + foo1(u, b); + foo1(u, d); + foo1(u, u); + foo1(u, i); + foo1(u, f); + + foo1(i, b); + foo1(i, d); + foo1(i, u); + foo1(i, i); + foo1(i, f); + + foo2(u, b); + foo2(u, d); + foo2(u, u); + foo2(u, i); + foo2(u, f); + + foo2(i, b); + foo2(i, d); + foo2(i, u); + foo2(i, i); + foo2(i, f); + + foo3(b); + foo3(d); + foo3(u); + foo3(i); + foo3(f); + + foo4(b); + foo4(d); + foo4(u); + foo4(i); + foo4(f); + + foo5(b); + foo5(d); + foo5(u); + foo5(i); + foo5(f); + + foo6(b); + foo6(d); + foo6(u); + foo6(i); + foo6(f); + + foo7(b); + foo7(d); + foo7(u); + foo7(i); + foo7(f); + + foo8(b); + foo8(u); + foo8(i); + + foo9(b); + foo9(f); + foo9(d); + + foo10(u); + foo10(f); + foo10(d); + + foo11(b); + foo11(f); + foo12(float3(f)); + foo16(int2(i,i)); + + foo13(f); + foo14(int4(i)); + foo15(b); + foo15(bool3(b)); + + return input; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.params.default.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.params.default.frag new file mode 100644 index 0000000..42ad84f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.params.default.frag @@ -0,0 +1,51 @@ +uniform int4 ui4; + +static const int cia = -4; +static const int cib = -42; + +// ERROR: Ambiguous with fn1 below. +// int4 fn1(int4 p0) { return int4(1,2,3,4); } + +int4 fn1(int4 p0, bool b1, bool b2 = false) { + return p0; +} + +int4 fn1(int4 p0, + int4 p1 : FOO = int4(-1,-2,-3, cia), + int p2[2] : BAR = { int(1), 2 }, + int p3 = abs(cib) ) +{ + return p0 + p1 + p2[0] + p3; +} + +// These should not be ambiguous if given either an int or a float explicit second parameter. +int4 fn2(int4 p0, int x = 3) +{ + return int4(10,11,12,13); +} + +int4 fn2(int4 p0, float x = sin(3.3)) // OK to have a const expression as a default value +{ + return p0 + int4(20,21,22,23); +} + +void fn3(int p0 = 3) { } + + +int4 main() : SV_Target0 +{ + int myarray[2] = {30,31}; + + fn3(); + fn3(5); + + return fn1(100) + + fn1(101, ui4) + + fn1(102, ui4, myarray) + + fn1(103, ui4, myarray, 99) + + fn1(104, false) + + fn1(105, false, true) + + + fn2(110, 11.11) + // calls int4, float form + fn2(111, 12); // calls int4, int form +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.params.default.negative.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.params.default.negative.frag new file mode 100644 index 0000000..c9ff330 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.params.default.negative.frag @@ -0,0 +1,50 @@ +uniform int4 ui4; +uniform float ufvar; + +static const int cia = -4; +static const int cib = -42; + +int4 fn1(int4 p0) { return int4(1,2,3,4); } + +int4 fn1(int4 p0, bool b1, bool b2 = false) { + return p0; +} + +int4 fn1(int4 p0, + int4 p1 : FOO = int4(-1,-2,-3, cia), + int p2[2] : BAR = { int(1), 2 }, + int p3 = abs(cib) ) +{ + return p0 + p1 + p2[0] + p3; +} + +// These should not be ambiguous if given either an int or a float explicit second parameter. +int4 fn2(int4 p0, int x = 3) +{ + return int4(10,11,12,13); +} + +int4 fn2(int4 p0, float x = ufvar) // ERROR: non-const expression +{ + return p0 + int4(20,21,22,23); +} + +void fn3(int p0 = 5, int p1) // ERROR no-default param after default param +{ +} + +int4 main() : SV_Target0 +{ + int myarray[2] = {30,31}; + + return fn1(100) + // ERROR: ambiguous + fn1(101, ui4) + + fn1(102, ui4, myarray) + + fn1(103, ui4, myarray, 99) + + fn1(104, false) + + fn1(105, false, true) + + + fn2(112) + // ERROR: ambiguous + fn2(110, 11.11) + // calls int4, float form + fn2(111, 12); // calls int4, int form +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.partialInit.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.partialInit.frag new file mode 100755 index 0000000..01aee8e --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.partialInit.frag @@ -0,0 +1,36 @@ +struct outs { + int a; + float b; + bool c; + float4 v; +}; + +static float4 gv = {0,0,1}; +static float gfa[3] = {0,0}; + +struct Nest { + float4x3 m; + outs os; + bool b; +}; + +outs PixelShaderFunction(float4 input) : COLOR0 +{ + outs o2 = { 3 }; + outs o4; + o4.v = gv * gfa[2]; + outs o1 = { }; + outs o3 = (outs)0; + o4 = (outs)0; + o4.c = o1.c; + Nest nest = (Nest)0; + + float2 gf2a[4] = { }; + int cgi = { }; + o4.b = gf2a[2].y * cgi; + + return o4; +} + +static const float2 cgf2a[3]; +static const int ci; diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.pp.line.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.pp.line.frag new file mode 100644 index 0000000..6f0273d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.pp.line.frag @@ -0,0 +1,24 @@ + +#line 1 + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +#line 2 + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + +#line 123 "SomeFile.frag" + + int thisLineIs = __LINE__; // gets 124 + + psout.Color = float4(thisLineIs, 0, 0, 1); + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.pp.tokenpasting.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.pp.tokenpasting.frag new file mode 100644 index 0000000..5415670 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.pp.tokenpasting.frag @@ -0,0 +1,18 @@ + +#define foobarblee zzzz + +#define ar qqqq + +#define MACRO1(x,y) foo##x##y +// #define MACRO2 abc##def + +// #define SPACE_IN_MACRO int var1 + +float4 main() : SV_Target0 +{ + // float MACRO2 = 10; + float MACRO1(b##ar,blee) = 3; + + return float4(foobarblee,0,0,0); +} + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.precedence.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.precedence.frag new file mode 100644 index 0000000..6ed7173 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.precedence.frag @@ -0,0 +1,9 @@ +float4 PixelShaderFunction( + float4 a1, + float4 a2, + float4 a3, + float4 a4 + ) : COLOR0 +{ + return a1 + a2 * a3 + a4 + float4(a1.rgb * a2.rgb, a3.a); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.precedence2.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.precedence2.frag new file mode 100644 index 0000000..0d3f583 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.precedence2.frag @@ -0,0 +1,9 @@ +int PixelShaderFunction( + int a1, + int a2, + int a3, + int a4 + ) : COLOR0 +{ + return (a1 * a2 + a3 << a4) + (a1 << a2 + a3 * a4); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.precise.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.precise.frag new file mode 100644 index 0000000..77454e0 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.precise.frag @@ -0,0 +1,14 @@ + +struct PS_OUTPUT { precise float4 color : SV_Target0; }; + +static precise float precisefloat; + +void MyFunction(in precise float myfloat, out precise float3 myfloat3) { } + +PS_OUTPUT main() +{ + PS_OUTPUT ps_output; + ps_output.color = 1.0; + return ps_output; +} + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.promote.atomic.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.promote.atomic.frag new file mode 100644 index 0000000..2b46225 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.promote.atomic.frag @@ -0,0 +1,17 @@ + +RWBuffer s_uintbuff; // UINT RWBuffer ... + +float4 main() : SV_Target +{ + int Loc; // ... with INT variables + int Inc; + int Orig; + + // This must select the uint flavor of SPIR-V atomic op, and promote + // the other arguments as required. The output value from the + // imageAtomicAdd AST will be converted to an int for 'Orig'. + InterlockedAdd(s_uintbuff[Loc], Inc, Orig); + + return float4(0,0,0,0); +} + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.promote.binary.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.promote.binary.frag new file mode 100644 index 0000000..0203bed --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.promote.binary.frag @@ -0,0 +1,28 @@ +struct PS_OUTPUT +{ + float4 Color : SV_Target0; +}; + +uniform bool bval; +uniform bool4 bval4; +uniform int ival; +uniform int4 ival4; +uniform float fval; +uniform float4 fval4; + +PS_OUTPUT main() +{ + ival % fval; + ival4 % fval4; + + bval % fval; + bval4 % fval4; + + int l_int = 1; + l_int %= fval; + + PS_OUTPUT psout; + psout.Color = 0; + return psout; +} + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.promote.vec1.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.promote.vec1.frag new file mode 100644 index 0000000..a674ccb --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.promote.vec1.frag @@ -0,0 +1,16 @@ + +float4 main() : SV_Target +{ + float f1a; + float1 f1b; + + f1a = f1b; // convert float1 to float + f1b = f1a; // convert float to float1 + + float3 f3; + step(0.0, f3); + + sin(f1b); // test 1-vectors in intrinsics + + return float4(0,0,0,0); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.promotions.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.promotions.frag new file mode 100644 index 0000000..647096d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.promotions.frag @@ -0,0 +1,201 @@ + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; +}; + +uniform int3 i3; +uniform bool3 b3; +uniform float3 f3; +uniform uint3 u3; +uniform double3 d3; + +uniform int is; +uniform bool bs; +uniform float fs; +uniform uint us; +uniform double ds; + +void Fn_F3(float3 x) { } +void Fn_I3(int3 x) { } +void Fn_U3(uint3 x) { } +void Fn_B3(bool3 x) { } +void Fn_D3(double3 x) { } + +// ----------- Test implicit conversions on function returns ----------- +float3 Fn_R_F3I(out float3 p) { p = i3; return i3; } +float3 Fn_R_F3U(out float3 p) { p = u3; return u3; } +float3 Fn_R_F3B(out float3 p) { p = b3; return b3; } +float3 Fn_R_F3D(out float3 p) { p = d3; return d3; } // valid, but loss of precision on downconversion. + +int3 Fn_R_I3U(out int3 p) { p = u3; return u3; } +int3 Fn_R_I3B(out int3 p) { p = b3; return b3; } +int3 Fn_R_I3F(out int3 p) { p = f3; return f3; } +int3 Fn_R_I3D(out int3 p) { p = d3; return d3; } // valid, but loss of precision on downconversion. + +uint3 Fn_R_U3I(out uint3 p) { p = i3; return i3; } +uint3 Fn_R_U3F(out uint3 p) { p = f3; return f3; } +uint3 Fn_R_U3B(out uint3 p) { p = b3; return b3; } +uint3 Fn_R_U3D(out uint3 p) { p = d3; return d3; } // valid, but loss of precision on downconversion. + +bool3 Fn_R_B3I(out bool3 p) { p = i3; return i3; } +bool3 Fn_R_B3U(out bool3 p) { p = u3; return u3; } +bool3 Fn_R_B3F(out bool3 p) { p = f3; return f3; } +bool3 Fn_R_B3D(out bool3 p) { p = d3; return d3; } + +double3 Fn_R_D3I(out double3 p) { p = i3; return i3; } +double3 Fn_R_D3U(out double3 p) { p = u3; return u3; } +double3 Fn_R_D3B(out double3 p) { p = b3; return b3; } +double3 Fn_R_D3F(out double3 p) { p = f3; return f3; } + +PS_OUTPUT main() +{ + // ----------- assignment conversions ----------- + float3 r00 = i3; + float3 r01 = b3; + float3 r02 = u3; + float3 r03 = d3; // valid, but loss of precision on downconversion. + + int3 r10 = b3; + int3 r11 = u3; + int3 r12 = f3; + int3 r13 = d3; // valid, but loss of precision on downconversion. + + uint3 r20 = b3; + uint3 r21 = i3; + uint3 r22 = f3; + uint3 r23 = d3; // valid, but loss of precision on downconversion. + + bool3 r30 = i3; + bool3 r31 = u3; + bool3 r32 = f3; + bool3 r33 = d3; + + double3 r40 = i3; + double3 r41 = u3; + double3 r42 = f3; + double3 r43 = b3; + + // ----------- assign ops: vector times vector ----------- + r00 *= i3; + r01 *= b3; + r02 *= u3; + r03 *= d3; // valid, but loss of precision on downconversion. + + r10 *= b3; + r11 *= u3; + r12 *= f3; + r13 *= d3; // valid, but loss of precision on downconversion. + + r20 *= b3; + r21 *= i3; + r22 *= f3; + r23 *= d3; // valid, but loss of precision on downconversion. + + // No mul operator for bools + + r40 *= i3; + r41 *= u3; + r42 *= f3; + r43 *= b3; + + // ----------- assign ops: vector times scalar ----------- + r00 *= is; + r01 *= bs; + r02 *= us; + r03 *= ds; // valid, but loss of precision on downconversion. + + r10 *= bs; + r11 *= us; + r12 *= fs; + r13 *= ds; // valid, but loss of precision on downconversion. + + r20 *= bs; + r21 *= is; + r22 *= fs; + r23 *= ds; // valid, but loss of precision on downconversion. + + // No mul operator for bools + + r40 *= is; + r41 *= us; + r42 *= fs; + r43 *= bs; + + +#define FN_OVERLOADS 0 // change to 1 when overloads under promotions are in place + +#if FN_OVERLOADS + Fn_F3(i3); + Fn_F3(u3); + Fn_F3(f3); + Fn_F3(b3); + Fn_F3(d3); // valid, but loss of precision on downconversion. + + Fn_I3(i3); + Fn_I3(u3); + Fn_I3(f3); + Fn_I3(b3); + Fn_I3(d3); // valid, but loss of precision on downconversion. + + Fn_U3(i3); + Fn_U3(u3); + Fn_U3(f3); + Fn_U3(b3); + Fn_U3(d3); // valid, but loss of precision on downconversion. + + Fn_B3(i3); + Fn_B3(u3); + Fn_B3(f3); + Fn_B3(b3); + Fn_B3(d3); + + Fn_D3(i3); + Fn_D3(u3); + Fn_D3(f3); + Fn_D3(b3); + Fn_D3(d3); + + Fn_F3(i3.x); + Fn_F3(u3.x); + Fn_F3(f3.x); + Fn_F3(b3.x); + Fn_F3(d3.x); // valid, but loss of precision on downconversion. + + Fn_I3(i3.x); + Fn_I3(u3.x); + Fn_I3(f3.x); + Fn_I3(b3.x); + Fn_I3(d3.x); // valid, but loss of precision on downconversion. + + Fn_U3(i3.x); + Fn_U3(u3.x); + Fn_U3(f3.x); + Fn_U3(b3.x); + Fn_U3(d3.x); // valid, but loss of precision on downconversion. + + Fn_B3(i3.x); + Fn_B3(u3.x); + Fn_B3(f3.x); + Fn_B3(b3.x); + Fn_B3(d3.x); + + Fn_D3(i3.x); + Fn_D3(u3.x); + Fn_D3(f3.x); + Fn_D3(b3.x); + Fn_D3(d3.x); +#endif + + const int si = 3; + const float sf = 1.2; + + int c1 = si * sf; // 3.6 (not 3!) + int c2 = sf * si; // 3.6 (not 3!) + + float4 outval = float4(si * sf, sf*si, c1, c2); + + PS_OUTPUT psout; + psout.Color = outval; + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.reflection.binding.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.reflection.binding.frag new file mode 100644 index 0000000..25b22c9 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.reflection.binding.frag @@ -0,0 +1,34 @@ + +uniform float u1 : register(b2); + +uniform SamplerState s1 : register(s5); +uniform SamplerState s1a[3] : register(s6); + +uniform Texture1D t1 : register(t15); +uniform Texture1D t1a[3] : register(t16); + +cbuffer cbuff1 : register(b2) { + float4 c1_a; + int c1_b; + float c1_c; +}; + +cbuffer cbuff2 : register(b3) { + float4 c2_a; + int c2_b; + float c2_c; +}; + +struct PS_OUTPUT +{ + float4 Color : Sv_Target0; +}; + +void main(out PS_OUTPUT psout) +{ + psout.Color = + t1.Sample(s1, 0.3) + + t1a[0].Sample(s1a[0], 0.3) + + c1_a + c1_b + c1_c + + c2_a + c2_b + c2_c; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.reflection.vert b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.reflection.vert new file mode 100644 index 0000000..21cc810 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.reflection.vert @@ -0,0 +1,165 @@ + +cbuffer nameless { + float3 anonMember1; + float3x2 m23; + int scalarAfterm23; + float4 anonDeadMember2; + float4 anonMember3; + int scalarBeforeArray; + float floatArray[5]; + int scalarAfterArray; + float2x2 m22[9]; +}; + +cbuffer c_nameless { + float3 c_anonMember1; + float3x2 c_m23; + int c_scalarAfterm23; + float4 c_anonDeadMember2; + 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; +}; + +struct N2 { + float b; + float c; + float d; +}; + +struct N3 { + N1 n1; + N2 n2; +}; + +cbuffer nested { + N3 foo; +} nest; + +struct TS { + int a; + int dead; +}; + +uniform TS s; + +uniform float uf1; +uniform float uf2; +uniform float ufDead3; +uniform float ufDead4; + +uniform float2x2 dm22[10]; + +struct deep1 { + float2 va[3]; + bool b; +}; + +struct deep2 { + int i; + deep1 d1[4]; +}; + +struct deep3 { + float4 iv4; + deep2 d2; + 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; +} + +void liveFunction2() +{ + float3 v = anonMember1; + float f = uf1; +} + +tbuffer abl { + float foo; +} arrBl; + +tbuffer abl2 { + float foo; +} arrBl2; + +void flizv(in float attributeFloat, in float2 attributeFloat2, in float3 attributeFloat3, in float4 attributeFloat4, in float4x4 attributeMat4) +{ + liveFunction2(); + + if (! control) + deadFunction(); + + float f; + int i; + if (control) { + 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 += 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 += 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; + deep3 d = deepC[1]; + deep3 da[2] = deepD; + } else + f = ufDead3; + + f += arrBl.foo + arrBl.foo; + f += arrBl2.foo; + + f += attributeFloat; + f += attributeFloat2.x; + f += attributeFloat3.x; + f += attributeFloat4.x; + f += attributeMat4[0][1]; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.rw.atomics.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.rw.atomics.frag new file mode 100644 index 0000000..930d650 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.rw.atomics.frag @@ -0,0 +1,244 @@ +SamplerState g_sSamp; + +RWTexture1D g_tTex1df1; +RWTexture1D g_tTex1di1; +RWTexture1D g_tTex1du1; + +RWTexture2D g_tTex2df1; +RWTexture2D g_tTex2di1; +RWTexture2D g_tTex2du1; + +RWTexture3D g_tTex3df1; +RWTexture3D g_tTex3di1; +RWTexture3D g_tTex3du1; + +RWTexture1DArray g_tTex1df1a; +RWTexture1DArray g_tTex1di1a; +RWTexture1DArray g_tTex1du1a; + +RWTexture2DArray g_tTex2df1a; +RWTexture2DArray g_tTex2di1a; +RWTexture2DArray g_tTex2du1a; + +RWBuffer g_tBuffF; +RWBuffer g_tBuffI; +RWBuffer g_tBuffU; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; +}; + +uniform uint u1; +uniform uint2 u2; +uniform uint3 u3; +uniform uint u1b; +uniform uint u1c; + +uniform int i1; +uniform int2 i2; +uniform int3 i3; +uniform int i1b; +uniform int i1c; + +PS_OUTPUT main() +{ + uint out_u1; + int out_i1; + + // 1D int + InterlockedAdd(g_tTex1di1[i1], i1b); + InterlockedAdd(g_tTex1di1[i1], i1, out_i1); + InterlockedAnd(g_tTex1di1[i1], i1b); + InterlockedAnd(g_tTex1di1[i1], i1, out_i1); + InterlockedCompareExchange(g_tTex1di1[i1], i1b, i1c, out_i1); + InterlockedExchange(g_tTex1di1[i1], i1, out_i1); + InterlockedMax(g_tTex1di1[i1], i1b); + InterlockedMax(g_tTex1di1[i1], i1, out_i1); + InterlockedMin(g_tTex1di1[i1], i1b); + InterlockedMin(g_tTex1di1[i1], i1, out_i1); + InterlockedOr(g_tTex1di1[i1], i1b); + InterlockedOr(g_tTex1di1[i1], i1, out_i1); + InterlockedXor(g_tTex1di1[i1], i1b); + InterlockedXor(g_tTex1di1[i1], i1, out_i1); + + // 1D uint + InterlockedAdd(g_tTex1du1[u1], u1); + InterlockedAdd(g_tTex1du1[u1], u1, out_u1); + InterlockedAnd(g_tTex1du1[u1], u1); + InterlockedAnd(g_tTex1du1[u1], u1, out_u1); + InterlockedCompareExchange(g_tTex1du1[u1], u1b, u1c, out_u1); + InterlockedExchange(g_tTex1du1[u1], u1, out_u1); + InterlockedMax(g_tTex1du1[u1], u1); + InterlockedMax(g_tTex1du1[u1], u1, out_u1); + InterlockedMin(g_tTex1du1[u1], u1); + InterlockedMin(g_tTex1du1[u1], u1, out_u1); + InterlockedOr(g_tTex1du1[u1], u1); + InterlockedOr(g_tTex1du1[u1], u1, out_u1); + InterlockedXor(g_tTex1du1[u1], u1); + InterlockedXor(g_tTex1du1[u1], u1, out_u1); + + // 2D int + InterlockedAdd(g_tTex2di1[i2], i1b); + InterlockedAdd(g_tTex2di1[i2], i1, out_i1); + InterlockedAnd(g_tTex2di1[i2], i1b); + InterlockedAnd(g_tTex2di1[i2], i1, out_i1); + InterlockedCompareExchange(g_tTex2di1[i2], i1b, i1c, out_i1); + InterlockedExchange(g_tTex2di1[i2], i1, out_i1); + InterlockedMax(g_tTex2di1[i2], i1b); + InterlockedMax(g_tTex2di1[i2], i1, out_i1); + InterlockedMin(g_tTex2di1[i2], i1b); + InterlockedMin(g_tTex2di1[i2], i1, out_i1); + InterlockedOr(g_tTex2di1[i2], i1b); + InterlockedOr(g_tTex2di1[i2], i1, out_i1); + InterlockedXor(g_tTex2di1[i2], i1b); + InterlockedXor(g_tTex2di1[i2], i1, out_i1); + + // 2D uint + InterlockedAdd(g_tTex2du1[u2], u1); + InterlockedAdd(g_tTex2du1[u2], u1, out_u1); + InterlockedAnd(g_tTex2du1[u2], u1); + InterlockedAnd(g_tTex2du1[u2], u1, out_u1); + InterlockedCompareExchange(g_tTex2du1[u2], u1b, u1c, out_u1); + InterlockedExchange(g_tTex2du1[u2], u1, out_u1); + InterlockedMax(g_tTex2du1[u2], u1); + InterlockedMax(g_tTex2du1[u2], u1, out_u1); + InterlockedMin(g_tTex2du1[u2], u1); + InterlockedMin(g_tTex2du1[u2], u1, out_u1); + InterlockedOr(g_tTex2du1[u2], u1); + InterlockedOr(g_tTex2du1[u2], u1, out_u1); + InterlockedXor(g_tTex2du1[u2], u1); + InterlockedXor(g_tTex2du1[u2], u1, out_u1); + + // 3D int + InterlockedAdd(g_tTex3di1[i3], i1b); + InterlockedAdd(g_tTex3di1[i3], i1, out_i1); + InterlockedAnd(g_tTex3di1[i3], i1b); + InterlockedAnd(g_tTex3di1[i3], i1, out_i1); + InterlockedCompareExchange(g_tTex3di1[i3], i1b, i1c, out_i1); + InterlockedExchange(g_tTex3di1[i3], i1, out_i1); + InterlockedMax(g_tTex3di1[i3], i1b); + InterlockedMax(g_tTex3di1[i3], i1, out_i1); + InterlockedMin(g_tTex3di1[i3], i1b); + InterlockedMin(g_tTex3di1[i3], i1, out_i1); + InterlockedOr(g_tTex3di1[i3], i1b); + InterlockedOr(g_tTex3di1[i3], i1, out_i1); + InterlockedXor(g_tTex3di1[i3], i1b); + InterlockedXor(g_tTex3di1[i3], i1, out_i1); + + // 3D uint + InterlockedAdd(g_tTex3du1[u3], u1); + InterlockedAdd(g_tTex3du1[u3], u1, out_u1); + InterlockedAnd(g_tTex3du1[u3], u1); + InterlockedAnd(g_tTex3du1[u3], u1, out_u1); + InterlockedCompareExchange(g_tTex3du1[u3], u1b, u1c, out_u1); + InterlockedExchange(g_tTex3du1[u3], u1, out_u1); + InterlockedMax(g_tTex3du1[u3], u1); + InterlockedMax(g_tTex3du1[u3], u1, out_u1); + InterlockedMin(g_tTex3du1[u3], u1); + InterlockedMin(g_tTex3du1[u3], u1, out_u1); + InterlockedOr(g_tTex3du1[u3], u1); + InterlockedOr(g_tTex3du1[u3], u1, out_u1); + InterlockedXor(g_tTex3du1[u3], u1); + InterlockedXor(g_tTex3du1[u3], u1, out_u1); + + // 1D array int + InterlockedAdd(g_tTex1di1a[i2], i1b); + InterlockedAdd(g_tTex1di1a[i2], i1, out_i1); + InterlockedAnd(g_tTex1di1a[i2], i1b); + InterlockedAnd(g_tTex1di1a[i2], i1, out_i1); + InterlockedCompareExchange(g_tTex1di1a[i2], i1b, i1c, out_i1); + InterlockedExchange(g_tTex1di1a[i2], i1, out_i1); + InterlockedMax(g_tTex1di1a[i2], i1b); + InterlockedMax(g_tTex1di1a[i2], i1, out_i1); + InterlockedMin(g_tTex1di1a[i2], i1b); + InterlockedMin(g_tTex1di1a[i2], i1, out_i1); + InterlockedOr(g_tTex1di1a[i2], i1b); + InterlockedOr(g_tTex1di1a[i2], i1, out_i1); + InterlockedXor(g_tTex1di1a[i2], i1b); + InterlockedXor(g_tTex1di1a[i2], i1, out_i1); + + // 1D array uint + InterlockedAdd(g_tTex1du1a[u2], u1); + InterlockedAdd(g_tTex1du1a[u2], u1, out_u1); + InterlockedAnd(g_tTex1du1a[u2], u1); + InterlockedAnd(g_tTex1du1a[u2], u1, out_u1); + InterlockedCompareExchange(g_tTex1du1a[u2], u1b, u1c, out_u1); + InterlockedExchange(g_tTex1du1a[u2], u1, out_u1); + InterlockedMax(g_tTex1du1a[u2], u1); + InterlockedMax(g_tTex1du1a[u2], u1, out_u1); + InterlockedMin(g_tTex1du1a[u2], u1); + InterlockedMin(g_tTex1du1a[u2], u1, out_u1); + InterlockedOr(g_tTex1du1a[u2], u1); + InterlockedOr(g_tTex1du1a[u2], u1, out_u1); + InterlockedXor(g_tTex1du1a[u2], u1); + InterlockedXor(g_tTex1du1a[u2], u1, out_u1); + + // 2D array int + InterlockedAdd(g_tTex1di1a[i2], i1b); + InterlockedAdd(g_tTex1di1a[i2], i1, out_i1); + InterlockedAnd(g_tTex1di1a[i2], i1b); + InterlockedAnd(g_tTex1di1a[i2], i1, out_i1); + InterlockedCompareExchange(g_tTex1di1a[i2], i1b, i1c, out_i1); + InterlockedExchange(g_tTex1di1a[i2], i1, out_i1); + InterlockedMax(g_tTex1di1a[i2], i1b); + InterlockedMax(g_tTex1di1a[i2], i1, out_i1); + InterlockedMin(g_tTex1di1a[i2], i1b); + InterlockedMin(g_tTex1di1a[i2], i1, out_i1); + InterlockedOr(g_tTex1di1a[i2], i1b); + InterlockedOr(g_tTex1di1a[i2], i1, out_i1); + InterlockedXor(g_tTex1di1a[i2], i1b); + InterlockedXor(g_tTex1di1a[i2], i1, out_i1); + + // 2D array uint + InterlockedAdd(g_tTex1du1a[u2], u1); + InterlockedAdd(g_tTex1du1a[u2], u1, out_u1); + InterlockedAnd(g_tTex1du1a[u2], u1); + InterlockedAnd(g_tTex1du1a[u2], u1, out_u1); + InterlockedCompareExchange(g_tTex1du1a[u2], u1b, u1c, out_u1); + InterlockedExchange(g_tTex1du1a[u2], u1, out_u1); + InterlockedMax(g_tTex1du1a[u2], u1); + InterlockedMax(g_tTex1du1a[u2], u1, out_u1); + InterlockedMin(g_tTex1du1a[u2], u1); + InterlockedMin(g_tTex1du1a[u2], u1, out_u1); + InterlockedOr(g_tTex1du1a[u2], u1); + InterlockedOr(g_tTex1du1a[u2], u1, out_u1); + InterlockedXor(g_tTex1du1a[u2], u1); + InterlockedXor(g_tTex1du1a[u2], u1, out_u1); + + // buffer int + InterlockedAdd(g_tBuffI[i1], i1b); + InterlockedAdd(g_tBuffI[i1], i1, out_i1); + InterlockedAnd(g_tBuffI[i1], i1b); + InterlockedAnd(g_tBuffI[i1], i1, out_i1); + InterlockedCompareExchange(g_tBuffI[i1], i1b, i1c, out_i1); + InterlockedExchange(g_tBuffI[i1], i1, out_i1); + InterlockedMax(g_tBuffI[i1], i1b); + InterlockedMax(g_tBuffI[i1], i1, out_i1); + InterlockedMin(g_tBuffI[i1], i1b); + InterlockedMin(g_tBuffI[i1], i1, out_i1); + InterlockedOr(g_tBuffI[i1], i1b); + InterlockedOr(g_tBuffI[i1], i1, out_i1); + InterlockedXor(g_tBuffI[i1], i1b); + InterlockedXor(g_tBuffI[i1], i1, out_i1); + + // buffer uint + InterlockedAdd(g_tBuffU[u1], u1); + InterlockedAdd(g_tBuffU[u1], u1, out_u1); + InterlockedAnd(g_tBuffU[u1], u1); + InterlockedAnd(g_tBuffU[u1], u1, out_u1); + InterlockedCompareExchange(g_tBuffU[u1], u1b, u1c, out_u1); + InterlockedExchange(g_tBuffU[u1], u1, out_u1); + InterlockedMax(g_tBuffU[u1], u1); + InterlockedMax(g_tBuffU[u1], u1, out_u1); + InterlockedMin(g_tBuffU[u1], u1); + InterlockedMin(g_tBuffU[u1], u1, out_u1); + InterlockedOr(g_tBuffU[u1], u1); + InterlockedOr(g_tBuffU[u1], u1, out_u1); + InterlockedXor(g_tBuffU[u1], u1); + InterlockedXor(g_tBuffU[u1], u1, out_u1); + + PS_OUTPUT psout; + psout.Color = 1.0; + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.rw.bracket.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.rw.bracket.frag new file mode 100644 index 0000000..9390e8d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.rw.bracket.frag @@ -0,0 +1,140 @@ +SamplerState g_sSamp : register(s0); + +RWTexture1D g_tTex1df4 : register(t0); +RWTexture1D g_tTex1di4; +RWTexture1D g_tTex1du4; + +RWTexture2D g_tTex2df4; +RWTexture2D g_tTex2di4; +RWTexture2D g_tTex2du4; + +RWTexture3D g_tTex3df4; +RWTexture3D g_tTex3di4; +RWTexture3D g_tTex3du4; + +RWTexture1DArray g_tTex1df4a; +RWTexture1DArray g_tTex1di4a; +RWTexture1DArray g_tTex1du4a; + +RWTexture2DArray g_tTex2df4a; +RWTexture2DArray g_tTex2di4a; +RWTexture2DArray g_tTex2du4a; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; +}; + +uniform int c1; +uniform int2 c2; +uniform int3 c3; +uniform int4 c4; + +uniform int o1; +uniform int2 o2; +uniform int3 o3; +uniform int4 o4; + +uniform float4 uf4; +uniform int4 ui4; +uniform uint4 uu4; + +int4 Fn1(in int4 x) { return x; } +uint4 Fn1(in uint4 x) { return x; } +float4 Fn1(in float4 x) { return x; } + +void Fn2(out int4 x) { x = int4(0); } +void Fn2(out uint4 x) { x = uint4(0); } +void Fn2(out float4 x) { x = float4(0); } + +float4 SomeValue() { return c4; } + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + // 1D + g_tTex1df4[c1]; + + float4 r00 = g_tTex1df4[c1]; + int4 r01 = g_tTex1di4[c1]; + uint4 r02 = g_tTex1du4[c1]; + + // 2D + float4 r10 = g_tTex2df4[c2]; + int4 r11 = g_tTex2di4[c2]; + uint4 r12 = g_tTex2du4[c2]; + + // 3D + float4 r20 = g_tTex3df4[c3]; + int4 r21 = g_tTex3di4[c3]; + uint4 r22 = g_tTex3du4[c3]; + + float4 lf4 = uf4; + + // Test as L-values + // 1D + g_tTex1df4[c1] = SomeValue(); // complex R-value + g_tTex1df4[c1] = lf4; + g_tTex1di4[c1] = int4(2,2,3,4); + g_tTex1du4[c1] = uint4(3,2,3,4); + + // Test some operator= things, which need to do both a load and a store. + float4 val1 = (g_tTex1df4[c1] *= 2.0); + g_tTex1df4[c1] -= 3.0; + g_tTex1df4[c1] += 4.0; + + g_tTex1di4[c1] /= 2; + g_tTex1di4[c1] %= 2; + g_tTex1di4[c1] &= 0xffff; + g_tTex1di4[c1] |= 0xf0f0; + g_tTex1di4[c1] <<= 2; + g_tTex1di4[c1] >>= 2; + + // 2D + g_tTex2df4[c2] = SomeValue(); // complex L-value + g_tTex2df4[c2] = lf4; + g_tTex2di4[c2] = int4(5,2,3,4); + g_tTex2du4[c2] = uint4(6,2,3,4); + + // 3D + g_tTex3df4[c3] = SomeValue(); // complex L-value + g_tTex3df4[c3] = lf4; + g_tTex3di4[c3] = int4(8,6,7,8); + g_tTex3du4[c3] = uint4(9,2,3,4); + + // Test function calling + Fn1(g_tTex1df4[c1]); // in + Fn1(g_tTex1di4[c1]); // in + Fn1(g_tTex1du4[c1]); // in + + Fn2(g_tTex1df4[c1]); // out + Fn2(g_tTex1di4[c1]); // out + Fn2(g_tTex1du4[c1]); // out + + // Test increment operators + // pre-ops + ++g_tTex1df4[c1]; + ++g_tTex1di4[c1]; + ++g_tTex1du4[c1]; + + --g_tTex1df4[c1]; + --g_tTex1di4[c1]; + --g_tTex1du4[c1]; + + // post-ops + g_tTex1df4[c1]++; + g_tTex1du4[c1]--; + g_tTex1di4[c1]++; + + g_tTex1df4[c1]--; + g_tTex1di4[c1]++; + g_tTex1du4[c1]--; + + // read and write + g_tTex1df4[1] = g_tTex2df4[int2(2,3)]; + + psout.Color = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.rw.register.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.rw.register.frag new file mode 100644 index 0000000..e82e419 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.rw.register.frag @@ -0,0 +1,18 @@ + +RWTexture1D g_tTex1df1 : register(u2); +RWBuffer g_tBuf1du1 : register(U3); + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; +}; + +PS_OUTPUT main() +{ + float r00 = g_tTex1df1[0]; + uint r01 = g_tBuf1du1[0]; + + PS_OUTPUT psout; + psout.Color = 1.0; + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.rw.scalar.bracket.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.rw.scalar.bracket.frag new file mode 100644 index 0000000..e185f05 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.rw.scalar.bracket.frag @@ -0,0 +1,140 @@ +SamplerState g_sSamp : register(s0); + +RWTexture1D g_tTex1df1; +RWTexture1D g_tTex1di1; +RWTexture1D g_tTex1du1; + +RWTexture2D g_tTex2df1; +RWTexture2D g_tTex2di1; +RWTexture2D g_tTex2du1; + +RWTexture3D g_tTex3df1; +RWTexture3D g_tTex3di1; +RWTexture3D g_tTex3du1; + +RWTexture1DArray g_tTex1df1a; +RWTexture1DArray g_tTex1di1a; +RWTexture1DArray g_tTex1du1a; + +RWTexture2DArray g_tTex2df1a; +RWTexture2DArray g_tTex2di1a; +RWTexture2DArray g_tTex2du1a; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; +}; + +uniform int c1; +uniform int2 c2; +uniform int3 c3; +uniform int4 c4; + +uniform int o1; +uniform int2 o2; +uniform int3 o3; +uniform int4 o4; + +uniform float uf1; +uniform int ui1; +uniform uint uu1; + +int Fn1(in int x) { return x; } +uint Fn1(in uint x) { return x; } +float Fn1(in float x) { return x; } + +void Fn2(out int x) { x = int(0); } +void Fn2(out uint x) { x = uint(0); } +void Fn2(out float x) { x = float(0); } + +float SomeValue() { return c1; } + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + // 1D + g_tTex1df1[c1]; + + float r00 = g_tTex1df1[c1]; + int r01 = g_tTex1di1[c1]; + uint r02 = g_tTex1du1[c1]; + + // 2D + float r10 = g_tTex2df1[c2]; + int r11 = g_tTex2di1[c2]; + uint r12 = g_tTex2du1[c2]; + + // 3D + float r20 = g_tTex3df1[c3]; + int r21 = g_tTex3di1[c3]; + uint r22 = g_tTex3du1[c3]; + + float lf1 = uf1; + + // Test as L-values + // 1D + g_tTex1df1[c1] = SomeValue(); // complex R-value + g_tTex1df1[c1] = lf1; + g_tTex1di1[c1] = int(2); + g_tTex1du1[c1] = uint(3); + + // Test some operator= things, which need to do both a load and a store. + float val1 = (g_tTex1df1[c1] *= 2.0); + g_tTex1df1[c1] -= 3.0; + g_tTex1df1[c1] += 4.0; + + g_tTex1di1[c1] /= 2; + g_tTex1di1[c1] %= 2; + g_tTex1di1[c1] &= 0xffff; + g_tTex1di1[c1] |= 0xf0f0; + g_tTex1di1[c1] <<= 2; + g_tTex1di1[c1] >>= 2; + + // 2D + g_tTex2df1[c2] = SomeValue(); // complex L-value + g_tTex2df1[c2] = lf1; + g_tTex2di1[c2] = int(5); + g_tTex2du1[c2] = uint(6); + + // 3D + g_tTex3df1[c3] = SomeValue(); // complex L-value + g_tTex3df1[c3] = lf1; + g_tTex3di1[c3] = int(8); + g_tTex3du1[c3] = uint(9); + + // Test function calling + Fn1(g_tTex1df1[c1]); // in + Fn1(g_tTex1di1[c1]); // in + Fn1(g_tTex1du1[c1]); // in + + Fn2(g_tTex1df1[c1]); // out + Fn2(g_tTex1di1[c1]); // out + Fn2(g_tTex1du1[c1]); // out + + // Test increment operators + // pre-ops + ++g_tTex1df1[c1]; + ++g_tTex1di1[c1]; + ++g_tTex1du1[c1]; + + --g_tTex1df1[c1]; + --g_tTex1di1[c1]; + --g_tTex1du1[c1]; + + // post-ops + g_tTex1df1[c1]++; + g_tTex1du1[c1]--; + g_tTex1di1[c1]++; + + g_tTex1df1[c1]--; + g_tTex1di1[c1]++; + g_tTex1du1[c1]--; + + // read and write + g_tTex1df1[1] = g_tTex2df1[int2(2, 3)]; + + psout.Color = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.rw.swizzle.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.rw.swizzle.frag new file mode 100644 index 0000000..356ed73 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.rw.swizzle.frag @@ -0,0 +1,28 @@ +RWTexture2D rwtx; +RWBuffer buf; + +float3 SomeValue() { return float3(1,2,3); } + +float4 main() : SV_Target0 +{ + int2 tc2 = { 0, 0 }; + int tc = 0; + + // Test swizzles and partial updates of L-values when writing to buffers and writable textures. + rwtx[tc2].zyx = float3(1,2,3); // full swizzle, simple RHS + rwtx[tc2].zyx = SomeValue(); // full swizzle, complex RHS + rwtx[tc2].zyx = 2; // full swizzle, modify op + + // Partial updates not yet supported. + // Partial values, which will use swizzles. + // buf[tc].yz = 42; // partial swizzle, simple RHS + // buf[tc].yz = SomeValue().x; // partial swizzle, complex RHS + // buf[tc].yz += 43; // partial swizzle, modify op + + // // Partial values, which will use index. + // buf[tc].y = 44; // single index, simple RHS + // buf[tc].y = SomeValue().x; // single index, complex RHS + // buf[tc].y += 45; // single index, modify op + + return 0.0; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.rw.vec2.bracket.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.rw.vec2.bracket.frag new file mode 100644 index 0000000..7b4a10a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.rw.vec2.bracket.frag @@ -0,0 +1,140 @@ +SamplerState g_sSamp : register(s0); + +RWTexture1D g_tTex1df2; +RWTexture1D g_tTex1di2; +RWTexture1D g_tTex1du2; + +RWTexture2D g_tTex2df2; +RWTexture2D g_tTex2di2; +RWTexture2D g_tTex2du2; + +RWTexture3D g_tTex3df2; +RWTexture3D g_tTex3di2; +RWTexture3D g_tTex3du2; + +RWTexture1DArray g_tTex1df2a; +RWTexture1DArray g_tTex1di2a; +RWTexture1DArray g_tTex1du2a; + +RWTexture2DArray g_tTex2df2a; +RWTexture2DArray g_tTex2di2a; +RWTexture2DArray g_tTex2du2a; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; +}; + +uniform int c1; +uniform int2 c2; +uniform int3 c3; +uniform int4 c4; + +uniform int o1; +uniform int2 o2; +uniform int3 o3; +uniform int4 o4; + +uniform float2 uf2; +uniform int2 ui2; +uniform uint2 uu2; + +int2 Fn1(in int2 x) { return x; } +uint2 Fn1(in uint2 x) { return x; } +float2 Fn1(in float2 x) { return x; } + +void Fn2(out int2 x) { x = int2(0,0); } +void Fn2(out uint2 x) { x = uint2(0,0); } +void Fn2(out float2 x) { x = float2(0,0); } + +float2 SomeValue() { return c2; } + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + // 1D + g_tTex1df2[c1]; + + float2 r00 = g_tTex1df2[c1]; + int2 r01 = g_tTex1di2[c1]; + uint2 r02 = g_tTex1du2[c1]; + + // 2D + float2 r10 = g_tTex2df2[c2]; + int2 r11 = g_tTex2di2[c2]; + uint2 r12 = g_tTex2du2[c2]; + + // 3D + float2 r20 = g_tTex3df2[c3]; + int2 r21 = g_tTex3di2[c3]; + uint2 r22 = g_tTex3du2[c3]; + + float2 lf2 = uf2; + + // Test as L-values + // 1D + g_tTex1df2[c1] = SomeValue(); // complex R-value + g_tTex1df2[c1] = lf2; + g_tTex1di2[c1] = int2(2,2); + g_tTex1du2[c1] = uint2(3,2); + + // Test some operator= things, which need to do both a load and a store. + float2 val1 = (g_tTex1df2[c1] *= 2.0); + g_tTex1df2[c1] -= 3.0; + g_tTex1df2[c1] += 4.0; + + g_tTex1di2[c1] /= 2; + g_tTex1di2[c1] %= 2; + g_tTex1di2[c1] &= 0xffff; + g_tTex1di2[c1] |= 0xf0f0; + g_tTex1di2[c1] <<= 2; + g_tTex1di2[c1] >>= 2; + + // 2D + g_tTex2df2[c2] = SomeValue(); // complex L-value + g_tTex2df2[c2] = lf2; + g_tTex2di2[c2] = int2(5,2); + g_tTex2du2[c2] = uint2(6,2); + + // 3D + g_tTex3df2[c3] = SomeValue(); // complex L-value + g_tTex3df2[c3] = lf2; + g_tTex3di2[c3] = int2(8,6); + g_tTex3du2[c3] = uint2(9,2); + + // Test function calling + Fn1(g_tTex1df2[c1]); // in + Fn1(g_tTex1di2[c1]); // in + Fn1(g_tTex1du2[c1]); // in + + Fn2(g_tTex1df2[c1]); // out + Fn2(g_tTex1di2[c1]); // out + Fn2(g_tTex1du2[c1]); // out + + // Test increment operators + // pre-ops + ++g_tTex1df2[c1]; + ++g_tTex1di2[c1]; + ++g_tTex1du2[c1]; + + --g_tTex1df2[c1]; + --g_tTex1di2[c1]; + --g_tTex1du2[c1]; + + // post-ops + g_tTex1df2[c1]++; + g_tTex1du2[c1]--; + g_tTex1di2[c1]++; + + g_tTex1df2[c1]--; + g_tTex1di2[c1]++; + g_tTex1du2[c1]--; + + // read and write + g_tTex1df2[1] = g_tTex2df2[int2(2,3)]; + + psout.Color = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.sample.array.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.sample.array.dx10.frag new file mode 100644 index 0000000..2c68004 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.sample.array.dx10.frag @@ -0,0 +1,43 @@ +SamplerState g_sSamp : register(s0); + +Texture1DArray g_tTex1df4a : register(t1); + +uniform Texture1DArray g_tTex1df4 : register(t0); +Texture1DArray g_tTex1di4; +Texture1DArray g_tTex1du4; + +Texture2DArray g_tTex2df4; +Texture2DArray g_tTex2di4; +Texture2DArray g_tTex2du4; + +TextureCubeArray g_tTexcdf4; +TextureCubeArray g_tTexcdi4; +TextureCubeArray g_tTexcdu4; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + float4 txval10 = g_tTex1df4 . Sample(g_sSamp, float2(0.1, 0.2)); + int4 txval11 = g_tTex1di4 . Sample(g_sSamp, float2(0.2, 0.3)); + uint4 txval12 = g_tTex1du4 . Sample(g_sSamp, float2(0.3, 0.4)); + + float4 txval20 = g_tTex2df4 . Sample(g_sSamp, float3(0.1, 0.2, 0.3)); + int4 txval21 = g_tTex2di4 . Sample(g_sSamp, float3(0.3, 0.4, 0.5)); + uint4 txval22 = g_tTex2du4 . Sample(g_sSamp, float3(0.5, 0.6, 0.7)); + + float4 txval40 = g_tTexcdf4 . Sample(g_sSamp, float4(0.1, 0.2, 0.3, 0.4)); + int4 txval41 = g_tTexcdi4 . Sample(g_sSamp, float4(0.4, 0.5, 0.6, 0.7)); + uint4 txval42 = g_tTexcdu4 . Sample(g_sSamp, float4(0.7, 0.8, 0.9, 1.0)); + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.sample.basic.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.sample.basic.dx10.frag new file mode 100644 index 0000000..03e83ef --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.sample.basic.dx10.frag @@ -0,0 +1,90 @@ +SamplerState g_sSamp : register(s0); +uniform sampler2D g_sSamp2d +{ + AddressU = MIRROR; + AddressV = WRAP; + MinLOD = 0; + MaxLOD = 10; + MaxAnisotropy = 2; + MipLodBias = 0.2; +}, g_sSamp2D_b; + +Texture1D g_tTex1df4a : register(t1); + +uniform Texture1D g_tTex1df4 : register(t0); +Texture1D g_tTex1di4; +Texture1D g_tTex1du4; + +Texture2D g_tTex2df4; +Texture2D g_tTex2di4; +Texture2D g_tTex2du4; + +Texture3D g_tTex3df4; +Texture3D g_tTex3di4; +Texture3D g_tTex3du4; + +TextureCube g_tTexcdf4; +TextureCube g_tTexcdi4; +TextureCube g_tTexcdu4; + +struct MemberTest +{ + int Sample; // in HLSL, method names are valid struct members. + int CalculateLevelOfDetail; // ... + int CalculateLevelOfDetailUnclamped; // ... + int Gather; // ... + int GetDimensions; // ... + int GetSamplePosition; // ... + int Load; // ... + int SampleBias; // ... + int SampleCmp; // ... + int SampleCmpLevelZero; // ... + int SampleGrad; // ... + int SampleLevel; // ... +}; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + MemberTest mtest; + mtest.CalculateLevelOfDetail = 1; // in HLSL, method names are valid struct members. + mtest.CalculateLevelOfDetailUnclamped = 1; // ... + mtest.Gather = 1; // ... + mtest.GetDimensions = 1; // ... + mtest.GetSamplePosition = 1; // ... + mtest.Load = 1; // ... + mtest.Sample = 1; // ... + mtest.SampleBias = 1; // ... + mtest.SampleCmp = 1; // ... + mtest.SampleCmpLevelZero = 1; // ... + mtest.SampleGrad = 1; // ... + mtest.SampleLevel = 1; // ... + + float4 txval10 = g_tTex1df4 . Sample(g_sSamp, 0.1); + int4 txval11 = g_tTex1di4 . Sample(g_sSamp, 0.2); + uint4 txval12 = g_tTex1du4 . Sample(g_sSamp, 0.3); + + float4 txval20 = g_tTex2df4 . Sample(g_sSamp, float2(0.1, 0.2)); + int4 txval21 = g_tTex2di4 . Sample(g_sSamp, float2(0.3, 0.4)); + uint4 txval22 = g_tTex2du4 . Sample(g_sSamp, float2(0.5, 0.6)); + + float4 txval30 = g_tTex3df4 . Sample(g_sSamp, float3(0.1, 0.2, 0.3)); + int4 txval31 = g_tTex3di4 . Sample(g_sSamp, float3(0.4, 0.5, 0.6)); + uint4 txval32 = g_tTex3du4 . Sample(g_sSamp, float3(0.7, 0.8, 0.9)); + + float4 txval40 = g_tTexcdf4 . Sample(g_sSamp, float3(0.1, 0.2, 0.3)); + int4 txval41 = g_tTexcdi4 . Sample(g_sSamp, float3(0.4, 0.5, 0.6)); + uint4 txval42 = g_tTexcdu4 . Sample(g_sSamp, float3(0.7, 0.8, 0.9)); + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.sample.offset.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.sample.offset.dx10.frag new file mode 100644 index 0000000..65ce7e4 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.sample.offset.dx10.frag @@ -0,0 +1,49 @@ +SamplerState g_sSamp : register(s0); + +Texture1D g_tTex1df4a : register(t1); + +uniform Texture1D g_tTex1df4 : register(t0); +Texture1D g_tTex1di4; +Texture1D g_tTex1du4; + +Texture2D g_tTex2df4; +Texture2D g_tTex2di4; +Texture2D g_tTex2du4; + +Texture3D g_tTex3df4; +Texture3D g_tTex3di4; +Texture3D g_tTex3du4; + +TextureCube g_tTexcdf4; +TextureCube g_tTexcdi4; +TextureCube g_tTexcdu4; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + float4 txval10 = g_tTex1df4 . Sample(g_sSamp, 0.1, 1); + int4 txval11 = g_tTex1di4 . Sample(g_sSamp, 0.2, 1); + uint4 txval12 = g_tTex1du4 . Sample(g_sSamp, 0.3, 1); + + float4 txval20 = g_tTex2df4 . Sample(g_sSamp, float2(0.1, 0.2), int2(1,0)); + int4 txval21 = g_tTex2di4 . Sample(g_sSamp, float2(0.3, 0.4), int2(1,1)); + uint4 txval22 = g_tTex2du4 . Sample(g_sSamp, float2(0.5, 0.6), int2(1,-1)); + + float4 txval30 = g_tTex3df4 . Sample(g_sSamp, float3(0.1, 0.2, 0.3), int3(1,0,1)); + int4 txval31 = g_tTex3di4 . Sample(g_sSamp, float3(0.4, 0.5, 0.6), int3(1,1,1)); + uint4 txval32 = g_tTex3du4 . Sample(g_sSamp, float3(0.7, 0.8, 0.9), int3(1,0,-1)); + + // There are no offset forms of cube textures, so we do not test them. + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.sample.offsetarray.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.sample.offsetarray.dx10.frag new file mode 100644 index 0000000..616c8dd --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.sample.offsetarray.dx10.frag @@ -0,0 +1,37 @@ +SamplerState g_sSamp : register(s0); + +Texture1DArray g_tTex1df4a : register(t1); + +uniform Texture1DArray g_tTex1df4 : register(t0); +Texture1DArray g_tTex1di4; +Texture1DArray g_tTex1du4; + +Texture2DArray g_tTex2df4; +Texture2DArray g_tTex2di4; +Texture2DArray g_tTex2du4; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + float4 txval10 = g_tTex1df4 . Sample(g_sSamp, float2(0.1, 0.2), 0); + int4 txval11 = g_tTex1di4 . Sample(g_sSamp, float2(0.2, 0.3), 1); + uint4 txval12 = g_tTex1du4 . Sample(g_sSamp, float2(0.3, 0.4), 2); + + float4 txval20 = g_tTex2df4 . Sample(g_sSamp, float3(0.1, 0.2, 0.3), int2(0,0)); + int4 txval21 = g_tTex2di4 . Sample(g_sSamp, float3(0.3, 0.4, 0.5), int2(0,0)); + uint4 txval22 = g_tTex2du4 . Sample(g_sSamp, float3(0.5, 0.6, 0.7), int2(0,1)); + + // No offset array forms for 3D or cube + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.sample.sub-vec4.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.sample.sub-vec4.dx10.frag new file mode 100644 index 0000000..991d976 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.sample.sub-vec4.dx10.frag @@ -0,0 +1,24 @@ +SamplerState g_sSamp : register(s0); + +Texture1D g_tTex1df1; +Texture1D g_tTex1df2; +Texture1D g_tTex1df3; +Texture1D g_tTex1df4; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; +}; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + float txval10 = g_tTex1df1 . Sample(g_sSamp, 0.1); + float2 txval11 = g_tTex1df2 . Sample(g_sSamp, 0.2); + float3 txval12 = g_tTex1df3 . Sample(g_sSamp, 0.2); + float4 txval13 = g_tTex1df4 . Sample(g_sSamp, 0.2); + + psout.Color = 1.0; + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplebias.array.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplebias.array.dx10.frag new file mode 100644 index 0000000..ba4e197 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplebias.array.dx10.frag @@ -0,0 +1,43 @@ +SamplerState g_sSamp : register(s0); + +Texture1DArray g_tTex1df4a : register(t1); + +uniform Texture1DArray g_tTex1df4 : register(t0); +Texture1DArray g_tTex1di4; +Texture1DArray g_tTex1du4; + +Texture2DArray g_tTex2df4; +Texture2DArray g_tTex2di4; +Texture2DArray g_tTex2du4; + +TextureCubeArray g_tTexcdf4; +TextureCubeArray g_tTexcdi4; +TextureCubeArray g_tTexcdu4; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + float4 txval10 = g_tTex1df4 . SampleBias(g_sSamp, float2(0.1, 0.2), 0.5); + int4 txval11 = g_tTex1di4 . SampleBias(g_sSamp, float2(0.2, 0.3), 0.5); + uint4 txval12 = g_tTex1du4 . SampleBias(g_sSamp, float2(0.3, 0.4), 0.5); + + float4 txval20 = g_tTex2df4 . SampleBias(g_sSamp, float3(0.1, 0.2, 0.3), 0.5); + int4 txval21 = g_tTex2di4 . SampleBias(g_sSamp, float3(0.3, 0.4, 0.5), 0.5); + uint4 txval22 = g_tTex2du4 . SampleBias(g_sSamp, float3(0.5, 0.6, 0.7), 0.5); + + float4 txval40 = g_tTexcdf4 . SampleBias(g_sSamp, float4(0.1, 0.2, 0.3, 0.4), 0.5); + int4 txval41 = g_tTexcdi4 . SampleBias(g_sSamp, float4(0.4, 0.5, 0.6, 0.7), 0.5); + uint4 txval42 = g_tTexcdu4 . SampleBias(g_sSamp, float4(0.7, 0.8, 0.9, 1.0), 0.5); + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplebias.basic.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplebias.basic.dx10.frag new file mode 100644 index 0000000..0913861 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplebias.basic.dx10.frag @@ -0,0 +1,51 @@ +SamplerState g_sSamp : register(s0); + +Texture1D g_tTex1df4a : register(t1); + +uniform Texture1D g_tTex1df4 : register(t0); +Texture1D g_tTex1di4; +Texture1D g_tTex1du4; + +Texture2D g_tTex2df4; +Texture2D g_tTex2di4; +Texture2D g_tTex2du4; + +Texture3D g_tTex3df4; +Texture3D g_tTex3di4; +Texture3D g_tTex3du4; + +TextureCube g_tTexcdf4; +TextureCube g_tTexcdi4; +TextureCube g_tTexcdu4; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + float4 txval10 = g_tTex1df4 . SampleBias(g_sSamp, 0.1, 0.5); + int4 txval11 = g_tTex1di4 . SampleBias(g_sSamp, 0.2, 0.5); + uint4 txval12 = g_tTex1du4 . SampleBias(g_sSamp, 0.3, 0.5); + + float4 txval20 = g_tTex2df4 . SampleBias(g_sSamp, float2(0.1, 0.2), 0.5); + int4 txval21 = g_tTex2di4 . SampleBias(g_sSamp, float2(0.3, 0.4), 0.5); + uint4 txval22 = g_tTex2du4 . SampleBias(g_sSamp, float2(0.5, 0.6), 0.5); + + float4 txval30 = g_tTex3df4 . SampleBias(g_sSamp, float3(0.1, 0.2, 0.3), 0.5); + int4 txval31 = g_tTex3di4 . SampleBias(g_sSamp, float3(0.4, 0.5, 0.6), 0.5); + uint4 txval32 = g_tTex3du4 . SampleBias(g_sSamp, float3(0.7, 0.8, 0.9), 0.5); + + float4 txval40 = g_tTexcdf4 . SampleBias(g_sSamp, float3(0.1, 0.2, 0.3), 0.5); + int4 txval41 = g_tTexcdi4 . SampleBias(g_sSamp, float3(0.4, 0.5, 0.6), 0.5); + uint4 txval42 = g_tTexcdu4 . SampleBias(g_sSamp, float3(0.7, 0.8, 0.9), 0.5); + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplebias.offset.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplebias.offset.dx10.frag new file mode 100644 index 0000000..6f2f94c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplebias.offset.dx10.frag @@ -0,0 +1,49 @@ +SamplerState g_sSamp : register(s0); + +Texture1D g_tTex1df4a : register(t1); + +uniform Texture1D g_tTex1df4 : register(t0); +Texture1D g_tTex1di4; +Texture1D g_tTex1du4; + +Texture2D g_tTex2df4; +Texture2D g_tTex2di4; +Texture2D g_tTex2du4; + +Texture3D g_tTex3df4; +Texture3D g_tTex3di4; +Texture3D g_tTex3du4; + +TextureCube g_tTexcdf4; +TextureCube g_tTexcdi4; +TextureCube g_tTexcdu4; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + float4 txval10 = g_tTex1df4 . SampleBias(g_sSamp, 0.1, 0.5, 1); + int4 txval11 = g_tTex1di4 . SampleBias(g_sSamp, 0.2, 0.5, 1); + uint4 txval12 = g_tTex1du4 . SampleBias(g_sSamp, 0.3, 0.5, 1); + + float4 txval20 = g_tTex2df4 . SampleBias(g_sSamp, float2(0.1, 0.2), 0.5, int2(1,0)); + int4 txval21 = g_tTex2di4 . SampleBias(g_sSamp, float2(0.3, 0.4), 0.5, int2(1,1)); + uint4 txval22 = g_tTex2du4 . SampleBias(g_sSamp, float2(0.5, 0.6), 0.5, int2(1,-1)); + + float4 txval30 = g_tTex3df4 . SampleBias(g_sSamp, float3(0.1, 0.2, 0.3), 0.5, int3(1,0,1)); + int4 txval31 = g_tTex3di4 . SampleBias(g_sSamp, float3(0.4, 0.5, 0.6), 0.5, int3(1,1,1)); + uint4 txval32 = g_tTex3du4 . SampleBias(g_sSamp, float3(0.7, 0.8, 0.9), 0.5, int3(1,0,-1)); + + // There are no offset forms of cube textures, so we do not test them. + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplebias.offsetarray.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplebias.offsetarray.dx10.frag new file mode 100644 index 0000000..b5f6296 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplebias.offsetarray.dx10.frag @@ -0,0 +1,37 @@ +SamplerState g_sSamp : register(s0); + +Texture1DArray g_tTex1df4a : register(t1); + +uniform Texture1DArray g_tTex1df4 : register(t0); +Texture1DArray g_tTex1di4; +Texture1DArray g_tTex1du4; + +Texture2DArray g_tTex2df4; +Texture2DArray g_tTex2di4; +Texture2DArray g_tTex2du4; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + float4 txval10 = g_tTex1df4 . SampleBias(g_sSamp, float2(0.1, 0.2), 0.5, 0); + int4 txval11 = g_tTex1di4 . SampleBias(g_sSamp, float2(0.2, 0.3), 0.5, 1); + uint4 txval12 = g_tTex1du4 . SampleBias(g_sSamp, float2(0.3, 0.4), 0.5, 2); + + float4 txval20 = g_tTex2df4 . SampleBias(g_sSamp, float3(0.1, 0.2, 0.3), 0.5, int2(0,0)); + int4 txval21 = g_tTex2di4 . SampleBias(g_sSamp, float3(0.3, 0.4, 0.5), 0.5, int2(0,0)); + uint4 txval22 = g_tTex2du4 . SampleBias(g_sSamp, float3(0.5, 0.6, 0.7), 0.5, int2(0,1)); + + // No offset array forms for 3D or cube + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplecmp.array.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplecmp.array.dx10.frag new file mode 100644 index 0000000..f0e0a3d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplecmp.array.dx10.frag @@ -0,0 +1,60 @@ +SamplerComparisonState g_sSamp : register(s0); + +uniform Texture1D g_tTex1df4 : register(t0); +Texture1D g_tTex1di4; +Texture1D g_tTex1du4; + +Texture2D g_tTex2df4; +Texture2D g_tTex2di4; +Texture2D g_tTex2du4; + +Texture3D g_tTex3df4; +Texture3D g_tTex3di4; +Texture3D g_tTex3du4; + +TextureCube g_tTexcdf4; +TextureCube g_tTexcdi4; +TextureCube g_tTexcdu4; + +Texture1DArray g_tTex1df4a; +Texture1DArray g_tTex1di4a; +Texture1DArray g_tTex1du4a; + +Texture2DArray g_tTex2df4a; +Texture2DArray g_tTex2di4a; +Texture2DArray g_tTex2du4a; + +TextureCubeArray g_tTexcdf4a; +TextureCubeArray g_tTexcdi4a; +TextureCubeArray g_tTexcdu4a; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + // 1DArray + float r10 = g_tTex1df4a . SampleCmp(g_sSamp, float2(0.1, 0.2), 0.75); + float r12 = g_tTex1di4a . SampleCmp(g_sSamp, float2(0.1, 0.2), 0.75); + float r14 = g_tTex1du4a . SampleCmp(g_sSamp, float2(0.1, 0.2), 0.75); + + // 2DArray + float r30 = g_tTex2df4a . SampleCmp(g_sSamp, float3(0.1, 0.2, 0.3), 0.75); + float r32 = g_tTex2di4a . SampleCmp(g_sSamp, float3(0.1, 0.2, 0.3), 0.75); + float r34 = g_tTex2du4a . SampleCmp(g_sSamp, float3(0.1, 0.2, 0.3), 0.75); + + // CubeArray + float r60 = g_tTexcdf4a . SampleCmp(g_sSamp, float4(0.1, 0.2, 0.3, 0.4), 0.75); + float r62 = g_tTexcdi4a . SampleCmp(g_sSamp, float4(0.1, 0.2, 0.3, 0.4), 0.75); + float r64 = g_tTexcdu4a . SampleCmp(g_sSamp, float4(0.1, 0.2, 0.3, 0.4), 0.75); + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplecmp.basic.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplecmp.basic.dx10.frag new file mode 100644 index 0000000..cb73e14 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplecmp.basic.dx10.frag @@ -0,0 +1,61 @@ +SamplerComparisonState g_sSamp : register(s0); + +uniform Texture1D g_tTex1df4 : register(t0); +Texture1D g_tTex1di4; +Texture1D g_tTex1du4; + +Texture2D g_tTex2df4; +Texture2D g_tTex2di4; +Texture2D g_tTex2du4; + +Texture3D g_tTex3df4; +Texture3D g_tTex3di4; +Texture3D g_tTex3du4; + +TextureCube g_tTexcdf4; +TextureCube g_tTexcdi4; +TextureCube g_tTexcdu4; + +Texture1DArray g_tTex1df4a; +Texture1DArray g_tTex1di4a; +Texture1DArray g_tTex1du4a; + +Texture2DArray g_tTex2df4a; +Texture2DArray g_tTex2di4a; +Texture2DArray g_tTex2du4a; + +TextureCubeArray g_tTexcdf4a; +TextureCubeArray g_tTexcdi4a; +TextureCubeArray g_tTexcdu4a; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + // 1D + float r00 = g_tTex1df4 . SampleCmp(g_sSamp, 0.1, 0.75); + float r02 = g_tTex1di4 . SampleCmp(g_sSamp, 0.1, 0.75); + float r04 = g_tTex1du4 . SampleCmp(g_sSamp, 0.1, 0.75); + + // 2D + float r20 = g_tTex2df4 . SampleCmp(g_sSamp, float2(0.1, 0.2), 0.75); + float r22 = g_tTex2di4 . SampleCmp(g_sSamp, float2(0.1, 0.2), 0.75); + float r24 = g_tTex2du4 . SampleCmp(g_sSamp, float2(0.1, 0.2), 0.75); + + // *** There's no SampleCmp on 3D textures + + float r50 = g_tTexcdf4 . SampleCmp(g_sSamp, float3(0.1, 0.2, 0.3), 0.75); + float r52 = g_tTexcdi4 . SampleCmp(g_sSamp, float3(0.1, 0.2, 0.3), 0.75); + float r54 = g_tTexcdu4 . SampleCmp(g_sSamp, float3(0.1, 0.2, 0.3), 0.75); + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplecmp.offset.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplecmp.offset.dx10.frag new file mode 100644 index 0000000..444dac8 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplecmp.offset.dx10.frag @@ -0,0 +1,66 @@ +SamplerComparisonState g_sSamp : register(s0); + +uniform Texture1D g_tTex1df4 : register(t0); +Texture1D g_tTex1di4; +Texture1D g_tTex1du4; + +Texture2D g_tTex2df4; +Texture2D g_tTex2di4; +Texture2D g_tTex2du4; + +Texture3D g_tTex3df4; +Texture3D g_tTex3di4; +Texture3D g_tTex3du4; + +TextureCube g_tTexcdf4; +TextureCube g_tTexcdi4; +TextureCube g_tTexcdu4; + +Texture1DArray g_tTex1df4a; +Texture1DArray g_tTex1di4a; +Texture1DArray g_tTex1du4a; + +Texture2DArray g_tTex2df4a; +Texture2DArray g_tTex2di4a; +Texture2DArray g_tTex2du4a; + +TextureCubeArray g_tTexcdf4a; +TextureCubeArray g_tTexcdi4a; +TextureCubeArray g_tTexcdu4a; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + // 1D + float r01 = g_tTex1df4 . SampleCmp(g_sSamp, 0.1, 0.75, 2); + float r03 = g_tTex1di4 . SampleCmp(g_sSamp, 0.1, 0.75, 2); + float r05 = g_tTex1du4 . SampleCmp(g_sSamp, 0.1, 0.75, 2); + + // 2D + float r21 = g_tTex2df4 . SampleCmp(g_sSamp, float2(0.1, 0.2), 0.75, int2(2,3)); + float r23 = g_tTex2di4 . SampleCmp(g_sSamp, float2(0.1, 0.2), 0.75, int2(2,3)); + float r25 = g_tTex2du4 . SampleCmp(g_sSamp, float2(0.1, 0.2), 0.75, int2(2,3)); + + // *** There's no SampleCmp on 3D textures + + // This page: https://msdn.microsoft.com/en-us/library/windows/desktop/bb509696(v=vs.85).aspx + // claims offset is supported for cube textures, but FXC does not accept it, and that does + // not match other methods, so it may be a documentation bug. Those lines are commented + // out below. + // Cube + // float r51 = g_tTexcdf4 . SampleCmp(g_sSamp, float3(0.1, 0.2, 0.3), 0.75, int3(2,3,4)); + // float r53 = g_tTexcdi4 . SampleCmp(g_sSamp, float3(0.1, 0.2, 0.3), 0.75, int3(2,3,4)); + // float r55 = g_tTexcdu4 . SampleCmp(g_sSamp, float3(0.1, 0.2, 0.3), 0.75, int3(2,3,4)); + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplecmp.offsetarray.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplecmp.offsetarray.dx10.frag new file mode 100644 index 0000000..319d5cd --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplecmp.offsetarray.dx10.frag @@ -0,0 +1,67 @@ +SamplerComparisonState g_sSamp : register(s0); + +uniform Texture1D g_tTex1df4 : register(t0); +Texture1D g_tTex1di4; +Texture1D g_tTex1du4; + +Texture2D g_tTex2df4; +Texture2D g_tTex2di4; +Texture2D g_tTex2du4; + +Texture3D g_tTex3df4; +Texture3D g_tTex3di4; +Texture3D g_tTex3du4; + +TextureCube g_tTexcdf4; +TextureCube g_tTexcdi4; +TextureCube g_tTexcdu4; + +Texture1DArray g_tTex1df4a; +Texture1DArray g_tTex1di4a; +Texture1DArray g_tTex1du4a; + +Texture2DArray g_tTex2df4a; +Texture2DArray g_tTex2di4a; +Texture2DArray g_tTex2du4a; + +TextureCubeArray g_tTexcdf4a; +TextureCubeArray g_tTexcdi4a; +TextureCubeArray g_tTexcdu4a; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + // 1DArray + float r11 = g_tTex1df4a . SampleCmp(g_sSamp, float2(0.1, 0.2), 0.75, 2); + float r13 = g_tTex1di4a . SampleCmp(g_sSamp, float2(0.1, 0.2), 0.75, 2); + float r15 = g_tTex1du4a . SampleCmp(g_sSamp, float2(0.1, 0.2), 0.75, 2); + + // 2DArray + float r31 = g_tTex2df4a . SampleCmp(g_sSamp, float3(0.1, 0.2, 0.3), 0.75, int2(2,3)); + float r33 = g_tTex2di4a . SampleCmp(g_sSamp, float3(0.1, 0.2, 0.3), 0.75, int2(2,3)); + float r35 = g_tTex2du4a . SampleCmp(g_sSamp, float3(0.1, 0.2, 0.3), 0.75, int2(2,3)); + + // *** There's no SampleCmp on 3D textures + + // This page: https://msdn.microsoft.com/en-us/library/windows/desktop/bb509696(v=vs.85).aspx + // claims offset is supported for cube textures, but FXC does not accept it, and that does + // not match other methods, so it may be a documentation bug. Those lines are commented + // out below. + + // CubeArray + // float r61 = g_tTexcdf4a . SampleCmp(g_sSamp, float4(0.1, 0.2, 0.3, 0.4), 0.75, int3(2,3,4)); + // float r63 = g_tTexcdi4a . SampleCmp(g_sSamp, float4(0.1, 0.2, 0.3, 0.4), 0.75, int3(2,3,4)); + // float r65 = g_tTexcdu4a . SampleCmp(g_sSamp, float4(0.1, 0.2, 0.3, 0.4), 0.75, int3(2,3,4)); + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplecmplevelzero.array.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplecmplevelzero.array.dx10.frag new file mode 100644 index 0000000..41b6a79 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplecmplevelzero.array.dx10.frag @@ -0,0 +1,60 @@ +SamplerComparisonState g_sSamp : register(s0); + +uniform Texture1D g_tTex1df4 : register(t0); +Texture1D g_tTex1di4; +Texture1D g_tTex1du4; + +Texture2D g_tTex2df4; +Texture2D g_tTex2di4; +Texture2D g_tTex2du4; + +Texture3D g_tTex3df4; +Texture3D g_tTex3di4; +Texture3D g_tTex3du4; + +TextureCube g_tTexcdf4; +TextureCube g_tTexcdi4; +TextureCube g_tTexcdu4; + +Texture1DArray g_tTex1df4a; +Texture1DArray g_tTex1di4a; +Texture1DArray g_tTex1du4a; + +Texture2DArray g_tTex2df4a; +Texture2DArray g_tTex2di4a; +Texture2DArray g_tTex2du4a; + +TextureCubeArray g_tTexcdf4a; +TextureCubeArray g_tTexcdi4a; +TextureCubeArray g_tTexcdu4a; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + // 1DArray + float r10 = g_tTex1df4a . SampleCmpLevelZero(g_sSamp, float2(0.1, 0.2), 0.75); + float r12 = g_tTex1di4a . SampleCmpLevelZero(g_sSamp, float2(0.1, 0.2), 0.75); + float r14 = g_tTex1du4a . SampleCmpLevelZero(g_sSamp, float2(0.1, 0.2), 0.75); + + // 2DArray + float r30 = g_tTex2df4a . SampleCmpLevelZero(g_sSamp, float3(0.1, 0.2, 0.3), 0.75); + float r32 = g_tTex2di4a . SampleCmpLevelZero(g_sSamp, float3(0.1, 0.2, 0.3), 0.75); + float r34 = g_tTex2du4a . SampleCmpLevelZero(g_sSamp, float3(0.1, 0.2, 0.3), 0.75); + + // CubeArray + float r60 = g_tTexcdf4a . SampleCmpLevelZero(g_sSamp, float4(0.1, 0.2, 0.3, 0.4), 0.75); + float r62 = g_tTexcdi4a . SampleCmpLevelZero(g_sSamp, float4(0.1, 0.2, 0.3, 0.4), 0.75); + float r64 = g_tTexcdu4a . SampleCmpLevelZero(g_sSamp, float4(0.1, 0.2, 0.3, 0.4), 0.75); + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplecmplevelzero.basic.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplecmplevelzero.basic.dx10.frag new file mode 100644 index 0000000..841530a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplecmplevelzero.basic.dx10.frag @@ -0,0 +1,61 @@ +SamplerComparisonState g_sSamp : register(s0); + +uniform Texture1D g_tTex1df4 : register(t0); +Texture1D g_tTex1di4; +Texture1D g_tTex1du4; + +Texture2D g_tTex2df4; +Texture2D g_tTex2di4; +Texture2D g_tTex2du4; + +Texture3D g_tTex3df4; +Texture3D g_tTex3di4; +Texture3D g_tTex3du4; + +TextureCube g_tTexcdf4; +TextureCube g_tTexcdi4; +TextureCube g_tTexcdu4; + +Texture1DArray g_tTex1df4a; +Texture1DArray g_tTex1di4a; +Texture1DArray g_tTex1du4a; + +Texture2DArray g_tTex2df4a; +Texture2DArray g_tTex2di4a; +Texture2DArray g_tTex2du4a; + +TextureCubeArray g_tTexcdf4a; +TextureCubeArray g_tTexcdi4a; +TextureCubeArray g_tTexcdu4a; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + // 1D + float r00 = g_tTex1df4 . SampleCmpLevelZero(g_sSamp, 0.1, 0.75); + float r02 = g_tTex1di4 . SampleCmpLevelZero(g_sSamp, 0.1, 0.75); + float r04 = g_tTex1du4 . SampleCmpLevelZero(g_sSamp, 0.1, 0.75); + + // 2D + float r20 = g_tTex2df4 . SampleCmpLevelZero(g_sSamp, float2(0.1, 0.2), 0.75); + float r22 = g_tTex2di4 . SampleCmpLevelZero(g_sSamp, float2(0.1, 0.2), 0.75); + float r24 = g_tTex2du4 . SampleCmpLevelZero(g_sSamp, float2(0.1, 0.2), 0.75); + + // *** There's no SampleCmpLevelZero on 3D textures + + float r50 = g_tTexcdf4 . SampleCmpLevelZero(g_sSamp, float3(0.1, 0.2, 0.3), 0.75); + float r52 = g_tTexcdi4 . SampleCmpLevelZero(g_sSamp, float3(0.1, 0.2, 0.3), 0.75); + float r54 = g_tTexcdu4 . SampleCmpLevelZero(g_sSamp, float3(0.1, 0.2, 0.3), 0.75); + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplecmplevelzero.offset.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplecmplevelzero.offset.dx10.frag new file mode 100644 index 0000000..290774e --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplecmplevelzero.offset.dx10.frag @@ -0,0 +1,66 @@ +SamplerComparisonState g_sSamp : register(s0); + +uniform Texture1D g_tTex1df4 : register(t0); +Texture1D g_tTex1di4; +Texture1D g_tTex1du4; + +Texture2D g_tTex2df4; +Texture2D g_tTex2di4; +Texture2D g_tTex2du4; + +Texture3D g_tTex3df4; +Texture3D g_tTex3di4; +Texture3D g_tTex3du4; + +TextureCube g_tTexcdf4; +TextureCube g_tTexcdi4; +TextureCube g_tTexcdu4; + +Texture1DArray g_tTex1df4a; +Texture1DArray g_tTex1di4a; +Texture1DArray g_tTex1du4a; + +Texture2DArray g_tTex2df4a; +Texture2DArray g_tTex2di4a; +Texture2DArray g_tTex2du4a; + +TextureCubeArray g_tTexcdf4a; +TextureCubeArray g_tTexcdi4a; +TextureCubeArray g_tTexcdu4a; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + // 1D + float r01 = g_tTex1df4 . SampleCmpLevelZero(g_sSamp, 0.1, 0.75, 2); + float r03 = g_tTex1di4 . SampleCmpLevelZero(g_sSamp, 0.1, 0.75, 2); + float r05 = g_tTex1du4 . SampleCmpLevelZero(g_sSamp, 0.1, 0.75, 2); + + // 2D + float r21 = g_tTex2df4 . SampleCmpLevelZero(g_sSamp, float2(0.1, 0.2), 0.75, int2(2,3)); + float r23 = g_tTex2di4 . SampleCmpLevelZero(g_sSamp, float2(0.1, 0.2), 0.75, int2(2,3)); + float r25 = g_tTex2du4 . SampleCmpLevelZero(g_sSamp, float2(0.1, 0.2), 0.75, int2(2,3)); + + // *** There's no SampleCmpLevelZero on 3D textures + + // This page: https://msdn.microsoft.com/en-us/library/windows/desktop/bb509696(v=vs.85).aspx + // claims offset is supported for cube textures, but FXC does not accept it, and that does + // not match other methods, so it may be a documentation bug. Those lines are commented + // out below. + // Cube + // float r51 = g_tTexcdf4 . SampleCmpLevelZero(g_sSamp, float3(0.1, 0.2, 0.3), 0.75, int2(2,3)); + // float r53 = g_tTexcdi4 . SampleCmpLevelZero(g_sSamp, float3(0.1, 0.2, 0.3), 0.75, int2(2,3)); + // float r55 = g_tTexcdu4 . SampleCmpLevelZero(g_sSamp, float3(0.1, 0.2, 0.3), 0.75, int2(2,3)); + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplecmplevelzero.offsetarray.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplecmplevelzero.offsetarray.dx10.frag new file mode 100644 index 0000000..b57502e --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplecmplevelzero.offsetarray.dx10.frag @@ -0,0 +1,67 @@ +SamplerComparisonState g_sSamp : register(s0); + +uniform Texture1D g_tTex1df4 : register(t0); +Texture1D g_tTex1di4; +Texture1D g_tTex1du4; + +Texture2D g_tTex2df4; +Texture2D g_tTex2di4; +Texture2D g_tTex2du4; + +Texture3D g_tTex3df4; +Texture3D g_tTex3di4; +Texture3D g_tTex3du4; + +TextureCube g_tTexcdf4; +TextureCube g_tTexcdi4; +TextureCube g_tTexcdu4; + +Texture1DArray g_tTex1df4a; +Texture1DArray g_tTex1di4a; +Texture1DArray g_tTex1du4a; + +Texture2DArray g_tTex2df4a; +Texture2DArray g_tTex2di4a; +Texture2DArray g_tTex2du4a; + +TextureCubeArray g_tTexcdf4a; +TextureCubeArray g_tTexcdi4a; +TextureCubeArray g_tTexcdu4a; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + // 1DArray + float r11 = g_tTex1df4a . SampleCmpLevelZero(g_sSamp, float2(0.1, 0.2), 0.75, 2); + float r13 = g_tTex1di4a . SampleCmpLevelZero(g_sSamp, float2(0.1, 0.2), 0.75, 2); + float r15 = g_tTex1du4a . SampleCmpLevelZero(g_sSamp, float2(0.1, 0.2), 0.75, 2); + + // 2DArray + float r31 = g_tTex2df4a . SampleCmpLevelZero(g_sSamp, float3(0.1, 0.2, 0.3), 0.75, int2(2,3)); + float r33 = g_tTex2di4a . SampleCmpLevelZero(g_sSamp, float3(0.1, 0.2, 0.3), 0.75, int2(2,3)); + float r35 = g_tTex2du4a . SampleCmpLevelZero(g_sSamp, float3(0.1, 0.2, 0.3), 0.75, int2(2,3)); + + // *** There's no SampleCmpLevelZero on 3D textures + + // This page: https://msdn.microsoft.com/en-us/library/windows/desktop/bb509696(v=vs.85).aspx + // claims offset is supported for cube textures, but FXC does not accept it, and that does + // not match other methods, so it may be a documentation bug. Those lines are commented + // out below. + + // CubeArray + // float r61 = g_tTexcdf4a . SampleCmpLevelZero(g_sSamp, float4(0.1, 0.2, 0.3, 0.4), 0.75, int3(2,3,4)); + // float r63 = g_tTexcdi4a . SampleCmpLevelZero(g_sSamp, float4(0.1, 0.2, 0.3, 0.4), 0.75, int3(2,3,4)); + // float r65 = g_tTexcdu4a . SampleCmpLevelZero(g_sSamp, float4(0.1, 0.2, 0.3, 0.4), 0.75, int3(2,3,4)); + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplegrad.array.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplegrad.array.dx10.frag new file mode 100644 index 0000000..c442b7f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplegrad.array.dx10.frag @@ -0,0 +1,43 @@ +SamplerState g_sSamp : register(s0); + +Texture1DArray g_tTex1df4a : register(t1); + +uniform Texture1DArray g_tTex1df4 : register(t0); +Texture1DArray g_tTex1di4; +Texture1DArray g_tTex1du4; + +Texture2DArray g_tTex2df4; +Texture2DArray g_tTex2di4; +Texture2DArray g_tTex2du4; + +TextureCubeArray g_tTexcdf4; +TextureCubeArray g_tTexcdi4; +TextureCubeArray g_tTexcdu4; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + float4 txval10 = g_tTex1df4 . SampleGrad(g_sSamp, float2(0.1, 0.2), 1.1, 1.2); + int4 txval11 = g_tTex1di4 . SampleGrad(g_sSamp, float2(0.1, 0.2), 1.1, 1.2); + uint4 txval12 = g_tTex1du4 . SampleGrad(g_sSamp, float2(0.1, 0.2), 1.1, 1.2); + + float4 txval20 = g_tTex2df4 . SampleGrad(g_sSamp, float3(0.1, 0.2, 0.3), float2(1.1, 1.2), float2(1.1, 1.2)); + int4 txval21 = g_tTex2di4 . SampleGrad(g_sSamp, float3(0.1, 0.2, 0.3), float2(1.1, 1.2), float2(1.1, 1.2)); + uint4 txval22 = g_tTex2du4 . SampleGrad(g_sSamp, float3(0.1, 0.2, 0.3), float2(1.1, 1.2), float2(1.1, 1.2)); + + float4 txval40 = g_tTexcdf4 . SampleGrad(g_sSamp, float4(0.1, 0.2, 0.3, 0.4), float3(1.1, 1.2, 1.3), float3(1.1, 1.2, 1.3)); + int4 txval41 = g_tTexcdi4 . SampleGrad(g_sSamp, float4(0.1, 0.2, 0.3, 0.4), float3(1.1, 1.2, 1.3), float3(1.1, 1.2, 1.3)); + uint4 txval42 = g_tTexcdu4 . SampleGrad(g_sSamp, float4(0.1, 0.2, 0.3, 0.4), float3(1.1, 1.2, 1.3), float3(1.1, 1.2, 1.3)); + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplegrad.basic.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplegrad.basic.dx10.frag new file mode 100644 index 0000000..84236f2 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplegrad.basic.dx10.frag @@ -0,0 +1,51 @@ +SamplerState g_sSamp : register(s0); + +Texture1D g_tTex1df4a : register(t1); + +uniform Texture1D g_tTex1df4 : register(t0); +Texture1D g_tTex1di4; +Texture1D g_tTex1du4; + +Texture2D g_tTex2df4; +Texture2D g_tTex2di4; +Texture2D g_tTex2du4; + +Texture3D g_tTex3df4; +Texture3D g_tTex3di4; +Texture3D g_tTex3du4; + +TextureCube g_tTexcdf4; +TextureCube g_tTexcdi4; +TextureCube g_tTexcdu4; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + float4 txval10 = g_tTex1df4 . SampleGrad(g_sSamp, 0.1, 1.1, 1.2); + int4 txval11 = g_tTex1di4 . SampleGrad(g_sSamp, 0.2, 1.1, 1.2); + uint4 txval12 = g_tTex1du4 . SampleGrad(g_sSamp, 0.3, 1.1, 1.2); + + float4 txval20 = g_tTex2df4 . SampleGrad(g_sSamp, float2(0.1, 0.2), float2(1.1, 1.2), float2(1.1, 1.2)); + int4 txval21 = g_tTex2di4 . SampleGrad(g_sSamp, float2(0.3, 0.4), float2(1.1, 1.2), float2(1.1, 1.2)); + uint4 txval22 = g_tTex2du4 . SampleGrad(g_sSamp, float2(0.5, 0.6), float2(1.1, 1.2), float2(1.1, 1.2)); + + float4 txval30 = g_tTex3df4 . SampleGrad(g_sSamp, float3(0.1, 0.2, 0.3), float3(1.1, 1.2, 1.3), float3(1.1, 1.2, 1.3)); + int4 txval31 = g_tTex3di4 . SampleGrad(g_sSamp, float3(0.4, 0.5, 0.6), float3(1.1, 1.2, 1.3), float3(1.1, 1.2, 1.3)); + uint4 txval32 = g_tTex3du4 . SampleGrad(g_sSamp, float3(0.7, 0.8, 0.9), float3(1.1, 1.2, 1.3), float3(1.1, 1.2, 1.3)); + + float4 txval40 = g_tTexcdf4 . SampleGrad(g_sSamp, float3(0.1, 0.2, 0.3), float3(1.1, 1.2, 1.3), float3(1.1, 1.2, 1.3)); + int4 txval41 = g_tTexcdi4 . SampleGrad(g_sSamp, float3(0.4, 0.5, 0.6), float3(1.1, 1.2, 1.3), float3(1.1, 1.2, 1.3)); + uint4 txval42 = g_tTexcdu4 . SampleGrad(g_sSamp, float3(0.7, 0.8, 0.9), float3(1.1, 1.2, 1.3), float3(1.1, 1.2, 1.3)); + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplegrad.basic.dx10.vert b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplegrad.basic.dx10.vert new file mode 100644 index 0000000..43ec621 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplegrad.basic.dx10.vert @@ -0,0 +1,49 @@ +SamplerState g_sSamp : register(s0); + +Texture1D g_tTex1df4a : register(t1); + +uniform Texture1D g_tTex1df4 : register(t0); +Texture1D g_tTex1di4; +Texture1D g_tTex1du4; + +Texture2D g_tTex2df4; +Texture2D g_tTex2di4; +Texture2D g_tTex2du4; + +Texture3D g_tTex3df4; +Texture3D g_tTex3di4; +Texture3D g_tTex3du4; + +TextureCube g_tTexcdf4; +TextureCube g_tTexcdi4; +TextureCube g_tTexcdu4; + +struct VS_OUTPUT +{ + float4 Pos : SV_Position; +}; + +VS_OUTPUT main() +{ + VS_OUTPUT vsout; + + float4 txval10 = g_tTex1df4 . SampleGrad(g_sSamp, 0.1, 1.1, 1.2); + int4 txval11 = g_tTex1di4 . SampleGrad(g_sSamp, 0.2, 1.1, 1.2); + uint4 txval12 = g_tTex1du4 . SampleGrad(g_sSamp, 0.3, 1.1, 1.2); + + float4 txval20 = g_tTex2df4 . SampleGrad(g_sSamp, float2(0.1, 0.2), float2(1.1, 1.2), float2(1.1, 1.2)); + int4 txval21 = g_tTex2di4 . SampleGrad(g_sSamp, float2(0.3, 0.4), float2(1.1, 1.2), float2(1.1, 1.2)); + uint4 txval22 = g_tTex2du4 . SampleGrad(g_sSamp, float2(0.5, 0.6), float2(1.1, 1.2), float2(1.1, 1.2)); + + float4 txval30 = g_tTex3df4 . SampleGrad(g_sSamp, float3(0.1, 0.2, 0.3), float3(1.1, 1.2, 1.3), float3(1.1, 1.2, 1.3)); + int4 txval31 = g_tTex3di4 . SampleGrad(g_sSamp, float3(0.4, 0.5, 0.6), float3(1.1, 1.2, 1.3), float3(1.1, 1.2, 1.3)); + uint4 txval32 = g_tTex3du4 . SampleGrad(g_sSamp, float3(0.7, 0.8, 0.9), float3(1.1, 1.2, 1.3), float3(1.1, 1.2, 1.3)); + + float4 txval40 = g_tTexcdf4 . SampleGrad(g_sSamp, float3(0.1, 0.2, 0.3), float3(1.1, 1.2, 1.3), float3(1.1, 1.2, 1.3)); + int4 txval41 = g_tTexcdi4 . SampleGrad(g_sSamp, float3(0.4, 0.5, 0.6), float3(1.1, 1.2, 1.3), float3(1.1, 1.2, 1.3)); + uint4 txval42 = g_tTexcdu4 . SampleGrad(g_sSamp, float3(0.7, 0.8, 0.9), float3(1.1, 1.2, 1.3), float3(1.1, 1.2, 1.3)); + + vsout.Pos = float4(0,0,0,0); + + return vsout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplegrad.offset.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplegrad.offset.dx10.frag new file mode 100644 index 0000000..c643be2 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplegrad.offset.dx10.frag @@ -0,0 +1,49 @@ +SamplerState g_sSamp : register(s0); + +Texture1D g_tTex1df4a : register(t1); + +uniform Texture1D g_tTex1df4 : register(t0); +Texture1D g_tTex1di4; +Texture1D g_tTex1du4; + +Texture2D g_tTex2df4; +Texture2D g_tTex2di4; +Texture2D g_tTex2du4; + +Texture3D g_tTex3df4; +Texture3D g_tTex3di4; +Texture3D g_tTex3du4; + +TextureCube g_tTexcdf4; +TextureCube g_tTexcdi4; +TextureCube g_tTexcdu4; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + float4 txval10 = g_tTex1df4 . SampleGrad(g_sSamp, 0.1, 1.1, 1.2, 1); + int4 txval11 = g_tTex1di4 . SampleGrad(g_sSamp, 0.2, 1.1, 1.2, 1); + uint4 txval12 = g_tTex1du4 . SampleGrad(g_sSamp, 0.3, 1.1, 1.2, 1); + + float4 txval20 = g_tTex2df4 . SampleGrad(g_sSamp, float2(0.1, 0.2), float2(0.1, 0.2), float2(1.1, 1.2), int2(1,0)); + int4 txval21 = g_tTex2di4 . SampleGrad(g_sSamp, float2(0.3, 0.4), float2(0.1, 0.2), float2(1.1, 1.2), int2(1,1)); + uint4 txval22 = g_tTex2du4 . SampleGrad(g_sSamp, float2(0.5, 0.6), float2(0.1, 0.2), float2(1.1, 1.2), int2(1,-1)); + + float4 txval30 = g_tTex3df4 . SampleGrad(g_sSamp, float3(0.1, 0.2, 0.3), float3(1.1, 1.2, 1.3), float3(1.1, 1.2, 1.3), int3(1,0,1)); + int4 txval31 = g_tTex3di4 . SampleGrad(g_sSamp, float3(0.4, 0.5, 0.6), float3(1.1, 1.2, 1.3), float3(1.1, 1.2, 1.3), int3(1,1,1)); + uint4 txval32 = g_tTex3du4 . SampleGrad(g_sSamp, float3(0.7, 0.8, 0.9), float3(1.1, 1.2, 1.3), float3(1.1, 1.2, 1.3), int3(1,0,-1)); + + // There are no offset forms of cube textures, so we do not test them. + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplegrad.offsetarray.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplegrad.offsetarray.dx10.frag new file mode 100644 index 0000000..3adcd18 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplegrad.offsetarray.dx10.frag @@ -0,0 +1,39 @@ +SamplerState g_sSamp : register(s0); + +Texture1DArray g_tTex1df4a : register(t1); + +uniform Texture1DArray g_tTex1df4 : register(t0); +Texture1DArray g_tTex1di4; +Texture1DArray g_tTex1du4; + +Texture2DArray g_tTex2df4; +Texture2DArray g_tTex2di4; +Texture2DArray g_tTex2du4; + +TextureCubeArray g_tTexcdf4; +TextureCubeArray g_tTexcdi4; +TextureCubeArray g_tTexcdu4; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + float4 txval10 = g_tTex1df4 . SampleGrad(g_sSamp, float2(0.1, 0.2), 1.1, 1.2, 1); + int4 txval11 = g_tTex1di4 . SampleGrad(g_sSamp, float2(0.1, 0.2), 1.1, 1.2, 1); + uint4 txval12 = g_tTex1du4 . SampleGrad(g_sSamp, float2(0.1, 0.2), 1.1, 1.2, 1); + + float4 txval20 = g_tTex2df4 . SampleGrad(g_sSamp, float3(0.1, 0.2, 0.3), float2(1.1, 1.2), float2(1.1, 1.2), int2(1,0)); + int4 txval21 = g_tTex2di4 . SampleGrad(g_sSamp, float3(0.1, 0.2, 0.3), float2(1.1, 1.2), float2(1.1, 1.2), int2(1,0)); + uint4 txval22 = g_tTex2du4 . SampleGrad(g_sSamp, float3(0.1, 0.2, 0.3), float2(1.1, 1.2), float2(1.1, 1.2), int2(1,0)); + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplelevel.array.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplelevel.array.dx10.frag new file mode 100644 index 0000000..c52aeb2 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplelevel.array.dx10.frag @@ -0,0 +1,43 @@ +SamplerState g_sSamp : register(s0); + +Texture1DArray g_tTex1df4a : register(t1); + +uniform Texture1DArray g_tTex1df4 : register(t0); +Texture1DArray g_tTex1di4a; +Texture1DArray g_tTex1du4a; + +Texture2DArray g_tTex2df4a; +Texture2DArray g_tTex2di4a; +Texture2DArray g_tTex2du4a; + +TextureCubeArray g_tTexcdf4a; +TextureCubeArray g_tTexcdi4a; +TextureCubeArray g_tTexcdu4a; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + float4 txval10 = g_tTex1df4a . SampleLevel(g_sSamp, float2(0.1, 0.2), 0.75); + int4 txval11 = g_tTex1di4a . SampleLevel(g_sSamp, float2(0.2, 0.3), 0.75); + uint4 txval12 = g_tTex1du4a . SampleLevel(g_sSamp, float2(0.3, 0.4), 0.75); + + float4 txval20 = g_tTex2df4a . SampleLevel(g_sSamp, float3(0.1, 0.2, 0.3), 0.75); + int4 txval21 = g_tTex2di4a . SampleLevel(g_sSamp, float3(0.3, 0.4, 0.5), 0.75); + uint4 txval22 = g_tTex2du4a . SampleLevel(g_sSamp, float3(0.5, 0.6, 0.7), 0.75); + + float4 txval40 = g_tTexcdf4a . SampleLevel(g_sSamp, float4(0.1, 0.2, 0.3, 0.4), 0.75); + int4 txval41 = g_tTexcdi4a . SampleLevel(g_sSamp, float4(0.4, 0.5, 0.6, 0.7), 0.75); + uint4 txval42 = g_tTexcdu4a . SampleLevel(g_sSamp, float4(0.7, 0.8, 0.9, 1.0), 0.75); + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplelevel.basic.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplelevel.basic.dx10.frag new file mode 100644 index 0000000..fb363ae --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplelevel.basic.dx10.frag @@ -0,0 +1,52 @@ +SamplerState g_sSamp : register(s0); +uniform sampler2D g_sSamp2d; + +Texture1D g_tTex1df4a : register(t1); + +uniform Texture1D g_tTex1df4 : register(t0); +Texture1D g_tTex1di4; +Texture1D g_tTex1du4; + +Texture2D g_tTex2df4; +Texture2D g_tTex2di4; +Texture2D g_tTex2du4; + +Texture3D g_tTex3df4; +Texture3D g_tTex3di4; +Texture3D g_tTex3du4; + +TextureCube g_tTexcdf4; +TextureCube g_tTexcdi4; +TextureCube g_tTexcdu4; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + float4 txval10 = g_tTex1df4 . SampleLevel(g_sSamp, 0.1, 0.75); + int4 txval11 = g_tTex1di4 . SampleLevel(g_sSamp, 0.2, 0.75); + uint4 txval12 = g_tTex1du4 . SampleLevel(g_sSamp, 0.3, 0.75); + + float4 txval20 = g_tTex2df4 . SampleLevel(g_sSamp, float2(0.1, 0.2), 0.75); + int4 txval21 = g_tTex2di4 . SampleLevel(g_sSamp, float2(0.3, 0.4), 0.75); + uint4 txval22 = g_tTex2du4 . SampleLevel(g_sSamp, float2(0.5, 0.6), 0.75); + + float4 txval30 = g_tTex3df4 . SampleLevel(g_sSamp, float3(0.1, 0.2, 0.3), 0.75); + int4 txval31 = g_tTex3di4 . SampleLevel(g_sSamp, float3(0.4, 0.5, 0.6), 0.75); + uint4 txval32 = g_tTex3du4 . SampleLevel(g_sSamp, float3(0.7, 0.8, 0.9), 0.75); + + float4 txval40 = g_tTexcdf4 . SampleLevel(g_sSamp, float3(0.1, 0.2, 0.3), 0.75); + int4 txval41 = g_tTexcdi4 . SampleLevel(g_sSamp, float3(0.4, 0.5, 0.6), 0.75); + uint4 txval42 = g_tTexcdu4 . SampleLevel(g_sSamp, float3(0.7, 0.8, 0.9), 0.75); + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplelevel.basic.dx10.vert b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplelevel.basic.dx10.vert new file mode 100644 index 0000000..03febcf --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplelevel.basic.dx10.vert @@ -0,0 +1,49 @@ +SamplerState g_sSamp : register(s0); + +Texture1D g_tTex1df4a : register(t1); + +uniform Texture1D g_tTex1df4 : register(t0); +Texture1D g_tTex1di4; +Texture1D g_tTex1du4; + +Texture2D g_tTex2df4; +Texture2D g_tTex2di4; +Texture2D g_tTex2du4; + +Texture3D g_tTex3df4; +Texture3D g_tTex3di4; +Texture3D g_tTex3du4; + +TextureCube g_tTexcdf4; +TextureCube g_tTexcdi4; +TextureCube g_tTexcdu4; + +struct VS_OUTPUT +{ + float4 Pos : SV_Position; +}; + +VS_OUTPUT main() +{ + VS_OUTPUT vsout; + + float4 txval10 = g_tTex1df4 . SampleLevel(g_sSamp, 0.1, 0.75); + int4 txval11 = g_tTex1di4 . SampleLevel(g_sSamp, 0.2, 0.75); + uint4 txval12 = g_tTex1du4 . SampleLevel(g_sSamp, 0.3, 0.75); + + float4 txval20 = g_tTex2df4 . SampleLevel(g_sSamp, float2(0.1, 0.2), 0.75); + int4 txval21 = g_tTex2di4 . SampleLevel(g_sSamp, float2(0.3, 0.4), 0.75); + uint4 txval22 = g_tTex2du4 . SampleLevel(g_sSamp, float2(0.5, 0.6), 0.75); + + float4 txval30 = g_tTex3df4 . SampleLevel(g_sSamp, float3(0.1, 0.2, 0.3), 0.75); + int4 txval31 = g_tTex3di4 . SampleLevel(g_sSamp, float3(0.4, 0.5, 0.6), 0.75); + uint4 txval32 = g_tTex3du4 . SampleLevel(g_sSamp, float3(0.7, 0.8, 0.9), 0.75); + + float4 txval40 = g_tTexcdf4 . SampleLevel(g_sSamp, float3(0.1, 0.2, 0.3), 0.75); + int4 txval41 = g_tTexcdi4 . SampleLevel(g_sSamp, float3(0.4, 0.5, 0.6), 0.75); + uint4 txval42 = g_tTexcdu4 . SampleLevel(g_sSamp, float3(0.7, 0.8, 0.9), 0.75); + + vsout.Pos = float4(0,0,0,0); + + return vsout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplelevel.offset.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplelevel.offset.dx10.frag new file mode 100644 index 0000000..1490611 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplelevel.offset.dx10.frag @@ -0,0 +1,49 @@ +SamplerState g_sSamp : register(s0); + +Texture1D g_tTex1df4a : register(t1); + +uniform Texture1D g_tTex1df4 : register(t0); +Texture1D g_tTex1di4; +Texture1D g_tTex1du4; + +Texture2D g_tTex2df4; +Texture2D g_tTex2di4; +Texture2D g_tTex2du4; + +Texture3D g_tTex3df4; +Texture3D g_tTex3di4; +Texture3D g_tTex3du4; + +TextureCube g_tTexcdf4; +TextureCube g_tTexcdi4; +TextureCube g_tTexcdu4; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + float4 txval10 = g_tTex1df4 . SampleLevel(g_sSamp, 0.1, 0.75, 1); + int4 txval11 = g_tTex1di4 . SampleLevel(g_sSamp, 0.2, 0.75, 1); + uint4 txval12 = g_tTex1du4 . SampleLevel(g_sSamp, 0.3, 0.75, 1); + + float4 txval20 = g_tTex2df4 . SampleLevel(g_sSamp, float2(0.1, 0.2), 0.75, int2(1,0)); + int4 txval21 = g_tTex2di4 . SampleLevel(g_sSamp, float2(0.3, 0.4), 0.75, int2(1,1)); + uint4 txval22 = g_tTex2du4 . SampleLevel(g_sSamp, float2(0.5, 0.6), 0.75, int2(1,-1)); + + float4 txval30 = g_tTex3df4 . SampleLevel(g_sSamp, float3(0.1, 0.2, 0.3), 0.75, int3(1,0,1)); + int4 txval31 = g_tTex3di4 . SampleLevel(g_sSamp, float3(0.4, 0.5, 0.6), 0.75, int3(1,1,1)); + uint4 txval32 = g_tTex3du4 . SampleLevel(g_sSamp, float3(0.7, 0.8, 0.9), 0.75, int3(1,0,-1)); + + // There are no offset forms of cube textures, so we do not test them. + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplelevel.offsetarray.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplelevel.offsetarray.dx10.frag new file mode 100644 index 0000000..5c7bd71 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplelevel.offsetarray.dx10.frag @@ -0,0 +1,37 @@ +SamplerState g_sSamp : register(s0); + +Texture1DArray g_tTex1df4a : register(t1); + +uniform Texture1DArray g_tTex1df4 : register(t0); +Texture1DArray g_tTex1di4; +Texture1DArray g_tTex1du4; + +Texture2DArray g_tTex2df4; +Texture2DArray g_tTex2di4; +Texture2DArray g_tTex2du4; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + float4 txval10 = g_tTex1df4 . SampleLevel(g_sSamp, float2(0.1, 0.2), 0.75, 0); + int4 txval11 = g_tTex1di4 . SampleLevel(g_sSamp, float2(0.2, 0.3), 0.75, 1); + uint4 txval12 = g_tTex1du4 . SampleLevel(g_sSamp, float2(0.3, 0.4), 0.75, 2); + + float4 txval20 = g_tTex2df4 . SampleLevel(g_sSamp, float3(0.1, 0.2, 0.3), 0.75, int2(0,0)); + int4 txval21 = g_tTex2di4 . SampleLevel(g_sSamp, float3(0.3, 0.4, 0.5), 0.75, int2(0,0)); + uint4 txval22 = g_tTex2du4 . SampleLevel(g_sSamp, float3(0.5, 0.6, 0.7), 0.75, int2(0,1)); + + // No offset array forms for 3D or cube + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.scope.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.scope.frag new file mode 100644 index 0000000..a5309ca --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.scope.frag @@ -0,0 +1,30 @@ +void PixelShaderFunction(float4 input) : COLOR0 +{ + int x; + x; + { + float x; + x; + { + bool x; + x; + { + float3 x; + x; + } + x; + } + x; + } + x; + + if (x > 0) + bool x; + + while (x > 0) + bool x; + + do { + bool x; + } while (x > 0); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.semantic.geom b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.semantic.geom new file mode 100644 index 0000000..c4d7aba --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.semantic.geom @@ -0,0 +1,15 @@ +struct S { + float clip0 : SV_ClipDistance0; + float cull0 : SV_CullDistance0; + uint vpai : SV_ViewportArrayIndex; + uint rtai : SV_RenderTargetArrayIndex; + int ii : SV_InstanceID; +}; + +[maxvertexcount(4)] +S main(triangle in uint VertexID[3] : VertexID, + inout LineStream OutputStream) +{ + S s; + return s; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.semantic.vert b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.semantic.vert new file mode 100644 index 0000000..16bba37 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.semantic.vert @@ -0,0 +1,15 @@ +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; + int ii : SV_InstanceID; +}; + +S main(S ins) +{ + S s; + return s; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.semicolons.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.semicolons.frag new file mode 100644 index 0000000..28fdedd --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.semicolons.frag @@ -0,0 +1,19 @@ + +void MyFunc() { } + +;;; +; +; ; ; // HLSL allows stray global scope semicolons. + +void MyFunc2() {;;;}; + +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.shapeConv.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.shapeConv.frag new file mode 100644 index 0000000..adb170e --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.shapeConv.frag @@ -0,0 +1,32 @@ +float4 PixelShaderFunction(float4 input, float f) : COLOR0 +{ + float4 v; + v = 1; + v = 2.0; + v = f; + float3 u; + u = float(1); + u = float(2.0); + u = float(f); + float2 w = 2.0; + float V = 1; + float3 MyVal = V; + + float3 foo; + foo > 4.0; + foo >= 5.0; + 6.0 < foo; + 7.0 <= foo; + + all(v.x == v); + any(f != v); + + float1 f1; + + f1 == v; + v < f1; + f1.x; + f1.xxx; + + return input; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.shapeConvRet.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.shapeConvRet.frag new file mode 100755 index 0000000..7d77558 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.shapeConvRet.frag @@ -0,0 +1,9 @@ +int3 foo() +{ + return 13; +} + +float4 main(float f) +{ + return f; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.sin.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.sin.frag new file mode 100644 index 0000000..edf087d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.sin.frag @@ -0,0 +1,4 @@ +float4 PixelShaderFunction(float4 input) : COLOR0 +{ + return sin(input); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.staticMemberFunction.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.staticMemberFunction.frag new file mode 100755 index 0000000..700aa82 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.staticMemberFunction.frag @@ -0,0 +1,22 @@ +struct Test +{ + float4 memVar; + static float4 staticMemFun(float4 a) : SV_Position + { + return 2 * a; + } + static int staticMemFun(int a) : SV_Position + { + return 2 + a; + } + int i; +}; + +float4 main() : SV_Target0 +{ + Test test; + float4 f4 = float4(1.0,1.0,1.0,1.0); + f4 += Test::staticMemFun(float4(5.0f,5.0f,5.0f,5.0f)); + f4 += Test::staticMemFun(7); + return f4; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.string.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.string.frag new file mode 100755 index 0000000..572e73b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.string.frag @@ -0,0 +1,12 @@ +string s = "string1"; +string e = ""; +string bracket < string a = "nested" ; > ; +string brackets < string b = "nest1" ; string c = "nest2" ; float test [ 4 ] = { 1.0 , 1.0 , 1.0 , 1.0 } ; vector a = float3(2.0); > ; +string brackete1 < > ; +string brackete2 < ; > ; +string brackete3 < ; ; > ; + +float main(float f) +{ + return f; +} \ No newline at end of file diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.stringtoken.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.stringtoken.frag new file mode 100644 index 0000000..fe785e6 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.stringtoken.frag @@ -0,0 +1,20 @@ + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; +}; + +Texture2D TestTexture < + string TestAttribute1 = "TestAttribute"; + string TestAttribute2 = "false"; + int TestAttribute3 = 3; +>; + +uniform float4 TestUF ; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + psout.Color = float4(0,0,0,1); + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.struct.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.struct.frag new file mode 100644 index 0000000..33199e0 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.struct.frag @@ -0,0 +1,53 @@ +struct { +}; + +struct { + bool b; +}; + +struct myS { + bool b, c; + float4 a, d; +}; + +myS s1; + +static class { + float4 i; +} s2; + +struct IN_S { + linear float4 a; + nointerpolation bool b; + noperspective centroid float1 c; + sample centroid float2 d; + bool ff1 : SV_IsFrontFace; + bool ff2 : packoffset(c0.y); + bool ff3 : packoffset(c0.y) : register(ps_5_0, s0) ; + float4 ff4 : VPOS : packoffset(c0.y) : register(ps_5_0, s0) ; +}; + +float ff5 : packoffset(c101.y) : register(ps_5_0, s[5]); +float ff6 : packoffset(c102.y) : register(s3[5]); + +struct empty {}; + +struct containEmpty { + empty e; +}; + +float4 PixelShaderFunction(float4 input, IN_S s) : COLOR0 +{ + class FS { + bool3 b3; + } s3; + + s3 == s3; + s2.i = s.ff4; + + containEmpty ce; + empty e; + e = ce.e; + + return input; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.struct.split-1.vert b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.struct.split-1.vert new file mode 100644 index 0000000..ce5f51f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.struct.split-1.vert @@ -0,0 +1,25 @@ + +struct VS_INPUT +{ + int x0_in : foo0; + float4 Pos_in : SV_Position; + int x1_in : foo1; +}; + +struct VS_OUTPUT +{ + int x0_out : foo0; + float4 Pos_out : SV_Position; + int x1_out : foo1; +}; + +VS_OUTPUT main(VS_INPUT vsin, float4 Pos_loose : SV_Position) +{ + VS_OUTPUT vsout; + + vsout.x0_out = vsin.x0_in; + vsout.Pos_out = vsin.Pos_in + Pos_loose; + vsout.x1_out = vsin.x1_in; + + return vsout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.struct.split.array.geom b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.struct.split.array.geom new file mode 100644 index 0000000..9008df1 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.struct.split.array.geom @@ -0,0 +1,21 @@ +struct PSInput +{ + float4 Pos : SV_POSITION; + float2 TexCoord : TEXCOORD; + float3 TerrainPos : TERRAINPOS; + uint VertexID : VertexID; +}; + +typedef PSInput foo_t[2][3]; + +[maxvertexcount(4)] +void main(point uint v[1] : VertexID, inout TriangleStream OutputStream) +{ + foo_t Verts; + + PSInput Out = (PSInput) 0; + + for (int x=0; x<2; ++x) + for (int y=0; y<2; ++y) + Verts[x][y] = Out; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.struct.split.assign.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.struct.split.assign.frag new file mode 100644 index 0000000..e7fe028 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.struct.split.assign.frag @@ -0,0 +1,12 @@ +struct S { + float f; + float4 pos : SV_Position; +}; + +float4 main(int i, S input[3]) : COLOR0 +{ + S a[3]; + input = a; + + return float3(1.0); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.struct.split.call.vert b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.struct.split.call.vert new file mode 100644 index 0000000..543adeb --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.struct.split.call.vert @@ -0,0 +1,32 @@ +// Test passing split structs to functions. + +struct VS_INPUT +{ + int x0_in : foo0; + float4 Pos_in : SV_Position; + int x1_in : foo1; +}; + +struct VS_OUTPUT +{ + int x0_out : foo0; + float4 Pos_out : SV_Position; + int x1_out : foo1; +}; + +void Fn1(VS_INPUT fn1_in, VS_OUTPUT fn1_out) { + fn1_in.Pos_in + fn1_out.Pos_out; +} + +VS_OUTPUT main(VS_INPUT vsin) +{ + VS_OUTPUT vsout; + + vsout.x0_out = vsin.x0_in; + vsout.Pos_out = vsin.Pos_in; + vsout.x1_out = vsin.x1_in; + + Fn1(vsin, vsout); + + return vsout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.struct.split.nested.geom b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.struct.split.nested.geom new file mode 100644 index 0000000..03bf38f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.struct.split.nested.geom @@ -0,0 +1,31 @@ + +struct STRUCT_WITH_NO_BUILTIN_INTERSTAGE_IO +{ + float m0_array[2]; + int m1; +}; + +struct PS_IN +{ + float4 pos : SV_Position; + float2 tc : TEXCOORD0; + // float c : SV_ClipDistance0; +}; + +struct GS_OUT +{ + PS_IN psIn; + STRUCT_WITH_NO_BUILTIN_INTERSTAGE_IO contains_no_builtin_io; +}; + + +[maxvertexcount(3)] +void main(triangle PS_IN tin[3], inout TriangleStream ts ) +{ + GS_OUT o; + + o.psIn.pos = float4(1,2,3,4); + o.psIn.tc = float2(5,6); + + ts.Append(o); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.struct.split.trivial.geom b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.struct.split.trivial.geom new file mode 100644 index 0000000..343da38 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.struct.split.trivial.geom @@ -0,0 +1,21 @@ + +struct PS_IN +{ + float4 pos : SV_Position; +}; + +struct GS_OUT +{ + float4 pos : SV_Position; +}; + +[maxvertexcount(3)] +void main(triangle PS_IN i[3], inout TriangleStream ts) +{ + GS_OUT o; + + for (int x=0; x<3; ++x) { + o.pos = i[x].pos; + ts.Append(o); + } +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.struct.split.trivial.vert b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.struct.split.trivial.vert new file mode 100644 index 0000000..351e418 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.struct.split.trivial.vert @@ -0,0 +1,22 @@ + +// Test trivial case for structure splitting: the IN and OUT structs have ONLY an interstage IO. +// This should fall back to flattening, and not produce any empty structures. + +struct VS_INPUT +{ + float4 Pos_in : SV_Position; +}; + +struct VS_OUTPUT +{ + float4 Pos : SV_Position; +}; + +VS_OUTPUT main(VS_INPUT vsin, float4 Pos_loose : SV_Position) +{ + VS_OUTPUT vsout; + + vsout.Pos = vsin.Pos_in + Pos_loose; + + return vsout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structIoFourWay.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structIoFourWay.frag new file mode 100755 index 0000000..bca135e --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structIoFourWay.frag @@ -0,0 +1,18 @@ +struct T { + float f : packoffset(c4.y); // artificial, but validates all different treatments: uniform offset + centroid float g; // interpolant input + float d: SV_DepthGreaterEqual; // fragment output + float4 normal; // non-IO +}; + +T s; // loose uniform + +cbuffer buff { + T t : packoffset(c5.z); +}; + +T main(T t : myInput) : SV_Target0 +{ + T local; + return local; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structStructName.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structStructName.frag new file mode 100755 index 0000000..f8bf90c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structStructName.frag @@ -0,0 +1,7 @@ +struct S { int s; }; + +int main() +{ + struct S t; + return t.s; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structarray.flatten.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structarray.flatten.frag new file mode 100644 index 0000000..eedb931 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structarray.flatten.frag @@ -0,0 +1,28 @@ +SamplerState g_samp; +Texture1D g_tex; + +struct tex_t { + SamplerState samp; + Texture1D tex; + int nonopaque_thing; +}; + +struct tex_with_arrays_t { + SamplerState samp[2]; + Texture1D tex[2]; + int nonopaque_thing; +}; + +uniform tex_t g_texdata; +uniform tex_t g_texdata_array[3]; +uniform tex_with_arrays_t g_texdata_array2[3]; + +struct PS_OUTPUT { float4 color : SV_Target0; }; + +void main(out PS_OUTPUT ps_output) +{ + ps_output.color = + g_texdata.tex.Sample(g_texdata.samp, 0.5) + + g_texdata_array[1].tex.Sample(g_texdata_array[1].samp, 0.4) + + g_texdata_array2[1].tex[0].Sample(g_texdata_array2[1].samp[0], 0.3); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structarray.flatten.geom b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structarray.flatten.geom new file mode 100644 index 0000000..990532d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structarray.flatten.geom @@ -0,0 +1,23 @@ + +struct VertexData { + float4 position : POSITION; + float4 color : COLOR0; + float2 uv : TEXCOORD0; +}; + +struct PS_IN { + float4 position : SV_POSITION; + float4 color : COLOR0; + float2 uv : TEXCOORD0; +}; + +[maxvertexcount(4)] +void main(line VertexData vin[2], inout TriangleStream outStream) +{ + PS_IN vout; + + vout.color = vin[1].color; + vout.uv = vin[1].uv; + vout.position = vin[1].position; + outStream.Append(vout); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structbuffer.atomics.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structbuffer.atomics.frag new file mode 100644 index 0000000..f389e27 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structbuffer.atomics.frag @@ -0,0 +1,25 @@ + +RWByteAddressBuffer sbuf; + +float4 main(uint pos : FOO) : SV_Target0 +{ + uint u; + + sbuf.InterlockedAdd(8, 1); + sbuf.InterlockedAdd(8, 1, u); + sbuf.InterlockedAnd(8, 1); + sbuf.InterlockedAnd(8, 1, u); + sbuf.InterlockedCompareExchange(8, 1, 2, u); + // sbuf.InterlockedCompareStore(8, 1, 2); // TODO: ... + sbuf.InterlockedExchange(8, 1, u); + sbuf.InterlockedMax(8, 1); + sbuf.InterlockedMax(8, 1, u); + sbuf.InterlockedMin(8, 1); + sbuf.InterlockedMin(8, 1, u); + sbuf.InterlockedOr(8, 1); + sbuf.InterlockedOr(8, 1, u); + sbuf.InterlockedXor(8, 1); + sbuf.InterlockedXor(8, 1, u); + + return sbuf.Load(pos); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structbuffer.byte.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structbuffer.byte.frag new file mode 100644 index 0000000..2d504da --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structbuffer.byte.frag @@ -0,0 +1,13 @@ + +ByteAddressBuffer sbuf; + +float4 main(uint pos : FOO) : SV_Target0 +{ + uint size; + sbuf.GetDimensions(size); + + return sbuf.Load(pos) + + float4(sbuf.Load2(pos+4), 0, 0) + + float4(sbuf.Load3(pos+8), 0) + + sbuf.Load4(pos+12); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structbuffer.coherent.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structbuffer.coherent.frag new file mode 100644 index 0000000..1c60ef5 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structbuffer.coherent.frag @@ -0,0 +1,23 @@ +struct sb_t +{ + float3 color; + bool test; +}; + + +globallycoherent RWStructuredBuffer sbuf; +globallycoherent RWStructuredBuffer sbuf2; + +float4 main(uint pos : FOO) : SV_Target0 +{ + sbuf2[pos+1] = 42; + + uint size; + uint stride; + sbuf.GetDimensions(size, stride); + + if (sbuf[pos].test) + return float4(sbuf[pos].color + sbuf2[pos], 0); + else + return size + stride; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structbuffer.fn.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structbuffer.fn.frag new file mode 100644 index 0000000..d043d3b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structbuffer.fn.frag @@ -0,0 +1,24 @@ + +StructuredBuffer sbuf : register(t10); + +uint4 get(in StructuredBuffer sb, uint bufferOffset) +{ + return sb[bufferOffset]; +} + +void set(in RWStructuredBuffer sb, uint bufferOffset, uint4 data) +{ + sb[bufferOffset] = data; +} + +RWStructuredBuffer sbuf2; + +// Not shared, because of type difference. +StructuredBuffer sbuf3 : register(t12); + +float4 main(uint pos : FOO) : SV_Target0 +{ + set(sbuf2, 2, get(sbuf, 3)); + + return 0; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structbuffer.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structbuffer.frag new file mode 100644 index 0000000..4eb6912 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structbuffer.frag @@ -0,0 +1,23 @@ +struct sb_t +{ + float3 color; + bool test; + bool test2; +}; // stride = 20 + +StructuredBuffer sbuf : register(c10); +StructuredBuffer sbuf2; + +float4 main(uint pos : FOO) : SV_Target0 +{ + sb_t mydata = sbuf.Load(pos); + + uint size; + uint stride; + sbuf.GetDimensions(size, stride); + + if (sbuf[pos].test) + return float4(sbuf[pos].color + sbuf2[pos], 0); + else + return mydata.color.x + size + stride; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structbuffer.rw.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structbuffer.rw.frag new file mode 100644 index 0000000..3110484 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structbuffer.rw.frag @@ -0,0 +1,23 @@ +struct sb_t +{ + float3 color; + bool test; +}; + + +RWStructuredBuffer sbuf; +RWStructuredBuffer sbuf2; + +float4 main(uint pos : FOO) : SV_Target0 +{ + sbuf2[pos+1] = 42; + + uint size; + uint stride; + sbuf.GetDimensions(size, stride); + + if (sbuf[pos].test) + return float4(sbuf[pos].color + sbuf2[pos], 0); + else + return size + stride; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structbuffer.rwbyte.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structbuffer.rwbyte.frag new file mode 100644 index 0000000..d0b957d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structbuffer.rwbyte.frag @@ -0,0 +1,15 @@ + +RWByteAddressBuffer sbuf; + +float4 main(uint pos : FOO) : SV_Target0 +{ + uint size; + sbuf.GetDimensions(size); + + sbuf.Store(pos, sbuf.Load(pos)); + sbuf.Store2(pos, sbuf.Load2(pos)); + sbuf.Store3(pos, sbuf.Load3(pos)); + sbuf.Store4(pos, sbuf.Load4(pos)); + + return sbuf.Load(pos); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structin.vert b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structin.vert new file mode 100644 index 0000000..43d0cfd --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structin.vert @@ -0,0 +1,14 @@ +struct VI { + float4 m[2]; + uint2 coord; + linear float4 b; +}; + +VI main(float4 d, VI vi, float4 e) : SV_POSITION +{ + VI local; + + local.b = vi.m[1] + vi.m[0] + float4(vi.coord.x) + d + e; + + return local; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.switch.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.switch.frag new file mode 100644 index 0000000..88239c2 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.switch.frag @@ -0,0 +1,55 @@ +float4 PixelShaderFunction(float4 input, int c, int d) : COLOR0 +{ + switch(c) + { + } + + switch(c) + { + default: + } + + switch (c) { + case 1: + ++input; + break; + case 2: + --input; + break; + } + + switch (c) { + case 1: + ++input; + break; + case 2: + switch (d) { + case 2: + input += 2.0; + break; + case 3: + input += 3.0; + break; + } + break; + default: + input += 4.0; + } + + switch (c) { + case 1: + } + + switch (c) { + case 1: + case 2: + case 3: + ++input; + break; + case 4: + case 5: + --input; + } + + return input; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.swizzle.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.swizzle.frag new file mode 100644 index 0000000..9e87c6d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.swizzle.frag @@ -0,0 +1,6 @@ +static float4 AmbientColor = float4(1, 0.5, 0, 1); + +float4 ShaderFunction(float4 input) : COLOR0 +{ + return input.wwyx * float4(AmbientColor.z); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.templatetypes.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.templatetypes.frag new file mode 100644 index 0000000..379120d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.templatetypes.frag @@ -0,0 +1,47 @@ + +float PixelShaderFunction() +{ + vector r00 = float4(1,2,3,4); // vector means float4 + float4 r01 = vector(2,3,4,5); // vector means float4 + + vector r12 = bool1(false); + vector r13 = int1(1); + vector r14 = float1(1); + vector r15 = double1(1); + vector r16 = uint1(1); + + vector r20 = bool2(false, true); + vector r21 = int2(1,2); + vector r22 = float2(1,2); + vector r23 = double2(1,2); + vector r24 = uint2(1,2); + + vector r30 = bool3(false, true, true); + vector r31 = int3(1,2,3); + vector r32 = float3(1,2,3); + vector r33 = double3(1,2,3); + vector r34 = uint3(1,2,3); + + vector r40 = bool4(false, true, true, false); + vector r41 = int4(1,2,3,4); + vector r42 = float4(1,2,3,4); + vector r43 = double4(1,2,3,4); + vector r44 = uint4(1,2,3,4); + + matrix r50 = float4x4(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); // matrix means float4x4 + float4x4 r51 = matrix(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); // matrix means float4x4 + + // matrix r60 = bool2x3(false, true, false, true, false, true); // TODO: + matrix r61 = float2x3(1,2,3,4,5,6); + matrix r62 = float3x2(1,2,3,4,5,6); + // matrix r63 = float4x1(1,2,3,4); // TODO: + // matrix r64 = float1x4(1,2,3,4); // TODO: + matrix r65 = float4x2(1,2,3,4,5,6,7,8); + matrix r66 = float4x3(1,2,3,4,5,6,7,8,9,10,11,12); + + // TODO: bool mats + // TODO: int mats + + return 0.0; +} + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.templatetypes.negative.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.templatetypes.negative.frag new file mode 100644 index 0000000..aa54f3c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.templatetypes.negative.frag @@ -0,0 +1,23 @@ + +float PixelShaderFunction() +{ + // TODO: All of the below should fail, although presently the first failure + // aborts compilation and the rest are skipped. Having a separate test for + // each would be cumbersome. + + vector r00; // cannot declare vectors of voids + matrix r01; // cannot declare matrices of voids + + vector r02; // too many parameters to vector + matrix r03; // not enough parameters to matrix + + int three = 3; + vector r04; // size must be a literal constant integer + matrix r05; // size must be a literal constant integer + + vector, 3> r06; // type must be a simple scalar + vector r07; // type must be a simple scalar + + return 0.0; +} + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.this.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.this.frag new file mode 100755 index 0000000..645fe51 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.this.frag @@ -0,0 +1,29 @@ +static float2 var = float2(1.0, 2.0); + +struct type1 +{ + int memFun1(int3 var) + { + return var.z + this.var + var2; + } + int memFun2(int a) + { + int3 var = int3(1,2,3); + return var.z + (int)bar.y + this.var2; + } + float2 bar; + int var; + int var2; +}; + +float4 main() : SV_Target0 +{ + type1 T; + T.bar = var; + T.var = 7; + T.var2 = 9; + int i = T.memFun1(int3(10,11,12)); + i += T.memFun2(17); + + return float4(i,i,i,i); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.tx.bracket.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.tx.bracket.frag new file mode 100644 index 0000000..0d3d81f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.tx.bracket.frag @@ -0,0 +1,73 @@ +SamplerState g_sSamp : register(s0); + +Texture1D g_tTex1df4 : register(t0); +Texture1D g_tTex1di4; +Texture1D g_tTex1du4; + +Texture2D g_tTex2df4; +Texture2D g_tTex2di4; +Texture2D g_tTex2du4; + +Texture3D g_tTex3df4; +Texture3D g_tTex3di4; +Texture3D g_tTex3du4; + +Texture1DArray g_tTex1df4a; +Texture1DArray g_tTex1di4a; +Texture1DArray g_tTex1du4a; + +Texture2DArray g_tTex2df4a; +Texture2DArray g_tTex2di4a; +Texture2DArray g_tTex2du4a; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; +}; + +uniform int c1; +uniform int2 c2; +uniform int3 c3; +uniform int4 c4; + +uniform int o1; +uniform int2 o2; +uniform int3 o3; +uniform int4 o4; + +int4 Fn1(in int4 x) { return x; } +uint4 Fn1(in uint4 x) { return x; } +float4 Fn1(in float4 x) { return x; } + +float4 SomeValue() { return c4; } + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + // 1D + g_tTex1df4[c1]; + + float4 r00 = g_tTex1df4[c1]; + int4 r01 = g_tTex1di4[c1]; + uint4 r02 = g_tTex1du4[c1]; + + // 2D + float4 r10 = g_tTex2df4[c2]; + int4 r11 = g_tTex2di4[c2]; + uint4 r12 = g_tTex2du4[c2]; + + // 3D + float4 r20 = g_tTex3df4[c3]; + int4 r21 = g_tTex3di4[c3]; + uint4 r22 = g_tTex3du4[c3]; + + // Test function calling + Fn1(g_tTex1df4[c1]); // in + Fn1(g_tTex1di4[c1]); // in + Fn1(g_tTex1du4[c1]); // in + + psout.Color = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.type.half.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.type.half.frag new file mode 100644 index 0000000..f082039 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.type.half.frag @@ -0,0 +1,11 @@ + +float4 main() : SV_Target0 +{ + half h0 = 0; + half1 h1 = 1; + half2 h2 = 2; + half3 h3 = 3; + half4 h4 = 4; + + return 0.0; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.type.identifier.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.type.identifier.frag new file mode 100644 index 0000000..25ba457 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.type.identifier.frag @@ -0,0 +1,28 @@ + +struct foo_t { + float float; +}; + +float fn(float float) { return float; } + +float4 main() : SV_Target0 +{ + float float = 7; + bool bool[2] = { float, float }; + int int = bool[1]; + uint uint = float + int; + min16float min16float = uint; + min10float min10float = min16float; + half half = 0.5; + + { + foo_t float; + float.float = 42; + } + + bool[0] = bool[1]; + + float = float + int + uint + min16float + min10float + (bool[0] ? int : float) + fn(float); + + return float; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.typeGraphCopy.vert b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.typeGraphCopy.vert new file mode 100644 index 0000000..a4677c1 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.typeGraphCopy.vert @@ -0,0 +1,24 @@ +struct N1 { + int a; + float b; +}; + +struct N2 { + N1 s1; + N1 s2; +}; + +struct N3 { + N2 t1; + N1 t2; + N2 t3; +}; + +typedef N3 T3; + +T3 foo; + +float main() +{ + return foo.t3.s2.b; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.typedef.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.typedef.frag new file mode 100644 index 0000000..b09785e --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.typedef.frag @@ -0,0 +1,11 @@ +typedef float4 myVec4; + +float4 ShaderFunction(float4 input, int ii) : COLOR0 +{ + typedef int myInt; + myVec4 a1 = myVec4(1.0); + myInt i = 2; + typedef myInt myInt2; + myInt2 j = ii; + return input * a1 + myVec4(i + j); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.void.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.void.frag new file mode 100644 index 0000000..950bbd7 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.void.frag @@ -0,0 +1,9 @@ +void foo1() {} +void foo2(void) {} + +void PixelShaderFunction(float4 input) : COLOR0 +{ + foo1(); + foo2(); + return; +} \ No newline at end of file diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.whileLoop.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.whileLoop.frag new file mode 100644 index 0000000..e4084ae --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.whileLoop.frag @@ -0,0 +1,7 @@ +float4 PixelShaderFunction(float4 input) : COLOR0 +{ + while (any(input != input)) { return input; } + while (false) ; + [unroll] while (false) { } + while ((false)) { } +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/length.frag b/3rdparty/bgfx/3rdparty/glslang/Test/length.frag new file mode 100644 index 0000000..74c286f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/length.frag @@ -0,0 +1,18 @@ +#version 120 + +uniform vec4 u[3]; + +#ifdef TEST_POST_110 +varying vec2 v[]; +#else +varying vec2 v[2]; +#endif + +void main() +{ + int a[5]; + + vec2 t = v[0] + v[1]; + + gl_FragColor = vec4(u.length() * v.length() * a.length()); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/lineContinuation.vert b/3rdparty/bgfx/3rdparty/glslang/Test/lineContinuation.vert new file mode 100644 index 0000000..471f3a3 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/lineContinuation.vert @@ -0,0 +1,151 @@ +#version 300 es + +// this file cont\ +ains no errors other than the #error which are there to see if line numbering for errors is correct + +#error e1 + +float f\ +oo; // same as 'float foo;' + +#error e2 + +#define MAIN void main() \ + { \ +gl_Position = vec4(foo); \ +} + +#error e3 + +MAIN + +vec4 foo2(vec4 a) +{ + vec4 b = a; \ + return b; +} + +// aoeuntheo unatehutna \ antaehnathe +// anteonuth $ natohe " ' +// anteonuth natohe + +#define FOO int /* \ +*/ goodDecl; + +FOO + +#define A int q1 = \ 1 +#define B int q2 = \1 +#define C int q3 = $ 1 +#define D int q4 = @ 1 + +const highp int a1 = \ 4; // ERROR +const highp int a2 = @ 3; // ERROR +const highp int a3 = $4; // ERROR +const highp int a4 = a2\; // ERROR + +A; +B; +C; +D; + +# \ + +# \ + error good continuation + +#define AA1 a \ b +#define AA2 a \\ b +#define AA3 a \\\ b +#define AA4 a \\\\ b + +// anoetuh nonaetu \\\\\\ +still in comment + +const int abdece = 10; +const int aoeuntaoehu = abd\ +\ +\ +\ +\ +\ +ece; + +float funkyf = \ +.\ +1\ +2\ +3\ +e\ ++\ +1\ +7\ +;\ +int funkyh\ +=\ +0\ +x\ +f\ +4\ +; +int funkyo =\ +0\ +4\ +2\ +; +int c = \ +11; +int d = 1\ +2; + +#define FOOM(a,b) a + b + +#if FO\ +OM(2\ +,\ +3) +int bar103 = 17; +#endif + +// ERROR +#if FOOM(2, +3) +int bar104 = 19; +#endif + +// ERROR +#if FOOM( +2,3) +int bar105 = 19; +#endif + +int bar106 = FOOM(5,7); +int bar107 = FOOM // okay + ( + 2 + , + 3 + ) + ; + +void foo203209409() +{ + bar107 \ ++= 37; + bar107 *\ += 38; + bar107 /=\ +39; + bar107 +\ +41; +} + +#define QUOTE "ab\ +cd" + +void foo230920394() +{ + // syntax error + bar107 +\ + = 42; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/lineContinuation100.vert b/3rdparty/bgfx/3rdparty/glslang/Test/lineContinuation100.vert new file mode 100644 index 0000000..e632023 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/lineContinuation100.vert @@ -0,0 +1,56 @@ +#version 100 + +// non-line continuation comment \ +#error good error + + + +float f\ +oo; // same as 'float foo;' + +#error e2 + +#define MAIN void main() \ + { \ +gl_Position = vec4(foo); \ +} + +#error e3 + +MAIN + +vec4 foo2(vec4 a) +{ + vec4 b = a; \ + return b; +} + +// aoeuntheo unatehutna \ antaehnathe +// anteonuth $ natohe " ' +// anteonuth natohe +/*@*/ +/* *@/*/ +//@ + +#define A int q1 = \ 1 +#define B int q2 = \1 +#define C int q3 = $ 1 +#define D int q4 = @ 1 + +const highp int a1 = \ 4; // ERROR +const highp int a2 = @ 3; // ERROR +const highp int a3 = $4; // ERROR +const highp int a4 = a2\; // ERROR + +A; +B; +C; +D; + +# \ + +# \ + error bad continuation + +#define QUOTE "ab\ +cd" diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/link1.frag b/3rdparty/bgfx/3rdparty/glslang/Test/link1.frag new file mode 100644 index 0000000..2b8d95a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/link1.frag @@ -0,0 +1,38 @@ +#version 130 + +uniform vec4 uv4; +uniform vec3 glass; + +const int ci = 8; + +vec4 a = ci * uv4; + +in vec3 iv3; +in vec4 cup; + +void main() +{ +} + +vec4 b = ci * a; + +ivec2 foo(mat2 m) +{ + return ivec2(m[0]); +} + +vec4 c = b * b; + +const vec3 cv3 = vec3(43.0, 0.34, 9.9); +const vec3 cv3n = vec3(43.0, 0.34, 9.9); +const vec3 cv3e = vec3(43.0, 0.34, 9.9); +uniform mat2 um2 = mat2(4.0); +uniform mat2 um2n = mat2(4.0); +uniform mat2 um2e = mat2(4.0); +struct S { + int a; + float b; +}; +uniform S s = S(82, 3.9); +uniform S sn; +uniform S se = S(82, 3.9); diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/link1.vk.frag b/3rdparty/bgfx/3rdparty/glslang/Test/link1.vk.frag new file mode 100644 index 0000000..443a320 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/link1.vk.frag @@ -0,0 +1,10 @@ +#version 450 + +vec4 getColor(); + +out vec4 color; + +void main() +{ + color = getColor(); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/link2.frag b/3rdparty/bgfx/3rdparty/glslang/Test/link2.frag new file mode 100644 index 0000000..7c69891 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/link2.frag @@ -0,0 +1,36 @@ +#version 130 + +uniform vec4 uv4; +uniform vec2 glass; + +const int ci = 8; + +vec4 d = ci * uv4; + +in vec3 iv3; +flat in vec4 cup; + +vec4 e = ci * d; + +ivec2 foo() +{ + return ivec2(2); +} + +vec4 f = e * e; + +const vec3 cv3 = vec3(43.0, 0.34, 9.9); +const vec3 cv3e = vec3(43.0, 0.34, 2.9); +uniform mat2 um2 = mat2(4.0); +uniform mat2 um2n; +uniform mat2 um2e = mat2(3.0); +struct S { + int a; + float b; +}; +uniform S s = S(82, 3.9); +uniform S sn = S(82, 3.9); +uniform S se = S(81, 3.9); + +#extension GL_OES_texture_3D : enable +#extension GL_OES_standard_derivatives : enable diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/link2.vk.frag b/3rdparty/bgfx/3rdparty/glslang/Test/link2.vk.frag new file mode 100644 index 0000000..b1630cb --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/link2.vk.frag @@ -0,0 +1,8 @@ +#version 450 + +uniform sampler2D s2D; + +vec4 getColor() +{ + return texture(s2D, vec2(0.5)); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/link3.frag b/3rdparty/bgfx/3rdparty/glslang/Test/link3.frag new file mode 100644 index 0000000..f886b23 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/link3.frag @@ -0,0 +1,9 @@ +#version 300 es + +precision highp float; + +in vec2 iv3; + +#extension GL_OES_standard_derivatives : enable +#extension GL_OES_EGL_image_external : require +#extension GL_OES_texture_3D : enable diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/localAggregates.frag b/3rdparty/bgfx/3rdparty/glslang/Test/localAggregates.frag new file mode 100644 index 0000000..d8a7fb1 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/localAggregates.frag @@ -0,0 +1,72 @@ +#version 130 + +uniform sampler2D sampler; +varying vec2 coord; +varying vec4 color; + +struct s1 { + int i; + float f; +}; + +struct s2 { + int i; + float f; + s1 s1_1; + vec4 bleh; +}; + +struct s3 { + s2 s2_1; + int i; + float f; + s1 s1_1; +}; + + +uniform s1 foo; +uniform s2 foo2; +uniform s3 foo3; + +uniform float[16] uFloatArray; +uniform int condition; + +void main() +{ + s2 locals2; + s3 locals3; + float localFArray[16]; + int localIArray[8]; + + locals2 = foo3.s2_1; + + if (foo3.s2_1.i > 0) { + locals2.s1_1.f = 1.0; + localFArray[4] = coord.x; + localIArray[2] = foo3.s2_1.i; + } else { + locals2.s1_1.f = coord.x; + localFArray[4] = 1.0; + localIArray[2] = 0; + } + + if (localIArray[2] == 0) + ++localFArray[4]; + + float localArray[16]; + int x = 5; + localArray[x] = coord.x; + + float[16] a; + + for (int i = 0; i < 16; i++) + a[i] = 0.0; + + if (condition == 1) + a = localArray; + + locals2.bleh = color; + locals2.bleh.z = coord.y; + + gl_FragColor = locals2.bleh * (localFArray[4] + locals2.s1_1.f + localArray[x] + a[x]) * texture2D(sampler, coord); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/loops.frag b/3rdparty/bgfx/3rdparty/glslang/Test/loops.frag new file mode 100644 index 0000000..ce2d2a0 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/loops.frag @@ -0,0 +1,320 @@ +#version 130 +uniform vec4 bigColor; +uniform vec4 bigColor1_1; +uniform vec4 bigColor1_2; +uniform vec4 bigColor1_3; +uniform vec4 bigColor2; +uniform vec4 bigColor3; +uniform vec4 bigColor4; +uniform vec4 bigColor5; +uniform vec4 bigColor6; +uniform vec4 bigColor7; +uniform vec4 bigColor8; + +varying vec4 BaseColor; + +uniform float d; +uniform float d2; +uniform float d3; +uniform float d4; +uniform float d5; +uniform float d6; +uniform float d7; +uniform float d8; +uniform float d9; +uniform float d10; +uniform float d11; +uniform float d12; +uniform float d13; +uniform float d14; +uniform float d15; +uniform float d16; +uniform float d17; +uniform float d18; +uniform float d19; +uniform float d20; +uniform float d21; +uniform float d22; +uniform float d23; +uniform float d24; +uniform float d25; +uniform float d26; +uniform float d27; +uniform float d28; +uniform float d29; +uniform float d30; +uniform float d31; +uniform float d32; +uniform float d33; +uniform float d34; + +uniform int Count; + +void main() +{ + vec4 color = BaseColor; + + // Not a real loop + while (true) { + if (color.x < 0.33) { + color += vec4(0.33); + break; + } + if (color.x < 0.66) { + color += vec4(0.66); + break; + } + + color += vec4(0.33); + break; + } + + // While + while (color.x < d) { + color += bigColor; + } + + // While (latchy) + while (color.z < d) { + color += bigColor1_1; + if (color.w < d) + continue; + + color += bigColor1_1; + } + + // While (constant) + while (color.x < 42.0) { + ++color; + } + + // While (complicated-conditional) + while (color.w < d2 && color.y < d3) { + color += bigColor1_2; + } + + // While (multi-exit) + while (color.z < d3) { + color += bigColor1_3; + if (color.y < d4) + break; + color += bigColor1_3; + } + + // For (dynamic) + for (int i = 0; i < Count; ++i) { + color += bigColor2; + } + + // Do while + do { + color += bigColor3; + } while (color.x < d2); + + // For (static) + for (int i = 0; i < 42; ++i) { + color.z += d3; + } + + // For (static) flow-control + for (int i = 0; i < 100; ++i) { + if (color.z < 20.0) + color.x++; + else + color.y++; + if (color.w < 20.0) + if (color.z > color.y) + 0; // do nothing + } + + // For (static) flow-control with latch merge + for (int i = 0; i < 120; ++i) { + if (color.z < 20.0) + color.x++; + else + color.y++; + } + + // For (static) latchy + for (int i = 0; i < 42; ++i) { + color.z += d3; + if (color.x < d4) + continue; + ++color.w; + } + + // For (static) multi-exit + for (int i = 0; i < 42; ++i) { + color.z += d3; + if (color.x < d4) + break; + ++color.w; + } + + // Latchy + do { + color += bigColor4; + if (color.x < d4) + continue; + if (color.y < d4) + color.y += d4; + else + color.x += d4; + } while (color.z < d4); + + // Do while flow control + do { + color += bigColor5; + if (color.y < d5) + color.y += d5; + } while (color.x < d5); + + // If then loop + if (color.x < d6) { + while (color.y < d6) + color += bigColor6; + } else { + while (color.z < d6) + color.z += bigColor6.z; + } + + // If then multi-exit + if (color.x < d6) { + while (color.y < d6) { + color += bigColor6; + if (d7 < 1.0) + break; + } + + } else { + while (color.z < d6) + color.z += bigColor6.z; + } + + + // Multi-exit + do { + if (d7 < 0.0) + break; + + color += bigColor7; + + if (d7 < 1.0) { + color.z++; + break; + } + + color += BaseColor; + + } while (true); + + + // Multi-exit2 + do { + // invariant conditional break at the top of the loop. This could be a + // situation where unswitching the loop has no real increases in code + // size. + if (d8 < 0.0) + break; + + color += bigColor7; + + if (d8 < 1.0) { + color.z++; + if (d8 < 2.0) { + color.y++; + } else { + color.x++; + } + break; + } + + color += BaseColor; + + } while (color.z < d8); + + // Deep exit + while (color.w < d9) { + if (d9 > d8) { + if (color.x <= d7) { + if (color.z == 5.0) + color.w++; + else + break; + } + } + + } + + // No end loop-back. + while (color.z < d10) { + color.y++; + if (color.y < d11) { + color.z++; + if (color.w < d12) + color.w++; + else + color.x++; + continue; + } + + color++; + break; + } + + // Multi-continue + while (color.x < 10.0) { + color += bigColor8; + + if (color.z < d8) + if (color.w < d6) + continue; + + color.y += bigColor8.x; + } + + color++; + gl_FragColor = color; + + // Early Return + while (color.x < d14) { + if (color.y < d15) { + return; + } + else + color++; + } + + color++; + + while (color.w < d16) { + color.w++; + } + + + // While (complicated-conditional) + while (color.w < d2 && color.y < d3) { + color += bigColor1_2; + if (color.z < d3) + return; + } + + + do { + if (color.y < d18) + return; + color++; + } while (color.x < d17); + + // Early Discard + while (color.y < d16) { + if (color.w < d16) { + discard; + } else + color++; + } + + color++; + + gl_FragColor = color; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/loopsArtificial.frag b/3rdparty/bgfx/3rdparty/glslang/Test/loopsArtificial.frag new file mode 100644 index 0000000..2f196af --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/loopsArtificial.frag @@ -0,0 +1,96 @@ +#version 130 +uniform vec4 bigColor; +uniform vec4 bigColor1_1; +uniform vec4 bigColor1_2; +uniform vec4 bigColor1_3; +uniform vec4 bigColor2; +uniform vec4 bigColor3; +uniform vec4 bigColor4; +uniform vec4 bigColor5; +uniform vec4 bigColor6; +uniform vec4 bigColor7; +uniform vec4 bigColor8; + +varying vec4 BaseColor; + +uniform float d; +uniform float d2; +uniform float d3; +uniform float d4; +uniform float d5; +uniform float d6; +uniform float d7; +uniform float d8; +uniform float d9; +uniform float d10; +uniform float d11; +uniform float d12; +uniform float d13; +uniform float d14; +uniform float d15; +uniform float d16; +uniform float d17; +uniform float d18; +uniform float d19; +uniform float d20; +uniform float d21; +uniform float d22; +uniform float d23; +uniform float d24; +uniform float d25; +uniform float d26; +uniform float d27; +uniform float d28; +uniform float d29; +uniform float d30; +uniform float d31; +uniform float d32; +uniform float d33; +uniform float d34; + +uniform int Count; + +void main() +{ + vec4 color = BaseColor; + + // Latchy2 + do { + color += bigColor4; + if (color.x < d4) { + color.z += 2.0; + if (color.z < d4) { + color.x++; + continue; + } + } + if (color.y < d4) + color.y += d4; + else + color.x += d4; + } while (color.z < d4); + + // Immediate dominator + while (color.w < d13) { + if (color.z < d13) + color++; + else + color--; + // code from Latchy 2 + color += bigColor4; + if (color.x < d4) { + color.z += 2.0; + if (color.z < d4) { + color.x++; + continue; + } + } + if (color.y < d4) + color.y += d4; + else + color.x += d4; + } + + color++; + gl_FragColor = color; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/mains.frag b/3rdparty/bgfx/3rdparty/glslang/Test/mains.frag new file mode 100644 index 0000000..5756a3e --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/mains.frag @@ -0,0 +1,9 @@ +#version 300 es + +void main() +{ +} + +void main() +{ +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/mains1.frag b/3rdparty/bgfx/3rdparty/glslang/Test/mains1.frag new file mode 100644 index 0000000..e0de2e1 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/mains1.frag @@ -0,0 +1,5 @@ +#version 110 + +void main() +{ +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/mains2.frag b/3rdparty/bgfx/3rdparty/glslang/Test/mains2.frag new file mode 100644 index 0000000..e0de2e1 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/mains2.frag @@ -0,0 +1,5 @@ +#version 110 + +void main() +{ +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/makeDoc b/3rdparty/bgfx/3rdparty/glslang/Test/makeDoc new file mode 100644 index 0000000..c9d598e --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/makeDoc @@ -0,0 +1,3 @@ +#!/usr/bin/env bash +./glslangValidator -p > instDesc +asciidoc --backend=html5 instDesc diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/matrix.frag b/3rdparty/bgfx/3rdparty/glslang/Test/matrix.frag new file mode 100644 index 0000000..150e043 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/matrix.frag @@ -0,0 +1,55 @@ +#version 130 + +//#define TEST_POST_110 + +uniform mat3 colorTransform; +varying vec3 Color; +uniform mat4 m, n; + +#ifdef TEST_POST_110 +uniform mat4x3 um43; +uniform mat3x4 un34; +#else +uniform mat4 um43; +uniform mat4 un34; +#endif + +varying vec4 v; + +#ifdef TEST_POST_110 +varying vec3 u; +#else +varying vec4 u; +#endif + +void main() +{ + gl_FragColor = vec4(un34[1]); + gl_FragColor += vec4(Color * colorTransform, 1.0); + + if (m != n) + gl_FragColor += v; + else { + gl_FragColor += m * v; + gl_FragColor += v * (m - n); + } + +#ifdef TEST_POST_110 + mat3x4 m34 = outerProduct(v, u); + m34 += mat4(v.x); + m34 += mat4(u, u.x, u, u.x, u, u.x, u.x); +#else + mat4 m34 = mat4(v.x*u.x, v.x*u.y, v.x*u.z, v.x*u.w, + v.y*u.x, v.y*u.y, v.y*u.z, v.y*u.w, + v.z*u.x, v.z*u.y, v.z*u.z, v.z*u.w, + v.w*u.x, v.w*u.y, v.w*u.z, v.w*u.w); + m34 += mat4(v.x); + m34 += mat4(u, u.x, u, u.x, u, u.x, u.x); + +#endif + + if (m34 == un34) + gl_FragColor += m34 * u; + else + gl_FragColor += (un34 * um43) * v; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/matrix2.frag b/3rdparty/bgfx/3rdparty/glslang/Test/matrix2.frag new file mode 100644 index 0000000..eb2c53c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/matrix2.frag @@ -0,0 +1,50 @@ +#version 150 + +uniform mat3 colorTransform; +varying vec3 Color; +uniform mat4 m, n; + +uniform mat4x3 um43; +uniform mat3x4 un34; +uniform mat2 um2; +uniform mat3 um3; +uniform mat4 um4; + +varying vec4 v; + +varying vec3 u; + +out vec4 FragColor; + +void main() +{ + mat3x4 m34 = outerProduct(v, u); + + m34 += mat3x4(4.3); + + FragColor = vec4(Color, 1.0); + FragColor *= vec4(FragColor * m34, 1.0); + + m34 *= v.x; + + mat4 m44 = mat4(un34); + + m44 += m34 * um43; + + FragColor += (-m44) * v; + + FragColor *= matrixCompMult(m44, m44); + + m34 = transpose(um43); + FragColor *= vec4(FragColor * m34, 1.0); + FragColor *= vec4(determinant(um4)); + mat2 inv = inverse(um2); + FragColor *= vec4(inv[0][0], inv[1][0], inv[0][1], inv[1][1]); + mat3 inv3 = inverse(um3); + FragColor *= vec4(inv3[2][1]); + + mat4 inv4 = inverse(um4); + FragColor *= inv4; + + FragColor = vec4(FragColor * matrixCompMult(un34, un34), FragColor.w); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/matrixError.vert b/3rdparty/bgfx/3rdparty/glslang/Test/matrixError.vert new file mode 100644 index 0000000..3c8cc11 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/matrixError.vert @@ -0,0 +1,22 @@ +#version 120 + +attribute vec3 v3; + +uniform mat3x2 m32; + +const mat2x4 m24 = mat2x4(1.0, 2.0, + 3.0, 4.0, + 3.0, 4.0, + 3.0, 4.0, 5.0); // ERROR, too many arguments + +void main() +{ + mat2x3 m23; + vec3 a, b; + + a = v3 * m23; // ERROR, type mismatch + b = m32 * v3; // ERROR, type mismatch + m23.xy; // ERROR, can't use . + + gl_Position = vec4(m23 * m32 * v3, m24[2][4]); // ERROR, 2 and 4 are out of range +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/maxClipDistances.vert b/3rdparty/bgfx/3rdparty/glslang/Test/maxClipDistances.vert new file mode 100644 index 0000000..62ddfeb --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/maxClipDistances.vert @@ -0,0 +1,7 @@ +#version 130 + +out float gl_ClipDistance[8]; // OK, 8 is gl_MaxClipDistances + +void main() +{ +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/max_vertices_0.geom b/3rdparty/bgfx/3rdparty/glslang/Test/max_vertices_0.geom new file mode 100644 index 0000000..4a420be --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/max_vertices_0.geom @@ -0,0 +1,12 @@ +#version 330 + +layout(points) in; +layout(triangle_strip, max_vertices = 0) out; +in highp vec4 v_geom_FragColor[]; +out highp vec4 v_frag_FragColor; + +void main (void) +{ + EndPrimitive(); + EndPrimitive(); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/missingBodies.vert b/3rdparty/bgfx/3rdparty/glslang/Test/missingBodies.vert new file mode 100644 index 0000000..04b7181 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/missingBodies.vert @@ -0,0 +1,24 @@ +#version 450 + +void bar(); +void foo() { bar(); } + +void B(); +void C(int); +void C(int, int) { } +void C(bool); +void A() { B(); C(1); C(true); C(1, 2); } + +void main() +{ + foo(); + C(true); +} + +int ret1(); + +int f1 = ret1(); + +int ret2() { return 3; } + +int f2 = ret2(); diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/negativeArraySize.comp b/3rdparty/bgfx/3rdparty/glslang/Test/negativeArraySize.comp new file mode 100644 index 0000000..20636c0 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/negativeArraySize.comp @@ -0,0 +1,10 @@ +#version 310 es + +#ifdef GL_ES +precision mediump float; +#endif + +void main() +{ + float f[-2]; // cannot declare arrays with negative size +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/newTexture.frag b/3rdparty/bgfx/3rdparty/glslang/Test/newTexture.frag new file mode 100644 index 0000000..30e77dc --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/newTexture.frag @@ -0,0 +1,75 @@ +#version 430 + +uniform samplerBuffer sb; +uniform sampler2DRect sr; +uniform sampler2D s2D; +uniform sampler3D s3D; +uniform samplerCube sCube; +uniform samplerCubeShadow sCubeShadow; +uniform sampler2DShadow s2DShadow; +uniform sampler2DArray s2DArray; +uniform sampler2DArrayShadow s2DArrayShadow; + +uniform isampler2D is2D; +uniform isampler3D is3D; +uniform isamplerCube isCube; +uniform isampler2DArray is2DArray; +uniform isampler2DMS is2Dms; + +uniform usampler2D us2D; +uniform usampler3D us3D; +uniform usamplerCube usCube; +uniform usampler2DArray us2DArray; + +in float c1D; +in vec2 c2D; +in vec3 c3D; +in vec4 c4D; + +flat in int ic1D; +flat in ivec2 ic2D; +flat in ivec3 ic3D; +flat in ivec4 ic4D; + +out vec4 FragData; + +void main() +{ + vec4 v = texture(s2D, c2D); + v += textureProj(s3D, c4D); + v += textureLod(s2DArray, c3D, 1.2); + v.y += textureOffset(s2DShadow, c3D, ivec2(3), c1D); + v += texelFetch(s3D, ic3D, ic1D); + v += texelFetchOffset(s2D, ic2D, 4, ivec2(3)); + v += texelFetchOffset(sr, ic2D, ivec2(4)); + v.y += textureLodOffset(s2DShadow, c3D, c1D, ivec2(3)); + v += textureProjLodOffset(s2D, c3D, c1D, ivec2(3)); + v += textureGrad(sCube, c3D, c3D, c3D); + v.x += textureGradOffset(s2DArrayShadow, c4D, c2D, c2D, ivec2(3)); + v += textureProjGrad(s3D, c4D, c3D, c3D); + v += textureProjGradOffset(s2D, c3D, c2D, c2D, ivec2(3)); + + ivec4 iv = texture(is2D, c2D); + v += vec4(iv); + iv = textureProjOffset(is2D, c4D, ivec2(3)); + v += vec4(iv); + iv = textureProjLod(is2D, c3D, c1D); + v += vec4(iv); + iv = textureProjGrad(is2D, c3D, c2D, c2D); + v += vec4(iv); + iv = texture(is3D, c3D, 4.2); + v += vec4(iv); + iv = textureLod(isCube, c3D, c1D); + v += vec4(iv); + iv = texelFetch(is2DArray, ic3D, ic1D); + v += vec4(iv); + iv += texelFetch(is2Dms, ic2D, ic1D); + v += vec4(iv); + v += texelFetch(sb, ic1D); + v += texelFetch(sr, ic2D); + + ivec2 iv2 = textureSize(sCubeShadow, 2); + // iv2 += textureSize(is2Dms); + + FragData = v + vec4(iv2, 0.0, 0.0); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/noMain.vert b/3rdparty/bgfx/3rdparty/glslang/Test/noMain.vert new file mode 100644 index 0000000..e83be04 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/noMain.vert @@ -0,0 +1,5 @@ +#version 300 es + +void foo() +{ +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/noMain1.geom b/3rdparty/bgfx/3rdparty/glslang/Test/noMain1.geom new file mode 100644 index 0000000..ab0834f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/noMain1.geom @@ -0,0 +1,7 @@ +#version 110 + +void foo() +{ +} + +layout(points) out; \ No newline at end of file diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/noMain2.geom b/3rdparty/bgfx/3rdparty/glslang/Test/noMain2.geom new file mode 100644 index 0000000..9fb5fd7 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/noMain2.geom @@ -0,0 +1,7 @@ +#version 150 + +void bar() +{ +} + +layout(line_strip) out; diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/nonSquare.vert b/3rdparty/bgfx/3rdparty/glslang/Test/nonSquare.vert new file mode 100644 index 0000000..0974425 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/nonSquare.vert @@ -0,0 +1,25 @@ +#version 120 + +attribute vec3 v3; +attribute vec4 v4; + +uniform mat3x2 m32; + +const vec2 cv2 = vec2(10.0, 20.0); +const mat2x4 m24 = mat2x4(3.0); +const mat4x2 m42 = mat4x2(1.0, 2.0, + 3.0, 4.0, + 5.0, 6.0, + 7.0, 8.0); + +void main() +{ + mat2x3 m23; + vec2 a, b; + + a = v3 * m23; + b = m32 * v3; + + gl_Position = vec4(m23 * m32 * v3, m24[1][3]) + + (m24 * m42) * v4 + cv2 * m42 + m24 * cv2 + vec4(cv2[1], cv2.x, m42[2][1], m42[2][0]); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/nonVulkan.frag b/3rdparty/bgfx/3rdparty/glslang/Test/nonVulkan.frag new file mode 100644 index 0000000..425e840 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/nonVulkan.frag @@ -0,0 +1,9 @@ +#version 450 + +layout(constant_id = 17) const int arraySize = 12; // ERROR +layout(input_attachment_index = 1) int foo; // ERROR +layout(push_constant) uniform ubn { int a; } ubi; // ERROR + +#ifdef VULKAN +#error VULKAN should not be defined +#endif diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/nosuffix b/3rdparty/bgfx/3rdparty/glslang/Test/nosuffix new file mode 100755 index 0000000..26862ff --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/nosuffix @@ -0,0 +1,4 @@ +void main() +{ + gl_Position = vec4(1.0); +} \ No newline at end of file diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/numeral.frag b/3rdparty/bgfx/3rdparty/glslang/Test/numeral.frag new file mode 100644 index 0000000..cc0862c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/numeral.frag @@ -0,0 +1,103 @@ +#version 400 + +void main() +{ + int o00 = 00; + int o000 = 000; + int o0000 = 0000; + int o5 = 05; + int o05 = 005; + int o006 = 0006; + int o7 = 07; + int o58 = 072; + int omax = 037777777777; + int o8 = 08; // ERROR + int o08 = 008; // ERROR + int o009 = 0009; // ERROR + int obig = 07324327323472347234; // ERROR + int omax1 = 040000000000; // ERROR + + uint uo5 = 05u; + uint uo6 = 06u; + uint uo7 = 07u; + uint uo8 = 08u; // ERROR + uint uo9 = 09u; // ERROR + + int h0 = 0x0; + int h00 = 0x00; + int h000 = 0x000; + int h1 = 0x1; + int h2 = 0x00000002; + int h300 = 0x000300; + int hABCDEF = 0xAbCdEF; + int hFFFFFFFF = 0xFFFFFFFF; + int h12345678 = 0xBC614E; + int hToBeOrNotToBe = 0x2b | ~0x2B; + + uint uh0 = 0x0u; + uint uhg = (0xcu); + uint uh000 = 0x000u; + uint uh1 = 0x1u; + uint uh2 = 0x00000002u; + uint uh300 = 0x000300u; + uint uhABCDEF = 0xAbCdEFu; + uint uhFFFFFFFF = 0xFFFFFFFFu; + uint uh12345678 = 0xBC614Eu; + uint uhToBeOrNotToBe = 0x2bu | ~0x2BU; + + //int he1 = 0xG; // ERROR + int he2 = 0x; // ERROR + int hbig = 0xFFFFFFFF1; // ERROR + + float f1 = 1.0; + float f2 = 2.; + float f3 = 3e0; + float f4 = 40e-1; + float f5 = 05.; + float f6 = 006.; + float f7 = .7e1; + float f8 = 08e0; + float f9 = .9e+1; + float f10 = 10.0; + float f11 = .011e+3; + float f12 = .0012e4; + float f543 = 000000543.; + float f6789 = 00006789.; + float f88 = 0000088.; + + float g1 = 5.3876e4; + float g2 = 4000000000e-11; + float g3 = 1e+5; + float g4 = 7.321E-3; + float g5 = 3.2E+4; + float g6 = 0.5e-5; + float g7 = 0.45; + float g8 = 6.e10; + + double gf1 = 1.0lf; + double gf2 = 2.Lf; + double gf3 = .3e1lF; + double gf4 = .4e1LF; + float gf5 = 5.f; + float gf6 = 6.F; + + //float e1 = 1..; // ERROR + //float e2 = 2.l; // ERROR + //float e3 = ..3; // ERROR + //float e4 = 4ee1; // ERROR + float e5 = 5f; // ERROR +} + +layout (location = 2) out vec4 c2; +layout (location = 3u) out vec4 c3; +layout (location = 04) out vec4 c4; +layout (location = 005u) out vec4 c5; +layout (location = 0x6) out vec4 c6; +layout (location = 0x7u) out vec4 c7; + +uint g1 = 4294967296u; // ERROR, too big +uint g2 = 4294967295u; +uint g3 = 4294967294u; +int g4 = 4294967296; // ERROR, too big +int g5 = 4294967295; +int g6 = 4294967294; diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/pointCoord.frag b/3rdparty/bgfx/3rdparty/glslang/Test/pointCoord.frag new file mode 100644 index 0000000..8dc9e74 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/pointCoord.frag @@ -0,0 +1,15 @@ +precision highp float; + +uniform sampler2D sampler; + +void main() +{ + vec4 color; + + if (length(gl_PointCoord) < 0.3) + color = texture2D(sampler, gl_PointCoord); + else + color = vec4(0.0); + + gl_FragColor = color; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/precise.tesc b/3rdparty/bgfx/3rdparty/glslang/Test/precise.tesc new file mode 100644 index 0000000..c541540 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/precise.tesc @@ -0,0 +1,109 @@ +#version 450 +#extension GL_EXT_tessellation_shader : require +#extension GL_EXT_gpu_shader5 : require + +float minimal() { + precise float result = 5.0; + float a = 10.0; + float b = 20.0; + float c = 30.0; + float d = 40.0; + result = a * b + c * d; // c * d, a * b and rvalue1 + rvalue2 should be 'noContraction'. + return result; +} + +void continuous_assignment() { + precise float result = 5.0; + float a = 10.0; + float b = 20.0; + result = a = b + 4; // b + 4 should be 'noContraction'. +} + +void convert() { + precise double result; + float a = 10.0; + float b = 20.0; + b = a + b; // a + b should be 'noContraction'. + result = double(b); // convert operation should not be 'noContraction'. +} + +float loop_for() { + precise float r1 = 5.0; + precise float r2 = 10.0; + int a = 10; + int b = 20; + int c = 30; + for (int i = 0; i < a; i++) { + r1 += 3.12 + b + i; // 'noContration', this make i++ also 'noContraction' + c += 1; // 'noContration' + } + a += 1; // a + 1 should not be 'noContraction'. + r2 = c; // The calculation of c should be 'noContration'. + return float(r1 + r2); // conversion should not be 'noContration'. +} + +void loop_array(void) { + precise float result; + + int x = 22; + int y = 33; + + float a0[3]; + result += float(x) + float(y); // x + y should be 'noContraction' also result + rvalue. + + for (int i = 0; i < 3; ++i) { + // a's dereference + 2 should be 'noContraction'. + result += a0[i] + 2; + // result + 1 and 3 - rvalue should be 'noContraction'. + a0[i] = 3 - result++; + } +} + +void loop_while() { + precise float result = 5.0; + int a = 10; + int b = 20; + while (result < 10) { + result += 3.12 + b; // result + 3.12 should be 'noContraction'. + } + result = a + b + 5; // b + 5 should not be 'noCtraction' because all operands are integers. + result = 11.1; +} + +float fma_not_decorated() { + precise float result; + float a = 1.0; + float b = 2.0; + float c = 3.0; + b = b + c; // b + c should be decorated with 'noContraction' + result = fma(a, b, c); // fma() should not be decorated with 'noContradtion' + return result; +} + +precise float precise_return_exp_func() { + float a = 1.0; + float b = 2.0; + return a + b; // the ADD operation should be 'noContraction' +} + +precise float precise_return_val_func() { + float a = 1.0; + float b = 2.0; + float result = a + b; // the ADD operation should be 'noContraction' + return result; +} + +float precise_func_parameter(float b, precise out float c) { + float a = 0.5; + c = a + b; // noContration + return a - b; // Not noContraction +} + +mat3 matrix (mat2x3 a, mat3x2 b) { + mat2x3 c = mat2x3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0); + precise mat3 result; + result = (a + c) * b; // should be noContraction + return result; +} + +void main(){} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/precise_struct_block.vert b/3rdparty/bgfx/3rdparty/glslang/Test/precise_struct_block.vert new file mode 100644 index 0000000..279b4b0 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/precise_struct_block.vert @@ -0,0 +1,89 @@ +#version 450 + +struct T { + float f1; + float f2; +}; + +out B1 {precise T s; float x;} partial_precise_block; +precise out B2 {T s; float x;} all_precise_block; + +float struct_member() { + float a = 1.0; + float b = 2.0; + float c = 3.0; + float d = 4.0; + + precise float result; + + T S, S2, S3; + + S2.f1 = a + 0.2; // NoContraction + S2.f2 = b + 0.2; // NOT NoContraction + S3.f1 = a + b; // NOT NoContraction + S = S2; // "precise" propagated through parent object nodes + result = S.f1 + 0.1; // the ADD operation should be NoContraction + + return result; +} + +float complex_array_struct() { + precise float result; + struct T1 { + float t1_array[3]; + float t1_scalar; + }; + struct T2 { + T1 t1a[5]; + T1 t1b[6]; + T1 t1c[7]; + }; + struct T3 {float f; T2 t2; vec4 v; int p;}; + T3 t3[10]; + for(int i=0; i<10; i++) { + t3[i].f = i / 3.0; // Not NoContraction + t3[i].v = vec4(i * 1.5); // NoContraction + t3[i].p = i + 1; + for(int j=0; j<5; j++) { + for(int k = 0; k<3; k++) { + t3[i].t2.t1a[j].t1_array[k] = i * j + k; // Not NoContraction + } + t3[i].t2.t1a[j].t1_scalar = j * 2.0 / i; // Not NoContration + } + + for(int j=0; j<6; j++) { + for(int k = 0; k<3; k++) { + t3[i].t2.t1b[j].t1_array[k] = i * j + k; // Not NoContraction + } + t3[i].t2.t1b[j].t1_scalar = j * 2.0 / i; // NoContraction + } + + for(int j=0; j<6; j++) { + for(int k = 0; k<3; k++) { + t3[i].t2.t1c[j].t1_array[k] = i * j + k; // Not NoContraction because all operands are integers + } + t3[i].t2.t1c[j].t1_scalar = j * 2.0 / i; // Not NoContraction + } + } + int i = 2; + result = t3[5].t2.t1c[6].t1_array[1] + + t3[2].t2.t1b[1].t1_scalar + + t3[i - 1].v.xy.x; // NoContraction + return result; +} + +float out_block() { + float a = 0.1; + float b = 0.2; + partial_precise_block.s.f1 = a + b; // NoContraction + partial_precise_block.s.f2 = a - b; // NoContraction + partial_precise_block.x = a * b; // Not NoContraction + + all_precise_block.s.f1 = a + b + 1.0; // NoContraction + all_precise_block.s.f2 = a - b - 1.0; // NoContraction + all_precise_block.x = a * b * 2.0; // Also NoContraction + + return a + b; // Not NoContraction +} + +void main(){} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/precision.frag b/3rdparty/bgfx/3rdparty/glslang/Test/precision.frag new file mode 100644 index 0000000..e24fa52 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/precision.frag @@ -0,0 +1,76 @@ +#version 100 + +varying vec3 color; // ERRROR, there is no default qualifier for float + +lowp vec2 foo(mediump vec3 mv3) +{ + highp vec4 hv4; + return hv4.xy; +} + +int global_medium; + +uniform lowp sampler2D samplerLow; +uniform mediump sampler2D samplerMed; +uniform highp sampler2D samplerHigh; + +precision highp int; +precision highp ivec2; // ERROR +precision mediump int[2]; // ERROR +vec4 uint; // okay +precision mediump vec4; // ERROR + +int global_high; + +void main() +{ + lowp int sum = global_medium + global_high; + + gl_FragColor = vec4(color, 1.0); + + int level1_high; + sum += level1_high; + + precision lowp int; + int level1_low; + sum += level1_low; + + // test maxing precisions of args to get precision of builtin + lowp float arg1; + mediump float arg2; + lowp float d = distance(arg1, arg2); + + { + int level2_low; + sum += level2_low; + + precision highp int; + int level2_high; + sum += level2_high; + do { + if (true) { + precision mediump int; + int level4_medium; + sum += level4_medium; + } + int level3_high; + sum += level3_high; + } while (true); + int level2_high2; + sum += level2_high2; + } + int level1_low3; + sum += level1_low3; + + sum += 4 + ((ivec2(level1_low3) * ivec2(level1_high) + ivec2((/* comma operator */level1_low3, level1_high)))).x; + + texture2D(samplerLow, vec2(0.1, 0.2)); + texture2D(samplerMed, vec2(0.1, 0.2)); + texture2D(samplerHigh, vec2(0.1, 0.2)); +} + +precision mediump bool; // ERROR +//precision mediump struct { int a; } s; // ERROR +struct s {int a;}; +precision mediump s; // ERROR +mediump bvec2 b2; // ERROR diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/precision.vert b/3rdparty/bgfx/3rdparty/glslang/Test/precision.vert new file mode 100644 index 0000000..5d07348 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/precision.vert @@ -0,0 +1,25 @@ +#version 300 es + +in vec4 pos; + +uniform sampler2D s2D; +uniform samplerCube sCube; +uniform isampler2DArray is2DAbad; // ERROR, no default precision +uniform sampler2DArrayShadow s2dASbad; // ERROR, no default precision + +precision highp sampler2D; +precision mediump sampler2DArrayShadow; + +uniform sampler2DArrayShadow s2dAS; +uniform isampler2DArray is2DAbad2; // ERROR, still no default precision + +uniform sampler2D s2Dhigh; + +void main() +{ + vec4 t = texture(s2D, vec2(0.1, 0.2)); + t += texture(s2Dhigh, vec2(0.1, 0.2)); + t += texture(s2dAS, vec4(0.5)); + + gl_Position = pos; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/prepost.frag b/3rdparty/bgfx/3rdparty/glslang/Test/prepost.frag new file mode 100644 index 0000000..dfd4566 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/prepost.frag @@ -0,0 +1,38 @@ +#version 140 + +void main() +{ + struct s { + float y[5]; + } str; + + float t; + int index = 5; // all indexing is 4 + + str.y[4] = 2.0; // 2.0 + t = ++str.y[--index]; // 3.0 + str.y[4] += t; // 6.0 + t = str.y[4]--; // 5.0 (t = 6.0) + str.y[index++] += t; // 11.0 + --str.y[--index]; // 10.0 + + float x = str.y[4]; + ++x; + --x; + x++; + x--; + + // x is 10.0 + + float y = x * ++x; // 10 * 11 + float z = y * x--; // 110 * 11 + + // x is 10.0 + // z is 1210.0 + + vec4 v = vec4(1.0, 2.0, 3.0, 4.0); + v.y = v.z--; // (1,3,2,4) + v.x = --v.w; // (3,3,2,3) + + gl_FragColor = z * v;// (3630.0, 3630.0, 2420.0, 3630.0) +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.cpp_style___FILE__.vert b/3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.cpp_style___FILE__.vert new file mode 100644 index 0000000..6d2bc1d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.cpp_style___FILE__.vert @@ -0,0 +1,36 @@ +#extension GL_GOOGLE_cpp_style_line_directive : enable + +__FILE__ + +#line 150 "a.h" +__FILE__ + +#line 24 +__FILE__ + +#line 42 +__FILE__ + +#line 30 "b.cc" +__FILE__ + +#line 10 3 +__FILE__ + +#line 48 +__FILE__ + +#line 4 +__FILE__ + +#line 55 100 +__FILE__ + +#line 1000 "c" +__FILE__ + +#line 42 1 +__FILE__ + +#line 42 "this-is-a-quite-long-name-maybe-i-should-shorten-it" +__FILE__ diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.cpp_style_line_directive.vert b/3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.cpp_style_line_directive.vert new file mode 100644 index 0000000..90fb261 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.cpp_style_line_directive.vert @@ -0,0 +1,36 @@ +#extension GL_GOOGLE_cpp_style_line_directive : enable + +#error at "0:3" + +#line 150 "a.h" +#error at "a.h:150" + +#line 24 +#error at "a.h:24" + +#line 42 +#error at "a.h:42" + +#line 30 "b.cc" +#error at "b.cc:30" + +#line 10 3 +#error at "3:10" + +#line 48 +#error at "3:48" + +#line 4 +#error at "3:4" + +#line 55 100 +#error at "100:55" + +#line 1000 "c" +#error at "c:1000" + +#line 42 1 +#error at "1:42" + +#line 42 "this-is-a-quite-long-name-maybe-i-should-shorten-it" +#error at "this-is-a-quite-long-name-maybe-i-should-shorten-it:42" diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.defined.vert b/3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.defined.vert new file mode 100644 index 0000000..375e4d3 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.defined.vert @@ -0,0 +1,2 @@ +#define defined_not_really +#define defined // ERROR: "defined" can't be (un)defined: diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.edge_cases.vert b/3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.edge_cases.vert new file mode 100644 index 0000000..95bfbb3 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.edge_cases.vert @@ -0,0 +1,15 @@ +#version 310 es +#define X(Y) /* + */ Y + 2 + +#define Y(Z) 2 * Z// asdf + +#define Z(Y) /* + */ \ + 2 /* + */ + 3 \ + * Y + +void main() { + gl_Position = vec4(X(3) + Y(4) + Z(2)); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.eof_missing.vert b/3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.eof_missing.vert new file mode 100644 index 0000000..9177314 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.eof_missing.vert @@ -0,0 +1 @@ +noEOF \ No newline at end of file diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.errors.vert b/3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.errors.vert new file mode 100644 index 0000000..ca83848 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.errors.vert @@ -0,0 +1,20 @@ +#version 310 es + +#define X 1 + +#if X + #ifdef Y + #error This should not show up in pp output. + #endif + #error This should show up in pp output. +#else + #error This should not show up in pp output. +#endif + +#def X +#if Y + +#extension a + +int main() { +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.extensions.vert b/3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.extensions.vert new file mode 100644 index 0000000..07455d5 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.extensions.vert @@ -0,0 +1,12 @@ +#version 310 es + +#extension GL_EXT_geometry_shader: enable +#extension GL_EXT_frag_depth: disable +#extension GL_EXT_gpu_shader5: require +#extension GL_EXT_shader_texture_image_samples: warn + +#extension unknown_extension: require + +int main() { +} + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.function_macro.vert b/3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.function_macro.vert new file mode 100644 index 0000000..577ea7e --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.function_macro.vert @@ -0,0 +1,20 @@ +#version 310 es + + +#define X(n) n + 1 +#define Y(n, z) n + z +#define Z(f) X(f) + +#define REALLY_LONG_MACRO_NAME_WITH_MANY_PARAMETERS(X1, X2, X3, X4, X5, X6, X7,\ + X8, X9, X10, X11, X12) X1+X2+X3+X4+X5+X6+X7+X8+X9+X10+X11+X12 + +#define A(\ + Y\ + )\ +4 + 3 + Y + +int main() { + gl_Position = vec4(X(3), Y(3, 4), Z(3)); + gl_Position = vec4(REALLY_LONG_MACRO_NAME_WITH_MANY_PARAMETERS(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)); + gl_Position = vec4(A(3)); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.include.disabled.vert b/3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.include.disabled.vert new file mode 100644 index 0000000..865baa1 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.include.disabled.vert @@ -0,0 +1,6 @@ +#line 8000 +#include +#include 123 +#include "foo" +#include "foo" garbage +#include "no-eol" \ No newline at end of file diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.include.enabled.vert b/3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.include.enabled.vert new file mode 100644 index 0000000..985eae2 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.include.enabled.vert @@ -0,0 +1,20 @@ +#extension GL_GOOGLE_include_directive : enable +#line 8000 +#include +#include 123 +#include "foo.oeu" +#include "foo.oeu/ao eu/ao.h" +#include "foo" +#include +#include +#include +#include "foo.oe>" +#include +#include "foo2.h" garbage +#include garbage +// max length +#include +// too long +#include +#include "no-eol" \ No newline at end of file diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.line.frag b/3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.line.frag new file mode 100644 index 0000000..0b7ac76 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.line.frag @@ -0,0 +1,4 @@ +#version 310 es +#line 1 2 +#pragma something +void main() {} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.line.vert b/3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.line.vert new file mode 100644 index 0000000..fed6bba --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.line.vert @@ -0,0 +1,39 @@ +#line 300 + +#line 2 + + + + + +#line __LINE__ + 3 + + +#line __FILE__ + 2 + +#line __FILE__ * __LINE__ + + +#define X 4 + +#line X + +#undef X + +#define X(y) y + 3 + 2 + +#line X(3) + +void main() { + gl_Position = vec4(__LINE__); +} + +#line X(3) 4 + +#define Z(y, q) \ + y*q*2 q + +#line Z(2, 3) + +#line 1 + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.many.endif.vert b/3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.many.endif.vert new file mode 100644 index 0000000..7b04962 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.many.endif.vert @@ -0,0 +1,10 @@ +#endif +#endif +#endif +#endif +#endif +#endif +#endif + +#if +#else diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.pragma.vert b/3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.pragma.vert new file mode 100644 index 0000000..79f5600 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.pragma.vert @@ -0,0 +1,11 @@ +#version 310 es + +#pragma optimize(on) +#pragma optimize(off) +#pragma debug(on) +#pragma debug(off) + +#pragma undefined_pragma(x, 4) + +int main() { +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.simple.vert b/3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.simple.vert new file mode 100644 index 0000000..3522271 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.simple.vert @@ -0,0 +1,29 @@ +#version 310 es +#define X 1 +#define Y clamp +#define Z X + +#define F 1, 2 + +#define make_function \ + float fn ( float x ) \ + {\ + return x + 4.0; \ + } + +make_function + +int main() { + gl_Position = vec4(X); + gl_Position = Y(1, 2, 3); + gl_Position = vec4(Z); + gl_Position = vec4(F); + gl_Position = vec4(fn(3)); + [] . ++ -- + + - * % / - ! ~ + << >> < > <= >= + == != + & ^ | && ^^ || ? : + += -= *= /= %= <<= >>= &= |= ^= + 1.2 2E10 5u -5lf +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.success_if_parse_would_fail.vert b/3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.success_if_parse_would_fail.vert new file mode 100644 index 0000000..ed1ad0c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/preprocessor.success_if_parse_would_fail.vert @@ -0,0 +1,4 @@ +int x() { + something that shouldnt compile; +} + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/recurse1.frag b/3rdparty/bgfx/3rdparty/glslang/Test/recurse1.frag new file mode 100644 index 0000000..66b4c3f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/recurse1.frag @@ -0,0 +1,48 @@ +#version 330 core + +// cross-unit recursion + +void main() {} + +// two-level recursion + +float cbar(int); + +void cfoo(float) +{ + cbar(2); +} + +// four-level, out of order + +void CB(); +void CD(); +void CA() { CB(); } +void CC() { CD(); } + +// high degree + +void CBT(); +void CDT(); +void CAT() { CBT(); CBT(); CBT(); } +void CCT() { CDT(); CDT(); CBT(); } + +// not recursive + +void norA() {} +void norB() { norA(); } +void norC() { norA(); } +void norD() { norA(); } +void norE() { norB(); } +void norF() { norB(); } +void norG() { norE(); } +void norH() { norE(); } +void norI() { norE(); } + +// not recursive, but with a call leading into a cycle if ignoring direction + +void norcA() { } +void norcB() { norcA(); } +void norcC() { norcB(); } +void norcD() { norcC(); norcB(); } // head of cycle +void norcE() { norcD(); } // lead into cycle diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/recurse1.vert b/3rdparty/bgfx/3rdparty/glslang/Test/recurse1.vert new file mode 100644 index 0000000..e2dbce0 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/recurse1.vert @@ -0,0 +1,44 @@ +#version 330 core + +void main() {} + +float bar(int); + +// direct recursion + +void self() +{ + self(); +} + +// two-level recursion + +void foo(float) +{ + bar(2); +} + +float bar(int) +{ + foo(4.2); + + return 3.2; +} + +// four-level, out of order + +void B(); +void D(); +void A() { B(); } +void C() { D(); } +void B() { C(); } +void D() { A(); } + +// high degree + +void BT(); +void DT(); +void AT() { BT(); BT(); BT(); } +void CT() { DT(); AT(); DT(); BT(); } +void BT() { CT(); CT(); CT(); } +void DT() { AT(); } diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/recurse2.frag b/3rdparty/bgfx/3rdparty/glslang/Test/recurse2.frag new file mode 100644 index 0000000..d649fef --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/recurse2.frag @@ -0,0 +1,28 @@ +#version 330 core + +// cross-unit recursion + +// two-level recursion + +void cfoo(float); + +float cbar(int) +{ + cfoo(4.2); + + return 3.2; +} + +// four-level, out of order + +void CA(); +void CC(); +void CB() { CC(); } +void CD() { CA(); } + +// high degree + +void CAT(); +void CCT(); +void CBT() { CCT(); CCT(); CCT(); } +void CDT() { CAT(); } diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/reflection.vert b/3rdparty/bgfx/3rdparty/glslang/Test/reflection.vert new file mode 100644 index 0000000..be49822 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/reflection.vert @@ -0,0 +1,182 @@ +#version 440 core + +layout(std140, row_major) uniform nameless { + vec3 anonMember1; + mat3x2 m23; + int scalarAfterm23; + vec4 anonDeadMember2; + vec4 anonMember3; + int scalarBeforeArray; + float floatArray[5]; + int scalarAfterArray; + mat2x2 m22[9]; +}; + +layout(std140, column_major) uniform c_nameless { + vec3 c_anonMember1; + mat3x2 c_m23; + int c_scalarAfterm23; + vec4 c_anonDeadMember2; + vec4 c_anonMember3; +}; + +layout(std140) uniform named { + vec3 deadMember1; + int scalar; + vec4 member2; + vec4 member3; + vec2 memvec2; + float memf1; + bool memf2; + int memf3; + vec2 memvec2a; + mat2x2 m22[7]; +} ablock; + +layout(std140) uniform namelessdead { + int a; +}; + +layout(std140) uniform namedDead { + int b; +} bblock; + +struct N1 { + float a; +}; + +struct N2 { + float b; + float c; + float d; +}; + +struct N3 { + N1 n1; + N2 n2; +}; + +layout(std140) uniform nested { + N3 foo; +} nest; + +struct TS { + int a; + int dead; +}; + +uniform TS s; + +uniform float uf1; +uniform float uf2; +uniform float ufDead3; +uniform float ufDead4; + +uniform writeonly uimage2D image_ui2D; +uniform sampler2D sampler_2D; +uniform sampler2DMSArray sampler_2DMSArray; + +uniform mat2 dm22[10]; + +struct deep1 { + vec2 va[3]; + bool b; +}; + +struct deep2 { + int i; + deep1 d1[4]; +}; + +struct deep3 { + vec4 iv4; + deep2 d2; + ivec3 v3; +}; + +in float attributeFloat; +layout(location = 2) in vec2 attributeFloat2; +in vec3 attributeFloat3; +in vec4 attributeFloat4; +in mat4 attributeMat4; + +uniform deep3 deepA[2], deepB[2], deepC[3], deepD[2]; + +const bool control = true; + +void deadFunction() +{ + vec3 v3 = ablock.deadMember1; + vec4 v = anonDeadMember2; + float f = ufDead4; +} + +void liveFunction2() +{ + vec3 v = anonMember1; + float f = uf1; +} + +void liveFunction1(writeonly uimage2D p_ui2D, sampler2D p_2D, sampler2DMSArray p_2DMSArray) + +{ + liveFunction2(); + float f = uf2; + vec4 v = ablock.member3; +} + +uniform abl { + float foo; +} arrBl[4]; + +uniform abl2 { + float foo; +} arrBl2[4]; + +void main() +{ + liveFunction1(image_ui2D, sampler_2D, sampler_2DMSArray); + liveFunction2(); + + if (! control) + deadFunction(); + + float f; + int i; + if (control) { + 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.memvec2.x; + f += ablock.memf1; + f += float(ablock.memf2); + f += ablock.memf3; + f += ablock.memvec2a.y; + f += ablock.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 += 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; + deep3 d = deepC[1]; + deep3 da[2] = deepD; + } else + f = ufDead3; + + f += arrBl[2].foo + arrBl[0].foo; + f += arrBl2[i].foo; + + f += attributeFloat; + f += attributeFloat2.x; + f += attributeFloat3.x; + f += attributeFloat4.x; + f += attributeMat4[0][1]; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/remap.basic.dcefunc.frag b/3rdparty/bgfx/3rdparty/glslang/Test/remap.basic.dcefunc.frag new file mode 100644 index 0000000..714120a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/remap.basic.dcefunc.frag @@ -0,0 +1,11 @@ +#version 450 + +in float inf; +out vec4 outf4; + +vec3 dead_fn() { return vec3(0); } + +void main() +{ + outf4 = vec4(inf); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/remap.basic.everything.frag b/3rdparty/bgfx/3rdparty/glslang/Test/remap.basic.everything.frag new file mode 100644 index 0000000..714120a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/remap.basic.everything.frag @@ -0,0 +1,11 @@ +#version 450 + +in float inf; +out vec4 outf4; + +vec3 dead_fn() { return vec3(0); } + +void main() +{ + outf4 = vec4(inf); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/remap.basic.none.frag b/3rdparty/bgfx/3rdparty/glslang/Test/remap.basic.none.frag new file mode 100644 index 0000000..714120a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/remap.basic.none.frag @@ -0,0 +1,11 @@ +#version 450 + +in float inf; +out vec4 outf4; + +vec3 dead_fn() { return vec3(0); } + +void main() +{ + outf4 = vec4(inf); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/remap.basic.strip.frag b/3rdparty/bgfx/3rdparty/glslang/Test/remap.basic.strip.frag new file mode 100644 index 0000000..714120a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/remap.basic.strip.frag @@ -0,0 +1,11 @@ +#version 450 + +in float inf; +out vec4 outf4; + +vec3 dead_fn() { return vec3(0); } + +void main() +{ + outf4 = vec4(inf); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/remap.hlsl.sample.basic.everything.frag b/3rdparty/bgfx/3rdparty/glslang/Test/remap.hlsl.sample.basic.everything.frag new file mode 100644 index 0000000..03e83ef --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/remap.hlsl.sample.basic.everything.frag @@ -0,0 +1,90 @@ +SamplerState g_sSamp : register(s0); +uniform sampler2D g_sSamp2d +{ + AddressU = MIRROR; + AddressV = WRAP; + MinLOD = 0; + MaxLOD = 10; + MaxAnisotropy = 2; + MipLodBias = 0.2; +}, g_sSamp2D_b; + +Texture1D g_tTex1df4a : register(t1); + +uniform Texture1D g_tTex1df4 : register(t0); +Texture1D g_tTex1di4; +Texture1D g_tTex1du4; + +Texture2D g_tTex2df4; +Texture2D g_tTex2di4; +Texture2D g_tTex2du4; + +Texture3D g_tTex3df4; +Texture3D g_tTex3di4; +Texture3D g_tTex3du4; + +TextureCube g_tTexcdf4; +TextureCube g_tTexcdi4; +TextureCube g_tTexcdu4; + +struct MemberTest +{ + int Sample; // in HLSL, method names are valid struct members. + int CalculateLevelOfDetail; // ... + int CalculateLevelOfDetailUnclamped; // ... + int Gather; // ... + int GetDimensions; // ... + int GetSamplePosition; // ... + int Load; // ... + int SampleBias; // ... + int SampleCmp; // ... + int SampleCmpLevelZero; // ... + int SampleGrad; // ... + int SampleLevel; // ... +}; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + MemberTest mtest; + mtest.CalculateLevelOfDetail = 1; // in HLSL, method names are valid struct members. + mtest.CalculateLevelOfDetailUnclamped = 1; // ... + mtest.Gather = 1; // ... + mtest.GetDimensions = 1; // ... + mtest.GetSamplePosition = 1; // ... + mtest.Load = 1; // ... + mtest.Sample = 1; // ... + mtest.SampleBias = 1; // ... + mtest.SampleCmp = 1; // ... + mtest.SampleCmpLevelZero = 1; // ... + mtest.SampleGrad = 1; // ... + mtest.SampleLevel = 1; // ... + + float4 txval10 = g_tTex1df4 . Sample(g_sSamp, 0.1); + int4 txval11 = g_tTex1di4 . Sample(g_sSamp, 0.2); + uint4 txval12 = g_tTex1du4 . Sample(g_sSamp, 0.3); + + float4 txval20 = g_tTex2df4 . Sample(g_sSamp, float2(0.1, 0.2)); + int4 txval21 = g_tTex2di4 . Sample(g_sSamp, float2(0.3, 0.4)); + uint4 txval22 = g_tTex2du4 . Sample(g_sSamp, float2(0.5, 0.6)); + + float4 txval30 = g_tTex3df4 . Sample(g_sSamp, float3(0.1, 0.2, 0.3)); + int4 txval31 = g_tTex3di4 . Sample(g_sSamp, float3(0.4, 0.5, 0.6)); + uint4 txval32 = g_tTex3du4 . Sample(g_sSamp, float3(0.7, 0.8, 0.9)); + + float4 txval40 = g_tTexcdf4 . Sample(g_sSamp, float3(0.1, 0.2, 0.3)); + int4 txval41 = g_tTexcdi4 . Sample(g_sSamp, float3(0.4, 0.5, 0.6)); + uint4 txval42 = g_tTexcdu4 . Sample(g_sSamp, float3(0.7, 0.8, 0.9)); + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/remap.hlsl.sample.basic.none.frag b/3rdparty/bgfx/3rdparty/glslang/Test/remap.hlsl.sample.basic.none.frag new file mode 100644 index 0000000..03e83ef --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/remap.hlsl.sample.basic.none.frag @@ -0,0 +1,90 @@ +SamplerState g_sSamp : register(s0); +uniform sampler2D g_sSamp2d +{ + AddressU = MIRROR; + AddressV = WRAP; + MinLOD = 0; + MaxLOD = 10; + MaxAnisotropy = 2; + MipLodBias = 0.2; +}, g_sSamp2D_b; + +Texture1D g_tTex1df4a : register(t1); + +uniform Texture1D g_tTex1df4 : register(t0); +Texture1D g_tTex1di4; +Texture1D g_tTex1du4; + +Texture2D g_tTex2df4; +Texture2D g_tTex2di4; +Texture2D g_tTex2du4; + +Texture3D g_tTex3df4; +Texture3D g_tTex3di4; +Texture3D g_tTex3du4; + +TextureCube g_tTexcdf4; +TextureCube g_tTexcdi4; +TextureCube g_tTexcdu4; + +struct MemberTest +{ + int Sample; // in HLSL, method names are valid struct members. + int CalculateLevelOfDetail; // ... + int CalculateLevelOfDetailUnclamped; // ... + int Gather; // ... + int GetDimensions; // ... + int GetSamplePosition; // ... + int Load; // ... + int SampleBias; // ... + int SampleCmp; // ... + int SampleCmpLevelZero; // ... + int SampleGrad; // ... + int SampleLevel; // ... +}; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + MemberTest mtest; + mtest.CalculateLevelOfDetail = 1; // in HLSL, method names are valid struct members. + mtest.CalculateLevelOfDetailUnclamped = 1; // ... + mtest.Gather = 1; // ... + mtest.GetDimensions = 1; // ... + mtest.GetSamplePosition = 1; // ... + mtest.Load = 1; // ... + mtest.Sample = 1; // ... + mtest.SampleBias = 1; // ... + mtest.SampleCmp = 1; // ... + mtest.SampleCmpLevelZero = 1; // ... + mtest.SampleGrad = 1; // ... + mtest.SampleLevel = 1; // ... + + float4 txval10 = g_tTex1df4 . Sample(g_sSamp, 0.1); + int4 txval11 = g_tTex1di4 . Sample(g_sSamp, 0.2); + uint4 txval12 = g_tTex1du4 . Sample(g_sSamp, 0.3); + + float4 txval20 = g_tTex2df4 . Sample(g_sSamp, float2(0.1, 0.2)); + int4 txval21 = g_tTex2di4 . Sample(g_sSamp, float2(0.3, 0.4)); + uint4 txval22 = g_tTex2du4 . Sample(g_sSamp, float2(0.5, 0.6)); + + float4 txval30 = g_tTex3df4 . Sample(g_sSamp, float3(0.1, 0.2, 0.3)); + int4 txval31 = g_tTex3di4 . Sample(g_sSamp, float3(0.4, 0.5, 0.6)); + uint4 txval32 = g_tTex3du4 . Sample(g_sSamp, float3(0.7, 0.8, 0.9)); + + float4 txval40 = g_tTexcdf4 . Sample(g_sSamp, float3(0.1, 0.2, 0.3)); + int4 txval41 = g_tTexcdi4 . Sample(g_sSamp, float3(0.4, 0.5, 0.6)); + uint4 txval42 = g_tTexcdu4 . Sample(g_sSamp, float3(0.7, 0.8, 0.9)); + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/remap.hlsl.sample.basic.strip.frag b/3rdparty/bgfx/3rdparty/glslang/Test/remap.hlsl.sample.basic.strip.frag new file mode 100644 index 0000000..03e83ef --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/remap.hlsl.sample.basic.strip.frag @@ -0,0 +1,90 @@ +SamplerState g_sSamp : register(s0); +uniform sampler2D g_sSamp2d +{ + AddressU = MIRROR; + AddressV = WRAP; + MinLOD = 0; + MaxLOD = 10; + MaxAnisotropy = 2; + MipLodBias = 0.2; +}, g_sSamp2D_b; + +Texture1D g_tTex1df4a : register(t1); + +uniform Texture1D g_tTex1df4 : register(t0); +Texture1D g_tTex1di4; +Texture1D g_tTex1du4; + +Texture2D g_tTex2df4; +Texture2D g_tTex2di4; +Texture2D g_tTex2du4; + +Texture3D g_tTex3df4; +Texture3D g_tTex3di4; +Texture3D g_tTex3du4; + +TextureCube g_tTexcdf4; +TextureCube g_tTexcdi4; +TextureCube g_tTexcdu4; + +struct MemberTest +{ + int Sample; // in HLSL, method names are valid struct members. + int CalculateLevelOfDetail; // ... + int CalculateLevelOfDetailUnclamped; // ... + int Gather; // ... + int GetDimensions; // ... + int GetSamplePosition; // ... + int Load; // ... + int SampleBias; // ... + int SampleCmp; // ... + int SampleCmpLevelZero; // ... + int SampleGrad; // ... + int SampleLevel; // ... +}; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + MemberTest mtest; + mtest.CalculateLevelOfDetail = 1; // in HLSL, method names are valid struct members. + mtest.CalculateLevelOfDetailUnclamped = 1; // ... + mtest.Gather = 1; // ... + mtest.GetDimensions = 1; // ... + mtest.GetSamplePosition = 1; // ... + mtest.Load = 1; // ... + mtest.Sample = 1; // ... + mtest.SampleBias = 1; // ... + mtest.SampleCmp = 1; // ... + mtest.SampleCmpLevelZero = 1; // ... + mtest.SampleGrad = 1; // ... + mtest.SampleLevel = 1; // ... + + float4 txval10 = g_tTex1df4 . Sample(g_sSamp, 0.1); + int4 txval11 = g_tTex1di4 . Sample(g_sSamp, 0.2); + uint4 txval12 = g_tTex1du4 . Sample(g_sSamp, 0.3); + + float4 txval20 = g_tTex2df4 . Sample(g_sSamp, float2(0.1, 0.2)); + int4 txval21 = g_tTex2di4 . Sample(g_sSamp, float2(0.3, 0.4)); + uint4 txval22 = g_tTex2du4 . Sample(g_sSamp, float2(0.5, 0.6)); + + float4 txval30 = g_tTex3df4 . Sample(g_sSamp, float3(0.1, 0.2, 0.3)); + int4 txval31 = g_tTex3di4 . Sample(g_sSamp, float3(0.4, 0.5, 0.6)); + uint4 txval32 = g_tTex3du4 . Sample(g_sSamp, float3(0.7, 0.8, 0.9)); + + float4 txval40 = g_tTexcdf4 . Sample(g_sSamp, float3(0.1, 0.2, 0.3)); + int4 txval41 = g_tTexcdi4 . Sample(g_sSamp, float3(0.4, 0.5, 0.6)); + uint4 txval42 = g_tTexcdu4 . Sample(g_sSamp, float3(0.7, 0.8, 0.9)); + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/remap.hlsl.templatetypes.everything.frag b/3rdparty/bgfx/3rdparty/glslang/Test/remap.hlsl.templatetypes.everything.frag new file mode 100644 index 0000000..f48c98a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/remap.hlsl.templatetypes.everything.frag @@ -0,0 +1,47 @@ + +float main(float4 input) : COLOR0 +{ + vector r00 = float4(1,2,3,4); // vector means float4 + float4 r01 = vector(2,3,4,5); // vector means float4 + + vector r12 = bool1(false); + vector r13 = int1(1); + vector r14 = float1(1); + vector r15 = double1(1); + vector r16 = uint1(1); + + vector r20 = bool2(false, true); + vector r21 = int2(1,2); + vector r22 = float2(1,2); + vector r23 = double2(1,2); + vector r24 = uint2(1,2); + + vector r30 = bool3(false, true, true); + vector r31 = int3(1,2,3); + vector r32 = float3(1,2,3); + vector r33 = double3(1,2,3); + vector r34 = uint3(1,2,3); + + vector r40 = bool4(false, true, true, false); + vector r41 = int4(1,2,3,4); + vector r42 = float4(1,2,3,4); + vector r43 = double4(1,2,3,4); + vector r44 = uint4(1,2,3,4); + + matrix r50 = float4x4(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); // matrix means float4x4 + float4x4 r51 = matrix(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); // matrix means float4x4 + + // matrix r60 = bool2x3(false, true, false, true, false, true); // TODO: + matrix r61 = float2x3(1,2,3,4,5,6); + matrix r62 = float3x2(1,2,3,4,5,6); + // matrix r63 = float4x1(1,2,3,4); // TODO: + // matrix r64 = float1x4(1,2,3,4); // TODO: + matrix r65 = float4x2(1,2,3,4,5,6,7,8); + matrix r66 = float4x3(1,2,3,4,5,6,7,8,9,10,11,12); + + // TODO: bool mats + // TODO: int mats + + return 0.0; +} + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/remap.hlsl.templatetypes.none.frag b/3rdparty/bgfx/3rdparty/glslang/Test/remap.hlsl.templatetypes.none.frag new file mode 100644 index 0000000..f48c98a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/remap.hlsl.templatetypes.none.frag @@ -0,0 +1,47 @@ + +float main(float4 input) : COLOR0 +{ + vector r00 = float4(1,2,3,4); // vector means float4 + float4 r01 = vector(2,3,4,5); // vector means float4 + + vector r12 = bool1(false); + vector r13 = int1(1); + vector r14 = float1(1); + vector r15 = double1(1); + vector r16 = uint1(1); + + vector r20 = bool2(false, true); + vector r21 = int2(1,2); + vector r22 = float2(1,2); + vector r23 = double2(1,2); + vector r24 = uint2(1,2); + + vector r30 = bool3(false, true, true); + vector r31 = int3(1,2,3); + vector r32 = float3(1,2,3); + vector r33 = double3(1,2,3); + vector r34 = uint3(1,2,3); + + vector r40 = bool4(false, true, true, false); + vector r41 = int4(1,2,3,4); + vector r42 = float4(1,2,3,4); + vector r43 = double4(1,2,3,4); + vector r44 = uint4(1,2,3,4); + + matrix r50 = float4x4(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); // matrix means float4x4 + float4x4 r51 = matrix(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); // matrix means float4x4 + + // matrix r60 = bool2x3(false, true, false, true, false, true); // TODO: + matrix r61 = float2x3(1,2,3,4,5,6); + matrix r62 = float3x2(1,2,3,4,5,6); + // matrix r63 = float4x1(1,2,3,4); // TODO: + // matrix r64 = float1x4(1,2,3,4); // TODO: + matrix r65 = float4x2(1,2,3,4,5,6,7,8); + matrix r66 = float4x3(1,2,3,4,5,6,7,8,9,10,11,12); + + // TODO: bool mats + // TODO: int mats + + return 0.0; +} + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/remap.if.everything.frag b/3rdparty/bgfx/3rdparty/glslang/Test/remap.if.everything.frag new file mode 100644 index 0000000..3fedfc4 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/remap.if.everything.frag @@ -0,0 +1,12 @@ +#version 450 + +in float inf; +out vec4 outf4; + +void main() +{ + if (inf > 2.0) + outf4 = vec4(inf); + else + outf4 = vec4(inf + -.5); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/remap.if.none.frag b/3rdparty/bgfx/3rdparty/glslang/Test/remap.if.none.frag new file mode 100644 index 0000000..3fedfc4 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/remap.if.none.frag @@ -0,0 +1,12 @@ +#version 450 + +in float inf; +out vec4 outf4; + +void main() +{ + if (inf > 2.0) + outf4 = vec4(inf); + else + outf4 = vec4(inf + -.5); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/remap.literal64.everything.spv b/3rdparty/bgfx/3rdparty/glslang/Test/remap.literal64.everything.spv new file mode 100644 index 0000000000000000000000000000000000000000..88103c4948834f038fa16ed1d6a290bc1d812b50 GIT binary patch literal 220 zcmYk0%?g7s5QHc3C&q&y;scZ(dzT*j{x8&u6gpps*o94Iznuwb;yoz@NlBwmYE~3v zQd4I1QrW83N_x5BH+yiQAL`1kwLWVzW7k!H_hVP@`|V_^{80AG{Nk#?k}Q?oHY!5@Cx7n literal 0 HcmV?d00001 diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/remap.literal64.none.spv b/3rdparty/bgfx/3rdparty/glslang/Test/remap.literal64.none.spv new file mode 100644 index 0000000000000000000000000000000000000000..88103c4948834f038fa16ed1d6a290bc1d812b50 GIT binary patch literal 220 zcmYk0%?g7s5QHc3C&q&y;scZ(dzT*j{x8&u6gpps*o94Iznuwb;yoz@NlBwmYE~3v zQd4I1QrW83N_x5BH+yiQAL`1kwLWVzW7k!H_hVP@`|V_^{80AG{Nk#?k}Q?oHY!5@Cx7n literal 0 HcmV?d00001 diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/remap.similar_1a.everything.frag b/3rdparty/bgfx/3rdparty/glslang/Test/remap.similar_1a.everything.frag new file mode 100644 index 0000000..6eddbc5 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/remap.similar_1a.everything.frag @@ -0,0 +1,29 @@ +#version 450 + +in float inf; +in flat ivec4 ini4; +out vec4 outf4; + +float Test1(int bound) +{ + float r = 0; + for (int x=0; x 2) + return Test1(bound); + else + return float(bound * 2 + + ini4.y * ini4.z + + ini4.x); +} + +void main() +{ + outf4 = vec4(Test1(int(inf)) + + Test2(int(inf))); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/remap.similar_1a.none.frag b/3rdparty/bgfx/3rdparty/glslang/Test/remap.similar_1a.none.frag new file mode 100644 index 0000000..6eddbc5 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/remap.similar_1a.none.frag @@ -0,0 +1,29 @@ +#version 450 + +in float inf; +in flat ivec4 ini4; +out vec4 outf4; + +float Test1(int bound) +{ + float r = 0; + for (int x=0; x 2) + return Test1(bound); + else + return float(bound * 2 + + ini4.y * ini4.z + + ini4.x); +} + +void main() +{ + outf4 = vec4(Test1(int(inf)) + + Test2(int(inf))); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/remap.similar_1b.everything.frag b/3rdparty/bgfx/3rdparty/glslang/Test/remap.similar_1b.everything.frag new file mode 100644 index 0000000..4600945 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/remap.similar_1b.everything.frag @@ -0,0 +1,30 @@ +#version 450 + +out vec4 outf4; +in flat ivec4 ini4; +in float inf; + +float Test1(int bound) +{ + float r = 0; + for (int x=0; x 2) { + return Test1(bound * 2); + } else + return float(bound * 4 + + ini4.y * ini4.z + + ini4.x); +} + +void main() +{ + outf4 = vec4(Test1(int(inf)) + + Test2(int(inf))); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/remap.similar_1b.none.frag b/3rdparty/bgfx/3rdparty/glslang/Test/remap.similar_1b.none.frag new file mode 100644 index 0000000..4600945 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/remap.similar_1b.none.frag @@ -0,0 +1,30 @@ +#version 450 + +out vec4 outf4; +in flat ivec4 ini4; +in float inf; + +float Test1(int bound) +{ + float r = 0; + for (int x=0; x 2) { + return Test1(bound * 2); + } else + return float(bound * 4 + + ini4.y * ini4.z + + ini4.x); +} + +void main() +{ + outf4 = vec4(Test1(int(inf)) + + Test2(int(inf))); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/remap.switch.everything.frag b/3rdparty/bgfx/3rdparty/glslang/Test/remap.switch.everything.frag new file mode 100644 index 0000000..140c079 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/remap.switch.everything.frag @@ -0,0 +1,16 @@ +#version 450 + +precision highp float; + +layout(location = 0) out mediump vec4 FragColor; +layout(location = 0) in vec4 in0; + +void main() +{ + switch(int(in0.w)) { + case 0: FragColor = vec4(in0.x + 0); break; + case 1: FragColor = vec4(in0.y + 1); break; + case 2: FragColor = vec4(in0.z + 2); break; + default: FragColor = vec4(-1); + } +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/remap.switch.none.frag b/3rdparty/bgfx/3rdparty/glslang/Test/remap.switch.none.frag new file mode 100644 index 0000000..140c079 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/remap.switch.none.frag @@ -0,0 +1,16 @@ +#version 450 + +precision highp float; + +layout(location = 0) out mediump vec4 FragColor; +layout(location = 0) in vec4 in0; + +void main() +{ + switch(int(in0.w)) { + case 0: FragColor = vec4(in0.x + 0); break; + case 1: FragColor = vec4(in0.y + 1); break; + case 2: FragColor = vec4(in0.z + 2); break; + default: FragColor = vec4(-1); + } +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/remap.uniformarray.everything.frag b/3rdparty/bgfx/3rdparty/glslang/Test/remap.uniformarray.everything.frag new file mode 100644 index 0000000..4f642e6 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/remap.uniformarray.everything.frag @@ -0,0 +1,17 @@ +#version 140 + +uniform sampler2D texSampler2D; +in vec3 inColor; +in vec4 color[6]; +in float alpha[16]; + +void main() +{ + vec4 texColor = color[1] + color[1]; + + texColor.xyz += inColor; + + texColor.a += alpha[12]; + + gl_FragColor = texColor; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/remap.uniformarray.none.frag b/3rdparty/bgfx/3rdparty/glslang/Test/remap.uniformarray.none.frag new file mode 100644 index 0000000..4f642e6 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/remap.uniformarray.none.frag @@ -0,0 +1,17 @@ +#version 140 + +uniform sampler2D texSampler2D; +in vec3 inColor; +in vec4 color[6]; +in float alpha[16]; + +void main() +{ + vec4 texColor = color[1] + color[1]; + + texColor.xyz += inColor; + + texColor.a += alpha[12]; + + gl_FragColor = texColor; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/runtests b/3rdparty/bgfx/3rdparty/glslang/Test/runtests new file mode 100755 index 0000000..86ffef3 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/runtests @@ -0,0 +1,83 @@ +#!/usr/bin/env bash + +TARGETDIR=localResults +BASEDIR=baseResults +EXE=../build/install/bin/glslangValidator +HASERROR=0 +mkdir -p localResults + +if [ -a localtestlist ] + then + while read t; do + echo Running $t... + b=`basename $t` + $EXE -i -l $t > $TARGETDIR/$b.out + diff -b $BASEDIR/$b.out $TARGETDIR/$b.out || HASERROR=1 + done < localtestlist +fi + +rm -f comp.spv frag.spv geom.spv tesc.spv tese.spv vert.spv + +# +# special tests +# + +$EXE badMacroArgs.frag > $TARGETDIR/badMacroArgs.frag.out +diff -b $BASEDIR/badMacroArgs.frag.out $TARGETDIR/badMacroArgs.frag.out || HASERROR=1 + +# +# reflection tests +# +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 +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 +diff -b $BASEDIR/hlsl.reflection.binding.frag.out $TARGETDIR/hlsl.reflection.binding.frag.out || HASERROR=1 + + +# +# multi-threaded test +# +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 + +# +# 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 +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 +diff -b $BASEDIR/hlsl.deadFunctionMissingBody.vert.out $TARGETDIR/hlsl.deadFunctionMissingBody.vert.out || HASERROR=1 + +if [ $HASERROR -eq 0 ] +then + echo Tests Succeeded. +else + echo Tests Failed. +fi + +# +# Testing -S +# +echo Running explicit stage test +$EXE -i -S vert nosuffix > $TARGETDIR/nosuffix.out +diff -b $BASEDIR/nosuffix.out $TARGETDIR/nosuffix.out || HASERROR=1 + +if [ $HASERROR -eq 0 ] +then + echo Tests Succeeded. +else + echo Tests Failed. +fi + +exit $HASERROR diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/sample.frag b/3rdparty/bgfx/3rdparty/glslang/Test/sample.frag new file mode 100644 index 0000000..d9b9f5c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/sample.frag @@ -0,0 +1,41 @@ +// +//Copyright (C) 2002-2004 3Dlabs Inc. Ltd. +//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. +// +#version 110 + +varying vec3 color; + +void main() +{ + gl_FragColor = vec4(color, 1.0); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/sample.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/sample.frag.out new file mode 100644 index 0000000..8885dba --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/sample.frag.out @@ -0,0 +1,15 @@ +#### BEGIN COMPILER 0 INFO LOG #### +0:? Sequence +0:37 Function Definition: main( (void) +0:37 Function Parameters: +0:39 Sequence +0:39 move second child to first child (4-component vector of float) +0:39 'gl_FragColor' (FragColor 4-component vector of float) +0:39 Construct vec4 (4-component vector of float) +0:39 'color' (varying in 3-component vector of float) +0:39 1.000000 (const float) + +#### END COMPILER 0 INFO LOG #### +#### BEGIN LINKER INFO LOG #### + +#### END LINKER INFO LOG #### diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/sample.vert b/3rdparty/bgfx/3rdparty/glslang/Test/sample.vert new file mode 100644 index 0000000..8cda91f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/sample.vert @@ -0,0 +1,43 @@ +// +//Copyright (C) 2002-2004 3Dlabs Inc. Ltd. +//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. +// +#version 110 + +varying vec3 color; + +void main() +{ + color = vec3(1.0, 1.0, 1.0); + + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/sample.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/sample.vert.out new file mode 100644 index 0000000..aef6bb1 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/sample.vert.out @@ -0,0 +1,20 @@ +#### BEGIN COMPILER 0 INFO LOG #### +0:? Sequence +0:37 Function Definition: main( (void) +0:37 Function Parameters: +0:39 Sequence +0:39 move second child to first child (3-component vector of float) +0:39 'color' (varying out 3-component vector of float) +0:39 1.000000 (const float) +0:39 1.000000 (const float) +0:39 1.000000 (const float) +0:41 move second child to first child (4-component vector of float) +0:41 'gl_Position' (Position 4-component vector of float) +0:41 matrix-times-vector (4-component vector of float) +0:41 'gl_ModelViewProjectionMatrix' (uniform 4X4 matrix of float) +0:41 'gl_Vertex' (attribute 4-component vector of float) + +#### END COMPILER 0 INFO LOG #### +#### BEGIN LINKER INFO LOG #### + +#### END LINKER INFO LOG #### diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/simpleFunctionCall.frag b/3rdparty/bgfx/3rdparty/glslang/Test/simpleFunctionCall.frag new file mode 100644 index 0000000..59f0ccd --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/simpleFunctionCall.frag @@ -0,0 +1,15 @@ +#version 150 + +uniform vec4 bigColor; +varying vec4 BaseColor; +uniform float d; + +vec4 foo() +{ + return BaseColor; +} + +void main() +{ + gl_FragColor = foo(); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/specExamples.frag b/3rdparty/bgfx/3rdparty/glslang/Test/specExamples.frag new file mode 100644 index 0000000..7eec45e --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/specExamples.frag @@ -0,0 +1,237 @@ +#version 430 + +#extension GL_3DL_array_objects : enable + +int a = 0xffffffff; // 32 bits, a gets the value -1 +int b = 0xffffffffU; // ERROR: can't convert uint to int +uint c = 0xffffffff; // 32 bits, c gets the value 0xFFFFFFFF +uint d = 0xffffffffU; // 32 bits, d gets the value 0xFFFFFFFF +int e = -1; // the literal is "1", then negation is performed, + // and the resulting non-literal 32-bit signed + // bit pattern of 0xFFFFFFFF is assigned, giving e + // the value of -1. +uint f = -1u; // the literal is "1u", then negation is performed, + // and the resulting non-literal 32-bit unsigned + // bit pattern of 0xFFFFFFFF is assigned, giving f + // the value of 0xFFFFFFFF. +int g = 3000000000; // a signed decimal literal taking 32 bits, + // setting the sign bit, g gets -1294967296 +int h = 0xA0000000; // okay, 32-bit signed hexadecimal +int i = 5000000000; // ERROR: needs more than 32 bits +int j = 0xFFFFFFFFF; // ERROR: needs more that 32 bits +int k = 0x80000000; // k gets -2147483648 == 0x80000000 +int l = 2147483648; // l gets -2147483648 (the literal set the sign bit) + +float fa, fb = 1.5; // single-precision floating-point +double fc, fd = 2.0LF; // double-precision floating-point + +vec2 texcoord1, texcoord2; +vec3 position; +vec4 myRGBA; +ivec2 textureLookup; +bvec3 less; + +mat2 mat2D; +mat3 optMatrix; +mat4 view, projection; +mat4x4 view; // an alternate way of declaring a mat4 +mat3x2 m; // a matrix with 3 columns and 2 rows +dmat4 highPrecisionMVP; +dmat2x4 dm; + +struct light { + float intensity; + vec3 position; +} lightVar; + +struct S { float f; }; + +struct T { + //S; // Error: anonymous structures disallowed + //struct { ... }; // Error: embedded structures disallowed + S s; // Okay: nested structures with name are allowed +}; + +float frequencies[3]; +uniform vec4 lightPosition[4]; +light lights[]; +const int numLights = 2; +light lights[numLights]; + +in vec3 normal; +centroid in vec2 TexCoord; +invariant centroid in vec4 Color; +noperspective in float temperature; +flat in vec3 myColor; +noperspective centroid in vec2 myTexCoord; + +uniform vec4 lightPosition; +uniform vec3 color = vec3(0.7, 0.7, 0.2); // value assigned at link time + +in Material { + smooth in vec4 Color1; // legal, input inside in block + smooth vec4 Color2; // legal, 'in' inherited from 'in Material' + vec2 TexCoordA; // legal, TexCoord is an input + uniform float Atten; // illegal, mismatched storage qualifier + +}; + +in Light { + vec4 LightPos; + vec3 LightColor; +}; +in ColoredTexture { + vec4 Color; + vec2 TexCoord; +} Materiala; // instance name +vec3 Color; // different Color than Material.Color + +in vec4 gl_FragCoord; // redeclaration that changes nothing is allowed + +// All the following are allowed redeclaration that change behavior +layout(origin_upper_left) in vec4 gl_FragCoord; +layout(pixel_center_integer) in vec4 gl_FragCoord; +layout(origin_upper_left, pixel_center_integer) in vec4 gl_FragCoord; + +layout(early_fragment_tests) in; + +// compute shader: +layout (local_size_x = 32, local_size_y = 32) in; +layout (local_size_x = 8) in; + +layout(location = 3) out vec4 color; +layout(location = 3, index = 1) out vec4 factor; +layout(location = 2) out vec4 colors[3]; + +layout (depth_greater) out float gl_FragDepth; + +// redeclaration that changes nothing is allowed +out float gl_FragDepth; + +// assume it may be modified in any way +layout (depth_any) out float gl_FragDepth; + +// assume it may be modified such that its value will only increase +layout (depth_greater) out float gl_FragDepth; + +// assume it may be modified such that its value will only decrease +layout (depth_less) out float gl_FragDepth; + +// assume it will not be modified +layout (depth_unchanged) out float gl_FragDepth; + +in vec4 gl_Color; // predeclared by the fragment language +flat in vec4 gl_Color; // redeclared by user to be flat + + +float[5] foo(float[5]) +{ + return float[5](3.4, 4.2, 5.0, 5.2, 1.1); +} + +precision highp float; +precision highp int; +precision mediump int; +precision highp float; + +void main() +{ + { + float a[5] = float[5](3.4, 4.2, 5.0, 5.2, 1.1); + } + { + float a[5] = float[](3.4, 4.2, 5.0, 5.2, 1.1); // same thing + } + { + vec4 a[3][2]; // size-3 array of size-2 array of vec4 + vec4[2] a1[3]; // size-3 array of size-2 array of vec4 + vec4[3][2] a2; // size-3 array of size-2 array of vec4 + vec4 b[2] = vec4[2](vec4(0.0), vec4(0.1)); + vec4[3][2] a3 = vec4[3][2](b, b, b); // constructor + void foo(vec4[3][2]); // prototype with unnamed parameter + vec4 a4[3][2] = {vec4[2](vec4(0.0), vec4(1.0)), + vec4[2](vec4(0.0), vec4(1.0)), + vec4[2](vec4(0.0), vec4(1.0)) }; + } + { + float a[5]; + { + float b[] = a; // b is explicitly size 5 + } + { + float b[5] = a; // means the same thing + } + { + float b[] = float[](1,2,3,4,5); // also explicitly sizes to 5 + } + a.length(); // returns 5 + } + { + vec4 a[3][2]; + a.length(); // this is 3 + a[x].length(); // this is 2 + } + // for an array b containing a member array a: + b[++x].a.length(); // b is never dereferenced, but “++x” is evaluated + + // for an array s of a shader storage object containing a member array a: + s[x].a.length(); // s is dereferenced; x needs to be a valid index + // + //All of the following declarations result in a compile-time error. + //float a[2] = { 3.4, 4.2, 5.0 }; // illegal + //vec2 b = { 1.0, 2.0, 3.0 }; // illegal + //mat3x3 c = { vec3(0.0), vec3(1.0), vec3(2.0), vec3(3.0) }; // illegal + //mat2x2 d = { 1.0, 0.0, 0.0, 1.0 }; // illegal, can't flatten nesting + //struct { + // float a; + // int b; + //} e = { 1.2, 2, 3 }; // illegal + + struct { + float a; + int b; + } e = { 1.2, 2 }; // legal, all types match + + struct { + float a; + int b; + } e = { 1, 3 }; // legal, first initializer is converted + + //All of the following declarations result in a compile-time error. + //int a = true; // illegal + //vec4 b[2] = { vec4(0.0), 1.0 }; // illegal + //mat4x2 c = { vec3(0.0), vec3(1.0) }; // illegal + + //struct S1 { + // vec4 a; + // vec4 b; + //}; + + //struct { + // float s; + // float t; + //} d[] = { S1(vec4(0.0), vec4(1.1)) }; // illegal + + { + float a[] = float[](3.4, 4.2, 5.0, 5.2, 1.1); + float b[] = { 3.4, 4.2, 5.0, 5.2, 1.1 }; + float c[] = a; // c is explicitly size 5 + float d[5] = b; // means the same thing + } + { + const vec3 zAxis = vec3 (0.0, 0.0, 1.0); + const float ceiling = a + b; // a and b not necessarily constants + } + { + in vec4 position; + in vec3 normal; + in vec2 texCoord[4]; + } + { + lowp float color; + out mediump vec2 P; + lowp ivec2 foo(lowp mat3); + highp mat4 m; + } + +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/specExamples.vert b/3rdparty/bgfx/3rdparty/glslang/Test/specExamples.vert new file mode 100644 index 0000000..9df1561 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/specExamples.vert @@ -0,0 +1,196 @@ +#version 430 + +#extension GL_3DL_array_objects : enable + +out Vertex { + vec4 Position; // API transform/feedback will use “Vertex.Position” + vec2 Texture; +} Coords; // shader will use “Coords.Position” + +out Vertex2 { + vec4 Color; // API will use “Color” +}; + +uniform Transform { // API uses “Transform[2]” to refer to instance 2 + mat4 ModelViewMatrix; + mat4 ModelViewProjectionMatrix; + vec4 a[]; // array will get implicitly sized + float Deformation; +} transforms[4]; + +layout(location = 3) in vec4 normal; +layout(location = 6) in vec4 colors[3]; +layout(location = 9) in mat4 transforms2[2]; + +layout(location = 3) struct S { + vec3 a1; + mat2 b; + vec4 c[2]; +} s; + +layout(triangles, invocations = 6) in; + +layout(lines) in; // legal for Color2, input size is 2, matching Color2 + +layout(triangle_strip, max_vertices = 60) out; // order does not matter +layout(max_vertices = 60) out; // redeclaration okay +layout(triangle_strip) out; // redeclaration okay +//layout(points) out; // error, contradicts triangle_strip +//layout(max_vertices = 30) out; // error, contradicts 60 + +layout(stream = 1) out; + +layout(stream=1) out; // default is now stream 1 +out vec4 var1; // var1 gets default stream (1) +layout(stream=2) out Block1 { // "Block1" belongs to stream 2 + layout(stream=2) vec4 var2; // redundant block member stream decl + layout(stream=3) vec2 var3; // ILLEGAL (must match block stream) + vec3 var4; // belongs to stream 2 +}; +layout(stream=0) out; // default is now stream 0 +out vec4 var5; // var5 gets default stream (0) +out Block2 { // "Block2" gets default stream (0) + vec4 var6; +}; +layout(stream=3) out vec4 var7; // var7 belongs to stream 3 + +layout(shared, column_major) uniform; +layout(shared, column_major) buffer; + +layout(row_major, column_major) + +layout(shared, row_major) uniform; // default is now shared and row_major + +layout(std140) uniform Transform2 { // layout of this block is std140 + mat4 M1; // row_major + layout(column_major) mat4 M2; // column major + mat3 N1; // row_major +}; + +layout(column_major) uniform T3 { // shared and column_major + mat4 M13; // column_major + layout(row_major) mat4 m14; // row major + mat3 N12; // column_major +}; + +// in one compilation unit... +layout(binding=3) uniform sampler2D s17; // s bound to unit 3 + +// in another compilation unit... +uniform sampler2D s17; // okay, s still bound at 3 + +// in another compilation unit... +//layout(binding=4) uniform sampler2D s; // ERROR: contradictory bindings + +layout (binding = 2, offset = 4) uniform atomic_uint a2; + +layout (binding = 2) uniform atomic_uint bar; + +layout (binding = 2, offset = 4) uniform atomic_uint; + +layout (binding = 2) uniform atomic_uint bar; // offset is 4 +layout (offset = 8) uniform atomic_uint bar23; // error, no default binding + +layout (binding=3, offset=4) uniform atomic_uint a2; // offset = 4 +layout (binding=2) uniform atomic_uint b2; // offset = 0 +layout (binding=3) uniform atomic_uint c2; // offset = 8 +layout (binding=2) uniform atomic_uint d2; // offset = 4 + +//layout (offset=4) // error, must include binding +//layout (binding=1, offset=0) a; // okay +//layout (binding=2, offset=0) b; // okay +//layout (binding=1, offset=0) c; // error, offsets must not be shared +// // between a and c +//layout (binding=1, offset=2) d; // error, overlaps offset 0 of a + +flat in vec4 gl_FrontColor; // input to geometry shader, no “gl_in[]” +flat out vec4 gl_FrontColor; // output from geometry shader + +invariant gl_Position; // make existing gl_Position be invariant + +out vec3 ColorInv; +invariant ColorIvn; // make existing Color be invariant + +invariant centroid out vec3 Color4; +precise out vec4 position; + +out vec3 Color5; +precise Color5; // make existing Color be precise +in vec4 a, b, c, d; +precise out vec4 v; + +coherent buffer Block { + readonly vec4 member1; + vec4 member2; +}; + +buffer Block2a { + coherent readonly vec4 member1A; + coherent vec4 member2A; +}; + +shared vec4 shv; + +vec4 funcA(restrict image2D a) { } + +vec4 funcB(image2D a) { } +layout(rgba32f) uniform image2D img1; +layout(rgba32f) coherent uniform image2D img2; + +float func(float e, float f, float g, float h) +{ + return (e*f) + (g*h); // no constraint on order or + // operator consistency +} + +float func2(float e, float f, float g, float h) +{ + precise float result = (e*f) + (g*h); // ensures same precision for + // the two multiplies + return result; +} + +float func3(float i, float j, precise out float k) +{ + k = i * i + j; // precise, due to declaration +} + +void main() +{ + vec3 r = vec3(a * b); // precise, used to compute v.xyz + vec3 s = vec3(c * d); // precise, used to compute v.xyz + v.xyz = r + s; // precise + v.w = (a.w * b.w) + (c.w * d.w); // precise + v.x = func(a.x, b.x, c.x, d.x); // values computed in func() + // are NOT precise + v.x = func2(a.x, b.x, c.x, d.x); // precise! + func3(a.x * b.x, c.x * d.x, v.x); // precise! + + funcA(img1); // OK, adding "restrict" is allowed + funcB(img2); // illegal, stripping "coherent" is not + + { + struct light { + float intensity; + vec3 position; + }; + + light lightVar = light(3.0, vec3(1.0, 2.0, 3.0)); + } + { + const float c[3] = float[3](5.0, 7.2, 1.1); + const float d[3] = float[](5.0, 7.2, 1.1); + + float g; + float a[5] = float[5](g, 1, g, 2.3, g); + float b[3]; + + b = float[3](g, g + 1.0, g + 2.0); + } + { + vec4 b[2] = { vec4(1.0), vec4(1.0) }; + vec4[3][2](b, b, b); // constructor + vec4[][2](b, b, b); // constructor, valid, size deduced + vec4[3][](b, b, b); // compile-time error, invalid type constructed + } +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.100ops.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.100ops.frag new file mode 100644 index 0000000..43452a1 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.100ops.frag @@ -0,0 +1,27 @@ +#version 310 es + +lowp float foo(); + +in lowp float low, high; + +lowp float face1 = 11.0; + +out lowp vec4 Color; + +void main() +{ + int z = 3; + + if (2.0 * low + 1.0 < high) + ++z; + + Color = face1 * vec4(z) + foo(); +} + +lowp float face2 = -2.0; + +lowp float foo() +{ + // testing if face2 initializer insert logic is correct in main + return face2; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.130.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.130.frag new file mode 100644 index 0000000..e7fdd38 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.130.frag @@ -0,0 +1,93 @@ +#version 140 +#extension GL_ARB_texture_gather : enable + +vec3 a; +float b; + +in vec4 i; +out vec4 o; +out ivec3 io; +out uvec4 uo; + +flat in float fflat; +smooth in float fsmooth; +noperspective in float fnop; + +uniform samplerCube sampC; + +#extension GL_ARB_texture_rectangle : enable + +uniform sampler2D samp2D; +uniform sampler2DShadow samp2DS; +uniform sampler2DRect samp2DR; +uniform sampler2DArray samp2DA; + +void bar3() +{ + o += textureGatherOffset(samp2D, vec2(0.3), ivec2(1)); + o += textureGatherOffset(samp2DA, vec3(0.3), ivec2(1)); +} + +#extension GL_ARB_gpu_shader5 : enable + +void bar4() +{ + o += textureGatherOffset(samp2DR, vec2(0.3), ivec2(1)); + o += textureGatherOffset(samp2DS, vec2(0.3), 1.3, ivec2(1)); + o += textureGatherOffset(samp2D, vec2(0.3), ivec2(1), 2); +} + +#extension GL_ARB_texture_cube_map_array : enable + +uniform samplerCubeArray Sca; +uniform isamplerCubeArray Isca; +uniform usamplerCubeArray Usca; +uniform samplerCubeArrayShadow Scas; + +void bar5() +{ + io = textureSize(Sca, 3); + o += texture(Sca, i); + io += texture(Isca, i, 0.7).xyz; + uo = texture(Usca, i); + + o += textureLod(Sca, i, 1.7); + a = textureSize(Scas, 3); + float f = texture(Scas, i, i.y); + ivec4 c = textureGrad(Isca, i, vec3(0.1), vec3(0.2)); + o += vec4(a, f + c); +} + +#extension GL_ARB_shading_language_420pack : enable + +const int ai[3] = { 10, 23, 32 }; +uniform layout(binding=0) sampler2D bounds; + +void bar6() +{ + mat4x3 m43; + float a1 = m43[3].y; + //int a2 = m43.length(); // ERROR until shading_language_420pack is fully implemented + const float b = 2 * a1; + //a.x = gl_MinProgramTexelOffset + gl_MaxProgramTexelOffset; // ERROR until shading_language_420pack is fully implemented +} + + +#extension GL_ARB_texture_rectangle : enable +#extension GL_ARB_shader_texture_lod : require + +uniform sampler2D s2D; +uniform sampler2DRect s2DR; +uniform sampler2DRectShadow s2DRS; +uniform sampler1D s1D; +uniform sampler2DShadow s2DS; + +void main() +{ + o = textureGather(sampC, vec3(0.2)); + o.y = gl_ClipDistance[3]; + bar3(); + bar4(); + bar5(); + bar6(); +} \ No newline at end of file diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.140.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.140.frag new file mode 100644 index 0000000..ceeac47 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.140.frag @@ -0,0 +1,46 @@ +#version 140 + +in vec4 k; +out vec4 o; + +in float gl_ClipDistance[5]; + +layout(row_major) uniform; + +uniform sampler2D samp2Da[3]; + +layout(std140) uniform bn { + layout(row_major) mat4 matra[4]; + layout(column_major) mat4 matca[4]; + layout(row_major) mat4 matr; + layout(column_major) mat4 matc; + layout(align=512, offset=1024) mat4 matrdef; +}; + +uniform sampler2DRect sampR; +uniform isamplerBuffer sampB; + +float foo(); + +void main() +{ + o.y = gl_ClipDistance[2]; + o.z = gl_ClipDistance[int(k)]; + o.w = float(textureSize(sampR) + textureSize(sampB)) / 100.0; + o.z = foo(); +} + +// Test extra-function initializers + +float i1 = gl_FrontFacing ? -2.0 : 2.0; +float i2 = 102; + +float foo() +{ + return i1 + i2; +} + +// test arrayed block +layout(std140) uniform bi { + vec3 v[2]; +} bname[4]; diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.150.geom b/3rdparty/bgfx/3rdparty/glslang/Test/spv.150.geom new file mode 100644 index 0000000..0419265 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.150.geom @@ -0,0 +1,39 @@ +#version 150 core + +layout(triangles_adjacency) in; +layout(max_vertices = 30) out; +layout(stream = 3, triangle_strip) out; + +in fromVertex { + in vec3 color; +} fromV[]; + +out toFragment { + out vec3 color; +} toF; + +out fromVertex { + vec3 color; +}; + +void main() +{ + color = fromV[0].color; + //?? gl_ClipDistance[3] = gl_in[1].gl_ClipDistance[2]; + gl_Position = gl_in[0].gl_Position; + gl_PointSize = gl_in[3].gl_PointSize; + gl_PrimitiveID = gl_PrimitiveIDIn; + gl_Layer = 2; + + EmitVertex(); + + color = 2 * fromV[0].color; + gl_Position = 2.0 * gl_in[0].gl_Position; + gl_PointSize = 2.0 * gl_in[3].gl_PointSize; + gl_PrimitiveID = gl_PrimitiveIDIn + 1; + gl_Layer = 3; + + EmitVertex(); + + EndPrimitive(); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.150.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.150.vert new file mode 100644 index 0000000..382e3c9 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.150.vert @@ -0,0 +1,38 @@ +#version 150 core + +in vec4 iv4; + +in float ps; +in int ui; +uniform sampler2D s2D; + +invariant gl_Position; + +struct s1 { + int a; + int a2; + vec4 b[3]; +}; + +struct s2 { + int c; + s1 d[4]; +}; + +out s2 s2out; + +void main() +{ + gl_Position = iv4; + gl_PointSize = ps; + gl_ClipDistance[2] = iv4.x; + int i; + s2out.d[i].b[2].w = ps; + + // test non-implicit lod + texture(s2D, vec2(0.5)); + textureProj(s2D, vec3(0.5)); + textureLod(s2D, vec2(0.5), 3.2); +} + +out float gl_ClipDistance[4]; diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.300BuiltIns.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.300BuiltIns.vert new file mode 100644 index 0000000..46c3f0f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.300BuiltIns.vert @@ -0,0 +1,14 @@ +#version 310 es + +in mediump float ps; + +invariant gl_Position; + +void main() +{ + gl_Position = vec4(ps); + gl_Position *= float(4 - gl_VertexIndex); + + gl_PointSize = ps; + gl_PointSize *= float(5 - gl_InstanceIndex); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.300layout.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.300layout.frag new file mode 100644 index 0000000..5b4c56c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.300layout.frag @@ -0,0 +1,22 @@ +#version 310 es + +precision mediump float; + +in vec4 pos; +in vec3 color; + +layout(location = 7) out vec3 c; +layout(LocatioN = 3) out vec4 p[2]; + +struct S { + vec3 c; + float f; +}; + +in S s; + +void main() +{ + c = color + s.c; + p[1] = pos * s.f; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.300layout.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.300layout.vert new file mode 100644 index 0000000..a32a95d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.300layout.vert @@ -0,0 +1,49 @@ +#version 310 es + +layout(location = 7) in vec3 c; +layout(LocatioN = 3) in vec4 p; +layout(location = 9) in ivec2 aiv2; +out vec4 pos; +out vec3 color; +flat out int iout; + +layout(row_major) uniform; // default is now row_major + +layout(std140) uniform Transform { // layout of this block is std140 + mat4 M1; // row_major + layout(column_major) mat4 M2; // column major + mat3 N1; // row_major + int iuin; +} tblock; + +uniform T2 { // layout of this block is shared + bool b; + mat4 t2m; +}; + +layout(column_major) uniform T3 { // shared and column_major + mat4 M3; // column_major + layout(row_major) mat4 M4; // row major + mat2x3 N2; // column_major + layout(align=16, offset=2048) uvec3 uv3a[4]; +}; + +in uint uiuin; + +struct S { + vec3 c; + float f; +}; + +out S s; + +void main() +{ + pos = p * (tblock.M1 + tblock.M2 + M4 + M3 + t2m); + color = c * tblock.N1; + iout = tblock.iuin + int(uiuin) + aiv2.y; + s.c = c; + s.f = p.x; + if (N2[1] != vec3(1.0) || uv3a[2] != uvec3(5)) + ++s.c; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.300layoutp.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.300layoutp.vert new file mode 100644 index 0000000..d14aa1c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.300layoutp.vert @@ -0,0 +1,49 @@ +#version 310 es + +layout(location = 7) in vec3 c; +layout(LocatioN = 3) in vec4 p; +layout(location = 9) in ivec2 aiv2; +out vec4 pos; +out vec3 color; +flat out int iout; + +layout(row_major) uniform; // default is now row_major + +layout(std140) uniform Transform { // layout of this block is std140 + mat4 M1; // row_major + layout(column_major) mat4 M2; // column major + mat3 N1; // row_major + int iuin; +} tblock; + +uniform T2 { // layout of this block is shared + bool b; + mat4 t2m; +}; + +layout(column_major) uniform T3 { // shared and column_major + mat4 M3; // column_major + layout(row_major) mat4 M4; // row major + mat2x3 N2; // column_major + uvec3 uv3a[4]; +}; + +uint uiuin; + +struct S { + vec3 c; + float f; +}; + +out S s; + +void main() +{ + pos = p * (tblock.M1 * tblock.M2 * M4 * M3 * t2m); + color = c * tblock.N1; + iout = tblock.iuin + int(uiuin) + aiv2.y; + s.c = c; + s.f = p.x; + if (N2[1] != vec3(1.0) || uv3a[2] != uvec3(5)) + ++s.c; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.310.bitcast.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.310.bitcast.frag new file mode 100644 index 0000000..dbde52f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.310.bitcast.frag @@ -0,0 +1,41 @@ +#version 310 es + +flat in mediump int i1; +flat in lowp ivec2 i2; +flat in mediump ivec3 i3; +flat in highp ivec4 i4; + +flat in mediump uint u1; +flat in lowp uvec2 u2; +flat in mediump uvec3 u3; +flat in highp uvec4 u4; + +mediump in float f1; +lowp in vec2 f2; +mediump in vec3 f3; +highp in vec4 f4; + +void main() +{ + highp ivec4 idata = ivec4(0); + idata.x += floatBitsToInt(f1); + idata.xy += floatBitsToInt(f2); + idata.xyz += floatBitsToInt(f3); + idata += floatBitsToInt(f4); + + highp uvec4 udata = uvec4(0); + udata.x += floatBitsToUint(f1); + udata.xy += floatBitsToUint(f2); + udata.xyz += floatBitsToUint(f3); + udata += floatBitsToUint(f4); + + highp vec4 fdata = vec4(0.0); + fdata.x += intBitsToFloat(i1); + fdata.xy += intBitsToFloat(i2); + fdata.xyz += intBitsToFloat(i3); + fdata += intBitsToFloat(i4); + fdata.x += uintBitsToFloat(u1); + fdata.xy += uintBitsToFloat(u2); + fdata.xyz += uintBitsToFloat(u3); + fdata += uintBitsToFloat(u4); +} \ No newline at end of file diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.310.comp b/3rdparty/bgfx/3rdparty/glslang/Test/spv.310.comp new file mode 100644 index 0000000..6cbb043 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.310.comp @@ -0,0 +1,40 @@ +#version 310 es + +precision highp float; + +layout (local_size_x = 16, local_size_y = 32, local_size_z = 4) in; + +shared float s; +shared int i; + +buffer outb { + float f; + float g; + float h; + vec3 uns[]; +} outbname; + +buffer outbna { + int k; + vec4 na; +} outbnamena; + +buffer outs { + int s; + vec4 va[]; +} outnames; + +#extension GL_EXT_device_group : enable + +void main() +{ + barrier(); + outbname.f = s; + outbnamena.na = vec4(s); + s = outbname.uns[18].x; + outbname.uns[17] = vec3(3.0); + outbname.uns[i] = vec3(s); + outnames.va[gl_LocalInvocationID.x] = vec4(s); + outnames.s = outbname.uns.length(); + gl_DeviceIndex; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.330.geom b/3rdparty/bgfx/3rdparty/glslang/Test/spv.330.geom new file mode 100644 index 0000000..ebd4ac6 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.330.geom @@ -0,0 +1,26 @@ +#version 330 core +#extension GL_ARB_separate_shader_objects : enable + +in gl_PerVertex +{ + float gl_ClipDistance[1]; + vec4 gl_Position; +} gl_in[]; + +out gl_PerVertex +{ + vec4 gl_Position; + float gl_ClipDistance[1]; +}; + +layout( triangles ) in; +layout( triangle_strip, max_vertices = 3 ) out; + +void main() +{ + vec4 v; + gl_Position = gl_in[1].gl_Position; + gl_ClipDistance[0] = gl_in[1].gl_ClipDistance[0]; + EmitVertex(); + EndPrimitive(); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.400.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.400.frag new file mode 100644 index 0000000..d64c470 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.400.frag @@ -0,0 +1,265 @@ +#version 400 core + +in vec2 c2D; +flat in int i; +flat in uint u; +out uint uo; +out vec4 outp; +out ivec4 ioutp; +out uvec4 uoutp; +uniform sampler2D arrayedSampler[5]; +uniform usampler2DRect samp2dr; +uniform isampler2DArray isamp2DA; +uniform sampler2DRectShadow u2drs; + +#extension GL_ARB_separate_shader_objects : enable + +layout(location = 6) in vec4 vl2; + +void foo23() +{ + const ivec2[3] offsets = ivec2[3](ivec2(1,2), ivec2(3,4), ivec2(15,16)); + + outp.x += textureProjGradOffset(u2drs, outp, vec2(0.0), vec2(0.0), offsets[1]); +} + +void doubles() +{ + double doublev; + dvec2 dvec2v; + dvec3 dvec3v; + dvec4 dvec4v; + + bool boolv; + bvec2 bvec2v; + bvec3 bvec3v; + bvec4 bvec4v; + + doublev = sqrt(2.9); + dvec2v = sqrt(dvec2(2.7)); + dvec3v = sqrt(dvec3(2.0)); + dvec4v = sqrt(dvec4(doublev)); + + doublev += inversesqrt(doublev); + dvec2v += inversesqrt(dvec2v); + dvec3v += inversesqrt(dvec3v); + dvec4v += inversesqrt(dvec4v); + + doublev += abs(doublev); + dvec2v += abs(dvec2v); + dvec3v += abs(dvec3v); + dvec4v += abs(dvec4v); + + doublev += sign(doublev); + dvec2v += sign(dvec2v); + dvec3v += sign(dvec3v); + dvec4v += sign(dvec4v); + + doublev += floor(doublev); + dvec2v += floor(dvec2v); + dvec3v += floor(dvec3v); + dvec4v += floor(dvec4v); + + doublev += trunc(doublev); + dvec2v += trunc(dvec2v); + dvec3v += trunc(dvec3v); + dvec4v += trunc(dvec4v); + + doublev += round(doublev); + dvec2v += round(dvec2v); + dvec3v += round(dvec3v); + dvec4v += round(dvec4v); + + doublev += roundEven(doublev); + dvec2v += roundEven(dvec2v); + dvec3v += roundEven(dvec3v); + dvec4v += roundEven(dvec4v); + + doublev += ceil(doublev); + dvec2v += ceil(dvec2v); + dvec3v += ceil(dvec3v); + dvec4v += ceil(dvec4v); + + doublev += fract(doublev); + dvec2v += fract(dvec2v); + dvec3v += fract(dvec3v); + dvec4v += fract(dvec4v); + + doublev += mod(doublev, doublev); + dvec2v += mod(dvec2v, doublev); + dvec3v += mod(dvec3v, doublev); + dvec4v += mod(dvec4v, doublev); + dvec2v += mod(dvec2v, dvec2v); + dvec3v += mod(dvec3v, dvec3v); + dvec4v += mod(dvec4v, dvec4v); + + doublev += modf(doublev, doublev); + dvec2v += modf(dvec2v, dvec2v); + dvec3v += modf(dvec3v, dvec3v); + dvec4v += modf(dvec4v, dvec4v); + + doublev += min(doublev, doublev); + dvec2v += min(dvec2v, doublev); + dvec3v += min(dvec3v, doublev); + dvec4v += min(dvec4v, doublev); + dvec2v += min(dvec2v, dvec2v); + dvec3v += min(dvec3v, dvec3v); + dvec4v += min(dvec4v, dvec4v); + + doublev += max(doublev, doublev); + dvec2v += max(dvec2v, doublev); + dvec3v += max(dvec3v, doublev); + dvec4v += max(dvec4v, doublev); + dvec2v += max(dvec2v, dvec2v); + dvec3v += max(dvec3v, dvec3v); + dvec4v += max(dvec4v, dvec4v); + + doublev += clamp(doublev, doublev, doublev); + dvec2v += clamp(dvec2v, doublev, doublev); + dvec3v += clamp(dvec3v, doublev, doublev); + dvec4v += clamp(dvec4v, doublev, doublev); + dvec2v += clamp(dvec2v, dvec2v, dvec2v); + dvec3v += clamp(dvec3v, dvec3v, dvec3v); + dvec4v += clamp(dvec4v, dvec4v, dvec4v); + + doublev += mix(doublev, doublev, doublev); + dvec2v += mix(dvec2v, dvec2v, doublev); + dvec3v += mix(dvec3v, dvec3v, doublev); + dvec4v += mix(dvec4v, dvec4v, doublev); + dvec2v += mix(dvec2v, dvec2v, dvec2v); + dvec3v += mix(dvec3v, dvec3v, dvec3v); + dvec4v += mix(dvec4v, dvec4v, dvec4v); + doublev += mix(doublev, doublev, boolv); + dvec2v += mix(dvec2v, dvec2v, bvec2v); + dvec3v += mix(dvec3v, dvec3v, bvec3v); + dvec4v += mix(dvec4v, dvec4v, bvec4v); + + doublev += step(doublev, doublev); + dvec2v += step(dvec2v, dvec2v); + dvec3v += step(dvec3v, dvec3v); + dvec4v += step(dvec4v, dvec4v); + dvec2v += step(doublev, dvec2v); + dvec3v += step(doublev, dvec3v); + dvec4v += step(doublev, dvec4v); + + doublev += smoothstep(doublev, doublev, doublev); + dvec2v += smoothstep(dvec2v, dvec2v, dvec2v); + dvec3v += smoothstep(dvec3v, dvec3v, dvec3v); + dvec4v += smoothstep(dvec4v, dvec4v, dvec4v); + dvec2v += smoothstep(doublev, doublev, dvec2v); + dvec3v += smoothstep(doublev, doublev, dvec3v); + dvec4v += smoothstep(doublev, doublev, dvec4v); + + boolv = isnan(doublev); + bvec2v = isnan(dvec2v); + bvec3v = isnan(dvec3v); + bvec4v = isnan(dvec4v); + + boolv = boolv ? isinf(doublev) : false; + bvec2v = boolv ? isinf(dvec2v) : bvec2(false); + bvec3v = boolv ? isinf(dvec3v) : bvec3(false); + bvec4v = boolv ? isinf(dvec4v) : bvec4(false); + + doublev += length(doublev); + doublev += length(dvec2v); + doublev += length(dvec3v); + doublev += length(dvec4v); + + doublev += distance(doublev, doublev); + doublev += distance(dvec2v, dvec2v); + doublev += distance(dvec3v, dvec3v); + doublev += distance(dvec4v, dvec4v); + + doublev += dot(doublev, doublev); + doublev += dot(dvec2v, dvec2v); + doublev += dot(dvec3v, dvec3v); + doublev += dot(dvec4v, dvec4v); + + dvec3v += cross(dvec3v, dvec3v); + + doublev += normalize(doublev); + dvec2v += normalize(dvec2v); + dvec3v += normalize(dvec3v); + dvec4v += normalize(dvec4v); + + doublev += faceforward(doublev, doublev, doublev); + dvec2v += faceforward(dvec2v, dvec2v, dvec2v); + dvec3v += faceforward(dvec3v, dvec3v, dvec3v); + dvec4v += faceforward(dvec4v, dvec4v, dvec4v); + + doublev += reflect(doublev, doublev); + dvec2v += reflect(dvec2v, dvec2v); + dvec3v += reflect(dvec3v, dvec3v); + dvec4v += reflect(dvec4v, dvec4v); + + doublev += refract(doublev, doublev, doublev); + dvec2v += refract(dvec2v, dvec2v, doublev); + dvec3v += refract(dvec3v, dvec3v, doublev); + dvec4v += refract(dvec4v, dvec4v, doublev); + + dmat2 dmat2v = outerProduct(dvec2v, dvec2v); + dmat3 dmat3v = outerProduct(dvec3v, dvec3v); + dmat4 dmat4v = outerProduct(dvec4v, dvec4v); + dmat2x3 dmat2x3v = outerProduct(dvec3v, dvec2v); + dmat3x2 dmat3x2v = outerProduct(dvec2v, dvec3v); + dmat2x4 dmat2x4v = outerProduct(dvec4v, dvec2v); + dmat4x2 dmat4x2v = outerProduct(dvec2v, dvec4v); + dmat3x4 dmat3x4v = outerProduct(dvec4v, dvec3v); + dmat4x3 dmat4x3v = outerProduct(dvec3v, dvec4v); + + dmat2v *= matrixCompMult(dmat2v, dmat2v); + dmat3v *= matrixCompMult(dmat3v, dmat3v); + dmat4v *= matrixCompMult(dmat4v, dmat4v); + dmat2x3v = matrixCompMult(dmat2x3v, dmat2x3v); // For now, relying on no dead-code elimination + dmat2x4v = matrixCompMult(dmat2x4v, dmat2x4v); + dmat3x2v = matrixCompMult(dmat3x2v, dmat3x2v); + dmat3x4v = matrixCompMult(dmat3x4v, dmat3x4v); + dmat4x2v = matrixCompMult(dmat4x2v, dmat4x2v); + dmat4x3v = matrixCompMult(dmat4x3v, dmat4x3v); + + dmat2v *= transpose(dmat2v); + dmat3v *= transpose(dmat3v); + dmat4v *= transpose(dmat4v); + dmat2x3v = transpose(dmat3x2v); // For now, relying on no dead-code elimination + dmat3x2v = transpose(dmat2x3v); + dmat2x4v = transpose(dmat4x2v); + dmat4x2v = transpose(dmat2x4v); + dmat3x4v = transpose(dmat4x3v); + dmat4x3v = transpose(dmat3x4v); + + doublev += determinant(dmat2v); + doublev += determinant(dmat3v); + doublev += determinant(dmat4v); + + dmat2v *= inverse(dmat2v); + dmat3v *= inverse(dmat3v); + dmat4v *= inverse(dmat4v); + + outp *= float(doublev + dvec2v.y + dvec3v.z + dvec4v.w + + dmat2v[1][1] + dmat3v[2][2] + dmat4v[3][3] + dmat2x3v[1][1] + dmat3x2v[1][1] + dmat3x4v[2][2] + dmat4x3v[2][2] + dmat2x4v[1][1] + dmat4x2v[1][1] + + float(boolv) + float(bvec2v.x) + float(bvec3v.x) + float(bvec4v.x)); +} + +void main() +{ + vec4 v; + v = texture(arrayedSampler[i], c2D); + outp.x = gl_ClipDistance[1]; + outp.yzw = v.yzw; + + ivec2 offsets[4]; + const ivec2 constOffsets[4] = ivec2[4](ivec2(1,2), ivec2(3,4), ivec2(15,16), ivec2(-2,0)); + uoutp = textureGatherOffsets(samp2dr, c2D, constOffsets, 2); + outp += textureGather(arrayedSampler[0], c2D); + ioutp = textureGatherOffset(isamp2DA, vec3(0.1), ivec2(1), 3); + ioutp += textureGatherOffset(isamp2DA, vec3(0.1), ivec2(1), 1+2); + ioutp += textureGatherOffset(isamp2DA, vec3(0.1), ivec2(i)); + + outp += gl_FragCoord + vl2; + uo = u % i; + foo23(); + doubles(); + + int id = gl_PrimitiveID; +} + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.400.tesc b/3rdparty/bgfx/3rdparty/glslang/Test/spv.400.tesc new file mode 100644 index 0000000..1c926d0 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.400.tesc @@ -0,0 +1,43 @@ +#version 400 core + +layout(vertices = 4) out; +int outa[gl_out.length()]; + +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; + float cd = gl_in[1].gl_ClipDistance[2]; + + 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; + gl_out[gl_InvocationID].gl_ClipDistance[1] = cd; + + gl_TessLevelOuter[3] = 3.2; + gl_TessLevelInner[1] = 1.3; +} + +in vec2 inb[]; +in vec2 ind[gl_MaxPatchVertices]; + +#extension GL_ARB_separate_shader_objects : enable + +layout(location = 3) in vec4 ivla[]; +layout(location = 4) in vec4 ivlb[]; + +layout(location = 3) out vec4 ovla[]; +layout(location = 4) out vec4 ovlb[]; diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.400.tese b/3rdparty/bgfx/3rdparty/glslang/Test/spv.400.tese new file mode 100644 index 0000000..da33f41 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.400.tese @@ -0,0 +1,52 @@ +#version 400 core + +layout(triangles, ccw) in; + +layout(fractional_odd_spacing) in; + +layout(point_mode) in; + +patch in vec4 patchIn; + +void main() +{ + 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; + float cd = gl_in[1].gl_ClipDistance[2]; + + 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; + gl_ClipDistance[2] = cd; +} + +#extension GL_ARB_separate_shader_objects : enable + +in vec2 inb[]; +in vec2 ind[gl_MaxPatchVertices]; + +in testblb { + int f; +} blb[]; + +in testbld { + int f; +} bld[gl_MaxPatchVertices]; + +layout(location = 23) in vec4 ivla[]; +layout(location = 24) in vec4 ivlb[]; + +layout(location = 23) out vec4 ovla[2]; diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.420.geom b/3rdparty/bgfx/3rdparty/glslang/Test/spv.420.geom new file mode 100644 index 0000000..92186ae --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.420.geom @@ -0,0 +1,43 @@ +#version 420 core + +layout(triangles) in; + +in gl_PerVertex { + float gl_PointSize; +} gl_in[]; + +out gl_PerVertex { + float gl_PointSize; +}; + +layout(line_strip) out; +layout(max_vertices = 127) out; +layout(invocations = 4) in; + +uniform sampler2D s2D; +in vec2 coord[]; + +int i; + +void main() +{ + float p = gl_in[1].gl_PointSize; + gl_PointSize = p; + gl_ViewportIndex = 7; + + EmitStreamVertex(1); + EndStreamPrimitive(0); + EmitVertex(); + EndPrimitive(); + int id = gl_InvocationID; + + const ivec2 offsets[5] = + { + ivec2(0,1), + ivec2(1,-2), + ivec2(0,3), + ivec2(-3,0), + ivec2(2,1) + }; + vec4 v = textureGatherOffset(s2D, coord[0], offsets[i].xy); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.430.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.430.frag new file mode 100644 index 0000000..e547f61 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.430.frag @@ -0,0 +1,10 @@ +#version 430 core + +out vec4 color; + +void main() +{ + color = vec4(1.0); + color *= gl_Layer; + color *= gl_ViewportIndex; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.430.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.430.vert new file mode 100644 index 0000000..f52ff4a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.430.vert @@ -0,0 +1,37 @@ +#version 450 core + + + +out gl_PerVertex { + float gl_ClipDistance[]; +}; + +const float cx = 4.20; +const float dx = 4.20; +in vec4 bad[10]; +highp in vec4 badorder; +out invariant vec4 badorder2; +out flat vec4 badorder3; + +in float f; + +void main() +{ + gl_ClipDistance[2] = 3.7; + + if (bad[0].x == cx.x) + badorder3 = bad[0]; + + gl_ClipDistance[0] = f.x; +} + +layout(binding = 3) uniform boundblock { int aoeu; } boundInst; +layout(binding = 7) uniform anonblock { int aoeu; } ; +layout(binding = 4) uniform sampler2D sampb1; +layout(binding = 5) uniform sampler2D sampb2[10]; +layout(binding = 31) uniform sampler2D sampb4; + +struct S { mediump float a; highp uvec2 b; highp vec3 c; }; +struct SS { vec4 b; S s; vec4 c; }; +layout(location = 0) flat out SS var; +out MS { layout(location = 17) float f; } outMS; diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.450.geom b/3rdparty/bgfx/3rdparty/glslang/Test/spv.450.geom new file mode 100644 index 0000000..8aefe50 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.450.geom @@ -0,0 +1,12 @@ +#version 450 core + +layout(triangles) in; + +layout(line_strip) out; +layout(max_vertices = 127) out; +layout(invocations = 4) in; + +void main() +{ + gl_PointSize = gl_in[1].gl_PointSize; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.450.noRedecl.tesc b/3rdparty/bgfx/3rdparty/glslang/Test/spv.450.noRedecl.tesc new file mode 100644 index 0000000..85fe94b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.450.noRedecl.tesc @@ -0,0 +1,10 @@ +#version 450 core + +layout(vertices = 4) out; + +patch out vec4 patchOut; + +void main() +{ + gl_in[0].gl_PointSize; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.450.tesc b/3rdparty/bgfx/3rdparty/glslang/Test/spv.450.tesc new file mode 100644 index 0000000..c3719f9 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.450.tesc @@ -0,0 +1,32 @@ +#version 450 core + +layout(vertices = 4) out; + +patch out vec4 patchOut; + +struct S { + float sMem1; // should not see a patch decoration + float sMem2; // should not see a patch decoration +}; + +layout(location = 12) patch out TheBlock { + highp float bMem1; // should not see a location decoration + highp float bMem2; + S s; // should see a patch decoration +} tcBlock[2]; + +void main() +{ +} + +layout(location = 2) patch out SingleBlock { + highp float bMem1; // should not see a location decoration + highp float bMem2; + S s; // should see a patch decoration +} singleBlock; + +layout(location = 20) patch out bn { + vec4 v1; // location 20 + layout(location = 24) vec4 v2; // location 24 + vec4 v3; // location 25 +}; \ No newline at end of file diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.AofA.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.AofA.frag new file mode 100644 index 0000000..6284710 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.AofA.frag @@ -0,0 +1,43 @@ +#version 430 + +in float infloat; +out float outfloat; + +uniform uAofA { + float f[2][4]; +} nameAofA[3][5]; + +float[4][5][6] many[1][2][3]; + +float g4[4][7]; +in float g5[5][7]; + +flat in int i, j, k; + +float[4][7] foo(float a[5][7]) +{ + float r[7]; + r = a[2]; + + return float[4][7](a[0], a[1], r, a[3]); +} + +void main() +{ + outfloat = 0.0; + + g4 = foo(g5); + +// if (foo(g5) == g4) +// ++outfloat; + + float u[][7]; + u[2][2] = 3.0; + float u[5][7]; + + foo(u); + + many[i][j][k][i][j][k] = infloat; + outfloat += many[j][j][j][j][j][j]; + outfloat += nameAofA[1][2].f[0][3]; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.GeometryShaderPassthrough.geom b/3rdparty/bgfx/3rdparty/glslang/Test/spv.GeometryShaderPassthrough.geom new file mode 100644 index 0000000..9e6fe4c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.GeometryShaderPassthrough.geom @@ -0,0 +1,17 @@ +#version 450 +#extension GL_NV_geometry_shader_passthrough : require + +layout(triangles) in; + +layout(passthrough) in gl_PerVertex { + vec4 gl_Position; +}; + +layout(passthrough) in Inputs { +vec2 texcoord; +vec4 baseColor; +}; + +void main() +{ +} \ No newline at end of file diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.Operations.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.Operations.frag new file mode 100644 index 0000000..52f0a30 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.Operations.frag @@ -0,0 +1,141 @@ +#version 450 + +flat in ivec4 uiv4; +in vec4 uv4; +bool ub; +bvec4 ub41, ub42; +in float uf; +flat in int ui; +flat in uvec4 uuv4; +flat in uint uui; + +out vec4 FragColor; + +void main() +{ + vec4 v; + float f; + bool b; + bvec4 bv4; + int i; + uint u; + + // floating point + v = radians(uv4); + v += degrees(v); + v += (i = ui*ui, sin(v)); + v += cos(v); + v += tan(v); + v += asin(v); + v += acos(v); + + v += atan(v); + v += sinh(v); + v += cosh(v); + v += tanh(v); + v += asinh(v); + v += acosh(v); + v += atanh(v); + + v += pow(v, v); + v += exp(v); + v += log(v); + v += exp2(v); + v += log2(v); + v += sqrt(v); + v += inversesqrt(v); + v += abs(v); + v += sign(v); + v += floor(v); + + v += trunc(v); + v += round(v); + v += roundEven(v); + + v += ceil(v); + v += fract(v); + v += mod(v, v); + v += mod(v, v.x); + + v += modf(v, v); + + v += min(v, uv4); + v += max(v, uv4); + v += clamp(v, uv4, uv4); + v += mix(v,v,v); + + v += mix(v,v,ub41); + v += mix(v,v,f); +//spv v += intBitsToFloat(ui); +// v += uintBitsToFloat(uui); +// i += floatBitsToInt(f); +// u += floatBitsToUint(f); + v += fma(v, uv4, v); + + v += step(v,v); + v += smoothstep(v,v,v); + v += step(uf,v); + v += smoothstep(uf,uf,v); + v += normalize(v); + v += faceforward(v, v, v); + v += reflect(v, v); + v += refract(v, v, uf); + v += dFdx(v); + v += dFdy(v); + v += fwidth(v); + + // signed integer + i += abs(ui); + i += sign(i); + i += min(i, ui); + i += max(i, ui); + i += clamp(i, ui, ui); + + // unsigned integer + u += min(u, uui); + u += max(u, uui); + u += clamp(u, uui, uui); + + //// bool + b = isnan(uf); + b = isinf(f); + b = any(lessThan(v, uv4)); + b = (b && any(lessThanEqual(v, uv4))); + b = (b && any(greaterThan(v, uv4))); + b = (b && any(greaterThanEqual(v, uv4))); + b = (b && any(equal(ub41, ub42))); + b = (b && any(notEqual(ub41, ub42))); + b = (b && any(ub41)); + b = (b && all(ub41)); + b = (b && any(not(ub41))); + + i = ((i + ui) * i - ui) / i; + i = i % ui; + if (i == ui || i != ui && i == ui ^^ i != 2) + ++i; + + f = ((uf + uf) * uf - uf) / uf; + + f += length(v); + f += distance(v, v); + f += dot(v, v); + f += dot(f, uf); + f += cross(v.xyz, v.xyz).x; + + if (f == uf || f != uf && f != 2.0) + ++f; + + i &= ui; + i |= 0x42; + i ^= ui; + i %= 17; + i >>= 2; + i <<= ui; + i = ~i; + b = !b; + + FragColor = b ? vec4(i) + vec4(f) + v : v; + + mat4 m1 = mat4(1.0), m2 = mat4(0.0); + FragColor += (b ? m1 : m2)[1]; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.accessChain.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.accessChain.frag new file mode 100644 index 0000000..c7f805b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.accessChain.frag @@ -0,0 +1,94 @@ +#version 420 + +struct S +{ + vec3 color; +}; + +layout(location = 0) out vec3 OutColor; + +flat in int u; + +void GetColor1(const S i) +{ + OutColor += i.color.x; +} + +void GetColor2(const S i, int comp) +{ + OutColor += i.color[comp]; +} + +void GetColor3(const S i, int comp) +{ + OutColor += i.color[comp].x; +} + +void GetColor4(const S i, int comp) +{ + OutColor += i.color[comp].x; +} + +void GetColor5(const S i, int comp) +{ + OutColor += i.color; +} + +void GetColor6(const S i, int comp) +{ + OutColor += i.color.yx[comp]; +} + +void GetColor7(const S i, int comp) +{ + OutColor.xy += i.color.yxz.yx; +} + +void GetColor8(const S i, int comp) +{ + OutColor += i.color.yzx.yx.x.x; +} + +void GetColor9(const S i, int comp) +{ + OutColor.zxy += i.color; +} + +void GetColor10(const S i, int comp) +{ + OutColor.zy += i.color.xy; +} + +void GetColor11(const S i, int comp) +{ + OutColor.zxy.yx += i.color.xy; +} + +void GetColor12(const S i, int comp) +{ + OutColor[comp] += i.color.x; +} + +void GetColor13(const S i, int comp) +{ + OutColor.zy[comp] += i.color.x; +} + +void main() +{ + S s; + OutColor = vec3(0.0); + GetColor1(s); + GetColor2(s, u); + GetColor3(s, u); + GetColor4(s, u); + GetColor5(s, u); + GetColor6(s, u); + GetColor7(s, u); + GetColor8(s, u); + GetColor9(s, u); + GetColor10(s, u); + GetColor11(s, u); + GetColor12(s, u); + GetColor13(s, u); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.aggOps.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.aggOps.frag new file mode 100644 index 0000000..bc34d7a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.aggOps.frag @@ -0,0 +1,51 @@ +#version 450 + +uniform sampler2D samp2D; +in mediump vec2 coord; + +in vec4 u, w; +out vec4 color; + +struct s1 { + int i; + float f; +}; + +struct s2 { + int i; + float f; + s1 s1_1; +}; + +layout(std140) uniform ub1 { s2 foo2a; } uName1; +layout(std430) buffer ub2 { s2 foo2b; } uName2; + +void main() +{ + vec4 v; + s1 a[3], b[3]; + a = s1[3](s1(int(u.x), u.y), s1(int(u.z), u.w), s1(14, 14.0)); + b = s1[3](s1(17, 17.0), s1(int(w.x), w.y), s1(int(w.z), w.w)); + + if (uName1.foo2a == uName2.foo2b) + v = texture(samp2D, coord); + else + v = texture(samp2D, 2.0*coord); + + if (u == v) + v *= 3.0; + + if (u != v) + v *= 4.0; + + if (coord == v.yw) + v *= 5.0; + + if (a == b) + v *= 6.0; + + if (a != b) + v *= 7.0; + + color = v; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.always-discard.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.always-discard.frag new file mode 100644 index 0000000..6cd4d04 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.always-discard.frag @@ -0,0 +1,36 @@ +#version 140 +in vec2 tex_coord; + +void main (void) +{ + vec4 white = vec4(1.0); + vec4 black = vec4(0.2); + vec4 color = white; + + // First, cut out our circle + float x = tex_coord.x*2.0 - 1.0; + float y = tex_coord.y*2.0 - 1.0; + + float radius = sqrt(x*x + y*y); + if (radius > 1.0) { + if (radius > 1.1) { + ++color; + } + + gl_FragColor = color; + + if (radius > 1.2) { + ++color; + } + + } + + discard; + + // If we're near an edge, darken us a tiny bit + if (radius >= 0.75) + color -= abs(pow(radius, 16.0)/2.0); + + gl_FragColor = color; + +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.always-discard2.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.always-discard2.frag new file mode 100644 index 0000000..2b125f3 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.always-discard2.frag @@ -0,0 +1,19 @@ +#version 140 +in vec2 tex_coord; + +void main (void) +{ + vec4 white = vec4(1.0); + vec4 black = vec4(0.2); + vec4 color = white; + + // First, cut out our circle + float x = tex_coord.x*2.0 - 1.0; + float y = tex_coord.y*2.0 - 1.0; + + discard; + + + gl_FragColor = color; + +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.atomic.comp b/3rdparty/bgfx/3rdparty/glslang/Test/spv.atomic.comp new file mode 100644 index 0000000..8ab846e --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.atomic.comp @@ -0,0 +1,48 @@ +#version 450 + + + +layout(binding = 0) uniform atomic_uint counter; + +layout(binding = 0, offset = 4) uniform atomic_uint countArr[4]; +shared uint value; + +int arrX[gl_WorkGroupSize.x]; +int arrY[gl_WorkGroupSize.y]; +int arrZ[gl_WorkGroupSize.z]; + +uint func(atomic_uint c) +{ + return atomicCounterIncrement(c); +} + +void main() +{ + memoryBarrierAtomicCounter(); + func(counter); + uint val = atomicCounter(countArr[2]); + atomicCounterDecrement(counter); + atomicCounterIncrement(counter); +} + +shared int atomi; +shared uint atomu; + +layout (std140, binding = 0) restrict buffer dataSSB +{ + float f; + ivec4 n_frames_rendered; +} result; + +void atoms() +{ + int origi = atomicAdd(atomi, 3); + uint origu = atomicAnd(atomu, value); + origu = atomicOr(atomu, 7u); + origu = atomicXor(atomu, 7u); + origu = atomicMin(atomu, value); + origi = atomicMax(atomi, 7); + origi = atomicExchange(atomi, origi); + origu = atomicCompSwap(atomu, 10u, value); + atomicAdd(result.n_frames_rendered.z, 1); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.bitCast.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.bitCast.frag new file mode 100644 index 0000000..73c7e30 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.bitCast.frag @@ -0,0 +1,45 @@ +#version 450 + +flat in int i1; +flat in ivec2 i2; +flat in ivec3 i3; +flat in ivec4 i4; + +flat in uint u1; +flat in uvec2 u2; +flat in uvec3 u3; +flat in uvec4 u4; + +in float f1; +in vec2 f2; +in vec3 f3; +in vec4 f4; + +out vec4 fragColor; + +void main() +{ + ivec4 idata = ivec4(0); + idata.x += floatBitsToInt(f1); + idata.xy += floatBitsToInt(f2); + idata.xyz += floatBitsToInt(f3); + idata += floatBitsToInt(f4); + + uvec4 udata = uvec4(0); + udata.x += floatBitsToUint(f1); + udata.xy += floatBitsToUint(f2); + udata.xyz += floatBitsToUint(f3); + udata += floatBitsToUint(f4); + + vec4 fdata = vec4(0.0); + fdata.x += intBitsToFloat(i1); + fdata.xy += intBitsToFloat(i2); + fdata.xyz += intBitsToFloat(i3); + fdata += intBitsToFloat(i4); + fdata.x += uintBitsToFloat(u1); + fdata.xy += uintBitsToFloat(u2); + fdata.xyz += uintBitsToFloat(u3); + fdata += uintBitsToFloat(u4); + + fragColor = (idata == udata) ? fdata : fdata + vec4(0.2); +} \ No newline at end of file diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.bool.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.bool.vert new file mode 100644 index 0000000..f58bc55 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.bool.vert @@ -0,0 +1,17 @@ +#version 450 + +const bool condition = false; + +uniform ubname { + bool b; +} ubinst; + +bool foo(bool b) +{ + return b != condition; +} + +void main() +{ + gl_Position = foo(ubinst.b) ? vec4(0.0) : vec4(1.0); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.boolInBlock.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.boolInBlock.frag new file mode 100644 index 0000000..a4f62fa --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.boolInBlock.frag @@ -0,0 +1,31 @@ +#version 450 + +layout(binding = 0, std140) uniform Uniform +{ + bvec4 b4; +}; + +layout(binding = 1, std430) buffer Buffer +{ + bvec2 b2; +}; + +void foo(bvec4 paramb4, out bvec2 paramb2) +{ + bool b1 = paramb4.z; + paramb2 = bvec2(b1); +} + +layout(location = 0) out vec4 fragColor; + +void main() +{ + b2 = bvec2(0.0); + if (b4.z) + b2 = bvec2(b4.x); + if (b2.x) + foo(b4, b2); + + fragColor = vec4(b4.x && b4.y); + fragColor -= vec4(b4.x || b4.y); +} \ No newline at end of file diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.branch-return.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.branch-return.vert new file mode 100644 index 0000000..4b2f5d4 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.branch-return.vert @@ -0,0 +1,10 @@ +#version 310 es +void main() { + switch (gl_InstanceIndex) { + case 0: return; + case 1: gl_Position = vec4(0.0); break; + case 2: return; + case 3: return; + } + gl_Position.x += 0.123; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.buffer.autoassign.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.buffer.autoassign.frag new file mode 100644 index 0000000..4644260 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.buffer.autoassign.frag @@ -0,0 +1,28 @@ + +cbuffer MyUB1 : register(b5) // explicitly assigned & offsetted +{ + float g_a; + int g_b; +}; + +cbuffer MyUB2 // implicitly assigned +{ + float g_c; +}; + +cbuffer MyUB3 // implicitly assigned +{ + float g_d; +}; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; +}; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + psout.Color = g_a + g_b + g_c + g_d; + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.conditionalDiscard.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.conditionalDiscard.frag new file mode 100644 index 0000000..ea80337 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.conditionalDiscard.frag @@ -0,0 +1,14 @@ +#version 400 + +uniform sampler2D tex; +in vec2 coord; + +void main (void) +{ + vec4 v = texture(tex, coord); + + if (v == vec4(0.1,0.2,0.3,0.4)) + discard; + + gl_FragColor = v; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.conversion.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.conversion.frag new file mode 100644 index 0000000..3b5e512 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.conversion.frag @@ -0,0 +1,112 @@ +#version 140 + +bool u_b; +bvec2 u_b2; +bvec3 u_b3; +bvec4 u_b4; + +int u_i; +ivec2 u_i2; +ivec3 u_i3; +ivec4 u_i4; + +float u_f; +vec2 u_f2; +vec3 u_f3; +vec4 u_f4; + +bool i_b; +bvec2 i_b2; +bvec3 i_b3; +bvec4 i_b4; + +flat in int i_i; +flat in ivec2 i_i2; +flat in ivec3 i_i3; +flat in ivec4 i_i4; + +in float i_f; +in vec2 i_f2; +in vec3 i_f3; +in vec4 i_f4; + +void main() +{ + bool b = bool(u_i) ^^ bool(u_f); + bvec2 b2 = bvec2(u_i, u_f); + bvec3 b3 = bvec3(u_i, u_f, i_i); + bvec4 b4 = bvec4(u_i, u_f, i_i, i_f); + + int i = int(u_f) + int(b); + ivec2 i2 = ivec2(u_f2) + ivec2(b2); + ivec3 i3 = ivec3(u_f3) + ivec3(b3); + ivec4 i4 = ivec4(u_f4) + ivec4(b4); + + float f = i; + vec2 f2 = i2; + vec3 f3 = i3; + vec4 f4 = i4; + + f += (float(i) + float(b)); + f2 -= vec2(i2) + vec2(b2); + f3 /= vec3(i3) + vec3(b3); + f4 += vec4(i4) + vec4(b4); + + f4 += vec4(bvec4(i_i4)); + f4 += vec4(bvec4(u_f4)); + + f += f - i; + f2 += vec2(f, i) + i2; + f3 += i3 + vec3(f, i, f); + f4 += vec4(b, i, f, i) + i4; + + f2 += vec2(f, i) * i; + f3 += vec3(f, i, f) + i; + f4 += i - vec4(b, i, f, i); + + i2 += ivec2(f, i); + i3 += ivec3(f, i, f); + i4 += ivec4(b, i, f, i); + + if (f < i || i < f || + f2 == i2 || + i3 != f3) + f = (b ? i : f2.x) + (b2.x ? f3.x : i2.y); + + gl_FragColor = + b || + b2.x || + b2.y || + b3.x || + b3.y || + b3.z || + b4.x || + b4.y || + b4.z || + b4.w ? vec4( + i + + i2.x + + i2.y + + i3.x + + i3.y + + i3.z + + i4.x + + i4.y + + i4.z + + i4.w + + f + + f2.x + + f2.y + + f3.x + + f3.y + + f3.z + + f4.x + + f4.y + + f4.z + + f4.w) : vec4(1.0); + + // with constants... + ivec4 cv2 = ivec4(1.0); + bvec4 cv5 = bvec4(cv2); + gl_FragColor += float(cv5); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.dataOut.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.dataOut.frag new file mode 100644 index 0000000..94c6db0 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.dataOut.frag @@ -0,0 +1,8 @@ +#version 140 + +in vec4 Color; + +void main() +{ + gl_FragData[1] = Color; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.dataOutIndirect.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.dataOutIndirect.frag new file mode 100644 index 0000000..88a32d5 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.dataOutIndirect.frag @@ -0,0 +1,12 @@ +#version 140 + +in vec4 Color; + +out vec4 fcolor[4]; + +uniform b { int i; } bName; + +void main() +{ + fcolor[bName.i] = Color; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.dataOutIndirect.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.dataOutIndirect.vert new file mode 100644 index 0000000..cb6b7e0 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.dataOutIndirect.vert @@ -0,0 +1,12 @@ +#version 140 + +attribute vec4 color; +out vec4 colorOut[6]; + +void main() +{ + for (int i = 1; i < 5; ++i) + colorOut[i] = color; + + gl_Position = colorOut[2]; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.deepRvalue.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.deepRvalue.frag new file mode 100644 index 0000000..2c88ca8 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.deepRvalue.frag @@ -0,0 +1,36 @@ +#version 330 + +uniform sampler2D samp2D; + +vec4 v1 = vec4(2.0, 3.0, 5.0, 7.0); +vec4 v2 = vec4(11.0, 13.0, 17.0, 19.0); +vec4 v3 = vec4(23.0, 29.0, 31.0, 37.0); +vec4 v4 = vec4(41.0, 43.0, 47.0, 53.0); + +struct str { + int a; + vec2 b[3]; + bool c; +}; + +void main() +{ + mat4 m = mat4(v1, v2, v3, v4); + + mat4 mm = matrixCompMult(m, m); + float f = mm[1].w; // should be 19 * 19 = 361 + + // do a deep access to a spontaneous r-value + float g = matrixCompMult(m, m)[2].y; // should be 29 * 29 = 841 + + float h = str(1, vec2[3](vec2(2.0, 3.0), vec2(4.0, 5.0), vec2(6.0, 7.0)), true).b[1][1]; // should be 5.0 + + float i = texture(samp2D, vec2(0.5,0.5)).y; + + i += (i > 0.1 ? v1 : v2)[3]; + + str t; + i += (t = str(1, vec2[3](vec2(2.0, 3.0), vec2(4.0, 5.0), vec2(6.0, 7.0)), true)).b[2].y; // should be 7.0 + + gl_FragColor = vec4(f, g, h, i); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.depthOut.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.depthOut.frag new file mode 100644 index 0000000..feb8a0d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.depthOut.frag @@ -0,0 +1,11 @@ +#version 450 + +in vec4 Color; +in float Depth; + +layout(depth_greater) out float gl_FragDepth; + +void main() +{ + gl_FragDepth = Depth; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.deviceGroup.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.deviceGroup.frag new file mode 100644 index 0000000..6496489 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.deviceGroup.frag @@ -0,0 +1,9 @@ +#version 450 + +#extension GL_EXT_device_group : enable + +out vec4 color; + +void main() { + color = vec4(gl_DeviceIndex, 0, 0, 0); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.discard-dce.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.discard-dce.frag new file mode 100644 index 0000000..e824f76 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.discard-dce.frag @@ -0,0 +1,35 @@ +#version 140 +in vec2 tex_coord; + +void main (void) +{ + vec4 white = vec4(1.0); + vec4 black = vec4(0.2); + vec4 color = white; + + // First, cut out our circle + float x = tex_coord.x*2.0 - 1.0; + float y = tex_coord.y*2.0 - 1.0; + + float radius = sqrt(x*x + y*y); + if (radius > 1.0) { + if (radius > 1.1) { + ++color; + } + + gl_FragColor = color; + + if (radius > 1.2) { + ++color; + } + + discard; + } + + // If we're near an edge, darken us a tiny bit + if (radius >= 0.75) + color -= abs(pow(radius, 16.0)/2.0); + + gl_FragColor = color; + +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.do-simple.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.do-simple.vert new file mode 100644 index 0000000..77677a6 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.do-simple.vert @@ -0,0 +1,7 @@ +#version 310 es +void main() { + int i = 0; + do { + i++; + } while(i<10); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.do-while-continue-break.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.do-while-continue-break.vert new file mode 100644 index 0000000..c085551 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.do-while-continue-break.vert @@ -0,0 +1,20 @@ +#version 310 es +void main() { + int i = 0; + int A, B, C, D, E, F, G; + do { + A = 0; + if (i == 2) { + B = 1; + continue; + C = 2; + } + if (i == 5) { + D = 3; + break; + E = 42; + } + F = 99; + } while (++i < 19); + G = 12; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.doWhileLoop.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.doWhileLoop.frag new file mode 100644 index 0000000..5abdb61 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.doWhileLoop.frag @@ -0,0 +1,16 @@ +#version 140 + +in vec4 bigColor; +in vec4 BaseColor; +in float d; + +void main() +{ + vec4 color = BaseColor; + + do { + color += bigColor; + } while (color.x < d); + + gl_FragColor = color; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.double.comp b/3rdparty/bgfx/3rdparty/glslang/Test/spv.double.comp new file mode 100644 index 0000000..6397e63 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.double.comp @@ -0,0 +1,25 @@ +#version 430 + +const double d1 = 3.1415926535897932384626433832795LF; +const double d2 = 3.1415; +const double d3 = 3.1415926535897932384626433832795LF; +const double d4 = 3.1415926535897932384626433832795; + +buffer bufName { + float f; + double d; +} bufInst; + + +uniform writeonly image2D destTex; + +void main() +{ + bufInst.d = float(d1); + bufInst.f = float(d1 + d2 + d3 + d4); + + ivec2 storePos = ivec2(gl_GlobalInvocationID.xy); + double localCoef = length(vec2(ivec2(gl_LocalInvocationID.xy)-8)/8.0); + dvec4 aa = dvec4(0.4, 0.2, 0.3, 0.4); + double globalCoef = 1.0; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.drawParams.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.drawParams.vert new file mode 100644 index 0000000..f2e3c1e --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.drawParams.vert @@ -0,0 +1,13 @@ +#version 450 + +#extension GL_ARB_shader_draw_parameters : enable + +out vec3 pos; + +void main() +{ + int a = gl_BaseVertexARB; + int b = gl_BaseInstanceARB; + int c = gl_DrawIDARB; + pos = vec3(a, b, c); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.earlyReturnDiscard.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.earlyReturnDiscard.frag new file mode 100644 index 0000000..bba4b76 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.earlyReturnDiscard.frag @@ -0,0 +1,102 @@ +#version 140 + +in float d; +in vec4 bigColor, smallColor; +in vec4 otherColor; + +in float c; + +in float threshhold; +in float threshhold2; +in float threshhold3; + +in float minimum; + +in vec4 BaseColor; + +bool b; + +void main() +{ + vec4 color = BaseColor; + vec4 color2; + + color2 = otherColor; + + if (c > d) + color += bigColor; + else + color += smallColor; + + if (color.z < minimum) + return; + + color.z++; + + if (color.z > threshhold) + discard; + + color++; + + // Two path, different rest + if (color.w > threshhold2) { + if (color.z > threshhold2) + return; + else if (b) + color.z++; + else { + if (color.x < minimum) { + discard; + } else { + color++; + } + } + } else { + if (b) + discard; + else + return; + } + + + // // Two path, shared rest + // if (color.w > threshhold2) { + // if (color.z > threshhold2) + // return; + // else if (b) + // color++; + // else { + // if (color.x < minimum) { + // discard; + // } else { + // color++; + // } + // } + // } else { + // if (b) + // discard; + // else + // return; + // } + + + // // One path + // if (color.w > threshhold2) { + // if (color.z > threshhold2) + // return; + // else { + // if (color.x < minimum) { + // discard; + // } else { + // color++; + // } + // } + // } else { + // if (b) + // discard; + // else + // return; + // } + + gl_FragColor = color * color2; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.float16.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.float16.frag new file mode 100644 index 0000000..7c94a51 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.float16.frag @@ -0,0 +1,306 @@ +#version 450 core + +#extension GL_AMD_gpu_shader_half_float: enable +#extension GL_ARB_gpu_shader_int64: enable + +void main() +{ +} + +// Half float literals +void literal() +{ + const float16_t f16c = 0.000001hf; + const f16vec2 f16cv = f16vec2(-0.25HF, 0.03HF); + + f16vec2 f16v; + f16v.x = f16c; + f16v += f16cv; +} + +// Block memory layout +struct S +{ + float16_t x; // rule 1: align = 2, takes offsets 0-1 + f16vec2 y; // rule 2: align = 4, takes offsets 4-7 + f16vec3 z; // rule 3: align = 8, takes offsets 8-13 +}; + +layout(column_major, std140) uniform B1 +{ + float16_t a; // rule 1: align = 2, takes offsets 0-1 + f16vec2 b; // rule 2: align = 4, takes offsets 4-7 + f16vec3 c; // rule 3: align = 8, takes offsets 8-15 + float16_t d[2]; // rule 4: align = 16, array stride = 16, + // takes offsets 16-47 + f16mat2x3 e; // rule 5: align = 16, matrix stride = 16, + // takes offsets 48-79 + f16mat2x3 f[2]; // rule 6: align = 16, matrix stride = 16, + // array stride = 32, f[0] takes + // offsets 80-111, f[1] takes offsets + // 112-143 + S g; // rule 9: align = 16, g.x takes offsets + // 144-145, g.y takes offsets 148-151, + // g.z takes offsets 152-159 + S h[2]; // rule 10: align = 16, array stride = 16, h[0] + // takes offsets 160-175, h[1] takes + // offsets 176-191 +}; + +layout(row_major, std430) buffer B2 +{ + float16_t o; // rule 1: align = 2, takes offsets 0-1 + f16vec2 p; // rule 2: align = 4, takes offsets 4-7 + f16vec3 q; // rule 3: align = 8, takes offsets 8-13 + float16_t r[2]; // rule 4: align = 2, array stride = 2, takes + // offsets 14-17 + f16mat2x3 s; // rule 7: align = 4, matrix stride = 4, takes + // offsets 20-31 + f16mat2x3 t[2]; // rule 8: align = 4, matrix stride = 4, array + // stride = 12, t[0] takes offsets + // 32-43, t[1] takes offsets 44-55 + S u; // rule 9: align = 8, u.x takes offsets + // 56-57, u.y takes offsets 60-63, u.z + // takes offsets 64-69 + S v[2]; // rule 10: align = 8, array stride = 16, v[0] + // takes offsets 72-87, v[1] takes + // offsets 88-103 +}; + +// Specialization constant +layout(constant_id = 100) const float16_t sf16 = 0.125hf; +layout(constant_id = 101) const float sf = 0.25; +layout(constant_id = 102) const double sd = 0.5lf; + +const float f16_to_f = float(sf16); +const double f16_to_d = float(sf16); + +const float16_t f_to_f16 = float16_t(sf); +const float16_t d_to_f16 = float16_t(sd); + +void operators() +{ + float16_t f16; + f16vec2 f16v; + f16mat2x2 f16m; + bool b; + + // Arithmetic + f16v += f16v; + f16v -= f16v; + f16v *= f16v; + f16v /= f16v; + f16v++; + f16v--; + ++f16m; + --f16m; + f16v = -f16v; + f16m = -f16m; + + f16 = f16v.x + f16v.y; + f16 = f16v.x - f16v.y; + f16 = f16v.x * f16v.y; + f16 = f16v.x / f16v.y; + + // Relational + b = (f16v.x != f16); + b = (f16v.y == f16); + b = (f16v.x > f16); + b = (f16v.y < f16); + b = (f16v.x >= f16); + b = (f16v.y <= f16); + + // Vector/matrix operations + f16v = f16v * f16; + f16m = f16m * f16; + f16v = f16m * f16v; + f16v = f16v * f16m; + f16m = f16m * f16m; +} + +void typeCast() +{ + bvec3 bv; + vec3 fv; + dvec3 dv; + ivec3 iv; + uvec3 uv; + i64vec3 i64v; + u64vec3 u64v; + + f16vec3 f16v; + + f16v = f16vec3(bv); // bool -> float16 + bv = bvec3(f16v); // float16 -> bool + + f16v = f16vec3(fv); // float -> float16 + fv = vec3(f16v); // float16 -> float + + f16v = f16vec3(dv); // double -> float16 + dv = dvec3(dv); // float16 -> double + + f16v = f16vec3(iv); // int -> float16 + iv = ivec3(f16v); // float16 -> int + + f16v = f16vec3(uv); // uint -> float16 + uv = uvec3(f16v); // float16 -> uint + + f16v = f16vec3(i64v); // int64 -> float16 + i64v = i64vec3(f16v); // float16 -> int64 + + f16v = f16vec3(u64v); // uint64 -> float16 + u64v = u64vec3(f16v); // float16 -> uint64 +} + +void builtinAngleTrigFuncs() +{ + f16vec4 f16v1, f16v2; + + f16v2 = radians(f16v1); + f16v2 = degrees(f16v1); + f16v2 = sin(f16v1); + f16v2 = cos(f16v1); + f16v2 = tan(f16v1); + f16v2 = asin(f16v1); + f16v2 = acos(f16v1); + f16v2 = atan(f16v1, f16v2); + f16v2 = atan(f16v1); + f16v2 = sinh(f16v1); + f16v2 = cosh(f16v1); + f16v2 = tanh(f16v1); + f16v2 = asinh(f16v1); + f16v2 = acosh(f16v1); + f16v2 = atanh(f16v1); +} + +void builtinExpFuncs() +{ + f16vec2 f16v1, f16v2; + + f16v2 = pow(f16v1, f16v2); + f16v2 = exp(f16v1); + f16v2 = log(f16v1); + f16v2 = exp2(f16v1); + f16v2 = log2(f16v1); + f16v2 = sqrt(f16v1); + f16v2 = inversesqrt(f16v1); +} + +void builtinCommonFuncs() +{ + f16vec3 f16v1, f16v2, f16v3; + float16_t f16; + bool b; + bvec3 bv; + ivec3 iv; + + f16v2 = abs(f16v1); + f16v2 = sign(f16v1); + f16v2 = floor(f16v1); + f16v2 = trunc(f16v1); + f16v2 = round(f16v1); + f16v2 = roundEven(f16v1); + f16v2 = ceil(f16v1); + f16v2 = fract(f16v1); + f16v2 = mod(f16v1, f16v2); + f16v2 = mod(f16v1, f16); + f16v3 = modf(f16v1, f16v2); + f16v3 = min(f16v1, f16v2); + f16v3 = min(f16v1, f16); + f16v3 = max(f16v1, f16v2); + f16v3 = max(f16v1, f16); + f16v3 = clamp(f16v1, f16, f16v2.x); + f16v3 = clamp(f16v1, f16v2, f16vec3(f16)); + f16v3 = mix(f16v1, f16v2, f16); + f16v3 = mix(f16v1, f16v2, f16v3); + f16v3 = mix(f16v1, f16v2, bv); + f16v3 = step(f16v1, f16v2); + f16v3 = step(f16, f16v3); + f16v3 = smoothstep(f16v1, f16v2, f16v3); + f16v3 = smoothstep(f16, f16v1.x, f16v2); + b = isnan(f16); + bv = isinf(f16v1); + f16v3 = fma(f16v1, f16v2, f16v3); + f16v2 = frexp(f16v1, iv); + f16v2 = ldexp(f16v1, iv); +} + +void builtinPackUnpackFuncs() +{ + uint u; + f16vec2 f16v; + + u = packFloat2x16(f16v); + f16v = unpackFloat2x16(u); +} + +void builtinGeometryFuncs() +{ + float16_t f16; + f16vec3 f16v1, f16v2, f16v3; + + f16 = length(f16v1); + f16 = distance(f16v1, f16v2); + f16 = dot(f16v1, f16v2); + f16v3 = cross(f16v1, f16v2); + f16v2 = normalize(f16v1); + f16v3 = faceforward(f16v1, f16v2, f16v3); + f16v3 = reflect(f16v1, f16v2); + f16v3 = refract(f16v1, f16v2, f16); +} + +void builtinMatrixFuncs() +{ + f16mat2x3 f16m1, f16m2, f16m3; + f16mat3x2 f16m4; + f16mat3 f16m5; + f16mat4 f16m6, f16m7; + + f16vec3 f16v1; + f16vec2 f16v2; + + float16_t f16; + + f16m3 = matrixCompMult(f16m1, f16m2); + f16m1 = outerProduct(f16v1, f16v2); + f16m4 = transpose(f16m1); + f16 = determinant(f16m5); + f16m6 = inverse(f16m7); +} + +void builtinVecRelFuncs() +{ + f16vec3 f16v1, f16v2; + bvec3 bv; + + bv = lessThan(f16v1, f16v2); + bv = lessThanEqual(f16v1, f16v2); + bv = greaterThan(f16v1, f16v2); + bv = greaterThanEqual(f16v1, f16v2); + bv = equal(f16v1, f16v2); + bv = notEqual(f16v1, f16v2); +} + +in f16vec3 if16v; + +void builtinFragProcFuncs() +{ + f16vec3 f16v; + + // Derivative + f16v.x = dFdx(if16v.x); + f16v.y = dFdy(if16v.y); + f16v.xy = dFdxFine(if16v.xy); + f16v.xy = dFdyFine(if16v.xy); + f16v = dFdxCoarse(if16v); + f16v = dFdxCoarse(if16v); + + f16v.x = fwidth(if16v.x); + f16v.xy = fwidthFine(if16v.xy); + f16v = fwidthCoarse(if16v); + + // Interpolation + f16v.x = interpolateAtCentroid(if16v.x); + f16v.xy = interpolateAtSample(if16v.xy, 1); + f16v = interpolateAtOffset(if16v, f16vec2(0.5hf)); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.flowControl.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.flowControl.frag new file mode 100644 index 0000000..f10c767 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.flowControl.frag @@ -0,0 +1,23 @@ +#version 140 + +in float d; +in vec4 bigColor, smallColor; +in vec4 otherColor; + +in float c; +in vec4 BaseColor; + +void main() +{ + vec4 color = BaseColor; + vec4 color2; + + color2 = otherColor; + + if (c > d) + color += bigColor; + else + color += smallColor; + + gl_FragColor = color * color2; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.for-complex-condition.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.for-complex-condition.vert new file mode 100644 index 0000000..81dd648 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.for-complex-condition.vert @@ -0,0 +1,7 @@ +#version 450 +layout(location=0) out highp int r; +layout(location=0) in lowp int flag; +void main() { + int i; + for (i=0; i < (flag==1 ? 10 : 15) ; i++) { r = i; } +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.for-continue-break.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.for-continue-break.vert new file mode 100644 index 0000000..afa31f2 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.for-continue-break.vert @@ -0,0 +1,20 @@ +#version 310 es +void main() { + int i; + int A, B, C, D, E, F, G; + for (i=0; i < 10 ; i++) { + A = 1; + if (i%2 ==0) { + B = 1; + continue; + C = 1; + } + if (i%3 == 0) { + D = 1; + break; + E = 1; + } + F = 12; + } + G = 99; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.for-nobody.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.for-nobody.vert new file mode 100644 index 0000000..9963476 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.for-nobody.vert @@ -0,0 +1,7 @@ +#version 450 +layout(location=0) out highp int r; +void main() { + int i; + for (i=0; i<10; i++); + r = i; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.for-notest.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.for-notest.vert new file mode 100644 index 0000000..f40e666 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.for-notest.vert @@ -0,0 +1,6 @@ +#version 450 +layout(location=0) out highp int r; +void main() { + int i; + for (i=0; ; i++) { r = i; } +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.for-simple.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.for-simple.vert new file mode 100644 index 0000000..a5be6db --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.for-simple.vert @@ -0,0 +1,8 @@ +#version 310 es +void main() { + int i; + int j; + for (i=0; i < 10 ; i++) { + j = 12; + } +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.forLoop.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.forLoop.frag new file mode 100644 index 0000000..dfa58ad --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.forLoop.frag @@ -0,0 +1,41 @@ +#version 140 + +in vec4 bigColor; +in vec4 BaseColor; +in float f; + +flat in int Count; +flat in uvec4 v4; + +void main() +{ + vec4 color = BaseColor; + + for (int i = 0; i < Count; ++i) { + color += bigColor; + } + + gl_FragColor = color; + + float sum = 0.0; + for (int i = 0; i < 4; ++i) + sum += v4[i]; + + vec4 tv4; + + for (int i = 0; i < 4; ++i) + tv4[i] = v4[i] * 4u; + + gl_FragColor += vec4(sum) + tv4; + + vec4 r; + r.xyz = BaseColor.xyz; + + for (int i = 0; i < Count; ++i) + r.w = f; + + gl_FragColor.xyz += r.xyz; + + for (int i = 0; i < 16; i += 4) + gl_FragColor *= f; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.forwardFun.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.forwardFun.frag new file mode 100644 index 0000000..0a71521 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.forwardFun.frag @@ -0,0 +1,39 @@ +#version 140 + +precision mediump float; + +in vec4 bigColor; +in vec4 BaseColor; +in float d; + +void bar(); +float foo(vec4); +float unreachableReturn(); + +void main() +{ + vec4 color = vec4(foo(BaseColor)); + + bar(); + float f = unreachableReturn(); + + gl_FragColor = color * f; +} + +void bar() +{ +} + +float unreachableReturn() +{ + bar(); + if (d < 4.2) + return 1.2; + else + return 4.5; +} + +float foo(vec4 bar) +{ + return bar.x + bar.y; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.functionCall.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.functionCall.frag new file mode 100644 index 0000000..139638d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.functionCall.frag @@ -0,0 +1,44 @@ +#version 140 + +varying vec4 bigColor; +varying vec4 BaseColor; +varying float d; + +float h = 0.0; + +float foo(vec4 bar) +{ + return bar.x + bar.y; +} + +void bar() +{ +} + +float unreachableReturn() +{ + if (d < 4.2) + return 1.2; + else + return 4.5; + // might be another return inserted here by builders, has to be correct type +} + +float missingReturn() +{ + if (d < 4.5) { + h = d; + return 3.9; + } +} + +void main() +{ + vec4 color = vec4(foo(BaseColor)); + + bar(); + float f = unreachableReturn(); + float g = missingReturn(); + + gl_FragColor = color * f * h; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.functionNestedOpaque.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.functionNestedOpaque.vert new file mode 100755 index 0000000..9e308b1 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.functionNestedOpaque.vert @@ -0,0 +1,26 @@ +#version 450 + +uniform struct S { + sampler2D s; +} si; + +void foo(sampler2D t) +{ + texture(t, vec2(0.5)); +} + +void barc(const S p) +{ + foo(p.s); +} + +void bar(S p) +{ + foo(p.s); +} + +void main() +{ + barc(si); + bar(si); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.functionSemantics.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.functionSemantics.frag new file mode 100644 index 0000000..a9b59b7 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.functionSemantics.frag @@ -0,0 +1,63 @@ +#version 400 + +in float u; + +int foo(int a, const int b, in int c, const in int d, out int e, inout int f) +{ + int sum = a + b + c + d + f; // no e, it is out only + // sum should be 47 now + + a *= 64; + // no b, it is read only + c *= 64; + // no d, it is read only + e = 64 * 16; // e starts undefined + f *= 64; + + sum += a + 64 * b + c + 64 * d + e + f; // everything has a value now, totaling of 64(1+2+4+8+16+32) = 64*63 = 4032 + // sum should be 4032 + 47 = 4079 + + return sum; +} + +int foo2(float a, vec3 b, out int r) +{ + r = int(3.0 * a); + return int(5.0 * b.y); +} + +int foo3() +{ + if (u > 3.2) { + discard; + return 1000000; + } + + return 2000000; +} + +void main() +{ + int e; + int t = 2; + struct s { + ivec4 t; + } f; + f.t.y = 32; + + // test the different qualifers + int color = foo(1, 2, t+t, 8, e, f.t.y); + + color += 128 * (e + f.t.y); // right side should be 128(64(16 + 32)) = 393216 + // sum should be 4079 + 393216 = 397295 + + // test conversions + float arg; + float ret; + ret = foo2(4, ivec3(1,2,3), arg); // ret = 10, param = 12.0 + color += int(ret + arg); // adds 22, for total of 397317 + + color += foo3(); // theoretically, add 2000000, for total of 2397317 + + gl_FragColor = vec4(color); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.glFragColor.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.glFragColor.frag new file mode 100644 index 0000000..12dbcb2 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.glFragColor.frag @@ -0,0 +1,6 @@ +#version 330 + +void main() +{ + gl_FragColor = vec4(1.0); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.glsl.register.autoassign.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.glsl.register.autoassign.frag new file mode 100644 index 0000000..f754d8a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.glsl.register.autoassign.frag @@ -0,0 +1,68 @@ +#version 450 + +uniform layout(binding=0) sampler g_sSamp1; +uniform sampler g_sSamp2; +uniform layout(binding=2) sampler g_sSamp3[2]; +uniform sampler g_sSamp4[3]; +uniform sampler g_sSamp5; + +uniform sampler g_sSamp_unused1; +uniform sampler g_sSamp_unused2; + +uniform layout(binding=1) texture1D g_tTex1; +uniform texture1D g_tTex2; +uniform layout(binding=3) texture1D g_tTex3[2]; +uniform texture1D g_tTex4[3]; +uniform texture1D g_tTex5; + +uniform layout(binding=0) texture1D g_tTex_unused1; +uniform layout(binding=2) texture1D g_tTex_unused2; +uniform texture1D g_tTex_unused3; + +struct MyStruct_t { + int a; + float b; + vec3 c; +}; + +uniform layout(binding=4) myblock { + MyStruct_t mystruct; + vec4 myvec4_a; + vec4 myvec4_b; + ivec4 myint4_a; +}; + +vec4 Func1() +{ + return + texture(sampler1D(g_tTex1, g_sSamp1), 0.1) + + texture(sampler1D(g_tTex2, g_sSamp2), 0.2) + + texture(sampler1D(g_tTex3[0], g_sSamp3[0]), 0.3) + + texture(sampler1D(g_tTex3[1], g_sSamp3[1]), 0.3) + + texture(sampler1D(g_tTex4[1], g_sSamp4[1]), 0.4) + + texture(sampler1D(g_tTex4[2], g_sSamp4[2]), 0.4) + + texture(sampler1D(g_tTex5, g_sSamp5), 0.5) + + mystruct.c[1]; +} + +vec4 Func2() +{ + return + texture(sampler1D(g_tTex1, g_sSamp1), 0.1) + + texture(sampler1D(g_tTex3[1], g_sSamp3[1]), 0.3); +} + +// Not called from entry point: +vec4 Func2_unused() +{ + return + texture(sampler1D(g_tTex_unused1, g_sSamp_unused1), 1.1) + + texture(sampler1D(g_tTex_unused2, g_sSamp_unused2), 1.2); +} + +out vec4 FragColor; + +void main() +{ + FragColor = Func1() + Func2(); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.glsl.register.noautoassign.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.glsl.register.noautoassign.frag new file mode 100644 index 0000000..f754d8a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.glsl.register.noautoassign.frag @@ -0,0 +1,68 @@ +#version 450 + +uniform layout(binding=0) sampler g_sSamp1; +uniform sampler g_sSamp2; +uniform layout(binding=2) sampler g_sSamp3[2]; +uniform sampler g_sSamp4[3]; +uniform sampler g_sSamp5; + +uniform sampler g_sSamp_unused1; +uniform sampler g_sSamp_unused2; + +uniform layout(binding=1) texture1D g_tTex1; +uniform texture1D g_tTex2; +uniform layout(binding=3) texture1D g_tTex3[2]; +uniform texture1D g_tTex4[3]; +uniform texture1D g_tTex5; + +uniform layout(binding=0) texture1D g_tTex_unused1; +uniform layout(binding=2) texture1D g_tTex_unused2; +uniform texture1D g_tTex_unused3; + +struct MyStruct_t { + int a; + float b; + vec3 c; +}; + +uniform layout(binding=4) myblock { + MyStruct_t mystruct; + vec4 myvec4_a; + vec4 myvec4_b; + ivec4 myint4_a; +}; + +vec4 Func1() +{ + return + texture(sampler1D(g_tTex1, g_sSamp1), 0.1) + + texture(sampler1D(g_tTex2, g_sSamp2), 0.2) + + texture(sampler1D(g_tTex3[0], g_sSamp3[0]), 0.3) + + texture(sampler1D(g_tTex3[1], g_sSamp3[1]), 0.3) + + texture(sampler1D(g_tTex4[1], g_sSamp4[1]), 0.4) + + texture(sampler1D(g_tTex4[2], g_sSamp4[2]), 0.4) + + texture(sampler1D(g_tTex5, g_sSamp5), 0.5) + + mystruct.c[1]; +} + +vec4 Func2() +{ + return + texture(sampler1D(g_tTex1, g_sSamp1), 0.1) + + texture(sampler1D(g_tTex3[1], g_sSamp3[1]), 0.3); +} + +// Not called from entry point: +vec4 Func2_unused() +{ + return + texture(sampler1D(g_tTex_unused1, g_sSamp_unused1), 1.1) + + texture(sampler1D(g_tTex_unused2, g_sSamp_unused2), 1.2); +} + +out vec4 FragColor; + +void main() +{ + FragColor = Func1() + Func2(); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.image.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.image.frag new file mode 100644 index 0000000..30b339c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.image.frag @@ -0,0 +1,93 @@ +#version 450 + +layout(rgba32f, binding = 0) uniform image1D i1D; +layout(rgba32f, binding = 1) uniform image2D i2D; +layout(rgba32f, binding = 2) uniform image3D i3D; +layout(rgba32f, binding = 3) uniform imageCube iCube; +layout(rgba32f, binding = 4) uniform imageCubeArray iCubeArray; +layout(rgba32f, binding = 5) uniform image2DRect i2DRect; +layout(rgba32f, binding = 6) uniform image1DArray i1DArray; +layout(rg16, binding = 7) uniform image2DArray i2DArray; +layout(rgba32f, binding = 8) uniform imageBuffer iBuffer; +layout(rgba32f, binding = 9) uniform image2DMS i2DMS; +layout(rgba32f, binding = 10) uniform image2DMSArray i2DMSArray; + +layout(r32i, binding = 11) uniform iimage1D ii1D; +layout(r32ui, binding = 12) uniform uimage2D ui2D; + +flat in int ic1D; +flat in ivec2 ic2D; +flat in ivec3 ic3D; +flat in ivec4 ic4D; + +writeonly layout(binding = 1) uniform image2D wo2D; + +flat in uint value; + +out vec4 fragData; + +void main() +{ + ivec3 iv = ivec3(0); + iv.x += imageSize(i1D); + iv.xy += imageSize(i2D); + iv.xyz += imageSize(i3D); + iv.xy += imageSize(iCube); + iv.xyz += imageSize(iCubeArray); + iv.xy += imageSize(i2DRect); + iv.xy += imageSize(i1DArray); + iv.xyz += imageSize(i2DArray); + iv.x += imageSize(iBuffer); + iv.xy += imageSize(i2DMS); + iv.xyz += imageSize(i2DMSArray); + + iv.x += imageSamples(i2DMS); + iv.x += imageSamples(i2DMSArray); + + vec4 v = vec4(0.0); + v += imageLoad(i1D, ic1D); + imageStore(i1D, ic1D, v); + v += imageLoad(i2D, ic2D); + imageStore(i2D, ic2D, v); + v += imageLoad(i3D, ic3D); + imageStore(i3D, ic3D, v); + v += imageLoad(iCube, ic3D); + imageStore(iCube, ic3D, v); + v += imageLoad(iCubeArray, ic3D); + imageStore(iCubeArray, ic3D, v); + v += imageLoad(i2DRect, ic2D); + imageStore(i2DRect, ic2D, v); + v += imageLoad(i1DArray, ic2D); + imageStore(i1DArray, ic2D, v); + v += imageLoad(i2DArray, ic3D); + imageStore(i2DArray, ic3D, v); + v += imageLoad(iBuffer, ic1D); + imageStore(iBuffer, ic1D, v); + v += imageLoad(i2DMS, ic2D, 1); + imageStore(i2DMS, ic2D, 2, v); + v += imageLoad(i2DMSArray, ic3D, 3); + imageStore(i2DMSArray, ic3D, 4, v); + + uint ui = 0; + iv.x += imageAtomicAdd(ii1D, ic1D, 10); + ui += imageAtomicAdd(ui2D, ic2D, value); + iv.x += imageAtomicMin(ii1D, ic1D, 11); + ui += imageAtomicMin(ui2D, ic2D, value); + iv.x += imageAtomicMax(ii1D, ic1D, 12); + ui += imageAtomicMax(ui2D, ic2D, value); + iv.x += imageAtomicAnd(ii1D, ic1D, 13); + ui += imageAtomicAnd(ui2D, ic2D, value); + iv.x += imageAtomicOr(ii1D, ic1D, 14); + ui += imageAtomicOr(ui2D, ic2D, value); + iv.x += imageAtomicXor(ii1D, ic1D, 15); + ui += imageAtomicXor(ui2D, ic2D, value); + iv.x += imageAtomicExchange(ii1D, ic1D, 16); + ui += imageAtomicExchange(ui2D, ic2D, value); + iv.x += imageAtomicCompSwap(ii1D, ic1D, 18, 17); + ui += imageAtomicCompSwap(ui2D, ic2D, 19u, value); + + imageStore(wo2D, ic2D, v); + + fragData = ui != iv.y ? v : vec4(0.0); +} + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.image.load-formatted.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.image.load-formatted.frag new file mode 100644 index 0000000..b0adc73 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.image.load-formatted.frag @@ -0,0 +1,74 @@ +#version 450 + +#extension GL_EXT_shader_image_load_formatted : require + +layout(binding = 0) uniform image1D i1D; +layout(binding = 1) uniform image2D i2D; +layout(binding = 2) uniform image3D i3D; +layout(binding = 3) uniform imageCube iCube; +layout(binding = 4) uniform imageCubeArray iCubeArray; +layout(binding = 5) uniform image2DRect i2DRect; +layout(binding = 6) uniform image1DArray i1DArray; +layout(binding = 7) uniform image2DArray i2DArray; +layout(binding = 8) uniform imageBuffer iBuffer; +layout(binding = 9) uniform image2DMS i2DMS; +layout(binding = 10) uniform image2DMSArray i2DMSArray; + +flat in int ic1D; +flat in ivec2 ic2D; +flat in ivec3 ic3D; +flat in ivec4 ic4D; + +writeonly layout(binding = 1) uniform image2D wo2D; + +flat in uint value; + +out vec4 fragData; + +void main() +{ + ivec3 iv = ivec3(0); + iv.x += imageSize(i1D); + iv.xy += imageSize(i2D); + iv.xyz += imageSize(i3D); + iv.xy += imageSize(iCube); + iv.xyz += imageSize(iCubeArray); + iv.xy += imageSize(i2DRect); + iv.xy += imageSize(i1DArray); + iv.xyz += imageSize(i2DArray); + iv.x += imageSize(iBuffer); + iv.xy += imageSize(i2DMS); + iv.xyz += imageSize(i2DMSArray); + + iv.x += imageSamples(i2DMS); + iv.x += imageSamples(i2DMSArray); + + vec4 v = vec4(0.0); + v += imageLoad(i1D, ic1D); + imageStore(i1D, ic1D, v); + v += imageLoad(i2D, ic2D); + imageStore(i2D, ic2D, v); + v += imageLoad(i3D, ic3D); + imageStore(i3D, ic3D, v); + v += imageLoad(iCube, ic3D); + imageStore(iCube, ic3D, v); + v += imageLoad(iCubeArray, ic3D); + imageStore(iCubeArray, ic3D, v); + v += imageLoad(i2DRect, ic2D); + imageStore(i2DRect, ic2D, v); + v += imageLoad(i1DArray, ic2D); + imageStore(i1DArray, ic2D, v); + v += imageLoad(i2DArray, ic3D); + imageStore(i2DArray, ic3D, v); + v += imageLoad(iBuffer, ic1D); + imageStore(iBuffer, ic1D, v); + v += imageLoad(i2DMS, ic2D, 1); + imageStore(i2DMS, ic2D, 2, v); + v += imageLoad(i2DMSArray, ic3D, 3); + imageStore(i2DMSArray, ic3D, 4, v); + + imageStore(wo2D, ic2D, v); + + fragData = v; +} + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.int64.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.int64.frag new file mode 100644 index 0000000..8021b7e --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.int64.frag @@ -0,0 +1,264 @@ +#version 450 + +#extension GL_ARB_gpu_shader_int64: enable + +layout(binding = 0) uniform Uniforms +{ + uint index; +}; + +layout(std140, binding = 1) uniform Block +{ + i64vec3 i64v; + uint64_t u64; +} block; + +void main() +{ +} + +void literal() +{ + const int64_t i64Const[3] = + { + -0x1111111111111111l, // Hex + -1l, // Dec + 040000000000l, // Oct + }; + + int64_t i64 = i64Const[index]; + + const uint64_t u64Const[] = + { + 0xFFFFFFFFFFFFFFFFul, // Hex + 4294967296UL, // Dec + 077777777777ul, // Oct + }; + + uint64_t u64 = u64Const[index]; +} + +void typeCast() +{ + bvec2 bv; + ivec2 iv; + uvec2 uv; + vec2 fv; + dvec2 dv; + + i64vec2 i64v; + u64vec2 u64v; + + i64v = i64vec2(bv); // bool -> int64 + u64v = u64vec2(bv); // bool -> uint64 + + i64v = iv; // int -> int64 + iv = ivec2(i64v); // int64 -> int + + u64v = uv; // uint -> uint64 + uv = uvec2(u64v); // uint64 -> uint + + fv = vec2(i64v); // int64 -> float + dv = i64v; // int64 -> double + + fv = vec2(u64v); // uint64 -> float + dv = u64v; // uint64 -> double + + i64v = i64vec2(fv); // float -> int64 + i64v = i64vec2(dv); // double -> int64 + + u64v = u64vec2(fv); // float -> uint64 + u64v = u64vec2(dv); // double -> uint64 + + bv = bvec2(i64v); // int64 -> bool + bv = bvec2(u64v); // uint64 -> bool + + u64v = i64v; // int64 -> uint64 + i64v = i64vec2(u64v); // uint64 -> int64 + + uv = uvec2(i64v); // int64 -> uint + i64v = i64vec2(uv); // uint -> int64 + iv = ivec2(u64v); // uint64 -> int + u64v = iv; // int -> uint64 +} + +void operators() +{ + u64vec3 u64v; + int64_t i64; + uvec3 uv; + int i; + bool b; + + // Unary + u64v++; + i64--; + ++i64; + --u64v; + + u64v = ~u64v; + + i64 = +i64; + u64v = -u64v; + + // Arithmetic + i64 += i64; + u64v -= u64v; + i64 *= i; + u64v /= uv; + u64v %= i; + + u64v = u64v + uv; + i64 = i64 - i; + u64v = u64v * uv; + i64 = i64 * i; + i64 = i64 % i; + + // Shift + u64v <<= i; + i64 >>= uv.y; + + i64 = i64 << u64v.z; + u64v = u64v << i64; + + // Relational + b = (u64v.x != i64); + b = (i64 == u64v.x); + b = (u64v.x > uv.y); + b = (i64 < i); + b = (u64v.y >= uv.x); + b = (i64 <= i); + + // Bitwise + u64v |= i; + i64 = i64 | i; + i64 &= i; + u64v = u64v & uv; + u64v ^= i64; + u64v = u64v ^ i64; +} + +void builtinFuncs() +{ + i64vec2 i64v; + u64vec3 u64v; + dvec3 dv; + bvec3 bv; + + int64_t i64; + uint64_t u64; + + // abs() + i64v = abs(i64v); + + // sign() + i64 = sign(i64); + + // min() + i64v = min(i64v, i64); + i64v = min(i64v, i64vec2(-1)); + u64v = min(u64v, u64); + u64v = min(u64v, u64vec3(0)); + + // max() + i64v = max(i64v, i64); + i64v = max(i64v, i64vec2(-1)); + u64v = max(u64v, u64); + u64v = max(u64v, u64vec3(0)); + + // clamp() + i64v = clamp(i64v, -i64, i64); + i64v = clamp(i64v, -i64v, i64v); + u64v = clamp(u64v, -u64, u64); + u64v = clamp(u64v, -u64v, u64v); + + // mix() + i64 = mix(i64v.x, i64v.y, true); + i64v = mix(i64vec2(i64), i64vec2(-i64), bvec2(false)); + u64 = mix(u64v.x, u64v.y, true); + u64v = mix(u64vec3(u64), u64vec3(-u64), bvec3(false)); + + // doubleBitsToInt64() + i64v = doubleBitsToInt64(dv.xy); + + // doubleBitsToUint64() + u64v.x = doubleBitsToUint64(dv.z); + + // int64BitsToDouble() + dv.xy = int64BitsToDouble(i64v); + + // uint64BitsToDouble() + dv = uint64BitsToDouble(u64v); + + // packInt2x32() + i64 = packInt2x32(ivec2(1, 2)); + + // unpackInt2x32() + ivec2 iv = unpackInt2x32(i64); + + // packUint2x32() + u64 = packUint2x32(uvec2(2, 3)); + + // unpackUint2x32() + uvec2 uv = unpackUint2x32(u64); + + // lessThan() + bv = lessThan(u64v, u64vec3(u64)); + bv.xy = lessThan(i64v, i64vec2(i64)); + + // lessThanEqual() + bv = lessThanEqual(u64v, u64vec3(u64)); + bv.xy = lessThanEqual(i64v, i64vec2(i64)); + + // greaterThan() + bv = greaterThan(u64v, u64vec3(u64)); + bv.xy = greaterThan(i64v, i64vec2(i64)); + + // greaterThanEqual() + bv = greaterThanEqual(u64v, u64vec3(u64)); + bv.xy = greaterThanEqual(i64v, i64vec2(i64)); + + // equal() + bv = equal(u64v, u64vec3(u64)); + bv.xy = equal(i64v, i64vec2(i64)); + + // notEqual() + bv = notEqual(u64v, u64vec3(u64)); + bv.xy = notEqual(i64v, i64vec2(i64)); +} + +// 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; + +// bool <-> int64/uint64 +const bool i64_to_b = bool(si64); +const bool u64_to_b = bool(su64); +const int64_t b_to_i64 = int64_t(sb); +const uint64_t b_to_u64 = uint64_t(sb); + +// int <-> int64 +const int i64_to_i = int(si64); +const int64_t i_to_i64 = int64_t(si); + +// uint <-> uint64 +const uint u64_to_u = uint(su64); +const uint64_t u_to_u64 = uint64_t(su); + +// int64 <-> uint64 +const int64_t u64_to_i64 = int64_t(su64); +const uint64_t i64_to_u64 = uint64_t(si64); + +// int <-> uint64 +const int u64_to_i = int(su64); +const uint64_t i_to_u64 = uint64_t(si); + +// uint <-> int64 +const uint i64_to_u = uint(si64); +const int64_t u_to_i64 = int64_t(su); + +#define UINT64_MAX 18446744073709551615ul +uint64_t u64Max = UINT64_MAX; diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.intOps.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.intOps.vert new file mode 100644 index 0000000..b7d749b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.intOps.vert @@ -0,0 +1,72 @@ +#version 310 es + +in uint u1; +in uvec2 u2; +in uvec3 u3; +in uvec4 u4; + +in float v1; +in vec2 v2; +in vec3 v3; +in vec4 v4; + +in int i1; +in ivec2 i2; +in ivec3 i3; +in ivec4 i4; + +out uvec4 uout; +out ivec4 iout; +out vec4 fout; + +void main() +{ + iout = ivec4(0); + uout = uvec4(0); + fout = vec4(0.0); + + uvec2 u2out; + uout.xy += uaddCarry(u2, u2, u2out); + uout.xy += u2out; + + uint u1out; + uout.x += usubBorrow(u1, u1, u1out); + uout.x += u1out; + + uvec4 u4outHi, u4outLow; + umulExtended(u4, u4, u4outHi, u4outLow); + uout += u4outHi + u4outLow; + + ivec4 i4outHi, i4outLow; + imulExtended(i4, i4, i4outHi, i4outLow); + iout += i4outLow + i4outHi; + + ivec3 i3out; + fout.xyz += frexp(v3, i3out); + iout.xyz += i3out; + int i1out; + fout.x += frexp(v1, i1out); + iout.x += i1out; + + fout.xy += ldexp(v2, i2); + fout.x += ldexp(v1, i1); + + iout.x += bitfieldExtract(i1, 4, 5); + uout.xyz += bitfieldExtract(u3, 4, 5); + iout.xyz += bitfieldInsert(i3, i3, 4, 5); + uout.x += bitfieldInsert(u1, u1, 4, 5); + iout.xy += bitfieldReverse(i2); + uout += bitfieldReverse(u4); + iout.x += bitCount(i1); + iout.xyz += bitCount(u3); + + iout.xy += findLSB(i2); + iout += findLSB(u4); + iout.x += findMSB(i1); + iout.xy += findMSB(u2); + + uout.x += packUnorm4x8(v4); + uout.x += packSnorm4x8(v4); + fout += unpackUnorm4x8(u1); + fout += unpackSnorm4x8(u1); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.interpOps.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.interpOps.frag new file mode 100644 index 0000000..afe28dc --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.interpOps.frag @@ -0,0 +1,32 @@ +#version 450 + +in float if1; +in vec2 if2; +in vec3 if3; +in vec4 if4; + +flat in int samp; +flat in vec2 offset; + +out vec4 fragColor; + +void main() +{ + vec4 f4 = vec4(0.0); + f4.x += interpolateAtCentroid(if1); + f4.xy += interpolateAtCentroid(if2); + f4.xyz += interpolateAtCentroid(if3); + f4 += interpolateAtCentroid(if4); + + f4.x += interpolateAtSample(if1, samp); + f4.xy += interpolateAtSample(if2, samp); + f4.xyz += interpolateAtSample(if3, samp); + f4 += interpolateAtSample(if4, samp); + + f4.x += interpolateAtOffset(if1, offset); + f4.xy += interpolateAtOffset(if2, offset); + f4.xyz += interpolateAtOffset(if3, offset); + f4 += interpolateAtOffset(if4, offset); + + fragColor = f4; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.layoutNested.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.layoutNested.vert new file mode 100644 index 0000000..f0dc389 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.layoutNested.vert @@ -0,0 +1,76 @@ +#version 450 + +// should get 3 SPV types for S: no layout, 140, and 430, plus extras for interpolation or invariant differences +struct S +{ + highp uvec3 a; + mediump mat2 b[4]; + lowp uint c; +}; + +layout(set = 0, binding = 0, std140) uniform Block140 +{ + mediump int u; + S s[2][3]; + mediump vec2 v; +} inst140; + +layout(set = 0, binding = 1, std430) buffer Block430 +{ + mediump int u; + S s[2][3]; + mediump vec2 v; +} inst430; + +S s; + +// should get 5 SPV types for T: no layout, 140/row, 140/col, 430/row, and 430/col +struct T { + mat2 m; + int a; +}; + +T t; + +struct Nestor { + T nestorT; +}; + +layout(set = 1, binding = 0, std140) uniform Bt1 +{ + layout(row_major) Nestor nt; +} Btn1; + +layout(set = 1, binding = 0, std140) uniform Bt2 +{ + layout(column_major) Nestor nt; +} Btn2; + +layout(row_major, set = 1, binding = 0, std140) uniform Bt3 +{ + layout(column_major) Nestor ntcol; + Nestor ntrow; // should be row major decoration version of Nestor +} Btn3; + +layout(set = 1, binding = 0, std430) buffer bBt1 +{ + layout(row_major) Nestor nt; +} bBtn1; + +layout(set = 1, binding = 0, std430) buffer bBt2 +{ + layout(column_major) Nestor nt; +} bBtn2; + +layout(set = 1, binding = 0, std430) buffer bBt3 +{ + layout(row_major) Nestor ntcol; + Nestor ntrow; // should be col major decoration version of Nestor +} bBtn3; + +void main() +{ +} + +flat out S sout; +invariant out S soutinv; diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.length.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.length.frag new file mode 100644 index 0000000..3b3db0b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.length.frag @@ -0,0 +1,14 @@ +#version 140 + +vec4 u[3]; + +in vec2 v[2]; + +void main() +{ + int a[5]; + + vec2 t = v[0] + v[1]; + + gl_FragColor = vec4(u.length() * v.length() * a.length()); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.localAggregates.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.localAggregates.frag new file mode 100644 index 0000000..9bdb11b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.localAggregates.frag @@ -0,0 +1,72 @@ +#version 400 + +uniform sampler2D samp2D; +in vec2 coord; +in vec4 color; + +struct s1 { + int i; + float f; +}; + +struct s2 { + int i; + float f; + s1 s1_1; + vec4 bleh; +}; + +struct s3 { + s2 s2_1; + int i; + float f; + s1 s1_1; +}; + + +flat in s1 foo; +flat in s2 foo2; +flat in s3 foo3; + + +flat in int condition; + +void main() +{ + s2 locals2; + s3 locals3; + float localFArray[16]; + int localIArray[8]; + + locals2 = foo3.s2_1; + + if (foo3.s2_1.i > 0) { + locals2.s1_1.f = 1.0; + localFArray[4] = coord.x; + localIArray[2] = foo3.s2_1.i; + } else { + locals2.s1_1.f = coord.x; + localFArray[4] = 1.0; + localIArray[2] = 0; + } + + if (localIArray[2] == 0) + ++localFArray[4]; + + float localArray[16]; + int x = 5; + localArray[x] = coord.x; + + float[16] a; + + for (int i = 0; i < 16; i++) + a[i] = 0.0; + + if (condition == 1) + a = localArray; + + locals2.bleh = color; + locals2.bleh.z = coord.y; + + gl_FragColor = locals2.bleh * (localFArray[4] + locals2.s1_1.f + localArray[x] + a[x]) * texture(samp2D, coord); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.loops.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.loops.frag new file mode 100644 index 0000000..b9ec099 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.loops.frag @@ -0,0 +1,302 @@ +#version 140 +in vec4 bigColor; +in vec4 bigColor1_1; +in vec4 bigColor1_2; +in vec4 bigColor1_3; +in vec4 bigColor2; +in vec4 bigColor3; +in vec4 bigColor4; +in vec4 bigColor5; +in vec4 bigColor6; +in vec4 bigColor7; +in vec4 bigColor8; + +in vec4 BaseColor; + +in float d; +in float d2; +in float d3; +in float d4; +in float d5; +in float d6; +in float d7; +in float d8; +in float d9; +in float d10; +in float d11; +in float d12; +in float d14; +in float d15; +in float d16; +in float d17; +in float d18; +flat in int Count; + +void main() +{ + vec4 color = BaseColor; + + // Not a real loop + while (true) { + if (color.x < 0.33) { + color += vec4(0.33); + break; + } + if (color.x < 0.66) { + color += vec4(0.66); + break; + } + + color += vec4(0.33); + break; + } + + // While + while (color.x < d) { + color += bigColor; + } + + // While (latchy) + while (color.z < d) { + color += bigColor1_1; + if (color.w < d) + continue; + + color += bigColor1_1; + } + + // While (constant) + while (color.x < 42.0) { + ++color; + } + + // While (complicated-conditional) + while (color.w < d2 && color.y < d3) { + color += bigColor1_2; + } + + // While (multi-exit) + while (color.z < d3) { + color += bigColor1_3; + if (color.y < d4) + break; + color += bigColor1_3; + } + + // For (dynamic) + for (int i = 0; i < Count; ++i) { + color += bigColor2; + } + + // Do while + do { + color += bigColor3; + } while (color.x < d2); + + // For (static) + for (int i = 0; i < 42; ++i) { + color.z += d3; + } + + // For (static) flow-control + for (int i = 0; i < 100; ++i) { + if (color.z < 20.0) + color.x++; + else + color.y++; + if (color.w < 20.0) + if (color.z > color.y) + 0; // do nothing + } + + // For (static) flow-control with latch merge + for (int i = 0; i < 120; ++i) { + if (color.z < 20.0) + color.x++; + else + color.y++; + } + + // For (static) latchy + for (int i = 0; i < 42; ++i) { + color.z += d3; + if (color.x < d4) + continue; + ++color.w; + } + + // For (static) multi-exit + for (int i = 0; i < 42; ++i) { + color.z += d3; + if (color.x < d4) + break; + ++color.w; + } + + // Latchy + do { + color += bigColor4; + if (color.x < d4) + continue; + if (color.y < d4) + color.y += d4; + else + color.x += d4; + } while (color.z < d4); + + // Do while flow control + do { + color += bigColor5; + if (color.y < d5) + color.y += d5; + } while (color.x < d5); + + // If then loop + if (color.x < d6) { + while (color.y < d6) + color += bigColor6; + } else { + while (color.z < d6) + color.z += bigColor6.z; + } + + // If then multi-exit + if (color.x < d6) { + while (color.y < d6) { + color += bigColor6; + if (d7 < 1.0) + break; + } + + } else { + while (color.z < d6) + color.z += bigColor6.z; + } + + + // Multi-exit + do { + if (d7 < 0.0) + break; + + color += bigColor7; + + if (d7 < 1.0) { + color.z++; + break; + } + + color += BaseColor; + + } while (true); + + + // Multi-exit2 + do { + // invariant conditional break at the top of the loop. This could be a + // situation where unswitching the loop has no real increases in code + // size. + if (d8 < 0.0) + break; + + color += bigColor7; + + if (d8 < 1.0) { + color.z++; + if (d8 < 2.0) { + color.y++; + } else { + color.x++; + } + break; + } + + color += BaseColor; + + } while (color.z < d8); + + // Deep exit + while (color.w < d9) { + if (d9 > d8) { + if (color.x <= d7) { + if (color.z == 5.0) + color.w++; + else + break; + } + } + + } + + // No end loop-back. + while (color.z < d10) { + color.y++; + if (color.y < d11) { + color.z++; + if (color.w < d12) + color.w++; + else + color.x++; + continue; + } + + color++; + break; + } + + // Multi-continue + while (color.x < 10.0) { + color += bigColor8; + + if (color.z < d8) + if (color.w < d6) + continue; + + color.y += bigColor8.x; + } + + color++; + gl_FragColor = color; + + // Early Return + while (color.x < d14) { + if (color.y < d15) { + return; + } + else + color++; + } + + color++; + + while (color.w < d16) { + color.w++; + } + + + // While (complicated-conditional) + while (color.w < d2 && color.y < d3) { + color += bigColor1_2; + if (color.z < d3) + return; + } + + + do { + if (color.y < d18) + return; + color++; + } while (color.x < d17); + + // Early Discard + while (color.y < d16) { + if (color.w < d16) { + discard; + } else + color++; + } + + color++; + + gl_FragColor = color; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.loopsArtificial.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.loopsArtificial.frag new file mode 100644 index 0000000..ae380b9 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.loopsArtificial.frag @@ -0,0 +1,67 @@ +#version 140 +in vec4 bigColor; +in vec4 bigColor1_1; +in vec4 bigColor1_2; +in vec4 bigColor1_3; +in vec4 bigColor2; +in vec4 bigColor3; +in vec4 bigColor4; +in vec4 bigColor5; +in vec4 bigColor6; +in vec4 bigColor7; +in vec4 bigColor8; + +in vec4 BaseColor; + +in float d; +in float d2; +in float d3; +in float d4; +in float d13; + +flat in int Count; + +void main() +{ + vec4 color = BaseColor; + + // Latchy2 + do { + color += bigColor4; + if (color.x < d4) { + color.z += 2.0; + if (color.z < d4) { + color.x++; + continue; + } + } + if (color.y < d4) + color.y += d4; + else + color.x += d4; + } while (color.z < d4); + + // Immediate dominator + while (color.w < d13) { + if (color.z < d13) + color++; + else + color--; + // code from Latchy 2 + color += bigColor4; + if (color.x < d4) { + color.z += 2.0; + if (color.z < d4) { + color.x++; + continue; + } + } + if (color.y < d4) + color.y += d4; + else + color.x += d4; + } + + color++; + gl_FragColor = color; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.matFun.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.matFun.vert new file mode 100644 index 0000000..49e882f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.matFun.vert @@ -0,0 +1,28 @@ +#version 400 + +uniform bl { + uniform mat4 m4; + uniform mat3 m3; +} bName; + +in vec3 v3; + +vec3 xf(mat3 m, vec3 v) +{ + return v * m; +} + +mat3 Mat3(mat4 m) +{ + return mat3(m[0].xyz, m[1].xyz, m[2].xyz); +} + +vec3 mxv(mat4 m4, vec3 v) +{ + return v * Mat3(m4); +} + +void main() +{ + gl_Position = vec4(mxv(bName.m4, v3) + xf(bName.m3, v3), 1.0); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.matrix.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.matrix.frag new file mode 100644 index 0000000..3157173 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.matrix.frag @@ -0,0 +1,49 @@ +#version 420 + +in mat3x4 m1; +in mat3x4 m2; +in float f; +in vec3 v3; +in vec4 v4; + +out vec4 color; + +void main() +{ + mat3x4 sum34; + dmat3x4 dm; + vec3 sum3; + vec4 sum4; + + sum34 = m1 - m2; + sum34 += m1 * f; + sum34 += f * m1; + sum34 /= matrixCompMult(m1, m2); + sum34 += m1 / f; + sum34 += f / m1; + sum34 += f; + sum34 -= f; + dm = dmat3x4(sum34); + sum34 = mat3x4(dm); + + sum3 = v4 * m2; + sum4 = m2 * v3; + + mat4x3 m43 = transpose(sum34); + mat4 m4 = m1 * m43; + + sum4 = v4 * m4; + + color = sum4; + + ++sum34; + --sum34; + + sum34 += mat3x4(f); + sum34 += mat3x4(v3, f, v3, f, v3, f); + + color += sum3 * m43 + sum4; + + color += vec4(m43); + color += vec4(vec3(mat2(f)), 7.2); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.matrix2.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.matrix2.frag new file mode 100644 index 0000000..7fb6dd8 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.matrix2.frag @@ -0,0 +1,50 @@ +#version 150 + +in mat3 colorTransform; +in vec3 Color; +in mat4 m, n; + +in mat4x3 um43; +in mat3x4 un34; +in mat2 um2; +in mat3 um3; +in mat4 um4; + +in vec4 v; + +in vec3 u; + +out vec4 FragColor; + +void main() +{ + mat3x4 m34 = outerProduct(v, u); + + m34 += mat3x4(4.3); + + FragColor = vec4(Color, 1.0); + FragColor *= vec4(FragColor * m34, 1.0); + + m34 *= v.x; + + mat4 m44 = mat4(un34); + + m44 += m34 * um43; + + FragColor += (-m44) * v; + + FragColor *= matrixCompMult(m44, m44); + + m34 = transpose(um43); + FragColor *= vec4(FragColor * m34, 1.0); + FragColor *= vec4(determinant(um4)); + mat2 inv = inverse(um2); + FragColor *= vec4(inv[0][0], inv[1][0], inv[0][1], inv[1][1]); + mat3 inv3 = inverse(um3); + FragColor *= vec4(inv3[2][1]); + + mat4 inv4 = inverse(um4); + FragColor *= inv4; + + FragColor = vec4(FragColor * matrixCompMult(un34, un34), FragColor.w); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.memoryQualifier.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.memoryQualifier.frag new file mode 100644 index 0000000..85e7147 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.memoryQualifier.frag @@ -0,0 +1,38 @@ +#version 450 + +layout(binding = 0, r32f) uniform coherent image1D i1D; +layout(binding = 1, r32f) uniform volatile image2D i2D; +layout(binding = 2, r32f) uniform restrict image2DRect i2DRect; +layout(binding = 3, r32f) uniform readonly image3D i3D; +layout(binding = 3, r32f) uniform writeonly imageCube iCube; + +struct Data +{ + float f1; + vec2 f2; +}; + +coherent buffer Buffer +{ + volatile float f1; + restrict vec2 f2; + readonly vec3 f3; + writeonly vec4 f4; + int i1; + Data data; +}; + +void main() +{ + vec4 texel = imageLoad(i1D, 1); + texel += imageLoad(i2D, ivec2(1)); + texel += imageLoad(i2DRect, ivec2(1)); + texel += imageLoad(i3D, ivec3(1)); + imageStore(iCube, ivec3(1), texel); + + texel[i1] = f1; + texel.xy += f2; + texel.xyz -= f3; + texel.w += data.f1 + data.f2[1]; + f4 = texel; +} \ No newline at end of file diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.merge-unreachable.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.merge-unreachable.frag new file mode 100644 index 0000000..a650cd1 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.merge-unreachable.frag @@ -0,0 +1,8 @@ +#version 450 +precision mediump int; precision highp float; +layout(location=1) in highp vec4 v; +void main (void) +{ + if (v == vec4(0.1,0.2,0.3,0.4)) discard; + else return; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.multiStruct.comp b/3rdparty/bgfx/3rdparty/glslang/Test/spv.multiStruct.comp new file mode 100644 index 0000000..7462da4 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.multiStruct.comp @@ -0,0 +1,48 @@ +#version 450 core + +struct MyStruct +{ + vec2 foo[2]; + bool sb; +}; + +layout(binding = 0, std430) buffer SSBO0 +{ + MyStruct a; +} inBuf; + +layout(binding = 1, std430) buffer SSBO1 +{ + MyStruct b; +} outBuf; + +layout(binding = 2, std140) uniform UBO +{ + MyStruct c; +} uBuf; + +struct Nested { + float f; + MyStruct S[2]; +}; + +layout(binding = 2, std140) uniform UBON +{ + Nested N1; +} uBufN; + +layout(binding = 1, std430) buffer SSBO1N +{ + Nested N2; +} outBufN; + +void main() +{ + MyStruct t = inBuf.a; + outBuf.b = t; + t = uBuf.c; + outBuf.b = t; + + Nested n = uBufN.N1; + outBufN.N2 = n; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.multiStructFuncall.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.multiStructFuncall.frag new file mode 100755 index 0000000..7f9968d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.multiStructFuncall.frag @@ -0,0 +1,21 @@ +#version 450 + +struct S { mat4 m; }; +buffer blockName { S s1; }; // need an S with decoration +S s2; // no decorations on S + +void fooConst(const in S s) { } +void foo(in S s) { } +void fooOut(inout S s) { } + +void main() +{ + fooConst(s1); + fooConst(s2); + + foo(s1); + foo(s2); + + fooOut(s1); + fooOut(s2); +} \ No newline at end of file diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.multiView.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.multiView.frag new file mode 100644 index 0000000..47c2763 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.multiView.frag @@ -0,0 +1,9 @@ +#version 450 + +#extension GL_EXT_multiview : enable + +out vec4 color; + +void main() { + color = vec4(gl_ViewIndex, 0, 0, 0); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.multiviewPerViewAttributes.tesc b/3rdparty/bgfx/3rdparty/glslang/Test/spv.multiviewPerViewAttributes.tesc new file mode 100644 index 0000000..a0dd64d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.multiviewPerViewAttributes.tesc @@ -0,0 +1,14 @@ +#version 450 + +#extension GL_NVX_multiview_per_view_attributes :require + +layout(vertices = 4) out; +out gl_PerVertex { + int gl_ViewportMaskPerViewNV[]; + vec4 gl_PositionPerViewNV[]; + } gl_out[]; +void main() +{ + gl_out[gl_InvocationID].gl_ViewportMaskPerViewNV[0] = 1; + gl_out[gl_InvocationID].gl_PositionPerViewNV[0] = gl_in[1].gl_Position; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.multiviewPerViewAttributes.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.multiviewPerViewAttributes.vert new file mode 100644 index 0000000..dd64a16 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.multiviewPerViewAttributes.vert @@ -0,0 +1,10 @@ +#version 450 + +#extension GL_NVX_multiview_per_view_attributes :require + +void main() +{ + gl_ViewportMaskPerViewNV[0] = 1; + gl_PositionPerViewNV[0] = gl_Position; +} + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.newTexture.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.newTexture.frag new file mode 100644 index 0000000..6f5f67c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.newTexture.frag @@ -0,0 +1,72 @@ +#version 430 + +uniform sampler2D s2D; +uniform sampler2DRect sr; +uniform sampler3D s3D; +uniform samplerCube sCube; +uniform samplerCubeShadow sCubeShadow; +uniform samplerCubeArrayShadow sCubeArrayShadow; +uniform sampler2DShadow s2DShadow; +uniform sampler2DArray s2DArray; +uniform sampler2DArrayShadow s2DArrayShadow; + +uniform isampler2D is2D; +uniform isampler3D is3D; +uniform isamplerCube isCube; +uniform isampler2DArray is2DArray; +uniform isampler2DMS is2Dms; + +uniform usampler2D us2D; +uniform usampler3D us3D; +uniform usamplerCube usCube; +uniform usampler2DArray us2DArray; + +in float c1D; +in vec2 c2D; +in vec3 c3D; +in vec4 c4D; + +flat in int ic1D; +flat in ivec2 ic2D; +flat in ivec3 ic3D; +flat in ivec4 ic4D; + +out vec4 FragData; + +void main() +{ + vec4 v = texture(s2D, c2D); + v.y += texture(sCubeArrayShadow, c4D, c1D); + v += textureProj(s3D, c4D); + v += textureLod(s2DArray, c3D, 1.2); + v.y += textureOffset(s2DShadow, c3D, ivec2(3), c1D); + v += texelFetch(s3D, ic3D, ic1D); + v += texelFetchOffset(s2D, ic2D, 4, ivec2(3)); + v += texelFetchOffset(sr, ic2D, ivec2(4)); + v.y += textureLodOffset(s2DShadow, c3D, c1D, ivec2(3)); + v += textureProjLodOffset(s2D, c3D, c1D, ivec2(3)); + v += textureGrad(sCube, c3D, c3D, c3D); + v.x += textureGradOffset(s2DArrayShadow, c4D, c2D, c2D, ivec2(3)); + v += textureProjGrad(s3D, c4D, c3D, c3D); + v += textureProjGradOffset(s2D, c3D, c2D, c2D, ivec2(3)); + + ivec4 iv = texture(is2D, c2D); + v += vec4(iv); + iv = textureProjOffset(is2D, c4D, ivec2(3)); + v += vec4(iv); + iv = textureProjLod(is2D, c3D, c1D); + v += vec4(iv); + iv = textureProjGrad(is2D, c3D, c2D, c2D); + v += vec4(iv); + iv = texture(is3D, c3D, 4.2); + v += vec4(iv); + iv = textureLod(isCube, c3D, c1D); + v += vec4(iv); + iv = texelFetch(is2DArray, ic3D, ic1D); + v += vec4(iv); + + ivec2 iv2 = textureSize(sCubeShadow, 2); + // iv2 += textureSize(is2Dms); + + FragData = v + vec4(iv2, 0.0, 0.0); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.noDeadDecorations.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.noDeadDecorations.vert new file mode 100644 index 0000000..8898497 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.noDeadDecorations.vert @@ -0,0 +1,13 @@ +#version 310 es +precision mediump float; + +float func(float a) +{ + return -a; + a = a * -1.0; +} + +void main() +{ + gl_Position.x = func(0.0); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.noWorkgroup.comp b/3rdparty/bgfx/3rdparty/glslang/Test/spv.noWorkgroup.comp new file mode 100644 index 0000000..0c77f27 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.noWorkgroup.comp @@ -0,0 +1,7 @@ +#version 450 + +layout(local_size_x_id = 18, local_size_y_id=10,local_size_z_id = 19) in; + +void main() +{ +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.nonSquare.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.nonSquare.vert new file mode 100644 index 0000000..9f7125b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.nonSquare.vert @@ -0,0 +1,25 @@ +#version 140 + +in vec3 v3; +in vec4 v4; + +out mat3x2 m32; + +const vec2 cv2 = vec2(10.0, 20.0); +const mat2x4 m24 = mat2x4(3.0); +const mat4x2 m42 = mat4x2(1.0, 2.0, + 3.0, 4.0, + 5.0, 6.0, + 7.0, 8.0); + +void main() +{ + mat2x3 m23; + vec2 a, b; + + a = v3 * m23; + b = m32 * v3; + + gl_Position = vec4(m23 * m32 * v3, m24[1][3]) + + (m24 * m42) * v4 + cv2 * m42 + m24 * cv2 + vec4(cv2[1], cv2.x, m42[2][1], m42[2][0]); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.offsets.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.offsets.frag new file mode 100755 index 0000000..0a1c008 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.offsets.frag @@ -0,0 +1,17 @@ +#version 450 + +layout(set = 0, binding = 0, std140) uniform n1 { + layout(offset = 8) int a; + layout(offset = 4) int b; + layout(offset = 0) int c; + layout(offset = 12) int d; +} i1; + +layout(set = 0, binding = 1, std430) buffer n2 { + layout(offset = 32) vec3 e; + vec3 f; + layout(offset = 16) vec3 g; + layout(offset = 0) vec3 h; +} i2; + +void main() {} \ No newline at end of file diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.precise.tesc b/3rdparty/bgfx/3rdparty/glslang/Test/spv.precise.tesc new file mode 100644 index 0000000..35de26b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.precise.tesc @@ -0,0 +1,24 @@ +#version 310 es +#extension GL_EXT_tessellation_shader : require +#extension GL_EXT_gpu_shader5 : require + +layout(vertices = 3) out; + +layout(location = 0) in highp vec2 in_tc_position[]; +layout(location = 1) in highp float in_tc_tessParam[]; + +layout(location = 0) out highp vec2 in_te_position[]; + +precise gl_TessLevelOuter; + +void main (void) +{ + in_te_position[gl_InvocationID] = in_tc_position[gl_InvocationID]; + + gl_TessLevelInner[0] = 5.0; + gl_TessLevelInner[1] = 5.0; + + gl_TessLevelOuter[0] = 1.0 + 59.0 * 0.5 * (in_tc_tessParam[1] + in_tc_tessParam[2]); + gl_TessLevelOuter[1] = 1.0 + 59.0 * 0.5 * (in_tc_tessParam[2] + in_tc_tessParam[0]); + gl_TessLevelOuter[2] = 1.0 + 59.0 * 0.5 * (in_tc_tessParam[0] + in_tc_tessParam[1]); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.precise.tese b/3rdparty/bgfx/3rdparty/glslang/Test/spv.precise.tese new file mode 100644 index 0000000..874ea84 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.precise.tese @@ -0,0 +1,36 @@ +#version 310 es +#extension GL_EXT_tessellation_shader : require +#extension GL_EXT_gpu_shader5 : require + +layout(triangles, equal_spacing) in; + +layout(location = 0) in highp vec2 in_te_position[]; + +layout(location = 0) out mediump vec4 in_f_color; + +precise gl_Position; + +void main(void) { + highp vec2 pos = gl_TessCoord.x * in_te_position[0] + + gl_TessCoord.y * in_te_position[1] + + gl_TessCoord.z * in_te_position[2]; + + highp float f = + sqrt(3.0 * min(gl_TessCoord.x, min(gl_TessCoord.y, gl_TessCoord.z))) * + 0.5 + + 0.5; + in_f_color = vec4(gl_TessCoord * f, 1.0); + + // Offset the position slightly, based on the parity of the bits in the float + // representation. + // This is done to detect possible small differences in edge vertex positions + // between patches. + uvec2 bits = floatBitsToUint(pos); + uint numBits = 0u; + for (uint i = 0u; i < 32u; i++) + numBits += + ((bits[0] << i) & 1u) + ((bits[1] << i) & 1u); + pos += float(numBits & 1u) * 0.04; + + gl_Position = vec4(pos, 0.0, 1.0); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.precision.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.precision.frag new file mode 100644 index 0000000..090c1a6 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.precision.frag @@ -0,0 +1,60 @@ +#version 310 es +precision mediump float; +in lowp float lowfin; +in mediump float mediumfin; +in highp vec4 highfin; + +highp int uniform_high; +mediump int uniform_medium; +lowp int uniform_low; +bvec2 ub2; + +out mediump vec4 mediumfout; + +highp float global_highp; + +lowp vec2 foo(mediump vec3 mv3) +{ + return highfin.xy; +} + +bool boolfun(bvec2 bv2) +{ + return bv2 == bvec2(false, true); +} + +struct S { + highp float a; + lowp float b; +}; + +in S s; + +void main() +{ + lowp int sum = uniform_medium + uniform_high; + + sum += uniform_high; + sum += uniform_low; + + // test maxing precisions of args to get precision of builtin + lowp float arg1 = 3.2; + mediump float arg2 = 1023908.2; + lowp float d = distance(lowfin, mediumfin); + + global_highp = length(highfin); + + highp vec4 local_highp = vec4(global_highp); + + mediumfout = vec4(sin(d)) + arg2 + local_highp; + + sum += 4 + ((ivec2(uniform_low) * ivec2(uniform_high) + ivec2((/* comma operator */uniform_low, uniform_high)))).x; + + mediumfout += vec4(sum); + + if (boolfun(ub2)) + ++mediumfout; + + mediumfout *= s.a; + mediumfout *= s.b; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.prepost.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.prepost.frag new file mode 100644 index 0000000..dfd4566 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.prepost.frag @@ -0,0 +1,38 @@ +#version 140 + +void main() +{ + struct s { + float y[5]; + } str; + + float t; + int index = 5; // all indexing is 4 + + str.y[4] = 2.0; // 2.0 + t = ++str.y[--index]; // 3.0 + str.y[4] += t; // 6.0 + t = str.y[4]--; // 5.0 (t = 6.0) + str.y[index++] += t; // 11.0 + --str.y[--index]; // 10.0 + + float x = str.y[4]; + ++x; + --x; + x++; + x--; + + // x is 10.0 + + float y = x * ++x; // 10 * 11 + float z = y * x--; // 110 * 11 + + // x is 10.0 + // z is 1210.0 + + vec4 v = vec4(1.0, 2.0, 3.0, 4.0); + v.y = v.z--; // (1,3,2,4) + v.x = --v.w; // (3,3,2,3) + + gl_FragColor = z * v;// (3630.0, 3630.0, 2420.0, 3630.0) +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.pushConstant.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.pushConstant.vert new file mode 100644 index 0000000..b1721bc --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.pushConstant.vert @@ -0,0 +1,17 @@ +#version 400 + +layout(push_constant) uniform Material { + int kind; + float fa[3]; +} matInst; + +out vec4 color; + +void main() +{ + switch (matInst.kind) { + case 1: color = vec4(0.2); break; + case 2: color = vec4(0.5); break; + default: color = vec4(0.0); break; + } +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.pushConstantAnon.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.pushConstantAnon.vert new file mode 100644 index 0000000..c4438b7 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.pushConstantAnon.vert @@ -0,0 +1,17 @@ +#version 400 + +layout(push_constant) uniform Material { + int kind; + float fa[3]; +}; + +out vec4 color; + +void main() +{ + switch (kind) { + case 1: color = vec4(0.2); break; + case 2: color = vec4(0.5); break; + default: color = vec4(fa[1]); break; + } +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.qualifiers.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.qualifiers.vert new file mode 100644 index 0000000..96eb17d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.qualifiers.vert @@ -0,0 +1,19 @@ +#version 430 core + +in vec4 inV; + +centroid out vec4 outVc; +smooth out vec4 outVs; +flat out vec4 outVf; +noperspective out vec4 outVn; + +centroid noperspective out vec4 outVcn; + +void main() +{ + outVc = inV; + outVs = inV; + outVf = inV; + outVn = inV; + outVcn = inV; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.queryL.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.queryL.frag new file mode 100644 index 0000000..6f4ad5c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.queryL.frag @@ -0,0 +1,64 @@ +#version 430 core + +uniform sampler1D samp1D; +uniform isampler2D isamp2D; +uniform usampler2D usamp2D; +uniform isampler3D isamp3D; +uniform usampler3D usamp3D; +uniform samplerCube sampCube; +uniform isamplerCube isampCube; +uniform isampler1DArray isamp1DA; +uniform sampler2DArray samp2DA; +uniform usampler2DArray usamp2DA; +uniform isamplerCubeArray isampCubeA; +uniform usamplerCubeArray usampCubeA; + +uniform sampler1DShadow samp1Ds; +uniform sampler2DShadow samp2Ds; +uniform samplerCubeShadow sampCubes; +uniform sampler1DArrayShadow samp1DAs; +uniform sampler2DArrayShadow samp2DAs; +uniform samplerCubeArrayShadow sampCubeAs; + +uniform samplerBuffer sampBuf; +uniform sampler2DRect sampRect; + +void main() +{ + vec2 lod; + float pf; + vec2 pf2; + vec3 pf3; + + lod = textureQueryLod(samp1D, pf); + lod += textureQueryLod(isamp2D, pf2); + lod += textureQueryLod(usamp3D, pf3); + lod += textureQueryLod(sampCube, pf3); + lod += textureQueryLod(isamp1DA, pf); + lod += textureQueryLod(usamp2DA, pf2); + lod += textureQueryLod(isampCubeA, pf3); + + lod += textureQueryLod(samp1Ds, pf); + lod += textureQueryLod(samp2Ds, pf2); + lod += textureQueryLod(sampCubes, pf3); + lod += textureQueryLod(samp1DAs, pf); + lod += textureQueryLod(samp2DAs, pf2); + lod += textureQueryLod(sampCubeAs, pf3); + + int levels; + + levels = textureQueryLevels(samp1D); + levels += textureQueryLevels(usamp2D); + levels += textureQueryLevels(isamp3D); + levels += textureQueryLevels(isampCube); + levels += textureQueryLevels(isamp1DA); + levels += textureQueryLevels(samp2DA); + levels += textureQueryLevels(usampCubeA); + + levels = textureQueryLevels(samp1Ds); + levels += textureQueryLevels(samp2Ds); + levels += textureQueryLevels(sampCubes); + levels += textureQueryLevels(samp1DAs); + levels += textureQueryLevels(samp2DAs); + levels += textureQueryLevels(sampCubeAs); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.register.autoassign-2.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.register.autoassign-2.frag new file mode 100644 index 0000000..05c4925 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.register.autoassign-2.frag @@ -0,0 +1,15 @@ + +SamplerState g_tSamp : register(s0); + +Texture2D g_tScene[2] : register(t0); + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; +}; + +void main(out PS_OUTPUT psout) +{ + psout.Color = g_tScene[0].Sample(g_tSamp, float2(0.3,0.4)) + + g_tScene[1].Sample(g_tSamp, float2(0.3,0.4)); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.register.autoassign.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.register.autoassign.frag new file mode 100644 index 0000000..0d6f0b2 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.register.autoassign.frag @@ -0,0 +1,71 @@ + +SamplerState g_sSamp1 : register(s0); +SamplerState g_sSamp2; +SamplerState g_sSamp3[2] : register(s2); +SamplerState g_sSamp4[3]; +SamplerState g_sSamp5; + +SamplerState g_sSamp_unused1; +SamplerState g_sSamp_unused2; + +Texture1D g_tTex1 : register(t1); +const uniform Texture1D g_tTex2; +Texture1D g_tTex3[2] : register(t3); +Texture1D g_tTex4[3]; +Texture1D g_tTex5; + +Texture1D g_tTex_unused1 : register(t0); +Texture1D g_tTex_unused2 : register(t2); +Texture1D g_tTex_unused3; + +struct MyStruct_t { + int a; + float b; + float3 c; +}; + +uniform MyStruct_t mystruct : register(b4); + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; +}; + +uniform float4 myfloat4_a; +uniform float4 myfloat4_b; +uniform int4 myint4_a; + +float4 Func1() +{ + return + g_tTex1 . Sample(g_sSamp1, 0.1) + + g_tTex2 . Sample(g_sSamp2, 0.2) + + g_tTex3[0] . Sample(g_sSamp3[0], 0.3) + + g_tTex3[1] . Sample(g_sSamp3[1], 0.3) + + g_tTex4[1] . Sample(g_sSamp4[1], 0.4) + + g_tTex4[2] . Sample(g_sSamp4[2], 0.4) + + g_tTex5 . Sample(g_sSamp5, 0.5) + + mystruct.c[1]; +} + +float4 Func2() +{ + return + g_tTex1 . Sample(g_sSamp1, 0.1) + + g_tTex3[1] . Sample(g_sSamp3[1], 0.3); +} + +// Not called from entry point: +float4 Func2_unused() +{ + return + g_tTex_unused1 . Sample(g_sSamp_unused1, 1.1) + + g_tTex_unused2 . Sample(g_sSamp_unused2, 1.2); +} + +PS_OUTPUT main_ep() +{ + PS_OUTPUT psout; + psout.Color = Func1() + Func2(); + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.register.autoassign.rangetest.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.register.autoassign.rangetest.frag new file mode 100644 index 0000000..314c8e9 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.register.autoassign.rangetest.frag @@ -0,0 +1,15 @@ + +SamplerState g_tSamp : register(s5); + +Texture2D g_tScene[2] : register(t5); + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; +}; + +void main(out PS_OUTPUT psout) +{ + psout.Color = g_tScene[0].Sample(g_tSamp, float2(0.3, 0.3)) + + g_tScene[1].Sample(g_tSamp, float2(0.3, 0.3)); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.register.noautoassign.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.register.noautoassign.frag new file mode 100644 index 0000000..0d6f0b2 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.register.noautoassign.frag @@ -0,0 +1,71 @@ + +SamplerState g_sSamp1 : register(s0); +SamplerState g_sSamp2; +SamplerState g_sSamp3[2] : register(s2); +SamplerState g_sSamp4[3]; +SamplerState g_sSamp5; + +SamplerState g_sSamp_unused1; +SamplerState g_sSamp_unused2; + +Texture1D g_tTex1 : register(t1); +const uniform Texture1D g_tTex2; +Texture1D g_tTex3[2] : register(t3); +Texture1D g_tTex4[3]; +Texture1D g_tTex5; + +Texture1D g_tTex_unused1 : register(t0); +Texture1D g_tTex_unused2 : register(t2); +Texture1D g_tTex_unused3; + +struct MyStruct_t { + int a; + float b; + float3 c; +}; + +uniform MyStruct_t mystruct : register(b4); + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; +}; + +uniform float4 myfloat4_a; +uniform float4 myfloat4_b; +uniform int4 myint4_a; + +float4 Func1() +{ + return + g_tTex1 . Sample(g_sSamp1, 0.1) + + g_tTex2 . Sample(g_sSamp2, 0.2) + + g_tTex3[0] . Sample(g_sSamp3[0], 0.3) + + g_tTex3[1] . Sample(g_sSamp3[1], 0.3) + + g_tTex4[1] . Sample(g_sSamp4[1], 0.4) + + g_tTex4[2] . Sample(g_sSamp4[2], 0.4) + + g_tTex5 . Sample(g_sSamp5, 0.5) + + mystruct.c[1]; +} + +float4 Func2() +{ + return + g_tTex1 . Sample(g_sSamp1, 0.1) + + g_tTex3[1] . Sample(g_sSamp3[1], 0.3); +} + +// Not called from entry point: +float4 Func2_unused() +{ + return + g_tTex_unused1 . Sample(g_sSamp_unused1, 1.1) + + g_tTex_unused2 . Sample(g_sSamp_unused2, 1.2); +} + +PS_OUTPUT main_ep() +{ + PS_OUTPUT psout; + psout.Color = Func1() + Func2(); + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.rw.autoassign.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.rw.autoassign.frag new file mode 100644 index 0000000..5c7d0d3 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.rw.autoassign.frag @@ -0,0 +1,18 @@ + +RWTexture1D g_tTex1df1; +RWBuffer g_tBuf1du1; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; +}; + +PS_OUTPUT main() +{ + float r00 = g_tTex1df1[0]; + uint r01 = g_tBuf1du1[0]; + + PS_OUTPUT psout; + psout.Color = 0; + return psout; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.sampleMaskOverrideCoverage.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.sampleMaskOverrideCoverage.frag new file mode 100644 index 0000000..dd84062 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.sampleMaskOverrideCoverage.frag @@ -0,0 +1,7 @@ +#version 450 +#extension GL_NV_sample_mask_override_coverage : enable +in vec4 color; +layout(override_coverage) out int gl_SampleMask[]; +void main() { + gl_SampleMask[0] = int(0xFFFFFFFF); +} \ No newline at end of file diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.separate.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.separate.frag new file mode 100644 index 0000000..21e5db3 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.separate.frag @@ -0,0 +1,95 @@ +#version 400 + +uniform sampler s; +uniform samplerShadow sShadow; +uniform sampler sA[4]; +uniform texture2D t2d; +uniform texture3D t3d[4]; +flat in int i; + +out vec4 color; + +void main() +{ + color = texture(sampler2D(t2d, s), vec2(0.5)); + color += texture(sampler3D(t3d[i], sA[2]), vec3(0.5)); + color += texture(sampler2D(t2d, s), vec2(0.5)); +} + +uniform texture2D tex2D; +uniform textureCube texCube; +uniform textureCubeArray texCubeArray; +uniform itextureCubeArray itexCubeArray; +uniform utextureCubeArray utexCubeArray; +uniform itexture1DArray itex1DArray; +uniform utexture1D utex1D; +uniform itexture1D itex1D; +uniform utexture1DArray utex1DArray; +uniform textureBuffer texBuffer; +uniform texture2DArray tex2DArray; +uniform itexture2D itex2D; +uniform itexture3D itex3D; +uniform itextureCube itexCube; +uniform itexture2DArray itex2DArray; +uniform utexture2D utex2D; +uniform utexture3D utex3D; +uniform utextureCube utexCube; +uniform utexture2DArray utex2DArray; +uniform itexture2DRect itex2DRect; +uniform utexture2DRect utex2DRect; +uniform itextureBuffer itexBuffer; +uniform utextureBuffer utexBuffer; +uniform texture2DMS tex2DMS; +uniform itexture2DMS itex2DMS; +uniform utexture2DMS utex2DMS; +uniform texture2DMSArray tex2DMSArray; +uniform itexture2DMSArray itex2DMSArray; +uniform utexture2DMSArray utex2DMSArray; +uniform texture1D tex1D; +uniform texture3D tex3D; +uniform texture2DRect tex2DRect; +uniform texture1DArray tex1DArray; + +void foo() +{ + sampler2D (tex2D, s); + samplerCube (texCube, s); + samplerCubeArray (texCubeArray, s); + samplerCubeArrayShadow (texCubeArray, sShadow); + isamplerCubeArray (itexCubeArray, s); + usamplerCubeArray (utexCubeArray, s); + sampler1DArrayShadow (tex1DArray, sShadow); + isampler1DArray (itex1DArray, s); + usampler1D (utex1D, s); + isampler1D (itex1D, s); + usampler1DArray (utex1DArray, s); + samplerBuffer (texBuffer, s); + samplerCubeShadow (texCube, sShadow); + sampler2DArray (tex2DArray, s); + sampler2DArrayShadow (tex2DArray, sShadow); + isampler2D (itex2D, s); + isampler3D (itex3D, s); + isamplerCube (itexCube, s); + isampler2DArray (itex2DArray, s); + usampler2D (utex2D, s); + usampler3D (utex3D, s); + usamplerCube (utexCube, s); + usampler2DArray (utex2DArray, s); + isampler2DRect (itex2DRect, s); + usampler2DRect (utex2DRect, s); + isamplerBuffer (itexBuffer, s); + usamplerBuffer (utexBuffer, s); + sampler2DMS (tex2DMS, s); + isampler2DMS (itex2DMS, s); + usampler2DMS (utex2DMS, s); + sampler2DMSArray (tex2DMSArray, s); + isampler2DMSArray (itex2DMSArray, s); + usampler2DMSArray (utex2DMSArray, s); + sampler1D (tex1D, s); + sampler1DShadow (tex1D, sShadow); + sampler3D (tex3D, s); + sampler2DShadow (tex2D, sShadow); + sampler2DRect (tex2DRect, s); + sampler2DRectShadow (tex2DRect, sShadow); + sampler1DArray (tex1DArray, s); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.set.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.set.vert new file mode 100644 index 0000000..d211ef1 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.set.vert @@ -0,0 +1,14 @@ +#version 450 + +layout(set = 4, binding = 7) uniform sampler2D samp2D; + +layout(set = 0, binding = 8) buffer setBuf { + vec4 color; +} setBufInst; + +out vec4 color; + +void main() +{ + color = setBufInst.color; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.shaderBallot.comp b/3rdparty/bgfx/3rdparty/glslang/Test/spv.shaderBallot.comp new file mode 100644 index 0000000..20059b1 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.shaderBallot.comp @@ -0,0 +1,59 @@ +#version 450 + +#extension GL_ARB_gpu_shader_int64: enable +#extension GL_ARB_shader_ballot: enable + +layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) in; + +layout(binding = 0) buffer Buffers +{ + vec4 f4; + ivec4 i4; + uvec4 u4; +} data[4]; + +void main() +{ + uint invocation = (gl_SubGroupInvocationARB + gl_SubGroupSizeARB) % 4; + + uint64_t relMask = gl_SubGroupEqMaskARB + + gl_SubGroupGeMaskARB + + gl_SubGroupGtMaskARB + + gl_SubGroupLeMaskARB + + gl_SubGroupLtMaskARB; + + if (relMask == ballotARB(true)) + { + data[invocation].f4.x = readInvocationARB(data[0].f4.x, invocation); + data[invocation].f4.xy = readInvocationARB(data[1].f4.xy, invocation); + data[invocation].f4.xyz = readInvocationARB(data[2].f4.xyz, invocation); + data[invocation].f4 = readInvocationARB(data[3].f4, invocation); + + data[invocation].i4.x = readInvocationARB(data[0].i4.x, invocation); + data[invocation].i4.xy = readInvocationARB(data[1].i4.xy, invocation); + data[invocation].i4.xyz = readInvocationARB(data[2].i4.xyz, invocation); + data[invocation].i4 = readInvocationARB(data[3].i4, invocation); + + data[invocation].u4.x = readInvocationARB(data[0].u4.x, invocation); + data[invocation].u4.xy = readInvocationARB(data[1].u4.xy, invocation); + data[invocation].u4.xyz = readInvocationARB(data[2].u4.xyz, invocation); + data[invocation].u4 = readInvocationARB(data[3].u4, invocation); + } + else + { + data[invocation].f4.x = readFirstInvocationARB(data[0].f4.x); + data[invocation].f4.xy = readFirstInvocationARB(data[1].f4.xy); + data[invocation].f4.xyz = readFirstInvocationARB(data[2].f4.xyz); + data[invocation].f4 = readFirstInvocationARB(data[3].f4); + + data[invocation].i4.x = readFirstInvocationARB(data[0].i4.x); + data[invocation].i4.xy = readFirstInvocationARB(data[1].i4.xy); + data[invocation].i4.xyz = readFirstInvocationARB(data[2].i4.xyz); + data[invocation].i4 = readFirstInvocationARB(data[3].i4); + + data[invocation].u4.x = readFirstInvocationARB(data[0].u4.x); + data[invocation].u4.xy = readFirstInvocationARB(data[1].u4.xy); + data[invocation].u4.xyz = readFirstInvocationARB(data[2].u4.xyz); + data[invocation].u4 = readFirstInvocationARB(data[3].u4); + } +} \ No newline at end of file diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.shaderBallotAMD.comp b/3rdparty/bgfx/3rdparty/glslang/Test/spv.shaderBallotAMD.comp new file mode 100644 index 0000000..d6d370a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.shaderBallotAMD.comp @@ -0,0 +1,165 @@ +#version 450 + +#extension GL_ARB_gpu_shader_int64: enable +#extension GL_AMD_gpu_shader_half_float: enable +#extension GL_AMD_shader_ballot: enable + +layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) in; + +layout(binding = 0) buffer Buffers +{ + int i; + uvec2 uv; + vec3 fv; + dvec4 dv; + int64_t i64; + u64vec2 u64v; + f16vec3 f16v; +}; + +void main() +{ + i = minInvocationsAMD(i); + uv = minInvocationsAMD(uv); + fv = minInvocationsAMD(fv); + dv = minInvocationsAMD(dv); + i64 = minInvocationsAMD(i64); + u64v = minInvocationsAMD(u64v); + f16v = minInvocationsAMD(f16v); + + i = maxInvocationsAMD(i); + uv = maxInvocationsAMD(uv); + fv = maxInvocationsAMD(fv); + dv = maxInvocationsAMD(dv); + i64 = maxInvocationsAMD(i64); + u64v = maxInvocationsAMD(u64v); + f16v = maxInvocationsAMD(f16v); + + i = addInvocationsAMD(i); + uv = addInvocationsAMD(uv); + fv = addInvocationsAMD(fv); + dv = addInvocationsAMD(dv); + i64 = addInvocationsAMD(i64); + u64v = addInvocationsAMD(u64v); + f16v = addInvocationsAMD(f16v); + + i = minInvocationsNonUniformAMD(i); + uv = minInvocationsNonUniformAMD(uv); + fv = minInvocationsNonUniformAMD(fv); + dv = minInvocationsNonUniformAMD(dv); + i64 = minInvocationsNonUniformAMD(i64); + u64v = minInvocationsNonUniformAMD(u64v); + f16v = minInvocationsNonUniformAMD(f16v); + + i = maxInvocationsNonUniformAMD(i); + uv = maxInvocationsNonUniformAMD(uv); + fv = maxInvocationsNonUniformAMD(fv); + dv = maxInvocationsNonUniformAMD(dv); + i64 = maxInvocationsNonUniformAMD(i64); + u64v = maxInvocationsNonUniformAMD(u64v); + f16v = maxInvocationsNonUniformAMD(f16v); + + i = addInvocationsNonUniformAMD(i); + uv = addInvocationsNonUniformAMD(uv); + fv = addInvocationsNonUniformAMD(fv); + dv = addInvocationsNonUniformAMD(dv); + i64 = addInvocationsNonUniformAMD(i64); + u64v = addInvocationsNonUniformAMD(u64v); + f16v = addInvocationsNonUniformAMD(f16v); + + i = minInvocationsInclusiveScanAMD(i); + uv = minInvocationsInclusiveScanAMD(uv); + fv = minInvocationsInclusiveScanAMD(fv); + dv = minInvocationsInclusiveScanAMD(dv); + i64 = minInvocationsInclusiveScanAMD(i64); + u64v = minInvocationsInclusiveScanAMD(u64v); + f16v = minInvocationsInclusiveScanAMD(f16v); + + i = maxInvocationsInclusiveScanAMD(i); + uv = maxInvocationsInclusiveScanAMD(uv); + fv = maxInvocationsInclusiveScanAMD(fv); + dv = maxInvocationsInclusiveScanAMD(dv); + i64 = maxInvocationsInclusiveScanAMD(i64); + u64v = maxInvocationsInclusiveScanAMD(u64v); + f16v = maxInvocationsInclusiveScanAMD(f16v); + + i = addInvocationsInclusiveScanAMD(i); + uv = addInvocationsInclusiveScanAMD(uv); + fv = addInvocationsInclusiveScanAMD(fv); + dv = addInvocationsInclusiveScanAMD(dv); + i64 = addInvocationsInclusiveScanAMD(i64); + u64v = addInvocationsInclusiveScanAMD(u64v); + f16v = addInvocationsInclusiveScanAMD(f16v); + + i = minInvocationsExclusiveScanAMD(i); + uv = minInvocationsExclusiveScanAMD(uv); + fv = minInvocationsExclusiveScanAMD(fv); + dv = minInvocationsExclusiveScanAMD(dv); + i64 = minInvocationsExclusiveScanAMD(i64); + u64v = minInvocationsExclusiveScanAMD(u64v); + f16v = minInvocationsExclusiveScanAMD(f16v); + + i = maxInvocationsExclusiveScanAMD(i); + uv = maxInvocationsExclusiveScanAMD(uv); + fv = maxInvocationsExclusiveScanAMD(fv); + dv = maxInvocationsExclusiveScanAMD(dv); + i64 = maxInvocationsExclusiveScanAMD(i64); + u64v = maxInvocationsExclusiveScanAMD(u64v); + f16v = maxInvocationsExclusiveScanAMD(f16v); + + i = addInvocationsExclusiveScanAMD(i); + uv = addInvocationsExclusiveScanAMD(uv); + fv = addInvocationsExclusiveScanAMD(fv); + dv = addInvocationsExclusiveScanAMD(dv); + i64 = addInvocationsExclusiveScanAMD(i64); + u64v = addInvocationsExclusiveScanAMD(u64v); + f16v = addInvocationsExclusiveScanAMD(f16v); + + i = minInvocationsInclusiveScanNonUniformAMD(i); + uv = minInvocationsInclusiveScanNonUniformAMD(uv); + fv = minInvocationsInclusiveScanNonUniformAMD(fv); + dv = minInvocationsInclusiveScanNonUniformAMD(dv); + i64 = minInvocationsInclusiveScanNonUniformAMD(i64); + u64v = minInvocationsInclusiveScanNonUniformAMD(u64v); + f16v = minInvocationsInclusiveScanNonUniformAMD(f16v); + + i = maxInvocationsInclusiveScanNonUniformAMD(i); + uv = maxInvocationsInclusiveScanNonUniformAMD(uv); + fv = maxInvocationsInclusiveScanNonUniformAMD(fv); + dv = maxInvocationsInclusiveScanNonUniformAMD(dv); + i64 = maxInvocationsInclusiveScanNonUniformAMD(i64); + u64v = maxInvocationsInclusiveScanNonUniformAMD(u64v); + f16v = maxInvocationsInclusiveScanNonUniformAMD(f16v); + + i = addInvocationsInclusiveScanNonUniformAMD(i); + uv = addInvocationsInclusiveScanNonUniformAMD(uv); + fv = addInvocationsInclusiveScanNonUniformAMD(fv); + dv = addInvocationsInclusiveScanNonUniformAMD(dv); + i64 = addInvocationsInclusiveScanNonUniformAMD(i64); + u64v = addInvocationsInclusiveScanNonUniformAMD(u64v); + f16v = addInvocationsInclusiveScanNonUniformAMD(f16v); + + i = minInvocationsExclusiveScanNonUniformAMD(i); + uv = minInvocationsExclusiveScanNonUniformAMD(uv); + fv = minInvocationsExclusiveScanNonUniformAMD(fv); + dv = minInvocationsExclusiveScanNonUniformAMD(dv); + i64 = minInvocationsExclusiveScanNonUniformAMD(i64); + u64v = minInvocationsExclusiveScanNonUniformAMD(u64v); + f16v = minInvocationsExclusiveScanNonUniformAMD(f16v); + + i = maxInvocationsExclusiveScanNonUniformAMD(i); + uv = maxInvocationsExclusiveScanNonUniformAMD(uv); + fv = maxInvocationsExclusiveScanNonUniformAMD(fv); + dv = maxInvocationsExclusiveScanNonUniformAMD(dv); + i64 = maxInvocationsExclusiveScanNonUniformAMD(i64); + u64v = maxInvocationsExclusiveScanNonUniformAMD(u64v); + f16v = maxInvocationsExclusiveScanNonUniformAMD(f16v); + + i = addInvocationsExclusiveScanNonUniformAMD(i); + uv = addInvocationsExclusiveScanNonUniformAMD(uv); + fv = addInvocationsExclusiveScanNonUniformAMD(fv); + dv = addInvocationsExclusiveScanNonUniformAMD(dv); + i64 = addInvocationsExclusiveScanNonUniformAMD(i64); + u64v = addInvocationsExclusiveScanNonUniformAMD(u64v); + f16v = addInvocationsExclusiveScanNonUniformAMD(f16v); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.shaderDrawParams.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.shaderDrawParams.vert new file mode 100644 index 0000000..15ae295 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.shaderDrawParams.vert @@ -0,0 +1,16 @@ +#version 450 core + +#extension GL_ARB_shader_draw_parameters: enable + +layout(binding = 0) uniform Block +{ + vec4 pos[2][4]; +} block; + +void main() +{ + if ((gl_BaseVertexARB > 0) || (gl_BaseInstanceARB > 0)) + gl_Position = block.pos[0][gl_DrawIDARB % 4]; + else + gl_Position = block.pos[1][gl_DrawIDARB % 4]; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.shaderGroupVote.comp b/3rdparty/bgfx/3rdparty/glslang/Test/spv.shaderGroupVote.comp new file mode 100644 index 0000000..c0b1fe7 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.shaderGroupVote.comp @@ -0,0 +1,21 @@ +#version 450 + +#extension GL_ARB_shader_group_vote : enable + +layout(local_size_x = 4, local_size_y = 4) in; + +layout(std430, binding = 0) buffer Buffers +{ + bool b; +}; + +void main() +{ + bool b1 = b; + + b1 = anyInvocationARB(b1); + b1 = allInvocationsARB(b1); + b1 = allInvocationsEqualARB(b1); + + b = b1; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.shiftOps.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.shiftOps.frag new file mode 100644 index 0000000..7fb937f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.shiftOps.frag @@ -0,0 +1,18 @@ +#version 450 + +flat in int i1; +flat in uint u1; +flat in ivec3 i3; +flat in uvec3 u3; + +out ivec3 icolor; +out uvec3 ucolor; + +void main() +{ + icolor = i3 << u1; + icolor <<= 4u; + + ucolor = u3 >> i1; + ucolor >>= 5; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.shortCircuit.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.shortCircuit.frag new file mode 100755 index 0000000..4a62641 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.shortCircuit.frag @@ -0,0 +1,50 @@ +#version 400 + +flat in ivec4 uiv4; +in vec4 uv4; +bool ub; +bool uba; +bvec4 ub41, ub42; +in float uf; +flat in int ui; + +out float of1; +out vec4 of4; + +bool foo() { ++of1; return of1 > 10.0; } + +void main() +{ + of1 = 0.0; + of4 = vec4(0.0); + + if (ub || ui > 2) // not worth short circuiting + ++of1; + + if (ub && !uba) // not worth short circuiting + ++of1; + + if (ub || foo()) // must short circuit + ++of1; + + if (ub && foo()) // must short circuit + ++of1; + + if (foo() || ub) // not worth short circuiting + ++of1; + + if (foo() && ub) // not worth short circuiting + ++of1; + + if (ub || ++of1 > 1.0) // must short circuit + ++of4; + + if (++of1 > 1.0 || ub) // not worth short circuiting + ++of4; + + if (ub || sin(uf) * 4.0 > of1) // worth short circuiting + ++of1; + + if (ub && sin(uf) * 4.0 > of1) // worth short circuiting + ++of1; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.simpleFunctionCall.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.simpleFunctionCall.frag new file mode 100644 index 0000000..496bb93 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.simpleFunctionCall.frag @@ -0,0 +1,13 @@ +#version 150 + +in vec4 BaseColor; + +vec4 foo() +{ + return BaseColor; +} + +void main() +{ + gl_FragColor = foo(); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.simpleMat.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.simpleMat.vert new file mode 100644 index 0000000..897a898 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.simpleMat.vert @@ -0,0 +1,19 @@ +#version 330 + +varying mat4 mvp; + +in vec4 v; +in mat3 am3; +in mat4 arraym[3]; + +out float f; +out vec4 glPos; +//out mat4 mout[2]; + +void main() +{ + //needs complex output blocks to work: gl_Position = mvp * v; + glPos = mvp * v; + f = am3[2][1] + arraym[1][2][3]; + //mout[1] = arraym[2]; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.sparseTexture.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.sparseTexture.frag new file mode 100644 index 0000000..c995ee2 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.sparseTexture.frag @@ -0,0 +1,91 @@ +#version 450 +#extension GL_ARB_sparse_texture2: enable + +uniform sampler2D s2D; +uniform sampler3D s3D; +uniform sampler2DShadow s2DShadow; +uniform samplerCubeShadow sCubeShadow; +uniform sampler2DArrayShadow s2DArrayShadow; +uniform sampler2DRectShadow s2DRectShadow; +uniform samplerCubeArrayShadow sCubeArrayShadow; +uniform sampler2DMS s2DMS; + +uniform isamplerCube isCube; +uniform isampler2DArray is2DArray; + +uniform usamplerCubeArray usCubeArray; +uniform usampler2DRect us2DRect; + +layout(rgba32f) uniform image2D i2D; +layout(rgba32i) uniform iimage3D ii3D; +layout(rgba32f) uniform image2DMS i2DMS; + +in vec2 c2; +in vec3 c3; +in vec4 c4; + +in flat ivec2 ic2; +in flat ivec3 ic3; + +in flat ivec2 offsets[4]; + +out vec4 outColor; + +void main() +{ + int resident = 0; + vec4 texel = vec4(0.0); + ivec4 itexel = ivec4(0); + uvec4 utexel = uvec4(0); + + resident |= sparseTextureARB(s2D, c2, texel); + resident |= sparseTextureARB(s3D, c3, texel, 2.0); + resident |= sparseTextureARB(isCube, c3, itexel); + resident |= sparseTextureARB(s2DShadow, c3, texel.x); + resident |= sparseTextureARB(sCubeArrayShadow, c4, 1.0, texel.x); + + resident |= sparseTextureLodARB(s2D, c2, 2.0, texel); + resident |= sparseTextureLodARB(usCubeArray, c4, 1.0, utexel); + resident |= sparseTextureLodARB(s2DShadow, c3, 2.0, texel.y); + + resident |= sparseTextureOffsetARB(s3D, c3, ivec3(2), texel, 2.0); + resident |= sparseTextureOffsetARB(us2DRect, c2, ivec2(3), utexel); + resident |= sparseTextureOffsetARB(s2DArrayShadow, c4, ivec2(5), texel.z); + + resident |= sparseTexelFetchARB(s2D, ivec2(c2), 2, texel); + resident |= sparseTexelFetchARB(us2DRect, ivec2(c2), utexel); + resident |= sparseTexelFetchARB(s2DMS, ivec2(c2), 4, texel); + + resident |= sparseTexelFetchOffsetARB(s3D, ivec3(c3), 2, ivec3(4), texel); + resident |= sparseTexelFetchOffsetARB(us2DRect, ivec2(c2), ivec2(3), utexel); + + resident |= sparseTextureLodOffsetARB(s2D, c2, 2.0, ivec2(5), texel); + resident |= sparseTextureLodOffsetARB(is2DArray, c3, 2.0, ivec2(6), itexel); + resident |= sparseTextureLodOffsetARB(s2DShadow, c3, 2.0, ivec2(7), texel.z); + + resident |= sparseTextureGradARB(s3D, c3, c3, c3, texel); + resident |= sparseTextureGradARB(sCubeShadow, c4, c3, c3, texel.y); + resident |= sparseTextureGradARB(usCubeArray, c4, c3, c3, utexel); + + resident |= sparseTextureGradOffsetARB(s2D, c2, c2, c2, ivec2(5), texel); + resident |= sparseTextureGradOffsetARB(s2DRectShadow, c3, c2, c2, ivec2(6), texel.w); + resident |= sparseTextureGradOffsetARB(is2DArray, c3, c2, c2, ivec2(2), itexel); + + resident |= sparseTextureGatherARB(s2D, c2, texel); + resident |= sparseTextureGatherARB(is2DArray, c3, itexel, 2); + resident |= sparseTextureGatherARB(s2DArrayShadow, c3, 2.0, texel); + + resident |= sparseTextureGatherOffsetARB(s2D, c2, ivec2(4), texel); + resident |= sparseTextureGatherOffsetARB(is2DArray, c3, ivec2(5), itexel, 2); + resident |= sparseTextureGatherOffsetARB(s2DRectShadow, c2, 2.0, ivec2(7), texel); + + resident |= sparseTextureGatherOffsetsARB(s2D, c2, offsets, texel); + resident |= sparseTextureGatherOffsetsARB(is2DArray, c3, offsets, itexel, 2); + resident |= sparseTextureGatherOffsetsARB(s2DRectShadow, c2, 2.0, offsets, texel); + + resident |= sparseImageLoadARB(i2D, ic2, texel); + resident |= sparseImageLoadARB(ii3D, ic3, itexel); + resident |= sparseImageLoadARB(i2DMS, ic2, 3, texel); + + outColor = sparseTexelsResidentARB(resident) ? texel : vec4(itexel) + vec4(utexel); +} \ No newline at end of file diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.sparseTextureClamp.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.sparseTextureClamp.frag new file mode 100644 index 0000000..9731793 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.sparseTextureClamp.frag @@ -0,0 +1,70 @@ +#version 450 +#extension GL_ARB_sparse_texture_clamp: enable + +uniform sampler2D s2D; +uniform sampler3D s3D; +uniform sampler2DShadow s2DShadow; +uniform samplerCubeShadow sCubeShadow; +uniform sampler2DArrayShadow s2DArrayShadow; +uniform sampler2DRectShadow s2DRectShadow; +uniform samplerCubeArrayShadow sCubeArrayShadow; + +uniform isamplerCube isCube; +uniform isampler2DArray is2DArray; + +uniform usamplerCubeArray usCubeArray; +uniform usampler2DRect us2DRect; + +in vec2 c2; +in vec3 c3; +in vec4 c4; + +in float lodClamp; + +out vec4 outColor; + +void main() +{ + int resident = 0; + vec4 texel = vec4(0.0); + ivec4 itexel = ivec4(0); + uvec4 utexel = uvec4(0); + + resident |= sparseTextureClampARB(s2D, c2, lodClamp, texel); + resident |= sparseTextureClampARB(s3D, c3, lodClamp, texel, 2.0); + resident |= sparseTextureClampARB(isCube, c3, lodClamp, itexel); + resident |= sparseTextureClampARB(s2DShadow, c3, lodClamp, texel.x); + resident |= sparseTextureClampARB(sCubeArrayShadow, c4, 1.0, lodClamp, texel.x); + + texel += textureClampARB(s2D, c2, lodClamp); + texel += textureClampARB(s3D, c3, lodClamp, 2.0); + itexel += textureClampARB(isCube, c3, lodClamp); + texel.x += textureClampARB(s2DShadow, c3, lodClamp); + texel.x += textureClampARB(sCubeArrayShadow, c4, 1.0, lodClamp); + + resident |= sparseTextureOffsetClampARB(s3D, c3, ivec3(2), lodClamp, texel, 2.0); + resident |= sparseTextureOffsetClampARB(us2DRect, c2, ivec2(3), lodClamp, utexel); + resident |= sparseTextureOffsetClampARB(s2DArrayShadow, c4, ivec2(5), lodClamp, texel.z); + + texel += textureOffsetClampARB(s3D, c3, ivec3(2), lodClamp, 2.0); + utexel += textureOffsetClampARB(us2DRect, c2, ivec2(3), lodClamp); + texel.z += textureOffsetClampARB(s2DArrayShadow, c4, ivec2(5), lodClamp); + + resident |= sparseTextureGradClampARB(s3D, c3, c3, c3, lodClamp, texel); + resident |= sparseTextureGradClampARB(sCubeShadow, c4, c3, c3, lodClamp, texel.y); + resident |= sparseTextureGradClampARB(usCubeArray, c4, c3, c3, lodClamp, utexel); + + texel += textureGradClampARB(s3D, c3, c3, c3, lodClamp); + texel.y += textureGradClampARB(sCubeShadow, c4, c3, c3, lodClamp); + utexel += textureGradClampARB(usCubeArray, c4, c3, c3, lodClamp); + + resident |= sparseTextureGradOffsetClampARB(s2D, c2, c2, c2, ivec2(5), lodClamp, texel); + resident |= sparseTextureGradOffsetClampARB(s2DRectShadow, c3, c2, c2, ivec2(6), lodClamp, texel.w); + resident |= sparseTextureGradOffsetClampARB(is2DArray, c3, c2, c2, ivec2(2), lodClamp, itexel); + + texel += textureGradOffsetClampARB(s2D, c2, c2, c2, ivec2(5), lodClamp); + texel.w += textureGradOffsetClampARB(s2DRectShadow, c3, c2, c2, ivec2(6), lodClamp); + itexel += textureGradOffsetClampARB(is2DArray, c3, c2, c2, ivec2(2), lodClamp); + + outColor = sparseTexelsResidentARB(resident) ? texel : vec4(itexel) + vec4(utexel); +} \ No newline at end of file diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.specConst.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.specConst.vert new file mode 100644 index 0000000..3ea2498 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.specConst.vert @@ -0,0 +1,8 @@ +#version 450 + +layout(constant_id = 11) const int a = 8; + +void main() +{ + gl_Position = vec4(1.0) / a; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.specConstant.comp b/3rdparty/bgfx/3rdparty/glslang/Test/spv.specConstant.comp new file mode 100644 index 0000000..ae8ae19 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.specConstant.comp @@ -0,0 +1,13 @@ +#version 450 + +layout(local_size_x_id = 18, local_size_z_id = 19) in; +layout(local_size_x = 32, local_size_y = 32) in; + +buffer bn { + uint a; +} bi; + +void main() +{ + bi.a = gl_WorkGroupSize.x * gl_WorkGroupSize.y * gl_WorkGroupSize.z; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.specConstant.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.specConstant.vert new file mode 100644 index 0000000..9813bf5 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.specConstant.vert @@ -0,0 +1,51 @@ +#version 400 + +layout(constant_id = 16) const int arraySize = 5; +in vec4 ucol[arraySize]; + +layout(constant_id = 17) const bool spBool = true; +layout(constant_id = 18) const float spFloat = 3.14; +layout(constant_id = 19) const double spDouble = 3.1415926535897932384626433832795; +layout(constant_id = 22) const uint scale = 2; + +layout(constant_id = 24) gl_MaxImageUnits; + +out vec4 color; +out int size; + +// parameter should be considered same type as ucol +void foo(vec4 p[arraySize]); + +void main() +{ + color = ucol[2]; + size = arraySize; + if (spBool) + color *= scale; + color += float(spDouble / spFloat); + + foo(ucol); +} + +layout(constant_id = 116) const int dupArraySize = 12; +in vec4 dupUcol[dupArraySize]; + +layout(constant_id = 117) const bool spDupBool = true; +layout(constant_id = 118) const float spDupFloat = 3.14; +layout(constant_id = 119) const double spDupDouble = 3.1415926535897932384626433832795; +layout(constant_id = 122) const uint dupScale = 2; + +void foo(vec4 p[arraySize]) +{ + color += dupUcol[2]; + size += dupArraySize; + if (spDupBool) + color *= dupScale; + color += float(spDupDouble / spDupFloat); +} + +int builtin_spec_constant() +{ + int result = gl_MaxImageUnits; + return result; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.specConstantComposite.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.specConstantComposite.vert new file mode 100644 index 0000000..d9d07a3 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.specConstantComposite.vert @@ -0,0 +1,98 @@ +#version 450 + +// constant_id specified scalar spec constants +layout(constant_id = 200) const int spec_int = 3; +layout(constant_id = 201) const float spec_float = 3.14; +layout(constant_id = 202) const + double spec_double = 3.1415926535897932384626433832795; +layout(constant_id = 203) const bool spec_bool = true; + +// const float cast_spec_float = float(spec_float); + +// Flat struct +struct flat_struct { + int i; + float f; + double d; + bool b; +}; + +// Nesting struct +struct nesting_struct { + flat_struct nested; + vec4 v; + int i; +}; + +// Expect OpSpecConstantComposite +// Flat struct initializer +//const flat_struct spec_flat_struct_all_spec = {spec_int, spec_float, +// spec_double, spec_bool}; +//const flat_struct spec_flat_struct_partial_spec = {30, 30.14, spec_double, +// spec_bool}; + +// Nesting struct initializer +//const nesting_struct nesting_struct_ctor = { +// {spec_int, spec_float, spec_double, false}, +// vec4(0.1, 0.1, 0.1, 0.1), +// spec_int}; + +// Vector constructor +//const vec4 spec_vec4_all_spec = +// vec4(spec_float, spec_float, spec_float, spec_float); +//const vec4 spec_vec4_partial_spec = +// vec4(spec_float, spec_float, 300.14, 300.14); +//const vec4 spec_vec4_from_one_scalar = vec4(spec_float); + +// Matrix constructor +//const mat2x3 spec_mat2x3 = mat2x3(spec_float, spec_float, spec_float, 1.1, 2.2, 3.3); +//const mat2x3 spec_mat2x3_from_one_scalar = mat2x3(spec_float); + +// Struct nesting constructor +//const nesting_struct spec_nesting_struct_all_spec = { +// spec_flat_struct_all_spec, spec_vec4_all_spec, spec_int}; +//const nesting_struct spec_nesting_struct_partial_spec = { +// spec_flat_struct_partial_spec, spec_vec4_partial_spec, 3000}; + +//const float spec_float_array[5] = {spec_float, spec_float, 1.0, 2.0, 3.0}; +//const int spec_int_array[5] = {spec_int, spec_int, 1, 2, 30}; + +// global_vec4_array_with_spec_length is not a spec constant, but its array +// size is. When calling global_vec4_array_with_spec_length.length(), A +// TIntermSymbol Node should be returned, instead of a TIntermConstantUnion +// node which represents a known constant value. +in vec4 global_vec4_array_with_spec_length[spec_int]; + +out vec4 color; + +void refer_primary_spec_const() { + if (spec_bool) color *= spec_int; +} + +void refer_composite_spec_const() { + //color += spec_vec4_all_spec; + //color -= spec_vec4_partial_spec; +} + +void refer_copmosite_dot_dereference() { + //color *= spec_nesting_struct_all_spec.i; + //color += spec_vec4_all_spec.x; +} + +void refer_composite_bracket_dereference() { + //color -= spec_float_array[1]; + //color /= spec_int_array[spec_int_array[spec_int]]; +} + +int refer_spec_const_array_length() { + int len = global_vec4_array_with_spec_length.length(); + return len; +} + +void declare_spec_const_in_func() { + //const nesting_struct spec_const_declared_in_func = { + // spec_flat_struct_partial_spec, spec_vec4_partial_spec, 10}; + //color /= spec_const_declared_in_func.i; +} + +void main() {} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.specConstantOperations.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.specConstantOperations.vert new file mode 100644 index 0000000..93be12c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.specConstantOperations.vert @@ -0,0 +1,124 @@ +#version 450 + +layout(constant_id = 200) const float sp_float = 3.1415926; +layout(constant_id = 201) const int sp_int = 10; +layout(constant_id = 202) const uint sp_uint = 100; +layout(constant_id = 203) const int sp_sint = -10; +layout(constant_id = 204) const double sp_double = 2.718281828459; + +// +// Scalars +// + +// float <-> double conversion +const float float_from_double = float(sp_double); +const double double_from_float = double(sp_float); + +// uint/int <-> bool conversion +const bool bool_from_int = bool(sp_int); +const bool bool_from_uint = bool(sp_uint); +const int int_from_bool = int(bool_from_int); +const uint uint_from_bool = uint(bool_from_int); + +// uint <-> int +const uint sp_uint_from_sint = uint(sp_sint); +const int sp_sint_from_uint = int(sp_uint); + +// Negate and Not +const int negate_int = -sp_int; +const int not_int = ~sp_int; + +// Add and Subtract +const int sp_int_add_two = sp_int + 2; +const int sp_int_add_two_sub_three = sp_int + 2 - 3; +const int sp_int_add_two_sub_four = sp_int_add_two - 4; + +// Mul, Div and Rem +const int sp_sint_mul_two = sp_sint * 2; +const uint sp_uint_mul_two = sp_uint * 2; +const int sp_sint_mul_two_div_five = sp_sint_mul_two / 5; +const uint sp_uint_mul_two_div_five = sp_uint_mul_two / 5; +const int sp_sint_rem_four = sp_sint % 4; +const uint sp_uint_rem_four = sp_uint % 4; +const int sp_sint_mul_three_div_five = sp_sint * 3 / 5; + +// Shift +const int sp_sint_shift_right_arithmetic = sp_sint >> 10; +const uint sp_uint_shift_right_arithmetic = sp_uint >> 20; +const int sp_sint_shift_left = sp_sint << 1; +const uint sp_uint_shift_left = sp_uint << 2; + +// Bitwise And, Or, Xor +const int sp_sint_or_256 = sp_sint | 0x100; +const uint sp_uint_xor_512 = sp_uint ^ 0x200; + +/* // Scalar comparison */ +const bool sp_int_lt_sp_sint = sp_int < sp_sint; +const bool sp_uint_equal_sp_uint = sp_uint == sp_uint; +const bool sp_int_gt_sp_sint = sp_int > sp_sint; + +// +// Vectors +// +const ivec4 iv = ivec4(20, 30, sp_int, sp_int); +const uvec4 uv = uvec4(sp_uint, sp_uint, -1, -2); +//const vec4 fv = vec4(sp_float, 1.25, sp_float, 1.25); + +// uint/int <-> bool conversion +const bvec4 bv_from_iv = bvec4(iv); +const bvec4 bv_from_uv = bvec4(uv); +const ivec4 iv_from_bv = ivec4(bv_from_iv); +const uvec4 uv_from_bv = uvec4(bv_from_iv); + +// uint <-> int +const uvec4 uv_from_iv = uvec4(iv); +const ivec4 iv_from_uv = ivec4(uv); + +// Negate and Not +const ivec4 not_iv = ~iv; +const ivec4 negate_iv = -iv; + +// Add and Subtract +const ivec4 iv_add_two = iv + 2; +const ivec4 iv_add_two_sub_three = iv + 2 - 3; +const ivec4 iv_add_two_sub_four = iv_add_two_sub_three - 4; + +// Mul, Div and Rem +const ivec4 iv_mul_two = iv * 2; +const ivec4 iv_mul_two_div_five = iv_mul_two / 5; +const ivec4 iv_rem_four = iv % 4; + +// Shift +const ivec4 iv_shift_right_arithmetic = iv >> 10; +const ivec4 iv_shift_left = iv << 2; + +// Bitwise And, Or, Xor +const ivec4 iv_or_1024 = iv | 0x400; +const uvec4 uv_xor_2048 = uv ^ 0x800; + +// Swizzles +const int iv_x = iv.x; +const ivec2 iv_yx = iv.yx; +const ivec3 iv_zyx = iv.zyx; +const ivec4 iv_yzxw = iv.yzxw; + +int non_const_array_size_from_spec_const() { + int array[sp_int + 2]; + for (int i = 0; i < sp_int + 2; i++) { + array[i] = 1023; + } + return array[sp_int + 1]; +} + +// ternary +layout(constant_id = 210) const int a = 4; +layout(constant_id = 211) const int b = 6; +layout(constant_id = 212) const bool c = true; +int ternayArray1[a > b ? a : b]; +const int t1 = c ? 13 : 17; +const int t2 = c ? a : 17; +const int t3 = true ? a : 17; +const int t4 = a > b ? 13 + a : 17 * b; +const vec2 v2 = !c ? vec2(1.0) : vec2(2.0); + +void main() {} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.ssbo.autoassign.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.ssbo.autoassign.frag new file mode 100644 index 0000000..073be45 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.ssbo.autoassign.frag @@ -0,0 +1,24 @@ + +cbuffer TestCB +{ + uint W; + uint H; +}; + +struct BufType +{ + float4 va; + float4 vb; +}; + +StructuredBuffer < BufType > SB0; +RWStructuredBuffer < BufType > SB1; + +float4 main(float4 pos : POS) : SV_Target0 +{ + float4 vTmp = SB0[pos.y * W + pos.x].va + SB0[pos.y * W + pos.x].vb; + + vTmp += SB1[pos.y * W + pos.x].va + SB1[pos.y * W + pos.x].vb; + + return vTmp; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.stereoViewRendering.tesc b/3rdparty/bgfx/3rdparty/glslang/Test/spv.stereoViewRendering.tesc new file mode 100644 index 0000000..62fc956 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.stereoViewRendering.tesc @@ -0,0 +1,18 @@ +#version 450 + +#extension GL_NV_viewport_array2 :require +#extension GL_NV_stereo_view_rendering : require + +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]; + +void main() +{ + gl_out[gl_InvocationID].gl_SecondaryViewportMaskNV[0] = 1; + gl_out[gl_InvocationID].gl_SecondaryPositionNV = gl_in[1].gl_Position; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.stereoViewRendering.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.stereoViewRendering.vert new file mode 100644 index 0000000..fc7d52e --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.stereoViewRendering.vert @@ -0,0 +1,12 @@ +#version 450 + +#extension GL_NV_viewport_array2 :require +#extension GL_NV_stereo_view_rendering : require + +layout (viewport_relative, secondary_view_offset = 2) out highp int gl_Layer; +void main() +{ + gl_SecondaryViewportMaskNV[0] = 1; + gl_SecondaryPositionNV = gl_Position; +} + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.structAssignment.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.structAssignment.frag new file mode 100644 index 0000000..ca95ec3 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.structAssignment.frag @@ -0,0 +1,41 @@ +#version 140 + +precision mediump int; + +uniform sampler2D samp2D; +in mediump vec2 coord; + +struct lunarStruct1 { + int i; + float f; +}; + +struct lunarStruct2 { + int i; + float f; + lunarStruct1 s1_1; +}; + +struct lunarStruct3 { + lunarStruct2 s2_1; + int i; + float f; + lunarStruct1 s1_1; +}; + + +lunarStruct1 foo; +lunarStruct2 foo2; +lunarStruct3 foo3; + +void main() +{ + lunarStruct2 locals2; + + if (foo3.s2_1.i > 0) + locals2 = foo3.s2_1; + else + locals2 = foo2; + + gl_FragColor = locals2.s1_1.f * texture(samp2D, coord); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.structDeref.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.structDeref.frag new file mode 100644 index 0000000..11822cd --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.structDeref.frag @@ -0,0 +1,71 @@ +#version 140 + +uniform sampler2D samp2D; +in vec2 coord; + +struct s0 { + int i; +}; + +struct s00 { + s0 s0_0; +}; + +struct s1 { + int i; + float f; + s0 s0_1; +}; + +struct s2 { + int i; + float f; + s1 s1_1; +}; + +struct s3 { + s2[12] s2_1; + int i; + float f; + s1 s1_1; +}; + + +s0 foo0; +s1 foo1; +s2 foo2; +s3 foo3; + +s00 foo00; + +void main() +{ + s0 locals0; + s2 locals2; + s00 locals00; + + float[6] fArray; + + s1[10] locals1Array; + + if (foo3.s2_1[9].i > 0) { + locals2.f = 1.0; + locals2.s1_1 = s1(0, 1.0, s0(0)); + fArray = float[6]( 0.0, 0.0, 0.0, 0.0, 0.0, 0.0); + locals1Array[6] = foo1; + locals0 = s0(0); + locals00 = s00(s0(0)); + } else { + locals2.f = coord.x; + locals2.s1_1 = s1(1, coord.y, foo0); + fArray = float[6]( 0.0, 1.0, 2.0, 3.0, 4.0, 5.0); + locals1Array[6] = locals2.s1_1; + locals0 = foo1.s0_1; + locals00 = foo00; + } + + if (locals0.i > 5) + locals0 = locals00.s0_0; + + gl_FragColor = (float(locals0.i) + locals1Array[6].f + fArray[3] + locals2.s1_1.f) * texture(samp2D, coord); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.structure.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.structure.frag new file mode 100644 index 0000000..b81b954 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.structure.frag @@ -0,0 +1,31 @@ +#version 140 +uniform sampler2D samp2D; +in vec2 coord; + +struct lunarStruct1 { + int i; + float f[4]; + vec4 color[5]; +}; + +struct lunarStruct2 { + int i[5]; + float f; + lunarStruct1 s1_1[7]; +}; + +lunarStruct1 foo; +lunarStruct2 foo2[5]; + +void main() +{ + float scale = 0.0; + + if (foo2[3].i[4] > 0) + scale = foo2[3].s1_1[2].color[3].x; + else + scale = foo2[3].s1_1[2].f[3]; + + gl_FragColor = scale * texture(samp2D, coord); +} + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.subpass.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.subpass.frag new file mode 100644 index 0000000..42411d9 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.subpass.frag @@ -0,0 +1,29 @@ +#version 400 + +layout(input_attachment_index = 1) uniform subpassInput sub; +layout(input_attachment_index = 2) uniform subpassInputMS subMS; +layout(input_attachment_index = 3) uniform isubpassInput isub; +layout(input_attachment_index = 4) uniform isubpassInputMS isubMS; +layout(input_attachment_index = 5) uniform usubpassInput usub; +layout(input_attachment_index = 6) uniform usubpassInputMS usubMS; + +out vec4 color; +out ivec4 icolor; +out uvec4 ucolor; + +void foo(isubpassInputMS sb) +{ + icolor += subpassLoad(sb, 3); +} + +void main() +{ + color = subpassLoad(sub); + color += subpassLoad(subMS, 3); + icolor = subpassLoad(isub); + icolor += subpassLoad(isubMS, 3); + ucolor = subpassLoad(usub); + ucolor += subpassLoad(usubMS, 3); + + foo(isubMS); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.switch.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.switch.frag new file mode 100644 index 0000000..1808086 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.switch.frag @@ -0,0 +1,142 @@ +#version 310 es +precision mediump float; +flat in int c, d; +in float x; +out float color; +in vec4 v; + +vec4 foo1(vec4 v1, vec4 v2, int i1) +{ + switch (i1) + { + case 0: + return v1; + case 2: + case 1: + return v2; + case 3: + return v1 * v2; + } + + return vec4(0.0); +} + +vec4 foo2(vec4 v1, vec4 v2, int i1) +{ + switch (i1) + { + case 0: + return v1; + case 2: + return vec4(1.0); + case 1: + return v2; + case 3: + return v1 * v2; + } + + return vec4(0.0); +} + +void main() +{ + float f; + int a[2]; + int local = c; + + switch(++local) + { + } + + switch (c) { + case 1: + f = sin(x); + break; + case 2: + f = cos(x); + break; + default: + f = tan(x); + } + + switch (c) { + case 1: + f += sin(x); + case 2: + f += cos(x); + break; + default: + f += tan(x); + } + + switch (c) { + case 1: + f += sin(x); + break; + case 2: + f += cos(x); + break; + } + + switch (c) { + case 1: + f += sin(x); + break; + case 2: + switch (d) { + case 1: + f += x * x * x; + break; + case 2: + f += x * x; + break; + } + break; + default: + f += tan(x); + } + + for (int i = 0; i < 10; ++i) { + switch (c) { + case 1: + f += sin(x); + for (int j = 20; j < 30; ++j) { + ++f; + if (f < 100.2) + break; + } + break; + case 2: + f += cos(x); + break; + break; + default: + f += tan(x); + } + + if (f < 3.43) + break; + } + + switch (c) { + case 1: + f += sin(x); + break; + case 2: + // test no statements at end + } + + color = f + float(local); + + color += foo1(v,v,c).y; + color += foo2(v,v,c).z; + + switch (c) { + case 0: break; + default: + } + + switch (c) { + default: + } +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.swizzle.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.swizzle.frag new file mode 100644 index 0000000..5a5a203 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.swizzle.frag @@ -0,0 +1,52 @@ +#version 140 + +in float blend; +in vec4 u; +bool p; + +in vec2 t; + +void main() +{ + float blendscale = 1.789; + + vec4 w = u; + vec4 w_undef; // test undef + vec4 w_dep = u; // test dependent swizzles + vec4 w_reorder = u; // test reordering + vec4 w2 = u; + vec4 w_flow = u; // test flowControl + + w_reorder.z = blendscale; + + w.wy = t; + + w_reorder.x = blendscale; + + w2.xyzw = u.zwxy; + + w_reorder.y = blendscale; + + w_dep.xy = w2.xz; + w_dep.zw = t; + + w_undef.xy = u.zw; + + if (p) + w_flow.x = t.x; + else + w_flow.x = t.y; + + gl_FragColor = mix(w_reorder, w_undef, w * w2 * w_dep * w_flow); + + vec2 c = t; + vec4 rep = vec4(0.0, 0.0, 0.0, 1.0); + + if (c.x < 0.0) + c.x *= -1.0; + + if (c.x <= 1.0) + rep.x = 3.4; + + gl_FragColor += rep; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.swizzleInversion.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.swizzleInversion.frag new file mode 100644 index 0000000..9dca62f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.swizzleInversion.frag @@ -0,0 +1,16 @@ +#version 450 + +in vec4 in4; +in vec3 in3; + +void main() +{ + vec3 v43 = interpolateAtCentroid(in4.wzx); + vec2 v42 = interpolateAtSample(in4.zx, 1); + vec4 v44 = interpolateAtOffset(in4.zyxw, vec2(2.0)); + float v41 = interpolateAtOffset(in4.y, vec2(2.0)); + + vec3 v33 = interpolateAtCentroid(in3.yzx); + vec2 v32 = interpolateAtSample(in3.zx, 1); + float v31 = interpolateAtOffset(in4.y, vec2(2.0)); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.test.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.test.frag new file mode 100644 index 0000000..3d4d8f9 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.test.frag @@ -0,0 +1,22 @@ +#version 400 + +uniform sampler2D texSampler2D; +uniform sampler3D texSampler3D; + +in float blend; +in vec2 scale; +in vec4 u; + +in vec2 t; +in vec3 coords; + +void main() +{ + float blendscale = 1.789; + + vec4 v = texture(texSampler2D, (t + scale) / scale ).wzyx; + + vec4 w = texture(texSampler3D, coords) + v; + + gl_FragColor = mix(w, u, blend * blendscale); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.test.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.test.vert new file mode 100644 index 0000000..e2e16aa --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.test.vert @@ -0,0 +1,14 @@ +#version 140 + +in mat4 transform; + +attribute vec4 position; +in vec2 uv_in; + +out vec2 uv; + +void main() +{ + uv = uv_in; + gl_Position = transform * position; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.texture.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.texture.frag new file mode 100644 index 0000000..73884d1 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.texture.frag @@ -0,0 +1,73 @@ +#version 140 + +uniform sampler1D texSampler1D; +uniform sampler2D texSampler2D; +uniform sampler3D texSampler3D; +uniform samplerCube texSamplerCube; +uniform sampler1DShadow shadowSampler1D; +uniform sampler2DShadow shadowSampler2D; + +varying float blend; +varying vec2 scale; +varying vec4 u; + +in vec2 t; +in vec2 coords2D; + +void main() +{ + float blendscale = 1.789; + float bias = 2.0; + float lod = 3.0; + float proj = 2.0; + float coords1D = 1.789; + vec3 coords3D = vec3(1.789, 2.718, 3.453); + vec4 coords4D = vec4(1.789, 2.718, 3.453, 2.0); + vec4 color = vec4(0.0, 0.0, 0.0, 0.0); + + color += texture (texSampler1D, coords1D); + color += texture (texSampler1D, coords1D, bias); + color += textureProj(texSampler1D, coords2D); + color += textureProj(texSampler1D, coords4D); + color += textureProj(texSampler1D, coords2D, bias); + color += textureProj(texSampler1D, coords4D, bias); + + color += texture (texSampler2D, coords2D); + color += texture (texSampler2D, coords2D, bias); + color += textureProj (texSampler2D, coords3D); + color += textureProj (texSampler2D, coords4D, bias); + + color += texture (texSampler3D, coords3D); + color += texture (texSampler3D, coords3D, bias); + color += textureProj (texSampler3D, coords4D); + color += textureProj (texSampler3D, coords4D, bias); + + color += texture (texSamplerCube, coords3D); + color += texture (texSamplerCube, coords3D, bias); + + color += texture (shadowSampler1D, coords3D); + color += texture (shadowSampler1D, coords3D, bias); + color += texture (shadowSampler2D, coords3D); + color += texture (shadowSampler2D, coords3D, bias); + color += textureProj (shadowSampler1D, coords4D); + color += textureProj (shadowSampler1D, coords4D, bias); + color += textureProj (shadowSampler2D, coords4D); + color += textureProj (shadowSampler2D, coords4D, bias); + + ivec2 iCoords2D = ivec2(0, 5); + int iLod = 1; + + color += texelFetch(texSampler2D, iCoords2D, iLod); + + vec2 gradX = dFdx(coords2D); + vec2 gradY = dFdy(coords2D); + const ivec2 offset = ivec2(3, -7); + + color += textureGrad(texSampler2D, coords2D, gradX, gradY); + color += textureProjGrad(texSampler2D, vec3(coords2D, proj), gradX, gradY); + color += textureGradOffset(texSampler2D, coords2D, gradX, gradY, offset); + color += textureProjGradOffset(texSampler2D, coords3D, gradX, gradY, offset); + color += textureGrad(shadowSampler2D, vec3(coords2D, lod), gradX, gradY); + + gl_FragColor = mix(color, u, blend * blendscale); +} \ No newline at end of file diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.texture.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.texture.vert new file mode 100644 index 0000000..9b03bba --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.texture.vert @@ -0,0 +1,39 @@ +#version 140 + +uniform sampler1D texSampler1D; +uniform sampler2D texSampler2D; +uniform sampler3D texSampler3D; +uniform samplerCube texSamplerCube; +uniform sampler1DShadow shadowSampler1D; +uniform sampler2DShadow shadowSampler2D; + +in vec2 coords2D; + +void main() +{ + float lod = 3.0; + float coords1D = 1.789; + vec3 coords3D = vec3(1.789, 2.718, 3.453); + vec4 coords4D = vec4(1.789, 2.718, 3.453, 2.0); + vec4 color = vec4(0.0, 0.0, 0.0, 0.0); + + color += textureLod(texSampler1D, coords1D, lod); + color += textureProjLod(texSampler1D, coords2D, lod); + color += textureProjLod(texSampler1D, coords4D, lod); + + color += textureLod (texSampler2D, coords2D, lod); + color += textureProjLod (texSampler2D, coords3D, lod); + color += textureProjLod (texSampler2D, coords4D, lod); + + color += textureLod (texSampler3D, coords3D, lod); + color += textureProjLod (texSampler3D, coords4D, lod); + + color += textureLod (texSamplerCube, coords3D, lod); + + color += textureLod (shadowSampler1D, coords3D, lod); + color += textureLod (shadowSampler2D, coords3D, lod); + color += textureProjLod(shadowSampler1D, coords4D, lod); + color += textureProjLod(shadowSampler2D, coords4D, lod); + + gl_Position = color; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.types.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.types.frag new file mode 100644 index 0000000..a2ab1d3 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.types.frag @@ -0,0 +1,78 @@ +#version 140 + +bool u_b; +bvec2 u_b2; +bvec3 u_b3; +bvec4 u_b4; +flat in int u_i; +flat in ivec2 u_i2; +flat in ivec3 u_i3; +flat in ivec4 u_i4; + in float u_f; + in vec2 u_f2; + in vec3 u_f3; + in vec4 u_f4; +bool i_b; +bvec2 i_b2; +bvec3 i_b3; +bvec4 i_b4; + +flat in int i_i; +flat in ivec2 i_i2; +flat in ivec3 i_i3; +flat in ivec4 i_i4; + +in float i_f; +in vec2 i_f2; +in vec3 i_f3; +in vec4 i_f4; + +void main() +{ + bool b = u_b && i_b; + bvec2 b2 = bvec2(u_b2.x && i_b2.x && u_b2.y && i_b2.y); + bvec3 b3 = bvec3(u_b3.x && i_b3.x && u_b3.y && i_b3.y && u_b3.z && i_b3.z); + bvec4 b4 = bvec4(u_b4.x && i_b4.x && u_b4.y && i_b4.y && u_b4.z && i_b4.z && u_b4.w && i_b4.w); + + int i = u_i + i_i; + ivec2 i2 = u_i2 + i_i2; + ivec3 i3 = u_i3 + i_i3; + ivec4 i4 = u_i4 + i_i4; + + float f = u_f + i_f; + vec2 f2 = u_f2 + i_f2; + vec3 f3 = u_f3 + i_f3; + vec4 f4 = u_f4 + i_f4; + + gl_FragColor = + b || + b2.x || + b2.y || + b3.x || + b3.y || + b3.z || + b4.x || + b4.y || + b4.z || + b4.w ? vec4( + i + + i2.x + + i2.y + + i3.x + + i3.y + + i3.z + + i4.x + + i4.y + + i4.z + + i4.w + + f + + f2.x + + f2.y + + f3.x + + f3.y + + f3.z + + f4.x + + f4.y + + f4.z + + f4.w) : vec4(1.0); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.uint.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.uint.frag new file mode 100644 index 0000000..853de7c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.uint.frag @@ -0,0 +1,102 @@ +#version 310 es +precision mediump float; +flat in uvec2 t; +in float f; +in vec2 tc; + +flat in uvec4 v; +flat in int i; +bool b; + +out uvec4 c; + +uniform mediump usampler2D usampler; + +void main() +{ + int count = 1; + + uint u = t.y + 3u; + const uint cu1 = 0xFFFFFFFFU; + const uint cu2 = -1u; // 0xFFFFFFFF + const uint cu3 = 1U; + const uint cu4 = 1u; + + if (cu1 == cu2) + count *= 2; // 2 + if (cu3 == cu4) + count *= 3; // 6 + if (cu2 == cu3) + count *= 5; // not done + + const int cshiftedii = 0xFFFFFFFF >> 10; + const uint cushiftedui = 0xFFFFFFFFu >> 10; + const int cshiftediu = 0xFFFFFFFF >> 10u; + const uint cushifteduu = 0xFFFFFFFFu >> 10u; + + if (cshiftedii == cshiftediu) + count *= 7; // 42 + if (cushiftedui == cushifteduu) + count *= 11; // 462 + if (cshiftedii == int(cushiftedui)) + count *= 13; // not done + + int shiftedii = 0xFFFFFFFF >> 10; + uint shiftedui = 0xFFFFFFFFu >> 10; + int shiftediu = 0xFFFFFFFF >> 10u; + uint shifteduu = 0xFFFFFFFFu >> 10u; + + if (shiftedii == shiftediu) + c = texture(usampler, tc); + if (shiftedui == shifteduu) + c = texture(usampler, tc + float(1u)); + if (shiftedii == int(shiftedui)) + c = texture(usampler, tc - vec2(2u)); + + if (t.x > 4u) { + float af = float(u); + bool ab = bool(u); + int ai = int(u); + + c += uvec4(uint(af), uint(ab), uint(ai), count); + } + + const uint cmask1 = 0x0A1u; + const uint cmask2 = 0xA10u; + const uint cmask3 = cmask1 << 4; + const uint cmask4 = 0xAB1u; + + if (cmask3 == cmask2) + count *= 17; // 7854 + + if ((cmask3 & cmask1) != 0u) + count *= 19; // not done + + if ((cmask1 | cmask3) == cmask4) + count *= 23; // 180642 + + if ((cmask1 ^ cmask4) == 0xA10u) + count *= 27; // 4877334 + + uint mask1 = 0x0A1u; + uint mask2 = 0xA10u; + uint mask3 = mask1 << 4; + uint mask4 = 0xAB1u; + + if (mask3 == mask2) + count *= 2; // 9754668 + + if ((mask3 & mask1) != 0u) + count *= 3; // not done + + if ((mask1 | mask3) == mask4) + count *= 5; // 48773340 + + if ((mask1 ^ mask4) == 0xA10u) + count *= 7; // 341413380 + + c += uvec4(count); + + #define UINT_MAX 4294967295u + c.x += UINT_MAX; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.uniformArray.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.uniformArray.frag new file mode 100644 index 0000000..b7625af --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.uniformArray.frag @@ -0,0 +1,17 @@ +#version 140 + +uniform sampler2D texSampler2D; +in vec3 inColor; +in vec4 color[6]; +in float alpha[16]; + +void main() +{ + vec4 texColor = color[1] + color[1]; + + texColor.xyz += inColor; + + texColor.a += alpha[12]; + + gl_FragColor = texColor; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.variableArrayIndex.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.variableArrayIndex.frag new file mode 100644 index 0000000..cc304b8 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.variableArrayIndex.frag @@ -0,0 +1,49 @@ +#version 400 + +uniform sampler2D samp2D; +in vec2 coord; + +struct lunarStruct1 { + int i; + float f; +}; + +struct lunarStruct2 { + int i; + float f; + lunarStruct1 s1_1; +}; + +struct lunarStruct3 { + lunarStruct2 s2_1[3]; + int i; + float f; + lunarStruct1 s1_1; +}; + + +flat in lunarStruct1 foo; +flat in lunarStruct2 foo2[5]; +flat in lunarStruct3 foo3; +flat in int Count; + +void main() +{ + float scale; + int iLocal = Count; + + if (foo3.s2_1[1].i > 0) + scale = foo2[foo3.s2_1[foo.i].i + 2 + ++iLocal].s1_1.f; + else + scale = foo3.s2_1[0].s1_1.f; + + //for (int i = 0; i < iLocal; ++i) { + // scale += foo2[i].f; + //} + + gl_FragColor = scale * texture(samp2D, coord); + + vec2[3] constructed = vec2[3](coord, vec2(scale), vec2(1.0, 2.0)); + gl_FragColor += vec4(constructed[foo.i], constructed[foo.i]); +} + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.varyingArray.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.varyingArray.frag new file mode 100644 index 0000000..f6e043f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.varyingArray.frag @@ -0,0 +1,19 @@ +#version 140 +uniform sampler2D texSampler2D; +in vec4 color; +in float alpha; + +in vec4 TexCoord[6]; + +in vec4 foo[3]; + +void main() +{ + vec4 texColor = texture(texSampler2D, vec2(TexCoord[4] + TexCoord[5])); + + texColor += color; + + texColor.a = alpha; + + gl_FragColor = foo[1] + TexCoord[0] + TexCoord[4] + texColor; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.varyingArrayIndirect.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.varyingArrayIndirect.frag new file mode 100644 index 0000000..a556c9e --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.varyingArrayIndirect.frag @@ -0,0 +1,21 @@ +#version 140 +uniform sampler2D texSampler2D; +in vec4 color; +in float alpha; + +in vec4 TexCoord[6]; + +in vec4 userIn[2]; + +flat in int a, b; + +void main() +{ + vec4 texColor = texture(texSampler2D, vec2(userIn[b] + TexCoord[a] + TexCoord[5])); + + texColor += color; + + texColor.a = alpha; + + gl_FragColor = TexCoord[0] + TexCoord[b] + texColor + userIn[a]; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.viewportArray2.tesc b/3rdparty/bgfx/3rdparty/glslang/Test/spv.viewportArray2.tesc new file mode 100644 index 0000000..f629b43 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.viewportArray2.tesc @@ -0,0 +1,16 @@ +#version 450 +#extension GL_NV_viewport_array2 :require + +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]; + +void main() +{ + gl_out[gl_InvocationID].gl_ViewportMask[0] = 1; + gl_out[gl_InvocationID].gl_ViewportIndex = 2; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.viewportArray2.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.viewportArray2.vert new file mode 100644 index 0000000..a373d5e --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.viewportArray2.vert @@ -0,0 +1,10 @@ +#version 450 +#extension GL_ARB_shader_viewport_layer_array : require +#extension GL_NV_viewport_array2 : require + +layout (viewport_relative) out highp int gl_Layer; +void main() +{ + gl_ViewportMask[0] = 1; + gl_ViewportIndex = 2; +} \ No newline at end of file diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.voidFunction.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.voidFunction.frag new file mode 100644 index 0000000..228ea1f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.voidFunction.frag @@ -0,0 +1,34 @@ +#version 400 + +in vec4 bigColor; +in vec4 BaseColor; +in float d; + +float bar = 2.0; + +void foo() +{ + bar++; + + return; +} + +void foo2() +{ + bar++; +} + +void main() +{ + vec4 outColor = bigColor; + + foo(); + + foo2(); + + outColor.x += bar; + + gl_FragColor = outColor; + + return; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.while-continue-break.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.while-continue-break.vert new file mode 100644 index 0000000..c81e8d2 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.while-continue-break.vert @@ -0,0 +1,20 @@ +#version 310 es +void main() { + int i = 0; + int A, B, C, D; + while (i<10) { + A = 1; + if (i%2 == 0) { + B = 2; + continue; + C = 2; + } + if (i%5 == 0) { + B = 2; + break; + C = 2; + } + i++; + } + D = 3; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.while-simple.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.while-simple.vert new file mode 100644 index 0000000..0f38325 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.while-simple.vert @@ -0,0 +1,7 @@ +#version 310 es +void main() { + int i = 0; + while (i<10) { + i++; + } +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.whileLoop.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.whileLoop.frag new file mode 100644 index 0000000..f7b7141 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.whileLoop.frag @@ -0,0 +1,16 @@ +#version 140 + +in vec4 bigColor; +in vec4 BaseColor; +in float d; + +void main() +{ + vec4 color = BaseColor; + + while (color.x < d) { + color += bigColor; + } + + gl_FragColor = color; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/structAssignment.frag b/3rdparty/bgfx/3rdparty/glslang/Test/structAssignment.frag new file mode 100644 index 0000000..959f854 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/structAssignment.frag @@ -0,0 +1,39 @@ +#version 130 + +uniform sampler2D sampler; +varying mediump vec2 coord; + +struct lunarStruct1 { + int i; + float f; +}; + +struct lunarStruct2 { + int i; + float f; + lunarStruct1 s1_1; +}; + +struct lunarStruct3 { + lunarStruct2 s2_1; + int i; + float f; + lunarStruct1 s1_1; +}; + + +uniform lunarStruct1 foo; +uniform lunarStruct2 foo2; +uniform lunarStruct3 foo3; + +void main() +{ + lunarStruct2 locals2; + + if (foo3.s2_1.i > 0) + locals2 = foo3.s2_1; + else + locals2 = foo2; + + gl_FragColor = locals2.s1_1.f * texture2D(sampler, coord); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/structDeref.frag b/3rdparty/bgfx/3rdparty/glslang/Test/structDeref.frag new file mode 100644 index 0000000..376e408 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/structDeref.frag @@ -0,0 +1,71 @@ +#version 130 + +uniform sampler2D sampler; +varying vec2 coord; + +struct s0 { + int i; +}; + +struct s00 { + s0 s0_0; +}; + +struct s1 { + int i; + float f; + s0 s0_1; +}; + +struct s2 { + int i; + float f; + s1 s1_1; +}; + +struct s3 { + s2[12] s2_1; + int i; + float f; + s1 s1_1; +}; + + +uniform s0 foo0; +uniform s1 foo1; +uniform s2 foo2; +uniform s3 foo3; + +uniform s00 foo00; + +void main() +{ + s0 locals0; + s2 locals2; + s00 locals00; + + float[6] fArray; + + s1[10] locals1Array; + + if (foo3.s2_1[9].i > 0) { + locals2.f = 1.0; + locals2.s1_1 = s1(0, 1.0, s0(0)); + fArray = float[6]( 0.0, 0.0, 0.0, 0.0, 0.0, 0.0); + locals1Array[6] = foo1; + locals0 = s0(0); + locals00 = s00(s0(0)); + } else { + locals2.f = coord.x; + locals2.s1_1 = s1(1, coord.y, foo0); + fArray = float[6]( 0.0, 1.0, 2.0, 3.0, 4.0, 5.0); + locals1Array[6] = locals2.s1_1; + locals0 = foo1.s0_1; + locals00 = foo00; + } + + if (locals0.i > 5) + locals0 = locals00.s0_0; + + gl_FragColor = (float(locals0.i) + locals1Array[6].f + fArray[3] + locals2.s1_1.f) * texture2D(sampler, coord); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/structure.frag b/3rdparty/bgfx/3rdparty/glslang/Test/structure.frag new file mode 100644 index 0000000..97e79cb --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/structure.frag @@ -0,0 +1,31 @@ +#version 130 +uniform sampler2D sampler; +varying vec2 coord; + +struct lunarStruct1 { + int i; + float f[4]; + vec4 color[5]; +}; + +struct lunarStruct2 { + int i[5]; + float f; + lunarStruct1 s1_1[7]; +}; + +uniform lunarStruct1 foo; +uniform lunarStruct2 foo2[5]; + +void main() +{ + float scale = 0.0; + + if (foo2[3].i[4] > 0) + scale = foo2[3].s1_1[2].color[3].x; + else + scale = foo2[3].s1_1[2].f[3]; + + gl_FragColor = scale * texture2D(sampler, coord); +} + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/switch.frag b/3rdparty/bgfx/3rdparty/glslang/Test/switch.frag new file mode 100644 index 0000000..f0860fa --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/switch.frag @@ -0,0 +1,158 @@ +#version 300 es +precision highp float; +uniform int c, d; +in highp float x; + +void main() +{ + float f; + int a[2]; + + switch(f) { // ERROR + } + + switch(a) { // ERROR + } + + switch(c) + { + } + + switch(c) // WARNING, not enough stuff after last label + { + case 2: + } + + switch(c) + { + f = sin(x); // ERRROR + case 2: + f = cos(x); + break; + } + + switch (c) { + default: + break; + case 1: + f = sin(x); + break; + case 2: + f = cos(x); + break; + default: // ERROR, 2nd default + f = tan(x); + } + + switch (c) { + case 1: + f = sin(x); + break; + case 2: + switch (d) { + case 1: + f = x * x * x; + break; + case 2: + f = x * x; + break; + } + break; + default: + f = tan(x); + case 1: // ERROR, 2nd 'case 1' + break; + case 3.8: // ERROR, non-int + break; + case c: // ERROR, non-constant + break; + } + + switch (c) { // a no-error normal switch + case 1: + f = sin(x); + break; + case 2: + switch (d) { + case 1: + f = x * x * x; + break; + case 2: + f = x * x; + break; + } + break; + default: + f = tan(x); + } + + break; // ERROR + + switch (c) { + case 1: + f = sin(x); + break; + case 2: + switch (d) { + case 1: + { + case 4: // ERROR + break; + } + f = x * x * x; + if (c < d) { + case 2: // ERROR + f = x * x; + } + if (d < c) + case 3: // ERROR + break; + } + break; + case 4: + f = tan(x); + if (f < 0.0) + default: // ERROR + break; + } + + case 5: // ERROR + default: // ERROR + + switch (0) { + default: + int onlyInSwitch = 0; + } + onlyInSwitch; // ERROR + + switch (0) { + default: + int x; // WARNING (was "no statement" ERROR, but spec. changed because unclear what a statement is) + } + + switch (c) { + case 1: + { + int nestedX; + break; + } + case 2: + nestedX; // ERROR + int nestedZ; + float a; // okay, hiding outer 'a' + break; + case 3: + int linearZ; + break; + break; + case 4: + int linearY = linearZ; + break; + case 5: // okay that branch bypassed an initializer + const int linearC = 4; + break; + case 6: // okay that branch bypassed an initializer + linearC; + } + nestedZ; // ERROR, no longer in scope +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/swizzle.frag b/3rdparty/bgfx/3rdparty/glslang/Test/swizzle.frag new file mode 100644 index 0000000..14f507e --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/swizzle.frag @@ -0,0 +1,52 @@ +#version 110 + +uniform float blend; +uniform vec4 u; +uniform bool p; + +varying vec2 t; + +void main() +{ + float blendscale = 1.789; + + vec4 w = u; + vec4 w_undef; // test undef + vec4 w_dep = u; // test dependent swizzles + vec4 w_reorder = u; // test reordering + vec4 w2 = u; + vec4 w_flow = u; // test flowControl + + w_reorder.z = blendscale; + + w.wy = t; + + w_reorder.x = blendscale; + + w2.xyzw = u.zwxy; + + w_reorder.y = blendscale; + + w_dep.xy = w2.xz; + w_dep.zw = t; + + w_undef.xy = u.zw; + + if (p) + w_flow.x = t.x; + else + w_flow.x = t.y; + + gl_FragColor = mix(w_reorder, w_undef, w * w2 * w_dep * w_flow); + + vec2 c = t; + vec4 rep = vec4(0.0, 0.0, 0.0, 1.0); + + if (c.x < 0.0) + c.x *= -1.0; + + if (c.x <= 1.0) + rep.x = 3.4; + + gl_FragColor += rep; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/syntaxError.frag b/3rdparty/bgfx/3rdparty/glslang/Test/syntaxError.frag new file mode 100644 index 0000000..fcbeb69 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/syntaxError.frag @@ -0,0 +1,16 @@ +#version 120 + +uniform vec4 bigColor; +varying vec4 BaseColor; +uniform float d; + +void main() +{ + vec5 color = BaseColor; + + do { + color += bigColor; + } while (color.x < d); + + gl_FragColor = color; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/test.frag b/3rdparty/bgfx/3rdparty/glslang/Test/test.frag new file mode 100644 index 0000000..1b7d0e9 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/test.frag @@ -0,0 +1,22 @@ +#version 110 + +uniform sampler2D texSampler2D; +uniform sampler3D texSampler3D; + +uniform float blend; +uniform vec2 scale; +uniform vec4 u; + +varying vec2 t; +varying vec3 coords; + +void main() +{ + float blendscale = 1.789; + + vec4 v = texture2D(texSampler2D, (t + scale) / scale ).wzyx; + + vec4 w = texture3D(texSampler3D, coords) + v; + + gl_FragColor = mix(w, u, blend * blendscale); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/texture.frag b/3rdparty/bgfx/3rdparty/glslang/Test/texture.frag new file mode 100644 index 0000000..8e5391e --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/texture.frag @@ -0,0 +1,73 @@ +#version 130 + +uniform sampler1D texSampler1D; +uniform sampler2D texSampler2D; +uniform sampler3D texSampler3D; +uniform samplerCube texSamplerCube; +uniform sampler1DShadow shadowSampler1D; +uniform sampler2DShadow shadowSampler2D; + +uniform float blend; +uniform vec2 scale; +uniform vec4 u; + +varying vec2 t; +varying vec2 coords2D; + +void main() +{ + float blendscale = 1.789; + float bias = 2.0; + float lod = 3.0; + float proj = 2.0; + float coords1D = 1.789; + vec3 coords3D = vec3(1.789, 2.718, 3.453); + vec4 coords4D = vec4(1.789, 2.718, 3.453, 2.0); + vec4 color = vec4(0.0, 0.0, 0.0, 0.0); + + color += texture1D (texSampler1D, coords1D); + color += texture1D (texSampler1D, coords1D, bias); + color += texture1DProj(texSampler1D, coords2D); + color += texture1DProj(texSampler1D, coords4D); + color += texture1DProj(texSampler1D, coords2D, bias); + color += texture1DProj(texSampler1D, coords4D, bias); + + color += texture2D (texSampler2D, coords2D); + color += texture2D (texSampler2D, coords2D, bias); + color += texture2DProj (texSampler2D, coords3D); + color += texture2DProj (texSampler2D, coords4D, bias); + + color += texture3D (texSampler3D, coords3D); + color += texture3D (texSampler3D, coords3D, bias); + color += texture3DProj (texSampler3D, coords4D); + color += texture3DProj (texSampler3D, coords4D, bias); + + color += textureCube (texSamplerCube, coords3D); + color += textureCube (texSamplerCube, coords3D, bias); + + color += shadow1D (shadowSampler1D, coords3D); + color += shadow1D (shadowSampler1D, coords3D, bias); + color += shadow2D (shadowSampler2D, coords3D); + color += shadow2D (shadowSampler2D, coords3D, bias); + color += shadow1DProj (shadowSampler1D, coords4D); + color += shadow1DProj (shadowSampler1D, coords4D, bias); + color += shadow2DProj (shadowSampler2D, coords4D); + color += shadow2DProj (shadowSampler2D, coords4D, bias); + + ivec2 iCoords2D = ivec2(0, 5); + int iLod = 1; + + color += texelFetch(texSampler2D, iCoords2D, iLod); + + vec2 gradX = dFdx(coords2D); + vec2 gradY = dFdy(coords2D); + const ivec2 offset = ivec2(3, -7); + + color += textureGrad(texSampler2D, coords2D, gradX, gradY); + color += textureProjGrad(texSampler2D, vec3(coords2D, proj), gradX, gradY); + color += textureGradOffset(texSampler2D, coords2D, gradX, gradY, offset); + color += textureProjGradOffset(texSampler2D, coords3D, gradX, gradY, offset); + color += textureGrad(shadowSampler2D, vec3(coords2D, lod), gradX, gradY); + + gl_FragColor = mix(color, u, blend * blendscale); +} \ No newline at end of file diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/tokenLength.vert b/3rdparty/bgfx/3rdparty/glslang/Test/tokenLength.vert new file mode 100644 index 0000000..691b104 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/tokenLength.vert @@ -0,0 +1,72 @@ +#version 300 es + +// 1023 characters +in float BCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789; + +// 1024 characters (okay) +in float ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789; + +int E1 = 5000000000; // ERROR +int E2 = 50000000000; // ERROR +int B = 4294967295; // okay + +int OE = 0777777777777777777777; // ERROR +int HE = 0x1234567890ABCDEF0; // ERROR + +// 1023 character fraction +float F = 1.0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890; + +// 1024 character value +float G = 1.01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678890; + +// 1025 character fraction +float E3 = 1.012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012; + +void main() +{ + gl_Position = vec4(ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789, + B, F, G); +} + +// super long +float BCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789BCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789BCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789BCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789; +int superH = 0xBCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789BCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789BCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789BCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789; +int superO = 0777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777077777777777777777777707777777777777777777770777777777777777777777; +int superI = 429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295; +float superF = 1.012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890121234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901212345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012; + +// Boundary cases +#extension a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhooooooooooooooooooooooooooooooohhhhhhhhhhhhhhhhh01234 : enable +#extension a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhooooooooooooooooooooooooooooooohhhhhhhhhhhhhhhhh012345 : enable + +// Super long +#extension A29496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295429496729542949672954294967295 + +// Boundary cases +#if 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001 +#error in long non-zero #if +#endif +#if 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 == 0 +#error in long zero #if +#endif +#if 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 == 0 +#error in too long #if +#endif + +#if A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001 +#error in long macro #if +#endif +#if A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +#error in long macro #if +#endif +#if A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +#error in too long macro #if +#endif + +// Super long +#if 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +#error in super long #if +#endif +#if A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +#error in super long macro #if +#endif diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/tokenPaste.vert b/3rdparty/bgfx/3rdparty/glslang/Test/tokenPaste.vert new file mode 100644 index 0000000..7aa113a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/tokenPaste.vert @@ -0,0 +1,82 @@ +#version 450 + +// side test verifies multiple rounds of argument expansion +#define bear SecondExpansion +#define mmmB bear +#define mmmA(a) a +int mmmA(mmmB); // mmmB -> bear, and then in mmmA(), bear -> SecondExpansion + +// pasting skips the first round of expansion +#define mmcatmmdog PostPasteExpansion +#define mmcat cat +#define mmdog dog +#define mmp(a,b) a## b +int mmp(mmcat, mmdog); // mmcat/mmdog not expanded, mmcatmmdog -> PostPasteExpansion + +// multi-token pre +#define mmtokpastepre(a) a##27 +mmtokpastepre(float foo); // should declare "float foo27;" + +// multi-token post +#define mmtokpastepost(a) uni ##a +mmtokpastepost(form float foo155); // should declare "uniform float foo155;" + +// non-first argument +#define foo ShouldntExpandToThis +#define semi ; +#define bothpaste(a,b) a##b +float bothpaste(foo, 719); // should declare "float foo719;" +#define secpaste(a,b) a bar ## b +secpaste(uniform float, foo semi) // should declare "uniform float barfoo;" + +// no args +#define noArg fl##oat +noArg argless; + +// bad location +#define bad1 ## float +bad1 dc1; +#define bad2 float ## +bad2 dc2; + +// multiple ## +#define multiPaste(a, b, c) a##or##b flo##at foo##c +multiPaste(unif, m, 875); + +// too long +#define simplePaste(a,b) a##b +// 1020 + 5 characters +float simplePaste(ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF012345, 12345); + +// non-identifiers +int a = simplePaste(11,12); + +// operators +#define MAKE_OP(L, R) L ## R +const int aop = 10; +const int bop = 4; +int cop = aop MAKE_OP(<, <) bop; +bool dop = aop MAKE_OP(!,=) bop; + +#define MAKE_OP3(L, M, R) L ## M ## R + +void foo() +{ + int e = 16; + e MAKE_OP3(>,>,=) 2; + + // recovery from bad op + bool f = e MAKE_OP(>,!) 5; +} + +// arguments: should make 'uniform int argPaste2;' +#define M_NEST(q) int q +#define M_OUTER(p) M_NEST(p##2) +uniform M_OUTER(argPaste); +// should make 'uniform int argPaste20suff;' +#define M_NEST2(q) int q ## suff +#define M_OUTER2(p) M_NEST2(p ## 20) +uniform M_OUTER2(argPaste); + +#define rec(x)## +rec(rec()) \ No newline at end of file diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/types.frag b/3rdparty/bgfx/3rdparty/glslang/Test/types.frag new file mode 100644 index 0000000..48701d8 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/types.frag @@ -0,0 +1,81 @@ +#version 130 + +uniform bool u_b; +uniform bvec2 u_b2; +uniform bvec3 u_b3; +uniform bvec4 u_b4; + +uniform int u_i; +uniform ivec2 u_i2; +uniform ivec3 u_i3; +uniform ivec4 u_i4; + +uniform float u_f; +uniform vec2 u_f2; +uniform vec3 u_f3; +uniform vec4 u_f4; + +uniform bool i_b; +uniform bvec2 i_b2; +uniform bvec3 i_b3; +uniform bvec4 i_b4; + +flat in int i_i; +flat in ivec2 i_i2; +flat in ivec3 i_i3; +flat in ivec4 i_i4; + +in float i_f; +in vec2 i_f2; +in vec3 i_f3; +in vec4 i_f4; + +void main() +{ + bool b = u_b && i_b; + bvec2 b2 = bvec2(u_b2.x && i_b2.x && u_b2.y && i_b2.y); + bvec3 b3 = bvec3(u_b3.x && i_b3.x && u_b3.y && i_b3.y && u_b3.z && i_b3.z); + bvec4 b4 = bvec4(u_b4.x && i_b4.x && u_b4.y && i_b4.y && u_b4.z && i_b4.z && u_b4.w && i_b4.w); + + int i = u_i + i_i; + ivec2 i2 = u_i2 + i_i2; + ivec3 i3 = u_i3 + i_i3; + ivec4 i4 = u_i4 + i_i4; + + float f = u_f + i_f; + vec2 f2 = u_f2 + i_f2; + vec3 f3 = u_f3 + i_f3; + vec4 f4 = u_f4 + i_f4; + + gl_FragColor = + b || + b2.x || + b2.y || + b3.x || + b3.y || + b3.z || + b4.x || + b4.y || + b4.z || + b4.w ? vec4( + i + + i2.x + + i2.y + + i3.x + + i3.y + + i3.z + + i4.x + + i4.y + + i4.z + + i4.w + + f + + f2.x + + f2.y + + f3.x + + f3.y + + f3.z + + f4.x + + f4.y + + f4.z + + f4.w) : vec4(1.0); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/uint.frag b/3rdparty/bgfx/3rdparty/glslang/Test/uint.frag new file mode 100644 index 0000000..6dd69ac --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/uint.frag @@ -0,0 +1,105 @@ +#version 300 es +in uvec2 badu; // ERROR +flat in uvec2 t; +in highp float f; +in highp vec2 tc; +in bool bad; // ERROR +uniform uvec4 v; +uniform int i; +uniform bool b; + +out uvec4 c; + +uniform lowp usampler2D usampler; + +void main() +{ + int count = 1; + + uint u = t.y + 3u; + const uint cu1error = 0xFFFFFFFF; // ERROR + const uint cu1 = 0xFFFFFFFFU; + const uint cu2 = -1u; // 0xFFFFFFFF + const uint cu3 = 1U; + const uint cu4error = 1; // ERROR + const uint cu4 = 1u; + + if (cu1 == cu2) + count *= 2; // done + if (cu3 == cu4) + count *= 3; // done + if (cu2 == cu3) + count *= 5; // not done + + const uint cushiftediierror = 0xFFFFFFFF >> 10; // ERROR + const int cshiftedii = 0xFFFFFFFF >> 10; + const uint cushiftedui = 0xFFFFFFFFu >> 10; + const uint cushiftediuerror = 0xFFFFFFFF >> 10u; // ERROR + const int cshiftediu = 0xFFFFFFFF >> 10u; + const uint cushifteduu = 0xFFFFFFFFu >> 10u; + + if (cshiftedii == cshiftediu) + count *= 7; // done + if (cushiftedui == cushifteduu) + count *= 11; // done + if (cshiftedii == int(cushiftedui)) + count *= 13; // not done + + uint shiftediierror = 0xFFFFFFFF >> 10; // ERROR + int shiftedii = 0xFFFFFFFF >> 10; + uint shiftedui = 0xFFFFFFFFu >> 10; + uint shiftediuerror = 0xFFFFFFFF >> 10u; // ERROR + int shiftediu = 0xFFFFFFFF >> 10u; + uint shifteduu = 0xFFFFFFFFu >> 10u; + + if (shiftedii == shiftediu) + c = texture(usampler, tc); + if (shiftedui == shifteduu) + c = texture(usampler, tc + float(1u)); + if (shiftedii == int(shiftedui)) + c = texture(usampler, tc - vec2(2u)); + + if (t.x > 4u) { + float af = float(u); + bool ab = bool(u); + int ai = int(u); + + c += uvec4(uint(af), uint(ab), uint(ai), count); + } + + const uint cmask1 = 0x0A1u; + const uint cmask2 = 0xA10u; + const uint cmask3 = cmask1 << 4; + const uint cmask4 = 0xAB1u; + + if (cmask3 == cmask2) + count *= 17; // done + + if ((cmask3 & cmask1) != 0u) + count *= 19; // not done + + if ((cmask1 | cmask3) == cmask4) + count *= 23; // done + + if ((cmask1 ^ cmask4) == 0xA10u) + count *= 27; // done + + uint mask1 = 0x0A1u; + uint mask2 = 0xA10u; + uint mask3 = mask1 << 4; + uint mask4 = 0xAB1u; + + if (mask3 == mask2) + count *= 100; + + if ((mask3 & mask1) != 0u) + count *= 101; + + if ((mask1 | mask3) == mask4) + count *= 102; + + if ((mask1 ^ mask4) == 0xA10u) + count *= 103; + + c += uvec4(count); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/uniformArray.frag b/3rdparty/bgfx/3rdparty/glslang/Test/uniformArray.frag new file mode 100644 index 0000000..7db2876 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/uniformArray.frag @@ -0,0 +1,16 @@ +#version 130 +uniform sampler2D texSampler2D; +uniform vec3 inColor; +uniform vec4 color[6]; +uniform float alpha[16]; + +void main() +{ + vec4 texColor = color[1] + color[1]; + + texColor.xyz += inColor; + + texColor.a += alpha[12]; + + gl_FragColor = texColor; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/variableArrayIndex.frag b/3rdparty/bgfx/3rdparty/glslang/Test/variableArrayIndex.frag new file mode 100644 index 0000000..63b49c7 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/variableArrayIndex.frag @@ -0,0 +1,48 @@ +#version 130 +uniform sampler2D sampler; +varying vec2 coord; + +struct lunarStruct1 { + int i; + float f; +}; + +struct lunarStruct2 { + int i; + float f; + lunarStruct1 s1_1; +}; + +struct lunarStruct3 { + lunarStruct2 s2_1[3]; + int i; + float f; + lunarStruct1 s1_1; +}; + + +uniform lunarStruct1 foo; +uniform lunarStruct2 foo2[5]; +uniform lunarStruct3 foo3; +uniform int Count; + +void main() +{ + float scale; + int iLocal = Count; + + if (foo3.s2_1[1].i > 0) + scale = foo2[foo3.s2_1[foo.i].i + 2 + ++iLocal].s1_1.f; + else + scale = foo3.s2_1[0].s1_1.f; + + //for (int i = 0; i < iLocal; ++i) { + // scale += foo2[i].f; + //} + + gl_FragColor = scale * texture2D(sampler, coord); + + vec2[3] constructed = vec2[3](coord, vec2(scale), vec2(1.0, 2.0)); + gl_FragColor += vec4(constructed[foo.i], constructed[foo.i]); +} + diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/varyingArray.frag b/3rdparty/bgfx/3rdparty/glslang/Test/varyingArray.frag new file mode 100644 index 0000000..3bd152f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/varyingArray.frag @@ -0,0 +1,19 @@ +#version 130 +uniform sampler2D texSampler2D; +varying vec4 color; +varying float alpha; + +varying vec4 gl_TexCoord[6]; + +varying vec4 foo[3]; + +void main() +{ + vec4 texColor = texture2D(texSampler2D, vec2(gl_TexCoord[4] + gl_TexCoord[5])); + + texColor += color; + + texColor.a = alpha; + + gl_FragColor = foo[1] + gl_TexCoord[0] + gl_TexCoord[4] + texColor; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/varyingArrayIndirect.frag b/3rdparty/bgfx/3rdparty/glslang/Test/varyingArrayIndirect.frag new file mode 100644 index 0000000..d45e601 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/varyingArrayIndirect.frag @@ -0,0 +1,21 @@ +#version 130 +uniform sampler2D texSampler2D; +varying vec4 color; +varying float alpha; + +varying vec4 gl_TexCoord[6]; + +varying vec4 userIn[2]; + +uniform int a, b; + +void main() +{ + vec4 texColor = texture2D(texSampler2D, vec2(userIn[b] + gl_TexCoord[a] + gl_TexCoord[5])); + + texColor += color; + + texColor.a = alpha; + + gl_FragColor = gl_TexCoord[0] + gl_TexCoord[b] + texColor + userIn[a]; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/versionsClean.frag b/3rdparty/bgfx/3rdparty/glslang/Test/versionsClean.frag new file mode 100644 index 0000000..6e19bf8 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/versionsClean.frag @@ -0,0 +1,45 @@ +// +//Copyright (C) 2012 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 LunarG Inc. 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. +// +#version 300 es + +in highp vec3 color; +out highp vec4 foo; + +uniform highp sampler2DArrayShadow bar; + +void main() +{ + foo = vec4(color, 142.0f); + discard; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/versionsClean.vert b/3rdparty/bgfx/3rdparty/glslang/Test/versionsClean.vert new file mode 100644 index 0000000..7c19785 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/versionsClean.vert @@ -0,0 +1,43 @@ +// +//Copyright (C) 2012 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 LunarG Inc. 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. +// +#version 420 compatibility + +attribute vec3 color; + +uniform sampler2DRect foo; + +void main() +{ + gl_Position = vec4(color, 142.0f); +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/versionsErrors.frag b/3rdparty/bgfx/3rdparty/glslang/Test/versionsErrors.frag new file mode 100644 index 0000000..021c735 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/versionsErrors.frag @@ -0,0 +1,46 @@ +// +//Copyright (C) 2012 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 LunarG Inc. 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. +// +#version 110 es + +#extension GL_ARB_texture_rectangle : disable + +attribute vec3 color; + +uniform sampler2DRect foo; + +void main() +{ + gl_FragColor = vec4(color, 142.0f); + discard; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/versionsErrors.vert b/3rdparty/bgfx/3rdparty/glslang/Test/versionsErrors.vert new file mode 100644 index 0000000..8736f2e --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/versionsErrors.vert @@ -0,0 +1,46 @@ +// +//Copyright (C) 2012 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 LunarG Inc. 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. +// +#version 420 core + +#extension GL_ARB_texture_rectangle : enable + +attribute vec3 color; + +uniform sampler2DRect foo; + +void main() +{ + gl_Position = vec4(color, 142.0f); + discard; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/voidFunction.frag b/3rdparty/bgfx/3rdparty/glslang/Test/voidFunction.frag new file mode 100644 index 0000000..4767f7a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/voidFunction.frag @@ -0,0 +1,34 @@ +#version 120 + +uniform vec4 bigColor; +varying vec4 BaseColor; +uniform float d; + +float bar = 2.0; + +void foo() +{ + bar++; + + return; +} + +void foo2() +{ + bar++; +} + +void main() +{ + vec4 outColor = bigColor; + + foo(); + + foo2(); + + outColor.x += bar; + + gl_FragColor = outColor; + + return; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/vulkan.ast.vert b/3rdparty/bgfx/3rdparty/glslang/Test/vulkan.ast.vert new file mode 100644 index 0000000..c5a6a42 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/vulkan.ast.vert @@ -0,0 +1,42 @@ +#version 450 + +layout(constant_id = 200) const float scf1 = 1.0; +layout(constant_id = 201) const bool scbt = true; +layout(constant_id = 202) const int sci2 = 2; + +void main() +{ + bool(scf1); // not a spec-const + bool(scbt); // spec-const + bool(sci2); // spec-const + + float(scf1); // not a spec-const + float(scbt); // not a spec-const + float(sci2); // not a spec-const + + int(scf1); // not a spec-const + int(scbt); // spec-const + int(sci2); // spec-const + + scf1 * scf1; // not a spec-const + scbt || scbt; // spec-const + sci2 * sci2; // spec-const + scf1 + sci2; // implicit conversion not a spec-const + + -scf1; // not a spec-const + !scbt; // spec-const + -sci2; // spec-const + + scf1 > scf1; // not a spec-const + sci2 > sci2; // spec-const + + scf1 != scf1; // not a spec-const + scbt != scbt; // spec-const + sci2 != sci2; // spec-const + + ivec2(sci2, sci2); // spec-const + ivec2[2](ivec2(sci2, sci2), ivec2(sci2, sci2)); // not a spec-const + + vec2(scf1, scf1); // not spec-const + vec2[2](vec2(scf1, scf1), vec2(scf1, scf1)); // not a spec-const +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/vulkan.comp b/3rdparty/bgfx/3rdparty/glslang/Test/vulkan.comp new file mode 100644 index 0000000..6b6f4cf --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/vulkan.comp @@ -0,0 +1,12 @@ +#version 450 + +layout(local_size_x_id = 18, local_size_z_id = 19) in; +layout(local_size_x = 32, local_size_y = 32) in; +layout(local_size_z_id = 14) in; // ERROR, can't change this + +void main() +{ + gl_WorkGroupSize; +} + +layout(local_size_y_id = 19) in; // ERROR, already used: TODO not yet reported diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/vulkan.frag b/3rdparty/bgfx/3rdparty/glslang/Test/vulkan.frag new file mode 100644 index 0000000..2b686eb --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/vulkan.frag @@ -0,0 +1,97 @@ +#version 450 + +uniform sampler s; +uniform sampler sA[4]; +uniform texture2D t2d; +uniform texture3D t3d[4]; +int i; +uniform samplerShadow sShadow; +uniform texture3D t3d5[5]; +writeonly uniform image2D i2d; + +void badConst() +{ + sampler2D(t2d); // ERROR, need 2 args + sampler2D(s, s); // ERROR, wrong type + sampler2D(i, i); // ERROR, wrong type + sampler2D(t2d, i); // ERROR, wrong type + sampler2D(t2d, t2d); // ERROR, wrong type + sampler2D(t2d, sA); // ERROR, wrong type + + sampler3D[4](t3d5, sA[2]); // ERROR, can't make array + sampler2D(i2d, s); // ERROR, image instead of texture + sampler2D(t3d[1], s); // ERROR, 3D not 2D + sampler2D(t2d, sShadow); // ERROR, shadow mismatch + sampler2DShadow(t2d, s); // ERROR, shadow mismatch +} + +sampler2D s2D = sampler2D(t2d, s); // ERROR, no sampler constructor +sampler3D s3d[4] = sampler3D[4](t3d, sA[2]); // ERROR, no sampler constructor + +out vec4 color; + +void main() +{ + color = texture(s2D, vec2(0.5)); + color += texture(s3d[i], vec3(0.5)); +} + +layout(push_constant) buffer pcb { // ERROR, not on a buffer + int a; +} pcbInst; + +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(push_constant) uniform pcb2 { + int a; +}; // Okay now to have no instance name + +layout(input_attachment_index = 2) uniform subpassInput subD; +layout(input_attachment_index = 3) uniform texture2D subDbad1; // ERROR, not a texture +layout(input_attachment_index = 4) writeonly uniform image2D subDbad2; // ERROR, not an image +uniform subpassInput subDbad3; // ERROR, need attachment number +layout(input_attachment_index = 2) uniform subpassInputMS subDMS; + +void foo() +{ + vec4 v = subpassLoad(subD); + v += subpassLoadMS(subD); // ERROR, no such function + v += subpassLoad(subD, 2); // ERROR, no such sig. + v += subpassLoad(subDMS, 2); + v += subpassLoadMS(subDMS, 2); // ERROR, no such function +} + +subroutine int fooS; // ERROR, not in SPV +subroutine int fooSub(); // ERROR, not in SPV + +uniform vec4 dv4; // ERROR, no default uniforms + +void fooTex() +{ + texture(t2d, vec2(1.0)); // ERROR, need a sampler, not a pure texture + imageStore(t2d, ivec2(4, 5), vec4(1.2)); // ERROR, need an image, not a pure texture +} + +precision highp float; + +layout(location=0) in vec2 vTexCoord; +layout(location=0) out vec4 FragColor; + +vec4 userTexture(mediump sampler2D samp, vec2 coord) +{ + return texture(samp, coord); +} + +bool cond; + +void callUserTexture() +{ + userTexture(sampler2D(t2d,s), vTexCoord); // ERROR, not point of use + userTexture((sampler2D(t2d,s)), vTexCoord); // ERROR, not point of use + userTexture((sampler2D(t2d,s), sampler2D(t2d,s)), vTexCoord); // ERROR, not point of use + userTexture(cond ? sampler2D(t2d,s) : sampler2D(t2d,s), vTexCoord); // ERROR, no ?:, not point of use + + gl_NumSamples; // ERROR, not for Vulkan +} diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/vulkan.vert b/3rdparty/bgfx/3rdparty/glslang/Test/vulkan.vert new file mode 100644 index 0000000..b234c75 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/vulkan.vert @@ -0,0 +1,47 @@ +#version 450 + +layout(input_attachment_index = 2) uniform subpassInput subD1; // ERROR, not this stage +layout(input_attachment_index = 2) uniform isubpassInput subD2; // ERROR, not this stage +layout(input_attachment_index = 2) uniform usubpassInput subD3; // ERROR, not this stage +layout(input_attachment_index = 2) uniform subpassInputMS subD4; // ERROR, not this stage +layout(input_attachment_index = 2) uniform isubpassInputMS subD5; // ERROR, not this stage +layout(input_attachment_index = 2) uniform usubpassInputMS subD6; // ERROR, not this stage + +out vec4 color; + +layout(constant_id = 17) const ivec2 arraySizes = ivec2(12,13); // ERROR, not a scalar +layout(constant_id = 17) uniform sampler2D s2D; // ERROR, not the right type or qualifier +layout(constant_id = 4000) const int c1 = 12; // ERROR, too big +layout(constant_id = 4) const float c2[2] = float[2](1.0, 2.0); // ERROR, not a scalar +layout(constant_id = 4) in; + +void main() +{ + color = subpassLoad(subD1); // ERROR, no such function in this stage +} + +layout(binding = 0) uniform atomic_uint aui; // ERROR, no atomics in Vulkan +layout(shared) uniform ub1n { int a; } ub1i; // ERROR, no shared +layout(packed) uniform ub2n { int a; } ub2i; // ERROR, no packed + +layout(constant_id=222) const int arraySize = 4; + +void foo() +{ + int a1[arraySize]; + int a2[arraySize] = a1; // ERROR, can't use in initializer + + a1 = a2; // ERROR, can't assign, even though the same type + if (a1 == a2) // ERROR, can't compare either + ++color; +} + +layout(set = 1, push_constant) uniform badpc { int a; } badpcI; // ERROR, no descriptor set with push_constant + +#ifndef VULKAN +#error VULKAN should be defined +#endif + +#if VULKAN != 100 +#error VULKAN should be 100 +#endif diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/whileLoop.frag b/3rdparty/bgfx/3rdparty/glslang/Test/whileLoop.frag new file mode 100644 index 0000000..a9541f9 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/Test/whileLoop.frag @@ -0,0 +1,16 @@ +#version 110 + +uniform vec4 bigColor; +varying vec4 BaseColor; +uniform float d; + +void main() +{ + vec4 color = BaseColor; + + while (color.x < d) { + color += bigColor; + } + + gl_FragColor = color; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/CMakeLists.txt b/3rdparty/bgfx/3rdparty/glslang/glslang/CMakeLists.txt new file mode 100644 index 0000000..dac8cb8 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/CMakeLists.txt @@ -0,0 +1,104 @@ +if(WIN32) + add_subdirectory(OSDependent/Windows) +elseif(UNIX) + add_subdirectory(OSDependent/Unix) +else(WIN32) + message("unknown platform") +endif(WIN32) + +set(SOURCES + MachineIndependent/glslang.y + MachineIndependent/glslang_tab.cpp + MachineIndependent/Constant.cpp + MachineIndependent/iomapper.cpp + MachineIndependent/InfoSink.cpp + MachineIndependent/Initialize.cpp + MachineIndependent/IntermTraverse.cpp + MachineIndependent/Intermediate.cpp + MachineIndependent/ParseContextBase.cpp + MachineIndependent/ParseHelper.cpp + MachineIndependent/PoolAlloc.cpp + MachineIndependent/RemoveTree.cpp + MachineIndependent/Scan.cpp + MachineIndependent/ShaderLang.cpp + MachineIndependent/SymbolTable.cpp + MachineIndependent/Versions.cpp + MachineIndependent/intermOut.cpp + MachineIndependent/limits.cpp + MachineIndependent/linkValidate.cpp + MachineIndependent/parseConst.cpp + MachineIndependent/reflection.cpp + 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 + GenericCodeGen/Link.cpp) + +set(HEADERS + Public/ShaderLang.h + Include/arrays.h + Include/BaseTypes.h + Include/Common.h + Include/ConstantUnion.h + Include/InfoSink.h + Include/InitializeGlobals.h + Include/intermediate.h + Include/PoolAlloc.h + Include/ResourceLimits.h + Include/revision.h + Include/ShHandle.h + Include/Types.h + MachineIndependent/glslang_tab.cpp.h + MachineIndependent/gl_types.h + MachineIndependent/Initialize.h + MachineIndependent/iomapper.h + MachineIndependent/LiveTraverser.h + MachineIndependent/localintermediate.h + MachineIndependent/ParseHelper.h + MachineIndependent/reflection.h + MachineIndependent/RemoveTree.h + MachineIndependent/Scan.h + MachineIndependent/ScanContext.h + MachineIndependent/SymbolTable.h + MachineIndependent/Versions.h + MachineIndependent/parseVersions.h + MachineIndependent/propagateNoContraction.h + MachineIndependent/preprocessor/PpContext.h + MachineIndependent/preprocessor/PpTokens.h) + +# This might be useful for making grammar changes: +# +# find_package(BISON) +# add_custom_command(OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/MachineIndependent/glslang_tab.cpp ${CMAKE_CURRENT_SOURCE_DIR}/MachineIndependent/glslang_tab.cpp.h +# COMMAND ${BISON_EXECUTABLE} --defines=${CMAKE_CURRENT_SOURCE_DIR}/MachineIndependent/glslang_tab.cpp.h -t ${CMAKE_CURRENT_SOURCE_DIR}/MachineIndependent/glslang.y -o ${CMAKE_CURRENT_SOURCE_DIR}/MachineIndependent/glslang_tab.cpp +# MAIN_DEPENDENCY MachineIndependent/glslang.y +# WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) +# set(BISON_GLSLParser_OUTPUT_SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/MachineIndependent/glslang_tab.cpp) + +add_library(glslang STATIC ${BISON_GLSLParser_OUTPUT_SOURCE} ${SOURCES} ${HEADERS}) +set_property(TARGET glslang PROPERTY FOLDER glslang) +target_link_libraries(glslang OGLCompiler OSDependent) +if(ENABLE_HLSL) + target_link_libraries(glslang HLSL) +endif() + +if(WIN32) + source_group("Public" REGULAR_EXPRESSION "Public/*") + source_group("MachineIndependent" REGULAR_EXPRESSION "MachineIndependent/[^/]*") + source_group("Include" REGULAR_EXPRESSION "Include/[^/]*") + source_group("GenericCodeGen" REGULAR_EXPRESSION "GenericCodeGen/*") + source_group("MachineIndependent\\Preprocessor" REGULAR_EXPRESSION "MachineIndependent/preprocessor/*") +endif(WIN32) + +install(TARGETS glslang + ARCHIVE DESTINATION lib) + +foreach(file ${HEADERS}) + get_filename_component(dir ${file} DIRECTORY) + install(FILES ${file} DESTINATION include/glslang/${dir}) +endforeach() diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/GenericCodeGen/CodeGen.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/GenericCodeGen/CodeGen.cpp new file mode 100644 index 0000000..b3c7226 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/GenericCodeGen/CodeGen.cpp @@ -0,0 +1,76 @@ +// +// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +// 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. +// + +#include "../Include/Common.h" +#include "../Include/ShHandle.h" +#include "../MachineIndependent/Versions.h" + +// +// Here is where real machine specific high-level data would be defined. +// +class TGenericCompiler : public TCompiler { +public: + TGenericCompiler(EShLanguage l, int dOptions) : TCompiler(l, infoSink), debugOptions(dOptions) { } + virtual bool compile(TIntermNode* root, int version = 0, EProfile profile = ENoProfile); + TInfoSink infoSink; + int debugOptions; +}; + +// +// This function must be provided to create the actual +// compile object used by higher level code. It returns +// a subclass of TCompiler. +// +TCompiler* ConstructCompiler(EShLanguage language, int debugOptions) +{ + return new TGenericCompiler(language, debugOptions); +} + +// +// Delete the compiler made by ConstructCompiler +// +void DeleteCompiler(TCompiler* compiler) +{ + delete compiler; +} + +// +// Generate code from the given parse tree +// +bool TGenericCompiler::compile(TIntermNode* /*root*/, int /*version*/, EProfile /*profile*/) +{ + haveValidObjectCode = true; + + return haveValidObjectCode; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/GenericCodeGen/Link.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/GenericCodeGen/Link.cpp new file mode 100644 index 0000000..c38db0f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/GenericCodeGen/Link.cpp @@ -0,0 +1,91 @@ +// +// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +// 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. +// + +// +// The top level algorithms for linking multiple +// shaders together. +// +#include "../Include/Common.h" +#include "../Include/ShHandle.h" + +// +// Actual link object, derived from the shader handle base classes. +// +class TGenericLinker : public TLinker { +public: + TGenericLinker(EShExecutable e, int dOptions) : TLinker(e, infoSink), debugOptions(dOptions) { } + bool link(TCompilerList&, TUniformMap*) { return true; } + void getAttributeBindings(ShBindingTable const **) const { } + TInfoSink infoSink; + int debugOptions; +}; + +// +// The internal view of a uniform/float object exchanged with the driver. +// +class TUniformLinkedMap : public TUniformMap { +public: + TUniformLinkedMap() { } + virtual int getLocation(const char*) { return 0; } +}; + +TShHandleBase* ConstructLinker(EShExecutable executable, int debugOptions) +{ + return new TGenericLinker(executable, debugOptions); +} + +void DeleteLinker(TShHandleBase* linker) +{ + delete linker; +} + +TUniformMap* ConstructUniformMap() +{ + return new TUniformLinkedMap(); +} + +void DeleteUniformMap(TUniformMap* map) +{ + delete map; +} + +TShHandleBase* ConstructBindings() +{ + return 0; +} + +void DeleteBindingList(TShHandleBase* bindingList) +{ + delete bindingList; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/Include/BaseTypes.h b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/BaseTypes.h new file mode 100644 index 0000000..230a6b9 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/BaseTypes.h @@ -0,0 +1,368 @@ +// +// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +// Copyright (C) 2012-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. +// + +#ifndef _BASICTYPES_INCLUDED_ +#define _BASICTYPES_INCLUDED_ + +namespace glslang { + +// +// Basic type. Arrays, vectors, sampler details, etc., are orthogonal to this. +// +enum TBasicType { + EbtVoid, + EbtFloat, + EbtDouble, +#ifdef AMD_EXTENSIONS + EbtFloat16, +#endif + EbtInt, + EbtUint, + EbtInt64, + EbtUint64, + EbtBool, + EbtAtomicUint, + EbtSampler, + EbtStruct, + EbtBlock, + + // HLSL types that live only temporarily. + EbtString, + + EbtNumTypes +}; + +// +// Storage qualifiers. Should align with different kinds of storage or +// resource or GLSL storage qualifier. Expansion is deprecated. +// +// N.B.: You probably DON'T want to add anything here, but rather just add it +// to the built-in variables. See the comment above TBuiltInVariable. +// +// A new built-in variable will normally be an existing qualifier, like 'in', 'out', etc. +// DO NOT follow the design pattern of, say EvqInstanceId, etc. +// +enum TStorageQualifier { + EvqTemporary, // For temporaries (within a function), read/write + EvqGlobal, // For globals read/write + EvqConst, // User-defined constant values, will be semantically constant and constant folded + EvqVaryingIn, // pipeline input, read only, also supercategory for all built-ins not included in this enum (see TBuiltInVariable) + EvqVaryingOut, // pipeline output, read/write, also supercategory for all built-ins not included in this enum (see TBuiltInVariable) + EvqUniform, // read only, shared with app + EvqBuffer, // read/write, shared with app + EvqShared, // compute shader's read/write 'shared' qualifier + + // parameters + EvqIn, // also, for 'in' in the grammar before we know if it's a pipeline input or an 'in' parameter + EvqOut, // also, for 'out' in the grammar before we know if it's a pipeline output or an 'out' parameter + EvqInOut, + EvqConstReadOnly, // input; also other read-only types having neither a constant value nor constant-value semantics + + // built-ins read by vertex shader + EvqVertexId, + EvqInstanceId, + + // built-ins written by vertex shader + EvqPosition, + EvqPointSize, + EvqClipVertex, + + // built-ins read by fragment shader + EvqFace, + EvqFragCoord, + EvqPointCoord, + + // built-ins written by fragment shader + EvqFragColor, + EvqFragDepth, + + // end of list + EvqLast +}; + +// +// Subcategories of the TStorageQualifier, simply to give a direct mapping +// between built-in variable names and an numerical value (the enum). +// +// For backward compatibility, there is some redundancy between the +// TStorageQualifier and these. Existing members should both be maintained accurately. +// However, any new built-in variable (and any existing non-redundant one) +// must follow the pattern that the specific built-in is here, and only its +// general qualifier is in TStorageQualifier. +// +// Something like gl_Position, which is sometimes 'in' and sometimes 'out' +// shows up as two different built-in variables in a single stage, but +// only has a single enum in TBuiltInVariable, so both the +// TStorageQualifier and the TBuitinVariable are needed to distinguish +// between them. +// +enum TBuiltInVariable { + EbvNone, + EbvNumWorkGroups, + EbvWorkGroupSize, + EbvWorkGroupId, + EbvLocalInvocationId, + EbvGlobalInvocationId, + EbvLocalInvocationIndex, + EbvSubGroupSize, + EbvSubGroupInvocation, + EbvSubGroupEqMask, + EbvSubGroupGeMask, + EbvSubGroupGtMask, + EbvSubGroupLeMask, + EbvSubGroupLtMask, + EbvVertexId, + EbvInstanceId, + EbvVertexIndex, + EbvInstanceIndex, + EbvBaseVertex, + EbvBaseInstance, + EbvDrawId, + EbvPosition, + EbvPointSize, + EbvClipVertex, + EbvClipDistance, + EbvCullDistance, + EbvNormal, + EbvVertex, + EbvMultiTexCoord0, + EbvMultiTexCoord1, + EbvMultiTexCoord2, + EbvMultiTexCoord3, + EbvMultiTexCoord4, + EbvMultiTexCoord5, + EbvMultiTexCoord6, + EbvMultiTexCoord7, + EbvFrontColor, + EbvBackColor, + EbvFrontSecondaryColor, + EbvBackSecondaryColor, + EbvTexCoord, + EbvFogFragCoord, + EbvInvocationId, + EbvPrimitiveId, + EbvLayer, + EbvViewportIndex, + EbvPatchVertices, + EbvTessLevelOuter, + EbvTessLevelInner, + EbvBoundingBox, + EbvTessCoord, + EbvColor, + EbvSecondaryColor, + EbvFace, + EbvFragCoord, + EbvPointCoord, + EbvFragColor, + EbvFragData, + EbvFragDepth, + EbvSampleId, + EbvSamplePosition, + EbvSampleMask, + EbvHelperInvocation, +#ifdef AMD_EXTENSIONS + EbvBaryCoordNoPersp, + EbvBaryCoordNoPerspCentroid, + EbvBaryCoordNoPerspSample, + EbvBaryCoordSmooth, + EbvBaryCoordSmoothCentroid, + EbvBaryCoordSmoothSample, + EbvBaryCoordPullModel, +#endif + + EbvViewIndex, + EbvDeviceIndex, + +#ifdef NV_EXTENSIONS + EbvViewportMaskNV, + EbvSecondaryPositionNV, + EbvSecondaryViewportMaskNV, + EbvPositionPerViewNV, + EbvViewportMaskPerViewNV, +#endif + + // HLSL built-ins that live only temporarily, until they get remapped + // to one of the above. + EbvFragDepthGreater, + EbvFragDepthLesser, + EbvStencilRef, + + EbvLast +}; + +// These will show up in error messages +__inline const char* GetStorageQualifierString(TStorageQualifier q) +{ + switch (q) { + case EvqTemporary: return "temp"; break; + case EvqGlobal: return "global"; break; + case EvqConst: return "const"; break; + case EvqConstReadOnly: return "const (read only)"; break; + case EvqVaryingIn: return "in"; break; + case EvqVaryingOut: return "out"; break; + case EvqUniform: return "uniform"; break; + case EvqBuffer: return "buffer"; break; + case EvqShared: return "shared"; break; + case EvqIn: return "in"; break; + case EvqOut: return "out"; break; + case EvqInOut: return "inout"; break; + case EvqVertexId: return "gl_VertexId"; break; + case EvqInstanceId: return "gl_InstanceId"; break; + case EvqPosition: return "gl_Position"; break; + case EvqPointSize: return "gl_PointSize"; break; + case EvqClipVertex: return "gl_ClipVertex"; break; + case EvqFace: return "gl_FrontFacing"; break; + case EvqFragCoord: return "gl_FragCoord"; break; + case EvqPointCoord: return "gl_PointCoord"; break; + case EvqFragColor: return "fragColor"; break; + case EvqFragDepth: return "gl_FragDepth"; break; + default: return "unknown qualifier"; + } +} + +__inline const char* GetBuiltInVariableString(TBuiltInVariable v) +{ + switch (v) { + case EbvNone: return ""; + case EbvNumWorkGroups: return "NumWorkGroups"; + case EbvWorkGroupSize: return "WorkGroupSize"; + case EbvWorkGroupId: return "WorkGroupID"; + case EbvLocalInvocationId: return "LocalInvocationID"; + case EbvGlobalInvocationId: return "GlobalInvocationID"; + case EbvLocalInvocationIndex: return "LocalInvocationIndex"; + case EbvSubGroupSize: return "SubGroupSize"; + case EbvSubGroupInvocation: return "SubGroupInvocation"; + case EbvSubGroupEqMask: return "SubGroupEqMask"; + case EbvSubGroupGeMask: return "SubGroupGeMask"; + case EbvSubGroupGtMask: return "SubGroupGtMask"; + case EbvSubGroupLeMask: return "SubGroupLeMask"; + case EbvSubGroupLtMask: return "SubGroupLtMask"; + case EbvVertexId: return "VertexId"; + case EbvInstanceId: return "InstanceId"; + case EbvVertexIndex: return "VertexIndex"; + case EbvInstanceIndex: return "InstanceIndex"; + case EbvBaseVertex: return "BaseVertex"; + case EbvBaseInstance: return "BaseInstance"; + case EbvDrawId: return "DrawId"; + case EbvPosition: return "Position"; + case EbvPointSize: return "PointSize"; + case EbvClipVertex: return "ClipVertex"; + case EbvClipDistance: return "ClipDistance"; + case EbvCullDistance: return "CullDistance"; + case EbvNormal: return "Normal"; + case EbvVertex: return "Vertex"; + case EbvMultiTexCoord0: return "MultiTexCoord0"; + case EbvMultiTexCoord1: return "MultiTexCoord1"; + case EbvMultiTexCoord2: return "MultiTexCoord2"; + case EbvMultiTexCoord3: return "MultiTexCoord3"; + case EbvMultiTexCoord4: return "MultiTexCoord4"; + case EbvMultiTexCoord5: return "MultiTexCoord5"; + case EbvMultiTexCoord6: return "MultiTexCoord6"; + case EbvMultiTexCoord7: return "MultiTexCoord7"; + case EbvFrontColor: return "FrontColor"; + case EbvBackColor: return "BackColor"; + case EbvFrontSecondaryColor: return "FrontSecondaryColor"; + case EbvBackSecondaryColor: return "BackSecondaryColor"; + case EbvTexCoord: return "TexCoord"; + case EbvFogFragCoord: return "FogFragCoord"; + case EbvInvocationId: return "InvocationID"; + case EbvPrimitiveId: return "PrimitiveID"; + case EbvLayer: return "Layer"; + case EbvViewportIndex: return "ViewportIndex"; + case EbvPatchVertices: return "PatchVertices"; + case EbvTessLevelOuter: return "TessLevelOuter"; + case EbvTessLevelInner: return "TessLevelInner"; + case EbvBoundingBox: return "BoundingBox"; + case EbvTessCoord: return "TessCoord"; + case EbvColor: return "Color"; + case EbvSecondaryColor: return "SecondaryColor"; + case EbvFace: return "Face"; + case EbvFragCoord: return "FragCoord"; + case EbvPointCoord: return "PointCoord"; + case EbvFragColor: return "FragColor"; + case EbvFragData: return "FragData"; + case EbvFragDepth: return "FragDepth"; + 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"; + case EbvBaryCoordNoPerspSample: return "BaryCoordNoPerspSample"; + case EbvBaryCoordSmooth: return "BaryCoordSmooth"; + case EbvBaryCoordSmoothCentroid: return "BaryCoordSmoothCentroid"; + case EbvBaryCoordSmoothSample: return "BaryCoordSmoothSample"; + case EbvBaryCoordPullModel: return "BaryCoordPullModel"; +#endif + + case EbvViewIndex: return "ViewIndex"; + case EbvDeviceIndex: return "DeviceIndex"; + +#ifdef NV_EXTENSIONS + case EbvViewportMaskNV: return "ViewportMaskNV"; + case EbvSecondaryPositionNV: return "SecondaryPositionNV"; + case EbvSecondaryViewportMaskNV: return "SecondaryViewportMaskNV"; + case EbvPositionPerViewNV: return "PositionPerViewNV"; + case EbvViewportMaskPerViewNV: return "ViewportMaskPerViewNV"; +#endif + default: return "unknown built-in variable"; + } +} + +// In this enum, order matters; users can assume higher precision is a bigger value +// and EpqNone is 0. +enum TPrecisionQualifier { + EpqNone = 0, + EpqLow, + EpqMedium, + EpqHigh +}; + +__inline const char* GetPrecisionQualifierString(TPrecisionQualifier p) +{ + switch(p) { + case EpqNone: return ""; break; + case EpqLow: return "lowp"; break; + case EpqMedium: return "mediump"; break; + case EpqHigh: return "highp"; break; + default: return "unknown precision qualifier"; + } +} + +} // end namespace glslang + +#endif // _BASICTYPES_INCLUDED_ diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/Include/Common.h b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/Common.h new file mode 100644 index 0000000..17c2bd9 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/Common.h @@ -0,0 +1,266 @@ +// +// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +// Copyright (C) 2012-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. +// + +#ifndef _COMMON_INCLUDED_ +#define _COMMON_INCLUDED_ + +#if (defined(_MSC_VER) && _MSC_VER < 1900 /*vs2015*/) // || defined MINGW_HAS_SECURE_API + #include + #define snprintf sprintf_s + #define safe_vsprintf(buf,max,format,args) vsnprintf_s((buf), (max), (max), (format), (args)) +#elif defined (solaris) + #define safe_vsprintf(buf,max,format,args) vsnprintf((buf), (max), (format), (args)) + #include + #define UINT_PTR uintptr_t +#else + #define safe_vsprintf(buf,max,format,args) vsnprintf((buf), (max), (format), (args)) + #include + #define UINT_PTR uintptr_t +#endif + +#if defined(__ANDROID__) || _MSC_VER < 1700 +#include +namespace std { +template +std::string to_string(const T& val) { + std::ostringstream os; + os << val; + return os.str(); +} +} +#endif + +#if defined(_MSC_VER) && _MSC_VER < 1700 +inline long long int strtoll (const char* str, char** endptr, int base) +{ + return _strtoi64(str, endptr, base); +} +inline unsigned long long int strtoull (const char* str, char** endptr, int base) +{ + return _strtoui64(str, endptr, base); +} +inline long long int atoll (const char* str) +{ + return strtoll(str, NULL, 10); +} +#endif + +/* windows only pragma */ +#ifdef _MSC_VER + #pragma warning(disable : 4786) // Don't warn about too long identifiers + #pragma warning(disable : 4514) // unused inline method + #pragma warning(disable : 4201) // nameless union +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "PoolAlloc.h" + +// +// Put POOL_ALLOCATOR_NEW_DELETE in base classes to make them use this scheme. +// +#define POOL_ALLOCATOR_NEW_DELETE(A) \ + void* operator new(size_t s) { return (A).allocate(s); } \ + void* operator new(size_t, void *_Where) { return (_Where); } \ + void operator delete(void*) { } \ + void operator delete(void *, void *) { } \ + void* operator new[](size_t s) { return (A).allocate(s); } \ + void* operator new[](size_t, void *_Where) { return (_Where); } \ + void operator delete[](void*) { } \ + void operator delete[](void *, void *) { } + +namespace glslang { + + // + // Pool version of string. + // + typedef pool_allocator TStringAllocator; + typedef std::basic_string , TStringAllocator> TString; + +} // end namespace glslang + +// Repackage the std::hash for use by unordered map/set with a TString key. +namespace std { + + template<> struct hash { + std::size_t operator()(const glslang::TString& s) const + { + const unsigned _FNV_offset_basis = 2166136261U; + const unsigned _FNV_prime = 16777619U; + unsigned _Val = _FNV_offset_basis; + size_t _Count = s.size(); + const char* _First = s.c_str(); + for (size_t _Next = 0; _Next < _Count; ++_Next) + { + _Val ^= (unsigned)_First[_Next]; + _Val *= _FNV_prime; + } + + return _Val; + } + }; +} + +namespace glslang { + +inline TString* NewPoolTString(const char* s) +{ + void* memory = GetThreadPoolAllocator().allocate(sizeof(TString)); + return new(memory) TString(s); +} + +template inline T* NewPoolObject(T) +{ + return new(GetThreadPoolAllocator().allocate(sizeof(T))) T; +} + +template inline T* NewPoolObject(T, int instances) +{ + return new(GetThreadPoolAllocator().allocate(instances * sizeof(T))) T[instances]; +} + +// +// Pool allocator versions of vectors, lists, and maps +// +template class TVector : public std::vector > { +public: + POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator()) + + typedef typename std::vector >::size_type size_type; + TVector() : std::vector >() {} + TVector(const pool_allocator& a) : std::vector >(a) {} + TVector(size_type i) : std::vector >(i) {} + TVector(size_type i, const T& val) : std::vector >(i, val) {} +}; + +template class TList : public std::list > { +}; + +template > +class TMap : public std::map > > { +}; + +template , class PRED = std::equal_to > +class TUnorderedMap : public std::unordered_map > > { +}; + +// +// Persistent string memory. Should only be used for strings that survive +// across compiles/links. +// +typedef std::basic_string TPersistString; + +// +// templatized min and max functions. +// +template T Min(const T a, const T b) { return a < b ? a : b; } +template T Max(const T a, const T b) { return a > b ? a : b; } + +// +// Create a TString object from an integer. +// +#if defined _MSC_VER || defined MINGW_HAS_SECURE_API +inline const TString String(const int i, const int base = 10) +{ + char text[16]; // 32 bit ints are at most 10 digits in base 10 + _itoa_s(i, text, sizeof(text), base); + return text; +} +#else +inline const TString String(const int i, const int /*base*/ = 10) +{ + char text[16]; // 32 bit ints are at most 10 digits in base 10 + + // we assume base 10 for all cases + snprintf(text, sizeof(text), "%d", i); + + return text; +} +#endif + +struct TSourceLoc { + void init() { name = nullptr; string = 0; line = 0; column = 0; } + // Returns the name if it exists. Otherwise, returns the string number. + std::string getStringNameOrNum(bool quoteStringName = true) const + { + if (name != nullptr) + return quoteStringName ? ("\"" + std::string(name) + "\"") : name; + return std::to_string((long long)string); + } + const char* name; // descriptive name for this string + int string; + int line; + int column; +}; + +typedef TMap TPragmaTable; + +const int MaxTokenLength = 1024; + +template bool IsPow2(T powerOf2) +{ + if (powerOf2 <= 0) + return false; + + return (powerOf2 & (powerOf2 - 1)) == 0; +} + +// Round number up to a multiple of the given powerOf2, which is not +// a power, just a number that must be a power of 2. +template void RoundToPow2(T& number, int powerOf2) +{ + assert(IsPow2(powerOf2)); + number = (number + powerOf2 - 1) & ~(powerOf2 - 1); +} + +template bool IsMultipleOfPow2(T number, int powerOf2) +{ + assert(IsPow2(powerOf2)); + return ! (number & (powerOf2 - 1)); +} + +} // end namespace glslang + +#endif // _COMMON_INCLUDED_ diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/Include/ConstantUnion.h b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/ConstantUnion.h new file mode 100644 index 0000000..f66a7ff --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/ConstantUnion.h @@ -0,0 +1,625 @@ +// +// 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. +// + +#ifndef _CONSTANT_UNION_INCLUDED_ +#define _CONSTANT_UNION_INCLUDED_ + +namespace glslang { + +class TConstUnion { +public: + POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator()) + + TConstUnion() : iConst(0), type(EbtInt) { } + + void setIConst(int i) + { + iConst = i; + type = EbtInt; + } + + void setUConst(unsigned int u) + { + uConst = u; + type = EbtUint; + } + + void setI64Const(long long i64) + { + i64Const = i64; + type = EbtInt64; + } + + void setU64Const(unsigned long long u64) + { + u64Const = u64; + type = EbtUint64; + } + + void setDConst(double d) + { + dConst = d; + type = EbtDouble; + } + + void setBConst(bool b) + { + bConst = b; + type = EbtBool; + } + + void setSConst(const TString* s) + { + sConst = s; + type = EbtString; + } + + int getIConst() const { return iConst; } + unsigned int getUConst() const { return uConst; } + long long getI64Const() const { return i64Const; } + unsigned long long getU64Const() const { return u64Const; } + double getDConst() const { return dConst; } + bool getBConst() const { return bConst; } + const TString* getSConst() const { return sConst; } + + bool operator==(const int i) const + { + if (i == iConst) + return true; + + return false; + } + + bool operator==(const unsigned int u) const + { + if (u == uConst) + return true; + + return false; + } + + bool operator==(const long long i64) const + { + if (i64 == i64Const) + return true; + + return false; + } + + bool operator==(const unsigned long long u64) const + { + if (u64 == u64Const) + return true; + + return false; + } + + bool operator==(const double d) const + { + if (d == dConst) + return true; + + return false; + } + + bool operator==(const bool b) const + { + if (b == bConst) + return true; + + return false; + } + + bool operator==(const TConstUnion& constant) const + { + if (constant.type != type) + return false; + + switch (type) { + case EbtInt: + if (constant.iConst == iConst) + return true; + + break; + case EbtUint: + if (constant.uConst == uConst) + return true; + + break; + case EbtInt64: + if (constant.i64Const == i64Const) + return true; + + break; + case EbtUint64: + if (constant.u64Const == u64Const) + return true; + + break; + case EbtDouble: + if (constant.dConst == dConst) + return true; + + break; + case EbtBool: + if (constant.bConst == bConst) + return true; + + break; + default: + assert(false && "Default missing"); + } + + return false; + } + + bool operator!=(const int i) const + { + return !operator==(i); + } + + bool operator!=(const unsigned int u) const + { + return !operator==(u); + } + + bool operator!=(const long long i) const + { + return !operator==(i); + } + + bool operator!=(const unsigned long long u) const + { + return !operator==(u); + } + + bool operator!=(const float f) const + { + return !operator==(f); + } + + bool operator!=(const bool b) const + { + return !operator==(b); + } + + bool operator!=(const TConstUnion& constant) const + { + return !operator==(constant); + } + + bool operator>(const TConstUnion& constant) const + { + assert(type == constant.type); + switch (type) { + case EbtInt: + if (iConst > constant.iConst) + return true; + + return false; + case EbtUint: + if (uConst > constant.uConst) + return true; + + return false; + case EbtInt64: + if (i64Const > constant.i64Const) + return true; + + return false; + case EbtUint64: + if (u64Const > constant.u64Const) + return true; + + return false; + case EbtDouble: + if (dConst > constant.dConst) + return true; + + return false; + default: + assert(false && "Default missing"); + return false; + } + } + + bool operator<(const TConstUnion& constant) const + { + assert(type == constant.type); + switch (type) { + case EbtInt: + if (iConst < constant.iConst) + return true; + + return false; + case EbtUint: + if (uConst < constant.uConst) + return true; + + return false; + case EbtInt64: + if (i64Const < constant.i64Const) + return true; + + return false; + case EbtUint64: + if (u64Const < constant.u64Const) + return true; + + return false; + case EbtDouble: + if (dConst < constant.dConst) + return true; + + return false; + default: + assert(false && "Default missing"); + return false; + } + } + + TConstUnion operator+(const TConstUnion& constant) const + { + TConstUnion returnValue; + assert(type == constant.type); + switch (type) { + case EbtInt: returnValue.setIConst(iConst + constant.iConst); break; + case EbtInt64: returnValue.setI64Const(i64Const + constant.i64Const); break; + case EbtUint: returnValue.setUConst(uConst + constant.uConst); break; + case EbtUint64: returnValue.setU64Const(u64Const + constant.u64Const); break; + case EbtDouble: returnValue.setDConst(dConst + constant.dConst); break; + default: assert(false && "Default missing"); + } + + return returnValue; + } + + TConstUnion operator-(const TConstUnion& constant) const + { + TConstUnion returnValue; + assert(type == constant.type); + switch (type) { + case EbtInt: returnValue.setIConst(iConst - constant.iConst); break; + case EbtInt64: returnValue.setI64Const(i64Const - constant.i64Const); break; + case EbtUint: returnValue.setUConst(uConst - constant.uConst); break; + case EbtUint64: returnValue.setU64Const(u64Const - constant.u64Const); break; + case EbtDouble: returnValue.setDConst(dConst - constant.dConst); break; + default: assert(false && "Default missing"); + } + + return returnValue; + } + + TConstUnion operator*(const TConstUnion& constant) const + { + TConstUnion returnValue; + assert(type == constant.type); + switch (type) { + case EbtInt: returnValue.setIConst(iConst * constant.iConst); break; + case EbtInt64: returnValue.setI64Const(i64Const * constant.i64Const); break; + case EbtUint: returnValue.setUConst(uConst * constant.uConst); break; + case EbtUint64: returnValue.setU64Const(u64Const * constant.u64Const); break; + case EbtDouble: returnValue.setDConst(dConst * constant.dConst); break; + default: assert(false && "Default missing"); + } + + return returnValue; + } + + TConstUnion operator%(const TConstUnion& constant) const + { + TConstUnion returnValue; + assert(type == constant.type); + switch (type) { + case EbtInt: returnValue.setIConst(iConst % constant.iConst); break; + case EbtInt64: returnValue.setI64Const(i64Const % constant.i64Const); break; + case EbtUint: returnValue.setUConst(uConst % constant.uConst); break; + case EbtUint64: returnValue.setU64Const(u64Const % constant.u64Const); break; + default: assert(false && "Default missing"); + } + + return returnValue; + } + + TConstUnion operator>>(const TConstUnion& constant) const + { + TConstUnion returnValue; + switch (type) { + case EbtInt: + switch (constant.type) { + case EbtInt: returnValue.setIConst(iConst >> constant.iConst); break; + case EbtUint: returnValue.setIConst(iConst >> constant.uConst); break; + case EbtInt64: returnValue.setIConst(iConst >> constant.i64Const); break; + case EbtUint64: returnValue.setIConst(iConst >> constant.u64Const); break; + default: assert(false && "Default missing"); + } + break; + case EbtUint: + switch (constant.type) { + case EbtInt: returnValue.setUConst(uConst >> constant.iConst); break; + case EbtUint: returnValue.setUConst(uConst >> constant.uConst); break; + case EbtInt64: returnValue.setUConst(uConst >> constant.i64Const); break; + case EbtUint64: returnValue.setUConst(uConst >> constant.u64Const); break; + default: assert(false && "Default missing"); + } + break; + case EbtInt64: + switch (constant.type) { + case EbtInt: returnValue.setI64Const(i64Const >> constant.iConst); break; + case EbtUint: returnValue.setI64Const(i64Const >> constant.uConst); break; + case EbtInt64: returnValue.setI64Const(i64Const >> constant.i64Const); break; + case EbtUint64: returnValue.setI64Const(i64Const >> constant.u64Const); break; + default: assert(false && "Default missing"); + } + break; + case EbtUint64: + switch (constant.type) { + case EbtInt: returnValue.setU64Const(u64Const >> constant.iConst); break; + case EbtUint: returnValue.setU64Const(u64Const >> constant.uConst); break; + case EbtInt64: returnValue.setU64Const(u64Const >> constant.i64Const); break; + case EbtUint64: returnValue.setU64Const(u64Const >> constant.u64Const); break; + default: assert(false && "Default missing"); + } + break; + default: assert(false && "Default missing"); + } + + return returnValue; + } + + TConstUnion operator<<(const TConstUnion& constant) const + { + TConstUnion returnValue; + switch (type) { + case EbtInt: + switch (constant.type) { + case EbtInt: returnValue.setIConst(iConst << constant.iConst); break; + case EbtUint: returnValue.setIConst(iConst << constant.uConst); break; + case EbtInt64: returnValue.setIConst(iConst << constant.i64Const); break; + case EbtUint64: returnValue.setIConst(iConst << constant.u64Const); break; + default: assert(false && "Default missing"); + } + break; + case EbtUint: + switch (constant.type) { + case EbtInt: returnValue.setUConst(uConst << constant.iConst); break; + case EbtUint: returnValue.setUConst(uConst << constant.uConst); break; + case EbtInt64: returnValue.setUConst(uConst << constant.i64Const); break; + case EbtUint64: returnValue.setUConst(uConst << constant.u64Const); break; + default: assert(false && "Default missing"); + } + break; + case EbtInt64: + switch (constant.type) { + case EbtInt: returnValue.setI64Const(i64Const << constant.iConst); break; + case EbtUint: returnValue.setI64Const(i64Const << constant.uConst); break; + case EbtInt64: returnValue.setI64Const(i64Const << constant.i64Const); break; + case EbtUint64: returnValue.setI64Const(i64Const << constant.u64Const); break; + default: assert(false && "Default missing"); + } + break; + case EbtUint64: + switch (constant.type) { + case EbtInt: returnValue.setU64Const(u64Const << constant.iConst); break; + case EbtUint: returnValue.setU64Const(u64Const << constant.uConst); break; + case EbtInt64: returnValue.setU64Const(u64Const << constant.i64Const); break; + case EbtUint64: returnValue.setU64Const(u64Const << constant.u64Const); break; + default: assert(false && "Default missing"); + } + break; + default: assert(false && "Default missing"); + } + + return returnValue; + } + + TConstUnion operator&(const TConstUnion& constant) const + { + TConstUnion returnValue; + assert(type == constant.type); + switch (type) { + case EbtInt: returnValue.setIConst(iConst & constant.iConst); break; + case EbtUint: returnValue.setUConst(uConst & constant.uConst); break; + case EbtInt64: returnValue.setI64Const(i64Const & constant.i64Const); break; + case EbtUint64: returnValue.setU64Const(u64Const & constant.u64Const); break; + default: assert(false && "Default missing"); + } + + return returnValue; + } + + TConstUnion operator|(const TConstUnion& constant) const + { + TConstUnion returnValue; + assert(type == constant.type); + switch (type) { + case EbtInt: returnValue.setIConst(iConst | constant.iConst); break; + case EbtUint: returnValue.setUConst(uConst | constant.uConst); break; + case EbtInt64: returnValue.setI64Const(i64Const | constant.i64Const); break; + case EbtUint64: returnValue.setU64Const(u64Const | constant.u64Const); break; + default: assert(false && "Default missing"); + } + + return returnValue; + } + + TConstUnion operator^(const TConstUnion& constant) const + { + TConstUnion returnValue; + assert(type == constant.type); + switch (type) { + case EbtInt: returnValue.setIConst(iConst ^ constant.iConst); break; + case EbtUint: returnValue.setUConst(uConst ^ constant.uConst); break; + case EbtInt64: returnValue.setI64Const(i64Const ^ constant.i64Const); break; + case EbtUint64: returnValue.setU64Const(u64Const ^ constant.u64Const); break; + default: assert(false && "Default missing"); + } + + return returnValue; + } + + TConstUnion operator~() const + { + TConstUnion returnValue; + switch (type) { + case EbtInt: returnValue.setIConst(~iConst); break; + case EbtUint: returnValue.setUConst(~uConst); break; + case EbtInt64: returnValue.setI64Const(~i64Const); break; + case EbtUint64: returnValue.setU64Const(~u64Const); break; + default: assert(false && "Default missing"); + } + + return returnValue; + } + + TConstUnion operator&&(const TConstUnion& constant) const + { + TConstUnion returnValue; + assert(type == constant.type); + switch (type) { + case EbtBool: returnValue.setBConst(bConst && constant.bConst); break; + default: assert(false && "Default missing"); + } + + return returnValue; + } + + TConstUnion operator||(const TConstUnion& constant) const + { + TConstUnion returnValue; + assert(type == constant.type); + switch (type) { + case EbtBool: returnValue.setBConst(bConst || constant.bConst); break; + default: assert(false && "Default missing"); + } + + return returnValue; + } + + TBasicType getType() const { return type; } + +private: + union { + int iConst; // used for ivec, scalar ints + unsigned int uConst; // used for uvec, scalar uints + long long i64Const; // used for i64vec, scalar int64s + unsigned long long u64Const; // used for u64vec, scalar uint64s + bool bConst; // used for bvec, scalar bools + double dConst; // used for vec, dvec, mat, dmat, scalar floats and doubles + const TString* sConst; // string constant + }; + + TBasicType type; +}; + +// Encapsulate having a pointer to an array of TConstUnion, +// which only needs to be allocated if its size is going to be +// bigger than 0. +// +// One convenience is being able to use [] to go inside the array, instead +// of C++ assuming it as an array of pointers to vectors. +// +// General usage is that the size is known up front, and it is +// created once with the proper size. +// +class TConstUnionArray { +public: + POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator()) + + TConstUnionArray() : unionArray(nullptr) { } + virtual ~TConstUnionArray() { } + + explicit TConstUnionArray(int size) + { + if (size == 0) + unionArray = nullptr; + else + unionArray = new TConstUnionVector(size); + } + TConstUnionArray(const TConstUnionArray& a) : unionArray(a.unionArray) { } + TConstUnionArray(const TConstUnionArray& a, int start, int size) + { + unionArray = new TConstUnionVector(size); + for (int i = 0; i < size; ++i) + (*unionArray)[i] = a[start + i]; + } + + // Use this constructor for a smear operation + TConstUnionArray(int size, const TConstUnion& val) + { + unionArray = new TConstUnionVector(size, val); + } + + int size() const { return unionArray ? (int)unionArray->size() : 0; } + TConstUnion& operator[](size_t index) { return (*unionArray)[index]; } + const TConstUnion& operator[](size_t index) const { return (*unionArray)[index]; } + bool operator==(const TConstUnionArray& rhs) const + { + // this includes the case that both are unallocated + if (unionArray == rhs.unionArray) + return true; + + if (! unionArray || ! rhs.unionArray) + return false; + + if (! unionArray || ! rhs.unionArray) + return false; + + return *unionArray == *rhs.unionArray; + } + bool operator!=(const TConstUnionArray& rhs) const { return ! operator==(rhs); } + + double dot(const TConstUnionArray& rhs) + { + assert(rhs.unionArray->size() == unionArray->size()); + double sum = 0.0; + + for (size_t comp = 0; comp < unionArray->size(); ++comp) + sum += (*this)[comp].getDConst() * rhs[comp].getDConst(); + + return sum; + } + + bool empty() const { return unionArray == nullptr; } + +protected: + typedef TVector TConstUnionVector; + TConstUnionVector* unionArray; +}; + +} // end namespace glslang + +#endif // _CONSTANT_UNION_INCLUDED_ diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/Include/InfoSink.h b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/InfoSink.h new file mode 100644 index 0000000..dceb603 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/InfoSink.h @@ -0,0 +1,144 @@ +// +// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +// 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. +// + +#ifndef _INFOSINK_INCLUDED_ +#define _INFOSINK_INCLUDED_ + +#include "../Include/Common.h" +#include + +namespace glslang { + +// +// TPrefixType is used to centralize how info log messages start. +// See below. +// +enum TPrefixType { + EPrefixNone, + EPrefixWarning, + EPrefixError, + EPrefixInternalError, + EPrefixUnimplemented, + EPrefixNote +}; + +enum TOutputStream { + ENull = 0, + EDebugger = 0x01, + EStdOut = 0x02, + EString = 0x04, +}; +// +// Encapsulate info logs for all objects that have them. +// +// The methods are a general set of tools for getting a variety of +// messages and types inserted into the log. +// +class TInfoSinkBase { +public: + TInfoSinkBase() : outputStream(4) {} + void erase() { sink.erase(); } + TInfoSinkBase& operator<<(const TPersistString& t) { append(t); return *this; } + TInfoSinkBase& operator<<(char c) { append(1, c); return *this; } + TInfoSinkBase& operator<<(const char* s) { append(s); return *this; } + TInfoSinkBase& operator<<(int n) { append(String(n)); return *this; } + TInfoSinkBase& operator<<(unsigned int n) { append(String(n)); return *this; } + TInfoSinkBase& operator<<(float n) { const int size = 40; char buf[size]; + snprintf(buf, size, (fabs(n) > 1e-8 && fabs(n) < 1e8) || n == 0.0f ? "%f" : "%g", n); + append(buf); + return *this; } + TInfoSinkBase& operator+(const TPersistString& t) { append(t); return *this; } + TInfoSinkBase& operator+(const TString& t) { append(t); return *this; } + TInfoSinkBase& operator<<(const TString& t) { append(t); return *this; } + TInfoSinkBase& operator+(const char* s) { append(s); return *this; } + const char* c_str() const { return sink.c_str(); } + void prefix(TPrefixType message) { + switch(message) { + case EPrefixNone: break; + case EPrefixWarning: append("WARNING: "); break; + case EPrefixError: append("ERROR: "); break; + case EPrefixInternalError: append("INTERNAL ERROR: "); break; + case EPrefixUnimplemented: append("UNIMPLEMENTED: "); break; + case EPrefixNote: append("NOTE: "); break; + default: append("UNKNOWN ERROR: "); break; + } + } + void location(const TSourceLoc& loc) { + const int maxSize = 24; + char locText[maxSize]; + snprintf(locText, maxSize, ":%d", loc.line); + append(loc.getStringNameOrNum(false).c_str()); + append(locText); + append(": "); + } + void message(TPrefixType message, const char* s) { + prefix(message); + append(s); + append("\n"); + } + void message(TPrefixType message, const char* s, const TSourceLoc& loc) { + prefix(message); + location(loc); + append(s); + append("\n"); + } + + void setOutputStream(int output = 4) + { + outputStream = output; + } + +protected: + void append(const char* s); + + void append(int count, char c); + void append(const TPersistString& t); + void append(const TString& t); + + void checkMem(size_t growth) { if (sink.capacity() < sink.size() + growth + 2) + sink.reserve(sink.capacity() + sink.capacity() / 2); } + void appendToStream(const char* s); + TPersistString sink; + int outputStream; +}; + +} // end namespace glslang + +class TInfoSink { +public: + glslang::TInfoSinkBase info; + glslang::TInfoSinkBase debug; +}; + +#endif // _INFOSINK_INCLUDED_ diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/Include/InitializeGlobals.h b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/InitializeGlobals.h new file mode 100644 index 0000000..4cf2dca --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/InitializeGlobals.h @@ -0,0 +1,47 @@ +// +// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +// 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. +// + +#ifndef __INITIALIZE_GLOBALS_INCLUDED_ +#define __INITIALIZE_GLOBALS_INCLUDED_ + +namespace glslang { + +void InitializeMemoryPools(); +void FreeGlobalPools(); +bool InitializePoolIndex(); +void FreePoolIndex(); + +} // end namespace glslang + +#endif // __INITIALIZE_GLOBALS_INCLUDED_ diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/Include/PoolAlloc.h b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/PoolAlloc.h new file mode 100644 index 0000000..69bacb1 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/PoolAlloc.h @@ -0,0 +1,324 @@ +// +// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +// Copyright (C) 2012-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. +// + +#ifndef _POOLALLOC_INCLUDED_ +#define _POOLALLOC_INCLUDED_ + +#ifdef _DEBUG +# define GUARD_BLOCKS // define to enable guard block sanity checking +#endif + +// +// This header defines an allocator that can be used to efficiently +// allocate a large number of small requests for heap memory, with the +// intention that they are not individually deallocated, but rather +// collectively deallocated at one time. +// +// This simultaneously +// +// * Makes each individual allocation much more efficient; the +// typical allocation is trivial. +// * Completely avoids the cost of doing individual deallocation. +// * Saves the trouble of tracking down and plugging a large class of leaks. +// +// Individual classes can use this allocator by supplying their own +// new and delete methods. +// +// STL containers can use this allocator by using the pool_allocator +// class as the allocator (second) template argument. +// + +#include +#include +#include + +namespace glslang { + +// If we are using guard blocks, we must track each individual +// allocation. If we aren't using guard blocks, these +// never get instantiated, so won't have any impact. +// + +class TAllocation { +public: + TAllocation(size_t size, unsigned char* mem, TAllocation* prev = 0) : + size(size), mem(mem), prevAlloc(prev) { + // Allocations are bracketed: + // [allocationHeader][initialGuardBlock][userData][finalGuardBlock] + // This would be cleaner with if (guardBlockSize)..., but that + // makes the compiler print warnings about 0 length memsets, + // even with the if() protecting them. +# ifdef GUARD_BLOCKS + memset(preGuard(), guardBlockBeginVal, guardBlockSize); + memset(data(), userDataFill, size); + memset(postGuard(), guardBlockEndVal, guardBlockSize); +# endif + } + + void check() const { + checkGuardBlock(preGuard(), guardBlockBeginVal, "before"); + checkGuardBlock(postGuard(), guardBlockEndVal, "after"); + } + + void checkAllocList() const; + + // Return total size needed to accommodate user buffer of 'size', + // plus our tracking data. + inline static size_t allocationSize(size_t size) { + return size + 2 * guardBlockSize + headerSize(); + } + + // Offset from surrounding buffer to get to user data buffer. + inline static unsigned char* offsetAllocation(unsigned char* m) { + return m + guardBlockSize + headerSize(); + } + +private: + void checkGuardBlock(unsigned char* blockMem, unsigned char val, const char* locText) const; + + // Find offsets to pre and post guard blocks, and user data buffer + unsigned char* preGuard() const { return mem + headerSize(); } + unsigned char* data() const { return preGuard() + guardBlockSize; } + unsigned char* postGuard() const { return data() + size; } + + size_t size; // size of the user data area + unsigned char* mem; // beginning of our allocation (pts to header) + TAllocation* prevAlloc; // prior allocation in the chain + + const static unsigned char guardBlockBeginVal; + const static unsigned char guardBlockEndVal; + const static unsigned char userDataFill; + + const static size_t guardBlockSize; +# ifdef GUARD_BLOCKS + inline static size_t headerSize() { return sizeof(TAllocation); } +# else + inline static size_t headerSize() { return 0; } +# endif +}; + +// +// There are several stacks. One is to track the pushing and popping +// of the user, and not yet implemented. The others are simply a +// repositories of free pages or used pages. +// +// Page stacks are linked together with a simple header at the beginning +// of each allocation obtained from the underlying OS. Multi-page allocations +// are returned to the OS. Individual page allocations are kept for future +// re-use. +// +// The "page size" used is not, nor must it match, the underlying OS +// page size. But, having it be about that size or equal to a set of +// pages is likely most optimal. +// +class TPoolAllocator { +public: + TPoolAllocator(int growthIncrement = 8*1024, int allocationAlignment = 16); + + // + // Don't call the destructor just to free up the memory, call pop() + // + ~TPoolAllocator(); + + // + // Call push() to establish a new place to pop memory too. Does not + // have to be called to get things started. + // + void push(); + + // + // Call pop() to free all memory allocated since the last call to push(), + // or if no last call to push, frees all memory since first allocation. + // + void pop(); + + // + // Call popAll() to free all memory allocated. + // + void popAll(); + + // + // Call allocate() to actually acquire memory. Returns 0 if no memory + // available, otherwise a properly aligned pointer to 'numBytes' of memory. + // + void* allocate(size_t numBytes); + + // + // There is no deallocate. The point of this class is that + // deallocation can be skipped by the user of it, as the model + // of use is to simultaneously deallocate everything at once + // by calling pop(), and to not have to solve memory leak problems. + // + +protected: + friend struct tHeader; + + struct tHeader { + tHeader(tHeader* nextPage, size_t pageCount) : +#ifdef GUARD_BLOCKS + lastAllocation(0), +#endif + nextPage(nextPage), pageCount(pageCount) { } + + ~tHeader() { +#ifdef GUARD_BLOCKS + if (lastAllocation) + lastAllocation->checkAllocList(); +#endif + } + +#ifdef GUARD_BLOCKS + TAllocation* lastAllocation; +#endif + tHeader* nextPage; + size_t pageCount; + }; + + struct tAllocState { + size_t offset; + tHeader* page; + }; + typedef std::vector tAllocStack; + + // Track allocations if and only if we're using guard blocks +#ifndef GUARD_BLOCKS + void* initializeAllocation(tHeader*, unsigned char* memory, size_t) { +#else + void* initializeAllocation(tHeader* block, unsigned char* memory, size_t numBytes) { + new(memory) TAllocation(numBytes, memory, block->lastAllocation); + block->lastAllocation = reinterpret_cast(memory); +#endif + + // This is optimized entirely away if GUARD_BLOCKS is not defined. + return TAllocation::offsetAllocation(memory); + } + + size_t pageSize; // granularity of allocation from the OS + size_t alignment; // all returned allocations will be aligned at + // this granularity, which will be a power of 2 + size_t alignmentMask; + size_t headerSkip; // amount of memory to skip to make room for the + // header (basically, size of header, rounded + // up to make it aligned + size_t currentPageOffset; // next offset in top of inUseList to allocate from + tHeader* freeList; // list of popped memory + tHeader* inUseList; // list of all memory currently being used + tAllocStack stack; // stack of where to allocate from, to partition pool + + int numCalls; // just an interesting statistic + size_t totalBytes; // just an interesting statistic +private: + TPoolAllocator& operator=(const TPoolAllocator&); // don't allow assignment operator + TPoolAllocator(const TPoolAllocator&); // don't allow default copy constructor +}; + +// +// There could potentially be many pools with pops happening at +// 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); + +// +// This STL compatible allocator is intended to be used as the allocator +// parameter to templatized STL containers, like vector and map. +// +// It will use the pools for allocation, and not +// do any deallocation, but will still do destruction. +// +template +class pool_allocator { +public: + typedef size_t size_type; + typedef ptrdiff_t difference_type; + typedef T *pointer; + typedef const T *const_pointer; + typedef T& reference; + typedef const T& const_reference; + typedef T value_type; + template + struct rebind { + typedef pool_allocator other; + }; + pointer address(reference x) const { return &x; } + const_pointer address(const_reference x) const { return &x; } + + pool_allocator() : allocator(GetThreadPoolAllocator()) { } + pool_allocator(TPoolAllocator& a) : allocator(a) { } + pool_allocator(const pool_allocator& p) : allocator(p.allocator) { } + + template + pool_allocator(const pool_allocator& p) : allocator(p.getAllocator()) { } + + pointer allocate(size_type n) { + return reinterpret_cast(getAllocator().allocate(n * sizeof(T))); } + pointer allocate(size_type n, const void*) { + return reinterpret_cast(getAllocator().allocate(n * sizeof(T))); } + + void deallocate(void*, size_type) { } + void deallocate(pointer, size_type) { } + + pointer _Charalloc(size_t n) { + return reinterpret_cast(getAllocator().allocate(n)); } + + void construct(pointer p, const T& val) { new ((void *)p) T(val); } + void destroy(pointer p) { p->T::~T(); } + + bool operator==(const pool_allocator& rhs) const { return &getAllocator() == &rhs.getAllocator(); } + bool operator!=(const pool_allocator& rhs) const { return &getAllocator() != &rhs.getAllocator(); } + + size_type max_size() const { return static_cast(-1) / sizeof(T); } + size_type max_size(int size) const { return static_cast(-1) / size; } + + void setAllocator(TPoolAllocator* a) { allocator = *a; } + TPoolAllocator& getAllocator() const { return allocator; } + +protected: + pool_allocator& operator=(const pool_allocator&) { return *this; } + TPoolAllocator& allocator; +}; + +} // end namespace glslang + +#endif // _POOLALLOC_INCLUDED_ diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/Include/ResourceLimits.h b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/ResourceLimits.h new file mode 100644 index 0000000..0d07b8c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/ResourceLimits.h @@ -0,0 +1,140 @@ +// +// 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. +// + +#ifndef _RESOURCE_LIMITS_INCLUDED_ +#define _RESOURCE_LIMITS_INCLUDED_ + +struct TLimits { + bool nonInductiveForLoops; + bool whileLoops; + bool doWhileLoops; + bool generalUniformIndexing; + bool generalAttributeMatrixVectorIndexing; + bool generalVaryingIndexing; + bool generalSamplerIndexing; + bool generalVariableIndexing; + bool generalConstantMatrixVectorIndexing; +}; + +struct TBuiltInResource { + int maxLights; + int maxClipPlanes; + int maxTextureUnits; + int maxTextureCoords; + int maxVertexAttribs; + int maxVertexUniformComponents; + int maxVaryingFloats; + int maxVertexTextureImageUnits; + int maxCombinedTextureImageUnits; + int maxTextureImageUnits; + int maxFragmentUniformComponents; + int maxDrawBuffers; + int maxVertexUniformVectors; + int maxVaryingVectors; + int maxFragmentUniformVectors; + int maxVertexOutputVectors; + int maxFragmentInputVectors; + int minProgramTexelOffset; + int maxProgramTexelOffset; + int maxClipDistances; + int maxComputeWorkGroupCountX; + int maxComputeWorkGroupCountY; + int maxComputeWorkGroupCountZ; + int maxComputeWorkGroupSizeX; + int maxComputeWorkGroupSizeY; + int maxComputeWorkGroupSizeZ; + int maxComputeUniformComponents; + int maxComputeTextureImageUnits; + int maxComputeImageUniforms; + int maxComputeAtomicCounters; + int maxComputeAtomicCounterBuffers; + int maxVaryingComponents; + int maxVertexOutputComponents; + int maxGeometryInputComponents; + int maxGeometryOutputComponents; + int maxFragmentInputComponents; + int maxImageUnits; + int maxCombinedImageUnitsAndFragmentOutputs; + int maxCombinedShaderOutputResources; + int maxImageSamples; + int maxVertexImageUniforms; + int maxTessControlImageUniforms; + int maxTessEvaluationImageUniforms; + int maxGeometryImageUniforms; + int maxFragmentImageUniforms; + int maxCombinedImageUniforms; + int maxGeometryTextureImageUnits; + int maxGeometryOutputVertices; + int maxGeometryTotalOutputComponents; + int maxGeometryUniformComponents; + int maxGeometryVaryingComponents; + int maxTessControlInputComponents; + int maxTessControlOutputComponents; + int maxTessControlTextureImageUnits; + int maxTessControlUniformComponents; + int maxTessControlTotalOutputComponents; + int maxTessEvaluationInputComponents; + int maxTessEvaluationOutputComponents; + int maxTessEvaluationTextureImageUnits; + int maxTessEvaluationUniformComponents; + int maxTessPatchComponents; + int maxPatchVertices; + int maxTessGenLevel; + int maxViewports; + int maxVertexAtomicCounters; + int maxTessControlAtomicCounters; + int maxTessEvaluationAtomicCounters; + int maxGeometryAtomicCounters; + int maxFragmentAtomicCounters; + int maxCombinedAtomicCounters; + int maxAtomicCounterBindings; + int maxVertexAtomicCounterBuffers; + int maxTessControlAtomicCounterBuffers; + int maxTessEvaluationAtomicCounterBuffers; + int maxGeometryAtomicCounterBuffers; + int maxFragmentAtomicCounterBuffers; + int maxCombinedAtomicCounterBuffers; + int maxAtomicCounterBufferSize; + int maxTransformFeedbackBuffers; + int maxTransformFeedbackInterleavedComponents; + int maxCullDistances; + int maxCombinedClipAndCullDistances; + int maxSamples; + + TLimits limits; +}; + +#endif // _RESOURCE_LIMITS_INCLUDED_ diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/Include/ShHandle.h b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/ShHandle.h new file mode 100644 index 0000000..64ba6d6 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/ShHandle.h @@ -0,0 +1,173 @@ +// +// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +// 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. +// + +#ifndef _SHHANDLE_INCLUDED_ +#define _SHHANDLE_INCLUDED_ + +// +// Machine independent part of the compiler private objects +// sent as ShHandle to the driver. +// +// This should not be included by driver code. +// + +#define SH_EXPORTING +#include "../Public/ShaderLang.h" +#include "../MachineIndependent/Versions.h" +#include "InfoSink.h" + +class TCompiler; +class TLinker; +class TUniformMap; + +// +// The base class used to back handles returned to the driver. +// +class TShHandleBase { +public: + TShHandleBase() { } + virtual ~TShHandleBase() { } + virtual TCompiler* getAsCompiler() { return 0; } + virtual TLinker* getAsLinker() { return 0; } + virtual TUniformMap* getAsUniformMap() { return 0; } +}; + +// +// The base class for the machine dependent linker to derive from +// for managing where uniforms live. +// +class TUniformMap : public TShHandleBase { +public: + TUniformMap() { } + virtual ~TUniformMap() { } + virtual TUniformMap* getAsUniformMap() { return this; } + virtual int getLocation(const char* name) = 0; + virtual TInfoSink& getInfoSink() { return infoSink; } + TInfoSink infoSink; +}; + +class TIntermNode; + +// +// The base class for the machine dependent compiler to derive from +// for managing object code from the compile. +// +class TCompiler : public TShHandleBase { +public: + TCompiler(EShLanguage l, TInfoSink& sink) : infoSink(sink) , language(l), haveValidObjectCode(false) { } + virtual ~TCompiler() { } + EShLanguage getLanguage() { return language; } + virtual TInfoSink& getInfoSink() { return infoSink; } + + virtual bool compile(TIntermNode* root, int version = 0, EProfile profile = ENoProfile) = 0; + + virtual TCompiler* getAsCompiler() { return this; } + virtual bool linkable() { return haveValidObjectCode; } + + TInfoSink& infoSink; +protected: + TCompiler& operator=(TCompiler&); + + EShLanguage language; + bool haveValidObjectCode; +}; + +// +// Link operations are based on a list of compile results... +// +typedef glslang::TVector TCompilerList; +typedef glslang::TVector THandleList; + +// +// The base class for the machine dependent linker to derive from +// to manage the resulting executable. +// + +class TLinker : public TShHandleBase { +public: + TLinker(EShExecutable e, TInfoSink& iSink) : + infoSink(iSink), + executable(e), + haveReturnableObjectCode(false), + appAttributeBindings(0), + fixedAttributeBindings(0), + excludedAttributes(0), + excludedCount(0), + uniformBindings(0) { } + virtual TLinker* getAsLinker() { return this; } + virtual ~TLinker() { } + virtual bool link(TCompilerList&, TUniformMap*) = 0; + virtual bool link(THandleList&) { return false; } + virtual void setAppAttributeBindings(const ShBindingTable* t) { appAttributeBindings = t; } + virtual void setFixedAttributeBindings(const ShBindingTable* t) { fixedAttributeBindings = t; } + virtual void getAttributeBindings(ShBindingTable const **t) const = 0; + virtual void setExcludedAttributes(const int* attributes, int count) { excludedAttributes = attributes; excludedCount = count; } + virtual ShBindingTable* getUniformBindings() const { return uniformBindings; } + virtual const void* getObjectCode() const { return 0; } // a real compiler would be returning object code here + virtual TInfoSink& getInfoSink() { return infoSink; } + TInfoSink& infoSink; +protected: + TLinker& operator=(TLinker&); + EShExecutable executable; + bool haveReturnableObjectCode; // true when objectCode is acceptable to send to driver + + const ShBindingTable* appAttributeBindings; + const ShBindingTable* fixedAttributeBindings; + const int* excludedAttributes; + int excludedCount; + ShBindingTable* uniformBindings; // created by the linker +}; + +// +// This is the interface between the machine independent code +// and the machine dependent code. +// +// The machine dependent code should derive from the classes +// above. Then Construct*() and Delete*() will create and +// destroy the machine dependent objects, which contain the +// above machine independent information. +// +TCompiler* ConstructCompiler(EShLanguage, int); + +TShHandleBase* ConstructLinker(EShExecutable, int); +TShHandleBase* ConstructBindings(); +void DeleteLinker(TShHandleBase*); +void DeleteBindingList(TShHandleBase* bindingList); + +TUniformMap* ConstructUniformMap(); +void DeleteCompiler(TCompiler*); + +void DeleteUniformMap(TUniformMap*); + +#endif // _SHHANDLE_INCLUDED_ diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/Include/Types.h b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/Types.h new file mode 100644 index 0000000..2207d0b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/Types.h @@ -0,0 +1,1951 @@ +// +// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +// Copyright (C) 2012-2016 LunarG, Inc. +// Copyright (C) 2015-2016 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. +// + +#ifndef _TYPES_INCLUDED +#define _TYPES_INCLUDED + +#include "../Include/Common.h" +#include "../Include/BaseTypes.h" +#include "../Public/ShaderLang.h" +#include "arrays.h" + +namespace glslang { + +const int GlslangMaxTypeLength = 200; // TODO: need to print block/struct one member per line, so this can stay bounded + +const char* const AnonymousPrefix = "anon@"; // for something like a block whose members can be directly accessed +inline bool IsAnonymous(const TString& name) +{ + return name.compare(0, 5, AnonymousPrefix) == 0; +} + +// +// Details within a sampler type +// +enum TSamplerDim { + EsdNone, + Esd1D, + Esd2D, + Esd3D, + EsdCube, + EsdRect, + EsdBuffer, + EsdSubpass, // goes only with non-sampled image (image is true) + EsdNumDims +}; + +struct TSampler { // misnomer now; includes images, textures without sampler, and textures with sampler + TBasicType type : 8; // type returned by sampler + TSamplerDim dim : 8; + bool arrayed : 1; + bool shadow : 1; + bool ms : 1; + bool image : 1; // image, combined should be false + 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. + + bool isImage() const { return image && dim != EsdSubpass; } + bool isSubpass() const { return dim == EsdSubpass; } + bool isCombined() const { return combined; } + bool isPureSampler() const { return sampler; } + bool isTexture() const { return !sampler && !image; } + bool isShadow() const { return shadow; } + bool isArrayed() const { return arrayed; } + bool isMultiSample() const { return ms; } + + void clear() + { + type = EbtVoid; + dim = EsdNone; + arrayed = false; + shadow = false; + ms = false; + image = false; + combined = false; + sampler = false; + external = false; + vectorSize = 4; + } + + // make a combined sampler and texture + void set(TBasicType t, TSamplerDim d, bool a = false, bool s = false, bool m = false) + { + clear(); + type = t; + dim = d; + arrayed = a; + shadow = s; + ms = m; + combined = true; + } + + // make an image + void setImage(TBasicType t, TSamplerDim d, bool a = false, bool s = false, bool m = false) + { + clear(); + type = t; + dim = d; + arrayed = a; + shadow = s; + ms = m; + image = true; + } + + // make a texture with no sampler + void setTexture(TBasicType t, TSamplerDim d, bool a = false, bool s = false, bool m = false) + { + clear(); + type = t; + dim = d; + arrayed = a; + shadow = s; + ms = m; + } + + // make a subpass input attachment + void setSubpass(TBasicType t, bool m = false) + { + clear(); + type = t; + image = true; + dim = EsdSubpass; + ms = m; + } + + // make a pure sampler, no texture, no image, nothing combined, the 'sampler' keyword + void setPureSampler(bool s) + { + clear(); + sampler = true; + shadow = s; + } + + 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; + } + + bool operator!=(const TSampler& right) const + { + return ! operator==(right); + } + + TString getString() const + { + TString s; + + if (sampler) { + s.append("sampler"); + return s; + } + + switch (type) { + 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) { + if (dim == EsdSubpass) + s.append("subpass"); + else + s.append("image"); + } else if (combined) { + s.append("sampler"); + } else { + s.append("texture"); + } + if (external) { + s.append("ExternalOES"); + return s; + } + switch (dim) { + case Esd1D: s.append("1D"); break; + case Esd2D: s.append("2D"); break; + case Esd3D: s.append("3D"); break; + case EsdCube: s.append("Cube"); break; + case EsdRect: s.append("2DRect"); break; + case EsdBuffer: s.append("Buffer"); break; + case EsdSubpass: s.append("Input"); break; + default: break; // some compilers want this + } + if (ms) + s.append("MS"); + if (arrayed) + s.append("Array"); + if (shadow) + s.append("Shadow"); + + return s; + } +}; + +// +// Need to have association of line numbers to types in a list for building structs. +// +class TType; +struct TTypeLoc { + TType* type; + TSourceLoc loc; +}; +typedef TVector TTypeList; + +typedef TVector TIdentifierList; + +// +// Following are a series of helper enums for managing layouts and qualifiers, +// used for TPublicType, TType, others. +// + +enum TLayoutPacking { + ElpNone, + ElpShared, // default, but different than saying nothing + ElpStd140, + ElpStd430, + ElpPacked, + ElpCount // If expanding, see bitfield width below +}; + +enum TLayoutMatrix { + ElmNone, + ElmRowMajor, + ElmColumnMajor, // default, but different than saying nothing + ElmCount // If expanding, see bitfield width below +}; + +// Union of geometry shader and tessellation shader geometry types. +// They don't go into TType, but rather have current state per shader or +// active parser type (TPublicType). +enum TLayoutGeometry { + ElgNone, + ElgPoints, + ElgLines, + ElgLinesAdjacency, + ElgLineStrip, + ElgTriangles, + ElgTrianglesAdjacency, + ElgTriangleStrip, + ElgQuads, + ElgIsolines, +}; + +enum TVertexSpacing { + EvsNone, + EvsEqual, + EvsFractionalEven, + EvsFractionalOdd +}; + +enum TVertexOrder { + EvoNone, + EvoCw, + EvoCcw +}; + +// Note: order matters, as type of format is done by comparison. +enum TLayoutFormat { + ElfNone, + + // Float image + ElfRgba32f, + ElfRgba16f, + ElfR32f, + ElfRgba8, + ElfRgba8Snorm, + + ElfEsFloatGuard, // to help with comparisons + + ElfRg32f, + ElfRg16f, + ElfR11fG11fB10f, + ElfR16f, + ElfRgba16, + ElfRgb10A2, + ElfRg16, + ElfRg8, + ElfR16, + ElfR8, + ElfRgba16Snorm, + ElfRg16Snorm, + ElfRg8Snorm, + ElfR16Snorm, + ElfR8Snorm, + + ElfFloatGuard, // to help with comparisons + + // Int image + ElfRgba32i, + ElfRgba16i, + ElfRgba8i, + ElfR32i, + + ElfEsIntGuard, // to help with comparisons + + ElfRg32i, + ElfRg16i, + ElfRg8i, + ElfR16i, + ElfR8i, + + ElfIntGuard, // to help with comparisons + + // Uint image + ElfRgba32ui, + ElfRgba16ui, + ElfRgba8ui, + ElfR32ui, + + ElfEsUintGuard, // to help with comparisons + + ElfRg32ui, + ElfRg16ui, + ElfRgb10a2ui, + ElfRg8ui, + ElfR16ui, + ElfR8ui, + + ElfCount +}; + +enum TLayoutDepth { + EldNone, + EldAny, + EldGreater, + EldLess, + EldUnchanged, + + EldCount +}; + +enum TBlendEquationShift { + // No 'EBlendNone': + // These are used as bit-shift amounts. A mask of such shifts will have type 'int', + // and in that space, 0 means no bits set, or none. In this enum, 0 means (1 << 0), a bit is set. + EBlendMultiply, + EBlendScreen, + EBlendOverlay, + EBlendDarken, + EBlendLighten, + EBlendColordodge, + EBlendColorburn, + EBlendHardlight, + EBlendSoftlight, + EBlendDifference, + EBlendExclusion, + EBlendHslHue, + EBlendHslSaturation, + EBlendHslColor, + EBlendHslLuminosity, + EBlendAllEquations, + + EBlendCount +}; + +class TQualifier { +public: + static const int layoutNotSet = -1; + + void clear() + { + precision = EpqNone; + invariant = false; + noContraction = false; + makeTemporary(); + } + + // drop qualifiers that don't belong in a temporary variable + void makeTemporary() + { + semanticName = nullptr; + storage = EvqTemporary; + builtIn = EbvNone; + clearInterstage(); + clearMemory(); + specConstant = false; + clearLayout(); + } + + void clearInterstage() + { + clearInterpolation(); + patch = false; + sample = false; + } + + void clearInterpolation() + { + centroid = false; + smooth = false; + flat = false; + nopersp = false; +#ifdef AMD_EXTENSIONS + explicitInterp = false; +#endif + } + + void clearMemory() + { + coherent = false; + volatil = false; + restrict = false; + readonly = false; + writeonly = false; + } + + // Drop just the storage qualification, which perhaps should + // never be done, as it is fundamentally inconsistent, but need to + // explore what downstream consumers need. + // E.g., in a deference, it is an inconsistency between: + // A) partially dereferenced resource is still in the storage class it started in + // B) partially dereferenced resource is a new temporary object + // If A, then nothing should change, if B, then everything should change, but this is half way. + void makePartialTemporary() + { + storage = EvqTemporary; + specConstant = false; + } + + const char* semanticName; + TStorageQualifier storage : 6; + TBuiltInVariable builtIn : 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 + bool centroid : 1; + bool smooth : 1; + bool flat : 1; + bool nopersp : 1; +#ifdef AMD_EXTENSIONS + bool explicitInterp : 1; +#endif + bool patch : 1; + bool sample : 1; + bool coherent : 1; + bool volatil : 1; + bool restrict : 1; + bool readonly : 1; + bool writeonly : 1; + bool specConstant : 1; // having a constant_id is not sufficient: expressions have no id, but are still specConstant + + bool isMemory() const + { + return coherent || volatil || restrict || readonly || writeonly; + } + bool isInterpolation() const + { +#ifdef AMD_EXTENSIONS + return flat || smooth || nopersp || explicitInterp; +#else + return flat || smooth || nopersp; +#endif + } + bool isAuxiliary() const + { + return centroid || patch || sample; + } + + bool isPipeInput() const + { + switch (storage) { + case EvqVaryingIn: + case EvqFragCoord: + case EvqPointCoord: + case EvqFace: + case EvqVertexId: + case EvqInstanceId: + return true; + default: + return false; + } + } + + bool isPipeOutput() const + { + switch (storage) { + case EvqPosition: + case EvqPointSize: + case EvqClipVertex: + case EvqVaryingOut: + case EvqFragColor: + case EvqFragDepth: + return true; + default: + return false; + } + } + + bool isParamInput() const + { + switch (storage) { + case EvqIn: + case EvqInOut: + case EvqConstReadOnly: + return true; + default: + return false; + } + } + + bool isParamOutput() const + { + switch (storage) { + case EvqOut: + case EvqInOut: + return true; + default: + return false; + } + } + + bool isUniformOrBuffer() const + { + switch (storage) { + case EvqUniform: + case EvqBuffer: + return true; + default: + return false; + } + } + + bool isIo() const + { + switch (storage) { + case EvqUniform: + case EvqBuffer: + case EvqVaryingIn: + case EvqFragCoord: + case EvqPointCoord: + case EvqFace: + case EvqVertexId: + case EvqInstanceId: + case EvqPosition: + case EvqPointSize: + case EvqClipVertex: + case EvqVaryingOut: + case EvqFragColor: + case EvqFragDepth: + return true; + default: + return false; + } + } + + // True if this type of IO is supposed to be arrayed with extra level for per-vertex data + bool isArrayedIo(EShLanguage language) const + { + switch (language) { + case EShLangGeometry: + return isPipeInput(); + case EShLangTessControl: + return ! patch && (isPipeInput() || isPipeOutput()); + case EShLangTessEvaluation: + return ! patch && isPipeInput(); + default: + return false; + } + } + + // Implementing an embedded layout-qualifier class here, since C++ can't have a real class bitfield + void clearLayout() // all layout + { + clearUniformLayout(); + + layoutPushConstant = false; +#ifdef NV_EXTENSIONS + layoutPassthrough = false; + layoutViewportRelative = false; + // -2048 as the default value indicating layoutSecondaryViewportRelative is not set + layoutSecondaryViewportRelativeOffset = -2048; +#endif + + clearInterstageLayout(); + + layoutSpecConstantId = layoutSpecConstantIdEnd; + + layoutFormat = ElfNone; + } + void clearInterstageLayout() + { + layoutLocation = layoutLocationEnd; + layoutComponent = layoutComponentEnd; + layoutIndex = layoutIndexEnd; + clearStreamLayout(); + clearXfbLayout(); + } + void clearStreamLayout() + { + layoutStream = layoutStreamEnd; + } + void clearXfbLayout() + { + layoutXfbBuffer = layoutXfbBufferEnd; + layoutXfbStride = layoutXfbStrideEnd; + layoutXfbOffset = layoutXfbOffsetEnd; + } + + bool hasLayout() const + { + return hasUniformLayout() || + hasAnyLocation() || + hasStream() || + hasXfb() || + hasFormat() || + layoutPushConstant; + } + TLayoutMatrix layoutMatrix : 3; + TLayoutPacking layoutPacking : 4; + int layoutOffset; + int layoutAlign; + + unsigned int layoutLocation :12; + static const unsigned int layoutLocationEnd = 0xFFF; + + unsigned int layoutComponent : 3; + static const unsigned int layoutComponentEnd = 4; + + unsigned int layoutSet : 7; + static const unsigned int layoutSetEnd = 0x3F; + + unsigned int layoutBinding : 16; + static const unsigned int layoutBindingEnd = 0xFFFF; + + unsigned int layoutIndex : 8; + static const unsigned int layoutIndexEnd = 0xFF; + + unsigned int layoutStream : 8; + static const unsigned int layoutStreamEnd = 0xFF; + + unsigned int layoutXfbBuffer : 4; + static const unsigned int layoutXfbBufferEnd = 0xF; + + unsigned int layoutXfbStride : 10; + static const unsigned int layoutXfbStrideEnd = 0x3FF; + + unsigned int layoutXfbOffset : 10; + static const unsigned int layoutXfbOffsetEnd = 0x3FF; + + unsigned int layoutAttachment : 8; // for input_attachment_index + static const unsigned int layoutAttachmentEnd = 0XFF; + + unsigned int layoutSpecConstantId : 11; + static const unsigned int layoutSpecConstantIdEnd = 0x7FF; + + TLayoutFormat layoutFormat : 8; + + bool layoutPushConstant; + +#ifdef NV_EXTENSIONS + bool layoutPassthrough; + bool layoutViewportRelative; + int layoutSecondaryViewportRelativeOffset; +#endif + + bool hasUniformLayout() const + { + return hasMatrix() || + hasPacking() || + hasOffset() || + hasBinding() || + hasSet() || + hasAlign(); + } + void clearUniformLayout() // only uniform specific + { + layoutMatrix = ElmNone; + layoutPacking = ElpNone; + layoutOffset = layoutNotSet; + layoutAlign = layoutNotSet; + + layoutSet = layoutSetEnd; + layoutBinding = layoutBindingEnd; + layoutAttachment = layoutAttachmentEnd; + } + + bool hasMatrix() const + { + return layoutMatrix != ElmNone; + } + bool hasPacking() const + { + return layoutPacking != ElpNone; + } + bool hasOffset() const + { + return layoutOffset != layoutNotSet; + } + bool hasAlign() const + { + return layoutAlign != layoutNotSet; + } + bool hasAnyLocation() const + { + return hasLocation() || + hasComponent() || + hasIndex(); + } + bool hasLocation() const + { + return layoutLocation != layoutLocationEnd; + } + bool hasComponent() const + { + return layoutComponent != layoutComponentEnd; + } + bool hasIndex() const + { + return layoutIndex != layoutIndexEnd; + } + bool hasSet() const + { + return layoutSet != layoutSetEnd; + } + bool hasBinding() const + { + return layoutBinding != layoutBindingEnd; + } + bool hasStream() const + { + return layoutStream != layoutStreamEnd; + } + bool hasFormat() const + { + return layoutFormat != ElfNone; + } + bool hasXfb() const + { + return hasXfbBuffer() || + hasXfbStride() || + hasXfbOffset(); + } + bool hasXfbBuffer() const + { + return layoutXfbBuffer != layoutXfbBufferEnd; + } + bool hasXfbStride() const + { + return layoutXfbStride != layoutXfbStrideEnd; + } + bool hasXfbOffset() const + { + return layoutXfbOffset != layoutXfbOffsetEnd; + } + bool hasAttachment() const + { + return layoutAttachment != layoutAttachmentEnd; + } + bool hasSpecConstantId() const + { + // Not the same thing as being a specialization constant, this + // is just whether or not it was declared with an ID. + return layoutSpecConstantId != layoutSpecConstantIdEnd; + } + bool isSpecConstant() const + { + // True if type is a specialization constant, whether or not it + // had a specialization-constant ID, and false if it is not a + // true front-end constant. + return specConstant; + } + bool isFrontEndConstant() const + { + // True if the front-end knows the final constant value. + // This allows front-end constant folding. + return storage == EvqConst && ! specConstant; + } + bool isConstant() const + { + // True if is either kind of constant; specialization or regular. + return isFrontEndConstant() || isSpecConstant(); + } + void makeSpecConstant() + { + storage = EvqConst; + specConstant = true; + } + static const char* getLayoutPackingString(TLayoutPacking packing) + { + switch (packing) { + case ElpPacked: return "packed"; + case ElpShared: return "shared"; + case ElpStd140: return "std140"; + case ElpStd430: return "std430"; + default: return "none"; + } + } + static const char* getLayoutMatrixString(TLayoutMatrix m) + { + switch (m) { + case ElmColumnMajor: return "column_major"; + case ElmRowMajor: return "row_major"; + default: return "none"; + } + } + static const char* getLayoutFormatString(TLayoutFormat f) + { + switch (f) { + case ElfRgba32f: return "rgba32f"; + case ElfRgba16f: return "rgba16f"; + case ElfRg32f: return "rg32f"; + case ElfRg16f: return "rg16f"; + case ElfR11fG11fB10f: return "r11f_g11f_b10f"; + case ElfR32f: return "r32f"; + case ElfR16f: return "r16f"; + case ElfRgba16: return "rgba16"; + case ElfRgb10A2: return "rgb10_a2"; + case ElfRgba8: return "rgba8"; + case ElfRg16: return "rg16"; + case ElfRg8: return "rg8"; + case ElfR16: return "r16"; + case ElfR8: return "r8"; + case ElfRgba16Snorm: return "rgba16_snorm"; + case ElfRgba8Snorm: return "rgba8_snorm"; + case ElfRg16Snorm: return "rg16_snorm"; + case ElfRg8Snorm: return "rg8_snorm"; + case ElfR16Snorm: return "r16_snorm"; + case ElfR8Snorm: return "r8_snorm"; + + case ElfRgba32i: return "rgba32i"; + case ElfRgba16i: return "rgba16i"; + case ElfRgba8i: return "rgba8i"; + case ElfRg32i: return "rg32i"; + case ElfRg16i: return "rg16i"; + case ElfRg8i: return "rg8i"; + case ElfR32i: return "r32i"; + case ElfR16i: return "r16i"; + case ElfR8i: return "r8i"; + + case ElfRgba32ui: return "rgba32ui"; + case ElfRgba16ui: return "rgba16ui"; + case ElfRgba8ui: return "rgba8ui"; + case ElfRg32ui: return "rg32ui"; + case ElfRg16ui: return "rg16ui"; + case ElfRgb10a2ui: return "rgb10_a2ui"; + case ElfRg8ui: return "rg8ui"; + case ElfR32ui: return "r32ui"; + case ElfR16ui: return "r16ui"; + case ElfR8ui: return "r8ui"; + default: return "none"; + } + } + static const char* getLayoutDepthString(TLayoutDepth d) + { + switch (d) { + case EldAny: return "depth_any"; + case EldGreater: return "depth_greater"; + case EldLess: return "depth_less"; + case EldUnchanged: return "depth_unchanged"; + default: return "none"; + } + } + static const char* getBlendEquationString(TBlendEquationShift e) + { + switch (e) { + case EBlendMultiply: return "blend_support_multiply"; + case EBlendScreen: return "blend_support_screen"; + case EBlendOverlay: return "blend_support_overlay"; + case EBlendDarken: return "blend_support_darken"; + case EBlendLighten: return "blend_support_lighten"; + case EBlendColordodge: return "blend_support_colordodge"; + case EBlendColorburn: return "blend_support_colorburn"; + case EBlendHardlight: return "blend_support_hardlight"; + case EBlendSoftlight: return "blend_support_softlight"; + case EBlendDifference: return "blend_support_difference"; + case EBlendExclusion: return "blend_support_exclusion"; + case EBlendHslHue: return "blend_support_hsl_hue"; + case EBlendHslSaturation: return "blend_support_hsl_saturation"; + case EBlendHslColor: return "blend_support_hsl_color"; + case EBlendHslLuminosity: return "blend_support_hsl_luminosity"; + case EBlendAllEquations: return "blend_support_all_equations"; + default: return "unknown"; + } + } + static const char* getGeometryString(TLayoutGeometry geometry) + { + switch (geometry) { + case ElgPoints: return "points"; + case ElgLines: return "lines"; + case ElgLinesAdjacency: return "lines_adjacency"; + case ElgLineStrip: return "line_strip"; + case ElgTriangles: return "triangles"; + case ElgTrianglesAdjacency: return "triangles_adjacency"; + case ElgTriangleStrip: return "triangle_strip"; + case ElgQuads: return "quads"; + case ElgIsolines: return "isolines"; + default: return "none"; + } + } + static const char* getVertexSpacingString(TVertexSpacing spacing) + { + switch (spacing) { + case EvsEqual: return "equal_spacing"; + case EvsFractionalEven: return "fractional_even_spacing"; + case EvsFractionalOdd: return "fractional_odd_spacing"; + default: return "none"; + } + } + static const char* getVertexOrderString(TVertexOrder order) + { + switch (order) { + case EvoCw: return "cw"; + case EvoCcw: return "ccw"; + default: return "none"; + } + } + static int mapGeometryToSize(TLayoutGeometry geometry) + { + switch (geometry) { + case ElgPoints: return 1; + case ElgLines: return 2; + case ElgLinesAdjacency: return 4; + case ElgTriangles: return 3; + case ElgTrianglesAdjacency: return 6; + default: return 0; + } + } +}; + +// Qualifiers that don't need to be keep per object. They have shader scope, not object scope. +// So, they will not be part of TType, TQualifier, etc. +struct TShaderQualifiers { + TLayoutGeometry geometry; // geometry/tessellation shader in/out primitives + bool pixelCenterInteger; // fragment shader + bool originUpperLeft; // fragment shader + int invocations; + int vertices; // both for tessellation "vertices" and geometry "max_vertices" + TVertexSpacing spacing; + TVertexOrder order; + bool pointMode; + int localSize[3]; // compute shader + int localSizeSpecId[3]; // compute shader specialization id for gl_WorkGroupSize + bool earlyFragmentTests; // fragment input + TLayoutDepth layoutDepth; + bool blendEquation; // true if any blend equation was specified + +#ifdef NV_EXTENSIONS + bool layoutOverrideCoverage; // true if layout override_coverage set +#endif + + void init() + { + geometry = ElgNone; + originUpperLeft = false; + pixelCenterInteger = false; + invocations = TQualifier::layoutNotSet; + vertices = TQualifier::layoutNotSet; + spacing = EvsNone; + order = EvoNone; + pointMode = false; + localSize[0] = 1; + localSize[1] = 1; + localSize[2] = 1; + localSizeSpecId[0] = TQualifier::layoutNotSet; + localSizeSpecId[1] = TQualifier::layoutNotSet; + localSizeSpecId[2] = TQualifier::layoutNotSet; + earlyFragmentTests = false; + layoutDepth = EldNone; + blendEquation = false; +#ifdef NV_EXTENSIONS + layoutOverrideCoverage = false; +#endif + } + + // Merge in characteristics from the 'src' qualifier. They can override when + // set, but never erase when not set. + void merge(const TShaderQualifiers& src) + { + if (src.geometry != ElgNone) + geometry = src.geometry; + if (src.pixelCenterInteger) + pixelCenterInteger = src.pixelCenterInteger; + if (src.originUpperLeft) + originUpperLeft = src.originUpperLeft; + if (src.invocations != TQualifier::layoutNotSet) + invocations = src.invocations; + if (src.vertices != TQualifier::layoutNotSet) + vertices = src.vertices; + if (src.spacing != EvsNone) + spacing = src.spacing; + if (src.order != EvoNone) + order = src.order; + if (src.pointMode) + pointMode = true; + for (int i = 0; i < 3; ++i) { + if (src.localSize[i] > 1) + localSize[i] = src.localSize[i]; + } + for (int i = 0; i < 3; ++i) { + if (src.localSizeSpecId[i] != TQualifier::layoutNotSet) + localSizeSpecId[i] = src.localSizeSpecId[i]; + } + if (src.earlyFragmentTests) + earlyFragmentTests = true; + if (src.layoutDepth) + layoutDepth = src.layoutDepth; + if (src.blendEquation) + blendEquation = src.blendEquation; +#ifdef NV_EXTENSIONS + if (src.layoutOverrideCoverage) + layoutOverrideCoverage = src.layoutOverrideCoverage; +#endif + } +}; + +// +// TPublicType is just temporarily used while parsing and not quite the same +// information kept per node in TType. Due to the bison stack, it can't have +// types that it thinks have non-trivial constructors. It should +// just be used while recognizing the grammar, not anything else. +// Once enough is known about the situation, the proper information +// moved into a TType, or the parse context, etc. +// +class TPublicType { +public: + TBasicType basicType; + TSampler sampler; + TQualifier qualifier; + TShaderQualifiers shaderQualifiers; + int vectorSize : 4; + int matrixCols : 4; + int matrixRows : 4; + TArraySizes* arraySizes; + const TType* userDef; + TSourceLoc loc; + + void initType(const TSourceLoc& l) + { + basicType = EbtVoid; + vectorSize = 1; + matrixRows = 0; + matrixCols = 0; + arraySizes = nullptr; + userDef = nullptr; + loc = l; + } + + void initQualifiers(bool global = false) + { + qualifier.clear(); + if (global) + qualifier.storage = EvqGlobal; + } + + void init(const TSourceLoc& l, bool global = false) + { + initType(l); + sampler.clear(); + initQualifiers(global); + shaderQualifiers.init(); + } + + void setVector(int s) + { + matrixRows = 0; + matrixCols = 0; + vectorSize = s; + } + + void setMatrix(int c, int r) + { + matrixRows = r; + matrixCols = c; + vectorSize = 0; + } + + bool isScalar() const + { + return matrixCols == 0 && vectorSize == 1 && arraySizes == nullptr && userDef == nullptr; + } + + // "Image" is a superset of "Subpass" + bool isImage() const { return basicType == EbtSampler && sampler.isImage(); } + bool isSubpass() const { return basicType == EbtSampler && sampler.isSubpass(); } +}; + +// +// Base class for things that have a type. +// +class TType { +public: + POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator()) + + // for "empty" type (no args) or simple scalar/vector/matrix + explicit TType(TBasicType t = EbtVoid, TStorageQualifier q = EvqTemporary, int vs = 1, int mc = 0, int mr = 0, + bool isVector = false) : + basicType(t), vectorSize(vs), matrixCols(mc), matrixRows(mr), vector1(isVector && vs == 1), + arraySizes(nullptr), structure(nullptr), fieldName(nullptr), typeName(nullptr) + { + sampler.clear(); + qualifier.clear(); + qualifier.storage = q; + } + // for explicit precision qualifier + TType(TBasicType t, TStorageQualifier q, TPrecisionQualifier p, int vs = 1, int mc = 0, int mr = 0, + bool isVector = false) : + basicType(t), vectorSize(vs), matrixCols(mc), matrixRows(mr), vector1(isVector && vs == 1), + arraySizes(nullptr), structure(nullptr), fieldName(nullptr), typeName(nullptr) + { + sampler.clear(); + qualifier.clear(); + qualifier.storage = q; + qualifier.precision = p; + assert(p >= EpqNone && p <= EpqHigh); + } + // for turning a TPublicType into a TType, using a shallow copy + explicit TType(const TPublicType& p) : + basicType(p.basicType), + vectorSize(p.vectorSize), matrixCols(p.matrixCols), matrixRows(p.matrixRows), vector1(false), + arraySizes(p.arraySizes), structure(nullptr), fieldName(nullptr), typeName(nullptr) + { + if (basicType == EbtSampler) + sampler = p.sampler; + else + sampler.clear(); + qualifier = p.qualifier; + if (p.userDef) { + structure = p.userDef->getWritableStruct(); // public type is short-lived; there are no sharing issues + typeName = NewPoolTString(p.userDef->getTypeName().c_str()); + } + } + // for construction of sampler types + TType(const TSampler& sampler, TStorageQualifier q = EvqUniform, TArraySizes* as = nullptr) : + basicType(EbtSampler), vectorSize(1), matrixCols(0), matrixRows(0), vector1(false), + arraySizes(as), structure(nullptr), fieldName(nullptr), typeName(nullptr), + sampler(sampler) + { + qualifier.clear(); + qualifier.storage = q; + } + // to efficiently make a dereferenced type + // without ever duplicating the outer structure that will be thrown away + // and using only shallow copy + TType(const TType& type, int derefIndex, bool rowMajor = false) + { + if (type.isArray()) { + shallowCopy(type); + if (type.getArraySizes()->getNumDims() == 1) { + arraySizes = nullptr; + } else { + // want our own copy of the array, so we can edit it + arraySizes = new TArraySizes; + arraySizes->copyDereferenced(*type.arraySizes); + } + } else if (type.basicType == EbtStruct || type.basicType == EbtBlock) { + // do a structure dereference + const TTypeList& memberList = *type.getStruct(); + shallowCopy(*memberList[derefIndex].type); + return; + } else { + // do a vector/matrix dereference + shallowCopy(type); + if (matrixCols > 0) { + // dereference from matrix to vector + if (rowMajor) + vectorSize = matrixCols; + else + vectorSize = matrixRows; + matrixCols = 0; + matrixRows = 0; + if (vectorSize == 1) + vector1 = true; + } else if (isVector()) { + // dereference from vector to scalar + vectorSize = 1; + vector1 = false; + } + } + } + // for making structures, ... + TType(TTypeList* userDef, const TString& n) : + basicType(EbtStruct), vectorSize(1), matrixCols(0), matrixRows(0), vector1(false), + arraySizes(nullptr), structure(userDef), fieldName(nullptr) + { + sampler.clear(); + qualifier.clear(); + typeName = NewPoolTString(n.c_str()); + } + // For interface blocks + TType(TTypeList* userDef, const TString& n, const TQualifier& q) : + basicType(EbtBlock), vectorSize(1), matrixCols(0), matrixRows(0), vector1(false), + qualifier(q), arraySizes(nullptr), structure(userDef), fieldName(nullptr) + { + sampler.clear(); + typeName = NewPoolTString(n.c_str()); + } + virtual ~TType() {} + + // Not for use across pool pops; it will cause multiple instances of TType to point to the same information. + // This only works if that information (like a structure's list of types) does not change and + // the instances are sharing the same pool. + void shallowCopy(const TType& copyOf) + { + basicType = copyOf.basicType; + sampler = copyOf.sampler; + qualifier = copyOf.qualifier; + vectorSize = copyOf.vectorSize; + matrixCols = copyOf.matrixCols; + matrixRows = copyOf.matrixRows; + vector1 = copyOf.vector1; + arraySizes = copyOf.arraySizes; // copying the pointer only, not the contents + structure = copyOf.structure; + fieldName = copyOf.fieldName; + typeName = copyOf.typeName; + } + + // Make complete copy of the whole type graph rooted at 'copyOf'. + void deepCopy(const TType& copyOf) + { + TMap copied; // to enable copying a type graph as a graph, not a tree + deepCopy(copyOf, copied); + } + + // Recursively make temporary + void makeTemporary() + { + getQualifier().makeTemporary(); + + if (isStruct()) + for (unsigned int i = 0; i < structure->size(); ++i) + (*structure)[i].type->makeTemporary(); + } + + TType* clone() const + { + TType *newType = new TType(); + newType->deepCopy(*this); + + return newType; + } + + void makeVector() { vector1 = true; } + + // Merge type from parent, where a parentType is at the beginning of a declaration, + // establishing some characteristics for all subsequent names, while this type + // is on the individual names. + void mergeType(const TPublicType& parentType) + { + // arrayness is currently the only child aspect that has to be preserved + basicType = parentType.basicType; + vectorSize = parentType.vectorSize; + matrixCols = parentType.matrixCols; + matrixRows = parentType.matrixRows; + vector1 = false; // TPublicType is only GLSL which so far has no vec1 + qualifier = parentType.qualifier; + sampler = parentType.sampler; + if (parentType.arraySizes) + newArraySizes(*parentType.arraySizes); + if (parentType.userDef) { + structure = parentType.userDef->getWritableStruct(); + setTypeName(parentType.userDef->getTypeName()); + } + } + + virtual void hideMember() { basicType = EbtVoid; vectorSize = 1; } + virtual bool hiddenMember() const { return basicType == EbtVoid; } + + virtual void setTypeName(const TString& n) { typeName = NewPoolTString(n.c_str()); } + virtual void setFieldName(const TString& n) { fieldName = NewPoolTString(n.c_str()); } + virtual const TString& getTypeName() const + { + assert(typeName); + return *typeName; + } + + virtual const TString& getFieldName() const + { + assert(fieldName); + return *fieldName; + } + + virtual TBasicType getBasicType() const { return basicType; } + virtual const TSampler& getSampler() const { return sampler; } + + virtual TQualifier& getQualifier() { return qualifier; } + virtual const TQualifier& getQualifier() const { return qualifier; } + + virtual int getVectorSize() const { return vectorSize; } // returns 1 for either scalar or vector of size 1, valid for both + virtual int getMatrixCols() const { return matrixCols; } + virtual int getMatrixRows() const { return matrixRows; } + virtual int getOuterArraySize() const { return arraySizes->getOuterSize(); } + virtual TIntermTyped* getOuterArrayNode() const { return arraySizes->getOuterNode(); } + virtual int getCumulativeArraySize() const { return arraySizes->getCumulativeSize(); } + virtual bool isArrayOfArrays() const { return arraySizes != nullptr && arraySizes->getNumDims() > 1; } + virtual int getImplicitArraySize() const { return arraySizes->getImplicitSize(); } + virtual const TArraySizes* getArraySizes() const { return arraySizes; } + virtual TArraySizes& getArraySizes() { assert(arraySizes != nullptr); return *arraySizes; } + + virtual bool isScalar() const { return ! isVector() && ! isMatrix() && ! isStruct() && ! isArray(); } + virtual bool isScalarOrVec1() const { return isScalar() || vector1; } + virtual bool isVector() const { return vectorSize > 1 || vector1; } + virtual bool isMatrix() const { return matrixCols ? true : false; } + virtual bool isArray() const { return arraySizes != nullptr; } + virtual bool isExplicitlySizedArray() const { return isArray() && getOuterArraySize() != UnsizedArraySize; } + virtual bool isImplicitlySizedArray() const { return isArray() && getOuterArraySize() == UnsizedArraySize && qualifier.storage != EvqBuffer; } + virtual bool isRuntimeSizedArray() const { return isArray() && getOuterArraySize() == UnsizedArraySize && qualifier.storage == EvqBuffer; } + virtual bool isStruct() const { return structure != nullptr; } +#ifdef AMD_EXTENSIONS + virtual bool isFloatingDomain() const { return basicType == EbtFloat || basicType == EbtDouble || basicType == EbtFloat16; } +#else + virtual bool isFloatingDomain() const { return basicType == EbtFloat || basicType == EbtDouble; } +#endif + + virtual bool isOpaque() const { return basicType == EbtSampler || basicType == EbtAtomicUint; } + + // "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 + { + 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 + 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; + + return !isPerVertexAndBuiltIn(language); + } + + // 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; + } + + // 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; + } + + // 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; + } + + // 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; + } + + 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; + } + + // Recursively checks if the type contains an interstage IO builtin + virtual bool containsBuiltInInterstageIO(EShLanguage language) 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; + } + + virtual bool containsNonOpaque() const + { + // list all non-opaque types + switch (basicType) { + case EbtVoid: + case EbtFloat: + case EbtDouble: +#ifdef AMD_EXTENSIONS + 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()) + return true; + } + return false; + } + + 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; + } + + // Array editing methods. Array descriptors can be shared across + // type instances. This allows all uses of the same array + // to be updated at once. E.g., all nodes can be explicitly sized + // by tracking and correcting one implicit size. Or, all nodes + // can get the explicit size on a redeclaration that gives size. + // + // N.B.: Don't share with the shared symbol tables (symbols are + // marked as isReadOnly(). Such symbols with arrays that will be + // edited need to copyUp() on first use, so that + // A) the edits don't effect the shared symbol table, and + // B) the edits are shared across all users. + void updateArraySizes(const TType& type) + { + // For when we may already be sharing existing array descriptors, + // keeping the pointers the same, just updating the contents. + assert(arraySizes != nullptr); + assert(type.arraySizes != nullptr); + *arraySizes = *type.arraySizes; + } + void newArraySizes(const TArraySizes& s) + { + // For setting a fresh new set of array sizes, not yet worrying about sharing. + arraySizes = new TArraySizes; + *arraySizes = s; + } + void clearArraySizes() + { + arraySizes = 0; + } + void addArrayOuterSizes(const TArraySizes& s) + { + if (arraySizes == nullptr) + newArraySizes(s); + else + arraySizes->addOuterSizes(s); + } + void changeOuterArraySize(int s) { arraySizes->changeOuterSize(s); } + void setImplicitArraySize(int s) { arraySizes->setImplicitSize(s); } + + // Recursively make the implicit array size the explicit array size, through the type tree. + void adoptImplicitArraySizes() + { + if (isImplicitlySizedArray()) + changeOuterArraySize(getImplicitArraySize()); + if (isStruct()) { + for (int i = 0; i < (int)structure->size(); ++i) + (*structure)[i].type->adoptImplicitArraySizes(); + } + } + + const char* getBasicString() const + { + return TType::getBasicString(basicType); + } + + static const char* getBasicString(TBasicType t) + { + switch (t) { + case EbtVoid: return "void"; + case EbtFloat: return "float"; + case EbtDouble: return "double"; +#ifdef AMD_EXTENSIONS + case EbtFloat16: return "float16_t"; +#endif + case EbtInt: return "int"; + case EbtUint: return "uint"; + case EbtInt64: return "int64_t"; + case EbtUint64: return "uint64_t"; + case EbtBool: return "bool"; + case EbtAtomicUint: return "atomic_uint"; + case EbtSampler: return "sampler/image"; + case EbtStruct: return "structure"; + case EbtBlock: return "block"; + default: return "unknown type"; + } + } + + TString getCompleteString() const + { + TString typeString; + + const auto appendStr = [&](const char* s) { typeString.append(s); }; + const auto appendUint = [&](unsigned int u) { typeString.append(std::to_string(u).c_str()); }; + const auto appendInt = [&](int i) { typeString.append(std::to_string(i).c_str()); }; + + if (qualifier.hasLayout()) { + // To reduce noise, skip this if the only layout is an xfb_buffer + // with no triggering xfb_offset. + TQualifier noXfbBuffer = qualifier; + noXfbBuffer.layoutXfbBuffer = TQualifier::layoutXfbBufferEnd; + if (noXfbBuffer.hasLayout()) { + appendStr("layout("); + if (qualifier.hasAnyLocation()) { + appendStr(" location="); + appendUint(qualifier.layoutLocation); + if (qualifier.hasComponent()) { + appendStr(" component="); + appendUint(qualifier.layoutComponent); + } + if (qualifier.hasIndex()) { + appendStr(" index="); + appendUint(qualifier.layoutIndex); + } + } + if (qualifier.hasSet()) { + appendStr(" set="); + appendUint(qualifier.layoutSet); + } + if (qualifier.hasBinding()) { + appendStr(" binding="); + appendUint(qualifier.layoutBinding); + } + if (qualifier.hasStream()) { + appendStr(" stream="); + appendUint(qualifier.layoutStream); + } + if (qualifier.hasMatrix()) { + appendStr(" "); + appendStr(TQualifier::getLayoutMatrixString(qualifier.layoutMatrix)); + } + if (qualifier.hasPacking()) { + appendStr(" "); + appendStr(TQualifier::getLayoutPackingString(qualifier.layoutPacking)); + } + if (qualifier.hasOffset()) { + appendStr(" offset="); + appendInt(qualifier.layoutOffset); + } + if (qualifier.hasAlign()) { + appendStr(" align="); + appendInt(qualifier.layoutAlign); + } + if (qualifier.hasFormat()) { + appendStr(" "); + appendStr(TQualifier::getLayoutFormatString(qualifier.layoutFormat)); + } + if (qualifier.hasXfbBuffer() && qualifier.hasXfbOffset()) { + appendStr(" xfb_buffer="); + appendUint(qualifier.layoutXfbBuffer); + } + if (qualifier.hasXfbOffset()) { + appendStr(" xfb_offset="); + appendUint(qualifier.layoutXfbOffset); + } + if (qualifier.hasXfbStride()) { + appendStr(" xfb_stride="); + appendUint(qualifier.layoutXfbStride); + } + if (qualifier.hasAttachment()) { + appendStr(" input_attachment_index="); + appendUint(qualifier.layoutAttachment); + } + if (qualifier.hasSpecConstantId()) { + appendStr(" constant_id="); + appendUint(qualifier.layoutSpecConstantId); + } + if (qualifier.layoutPushConstant) + appendStr(" push_constant"); + +#ifdef NV_EXTENSIONS + if (qualifier.layoutPassthrough) + appendStr(" passthrough"); + if (qualifier.layoutViewportRelative) + appendStr(" layoutViewportRelative"); + if (qualifier.layoutSecondaryViewportRelativeOffset != -2048) { + appendStr(" layoutSecondaryViewportRelativeOffset="); + appendInt(qualifier.layoutSecondaryViewportRelativeOffset); + } +#endif + + appendStr(")"); + } + } + + if (qualifier.invariant) + appendStr(" invariant"); + if (qualifier.noContraction) + appendStr(" noContraction"); + if (qualifier.centroid) + appendStr(" centroid"); + if (qualifier.smooth) + appendStr(" smooth"); + if (qualifier.flat) + appendStr(" flat"); + if (qualifier.nopersp) + appendStr(" noperspective"); +#ifdef AMD_EXTENSIONS + if (qualifier.explicitInterp) + appendStr(" __explicitInterpAMD"); +#endif + if (qualifier.patch) + appendStr(" patch"); + if (qualifier.sample) + appendStr(" sample"); + if (qualifier.coherent) + appendStr(" coherent"); + if (qualifier.volatil) + appendStr(" volatile"); + if (qualifier.restrict) + appendStr(" restrict"); + if (qualifier.readonly) + appendStr(" readonly"); + if (qualifier.writeonly) + appendStr(" writeonly"); + if (qualifier.specConstant) + appendStr(" specialization-constant"); + appendStr(" "); + appendStr(getStorageQualifierString()); + if (isArray()) { + for(int i = 0; i < (int)arraySizes->getNumDims(); ++i) { + int size = arraySizes->getDimSize(i); + if (size == 0) + appendStr(" implicitly-sized array of"); + else { + appendStr(" "); + appendInt(arraySizes->getDimSize(i)); + appendStr("-element array of"); + } + } + } + if (qualifier.precision != EpqNone) { + appendStr(" "); + appendStr(getPrecisionQualifierString()); + } + if (isMatrix()) { + appendStr(" "); + appendInt(matrixCols); + appendStr("X"); + appendInt(matrixRows); + appendStr(" matrix of"); + } else if (isVector()) { + appendStr(" "); + appendInt(vectorSize); + appendStr("-component vector of"); + } + + appendStr(" "); + typeString.append(getBasicTypeString()); + + if (qualifier.builtIn != EbvNone) { + appendStr(" "); + appendStr(getBuiltInVariableString()); + } + + // Add struct/block members + if (structure) { + appendStr("{"); + for (size_t i = 0; i < structure->size(); ++i) { + if (! (*structure)[i].type->hiddenMember()) { + typeString.append((*structure)[i].type->getCompleteString()); + typeString.append(" "); + typeString.append((*structure)[i].type->getFieldName()); + if (i < structure->size() - 1) + appendStr(", "); + } + } + appendStr("}"); + } + + return typeString; + } + + TString getBasicTypeString() const + { + if (basicType == EbtSampler) + return sampler.getString(); + else + return getBasicString(); + } + + const char* getStorageQualifierString() const { return GetStorageQualifierString(qualifier.storage); } + const char* getBuiltInVariableString() const { return GetBuiltInVariableString(qualifier.builtIn); } + const char* getPrecisionQualifierString() const { return GetPrecisionQualifierString(qualifier.precision); } + const TTypeList* getStruct() const { return structure; } + void setStruct(TTypeList* s) { structure = s; } + TTypeList* getWritableStruct() const { return structure; } // This should only be used when known to not be sharing with other threads + + int computeNumComponents() const + { + int components = 0; + + if (getBasicType() == EbtStruct || getBasicType() == EbtBlock) { + for (TTypeList::const_iterator tl = getStruct()->begin(); tl != getStruct()->end(); tl++) + components += ((*tl).type)->computeNumComponents(); + } else if (matrixCols) + components = matrixCols * matrixRows; + else + components = vectorSize; + + if (arraySizes != nullptr) { + components *= arraySizes->getCumulativeSize(); + } + + return components; + } + + // append this type's mangled name to the passed in 'name' + void appendMangledName(TString& name) const + { + buildMangledName(name); + name += ';' ; + } + + // Do two structure types match? They could be declared independently, + // in different places, but still might satisfy the definition of matching. + // From the spec: + // + // "Structures must have the same name, sequence of type names, and + // type definitions, and member names to be considered the same type. + // This rule applies recursively for nested or embedded types." + // + bool sameStructType(const TType& right) const + { + // Most commonly, they are both nullptr, or the same pointer to the same actual structure + if (structure == right.structure) + return true; + + // Both being nullptr was caught above, now they both have to be structures of the same number of elements + if (structure == nullptr || right.structure == nullptr || + structure->size() != right.structure->size()) + return false; + + // Structure names have to match + if (*typeName != *right.typeName) + return false; + + // Compare the names and types of all the members, which have to match + for (unsigned int i = 0; i < structure->size(); ++i) { + if ((*structure)[i].type->getFieldName() != (*right.structure)[i].type->getFieldName()) + return false; + + if (*(*structure)[i].type != *(*right.structure)[i].type) + return false; + } + + return true; + } + + // See if two types match, in all aspects except arrayness + bool sameElementType(const TType& right) const + { + return basicType == right.basicType && sameElementShape(right); + } + + // See if two type's arrayness match + bool sameArrayness(const TType& right) const + { + return ((arraySizes == nullptr && right.arraySizes == nullptr) || + (arraySizes != nullptr && right.arraySizes != nullptr && *arraySizes == *right.arraySizes)); + } + + // See if two type's arrayness match in everything except their outer dimension + bool sameInnerArrayness(const TType& right) const + { + assert(arraySizes != nullptr && right.arraySizes != nullptr); + return arraySizes->sameInnerArrayness(*right.arraySizes); + } + + // See if two type's elements match in all ways except basic type + bool sameElementShape(const TType& right) const + { + return sampler == right.sampler && + vectorSize == right.vectorSize && + matrixCols == right.matrixCols && + matrixRows == right.matrixRows && + vector1 == right.vector1 && + sameStructType(right); + } + + // See if two types match in all ways (just the actual type, not qualification) + bool operator==(const TType& right) const + { + return sameElementType(right) && sameArrayness(right); + } + + bool operator!=(const TType& right) const + { + return ! operator==(right); + } + +protected: + // Require consumer to pick between deep copy and shallow copy. + TType(const TType& type); + TType& operator=(const TType& type); + + // Recursively copy a type graph, while preserving the graph-like + // quality. That is, don't make more than one copy of a structure that + // gets reused multiple times in the type graph. + void deepCopy(const TType& copyOf, TMap& copiedMap) + { + shallowCopy(copyOf); + + if (copyOf.arraySizes) { + arraySizes = new TArraySizes; + *arraySizes = *copyOf.arraySizes; + } + + if (copyOf.structure) { + auto prevCopy = copiedMap.find(copyOf.structure); + if (prevCopy != copiedMap.end()) + structure = prevCopy->second; + else { + structure = new TTypeList; + copiedMap[copyOf.structure] = structure; + for (unsigned int i = 0; i < copyOf.structure->size(); ++i) { + TTypeLoc typeLoc; + typeLoc.loc = (*copyOf.structure)[i].loc; + typeLoc.type = new TType(); + typeLoc.type->deepCopy(*(*copyOf.structure)[i].type, copiedMap); + structure->push_back(typeLoc); + } + } + } + + if (copyOf.fieldName) + fieldName = NewPoolTString(copyOf.fieldName->c_str()); + if (copyOf.typeName) + typeName = NewPoolTString(copyOf.typeName->c_str()); + } + + + void buildMangledName(TString&) const; + + TBasicType basicType : 8; + int vectorSize : 4; // 1 means either scalar or 1-component vector; see vector1 to disambiguate. + int matrixCols : 4; + int matrixRows : 4; + bool vector1 : 1; // Backward-compatible tracking of a 1-component vector distinguished from a scalar. + // GLSL 4.5 never has a 1-component vector; so this will always be false until such + // functionality is added. + // HLSL does have a 1-component vectors, so this will be true to disambiguate + // from a scalar. + TQualifier qualifier; + + TArraySizes* arraySizes; // nullptr unless an array; can be shared across types + TTypeList* structure; // nullptr unless this is a struct; can be shared across types + TString *fieldName; // for structure field names + TString *typeName; // for structure type name + TSampler sampler; +}; + +} // end namespace glslang + +#endif // _TYPES_INCLUDED_ diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/Include/arrays.h b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/arrays.h new file mode 100644 index 0000000..b6b5e47 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/arrays.h @@ -0,0 +1,318 @@ +// +// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +// Copyright (C) 2012-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. +// + +// +// Implement types for tracking GLSL arrays, arrays of arrays, etc. +// + +#ifndef _ARRAYS_INCLUDED +#define _ARRAYS_INCLUDED + +namespace glslang { + +// This is used to mean there is no size yet (unsized), it is waiting to get a size from somewhere else. +const int UnsizedArraySize = 0; + +class TIntermTyped; +extern bool SameSpecializationConstants(TIntermTyped*, TIntermTyped*); + +// Specialization constants need both a nominal size and a node that defines +// the specialization constant being used. Array types are the same when their +// size and specialization constant nodes are the same. +struct TArraySize { + unsigned int size; + TIntermTyped* node; // nullptr means no specialization constant node + bool operator==(const TArraySize& rhs) const + { + if (size != rhs.size) + return false; + if (node == nullptr || rhs.node == nullptr) + return node == rhs.node; + + return SameSpecializationConstants(node, rhs.node); + } +}; + +// +// TSmallArrayVector is used as the container for the set of sizes in TArraySizes. +// It has generic-container semantics, while TArraySizes has array-of-array semantics. +// That is, TSmallArrayVector should be more focused on mechanism and TArraySizes on policy. +// +struct TSmallArrayVector { + // + // TODO: memory: TSmallArrayVector is intended to be smaller. + // Almost all arrays could be handled by two sizes each fitting + // in 16 bits, needing a real vector only in the cases where there + // are more than 3 sizes or a size needing more than 16 bits. + // + POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator()) + + TSmallArrayVector() : sizes(nullptr) { } + virtual ~TSmallArrayVector() { dealloc(); } + + // For breaking into two non-shared copies, independently modifiable. + TSmallArrayVector& operator=(const TSmallArrayVector& from) + { + if (from.sizes == nullptr) + sizes = nullptr; + else { + alloc(); + *sizes = *from.sizes; + } + + return *this; + } + + int size() const + { + if (sizes == nullptr) + return 0; + return (int)sizes->size(); + } + + unsigned int frontSize() const + { + assert(sizes != nullptr && sizes->size() > 0); + return sizes->front().size; + } + + TIntermTyped* frontNode() const + { + assert(sizes != nullptr && sizes->size() > 0); + return sizes->front().node; + } + + void changeFront(unsigned int s) + { + assert(sizes != nullptr); + // this should only happen for implicitly sized arrays, not specialization constants + assert(sizes->front().node == nullptr); + sizes->front().size = s; + } + + void push_back(unsigned int e, TIntermTyped* n) + { + alloc(); + TArraySize pair = { e, n }; + sizes->push_back(pair); + } + + void push_front(const TSmallArrayVector& newDims) + { + alloc(); + sizes->insert(sizes->begin(), newDims.sizes->begin(), newDims.sizes->end()); + } + + void pop_front() + { + assert(sizes != nullptr && sizes->size() > 0); + if (sizes->size() == 1) + dealloc(); + else + sizes->erase(sizes->begin()); + } + + // 'this' should currently not be holding anything, and copyNonFront + // will make it hold a copy of all but the first element of rhs. + // (This would be useful for making a type that is dereferenced by + // one dimension.) + void copyNonFront(const TSmallArrayVector& rhs) + { + assert(sizes == nullptr); + if (rhs.size() > 1) { + alloc(); + sizes->insert(sizes->begin(), rhs.sizes->begin() + 1, rhs.sizes->end()); + } + } + + unsigned int getDimSize(int i) const + { + assert(sizes != nullptr && (int)sizes->size() > i); + return (*sizes)[i].size; + } + + void setDimSize(int i, unsigned int size) const + { + assert(sizes != nullptr && (int)sizes->size() > i); + assert((*sizes)[i].node == nullptr); + (*sizes)[i].size = size; + } + + TIntermTyped* getDimNode(int i) const + { + assert(sizes != nullptr && (int)sizes->size() > i); + return (*sizes)[i].node; + } + + bool operator==(const TSmallArrayVector& rhs) const + { + if (sizes == nullptr && rhs.sizes == nullptr) + return true; + if (sizes == nullptr || rhs.sizes == nullptr) + return false; + return *sizes == *rhs.sizes; + } + bool operator!=(const TSmallArrayVector& rhs) const { return ! operator==(rhs); } + +protected: + TSmallArrayVector(const TSmallArrayVector&); + + void alloc() + { + if (sizes == nullptr) + sizes = new TVector; + } + void dealloc() + { + delete sizes; + sizes = nullptr; + } + + TVector* sizes; // will either hold such a pointer, or in the future, hold the two array sizes +}; + +// +// Represent an array, or array of arrays, to arbitrary depth. This is not +// done through a hierarchy of types in a type tree, rather all contiguous arrayness +// in the type hierarchy is localized into this single cumulative object. +// +// The arrayness in TTtype is a pointer, so that it can be non-allocated and zero +// for the vast majority of types that are non-array types. +// +// Order Policy: these are all identical: +// - left to right order within a contiguous set of ...[..][..][..]... in the source language +// - index order 0, 1, 2, ... within the 'sizes' member below +// - outer-most to inner-most +// +struct TArraySizes { + POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator()) + + TArraySizes() : implicitArraySize(1) { } + + // For breaking into two non-shared copies, independently modifiable. + TArraySizes& operator=(const TArraySizes& from) + { + implicitArraySize = from.implicitArraySize; + sizes = from.sizes; + + return *this; + } + + // translate from array-of-array semantics to container semantics + int getNumDims() const { return sizes.size(); } + int getDimSize(int dim) const { return sizes.getDimSize(dim); } + TIntermTyped* getDimNode(int dim) const { return sizes.getDimNode(dim); } + void setDimSize(int dim, int size) { sizes.setDimSize(dim, size); } + int getOuterSize() const { return sizes.frontSize(); } + TIntermTyped* getOuterNode() const { return sizes.frontNode(); } + int getCumulativeSize() const + { + int size = 1; + for (int d = 0; d < sizes.size(); ++d) { + // this only makes sense in paths that have a known array size + assert(sizes.getDimSize(d) != UnsizedArraySize); + size *= sizes.getDimSize(d); + } + return size; + } + void addInnerSize() { addInnerSize((unsigned)UnsizedArraySize); } + void addInnerSize(int s) { addInnerSize((unsigned)s, nullptr); } + void addInnerSize(int s, TIntermTyped* n) { sizes.push_back((unsigned)s, n); } + void addInnerSize(TArraySize pair) { sizes.push_back(pair.size, pair.node); } + void changeOuterSize(int s) { sizes.changeFront((unsigned)s); } + int getImplicitSize() const { return (int)implicitArraySize; } + void setImplicitSize(int s) { implicitArraySize = s; } + bool isInnerImplicit() const + { + for (int d = 1; d < sizes.size(); ++d) { + if (sizes.getDimSize(d) == (unsigned)UnsizedArraySize) + return true; + } + + return false; + } + bool isImplicit() const { return getOuterSize() == UnsizedArraySize || isInnerImplicit(); } + void addOuterSizes(const TArraySizes& s) { sizes.push_front(s.sizes); } + void dereference() { sizes.pop_front(); } + void copyDereferenced(const TArraySizes& rhs) + { + assert(sizes.size() == 0); + if (rhs.sizes.size() > 1) + sizes.copyNonFront(rhs.sizes); + } + + bool sameInnerArrayness(const TArraySizes& rhs) const + { + if (sizes.size() != rhs.sizes.size()) + return false; + + for (int d = 1; d < sizes.size(); ++d) { + if (sizes.getDimSize(d) != rhs.sizes.getDimSize(d) || + sizes.getDimNode(d) != rhs.sizes.getDimNode(d)) + return false; + } + + 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; } + +protected: + TSmallArrayVector sizes; + + TArraySizes(const TArraySizes&); + + // for tracking maximum referenced index, before an explicit size is given + // applies only to the outer-most dimension + int implicitArraySize; +}; + +} // end namespace glslang + +#endif // _ARRAYS_INCLUDED_ diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/Include/intermediate.h b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/intermediate.h new file mode 100644 index 0000000..934994d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/intermediate.h @@ -0,0 +1,1263 @@ +// +// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +// Copyright (C) 2012-2016 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. +// + +// +// Definition of the in-memory high-level intermediate representation +// of shaders. This is a tree that parser creates. +// +// Nodes in the tree are defined as a hierarchy of classes derived from +// TIntermNode. Each is a node in a tree. There is no preset branching factor; +// each node can have it's own type of list of children. +// + +#ifndef __INTERMEDIATE_H +#define __INTERMEDIATE_H + +#if _MSC_VER >= 1900 + #pragma warning(disable : 4464) // relative include path contains '..' + #pragma warning(disable : 5026) // 'glslang::TIntermUnary': move constructor was implicitly defined as deleted +#endif + +#include "../Include/Common.h" +#include "../Include/Types.h" +#include "../Include/ConstantUnion.h" + +namespace glslang { + +class TIntermediate; + +// +// Operators used by the high-level (parse tree) representation. +// +enum TOperator { + EOpNull, // if in a node, should only mean a node is still being built + EOpSequence, // denotes a list of statements, or parameters, etc. + EOpLinkerObjects, // for aggregate node of objects the linker may need, if not reference by the rest of the AST + EOpFunctionCall, + EOpFunction, // For function definition + EOpParameters, // an aggregate listing the parameters to a function + + // + // Unary operators + // + + EOpNegative, + EOpLogicalNot, + EOpVectorLogicalNot, + EOpBitwiseNot, + + EOpPostIncrement, + EOpPostDecrement, + EOpPreIncrement, + EOpPreDecrement, + + EOpConvIntToBool, + EOpConvUintToBool, + EOpConvFloatToBool, + EOpConvDoubleToBool, + EOpConvInt64ToBool, + EOpConvUint64ToBool, + EOpConvBoolToFloat, + EOpConvIntToFloat, + EOpConvUintToFloat, + EOpConvDoubleToFloat, + EOpConvInt64ToFloat, + EOpConvUint64ToFloat, + EOpConvUintToInt, + EOpConvFloatToInt, + EOpConvBoolToInt, + EOpConvDoubleToInt, + EOpConvInt64ToInt, + EOpConvUint64ToInt, + EOpConvIntToUint, + EOpConvFloatToUint, + EOpConvBoolToUint, + EOpConvDoubleToUint, + EOpConvInt64ToUint, + EOpConvUint64ToUint, + EOpConvIntToDouble, + EOpConvUintToDouble, + EOpConvFloatToDouble, + EOpConvBoolToDouble, + EOpConvInt64ToDouble, + EOpConvUint64ToDouble, + EOpConvBoolToInt64, + EOpConvIntToInt64, + EOpConvUintToInt64, + EOpConvFloatToInt64, + EOpConvDoubleToInt64, + EOpConvUint64ToInt64, + EOpConvBoolToUint64, + EOpConvIntToUint64, + EOpConvUintToUint64, + EOpConvFloatToUint64, + EOpConvDoubleToUint64, + EOpConvInt64ToUint64, +#ifdef AMD_EXTENSIONS + EOpConvBoolToFloat16, + EOpConvIntToFloat16, + EOpConvUintToFloat16, + EOpConvFloatToFloat16, + EOpConvDoubleToFloat16, + EOpConvInt64ToFloat16, + EOpConvUint64ToFloat16, + EOpConvFloat16ToBool, + EOpConvFloat16ToInt, + EOpConvFloat16ToUint, + EOpConvFloat16ToFloat, + EOpConvFloat16ToDouble, + EOpConvFloat16ToInt64, + EOpConvFloat16ToUint64, +#endif + + // + // binary operations + // + + EOpAdd, + EOpSub, + EOpMul, + EOpDiv, + EOpMod, + EOpRightShift, + EOpLeftShift, + EOpAnd, + EOpInclusiveOr, + EOpExclusiveOr, + EOpEqual, + EOpNotEqual, + EOpVectorEqual, + EOpVectorNotEqual, + EOpLessThan, + EOpGreaterThan, + EOpLessThanEqual, + EOpGreaterThanEqual, + EOpComma, + + EOpVectorTimesScalar, + EOpVectorTimesMatrix, + EOpMatrixTimesVector, + EOpMatrixTimesScalar, + + EOpLogicalOr, + EOpLogicalXor, + EOpLogicalAnd, + + EOpIndexDirect, + EOpIndexIndirect, + EOpIndexDirectStruct, + + EOpVectorSwizzle, + + EOpMethod, + EOpScoping, + + // + // Built-in functions mapped to operators + // + + EOpRadians, + EOpDegrees, + EOpSin, + EOpCos, + EOpTan, + EOpAsin, + EOpAcos, + EOpAtan, + EOpSinh, + EOpCosh, + EOpTanh, + EOpAsinh, + EOpAcosh, + EOpAtanh, + + EOpPow, + EOpExp, + EOpLog, + EOpExp2, + EOpLog2, + EOpSqrt, + EOpInverseSqrt, + + EOpAbs, + EOpSign, + EOpFloor, + EOpTrunc, + EOpRound, + EOpRoundEven, + EOpCeil, + EOpFract, + EOpModf, + EOpMin, + EOpMax, + EOpClamp, + EOpMix, + EOpStep, + EOpSmoothStep, + + EOpIsNan, + EOpIsInf, + + EOpFma, + + EOpFrexp, + EOpLdexp, + + EOpFloatBitsToInt, + EOpFloatBitsToUint, + EOpIntBitsToFloat, + EOpUintBitsToFloat, + EOpDoubleBitsToInt64, + EOpDoubleBitsToUint64, + EOpInt64BitsToDouble, + EOpUint64BitsToDouble, + EOpPackSnorm2x16, + EOpUnpackSnorm2x16, + EOpPackUnorm2x16, + EOpUnpackUnorm2x16, + EOpPackSnorm4x8, + EOpUnpackSnorm4x8, + EOpPackUnorm4x8, + EOpUnpackUnorm4x8, + EOpPackHalf2x16, + EOpUnpackHalf2x16, + EOpPackDouble2x32, + EOpUnpackDouble2x32, + EOpPackInt2x32, + EOpUnpackInt2x32, + EOpPackUint2x32, + EOpUnpackUint2x32, +#ifdef AMD_EXTENSIONS + EOpPackFloat2x16, + EOpUnpackFloat2x16, +#endif + + EOpLength, + EOpDistance, + EOpDot, + EOpCross, + EOpNormalize, + EOpFaceForward, + EOpReflect, + EOpRefract, + +#ifdef AMD_EXTENSIONS + EOpMin3, + EOpMax3, + EOpMid3, +#endif + + EOpDPdx, // Fragment only + EOpDPdy, // Fragment only + EOpFwidth, // Fragment only + EOpDPdxFine, // Fragment only + EOpDPdyFine, // Fragment only + EOpFwidthFine, // Fragment only + EOpDPdxCoarse, // Fragment only + EOpDPdyCoarse, // Fragment only + EOpFwidthCoarse, // Fragment only + + EOpInterpolateAtCentroid, // Fragment only + EOpInterpolateAtSample, // Fragment only + EOpInterpolateAtOffset, // Fragment only + +#ifdef AMD_EXTENSIONS + EOpInterpolateAtVertex, +#endif + + EOpMatrixTimesMatrix, + EOpOuterProduct, + EOpDeterminant, + EOpMatrixInverse, + EOpTranspose, + + EOpFtransform, + + EOpNoise, + + EOpEmitVertex, // geometry only + EOpEndPrimitive, // geometry only + EOpEmitStreamVertex, // geometry only + EOpEndStreamPrimitive, // geometry only + + EOpBarrier, + EOpMemoryBarrier, + EOpMemoryBarrierAtomicCounter, + EOpMemoryBarrierBuffer, + EOpMemoryBarrierImage, + EOpMemoryBarrierShared, // compute only + EOpGroupMemoryBarrier, // compute only + + EOpBallot, + EOpReadInvocation, + EOpReadFirstInvocation, + + EOpAnyInvocation, + EOpAllInvocations, + EOpAllInvocationsEqual, + +#ifdef AMD_EXTENSIONS + EOpMinInvocations, + EOpMaxInvocations, + EOpAddInvocations, + EOpMinInvocationsNonUniform, + EOpMaxInvocationsNonUniform, + EOpAddInvocationsNonUniform, + EOpMinInvocationsInclusiveScan, + EOpMaxInvocationsInclusiveScan, + EOpAddInvocationsInclusiveScan, + EOpMinInvocationsInclusiveScanNonUniform, + EOpMaxInvocationsInclusiveScanNonUniform, + EOpAddInvocationsInclusiveScanNonUniform, + EOpMinInvocationsExclusiveScan, + EOpMaxInvocationsExclusiveScan, + EOpAddInvocationsExclusiveScan, + EOpMinInvocationsExclusiveScanNonUniform, + EOpMaxInvocationsExclusiveScanNonUniform, + EOpAddInvocationsExclusiveScanNonUniform, + EOpSwizzleInvocations, + EOpSwizzleInvocationsMasked, + EOpWriteInvocation, + EOpMbcnt, + + EOpCubeFaceIndex, + EOpCubeFaceCoord, + EOpTime, +#endif + + EOpAtomicAdd, + EOpAtomicMin, + EOpAtomicMax, + EOpAtomicAnd, + EOpAtomicOr, + EOpAtomicXor, + EOpAtomicExchange, + EOpAtomicCompSwap, + + EOpAtomicCounterIncrement, + EOpAtomicCounterDecrement, + EOpAtomicCounter, + + EOpAny, + EOpAll, + + // + // Branch + // + + EOpKill, // Fragment only + EOpReturn, + EOpBreak, + EOpContinue, + EOpCase, + EOpDefault, + + // + // Constructors + // + + EOpConstructGuardStart, + EOpConstructInt, // these first scalar forms also identify what implicit conversion is needed + EOpConstructUint, + EOpConstructInt64, + EOpConstructUint64, + EOpConstructBool, + EOpConstructFloat, + EOpConstructDouble, + EOpConstructVec2, + EOpConstructVec3, + EOpConstructVec4, + EOpConstructDVec2, + EOpConstructDVec3, + EOpConstructDVec4, + EOpConstructBVec2, + EOpConstructBVec3, + EOpConstructBVec4, + EOpConstructIVec2, + EOpConstructIVec3, + EOpConstructIVec4, + EOpConstructUVec2, + EOpConstructUVec3, + EOpConstructUVec4, + EOpConstructI64Vec2, + EOpConstructI64Vec3, + EOpConstructI64Vec4, + EOpConstructU64Vec2, + EOpConstructU64Vec3, + EOpConstructU64Vec4, + EOpConstructMat2x2, + EOpConstructMat2x3, + EOpConstructMat2x4, + EOpConstructMat3x2, + EOpConstructMat3x3, + EOpConstructMat3x4, + EOpConstructMat4x2, + EOpConstructMat4x3, + EOpConstructMat4x4, + EOpConstructDMat2x2, + EOpConstructDMat2x3, + EOpConstructDMat2x4, + EOpConstructDMat3x2, + EOpConstructDMat3x3, + EOpConstructDMat3x4, + EOpConstructDMat4x2, + EOpConstructDMat4x3, + EOpConstructDMat4x4, +#ifdef AMD_EXTENSIONS + EOpConstructFloat16, + EOpConstructF16Vec2, + EOpConstructF16Vec3, + EOpConstructF16Vec4, + EOpConstructF16Mat2x2, + EOpConstructF16Mat2x3, + EOpConstructF16Mat2x4, + EOpConstructF16Mat3x2, + EOpConstructF16Mat3x3, + EOpConstructF16Mat3x4, + EOpConstructF16Mat4x2, + EOpConstructF16Mat4x3, + EOpConstructF16Mat4x4, +#endif + EOpConstructStruct, + EOpConstructTextureSampler, + EOpConstructGuardEnd, + + // + // moves + // + + EOpAssign, + EOpAddAssign, + EOpSubAssign, + EOpMulAssign, + EOpVectorTimesMatrixAssign, + EOpVectorTimesScalarAssign, + EOpMatrixTimesScalarAssign, + EOpMatrixTimesMatrixAssign, + EOpDivAssign, + EOpModAssign, + EOpAndAssign, + EOpInclusiveOrAssign, + EOpExclusiveOrAssign, + EOpLeftShiftAssign, + EOpRightShiftAssign, + + // + // Array operators + // + + EOpArrayLength, // "Array" distinguishes from length(v) built-in function, but it applies to vectors and matrices as well. + + // + // Image operations + // + + EOpImageGuardBegin, + + EOpImageQuerySize, + EOpImageQuerySamples, + EOpImageLoad, + EOpImageStore, + EOpImageAtomicAdd, + EOpImageAtomicMin, + EOpImageAtomicMax, + EOpImageAtomicAnd, + EOpImageAtomicOr, + EOpImageAtomicXor, + EOpImageAtomicExchange, + EOpImageAtomicCompSwap, + + EOpSubpassLoad, + EOpSubpassLoadMS, + EOpSparseImageLoad, + + EOpImageGuardEnd, + + // + // Texture operations + // + + EOpTextureGuardBegin, + + EOpTextureQuerySize, + EOpTextureQueryLod, + EOpTextureQueryLevels, + EOpTextureQuerySamples, + + EOpSamplingGuardBegin, + + EOpTexture, + EOpTextureProj, + EOpTextureLod, + EOpTextureOffset, + EOpTextureFetch, + EOpTextureFetchOffset, + EOpTextureProjOffset, + EOpTextureLodOffset, + EOpTextureProjLod, + EOpTextureProjLodOffset, + EOpTextureGrad, + EOpTextureGradOffset, + EOpTextureProjGrad, + EOpTextureProjGradOffset, + EOpTextureGather, + EOpTextureGatherOffset, + EOpTextureGatherOffsets, + EOpTextureClamp, + EOpTextureOffsetClamp, + EOpTextureGradClamp, + EOpTextureGradOffsetClamp, + + EOpSparseTextureGuardBegin, + + EOpSparseTexture, + EOpSparseTextureLod, + EOpSparseTextureOffset, + EOpSparseTextureFetch, + EOpSparseTextureFetchOffset, + EOpSparseTextureLodOffset, + EOpSparseTextureGrad, + EOpSparseTextureGradOffset, + EOpSparseTextureGather, + EOpSparseTextureGatherOffset, + EOpSparseTextureGatherOffsets, + EOpSparseTexelsResident, + EOpSparseTextureClamp, + EOpSparseTextureOffsetClamp, + EOpSparseTextureGradClamp, + EOpSparseTextureGradOffsetClamp, + + EOpSparseTextureGuardEnd, + EOpSamplingGuardEnd, + EOpTextureGuardEnd, + + // + // Integer operations + // + + EOpAddCarry, + EOpSubBorrow, + EOpUMulExtended, + EOpIMulExtended, + EOpBitfieldExtract, + EOpBitfieldInsert, + EOpBitFieldReverse, + EOpBitCount, + EOpFindLSB, + EOpFindMSB, + + // + // HLSL operations + // + + EOpClip, // discard if input value < 0 + EOpIsFinite, + EOpLog10, // base 10 log + EOpRcp, // 1/x + EOpSaturate, // clamp from 0 to 1 + EOpSinCos, // sin and cos in out parameters + EOpGenMul, // mul(x,y) on any of mat/vec/scalars + EOpDst, // x = 1, y=src0.y * src1.y, z=src0.z, w=src1.w + EOpInterlockedAdd, // atomic ops, but uses [optional] out arg instead of return + EOpInterlockedAnd, // ... + EOpInterlockedCompareExchange, // ... + EOpInterlockedCompareStore, // ... + EOpInterlockedExchange, // ... + EOpInterlockedMax, // ... + EOpInterlockedMin, // ... + EOpInterlockedOr, // ... + EOpInterlockedXor, // ... + EOpAllMemoryBarrierWithGroupSync, // memory barriers without non-hlsl AST equivalents + EOpGroupMemoryBarrierWithGroupSync, // ... + EOpWorkgroupMemoryBarrier, // ... + EOpWorkgroupMemoryBarrierWithGroupSync, // ... + EOpEvaluateAttributeSnapped, // InterpolateAtOffset with int position on 16x16 grid + EOpF32tof16, // HLSL conversion: half of a PackHalf2x16 + EOpF16tof32, // HLSL conversion: half of an UnpackHalf2x16 + EOpLit, // HLSL lighting coefficient vector + EOpTextureBias, // HLSL texture bias: will be lowered to EOpTexture + EOpAsDouble, // slightly different from EOpUint64BitsToDouble + EOpD3DCOLORtoUBYTE4, // convert and swizzle 4-component color to UBYTE4 range + + EOpMethodSample, // Texture object methods. These are translated to existing + EOpMethodSampleBias, // AST methods, and exist to represent HLSL semantics until that + EOpMethodSampleCmp, // translation is performed. See HlslParseContext::decomposeSampleMethods(). + EOpMethodSampleCmpLevelZero, // ... + EOpMethodSampleGrad, // ... + EOpMethodSampleLevel, // ... + EOpMethodLoad, // ... + EOpMethodGetDimensions, // ... + EOpMethodGetSamplePosition, // ... + EOpMethodGather, // ... + EOpMethodCalculateLevelOfDetail, // ... + EOpMethodCalculateLevelOfDetailUnclamped, // ... + + // Load already defined above for textures + EOpMethodLoad2, // Structure buffer object methods. These are translated to existing + EOpMethodLoad3, // AST methods, and exist to represent HLSL semantics until that + EOpMethodLoad4, // translation is performed. See HlslParseContext::decomposeSampleMethods(). + EOpMethodStore, // ... + EOpMethodStore2, // ... + EOpMethodStore3, // ... + EOpMethodStore4, // ... + + // SM5 texture methods + EOpMethodGatherRed, // These are covered under the above EOpMethodSample comment about + EOpMethodGatherGreen, // translation to existing AST opcodes. They exist temporarily + EOpMethodGatherBlue, // because HLSL arguments are slightly different. + EOpMethodGatherAlpha, // ... + EOpMethodGatherCmp, // ... + EOpMethodGatherCmpRed, // ... + EOpMethodGatherCmpGreen, // ... + EOpMethodGatherCmpBlue, // ... + EOpMethodGatherCmpAlpha, // ... + + // geometry methods + EOpMethodAppend, // Geometry shader methods + EOpMethodRestartStrip, // ... + + // matrix + EOpMatrixSwizzle, // select multiple matrix components (non-column) +}; + +class TIntermTraverser; +class TIntermOperator; +class TIntermAggregate; +class TIntermUnary; +class TIntermBinary; +class TIntermConstantUnion; +class TIntermSelection; +class TIntermSwitch; +class TIntermBranch; +class TIntermTyped; +class TIntermMethod; +class TIntermSymbol; + +} // end namespace glslang + +// +// Base class for the tree nodes +// +// (Put outside the glslang namespace, as it's used as part of the external interface.) +// +class TIntermNode { +public: + POOL_ALLOCATOR_NEW_DELETE(glslang::GetThreadPoolAllocator()) + + TIntermNode() { loc.init(); } + virtual const glslang::TSourceLoc& getLoc() const { return loc; } + virtual void setLoc(const glslang::TSourceLoc& l) { loc = l; } + virtual void traverse(glslang::TIntermTraverser*) = 0; + virtual glslang::TIntermTyped* getAsTyped() { return 0; } + virtual glslang::TIntermOperator* getAsOperator() { return 0; } + virtual glslang::TIntermConstantUnion* getAsConstantUnion() { return 0; } + virtual glslang::TIntermAggregate* getAsAggregate() { return 0; } + virtual glslang::TIntermUnary* getAsUnaryNode() { return 0; } + virtual glslang::TIntermBinary* getAsBinaryNode() { return 0; } + virtual glslang::TIntermSelection* getAsSelectionNode() { return 0; } + virtual glslang::TIntermSwitch* getAsSwitchNode() { return 0; } + virtual glslang::TIntermMethod* getAsMethodNode() { return 0; } + virtual glslang::TIntermSymbol* getAsSymbolNode() { return 0; } + virtual glslang::TIntermBranch* getAsBranchNode() { return 0; } + + virtual const glslang::TIntermTyped* getAsTyped() const { return 0; } + virtual const glslang::TIntermOperator* getAsOperator() const { return 0; } + virtual const glslang::TIntermConstantUnion* getAsConstantUnion() const { return 0; } + virtual const glslang::TIntermAggregate* getAsAggregate() const { return 0; } + virtual const glslang::TIntermUnary* getAsUnaryNode() const { return 0; } + virtual const glslang::TIntermBinary* getAsBinaryNode() const { return 0; } + virtual const glslang::TIntermSelection* getAsSelectionNode() const { return 0; } + virtual const glslang::TIntermSwitch* getAsSwitchNode() const { return 0; } + 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 ~TIntermNode() { } + +protected: + TIntermNode(const TIntermNode&); + TIntermNode& operator=(const TIntermNode&); + glslang::TSourceLoc loc; +}; + +namespace glslang { + +// +// This is just to help yacc. +// +struct TIntermNodePair { + TIntermNode* node1; + TIntermNode* node2; +}; + +// +// Intermediate class for nodes that have a type. +// +class TIntermTyped : public TIntermNode { +public: + TIntermTyped(const TType& t) { type.shallowCopy(t); } + TIntermTyped(TBasicType basicType) { TType bt(basicType); type.shallowCopy(bt); } + virtual TIntermTyped* getAsTyped() { return this; } + virtual const TIntermTyped* getAsTyped() const { return this; } + virtual void setType(const TType& t) { type.shallowCopy(t); } + virtual const TType& getType() const { return type; } + virtual TType& getWritableType() { return type; } + + virtual TBasicType getBasicType() const { return type.getBasicType(); } + virtual TQualifier& getQualifier() { return type.getQualifier(); } + virtual const TQualifier& getQualifier() const { return type.getQualifier(); } + virtual void propagatePrecision(TPrecisionQualifier); + virtual int getVectorSize() const { return type.getVectorSize(); } + virtual int getMatrixCols() const { return type.getMatrixCols(); } + virtual int getMatrixRows() const { return type.getMatrixRows(); } + virtual bool isMatrix() const { return type.isMatrix(); } + virtual bool isArray() const { return type.isArray(); } + virtual bool isVector() const { return type.isVector(); } + virtual bool isScalar() const { return type.isScalar(); } + virtual bool isStruct() const { return type.isStruct(); } + TString getCompleteString() const { return type.getCompleteString(); } + +protected: + TIntermTyped& operator=(const TIntermTyped&); + TType type; +}; + +// +// Handle for, do-while, and while loops. +// +class TIntermLoop : public TIntermNode { +public: + TIntermLoop(TIntermNode* aBody, TIntermTyped* aTest, TIntermTyped* aTerminal, bool testFirst) : + body(aBody), + test(aTest), + terminal(aTerminal), + first(testFirst) { } + virtual void traverse(TIntermTraverser*); + TIntermNode* getBody() const { return body; } + TIntermTyped* getTest() const { return test; } + TIntermTyped* getTerminal() const { return terminal; } + bool testFirst() const { return first; } +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 +}; + +// +// Handle case, break, continue, return, and kill. +// +class TIntermBranch : public TIntermNode { +public: + TIntermBranch(TOperator op, TIntermTyped* e) : + flowOp(op), + expression(e) { } + virtual TIntermBranch* getAsBranchNode() { return this; } + virtual const TIntermBranch* getAsBranchNode() const { return this; } + virtual void traverse(TIntermTraverser*); + TOperator getFlowOp() const { return flowOp; } + TIntermTyped* getExpression() const { return expression; } +protected: + TOperator flowOp; + TIntermTyped* expression; +}; + +// +// Represent method names before seeing their calling signature +// or resolving them to operations. Just an expression as the base object +// and a textural name. +// +class TIntermMethod : public TIntermTyped { +public: + TIntermMethod(TIntermTyped* o, const TType& t, const TString& m) : TIntermTyped(t), object(o), method(m) { } + virtual TIntermMethod* getAsMethodNode() { return this; } + virtual const TIntermMethod* getAsMethodNode() const { return this; } + virtual const TString& getMethodName() const { return method; } + virtual TIntermTyped* getObject() const { return object; } + virtual void traverse(TIntermTraverser*); +protected: + TIntermTyped* object; + TString method; +}; + +// +// Nodes that correspond to symbols or constants in the source code. +// +class TIntermSymbol : public TIntermTyped { +public: + // if symbol is initialized as symbol(sym), the memory comes from the pool allocator of sym. If sym comes from + // 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) + { name = n; } + virtual int getId() const { return id; } + virtual const TString& getName() const { return name; } + virtual void traverse(TIntermTraverser*); + virtual TIntermSymbol* getAsSymbolNode() { return this; } + virtual const TIntermSymbol* getAsSymbolNode() const { return this; } + void setConstArray(const TConstUnionArray& c) { constArray = c; } + const TConstUnionArray& getConstArray() const { return constArray; } + void setConstSubtree(TIntermTyped* subtree) { constSubtree = subtree; } + TIntermTyped* getConstSubtree() const { return constSubtree; } + +protected: + int id; // the unique id of the symbol this node represents + 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; +}; + +class TIntermConstantUnion : public TIntermTyped { +public: + TIntermConstantUnion(const TConstUnionArray& ua, const TType& t) : TIntermTyped(t), constArray(ua), literal(false) { } + const TConstUnionArray& getConstArray() const { return constArray; } + virtual TIntermConstantUnion* getAsConstantUnion() { return this; } + virtual const TIntermConstantUnion* getAsConstantUnion() const { return this; } + virtual void traverse(TIntermTraverser*); + virtual TIntermTyped* fold(TOperator, const TIntermTyped*) const; + virtual TIntermTyped* fold(TOperator, const TType&) const; + void setLiteral() { literal = true; } + void setExpression() { literal = false; } + bool isLiteral() const { return literal; } + +protected: + TIntermConstantUnion& operator=(const TIntermConstantUnion&); + + const TConstUnionArray constArray; + bool literal; // true if node represents a literal in the source code +}; + +// Represent the independent aspects of a texturing TOperator +struct TCrackedTextureOp { + bool query; + bool proj; + bool lod; + bool fetch; + bool offset; + bool offsets; + bool gather; + bool grad; + bool subpass; + bool lodClamp; +}; + +// +// Intermediate class for node types that hold operators. +// +class TIntermOperator : public TIntermTyped { +public: + virtual TIntermOperator* getAsOperator() { return this; } + virtual const TIntermOperator* getAsOperator() const { return this; } + TOperator getOp() const { return op; } + void setOp(TOperator newOp) { op = newOp; } + bool modifiesState() const; + bool isConstructor() const; + bool isTexture() const { return op > EOpTextureGuardBegin && op < EOpTextureGuardEnd; } + bool isSampling() const { return op > EOpSamplingGuardBegin && op < EOpSamplingGuardEnd; } + bool isImage() const { return op > EOpImageGuardBegin && op < EOpImageGuardEnd; } + bool isSparseTexture() const { return op > EOpSparseTextureGuardBegin && op < EOpSparseTextureGuardEnd; } + bool isSparseImage() const { return op == EOpSparseImageLoad; } + + void setOperationPrecision(TPrecisionQualifier p) { operationPrecision = p; } + TPrecisionQualifier getOperationPrecision() const { return operationPrecision != EpqNone ? + operationPrecision : + type.getQualifier().precision; } + TString getCompleteString() const + { + TString cs = type.getCompleteString(); + if (getOperationPrecision() != type.getQualifier().precision) { + cs += ", operation at "; + cs += GetPrecisionQualifierString(getOperationPrecision()); + } + + return cs; + } + + // Crack the op into the individual dimensions of texturing operation. + void crackTexture(TSampler sampler, TCrackedTextureOp& cracked) const + { + cracked.query = false; + cracked.proj = false; + cracked.lod = false; + cracked.fetch = false; + cracked.offset = false; + cracked.offsets = false; + cracked.gather = false; + cracked.grad = false; + cracked.subpass = false; + cracked.lodClamp = false; + + switch (op) { + case EOpImageQuerySize: + case EOpImageQuerySamples: + case EOpTextureQuerySize: + case EOpTextureQueryLod: + case EOpTextureQueryLevels: + case EOpTextureQuerySamples: + case EOpSparseTexelsResident: + cracked.query = true; + break; + case EOpTexture: + case EOpSparseTexture: + break; + case EOpTextureClamp: + case EOpSparseTextureClamp: + cracked.lodClamp = true; + break; + case EOpTextureProj: + cracked.proj = true; + break; + case EOpTextureLod: + case EOpSparseTextureLod: + cracked.lod = true; + break; + case EOpTextureOffset: + case EOpSparseTextureOffset: + cracked.offset = true; + break; + case EOpTextureOffsetClamp: + case EOpSparseTextureOffsetClamp: + cracked.offset = true; + cracked.lodClamp = true; + break; + case EOpTextureFetch: + case EOpSparseTextureFetch: + cracked.fetch = true; + if (sampler.dim == Esd1D || (sampler.dim == Esd2D && ! sampler.ms) || sampler.dim == Esd3D) + cracked.lod = true; + break; + case EOpTextureFetchOffset: + case EOpSparseTextureFetchOffset: + cracked.fetch = true; + cracked.offset = true; + if (sampler.dim == Esd1D || (sampler.dim == Esd2D && ! sampler.ms) || sampler.dim == Esd3D) + cracked.lod = true; + break; + case EOpTextureProjOffset: + cracked.offset = true; + cracked.proj = true; + break; + case EOpTextureLodOffset: + case EOpSparseTextureLodOffset: + cracked.offset = true; + cracked.lod = true; + break; + case EOpTextureProjLod: + cracked.lod = true; + cracked.proj = true; + break; + case EOpTextureProjLodOffset: + cracked.offset = true; + cracked.lod = true; + cracked.proj = true; + break; + case EOpTextureGrad: + case EOpSparseTextureGrad: + cracked.grad = true; + break; + case EOpTextureGradClamp: + case EOpSparseTextureGradClamp: + cracked.grad = true; + cracked.lodClamp = true; + break; + case EOpTextureGradOffset: + case EOpSparseTextureGradOffset: + cracked.grad = true; + cracked.offset = true; + break; + case EOpTextureProjGrad: + cracked.grad = true; + cracked.proj = true; + break; + case EOpTextureProjGradOffset: + cracked.grad = true; + cracked.offset = true; + cracked.proj = true; + break; + case EOpTextureGradOffsetClamp: + case EOpSparseTextureGradOffsetClamp: + cracked.grad = true; + cracked.offset = true; + cracked.lodClamp = true; + break; + case EOpTextureGather: + case EOpSparseTextureGather: + cracked.gather = true; + break; + case EOpTextureGatherOffset: + case EOpSparseTextureGatherOffset: + cracked.gather = true; + cracked.offset = true; + break; + case EOpTextureGatherOffsets: + case EOpSparseTextureGatherOffsets: + cracked.gather = true; + cracked.offsets = true; + break; + case EOpSubpassLoad: + case EOpSubpassLoadMS: + cracked.subpass = true; + break; + default: + break; + } + } + +protected: + TIntermOperator(TOperator o) : TIntermTyped(EbtFloat), op(o), operationPrecision(EpqNone) {} + TIntermOperator(TOperator o, TType& t) : TIntermTyped(t), op(o), operationPrecision(EpqNone) {} + TOperator op; + // The result precision is in the inherited TType, and is usually meant to be both + // the operation precision and the result precision. However, some more complex things, + // like built-in function calls, distinguish between the two, in which case non-EqpNone + // 'operationPrecision' overrides the result precision as far as operation precision + // is concerned. + TPrecisionQualifier operationPrecision; +}; + +// +// Nodes for all the basic binary math operators. +// +class TIntermBinary : public TIntermOperator { +public: + TIntermBinary(TOperator o) : TIntermOperator(o) {} + virtual void traverse(TIntermTraverser*); + virtual void setLeft(TIntermTyped* n) { left = n; } + virtual void setRight(TIntermTyped* n) { right = n; } + virtual TIntermTyped* getLeft() const { return left; } + virtual TIntermTyped* getRight() const { return right; } + virtual TIntermBinary* getAsBinaryNode() { return this; } + virtual const TIntermBinary* getAsBinaryNode() const { return this; } + virtual void updatePrecision(); +protected: + TIntermTyped* left; + TIntermTyped* right; +}; + +// +// Nodes for unary math operators. +// +class TIntermUnary : public TIntermOperator { +public: + TIntermUnary(TOperator o, TType& t) : TIntermOperator(o, t), operand(0) {} + TIntermUnary(TOperator o) : TIntermOperator(o), operand(0) {} + virtual void traverse(TIntermTraverser*); + virtual void setOperand(TIntermTyped* o) { operand = o; } + virtual TIntermTyped* getOperand() { return operand; } + virtual const TIntermTyped* getOperand() const { return operand; } + virtual TIntermUnary* getAsUnaryNode() { return this; } + virtual const TIntermUnary* getAsUnaryNode() const { return this; } + virtual void updatePrecision(); +protected: + TIntermTyped* operand; +}; + +typedef TVector TIntermSequence; +typedef TVector 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() { delete pragmaTable; } + virtual TIntermAggregate* getAsAggregate() { return this; } + virtual const TIntermAggregate* getAsAggregate() const { return this; } + virtual void setOperator(TOperator o) { op = o; } + virtual TIntermSequence& getSequence() { return sequence; } + virtual const TIntermSequence& getSequence() const { return sequence; } + virtual void setName(const TString& n) { name = n; } + virtual const TString& getName() const { return name; } + virtual void traverse(TIntermTraverser*); + virtual void setUserDefined() { userDefined = true; } + virtual bool isUserDefined() { return userDefined; } + virtual TQualifierList& getQualifierList() { return qualifier; } + virtual const TQualifierList& getQualifierList() const { return qualifier; } + void setOptimize(bool o) { optimize = o; } + void setDebug(bool d) { debug = d; } + bool getOptimize() const { return optimize; } + bool getDebug() const { return debug; } + void addToPragmaTable(const TPragmaTable& pTable); + const TPragmaTable& getPragmaTable() const { return *pragmaTable; } +protected: + TIntermAggregate(const TIntermAggregate&); // disallow copy constructor + TIntermAggregate& operator=(const TIntermAggregate&); // disallow assignment operator + TIntermSequence sequence; + TQualifierList qualifier; + TString name; + bool userDefined; // used for user defined function names + bool optimize; + bool debug; + TPragmaTable* pragmaTable; +}; + +// +// For if tests. +// +class TIntermSelection : public TIntermTyped { +public: + TIntermSelection(TIntermTyped* cond, TIntermNode* trueB, TIntermNode* falseB) : + TIntermTyped(EbtVoid), condition(cond), trueBlock(trueB), falseBlock(falseB) {} + TIntermSelection(TIntermTyped* cond, TIntermNode* trueB, TIntermNode* falseB, const TType& type) : + TIntermTyped(type), condition(cond), trueBlock(trueB), falseBlock(falseB) {} + 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; } +protected: + TIntermTyped* condition; + TIntermNode* trueBlock; + TIntermNode* falseBlock; +}; + +// +// For switch statements. Designed use is that a switch will have sequence of nodes +// that are either case/default nodes or a *single* node that represents all the code +// in between (if any) consecutive case/defaults. So, a traversal need only deal with +// 0 or 1 nodes per case/default statement. +// +class TIntermSwitch : public TIntermNode { +public: + TIntermSwitch(TIntermTyped* cond, TIntermAggregate* b) : condition(cond), body(b) { } + 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; } +protected: + TIntermTyped* condition; + TIntermAggregate* body; +}; + +enum TVisit +{ + EvPreVisit, + EvInVisit, + EvPostVisit +}; + +// +// For traversing the tree. User should derive from this, +// put their traversal specific data in it, and then pass +// it to a Traverse method. +// +// When using this, just fill in the methods for nodes you want visited. +// Return false from a pre-visit to skip visiting that node's subtree. +// +// Explicitly set postVisit to true if you want post visiting, otherwise, +// filled in methods will only be called at pre-visit time (before processing +// the subtree). Similarly for inVisit for in-order visiting of nodes with +// multiple children. +// +// If you only want post-visits, explicitly turn off preVisit (and inVisit) +// and turn on postVisit. +// +// In general, for the visit*() methods, return true from interior nodes +// to have the traversal continue on to children. +// +// If you process children yourself, or don't want them processed, return false. +// +class TIntermTraverser { +public: + POOL_ALLOCATOR_NEW_DELETE(glslang::GetThreadPoolAllocator()) + TIntermTraverser(bool preVisit = true, bool inVisit = false, bool postVisit = false, bool rightToLeft = false) : + preVisit(preVisit), + inVisit(inVisit), + postVisit(postVisit), + rightToLeft(rightToLeft), + depth(0), + maxDepth(0) { } + virtual ~TIntermTraverser() { } + + virtual void visitSymbol(TIntermSymbol*) { } + virtual void visitConstantUnion(TIntermConstantUnion*) { } + virtual bool visitBinary(TVisit, TIntermBinary*) { return true; } + virtual bool visitUnary(TVisit, TIntermUnary*) { return true; } + virtual bool visitSelection(TVisit, TIntermSelection*) { return true; } + virtual bool visitAggregate(TVisit, TIntermAggregate*) { return true; } + virtual bool visitLoop(TVisit, TIntermLoop*) { return true; } + virtual bool visitBranch(TVisit, TIntermBranch*) { return true; } + virtual bool visitSwitch(TVisit, TIntermSwitch*) { return true; } + + int getMaxDepth() const { return maxDepth; } + + void incrementDepth(TIntermNode *current) + { + depth++; + maxDepth = (std::max)(maxDepth, depth); + path.push_back(current); + } + + void decrementDepth() + { + depth--; + path.pop_back(); + } + + TIntermNode *getParentNode() + { + return path.size() == 0 ? NULL : path.back(); + } + + const bool preVisit; + const bool inVisit; + const bool postVisit; + const bool rightToLeft; + +protected: + TIntermTraverser& operator=(TIntermTraverser&); + + int depth; + int maxDepth; + + // All the nodes from root to the current node's parent during traversing. + TVector path; +}; + +// KHR_vulkan_glsl says "Two arrays sized with specialization constants are the same type only if +// sized with the same symbol, involving no operations" +inline bool SameSpecializationConstants(TIntermTyped* node1, TIntermTyped* node2) +{ + return node1->getAsSymbolNode() && node2->getAsSymbolNode() && + node1->getAsSymbolNode()->getId() == node2->getAsSymbolNode()->getId(); +} + +} // end namespace glslang + +#endif // __INTERMEDIATE_H diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/Include/revision.h b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/revision.h new file mode 100644 index 0000000..d442909 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/revision.h @@ -0,0 +1,6 @@ +// This header is generated by the make-revision script. +// 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" diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/Include/revision.template b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/revision.template new file mode 100644 index 0000000..6c13630 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/revision.template @@ -0,0 +1,13 @@ +// The file revision.h should be updated to the latest version, somehow, on +// check-in, if glslang has changed. +// +// revision.template is the source for revision.h when using SubWCRev as the +// method of updating revision.h. You don't have to do it this way, the +// requirement is only that revision.h gets updated. +// +// revision.h is under source control so that not all consumers of glslang +// source have to figure out how to create revision.h just to get a build +// going. However, if it is not updated, it can be a version behind. + +#define GLSLANG_REVISION "$WCREV$" +#define GLSLANG_DATE "$WCDATE$" diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Constant.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Constant.cpp new file mode 100644 index 0000000..fff8fd2 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Constant.cpp @@ -0,0 +1,995 @@ +// +// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +// Copyright (C) 2012-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. +// + +#include "localintermediate.h" +#include +#include +#include + +namespace { + +using namespace glslang; + +typedef union { + double d; + int i[2]; +} DoubleIntUnion; + +// Some helper functions + +bool isNan(double x) +{ + DoubleIntUnion u; + // tough to find a platform independent library function, do it directly + u.d = x; + int bitPatternL = u.i[0]; + int bitPatternH = u.i[1]; + return (bitPatternH & 0x7ff80000) == 0x7ff80000 && + ((bitPatternH & 0xFFFFF) != 0 || bitPatternL != 0); +} + +bool isInf(double x) +{ + DoubleIntUnion u; + // tough to find a platform independent library function, do it directly + u.d = x; + int bitPatternL = u.i[0]; + int bitPatternH = u.i[1]; + return (bitPatternH & 0x7ff00000) == 0x7ff00000 && + (bitPatternH & 0xFFFFF) == 0 && bitPatternL == 0; +} + +const double pi = 3.1415926535897932384626433832795; + +} // end anonymous namespace + + +namespace glslang { + +// +// The fold functions see if an operation on a constant can be done in place, +// without generating run-time code. +// +// Returns the node to keep using, which may or may not be the node passed in. +// +// Note: As of version 1.2, all constant operations must be folded. It is +// not opportunistic, but rather a semantic requirement. +// + +// +// Do folding between a pair of nodes. +// 'this' is the left-hand operand and 'rightConstantNode' is the right-hand operand. +// +// Returns a new node representing the result. +// +TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TIntermTyped* rightConstantNode) const +{ + // For most cases, the return type matches the argument type, so set that + // up and just code to exceptions below. + TType returnType; + returnType.shallowCopy(getType()); + + // + // A pair of nodes is to be folded together + // + + const TIntermConstantUnion *rightNode = rightConstantNode->getAsConstantUnion(); + TConstUnionArray leftUnionArray = getConstArray(); + TConstUnionArray rightUnionArray = rightNode->getConstArray(); + + // Figure out the size of the result + int newComps; + int constComps; + switch(op) { + case EOpMatrixTimesMatrix: + newComps = rightNode->getMatrixCols() * getMatrixRows(); + break; + case EOpMatrixTimesVector: + newComps = getMatrixRows(); + break; + case EOpVectorTimesMatrix: + newComps = rightNode->getMatrixCols(); + break; + default: + newComps = getType().computeNumComponents(); + constComps = rightConstantNode->getType().computeNumComponents(); + if (constComps == 1 && newComps > 1) { + // for a case like vec4 f = vec4(2,3,4,5) + 1.2; + TConstUnionArray smearedArray(newComps, rightNode->getConstArray()[0]); + rightUnionArray = smearedArray; + } else if (constComps > 1 && newComps == 1) { + // for a case like vec4 f = 1.2 + vec4(2,3,4,5); + newComps = constComps; + rightUnionArray = rightNode->getConstArray(); + TConstUnionArray smearedArray(newComps, getConstArray()[0]); + leftUnionArray = smearedArray; + returnType.shallowCopy(rightNode->getType()); + } + break; + } + + TConstUnionArray newConstArray(newComps); + TType constBool(EbtBool, EvqConst); + + switch(op) { + case EOpAdd: + for (int i = 0; i < newComps; i++) + newConstArray[i] = leftUnionArray[i] + rightUnionArray[i]; + break; + case EOpSub: + for (int i = 0; i < newComps; i++) + newConstArray[i] = leftUnionArray[i] - rightUnionArray[i]; + break; + + case EOpMul: + case EOpVectorTimesScalar: + case EOpMatrixTimesScalar: + for (int i = 0; i < newComps; i++) + newConstArray[i] = leftUnionArray[i] * rightUnionArray[i]; + break; + case EOpMatrixTimesMatrix: + for (int row = 0; row < getMatrixRows(); row++) { + for (int column = 0; column < rightNode->getMatrixCols(); column++) { + double sum = 0.0f; + for (int i = 0; i < rightNode->getMatrixRows(); i++) + sum += leftUnionArray[i * getMatrixRows() + row].getDConst() * rightUnionArray[column * rightNode->getMatrixRows() + i].getDConst(); + newConstArray[column * getMatrixRows() + row].setDConst(sum); + } + } + returnType.shallowCopy(TType(getType().getBasicType(), EvqConst, 0, rightNode->getMatrixCols(), getMatrixRows())); + break; + case EOpDiv: + for (int i = 0; i < newComps; i++) { + switch (getType().getBasicType()) { + case EbtDouble: + case EbtFloat: +#ifdef AMD_EXTENSIONS + case EbtFloat16: +#endif + newConstArray[i].setDConst(leftUnionArray[i].getDConst() / rightUnionArray[i].getDConst()); + break; + + case EbtInt: + if (rightUnionArray[i] == 0) + newConstArray[i].setIConst(0x7FFFFFFF); + else if (rightUnionArray[i].getIConst() == -1 && leftUnionArray[i].getIConst() == (int)0x80000000) + newConstArray[i].setIConst(0x80000000); + else + newConstArray[i].setIConst(leftUnionArray[i].getIConst() / rightUnionArray[i].getIConst()); + break; + + case EbtUint: + if (rightUnionArray[i] == 0) { + newConstArray[i].setUConst(0xFFFFFFFF); + } else + newConstArray[i].setUConst(leftUnionArray[i].getUConst() / rightUnionArray[i].getUConst()); + break; + + case EbtInt64: + if (rightUnionArray[i] == 0) + newConstArray[i].setI64Const(0x7FFFFFFFFFFFFFFFll); + else if (rightUnionArray[i].getI64Const() == -1 && leftUnionArray[i].getI64Const() == (long long)0x8000000000000000) + newConstArray[i].setI64Const(0x8000000000000000); + else + newConstArray[i].setI64Const(leftUnionArray[i].getI64Const() / rightUnionArray[i].getI64Const()); + break; + + case EbtUint64: + if (rightUnionArray[i] == 0) { + newConstArray[i].setU64Const(0xFFFFFFFFFFFFFFFFull); + } else + newConstArray[i].setU64Const(leftUnionArray[i].getU64Const() / rightUnionArray[i].getU64Const()); + break; + default: + return 0; + } + } + break; + + case EOpMatrixTimesVector: + for (int i = 0; i < getMatrixRows(); i++) { + double sum = 0.0f; + for (int j = 0; j < rightNode->getVectorSize(); j++) { + sum += leftUnionArray[j*getMatrixRows() + i].getDConst() * rightUnionArray[j].getDConst(); + } + newConstArray[i].setDConst(sum); + } + + returnType.shallowCopy(TType(getBasicType(), EvqConst, getMatrixRows())); + break; + + case EOpVectorTimesMatrix: + for (int i = 0; i < rightNode->getMatrixCols(); i++) { + double sum = 0.0f; + for (int j = 0; j < getVectorSize(); j++) + sum += leftUnionArray[j].getDConst() * rightUnionArray[i*rightNode->getMatrixRows() + j].getDConst(); + newConstArray[i].setDConst(sum); + } + + returnType.shallowCopy(TType(getBasicType(), EvqConst, rightNode->getMatrixCols())); + break; + + case EOpMod: + for (int i = 0; i < newComps; i++) { + if (rightUnionArray[i] == 0) + newConstArray[i] = leftUnionArray[i]; + else + newConstArray[i] = leftUnionArray[i] % rightUnionArray[i]; + } + break; + + case EOpRightShift: + for (int i = 0; i < newComps; i++) + newConstArray[i] = leftUnionArray[i] >> rightUnionArray[i]; + break; + + case EOpLeftShift: + for (int i = 0; i < newComps; i++) + newConstArray[i] = leftUnionArray[i] << rightUnionArray[i]; + break; + + case EOpAnd: + for (int i = 0; i < newComps; i++) + newConstArray[i] = leftUnionArray[i] & rightUnionArray[i]; + break; + case EOpInclusiveOr: + for (int i = 0; i < newComps; i++) + newConstArray[i] = leftUnionArray[i] | rightUnionArray[i]; + break; + case EOpExclusiveOr: + for (int i = 0; i < newComps; i++) + newConstArray[i] = leftUnionArray[i] ^ rightUnionArray[i]; + break; + + case EOpLogicalAnd: // this code is written for possible future use, will not get executed currently + for (int i = 0; i < newComps; i++) + newConstArray[i] = leftUnionArray[i] && rightUnionArray[i]; + break; + + case EOpLogicalOr: // this code is written for possible future use, will not get executed currently + for (int i = 0; i < newComps; i++) + newConstArray[i] = leftUnionArray[i] || rightUnionArray[i]; + break; + + case EOpLogicalXor: + for (int i = 0; i < newComps; i++) { + switch (getType().getBasicType()) { + case EbtBool: newConstArray[i].setBConst((leftUnionArray[i] == rightUnionArray[i]) ? false : true); break; + default: assert(false && "Default missing"); + } + } + break; + + case EOpLessThan: + newConstArray[0].setBConst(leftUnionArray[0] < rightUnionArray[0]); + returnType.shallowCopy(constBool); + break; + case EOpGreaterThan: + newConstArray[0].setBConst(leftUnionArray[0] > rightUnionArray[0]); + returnType.shallowCopy(constBool); + break; + case EOpLessThanEqual: + newConstArray[0].setBConst(! (leftUnionArray[0] > rightUnionArray[0])); + returnType.shallowCopy(constBool); + break; + case EOpGreaterThanEqual: + newConstArray[0].setBConst(! (leftUnionArray[0] < rightUnionArray[0])); + returnType.shallowCopy(constBool); + break; + case EOpEqual: + newConstArray[0].setBConst(rightNode->getConstArray() == leftUnionArray); + returnType.shallowCopy(constBool); + break; + case EOpNotEqual: + newConstArray[0].setBConst(rightNode->getConstArray() != leftUnionArray); + returnType.shallowCopy(constBool); + break; + + default: + return 0; + } + + TIntermConstantUnion *newNode = new TIntermConstantUnion(newConstArray, returnType); + newNode->setLoc(getLoc()); + + return newNode; +} + +// +// Do single unary node folding +// +// Returns a new node representing the result. +// +TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType) const +{ + // First, size the result, which is mostly the same as the argument's size, + // but not always, and classify what is componentwise. + // Also, eliminate cases that can't be compile-time constant. + int resultSize; + bool componentWise = true; + + int objectSize = getType().computeNumComponents(); + switch (op) { + case EOpDeterminant: + case EOpAny: + case EOpAll: + case EOpLength: + componentWise = false; + resultSize = 1; + break; + + case EOpEmitStreamVertex: + case EOpEndStreamPrimitive: + // These don't actually fold + return 0; + + case EOpPackSnorm2x16: + case EOpPackUnorm2x16: + case EOpPackHalf2x16: + componentWise = false; + resultSize = 1; + break; + + case EOpUnpackSnorm2x16: + case EOpUnpackUnorm2x16: + case EOpUnpackHalf2x16: + componentWise = false; + resultSize = 2; + break; + + case EOpNormalize: + componentWise = false; + resultSize = objectSize; + break; + + default: + resultSize = objectSize; + break; + } + + // Set up for processing + TConstUnionArray newConstArray(resultSize); + const TConstUnionArray& unionArray = getConstArray(); + + // Process non-component-wise operations + switch (op) { + case EOpLength: + case EOpNormalize: + { + double sum = 0; + for (int i = 0; i < objectSize; i++) + sum += unionArray[i].getDConst() * unionArray[i].getDConst(); + double length = sqrt(sum); + if (op == EOpLength) + newConstArray[0].setDConst(length); + else { + for (int i = 0; i < objectSize; i++) + newConstArray[i].setDConst(unionArray[i].getDConst() / length); + } + break; + } + + case EOpAny: + { + bool result = false; + for (int i = 0; i < objectSize; i++) { + if (unionArray[i].getBConst()) + result = true; + } + newConstArray[0].setBConst(result); + break; + } + case EOpAll: + { + bool result = true; + for (int i = 0; i < objectSize; i++) { + if (! unionArray[i].getBConst()) + result = false; + } + newConstArray[0].setBConst(result); + break; + } + + // TODO: 3.0 Functionality: unary constant folding: the rest of the ops have to be fleshed out + + case EOpPackSnorm2x16: + case EOpPackUnorm2x16: + case EOpPackHalf2x16: + + case EOpUnpackSnorm2x16: + case EOpUnpackUnorm2x16: + case EOpUnpackHalf2x16: + + case EOpDeterminant: + case EOpMatrixInverse: + case EOpTranspose: + return 0; + + default: + assert(componentWise); + break; + } + + // Turn off the componentwise loop + if (! componentWise) + objectSize = 0; + + // Process component-wise operations + for (int i = 0; i < objectSize; i++) { + switch (op) { + case EOpNegative: + switch (getType().getBasicType()) { + case EbtDouble: +#ifdef AMD_EXTENSIONS + case EbtFloat16: +#endif + case EbtFloat: newConstArray[i].setDConst(-unionArray[i].getDConst()); break; + case EbtInt: newConstArray[i].setIConst(-unionArray[i].getIConst()); break; + case EbtUint: newConstArray[i].setUConst(static_cast(-static_cast(unionArray[i].getUConst()))); break; + case EbtInt64: newConstArray[i].setI64Const(-unionArray[i].getI64Const()); break; + case EbtUint64: newConstArray[i].setU64Const(static_cast(-static_cast(unionArray[i].getU64Const()))); break; + default: + return 0; + } + break; + case EOpLogicalNot: + case EOpVectorLogicalNot: + switch (getType().getBasicType()) { + case EbtBool: newConstArray[i].setBConst(!unionArray[i].getBConst()); break; + default: + return 0; + } + break; + case EOpBitwiseNot: + newConstArray[i] = ~unionArray[i]; + break; + case EOpRadians: + newConstArray[i].setDConst(unionArray[i].getDConst() * pi / 180.0); + break; + case EOpDegrees: + newConstArray[i].setDConst(unionArray[i].getDConst() * 180.0 / pi); + break; + case EOpSin: + newConstArray[i].setDConst(sin(unionArray[i].getDConst())); + break; + case EOpCos: + newConstArray[i].setDConst(cos(unionArray[i].getDConst())); + break; + case EOpTan: + newConstArray[i].setDConst(tan(unionArray[i].getDConst())); + break; + case EOpAsin: + newConstArray[i].setDConst(asin(unionArray[i].getDConst())); + break; + case EOpAcos: + newConstArray[i].setDConst(acos(unionArray[i].getDConst())); + break; + case EOpAtan: + newConstArray[i].setDConst(atan(unionArray[i].getDConst())); + break; + + case EOpDPdx: + case EOpDPdy: + case EOpFwidth: + case EOpDPdxFine: + case EOpDPdyFine: + case EOpFwidthFine: + case EOpDPdxCoarse: + case EOpDPdyCoarse: + case EOpFwidthCoarse: + // The derivatives are all mandated to create a constant 0. + newConstArray[i].setDConst(0.0); + break; + + case EOpExp: + newConstArray[i].setDConst(exp(unionArray[i].getDConst())); + break; + case EOpLog: + newConstArray[i].setDConst(log(unionArray[i].getDConst())); + break; + case EOpExp2: + { + const double inv_log2_e = 0.69314718055994530941723212145818; + newConstArray[i].setDConst(exp(unionArray[i].getDConst() * inv_log2_e)); + break; + } + case EOpLog2: + { + const double log2_e = 1.4426950408889634073599246810019; + newConstArray[i].setDConst(log2_e * log(unionArray[i].getDConst())); + break; + } + case EOpSqrt: + newConstArray[i].setDConst(sqrt(unionArray[i].getDConst())); + break; + case EOpInverseSqrt: + newConstArray[i].setDConst(1.0 / sqrt(unionArray[i].getDConst())); + break; + + case EOpAbs: + if (unionArray[i].getType() == EbtDouble) + newConstArray[i].setDConst(fabs(unionArray[i].getDConst())); + else if (unionArray[i].getType() == EbtInt) + newConstArray[i].setIConst(abs(unionArray[i].getIConst())); + else + newConstArray[i] = unionArray[i]; + break; + case EOpSign: + #define SIGN(X) (X == 0 ? 0 : (X < 0 ? -1 : 1)) + if (unionArray[i].getType() == EbtDouble) + newConstArray[i].setDConst(SIGN(unionArray[i].getDConst())); + else + newConstArray[i].setIConst(SIGN(unionArray[i].getIConst())); + break; + case EOpFloor: + newConstArray[i].setDConst(floor(unionArray[i].getDConst())); + break; + case EOpTrunc: + if (unionArray[i].getDConst() > 0) + newConstArray[i].setDConst(floor(unionArray[i].getDConst())); + else + newConstArray[i].setDConst(ceil(unionArray[i].getDConst())); + break; + case EOpRound: + newConstArray[i].setDConst(floor(0.5 + unionArray[i].getDConst())); + break; + case EOpRoundEven: + { + double flr = floor(unionArray[i].getDConst()); + bool even = flr / 2.0 == floor(flr / 2.0); + double rounded = even ? ceil(unionArray[i].getDConst() - 0.5) : floor(unionArray[i].getDConst() + 0.5); + newConstArray[i].setDConst(rounded); + break; + } + case EOpCeil: + newConstArray[i].setDConst(ceil(unionArray[i].getDConst())); + break; + case EOpFract: + { + double x = unionArray[i].getDConst(); + newConstArray[i].setDConst(x - floor(x)); + break; + } + + case EOpIsNan: + { + newConstArray[i].setBConst(isNan(unionArray[i].getDConst())); + break; + } + case EOpIsInf: + { + newConstArray[i].setBConst(isInf(unionArray[i].getDConst())); + break; + } + + // TODO: 3.0 Functionality: unary constant folding: the rest of the ops have to be fleshed out + + case EOpSinh: + case EOpCosh: + case EOpTanh: + case EOpAsinh: + case EOpAcosh: + case EOpAtanh: + + case EOpFloatBitsToInt: + case EOpFloatBitsToUint: + case EOpIntBitsToFloat: + case EOpUintBitsToFloat: + case EOpDoubleBitsToInt64: + case EOpDoubleBitsToUint64: + + default: + return 0; + } + } + + TIntermConstantUnion *newNode = new TIntermConstantUnion(newConstArray, returnType); + newNode->getWritableType().getQualifier().storage = EvqConst; + newNode->setLoc(getLoc()); + + return newNode; +} + +// +// Do constant folding for an aggregate node that has all its children +// as constants and an operator that requires constant folding. +// +TIntermTyped* TIntermediate::fold(TIntermAggregate* aggrNode) +{ + if (aggrNode == nullptr) + return aggrNode; + + if (! areAllChildConst(aggrNode)) + return aggrNode; + + if (aggrNode->isConstructor()) + return foldConstructor(aggrNode); + + TIntermSequence& children = aggrNode->getSequence(); + + // First, see if this is an operation to constant fold, kick out if not, + // see what size the result is if so. + + bool componentwise = false; // will also say componentwise if a scalar argument gets repeated to make per-component results + int objectSize; + switch (aggrNode->getOp()) { + case EOpAtan: + case EOpPow: + case EOpMin: + case EOpMax: + case EOpMix: + case EOpClamp: + case EOpLessThan: + case EOpGreaterThan: + case EOpLessThanEqual: + case EOpGreaterThanEqual: + case EOpVectorEqual: + case EOpVectorNotEqual: + componentwise = true; + objectSize = children[0]->getAsConstantUnion()->getType().computeNumComponents(); + break; + case EOpCross: + case EOpReflect: + case EOpRefract: + case EOpFaceForward: + objectSize = children[0]->getAsConstantUnion()->getType().computeNumComponents(); + break; + case EOpDistance: + case EOpDot: + objectSize = 1; + break; + case EOpOuterProduct: + objectSize = children[0]->getAsTyped()->getType().getVectorSize() * + children[1]->getAsTyped()->getType().getVectorSize(); + break; + case EOpStep: + componentwise = true; + objectSize = std::max(children[0]->getAsTyped()->getType().getVectorSize(), + children[1]->getAsTyped()->getType().getVectorSize()); + break; + case EOpSmoothStep: + componentwise = true; + objectSize = std::max(children[0]->getAsTyped()->getType().getVectorSize(), + children[2]->getAsTyped()->getType().getVectorSize()); + break; + default: + return aggrNode; + } + TConstUnionArray newConstArray(objectSize); + + TVector childConstUnions; + for (unsigned int arg = 0; arg < children.size(); ++arg) + childConstUnions.push_back(children[arg]->getAsConstantUnion()->getConstArray()); + + // Second, do the actual folding + + bool isFloatingPoint = children[0]->getAsTyped()->getBasicType() == EbtFloat || +#ifdef AMD_EXTENSIONS + children[0]->getAsTyped()->getBasicType() == EbtFloat16 || +#endif + children[0]->getAsTyped()->getBasicType() == EbtDouble; + bool isSigned = children[0]->getAsTyped()->getBasicType() == EbtInt || + children[0]->getAsTyped()->getBasicType() == EbtInt64; + bool isInt64 = children[0]->getAsTyped()->getBasicType() == EbtInt64 || + children[0]->getAsTyped()->getBasicType() == EbtUint64; + if (componentwise) { + for (int comp = 0; comp < objectSize; comp++) { + + // some arguments are scalars instead of matching vectors; simulate a smear + int arg0comp = std::min(comp, children[0]->getAsTyped()->getType().getVectorSize() - 1); + int arg1comp = 0; + if (children.size() > 1) + arg1comp = std::min(comp, children[1]->getAsTyped()->getType().getVectorSize() - 1); + int arg2comp = 0; + if (children.size() > 2) + arg2comp = std::min(comp, children[2]->getAsTyped()->getType().getVectorSize() - 1); + + switch (aggrNode->getOp()) { + case EOpAtan: + newConstArray[comp].setDConst(atan2(childConstUnions[0][arg0comp].getDConst(), childConstUnions[1][arg1comp].getDConst())); + break; + case EOpPow: + newConstArray[comp].setDConst(pow(childConstUnions[0][arg0comp].getDConst(), childConstUnions[1][arg1comp].getDConst())); + break; + case EOpMin: + if (isFloatingPoint) + newConstArray[comp].setDConst(std::min(childConstUnions[0][arg0comp].getDConst(), childConstUnions[1][arg1comp].getDConst())); + else if (isSigned) { + if (isInt64) + newConstArray[comp].setI64Const(std::min(childConstUnions[0][arg0comp].getI64Const(), childConstUnions[1][arg1comp].getI64Const())); + else + newConstArray[comp].setIConst(std::min(childConstUnions[0][arg0comp].getIConst(), childConstUnions[1][arg1comp].getIConst())); + } else { + if (isInt64) + newConstArray[comp].setU64Const(std::min(childConstUnions[0][arg0comp].getU64Const(), childConstUnions[1][arg1comp].getU64Const())); + else + newConstArray[comp].setUConst(std::min(childConstUnions[0][arg0comp].getUConst(), childConstUnions[1][arg1comp].getUConst())); + } + break; + case EOpMax: + if (isFloatingPoint) + newConstArray[comp].setDConst(std::max(childConstUnions[0][arg0comp].getDConst(), childConstUnions[1][arg1comp].getDConst())); + else if (isSigned) { + if (isInt64) + newConstArray[comp].setI64Const(std::max(childConstUnions[0][arg0comp].getI64Const(), childConstUnions[1][arg1comp].getI64Const())); + else + newConstArray[comp].setIConst(std::max(childConstUnions[0][arg0comp].getIConst(), childConstUnions[1][arg1comp].getIConst())); + } else { + if (isInt64) + newConstArray[comp].setU64Const(std::max(childConstUnions[0][arg0comp].getU64Const(), childConstUnions[1][arg1comp].getU64Const())); + else + newConstArray[comp].setUConst(std::max(childConstUnions[0][arg0comp].getUConst(), childConstUnions[1][arg1comp].getUConst())); + } + break; + case EOpClamp: + if (isFloatingPoint) + newConstArray[comp].setDConst(std::min(std::max(childConstUnions[0][arg0comp].getDConst(), childConstUnions[1][arg1comp].getDConst()), + childConstUnions[2][arg2comp].getDConst())); + else if (isSigned) { + if (isInt64) + newConstArray[comp].setI64Const(std::min(std::max(childConstUnions[0][arg0comp].getI64Const(), childConstUnions[1][arg1comp].getI64Const()), + childConstUnions[2][arg2comp].getI64Const())); + else + newConstArray[comp].setIConst(std::min(std::max(childConstUnions[0][arg0comp].getIConst(), childConstUnions[1][arg1comp].getIConst()), + childConstUnions[2][arg2comp].getIConst())); + } else { + if (isInt64) + newConstArray[comp].setU64Const(std::min(std::max(childConstUnions[0][arg0comp].getU64Const(), childConstUnions[1][arg1comp].getU64Const()), + childConstUnions[2][arg2comp].getU64Const())); + else + newConstArray[comp].setUConst(std::min(std::max(childConstUnions[0][arg0comp].getUConst(), childConstUnions[1][arg1comp].getUConst()), + childConstUnions[2][arg2comp].getUConst())); + } + break; + case EOpLessThan: + newConstArray[comp].setBConst(childConstUnions[0][arg0comp] < childConstUnions[1][arg1comp]); + break; + case EOpGreaterThan: + newConstArray[comp].setBConst(childConstUnions[0][arg0comp] > childConstUnions[1][arg1comp]); + break; + case EOpLessThanEqual: + newConstArray[comp].setBConst(! (childConstUnions[0][arg0comp] > childConstUnions[1][arg1comp])); + break; + case EOpGreaterThanEqual: + newConstArray[comp].setBConst(! (childConstUnions[0][arg0comp] < childConstUnions[1][arg1comp])); + break; + case EOpVectorEqual: + newConstArray[comp].setBConst(childConstUnions[0][arg0comp] == childConstUnions[1][arg1comp]); + break; + case EOpVectorNotEqual: + newConstArray[comp].setBConst(childConstUnions[0][arg0comp] != childConstUnions[1][arg1comp]); + break; + case EOpMix: + if (children[2]->getAsTyped()->getBasicType() == EbtBool) + newConstArray[comp].setDConst(childConstUnions[2][arg2comp].getBConst() ? childConstUnions[1][arg1comp].getDConst() : + childConstUnions[0][arg0comp].getDConst()); + else + newConstArray[comp].setDConst(childConstUnions[0][arg0comp].getDConst() * (1.0 - childConstUnions[2][arg2comp].getDConst()) + + childConstUnions[1][arg1comp].getDConst() * childConstUnions[2][arg2comp].getDConst()); + break; + case EOpStep: + newConstArray[comp].setDConst(childConstUnions[1][arg1comp].getDConst() < childConstUnions[0][arg0comp].getDConst() ? 0.0 : 1.0); + break; + case EOpSmoothStep: + { + double t = (childConstUnions[2][arg2comp].getDConst() - childConstUnions[0][arg0comp].getDConst()) / + (childConstUnions[1][arg1comp].getDConst() - childConstUnions[0][arg0comp].getDConst()); + if (t < 0.0) + t = 0.0; + if (t > 1.0) + t = 1.0; + newConstArray[comp].setDConst(t * t * (3.0 - 2.0 * t)); + break; + } + default: + return aggrNode; + } + } + } else { + // Non-componentwise... + + int numComps = children[0]->getAsConstantUnion()->getType().computeNumComponents(); + double dot; + + switch (aggrNode->getOp()) { + case EOpDistance: + { + double sum = 0.0; + for (int comp = 0; comp < numComps; ++comp) { + double diff = childConstUnions[1][comp].getDConst() - childConstUnions[0][comp].getDConst(); + sum += diff * diff; + } + newConstArray[0].setDConst(sqrt(sum)); + break; + } + case EOpDot: + newConstArray[0].setDConst(childConstUnions[0].dot(childConstUnions[1])); + break; + case EOpCross: + newConstArray[0] = childConstUnions[0][1] * childConstUnions[1][2] - childConstUnions[0][2] * childConstUnions[1][1]; + newConstArray[1] = childConstUnions[0][2] * childConstUnions[1][0] - childConstUnions[0][0] * childConstUnions[1][2]; + newConstArray[2] = childConstUnions[0][0] * childConstUnions[1][1] - childConstUnions[0][1] * childConstUnions[1][0]; + break; + case EOpFaceForward: + // If dot(Nref, I) < 0 return N, otherwise return -N: Arguments are (N, I, Nref). + dot = childConstUnions[1].dot(childConstUnions[2]); + for (int comp = 0; comp < numComps; ++comp) { + if (dot < 0.0) + newConstArray[comp] = childConstUnions[0][comp]; + else + newConstArray[comp].setDConst(-childConstUnions[0][comp].getDConst()); + } + break; + case EOpReflect: + // I - 2 * dot(N, I) * N: Arguments are (I, N). + dot = childConstUnions[0].dot(childConstUnions[1]); + dot *= 2.0; + for (int comp = 0; comp < numComps; ++comp) + newConstArray[comp].setDConst(childConstUnions[0][comp].getDConst() - dot * childConstUnions[1][comp].getDConst()); + break; + case EOpRefract: + { + // Arguments are (I, N, eta). + // k = 1.0 - eta * eta * (1.0 - dot(N, I) * dot(N, I)) + // if (k < 0.0) + // return dvec(0.0) + // else + // return eta * I - (eta * dot(N, I) + sqrt(k)) * N + dot = childConstUnions[0].dot(childConstUnions[1]); + double eta = childConstUnions[2][0].getDConst(); + double k = 1.0 - eta * eta * (1.0 - dot * dot); + if (k < 0.0) { + for (int comp = 0; comp < numComps; ++comp) + newConstArray[comp].setDConst(0.0); + } else { + for (int comp = 0; comp < numComps; ++comp) + newConstArray[comp].setDConst(eta * childConstUnions[0][comp].getDConst() - (eta * dot + sqrt(k)) * childConstUnions[1][comp].getDConst()); + } + break; + } + case EOpOuterProduct: + { + int numRows = numComps; + int numCols = children[1]->getAsConstantUnion()->getType().computeNumComponents(); + for (int row = 0; row < numRows; ++row) + for (int col = 0; col < numCols; ++col) + newConstArray[col * numRows + row] = childConstUnions[0][row] * childConstUnions[1][col]; + break; + } + default: + return aggrNode; + } + } + + TIntermConstantUnion *newNode = new TIntermConstantUnion(newConstArray, aggrNode->getType()); + newNode->getWritableType().getQualifier().storage = EvqConst; + newNode->setLoc(aggrNode->getLoc()); + + return newNode; +} + +bool TIntermediate::areAllChildConst(TIntermAggregate* aggrNode) +{ + bool allConstant = true; + + // check if all the child nodes are constants so that they can be inserted into + // the parent node + if (aggrNode) { + TIntermSequence& childSequenceVector = aggrNode->getSequence(); + for (TIntermSequence::iterator p = childSequenceVector.begin(); + p != childSequenceVector.end(); p++) { + if (!(*p)->getAsTyped()->getAsConstantUnion()) + return false; + } + } + + return allConstant; +} + +TIntermTyped* TIntermediate::foldConstructor(TIntermAggregate* aggrNode) +{ + bool error = false; + + TConstUnionArray unionArray(aggrNode->getType().computeNumComponents()); + if (aggrNode->getSequence().size() == 1) + error = parseConstTree(aggrNode, unionArray, aggrNode->getOp(), aggrNode->getType(), true); + else + error = parseConstTree(aggrNode, unionArray, aggrNode->getOp(), aggrNode->getType()); + + if (error) + return aggrNode; + + return addConstantUnion(unionArray, aggrNode->getType(), aggrNode->getLoc()); +} + +// +// Constant folding of a bracket (array-style) dereference or struct-like dot +// dereference. Can handle anything except a multi-character swizzle, though +// all swizzles may go to foldSwizzle(). +// +TIntermTyped* TIntermediate::foldDereference(TIntermTyped* node, int index, const TSourceLoc& loc) +{ + TType dereferencedType(node->getType(), index); + dereferencedType.getQualifier().storage = EvqConst; + TIntermTyped* result = 0; + int size = dereferencedType.computeNumComponents(); + + // arrays, vectors, matrices, all use simple multiplicative math + // while structures need to add up heterogeneous members + int start; + if (node->isArray() || ! node->isStruct()) + start = size * index; + else { + // it is a structure + assert(node->isStruct()); + start = 0; + for (int i = 0; i < index; ++i) + start += (*node->getType().getStruct())[i].type->computeNumComponents(); + } + + result = addConstantUnion(TConstUnionArray(node->getAsConstantUnion()->getConstArray(), start, size), node->getType(), loc); + + if (result == 0) + result = node; + else + result->setType(dereferencedType); + + return result; +} + +// +// Make a constant vector node or constant scalar node, representing a given +// constant vector and constant swizzle into it. +// +TIntermTyped* TIntermediate::foldSwizzle(TIntermTyped* node, TSwizzleSelectors& selectors, const TSourceLoc& loc) +{ + const TConstUnionArray& unionArray = node->getAsConstantUnion()->getConstArray(); + TConstUnionArray constArray(selectors.size()); + + for (int i = 0; i < selectors.size(); i++) + constArray[i] = unionArray[selectors[i]]; + + TIntermTyped* result = addConstantUnion(constArray, node->getType(), loc); + + if (result == 0) + result = node; + else + result->setType(TType(node->getBasicType(), EvqConst, selectors.size())); + + return result; +} + +} // end namespace glslang diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/InfoSink.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/InfoSink.cpp new file mode 100644 index 0000000..d00c422 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/InfoSink.cpp @@ -0,0 +1,113 @@ +// +// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +// 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. +// + +#include "../Include/InfoSink.h" + +#include + +namespace glslang { + +void TInfoSinkBase::append(const char* s) +{ + if (outputStream & EString) { + if (s == nullptr) + sink.append("(null)"); + else { + checkMem(strlen(s)); + sink.append(s); + } + } + +//#ifdef _WIN32 +// if (outputStream & EDebugger) +// OutputDebugString(s); +//#endif + + if (outputStream & EStdOut) + fprintf(stdout, "%s", s); +} + +void TInfoSinkBase::append(int count, char c) +{ + if (outputStream & EString) { + checkMem(count); + sink.append(count, c); + } + +//#ifdef _WIN32 +// if (outputStream & EDebugger) { +// char str[2]; +// str[0] = c; +// str[1] = '\0'; +// OutputDebugString(str); +// } +//#endif + + if (outputStream & EStdOut) + fprintf(stdout, "%c", c); +} + +void TInfoSinkBase::append(const TPersistString& t) +{ + if (outputStream & EString) { + checkMem(t.size()); + sink.append(t); + } + +//#ifdef _WIN32 +// if (outputStream & EDebugger) +// OutputDebugString(t.c_str()); +//#endif + + if (outputStream & EStdOut) + fprintf(stdout, "%s", t.c_str()); +} + +void TInfoSinkBase::append(const TString& t) +{ + if (outputStream & EString) { + checkMem(t.size()); + sink.append(t.c_str()); + } + +//#ifdef _WIN32 +// if (outputStream & EDebugger) +// OutputDebugString(t.c_str()); +//#endif + + if (outputStream & EStdOut) + fprintf(stdout, "%s", t.c_str()); +} + +} // end namespace glslang diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Initialize.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Initialize.cpp new file mode 100644 index 0000000..2c46e4f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Initialize.cpp @@ -0,0 +1,5850 @@ +// +// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +// Copyright (C) 2012-2016 LunarG, Inc. +// Copyright (C) 2015-2016 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. +// + +// +// Create strings that declare built-in definitions, add built-ins programmatically +// that cannot be expressed in the strings, and establish mappings between +// built-in functions and operators. +// +// Where to put a built-in: +// TBuiltIns::initialize(version,profile) context-independent textual built-ins; add them to the right string +// TBuiltIns::initialize(resources,...) context-dependent textual built-ins; add them to the right string +// TBuiltIns::identifyBuiltIns(...,symbolTable) context-independent programmatic additions/mappings to the symbol table, +// including identifying what extensions are needed if a version does not allow a symbol +// TBuiltIns::identifyBuiltIns(...,symbolTable, resources) context-dependent programmatic additions/mappings to the symbol table, +// including identifying what extensions are needed if a version does not allow a symbol +// + +#include "../Include/intermediate.h" +#include "Initialize.h" + +namespace glslang { + +// TODO: ARB_Compatability: do full extension support +const bool ARBCompatibility = true; + +const bool ForwardCompatibility = false; + +// change this back to false if depending on textual spellings of texturing calls when consuming the AST +// Using PureOperatorBuiltins=false is deprecated. +bool PureOperatorBuiltins = true; + +inline bool IncludeLegacy(int version, EProfile profile, const SpvVersion& spvVersion) +{ + return profile != EEsProfile && (version <= 130 || (spvVersion.spv == 0 && ARBCompatibility) || profile == ECompatibilityProfile); +} + +// Construct TBuiltInParseables base class. This can be used for language-common constructs. +TBuiltInParseables::TBuiltInParseables() +{ +} + +// Destroy TBuiltInParseables. +TBuiltInParseables::~TBuiltInParseables() +{ +} + +TBuiltIns::TBuiltIns() +{ + // Set up textual representations for making all the permutations + // of texturing/imaging functions. + prefixes[EbtFloat] = ""; + prefixes[EbtInt] = "i"; + prefixes[EbtUint] = "u"; + prefixes[EbtInt64] = "i64"; + prefixes[EbtUint64] = "u64"; + postfixes[2] = "2"; + postfixes[3] = "3"; + postfixes[4] = "4"; + + // Map from symbolic class of texturing dimension to numeric dimensions. + dimMap[Esd1D] = 1; + dimMap[Esd2D] = 2; + dimMap[EsdRect] = 2; + dimMap[Esd3D] = 3; + dimMap[EsdCube] = 3; + dimMap[EsdBuffer] = 1; + dimMap[EsdSubpass] = 2; // potientially unused for now +} + +TBuiltIns::~TBuiltIns() +{ +} + + +// +// Add all context-independent built-in functions and variables that are present +// for the given version and profile. Share common ones across stages, otherwise +// make stage-specific entries. +// +// Most built-ins variables can be added as simple text strings. Some need to +// be added programmatically, which is done later in IdentifyBuiltIns() below. +// +void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvVersion) +{ + //============================================================================ + // + // Prototypes for built-in functions seen by both vertex and fragment shaders. + // + //============================================================================ + + // + // Angle and Trigonometric Functions. + // + commonBuiltins.append( + "float radians(float degrees);" + "vec2 radians(vec2 degrees);" + "vec3 radians(vec3 degrees);" + "vec4 radians(vec4 degrees);" + + "float degrees(float radians);" + "vec2 degrees(vec2 radians);" + "vec3 degrees(vec3 radians);" + "vec4 degrees(vec4 radians);" + + "float sin(float angle);" + "vec2 sin(vec2 angle);" + "vec3 sin(vec3 angle);" + "vec4 sin(vec4 angle);" + + "float cos(float angle);" + "vec2 cos(vec2 angle);" + "vec3 cos(vec3 angle);" + "vec4 cos(vec4 angle);" + + "float tan(float angle);" + "vec2 tan(vec2 angle);" + "vec3 tan(vec3 angle);" + "vec4 tan(vec4 angle);" + + "float asin(float x);" + "vec2 asin(vec2 x);" + "vec3 asin(vec3 x);" + "vec4 asin(vec4 x);" + + "float acos(float x);" + "vec2 acos(vec2 x);" + "vec3 acos(vec3 x);" + "vec4 acos(vec4 x);" + + "float atan(float y, float x);" + "vec2 atan(vec2 y, vec2 x);" + "vec3 atan(vec3 y, vec3 x);" + "vec4 atan(vec4 y, vec4 x);" + + "float atan(float y_over_x);" + "vec2 atan(vec2 y_over_x);" + "vec3 atan(vec3 y_over_x);" + "vec4 atan(vec4 y_over_x);" + + "\n"); + + if (version >= 130) { + commonBuiltins.append( + "float sinh(float angle);" + "vec2 sinh(vec2 angle);" + "vec3 sinh(vec3 angle);" + "vec4 sinh(vec4 angle);" + + "float cosh(float angle);" + "vec2 cosh(vec2 angle);" + "vec3 cosh(vec3 angle);" + "vec4 cosh(vec4 angle);" + + "float tanh(float angle);" + "vec2 tanh(vec2 angle);" + "vec3 tanh(vec3 angle);" + "vec4 tanh(vec4 angle);" + + "float asinh(float x);" + "vec2 asinh(vec2 x);" + "vec3 asinh(vec3 x);" + "vec4 asinh(vec4 x);" + + "float acosh(float x);" + "vec2 acosh(vec2 x);" + "vec3 acosh(vec3 x);" + "vec4 acosh(vec4 x);" + + "float atanh(float y_over_x);" + "vec2 atanh(vec2 y_over_x);" + "vec3 atanh(vec3 y_over_x);" + "vec4 atanh(vec4 y_over_x);" + + "\n"); + } + + // + // Exponential Functions. + // + commonBuiltins.append( + "float pow(float x, float y);" + "vec2 pow(vec2 x, vec2 y);" + "vec3 pow(vec3 x, vec3 y);" + "vec4 pow(vec4 x, vec4 y);" + + "float exp(float x);" + "vec2 exp(vec2 x);" + "vec3 exp(vec3 x);" + "vec4 exp(vec4 x);" + + "float log(float x);" + "vec2 log(vec2 x);" + "vec3 log(vec3 x);" + "vec4 log(vec4 x);" + + "float exp2(float x);" + "vec2 exp2(vec2 x);" + "vec3 exp2(vec3 x);" + "vec4 exp2(vec4 x);" + + "float log2(float x);" + "vec2 log2(vec2 x);" + "vec3 log2(vec3 x);" + "vec4 log2(vec4 x);" + + "float sqrt(float x);" + "vec2 sqrt(vec2 x);" + "vec3 sqrt(vec3 x);" + "vec4 sqrt(vec4 x);" + + "float inversesqrt(float x);" + "vec2 inversesqrt(vec2 x);" + "vec3 inversesqrt(vec3 x);" + "vec4 inversesqrt(vec4 x);" + + "\n"); + + // + // Common Functions. + // + commonBuiltins.append( + "float abs(float x);" + "vec2 abs(vec2 x);" + "vec3 abs(vec3 x);" + "vec4 abs(vec4 x);" + + "float sign(float x);" + "vec2 sign(vec2 x);" + "vec3 sign(vec3 x);" + "vec4 sign(vec4 x);" + + "float floor(float x);" + "vec2 floor(vec2 x);" + "vec3 floor(vec3 x);" + "vec4 floor(vec4 x);" + + "float ceil(float x);" + "vec2 ceil(vec2 x);" + "vec3 ceil(vec3 x);" + "vec4 ceil(vec4 x);" + + "float fract(float x);" + "vec2 fract(vec2 x);" + "vec3 fract(vec3 x);" + "vec4 fract(vec4 x);" + + "float mod(float x, float y);" + "vec2 mod(vec2 x, float y);" + "vec3 mod(vec3 x, float y);" + "vec4 mod(vec4 x, float y);" + "vec2 mod(vec2 x, vec2 y);" + "vec3 mod(vec3 x, vec3 y);" + "vec4 mod(vec4 x, vec4 y);" + + "float min(float x, float y);" + "vec2 min(vec2 x, float y);" + "vec3 min(vec3 x, float y);" + "vec4 min(vec4 x, float y);" + "vec2 min(vec2 x, vec2 y);" + "vec3 min(vec3 x, vec3 y);" + "vec4 min(vec4 x, vec4 y);" + + "float max(float x, float y);" + "vec2 max(vec2 x, float y);" + "vec3 max(vec3 x, float y);" + "vec4 max(vec4 x, float y);" + "vec2 max(vec2 x, vec2 y);" + "vec3 max(vec3 x, vec3 y);" + "vec4 max(vec4 x, vec4 y);" + + "float clamp(float x, float minVal, float maxVal);" + "vec2 clamp(vec2 x, float minVal, float maxVal);" + "vec3 clamp(vec3 x, float minVal, float maxVal);" + "vec4 clamp(vec4 x, float minVal, float maxVal);" + "vec2 clamp(vec2 x, vec2 minVal, vec2 maxVal);" + "vec3 clamp(vec3 x, vec3 minVal, vec3 maxVal);" + "vec4 clamp(vec4 x, vec4 minVal, vec4 maxVal);" + + "float mix(float x, float y, float a);" + "vec2 mix(vec2 x, vec2 y, float a);" + "vec3 mix(vec3 x, vec3 y, float a);" + "vec4 mix(vec4 x, vec4 y, float a);" + "vec2 mix(vec2 x, vec2 y, vec2 a);" + "vec3 mix(vec3 x, vec3 y, vec3 a);" + "vec4 mix(vec4 x, vec4 y, vec4 a);" + + "float step(float edge, float x);" + "vec2 step(vec2 edge, vec2 x);" + "vec3 step(vec3 edge, vec3 x);" + "vec4 step(vec4 edge, vec4 x);" + "vec2 step(float edge, vec2 x);" + "vec3 step(float edge, vec3 x);" + "vec4 step(float edge, vec4 x);" + + "float smoothstep(float edge0, float edge1, float x);" + "vec2 smoothstep(vec2 edge0, vec2 edge1, vec2 x);" + "vec3 smoothstep(vec3 edge0, vec3 edge1, vec3 x);" + "vec4 smoothstep(vec4 edge0, vec4 edge1, vec4 x);" + "vec2 smoothstep(float edge0, float edge1, vec2 x);" + "vec3 smoothstep(float edge0, float edge1, vec3 x);" + "vec4 smoothstep(float edge0, float edge1, vec4 x);" + + "\n"); + + if (version >= 130) { + commonBuiltins.append( + " int abs( int x);" + "ivec2 abs(ivec2 x);" + "ivec3 abs(ivec3 x);" + "ivec4 abs(ivec4 x);" + + " int sign( int x);" + "ivec2 sign(ivec2 x);" + "ivec3 sign(ivec3 x);" + "ivec4 sign(ivec4 x);" + + "float trunc(float x);" + "vec2 trunc(vec2 x);" + "vec3 trunc(vec3 x);" + "vec4 trunc(vec4 x);" + + "float round(float x);" + "vec2 round(vec2 x);" + "vec3 round(vec3 x);" + "vec4 round(vec4 x);" + + "float roundEven(float x);" + "vec2 roundEven(vec2 x);" + "vec3 roundEven(vec3 x);" + "vec4 roundEven(vec4 x);" + + "float modf(float, out float);" + "vec2 modf(vec2, out vec2 );" + "vec3 modf(vec3, out vec3 );" + "vec4 modf(vec4, out vec4 );" + + " int min(int x, int y);" + "ivec2 min(ivec2 x, int y);" + "ivec3 min(ivec3 x, int y);" + "ivec4 min(ivec4 x, int y);" + "ivec2 min(ivec2 x, ivec2 y);" + "ivec3 min(ivec3 x, ivec3 y);" + "ivec4 min(ivec4 x, ivec4 y);" + + " uint min(uint x, uint y);" + "uvec2 min(uvec2 x, uint y);" + "uvec3 min(uvec3 x, uint y);" + "uvec4 min(uvec4 x, uint y);" + "uvec2 min(uvec2 x, uvec2 y);" + "uvec3 min(uvec3 x, uvec3 y);" + "uvec4 min(uvec4 x, uvec4 y);" + + " int max(int x, int y);" + "ivec2 max(ivec2 x, int y);" + "ivec3 max(ivec3 x, int y);" + "ivec4 max(ivec4 x, int y);" + "ivec2 max(ivec2 x, ivec2 y);" + "ivec3 max(ivec3 x, ivec3 y);" + "ivec4 max(ivec4 x, ivec4 y);" + + " uint max(uint x, uint y);" + "uvec2 max(uvec2 x, uint y);" + "uvec3 max(uvec3 x, uint y);" + "uvec4 max(uvec4 x, uint y);" + "uvec2 max(uvec2 x, uvec2 y);" + "uvec3 max(uvec3 x, uvec3 y);" + "uvec4 max(uvec4 x, uvec4 y);" + + "int clamp(int x, int minVal, int maxVal);" + "ivec2 clamp(ivec2 x, int minVal, int maxVal);" + "ivec3 clamp(ivec3 x, int minVal, int maxVal);" + "ivec4 clamp(ivec4 x, int minVal, int maxVal);" + "ivec2 clamp(ivec2 x, ivec2 minVal, ivec2 maxVal);" + "ivec3 clamp(ivec3 x, ivec3 minVal, ivec3 maxVal);" + "ivec4 clamp(ivec4 x, ivec4 minVal, ivec4 maxVal);" + + "uint clamp(uint x, uint minVal, uint maxVal);" + "uvec2 clamp(uvec2 x, uint minVal, uint maxVal);" + "uvec3 clamp(uvec3 x, uint minVal, uint maxVal);" + "uvec4 clamp(uvec4 x, uint minVal, uint maxVal);" + "uvec2 clamp(uvec2 x, uvec2 minVal, uvec2 maxVal);" + "uvec3 clamp(uvec3 x, uvec3 minVal, uvec3 maxVal);" + "uvec4 clamp(uvec4 x, uvec4 minVal, uvec4 maxVal);" + + "float mix(float x, float y, bool a);" + "vec2 mix(vec2 x, vec2 y, bvec2 a);" + "vec3 mix(vec3 x, vec3 y, bvec3 a);" + "vec4 mix(vec4 x, vec4 y, bvec4 a);" + + "bool isnan(float x);" + "bvec2 isnan(vec2 x);" + "bvec3 isnan(vec3 x);" + "bvec4 isnan(vec4 x);" + + "bool isinf(float x);" + "bvec2 isinf(vec2 x);" + "bvec3 isinf(vec3 x);" + "bvec4 isinf(vec4 x);" + + "\n"); + } + + // + // double functions added to desktop 4.00, but not fma, frexp, ldexp, or pack/unpack + // + if (profile != EEsProfile && version >= 400) { + commonBuiltins.append( + + "double sqrt(double);" + "dvec2 sqrt(dvec2);" + "dvec3 sqrt(dvec3);" + "dvec4 sqrt(dvec4);" + + "double inversesqrt(double);" + "dvec2 inversesqrt(dvec2);" + "dvec3 inversesqrt(dvec3);" + "dvec4 inversesqrt(dvec4);" + + "double abs(double);" + "dvec2 abs(dvec2);" + "dvec3 abs(dvec3);" + "dvec4 abs(dvec4);" + + "double sign(double);" + "dvec2 sign(dvec2);" + "dvec3 sign(dvec3);" + "dvec4 sign(dvec4);" + + "double floor(double);" + "dvec2 floor(dvec2);" + "dvec3 floor(dvec3);" + "dvec4 floor(dvec4);" + + "double trunc(double);" + "dvec2 trunc(dvec2);" + "dvec3 trunc(dvec3);" + "dvec4 trunc(dvec4);" + + "double round(double);" + "dvec2 round(dvec2);" + "dvec3 round(dvec3);" + "dvec4 round(dvec4);" + + "double roundEven(double);" + "dvec2 roundEven(dvec2);" + "dvec3 roundEven(dvec3);" + "dvec4 roundEven(dvec4);" + + "double ceil(double);" + "dvec2 ceil(dvec2);" + "dvec3 ceil(dvec3);" + "dvec4 ceil(dvec4);" + + "double fract(double);" + "dvec2 fract(dvec2);" + "dvec3 fract(dvec3);" + "dvec4 fract(dvec4);" + + "double mod(double, double);" + "dvec2 mod(dvec2 , double);" + "dvec3 mod(dvec3 , double);" + "dvec4 mod(dvec4 , double);" + "dvec2 mod(dvec2 , dvec2);" + "dvec3 mod(dvec3 , dvec3);" + "dvec4 mod(dvec4 , dvec4);" + + "double modf(double, out double);" + "dvec2 modf(dvec2, out dvec2);" + "dvec3 modf(dvec3, out dvec3);" + "dvec4 modf(dvec4, out dvec4);" + + "double min(double, double);" + "dvec2 min(dvec2, double);" + "dvec3 min(dvec3, double);" + "dvec4 min(dvec4, double);" + "dvec2 min(dvec2, dvec2);" + "dvec3 min(dvec3, dvec3);" + "dvec4 min(dvec4, dvec4);" + + "double max(double, double);" + "dvec2 max(dvec2 , double);" + "dvec3 max(dvec3 , double);" + "dvec4 max(dvec4 , double);" + "dvec2 max(dvec2 , dvec2);" + "dvec3 max(dvec3 , dvec3);" + "dvec4 max(dvec4 , dvec4);" + + "double clamp(double, double, double);" + "dvec2 clamp(dvec2 , double, double);" + "dvec3 clamp(dvec3 , double, double);" + "dvec4 clamp(dvec4 , double, double);" + "dvec2 clamp(dvec2 , dvec2 , dvec2);" + "dvec3 clamp(dvec3 , dvec3 , dvec3);" + "dvec4 clamp(dvec4 , dvec4 , dvec4);" + + "double mix(double, double, double);" + "dvec2 mix(dvec2, dvec2, double);" + "dvec3 mix(dvec3, dvec3, double);" + "dvec4 mix(dvec4, dvec4, double);" + "dvec2 mix(dvec2, dvec2, dvec2);" + "dvec3 mix(dvec3, dvec3, dvec3);" + "dvec4 mix(dvec4, dvec4, dvec4);" + "double mix(double, double, bool);" + "dvec2 mix(dvec2, dvec2, bvec2);" + "dvec3 mix(dvec3, dvec3, bvec3);" + "dvec4 mix(dvec4, dvec4, bvec4);" + + "double step(double, double);" + "dvec2 step(dvec2 , dvec2);" + "dvec3 step(dvec3 , dvec3);" + "dvec4 step(dvec4 , dvec4);" + "dvec2 step(double, dvec2);" + "dvec3 step(double, dvec3);" + "dvec4 step(double, dvec4);" + + "double smoothstep(double, double, double);" + "dvec2 smoothstep(dvec2 , dvec2 , dvec2);" + "dvec3 smoothstep(dvec3 , dvec3 , dvec3);" + "dvec4 smoothstep(dvec4 , dvec4 , dvec4);" + "dvec2 smoothstep(double, double, dvec2);" + "dvec3 smoothstep(double, double, dvec3);" + "dvec4 smoothstep(double, double, dvec4);" + + "bool isnan(double);" + "bvec2 isnan(dvec2);" + "bvec3 isnan(dvec3);" + "bvec4 isnan(dvec4);" + + "bool isinf(double);" + "bvec2 isinf(dvec2);" + "bvec3 isinf(dvec3);" + "bvec4 isinf(dvec4);" + + "double length(double);" + "double length(dvec2);" + "double length(dvec3);" + "double length(dvec4);" + + "double distance(double, double);" + "double distance(dvec2 , dvec2);" + "double distance(dvec3 , dvec3);" + "double distance(dvec4 , dvec4);" + + "double dot(double, double);" + "double dot(dvec2 , dvec2);" + "double dot(dvec3 , dvec3);" + "double dot(dvec4 , dvec4);" + + "dvec3 cross(dvec3, dvec3);" + + "double normalize(double);" + "dvec2 normalize(dvec2);" + "dvec3 normalize(dvec3);" + "dvec4 normalize(dvec4);" + + "double faceforward(double, double, double);" + "dvec2 faceforward(dvec2, dvec2, dvec2);" + "dvec3 faceforward(dvec3, dvec3, dvec3);" + "dvec4 faceforward(dvec4, dvec4, dvec4);" + + "double reflect(double, double);" + "dvec2 reflect(dvec2 , dvec2 );" + "dvec3 reflect(dvec3 , dvec3 );" + "dvec4 reflect(dvec4 , dvec4 );" + + "double refract(double, double, double);" + "dvec2 refract(dvec2 , dvec2 , double);" + "dvec3 refract(dvec3 , dvec3 , double);" + "dvec4 refract(dvec4 , dvec4 , double);" + + "dmat2 matrixCompMult(dmat2, dmat2);" + "dmat3 matrixCompMult(dmat3, dmat3);" + "dmat4 matrixCompMult(dmat4, dmat4);" + "dmat2x3 matrixCompMult(dmat2x3, dmat2x3);" + "dmat2x4 matrixCompMult(dmat2x4, dmat2x4);" + "dmat3x2 matrixCompMult(dmat3x2, dmat3x2);" + "dmat3x4 matrixCompMult(dmat3x4, dmat3x4);" + "dmat4x2 matrixCompMult(dmat4x2, dmat4x2);" + "dmat4x3 matrixCompMult(dmat4x3, dmat4x3);" + + "dmat2 outerProduct(dvec2, dvec2);" + "dmat3 outerProduct(dvec3, dvec3);" + "dmat4 outerProduct(dvec4, dvec4);" + "dmat2x3 outerProduct(dvec3, dvec2);" + "dmat3x2 outerProduct(dvec2, dvec3);" + "dmat2x4 outerProduct(dvec4, dvec2);" + "dmat4x2 outerProduct(dvec2, dvec4);" + "dmat3x4 outerProduct(dvec4, dvec3);" + "dmat4x3 outerProduct(dvec3, dvec4);" + + "dmat2 transpose(dmat2);" + "dmat3 transpose(dmat3);" + "dmat4 transpose(dmat4);" + "dmat2x3 transpose(dmat3x2);" + "dmat3x2 transpose(dmat2x3);" + "dmat2x4 transpose(dmat4x2);" + "dmat4x2 transpose(dmat2x4);" + "dmat3x4 transpose(dmat4x3);" + "dmat4x3 transpose(dmat3x4);" + + "double determinant(dmat2);" + "double determinant(dmat3);" + "double determinant(dmat4);" + + "dmat2 inverse(dmat2);" + "dmat3 inverse(dmat3);" + "dmat4 inverse(dmat4);" + + "bvec2 lessThan(dvec2, dvec2);" + "bvec3 lessThan(dvec3, dvec3);" + "bvec4 lessThan(dvec4, dvec4);" + + "bvec2 lessThanEqual(dvec2, dvec2);" + "bvec3 lessThanEqual(dvec3, dvec3);" + "bvec4 lessThanEqual(dvec4, dvec4);" + + "bvec2 greaterThan(dvec2, dvec2);" + "bvec3 greaterThan(dvec3, dvec3);" + "bvec4 greaterThan(dvec4, dvec4);" + + "bvec2 greaterThanEqual(dvec2, dvec2);" + "bvec3 greaterThanEqual(dvec3, dvec3);" + "bvec4 greaterThanEqual(dvec4, dvec4);" + + "bvec2 equal(dvec2, dvec2);" + "bvec3 equal(dvec3, dvec3);" + "bvec4 equal(dvec4, dvec4);" + + "bvec2 notEqual(dvec2, dvec2);" + "bvec3 notEqual(dvec3, dvec3);" + "bvec4 notEqual(dvec4, dvec4);" + + "\n"); + } + + if (profile != EEsProfile && version >= 450) { + commonBuiltins.append( + + "int64_t abs(int64_t);" + "i64vec2 abs(i64vec2);" + "i64vec3 abs(i64vec3);" + "i64vec4 abs(i64vec4);" + + "int64_t sign(int64_t);" + "i64vec2 sign(i64vec2);" + "i64vec3 sign(i64vec3);" + "i64vec4 sign(i64vec4);" + + "int64_t min(int64_t, int64_t);" + "i64vec2 min(i64vec2, int64_t);" + "i64vec3 min(i64vec3, int64_t);" + "i64vec4 min(i64vec4, int64_t);" + "i64vec2 min(i64vec2, i64vec2);" + "i64vec3 min(i64vec3, i64vec3);" + "i64vec4 min(i64vec4, i64vec4);" + "uint64_t min(uint64_t, uint64_t);" + "u64vec2 min(u64vec2, uint64_t);" + "u64vec3 min(u64vec3, uint64_t);" + "u64vec4 min(u64vec4, uint64_t);" + "u64vec2 min(u64vec2, u64vec2);" + "u64vec3 min(u64vec3, u64vec3);" + "u64vec4 min(u64vec4, u64vec4);" + + "int64_t max(int64_t, int64_t);" + "i64vec2 max(i64vec2, int64_t);" + "i64vec3 max(i64vec3, int64_t);" + "i64vec4 max(i64vec4, int64_t);" + "i64vec2 max(i64vec2, i64vec2);" + "i64vec3 max(i64vec3, i64vec3);" + "i64vec4 max(i64vec4, i64vec4);" + "uint64_t max(uint64_t, uint64_t);" + "u64vec2 max(u64vec2, uint64_t);" + "u64vec3 max(u64vec3, uint64_t);" + "u64vec4 max(u64vec4, uint64_t);" + "u64vec2 max(u64vec2, u64vec2);" + "u64vec3 max(u64vec3, u64vec3);" + "u64vec4 max(u64vec4, u64vec4);" + + "int64_t clamp(int64_t, int64_t, int64_t);" + "i64vec2 clamp(i64vec2, int64_t, int64_t);" + "i64vec3 clamp(i64vec3, int64_t, int64_t);" + "i64vec4 clamp(i64vec4, int64_t, int64_t);" + "i64vec2 clamp(i64vec2, i64vec2, i64vec2);" + "i64vec3 clamp(i64vec3, i64vec3, i64vec3);" + "i64vec4 clamp(i64vec4, i64vec4, i64vec4);" + "uint64_t clamp(uint64_t, uint64_t, uint64_t);" + "u64vec2 clamp(u64vec2, uint64_t, uint64_t);" + "u64vec3 clamp(u64vec3, uint64_t, uint64_t);" + "u64vec4 clamp(u64vec4, uint64_t, uint64_t);" + "u64vec2 clamp(u64vec2, u64vec2, u64vec2);" + "u64vec3 clamp(u64vec3, u64vec3, u64vec3);" + "u64vec4 clamp(u64vec4, u64vec4, u64vec4);" + + "int64_t mix(int64_t, int64_t, bool);" + "i64vec2 mix(i64vec2, i64vec2, bvec2);" + "i64vec3 mix(i64vec3, i64vec3, bvec3);" + "i64vec4 mix(i64vec4, i64vec4, bvec4);" + "uint64_t mix(uint64_t, uint64_t, bool);" + "u64vec2 mix(u64vec2, u64vec2, bvec2);" + "u64vec3 mix(u64vec3, u64vec3, bvec3);" + "u64vec4 mix(u64vec4, u64vec4, bvec4);" + + "int64_t doubleBitsToInt64(double);" + "i64vec2 doubleBitsToInt64(dvec2);" + "i64vec3 doubleBitsToInt64(dvec3);" + "i64vec4 doubleBitsToInt64(dvec4);" + + "uint64_t doubleBitsToUint64(double);" + "u64vec2 doubleBitsToUint64(dvec2);" + "u64vec3 doubleBitsToUint64(dvec3);" + "u64vec4 doubleBitsToUint64(dvec4);" + + "double int64BitsToDouble(int64_t);" + "dvec2 int64BitsToDouble(i64vec2);" + "dvec3 int64BitsToDouble(i64vec3);" + "dvec4 int64BitsToDouble(i64vec4);" + + "double uint64BitsToDouble(uint64_t);" + "dvec2 uint64BitsToDouble(u64vec2);" + "dvec3 uint64BitsToDouble(u64vec3);" + "dvec4 uint64BitsToDouble(u64vec4);" + + "int64_t packInt2x32(ivec2);" + "uint64_t packUint2x32(uvec2);" + "ivec2 unpackInt2x32(int64_t);" + "uvec2 unpackUint2x32(uint64_t);" + + "bvec2 lessThan(i64vec2, i64vec2);" + "bvec3 lessThan(i64vec3, i64vec3);" + "bvec4 lessThan(i64vec4, i64vec4);" + "bvec2 lessThan(u64vec2, u64vec2);" + "bvec3 lessThan(u64vec3, u64vec3);" + "bvec4 lessThan(u64vec4, u64vec4);" + + "bvec2 lessThanEqual(i64vec2, i64vec2);" + "bvec3 lessThanEqual(i64vec3, i64vec3);" + "bvec4 lessThanEqual(i64vec4, i64vec4);" + "bvec2 lessThanEqual(u64vec2, u64vec2);" + "bvec3 lessThanEqual(u64vec3, u64vec3);" + "bvec4 lessThanEqual(u64vec4, u64vec4);" + + "bvec2 greaterThan(i64vec2, i64vec2);" + "bvec3 greaterThan(i64vec3, i64vec3);" + "bvec4 greaterThan(i64vec4, i64vec4);" + "bvec2 greaterThan(u64vec2, u64vec2);" + "bvec3 greaterThan(u64vec3, u64vec3);" + "bvec4 greaterThan(u64vec4, u64vec4);" + + "bvec2 greaterThanEqual(i64vec2, i64vec2);" + "bvec3 greaterThanEqual(i64vec3, i64vec3);" + "bvec4 greaterThanEqual(i64vec4, i64vec4);" + "bvec2 greaterThanEqual(u64vec2, u64vec2);" + "bvec3 greaterThanEqual(u64vec3, u64vec3);" + "bvec4 greaterThanEqual(u64vec4, u64vec4);" + + "bvec2 equal(i64vec2, i64vec2);" + "bvec3 equal(i64vec3, i64vec3);" + "bvec4 equal(i64vec4, i64vec4);" + "bvec2 equal(u64vec2, u64vec2);" + "bvec3 equal(u64vec3, u64vec3);" + "bvec4 equal(u64vec4, u64vec4);" + + "bvec2 notEqual(i64vec2, i64vec2);" + "bvec3 notEqual(i64vec3, i64vec3);" + "bvec4 notEqual(i64vec4, i64vec4);" + "bvec2 notEqual(u64vec2, u64vec2);" + "bvec3 notEqual(u64vec3, u64vec3);" + "bvec4 notEqual(u64vec4, u64vec4);" + +#ifdef AMD_EXTENSIONS + "int findLSB(int64_t);" + "ivec2 findLSB(i64vec2);" + "ivec3 findLSB(i64vec3);" + "ivec4 findLSB(i64vec4);" + + "int findLSB(uint64_t);" + "ivec2 findLSB(u64vec2);" + "ivec3 findLSB(u64vec3);" + "ivec4 findLSB(u64vec4);" + + "int findMSB(int64_t);" + "ivec2 findMSB(i64vec2);" + "ivec3 findMSB(i64vec3);" + "ivec4 findMSB(i64vec4);" + + "int findMSB(uint64_t);" + "ivec2 findMSB(u64vec2);" + "ivec3 findMSB(u64vec3);" + "ivec4 findMSB(u64vec4);" +#endif + "\n" + ); + } + +#ifdef AMD_EXTENSIONS + // GL_AMD_shader_trinary_minmax + if (profile != EEsProfile && version >= 430) { + commonBuiltins.append( + "float min3(float, float, float);" + "vec2 min3(vec2, vec2, vec2);" + "vec3 min3(vec3, vec3, vec3);" + "vec4 min3(vec4, vec4, vec4);" + + "int min3(int, int, int);" + "ivec2 min3(ivec2, ivec2, ivec2);" + "ivec3 min3(ivec3, ivec3, ivec3);" + "ivec4 min3(ivec4, ivec4, ivec4);" + + "uint min3(uint, uint, uint);" + "uvec2 min3(uvec2, uvec2, uvec2);" + "uvec3 min3(uvec3, uvec3, uvec3);" + "uvec4 min3(uvec4, uvec4, uvec4);" + + "float max3(float, float, float);" + "vec2 max3(vec2, vec2, vec2);" + "vec3 max3(vec3, vec3, vec3);" + "vec4 max3(vec4, vec4, vec4);" + + "int max3(int, int, int);" + "ivec2 max3(ivec2, ivec2, ivec2);" + "ivec3 max3(ivec3, ivec3, ivec3);" + "ivec4 max3(ivec4, ivec4, ivec4);" + + "uint max3(uint, uint, uint);" + "uvec2 max3(uvec2, uvec2, uvec2);" + "uvec3 max3(uvec3, uvec3, uvec3);" + "uvec4 max3(uvec4, uvec4, uvec4);" + + "float mid3(float, float, float);" + "vec2 mid3(vec2, vec2, vec2);" + "vec3 mid3(vec3, vec3, vec3);" + "vec4 mid3(vec4, vec4, vec4);" + + "int mid3(int, int, int);" + "ivec2 mid3(ivec2, ivec2, ivec2);" + "ivec3 mid3(ivec3, ivec3, ivec3);" + "ivec4 mid3(ivec4, ivec4, ivec4);" + + "uint mid3(uint, uint, uint);" + "uvec2 mid3(uvec2, uvec2, uvec2);" + "uvec3 mid3(uvec3, uvec3, uvec3);" + "uvec4 mid3(uvec4, uvec4, uvec4);" + + "float16_t min3(float16_t, float16_t, float16_t);" + "f16vec2 min3(f16vec2, f16vec2, f16vec2);" + "f16vec3 min3(f16vec3, f16vec3, f16vec3);" + "f16vec4 min3(f16vec4, f16vec4, f16vec4);" + + "float16_t max3(float16_t, float16_t, float16_t);" + "f16vec2 max3(f16vec2, f16vec2, f16vec2);" + "f16vec3 max3(f16vec3, f16vec3, f16vec3);" + "f16vec4 max3(f16vec4, f16vec4, f16vec4);" + + "float16_t mid3(float16_t, float16_t, float16_t);" + "f16vec2 mid3(f16vec2, f16vec2, f16vec2);" + "f16vec3 mid3(f16vec3, f16vec3, f16vec3);" + "f16vec4 mid3(f16vec4, f16vec4, f16vec4);" + + "\n" + ); + } +#endif + + if ((profile == EEsProfile && version >= 310) || + (profile != EEsProfile && version >= 430)) { + commonBuiltins.append( + "uint atomicAdd(coherent volatile inout uint, uint);" + " int atomicAdd(coherent volatile inout int, int);" + + "uint atomicMin(coherent volatile inout uint, uint);" + " int atomicMin(coherent volatile inout int, int);" + + "uint atomicMax(coherent volatile inout uint, uint);" + " int atomicMax(coherent volatile inout int, int);" + + "uint atomicAnd(coherent volatile inout uint, uint);" + " int atomicAnd(coherent volatile inout int, int);" + + "uint atomicOr (coherent volatile inout uint, uint);" + " int atomicOr (coherent volatile inout int, int);" + + "uint atomicXor(coherent volatile inout uint, uint);" + " int atomicXor(coherent volatile inout int, int);" + + "uint atomicExchange(coherent volatile inout uint, uint);" + " int atomicExchange(coherent volatile inout int, int);" + + "uint atomicCompSwap(coherent volatile inout uint, uint, uint);" + " int atomicCompSwap(coherent volatile inout int, int, int);" + + "\n"); + } + + if ((profile == EEsProfile && version >= 310) || + (profile != EEsProfile && version >= 450)) { + commonBuiltins.append( + "int mix(int x, int y, bool a);" + "ivec2 mix(ivec2 x, ivec2 y, bvec2 a);" + "ivec3 mix(ivec3 x, ivec3 y, bvec3 a);" + "ivec4 mix(ivec4 x, ivec4 y, bvec4 a);" + + "uint mix(uint x, uint y, bool a);" + "uvec2 mix(uvec2 x, uvec2 y, bvec2 a);" + "uvec3 mix(uvec3 x, uvec3 y, bvec3 a);" + "uvec4 mix(uvec4 x, uvec4 y, bvec4 a);" + + "bool mix(bool x, bool y, bool a);" + "bvec2 mix(bvec2 x, bvec2 y, bvec2 a);" + "bvec3 mix(bvec3 x, bvec3 y, bvec3 a);" + "bvec4 mix(bvec4 x, bvec4 y, bvec4 a);" + + "\n"); + } + + if ((profile == EEsProfile && version >= 300) || + (profile != EEsProfile && version >= 330)) { + commonBuiltins.append( + "int floatBitsToInt(highp float value);" + "ivec2 floatBitsToInt(highp vec2 value);" + "ivec3 floatBitsToInt(highp vec3 value);" + "ivec4 floatBitsToInt(highp vec4 value);" + + "uint floatBitsToUint(highp float value);" + "uvec2 floatBitsToUint(highp vec2 value);" + "uvec3 floatBitsToUint(highp vec3 value);" + "uvec4 floatBitsToUint(highp vec4 value);" + + "float intBitsToFloat(highp int value);" + "vec2 intBitsToFloat(highp ivec2 value);" + "vec3 intBitsToFloat(highp ivec3 value);" + "vec4 intBitsToFloat(highp ivec4 value);" + + "float uintBitsToFloat(highp uint value);" + "vec2 uintBitsToFloat(highp uvec2 value);" + "vec3 uintBitsToFloat(highp uvec3 value);" + "vec4 uintBitsToFloat(highp uvec4 value);" + + "\n"); + } + + if ((profile != EEsProfile && version >= 400) || + (profile == EEsProfile && version >= 310)) { // GL_OES_gpu_shader5 + + commonBuiltins.append( + "float fma(float, float, float );" + "vec2 fma(vec2, vec2, vec2 );" + "vec3 fma(vec3, vec3, vec3 );" + "vec4 fma(vec4, vec4, vec4 );" + "\n"); + + if (profile != EEsProfile) { + commonBuiltins.append( + "double fma(double, double, double);" + "dvec2 fma(dvec2, dvec2, dvec2 );" + "dvec3 fma(dvec3, dvec3, dvec3 );" + "dvec4 fma(dvec4, dvec4, dvec4 );" + "\n"); + } + } + + if ((profile == EEsProfile && version >= 310) || + (profile != EEsProfile && version >= 400)) { + commonBuiltins.append( + "float frexp(highp float, out highp int);" + "vec2 frexp(highp vec2, out highp ivec2);" + "vec3 frexp(highp vec3, out highp ivec3);" + "vec4 frexp(highp vec4, out highp ivec4);" + + "float ldexp(highp float, highp int);" + "vec2 ldexp(highp vec2, highp ivec2);" + "vec3 ldexp(highp vec3, highp ivec3);" + "vec4 ldexp(highp vec4, highp ivec4);" + + "\n"); + } + + if (profile != EEsProfile && version >= 400) { + commonBuiltins.append( + "double frexp(double, out int);" + "dvec2 frexp( dvec2, out ivec2);" + "dvec3 frexp( dvec3, out ivec3);" + "dvec4 frexp( dvec4, out ivec4);" + + "double ldexp(double, int);" + "dvec2 ldexp( dvec2, ivec2);" + "dvec3 ldexp( dvec3, ivec3);" + "dvec4 ldexp( dvec4, ivec4);" + + "double packDouble2x32(uvec2);" + "uvec2 unpackDouble2x32(double);" + + "\n"); + } + + if ((profile == EEsProfile && version >= 300) || + (profile != EEsProfile && version >= 400)) { + commonBuiltins.append( + "highp uint packUnorm2x16(vec2);" + "vec2 unpackUnorm2x16(highp uint);" + "\n"); + } + + if ((profile == EEsProfile && version >= 300) || + (profile != EEsProfile && version >= 420)) { + commonBuiltins.append( + "highp uint packSnorm2x16(vec2);" + " vec2 unpackSnorm2x16(highp uint);" + "highp uint packHalf2x16(vec2);" + "\n"); + } + + if (profile == EEsProfile && version >= 300) { + commonBuiltins.append( + "mediump vec2 unpackHalf2x16(highp uint);" + "\n"); + } else if (profile != EEsProfile && version >= 420) { + commonBuiltins.append( + " vec2 unpackHalf2x16(highp uint);" + "\n"); + } + + if ((profile == EEsProfile && version >= 310) || + (profile != EEsProfile && version >= 400)) { + commonBuiltins.append( + "highp uint packSnorm4x8(vec4);" + "highp uint packUnorm4x8(vec4);" + "\n"); + } + + if (profile == EEsProfile && version >= 310) { + commonBuiltins.append( + "mediump vec4 unpackSnorm4x8(highp uint);" + "mediump vec4 unpackUnorm4x8(highp uint);" + "\n"); + } else if (profile != EEsProfile && version >= 400) { + commonBuiltins.append( + "vec4 unpackSnorm4x8(highp uint);" + "vec4 unpackUnorm4x8(highp uint);" + "\n"); + } + + // + // Geometric Functions. + // + commonBuiltins.append( + "float length(float x);" + "float length(vec2 x);" + "float length(vec3 x);" + "float length(vec4 x);" + + "float distance(float p0, float p1);" + "float distance(vec2 p0, vec2 p1);" + "float distance(vec3 p0, vec3 p1);" + "float distance(vec4 p0, vec4 p1);" + + "float dot(float x, float y);" + "float dot(vec2 x, vec2 y);" + "float dot(vec3 x, vec3 y);" + "float dot(vec4 x, vec4 y);" + + "vec3 cross(vec3 x, vec3 y);" + "float normalize(float x);" + "vec2 normalize(vec2 x);" + "vec3 normalize(vec3 x);" + "vec4 normalize(vec4 x);" + + "float faceforward(float N, float I, float Nref);" + "vec2 faceforward(vec2 N, vec2 I, vec2 Nref);" + "vec3 faceforward(vec3 N, vec3 I, vec3 Nref);" + "vec4 faceforward(vec4 N, vec4 I, vec4 Nref);" + + "float reflect(float I, float N);" + "vec2 reflect(vec2 I, vec2 N);" + "vec3 reflect(vec3 I, vec3 N);" + "vec4 reflect(vec4 I, vec4 N);" + + "float refract(float I, float N, float eta);" + "vec2 refract(vec2 I, vec2 N, float eta);" + "vec3 refract(vec3 I, vec3 N, float eta);" + "vec4 refract(vec4 I, vec4 N, float eta);" + + "\n"); + + // + // Matrix Functions. + // + commonBuiltins.append( + "mat2 matrixCompMult(mat2 x, mat2 y);" + "mat3 matrixCompMult(mat3 x, mat3 y);" + "mat4 matrixCompMult(mat4 x, mat4 y);" + + "\n"); + + // 120 is correct for both ES and desktop + if (version >= 120) { + commonBuiltins.append( + "mat2 outerProduct(vec2 c, vec2 r);" + "mat3 outerProduct(vec3 c, vec3 r);" + "mat4 outerProduct(vec4 c, vec4 r);" + "mat2x3 outerProduct(vec3 c, vec2 r);" + "mat3x2 outerProduct(vec2 c, vec3 r);" + "mat2x4 outerProduct(vec4 c, vec2 r);" + "mat4x2 outerProduct(vec2 c, vec4 r);" + "mat3x4 outerProduct(vec4 c, vec3 r);" + "mat4x3 outerProduct(vec3 c, vec4 r);" + + "mat2 transpose(mat2 m);" + "mat3 transpose(mat3 m);" + "mat4 transpose(mat4 m);" + "mat2x3 transpose(mat3x2 m);" + "mat3x2 transpose(mat2x3 m);" + "mat2x4 transpose(mat4x2 m);" + "mat4x2 transpose(mat2x4 m);" + "mat3x4 transpose(mat4x3 m);" + "mat4x3 transpose(mat3x4 m);" + + "mat2x3 matrixCompMult(mat2x3, mat2x3);" + "mat2x4 matrixCompMult(mat2x4, mat2x4);" + "mat3x2 matrixCompMult(mat3x2, mat3x2);" + "mat3x4 matrixCompMult(mat3x4, mat3x4);" + "mat4x2 matrixCompMult(mat4x2, mat4x2);" + "mat4x3 matrixCompMult(mat4x3, mat4x3);" + + "\n"); + + // 150 is correct for both ES and desktop + if (version >= 150) { + commonBuiltins.append( + "float determinant(mat2 m);" + "float determinant(mat3 m);" + "float determinant(mat4 m);" + + "mat2 inverse(mat2 m);" + "mat3 inverse(mat3 m);" + "mat4 inverse(mat4 m);" + + "\n"); + } + } + + // + // Vector relational functions. + // + commonBuiltins.append( + "bvec2 lessThan(vec2 x, vec2 y);" + "bvec3 lessThan(vec3 x, vec3 y);" + "bvec4 lessThan(vec4 x, vec4 y);" + + "bvec2 lessThan(ivec2 x, ivec2 y);" + "bvec3 lessThan(ivec3 x, ivec3 y);" + "bvec4 lessThan(ivec4 x, ivec4 y);" + + "bvec2 lessThanEqual(vec2 x, vec2 y);" + "bvec3 lessThanEqual(vec3 x, vec3 y);" + "bvec4 lessThanEqual(vec4 x, vec4 y);" + + "bvec2 lessThanEqual(ivec2 x, ivec2 y);" + "bvec3 lessThanEqual(ivec3 x, ivec3 y);" + "bvec4 lessThanEqual(ivec4 x, ivec4 y);" + + "bvec2 greaterThan(vec2 x, vec2 y);" + "bvec3 greaterThan(vec3 x, vec3 y);" + "bvec4 greaterThan(vec4 x, vec4 y);" + + "bvec2 greaterThan(ivec2 x, ivec2 y);" + "bvec3 greaterThan(ivec3 x, ivec3 y);" + "bvec4 greaterThan(ivec4 x, ivec4 y);" + + "bvec2 greaterThanEqual(vec2 x, vec2 y);" + "bvec3 greaterThanEqual(vec3 x, vec3 y);" + "bvec4 greaterThanEqual(vec4 x, vec4 y);" + + "bvec2 greaterThanEqual(ivec2 x, ivec2 y);" + "bvec3 greaterThanEqual(ivec3 x, ivec3 y);" + "bvec4 greaterThanEqual(ivec4 x, ivec4 y);" + + "bvec2 equal(vec2 x, vec2 y);" + "bvec3 equal(vec3 x, vec3 y);" + "bvec4 equal(vec4 x, vec4 y);" + + "bvec2 equal(ivec2 x, ivec2 y);" + "bvec3 equal(ivec3 x, ivec3 y);" + "bvec4 equal(ivec4 x, ivec4 y);" + + "bvec2 equal(bvec2 x, bvec2 y);" + "bvec3 equal(bvec3 x, bvec3 y);" + "bvec4 equal(bvec4 x, bvec4 y);" + + "bvec2 notEqual(vec2 x, vec2 y);" + "bvec3 notEqual(vec3 x, vec3 y);" + "bvec4 notEqual(vec4 x, vec4 y);" + + "bvec2 notEqual(ivec2 x, ivec2 y);" + "bvec3 notEqual(ivec3 x, ivec3 y);" + "bvec4 notEqual(ivec4 x, ivec4 y);" + + "bvec2 notEqual(bvec2 x, bvec2 y);" + "bvec3 notEqual(bvec3 x, bvec3 y);" + "bvec4 notEqual(bvec4 x, bvec4 y);" + + "bool any(bvec2 x);" + "bool any(bvec3 x);" + "bool any(bvec4 x);" + + "bool all(bvec2 x);" + "bool all(bvec3 x);" + "bool all(bvec4 x);" + + "bvec2 not(bvec2 x);" + "bvec3 not(bvec3 x);" + "bvec4 not(bvec4 x);" + + "\n"); + + if (version >= 130) { + commonBuiltins.append( + "bvec2 lessThan(uvec2 x, uvec2 y);" + "bvec3 lessThan(uvec3 x, uvec3 y);" + "bvec4 lessThan(uvec4 x, uvec4 y);" + + "bvec2 lessThanEqual(uvec2 x, uvec2 y);" + "bvec3 lessThanEqual(uvec3 x, uvec3 y);" + "bvec4 lessThanEqual(uvec4 x, uvec4 y);" + + "bvec2 greaterThan(uvec2 x, uvec2 y);" + "bvec3 greaterThan(uvec3 x, uvec3 y);" + "bvec4 greaterThan(uvec4 x, uvec4 y);" + + "bvec2 greaterThanEqual(uvec2 x, uvec2 y);" + "bvec3 greaterThanEqual(uvec3 x, uvec3 y);" + "bvec4 greaterThanEqual(uvec4 x, uvec4 y);" + + "bvec2 equal(uvec2 x, uvec2 y);" + "bvec3 equal(uvec3 x, uvec3 y);" + "bvec4 equal(uvec4 x, uvec4 y);" + + "bvec2 notEqual(uvec2 x, uvec2 y);" + "bvec3 notEqual(uvec3 x, uvec3 y);" + "bvec4 notEqual(uvec4 x, uvec4 y);" + + "\n"); + } + + // + // Original-style texture functions existing in all stages. + // (Per-stage functions below.) + // + if ((profile == EEsProfile && version == 100) || + profile == ECompatibilityProfile || + (profile == ECoreProfile && version < 420) || + profile == ENoProfile) { + if (spvVersion.spv == 0) { + commonBuiltins.append( + "vec4 texture2D(sampler2D, vec2);" + + "vec4 texture2DProj(sampler2D, vec3);" + "vec4 texture2DProj(sampler2D, vec4);" + + "vec4 texture3D(sampler3D, vec3);" // OES_texture_3D, but caught by keyword check + "vec4 texture3DProj(sampler3D, vec4);" // OES_texture_3D, but caught by keyword check + + "vec4 textureCube(samplerCube, vec3);" + + "\n"); + } + } + + if ( profile == ECompatibilityProfile || + (profile == ECoreProfile && version < 420) || + profile == ENoProfile) { + if (spvVersion.spv == 0) { + commonBuiltins.append( + "vec4 texture1D(sampler1D, float);" + + "vec4 texture1DProj(sampler1D, vec2);" + "vec4 texture1DProj(sampler1D, vec4);" + + "vec4 shadow1D(sampler1DShadow, vec3);" + "vec4 shadow2D(sampler2DShadow, vec3);" + "vec4 shadow1DProj(sampler1DShadow, vec4);" + "vec4 shadow2DProj(sampler2DShadow, vec4);" + + "vec4 texture2DRect(sampler2DRect, vec2);" // GL_ARB_texture_rectangle, caught by keyword check + "vec4 texture2DRectProj(sampler2DRect, vec3);" // GL_ARB_texture_rectangle, caught by keyword check + "vec4 texture2DRectProj(sampler2DRect, vec4);" // GL_ARB_texture_rectangle, caught by keyword check + "vec4 shadow2DRect(sampler2DRectShadow, vec3);" // GL_ARB_texture_rectangle, caught by keyword check + "vec4 shadow2DRectProj(sampler2DRectShadow, vec4);" // GL_ARB_texture_rectangle, caught by keyword check + + "\n"); + } + } + + if (profile == EEsProfile) { + if (spvVersion.spv == 0) { + 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 + + "\n"); + } + } + + // + // Noise functions. + // + if (profile != EEsProfile) { + commonBuiltins.append( + "float noise1(float x);" + "float noise1(vec2 x);" + "float noise1(vec3 x);" + "float noise1(vec4 x);" + + "vec2 noise2(float x);" + "vec2 noise2(vec2 x);" + "vec2 noise2(vec3 x);" + "vec2 noise2(vec4 x);" + + "vec3 noise3(float x);" + "vec3 noise3(vec2 x);" + "vec3 noise3(vec3 x);" + "vec3 noise3(vec4 x);" + + "vec4 noise4(float x);" + "vec4 noise4(vec2 x);" + "vec4 noise4(vec3 x);" + "vec4 noise4(vec4 x);" + + "\n"); + } + + if (spvVersion.vulkan == 0) { + // + // Atomic counter functions. + // + 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);" + + "\n"); + } + } + + // Bitfield + if ((profile == EEsProfile && version >= 310) || + (profile != EEsProfile && version >= 400)) { + commonBuiltins.append( + " int bitfieldExtract( int, int, int);" + "ivec2 bitfieldExtract(ivec2, int, int);" + "ivec3 bitfieldExtract(ivec3, int, int);" + "ivec4 bitfieldExtract(ivec4, int, int);" + + " uint bitfieldExtract( uint, int, int);" + "uvec2 bitfieldExtract(uvec2, int, int);" + "uvec3 bitfieldExtract(uvec3, int, int);" + "uvec4 bitfieldExtract(uvec4, int, int);" + + " int bitfieldInsert( int base, int, int, int);" + "ivec2 bitfieldInsert(ivec2 base, ivec2, int, int);" + "ivec3 bitfieldInsert(ivec3 base, ivec3, int, int);" + "ivec4 bitfieldInsert(ivec4 base, ivec4, int, int);" + + " uint bitfieldInsert( uint base, uint, int, int);" + "uvec2 bitfieldInsert(uvec2 base, uvec2, int, int);" + "uvec3 bitfieldInsert(uvec3 base, uvec3, int, int);" + "uvec4 bitfieldInsert(uvec4 base, uvec4, int, int);" + + "\n"); + } + + if (profile != EEsProfile && version >= 400) { + commonBuiltins.append( + " int findLSB( int);" + "ivec2 findLSB(ivec2);" + "ivec3 findLSB(ivec3);" + "ivec4 findLSB(ivec4);" + + " int findLSB( uint);" + "ivec2 findLSB(uvec2);" + "ivec3 findLSB(uvec3);" + "ivec4 findLSB(uvec4);" + + "\n"); + } else if (profile == EEsProfile && version >= 310) { + commonBuiltins.append( + "lowp int findLSB( int);" + "lowp ivec2 findLSB(ivec2);" + "lowp ivec3 findLSB(ivec3);" + "lowp ivec4 findLSB(ivec4);" + + "lowp int findLSB( uint);" + "lowp ivec2 findLSB(uvec2);" + "lowp ivec3 findLSB(uvec3);" + "lowp ivec4 findLSB(uvec4);" + + "\n"); + } + + if (profile != EEsProfile && version >= 400) { + commonBuiltins.append( + " int bitCount( int);" + "ivec2 bitCount(ivec2);" + "ivec3 bitCount(ivec3);" + "ivec4 bitCount(ivec4);" + + " int bitCount( uint);" + "ivec2 bitCount(uvec2);" + "ivec3 bitCount(uvec3);" + "ivec4 bitCount(uvec4);" + + " int findMSB(highp int);" + "ivec2 findMSB(highp ivec2);" + "ivec3 findMSB(highp ivec3);" + "ivec4 findMSB(highp ivec4);" + + " int findMSB(highp uint);" + "ivec2 findMSB(highp uvec2);" + "ivec3 findMSB(highp uvec3);" + "ivec4 findMSB(highp uvec4);" + + "\n"); + } + + if ((profile == EEsProfile && version >= 310) || + (profile != EEsProfile && version >= 400)) { + commonBuiltins.append( + " uint uaddCarry(highp uint, highp uint, out lowp uint carry);" + "uvec2 uaddCarry(highp uvec2, highp uvec2, out lowp uvec2 carry);" + "uvec3 uaddCarry(highp uvec3, highp uvec3, out lowp uvec3 carry);" + "uvec4 uaddCarry(highp uvec4, highp uvec4, out lowp uvec4 carry);" + + " uint usubBorrow(highp uint, highp uint, out lowp uint borrow);" + "uvec2 usubBorrow(highp uvec2, highp uvec2, out lowp uvec2 borrow);" + "uvec3 usubBorrow(highp uvec3, highp uvec3, out lowp uvec3 borrow);" + "uvec4 usubBorrow(highp uvec4, highp uvec4, out lowp uvec4 borrow);" + + "void umulExtended(highp uint, highp uint, out highp uint, out highp uint lsb);" + "void umulExtended(highp uvec2, highp uvec2, out highp uvec2, out highp uvec2 lsb);" + "void umulExtended(highp uvec3, highp uvec3, out highp uvec3, out highp uvec3 lsb);" + "void umulExtended(highp uvec4, highp uvec4, out highp uvec4, out highp uvec4 lsb);" + + "void imulExtended(highp int, highp int, out highp int, out highp int lsb);" + "void imulExtended(highp ivec2, highp ivec2, out highp ivec2, out highp ivec2 lsb);" + "void imulExtended(highp ivec3, highp ivec3, out highp ivec3, out highp ivec3 lsb);" + "void imulExtended(highp ivec4, highp ivec4, out highp ivec4, out highp ivec4 lsb);" + + " int bitfieldReverse(highp int);" + "ivec2 bitfieldReverse(highp ivec2);" + "ivec3 bitfieldReverse(highp ivec3);" + "ivec4 bitfieldReverse(highp ivec4);" + + " uint bitfieldReverse(highp uint);" + "uvec2 bitfieldReverse(highp uvec2);" + "uvec3 bitfieldReverse(highp uvec3);" + "uvec4 bitfieldReverse(highp uvec4);" + + "\n"); + } + + if (profile == EEsProfile && version >= 310) { + commonBuiltins.append( + "lowp int bitCount( int);" + "lowp ivec2 bitCount(ivec2);" + "lowp ivec3 bitCount(ivec3);" + "lowp ivec4 bitCount(ivec4);" + + "lowp int bitCount( uint);" + "lowp ivec2 bitCount(uvec2);" + "lowp ivec3 bitCount(uvec3);" + "lowp ivec4 bitCount(uvec4);" + + "lowp int findMSB(highp int);" + "lowp ivec2 findMSB(highp ivec2);" + "lowp ivec3 findMSB(highp ivec3);" + "lowp ivec4 findMSB(highp ivec4);" + + "lowp int findMSB(highp uint);" + "lowp ivec2 findMSB(highp uvec2);" + "lowp ivec3 findMSB(highp uvec3);" + "lowp ivec4 findMSB(highp uvec4);" + + "\n"); + } + + // GL_ARB_shader_ballot + if (profile != EEsProfile && version >= 450) { + commonBuiltins.append( + "uint64_t ballotARB(bool);" + + "float readInvocationARB(float, uint);" + "vec2 readInvocationARB(vec2, uint);" + "vec3 readInvocationARB(vec3, uint);" + "vec4 readInvocationARB(vec4, uint);" + + "int readInvocationARB(int, uint);" + "ivec2 readInvocationARB(ivec2, uint);" + "ivec3 readInvocationARB(ivec3, uint);" + "ivec4 readInvocationARB(ivec4, uint);" + + "uint readInvocationARB(uint, uint);" + "uvec2 readInvocationARB(uvec2, uint);" + "uvec3 readInvocationARB(uvec3, uint);" + "uvec4 readInvocationARB(uvec4, uint);" + + "float readFirstInvocationARB(float);" + "vec2 readFirstInvocationARB(vec2);" + "vec3 readFirstInvocationARB(vec3);" + "vec4 readFirstInvocationARB(vec4);" + + "int readFirstInvocationARB(int);" + "ivec2 readFirstInvocationARB(ivec2);" + "ivec3 readFirstInvocationARB(ivec3);" + "ivec4 readFirstInvocationARB(ivec4);" + + "uint readFirstInvocationARB(uint);" + "uvec2 readFirstInvocationARB(uvec2);" + "uvec3 readFirstInvocationARB(uvec3);" + "uvec4 readFirstInvocationARB(uvec4);" + + "\n"); + } + + // GL_ARB_shader_group_vote + if (profile != EEsProfile && version >= 430) { + commonBuiltins.append( + "bool anyInvocationARB(bool);" + "bool allInvocationsARB(bool);" + "bool allInvocationsEqualARB(bool);" + + "\n"); + } + +#ifdef AMD_EXTENSIONS + // GL_AMD_shader_ballot + if (profile != EEsProfile && version >= 450) { + commonBuiltins.append( + "float minInvocationsAMD(float);" + "vec2 minInvocationsAMD(vec2);" + "vec3 minInvocationsAMD(vec3);" + "vec4 minInvocationsAMD(vec4);" + + "int minInvocationsAMD(int);" + "ivec2 minInvocationsAMD(ivec2);" + "ivec3 minInvocationsAMD(ivec3);" + "ivec4 minInvocationsAMD(ivec4);" + + "uint minInvocationsAMD(uint);" + "uvec2 minInvocationsAMD(uvec2);" + "uvec3 minInvocationsAMD(uvec3);" + "uvec4 minInvocationsAMD(uvec4);" + + "double minInvocationsAMD(double);" + "dvec2 minInvocationsAMD(dvec2);" + "dvec3 minInvocationsAMD(dvec3);" + "dvec4 minInvocationsAMD(dvec4);" + + "int64_t minInvocationsAMD(int64_t);" + "i64vec2 minInvocationsAMD(i64vec2);" + "i64vec3 minInvocationsAMD(i64vec3);" + "i64vec4 minInvocationsAMD(i64vec4);" + + "uint64_t minInvocationsAMD(uint64_t);" + "u64vec2 minInvocationsAMD(u64vec2);" + "u64vec3 minInvocationsAMD(u64vec3);" + "u64vec4 minInvocationsAMD(u64vec4);" + + "float16_t minInvocationsAMD(float16_t);" + "f16vec2 minInvocationsAMD(f16vec2);" + "f16vec3 minInvocationsAMD(f16vec3);" + "f16vec4 minInvocationsAMD(f16vec4);" + + "float minInvocationsInclusiveScanAMD(float);" + "vec2 minInvocationsInclusiveScanAMD(vec2);" + "vec3 minInvocationsInclusiveScanAMD(vec3);" + "vec4 minInvocationsInclusiveScanAMD(vec4);" + + "int minInvocationsInclusiveScanAMD(int);" + "ivec2 minInvocationsInclusiveScanAMD(ivec2);" + "ivec3 minInvocationsInclusiveScanAMD(ivec3);" + "ivec4 minInvocationsInclusiveScanAMD(ivec4);" + + "uint minInvocationsInclusiveScanAMD(uint);" + "uvec2 minInvocationsInclusiveScanAMD(uvec2);" + "uvec3 minInvocationsInclusiveScanAMD(uvec3);" + "uvec4 minInvocationsInclusiveScanAMD(uvec4);" + + "double minInvocationsInclusiveScanAMD(double);" + "dvec2 minInvocationsInclusiveScanAMD(dvec2);" + "dvec3 minInvocationsInclusiveScanAMD(dvec3);" + "dvec4 minInvocationsInclusiveScanAMD(dvec4);" + + "int64_t minInvocationsInclusiveScanAMD(int64_t);" + "i64vec2 minInvocationsInclusiveScanAMD(i64vec2);" + "i64vec3 minInvocationsInclusiveScanAMD(i64vec3);" + "i64vec4 minInvocationsInclusiveScanAMD(i64vec4);" + + "uint64_t minInvocationsInclusiveScanAMD(uint64_t);" + "u64vec2 minInvocationsInclusiveScanAMD(u64vec2);" + "u64vec3 minInvocationsInclusiveScanAMD(u64vec3);" + "u64vec4 minInvocationsInclusiveScanAMD(u64vec4);" + + "float16_t minInvocationsInclusiveScanAMD(float16_t);" + "f16vec2 minInvocationsInclusiveScanAMD(f16vec2);" + "f16vec3 minInvocationsInclusiveScanAMD(f16vec3);" + "f16vec4 minInvocationsInclusiveScanAMD(f16vec4);" + + "float minInvocationsExclusiveScanAMD(float);" + "vec2 minInvocationsExclusiveScanAMD(vec2);" + "vec3 minInvocationsExclusiveScanAMD(vec3);" + "vec4 minInvocationsExclusiveScanAMD(vec4);" + + "int minInvocationsExclusiveScanAMD(int);" + "ivec2 minInvocationsExclusiveScanAMD(ivec2);" + "ivec3 minInvocationsExclusiveScanAMD(ivec3);" + "ivec4 minInvocationsExclusiveScanAMD(ivec4);" + + "uint minInvocationsExclusiveScanAMD(uint);" + "uvec2 minInvocationsExclusiveScanAMD(uvec2);" + "uvec3 minInvocationsExclusiveScanAMD(uvec3);" + "uvec4 minInvocationsExclusiveScanAMD(uvec4);" + + "double minInvocationsExclusiveScanAMD(double);" + "dvec2 minInvocationsExclusiveScanAMD(dvec2);" + "dvec3 minInvocationsExclusiveScanAMD(dvec3);" + "dvec4 minInvocationsExclusiveScanAMD(dvec4);" + + "int64_t minInvocationsExclusiveScanAMD(int64_t);" + "i64vec2 minInvocationsExclusiveScanAMD(i64vec2);" + "i64vec3 minInvocationsExclusiveScanAMD(i64vec3);" + "i64vec4 minInvocationsExclusiveScanAMD(i64vec4);" + + "uint64_t minInvocationsExclusiveScanAMD(uint64_t);" + "u64vec2 minInvocationsExclusiveScanAMD(u64vec2);" + "u64vec3 minInvocationsExclusiveScanAMD(u64vec3);" + "u64vec4 minInvocationsExclusiveScanAMD(u64vec4);" + + "float16_t minInvocationsExclusiveScanAMD(float16_t);" + "f16vec2 minInvocationsExclusiveScanAMD(f16vec2);" + "f16vec3 minInvocationsExclusiveScanAMD(f16vec3);" + "f16vec4 minInvocationsExclusiveScanAMD(f16vec4);" + + "float maxInvocationsAMD(float);" + "vec2 maxInvocationsAMD(vec2);" + "vec3 maxInvocationsAMD(vec3);" + "vec4 maxInvocationsAMD(vec4);" + + "int maxInvocationsAMD(int);" + "ivec2 maxInvocationsAMD(ivec2);" + "ivec3 maxInvocationsAMD(ivec3);" + "ivec4 maxInvocationsAMD(ivec4);" + + "uint maxInvocationsAMD(uint);" + "uvec2 maxInvocationsAMD(uvec2);" + "uvec3 maxInvocationsAMD(uvec3);" + "uvec4 maxInvocationsAMD(uvec4);" + + "double maxInvocationsAMD(double);" + "dvec2 maxInvocationsAMD(dvec2);" + "dvec3 maxInvocationsAMD(dvec3);" + "dvec4 maxInvocationsAMD(dvec4);" + + "int64_t maxInvocationsAMD(int64_t);" + "i64vec2 maxInvocationsAMD(i64vec2);" + "i64vec3 maxInvocationsAMD(i64vec3);" + "i64vec4 maxInvocationsAMD(i64vec4);" + + "uint64_t maxInvocationsAMD(uint64_t);" + "u64vec2 maxInvocationsAMD(u64vec2);" + "u64vec3 maxInvocationsAMD(u64vec3);" + "u64vec4 maxInvocationsAMD(u64vec4);" + + "float16_t maxInvocationsAMD(float16_t);" + "f16vec2 maxInvocationsAMD(f16vec2);" + "f16vec3 maxInvocationsAMD(f16vec3);" + "f16vec4 maxInvocationsAMD(f16vec4);" + + "float maxInvocationsInclusiveScanAMD(float);" + "vec2 maxInvocationsInclusiveScanAMD(vec2);" + "vec3 maxInvocationsInclusiveScanAMD(vec3);" + "vec4 maxInvocationsInclusiveScanAMD(vec4);" + + "int maxInvocationsInclusiveScanAMD(int);" + "ivec2 maxInvocationsInclusiveScanAMD(ivec2);" + "ivec3 maxInvocationsInclusiveScanAMD(ivec3);" + "ivec4 maxInvocationsInclusiveScanAMD(ivec4);" + + "uint maxInvocationsInclusiveScanAMD(uint);" + "uvec2 maxInvocationsInclusiveScanAMD(uvec2);" + "uvec3 maxInvocationsInclusiveScanAMD(uvec3);" + "uvec4 maxInvocationsInclusiveScanAMD(uvec4);" + + "double maxInvocationsInclusiveScanAMD(double);" + "dvec2 maxInvocationsInclusiveScanAMD(dvec2);" + "dvec3 maxInvocationsInclusiveScanAMD(dvec3);" + "dvec4 maxInvocationsInclusiveScanAMD(dvec4);" + + "int64_t maxInvocationsInclusiveScanAMD(int64_t);" + "i64vec2 maxInvocationsInclusiveScanAMD(i64vec2);" + "i64vec3 maxInvocationsInclusiveScanAMD(i64vec3);" + "i64vec4 maxInvocationsInclusiveScanAMD(i64vec4);" + + "uint64_t maxInvocationsInclusiveScanAMD(uint64_t);" + "u64vec2 maxInvocationsInclusiveScanAMD(u64vec2);" + "u64vec3 maxInvocationsInclusiveScanAMD(u64vec3);" + "u64vec4 maxInvocationsInclusiveScanAMD(u64vec4);" + + "float16_t maxInvocationsInclusiveScanAMD(float16_t);" + "f16vec2 maxInvocationsInclusiveScanAMD(f16vec2);" + "f16vec3 maxInvocationsInclusiveScanAMD(f16vec3);" + "f16vec4 maxInvocationsInclusiveScanAMD(f16vec4);" + + "float maxInvocationsExclusiveScanAMD(float);" + "vec2 maxInvocationsExclusiveScanAMD(vec2);" + "vec3 maxInvocationsExclusiveScanAMD(vec3);" + "vec4 maxInvocationsExclusiveScanAMD(vec4);" + + "int maxInvocationsExclusiveScanAMD(int);" + "ivec2 maxInvocationsExclusiveScanAMD(ivec2);" + "ivec3 maxInvocationsExclusiveScanAMD(ivec3);" + "ivec4 maxInvocationsExclusiveScanAMD(ivec4);" + + "uint maxInvocationsExclusiveScanAMD(uint);" + "uvec2 maxInvocationsExclusiveScanAMD(uvec2);" + "uvec3 maxInvocationsExclusiveScanAMD(uvec3);" + "uvec4 maxInvocationsExclusiveScanAMD(uvec4);" + + "double maxInvocationsExclusiveScanAMD(double);" + "dvec2 maxInvocationsExclusiveScanAMD(dvec2);" + "dvec3 maxInvocationsExclusiveScanAMD(dvec3);" + "dvec4 maxInvocationsExclusiveScanAMD(dvec4);" + + "int64_t maxInvocationsExclusiveScanAMD(int64_t);" + "i64vec2 maxInvocationsExclusiveScanAMD(i64vec2);" + "i64vec3 maxInvocationsExclusiveScanAMD(i64vec3);" + "i64vec4 maxInvocationsExclusiveScanAMD(i64vec4);" + + "uint64_t maxInvocationsExclusiveScanAMD(uint64_t);" + "u64vec2 maxInvocationsExclusiveScanAMD(u64vec2);" + "u64vec3 maxInvocationsExclusiveScanAMD(u64vec3);" + "u64vec4 maxInvocationsExclusiveScanAMD(u64vec4);" + + "float16_t maxInvocationsExclusiveScanAMD(float16_t);" + "f16vec2 maxInvocationsExclusiveScanAMD(f16vec2);" + "f16vec3 maxInvocationsExclusiveScanAMD(f16vec3);" + "f16vec4 maxInvocationsExclusiveScanAMD(f16vec4);" + + "float addInvocationsAMD(float);" + "vec2 addInvocationsAMD(vec2);" + "vec3 addInvocationsAMD(vec3);" + "vec4 addInvocationsAMD(vec4);" + + "int addInvocationsAMD(int);" + "ivec2 addInvocationsAMD(ivec2);" + "ivec3 addInvocationsAMD(ivec3);" + "ivec4 addInvocationsAMD(ivec4);" + + "uint addInvocationsAMD(uint);" + "uvec2 addInvocationsAMD(uvec2);" + "uvec3 addInvocationsAMD(uvec3);" + "uvec4 addInvocationsAMD(uvec4);" + + "double addInvocationsAMD(double);" + "dvec2 addInvocationsAMD(dvec2);" + "dvec3 addInvocationsAMD(dvec3);" + "dvec4 addInvocationsAMD(dvec4);" + + "int64_t addInvocationsAMD(int64_t);" + "i64vec2 addInvocationsAMD(i64vec2);" + "i64vec3 addInvocationsAMD(i64vec3);" + "i64vec4 addInvocationsAMD(i64vec4);" + + "uint64_t addInvocationsAMD(uint64_t);" + "u64vec2 addInvocationsAMD(u64vec2);" + "u64vec3 addInvocationsAMD(u64vec3);" + "u64vec4 addInvocationsAMD(u64vec4);" + + "float16_t addInvocationsAMD(float16_t);" + "f16vec2 addInvocationsAMD(f16vec2);" + "f16vec3 addInvocationsAMD(f16vec3);" + "f16vec4 addInvocationsAMD(f16vec4);" + + "float addInvocationsInclusiveScanAMD(float);" + "vec2 addInvocationsInclusiveScanAMD(vec2);" + "vec3 addInvocationsInclusiveScanAMD(vec3);" + "vec4 addInvocationsInclusiveScanAMD(vec4);" + + "int addInvocationsInclusiveScanAMD(int);" + "ivec2 addInvocationsInclusiveScanAMD(ivec2);" + "ivec3 addInvocationsInclusiveScanAMD(ivec3);" + "ivec4 addInvocationsInclusiveScanAMD(ivec4);" + + "uint addInvocationsInclusiveScanAMD(uint);" + "uvec2 addInvocationsInclusiveScanAMD(uvec2);" + "uvec3 addInvocationsInclusiveScanAMD(uvec3);" + "uvec4 addInvocationsInclusiveScanAMD(uvec4);" + + "double addInvocationsInclusiveScanAMD(double);" + "dvec2 addInvocationsInclusiveScanAMD(dvec2);" + "dvec3 addInvocationsInclusiveScanAMD(dvec3);" + "dvec4 addInvocationsInclusiveScanAMD(dvec4);" + + "int64_t addInvocationsInclusiveScanAMD(int64_t);" + "i64vec2 addInvocationsInclusiveScanAMD(i64vec2);" + "i64vec3 addInvocationsInclusiveScanAMD(i64vec3);" + "i64vec4 addInvocationsInclusiveScanAMD(i64vec4);" + + "uint64_t addInvocationsInclusiveScanAMD(uint64_t);" + "u64vec2 addInvocationsInclusiveScanAMD(u64vec2);" + "u64vec3 addInvocationsInclusiveScanAMD(u64vec3);" + "u64vec4 addInvocationsInclusiveScanAMD(u64vec4);" + + "float16_t addInvocationsInclusiveScanAMD(float16_t);" + "f16vec2 addInvocationsInclusiveScanAMD(f16vec2);" + "f16vec3 addInvocationsInclusiveScanAMD(f16vec3);" + "f16vec4 addInvocationsInclusiveScanAMD(f16vec4);" + + "float addInvocationsExclusiveScanAMD(float);" + "vec2 addInvocationsExclusiveScanAMD(vec2);" + "vec3 addInvocationsExclusiveScanAMD(vec3);" + "vec4 addInvocationsExclusiveScanAMD(vec4);" + + "int addInvocationsExclusiveScanAMD(int);" + "ivec2 addInvocationsExclusiveScanAMD(ivec2);" + "ivec3 addInvocationsExclusiveScanAMD(ivec3);" + "ivec4 addInvocationsExclusiveScanAMD(ivec4);" + + "uint addInvocationsExclusiveScanAMD(uint);" + "uvec2 addInvocationsExclusiveScanAMD(uvec2);" + "uvec3 addInvocationsExclusiveScanAMD(uvec3);" + "uvec4 addInvocationsExclusiveScanAMD(uvec4);" + + "double addInvocationsExclusiveScanAMD(double);" + "dvec2 addInvocationsExclusiveScanAMD(dvec2);" + "dvec3 addInvocationsExclusiveScanAMD(dvec3);" + "dvec4 addInvocationsExclusiveScanAMD(dvec4);" + + "int64_t addInvocationsExclusiveScanAMD(int64_t);" + "i64vec2 addInvocationsExclusiveScanAMD(i64vec2);" + "i64vec3 addInvocationsExclusiveScanAMD(i64vec3);" + "i64vec4 addInvocationsExclusiveScanAMD(i64vec4);" + + "uint64_t addInvocationsExclusiveScanAMD(uint64_t);" + "u64vec2 addInvocationsExclusiveScanAMD(u64vec2);" + "u64vec3 addInvocationsExclusiveScanAMD(u64vec3);" + "u64vec4 addInvocationsExclusiveScanAMD(u64vec4);" + + "float16_t addInvocationsExclusiveScanAMD(float16_t);" + "f16vec2 addInvocationsExclusiveScanAMD(f16vec2);" + "f16vec3 addInvocationsExclusiveScanAMD(f16vec3);" + "f16vec4 addInvocationsExclusiveScanAMD(f16vec4);" + + "float minInvocationsNonUniformAMD(float);" + "vec2 minInvocationsNonUniformAMD(vec2);" + "vec3 minInvocationsNonUniformAMD(vec3);" + "vec4 minInvocationsNonUniformAMD(vec4);" + + "int minInvocationsNonUniformAMD(int);" + "ivec2 minInvocationsNonUniformAMD(ivec2);" + "ivec3 minInvocationsNonUniformAMD(ivec3);" + "ivec4 minInvocationsNonUniformAMD(ivec4);" + + "uint minInvocationsNonUniformAMD(uint);" + "uvec2 minInvocationsNonUniformAMD(uvec2);" + "uvec3 minInvocationsNonUniformAMD(uvec3);" + "uvec4 minInvocationsNonUniformAMD(uvec4);" + + "double minInvocationsNonUniformAMD(double);" + "dvec2 minInvocationsNonUniformAMD(dvec2);" + "dvec3 minInvocationsNonUniformAMD(dvec3);" + "dvec4 minInvocationsNonUniformAMD(dvec4);" + + "int64_t minInvocationsNonUniformAMD(int64_t);" + "i64vec2 minInvocationsNonUniformAMD(i64vec2);" + "i64vec3 minInvocationsNonUniformAMD(i64vec3);" + "i64vec4 minInvocationsNonUniformAMD(i64vec4);" + + "uint64_t minInvocationsNonUniformAMD(uint64_t);" + "u64vec2 minInvocationsNonUniformAMD(u64vec2);" + "u64vec3 minInvocationsNonUniformAMD(u64vec3);" + "u64vec4 minInvocationsNonUniformAMD(u64vec4);" + + "float16_t minInvocationsNonUniformAMD(float16_t);" + "f16vec2 minInvocationsNonUniformAMD(f16vec2);" + "f16vec3 minInvocationsNonUniformAMD(f16vec3);" + "f16vec4 minInvocationsNonUniformAMD(f16vec4);" + + "float minInvocationsInclusiveScanNonUniformAMD(float);" + "vec2 minInvocationsInclusiveScanNonUniformAMD(vec2);" + "vec3 minInvocationsInclusiveScanNonUniformAMD(vec3);" + "vec4 minInvocationsInclusiveScanNonUniformAMD(vec4);" + + "int minInvocationsInclusiveScanNonUniformAMD(int);" + "ivec2 minInvocationsInclusiveScanNonUniformAMD(ivec2);" + "ivec3 minInvocationsInclusiveScanNonUniformAMD(ivec3);" + "ivec4 minInvocationsInclusiveScanNonUniformAMD(ivec4);" + + "uint minInvocationsInclusiveScanNonUniformAMD(uint);" + "uvec2 minInvocationsInclusiveScanNonUniformAMD(uvec2);" + "uvec3 minInvocationsInclusiveScanNonUniformAMD(uvec3);" + "uvec4 minInvocationsInclusiveScanNonUniformAMD(uvec4);" + + "double minInvocationsInclusiveScanNonUniformAMD(double);" + "dvec2 minInvocationsInclusiveScanNonUniformAMD(dvec2);" + "dvec3 minInvocationsInclusiveScanNonUniformAMD(dvec3);" + "dvec4 minInvocationsInclusiveScanNonUniformAMD(dvec4);" + + "int64_t minInvocationsInclusiveScanNonUniformAMD(int64_t);" + "i64vec2 minInvocationsInclusiveScanNonUniformAMD(i64vec2);" + "i64vec3 minInvocationsInclusiveScanNonUniformAMD(i64vec3);" + "i64vec4 minInvocationsInclusiveScanNonUniformAMD(i64vec4);" + + "uint64_t minInvocationsInclusiveScanNonUniformAMD(uint64_t);" + "u64vec2 minInvocationsInclusiveScanNonUniformAMD(u64vec2);" + "u64vec3 minInvocationsInclusiveScanNonUniformAMD(u64vec3);" + "u64vec4 minInvocationsInclusiveScanNonUniformAMD(u64vec4);" + + "float16_t minInvocationsInclusiveScanNonUniformAMD(float16_t);" + "f16vec2 minInvocationsInclusiveScanNonUniformAMD(f16vec2);" + "f16vec3 minInvocationsInclusiveScanNonUniformAMD(f16vec3);" + "f16vec4 minInvocationsInclusiveScanNonUniformAMD(f16vec4);" + + "float minInvocationsExclusiveScanNonUniformAMD(float);" + "vec2 minInvocationsExclusiveScanNonUniformAMD(vec2);" + "vec3 minInvocationsExclusiveScanNonUniformAMD(vec3);" + "vec4 minInvocationsExclusiveScanNonUniformAMD(vec4);" + + "int minInvocationsExclusiveScanNonUniformAMD(int);" + "ivec2 minInvocationsExclusiveScanNonUniformAMD(ivec2);" + "ivec3 minInvocationsExclusiveScanNonUniformAMD(ivec3);" + "ivec4 minInvocationsExclusiveScanNonUniformAMD(ivec4);" + + "uint minInvocationsExclusiveScanNonUniformAMD(uint);" + "uvec2 minInvocationsExclusiveScanNonUniformAMD(uvec2);" + "uvec3 minInvocationsExclusiveScanNonUniformAMD(uvec3);" + "uvec4 minInvocationsExclusiveScanNonUniformAMD(uvec4);" + + "double minInvocationsExclusiveScanNonUniformAMD(double);" + "dvec2 minInvocationsExclusiveScanNonUniformAMD(dvec2);" + "dvec3 minInvocationsExclusiveScanNonUniformAMD(dvec3);" + "dvec4 minInvocationsExclusiveScanNonUniformAMD(dvec4);" + + "int64_t minInvocationsExclusiveScanNonUniformAMD(int64_t);" + "i64vec2 minInvocationsExclusiveScanNonUniformAMD(i64vec2);" + "i64vec3 minInvocationsExclusiveScanNonUniformAMD(i64vec3);" + "i64vec4 minInvocationsExclusiveScanNonUniformAMD(i64vec4);" + + "uint64_t minInvocationsExclusiveScanNonUniformAMD(uint64_t);" + "u64vec2 minInvocationsExclusiveScanNonUniformAMD(u64vec2);" + "u64vec3 minInvocationsExclusiveScanNonUniformAMD(u64vec3);" + "u64vec4 minInvocationsExclusiveScanNonUniformAMD(u64vec4);" + + "float16_t minInvocationsExclusiveScanNonUniformAMD(float16_t);" + "f16vec2 minInvocationsExclusiveScanNonUniformAMD(f16vec2);" + "f16vec3 minInvocationsExclusiveScanNonUniformAMD(f16vec3);" + "f16vec4 minInvocationsExclusiveScanNonUniformAMD(f16vec4);" + + "float maxInvocationsNonUniformAMD(float);" + "vec2 maxInvocationsNonUniformAMD(vec2);" + "vec3 maxInvocationsNonUniformAMD(vec3);" + "vec4 maxInvocationsNonUniformAMD(vec4);" + + "int maxInvocationsNonUniformAMD(int);" + "ivec2 maxInvocationsNonUniformAMD(ivec2);" + "ivec3 maxInvocationsNonUniformAMD(ivec3);" + "ivec4 maxInvocationsNonUniformAMD(ivec4);" + + "uint maxInvocationsNonUniformAMD(uint);" + "uvec2 maxInvocationsNonUniformAMD(uvec2);" + "uvec3 maxInvocationsNonUniformAMD(uvec3);" + "uvec4 maxInvocationsNonUniformAMD(uvec4);" + + "double maxInvocationsNonUniformAMD(double);" + "dvec2 maxInvocationsNonUniformAMD(dvec2);" + "dvec3 maxInvocationsNonUniformAMD(dvec3);" + "dvec4 maxInvocationsNonUniformAMD(dvec4);" + + "int64_t maxInvocationsNonUniformAMD(int64_t);" + "i64vec2 maxInvocationsNonUniformAMD(i64vec2);" + "i64vec3 maxInvocationsNonUniformAMD(i64vec3);" + "i64vec4 maxInvocationsNonUniformAMD(i64vec4);" + + "uint64_t maxInvocationsNonUniformAMD(uint64_t);" + "u64vec2 maxInvocationsNonUniformAMD(u64vec2);" + "u64vec3 maxInvocationsNonUniformAMD(u64vec3);" + "u64vec4 maxInvocationsNonUniformAMD(u64vec4);" + + "float16_t maxInvocationsNonUniformAMD(float16_t);" + "f16vec2 maxInvocationsNonUniformAMD(f16vec2);" + "f16vec3 maxInvocationsNonUniformAMD(f16vec3);" + "f16vec4 maxInvocationsNonUniformAMD(f16vec4);" + + "float maxInvocationsInclusiveScanNonUniformAMD(float);" + "vec2 maxInvocationsInclusiveScanNonUniformAMD(vec2);" + "vec3 maxInvocationsInclusiveScanNonUniformAMD(vec3);" + "vec4 maxInvocationsInclusiveScanNonUniformAMD(vec4);" + + "int maxInvocationsInclusiveScanNonUniformAMD(int);" + "ivec2 maxInvocationsInclusiveScanNonUniformAMD(ivec2);" + "ivec3 maxInvocationsInclusiveScanNonUniformAMD(ivec3);" + "ivec4 maxInvocationsInclusiveScanNonUniformAMD(ivec4);" + + "uint maxInvocationsInclusiveScanNonUniformAMD(uint);" + "uvec2 maxInvocationsInclusiveScanNonUniformAMD(uvec2);" + "uvec3 maxInvocationsInclusiveScanNonUniformAMD(uvec3);" + "uvec4 maxInvocationsInclusiveScanNonUniformAMD(uvec4);" + + "double maxInvocationsInclusiveScanNonUniformAMD(double);" + "dvec2 maxInvocationsInclusiveScanNonUniformAMD(dvec2);" + "dvec3 maxInvocationsInclusiveScanNonUniformAMD(dvec3);" + "dvec4 maxInvocationsInclusiveScanNonUniformAMD(dvec4);" + + "int64_t maxInvocationsInclusiveScanNonUniformAMD(int64_t);" + "i64vec2 maxInvocationsInclusiveScanNonUniformAMD(i64vec2);" + "i64vec3 maxInvocationsInclusiveScanNonUniformAMD(i64vec3);" + "i64vec4 maxInvocationsInclusiveScanNonUniformAMD(i64vec4);" + + "uint64_t maxInvocationsInclusiveScanNonUniformAMD(uint64_t);" + "u64vec2 maxInvocationsInclusiveScanNonUniformAMD(u64vec2);" + "u64vec3 maxInvocationsInclusiveScanNonUniformAMD(u64vec3);" + "u64vec4 maxInvocationsInclusiveScanNonUniformAMD(u64vec4);" + + "float16_t maxInvocationsInclusiveScanNonUniformAMD(float16_t);" + "f16vec2 maxInvocationsInclusiveScanNonUniformAMD(f16vec2);" + "f16vec3 maxInvocationsInclusiveScanNonUniformAMD(f16vec3);" + "f16vec4 maxInvocationsInclusiveScanNonUniformAMD(f16vec4);" + + "float maxInvocationsExclusiveScanNonUniformAMD(float);" + "vec2 maxInvocationsExclusiveScanNonUniformAMD(vec2);" + "vec3 maxInvocationsExclusiveScanNonUniformAMD(vec3);" + "vec4 maxInvocationsExclusiveScanNonUniformAMD(vec4);" + + "int maxInvocationsExclusiveScanNonUniformAMD(int);" + "ivec2 maxInvocationsExclusiveScanNonUniformAMD(ivec2);" + "ivec3 maxInvocationsExclusiveScanNonUniformAMD(ivec3);" + "ivec4 maxInvocationsExclusiveScanNonUniformAMD(ivec4);" + + "uint maxInvocationsExclusiveScanNonUniformAMD(uint);" + "uvec2 maxInvocationsExclusiveScanNonUniformAMD(uvec2);" + "uvec3 maxInvocationsExclusiveScanNonUniformAMD(uvec3);" + "uvec4 maxInvocationsExclusiveScanNonUniformAMD(uvec4);" + + "double maxInvocationsExclusiveScanNonUniformAMD(double);" + "dvec2 maxInvocationsExclusiveScanNonUniformAMD(dvec2);" + "dvec3 maxInvocationsExclusiveScanNonUniformAMD(dvec3);" + "dvec4 maxInvocationsExclusiveScanNonUniformAMD(dvec4);" + + "int64_t maxInvocationsExclusiveScanNonUniformAMD(int64_t);" + "i64vec2 maxInvocationsExclusiveScanNonUniformAMD(i64vec2);" + "i64vec3 maxInvocationsExclusiveScanNonUniformAMD(i64vec3);" + "i64vec4 maxInvocationsExclusiveScanNonUniformAMD(i64vec4);" + + "uint64_t maxInvocationsExclusiveScanNonUniformAMD(uint64_t);" + "u64vec2 maxInvocationsExclusiveScanNonUniformAMD(u64vec2);" + "u64vec3 maxInvocationsExclusiveScanNonUniformAMD(u64vec3);" + "u64vec4 maxInvocationsExclusiveScanNonUniformAMD(u64vec4);" + + "float16_t maxInvocationsExclusiveScanNonUniformAMD(float16_t);" + "f16vec2 maxInvocationsExclusiveScanNonUniformAMD(f16vec2);" + "f16vec3 maxInvocationsExclusiveScanNonUniformAMD(f16vec3);" + "f16vec4 maxInvocationsExclusiveScanNonUniformAMD(f16vec4);" + + "float addInvocationsNonUniformAMD(float);" + "vec2 addInvocationsNonUniformAMD(vec2);" + "vec3 addInvocationsNonUniformAMD(vec3);" + "vec4 addInvocationsNonUniformAMD(vec4);" + + "int addInvocationsNonUniformAMD(int);" + "ivec2 addInvocationsNonUniformAMD(ivec2);" + "ivec3 addInvocationsNonUniformAMD(ivec3);" + "ivec4 addInvocationsNonUniformAMD(ivec4);" + + "uint addInvocationsNonUniformAMD(uint);" + "uvec2 addInvocationsNonUniformAMD(uvec2);" + "uvec3 addInvocationsNonUniformAMD(uvec3);" + "uvec4 addInvocationsNonUniformAMD(uvec4);" + + "double addInvocationsNonUniformAMD(double);" + "dvec2 addInvocationsNonUniformAMD(dvec2);" + "dvec3 addInvocationsNonUniformAMD(dvec3);" + "dvec4 addInvocationsNonUniformAMD(dvec4);" + + "int64_t addInvocationsNonUniformAMD(int64_t);" + "i64vec2 addInvocationsNonUniformAMD(i64vec2);" + "i64vec3 addInvocationsNonUniformAMD(i64vec3);" + "i64vec4 addInvocationsNonUniformAMD(i64vec4);" + + "uint64_t addInvocationsNonUniformAMD(uint64_t);" + "u64vec2 addInvocationsNonUniformAMD(u64vec2);" + "u64vec3 addInvocationsNonUniformAMD(u64vec3);" + "u64vec4 addInvocationsNonUniformAMD(u64vec4);" + + "float16_t addInvocationsNonUniformAMD(float16_t);" + "f16vec2 addInvocationsNonUniformAMD(f16vec2);" + "f16vec3 addInvocationsNonUniformAMD(f16vec3);" + "f16vec4 addInvocationsNonUniformAMD(f16vec4);" + + "float addInvocationsInclusiveScanNonUniformAMD(float);" + "vec2 addInvocationsInclusiveScanNonUniformAMD(vec2);" + "vec3 addInvocationsInclusiveScanNonUniformAMD(vec3);" + "vec4 addInvocationsInclusiveScanNonUniformAMD(vec4);" + + "int addInvocationsInclusiveScanNonUniformAMD(int);" + "ivec2 addInvocationsInclusiveScanNonUniformAMD(ivec2);" + "ivec3 addInvocationsInclusiveScanNonUniformAMD(ivec3);" + "ivec4 addInvocationsInclusiveScanNonUniformAMD(ivec4);" + + "uint addInvocationsInclusiveScanNonUniformAMD(uint);" + "uvec2 addInvocationsInclusiveScanNonUniformAMD(uvec2);" + "uvec3 addInvocationsInclusiveScanNonUniformAMD(uvec3);" + "uvec4 addInvocationsInclusiveScanNonUniformAMD(uvec4);" + + "double addInvocationsInclusiveScanNonUniformAMD(double);" + "dvec2 addInvocationsInclusiveScanNonUniformAMD(dvec2);" + "dvec3 addInvocationsInclusiveScanNonUniformAMD(dvec3);" + "dvec4 addInvocationsInclusiveScanNonUniformAMD(dvec4);" + + "int64_t addInvocationsInclusiveScanNonUniformAMD(int64_t);" + "i64vec2 addInvocationsInclusiveScanNonUniformAMD(i64vec2);" + "i64vec3 addInvocationsInclusiveScanNonUniformAMD(i64vec3);" + "i64vec4 addInvocationsInclusiveScanNonUniformAMD(i64vec4);" + + "uint64_t addInvocationsInclusiveScanNonUniformAMD(uint64_t);" + "u64vec2 addInvocationsInclusiveScanNonUniformAMD(u64vec2);" + "u64vec3 addInvocationsInclusiveScanNonUniformAMD(u64vec3);" + "u64vec4 addInvocationsInclusiveScanNonUniformAMD(u64vec4);" + + "float16_t addInvocationsInclusiveScanNonUniformAMD(float16_t);" + "f16vec2 addInvocationsInclusiveScanNonUniformAMD(f16vec2);" + "f16vec3 addInvocationsInclusiveScanNonUniformAMD(f16vec3);" + "f16vec4 addInvocationsInclusiveScanNonUniformAMD(f16vec4);" + + "float addInvocationsExclusiveScanNonUniformAMD(float);" + "vec2 addInvocationsExclusiveScanNonUniformAMD(vec2);" + "vec3 addInvocationsExclusiveScanNonUniformAMD(vec3);" + "vec4 addInvocationsExclusiveScanNonUniformAMD(vec4);" + + "int addInvocationsExclusiveScanNonUniformAMD(int);" + "ivec2 addInvocationsExclusiveScanNonUniformAMD(ivec2);" + "ivec3 addInvocationsExclusiveScanNonUniformAMD(ivec3);" + "ivec4 addInvocationsExclusiveScanNonUniformAMD(ivec4);" + + "uint addInvocationsExclusiveScanNonUniformAMD(uint);" + "uvec2 addInvocationsExclusiveScanNonUniformAMD(uvec2);" + "uvec3 addInvocationsExclusiveScanNonUniformAMD(uvec3);" + "uvec4 addInvocationsExclusiveScanNonUniformAMD(uvec4);" + + "double addInvocationsExclusiveScanNonUniformAMD(double);" + "dvec2 addInvocationsExclusiveScanNonUniformAMD(dvec2);" + "dvec3 addInvocationsExclusiveScanNonUniformAMD(dvec3);" + "dvec4 addInvocationsExclusiveScanNonUniformAMD(dvec4);" + + "int64_t addInvocationsExclusiveScanNonUniformAMD(int64_t);" + "i64vec2 addInvocationsExclusiveScanNonUniformAMD(i64vec2);" + "i64vec3 addInvocationsExclusiveScanNonUniformAMD(i64vec3);" + "i64vec4 addInvocationsExclusiveScanNonUniformAMD(i64vec4);" + + "uint64_t addInvocationsExclusiveScanNonUniformAMD(uint64_t);" + "u64vec2 addInvocationsExclusiveScanNonUniformAMD(u64vec2);" + "u64vec3 addInvocationsExclusiveScanNonUniformAMD(u64vec3);" + "u64vec4 addInvocationsExclusiveScanNonUniformAMD(u64vec4);" + + "float16_t addInvocationsExclusiveScanNonUniformAMD(float16_t);" + "f16vec2 addInvocationsExclusiveScanNonUniformAMD(f16vec2);" + "f16vec3 addInvocationsExclusiveScanNonUniformAMD(f16vec3);" + "f16vec4 addInvocationsExclusiveScanNonUniformAMD(f16vec4);" + + "float swizzleInvocationsAMD(float, uvec4);" + "vec2 swizzleInvocationsAMD(vec2, uvec4);" + "vec3 swizzleInvocationsAMD(vec3, uvec4);" + "vec4 swizzleInvocationsAMD(vec4, uvec4);" + + "int swizzleInvocationsAMD(int, uvec4);" + "ivec2 swizzleInvocationsAMD(ivec2, uvec4);" + "ivec3 swizzleInvocationsAMD(ivec3, uvec4);" + "ivec4 swizzleInvocationsAMD(ivec4, uvec4);" + + "uint swizzleInvocationsAMD(uint, uvec4);" + "uvec2 swizzleInvocationsAMD(uvec2, uvec4);" + "uvec3 swizzleInvocationsAMD(uvec3, uvec4);" + "uvec4 swizzleInvocationsAMD(uvec4, uvec4);" + + "float swizzleInvocationsMaskedAMD(float, uvec3);" + "vec2 swizzleInvocationsMaskedAMD(vec2, uvec3);" + "vec3 swizzleInvocationsMaskedAMD(vec3, uvec3);" + "vec4 swizzleInvocationsMaskedAMD(vec4, uvec3);" + + "int swizzleInvocationsMaskedAMD(int, uvec3);" + "ivec2 swizzleInvocationsMaskedAMD(ivec2, uvec3);" + "ivec3 swizzleInvocationsMaskedAMD(ivec3, uvec3);" + "ivec4 swizzleInvocationsMaskedAMD(ivec4, uvec3);" + + "uint swizzleInvocationsMaskedAMD(uint, uvec3);" + "uvec2 swizzleInvocationsMaskedAMD(uvec2, uvec3);" + "uvec3 swizzleInvocationsMaskedAMD(uvec3, uvec3);" + "uvec4 swizzleInvocationsMaskedAMD(uvec4, uvec3);" + + "float writeInvocationAMD(float, float, uint);" + "vec2 writeInvocationAMD(vec2, vec2, uint);" + "vec3 writeInvocationAMD(vec3, vec3, uint);" + "vec4 writeInvocationAMD(vec4, vec4, uint);" + + "int writeInvocationAMD(int, int, uint);" + "ivec2 writeInvocationAMD(ivec2, ivec2, uint);" + "ivec3 writeInvocationAMD(ivec3, ivec3, uint);" + "ivec4 writeInvocationAMD(ivec4, ivec4, uint);" + + "uint writeInvocationAMD(uint, uint, uint);" + "uvec2 writeInvocationAMD(uvec2, uvec2, uint);" + "uvec3 writeInvocationAMD(uvec3, uvec3, uint);" + "uvec4 writeInvocationAMD(uvec4, uvec4, uint);" + + "uint mbcntAMD(uint64_t);" + + "\n"); + } + + // GL_AMD_gcn_shader + if (profile != EEsProfile && version >= 450) { + commonBuiltins.append( + "float cubeFaceIndexAMD(vec3);" + "vec2 cubeFaceCoordAMD(vec3);" + "uint64_t timeAMD();" + + "\n"); + } + + // GL_AMD_gpu_shader_half_float + if (profile != EEsProfile && version >= 450) { + commonBuiltins.append( + "float16_t radians(float16_t);" + "f16vec2 radians(f16vec2);" + "f16vec3 radians(f16vec3);" + "f16vec4 radians(f16vec4);" + + "float16_t degrees(float16_t);" + "f16vec2 degrees(f16vec2);" + "f16vec3 degrees(f16vec3);" + "f16vec4 degrees(f16vec4);" + + "float16_t sin(float16_t);" + "f16vec2 sin(f16vec2);" + "f16vec3 sin(f16vec3);" + "f16vec4 sin(f16vec4);" + + "float16_t cos(float16_t);" + "f16vec2 cos(f16vec2);" + "f16vec3 cos(f16vec3);" + "f16vec4 cos(f16vec4);" + + "float16_t tan(float16_t);" + "f16vec2 tan(f16vec2);" + "f16vec3 tan(f16vec3);" + "f16vec4 tan(f16vec4);" + + "float16_t asin(float16_t);" + "f16vec2 asin(f16vec2);" + "f16vec3 asin(f16vec3);" + "f16vec4 asin(f16vec4);" + + "float16_t acos(float16_t);" + "f16vec2 acos(f16vec2);" + "f16vec3 acos(f16vec3);" + "f16vec4 acos(f16vec4);" + + "float16_t atan(float16_t, float16_t);" + "f16vec2 atan(f16vec2, f16vec2);" + "f16vec3 atan(f16vec3, f16vec3);" + "f16vec4 atan(f16vec4, f16vec4);" + + "float16_t atan(float16_t);" + "f16vec2 atan(f16vec2);" + "f16vec3 atan(f16vec3);" + "f16vec4 atan(f16vec4);" + + "float16_t sinh(float16_t);" + "f16vec2 sinh(f16vec2);" + "f16vec3 sinh(f16vec3);" + "f16vec4 sinh(f16vec4);" + + "float16_t cosh(float16_t);" + "f16vec2 cosh(f16vec2);" + "f16vec3 cosh(f16vec3);" + "f16vec4 cosh(f16vec4);" + + "float16_t tanh(float16_t);" + "f16vec2 tanh(f16vec2);" + "f16vec3 tanh(f16vec3);" + "f16vec4 tanh(f16vec4);" + + "float16_t asinh(float16_t);" + "f16vec2 asinh(f16vec2);" + "f16vec3 asinh(f16vec3);" + "f16vec4 asinh(f16vec4);" + + "float16_t acosh(float16_t);" + "f16vec2 acosh(f16vec2);" + "f16vec3 acosh(f16vec3);" + "f16vec4 acosh(f16vec4);" + + "float16_t atanh(float16_t);" + "f16vec2 atanh(f16vec2);" + "f16vec3 atanh(f16vec3);" + "f16vec4 atanh(f16vec4);" + + "float16_t pow(float16_t, float16_t);" + "f16vec2 pow(f16vec2, f16vec2);" + "f16vec3 pow(f16vec3, f16vec3);" + "f16vec4 pow(f16vec4, f16vec4);" + + "float16_t exp(float16_t);" + "f16vec2 exp(f16vec2);" + "f16vec3 exp(f16vec3);" + "f16vec4 exp(f16vec4);" + + "float16_t log(float16_t);" + "f16vec2 log(f16vec2);" + "f16vec3 log(f16vec3);" + "f16vec4 log(f16vec4);" + + "float16_t exp2(float16_t);" + "f16vec2 exp2(f16vec2);" + "f16vec3 exp2(f16vec3);" + "f16vec4 exp2(f16vec4);" + + "float16_t log2(float16_t);" + "f16vec2 log2(f16vec2);" + "f16vec3 log2(f16vec3);" + "f16vec4 log2(f16vec4);" + + "float16_t sqrt(float16_t);" + "f16vec2 sqrt(f16vec2);" + "f16vec3 sqrt(f16vec3);" + "f16vec4 sqrt(f16vec4);" + + "float16_t inversesqrt(float16_t);" + "f16vec2 inversesqrt(f16vec2);" + "f16vec3 inversesqrt(f16vec3);" + "f16vec4 inversesqrt(f16vec4);" + + "float16_t abs(float16_t);" + "f16vec2 abs(f16vec2);" + "f16vec3 abs(f16vec3);" + "f16vec4 abs(f16vec4);" + + "float16_t sign(float16_t);" + "f16vec2 sign(f16vec2);" + "f16vec3 sign(f16vec3);" + "f16vec4 sign(f16vec4);" + + "float16_t floor(float16_t);" + "f16vec2 floor(f16vec2);" + "f16vec3 floor(f16vec3);" + "f16vec4 floor(f16vec4);" + + "float16_t trunc(float16_t);" + "f16vec2 trunc(f16vec2);" + "f16vec3 trunc(f16vec3);" + "f16vec4 trunc(f16vec4);" + + "float16_t round(float16_t);" + "f16vec2 round(f16vec2);" + "f16vec3 round(f16vec3);" + "f16vec4 round(f16vec4);" + + "float16_t roundEven(float16_t);" + "f16vec2 roundEven(f16vec2);" + "f16vec3 roundEven(f16vec3);" + "f16vec4 roundEven(f16vec4);" + + "float16_t ceil(float16_t);" + "f16vec2 ceil(f16vec2);" + "f16vec3 ceil(f16vec3);" + "f16vec4 ceil(f16vec4);" + + "float16_t fract(float16_t);" + "f16vec2 fract(f16vec2);" + "f16vec3 fract(f16vec3);" + "f16vec4 fract(f16vec4);" + + "float16_t mod(float16_t, float16_t);" + "f16vec2 mod(f16vec2, float16_t);" + "f16vec3 mod(f16vec3, float16_t);" + "f16vec4 mod(f16vec4, float16_t);" + "f16vec2 mod(f16vec2, f16vec2);" + "f16vec3 mod(f16vec3, f16vec3);" + "f16vec4 mod(f16vec4, f16vec4);" + + "float16_t modf(float16_t, out float16_t);" + "f16vec2 modf(f16vec2, out f16vec2);" + "f16vec3 modf(f16vec3, out f16vec3);" + "f16vec4 modf(f16vec4, out f16vec4);" + + "float16_t min(float16_t, float16_t);" + "f16vec2 min(f16vec2, float16_t);" + "f16vec3 min(f16vec3, float16_t);" + "f16vec4 min(f16vec4, float16_t);" + "f16vec2 min(f16vec2, f16vec2);" + "f16vec3 min(f16vec3, f16vec3);" + "f16vec4 min(f16vec4, f16vec4);" + + "float16_t max(float16_t, float16_t);" + "f16vec2 max(f16vec2, float16_t);" + "f16vec3 max(f16vec3, float16_t);" + "f16vec4 max(f16vec4, float16_t);" + "f16vec2 max(f16vec2, f16vec2);" + "f16vec3 max(f16vec3, f16vec3);" + "f16vec4 max(f16vec4, f16vec4);" + + "float16_t clamp(float16_t, float16_t, float16_t);" + "f16vec2 clamp(f16vec2, float16_t, float16_t);" + "f16vec3 clamp(f16vec3, float16_t, float16_t);" + "f16vec4 clamp(f16vec4, float16_t, float16_t);" + "f16vec2 clamp(f16vec2, f16vec2, f16vec2);" + "f16vec3 clamp(f16vec3, f16vec3, f16vec3);" + "f16vec4 clamp(f16vec4, f16vec4, f16vec4);" + + "float16_t mix(float16_t, float16_t, float16_t);" + "f16vec2 mix(f16vec2, f16vec2, float16_t);" + "f16vec3 mix(f16vec3, f16vec3, float16_t);" + "f16vec4 mix(f16vec4, f16vec4, float16_t);" + "f16vec2 mix(f16vec2, f16vec2, f16vec2);" + "f16vec3 mix(f16vec3, f16vec3, f16vec3);" + "f16vec4 mix(f16vec4, f16vec4, f16vec4);" + "float16_t mix(float16_t, float16_t, bool);" + "f16vec2 mix(f16vec2, f16vec2, bvec2);" + "f16vec3 mix(f16vec3, f16vec3, bvec3);" + "f16vec4 mix(f16vec4, f16vec4, bvec4);" + + "float16_t step(float16_t, float16_t);" + "f16vec2 step(f16vec2, f16vec2);" + "f16vec3 step(f16vec3, f16vec3);" + "f16vec4 step(f16vec4, f16vec4);" + "f16vec2 step(float16_t, f16vec2);" + "f16vec3 step(float16_t, f16vec3);" + "f16vec4 step(float16_t, f16vec4);" + + "float16_t smoothstep(float16_t, float16_t, float16_t);" + "f16vec2 smoothstep(f16vec2, f16vec2, f16vec2);" + "f16vec3 smoothstep(f16vec3, f16vec3, f16vec3);" + "f16vec4 smoothstep(f16vec4, f16vec4, f16vec4);" + "f16vec2 smoothstep(float16_t, float16_t, f16vec2);" + "f16vec3 smoothstep(float16_t, float16_t, f16vec3);" + "f16vec4 smoothstep(float16_t, float16_t, f16vec4);" + + "bool isnan(float16_t);" + "bvec2 isnan(f16vec2);" + "bvec3 isnan(f16vec3);" + "bvec4 isnan(f16vec4);" + + "bool isinf(float16_t);" + "bvec2 isinf(f16vec2);" + "bvec3 isinf(f16vec3);" + "bvec4 isinf(f16vec4);" + + "float16_t fma(float16_t, float16_t, float16_t);" + "f16vec2 fma(f16vec2, f16vec2, f16vec2);" + "f16vec3 fma(f16vec3, f16vec3, f16vec3);" + "f16vec4 fma(f16vec4, f16vec4, f16vec4);" + + "float16_t frexp(float16_t, out int);" + "f16vec2 frexp(f16vec2, out ivec2);" + "f16vec3 frexp(f16vec3, out ivec3);" + "f16vec4 frexp(f16vec4, out ivec4);" + + "float16_t ldexp(float16_t, in int);" + "f16vec2 ldexp(f16vec2, in ivec2);" + "f16vec3 ldexp(f16vec3, in ivec3);" + "f16vec4 ldexp(f16vec4, in ivec4);" + + "uint packFloat2x16(f16vec2);" + "f16vec2 unpackFloat2x16(uint);" + + "float16_t length(float16_t);" + "float16_t length(f16vec2);" + "float16_t length(f16vec3);" + "float16_t length(f16vec4);" + + "float16_t distance(float16_t, float16_t);" + "float16_t distance(f16vec2, f16vec2);" + "float16_t distance(f16vec3, f16vec3);" + "float16_t distance(f16vec4, f16vec4);" + + "float16_t dot(float16_t, float16_t);" + "float16_t dot(f16vec2, f16vec2);" + "float16_t dot(f16vec3, f16vec3);" + "float16_t dot(f16vec4, f16vec4);" + + "f16vec3 cross(f16vec3, f16vec3);" + + "float16_t normalize(float16_t);" + "f16vec2 normalize(f16vec2);" + "f16vec3 normalize(f16vec3);" + "f16vec4 normalize(f16vec4);" + + "float16_t faceforward(float16_t, float16_t, float16_t);" + "f16vec2 faceforward(f16vec2, f16vec2, f16vec2);" + "f16vec3 faceforward(f16vec3, f16vec3, f16vec3);" + "f16vec4 faceforward(f16vec4, f16vec4, f16vec4);" + + "float16_t reflect(float16_t, float16_t);" + "f16vec2 reflect(f16vec2, f16vec2);" + "f16vec3 reflect(f16vec3, f16vec3);" + "f16vec4 reflect(f16vec4, f16vec4);" + + "float16_t refract(float16_t, float16_t, float16_t);" + "f16vec2 refract(f16vec2, f16vec2, float16_t);" + "f16vec3 refract(f16vec3, f16vec3, float16_t);" + "f16vec4 refract(f16vec4, f16vec4, float16_t);" + + "f16mat2 matrixCompMult(f16mat2, f16mat2);" + "f16mat3 matrixCompMult(f16mat3, f16mat3);" + "f16mat4 matrixCompMult(f16mat4, f16mat4);" + "f16mat2x3 matrixCompMult(f16mat2x3, f16mat2x3);" + "f16mat2x4 matrixCompMult(f16mat2x4, f16mat2x4);" + "f16mat3x2 matrixCompMult(f16mat3x2, f16mat3x2);" + "f16mat3x4 matrixCompMult(f16mat3x4, f16mat3x4);" + "f16mat4x2 matrixCompMult(f16mat4x2, f16mat4x2);" + "f16mat4x3 matrixCompMult(f16mat4x3, f16mat4x3);" + + "f16mat2 outerProduct(f16vec2, f16vec2);" + "f16mat3 outerProduct(f16vec3, f16vec3);" + "f16mat4 outerProduct(f16vec4, f16vec4);" + "f16mat2x3 outerProduct(f16vec3, f16vec2);" + "f16mat3x2 outerProduct(f16vec2, f16vec3);" + "f16mat2x4 outerProduct(f16vec4, f16vec2);" + "f16mat4x2 outerProduct(f16vec2, f16vec4);" + "f16mat3x4 outerProduct(f16vec4, f16vec3);" + "f16mat4x3 outerProduct(f16vec3, f16vec4);" + + "f16mat2 transpose(f16mat2);" + "f16mat3 transpose(f16mat3);" + "f16mat4 transpose(f16mat4);" + "f16mat2x3 transpose(f16mat3x2);" + "f16mat3x2 transpose(f16mat2x3);" + "f16mat2x4 transpose(f16mat4x2);" + "f16mat4x2 transpose(f16mat2x4);" + "f16mat3x4 transpose(f16mat4x3);" + "f16mat4x3 transpose(f16mat3x4);" + + "float16_t determinant(f16mat2);" + "float16_t determinant(f16mat3);" + "float16_t determinant(f16mat4);" + + "f16mat2 inverse(f16mat2);" + "f16mat3 inverse(f16mat3);" + "f16mat4 inverse(f16mat4);" + + "bvec2 lessThan(f16vec2, f16vec2);" + "bvec3 lessThan(f16vec3, f16vec3);" + "bvec4 lessThan(f16vec4, f16vec4);" + + "bvec2 lessThanEqual(f16vec2, f16vec2);" + "bvec3 lessThanEqual(f16vec3, f16vec3);" + "bvec4 lessThanEqual(f16vec4, f16vec4);" + + "bvec2 greaterThan(f16vec2, f16vec2);" + "bvec3 greaterThan(f16vec3, f16vec3);" + "bvec4 greaterThan(f16vec4, f16vec4);" + + "bvec2 greaterThanEqual(f16vec2, f16vec2);" + "bvec3 greaterThanEqual(f16vec3, f16vec3);" + "bvec4 greaterThanEqual(f16vec4, f16vec4);" + + "bvec2 equal(f16vec2, f16vec2);" + "bvec3 equal(f16vec3, f16vec3);" + "bvec4 equal(f16vec4, f16vec4);" + + "bvec2 notEqual(f16vec2, f16vec2);" + "bvec3 notEqual(f16vec3, f16vec3);" + "bvec4 notEqual(f16vec4, f16vec4);" + + "\n"); + } +#endif + + //============================================================================ + // + // Prototypes for built-in functions seen by vertex shaders only. + // (Except legacy lod functions, where it depends which release they are + // vertex only.) + // + //============================================================================ + + // + // Geometric Functions. + // + if (IncludeLegacy(version, profile, spvVersion)) + stageBuiltins[EShLangVertex].append("vec4 ftransform();"); + + // + // Original-style texture Functions with lod. + // + TString* s; + if (version == 100) + s = &stageBuiltins[EShLangVertex]; + else + s = &commonBuiltins; + if ((profile == EEsProfile && version == 100) || + profile == ECompatibilityProfile || + (profile == ECoreProfile && version < 420) || + profile == ENoProfile) { + if (spvVersion.spv == 0) { + s->append( + "vec4 texture2DLod(sampler2D, vec2, float);" // GL_ARB_shader_texture_lod + "vec4 texture2DProjLod(sampler2D, vec3, float);" // GL_ARB_shader_texture_lod + "vec4 texture2DProjLod(sampler2D, vec4, float);" // GL_ARB_shader_texture_lod + "vec4 texture3DLod(sampler3D, vec3, float);" // GL_ARB_shader_texture_lod // OES_texture_3D, but caught by keyword check + "vec4 texture3DProjLod(sampler3D, vec4, float);" // GL_ARB_shader_texture_lod // OES_texture_3D, but caught by keyword check + "vec4 textureCubeLod(samplerCube, vec3, float);" // GL_ARB_shader_texture_lod + + "\n"); + } + } + if ( profile == ECompatibilityProfile || + (profile == ECoreProfile && version < 420) || + profile == ENoProfile) { + if (spvVersion.spv == 0) { + s->append( + "vec4 texture1DLod(sampler1D, float, float);" // GL_ARB_shader_texture_lod + "vec4 texture1DProjLod(sampler1D, vec2, float);" // GL_ARB_shader_texture_lod + "vec4 texture1DProjLod(sampler1D, vec4, float);" // GL_ARB_shader_texture_lod + "vec4 shadow1DLod(sampler1DShadow, vec3, float);" // GL_ARB_shader_texture_lod + "vec4 shadow2DLod(sampler2DShadow, vec3, float);" // GL_ARB_shader_texture_lod + "vec4 shadow1DProjLod(sampler1DShadow, vec4, float);" // GL_ARB_shader_texture_lod + "vec4 shadow2DProjLod(sampler2DShadow, vec4, float);" // GL_ARB_shader_texture_lod + + "vec4 texture1DGradARB(sampler1D, float, float, float);" // GL_ARB_shader_texture_lod + "vec4 texture1DProjGradARB(sampler1D, vec2, float, float);" // GL_ARB_shader_texture_lod + "vec4 texture1DProjGradARB(sampler1D, vec4, float, float);" // GL_ARB_shader_texture_lod + "vec4 texture2DGradARB(sampler2D, vec2, vec2, vec2);" // GL_ARB_shader_texture_lod + "vec4 texture2DProjGradARB(sampler2D, vec3, vec2, vec2);" // GL_ARB_shader_texture_lod + "vec4 texture2DProjGradARB(sampler2D, vec4, vec2, vec2);" // GL_ARB_shader_texture_lod + "vec4 texture3DGradARB(sampler3D, vec3, vec3, vec3);" // GL_ARB_shader_texture_lod + "vec4 texture3DProjGradARB(sampler3D, vec4, vec3, vec3);" // GL_ARB_shader_texture_lod + "vec4 textureCubeGradARB(samplerCube, vec3, vec3, vec3);" // GL_ARB_shader_texture_lod + "vec4 shadow1DGradARB(sampler1DShadow, vec3, float, float);" // GL_ARB_shader_texture_lod + "vec4 shadow1DProjGradARB( sampler1DShadow, vec4, float, float);" // GL_ARB_shader_texture_lod + "vec4 shadow2DGradARB(sampler2DShadow, vec3, vec2, vec2);" // GL_ARB_shader_texture_lod + "vec4 shadow2DProjGradARB( sampler2DShadow, vec4, vec2, vec2);" // GL_ARB_shader_texture_lod + "vec4 texture2DRectGradARB(sampler2DRect, vec2, vec2, vec2);" // GL_ARB_shader_texture_lod + "vec4 texture2DRectProjGradARB( sampler2DRect, vec3, vec2, vec2);" // GL_ARB_shader_texture_lod + "vec4 texture2DRectProjGradARB( sampler2DRect, vec4, vec2, vec2);" // GL_ARB_shader_texture_lod + "vec4 shadow2DRectGradARB( sampler2DRectShadow, vec3, vec2, vec2);" // GL_ARB_shader_texture_lod + "vec4 shadow2DRectProjGradARB(sampler2DRectShadow, vec4, vec2, vec2);" // GL_ARB_shader_texture_lod + + "\n"); + } + } + + if ((profile != EEsProfile && version >= 150) || + (profile == EEsProfile && version >= 310)) { + //============================================================================ + // + // Prototypes for built-in functions seen by geometry shaders only. + // + //============================================================================ + + if (profile != EEsProfile && version >= 400) { + stageBuiltins[EShLangGeometry].append( + "void EmitStreamVertex(int);" + "void EndStreamPrimitive(int);" + ); + } + stageBuiltins[EShLangGeometry].append( + "void EmitVertex();" + "void EndPrimitive();" + "\n"); + } + + //============================================================================ + // + // Prototypes for all control functions. + // + //============================================================================ + bool esBarrier = (profile == EEsProfile && version >= 310); + if ((profile != EEsProfile && version >= 150) || esBarrier) + stageBuiltins[EShLangTessControl].append( + "void barrier();" + ); + if ((profile != EEsProfile && version >= 420) || esBarrier) + stageBuiltins[EShLangCompute].append( + "void barrier();" + ); + if ((profile != EEsProfile && version >= 130) || esBarrier) + commonBuiltins.append( + "void memoryBarrier();" + ); + if ((profile != EEsProfile && version >= 420) || esBarrier) { + commonBuiltins.append( + "void memoryBarrierAtomicCounter();" + "void memoryBarrierBuffer();" + "void memoryBarrierImage();" + ); + stageBuiltins[EShLangCompute].append( + "void memoryBarrierShared();" + "void groupMemoryBarrier();" + ); + } + + //============================================================================ + // + // Prototypes for built-in functions seen by fragment shaders only. + // + //============================================================================ + + // + // Original-style texture Functions with bias. + // + if (spvVersion.spv == 0 && (profile != EEsProfile || version == 100)) { + stageBuiltins[EShLangFragment].append( + "vec4 texture2D(sampler2D, vec2, float);" + "vec4 texture2DProj(sampler2D, vec3, float);" + "vec4 texture2DProj(sampler2D, vec4, float);" + "vec4 texture3D(sampler3D, vec3, float);" // OES_texture_3D + "vec4 texture3DProj(sampler3D, vec4, float);" // OES_texture_3D + "vec4 textureCube(samplerCube, vec3, float);" + + "\n"); + } + if (spvVersion.spv == 0 && (profile != EEsProfile && version > 100)) { + stageBuiltins[EShLangFragment].append( + "vec4 texture1D(sampler1D, float, float);" + "vec4 texture1DProj(sampler1D, vec2, float);" + "vec4 texture1DProj(sampler1D, vec4, float);" + "vec4 shadow1D(sampler1DShadow, vec3, float);" + "vec4 shadow2D(sampler2DShadow, vec3, float);" + "vec4 shadow1DProj(sampler1DShadow, vec4, float);" + "vec4 shadow2DProj(sampler2DShadow, vec4, float);" + + "\n"); + } + if (spvVersion.spv == 0 && profile == EEsProfile) { + stageBuiltins[EShLangFragment].append( + "vec4 texture2DLodEXT(sampler2D, vec2, float);" // GL_EXT_shader_texture_lod + "vec4 texture2DProjLodEXT(sampler2D, vec3, float);" // GL_EXT_shader_texture_lod + "vec4 texture2DProjLodEXT(sampler2D, vec4, float);" // GL_EXT_shader_texture_lod + "vec4 textureCubeLodEXT(samplerCube, vec3, float);" // GL_EXT_shader_texture_lod + + "\n"); + } + + stageBuiltins[EShLangFragment].append( + "float dFdx(float p);" + "vec2 dFdx(vec2 p);" + "vec3 dFdx(vec3 p);" + "vec4 dFdx(vec4 p);" + + "float dFdy(float p);" + "vec2 dFdy(vec2 p);" + "vec3 dFdy(vec3 p);" + "vec4 dFdy(vec4 p);" + + "float fwidth(float p);" + "vec2 fwidth(vec2 p);" + "vec3 fwidth(vec3 p);" + "vec4 fwidth(vec4 p);" + + "\n"); + + // GL_ARB_derivative_control + if (profile != EEsProfile && version >= 400) { + stageBuiltins[EShLangFragment].append( + "float dFdxFine(float p);" + "vec2 dFdxFine(vec2 p);" + "vec3 dFdxFine(vec3 p);" + "vec4 dFdxFine(vec4 p);" + + "float dFdyFine(float p);" + "vec2 dFdyFine(vec2 p);" + "vec3 dFdyFine(vec3 p);" + "vec4 dFdyFine(vec4 p);" + + "float fwidthFine(float p);" + "vec2 fwidthFine(vec2 p);" + "vec3 fwidthFine(vec3 p);" + "vec4 fwidthFine(vec4 p);" + + "\n"); + + stageBuiltins[EShLangFragment].append( + "float dFdxCoarse(float p);" + "vec2 dFdxCoarse(vec2 p);" + "vec3 dFdxCoarse(vec3 p);" + "vec4 dFdxCoarse(vec4 p);" + + "float dFdyCoarse(float p);" + "vec2 dFdyCoarse(vec2 p);" + "vec3 dFdyCoarse(vec3 p);" + "vec4 dFdyCoarse(vec4 p);" + + "float fwidthCoarse(float p);" + "vec2 fwidthCoarse(vec2 p);" + "vec3 fwidthCoarse(vec3 p);" + "vec4 fwidthCoarse(vec4 p);" + + "\n"); + } + + // GL_OES_shader_multisample_interpolation + if ((profile == EEsProfile && version >= 310) || + (profile != EEsProfile && version >= 400)) { + stageBuiltins[EShLangFragment].append( + "float interpolateAtCentroid(float);" + "vec2 interpolateAtCentroid(vec2);" + "vec3 interpolateAtCentroid(vec3);" + "vec4 interpolateAtCentroid(vec4);" + + "float interpolateAtSample(float, int);" + "vec2 interpolateAtSample(vec2, int);" + "vec3 interpolateAtSample(vec3, int);" + "vec4 interpolateAtSample(vec4, int);" + + "float interpolateAtOffset(float, vec2);" + "vec2 interpolateAtOffset(vec2, vec2);" + "vec3 interpolateAtOffset(vec3, vec2);" + "vec4 interpolateAtOffset(vec4, vec2);" + + "\n"); + } + +#ifdef AMD_EXTENSIONS + // GL_AMD_shader_explicit_vertex_parameter + if (profile != EEsProfile && version >= 450) { + stageBuiltins[EShLangFragment].append( + "float interpolateAtVertexAMD(float, uint);" + "vec2 interpolateAtVertexAMD(vec2, uint);" + "vec3 interpolateAtVertexAMD(vec3, uint);" + "vec4 interpolateAtVertexAMD(vec4, uint);" + + "int interpolateAtVertexAMD(int, uint);" + "ivec2 interpolateAtVertexAMD(ivec2, uint);" + "ivec3 interpolateAtVertexAMD(ivec3, uint);" + "ivec4 interpolateAtVertexAMD(ivec4, uint);" + + "uint interpolateAtVertexAMD(uint, uint);" + "uvec2 interpolateAtVertexAMD(uvec2, uint);" + "uvec3 interpolateAtVertexAMD(uvec3, uint);" + "uvec4 interpolateAtVertexAMD(uvec4, uint);" + + "float16_t interpolateAtVertexAMD(float16_t, uint);" + "f16vec2 interpolateAtVertexAMD(f16vec2, uint);" + "f16vec3 interpolateAtVertexAMD(f16vec3, uint);" + "f16vec4 interpolateAtVertexAMD(f16vec4, uint);" + + "\n"); + } + + // GL_AMD_gpu_shader_half_float + if (profile != EEsProfile && version >= 450) { + stageBuiltins[EShLangFragment].append( + "float16_t dFdx(float16_t);" + "f16vec2 dFdx(f16vec2);" + "f16vec3 dFdx(f16vec3);" + "f16vec4 dFdx(f16vec4);" + + "float16_t dFdy(float16_t);" + "f16vec2 dFdy(f16vec2);" + "f16vec3 dFdy(f16vec3);" + "f16vec4 dFdy(f16vec4);" + + "float16_t dFdxFine(float16_t);" + "f16vec2 dFdxFine(f16vec2);" + "f16vec3 dFdxFine(f16vec3);" + "f16vec4 dFdxFine(f16vec4);" + + "float16_t dFdyFine(float16_t);" + "f16vec2 dFdyFine(f16vec2);" + "f16vec3 dFdyFine(f16vec3);" + "f16vec4 dFdyFine(f16vec4);" + + "float16_t dFdxCoarse(float16_t);" + "f16vec2 dFdxCoarse(f16vec2);" + "f16vec3 dFdxCoarse(f16vec3);" + "f16vec4 dFdxCoarse(f16vec4);" + + "float16_t dFdyCoarse(float16_t);" + "f16vec2 dFdyCoarse(f16vec2);" + "f16vec3 dFdyCoarse(f16vec3);" + "f16vec4 dFdyCoarse(f16vec4);" + + "float16_t fwidth(float16_t);" + "f16vec2 fwidth(f16vec2);" + "f16vec3 fwidth(f16vec3);" + "f16vec4 fwidth(f16vec4);" + + "float16_t fwidthFine(float16_t);" + "f16vec2 fwidthFine(f16vec2);" + "f16vec3 fwidthFine(f16vec3);" + "f16vec4 fwidthFine(f16vec4);" + + "float16_t fwidthCoarse(float16_t);" + "f16vec2 fwidthCoarse(f16vec2);" + "f16vec3 fwidthCoarse(f16vec3);" + "f16vec4 fwidthCoarse(f16vec4);" + + "float16_t interpolateAtCentroid(float16_t);" + "f16vec2 interpolateAtCentroid(f16vec2);" + "f16vec3 interpolateAtCentroid(f16vec3);" + "f16vec4 interpolateAtCentroid(f16vec4);" + + "float16_t interpolateAtSample(float16_t, int);" + "f16vec2 interpolateAtSample(f16vec2, int);" + "f16vec3 interpolateAtSample(f16vec3, int);" + "f16vec4 interpolateAtSample(f16vec4, int);" + + "float16_t interpolateAtOffset(float16_t, f16vec2);" + "f16vec2 interpolateAtOffset(f16vec2, f16vec2);" + "f16vec3 interpolateAtOffset(f16vec3, f16vec2);" + "f16vec4 interpolateAtOffset(f16vec4, f16vec2);" + + "\n"); + } +#endif + + //============================================================================ + // + // Standard Uniforms + // + //============================================================================ + + // + // Depth range in window coordinates, p. 33 + // + if (spvVersion.spv == 0) { + commonBuiltins.append( + "struct gl_DepthRangeParameters {" + ); + if (profile == EEsProfile) { + commonBuiltins.append( + "highp float near;" // n + "highp float far;" // f + "highp float diff;" // f - n + ); + } else { + commonBuiltins.append( + "float near;" // n + "float far;" // f + "float diff;" // f - n + ); + } + + commonBuiltins.append( + "};" + "uniform gl_DepthRangeParameters gl_DepthRange;" + "\n"); + } + + if (spvVersion.spv == 0 && IncludeLegacy(version, profile, spvVersion)) { + // + // Matrix state. p. 31, 32, 37, 39, 40. + // + commonBuiltins.append( + "uniform mat4 gl_ModelViewMatrix;" + "uniform mat4 gl_ProjectionMatrix;" + "uniform mat4 gl_ModelViewProjectionMatrix;" + + // + // Derived matrix state that provides inverse and transposed versions + // of the matrices above. + // + "uniform mat3 gl_NormalMatrix;" + + "uniform mat4 gl_ModelViewMatrixInverse;" + "uniform mat4 gl_ProjectionMatrixInverse;" + "uniform mat4 gl_ModelViewProjectionMatrixInverse;" + + "uniform mat4 gl_ModelViewMatrixTranspose;" + "uniform mat4 gl_ProjectionMatrixTranspose;" + "uniform mat4 gl_ModelViewProjectionMatrixTranspose;" + + "uniform mat4 gl_ModelViewMatrixInverseTranspose;" + "uniform mat4 gl_ProjectionMatrixInverseTranspose;" + "uniform mat4 gl_ModelViewProjectionMatrixInverseTranspose;" + + // + // Normal scaling p. 39. + // + "uniform float gl_NormalScale;" + + // + // Point Size, p. 66, 67. + // + "struct gl_PointParameters {" + "float size;" + "float sizeMin;" + "float sizeMax;" + "float fadeThresholdSize;" + "float distanceConstantAttenuation;" + "float distanceLinearAttenuation;" + "float distanceQuadraticAttenuation;" + "};" + + "uniform gl_PointParameters gl_Point;" + + // + // Material State p. 50, 55. + // + "struct gl_MaterialParameters {" + "vec4 emission;" // Ecm + "vec4 ambient;" // Acm + "vec4 diffuse;" // Dcm + "vec4 specular;" // Scm + "float shininess;" // Srm + "};" + "uniform gl_MaterialParameters gl_FrontMaterial;" + "uniform gl_MaterialParameters gl_BackMaterial;" + + // + // Light State p 50, 53, 55. + // + "struct gl_LightSourceParameters {" + "vec4 ambient;" // Acli + "vec4 diffuse;" // Dcli + "vec4 specular;" // Scli + "vec4 position;" // Ppli + "vec4 halfVector;" // Derived: Hi + "vec3 spotDirection;" // Sdli + "float spotExponent;" // Srli + "float spotCutoff;" // Crli + // (range: [0.0,90.0], 180.0) + "float spotCosCutoff;" // Derived: cos(Crli) + // (range: [1.0,0.0],-1.0) + "float constantAttenuation;" // K0 + "float linearAttenuation;" // K1 + "float quadraticAttenuation;"// K2 + "};" + + "struct gl_LightModelParameters {" + "vec4 ambient;" // Acs + "};" + + "uniform gl_LightModelParameters gl_LightModel;" + + // + // Derived state from products of light and material. + // + "struct gl_LightModelProducts {" + "vec4 sceneColor;" // Derived. Ecm + Acm * Acs + "};" + + "uniform gl_LightModelProducts gl_FrontLightModelProduct;" + "uniform gl_LightModelProducts gl_BackLightModelProduct;" + + "struct gl_LightProducts {" + "vec4 ambient;" // Acm * Acli + "vec4 diffuse;" // Dcm * Dcli + "vec4 specular;" // Scm * Scli + "};" + + // + // Fog p. 161 + // + "struct gl_FogParameters {" + "vec4 color;" + "float density;" + "float start;" + "float end;" + "float scale;" // 1 / (gl_FogEnd - gl_FogStart) + "};" + + "uniform gl_FogParameters gl_Fog;" + + "\n"); + } + + //============================================================================ + // + // Define the interface to the compute shader. + // + //============================================================================ + + if ((profile != EEsProfile && version >= 420) || + (profile == EEsProfile && version >= 310)) { + stageBuiltins[EShLangCompute].append( + "in highp uvec3 gl_NumWorkGroups;" + "const highp uvec3 gl_WorkGroupSize = uvec3(1,1,1);" + + "in highp uvec3 gl_WorkGroupID;" + "in highp uvec3 gl_LocalInvocationID;" + + "in highp uvec3 gl_GlobalInvocationID;" + "in highp uint gl_LocalInvocationIndex;" + + "\n"); + } + + if ((profile != EEsProfile && version >= 140) || + (profile == EEsProfile && version >= 310)) { + stageBuiltins[EShLangCompute].append( + "in highp int gl_DeviceIndex;" // GL_EXT_device_group + "\n"); + } + + //============================================================================ + // + // Define the interface to the vertex shader. + // + //============================================================================ + + if (profile != EEsProfile) { + if (version < 130) { + stageBuiltins[EShLangVertex].append( + "attribute vec4 gl_Color;" + "attribute vec4 gl_SecondaryColor;" + "attribute vec3 gl_Normal;" + "attribute vec4 gl_Vertex;" + "attribute vec4 gl_MultiTexCoord0;" + "attribute vec4 gl_MultiTexCoord1;" + "attribute vec4 gl_MultiTexCoord2;" + "attribute vec4 gl_MultiTexCoord3;" + "attribute vec4 gl_MultiTexCoord4;" + "attribute vec4 gl_MultiTexCoord5;" + "attribute vec4 gl_MultiTexCoord6;" + "attribute vec4 gl_MultiTexCoord7;" + "attribute float gl_FogCoord;" + "\n"); + } else if (IncludeLegacy(version, profile, spvVersion)) { + stageBuiltins[EShLangVertex].append( + "in vec4 gl_Color;" + "in vec4 gl_SecondaryColor;" + "in vec3 gl_Normal;" + "in vec4 gl_Vertex;" + "in vec4 gl_MultiTexCoord0;" + "in vec4 gl_MultiTexCoord1;" + "in vec4 gl_MultiTexCoord2;" + "in vec4 gl_MultiTexCoord3;" + "in vec4 gl_MultiTexCoord4;" + "in vec4 gl_MultiTexCoord5;" + "in vec4 gl_MultiTexCoord6;" + "in vec4 gl_MultiTexCoord7;" + "in float gl_FogCoord;" + "\n"); + } + + if (version < 150) { + if (version < 130) { + stageBuiltins[EShLangVertex].append( + " vec4 gl_ClipVertex;" // needs qualifier fixed later + "varying vec4 gl_FrontColor;" + "varying vec4 gl_BackColor;" + "varying vec4 gl_FrontSecondaryColor;" + "varying vec4 gl_BackSecondaryColor;" + "varying vec4 gl_TexCoord[];" + "varying float gl_FogFragCoord;" + "\n"); + } else if (IncludeLegacy(version, profile, spvVersion)) { + stageBuiltins[EShLangVertex].append( + " vec4 gl_ClipVertex;" // needs qualifier fixed later + "out vec4 gl_FrontColor;" + "out vec4 gl_BackColor;" + "out vec4 gl_FrontSecondaryColor;" + "out vec4 gl_BackSecondaryColor;" + "out vec4 gl_TexCoord[];" + "out float gl_FogFragCoord;" + "\n"); + } + stageBuiltins[EShLangVertex].append( + "vec4 gl_Position;" // needs qualifier fixed later + "float gl_PointSize;" // needs qualifier fixed later + ); + + if (version == 130 || version == 140) + stageBuiltins[EShLangVertex].append( + "out float gl_ClipDistance[];" + ); + } else { + // version >= 150 + stageBuiltins[EShLangVertex].append( + "out gl_PerVertex {" + "vec4 gl_Position;" // needs qualifier fixed later + "float gl_PointSize;" // needs qualifier fixed later + "float gl_ClipDistance[];" + ); + if (IncludeLegacy(version, profile, spvVersion)) + stageBuiltins[EShLangVertex].append( + "vec4 gl_ClipVertex;" // needs qualifier fixed later + "vec4 gl_FrontColor;" + "vec4 gl_BackColor;" + "vec4 gl_FrontSecondaryColor;" + "vec4 gl_BackSecondaryColor;" + "vec4 gl_TexCoord[];" + "float gl_FogFragCoord;" + ); + if (version >= 450) + stageBuiltins[EShLangVertex].append( + "float gl_CullDistance[];" + ); + stageBuiltins[EShLangVertex].append( + "};" + "\n"); + } + if (version >= 130 && spvVersion.vulkan == 0) + stageBuiltins[EShLangVertex].append( + "int gl_VertexID;" // needs qualifier fixed later + ); + if (version >= 140 && spvVersion.vulkan == 0) + stageBuiltins[EShLangVertex].append( + "int gl_InstanceID;" // needs qualifier fixed later + ); + if (spvVersion.vulkan >= 100 && version >= 140) + stageBuiltins[EShLangVertex].append( + "in int gl_VertexIndex;" + "in int gl_InstanceIndex;" + ); + if (version >= 440) { + stageBuiltins[EShLangVertex].append( + "in int gl_BaseVertexARB;" + "in int gl_BaseInstanceARB;" + "in int gl_DrawIDARB;" + ); + } + +#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 + "out vec4 gl_PositionPerViewNV[];" // GL_NVX_multiview_per_view_attributes + "out int gl_ViewportMaskPerViewNV[];" // GL_NVX_multiview_per_view_attributes + ); +#endif + + } else { + // ES profile + if (version == 100) { + stageBuiltins[EShLangVertex].append( + "highp vec4 gl_Position;" // needs qualifier fixed later + "mediump float gl_PointSize;" // needs qualifier fixed later + ); + } else { + if (spvVersion.vulkan == 0) + stageBuiltins[EShLangVertex].append( + "in highp int gl_VertexID;" // needs qualifier fixed later + "in highp int gl_InstanceID;" // needs qualifier fixed later + ); + if (spvVersion.vulkan >= 100) + stageBuiltins[EShLangVertex].append( + "in highp int gl_VertexIndex;" + "in highp int gl_InstanceIndex;" + ); + if (version < 310) + stageBuiltins[EShLangVertex].append( + "highp vec4 gl_Position;" // needs qualifier fixed later + "highp float gl_PointSize;" // needs qualifier fixed later + ); + else + stageBuiltins[EShLangVertex].append( + "out gl_PerVertex {" + "highp vec4 gl_Position;" // needs qualifier fixed later + "highp float gl_PointSize;" // needs qualifier fixed later + "};" + ); + } + } + + if ((profile != EEsProfile && version >= 140) || + (profile == EEsProfile && version >= 310)) { + stageBuiltins[EShLangVertex].append( + "in highp int gl_DeviceIndex;" // GL_EXT_device_group + "in highp int gl_ViewIndex;" // GL_EXT_multiview + "\n"); + } + + + //============================================================================ + // + // Define the interface to the geometry shader. + // + //============================================================================ + + if (profile == ECoreProfile || profile == ECompatibilityProfile) { + stageBuiltins[EShLangGeometry].append( + "in gl_PerVertex {" + "vec4 gl_Position;" + "float gl_PointSize;" + "float gl_ClipDistance[];" + ); + if (profile == ECompatibilityProfile) + stageBuiltins[EShLangGeometry].append( + "vec4 gl_ClipVertex;" + "vec4 gl_FrontColor;" + "vec4 gl_BackColor;" + "vec4 gl_FrontSecondaryColor;" + "vec4 gl_BackSecondaryColor;" + "vec4 gl_TexCoord[];" + "float gl_FogFragCoord;" + ); + if (version >= 450) + stageBuiltins[EShLangGeometry].append( + "float gl_CullDistance[];" +#ifdef NV_EXTENSIONS + "vec4 gl_SecondaryPositionNV;" // GL_NV_stereo_view_rendering + "vec4 gl_PositionPerViewNV[];" // GL_NVX_multiview_per_view_attributes +#endif + ); + stageBuiltins[EShLangGeometry].append( + "} gl_in[];" + + "in int gl_PrimitiveIDIn;" + "out gl_PerVertex {" + "vec4 gl_Position;" + "float gl_PointSize;" + "float gl_ClipDistance[];" + "\n"); + if (profile == ECompatibilityProfile && version >= 400) + stageBuiltins[EShLangGeometry].append( + "vec4 gl_ClipVertex;" + "vec4 gl_FrontColor;" + "vec4 gl_BackColor;" + "vec4 gl_FrontSecondaryColor;" + "vec4 gl_BackSecondaryColor;" + "vec4 gl_TexCoord[];" + "float gl_FogFragCoord;" + ); + if (version >= 450) + stageBuiltins[EShLangGeometry].append( + "float gl_CullDistance[];" + ); + stageBuiltins[EShLangGeometry].append( + "};" + + "out int gl_PrimitiveID;" + "out int gl_Layer;"); + + if (profile == ECompatibilityProfile && version < 400) + stageBuiltins[EShLangGeometry].append( + "out vec4 gl_ClipVertex;" + ); + + if (version >= 400) + 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) + stageBuiltins[EShLangGeometry].append( + "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 + "out vec4 gl_PositionPerViewNV[];" // GL_NVX_multiview_per_view_attributes + "out int gl_ViewportMaskPerViewNV[];" // GL_NVX_multiview_per_view_attributes + ); +#endif + + stageBuiltins[EShLangGeometry].append("\n"); + } else if (profile == EEsProfile && version >= 310) { + stageBuiltins[EShLangGeometry].append( + "in gl_PerVertex {" + "highp vec4 gl_Position;" + "highp float gl_PointSize;" + "} gl_in[];" + "\n" + "in highp int gl_PrimitiveIDIn;" + "in highp int gl_InvocationID;" + "\n" + "out gl_PerVertex {" + "highp vec4 gl_Position;" + "highp float gl_PointSize;" + "};" + "\n" + "out highp int gl_PrimitiveID;" + "out highp int gl_Layer;" + "\n" + ); + } + + if ((profile != EEsProfile && version >= 140) || + (profile == EEsProfile && version >= 310)) { + stageBuiltins[EShLangGeometry].append( + "in highp int gl_DeviceIndex;" // GL_EXT_device_group + "in highp int gl_ViewIndex;" // GL_EXT_multiview + "\n"); + } + + //============================================================================ + // + // Define the interface to the tessellation control shader. + // + //============================================================================ + + if (profile != EEsProfile && version >= 150) { + // Note: "in gl_PerVertex {...} gl_in[gl_MaxPatchVertices];" is declared in initialize() below, + // as it depends on the resource sizing of gl_MaxPatchVertices. + + stageBuiltins[EShLangTessControl].append( + "in int gl_PatchVerticesIn;" + "in int gl_PrimitiveID;" + "in int gl_InvocationID;" + + "out gl_PerVertex {" + "vec4 gl_Position;" + "float gl_PointSize;" + "float gl_ClipDistance[];" + ); + if (profile == ECompatibilityProfile) + stageBuiltins[EShLangTessControl].append( + "vec4 gl_ClipVertex;" + "vec4 gl_FrontColor;" + "vec4 gl_BackColor;" + "vec4 gl_FrontSecondaryColor;" + "vec4 gl_BackSecondaryColor;" + "vec4 gl_TexCoord[];" + "float gl_FogFragCoord;" + ); + if (version >= 450) + 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 + "vec4 gl_PositionPerViewNV[];" // GL_NVX_multiview_per_view_attributes + "int gl_ViewportMaskPerViewNV[];" // GL_NVX_multiview_per_view_attributes +#endif + ); + stageBuiltins[EShLangTessControl].append( + "} gl_out[];" + + "patch out float gl_TessLevelOuter[4];" + "patch out float gl_TessLevelInner[2];" + "\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. + + stageBuiltins[EShLangTessControl].append( + "in highp int gl_PatchVerticesIn;" + "in highp int gl_PrimitiveID;" + "in highp int gl_InvocationID;" + + "out gl_PerVertex {" + "highp vec4 gl_Position;" + "highp float gl_PointSize;" + ); + stageBuiltins[EShLangTessControl].append( + "} gl_out[];" + + "patch out highp float gl_TessLevelOuter[4];" + "patch out highp float gl_TessLevelInner[2];" + "patch out highp vec4 gl_BoundingBoxOES[2];" + "\n"); + } + + if ((profile != EEsProfile && version >= 140) || + (profile == EEsProfile && version >= 310)) { + stageBuiltins[EShLangTessControl].append( + "in highp int gl_DeviceIndex;" // GL_EXT_device_group + "in highp int gl_ViewIndex;" // GL_EXT_multiview + "\n"); + } + + //============================================================================ + // + // Define the interface to the tessellation evaluation shader. + // + //============================================================================ + + if (profile != EEsProfile && version >= 150) { + // Note: "in gl_PerVertex {...} gl_in[gl_MaxPatchVertices];" is declared in initialize() below, + // as it depends on the resource sizing of gl_MaxPatchVertices. + + stageBuiltins[EShLangTessEvaluation].append( + "in int gl_PatchVerticesIn;" + "in int gl_PrimitiveID;" + "in vec3 gl_TessCoord;" + + "patch in float gl_TessLevelOuter[4];" + "patch in float gl_TessLevelInner[2];" + + "out gl_PerVertex {" + "vec4 gl_Position;" + "float gl_PointSize;" + "float gl_ClipDistance[];" + ); + if (version >= 400 && profile == ECompatibilityProfile) + stageBuiltins[EShLangTessEvaluation].append( + "vec4 gl_ClipVertex;" + "vec4 gl_FrontColor;" + "vec4 gl_BackColor;" + "vec4 gl_FrontSecondaryColor;" + "vec4 gl_BackSecondaryColor;" + "vec4 gl_TexCoord[];" + "float gl_FogFragCoord;" + ); + if (version >= 450) + stageBuiltins[EShLangTessEvaluation].append( + "float gl_CullDistance[];" + ); + stageBuiltins[EShLangTessEvaluation].append( + "};" + "\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 + "out vec4 gl_PositionPerViewNV[];" // GL_NVX_multiview_per_view_attributes + "out int gl_ViewportMaskPerViewNV[];" // GL_NVX_multiview_per_view_attributes + ); +#endif + + } else if (profile == EEsProfile && version >= 310) { + // Note: "in gl_PerVertex {...} gl_in[gl_MaxPatchVertices];" is declared in initialize() below, + // as it depends on the resource sizing of gl_MaxPatchVertices. + + stageBuiltins[EShLangTessEvaluation].append( + "in highp int gl_PatchVerticesIn;" + "in highp int gl_PrimitiveID;" + "in highp vec3 gl_TessCoord;" + + "patch in highp float gl_TessLevelOuter[4];" + "patch in highp float gl_TessLevelInner[2];" + + "out gl_PerVertex {" + "highp vec4 gl_Position;" + "highp float gl_PointSize;" + ); + stageBuiltins[EShLangTessEvaluation].append( + "};" + "\n"); + } + + if ((profile != EEsProfile && version >= 140) || + (profile == EEsProfile && version >= 310)) { + stageBuiltins[EShLangTessEvaluation].append( + "in highp int gl_DeviceIndex;" // GL_EXT_device_group + "in highp int gl_ViewIndex;" // GL_EXT_multiview + "\n"); + } + + //============================================================================ + // + // Define the interface to the fragment shader. + // + //============================================================================ + + if (profile != EEsProfile) { + + stageBuiltins[EShLangFragment].append( + "vec4 gl_FragCoord;" // needs qualifier fixed later + "bool gl_FrontFacing;" // needs qualifier fixed later + "float gl_FragDepth;" // needs qualifier fixed later + ); + if (version >= 120) + stageBuiltins[EShLangFragment].append( + "vec2 gl_PointCoord;" // needs qualifier fixed later + ); + if (IncludeLegacy(version, profile, spvVersion) || (! ForwardCompatibility && version < 420)) + stageBuiltins[EShLangFragment].append( + "vec4 gl_FragColor;" // needs qualifier fixed later + ); + + if (version < 130) { + stageBuiltins[EShLangFragment].append( + "varying vec4 gl_Color;" + "varying vec4 gl_SecondaryColor;" + "varying vec4 gl_TexCoord[];" + "varying float gl_FogFragCoord;" + ); + } else { + stageBuiltins[EShLangFragment].append( + "in float gl_ClipDistance[];" + ); + + if (IncludeLegacy(version, profile, spvVersion)) { + if (version < 150) + stageBuiltins[EShLangFragment].append( + "in float gl_FogFragCoord;" + "in vec4 gl_TexCoord[];" + "in vec4 gl_Color;" + "in vec4 gl_SecondaryColor;" + ); + else + stageBuiltins[EShLangFragment].append( + "in gl_PerFragment {" + "in float gl_FogFragCoord;" + "in vec4 gl_TexCoord[];" + "in vec4 gl_Color;" + "in vec4 gl_SecondaryColor;" + "};" + ); + } + } + + if (version >= 150) + stageBuiltins[EShLangFragment].append( + "flat in int gl_PrimitiveID;" + ); + + if (version >= 400) { + stageBuiltins[EShLangFragment].append( + "flat in int gl_SampleID;" + " in vec2 gl_SamplePosition;" + "flat in int gl_SampleMaskIn[];" + " out int gl_SampleMask[];" + ); + if (spvVersion.spv == 0) + stageBuiltins[EShLangFragment].append( + "uniform int gl_NumSamples;" + ); + } + + if (version >= 430) + stageBuiltins[EShLangFragment].append( + "flat in int gl_Layer;" + "flat in int gl_ViewportIndex;" + ); + + if (version >= 450) + stageBuiltins[EShLangFragment].append( + "in float gl_CullDistance[];" + "bool gl_HelperInvocation;" // needs qualifier fixed later + ); + +#ifdef AMD_EXTENSIONS + if (version >= 450) + stageBuiltins[EShLangFragment].append( + "in vec2 gl_BaryCoordNoPerspAMD;" + "in vec2 gl_BaryCoordNoPerspCentroidAMD;" + "in vec2 gl_BaryCoordNoPerspSampleAMD;" + "in vec2 gl_BaryCoordSmoothAMD;" + "in vec2 gl_BaryCoordSmoothCentroidAMD;" + "in vec2 gl_BaryCoordSmoothSampleAMD;" + "in vec3 gl_BaryCoordPullModelAMD;" + ); +#endif + } else { + // ES profile + + if (version == 100) { + stageBuiltins[EShLangFragment].append( + "mediump vec4 gl_FragCoord;" // needs qualifier fixed later + " bool gl_FrontFacing;" // needs qualifier fixed later + "mediump vec4 gl_FragColor;" // needs qualifier fixed later + "mediump vec2 gl_PointCoord;" // needs qualifier fixed later + ); + } + if (version >= 300) { + stageBuiltins[EShLangFragment].append( + "highp vec4 gl_FragCoord;" // needs qualifier fixed later + " bool gl_FrontFacing;" // needs qualifier fixed later + "mediump vec2 gl_PointCoord;" // needs qualifier fixed later + "highp float gl_FragDepth;" // needs qualifier fixed later + ); + } + if (version >= 310) { + stageBuiltins[EShLangFragment].append( + "bool gl_HelperInvocation;" // needs qualifier fixed later + "flat in highp int gl_PrimitiveID;" // needs qualifier fixed later + "flat in highp int gl_Layer;" // needs qualifier fixed later + ); + + stageBuiltins[EShLangFragment].append( // GL_OES_sample_variables + "flat in lowp int gl_SampleID;" + " in mediump vec2 gl_SamplePosition;" + "flat in highp int gl_SampleMaskIn[];" + " out highp int gl_SampleMask[];" + ); + if (spvVersion.spv == 0) + stageBuiltins[EShLangFragment].append( // GL_OES_sample_variables + "uniform lowp int gl_NumSamples;" + ); + } + stageBuiltins[EShLangFragment].append( + "highp float gl_FragDepthEXT;" // GL_EXT_frag_depth + ); + } + stageBuiltins[EShLangFragment].append("\n"); + + if (version >= 130) + add2ndGenerationSamplingImaging(version, profile, spvVersion); + + // GL_ARB_shader_ballot + if (profile != EEsProfile && version >= 450) { + commonBuiltins.append( + "uniform uint gl_SubGroupSizeARB;" + + "in uint gl_SubGroupInvocationARB;" + "in uint64_t gl_SubGroupEqMaskARB;" + "in uint64_t gl_SubGroupGeMaskARB;" + "in uint64_t gl_SubGroupGtMaskARB;" + "in uint64_t gl_SubGroupLeMaskARB;" + "in uint64_t gl_SubGroupLtMaskARB;" + + "\n"); + } + + if ((profile != EEsProfile && version >= 140) || + (profile == EEsProfile && version >= 310)) { + stageBuiltins[EShLangFragment].append( + "flat in highp int gl_DeviceIndex;" // GL_EXT_device_group + "flat in highp int gl_ViewIndex;" // GL_EXT_multiview + "\n"); + } + + // printf("%s\n", commonBuiltins.c_str()); + // printf("%s\n", stageBuiltins[EShLangFragment].c_str()); +} + +// +// Helper function for initialize(), to add the second set of names for texturing, +// when adding context-independent built-in functions. +// +void TBuiltIns::add2ndGenerationSamplingImaging(int version, EProfile profile, const SpvVersion& spvVersion) +{ + // + // In this function proper, enumerate the types, then calls the next set of functions + // to enumerate all the uses for that type. + // + + TBasicType bTypes[3] = { EbtFloat, EbtInt, EbtUint }; + bool skipBuffer = (profile == EEsProfile && version < 310) || (profile != EEsProfile && version < 140); + bool skipCubeArrayed = (profile == EEsProfile && version < 310) || (profile != EEsProfile && version < 130); + + // enumerate all the types + for (int image = 0; image <= 1; ++image) { // loop over "bool" image vs sampler + + for (int shadow = 0; shadow <= 1; ++shadow) { // loop over "bool" shadow or not + for (int ms = 0; ms <=1; ++ms) { + if ((ms || image) && shadow) + continue; + if (ms && profile != EEsProfile && version < 150) + continue; + if (ms && image && profile == EEsProfile) + continue; + if (ms && profile == EEsProfile && version < 310) + continue; + + for (int arrayed = 0; arrayed <= 1; ++arrayed) { // loop over "bool" arrayed or not + for (int dim = Esd1D; dim < EsdNumDims; ++dim) { // 1D, 2D, ..., buffer + if (dim == EsdSubpass && spvVersion.vulkan == 0) + continue; + if (dim == EsdSubpass && (image || shadow || arrayed)) + continue; + if ((dim == Esd1D || dim == EsdRect) && profile == EEsProfile) + continue; + if (dim != Esd2D && dim != EsdSubpass && ms) + continue; + if ((dim == Esd3D || dim == EsdRect) && arrayed) + continue; + if (dim == Esd3D && shadow) + continue; + if (dim == EsdCube && arrayed && skipCubeArrayed) + continue; + if (dim == EsdBuffer && skipBuffer) + continue; + if (dim == EsdBuffer && (shadow || arrayed || ms)) + continue; + if (ms && arrayed && profile == EEsProfile && version < 310) + continue; + + for (int bType = 0; bType < 3; ++bType) { // float, int, uint results + + if (shadow && bType > 0) + continue; + + if (dim == EsdRect && version < 140 && bType > 0) + continue; + + // + // Now, make all the function prototypes for the type we just built... + // + + TSampler sampler; + if (dim == EsdSubpass) { + sampler.setSubpass(bTypes[bType], ms ? true : false); + } else if (image) { + sampler.setImage(bTypes[bType], (TSamplerDim)dim, arrayed ? true : false, + shadow ? true : false, + ms ? true : false); + } else { + sampler.set(bTypes[bType], (TSamplerDim)dim, arrayed ? true : false, + shadow ? true : false, + ms ? true : false); + } + + TString typeName = sampler.getString(); + + if (dim == EsdSubpass) { + addSubpassSampling(sampler, typeName, version, profile); + continue; + } + + addQueryFunctions(sampler, typeName, version, profile); + + if (image) + addImageFunctions(sampler, typeName, version, profile); + else { + addSamplingFunctions(sampler, typeName, version, profile); + addGatherFunctions(sampler, typeName, version, profile); + } + } + } + } + } + } + } + + // + // sparseTexelsResidentARB() + // + + if (profile != EEsProfile && version >= 450) { + commonBuiltins.append("bool sparseTexelsResidentARB(int code);\n"); + } +} + +// +// Helper function for add2ndGenerationSamplingImaging(), +// when adding context-independent built-in functions. +// +// Add all the query functions for the given type. +// +void TBuiltIns::addQueryFunctions(TSampler sampler, TString& typeName, int version, EProfile profile) +{ + if (sampler.image && ((profile == EEsProfile && version < 310) || (profile != EEsProfile && version < 430))) + return; + + // + // textureSize() and imageSize() + // + + int sizeDims = dimMap[sampler.dim] + (sampler.arrayed ? 1 : 0) - (sampler.dim == EsdCube ? 1 : 0); + if (profile == EEsProfile) + commonBuiltins.append("highp "); + if (sizeDims == 1) + commonBuiltins.append("int"); + else { + commonBuiltins.append("ivec"); + commonBuiltins.append(postfixes[sizeDims]); + } + if (sampler.image) + commonBuiltins.append(" imageSize(readonly writeonly volatile coherent "); + else + commonBuiltins.append(" textureSize("); + commonBuiltins.append(typeName); + if (! sampler.image && sampler.dim != EsdRect && sampler.dim != EsdBuffer && ! sampler.ms) + commonBuiltins.append(",int);\n"); + else + commonBuiltins.append(");\n"); + + // + // textureSamples() and imageSamples() + // + + // GL_ARB_shader_texture_image_samples + // TODO: spec issue? there are no memory qualifiers; how to query a writeonly/readonly image, etc? + if (profile != EEsProfile && version >= 430 && sampler.ms) { + commonBuiltins.append("int "); + if (sampler.image) + commonBuiltins.append("imageSamples(readonly writeonly volatile coherent "); + else + commonBuiltins.append("textureSamples("); + commonBuiltins.append(typeName); + commonBuiltins.append(");\n"); + } + + // + // textureQueryLod(), fragment stage only + // + + if (profile != EEsProfile && version >= 400 && ! sampler.image && sampler.dim != EsdRect && ! sampler.ms && sampler.dim != EsdBuffer) { + stageBuiltins[EShLangFragment].append("vec2 textureQueryLod("); + stageBuiltins[EShLangFragment].append(typeName); + if (dimMap[sampler.dim] == 1) + stageBuiltins[EShLangFragment].append(", float"); + else { + stageBuiltins[EShLangFragment].append(", vec"); + stageBuiltins[EShLangFragment].append(postfixes[dimMap[sampler.dim]]); + } + stageBuiltins[EShLangFragment].append(");\n"); + } + + // + // textureQueryLevels() + // + + if (profile != EEsProfile && version >= 430 && ! sampler.image && sampler.dim != EsdRect && ! sampler.ms && sampler.dim != EsdBuffer) { + commonBuiltins.append("int textureQueryLevels("); + commonBuiltins.append(typeName); + commonBuiltins.append(");\n"); + } +} + +// +// Helper function for add2ndGenerationSamplingImaging(), +// when adding context-independent built-in functions. +// +// Add all the image access functions for the given type. +// +void TBuiltIns::addImageFunctions(TSampler sampler, TString& typeName, int version, EProfile profile) +{ + int dims = dimMap[sampler.dim]; + // most things with an array add a dimension, except for cubemaps + if (sampler.arrayed && sampler.dim != EsdCube) + ++dims; + + TString imageParams = typeName; + if (dims == 1) + imageParams.append(", int"); + else { + imageParams.append(", ivec"); + imageParams.append(postfixes[dims]); + } + if (sampler.ms) + imageParams.append(", int"); + + if (profile == EEsProfile) + commonBuiltins.append("highp "); + commonBuiltins.append(prefixes[sampler.type]); + commonBuiltins.append("vec4 imageLoad(readonly volatile coherent "); + commonBuiltins.append(imageParams); + commonBuiltins.append(");\n"); + + commonBuiltins.append("void imageStore(writeonly volatile coherent "); + commonBuiltins.append(imageParams); + commonBuiltins.append(", "); + commonBuiltins.append(prefixes[sampler.type]); + commonBuiltins.append("vec4);\n"); + + if (sampler.dim != Esd1D && sampler.dim != EsdBuffer && profile != EEsProfile && version >= 450) { + commonBuiltins.append("int sparseImageLoadARB(readonly volatile coherent "); + commonBuiltins.append(imageParams); + commonBuiltins.append(", out "); + commonBuiltins.append(prefixes[sampler.type]); + commonBuiltins.append("vec4"); + commonBuiltins.append(");\n"); + } + + if ( profile != EEsProfile || + (profile == EEsProfile && version >= 310)) { + if (sampler.type == EbtInt || sampler.type == EbtUint) { + const char* dataType = sampler.type == EbtInt ? "highp int" : "highp uint"; + + const int numBuiltins = 7; + + static const char* atomicFunc[numBuiltins] = { + " imageAtomicAdd(volatile coherent ", + " imageAtomicMin(volatile coherent ", + " imageAtomicMax(volatile coherent ", + " imageAtomicAnd(volatile coherent ", + " imageAtomicOr(volatile coherent ", + " imageAtomicXor(volatile coherent ", + " imageAtomicExchange(volatile coherent " + }; + + for (size_t i = 0; i < numBuiltins; ++i) { + commonBuiltins.append(dataType); + commonBuiltins.append(atomicFunc[i]); + commonBuiltins.append(imageParams); + commonBuiltins.append(", "); + commonBuiltins.append(dataType); + commonBuiltins.append(");\n"); + } + + commonBuiltins.append(dataType); + commonBuiltins.append(" imageAtomicCompSwap(volatile coherent "); + commonBuiltins.append(imageParams); + commonBuiltins.append(", "); + commonBuiltins.append(dataType); + commonBuiltins.append(", "); + commonBuiltins.append(dataType); + commonBuiltins.append(");\n"); + } else { + // not int or uint + // GL_ARB_ES3_1_compatibility + // TODO: spec issue: are there restrictions on the kind of layout() that can be used? what about dropping memory qualifiers? + if ((profile != EEsProfile && version >= 450) || + (profile == EEsProfile && version >= 310)) { + commonBuiltins.append("float imageAtomicExchange(volatile coherent "); + commonBuiltins.append(imageParams); + commonBuiltins.append(", float);\n"); + } + } + } +} + +// +// Helper function for initialize(), +// when adding context-independent built-in functions. +// +// Add all the subpass access functions for the given type. +// +void TBuiltIns::addSubpassSampling(TSampler sampler, TString& typeName, int /*version*/, EProfile /*profile*/) +{ + stageBuiltins[EShLangFragment].append(prefixes[sampler.type]); + stageBuiltins[EShLangFragment].append("vec4 subpassLoad"); + stageBuiltins[EShLangFragment].append("("); + stageBuiltins[EShLangFragment].append(typeName.c_str()); + if (sampler.ms) + stageBuiltins[EShLangFragment].append(", int"); + stageBuiltins[EShLangFragment].append(");\n"); +} + +// +// Helper function for add2ndGenerationSamplingImaging(), +// when adding context-independent built-in functions. +// +// Add all the texture lookup functions for the given type. +// +void TBuiltIns::addSamplingFunctions(TSampler sampler, TString& typeName, int version, EProfile profile) +{ + // + // texturing + // + for (int proj = 0; proj <= 1; ++proj) { // loop over "bool" projective or not + + if (proj && (sampler.dim == EsdCube || sampler.dim == EsdBuffer || sampler.arrayed || sampler.ms)) + continue; + + for (int lod = 0; lod <= 1; ++lod) { + + if (lod && (sampler.dim == EsdBuffer || sampler.dim == EsdRect || sampler.ms)) + continue; + if (lod && sampler.dim == Esd2D && sampler.arrayed && sampler.shadow) + continue; + if (lod && sampler.dim == EsdCube && sampler.shadow) + continue; + + for (int bias = 0; bias <= 1; ++bias) { + + if (bias && (lod || sampler.ms)) + continue; + if (bias && sampler.dim == Esd2D && sampler.shadow && sampler.arrayed) + continue; + if (bias && (sampler.dim == EsdRect || sampler.dim == EsdBuffer)) + continue; + + for (int offset = 0; offset <= 1; ++offset) { // loop over "bool" offset or not + + if (proj + offset + bias + lod > 3) + continue; + if (offset && (sampler.dim == EsdCube || sampler.dim == EsdBuffer || sampler.ms)) + continue; + + for (int fetch = 0; fetch <= 1; ++fetch) { // loop over "bool" fetch or not + + if (proj + offset + fetch + bias + lod > 3) + continue; + if (fetch && (lod || bias)) + continue; + if (fetch && (sampler.shadow || sampler.dim == EsdCube)) + continue; + if (fetch == 0 && (sampler.ms || sampler.dim == EsdBuffer)) + continue; + + for (int grad = 0; grad <= 1; ++grad) { // loop over "bool" grad or not + + if (grad && (lod || bias || sampler.ms)) + continue; + if (grad && sampler.dim == EsdBuffer) + continue; + if (proj + offset + fetch + grad + bias + lod > 3) + continue; + + for (int extraProj = 0; extraProj <= 1; ++extraProj) { + bool compare = false; + int totalDims = dimMap[sampler.dim] + (sampler.arrayed ? 1 : 0); + // skip dummy unused second component for 1D non-array shadows + if (sampler.shadow && totalDims < 2) + totalDims = 2; + totalDims += (sampler.shadow ? 1 : 0) + proj; + if (totalDims > 4 && sampler.shadow) { + compare = true; + totalDims = 4; + } + assert(totalDims <= 4); + + if (extraProj && ! proj) + continue; + if (extraProj && (sampler.dim == Esd3D || sampler.shadow)) + continue; + + for (int lodClamp = 0; lodClamp <= 1 ;++lodClamp) { // loop over "bool" lod clamp + + if (lodClamp && (profile == EEsProfile || version < 450)) + continue; + if (lodClamp && (proj || lod || fetch)) + continue; + + for (int sparse = 0; sparse <= 1; ++sparse) { // loop over "bool" sparse or not + + if (sparse && (profile == EEsProfile || version < 450)) + continue; + // Sparse sampling is not for 1D/1D array texture, buffer texture, and projective texture + if (sparse && (sampler.dim == Esd1D || sampler.dim == EsdBuffer || proj)) + continue; + + TString s; + + // return type + if (sparse) + s.append("int "); + else { + if (sampler.shadow) + s.append("float "); + else { + s.append(prefixes[sampler.type]); + s.append("vec4 "); + } + } + + // name + if (sparse) { + if (fetch) + s.append("sparseTexel"); + else + s.append("sparseTexture"); + } else { + if (fetch) + s.append("texel"); + else + s.append("texture"); + } + if (proj) + s.append("Proj"); + if (lod) + s.append("Lod"); + if (grad) + s.append("Grad"); + if (fetch) + s.append("Fetch"); + if (offset) + s.append("Offset"); + if (lodClamp) + s.append("Clamp"); + if (lodClamp || sparse) + s.append("ARB"); + s.append("("); + + // sampler type + s.append(typeName); + + // P coordinate + if (extraProj) + s.append(",vec4"); + else { + s.append(","); + TBasicType t = fetch ? EbtInt : EbtFloat; + if (totalDims == 1) + s.append(TType::getBasicString(t)); + else { + s.append(prefixes[t]); + s.append("vec"); + s.append(postfixes[totalDims]); + } + } + + if (bias && compare) + continue; + + // non-optional lod argument (lod that's not driven by lod loop) or sample + if ((fetch && sampler.dim != EsdBuffer && sampler.dim != EsdRect && !sampler.ms) || + (sampler.ms && fetch)) + s.append(",int"); + + // non-optional lod + if (lod) + s.append(",float"); + + // gradient arguments + if (grad) { + if (dimMap[sampler.dim] == 1) + s.append(",float,float"); + else { + s.append(",vec"); + s.append(postfixes[dimMap[sampler.dim]]); + s.append(",vec"); + s.append(postfixes[dimMap[sampler.dim]]); + } + } + + // offset + if (offset) { + if (dimMap[sampler.dim] == 1) + s.append(",int"); + else { + s.append(",ivec"); + s.append(postfixes[dimMap[sampler.dim]]); + } + } + + // non-optional compare + if (compare) + s.append(",float"); + + // lod clamp + if (lodClamp) + s.append(",float"); + + // texel out (for sparse texture) + if (sparse) { + s.append(",out "); + if (sampler.shadow) + s.append("float "); + else { + s.append(prefixes[sampler.type]); + s.append("vec4 "); + } + } + + // optional bias + if (bias) + s.append(",float"); + + s.append(");\n"); + + // Add to the per-language set of built-ins + + if (bias || lodClamp) + stageBuiltins[EShLangFragment].append(s); + else + commonBuiltins.append(s); + } + } + } + } + } + } + } + } + } +} + +// +// Helper function for add2ndGenerationSamplingImaging(), +// when adding context-independent built-in functions. +// +// Add all the texture gather functions for the given type. +// +void TBuiltIns::addGatherFunctions(TSampler sampler, TString& typeName, int version, EProfile profile) +{ + switch (sampler.dim) { + case Esd2D: + case EsdRect: + case EsdCube: + break; + default: + return; + } + + if (sampler.ms) + return; + + if (version < 140 && sampler.dim == EsdRect && sampler.type != EbtFloat) + return; + + 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 && sampler.shadow) + 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"); + switch (offset) { + case 1: + s.append("Offset"); + break; + case 2: + s.append("Offsets"); + default: + break; + } + 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]); + + // refZ argument + if (sampler.shadow) + 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"); + + s.append(");\n"); + commonBuiltins.append(s); + } + } + } +} + +// +// Add context-dependent built-in functions and variables that are present +// for the given version and profile. All the results are put into just the +// commonBuiltins, because it is called for just a specific stage. So, +// add stage-specific entries to the commonBuiltins, and only if that stage +// was requested. +// +void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language) +{ + // + // Initialize the context-dependent (resource-dependent) built-in strings for parsing. + // + + //============================================================================ + // + // Standard Uniforms + // + //============================================================================ + + TString& s = commonBuiltins; + const int maxSize = 80; + char builtInConstant[maxSize]; + + // + // Build string of implementation dependent constants. + // + + if (profile == EEsProfile) { + snprintf(builtInConstant, maxSize, "const mediump int gl_MaxVertexAttribs = %d;", resources.maxVertexAttribs); + s.append(builtInConstant); + + snprintf(builtInConstant, maxSize, "const mediump int gl_MaxVertexUniformVectors = %d;", resources.maxVertexUniformVectors); + s.append(builtInConstant); + + snprintf(builtInConstant, maxSize, "const mediump int gl_MaxVertexTextureImageUnits = %d;", resources.maxVertexTextureImageUnits); + s.append(builtInConstant); + + snprintf(builtInConstant, maxSize, "const mediump int gl_MaxCombinedTextureImageUnits = %d;", resources.maxCombinedTextureImageUnits); + s.append(builtInConstant); + + snprintf(builtInConstant, maxSize, "const mediump int gl_MaxTextureImageUnits = %d;", resources.maxTextureImageUnits); + s.append(builtInConstant); + + snprintf(builtInConstant, maxSize, "const mediump int gl_MaxFragmentUniformVectors = %d;", resources.maxFragmentUniformVectors); + s.append(builtInConstant); + + snprintf(builtInConstant, maxSize, "const mediump int gl_MaxDrawBuffers = %d;", resources.maxDrawBuffers); + s.append(builtInConstant); + + if (version == 100) { + snprintf(builtInConstant, maxSize, "const mediump int gl_MaxVaryingVectors = %d;", resources.maxVaryingVectors); + s.append(builtInConstant); + } else { + snprintf(builtInConstant, maxSize, "const mediump int gl_MaxVertexOutputVectors = %d;", resources.maxVertexOutputVectors); + s.append(builtInConstant); + + snprintf(builtInConstant, maxSize, "const mediump int gl_MaxFragmentInputVectors = %d;", resources.maxFragmentInputVectors); + s.append(builtInConstant); + + snprintf(builtInConstant, maxSize, "const mediump int gl_MinProgramTexelOffset = %d;", resources.minProgramTexelOffset); + s.append(builtInConstant); + + snprintf(builtInConstant, maxSize, "const mediump int gl_MaxProgramTexelOffset = %d;", resources.maxProgramTexelOffset); + s.append(builtInConstant); + } + + if (version >= 310) { + // geometry + + snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryInputComponents = %d;", resources.maxGeometryInputComponents); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryOutputComponents = %d;", resources.maxGeometryOutputComponents); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryImageUniforms = %d;", resources.maxGeometryImageUniforms); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryTextureImageUnits = %d;", resources.maxGeometryTextureImageUnits); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryOutputVertices = %d;", resources.maxGeometryOutputVertices); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryTotalOutputComponents = %d;", resources.maxGeometryTotalOutputComponents); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryUniformComponents = %d;", resources.maxGeometryUniformComponents); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryAtomicCounters = %d;", resources.maxGeometryAtomicCounters); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryAtomicCounterBuffers = %d;", resources.maxGeometryAtomicCounterBuffers); + s.append(builtInConstant); + + // tessellation + + snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlInputComponents = %d;", resources.maxTessControlInputComponents); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlOutputComponents = %d;", resources.maxTessControlOutputComponents); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlTextureImageUnits = %d;", resources.maxTessControlTextureImageUnits); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlUniformComponents = %d;", resources.maxTessControlUniformComponents); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlTotalOutputComponents = %d;", resources.maxTessControlTotalOutputComponents); + s.append(builtInConstant); + + snprintf(builtInConstant, maxSize, "const int gl_MaxTessEvaluationInputComponents = %d;", resources.maxTessEvaluationInputComponents); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxTessEvaluationOutputComponents = %d;", resources.maxTessEvaluationOutputComponents); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxTessEvaluationTextureImageUnits = %d;", resources.maxTessEvaluationTextureImageUnits); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxTessEvaluationUniformComponents = %d;", resources.maxTessEvaluationUniformComponents); + s.append(builtInConstant); + + snprintf(builtInConstant, maxSize, "const int gl_MaxTessPatchComponents = %d;", resources.maxTessPatchComponents); + s.append(builtInConstant); + + snprintf(builtInConstant, maxSize, "const int gl_MaxPatchVertices = %d;", resources.maxPatchVertices); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxTessGenLevel = %d;", resources.maxTessGenLevel); + s.append(builtInConstant); + + // this is here instead of with the others in initialize(version, profile) due to the dependence on gl_MaxPatchVertices + if (language == EShLangTessControl || language == EShLangTessEvaluation) { + s.append( + "in gl_PerVertex {" + "highp vec4 gl_Position;" + "highp float gl_PointSize;" +#ifdef NV_EXTENSIONS + "highp vec4 gl_SecondaryPositionNV;" // GL_NV_stereo_view_rendering + "highp vec4 gl_PositionPerViewNV[];" // GL_NVX_multiview_per_view_attributes +#endif + "} gl_in[gl_MaxPatchVertices];" + "\n"); + } + } + + } else { + // non-ES profile + + snprintf(builtInConstant, maxSize, "const int gl_MaxVertexAttribs = %d;", resources.maxVertexAttribs); + s.append(builtInConstant); + + snprintf(builtInConstant, maxSize, "const int gl_MaxVertexTextureImageUnits = %d;", resources.maxVertexTextureImageUnits); + s.append(builtInConstant); + + snprintf(builtInConstant, maxSize, "const int gl_MaxCombinedTextureImageUnits = %d;", resources.maxCombinedTextureImageUnits); + s.append(builtInConstant); + + snprintf(builtInConstant, maxSize, "const int gl_MaxTextureImageUnits = %d;", resources.maxTextureImageUnits); + s.append(builtInConstant); + + snprintf(builtInConstant, maxSize, "const int gl_MaxDrawBuffers = %d;", resources.maxDrawBuffers); + s.append(builtInConstant); + + snprintf(builtInConstant, maxSize, "const int gl_MaxLights = %d;", resources.maxLights); + s.append(builtInConstant); + + snprintf(builtInConstant, maxSize, "const int gl_MaxClipPlanes = %d;", resources.maxClipPlanes); + s.append(builtInConstant); + + snprintf(builtInConstant, maxSize, "const int gl_MaxTextureUnits = %d;", resources.maxTextureUnits); + s.append(builtInConstant); + + snprintf(builtInConstant, maxSize, "const int gl_MaxTextureCoords = %d;", resources.maxTextureCoords); + s.append(builtInConstant); + + snprintf(builtInConstant, maxSize, "const int gl_MaxVertexUniformComponents = %d;", resources.maxVertexUniformComponents); + s.append(builtInConstant); + + if (version < 150 || ARBCompatibility) { + snprintf(builtInConstant, maxSize, "const int gl_MaxVaryingFloats = %d;", resources.maxVaryingFloats); + s.append(builtInConstant); + } + + snprintf(builtInConstant, maxSize, "const int gl_MaxFragmentUniformComponents = %d;", resources.maxFragmentUniformComponents); + s.append(builtInConstant); + + if (spvVersion.spv == 0 && IncludeLegacy(version, profile, spvVersion)) { + // + // OpenGL'uniform' state. Page numbers are in reference to version + // 1.4 of the OpenGL specification. + // + + // + // Matrix state. p. 31, 32, 37, 39, 40. + // + s.append("uniform mat4 gl_TextureMatrix[gl_MaxTextureCoords];" + + // + // Derived matrix state that provides inverse and transposed versions + // of the matrices above. + // + "uniform mat4 gl_TextureMatrixInverse[gl_MaxTextureCoords];" + + "uniform mat4 gl_TextureMatrixTranspose[gl_MaxTextureCoords];" + + "uniform mat4 gl_TextureMatrixInverseTranspose[gl_MaxTextureCoords];" + + // + // Clip planes p. 42. + // + "uniform vec4 gl_ClipPlane[gl_MaxClipPlanes];" + + // + // Light State p 50, 53, 55. + // + "uniform gl_LightSourceParameters gl_LightSource[gl_MaxLights];" + + // + // Derived state from products of light. + // + "uniform gl_LightProducts gl_FrontLightProduct[gl_MaxLights];" + "uniform gl_LightProducts gl_BackLightProduct[gl_MaxLights];" + + // + // Texture Environment and Generation, p. 152, p. 40-42. + // + "uniform vec4 gl_TextureEnvColor[gl_MaxTextureImageUnits];" + "uniform vec4 gl_EyePlaneS[gl_MaxTextureCoords];" + "uniform vec4 gl_EyePlaneT[gl_MaxTextureCoords];" + "uniform vec4 gl_EyePlaneR[gl_MaxTextureCoords];" + "uniform vec4 gl_EyePlaneQ[gl_MaxTextureCoords];" + "uniform vec4 gl_ObjectPlaneS[gl_MaxTextureCoords];" + "uniform vec4 gl_ObjectPlaneT[gl_MaxTextureCoords];" + "uniform vec4 gl_ObjectPlaneR[gl_MaxTextureCoords];" + "uniform vec4 gl_ObjectPlaneQ[gl_MaxTextureCoords];"); + } + + if (version >= 130) { + snprintf(builtInConstant, maxSize, "const int gl_MaxClipDistances = %d;", resources.maxClipDistances); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxVaryingComponents = %d;", resources.maxVaryingComponents); + s.append(builtInConstant); + + // GL_ARB_shading_language_420pack + snprintf(builtInConstant, maxSize, "const mediump int gl_MinProgramTexelOffset = %d;", resources.minProgramTexelOffset); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const mediump int gl_MaxProgramTexelOffset = %d;", resources.maxProgramTexelOffset); + s.append(builtInConstant); + } + + // geometry + if (version >= 150) { + snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryInputComponents = %d;", resources.maxGeometryInputComponents); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryOutputComponents = %d;", resources.maxGeometryOutputComponents); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryTextureImageUnits = %d;", resources.maxGeometryTextureImageUnits); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryOutputVertices = %d;", resources.maxGeometryOutputVertices); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryTotalOutputComponents = %d;", resources.maxGeometryTotalOutputComponents); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryUniformComponents = %d;", resources.maxGeometryUniformComponents); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryVaryingComponents = %d;", resources.maxGeometryVaryingComponents); + s.append(builtInConstant); + + } + + if (version >= 150) { + snprintf(builtInConstant, maxSize, "const int gl_MaxVertexOutputComponents = %d;", resources.maxVertexOutputComponents); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxFragmentInputComponents = %d;", resources.maxFragmentInputComponents); + s.append(builtInConstant); + } + + // tessellation + if (version >= 150) { + snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlInputComponents = %d;", resources.maxTessControlInputComponents); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlOutputComponents = %d;", resources.maxTessControlOutputComponents); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlTextureImageUnits = %d;", resources.maxTessControlTextureImageUnits); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlUniformComponents = %d;", resources.maxTessControlUniformComponents); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlTotalOutputComponents = %d;", resources.maxTessControlTotalOutputComponents); + s.append(builtInConstant); + + snprintf(builtInConstant, maxSize, "const int gl_MaxTessEvaluationInputComponents = %d;", resources.maxTessEvaluationInputComponents); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxTessEvaluationOutputComponents = %d;", resources.maxTessEvaluationOutputComponents); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxTessEvaluationTextureImageUnits = %d;", resources.maxTessEvaluationTextureImageUnits); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxTessEvaluationUniformComponents = %d;", resources.maxTessEvaluationUniformComponents); + s.append(builtInConstant); + + snprintf(builtInConstant, maxSize, "const int gl_MaxTessPatchComponents = %d;", resources.maxTessPatchComponents); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxTessGenLevel = %d;", resources.maxTessGenLevel); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxPatchVertices = %d;", resources.maxPatchVertices); + s.append(builtInConstant); + + // this is here instead of with the others in initialize(version, profile) due to the dependence on gl_MaxPatchVertices + if (language == EShLangTessControl || language == EShLangTessEvaluation) { + s.append( + "in gl_PerVertex {" + "vec4 gl_Position;" + "float gl_PointSize;" + "float gl_ClipDistance[];" + ); + if (profile == ECompatibilityProfile) + s.append( + "vec4 gl_ClipVertex;" + "vec4 gl_FrontColor;" + "vec4 gl_BackColor;" + "vec4 gl_FrontSecondaryColor;" + "vec4 gl_BackSecondaryColor;" + "vec4 gl_TexCoord[];" + "float gl_FogFragCoord;" + ); + if (profile != EEsProfile && version >= 450) + s.append( + "float gl_CullDistance[];" +#ifdef NV_EXTENSIONS + "vec4 gl_SecondaryPositionNV;" // GL_NV_stereo_view_rendering + "vec4 gl_PositionPerViewNV[];" // GL_NVX_multiview_per_view_attributes +#endif + ); + s.append( + "} gl_in[gl_MaxPatchVertices];" + "\n"); + } + } + + if (version >= 150) { + snprintf(builtInConstant, maxSize, "const int gl_MaxViewports = %d;", resources.maxViewports); + s.append(builtInConstant); + } + + // images + if (version >= 130) { + snprintf(builtInConstant, maxSize, "const int gl_MaxCombinedImageUnitsAndFragmentOutputs = %d;", resources.maxCombinedImageUnitsAndFragmentOutputs); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxImageSamples = %d;", resources.maxImageSamples); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlImageUniforms = %d;", resources.maxTessControlImageUniforms); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxTessEvaluationImageUniforms = %d;", resources.maxTessEvaluationImageUniforms); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryImageUniforms = %d;", resources.maxGeometryImageUniforms); + s.append(builtInConstant); + } + + // enhanced layouts + if (version >= 430) { + snprintf(builtInConstant, maxSize, "const int gl_MaxTransformFeedbackBuffers = %d;", resources.maxTransformFeedbackBuffers); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxTransformFeedbackInterleavedComponents = %d;", resources.maxTransformFeedbackInterleavedComponents); + s.append(builtInConstant); + } + } + + // images (some in compute below) + if ((profile == EEsProfile && version >= 310) || + (profile != EEsProfile && version >= 130)) { + snprintf(builtInConstant, maxSize, "const int gl_MaxImageUnits = %d;", resources.maxImageUnits); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxCombinedShaderOutputResources = %d;", resources.maxCombinedShaderOutputResources); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxVertexImageUniforms = %d;", resources.maxVertexImageUniforms); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxFragmentImageUniforms = %d;", resources.maxFragmentImageUniforms); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxCombinedImageUniforms = %d;", resources.maxCombinedImageUniforms); + s.append(builtInConstant); + } + + // atomic counters (some in compute below) + if ((profile == EEsProfile && version >= 310) || + (profile != EEsProfile && version >= 420)) { + snprintf(builtInConstant, maxSize, "const int gl_MaxVertexAtomicCounters = %d;", resources. maxVertexAtomicCounters); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxFragmentAtomicCounters = %d;", resources. maxFragmentAtomicCounters); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxCombinedAtomicCounters = %d;", resources. maxCombinedAtomicCounters); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxAtomicCounterBindings = %d;", resources. maxAtomicCounterBindings); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxVertexAtomicCounterBuffers = %d;", resources. maxVertexAtomicCounterBuffers); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxFragmentAtomicCounterBuffers = %d;", resources. maxFragmentAtomicCounterBuffers); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxCombinedAtomicCounterBuffers = %d;", resources. maxCombinedAtomicCounterBuffers); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxAtomicCounterBufferSize = %d;", resources. maxAtomicCounterBufferSize); + s.append(builtInConstant); + } + if (profile != EEsProfile && version >= 420) { + snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlAtomicCounters = %d;", resources. maxTessControlAtomicCounters); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxTessEvaluationAtomicCounters = %d;", resources. maxTessEvaluationAtomicCounters); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryAtomicCounters = %d;", resources. maxGeometryAtomicCounters); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlAtomicCounterBuffers = %d;", resources. maxTessControlAtomicCounterBuffers); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxTessEvaluationAtomicCounterBuffers = %d;", resources. maxTessEvaluationAtomicCounterBuffers); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryAtomicCounterBuffers = %d;", resources. maxGeometryAtomicCounterBuffers); + s.append(builtInConstant); + + s.append("\n"); + } + + // compute + if ((profile == EEsProfile && version >= 310) || (profile != EEsProfile && version >= 420)) { + snprintf(builtInConstant, maxSize, "const ivec3 gl_MaxComputeWorkGroupCount = ivec3(%d,%d,%d);", resources.maxComputeWorkGroupCountX, + resources.maxComputeWorkGroupCountY, + resources.maxComputeWorkGroupCountZ); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const ivec3 gl_MaxComputeWorkGroupSize = ivec3(%d,%d,%d);", resources.maxComputeWorkGroupSizeX, + resources.maxComputeWorkGroupSizeY, + resources.maxComputeWorkGroupSizeZ); + s.append(builtInConstant); + + snprintf(builtInConstant, maxSize, "const int gl_MaxComputeUniformComponents = %d;", resources.maxComputeUniformComponents); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxComputeTextureImageUnits = %d;", resources.maxComputeTextureImageUnits); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxComputeImageUniforms = %d;", resources.maxComputeImageUniforms); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxComputeAtomicCounters = %d;", resources.maxComputeAtomicCounters); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxComputeAtomicCounterBuffers = %d;", resources.maxComputeAtomicCounterBuffers); + s.append(builtInConstant); + + s.append("\n"); + } + + // GL_ARB_cull_distance + if (profile != EEsProfile && version >= 450) { + snprintf(builtInConstant, maxSize, "const int gl_MaxCullDistances = %d;", resources.maxCullDistances); + s.append(builtInConstant); + snprintf(builtInConstant, maxSize, "const int gl_MaxCombinedClipAndCullDistances = %d;", resources.maxCombinedClipAndCullDistances); + s.append(builtInConstant); + } + + // GL_ARB_ES3_1_compatibility + if ((profile != EEsProfile && version >= 450) || + (profile == EEsProfile && version >= 310)) { + snprintf(builtInConstant, maxSize, "const int gl_MaxSamples = %d;", resources.maxSamples); + s.append(builtInConstant); + } + +#ifdef AMD_EXTENSIONS + // GL_AMD_gcn_shader + if (profile != EEsProfile && version >= 450) { + snprintf(builtInConstant, maxSize, "const int gl_SIMDGroupSizeAMD = 64;"); + s.append(builtInConstant); + } +#endif + + s.append("\n"); +} + +// +// To support special built-ins that have a special qualifier that cannot be declared textually +// in a shader, like gl_Position. +// +// This lets the type of the built-in be declared textually, and then have just its qualifier be +// updated afterward. +// +// Safe to call even if name is not present. +// +// Only use this for built-in variables that have a special qualifier in TStorageQualifier. +// New built-in variables should use a generic (textually declarable) qualifier in +// TStoraregQualifier and only call BuiltInVariable(). +// +static void SpecialQualifier(const char* name, TStorageQualifier qualifier, TBuiltInVariable builtIn, TSymbolTable& symbolTable) +{ + TSymbol* symbol = symbolTable.find(name); + if (symbol) { + TQualifier& symQualifier = symbol->getWritableType().getQualifier(); + symQualifier.storage = qualifier; + symQualifier.builtIn = builtIn; + } +} + +// +// To tag built-in variables with their TBuiltInVariable enum. Use this when the +// normal declaration text already gets the qualifier right, and all that's needed +// is setting the builtIn field. This should be the normal way for all new +// built-in variables. +// +// If SpecialQualifier() was called, this does not need to be called. +// +// Safe to call even if name is not present. +// +static void BuiltInVariable(const char* name, TBuiltInVariable builtIn, TSymbolTable& symbolTable) +{ + TSymbol* symbol = symbolTable.find(name); + if (! symbol) + return; + + TQualifier& symQualifier = symbol->getWritableType().getQualifier(); + symQualifier.builtIn = builtIn; +} + +// +// For built-in variables inside a named block. +// SpecialQualifier() won't ever go inside a block; their member's qualifier come +// from the qualification of the block. +// +// See comments above for other detail. +// +static void BuiltInVariable(const char* blockName, const char* name, TBuiltInVariable builtIn, TSymbolTable& symbolTable) +{ + TSymbol* symbol = symbolTable.find(blockName); + if (! symbol) + return; + + TTypeList& structure = *symbol->getWritableType().getWritableStruct(); + for (int i = 0; i < (int)structure.size(); ++i) { + if (structure[i].type->getFieldName().compare(name) == 0) { + structure[i].type->getQualifier().builtIn = builtIn; + return; + } + } +} + +// +// Finish adding/processing context-independent built-in symbols. +// 1) Programmatically add symbols that could not be added by simple text strings above. +// 2) Map built-in functions to operators, for those that will turn into an operation node +// instead of remaining a function call. +// 3) Tag extension-related symbols added to their base version with their extensions, so +// that if an early version has the extension turned off, there is an error reported on use. +// +void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable) +{ + // + // Tag built-in variables and functions with additional qualifier and extension information + // that cannot be declared with the text strings. + // + + // N.B.: a symbol should only be tagged once, and this function is called multiple times, once + // per stage that's used for this profile. So + // - generally, stick common ones in the fragment stage to ensure they are tagged exactly once + // - for ES, which has different precisions for different stages, the coarsest-grained tagging + // for a built-in used in many stages needs to be once for the fragment stage and once for + // the vertex stage + + 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) { + 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); + symbolTable.setVariableExtensions("gl_SubGroupGeMaskARB", 1, &E_GL_ARB_shader_ballot); + symbolTable.setVariableExtensions("gl_SubGroupGtMaskARB", 1, &E_GL_ARB_shader_ballot); + symbolTable.setVariableExtensions("gl_SubGroupLeMaskARB", 1, &E_GL_ARB_shader_ballot); + symbolTable.setVariableExtensions("gl_SubGroupLtMaskARB", 1, &E_GL_ARB_shader_ballot); + + symbolTable.setFunctionExtensions("ballotARB", 1, &E_GL_ARB_shader_ballot); + symbolTable.setFunctionExtensions("readInvocationARB", 1, &E_GL_ARB_shader_ballot); + symbolTable.setFunctionExtensions("readFirstInvocationARB", 1, &E_GL_ARB_shader_ballot); + + BuiltInVariable("gl_SubGroupInvocationARB", EbvSubGroupInvocation, symbolTable); + BuiltInVariable("gl_SubGroupEqMaskARB", EbvSubGroupEqMask, symbolTable); + BuiltInVariable("gl_SubGroupGeMaskARB", EbvSubGroupGeMask, symbolTable); + BuiltInVariable("gl_SubGroupGtMaskARB", EbvSubGroupGtMask, symbolTable); + BuiltInVariable("gl_SubGroupLeMaskARB", EbvSubGroupLeMask, symbolTable); + BuiltInVariable("gl_SubGroupLtMaskARB", EbvSubGroupLtMask, symbolTable); + + if (spvVersion.vulkan >= 100) + // 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); + } + +#ifdef AMD_EXTENSIONS + if (profile != EEsProfile) { + symbolTable.setFunctionExtensions("minInvocationsAMD", 1, &E_GL_AMD_shader_ballot); + symbolTable.setFunctionExtensions("maxInvocationsAMD", 1, &E_GL_AMD_shader_ballot); + symbolTable.setFunctionExtensions("addInvocationsAMD", 1, &E_GL_AMD_shader_ballot); + symbolTable.setFunctionExtensions("minInvocationsNonUniformAMD", 1, &E_GL_AMD_shader_ballot); + symbolTable.setFunctionExtensions("maxInvocationsNonUniformAMD", 1, &E_GL_AMD_shader_ballot); + symbolTable.setFunctionExtensions("addInvocationsNonUniformAMD", 1, &E_GL_AMD_shader_ballot); + symbolTable.setFunctionExtensions("swizzleInvocationsAMD", 1, &E_GL_AMD_shader_ballot); + symbolTable.setFunctionExtensions("swizzleInvocationsWithPatternAMD", 1, &E_GL_AMD_shader_ballot); + symbolTable.setFunctionExtensions("writeInvocationAMD", 1, &E_GL_AMD_shader_ballot); + symbolTable.setFunctionExtensions("mbcntAMD", 1, &E_GL_AMD_shader_ballot); + + symbolTable.setFunctionExtensions("minInvocationsInclusiveScanAMD", 1, &E_GL_AMD_shader_ballot); + symbolTable.setFunctionExtensions("maxInvocationsInclusiveScanAMD", 1, &E_GL_AMD_shader_ballot); + symbolTable.setFunctionExtensions("addInvocationsInclusiveScanAMD", 1, &E_GL_AMD_shader_ballot); + symbolTable.setFunctionExtensions("minInvocationsInclusiveScanNonUniformAMD", 1, &E_GL_AMD_shader_ballot); + symbolTable.setFunctionExtensions("maxInvocationsInclusiveScanNonUniformAMD", 1, &E_GL_AMD_shader_ballot); + symbolTable.setFunctionExtensions("addInvocationsInclusiveScanNonUniformAMD", 1, &E_GL_AMD_shader_ballot); + symbolTable.setFunctionExtensions("minInvocationsExclusiveScanAMD", 1, &E_GL_AMD_shader_ballot); + symbolTable.setFunctionExtensions("maxInvocationsExclusiveScanAMD", 1, &E_GL_AMD_shader_ballot); + symbolTable.setFunctionExtensions("addInvocationsExclusiveScanAMD", 1, &E_GL_AMD_shader_ballot); + symbolTable.setFunctionExtensions("minInvocationsExclusiveScanNonUniformAMD", 1, &E_GL_AMD_shader_ballot); + symbolTable.setFunctionExtensions("maxInvocationsExclusiveScanNonUniformAMD", 1, &E_GL_AMD_shader_ballot); + symbolTable.setFunctionExtensions("addInvocationsExclusiveScanNonUniformAMD", 1, &E_GL_AMD_shader_ballot); + } + + if (profile != EEsProfile) { + symbolTable.setFunctionExtensions("min3", 1, &E_GL_AMD_shader_trinary_minmax); + symbolTable.setFunctionExtensions("max3", 1, &E_GL_AMD_shader_trinary_minmax); + symbolTable.setFunctionExtensions("mid3", 1, &E_GL_AMD_shader_trinary_minmax); + } + + if (profile != EEsProfile) { + symbolTable.setFunctionExtensions("cubeFaceIndexAMD", 1, &E_GL_AMD_gcn_shader); + symbolTable.setFunctionExtensions("cubeFaceCoordAMD", 1, &E_GL_AMD_gcn_shader); + symbolTable.setFunctionExtensions("timeAMD", 1, &E_GL_AMD_gcn_shader); + } +#endif + + // Compatibility variables, vertex only + if (spvVersion.spv == 0) { + BuiltInVariable("gl_Color", EbvColor, symbolTable); + BuiltInVariable("gl_SecondaryColor", EbvSecondaryColor, symbolTable); + BuiltInVariable("gl_Normal", EbvNormal, symbolTable); + BuiltInVariable("gl_Vertex", EbvVertex, symbolTable); + BuiltInVariable("gl_MultiTexCoord0", EbvMultiTexCoord0, symbolTable); + BuiltInVariable("gl_MultiTexCoord1", EbvMultiTexCoord1, symbolTable); + BuiltInVariable("gl_MultiTexCoord2", EbvMultiTexCoord2, symbolTable); + BuiltInVariable("gl_MultiTexCoord3", EbvMultiTexCoord3, symbolTable); + BuiltInVariable("gl_MultiTexCoord4", EbvMultiTexCoord4, symbolTable); + BuiltInVariable("gl_MultiTexCoord5", EbvMultiTexCoord5, symbolTable); + BuiltInVariable("gl_MultiTexCoord6", EbvMultiTexCoord6, symbolTable); + BuiltInVariable("gl_MultiTexCoord7", EbvMultiTexCoord7, symbolTable); + BuiltInVariable("gl_FogCoord", EbvFogFragCoord, symbolTable); + } + + if (profile == EEsProfile) { + if (spvVersion.spv == 0) { + 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("fma", Num_AEP_gpu_shader5, AEP_gpu_shader5); + } + + if (profile == EEsProfile) { + 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); + symbolTable.setFunctionExtensions("imageAtomicAnd", 1, &E_GL_OES_shader_image_atomic); + symbolTable.setFunctionExtensions("imageAtomicOr", 1, &E_GL_OES_shader_image_atomic); + symbolTable.setFunctionExtensions("imageAtomicXor", 1, &E_GL_OES_shader_image_atomic); + symbolTable.setFunctionExtensions("imageAtomicExchange", 1, &E_GL_OES_shader_image_atomic); + symbolTable.setFunctionExtensions("imageAtomicCompSwap", 1, &E_GL_OES_shader_image_atomic); + } + + if (spvVersion.vulkan == 0) { + SpecialQualifier("gl_VertexID", EvqVertexId, EbvVertexId, symbolTable); + SpecialQualifier("gl_InstanceID", EvqInstanceId, EbvInstanceId, symbolTable); + } + + if (spvVersion.vulkan >= 100) { + BuiltInVariable("gl_VertexIndex", EbvVertexIndex, symbolTable); + BuiltInVariable("gl_InstanceIndex", EbvInstanceIndex, symbolTable); + } + + // 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); + } + + // Fall through + + case EShLangTessEvaluation: + case EShLangGeometry: + SpecialQualifier("gl_Position", EvqPosition, EbvPosition, symbolTable); + SpecialQualifier("gl_PointSize", EvqPointSize, EbvPointSize, symbolTable); + SpecialQualifier("gl_ClipVertex", EvqClipVertex, EbvClipVertex, symbolTable); + + BuiltInVariable("gl_in", "gl_Position", EbvPosition, symbolTable); + BuiltInVariable("gl_in", "gl_PointSize", EbvPointSize, symbolTable); + BuiltInVariable("gl_in", "gl_ClipDistance", EbvClipDistance, symbolTable); + BuiltInVariable("gl_in", "gl_CullDistance", EbvCullDistance, symbolTable); + + BuiltInVariable("gl_out", "gl_Position", EbvPosition, symbolTable); + BuiltInVariable("gl_out", "gl_PointSize", EbvPointSize, symbolTable); + BuiltInVariable("gl_out", "gl_ClipDistance", EbvClipDistance, symbolTable); + BuiltInVariable("gl_out", "gl_CullDistance", EbvCullDistance, symbolTable); + + BuiltInVariable("gl_ClipDistance", EbvClipDistance, symbolTable); + BuiltInVariable("gl_CullDistance", EbvCullDistance, symbolTable); + BuiltInVariable("gl_PrimitiveIDIn", EbvPrimitiveId, symbolTable); + BuiltInVariable("gl_PrimitiveID", EbvPrimitiveId, symbolTable); + BuiltInVariable("gl_InvocationID", EbvInvocationId, symbolTable); + BuiltInVariable("gl_Layer", EbvLayer, symbolTable); + BuiltInVariable("gl_ViewportIndex", EbvViewportIndex, symbolTable); + +#ifdef NV_EXTENSIONS + if (language != EShLangGeometry) { + symbolTable.setVariableExtensions("gl_Layer", Num_viewportEXTs, viewportEXTs); + symbolTable.setVariableExtensions("gl_ViewportIndex", Num_viewportEXTs, viewportEXTs); + } + 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); + symbolTable.setVariableExtensions("gl_PositionPerViewNV", 1, &E_GL_NVX_multiview_per_view_attributes); + symbolTable.setVariableExtensions("gl_ViewportMaskPerViewNV", 1, &E_GL_NVX_multiview_per_view_attributes); + + BuiltInVariable("gl_ViewportMask", EbvViewportMaskNV, symbolTable); + BuiltInVariable("gl_SecondaryPositionNV", EbvSecondaryPositionNV, symbolTable); + BuiltInVariable("gl_SecondaryViewportMaskNV", EbvSecondaryViewportMaskNV, symbolTable); + BuiltInVariable("gl_PositionPerViewNV", EbvPositionPerViewNV, symbolTable); + BuiltInVariable("gl_ViewportMaskPerViewNV", EbvViewportMaskPerViewNV, symbolTable); + + if (language != EShLangVertex) { + 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); + BuiltInVariable("gl_out", "gl_PositionPerViewNV", EbvPositionPerViewNV, symbolTable); + BuiltInVariable("gl_out", "gl_ViewportMaskPerViewNV", EbvViewportMaskPerViewNV, symbolTable); +#endif + + BuiltInVariable("gl_PatchVerticesIn", EbvPatchVertices, symbolTable); + BuiltInVariable("gl_TessLevelOuter", EbvTessLevelOuter, symbolTable); + BuiltInVariable("gl_TessLevelInner", EbvTessLevelInner, symbolTable); + BuiltInVariable("gl_TessCoord", EbvTessCoord, symbolTable); + + if (version < 410) + symbolTable.setVariableExtensions("gl_ViewportIndex", 1, &E_GL_ARB_viewport_array); + + // Compatibility variables + + BuiltInVariable("gl_in", "gl_ClipVertex", EbvClipVertex, symbolTable); + BuiltInVariable("gl_in", "gl_FrontColor", EbvFrontColor, symbolTable); + BuiltInVariable("gl_in", "gl_BackColor", EbvBackColor, symbolTable); + BuiltInVariable("gl_in", "gl_FrontSecondaryColor", EbvFrontSecondaryColor, symbolTable); + BuiltInVariable("gl_in", "gl_BackSecondaryColor", EbvBackSecondaryColor, symbolTable); + BuiltInVariable("gl_in", "gl_TexCoord", EbvTexCoord, symbolTable); + BuiltInVariable("gl_in", "gl_FogFragCoord", EbvFogFragCoord, symbolTable); + + BuiltInVariable("gl_out", "gl_ClipVertex", EbvClipVertex, symbolTable); + BuiltInVariable("gl_out", "gl_FrontColor", EbvFrontColor, symbolTable); + BuiltInVariable("gl_out", "gl_BackColor", EbvBackColor, symbolTable); + BuiltInVariable("gl_out", "gl_FrontSecondaryColor", EbvFrontSecondaryColor, symbolTable); + BuiltInVariable("gl_out", "gl_BackSecondaryColor", EbvBackSecondaryColor, symbolTable); + BuiltInVariable("gl_out", "gl_TexCoord", EbvTexCoord, symbolTable); + BuiltInVariable("gl_out", "gl_FogFragCoord", EbvFogFragCoord, symbolTable); + + BuiltInVariable("gl_ClipVertex", EbvClipVertex, symbolTable); + BuiltInVariable("gl_FrontColor", EbvFrontColor, symbolTable); + BuiltInVariable("gl_BackColor", EbvBackColor, symbolTable); + BuiltInVariable("gl_FrontSecondaryColor", EbvFrontSecondaryColor, symbolTable); + BuiltInVariable("gl_BackSecondaryColor", EbvBackSecondaryColor, symbolTable); + BuiltInVariable("gl_TexCoord", EbvTexCoord, symbolTable); + BuiltInVariable("gl_FogFragCoord", EbvFogFragCoord, symbolTable); + + // gl_PointSize, when it needs to be tied to an extension, is always a member of a block. + // (Sometimes with an instance name, sometimes anonymous). + // However, the current automatic extension scheme does not work per block member, + // so for now check when parsing. + // + // if (profile == EEsProfile) { + // if (language == EShLangGeometry) + // symbolTable.setVariableExtensions("gl_PointSize", Num_AEP_geometry_point_size, AEP_geometry_point_size); + // else if (language == EShLangTessEvaluation || language == EShLangTessControl) + // symbolTable.setVariableExtensions("gl_PointSize", Num_AEP_tessellation_point_size, AEP_tessellation_point_size); + //} + + if ((profile != EEsProfile && version >= 140) || + (profile == EEsProfile && version >= 310)) { + symbolTable.setVariableExtensions("gl_DeviceIndex", 1, &E_GL_EXT_device_group); + BuiltInVariable("gl_DeviceIndex", EbvDeviceIndex, symbolTable); + symbolTable.setVariableExtensions("gl_ViewIndex", 1, &E_GL_EXT_multiview); + BuiltInVariable("gl_ViewIndex", EbvViewIndex, symbolTable); + } + + break; + + case EShLangFragment: + SpecialQualifier("gl_FrontFacing", EvqFace, EbvFace, symbolTable); + SpecialQualifier("gl_FragCoord", EvqFragCoord, EbvFragCoord, symbolTable); + SpecialQualifier("gl_PointCoord", EvqPointCoord, EbvPointCoord, symbolTable); + SpecialQualifier("gl_FragColor", EvqFragColor, EbvFragColor, symbolTable); + SpecialQualifier("gl_FragDepth", EvqFragDepth, EbvFragDepth, symbolTable); + SpecialQualifier("gl_FragDepthEXT", EvqFragDepth, EbvFragDepth, symbolTable); + SpecialQualifier("gl_HelperInvocation", EvqVaryingIn, EbvHelperInvocation, symbolTable); + + BuiltInVariable("gl_ClipDistance", EbvClipDistance, symbolTable); + BuiltInVariable("gl_CullDistance", EbvCullDistance, symbolTable); + BuiltInVariable("gl_PrimitiveID", EbvPrimitiveId, 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) { + 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); + symbolTable.setVariableExtensions("gl_SampleMask", 1, &E_GL_OES_sample_variables); + symbolTable.setVariableExtensions("gl_NumSamples", 1, &E_GL_OES_sample_variables); + } + } + + BuiltInVariable("gl_Layer", EbvLayer, symbolTable); + BuiltInVariable("gl_ViewportIndex", EbvViewportIndex, symbolTable); + + // Compatibility variables + + BuiltInVariable("gl_in", "gl_FogFragCoord", EbvFogFragCoord, symbolTable); + BuiltInVariable("gl_in", "gl_TexCoord", EbvTexCoord, symbolTable); + BuiltInVariable("gl_in", "gl_Color", EbvColor, symbolTable); + BuiltInVariable("gl_in", "gl_SecondaryColor", EbvSecondaryColor, symbolTable); + + BuiltInVariable("gl_FogFragCoord", EbvFogFragCoord, symbolTable); + BuiltInVariable("gl_TexCoord", EbvTexCoord, symbolTable); + BuiltInVariable("gl_Color", EbvColor, symbolTable); + BuiltInVariable("gl_SecondaryColor", EbvSecondaryColor, symbolTable); + + // built-in functions + + if (profile == EEsProfile) { + if (spvVersion.spv == 0) { + symbolTable.setFunctionExtensions("texture2DLodEXT", 1, &E_GL_EXT_shader_texture_lod); + symbolTable.setFunctionExtensions("texture2DProjLodEXT", 1, &E_GL_EXT_shader_texture_lod); + symbolTable.setFunctionExtensions("textureCubeLodEXT", 1, &E_GL_EXT_shader_texture_lod); + 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 == 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) { + 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); + symbolTable.setFunctionExtensions("interpolateAtOffset", 1, &E_GL_OES_shader_multisample_interpolation); + } + } else if (version < 130) { + if (spvVersion.spv == 0) { + symbolTable.setFunctionExtensions("texture1DLod", 1, &E_GL_ARB_shader_texture_lod); + symbolTable.setFunctionExtensions("texture2DLod", 1, &E_GL_ARB_shader_texture_lod); + symbolTable.setFunctionExtensions("texture3DLod", 1, &E_GL_ARB_shader_texture_lod); + symbolTable.setFunctionExtensions("textureCubeLod", 1, &E_GL_ARB_shader_texture_lod); + symbolTable.setFunctionExtensions("texture1DProjLod", 1, &E_GL_ARB_shader_texture_lod); + symbolTable.setFunctionExtensions("texture2DProjLod", 1, &E_GL_ARB_shader_texture_lod); + symbolTable.setFunctionExtensions("texture3DProjLod", 1, &E_GL_ARB_shader_texture_lod); + symbolTable.setFunctionExtensions("shadow1DLod", 1, &E_GL_ARB_shader_texture_lod); + symbolTable.setFunctionExtensions("shadow2DLod", 1, &E_GL_ARB_shader_texture_lod); + symbolTable.setFunctionExtensions("shadow1DProjLod", 1, &E_GL_ARB_shader_texture_lod); + symbolTable.setFunctionExtensions("shadow2DProjLod", 1, &E_GL_ARB_shader_texture_lod); + } + } + + // E_GL_ARB_shader_texture_lod functions usable only with the extension enabled + if (profile != EEsProfile && spvVersion.spv == 0) { + symbolTable.setFunctionExtensions("texture1DGradARB", 1, &E_GL_ARB_shader_texture_lod); + symbolTable.setFunctionExtensions("texture1DProjGradARB", 1, &E_GL_ARB_shader_texture_lod); + symbolTable.setFunctionExtensions("texture2DGradARB", 1, &E_GL_ARB_shader_texture_lod); + symbolTable.setFunctionExtensions("texture2DProjGradARB", 1, &E_GL_ARB_shader_texture_lod); + symbolTable.setFunctionExtensions("texture3DGradARB", 1, &E_GL_ARB_shader_texture_lod); + symbolTable.setFunctionExtensions("texture3DProjGradARB", 1, &E_GL_ARB_shader_texture_lod); + symbolTable.setFunctionExtensions("textureCubeGradARB", 1, &E_GL_ARB_shader_texture_lod); + symbolTable.setFunctionExtensions("shadow1DGradARB", 1, &E_GL_ARB_shader_texture_lod); + symbolTable.setFunctionExtensions("shadow1DProjGradARB", 1, &E_GL_ARB_shader_texture_lod); + symbolTable.setFunctionExtensions("shadow2DGradARB", 1, &E_GL_ARB_shader_texture_lod); + symbolTable.setFunctionExtensions("shadow2DProjGradARB", 1, &E_GL_ARB_shader_texture_lod); + symbolTable.setFunctionExtensions("texture2DRectGradARB", 1, &E_GL_ARB_shader_texture_lod); + symbolTable.setFunctionExtensions("texture2DRectProjGradARB", 1, &E_GL_ARB_shader_texture_lod); + symbolTable.setFunctionExtensions("shadow2DRectGradARB", 1, &E_GL_ARB_shader_texture_lod); + symbolTable.setFunctionExtensions("shadow2DRectProjGradARB", 1, &E_GL_ARB_shader_texture_lod); + } + + // E_GL_ARB_shader_image_load_store + if (profile != EEsProfile && version < 420) + symbolTable.setFunctionExtensions("memoryBarrier", 1, &E_GL_ARB_shader_image_load_store); + // All the image access functions are protected by checks on the type of the first argument. + + // E_GL_ARB_shader_atomic_counters + if (profile != EEsProfile && version < 420) { + symbolTable.setFunctionExtensions("atomicCounterIncrement", 1, &E_GL_ARB_shader_atomic_counters); + symbolTable.setFunctionExtensions("atomicCounterDecrement", 1, &E_GL_ARB_shader_atomic_counters); + symbolTable.setFunctionExtensions("atomicCounter" , 1, &E_GL_ARB_shader_atomic_counters); + } + + // E_GL_ARB_derivative_control + if (profile != EEsProfile && version < 450) { + symbolTable.setFunctionExtensions("dFdxFine", 1, &E_GL_ARB_derivative_control); + symbolTable.setFunctionExtensions("dFdyFine", 1, &E_GL_ARB_derivative_control); + symbolTable.setFunctionExtensions("fwidthFine", 1, &E_GL_ARB_derivative_control); + symbolTable.setFunctionExtensions("dFdxCoarse", 1, &E_GL_ARB_derivative_control); + symbolTable.setFunctionExtensions("dFdyCoarse", 1, &E_GL_ARB_derivative_control); + symbolTable.setFunctionExtensions("fwidthCoarse", 1, &E_GL_ARB_derivative_control); + } + + // E_GL_ARB_sparse_texture2 + if (profile != EEsProfile) + { + symbolTable.setFunctionExtensions("sparseTextureARB", 1, &E_GL_ARB_sparse_texture2); + symbolTable.setFunctionExtensions("sparseTextureLodARB", 1, &E_GL_ARB_sparse_texture2); + symbolTable.setFunctionExtensions("sparseTextureOffsetARB", 1, &E_GL_ARB_sparse_texture2); + symbolTable.setFunctionExtensions("sparseTexelFetchARB", 1, &E_GL_ARB_sparse_texture2); + symbolTable.setFunctionExtensions("sparseTexelFetchOffsetARB", 1, &E_GL_ARB_sparse_texture2); + symbolTable.setFunctionExtensions("sparseTextureLodOffsetARB", 1, &E_GL_ARB_sparse_texture2); + symbolTable.setFunctionExtensions("sparseTextureGradARB", 1, &E_GL_ARB_sparse_texture2); + symbolTable.setFunctionExtensions("sparseTextureGradOffsetARB", 1, &E_GL_ARB_sparse_texture2); + symbolTable.setFunctionExtensions("sparseTextureGatherARB", 1, &E_GL_ARB_sparse_texture2); + symbolTable.setFunctionExtensions("sparseTextureGatherOffsetARB", 1, &E_GL_ARB_sparse_texture2); + symbolTable.setFunctionExtensions("sparseTextureGatherOffsetsARB", 1, &E_GL_ARB_sparse_texture2); + symbolTable.setFunctionExtensions("sparseImageLoadARB", 1, &E_GL_ARB_sparse_texture2); + symbolTable.setFunctionExtensions("sparseTexelsResident", 1, &E_GL_ARB_sparse_texture2); + } + + // E_GL_ARB_sparse_texture_clamp + if (profile != EEsProfile) + { + symbolTable.setFunctionExtensions("sparseTextureClampARB", 1, &E_GL_ARB_sparse_texture_clamp); + symbolTable.setFunctionExtensions("sparseTextureOffsetClampARB", 1, &E_GL_ARB_sparse_texture_clamp); + symbolTable.setFunctionExtensions("sparseTextureGradClampARB", 1, &E_GL_ARB_sparse_texture_clamp); + symbolTable.setFunctionExtensions("sparseTextureGradOffsetClampARB", 1, &E_GL_ARB_sparse_texture_clamp); + symbolTable.setFunctionExtensions("textureClampARB", 1, &E_GL_ARB_sparse_texture_clamp); + symbolTable.setFunctionExtensions("textureOffsetClampARB", 1, &E_GL_ARB_sparse_texture_clamp); + symbolTable.setFunctionExtensions("textureGradClampARB", 1, &E_GL_ARB_sparse_texture_clamp); + symbolTable.setFunctionExtensions("textureGradOffsetClampARB", 1, &E_GL_ARB_sparse_texture_clamp); + } + +#ifdef AMD_EXTENSIONS + // E_GL_AMD_shader_explicit_vertex_parameter + if (profile != EEsProfile) { + symbolTable.setVariableExtensions("gl_BaryCoordNoPerspAMD", 1, &E_GL_AMD_shader_explicit_vertex_parameter); + symbolTable.setVariableExtensions("gl_BaryCoordNoPerspCentroidAMD", 1, &E_GL_AMD_shader_explicit_vertex_parameter); + symbolTable.setVariableExtensions("gl_BaryCoordNoPerspSampleAMD", 1, &E_GL_AMD_shader_explicit_vertex_parameter); + symbolTable.setVariableExtensions("gl_BaryCoordSmoothAMD", 1, &E_GL_AMD_shader_explicit_vertex_parameter); + symbolTable.setVariableExtensions("gl_BaryCoordSmoothCentroidAMD", 1, &E_GL_AMD_shader_explicit_vertex_parameter); + symbolTable.setVariableExtensions("gl_BaryCoordSmoothSampleAMD", 1, &E_GL_AMD_shader_explicit_vertex_parameter); + symbolTable.setVariableExtensions("gl_BaryCoordPullModelAMD", 1, &E_GL_AMD_shader_explicit_vertex_parameter); + + symbolTable.setFunctionExtensions("interpolateAtVertexAMD", 1, &E_GL_AMD_shader_explicit_vertex_parameter); + + BuiltInVariable("gl_BaryCoordNoPerspAMD", EbvBaryCoordNoPersp, symbolTable); + BuiltInVariable("gl_BaryCoordNoPerspCentroidAMD", EbvBaryCoordNoPerspCentroid, symbolTable); + BuiltInVariable("gl_BaryCoordNoPerspSampleAMD", EbvBaryCoordNoPerspSample, symbolTable); + BuiltInVariable("gl_BaryCoordSmoothAMD", EbvBaryCoordSmooth, symbolTable); + BuiltInVariable("gl_BaryCoordSmoothCentroidAMD", EbvBaryCoordSmoothCentroid, symbolTable); + BuiltInVariable("gl_BaryCoordSmoothSampleAMD", EbvBaryCoordSmoothSample, symbolTable); + BuiltInVariable("gl_BaryCoordPullModelAMD", EbvBaryCoordPullModel, symbolTable); + } +#endif + + symbolTable.setVariableExtensions("gl_FragDepthEXT", 1, &E_GL_EXT_frag_depth); + + if (profile == EEsProfile) { + 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) { + 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); + symbolTable.setFunctionExtensions("imageAtomicAnd", 1, &E_GL_OES_shader_image_atomic); + symbolTable.setFunctionExtensions("imageAtomicOr", 1, &E_GL_OES_shader_image_atomic); + symbolTable.setFunctionExtensions("imageAtomicXor", 1, &E_GL_OES_shader_image_atomic); + symbolTable.setFunctionExtensions("imageAtomicExchange", 1, &E_GL_OES_shader_image_atomic); + symbolTable.setFunctionExtensions("imageAtomicCompSwap", 1, &E_GL_OES_shader_image_atomic); + } + + symbolTable.setVariableExtensions("gl_DeviceIndex", 1, &E_GL_EXT_device_group); + BuiltInVariable("gl_DeviceIndex", EbvDeviceIndex, symbolTable); + symbolTable.setVariableExtensions("gl_ViewIndex", 1, &E_GL_EXT_multiview); + BuiltInVariable("gl_ViewIndex", EbvViewIndex, symbolTable); + break; + + case EShLangCompute: + BuiltInVariable("gl_NumWorkGroups", EbvNumWorkGroups, symbolTable); + BuiltInVariable("gl_WorkGroupSize", EbvWorkGroupSize, symbolTable); + BuiltInVariable("gl_WorkGroupID", EbvWorkGroupId, symbolTable); + BuiltInVariable("gl_LocalInvocationID", EbvLocalInvocationId, symbolTable); + BuiltInVariable("gl_GlobalInvocationID", EbvGlobalInvocationId, symbolTable); + BuiltInVariable("gl_LocalInvocationIndex", EbvLocalInvocationIndex, symbolTable); + + if (profile != EEsProfile && version < 430) { + symbolTable.setVariableExtensions("gl_NumWorkGroups", 1, &E_GL_ARB_compute_shader); + symbolTable.setVariableExtensions("gl_WorkGroupSize", 1, &E_GL_ARB_compute_shader); + symbolTable.setVariableExtensions("gl_WorkGroupID", 1, &E_GL_ARB_compute_shader); + symbolTable.setVariableExtensions("gl_LocalInvocationID", 1, &E_GL_ARB_compute_shader); + symbolTable.setVariableExtensions("gl_GlobalInvocationID", 1, &E_GL_ARB_compute_shader); + symbolTable.setVariableExtensions("gl_LocalInvocationIndex", 1, &E_GL_ARB_compute_shader); + + symbolTable.setVariableExtensions("gl_MaxComputeWorkGroupCount", 1, &E_GL_ARB_compute_shader); + symbolTable.setVariableExtensions("gl_MaxComputeWorkGroupSize", 1, &E_GL_ARB_compute_shader); + symbolTable.setVariableExtensions("gl_MaxComputeUniformComponents", 1, &E_GL_ARB_compute_shader); + symbolTable.setVariableExtensions("gl_MaxComputeTextureImageUnits", 1, &E_GL_ARB_compute_shader); + symbolTable.setVariableExtensions("gl_MaxComputeImageUniforms", 1, &E_GL_ARB_compute_shader); + symbolTable.setVariableExtensions("gl_MaxComputeAtomicCounters", 1, &E_GL_ARB_compute_shader); + symbolTable.setVariableExtensions("gl_MaxComputeAtomicCounterBuffers", 1, &E_GL_ARB_compute_shader); + + symbolTable.setFunctionExtensions("barrier", 1, &E_GL_ARB_compute_shader); + symbolTable.setFunctionExtensions("memoryBarrierAtomicCounter", 1, &E_GL_ARB_compute_shader); + symbolTable.setFunctionExtensions("memoryBarrierBuffer", 1, &E_GL_ARB_compute_shader); + symbolTable.setFunctionExtensions("memoryBarrierImage", 1, &E_GL_ARB_compute_shader); + symbolTable.setFunctionExtensions("memoryBarrierShared", 1, &E_GL_ARB_compute_shader); + symbolTable.setFunctionExtensions("groupMemoryBarrier", 1, &E_GL_ARB_compute_shader); + } + + if ((profile != EEsProfile && version >= 140) || + (profile == EEsProfile && version >= 310)) { + symbolTable.setVariableExtensions("gl_DeviceIndex", 1, &E_GL_EXT_device_group); + BuiltInVariable("gl_DeviceIndex", EbvDeviceIndex, symbolTable); + symbolTable.setVariableExtensions("gl_ViewIndex", 1, &E_GL_EXT_multiview); + BuiltInVariable("gl_ViewIndex", EbvViewIndex, symbolTable); + } + + break; + + default: + assert(false && "Language not supported"); + break; + } + + // + // Next, identify which built-ins have a mapping to an operator. + // If PureOperatorBuiltins is false, those that are not identified as such are + // expected to be resolved through a library of functions, versus as + // operations. + // + symbolTable.relateToOperator("not", EOpVectorLogicalNot); + + symbolTable.relateToOperator("matrixCompMult", EOpMul); + // 120 and 150 are correct for both ES and desktop + if (version >= 120) { + symbolTable.relateToOperator("outerProduct", EOpOuterProduct); + symbolTable.relateToOperator("transpose", EOpTranspose); + if (version >= 150) { + symbolTable.relateToOperator("determinant", EOpDeterminant); + symbolTable.relateToOperator("inverse", EOpMatrixInverse); + } + } + + symbolTable.relateToOperator("mod", EOpMod); + symbolTable.relateToOperator("modf", EOpModf); + + symbolTable.relateToOperator("equal", EOpVectorEqual); + symbolTable.relateToOperator("notEqual", EOpVectorNotEqual); + symbolTable.relateToOperator("lessThan", EOpLessThan); + symbolTable.relateToOperator("greaterThan", EOpGreaterThan); + symbolTable.relateToOperator("lessThanEqual", EOpLessThanEqual); + symbolTable.relateToOperator("greaterThanEqual", EOpGreaterThanEqual); + + symbolTable.relateToOperator("radians", EOpRadians); + symbolTable.relateToOperator("degrees", EOpDegrees); + symbolTable.relateToOperator("sin", EOpSin); + symbolTable.relateToOperator("cos", EOpCos); + symbolTable.relateToOperator("tan", EOpTan); + symbolTable.relateToOperator("asin", EOpAsin); + symbolTable.relateToOperator("acos", EOpAcos); + symbolTable.relateToOperator("atan", EOpAtan); + symbolTable.relateToOperator("sinh", EOpSinh); + symbolTable.relateToOperator("cosh", EOpCosh); + symbolTable.relateToOperator("tanh", EOpTanh); + symbolTable.relateToOperator("asinh", EOpAsinh); + symbolTable.relateToOperator("acosh", EOpAcosh); + symbolTable.relateToOperator("atanh", EOpAtanh); + + symbolTable.relateToOperator("pow", EOpPow); + symbolTable.relateToOperator("exp2", EOpExp2); + symbolTable.relateToOperator("log", EOpLog); + symbolTable.relateToOperator("exp", EOpExp); + symbolTable.relateToOperator("log2", EOpLog2); + symbolTable.relateToOperator("sqrt", EOpSqrt); + symbolTable.relateToOperator("inversesqrt", EOpInverseSqrt); + + symbolTable.relateToOperator("abs", EOpAbs); + symbolTable.relateToOperator("sign", EOpSign); + symbolTable.relateToOperator("floor", EOpFloor); + symbolTable.relateToOperator("trunc", EOpTrunc); + symbolTable.relateToOperator("round", EOpRound); + symbolTable.relateToOperator("roundEven", EOpRoundEven); + symbolTable.relateToOperator("ceil", EOpCeil); + symbolTable.relateToOperator("fract", EOpFract); + symbolTable.relateToOperator("min", EOpMin); + symbolTable.relateToOperator("max", EOpMax); + symbolTable.relateToOperator("clamp", EOpClamp); + symbolTable.relateToOperator("mix", EOpMix); + symbolTable.relateToOperator("step", EOpStep); + symbolTable.relateToOperator("smoothstep", EOpSmoothStep); + + symbolTable.relateToOperator("isnan", EOpIsNan); + symbolTable.relateToOperator("isinf", EOpIsInf); + + symbolTable.relateToOperator("floatBitsToInt", EOpFloatBitsToInt); + symbolTable.relateToOperator("floatBitsToUint", EOpFloatBitsToUint); + symbolTable.relateToOperator("intBitsToFloat", EOpIntBitsToFloat); + symbolTable.relateToOperator("uintBitsToFloat", EOpUintBitsToFloat); + symbolTable.relateToOperator("doubleBitsToInt64", EOpDoubleBitsToInt64); + symbolTable.relateToOperator("doubleBitsToUint64", EOpDoubleBitsToUint64); + symbolTable.relateToOperator("int64BitsToDouble", EOpInt64BitsToDouble); + symbolTable.relateToOperator("uint64BitsToDouble", EOpUint64BitsToDouble); + + symbolTable.relateToOperator("packSnorm2x16", EOpPackSnorm2x16); + symbolTable.relateToOperator("unpackSnorm2x16", EOpUnpackSnorm2x16); + symbolTable.relateToOperator("packUnorm2x16", EOpPackUnorm2x16); + symbolTable.relateToOperator("unpackUnorm2x16", EOpUnpackUnorm2x16); + + symbolTable.relateToOperator("packSnorm4x8", EOpPackSnorm4x8); + symbolTable.relateToOperator("unpackSnorm4x8", EOpUnpackSnorm4x8); + symbolTable.relateToOperator("packUnorm4x8", EOpPackUnorm4x8); + symbolTable.relateToOperator("unpackUnorm4x8", EOpUnpackUnorm4x8); + + symbolTable.relateToOperator("packDouble2x32", EOpPackDouble2x32); + symbolTable.relateToOperator("unpackDouble2x32", EOpUnpackDouble2x32); + + symbolTable.relateToOperator("packHalf2x16", EOpPackHalf2x16); + symbolTable.relateToOperator("unpackHalf2x16", EOpUnpackHalf2x16); + + symbolTable.relateToOperator("packInt2x32", EOpPackInt2x32); + symbolTable.relateToOperator("unpackInt2x32", EOpUnpackInt2x32); + symbolTable.relateToOperator("packUint2x32", EOpPackUint2x32); + symbolTable.relateToOperator("unpackUint2x32", EOpUnpackUint2x32); + +#ifdef AMD_EXTENSIONS + symbolTable.relateToOperator("packFloat2x16", EOpPackFloat2x16); + symbolTable.relateToOperator("unpackFloat2x16", EOpUnpackFloat2x16); +#endif + + symbolTable.relateToOperator("length", EOpLength); + symbolTable.relateToOperator("distance", EOpDistance); + symbolTable.relateToOperator("dot", EOpDot); + symbolTable.relateToOperator("cross", EOpCross); + symbolTable.relateToOperator("normalize", EOpNormalize); + symbolTable.relateToOperator("faceforward", EOpFaceForward); + symbolTable.relateToOperator("reflect", EOpReflect); + symbolTable.relateToOperator("refract", EOpRefract); + + symbolTable.relateToOperator("any", EOpAny); + symbolTable.relateToOperator("all", EOpAll); + + symbolTable.relateToOperator("barrier", EOpBarrier); + symbolTable.relateToOperator("memoryBarrier", EOpMemoryBarrier); + symbolTable.relateToOperator("memoryBarrierAtomicCounter", EOpMemoryBarrierAtomicCounter); + symbolTable.relateToOperator("memoryBarrierBuffer", EOpMemoryBarrierBuffer); + symbolTable.relateToOperator("memoryBarrierImage", EOpMemoryBarrierImage); + + symbolTable.relateToOperator("atomicAdd", EOpAtomicAdd); + symbolTable.relateToOperator("atomicMin", EOpAtomicMin); + symbolTable.relateToOperator("atomicMax", EOpAtomicMax); + symbolTable.relateToOperator("atomicAnd", EOpAtomicAnd); + symbolTable.relateToOperator("atomicOr", EOpAtomicOr); + symbolTable.relateToOperator("atomicXor", EOpAtomicXor); + symbolTable.relateToOperator("atomicExchange", EOpAtomicExchange); + symbolTable.relateToOperator("atomicCompSwap", EOpAtomicCompSwap); + + symbolTable.relateToOperator("atomicCounterIncrement", EOpAtomicCounterIncrement); + symbolTable.relateToOperator("atomicCounterDecrement", EOpAtomicCounterDecrement); + symbolTable.relateToOperator("atomicCounter", EOpAtomicCounter); + + symbolTable.relateToOperator("fma", EOpFma); + symbolTable.relateToOperator("frexp", EOpFrexp); + symbolTable.relateToOperator("ldexp", EOpLdexp); + symbolTable.relateToOperator("uaddCarry", EOpAddCarry); + symbolTable.relateToOperator("usubBorrow", EOpSubBorrow); + symbolTable.relateToOperator("umulExtended", EOpUMulExtended); + symbolTable.relateToOperator("imulExtended", EOpIMulExtended); + symbolTable.relateToOperator("bitfieldExtract", EOpBitfieldExtract); + symbolTable.relateToOperator("bitfieldInsert", EOpBitfieldInsert); + symbolTable.relateToOperator("bitfieldReverse", EOpBitFieldReverse); + symbolTable.relateToOperator("bitCount", EOpBitCount); + symbolTable.relateToOperator("findLSB", EOpFindLSB); + symbolTable.relateToOperator("findMSB", EOpFindMSB); + + if (PureOperatorBuiltins) { + symbolTable.relateToOperator("imageSize", EOpImageQuerySize); + symbolTable.relateToOperator("imageSamples", EOpImageQuerySamples); + symbolTable.relateToOperator("imageLoad", EOpImageLoad); + symbolTable.relateToOperator("imageStore", EOpImageStore); + symbolTable.relateToOperator("imageAtomicAdd", EOpImageAtomicAdd); + symbolTable.relateToOperator("imageAtomicMin", EOpImageAtomicMin); + symbolTable.relateToOperator("imageAtomicMax", EOpImageAtomicMax); + symbolTable.relateToOperator("imageAtomicAnd", EOpImageAtomicAnd); + symbolTable.relateToOperator("imageAtomicOr", EOpImageAtomicOr); + symbolTable.relateToOperator("imageAtomicXor", EOpImageAtomicXor); + symbolTable.relateToOperator("imageAtomicExchange", EOpImageAtomicExchange); + symbolTable.relateToOperator("imageAtomicCompSwap", EOpImageAtomicCompSwap); + + symbolTable.relateToOperator("subpassLoad", EOpSubpassLoad); + symbolTable.relateToOperator("subpassLoadMS", EOpSubpassLoadMS); + + symbolTable.relateToOperator("textureSize", EOpTextureQuerySize); + symbolTable.relateToOperator("textureQueryLod", EOpTextureQueryLod); + symbolTable.relateToOperator("textureQueryLevels", EOpTextureQueryLevels); + symbolTable.relateToOperator("textureSamples", EOpTextureQuerySamples); + symbolTable.relateToOperator("texture", EOpTexture); + symbolTable.relateToOperator("textureProj", EOpTextureProj); + symbolTable.relateToOperator("textureLod", EOpTextureLod); + symbolTable.relateToOperator("textureOffset", EOpTextureOffset); + symbolTable.relateToOperator("texelFetch", EOpTextureFetch); + symbolTable.relateToOperator("texelFetchOffset", EOpTextureFetchOffset); + symbolTable.relateToOperator("textureProjOffset", EOpTextureProjOffset); + symbolTable.relateToOperator("textureLodOffset", EOpTextureLodOffset); + symbolTable.relateToOperator("textureProjLod", EOpTextureProjLod); + symbolTable.relateToOperator("textureProjLodOffset", EOpTextureProjLodOffset); + symbolTable.relateToOperator("textureGrad", EOpTextureGrad); + symbolTable.relateToOperator("textureGradOffset", EOpTextureGradOffset); + symbolTable.relateToOperator("textureProjGrad", EOpTextureProjGrad); + symbolTable.relateToOperator("textureProjGradOffset", EOpTextureProjGradOffset); + symbolTable.relateToOperator("textureGather", EOpTextureGather); + symbolTable.relateToOperator("textureGatherOffset", EOpTextureGatherOffset); + symbolTable.relateToOperator("textureGatherOffsets", EOpTextureGatherOffsets); + + symbolTable.relateToOperator("noise1", EOpNoise); + symbolTable.relateToOperator("noise2", EOpNoise); + symbolTable.relateToOperator("noise3", EOpNoise); + symbolTable.relateToOperator("noise4", EOpNoise); + + if (spvVersion.spv == 0 && (IncludeLegacy(version, profile, spvVersion) || + (profile == EEsProfile && version == 100))) { + symbolTable.relateToOperator("ftransform", EOpFtransform); + + symbolTable.relateToOperator("texture1D", EOpTexture); + symbolTable.relateToOperator("texture1DGradARB", EOpTextureGrad); + symbolTable.relateToOperator("texture1DProj", EOpTextureProj); + symbolTable.relateToOperator("texture1DProjGradARB", EOpTextureProjGrad); + symbolTable.relateToOperator("texture1DLod", EOpTextureLod); + symbolTable.relateToOperator("texture1DProjLod", EOpTextureProjLod); + + symbolTable.relateToOperator("texture2DRect", EOpTexture); + symbolTable.relateToOperator("texture2DRectProj", EOpTextureProj); + symbolTable.relateToOperator("texture2DRectGradARB", EOpTextureGrad); + symbolTable.relateToOperator("texture2DRectProjGradARB", EOpTextureProjGrad); + symbolTable.relateToOperator("shadow2DRect", EOpTexture); + symbolTable.relateToOperator("shadow2DRectProj", EOpTextureProj); + symbolTable.relateToOperator("shadow2DRectGradARB", EOpTextureGrad); + symbolTable.relateToOperator("shadow2DRectProjGradARB", EOpTextureProjGrad); + + symbolTable.relateToOperator("texture2D", EOpTexture); + symbolTable.relateToOperator("texture2DProj", EOpTextureProj); + symbolTable.relateToOperator("texture2DGradEXT", EOpTextureGrad); + symbolTable.relateToOperator("texture2DGradARB", EOpTextureGrad); + symbolTable.relateToOperator("texture2DProjGradEXT", EOpTextureProjGrad); + symbolTable.relateToOperator("texture2DProjGradARB", EOpTextureProjGrad); + symbolTable.relateToOperator("texture2DLod", EOpTextureLod); + symbolTable.relateToOperator("texture2DLodEXT", EOpTextureLod); + symbolTable.relateToOperator("texture2DProjLod", EOpTextureProjLod); + symbolTable.relateToOperator("texture2DProjLodEXT", EOpTextureProjLod); + + symbolTable.relateToOperator("texture3D", EOpTexture); + symbolTable.relateToOperator("texture3DGradARB", EOpTextureGrad); + symbolTable.relateToOperator("texture3DProj", EOpTextureProj); + symbolTable.relateToOperator("texture3DProjGradARB", EOpTextureProjGrad); + symbolTable.relateToOperator("texture3DLod", EOpTextureLod); + symbolTable.relateToOperator("texture3DProjLod", EOpTextureProjLod); + symbolTable.relateToOperator("textureCube", EOpTexture); + symbolTable.relateToOperator("textureCubeGradEXT", EOpTextureGrad); + symbolTable.relateToOperator("textureCubeGradARB", EOpTextureGrad); + symbolTable.relateToOperator("textureCubeLod", EOpTextureLod); + symbolTable.relateToOperator("textureCubeLodEXT", EOpTextureLod); + symbolTable.relateToOperator("shadow1D", EOpTexture); + symbolTable.relateToOperator("shadow1DGradARB", EOpTextureGrad); + symbolTable.relateToOperator("shadow2D", EOpTexture); + symbolTable.relateToOperator("shadow2DGradARB", EOpTextureGrad); + symbolTable.relateToOperator("shadow1DProj", EOpTextureProj); + symbolTable.relateToOperator("shadow2DProj", EOpTextureProj); + symbolTable.relateToOperator("shadow1DProjGradARB", EOpTextureProjGrad); + symbolTable.relateToOperator("shadow2DProjGradARB", EOpTextureProjGrad); + symbolTable.relateToOperator("shadow1DLod", EOpTextureLod); + symbolTable.relateToOperator("shadow2DLod", EOpTextureLod); + symbolTable.relateToOperator("shadow1DProjLod", EOpTextureProjLod); + symbolTable.relateToOperator("shadow2DProjLod", EOpTextureProjLod); + } + + if (profile != EEsProfile) { + symbolTable.relateToOperator("sparseTextureARB", EOpSparseTexture); + symbolTable.relateToOperator("sparseTextureLodARB", EOpSparseTextureLod); + symbolTable.relateToOperator("sparseTextureOffsetARB", EOpSparseTextureOffset); + symbolTable.relateToOperator("sparseTexelFetchARB", EOpSparseTextureFetch); + symbolTable.relateToOperator("sparseTexelFetchOffsetARB", EOpSparseTextureFetchOffset); + symbolTable.relateToOperator("sparseTextureLodOffsetARB", EOpSparseTextureLodOffset); + symbolTable.relateToOperator("sparseTextureGradARB", EOpSparseTextureGrad); + symbolTable.relateToOperator("sparseTextureGradOffsetARB", EOpSparseTextureGradOffset); + symbolTable.relateToOperator("sparseTextureGatherARB", EOpSparseTextureGather); + symbolTable.relateToOperator("sparseTextureGatherOffsetARB", EOpSparseTextureGatherOffset); + symbolTable.relateToOperator("sparseTextureGatherOffsetsARB", EOpSparseTextureGatherOffsets); + symbolTable.relateToOperator("sparseImageLoadARB", EOpSparseImageLoad); + symbolTable.relateToOperator("sparseTexelsResidentARB", EOpSparseTexelsResident); + + symbolTable.relateToOperator("sparseTextureClampARB", EOpSparseTextureClamp); + symbolTable.relateToOperator("sparseTextureOffsetClampARB", EOpSparseTextureOffsetClamp); + symbolTable.relateToOperator("sparseTextureGradClampARB", EOpSparseTextureGradClamp); + symbolTable.relateToOperator("sparseTextureGradOffsetClampARB", EOpSparseTextureGradOffsetClamp); + symbolTable.relateToOperator("textureClampARB", EOpTextureClamp); + symbolTable.relateToOperator("textureOffsetClampARB", EOpTextureOffsetClamp); + symbolTable.relateToOperator("textureGradClampARB", EOpTextureGradClamp); + symbolTable.relateToOperator("textureGradOffsetClampARB", EOpTextureGradOffsetClamp); + + symbolTable.relateToOperator("ballotARB", EOpBallot); + symbolTable.relateToOperator("readInvocationARB", EOpReadInvocation); + symbolTable.relateToOperator("readFirstInvocationARB", EOpReadFirstInvocation); + + symbolTable.relateToOperator("anyInvocationARB", EOpAnyInvocation); + symbolTable.relateToOperator("allInvocationsARB", EOpAllInvocations); + symbolTable.relateToOperator("allInvocationsEqualARB", EOpAllInvocationsEqual); + +#ifdef AMD_EXTENSIONS + symbolTable.relateToOperator("minInvocationsAMD", EOpMinInvocations); + symbolTable.relateToOperator("maxInvocationsAMD", EOpMaxInvocations); + symbolTable.relateToOperator("addInvocationsAMD", EOpAddInvocations); + symbolTable.relateToOperator("minInvocationsNonUniformAMD", EOpMinInvocationsNonUniform); + symbolTable.relateToOperator("maxInvocationsNonUniformAMD", EOpMaxInvocationsNonUniform); + symbolTable.relateToOperator("addInvocationsNonUniformAMD", EOpAddInvocationsNonUniform); + symbolTable.relateToOperator("minInvocationsInclusiveScanAMD", EOpMinInvocationsInclusiveScan); + symbolTable.relateToOperator("maxInvocationsInclusiveScanAMD", EOpMaxInvocationsInclusiveScan); + symbolTable.relateToOperator("addInvocationsInclusiveScanAMD", EOpAddInvocationsInclusiveScan); + symbolTable.relateToOperator("minInvocationsInclusiveScanNonUniformAMD", EOpMinInvocationsInclusiveScanNonUniform); + symbolTable.relateToOperator("maxInvocationsInclusiveScanNonUniformAMD", EOpMaxInvocationsInclusiveScanNonUniform); + symbolTable.relateToOperator("addInvocationsInclusiveScanNonUniformAMD", EOpAddInvocationsInclusiveScanNonUniform); + symbolTable.relateToOperator("minInvocationsExclusiveScanAMD", EOpMinInvocationsExclusiveScan); + symbolTable.relateToOperator("maxInvocationsExclusiveScanAMD", EOpMaxInvocationsExclusiveScan); + symbolTable.relateToOperator("addInvocationsExclusiveScanAMD", EOpAddInvocationsExclusiveScan); + symbolTable.relateToOperator("minInvocationsExclusiveScanNonUniformAMD", EOpMinInvocationsExclusiveScanNonUniform); + symbolTable.relateToOperator("maxInvocationsExclusiveScanNonUniformAMD", EOpMaxInvocationsExclusiveScanNonUniform); + symbolTable.relateToOperator("addInvocationsExclusiveScanNonUniformAMD", EOpAddInvocationsExclusiveScanNonUniform); + symbolTable.relateToOperator("swizzleInvocationsAMD", EOpSwizzleInvocations); + symbolTable.relateToOperator("swizzleInvocationsMaskedAMD", EOpSwizzleInvocationsMasked); + symbolTable.relateToOperator("writeInvocationAMD", EOpWriteInvocation); + symbolTable.relateToOperator("mbcntAMD", EOpMbcnt); + + symbolTable.relateToOperator("min3", EOpMin3); + symbolTable.relateToOperator("max3", EOpMax3); + symbolTable.relateToOperator("mid3", EOpMid3); + + symbolTable.relateToOperator("cubeFaceIndexAMD", EOpCubeFaceIndex); + symbolTable.relateToOperator("cubeFaceCoordAMD", EOpCubeFaceCoord); + symbolTable.relateToOperator("timeAMD", EOpTime); +#endif + } + } + + switch(language) { + case EShLangVertex: + break; + + case EShLangTessControl: + case EShLangTessEvaluation: + break; + + case EShLangGeometry: + symbolTable.relateToOperator("EmitStreamVertex", EOpEmitStreamVertex); + symbolTable.relateToOperator("EndStreamPrimitive", EOpEndStreamPrimitive); + symbolTable.relateToOperator("EmitVertex", EOpEmitVertex); + symbolTable.relateToOperator("EndPrimitive", EOpEndPrimitive); + break; + + case EShLangFragment: + symbolTable.relateToOperator("dFdx", EOpDPdx); + symbolTable.relateToOperator("dFdy", EOpDPdy); + symbolTable.relateToOperator("fwidth", EOpFwidth); + if (profile != EEsProfile && version >= 400) { + symbolTable.relateToOperator("dFdxFine", EOpDPdxFine); + symbolTable.relateToOperator("dFdyFine", EOpDPdyFine); + symbolTable.relateToOperator("fwidthFine", EOpFwidthFine); + symbolTable.relateToOperator("dFdxCoarse", EOpDPdxCoarse); + symbolTable.relateToOperator("dFdyCoarse", EOpDPdyCoarse); + symbolTable.relateToOperator("fwidthCoarse", EOpFwidthCoarse); + } + symbolTable.relateToOperator("interpolateAtCentroid", EOpInterpolateAtCentroid); + symbolTable.relateToOperator("interpolateAtSample", EOpInterpolateAtSample); + symbolTable.relateToOperator("interpolateAtOffset", EOpInterpolateAtOffset); + +#ifdef AMD_EXTENSIONS + if (profile != EEsProfile) + symbolTable.relateToOperator("interpolateAtVertexAMD", EOpInterpolateAtVertex); + break; +#endif + + case EShLangCompute: + symbolTable.relateToOperator("memoryBarrierShared", EOpMemoryBarrierShared); + symbolTable.relateToOperator("groupMemoryBarrier", EOpGroupMemoryBarrier); + break; + + default: + assert(false && "Language not supported"); + } +} + +// +// Add context-dependent (resource-specific) built-ins not handled by the above. These +// would be ones that need to be programmatically added because they cannot +// be added by simple text strings. For these, also +// 1) Map built-in functions to operators, for those that will turn into an operation node +// instead of remaining a function call. +// 2) Tag extension-related symbols added to their base version with their extensions, so +// that if an early version has the extension turned off, there is an error reported on use. +// +void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable, const TBuiltInResource &resources) +{ + if (profile != EEsProfile && version >= 430 && version < 440) { + symbolTable.setVariableExtensions("gl_MaxTransformFeedbackBuffers", 1, &E_GL_ARB_enhanced_layouts); + symbolTable.setVariableExtensions("gl_MaxTransformFeedbackInterleavedComponents", 1, &E_GL_ARB_enhanced_layouts); + } + if (profile != EEsProfile && version >= 130 && version < 420) { + symbolTable.setVariableExtensions("gl_MinProgramTexelOffset", 1, &E_GL_ARB_shading_language_420pack); + symbolTable.setVariableExtensions("gl_MaxProgramTexelOffset", 1, &E_GL_ARB_shading_language_420pack); + } + if (profile != EEsProfile && version >= 150 && version < 410) + symbolTable.setVariableExtensions("gl_MaxViewports", 1, &E_GL_ARB_viewport_array); + + switch(language) { + case EShLangFragment: + // Set up gl_FragData based on current array size. + if (version == 100 || IncludeLegacy(version, profile, spvVersion) || (! ForwardCompatibility && profile != EEsProfile && version < 420)) { + TPrecisionQualifier pq = profile == EEsProfile ? EpqMedium : EpqNone; + TType fragData(EbtFloat, EvqFragColor, pq, 4); + TArraySizes& arraySizes = *new TArraySizes; + arraySizes.addInnerSize(resources.maxDrawBuffers); + fragData.newArraySizes(arraySizes); + symbolTable.insert(*new TVariable(NewPoolTString("gl_FragData"), fragData)); + SpecialQualifier("gl_FragData", EvqFragColor, EbvFragData, symbolTable); + } + break; + + case EShLangTessControl: + case EShLangTessEvaluation: + // Because of the context-dependent array size (gl_MaxPatchVertices), + // these variables were added later than the others and need to be mapped now. + + // standard members + BuiltInVariable("gl_in", "gl_Position", EbvPosition, symbolTable); + BuiltInVariable("gl_in", "gl_PointSize", EbvPointSize, symbolTable); + BuiltInVariable("gl_in", "gl_ClipDistance", EbvClipDistance, symbolTable); + BuiltInVariable("gl_in", "gl_CullDistance", EbvCullDistance, symbolTable); + + // compatibility members + BuiltInVariable("gl_in", "gl_ClipVertex", EbvClipVertex, symbolTable); + BuiltInVariable("gl_in", "gl_FrontColor", EbvFrontColor, symbolTable); + BuiltInVariable("gl_in", "gl_BackColor", EbvBackColor, symbolTable); + BuiltInVariable("gl_in", "gl_FrontSecondaryColor", EbvFrontSecondaryColor, symbolTable); + BuiltInVariable("gl_in", "gl_BackSecondaryColor", EbvBackSecondaryColor, symbolTable); + BuiltInVariable("gl_in", "gl_TexCoord", EbvTexCoord, symbolTable); + BuiltInVariable("gl_in", "gl_FogFragCoord", EbvFogFragCoord, symbolTable); + break; + + default: + break; + } +} + +} // end namespace glslang diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Initialize.h b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Initialize.h new file mode 100644 index 0000000..45b4395 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Initialize.h @@ -0,0 +1,112 @@ +// +// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +// Copyright (C) 2013-2016 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. +// + +#ifndef _INITIALIZE_INCLUDED_ +#define _INITIALIZE_INCLUDED_ + +#include "../Include/ResourceLimits.h" +#include "../Include/Common.h" +#include "../Include/ShHandle.h" +#include "SymbolTable.h" +#include "Versions.h" + +namespace glslang { + +// +// This is made to hold parseable strings for almost all the built-in +// functions and variables for one specific combination of version +// and profile. (Some still need to be added programmatically.) +// This is a base class for language-specific derivations, which +// can be used for language independent builtins. +// +// The strings are organized by +// commonBuiltins: intersection of all stages' built-ins, processed just once +// stageBuiltins[]: anything a stage needs that's not in commonBuiltins +// +class TBuiltInParseables { +public: + POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator()) + TBuiltInParseables(); + virtual ~TBuiltInParseables(); + virtual void initialize(int version, EProfile, const SpvVersion& spvVersion) = 0; + virtual void initialize(const TBuiltInResource& resources, int version, EProfile, const SpvVersion& spvVersion, EShLanguage) = 0; + virtual const TString& getCommonString() const { return commonBuiltins; } + virtual const TString& getStageString(EShLanguage language) const { return stageBuiltins[language]; } + + virtual void identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable) = 0; + + virtual void identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable, const TBuiltInResource &resources) = 0; + +protected: + TString commonBuiltins; + TString stageBuiltins[EShLangCount]; +}; + +// +// This is a GLSL specific derivation of TBuiltInParseables. To present a stable +// interface and match other similar code, it is called TBuiltIns, rather +// than TBuiltInParseablesGlsl. +// +class TBuiltIns : public TBuiltInParseables { +public: + POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator()) + TBuiltIns(); + virtual ~TBuiltIns(); + void initialize(int version, EProfile, const SpvVersion& spvVersion); + void initialize(const TBuiltInResource& resources, int version, EProfile, const SpvVersion& spvVersion, EShLanguage); + + void identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable); + + void identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable, const TBuiltInResource &resources); + +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); + + // Helpers for making textual representations of the permutations + // of texturing/imaging functions. + const char* postfixes[5]; + const char* prefixes[EbtNumTypes]; + int dimMap[EsdNumDims]; +}; + +} // end namespace glslang + +#endif // _INITIALIZE_INCLUDED_ diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/IntermTraverse.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/IntermTraverse.cpp new file mode 100644 index 0000000..f46010b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/IntermTraverse.cpp @@ -0,0 +1,302 @@ +// +// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +// Copyright (C) 2013 LunarG, Inc. +// Copyright (c) 2002-2010 The ANGLE Project Authors. +// +// 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. +// + +#include "../Include/intermediate.h" + +namespace glslang { + +// +// Traverse the intermediate representation tree, and +// call a node type specific function for each node. +// Done recursively through the member function Traverse(). +// Node types can be skipped if their function to call is 0, +// but their subtree will still be traversed. +// Nodes with children can have their whole subtree skipped +// if preVisit is turned on and the type specific function +// returns false. +// +// preVisit, postVisit, and rightToLeft control what order +// nodes are visited in. +// + +// +// Traversal functions for terminals are straightforward.... +// +void TIntermMethod::traverse(TIntermTraverser*) +{ + // Tree should always resolve all methods as a non-method. +} + +void TIntermSymbol::traverse(TIntermTraverser *it) +{ + it->visitSymbol(this); +} + +void TIntermConstantUnion::traverse(TIntermTraverser *it) +{ + it->visitConstantUnion(this); +} + +// +// Traverse a binary node. +// +void TIntermBinary::traverse(TIntermTraverser *it) +{ + bool visit = true; + + // + // visit the node before children if pre-visiting. + // + if (it->preVisit) + visit = it->visitBinary(EvPreVisit, this); + + // + // Visit the children, in the right order. + // + if (visit) { + it->incrementDepth(this); + + if (it->rightToLeft) { + if (right) + right->traverse(it); + + if (it->inVisit) + visit = it->visitBinary(EvInVisit, this); + + if (visit && left) + left->traverse(it); + } else { + if (left) + left->traverse(it); + + if (it->inVisit) + visit = it->visitBinary(EvInVisit, this); + + if (visit && right) + right->traverse(it); + } + + it->decrementDepth(); + } + + // + // Visit the node after the children, if requested and the traversal + // hasn't been canceled yet. + // + if (visit && it->postVisit) + it->visitBinary(EvPostVisit, this); +} + +// +// Traverse a unary node. Same comments in binary node apply here. +// +void TIntermUnary::traverse(TIntermTraverser *it) +{ + bool visit = true; + + if (it->preVisit) + visit = it->visitUnary(EvPreVisit, this); + + if (visit) { + it->incrementDepth(this); + operand->traverse(it); + it->decrementDepth(); + } + + if (visit && it->postVisit) + it->visitUnary(EvPostVisit, this); +} + +// +// Traverse an aggregate node. Same comments in binary node apply here. +// +void TIntermAggregate::traverse(TIntermTraverser *it) +{ + bool visit = true; + + if (it->preVisit) + visit = it->visitAggregate(EvPreVisit, this); + + if (visit) { + it->incrementDepth(this); + + if (it->rightToLeft) { + for (TIntermSequence::reverse_iterator sit = sequence.rbegin(); sit != sequence.rend(); sit++) { + (*sit)->traverse(it); + + if (visit && it->inVisit) { + if (*sit != sequence.front()) + visit = it->visitAggregate(EvInVisit, this); + } + } + } else { + for (TIntermSequence::iterator sit = sequence.begin(); sit != sequence.end(); sit++) { + (*sit)->traverse(it); + + if (visit && it->inVisit) { + if (*sit != sequence.back()) + visit = it->visitAggregate(EvInVisit, this); + } + } + } + + it->decrementDepth(); + } + + if (visit && it->postVisit) + it->visitAggregate(EvPostVisit, this); +} + +// +// Traverse a selection node. Same comments in binary node apply here. +// +void TIntermSelection::traverse(TIntermTraverser *it) +{ + bool visit = true; + + if (it->preVisit) + visit = it->visitSelection(EvPreVisit, this); + + if (visit) { + it->incrementDepth(this); + if (it->rightToLeft) { + if (falseBlock) + falseBlock->traverse(it); + if (trueBlock) + trueBlock->traverse(it); + condition->traverse(it); + } else { + condition->traverse(it); + if (trueBlock) + trueBlock->traverse(it); + if (falseBlock) + falseBlock->traverse(it); + } + it->decrementDepth(); + } + + if (visit && it->postVisit) + it->visitSelection(EvPostVisit, this); +} + +// +// Traverse a loop node. Same comments in binary node apply here. +// +void TIntermLoop::traverse(TIntermTraverser *it) +{ + bool visit = true; + + if (it->preVisit) + visit = it->visitLoop(EvPreVisit, this); + + if (visit) { + it->incrementDepth(this); + + if (it->rightToLeft) { + if (terminal) + terminal->traverse(it); + + if (body) + body->traverse(it); + + if (test) + test->traverse(it); + } else { + if (test) + test->traverse(it); + + if (body) + body->traverse(it); + + if (terminal) + terminal->traverse(it); + } + + it->decrementDepth(); + } + + if (visit && it->postVisit) + it->visitLoop(EvPostVisit, this); +} + +// +// Traverse a branch node. Same comments in binary node apply here. +// +void TIntermBranch::traverse(TIntermTraverser *it) +{ + bool visit = true; + + if (it->preVisit) + visit = it->visitBranch(EvPreVisit, this); + + if (visit && expression) { + it->incrementDepth(this); + expression->traverse(it); + it->decrementDepth(); + } + + if (visit && it->postVisit) + it->visitBranch(EvPostVisit, this); +} + +// +// Traverse a switch node. +// +void TIntermSwitch::traverse(TIntermTraverser* it) +{ + bool visit = true; + + if (it->preVisit) + visit = it->visitSwitch(EvPreVisit, this); + + if (visit) { + it->incrementDepth(this); + if (it->rightToLeft) { + body->traverse(it); + condition->traverse(it); + } else { + condition->traverse(it); + body->traverse(it); + } + it->decrementDepth(); + } + + if (visit && it->postVisit) + it->visitSwitch(EvPostVisit, this); +} + +} // end namespace glslang diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Intermediate.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Intermediate.cpp new file mode 100644 index 0000000..8abd9e3 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Intermediate.cpp @@ -0,0 +1,2670 @@ +// +// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +// Copyright (C) 2012-2015 LunarG, Inc. +// Copyright (C) 2015-2016 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. +// + +// +// Build the intermediate representation. +// + +#include "localintermediate.h" +#include "RemoveTree.h" +#include "SymbolTable.h" +#include "propagateNoContraction.h" + +#include +#include + +namespace glslang { + +//////////////////////////////////////////////////////////////////////////// +// +// First set of functions are to help build the intermediate representation. +// These functions are not member functions of the nodes. +// They are called from parser productions. +// +///////////////////////////////////////////////////////////////////////////// + +// +// Add a terminal node for an identifier in an expression. +// +// Returns the added node. +// + +TIntermSymbol* TIntermediate::addSymbol(int id, const TString& name, const TType& type, const TConstUnionArray& constArray, + TIntermTyped* constSubtree, const TSourceLoc& loc) +{ + TIntermSymbol* node = new TIntermSymbol(id, name, type); + node->setLoc(loc); + node->setConstArray(constArray); + node->setConstSubtree(constSubtree); + + return node; +} + +TIntermSymbol* TIntermediate::addSymbol(const TIntermSymbol& intermSymbol) +{ + return addSymbol(intermSymbol.getId(), + intermSymbol.getName(), + intermSymbol.getType(), + intermSymbol.getConstArray(), + intermSymbol.getConstSubtree(), + intermSymbol.getLoc()); +} + +TIntermSymbol* TIntermediate::addSymbol(const TVariable& variable) +{ + glslang::TSourceLoc loc; // just a null location + loc.init(); + + return addSymbol(variable, loc); +} + +TIntermSymbol* TIntermediate::addSymbol(const TVariable& variable, const TSourceLoc& loc) +{ + return addSymbol(variable.getUniqueId(), variable.getName(), variable.getType(), variable.getConstArray(), variable.getConstSubtree(), loc); +} + +TIntermSymbol* TIntermediate::addSymbol(const TType& type, const TSourceLoc& loc) +{ + TConstUnionArray unionArray; // just a null constant + + return addSymbol(0, "", type, unionArray, nullptr, loc); +} + +// +// Connect two nodes with a new parent that does a binary operation on the nodes. +// +// Returns the added node. +// +// Returns nullptr if the working conversions and promotions could not be found. +// +TIntermTyped* TIntermediate::addBinaryMath(TOperator op, TIntermTyped* left, TIntermTyped* right, TSourceLoc loc) +{ + // No operations work on blocks + if (left->getType().getBasicType() == EbtBlock || right->getType().getBasicType() == EbtBlock) + return nullptr; + + // Try converting the children's base types to compatible types. + TIntermTyped* child = addConversion(op, left->getType(), right); + if (child) + right = child; + else { + child = addConversion(op, right->getType(), left); + if (child) + left = child; + else + return nullptr; + } + + // Convert the children's type shape to be compatible. + right = addShapeConversion(op, left->getType(), right); + left = addShapeConversion(op, right->getType(), left); + + // + // Need a new node holding things together. Make + // one and promote it to the right type. + // + TIntermBinary* node = addBinaryNode(op, left, right, loc); + if (! promote(node)) + return nullptr; + + node->updatePrecision(); + + // + // 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(); + if (leftTempConstant && rightTempConstant) { + TIntermTyped* folded = leftTempConstant->fold(node->getOp(), rightTempConstant); + if (folded) + return folded; + } + + // 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)) + node->getWritableType().getQualifier().makeSpecConstant(); + + return node; +} + +// +// Low level: add binary node (no promotions or other argument modifications) +// +TIntermBinary* TIntermediate::addBinaryNode(TOperator op, TIntermTyped* left, TIntermTyped* right, TSourceLoc loc) const +{ + // build the node + TIntermBinary* node = new TIntermBinary(op); + if (loc.line == 0) + loc = left->getLoc(); + node->setLoc(loc); + node->setLeft(left); + node->setRight(right); + + return node; +} + +// +// like non-type form, but sets node's type. +// +TIntermBinary* TIntermediate::addBinaryNode(TOperator op, TIntermTyped* left, TIntermTyped* right, TSourceLoc loc, const TType& type) const +{ + TIntermBinary* node = addBinaryNode(op, left, right, loc); + node->setType(type); + return node; +} + +// +// Low level: add unary node (no promotions or other argument modifications) +// +TIntermUnary* TIntermediate::addUnaryNode(TOperator op, TIntermTyped* child, TSourceLoc loc) const +{ + TIntermUnary* node = new TIntermUnary(op); + if (loc.line == 0) + loc = child->getLoc(); + node->setLoc(loc); + node->setOperand(child); + + return node; +} + +// +// like non-type form, but sets node's type. +// +TIntermUnary* TIntermediate::addUnaryNode(TOperator op, TIntermTyped* child, TSourceLoc loc, const TType& type) const +{ + TIntermUnary* node = addUnaryNode(op, child, loc); + node->setType(type); + return node; +} + +// +// Connect two nodes through an assignment. +// +// Returns the added node. +// +// Returns nullptr if the 'right' type could not be converted to match the 'left' type, +// or the resulting operation cannot be properly promoted. +// +TIntermTyped* TIntermediate::addAssign(TOperator op, TIntermTyped* left, TIntermTyped* right, TSourceLoc loc) +{ + // No block assignment + if (left->getType().getBasicType() == EbtBlock || right->getType().getBasicType() == EbtBlock) + return nullptr; + + // + // Like adding binary math, except the conversion can only go + // from right to left. + // + + // convert base types, nullptr return means not possible + right = addConversion(op, left->getType(), right); + if (right == nullptr) + return nullptr; + + // convert shape + right = addShapeConversion(op, left->getType(), right); + + // build the node + TIntermBinary* node = addBinaryNode(op, left, right, loc); + + if (! promote(node)) + return nullptr; + + node->updatePrecision(); + + return node; +} + +// +// Connect two nodes through an index operator, where the left node is the base +// of an array or struct, and the right node is a direct or indirect offset. +// +// Returns the added node. +// The caller should set the type of the returned node. +// +TIntermTyped* TIntermediate::addIndex(TOperator op, TIntermTyped* base, TIntermTyped* index, TSourceLoc loc) +{ + // caller should set the type + return addBinaryNode(op, base, index, loc); +} + +// +// Add one node as the parent of another that it operates on. +// +// Returns the added node. +// +TIntermTyped* TIntermediate::addUnaryMath(TOperator op, TIntermTyped* child, TSourceLoc loc) +{ + if (child == 0) + return nullptr; + + if (child->getType().getBasicType() == EbtBlock) + return nullptr; + + switch (op) { + case EOpLogicalNot: + if (source == EShSourceHlsl) { + break; // HLSL can promote logical not + } + + if (child->getType().getBasicType() != EbtBool || child->getType().isMatrix() || child->getType().isArray() || child->getType().isVector()) { + return nullptr; + } + break; + + case EOpPostIncrement: + case EOpPreIncrement: + case EOpPostDecrement: + case EOpPreDecrement: + case EOpNegative: + if (child->getType().getBasicType() == EbtStruct || child->getType().isArray()) + return nullptr; + default: break; // some compilers want this + } + + // + // Do we need to promote the operand? + // + TBasicType newType = EbtVoid; + switch (op) { + case EOpConstructInt: newType = EbtInt; break; + case EOpConstructUint: newType = EbtUint; break; + case EOpConstructInt64: newType = EbtInt64; break; + case EOpConstructUint64: newType = EbtUint64; break; + case EOpConstructBool: newType = EbtBool; break; + case EOpConstructFloat: newType = EbtFloat; break; + case EOpConstructDouble: newType = EbtDouble; break; +#ifdef AMD_EXTENSIONS + case EOpConstructFloat16: newType = EbtFloat16; break; +#endif + default: break; // some compilers want this + } + + if (newType != EbtVoid) { + child = addConversion(op, TType(newType, EvqTemporary, child->getVectorSize(), + child->getMatrixCols(), + child->getMatrixRows(), + child->isVector()), + child); + if (child == nullptr) + return nullptr; + } + + // + // For constructors, we are now done, it was all in the conversion. + // TODO: but, did this bypass constant folding? + // + switch (op) { + case EOpConstructInt: + case EOpConstructUint: + case EOpConstructInt64: + case EOpConstructUint64: + case EOpConstructBool: + case EOpConstructFloat: + case EOpConstructDouble: +#ifdef AMD_EXTENSIONS + case EOpConstructFloat16: +#endif + return child; + default: break; // some compilers want this + } + + // + // Make a new node for the operator. + // + TIntermUnary* node = addUnaryNode(op, child, loc); + + if (! promote(node)) + return nullptr; + + node->updatePrecision(); + + // If it's a (non-specialization) constant, it must be folded. + if (child->getAsConstantUnion()) + return child->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)) + node->getWritableType().getQualifier().makeSpecConstant(); + + return node; +} + +TIntermTyped* TIntermediate::addBuiltInFunctionCall(const TSourceLoc& loc, TOperator op, bool unary, TIntermNode* childNode, const TType& returnType) +{ + if (unary) { + // + // Treat it like a unary operator. + // addUnaryMath() should get the type correct on its own; + // including constness (which would differ from the prototype). + // + TIntermTyped* child = childNode->getAsTyped(); + if (child == nullptr) + return nullptr; + + if (child->getAsConstantUnion()) { + TIntermTyped* folded = child->getAsConstantUnion()->fold(op, returnType); + if (folded) + return folded; + } + + return addUnaryNode(op, child, child->getLoc(), returnType); + } else { + // setAggregateOperater() calls fold() for constant folding + TIntermTyped* node = setAggregateOperator(childNode, op, returnType, loc); + + return node; + } +} + +// +// This is the safe way to change the operator on an aggregate, as it +// does lots of error checking and fixing. Especially for establishing +// a function call's operation on it's set of parameters. Sequences +// of instructions are also aggregates, but they just directly set +// their operator to EOpSequence. +// +// Returns an aggregate node, which could be the one passed in if +// it was already an aggregate. +// +TIntermTyped* TIntermediate::setAggregateOperator(TIntermNode* node, TOperator op, const TType& type, TSourceLoc loc) +{ + TIntermAggregate* aggNode; + + // + // Make sure we have an aggregate. If not turn it into one. + // + if (node) { + aggNode = node->getAsAggregate(); + if (aggNode == nullptr || aggNode->getOp() != EOpNull) { + // + // Make an aggregate containing this node. + // + aggNode = new TIntermAggregate(); + aggNode->getSequence().push_back(node); + if (loc.line == 0) + loc = node->getLoc(); + } + } else + aggNode = new TIntermAggregate(); + + // + // Set the operator. + // + aggNode->setOperator(op); + if (loc.line != 0) + aggNode->setLoc(loc); + + aggNode->setType(type); + + return fold(aggNode); +} + +// +// Convert the node's type to the given type, as allowed by the operation involved: 'op'. +// For implicit conversions, 'op' is not the requested conversion, it is the explicit +// operation requiring the implicit conversion. +// +// Returns a node representing the conversion, which could be the same +// node passed in if no conversion was needed. +// +// Generally, this is focused on basic type conversion, not shape conversion. +// See addShapeConversion(). +// +// Return nullptr if a conversion can't be done. +// +TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TIntermTyped* node) const +{ + // + // Does the base type even allow the operation? + // + switch (node->getBasicType()) { + case EbtVoid: + return nullptr; + case EbtAtomicUint: + case EbtSampler: + // opaque types can be passed to functions + if (op == EOpFunction) + break; + + // HLSL can assign samplers directly (no constructor) + if (source == EShSourceHlsl && node->getBasicType() == EbtSampler) + break; + + // samplers can get assigned via a sampler constructor + // (well, not yet, but code in the rest of this function is ready for it) + if (node->getBasicType() == EbtSampler && op == EOpAssign && + node->getAsOperator() != nullptr && node->getAsOperator()->getOp() == EOpConstructTextureSampler) + break; + + // otherwise, opaque types can't even be operated on, let alone converted + return nullptr; + default: + break; + } + + // Otherwise, if types are identical, no problem + if (type == node->getType()) + return node; + + // If one's a structure, then no conversions. + if (type.isStruct() || node->isStruct()) + return nullptr; + + // If one's an array, then no conversions. + if (type.isArray() || node->getType().isArray()) + return nullptr; + + // Note: callers are responsible for other aspects of shape, + // like vector and matrix sizes. + + TBasicType promoteTo; + + switch (op) { + // + // Explicit conversions (unary operations) + // + case EOpConstructBool: + promoteTo = EbtBool; + break; + case EOpConstructFloat: + promoteTo = EbtFloat; + break; + case EOpConstructDouble: + promoteTo = EbtDouble; + break; +#ifdef AMD_EXTENSIONS + case EOpConstructFloat16: + promoteTo = EbtFloat16; + break; +#endif + case EOpConstructInt: + promoteTo = EbtInt; + break; + case EOpConstructUint: + promoteTo = EbtUint; + break; + case EOpConstructInt64: + promoteTo = EbtInt64; + break; + case EOpConstructUint64: + promoteTo = EbtUint64; + break; + + // + // List all the binary ops that can implicitly convert one operand to the other's type; + // This implements the 'policy' for implicit type conversion. + // + case EOpLessThan: + case EOpGreaterThan: + case EOpLessThanEqual: + case EOpGreaterThanEqual: + case EOpEqual: + case EOpNotEqual: + + case EOpAdd: + case EOpSub: + case EOpMul: + case EOpDiv: + case EOpMod: + + case EOpVectorTimesScalar: + case EOpVectorTimesMatrix: + case EOpMatrixTimesVector: + case EOpMatrixTimesScalar: + + case EOpAnd: + case EOpInclusiveOr: + case EOpExclusiveOr: + case EOpAndAssign: + case EOpInclusiveOrAssign: + case EOpExclusiveOrAssign: + case EOpLogicalNot: + case EOpLogicalAnd: + case EOpLogicalOr: + case EOpLogicalXor: + + case EOpFunctionCall: + case EOpReturn: + case EOpAssign: + case EOpAddAssign: + case EOpSubAssign: + case EOpMulAssign: + case EOpVectorTimesScalarAssign: + case EOpMatrixTimesScalarAssign: + case EOpDivAssign: + case EOpModAssign: + + case EOpAtan: + case EOpClamp: + case EOpCross: + case EOpDistance: + case EOpDot: + case EOpDst: + case EOpFaceForward: + case EOpFma: + case EOpFrexp: + case EOpLdexp: + case EOpMix: + case EOpLit: + case EOpMax: + case EOpMin: + case EOpModf: + case EOpPow: + case EOpReflect: + case EOpRefract: + case EOpSmoothStep: + case EOpStep: + + case EOpSequence: + case EOpConstructStruct: + + if (type.getBasicType() == node->getType().getBasicType()) + return node; + + if (canImplicitlyPromote(node->getType().getBasicType(), type.getBasicType(), op)) + promoteTo = type.getBasicType(); + else + return nullptr; + + break; + + // Shifts can have mixed types as long as they are integer, without converting. + // It's the left operand's type that determines the resulting type, so no issue + // with assign shift ops either. + case EOpLeftShift: + case EOpRightShift: + case EOpLeftShiftAssign: + case EOpRightShiftAssign: + if ((type.getBasicType() == EbtInt || + type.getBasicType() == EbtUint || + type.getBasicType() == EbtInt64 || + type.getBasicType() == EbtUint64) && + (node->getType().getBasicType() == EbtInt || + node->getType().getBasicType() == EbtUint || + node->getType().getBasicType() == EbtInt64 || + node->getType().getBasicType() == EbtUint64)) + + return node; + else + return nullptr; + + default: + // default is to require a match; all exceptions should have case statements above + + if (type.getBasicType() == node->getType().getBasicType()) + return node; + else + return nullptr; + } + + if (node->getAsConstantUnion()) + return promoteConstantUnion(promoteTo, node->getAsConstantUnion()); + + // + // Add a new newNode for the conversion. + // + TIntermUnary* newNode = nullptr; + + TOperator newOp = EOpNull; + + // This is 'mechanism' here, it does any conversion told. The policy comes + // from the shader or the above code. + switch (promoteTo) { + case EbtDouble: + switch (node->getBasicType()) { + case EbtInt: newOp = EOpConvIntToDouble; break; + case EbtUint: newOp = EOpConvUintToDouble; break; + case EbtBool: newOp = EOpConvBoolToDouble; break; + case EbtFloat: newOp = EOpConvFloatToDouble; break; +#ifdef AMD_EXTENSIONS + case EbtFloat16: newOp = EOpConvFloat16ToDouble; break; +#endif + case EbtInt64: newOp = EOpConvInt64ToDouble; break; + case EbtUint64: newOp = EOpConvUint64ToDouble; break; + default: + return nullptr; + } + break; + case EbtFloat: + switch (node->getBasicType()) { + case EbtInt: newOp = EOpConvIntToFloat; break; + case EbtUint: newOp = EOpConvUintToFloat; break; + case EbtBool: newOp = EOpConvBoolToFloat; break; + case EbtDouble: newOp = EOpConvDoubleToFloat; break; +#ifdef AMD_EXTENSIONS + case EbtFloat16: newOp = EOpConvFloat16ToFloat; break; +#endif + case EbtInt64: newOp = EOpConvInt64ToFloat; break; + case EbtUint64: newOp = EOpConvUint64ToFloat; break; + default: + return nullptr; + } + break; +#ifdef AMD_EXTENSIONS + case EbtFloat16: + switch (node->getBasicType()) { + case EbtInt: newOp = EOpConvIntToFloat16; break; + case EbtUint: newOp = EOpConvUintToFloat16; break; + case EbtBool: newOp = EOpConvBoolToFloat16; break; + case EbtFloat: newOp = EOpConvFloatToFloat16; break; + case EbtDouble: newOp = EOpConvDoubleToFloat16; break; + case EbtInt64: newOp = EOpConvInt64ToFloat16; break; + case EbtUint64: newOp = EOpConvUint64ToFloat16; break; + default: + return nullptr; + } + break; +#endif + case EbtBool: + switch (node->getBasicType()) { + case EbtInt: newOp = EOpConvIntToBool; break; + case EbtUint: newOp = EOpConvUintToBool; break; + case EbtFloat: newOp = EOpConvFloatToBool; break; + case EbtDouble: newOp = EOpConvDoubleToBool; break; +#ifdef AMD_EXTENSIONS + case EbtFloat16: newOp = EOpConvFloat16ToBool; break; +#endif + case EbtInt64: newOp = EOpConvInt64ToBool; break; + case EbtUint64: newOp = EOpConvUint64ToBool; break; + default: + return nullptr; + } + break; + case EbtInt: + switch (node->getBasicType()) { + case EbtUint: newOp = EOpConvUintToInt; break; + case EbtBool: newOp = EOpConvBoolToInt; break; + case EbtFloat: newOp = EOpConvFloatToInt; break; + case EbtDouble: newOp = EOpConvDoubleToInt; break; +#ifdef AMD_EXTENSIONS + case EbtFloat16: newOp = EOpConvFloat16ToInt; break; +#endif + case EbtInt64: newOp = EOpConvInt64ToInt; break; + case EbtUint64: newOp = EOpConvUint64ToInt; break; + default: + return nullptr; + } + break; + case EbtUint: + switch (node->getBasicType()) { + case EbtInt: newOp = EOpConvIntToUint; break; + case EbtBool: newOp = EOpConvBoolToUint; break; + case EbtFloat: newOp = EOpConvFloatToUint; break; + case EbtDouble: newOp = EOpConvDoubleToUint; break; +#ifdef AMD_EXTENSIONS + case EbtFloat16: newOp = EOpConvFloat16ToUint; break; +#endif + case EbtInt64: newOp = EOpConvInt64ToUint; break; + case EbtUint64: newOp = EOpConvUint64ToUint; break; + default: + return nullptr; + } + break; + case EbtInt64: + switch (node->getBasicType()) { + case EbtInt: newOp = EOpConvIntToInt64; break; + case EbtUint: newOp = EOpConvUintToInt64; break; + case EbtBool: newOp = EOpConvBoolToInt64; break; + case EbtFloat: newOp = EOpConvFloatToInt64; break; + case EbtDouble: newOp = EOpConvDoubleToInt64; break; +#ifdef AMD_EXTENSIONS + case EbtFloat16: newOp = EOpConvFloat16ToInt64; break; +#endif + case EbtUint64: newOp = EOpConvUint64ToInt64; break; + default: + return nullptr; + } + break; + case EbtUint64: + switch (node->getBasicType()) { + case EbtInt: newOp = EOpConvIntToUint64; break; + case EbtUint: newOp = EOpConvUintToUint64; break; + case EbtBool: newOp = EOpConvBoolToUint64; break; + case EbtFloat: newOp = EOpConvFloatToUint64; break; + case EbtDouble: newOp = EOpConvDoubleToUint64; break; +#ifdef AMD_EXTENSIONS + case EbtFloat16: newOp = EOpConvFloat16ToUint64; break; +#endif + case EbtInt64: newOp = EOpConvInt64ToUint64; break; + default: + return nullptr; + } + break; + default: + return nullptr; + } + + TType newType(promoteTo, EvqTemporary, node->getVectorSize(), node->getMatrixCols(), node->getMatrixRows()); + newNode = addUnaryNode(newOp, node, node->getLoc(), newType); + + // TODO: it seems that some unary folding operations should occur here, but are not + + // Propagate specialization-constant-ness, if allowed + if (node->getType().getQualifier().isSpecConstant() && isSpecializationOperation(*newNode)) + newNode->getWritableType().getQualifier().makeSpecConstant(); + + return newNode; +} + +// Convert the node's shape of type for the given type, as allowed by the +// operation involved: 'op'. +// +// Generally, the AST represents allowed GLSL shapes, so this isn't needed +// for GLSL. Bad shapes are caught in conversion or promotion. +// +// Return 'node' if no conversion was done. Promotion handles final shape +// checking. +// +TIntermTyped* TIntermediate::addShapeConversion(TOperator op, const TType& type, TIntermTyped* node) +{ + // some source languages don't do this + switch (source) { + case EShSourceHlsl: + break; + case EShSourceGlsl: + default: + return node; + } + + // some operations don't do this + switch (op) { + case EOpAssign: + case EOpLessThan: + case EOpGreaterThan: + case EOpLessThanEqual: + case EOpGreaterThanEqual: + case EOpEqual: + case EOpNotEqual: + case EOpFunctionCall: + case EOpReturn: + case EOpLogicalAnd: + case EOpLogicalOr: + case EOpLogicalXor: + break; + default: + return node; + } + + // structures and arrays don't change shape, either to or from + if (node->getType().isStruct() || node->getType().isArray() || + type.isStruct() || type.isArray()) + return node; + + // 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())) + return setAggregateOperator(makeAggregate(node), constructorOp, type, node->getLoc()); + + return node; +} + +// +// See if the 'from' type is allowed to be implicitly converted to the +// 'to' type. This is not about vector/array/struct, only about basic type. +// +bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperator op) const +{ + if (profile == EEsProfile || version == 110) + return false; + + if (from == to) + return true; + + // TODO: Move more policies into language-specific handlers. + // Some languages allow more general (or potentially, more specific) conversions under some conditions. + if (source == EShSourceHlsl) { + const bool fromConvertable = (from == EbtFloat || from == EbtDouble || from == EbtInt || from == EbtUint || from == EbtBool); + const bool toConvertable = (to == EbtFloat || to == EbtDouble || to == EbtInt || to == EbtUint || to == EbtBool); + + if (fromConvertable && toConvertable) { + switch (op) { + case EOpAndAssign: // assignments can perform arbitrary conversions + case EOpInclusiveOrAssign: // ... + case EOpExclusiveOrAssign: // ... + case EOpAssign: // ... + case EOpAddAssign: // ... + case EOpSubAssign: // ... + case EOpMulAssign: // ... + case EOpVectorTimesScalarAssign: // ... + case EOpMatrixTimesScalarAssign: // ... + case EOpDivAssign: // ... + case EOpModAssign: // ... + case EOpReturn: // function returns can also perform arbitrary conversions + case EOpFunctionCall: // conversion of a calling parameter + case EOpLogicalNot: + case EOpLogicalAnd: + case EOpLogicalOr: + case EOpLogicalXor: + case EOpConstructStruct: + return true; + default: + break; + } + } + } + + switch (to) { + case EbtDouble: + switch (from) { + case EbtInt: + case EbtUint: + case EbtInt64: + case EbtUint64: + case EbtFloat: + case EbtDouble: +#ifdef AMD_EXTENSIONS + case EbtFloat16: +#endif + return true; + default: + return false; + } + case EbtFloat: + switch (from) { + case EbtInt: + case EbtUint: + case EbtFloat: +#ifdef AMD_EXTENSIONS + case EbtFloat16: +#endif + return true; + case EbtBool: + return (source == EShSourceHlsl); + default: + return false; + } + case EbtUint: + switch (from) { + case EbtInt: + return version >= 400; + case EbtUint: + return true; + case EbtBool: + return (source == EShSourceHlsl); + default: + return false; + } + case EbtInt: + switch (from) { + case EbtInt: + return true; + case EbtBool: + return (source == EShSourceHlsl); + default: + return false; + } + case EbtUint64: + switch (from) { + case EbtInt: + case EbtUint: + case EbtInt64: + case EbtUint64: + return true; + default: + return false; + } + case EbtInt64: + switch (from) { + case EbtInt: + case EbtInt64: + return true; + default: + return false; + } + default: + return false; + } +} + +// +// Given a type, find what operation would fully construct it. +// +TOperator TIntermediate::mapTypeToConstructorOp(const TType& type) const +{ + TOperator op = EOpNull; + + switch (type.getBasicType()) { + case EbtStruct: + op = EOpConstructStruct; + break; + case EbtSampler: + if (type.getSampler().combined) + op = EOpConstructTextureSampler; + break; + case EbtFloat: + if (type.isMatrix()) { + switch (type.getMatrixCols()) { + case 2: + switch (type.getMatrixRows()) { + case 2: op = EOpConstructMat2x2; break; + case 3: op = EOpConstructMat2x3; break; + case 4: op = EOpConstructMat2x4; break; + default: break; // some compilers want this + } + break; + case 3: + switch (type.getMatrixRows()) { + case 2: op = EOpConstructMat3x2; break; + case 3: op = EOpConstructMat3x3; break; + case 4: op = EOpConstructMat3x4; break; + default: break; // some compilers want this + } + break; + case 4: + switch (type.getMatrixRows()) { + case 2: op = EOpConstructMat4x2; break; + case 3: op = EOpConstructMat4x3; break; + case 4: op = EOpConstructMat4x4; break; + default: break; // some compilers want this + } + break; + default: break; // some compilers want this + } + } else { + switch(type.getVectorSize()) { + case 1: op = EOpConstructFloat; break; + case 2: op = EOpConstructVec2; break; + case 3: op = EOpConstructVec3; break; + case 4: op = EOpConstructVec4; break; + default: break; // some compilers want this + } + } + break; + case EbtDouble: + if (type.getMatrixCols()) { + switch (type.getMatrixCols()) { + case 2: + switch (type.getMatrixRows()) { + case 2: op = EOpConstructDMat2x2; break; + case 3: op = EOpConstructDMat2x3; break; + case 4: op = EOpConstructDMat2x4; break; + default: break; // some compilers want this + } + break; + case 3: + switch (type.getMatrixRows()) { + case 2: op = EOpConstructDMat3x2; break; + case 3: op = EOpConstructDMat3x3; break; + case 4: op = EOpConstructDMat3x4; break; + default: break; // some compilers want this + } + break; + case 4: + switch (type.getMatrixRows()) { + case 2: op = EOpConstructDMat4x2; break; + case 3: op = EOpConstructDMat4x3; break; + case 4: op = EOpConstructDMat4x4; break; + default: break; // some compilers want this + } + break; + } + } else { + switch(type.getVectorSize()) { + case 1: op = EOpConstructDouble; break; + case 2: op = EOpConstructDVec2; break; + case 3: op = EOpConstructDVec3; break; + case 4: op = EOpConstructDVec4; break; + default: break; // some compilers want this + } + } + break; +#ifdef AMD_EXTENSIONS + case EbtFloat16: + if (type.getMatrixCols()) { + switch (type.getMatrixCols()) { + case 2: + switch (type.getMatrixRows()) { + case 2: op = EOpConstructF16Mat2x2; break; + case 3: op = EOpConstructF16Mat2x3; break; + case 4: op = EOpConstructF16Mat2x4; break; + default: break; // some compilers want this + } + break; + case 3: + switch (type.getMatrixRows()) { + case 2: op = EOpConstructF16Mat3x2; break; + case 3: op = EOpConstructF16Mat3x3; break; + case 4: op = EOpConstructF16Mat3x4; break; + default: break; // some compilers want this + } + break; + case 4: + switch (type.getMatrixRows()) { + case 2: op = EOpConstructF16Mat4x2; break; + case 3: op = EOpConstructF16Mat4x3; break; + case 4: op = EOpConstructF16Mat4x4; break; + default: break; // some compilers want this + } + break; + } + } + else { + switch (type.getVectorSize()) { + case 1: op = EOpConstructFloat16; break; + case 2: op = EOpConstructF16Vec2; break; + case 3: op = EOpConstructF16Vec3; break; + case 4: op = EOpConstructF16Vec4; break; + default: break; // some compilers want this + } + } + 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 + } + 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 + } + break; + case EbtInt64: + switch(type.getVectorSize()) { + case 1: op = EOpConstructInt64; break; + case 2: op = EOpConstructI64Vec2; break; + case 3: op = EOpConstructI64Vec3; break; + case 4: op = EOpConstructI64Vec4; break; + default: break; // some compilers want this + } + break; + case EbtUint64: + switch(type.getVectorSize()) { + case 1: op = EOpConstructUint64; break; + case 2: op = EOpConstructU64Vec2; break; + case 3: op = EOpConstructU64Vec3; break; + case 4: op = EOpConstructU64Vec4; break; + default: break; // some compilers want this + } + break; + case EbtBool: + 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; + } + + return op; +} + +// +// Safe way to combine two nodes into an aggregate. Works with null pointers, +// a node that's not a aggregate yet, etc. +// +// Returns the resulting aggregate, unless nullptr was passed in for +// both existing nodes. +// +TIntermAggregate* TIntermediate::growAggregate(TIntermNode* left, TIntermNode* right) +{ + if (left == nullptr && right == nullptr) + return nullptr; + + TIntermAggregate* aggNode = nullptr; + if (left != nullptr) + aggNode = left->getAsAggregate(); + if (aggNode == nullptr || aggNode->getOp() != EOpNull) { + aggNode = new TIntermAggregate; + if (left != nullptr) + aggNode->getSequence().push_back(left); + } + + if (right != nullptr) + aggNode->getSequence().push_back(right); + + return aggNode; +} + +TIntermAggregate* TIntermediate::growAggregate(TIntermNode* left, TIntermNode* right, const TSourceLoc& loc) +{ + TIntermAggregate* aggNode = growAggregate(left, right); + if (aggNode) + aggNode->setLoc(loc); + + return aggNode; +} + +// +// Turn an existing node into an aggregate. +// +// Returns an aggregate, unless nullptr was passed in for the existing node. +// +TIntermAggregate* TIntermediate::makeAggregate(TIntermNode* node) +{ + if (node == nullptr) + return nullptr; + + TIntermAggregate* aggNode = new TIntermAggregate; + aggNode->getSequence().push_back(node); + aggNode->setLoc(node->getLoc()); + + return aggNode; +} + +TIntermAggregate* TIntermediate::makeAggregate(TIntermNode* node, const TSourceLoc& loc) +{ + if (node == nullptr) + return nullptr; + + TIntermAggregate* aggNode = new TIntermAggregate; + aggNode->getSequence().push_back(node); + aggNode->setLoc(loc); + + return aggNode; +} + +// +// Make an aggregate with an empty sequence. +// +TIntermAggregate* TIntermediate::makeAggregate(const TSourceLoc& loc) +{ + TIntermAggregate* aggNode = new TIntermAggregate; + aggNode->setLoc(loc); + + return aggNode; +} + +// +// For "if" test nodes. There are three children; a condition, +// a true path, and a false path. The two paths are in the +// nodePair. +// +// Returns the selection node created. +// +TIntermTyped* TIntermediate::addSelection(TIntermTyped* cond, TIntermNodePair nodePair, const TSourceLoc& loc) +{ + // + // Don't prune the false path for compile-time constants; it's needed + // for static access analysis. + // + + TIntermSelection* node = new TIntermSelection(cond, nodePair.node1, nodePair.node2); + node->setLoc(loc); + + return node; +} + +TIntermTyped* TIntermediate::addComma(TIntermTyped* left, TIntermTyped* right, const TSourceLoc& loc) +{ + // However, the lowest precedence operators of the sequence operator ( , ) and the assignment operators + // ... are not included in the operators that can create a constant expression. + // + // if (left->getType().getQualifier().storage == EvqConst && + // right->getType().getQualifier().storage == EvqConst) { + + // return right; + //} + + TIntermTyped *commaAggregate = growAggregate(left, right, loc); + commaAggregate->getAsAggregate()->setOperator(EOpComma); + commaAggregate->setType(right->getType()); + commaAggregate->getWritableType().getQualifier().makeTemporary(); + + return commaAggregate; +} + +TIntermTyped* TIntermediate::addMethod(TIntermTyped* object, const TType& type, const TString* name, const TSourceLoc& loc) +{ + TIntermMethod* method = new TIntermMethod(object, type, *name); + method->setLoc(loc); + + return method; +} + +// +// For "?:" test nodes. There are three children; a condition, +// a true path, and a false path. The two paths are specified +// as separate parameters. +// +// 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) +{ + // 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); + } + + // + // Get compatible types. + // + TIntermTyped* child = addConversion(EOpSequence, trueBlock->getType(), falseBlock); + if (child) + falseBlock = child; + else { + child = addConversion(EOpSequence, falseBlock->getType(), trueBlock); + if (child) + trueBlock = child; + else + return nullptr; + } + + // 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. + // + + if (cond->getAsConstantUnion() && trueBlock->getAsConstantUnion() && falseBlock->getAsConstantUnion()) { + if (cond->getAsConstantUnion()->getConstArray()[0].getBConst()) + return trueBlock; + else + return falseBlock; + } + + // + // Make a selection node. + // + TIntermSelection* node = new TIntermSelection(cond, trueBlock, falseBlock, trueBlock->getType()); + node->setLoc(loc); + node->getQualifier().precision = std::max(trueBlock->getQualifier().precision, falseBlock->getQualifier().precision); + + if ((cond->getQualifier().isConstant() && specConstantPropagates(*trueBlock, *falseBlock)) || + (cond->getQualifier().isSpecConstant() && trueBlock->getQualifier().isConstant() && + falseBlock->getQualifier().isConstant())) + node->getQualifier().makeSpecConstant(); + else + node->getQualifier().makeTemporary(); + + return node; +} + +// +// Constant terminal nodes. Has a union that contains bool, float or int constants +// +// Returns the constant union node created. +// + +TIntermConstantUnion* TIntermediate::addConstantUnion(const TConstUnionArray& unionArray, const TType& t, const TSourceLoc& loc, bool literal) const +{ + TIntermConstantUnion* node = new TIntermConstantUnion(unionArray, t); + node->getQualifier().storage = EvqConst; + node->setLoc(loc); + if (literal) + node->setLiteral(); + + return node; +} + +TIntermConstantUnion* TIntermediate::addConstantUnion(int i, const TSourceLoc& loc, bool literal) const +{ + TConstUnionArray unionArray(1); + unionArray[0].setIConst(i); + + return addConstantUnion(unionArray, TType(EbtInt, EvqConst), loc, literal); +} + +TIntermConstantUnion* TIntermediate::addConstantUnion(unsigned int u, const TSourceLoc& loc, bool literal) const +{ + TConstUnionArray unionArray(1); + unionArray[0].setUConst(u); + + return addConstantUnion(unionArray, TType(EbtUint, EvqConst), loc, literal); +} + +TIntermConstantUnion* TIntermediate::addConstantUnion(long long i64, const TSourceLoc& loc, bool literal) const +{ + TConstUnionArray unionArray(1); + unionArray[0].setI64Const(i64); + + return addConstantUnion(unionArray, TType(EbtInt64, EvqConst), loc, literal); +} + +TIntermConstantUnion* TIntermediate::addConstantUnion(unsigned long long u64, const TSourceLoc& loc, bool literal) const +{ + TConstUnionArray unionArray(1); + unionArray[0].setU64Const(u64); + + return addConstantUnion(unionArray, TType(EbtUint64, EvqConst), loc, literal); +} + +TIntermConstantUnion* TIntermediate::addConstantUnion(bool b, const TSourceLoc& loc, bool literal) const +{ + TConstUnionArray unionArray(1); + unionArray[0].setBConst(b); + + return addConstantUnion(unionArray, TType(EbtBool, EvqConst), loc, literal); +} + +TIntermConstantUnion* TIntermediate::addConstantUnion(double d, TBasicType baseType, const TSourceLoc& loc, bool literal) const +{ +#ifdef AMD_EXTENSIONS + assert(baseType == EbtFloat || baseType == EbtDouble || baseType == EbtFloat16); +#else + assert(baseType == EbtFloat || baseType == EbtDouble); +#endif + + TConstUnionArray unionArray(1); + unionArray[0].setDConst(d); + + return addConstantUnion(unionArray, TType(baseType, EvqConst), loc, literal); +} + +TIntermConstantUnion* TIntermediate::addConstantUnion(const TString* s, const TSourceLoc& loc, bool literal) const +{ + TConstUnionArray unionArray(1); + unionArray[0].setSConst(s); + + return addConstantUnion(unionArray, TType(EbtString, EvqConst), loc, literal); +} + +// Put vector swizzle selectors onto the given sequence +void TIntermediate::pushSelector(TIntermSequence& sequence, const TVectorSelector& selector, const TSourceLoc& loc) +{ + TIntermConstantUnion* constIntNode = addConstantUnion(selector, loc); + sequence.push_back(constIntNode); +} + +// Put matrix swizzle selectors onto the given sequence +void TIntermediate::pushSelector(TIntermSequence& sequence, const TMatrixSelector& selector, const TSourceLoc& loc) +{ + TIntermConstantUnion* constIntNode = addConstantUnion(selector.coord1, loc); + sequence.push_back(constIntNode); + constIntNode = addConstantUnion(selector.coord2, loc); + sequence.push_back(constIntNode); +} + +// Make an aggregate node that has a sequence of all selectors. +template TIntermTyped* TIntermediate::addSwizzle(TSwizzleSelectors& selector, const TSourceLoc& loc); +template TIntermTyped* TIntermediate::addSwizzle(TSwizzleSelectors& selector, const TSourceLoc& loc); +template +TIntermTyped* TIntermediate::addSwizzle(TSwizzleSelectors& selector, const TSourceLoc& loc) +{ + TIntermAggregate* node = new TIntermAggregate(EOpSequence); + + node->setLoc(loc); + TIntermSequence &sequenceVector = node->getSequence(); + + for (int i = 0; i < selector.size(); i++) + pushSelector(sequenceVector, selector[i], loc); + + return node; +} + +// +// Follow the left branches down to the root of an l-value +// expression (just "." and []). +// +// Return the base of the l-value (where following indexing quits working). +// Return nullptr if a chain following dereferences cannot be followed. +// +// 'swizzleOkay' says whether or not it is okay to consider a swizzle +// a valid part of the dereference chain. +// +const TIntermTyped* TIntermediate::findLValueBase(const TIntermTyped* node, bool swizzleOkay) +{ + do { + const TIntermBinary* binary = node->getAsBinaryNode(); + if (binary == nullptr) + return node; + TOperator op = binary->getOp(); + if (op != EOpIndexDirect && op != EOpIndexIndirect && op != EOpIndexDirectStruct && op != EOpVectorSwizzle && op != EOpMatrixSwizzle) + return nullptr; + if (! swizzleOkay) { + if (op == EOpVectorSwizzle || op == EOpMatrixSwizzle) + return nullptr; + if ((op == EOpIndexDirect || op == EOpIndexIndirect) && + (binary->getLeft()->getType().isVector() || binary->getLeft()->getType().isScalar()) && + ! binary->getLeft()->getType().isArray()) + return nullptr; + } + node = node->getAsBinaryNode()->getLeft(); + } while (true); +} + +// +// Create while and do-while loop nodes. +// +TIntermLoop* TIntermediate::addLoop(TIntermNode* body, TIntermTyped* test, TIntermTyped* terminal, bool testFirst, const TSourceLoc& loc) +{ + TIntermLoop* node = new TIntermLoop(body, test, terminal, testFirst); + node->setLoc(loc); + + return node; +} + +// +// Create a for-loop sequence. +// +TIntermAggregate* TIntermediate::addForLoop(TIntermNode* body, TIntermNode* initializer, TIntermTyped* test, TIntermTyped* terminal, bool testFirst, const TSourceLoc& loc) +{ + TIntermLoop* node = new TIntermLoop(body, test, terminal, testFirst); + node->setLoc(loc); + + // make a sequence of the initializer and statement + TIntermAggregate* loopSequence = makeAggregate(initializer, loc); + loopSequence = growAggregate(loopSequence, node); + loopSequence->setOperator(EOpSequence); + + return loopSequence; +} + +// +// Add branches. +// +TIntermBranch* TIntermediate::addBranch(TOperator branchOp, const TSourceLoc& loc) +{ + return addBranch(branchOp, nullptr, loc); +} + +TIntermBranch* TIntermediate::addBranch(TOperator branchOp, TIntermTyped* expression, const TSourceLoc& loc) +{ + TIntermBranch* node = new TIntermBranch(branchOp, expression); + node->setLoc(loc); + + return node; +} + +// +// This is to be executed after the final root is put on top by the parsing +// process. +// +bool TIntermediate::postProcess(TIntermNode* root, EShLanguage /*language*/) +{ + if (root == nullptr) + return true; + + // Finish off the top-level sequence + TIntermAggregate* aggRoot = root->getAsAggregate(); + if (aggRoot && aggRoot->getOp() == EOpNull) + aggRoot->setOperator(EOpSequence); + + // Propagate 'noContraction' label in backward from 'precise' variables. + glslang::PropagateNoContraction(*this); + + return true; +} + +void TIntermediate::addSymbolLinkageNodes(TIntermAggregate*& linkage, EShLanguage language, TSymbolTable& symbolTable) +{ + // Add top-level nodes for declarations that must be checked cross + // compilation unit by a linker, yet might not have been referenced + // by the AST. + // + // Almost entirely, translation of symbols is driven by what's present + // in the AST traversal, not by translating the symbol table. + // + // However, there are some special cases: + // - From the specification: "Special built-in inputs gl_VertexID and + // gl_InstanceID are also considered active vertex attributes." + // - Linker-based type mismatch error reporting needs to see all + // uniforms/ins/outs variables and blocks. + // - ftransform() can make gl_Vertex and gl_ModelViewProjectionMatrix active. + // + + // if (ftransformUsed) { + // TODO: 1.1 lowering functionality: track ftransform() usage + // addSymbolLinkageNode(root, symbolTable, "gl_Vertex"); + // addSymbolLinkageNode(root, symbolTable, "gl_ModelViewProjectionMatrix"); + //} + + if (language == EShLangVertex) { + // the names won't be found in the symbol table unless the versions are right, + // so version logic does not need to be repeated here + addSymbolLinkageNode(linkage, symbolTable, "gl_VertexID"); + addSymbolLinkageNode(linkage, symbolTable, "gl_InstanceID"); + } + + // Add a child to the root node for the linker objects + linkage->setOperator(EOpLinkerObjects); + treeRoot = growAggregate(treeRoot, linkage); +} + +// +// Add the given name or symbol to the list of nodes at the end of the tree used +// for link-time checking and external linkage. +// + +void TIntermediate::addSymbolLinkageNode(TIntermAggregate*& linkage, TSymbolTable& symbolTable, const TString& name) +{ + TSymbol* symbol = symbolTable.find(name); + if (symbol) + addSymbolLinkageNode(linkage, *symbol->getAsVariable()); +} + +void TIntermediate::addSymbolLinkageNode(TIntermAggregate*& linkage, const TSymbol& symbol) +{ + const TVariable* variable = symbol.getAsVariable(); + if (! variable) { + // This must be a member of an anonymous block, and we need to add the whole block + const TAnonMember* anon = symbol.getAsAnonMember(); + variable = &anon->getAnonContainer(); + } + TIntermSymbol* node = addSymbol(*variable); + linkage = growAggregate(linkage, node); +} + +// +// Add a caller->callee relationship to the call graph. +// Assumes the strings are unique per signature. +// +void TIntermediate::addToCallGraph(TInfoSink& /*infoSink*/, const TString& caller, const TString& callee) +{ + // Duplicates are okay, but faster to not keep them, and they come grouped by caller, + // as long as new ones are push on the same end we check on for duplicates + for (TGraph::const_iterator call = callGraph.begin(); call != callGraph.end(); ++call) { + if (call->caller != caller) + break; + if (call->callee == callee) + return; + } + + callGraph.push_front(TCall(caller, callee)); +} + +// +// This deletes the tree. +// +void TIntermediate::removeTree() +{ + if (treeRoot) + RemoveAllTreeNodes(treeRoot); +} + +// +// Implement the part of KHR_vulkan_glsl that lists the set of operations +// that can result in a specialization constant operation. +// +// "5.x Specialization Constant Operations" +// +// Only some operations discussed in this section may be applied to a +// specialization constant and still yield a result that is as +// specialization constant. The operations allowed are listed below. +// When a specialization constant is operated on with one of these +// operators and with another constant or specialization constant, the +// result is implicitly a specialization constant. +// +// - int(), uint(), and bool() constructors for type conversions +// from any of the following types to any of the following types: +// * int +// * uint +// * bool +// - vector versions of the above conversion constructors +// - allowed implicit conversions of the above +// - swizzles (e.g., foo.yx) +// - The following when applied to integer or unsigned integer types: +// * unary negative ( - ) +// * binary operations ( + , - , * , / , % ) +// * shift ( <<, >> ) +// * bitwise operations ( & , | , ^ ) +// - The following when applied to integer or unsigned integer scalar types: +// * comparison ( == , != , > , >= , < , <= ) +// - The following when applied to the Boolean scalar type: +// * not ( ! ) +// * logical operations ( && , || , ^^ ) +// * comparison ( == , != )" +// +// This function just handles binary and unary nodes. Construction +// rules are handled in construction paths that are not covered by the unary +// and binary paths, while required conversions will still show up here +// as unary converters in the from a construction operator. +// +bool TIntermediate::isSpecializationOperation(const TIntermOperator& node) const +{ + // The operations resulting in floating point are quite limited + // (However, some floating-point operations result in bool, like ">", + // so are handled later.) + if (node.getType().isFloatingDomain()) { + switch (node.getOp()) { + case EOpIndexDirect: + case EOpIndexIndirect: + case EOpIndexDirectStruct: + case EOpVectorSwizzle: + case EOpConvFloatToDouble: + case EOpConvDoubleToFloat: +#ifdef AMD_EXTENSIONS + case EOpConvFloat16ToFloat: + case EOpConvFloatToFloat16: + case EOpConvFloat16ToDouble: + case EOpConvDoubleToFloat16: +#endif + return true; + default: + return false; + } + } + + // Check for floating-point arguments + if (const TIntermBinary* bin = node.getAsBinaryNode()) + if (bin->getLeft() ->getType().isFloatingDomain() || + bin->getRight()->getType().isFloatingDomain()) + return false; + + // So, for now, we can assume everything left is non-floating-point... + + // Now check for integer/bool-based operations + switch (node.getOp()) { + + // dereference/swizzle + case EOpIndexDirect: + case EOpIndexIndirect: + case EOpIndexDirectStruct: + case EOpVectorSwizzle: + + // conversion constructors + case EOpConvIntToBool: + case EOpConvUintToBool: + case EOpConvUintToInt: + case EOpConvBoolToInt: + case EOpConvIntToUint: + case EOpConvBoolToUint: + case EOpConvInt64ToBool: + case EOpConvBoolToInt64: + case EOpConvUint64ToBool: + case EOpConvBoolToUint64: + case EOpConvInt64ToInt: + case EOpConvIntToInt64: + case EOpConvUint64ToUint: + case EOpConvUintToUint64: + case EOpConvInt64ToUint64: + case EOpConvUint64ToInt64: + case EOpConvInt64ToUint: + case EOpConvUintToInt64: + case EOpConvUint64ToInt: + case EOpConvIntToUint64: + + // unary operations + case EOpNegative: + case EOpLogicalNot: + case EOpBitwiseNot: + + // binary operations + case EOpAdd: + case EOpSub: + case EOpMul: + case EOpVectorTimesScalar: + case EOpDiv: + case EOpMod: + case EOpRightShift: + case EOpLeftShift: + case EOpAnd: + case EOpInclusiveOr: + case EOpExclusiveOr: + case EOpLogicalOr: + case EOpLogicalXor: + case EOpLogicalAnd: + case EOpEqual: + case EOpNotEqual: + case EOpLessThan: + case EOpGreaterThan: + case EOpLessThanEqual: + case EOpGreaterThanEqual: + return true; + default: + return false; + } +} + +//////////////////////////////////////////////////////////////// +// +// Member functions of the nodes used for building the tree. +// +//////////////////////////////////////////////////////////////// + +// +// Say whether or not an operation node changes the value of a variable. +// +// Returns true if state is modified. +// +bool TIntermOperator::modifiesState() const +{ + switch (op) { + case EOpPostIncrement: + case EOpPostDecrement: + case EOpPreIncrement: + case EOpPreDecrement: + case EOpAssign: + case EOpAddAssign: + case EOpSubAssign: + case EOpMulAssign: + case EOpVectorTimesMatrixAssign: + case EOpVectorTimesScalarAssign: + case EOpMatrixTimesScalarAssign: + case EOpMatrixTimesMatrixAssign: + case EOpDivAssign: + case EOpModAssign: + case EOpAndAssign: + case EOpInclusiveOrAssign: + case EOpExclusiveOrAssign: + case EOpLeftShiftAssign: + case EOpRightShiftAssign: + return true; + default: + return false; + } +} + +// +// returns true if the operator is for one of the constructors +// +bool TIntermOperator::isConstructor() const +{ + return op > EOpConstructGuardStart && op < EOpConstructGuardEnd; +} + +// +// Make sure the type of an operator is appropriate for its +// combination of operation and operand type. This will invoke +// promoteUnary, promoteBinary, etc as needed. +// +// Returns false if nothing makes sense. +// +bool TIntermediate::promote(TIntermOperator* node) +{ + if (node == nullptr) + return false; + + if (node->getAsUnaryNode()) + return promoteUnary(*node->getAsUnaryNode()); + + if (node->getAsBinaryNode()) + return promoteBinary(*node->getAsBinaryNode()); + + if (node->getAsAggregate()) + return promoteAggregate(*node->getAsAggregate()); + + return false; +} + +// +// See TIntermediate::promote +// +bool TIntermediate::promoteUnary(TIntermUnary& node) +{ + const TOperator op = node.getOp(); + TIntermTyped* operand = node.getOperand(); + + switch (op) { + case EOpLogicalNot: + // Convert operand to a boolean type + if (operand->getBasicType() != EbtBool) { + // Add constructor to boolean type. If that fails, we can't do it, so return false. + TIntermTyped* converted = convertToBasicType(op, EbtBool, operand); + if (converted == nullptr) + return false; + + // Use the result of converting the node to a bool. + node.setOperand(operand = converted); // also updates stack variable + } + break; + case EOpBitwiseNot: + if (operand->getBasicType() != EbtInt && + operand->getBasicType() != EbtUint && + operand->getBasicType() != EbtInt64 && + operand->getBasicType() != EbtUint64) + + return false; + break; + case EOpNegative: + case EOpPostIncrement: + case EOpPostDecrement: + case EOpPreIncrement: + case EOpPreDecrement: + if (operand->getBasicType() != EbtInt && + operand->getBasicType() != EbtUint && + operand->getBasicType() != EbtInt64 && + operand->getBasicType() != EbtUint64 && + operand->getBasicType() != EbtFloat && +#ifdef AMD_EXTENSIONS + operand->getBasicType() != EbtFloat16 && +#endif + operand->getBasicType() != EbtDouble) + + return false; + break; + + default: + if (operand->getBasicType() != EbtFloat) + + return false; + } + + node.setType(operand->getType()); + node.getWritableType().getQualifier().makeTemporary(); + + return true; +} + +void TIntermUnary::updatePrecision() +{ +#ifdef AMD_EXTENSIONS + if (getBasicType() == EbtInt || getBasicType() == EbtUint || getBasicType() == EbtFloat || getBasicType() == EbtFloat16) { +#else + if (getBasicType() == EbtInt || getBasicType() == EbtUint || getBasicType() == EbtFloat) { +#endif + if (operand->getQualifier().precision > getQualifier().precision) + getQualifier().precision = operand->getQualifier().precision; + } +} + +// If it is not already, convert this node to the given basic type. +TIntermTyped* TIntermediate::convertToBasicType(TOperator op, TBasicType basicType, TIntermTyped* node) const +{ + if (node == nullptr) + return nullptr; + + // It's already this basic type: nothing needs to be done, so use the node directly. + if (node->getBasicType() == basicType) + return node; + + const TType& type = node->getType(); + const TType newType(basicType, type.getQualifier().storage, + type.getVectorSize(), type.getMatrixCols(), type.getMatrixRows(), type.isVector()); + + // Add constructor to the right vectorness of the right type. If that fails, we can't do it, so return nullptr. + return addConversion(op, newType, node); +} + +// +// See TIntermediate::promote +// +bool TIntermediate::promoteBinary(TIntermBinary& node) +{ + TOperator op = node.getOp(); + TIntermTyped* left = node.getLeft(); + TIntermTyped* right = node.getRight(); + + // Arrays and structures have to be exact matches. + if ((left->isArray() || right->isArray() || left->getBasicType() == EbtStruct || right->getBasicType() == EbtStruct) + && left->getType() != right->getType()) + return false; + + // Base assumption: just make the type the same as the left + // operand. Only deviations from this will be coded. + node.setType(left->getType()); + node.getWritableType().getQualifier().clear(); + + // Composite and opaque types don't having pending operator changes, e.g., + // array, structure, and samplers. Just establish final type and correctness. + if (left->isArray() || left->getBasicType() == EbtStruct || left->getBasicType() == EbtSampler) { + switch (op) { + case EOpEqual: + case EOpNotEqual: + if (left->getBasicType() == EbtSampler) { + // can't compare samplers + return false; + } else { + // Promote to conditional + node.setType(TType(EbtBool)); + } + + return true; + + case EOpAssign: + // Keep type from above + + return true; + + default: + return false; + } + } + + // + // We now have only scalars, vectors, and matrices to worry about. + // + + // Do general type checks against individual operands (comparing left and right is coming up, checking mixed shapes after that) + switch (op) { + case EOpLessThan: + case EOpGreaterThan: + case EOpLessThanEqual: + case EOpGreaterThanEqual: + // Relational comparisons need numeric types and will promote to scalar Boolean. + if (left->getBasicType() == EbtBool) + return false; + + node.setType(TType(EbtBool, EvqTemporary, left->getVectorSize())); + break; + + case EOpEqual: + case EOpNotEqual: + if (getSource() == EShSourceHlsl) { + const int resultWidth = std::max(left->getVectorSize(), right->getVectorSize()); + + // In HLSL, == or != on vectors means component-wise comparison. + if (resultWidth > 1) { + op = (op == EOpEqual) ? EOpVectorEqual : EOpVectorNotEqual; + node.setOp(op); + } + + node.setType(TType(EbtBool, EvqTemporary, resultWidth)); + } else { + // All the above comparisons result in a bool (but not the vector compares) + node.setType(TType(EbtBool)); + } + break; + + case EOpLogicalAnd: + case EOpLogicalOr: + case EOpLogicalXor: + if (getSource() == EShSourceHlsl) { + TIntermTyped* convertedL = convertToBasicType(op, EbtBool, left); + TIntermTyped* convertedR = convertToBasicType(op, EbtBool, right); + if (convertedL == nullptr || convertedR == nullptr) + return false; + node.setLeft(left = convertedL); // also updates stack variable + node.setRight(right = convertedR); // also updates stack variable + } else { + // logical ops operate only on scalar Booleans and will promote to scalar Boolean. + if (left->getBasicType() != EbtBool || left->isVector() || left->isMatrix()) + return false; + } + + node.setType(TType(EbtBool, EvqTemporary, left->getVectorSize())); + + break; + + case EOpRightShift: + case EOpLeftShift: + case EOpRightShiftAssign: + case EOpLeftShiftAssign: + + case EOpMod: + case EOpModAssign: + + case EOpAnd: + case EOpInclusiveOr: + case EOpExclusiveOr: + case EOpAndAssign: + case EOpInclusiveOrAssign: + case EOpExclusiveOrAssign: + if (getSource() == EShSourceHlsl) + break; + + // Check for integer-only operands. + if ((left->getBasicType() != EbtInt && left->getBasicType() != EbtUint && + left->getBasicType() != EbtInt64 && left->getBasicType() != EbtUint64) || + (right->getBasicType() != EbtInt && right->getBasicType() != EbtUint && + right->getBasicType() != EbtInt64 && right->getBasicType() != EbtUint64)) + return false; + if (left->isMatrix() || right->isMatrix()) + return false; + + break; + + case EOpAdd: + case EOpSub: + case EOpDiv: + case EOpMul: + case EOpAddAssign: + case EOpSubAssign: + case EOpMulAssign: + case EOpDivAssign: + // check for non-Boolean operands + if (left->getBasicType() == EbtBool || right->getBasicType() == EbtBool) + return false; + + default: + break; + } + + // Compare left and right, and finish with the cases where the operand types must match + switch (op) { + case EOpLessThan: + case EOpGreaterThan: + case EOpLessThanEqual: + case EOpGreaterThanEqual: + + case EOpEqual: + case EOpNotEqual: + case EOpVectorEqual: + case EOpVectorNotEqual: + + case EOpLogicalAnd: + case EOpLogicalOr: + 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: + + case EOpAnd: + case EOpInclusiveOr: + case EOpExclusiveOr: + case EOpAndAssign: + case EOpInclusiveOrAssign: + case EOpExclusiveOrAssign: + + case EOpAdd: + case EOpSub: + case EOpDiv: + case EOpAddAssign: + case EOpSubAssign: + case EOpDivAssign: + // Quick out in case the types do match + if (left->getType() == right->getType()) + return true; + + // Fall through + + case EOpMul: + case EOpMulAssign: + // At least the basic type has to match + if (left->getBasicType() != right->getBasicType()) + return false; + + default: + break; + } + + // Finish handling the case, for all ops, where both operands are scalars. + if (left->isScalar() && right->isScalar()) + 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()) + return false; + + // + // We now have a mix of scalars, vectors, or matrices, for non-relational operations. + // + + // Can these two operands be combined, what is the resulting type? + TBasicType basicType = left->getBasicType(); + switch (op) { + case EOpMul: + if (!left->isMatrix() && right->isMatrix()) { + if (left->isVector()) { + if (left->getVectorSize() != right->getMatrixRows()) + return false; + node.setOp(op = EOpVectorTimesMatrix); + node.setType(TType(basicType, EvqTemporary, right->getMatrixCols())); + } else { + node.setOp(op = EOpMatrixTimesScalar); + node.setType(TType(basicType, EvqTemporary, 0, right->getMatrixCols(), right->getMatrixRows())); + } + } else if (left->isMatrix() && !right->isMatrix()) { + if (right->isVector()) { + if (left->getMatrixCols() != right->getVectorSize()) + return false; + node.setOp(op = EOpMatrixTimesVector); + node.setType(TType(basicType, EvqTemporary, left->getMatrixRows())); + } else { + node.setOp(op = EOpMatrixTimesScalar); + } + } else if (left->isMatrix() && right->isMatrix()) { + if (left->getMatrixCols() != right->getMatrixRows()) + return false; + node.setOp(op = EOpMatrixTimesMatrix); + node.setType(TType(basicType, EvqTemporary, 0, right->getMatrixCols(), left->getMatrixRows())); + } else if (! left->isMatrix() && ! right->isMatrix()) { + if (left->isVector() && right->isVector()) { + ; // leave as component product + } else if (left->isVector() || right->isVector()) { + node.setOp(op = EOpVectorTimesScalar); + if (right->isVector()) + node.setType(TType(basicType, EvqTemporary, right->getVectorSize())); + } + } else { + return false; + } + break; + case EOpMulAssign: + if (! left->isMatrix() && right->isMatrix()) { + if (left->isVector()) { + if (left->getVectorSize() != right->getMatrixRows() || left->getVectorSize() != right->getMatrixCols()) + return false; + node.setOp(op = EOpVectorTimesMatrixAssign); + } else { + return false; + } + } else if (left->isMatrix() && !right->isMatrix()) { + if (right->isVector()) { + return false; + } else { + node.setOp(op = EOpMatrixTimesScalarAssign); + } + } else if (left->isMatrix() && right->isMatrix()) { + if (left->getMatrixCols() != left->getMatrixRows() || left->getMatrixCols() != right->getMatrixCols() || left->getMatrixCols() != right->getMatrixRows()) + return false; + node.setOp(op = EOpMatrixTimesMatrixAssign); + } else if (!left->isMatrix() && !right->isMatrix()) { + if (left->isVector() && right->isVector()) { + // leave as component product + } else if (left->isVector() || right->isVector()) { + if (! left->isVector()) + return false; + node.setOp(op = EOpVectorTimesScalarAssign); + } + } else { + return false; + } + break; + + case EOpRightShift: + case EOpLeftShift: + case EOpRightShiftAssign: + case EOpLeftShiftAssign: + if (right->isVector() && (! left->isVector() || right->getVectorSize() != left->getVectorSize())) + return false; + break; + + case EOpAssign: + if (left->getVectorSize() != right->getVectorSize() || left->getMatrixCols() != right->getMatrixCols() || left->getMatrixRows() != right->getMatrixRows()) + return false; + // fall through + + case EOpAdd: + case EOpSub: + case EOpDiv: + case EOpMod: + case EOpAnd: + case EOpInclusiveOr: + case EOpExclusiveOr: + case EOpAddAssign: + case EOpSubAssign: + case EOpDivAssign: + case EOpModAssign: + case EOpAndAssign: + case EOpInclusiveOrAssign: + case EOpExclusiveOrAssign: + + if ((left->isMatrix() && right->isVector()) || + (left->isVector() && right->isMatrix()) || + left->getBasicType() != right->getBasicType()) + return false; + if (left->isMatrix() && right->isMatrix() && (left->getMatrixCols() != right->getMatrixCols() || left->getMatrixRows() != right->getMatrixRows())) + return false; + if (left->isVector() && right->isVector() && left->getVectorSize() != right->getVectorSize()) + return false; + if (right->isVector() || right->isMatrix()) { + node.getWritableType().shallowCopy(right->getType()); + node.getWritableType().getQualifier().makeTemporary(); + } + break; + + default: + return false; + } + + // + // One more check for assignment. + // + switch (op) { + // The resulting type has to match the left operand. + case EOpAssign: + case EOpAddAssign: + case EOpSubAssign: + case EOpMulAssign: + case EOpDivAssign: + case EOpModAssign: + case EOpAndAssign: + case EOpInclusiveOrAssign: + case EOpExclusiveOrAssign: + case EOpLeftShiftAssign: + case EOpRightShiftAssign: + if (node.getType() != left->getType()) + return false; + break; + default: + break; + } + + return true; +} + +// +// See TIntermediate::promote +// +bool TIntermediate::promoteAggregate(TIntermAggregate& node) +{ + TOperator op = node.getOp(); + TIntermSequence& args = node.getSequence(); + const int numArgs = static_cast(args.size()); + + // Presently, only hlsl does intrinsic promotions. + if (getSource() != EShSourceHlsl) + return true; + + // set of opcodes that can be promoted in this manner. + switch (op) { + case EOpAtan: + case EOpClamp: + case EOpCross: + case EOpDistance: + case EOpDot: + case EOpDst: + case EOpFaceForward: + // case EOpFindMSB: TODO: + // case EOpFindLSB: TODO: + case EOpFma: + case EOpMod: + case EOpFrexp: + case EOpLdexp: + case EOpMix: + case EOpLit: + case EOpMax: + case EOpMin: + case EOpModf: + // case EOpGenMul: TODO: + case EOpPow: + case EOpReflect: + case EOpRefract: + // case EOpSinCos: TODO: + case EOpSmoothStep: + case EOpStep: + break; + default: + return true; + } + + // TODO: array and struct behavior + + // Try converting all nodes to the given node's type + TIntermSequence convertedArgs(numArgs, nullptr); + + // Try to convert all types to the nonConvArg type. + for (int nonConvArg = 0; nonConvArg < numArgs; ++nonConvArg) { + // Try converting all args to this arg's type + for (int convArg = 0; convArg < numArgs; ++convArg) { + convertedArgs[convArg] = addConversion(op, args[nonConvArg]->getAsTyped()->getType(), + args[convArg]->getAsTyped()); + } + + // If we successfully converted all the args, use the result. + if (std::all_of(convertedArgs.begin(), convertedArgs.end(), + [](const TIntermNode* node) { return node != nullptr; })) { + + std::swap(args, convertedArgs); + return true; + } + } + + return false; +} + +void TIntermBinary::updatePrecision() +{ +#ifdef AMD_EXTENSIONS + if (getBasicType() == EbtInt || getBasicType() == EbtUint || getBasicType() == EbtFloat || getBasicType() == EbtFloat16) { +#else + if (getBasicType() == EbtInt || getBasicType() == EbtUint || getBasicType() == EbtFloat) { +#endif + getQualifier().precision = std::max(right->getQualifier().precision, left->getQualifier().precision); + if (getQualifier().precision != EpqNone) { + left->propagatePrecision(getQualifier().precision); + right->propagatePrecision(getQualifier().precision); + } + } +} + +void TIntermTyped::propagatePrecision(TPrecisionQualifier newPrecision) +{ +#ifdef AMD_EXTENSIONS + if (getQualifier().precision != EpqNone || (getBasicType() != EbtInt && getBasicType() != EbtUint && getBasicType() != EbtFloat && getBasicType() != EbtFloat16)) +#else + if (getQualifier().precision != EpqNone || (getBasicType() != EbtInt && getBasicType() != EbtUint && getBasicType() != EbtFloat)) +#endif + return; + + getQualifier().precision = newPrecision; + + TIntermBinary* binaryNode = getAsBinaryNode(); + if (binaryNode) { + binaryNode->getLeft()->propagatePrecision(newPrecision); + binaryNode->getRight()->propagatePrecision(newPrecision); + + return; + } + + TIntermUnary* unaryNode = getAsUnaryNode(); + if (unaryNode) { + unaryNode->getOperand()->propagatePrecision(newPrecision); + + return; + } + + TIntermAggregate* aggregateNode = getAsAggregate(); + if (aggregateNode) { + TIntermSequence operands = aggregateNode->getSequence(); + for (unsigned int i = 0; i < operands.size(); ++i) { + TIntermTyped* typedNode = operands[i]->getAsTyped(); + if (! typedNode) + break; + typedNode->propagatePrecision(newPrecision); + } + + return; + } + + TIntermSelection* selectionNode = getAsSelectionNode(); + if (selectionNode) { + TIntermTyped* typedNode = selectionNode->getTrueBlock()->getAsTyped(); + if (typedNode) { + typedNode->propagatePrecision(newPrecision); + typedNode = selectionNode->getFalseBlock()->getAsTyped(); + if (typedNode) + typedNode->propagatePrecision(newPrecision); + } + + return; + } +} + +TIntermTyped* TIntermediate::promoteConstantUnion(TBasicType promoteTo, TIntermConstantUnion* node) const +{ + const TConstUnionArray& rightUnionArray = node->getConstArray(); + int size = node->getType().computeNumComponents(); + + TConstUnionArray leftUnionArray(size); + + for (int i=0; i < size; i++) { + switch (promoteTo) { + case EbtFloat: + switch (node->getType().getBasicType()) { + case EbtInt: + leftUnionArray[i].setDConst(static_cast(rightUnionArray[i].getIConst())); + break; + case EbtUint: + leftUnionArray[i].setDConst(static_cast(rightUnionArray[i].getUConst())); + break; + case EbtInt64: + leftUnionArray[i].setDConst(static_cast(rightUnionArray[i].getI64Const())); + break; + case EbtUint64: + leftUnionArray[i].setDConst(static_cast(rightUnionArray[i].getU64Const())); + break; + case EbtBool: + leftUnionArray[i].setDConst(static_cast(rightUnionArray[i].getBConst())); + break; + case EbtFloat: + case EbtDouble: +#ifdef AMD_EXTENSIONS + case EbtFloat16: +#endif + leftUnionArray[i] = rightUnionArray[i]; + break; + default: + return node; + } + break; + case EbtDouble: + switch (node->getType().getBasicType()) { + case EbtInt: + leftUnionArray[i].setDConst(static_cast(rightUnionArray[i].getIConst())); + break; + case EbtUint: + leftUnionArray[i].setDConst(static_cast(rightUnionArray[i].getUConst())); + break; + case EbtInt64: + leftUnionArray[i].setDConst(static_cast(rightUnionArray[i].getI64Const())); + break; + case EbtUint64: + leftUnionArray[i].setDConst(static_cast(rightUnionArray[i].getU64Const())); + break; + case EbtBool: + leftUnionArray[i].setDConst(static_cast(rightUnionArray[i].getBConst())); + break; + case EbtFloat: + case EbtDouble: +#ifdef AMD_EXTENSIONS + case EbtFloat16: +#endif + leftUnionArray[i] = rightUnionArray[i]; + break; + default: + return node; + } + break; +#ifdef AMD_EXTENSIONS + case EbtFloat16: + switch (node->getType().getBasicType()) { + case EbtInt: + leftUnionArray[i].setDConst(static_cast(rightUnionArray[i].getIConst())); + break; + case EbtUint: + leftUnionArray[i].setDConst(static_cast(rightUnionArray[i].getUConst())); + break; + case EbtInt64: + leftUnionArray[i].setDConst(static_cast(rightUnionArray[i].getI64Const())); + break; + case EbtUint64: + leftUnionArray[i].setDConst(static_cast(rightUnionArray[i].getU64Const())); + break; + case EbtBool: + leftUnionArray[i].setDConst(static_cast(rightUnionArray[i].getBConst())); + break; + case EbtFloat: + case EbtDouble: + case EbtFloat16: + leftUnionArray[i] = rightUnionArray[i]; + break; + default: + return node; + } + break; +#endif + case EbtInt: + switch (node->getType().getBasicType()) { + case EbtInt: + leftUnionArray[i] = rightUnionArray[i]; + break; + case EbtUint: + leftUnionArray[i].setIConst(static_cast(rightUnionArray[i].getUConst())); + break; + case EbtInt64: + leftUnionArray[i].setIConst(static_cast(rightUnionArray[i].getI64Const())); + break; + case EbtUint64: + leftUnionArray[i].setIConst(static_cast(rightUnionArray[i].getU64Const())); + break; + case EbtBool: + leftUnionArray[i].setIConst(static_cast(rightUnionArray[i].getBConst())); + break; + case EbtFloat: + case EbtDouble: +#ifdef AMD_EXTENSIONS + case EbtFloat16: +#endif + leftUnionArray[i].setIConst(static_cast(rightUnionArray[i].getDConst())); + break; + default: + return node; + } + break; + case EbtUint: + switch (node->getType().getBasicType()) { + case EbtInt: + leftUnionArray[i].setUConst(static_cast(rightUnionArray[i].getIConst())); + break; + case EbtUint: + leftUnionArray[i] = rightUnionArray[i]; + break; + case EbtInt64: + leftUnionArray[i].setUConst(static_cast(rightUnionArray[i].getI64Const())); + break; + case EbtUint64: + leftUnionArray[i].setUConst(static_cast(rightUnionArray[i].getU64Const())); + break; + case EbtBool: + leftUnionArray[i].setUConst(static_cast(rightUnionArray[i].getBConst())); + break; + case EbtFloat: + case EbtDouble: +#ifdef AMD_EXTENSIONS + case EbtFloat16: +#endif + leftUnionArray[i].setUConst(static_cast(rightUnionArray[i].getDConst())); + break; + default: + return node; + } + break; + case EbtBool: + switch (node->getType().getBasicType()) { + case EbtInt: + leftUnionArray[i].setBConst(rightUnionArray[i].getIConst() != 0); + break; + case EbtUint: + leftUnionArray[i].setBConst(rightUnionArray[i].getUConst() != 0); + break; + case EbtInt64: + leftUnionArray[i].setBConst(rightUnionArray[i].getI64Const() != 0); + break; + case EbtUint64: + leftUnionArray[i].setBConst(rightUnionArray[i].getU64Const() != 0); + break; + case EbtBool: + leftUnionArray[i] = rightUnionArray[i]; + break; + case EbtFloat: + case EbtDouble: +#ifdef AMD_EXTENSIONS + case EbtFloat16: +#endif + leftUnionArray[i].setBConst(rightUnionArray[i].getDConst() != 0.0); + break; + default: + return node; + } + break; + case EbtInt64: + switch (node->getType().getBasicType()) { + case EbtInt: + leftUnionArray[i].setI64Const(static_cast(rightUnionArray[i].getIConst())); + break; + case EbtUint: + leftUnionArray[i].setI64Const(static_cast(rightUnionArray[i].getUConst())); + break; + case EbtInt64: + leftUnionArray[i] = rightUnionArray[i]; + break; + case EbtUint64: + leftUnionArray[i].setI64Const(static_cast(rightUnionArray[i].getU64Const())); + break; + case EbtBool: + leftUnionArray[i].setI64Const(static_cast(rightUnionArray[i].getBConst())); + break; + case EbtFloat: + case EbtDouble: +#ifdef AMD_EXTENSIONS + case EbtFloat16: +#endif + leftUnionArray[i].setI64Const(static_cast(rightUnionArray[i].getDConst())); + break; + default: + return node; + } + break; + case EbtUint64: + switch (node->getType().getBasicType()) { + case EbtInt: + leftUnionArray[i].setU64Const(static_cast(rightUnionArray[i].getIConst())); + break; + case EbtUint: + leftUnionArray[i].setU64Const(static_cast(rightUnionArray[i].getUConst())); + break; + case EbtInt64: + leftUnionArray[i].setU64Const(static_cast(rightUnionArray[i].getI64Const())); + break; + case EbtUint64: + leftUnionArray[i] = rightUnionArray[i]; + break; + case EbtBool: + leftUnionArray[i].setU64Const(static_cast(rightUnionArray[i].getBConst())); + break; + case EbtFloat: + case EbtDouble: +#ifdef AMD_EXTENSIONS + case EbtFloat16: +#endif + leftUnionArray[i].setU64Const(static_cast(rightUnionArray[i].getDConst())); + break; + default: + return node; + } + break; + default: + return node; + } + } + + const TType& t = node->getType(); + + return addConstantUnion(leftUnionArray, TType(promoteTo, t.getQualifier().storage, t.getVectorSize(), t.getMatrixCols(), t.getMatrixRows()), + node->getLoc()); +} + +void TIntermAggregate::addToPragmaTable(const TPragmaTable& pTable) +{ + assert(!pragmaTable); + pragmaTable = new TPragmaTable(); + *pragmaTable = pTable; +} + +// If either node is a specialization constant, while the other is +// a constant (or specialization constant), the result is still +// a specialization constant. +bool TIntermediate::specConstantPropagates(const TIntermTyped& node1, const TIntermTyped& node2) +{ + return (node1.getType().getQualifier().isSpecConstant() && node2.getType().getQualifier().isConstant()) || + (node2.getType().getQualifier().isSpecConstant() && node1.getType().getQualifier().isConstant()); +} + +} // end namespace glslang diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/LiveTraverser.h b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/LiveTraverser.h new file mode 100644 index 0000000..029c24a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/LiveTraverser.h @@ -0,0 +1,136 @@ +// +// Copyright (C) 2016 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. +// + +#include "../Include/Common.h" +#include "reflection.h" +#include "localintermediate.h" + +#include "gl_types.h" + +#include +#include + +namespace glslang { + +// +// The traverser: mostly pass through, except +// - processing function-call nodes to push live functions onto the stack of functions to process +// - processing selection nodes to trim semantically dead code +// +// This is in the glslang namespace directly so it can be a friend of TReflection. +// This can be derived from to implement reflection database traversers or +// binding mappers: anything that wants to traverse the live subset of the tree. +// + +class TLiveTraverser : public TIntermTraverser { +public: + TLiveTraverser(const TIntermediate& i, bool traverseAll = false, + bool preVisit = true, bool inVisit = false, bool postVisit = false) : + TIntermTraverser(preVisit, inVisit, postVisit), + intermediate(i), traverseAll(traverseAll) + { } + + // + // Given a function name, find its subroot in the tree, and push it onto the stack of + // functions left to process. + // + void pushFunction(const TString& name) + { + TIntermSequence& globals = intermediate.getTreeRoot()->getAsAggregate()->getSequence(); + for (unsigned int f = 0; f < globals.size(); ++f) { + TIntermAggregate* candidate = globals[f]->getAsAggregate(); + if (candidate && candidate->getOp() == EOpFunction && candidate->getName() == name) { + functions.push_back(candidate); + break; + } + } + } + + typedef std::list TFunctionStack; + TFunctionStack functions; + +protected: + // To catch which function calls are not dead, and hence which functions must be visited. + virtual bool visitAggregate(TVisit, TIntermAggregate* node) + { + if (!traverseAll) + if (node->getOp() == EOpFunctionCall) + addFunctionCall(node); + + return true; // traverse this subtree + } + + // To prune semantically dead paths. + virtual bool visitSelection(TVisit /* visit */, TIntermSelection* node) + { + if (traverseAll) + return true; // traverse all code + + TIntermConstantUnion* constant = node->getCondition()->getAsConstantUnion(); + if (constant) { + // cull the path that is dead + if (constant->getConstArray()[0].getBConst() == true && node->getTrueBlock()) + node->getTrueBlock()->traverse(this); + if (constant->getConstArray()[0].getBConst() == false && node->getFalseBlock()) + node->getFalseBlock()->traverse(this); + + return false; // don't traverse any more, we did it all above + } else + return true; // traverse the whole subtree + } + + // Track live functions as well as uniforms, so that we don't visit dead functions + // and only visit each function once. + void addFunctionCall(TIntermAggregate* call) + { + // // just use the map to ensure we process each function at most once + if (liveFunctions.find(call->getName()) == liveFunctions.end()) { + liveFunctions.insert(call->getName()); + pushFunction(call->getName()); + } + } + + const TIntermediate& intermediate; + typedef std::unordered_set TLiveFunctions; + TLiveFunctions liveFunctions; + bool traverseAll; + +private: + // prevent copy & copy construct + TLiveTraverser(TLiveTraverser&); + TLiveTraverser& operator=(TLiveTraverser&); +}; + +} // namespace glslang diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseContextBase.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseContextBase.cpp new file mode 100644 index 0000000..d2b6b26 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseContextBase.cpp @@ -0,0 +1,583 @@ +// +// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +// Copyright (C) 2016 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. +// + +// Implement the TParseContextBase class. + +#include + +#include "ParseHelper.h" + +extern int yyparse(glslang::TParseContext*); + +namespace glslang { + +// +// Used to output syntax, parsing, and semantic errors. +// + +void TParseContextBase::outputMessage(const TSourceLoc& loc, const char* szReason, + const char* szToken, + const char* szExtraInfoFormat, + TPrefixType prefix, va_list args) +{ + const int maxSize = MaxTokenLength + 200; + char szExtraInfo[maxSize]; + + safe_vsprintf(szExtraInfo, maxSize, szExtraInfoFormat, args); + + infoSink.info.prefix(prefix); + infoSink.info.location(loc); + infoSink.info << "'" << szToken << "' : " << szReason << " " << szExtraInfo << "\n"; + + if (prefix == EPrefixError) { + ++numErrors; + } +} + +void C_DECL TParseContextBase::error(const TSourceLoc& loc, const char* szReason, const char* szToken, + const char* szExtraInfoFormat, ...) +{ + if (messages & EShMsgOnlyPreprocessor) + return; + va_list args; + va_start(args, szExtraInfoFormat); + outputMessage(loc, szReason, szToken, szExtraInfoFormat, EPrefixError, args); + va_end(args); + + if ((messages & EShMsgCascadingErrors) == 0) + currentScanner->setEndOfInput(); +} + +void C_DECL TParseContextBase::warn(const TSourceLoc& loc, const char* szReason, const char* szToken, + const char* szExtraInfoFormat, ...) +{ + if (suppressWarnings()) + return; + va_list args; + va_start(args, szExtraInfoFormat); + outputMessage(loc, szReason, szToken, szExtraInfoFormat, EPrefixWarning, args); + va_end(args); +} + +void C_DECL TParseContextBase::ppError(const TSourceLoc& loc, const char* szReason, const char* szToken, + const char* szExtraInfoFormat, ...) +{ + va_list args; + va_start(args, szExtraInfoFormat); + outputMessage(loc, szReason, szToken, szExtraInfoFormat, EPrefixError, args); + va_end(args); + + if ((messages & EShMsgCascadingErrors) == 0) + currentScanner->setEndOfInput(); +} + +void C_DECL TParseContextBase::ppWarn(const TSourceLoc& loc, const char* szReason, const char* szToken, + const char* szExtraInfoFormat, ...) +{ + va_list args; + va_start(args, szExtraInfoFormat); + outputMessage(loc, szReason, szToken, szExtraInfoFormat, EPrefixWarning, args); + va_end(args); +} + +// +// Both test and if necessary, spit out an error, to see if the node is really +// an l-value that can be operated on this way. +// +// Returns true if there was an error. +// +bool TParseContextBase::lValueErrorCheck(const TSourceLoc& loc, const char* op, TIntermTyped* node) +{ + TIntermBinary* binaryNode = node->getAsBinaryNode(); + + if (binaryNode) { + switch(binaryNode->getOp()) { + case EOpIndexDirect: + case EOpIndexIndirect: // fall through + case EOpIndexDirectStruct: // fall through + case EOpVectorSwizzle: + case EOpMatrixSwizzle: + return lValueErrorCheck(loc, op, binaryNode->getLeft()); + default: + break; + } + error(loc, " l-value required", op, "", ""); + + return true; + } + + const char* symbol = nullptr; + TIntermSymbol* symNode = node->getAsSymbolNode(); + if (symNode != nullptr) + symbol = symNode->getName().c_str(); + + const char* message = nullptr; + switch (node->getQualifier().storage) { + case EvqConst: message = "can't modify a const"; break; + case EvqConstReadOnly: message = "can't modify a const"; break; + case EvqUniform: message = "can't modify a uniform"; break; + case EvqBuffer: + if (node->getQualifier().readonly) + message = "can't modify a readonly buffer"; + break; + + default: + // + // Type that can't be written to? + // + switch (node->getBasicType()) { + case EbtSampler: + message = "can't modify a sampler"; + break; + case EbtAtomicUint: + message = "can't modify an atomic_uint"; + break; + case EbtVoid: + message = "can't modify void"; + break; + default: + break; + } + } + + if (message == nullptr && binaryNode == nullptr && symNode == nullptr) { + error(loc, " l-value required", op, "", ""); + + return true; + } + + // + // Everything else is okay, no error. + // + if (message == nullptr) + return false; + + // + // If we get here, we have an error and a message. + // + if (symNode) + error(loc, " l-value required", op, "\"%s\" (%s)", symbol, message); + else + error(loc, " l-value required", op, "(%s)", message); + + return true; +} + +// Test for and give an error if the node can't be read from. +void TParseContextBase::rValueErrorCheck(const TSourceLoc& loc, const char* op, TIntermTyped* node) +{ + if (! node) + return; + + TIntermBinary* binaryNode = node->getAsBinaryNode(); + if (binaryNode) { + switch(binaryNode->getOp()) { + case EOpIndexDirect: + case EOpIndexIndirect: + case EOpIndexDirectStruct: + case EOpVectorSwizzle: + case EOpMatrixSwizzle: + rValueErrorCheck(loc, op, binaryNode->getLeft()); + default: + break; + } + + return; + } + + TIntermSymbol* symNode = node->getAsSymbolNode(); + if (symNode && symNode->getQualifier().writeonly) + error(loc, "can't read from writeonly object: ", op, symNode->getName().c_str()); +} + +// Add 'symbol' to the list of deferred linkage symbols, which +// are later processed in finish(), at which point the symbol +// must still be valid. +// It is okay if the symbol's type will be subsequently edited; +// the modifications will be tracked. +void TParseContextBase::trackLinkage(TSymbol& symbol) +{ + if (!parsingBuiltins) + linkageSymbols.push_back(&symbol); +} + +// 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), +// or adopting its full type after being edited (shallow type). +void TParseContextBase::makeEditable(TSymbol*& symbol) +{ + // copyUp() does a deep copy of the type. + symbol = symbolTable.copyUp(symbol); + + // Save it (deferred, so it can be edited first) in the AST for linker use. + if (symbol) + trackLinkage(*symbol); +} + +// Return a writable version of the variable 'name'. +// +// Return nullptr if 'name' is not found. This should mean +// something is seriously wrong (e.g., compiler asking self for +// built-in that doesn't exist). +TVariable* TParseContextBase::getEditableVariable(const char* name) +{ + bool builtIn; + TSymbol* symbol = symbolTable.find(name, &builtIn); + + assert(symbol != nullptr); + if (symbol == nullptr) + return nullptr; + + if (builtIn) + makeEditable(symbol); + + return symbol->getAsVariable(); +} + +// Select the best matching function for 'call' from 'candidateList'. +// +// Assumptions +// +// There is no exact match, so a selection algorithm needs to run. That is, the +// language-specific handler should check for exact match first, to +// decide what to do, before calling this selector. +// +// Input +// +// * list of candidate signatures to select from +// * the call +// * a predicate function convertible(from, to) that says whether or not type +// 'from' can implicitly convert to type 'to' (it includes the case of what +// the calling language would consider a matching type with no conversion +// needed) +// * a predicate function better(from1, from2, to1, to2) that says whether or +// not a conversion from <-> to2 is considered better than a conversion +// from <-> to1 (both in and out directions need testing, as declared by the +// formal parameter) +// +// Output +// +// * best matching candidate (or none, if no viable candidates found) +// * whether there was a tie for the best match (ambiguous overload selection, +// caller's choice for how to report) +// +const TFunction* TParseContextBase::selectFunction( + const TVector candidateList, + const TFunction& call, + std::function convertible, + std::function better, + /* output */ bool& tie) +{ +// +// Operation +// +// 1. Prune the input list of candidates down to a list of viable candidates, +// where each viable candidate has +// +// * at least as many parameters as there are calling arguments, with any +// remaining parameters being optional or having default values +// * each parameter is true under convertible(A, B), where A is the calling +// type for in and B is the formal type, and in addition, for out B is the +// calling type and A is the formal type +// +// 2. If there are no viable candidates, return with no match. +// +// 3. If there is only one viable candidate, it is the best match. +// +// 4. If there are multiple viable candidates, select the first viable candidate +// as the incumbent. Compare the incumbent to the next viable candidate, and if +// that candidate is better (bullets below), make it the incumbent. Repeat, with +// a linear walk through the viable candidate list. The final incumbent will be +// returned as the best match. A viable candidate is better than the incumbent if +// +// * it has a function argument with a better(...) conversion than the incumbent, +// for all directions needed by in and out +// * the incumbent has no argument with a better(...) conversion then the +// candidate, for either in or out (as needed) +// +// 5. Check for ambiguity by comparing the best match against all other viable +// candidates. If any other viable candidate has a function argument with a +// better(...) conversion than the best candidate (for either in or out +// directions), return that there was a tie for best. +// + + tie = false; + + // 1. prune to viable... + TVector viableCandidates; + for (auto it = candidateList.begin(); it != candidateList.end(); ++it) { + const TFunction& candidate = *(*it); + + // to even be a potential match, number of arguments must be >= the number of + // fixed (non-default) parameters, and <= the total (including parameter with defaults). + if (call.getParamCount() < candidate.getFixedParamCount() || + call.getParamCount() > candidate.getParamCount()) + continue; + + // see if arguments are convertible + bool viable = true; + + // The call can have fewer parameters than the candidate, if some have defaults. + const int paramCount = std::min(call.getParamCount(), candidate.getParamCount()); + for (int param = 0; param < paramCount; ++param) { + if (candidate[param].type->getQualifier().isParamInput()) { + if (! convertible(*call[param].type, *candidate[param].type, candidate.getBuiltInOp(), param)) { + viable = false; + break; + } + } + if (candidate[param].type->getQualifier().isParamOutput()) { + if (! convertible(*candidate[param].type, *call[param].type, candidate.getBuiltInOp(), param)) { + viable = false; + break; + } + } + } + + if (viable) + viableCandidates.push_back(&candidate); + } + + // 2. none viable... + if (viableCandidates.size() == 0) + return nullptr; + + // 3. only one viable... + if (viableCandidates.size() == 1) + return viableCandidates.front(); + + // 4. find best... + const auto betterParam = [&call, &better](const TFunction& can1, const TFunction& can2) -> bool { + // is call -> can2 better than call -> can1 for any parameter + bool hasBetterParam = false; + for (int param = 0; param < call.getParamCount(); ++param) { + if (better(*call[param].type, *can1[param].type, *can2[param].type)) { + hasBetterParam = true; + break; + } + } + return hasBetterParam; + }; + + const auto equivalentParams = [&call, &better](const TFunction& can1, const TFunction& can2) -> bool { + // is call -> can2 equivalent to call -> can1 for all the call parameters? + for (int param = 0; param < call.getParamCount(); ++param) { + if (better(*call[param].type, *can1[param].type, *can2[param].type) || + better(*call[param].type, *can2[param].type, *can1[param].type)) + return false; + } + return true; + }; + + const TFunction* incumbent = viableCandidates.front(); + for (auto it = viableCandidates.begin() + 1; it != viableCandidates.end(); ++it) { + const TFunction& candidate = *(*it); + if (betterParam(*incumbent, candidate) && ! betterParam(candidate, *incumbent)) + incumbent = &candidate; + } + + // 5. ambiguity... + for (auto it = viableCandidates.begin(); it != viableCandidates.end(); ++it) { + if (incumbent == *it) + continue; + const TFunction& candidate = *(*it); + + // In the case of default parameters, it may have an identical initial set, which is + // also ambiguous + if (betterParam(*incumbent, candidate) || equivalentParams(*incumbent, candidate)) + tie = true; + } + + return incumbent; +} + +// +// Look at a '.' field selector string and change it into numerical selectors +// for a vector or scalar. +// +// Always return some form of swizzle, so the result is always usable. +// +void TParseContextBase::parseSwizzleSelector(const TSourceLoc& loc, const TString& compString, int vecSize, + TSwizzleSelectors& selector) +{ + // Too long? + if (compString.size() > MaxSwizzleSelectors) + error(loc, "vector swizzle too long", compString.c_str(), ""); + + // Use this to test that all swizzle characters are from the same swizzle-namespace-set + enum { + exyzw, + ergba, + estpq, + } fieldSet[MaxSwizzleSelectors]; + + // Decode the swizzle string. + int size = std::min(MaxSwizzleSelectors, (int)compString.size()); + for (int i = 0; i < size; ++i) { + switch (compString[i]) { + case 'x': + selector.push_back(0); + fieldSet[i] = exyzw; + break; + case 'r': + selector.push_back(0); + fieldSet[i] = ergba; + break; + case 's': + selector.push_back(0); + fieldSet[i] = estpq; + break; + + case 'y': + selector.push_back(1); + fieldSet[i] = exyzw; + break; + case 'g': + selector.push_back(1); + fieldSet[i] = ergba; + break; + case 't': + selector.push_back(1); + fieldSet[i] = estpq; + break; + + case 'z': + selector.push_back(2); + fieldSet[i] = exyzw; + break; + case 'b': + selector.push_back(2); + fieldSet[i] = ergba; + break; + case 'p': + selector.push_back(2); + fieldSet[i] = estpq; + break; + + case 'w': + selector.push_back(3); + fieldSet[i] = exyzw; + break; + case 'a': + selector.push_back(3); + fieldSet[i] = ergba; + break; + case 'q': + selector.push_back(3); + fieldSet[i] = estpq; + break; + + default: + error(loc, "unknown swizzle selection", compString.c_str(), ""); + break; + } + } + + // Additional error checking. + for (int i = 0; i < selector.size(); ++i) { + if (selector[i] >= vecSize) { + error(loc, "vector swizzle selection out of range", compString.c_str(), ""); + selector.resize(i); + break; + } + + if (i > 0 && fieldSet[i] != fieldSet[i-1]) { + error(loc, "vector swizzle selectors not from the same set", compString.c_str(), ""); + selector.resize(i); + break; + } + } + + // Ensure it is valid. + if (selector.size() == 0) + selector.push_back(0); +} + +// +// 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) +{ + // Make the global block, if not yet made. + if (globalUniformBlock == nullptr) { + TQualifier blockQualifier; + blockQualifier.clear(); + blockQualifier.storage = EvqUniform; + TType blockType(new TTypeList, *NewPoolTString(getGlobalUniformBlockName()), blockQualifier); + setUniformBlockDefaults(blockType); + globalUniformBlock = new TVariable(NewPoolTString(""), blockType, true); + firstNewMember = 0; + } + + // Add the requested member as a member to the global block. + TType* type = new TType; + type->shallowCopy(memberType); + type->setFieldName(memberName); + if (typeList) + type->setStruct(typeList); + TTypeLoc typeLoc = {type, loc}; + globalUniformBlock->getType().getWritableStruct()->push_back(typeLoc); + + // Insert into the symbol table. + if (firstNewMember == 0) { + // This is the first request; we need a normal symbol table insert + if (symbolTable.insert(*globalUniformBlock)) + trackLinkage(*globalUniformBlock); + else + error(loc, "failed to insert the global constant buffer", "uniform", ""); + } else { + // This is a follow-on request; we need to amend the first insert + symbolTable.amend(*globalUniformBlock, firstNewMember); + } + + ++firstNewMember; +} + +void TParseContextBase::finish() +{ + if (parsingBuiltins) + return; + + // Transfer the linkage symbols to AST nodes + TIntermAggregate* linkage = new TIntermAggregate; + for (auto i = linkageSymbols.begin(); i != linkageSymbols.end(); ++i) + intermediate.addSymbolLinkageNode(linkage, **i); + intermediate.addSymbolLinkageNodes(linkage, getLanguage(), symbolTable); +} + +} // end namespace glslang diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.cpp new file mode 100644 index 0000000..78f459a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.cpp @@ -0,0 +1,6277 @@ +// +// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +// Copyright (C) 2012-2015 LunarG, Inc. +// Copyright (C) 2015-2016 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. +// + +#include "ParseHelper.h" +#include "Scan.h" + +#include "../OSDependent/osinclude.h" +#include + +#include "preprocessor/PpContext.h" + +extern int yyparse(glslang::TParseContext*); + +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), + limits(resources.limits), + atomicUintOffsets(nullptr), anyIndexLimits(false) +{ + // decide whether precision qualifiers should be ignored or respected + if (profile == EEsProfile || spvVersion.vulkan > 0) { + precisionManager.respectPrecisionQualifiers(); + if (! parsingBuiltins && language == EShLangFragment && profile != EEsProfile && spvVersion.vulkan > 0) + precisionManager.warnAboutDefaults(); + } + + setPrecisionDefaults(); + + globalUniformDefaults.clear(); + globalUniformDefaults.layoutMatrix = ElmColumnMajor; + globalUniformDefaults.layoutPacking = spvVersion.spv != 0 ? ElpStd140 : ElpShared; + + globalBufferDefaults.clear(); + globalBufferDefaults.layoutMatrix = ElmColumnMajor; + globalBufferDefaults.layoutPacking = spvVersion.spv != 0 ? ElpStd430 : ElpShared; + + globalInputDefaults.clear(); + globalOutputDefaults.clear(); + + // "Shaders in the transform + // feedback capturing mode have an initial global default of + // layout(xfb_buffer = 0) out;" + if (language == EShLangVertex || + language == EShLangTessControl || + language == EShLangTessEvaluation || + language == EShLangGeometry) + globalOutputDefaults.layoutXfbBuffer = 0; + + if (language == EShLangGeometry) + globalOutputDefaults.layoutStream = 0; +} + +TParseContext::~TParseContext() +{ + delete [] atomicUintOffsets; +} + +// Set up all default precisions as needed by the current environment. +// Intended just as a TParseContext constructor helper. +void TParseContext::setPrecisionDefaults() +{ + // Set all precision defaults to EpqNone, which is correct for all types + // when not obeying precision qualifiers, and correct for types that don't + // have defaults (thus getting an error on use) when obeying precision + // qualifiers. + + for (int type = 0; type < EbtNumTypes; ++type) + defaultPrecision[type] = EpqNone; + + for (int type = 0; type < maxSamplerIndex; ++type) + defaultSamplerPrecision[type] = EpqNone; + + // replace with real precision defaults for those that have them + if (obeyPrecisionQualifiers()) { + if (profile == EEsProfile) { + // Most don't have defaults, a few default to lowp. + TSampler sampler; + sampler.set(EbtFloat, Esd2D); + defaultSamplerPrecision[computeSamplerTypeIndex(sampler)] = EpqLow; + sampler.set(EbtFloat, EsdCube); + defaultSamplerPrecision[computeSamplerTypeIndex(sampler)] = EpqLow; + 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 + // whether the built-in has no precision qualifier, as that ambiguity + // is used to resolve the precision from the supplied arguments/operands instead. + // So, we don't actually want to replace EpqNone with a default precision for built-ins. + if (! parsingBuiltins) { + if (profile == EEsProfile && language == EShLangFragment) { + defaultPrecision[EbtInt] = EpqMedium; + defaultPrecision[EbtUint] = EpqMedium; + } else { + defaultPrecision[EbtInt] = EpqHigh; + defaultPrecision[EbtUint] = EpqHigh; + defaultPrecision[EbtFloat] = EpqHigh; + } + } + + defaultPrecision[EbtSampler] = EpqLow; + defaultPrecision[EbtAtomicUint] = EpqHigh; + } +} + +void TParseContext::setLimits(const TBuiltInResource& r) +{ + resources = r; + + anyIndexLimits = ! limits.generalAttributeMatrixVectorIndexing || + ! limits.generalConstantMatrixVectorIndexing || + ! limits.generalSamplerIndexing || + ! limits.generalUniformIndexing || + ! limits.generalVariableIndexing || + ! limits.generalVaryingIndexing; + + intermediate.setLimits(resources); + + // "Each binding point tracks its own current default offset for + // inheritance of subsequent variables using the same binding. The initial state of compilation is that all + // binding points have an offset of 0." + atomicUintOffsets = new int[resources.maxAtomicCounterBindings]; + for (int b = 0; b < resources.maxAtomicCounterBindings; ++b) + atomicUintOffsets[b] = 0; +} + +// +// Parse an array of strings using yyparse, going through the +// preprocessor to tokenize the shader strings, then through +// the GLSL scanner. +// +// Returns true for successful acceptance of the shader, false if any errors. +// +bool TParseContext::parseShaderStrings(TPpContext& ppContext, TInputScanner& input, bool versionWillBeError) +{ + currentScanner = &input; + ppContext.setInput(input, versionWillBeError); + yyparse(this); + + finish(); + + return numErrors == 0; +} + +// This is called from bison when it has a parse (syntax) error +// Note though that to stop cascading errors, we set EOF, which +// will usually cause a syntax error, so be more accurate that +// compilation is terminating. +void TParseContext::parserError(const char* s) +{ + if (! getScanner()->atEndOfInput() || numErrors == 0) + error(getCurrentLoc(), "", "", s, ""); + else + error(getCurrentLoc(), "compilation terminated", "", ""); +} + +void TParseContext::handlePragma(const TSourceLoc& loc, const TVector& tokens) +{ + if (pragmaCallback) + pragmaCallback(loc.line, tokens); + + if (tokens.size() == 0) + return; + + if (tokens[0].compare("optimize") == 0) { + if (tokens.size() != 4) { + error(loc, "optimize pragma syntax is incorrect", "#pragma", ""); + return; + } + + if (tokens[1].compare("(") != 0) { + error(loc, "\"(\" expected after 'optimize' keyword", "#pragma", ""); + return; + } + + if (tokens[2].compare("on") == 0) + contextPragma.optimize = true; + else if (tokens[2].compare("off") == 0) + contextPragma.optimize = false; + else { + error(loc, "\"on\" or \"off\" expected after '(' for 'optimize' pragma", "#pragma", ""); + return; + } + + if (tokens[3].compare(")") != 0) { + error(loc, "\")\" expected to end 'optimize' pragma", "#pragma", ""); + return; + } + } else if (tokens[0].compare("debug") == 0) { + if (tokens.size() != 4) { + error(loc, "debug pragma syntax is incorrect", "#pragma", ""); + return; + } + + if (tokens[1].compare("(") != 0) { + error(loc, "\"(\" expected after 'debug' keyword", "#pragma", ""); + return; + } + + if (tokens[2].compare("on") == 0) + contextPragma.debug = true; + else if (tokens[2].compare("off") == 0) + contextPragma.debug = false; + else { + error(loc, "\"on\" or \"off\" expected after '(' for 'debug' pragma", "#pragma", ""); + return; + } + + if (tokens[3].compare(")") != 0) { + error(loc, "\")\" expected to end 'debug' pragma", "#pragma", ""); + return; + } + } +} + +// +// Handle seeing a variable identifier in the grammar. +// +TIntermTyped* TParseContext::handleVariable(const TSourceLoc& loc, TSymbol* symbol, const TString* string) +{ + TIntermTyped* node = nullptr; + + // Error check for requiring specific extensions present. + if (symbol && symbol->getNumExtensions()) + requireExtensions(loc, symbol->getNumExtensions(), symbol->getExtensions(), symbol->getName().c_str()); + + if (symbol && symbol->isReadOnly()) { + // All shared things containing an implicitly sized array must be copied up + // on first use, so that all future references will share its array structure, + // so that editing the implicit size will effect all nodes consuming it, + // and so that editing the implicit size won't change the shared one. + // + // If this is a variable or a block, check it and all it contains, but if this + // is a member of an anonymous block, check the whole block, as the whole block + // will need to be copied up if it contains an implicitly-sized array. + if (symbol->getType().containsImplicitlySizedArray() || + (symbol->getAsAnonMember() && + symbol->getAsAnonMember()->getAnonContainer().getType().containsImplicitlySizedArray())) + makeEditable(symbol); + } + + const TVariable* variable; + const TAnonMember* anon = symbol ? symbol->getAsAnonMember() : nullptr; + if (anon) { + // It was a member of an anonymous container. + + // The "getNumExtensions()" mechanism above doesn't yet work for block members + blockMemberExtensionCheck(loc, nullptr, *string); + + // Create a subtree for its dereference. + variable = anon->getAnonContainer().getAsVariable(); + TIntermTyped* container = intermediate.addSymbol(*variable, loc); + TIntermTyped* constNode = intermediate.addConstantUnion(anon->getMemberNumber(), loc); + node = intermediate.addIndex(EOpIndexDirectStruct, container, constNode, loc); + + node->setType(*(*variable->getType().getStruct())[anon->getMemberNumber()].type); + if (node->getType().hiddenMember()) + error(loc, "member of nameless block was not redeclared", string->c_str(), ""); + } else { + // Not a member of an anonymous container. + + // The symbol table search was done in the lexical phase. + // See if it was a variable. + variable = symbol ? symbol->getAsVariable() : nullptr; + if (variable) { + if ((variable->getType().getBasicType() == EbtBlock || + variable->getType().getBasicType() == EbtStruct) && variable->getType().getStruct() == nullptr) { + error(loc, "cannot be used (maybe an instance name is needed)", string->c_str(), ""); + variable = nullptr; + } + } else { + if (symbol) + error(loc, "variable name expected", string->c_str(), ""); + } + + // Recovery, if it wasn't found or was not a variable. + if (! variable) + variable = new TVariable(string, TType(EbtVoid)); + + if (variable->getType().getQualifier().isFrontEndConstant()) + node = intermediate.addConstantUnion(variable->getConstArray(), variable->getType(), loc); + else + node = intermediate.addSymbol(*variable, loc); + } + + if (variable->getType().getQualifier().isIo()) + intermediate.addIoAccessed(*string); + + return node; +} + +// +// Handle seeing a base[index] dereference in the grammar. +// +TIntermTyped* TParseContext::handleBracketDereference(const TSourceLoc& loc, TIntermTyped* base, TIntermTyped* index) +{ + TIntermTyped* result = nullptr; + + int indexValue = 0; + 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(), ""); + else + error(loc, " left of '[' is not of type array, matrix, or vector ", "expression", ""); + } else if (base->getType().getQualifier().isFrontEndConstant() && index->getQualifier().isFrontEndConstant()) + return intermediate.foldDereference(base, indexValue, loc); + else { + // at least one of base and index is variable... + + if (base->getAsSymbolNode() && isIoResizeArray(base->getType())) + handleIoResizeArrayAccess(loc, base); + + if (index->getQualifier().isFrontEndConstant()) { + if (base->getType().isImplicitlySizedArray()) + updateImplicitArraySize(loc, base, indexValue); + result = intermediate.addIndex(EOpIndexDirect, base, index, loc); + } else { + if (base->getType().isImplicitlySizedArray()) { + if (base->getAsSymbolNode() && isIoResizeArray(base->getType())) + error(loc, "", "[", "array must be sized by a redeclaration or layout qualifier before being indexed with a variable"); + else + error(loc, "", "[", "array must be redeclared with a size before being indexed with a variable"); + } + if (base->getBasicType() == EbtBlock) { + 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"); + else { + // input/output blocks either don't exist or can be variable indexed + } + } else if (language == EShLangFragment && base->getQualifier().isPipeOutput()) + requireProfile(base->getLoc(), ~EEsProfile, "variable indexing fragment shader output array"); + 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(), ECoreProfile | ECompatibilityProfile, 400, nullptr, explanation); + } + + result = intermediate.addIndex(EOpIndexIndirect, base, index, loc); + } + } + + if (result == nullptr) { + // Insert dummy error-recovery result + result = intermediate.addConstantUnion(0.0, EbtFloat, loc); + } else { + // Insert valid dereferenced result + TType newType(base->getType(), 0); // dereferenced type + if (base->getType().getQualifier().isConstant() && index->getQualifier().isConstant()) { + newType.getQualifier().storage = EvqConst; + // If base or index is a specialization constant, the result should also be a specialization constant. + if (base->getType().getQualifier().isSpecConstant() || index->getQualifier().isSpecConstant()) { + newType.getQualifier().makeSpecConstant(); + } + } else { + newType.getQualifier().makePartialTemporary(); + } + result->setType(newType); + + if (anyIndexLimits) + handleIndexLimits(loc, base, index); + } + + 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) +{ + if ((! limits.generalSamplerIndexing && base->getBasicType() == EbtSampler) || + (! limits.generalUniformIndexing && base->getQualifier().isUniformOrBuffer() && language != EShLangVertex) || + (! limits.generalAttributeMatrixVectorIndexing && base->getQualifier().isPipeInput() && language == EShLangVertex && (base->getType().isMatrix() || base->getType().isVector())) || + (! limits.generalConstantMatrixVectorIndexing && base->getAsConstantUnion()) || + (! limits.generalVariableIndexing && ! base->getType().getQualifier().isUniformOrBuffer() && + ! base->getType().getQualifier().isPipeInput() && + ! base->getType().getQualifier().isPipeOutput() && + ! base->getType().getQualifier().isConstant()) || + (! limits.generalVaryingIndexing && (base->getType().getQualifier().isPipeInput() || + base->getType().getQualifier().isPipeOutput()))) { + // it's too early to know what the inductive variables are, save it for post processing + needsIndexLimitationChecking.push_back(index); + } +} + +// 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 sharing it. +void TParseContext::makeEditable(TSymbol*& symbol) +{ + TParseContextBase::makeEditable(symbol); + + // See if it's tied to IO resizing + if (isIoResizeArray(symbol->getType())) + ioArraySymbolResizeList.push_back(symbol); +} + +// Return true if this is a geometry shader input array or tessellation control output array. +bool TParseContext::isIoResizeArray(const TType& type) const +{ + return type.isArray() && + ((language == EShLangGeometry && type.getQualifier().storage == EvqVaryingIn) || + (language == EShLangTessControl && type.getQualifier().storage == EvqVaryingOut && ! type.getQualifier().patch)); +} + +// If an array is not isIoResizeArray() but is an io array, make sure it has the right size +void TParseContext::fixIoArraySize(const TSourceLoc& loc, TType& type) +{ + if (! type.isArray() || type.getQualifier().patch || symbolTable.atBuiltInLevel()) + return; + + assert(! isIoResizeArray(type)); + + if (type.getQualifier().storage != EvqVaryingIn || type.getQualifier().patch) + return; + + if (language == EShLangTessControl || language == EShLangTessEvaluation) { + if (type.getOuterArraySize() != resources.maxPatchVertices) { + if (type.isExplicitlySizedArray()) + error(loc, "tessellation input array size must be gl_MaxPatchVertices or implicitly sized", "[]", ""); + type.changeOuterArraySize(resources.maxPatchVertices); + } + } +} + +// Issue any errors if the non-array object is missing arrayness WRT +// shader I/O that has array requirements. +// All arrayness checking is handled in array paths, this is for +void TParseContext::ioArrayCheck(const TSourceLoc& loc, const TType& type, const TString& identifier) +{ + if (! type.isArray() && ! symbolTable.atBuiltInLevel()) { + if (type.getQualifier().isArrayedIo(language) +#ifdef NV_EXTENSIONS + && !type.getQualifier().layoutPassthrough +#endif + ) + error(loc, "type must be an array:", type.getStorageQualifierString(), identifier.c_str()); + } +} + +// Handle a dereference of a geometry shader input array or tessellation control output array. +// See ioArraySymbolResizeList comment in ParseHelper.h. +// +void TParseContext::handleIoResizeArrayAccess(const TSourceLoc& /*loc*/, TIntermTyped* base) +{ + TIntermSymbol* symbolNode = base->getAsSymbolNode(); + assert(symbolNode); + if (! symbolNode) + return; + + // fix array size, if it can be fixed and needs to be fixed (will allow variable indexing) + if (symbolNode->getType().isImplicitlySizedArray()) { + int newSize = getIoArrayImplicitSize(); + if (newSize > 0) + symbolNode->getWritableType().changeOuterArraySize(newSize); + } +} + +// If there has been an input primitive declaration (geometry shader) or an output +// number of vertices declaration(tessellation shader), make sure all input array types +// match it in size. Types come either from nodes in the AST or symbols in the +// symbol table. +// +// Types without an array size will be given one. +// Types already having a size that is wrong will get an error. +// +void TParseContext::checkIoArraysConsistency(const TSourceLoc& loc, bool tailOnly) +{ + int requiredSize = getIoArrayImplicitSize(); + if (requiredSize == 0) + return; + + const char* feature; + if (language == EShLangGeometry) + feature = TQualifier::getGeometryString(intermediate.getInputPrimitive()); + else if (language == EShLangTessControl) + feature = "vertices"; + else + feature = "unknown"; + + if (tailOnly) { + checkIoArrayConsistency(loc, requiredSize, feature, ioArraySymbolResizeList.back()->getWritableType(), ioArraySymbolResizeList.back()->getName()); + return; + } + + for (size_t i = 0; i < ioArraySymbolResizeList.size(); ++i) + checkIoArrayConsistency(loc, requiredSize, feature, ioArraySymbolResizeList[i]->getWritableType(), ioArraySymbolResizeList[i]->getName()); +} + +int TParseContext::getIoArrayImplicitSize() const +{ + if (language == EShLangGeometry) + return TQualifier::mapGeometryToSize(intermediate.getInputPrimitive()); + else if (language == EShLangTessControl) + return intermediate.getVertices() != TQualifier::layoutNotSet ? intermediate.getVertices() : 0; + else + return 0; +} + +void TParseContext::checkIoArrayConsistency(const TSourceLoc& loc, int requiredSize, const char* feature, TType& type, const TString& name) +{ + if (type.isImplicitlySizedArray()) + type.changeOuterArraySize(requiredSize); + else if (type.getOuterArraySize() != requiredSize) { + if (language == EShLangGeometry) + error(loc, "inconsistent input primitive for array size of", feature, name.c_str()); + else if (language == EShLangTessControl) + error(loc, "inconsistent output number of vertices for array size of", feature, name.c_str()); + else + assert(0); + } +} + +// Handle seeing a binary node with a math operation. +// Returns nullptr if not semantically allowed. +TIntermTyped* TParseContext::handleBinaryMath(const TSourceLoc& loc, const char* str, TOperator op, TIntermTyped* left, TIntermTyped* right) +{ + rValueErrorCheck(loc, str, left->getAsTyped()); + rValueErrorCheck(loc, str, right->getAsTyped()); + + bool allowed = true; + switch (op) { + // TODO: Bring more source language-specific checks up from intermediate.cpp + // to the specific parse helpers for that source language. + case EOpLessThan: + case EOpGreaterThan: + case EOpLessThanEqual: + case EOpGreaterThanEqual: + if (! left->isScalar() || ! right->isScalar()) + allowed = false; + break; + default: + break; + } + + TIntermTyped* result = nullptr; + if (allowed) + result = intermediate.addBinaryMath(op, left, right, loc); + + if (result == nullptr) + binaryOpError(loc, str, left->getCompleteString(), right->getCompleteString()); + + return result; +} + +// Handle seeing a unary node with a math operation. +TIntermTyped* TParseContext::handleUnaryMath(const TSourceLoc& loc, const char* str, TOperator op, TIntermTyped* childNode) +{ + rValueErrorCheck(loc, str, childNode); + + TIntermTyped* result = intermediate.addUnaryMath(op, childNode, loc); + + if (result) + return result; + else + unaryOpError(loc, str, childNode->getCompleteString()); + + return childNode; +} + +// +// Handle seeing a base.field dereference in the grammar. +// +TIntermTyped* TParseContext::handleDotDereference(const TSourceLoc& loc, TIntermTyped* base, const TString& field) +{ + variableCheck(base); + + // + // .length() can't be resolved until we later see the function-calling syntax. + // Save away the name in the AST for now. Processing is completed in + // handleLengthMethod(). + // + if (field == "length") { + if (base->isArray()) { + profileRequires(loc, ENoProfile, 120, E_GL_3DL_array_objects, ".length"); + profileRequires(loc, EEsProfile, 300, nullptr, ".length"); + } else if (base->isVector() || base->isMatrix()) { + const char* feature = ".length() on vectors and matrices"; + requireProfile(loc, ~EEsProfile, feature); + profileRequires(loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, feature); + } else { + error(loc, "does not operate on this type:", field.c_str(), base->getType().getCompleteString().c_str()); + + return base; + } + + return intermediate.addMethod(base, TType(EbtInt), &field, loc); + } + + // It's not .length() if we get to here. + + if (base->isArray()) { + error(loc, "cannot apply to an array:", ".", field.c_str()); + + return base; + } + + // It's neither an array nor .length() if we get here, + // leaving swizzles and struct/block dereferences. + + TIntermTyped* result = base; + if (base->isVector() || base->isScalar()) { + if (base->isScalar()) { + const char* dotFeature = "scalar swizzle"; + requireProfile(loc, ~EEsProfile, dotFeature); + profileRequires(loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, dotFeature); + } + + TSwizzleSelectors selectors; + parseSwizzleSelector(loc, field, base->getVectorSize(), selectors); + + if (base->isScalar()) { + if (selectors.size() == 1) + return result; + else { + TType type(base->getBasicType(), EvqTemporary, selectors.size()); + // Swizzle operations propagate specialization-constantness + if (base->getQualifier().isSpecConstant()) + type.getQualifier().makeSpecConstant(); + return addConstructor(loc, base, type); + } + } + + if (base->getType().getQualifier().isFrontEndConstant()) + result = intermediate.foldSwizzle(base, selectors, loc); + else { + if (selectors.size() == 1) { + TIntermTyped* index = intermediate.addConstantUnion(selectors[0], loc); + result = intermediate.addIndex(EOpIndexDirect, base, index, loc); + result->setType(TType(base->getBasicType(), EvqTemporary, base->getType().getQualifier().precision)); + } 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())); + } + // Swizzle operations propagate specialization-constantness + if (base->getType().getQualifier().isSpecConstant()) + result->getWritableType().getQualifier().makeSpecConstant(); + } + } else if (base->getBasicType() == EbtStruct || base->getBasicType() == EbtBlock) { + const TTypeList* fields = base->getType().getStruct(); + bool fieldFound = false; + int member; + for (member = 0; member < (int)fields->size(); ++member) { + if ((*fields)[member].type->getFieldName() == field) { + fieldFound = true; + break; + } + } + if (fieldFound) { + if (base->getType().getQualifier().isFrontEndConstant()) + result = intermediate.foldDereference(base, member, loc); + else { + blockMemberExtensionCheck(loc, base, field); + TIntermTyped* index = intermediate.addConstantUnion(member, loc); + result = intermediate.addIndex(EOpIndexDirectStruct, base, index, loc); + result->setType(*(*fields)[member].type); + } + } else + error(loc, "no such field in structure", field.c_str(), ""); + } else + error(loc, "does not apply to this type:", field.c_str(), base->getType().getCompleteString().c_str()); + + // Propagate noContraction up the dereference chain + if (base->getQualifier().noContraction) + result->getWritableType().getQualifier().noContraction = true; + + return result; +} + +void TParseContext::blockMemberExtensionCheck(const TSourceLoc& loc, const TIntermTyped* /*base*/, const TString& field) +{ + if (profile == EEsProfile && field == "gl_PointSize") { + if (language == EShLangGeometry) + requireExtensions(loc, Num_AEP_geometry_point_size, AEP_geometry_point_size, "gl_PointSize"); + else if (language == EShLangTessControl || language == EShLangTessEvaluation) + requireExtensions(loc, Num_AEP_tessellation_point_size, AEP_tessellation_point_size, "gl_PointSize"); + } +} + +// +// Handle seeing a function declarator in the grammar. This is the precursor +// to recognizing a function prototype or function definition. +// +TFunction* TParseContext::handleFunctionDeclarator(const TSourceLoc& loc, TFunction& function, bool prototype) +{ + // ES can't declare prototypes inside functions + if (! symbolTable.atGlobalLevel()) + requireProfile(loc, ~EEsProfile, "local function declaration"); + + // + // Multiple declarations of the same function name are allowed. + // + // If this is a definition, the definition production code will check for redefinitions + // (we don't know at this point if it's a definition or not). + // + // Redeclarations (full signature match) are allowed. But, return types and parameter qualifiers must also match. + // - except ES 100, which only allows a single prototype + // + // ES 100 does not allow redefining, but does allow overloading of built-in functions. + // ES 300 does not allow redefining or overloading of built-in functions. + // + bool builtIn; + TSymbol* symbol = symbolTable.find(function.getMangledName(), &builtIn); + if (symbol && symbol->getAsFunction() && builtIn) + requireProfile(loc, ~EEsProfile, "redefinition of built-in function"); + const TFunction* prevDec = symbol ? symbol->getAsFunction() : 0; + if (prevDec) { + if (prevDec->isPrototyped() && prototype) + profileRequires(loc, EEsProfile, 300, nullptr, "multiple prototypes for same function"); + if (prevDec->getType() != function.getType()) + error(loc, "overloaded functions must have the same return type", function.getType().getBasicTypeString().c_str(), ""); + for (int i = 0; i < prevDec->getParamCount(); ++i) { + if ((*prevDec)[i].type->getQualifier().storage != function[i].type->getQualifier().storage) + error(loc, "overloaded functions must have the same parameter storage qualifiers for argument", function[i].type->getStorageQualifierString(), "%d", i+1); + + if ((*prevDec)[i].type->getQualifier().precision != function[i].type->getQualifier().precision) + error(loc, "overloaded functions must have the same parameter precision qualifiers for argument", function[i].type->getPrecisionQualifierString(), "%d", i+1); + } + } + + arrayObjectCheck(loc, function.getType(), "array in function return type"); + + if (prototype) { + // All built-in functions are defined, even though they don't have a body. + // Count their prototype as a definition instead. + if (symbolTable.atBuiltInLevel()) + function.setDefined(); + else { + if (prevDec && ! builtIn) + symbol->getAsFunction()->setPrototyped(); // need a writable one, but like having prevDec as a const + function.setPrototyped(); + } + } + + // This insert won't actually insert it if it's a duplicate signature, but it will still check for + // other forms of name collisions. + if (! symbolTable.insert(function)) + error(loc, "function name is redeclaration of existing name", function.getName().c_str(), ""); + + // + // If this is a redeclaration, it could also be a definition, + // in which case, we need to use the parameter names from this one, and not the one that's + // being redeclared. So, pass back this declaration, not the one in the symbol table. + // + return &function; +} + +// +// Handle seeing the function prototype in front of a function definition in the grammar. +// The body is handled after this function returns. +// +TIntermAggregate* TParseContext::handleFunctionDefinition(const TSourceLoc& loc, TFunction& function) +{ + currentCaller = function.getMangledName(); + TSymbol* symbol = symbolTable.find(function.getMangledName()); + TFunction* prevDec = symbol ? symbol->getAsFunction() : nullptr; + + if (! prevDec) + 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 + // an earlier occurrence. + + if (prevDec && prevDec->isDefined()) { + // Then this function already has a body. + error(loc, "function already has a body", function.getName().c_str(), ""); + } + if (prevDec && ! prevDec->isDefined()) { + prevDec->setDefined(); + + // Remember the return type for later checking for RETURN statements. + currentFunctionType = &(prevDec->getType()); + } else + currentFunctionType = new TType(EbtVoid); + functionReturnsValue = false; + + // Check for entry point + if (function.getName().compare(intermediate.getEntryPointName().c_str()) == 0) { + intermediate.setEntryPointMangledName(function.getMangledName().c_str()); + intermediate.incrementEntryPointCount(); + inMain = true; + } else + inMain = false; + + // + // Raise error message if main function takes any parameters or returns anything other than void + // + if (inMain) { + if (function.getParamCount() > 0) + error(loc, "function cannot take any parameter(s)", function.getName().c_str(), ""); + if (function.getType().getBasicType() != EbtVoid) + error(loc, "", function.getType().getBasicTypeString().c_str(), "entry point cannot return a value"); + } + + // + // New symbol table scope for body of function plus its arguments + // + symbolTable.push(); + + // + // Insert parameters into the symbol table. + // If the parameter has no name, it's not an error, just don't insert it + // (could be used for unused args). + // + // Also, accumulate the list of parameters into the HIL, so lower level code + // knows where to find parameters. + // + TIntermAggregate* paramNodes = new TIntermAggregate; + for (int i = 0; i < function.getParamCount(); i++) { + TParameter& param = function[i]; + if (param.name != nullptr) { + TVariable *variable = new TVariable(param.name, *param.type); + + // Insert the parameters with name in the symbol table. + if (! symbolTable.insert(*variable)) + error(loc, "redefinition", variable->getName().c_str(), ""); + else { + // Transfer ownership of name pointer to symbol table. + param.name = nullptr; + + // Add the parameter to the HIL + paramNodes = intermediate.growAggregate(paramNodes, + intermediate.addSymbol(*variable, loc), + loc); + } + } else + paramNodes = intermediate.growAggregate(paramNodes, intermediate.addSymbol(*param.type, loc), loc); + } + intermediate.setAggregateOperator(paramNodes, EOpParameters, TType(EbtVoid), loc); + loopNestingLevel = 0; + statementNestingLevel = 0; + controlFlowNestingLevel = 0; + postMainReturn = false; + + return paramNodes; +} + +// +// Handle seeing function call syntax in the grammar, which could be any of +// - .length() method +// - constructor +// - a call to a built-in function mapped to an operator +// - a call to a built-in function that will remain a function call (e.g., texturing) +// - user function +// - subroutine call (not implemented yet) +// +TIntermTyped* TParseContext::handleFunctionCall(const TSourceLoc& loc, TFunction* function, TIntermNode* arguments) +{ + TIntermTyped* result = nullptr; + + if (function->getBuiltInOp() == EOpArrayLength) + result = handleLengthMethod(loc, function, arguments); + else if (function->getBuiltInOp() != EOpNull) { + // + // Then this should be a constructor. + // Don't go through the symbol table for constructors. + // Their parameters will be verified algorithmically. + // + TType type(EbtVoid); // use this to get the type back + if (! constructorError(loc, arguments, *function, function->getBuiltInOp(), type)) { + // + // It's a constructor, of type 'type'. + // + result = addConstructor(loc, arguments, type); + if (result == nullptr) + error(loc, "cannot construct with these arguments", type.getCompleteString().c_str(), ""); + } + } else { + // + // Find it in the symbol table. + // + const TFunction* fnCandidate; + bool builtIn; + fnCandidate = findFunction(loc, *function, builtIn); + if (fnCandidate) { + // This is a declared function that might map to + // - a built-in operator, + // - a built-in function not mapped to an operator, or + // - a user function. + + // Error check for a function requiring specific extensions present. + if (builtIn && fnCandidate->getNumExtensions()) + requireExtensions(loc, fnCandidate->getNumExtensions(), fnCandidate->getExtensions(), fnCandidate->getName().c_str()); + + if (arguments) { + // Make sure qualifications work for these arguments. + TIntermAggregate* aggregate = arguments->getAsAggregate(); + for (int i = 0; i < fnCandidate->getParamCount(); ++i) { + // 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. + TIntermNode* arg = fnCandidate->getParamCount() == 1 ? arguments : (aggregate ? aggregate->getSequence()[i] : arguments); + TQualifier& formalQualifier = (*fnCandidate)[i].type->getQualifier(); + if (formalQualifier.isParamOutput()) { + if (lValueErrorCheck(arguments->getLoc(), "assign", arg->getAsTyped())) + error(arguments->getLoc(), "Non-L-value cannot be passed for 'out' or 'inout' parameters.", "out", ""); + } + TQualifier& argQualifier = arg->getAsTyped()->getQualifier(); + if (argQualifier.isMemory()) { + const char* message = "argument cannot drop memory qualifier when passed to formal parameter"; + if (argQualifier.volatil && ! formalQualifier.volatil) + error(arguments->getLoc(), message, "volatile", ""); + if (argQualifier.coherent && ! formalQualifier.coherent) + error(arguments->getLoc(), message, "coherent", ""); + if (argQualifier.readonly && ! formalQualifier.readonly) + error(arguments->getLoc(), message, "readonly", ""); + if (argQualifier.writeonly && ! formalQualifier.writeonly) + error(arguments->getLoc(), message, "writeonly", ""); + } + // TODO 4.5 functionality: A shader will fail to compile + // if the value passed to the memargument of an atomic memory function does not correspond to a buffer or + // shared variable. It is acceptable to pass an element of an array or a single component of a vector to the + // memargument of an atomic memory function, as long as the underlying array or vector is a buffer or + // shared variable. + } + + // Convert 'in' arguments + addInputArgumentConversions(*fnCandidate, arguments); // arguments may be modified if it's just a single argument node + } + + if (builtIn && fnCandidate->getBuiltInOp() != EOpNull) { + // A function call mapped to a built-in operation. + result = handleBuiltInFunctionCall(loc, *arguments, *fnCandidate); + } else { + // This is a function call not mapped to built-in operator. + // 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()); + + // 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(); + if (symbolTable.atGlobalLevel()) { + requireProfile(loc, ~EEsProfile, "calling user function from global scope"); + intermediate.addToCallGraph(infoSink, "main(", fnCandidate->getMangledName()); + } else + intermediate.addToCallGraph(infoSink, currentCaller, fnCandidate->getMangledName()); + } + + if (builtIn) + nonOpBuiltInCheck(loc, *fnCandidate, *call); + else + userFunctionCallCheck(loc, *call); + } + + // 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. + if (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); + } + result = addOutputArgumentConversions(*fnCandidate, *result->getAsAggregate()); + } + } + } + + // generic error recovery + // 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; +} + +TIntermTyped* TParseContext::handleBuiltInFunctionCall(TSourceLoc loc, TIntermNode& arguments, + const TFunction& function) +{ + checkLocation(loc, function.getBuiltInOp()); + TIntermTyped *result = intermediate.addBuiltInFunctionCall(loc, function.getBuiltInOp(), + function.getParamCount() == 1, + &arguments, function.getType()); + if (obeyPrecisionQualifiers()) + computeBuiltinPrecisions(*result, function); + + if (result == nullptr) { + error(arguments.getLoc(), " wrong operand type", "Internal Error", + "built in unary operator function. Type: %s", + static_cast(&arguments)->getCompleteString().c_str()); + } else if (result->getAsOperator()) + builtInOpCheck(loc, function, *result->getAsOperator()); + + return result; +} + +// "The operation of a built-in function can have a different precision +// qualification than the precision qualification of the resulting value. +// These two precision qualifications are established as follows. +// +// The precision qualification of the operation of a built-in function is +// based on the precision qualification of its input arguments and formal +// parameters: When a formal parameter specifies a precision qualifier, +// that is used, otherwise, the precision qualification of the calling +// argument is used. The highest precision of these will be the precision +// qualification of the operation of the built-in function. Generally, +// this is applied across all arguments to a built-in function, with the +// exceptions being: +// - bitfieldExtract and bitfieldInsert ignore the 'offset' and 'bits' +// arguments. +// - interpolateAt* functions only look at the 'interpolant' argument. +// +// The precision qualification of the result of a built-in function is +// determined in one of the following ways: +// +// - For the texture sampling, image load, and image store functions, +// the precision of the return type matches the precision of the +// sampler type +// +// Otherwise: +// +// - For prototypes that do not specify a resulting precision qualifier, +// the precision will be the same as the precision of the operation. +// +// - For prototypes that do specify a resulting precision qualifier, +// the specified precision qualifier is the precision qualification of +// the result." +// +void TParseContext::computeBuiltinPrecisions(TIntermTyped& node, const TFunction& function) +{ + TPrecisionQualifier operationPrecision = EpqNone; + TPrecisionQualifier resultPrecision = EpqNone; + + TIntermOperator* opNode = node.getAsOperator(); + if (opNode == nullptr) + return; + + if (TIntermUnary* unaryNode = node.getAsUnaryNode()) { + operationPrecision = std::max(function[0].type->getQualifier().precision, + unaryNode->getOperand()->getType().getQualifier().precision); + if (function.getType().getBasicType() != EbtBool) + resultPrecision = function.getType().getQualifier().precision == EpqNone ? + operationPrecision : + function.getType().getQualifier().precision; + } else if (TIntermAggregate* agg = node.getAsAggregate()) { + TIntermSequence& sequence = agg->getSequence(); + unsigned int numArgs = (unsigned int)sequence.size(); + switch (agg->getOp()) { + case EOpBitfieldExtract: + numArgs = 1; + break; + case EOpBitfieldInsert: + numArgs = 2; + break; + case EOpInterpolateAtCentroid: + case EOpInterpolateAtOffset: + case EOpInterpolateAtSample: + numArgs = 1; + break; + default: + break; + } + // find the maximum precision from the arguments and parameters + for (unsigned int arg = 0; arg < numArgs; ++arg) { + operationPrecision = std::max(operationPrecision, sequence[arg]->getAsTyped()->getQualifier().precision); + operationPrecision = std::max(operationPrecision, function[arg].type->getQualifier().precision); + } + // compute the result precision + if (agg->isSampling() || agg->getOp() == EOpImageLoad || agg->getOp() == EOpImageStore) + resultPrecision = sequence[0]->getAsTyped()->getQualifier().precision; + else if (function.getType().getBasicType() != EbtBool) + resultPrecision = function.getType().getQualifier().precision == EpqNone ? + operationPrecision : + function.getType().getQualifier().precision; + } + + // Propagate precision through this node and its children. That algorithm stops + // when a precision is found, so start by clearing this subroot precision + opNode->getQualifier().precision = EpqNone; + if (operationPrecision != EpqNone) { + opNode->propagatePrecision(operationPrecision); + opNode->setOperationPrecision(operationPrecision); + } + // Now, set the result precision, which might not match + opNode->getQualifier().precision = resultPrecision; +} + +TIntermNode* TParseContext::handleReturnValue(const TSourceLoc& loc, TIntermTyped* value) +{ + functionReturnsValue = true; + if (currentFunctionType->getBasicType() == EbtVoid) { + error(loc, "void function cannot return a value", "return", ""); + return intermediate.addBranch(EOpReturn, loc); + } else if (*currentFunctionType != value->getType()) { + TIntermTyped* converted = intermediate.addConversion(EOpReturn, *currentFunctionType, value); + if (converted) { + if (*currentFunctionType != converted->getType()) + error(loc, "cannot convert return value to function return type", "return", ""); + if (version < 420) + warn(loc, "type conversion on return values was not explicitly allowed until version 420", "return", ""); + return intermediate.addBranch(EOpReturn, converted, loc); + } else { + error(loc, "type does not match, or is not convertible to, the function's return type", "return", ""); + return intermediate.addBranch(EOpReturn, value, loc); + } + } else + return intermediate.addBranch(EOpReturn, value, loc); +} + +// See if the operation is being done in an illegal location. +void TParseContext::checkLocation(const TSourceLoc& loc, TOperator op) +{ + switch (op) { + case EOpBarrier: + if (language == EShLangTessControl) { + if (controlFlowNestingLevel > 0) + 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) + error(loc, "tessellation control barrier() cannot be placed after a return from main()", "", ""); + } + break; + default: + break; + } +} + +// Finish processing object.length(). This started earlier in handleDotDereference(), where +// the ".length" part was recognized and semantically checked, and finished here where the +// function syntax "()" is recognized. +// +// Return resulting tree node. +TIntermTyped* TParseContext::handleLengthMethod(const TSourceLoc& loc, TFunction* function, TIntermNode* intermNode) +{ + int length = 0; + + if (function->getParamCount() > 0) + error(loc, "method does not accept any arguments", function->getName().c_str(), ""); + else { + const TType& type = intermNode->getAsTyped()->getType(); + if (type.isArray()) { + if (type.isRuntimeSizedArray()) { + // Create a unary op and let the back end handle it + return intermediate.addBuiltInFunctionCall(loc, EOpArrayLength, true, intermNode, TType(EbtInt)); + } else if (type.isImplicitlySizedArray()) { + if (intermNode->getAsSymbolNode() && isIoResizeArray(type)) { + // We could be between a layout declaration that gives a built-in io array implicit size and + // a user redeclaration of that array, meaning we have to substitute its implicit size here + // without actually redeclaring the array. (It is an error to use a member before the + // redeclaration, but not an error to use the array name itself.) + const TString& name = intermNode->getAsSymbolNode()->getName(); + if (name == "gl_in" || name == "gl_out") + length = getIoArrayImplicitSize(); + } + if (length == 0) { + if (intermNode->getAsSymbolNode() && isIoResizeArray(type)) + error(loc, "", function->getName().c_str(), "array must first be sized by a redeclaration or layout qualifier"); + else + error(loc, "", function->getName().c_str(), "array must be declared with a size before using this method"); + } + } else if (type.getOuterArrayNode()) { + // If the array's outer size is specified by an intermediate node, it means the array's length + // was specified by a specialization constant. In such a case, we should return the node of the + // specialization constants to represent the length. + return type.getOuterArrayNode(); + } else + length = type.getOuterArraySize(); + } else if (type.isMatrix()) + length = type.getMatrixCols(); + else if (type.isVector()) + length = type.getVectorSize(); + else { + // we should not get here, because earlier semantic checking should have prevented this path + error(loc, ".length()", "unexpected use of .length()", ""); + } + } + + if (length == 0) + length = 1; + + return intermediate.addConstantUnion(length, loc); +} + +// +// Add any needed implicit conversions for function-call arguments to input parameters. +// +void TParseContext::addInputArgumentConversions(const TFunction& function, TIntermNode*& arguments) const +{ + TIntermAggregate* aggregate = arguments->getAsAggregate(); + + // Process each argument's conversion + for (int i = 0; i < function.getParamCount(); ++i) { + // 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()[i]->getAsTyped() : arguments->getAsTyped()); + if (*function[i].type != arg->getType()) { + if (function[i].type->getQualifier().isParamInput()) { + // In-qualified arguments just need an extra node added above the argument to + // convert to the correct type. + arg = intermediate.addConversion(EOpFunctionCall, *function[i].type, arg); + if (arg) { + if (function.getParamCount() == 1) + arguments = arg; + else { + if (aggregate) + aggregate->getSequence()[i] = arg; + else + arguments = arg; + } + } + } + } + } +} + +// +// Add any needed implicit output conversions for function-call arguments. This +// can require a new tree topology, complicated further by whether the function +// has a return value. +// +// Returns a node of a subtree that evaluates to the return value of the function. +// +TIntermTyped* TParseContext::addOutputArgumentConversions(const TFunction& function, TIntermAggregate& intermNode) const +{ + TIntermSequence& arguments = intermNode.getSequence(); + + // Will there be any output conversions? + bool outputConversions = false; + for (int i = 0; i < function.getParamCount(); ++i) { + if (*function[i].type != arguments[i]->getAsTyped()->getType() && function[i].type->getQualifier().isParamOutput()) { + outputConversions = true; + break; + } + } + + if (! outputConversions) + return &intermNode; + + // Setup for the new tree, if needed: + // + // Output conversions need a different tree topology. + // Out-qualified arguments need a temporary of the correct type, with the call + // followed by an assignment of the temporary to the original argument: + // void: function(arg, ...) -> ( function(tempArg, ...), arg = tempArg, ...) + // ret = function(arg, ...) -> ret = (tempRet = function(tempArg, ...), arg = tempArg, ..., tempRet) + // Where the "tempArg" type needs no conversion as an argument, but will convert on assignment. + TIntermTyped* conversionTree = nullptr; + TVariable* tempRet = nullptr; + if (intermNode.getBasicType() != EbtVoid) { + // do the "tempRet = function(...), " bit from above + tempRet = makeInternalVariable("tempReturn", intermNode.getType()); + TIntermSymbol* tempRetNode = intermediate.addSymbol(*tempRet, intermNode.getLoc()); + conversionTree = intermediate.addAssign(EOpAssign, tempRetNode, &intermNode, intermNode.getLoc()); + } else + conversionTree = &intermNode; + + conversionTree = intermediate.makeAggregate(conversionTree); + + // Process each argument's conversion + for (int i = 0; i < function.getParamCount(); ++i) { + if (*function[i].type != arguments[i]->getAsTyped()->getType()) { + if (function[i].type->getQualifier().isParamOutput()) { + // Out-qualified arguments need to use the topology set up above. + // do the " ...(tempArg, ...), arg = tempArg" bit from above + TVariable* tempArg = makeInternalVariable("tempArg", *function[i].type); + tempArg->getWritableType().getQualifier().makeTemporary(); + TIntermSymbol* tempArgNode = intermediate.addSymbol(*tempArg, intermNode.getLoc()); + TIntermTyped* tempAssign = intermediate.addAssign(EOpAssign, arguments[i]->getAsTyped(), tempArgNode, arguments[i]->getLoc()); + conversionTree = intermediate.growAggregate(conversionTree, tempAssign, arguments[i]->getLoc()); + // replace the argument with another node for the same tempArg variable + arguments[i] = intermediate.addSymbol(*tempArg, intermNode.getLoc()); + } + } + } + + // Finalize the tree topology (see bigger comment above). + if (tempRet) { + // do the "..., tempRet" bit from above + TIntermSymbol* tempRetNode = intermediate.addSymbol(*tempRet, intermNode.getLoc()); + conversionTree = intermediate.growAggregate(conversionTree, tempRetNode, intermNode.getLoc()); + } + conversionTree = intermediate.setAggregateOperator(conversionTree, EOpComma, intermNode.getType(), intermNode.getLoc()); + + return conversionTree; +} + +// +// Do additional checking of built-in function calls that is not caught +// by normal semantic checks on argument type, extension tagging, etc. +// +// Assumes there has been a semantically correct match to a built-in function prototype. +// +void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCandidate, TIntermOperator& callNode) +{ + // Set up convenience accessors to the argument(s). There is almost always + // multiple arguments for the cases below, but when there might be one, + // check the unaryArg first. + const TIntermSequence* argp = nullptr; // confusing to use [] syntax on a pointer, so this is to help get a reference + const TIntermTyped* unaryArg = nullptr; + const TIntermTyped* arg0 = nullptr; + if (callNode.getAsAggregate()) { + argp = &callNode.getAsAggregate()->getSequence(); + if (argp->size() > 0) + arg0 = (*argp)[0]->getAsTyped(); + } else { + assert(callNode.getAsUnaryNode()); + unaryArg = callNode.getAsUnaryNode()->getOperand(); + arg0 = unaryArg; + } + const TIntermSequence& aggArgs = *argp; // only valid when unaryArg is nullptr + + switch (callNode.getOp()) { + case EOpTextureGather: + case EOpTextureGatherOffset: + case EOpTextureGatherOffsets: + { + // Figure out which variants are allowed by what extensions, + // and what arguments must be constant for which situations. + + TString featureString = fnCandidate.getName() + "(...)"; + const char* feature = featureString.c_str(); + profileRequires(loc, EEsProfile, 310, nullptr, feature); + int compArg = -1; // track which argument, if any, is the constant component argument + switch (callNode.getOp()) { + 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) { + profileRequires(loc, ~EEsProfile, 400, E_GL_ARB_gpu_shader5, feature); + if (! fnCandidate[0].type->getSampler().shadow) + compArg = 2; + } else + profileRequires(loc, ~EEsProfile, 400, E_GL_ARB_texture_gather, feature); + break; + case EOpTextureGatherOffset: + // GL_ARB_texture_gather is good enough for 2D non-shadow textures with no component argument + if (fnCandidate[0].type->getSampler().dim == Esd2D && ! fnCandidate[0].type->getSampler().shadow && fnCandidate.getParamCount() == 3) + 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 (! fnCandidate[0].type->getSampler().shadow) + compArg = 3; + break; + case EOpTextureGatherOffsets: + profileRequires(loc, ~EEsProfile, 400, E_GL_ARB_gpu_shader5, feature); + if (! fnCandidate[0].type->getSampler().shadow) + compArg = 3; + // check for constant offsets + if (! aggArgs[fnCandidate[0].type->getSampler().shadow ? 3 : 2]->getAsConstantUnion()) + error(loc, "must be a compile-time constant:", feature, "offsets argument"); + break; + default: + break; + } + + if (compArg > 0 && compArg < fnCandidate.getParamCount()) { + if (aggArgs[compArg]->getAsConstantUnion()) { + int value = aggArgs[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"); + } + + break; + } + + case EOpTextureOffset: + case EOpTextureFetchOffset: + case EOpTextureProjOffset: + case EOpTextureLodOffset: + case EOpTextureProjLodOffset: + case EOpTextureGradOffset: + case EOpTextureProjGradOffset: + { + // Handle texture-offset limits checking + // Pick which argument has to hold constant offsets + int arg = -1; + switch (callNode.getOp()) { + case EOpTextureOffset: arg = 2; break; + case EOpTextureFetchOffset: arg = (arg0->getType().getSampler().dim != EsdRect) ? 3 : 2; break; + case EOpTextureProjOffset: arg = 2; break; + case EOpTextureLodOffset: arg = 3; break; + case EOpTextureProjLodOffset: arg = 3; break; + case EOpTextureGradOffset: arg = 4; break; + case EOpTextureProjGradOffset: arg = 4; break; + default: + assert(0); + break; + } + + if (arg > 0) { + if (! aggArgs[arg]->getAsConstantUnion()) + 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]"); + } + } + } + + break; + } + + case EOpTextureQuerySamples: + case EOpImageQuerySamples: + // GL_ARB_shader_texture_image_samples + profileRequires(loc, ~EEsProfile, 450, E_GL_ARB_shader_texture_image_samples, "textureSamples and imageSamples"); + break; + + case EOpImageAtomicAdd: + case EOpImageAtomicMin: + case EOpImageAtomicMax: + case EOpImageAtomicAnd: + case EOpImageAtomicOr: + case EOpImageAtomicXor: + case EOpImageAtomicExchange: + case EOpImageAtomicCompSwap: + { + // Make sure the image types have the correct layout() format and correct argument types + const TType& imageType = arg0->getType(); + if (imageType.getSampler().type == EbtInt || imageType.getSampler().type == EbtUint) { + if (imageType.getQualifier().layoutFormat != ElfR32i && imageType.getQualifier().layoutFormat != ElfR32ui) + error(loc, "only supported on image with format r32i or r32ui", fnCandidate.getName().c_str(), ""); + } else { + if (fnCandidate.getName().compare(0, 19, "imageAtomicExchange") != 0) + error(loc, "only supported on integer images", fnCandidate.getName().c_str(), ""); + else if (imageType.getQualifier().layoutFormat != ElfR32f && profile == EEsProfile) + error(loc, "only supported on image with format r32f", fnCandidate.getName().c_str(), ""); + } + + break; + } + + case EOpInterpolateAtCentroid: + case EOpInterpolateAtSample: + case EOpInterpolateAtOffset: + // Make sure the first argument is an interpolant, or an array element of an interpolant + if (arg0->getType().getQualifier().storage != EvqVaryingIn) { + // It might still be an array element. + // + // We could check more, but the semantics of the first argument are already met; the + // only way to turn an array into a float/vec* is array dereference and swizzle. + // + // ES and desktop 4.3 and earlier: swizzles may not be used + // desktop 4.4 and later: swizzles may be used + bool swizzleOkay = (profile != EEsProfile) && (version >= 440); + const TIntermTyped* base = TIntermediate::findLValueBase(arg0, swizzleOkay); + if (base == nullptr || base->getType().getQualifier().storage != EvqVaryingIn) + error(loc, "first argument must be an interpolant, or interpolant-array element", fnCandidate.getName().c_str(), ""); + } + break; + + case EOpEmitStreamVertex: + case EOpEndStreamPrimitive: + intermediate.setMultiStream(); + break; + + default: + break; + } +} + +extern bool PureOperatorBuiltins; + +// Deprecated! Use PureOperatorBuiltins == true instead, in which case this +// functionality is handled in builtInOpCheck() instead of here. +// +// Do additional checking of built-in function calls that were not mapped +// to built-in operations (e.g., texturing functions). +// +// Assumes there has been a semantically correct match to a built-in function. +// +void TParseContext::nonOpBuiltInCheck(const TSourceLoc& loc, const TFunction& fnCandidate, TIntermAggregate& callNode) +{ + // Further maintenance of this function is deprecated, because the "correct" + // future-oriented design is to not have to do string compares on function names. + + // If PureOperatorBuiltins == true, then all built-ins should be mapped + // to a TOperator, and this function would then never get called. + + assert(PureOperatorBuiltins == false); + + // built-in texturing functions get their return value precision from the precision of the sampler + if (fnCandidate.getType().getQualifier().precision == EpqNone && + fnCandidate.getParamCount() > 0 && fnCandidate[0].type->getBasicType() == EbtSampler) + callNode.getQualifier().precision = callNode.getSequence()[0]->getAsTyped()->getQualifier().precision; + + if (fnCandidate.getName().compare(0, 7, "texture") == 0) { + if (fnCandidate.getName().compare(0, 13, "textureGather") == 0) { + TString featureString = fnCandidate.getName() + "(...)"; + const char* feature = featureString.c_str(); + profileRequires(loc, EEsProfile, 310, nullptr, feature); + + int compArg = -1; // track which argument, if any, is the constant component argument + if (fnCandidate.getName().compare("textureGatherOffset") == 0) { + // GL_ARB_texture_gather is good enough for 2D non-shadow textures with no component argument + if (fnCandidate[0].type->getSampler().dim == Esd2D && ! fnCandidate[0].type->getSampler().shadow && fnCandidate.getParamCount() == 3) + profileRequires(loc, ~EEsProfile, 400, E_GL_ARB_texture_gather, feature); + else + 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"); + if (! fnCandidate[0].type->getSampler().shadow) + compArg = 3; + } else if (fnCandidate.getName().compare("textureGatherOffsets") == 0) { + profileRequires(loc, ~EEsProfile, 400, E_GL_ARB_gpu_shader5, feature); + if (! fnCandidate[0].type->getSampler().shadow) + compArg = 3; + // check for constant offsets + int offsetArg = fnCandidate[0].type->getSampler().shadow ? 3 : 2; + if (! callNode.getSequence()[offsetArg]->getAsConstantUnion()) + error(loc, "must be a compile-time constant:", feature, "offsets argument"); + } else if (fnCandidate.getName().compare("textureGather") == 0) { + // 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) { + profileRequires(loc, ~EEsProfile, 400, E_GL_ARB_gpu_shader5, feature); + if (! fnCandidate[0].type->getSampler().shadow) + compArg = 2; + } else + profileRequires(loc, ~EEsProfile, 400, E_GL_ARB_texture_gather, feature); + } + + if (compArg > 0 && compArg < fnCandidate.getParamCount()) { + if (callNode.getSequence()[compArg]->getAsConstantUnion()) { + int value = callNode.getSequence()[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"); + } + } else { + // this is only for functions not starting "textureGather"... + if (fnCandidate.getName().find("Offset") != TString::npos) { + + // Handle texture-offset limits checking + int arg = -1; + if (fnCandidate.getName().compare("textureOffset") == 0) + arg = 2; + else if (fnCandidate.getName().compare("texelFetchOffset") == 0) + arg = 3; + else if (fnCandidate.getName().compare("textureProjOffset") == 0) + arg = 2; + else if (fnCandidate.getName().compare("textureLodOffset") == 0) + arg = 3; + else if (fnCandidate.getName().compare("textureProjLodOffset") == 0) + arg = 3; + else if (fnCandidate.getName().compare("textureGradOffset") == 0) + arg = 4; + else if (fnCandidate.getName().compare("textureProjGradOffset") == 0) + arg = 4; + + if (arg > 0) { + if (! callNode.getSequence()[arg]->getAsConstantUnion()) + error(loc, "argument must be compile-time constant", "texel offset", ""); + else { + const TType& type = callNode.getSequence()[arg]->getAsTyped()->getType(); + for (int c = 0; c < type.getVectorSize(); ++c) { + int offset = callNode.getSequence()[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]"); + } + } + } + } + } + } + + // GL_ARB_shader_texture_image_samples + if (fnCandidate.getName().compare(0, 14, "textureSamples") == 0 || fnCandidate.getName().compare(0, 12, "imageSamples") == 0) + profileRequires(loc, ~EEsProfile, 450, E_GL_ARB_shader_texture_image_samples, "textureSamples and imageSamples"); + + if (fnCandidate.getName().compare(0, 11, "imageAtomic") == 0) { + const TType& imageType = callNode.getSequence()[0]->getAsTyped()->getType(); + if (imageType.getSampler().type == EbtInt || imageType.getSampler().type == EbtUint) { + if (imageType.getQualifier().layoutFormat != ElfR32i && imageType.getQualifier().layoutFormat != ElfR32ui) + error(loc, "only supported on image with format r32i or r32ui", fnCandidate.getName().c_str(), ""); + } else { + if (fnCandidate.getName().compare(0, 19, "imageAtomicExchange") != 0) + error(loc, "only supported on integer images", fnCandidate.getName().c_str(), ""); + else if (imageType.getQualifier().layoutFormat != ElfR32f && profile == EEsProfile) + error(loc, "only supported on image with format r32f", fnCandidate.getName().c_str(), ""); + } + } +} + +// +// Do any extra checking for a user function call. +// +void TParseContext::userFunctionCallCheck(const TSourceLoc& loc, TIntermAggregate& callNode) +{ + TIntermSequence& arguments = callNode.getSequence(); + + for (int i = 0; i < (int)arguments.size(); ++i) + samplerConstructorLocationCheck(loc, "call argument", arguments[i]); +} + +// +// Emit an error if this is a sampler constructor +// +void TParseContext::samplerConstructorLocationCheck(const TSourceLoc& loc, const char* token, TIntermNode* node) +{ + if (node->getAsOperator() && node->getAsOperator()->getOp() == EOpConstructTextureSampler) + error(loc, "sampler constructor must appear at point of use", token, ""); +} + +// +// Handle seeing a built-in constructor in a grammar production. +// +TFunction* TParseContext::handleConstructorCall(const TSourceLoc& loc, const TPublicType& publicType) +{ + TType type(publicType); + type.getQualifier().precision = EpqNone; + + if (type.isArray()) { + profileRequires(loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed constructor"); + profileRequires(loc, EEsProfile, 300, nullptr, "arrayed constructor"); + } + + TOperator op = intermediate.mapTypeToConstructorOp(type); + + if (op == EOpNull) { + error(loc, "cannot construct this type", type.getBasicString(), ""); + op = EOpConstructFloat; + TType errorType(EbtFloat); + type.shallowCopy(errorType); + } + + TString empty(""); + + return new TFunction(&empty, type, op); +} + +// Handle seeing a precision qualifier in the grammar. +void TParseContext::handlePrecisionQualifier(const TSourceLoc& /*loc*/, TQualifier& qualifier, TPrecisionQualifier precision) +{ + if (obeyPrecisionQualifiers()) + qualifier.precision = precision; +} + +// Check for messages to give on seeing a precision qualifier used in a +// declaration in the grammar. +void TParseContext::checkPrecisionQualifier(const TSourceLoc& loc, TPrecisionQualifier) +{ + if (precisionManager.shouldWarnAboutDefaults()) { + warn(loc, "all default precisions are highp; use precision statements to quiet warning, e.g.:\n" + " \"precision mediump int; precision highp float;\"", "", ""); + precisionManager.defaultWarningGiven(); + } +} + +// +// Same error message for all places assignments don't work. +// +void TParseContext::assignError(const TSourceLoc& loc, const char* op, TString left, TString right) +{ + error(loc, "", op, "cannot convert from '%s' to '%s'", + right.c_str(), left.c_str()); +} + +// +// Same error message for all places unary operations don't work. +// +void TParseContext::unaryOpError(const TSourceLoc& loc, const char* op, TString operand) +{ + error(loc, " wrong operand type", op, + "no operation '%s' exists that takes an operand of type %s (or there is no acceptable conversion)", + op, operand.c_str()); +} + +// +// Same error message for all binary operations don't work. +// +void TParseContext::binaryOpError(const TSourceLoc& loc, const char* op, TString left, TString right) +{ + error(loc, " wrong operand types:", op, + "no operation '%s' exists that takes a left-hand operand of type '%s' and " + "a right operand of type '%s' (or there is no acceptable conversion)", + op, left.c_str(), right.c_str()); +} + +// +// A basic type of EbtVoid is a key that the name string was seen in the source, but +// it was not found as a variable in the symbol table. If so, give the error +// message and insert a dummy variable in the symbol table to prevent future errors. +// +void TParseContext::variableCheck(TIntermTyped*& nodePtr) +{ + TIntermSymbol* symbol = nodePtr->getAsSymbolNode(); + if (! symbol) + return; + + if (symbol->getType().getBasicType() == EbtVoid) { + const char *extraInfoFormat = ""; + if (spvVersion.vulkan != 0 && symbol->getName() == "gl_VertexID") { + extraInfoFormat = "(Did you mean gl_VertexIndex?)"; + } else if (spvVersion.vulkan != 0 && symbol->getName() == "gl_InstanceID") { + extraInfoFormat = "(Did you mean gl_InstanceIndex?)"; + } + error(symbol->getLoc(), "undeclared identifier", symbol->getName().c_str(), extraInfoFormat); + + // Add to symbol table to prevent future error messages on the same name + if (symbol->getName().size() > 0) { + TVariable* fakeVariable = new TVariable(&symbol->getName(), TType(EbtFloat)); + symbolTable.insert(*fakeVariable); + + // substitute a symbol node for this new variable + nodePtr = intermediate.addSymbol(*fakeVariable, symbol->getLoc()); + } + } else { + switch (symbol->getQualifier().storage) { + case EvqPointCoord: + profileRequires(symbol->getLoc(), ENoProfile, 120, nullptr, "gl_PointCoord"); + break; + default: break; // some compilers want this + } + } +} + +// +// Both test and if necessary, spit out an error, to see if the node is really +// an l-value that can be operated on this way. +// +// Returns true if there was an error. +// +bool TParseContext::lValueErrorCheck(const TSourceLoc& loc, const char* op, TIntermTyped* node) +{ + TIntermBinary* binaryNode = node->getAsBinaryNode(); + + if (binaryNode) { + bool errorReturn = false; + + switch(binaryNode->getOp()) { + case EOpIndexDirect: + case EOpIndexIndirect: + // ... tessellation control shader ... + // If a per-vertex output variable is used as an l-value, it is a + // compile-time or link-time error if the expression indicating the + // vertex index is not the identifier gl_InvocationID. + if (language == EShLangTessControl) { + const TType& leftType = binaryNode->getLeft()->getType(); + if (leftType.getQualifier().storage == EvqVaryingOut && ! leftType.getQualifier().patch && binaryNode->getLeft()->getAsSymbolNode()) { + // we have a per-vertex output + const TIntermSymbol* rightSymbol = binaryNode->getRight()->getAsSymbolNode(); + if (! rightSymbol || rightSymbol->getQualifier().builtIn != EbvInvocationId) + error(loc, "tessellation-control per-vertex output l-value must be indexed with gl_InvocationID", "[]", ""); + } + } + + break; // left node is checked by base class + case EOpIndexDirectStruct: + break; // left node is checked by base class + case EOpVectorSwizzle: + errorReturn = lValueErrorCheck(loc, op, binaryNode->getLeft()); + if (!errorReturn) { + int offset[4] = {0,0,0,0}; + + TIntermTyped* rightNode = binaryNode->getRight(); + TIntermAggregate *aggrNode = rightNode->getAsAggregate(); + + for (TIntermSequence::iterator p = aggrNode->getSequence().begin(); + p != aggrNode->getSequence().end(); p++) { + int value = (*p)->getAsTyped()->getAsConstantUnion()->getConstArray()[0].getIConst(); + offset[value]++; + if (offset[value] > 1) { + error(loc, " l-value of swizzle cannot have duplicate components", op, "", ""); + + return true; + } + } + } + + return errorReturn; + default: + break; + } + + if (errorReturn) { + error(loc, " l-value required", op, "", ""); + return true; + } + } + + // Let the base class check errors + if (TParseContextBase::lValueErrorCheck(loc, op, node)) + return true; + + const char* symbol = nullptr; + TIntermSymbol* symNode = node->getAsSymbolNode(); + if (symNode != nullptr) + symbol = symNode->getName().c_str(); + + const char* message = nullptr; + switch (node->getQualifier().storage) { + case EvqVaryingIn: message = "can't modify shader input"; break; + case EvqInstanceId: message = "can't modify gl_InstanceID"; break; + case EvqVertexId: message = "can't modify gl_VertexID"; break; + case EvqFace: message = "can't modify gl_FrontFace"; break; + case EvqFragCoord: message = "can't modify gl_FragCoord"; break; + case EvqPointCoord: message = "can't modify gl_PointCoord"; break; + case EvqFragDepth: + intermediate.setDepthReplacing(); + // "In addition, it is an error to statically write to gl_FragDepth in the fragment shader." + if (profile == EEsProfile && intermediate.getEarlyFragmentTests()) + message = "can't modify gl_FragDepth if using early_fragment_tests"; + break; + + default: + break; + } + + if (message == nullptr && binaryNode == nullptr && symNode == nullptr) { + error(loc, " l-value required", op, "", ""); + + return true; + } + + // + // Everything else is okay, no error. + // + if (message == nullptr) + return false; + + // + // If we get here, we have an error and a message. + // + if (symNode) + error(loc, " l-value required", op, "\"%s\" (%s)", symbol, message); + else + error(loc, " l-value required", op, "(%s)", message); + + return true; +} + +// Test for and give an error if the node can't be read from. +void TParseContext::rValueErrorCheck(const TSourceLoc& loc, const char* op, TIntermTyped* node) +{ + // Let the base class check errors + TParseContextBase::rValueErrorCheck(loc, op, node); + +#ifdef AMD_EXTENSIONS + TIntermSymbol* symNode = node->getAsSymbolNode(); + if (!(symNode && symNode->getQualifier().writeonly)) // base class checks + if (symNode && symNode->getQualifier().explicitInterp) + error(loc, "can't read from explicitly-interpolated object: ", op, symNode->getName().c_str()); +#endif +} + +// +// Both test, and if necessary spit out an error, to see if the node is really +// a constant. +// +void TParseContext::constantValueCheck(TIntermTyped* node, const char* token) +{ + if (! node->getQualifier().isConstant()) + error(node->getLoc(), "constant expression required", token, ""); +} + +// +// Both test, and if necessary spit out an error, to see if the node is really +// an integer. +// +void TParseContext::integerCheck(const TIntermTyped* node, const char* token) +{ + if ((node->getBasicType() == EbtInt || node->getBasicType() == EbtUint) && node->isScalar()) + return; + + error(node->getLoc(), "scalar integer expression required", token, ""); +} + +// +// Both test, and if necessary spit out an error, to see if we are currently +// globally scoped. +// +void TParseContext::globalCheck(const TSourceLoc& loc, const char* token) +{ + if (! symbolTable.atGlobalLevel()) + error(loc, "not allowed in nested scope", token, ""); +} + +// +// Reserved errors for GLSL. +// +void TParseContext::reservedErrorCheck(const TSourceLoc& loc, const TString& identifier) +{ + // "Identifiers starting with "gl_" are reserved for use by OpenGL, and may not be + // declared in a shader; this results in a compile-time error." + if (! symbolTable.atBuiltInLevel()) { + if (builtInName(identifier)) + error(loc, "identifiers starting with \"gl_\" are reserved", identifier.c_str(), ""); + + // "__" are not supposed to be an error. ES 310 (and desktop) added the clarification: + // "In addition, all identifiers containing two consecutive underscores (__) are + // reserved; using such a name does not itself result in an error, but may result + // in undefined behavior." + // however, before that, ES tests required an error. + if (identifier.find("__") != TString::npos) { + if (profile == EEsProfile && version <= 300) + error(loc, "identifiers containing consecutive underscores (\"__\") are reserved, and an error if version <= 300", identifier.c_str(), ""); + else + warn(loc, "identifiers containing consecutive underscores (\"__\") are reserved", identifier.c_str(), ""); + } + } +} + +// +// Reserved errors for the preprocessor. +// +void TParseContext::reservedPpErrorCheck(const TSourceLoc& loc, const char* identifier, const char* op) +{ + // "__" are not supposed to be an error. ES 310 (and desktop) added the clarification: + // "All macro names containing two consecutive underscores ( __ ) are reserved; + // defining such a name does not itself result in an error, but may result in + // undefined behavior. All macro names prefixed with "GL_" ("GL" followed by a + // single underscore) are also reserved, and defining such a name results in a + // compile-time error." + // however, before that, ES tests required an error. + if (strncmp(identifier, "GL_", 3) == 0) + ppError(loc, "names beginning with \"GL_\" can't be (un)defined:", op, identifier); + else if (strncmp(identifier, "defined", 8) == 0) + ppError(loc, "\"defined\" can't be (un)defined:", op, identifier); + else if (strstr(identifier, "__") != 0) { + if (profile == EEsProfile && version >= 300 && + (strcmp(identifier, "__LINE__") == 0 || + strcmp(identifier, "__FILE__") == 0 || + strcmp(identifier, "__VERSION__") == 0)) + ppError(loc, "predefined names can't be (un)defined:", op, identifier); + else { + if (profile == EEsProfile && version <= 300) + ppError(loc, "names containing consecutive underscores are reserved, and an error if version <= 300:", op, identifier); + else + ppWarn(loc, "names containing consecutive underscores are reserved:", op, identifier); + } + } +} + +// +// See if this version/profile allows use of the line-continuation character '\'. +// +// Returns true if a line continuation should be done. +// +bool TParseContext::lineContinuationCheck(const TSourceLoc& loc, bool endOfComment) +{ + const char* message = "line continuation"; + + bool lineContinuationAllowed = (profile == EEsProfile && version >= 300) || + (profile != EEsProfile && (version >= 420 || extensionTurnedOn(E_GL_ARB_shading_language_420pack))); + + if (endOfComment) { + if (lineContinuationAllowed) + warn(loc, "used at end of comment; the following line is still part of the comment", message, ""); + else + warn(loc, "used at end of comment, but this version does not provide line continuation", message, ""); + + return lineContinuationAllowed; + } + + if (relaxedErrors()) { + if (! lineContinuationAllowed) + warn(loc, "not allowed in this version", message, ""); + return true; + } else { + profileRequires(loc, EEsProfile, 300, nullptr, message); + profileRequires(loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, message); + } + + return lineContinuationAllowed; +} + +bool TParseContext::builtInName(const TString& identifier) +{ + return identifier.compare(0, 3, "gl_") == 0; +} + +// +// Make sure there is enough data and not too many arguments provided to the +// constructor to build something of the type of the constructor. Also returns +// the type of the constructor. +// +// Part of establishing type is establishing specialization-constness. +// We don't yet know "top down" whether type is a specialization constant, +// but a const constructor can becomes a specialization constant if any of +// its children are, subject to KHR_vulkan_glsl rules: +// +// - int(), uint(), and bool() constructors for type conversions +// from any of the following types to any of the following types: +// * int +// * uint +// * bool +// - vector versions of the above conversion constructors +// +// Returns true if there was an error in construction. +// +bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, TFunction& function, TOperator op, TType& type) +{ + type.shallowCopy(function.getType()); + + bool constructingMatrix = false; + switch(op) { + case EOpConstructTextureSampler: + return constructorTextureSamplerError(loc, function); + case EOpConstructMat2x2: + case EOpConstructMat2x3: + case EOpConstructMat2x4: + case EOpConstructMat3x2: + case EOpConstructMat3x3: + case EOpConstructMat3x4: + case EOpConstructMat4x2: + case EOpConstructMat4x3: + case EOpConstructMat4x4: + case EOpConstructDMat2x2: + case EOpConstructDMat2x3: + case EOpConstructDMat2x4: + case EOpConstructDMat3x2: + case EOpConstructDMat3x3: + case EOpConstructDMat3x4: + case EOpConstructDMat4x2: + case EOpConstructDMat4x3: + case EOpConstructDMat4x4: + constructingMatrix = true; + break; + default: + break; + } + + // + // Walk the arguments for first-pass checks and collection of information. + // + + int size = 0; + bool constType = true; + bool specConstType = false; // value is only valid if constType is true + bool full = false; + bool overFull = false; + bool matrixInMatrix = false; + bool arrayArg = false; + bool floatArgument = false; + for (int arg = 0; arg < function.getParamCount(); ++arg) { + if (function[arg].type->isArray()) { + if (! function[arg].type->isExplicitlySizedArray()) { + // Can't construct from an unsized array. + error(loc, "array argument must be sized", "constructor", ""); + return true; + } + arrayArg = true; + } + if (constructingMatrix && function[arg].type->isMatrix()) + matrixInMatrix = true; + + // 'full' will go to true when enough args have been seen. If we loop + // again, there is an extra argument. + if (full) { + // For vectors and matrices, it's okay to have too many components + // available, but not okay to have unused arguments. + overFull = true; + } + + size += function[arg].type->computeNumComponents(); + if (op != EOpConstructStruct && ! type.isArray() && size >= type.computeNumComponents()) + full = true; + + if (! function[arg].type->getQualifier().isConstant()) + constType = false; + if (function[arg].type->getQualifier().isSpecConstant()) + specConstType = true; + if (function[arg].type->isFloatingDomain()) + floatArgument = true; + } + + // inherit constness from children + if (constType) { + bool makeSpecConst; + // Finish pinning down spec-const semantics + if (specConstType) { + switch (op) { + case EOpConstructInt: + case EOpConstructUint: + case EOpConstructInt64: + case EOpConstructUint64: + case EOpConstructBool: + case EOpConstructBVec2: + case EOpConstructBVec3: + case EOpConstructBVec4: + case EOpConstructIVec2: + case EOpConstructIVec3: + case EOpConstructIVec4: + case EOpConstructUVec2: + case EOpConstructUVec3: + case EOpConstructUVec4: + case EOpConstructI64Vec2: + case EOpConstructI64Vec3: + case EOpConstructI64Vec4: + case EOpConstructU64Vec2: + case EOpConstructU64Vec3: + case EOpConstructU64Vec4: + // This was the list of valid ones, if they aren't converting from float + // and aren't making an array. + makeSpecConst = ! floatArgument && ! type.isArray(); + break; + default: + // anything else wasn't white-listed in the spec as a conversion + makeSpecConst = false; + break; + } + } else + makeSpecConst = false; + + if (makeSpecConst) + type.getQualifier().makeSpecConstant(); + else if (specConstType) + type.getQualifier().makeTemporary(); + else + type.getQualifier().storage = EvqConst; + } + + if (type.isArray()) { + if (function.getParamCount() == 0) { + error(loc, "array constructor must have at least one argument", "constructor", ""); + return true; + } + + if (type.isImplicitlySizedArray()) { + // auto adapt the constructor type to the number of arguments + type.changeOuterArraySize(function.getParamCount()); + } else if (type.getOuterArraySize() != function.getParamCount()) { + error(loc, "array constructor needs one argument per array element", "constructor", ""); + return true; + } + + if (type.isArrayOfArrays()) { + // Types have to match, but we're still making the type. + // Finish making the type, and the comparison is done later + // when checking for conversion. + TArraySizes& arraySizes = type.getArraySizes(); + + // At least the dimensionalities have to match. + 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; + } + + if (arraySizes.isInnerImplicit()) { + // "Arrays of arrays ..., and the size for any dimension is optional" + // That means we need to adopt (from the first argument) the other array sizes into the type. + for (int d = 1; d < arraySizes.getNumDims(); ++d) { + if (arraySizes.getDimSize(d) == UnsizedArraySize) { + arraySizes.setDimSize(d, function[0].type->getArraySizes().getDimSize(d - 1)); + } + } + } + } + } + + if (arrayArg && op != EOpConstructStruct && ! type.isArrayOfArrays()) { + error(loc, "constructing non-array constituent from array argument", "constructor", ""); + return true; + } + + if (matrixInMatrix && ! type.isArray()) { + profileRequires(loc, ENoProfile, 120, nullptr, "constructing matrix from matrix"); + + // "If a matrix argument is given to a matrix constructor, + // it is a compile-time error to have any other arguments." + if (function.getParamCount() != 1) + error(loc, "matrix constructed from matrix can only have one argument", "constructor", ""); + return false; + } + + if (overFull) { + error(loc, "too many arguments", "constructor", ""); + return true; + } + + if (op == EOpConstructStruct && ! type.isArray() && (int)type.getStruct()->size() != function.getParamCount()) { + error(loc, "Number of constructor parameters does not match the number of structure fields", "constructor", ""); + return true; + } + + if ((op != EOpConstructStruct && size != 1 && size < type.computeNumComponents()) || + (op == EOpConstructStruct && size < type.computeNumComponents())) { + error(loc, "not enough data provided for construction", "constructor", ""); + return true; + } + + TIntermTyped* typed = node->getAsTyped(); + if (typed == nullptr) { + error(loc, "constructor argument does not have a type", "constructor", ""); + return true; + } + if (op != EOpConstructStruct && typed->getBasicType() == EbtSampler) { + error(loc, "cannot convert a sampler", "constructor", ""); + return true; + } + if (op != EOpConstructStruct && typed->getBasicType() == EbtAtomicUint) { + error(loc, "cannot convert an atomic_uint", "constructor", ""); + return true; + } + if (typed->getBasicType() == EbtVoid) { + error(loc, "cannot convert a void", "constructor", ""); + return true; + } + + return false; +} + +// Verify all the correct semantics for constructing a combined texture/sampler. +// Return true if the semantics are incorrect. +bool TParseContext::constructorTextureSamplerError(const TSourceLoc& loc, const TFunction& function) +{ + TString constructorName = function.getType().getBasicTypeString(); // TODO: performance: should not be making copy; interface needs to change + const char* token = constructorName.c_str(); + + // exactly two arguments needed + if (function.getParamCount() != 2) { + error(loc, "sampler-constructor requires two arguments", token, ""); + return true; + } + + // For now, not allowing arrayed constructors, the rest of this function + // is set up to allow them, if this test is removed: + if (function.getType().isArray()) { + error(loc, "sampler-constructor cannot make an array of samplers", token, ""); + return true; + } + + // first argument + // * the constructor's first argument must be a texture type + // * the dimensionality (1D, 2D, 3D, Cube, Rect, Buffer, MS, and Array) + // of the texture type must match that of the constructed sampler type + // (that is, the suffixes of the type of the first argument and the + // type of the constructor will be spelled the same way) + if (function[0].type->getBasicType() != EbtSampler || + ! function[0].type->getSampler().isTexture() || + function[0].type->isArray()) { + error(loc, "sampler-constructor first argument must be a scalar textureXXX type", token, ""); + return true; + } + // simulate the first argument's impact on the result type, so it can be compared with the encapsulated operator!=() + TSampler texture = function.getType().getSampler(); + texture.combined = false; + texture.shadow = false; + if (texture != function[0].type->getSampler()) { + error(loc, "sampler-constructor first argument must match type and dimensionality of constructor type", token, ""); + return true; + } + + // second argument + // * the constructor's second argument must be a scalar of type + // *sampler* or *samplerShadow* + // * the presence or absence of depth comparison (Shadow) must match + // between the constructed sampler type and the type of the second argument + if ( function[1].type->getBasicType() != EbtSampler || + ! function[1].type->getSampler().isPureSampler() || + function[1].type->isArray()) { + error(loc, "sampler-constructor second argument must be a scalar type 'sampler'", token, ""); + 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, ""); + return true; + } + + return false; +} + +// Checks to see if a void variable has been declared and raise an error message for such a case +// +// returns true in case of an error +// +bool TParseContext::voidErrorCheck(const TSourceLoc& loc, const TString& identifier, const TBasicType basicType) +{ + if (basicType == EbtVoid) { + error(loc, "illegal use of type 'void'", identifier.c_str(), ""); + return true; + } + + return false; +} + +// Checks to see if the node (for the expression) contains a scalar boolean expression or not +void TParseContext::boolCheck(const TSourceLoc& loc, const TIntermTyped* type) +{ + if (type->getBasicType() != EbtBool || type->isArray() || type->isMatrix() || type->isVector()) + error(loc, "boolean expression expected", "", ""); +} + +// This function checks to see if the node (for the expression) contains a scalar boolean expression or not +void TParseContext::boolCheck(const TSourceLoc& loc, const TPublicType& pType) +{ + if (pType.basicType != EbtBool || pType.arraySizes || pType.matrixCols > 1 || (pType.vectorSize > 1)) + error(loc, "boolean expression expected", "", ""); +} + +void TParseContext::samplerCheck(const TSourceLoc& loc, const TType& type, const TString& identifier, TIntermTyped* /*initializer*/) +{ + if (type.getQualifier().storage == EvqUniform) + return; + + if (type.getBasicType() == EbtStruct && containsFieldWithBasicType(type, EbtSampler)) + error(loc, "non-uniform struct contains a sampler or image:", type.getBasicTypeString().c_str(), identifier.c_str()); + else if (type.getBasicType() == EbtSampler && type.getQualifier().storage != EvqUniform) { + // non-uniform sampler + // not yet: okay if it has an initializer + // if (! initializer) + error(loc, "sampler/image types can only be used in uniform variables or function parameters:", type.getBasicTypeString().c_str(), identifier.c_str()); + } +} + +void TParseContext::atomicUintCheck(const TSourceLoc& loc, const TType& type, const TString& identifier) +{ + if (type.getQualifier().storage == EvqUniform) + return; + + if (type.getBasicType() == EbtStruct && containsFieldWithBasicType(type, EbtAtomicUint)) + error(loc, "non-uniform struct contains an atomic_uint:", type.getBasicTypeString().c_str(), identifier.c_str()); + else if (type.getBasicType() == EbtAtomicUint && type.getQualifier().storage != EvqUniform) + 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*/) +{ + if (parsingBuiltins) + return; + + // Vulkan doesn't allow transparent uniforms outside of blocks + if (spvVersion.vulkan == 0 || type.getQualifier().storage != EvqUniform) + return; + if (type.containsNonOpaque()) + vulkanRemoved(loc, "non-opaque uniforms outside a block"); +} + +// +// Check/fix just a full qualifier (no variables or types yet, but qualifier is complete) at global level. +// +void TParseContext::globalQualifierFixCheck(const TSourceLoc& loc, TQualifier& qualifier) +{ + // move from parameter/unknown qualifiers to pipeline in/out qualifiers + switch (qualifier.storage) { + case EvqIn: + profileRequires(loc, ENoProfile, 130, nullptr, "in for stage inputs"); + profileRequires(loc, EEsProfile, 300, nullptr, "in for stage inputs"); + qualifier.storage = EvqVaryingIn; + break; + case EvqOut: + profileRequires(loc, ENoProfile, 130, nullptr, "out for stage outputs"); + profileRequires(loc, EEsProfile, 300, nullptr, "out for stage outputs"); + qualifier.storage = EvqVaryingOut; + break; + case EvqInOut: + qualifier.storage = EvqVaryingIn; + error(loc, "cannot use 'inout' at global scope", "", ""); + break; + default: + break; + } + + invariantCheck(loc, qualifier); +} + +// +// Check a full qualifier and type (no variable yet) at global level. +// +void TParseContext::globalQualifierTypeCheck(const TSourceLoc& loc, const TQualifier& qualifier, const TPublicType& publicType) +{ + if (! symbolTable.atGlobalLevel()) + return; + + if (qualifier.isMemory() && ! publicType.isImage() && publicType.qualifier.storage != EvqBuffer) + error(loc, "memory qualifiers cannot be used on this type", "", ""); + + if (qualifier.storage == EvqBuffer && publicType.basicType != EbtBlock) + error(loc, "buffers can be declared only as blocks", "buffer", ""); + + if (qualifier.storage != EvqVaryingIn && qualifier.storage != EvqVaryingOut) + return; + + if (publicType.shaderQualifiers.blendEquation) + error(loc, "can only be applied to a standalone 'out'", "blend equation", ""); + + // now, knowing it is a shader in/out, do all the in/out semantic checks + + if (publicType.basicType == EbtBool) { + error(loc, "cannot be bool", GetStorageQualifierString(qualifier.storage), ""); + return; + } + + if (publicType.basicType == EbtInt || publicType.basicType == EbtUint || + publicType.basicType == EbtInt64 || publicType.basicType == EbtUint64 || + publicType.basicType == EbtDouble) + profileRequires(loc, EEsProfile, 300, nullptr, "shader input/output"); + +#ifdef AMD_EXTENSIONS + if (! qualifier.flat && ! qualifier.explicitInterp) { +#else + if (!qualifier.flat) { +#endif + if (publicType.basicType == EbtInt || publicType.basicType == EbtUint || + publicType.basicType == EbtInt64 || publicType.basicType == EbtUint64 || + publicType.basicType == EbtDouble || + (publicType.userDef && (publicType.userDef->containsBasicType(EbtInt) || + publicType.userDef->containsBasicType(EbtUint) || + publicType.userDef->containsBasicType(EbtInt64) || + publicType.userDef->containsBasicType(EbtUint64) || + publicType.userDef->containsBasicType(EbtDouble)))) { + if (qualifier.storage == EvqVaryingIn && language == EShLangFragment) + error(loc, "must be qualified as flat", TType::getBasicString(publicType.basicType), GetStorageQualifierString(qualifier.storage)); + else if (qualifier.storage == EvqVaryingOut && language == EShLangVertex && version == 300) + error(loc, "must be qualified as flat", TType::getBasicString(publicType.basicType), GetStorageQualifierString(qualifier.storage)); + } + } + + if (qualifier.patch && qualifier.isInterpolation()) + error(loc, "cannot use interpolation qualifiers with patch", "patch", ""); + + if (qualifier.storage == EvqVaryingIn) { + switch (language) { + case EShLangVertex: + if (publicType.basicType == EbtStruct) { + error(loc, "cannot be a structure or array", GetStorageQualifierString(qualifier.storage), ""); + return; + } + if (publicType.arraySizes) { + requireProfile(loc, ~EEsProfile, "vertex input arrays"); + profileRequires(loc, ENoProfile, 150, nullptr, "vertex input arrays"); + } + if (publicType.basicType == EbtDouble) + profileRequires(loc, ~EEsProfile, 410, nullptr, "vertex-shader `double` type input"); + if (qualifier.isAuxiliary() || qualifier.isInterpolation() || qualifier.isMemory() || qualifier.invariant) + error(loc, "vertex input cannot be further qualified", "", ""); + break; + + case EShLangTessControl: + if (qualifier.patch) + error(loc, "can only use on output in tessellation-control shader", "patch", ""); + break; + + case EShLangTessEvaluation: + break; + + case EShLangGeometry: + break; + + case EShLangFragment: + if (publicType.userDef) { + profileRequires(loc, EEsProfile, 300, nullptr, "fragment-shader struct input"); + profileRequires(loc, ~EEsProfile, 150, nullptr, "fragment-shader struct input"); + if (publicType.userDef->containsStructure()) + requireProfile(loc, ~EEsProfile, "fragment-shader struct input containing structure"); + if (publicType.userDef->containsArray()) + requireProfile(loc, ~EEsProfile, "fragment-shader struct input containing an array"); + } + break; + + case EShLangCompute: + if (! symbolTable.atBuiltInLevel()) + error(loc, "global storage input qualifier cannot be used in a compute shader", "in", ""); + break; + + default: + break; + } + } else { + // qualifier.storage == EvqVaryingOut + switch (language) { + case EShLangVertex: + if (publicType.userDef) { + profileRequires(loc, EEsProfile, 300, nullptr, "vertex-shader struct output"); + profileRequires(loc, ~EEsProfile, 150, nullptr, "vertex-shader struct output"); + if (publicType.userDef->containsStructure()) + requireProfile(loc, ~EEsProfile, "vertex-shader struct output containing structure"); + if (publicType.userDef->containsArray()) + requireProfile(loc, ~EEsProfile, "vertex-shader struct output containing an array"); + } + + break; + + case EShLangTessControl: + break; + + case EShLangTessEvaluation: + if (qualifier.patch) + error(loc, "can only use on input in tessellation-evaluation shader", "patch", ""); + break; + + case EShLangGeometry: + break; + + case EShLangFragment: + profileRequires(loc, EEsProfile, 300, nullptr, "fragment shader output"); + if (publicType.basicType == EbtStruct) { + error(loc, "cannot be a structure", GetStorageQualifierString(qualifier.storage), ""); + return; + } + if (publicType.matrixRows > 0) { + error(loc, "cannot be a matrix", GetStorageQualifierString(qualifier.storage), ""); + return; + } + if (qualifier.isAuxiliary()) + error(loc, "can't use auxiliary qualifier on a fragment output", "centroid/sample/patch", ""); + if (qualifier.isInterpolation()) + error(loc, "can't use interpolation qualifier on a fragment output", "flat/smooth/noperspective", ""); + if (publicType.basicType == EbtDouble) + error(loc, "cannot contain a double", GetStorageQualifierString(qualifier.storage), ""); + break; + + case EShLangCompute: + error(loc, "global storage output qualifier cannot be used in a compute shader", "out", ""); + break; + + default: + break; + } + } +} + +// +// Merge characteristics of the 'src' qualifier into the 'dst'. +// If there is duplication, issue error messages, unless 'force' +// is specified, which means to just override default settings. +// +// Also, when force is false, it will be assumed that 'src' follows +// 'dst', for the purpose of error checking order for versions +// that require specific orderings of qualifiers. +// +void TParseContext::mergeQualifiers(const TSourceLoc& loc, TQualifier& dst, const TQualifier& src, bool force) +{ + // Multiple auxiliary qualifiers (mostly done later by 'individual qualifiers') + if (src.isAuxiliary() && dst.isAuxiliary()) + error(loc, "can only have one auxiliary qualifier (centroid, patch, and sample)", "", ""); + + // Multiple interpolation qualifiers (mostly done later by 'individual qualifiers') + if (src.isInterpolation() && dst.isInterpolation()) +#ifdef AMD_EXTENSIONS + error(loc, "can only have one interpolation qualifier (flat, smooth, noperspective, __explicitInterpAMD)", "", ""); +#else + error(loc, "can only have one interpolation qualifier (flat, smooth, noperspective)", "", ""); +#endif + + // Ordering + if (! force && ((profile != EEsProfile && version < 420) || + (profile == EEsProfile && version < 310)) + && ! extensionTurnedOn(E_GL_ARB_shading_language_420pack)) { + // non-function parameters + if (src.noContraction && (dst.invariant || dst.isInterpolation() || dst.isAuxiliary() || dst.storage != EvqTemporary || dst.precision != EpqNone)) + error(loc, "precise qualifier must appear first", "", ""); + if (src.invariant && (dst.isInterpolation() || dst.isAuxiliary() || dst.storage != EvqTemporary || dst.precision != EpqNone)) + error(loc, "invariant qualifier must appear before interpolation, storage, and precision qualifiers ", "", ""); + else if (src.isInterpolation() && (dst.isAuxiliary() || dst.storage != EvqTemporary || dst.precision != EpqNone)) + error(loc, "interpolation qualifiers must appear before storage and precision qualifiers", "", ""); + else if (src.isAuxiliary() && (dst.storage != EvqTemporary || dst.precision != EpqNone)) + error(loc, "Auxiliary qualifiers (centroid, patch, and sample) must appear before storage and precision qualifiers", "", ""); + else if (src.storage != EvqTemporary && (dst.precision != EpqNone)) + error(loc, "precision qualifier must appear as last qualifier", "", ""); + + // function parameters + if (src.noContraction && (dst.storage == EvqConst || dst.storage == EvqIn || dst.storage == EvqOut)) + error(loc, "precise qualifier must appear first", "", ""); + if (src.storage == EvqConst && (dst.storage == EvqIn || dst.storage == EvqOut)) + error(loc, "in/out must appear before const", "", ""); + } + + // Storage qualification + if (dst.storage == EvqTemporary || dst.storage == EvqGlobal) + dst.storage = src.storage; + else if ((dst.storage == EvqIn && src.storage == EvqOut) || + (dst.storage == EvqOut && src.storage == EvqIn)) + dst.storage = EvqInOut; + else if ((dst.storage == EvqIn && src.storage == EvqConst) || + (dst.storage == EvqConst && src.storage == EvqIn)) + dst.storage = EvqConstReadOnly; + else if (src.storage != EvqTemporary && + src.storage != EvqGlobal) + error(loc, "too many storage qualifiers", GetStorageQualifierString(src.storage), ""); + + // Precision qualifiers + if (! force && src.precision != EpqNone && dst.precision != EpqNone) + error(loc, "only one precision qualifier allowed", GetPrecisionQualifierString(src.precision), ""); + if (dst.precision == EpqNone || (force && src.precision != EpqNone)) + dst.precision = src.precision; + + // Layout qualifiers + mergeObjectLayoutQualifiers(dst, src, false); + + // individual qualifiers + bool repeated = false; + #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field; + MERGE_SINGLETON(invariant); + MERGE_SINGLETON(noContraction); + MERGE_SINGLETON(centroid); + MERGE_SINGLETON(smooth); + MERGE_SINGLETON(flat); + MERGE_SINGLETON(nopersp); +#ifdef AMD_EXTENSIONS + MERGE_SINGLETON(explicitInterp); +#endif + MERGE_SINGLETON(patch); + MERGE_SINGLETON(sample); + MERGE_SINGLETON(coherent); + MERGE_SINGLETON(volatil); + MERGE_SINGLETON(restrict); + MERGE_SINGLETON(readonly); + MERGE_SINGLETON(writeonly); + MERGE_SINGLETON(specConstant); + + if (repeated) + error(loc, "replicated qualifiers", "", ""); +} + +void TParseContext::setDefaultPrecision(const TSourceLoc& loc, TPublicType& publicType, TPrecisionQualifier qualifier) +{ + TBasicType basicType = publicType.basicType; + + if (basicType == EbtSampler) { + defaultSamplerPrecision[computeSamplerTypeIndex(publicType.sampler)] = qualifier; + + return; // all is well + } + + if (basicType == EbtInt || basicType == EbtFloat) { + if (publicType.isScalar()) { + defaultPrecision[basicType] = qualifier; + if (basicType == EbtInt) { + defaultPrecision[EbtUint] = qualifier; + precisionManager.explicitIntDefaultSeen(); + } else + precisionManager.explicitFloatDefaultSeen(); + + return; // all is well + } + } + + if (basicType == EbtAtomicUint) { + if (qualifier != EpqHigh) + error(loc, "can only apply highp to atomic_uint", "precision", ""); + + return; + } + + error(loc, "cannot apply precision statement to this type; use 'float', 'int' or a sampler type", TType::getBasicString(basicType), ""); +} + +// used to flatten the sampler type space into a single dimension +// correlates with the declaration of defaultSamplerPrecision[] +int TParseContext::computeSamplerTypeIndex(TSampler& sampler) +{ + int arrayIndex = sampler.arrayed ? 1 : 0; + int shadowIndex = sampler.shadow ? 1 : 0; + int externalIndex = sampler.external? 1 : 0; + int imageIndex = sampler.image ? 1 : 0; + int msIndex = sampler.ms ? 1 : 0; + + int flattened = EsdNumDims * (EbtNumTypes * (2 * (2 * (2 * (2 * arrayIndex + msIndex) + imageIndex) + shadowIndex) + + externalIndex) + sampler.type) + sampler.dim; + assert(flattened < maxSamplerIndex); + + return flattened; +} + +TPrecisionQualifier TParseContext::getDefaultPrecision(TPublicType& publicType) +{ + if (publicType.basicType == EbtSampler) + return defaultSamplerPrecision[computeSamplerTypeIndex(publicType.sampler)]; + else + return defaultPrecision[publicType.basicType]; +} + +void TParseContext::precisionQualifierCheck(const TSourceLoc& loc, TBasicType baseType, TQualifier& qualifier) +{ + // Built-in symbols are allowed some ambiguous precisions, to be pinned down + // later by context. + if (! obeyPrecisionQualifiers() || parsingBuiltins) + return; + + if (baseType == EbtAtomicUint && qualifier.precision != EpqNone && qualifier.precision != EpqHigh) + error(loc, "atomic counters can only be highp", "atomic_uint", ""); + + if (baseType == EbtFloat || baseType == EbtUint || baseType == EbtInt || baseType == EbtSampler || baseType == EbtAtomicUint) { + if (qualifier.precision == EpqNone) { + if (relaxedErrors()) + warn(loc, "type requires declaration of default precision qualifier", TType::getBasicString(baseType), "substituting 'mediump'"); + else + error(loc, "type requires declaration of default precision qualifier", TType::getBasicString(baseType), ""); + qualifier.precision = EpqMedium; + defaultPrecision[baseType] = EpqMedium; + } + } else if (qualifier.precision != EpqNone) + error(loc, "type cannot have precision qualifier", TType::getBasicString(baseType), ""); +} + +void TParseContext::parameterTypeCheck(const TSourceLoc& loc, TStorageQualifier qualifier, const TType& type) +{ + if ((qualifier == EvqOut || qualifier == EvqInOut) && type.isOpaque()) + error(loc, "samplers and atomic_uints cannot be output parameters", type.getBasicTypeString().c_str(), ""); +} + +bool TParseContext::containsFieldWithBasicType(const TType& type, TBasicType basicType) +{ + if (type.getBasicType() == basicType) + return true; + + if (type.getBasicType() == EbtStruct) { + const TTypeList& structure = *type.getStruct(); + for (unsigned int i = 0; i < structure.size(); ++i) { + if (containsFieldWithBasicType(*structure[i].type, basicType)) + return true; + } + } + + return false; +} + +// +// Do size checking for an array type's size. +// +void TParseContext::arraySizeCheck(const TSourceLoc& loc, TIntermTyped* expr, TArraySize& sizePair) +{ + bool isConst = false; + sizePair.node = nullptr; + + int size = 1; + + TIntermConstantUnion* constant = expr->getAsConstantUnion(); + if (constant) { + // handle true (non-specialization) constant + size = constant->getConstArray()[0].getIConst(); + isConst = true; + } else { + // see if it's a specialization constant instead + if (expr->getQualifier().isSpecConstant()) { + isConst = true; + sizePair.node = expr; + TIntermSymbol* symbol = expr->getAsSymbolNode(); + if (symbol && symbol->getConstArray().size() > 0) + size = symbol->getConstArray()[0].getIConst(); + } + } + + sizePair.size = size; + + if (! isConst || (expr->getBasicType() != EbtInt && expr->getBasicType() != EbtUint)) { + error(loc, "array size must be a constant integer expression", "", ""); + return; + } + + if (size <= 0) { + error(loc, "array size must be a positive integer", "", ""); + return; + } +} + +// +// See if this qualifier can be an array. +// +// Returns true if there is an error. +// +bool TParseContext::arrayQualifierError(const TSourceLoc& loc, const TQualifier& qualifier) +{ + if (qualifier.storage == EvqConst) { + profileRequires(loc, ENoProfile, 120, E_GL_3DL_array_objects, "const array"); + profileRequires(loc, EEsProfile, 300, nullptr, "const array"); + } + + if (qualifier.storage == EvqVaryingIn && language == EShLangVertex) { + requireProfile(loc, ~EEsProfile, "vertex input arrays"); + profileRequires(loc, ENoProfile, 150, nullptr, "vertex input arrays"); + } + + return false; +} + +// +// See if this qualifier and type combination can be an array. +// Assumes arrayQualifierError() was also called to catch the type-invariant tests. +// +// Returns true if there is an error. +// +bool TParseContext::arrayError(const TSourceLoc& loc, const TType& type) +{ + if (type.getQualifier().storage == EvqVaryingOut && language == EShLangVertex) { + if (type.isArrayOfArrays()) + requireProfile(loc, ~EEsProfile, "vertex-shader array-of-array output"); + else if (type.isStruct()) + requireProfile(loc, ~EEsProfile, "vertex-shader array-of-struct output"); + } + if (type.getQualifier().storage == EvqVaryingIn && language == EShLangFragment) { + if (type.isArrayOfArrays()) + requireProfile(loc, ~EEsProfile, "fragment-shader array-of-array input"); + else if (type.isStruct()) + requireProfile(loc, ~EEsProfile, "fragment-shader array-of-struct input"); + } + if (type.getQualifier().storage == EvqVaryingOut && language == EShLangFragment) { + if (type.isArrayOfArrays()) + requireProfile(loc, ~EEsProfile, "fragment-shader array-of-array output"); + } + + return false; +} + +// +// Require array to be completely sized +// +void TParseContext::arraySizeRequiredCheck(const TSourceLoc& loc, const TArraySizes& arraySizes) +{ + if (arraySizes.isImplicit()) + error(loc, "array size required", "", ""); +} + +void TParseContext::structArrayCheck(const TSourceLoc& /*loc*/, const TType& type) +{ + const TTypeList& structure = *type.getStruct(); + for (int m = 0; m < (int)structure.size(); ++m) { + const TType& member = *structure[m].type; + if (member.isArray()) + arraySizeRequiredCheck(structure[m].loc, *member.getArraySizes()); + } +} + +void TParseContext::arrayUnsizedCheck(const TSourceLoc& loc, const TQualifier& qualifier, const TArraySizes* arraySizes, bool initializer, bool lastMember) +{ + assert(arraySizes); + + // always allow special built-in ins/outs sized to topologies + if (parsingBuiltins) + return; + + // always allow an initializer to set any unknown array sizes + if (initializer) + return; + + // No environment lets any non-outer-dimension that's to be implicitly sized + if (arraySizes->isInnerImplicit()) + error(loc, "only outermost dimension of an array of arrays can be implicitly sized", "[]", ""); + + // desktop always allows outer-dimension-unsized variable arrays, + if (profile != EEsProfile) + return; + + // for ES, if size isn't coming from an initializer, it has to be explicitly declared now, + // with very few exceptions + + // last member of ssbo block exception: + if (qualifier.storage == EvqBuffer && lastMember) + return; + + // implicitly-sized io exceptions: + switch (language) { + case EShLangGeometry: + if (qualifier.storage == EvqVaryingIn) + if (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)) + return; + break; + case EShLangTessEvaluation: + if ((qualifier.storage == EvqVaryingIn && ! qualifier.patch) || + qualifier.storage == EvqVaryingOut) + if (extensionsTurnedOn(Num_AEP_tessellation_shader, AEP_tessellation_shader)) + return; + break; + default: + break; + } + + arraySizeRequiredCheck(loc, *arraySizes); +} + +void TParseContext::arrayOfArrayVersionCheck(const TSourceLoc& loc) +{ + const char* feature = "arrays of arrays"; + + requireProfile(loc, EEsProfile | ECoreProfile | ECompatibilityProfile, feature); + profileRequires(loc, EEsProfile, 310, nullptr, feature); + profileRequires(loc, ECoreProfile | ECompatibilityProfile, 430, nullptr, feature); +} + +void TParseContext::arrayDimCheck(const TSourceLoc& loc, const TArraySizes* sizes1, const TArraySizes* sizes2) +{ + if ((sizes1 && sizes2) || + (sizes1 && sizes1->getNumDims() > 1) || + (sizes2 && sizes2->getNumDims() > 1)) + arrayOfArrayVersionCheck(loc); +} + +void TParseContext::arrayDimCheck(const TSourceLoc& loc, const TType* type, const TArraySizes* sizes2) +{ + // skip checking for multiple dimensions on the type; it was caught earlier + if ((type && type->isArray() && sizes2) || + (sizes2 && sizes2->getNumDims() > 1)) + arrayOfArrayVersionCheck(loc); +} + +// Merge array dimensions listed in 'sizes' onto the type's array dimensions. +// +// From the spec: "vec4[2] a[3]; // size-3 array of size-2 array of vec4" +// +// That means, the 'sizes' go in front of the 'type' as outermost sizes. +// 'type' is the type part of the declaration (to the left) +// 'sizes' is the arrayness tagged on the identifier (to the right) +// +void TParseContext::arrayDimMerge(TType& type, const TArraySizes* sizes) +{ + if (sizes) + type.addArrayOuterSizes(*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) +{ + if (symbol == nullptr) { + bool currentScope; + symbol = symbolTable.find(identifier, nullptr, ¤tScope); + + if (symbol && builtInName(identifier) && ! symbolTable.atBuiltInLevel()) { + // bad shader (errors already reported) trying to redeclare a built-in name as an array + symbol = nullptr; + return; + } + if (symbol == nullptr || ! currentScope) { + // + // Successfully process a new definition. + // (Redeclarations have to take place at the same scope; otherwise they are hiding declarations) + // + symbol = new TVariable(&identifier, type); + symbolTable.insert(*symbol); + if (symbolTable.atGlobalLevel()) + trackLinkage(*symbol); + + if (! symbolTable.atBuiltInLevel()) { + if (isIoResizeArray(type)) { + ioArraySymbolResizeList.push_back(symbol); + checkIoArraysConsistency(loc, true); + } else + fixIoArraySize(loc, symbol->getWritableType()); + } + + return; + } + if (symbol->getAsAnonMember()) { + error(loc, "cannot redeclare a user-block member array", identifier.c_str(), ""); + symbol = nullptr; + return; + } + } + + // + // Process a redeclaration. + // + + if (symbol == nullptr) { + error(loc, "array variable name expected", identifier.c_str(), ""); + return; + } + + // redeclareBuiltinVariable() should have already done the copyUp() + TType& existingType = symbol->getWritableType(); + + if (! existingType.isArray()) { + error(loc, "redeclaring non-array as array", identifier.c_str(), ""); + return; + } + + if (! existingType.sameElementType(type)) { + error(loc, "redeclaration of array with a different element type", identifier.c_str(), ""); + return; + } + + if (! existingType.sameInnerArrayness(type)) { + error(loc, "redeclaration of array with a different array dimensions or sizes", identifier.c_str(), ""); + return; + } + + if (existingType.isExplicitlySizedArray()) { + // be more leniant for input arrays to geometry shaders and tessellation control outputs, where the redeclaration is the same size + if (! (isIoResizeArray(type) && existingType.getOuterArraySize() == type.getOuterArraySize())) + error(loc, "redeclaration of array with size", identifier.c_str(), ""); + return; + } + + arrayLimitCheck(loc, identifier, type.getOuterArraySize()); + + existingType.updateArraySizes(type); + + if (isIoResizeArray(type)) + checkIoArraysConsistency(loc); +} + +void TParseContext::updateImplicitArraySize(const TSourceLoc& loc, TIntermNode *node, int index) +{ + // maybe there is nothing to do... + TIntermTyped* typedNode = node->getAsTyped(); + if (typedNode->getType().getImplicitArraySize() > index) + return; + + // something to do... + + // Figure out what symbol to lookup, as we will use its type to edit for the size change, + // as that type will be shared through shallow copies for future references. + TSymbol* symbol = nullptr; + int blockIndex = -1; + const TString* lookupName = nullptr; + if (node->getAsSymbolNode()) + lookupName = &node->getAsSymbolNode()->getName(); + else if (node->getAsBinaryNode()) { + const TIntermBinary* deref = node->getAsBinaryNode(); + // This has to be the result of a block dereference, unless it's bad shader code + // If it's a uniform block, then an error will be issued elsewhere, but + // return early now to avoid crashing later in this function. + if (deref->getLeft()->getBasicType() != EbtBlock || + deref->getLeft()->getType().getQualifier().storage == EvqUniform || + deref->getRight()->getAsConstantUnion() == nullptr) + return; + + const TIntermTyped* left = deref->getLeft(); + const TIntermTyped* right = deref->getRight(); + + if (left->getAsBinaryNode()) { + left = left->getAsBinaryNode()->getLeft(); // Block array access + assert(left->isArray()); + } + + if (! left->getAsSymbolNode()) + return; + + blockIndex = right->getAsConstantUnion()->getConstArray()[0].getIConst(); + + lookupName = &left->getAsSymbolNode()->getName(); + if (IsAnonymous(*lookupName)) + lookupName = &(*left->getType().getStruct())[blockIndex].type->getFieldName(); + } + + // Lookup the symbol, should only fail if shader code is incorrect + symbol = symbolTable.find(*lookupName); + if (symbol == nullptr) + return; + + if (symbol->getAsFunction()) { + error(loc, "array variable name expected", symbol->getName().c_str(), ""); + return; + } + + if (symbol->getType().isStruct() && blockIndex != -1) + (*symbol->getWritableType().getStruct())[blockIndex].type->setImplicitArraySize(index + 1); + else + symbol->getWritableType().setImplicitArraySize(index + 1); +} + +// Returns true if the first argument to the #line directive is the line number for the next line. +// +// Desktop, pre-version 3.30: "After processing this directive +// (including its new-line), the implementation will behave as if it is compiling at line number line+1 and +// source string number source-string-number." +// +// Desktop, version 3.30 and later, and ES: "After processing this directive +// (including its new-line), the implementation will behave as if it is compiling at line number line and +// source string number source-string-number. +bool TParseContext::lineDirectiveShouldSetNextLine() const +{ + return profile == EEsProfile || version >= 330; +} + +// +// Enforce non-initializer type/qualifier rules. +// +void TParseContext::nonInitConstCheck(const TSourceLoc& loc, TString& identifier, TType& type) +{ + // + // Make the qualifier make sense, given that there is not an initializer. + // + if (type.getQualifier().storage == EvqConst || + type.getQualifier().storage == EvqConstReadOnly) { + type.getQualifier().makeTemporary(); + error(loc, "variables with qualifier 'const' must be initialized", identifier.c_str(), ""); + } +} + +// +// See if the identifier is a built-in symbol that can be redeclared, and if so, +// copy the symbol table's read-only built-in variable to the current +// global level, where it can be modified based on the passed in type. +// +// Returns nullptr if no redeclaration took place; meaning a normal declaration still +// needs to occur for it, not necessarily an error. +// +// Returns a redeclared and type-modified variable if a redeclarated occurred. +// +TSymbol* TParseContext::redeclareBuiltinVariable(const TSourceLoc& loc, const TString& identifier, + const TQualifier& qualifier, const TShaderQualifiers& publicType) +{ + if (! builtInName(identifier) || symbolTable.atBuiltInLevel() || ! symbolTable.atGlobalLevel()) + 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)); + if (! esRedecls && ! nonEsRedecls) + return nullptr; + + // Special case when using GL_ARB_separate_shader_objects + bool ssoPre150 = false; // means the only reason this variable is redeclared is due to this combination + if (profile != EEsProfile && version <= 140 && extensionTurnedOn(E_GL_ARB_separate_shader_objects)) { + if (identifier == "gl_Position" || + identifier == "gl_PointSize" || + identifier == "gl_ClipVertex" || + identifier == "gl_FogFragCoord") + ssoPre150 = true; + } + + // Potentially redeclaring a built-in variable... + + if (ssoPre150 || + (identifier == "gl_FragDepth" && ((nonEsRedecls && version >= 420) || esRedecls)) || + (identifier == "gl_FragCoord" && ((nonEsRedecls && version >= 150) || esRedecls)) || + identifier == "gl_ClipDistance" || + identifier == "gl_CullDistance" || + identifier == "gl_FrontColor" || + identifier == "gl_BackColor" || + identifier == "gl_FrontSecondaryColor" || + identifier == "gl_BackSecondaryColor" || + identifier == "gl_SecondaryColor" || + (identifier == "gl_Color" && language == EShLangFragment) || +#ifdef NV_EXTENSIONS + identifier == "gl_SampleMask" || + identifier == "gl_Layer" || +#endif + identifier == "gl_TexCoord") { + + // Find the existing symbol, if any. + bool builtIn; + TSymbol* symbol = symbolTable.find(identifier, &builtIn); + + // If the symbol was not found, this must be a version/profile/stage + // that doesn't have it. + if (! symbol) + return nullptr; + + // If it wasn't at a built-in level, then it's already been redeclared; + // that is, this is a redeclaration of a redeclaration; reuse that initial + // redeclaration. Otherwise, make the new one. + if (builtIn) + makeEditable(symbol); + + // Now, modify the type of the copy, as per the type of the current redeclaration. + + TQualifier& symbolQualifier = symbol->getWritableType().getQualifier(); + if (ssoPre150) { + if (intermediate.inIoAccessed(identifier)) + error(loc, "cannot redeclare after use", identifier.c_str(), ""); + if (qualifier.hasLayout()) + error(loc, "cannot apply layout qualifier to", "redeclaration", symbol->getName().c_str()); + if (qualifier.isMemory() || qualifier.isAuxiliary() || (language == EShLangVertex && qualifier.storage != EvqVaryingOut) || + (language == EShLangFragment && qualifier.storage != EvqVaryingIn)) + error(loc, "cannot change storage, memory, or auxiliary qualification of", "redeclaration", symbol->getName().c_str()); + if (! qualifier.smooth) + error(loc, "cannot change interpolation qualification of", "redeclaration", symbol->getName().c_str()); + } else if (identifier == "gl_FrontColor" || + identifier == "gl_BackColor" || + identifier == "gl_FrontSecondaryColor" || + identifier == "gl_BackSecondaryColor" || + identifier == "gl_SecondaryColor" || + identifier == "gl_Color") { + symbolQualifier.flat = qualifier.flat; + symbolQualifier.smooth = qualifier.smooth; + symbolQualifier.nopersp = qualifier.nopersp; + if (qualifier.hasLayout()) + error(loc, "cannot apply layout qualifier to", "redeclaration", symbol->getName().c_str()); + if (qualifier.isMemory() || qualifier.isAuxiliary() || symbol->getType().getQualifier().storage != qualifier.storage) + error(loc, "cannot change storage, memory, or auxiliary qualification of", "redeclaration", symbol->getName().c_str()); + } else if (identifier == "gl_TexCoord" || + identifier == "gl_ClipDistance" || + identifier == "gl_CullDistance") { + if (qualifier.hasLayout() || qualifier.isMemory() || qualifier.isAuxiliary() || + qualifier.nopersp != symbolQualifier.nopersp || qualifier.flat != symbolQualifier.flat || + symbolQualifier.storage != qualifier.storage) + error(loc, "cannot change qualification of", "redeclaration", symbol->getName().c_str()); + } else if (identifier == "gl_FragCoord") { + if (intermediate.inIoAccessed("gl_FragCoord")) + error(loc, "cannot redeclare after use", "gl_FragCoord", ""); + if (qualifier.nopersp != symbolQualifier.nopersp || qualifier.flat != symbolQualifier.flat || + qualifier.isMemory() || qualifier.isAuxiliary()) + error(loc, "can only change layout qualification of", "redeclaration", symbol->getName().c_str()); + if (qualifier.storage != EvqVaryingIn) + error(loc, "cannot change input storage qualification of", "redeclaration", symbol->getName().c_str()); + if (! builtIn && (publicType.pixelCenterInteger != intermediate.getPixelCenterInteger() || + publicType.originUpperLeft != intermediate.getOriginUpperLeft())) + error(loc, "cannot redeclare with different qualification:", "redeclaration", symbol->getName().c_str()); + if (publicType.pixelCenterInteger) + intermediate.setPixelCenterInteger(); + if (publicType.originUpperLeft) + intermediate.setOriginUpperLeft(); + } else if (identifier == "gl_FragDepth") { + if (qualifier.nopersp != symbolQualifier.nopersp || qualifier.flat != symbolQualifier.flat || + qualifier.isMemory() || qualifier.isAuxiliary()) + error(loc, "can only change layout qualification of", "redeclaration", symbol->getName().c_str()); + if (qualifier.storage != EvqVaryingOut) + error(loc, "cannot change output storage qualification of", "redeclaration", symbol->getName().c_str()); + if (publicType.layoutDepth != EldNone) { + if (intermediate.inIoAccessed("gl_FragDepth")) + error(loc, "cannot redeclare after use", "gl_FragDepth", ""); + if (! intermediate.setDepth(publicType.layoutDepth)) + error(loc, "all redeclarations must use the same depth layout on", "redeclaration", symbol->getName().c_str()); + } + } +#ifdef NV_EXTENSIONS + else if (identifier == "gl_SampleMask") { + if (!publicType.layoutOverrideCoverage) { + error(loc, "redeclaration only allowed for override_coverage layout", "redeclaration", symbol->getName().c_str()); + } + intermediate.setLayoutOverrideCoverage(); + } + else if (identifier == "gl_Layer") { + if (!qualifier.layoutViewportRelative && qualifier.layoutSecondaryViewportRelativeOffset == -2048) + error(loc, "redeclaration only allowed for viewport_relative or secondary_view_offset layout", "redeclaration", symbol->getName().c_str()); + symbolQualifier.layoutViewportRelative = qualifier.layoutViewportRelative; + symbolQualifier.layoutSecondaryViewportRelativeOffset = qualifier.layoutSecondaryViewportRelativeOffset; + } +#endif + + // TODO: semantics quality: separate smooth from nothing declared, then use IsInterpolation for several tests above + + return symbol; + } + + return nullptr; +} + +// +// 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 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, 410, E_GL_ARB_separate_shader_objects, feature); + + if (blockName != "gl_PerVertex" && blockName != "gl_PerFragment") { + error(loc, "cannot redeclare block: ", "block declaration", blockName.c_str()); + return; + } + + // Redeclaring a built-in block... + + if (instanceName && ! builtInName(*instanceName)) { + error(loc, "cannot redeclare a built-in block with a user name", instanceName->c_str(), ""); + return; + } + + // 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(); + +#ifdef NV_EXTENSIONS + // if gl_PerVertex is redeclared for the purpose of passing through "gl_Position" + // for passthrough purpose, the redclared block should have the same qualifers as + // the current one + if (currentBlockQualifier.layoutPassthrough) + { + type.getQualifier().layoutPassthrough = currentBlockQualifier.layoutPassthrough; + type.getQualifier().storage = currentBlockQualifier.storage; + type.getQualifier().layoutStream = currentBlockQualifier.layoutStream; + type.getQualifier().layoutXfbBuffer = currentBlockQualifier.layoutXfbBuffer; + } +#endif + + 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(), ""); + else if (newType.isArray()) + arrayLimitCheck(loc, member->type->getFieldName(), newType.getOuterArraySize()); + 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; + +#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()); + + // 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); + + // Check for general layout qualifier errors + layoutObjectCheck(loc, *block); + + // Tracking for implicit sizing of array + if (isIoResizeArray(block->getType())) { + ioArraySymbolResizeList.push_back(block); + checkIoArraysConsistency(loc, true); + } else if (block->getType().isArray()) + fixIoArraySize(loc, block->getWritableType()); + + // Save it in the AST for linker use. + trackLinkage(*block); +} + +void TParseContext::paramCheckFix(const TSourceLoc& loc, const TStorageQualifier& qualifier, TType& type) +{ + switch (qualifier) { + case EvqConst: + case EvqConstReadOnly: + type.getQualifier().storage = EvqConstReadOnly; + break; + case EvqIn: + case EvqOut: + case EvqInOut: + type.getQualifier().storage = qualifier; + break; + case EvqGlobal: + case EvqTemporary: + type.getQualifier().storage = EvqIn; + break; + default: + type.getQualifier().storage = EvqIn; + error(loc, "storage qualifier not allowed on function parameter", GetStorageQualifierString(qualifier), ""); + break; + } +} + +void TParseContext::paramCheckFix(const TSourceLoc& loc, const TQualifier& qualifier, TType& type) +{ + if (qualifier.isMemory()) { + type.getQualifier().volatil = qualifier.volatil; + type.getQualifier().coherent = qualifier.coherent; + type.getQualifier().readonly = qualifier.readonly; + type.getQualifier().writeonly = qualifier.writeonly; + type.getQualifier().restrict = qualifier.restrict; + } + + if (qualifier.isAuxiliary() || + qualifier.isInterpolation()) + error(loc, "cannot use auxiliary or interpolation qualifiers on a function parameter", "", ""); + if (qualifier.hasLayout()) + error(loc, "cannot use layout qualifiers on a function parameter", "", ""); + if (qualifier.invariant) + error(loc, "cannot use invariant qualifier on a function parameter", "", ""); + if (qualifier.noContraction) { + if (qualifier.isParamOutput()) + type.getQualifier().noContraction = true; + else + warn(loc, "qualifier has no effect on non-output parameters", "precise", ""); + } + + paramCheckFix(loc, qualifier.storage, type); +} + +void TParseContext::nestedBlockCheck(const TSourceLoc& loc) +{ + if (structNestingLevel > 0) + error(loc, "cannot nest a block definition inside a structure or block", "", ""); + ++structNestingLevel; +} + +void TParseContext::nestedStructCheck(const TSourceLoc& loc) +{ + if (structNestingLevel > 0) + error(loc, "cannot nest a structure definition inside a structure or block", "", ""); + ++structNestingLevel; +} + +void TParseContext::arrayObjectCheck(const TSourceLoc& loc, const TType& type, const char* op) +{ + // Some versions don't allow comparing arrays or structures containing arrays + if (type.containsArray()) { + profileRequires(loc, ENoProfile, 120, E_GL_3DL_array_objects, op); + profileRequires(loc, EEsProfile, 300, nullptr, op); + } +} + +void TParseContext::opaqueCheck(const TSourceLoc& loc, const TType& type, const char* op) +{ + if (containsFieldWithBasicType(type, EbtSampler)) + error(loc, "can't use with samplers or structs containing samplers", op, ""); +} + +void TParseContext::specializationCheck(const TSourceLoc& loc, const TType& type, const char* op) +{ + if (type.containsSpecializationSize()) + error(loc, "can't use with types containing arrays sized with a specialization constant", op, ""); +} + +void TParseContext::structTypeCheck(const TSourceLoc& /*loc*/, TPublicType& publicType) +{ + const TTypeList& typeList = *publicType.userDef->getStruct(); + + // fix and check for member storage qualifiers and types that don't belong within a structure + for (unsigned int member = 0; member < typeList.size(); ++member) { + TQualifier& memberQualifier = typeList[member].type->getQualifier(); + const TSourceLoc& memberLoc = typeList[member].loc; + if (memberQualifier.isAuxiliary() || + memberQualifier.isInterpolation() || + (memberQualifier.storage != EvqTemporary && memberQualifier.storage != EvqGlobal)) + error(memberLoc, "cannot use storage or interpolation qualifiers on structure members", typeList[member].type->getFieldName().c_str(), ""); + if (memberQualifier.isMemory()) + error(memberLoc, "cannot use memory qualifiers on structure members", typeList[member].type->getFieldName().c_str(), ""); + if (memberQualifier.hasLayout()) { + error(memberLoc, "cannot use layout qualifiers on structure members", typeList[member].type->getFieldName().c_str(), ""); + memberQualifier.clearLayout(); + } + if (memberQualifier.invariant) + error(memberLoc, "cannot use invariant qualifier on structure members", typeList[member].type->getFieldName().c_str(), ""); + } +} + +// +// See if this loop satisfies the limitations for ES 2.0 (version 100) for loops in Appendex A: +// +// "The loop index has type int or float. +// +// "The for statement has the form: +// for ( init-declaration ; condition ; expression ) +// init-declaration has the form: type-specifier identifier = constant-expression +// condition has the form: loop-index relational_operator constant-expression +// where relational_operator is one of: > >= < <= == or != +// expression [sic] has one of the following forms: +// loop-index++ +// loop-index-- +// loop-index += constant-expression +// loop-index -= constant-expression +// +// The body is handled in an AST traversal. +// +void TParseContext::inductiveLoopCheck(const TSourceLoc& loc, TIntermNode* init, TIntermLoop* loop) +{ + // loop index init must exist and be a declaration, which shows up in the AST as an aggregate of size 1 of the declaration + bool badInit = false; + if (! init || ! init->getAsAggregate() || init->getAsAggregate()->getSequence().size() != 1) + badInit = true; + TIntermBinary* binaryInit = 0; + if (! badInit) { + // get the declaration assignment + binaryInit = init->getAsAggregate()->getSequence()[0]->getAsBinaryNode(); + if (! binaryInit) + badInit = true; + } + if (badInit) { + error(loc, "inductive-loop init-declaration requires the form \"type-specifier loop-index = constant-expression\"", "limitations", ""); + return; + } + + // loop index must be type int or float + if (! binaryInit->getType().isScalar() || (binaryInit->getBasicType() != EbtInt && binaryInit->getBasicType() != EbtFloat)) { + error(loc, "inductive loop requires a scalar 'int' or 'float' loop index", "limitations", ""); + return; + } + + // init is the form "loop-index = constant" + if (binaryInit->getOp() != EOpAssign || ! binaryInit->getLeft()->getAsSymbolNode() || ! binaryInit->getRight()->getAsConstantUnion()) { + error(loc, "inductive-loop init-declaration requires the form \"type-specifier loop-index = constant-expression\"", "limitations", ""); + return; + } + + // get the unique id of the loop index + int loopIndex = binaryInit->getLeft()->getAsSymbolNode()->getId(); + inductiveLoopIds.insert(loopIndex); + + // condition's form must be "loop-index relational-operator constant-expression" + bool badCond = ! loop->getTest(); + if (! badCond) { + TIntermBinary* binaryCond = loop->getTest()->getAsBinaryNode(); + badCond = ! binaryCond; + if (! badCond) { + switch (binaryCond->getOp()) { + case EOpGreaterThan: + case EOpGreaterThanEqual: + case EOpLessThan: + case EOpLessThanEqual: + case EOpEqual: + case EOpNotEqual: + break; + default: + badCond = true; + } + } + if (binaryCond && (! binaryCond->getLeft()->getAsSymbolNode() || + binaryCond->getLeft()->getAsSymbolNode()->getId() != loopIndex || + ! binaryCond->getRight()->getAsConstantUnion())) + badCond = true; + } + if (badCond) { + error(loc, "inductive-loop condition requires the form \"loop-index constant-expression\"", "limitations", ""); + return; + } + + // loop-index++ + // loop-index-- + // loop-index += constant-expression + // loop-index -= constant-expression + bool badTerminal = ! loop->getTerminal(); + if (! badTerminal) { + TIntermUnary* unaryTerminal = loop->getTerminal()->getAsUnaryNode(); + TIntermBinary* binaryTerminal = loop->getTerminal()->getAsBinaryNode(); + if (unaryTerminal || binaryTerminal) { + switch(loop->getTerminal()->getAsOperator()->getOp()) { + case EOpPostDecrement: + case EOpPostIncrement: + case EOpAddAssign: + case EOpSubAssign: + break; + default: + badTerminal = true; + } + } else + badTerminal = true; + if (binaryTerminal && (! binaryTerminal->getLeft()->getAsSymbolNode() || + binaryTerminal->getLeft()->getAsSymbolNode()->getId() != loopIndex || + ! binaryTerminal->getRight()->getAsConstantUnion())) + badTerminal = true; + if (unaryTerminal && (! unaryTerminal->getOperand()->getAsSymbolNode() || + unaryTerminal->getOperand()->getAsSymbolNode()->getId() != loopIndex)) + badTerminal = true; + } + if (badTerminal) { + error(loc, "inductive-loop termination requires the form \"loop-index++, loop-index--, loop-index += constant-expression, or loop-index -= constant-expression\"", "limitations", ""); + return; + } + + // the body + inductiveLoopBodyCheck(loop->getBody(), loopIndex, symbolTable); +} + +// Do limit checks for built-in arrays. +void TParseContext::arrayLimitCheck(const TSourceLoc& loc, const TString& identifier, int size) +{ + if (identifier.compare("gl_TexCoord") == 0) + limitCheck(loc, size, "gl_MaxTextureCoords", "gl_TexCoord array size"); + else if (identifier.compare("gl_ClipDistance") == 0) + limitCheck(loc, size, "gl_MaxClipDistances", "gl_ClipDistance array size"); + else if (identifier.compare("gl_CullDistance") == 0) + limitCheck(loc, size, "gl_MaxCullDistances", "gl_CullDistance array size"); +} + +// See if the provided value is less than or equal to the symbol indicated by limit, +// which should be a constant in the symbol table. +void TParseContext::limitCheck(const TSourceLoc& loc, int value, const char* limit, const char* feature) +{ + TSymbol* symbol = symbolTable.find(limit); + assert(symbol->getAsVariable()); + const TConstUnionArray& constArray = symbol->getAsVariable()->getConstArray(); + assert(! constArray.empty()); + if (value > constArray[0].getIConst()) + error(loc, "must be less than or equal to", feature, "%s (%d)", limit, constArray[0].getIConst()); +} + +// +// Do any additional error checking, etc., once we know the parsing is done. +// +void TParseContext::finish() +{ + TParseContextBase::finish(); + + if (parsingBuiltins) + return; + + // Check on array indexes for ES 2.0 (version 100) limitations. + for (size_t i = 0; i < needsIndexLimitationChecking.size(); ++i) + constantIndexExpressionCheck(needsIndexLimitationChecking[i]); + + // Check for stages that are enabled by extension. + // Can't do this at the beginning, it is chicken and egg to add a stage by + // extension. + // Stage-specific features were correctly tested for already, this is just + // about the stage itself. + switch (language) { + case EShLangGeometry: + if (profile == EEsProfile && version == 310) + requireExtensions(getCurrentLoc(), Num_AEP_geometry_shader, AEP_geometry_shader, "geometry shaders"); + break; + case EShLangTessControl: + case EShLangTessEvaluation: + if (profile == EEsProfile && version == 310) + requireExtensions(getCurrentLoc(), Num_AEP_tessellation_shader, AEP_tessellation_shader, "tessellation shaders"); + else if (profile != EEsProfile && version < 400) + requireExtensions(getCurrentLoc(), 1, &E_GL_ARB_tessellation_shader, "tessellation shaders"); + break; + case EShLangCompute: + if (profile != EEsProfile && version < 430) + requireExtensions(getCurrentLoc(), 1, &E_GL_ARB_compute_shader, "compute shaders"); + break; + default: + break; + } +} + +// +// Layout qualifier stuff. +// + +// Put the id's layout qualification into the public type, for qualifiers not having a number set. +// This is before we know any type information for error checking. +void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publicType, TString& id) +{ + std::transform(id.begin(), id.end(), id.begin(), ::tolower); + + if (id == TQualifier::getLayoutMatrixString(ElmColumnMajor)) { + publicType.qualifier.layoutMatrix = ElmColumnMajor; + return; + } + if (id == TQualifier::getLayoutMatrixString(ElmRowMajor)) { + publicType.qualifier.layoutMatrix = ElmRowMajor; + return; + } + if (id == TQualifier::getLayoutPackingString(ElpPacked)) { + if (spvVersion.spv != 0) + spvRemoved(loc, "packed"); + publicType.qualifier.layoutPacking = ElpPacked; + return; + } + if (id == TQualifier::getLayoutPackingString(ElpShared)) { + if (spvVersion.spv != 0) + spvRemoved(loc, "shared"); + publicType.qualifier.layoutPacking = ElpShared; + return; + } + if (id == TQualifier::getLayoutPackingString(ElpStd140)) { + publicType.qualifier.layoutPacking = ElpStd140; + return; + } + if (id == TQualifier::getLayoutPackingString(ElpStd430)) { + requireProfile(loc, EEsProfile | ECoreProfile | ECompatibilityProfile, "std430"); + profileRequires(loc, ECoreProfile | ECompatibilityProfile, 430, nullptr, "std430"); + profileRequires(loc, EEsProfile, 310, nullptr, "std430"); + publicType.qualifier.layoutPacking = ElpStd430; + return; + } + // TODO: compile-time performance: may need to stop doing linear searches + for (TLayoutFormat format = (TLayoutFormat)(ElfNone + 1); format < ElfCount; format = (TLayoutFormat)(format + 1)) { + if (id == TQualifier::getLayoutFormatString(format)) { + if ((format > ElfEsFloatGuard && format < ElfFloatGuard) || + (format > ElfEsIntGuard && format < ElfIntGuard) || + (format > ElfEsUintGuard && format < ElfCount)) + requireProfile(loc, ENoProfile | ECoreProfile | ECompatibilityProfile, "image load-store format"); + profileRequires(loc, ENoProfile | ECoreProfile | ECompatibilityProfile, 420, E_GL_ARB_shader_image_load_store, "image load store"); + profileRequires(loc, EEsProfile, 310, E_GL_ARB_shader_image_load_store, "image load store"); + publicType.qualifier.layoutFormat = format; + return; + } + } + if (id == "push_constant") { + requireVulkan(loc, "push_constant"); + publicType.qualifier.layoutPushConstant = true; + return; + } + if (language == EShLangGeometry || language == EShLangTessEvaluation) { + if (id == TQualifier::getGeometryString(ElgTriangles)) { + publicType.shaderQualifiers.geometry = ElgTriangles; + return; + } + if (language == EShLangGeometry) { + if (id == TQualifier::getGeometryString(ElgPoints)) { + publicType.shaderQualifiers.geometry = ElgPoints; + return; + } + if (id == TQualifier::getGeometryString(ElgLineStrip)) { + publicType.shaderQualifiers.geometry = ElgLineStrip; + return; + } + if (id == TQualifier::getGeometryString(ElgLines)) { + publicType.shaderQualifiers.geometry = ElgLines; + return; + } + if (id == TQualifier::getGeometryString(ElgLinesAdjacency)) { + publicType.shaderQualifiers.geometry = ElgLinesAdjacency; + return; + } + if (id == TQualifier::getGeometryString(ElgTrianglesAdjacency)) { + publicType.shaderQualifiers.geometry = ElgTrianglesAdjacency; + return; + } + if (id == TQualifier::getGeometryString(ElgTriangleStrip)) { + publicType.shaderQualifiers.geometry = ElgTriangleStrip; + return; + } +#ifdef NV_EXTENSIONS + if (id == "passthrough") { + requireExtensions(loc, 1, &E_SPV_NV_geometry_shader_passthrough, "geometry shader passthrough"); + publicType.qualifier.layoutPassthrough = true; + intermediate.setGeoPassthroughEXT(); + return; + } +#endif + } else { + assert(language == EShLangTessEvaluation); + + // input primitive + if (id == TQualifier::getGeometryString(ElgTriangles)) { + publicType.shaderQualifiers.geometry = ElgTriangles; + return; + } + if (id == TQualifier::getGeometryString(ElgQuads)) { + publicType.shaderQualifiers.geometry = ElgQuads; + return; + } + if (id == TQualifier::getGeometryString(ElgIsolines)) { + publicType.shaderQualifiers.geometry = ElgIsolines; + return; + } + + // vertex spacing + if (id == TQualifier::getVertexSpacingString(EvsEqual)) { + publicType.shaderQualifiers.spacing = EvsEqual; + return; + } + if (id == TQualifier::getVertexSpacingString(EvsFractionalEven)) { + publicType.shaderQualifiers.spacing = EvsFractionalEven; + return; + } + if (id == TQualifier::getVertexSpacingString(EvsFractionalOdd)) { + publicType.shaderQualifiers.spacing = EvsFractionalOdd; + return; + } + + // triangle order + if (id == TQualifier::getVertexOrderString(EvoCw)) { + publicType.shaderQualifiers.order = EvoCw; + return; + } + if (id == TQualifier::getVertexOrderString(EvoCcw)) { + publicType.shaderQualifiers.order = EvoCcw; + return; + } + + // point mode + if (id == "point_mode") { + publicType.shaderQualifiers.pointMode = true; + return; + } + } + } + if (language == EShLangFragment) { + if (id == "origin_upper_left") { + requireProfile(loc, ECoreProfile | ECompatibilityProfile, "origin_upper_left"); + publicType.shaderQualifiers.originUpperLeft = true; + return; + } + if (id == "pixel_center_integer") { + requireProfile(loc, ECoreProfile | ECompatibilityProfile, "pixel_center_integer"); + publicType.shaderQualifiers.pixelCenterInteger = true; + return; + } + if (id == "early_fragment_tests") { + profileRequires(loc, ENoProfile | ECoreProfile | ECompatibilityProfile, 420, E_GL_ARB_shader_image_load_store, "early_fragment_tests"); + profileRequires(loc, EEsProfile, 310, nullptr, "early_fragment_tests"); + publicType.shaderQualifiers.earlyFragmentTests = 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"); + profileRequires(loc, ECoreProfile | ECompatibilityProfile, 420, nullptr, "depth layout qualifier"); + publicType.shaderQualifiers.layoutDepth = depth; + return; + } + } + if (id.compare(0, 13, "blend_support") == 0) { + 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"); + intermediate.addBlendEquation(be); + publicType.shaderQualifiers.blendEquation = true; + found = true; + break; + } + } + if (! found) + error(loc, "unknown blend equation", "blend_support", ""); + return; + } +#ifdef NV_EXTENSIONS + if (id == "override_coverage") { + requireExtensions(loc, 1, &E_GL_NV_sample_mask_override_coverage, "sample mask override coverage"); + publicType.shaderQualifiers.layoutOverrideCoverage = true; + return; + } + } + if (language == EShLangVertex || + language == EShLangTessControl || + language == EShLangTessEvaluation || + language == EShLangGeometry ) { + if (id == "viewport_relative") { + requireExtensions(loc, 1, &E_GL_NV_viewport_array2, "view port array2"); + publicType.qualifier.layoutViewportRelative = true; + return; + } + } +#else + } +#endif + error(loc, "unrecognized layout identifier, or qualifier requires assignment (e.g., binding = 4)", id.c_str(), ""); +} + +// 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 TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publicType, TString& id, const TIntermTyped* node) +{ + const char* feature = "layout-id value"; + const char* nonLiteralFeature = "non-literal layout-id value"; + + integerCheck(node, feature); + const TIntermConstantUnion* constUnion = node->getAsConstantUnion(); + int value; + if (constUnion) { + value = constUnion->getConstArray()[0].getIConst(); + if (! constUnion->isLiteral()) { + requireProfile(loc, ECoreProfile | ECompatibilityProfile, nonLiteralFeature); + profileRequires(loc, ECoreProfile | ECompatibilityProfile, 440, E_GL_ARB_enhanced_layouts, nonLiteralFeature); + } + } else { + // grammar should have give out the error message + value = 0; + } + + if (value < 0) { + error(loc, "cannot be negative", feature, ""); + return; + } + + std::transform(id.begin(), id.end(), id.begin(), ::tolower); + + if (id == "offset") { + // "offset" can be for either + // - uniform offsets + // - atomic_uint offsets + const char* feature = "offset"; + if (spvVersion.spv == 0) { + requireProfile(loc, EEsProfile | ECoreProfile | ECompatibilityProfile, feature); + const char* exts[2] = { E_GL_ARB_enhanced_layouts, E_GL_ARB_shader_atomic_counters }; + profileRequires(loc, ECoreProfile | ECompatibilityProfile, 420, 2, exts, feature); + profileRequires(loc, EEsProfile, 310, nullptr, feature); + } + publicType.qualifier.layoutOffset = value; + return; + } else if (id == "align") { + const char* feature = "uniform buffer-member align"; + if (spvVersion.spv == 0) { + requireProfile(loc, ECoreProfile | ECompatibilityProfile, feature); + profileRequires(loc, ECoreProfile | ECompatibilityProfile, 440, E_GL_ARB_enhanced_layouts, feature); + } + // "The specified alignment must be a power of 2, or a compile-time error results." + if (! IsPow2(value)) + error(loc, "must be a power of 2", "align", ""); + else + publicType.qualifier.layoutAlign = value; + return; + } else if (id == "location") { + profileRequires(loc, EEsProfile, 300, nullptr, "location"); + const char* exts[2] = { E_GL_ARB_separate_shader_objects, E_GL_ARB_explicit_attrib_location }; + profileRequires(loc, ~EEsProfile, 330, 2, exts, "location"); + if ((unsigned int)value >= TQualifier::layoutLocationEnd) + error(loc, "location is too large", id.c_str(), ""); + else + publicType.qualifier.layoutLocation = value; + return; + } else if (id == "set") { + if ((unsigned int)value >= TQualifier::layoutSetEnd) + error(loc, "set is too large", id.c_str(), ""); + else + publicType.qualifier.layoutSet = value; + if (value != 0) + requireVulkan(loc, "descriptor set"); + return; + } else if (id == "binding") { + profileRequires(loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, "binding"); + profileRequires(loc, EEsProfile, 310, nullptr, "binding"); + if ((unsigned int)value >= TQualifier::layoutBindingEnd) + error(loc, "binding is too large", id.c_str(), ""); + else + publicType.qualifier.layoutBinding = value; + return; + } else if (id == "component") { + requireProfile(loc, ECoreProfile | ECompatibilityProfile, "component"); + profileRequires(loc, ECoreProfile | ECompatibilityProfile, 440, E_GL_ARB_enhanced_layouts, "component"); + if ((unsigned)value >= TQualifier::layoutComponentEnd) + error(loc, "component is too large", id.c_str(), ""); + else + publicType.qualifier.layoutComponent = value; + return; + } else if (id.compare(0, 4, "xfb_") == 0) { + // "Any shader making any static use (after preprocessing) of any of these + // *xfb_* qualifiers will cause the shader to be in a transform feedback + // capturing mode and hence responsible for describing the transform feedback + // setup." + intermediate.setXfbMode(); + const char* feature = "transform feedback qualifier"; + requireStage(loc, (EShLanguageMask)(EShLangVertexMask | EShLangGeometryMask | EShLangTessControlMask | EShLangTessEvaluationMask), feature); + requireProfile(loc, ECoreProfile | ECompatibilityProfile, feature); + profileRequires(loc, ECoreProfile | ECompatibilityProfile, 440, E_GL_ARB_enhanced_layouts, feature); + if (id == "xfb_buffer") { + // "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); + if (value >= (int)TQualifier::layoutXfbBufferEnd) + error(loc, "buffer is too large:", id.c_str(), "internal max is %d", TQualifier::layoutXfbBufferEnd-1); + else + publicType.qualifier.layoutXfbBuffer = value; + return; + } else if (id == "xfb_offset") { + if (value >= (int)TQualifier::layoutXfbOffsetEnd) + error(loc, "offset is too large:", id.c_str(), "internal max is %d", TQualifier::layoutXfbOffsetEnd-1); + else + publicType.qualifier.layoutXfbOffset = value; + return; + } else if (id == "xfb_stride") { + // "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); + 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) + publicType.qualifier.layoutXfbStride = value; + return; + } + } + + if (id == "input_attachment_index") { + requireVulkan(loc, "input_attachment_index"); + if (value >= (int)TQualifier::layoutAttachmentEnd) + error(loc, "attachment index is too large", id.c_str(), ""); + else + publicType.qualifier.layoutAttachment = value; + return; + } + if (id == "constant_id") { + requireSpv(loc, "constant_id"); + if (value >= (int)TQualifier::layoutSpecConstantIdEnd) { + error(loc, "specialization-constant id is too large", id.c_str(), ""); + } else { + publicType.qualifier.layoutSpecConstantId = value; + publicType.qualifier.specConstant = true; + if (! intermediate.addUsedConstantId(value)) + error(loc, "specialization-constant id already used", id.c_str(), ""); + } + return; + } + +#if NV_EXTENSIONS + if (language == EShLangVertex || + language == EShLangTessControl || + language == EShLangTessEvaluation || + language == EShLangGeometry) { + if (id == "secondary_view_offset") { + requireExtensions(loc, 1, &E_GL_NV_stereo_view_rendering, "stereo view rendering"); + publicType.qualifier.layoutSecondaryViewportRelativeOffset = value; + return; + } + } +#endif + + switch (language) { + case EShLangVertex: + break; + + case EShLangTessControl: + if (id == "vertices") { + if (value == 0) + error(loc, "must be greater than 0", "vertices", ""); + else + publicType.shaderQualifiers.vertices = value; + return; + } + break; + + case EShLangTessEvaluation: + break; + + case EShLangGeometry: + if (id == "invocations") { + profileRequires(loc, ECompatibilityProfile | ECoreProfile, 400, nullptr, "invocations"); + if (value == 0) + error(loc, "must be at least 1", "invocations", ""); + else + publicType.shaderQualifiers.invocations = value; + return; + } + if (id == "max_vertices") { + publicType.shaderQualifiers.vertices = value; + if (value > resources.maxGeometryOutputVertices) + error(loc, "too large, must be less than gl_MaxGeometryOutputVertices", "max_vertices", ""); + return; + } + if (id == "stream") { + requireProfile(loc, ~EEsProfile, "selecting output stream"); + publicType.qualifier.layoutStream = value; + if (value > 0) + intermediate.setMultiStream(); + return; + } + break; + + case EShLangFragment: + if (id == "index") { + requireProfile(loc, ECompatibilityProfile | ECoreProfile, "index layout qualifier on fragment output"); + const char* exts[2] = { E_GL_ARB_separate_shader_objects, E_GL_ARB_explicit_attrib_location }; + profileRequires(loc, ECompatibilityProfile | ECoreProfile, 330, 2, exts, "index layout qualifier on fragment output"); + + // "It is also a compile-time error if a fragment shader sets a layout index to less than 0 or greater than 1." + if (value < 0 || value > 1) { + value = 0; + error(loc, "value must be 0 or 1", "index", ""); + } + + publicType.qualifier.layoutIndex = value; + return; + } + break; + + case EShLangCompute: + 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 == "local_size_x") { + publicType.shaderQualifiers.localSize[0] = value; + return; + } + if (id == "local_size_y") { + publicType.shaderQualifiers.localSize[1] = value; + return; + } + if (id == "local_size_z") { + publicType.shaderQualifiers.localSize[2] = value; + return; + } + if (spvVersion.spv != 0) { + if (id == "local_size_x_id") { + publicType.shaderQualifiers.localSizeSpecId[0] = value; + return; + } + if (id == "local_size_y_id") { + publicType.shaderQualifiers.localSizeSpecId[1] = value; + return; + } + if (id == "local_size_z_id") { + publicType.shaderQualifiers.localSizeSpecId[2] = value; + return; + } + } + } + break; + + default: + break; + } + + error(loc, "there is no such layout identifier for this stage taking an assigned value", id.c_str(), ""); +} + +// Merge any layout qualifier information from src into dst, leaving everything else in dst alone +// +// "More than one layout qualifier may appear in a single declaration. +// Additionally, the same layout-qualifier-name can occur multiple times +// within a layout qualifier or across multiple layout qualifiers in the +// same declaration. When the same layout-qualifier-name occurs +// multiple times, in a single declaration, the last occurrence overrides +// the former occurrence(s). Further, if such a layout-qualifier-name +// will effect subsequent declarations or other observable behavior, it +// is only the last occurrence that will have any effect, behaving as if +// the earlier occurrence(s) within the declaration are not present. +// 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()) + dst.layoutMatrix = src.layoutMatrix; + if (src.hasPacking()) + dst.layoutPacking = src.layoutPacking; + + if (src.hasStream()) + dst.layoutStream = src.layoutStream; + + if (src.hasFormat()) + dst.layoutFormat = src.layoutFormat; + + if (src.hasXfbBuffer()) + dst.layoutXfbBuffer = src.layoutXfbBuffer; + + if (src.hasAlign()) + dst.layoutAlign = src.layoutAlign; + + if (! inheritOnly) { + if (src.hasLocation()) + dst.layoutLocation = src.layoutLocation; + if (src.hasComponent()) + dst.layoutComponent = src.layoutComponent; + if (src.hasIndex()) + dst.layoutIndex = src.layoutIndex; + + if (src.hasOffset()) + dst.layoutOffset = src.layoutOffset; + + if (src.hasSet()) + dst.layoutSet = src.layoutSet; + if (src.layoutBinding != TQualifier::layoutBindingEnd) + dst.layoutBinding = src.layoutBinding; + + if (src.hasXfbStride()) + dst.layoutXfbStride = src.layoutXfbStride; + if (src.hasXfbOffset()) + dst.layoutXfbOffset = src.layoutXfbOffset; + if (src.hasAttachment()) + dst.layoutAttachment = src.layoutAttachment; + if (src.hasSpecConstantId()) + dst.layoutSpecConstantId = src.layoutSpecConstantId; + + if (src.layoutPushConstant) + dst.layoutPushConstant = true; + +#ifdef NV_EXTENSIONS + if (src.layoutPassthrough) + dst.layoutPassthrough = true; + if (src.layoutViewportRelative) + dst.layoutViewportRelative = true; + if (src.layoutSecondaryViewportRelativeOffset != -2048) + dst.layoutSecondaryViewportRelativeOffset = src.layoutSecondaryViewportRelativeOffset; +#endif + } +} + +// Do error layout error checking given a full variable/block declaration. +void TParseContext::layoutObjectCheck(const TSourceLoc& loc, const TSymbol& symbol) +{ + const TType& type = symbol.getType(); + const TQualifier& qualifier = type.getQualifier(); + + // first, cross check WRT to just the type + layoutTypeCheck(loc, type); + + // now, any remaining error checking based on the object itself + + if (qualifier.hasAnyLocation()) { + switch (qualifier.storage) { + case EvqUniform: + case EvqBuffer: + if (symbol.getAsVariable() == nullptr) + error(loc, "can only be used on variable declaration", "location", ""); + break; + default: + break; + } + } + + // Check packing and matrix + if (qualifier.hasUniformLayout()) { + switch (qualifier.storage) { + case EvqUniform: + case EvqBuffer: + if (type.getBasicType() != EbtBlock) { + if (qualifier.hasMatrix()) + error(loc, "cannot specify matrix layout on a variable declaration", "layout", ""); + if (qualifier.hasPacking()) + error(loc, "cannot specify packing on a variable declaration", "layout", ""); + // "The offset qualifier can only be used on block members of blocks..." + if (qualifier.hasOffset() && type.getBasicType() != EbtAtomicUint) + error(loc, "cannot specify on a variable declaration", "offset", ""); + // "The align qualifier can only be used on blocks or block members..." + if (qualifier.hasAlign()) + error(loc, "cannot specify on a variable declaration", "align", ""); + if (qualifier.layoutPushConstant) + error(loc, "can only specify on a uniform block", "push_constant", ""); + } + break; + default: + // these were already filtered by layoutTypeCheck() (or its callees) + break; + } + } +} + +// Do layout error checking with respect to a type. +void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type) +{ + const TQualifier& qualifier = type.getQualifier(); + + // first, intra-layout qualifier-only error checking + layoutQualifierCheck(loc, qualifier); + + // now, error checking combining type and qualifier + + if (qualifier.hasAnyLocation()) { + if (qualifier.hasLocation()) { + if (qualifier.storage == EvqVaryingOut && language == EShLangFragment) { + if (qualifier.layoutLocation >= (unsigned int)resources.maxDrawBuffers) + error(loc, "too large for fragment output", "location", ""); + } + } + if (qualifier.hasComponent()) { + // "It is a compile-time error if this sequence of components gets larger than 3." + if (qualifier.layoutComponent + type.getVectorSize() * (type.getBasicType() == EbtDouble ? 2 : 1) > 4) + error(loc, "type overflows the available 4 components", "component", ""); + + // "It is a compile-time error to apply the component qualifier to a matrix, a structure, a block, or an array containing any of these." + if (type.isMatrix() || type.getBasicType() == EbtBlock || type.getBasicType() == EbtStruct) + error(loc, "cannot apply to a matrix, structure, or block", "component", ""); + + // " It is a compile-time error to use component 1 or 3 as the beginning of a double or dvec2." + if (type.getBasicType() == EbtDouble) + if (qualifier.layoutComponent & 1) + error(loc, "doubles cannot start on an odd-numbered component", "component", ""); + } + + switch (qualifier.storage) { + case EvqVaryingIn: + case EvqVaryingOut: + if (type.getBasicType() == EbtBlock) + profileRequires(loc, ECoreProfile | ECompatibilityProfile, 440, E_GL_ARB_enhanced_layouts, "location qualifier on in/out block"); + break; + case EvqUniform: + case EvqBuffer: + break; + default: + error(loc, "can only apply to uniform, buffer, in, or out storage qualifiers", "location", ""); + break; + } + + bool typeCollision; + int repeated = intermediate.addUsedLocation(qualifier, type, typeCollision); + if (repeated >= 0 && ! typeCollision) + error(loc, "overlapping use of location", "location", "%d", repeated); + // "fragment-shader outputs ... if two variables are placed within the same + // location, they must have the same underlying type (floating-point or integer)" + if (typeCollision && language == EShLangFragment && qualifier.isPipeOutput()) + error(loc, "fragment outputs sharing the same location must be the same basic type", "location", "%d", repeated); + } + + if (qualifier.hasXfbOffset() && qualifier.hasXfbBuffer()) { + int repeated = intermediate.addXfbBufferOffset(type); + if (repeated >= 0) + error(loc, "overlapping offsets at", "xfb_offset", "offset %d in buffer %d", repeated, qualifier.layoutXfbBuffer); + + // "The offset must be a multiple of the size of the first component of the first + // qualified variable or block member, or a compile-time error results. Further, if applied to an aggregate + // containing a double, the offset must also be a multiple of 8..." + if (type.containsBasicType(EbtDouble) && ! IsMultipleOfPow2(qualifier.layoutXfbOffset, 8)) + error(loc, "type contains double; xfb_offset must be a multiple of 8", "xfb_offset", ""); +#ifdef AMD_EXTENSIONS + // ..., if applied to an aggregate containing a float16_t, the offset must also be a multiple of 2..." + else if (type.containsBasicType(EbtFloat16) && !IsMultipleOfPow2(qualifier.layoutXfbOffset, 2)) + error(loc, "type contains half float; xfb_offset must be a multiple of 2", "xfb_offset", ""); +#endif + else if (! IsMultipleOfPow2(qualifier.layoutXfbOffset, 4)) + error(loc, "must be a multiple of size of first component", "xfb_offset", ""); + } + + if (qualifier.hasXfbStride() && qualifier.hasXfbBuffer()) { + if (! intermediate.setXfbBufferStride(qualifier.layoutXfbBuffer, qualifier.layoutXfbStride)) + error(loc, "all stride settings must match for xfb buffer", "xfb_stride", "%d", qualifier.layoutXfbBuffer); + } + + if (qualifier.hasBinding()) { + // Binding checking, from the spec: + // + // "If the binding point for any uniform or shader storage block instance is less than zero, or greater than or + // equal to the implementation-dependent maximum number of uniform buffer bindings, a compile-time + // error will occur. When the binding identifier is used with a uniform or shader storage block instanced as + // an array of size N, all elements of the array from binding through binding + N - 1 must be within this + // range." + // + if (! type.isOpaque() && type.getBasicType() != EbtBlock) + error(loc, "requires block, or sampler/image, or atomic-counter type", "binding", ""); + if (type.getBasicType() == EbtSampler) { + int lastBinding = qualifier.layoutBinding; + if (type.isArray()) { + if (type.isImplicitlySizedArray()) { + lastBinding += 1; + warn(loc, "assuming array size of one for compile-time checking of binding numbers for implicitly-sized array", "[]", ""); + } else + lastBinding += type.getCumulativeArraySize(); + } + if (lastBinding >= resources.maxCombinedTextureImageUnits) + error(loc, "sampler binding not less than gl_MaxCombinedTextureImageUnits", "binding", type.isArray() ? "(using array)" : ""); + } + if (type.getBasicType() == EbtAtomicUint) { + if (qualifier.layoutBinding >= (unsigned int)resources.maxAtomicCounterBindings) { + error(loc, "atomic_uint binding is too large; see gl_MaxAtomicCounterBindings", "binding", ""); + return; + } + } + } + + // atomic_uint + if (type.getBasicType() == EbtAtomicUint) { + if (! type.getQualifier().hasBinding()) + error(loc, "layout(binding=X) is required", "atomic_uint", ""); + } + + // "The offset qualifier can only be used on block members of blocks..." + if (qualifier.hasOffset()) { + if (type.getBasicType() == EbtBlock) + error(loc, "only applies to block members, not blocks", "offset", ""); + } + + // Image format + if (qualifier.hasFormat()) { + if (! type.isImage()) + error(loc, "only apply to images", TQualifier::getLayoutFormatString(qualifier.layoutFormat), ""); + else { + if (type.getSampler().type == EbtFloat && qualifier.layoutFormat > ElfFloatGuard) + error(loc, "does not apply to floating point images", TQualifier::getLayoutFormatString(qualifier.layoutFormat), ""); + if (type.getSampler().type == EbtInt && (qualifier.layoutFormat < ElfFloatGuard || qualifier.layoutFormat > ElfIntGuard)) + error(loc, "does not apply to signed integer images", TQualifier::getLayoutFormatString(qualifier.layoutFormat), ""); + if (type.getSampler().type == EbtUint && qualifier.layoutFormat < ElfIntGuard) + error(loc, "does not apply to unsigned integer images", TQualifier::getLayoutFormatString(qualifier.layoutFormat), ""); + + if (profile == EEsProfile) { + // "Except for image variables qualified with the format qualifiers r32f, r32i, and r32ui, image variables must + // specify either memory qualifier readonly or the memory qualifier writeonly." + if (! (qualifier.layoutFormat == ElfR32f || qualifier.layoutFormat == ElfR32i || qualifier.layoutFormat == ElfR32ui)) { + if (! qualifier.readonly && ! qualifier.writeonly) + error(loc, "format requires readonly or writeonly memory qualifier", TQualifier::getLayoutFormatString(qualifier.layoutFormat), ""); + } + } + } + } else if (type.isImage() && ! qualifier.writeonly) { + const char *explanation = "image variables declared 'writeonly' without a format layout qualifier"; + requireProfile(loc, ECoreProfile | ECompatibilityProfile, explanation); + profileRequires(loc, ECoreProfile | ECompatibilityProfile, 0, E_GL_EXT_shader_image_load_formatted, explanation); + } + + if (qualifier.layoutPushConstant && type.getBasicType() != EbtBlock) + error(loc, "can only be used with a block", "push_constant", ""); + + // input attachment + if (type.isSubpass()) { + if (! qualifier.hasAttachment()) + error(loc, "requires an input_attachment_index layout qualifier", "subpass", ""); + } else { + if (qualifier.hasAttachment()) + error(loc, "can only be used with a subpass", "input_attachment_index", ""); + } + + // specialization-constant id + if (qualifier.hasSpecConstantId()) { + if (type.getQualifier().storage != EvqConst) + error(loc, "can only be applied to 'const'-qualified scalar", "constant_id", ""); + if (! type.isScalar()) + error(loc, "can only be applied to a scalar", "constant_id", ""); + switch (type.getBasicType()) + { + case EbtInt: + case EbtUint: + case EbtInt64: + case EbtUint64: + case EbtBool: + case EbtFloat: + case EbtDouble: +#ifdef AMD_EXTENSIONS + case EbtFloat16: +#endif + break; + default: + error(loc, "cannot be applied to this type", "constant_id", ""); + break; + } + } +} + +// Do layout error checking that can be done within a layout qualifier proper, not needing to know +// if there are blocks, atomic counters, variables, etc. +void TParseContext::layoutQualifierCheck(const TSourceLoc& loc, const TQualifier& qualifier) +{ + if (qualifier.storage == EvqShared && qualifier.hasLayout()) + error(loc, "cannot apply layout qualifiers to a shared variable", "shared", ""); + + // "It is a compile-time error to use *component* without also specifying the location qualifier (order does not matter)." + if (qualifier.hasComponent() && ! qualifier.hasLocation()) + error(loc, "must specify 'location' to use 'component'", "component", ""); + + if (qualifier.hasAnyLocation()) { + + // "As with input layout qualifiers, all shaders except compute shaders + // allow *location* layout qualifiers on output variable declarations, + // output block declarations, and output block member declarations." + + switch (qualifier.storage) { + case EvqVaryingIn: + { + const char* feature = "location qualifier on input"; + if (profile == EEsProfile && version < 310) + requireStage(loc, EShLangVertex, feature); + else + requireStage(loc, (EShLanguageMask)~EShLangComputeMask, feature); + if (language == EShLangVertex) { + const char* exts[2] = { E_GL_ARB_separate_shader_objects, E_GL_ARB_explicit_attrib_location }; + profileRequires(loc, ~EEsProfile, 330, 2, exts, feature); + profileRequires(loc, EEsProfile, 300, nullptr, feature); + } else { + profileRequires(loc, ~EEsProfile, 410, E_GL_ARB_separate_shader_objects, feature); + profileRequires(loc, EEsProfile, 310, nullptr, feature); + } + break; + } + case EvqVaryingOut: + { + const char* feature = "location qualifier on output"; + if (profile == EEsProfile && version < 310) + requireStage(loc, EShLangFragment, feature); + else + requireStage(loc, (EShLanguageMask)~EShLangComputeMask, feature); + if (language == EShLangFragment) { + const char* exts[2] = { E_GL_ARB_separate_shader_objects, E_GL_ARB_explicit_attrib_location }; + profileRequires(loc, ~EEsProfile, 330, 2, exts, feature); + profileRequires(loc, EEsProfile, 300, nullptr, feature); + } else { + profileRequires(loc, ~EEsProfile, 410, E_GL_ARB_separate_shader_objects, feature); + profileRequires(loc, EEsProfile, 310, nullptr, feature); + } + break; + } + case EvqUniform: + case EvqBuffer: + { + const char* feature = "location qualifier on uniform or buffer"; + requireProfile(loc, EEsProfile | ECoreProfile | ECompatibilityProfile, feature); + profileRequires(loc, ECoreProfile | ECompatibilityProfile, 430, nullptr, feature); + profileRequires(loc, EEsProfile, 310, nullptr, feature); + break; + } + default: + break; + } + if (qualifier.hasIndex()) { + if (qualifier.storage != EvqVaryingOut) + error(loc, "can only be used on an output", "index", ""); + if (! qualifier.hasLocation()) + error(loc, "can only be used with an explicit location", "index", ""); + } + } + + if (qualifier.hasBinding()) { + if (! qualifier.isUniformOrBuffer()) + error(loc, "requires uniform or buffer storage qualifier", "binding", ""); + } + if (qualifier.hasStream()) { + if (qualifier.storage != EvqVaryingOut) + error(loc, "can only be used on an output", "stream", ""); + } + if (qualifier.hasXfb()) { + if (qualifier.storage != EvqVaryingOut) + error(loc, "can only be used on an output", "xfb layout qualifier", ""); + } + if (qualifier.hasUniformLayout()) { + if (! qualifier.isUniformOrBuffer()) { + if (qualifier.hasMatrix() || qualifier.hasPacking()) + error(loc, "matrix or packing qualifiers can only be used on a uniform or buffer", "layout", ""); + if (qualifier.hasOffset() || qualifier.hasAlign()) + error(loc, "offset/align can only be used on a uniform or buffer", "layout", ""); + } + } + if (qualifier.layoutPushConstant) { + if (qualifier.storage != EvqUniform) + error(loc, "can only be used with a uniform", "push_constant", ""); + if (qualifier.hasSet()) + error(loc, "cannot be used with push_constant", "set", ""); + } +} + +// For places that can't have shader-level layout qualifiers +void TParseContext::checkNoShaderLayouts(const TSourceLoc& loc, const TShaderQualifiers& shaderQualifiers) +{ + const char* message = "can only apply to a standalone qualifier"; + + if (shaderQualifiers.geometry != ElgNone) + error(loc, message, TQualifier::getGeometryString(shaderQualifiers.geometry), ""); + if (shaderQualifiers.invocations != TQualifier::layoutNotSet) + error(loc, message, "invocations", ""); + if (shaderQualifiers.vertices != TQualifier::layoutNotSet) { + if (language == EShLangGeometry) + error(loc, message, "max_vertices", ""); + else if (language == EShLangTessControl) + error(loc, message, "vertices", ""); + 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 +} + +// Correct and/or advance an object's offset layout qualifier. +void TParseContext::fixOffset(const TSourceLoc& loc, TSymbol& symbol) +{ + const TQualifier& qualifier = symbol.getType().getQualifier(); + if (symbol.getType().getBasicType() == EbtAtomicUint) { + if (qualifier.hasBinding() && (int)qualifier.layoutBinding < resources.maxAtomicCounterBindings) { + + // Set the offset + int offset; + if (qualifier.hasOffset()) + offset = qualifier.layoutOffset; + else + offset = atomicUintOffsets[qualifier.layoutBinding]; + symbol.getWritableType().getQualifier().layoutOffset = offset; + + // Check for overlap + int numOffsets = 4; + if (symbol.getType().isArray()) { + if (symbol.getType().isExplicitlySizedArray()) + 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", ""); + } + } + int repeated = intermediate.addUsedOffsets(qualifier.layoutBinding, offset, numOffsets); + if (repeated >= 0) + error(loc, "atomic counters sharing the same offset:", "offset", "%d", repeated); + + // Bump the default offset + atomicUintOffsets[qualifier.layoutBinding] = offset + numOffsets; + } + } +} + +// +// Look up a function name in the symbol table, and make sure it is a function. +// +// Return the function symbol if found, otherwise nullptr. +// +const TFunction* TParseContext::findFunction(const TSourceLoc& loc, const TFunction& call, bool& builtIn) +{ + const TFunction* function = nullptr; + + if (symbolTable.isFunctionNameVariable(call.getName())) { + error(loc, "can't use function syntax on variable", call.getName().c_str(), ""); + return nullptr; + } + + if (profile == EEsProfile || version < 120) + function = findFunctionExact(loc, call, builtIn); + else if (version < 400) + function = findFunction120(loc, call, builtIn); + else + function = findFunction400(loc, call, builtIn); + + return function; +} + +// Function finding algorithm for ES and desktop 110. +const TFunction* TParseContext::findFunctionExact(const TSourceLoc& loc, const TFunction& call, bool& builtIn) +{ + TSymbol* symbol = symbolTable.find(call.getMangledName(), &builtIn); + if (symbol == nullptr) { + error(loc, "no matching overloaded function found", call.getName().c_str(), ""); + + return nullptr; + } + + return symbol->getAsFunction(); +} + +// Function finding algorithm for desktop versions 120 through 330. +const TFunction* TParseContext::findFunction120(const TSourceLoc& loc, const TFunction& call, bool& builtIn) +{ + // first, look for an exact match + TSymbol* symbol = symbolTable.find(call.getMangledName(), &builtIn); + if (symbol) + return symbol->getAsFunction(); + + // exact match not found, look through a list of overloaded functions of the same name + + // "If no exact match is found, then [implicit conversions] will be applied to find a match. Mismatched types + // on input parameters (in or inout or default) must have a conversion from the calling argument type to the + // formal parameter type. Mismatched types on output parameters (out or inout) must have a conversion + // from the formal parameter type to the calling argument type. When argument conversions are used to find + // a match, it is a semantic error if there are multiple ways to apply these conversions to make the call match + // more than one function." + + const TFunction* candidate = nullptr; + TVector candidateList; + symbolTable.findFunctionNameList(call.getMangledName(), candidateList, builtIn); + + for (auto it = candidateList.begin(); it != candidateList.end(); ++it) { + const TFunction& function = *(*it); + + // to even be a potential match, number of arguments has to match + if (call.getParamCount() != function.getParamCount()) + continue; + + bool possibleMatch = true; + for (int i = 0; i < function.getParamCount(); ++i) { + // same types is easy + if (*function[i].type == *call[i].type) + continue; + + // We have a mismatch in type, see if it is implicitly convertible + + if (function[i].type->isArray() || call[i].type->isArray() || + ! function[i].type->sameElementShape(*call[i].type)) + possibleMatch = false; + else { + // do direction-specific checks for conversion of basic type + if (function[i].type->getQualifier().isParamInput()) { + if (! intermediate.canImplicitlyPromote(call[i].type->getBasicType(), function[i].type->getBasicType())) + possibleMatch = false; + } + if (function[i].type->getQualifier().isParamOutput()) { + if (! intermediate.canImplicitlyPromote(function[i].type->getBasicType(), call[i].type->getBasicType())) + possibleMatch = false; + } + } + if (! possibleMatch) + break; + } + if (possibleMatch) { + if (candidate) { + // our second match, meaning ambiguity + error(loc, "ambiguous function signature match: multiple signatures match under implicit type conversion", call.getName().c_str(), ""); + } else + candidate = &function; + } + } + + if (candidate == nullptr) + error(loc, "no matching overloaded function found", call.getName().c_str(), ""); + + return candidate; +} + +// Function finding algorithm for desktop version 400 and above. +// +// "When function calls are resolved, an exact type match for all the arguments +// is sought. If an exact match is found, all other functions are ignored, and +// the exact match is used. If no exact match is found, then the implicit +// conversions in section 4.1.10 Implicit Conversions will be applied to find +// a match. Mismatched types on input parameters (in or inout or default) must +// have a conversion from the calling argument type to the formal parameter type. +// Mismatched types on output parameters (out or inout) must have a conversion +// from the formal parameter type to the calling argument type. +// +// "If implicit conversions can be used to find more than one matching function, +// a single best-matching function is sought. To determine a best match, the +// conversions between calling argument and formal parameter types are compared +// for each function argument and pair of matching functions. After these +// comparisons are performed, each pair of matching functions are compared. +// A function declaration A is considered a better match than function +// declaration B if +// +// * for at least one function argument, the conversion for that argument in A +// is better than the corresponding conversion in B; and +// * there is no function argument for which the conversion in B is better than +// the corresponding conversion in A. +// +// "If a single function declaration is considered a better match than every +// other matching function declaration, it will be used. Otherwise, a +// compile-time semantic error for an ambiguous overloaded function call occurs. +// +// "To determine whether the conversion for a single argument in one match is +// better than that for another match, the following rules are applied, in order: +// +// 1. An exact match is better than a match involving any implicit conversion. +// 2. A match involving an implicit conversion from float to double is better +// than a match involving any other implicit conversion. +// 3. A match involving an implicit conversion from either int or uint to float +// is better than a match involving an implicit conversion from either int +// or uint to double. +// +// "If none of the rules above apply to a particular pair of conversions, neither +// conversion is considered better than the other." +// +const TFunction* TParseContext::findFunction400(const TSourceLoc& loc, const TFunction& call, bool& builtIn) +{ + // first, look for an exact match + TSymbol* symbol = symbolTable.find(call.getMangledName(), &builtIn); + if (symbol) + return symbol->getAsFunction(); + + // no exact match, use the generic selector, parameterized by the GLSL rules + + // create list of candidates to send + TVector candidateList; + symbolTable.findFunctionNameList(call.getMangledName(), candidateList, builtIn); + + // can 'from' convert to 'to'? + const auto convertible = [this](const TType& from, const TType& to, TOperator, int) -> bool { + if (from == to) + return true; + if (from.isArray() || to.isArray() || ! from.sameElementShape(to)) + return false; + return intermediate.canImplicitlyPromote(from.getBasicType(), to.getBasicType()); + }; + + // Is 'to2' a better conversion than 'to1'? + // Ties should not be considered as better. + // Assumes 'convertible' already said true. + const auto better = [](const TType& from, const TType& to1, const TType& to2) -> bool { + // 1. exact match + if (from == to2) + return from != to1; + if (from == to1) + return false; + + // 2. float -> double is better + if (from.getBasicType() == EbtFloat) { + if (to2.getBasicType() == EbtDouble && to1.getBasicType() != EbtDouble) + return true; + } + + // 3. -> float is better than -> double + return to2.getBasicType() == EbtFloat && to1.getBasicType() == EbtDouble; + }; + + // for ambiguity reporting + bool tie = false; + + // send to the generic selector + const TFunction* bestMatch = selectFunction(candidateList, call, convertible, better, tie); + + if (bestMatch == nullptr) + error(loc, "no matching overloaded function found", call.getName().c_str(), ""); + else if (tie) + error(loc, "ambiguous best function under implicit type conversion", call.getName().c_str(), ""); + + return bestMatch; +} + +// When a declaration includes a type, but not a variable name, it can be +// to establish defaults. +void TParseContext::declareTypeDefaults(const TSourceLoc& loc, const TPublicType& publicType) +{ + if (publicType.basicType == EbtAtomicUint && publicType.qualifier.hasBinding() && publicType.qualifier.hasOffset()) { + if (publicType.qualifier.layoutBinding >= (unsigned int)resources.maxAtomicCounterBindings) { + error(loc, "atomic_uint binding is too large", "binding", ""); + return; + } + atomicUintOffsets[publicType.qualifier.layoutBinding] = publicType.qualifier.layoutOffset; + return; + } + + if (publicType.qualifier.hasLayout()) + warn(loc, "useless application of layout qualifier", "layout", ""); +} + +// +// Do everything necessary to handle a variable (non-block) declaration. +// Either redeclaring a variable, or making a new one, updating the symbol +// table, and all error checking. +// +// Returns a subtree node that computes an initializer, if needed. +// Returns nullptr if there is no code to execute for initialization. +// +// 'publicType' is the type part of the declaration (to the left) +// 'arraySizes' is the arrayness tagged on the identifier (to the right) +// +TIntermNode* TParseContext::declareVariable(const TSourceLoc& loc, TString& identifier, const TPublicType& publicType, TArraySizes* arraySizes, TIntermTyped* initializer) +{ + TType type(publicType); // shallow copy; 'type' shares the arrayness and structure definition with 'publicType' + if (type.isImplicitlySizedArray()) { + // Because "int[] a = int[2](...), b = int[3](...)" makes two arrays a and b + // of different sizes, for this case sharing the shallow copy of arrayness + // with the publicType oversubscribes it, so get a deep copy of the arrayness. + type.newArraySizes(*publicType.arraySizes); + } + + if (voidErrorCheck(loc, identifier, type.getBasicType())) + return nullptr; + + if (initializer) + rValueErrorCheck(loc, "initializer", initializer); + else + nonInitConstCheck(loc, identifier, type); + + samplerCheck(loc, type, identifier, initializer); + atomicUintCheck(loc, type, identifier); + transparentCheck(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", ""); + if (identifier != "gl_FragDepth" && publicType.shaderQualifiers.layoutDepth != EldNone) + error(loc, "can only apply depth layout to gl_FragDepth", "layout qualifier", ""); + + // Check for redeclaration of built-ins and/or attempting to declare a reserved name + TSymbol* symbol = redeclareBuiltinVariable(loc, identifier, type.getQualifier(), publicType.shaderQualifiers); + if (symbol == nullptr) + reservedErrorCheck(loc, identifier); + + inheritGlobalDefaults(type.getQualifier()); + + // Declare the variable + if (arraySizes || type.isArray()) { + // Arrayness is potentially coming both from the type and from the + // variable: "int[] a[];" or just one or the other. + // Merge it all to the type, so all arrayness is part of the type. + arrayDimCheck(loc, &type, arraySizes); + arrayDimMerge(type, arraySizes); + + // Check that implicit sizing is only where allowed. + arrayUnsizedCheck(loc, type.getQualifier(), &type.getArraySizes(), initializer != nullptr, false); + + if (! arrayQualifierError(loc, type.getQualifier()) && ! arrayError(loc, type)) + declareArray(loc, identifier, type, symbol); + + if (initializer) { + profileRequires(loc, ENoProfile, 120, E_GL_3DL_array_objects, "initializer"); + profileRequires(loc, EEsProfile, 300, nullptr, "initializer"); + } + } else { + // non-array case + if (symbol == nullptr) + symbol = declareNonArray(loc, identifier, type); + else if (type != symbol->getType()) + error(loc, "cannot change the type of", "redeclaration", symbol->getName().c_str()); + } + + if (symbol == nullptr) + return nullptr; + + // Deal with initializer + TIntermNode* initNode = nullptr; + if (symbol != nullptr && initializer) { + 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); + } + + // look for errors in layout qualifier use + layoutObjectCheck(loc, *symbol); + fixOffset(loc, *symbol); + + return initNode; +} + +// Pick up global defaults from the provide global defaults into dst. +void TParseContext::inheritGlobalDefaults(TQualifier& dst) const +{ + if (dst.storage == EvqVaryingOut) { + if (! dst.hasStream() && language == EShLangGeometry) + dst.layoutStream = globalOutputDefaults.layoutStream; + if (! dst.hasXfbBuffer()) + dst.layoutXfbBuffer = globalOutputDefaults.layoutXfbBuffer; + } +} + +// +// Make an internal-only variable whose name is for debug purposes only +// and won't be searched for. Callers will only use the return value to use +// the variable, not the name to look it up. It is okay if the name +// is the same as other names; there won't be any conflict. +// +TVariable* TParseContext::makeInternalVariable(const char* name, const TType& type) const +{ + TString* nameString = NewPoolTString(name); + TVariable* variable = new TVariable(nameString, type); + symbolTable.makeInternalVariable(*variable); + + return variable; +} + +// +// Declare a non-array variable, the main point being there is no redeclaration +// for resizing allowed. +// +// Return the successfully declared variable. +// +TVariable* TParseContext::declareNonArray(const TSourceLoc& loc, TString& identifier, TType& type) +{ + // make a new variable + TVariable* variable = new TVariable(&identifier, type); + + ioArrayCheck(loc, type, identifier); + + // add variable to symbol table + if (symbolTable.insert(*variable)) { + if (symbolTable.atGlobalLevel()) + trackLinkage(*variable); + return variable; + } + + error(loc, "redefinition", variable->getName().c_str(), ""); + return nullptr; +} + +// +// Handle all types of initializers from the grammar. +// +// Returning nullptr just means there is no code to execute to handle the +// initializer, which will, for example, be the case for constant initializers. +// +TIntermNode* TParseContext::executeInitializer(const TSourceLoc& loc, TIntermTyped* initializer, TVariable* variable) +{ + // + // Identifier must be of type constant, a global, or a temporary, and + // starting at version 120, desktop allows uniforms to have initializers. + // + TStorageQualifier qualifier = variable->getType().getQualifier().storage; + if (! (qualifier == EvqTemporary || qualifier == EvqGlobal || qualifier == EvqConst || + (qualifier == EvqUniform && profile != EEsProfile && version >= 120))) { + error(loc, " cannot initialize this type of qualifier ", variable->getType().getStorageQualifierString(), ""); + return nullptr; + } + arrayObjectCheck(loc, variable->getType(), "array initializer"); + + // + // If the initializer was from braces { ... }, we convert the whole subtree to a + // constructor-style subtree, allowing the rest of the code to operate + // identically for both kinds of initializers. + // + // Type can't be deduced from the initializer list, so a skeletal type to + // follow has to be passed in. Constness and specialization-constness + // should be deduced bottom up, not dictated by the skeletal type. + // + TType skeletalType; + skeletalType.shallowCopy(variable->getType()); + skeletalType.getQualifier().makeTemporary(); + initializer = convertInitializerList(loc, skeletalType, initializer); + if (! initializer) { + // error recovery; don't leave const without constant values + if (qualifier == EvqConst) + variable->getWritableType().getQualifier().makeTemporary(); + return nullptr; + } + + // Fix outer arrayness if variable is unsized, getting size from the initializer + if (initializer->getType().isExplicitlySizedArray() && + variable->getType().isImplicitlySizedArray()) + variable->getWritableType().changeOuterArraySize(initializer->getType().getOuterArraySize()); + + // Inner arrayness can also get set by an initializer + if (initializer->getType().isArrayOfArrays() && variable->getType().isArrayOfArrays() && + initializer->getType().getArraySizes()->getNumDims() == + variable->getType().getArraySizes()->getNumDims()) { + // adopt unsized sizes from the initializer's sizes + for (int d = 1; d < variable->getType().getArraySizes()->getNumDims(); ++d) { + if (variable->getType().getArraySizes()->getDimSize(d) == UnsizedArraySize) + variable->getWritableType().getArraySizes().setDimSize(d, initializer->getType().getArraySizes()->getDimSize(d)); + } + } + + // Uniforms require a compile-time constant initializer + if (qualifier == EvqUniform && ! initializer->getType().getQualifier().isFrontEndConstant()) { + error(loc, "uniform initializers must be constant", "=", "'%s'", variable->getType().getCompleteString().c_str()); + variable->getWritableType().getQualifier().makeTemporary(); + return nullptr; + } + // Global consts require a constant initializer (specialization constant is okay) + if (qualifier == EvqConst && symbolTable.atGlobalLevel() && ! initializer->getType().getQualifier().isConstant()) { + error(loc, "global const initializers must be constant", "=", "'%s'", variable->getType().getCompleteString().c_str()); + variable->getWritableType().getQualifier().makeTemporary(); + return nullptr; + } + + // Const variables require a constant initializer, depending on version + if (qualifier == EvqConst) { + if (! initializer->getType().getQualifier().isConstant()) { + const char* initFeature = "non-constant initializer"; + requireProfile(loc, ~EEsProfile, initFeature); + profileRequires(loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature); + variable->getWritableType().getQualifier().storage = EvqConstReadOnly; + qualifier = EvqConstReadOnly; + } + } else { + // Non-const global variables in ES need a const initializer. + // + // "In declarations of global variables with no storage qualifier or with a const + // qualifier any initializer must be a constant expression." + if (symbolTable.atGlobalLevel() && ! initializer->getType().getQualifier().isConstant()) { + const char* initFeature = "non-constant global initializer (needs GL_EXT_shader_non_constant_global_initializers)"; + if (profile == EEsProfile) { + if (relaxedErrors() && ! extensionTurnedOn(E_GL_EXT_shader_non_constant_global_initializers)) + warn(loc, "not allowed in this version", initFeature, ""); + else + profileRequires(loc, EEsProfile, 0, E_GL_EXT_shader_non_constant_global_initializers, initFeature); + } + } + } + + if (qualifier == EvqConst || qualifier == EvqUniform) { + // Compile-time tagging of the variable with its constant value... + + initializer = intermediate.addConversion(EOpAssign, variable->getType(), initializer); + if (! initializer || ! initializer->getType().getQualifier().isConstant() || variable->getType() != initializer->getType()) { + error(loc, "non-matching or non-convertible constant type for const initializer", + variable->getType().getStorageQualifierString(), ""); + variable->getWritableType().getQualifier().makeTemporary(); + return nullptr; + } + + // We either have a folded constant in getAsConstantUnion, or we have to use + // the initializer's subtree in the AST to represent the computation of a + // specialization constant. + assert(initializer->getAsConstantUnion() || initializer->getType().getQualifier().isSpecConstant()); + if (initializer->getAsConstantUnion()) + variable->setConstArray(initializer->getAsConstantUnion()->getConstArray()); + else { + // It's a specialization constant. + variable->getWritableType().getQualifier().makeSpecConstant(); + + // Keep the subtree that computes the specialization constant with the variable. + // Later, a symbol node will adopt the subtree from the variable. + variable->setConstSubtree(initializer); + } + } else { + // normal assigning of a value to a variable... + specializationCheck(loc, initializer->getType(), "initializer"); + TIntermSymbol* intermSymbol = intermediate.addSymbol(*variable, loc); + TIntermTyped* initNode = intermediate.addAssign(EOpAssign, intermSymbol, initializer, loc); + if (! initNode) + assignError(loc, "=", intermSymbol->getCompleteString(), initializer->getCompleteString()); + + return initNode; + } + + return nullptr; +} + +// +// Reprocess any initializer-list (the "{ ... }" syntax) parts of the +// initializer. +// +// Need to hierarchically assign correct types and implicit +// conversions. Will do this mimicking the same process used for +// creating a constructor-style initializer, ensuring we get the +// same form. However, it has to in parallel walk the 'type' +// passed in, as type cannot be deduced from an initializer list. +// +TIntermTyped* TParseContext::convertInitializerList(const TSourceLoc& loc, const TType& type, TIntermTyped* initializer) +{ + // 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 + // can be an initializer list, where "top part" can extend for several (or all) levels. + + // see if we have bottomed out in the tree within the initializer-list part + TIntermAggregate* initList = initializer->getAsAggregate(); + if (! initList || initList->getOp() != EOpNull) + return initializer; + + // Of the initializer-list set of nodes, need to process bottom up, + // so recurse deep, then process on the way up. + + // Go down the tree here... + if (type.isArray()) { + // The type's array might be unsized, which could be okay, so base sizes on the size of the aggregate. + // Later on, initializer execution code will deal with array size logic. + TType arrayType; + arrayType.shallowCopy(type); // sharing struct stuff is fine + arrayType.newArraySizes(*type.getArraySizes()); // but get a fresh copy of the array information, to edit below + + // edit array sizes to fill in unsized dimensions + arrayType.changeOuterArraySize((int)initList->getSequence().size()); + TIntermTyped* firstInit = initList->getSequence()[0]->getAsTyped(); + if (arrayType.isArrayOfArrays() && firstInit->getType().isArray() && + arrayType.getArraySizes().getNumDims() == firstInit->getType().getArraySizes()->getNumDims() + 1) { + for (int d = 1; d < arrayType.getArraySizes().getNumDims(); ++d) { + if (arrayType.getArraySizes().getDimSize(d) == UnsizedArraySize) + arrayType.getArraySizes().setDimSize(d, firstInit->getType().getArraySizes()->getDimSize(d - 1)); + } + } + + TType elementType(arrayType, 0); // dereferenced type + for (size_t i = 0; i < initList->getSequence().size(); ++i) { + initList->getSequence()[i] = convertInitializerList(loc, elementType, initList->getSequence()[i]->getAsTyped()); + if (initList->getSequence()[i] == nullptr) + return nullptr; + } + + return addConstructor(loc, initList, arrayType); + } else if (type.isStruct()) { + 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()); + if (initList->getSequence()[i] == nullptr) + return nullptr; + } + } else if (type.isMatrix()) { + if (type.getMatrixCols() != (int)initList->getSequence().size()) { + error(loc, "wrong number of matrix columns:", "initializer list", type.getCompleteString().c_str()); + return nullptr; + } + TType vectorType(type, 0); // dereferenced type + for (int i = 0; i < type.getMatrixCols(); ++i) { + initList->getSequence()[i] = convertInitializerList(loc, vectorType, initList->getSequence()[i]->getAsTyped()); + if (initList->getSequence()[i] == nullptr) + return nullptr; + } + } else if (type.isVector()) { + if (type.getVectorSize() != (int)initList->getSequence().size()) { + error(loc, "wrong vector size (or rows in a matrix column):", "initializer list", type.getCompleteString().c_str()); + return nullptr; + } + } else { + error(loc, "unexpected initializer-list type:", "initializer list", type.getCompleteString().c_str()); + return nullptr; + } + + // Now that the subtree is processed, process this node as if the + // initializer list is a set of arguments to a constructor. + TIntermNode* emulatedConstructorArguments; + if (initList->getSequence().size() == 1) + emulatedConstructorArguments = initList->getSequence()[0]; + else + emulatedConstructorArguments = initList; + return addConstructor(loc, emulatedConstructorArguments, type); +} + +// +// 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. +// +// 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) +{ + if (node == nullptr || node->getAsTyped() == nullptr) + return nullptr; + rValueErrorCheck(loc, "constructor", node->getAsTyped()); + + TIntermAggregate* aggrNode = node->getAsAggregate(); + TOperator op = intermediate.mapTypeToConstructorOp(type); + + // Combined texture-sampler constructors are completely semantic checked + // in constructorTextureSamplerError() + if (op == EOpConstructTextureSampler) + return intermediate.setAggregateOperator(aggrNode, op, type, loc); + + TTypeList::const_iterator memberTypes; + if (op == EOpConstructStruct) + memberTypes = type.getStruct()->begin(); + + TType elementType; + if (type.isArray()) { + TType dereferenced(type, 0); + elementType.shallowCopy(dereferenced); + } else + elementType.shallowCopy(type); + + bool singleArg; + if (aggrNode) { + if (aggrNode->getOp() != EOpNull || aggrNode->getSequence().size() == 1) + singleArg = true; + else + singleArg = false; + } else + singleArg = true; + + TIntermTyped *newNode; + if (singleArg) { + // 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()) + 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); + + if (newNode && (type.isArray() || op == EOpConstructStruct)) + newNode = intermediate.setAggregateOperator(newNode, EOpConstructStruct, type, loc); + + return newNode; + } + + // + // Handle list of arguments. + // + 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 + + int paramCount = 0; // keeps track of the constructor parameter number being checked + + // for each parameter to the constructor call, check to see if the right type is passed or convert them + // to the right type if possible (and allowed). + // for structure constructors, just check if the right type is passed, no conversion is allowed. + for (TIntermSequence::iterator p = sequenceVector.begin(); + p != sequenceVector.end(); p++, paramCount++) { + if (type.isArray()) + newNode = constructAggregate(*p, elementType, paramCount+1, node->getLoc()); + else if (op == EOpConstructStruct) + newNode = constructAggregate(*p, *(memberTypes[paramCount]).type, paramCount+1, node->getLoc()); + else + newNode = constructBuiltIn(type, op, (*p)->getAsTyped(), node->getLoc(), true); + + if (newNode) + *p = newNode; + else + return nullptr; + } + + return intermediate.setAggregateOperator(aggrNode, op, type, loc); +} + +// Function for constructor implementation. Calls addUnaryMath with appropriate EOp value +// for the parameter to the constructor (passed to this function). Essentially, it converts +// the parameter types correctly. If a constructor expects an int (like ivec2) and is passed a +// float, then float is converted to int. +// +// Returns nullptr for an error or the constructed node. +// +TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, TIntermTyped* node, const TSourceLoc& loc, bool subset) +{ + TIntermTyped* newNode; + TOperator basicOp; + + // + // First, convert types as needed. + // + switch (op) { + case EOpConstructVec2: + case EOpConstructVec3: + case EOpConstructVec4: + case EOpConstructMat2x2: + case EOpConstructMat2x3: + case EOpConstructMat2x4: + case EOpConstructMat3x2: + case EOpConstructMat3x3: + case EOpConstructMat3x4: + case EOpConstructMat4x2: + case EOpConstructMat4x3: + case EOpConstructMat4x4: + case EOpConstructFloat: + basicOp = EOpConstructFloat; + break; + + case EOpConstructDVec2: + case EOpConstructDVec3: + case EOpConstructDVec4: + case EOpConstructDMat2x2: + case EOpConstructDMat2x3: + case EOpConstructDMat2x4: + case EOpConstructDMat3x2: + case EOpConstructDMat3x3: + case EOpConstructDMat3x4: + case EOpConstructDMat4x2: + case EOpConstructDMat4x3: + case EOpConstructDMat4x4: + case EOpConstructDouble: + basicOp = EOpConstructDouble; + break; + +#ifdef AMD_EXTENSIONS + case EOpConstructF16Vec2: + case EOpConstructF16Vec3: + case EOpConstructF16Vec4: + case EOpConstructF16Mat2x2: + case EOpConstructF16Mat2x3: + case EOpConstructF16Mat2x4: + case EOpConstructF16Mat3x2: + case EOpConstructF16Mat3x3: + case EOpConstructF16Mat3x4: + case EOpConstructF16Mat4x2: + case EOpConstructF16Mat4x3: + case EOpConstructF16Mat4x4: + case EOpConstructFloat16: + basicOp = EOpConstructFloat16; + break; +#endif + + case EOpConstructIVec2: + case EOpConstructIVec3: + case EOpConstructIVec4: + case EOpConstructInt: + basicOp = EOpConstructInt; + break; + + case EOpConstructUVec2: + case EOpConstructUVec3: + case EOpConstructUVec4: + case EOpConstructUint: + basicOp = EOpConstructUint; + break; + + case EOpConstructI64Vec2: + case EOpConstructI64Vec3: + case EOpConstructI64Vec4: + case EOpConstructInt64: + basicOp = EOpConstructInt64; + break; + + case EOpConstructU64Vec2: + case EOpConstructU64Vec3: + case EOpConstructU64Vec4: + case EOpConstructUint64: + basicOp = EOpConstructUint64; + break; + + case EOpConstructBVec2: + case EOpConstructBVec3: + case EOpConstructBVec4: + case EOpConstructBool: + basicOp = EOpConstructBool; + break; + + default: + error(loc, "unsupported construction", "", ""); + + return nullptr; + } + newNode = intermediate.addUnaryMath(basicOp, node, node->getLoc()); + if (newNode == nullptr) { + error(loc, "can't convert", "constructor", ""); + return nullptr; + } + + // + // Now, if there still isn't an operation to do the construction, and we need one, add one. + // + + // Otherwise, skip out early. + if (subset || (newNode != node && newNode->getType() == type)) + return newNode; + + // setAggregateOperator will insert a new node for the constructor, as needed. + return intermediate.setAggregateOperator(newNode, op, type, loc); +} + +// 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* TParseContext::constructAggregate(TIntermNode* node, const TType& type, int paramCount, const TSourceLoc& loc) +{ + TIntermTyped* converted = intermediate.addConversion(EOpConstructStruct, type, node->getAsTyped()); + if (! converted || 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()); + + return nullptr; + } + + return converted; +} + +// +// Do everything needed to add an interface block. +// +void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, const TString* instanceName, TArraySizes* arraySizes) +{ + blockStageIoCheck(loc, currentBlockQualifier); + blockQualifierCheck(loc, currentBlockQualifier, instanceName != nullptr); + if (arraySizes) { + arrayUnsizedCheck(loc, currentBlockQualifier, arraySizes, false, false); + arrayDimCheck(loc, arraySizes, 0); + if (arraySizes->getNumDims() > 1) + requireProfile(loc, ~EEsProfile, "array-of-array of block"); + } + + // fix and check for member storage qualifiers and types that don't belong within a block + for (unsigned int member = 0; member < typeList.size(); ++member) { + TType& memberType = *typeList[member].type; + TQualifier& memberQualifier = memberType.getQualifier(); + const TSourceLoc& memberLoc = typeList[member].loc; + globalQualifierFixCheck(memberLoc, memberQualifier); + if (memberQualifier.storage != EvqTemporary && memberQualifier.storage != EvqGlobal && memberQualifier.storage != currentBlockQualifier.storage) + error(memberLoc, "member storage qualifier cannot contradict block storage qualifier", memberType.getFieldName().c_str(), ""); + memberQualifier.storage = currentBlockQualifier.storage; + 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); + if (memberQualifier.hasOffset()) { + if (spvVersion.spv == 0) { + requireProfile(memberLoc, ~EEsProfile, "offset on block member"); + profileRequires(memberLoc, ~EEsProfile, 440, E_GL_ARB_enhanced_layouts, "offset on block member"); + } + } + + if (memberType.containsOpaque()) + error(memberLoc, "member of block cannot be or contain a sampler, image, or atomic_uint type", typeList[member].type->getFieldName().c_str(), ""); + } + + // 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; + } + + // Not a redeclaration of a built-in; check that all names are user names. + reservedErrorCheck(loc, *blockName); + if (instanceName) + reservedErrorCheck(loc, *instanceName); + for (unsigned int member = 0; member < typeList.size(); ++member) + reservedErrorCheck(typeList[member].loc, typeList[member].type->getFieldName()); + + // Make default block qualification, and adjust the member qualifications + + TQualifier defaultQualification; + switch (currentBlockQualifier.storage) { + case EvqUniform: defaultQualification = globalUniformDefaults; break; + case EvqBuffer: defaultQualification = globalBufferDefaults; break; + case EvqVaryingIn: defaultQualification = globalInputDefaults; break; + case EvqVaryingOut: defaultQualification = globalOutputDefaults; break; + default: defaultQualification.clear(); break; + } + + // Special case for "push_constant uniform", which has a default of std430, + // contrary to normal uniform defaults, and can't have a default tracked for it. + if (currentBlockQualifier.layoutPushConstant && !currentBlockQualifier.hasPacking()) + currentBlockQualifier.layoutPacking = ElpStd430; + + // fix and check for member layout qualifiers + + mergeObjectLayoutQualifiers(defaultQualification, currentBlockQualifier, true); + + // "The align qualifier can only be used on blocks or block members, and only for blocks declared with std140 or std430 layouts." + if (currentBlockQualifier.hasAlign()) { + if (defaultQualification.layoutPacking != ElpStd140 && defaultQualification.layoutPacking != ElpStd430) { + error(loc, "can only be used with std140 or std430 layout packing", "align", ""); + defaultQualification.layoutAlign = -1; + } + } + + bool memberWithLocation = false; + bool memberWithoutLocation = false; + for (unsigned int member = 0; member < typeList.size(); ++member) { + TQualifier& memberQualifier = typeList[member].type->getQualifier(); + const TSourceLoc& memberLoc = typeList[member].loc; + if (memberQualifier.hasStream()) { + if (defaultQualification.layoutStream != memberQualifier.layoutStream) + error(memberLoc, "member cannot contradict block", "stream", ""); + } + + // "This includes a block's inheritance of the + // current global default buffer, a block member's inheritance of the block's + // buffer, and the requirement that any *xfb_buffer* declared on a block + // member must match the buffer inherited from the block." + if (memberQualifier.hasXfbBuffer()) { + if (defaultQualification.layoutXfbBuffer != memberQualifier.layoutXfbBuffer) + error(memberLoc, "member cannot contradict block (or what block inherited from global)", "xfb_buffer", ""); + } + + if (memberQualifier.hasPacking()) + error(memberLoc, "member of block cannot have a packing layout qualifier", typeList[member].type->getFieldName().c_str(), ""); + if (memberQualifier.hasLocation()) { + const char* feature = "location on block member"; + switch (currentBlockQualifier.storage) { + case EvqVaryingIn: + 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); + memberWithLocation = true; + break; + default: + error(memberLoc, "can only use in an in/out block", feature, ""); + break; + } + } else + memberWithoutLocation = true; + + // "The offset qualifier can only be used on block members of blocks declared with std140 or std430 layouts." + // "The align qualifier can only be used on blocks or block members, and only for blocks declared with std140 or std430 layouts." + if (memberQualifier.hasAlign() || memberQualifier.hasOffset()) { + if (defaultQualification.layoutPacking != ElpStd140 && defaultQualification.layoutPacking != ElpStd430) + error(memberLoc, "can only be used with std140 or std430 layout packing", "offset/align", ""); + } + + TQualifier newMemberQualification = defaultQualification; + mergeQualifiers(memberLoc, newMemberQualification, memberQualifier, false); + memberQualifier = newMemberQualification; + } + + // Process the members + fixBlockLocations(loc, currentBlockQualifier, typeList, memberWithLocation, memberWithoutLocation); + fixBlockXfbOffsets(currentBlockQualifier, typeList); + fixBlockUniformOffsets(currentBlockQualifier, typeList); + for (unsigned int member = 0; member < typeList.size(); ++member) + layoutTypeCheck(typeList[member].loc, *typeList[member].type); + + // reverse merge, so that currentBlockQualifier now has all layout information + // (can't use defaultQualification directly, it's missing other non-layout-default-class qualifiers) + mergeObjectLayoutQualifiers(currentBlockQualifier, defaultQualification, true); + + // + // Build and add the interface block as a new type named 'blockName' + // + + TType blockType(&typeList, *blockName, currentBlockQualifier); + if (arraySizes) + blockType.newArraySizes(*arraySizes); + else + ioArrayCheck(loc, blockType, instanceName ? *instanceName : *blockName); + + // + // Don't make a user-defined type out of block name; that will cause an error + // if the same block name gets reused in a different interface. + // + // "Block names have no other use within a shader + // beyond interface matching; it is a compile-time error to use a block name at global scope for anything + // other than as a block name (e.g., use of a block name for a global variable name or function name is + // currently reserved)." + // + // Use the symbol table to prevent normal reuse of the block's name, as a variable entry, + // whose type is EbtBlock, but without all the structure; that will come from the type + // the instances point to. + // + TType blockNameType(EbtBlock, blockType.getQualifier().storage); + TVariable* blockNameVar = new TVariable(blockName, blockNameType); + if (! symbolTable.insert(*blockNameVar)) { + TSymbol* existingName = symbolTable.find(*blockName); + if (existingName->getType().getBasicType() == EbtBlock) { + if (existingName->getType().getQualifier().storage == blockType.getQualifier().storage) { + error(loc, "Cannot reuse block name within the same interface:", blockName->c_str(), blockType.getStorageQualifierString()); + return; + } + } else { + error(loc, "block name cannot redefine a non-block name", blockName->c_str(), ""); + return; + } + } + + // Add the variable, as anonymous or named instanceName. + // Make an anonymous variable if no name was provided. + if (! instanceName) + 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(), ""); + else + error(loc, "block instance name redefinition", variable.getName().c_str(), ""); + + return; + } + + // Check for general layout qualifier errors + layoutObjectCheck(loc, variable); + + if (isIoResizeArray(blockType)) { + ioArraySymbolResizeList.push_back(&variable); + checkIoArraysConsistency(loc, true); + } else + fixIoArraySize(loc, variable.getWritableType()); + + // Save it in the AST for linker use. + trackLinkage(variable); +} + +// Do all block-declaration checking regarding the combination of in/out/uniform/buffer +// with a particular stage. +void TParseContext::blockStageIoCheck(const TSourceLoc& loc, const TQualifier& qualifier) +{ + switch (qualifier.storage) { + case EvqUniform: + profileRequires(loc, EEsProfile, 300, nullptr, "uniform block"); + profileRequires(loc, ENoProfile, 140, nullptr, "uniform block"); + if (currentBlockQualifier.layoutPacking == ElpStd430 && ! currentBlockQualifier.layoutPushConstant) + error(loc, "requires the 'buffer' storage qualifier", "std430", ""); + break; + case EvqBuffer: + requireProfile(loc, EEsProfile | ECoreProfile | ECompatibilityProfile, "buffer block"); + profileRequires(loc, ECoreProfile | ECompatibilityProfile, 430, nullptr, "buffer block"); + profileRequires(loc, EEsProfile, 310, nullptr, "buffer block"); + break; + case EvqVaryingIn: + profileRequires(loc, ~EEsProfile, 150, E_GL_ARB_separate_shader_objects, "input block"); + // It is a compile-time error to have an input block in a vertex shader or an output block in a fragment shader + // "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"); + 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"); + break; + default: + error(loc, "only uniform, buffer, in, or out blocks are supported", blockName->c_str(), ""); + break; + } +} + +// Do all block-declaration checking regarding its qualifiers. +void TParseContext::blockQualifierCheck(const TSourceLoc& loc, const TQualifier& qualifier, bool instanceName) +{ + // The 4.5 specification says: + // + // interface-block : + // layout-qualifieropt interface-qualifier block-name { member-list } instance-nameopt ; + // + // interface-qualifier : + // in + // out + // patch in + // patch out + // uniform + // buffer + // + // Note however memory qualifiers aren't included, yet the specification also says + // + // "...memory qualifiers may also be used in the declaration of shader storage blocks..." + + if (qualifier.isInterpolation()) + error(loc, "cannot use interpolation qualifiers on an interface block", "flat/smooth/noperspective", ""); + if (qualifier.centroid) + error(loc, "cannot use centroid qualifier on an interface block", "centroid", ""); + if (qualifier.sample) + error(loc, "cannot use sample qualifier on an interface block", "sample", ""); + if (qualifier.invariant) + error(loc, "cannot use invariant qualifier on an interface block", "invariant", ""); + if (qualifier.layoutPushConstant) + intermediate.addPushConstantCount(); +} + +// +// "For a block, this process applies to the entire block, or until the first member +// is reached that has a location layout qualifier. When a block member is declared with a location +// qualifier, its location comes from that qualifier: The member's location qualifier overrides the block-level +// declaration. Subsequent members are again assigned consecutive locations, based on the newest location, +// until the next member declared with a location qualifier. The values used for locations do not have to be +// declared in increasing order." +void TParseContext::fixBlockLocations(const TSourceLoc& loc, TQualifier& qualifier, TTypeList& typeList, bool memberWithLocation, bool memberWithoutLocation) +{ + // "If a block has no block-level location layout qualifier, it is required that either all or none of its members + // have a location layout qualifier, or a compile-time error results." + if (! qualifier.hasLocation() && memberWithLocation && memberWithoutLocation) + error(loc, "either the block needs a location, or all members need a location, or no members have a location", "location", ""); + else { + if (memberWithLocation) { + // remove any block-level location and make it per *every* member + int nextLocation = 0; // by the rule above, initial value is not relevant + if (qualifier.hasAnyLocation()) { + nextLocation = qualifier.layoutLocation; + qualifier.layoutLocation = TQualifier::layoutLocationEnd; + if (qualifier.hasComponent()) { + // "It is a compile-time error to apply the *component* qualifier to a ... block" + error(loc, "cannot apply to a block", "component", ""); + } + if (qualifier.hasIndex()) { + error(loc, "cannot apply to a block", "index", ""); + } + } + for (unsigned int member = 0; member < typeList.size(); ++member) { + TQualifier& memberQualifier = typeList[member].type->getQualifier(); + const TSourceLoc& memberLoc = typeList[member].loc; + if (! memberQualifier.hasLocation()) { + if (nextLocation >= (int)TQualifier::layoutLocationEnd) + error(memberLoc, "location is too large", "location", ""); + memberQualifier.layoutLocation = nextLocation; + memberQualifier.layoutComponent = 0; + } + nextLocation = memberQualifier.layoutLocation + intermediate.computeTypeLocationSize(*typeList[member].type); + } + } + } +} + +void TParseContext::fixBlockXfbOffsets(TQualifier& qualifier, TTypeList& typeList) +{ + // "If a block is qualified with xfb_offset, all its + // members are assigned transform feedback buffer offsets. If a block is not qualified with xfb_offset, any + // members of that block not qualified with an xfb_offset will not be assigned transform feedback buffer + // offsets." + + if (! qualifier.hasXfbBuffer() || ! qualifier.hasXfbOffset()) + return; + + int nextOffset = qualifier.layoutXfbOffset; + for (unsigned int member = 0; member < typeList.size(); ++member) { + TQualifier& memberQualifier = typeList[member].type->getQualifier(); + bool containsDouble = false; + int memberSize = intermediate.computeTypeXfbSize(*typeList[member].type, containsDouble); + // see if we need to auto-assign an offset to this member + if (! memberQualifier.hasXfbOffset()) { + // "if applied to an aggregate containing a double, the offset must also be a multiple of 8" + if (containsDouble) + RoundToPow2(nextOffset, 8); + memberQualifier.layoutXfbOffset = nextOffset; + } else + nextOffset = memberQualifier.layoutXfbOffset; + nextOffset += memberSize; + } + + // The above gave all block members an offset, so we can take it off the block now, + // which will avoid double counting the offset usage. + qualifier.layoutXfbOffset = TQualifier::layoutXfbOffsetEnd; +} + +// Calculate and save the offset of each block member, using the recursively +// defined block offset rules and the user-provided offset and align. +// +// Also, compute and save the total size of the block. For the block's size, arrayness +// is not taken into account, as each element is backed by a separate buffer. +// +void TParseContext::fixBlockUniformOffsets(TQualifier& qualifier, TTypeList& typeList) +{ + if (! qualifier.isUniformOrBuffer()) + return; + if (qualifier.layoutPacking != ElpStd140 && qualifier.layoutPacking != ElpStd430) + return; + + int offset = 0; + int memberSize; + for (unsigned int member = 0; member < typeList.size(); ++member) { + TQualifier& memberQualifier = typeList[member].type->getQualifier(); + const TSourceLoc& memberLoc = typeList[member].loc; + + // "When align is applied to an array, it effects only the start of the array, not the array's internal stride." + + // modify just the children's view of matrix layout, if there is one for this member + TLayoutMatrix subMatrixLayout = typeList[member].type->getQualifier().layoutMatrix; + int dummyStride; + int memberAlignment = intermediate.getBaseAlignment(*typeList[member].type, memberSize, dummyStride, qualifier.layoutPacking == ElpStd140, + 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." + if (! IsMultipleOfPow2(memberQualifier.layoutOffset, memberAlignment)) + error(memberLoc, "must be a multiple of the member's alignment", "offset", ""); + + // GLSL: "It is a compile-time error to specify an offset that is smaller than the offset of the previous + // member in the block or that lies within the previous member of the block" + if (spvVersion.spv == 0) { + if (memberQualifier.layoutOffset < offset) + error(memberLoc, "cannot lie in previous members", "offset", ""); + + // "The offset qualifier forces the qualified member to start at or after the specified + // integral-constant expression, which will be its byte offset from the beginning of the buffer. + // "The actual offset of a member is computed as + // follows: If offset was declared, start with that offset, otherwise start with the next available offset." + offset = std::max(offset, memberQualifier.layoutOffset); + } else { + // TODO: Vulkan: "It is a compile-time error to have any offset, explicit or assigned, + // that lies within another member of the block." + + offset = memberQualifier.layoutOffset; + } + } + + // "The actual alignment of a member will be the greater of the specified align alignment and the standard + // (e.g., std140) base alignment for the member's type." + if (memberQualifier.hasAlign()) + memberAlignment = std::max(memberAlignment, memberQualifier.layoutAlign); + + // "If the resulting offset is not a multiple of the actual alignment, + // increase it to the first offset that is a multiple of + // the actual alignment." + RoundToPow2(offset, memberAlignment); + typeList[member].type->getQualifier().layoutOffset = offset; + offset += memberSize; + } +} + +// For an identifier that is already declared, add more qualification to it. +void TParseContext::addQualifierToExisting(const TSourceLoc& loc, TQualifier qualifier, const TString& identifier) +{ + TSymbol* symbol = symbolTable.find(identifier); + if (! symbol) { + error(loc, "identifier not previously declared", identifier.c_str(), ""); + return; + } + if (symbol->getAsFunction()) { + error(loc, "cannot re-qualify a function name", identifier.c_str(), ""); + return; + } + + if (qualifier.isAuxiliary() || + qualifier.isMemory() || + qualifier.isInterpolation() || + qualifier.hasLayout() || + qualifier.storage != EvqTemporary || + qualifier.precision != EpqNone) { + error(loc, "cannot add storage, auxiliary, memory, interpolation, layout, or precision qualifier to an existing variable", identifier.c_str(), ""); + return; + } + + // For read-only built-ins, add a new symbol for holding the modified qualifier. + // This will bring up an entire block, if a block type has to be modified (e.g., gl_Position inside a block) + if (symbol->isReadOnly()) + symbol = symbolTable.copyUp(symbol); + + if (qualifier.invariant) { + if (intermediate.inIoAccessed(identifier)) + error(loc, "cannot change qualification after use", "invariant", ""); + symbol->getWritableType().getQualifier().invariant = true; + invariantCheck(loc, symbol->getType().getQualifier()); + } else if (qualifier.noContraction) { + if (intermediate.inIoAccessed(identifier)) + error(loc, "cannot change qualification after use", "precise", ""); + symbol->getWritableType().getQualifier().noContraction = true; + } else if (qualifier.specConstant) { + symbol->getWritableType().getQualifier().makeSpecConstant(); + if (qualifier.hasSpecConstantId()) + symbol->getWritableType().getQualifier().layoutSpecConstantId = qualifier.layoutSpecConstantId; + } else + warn(loc, "unknown requalification", "", ""); +} + +void TParseContext::addQualifierToExisting(const TSourceLoc& loc, TQualifier qualifier, TIdentifierList& identifiers) +{ + for (unsigned int i = 0; i < identifiers.size(); ++i) + addQualifierToExisting(loc, qualifier, *identifiers[i]); +} + +// Make sure 'invariant' isn't being applied to a non-allowed object. +void TParseContext::invariantCheck(const TSourceLoc& loc, const TQualifier& qualifier) +{ + if (! qualifier.invariant) + return; + + bool pipeOut = qualifier.isPipeOutput(); + bool pipeIn = qualifier.isPipeInput(); + if (version >= 300 || (profile != EEsProfile && version >= 420)) { + if (! pipeOut) + error(loc, "can only apply to an output", "invariant", ""); + } else { + if ((language == EShLangVertex && pipeIn) || (! pipeOut && ! pipeIn)) + error(loc, "can only apply to an output, or to an input in a non-vertex stage\n", "invariant", ""); + } +} + +// +// Updating default qualifier for the case of a declaration with just a qualifier, +// no type, block, or identifier. +// +void TParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, const TPublicType& publicType) +{ + if (publicType.shaderQualifiers.vertices != TQualifier::layoutNotSet) { + assert(language == EShLangTessControl || language == EShLangGeometry); + const char* id = (language == EShLangTessControl) ? "vertices" : "max_vertices"; + + if (publicType.qualifier.storage != EvqVaryingOut) + error(loc, "can only apply to 'out'", id, ""); + if (! intermediate.setVertices(publicType.shaderQualifiers.vertices)) + error(loc, "cannot change previously set layout value", id, ""); + + if (language == EShLangTessControl) + checkIoArraysConsistency(loc); + } + if (publicType.shaderQualifiers.invocations != TQualifier::layoutNotSet) { + if (publicType.qualifier.storage != EvqVaryingIn) + error(loc, "can only apply to 'in'", "invocations", ""); + if (! intermediate.setInvocations(publicType.shaderQualifiers.invocations)) + error(loc, "cannot change previously set layout value", "invocations", ""); + } + if (publicType.shaderQualifiers.geometry != ElgNone) { + if (publicType.qualifier.storage == EvqVaryingIn) { + switch (publicType.shaderQualifiers.geometry) { + case ElgPoints: + case ElgLines: + case ElgLinesAdjacency: + case ElgTriangles: + case ElgTrianglesAdjacency: + case ElgQuads: + case ElgIsolines: + if (intermediate.setInputPrimitive(publicType.shaderQualifiers.geometry)) { + if (language == EShLangGeometry) + checkIoArraysConsistency(loc); + } else + error(loc, "cannot change previously set input primitive", TQualifier::getGeometryString(publicType.shaderQualifiers.geometry), ""); + break; + default: + error(loc, "cannot apply to input", TQualifier::getGeometryString(publicType.shaderQualifiers.geometry), ""); + } + } else if (publicType.qualifier.storage == EvqVaryingOut) { + switch (publicType.shaderQualifiers.geometry) { + case ElgPoints: + case ElgLineStrip: + case ElgTriangleStrip: + if (! intermediate.setOutputPrimitive(publicType.shaderQualifiers.geometry)) + error(loc, "cannot change previously set output primitive", TQualifier::getGeometryString(publicType.shaderQualifiers.geometry), ""); + break; + default: + error(loc, "cannot apply to 'out'", TQualifier::getGeometryString(publicType.shaderQualifiers.geometry), ""); + } + } else + error(loc, "cannot apply to:", TQualifier::getGeometryString(publicType.shaderQualifiers.geometry), GetStorageQualifierString(publicType.qualifier.storage)); + } + if (publicType.shaderQualifiers.spacing != EvsNone) { + if (publicType.qualifier.storage == EvqVaryingIn) { + if (! intermediate.setVertexSpacing(publicType.shaderQualifiers.spacing)) + error(loc, "cannot change previously set vertex spacing", TQualifier::getVertexSpacingString(publicType.shaderQualifiers.spacing), ""); + } else + error(loc, "can only apply to 'in'", TQualifier::getVertexSpacingString(publicType.shaderQualifiers.spacing), ""); + } + if (publicType.shaderQualifiers.order != EvoNone) { + if (publicType.qualifier.storage == EvqVaryingIn) { + if (! intermediate.setVertexOrder(publicType.shaderQualifiers.order)) + error(loc, "cannot change previously set vertex order", TQualifier::getVertexOrderString(publicType.shaderQualifiers.order), ""); + } else + error(loc, "can only apply to 'in'", TQualifier::getVertexOrderString(publicType.shaderQualifiers.order), ""); + } + if (publicType.shaderQualifiers.pointMode) { + if (publicType.qualifier.storage == EvqVaryingIn) + intermediate.setPointMode(); + else + error(loc, "can only apply to 'in'", "point_mode", ""); + } + for (int i = 0; i < 3; ++i) { + if (publicType.shaderQualifiers.localSize[i] > 1) { + if (publicType.qualifier.storage == EvqVaryingIn) { + if (! intermediate.setLocalSize(i, publicType.shaderQualifiers.localSize[i])) + error(loc, "cannot change previously set size", "local_size", ""); + else { + int max = 0; + switch (i) { + case 0: max = resources.maxComputeWorkGroupSizeX; break; + case 1: max = resources.maxComputeWorkGroupSizeY; break; + case 2: max = resources.maxComputeWorkGroupSizeZ; break; + default: break; + } + if (intermediate.getLocalSize(i) > (unsigned int)max) + error(loc, "too large; see gl_MaxComputeWorkGroupSize", "local_size", ""); + + // Fix the existing constant gl_WorkGroupSize with this new information. + TVariable* workGroupSize = getEditableVariable("gl_WorkGroupSize"); + if (workGroupSize != nullptr) + workGroupSize->getWritableConstArray()[i].setUConst(intermediate.getLocalSize(i)); + } + } else + error(loc, "can only apply to 'in'", "local_size", ""); + } + if (publicType.shaderQualifiers.localSizeSpecId[i] != TQualifier::layoutNotSet) { + if (publicType.qualifier.storage == EvqVaryingIn) { + if (! intermediate.setLocalSizeSpecId(i, publicType.shaderQualifiers.localSizeSpecId[i])) + error(loc, "cannot change previously set size", "local_size", ""); + } else + error(loc, "can only apply to 'in'", "local_size id", ""); + // Set the workgroup built-in variable as a specialization constant + TVariable* workGroupSize = getEditableVariable("gl_WorkGroupSize"); + if (workGroupSize != nullptr) + workGroupSize->getWritableType().getQualifier().specConstant = true; + } + } + if (publicType.shaderQualifiers.earlyFragmentTests) { + if (publicType.qualifier.storage == EvqVaryingIn) + intermediate.setEarlyFragmentTests(); + else + error(loc, "can only apply to 'in'", "early_fragment_tests", ""); + } + if (publicType.shaderQualifiers.blendEquation) { + if (publicType.qualifier.storage != EvqVaryingOut) + error(loc, "can only apply to 'out'", "blend equation", ""); + } + + const TQualifier& qualifier = publicType.qualifier; + + if (qualifier.isAuxiliary() || + qualifier.isMemory() || + qualifier.isInterpolation() || + qualifier.precision != EpqNone) + error(loc, "cannot use auxiliary, memory, interpolation, or precision qualifier in a default qualifier declaration (declaration with no type)", "qualifier", ""); + // "The offset qualifier can only be used on block members of blocks..." + // "The align qualifier can only be used on blocks or block members..." + if (qualifier.hasOffset() || + qualifier.hasAlign()) + error(loc, "cannot use offset or align qualifiers in a default qualifier declaration (declaration with no type)", "layout qualifier", ""); + + layoutQualifierCheck(loc, qualifier); + + switch (qualifier.storage) { + case EvqUniform: + if (qualifier.hasMatrix()) + globalUniformDefaults.layoutMatrix = qualifier.layoutMatrix; + if (qualifier.hasPacking()) + globalUniformDefaults.layoutPacking = qualifier.layoutPacking; + break; + case EvqBuffer: + if (qualifier.hasMatrix()) + globalBufferDefaults.layoutMatrix = qualifier.layoutMatrix; + if (qualifier.hasPacking()) + globalBufferDefaults.layoutPacking = qualifier.layoutPacking; + break; + case EvqVaryingIn: + break; + case EvqVaryingOut: + if (qualifier.hasStream()) + globalOutputDefaults.layoutStream = qualifier.layoutStream; + if (qualifier.hasXfbBuffer()) + 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); + } + break; + default: + error(loc, "default qualifier requires 'uniform', 'buffer', 'in', or 'out' storage qualification", "", ""); + return; + } + + if (qualifier.hasBinding()) + error(loc, "cannot declare a default, include a type or full declaration", "binding", ""); + if (qualifier.hasAnyLocation()) + error(loc, "cannot declare a default, use a full declaration", "location/component/index", ""); + if (qualifier.hasXfbOffset()) + error(loc, "cannot declare a default, use a full declaration", "xfb_offset", ""); + if (qualifier.layoutPushConstant) + error(loc, "cannot declare a default, can only be used on a block", "push_constant", ""); + if (qualifier.hasSpecConstantId()) + error(loc, "cannot declare a default, can only be used on a scalar", "constant_id", ""); +} + +// +// Take the sequence of statements that has been built up since the last case/default, +// put it on the list of top-level nodes for the current (inner-most) switch statement, +// and follow that by the case/default we are on now. (See switch topology comment on +// TIntermSwitch.) +// +void TParseContext::wrapupSwitchSubsequence(TIntermAggregate* statements, TIntermNode* branchNode) +{ + TIntermSequence* switchSequence = switchSequenceStack.back(); + + if (statements) { + if (switchSequence->size() == 0) + error(statements->getLoc(), "cannot have statements before first case/default label", "switch", ""); + statements->setOperator(EOpSequence); + switchSequence->push_back(statements); + } + if (branchNode) { + // check all previous cases for the same label (or both are 'default') + for (unsigned int s = 0; s < switchSequence->size(); ++s) { + TIntermBranch* prevBranch = (*switchSequence)[s]->getAsBranchNode(); + if (prevBranch) { + TIntermTyped* prevExpression = prevBranch->getExpression(); + TIntermTyped* newExpression = branchNode->getAsBranchNode()->getExpression(); + if (prevExpression == nullptr && newExpression == nullptr) + error(branchNode->getLoc(), "duplicate label", "default", ""); + else if (prevExpression != nullptr && + newExpression != nullptr && + prevExpression->getAsConstantUnion() && + newExpression->getAsConstantUnion() && + prevExpression->getAsConstantUnion()->getConstArray()[0].getIConst() == + newExpression->getAsConstantUnion()->getConstArray()[0].getIConst()) + error(branchNode->getLoc(), "duplicated value", "case", ""); + } + } + switchSequence->push_back(branchNode); + } +} + +// +// Turn the top-level node sequence built up of wrapupSwitchSubsequence9) +// into a switch node. +// +TIntermNode* TParseContext::addSwitch(const TSourceLoc& loc, TIntermTyped* expression, TIntermAggregate* lastStatements) +{ + profileRequires(loc, EEsProfile, 300, nullptr, "switch statements"); + profileRequires(loc, ENoProfile, 130, nullptr, "switch statements"); + + wrapupSwitchSubsequence(lastStatements, nullptr); + + if (expression == nullptr || + (expression->getBasicType() != EbtInt && expression->getBasicType() != EbtUint) || + expression->getType().isArray() || expression->getType().isMatrix() || expression->getType().isVector()) + error(loc, "condition must be a scalar integer expression", "switch", ""); + + // If there is nothing to do, drop the switch but still execute the expression + TIntermSequence* switchSequence = switchSequenceStack.back(); + if (switchSequence->size() == 0) + return expression; + + if (lastStatements == nullptr) { + // This was originally an ERRROR, because early versions of the specification said + // "it is an error to have no statement between a label and the end of the switch statement." + // The specifications were updated to remove this (being ill-defined what a "statement" was), + // so, this became a warning. However, 3.0 tests still check for the error. + if (profile == EEsProfile && version <= 300 && ! relaxedErrors()) + error(loc, "last case/default label not followed by statements", "switch", ""); + else + warn(loc, "last case/default label not followed by statements", "switch", ""); + + // emulate a break for error recovery + lastStatements = intermediate.makeAggregate(intermediate.addBranch(EOpBreak, loc)); + lastStatements->setOperator(EOpSequence); + switchSequence->push_back(lastStatements); + } + + TIntermAggregate* body = new TIntermAggregate(EOpSequence); + body->getSequence() = *switchSequenceStack.back(); + body->setLoc(loc); + + TIntermSwitch* switchNode = new TIntermSwitch(expression, body); + switchNode->setLoc(loc); + + return switchNode; +} + +} // end namespace glslang diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.h b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.h new file mode 100644 index 0000000..61db6fe --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.h @@ -0,0 +1,457 @@ +// +// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +// Copyright (C) 2012-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. +// + +// +// This header defines a two-level parse-helper hierarchy, derived from +// TParseVersions: +// - TParseContextBase: sharable across multiple parsers +// - TParseContext: GLSL specific helper +// + +#ifndef _PARSER_HELPER_INCLUDED_ +#define _PARSER_HELPER_INCLUDED_ + +#include "parseVersions.h" +#include "../Include/ShHandle.h" +#include "SymbolTable.h" +#include "localintermediate.h" +#include "Scan.h" +#include +#include + +namespace glslang { + +struct TPragma { + TPragma(bool o, bool d) : optimize(o), debug(d) { } + bool optimize; + bool debug; + TPragmaTable pragmaTable; +}; + +class TScanContext; +class TPpContext; + +typedef std::set TIdSetType; + +// +// Sharable code (as well as what's in TParseVersions) across +// parse helpers. +// +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) + : TParseVersions(interm, version, profile, spvVersion, language, infoSink, forwardCompatible, messages), + symbolTable(symbolTable), + parsingBuiltins(parsingBuiltins), scanContext(nullptr), ppContext(nullptr), + globalUniformBlock(nullptr) + { } + virtual ~TParseContextBase() { } + + virtual void C_DECL error(const TSourceLoc&, const char* szReason, const char* szToken, + const char* szExtraInfoFormat, ...); + virtual void C_DECL warn(const TSourceLoc&, const char* szReason, const char* szToken, + const char* szExtraInfoFormat, ...); + virtual void C_DECL ppError(const TSourceLoc&, const char* szReason, const char* szToken, + const char* szExtraInfoFormat, ...); + virtual void C_DECL ppWarn(const TSourceLoc&, const char* szReason, const char* szToken, + const char* szExtraInfoFormat, ...); + + virtual void setLimits(const TBuiltInResource&) = 0; + + EShLanguage getLanguage() const { return language; } + void setScanContext(TScanContext* c) { scanContext = c; } + TScanContext* getScanContext() const { return scanContext; } + void setPpContext(TPpContext* c) { ppContext = c; } + TPpContext* getPpContext() const { return ppContext; } + + virtual void setLineCallback(const std::function& func) { lineCallback = func; } + virtual void setExtensionCallback(const std::function& func) { extensionCallback = func; } + virtual void setVersionCallback(const std::function& func) { versionCallback = func; } + virtual void setPragmaCallback(const std::function&)>& func) { pragmaCallback = func; } + virtual void setErrorCallback(const std::function& func) { errorCallback = func; } + + virtual void reservedPpErrorCheck(const TSourceLoc&, const char* name, const char* op) = 0; + virtual bool lineContinuationCheck(const TSourceLoc&, bool endOfComment) = 0; + virtual bool lineDirectiveShouldSetNextLine() const = 0; + virtual void handlePragma(const TSourceLoc&, const TVector&) = 0; + + virtual bool parseShaderStrings(TPpContext&, TInputScanner& input, bool versionWillBeError = false) = 0; + + virtual void notifyVersion(int line, int version, const char* type_string) + { + if (versionCallback) + versionCallback(line, version, type_string); + } + virtual void notifyErrorDirective(int line, const char* error_message) + { + if (errorCallback) + errorCallback(line, error_message); + } + virtual void notifyLineDirective(int curLineNo, int newLineNo, bool hasSource, int sourceNum, const char* sourceName) + { + if (lineCallback) + lineCallback(curLineNo, newLineNo, hasSource, sourceNum, sourceName); + } + virtual void notifyExtensionDirective(int line, const char* extension, const char* behavior) + { + if (extensionCallback) + 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 bool lValueErrorCheck(const TSourceLoc&, const char* op, TIntermTyped*); + virtual void rValueErrorCheck(const TSourceLoc&, const char* op, TIntermTyped*); + + const char* const scopeMangler = "::"; + +protected: + TParseContextBase(TParseContextBase&); + TParseContextBase& operator=(TParseContextBase&); + + const bool parsingBuiltins; // true if parsing built-in symbols/functions + TVector linkageSymbols; // these need to be transferred to 'linkage', after all editing is done + TScanContext* scanContext; + TPpContext* ppContext; + + // These, if set, will be called when a line, pragma ... is preprocessed. + // They will be called with any parameters to the original directive. + std::function lineCallback; + std::function&)> pragmaCallback; + std::function versionCallback; + std::function extensionCallback; + std::function errorCallback; + + // see implementation for detail + const TFunction* selectFunction(const TVector, const TFunction&, + std::function, + std::function, + /* output */ bool& tie); + + virtual void parseSwizzleSelector(const TSourceLoc&, const TString&, int size, + TSwizzleSelectors&); + + // 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 + // override this to set the language-specific name + virtual const char* getGlobalUniformBlockName() const { return ""; } + virtual void setUniformBlockDefaults(TType& block) const { } + virtual void finalizeGlobalUniformBlockLayout(TVariable&) { } + virtual void outputMessage(const TSourceLoc&, const char* szReason, const char* szToken, + const char* szExtraInfoFormat, TPrefixType prefix, + va_list args); + virtual void trackLinkage(TSymbol& symbol); + virtual void makeEditable(TSymbol*&); + virtual TVariable* getEditableVariable(const char* name); + virtual void finish(); +}; + +// +// Manage the state for when to respect precision qualifiers and when to warn about +// the defaults being different than might be expected. +// +class TPrecisionManager { +public: + TPrecisionManager() : obey(false), warn(false), explicitIntDefault(false), explicitFloatDefault(false){ } + virtual ~TPrecisionManager() {} + + void respectPrecisionQualifiers() { obey = true; } + bool respectingPrecisionQualifiers() const { return obey; } + bool shouldWarnAboutDefaults() const { return warn; } + void defaultWarningGiven() { warn = false; } + void warnAboutDefaults() { warn = true; } + void explicitIntDefaultSeen() + { + explicitIntDefault = true; + if (explicitFloatDefault) + warn = false; + } + void explicitFloatDefaultSeen() + { + explicitFloatDefault = true; + if (explicitIntDefault) + warn = false; + } + +protected: + bool obey; // respect precision qualifiers + bool warn; // need to give a warning about the defaults + bool explicitIntDefault; // user set the default for int/uint + bool explicitFloatDefault; // user set the default for float +}; + +// +// GLSL-specific parse helper. Should have GLSL in the name, but that's +// too big of a change for comparing branches at the moment, and perhaps +// impacts downstream consumers as well. +// +class TParseContext : public TParseContextBase { +public: + TParseContext(TSymbolTable&, TIntermediate&, bool parsingBuiltins, int version, EProfile, const SpvVersion& spvVersion, EShLanguage, TInfoSink&, + bool forwardCompatible = false, EShMessages messages = EShMsgDefault); + virtual ~TParseContext(); + + bool obeyPrecisionQualifiers() const { return precisionManager.respectingPrecisionQualifiers(); }; + void setPrecisionDefaults(); + + void setLimits(const TBuiltInResource&) override; + bool parseShaderStrings(TPpContext&, TInputScanner& input, bool versionWillBeError = false) override; + void parserError(const char* s); // for bison's yyerror + + void reservedErrorCheck(const TSourceLoc&, const TString&); + void reservedPpErrorCheck(const TSourceLoc&, const char* name, const char* op) override; + bool lineContinuationCheck(const TSourceLoc&, bool endOfComment) override; + bool lineDirectiveShouldSetNextLine() const override; + bool builtInName(const TString&); + + void handlePragma(const TSourceLoc&, const TVector&) 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; + bool isIoResizeArray(const TType&) const; + void fixIoArraySize(const TSourceLoc&, TType&); + void ioArrayCheck(const TSourceLoc&, const TType&, const TString& identifier); + void handleIoResizeArrayAccess(const TSourceLoc&, TIntermTyped* base); + void checkIoArraysConsistency(const TSourceLoc&, bool tailOnly = false); + int getIoArrayImplicitSize() const; + void checkIoArrayConsistency(const TSourceLoc&, int requiredSize, const char* feature, TType&, const TString&); + + 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); + void blockMemberExtensionCheck(const TSourceLoc&, const TIntermTyped* base, const TString& field); + TFunction* handleFunctionDeclarator(const TSourceLoc&, TFunction& function, bool prototype); + TIntermAggregate* handleFunctionDefinition(const TSourceLoc&, TFunction&); + TIntermTyped* handleFunctionCall(const TSourceLoc&, TFunction*, TIntermNode*); + TIntermTyped* handleBuiltInFunctionCall(TSourceLoc, TIntermNode& arguments, const TFunction& function); + void computeBuiltinPrecisions(TIntermTyped&, const TFunction&); + TIntermNode* handleReturnValue(const TSourceLoc&, TIntermTyped*); + void checkLocation(const TSourceLoc&, TOperator); + TIntermTyped* handleLengthMethod(const TSourceLoc&, TFunction*, TIntermNode*); + void addInputArgumentConversions(const TFunction&, TIntermNode*&) const; + TIntermTyped* addOutputArgumentConversions(const TFunction&, TIntermAggregate&) const; + void builtInOpCheck(const TSourceLoc&, const TFunction&, TIntermOperator&); + void nonOpBuiltInCheck(const TSourceLoc&, const TFunction&, TIntermAggregate&); + void userFunctionCallCheck(const TSourceLoc&, TIntermAggregate&); + void samplerConstructorLocationCheck(const TSourceLoc&, const char* token, TIntermNode*); + TFunction* handleConstructorCall(const TSourceLoc&, const TPublicType&); + void handlePrecisionQualifier(const TSourceLoc&, TQualifier&, TPrecisionQualifier); + void checkPrecisionQualifier(const TSourceLoc&, TPrecisionQualifier); + + void assignError(const TSourceLoc&, const char* op, TString left, TString right); + void unaryOpError(const TSourceLoc&, const char* op, TString operand); + void binaryOpError(const TSourceLoc&, const char* op, TString left, TString right); + void variableCheck(TIntermTyped*& nodePtr); + bool lValueErrorCheck(const TSourceLoc&, const char* op, TIntermTyped*) override; + void rValueErrorCheck(const TSourceLoc&, const char* op, TIntermTyped*) override; + void constantValueCheck(TIntermTyped* node, const char* token); + void integerCheck(const TIntermTyped* node, const char* token); + void globalCheck(const TSourceLoc&, const char* token); + bool constructorError(const TSourceLoc&, TIntermNode*, TFunction&, TOperator, TType&); + bool constructorTextureSamplerError(const TSourceLoc&, const TFunction&); + void arraySizeCheck(const TSourceLoc&, TIntermTyped* expr, TArraySize&); + bool arrayQualifierError(const TSourceLoc&, const TQualifier&); + 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 arrayOfArrayVersionCheck(const TSourceLoc&); + void arrayDimCheck(const TSourceLoc&, const TArraySizes* sizes1, const TArraySizes* sizes2); + void arrayDimCheck(const TSourceLoc&, const TType*, const TArraySizes*); + void arrayDimMerge(TType& type, const TArraySizes* sizes); + bool voidErrorCheck(const TSourceLoc&, const TString&, TBasicType); + void boolCheck(const TSourceLoc&, const TIntermTyped*); + 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 globalQualifierFixCheck(const TSourceLoc&, TQualifier&); + void globalQualifierTypeCheck(const TSourceLoc&, const TQualifier&, const TPublicType&); + bool structQualifierErrorCheck(const TSourceLoc&, const TPublicType& pType); + void mergeQualifiers(const TSourceLoc&, TQualifier& dst, const TQualifier& src, bool force); + void setDefaultPrecision(const TSourceLoc&, TPublicType&, TPrecisionQualifier); + int computeSamplerTypeIndex(TSampler&); + TPrecisionQualifier getDefaultPrecision(TPublicType&); + void precisionQualifierCheck(const TSourceLoc&, TBasicType, TQualifier&); + void parameterTypeCheck(const TSourceLoc&, TStorageQualifier qualifier, const TType& type); + bool containsFieldWithBasicType(const TType& type ,TBasicType basicType); + 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 paramCheckFix(const TSourceLoc&, const TStorageQualifier&, TType& type); + void paramCheckFix(const TSourceLoc&, const TQualifier&, TType& type); + void nestedBlockCheck(const TSourceLoc&); + void nestedStructCheck(const TSourceLoc&); + void arrayObjectCheck(const TSourceLoc&, const TType&, const char* op); + void opaqueCheck(const TSourceLoc&, const TType&, const char* op); + void specializationCheck(const TSourceLoc&, const TType&, const char* op); + void structTypeCheck(const TSourceLoc&, TPublicType&); + void inductiveLoopCheck(const TSourceLoc&, TIntermNode* init, TIntermLoop* loop); + void arrayLimitCheck(const TSourceLoc&, const TString&, int size); + void limitCheck(const TSourceLoc&, int value, const char* limit, const char* feature); + + void inductiveLoopBodyCheck(TIntermNode*, int loopIndexId, TSymbolTable&); + void constantIndexExpressionCheck(TIntermNode*); + + void setLayoutQualifier(const TSourceLoc&, TPublicType&, TString&); + void setLayoutQualifier(const TSourceLoc&, TPublicType&, TString&, const TIntermTyped*); + void mergeObjectLayoutQualifiers(TQualifier& dest, const TQualifier& src, bool inheritOnly); + void layoutObjectCheck(const TSourceLoc&, const TSymbol&); + void layoutTypeCheck(const TSourceLoc&, const TType&); + void layoutQualifierCheck(const TSourceLoc&, const TQualifier&); + void checkNoShaderLayouts(const TSourceLoc&, const TShaderQualifiers&); + void fixOffset(const TSourceLoc&, TSymbol&); + + const TFunction* findFunction(const TSourceLoc& loc, const TFunction& call, bool& builtIn); + const TFunction* findFunctionExact(const TSourceLoc& loc, const TFunction& call, bool& builtIn); + const TFunction* findFunction120(const TSourceLoc& loc, const TFunction& call, bool& builtIn); + const TFunction* findFunction400(const TSourceLoc& loc, const TFunction& call, bool& builtIn); + void declareTypeDefaults(const TSourceLoc&, const TPublicType&); + TIntermNode* declareVariable(const TSourceLoc&, TString& identifier, const TPublicType&, TArraySizes* typeArray = 0, TIntermTyped* initializer = 0); + TIntermTyped* addConstructor(const TSourceLoc&, TIntermNode*, const TType&); + TIntermTyped* constructAggregate(TIntermNode*, const TType&, int, const TSourceLoc&); + TIntermTyped* constructBuiltIn(const TType&, TOperator, TIntermTyped*, const TSourceLoc&, bool subset); + void declareBlock(const TSourceLoc&, TTypeList& typeList, const TString* instanceName = 0, TArraySizes* arraySizes = 0); + void blockStageIoCheck(const TSourceLoc&, const TQualifier&); + void blockQualifierCheck(const TSourceLoc&, const TQualifier&, bool instanceName); + void fixBlockLocations(const TSourceLoc&, TQualifier&, TTypeList&, bool memberWithLocation, bool memberWithoutLocation); + void fixBlockXfbOffsets(TQualifier&, TTypeList&); + void fixBlockUniformOffsets(TQualifier&, TTypeList&); + void addQualifierToExisting(const TSourceLoc&, TQualifier, const TString& identifier); + void addQualifierToExisting(const TSourceLoc&, TQualifier, TIdentifierList&); + void invariantCheck(const TSourceLoc&, const TQualifier&); + void updateStandaloneQualifierDefaults(const TSourceLoc&, const TPublicType&); + void wrapupSwitchSubsequence(TIntermAggregate* statements, TIntermNode* branchNode); + TIntermNode* addSwitch(const TSourceLoc&, TIntermTyped* expression, TIntermAggregate* body); + + void updateImplicitArraySize(const TSourceLoc&, TIntermNode*, int index); + +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*&); + TIntermNode* executeInitializer(const TSourceLoc&, TIntermTyped* initializer, TVariable* variable); + TIntermTyped* convertInitializerList(const TSourceLoc&, const TType&, TIntermTyped* initializer); + void finish() override; + +public: + // + // Generally, bison productions, the scanner, and the PP need read/write access to these; just give them direct access + // + + // 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 switchSequenceStack; // case, node, case, case, node, ...; ensure only one node between cases; stack of them for nesting + TList 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]; + TBuiltInResource resources; + TLimits& limits; + +protected: + TParseContext(TParseContext&); + TParseContext& operator=(TParseContext&); + + static const int maxSamplerIndex = EsdNumDims * (EbtNumTypes * (2 * 2 * 2 * 2 * 2)); // see computeSamplerTypeIndex() + TPrecisionQualifier defaultSamplerPrecision[maxSamplerIndex]; + TPrecisionManager precisionManager; + TQualifier globalBufferDefaults; + TQualifier globalUniformDefaults; + TQualifier globalInputDefaults; + TQualifier globalOutputDefaults; + int* atomicUintOffsets; // to become an array of the right size to hold an offset per binding point + TString currentCaller; // name of last function body entered (not valid when at global scope) + TIdSetType inductiveLoopIds; + bool anyIndexLimits; + TVector needsIndexLimitationChecking; + + // + // Geometry shader input arrays: + // - array sizing is based on input primitive and/or explicit size + // + // Tessellation control output arrays: + // - array sizing is based on output layout(vertices=...) and/or explicit size + // + // Both: + // - array sizing is retroactive + // - built-in block redeclarations interact with this + // + // Design: + // - use a per-context "resize-list", a list of symbols whose array sizes + // can be fixed + // + // - the resize-list starts empty at beginning of user-shader compilation, it does + // not have built-ins in it + // + // - on built-in array use: copyUp() symbol and add it to the resize-list + // + // - on user array declaration: add it to the resize-list + // + // - on block redeclaration: copyUp() symbol and add it to the resize-list + // * note, that appropriately gives an error if redeclaring a block that + // was already used and hence already copied-up + // + // - on seeing a layout declaration that sizes the array, fix everything in the + // resize-list, giving errors for mismatch + // + // - on seeing an array size declaration, give errors on mismatch between it and previous + // array-sizing declarations + // + TVector ioArraySymbolResizeList; +}; + +} // end namespace glslang + +#endif // _PARSER_HELPER_INCLUDED_ diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/PoolAlloc.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/PoolAlloc.cpp new file mode 100644 index 0000000..4007c38 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/PoolAlloc.cpp @@ -0,0 +1,345 @@ +// +// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +// 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. +// + +#include "../Include/Common.h" +#include "../Include/PoolAlloc.h" + +#include "../Include/InitializeGlobals.h" +#include "../OSDependent/osinclude.h" + +namespace glslang { + +OS_TLSIndex PoolIndex; + +void InitializeMemoryPools() +{ + TThreadMemoryPools* pools = static_cast(OS_GetTLSValue(PoolIndex)); + if (pools) + return; + + TPoolAllocator *threadPoolAllocator = new TPoolAllocator(); + + TThreadMemoryPools* threadData = new TThreadMemoryPools(); + + threadData->threadPoolAllocator = threadPoolAllocator; + + OS_SetTLSValue(PoolIndex, threadData); +} + +void FreeGlobalPools() +{ + // Release the allocated memory for this thread. + TThreadMemoryPools* globalPools = static_cast(OS_GetTLSValue(PoolIndex)); + if (! globalPools) + return; + + GetThreadPoolAllocator().popAll(); + delete &GetThreadPoolAllocator(); + delete globalPools; +} + +bool InitializePoolIndex() +{ + // Allocate a TLS index. + if ((PoolIndex = OS_AllocTLSIndex()) == OS_INVALID_TLS_INDEX) + return false; + + return true; +} + +void FreePoolIndex() +{ + // Release the TLS index. + OS_FreeTLSIndex(PoolIndex); +} + +TPoolAllocator& GetThreadPoolAllocator() +{ + TThreadMemoryPools* threadData = static_cast(OS_GetTLSValue(PoolIndex)); + + return *threadData->threadPoolAllocator; +} + +void SetThreadPoolAllocator(TPoolAllocator& poolAllocator) +{ + TThreadMemoryPools* threadData = static_cast(OS_GetTLSValue(PoolIndex)); + + threadData->threadPoolAllocator = &poolAllocator; +} + +// +// Implement the functionality of the TPoolAllocator class, which +// is documented in PoolAlloc.h. +// +TPoolAllocator::TPoolAllocator(int growthIncrement, int allocationAlignment) : + pageSize(growthIncrement), + alignment(allocationAlignment), + freeList(nullptr), + inUseList(nullptr), + numCalls(0) +{ + // + // Don't allow page sizes we know are smaller than all common + // OS page sizes. + // + if (pageSize < 4*1024) + pageSize = 4*1024; + + // + // A large currentPageOffset indicates a new page needs to + // be obtained to allocate memory. + // + currentPageOffset = pageSize; + + // + // Adjust alignment to be at least pointer aligned and + // power of 2. + // + size_t minAlign = sizeof(void*); + alignment &= ~(minAlign - 1); + if (alignment < minAlign) + alignment = minAlign; + size_t a = 1; + while (a < alignment) + a <<= 1; + alignment = a; + alignmentMask = a - 1; + + // + // Align header skip + // + headerSkip = minAlign; + if (headerSkip < sizeof(tHeader)) { + headerSkip = (sizeof(tHeader) + alignmentMask) & ~alignmentMask; + } + + push(); +} + +TPoolAllocator::~TPoolAllocator() +{ + while (inUseList) { + tHeader* next = inUseList->nextPage; + inUseList->~tHeader(); + delete [] reinterpret_cast(inUseList); + inUseList = next; + } + + // + // Always delete the free list memory - it can't be being + // (correctly) referenced, whether the pool allocator was + // global or not. We should not check the guard blocks + // here, because we did it already when the block was + // placed into the free list. + // + while (freeList) { + tHeader* next = freeList->nextPage; + delete [] reinterpret_cast(freeList); + freeList = next; + } +} + +const unsigned char TAllocation::guardBlockBeginVal = 0xfb; +const unsigned char TAllocation::guardBlockEndVal = 0xfe; +const unsigned char TAllocation::userDataFill = 0xcd; + +# ifdef GUARD_BLOCKS + const size_t TAllocation::guardBlockSize = 16; +# else + const size_t TAllocation::guardBlockSize = 0; +# endif + +// +// Check a single guard block for damage +// +#ifdef GUARD_BLOCKS +void TAllocation::checkGuardBlock(unsigned char* blockMem, unsigned char val, const char* locText) const +#else +void TAllocation::checkGuardBlock(unsigned char*, unsigned char, const char*) const +#endif +{ +#ifdef GUARD_BLOCKS + for (size_t x = 0; x < guardBlockSize; x++) { + if (blockMem[x] != val) { + const int maxSize = 80; + char assertMsg[maxSize]; + + // We don't print the assert message. It's here just to be helpful. + snprintf(assertMsg, maxSize, "PoolAlloc: Damage %s %zu byte allocation at 0x%p\n", + locText, size, data()); + assert(0 && "PoolAlloc: Damage in guard block"); + } + } +#else + assert(guardBlockSize == 0); +#endif +} + +void TPoolAllocator::push() +{ + tAllocState state = { currentPageOffset, inUseList }; + + stack.push_back(state); + + // + // Indicate there is no current page to allocate from. + // + currentPageOffset = pageSize; +} + +// +// Do a mass-deallocation of all the individual allocations +// that have occurred since the last push(), or since the +// last pop(), or since the object's creation. +// +// The deallocated pages are saved for future allocations. +// +void TPoolAllocator::pop() +{ + if (stack.size() < 1) + return; + + tHeader* page = stack.back().page; + currentPageOffset = stack.back().offset; + + while (inUseList != page) { + // invoke destructor to free allocation list + inUseList->~tHeader(); + + tHeader* nextInUse = inUseList->nextPage; + if (inUseList->pageCount > 1) + delete [] reinterpret_cast(inUseList); + else { + inUseList->nextPage = freeList; + freeList = inUseList; + } + inUseList = nextInUse; + } + + stack.pop_back(); +} + +// +// Do a mass-deallocation of all the individual allocations +// that have occurred. +// +void TPoolAllocator::popAll() +{ + while (stack.size() > 0) + pop(); +} + +void* TPoolAllocator::allocate(size_t numBytes) +{ + // If we are using guard blocks, all allocations are bracketed by + // them: [guardblock][allocation][guardblock]. numBytes is how + // much memory the caller asked for. allocationSize is the total + // size including guard blocks. In release build, + // guardBlockSize=0 and this all gets optimized away. + size_t allocationSize = TAllocation::allocationSize(numBytes); + + // + // Just keep some interesting statistics. + // + ++numCalls; + totalBytes += numBytes; + + // + // Do the allocation, most likely case first, for efficiency. + // This step could be moved to be inline sometime. + // + if (currentPageOffset + allocationSize <= pageSize) { + // + // Safe to allocate from currentPageOffset. + // + unsigned char* memory = reinterpret_cast(inUseList) + currentPageOffset; + currentPageOffset += allocationSize; + currentPageOffset = (currentPageOffset + alignmentMask) & ~alignmentMask; + + return initializeAllocation(inUseList, memory, numBytes); + } + + if (allocationSize + headerSkip > pageSize) { + // + // Do a multi-page allocation. Don't mix these with the others. + // The OS is efficient and allocating and free-ing multiple pages. + // + size_t numBytesToAlloc = allocationSize + headerSkip; + tHeader* memory = reinterpret_cast(::new char[numBytesToAlloc]); + if (memory == 0) + return 0; + + // Use placement-new to initialize header + new(memory) tHeader(inUseList, (numBytesToAlloc + pageSize - 1) / pageSize); + inUseList = memory; + + currentPageOffset = pageSize; // make next allocation come from a new page + + // No guard blocks for multi-page allocations (yet) + return reinterpret_cast(reinterpret_cast(memory) + headerSkip); + } + + // + // Need a simple page to allocate from. + // + tHeader* memory; + if (freeList) { + memory = freeList; + freeList = freeList->nextPage; + } else { + memory = reinterpret_cast(::new char[pageSize]); + if (memory == 0) + return 0; + } + + // Use placement-new to initialize header + new(memory) tHeader(inUseList, 1); + inUseList = memory; + + unsigned char* ret = reinterpret_cast(inUseList) + headerSkip; + currentPageOffset = (headerSkip + allocationSize + alignmentMask) & ~alignmentMask; + + return initializeAllocation(inUseList, ret, numBytes); +} + +// +// Check all allocations in a list for damage by calling check on each. +// +void TAllocation::checkAllocList() const +{ + for (const TAllocation* alloc = this; alloc != 0; alloc = alloc->prevAlloc) + alloc->check(); +} + +} // end namespace glslang diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/RemoveTree.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/RemoveTree.cpp new file mode 100644 index 0000000..1d33bfd --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/RemoveTree.cpp @@ -0,0 +1,118 @@ +// +// 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. +// + +#include "../Include/intermediate.h" +#include "RemoveTree.h" + +namespace glslang { + +// +// Code to recursively delete the intermediate tree. +// +struct TRemoveTraverser : TIntermTraverser { + TRemoveTraverser() : TIntermTraverser(false, false, true, false) {} + + virtual void visitSymbol(TIntermSymbol* node) + { + delete node; + } + + virtual bool visitBinary(TVisit /* visit*/ , TIntermBinary* node) + { + delete node; + + return true; + } + + virtual bool visitUnary(TVisit /* visit */, TIntermUnary* node) + { + delete node; + + return true; + } + + virtual bool visitAggregate(TVisit /* visit*/ , TIntermAggregate* node) + { + delete node; + + return true; + } + + virtual bool visitSelection(TVisit /* visit*/ , TIntermSelection* node) + { + delete node; + + return true; + } + + virtual bool visitSwitch(TVisit /* visit*/ , TIntermSwitch* node) + { + delete node; + + return true; + } + + virtual void visitConstantUnion(TIntermConstantUnion* node) + { + delete node; + } + + virtual bool visitLoop(TVisit /* visit*/ , TIntermLoop* node) + { + delete node; + + return true; + } + + virtual bool visitBranch(TVisit /* visit*/ , TIntermBranch* node) + { + delete node; + + return true; + } +}; + +// +// Entry point. +// +void RemoveAllTreeNodes(TIntermNode* root) +{ + TRemoveTraverser it; + + root->traverse(&it); +} + +} // end namespace glslang diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/RemoveTree.h b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/RemoveTree.h new file mode 100644 index 0000000..507307e --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/RemoveTree.h @@ -0,0 +1,39 @@ +// +// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +// 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. +// + +namespace glslang { + +void RemoveAllTreeNodes(TIntermNode*); + +} // end namespace glslang diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Scan.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Scan.cpp new file mode 100644 index 0000000..8b3a306 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Scan.cpp @@ -0,0 +1,1399 @@ +// +// 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. +// + +// +// GLSL scanning, leveraging the scanning done by the preprocessor. +// + +#include +#include +#include + +#include "../Include/Types.h" +#include "SymbolTable.h" +#include "ParseHelper.h" +#include "glslang_tab.cpp.h" +#include "ScanContext.h" +#include "Scan.h" + +// preprocessor includes +#include "preprocessor/PpContext.h" +#include "preprocessor/PpTokens.h" + +// Required to avoid missing prototype warnings for some compilers +int yylex(YYSTYPE*, glslang::TParseContext&); + +namespace glslang { + +// read past any white space +void TInputScanner::consumeWhiteSpace(bool& foundNonSpaceTab) +{ + int c = peek(); // don't accidentally consume anything other than whitespace + while (c == ' ' || c == '\t' || c == '\r' || c == '\n') { + if (c == '\r' || c == '\n') + foundNonSpaceTab = true; + get(); + c = peek(); + } +} + +// return true if a comment was actually consumed +bool TInputScanner::consumeComment() +{ + if (peek() != '/') + return false; + + get(); // consume the '/' + int c = peek(); + if (c == '/') { + + // a '//' style comment + get(); // consume the second '/' + c = get(); + do { + while (c != EndOfInput && c != '\\' && c != '\r' && c != '\n') + c = get(); + + if (c == EndOfInput || c == '\r' || c == '\n') { + while (c == '\r' || c == '\n') + c = get(); + + // we reached the end of the comment + break; + } else { + // it's a '\', so we need to keep going, after skipping what's escaped + + // read the skipped character + c = get(); + + // if it's a two-character newline, skip both characters + if (c == '\r' && peek() == '\n') + get(); + c = get(); + } + } while (true); + + // put back the last non-comment character + if (c != EndOfInput) + unget(); + + return true; + } else if (c == '*') { + + // a '/*' style comment + get(); // consume the '*' + c = get(); + do { + while (c != EndOfInput && c != '*') + c = get(); + if (c == '*') { + c = get(); + if (c == '/') + break; // end of comment + // not end of comment + } else // end of input + break; + } while (true); + + return true; + } else { + // it's not a comment, put the '/' back + unget(); + + return false; + } +} + +// skip whitespace, then skip a comment, rinse, repeat +void TInputScanner::consumeWhitespaceComment(bool& foundNonSpaceTab) +{ + do { + consumeWhiteSpace(foundNonSpaceTab); + + // if not starting a comment now, then done + int c = peek(); + if (c != '/' || c == EndOfInput) + return; + + // skip potential comment + foundNonSpaceTab = true; + if (! consumeComment()) + return; + + } while (true); +} + +// Returns true if there was non-white space (e.g., a comment, newline) before the #version +// or no #version was found; otherwise, returns false. There is no error case, it always +// succeeds, but will leave version == 0 if no #version was found. +// +// Sets notFirstToken based on whether tokens (beyond white space and comments) +// appeared before the #version. +// +// N.B. does not attempt to leave input in any particular known state. The assumption +// is that scanning will start anew, following the rules for the chosen version/profile, +// and with a corresponding parsing context. +// +bool TInputScanner::scanVersion(int& version, EProfile& profile, bool& notFirstToken) +{ + // This function doesn't have to get all the semantics correct, + // just find the #version if there is a correct one present. + // The preprocessor will have the responsibility of getting all the semantics right. + + 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 + profile = ENoProfile; + + bool foundNonSpaceTab = false; + bool lookingInMiddle = false; + int c; + do { + if (lookingInMiddle) { + notFirstToken = true; + // make forward progress by finishing off the current line plus extra new lines + if (peek() == '\n' || peek() == '\r') { + while (peek() == '\n' || peek() == '\r') + get(); + } else + do { + c = get(); + } while (c != EndOfInput && c != '\n' && c != '\r'); + while (peek() == '\n' || peek() == '\r') + get(); + if (peek() == EndOfInput) + return true; + } + lookingInMiddle = true; + + // Nominal start, skipping the desktop allowed comments and white space, but tracking if + // something else was found for ES: + consumeWhitespaceComment(foundNonSpaceTab); + if (foundNonSpaceTab) + versionNotFirst = true; + + // "#" + if (get() != '#') { + versionNotFirst = true; + continue; + } + + // whitespace + do { + c = get(); + } while (c == ' ' || c == '\t'); + + // "version" + if ( c != 'v' || + get() != 'e' || + get() != 'r' || + get() != 's' || + get() != 'i' || + get() != 'o' || + get() != 'n') { + versionNotFirst = true; + continue; + } + + // whitespace + do { + c = get(); + } while (c == ' ' || c == '\t'); + + // version number + while (c >= '0' && c <= '9') { + version = 10 * version + (c - '0'); + c = get(); + } + if (version == 0) { + versionNotFirst = true; + continue; + } + + // whitespace + while (c == ' ' || c == '\t') + c = get(); + + // profile + const int maxProfileLength = 13; // not including any 0 + char profileString[maxProfileLength]; + int profileLength; + for (profileLength = 0; profileLength < maxProfileLength; ++profileLength) { + if (c == EndOfInput || c == ' ' || c == '\t' || c == '\n' || c == '\r') + break; + profileString[profileLength] = (char)c; + c = get(); + } + if (c != EndOfInput && c != ' ' && c != '\t' && c != '\n' && c != '\r') { + versionNotFirst = true; + continue; + } + + if (profileLength == 2 && strncmp(profileString, "es", profileLength) == 0) + profile = EEsProfile; + else if (profileLength == 4 && strncmp(profileString, "core", profileLength) == 0) + profile = ECoreProfile; + else if (profileLength == 13 && strncmp(profileString, "compatibility", profileLength) == 0) + profile = ECompatibilityProfile; + + return versionNotFirst; + } while (true); +} + +// Fill this in when doing glslang-level scanning, to hand back to the parser. +class TParserToken { +public: + explicit TParserToken(YYSTYPE& b) : sType(b) { } + + YYSTYPE& sType; +protected: + TParserToken(TParserToken&); + TParserToken& operator=(TParserToken&); +}; + +} // end namespace glslang + +// This is the function the glslang parser (i.e., bison) calls to get its next token +int yylex(YYSTYPE* glslangTokenDesc, glslang::TParseContext& parseContext) +{ + glslang::TParserToken token(*glslangTokenDesc); + + return parseContext.getScanContext()->tokenize(parseContext.getPpContext(), token); +} + +namespace { + +struct str_eq +{ + bool operator()(const char* lhs, const char* rhs) const + { + return strcmp(lhs, rhs) == 0; + } +}; + +struct str_hash +{ + size_t operator()(const char* str) const + { + // djb2 + unsigned long hash = 5381; + int c; + + while ((c = *str++) != 0) + hash = ((hash << 5) + hash) + c; + + return hash; + } +}; + +// A single global usable by all threads, by all versions, by all languages. +// After a single process-level initialization, this is read only and thread safe +std::unordered_map* KeywordMap = nullptr; +std::unordered_set* ReservedSet = nullptr; + +}; + +namespace glslang { + +void TScanContext::fillInKeywordMap() +{ + if (KeywordMap != nullptr) { + // this is really an error, as this should called only once per process + // but, the only risk is if two threads called simultaneously + return; + } + KeywordMap = new std::unordered_map; + + (*KeywordMap)["const"] = CONST; + (*KeywordMap)["uniform"] = UNIFORM; + (*KeywordMap)["in"] = IN; + (*KeywordMap)["out"] = OUT; + (*KeywordMap)["inout"] = INOUT; + (*KeywordMap)["struct"] = STRUCT; + (*KeywordMap)["break"] = BREAK; + (*KeywordMap)["continue"] = CONTINUE; + (*KeywordMap)["do"] = DO; + (*KeywordMap)["for"] = FOR; + (*KeywordMap)["while"] = WHILE; + (*KeywordMap)["switch"] = SWITCH; + (*KeywordMap)["case"] = CASE; + (*KeywordMap)["default"] = DEFAULT; + (*KeywordMap)["if"] = IF; + (*KeywordMap)["else"] = ELSE; + (*KeywordMap)["discard"] = DISCARD; + (*KeywordMap)["return"] = RETURN; + (*KeywordMap)["void"] = VOID; + (*KeywordMap)["bool"] = BOOL; + (*KeywordMap)["float"] = FLOAT; + (*KeywordMap)["int"] = INT; + (*KeywordMap)["bvec2"] = BVEC2; + (*KeywordMap)["bvec3"] = BVEC3; + (*KeywordMap)["bvec4"] = BVEC4; + (*KeywordMap)["vec2"] = VEC2; + (*KeywordMap)["vec3"] = VEC3; + (*KeywordMap)["vec4"] = VEC4; + (*KeywordMap)["ivec2"] = IVEC2; + (*KeywordMap)["ivec3"] = IVEC3; + (*KeywordMap)["ivec4"] = IVEC4; + (*KeywordMap)["mat2"] = MAT2; + (*KeywordMap)["mat3"] = MAT3; + (*KeywordMap)["mat4"] = MAT4; + (*KeywordMap)["true"] = BOOLCONSTANT; + (*KeywordMap)["false"] = BOOLCONSTANT; + (*KeywordMap)["attribute"] = ATTRIBUTE; + (*KeywordMap)["varying"] = VARYING; + (*KeywordMap)["buffer"] = BUFFER; + (*KeywordMap)["coherent"] = COHERENT; + (*KeywordMap)["restrict"] = RESTRICT; + (*KeywordMap)["readonly"] = READONLY; + (*KeywordMap)["writeonly"] = WRITEONLY; + (*KeywordMap)["atomic_uint"] = ATOMIC_UINT; + (*KeywordMap)["volatile"] = VOLATILE; + (*KeywordMap)["layout"] = LAYOUT; + (*KeywordMap)["shared"] = SHARED; + (*KeywordMap)["patch"] = PATCH; + (*KeywordMap)["sample"] = SAMPLE; + (*KeywordMap)["subroutine"] = SUBROUTINE; + (*KeywordMap)["highp"] = HIGH_PRECISION; + (*KeywordMap)["mediump"] = MEDIUM_PRECISION; + (*KeywordMap)["lowp"] = LOW_PRECISION; + (*KeywordMap)["precision"] = PRECISION; + (*KeywordMap)["mat2x2"] = MAT2X2; + (*KeywordMap)["mat2x3"] = MAT2X3; + (*KeywordMap)["mat2x4"] = MAT2X4; + (*KeywordMap)["mat3x2"] = MAT3X2; + (*KeywordMap)["mat3x3"] = MAT3X3; + (*KeywordMap)["mat3x4"] = MAT3X4; + (*KeywordMap)["mat4x2"] = MAT4X2; + (*KeywordMap)["mat4x3"] = MAT4X3; + (*KeywordMap)["mat4x4"] = MAT4X4; + (*KeywordMap)["dmat2"] = DMAT2; + (*KeywordMap)["dmat3"] = DMAT3; + (*KeywordMap)["dmat4"] = DMAT4; + (*KeywordMap)["dmat2x2"] = DMAT2X2; + (*KeywordMap)["dmat2x3"] = DMAT2X3; + (*KeywordMap)["dmat2x4"] = DMAT2X4; + (*KeywordMap)["dmat3x2"] = DMAT3X2; + (*KeywordMap)["dmat3x3"] = DMAT3X3; + (*KeywordMap)["dmat3x4"] = DMAT3X4; + (*KeywordMap)["dmat4x2"] = DMAT4X2; + (*KeywordMap)["dmat4x3"] = DMAT4X3; + (*KeywordMap)["dmat4x4"] = DMAT4X4; + (*KeywordMap)["image1D"] = IMAGE1D; + (*KeywordMap)["iimage1D"] = IIMAGE1D; + (*KeywordMap)["uimage1D"] = UIMAGE1D; + (*KeywordMap)["image2D"] = IMAGE2D; + (*KeywordMap)["iimage2D"] = IIMAGE2D; + (*KeywordMap)["uimage2D"] = UIMAGE2D; + (*KeywordMap)["image3D"] = IMAGE3D; + (*KeywordMap)["iimage3D"] = IIMAGE3D; + (*KeywordMap)["uimage3D"] = UIMAGE3D; + (*KeywordMap)["image2DRect"] = IMAGE2DRECT; + (*KeywordMap)["iimage2DRect"] = IIMAGE2DRECT; + (*KeywordMap)["uimage2DRect"] = UIMAGE2DRECT; + (*KeywordMap)["imageCube"] = IMAGECUBE; + (*KeywordMap)["iimageCube"] = IIMAGECUBE; + (*KeywordMap)["uimageCube"] = UIMAGECUBE; + (*KeywordMap)["imageBuffer"] = IMAGEBUFFER; + (*KeywordMap)["iimageBuffer"] = IIMAGEBUFFER; + (*KeywordMap)["uimageBuffer"] = UIMAGEBUFFER; + (*KeywordMap)["image1DArray"] = IMAGE1DARRAY; + (*KeywordMap)["iimage1DArray"] = IIMAGE1DARRAY; + (*KeywordMap)["uimage1DArray"] = UIMAGE1DARRAY; + (*KeywordMap)["image2DArray"] = IMAGE2DARRAY; + (*KeywordMap)["iimage2DArray"] = IIMAGE2DARRAY; + (*KeywordMap)["uimage2DArray"] = UIMAGE2DARRAY; + (*KeywordMap)["imageCubeArray"] = IMAGECUBEARRAY; + (*KeywordMap)["iimageCubeArray"] = IIMAGECUBEARRAY; + (*KeywordMap)["uimageCubeArray"] = UIMAGECUBEARRAY; + (*KeywordMap)["image2DMS"] = IMAGE2DMS; + (*KeywordMap)["iimage2DMS"] = IIMAGE2DMS; + (*KeywordMap)["uimage2DMS"] = UIMAGE2DMS; + (*KeywordMap)["image2DMSArray"] = IMAGE2DMSARRAY; + (*KeywordMap)["iimage2DMSArray"] = IIMAGE2DMSARRAY; + (*KeywordMap)["uimage2DMSArray"] = UIMAGE2DMSARRAY; + (*KeywordMap)["double"] = DOUBLE; + (*KeywordMap)["dvec2"] = DVEC2; + (*KeywordMap)["dvec3"] = DVEC3; + (*KeywordMap)["dvec4"] = DVEC4; + (*KeywordMap)["uint"] = UINT; + (*KeywordMap)["uvec2"] = UVEC2; + (*KeywordMap)["uvec3"] = UVEC3; + (*KeywordMap)["uvec4"] = UVEC4; + + (*KeywordMap)["int64_t"] = INT64_T; + (*KeywordMap)["uint64_t"] = UINT64_T; + (*KeywordMap)["i64vec2"] = I64VEC2; + (*KeywordMap)["i64vec3"] = I64VEC3; + (*KeywordMap)["i64vec4"] = I64VEC4; + (*KeywordMap)["u64vec2"] = U64VEC2; + (*KeywordMap)["u64vec3"] = U64VEC3; + (*KeywordMap)["u64vec4"] = U64VEC4; + +#ifdef AMD_EXTENSIONS + (*KeywordMap)["float16_t"] = FLOAT16_T; + (*KeywordMap)["f16vec2"] = F16VEC2; + (*KeywordMap)["f16vec3"] = F16VEC3; + (*KeywordMap)["f16vec4"] = F16VEC4; + (*KeywordMap)["f16mat2"] = F16MAT2; + (*KeywordMap)["f16mat3"] = F16MAT3; + (*KeywordMap)["f16mat4"] = F16MAT4; + (*KeywordMap)["f16mat2x2"] = F16MAT2X2; + (*KeywordMap)["f16mat2x3"] = F16MAT2X3; + (*KeywordMap)["f16mat2x4"] = F16MAT2X4; + (*KeywordMap)["f16mat3x2"] = F16MAT3X2; + (*KeywordMap)["f16mat3x3"] = F16MAT3X3; + (*KeywordMap)["f16mat3x4"] = F16MAT3X4; + (*KeywordMap)["f16mat4x2"] = F16MAT4X2; + (*KeywordMap)["f16mat4x3"] = F16MAT4X3; + (*KeywordMap)["f16mat4x4"] = F16MAT4X4; +#endif + + (*KeywordMap)["sampler2D"] = SAMPLER2D; + (*KeywordMap)["samplerCube"] = SAMPLERCUBE; + (*KeywordMap)["samplerCubeArray"] = SAMPLERCUBEARRAY; + (*KeywordMap)["samplerCubeArrayShadow"] = SAMPLERCUBEARRAYSHADOW; + (*KeywordMap)["isamplerCubeArray"] = ISAMPLERCUBEARRAY; + (*KeywordMap)["usamplerCubeArray"] = USAMPLERCUBEARRAY; + (*KeywordMap)["sampler1DArrayShadow"] = SAMPLER1DARRAYSHADOW; + (*KeywordMap)["isampler1DArray"] = ISAMPLER1DARRAY; + (*KeywordMap)["usampler1D"] = USAMPLER1D; + (*KeywordMap)["isampler1D"] = ISAMPLER1D; + (*KeywordMap)["usampler1DArray"] = USAMPLER1DARRAY; + (*KeywordMap)["samplerBuffer"] = SAMPLERBUFFER; + (*KeywordMap)["samplerCubeShadow"] = SAMPLERCUBESHADOW; + (*KeywordMap)["sampler2DArray"] = SAMPLER2DARRAY; + (*KeywordMap)["sampler2DArrayShadow"] = SAMPLER2DARRAYSHADOW; + (*KeywordMap)["isampler2D"] = ISAMPLER2D; + (*KeywordMap)["isampler3D"] = ISAMPLER3D; + (*KeywordMap)["isamplerCube"] = ISAMPLERCUBE; + (*KeywordMap)["isampler2DArray"] = ISAMPLER2DARRAY; + (*KeywordMap)["usampler2D"] = USAMPLER2D; + (*KeywordMap)["usampler3D"] = USAMPLER3D; + (*KeywordMap)["usamplerCube"] = USAMPLERCUBE; + (*KeywordMap)["usampler2DArray"] = USAMPLER2DARRAY; + (*KeywordMap)["isampler2DRect"] = ISAMPLER2DRECT; + (*KeywordMap)["usampler2DRect"] = USAMPLER2DRECT; + (*KeywordMap)["isamplerBuffer"] = ISAMPLERBUFFER; + (*KeywordMap)["usamplerBuffer"] = USAMPLERBUFFER; + (*KeywordMap)["sampler2DMS"] = SAMPLER2DMS; + (*KeywordMap)["isampler2DMS"] = ISAMPLER2DMS; + (*KeywordMap)["usampler2DMS"] = USAMPLER2DMS; + (*KeywordMap)["sampler2DMSArray"] = SAMPLER2DMSARRAY; + (*KeywordMap)["isampler2DMSArray"] = ISAMPLER2DMSARRAY; + (*KeywordMap)["usampler2DMSArray"] = USAMPLER2DMSARRAY; + (*KeywordMap)["sampler1D"] = SAMPLER1D; + (*KeywordMap)["sampler1DShadow"] = SAMPLER1DSHADOW; + (*KeywordMap)["sampler3D"] = SAMPLER3D; + (*KeywordMap)["sampler2DShadow"] = SAMPLER2DSHADOW; + (*KeywordMap)["sampler2DRect"] = SAMPLER2DRECT; + (*KeywordMap)["sampler2DRectShadow"] = SAMPLER2DRECTSHADOW; + (*KeywordMap)["sampler1DArray"] = SAMPLER1DARRAY; + + (*KeywordMap)["samplerExternalOES"] = SAMPLEREXTERNALOES; // GL_OES_EGL_image_external + + (*KeywordMap)["sampler"] = SAMPLER; + (*KeywordMap)["samplerShadow"] = SAMPLERSHADOW; + + (*KeywordMap)["texture2D"] = TEXTURE2D; + (*KeywordMap)["textureCube"] = TEXTURECUBE; + (*KeywordMap)["textureCubeArray"] = TEXTURECUBEARRAY; + (*KeywordMap)["itextureCubeArray"] = ITEXTURECUBEARRAY; + (*KeywordMap)["utextureCubeArray"] = UTEXTURECUBEARRAY; + (*KeywordMap)["itexture1DArray"] = ITEXTURE1DARRAY; + (*KeywordMap)["utexture1D"] = UTEXTURE1D; + (*KeywordMap)["itexture1D"] = ITEXTURE1D; + (*KeywordMap)["utexture1DArray"] = UTEXTURE1DARRAY; + (*KeywordMap)["textureBuffer"] = TEXTUREBUFFER; + (*KeywordMap)["texture2DArray"] = TEXTURE2DARRAY; + (*KeywordMap)["itexture2D"] = ITEXTURE2D; + (*KeywordMap)["itexture3D"] = ITEXTURE3D; + (*KeywordMap)["itextureCube"] = ITEXTURECUBE; + (*KeywordMap)["itexture2DArray"] = ITEXTURE2DARRAY; + (*KeywordMap)["utexture2D"] = UTEXTURE2D; + (*KeywordMap)["utexture3D"] = UTEXTURE3D; + (*KeywordMap)["utextureCube"] = UTEXTURECUBE; + (*KeywordMap)["utexture2DArray"] = UTEXTURE2DARRAY; + (*KeywordMap)["itexture2DRect"] = ITEXTURE2DRECT; + (*KeywordMap)["utexture2DRect"] = UTEXTURE2DRECT; + (*KeywordMap)["itextureBuffer"] = ITEXTUREBUFFER; + (*KeywordMap)["utextureBuffer"] = UTEXTUREBUFFER; + (*KeywordMap)["texture2DMS"] = TEXTURE2DMS; + (*KeywordMap)["itexture2DMS"] = ITEXTURE2DMS; + (*KeywordMap)["utexture2DMS"] = UTEXTURE2DMS; + (*KeywordMap)["texture2DMSArray"] = TEXTURE2DMSARRAY; + (*KeywordMap)["itexture2DMSArray"] = ITEXTURE2DMSARRAY; + (*KeywordMap)["utexture2DMSArray"] = UTEXTURE2DMSARRAY; + (*KeywordMap)["texture1D"] = TEXTURE1D; + (*KeywordMap)["texture3D"] = TEXTURE3D; + (*KeywordMap)["texture2DRect"] = TEXTURE2DRECT; + (*KeywordMap)["texture1DArray"] = TEXTURE1DARRAY; + + (*KeywordMap)["subpassInput"] = SUBPASSINPUT; + (*KeywordMap)["subpassInputMS"] = SUBPASSINPUTMS; + (*KeywordMap)["isubpassInput"] = ISUBPASSINPUT; + (*KeywordMap)["isubpassInputMS"] = ISUBPASSINPUTMS; + (*KeywordMap)["usubpassInput"] = USUBPASSINPUT; + (*KeywordMap)["usubpassInputMS"] = USUBPASSINPUTMS; + + (*KeywordMap)["noperspective"] = NOPERSPECTIVE; + (*KeywordMap)["smooth"] = SMOOTH; + (*KeywordMap)["flat"] = FLAT; +#ifdef AMD_EXTENSIONS + (*KeywordMap)["__explicitInterpAMD"] = __EXPLICITINTERPAMD; +#endif + (*KeywordMap)["centroid"] = CENTROID; + (*KeywordMap)["precise"] = PRECISE; + (*KeywordMap)["invariant"] = INVARIANT; + (*KeywordMap)["packed"] = PACKED; + (*KeywordMap)["resource"] = RESOURCE; + (*KeywordMap)["superp"] = SUPERP; + + ReservedSet = new std::unordered_set; + + ReservedSet->insert("common"); + ReservedSet->insert("partition"); + ReservedSet->insert("active"); + ReservedSet->insert("asm"); + ReservedSet->insert("class"); + ReservedSet->insert("union"); + ReservedSet->insert("enum"); + ReservedSet->insert("typedef"); + ReservedSet->insert("template"); + ReservedSet->insert("this"); + ReservedSet->insert("goto"); + ReservedSet->insert("inline"); + ReservedSet->insert("noinline"); + ReservedSet->insert("public"); + ReservedSet->insert("static"); + ReservedSet->insert("extern"); + ReservedSet->insert("external"); + ReservedSet->insert("interface"); + ReservedSet->insert("long"); + ReservedSet->insert("short"); + ReservedSet->insert("half"); + ReservedSet->insert("fixed"); + ReservedSet->insert("unsigned"); + ReservedSet->insert("input"); + ReservedSet->insert("output"); + ReservedSet->insert("hvec2"); + ReservedSet->insert("hvec3"); + ReservedSet->insert("hvec4"); + ReservedSet->insert("fvec2"); + ReservedSet->insert("fvec3"); + ReservedSet->insert("fvec4"); + ReservedSet->insert("sampler3DRect"); + ReservedSet->insert("filter"); + ReservedSet->insert("sizeof"); + ReservedSet->insert("cast"); + ReservedSet->insert("namespace"); + ReservedSet->insert("using"); +} + +void TScanContext::deleteKeywordMap() +{ + delete KeywordMap; + KeywordMap = nullptr; + delete ReservedSet; + ReservedSet = nullptr; +} + +// Called by yylex to get the next token. +// Returning 0 implies end of input. +int TScanContext::tokenize(TPpContext* pp, TParserToken& token) +{ + do { + parserToken = &token; + TPpToken ppToken; + int token = pp->tokenize(ppToken); + if (token == EndOfInput) + return 0; + + tokenText = ppToken.name; + loc = ppToken.loc; + parserToken->sType.lex.loc = loc; + switch (token) { + case ';': afterType = false; return SEMICOLON; + case ',': afterType = false; return COMMA; + case ':': return COLON; + case '=': afterType = false; return EQUAL; + case '(': afterType = false; return LEFT_PAREN; + case ')': afterType = false; return RIGHT_PAREN; + case '.': field = true; return DOT; + case '!': return BANG; + case '-': return DASH; + case '~': return TILDE; + case '+': return PLUS; + case '*': return STAR; + case '/': return SLASH; + case '%': return PERCENT; + case '<': return LEFT_ANGLE; + case '>': return RIGHT_ANGLE; + case '|': return VERTICAL_BAR; + case '^': return CARET; + case '&': return AMPERSAND; + case '?': return QUESTION; + case '[': return LEFT_BRACKET; + case ']': return RIGHT_BRACKET; + case '{': return LEFT_BRACE; + case '}': return RIGHT_BRACE; + case '\\': + parseContext.error(loc, "illegal use of escape character", "\\", ""); + break; + + case PPAtomAddAssign: return ADD_ASSIGN; + case PPAtomSubAssign: return SUB_ASSIGN; + case PPAtomMulAssign: return MUL_ASSIGN; + case PPAtomDivAssign: return DIV_ASSIGN; + case PPAtomModAssign: return MOD_ASSIGN; + + case PpAtomRight: return RIGHT_OP; + case PpAtomLeft: return LEFT_OP; + + case PpAtomRightAssign: return RIGHT_ASSIGN; + case PpAtomLeftAssign: return LEFT_ASSIGN; + case PpAtomAndAssign: return AND_ASSIGN; + case PpAtomOrAssign: return OR_ASSIGN; + case PpAtomXorAssign: return XOR_ASSIGN; + + case PpAtomAnd: return AND_OP; + case PpAtomOr: return OR_OP; + case PpAtomXor: return XOR_OP; + + case PpAtomEQ: return EQ_OP; + case PpAtomGE: return GE_OP; + case PpAtomNE: return NE_OP; + case PpAtomLE: return LE_OP; + + case PpAtomDecrement: return DEC_OP; + case PpAtomIncrement: return INC_OP; + + case PpAtomColonColon: + parseContext.error(loc, "not supported", "::", ""); + break; + + case PpAtomConstInt: parserToken->sType.lex.i = ppToken.ival; return INTCONSTANT; + 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; + case PpAtomConstFloat: parserToken->sType.lex.d = ppToken.dval; return FLOATCONSTANT; + case PpAtomConstDouble: parserToken->sType.lex.d = ppToken.dval; return DOUBLECONSTANT; +#ifdef AMD_EXTENSIONS + case PpAtomConstFloat16: parserToken->sType.lex.d = ppToken.dval; return FLOAT16CONSTANT; +#endif + case PpAtomIdentifier: + { + int token = tokenizeIdentifier(); + field = false; + return token; + } + + case EndOfInput: return 0; + + default: + char buf[2]; + buf[0] = (char)token; + buf[1] = 0; + parseContext.error(loc, "unexpected token", buf, ""); + break; + } + } while (true); +} + +int TScanContext::tokenizeIdentifier() +{ + if (ReservedSet->find(tokenText) != ReservedSet->end()) + return reservedWord(); + + auto it = KeywordMap->find(tokenText); + if (it == KeywordMap->end()) { + // Should have an identifier of some sort + return identifierOrType(); + } + keyword = it->second; + + switch (keyword) { + case CONST: + case UNIFORM: + case IN: + case OUT: + case INOUT: + case STRUCT: + case BREAK: + case CONTINUE: + case DO: + case FOR: + case WHILE: + case IF: + case ELSE: + case DISCARD: + case RETURN: + case CASE: + return keyword; + + case SWITCH: + case DEFAULT: + if ((parseContext.profile == EEsProfile && parseContext.version < 300) || + (parseContext.profile != EEsProfile && parseContext.version < 130)) + reservedWord(); + return keyword; + + case VOID: + case BOOL: + case FLOAT: + case INT: + case BVEC2: + case BVEC3: + case BVEC4: + case VEC2: + case VEC3: + case VEC4: + case IVEC2: + case IVEC3: + case IVEC4: + case MAT2: + case MAT3: + case MAT4: + case SAMPLER2D: + case SAMPLERCUBE: + afterType = true; + return keyword; + + case BOOLCONSTANT: + if (strcmp("true", tokenText) == 0) + parserToken->sType.lex.b = true; + else + parserToken->sType.lex.b = false; + return keyword; + + case ATTRIBUTE: + case VARYING: + if (parseContext.profile == EEsProfile && parseContext.version >= 300) + reservedWord(); + return keyword; + + case BUFFER: + if ((parseContext.profile == EEsProfile && parseContext.version < 310) || + (parseContext.profile != EEsProfile && parseContext.version < 430)) + return identifierOrType(); + return keyword; + + case ATOMIC_UINT: + if ((parseContext.profile == EEsProfile && parseContext.version >= 310) || + parseContext.extensionTurnedOn(E_GL_ARB_shader_atomic_counters)) + return keyword; + return es30ReservedFromGLSL(420); + + case COHERENT: + case RESTRICT: + case READONLY: + case WRITEONLY: + if (parseContext.profile == EEsProfile && parseContext.version >= 310) + return keyword; + return es30ReservedFromGLSL(parseContext.extensionTurnedOn(E_GL_ARB_shader_image_load_store) ? 130 : 420); + + case VOLATILE: + if (parseContext.profile == EEsProfile && parseContext.version >= 310) + return keyword; + if (! parseContext.symbolTable.atBuiltInLevel() && (parseContext.profile == EEsProfile || (parseContext.version < 420 && ! parseContext.extensionTurnedOn(E_GL_ARB_shader_image_load_store)))) + reservedWord(); + return keyword; + + case LAYOUT: + { + const int numLayoutExts = 2; + const char* layoutExts[numLayoutExts] = { E_GL_ARB_shading_language_420pack, + E_GL_ARB_explicit_attrib_location }; + if ((parseContext.profile == EEsProfile && parseContext.version < 300) || + (parseContext.profile != EEsProfile && parseContext.version < 140 && + ! parseContext.extensionsTurnedOn(numLayoutExts, layoutExts))) + return identifierOrType(); + return keyword; + } + case SHARED: + if ((parseContext.profile == EEsProfile && parseContext.version < 300) || + (parseContext.profile != EEsProfile && parseContext.version < 140)) + return identifierOrType(); + return keyword; + + case PATCH: + if (parseContext.symbolTable.atBuiltInLevel() || + (parseContext.profile == EEsProfile && 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)) + return keyword; + return es30ReservedFromGLSL(400); + + case SUBROUTINE: + return es30ReservedFromGLSL(400); + + case HIGH_PRECISION: + case MEDIUM_PRECISION: + case LOW_PRECISION: + case PRECISION: + return precisionKeyword(); + + case MAT2X2: + case MAT2X3: + case MAT2X4: + case MAT3X2: + case MAT3X3: + case MAT3X4: + case MAT4X2: + case MAT4X3: + case MAT4X4: + return matNxM(); + + case DMAT2: + case DMAT3: + case DMAT4: + case DMAT2X2: + case DMAT2X3: + case DMAT2X4: + case DMAT3X2: + case DMAT3X3: + case DMAT3X4: + case DMAT4X2: + case DMAT4X3: + case DMAT4X4: + return dMat(); + + case IMAGE1D: + case IIMAGE1D: + case UIMAGE1D: + case IMAGE1DARRAY: + case IIMAGE1DARRAY: + case UIMAGE1DARRAY: + case IMAGE2DRECT: + case IIMAGE2DRECT: + case UIMAGE2DRECT: + afterType = true; + return firstGenerationImage(false); + + case IMAGEBUFFER: + case IIMAGEBUFFER: + case UIMAGEBUFFER: + afterType = true; + if (parseContext.extensionsTurnedOn(Num_AEP_texture_buffer, AEP_texture_buffer)) + return keyword; + return firstGenerationImage(false); + + case IMAGE2D: + case IIMAGE2D: + case UIMAGE2D: + case IMAGE3D: + case IIMAGE3D: + case UIMAGE3D: + case IMAGECUBE: + case IIMAGECUBE: + case UIMAGECUBE: + case IMAGE2DARRAY: + case IIMAGE2DARRAY: + case UIMAGE2DARRAY: + afterType = true; + return firstGenerationImage(true); + + case IMAGECUBEARRAY: + case IIMAGECUBEARRAY: + case UIMAGECUBEARRAY: + afterType = true; + if (parseContext.extensionsTurnedOn(Num_AEP_texture_cube_map_array, AEP_texture_cube_map_array)) + return keyword; + return secondGenerationImage(); + + case IMAGE2DMS: + case IIMAGE2DMS: + case UIMAGE2DMS: + case IMAGE2DMSARRAY: + case IIMAGE2DMSARRAY: + case UIMAGE2DMSARRAY: + afterType = true; + return secondGenerationImage(); + + case DOUBLE: + case DVEC2: + case DVEC3: + case DVEC4: + afterType = true; + if (parseContext.profile == EEsProfile || parseContext.version < 400) + reservedWord(); + return keyword; + + case INT64_T: + case UINT64_T: + case I64VEC2: + case I64VEC3: + case I64VEC4: + case U64VEC2: + case U64VEC3: + case U64VEC4: + afterType = true; + if (parseContext.symbolTable.atBuiltInLevel() || + (parseContext.extensionTurnedOn(E_GL_ARB_gpu_shader_int64) && + parseContext.profile != EEsProfile && parseContext.version >= 450)) + return keyword; + return identifierOrType(); + +#ifdef AMD_EXTENSIONS + case FLOAT16_T: + case F16VEC2: + case F16VEC3: + case F16VEC4: + case F16MAT2: + case F16MAT3: + case F16MAT4: + case F16MAT2X2: + case F16MAT2X3: + case F16MAT2X4: + case F16MAT3X2: + case F16MAT3X3: + case F16MAT3X4: + case F16MAT4X2: + case F16MAT4X3: + case F16MAT4X4: + afterType = true; + if (parseContext.symbolTable.atBuiltInLevel() || + (parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float) && + parseContext.profile != EEsProfile && parseContext.version >= 450)) + return keyword; + return identifierOrType(); +#endif + + case SAMPLERCUBEARRAY: + case SAMPLERCUBEARRAYSHADOW: + case ISAMPLERCUBEARRAY: + case USAMPLERCUBEARRAY: + afterType = true; + if (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(); + return keyword; + + case ISAMPLER1D: + case ISAMPLER1DARRAY: + case SAMPLER1DARRAYSHADOW: + case USAMPLER1D: + case USAMPLER1DARRAY: + afterType = true; + return es30ReservedFromGLSL(130); + + case UINT: + case UVEC2: + case UVEC3: + case UVEC4: + case SAMPLERCUBESHADOW: + case SAMPLER2DARRAY: + case SAMPLER2DARRAYSHADOW: + case ISAMPLER2D: + case ISAMPLER3D: + case ISAMPLERCUBE: + case ISAMPLER2DARRAY: + case USAMPLER2D: + case USAMPLER3D: + case USAMPLERCUBE: + case USAMPLER2DARRAY: + afterType = true; + return nonreservedKeyword(300, 130); + + case ISAMPLER2DRECT: + case USAMPLER2DRECT: + afterType = true; + return es30ReservedFromGLSL(140); + + case SAMPLERBUFFER: + afterType = true; + if (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)) + return keyword; + return es30ReservedFromGLSL(140); + + case SAMPLER2DMS: + case ISAMPLER2DMS: + case USAMPLER2DMS: + afterType = true; + if (parseContext.profile == EEsProfile && parseContext.version >= 310) + return keyword; + return es30ReservedFromGLSL(150); + + case SAMPLER2DMSARRAY: + case ISAMPLER2DMSARRAY: + case USAMPLER2DMSARRAY: + afterType = true; + if (parseContext.extensionsTurnedOn(1, &E_GL_OES_texture_storage_multisample_2d_array)) + return keyword; + return es30ReservedFromGLSL(150); + + case SAMPLER1D: + case SAMPLER1DSHADOW: + afterType = true; + if (parseContext.profile == EEsProfile) + reservedWord(); + return keyword; + + case SAMPLER3D: + afterType = true; + if (parseContext.profile == EEsProfile && parseContext.version < 300) { + if (! parseContext.extensionTurnedOn(E_GL_OES_texture_3D)) + reservedWord(); + } + return keyword; + + case SAMPLER2DSHADOW: + afterType = true; + if (parseContext.profile == EEsProfile && parseContext.version < 300) + reservedWord(); + return keyword; + + case SAMPLER2DRECT: + case SAMPLER2DRECTSHADOW: + afterType = true; + if (parseContext.profile == EEsProfile) + reservedWord(); + else if (parseContext.version < 140 && ! parseContext.symbolTable.atBuiltInLevel() && ! parseContext.extensionTurnedOn(E_GL_ARB_texture_rectangle)) { + if (parseContext.relaxedErrors()) + parseContext.requireExtensions(loc, 1, &E_GL_ARB_texture_rectangle, "texture-rectangle sampler keyword"); + else + reservedWord(); + } + return keyword; + + case SAMPLER1DARRAY: + afterType = true; + if (parseContext.profile == EEsProfile && parseContext.version == 300) + reservedWord(); + else if ((parseContext.profile == EEsProfile && parseContext.version < 300) || + (parseContext.profile != EEsProfile && parseContext.version < 130)) + return identifierOrType(); + return keyword; + + case SAMPLEREXTERNALOES: + afterType = true; + if (parseContext.symbolTable.atBuiltInLevel() || parseContext.extensionTurnedOn(E_GL_OES_EGL_image_external)) + return keyword; + return identifierOrType(); + + case TEXTURE2D: + case TEXTURECUBE: + case TEXTURECUBEARRAY: + case ITEXTURECUBEARRAY: + case UTEXTURECUBEARRAY: + case ITEXTURE1DARRAY: + case UTEXTURE1D: + case ITEXTURE1D: + case UTEXTURE1DARRAY: + case TEXTUREBUFFER: + case TEXTURE2DARRAY: + case ITEXTURE2D: + case ITEXTURE3D: + case ITEXTURECUBE: + case ITEXTURE2DARRAY: + case UTEXTURE2D: + case UTEXTURE3D: + case UTEXTURECUBE: + case UTEXTURE2DARRAY: + case ITEXTURE2DRECT: + case UTEXTURE2DRECT: + case ITEXTUREBUFFER: + case UTEXTUREBUFFER: + case TEXTURE2DMS: + case ITEXTURE2DMS: + case UTEXTURE2DMS: + case TEXTURE2DMSARRAY: + case ITEXTURE2DMSARRAY: + case UTEXTURE2DMSARRAY: + case TEXTURE1D: + case TEXTURE3D: + case TEXTURE2DRECT: + case TEXTURE1DARRAY: + case SAMPLER: + case SAMPLERSHADOW: + if (parseContext.spvVersion.vulkan >= 100) + return keyword; + else + return identifierOrType(); + + case SUBPASSINPUT: + case SUBPASSINPUTMS: + case ISUBPASSINPUT: + case ISUBPASSINPUTMS: + case USUBPASSINPUT: + case USUBPASSINPUTMS: + if (parseContext.spvVersion.vulkan >= 100) + return keyword; + else + return identifierOrType(); + + case NOPERSPECTIVE: + return es30ReservedFromGLSL(130); + + case SMOOTH: + if ((parseContext.profile == EEsProfile && parseContext.version < 300) || + (parseContext.profile != EEsProfile && parseContext.version < 130)) + return identifierOrType(); + return keyword; + +#ifdef AMD_EXTENSIONS + case __EXPLICITINTERPAMD: + if (parseContext.profile != EEsProfile && parseContext.version >= 450 && + parseContext.extensionTurnedOn(E_GL_AMD_shader_explicit_vertex_parameter)) + return keyword; + return identifierOrType(); +#endif + + case FLAT: + if (parseContext.profile == EEsProfile && parseContext.version < 300) + reservedWord(); + else if (parseContext.profile != EEsProfile && parseContext.version < 130) + return identifierOrType(); + return keyword; + + case CENTROID: + if (parseContext.version < 120) + return identifierOrType(); + return keyword; + + case PRECISE: + if ((parseContext.profile == EEsProfile && parseContext.extensionsTurnedOn(Num_AEP_gpu_shader5, AEP_gpu_shader5)) || + (parseContext.profile != EEsProfile && parseContext.version >= 400)) + return keyword; + if (parseContext.profile == EEsProfile && parseContext.version == 310) { + reservedWord(); + return keyword; + } + return identifierOrType(); + + case INVARIANT: + if (parseContext.profile != EEsProfile && parseContext.version < 120) + return identifierOrType(); + return keyword; + + case PACKED: + if ((parseContext.profile == EEsProfile && parseContext.version < 300) || + (parseContext.profile != EEsProfile && parseContext.version < 330)) + return reservedWord(); + return identifierOrType(); + + case RESOURCE: + { + bool reserved = (parseContext.profile == EEsProfile && parseContext.version >= 300) || + (parseContext.profile != EEsProfile && parseContext.version >= 420); + return identifierOrReserved(reserved); + } + case SUPERP: + { + bool reserved = parseContext.profile == EEsProfile || parseContext.version >= 130; + return identifierOrReserved(reserved); + } + + default: + parseContext.infoSink.info.message(EPrefixInternalError, "Unknown glslang keyword", loc); + return 0; + } +} + +int TScanContext::identifierOrType() +{ + parserToken->sType.lex.string = NewPoolTString(tokenText); + if (field) + return IDENTIFIER; + + parserToken->sType.lex.symbol = parseContext.symbolTable.find(*parserToken->sType.lex.string); + if (afterType == false && parserToken->sType.lex.symbol) { + if (const TVariable* variable = parserToken->sType.lex.symbol->getAsVariable()) { + if (variable->isUserType()) { + afterType = true; + + return TYPE_NAME; + } + } + } + + return IDENTIFIER; +} + +// Give an error for use of a reserved symbol. +// However, allow built-in declarations to use reserved words, to allow +// extension support before the extension is enabled. +int TScanContext::reservedWord() +{ + if (! parseContext.symbolTable.atBuiltInLevel()) + parseContext.error(loc, "Reserved word.", tokenText, "", ""); + + return 0; +} + +int TScanContext::identifierOrReserved(bool reserved) +{ + if (reserved) { + reservedWord(); + + return 0; + } + + if (parseContext.forwardCompatible) + parseContext.warn(loc, "using future reserved keyword", tokenText, ""); + + return identifierOrType(); +} + +// For keywords that suddenly showed up on non-ES (not previously reserved) +// but then got reserved by ES 3.0. +int TScanContext::es30ReservedFromGLSL(int version) +{ + if (parseContext.symbolTable.atBuiltInLevel()) + return keyword; + + if ((parseContext.profile == EEsProfile && parseContext.version < 300) || + (parseContext.profile != EEsProfile && parseContext.version < version)) { + if (parseContext.forwardCompatible) + parseContext.warn(loc, "future reserved word in ES 300 and keyword in GLSL", tokenText, ""); + + return identifierOrType(); + } else if (parseContext.profile == EEsProfile && parseContext.version >= 300) + reservedWord(); + + return keyword; +} + +// For a keyword that was never reserved, until it suddenly +// showed up, both in an es version and a non-ES version. +int TScanContext::nonreservedKeyword(int esVersion, int nonEsVersion) +{ + if ((parseContext.profile == EEsProfile && parseContext.version < esVersion) || + (parseContext.profile != EEsProfile && parseContext.version < nonEsVersion)) { + if (parseContext.forwardCompatible) + parseContext.warn(loc, "using future keyword", tokenText, ""); + + return identifierOrType(); + } + + return keyword; +} + +int TScanContext::precisionKeyword() +{ + if (parseContext.profile == EEsProfile || parseContext.version >= 130) + return keyword; + + if (parseContext.forwardCompatible) + parseContext.warn(loc, "using ES precision qualifier keyword", tokenText, ""); + + return identifierOrType(); +} + +int TScanContext::matNxM() +{ + afterType = true; + + if (parseContext.version > 110) + return keyword; + + if (parseContext.forwardCompatible) + parseContext.warn(loc, "using future non-square matrix type keyword", tokenText, ""); + + return identifierOrType(); +} + +int TScanContext::dMat() +{ + afterType = true; + + if (parseContext.profile == EEsProfile && parseContext.version >= 300) { + reservedWord(); + + return keyword; + } + + if (parseContext.profile != EEsProfile && parseContext.version >= 400) + return keyword; + + if (parseContext.forwardCompatible) + parseContext.warn(loc, "using future type keyword", tokenText, ""); + + return identifierOrType(); +} + +int TScanContext::firstGenerationImage(bool inEs310) +{ + if (parseContext.symbolTable.atBuiltInLevel() || + (parseContext.profile != EEsProfile && (parseContext.version >= 420 || parseContext.extensionTurnedOn(E_GL_ARB_shader_image_load_store))) || + (inEs310 && parseContext.profile == EEsProfile && parseContext.version >= 310)) + return keyword; + + if ((parseContext.profile == EEsProfile && parseContext.version >= 300) || + (parseContext.profile != EEsProfile && parseContext.version >= 130)) { + reservedWord(); + + return keyword; + } + + if (parseContext.forwardCompatible) + parseContext.warn(loc, "using future type keyword", tokenText, ""); + + return identifierOrType(); +} + +int TScanContext::secondGenerationImage() +{ + if (parseContext.profile == EEsProfile && parseContext.version >= 310) { + reservedWord(); + return keyword; + } + + if (parseContext.symbolTable.atBuiltInLevel() || + (parseContext.profile != EEsProfile && + (parseContext.version >= 420 || parseContext.extensionTurnedOn(E_GL_ARB_shader_image_load_store)))) + return keyword; + + if (parseContext.forwardCompatible) + parseContext.warn(loc, "using future type keyword", tokenText, ""); + + return identifierOrType(); +} + +} // end namespace glslang diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Scan.h b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Scan.h new file mode 100644 index 0000000..9b8f2d4 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Scan.h @@ -0,0 +1,275 @@ +// +// 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. +// +#ifndef _GLSLANG_SCAN_INCLUDED_ +#define _GLSLANG_SCAN_INCLUDED_ + +#include "Versions.h" + +namespace glslang { + +// Use a global end-of-input character, so no translation is needed across +// layers of encapsulation. Characters are all 8 bit, and positive, so there is +// no aliasing of character 255 onto -1, for example. +const int EndOfInput = -1; + +// +// A character scanner that seamlessly, on read-only strings, reads across an +// array of strings without assuming null termination. +// +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) : + numSources(n), + sources(reinterpret_cast(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) + { + loc = new TSourceLoc[numSources]; + for (int i = 0; i < numSources; ++i) { + loc[i].init(); + } + 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.name = loc[0].name; + } + + virtual ~TInputScanner() + { + delete [] loc; + } + + // retrieve the next character and advance one character + int get() + { + int ret = peek(); + if (ret == EndOfInput) + return ret; + ++loc[currentSource].column; + ++logicalSourceLoc.column; + if (ret == '\n') { + ++loc[currentSource].line; + ++logicalSourceLoc.line; + logicalSourceLoc.column = 0; + loc[currentSource].column = 0; + } + advance(); + + return ret; + } + + // retrieve the next character, no advance + int peek() + { + if (currentSource >= numSources) { + endOfFileReached = true; + return EndOfInput; + } + // Make sure we do not read off the end of a string. + // N.B. Sources can have a length of 0. + int sourceToRead = currentSource; + size_t charToRead = currentChar; + while(charToRead >= lengths[sourceToRead]) { + charToRead = 0; + sourceToRead += 1; + if (sourceToRead >= numSources) { + return EndOfInput; + } + } + + // Here, we care about making negative valued characters positive + return sources[sourceToRead][charToRead]; + } + + // go back one character + void unget() + { + // Do not roll back once we've reached the end of the file. + if (endOfFileReached) + return; + + if (currentChar > 0) { + --currentChar; + --loc[currentSource].column; + --logicalSourceLoc.column; + if (loc[currentSource].column < 0) { + // We've moved back past a new line. Find the + // previous newline (or start of the file) to compute + // the column count on the now current line. + size_t chIndex = currentChar; + while (chIndex > 0) { + if (sources[currentSource][chIndex] == '\n') { + break; + } + --chIndex; + } + logicalSourceLoc.column = (int)(currentChar - chIndex); + loc[currentSource].column = (int)(currentChar - chIndex); + } + } else { + do { + --currentSource; + } while (currentSource > 0 && lengths[currentSource] == 0); + if (lengths[currentSource] == 0) { + // set to 0 if we've backed up to the start of an empty string + currentChar = 0; + } else + currentChar = lengths[currentSource] - 1; + } + if (peek() == '\n') { + --loc[currentSource].line; + --logicalSourceLoc.line; + } + } + + // for #line override + void setLine(int newLine) + { + logicalSourceLoc.line = newLine; + loc[getLastValidSourceIndex()].line = newLine; + } + + // for #line override in filename based parsing + void setFile(const char* filename) + { + logicalSourceLoc.name = filename; + loc[getLastValidSourceIndex()].name = filename; + } + + void setFile(const char* filename, int i) + { + if (i == getLastValidSourceIndex()) { + logicalSourceLoc.name = filename; + } + loc[i].name = filename; + } + + void setString(int newString) + { + logicalSourceLoc.string = newString; + loc[getLastValidSourceIndex()].string = newString; + logicalSourceLoc.name = nullptr; + loc[getLastValidSourceIndex()].name = nullptr; + } + + // for #include content indentation + void setColumn(int col) + { + logicalSourceLoc.column = col; + loc[getLastValidSourceIndex()].column = col; + } + + void setEndOfInput() + { + endOfFileReached = true; + currentSource = numSources; + } + + bool atEndOfInput() const { return endOfFileReached; } + + const TSourceLoc& getSourceLoc() const + { + if (singleLogical) { + return logicalSourceLoc; + } else { + return loc[std::max(0, std::min(currentSource, numSources - finale - 1))]; + } + } + // Returns the index (starting from 0) of the most recent valid source string we are reading from. + int getLastValidSourceIndex() const { return std::min(currentSource, numSources - 1); } + + void consumeWhiteSpace(bool& foundNonSpaceTab); + bool consumeComment(); + void consumeWhitespaceComment(bool& foundNonSpaceTab); + bool scanVersion(int& version, EProfile& profile, bool& notFirstToken); + +protected: + + // advance one character + void advance() + { + ++currentChar; + if (currentChar >= lengths[currentSource]) { + ++currentSource; + if (currentSource < numSources) { + loc[currentSource].string = loc[currentSource - 1].string + 1; + loc[currentSource].line = 1; + loc[currentSource].column = 0; + } + while (currentSource < numSources && lengths[currentSource] == 0) { + ++currentSource; + if (currentSource < numSources) { + loc[currentSource].string = loc[currentSource - 1].string + 1; + loc[currentSource].line = 1; + loc[currentSource].column = 0; + } + } + currentChar = 0; + } + } + + int numSources; // number of strings in source + const unsigned char* const *sources; // array of strings; must be converted to positive values on use, to avoid aliasing with -1 as EndOfInput + const size_t *lengths; // length of each string + int currentSource; + size_t currentChar; + + // This is for reporting what string/line an error occurred on, and can be overridden by #line. + // It remembers the last state of each source string as it is left for the next one, so unget() + // can restore that state. + TSourceLoc* loc; // an array + + int stringBias; // the first string that is the user's string number 0 + int finale; // number of internal strings after user's last string + + TSourceLoc logicalSourceLoc; + bool singleLogical; // treats the strings as a single logical string. + // locations will be reported from the first string. + + // Set to true once peek() returns EndOfFile, so that we won't roll back + // once we've reached EndOfFile. + bool endOfFileReached; +}; + +} // end namespace glslang + +#endif // _GLSLANG_SCAN_INCLUDED_ diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ScanContext.h b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ScanContext.h new file mode 100644 index 0000000..1d86348 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ScanContext.h @@ -0,0 +1,86 @@ +// +// 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. +// + +// +// This holds context specific to the GLSL scanner, which +// sits between the preprocessor scanner and parser. +// + +#include "ParseHelper.h" + +namespace glslang { + +class TPpContext; +class TPpToken; +class TParserToken; + +class TScanContext { +public: + explicit TScanContext(TParseContextBase& pc) : parseContext(pc), afterType(false), field(false) { } + virtual ~TScanContext() { } + + static void fillInKeywordMap(); + static void deleteKeywordMap(); + + int tokenize(TPpContext*, TParserToken&); + +protected: + TScanContext(TScanContext&); + TScanContext& operator=(TScanContext&); + + int tokenizeIdentifier(); + int identifierOrType(); + int reservedWord(); + int identifierOrReserved(bool reserved); + int es30ReservedFromGLSL(int version); + int nonreservedKeyword(int esVersion, int nonEsVersion); + int precisionKeyword(); + int matNxM(); + int dMat(); + int firstGenerationImage(bool inEs310); + int secondGenerationImage(); + + TParseContextBase& parseContext; + bool afterType; // true if we've recognized a type, so can only be looking for an identifier + bool field; // true if we're on a field, right after a '.' + TSourceLoc loc; + TParserToken* parserToken; + TPpToken* ppToken; + + const char* tokenText; + int keyword; +}; + +} // end namespace glslang diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ShaderLang.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ShaderLang.cpp new file mode 100644 index 0000000..5a8f679 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ShaderLang.cpp @@ -0,0 +1,1812 @@ +// +// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +// Copyright (C) 2013-2016 LunarG, Inc. +// Copyright (C) 2015-2016 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. +// + +// +// Implement the top-level of interface to the compiler/linker, +// as defined in ShaderLang.h +// This is the platform independent interface between an OGL driver +// and the shading language compiler/linker. +// +#include +#include +#include +#include +#include "SymbolTable.h" +#include "ParseHelper.h" +#include "Scan.h" +#include "ScanContext.h" + +#ifdef ENABLE_HLSL +#include "../../hlsl/hlslParseHelper.h" +#include "../../hlsl/hlslParseables.h" +#include "../../hlsl/hlslScanContext.h" +#endif + +#include "../Include/ShHandle.h" +#include "../../OGLCompilersDLL/InitializeDll.h" + +#include "preprocessor/PpContext.h" + +#define SH_EXPORTING +#include "../Public/ShaderLang.h" +#include "reflection.h" +#include "iomapper.h" +#include "Initialize.h" + +namespace { // anonymous namespace for file-local functions and symbols + +using namespace glslang; + +// Create a language specific version of parseables. +TBuiltInParseables* CreateBuiltInParseables(TInfoSink& infoSink, EShSource source) +{ + switch (source) { + case EShSourceGlsl: return new TBuiltIns(); // GLSL builtIns +#ifdef ENABLE_HLSL + case EShSourceHlsl: return new TBuiltInParseablesHlsl(); // HLSL intrinsics +#endif + + default: + infoSink.info.message(EPrefixInternalError, "Unable to determine source language"); + return nullptr; + } +} + +// Create a language specific version of a parse context. +TParseContextBase* CreateParseContext(TSymbolTable& symbolTable, TIntermediate& intermediate, + int version, EProfile profile, EShSource source, + EShLanguage language, TInfoSink& infoSink, + SpvVersion spvVersion, bool forwardCompatible, EShMessages messages, + bool parsingBuiltIns, const std::string sourceEntryPointName = "") +{ +#ifndef ENABLE_HLSL + (void)sourceEntryPointName; // Unused argument. +#endif + + switch (source) { + case EShSourceGlsl: + intermediate.setEntryPointName("main"); + return new TParseContext(symbolTable, intermediate, parsingBuiltIns, version, profile, spvVersion, + language, infoSink, forwardCompatible, messages); + +#ifdef ENABLE_HLSL + case EShSourceHlsl: + return new HlslParseContext(symbolTable, intermediate, parsingBuiltIns, version, profile, spvVersion, + language, infoSink, sourceEntryPointName.c_str(), forwardCompatible, messages); +#endif + default: + infoSink.info.message(EPrefixInternalError, "Unable to determine source language"); + return nullptr; + } +} + +// Local mapping functions for making arrays of symbol tables.... + +const int VersionCount = 15; // index range in MapVersionToIndex + +int MapVersionToIndex(int version) +{ + int index = 0; + + switch (version) { + case 100: index = 0; break; + case 110: index = 1; break; + case 120: index = 2; break; + case 130: index = 3; break; + case 140: index = 4; break; + case 150: index = 5; break; + case 300: index = 6; break; + case 330: index = 7; break; + case 400: index = 8; break; + case 410: index = 9; break; + case 420: index = 10; break; + case 430: index = 11; break; + case 440: index = 12; break; + case 310: index = 13; break; + case 450: index = 14; break; + default: break; + } + + assert(index < VersionCount); + + return index; +} + +const int SpvVersionCount = 3; // index range in MapSpvVersionToIndex + +int MapSpvVersionToIndex(const SpvVersion& spvVersion) +{ + int index = 0; + + if (spvVersion.openGl > 0) + index = 1; + else if (spvVersion.vulkan > 0) + index = 2; + + assert(index < SpvVersionCount); + + return index; +} + +const int ProfileCount = 4; // index range in MapProfileToIndex + +int MapProfileToIndex(EProfile profile) +{ + int index = 0; + + switch (profile) { + case ENoProfile: index = 0; break; + case ECoreProfile: index = 1; break; + case ECompatibilityProfile: index = 2; break; + case EEsProfile: index = 3; break; + default: break; + } + + assert(index < ProfileCount); + + return index; +} + +const int SourceCount = 2; + +int MapSourceToIndex(EShSource source) +{ + int index = 0; + + switch (source) { + case EShSourceGlsl: index = 0; break; + case EShSourceHlsl: index = 1; break; + default: break; + } + + assert(index < SourceCount); + + return index; +} + +// only one of these needed for non-ES; ES needs 2 for different precision defaults of built-ins +enum EPrecisionClass { + EPcGeneral, + EPcFragment, + EPcCount +}; + +// A process-global symbol table per version per profile for built-ins common +// to multiple stages (languages), and a process-global symbol table per version +// per profile per stage for built-ins unique to each stage. They will be sparsely +// populated, so they will only be generated as needed. +// +// Each has a different set of built-ins, and we want to preserve that from +// compile to compile. +// +TSymbolTable* CommonSymbolTable[VersionCount][SpvVersionCount][ProfileCount][SourceCount][EPcCount] = {}; +TSymbolTable* SharedSymbolTables[VersionCount][SpvVersionCount][ProfileCount][SourceCount][EShLangCount] = {}; + +TPoolAllocator* PerProcessGPA = 0; + +// +// Parse and add to the given symbol table the content of the given shader string. +// +bool InitializeSymbolTable(const TString& builtIns, int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, + EShSource source, TInfoSink& infoSink, TSymbolTable& symbolTable) +{ + TIntermediate intermediate(language, version, profile); + + intermediate.setSource(source); + + std::unique_ptr parseContext(CreateParseContext(symbolTable, intermediate, version, profile, source, + language, infoSink, spvVersion, true, EShMsgDefault, + true)); + + TShader::ForbidIncluder includer; + TPpContext ppContext(*parseContext, "", includer); + TScanContext scanContext(*parseContext); + parseContext->setScanContext(&scanContext); + parseContext->setPpContext(&ppContext); + + // + // Push the symbol table to give it an initial scope. This + // push should not have a corresponding pop, so that built-ins + // are preserved, and the test for an empty table fails. + // + + symbolTable.push(); + + const char* builtInShaders[2]; + size_t builtInLengths[2]; + builtInShaders[0] = builtIns.c_str(); + builtInLengths[0] = builtIns.size(); + + if (builtInLengths[0] == 0) + return true; + + TInputScanner input(1, builtInShaders, builtInLengths); + if (! parseContext->parseShaderStrings(ppContext, input) != 0) { + infoSink.info.message(EPrefixInternalError, "Unable to parse built-ins"); + printf("Unable to parse built-ins\n%s\n", infoSink.info.c_str()); + printf("%s\n", builtInShaders[0]); + + return false; + } + + return true; +} + +int CommonIndex(EProfile profile, EShLanguage language) +{ + return (profile == EEsProfile && language == EShLangFragment) ? EPcFragment : EPcGeneral; +} + +// +// To initialize per-stage shared tables, with the common table already complete. +// +void InitializeStageSymbolTable(TBuiltInParseables& builtInParseables, int version, EProfile profile, const SpvVersion& spvVersion, + EShLanguage language, EShSource source, TInfoSink& infoSink, TSymbolTable** commonTable, + TSymbolTable** symbolTables) +{ + (*symbolTables[language]).adoptLevels(*commonTable[CommonIndex(profile, language)]); + InitializeSymbolTable(builtInParseables.getStageString(language), version, profile, spvVersion, language, source, + infoSink, *symbolTables[language]); + builtInParseables.identifyBuiltIns(version, profile, spvVersion, language, *symbolTables[language]); + if (profile == EEsProfile && version >= 300) + (*symbolTables[language]).setNoBuiltInRedeclarations(); + if (version == 110) + (*symbolTables[language]).setSeparateNameSpaces(); +} + +// +// Initialize the full set of shareable symbol tables; +// The common (cross-stage) and those shareable per-stage. +// +bool InitializeSymbolTables(TInfoSink& infoSink, TSymbolTable** commonTable, TSymbolTable** symbolTables, int version, EProfile profile, const SpvVersion& spvVersion, EShSource source) +{ + std::unique_ptr builtInParseables(CreateBuiltInParseables(infoSink, source)); + + if (builtInParseables == nullptr) + return false; + + builtInParseables->initialize(version, profile, spvVersion); + + // do the common tables + InitializeSymbolTable(builtInParseables->getCommonString(), version, profile, spvVersion, EShLangVertex, source, + infoSink, *commonTable[EPcGeneral]); + if (profile == EEsProfile) + InitializeSymbolTable(builtInParseables->getCommonString(), version, profile, spvVersion, EShLangFragment, source, + infoSink, *commonTable[EPcFragment]); + + // do the per-stage tables + + // always have vertex and fragment + InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangVertex, source, + infoSink, commonTable, symbolTables); + InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangFragment, source, + infoSink, commonTable, symbolTables); + + // check for tessellation + if ((profile != EEsProfile && version >= 150) || + (profile == EEsProfile && version >= 310)) { + InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangTessControl, source, + infoSink, commonTable, symbolTables); + InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangTessEvaluation, source, + infoSink, commonTable, symbolTables); + } + + // check for geometry + if ((profile != EEsProfile && version >= 150) || + (profile == EEsProfile && version >= 310)) + InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangGeometry, source, + infoSink, commonTable, symbolTables); + + // check for compute + if ((profile != EEsProfile && version >= 420) || + (profile == EEsProfile && version >= 310)) + InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangCompute, source, + infoSink, commonTable, symbolTables); + + return true; +} + +bool AddContextSpecificSymbols(const TBuiltInResource* resources, TInfoSink& infoSink, TSymbolTable& symbolTable, int version, + EProfile profile, const SpvVersion& spvVersion, EShLanguage language, EShSource source) +{ + std::unique_ptr builtInParseables(CreateBuiltInParseables(infoSink, source)); + + if (builtInParseables == nullptr) + return false; + + builtInParseables->initialize(*resources, version, profile, spvVersion, language); + InitializeSymbolTable(builtInParseables->getCommonString(), version, profile, spvVersion, language, source, infoSink, symbolTable); + builtInParseables->identifyBuiltIns(version, profile, spvVersion, language, symbolTable, *resources); + + return true; +} + +// +// To do this on the fly, we want to leave the current state of our thread's +// 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 +// - Free up the new pool used to parse the built-ins +// - Switch back to the original thread's pool +// +// This only gets done the first time any thread needs a particular symbol table +// (lazy evaluation). +// +void SetupBuiltinSymbolTable(int version, EProfile profile, const SpvVersion& spvVersion, EShSource source) +{ + TInfoSink infoSink; + + // Make sure only one thread tries to do this at a time + glslang::GetGlobalLock(); + + // See if it's already been done for this version/profile combination + int versionIndex = MapVersionToIndex(version); + int spvVersionIndex = MapSpvVersionToIndex(spvVersion); + int profileIndex = MapProfileToIndex(profile); + int sourceIndex = MapSourceToIndex(source); + if (CommonSymbolTable[versionIndex][spvVersionIndex][profileIndex][sourceIndex][EPcGeneral]) { + glslang::ReleaseGlobalLock(); + + return; + } + + // Switch to a new pool + TPoolAllocator& previousAllocator = GetThreadPoolAllocator(); + 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]; + TSymbolTable* stageTables[EShLangCount]; + for (int precClass = 0; precClass < EPcCount; ++precClass) + commonTable[precClass] = new TSymbolTable; + for (int stage = 0; stage < EShLangCount; ++stage) + stageTables[stage] = new TSymbolTable; + + // Generate the local symbol tables using the new pool + InitializeSymbolTables(infoSink, commonTable, stageTables, version, profile, spvVersion, source); + + // Switch to the process-global pool + 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) { + if (! commonTable[precClass]->isEmpty()) { + CommonSymbolTable[versionIndex][spvVersionIndex][profileIndex][sourceIndex][precClass] = new TSymbolTable; + CommonSymbolTable[versionIndex][spvVersionIndex][profileIndex][sourceIndex][precClass]->copyTable(*commonTable[precClass]); + CommonSymbolTable[versionIndex][spvVersionIndex][profileIndex][sourceIndex][precClass]->readOnly(); + } + } + for (int stage = 0; stage < EShLangCount; ++stage) { + if (! stageTables[stage]->isEmpty()) { + SharedSymbolTables[versionIndex][spvVersionIndex][profileIndex][sourceIndex][stage] = new TSymbolTable; + SharedSymbolTables[versionIndex][spvVersionIndex][profileIndex][sourceIndex][stage]->adoptLevels(*CommonSymbolTable + [versionIndex][spvVersionIndex][profileIndex][sourceIndex][CommonIndex(profile, (EShLanguage)stage)]); + SharedSymbolTables[versionIndex][spvVersionIndex][profileIndex][sourceIndex][stage]->copyTable(*stageTables[stage]); + SharedSymbolTables[versionIndex][spvVersionIndex][profileIndex][sourceIndex][stage]->readOnly(); + } + } + + // Clean up the local tables before deleting the pool they used. + for (int precClass = 0; precClass < EPcCount; ++precClass) + delete commonTable[precClass]; + for (int stage = 0; stage < EShLangCount; ++stage) + delete stageTables[stage]; + + delete builtInPoolAllocator; + SetThreadPoolAllocator(previousAllocator); + + glslang::ReleaseGlobalLock(); +} + +// Return true if the shader was correctly specified for version/profile/stage. +bool DeduceVersionProfile(TInfoSink& infoSink, EShLanguage stage, bool versionNotFirst, int defaultVersion, + EShSource source, int& version, EProfile& profile, const SpvVersion& spvVersion) +{ + const int FirstProfileVersion = 150; + bool correct = true; + + if (source == EShSourceHlsl) { + version = 450; // TODO: GLSL parser is still used for builtins. + profile = ECoreProfile; // allow doubles in prototype parsing + return correct; + } + + // Get a good version... + if (version == 0) { + version = defaultVersion; + // infoSink.info.message(EPrefixWarning, "#version: statement missing; use #version on first line of shader"); + } + + // Get a good profile... + if (profile == ENoProfile) { + if (version == 300 || version == 310) { + correct = false; + infoSink.info.message(EPrefixError, "#version: versions 300 and 310 require specifying the 'es' profile"); + profile = EEsProfile; + } else if (version == 100) + profile = EEsProfile; + else if (version >= FirstProfileVersion) + profile = ECoreProfile; + else + profile = ENoProfile; + } else { + // a profile was provided... + if (version < 150) { + correct = false; + infoSink.info.message(EPrefixError, "#version: versions before 150 do not allow a profile token"); + if (version == 100) + profile = EEsProfile; + else + profile = ENoProfile; + } else if (version == 300 || version == 310) { + if (profile != EEsProfile) { + correct = false; + infoSink.info.message(EPrefixError, "#version: versions 300 and 310 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"); + if (version >= FirstProfileVersion) + profile = ECoreProfile; + else + profile = ENoProfile; + } + // else: typical desktop case... e.g., "#version 410 core" + } + } + + // Correct for stage type... + switch (stage) { + case EShLangGeometry: + if ((profile == EEsProfile && version < 310) || + (profile != EEsProfile && version < 150)) { + correct = false; + infoSink.info.message(EPrefixError, "#version: geometry shaders require es profile with version 310 or non-es profile with version 150 or above"); + version = (profile == EEsProfile) ? 310 : 150; + if (profile == EEsProfile || profile == ENoProfile) + profile = ECoreProfile; + } + break; + case EShLangTessControl: + case EShLangTessEvaluation: + if ((profile == EEsProfile && version < 310) || + (profile != EEsProfile && version < 150)) { + correct = false; + infoSink.info.message(EPrefixError, "#version: tessellation shaders require es profile with version 310 or non-es profile with version 150 or above"); + version = (profile == EEsProfile) ? 310 : 400; // 150 supports the extension, correction is to 400 which does not + if (profile == EEsProfile || profile == ENoProfile) + profile = ECoreProfile; + } + break; + case EShLangCompute: + if ((profile == EEsProfile && version < 310) || + (profile != EEsProfile && version < 420)) { + correct = false; + infoSink.info.message(EPrefixError, "#version: compute shaders require es profile with version 310 or above, or non-es profile with version 420 or above"); + version = profile == EEsProfile ? 310 : 420; + } + break; + default: + break; + } + + if (profile == EEsProfile && version >= 300 && versionNotFirst) { + correct = false; + infoSink.info.message(EPrefixError, "#version: statement must appear first in es-profile shader; before comments or newlines"); + } + + // Check for SPIR-V compatibility + if (spvVersion.spv != 0) { + switch (profile) { + case EEsProfile: + if (spvVersion.vulkan >= 100 && version < 310) { + correct = false; + infoSink.info.message(EPrefixError, "#version: ES shaders for Vulkan SPIR-V require version 310 or higher"); + version = 310; + } + if (spvVersion.openGl >= 100) { + correct = false; + infoSink.info.message(EPrefixError, "#version: ES shaders for OpenGL SPIR-V are not supported"); + version = 310; + } + break; + case ECompatibilityProfile: + infoSink.info.message(EPrefixError, "#version: compilation for SPIR-V does not support the compatibility profile"); + break; + default: + if (spvVersion.vulkan >= 100 && version < 140) { + correct = false; + infoSink.info.message(EPrefixError, "#version: Desktop shaders for Vulkan SPIR-V require version 140 or higher"); + version = 140; + } + if (spvVersion.openGl >= 100 && version < 330) { + correct = false; + infoSink.info.message(EPrefixError, "#version: Desktop shaders for OpenGL SPIR-V require version 330 or higher"); + version = 330; + } + break; + } + } + + // 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; + + 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; + + default: + infoSink.info << "Warning, version " << version << " is unknown.\n"; + break; + + } + + return correct; +} + +// This is the common setup and cleanup code for PreprocessDeferred and +// CompileDeferred. +// It takes any callable with a signature of +// bool (TParseContextBase& parseContext, TPpContext& ppContext, +// TInputScanner& input, bool versionWillBeError, +// TSymbolTable& , TIntermediate& , +// EShOptimizationLevel , EShMessages ); +// Which returns false if a failure was detected and true otherwise. +// +template +bool ProcessDeferred( + TCompiler* compiler, + const char* const shaderStrings[], + const int numStrings, + const int* inputLengths, + const char* const stringNames[], + 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 + EProfile defaultProfile, + // set version/profile to defaultVersion/defaultProfile regardless of the #version + // directive in the source code + bool forceDefaultVersionAndProfile, + bool forwardCompatible, // give errors for use of deprecated features + EShMessages messages, // warnings/errors/AST; things to print out + TIntermediate& intermediate, // returned tree, etc. + ProcessingContext& processingContext, + bool requireNonempty, + TShader::Includer& includer, + const std::string sourceEntryPointName = "" + ) +{ + if (! InitThread()) + return false; + + // This must be undone (.pop()) by the caller, after it finishes consuming the created tree. + GetThreadPoolAllocator().push(); + + if (numStrings == 0) + return true; + + // Move to length-based strings, rather than null-terminated strings. + // Also, add strings to include the preamble and to ensure the shader is not null, + // which lets the grammar accept what was a null (post preprocessing) shader. + // + // Shader will look like + // string 0: system preamble + // string 1: custom preamble + // string 2...numStrings+1: user's shader + // string numStrings+2: "int;" + const int numPre = 2; + const int numPost = requireNonempty? 1 : 0; + const int numTotal = numPre + numStrings + numPost; + size_t* lengths = new size_t[numTotal]; + const char** strings = new const char*[numTotal]; + 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) + lengths[s + numPre] = strlen(shaderStrings[s]); + else + lengths[s + numPre] = inputLengths[s]; + } + if (stringNames != nullptr) { + for (int s = 0; s < numStrings; ++s) + names[s + numPre] = stringNames[s]; + } else { + for (int s = 0; s < numStrings; ++s) + names[s + numPre] = nullptr; + } + + // 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); + bool versionNotFound = version == 0; + if (forceDefaultVersionAndProfile) { + if (! (messages & EShMsgSuppressWarnings) && ! versionNotFound && + (version != defaultVersion || profile != defaultProfile)) { + compiler->infoSink.info << "Warning, (version, profile) forced to be (" + << defaultVersion << ", " << ProfileName(defaultProfile) + << "), while in source code it is (" + << version << ", " << ProfileName(profile) << ")\n"; + } + + if (versionNotFound) { + versionNotFirstToken = false; + versionNotFirst = false; + versionNotFound = false; + } + 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 versionWillBeError = (versionNotFound || (profile == EEsProfile && version >= 300 && versionNotFirst)); + bool warnVersionNotFirst = false; + if (! versionWillBeError && versionNotFirstToken) { + if (messages & EShMsgRelaxedErrors) + warnVersionNotFirst = true; + else + versionWillBeError = true; + } + + intermediate.setSource(source); + intermediate.setVersion(version); + intermediate.setProfile(profile); + intermediate.setSpv(spvVersion); + if (spvVersion.vulkan >= 100) + intermediate.setOriginUpperLeft(); + SetupBuiltinSymbolTable(version, profile, spvVersion, source); + + TSymbolTable* cachedTable = SharedSymbolTables[MapVersionToIndex(version)] + [MapSpvVersionToIndex(spvVersion)] + [MapProfileToIndex(profile)] + [MapSourceToIndex(source)] + [compiler->getLanguage()]; + + // Dynamically allocate the symbol table so we can control when it is deallocated WRT the pool. + TSymbolTable* symbolTableMemory = new TSymbolTable; + TSymbolTable& symbolTable = *symbolTableMemory; + if (cachedTable) + symbolTable.adoptLevels(*cachedTable); + + // 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)) + return false; + + // + // Now we can process the full shader under proper symbols and rules. + // + + TParseContextBase* parseContext = CreateParseContext(symbolTable, intermediate, version, profile, source, + compiler->getLanguage(), compiler->infoSink, + spvVersion, forwardCompatible, messages, false, sourceEntryPointName); + + 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) + parseContext->setScanContext(&scanContext); + + parseContext->setPpContext(&ppContext); + parseContext->setLimits(*resources); + if (! goodVersion) + parseContext->addError(); + if (warnVersionNotFirst) { + TSourceLoc loc; + loc.init(); + parseContext->warn(loc, "Illegal to have non-comment, non-whitespace tokens before #version", "#version", ""); + } + + parseContext->initializeExtensionBehavior(); + + // Fill in the strings as outlined above. + std::string preamble; + parseContext->getPreamble(preamble); + strings[0] = preamble.c_str(); + lengths[0] = strlen(strings[0]); + names[0] = nullptr; + strings[1] = customPreamble; + lengths[1] = strlen(strings[1]); + names[1] = nullptr; + assert(2 == numPre); + if (requireNonempty) { + const int postIndex = numStrings + numPre; + strings[postIndex] = "\n int;"; + lengths[postIndex] = strlen(strings[numStrings + numPre]); + names[postIndex] = nullptr; + } + TInputScanner fullInput(numStrings + numPre + numPost, strings, lengths, names, numPre, numPost); + + // Push a new symbol allocation scope that will get used for the shader's globals. + symbolTable.push(); + + bool success = processingContext(*parseContext, ppContext, fullInput, + versionWillBeError, symbolTable, + intermediate, optLevel, messages); + + // Clean up the symbol table. The AST is self-sufficient now. + delete symbolTableMemory; + + delete parseContext; + delete [] lengths; + delete [] strings; + delete [] names; + + return success; +} + +// Responsible for keeping track of the most recent source string and line in +// the preprocessor and outputting newlines appropriately if the source string +// or line changes. +class SourceLineSynchronizer { +public: + SourceLineSynchronizer(const std::function& lastSourceIndex, + std::stringstream* output) + : getLastSourceIndex(lastSourceIndex), output(output), lastSource(-1), lastLine(0) {} +// SourceLineSynchronizer(const SourceLineSynchronizer&) = delete; +// SourceLineSynchronizer& operator=(const SourceLineSynchronizer&) = delete; + + // Sets the internally tracked source string index to that of the most + // recently read token. If we switched to a new source string, returns + // true and inserts a newline. Otherwise, returns false and outputs nothing. + bool syncToMostRecentString() { + if (getLastSourceIndex() != lastSource) { + // After switching to a new source string, we need to reset lastLine + // because line number resets every time a new source string is + // used. We also need to output a newline to separate the output + // from the previous source string (if there is one). + if (lastSource != -1 || lastLine != 0) + *output << std::endl; + lastSource = getLastSourceIndex(); + lastLine = -1; + return true; + } + return false; + } + + // Calls syncToMostRecentString() and then sets the internally tracked line + // number to tokenLine. If we switched to a new line, returns true and inserts + // newlines appropriately. Otherwise, returns false and outputs nothing. + bool syncToLine(int tokenLine) { + syncToMostRecentString(); + const bool newLineStarted = lastLine < tokenLine; + for (; lastLine < tokenLine; ++lastLine) { + if (lastLine > 0) *output << std::endl; + } + return newLineStarted; + } + + // Sets the internally tracked line number to newLineNum. + void setLineNum(int newLineNum) { lastLine = newLineNum; } + +private: + SourceLineSynchronizer& operator=(const SourceLineSynchronizer&); + + // A function for getting the index of the last valid source string we've + // read tokens from. + const std::function getLastSourceIndex; + // output stream for newlines. + std::stringstream* output; + // lastSource is the source string index (starting from 0) of the last token + // processed. It is tracked in order for newlines to be inserted when a new + // source string starts. -1 means we haven't started processing any source + // string. + int lastSource; + // lastLine is the line number (starting from 1) of the last token processed. + // It is tracked in order for newlines to be inserted when a token appears + // on a new line. 0 means we haven't started processing any line in the + // current source string. + int lastLine; +}; + +// DoPreprocessing is a valid ProcessingContext template argument, +// which only performs the preprocessing step of compilation. +// It places the result in the "string" argument to its constructor. +struct DoPreprocessing { + explicit DoPreprocessing(std::string* string): outputString(string) {} + bool operator()(TParseContextBase& parseContext, TPpContext& ppContext, + TInputScanner& input, bool versionWillBeError, + TSymbolTable&, TIntermediate&, + EShOptimizationLevel, EShMessages) + { + // This is a list of tokens that do not require a space before or after. + static const std::string unNeededSpaceTokens = ";()[]"; + static const std::string noSpaceBeforeTokens = ","; + glslang::TPpToken ppToken; + + parseContext.setScanner(&input); + ppContext.setInput(input, versionWillBeError); + + std::stringstream outputStream; + SourceLineSynchronizer lineSync( + std::bind(&TInputScanner::getLastValidSourceIndex, &input), &outputStream); + + parseContext.setExtensionCallback([&lineSync, &outputStream]( + int line, const char* extension, const char* behavior) { + lineSync.syncToLine(line); + outputStream << "#extension " << extension << " : " << behavior; + }); + + parseContext.setLineCallback([&lineSync, &outputStream, &parseContext]( + int curLineNum, int newLineNum, bool hasSource, int sourceNum, const char* sourceName) { + // SourceNum is the number of the source-string that is being parsed. + lineSync.syncToLine(curLineNum); + outputStream << "#line " << newLineNum; + if (hasSource) { + outputStream << " "; + if (sourceName != nullptr) { + outputStream << "\"" << sourceName << "\""; + } else { + outputStream << sourceNum; + } + } + if (parseContext.lineDirectiveShouldSetNextLine()) { + // newLineNum is the new line number for the line following the #line + // directive. So the new line number for the current line is + newLineNum -= 1; + } + outputStream << std::endl; + // And we are at the next line of the #line directive now. + lineSync.setLineNum(newLineNum + 1); + }); + + parseContext.setVersionCallback( + [&lineSync, &outputStream](int line, int version, const char* str) { + lineSync.syncToLine(line); + outputStream << "#version " << version; + if (str) { + outputStream << " " << str; + } + }); + + parseContext.setPragmaCallback([&lineSync, &outputStream]( + int line, const glslang::TVector& ops) { + lineSync.syncToLine(line); + outputStream << "#pragma "; + for(size_t i = 0; i < ops.size(); ++i) { + outputStream << ops[i]; + } + }); + + parseContext.setErrorCallback([&lineSync, &outputStream]( + int line, const char* errorMessage) { + lineSync.syncToLine(line); + outputStream << "#error " << errorMessage; + }); + + int lastToken = EndOfInput; // lastToken records the last token processed. + do { + int token = ppContext.tokenize(ppToken); + if (token == EndOfInput) + break; + + bool isNewString = lineSync.syncToMostRecentString(); + bool isNewLine = lineSync.syncToLine(ppToken.loc.line); + + if (isNewLine) { + // Don't emit whitespace onto empty lines. + // Copy any whitespace characters at the start of a line + // from the input to the output. + outputStream << std::string(ppToken.loc.column - 1, ' '); + } + + // Output a space in between tokens, but not at the start of a line, + // and also not around special tokens. This helps with readability + // and consistency. + if (!isNewString && !isNewLine && lastToken != EndOfInput && + (unNeededSpaceTokens.find((char)token) == std::string::npos) && + (unNeededSpaceTokens.find((char)lastToken) == std::string::npos) && + (noSpaceBeforeTokens.find((char)token) == std::string::npos)) { + outputStream << " "; + } + lastToken = token; + outputStream << ppToken.name; + } while (true); + outputStream << std::endl; + *outputString = outputStream.str(); + + bool success = true; + if (parseContext.getNumErrors() > 0) { + success = false; + parseContext.infoSink.info.prefix(EPrefixError); + parseContext.infoSink.info << parseContext.getNumErrors() << " compilation errors. No code generated.\n\n"; + } + return success; + } + std::string* outputString; +}; + +// DoFullParse is a valid ProcessingConext template argument for fully +// parsing the shader. It populates the "intermediate" with the AST. +struct DoFullParse{ + bool operator()(TParseContextBase& parseContext, TPpContext& ppContext, + TInputScanner& fullInput, bool versionWillBeError, + TSymbolTable&, TIntermediate& intermediate, + EShOptimizationLevel optLevel, EShMessages messages) + { + bool success = true; + // Parse the full shader. + if (! parseContext.parseShaderStrings(ppContext, fullInput, versionWillBeError)) + success = false; + + if (success && intermediate.getTreeRoot()) { + if (optLevel == EShOptNoGeneration) + parseContext.infoSink.info.message(EPrefixNone, "No errors. No code generation or linking was requested."); + else + success = intermediate.postProcess(intermediate.getTreeRoot(), parseContext.getLanguage()); + } else if (! success) { + parseContext.infoSink.info.prefix(EPrefixError); + parseContext.infoSink.info << parseContext.getNumErrors() << " compilation errors. No code generated.\n\n"; + } + + if (messages & EShMsgAST) + intermediate.output(parseContext.infoSink, true); + + return success; + } +}; + +// Take a single compilation unit, and run the preprocessor on it. +// Return: True if there were no issues found in preprocessing, +// False if during preprocessing any unknown version, pragmas or +// extensions were found. +bool PreprocessDeferred( + TCompiler* compiler, + const char* const shaderStrings[], + const int numStrings, + const int* inputLengths, + const char* const stringNames[], + const char* preamble, + const EShOptimizationLevel optLevel, + const TBuiltInResource* resources, + int defaultVersion, // use 100 for ES environment, 110 for desktop + EProfile defaultProfile, + bool forceDefaultVersionAndProfile, + bool forwardCompatible, // give errors for use of deprecated features + EShMessages messages, // warnings/errors/AST; things to print out + TShader::Includer& includer, + TIntermediate& intermediate, // returned tree, etc. + std::string* outputString) +{ + DoPreprocessing parser(outputString); + return ProcessDeferred(compiler, shaderStrings, numStrings, inputLengths, stringNames, + preamble, optLevel, resources, defaultVersion, + defaultProfile, forceDefaultVersionAndProfile, + forwardCompatible, messages, intermediate, parser, + false, includer); +} + +// +// do a partial compile on the given strings for a single compilation unit +// for a potential deferred link into a single stage (and deferred full compile of that +// stage through machine-dependent compilation). +// +// all preprocessing, parsing, semantic checks, etc. for a single compilation unit +// are done here. +// +// return: the tree and other information is filled into the intermediate argument, +// and true is returned by the function for success. +// +bool CompileDeferred( + TCompiler* compiler, + const char* const shaderStrings[], + const int numStrings, + const int* inputLengths, + const char* const stringNames[], + const char* preamble, + const EShOptimizationLevel optLevel, + const TBuiltInResource* resources, + int defaultVersion, // use 100 for ES environment, 110 for desktop + EProfile defaultProfile, + bool forceDefaultVersionAndProfile, + bool forwardCompatible, // give errors for use of deprecated features + EShMessages messages, // warnings/errors/AST; things to print out + TIntermediate& intermediate,// returned tree, etc. + TShader::Includer& includer, + const std::string sourceEntryPointName = "") +{ + DoFullParse parser; + return ProcessDeferred(compiler, shaderStrings, numStrings, inputLengths, stringNames, + preamble, optLevel, resources, defaultVersion, + defaultProfile, forceDefaultVersionAndProfile, + forwardCompatible, messages, intermediate, parser, + true, includer, sourceEntryPointName); +} + +} // end anonymous namespace for local functions + +// +// ShInitialize() should be called exactly once per process, not per thread. +// +int ShInitialize() +{ + glslang::InitGlobalLock(); + + if (! InitProcess()) + return 0; + + if (! PerProcessGPA) + PerProcessGPA = new TPoolAllocator(); + + glslang::TScanContext::fillInKeywordMap(); +#ifdef ENABLE_HLSL + glslang::HlslScanContext::fillInKeywordMap(); +#endif + + return 1; +} + +// +// Driver calls these to create and destroy compiler/linker +// objects. +// + +ShHandle ShConstructCompiler(const EShLanguage language, int debugOptions) +{ + if (!InitThread()) + return 0; + + TShHandleBase* base = static_cast(ConstructCompiler(language, debugOptions)); + + return reinterpret_cast(base); +} + +ShHandle ShConstructLinker(const EShExecutable executable, int debugOptions) +{ + if (!InitThread()) + return 0; + + TShHandleBase* base = static_cast(ConstructLinker(executable, debugOptions)); + + return reinterpret_cast(base); +} + +ShHandle ShConstructUniformMap() +{ + if (!InitThread()) + return 0; + + TShHandleBase* base = static_cast(ConstructUniformMap()); + + return reinterpret_cast(base); +} + +void ShDestruct(ShHandle handle) +{ + if (handle == 0) + return; + + TShHandleBase* base = static_cast(handle); + + if (base->getAsCompiler()) + DeleteCompiler(base->getAsCompiler()); + else if (base->getAsLinker()) + DeleteLinker(base->getAsLinker()); + else if (base->getAsUniformMap()) + DeleteUniformMap(base->getAsUniformMap()); +} + +// +// Cleanup symbol tables +// +int __fastcall ShFinalize() +{ + for (int version = 0; version < VersionCount; ++version) { + for (int spvVersion = 0; spvVersion < SpvVersionCount; ++spvVersion) { + for (int p = 0; p < ProfileCount; ++p) { + for (int source = 0; source < SourceCount; ++source) { + for (int stage = 0; stage < EShLangCount; ++stage) { + delete SharedSymbolTables[version][spvVersion][p][source][stage]; + SharedSymbolTables[version][spvVersion][p][source][stage] = 0; + } + } + } + } + } + + for (int version = 0; version < VersionCount; ++version) { + for (int spvVersion = 0; spvVersion < SpvVersionCount; ++spvVersion) { + for (int p = 0; p < ProfileCount; ++p) { + for (int source = 0; source < SourceCount; ++source) { + for (int pc = 0; pc < EPcCount; ++pc) { + delete CommonSymbolTable[version][spvVersion][p][source][pc]; + CommonSymbolTable[version][spvVersion][p][source][pc] = 0; + } + } + } + } + } + + if (PerProcessGPA) { + PerProcessGPA->popAll(); + delete PerProcessGPA; + PerProcessGPA = 0; + } + + glslang::TScanContext::deleteKeywordMap(); +#ifdef ENABLE_HLSL + glslang::HlslScanContext::deleteKeywordMap(); +#endif + + return 1; +} + +// +// Do a full compile on the given strings for a single compilation unit +// forming a complete stage. The result of the machine dependent compilation +// is left in the provided compile object. +// +// Return: The return value is really boolean, indicating +// success (1) or failure (0). +// +int ShCompile( + const ShHandle handle, + const char* const shaderStrings[], + const int numStrings, + const int* inputLengths, + const EShOptimizationLevel optLevel, + const TBuiltInResource* resources, + int /*debugOptions*/, + int defaultVersion, // use 100 for ES environment, 110 for desktop + bool forwardCompatible, // give errors for use of deprecated features + EShMessages messages // warnings/errors/AST; things to print out + ) +{ + // Map the generic handle to the C++ object + if (handle == 0) + return 0; + + TShHandleBase* base = reinterpret_cast(handle); + TCompiler* compiler = base->getAsCompiler(); + if (compiler == 0) + return 0; + + compiler->infoSink.info.erase(); + compiler->infoSink.debug.erase(); + + TIntermediate intermediate(compiler->getLanguage()); + TShader::ForbidIncluder includer; + bool success = CompileDeferred(compiler, shaderStrings, numStrings, inputLengths, nullptr, + "", optLevel, resources, defaultVersion, ENoProfile, false, + forwardCompatible, messages, intermediate, includer); + + // + // Call the machine dependent compiler + // + if (success && intermediate.getTreeRoot() && optLevel != EShOptNoGeneration) + success = compiler->compile(intermediate.getTreeRoot(), intermediate.getVersion(), intermediate.getProfile()); + + intermediate.removeTree(); + + // Throw away all the temporary memory used by the compilation process. + // The push was done in the CompileDeferred() call above. + GetThreadPoolAllocator().pop(); + + return success ? 1 : 0; +} + +// +// Link the given compile objects. +// +// Return: The return value of is really boolean, indicating +// success or failure. +// +int ShLinkExt( + const ShHandle linkHandle, + const ShHandle compHandles[], + const int numHandles) +{ + if (linkHandle == 0 || numHandles == 0) + return 0; + + THandleList cObjects; + + for (int i = 0; i < numHandles; ++i) { + if (compHandles[i] == 0) + return 0; + TShHandleBase* base = reinterpret_cast(compHandles[i]); + if (base->getAsLinker()) { + cObjects.push_back(base->getAsLinker()); + } + if (base->getAsCompiler()) + cObjects.push_back(base->getAsCompiler()); + + if (cObjects[i] == 0) + return 0; + } + + TShHandleBase* base = reinterpret_cast(linkHandle); + TLinker* linker = static_cast(base->getAsLinker()); + + if (linker == 0) + return 0; + + linker->infoSink.info.erase(); + + for (int i = 0; i < numHandles; ++i) { + if (cObjects[i]->getAsCompiler()) { + if (! cObjects[i]->getAsCompiler()->linkable()) { + linker->infoSink.info.message(EPrefixError, "Not all shaders have valid object code."); + return 0; + } + } + } + + bool ret = linker->link(cObjects); + + return ret ? 1 : 0; +} + +// +// ShSetEncrpytionMethod is a place-holder for specifying +// how source code is encrypted. +// +void ShSetEncryptionMethod(ShHandle handle) +{ + if (handle == 0) + return; +} + +// +// Return any compiler/linker/uniformmap log of messages for the application. +// +const char* ShGetInfoLog(const ShHandle handle) +{ + if (!InitThread()) + return 0; + + if (handle == 0) + return 0; + + TShHandleBase* base = static_cast(handle); + TInfoSink* infoSink; + + if (base->getAsCompiler()) + infoSink = &(base->getAsCompiler()->getInfoSink()); + else if (base->getAsLinker()) + infoSink = &(base->getAsLinker()->getInfoSink()); + else + return 0; + + infoSink->info << infoSink->debug.c_str(); + return infoSink->info.c_str(); +} + +// +// Return the resulting binary code from the link process. Structure +// is machine dependent. +// +const void* ShGetExecutable(const ShHandle handle) +{ + if (!InitThread()) + return 0; + + if (handle == 0) + return 0; + + TShHandleBase* base = reinterpret_cast(handle); + + TLinker* linker = static_cast(base->getAsLinker()); + if (linker == 0) + return 0; + + return linker->getObjectCode(); +} + +// +// Let the linker know where the application said it's attributes are bound. +// The linker does not use these values, they are remapped by the ICD or +// hardware. It just needs them to know what's aliased. +// +// Return: The return value of is really boolean, indicating +// success or failure. +// +int ShSetVirtualAttributeBindings(const ShHandle handle, const ShBindingTable* table) +{ + if (!InitThread()) + return 0; + + if (handle == 0) + return 0; + + TShHandleBase* base = reinterpret_cast(handle); + TLinker* linker = static_cast(base->getAsLinker()); + + if (linker == 0) + return 0; + + linker->setAppAttributeBindings(table); + + return 1; +} + +// +// Let the linker know where the predefined attributes have to live. +// +int ShSetFixedAttributeBindings(const ShHandle handle, const ShBindingTable* table) +{ + if (!InitThread()) + return 0; + + if (handle == 0) + return 0; + + TShHandleBase* base = reinterpret_cast(handle); + TLinker* linker = static_cast(base->getAsLinker()); + + if (linker == 0) + return 0; + + linker->setFixedAttributeBindings(table); + return 1; +} + +// +// Some attribute locations are off-limits to the linker... +// +int ShExcludeAttributes(const ShHandle handle, int *attributes, int count) +{ + if (!InitThread()) + return 0; + + if (handle == 0) + return 0; + + TShHandleBase* base = reinterpret_cast(handle); + TLinker* linker = static_cast(base->getAsLinker()); + if (linker == 0) + return 0; + + linker->setExcludedAttributes(attributes, count); + + return 1; +} + +// +// Return the index for OpenGL to use for knowing where a uniform lives. +// +// Return: The return value of is really boolean, indicating +// success or failure. +// +int ShGetUniformLocation(const ShHandle handle, const char* name) +{ + if (!InitThread()) + return 0; + + if (handle == 0) + return -1; + + TShHandleBase* base = reinterpret_cast(handle); + TUniformMap* uniformMap= base->getAsUniformMap(); + if (uniformMap == 0) + return -1; + + return uniformMap->getLocation(name); +} + +//////////////////////////////////////////////////////////////////////////////////////////// +// +// Deferred-Lowering C++ Interface +// ----------------------------------- +// +// Below is a new alternate C++ interface that might potentially replace the above +// opaque handle-based interface. +// +// See more detailed comment in ShaderLang.h +// + +namespace glslang { + +#include "../Include/revision.h" + +const char* GetEsslVersionString() +{ + return "OpenGL ES GLSL 3.00 glslang LunarG Khronos." GLSLANG_REVISION " " GLSLANG_DATE; +} + +const char* GetGlslVersionString() +{ + return "4.20 glslang LunarG Khronos." GLSLANG_REVISION " " GLSLANG_DATE; +} + +int GetKhronosToolId() +{ + return 8; +} + +bool InitializeProcess() +{ + return ShInitialize() != 0; +} + +void FinalizeProcess() +{ + ShFinalize(); +} + +class TDeferredCompiler : public TCompiler { +public: + TDeferredCompiler(EShLanguage s, TInfoSink& i) : TCompiler(s, i) { } + virtual bool compile(TIntermNode*, int = 0, EProfile = ENoProfile) { return true; } +}; + +TShader::TShader(EShLanguage s) + : pool(0), stage(s), lengths(nullptr), stringNames(nullptr), preamble("") +{ + infoSink = new TInfoSink; + compiler = new TDeferredCompiler(stage, *infoSink); + intermediate = new TIntermediate(s); +} + +TShader::~TShader() +{ + delete infoSink; + delete compiler; + delete intermediate; + delete pool; +} + +void TShader::setStrings(const char* const* s, int n) +{ + strings = s; + numStrings = n; + lengths = nullptr; +} + +void TShader::setStringsWithLengths(const char* const* s, const int* l, int n) +{ + strings = s; + numStrings = n; + lengths = l; +} + +void TShader::setStringsWithLengthsAndNames( + const char* const* s, const int* l, const char* const* names, int n) +{ + strings = s; + numStrings = n; + lengths = l; + stringNames = names; +} + +void TShader::setEntryPoint(const char* entryPoint) +{ + intermediate->setEntryPointName(entryPoint); +} + +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::setAutoMapBindings(bool map) { intermediate->setAutoMapBindings(map); } +void TShader::setFlattenUniformArrays(bool flatten) { intermediate->setFlattenUniformArrays(flatten); } +void TShader::setNoStorageFormat(bool useUnknownFormat) { intermediate->setNoStorageFormat(useUnknownFormat); } + +// +// Turn the shader strings into a parse tree in the TIntermediate. +// +// Returns true for success. +// +bool TShader::parse(const TBuiltInResource* builtInResources, int defaultVersion, EProfile defaultProfile, bool forceDefaultVersionAndProfile, + bool forwardCompatible, EShMessages messages, Includer& includer) +{ + if (! InitThread()) + return false; + + 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); +} + +// Fill in a string with the result of preprocessing ShaderStrings +// Returns true if all extensions, pragmas and version strings were valid. +bool TShader::preprocess(const TBuiltInResource* builtInResources, + int defaultVersion, EProfile defaultProfile, + bool forceDefaultVersionAndProfile, + bool forwardCompatible, EShMessages message, + std::string* output_string, + Includer& includer) +{ + if (! InitThread()) + return false; + + pool = new TPoolAllocator(); + SetThreadPoolAllocator(*pool); + if (! preamble) + preamble = ""; + + return PreprocessDeferred(compiler, strings, numStrings, lengths, stringNames, preamble, + EShOptNone, builtInResources, defaultVersion, + defaultProfile, forceDefaultVersionAndProfile, + forwardCompatible, message, includer, *intermediate, output_string); +} + +const char* TShader::getInfoLog() +{ + return infoSink->info.c_str(); +} + +const char* TShader::getInfoDebugLog() +{ + return infoSink->debug.c_str(); +} + +TProgram::TProgram() : pool(0), reflection(0), ioMapper(nullptr), linked(false) +{ + infoSink = new TInfoSink; + for (int s = 0; s < EShLangCount; ++s) { + intermediate[s] = 0; + newedIntermediate[s] = false; + } +} + +TProgram::~TProgram() +{ + delete ioMapper; + delete infoSink; + delete reflection; + + for (int s = 0; s < EShLangCount; ++s) + if (newedIntermediate[s]) + delete intermediate[s]; + + delete pool; +} + +// +// Merge the compilation units within each stage into a single TIntermediate. +// All starting compilation units need to be the result of calling TShader::parse(). +// +// Return true for success. +// +bool TProgram::link(EShMessages messages) +{ + if (linked) + return false; + linked = true; + + bool error = false; + + pool = new TPoolAllocator(); + SetThreadPoolAllocator(*pool); + + for (int s = 0; s < EShLangCount; ++s) { + if (! linkStage((EShLanguage)s, messages)) + error = true; + } + + // TODO: Link: cross-stage error checking + + return ! error; +} + +// +// Merge the compilation units within the given stage into a single TIntermediate. +// +// Return true for success. +// +bool TProgram::linkStage(EShLanguage stage, EShMessages messages) +{ + if (stages[stage].size() == 0) + return true; + + int numEsShaders = 0, numNonEsShaders = 0; + for (auto it = stages[stage].begin(); it != stages[stage].end(); ++it) { + if ((*it)->intermediate->getProfile() == EEsProfile) { + numEsShaders++; + } else { + numNonEsShaders++; + } + } + + if (numEsShaders > 0 && numNonEsShaders > 0) { + infoSink->info.message(EPrefixError, "Cannot mix ES profile with non-ES profile shaders"); + return false; + } else if (numEsShaders > 1) { + infoSink->info.message(EPrefixError, "Cannot attach multiple ES shaders of the same type to a single program"); + return false; + } + + // + // Be efficient for the common single compilation unit per stage case, + // reusing it's TIntermediate instead of merging into a new one. + // + TIntermediate *firstIntermediate = stages[stage].front()->intermediate; + if (stages[stage].size() == 1) + intermediate[stage] = firstIntermediate; + else { + intermediate[stage] = new TIntermediate(stage, + firstIntermediate->getVersion(), + firstIntermediate->getProfile()); + + + // The new TIntermediate must use the same origin as the original TIntermediates. + // Otherwise linking will fail due to different coordinate systems. + if (firstIntermediate->getOriginUpperLeft()) { + intermediate[stage]->setOriginUpperLeft(); + } + intermediate[stage]->setSpv(firstIntermediate->getSpv()); + + newedIntermediate[stage] = true; + } + + if (messages & EShMsgAST) + infoSink->info << "\nLinked " << StageName(stage) << " stage:\n\n"; + + if (stages[stage].size() > 1) { + std::list::const_iterator it; + for (it = stages[stage].begin(); it != stages[stage].end(); ++it) + intermediate[stage]->merge(*infoSink, *(*it)->intermediate); + } + + intermediate[stage]->finalCheck(*infoSink, (messages & EShMsgKeepUncalled) != 0); + + if (messages & EShMsgAST) + intermediate[stage]->output(*infoSink, true); + + return intermediate[stage]->getNumErrors() == 0; +} + +const char* TProgram::getInfoLog() +{ + return infoSink->info.c_str(); +} + +const char* TProgram::getInfoDebugLog() +{ + return infoSink->debug.c_str(); +} + +// +// Reflection implementation. +// + +bool TProgram::buildReflection() +{ + if (! linked || reflection) + return false; + + reflection = new TReflection; + + for (int s = 0; s < EShLangCount; ++s) { + if (intermediate[s]) { + if (! reflection->addStage((EShLanguage)s, *intermediate[s])) + return false; + } + } + + return true; +} + +int TProgram::getNumLiveUniformVariables() const { return reflection->getNumUniforms(); } +int TProgram::getNumLiveUniformBlocks() const { return reflection->getNumUniformBlocks(); } +const char* TProgram::getUniformName(int index) const { return reflection->getUniform(index).name.c_str(); } +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::getUniformBlockIndex(int index) const { return reflection->getUniform(index).index; } +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; } +int TProgram::getNumLiveAttributes() const { return reflection->getNumAttributes(); } +const char* TProgram::getAttributeName(int index) const { return reflection->getAttribute(index).name.c_str(); } +int TProgram::getAttributeType(int index) const { return reflection->getAttribute(index).glDefineType; } +const TType* TProgram::getAttributeTType(int index) const { return reflection->getAttribute(index).getType(); } +const TType* TProgram::getUniformTType(int index) const { return reflection->getUniform(index).getType(); } +const TType* TProgram::getUniformBlockTType(int index) const { return reflection->getUniformBlock(index).getType(); } +unsigned TProgram::getLocalSize(int dim) const { return reflection->getLocalSize(dim); } + +void TProgram::dumpReflection() { reflection->dump(); } + +// +// I/O mapping implementation. +// +bool TProgram::mapIO(TIoMapResolver* resolver) +{ + if (! linked || ioMapper) + return false; + + ioMapper = new TIoMapper; + + for (int s = 0; s < EShLangCount; ++s) { + if (intermediate[s]) { + if (! ioMapper->addStage((EShLanguage)s, *intermediate[s], *infoSink, resolver)) + return false; + } + } + + return true; +} + +} // end namespace glslang diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/SymbolTable.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/SymbolTable.cpp new file mode 100644 index 0000000..790b76b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/SymbolTable.cpp @@ -0,0 +1,362 @@ +// +// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +// Copyright (C) 2012-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. +// + +// +// Symbol table for parsing. Most functionality and main ideas +// are documented in the header file. +// + +#include "SymbolTable.h" + +namespace glslang { + +// +// TType helper function needs a place to live. +// + +// +// Recursively generate mangled names. +// +void TType::buildMangledName(TString& mangledName) const +{ + if (isMatrix()) + mangledName += 'm'; + else if (isVector()) + mangledName += 'v'; + + switch (basicType) { + case EbtFloat: mangledName += 'f'; break; + case EbtDouble: mangledName += 'd'; break; +#ifdef AMD_EXTENSIONS + case EbtFloat16: mangledName += "f16"; break; +#endif + case EbtInt: mangledName += 'i'; break; + case EbtUint: mangledName += 'u'; break; + case EbtInt64: mangledName += "i64"; break; + case EbtUint64: mangledName += "u64"; break; + case EbtBool: mangledName += 'b'; break; + case EbtAtomicUint: mangledName += "au"; break; + case EbtSampler: + switch (sampler.type) { + case EbtInt: mangledName += "i"; break; + case EbtUint: mangledName += "u"; break; + default: break; // some compilers want this + } + if (sampler.image) + mangledName += "I"; // a normal image + else if (sampler.sampler) + mangledName += "p"; // a "pure" sampler + else if (!sampler.combined) + mangledName += "t"; // a "pure" texture + else + mangledName += "s"; // traditional combined sampler + if (sampler.arrayed) + mangledName += "A"; + if (sampler.shadow) + mangledName += "S"; + if (sampler.external) + mangledName += "E"; + switch (sampler.dim) { + case Esd1D: mangledName += "1"; break; + case Esd2D: mangledName += "2"; break; + case Esd3D: mangledName += "3"; break; + case EsdCube: mangledName += "C"; break; + case EsdRect: mangledName += "R2"; break; + case EsdBuffer: mangledName += "B"; break; + case EsdSubpass: mangledName += "P"; break; + default: break; // some compilers want this + } + if (sampler.ms) + mangledName += "M"; + break; + case EbtStruct: + case EbtBlock: + if (basicType == EbtStruct) + mangledName += "struct-"; + else + mangledName += "block-"; + if (typeName) + mangledName += *typeName; + for (unsigned int i = 0; i < structure->size(); ++i) { + mangledName += '-'; + (*structure)[i].type->buildMangledName(mangledName); + } + default: + break; + } + + if (getVectorSize() > 0) + mangledName += static_cast('0' + getVectorSize()); + else { + mangledName += static_cast('0' + getMatrixCols()); + mangledName += static_cast('0' + getMatrixRows()); + } + + if (arraySizes) { + const int maxSize = 11; + char buf[maxSize]; + for (int i = 0; i < arraySizes->getNumDims(); ++i) { + if (arraySizes->getDimNode(i)) { + if (arraySizes->getDimNode(i)->getAsSymbolNode()) + snprintf(buf, maxSize, "s%d", arraySizes->getDimNode(i)->getAsSymbolNode()->getId()); + else + snprintf(buf, maxSize, "s%p", arraySizes->getDimNode(i)); + } else + snprintf(buf, maxSize, "%d", arraySizes->getDimSize(i)); + mangledName += '['; + mangledName += buf; + mangledName += ']'; + } + } +} + +// +// Dump functions. +// + +void TVariable::dump(TInfoSink& infoSink) const +{ + infoSink.debug << getName().c_str() << ": " << type.getStorageQualifierString() << " " << type.getBasicTypeString(); + if (type.isArray()) { + infoSink.debug << "[0]"; + } + infoSink.debug << "\n"; +} + +void TFunction::dump(TInfoSink& infoSink) const +{ + infoSink.debug << getName().c_str() << ": " << returnType.getBasicTypeString() << " " << getMangledName().c_str() << "\n"; +} + +void TAnonMember::dump(TInfoSink& TInfoSink) const +{ + TInfoSink.debug << "anonymous member " << getMemberNumber() << " of " << getAnonContainer().getName().c_str() << "\n"; +} + +void TSymbolTableLevel::dump(TInfoSink &infoSink) const +{ + tLevel::const_iterator it; + for (it = level.begin(); it != level.end(); ++it) + (*it).second->dump(infoSink); +} + +void TSymbolTable::dump(TInfoSink &infoSink) const +{ + for (int level = currentLevel(); level >= 0; --level) { + infoSink.debug << "LEVEL " << level << "\n"; + table[level]->dump(infoSink); + } +} + +// +// Functions have buried pointers to delete. +// +TFunction::~TFunction() +{ + for (TParamList::iterator i = parameters.begin(); i != parameters.end(); ++i) + delete (*i).type; +} + +// +// Symbol table levels are a map of pointers to symbols that have to be deleted. +// +TSymbolTableLevel::~TSymbolTableLevel() +{ + for (tLevel::iterator it = level.begin(); it != level.end(); ++it) + delete (*it).second; + + delete [] defaultPrecision; +} + +// +// Change all function entries in the table with the non-mangled name +// to be related to the provided built-in operation. +// +void TSymbolTableLevel::relateToOperator(const char* name, TOperator op) +{ + tLevel::const_iterator candidate = level.lower_bound(name); + while (candidate != level.end()) { + const TString& candidateName = (*candidate).first; + TString::size_type parenAt = candidateName.find_first_of('('); + if (parenAt != candidateName.npos && candidateName.compare(0, parenAt, name) == 0) { + TFunction* function = (*candidate).second->getAsFunction(); + function->relateToOperator(op); + } else + break; + ++candidate; + } +} + +// Make all function overloads of the given name require an extension(s). +// Should only be used for a version/profile that actually needs the extension(s). +void TSymbolTableLevel::setFunctionExtensions(const char* name, int num, const char* const extensions[]) +{ + tLevel::const_iterator candidate = level.lower_bound(name); + while (candidate != level.end()) { + const TString& candidateName = (*candidate).first; + TString::size_type parenAt = candidateName.find_first_of('('); + if (parenAt != candidateName.npos && candidateName.compare(0, parenAt, name) == 0) { + TSymbol* symbol = candidate->second; + symbol->setExtensions(num, extensions); + } else + break; + ++candidate; + } +} + +// +// Make all symbols in this table level read only. +// +void TSymbolTableLevel::readOnly() +{ + for (tLevel::iterator it = level.begin(); it != level.end(); ++it) + (*it).second->makeReadOnly(); +} + +// +// Copy a symbol, but the copy is writable; call readOnly() afterward if that's not desired. +// +TSymbol::TSymbol(const TSymbol& copyOf) +{ + name = NewPoolTString(copyOf.name->c_str()); + uniqueId = copyOf.uniqueId; + writable = true; +} + +TVariable::TVariable(const TVariable& copyOf) : TSymbol(copyOf) +{ + type.deepCopy(copyOf.type); + userType = copyOf.userType; + numExtensions = 0; + extensions = 0; + if (copyOf.numExtensions != 0) + setExtensions(copyOf.numExtensions, copyOf.extensions); + + if (! copyOf.constArray.empty()) { + assert(! copyOf.type.isStruct()); + TConstUnionArray newArray(copyOf.constArray, 0, copyOf.constArray.size()); + constArray = newArray; + } + + // don't support specialization-constant subtrees in cloned tables + constSubtree = nullptr; +} + +TVariable* TVariable::clone() const +{ + TVariable *variable = new TVariable(*this); + + return variable; +} + +TFunction::TFunction(const TFunction& copyOf) : TSymbol(copyOf) +{ + for (unsigned int i = 0; i < copyOf.parameters.size(); ++i) { + TParameter param; + parameters.push_back(param); + parameters.back().copyParam(copyOf.parameters[i]); + } + + numExtensions = 0; + extensions = 0; + if (copyOf.extensions != 0) + setExtensions(copyOf.numExtensions, copyOf.extensions); + returnType.deepCopy(copyOf.returnType); + mangledName = copyOf.mangledName; + op = copyOf.op; + defined = copyOf.defined; + prototyped = copyOf.prototyped; + implicitThis = copyOf.implicitThis; + illegalImplicitThis = copyOf.illegalImplicitThis; + defaultParamCount = copyOf.defaultParamCount; +} + +TFunction* TFunction::clone() const +{ + TFunction *function = new TFunction(*this); + + return function; +} + +TAnonMember* TAnonMember::clone() const +{ + // Anonymous members of a given block should be cloned at a higher level, + // where they can all be assured to still end up pointing to a single + // copy of the original container. + assert(0); + + return 0; +} + +TSymbolTableLevel* TSymbolTableLevel::clone() const +{ + TSymbolTableLevel *symTableLevel = new TSymbolTableLevel(); + symTableLevel->anonId = anonId; + symTableLevel->thisLevel = thisLevel; + std::vector containerCopied(anonId, false); + tLevel::const_iterator iter; + for (iter = level.begin(); iter != level.end(); ++iter) { + const TAnonMember* anon = iter->second->getAsAnonMember(); + if (anon) { + // Insert all the anonymous members of this same container at once, + // avoid inserting the other members in the future, once this has been done, + // allowing them to all be part of the same new container. + if (! containerCopied[anon->getAnonId()]) { + TVariable* container = anon->getAnonContainer().clone(); + container->changeName(NewPoolTString("")); + // insert the whole container + symTableLevel->insert(*container, false); + containerCopied[anon->getAnonId()] = true; + } + } else + symTableLevel->insert(*iter->second->clone(), false); + } + + return symTableLevel; +} + +void TSymbolTable::copyTable(const TSymbolTable& copyOf) +{ + assert(adoptedLevels == copyOf.adoptedLevels); + + uniqueId = copyOf.uniqueId; + noBuiltInRedeclarations = copyOf.noBuiltInRedeclarations; + separateNameSpaces = copyOf.separateNameSpaces; + for (unsigned int i = copyOf.adoptedLevels; i < copyOf.table.size(); ++i) + table.push_back(copyOf.table[i]->clone()); +} + +} // end namespace glslang diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/SymbolTable.h b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/SymbolTable.h new file mode 100644 index 0000000..8dc154c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/SymbolTable.h @@ -0,0 +1,813 @@ +// +// 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. +// + +#ifndef _SYMBOL_TABLE_INCLUDED_ +#define _SYMBOL_TABLE_INCLUDED_ + +// +// Symbol table for parsing. Has these design characteristics: +// +// * Same symbol table can be used to compile many shaders, to preserve +// effort of creating and loading with the large numbers of built-in +// symbols. +// +// --> This requires a copy mechanism, so initial pools used to create +// the shared information can be popped. Done through "clone" +// methods. +// +// * Name mangling will be used to give each function a unique name +// so that symbol table lookups are never ambiguous. This allows +// a simpler symbol table structure. +// +// * Pushing and popping of scope, so symbol table will really be a stack +// of symbol tables. Searched from the top, with new inserts going into +// the top. +// +// * Constants: Compile time constant symbols will keep their values +// in the symbol table. The parser can substitute constants at parse +// time, including doing constant folding and constant propagation. +// +// * No temporaries: Temporaries made from operations (+, --, .xy, etc.) +// are tracked in the intermediate representation, not the symbol table. +// + +#include "../Include/Common.h" +#include "../Include/intermediate.h" +#include "../Include/InfoSink.h" + +namespace glslang { + +// +// Symbol base class. (Can build functions or variables out of these...) +// + +class TVariable; +class TFunction; +class TAnonMember; + +class TSymbol { +public: + POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator()) + explicit TSymbol(const TString *n) : name(n), numExtensions(0), extensions(0), writable(true) { } + virtual TSymbol* clone() const = 0; + virtual ~TSymbol() { } // rely on all symbol owned memory coming from the pool + + virtual const TString& getName() const { return *name; } + virtual void changeName(const TString* newName) { name = newName; } + virtual void addPrefix(const char* prefix) + { + TString newName(prefix); + newName.append(*name); + changeName(NewPoolTString(newName.c_str())); + } + virtual const TString& getMangledName() const { return getName(); } + virtual TFunction* getAsFunction() { return 0; } + virtual const TFunction* getAsFunction() const { return 0; } + virtual TVariable* getAsVariable() { return 0; } + virtual const TVariable* getAsVariable() const { return 0; } + virtual const TAnonMember* getAsAnonMember() const { return 0; } + virtual const TType& getType() const = 0; + virtual TType& getWritableType() = 0; + virtual void setUniqueId(int id) { uniqueId = id; } + virtual int getUniqueId() const { return uniqueId; } + virtual void setExtensions(int num, const char* const exts[]) + { + assert(extensions == 0); + assert(num > 0); + numExtensions = num; + extensions = NewPoolObject(exts[0], num); + for (int e = 0; e < num; ++e) + extensions[e] = exts[e]; + } + virtual int getNumExtensions() const { return numExtensions; } + virtual const char** getExtensions() const { return extensions; } + virtual void dump(TInfoSink &infoSink) const = 0; + + virtual bool isReadOnly() const { return ! writable; } + virtual void makeReadOnly() { writable = false; } + +protected: + explicit TSymbol(const TSymbol&); + TSymbol& operator=(const TSymbol&); + + const TString *name; + unsigned int uniqueId; // For cross-scope comparing during code generation + + // For tracking what extensions must be present + // (don't use if correct version/profile is present). + int numExtensions; + const char** extensions; // an array of pointers to existing constant char strings + + // + // N.B.: Non-const functions that will be generally used should assert on this, + // to avoid overwriting shared symbol-table information. + // + bool writable; +}; + +// +// Variable class, meaning a symbol that's not a function. +// +// There could be a separate class hierarchy for Constant variables; +// Only one of int, bool, or float, (or none) is correct for +// any particular use, but it's easy to do this way, and doesn't +// seem worth having separate classes, and "getConst" can't simply return +// different values for different types polymorphically, so this is +// just simple and pragmatic. +// +class TVariable : public TSymbol { +public: + TVariable(const TString *name, const TType& t, bool uT = false ) + : TSymbol(name), + userType(uT), + constSubtree(nullptr), + anonId(-1) { type.shallowCopy(t); } + virtual TVariable* clone() const; + virtual ~TVariable() { } + + virtual TVariable* getAsVariable() { return this; } + virtual const TVariable* getAsVariable() const { return this; } + virtual const TType& getType() const { return type; } + virtual TType& getWritableType() { assert(writable); return type; } + virtual bool isUserType() const { return userType; } + virtual const TConstUnionArray& getConstArray() const { return constArray; } + virtual TConstUnionArray& getWritableConstArray() { assert(writable); return constArray; } + virtual void setConstArray(const TConstUnionArray& array) { constArray = array; } + virtual void setConstSubtree(TIntermTyped* subtree) { constSubtree = subtree; } + virtual TIntermTyped* getConstSubtree() const { return constSubtree; } + virtual void setAnonId(int i) { anonId = i; } + virtual int getAnonId() const { return anonId; } + + virtual void dump(TInfoSink &infoSink) const; + +protected: + explicit TVariable(const TVariable&); + TVariable& operator=(const TVariable&); + + TType type; + bool userType; + // we are assuming that Pool Allocator will free the memory allocated to unionArray + // when this object is destroyed + + // TODO: these two should be a union + // A variable could be a compile-time constant, or a specialization + // constant, or neither, but never both. + TConstUnionArray constArray; // for compile-time constant value + TIntermTyped* constSubtree; // for specialization constant computation + int anonId; // the ID used for anonymous blocks: TODO: see if uniqueId could serve a dual purpose +}; + +// +// The function sub-class of symbols and the parser will need to +// share this definition of a function parameter. +// +struct TParameter { + TString *name; + TType* type; + TIntermTyped* defaultValue; + TBuiltInVariable declaredBuiltIn; + void copyParam(const TParameter& param) + { + if (param.name) + name = NewPoolTString(param.name->c_str()); + else + name = 0; + type = param.type->clone(); + defaultValue = param.defaultValue; + declaredBuiltIn = param.declaredBuiltIn; + } +}; + +// +// The function sub-class of a symbol. +// +class TFunction : public TSymbol { +public: + explicit TFunction(TOperator o) : + TSymbol(0), + op(o), + defined(false), prototyped(false), implicitThis(false), illegalImplicitThis(false), defaultParamCount(0) { } + TFunction(const TString *name, const TType& retType, TOperator tOp = EOpNull) : + TSymbol(name), + mangledName(*name + '('), + op(tOp), + defined(false), prototyped(false), implicitThis(false), illegalImplicitThis(false), defaultParamCount(0) + { + returnType.shallowCopy(retType); + declaredBuiltIn = retType.getQualifier().builtIn; + } + virtual TFunction* clone() const override; + virtual ~TFunction(); + + virtual TFunction* getAsFunction() override { return this; } + virtual const TFunction* getAsFunction() const override { return this; } + + // Install 'p' as the (non-'this') last parameter. + // Non-'this' parameters are reflected in both the list of parameters and the + // mangled name. + virtual void addParameter(TParameter& p) + { + assert(writable); + p.declaredBuiltIn = p.type->getQualifier().builtIn; + parameters.push_back(p); + p.type->appendMangledName(mangledName); + + if (p.defaultValue != nullptr) + defaultParamCount++; + } + + // Install 'this' as the first parameter. + // 'this' is reflected in the list of parameters, but not the mangled name. + virtual void addThisParameter(TType& type, const char* name) + { + TParameter p = { NewPoolTString(name), new TType, nullptr }; + p.type->shallowCopy(type); + parameters.insert(parameters.begin(), p); + } + + virtual void addPrefix(const char* prefix) override + { + TSymbol::addPrefix(prefix); + mangledName.insert(0, prefix); + } + + virtual const TString& getMangledName() const override { return mangledName; } + virtual const TType& getType() const override { return returnType; } + virtual TBuiltInVariable getDeclaredBuiltInType() const { return declaredBuiltIn; } + virtual TType& getWritableType() override { return returnType; } + virtual void relateToOperator(TOperator o) { assert(writable); op = o; } + virtual TOperator getBuiltInOp() const { return op; } + virtual void setDefined() { assert(writable); defined = true; } + virtual bool isDefined() const { return defined; } + virtual void setPrototyped() { assert(writable); prototyped = true; } + virtual bool isPrototyped() const { return prototyped; } + virtual void setImplicitThis() { assert(writable); implicitThis = true; } + virtual bool hasImplicitThis() const { return implicitThis; } + virtual void setIllegalImplicitThis() { assert(writable); illegalImplicitThis = true; } + virtual bool hasIllegalImplicitThis() const { return illegalImplicitThis; } + + // Return total number of parameters + virtual int getParamCount() const { return static_cast(parameters.size()); } + // Return number of parameters with default values. + virtual int getDefaultParamCount() const { return defaultParamCount; } + // Return number of fixed parameters (without default values) + virtual int getFixedParamCount() const { return getParamCount() - getDefaultParamCount(); } + + virtual TParameter& operator[](int i) { assert(writable); return parameters[i]; } + virtual const TParameter& operator[](int i) const { return parameters[i]; } + + virtual void dump(TInfoSink &infoSink) const override; + +protected: + explicit TFunction(const TFunction&); + TFunction& operator=(const TFunction&); + + typedef TVector TParamList; + TParamList parameters; + TType returnType; + TBuiltInVariable declaredBuiltIn; + + TString mangledName; + TOperator op; + bool defined; + bool prototyped; + bool implicitThis; // True if this function is allowed to see all members of 'this' + bool illegalImplicitThis; // True if this function is not supposed to have access to dynamic members of 'this', + // even if it finds member variables in the symbol table. + // This is important for a static member function that has member variables in scope, + // but is not allowed to use them, or see hidden symbols instead. + int defaultParamCount; +}; + +// +// Members of anonymous blocks are a kind of TSymbol. They are not hidden in +// the symbol table behind a container; rather they are visible and point to +// their anonymous container. (The anonymous container is found through the +// member, not the other way around.) +// +class TAnonMember : public TSymbol { +public: + TAnonMember(const TString* n, unsigned int m, const TVariable& a, int an) : TSymbol(n), anonContainer(a), memberNumber(m), anonId(an) { } + virtual TAnonMember* clone() const; + virtual ~TAnonMember() { } + + virtual const TAnonMember* getAsAnonMember() const { return this; } + virtual const TVariable& getAnonContainer() const { return anonContainer; } + virtual unsigned int getMemberNumber() const { return memberNumber; } + + virtual const TType& getType() const + { + const TTypeList& types = *anonContainer.getType().getStruct(); + return *types[memberNumber].type; + } + + virtual TType& getWritableType() + { + assert(writable); + const TTypeList& types = *anonContainer.getType().getStruct(); + return *types[memberNumber].type; + } + + virtual int getAnonId() const { return anonId; } + virtual void dump(TInfoSink &infoSink) const; + +protected: + explicit TAnonMember(const TAnonMember&); + TAnonMember& operator=(const TAnonMember&); + + const TVariable& anonContainer; + unsigned int memberNumber; + int anonId; +}; + +class TSymbolTableLevel { +public: + POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator()) + TSymbolTableLevel() : defaultPrecision(0), anonId(0), thisLevel(false) { } + ~TSymbolTableLevel(); + + bool insert(TSymbol& symbol, bool separateNameSpaces) + { + // + // returning true means symbol was added to the table with no semantic errors + // + const TString& name = symbol.getName(); + if (name == "") { + symbol.getAsVariable()->setAnonId(anonId++); + // An empty name means an anonymous container, exposing its members to the external scope. + // Give it a name and insert its members in the symbol table, pointing to the container. + char buf[20]; + snprintf(buf, 20, "%s%d", AnonymousPrefix, symbol.getAsVariable()->getAnonId()); + symbol.changeName(NewPoolTString(buf)); + + return insertAnonymousMembers(symbol, 0); + } else { + // Check for redefinition errors: + // - STL itself will tell us if there is a direct name collision, with name mangling, at this level + // - additionally, check for function-redefining-variable name collisions + const TString& insertName = symbol.getMangledName(); + if (symbol.getAsFunction()) { + // make sure there isn't a variable of this name + if (! separateNameSpaces && level.find(name) != level.end()) + return false; + + // insert, and whatever happens is okay + level.insert(tLevelPair(insertName, &symbol)); + + return true; + } else + return level.insert(tLevelPair(insertName, &symbol)).second; + } + } + + // Add more members to an already inserted aggregate object + bool amend(TSymbol& symbol, int firstNewMember) + { + // See insert() for comments on basic explanation of insert. + // This operates similarly, but more simply. + // Only supporting amend of anonymous blocks so far. + if (IsAnonymous(symbol.getName())) + return insertAnonymousMembers(symbol, firstNewMember); + else + return false; + } + + bool insertAnonymousMembers(TSymbol& symbol, int firstMember) + { + const TTypeList& types = *symbol.getAsVariable()->getType().getStruct(); + for (unsigned int m = firstMember; m < types.size(); ++m) { + TAnonMember* member = new TAnonMember(&types[m].type->getFieldName(), m, *symbol.getAsVariable(), symbol.getAsVariable()->getAnonId()); + if (! level.insert(tLevelPair(member->getMangledName(), member)).second) + return false; + } + + return true; + } + + TSymbol* find(const TString& name) const + { + tLevel::const_iterator it = level.find(name); + if (it == level.end()) + return 0; + else + return (*it).second; + } + + void findFunctionNameList(const TString& name, TVector& list) + { + size_t parenAt = name.find_first_of('('); + TString base(name, 0, parenAt + 1); + + tLevel::const_iterator begin = level.lower_bound(base); + base[parenAt] = ')'; // assume ')' is lexically after '(' + tLevel::const_iterator end = level.upper_bound(base); + for (tLevel::const_iterator it = begin; it != end; ++it) + list.push_back(it->second->getAsFunction()); + } + + // See if there is already a function in the table having the given non-function-style name. + bool hasFunctionName(const TString& name) const + { + tLevel::const_iterator candidate = level.lower_bound(name); + if (candidate != level.end()) { + const TString& candidateName = (*candidate).first; + TString::size_type parenAt = candidateName.find_first_of('('); + if (parenAt != candidateName.npos && candidateName.compare(0, parenAt, name) == 0) + + return true; + } + + return false; + } + + // See if there is a variable at this level having the given non-function-style name. + // Return true if name is found, and set variable to true if the name was a variable. + bool findFunctionVariableName(const TString& name, bool& variable) const + { + tLevel::const_iterator candidate = level.lower_bound(name); + if (candidate != level.end()) { + const TString& candidateName = (*candidate).first; + TString::size_type parenAt = candidateName.find_first_of('('); + if (parenAt == candidateName.npos) { + // not a mangled name + if (candidateName == name) { + // found a variable name match + variable = true; + return true; + } + } else { + // a mangled name + if (candidateName.compare(0, parenAt, name) == 0) { + // found a function name match + variable = false; + return true; + } + } + } + + return false; + } + + // Use this to do a lazy 'push' of precision defaults the first time + // a precision statement is seen in a new scope. Leave it at 0 for + // when no push was needed. Thus, it is not the current defaults, + // it is what to restore the defaults to when popping a level. + void setPreviousDefaultPrecisions(const TPrecisionQualifier *p) + { + // can call multiple times at one scope, will only latch on first call, + // as we're tracking the previous scope's values, not the current values + if (defaultPrecision != 0) + return; + + defaultPrecision = new TPrecisionQualifier[EbtNumTypes]; + for (int t = 0; t < EbtNumTypes; ++t) + defaultPrecision[t] = p[t]; + } + + void getPreviousDefaultPrecisions(TPrecisionQualifier *p) + { + // can be called for table level pops that didn't set the + // defaults + if (defaultPrecision == 0 || p == 0) + return; + + for (int t = 0; t < EbtNumTypes; ++t) + p[t] = defaultPrecision[t]; + } + + void relateToOperator(const char* name, TOperator op); + void setFunctionExtensions(const char* name, int num, const char* const extensions[]); + void dump(TInfoSink &infoSink) const; + TSymbolTableLevel* clone() const; + void readOnly(); + + void setThisLevel() { thisLevel = true; } + bool isThisLevel() const { return thisLevel; } + +protected: + explicit TSymbolTableLevel(TSymbolTableLevel&); + TSymbolTableLevel& operator=(TSymbolTableLevel&); + + typedef std::map, pool_allocator > > tLevel; + typedef const tLevel::value_type tLevelPair; + typedef std::pair tInsertResult; + + tLevel level; // named mappings + TPrecisionQualifier *defaultPrecision; + int anonId; + bool thisLevel; // True if this level of the symbol table is a structure scope containing member function + // that are supposed to see anonymous access to member variables. +}; + +class TSymbolTable { +public: + TSymbolTable() : uniqueId(0), noBuiltInRedeclarations(false), separateNameSpaces(false), adoptedLevels(0) + { + // + // This symbol table cannot be used until push() is called. + // + } + ~TSymbolTable() + { + // this can be called explicitly; safest to code it so it can be called multiple times + + // don't deallocate levels passed in from elsewhere + while (table.size() > adoptedLevels) + pop(0); + } + + void adoptLevels(TSymbolTable& symTable) + { + for (unsigned int level = 0; level < symTable.table.size(); ++level) { + table.push_back(symTable.table[level]); + ++adoptedLevels; + } + uniqueId = symTable.uniqueId; + noBuiltInRedeclarations = symTable.noBuiltInRedeclarations; + separateNameSpaces = symTable.separateNameSpaces; + } + + // + // While level adopting is generic, the methods below enact a the following + // convention for levels: + // 0: common built-ins shared across all stages, all compiles, only one copy for all symbol tables + // 1: per-stage built-ins, shared across all compiles, but a different copy per stage + // 2: built-ins specific to a compile, like resources that are context-dependent, or redeclared built-ins + // 3: user-shader globals + // +protected: + static const int globalLevel = 3; + bool isSharedLevel(int level) { return level <= 1; } // exclude all per-compile levels + bool isBuiltInLevel(int level) { return level <= 2; } // exclude user globals + bool isGlobalLevel(int level) { return level <= globalLevel; } // include user globals +public: + bool isEmpty() { return table.size() == 0; } + bool atBuiltInLevel() { return isBuiltInLevel(currentLevel()); } + bool atGlobalLevel() { return isGlobalLevel(currentLevel()); } + + void setNoBuiltInRedeclarations() { noBuiltInRedeclarations = true; } + void setSeparateNameSpaces() { separateNameSpaces = true; } + + void push() + { + table.push_back(new TSymbolTableLevel); + } + + // Make a new symbol-table level to represent the scope introduced by a structure + // containing member functions, such that the member functions can find anonymous + // references to member variables. + // + // 'thisSymbol' should have a name of "" to trigger anonymous structure-member + // symbol finds. + void pushThis(TSymbol& thisSymbol) + { + assert(thisSymbol.getName().size() == 0); + table.push_back(new TSymbolTableLevel); + table.back()->setThisLevel(); + insert(thisSymbol); + } + + void pop(TPrecisionQualifier *p) + { + table[currentLevel()]->getPreviousDefaultPrecisions(p); + delete table.back(); + table.pop_back(); + } + + // + // Insert a visible symbol into the symbol table so it can + // be found later by name. + // + // Returns false if the was a name collision. + // + bool insert(TSymbol& symbol) + { + symbol.setUniqueId(++uniqueId); + + // make sure there isn't a function of this variable name + if (! separateNameSpaces && ! symbol.getAsFunction() && table[currentLevel()]->hasFunctionName(symbol.getName())) + return false; + + // check for not overloading or redefining a built-in function + if (noBuiltInRedeclarations) { + if (atGlobalLevel() && currentLevel() > 0) { + if (table[0]->hasFunctionName(symbol.getName())) + return false; + if (currentLevel() > 1 && table[1]->hasFunctionName(symbol.getName())) + return false; + } + } + + return table[currentLevel()]->insert(symbol, separateNameSpaces); + } + + // Add more members to an already inserted aggregate object + bool amend(TSymbol& symbol, int firstNewMember) + { + // See insert() for comments on basic explanation of insert. + // This operates similarly, but more simply. + return table[currentLevel()]->amend(symbol, firstNewMember); + } + + // + // To allocate an internal temporary, which will need to be uniquely + // identified by the consumer of the AST, but never need to + // found by doing a symbol table search by name, hence allowed an + // arbitrary name in the symbol with no worry of collision. + // + void makeInternalVariable(TSymbol& symbol) + { + symbol.setUniqueId(++uniqueId); + } + + // + // Copy a variable or anonymous member's structure from a shared level so that + // it can be added (soon after return) to the symbol table where it can be + // modified without impacting other users of the shared table. + // + TSymbol* copyUpDeferredInsert(TSymbol* shared) + { + if (shared->getAsVariable()) { + TSymbol* copy = shared->clone(); + copy->setUniqueId(shared->getUniqueId()); + return copy; + } else { + const TAnonMember* anon = shared->getAsAnonMember(); + assert(anon); + TVariable* container = anon->getAnonContainer().clone(); + container->changeName(NewPoolTString("")); + container->setUniqueId(anon->getAnonContainer().getUniqueId()); + return container; + } + } + + TSymbol* copyUp(TSymbol* shared) + { + TSymbol* copy = copyUpDeferredInsert(shared); + table[globalLevel]->insert(*copy, separateNameSpaces); + if (shared->getAsVariable()) + return copy; + else { + // return the copy of the anonymous member + return table[globalLevel]->find(shared->getName()); + } + } + + // 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) + { + int level = currentLevel(); + TSymbol* symbol; + do { + symbol = table[level]->find(name); + --level; + } while (symbol == 0 && level >= 0); + level++; + if (builtIn) + *builtIn = isBuiltInLevel(level); + if (currentScope) + *currentScope = isGlobalLevel(currentLevel()) || level == currentLevel(); // consider shared levels as "current scope" WRT user globals + + return symbol; + } + + // Find of a symbol that returns how many layers deep of nested + // structures-with-member-functions ('this' scopes) deep the symbol was + // found in. + TSymbol* find(const TString& name, int& thisDepth) + { + int level = currentLevel(); + TSymbol* symbol; + thisDepth = 0; + do { + if (table[level]->isThisLevel()) + ++thisDepth; + symbol = table[level]->find(name); + --level; + } while (symbol == 0 && level >= 0); + + if (! table[level + 1]->isThisLevel()) + thisDepth = 0; + + return symbol; + } + + bool isFunctionNameVariable(const TString& name) const + { + if (separateNameSpaces) + return false; + + int level = currentLevel(); + do { + bool variable; + bool found = table[level]->findFunctionVariableName(name, variable); + if (found) + return variable; + --level; + } while (level >= 0); + + return false; + } + + void findFunctionNameList(const TString& name, TVector& list, bool& builtIn) + { + // For user levels, return the set found in the first scope with a match + builtIn = false; + int level = currentLevel(); + do { + table[level]->findFunctionNameList(name, list); + --level; + } while (list.empty() && level >= globalLevel); + + if (! list.empty()) + return; + + // Gather across all built-in levels; they don't hide each other + builtIn = true; + do { + table[level]->findFunctionNameList(name, list); + --level; + } while (level >= 0); + } + + void relateToOperator(const char* name, TOperator op) + { + for (unsigned int level = 0; level < table.size(); ++level) + table[level]->relateToOperator(name, op); + } + + void setFunctionExtensions(const char* name, int num, const char* const extensions[]) + { + for (unsigned int level = 0; level < table.size(); ++level) + table[level]->setFunctionExtensions(name, num, extensions); + } + + void setVariableExtensions(const char* name, int num, const char* const extensions[]) + { + TSymbol* symbol = find(TString(name)); + if (symbol) + symbol->setExtensions(num, extensions); + } + + int getMaxSymbolId() { return uniqueId; } + void dump(TInfoSink &infoSink) const; + void copyTable(const TSymbolTable& copyOf); + + void setPreviousDefaultPrecisions(TPrecisionQualifier *p) { table[currentLevel()]->setPreviousDefaultPrecisions(p); } + + void readOnly() + { + for (unsigned int level = 0; level < table.size(); ++level) + table[level]->readOnly(); + } + +protected: + TSymbolTable(TSymbolTable&); + TSymbolTable& operator=(TSymbolTableLevel&); + + int currentLevel() const { return static_cast(table.size()) - 1; } + + std::vector table; + int uniqueId; // for unique identification in code generation + bool noBuiltInRedeclarations; + bool separateNameSpaces; + unsigned int adoptedLevels; +}; + +} // end namespace glslang + +#endif // _SYMBOL_TABLE_INCLUDED_ diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Versions.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Versions.cpp new file mode 100644 index 0000000..528333f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Versions.cpp @@ -0,0 +1,757 @@ +// +// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +// Copyright (C) 2012-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. +// + +// +// Help manage multiple profiles, versions, extensions etc. +// +// These don't return error codes, as the presumption is parsing will +// always continue as if the tested feature were enabled, and thus there +// is no error recovery needed. +// + +// +// HOW TO add a feature enabled by an extension. +// +// To add a new hypothetical "Feature F" to the front end, where an extension +// "XXX_extension_X" can be used to enable the feature, do the following. +// +// OVERVIEW: Specific features are what are error-checked for, not +// extensions: A specific Feature F might be enabled by an extension, or a +// particular version in a particular profile, or a stage, or combinations, etc. +// +// The basic mechanism is to use the following to "declare" all the things that +// enable/disable Feature F, in a code path that implements Feature F: +// +// requireProfile() +// profileRequires() +// requireStage() +// checkDeprecated() +// requireNotRemoved() +// requireExtensions() +// +// Typically, only the first two calls are needed. They go into a code path that +// implements Feature F, and will log the proper error/warning messages. Parsing +// will then always continue as if the tested feature was enabled. +// +// There is typically no if-testing or conditional parsing, just insertion of the calls above. +// However, if symbols specific to the extension are added (step 5), they will +// only be added under tests that the minimum version and profile are present. +// +// 1) Add a symbol name for the extension string at the bottom of Versions.h: +// +// const char* const XXX_extension_X = "XXX_extension_X"; +// +// 2) Add extension initialization to TParseVersions::initializeExtensionBehavior(), +// the first function below: +// +// extensionBehavior[XXX_extension_X] = EBhDisable; +// +// 3) Add any preprocessor directives etc. in the next function, TParseVersions::getPreamble(): +// +// "#define XXX_extension_X 1\n" +// +// The new-line is important, as that ends preprocess tokens. +// +// 4) Insert a profile check in the feature's path (unless all profiles support the feature, +// for some version level). That is, call requireProfile() to constrain the profiles, e.g.: +// +// // ... in a path specific to Feature F... +// requireProfile(loc, +// ECoreProfile | ECompatibilityProfile, +// "Feature F"); +// +// 5) For each profile that supports the feature, insert version/extension checks: +// +// The mostly likely scenario is that Feature F can only be used with a +// particular profile if XXX_extension_X is present or the version is +// high enough that the core specification already incorporated it. +// +// // following the requireProfile() call... +// profileRequires(loc, +// ECoreProfile | ECompatibilityProfile, +// 420, // 0 if no version incorporated the feature into the core spec. +// XXX_extension_X, // can be a list of extensions that all add the feature +// "Feature F Description"); +// +// This allows the feature if either A) one of the extensions is enabled or +// B) the version is high enough. If no version yet incorporates the feature +// into core, pass in 0. +// +// This can be called multiple times, if different profiles support the +// feature starting at different version numbers or with different +// extensions. +// +// This must be called for each profile allowed by the initial call to requireProfile(). +// +// Profiles are all masks, which can be "or"-ed together. +// +// ENoProfile +// ECoreProfile +// ECompatibilityProfile +// EEsProfile +// +// The ENoProfile profile is only for desktop, before profiles showed up in version 150; +// All other #version with no profile default to either es or core, and so have profiles. +// +// You can select all but a particular profile using ~. The following basically means "desktop": +// +// ~EEsProfile +// +// 6) If built-in symbols are added by the extension, add them in Initialize.cpp: Their use +// will be automatically error checked against the extensions enabled at that moment. +// see the comment at the top of Initialize.cpp for where to put them. Establish them at +// the earliest release that supports the extension. Then, tag them with the +// set of extensions that both enable them and are necessary, given the version of the symbol +// table. (There is a different symbol table for each version.) +// + +#include "parseVersions.h" +#include "localintermediate.h" + +namespace glslang { + +// +// Initialize all extensions, almost always to 'disable', as once their features +// are incorporated into a core version, their features are supported through allowing that +// core version, not through a pseudo-enablement of the extension. +// +void TParseVersions::initializeExtensionBehavior() +{ + extensionBehavior[E_GL_OES_texture_3D] = EBhDisable; + 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_EXT_shader_texture_lod] = EBhDisable; + + extensionBehavior[E_GL_ARB_texture_rectangle] = EBhDisable; + extensionBehavior[E_GL_3DL_array_objects] = EBhDisable; + extensionBehavior[E_GL_ARB_shading_language_420pack] = EBhDisable; + extensionBehavior[E_GL_ARB_texture_gather] = EBhDisable; + extensionBehavior[E_GL_ARB_gpu_shader5] = EBhDisablePartial; + extensionBehavior[E_GL_ARB_separate_shader_objects] = EBhDisable; + extensionBehavior[E_GL_ARB_compute_shader] = EBhDisable; + extensionBehavior[E_GL_ARB_tessellation_shader] = EBhDisable; + extensionBehavior[E_GL_ARB_enhanced_layouts] = EBhDisable; + extensionBehavior[E_GL_ARB_texture_cube_map_array] = EBhDisable; + extensionBehavior[E_GL_ARB_shader_texture_lod] = EBhDisable; + extensionBehavior[E_GL_ARB_explicit_attrib_location] = EBhDisable; + extensionBehavior[E_GL_ARB_shader_image_load_store] = EBhDisable; + extensionBehavior[E_GL_ARB_shader_atomic_counters] = EBhDisable; + extensionBehavior[E_GL_ARB_shader_draw_parameters] = EBhDisable; + extensionBehavior[E_GL_ARB_shader_group_vote] = EBhDisable; + extensionBehavior[E_GL_ARB_derivative_control] = EBhDisable; + extensionBehavior[E_GL_ARB_shader_texture_image_samples] = EBhDisable; + extensionBehavior[E_GL_ARB_viewport_array] = EBhDisable; + extensionBehavior[E_GL_ARB_gpu_shader_int64] = EBhDisable; + 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_cull_distance] = EBhDisable; // present for 4.5, but need extension control over block members + + extensionBehavior[E_GL_EXT_shader_non_constant_global_initializers] = EBhDisable; + extensionBehavior[E_GL_EXT_shader_image_load_formatted] = EBhDisable; + + // #line and #include + extensionBehavior[E_GL_GOOGLE_cpp_style_line_directive] = EBhDisable; + extensionBehavior[E_GL_GOOGLE_include_directive] = EBhDisable; + +#ifdef AMD_EXTENSIONS + extensionBehavior[E_GL_AMD_shader_ballot] = EBhDisable; + extensionBehavior[E_GL_AMD_shader_trinary_minmax] = EBhDisable; + 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; +#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; +#endif + + // AEP + extensionBehavior[E_GL_ANDROID_extension_pack_es31a] = EBhDisable; + extensionBehavior[E_GL_KHR_blend_equation_advanced] = EBhDisable; + extensionBehavior[E_GL_OES_sample_variables] = EBhDisable; + extensionBehavior[E_GL_OES_shader_image_atomic] = EBhDisable; + extensionBehavior[E_GL_OES_shader_multisample_interpolation] = EBhDisable; + extensionBehavior[E_GL_OES_texture_storage_multisample_2d_array] = EBhDisable; + extensionBehavior[E_GL_EXT_geometry_shader] = EBhDisable; + extensionBehavior[E_GL_EXT_geometry_point_size] = EBhDisable; + extensionBehavior[E_GL_EXT_gpu_shader5] = EBhDisable; + extensionBehavior[E_GL_EXT_primitive_bounding_box] = EBhDisable; + extensionBehavior[E_GL_EXT_shader_io_blocks] = EBhDisable; + extensionBehavior[E_GL_EXT_tessellation_shader] = EBhDisable; + extensionBehavior[E_GL_EXT_tessellation_point_size] = EBhDisable; + extensionBehavior[E_GL_EXT_texture_buffer] = EBhDisable; + extensionBehavior[E_GL_EXT_texture_cube_map_array] = EBhDisable; + + // OES matching AEP + extensionBehavior[E_GL_OES_geometry_shader] = EBhDisable; + extensionBehavior[E_GL_OES_geometry_point_size] = EBhDisable; + extensionBehavior[E_GL_OES_gpu_shader5] = EBhDisable; + extensionBehavior[E_GL_OES_primitive_bounding_box] = EBhDisable; + extensionBehavior[E_GL_OES_shader_io_blocks] = EBhDisable; + extensionBehavior[E_GL_OES_tessellation_shader] = EBhDisable; + extensionBehavior[E_GL_OES_tessellation_point_size] = EBhDisable; + extensionBehavior[E_GL_OES_texture_buffer] = EBhDisable; + extensionBehavior[E_GL_OES_texture_cube_map_array] = EBhDisable; + + // EXT extensions + extensionBehavior[E_GL_EXT_device_group] = EBhDisable; + extensionBehavior[E_GL_EXT_multiview] = EBhDisable; +} + +// Get code that is not part of a shared symbol table, is specific to this shader, +// or needed by the preprocessor (which does not use a shared symbol table). +void TParseVersions::getPreamble(std::string& preamble) +{ + if (profile == EEsProfile) { + preamble = + "#define GL_ES 1\n" + "#define GL_FRAGMENT_PRECISION_HIGH 1\n" + "#define GL_OES_texture_3D 1\n" + "#define GL_OES_standard_derivatives 1\n" + "#define GL_EXT_frag_depth 1\n" + "#define GL_OES_EGL_image_external 1\n" + "#define GL_EXT_shader_texture_lod 1\n" + + // AEP + "#define GL_ANDROID_extension_pack_es31a 1\n" + "#define GL_KHR_blend_equation_advanced 1\n" + "#define GL_OES_sample_variables 1\n" + "#define GL_OES_shader_image_atomic 1\n" + "#define GL_OES_shader_multisample_interpolation 1\n" + "#define GL_OES_texture_storage_multisample_2d_array 1\n" + "#define GL_EXT_geometry_shader 1\n" + "#define GL_EXT_geometry_point_size 1\n" + "#define GL_EXT_gpu_shader5 1\n" + "#define GL_EXT_primitive_bounding_box 1\n" + "#define GL_EXT_shader_io_blocks 1\n" + "#define GL_EXT_tessellation_shader 1\n" + "#define GL_EXT_tessellation_point_size 1\n" + "#define GL_EXT_texture_buffer 1\n" + "#define GL_EXT_texture_cube_map_array 1\n" + + // OES matching AEP + "#define GL_OES_geometry_shader 1\n" + "#define GL_OES_geometry_point_size 1\n" + "#define GL_OES_gpu_shader5 1\n" + "#define GL_OES_primitive_bounding_box 1\n" + "#define GL_OES_shader_io_blocks 1\n" + "#define GL_OES_tessellation_shader 1\n" + "#define GL_OES_tessellation_point_size 1\n" + "#define GL_OES_texture_buffer 1\n" + "#define GL_OES_texture_cube_map_array 1\n" + "#define GL_EXT_shader_non_constant_global_initializers 1\n" + ; + } else { + preamble = + "#define GL_FRAGMENT_PRECISION_HIGH 1\n" + "#define GL_ARB_texture_rectangle 1\n" + "#define GL_ARB_shading_language_420pack 1\n" + "#define GL_ARB_texture_gather 1\n" + "#define GL_ARB_gpu_shader5 1\n" + "#define GL_ARB_separate_shader_objects 1\n" + "#define GL_ARB_compute_shader 1\n" + "#define GL_ARB_tessellation_shader 1\n" + "#define GL_ARB_enhanced_layouts 1\n" + "#define GL_ARB_texture_cube_map_array 1\n" + "#define GL_ARB_shader_texture_lod 1\n" + "#define GL_ARB_explicit_attrib_location 1\n" + "#define GL_ARB_shader_image_load_store 1\n" + "#define GL_ARB_shader_atomic_counters 1\n" + "#define GL_ARB_shader_draw_parameters 1\n" + "#define GL_ARB_shader_group_vote 1\n" + "#define GL_ARB_derivative_control 1\n" + "#define GL_ARB_shader_texture_image_samples 1\n" + "#define GL_ARB_viewport_array 1\n" + "#define GL_ARB_gpu_shader_int64 1\n" + "#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_cull_distance 1\n" // present for 4.5, but need extension control over block members + "#define GL_EXT_shader_non_constant_global_initializers 1\n" + "#define GL_EXT_shader_image_load_formatted 1\n" + +#ifdef AMD_EXTENSIONS + "#define GL_AMD_shader_ballot 1\n" + "#define GL_AMD_shader_trinary_minmax 1\n" + "#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" +#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" +#endif + ; + + if (version >= 150) { + // define GL_core_profile and GL_compatibility_profile + preamble += "#define GL_core_profile 1\n"; + + if (profile == ECompatibilityProfile) + preamble += "#define GL_compatibility_profile 1\n"; + } + } + + if ((profile != EEsProfile && version >= 140) || + (profile == EEsProfile && version >= 310)) { + preamble += + "#define GL_EXT_device_group 1\n" + "#define GL_EXT_multiview 1\n" + ; + } + + // #line and #include + preamble += + "#define GL_GOOGLE_cpp_style_line_directive 1\n" + "#define GL_GOOGLE_include_directive 1\n" + ; + + // #define VULKAN XXXX + const int numberBufSize = 12; + char numberBuf[numberBufSize]; + if (spvVersion.vulkan > 0) { + preamble += "#define VULKAN "; + snprintf(numberBuf, numberBufSize, "%d", spvVersion.vulkan); + preamble += numberBuf; + preamble += "\n"; + } + // #define GL_SPIRV XXXX + if (spvVersion.openGl > 0) { + preamble += "#define GL_SPIRV "; + snprintf(numberBuf, numberBufSize, "%d", spvVersion.openGl); + preamble += numberBuf; + preamble += "\n"; + } + +} + +// +// When to use requireProfile(): +// +// Use if only some profiles support a feature. However, if within a profile the feature +// is version or extension specific, follow this call with calls to profileRequires(). +// +// Operation: If the current profile is not one of the profileMask, +// give an error message. +// +void TParseVersions::requireProfile(const TSourceLoc& loc, int profileMask, const char* featureDesc) +{ + if (! (profile & profileMask)) + error(loc, "not supported with this profile:", featureDesc, ProfileName(profile)); +} + +// +// Map from stage enum to externally readable text name. +// +const char* StageName(EShLanguage stage) +{ + switch(stage) { + case EShLangVertex: return "vertex"; + case EShLangTessControl: return "tessellation control"; + case EShLangTessEvaluation: return "tessellation evaluation"; + case EShLangGeometry: return "geometry"; + case EShLangFragment: return "fragment"; + case EShLangCompute: return "compute"; + default: return "unknown stage"; + } +} + +// +// When to use profileRequires(): +// +// If a set of profiles have the same requirements for what version or extensions +// are needed to support a feature. +// +// It must be called for each profile that needs protection. Use requireProfile() first +// to reduce that set of profiles. +// +// Operation: Will issue warnings/errors based on the current profile, version, and extension +// behaviors. It only checks extensions when the current profile is one of the profileMask. +// +// A minVersion of 0 means no version of the profileMask support this in core, +// the extension must be present. +// + +// entry point that takes multiple extensions +void TParseVersions::profileRequires(const TSourceLoc& loc, int profileMask, int minVersion, int numExtensions, const char* const extensions[], const char* featureDesc) +{ + if (profile & profileMask) { + bool okay = false; + if (minVersion > 0 && version >= minVersion) + okay = true; + for (int i = 0; i < numExtensions; ++i) { + switch (getExtensionBehavior(extensions[i])) { + case EBhWarn: + infoSink.info.message(EPrefixWarning, ("extension " + TString(extensions[i]) + " is being used for " + featureDesc).c_str(), loc); + // fall through + case EBhRequire: + case EBhEnable: + okay = true; + break; + default: break; // some compilers want this + } + } + + if (! okay) + error(loc, "not supported for this version or the enabled extensions", featureDesc, ""); + } +} + +// entry point for the above that takes a single extension +void TParseVersions::profileRequires(const TSourceLoc& loc, int profileMask, int minVersion, const char* extension, const char* featureDesc) +{ + profileRequires(loc, profileMask, minVersion, extension ? 1 : 0, &extension, featureDesc); +} + +// +// When to use requireStage() +// +// If only some stages support a feature. +// +// Operation: If the current stage is not present, give an error message. +// +void TParseVersions::requireStage(const TSourceLoc& loc, EShLanguageMask languageMask, const char* featureDesc) +{ + if (((1 << language) & languageMask) == 0) + error(loc, "not supported in this stage:", featureDesc, StageName(language)); +} + +// If only one stage supports a feature, this can be called. But, all supporting stages +// must be specified with one call. +void TParseVersions::requireStage(const TSourceLoc& loc, EShLanguage stage, const char* featureDesc) +{ + requireStage(loc, static_cast(1 << stage), featureDesc); +} + +// +// Within a set of profiles, see if a feature is deprecated and give an error or warning based on whether +// a future compatibility context is being use. +// +void TParseVersions::checkDeprecated(const TSourceLoc& loc, int profileMask, int depVersion, const char* featureDesc) +{ + if (profile & profileMask) { + if (version >= depVersion) { + if (forwardCompatible) + error(loc, "deprecated, may be removed in future release", featureDesc, ""); + else if (! suppressWarnings()) + infoSink.info.message(EPrefixWarning, (TString(featureDesc) + " deprecated in version " + + String(depVersion) + "; may be removed in future release").c_str(), loc); + } + } +} + +// +// Within a set of profiles, see if a feature has now been removed and if so, give an error. +// The version argument is the first version no longer having the feature. +// +void TParseVersions::requireNotRemoved(const TSourceLoc& loc, int profileMask, int removedVersion, const char* featureDesc) +{ + if (profile & profileMask) { + if (version >= removedVersion) { + const int maxSize = 60; + char buf[maxSize]; + snprintf(buf, maxSize, "%s profile; removed in version %d", ProfileName(profile), removedVersion); + error(loc, "no longer supported in", featureDesc, buf); + } + } +} + +// 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) +{ + // First, see if any of the extensions are enabled + for (int i = 0; i < numExtensions; ++i) { + TExtensionBehavior behavior = getExtensionBehavior(extensions[i]); + if (behavior == EBhEnable || behavior == EBhRequire) + return true; + } + + // See if any extensions want to give a warning on use; give warnings for all such extensions + bool warned = false; + for (int i = 0; i < numExtensions; ++i) { + TExtensionBehavior behavior = getExtensionBehavior(extensions[i]); + if (behavior == EBhDisable && relaxedErrors()) { + infoSink.info.message(EPrefixWarning, "The following extension must be enabled to use this feature:", loc); + behavior = EBhWarn; + } + if (behavior == EBhWarn) { + infoSink.info.message(EPrefixWarning, ("extension " + TString(extensions[i]) + " is being used for " + featureDesc).c_str(), loc); + warned = true; + } + } + if (warned) + return true; + return false; +} + +// +// Use when there are no profile/version to check, it's just an error if one of the +// extensions is not present. +// +void TParseVersions::requireExtensions(const TSourceLoc& loc, int numExtensions, const char* const extensions[], const char* featureDesc) +{ + if (checkExtensionsRequested(loc, numExtensions, extensions, featureDesc)) return; + + // If we get this far, give errors explaining what extensions are needed + if (numExtensions == 1) + error(loc, "required extension not requested:", featureDesc, extensions[0]); + else { + error(loc, "required extension not requested:", featureDesc, "Possible extensions include:"); + for (int i = 0; i < numExtensions; ++i) + infoSink.info.message(EPrefixNone, extensions[i]); + } +} + +// +// Use by preprocessor when there are no profile/version to check, it's just an error if one of the +// extensions is not present. +// +void TParseVersions::ppRequireExtensions(const TSourceLoc& loc, int numExtensions, const char* const extensions[], const char* featureDesc) +{ + if (checkExtensionsRequested(loc, numExtensions, extensions, featureDesc)) return; + + // If we get this far, give errors explaining what extensions are needed + if (numExtensions == 1) + ppError(loc, "required extension not requested:", featureDesc, extensions[0]); + else { + ppError(loc, "required extension not requested:", featureDesc, "Possible extensions include:"); + for (int i = 0; i < numExtensions; ++i) + infoSink.info.message(EPrefixNone, extensions[i]); + } +} + +TExtensionBehavior TParseVersions::getExtensionBehavior(const char* extension) +{ + auto iter = extensionBehavior.find(TString(extension)); + if (iter == extensionBehavior.end()) + return EBhMissing; + else + return iter->second; +} + +// Returns true if the given extension is set to enable, require, or warn. +bool TParseVersions::extensionTurnedOn(const char* const extension) +{ + switch (getExtensionBehavior(extension)) { + case EBhEnable: + case EBhRequire: + case EBhWarn: + return true; + default: + break; + } + return false; +} +// See if any of the extensions are set to enable, require, or warn. +bool TParseVersions::extensionsTurnedOn(int numExtensions, const char* const extensions[]) +{ + for (int i = 0; i < numExtensions; ++i) { + if (extensionTurnedOn(extensions[i])) return true; + } + return false; +} + +// +// Change the current state of an extension's behavior. +// +void TParseVersions::updateExtensionBehavior(int line, const char* extension, const char* behaviorString) +{ + // Translate from text string of extension's behavior to an enum. + TExtensionBehavior behavior = EBhDisable; + if (! strcmp("require", behaviorString)) + behavior = EBhRequire; + else if (! strcmp("enable", behaviorString)) + behavior = EBhEnable; + else if (! strcmp("disable", behaviorString)) + behavior = EBhDisable; + else if (! strcmp("warn", behaviorString)) + behavior = EBhWarn; + else { + error(getCurrentLoc(), "behavior not supported:", "#extension", behaviorString); + return; + } + + // update the requested extension + updateExtensionBehavior(extension, behavior); + + // see if need to propagate to implicitly modified things + if (strcmp(extension, "GL_ANDROID_extension_pack_es31a") == 0) { + // to everything in AEP + updateExtensionBehavior(line, "GL_KHR_blend_equation_advanced", behaviorString); + updateExtensionBehavior(line, "GL_OES_sample_variables", behaviorString); + updateExtensionBehavior(line, "GL_OES_shader_image_atomic", behaviorString); + updateExtensionBehavior(line, "GL_OES_shader_multisample_interpolation", behaviorString); + updateExtensionBehavior(line, "GL_OES_texture_storage_multisample_2d_array", behaviorString); + updateExtensionBehavior(line, "GL_EXT_geometry_shader", behaviorString); + updateExtensionBehavior(line, "GL_EXT_gpu_shader5", behaviorString); + updateExtensionBehavior(line, "GL_EXT_primitive_bounding_box", behaviorString); + updateExtensionBehavior(line, "GL_EXT_shader_io_blocks", behaviorString); + updateExtensionBehavior(line, "GL_EXT_tessellation_shader", behaviorString); + updateExtensionBehavior(line, "GL_EXT_texture_buffer", behaviorString); + updateExtensionBehavior(line, "GL_EXT_texture_cube_map_array", behaviorString); + } + // geometry to io_blocks + else if (strcmp(extension, "GL_EXT_geometry_shader") == 0) + updateExtensionBehavior(line, "GL_EXT_shader_io_blocks", behaviorString); + else if (strcmp(extension, "GL_OES_geometry_shader") == 0) + updateExtensionBehavior(line, "GL_OES_shader_io_blocks", behaviorString); + // tessellation to io_blocks + else if (strcmp(extension, "GL_EXT_tessellation_shader") == 0) + updateExtensionBehavior(line, "GL_EXT_shader_io_blocks", behaviorString); + else if (strcmp(extension, "GL_OES_tessellation_shader") == 0) + updateExtensionBehavior(line, "GL_OES_shader_io_blocks", behaviorString); + else if (strcmp(extension, "GL_GOOGLE_include_directive") == 0) + updateExtensionBehavior(line, "GL_GOOGLE_cpp_style_line_directive", behaviorString); +} + +void TParseVersions::updateExtensionBehavior(const char* extension, TExtensionBehavior behavior) +{ + // Update the current behavior + if (strcmp(extension, "all") == 0) { + // special case for the 'all' extension; apply it to every extension present + if (behavior == EBhRequire || behavior == EBhEnable) { + error(getCurrentLoc(), "extension 'all' cannot have 'require' or 'enable' behavior", "#extension", ""); + return; + } else { + for (auto iter = extensionBehavior.begin(); iter != extensionBehavior.end(); ++iter) + iter->second = behavior; + } + } else { + // Do the update for this single extension + auto iter = extensionBehavior.find(TString(extension)); + if (iter == extensionBehavior.end()) { + switch (behavior) { + case EBhRequire: + error(getCurrentLoc(), "extension not supported:", "#extension", extension); + break; + case EBhEnable: + case EBhWarn: + case EBhDisable: + warn(getCurrentLoc(), "extension not supported:", "#extension", extension); + break; + default: + assert(0 && "unexpected behavior"); + } + + return; + } else { + if (iter->second == EBhDisablePartial) + warn(getCurrentLoc(), "extension is only partially supported:", "#extension", extension); + if (behavior == EBhEnable || behavior == EBhRequire) + intermediate.addRequestedExtension(extension); + iter->second = behavior; + } + } +} + +// Call for any operation needing full GLSL integer data-type support. +void TParseVersions::fullIntegerCheck(const TSourceLoc& loc, const char* op) +{ + profileRequires(loc, ENoProfile, 130, nullptr, op); + profileRequires(loc, EEsProfile, 300, nullptr, op); +} + +// Call for any operation needing GLSL double data-type support. +void TParseVersions::doubleCheck(const TSourceLoc& loc, const char* op) +{ + requireProfile(loc, ECoreProfile | ECompatibilityProfile, op); + profileRequires(loc, ECoreProfile, 400, nullptr, op); + profileRequires(loc, ECompatibilityProfile, 400, nullptr, op); +} + +#ifdef AMD_EXTENSIONS +// Call for any operation needing float16 data-type support. +void TParseVersions::float16Check(const TSourceLoc& loc, const char* op, bool 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); + profileRequires(loc, ECompatibilityProfile, 450, nullptr, op); + } +} +#endif + +// Call for any operation needing GLSL 64-bit integer data-type support. +void TParseVersions::int64Check(const TSourceLoc& loc, const char* op, bool builtIn) +{ + if (! builtIn) { + requireExtensions(loc, 1, &E_GL_ARB_gpu_shader_int64, "shader int64"); + requireProfile(loc, ECoreProfile | ECompatibilityProfile, op); + profileRequires(loc, ECoreProfile, 450, nullptr, op); + profileRequires(loc, ECompatibilityProfile, 450, nullptr, op); + } +} + +// Call for any operation removed because SPIR-V is in use. +void TParseVersions::spvRemoved(const TSourceLoc& loc, const char* op) +{ + if (spvVersion.spv != 0) + error(loc, "not allowed when generating SPIR-V", op, ""); +} + +// Call for any operation removed because Vulkan SPIR-V is being generated. +void TParseVersions::vulkanRemoved(const TSourceLoc& loc, const char* op) +{ + if (spvVersion.vulkan >= 100) + error(loc, "not allowed when using GLSL for Vulkan", op, ""); +} + +// Call for any operation that requires Vulkan. +void TParseVersions::requireVulkan(const TSourceLoc& loc, const char* op) +{ + if (spvVersion.vulkan == 0) + error(loc, "only allowed when using GLSL for Vulkan", op, ""); +} + +// Call for any operation that requires SPIR-V. +void TParseVersions::requireSpv(const TSourceLoc& loc, const char* op) +{ + if (spvVersion.spv == 0) + error(loc, "only allowed when generating SPIR-V", op, ""); +} + +} // end namespace glslang diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Versions.h b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Versions.h new file mode 100644 index 0000000..7f5d33d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Versions.h @@ -0,0 +1,224 @@ +// +// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +// Copyright (C) 2012-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. +// +#ifndef _VERSIONS_INCLUDED_ +#define _VERSIONS_INCLUDED_ + +// +// Help manage multiple profiles, versions, extensions etc. +// + +// +// Profiles are set up for masking operations, so queries can be done on multiple +// profiles at the same time. +// +// Don't maintain an ordinal set of enums (0,1,2,3...) to avoid all possible +// defects from mixing the two different forms. +// +typedef enum { + EBadProfile = 0, + ENoProfile = (1 << 0), // only for desktop, before profiles showed up + ECoreProfile = (1 << 1), + ECompatibilityProfile = (1 << 2), + EEsProfile = (1 << 3) +} EProfile; + +namespace glslang { + +// +// Map from profile enum to externally readable text name. +// +inline const char* ProfileName(EProfile profile) +{ + switch (profile) { + case ENoProfile: return "none"; + case ECoreProfile: return "core"; + case ECompatibilityProfile: return "compatibility"; + case EEsProfile: return "es"; + default: return "unknown profile"; + } +} + +// +// SPIR-V has versions for multiple things; tie them together. +// 0 means a target or rule set is not enabled. +// +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" +}; + +// +// The behaviors from the GLSL "#extension extension_name : behavior" +// +typedef enum { + EBhMissing = 0, + EBhRequire, + EBhEnable, + EBhWarn, + EBhDisable, + EBhDisablePartial // use as initial state of an extension that is only partially implemented +} TExtensionBehavior; + +// +// Symbolic names for extensions. Strings may be directly used when calling the +// functions, but better to have the compiler do spelling checks. +// +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_EXT_shader_texture_lod = "GL_EXT_shader_texture_lod"; + +const char* const E_GL_ARB_texture_rectangle = "GL_ARB_texture_rectangle"; +const char* const E_GL_3DL_array_objects = "GL_3DL_array_objects"; +const char* const E_GL_ARB_shading_language_420pack = "GL_ARB_shading_language_420pack"; +const char* const E_GL_ARB_texture_gather = "GL_ARB_texture_gather"; +const char* const E_GL_ARB_gpu_shader5 = "GL_ARB_gpu_shader5"; +const char* const E_GL_ARB_separate_shader_objects = "GL_ARB_separate_shader_objects"; +const char* const E_GL_ARB_compute_shader = "GL_ARB_compute_shader"; +const char* const E_GL_ARB_tessellation_shader = "GL_ARB_tessellation_shader"; +const char* const E_GL_ARB_enhanced_layouts = "GL_ARB_enhanced_layouts"; +const char* const E_GL_ARB_texture_cube_map_array = "GL_ARB_texture_cube_map_array"; +const char* const E_GL_ARB_shader_texture_lod = "GL_ARB_shader_texture_lod"; +const char* const E_GL_ARB_explicit_attrib_location = "GL_ARB_explicit_attrib_location"; +const char* const E_GL_ARB_shader_image_load_store = "GL_ARB_shader_image_load_store"; +const char* const E_GL_ARB_shader_atomic_counters = "GL_ARB_shader_atomic_counters"; +const char* const E_GL_ARB_shader_draw_parameters = "GL_ARB_shader_draw_parameters"; +const char* const E_GL_ARB_shader_group_vote = "GL_ARB_shader_group_vote"; +const char* const E_GL_ARB_derivative_control = "GL_ARB_derivative_control"; +const char* const E_GL_ARB_shader_texture_image_samples = "GL_ARB_shader_texture_image_samples"; +const char* const E_GL_ARB_viewport_array = "GL_ARB_viewport_array"; +const char* const E_GL_ARB_gpu_shader_int64 = "GL_ARB_gpu_shader_int64"; +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_cull_distance = "GL_ARB_cull_distance"; // present for 4.5, but need extension control over block members + +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"; + +// EXT extensions +const char* const E_GL_EXT_device_group = "GL_EXT_device_group"; +const char* const E_GL_EXT_multiview = "GL_EXT_multiview"; + +// #line and #include +const char* const E_GL_GOOGLE_cpp_style_line_directive = "GL_GOOGLE_cpp_style_line_directive"; +const char* const E_GL_GOOGLE_include_directive = "GL_GOOGLE_include_directive"; + +#ifdef AMD_EXTENSIONS +const char* const E_GL_AMD_shader_ballot = "GL_AMD_shader_ballot"; +const char* const E_GL_AMD_shader_trinary_minmax = "GL_AMD_shader_trinary_minmax"; +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"; +#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"; + +// Arrays of extensions for the above viewportEXTs duplications + +const char* const viewportEXTs[] = { E_GL_ARB_shader_viewport_layer_array, E_GL_NV_viewport_array2 }; +const int Num_viewportEXTs = sizeof(viewportEXTs) / sizeof(viewportEXTs[0]); +#endif + +// AEP +const char* const E_GL_ANDROID_extension_pack_es31a = "GL_ANDROID_extension_pack_es31a"; +const char* const E_GL_KHR_blend_equation_advanced = "GL_KHR_blend_equation_advanced"; +const char* const E_GL_OES_sample_variables = "GL_OES_sample_variables"; +const char* const E_GL_OES_shader_image_atomic = "GL_OES_shader_image_atomic"; +const char* const E_GL_OES_shader_multisample_interpolation = "GL_OES_shader_multisample_interpolation"; +const char* const E_GL_OES_texture_storage_multisample_2d_array = "GL_OES_texture_storage_multisample_2d_array"; +const char* const E_GL_EXT_geometry_shader = "GL_EXT_geometry_shader"; +const char* const E_GL_EXT_geometry_point_size = "GL_EXT_geometry_point_size"; +const char* const E_GL_EXT_gpu_shader5 = "GL_EXT_gpu_shader5"; +const char* const E_GL_EXT_primitive_bounding_box = "GL_EXT_primitive_bounding_box"; +const char* const E_GL_EXT_shader_io_blocks = "GL_EXT_shader_io_blocks"; +const char* const E_GL_EXT_tessellation_shader = "GL_EXT_tessellation_shader"; +const char* const E_GL_EXT_tessellation_point_size = "GL_EXT_tessellation_point_size"; +const char* const E_GL_EXT_texture_buffer = "GL_EXT_texture_buffer"; +const char* const E_GL_EXT_texture_cube_map_array = "GL_EXT_texture_cube_map_array"; + +// OES matching AEP +const char* const E_GL_OES_geometry_shader = "GL_OES_geometry_shader"; +const char* const E_GL_OES_geometry_point_size = "GL_OES_geometry_point_size"; +const char* const E_GL_OES_gpu_shader5 = "GL_OES_gpu_shader5"; +const char* const E_GL_OES_primitive_bounding_box = "GL_OES_primitive_bounding_box"; +const char* const E_GL_OES_shader_io_blocks = "GL_OES_shader_io_blocks"; +const char* const E_GL_OES_tessellation_shader = "GL_OES_tessellation_shader"; +const char* const E_GL_OES_tessellation_point_size = "GL_OES_tessellation_point_size"; +const char* const E_GL_OES_texture_buffer = "GL_OES_texture_buffer"; +const char* const E_GL_OES_texture_cube_map_array = "GL_OES_texture_cube_map_array"; + +// Arrays of extensions for the above AEP duplications + +const char* const AEP_geometry_shader[] = { E_GL_EXT_geometry_shader, E_GL_OES_geometry_shader }; +const int Num_AEP_geometry_shader = sizeof(AEP_geometry_shader)/sizeof(AEP_geometry_shader[0]); + +const char* const AEP_geometry_point_size[] = { E_GL_EXT_geometry_point_size, E_GL_OES_geometry_point_size }; +const int Num_AEP_geometry_point_size = sizeof(AEP_geometry_point_size)/sizeof(AEP_geometry_point_size[0]); + +const char* const AEP_gpu_shader5[] = { E_GL_EXT_gpu_shader5, E_GL_OES_gpu_shader5 }; +const int Num_AEP_gpu_shader5 = sizeof(AEP_gpu_shader5)/sizeof(AEP_gpu_shader5[0]); + +const char* const AEP_primitive_bounding_box[] = { E_GL_EXT_primitive_bounding_box, E_GL_OES_primitive_bounding_box }; +const int Num_AEP_primitive_bounding_box = sizeof(AEP_primitive_bounding_box)/sizeof(AEP_primitive_bounding_box[0]); + +const char* const AEP_shader_io_blocks[] = { E_GL_EXT_shader_io_blocks, E_GL_OES_shader_io_blocks }; +const int Num_AEP_shader_io_blocks = sizeof(AEP_shader_io_blocks)/sizeof(AEP_shader_io_blocks[0]); + +const char* const AEP_tessellation_shader[] = { E_GL_EXT_tessellation_shader, E_GL_OES_tessellation_shader }; +const int Num_AEP_tessellation_shader = sizeof(AEP_tessellation_shader)/sizeof(AEP_tessellation_shader[0]); + +const char* const AEP_tessellation_point_size[] = { E_GL_EXT_tessellation_point_size, E_GL_OES_tessellation_point_size }; +const int Num_AEP_tessellation_point_size = sizeof(AEP_tessellation_point_size)/sizeof(AEP_tessellation_point_size[0]); + +const char* const AEP_texture_buffer[] = { E_GL_EXT_texture_buffer, E_GL_OES_texture_buffer }; +const int Num_AEP_texture_buffer = sizeof(AEP_texture_buffer)/sizeof(AEP_texture_buffer[0]); + +const char* const AEP_texture_cube_map_array[] = { E_GL_EXT_texture_cube_map_array, E_GL_OES_texture_cube_map_array }; +const int Num_AEP_texture_cube_map_array = sizeof(AEP_texture_cube_map_array)/sizeof(AEP_texture_cube_map_array[0]); + +} // end namespace glslang + +#endif // _VERSIONS_INCLUDED_ diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/gl_types.h b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/gl_types.h new file mode 100644 index 0000000..d7cb31f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/gl_types.h @@ -0,0 +1,178 @@ +/* +** Copyright (c) 2013 The Khronos Group Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and/or associated documentation files (the +** "Materials"), to deal in the Materials without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Materials, and to +** permit persons to whom the Materials are 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 Materials. +** +** THE MATERIALS ARE 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 +** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +*/ + +#define GL_FLOAT 0x1406 +#define GL_FLOAT_VEC2 0x8B50 +#define GL_FLOAT_VEC3 0x8B51 +#define GL_FLOAT_VEC4 0x8B52 + +#define GL_DOUBLE 0x140A +#define GL_DOUBLE_VEC2 0x8FFC +#define GL_DOUBLE_VEC3 0x8FFD +#define GL_DOUBLE_VEC4 0x8FFE + +#define GL_INT 0x1404 +#define GL_INT_VEC2 0x8B53 +#define GL_INT_VEC3 0x8B54 +#define GL_INT_VEC4 0x8B55 + +#define GL_UNSIGNED_INT 0x1405 +#define GL_UNSIGNED_INT_VEC2 0x8DC6 +#define GL_UNSIGNED_INT_VEC3 0x8DC7 +#define GL_UNSIGNED_INT_VEC4 0x8DC8 + +#define GL_INT64_ARB 0x140E +#define GL_INT64_VEC2_ARB 0x8FE9 +#define GL_INT64_VEC3_ARB 0x8FEA +#define GL_INT64_VEC4_ARB 0x8FEB + +#define GL_UNSIGNED_INT64_ARB 0x140F +#define GL_UNSIGNED_INT64_VEC2_ARB 0x8FE5 +#define GL_UNSIGNED_INT64_VEC3_ARB 0x8FE6 +#define GL_UNSIGNED_INT64_VEC4_ARB 0x8FE7 + +#define GL_BOOL 0x8B56 +#define GL_BOOL_VEC2 0x8B57 +#define GL_BOOL_VEC3 0x8B58 +#define GL_BOOL_VEC4 0x8B59 + +#define GL_FLOAT_MAT2 0x8B5A +#define GL_FLOAT_MAT3 0x8B5B +#define GL_FLOAT_MAT4 0x8B5C +#define GL_FLOAT_MAT2x3 0x8B65 +#define GL_FLOAT_MAT2x4 0x8B66 +#define GL_FLOAT_MAT3x2 0x8B67 +#define GL_FLOAT_MAT3x4 0x8B68 +#define GL_FLOAT_MAT4x2 0x8B69 +#define GL_FLOAT_MAT4x3 0x8B6A + +#define GL_DOUBLE_MAT2 0x8F46 +#define GL_DOUBLE_MAT3 0x8F47 +#define GL_DOUBLE_MAT4 0x8F48 +#define GL_DOUBLE_MAT2x3 0x8F49 +#define GL_DOUBLE_MAT2x4 0x8F4A +#define GL_DOUBLE_MAT3x2 0x8F4B +#define GL_DOUBLE_MAT3x4 0x8F4C +#define GL_DOUBLE_MAT4x2 0x8F4D +#define GL_DOUBLE_MAT4x3 0x8F4E + +#ifdef AMD_EXTENSIONS +// Those constants are borrowed from extension NV_gpu_shader5 +#define GL_FLOAT16_NV 0x8FF8 +#define GL_FLOAT16_VEC2_NV 0x8FF9 +#define GL_FLOAT16_VEC3_NV 0x8FFA +#define GL_FLOAT16_VEC4_NV 0x8FFB + +#define GL_FLOAT16_MAT2_AMD 0x91C5 +#define GL_FLOAT16_MAT3_AMD 0x91C6 +#define GL_FLOAT16_MAT4_AMD 0x91C7 +#define GL_FLOAT16_MAT2x3_AMD 0x91C8 +#define GL_FLOAT16_MAT2x4_AMD 0x91C9 +#define GL_FLOAT16_MAT3x2_AMD 0x91CA +#define GL_FLOAT16_MAT3x4_AMD 0x91CB +#define GL_FLOAT16_MAT4x2_AMD 0x91CC +#define GL_FLOAT16_MAT4x3_AMD 0x91CD +#endif + +#define GL_SAMPLER_1D 0x8B5D +#define GL_SAMPLER_2D 0x8B5E +#define GL_SAMPLER_3D 0x8B5F +#define GL_SAMPLER_CUBE 0x8B60 +#define GL_SAMPLER_BUFFER 0x8DC2 +#define GL_SAMPLER_1D_ARRAY 0x8DC0 +#define GL_SAMPLER_2D_ARRAY 0x8DC1 +#define GL_SAMPLER_1D_ARRAY_SHADOW 0x8DC3 +#define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4 +#define GL_SAMPLER_CUBE_SHADOW 0x8DC5 +#define GL_SAMPLER_1D_SHADOW 0x8B61 +#define GL_SAMPLER_2D_SHADOW 0x8B62 +#define GL_SAMPLER_2D_RECT 0x8B63 +#define GL_SAMPLER_2D_RECT_SHADOW 0x8B64 +#define GL_SAMPLER_2D_MULTISAMPLE 0x9108 +#define GL_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910B +#define GL_SAMPLER_CUBE_MAP_ARRAY 0x900C +#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW 0x900D +#define GL_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900C +#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB 0x900D + +#define GL_INT_SAMPLER_1D 0x8DC9 +#define GL_INT_SAMPLER_2D 0x8DCA +#define GL_INT_SAMPLER_3D 0x8DCB +#define GL_INT_SAMPLER_CUBE 0x8DCC +#define GL_INT_SAMPLER_1D_ARRAY 0x8DCE +#define GL_INT_SAMPLER_2D_ARRAY 0x8DCF +#define GL_INT_SAMPLER_2D_RECT 0x8DCD +#define GL_INT_SAMPLER_BUFFER 0x8DD0 +#define GL_INT_SAMPLER_2D_MULTISAMPLE 0x9109 +#define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C +#define GL_INT_SAMPLER_CUBE_MAP_ARRAY 0x900E +#define GL_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900E + +#define GL_UNSIGNED_INT_SAMPLER_1D 0x8DD1 +#define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2 +#define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3 +#define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4 +#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY 0x8DD6 +#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7 +#define GL_UNSIGNED_INT_SAMPLER_2D_RECT 0x8DD5 +#define GL_UNSIGNED_INT_SAMPLER_BUFFER 0x8DD8 +#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D +#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY 0x900F +#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900F +#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A + +#define GL_IMAGE_1D 0x904C +#define GL_IMAGE_2D 0x904D +#define GL_IMAGE_3D 0x904E +#define GL_IMAGE_2D_RECT 0x904F +#define GL_IMAGE_CUBE 0x9050 +#define GL_IMAGE_BUFFER 0x9051 +#define GL_IMAGE_1D_ARRAY 0x9052 +#define GL_IMAGE_2D_ARRAY 0x9053 +#define GL_IMAGE_CUBE_MAP_ARRAY 0x9054 +#define GL_IMAGE_2D_MULTISAMPLE 0x9055 +#define GL_IMAGE_2D_MULTISAMPLE_ARRAY 0x9056 +#define GL_INT_IMAGE_1D 0x9057 +#define GL_INT_IMAGE_2D 0x9058 +#define GL_INT_IMAGE_3D 0x9059 +#define GL_INT_IMAGE_2D_RECT 0x905A +#define GL_INT_IMAGE_CUBE 0x905B +#define GL_INT_IMAGE_BUFFER 0x905C +#define GL_INT_IMAGE_1D_ARRAY 0x905D +#define GL_INT_IMAGE_2D_ARRAY 0x905E +#define GL_INT_IMAGE_CUBE_MAP_ARRAY 0x905F +#define GL_INT_IMAGE_2D_MULTISAMPLE 0x9060 +#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x9061 +#define GL_UNSIGNED_INT_IMAGE_1D 0x9062 +#define GL_UNSIGNED_INT_IMAGE_2D 0x9063 +#define GL_UNSIGNED_INT_IMAGE_3D 0x9064 +#define GL_UNSIGNED_INT_IMAGE_2D_RECT 0x9065 +#define GL_UNSIGNED_INT_IMAGE_CUBE 0x9066 +#define GL_UNSIGNED_INT_IMAGE_BUFFER 0x9067 +#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY 0x9068 +#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY 0x9069 +#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY 0x906A +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE 0x906B +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x906C + +#define GL_UNSIGNED_INT_ATOMIC_COUNTER 0x92DB diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang.y b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang.y new file mode 100644 index 0000000..f2512b8 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang.y @@ -0,0 +1,2833 @@ +// +// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +// Copyright (C) 2012-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. +// + +/** + * This is bison grammar and productions for parsing all versions of the + * GLSL shading languages. + */ +%{ + +/* Based on: +ANSI C Yacc grammar + +In 1985, Jeff Lee published his Yacc grammar (which is accompanied by a +matching Lex specification) for the April 30, 1985 draft version of the +ANSI C standard. Tom Stockfisch reposted it to net.sources in 1987; that +original, as mentioned in the answer to question 17.25 of the comp.lang.c +FAQ, can be ftp'ed from ftp.uu.net, file usenet/net.sources/ansi.c.grammar.Z. + +I intend to keep this version as close to the current C Standard grammar as +possible; please let me know if you discover discrepancies. + +Jutta Degener, 1995 +*/ + +#include "SymbolTable.h" +#include "ParseHelper.h" +#include "../Public/ShaderLang.h" + +using namespace glslang; + +%} + +%union { + struct { + glslang::TSourceLoc loc; + union { + glslang::TString *string; + int i; + unsigned int u; + long long i64; + unsigned long long u64; + bool b; + double d; + }; + glslang::TSymbol* symbol; + } lex; + struct { + glslang::TSourceLoc loc; + glslang::TOperator op; + union { + TIntermNode* intermNode; + glslang::TIntermNodePair nodePair; + glslang::TIntermTyped* intermTypedNode; + }; + union { + glslang::TPublicType type; + glslang::TFunction* function; + glslang::TParameter param; + glslang::TTypeLoc typeLine; + glslang::TTypeList* typeList; + glslang::TArraySizes* arraySizes; + glslang::TIdentifierList* identifierList; + }; + } interm; +} + +%{ + +/* windows only pragma */ +#ifdef _MSC_VER + #pragma warning(disable : 4065) + #pragma warning(disable : 4127) + #pragma warning(disable : 4244) +#endif + +#define parseContext (*pParseContext) +#define yyerror(context, msg) context->parserError(msg) + +extern int yylex(YYSTYPE*, TParseContext&); + +%} + +%parse-param {glslang::TParseContext* pParseContext} +%lex-param {parseContext} +%pure-parser // enable thread safety +%expect 1 // One shift reduce conflict because of if | else + +%token ATTRIBUTE VARYING +%token CONST BOOL FLOAT DOUBLE INT UINT INT64_T UINT64_T FLOAT16_T +%token BREAK CONTINUE DO ELSE FOR IF DISCARD RETURN SWITCH CASE DEFAULT SUBROUTINE +%token BVEC2 BVEC3 BVEC4 IVEC2 IVEC3 IVEC4 I64VEC2 I64VEC3 I64VEC4 UVEC2 UVEC3 UVEC4 U64VEC2 U64VEC3 U64VEC4 VEC2 VEC3 VEC4 +%token MAT2 MAT3 MAT4 CENTROID IN OUT INOUT +%token UNIFORM PATCH SAMPLE BUFFER SHARED +%token COHERENT VOLATILE RESTRICT READONLY WRITEONLY +%token DVEC2 DVEC3 DVEC4 DMAT2 DMAT3 DMAT4 +%token F16VEC2 F16VEC3 F16VEC4 F16MAT2 F16MAT3 F16MAT4 +%token NOPERSPECTIVE FLAT SMOOTH LAYOUT __EXPLICITINTERPAMD + +%token MAT2X2 MAT2X3 MAT2X4 +%token MAT3X2 MAT3X3 MAT3X4 +%token MAT4X2 MAT4X3 MAT4X4 +%token DMAT2X2 DMAT2X3 DMAT2X4 +%token DMAT3X2 DMAT3X3 DMAT3X4 +%token DMAT4X2 DMAT4X3 DMAT4X4 +%token F16MAT2X2 F16MAT2X3 F16MAT2X4 +%token F16MAT3X2 F16MAT3X3 F16MAT3X4 +%token F16MAT4X2 F16MAT4X3 F16MAT4X4 +%token ATOMIC_UINT + +// combined image/sampler +%token SAMPLER1D SAMPLER2D SAMPLER3D SAMPLERCUBE SAMPLER1DSHADOW SAMPLER2DSHADOW +%token SAMPLERCUBESHADOW SAMPLER1DARRAY SAMPLER2DARRAY SAMPLER1DARRAYSHADOW +%token SAMPLER2DARRAYSHADOW ISAMPLER1D ISAMPLER2D ISAMPLER3D ISAMPLERCUBE +%token ISAMPLER1DARRAY ISAMPLER2DARRAY USAMPLER1D USAMPLER2D USAMPLER3D +%token USAMPLERCUBE USAMPLER1DARRAY USAMPLER2DARRAY +%token SAMPLER2DRECT SAMPLER2DRECTSHADOW ISAMPLER2DRECT USAMPLER2DRECT +%token SAMPLERBUFFER ISAMPLERBUFFER USAMPLERBUFFER +%token SAMPLERCUBEARRAY SAMPLERCUBEARRAYSHADOW +%token ISAMPLERCUBEARRAY USAMPLERCUBEARRAY +%token SAMPLER2DMS ISAMPLER2DMS USAMPLER2DMS +%token SAMPLER2DMSARRAY ISAMPLER2DMSARRAY USAMPLER2DMSARRAY +%token SAMPLEREXTERNALOES + +// pure sampler +%token SAMPLER SAMPLERSHADOW + +// texture without sampler +%token TEXTURE1D TEXTURE2D TEXTURE3D TEXTURECUBE +%token TEXTURE1DARRAY TEXTURE2DARRAY +%token ITEXTURE1D ITEXTURE2D ITEXTURE3D ITEXTURECUBE +%token ITEXTURE1DARRAY ITEXTURE2DARRAY UTEXTURE1D UTEXTURE2D UTEXTURE3D +%token UTEXTURECUBE UTEXTURE1DARRAY UTEXTURE2DARRAY +%token TEXTURE2DRECT ITEXTURE2DRECT UTEXTURE2DRECT +%token TEXTUREBUFFER ITEXTUREBUFFER UTEXTUREBUFFER +%token TEXTURECUBEARRAY ITEXTURECUBEARRAY UTEXTURECUBEARRAY +%token TEXTURE2DMS ITEXTURE2DMS UTEXTURE2DMS +%token TEXTURE2DMSARRAY ITEXTURE2DMSARRAY UTEXTURE2DMSARRAY + +// input attachments +%token SUBPASSINPUT SUBPASSINPUTMS ISUBPASSINPUT ISUBPASSINPUTMS USUBPASSINPUT USUBPASSINPUTMS + +%token IMAGE1D IIMAGE1D UIMAGE1D IMAGE2D IIMAGE2D +%token UIMAGE2D IMAGE3D IIMAGE3D UIMAGE3D +%token IMAGE2DRECT IIMAGE2DRECT UIMAGE2DRECT +%token IMAGECUBE IIMAGECUBE UIMAGECUBE +%token IMAGEBUFFER IIMAGEBUFFER UIMAGEBUFFER +%token IMAGE1DARRAY IIMAGE1DARRAY UIMAGE1DARRAY +%token IMAGE2DARRAY IIMAGE2DARRAY UIMAGE2DARRAY +%token IMAGECUBEARRAY IIMAGECUBEARRAY UIMAGECUBEARRAY +%token IMAGE2DMS IIMAGE2DMS UIMAGE2DMS +%token IMAGE2DMSARRAY IIMAGE2DMSARRAY UIMAGE2DMSARRAY + +%token STRUCT VOID WHILE + +%token IDENTIFIER TYPE_NAME +%token FLOATCONSTANT DOUBLECONSTANT INTCONSTANT UINTCONSTANT INT64CONSTANT UINT64CONSTANT BOOLCONSTANT FLOAT16CONSTANT +%token LEFT_OP RIGHT_OP +%token INC_OP DEC_OP LE_OP GE_OP EQ_OP NE_OP +%token AND_OP OR_OP XOR_OP MUL_ASSIGN DIV_ASSIGN ADD_ASSIGN +%token MOD_ASSIGN LEFT_ASSIGN RIGHT_ASSIGN AND_ASSIGN XOR_ASSIGN OR_ASSIGN +%token SUB_ASSIGN + +%token LEFT_PAREN RIGHT_PAREN LEFT_BRACKET RIGHT_BRACKET LEFT_BRACE RIGHT_BRACE DOT +%token COMMA COLON EQUAL SEMICOLON BANG DASH TILDE PLUS STAR SLASH PERCENT +%token LEFT_ANGLE RIGHT_ANGLE VERTICAL_BAR CARET AMPERSAND QUESTION + +%token INVARIANT PRECISE +%token HIGH_PRECISION MEDIUM_PRECISION LOW_PRECISION PRECISION + +%token PACKED RESOURCE SUPERP + +%type assignment_operator unary_operator +%type variable_identifier primary_expression postfix_expression +%type expression integer_expression assignment_expression +%type unary_expression multiplicative_expression additive_expression +%type relational_expression equality_expression +%type conditional_expression constant_expression +%type logical_or_expression logical_xor_expression logical_and_expression +%type shift_expression and_expression exclusive_or_expression inclusive_or_expression +%type function_call initializer initializer_list condition conditionopt + +%type translation_unit function_definition +%type statement simple_statement +%type statement_list switch_statement_list compound_statement +%type declaration_statement selection_statement expression_statement +%type switch_statement case_label +%type declaration external_declaration +%type for_init_statement compound_statement_no_new_scope +%type selection_rest_statement for_rest_statement +%type iteration_statement jump_statement statement_no_new_scope statement_scoped +%type single_declaration init_declarator_list + +%type parameter_declaration parameter_declarator parameter_type_specifier + +%type array_specifier +%type precise_qualifier invariant_qualifier interpolation_qualifier storage_qualifier precision_qualifier +%type layout_qualifier layout_qualifier_id_list layout_qualifier_id + +%type type_qualifier fully_specified_type type_specifier +%type single_type_qualifier +%type type_specifier_nonarray +%type struct_specifier +%type struct_declarator +%type struct_declarator_list struct_declaration struct_declaration_list type_name_list +%type block_structure +%type function_header function_declarator +%type function_header_with_parameters +%type function_call_header_with_parameters function_call_header_no_parameters function_call_generic function_prototype +%type function_call_or_method function_identifier function_call_header + +%type identifier_list + +%start translation_unit +%% + +variable_identifier + : IDENTIFIER { + $$ = parseContext.handleVariable($1.loc, $1.symbol, $1.string); + } + ; + +primary_expression + : variable_identifier { + $$ = $1; + } + | INTCONSTANT { + $$ = parseContext.intermediate.addConstantUnion($1.i, $1.loc, true); + } + | UINTCONSTANT { + parseContext.fullIntegerCheck($1.loc, "unsigned literal"); + $$ = parseContext.intermediate.addConstantUnion($1.u, $1.loc, true); + } + | INT64CONSTANT { + parseContext.int64Check($1.loc, "64-bit integer literal"); + $$ = parseContext.intermediate.addConstantUnion($1.i64, $1.loc, true); + } + | UINT64CONSTANT { + parseContext.int64Check($1.loc, "64-bit unsigned integer literal"); + $$ = parseContext.intermediate.addConstantUnion($1.u64, $1.loc, true); + } + | FLOATCONSTANT { + $$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloat, $1.loc, true); + } + | DOUBLECONSTANT { + parseContext.doubleCheck($1.loc, "double literal"); + $$ = parseContext.intermediate.addConstantUnion($1.d, EbtDouble, $1.loc, true); + } + | FLOAT16CONSTANT { +#ifdef AMD_EXTENSIONS + parseContext.float16Check($1.loc, "half float literal"); + $$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloat16, $1.loc, true); +#endif + } + | BOOLCONSTANT { + $$ = parseContext.intermediate.addConstantUnion($1.b, $1.loc, true); + } + | LEFT_PAREN expression RIGHT_PAREN { + $$ = $2; + if ($$->getAsConstantUnion()) + $$->getAsConstantUnion()->setExpression(); + } + ; + +postfix_expression + : primary_expression { + $$ = $1; + } + | postfix_expression LEFT_BRACKET integer_expression RIGHT_BRACKET { + $$ = parseContext.handleBracketDereference($2.loc, $1, $3); + } + | function_call { + $$ = $1; + } + | postfix_expression DOT IDENTIFIER { + $$ = parseContext.handleDotDereference($3.loc, $1, *$3.string); + } + | postfix_expression INC_OP { + parseContext.variableCheck($1); + parseContext.lValueErrorCheck($2.loc, "++", $1); + $$ = parseContext.handleUnaryMath($2.loc, "++", EOpPostIncrement, $1); + } + | postfix_expression DEC_OP { + parseContext.variableCheck($1); + parseContext.lValueErrorCheck($2.loc, "--", $1); + $$ = parseContext.handleUnaryMath($2.loc, "--", EOpPostDecrement, $1); + } + ; + +integer_expression + : expression { + parseContext.integerCheck($1, "[]"); + $$ = $1; + } + ; + +function_call + : function_call_or_method { + $$ = parseContext.handleFunctionCall($1.loc, $1.function, $1.intermNode); + delete $1.function; + } + ; + +function_call_or_method + : function_call_generic { + $$ = $1; + } + ; + +function_call_generic + : function_call_header_with_parameters RIGHT_PAREN { + $$ = $1; + $$.loc = $2.loc; + } + | function_call_header_no_parameters RIGHT_PAREN { + $$ = $1; + $$.loc = $2.loc; + } + ; + +function_call_header_no_parameters + : function_call_header VOID { + $$ = $1; + } + | function_call_header { + $$ = $1; + } + ; + +function_call_header_with_parameters + : function_call_header assignment_expression { + TParameter param = { 0, new TType }; + param.type->shallowCopy($2->getType()); + $1.function->addParameter(param); + $$.function = $1.function; + $$.intermNode = $2; + } + | function_call_header_with_parameters COMMA assignment_expression { + TParameter param = { 0, new TType }; + param.type->shallowCopy($3->getType()); + $1.function->addParameter(param); + $$.function = $1.function; + $$.intermNode = parseContext.intermediate.growAggregate($1.intermNode, $3, $2.loc); + } + ; + +function_call_header + : function_identifier LEFT_PAREN { + $$ = $1; + } + ; + +// Grammar Note: Constructors look like functions, but are recognized as types. + +function_identifier + : type_specifier { + // Constructor + $$.intermNode = 0; + $$.function = parseContext.handleConstructorCall($1.loc, $1); + } + | postfix_expression { + // + // Should be a method or subroutine call, but we haven't recognized the arguments yet. + // + $$.function = 0; + $$.intermNode = 0; + + TIntermMethod* method = $1->getAsMethodNode(); + if (method) { + $$.function = new TFunction(&method->getMethodName(), TType(EbtInt), EOpArrayLength); + $$.intermNode = method->getObject(); + } else { + TIntermSymbol* symbol = $1->getAsSymbolNode(); + if (symbol) { + parseContext.reservedErrorCheck(symbol->getLoc(), symbol->getName()); + TFunction *function = new TFunction(&symbol->getName(), TType(EbtVoid)); + $$.function = function; + } else + parseContext.error($1->getLoc(), "function call, method, or subroutine call expected", "", ""); + } + + if ($$.function == 0) { + // error recover + TString empty(""); + $$.function = new TFunction(&empty, TType(EbtVoid), EOpNull); + } + } + ; + +unary_expression + : postfix_expression { + parseContext.variableCheck($1); + $$ = $1; + if (TIntermMethod* method = $1->getAsMethodNode()) + parseContext.error($1->getLoc(), "incomplete method syntax", method->getMethodName().c_str(), ""); + } + | INC_OP unary_expression { + parseContext.lValueErrorCheck($1.loc, "++", $2); + $$ = parseContext.handleUnaryMath($1.loc, "++", EOpPreIncrement, $2); + } + | DEC_OP unary_expression { + parseContext.lValueErrorCheck($1.loc, "--", $2); + $$ = parseContext.handleUnaryMath($1.loc, "--", EOpPreDecrement, $2); + } + | unary_operator unary_expression { + if ($1.op != EOpNull) { + char errorOp[2] = {0, 0}; + switch($1.op) { + case EOpNegative: errorOp[0] = '-'; break; + case EOpLogicalNot: errorOp[0] = '!'; break; + case EOpBitwiseNot: errorOp[0] = '~'; break; + default: break; // some compilers want this + } + $$ = parseContext.handleUnaryMath($1.loc, errorOp, $1.op, $2); + } else { + $$ = $2; + if ($$->getAsConstantUnion()) + $$->getAsConstantUnion()->setExpression(); + } + } + ; +// Grammar Note: No traditional style type casts. + +unary_operator + : PLUS { $$.loc = $1.loc; $$.op = EOpNull; } + | DASH { $$.loc = $1.loc; $$.op = EOpNegative; } + | BANG { $$.loc = $1.loc; $$.op = EOpLogicalNot; } + | TILDE { $$.loc = $1.loc; $$.op = EOpBitwiseNot; + parseContext.fullIntegerCheck($1.loc, "bitwise not"); } + ; +// Grammar Note: No '*' or '&' unary ops. Pointers are not supported. + +multiplicative_expression + : unary_expression { $$ = $1; } + | multiplicative_expression STAR unary_expression { + $$ = parseContext.handleBinaryMath($2.loc, "*", EOpMul, $1, $3); + if ($$ == 0) + $$ = $1; + } + | multiplicative_expression SLASH unary_expression { + $$ = parseContext.handleBinaryMath($2.loc, "/", EOpDiv, $1, $3); + if ($$ == 0) + $$ = $1; + } + | multiplicative_expression PERCENT unary_expression { + parseContext.fullIntegerCheck($2.loc, "%"); + $$ = parseContext.handleBinaryMath($2.loc, "%", EOpMod, $1, $3); + if ($$ == 0) + $$ = $1; + } + ; + +additive_expression + : multiplicative_expression { $$ = $1; } + | additive_expression PLUS multiplicative_expression { + $$ = parseContext.handleBinaryMath($2.loc, "+", EOpAdd, $1, $3); + if ($$ == 0) + $$ = $1; + } + | additive_expression DASH multiplicative_expression { + $$ = parseContext.handleBinaryMath($2.loc, "-", EOpSub, $1, $3); + if ($$ == 0) + $$ = $1; + } + ; + +shift_expression + : additive_expression { $$ = $1; } + | shift_expression LEFT_OP additive_expression { + parseContext.fullIntegerCheck($2.loc, "bit shift left"); + $$ = parseContext.handleBinaryMath($2.loc, "<<", EOpLeftShift, $1, $3); + if ($$ == 0) + $$ = $1; + } + | shift_expression RIGHT_OP additive_expression { + parseContext.fullIntegerCheck($2.loc, "bit shift right"); + $$ = parseContext.handleBinaryMath($2.loc, ">>", EOpRightShift, $1, $3); + if ($$ == 0) + $$ = $1; + } + ; + +relational_expression + : shift_expression { $$ = $1; } + | relational_expression LEFT_ANGLE shift_expression { + $$ = parseContext.handleBinaryMath($2.loc, "<", EOpLessThan, $1, $3); + if ($$ == 0) + $$ = parseContext.intermediate.addConstantUnion(false, $2.loc); + } + | relational_expression RIGHT_ANGLE shift_expression { + $$ = parseContext.handleBinaryMath($2.loc, ">", EOpGreaterThan, $1, $3); + if ($$ == 0) + $$ = parseContext.intermediate.addConstantUnion(false, $2.loc); + } + | relational_expression LE_OP shift_expression { + $$ = parseContext.handleBinaryMath($2.loc, "<=", EOpLessThanEqual, $1, $3); + if ($$ == 0) + $$ = parseContext.intermediate.addConstantUnion(false, $2.loc); + } + | relational_expression GE_OP shift_expression { + $$ = parseContext.handleBinaryMath($2.loc, ">=", EOpGreaterThanEqual, $1, $3); + if ($$ == 0) + $$ = parseContext.intermediate.addConstantUnion(false, $2.loc); + } + ; + +equality_expression + : relational_expression { $$ = $1; } + | equality_expression EQ_OP relational_expression { + parseContext.arrayObjectCheck($2.loc, $1->getType(), "array comparison"); + parseContext.opaqueCheck($2.loc, $1->getType(), "=="); + parseContext.specializationCheck($2.loc, $1->getType(), "=="); + $$ = parseContext.handleBinaryMath($2.loc, "==", EOpEqual, $1, $3); + if ($$ == 0) + $$ = parseContext.intermediate.addConstantUnion(false, $2.loc); + } + | equality_expression NE_OP relational_expression { + parseContext.arrayObjectCheck($2.loc, $1->getType(), "array comparison"); + parseContext.opaqueCheck($2.loc, $1->getType(), "!="); + parseContext.specializationCheck($2.loc, $1->getType(), "!="); + $$ = parseContext.handleBinaryMath($2.loc, "!=", EOpNotEqual, $1, $3); + if ($$ == 0) + $$ = parseContext.intermediate.addConstantUnion(false, $2.loc); + } + ; + +and_expression + : equality_expression { $$ = $1; } + | and_expression AMPERSAND equality_expression { + parseContext.fullIntegerCheck($2.loc, "bitwise and"); + $$ = parseContext.handleBinaryMath($2.loc, "&", EOpAnd, $1, $3); + if ($$ == 0) + $$ = $1; + } + ; + +exclusive_or_expression + : and_expression { $$ = $1; } + | exclusive_or_expression CARET and_expression { + parseContext.fullIntegerCheck($2.loc, "bitwise exclusive or"); + $$ = parseContext.handleBinaryMath($2.loc, "^", EOpExclusiveOr, $1, $3); + if ($$ == 0) + $$ = $1; + } + ; + +inclusive_or_expression + : exclusive_or_expression { $$ = $1; } + | inclusive_or_expression VERTICAL_BAR exclusive_or_expression { + parseContext.fullIntegerCheck($2.loc, "bitwise inclusive or"); + $$ = parseContext.handleBinaryMath($2.loc, "|", EOpInclusiveOr, $1, $3); + if ($$ == 0) + $$ = $1; + } + ; + +logical_and_expression + : inclusive_or_expression { $$ = $1; } + | logical_and_expression AND_OP inclusive_or_expression { + $$ = parseContext.handleBinaryMath($2.loc, "&&", EOpLogicalAnd, $1, $3); + if ($$ == 0) + $$ = parseContext.intermediate.addConstantUnion(false, $2.loc); + } + ; + +logical_xor_expression + : logical_and_expression { $$ = $1; } + | logical_xor_expression XOR_OP logical_and_expression { + $$ = parseContext.handleBinaryMath($2.loc, "^^", EOpLogicalXor, $1, $3); + if ($$ == 0) + $$ = parseContext.intermediate.addConstantUnion(false, $2.loc); + } + ; + +logical_or_expression + : logical_xor_expression { $$ = $1; } + | logical_or_expression OR_OP logical_xor_expression { + $$ = parseContext.handleBinaryMath($2.loc, "||", EOpLogicalOr, $1, $3); + if ($$ == 0) + $$ = parseContext.intermediate.addConstantUnion(false, $2.loc); + } + ; + +conditional_expression + : logical_or_expression { $$ = $1; } + | logical_or_expression QUESTION { + ++parseContext.controlFlowNestingLevel; + } + expression COLON assignment_expression { + --parseContext.controlFlowNestingLevel; + parseContext.boolCheck($2.loc, $1); + parseContext.rValueErrorCheck($2.loc, "?", $1); + parseContext.rValueErrorCheck($5.loc, ":", $4); + parseContext.rValueErrorCheck($5.loc, ":", $6); + $$ = parseContext.intermediate.addSelection($1, $4, $6, $2.loc); + if ($$ == 0) { + parseContext.binaryOpError($2.loc, ":", $4->getCompleteString(), $6->getCompleteString()); + $$ = $6; + } + } + ; + +assignment_expression + : conditional_expression { $$ = $1; } + | unary_expression assignment_operator assignment_expression { + parseContext.arrayObjectCheck($2.loc, $1->getType(), "array assignment"); + parseContext.opaqueCheck($2.loc, $1->getType(), "="); + parseContext.specializationCheck($2.loc, $1->getType(), "="); + parseContext.lValueErrorCheck($2.loc, "assign", $1); + parseContext.rValueErrorCheck($2.loc, "assign", $3); + $$ = parseContext.intermediate.addAssign($2.op, $1, $3, $2.loc); + if ($$ == 0) { + parseContext.assignError($2.loc, "assign", $1->getCompleteString(), $3->getCompleteString()); + $$ = $1; + } + } + ; + +assignment_operator + : EQUAL { + $$.loc = $1.loc; + $$.op = EOpAssign; + } + | MUL_ASSIGN { + $$.loc = $1.loc; + $$.op = EOpMulAssign; + } + | DIV_ASSIGN { + $$.loc = $1.loc; + $$.op = EOpDivAssign; + } + | MOD_ASSIGN { + parseContext.fullIntegerCheck($1.loc, "%="); + $$.loc = $1.loc; + $$.op = EOpModAssign; + } + | ADD_ASSIGN { + $$.loc = $1.loc; + $$.op = EOpAddAssign; + } + | SUB_ASSIGN { + $$.loc = $1.loc; + $$.op = EOpSubAssign; + } + | LEFT_ASSIGN { + parseContext.fullIntegerCheck($1.loc, "bit-shift left assign"); + $$.loc = $1.loc; $$.op = EOpLeftShiftAssign; + } + | RIGHT_ASSIGN { + parseContext.fullIntegerCheck($1.loc, "bit-shift right assign"); + $$.loc = $1.loc; $$.op = EOpRightShiftAssign; + } + | AND_ASSIGN { + parseContext.fullIntegerCheck($1.loc, "bitwise-and assign"); + $$.loc = $1.loc; $$.op = EOpAndAssign; + } + | XOR_ASSIGN { + parseContext.fullIntegerCheck($1.loc, "bitwise-xor assign"); + $$.loc = $1.loc; $$.op = EOpExclusiveOrAssign; + } + | OR_ASSIGN { + parseContext.fullIntegerCheck($1.loc, "bitwise-or assign"); + $$.loc = $1.loc; $$.op = EOpInclusiveOrAssign; + } + ; + +expression + : assignment_expression { + $$ = $1; + } + | expression COMMA assignment_expression { + parseContext.samplerConstructorLocationCheck($2.loc, ",", $3); + $$ = parseContext.intermediate.addComma($1, $3, $2.loc); + if ($$ == 0) { + parseContext.binaryOpError($2.loc, ",", $1->getCompleteString(), $3->getCompleteString()); + $$ = $3; + } + } + ; + +constant_expression + : conditional_expression { + parseContext.constantValueCheck($1, ""); + $$ = $1; + } + ; + +declaration + : function_prototype SEMICOLON { + parseContext.handleFunctionDeclarator($1.loc, *$1.function, true /* prototype */); + $$ = 0; + // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature + } + | init_declarator_list SEMICOLON { + if ($1.intermNode && $1.intermNode->getAsAggregate()) + $1.intermNode->getAsAggregate()->setOperator(EOpSequence); + $$ = $1.intermNode; + } + | PRECISION precision_qualifier type_specifier SEMICOLON { + parseContext.profileRequires($1.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($1.loc, $3, $2.qualifier.precision); + $$ = 0; + } + | block_structure SEMICOLON { + parseContext.declareBlock($1.loc, *$1.typeList); + $$ = 0; + } + | block_structure IDENTIFIER SEMICOLON { + parseContext.declareBlock($1.loc, *$1.typeList, $2.string); + $$ = 0; + } + | block_structure IDENTIFIER array_specifier SEMICOLON { + parseContext.declareBlock($1.loc, *$1.typeList, $2.string, $3.arraySizes); + $$ = 0; + } + | type_qualifier SEMICOLON { + parseContext.globalQualifierFixCheck($1.loc, $1.qualifier); + parseContext.updateStandaloneQualifierDefaults($1.loc, $1); + $$ = 0; + } + | type_qualifier IDENTIFIER SEMICOLON { + parseContext.checkNoShaderLayouts($1.loc, $1.shaderQualifiers); + parseContext.addQualifierToExisting($1.loc, $1.qualifier, *$2.string); + $$ = 0; + } + | type_qualifier IDENTIFIER identifier_list SEMICOLON { + parseContext.checkNoShaderLayouts($1.loc, $1.shaderQualifiers); + $3->push_back($2.string); + parseContext.addQualifierToExisting($1.loc, $1.qualifier, *$3); + $$ = 0; + } + ; + +block_structure + : type_qualifier IDENTIFIER LEFT_BRACE { parseContext.nestedBlockCheck($1.loc); } struct_declaration_list RIGHT_BRACE { + --parseContext.structNestingLevel; + parseContext.blockName = $2.string; + parseContext.globalQualifierFixCheck($1.loc, $1.qualifier); + parseContext.checkNoShaderLayouts($1.loc, $1.shaderQualifiers); + parseContext.currentBlockQualifier = $1.qualifier; + $$.loc = $1.loc; + $$.typeList = $5; + } + +identifier_list + : COMMA IDENTIFIER { + $$ = new TIdentifierList; + $$->push_back($2.string); + } + | identifier_list COMMA IDENTIFIER { + $$ = $1; + $$->push_back($3.string); + } + ; + +function_prototype + : function_declarator RIGHT_PAREN { + $$.function = $1; + $$.loc = $2.loc; + } + ; + +function_declarator + : function_header { + $$ = $1; + } + | function_header_with_parameters { + $$ = $1; + } + ; + + +function_header_with_parameters + : function_header parameter_declaration { + // Add the parameter + $$ = $1; + if ($2.param.type->getBasicType() != EbtVoid) + $1->addParameter($2.param); + else + delete $2.param.type; + } + | function_header_with_parameters COMMA parameter_declaration { + // + // Only first parameter of one-parameter functions can be void + // The check for named parameters not being void is done in parameter_declarator + // + if ($3.param.type->getBasicType() == EbtVoid) { + // + // This parameter > first is void + // + parseContext.error($2.loc, "cannot be an argument type except for '(void)'", "void", ""); + delete $3.param.type; + } else { + // Add the parameter + $$ = $1; + $1->addParameter($3.param); + } + } + ; + +function_header + : fully_specified_type IDENTIFIER LEFT_PAREN { + if ($1.qualifier.storage != EvqGlobal && $1.qualifier.storage != EvqTemporary) { + parseContext.error($2.loc, "no qualifiers allowed for function return", + GetStorageQualifierString($1.qualifier.storage), ""); + } + if ($1.arraySizes) + parseContext.arraySizeRequiredCheck($1.loc, *$1.arraySizes); + + // Add the function as a prototype after parsing it (we do not support recursion) + TFunction *function; + TType type($1); + function = new TFunction($2.string, type); + $$ = function; + } + ; + +parameter_declarator + // Type + name + : type_specifier IDENTIFIER { + if ($1.arraySizes) { + parseContext.profileRequires($1.loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type"); + parseContext.profileRequires($1.loc, EEsProfile, 300, 0, "arrayed type"); + parseContext.arraySizeRequiredCheck($1.loc, *$1.arraySizes); + } + if ($1.basicType == EbtVoid) { + parseContext.error($2.loc, "illegal use of type 'void'", $2.string->c_str(), ""); + } + parseContext.reservedErrorCheck($2.loc, *$2.string); + + TParameter param = {$2.string, new TType($1)}; + $$.loc = $2.loc; + $$.param = param; + } + | type_specifier IDENTIFIER array_specifier { + if ($1.arraySizes) { + parseContext.profileRequires($1.loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type"); + parseContext.profileRequires($1.loc, EEsProfile, 300, 0, "arrayed type"); + parseContext.arraySizeRequiredCheck($1.loc, *$1.arraySizes); + } + parseContext.arrayDimCheck($2.loc, $1.arraySizes, $3.arraySizes); + + parseContext.arraySizeRequiredCheck($3.loc, *$3.arraySizes); + parseContext.reservedErrorCheck($2.loc, *$2.string); + + $1.arraySizes = $3.arraySizes; + + TParameter param = { $2.string, new TType($1)}; + $$.loc = $2.loc; + $$.param = param; + } + ; + +parameter_declaration + // + // With name + // + : type_qualifier parameter_declarator { + $$ = $2; + if ($1.qualifier.precision != EpqNone) + $$.param.type->getQualifier().precision = $1.qualifier.precision; + parseContext.precisionQualifierCheck($$.loc, $$.param.type->getBasicType(), $$.param.type->getQualifier()); + + parseContext.checkNoShaderLayouts($1.loc, $1.shaderQualifiers); + parseContext.parameterTypeCheck($2.loc, $1.qualifier.storage, *$$.param.type); + parseContext.paramCheckFix($1.loc, $1.qualifier, *$$.param.type); + + } + | parameter_declarator { + $$ = $1; + + parseContext.parameterTypeCheck($1.loc, EvqIn, *$1.param.type); + parseContext.paramCheckFix($1.loc, EvqTemporary, *$$.param.type); + parseContext.precisionQualifierCheck($$.loc, $$.param.type->getBasicType(), $$.param.type->getQualifier()); + } + // + // Without name + // + | type_qualifier parameter_type_specifier { + $$ = $2; + if ($1.qualifier.precision != EpqNone) + $$.param.type->getQualifier().precision = $1.qualifier.precision; + parseContext.precisionQualifierCheck($1.loc, $$.param.type->getBasicType(), $$.param.type->getQualifier()); + + parseContext.checkNoShaderLayouts($1.loc, $1.shaderQualifiers); + parseContext.parameterTypeCheck($2.loc, $1.qualifier.storage, *$$.param.type); + parseContext.paramCheckFix($1.loc, $1.qualifier, *$$.param.type); + } + | parameter_type_specifier { + $$ = $1; + + parseContext.parameterTypeCheck($1.loc, EvqIn, *$1.param.type); + parseContext.paramCheckFix($1.loc, EvqTemporary, *$$.param.type); + parseContext.precisionQualifierCheck($$.loc, $$.param.type->getBasicType(), $$.param.type->getQualifier()); + } + ; + +parameter_type_specifier + : type_specifier { + TParameter param = { 0, new TType($1) }; + $$.param = param; + if ($1.arraySizes) + parseContext.arraySizeRequiredCheck($1.loc, *$1.arraySizes); + } + ; + +init_declarator_list + : single_declaration { + $$ = $1; + } + | init_declarator_list COMMA IDENTIFIER { + $$ = $1; + parseContext.declareVariable($3.loc, *$3.string, $1.type); + } + | init_declarator_list COMMA IDENTIFIER array_specifier { + $$ = $1; + parseContext.declareVariable($3.loc, *$3.string, $1.type, $4.arraySizes); + } + | init_declarator_list COMMA IDENTIFIER array_specifier EQUAL initializer { + $$.type = $1.type; + TIntermNode* initNode = parseContext.declareVariable($3.loc, *$3.string, $1.type, $4.arraySizes, $6); + $$.intermNode = parseContext.intermediate.growAggregate($1.intermNode, initNode, $5.loc); + } + | init_declarator_list COMMA IDENTIFIER EQUAL initializer { + $$.type = $1.type; + TIntermNode* initNode = parseContext.declareVariable($3.loc, *$3.string, $1.type, 0, $5); + $$.intermNode = parseContext.intermediate.growAggregate($1.intermNode, initNode, $4.loc); + } + ; + +single_declaration + : fully_specified_type { + $$.type = $1; + $$.intermNode = 0; + parseContext.declareTypeDefaults($$.loc, $$.type); + } + | fully_specified_type IDENTIFIER { + $$.type = $1; + $$.intermNode = 0; + parseContext.declareVariable($2.loc, *$2.string, $1); + } + | fully_specified_type IDENTIFIER array_specifier { + $$.type = $1; + $$.intermNode = 0; + parseContext.declareVariable($2.loc, *$2.string, $1, $3.arraySizes); + } + | fully_specified_type IDENTIFIER array_specifier EQUAL initializer { + $$.type = $1; + TIntermNode* initNode = parseContext.declareVariable($2.loc, *$2.string, $1, $3.arraySizes, $5); + $$.intermNode = parseContext.intermediate.growAggregate(0, initNode, $4.loc); + } + | fully_specified_type IDENTIFIER EQUAL initializer { + $$.type = $1; + TIntermNode* initNode = parseContext.declareVariable($2.loc, *$2.string, $1, 0, $4); + $$.intermNode = parseContext.intermediate.growAggregate(0, initNode, $3.loc); + } + +// Grammar Note: No 'enum', or 'typedef'. + +fully_specified_type + : type_specifier { + $$ = $1; + + parseContext.globalQualifierTypeCheck($1.loc, $1.qualifier, $$); + if ($1.arraySizes) { + parseContext.profileRequires($1.loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type"); + parseContext.profileRequires($1.loc, EEsProfile, 300, 0, "arrayed type"); + } + + parseContext.precisionQualifierCheck($$.loc, $$.basicType, $$.qualifier); + } + | type_qualifier type_specifier { + parseContext.globalQualifierFixCheck($1.loc, $1.qualifier); + parseContext.globalQualifierTypeCheck($1.loc, $1.qualifier, $2); + + if ($2.arraySizes) { + parseContext.profileRequires($2.loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type"); + parseContext.profileRequires($2.loc, EEsProfile, 300, 0, "arrayed type"); + } + + if ($2.arraySizes && parseContext.arrayQualifierError($2.loc, $1.qualifier)) + $2.arraySizes = 0; + + parseContext.checkNoShaderLayouts($2.loc, $1.shaderQualifiers); + $2.shaderQualifiers.merge($1.shaderQualifiers); + parseContext.mergeQualifiers($2.loc, $2.qualifier, $1.qualifier, true); + parseContext.precisionQualifierCheck($2.loc, $2.basicType, $2.qualifier); + + $$ = $2; + + if (! $$.qualifier.isInterpolation() && + ((parseContext.language == EShLangVertex && $$.qualifier.storage == EvqVaryingOut) || + (parseContext.language == EShLangFragment && $$.qualifier.storage == EvqVaryingIn))) + $$.qualifier.smooth = true; + } + ; + +invariant_qualifier + : INVARIANT { + parseContext.globalCheck($1.loc, "invariant"); + parseContext.profileRequires($$.loc, ENoProfile, 120, 0, "invariant"); + $$.init($1.loc); + $$.qualifier.invariant = true; + } + ; + +interpolation_qualifier + : SMOOTH { + parseContext.globalCheck($1.loc, "smooth"); + parseContext.profileRequires($1.loc, ENoProfile, 130, 0, "smooth"); + parseContext.profileRequires($1.loc, EEsProfile, 300, 0, "smooth"); + $$.init($1.loc); + $$.qualifier.smooth = true; + } + | FLAT { + parseContext.globalCheck($1.loc, "flat"); + parseContext.profileRequires($1.loc, ENoProfile, 130, 0, "flat"); + parseContext.profileRequires($1.loc, EEsProfile, 300, 0, "flat"); + $$.init($1.loc); + $$.qualifier.flat = true; + } + | NOPERSPECTIVE { + parseContext.globalCheck($1.loc, "noperspective"); + parseContext.requireProfile($1.loc, ~EEsProfile, "noperspective"); + parseContext.profileRequires($1.loc, ENoProfile, 130, 0, "noperspective"); + $$.init($1.loc); + $$.qualifier.nopersp = true; + } + | __EXPLICITINTERPAMD { +#ifdef AMD_EXTENSIONS + parseContext.globalCheck($1.loc, "__explicitInterpAMD"); + parseContext.profileRequires($1.loc, ECoreProfile, 450, E_GL_AMD_shader_explicit_vertex_parameter, "explicit interpolation"); + parseContext.profileRequires($1.loc, ECompatibilityProfile, 450, E_GL_AMD_shader_explicit_vertex_parameter, "explicit interpolation"); + $$.init($1.loc); + $$.qualifier.explicitInterp = true; +#endif + } + ; + +layout_qualifier + : LAYOUT LEFT_PAREN layout_qualifier_id_list RIGHT_PAREN { + $$ = $3; + } + ; + +layout_qualifier_id_list + : layout_qualifier_id { + $$ = $1; + } + | layout_qualifier_id_list COMMA layout_qualifier_id { + $$ = $1; + $$.shaderQualifiers.merge($3.shaderQualifiers); + parseContext.mergeObjectLayoutQualifiers($$.qualifier, $3.qualifier, false); + } + +layout_qualifier_id + : IDENTIFIER { + $$.init($1.loc); + parseContext.setLayoutQualifier($1.loc, $$, *$1.string); + } + | IDENTIFIER EQUAL constant_expression { + $$.init($1.loc); + parseContext.setLayoutQualifier($1.loc, $$, *$1.string, $3); + } + | SHARED { // because "shared" is both an identifier and a keyword + $$.init($1.loc); + TString strShared("shared"); + parseContext.setLayoutQualifier($1.loc, $$, strShared); + } + ; + +precise_qualifier + : PRECISE { + parseContext.profileRequires($$.loc, ECoreProfile | ECompatibilityProfile, 400, E_GL_ARB_gpu_shader5, "precise"); + parseContext.profileRequires($1.loc, EEsProfile, 320, Num_AEP_gpu_shader5, AEP_gpu_shader5, "precise"); + $$.init($1.loc); + $$.qualifier.noContraction = true; + } + ; + +type_qualifier + : single_type_qualifier { + $$ = $1; + } + | type_qualifier single_type_qualifier { + $$ = $1; + if ($$.basicType == EbtVoid) + $$.basicType = $2.basicType; + + $$.shaderQualifiers.merge($2.shaderQualifiers); + parseContext.mergeQualifiers($$.loc, $$.qualifier, $2.qualifier, false); + } + ; + +single_type_qualifier + : storage_qualifier { + $$ = $1; + } + | layout_qualifier { + $$ = $1; + } + | precision_qualifier { + parseContext.checkPrecisionQualifier($1.loc, $1.qualifier.precision); + $$ = $1; + } + | interpolation_qualifier { + // allow inheritance of storage qualifier from block declaration + $$ = $1; + } + | invariant_qualifier { + // allow inheritance of storage qualifier from block declaration + $$ = $1; + } + | precise_qualifier { + // allow inheritance of storage qualifier from block declaration + $$ = $1; + } + ; + +storage_qualifier + : CONST { + $$.init($1.loc); + $$.qualifier.storage = EvqConst; // will later turn into EvqConstReadOnly, if the initializer is not constant + } + | ATTRIBUTE { + parseContext.requireStage($1.loc, EShLangVertex, "attribute"); + parseContext.checkDeprecated($1.loc, ECoreProfile, 130, "attribute"); + parseContext.checkDeprecated($1.loc, ENoProfile, 130, "attribute"); + parseContext.requireNotRemoved($1.loc, ECoreProfile, 420, "attribute"); + parseContext.requireNotRemoved($1.loc, EEsProfile, 300, "attribute"); + + parseContext.globalCheck($1.loc, "attribute"); + + $$.init($1.loc); + $$.qualifier.storage = EvqVaryingIn; + } + | VARYING { + parseContext.checkDeprecated($1.loc, ENoProfile, 130, "varying"); + parseContext.checkDeprecated($1.loc, ECoreProfile, 130, "varying"); + parseContext.requireNotRemoved($1.loc, ECoreProfile, 420, "varying"); + parseContext.requireNotRemoved($1.loc, EEsProfile, 300, "varying"); + + parseContext.globalCheck($1.loc, "varying"); + + $$.init($1.loc); + if (parseContext.language == EShLangVertex) + $$.qualifier.storage = EvqVaryingOut; + else + $$.qualifier.storage = EvqVaryingIn; + } + | INOUT { + parseContext.globalCheck($1.loc, "inout"); + $$.init($1.loc); + $$.qualifier.storage = EvqInOut; + } + | IN { + parseContext.globalCheck($1.loc, "in"); + $$.init($1.loc); + // whether this is a parameter "in" or a pipeline "in" will get sorted out a bit later + $$.qualifier.storage = EvqIn; + } + | OUT { + parseContext.globalCheck($1.loc, "out"); + $$.init($1.loc); + // whether this is a parameter "out" or a pipeline "out" will get sorted out a bit later + $$.qualifier.storage = EvqOut; + } + | CENTROID { + parseContext.profileRequires($1.loc, ENoProfile, 120, 0, "centroid"); + parseContext.profileRequires($1.loc, EEsProfile, 300, 0, "centroid"); + parseContext.globalCheck($1.loc, "centroid"); + $$.init($1.loc); + $$.qualifier.centroid = true; + } + | PATCH { + parseContext.globalCheck($1.loc, "patch"); + parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangTessControlMask | EShLangTessEvaluationMask), "patch"); + $$.init($1.loc); + $$.qualifier.patch = true; + } + | SAMPLE { + parseContext.globalCheck($1.loc, "sample"); + $$.init($1.loc); + $$.qualifier.sample = true; + } + | UNIFORM { + parseContext.globalCheck($1.loc, "uniform"); + $$.init($1.loc); + $$.qualifier.storage = EvqUniform; + } + | BUFFER { + parseContext.globalCheck($1.loc, "buffer"); + $$.init($1.loc); + $$.qualifier.storage = EvqBuffer; + } + | 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"); + $$.init($1.loc); + $$.qualifier.storage = EvqShared; + } + | COHERENT { + $$.init($1.loc); + $$.qualifier.coherent = true; + } + | VOLATILE { + $$.init($1.loc); + $$.qualifier.volatil = true; + } + | RESTRICT { + $$.init($1.loc); + $$.qualifier.restrict = true; + } + | READONLY { + $$.init($1.loc); + $$.qualifier.readonly = true; + } + | WRITEONLY { + $$.init($1.loc); + $$.qualifier.writeonly = true; + } + | SUBROUTINE { + parseContext.spvRemoved($1.loc, "subroutine"); + parseContext.globalCheck($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"); + $$.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 + } + | type_name_list COMMA TYPE_NAME { + } + ; + +type_specifier + : type_specifier_nonarray { + $$ = $1; + $$.qualifier.precision = parseContext.getDefaultPrecision($$); + } + | type_specifier_nonarray array_specifier { + parseContext.arrayDimCheck($2.loc, $2.arraySizes, 0); + $$ = $1; + $$.qualifier.precision = parseContext.getDefaultPrecision($$); + $$.arraySizes = $2.arraySizes; + } + ; + +array_specifier + : LEFT_BRACKET RIGHT_BRACKET { + $$.loc = $1.loc; + $$.arraySizes = new TArraySizes; + $$.arraySizes->addInnerSize(); + } + | LEFT_BRACKET conditional_expression RIGHT_BRACKET { + $$.loc = $1.loc; + $$.arraySizes = new TArraySizes; + + TArraySize size; + parseContext.arraySizeCheck($2->getLoc(), $2, size); + $$.arraySizes->addInnerSize(size); + } + | array_specifier LEFT_BRACKET RIGHT_BRACKET { + $$ = $1; + $$.arraySizes->addInnerSize(); + } + | array_specifier LEFT_BRACKET conditional_expression RIGHT_BRACKET { + $$ = $1; + + TArraySize size; + parseContext.arraySizeCheck($3->getLoc(), $3, size); + $$.arraySizes->addInnerSize(size); + } + ; + +type_specifier_nonarray + : VOID { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtVoid; + } + | FLOAT { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloat; + } + | DOUBLE { + parseContext.doubleCheck($1.loc, "double"); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtDouble; + } + | FLOAT16_T { +#ifdef AMD_EXTENSIONS + parseContext.float16Check($1.loc, "half float", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloat16; +#endif + } + | INT { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtInt; + } + | UINT { + parseContext.fullIntegerCheck($1.loc, "unsigned integer"); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtUint; + } + | INT64_T { + parseContext.int64Check($1.loc, "64-bit integer", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtInt64; + } + | UINT64_T { + parseContext.int64Check($1.loc, "64-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtUint64; + } + | BOOL { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtBool; + } + | VEC2 { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloat; + $$.setVector(2); + } + | VEC3 { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloat; + $$.setVector(3); + } + | VEC4 { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloat; + $$.setVector(4); + } + | DVEC2 { + parseContext.doubleCheck($1.loc, "double vector"); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtDouble; + $$.setVector(2); + } + | DVEC3 { + parseContext.doubleCheck($1.loc, "double vector"); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtDouble; + $$.setVector(3); + } + | DVEC4 { + parseContext.doubleCheck($1.loc, "double vector"); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtDouble; + $$.setVector(4); + } + | F16VEC2 { +#ifdef AMD_EXTENSIONS + parseContext.float16Check($1.loc, "half float vector", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloat16; + $$.setVector(2); +#endif + } + | F16VEC3 { +#ifdef AMD_EXTENSIONS + parseContext.float16Check($1.loc, "half float vector", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloat16; + $$.setVector(3); +#endif + } + | F16VEC4 { +#ifdef AMD_EXTENSIONS + parseContext.float16Check($1.loc, "half float vector", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloat16; + $$.setVector(4); +#endif + } + | BVEC2 { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtBool; + $$.setVector(2); + } + | BVEC3 { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtBool; + $$.setVector(3); + } + | BVEC4 { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtBool; + $$.setVector(4); + } + | IVEC2 { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtInt; + $$.setVector(2); + } + | IVEC3 { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtInt; + $$.setVector(3); + } + | IVEC4 { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtInt; + $$.setVector(4); + } + | I64VEC2 { + parseContext.int64Check($1.loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtInt64; + $$.setVector(2); + } + | I64VEC3 { + parseContext.int64Check($1.loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtInt64; + $$.setVector(3); + } + | I64VEC4 { + parseContext.int64Check($1.loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtInt64; + $$.setVector(4); + } + | UVEC2 { + parseContext.fullIntegerCheck($1.loc, "unsigned integer vector"); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtUint; + $$.setVector(2); + } + | UVEC3 { + parseContext.fullIntegerCheck($1.loc, "unsigned integer vector"); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtUint; + $$.setVector(3); + } + | UVEC4 { + parseContext.fullIntegerCheck($1.loc, "unsigned integer vector"); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtUint; + $$.setVector(4); + } + | U64VEC2 { + parseContext.int64Check($1.loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtUint64; + $$.setVector(2); + } + | U64VEC3 { + parseContext.int64Check($1.loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtUint64; + $$.setVector(3); + } + | U64VEC4 { + parseContext.int64Check($1.loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtUint64; + $$.setVector(4); + } + | MAT2 { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloat; + $$.setMatrix(2, 2); + } + | MAT3 { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloat; + $$.setMatrix(3, 3); + } + | MAT4 { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloat; + $$.setMatrix(4, 4); + } + | MAT2X2 { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloat; + $$.setMatrix(2, 2); + } + | MAT2X3 { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloat; + $$.setMatrix(2, 3); + } + | MAT2X4 { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloat; + $$.setMatrix(2, 4); + } + | MAT3X2 { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloat; + $$.setMatrix(3, 2); + } + | MAT3X3 { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloat; + $$.setMatrix(3, 3); + } + | MAT3X4 { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloat; + $$.setMatrix(3, 4); + } + | MAT4X2 { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloat; + $$.setMatrix(4, 2); + } + | MAT4X3 { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloat; + $$.setMatrix(4, 3); + } + | MAT4X4 { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloat; + $$.setMatrix(4, 4); + } + | DMAT2 { + parseContext.doubleCheck($1.loc, "double matrix"); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtDouble; + $$.setMatrix(2, 2); + } + | DMAT3 { + parseContext.doubleCheck($1.loc, "double matrix"); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtDouble; + $$.setMatrix(3, 3); + } + | DMAT4 { + parseContext.doubleCheck($1.loc, "double matrix"); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtDouble; + $$.setMatrix(4, 4); + } + | DMAT2X2 { + parseContext.doubleCheck($1.loc, "double matrix"); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtDouble; + $$.setMatrix(2, 2); + } + | DMAT2X3 { + parseContext.doubleCheck($1.loc, "double matrix"); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtDouble; + $$.setMatrix(2, 3); + } + | DMAT2X4 { + parseContext.doubleCheck($1.loc, "double matrix"); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtDouble; + $$.setMatrix(2, 4); + } + | DMAT3X2 { + parseContext.doubleCheck($1.loc, "double matrix"); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtDouble; + $$.setMatrix(3, 2); + } + | DMAT3X3 { + parseContext.doubleCheck($1.loc, "double matrix"); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtDouble; + $$.setMatrix(3, 3); + } + | DMAT3X4 { + parseContext.doubleCheck($1.loc, "double matrix"); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtDouble; + $$.setMatrix(3, 4); + } + | DMAT4X2 { + parseContext.doubleCheck($1.loc, "double matrix"); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtDouble; + $$.setMatrix(4, 2); + } + | DMAT4X3 { + parseContext.doubleCheck($1.loc, "double matrix"); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtDouble; + $$.setMatrix(4, 3); + } + | DMAT4X4 { + parseContext.doubleCheck($1.loc, "double matrix"); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtDouble; + $$.setMatrix(4, 4); + } + | F16MAT2 { +#ifdef AMD_EXTENSIONS + parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloat16; + $$.setMatrix(2, 2); +#endif + } + | F16MAT3 { +#ifdef AMD_EXTENSIONS + parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloat16; + $$.setMatrix(3, 3); +#endif + } + | F16MAT4 { +#ifdef AMD_EXTENSIONS + parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloat16; + $$.setMatrix(4, 4); +#endif + } + | F16MAT2X2 { +#ifdef AMD_EXTENSIONS + parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloat16; + $$.setMatrix(2, 2); +#endif + } + | F16MAT2X3 { +#ifdef AMD_EXTENSIONS + parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloat16; + $$.setMatrix(2, 3); +#endif + } + | F16MAT2X4 { +#ifdef AMD_EXTENSIONS + parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloat16; + $$.setMatrix(2, 4); +#endif + } + | F16MAT3X2 { +#ifdef AMD_EXTENSIONS + parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloat16; + $$.setMatrix(3, 2); +#endif + } + | F16MAT3X3 { +#ifdef AMD_EXTENSIONS + parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloat16; + $$.setMatrix(3, 3); +#endif + } + | F16MAT3X4 { +#ifdef AMD_EXTENSIONS + parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloat16; + $$.setMatrix(3, 4); +#endif + } + | F16MAT4X2 { +#ifdef AMD_EXTENSIONS + parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloat16; + $$.setMatrix(4, 2); +#endif + } + | F16MAT4X3 { +#ifdef AMD_EXTENSIONS + parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloat16; + $$.setMatrix(4, 3); +#endif + } + | F16MAT4X4 { +#ifdef AMD_EXTENSIONS + parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloat16; + $$.setMatrix(4, 4); +#endif + } + | ATOMIC_UINT { + parseContext.vulkanRemoved($1.loc, "atomic counter types"); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtAtomicUint; + } + | SAMPLER1D { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.set(EbtFloat, Esd1D); + } + | SAMPLER2D { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.set(EbtFloat, Esd2D); + } + | SAMPLER3D { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.set(EbtFloat, Esd3D); + } + | SAMPLERCUBE { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.set(EbtFloat, EsdCube); + } + | SAMPLER1DSHADOW { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.set(EbtFloat, Esd1D, false, true); + } + | SAMPLER2DSHADOW { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.set(EbtFloat, Esd2D, false, true); + } + | SAMPLERCUBESHADOW { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.set(EbtFloat, EsdCube, false, true); + } + | SAMPLER1DARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.set(EbtFloat, Esd1D, true); + } + | SAMPLER2DARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.set(EbtFloat, Esd2D, true); + } + | SAMPLER1DARRAYSHADOW { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.set(EbtFloat, Esd1D, true, true); + } + | SAMPLER2DARRAYSHADOW { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.set(EbtFloat, Esd2D, true, true); + } + | SAMPLERCUBEARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.set(EbtFloat, EsdCube, true); + } + | SAMPLERCUBEARRAYSHADOW { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.set(EbtFloat, EsdCube, true, true); + } + | ISAMPLER1D { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.set(EbtInt, Esd1D); + } + | ISAMPLER2D { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.set(EbtInt, Esd2D); + } + | ISAMPLER3D { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.set(EbtInt, Esd3D); + } + | ISAMPLERCUBE { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.set(EbtInt, EsdCube); + } + | ISAMPLER1DARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.set(EbtInt, Esd1D, true); + } + | ISAMPLER2DARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.set(EbtInt, Esd2D, true); + } + | ISAMPLERCUBEARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.set(EbtInt, EsdCube, true); + } + | USAMPLER1D { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.set(EbtUint, Esd1D); + } + | USAMPLER2D { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.set(EbtUint, Esd2D); + } + | USAMPLER3D { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.set(EbtUint, Esd3D); + } + | USAMPLERCUBE { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.set(EbtUint, EsdCube); + } + | USAMPLER1DARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.set(EbtUint, Esd1D, true); + } + | USAMPLER2DARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.set(EbtUint, Esd2D, true); + } + | USAMPLERCUBEARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.set(EbtUint, EsdCube, true); + } + | SAMPLER2DRECT { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.set(EbtFloat, EsdRect); + } + | SAMPLER2DRECTSHADOW { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.set(EbtFloat, EsdRect, false, true); + } + | ISAMPLER2DRECT { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.set(EbtInt, EsdRect); + } + | USAMPLER2DRECT { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.set(EbtUint, EsdRect); + } + | SAMPLERBUFFER { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.set(EbtFloat, EsdBuffer); + } + | ISAMPLERBUFFER { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.set(EbtInt, EsdBuffer); + } + | USAMPLERBUFFER { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.set(EbtUint, EsdBuffer); + } + | SAMPLER2DMS { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.set(EbtFloat, Esd2D, false, false, true); + } + | ISAMPLER2DMS { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.set(EbtInt, Esd2D, false, false, true); + } + | USAMPLER2DMS { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.set(EbtUint, Esd2D, false, false, true); + } + | SAMPLER2DMSARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.set(EbtFloat, Esd2D, true, false, true); + } + | ISAMPLER2DMSARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.set(EbtInt, Esd2D, true, false, true); + } + | USAMPLER2DMSARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.set(EbtUint, Esd2D, true, false, true); + } + | SAMPLER { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setPureSampler(false); + } + | SAMPLERSHADOW { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setPureSampler(true); + } + | TEXTURE1D { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setTexture(EbtFloat, Esd1D); + } + | TEXTURE2D { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setTexture(EbtFloat, Esd2D); + } + | TEXTURE3D { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setTexture(EbtFloat, Esd3D); + } + | TEXTURECUBE { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setTexture(EbtFloat, EsdCube); + } + | TEXTURE1DARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setTexture(EbtFloat, Esd1D, true); + } + | TEXTURE2DARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setTexture(EbtFloat, Esd2D, true); + } + | TEXTURECUBEARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setTexture(EbtFloat, EsdCube, true); + } + | ITEXTURE1D { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setTexture(EbtInt, Esd1D); + } + | ITEXTURE2D { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setTexture(EbtInt, Esd2D); + } + | ITEXTURE3D { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setTexture(EbtInt, Esd3D); + } + | ITEXTURECUBE { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setTexture(EbtInt, EsdCube); + } + | ITEXTURE1DARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setTexture(EbtInt, Esd1D, true); + } + | ITEXTURE2DARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setTexture(EbtInt, Esd2D, true); + } + | ITEXTURECUBEARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setTexture(EbtInt, EsdCube, true); + } + | UTEXTURE1D { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setTexture(EbtUint, Esd1D); + } + | UTEXTURE2D { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setTexture(EbtUint, Esd2D); + } + | UTEXTURE3D { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setTexture(EbtUint, Esd3D); + } + | UTEXTURECUBE { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setTexture(EbtUint, EsdCube); + } + | UTEXTURE1DARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setTexture(EbtUint, Esd1D, true); + } + | UTEXTURE2DARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setTexture(EbtUint, Esd2D, true); + } + | UTEXTURECUBEARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setTexture(EbtUint, EsdCube, true); + } + | TEXTURE2DRECT { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setTexture(EbtFloat, EsdRect); + } + | ITEXTURE2DRECT { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setTexture(EbtInt, EsdRect); + } + | UTEXTURE2DRECT { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setTexture(EbtUint, EsdRect); + } + | TEXTUREBUFFER { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setTexture(EbtFloat, EsdBuffer); + } + | ITEXTUREBUFFER { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setTexture(EbtInt, EsdBuffer); + } + | UTEXTUREBUFFER { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setTexture(EbtUint, EsdBuffer); + } + | TEXTURE2DMS { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setTexture(EbtFloat, Esd2D, false, false, true); + } + | ITEXTURE2DMS { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setTexture(EbtInt, Esd2D, false, false, true); + } + | UTEXTURE2DMS { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setTexture(EbtUint, Esd2D, false, false, true); + } + | TEXTURE2DMSARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setTexture(EbtFloat, Esd2D, true, false, true); + } + | ITEXTURE2DMSARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setTexture(EbtInt, Esd2D, true, false, true); + } + | UTEXTURE2DMSARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setTexture(EbtUint, Esd2D, true, false, true); + } + | IMAGE1D { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtFloat, Esd1D); + } + | IIMAGE1D { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtInt, Esd1D); + } + | UIMAGE1D { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtUint, Esd1D); + } + | IMAGE2D { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtFloat, Esd2D); + } + | IIMAGE2D { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtInt, Esd2D); + } + | UIMAGE2D { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtUint, Esd2D); + } + | IMAGE3D { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtFloat, Esd3D); + } + | IIMAGE3D { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtInt, Esd3D); + } + | UIMAGE3D { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtUint, Esd3D); + } + | IMAGE2DRECT { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtFloat, EsdRect); + } + | IIMAGE2DRECT { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtInt, EsdRect); + } + | UIMAGE2DRECT { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtUint, EsdRect); + } + | IMAGECUBE { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtFloat, EsdCube); + } + | IIMAGECUBE { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtInt, EsdCube); + } + | UIMAGECUBE { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtUint, EsdCube); + } + | IMAGEBUFFER { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtFloat, EsdBuffer); + } + | IIMAGEBUFFER { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtInt, EsdBuffer); + } + | UIMAGEBUFFER { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtUint, EsdBuffer); + } + | IMAGE1DARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtFloat, Esd1D, true); + } + | IIMAGE1DARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtInt, Esd1D, true); + } + | UIMAGE1DARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtUint, Esd1D, true); + } + | IMAGE2DARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtFloat, Esd2D, true); + } + | IIMAGE2DARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtInt, Esd2D, true); + } + | UIMAGE2DARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtUint, Esd2D, true); + } + | IMAGECUBEARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtFloat, EsdCube, true); + } + | IIMAGECUBEARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtInt, EsdCube, true); + } + | UIMAGECUBEARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtUint, EsdCube, true); + } + | IMAGE2DMS { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtFloat, Esd2D, false, false, true); + } + | IIMAGE2DMS { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtInt, Esd2D, false, false, true); + } + | UIMAGE2DMS { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtUint, Esd2D, false, false, true); + } + | IMAGE2DMSARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtFloat, Esd2D, true, false, true); + } + | IIMAGE2DMSARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtInt, Esd2D, true, false, true); + } + | UIMAGE2DMSARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtUint, Esd2D, true, false, true); + } + | SAMPLEREXTERNALOES { // GL_OES_EGL_image_external + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.set(EbtFloat, Esd2D); + $$.sampler.external = true; + } + | SUBPASSINPUT { + parseContext.requireStage($1.loc, EShLangFragment, "subpass input"); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setSubpass(EbtFloat); + } + | SUBPASSINPUTMS { + parseContext.requireStage($1.loc, EShLangFragment, "subpass input"); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setSubpass(EbtFloat, true); + } + | ISUBPASSINPUT { + parseContext.requireStage($1.loc, EShLangFragment, "subpass input"); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setSubpass(EbtInt); + } + | ISUBPASSINPUTMS { + parseContext.requireStage($1.loc, EShLangFragment, "subpass input"); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setSubpass(EbtInt, true); + } + | USUBPASSINPUT { + parseContext.requireStage($1.loc, EShLangFragment, "subpass input"); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setSubpass(EbtUint); + } + | USUBPASSINPUTMS { + parseContext.requireStage($1.loc, EShLangFragment, "subpass input"); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setSubpass(EbtUint, true); + } + | struct_specifier { + $$ = $1; + $$.qualifier.storage = parseContext.symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary; + parseContext.structTypeCheck($$.loc, $$); + } + | TYPE_NAME { + // + // This is for user defined type names. The lexical phase looked up the + // type. + // + if (const TVariable* variable = ($1.symbol)->getAsVariable()) { + const TType& structure = variable->getType(); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtStruct; + $$.userDef = &structure; + } else + parseContext.error($1.loc, "expected type name", $1.string->c_str(), ""); + } + ; + +precision_qualifier + : HIGH_PRECISION { + parseContext.profileRequires($1.loc, ENoProfile, 130, 0, "highp precision qualifier"); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + parseContext.handlePrecisionQualifier($1.loc, $$.qualifier, EpqHigh); + } + | MEDIUM_PRECISION { + parseContext.profileRequires($1.loc, ENoProfile, 130, 0, "mediump precision qualifier"); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + parseContext.handlePrecisionQualifier($1.loc, $$.qualifier, EpqMedium); + } + | LOW_PRECISION { + parseContext.profileRequires($1.loc, ENoProfile, 130, 0, "lowp precision qualifier"); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + parseContext.handlePrecisionQualifier($1.loc, $$.qualifier, EpqLow); + } + ; + +struct_specifier + : STRUCT IDENTIFIER LEFT_BRACE { parseContext.nestedStructCheck($1.loc); } struct_declaration_list RIGHT_BRACE { + TType* structure = new TType($5, *$2.string); + parseContext.structArrayCheck($2.loc, *structure); + TVariable* userTypeDef = new TVariable($2.string, *structure, true); + if (! parseContext.symbolTable.insert(*userTypeDef)) + parseContext.error($2.loc, "redefinition", $2.string->c_str(), "struct"); + $$.init($1.loc); + $$.basicType = EbtStruct; + $$.userDef = structure; + --parseContext.structNestingLevel; + } + | STRUCT LEFT_BRACE { parseContext.nestedStructCheck($1.loc); } struct_declaration_list RIGHT_BRACE { + TType* structure = new TType($4, TString("")); + $$.init($1.loc); + $$.basicType = EbtStruct; + $$.userDef = structure; + --parseContext.structNestingLevel; + } + ; + +struct_declaration_list + : struct_declaration { + $$ = $1; + } + | struct_declaration_list struct_declaration { + $$ = $1; + for (unsigned int i = 0; i < $2->size(); ++i) { + for (unsigned int j = 0; j < $$->size(); ++j) { + if ((*$$)[j].type->getFieldName() == (*$2)[i].type->getFieldName()) + parseContext.error((*$2)[i].loc, "duplicate member name:", "", (*$2)[i].type->getFieldName().c_str()); + } + $$->push_back((*$2)[i]); + } + } + ; + +struct_declaration + : type_specifier struct_declarator_list SEMICOLON { + if ($1.arraySizes) { + parseContext.profileRequires($1.loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type"); + parseContext.profileRequires($1.loc, EEsProfile, 300, 0, "arrayed type"); + if (parseContext.profile == EEsProfile) + parseContext.arraySizeRequiredCheck($1.loc, *$1.arraySizes); + } + + $$ = $2; + + parseContext.voidErrorCheck($1.loc, (*$2)[0].type->getFieldName(), $1.basicType); + parseContext.precisionQualifierCheck($1.loc, $1.basicType, $1.qualifier); + + for (unsigned int i = 0; i < $$->size(); ++i) { + parseContext.arrayDimCheck($1.loc, (*$$)[i].type, $1.arraySizes); + (*$$)[i].type->mergeType($1); + } + } + | type_qualifier type_specifier struct_declarator_list SEMICOLON { + parseContext.globalQualifierFixCheck($1.loc, $1.qualifier); + if ($2.arraySizes) { + parseContext.profileRequires($2.loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type"); + parseContext.profileRequires($2.loc, EEsProfile, 300, 0, "arrayed type"); + if (parseContext.profile == EEsProfile) + parseContext.arraySizeRequiredCheck($2.loc, *$2.arraySizes); + } + + $$ = $3; + + parseContext.checkNoShaderLayouts($1.loc, $1.shaderQualifiers); + parseContext.voidErrorCheck($2.loc, (*$3)[0].type->getFieldName(), $2.basicType); + parseContext.mergeQualifiers($2.loc, $2.qualifier, $1.qualifier, true); + parseContext.precisionQualifierCheck($2.loc, $2.basicType, $2.qualifier); + + for (unsigned int i = 0; i < $$->size(); ++i) { + parseContext.arrayDimCheck($1.loc, (*$$)[i].type, $2.arraySizes); + (*$$)[i].type->mergeType($2); + } + } + ; + +struct_declarator_list + : struct_declarator { + $$ = new TTypeList; + $$->push_back($1); + } + | struct_declarator_list COMMA struct_declarator { + $$->push_back($3); + } + ; + +struct_declarator + : IDENTIFIER { + $$.type = new TType(EbtVoid); + $$.loc = $1.loc; + $$.type->setFieldName(*$1.string); + } + | IDENTIFIER array_specifier { + parseContext.arrayDimCheck($1.loc, $2.arraySizes, 0); + + $$.type = new TType(EbtVoid); + $$.loc = $1.loc; + $$.type->setFieldName(*$1.string); + $$.type->newArraySizes(*$2.arraySizes); + } + ; + +initializer + : assignment_expression { + $$ = $1; + } + | LEFT_BRACE initializer_list RIGHT_BRACE { + const char* initFeature = "{ } style initializers"; + parseContext.requireProfile($1.loc, ~EEsProfile, initFeature); + parseContext.profileRequires($1.loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature); + $$ = $2; + } + | LEFT_BRACE initializer_list COMMA RIGHT_BRACE { + const char* initFeature = "{ } style initializers"; + parseContext.requireProfile($1.loc, ~EEsProfile, initFeature); + parseContext.profileRequires($1.loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature); + $$ = $2; + } + ; + +initializer_list + : initializer { + $$ = parseContext.intermediate.growAggregate(0, $1, $1->getLoc()); + } + | initializer_list COMMA initializer { + $$ = parseContext.intermediate.growAggregate($1, $3); + } + ; + +declaration_statement + : declaration { $$ = $1; } + ; + +statement + : compound_statement { $$ = $1; } + | simple_statement { $$ = $1; } + ; + +// Grammar Note: labeled statements for switch statements only; 'goto' is not supported. + +simple_statement + : declaration_statement { $$ = $1; } + | expression_statement { $$ = $1; } + | selection_statement { $$ = $1; } + | switch_statement { $$ = $1; } + | case_label { $$ = $1; } + | iteration_statement { $$ = $1; } + | jump_statement { $$ = $1; } + ; + +compound_statement + : LEFT_BRACE RIGHT_BRACE { $$ = 0; } + | LEFT_BRACE { + parseContext.symbolTable.push(); + ++parseContext.statementNestingLevel; + } + statement_list { + parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); + --parseContext.statementNestingLevel; + } + RIGHT_BRACE { + if ($3 && $3->getAsAggregate()) + $3->getAsAggregate()->setOperator(EOpSequence); + $$ = $3; + } + ; + +statement_no_new_scope + : compound_statement_no_new_scope { $$ = $1; } + | simple_statement { $$ = $1; } + ; + +statement_scoped + : { + ++parseContext.controlFlowNestingLevel; + } + compound_statement { + --parseContext.controlFlowNestingLevel; + $$ = $2; + } + | { + parseContext.symbolTable.push(); + ++parseContext.statementNestingLevel; + ++parseContext.controlFlowNestingLevel; + } + simple_statement { + parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); + --parseContext.statementNestingLevel; + --parseContext.controlFlowNestingLevel; + $$ = $2; + } + +compound_statement_no_new_scope + // Statement that doesn't create a new scope, for selection_statement, iteration_statement + : LEFT_BRACE RIGHT_BRACE { + $$ = 0; + } + | LEFT_BRACE statement_list RIGHT_BRACE { + if ($2 && $2->getAsAggregate()) + $2->getAsAggregate()->setOperator(EOpSequence); + $$ = $2; + } + ; + +statement_list + : statement { + $$ = parseContext.intermediate.makeAggregate($1); + if ($1 && $1->getAsBranchNode() && ($1->getAsBranchNode()->getFlowOp() == EOpCase || + $1->getAsBranchNode()->getFlowOp() == EOpDefault)) { + parseContext.wrapupSwitchSubsequence(0, $1); + $$ = 0; // start a fresh subsequence for what's after this case + } + } + | statement_list statement { + if ($2 && $2->getAsBranchNode() && ($2->getAsBranchNode()->getFlowOp() == EOpCase || + $2->getAsBranchNode()->getFlowOp() == EOpDefault)) { + parseContext.wrapupSwitchSubsequence($1 ? $1->getAsAggregate() : 0, $2); + $$ = 0; // start a fresh subsequence for what's after this case + } else + $$ = parseContext.intermediate.growAggregate($1, $2); + } + ; + +expression_statement + : SEMICOLON { $$ = 0; } + | expression SEMICOLON { $$ = static_cast($1); } + ; + +selection_statement + : IF LEFT_PAREN expression RIGHT_PAREN selection_rest_statement { + parseContext.boolCheck($1.loc, $3); + $$ = parseContext.intermediate.addSelection($3, $5, $1.loc); + } + ; + +selection_rest_statement + : statement_scoped ELSE statement_scoped { + $$.node1 = $1; + $$.node2 = $3; + } + | statement_scoped { + $$.node1 = $1; + $$.node2 = 0; + } + ; + +condition + // In 1996 c++ draft, conditions can include single declarations + : expression { + $$ = $1; + parseContext.boolCheck($1->getLoc(), $1); + } + | fully_specified_type IDENTIFIER EQUAL initializer { + parseContext.boolCheck($2.loc, $1); + + TType type($1); + TIntermNode* initNode = parseContext.declareVariable($2.loc, *$2.string, $1, 0, $4); + if (initNode) + $$ = initNode->getAsTyped(); + else + $$ = 0; + } + ; + +switch_statement + : SWITCH LEFT_PAREN expression RIGHT_PAREN { + // start new switch sequence on the switch stack + ++parseContext.controlFlowNestingLevel; + ++parseContext.statementNestingLevel; + parseContext.switchSequenceStack.push_back(new TIntermSequence); + parseContext.switchLevel.push_back(parseContext.statementNestingLevel); + parseContext.symbolTable.push(); + } + LEFT_BRACE switch_statement_list RIGHT_BRACE { + $$ = parseContext.addSwitch($1.loc, $3, $7 ? $7->getAsAggregate() : 0); + delete parseContext.switchSequenceStack.back(); + parseContext.switchSequenceStack.pop_back(); + parseContext.switchLevel.pop_back(); + parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); + --parseContext.statementNestingLevel; + --parseContext.controlFlowNestingLevel; + } + ; + +switch_statement_list + : /* nothing */ { + $$ = 0; + } + | statement_list { + $$ = $1; + } + ; + +case_label + : CASE expression COLON { + $$ = 0; + if (parseContext.switchLevel.size() == 0) + parseContext.error($1.loc, "cannot appear outside switch statement", "case", ""); + else if (parseContext.switchLevel.back() != parseContext.statementNestingLevel) + parseContext.error($1.loc, "cannot be nested inside control flow", "case", ""); + else { + parseContext.constantValueCheck($2, "case"); + parseContext.integerCheck($2, "case"); + $$ = parseContext.intermediate.addBranch(EOpCase, $2, $1.loc); + } + } + | DEFAULT COLON { + $$ = 0; + if (parseContext.switchLevel.size() == 0) + parseContext.error($1.loc, "cannot appear outside switch statement", "default", ""); + else if (parseContext.switchLevel.back() != parseContext.statementNestingLevel) + parseContext.error($1.loc, "cannot be nested inside control flow", "default", ""); + else + $$ = parseContext.intermediate.addBranch(EOpDefault, $1.loc); + } + ; + +iteration_statement + : WHILE LEFT_PAREN { + if (! parseContext.limits.whileLoops) + parseContext.error($1.loc, "while loops not available", "limitation", ""); + parseContext.symbolTable.push(); + ++parseContext.loopNestingLevel; + ++parseContext.statementNestingLevel; + ++parseContext.controlFlowNestingLevel; + } + condition RIGHT_PAREN statement_no_new_scope { + parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); + $$ = parseContext.intermediate.addLoop($6, $4, 0, true, $1.loc); + --parseContext.loopNestingLevel; + --parseContext.statementNestingLevel; + --parseContext.controlFlowNestingLevel; + } + | DO { + ++parseContext.loopNestingLevel; + ++parseContext.statementNestingLevel; + ++parseContext.controlFlowNestingLevel; + } + statement WHILE LEFT_PAREN expression RIGHT_PAREN SEMICOLON { + if (! parseContext.limits.whileLoops) + parseContext.error($1.loc, "do-while loops not available", "limitation", ""); + + parseContext.boolCheck($8.loc, $6); + + $$ = parseContext.intermediate.addLoop($3, $6, 0, false, $4.loc); + --parseContext.loopNestingLevel; + --parseContext.statementNestingLevel; + --parseContext.controlFlowNestingLevel; + } + | FOR LEFT_PAREN { + parseContext.symbolTable.push(); + ++parseContext.loopNestingLevel; + ++parseContext.statementNestingLevel; + ++parseContext.controlFlowNestingLevel; + } + for_init_statement for_rest_statement RIGHT_PAREN statement_no_new_scope { + parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); + $$ = parseContext.intermediate.makeAggregate($4, $2.loc); + TIntermLoop* forLoop = parseContext.intermediate.addLoop($7, reinterpret_cast($5.node1), reinterpret_cast($5.node2), true, $1.loc); + if (! parseContext.limits.nonInductiveForLoops) + parseContext.inductiveLoopCheck($1.loc, $4, forLoop); + $$ = parseContext.intermediate.growAggregate($$, forLoop, $1.loc); + $$->getAsAggregate()->setOperator(EOpSequence); + --parseContext.loopNestingLevel; + --parseContext.statementNestingLevel; + --parseContext.controlFlowNestingLevel; + } + ; + +for_init_statement + : expression_statement { + $$ = $1; + } + | declaration_statement { + $$ = $1; + } + ; + +conditionopt + : condition { + $$ = $1; + } + | /* May be null */ { + $$ = 0; + } + ; + +for_rest_statement + : conditionopt SEMICOLON { + $$.node1 = $1; + $$.node2 = 0; + } + | conditionopt SEMICOLON expression { + $$.node1 = $1; + $$.node2 = $3; + } + ; + +jump_statement + : CONTINUE SEMICOLON { + if (parseContext.loopNestingLevel <= 0) + parseContext.error($1.loc, "continue statement only allowed in loops", "", ""); + $$ = parseContext.intermediate.addBranch(EOpContinue, $1.loc); + } + | BREAK SEMICOLON { + if (parseContext.loopNestingLevel + parseContext.switchSequenceStack.size() <= 0) + parseContext.error($1.loc, "break statement only allowed in switch and loops", "", ""); + $$ = parseContext.intermediate.addBranch(EOpBreak, $1.loc); + } + | RETURN SEMICOLON { + $$ = parseContext.intermediate.addBranch(EOpReturn, $1.loc); + if (parseContext.currentFunctionType->getBasicType() != EbtVoid) + parseContext.error($1.loc, "non-void function must return a value", "return", ""); + if (parseContext.inMain) + parseContext.postMainReturn = true; + } + | RETURN expression SEMICOLON { + $$ = parseContext.handleReturnValue($1.loc, $2); + } + | DISCARD SEMICOLON { + parseContext.requireStage($1.loc, EShLangFragment, "discard"); + $$ = parseContext.intermediate.addBranch(EOpKill, $1.loc); + } + ; + +// Grammar Note: No 'goto'. Gotos are not supported. + +translation_unit + : external_declaration { + $$ = $1; + parseContext.intermediate.setTreeRoot($$); + } + | translation_unit external_declaration { + $$ = parseContext.intermediate.growAggregate($1, $2); + parseContext.intermediate.setTreeRoot($$); + } + ; + +external_declaration + : function_definition { + $$ = $1; + } + | declaration { + $$ = $1; + } + ; + +function_definition + : function_prototype { + $1.function = parseContext.handleFunctionDeclarator($1.loc, *$1.function, false /* not prototype */); + $1.intermNode = parseContext.handleFunctionDefinition($1.loc, *$1.function); + } + compound_statement_no_new_scope { + // May be best done as post process phase on intermediate code + if (parseContext.currentFunctionType->getBasicType() != EbtVoid && ! parseContext.functionReturnsValue) + parseContext.error($1.loc, "function does not return a value:", "", $1.function->getName().c_str()); + parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); + $$ = parseContext.intermediate.growAggregate($1.intermNode, $3); + parseContext.intermediate.setAggregateOperator($$, EOpFunction, $1.function->getType(), $1.loc); + $$->getAsAggregate()->setName($1.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 + $$->getAsAggregate()->setOptimize(parseContext.contextPragma.optimize); + $$->getAsAggregate()->setDebug(parseContext.contextPragma.debug); + $$->getAsAggregate()->addToPragmaTable(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 new file mode 100644 index 0000000..3507c04 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp @@ -0,0 +1,8320 @@ +/* A Bison parser, made by GNU Bison 2.7. */ + +/* Bison implementation for Yacc-like parsers in C + + Copyright (C) 1984, 1989-1990, 2000-2012 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 . */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + 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. */ + +/* C LALR(1) parser skeleton written by Richard Stallman, by + simplifying the original so-called "semantic" parser. */ + +/* All symbols defined below should begin with yy or YY, to avoid + infringing on user name space. This should be done even for local + variables, as they might otherwise be expanded by user macros. + There are some unavoidable exceptions within include files to + define necessary library symbols; they are noted "INFRINGES ON + USER NAME SPACE" below. */ + +/* Identify Bison output. */ +#define YYBISON 1 + +/* Bison version. */ +#define YYBISON_VERSION "2.7" + +/* Skeleton name. */ +#define YYSKELETON_NAME "yacc.c" + +/* Pure parsers. */ +#define YYPURE 1 + +/* Push parsers. */ +#define YYPUSH 0 + +/* Pull parsers. */ +#define YYPULL 1 + + + + +/* Copy the first part of user declarations. */ +/* Line 371 of yacc.c */ +#line 41 "glslang.y" + + +/* Based on: +ANSI C Yacc grammar + +In 1985, Jeff Lee published his Yacc grammar (which is accompanied by a +matching Lex specification) for the April 30, 1985 draft version of the +ANSI C standard. Tom Stockfisch reposted it to net.sources in 1987; that +original, as mentioned in the answer to question 17.25 of the comp.lang.c +FAQ, can be ftp'ed from ftp.uu.net, file usenet/net.sources/ansi.c.grammar.Z. + +I intend to keep this version as close to the current C Standard grammar as +possible; please let me know if you discover discrepancies. + +Jutta Degener, 1995 +*/ + +#include "SymbolTable.h" +#include "ParseHelper.h" +#include "../Public/ShaderLang.h" + +using namespace glslang; + + +/* Line 371 of yacc.c */ +#line 93 "glslang_tab.cpp" + +# ifndef YY_NULL +# if defined __cplusplus && 201103L <= __cplusplus +# define YY_NULL nullptr +# else +# define YY_NULL 0 +# endif +# endif + +/* Enabling verbose error messages. */ +#ifdef YYERROR_VERBOSE +# undef YYERROR_VERBOSE +# define YYERROR_VERBOSE 1 +#else +# define YYERROR_VERBOSE 0 +#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 YYDEBUG +# define YYDEBUG 1 +#endif +#if YYDEBUG +extern int yydebug; +#endif + +/* Tokens. */ +#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 + }; +#endif + + +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef union YYSTYPE +{ +/* Line 387 of yacc.c */ +#line 66 "glslang.y" + + struct { + glslang::TSourceLoc loc; + union { + glslang::TString *string; + int i; + unsigned int u; + long long i64; + unsigned long long u64; + bool b; + double d; + }; + glslang::TSymbol* symbol; + } lex; + struct { + glslang::TSourceLoc loc; + glslang::TOperator op; + union { + TIntermNode* intermNode; + glslang::TIntermNodePair nodePair; + glslang::TIntermTyped* intermTypedNode; + }; + union { + glslang::TPublicType type; + glslang::TFunction* function; + glslang::TParameter param; + glslang::TTypeLoc typeLine; + glslang::TTypeList* typeList; + glslang::TArraySizes* arraySizes; + glslang::TIdentifierList* identifierList; + }; + } interm; + + +/* Line 387 of yacc.c */ +#line 458 "glslang_tab.cpp" +} YYSTYPE; +# 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 */ + +/* Copy the second part of user declarations. */ +/* Line 390 of yacc.c */ +#line 100 "glslang.y" + + +/* windows only pragma */ +#ifdef _MSC_VER + #pragma warning(disable : 4065) + #pragma warning(disable : 4127) + #pragma warning(disable : 4244) +#endif + +#define parseContext (*pParseContext) +#define yyerror(context, msg) context->parserError(msg) + +extern int yylex(YYSTYPE*, TParseContext&); + + +/* Line 390 of yacc.c */ +#line 501 "glslang_tab.cpp" + +#ifdef short +# undef short +#endif + +#ifdef YYTYPE_UINT8 +typedef YYTYPE_UINT8 yytype_uint8; +#else +typedef unsigned char yytype_uint8; +#endif + +#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; +#endif + +#ifdef YYTYPE_UINT16 +typedef YYTYPE_UINT16 yytype_uint16; +#else +typedef unsigned short int yytype_uint16; +#endif + +#ifdef YYTYPE_INT16 +typedef YYTYPE_INT16 yytype_int16; +#else +typedef short int yytype_int16; +#endif + +#ifndef YYSIZE_T +# ifdef __SIZE_TYPE__ +# 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) +# include /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# else +# define YYSIZE_T unsigned int +# endif +#endif + +#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) + +#ifndef YY_ +# if defined YYENABLE_NLS && YYENABLE_NLS +# if ENABLE_NLS +# include /* INFRINGES ON USER NAME SPACE */ +# define YY_(Msgid) dgettext ("bison-runtime", Msgid) +# endif +# endif +# ifndef YY_ +# define YY_(Msgid) Msgid +# endif +#endif + +/* Suppress unused-variable warnings by "using" E. */ +#if ! defined lint || defined __GNUC__ +# define YYUSE(E) ((void) (E)) +#else +# 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) +#else +static int +YYID (yyi) + int yyi; +#endif +{ + return yyi; +} +#endif + +#if ! defined yyoverflow || YYERROR_VERBOSE + +/* The parser invokes alloca or malloc; define the necessary symbols. */ + +# ifdef YYSTACK_USE_ALLOCA +# if YYSTACK_USE_ALLOCA +# ifdef __GNUC__ +# define YYSTACK_ALLOC __builtin_alloca +# elif defined __BUILTIN_VA_ARG_INCR +# include /* INFRINGES ON USER NAME SPACE */ +# elif defined _AIX +# define YYSTACK_ALLOC __alloca +# elif defined _MSC_VER +# include /* INFRINGES ON USER NAME SPACE */ +# 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) +# include /* INFRINGES ON USER NAME SPACE */ + /* Use EXIT_SUCCESS as a witness for stdlib.h. */ +# ifndef EXIT_SUCCESS +# define EXIT_SUCCESS 0 +# endif +# endif +# endif +# endif +# endif + +# ifdef YYSTACK_ALLOC + /* Pacify GCC's `empty if-body' warning. */ +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (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 + invoke alloca (N) if N exceeds 4096. Use a slightly smaller number + to allow for a few compiler-allocated temporary stack slots. */ +# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ +# endif +# else +# define YYSTACK_ALLOC YYMALLOC +# define YYSTACK_FREE YYFREE +# ifndef YYSTACK_ALLOC_MAXIMUM +# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM +# endif +# if (defined __cplusplus && ! defined EXIT_SUCCESS \ + && ! ((defined YYMALLOC || defined malloc) \ + && (defined YYFREE || defined free))) +# include /* INFRINGES ON USER NAME SPACE */ +# ifndef EXIT_SUCCESS +# define EXIT_SUCCESS 0 +# endif +# endif +# ifndef YYMALLOC +# define YYMALLOC malloc +# if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +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) +void free (void *); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# endif +#endif /* ! defined yyoverflow || YYERROR_VERBOSE */ + + +#if (! defined yyoverflow \ + && (! defined __cplusplus \ + || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) + +/* A type that is properly aligned for any stack member. */ +union yyalloc +{ + yytype_int16 yyss_alloc; + YYSTYPE yyvs_alloc; +}; + +/* The size of the maximum gap between one aligned stack and the next. */ +# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) + +/* The size of an array large to enough to hold all stacks, each with + N elements. */ +# define YYSTACK_BYTES(N) \ + ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + + YYSTACK_GAP_MAXIMUM) + +# define YYCOPY_NEEDED 1 + +/* Relocate STACK from its old location to the new one. The + local variables YYSIZE and YYSTACKSIZE give the old and new number of + 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)) + +#endif + +#if defined YYCOPY_NEEDED && YYCOPY_NEEDED +/* Copy COUNT objects from SRC to DST. The source and destination do + not overlap. */ +# ifndef YYCOPY +# if defined __GNUC__ && 1 < __GNUC__ +# define YYCOPY(Dst, Src, Count) \ + __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) +# else +# define YYCOPY(Dst, Src, Count) \ + do \ + { \ + YYSIZE_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (Dst)[yyi] = (Src)[yyi]; \ + } \ + while (YYID (0)) +# endif +# endif +#endif /* !YYCOPY_NEEDED */ + +/* YYFINAL -- State number of the termination state. */ +#define YYFINAL 265 +/* YYLAST -- Last index in YYTABLE. */ +#define YYLAST 6373 + +/* YYNTOKENS -- Number of terminals. */ +#define YYNTOKENS 288 +/* YYNNTS -- Number of nonterminals. */ +#define YYNNTS 100 +/* YYNRULES -- Number of rules. */ +#define YYNRULES 439 +/* YYNRULES -- Number of states. */ +#define YYNSTATES 571 + +/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ +#define YYUNDEFTOK 2 +#define YYMAXUTOK 542 + +#define YYTRANSLATE(YYX) \ + ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + +/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ +static const yytype_uint16 yytranslate[] = +{ + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 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, 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, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 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 +}; + +#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. */ +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 +}; +#endif + +#if YYDEBUG || YYERROR_VERBOSE || 0 +/* 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", + "TEXTURE2DARRAY", "ITEXTURE1D", "ITEXTURE2D", "ITEXTURE3D", + "ITEXTURECUBE", "ITEXTURE1DARRAY", "ITEXTURE2DARRAY", "UTEXTURE1D", + "UTEXTURE2D", "UTEXTURE3D", "UTEXTURECUBE", "UTEXTURE1DARRAY", + "UTEXTURE2DARRAY", "TEXTURE2DRECT", "ITEXTURE2DRECT", "UTEXTURE2DRECT", + "TEXTUREBUFFER", "ITEXTUREBUFFER", "UTEXTUREBUFFER", "TEXTURECUBEARRAY", + "ITEXTURECUBEARRAY", "UTEXTURECUBEARRAY", "TEXTURE2DMS", "ITEXTURE2DMS", + "UTEXTURE2DMS", "TEXTURE2DMSARRAY", "ITEXTURE2DMSARRAY", + "UTEXTURE2DMSARRAY", "SUBPASSINPUT", "SUBPASSINPUTMS", "ISUBPASSINPUT", + "ISUBPASSINPUTMS", "USUBPASSINPUT", "USUBPASSINPUTMS", "IMAGE1D", + "IIMAGE1D", "UIMAGE1D", "IMAGE2D", "IIMAGE2D", "UIMAGE2D", "IMAGE3D", + "IIMAGE3D", "UIMAGE3D", "IMAGE2DRECT", "IIMAGE2DRECT", "UIMAGE2DRECT", + "IMAGECUBE", "IIMAGECUBE", "UIMAGECUBE", "IMAGEBUFFER", "IIMAGEBUFFER", + "UIMAGEBUFFER", "IMAGE1DARRAY", "IIMAGE1DARRAY", "UIMAGE1DARRAY", + "IMAGE2DARRAY", "IIMAGE2DARRAY", "UIMAGE2DARRAY", "IMAGECUBEARRAY", + "IIMAGECUBEARRAY", "UIMAGECUBEARRAY", "IMAGE2DMS", "IIMAGE2DMS", + "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", + "function_call_header_with_parameters", "function_call_header", + "function_identifier", "unary_expression", "unary_operator", + "multiplicative_expression", "additive_expression", "shift_expression", + "relational_expression", "equality_expression", "and_expression", + "exclusive_or_expression", "inclusive_or_expression", + "logical_and_expression", "logical_xor_expression", + "logical_or_expression", "conditional_expression", "$@1", + "assignment_expression", "assignment_operator", "expression", + "constant_expression", "declaration", "block_structure", "$@2", + "identifier_list", "function_prototype", "function_declarator", + "function_header_with_parameters", "function_header", + "parameter_declarator", "parameter_declaration", + "parameter_type_specifier", "init_declarator_list", "single_declaration", + "fully_specified_type", "invariant_qualifier", "interpolation_qualifier", + "layout_qualifier", "layout_qualifier_id_list", "layout_qualifier_id", + "precise_qualifier", "type_qualifier", "single_type_qualifier", + "storage_qualifier", "type_name_list", "type_specifier", + "array_specifier", "type_specifier_nonarray", "precision_qualifier", + "struct_specifier", "$@3", "$@4", "struct_declaration_list", + "struct_declaration", "struct_declarator_list", "struct_declarator", + "initializer", "initializer_list", "declaration_statement", "statement", + "simple_statement", "compound_statement", "$@5", "$@6", + "statement_no_new_scope", "statement_scoped", "$@7", "$@8", + "compound_statement_no_new_scope", "statement_list", + "expression_statement", "selection_statement", + "selection_rest_statement", "condition", "switch_statement", "$@9", + "switch_statement_list", "case_label", "iteration_statement", "$@10", + "$@11", "$@12", "for_init_statement", "conditionopt", + "for_rest_statement", "jump_statement", "translation_unit", + "external_declaration", "function_definition", "$@13", YY_NULL +}; +#endif + +# ifdef YYPRINT +/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to + token YYLEX-NUM. */ +static const yytype_uint16 yytoknum[] = +{ + 0, 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, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 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, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, + 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 +}; +# 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 +}; + +/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ +static const yytype_uint8 yyr2[] = +{ + 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 +}; + +/* 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. */ +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, 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 +}; + +/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ +#define YYPACT_NINF -512 +static const yytype_int16 yypact[] = +{ + 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 +}; + +/* YYPGOTO[NTERM-NUM]. */ +static const yytype_int16 yypgoto[] = +{ + -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 +}; + +/* 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 +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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 342, 432, 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, 367, 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, + 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, 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, 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, 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, + 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, + 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, 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, + 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, + 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, 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, + 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, + 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, + 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, 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, 211, 212, + 213, 214, 215, 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, 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, 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, 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, + 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, 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, + 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, + 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, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, + 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, 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, + 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, 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, -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, + 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, -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, -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, + 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, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -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, + -1, -1, -1, -1, -1, -1, -1, -1, -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, -1, -1, -1, -1, -1, -1, -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, + -1, -1, -1, -1, -1, -1, -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, 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, 279, 280, + 281, 282, 283, 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, + -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, -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, -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, -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, + -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, -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, -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 +}; + +/* 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, + 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, + 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 +}; + +#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 + +#define YYRECOVERING() (!!yyerrstatus) + +#define YYBACKUP(Token, Value) \ +do \ + if (yychar == YYEMPTY) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + YYPOPSTACK (yylen); \ + yystate = *yyssp; \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (pParseContext, YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ +while (YYID (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 + + +/* 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 + +# ifndef YYFPRINTF +# include /* INFRINGES ON USER NAME SPACE */ +# define YYFPRINTF fprintf +# endif + +# define YYDPRINTF(Args) \ +do { \ + if (yydebug) \ + YYFPRINTF Args; \ +} while (YYID (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)) + + +/*--------------------------------. +| Print this symbol 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); + if (!yyvaluep) + return; + YYUSE (pParseContext); +# ifdef YYPRINT + if (yytype < YYNTOKENS) + YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); +# else + YYUSE (yyoutput); +# endif + switch (yytype) + { + default: + break; + } +} + + +/*--------------------------------. +| 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]); + + yy_symbol_value_print (yyoutput, yytype, yyvaluep, pParseContext); + YYFPRINTF (yyoutput, ")"); +} + +/*------------------------------------------------------------------. +| yy_stack_print -- Print the state stack from its BOTTOM up to its | +| 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++) + { + int yybot = *yybottom; + YYFPRINTF (stderr, " %d", yybot); + } + YYFPRINTF (stderr, "\n"); +} + +# define YY_STACK_PRINT(Bottom, Top) \ +do { \ + if (yydebug) \ + yy_stack_print ((Bottom), (Top)); \ +} while (YYID (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 +{ + 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); + /* 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); + YYFPRINTF (stderr, "\n"); + } +} + +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug) \ + yy_reduce_print (yyvsp, Rule, pParseContext); \ +} while (YYID (0)) + +/* Nonzero means print parse trace. It is left uninitialized so that + multiple parsers can coexist. */ +int yydebug; +#else /* !YYDEBUG */ +# define YYDPRINTF(Args) +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) +# define YY_STACK_PRINT(Bottom, Top) +# define YY_REDUCE_PRINT(Rule) +#endif /* !YYDEBUG */ + + +/* YYINITDEPTH -- initial size of the parser's stacks. */ +#ifndef YYINITDEPTH +# define YYINITDEPTH 200 +#endif + +/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only + if the built-in stack extension method is used). + + Do not make this value too large; the results are undefined if + YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) + evaluated with infinite-precision integer arithmetic. */ + +#ifndef YYMAXDEPTH +# define YYMAXDEPTH 10000 +#endif + + +#if YYERROR_VERBOSE + +# ifndef yystrlen +# if defined __GLIBC__ && defined _STRING_H +# 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++) + continue; + return yylen; +} +# endif +# endif + +# ifndef yystpcpy +# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE +# define yystpcpy stpcpy +# 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; + + while ((*yyd++ = *yys++) != '\0') + continue; + + return yyd - 1; +} +# endif +# endif + +# ifndef yytnamerr +/* Copy to YYRES the contents of YYSTR after stripping away unnecessary + quotes and backslashes, so that it's suitable for yyerror. The + heuristic is that double-quoting is unnecessary unless the string + contains an apostrophe, a comma, or backslash (other than + backslash-backslash). YYSTR is taken from yytname. If YYRES is + null, do not copy; instead, return the length of what the result + would have been. */ +static YYSIZE_T +yytnamerr (char *yyres, const char *yystr) +{ + if (*yystr == '"') + { + YYSIZE_T yyn = 0; + 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; + } + do_not_strip_quotes: ; + } + + if (! yyres) + return yystrlen (yystr); + + return yystpcpy (yyres, yystr) - yyres; +} +# endif + +/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message + about the unexpected token YYTOKEN for the state stack whose top is + YYSSP. + + Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is + not large enough to hold the message. In that case, also set + *YYMSG_ALLOC to the required number of bytes. Return 2 if the + required number of bytes is too large to store. */ +static int +yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, + yytype_int16 *yyssp, int yytoken) +{ + YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]); + YYSIZE_T yysize = yysize0; + enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; + /* Internationalized format string. */ + const char *yyformat = YY_NULL; + /* Arguments of yyformat. */ + char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; + /* Number of reported tokens (one for the "unexpected", one per + "expected"). */ + int yycount = 0; + + /* There are many possibilities here to consider: + - Assume YYFAIL is not used. It's too flawed to consider. See + + 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 + tokens because there are none. + - The only way there can be no lookahead present (in yychar) is if + this state is a consistent state with a default action. Thus, + detecting the absence of a lookahead is sufficient to determine + that there is no unexpected or expected token to report. In that + case, just report a simple "syntax error". + - Don't assume there isn't a lookahead just because this state is a + consistent state with a default action. There might have been a + previous inconsistent state, consistent state with a non-default + action, or user semantic action that manipulated yychar. + - Of course, the expected token list depends on states to have + correct lookahead information, and it depends on the parser not + to perform extra reductions after fetching a lookahead from the + scanner and before detecting a syntax error. Thus, state merging + (from LALR or IELR) and default reductions corrupt the expected + token list. However, the list is correct for canonical LR with + one exception: it will still contain any token that will not be + accepted due to an error action in a later state. + */ + if (yytoken != YYEMPTY) + { + int yyn = yypact[*yyssp]; + yyarg[yycount++] = yytname[yytoken]; + if (!yypact_value_is_default (yyn)) + { + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. In other words, skip the first -YYN actions for + this state because they are default actions. */ + int yyxbegin = yyn < 0 ? -yyn : 0; + /* Stay within bounds of both yycheck and yytname. */ + int yychecklim = YYLAST - yyn + 1; + int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; + int yyx; + + for (yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR + && !yytable_value_is_error (yytable[yyx + yyn])) + { + if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) + { + yycount = 1; + yysize = yysize0; + break; + } + yyarg[yycount++] = yytname[yyx]; + { + YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]); + if (! (yysize <= yysize1 + && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + return 2; + yysize = yysize1; + } + } + } + } + + switch (yycount) + { +# define YYCASE_(N, S) \ + case N: \ + yyformat = S; \ + break + YYCASE_(0, YY_("syntax error")); + YYCASE_(1, YY_("syntax error, unexpected %s")); + YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); + YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); + YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); + YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); +# undef YYCASE_ + } + + { + YYSIZE_T yysize1 = yysize + yystrlen (yyformat); + if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + return 2; + yysize = yysize1; + } + + if (*yymsg_alloc < yysize) + { + *yymsg_alloc = 2 * yysize; + if (! (yysize <= *yymsg_alloc + && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) + *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; + return 1; + } + + /* Avoid sprintf, as that infringes on the user's name space. + Don't have undefined behavior even if the translation + produced a string with the wrong number of "%s"s. */ + { + char *yyp = *yymsg; + int yyi = 0; + while ((*yyp = *yyformat) != '\0') + if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) + { + yyp += yytnamerr (yyp, yyarg[yyi++]); + yyformat += 2; + } + else + { + yyp++; + yyformat++; + } + } + return 0; +} +#endif /* YYERROR_VERBOSE */ + +/*-----------------------------------------------. +| 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; + } +} + + + + +/*----------. +| 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 +/* 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); + + /* Number of syntax errors so far. */ + int yynerrs; + + int yystate; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus; + + /* The stacks and their tools: + `yyss': related to states. + `yyvs': related to semantic values. + + Refer to the stacks through separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ + + /* The state stack. */ + yytype_int16 yyssa[YYINITDEPTH]; + yytype_int16 *yyss; + yytype_int16 *yyssp; + + /* The semantic value stack. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs; + YYSTYPE *yyvsp; + + YYSIZE_T yystacksize; + + int yyn; + int yyresult; + /* Lookahead token as an internal (translated) token number. */ + int yytoken = 0; + /* The variables used to return semantic value and location from the + action routines. */ + YYSTYPE yyval; + +#if YYERROR_VERBOSE + /* Buffer for error messages, and its allocated size. */ + char yymsgbuf[128]; + char *yymsg = yymsgbuf; + YYSIZE_T yymsg_alloc = sizeof yymsgbuf; +#endif + +#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) + + /* The number of symbols on the RHS of the reduced rule. + Keep to zero when no symbol should be popped. */ + int yylen = 0; + + yyssp = yyss = yyssa; + yyvsp = yyvs = yyvsa; + yystacksize = YYINITDEPTH; + + YYDPRINTF ((stderr, "Starting parse\n")); + + yystate = 0; + yyerrstatus = 0; + yynerrs = 0; + yychar = YYEMPTY; /* Cause a token to be read. */ + goto yysetstate; + +/*------------------------------------------------------------. +| yynewstate -- Push a new state, which is found in yystate. | +`------------------------------------------------------------*/ + yynewstate: + /* In all cases, when you get here, the value and location stacks + have just been pushed. So pushing a state here evens the stacks. */ + yyssp++; + + yysetstate: + *yyssp = yystate; + + if (yyss + yystacksize - 1 <= yyssp) + { + /* Get the current used size of the three stacks, in elements. */ + YYSIZE_T yysize = yyssp - yyss + 1; + +#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; + } +#else /* no yyoverflow */ +# ifndef YYSTACK_RELOCATE + goto yyexhaustedlab; +# else + /* Extend the stack our own way. */ + if (YYMAXDEPTH <= yystacksize) + goto yyexhaustedlab; + yystacksize *= 2; + if (YYMAXDEPTH < yystacksize) + 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); +# undef YYSTACK_RELOCATE + if (yyss1 != yyssa) + YYSTACK_FREE (yyss1); + } +# endif +#endif /* no yyoverflow */ + + yyssp = yyss + yysize - 1; + yyvsp = yyvs + yysize - 1; + + YYDPRINTF ((stderr, "Stack size increased to %lu\n", + (unsigned long int) yystacksize)); + + if (yyss + yystacksize - 1 <= yyssp) + YYABORT; + } + + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + + if (yystate == YYFINAL) + YYACCEPT; + + goto yybackup; + +/*-----------. +| yybackup. | +`-----------*/ +yybackup: + + /* Do appropriate processing given the current state. Read a + lookahead token if we need one and don't already have one. */ + + /* First try to decide what to do without reference to lookahead token. */ + yyn = yypact[yystate]; + if (yypact_value_is_default (yyn)) + goto yydefault; + + /* Not known => get a lookahead token if don't already have one. */ + + /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ + if (yychar == YYEMPTY) + { + YYDPRINTF ((stderr, "Reading a token: ")); + yychar = YYLEX; + } + + if (yychar <= YYEOF) + { + yychar = yytoken = YYEOF; + YYDPRINTF ((stderr, "Now at end of input.\n")); + } + else + { + yytoken = YYTRANSLATE (yychar); + YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); + } + + /* If the proper action on seeing token YYTOKEN is to reduce or to + detect an error, take that action. */ + yyn += yytoken; + if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) + goto yydefault; + yyn = yytable[yyn]; + if (yyn <= 0) + { + if (yytable_value_is_error (yyn)) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + + /* Count tokens shifted since error; after three, turn off error + status. */ + if (yyerrstatus) + yyerrstatus--; + + /* Shift the lookahead token. */ + YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); + + /* Discard the shifted token. */ + yychar = YYEMPTY; + + yystate = yyn; + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + *++yyvsp = yylval; + YY_IGNORE_MAYBE_UNINITIALIZED_END + + goto yynewstate; + + +/*-----------------------------------------------------------. +| yydefault -- do the default action for the current state. | +`-----------------------------------------------------------*/ +yydefault: + yyn = yydefact[yystate]; + if (yyn == 0) + goto yyerrlab; + goto yyreduce; + + +/*-----------------------------. +| yyreduce -- Do a reduction. | +`-----------------------------*/ +yyreduce: + /* yyn is the number of a rule to reduce with. */ + yylen = yyr2[yyn]; + + /* If YYLEN is nonzero, implement the default value of the action: + `$$ = $1'. + + Otherwise, the following line sets YYVAL to garbage. + This behavior is undocumented and Bison + users should not rely upon it. Assigning to YYVAL + unconditionally makes the parser a bit smaller, and it avoids a + GCC warning that YYVAL may be used uninitialized. */ + yyval = yyvsp[1-yylen]; + + + YY_REDUCE_PRINT (yyn); + switch (yyn) + { + case 2: +/* Line 1792 of yacc.c */ +#line 250 "glslang.y" + { + (yyval.interm.intermTypedNode) = parseContext.handleVariable((yyvsp[(1) - (1)].lex).loc, (yyvsp[(1) - (1)].lex).symbol, (yyvsp[(1) - (1)].lex).string); + } + break; + + case 3: +/* Line 1792 of yacc.c */ +#line 256 "glslang.y" + { + (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); + } + break; + + case 4: +/* Line 1792 of yacc.c */ +#line 259 "glslang.y" + { + (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[(1) - (1)].lex).i, (yyvsp[(1) - (1)].lex).loc, true); + } + break; + + case 5: +/* Line 1792 of yacc.c */ +#line 262 "glslang.y" + { + 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); + } + break; + + case 6: +/* Line 1792 of yacc.c */ +#line 266 "glslang.y" + { + 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); + } + break; + + case 7: +/* Line 1792 of yacc.c */ +#line 270 "glslang.y" + { + 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); + } + break; + + case 8: +/* Line 1792 of yacc.c */ +#line 274 "glslang.y" + { + (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[(1) - (1)].lex).d, EbtFloat, (yyvsp[(1) - (1)].lex).loc, true); + } + break; + + case 9: +/* Line 1792 of yacc.c */ +#line 277 "glslang.y" + { + 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); + } + break; + + case 10: +/* Line 1792 of yacc.c */ +#line 281 "glslang.y" + { +#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 + } + break; + + case 11: +/* Line 1792 of yacc.c */ +#line 287 "glslang.y" + { + (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[(1) - (1)].lex).b, (yyvsp[(1) - (1)].lex).loc, true); + } + break; + + case 12: +/* Line 1792 of yacc.c */ +#line 290 "glslang.y" + { + (yyval.interm.intermTypedNode) = (yyvsp[(2) - (3)].interm.intermTypedNode); + if ((yyval.interm.intermTypedNode)->getAsConstantUnion()) + (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression(); + } + break; + + case 13: +/* Line 1792 of yacc.c */ +#line 298 "glslang.y" + { + (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); + } + break; + + case 14: +/* Line 1792 of yacc.c */ +#line 301 "glslang.y" + { + (yyval.interm.intermTypedNode) = parseContext.handleBracketDereference((yyvsp[(2) - (4)].lex).loc, (yyvsp[(1) - (4)].interm.intermTypedNode), (yyvsp[(3) - (4)].interm.intermTypedNode)); + } + break; + + case 15: +/* Line 1792 of yacc.c */ +#line 304 "glslang.y" + { + (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); + } + break; + + case 16: +/* Line 1792 of yacc.c */ +#line 307 "glslang.y" + { + (yyval.interm.intermTypedNode) = parseContext.handleDotDereference((yyvsp[(3) - (3)].lex).loc, (yyvsp[(1) - (3)].interm.intermTypedNode), *(yyvsp[(3) - (3)].lex).string); + } + break; + + case 17: +/* Line 1792 of yacc.c */ +#line 310 "glslang.y" + { + 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)); + } + break; + + case 18: +/* Line 1792 of yacc.c */ +#line 315 "glslang.y" + { + 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)); + } + break; + + case 19: +/* Line 1792 of yacc.c */ +#line 323 "glslang.y" + { + parseContext.integerCheck((yyvsp[(1) - (1)].interm.intermTypedNode), "[]"); + (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); + } + break; + + case 20: +/* Line 1792 of yacc.c */ +#line 330 "glslang.y" + { + (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; + } + break; + + case 21: +/* Line 1792 of yacc.c */ +#line 337 "glslang.y" + { + (yyval.interm) = (yyvsp[(1) - (1)].interm); + } + break; + + case 22: +/* Line 1792 of yacc.c */ +#line 343 "glslang.y" + { + (yyval.interm) = (yyvsp[(1) - (2)].interm); + (yyval.interm).loc = (yyvsp[(2) - (2)].lex).loc; + } + break; + + case 23: +/* Line 1792 of yacc.c */ +#line 347 "glslang.y" + { + (yyval.interm) = (yyvsp[(1) - (2)].interm); + (yyval.interm).loc = (yyvsp[(2) - (2)].lex).loc; + } + break; + + case 24: +/* Line 1792 of yacc.c */ +#line 354 "glslang.y" + { + (yyval.interm) = (yyvsp[(1) - (2)].interm); + } + break; + + case 25: +/* Line 1792 of yacc.c */ +#line 357 "glslang.y" + { + (yyval.interm) = (yyvsp[(1) - (1)].interm); + } + break; + + case 26: +/* Line 1792 of yacc.c */ +#line 363 "glslang.y" + { + 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); + } + break; + + case 27: +/* Line 1792 of yacc.c */ +#line 370 "glslang.y" + { + 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); + } + break; + + case 28: +/* Line 1792 of yacc.c */ +#line 380 "glslang.y" + { + (yyval.interm) = (yyvsp[(1) - (2)].interm); + } + break; + + case 29: +/* Line 1792 of yacc.c */ +#line 388 "glslang.y" + { + // Constructor + (yyval.interm).intermNode = 0; + (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[(1) - (1)].interm.type).loc, (yyvsp[(1) - (1)].interm.type)); + } + break; + + case 30: +/* Line 1792 of yacc.c */ +#line 393 "glslang.y" + { + // + // Should be a method or subroutine call, but we haven't recognized the arguments yet. + // + (yyval.interm).function = 0; + (yyval.interm).intermNode = 0; + + TIntermMethod* method = (yyvsp[(1) - (1)].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(); + 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", "", ""); + } + + if ((yyval.interm).function == 0) { + // error recover + TString empty(""); + (yyval.interm).function = new TFunction(&empty, TType(EbtVoid), EOpNull); + } + } + break; + + case 31: +/* Line 1792 of yacc.c */ +#line 423 "glslang.y" + { + 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(), ""); + } + break; + + case 32: +/* Line 1792 of yacc.c */ +#line 429 "glslang.y" + { + 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)); + } + break; + + case 33: +/* Line 1792 of yacc.c */ +#line 433 "glslang.y" + { + 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)); + } + break; + + case 34: +/* Line 1792 of yacc.c */ +#line 437 "glslang.y" + { + if ((yyvsp[(1) - (2)].interm).op != EOpNull) { + char errorOp[2] = {0, 0}; + switch((yyvsp[(1) - (2)].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)); + } else { + (yyval.interm.intermTypedNode) = (yyvsp[(2) - (2)].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; } + break; + + case 37: +/* Line 1792 of yacc.c */ +#line 459 "glslang.y" + { (yyval.interm).loc = (yyvsp[(1) - (1)].lex).loc; (yyval.interm).op = EOpLogicalNot; } + 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"); } + break; + + case 39: +/* Line 1792 of yacc.c */ +#line 466 "glslang.y" + { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); } + 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); + } + 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); + } + break; + + case 42: +/* Line 1792 of yacc.c */ +#line 477 "glslang.y" + { + 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)); + if ((yyval.interm.intermTypedNode) == 0) + (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode); + } + break; + + case 43: +/* Line 1792 of yacc.c */ +#line 486 "glslang.y" + { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); } + break; + + case 44: +/* Line 1792 of yacc.c */ +#line 487 "glslang.y" + { + (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[(2) - (3)].lex).loc, "+", EOpAdd, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode)); + if ((yyval.interm.intermTypedNode) == 0) + (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode); + } + 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); + } + break; + + case 46: +/* Line 1792 of yacc.c */ +#line 500 "glslang.y" + { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); } + break; + + case 47: +/* Line 1792 of yacc.c */ +#line 501 "glslang.y" + { + 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)); + if ((yyval.interm.intermTypedNode) == 0) + (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode); + } + 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); + } + break; + + case 49: +/* Line 1792 of yacc.c */ +#line 516 "glslang.y" + { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); } + break; + + case 50: +/* Line 1792 of yacc.c */ +#line 517 "glslang.y" + { + (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[(2) - (3)].lex).loc, "<", EOpLessThan, (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); + } + 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); + } + break; + + case 52: +/* Line 1792 of yacc.c */ +#line 527 "glslang.y" + { + (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[(2) - (3)].lex).loc, "<=", EOpLessThanEqual, (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); + } + break; + + case 53: +/* Line 1792 of yacc.c */ +#line 532 "glslang.y" + { + (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[(2) - (3)].lex).loc, ">=", EOpGreaterThanEqual, (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); + } + break; + + case 54: +/* Line 1792 of yacc.c */ +#line 540 "glslang.y" + { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); } + break; + + case 55: +/* Line 1792 of yacc.c */ +#line 541 "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, "==", EOpEqual, (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); + } + 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); + } + break; + + case 57: +/* Line 1792 of yacc.c */ +#line 560 "glslang.y" + { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); } + break; + + case 58: +/* Line 1792 of yacc.c */ +#line 561 "glslang.y" + { + 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)); + if ((yyval.interm.intermTypedNode) == 0) + (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode); + } + break; + + case 59: +/* Line 1792 of yacc.c */ +#line 570 "glslang.y" + { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); } + break; + + case 60: +/* Line 1792 of yacc.c */ +#line 571 "glslang.y" + { + 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)); + if ((yyval.interm.intermTypedNode) == 0) + (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode); + } + break; + + case 61: +/* Line 1792 of yacc.c */ +#line 580 "glslang.y" + { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); } + break; + + case 62: +/* Line 1792 of yacc.c */ +#line 581 "glslang.y" + { + 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)); + if ((yyval.interm.intermTypedNode) == 0) + (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode); + } + break; + + case 63: +/* Line 1792 of yacc.c */ +#line 590 "glslang.y" + { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); } + break; + + case 64: +/* Line 1792 of yacc.c */ +#line 591 "glslang.y" + { + (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[(2) - (3)].lex).loc, "&&", EOpLogicalAnd, (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); + } + break; + + case 65: +/* Line 1792 of yacc.c */ +#line 599 "glslang.y" + { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); } + break; + + case 66: +/* Line 1792 of yacc.c */ +#line 600 "glslang.y" + { + (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[(2) - (3)].lex).loc, "^^", EOpLogicalXor, (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); + } + break; + + case 67: +/* Line 1792 of yacc.c */ +#line 608 "glslang.y" + { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); } + break; + + case 68: +/* Line 1792 of yacc.c */ +#line 609 "glslang.y" + { + (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[(2) - (3)].lex).loc, "||", EOpLogicalOr, (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); + } + break; + + case 69: +/* Line 1792 of yacc.c */ +#line 617 "glslang.y" + { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); } + break; + + case 70: +/* Line 1792 of yacc.c */ +#line 618 "glslang.y" + { + ++parseContext.controlFlowNestingLevel; + } + 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); + } + } + break; + + case 72: +/* Line 1792 of yacc.c */ +#line 636 "glslang.y" + { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); } + 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); + 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); + } + } + break; + + case 74: +/* Line 1792 of yacc.c */ +#line 652 "glslang.y" + { + (yyval.interm).loc = (yyvsp[(1) - (1)].lex).loc; + (yyval.interm).op = EOpAssign; + } + break; + + case 75: +/* Line 1792 of yacc.c */ +#line 656 "glslang.y" + { + (yyval.interm).loc = (yyvsp[(1) - (1)].lex).loc; + (yyval.interm).op = EOpMulAssign; + } + break; + + case 76: +/* Line 1792 of yacc.c */ +#line 660 "glslang.y" + { + (yyval.interm).loc = (yyvsp[(1) - (1)].lex).loc; + (yyval.interm).op = EOpDivAssign; + } + break; + + case 77: +/* Line 1792 of yacc.c */ +#line 664 "glslang.y" + { + parseContext.fullIntegerCheck((yyvsp[(1) - (1)].lex).loc, "%="); + (yyval.interm).loc = (yyvsp[(1) - (1)].lex).loc; + (yyval.interm).op = EOpModAssign; + } + break; + + case 78: +/* Line 1792 of yacc.c */ +#line 669 "glslang.y" + { + (yyval.interm).loc = (yyvsp[(1) - (1)].lex).loc; + (yyval.interm).op = EOpAddAssign; + } + break; + + case 79: +/* Line 1792 of yacc.c */ +#line 673 "glslang.y" + { + (yyval.interm).loc = (yyvsp[(1) - (1)].lex).loc; + (yyval.interm).op = EOpSubAssign; + } + break; + + case 80: +/* Line 1792 of yacc.c */ +#line 677 "glslang.y" + { + parseContext.fullIntegerCheck((yyvsp[(1) - (1)].lex).loc, "bit-shift left assign"); + (yyval.interm).loc = (yyvsp[(1) - (1)].lex).loc; (yyval.interm).op = EOpLeftShiftAssign; + } + break; + + case 81: +/* Line 1792 of yacc.c */ +#line 681 "glslang.y" + { + parseContext.fullIntegerCheck((yyvsp[(1) - (1)].lex).loc, "bit-shift right assign"); + (yyval.interm).loc = (yyvsp[(1) - (1)].lex).loc; (yyval.interm).op = EOpRightShiftAssign; + } + break; + + case 82: +/* Line 1792 of yacc.c */ +#line 685 "glslang.y" + { + parseContext.fullIntegerCheck((yyvsp[(1) - (1)].lex).loc, "bitwise-and assign"); + (yyval.interm).loc = (yyvsp[(1) - (1)].lex).loc; (yyval.interm).op = EOpAndAssign; + } + break; + + case 83: +/* Line 1792 of yacc.c */ +#line 689 "glslang.y" + { + parseContext.fullIntegerCheck((yyvsp[(1) - (1)].lex).loc, "bitwise-xor assign"); + (yyval.interm).loc = (yyvsp[(1) - (1)].lex).loc; (yyval.interm).op = EOpExclusiveOrAssign; + } + break; + + case 84: +/* Line 1792 of yacc.c */ +#line 693 "glslang.y" + { + parseContext.fullIntegerCheck((yyvsp[(1) - (1)].lex).loc, "bitwise-or assign"); + (yyval.interm).loc = (yyvsp[(1) - (1)].lex).loc; (yyval.interm).op = EOpInclusiveOrAssign; + } + break; + + case 85: +/* Line 1792 of yacc.c */ +#line 700 "glslang.y" + { + (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); + } + break; + + case 86: +/* Line 1792 of yacc.c */ +#line 703 "glslang.y" + { + 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); + } + } + break; + + case 87: +/* Line 1792 of yacc.c */ +#line 714 "glslang.y" + { + parseContext.constantValueCheck((yyvsp[(1) - (1)].interm.intermTypedNode), ""); + (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); + } + break; + + case 88: +/* Line 1792 of yacc.c */ +#line 721 "glslang.y" + { + 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 + } + break; + + case 89: +/* Line 1792 of yacc.c */ +#line 726 "glslang.y" + { + 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; + } + break; + + case 90: +/* Line 1792 of yacc.c */ +#line 731 "glslang.y" + { + 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); + (yyval.interm.intermNode) = 0; + } + break; + + case 91: +/* Line 1792 of yacc.c */ +#line 739 "glslang.y" + { + parseContext.declareBlock((yyvsp[(1) - (2)].interm).loc, *(yyvsp[(1) - (2)].interm).typeList); + (yyval.interm.intermNode) = 0; + } + break; + + case 92: +/* Line 1792 of yacc.c */ +#line 743 "glslang.y" + { + parseContext.declareBlock((yyvsp[(1) - (3)].interm).loc, *(yyvsp[(1) - (3)].interm).typeList, (yyvsp[(2) - (3)].lex).string); + (yyval.interm.intermNode) = 0; + } + break; + + case 93: +/* Line 1792 of yacc.c */ +#line 747 "glslang.y" + { + parseContext.declareBlock((yyvsp[(1) - (4)].interm).loc, *(yyvsp[(1) - (4)].interm).typeList, (yyvsp[(2) - (4)].lex).string, (yyvsp[(3) - (4)].interm).arraySizes); + (yyval.interm.intermNode) = 0; + } + break; + + case 94: +/* Line 1792 of yacc.c */ +#line 751 "glslang.y" + { + 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)); + (yyval.interm.intermNode) = 0; + } + break; + + case 95: +/* Line 1792 of yacc.c */ +#line 756 "glslang.y" + { + 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); + (yyval.interm.intermNode) = 0; + } + break; + + case 96: +/* Line 1792 of yacc.c */ +#line 761 "glslang.y" + { + 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)); + (yyval.interm.intermNode) = 0; + } + break; + + case 97: +/* Line 1792 of yacc.c */ +#line 770 "glslang.y" + { parseContext.nestedBlockCheck((yyvsp[(1) - (3)].interm.type).loc); } + break; + + case 98: +/* Line 1792 of yacc.c */ +#line 770 "glslang.y" + { + --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); + } + 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); + } + break; + + case 100: +/* Line 1792 of yacc.c */ +#line 785 "glslang.y" + { + (yyval.interm.identifierList) = (yyvsp[(1) - (3)].interm.identifierList); + (yyval.interm.identifierList)->push_back((yyvsp[(3) - (3)].lex).string); + } + break; + + case 101: +/* Line 1792 of yacc.c */ +#line 792 "glslang.y" + { + (yyval.interm).function = (yyvsp[(1) - (2)].interm.function); + (yyval.interm).loc = (yyvsp[(2) - (2)].lex).loc; + } + break; + + case 102: +/* Line 1792 of yacc.c */ +#line 799 "glslang.y" + { + (yyval.interm.function) = (yyvsp[(1) - (1)].interm.function); + } + break; + + case 103: +/* Line 1792 of yacc.c */ +#line 802 "glslang.y" + { + (yyval.interm.function) = (yyvsp[(1) - (1)].interm.function); + } + break; + + case 104: +/* Line 1792 of yacc.c */ +#line 809 "glslang.y" + { + // 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); + else + delete (yyvsp[(2) - (2)].interm).param.type; + } + break; + + case 105: +/* Line 1792 of yacc.c */ +#line 817 "glslang.y" + { + // + // 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) { + // + // 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; + } else { + // Add the parameter + (yyval.interm.function) = (yyvsp[(1) - (3)].interm.function); + (yyvsp[(1) - (3)].interm.function)->addParameter((yyvsp[(3) - (3)].interm).param); + } + } + break; + + case 106: +/* Line 1792 of yacc.c */ +#line 837 "glslang.y" + { + 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[(1) - (3)].interm.type).arraySizes) + parseContext.arraySizeRequiredCheck((yyvsp[(1) - (3)].interm.type).loc, *(yyvsp[(1) - (3)].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); + (yyval.interm.function) = function; + } + break; + + case 107: +/* Line 1792 of yacc.c */ +#line 855 "glslang.y" + { + 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) - (2)].interm.type).basicType == EbtVoid) { + parseContext.error((yyvsp[(2) - (2)].lex).loc, "illegal use of type 'void'", (yyvsp[(2) - (2)].lex).string->c_str(), ""); + } + parseContext.reservedErrorCheck((yyvsp[(2) - (2)].lex).loc, *(yyvsp[(2) - (2)].lex).string); + + TParameter param = {(yyvsp[(2) - (2)].lex).string, new TType((yyvsp[(1) - (2)].interm.type))}; + (yyval.interm).loc = (yyvsp[(2) - (2)].lex).loc; + (yyval.interm).param = param; + } + break; + + case 108: +/* Line 1792 of yacc.c */ +#line 870 "glslang.y" + { + 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); + } + parseContext.arrayDimCheck((yyvsp[(2) - (3)].lex).loc, (yyvsp[(1) - (3)].interm.type).arraySizes, (yyvsp[(3) - (3)].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); + + (yyvsp[(1) - (3)].interm.type).arraySizes = (yyvsp[(3) - (3)].interm).arraySizes; + + TParameter param = { (yyvsp[(2) - (3)].lex).string, new TType((yyvsp[(1) - (3)].interm.type))}; + (yyval.interm).loc = (yyvsp[(2) - (3)].lex).loc; + (yyval.interm).param = param; + } + break; + + case 109: +/* Line 1792 of yacc.c */ +#line 893 "glslang.y" + { + (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((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); + + } + break; + + case 110: +/* Line 1792 of yacc.c */ +#line 904 "glslang.y" + { + (yyval.interm) = (yyvsp[(1) - (1)].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.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier()); + } + break; + + case 111: +/* Line 1792 of yacc.c */ +#line 914 "glslang.y" + { + (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()); + + 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); + } + break; + + case 112: +/* Line 1792 of yacc.c */ +#line 924 "glslang.y" + { + (yyval.interm) = (yyvsp[(1) - (1)].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.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier()); + } + break; + + case 113: +/* Line 1792 of yacc.c */ +#line 934 "glslang.y" + { + TParameter param = { 0, new TType((yyvsp[(1) - (1)].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); + } + break; + + case 114: +/* Line 1792 of yacc.c */ +#line 943 "glslang.y" + { + (yyval.interm) = (yyvsp[(1) - (1)].interm); + } + break; + + case 115: +/* Line 1792 of yacc.c */ +#line 946 "glslang.y" + { + (yyval.interm) = (yyvsp[(1) - (3)].interm); + parseContext.declareVariable((yyvsp[(3) - (3)].lex).loc, *(yyvsp[(3) - (3)].lex).string, (yyvsp[(1) - (3)].interm).type); + } + break; + + case 116: +/* Line 1792 of yacc.c */ +#line 950 "glslang.y" + { + (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); + } + break; + + case 117: +/* Line 1792 of yacc.c */ +#line 954 "glslang.y" + { + (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); + } + break; + + case 118: +/* Line 1792 of yacc.c */ +#line 959 "glslang.y" + { + (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); + } + break; + + case 119: +/* Line 1792 of yacc.c */ +#line 967 "glslang.y" + { + (yyval.interm).type = (yyvsp[(1) - (1)].interm.type); + (yyval.interm).intermNode = 0; + parseContext.declareTypeDefaults((yyval.interm).loc, (yyval.interm).type); + } + break; + + case 120: +/* Line 1792 of yacc.c */ +#line 972 "glslang.y" + { + (yyval.interm).type = (yyvsp[(1) - (2)].interm.type); + (yyval.interm).intermNode = 0; + parseContext.declareVariable((yyvsp[(2) - (2)].lex).loc, *(yyvsp[(2) - (2)].lex).string, (yyvsp[(1) - (2)].interm.type)); + } + break; + + case 121: +/* Line 1792 of yacc.c */ +#line 977 "glslang.y" + { + (yyval.interm).type = (yyvsp[(1) - (3)].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); + } + break; + + case 122: +/* Line 1792 of yacc.c */ +#line 982 "glslang.y" + { + (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); + } + break; + + case 123: +/* Line 1792 of yacc.c */ +#line 987 "glslang.y" + { + (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); + } + break; + + case 124: +/* Line 1792 of yacc.c */ +#line 996 "glslang.y" + { + (yyval.interm.type) = (yyvsp[(1) - (1)].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.precisionQualifierCheck((yyval.interm.type).loc, (yyval.interm.type).basicType, (yyval.interm.type).qualifier); + } + break; + + case 125: +/* Line 1792 of yacc.c */ +#line 1007 "glslang.y" + { + 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)); + + 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[(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; + + 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); + + (yyval.interm.type) = (yyvsp[(2) - (2)].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; + } + break; + + case 126: +/* Line 1792 of yacc.c */ +#line 1034 "glslang.y" + { + parseContext.globalCheck((yyvsp[(1) - (1)].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).qualifier.invariant = true; + } + break; + + case 127: +/* Line 1792 of yacc.c */ +#line 1043 "glslang.y" + { + 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); + (yyval.interm.type).qualifier.smooth = true; + } + break; + + case 128: +/* Line 1792 of yacc.c */ +#line 1050 "glslang.y" + { + 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); + (yyval.interm.type).qualifier.flat = true; + } + break; + + case 129: +/* Line 1792 of yacc.c */ +#line 1057 "glslang.y" + { + 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); + (yyval.interm.type).qualifier.nopersp = true; + } + break; + + case 130: +/* Line 1792 of yacc.c */ +#line 1064 "glslang.y" + { +#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); + (yyval.interm.type).qualifier.explicitInterp = true; +#endif + } + break; + + case 131: +/* Line 1792 of yacc.c */ +#line 1076 "glslang.y" + { + (yyval.interm.type) = (yyvsp[(3) - (4)].interm.type); + } + break; + + case 132: +/* Line 1792 of yacc.c */ +#line 1082 "glslang.y" + { + (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type); + } + break; + + case 133: +/* Line 1792 of yacc.c */ +#line 1085 "glslang.y" + { + (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); + } + break; + + case 134: +/* Line 1792 of yacc.c */ +#line 1092 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc); + parseContext.setLayoutQualifier((yyvsp[(1) - (1)].lex).loc, (yyval.interm.type), *(yyvsp[(1) - (1)].lex).string); + } + break; + + case 135: +/* Line 1792 of yacc.c */ +#line 1096 "glslang.y" + { + (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)); + } + break; + + case 136: +/* Line 1792 of yacc.c */ +#line 1100 "glslang.y" + { // because "shared" is both an identifier and a keyword + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc); + TString strShared("shared"); + parseContext.setLayoutQualifier((yyvsp[(1) - (1)].lex).loc, (yyval.interm.type), strShared); + } + break; + + case 137: +/* Line 1792 of yacc.c */ +#line 1108 "glslang.y" + { + 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); + (yyval.interm.type).qualifier.noContraction = true; + } + break; + + case 138: +/* Line 1792 of yacc.c */ +#line 1117 "glslang.y" + { + (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type); + } + break; + + case 139: +/* Line 1792 of yacc.c */ +#line 1120 "glslang.y" + { + (yyval.interm.type) = (yyvsp[(1) - (2)].interm.type); + if ((yyval.interm.type).basicType == EbtVoid) + (yyval.interm.type).basicType = (yyvsp[(2) - (2)].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); + } + break; + + case 140: +/* Line 1792 of yacc.c */ +#line 1131 "glslang.y" + { + (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type); + } + break; + + case 141: +/* Line 1792 of yacc.c */ +#line 1134 "glslang.y" + { + (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type); + } + break; + + case 142: +/* Line 1792 of yacc.c */ +#line 1137 "glslang.y" + { + parseContext.checkPrecisionQualifier((yyvsp[(1) - (1)].interm.type).loc, (yyvsp[(1) - (1)].interm.type).qualifier.precision); + (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type); + } + break; + + case 143: +/* Line 1792 of yacc.c */ +#line 1141 "glslang.y" + { + // allow inheritance of storage qualifier from block declaration + (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type); + } + break; + + case 144: +/* Line 1792 of yacc.c */ +#line 1145 "glslang.y" + { + // allow inheritance of storage qualifier from block declaration + (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type); + } + break; + + case 145: +/* Line 1792 of yacc.c */ +#line 1149 "glslang.y" + { + // allow inheritance of storage qualifier from block declaration + (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type); + } + break; + + case 146: +/* Line 1792 of yacc.c */ +#line 1156 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc); + (yyval.interm.type).qualifier.storage = EvqConst; // will later turn into EvqConstReadOnly, if the initializer is not constant + } + break; + + case 147: +/* Line 1792 of yacc.c */ +#line 1160 "glslang.y" + { + 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.globalCheck((yyvsp[(1) - (1)].lex).loc, "attribute"); + + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc); + (yyval.interm.type).qualifier.storage = EvqVaryingIn; + } + break; + + case 148: +/* Line 1792 of yacc.c */ +#line 1172 "glslang.y" + { + 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.globalCheck((yyvsp[(1) - (1)].lex).loc, "varying"); + + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc); + if (parseContext.language == EShLangVertex) + (yyval.interm.type).qualifier.storage = EvqVaryingOut; + else + (yyval.interm.type).qualifier.storage = EvqVaryingIn; + } + break; + + case 149: +/* Line 1792 of yacc.c */ +#line 1186 "glslang.y" + { + parseContext.globalCheck((yyvsp[(1) - (1)].lex).loc, "inout"); + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc); + (yyval.interm.type).qualifier.storage = EvqInOut; + } + break; + + case 150: +/* Line 1792 of yacc.c */ +#line 1191 "glslang.y" + { + parseContext.globalCheck((yyvsp[(1) - (1)].lex).loc, "in"); + (yyval.interm.type).init((yyvsp[(1) - (1)].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; + } + break; + + case 151: +/* Line 1792 of yacc.c */ +#line 1197 "glslang.y" + { + parseContext.globalCheck((yyvsp[(1) - (1)].lex).loc, "out"); + (yyval.interm.type).init((yyvsp[(1) - (1)].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; + } + break; + + case 152: +/* Line 1792 of yacc.c */ +#line 1203 "glslang.y" + { + 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); + (yyval.interm.type).qualifier.centroid = true; + } + break; + + case 153: +/* Line 1792 of yacc.c */ +#line 1210 "glslang.y" + { + 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); + (yyval.interm.type).qualifier.patch = true; + } + break; + + case 154: +/* Line 1792 of yacc.c */ +#line 1216 "glslang.y" + { + parseContext.globalCheck((yyvsp[(1) - (1)].lex).loc, "sample"); + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc); + (yyval.interm.type).qualifier.sample = true; + } + break; + + case 155: +/* Line 1792 of yacc.c */ +#line 1221 "glslang.y" + { + parseContext.globalCheck((yyvsp[(1) - (1)].lex).loc, "uniform"); + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc); + (yyval.interm.type).qualifier.storage = EvqUniform; + } + break; + + case 156: +/* Line 1792 of yacc.c */ +#line 1226 "glslang.y" + { + parseContext.globalCheck((yyvsp[(1) - (1)].lex).loc, "buffer"); + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc); + (yyval.interm.type).qualifier.storage = EvqBuffer; + } + break; + + case 157: +/* Line 1792 of yacc.c */ +#line 1231 "glslang.y" + { + 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); + (yyval.interm.type).qualifier.storage = EvqShared; + } + break; + + case 158: +/* Line 1792 of yacc.c */ +#line 1238 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc); + (yyval.interm.type).qualifier.coherent = true; + } + break; + + case 159: +/* Line 1792 of yacc.c */ +#line 1242 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc); + (yyval.interm.type).qualifier.volatil = true; + } + break; + + case 160: +/* Line 1792 of yacc.c */ +#line 1246 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc); + (yyval.interm.type).qualifier.restrict = true; + } + break; + + case 161: +/* Line 1792 of yacc.c */ +#line 1250 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc); + (yyval.interm.type).qualifier.readonly = true; + } + break; + + case 162: +/* Line 1792 of yacc.c */ +#line 1254 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc); + (yyval.interm.type).qualifier.writeonly = true; + } + break; + + case 163: +/* Line 1792 of yacc.c */ +#line 1258 "glslang.y" + { + 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; + } + break; + + case 164: +/* Line 1792 of yacc.c */ +#line 1264 "glslang.y" + { + 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 + } + break; + + case 165: +/* Line 1792 of yacc.c */ +#line 1276 "glslang.y" + { + // TODO: 4.0 functionality: subroutine type to list + } + break; + + case 166: +/* Line 1792 of yacc.c */ +#line 1279 "glslang.y" + { + } + break; + + case 167: +/* Line 1792 of yacc.c */ +#line 1284 "glslang.y" + { + (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type); + (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type)); + } + break; + + case 168: +/* Line 1792 of yacc.c */ +#line 1288 "glslang.y" + { + parseContext.arrayDimCheck((yyvsp[(2) - (2)].interm).loc, (yyvsp[(2) - (2)].interm).arraySizes, 0); + (yyval.interm.type) = (yyvsp[(1) - (2)].interm.type); + (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type)); + (yyval.interm.type).arraySizes = (yyvsp[(2) - (2)].interm).arraySizes; + } + break; + + case 169: +/* Line 1792 of yacc.c */ +#line 1297 "glslang.y" + { + (yyval.interm).loc = (yyvsp[(1) - (2)].lex).loc; + (yyval.interm).arraySizes = new TArraySizes; + (yyval.interm).arraySizes->addInnerSize(); + } + break; + + case 170: +/* Line 1792 of yacc.c */ +#line 1302 "glslang.y" + { + (yyval.interm).loc = (yyvsp[(1) - (3)].lex).loc; + (yyval.interm).arraySizes = new TArraySizes; + + TArraySize size; + parseContext.arraySizeCheck((yyvsp[(2) - (3)].interm.intermTypedNode)->getLoc(), (yyvsp[(2) - (3)].interm.intermTypedNode), size); + (yyval.interm).arraySizes->addInnerSize(size); + } + break; + + case 171: +/* Line 1792 of yacc.c */ +#line 1310 "glslang.y" + { + (yyval.interm) = (yyvsp[(1) - (3)].interm); + (yyval.interm).arraySizes->addInnerSize(); + } + break; + + case 172: +/* Line 1792 of yacc.c */ +#line 1314 "glslang.y" + { + (yyval.interm) = (yyvsp[(1) - (4)].interm); + + TArraySize size; + parseContext.arraySizeCheck((yyvsp[(3) - (4)].interm.intermTypedNode)->getLoc(), (yyvsp[(3) - (4)].interm.intermTypedNode), size); + (yyval.interm).arraySizes->addInnerSize(size); + } + break; + + case 173: +/* Line 1792 of yacc.c */ +#line 1324 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtVoid; + } + break; + + case 174: +/* Line 1792 of yacc.c */ +#line 1328 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtFloat; + } + break; + + case 175: +/* Line 1792 of yacc.c */ +#line 1332 "glslang.y" + { + parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double"); + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtDouble; + } + break; + + case 176: +/* Line 1792 of yacc.c */ +#line 1337 "glslang.y" + { +#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()); + (yyval.interm.type).basicType = EbtFloat16; +#endif + } + break; + + case 177: +/* Line 1792 of yacc.c */ +#line 1344 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtInt; + } + break; + + case 178: +/* Line 1792 of yacc.c */ +#line 1348 "glslang.y" + { + parseContext.fullIntegerCheck((yyvsp[(1) - (1)].lex).loc, "unsigned integer"); + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtUint; + } + break; + + case 179: +/* Line 1792 of yacc.c */ +#line 1353 "glslang.y" + { + 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()); + (yyval.interm.type).basicType = EbtInt64; + } + break; + + case 180: +/* Line 1792 of yacc.c */ +#line 1358 "glslang.y" + { + 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()); + (yyval.interm.type).basicType = EbtUint64; + } + break; + + case 181: +/* Line 1792 of yacc.c */ +#line 1363 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtBool; + } + break; + + case 182: +/* Line 1792 of yacc.c */ +#line 1367 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtFloat; + (yyval.interm.type).setVector(2); + } + break; + + case 183: +/* Line 1792 of yacc.c */ +#line 1372 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtFloat; + (yyval.interm.type).setVector(3); + } + break; + + case 184: +/* Line 1792 of yacc.c */ +#line 1377 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtFloat; + (yyval.interm.type).setVector(4); + } + break; + + case 185: +/* Line 1792 of yacc.c */ +#line 1382 "glslang.y" + { + parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double vector"); + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtDouble; + (yyval.interm.type).setVector(2); + } + break; + + case 186: +/* Line 1792 of yacc.c */ +#line 1388 "glslang.y" + { + parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double vector"); + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtDouble; + (yyval.interm.type).setVector(3); + } + break; + + case 187: +/* Line 1792 of yacc.c */ +#line 1394 "glslang.y" + { + parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double vector"); + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtDouble; + (yyval.interm.type).setVector(4); + } + break; + + case 188: +/* Line 1792 of yacc.c */ +#line 1400 "glslang.y" + { +#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()); + (yyval.interm.type).basicType = EbtFloat16; + (yyval.interm.type).setVector(2); +#endif + } + break; + + case 189: +/* Line 1792 of yacc.c */ +#line 1408 "glslang.y" + { +#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()); + (yyval.interm.type).basicType = EbtFloat16; + (yyval.interm.type).setVector(3); +#endif + } + break; + + case 190: +/* Line 1792 of yacc.c */ +#line 1416 "glslang.y" + { +#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()); + (yyval.interm.type).basicType = EbtFloat16; + (yyval.interm.type).setVector(4); +#endif + } + break; + + case 191: +/* Line 1792 of yacc.c */ +#line 1424 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtBool; + (yyval.interm.type).setVector(2); + } + break; + + case 192: +/* Line 1792 of yacc.c */ +#line 1429 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtBool; + (yyval.interm.type).setVector(3); + } + break; + + case 193: +/* Line 1792 of yacc.c */ +#line 1434 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtBool; + (yyval.interm.type).setVector(4); + } + break; + + case 194: +/* Line 1792 of yacc.c */ +#line 1439 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtInt; + (yyval.interm.type).setVector(2); + } + break; + + case 195: +/* Line 1792 of yacc.c */ +#line 1444 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtInt; + (yyval.interm.type).setVector(3); + } + break; + + case 196: +/* Line 1792 of yacc.c */ +#line 1449 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtInt; + (yyval.interm.type).setVector(4); + } + break; + + case 197: +/* Line 1792 of yacc.c */ +#line 1454 "glslang.y" + { + 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()); + (yyval.interm.type).basicType = EbtInt64; + (yyval.interm.type).setVector(2); + } + break; + + case 198: +/* Line 1792 of yacc.c */ +#line 1460 "glslang.y" + { + 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()); + (yyval.interm.type).basicType = EbtInt64; + (yyval.interm.type).setVector(3); + } + break; + + case 199: +/* Line 1792 of yacc.c */ +#line 1466 "glslang.y" + { + 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()); + (yyval.interm.type).basicType = EbtInt64; + (yyval.interm.type).setVector(4); + } + break; + + case 200: +/* Line 1792 of yacc.c */ +#line 1472 "glslang.y" + { + parseContext.fullIntegerCheck((yyvsp[(1) - (1)].lex).loc, "unsigned integer vector"); + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtUint; + (yyval.interm.type).setVector(2); + } + break; + + case 201: +/* Line 1792 of yacc.c */ +#line 1478 "glslang.y" + { + parseContext.fullIntegerCheck((yyvsp[(1) - (1)].lex).loc, "unsigned integer vector"); + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtUint; + (yyval.interm.type).setVector(3); + } + break; + + case 202: +/* Line 1792 of yacc.c */ +#line 1484 "glslang.y" + { + parseContext.fullIntegerCheck((yyvsp[(1) - (1)].lex).loc, "unsigned integer vector"); + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtUint; + (yyval.interm.type).setVector(4); + } + break; + + case 203: +/* Line 1792 of yacc.c */ +#line 1490 "glslang.y" + { + 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()); + (yyval.interm.type).basicType = EbtUint64; + (yyval.interm.type).setVector(2); + } + break; + + case 204: +/* Line 1792 of yacc.c */ +#line 1496 "glslang.y" + { + 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()); + (yyval.interm.type).basicType = EbtUint64; + (yyval.interm.type).setVector(3); + } + break; + + case 205: +/* Line 1792 of yacc.c */ +#line 1502 "glslang.y" + { + 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()); + (yyval.interm.type).basicType = EbtUint64; + (yyval.interm.type).setVector(4); + } + break; + + case 206: +/* Line 1792 of yacc.c */ +#line 1508 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtFloat; + (yyval.interm.type).setMatrix(2, 2); + } + break; + + case 207: +/* Line 1792 of yacc.c */ +#line 1513 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtFloat; + (yyval.interm.type).setMatrix(3, 3); + } + break; + + case 208: +/* Line 1792 of yacc.c */ +#line 1518 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtFloat; + (yyval.interm.type).setMatrix(4, 4); + } + break; + + case 209: +/* Line 1792 of yacc.c */ +#line 1523 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtFloat; + (yyval.interm.type).setMatrix(2, 2); + } + break; + + case 210: +/* Line 1792 of yacc.c */ +#line 1528 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtFloat; + (yyval.interm.type).setMatrix(2, 3); + } + break; + + case 211: +/* Line 1792 of yacc.c */ +#line 1533 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtFloat; + (yyval.interm.type).setMatrix(2, 4); + } + break; + + case 212: +/* Line 1792 of yacc.c */ +#line 1538 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtFloat; + (yyval.interm.type).setMatrix(3, 2); + } + break; + + case 213: +/* Line 1792 of yacc.c */ +#line 1543 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtFloat; + (yyval.interm.type).setMatrix(3, 3); + } + break; + + case 214: +/* Line 1792 of yacc.c */ +#line 1548 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtFloat; + (yyval.interm.type).setMatrix(3, 4); + } + break; + + case 215: +/* Line 1792 of yacc.c */ +#line 1553 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtFloat; + (yyval.interm.type).setMatrix(4, 2); + } + break; + + case 216: +/* Line 1792 of yacc.c */ +#line 1558 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtFloat; + (yyval.interm.type).setMatrix(4, 3); + } + break; + + case 217: +/* Line 1792 of yacc.c */ +#line 1563 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtFloat; + (yyval.interm.type).setMatrix(4, 4); + } + break; + + case 218: +/* Line 1792 of yacc.c */ +#line 1568 "glslang.y" + { + parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double matrix"); + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtDouble; + (yyval.interm.type).setMatrix(2, 2); + } + break; + + case 219: +/* Line 1792 of yacc.c */ +#line 1574 "glslang.y" + { + parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double matrix"); + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtDouble; + (yyval.interm.type).setMatrix(3, 3); + } + break; + + case 220: +/* Line 1792 of yacc.c */ +#line 1580 "glslang.y" + { + parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double matrix"); + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtDouble; + (yyval.interm.type).setMatrix(4, 4); + } + break; + + case 221: +/* Line 1792 of yacc.c */ +#line 1586 "glslang.y" + { + parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double matrix"); + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtDouble; + (yyval.interm.type).setMatrix(2, 2); + } + break; + + case 222: +/* Line 1792 of yacc.c */ +#line 1592 "glslang.y" + { + parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double matrix"); + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtDouble; + (yyval.interm.type).setMatrix(2, 3); + } + break; + + case 223: +/* Line 1792 of yacc.c */ +#line 1598 "glslang.y" + { + parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double matrix"); + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtDouble; + (yyval.interm.type).setMatrix(2, 4); + } + break; + + case 224: +/* Line 1792 of yacc.c */ +#line 1604 "glslang.y" + { + parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double matrix"); + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtDouble; + (yyval.interm.type).setMatrix(3, 2); + } + break; + + case 225: +/* Line 1792 of yacc.c */ +#line 1610 "glslang.y" + { + parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double matrix"); + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtDouble; + (yyval.interm.type).setMatrix(3, 3); + } + break; + + case 226: +/* Line 1792 of yacc.c */ +#line 1616 "glslang.y" + { + parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double matrix"); + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtDouble; + (yyval.interm.type).setMatrix(3, 4); + } + break; + + case 227: +/* Line 1792 of yacc.c */ +#line 1622 "glslang.y" + { + parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double matrix"); + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtDouble; + (yyval.interm.type).setMatrix(4, 2); + } + break; + + case 228: +/* Line 1792 of yacc.c */ +#line 1628 "glslang.y" + { + parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double matrix"); + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtDouble; + (yyval.interm.type).setMatrix(4, 3); + } + break; + + case 229: +/* Line 1792 of yacc.c */ +#line 1634 "glslang.y" + { + parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double matrix"); + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtDouble; + (yyval.interm.type).setMatrix(4, 4); + } + break; + + case 230: +/* Line 1792 of yacc.c */ +#line 1640 "glslang.y" + { +#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()); + (yyval.interm.type).basicType = EbtFloat16; + (yyval.interm.type).setMatrix(2, 2); +#endif + } + break; + + case 231: +/* Line 1792 of yacc.c */ +#line 1648 "glslang.y" + { +#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()); + (yyval.interm.type).basicType = EbtFloat16; + (yyval.interm.type).setMatrix(3, 3); +#endif + } + break; + + case 232: +/* Line 1792 of yacc.c */ +#line 1656 "glslang.y" + { +#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()); + (yyval.interm.type).basicType = EbtFloat16; + (yyval.interm.type).setMatrix(4, 4); +#endif + } + break; + + case 233: +/* Line 1792 of yacc.c */ +#line 1664 "glslang.y" + { +#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()); + (yyval.interm.type).basicType = EbtFloat16; + (yyval.interm.type).setMatrix(2, 2); +#endif + } + break; + + case 234: +/* Line 1792 of yacc.c */ +#line 1672 "glslang.y" + { +#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()); + (yyval.interm.type).basicType = EbtFloat16; + (yyval.interm.type).setMatrix(2, 3); +#endif + } + break; + + case 235: +/* Line 1792 of yacc.c */ +#line 1680 "glslang.y" + { +#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()); + (yyval.interm.type).basicType = EbtFloat16; + (yyval.interm.type).setMatrix(2, 4); +#endif + } + break; + + case 236: +/* Line 1792 of yacc.c */ +#line 1688 "glslang.y" + { +#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()); + (yyval.interm.type).basicType = EbtFloat16; + (yyval.interm.type).setMatrix(3, 2); +#endif + } + break; + + case 237: +/* Line 1792 of yacc.c */ +#line 1696 "glslang.y" + { +#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()); + (yyval.interm.type).basicType = EbtFloat16; + (yyval.interm.type).setMatrix(3, 3); +#endif + } + break; + + case 238: +/* Line 1792 of yacc.c */ +#line 1704 "glslang.y" + { +#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()); + (yyval.interm.type).basicType = EbtFloat16; + (yyval.interm.type).setMatrix(3, 4); +#endif + } + break; + + case 239: +/* Line 1792 of yacc.c */ +#line 1712 "glslang.y" + { +#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()); + (yyval.interm.type).basicType = EbtFloat16; + (yyval.interm.type).setMatrix(4, 2); +#endif + } + break; + + case 240: +/* Line 1792 of yacc.c */ +#line 1720 "glslang.y" + { +#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()); + (yyval.interm.type).basicType = EbtFloat16; + (yyval.interm.type).setMatrix(4, 3); +#endif + } + break; + + case 241: +/* Line 1792 of yacc.c */ +#line 1728 "glslang.y" + { +#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()); + (yyval.interm.type).basicType = EbtFloat16; + (yyval.interm.type).setMatrix(4, 4); +#endif + } + break; + + case 242: +/* Line 1792 of yacc.c */ +#line 1736 "glslang.y" + { + parseContext.vulkanRemoved((yyvsp[(1) - (1)].lex).loc, "atomic counter types"); + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtAtomicUint; + } + break; + + case 243: +/* Line 1792 of yacc.c */ +#line 1741 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.set(EbtFloat, Esd1D); + } + break; + + case 244: +/* Line 1792 of yacc.c */ +#line 1746 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.set(EbtFloat, Esd2D); + } + break; + + case 245: +/* Line 1792 of yacc.c */ +#line 1751 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.set(EbtFloat, Esd3D); + } + break; + + case 246: +/* Line 1792 of yacc.c */ +#line 1756 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.set(EbtFloat, EsdCube); + } + break; + + case 247: +/* Line 1792 of yacc.c */ +#line 1761 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.set(EbtFloat, Esd1D, false, true); + } + break; + + case 248: +/* Line 1792 of yacc.c */ +#line 1766 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, true); + } + break; + + case 249: +/* Line 1792 of yacc.c */ +#line 1771 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.set(EbtFloat, EsdCube, false, true); + } + break; + + case 250: +/* Line 1792 of yacc.c */ +#line 1776 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true); + } + break; + + case 251: +/* Line 1792 of yacc.c */ +#line 1781 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true); + } + break; + + case 252: +/* Line 1792 of yacc.c */ +#line 1786 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true, true); + } + break; + + case 253: +/* Line 1792 of yacc.c */ +#line 1791 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, true); + } + break; + + case 254: +/* Line 1792 of yacc.c */ +#line 1796 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true); + } + break; + + case 255: +/* Line 1792 of yacc.c */ +#line 1801 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true, true); + } + break; + + case 256: +/* Line 1792 of yacc.c */ +#line 1806 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.set(EbtInt, Esd1D); + } + break; + + case 257: +/* Line 1792 of yacc.c */ +#line 1811 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.set(EbtInt, Esd2D); + } + break; + + case 258: +/* Line 1792 of yacc.c */ +#line 1816 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.set(EbtInt, Esd3D); + } + break; + + case 259: +/* Line 1792 of yacc.c */ +#line 1821 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.set(EbtInt, EsdCube); + } + break; + + case 260: +/* Line 1792 of yacc.c */ +#line 1826 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.set(EbtInt, Esd1D, true); + } + break; + + case 261: +/* Line 1792 of yacc.c */ +#line 1831 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.set(EbtInt, Esd2D, true); + } + break; + + case 262: +/* Line 1792 of yacc.c */ +#line 1836 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.set(EbtInt, EsdCube, true); + } + break; + + case 263: +/* Line 1792 of yacc.c */ +#line 1841 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.set(EbtUint, Esd1D); + } + break; + + case 264: +/* Line 1792 of yacc.c */ +#line 1846 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.set(EbtUint, Esd2D); + } + break; + + case 265: +/* Line 1792 of yacc.c */ +#line 1851 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.set(EbtUint, Esd3D); + } + break; + + case 266: +/* Line 1792 of yacc.c */ +#line 1856 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.set(EbtUint, EsdCube); + } + break; + + case 267: +/* Line 1792 of yacc.c */ +#line 1861 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.set(EbtUint, Esd1D, true); + } + break; + + case 268: +/* Line 1792 of yacc.c */ +#line 1866 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.set(EbtUint, Esd2D, true); + } + break; + + case 269: +/* Line 1792 of yacc.c */ +#line 1871 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.set(EbtUint, EsdCube, true); + } + break; + + case 270: +/* Line 1792 of yacc.c */ +#line 1876 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.set(EbtFloat, EsdRect); + } + break; + + case 271: +/* Line 1792 of yacc.c */ +#line 1881 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.set(EbtFloat, EsdRect, false, true); + } + break; + + case 272: +/* Line 1792 of yacc.c */ +#line 1886 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.set(EbtInt, EsdRect); + } + break; + + case 273: +/* Line 1792 of yacc.c */ +#line 1891 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.set(EbtUint, EsdRect); + } + break; + + case 274: +/* Line 1792 of yacc.c */ +#line 1896 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.set(EbtFloat, EsdBuffer); + } + break; + + case 275: +/* Line 1792 of yacc.c */ +#line 1901 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.set(EbtInt, EsdBuffer); + } + break; + + case 276: +/* Line 1792 of yacc.c */ +#line 1906 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.set(EbtUint, EsdBuffer); + } + break; + + case 277: +/* Line 1792 of yacc.c */ +#line 1911 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, false, true); + } + break; + + case 278: +/* Line 1792 of yacc.c */ +#line 1916 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.set(EbtInt, Esd2D, false, false, true); + } + break; + + case 279: +/* Line 1792 of yacc.c */ +#line 1921 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.set(EbtUint, Esd2D, false, false, true); + } + break; + + case 280: +/* Line 1792 of yacc.c */ +#line 1926 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, false, true); + } + break; + + case 281: +/* Line 1792 of yacc.c */ +#line 1931 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.set(EbtInt, Esd2D, true, false, true); + } + break; + + case 282: +/* Line 1792 of yacc.c */ +#line 1936 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.set(EbtUint, Esd2D, true, false, true); + } + break; + + case 283: +/* Line 1792 of yacc.c */ +#line 1941 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setPureSampler(false); + } + break; + + case 284: +/* Line 1792 of yacc.c */ +#line 1946 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setPureSampler(true); + } + break; + + case 285: +/* Line 1792 of yacc.c */ +#line 1951 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D); + } + break; + + case 286: +/* Line 1792 of yacc.c */ +#line 1956 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D); + } + break; + + case 287: +/* Line 1792 of yacc.c */ +#line 1961 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setTexture(EbtFloat, Esd3D); + } + break; + + case 288: +/* Line 1792 of yacc.c */ +#line 1966 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube); + } + break; + + case 289: +/* Line 1792 of yacc.c */ +#line 1971 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D, true); + } + break; + + case 290: +/* Line 1792 of yacc.c */ +#line 1976 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true); + } + break; + + case 291: +/* Line 1792 of yacc.c */ +#line 1981 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube, true); + } + break; + + case 292: +/* Line 1792 of yacc.c */ +#line 1986 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D); + } + break; + + case 293: +/* Line 1792 of yacc.c */ +#line 1991 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D); + } + break; + + case 294: +/* Line 1792 of yacc.c */ +#line 1996 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setTexture(EbtInt, Esd3D); + } + break; + + case 295: +/* Line 1792 of yacc.c */ +#line 2001 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube); + } + break; + + case 296: +/* Line 1792 of yacc.c */ +#line 2006 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D, true); + } + break; + + case 297: +/* Line 1792 of yacc.c */ +#line 2011 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true); + } + break; + + case 298: +/* Line 1792 of yacc.c */ +#line 2016 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube, true); + } + break; + + case 299: +/* Line 1792 of yacc.c */ +#line 2021 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D); + } + break; + + case 300: +/* Line 1792 of yacc.c */ +#line 2026 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D); + } + break; + + case 301: +/* Line 1792 of yacc.c */ +#line 2031 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setTexture(EbtUint, Esd3D); + } + break; + + case 302: +/* Line 1792 of yacc.c */ +#line 2036 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube); + } + break; + + case 303: +/* Line 1792 of yacc.c */ +#line 2041 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D, true); + } + break; + + case 304: +/* Line 1792 of yacc.c */ +#line 2046 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true); + } + break; + + case 305: +/* Line 1792 of yacc.c */ +#line 2051 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube, true); + } + break; + + case 306: +/* Line 1792 of yacc.c */ +#line 2056 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setTexture(EbtFloat, EsdRect); + } + break; + + case 307: +/* Line 1792 of yacc.c */ +#line 2061 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setTexture(EbtInt, EsdRect); + } + break; + + case 308: +/* Line 1792 of yacc.c */ +#line 2066 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setTexture(EbtUint, EsdRect); + } + break; + + case 309: +/* Line 1792 of yacc.c */ +#line 2071 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setTexture(EbtFloat, EsdBuffer); + } + break; + + case 310: +/* Line 1792 of yacc.c */ +#line 2076 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setTexture(EbtInt, EsdBuffer); + } + break; + + case 311: +/* Line 1792 of yacc.c */ +#line 2081 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setTexture(EbtUint, EsdBuffer); + } + break; + + case 312: +/* Line 1792 of yacc.c */ +#line 2086 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, false, false, true); + } + break; + + case 313: +/* Line 1792 of yacc.c */ +#line 2091 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, false, false, true); + } + break; + + case 314: +/* Line 1792 of yacc.c */ +#line 2096 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, false, false, true); + } + break; + + case 315: +/* Line 1792 of yacc.c */ +#line 2101 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true, false, true); + } + break; + + case 316: +/* Line 1792 of yacc.c */ +#line 2106 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true, false, true); + } + break; + + case 317: +/* Line 1792 of yacc.c */ +#line 2111 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true, false, true); + } + break; + + case 318: +/* Line 1792 of yacc.c */ +#line 2116 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D); + } + break; + + case 319: +/* Line 1792 of yacc.c */ +#line 2121 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtInt, Esd1D); + } + break; + + case 320: +/* Line 1792 of yacc.c */ +#line 2126 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtUint, Esd1D); + } + break; + + case 321: +/* Line 1792 of yacc.c */ +#line 2131 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D); + } + break; + + case 322: +/* Line 1792 of yacc.c */ +#line 2136 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtInt, Esd2D); + } + break; + + case 323: +/* Line 1792 of yacc.c */ +#line 2141 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtUint, Esd2D); + } + break; + + case 324: +/* Line 1792 of yacc.c */ +#line 2146 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtFloat, Esd3D); + } + break; + + case 325: +/* Line 1792 of yacc.c */ +#line 2151 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtInt, Esd3D); + } + break; + + case 326: +/* Line 1792 of yacc.c */ +#line 2156 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtUint, Esd3D); + } + break; + + case 327: +/* Line 1792 of yacc.c */ +#line 2161 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtFloat, EsdRect); + } + break; + + case 328: +/* Line 1792 of yacc.c */ +#line 2166 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtInt, EsdRect); + } + break; + + case 329: +/* Line 1792 of yacc.c */ +#line 2171 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtUint, EsdRect); + } + break; + + case 330: +/* Line 1792 of yacc.c */ +#line 2176 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube); + } + break; + + case 331: +/* Line 1792 of yacc.c */ +#line 2181 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtInt, EsdCube); + } + break; + + case 332: +/* Line 1792 of yacc.c */ +#line 2186 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtUint, EsdCube); + } + break; + + case 333: +/* Line 1792 of yacc.c */ +#line 2191 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtFloat, EsdBuffer); + } + break; + + case 334: +/* Line 1792 of yacc.c */ +#line 2196 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtInt, EsdBuffer); + } + break; + + case 335: +/* Line 1792 of yacc.c */ +#line 2201 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtUint, EsdBuffer); + } + break; + + case 336: +/* Line 1792 of yacc.c */ +#line 2206 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D, true); + } + break; + + case 337: +/* Line 1792 of yacc.c */ +#line 2211 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtInt, Esd1D, true); + } + break; + + case 338: +/* Line 1792 of yacc.c */ +#line 2216 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtUint, Esd1D, true); + } + break; + + case 339: +/* Line 1792 of yacc.c */ +#line 2221 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true); + } + break; + + case 340: +/* Line 1792 of yacc.c */ +#line 2226 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true); + } + break; + + case 341: +/* Line 1792 of yacc.c */ +#line 2231 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true); + } + break; + + case 342: +/* Line 1792 of yacc.c */ +#line 2236 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube, true); + } + break; + + case 343: +/* Line 1792 of yacc.c */ +#line 2241 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtInt, EsdCube, true); + } + break; + + case 344: +/* Line 1792 of yacc.c */ +#line 2246 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtUint, EsdCube, true); + } + break; + + case 345: +/* Line 1792 of yacc.c */ +#line 2251 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, false, false, true); + } + break; + + case 346: +/* Line 1792 of yacc.c */ +#line 2256 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, false, false, true); + } + break; + + case 347: +/* Line 1792 of yacc.c */ +#line 2261 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, false, false, true); + } + break; + + case 348: +/* Line 1792 of yacc.c */ +#line 2266 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true, false, true); + } + break; + + case 349: +/* Line 1792 of yacc.c */ +#line 2271 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true, false, true); + } + break; + + case 350: +/* Line 1792 of yacc.c */ +#line 2276 "glslang.y" + { + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true, false, true); + } + break; + + case 351: +/* Line 1792 of yacc.c */ +#line 2281 "glslang.y" + { // GL_OES_EGL_image_external + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.set(EbtFloat, Esd2D); + (yyval.interm.type).sampler.external = true; + } + break; + + case 352: +/* Line 1792 of yacc.c */ +#line 2287 "glslang.y" + { + parseContext.requireStage((yyvsp[(1) - (1)].lex).loc, EShLangFragment, "subpass input"); + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setSubpass(EbtFloat); + } + break; + + case 353: +/* Line 1792 of yacc.c */ +#line 2293 "glslang.y" + { + parseContext.requireStage((yyvsp[(1) - (1)].lex).loc, EShLangFragment, "subpass input"); + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setSubpass(EbtFloat, true); + } + break; + + case 354: +/* Line 1792 of yacc.c */ +#line 2299 "glslang.y" + { + parseContext.requireStage((yyvsp[(1) - (1)].lex).loc, EShLangFragment, "subpass input"); + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setSubpass(EbtInt); + } + break; + + case 355: +/* Line 1792 of yacc.c */ +#line 2305 "glslang.y" + { + parseContext.requireStage((yyvsp[(1) - (1)].lex).loc, EShLangFragment, "subpass input"); + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setSubpass(EbtInt, true); + } + break; + + case 356: +/* Line 1792 of yacc.c */ +#line 2311 "glslang.y" + { + parseContext.requireStage((yyvsp[(1) - (1)].lex).loc, EShLangFragment, "subpass input"); + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setSubpass(EbtUint); + } + break; + + case 357: +/* Line 1792 of yacc.c */ +#line 2317 "glslang.y" + { + parseContext.requireStage((yyvsp[(1) - (1)].lex).loc, EShLangFragment, "subpass input"); + (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setSubpass(EbtUint, true); + } + break; + + case 358: +/* Line 1792 of yacc.c */ +#line 2323 "glslang.y" + { + (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type); + (yyval.interm.type).qualifier.storage = parseContext.symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary; + parseContext.structTypeCheck((yyval.interm.type).loc, (yyval.interm.type)); + } + break; + + case 359: +/* Line 1792 of yacc.c */ +#line 2328 "glslang.y" + { + // + // This is for user defined type names. The lexical phase looked up the + // type. + // + if (const TVariable* variable = ((yyvsp[(1) - (1)].lex).symbol)->getAsVariable()) { + const TType& structure = variable->getType(); + (yyval.interm.type).init((yyvsp[(1) - (1)].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(), ""); + } + break; + + case 360: +/* Line 1792 of yacc.c */ +#line 2344 "glslang.y" + { + 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); + } + break; + + case 361: +/* Line 1792 of yacc.c */ +#line 2349 "glslang.y" + { + 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); + } + break; + + case 362: +/* Line 1792 of yacc.c */ +#line 2354 "glslang.y" + { + 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); + } + break; + + case 363: +/* Line 1792 of yacc.c */ +#line 2362 "glslang.y" + { parseContext.nestedStructCheck((yyvsp[(1) - (3)].lex).loc); } + break; + + case 364: +/* Line 1792 of yacc.c */ +#line 2362 "glslang.y" + { + 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); + 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); + (yyval.interm.type).basicType = EbtStruct; + (yyval.interm.type).userDef = structure; + --parseContext.structNestingLevel; + } + break; + + case 365: +/* Line 1792 of yacc.c */ +#line 2373 "glslang.y" + { parseContext.nestedStructCheck((yyvsp[(1) - (2)].lex).loc); } + break; + + case 366: +/* Line 1792 of yacc.c */ +#line 2373 "glslang.y" + { + TType* structure = new TType((yyvsp[(4) - (5)].interm.typeList), TString("")); + (yyval.interm.type).init((yyvsp[(1) - (5)].lex).loc); + (yyval.interm.type).basicType = EbtStruct; + (yyval.interm.type).userDef = structure; + --parseContext.structNestingLevel; + } + break; + + case 367: +/* Line 1792 of yacc.c */ +#line 2383 "glslang.y" + { + (yyval.interm.typeList) = (yyvsp[(1) - (1)].interm.typeList); + } + break; + + case 368: +/* Line 1792 of yacc.c */ +#line 2386 "glslang.y" + { + (yyval.interm.typeList) = (yyvsp[(1) - (2)].interm.typeList); + for (unsigned int i = 0; i < (yyvsp[(2) - (2)].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()); + } + (yyval.interm.typeList)->push_back((*(yyvsp[(2) - (2)].interm.typeList))[i]); + } + } + break; + + case 369: +/* Line 1792 of yacc.c */ +#line 2399 "glslang.y" + { + 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 (parseContext.profile == EEsProfile) + parseContext.arraySizeRequiredCheck((yyvsp[(1) - (3)].interm.type).loc, *(yyvsp[(1) - (3)].interm.type).arraySizes); + } + + (yyval.interm.typeList) = (yyvsp[(2) - (3)].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); + + 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)); + } + } + break; + + case 370: +/* Line 1792 of yacc.c */ +#line 2417 "glslang.y" + { + 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"); + if (parseContext.profile == EEsProfile) + parseContext.arraySizeRequiredCheck((yyvsp[(2) - (4)].interm.type).loc, *(yyvsp[(2) - (4)].interm.type).arraySizes); + } + + (yyval.interm.typeList) = (yyvsp[(3) - (4)].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); + + 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)); + } + } + break; + + case 371: +/* Line 1792 of yacc.c */ +#line 2441 "glslang.y" + { + (yyval.interm.typeList) = new TTypeList; + (yyval.interm.typeList)->push_back((yyvsp[(1) - (1)].interm.typeLine)); + } + break; + + case 372: +/* Line 1792 of yacc.c */ +#line 2445 "glslang.y" + { + (yyval.interm.typeList)->push_back((yyvsp[(3) - (3)].interm.typeLine)); + } + break; + + case 373: +/* Line 1792 of yacc.c */ +#line 2451 "glslang.y" + { + (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); + } + break; + + case 374: +/* Line 1792 of yacc.c */ +#line 2456 "glslang.y" + { + parseContext.arrayDimCheck((yyvsp[(1) - (2)].lex).loc, (yyvsp[(2) - (2)].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); + } + break; + + case 375: +/* Line 1792 of yacc.c */ +#line 2467 "glslang.y" + { + (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); + } + break; + + case 376: +/* Line 1792 of yacc.c */ +#line 2470 "glslang.y" + { + 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); + } + break; + + case 377: +/* Line 1792 of yacc.c */ +#line 2476 "glslang.y" + { + 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); + } + break; + + case 378: +/* Line 1792 of yacc.c */ +#line 2485 "glslang.y" + { + (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate(0, (yyvsp[(1) - (1)].interm.intermTypedNode), (yyvsp[(1) - (1)].interm.intermTypedNode)->getLoc()); + } + break; + + case 379: +/* Line 1792 of yacc.c */ +#line 2488 "glslang.y" + { + (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate((yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode)); + } + break; + + case 380: +/* Line 1792 of yacc.c */ +#line 2494 "glslang.y" + { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); } + break; + + case 381: +/* Line 1792 of yacc.c */ +#line 2498 "glslang.y" + { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); } + break; + + case 382: +/* Line 1792 of yacc.c */ +#line 2499 "glslang.y" + { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); } + break; + + case 383: +/* Line 1792 of yacc.c */ +#line 2505 "glslang.y" + { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); } + break; + + case 384: +/* Line 1792 of yacc.c */ +#line 2506 "glslang.y" + { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); } + break; + + case 385: +/* Line 1792 of yacc.c */ +#line 2507 "glslang.y" + { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); } + break; + + case 386: +/* Line 1792 of yacc.c */ +#line 2508 "glslang.y" + { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); } + break; + + case 387: +/* Line 1792 of yacc.c */ +#line 2509 "glslang.y" + { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); } + break; + + case 388: +/* Line 1792 of yacc.c */ +#line 2510 "glslang.y" + { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); } + break; + + case 389: +/* Line 1792 of yacc.c */ +#line 2511 "glslang.y" + { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); } + break; + + case 390: +/* Line 1792 of yacc.c */ +#line 2515 "glslang.y" + { (yyval.interm.intermNode) = 0; } + break; + + case 391: +/* Line 1792 of yacc.c */ +#line 2516 "glslang.y" + { + parseContext.symbolTable.push(); + ++parseContext.statementNestingLevel; + } + break; + + case 392: +/* Line 1792 of yacc.c */ +#line 2520 "glslang.y" + { + parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); + --parseContext.statementNestingLevel; + } + break; + + case 393: +/* Line 1792 of yacc.c */ +#line 2524 "glslang.y" + { + 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); + } + break; + + case 394: +/* Line 1792 of yacc.c */ +#line 2532 "glslang.y" + { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); } + break; + + case 395: +/* Line 1792 of yacc.c */ +#line 2533 "glslang.y" + { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); } + break; + + case 396: +/* Line 1792 of yacc.c */ +#line 2537 "glslang.y" + { + ++parseContext.controlFlowNestingLevel; + } + break; + + case 397: +/* Line 1792 of yacc.c */ +#line 2540 "glslang.y" + { + --parseContext.controlFlowNestingLevel; + (yyval.interm.intermNode) = (yyvsp[(2) - (2)].interm.intermNode); + } + break; + + case 398: +/* Line 1792 of yacc.c */ +#line 2544 "glslang.y" + { + parseContext.symbolTable.push(); + ++parseContext.statementNestingLevel; + ++parseContext.controlFlowNestingLevel; + } + break; + + case 399: +/* Line 1792 of yacc.c */ +#line 2549 "glslang.y" + { + parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); + --parseContext.statementNestingLevel; + --parseContext.controlFlowNestingLevel; + (yyval.interm.intermNode) = (yyvsp[(2) - (2)].interm.intermNode); + } + break; + + case 400: +/* Line 1792 of yacc.c */ +#line 2558 "glslang.y" + { + (yyval.interm.intermNode) = 0; + } + break; + + case 401: +/* Line 1792 of yacc.c */ +#line 2561 "glslang.y" + { + 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); + } + break; + + case 402: +/* Line 1792 of yacc.c */ +#line 2569 "glslang.y" + { + (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) = 0; // start a fresh subsequence for what's after this case + } + } + break; + + case 403: +/* Line 1792 of yacc.c */ +#line 2577 "glslang.y" + { + 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)); + (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)); + } + break; + + case 404: +/* Line 1792 of yacc.c */ +#line 2588 "glslang.y" + { (yyval.interm.intermNode) = 0; } + break; + + case 405: +/* Line 1792 of yacc.c */ +#line 2589 "glslang.y" + { (yyval.interm.intermNode) = static_cast((yyvsp[(1) - (2)].interm.intermTypedNode)); } + break; + + case 406: +/* Line 1792 of yacc.c */ +#line 2593 "glslang.y" + { + 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); + } + break; + + case 407: +/* Line 1792 of yacc.c */ +#line 2600 "glslang.y" + { + (yyval.interm.nodePair).node1 = (yyvsp[(1) - (3)].interm.intermNode); + (yyval.interm.nodePair).node2 = (yyvsp[(3) - (3)].interm.intermNode); + } + break; + + case 408: +/* Line 1792 of yacc.c */ +#line 2604 "glslang.y" + { + (yyval.interm.nodePair).node1 = (yyvsp[(1) - (1)].interm.intermNode); + (yyval.interm.nodePair).node2 = 0; + } + break; + + case 409: +/* Line 1792 of yacc.c */ +#line 2612 "glslang.y" + { + (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); + parseContext.boolCheck((yyvsp[(1) - (1)].interm.intermTypedNode)->getLoc(), (yyvsp[(1) - (1)].interm.intermTypedNode)); + } + break; + + case 410: +/* Line 1792 of yacc.c */ +#line 2616 "glslang.y" + { + parseContext.boolCheck((yyvsp[(2) - (4)].lex).loc, (yyvsp[(1) - (4)].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)); + if (initNode) + (yyval.interm.intermTypedNode) = initNode->getAsTyped(); + else + (yyval.interm.intermTypedNode) = 0; + } + break; + + case 411: +/* Line 1792 of yacc.c */ +#line 2629 "glslang.y" + { + // start new switch sequence on the switch stack + ++parseContext.controlFlowNestingLevel; + ++parseContext.statementNestingLevel; + parseContext.switchSequenceStack.push_back(new TIntermSequence); + parseContext.switchLevel.push_back(parseContext.statementNestingLevel); + parseContext.symbolTable.push(); + } + break; + + case 412: +/* Line 1792 of yacc.c */ +#line 2637 "glslang.y" + { + (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); + delete parseContext.switchSequenceStack.back(); + parseContext.switchSequenceStack.pop_back(); + parseContext.switchLevel.pop_back(); + parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); + --parseContext.statementNestingLevel; + --parseContext.controlFlowNestingLevel; + } + break; + + case 413: +/* Line 1792 of yacc.c */ +#line 2649 "glslang.y" + { + (yyval.interm.intermNode) = 0; + } + break; + + case 414: +/* Line 1792 of yacc.c */ +#line 2652 "glslang.y" + { + (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); + } + break; + + case 415: +/* Line 1792 of yacc.c */ +#line 2658 "glslang.y" + { + (yyval.interm.intermNode) = 0; + if (parseContext.switchLevel.size() == 0) + parseContext.error((yyvsp[(1) - (3)].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", ""); + 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); + } + } + break; + + case 416: +/* Line 1792 of yacc.c */ +#line 2670 "glslang.y" + { + (yyval.interm.intermNode) = 0; + if (parseContext.switchLevel.size() == 0) + parseContext.error((yyvsp[(1) - (2)].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", ""); + else + (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDefault, (yyvsp[(1) - (2)].lex).loc); + } + break; + + case 417: +/* Line 1792 of yacc.c */ +#line 2682 "glslang.y" + { + if (! parseContext.limits.whileLoops) + parseContext.error((yyvsp[(1) - (2)].lex).loc, "while loops not available", "limitation", ""); + parseContext.symbolTable.push(); + ++parseContext.loopNestingLevel; + ++parseContext.statementNestingLevel; + ++parseContext.controlFlowNestingLevel; + } + break; + + case 418: +/* Line 1792 of yacc.c */ +#line 2690 "glslang.y" + { + 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); + --parseContext.loopNestingLevel; + --parseContext.statementNestingLevel; + --parseContext.controlFlowNestingLevel; + } + break; + + case 419: +/* Line 1792 of yacc.c */ +#line 2697 "glslang.y" + { + ++parseContext.loopNestingLevel; + ++parseContext.statementNestingLevel; + ++parseContext.controlFlowNestingLevel; + } + break; + + case 420: +/* Line 1792 of yacc.c */ +#line 2702 "glslang.y" + { + if (! parseContext.limits.whileLoops) + parseContext.error((yyvsp[(1) - (8)].lex).loc, "do-while loops not available", "limitation", ""); + + parseContext.boolCheck((yyvsp[(8) - (8)].lex).loc, (yyvsp[(6) - (8)].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); + --parseContext.loopNestingLevel; + --parseContext.statementNestingLevel; + --parseContext.controlFlowNestingLevel; + } + break; + + case 421: +/* Line 1792 of yacc.c */ +#line 2713 "glslang.y" + { + parseContext.symbolTable.push(); + ++parseContext.loopNestingLevel; + ++parseContext.statementNestingLevel; + ++parseContext.controlFlowNestingLevel; + } + break; + + case 422: +/* Line 1792 of yacc.c */ +#line 2719 "glslang.y" + { + 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((yyvsp[(5) - (7)].interm.nodePair).node1), reinterpret_cast((yyvsp[(5) - (7)].interm.nodePair).node2), true, (yyvsp[(1) - (7)].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); + (yyval.interm.intermNode)->getAsAggregate()->setOperator(EOpSequence); + --parseContext.loopNestingLevel; + --parseContext.statementNestingLevel; + --parseContext.controlFlowNestingLevel; + } + break; + + case 423: +/* Line 1792 of yacc.c */ +#line 2734 "glslang.y" + { + (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); + } + break; + + case 424: +/* Line 1792 of yacc.c */ +#line 2737 "glslang.y" + { + (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); + } + break; + + case 425: +/* Line 1792 of yacc.c */ +#line 2743 "glslang.y" + { + (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); + } + break; + + case 426: +/* Line 1792 of yacc.c */ +#line 2746 "glslang.y" + { + (yyval.interm.intermTypedNode) = 0; + } + break; + + case 427: +/* Line 1792 of yacc.c */ +#line 2752 "glslang.y" + { + (yyval.interm.nodePair).node1 = (yyvsp[(1) - (2)].interm.intermTypedNode); + (yyval.interm.nodePair).node2 = 0; + } + break; + + case 428: +/* Line 1792 of yacc.c */ +#line 2756 "glslang.y" + { + (yyval.interm.nodePair).node1 = (yyvsp[(1) - (3)].interm.intermTypedNode); + (yyval.interm.nodePair).node2 = (yyvsp[(3) - (3)].interm.intermTypedNode); + } + break; + + case 429: +/* Line 1792 of yacc.c */ +#line 2763 "glslang.y" + { + 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); + } + break; + + case 430: +/* Line 1792 of yacc.c */ +#line 2768 "glslang.y" + { + 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); + } + break; + + case 431: +/* Line 1792 of yacc.c */ +#line 2773 "glslang.y" + { + (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpReturn, (yyvsp[(1) - (2)].lex).loc); + if (parseContext.currentFunctionType->getBasicType() != EbtVoid) + parseContext.error((yyvsp[(1) - (2)].lex).loc, "non-void function must return a value", "return", ""); + if (parseContext.inMain) + parseContext.postMainReturn = true; + } + break; + + case 432: +/* Line 1792 of yacc.c */ +#line 2780 "glslang.y" + { + (yyval.interm.intermNode) = parseContext.handleReturnValue((yyvsp[(1) - (3)].lex).loc, (yyvsp[(2) - (3)].interm.intermTypedNode)); + } + break; + + case 433: +/* Line 1792 of yacc.c */ +#line 2783 "glslang.y" + { + parseContext.requireStage((yyvsp[(1) - (2)].lex).loc, EShLangFragment, "discard"); + (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpKill, (yyvsp[(1) - (2)].lex).loc); + } + break; + + case 434: +/* Line 1792 of yacc.c */ +#line 2792 "glslang.y" + { + (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); + parseContext.intermediate.setTreeRoot((yyval.interm.intermNode)); + } + break; + + case 435: +/* Line 1792 of yacc.c */ +#line 2796 "glslang.y" + { + (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[(1) - (2)].interm.intermNode), (yyvsp[(2) - (2)].interm.intermNode)); + parseContext.intermediate.setTreeRoot((yyval.interm.intermNode)); + } + break; + + case 436: +/* Line 1792 of yacc.c */ +#line 2803 "glslang.y" + { + (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); + } + break; + + case 437: +/* Line 1792 of yacc.c */ +#line 2806 "glslang.y" + { + (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); + } + break; + + case 438: +/* Line 1792 of yacc.c */ +#line 2812 "glslang.y" + { + (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); + } + break; + + case 439: +/* Line 1792 of yacc.c */ +#line 2816 "glslang.y" + { + // 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.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()); + + // 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); + } + break; + + +/* Line 1792 of yacc.c */ +#line 8088 "glslang_tab.cpp" + default: break; + } + /* User semantic actions sometimes alter yychar, and that requires + that yytoken be updated with the new translation. We take the + approach of translating immediately before every use of yytoken. + One alternative is translating here after every semantic action, + but that translation would be missed if the semantic action invokes + YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or + if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an + incorrect destructor might then be invoked immediately. In the + case of YYERROR or YYBACKUP, subsequent parser actions might lead + to an incorrect destructor call or verbose syntax error message + before the lookahead is translated. */ + YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); + + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + + *++yyvsp = yyval; + + /* 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. */ + + yyn = yyr1[yyn]; + + yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; + if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) + yystate = yytable[yystate]; + else + yystate = yydefgoto[yyn - YYNTOKENS]; + + goto yynewstate; + + +/*------------------------------------. +| yyerrlab -- here on detecting error | +`------------------------------------*/ +yyerrlab: + /* Make sure we have latest lookahead translation. See comments at + user semantic actions for why this is necessary. */ + yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar); + + /* If not already recovering from an error, report this error. */ + if (!yyerrstatus) + { + ++yynerrs; +#if ! YYERROR_VERBOSE + yyerror (pParseContext, YY_("syntax error")); +#else +# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ + yyssp, yytoken) + { + char const *yymsgp = YY_("syntax error"); + int yysyntax_error_status; + yysyntax_error_status = YYSYNTAX_ERROR; + if (yysyntax_error_status == 0) + yymsgp = yymsg; + else if (yysyntax_error_status == 1) + { + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); + yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); + if (!yymsg) + { + yymsg = yymsgbuf; + yymsg_alloc = sizeof yymsgbuf; + yysyntax_error_status = 2; + } + else + { + yysyntax_error_status = YYSYNTAX_ERROR; + yymsgp = yymsg; + } + } + yyerror (pParseContext, yymsgp); + if (yysyntax_error_status == 2) + goto yyexhaustedlab; + } +# undef YYSYNTAX_ERROR +#endif + } + + + + if (yyerrstatus == 3) + { + /* If just tried and failed to reuse lookahead token after an + error, discard it. */ + + if (yychar <= YYEOF) + { + /* Return failure if at end of input. */ + if (yychar == YYEOF) + YYABORT; + } + else + { + yydestruct ("Error: discarding", + yytoken, &yylval, pParseContext); + yychar = YYEMPTY; + } + } + + /* Else will try to reuse lookahead token after shifting the error + token. */ + goto yyerrlab1; + + +/*---------------------------------------------------. +| yyerrorlab -- error raised explicitly by YYERROR. | +`---------------------------------------------------*/ +yyerrorlab: + + /* Pacify compilers like GCC when the user code never invokes + YYERROR and the label yyerrorlab therefore never appears in user + code. */ + if (/*CONSTCOND*/ 0) + goto yyerrorlab; + + /* Do not reclaim the symbols of the rule which action triggered + this YYERROR. */ + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + yystate = *yyssp; + goto yyerrlab1; + + +/*-------------------------------------------------------------. +| yyerrlab1 -- common code for both syntax error and YYERROR. | +`-------------------------------------------------------------*/ +yyerrlab1: + 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; + } + } + + /* Pop the current state because it cannot handle the error token. */ + if (yyssp == yyss) + YYABORT; + + + yydestruct ("Error: popping", + yystos[yystate], yyvsp, pParseContext); + YYPOPSTACK (1); + yystate = *yyssp; + YY_STACK_PRINT (yyss, yyssp); + } + + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + *++yyvsp = yylval; + YY_IGNORE_MAYBE_UNINITIALIZED_END + + + /* Shift the error token. */ + YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); + + yystate = yyn; + goto yynewstate; + + +/*-------------------------------------. +| yyacceptlab -- YYACCEPT comes here. | +`-------------------------------------*/ +yyacceptlab: + yyresult = 0; + goto yyreturn; + +/*-----------------------------------. +| yyabortlab -- YYABORT comes here. | +`-----------------------------------*/ +yyabortlab: + yyresult = 1; + goto yyreturn; + +#if !defined yyoverflow || YYERROR_VERBOSE +/*-------------------------------------------------. +| yyexhaustedlab -- memory exhaustion comes here. | +`-------------------------------------------------*/ +yyexhaustedlab: + yyerror (pParseContext, YY_("memory exhausted")); + yyresult = 2; + /* Fall through. */ +#endif + +yyreturn: + if (yychar != YYEMPTY) + { + /* Make sure we have latest lookahead translation. See comments at + user semantic actions for why this is necessary. */ + yytoken = YYTRANSLATE (yychar); + yydestruct ("Cleanup: discarding lookahead", + yytoken, &yylval, pParseContext); + } + /* Do not reclaim the symbols of the rule which action triggered + this YYABORT or YYACCEPT. */ + YYPOPSTACK (yylen); + YY_STACK_PRINT (yyss, yyssp); + while (yyssp != yyss) + { + yydestruct ("Cleanup: popping", + yystos[*yyssp], yyvsp, pParseContext); + YYPOPSTACK (1); + } +#ifndef yyoverflow + if (yyss != yyssa) + YYSTACK_FREE (yyss); +#endif +#if YYERROR_VERBOSE + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); +#endif + /* Make sure YYID is used. */ + return YYID (yyresult); +} + + +/* Line 2055 of yacc.c */ +#line 2833 "glslang.y" + diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp.h b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp.h new file mode 100644 index 0000000..b6d2799 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp.h @@ -0,0 +1,400 @@ +/* A Bison parser, made by GNU Bison 2.7. */ + +/* Bison interface for Yacc-like parsers in C + + Copyright (C) 1984, 1989-1990, 2000-2012 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 . */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + 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 YYDEBUG +# define YYDEBUG 1 +#endif +#if YYDEBUG +extern int yydebug; +#endif + +/* Tokens. */ +#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 + }; +#endif + + +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef union YYSTYPE +{ +/* Line 2058 of yacc.c */ +#line 66 "glslang.y" + + struct { + glslang::TSourceLoc loc; + union { + glslang::TString *string; + int i; + unsigned int u; + long long i64; + unsigned long long u64; + bool b; + double d; + }; + glslang::TSymbol* symbol; + } lex; + struct { + glslang::TSourceLoc loc; + glslang::TOperator op; + union { + TIntermNode* intermNode; + glslang::TIntermNodePair nodePair; + glslang::TIntermTyped* intermTypedNode; + }; + union { + glslang::TPublicType type; + glslang::TFunction* function; + glslang::TParameter param; + glslang::TTypeLoc typeLine; + glslang::TTypeList* typeList; + glslang::TArraySizes* arraySizes; + glslang::TIdentifierList* identifierList; + }; + } interm; + + +/* Line 2058 of yacc.c */ +#line 379 "glslang_tab.cpp.h" +} YYSTYPE; +# 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 */ diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/intermOut.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/intermOut.cpp new file mode 100644 index 0000000..b8a6969 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/intermOut.cpp @@ -0,0 +1,950 @@ +// +// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +// Copyright (C) 2012-2016 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. +// + +#include "localintermediate.h" +#include "../Include/InfoSink.h" + +#ifdef _MSC_VER +#include +#else +#include +#endif + +namespace { + +bool is_positive_infinity(double x) { +#ifdef _MSC_VER + return _fpclass(x) == _FPCLASS_PINF; +#else + return std::isinf(x) && (x >= 0); +#endif +} + +} + +namespace glslang { + +// +// Two purposes: +// 1. Show an example of how to iterate tree. Functions can +// also directly call Traverse() on children themselves to +// have finer grained control over the process than shown here. +// See the last function for how to get started. +// 2. Print out a text based description of the tree. +// + +// +// Use this class to carry along data from node to node in +// the traversal +// +class TOutputTraverser : public TIntermTraverser { +public: + TOutputTraverser(TInfoSink& i) : infoSink(i) { } + + virtual bool visitBinary(TVisit, TIntermBinary* node); + virtual bool visitUnary(TVisit, TIntermUnary* node); + virtual bool visitAggregate(TVisit, TIntermAggregate* node); + virtual bool visitSelection(TVisit, TIntermSelection* node); + virtual void visitConstantUnion(TIntermConstantUnion* node); + virtual void visitSymbol(TIntermSymbol* node); + virtual bool visitLoop(TVisit, TIntermLoop* node); + virtual bool visitBranch(TVisit, TIntermBranch* node); + virtual bool visitSwitch(TVisit, TIntermSwitch* node); + + TInfoSink& infoSink; +protected: + TOutputTraverser(TOutputTraverser&); + TOutputTraverser& operator=(TOutputTraverser&); +}; + +// +// Helper functions for printing, not part of traversing. +// + +static void OutputTreeText(TInfoSink& infoSink, const TIntermNode* node, const int depth) +{ + int i; + + infoSink.debug << node->getLoc().string << ":"; + if (node->getLoc().line) + infoSink.debug << node->getLoc().line; + else + infoSink.debug << "? "; + + for (i = 0; i < depth; ++i) + infoSink.debug << " "; +} + +// +// The rest of the file are the traversal functions. The last one +// is the one that starts the traversal. +// +// Return true from interior nodes to have the external traversal +// continue on to children. If you process children yourself, +// return false. +// + +bool TOutputTraverser::visitBinary(TVisit /* visit */, TIntermBinary* node) +{ + TInfoSink& out = infoSink; + + OutputTreeText(out, node, depth); + + switch (node->getOp()) { + case EOpAssign: out.debug << "move second child to first child"; break; + case EOpAddAssign: out.debug << "add second child into first child"; break; + case EOpSubAssign: out.debug << "subtract second child into first child"; break; + case EOpMulAssign: out.debug << "multiply second child into first child"; break; + case EOpVectorTimesMatrixAssign: out.debug << "matrix mult second child into first child"; break; + case EOpVectorTimesScalarAssign: out.debug << "vector scale second child into first child"; break; + case EOpMatrixTimesScalarAssign: out.debug << "matrix scale second child into first child"; break; + case EOpMatrixTimesMatrixAssign: out.debug << "matrix mult second child into first child"; break; + case EOpDivAssign: out.debug << "divide second child into first child"; break; + case EOpModAssign: out.debug << "mod second child into first child"; break; + case EOpAndAssign: out.debug << "and second child into first child"; break; + case EOpInclusiveOrAssign: out.debug << "or second child into first child"; break; + case EOpExclusiveOrAssign: out.debug << "exclusive or second child into first child"; break; + case EOpLeftShiftAssign: out.debug << "left shift second child into first child"; break; + case EOpRightShiftAssign: out.debug << "right shift second child into first child"; break; + + case EOpIndexDirect: out.debug << "direct index"; break; + case EOpIndexIndirect: out.debug << "indirect index"; break; + case EOpIndexDirectStruct: + out.debug << (*node->getLeft()->getType().getStruct())[node->getRight()->getAsConstantUnion()->getConstArray()[0].getIConst()].type->getFieldName(); + out.debug << ": direct index for structure"; break; + case EOpVectorSwizzle: out.debug << "vector swizzle"; break; + case EOpMatrixSwizzle: out.debug << "matrix swizzle"; break; + + case EOpAdd: out.debug << "add"; break; + case EOpSub: out.debug << "subtract"; break; + case EOpMul: out.debug << "component-wise multiply"; break; + case EOpDiv: out.debug << "divide"; break; + case EOpMod: out.debug << "mod"; break; + case EOpRightShift: out.debug << "right-shift"; break; + case EOpLeftShift: out.debug << "left-shift"; break; + case EOpAnd: out.debug << "bitwise and"; break; + case EOpInclusiveOr: out.debug << "inclusive-or"; break; + case EOpExclusiveOr: out.debug << "exclusive-or"; break; + case EOpEqual: out.debug << "Compare Equal"; break; + case EOpNotEqual: out.debug << "Compare Not Equal"; break; + case EOpLessThan: out.debug << "Compare Less Than"; break; + case EOpGreaterThan: out.debug << "Compare Greater Than"; break; + case EOpLessThanEqual: out.debug << "Compare Less Than or Equal"; break; + case EOpGreaterThanEqual: out.debug << "Compare Greater Than or Equal"; break; + case EOpVectorEqual: out.debug << "Equal"; break; + case EOpVectorNotEqual: out.debug << "NotEqual"; break; + + case EOpVectorTimesScalar: out.debug << "vector-scale"; break; + case EOpVectorTimesMatrix: out.debug << "vector-times-matrix"; break; + case EOpMatrixTimesVector: out.debug << "matrix-times-vector"; break; + case EOpMatrixTimesScalar: out.debug << "matrix-scale"; break; + case EOpMatrixTimesMatrix: out.debug << "matrix-multiply"; break; + + case EOpLogicalOr: out.debug << "logical-or"; break; + case EOpLogicalXor: out.debug << "logical-xor"; break; + case EOpLogicalAnd: out.debug << "logical-and"; break; + default: out.debug << ""; + } + + out.debug << " (" << node->getCompleteString() << ")"; + + out.debug << "\n"; + + return true; +} + +bool TOutputTraverser::visitUnary(TVisit /* visit */, TIntermUnary* node) +{ + TInfoSink& out = infoSink; + + OutputTreeText(out, node, depth); + + switch (node->getOp()) { + case EOpNegative: out.debug << "Negate value"; break; + case EOpVectorLogicalNot: + case EOpLogicalNot: out.debug << "Negate conditional"; break; + case EOpBitwiseNot: out.debug << "Bitwise not"; break; + + case EOpPostIncrement: out.debug << "Post-Increment"; break; + case EOpPostDecrement: out.debug << "Post-Decrement"; break; + case EOpPreIncrement: out.debug << "Pre-Increment"; break; + case EOpPreDecrement: out.debug << "Pre-Decrement"; break; + + case EOpConvIntToBool: out.debug << "Convert int to bool"; break; + case EOpConvUintToBool: out.debug << "Convert uint to bool"; break; + case EOpConvFloatToBool: out.debug << "Convert float to bool"; break; + case EOpConvDoubleToBool: out.debug << "Convert double to bool"; break; + case EOpConvInt64ToBool: out.debug << "Convert int64 to bool"; break; + case EOpConvUint64ToBool: out.debug << "Convert uint64 to bool"; break; + case EOpConvIntToFloat: out.debug << "Convert int to float"; break; + case EOpConvUintToFloat: out.debug << "Convert uint to float"; break; + case EOpConvDoubleToFloat: out.debug << "Convert double to float"; break; + case EOpConvInt64ToFloat: out.debug << "Convert int64 to float"; break; + case EOpConvUint64ToFloat: out.debug << "Convert uint64 to float"; break; + case EOpConvBoolToFloat: out.debug << "Convert bool to float"; break; + case EOpConvUintToInt: out.debug << "Convert uint to int"; break; + case EOpConvFloatToInt: out.debug << "Convert float to int"; break; + case EOpConvDoubleToInt: out.debug << "Convert double to int"; break; + case EOpConvBoolToInt: out.debug << "Convert bool to int"; break; + case EOpConvInt64ToInt: out.debug << "Convert int64 to int"; break; + case EOpConvUint64ToInt: out.debug << "Convert uint64 to int"; break; + case EOpConvIntToUint: out.debug << "Convert int to uint"; break; + case EOpConvFloatToUint: out.debug << "Convert float to uint"; break; + case EOpConvDoubleToUint: out.debug << "Convert double to uint"; break; + case EOpConvBoolToUint: out.debug << "Convert bool to uint"; break; + case EOpConvInt64ToUint: out.debug << "Convert int64 to uint"; break; + case EOpConvUint64ToUint: out.debug << "Convert uint64 to uint"; break; + case EOpConvIntToDouble: out.debug << "Convert int to double"; break; + case EOpConvUintToDouble: out.debug << "Convert uint to double"; break; + case EOpConvFloatToDouble: out.debug << "Convert float to double"; break; + case EOpConvBoolToDouble: out.debug << "Convert bool to double"; break; + case EOpConvInt64ToDouble: out.debug << "Convert int64 to double"; break; + case EOpConvUint64ToDouble: out.debug << "Convert uint64 to double"; break; + case EOpConvBoolToInt64: out.debug << "Convert bool to int64"; break; + case EOpConvIntToInt64: out.debug << "Convert int to int64"; break; + case EOpConvUintToInt64: out.debug << "Convert uint to int64"; break; + case EOpConvFloatToInt64: out.debug << "Convert float to int64"; break; + case EOpConvDoubleToInt64: out.debug << "Convert double to int64"; break; + case EOpConvUint64ToInt64: out.debug << "Convert uint64 to int64"; break; + case EOpConvBoolToUint64: out.debug << "Convert bool to uint64"; break; + case EOpConvIntToUint64: out.debug << "Convert int to uint64"; break; + case EOpConvUintToUint64: out.debug << "Convert uint to uint64"; break; + case EOpConvFloatToUint64: out.debug << "Convert float to uint64"; break; + case EOpConvDoubleToUint64: out.debug << "Convert double to uint64"; break; + case EOpConvInt64ToUint64: out.debug << "Convert uint64 to uint64"; break; + + case EOpRadians: out.debug << "radians"; break; + case EOpDegrees: out.debug << "degrees"; break; + case EOpSin: out.debug << "sine"; break; + case EOpCos: out.debug << "cosine"; break; + case EOpTan: out.debug << "tangent"; break; + case EOpAsin: out.debug << "arc sine"; break; + case EOpAcos: out.debug << "arc cosine"; break; + case EOpAtan: out.debug << "arc tangent"; break; + case EOpSinh: out.debug << "hyp. sine"; break; + case EOpCosh: out.debug << "hyp. cosine"; break; + case EOpTanh: out.debug << "hyp. tangent"; break; + case EOpAsinh: out.debug << "arc hyp. sine"; break; + case EOpAcosh: out.debug << "arc hyp. cosine"; break; + case EOpAtanh: out.debug << "arc hyp. tangent"; break; + + case EOpExp: out.debug << "exp"; break; + case EOpLog: out.debug << "log"; break; + case EOpExp2: out.debug << "exp2"; break; + case EOpLog2: out.debug << "log2"; break; + case EOpSqrt: out.debug << "sqrt"; break; + case EOpInverseSqrt: out.debug << "inverse sqrt"; break; + + case EOpAbs: out.debug << "Absolute value"; break; + case EOpSign: out.debug << "Sign"; break; + case EOpFloor: out.debug << "Floor"; break; + case EOpTrunc: out.debug << "trunc"; break; + case EOpRound: out.debug << "round"; break; + case EOpRoundEven: out.debug << "roundEven"; break; + case EOpCeil: out.debug << "Ceiling"; break; + case EOpFract: out.debug << "Fraction"; break; + + case EOpIsNan: out.debug << "isnan"; break; + case EOpIsInf: out.debug << "isinf"; break; + + case EOpFloatBitsToInt: out.debug << "floatBitsToInt"; break; + case EOpFloatBitsToUint:out.debug << "floatBitsToUint"; break; + case EOpIntBitsToFloat: out.debug << "intBitsToFloat"; break; + case EOpUintBitsToFloat:out.debug << "uintBitsToFloat"; break; + case EOpDoubleBitsToInt64: out.debug << "doubleBitsToInt64"; break; + case EOpDoubleBitsToUint64: out.debug << "doubleBitsToUint64"; break; + case EOpInt64BitsToDouble: out.debug << "int64BitsToDouble"; break; + case EOpUint64BitsToDouble: out.debug << "uint64BitsToDouble"; break; + case EOpPackSnorm2x16: out.debug << "packSnorm2x16"; break; + case EOpUnpackSnorm2x16:out.debug << "unpackSnorm2x16"; break; + case EOpPackUnorm2x16: out.debug << "packUnorm2x16"; break; + case EOpUnpackUnorm2x16:out.debug << "unpackUnorm2x16"; break; + case EOpPackHalf2x16: out.debug << "packHalf2x16"; break; + case EOpUnpackHalf2x16: out.debug << "unpackHalf2x16"; break; + + case EOpPackSnorm4x8: out.debug << "PackSnorm4x8"; break; + case EOpUnpackSnorm4x8: out.debug << "UnpackSnorm4x8"; break; + case EOpPackUnorm4x8: out.debug << "PackUnorm4x8"; break; + case EOpUnpackUnorm4x8: out.debug << "UnpackUnorm4x8"; break; + case EOpPackDouble2x32: out.debug << "PackDouble2x32"; break; + case EOpUnpackDouble2x32: out.debug << "UnpackDouble2x32"; break; + + case EOpPackInt2x32: out.debug << "packInt2x32"; break; + case EOpUnpackInt2x32: out.debug << "unpackInt2x32"; break; + case EOpPackUint2x32: out.debug << "packUint2x32"; break; + case EOpUnpackUint2x32: out.debug << "unpackUint2x32"; break; + +#ifdef AMD_EXTENSIONS + case EOpPackFloat2x16: out.debug << "packFloat2x16"; break; + case EOpUnpackFloat2x16: out.debug << "unpackFloat2x16"; break; +#endif + + case EOpLength: out.debug << "length"; break; + case EOpNormalize: out.debug << "normalize"; break; + case EOpDPdx: out.debug << "dPdx"; break; + case EOpDPdy: out.debug << "dPdy"; break; + case EOpFwidth: out.debug << "fwidth"; break; + case EOpDPdxFine: out.debug << "dPdxFine"; break; + case EOpDPdyFine: out.debug << "dPdyFine"; break; + case EOpFwidthFine: out.debug << "fwidthFine"; break; + case EOpDPdxCoarse: out.debug << "dPdxCoarse"; break; + case EOpDPdyCoarse: out.debug << "dPdyCoarse"; break; + case EOpFwidthCoarse: out.debug << "fwidthCoarse"; break; + + case EOpInterpolateAtCentroid: out.debug << "interpolateAtCentroid"; break; + + case EOpDeterminant: out.debug << "determinant"; break; + case EOpMatrixInverse: out.debug << "inverse"; break; + case EOpTranspose: out.debug << "transpose"; break; + + case EOpAny: out.debug << "any"; break; + case EOpAll: out.debug << "all"; break; + + case EOpArrayLength: out.debug << "array length"; break; + + case EOpEmitStreamVertex: out.debug << "EmitStreamVertex"; break; + case EOpEndStreamPrimitive: out.debug << "EndStreamPrimitive"; break; + + case EOpAtomicCounterIncrement: out.debug << "AtomicCounterIncrement";break; + case EOpAtomicCounterDecrement: out.debug << "AtomicCounterDecrement";break; + case EOpAtomicCounter: out.debug << "AtomicCounter"; break; + + case EOpTextureQuerySize: out.debug << "textureSize"; break; + case EOpTextureQueryLod: out.debug << "textureQueryLod"; break; + case EOpTextureQueryLevels: out.debug << "textureQueryLevels"; break; + case EOpTextureQuerySamples: out.debug << "textureSamples"; break; + case EOpImageQuerySize: out.debug << "imageQuerySize"; break; + case EOpImageQuerySamples: out.debug << "imageQuerySamples"; break; + case EOpImageLoad: out.debug << "imageLoad"; break; + + case EOpBitFieldReverse: out.debug << "bitFieldReverse"; break; + case EOpBitCount: out.debug << "bitCount"; break; + case EOpFindLSB: out.debug << "findLSB"; break; + case EOpFindMSB: out.debug << "findMSB"; break; + + case EOpNoise: out.debug << "noise"; break; + + case EOpBallot: out.debug << "ballot"; break; + case EOpReadFirstInvocation: out.debug << "readFirstInvocation"; break; + + case EOpAnyInvocation: out.debug << "anyInvocation"; break; + case EOpAllInvocations: out.debug << "allInvocations"; break; + case EOpAllInvocationsEqual: out.debug << "allInvocationsEqual"; break; + + case EOpClip: out.debug << "clip"; break; + case EOpIsFinite: out.debug << "isfinite"; break; + case EOpLog10: out.debug << "log10"; break; + case EOpRcp: out.debug << "rcp"; break; + case EOpSaturate: out.debug << "saturate"; break; + +#ifdef AMD_EXTENSIONS + case EOpMinInvocations: out.debug << "minInvocations"; break; + case EOpMaxInvocations: out.debug << "maxInvocations"; break; + case EOpAddInvocations: out.debug << "addInvocations"; break; + case EOpMinInvocationsNonUniform: out.debug << "minInvocationsNonUniform"; break; + case EOpMaxInvocationsNonUniform: out.debug << "maxInvocationsNonUniform"; break; + case EOpAddInvocationsNonUniform: out.debug << "addInvocationsNonUniform"; break; + + case EOpMinInvocationsInclusiveScan: out.debug << "minInvocationsInclusiveScan"; break; + case EOpMaxInvocationsInclusiveScan: out.debug << "maxInvocationsInclusiveScan"; break; + case EOpAddInvocationsInclusiveScan: out.debug << "addInvocationsInclusiveScan"; break; + case EOpMinInvocationsInclusiveScanNonUniform: out.debug << "minInvocationsInclusiveScanNonUniform"; break; + case EOpMaxInvocationsInclusiveScanNonUniform: out.debug << "maxInvocationsInclusiveScanNonUniform"; break; + case EOpAddInvocationsInclusiveScanNonUniform: out.debug << "addInvocationsInclusiveScanNonUniform"; break; + + case EOpMinInvocationsExclusiveScan: out.debug << "minInvocationsExclusiveScan"; break; + case EOpMaxInvocationsExclusiveScan: out.debug << "maxInvocationsExclusiveScan"; break; + case EOpAddInvocationsExclusiveScan: out.debug << "addInvocationsExclusiveScan"; break; + case EOpMinInvocationsExclusiveScanNonUniform: out.debug << "minInvocationsExclusiveScanNonUniform"; break; + case EOpMaxInvocationsExclusiveScanNonUniform: out.debug << "maxInvocationsExclusiveScanNonUniform"; break; + case EOpAddInvocationsExclusiveScanNonUniform: out.debug << "addInvocationsExclusiveScanNonUniform"; break; + + case EOpMbcnt: out.debug << "mbcnt"; break; + + case EOpCubeFaceIndex: out.debug << "cubeFaceIndex"; break; + case EOpCubeFaceCoord: out.debug << "cubeFaceCoord"; break; + + case EOpConvBoolToFloat16: out.debug << "Convert bool to float16"; break; + case EOpConvIntToFloat16: out.debug << "Convert int to float16"; break; + case EOpConvUintToFloat16: out.debug << "Convert uint to float16"; break; + case EOpConvFloatToFloat16: out.debug << "Convert float to float16"; break; + case EOpConvDoubleToFloat16: out.debug << "Convert double to float16"; break; + case EOpConvInt64ToFloat16: out.debug << "Convert int64 to float16"; break; + case EOpConvUint64ToFloat16: out.debug << "Convert uint64 to float16"; break; + case EOpConvFloat16ToBool: out.debug << "Convert float16 to bool"; break; + case EOpConvFloat16ToInt: out.debug << "Convert float16 to int"; break; + case EOpConvFloat16ToUint: out.debug << "Convert float16 to uint"; break; + case EOpConvFloat16ToFloat: out.debug << "Convert float16 to float"; break; + 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; +#endif + + default: out.debug.message(EPrefixError, "Bad unary op"); + } + + out.debug << " (" << node->getCompleteString() << ")"; + + out.debug << "\n"; + + return true; +} + +bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node) +{ + TInfoSink& out = infoSink; + + if (node->getOp() == EOpNull) { + out.debug.message(EPrefixError, "node is still EOpNull!"); + return true; + } + + OutputTreeText(out, node, depth); + + switch (node->getOp()) { + case EOpSequence: out.debug << "Sequence\n"; return true; + case EOpLinkerObjects: out.debug << "Linker Objects\n"; return true; + case EOpComma: out.debug << "Comma"; break; + case EOpFunction: out.debug << "Function Definition: " << node->getName(); break; + case EOpFunctionCall: out.debug << "Function Call: " << node->getName(); break; + case EOpParameters: out.debug << "Function Parameters: "; break; + + 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 EOpConstructBool: out.debug << "Construct bool"; break; + case EOpConstructBVec2: out.debug << "Construct bvec2"; break; + case EOpConstructBVec3: out.debug << "Construct bvec3"; break; + case EOpConstructBVec4: out.debug << "Construct bvec4"; break; + case EOpConstructInt: out.debug << "Construct int"; break; + case EOpConstructIVec2: out.debug << "Construct ivec2"; break; + case EOpConstructIVec3: out.debug << "Construct ivec3"; break; + case EOpConstructIVec4: out.debug << "Construct ivec4"; break; + case EOpConstructUint: out.debug << "Construct uint"; break; + case EOpConstructUVec2: out.debug << "Construct uvec2"; break; + case EOpConstructUVec3: out.debug << "Construct uvec3"; break; + case EOpConstructUVec4: out.debug << "Construct uvec4"; break; + case EOpConstructInt64: out.debug << "Construct int64_t"; break; + case EOpConstructI64Vec2: out.debug << "Construct i64vec2"; break; + case EOpConstructI64Vec3: out.debug << "Construct i64vec3"; break; + case EOpConstructI64Vec4: out.debug << "Construct i64vec4"; break; + case EOpConstructUint64: out.debug << "Construct uint64_t"; break; + case EOpConstructU64Vec2: out.debug << "Construct u64vec2"; break; + case EOpConstructU64Vec3: out.debug << "Construct u64vec3"; break; + case EOpConstructU64Vec4: out.debug << "Construct u64vec4"; break; + case EOpConstructMat2x2: out.debug << "Construct mat2"; break; + case EOpConstructMat2x3: out.debug << "Construct mat2x3"; break; + case EOpConstructMat2x4: out.debug << "Construct mat2x4"; break; + case EOpConstructMat3x2: out.debug << "Construct mat3x2"; break; + case EOpConstructMat3x3: out.debug << "Construct mat3"; break; + case EOpConstructMat3x4: out.debug << "Construct mat3x4"; break; + case EOpConstructMat4x2: out.debug << "Construct mat4x2"; break; + case EOpConstructMat4x3: out.debug << "Construct mat4x3"; break; + case EOpConstructMat4x4: out.debug << "Construct mat4"; break; + case EOpConstructDMat2x2: out.debug << "Construct dmat2"; break; + case EOpConstructDMat2x3: out.debug << "Construct dmat2x3"; break; + case EOpConstructDMat2x4: out.debug << "Construct dmat2x4"; break; + case EOpConstructDMat3x2: out.debug << "Construct dmat3x2"; break; + case EOpConstructDMat3x3: out.debug << "Construct dmat3"; break; + case EOpConstructDMat3x4: out.debug << "Construct dmat3x4"; break; + case EOpConstructDMat4x2: out.debug << "Construct dmat4x2"; break; + case EOpConstructDMat4x3: out.debug << "Construct dmat4x3"; break; + case EOpConstructDMat4x4: out.debug << "Construct dmat4"; break; +#ifdef AMD_EXTENSIONS + case EOpConstructFloat16: out.debug << "Construct float16_t"; break; + case EOpConstructF16Vec2: out.debug << "Construct f16vec2"; break; + case EOpConstructF16Vec3: out.debug << "Construct f16vec3"; break; + case EOpConstructF16Vec4: out.debug << "Construct f16vec4"; break; + case EOpConstructF16Mat2x2: out.debug << "Construct f16mat2"; break; + case EOpConstructF16Mat2x3: out.debug << "Construct f16mat2x3"; break; + case EOpConstructF16Mat2x4: out.debug << "Construct f16mat2x4"; break; + case EOpConstructF16Mat3x2: out.debug << "Construct f16mat3x2"; break; + case EOpConstructF16Mat3x3: out.debug << "Construct f16mat3"; break; + case EOpConstructF16Mat3x4: out.debug << "Construct f16mat3x4"; break; + case EOpConstructF16Mat4x2: out.debug << "Construct f16mat4x2"; break; + case EOpConstructF16Mat4x3: out.debug << "Construct f16mat4x3"; break; + case EOpConstructF16Mat4x4: out.debug << "Construct f16mat4"; break; +#endif + case EOpConstructStruct: out.debug << "Construct structure"; break; + case EOpConstructTextureSampler: out.debug << "Construct combined texture-sampler"; break; + + case EOpLessThan: out.debug << "Compare Less Than"; break; + case EOpGreaterThan: out.debug << "Compare Greater Than"; break; + case EOpLessThanEqual: out.debug << "Compare Less Than or Equal"; break; + case EOpGreaterThanEqual: out.debug << "Compare Greater Than or Equal"; break; + case EOpVectorEqual: out.debug << "Equal"; break; + case EOpVectorNotEqual: out.debug << "NotEqual"; break; + + case EOpMod: out.debug << "mod"; break; + case EOpModf: out.debug << "modf"; break; + case EOpPow: out.debug << "pow"; break; + + case EOpAtan: out.debug << "arc tangent"; break; + + case EOpMin: out.debug << "min"; break; + case EOpMax: out.debug << "max"; break; + case EOpClamp: out.debug << "clamp"; break; + case EOpMix: out.debug << "mix"; break; + case EOpStep: out.debug << "step"; break; + case EOpSmoothStep: out.debug << "smoothstep"; break; + + case EOpDistance: out.debug << "distance"; break; + case EOpDot: out.debug << "dot-product"; break; + case EOpCross: out.debug << "cross-product"; break; + case EOpFaceForward: out.debug << "face-forward"; break; + case EOpReflect: out.debug << "reflect"; break; + case EOpRefract: out.debug << "refract"; break; + case EOpMul: out.debug << "component-wise multiply"; break; + case EOpOuterProduct: out.debug << "outer product"; break; + + case EOpEmitVertex: out.debug << "EmitVertex"; break; + case EOpEndPrimitive: out.debug << "EndPrimitive"; break; + + case EOpBarrier: out.debug << "Barrier"; break; + case EOpMemoryBarrier: out.debug << "MemoryBarrier"; break; + case EOpMemoryBarrierAtomicCounter: out.debug << "MemoryBarrierAtomicCounter"; break; + case EOpMemoryBarrierBuffer: out.debug << "MemoryBarrierBuffer"; break; + case EOpMemoryBarrierImage: out.debug << "MemoryBarrierImage"; break; + case EOpMemoryBarrierShared: out.debug << "MemoryBarrierShared"; break; + case EOpGroupMemoryBarrier: out.debug << "GroupMemoryBarrier"; break; + + case EOpReadInvocation: out.debug << "readInvocation"; break; + +#ifdef AMD_EXTENSIONS + case EOpSwizzleInvocations: out.debug << "swizzleInvocations"; break; + case EOpSwizzleInvocationsMasked: out.debug << "swizzleInvocationsMasked"; break; + case EOpWriteInvocation: out.debug << "writeInvocation"; break; + + case EOpMin3: out.debug << "min3"; break; + case EOpMax3: out.debug << "max3"; break; + case EOpMid3: out.debug << "mid3"; break; + + case EOpTime: out.debug << "time"; break; +#endif + + case EOpAtomicAdd: out.debug << "AtomicAdd"; break; + case EOpAtomicMin: out.debug << "AtomicMin"; break; + case EOpAtomicMax: out.debug << "AtomicMax"; break; + case EOpAtomicAnd: out.debug << "AtomicAnd"; break; + case EOpAtomicOr: out.debug << "AtomicOr"; break; + case EOpAtomicXor: out.debug << "AtomicXor"; break; + case EOpAtomicExchange: out.debug << "AtomicExchange"; break; + case EOpAtomicCompSwap: out.debug << "AtomicCompSwap"; break; + + case EOpImageQuerySize: out.debug << "imageQuerySize"; break; + case EOpImageQuerySamples: out.debug << "imageQuerySamples"; break; + case EOpImageLoad: out.debug << "imageLoad"; break; + case EOpImageStore: out.debug << "imageStore"; break; + case EOpImageAtomicAdd: out.debug << "imageAtomicAdd"; break; + case EOpImageAtomicMin: out.debug << "imageAtomicMin"; break; + case EOpImageAtomicMax: out.debug << "imageAtomicMax"; break; + case EOpImageAtomicAnd: out.debug << "imageAtomicAnd"; break; + case EOpImageAtomicOr: out.debug << "imageAtomicOr"; break; + case EOpImageAtomicXor: out.debug << "imageAtomicXor"; break; + case EOpImageAtomicExchange: out.debug << "imageAtomicExchange"; break; + case EOpImageAtomicCompSwap: out.debug << "imageAtomicCompSwap"; break; + + case EOpTextureQuerySize: out.debug << "textureSize"; break; + case EOpTextureQueryLod: out.debug << "textureQueryLod"; break; + case EOpTextureQueryLevels: out.debug << "textureQueryLevels"; break; + case EOpTextureQuerySamples: out.debug << "textureSamples"; break; + case EOpTexture: out.debug << "texture"; break; + case EOpTextureProj: out.debug << "textureProj"; break; + case EOpTextureLod: out.debug << "textureLod"; break; + case EOpTextureOffset: out.debug << "textureOffset"; break; + case EOpTextureFetch: out.debug << "textureFetch"; break; + case EOpTextureFetchOffset: out.debug << "textureFetchOffset"; break; + case EOpTextureProjOffset: out.debug << "textureProjOffset"; break; + case EOpTextureLodOffset: out.debug << "textureLodOffset"; break; + case EOpTextureProjLod: out.debug << "textureProjLod"; break; + case EOpTextureProjLodOffset: out.debug << "textureProjLodOffset"; break; + case EOpTextureGrad: out.debug << "textureGrad"; break; + case EOpTextureGradOffset: out.debug << "textureGradOffset"; break; + case EOpTextureProjGrad: out.debug << "textureProjGrad"; break; + case EOpTextureProjGradOffset: out.debug << "textureProjGradOffset"; break; + case EOpTextureGather: out.debug << "textureGather"; break; + case EOpTextureGatherOffset: out.debug << "textureGatherOffset"; break; + case EOpTextureGatherOffsets: out.debug << "textureGatherOffsets"; break; + + case EOpAddCarry: out.debug << "addCarry"; break; + case EOpSubBorrow: out.debug << "subBorrow"; break; + case EOpUMulExtended: out.debug << "uMulExtended"; break; + case EOpIMulExtended: out.debug << "iMulExtended"; break; + case EOpBitfieldExtract: out.debug << "bitfieldExtract"; break; + case EOpBitfieldInsert: out.debug << "bitfieldInsert"; break; + + case EOpFma: out.debug << "fma"; break; + case EOpFrexp: out.debug << "frexp"; break; + case EOpLdexp: out.debug << "ldexp"; break; + + case EOpInterpolateAtSample: out.debug << "interpolateAtSample"; break; + case EOpInterpolateAtOffset: out.debug << "interpolateAtOffset"; break; +#ifdef AMD_EXTENSIONS + case EOpInterpolateAtVertex: out.debug << "interpolateAtVertex"; break; +#endif + + case EOpSinCos: out.debug << "sincos"; break; + case EOpGenMul: out.debug << "mul"; break; + + case EOpAllMemoryBarrierWithGroupSync: out.debug << "AllMemoryBarrierWithGroupSync"; break; + case EOpGroupMemoryBarrierWithGroupSync: out.debug << "GroupMemoryBarrierWithGroupSync"; break; + case EOpWorkgroupMemoryBarrier: out.debug << "WorkgroupMemoryBarrier"; break; + case EOpWorkgroupMemoryBarrierWithGroupSync: out.debug << "WorkgroupMemoryBarrierWithGroupSync"; break; + + default: out.debug.message(EPrefixError, "Bad aggregation op"); + } + + if (node->getOp() != EOpSequence && node->getOp() != EOpParameters) + out.debug << " (" << node->getCompleteString() << ")"; + + out.debug << "\n"; + + return true; +} + +bool TOutputTraverser::visitSelection(TVisit /* visit */, TIntermSelection* node) +{ + TInfoSink& out = infoSink; + + OutputTreeText(out, node, depth); + + out.debug << "Test condition and select"; + out.debug << " (" << node->getCompleteString() << ")\n"; + + ++depth; + + OutputTreeText(out, node, depth); + out.debug << "Condition\n"; + node->getCondition()->traverse(this); + + OutputTreeText(out, node, depth); + if (node->getTrueBlock()) { + out.debug << "true case\n"; + node->getTrueBlock()->traverse(this); + } else + out.debug << "true case is null\n"; + + if (node->getFalseBlock()) { + OutputTreeText(out, node, depth); + out.debug << "false case\n"; + node->getFalseBlock()->traverse(this); + } + + --depth; + + return false; +} + +static void OutputConstantUnion(TInfoSink& out, const TIntermTyped* node, const TConstUnionArray& constUnion, int depth) +{ + int size = node->getType().computeNumComponents(); + + for (int i = 0; i < size; i++) { + OutputTreeText(out, node, depth); + switch (constUnion[i].getType()) { + case EbtBool: + if (constUnion[i].getBConst()) + out.debug << "true"; + else + out.debug << "false"; + + out.debug << " (" << "const bool" << ")"; + + out.debug << "\n"; + break; + case EbtFloat: + case EbtDouble: +#ifdef AMD_EXTENSIONS + case EbtFloat16: +#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"; + else { + const int maxSize = 300; + char buf[maxSize]; + snprintf(buf, maxSize, "%f", value); + + out.debug << buf << "\n"; + } + } + break; + case EbtInt: + { + const int maxSize = 300; + char buf[maxSize]; + snprintf(buf, maxSize, "%d (%s)", constUnion[i].getIConst(), "const int"); + + out.debug << buf << "\n"; + } + break; + case EbtUint: + { + const int maxSize = 300; + char buf[maxSize]; + snprintf(buf, maxSize, "%u (%s)", constUnion[i].getUConst(), "const uint"); + + out.debug << buf << "\n"; + } + break; + case EbtInt64: + { + const int maxSize = 300; + char buf[maxSize]; + snprintf(buf, maxSize, "%lld (%s)", constUnion[i].getI64Const(), "const int64_t"); + + out.debug << buf << "\n"; + } + break; + case EbtUint64: + { + const int maxSize = 300; + char buf[maxSize]; + snprintf(buf, maxSize, "%llu (%s)", constUnion[i].getU64Const(), "const uint64_t"); + + out.debug << buf << "\n"; + } + break; + default: + out.info.message(EPrefixInternalError, "Unknown constant", node->getLoc()); + break; + } + } +} + +void TOutputTraverser::visitConstantUnion(TIntermConstantUnion* node) +{ + OutputTreeText(infoSink, node, depth); + infoSink.debug << "Constant:\n"; + + OutputConstantUnion(infoSink, node, node->getConstArray(), depth + 1); +} + +void TOutputTraverser::visitSymbol(TIntermSymbol* node) +{ + OutputTreeText(infoSink, node, depth); + + infoSink.debug << "'" << node->getName() << "' (" << node->getCompleteString() << ")\n"; + + if (! node->getConstArray().empty()) + OutputConstantUnion(infoSink, node, node->getConstArray(), depth + 1); + else if (node->getConstSubtree()) { + incrementDepth(node); + node->getConstSubtree()->traverse(this); + decrementDepth(); + } +} + +bool TOutputTraverser::visitLoop(TVisit /* visit */, TIntermLoop* node) +{ + TInfoSink& out = infoSink; + + OutputTreeText(out, node, depth); + + out.debug << "Loop with condition "; + if (! node->testFirst()) + out.debug << "not "; + out.debug << "tested first\n"; + + ++depth; + + OutputTreeText(infoSink, node, depth); + if (node->getTest()) { + out.debug << "Loop Condition\n"; + node->getTest()->traverse(this); + } else + out.debug << "No loop condition\n"; + + OutputTreeText(infoSink, node, depth); + if (node->getBody()) { + out.debug << "Loop Body\n"; + node->getBody()->traverse(this); + } else + out.debug << "No loop body\n"; + + if (node->getTerminal()) { + OutputTreeText(infoSink, node, depth); + out.debug << "Loop Terminal Expression\n"; + node->getTerminal()->traverse(this); + } + + --depth; + + return false; +} + +bool TOutputTraverser::visitBranch(TVisit /* visit*/, TIntermBranch* node) +{ + TInfoSink& out = infoSink; + + OutputTreeText(out, node, depth); + + switch (node->getFlowOp()) { + case EOpKill: out.debug << "Branch: Kill"; break; + case EOpBreak: out.debug << "Branch: Break"; break; + case EOpContinue: out.debug << "Branch: Continue"; break; + case EOpReturn: out.debug << "Branch: Return"; break; + case EOpCase: out.debug << "case: "; break; + case EOpDefault: out.debug << "default: "; break; + default: out.debug << "Branch: Unknown Branch"; break; + } + + if (node->getExpression()) { + out.debug << " with expression\n"; + ++depth; + node->getExpression()->traverse(this); + --depth; + } else + out.debug << "\n"; + + return false; +} + +bool TOutputTraverser::visitSwitch(TVisit /* visit */, TIntermSwitch* node) +{ + TInfoSink& out = infoSink; + + OutputTreeText(out, node, depth); + out.debug << "switch\n"; + + OutputTreeText(out, node, depth); + out.debug << "condition\n"; + ++depth; + node->getCondition()->traverse(this); + + --depth; + OutputTreeText(out, node, depth); + out.debug << "body\n"; + ++depth; + node->getBody()->traverse(this); + + --depth; + + return false; +} + +// +// This function is the one to call externally to start the traversal. +// Individual functions can be initialized to 0 to skip processing of that +// type of node. It's children will still be processed. +// +void TIntermediate::output(TInfoSink& infoSink, bool tree) +{ + infoSink.debug << "Shader version: " << version << "\n"; + if (requestedExtensions.size() > 0) { + for (auto extIt = requestedExtensions.begin(); extIt != requestedExtensions.end(); ++extIt) + infoSink.debug << "Requested " << *extIt << "\n"; + } + + if (xfbMode) + infoSink.debug << "in xfb mode\n"; + + switch (language) { + case EShLangVertex: + break; + + case EShLangTessControl: + infoSink.debug << "vertices = " << vertices << "\n"; + break; + + case EShLangTessEvaluation: + infoSink.debug << "input primitive = " << TQualifier::getGeometryString(inputPrimitive) << "\n"; + infoSink.debug << "vertex spacing = " << TQualifier::getVertexSpacingString(vertexSpacing) << "\n"; + infoSink.debug << "triangle order = " << TQualifier::getVertexOrderString(vertexOrder) << "\n"; + if (pointMode) + infoSink.debug << "using point mode\n"; + break; + + case EShLangGeometry: + infoSink.debug << "invocations = " << invocations << "\n"; + infoSink.debug << "max_vertices = " << vertices << "\n"; + infoSink.debug << "input primitive = " << TQualifier::getGeometryString(inputPrimitive) << "\n"; + infoSink.debug << "output primitive = " << TQualifier::getGeometryString(outputPrimitive) << "\n"; + break; + + case EShLangFragment: + if (pixelCenterInteger) + infoSink.debug << "gl_FragCoord pixel center is integer\n"; + if (originUpperLeft) + infoSink.debug << "gl_FragCoord origin is upper left\n"; + if (earlyFragmentTests) + infoSink.debug << "using early_fragment_tests\n"; + if (depthLayout != EldNone) + infoSink.debug << "using " << TQualifier::getLayoutDepthString(depthLayout) << "\n"; + if (blendEquations != 0) { + infoSink.debug << "using"; + // blendEquations is a mask, decode it + for (TBlendEquationShift be = (TBlendEquationShift)0; be < EBlendCount; be = (TBlendEquationShift)(be + 1)) { + if (blendEquations & (1 << be)) + infoSink.debug << " " << TQualifier::getBlendEquationString(be); + } + infoSink.debug << "\n"; + } + break; + + case EShLangCompute: + infoSink.debug << "local_size = (" << localSize[0] << ", " << localSize[1] << ", " << localSize[2] << ")\n"; + { + if (localSizeSpecId[0] != TQualifier::layoutNotSet || + localSizeSpecId[1] != TQualifier::layoutNotSet || + localSizeSpecId[2] != TQualifier::layoutNotSet) { + infoSink.debug << "local_size ids = (" << + localSizeSpecId[0] << ", " << + localSizeSpecId[1] << ", " << + localSizeSpecId[2] << ")\n"; + } + } + break; + + default: + break; + } + + if (treeRoot == 0 || ! tree) + return; + + TOutputTraverser it(infoSink); + + treeRoot->traverse(&it); +} + +} // end namespace glslang diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/iomapper.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/iomapper.cpp new file mode 100644 index 0000000..bebf775 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/iomapper.cpp @@ -0,0 +1,535 @@ +// +// Copyright (C) 2016 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. +// + +#include "../Include/Common.h" +#include "../Include/InfoSink.h" +#include "iomapper.h" +#include "LiveTraverser.h" +#include "localintermediate.h" + +#include "gl_types.h" + +#include +#include + +// +// Map IO bindings. +// +// High-level algorithm for one stage: +// +// 1. Traverse all code (live+dead) to find the explicitly provided bindings. +// +// 2. Traverse (just) the live code to determine which non-provided bindings +// require auto-numbering. We do not auto-number dead ones. +// +// 3. Traverse all the code to apply the bindings: +// a. explicitly given bindings are offset according to their type +// b. implicit live bindings are auto-numbered into the holes, using +// any open binding slot. +// c. implicit dead bindings are left un-bound. +// + + +namespace glslang { + +struct TVarEntryInfo +{ + int id; + TIntermSymbol* symbol; + bool live; + int newBinding; + int newSet; + int newLocation; + int newComponent; + int newIndex; + + struct TOrderById + { + inline bool operator()(const TVarEntryInfo& l, const TVarEntryInfo& r) + { + return l.id < r.id; + } + }; + + struct TOrderByPriority + { + // ordering: + // 1) has both binding and set + // 2) has binding but no set + // 3) has no binding but set + // 4) has no binding and no set + inline bool operator()(const TVarEntryInfo& l, const TVarEntryInfo& r) + { + const TQualifier& lq = l.symbol->getQualifier(); + const TQualifier& rq = r.symbol->getQualifier(); + + // simple rules: + // has binding gives 2 points + // has set gives 1 point + // who has the most points is more important. + int lPoints = (lq.hasBinding() ? 2 : 0) + (lq.hasSet() ? 1 : 0); + int rPoints = (rq.hasBinding() ? 2 : 0) + (rq.hasSet() ? 1 : 0); + + if (lPoints == rPoints) + return l.id < r.id; + return lPoints > rPoints; + } + }; +}; + + + +typedef std::vector TVarLiveMap; + +class TVarGatherTraverser : public TLiveTraverser +{ +public: + TVarGatherTraverser(const TIntermediate& i, bool traverseDeadCode, TVarLiveMap& inList, TVarLiveMap& outList, TVarLiveMap& uniformList) + : TLiveTraverser(i, traverseDeadCode, true, true, false) + , inputList(inList) + , outputList(outList) + , uniformList(uniformList) + { + } + + + virtual void visitSymbol(TIntermSymbol* base) + { + TVarLiveMap* target = nullptr; + if (base->getQualifier().storage == EvqVaryingIn) + target = &inputList; + else if (base->getQualifier().storage == EvqVaryingOut) + target = &outputList; + else if (base->getQualifier().isUniformOrBuffer()) + target = &uniformList; + + if (target) { + TVarEntryInfo ent = { base->getId(), base, !traverseAll }; + TVarLiveMap::iterator at = std::lower_bound(target->begin(), target->end(), ent, TVarEntryInfo::TOrderById()); + if (at != target->end() && at->id == ent.id) + at->live = at->live || !traverseAll; // update live state + else + target->insert(at, ent); + } + } + +private: + TVarLiveMap& inputList; + TVarLiveMap& outputList; + TVarLiveMap& uniformList; +}; + +class TVarSetTraverser : public TLiveTraverser +{ +public: + TVarSetTraverser(const TIntermediate& i, const TVarLiveMap& inList, const TVarLiveMap& outList, const TVarLiveMap& uniformList) + : TLiveTraverser(i, true, true, true, false) + , inputList(inList) + , outputList(outList) + , uniformList(uniformList) + { + } + + + virtual void visitSymbol(TIntermSymbol* base) + { + const TVarLiveMap* source; + if (base->getQualifier().storage == EvqVaryingIn) + source = &inputList; + else if (base->getQualifier().storage == EvqVaryingOut) + source = &outputList; + else if (base->getQualifier().isUniformOrBuffer()) + source = &uniformList; + else + return; + + TVarEntryInfo ent = { base->getId() }; + TVarLiveMap::const_iterator at = std::lower_bound(source->begin(), source->end(), ent, TVarEntryInfo::TOrderById()); + if (at == source->end()) + return; + + if (at->id != ent.id) + return; + + if (at->newBinding != -1) + base->getWritableType().getQualifier().layoutBinding = at->newBinding; + if (at->newSet != -1) + base->getWritableType().getQualifier().layoutSet = at->newSet; + if (at->newLocation != -1) + base->getWritableType().getQualifier().layoutLocation = at->newLocation; + if (at->newComponent != -1) + base->getWritableType().getQualifier().layoutComponent = at->newComponent; + if (at->newIndex != -1) + base->getWritableType().getQualifier().layoutIndex = at->newIndex; + } + + private: + const TVarLiveMap& inputList; + const TVarLiveMap& outputList; + const TVarLiveMap& uniformList; +}; + +struct TResolverUniformAdaptor +{ + TResolverUniformAdaptor(EShLanguage s, TIoMapResolver& r, TInfoSink& i, bool& e, TIntermediate& interm) + : resolver(r) + , stage(s) + , infoSink(i) + , error(e) + , intermediate(interm) + { + } + + inline void operator()(TVarEntryInfo& ent) + { + ent.newLocation = -1; + ent.newComponent = -1; + 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); + if (isValid) { + 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); + + if (ent.newBinding != -1) { + if (ent.newBinding >= int(TQualifier::layoutBindingEnd)) { + TString err = "mapped binding out of range: " + ent.symbol->getName(); + + infoSink.info.message(EPrefixInternalError, err.c_str()); + error = true; + } + } + if (ent.newSet != -1) { + if (ent.newSet >= int(TQualifier::layoutSetEnd)) { + TString err = "mapped set out of range: " + ent.symbol->getName(); + + infoSink.info.message(EPrefixInternalError, err.c_str()); + error = true; + } + } + } else { + TString errorMsg = "Invalid binding: " + ent.symbol->getName(); + infoSink.info.message(EPrefixInternalError, errorMsg.c_str()); + error = true; + } + } + + EShLanguage stage; + TIoMapResolver& resolver; + TInfoSink& infoSink; + bool& error; + TIntermediate& intermediate; + +private: + TResolverUniformAdaptor& operator=(TResolverUniformAdaptor&); +}; + +struct TResolverInOutAdaptor +{ + TResolverInOutAdaptor(EShLanguage s, TIoMapResolver& r, TInfoSink& i, bool& e, TIntermediate& interm) + : resolver(r) + , stage(s) + , infoSink(i) + , error(e) + , intermediate(interm) + { + } + + inline void operator()(TVarEntryInfo& ent) + { + ent.newLocation = -1; + ent.newComponent = -1; + ent.newBinding = -1; + ent.newSet = -1; + ent.newIndex = -1; + const bool isValid = resolver.validateInOut(stage, + ent.symbol->getName().c_str(), + ent.symbol->getType(), + ent.live); + if (isValid) { + ent.newLocation = resolver.resolveInOutLocation(stage, + ent.symbol->getName().c_str(), + ent.symbol->getType(), + ent.live); + ent.newComponent = resolver.resolveInOutComponent(stage, + ent.symbol->getName().c_str(), + ent.symbol->getType(), + ent.live); + ent.newIndex = resolver.resolveInOutIndex(stage, + ent.symbol->getName().c_str(), + ent.symbol->getType(), + ent.live); + } else { + TString errorMsg = "Invalid shader In/Out variable semantic: "; + errorMsg += ent.symbol->getType().getQualifier().semanticName; + infoSink.info.message(EPrefixInternalError, errorMsg.c_str()); + error = true; + } + } + + EShLanguage stage; + TIoMapResolver& resolver; + TInfoSink& infoSink; + bool& error; + TIntermediate& intermediate; + +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 +{ + int baseSamplerBinding; + int baseTextureBinding; + int baseImageBinding; + int baseUboBinding; + int baseSsboBinding; + bool doAutoMapping; + typedef std::vector TSlotSet; + typedef std::unordered_map TSlotSetMap; + TSlotSetMap slots; + + TSlotSet::iterator findSlot(int set, int slot) + { + return std::lower_bound(slots[set].begin(), slots[set].end(), slot); + } + + bool checkEmpty(int set, int slot) + { + TSlotSet::iterator at = findSlot(set, slot); + return !(at != slots[set].end() && *at == slot); + } + + int reserveSlot(int set, int slot) + { + TSlotSet::iterator at = findSlot(set, slot); + slots[set].insert(at, slot); + return slot; + } + + int getFreeSlot(int set, int base) + { + TSlotSet::iterator at = findSlot(set, base); + if (at == slots[set].end()) + return reserveSlot(set, base); + + // look in locksteps, if they not match, then there is a free slot + for (; at != slots[set].end(); ++at, ++base) + if (*at != base) + break; + 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; + + if (type.getBasicType() == glslang::EbtSampler) { + const glslang::TSampler& sampler = type.getSampler(); + if (sampler.isPureSampler()) + return checkEmpty(set, baseSamplerBinding + type.getQualifier().layoutBinding); + + if (sampler.isTexture()) + return checkEmpty(set, baseTextureBinding + type.getQualifier().layoutBinding); + } + + if (type.getQualifier().storage == EvqUniform) + return checkEmpty(set, baseUboBinding + type.getQualifier().layoutBinding); + + if (type.getQualifier().storage == EvqBuffer) + return checkEmpty(set, baseSsboBinding + type.getQualifier().layoutBinding); + } + return true; + } + + int resolveBinding(EShLanguage /*stage*/, const char* /*name*/, const glslang::TType& type, bool is_live) override + { + int set; + if (type.getQualifier().hasSet()) + set = type.getQualifier().layoutSet; + else + set = 0; + + 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 (sampler.isPureSampler()) + return reserveSlot(set, baseSamplerBinding + type.getQualifier().layoutBinding); + + if (sampler.isTexture()) + return reserveSlot(set, baseTextureBinding + type.getQualifier().layoutBinding); + } + + if (type.getQualifier().storage == EvqUniform) + return reserveSlot(set, baseUboBinding + type.getQualifier().layoutBinding); + + if (type.getQualifier().storage == EvqBuffer) + return reserveSlot(set, baseSsboBinding + type.getQualifier().layoutBinding); + } else if (is_live && doAutoMapping) { + // 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 (sampler.isTexture()) + return getFreeSlot(set, baseTextureBinding); + } + + if (type.getQualifier().storage == EvqUniform) + return getFreeSlot(set, baseUboBinding); + + if (type.getQualifier().storage == EvqBuffer) + return getFreeSlot(set, baseSsboBinding); + } + + 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; + } + + 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 + { + return -1; + } + 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 + { + return -1; + } +}; + +// 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) + return true; + + if (intermediate.getNumEntryPoints() != 1 || intermediate.isRecursive()) + return false; + + TIntermNode* root = intermediate.getTreeRoot(); + if (root == nullptr) + 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(); + + resolver = &defaultResolver; + } + + TVarLiveMap inVarMap, outVarMap, uniformVarMap; + TVarGatherTraverser iter_binding_all(intermediate, true, inVarMap, outVarMap, uniformVarMap); + TVarGatherTraverser iter_binding_live(intermediate, false, inVarMap, outVarMap, uniformVarMap); + + root->traverse(&iter_binding_all); + iter_binding_live.pushFunction(intermediate.getEntryPointMangledName().c_str()); + + while (!iter_binding_live.functions.empty()) { + TIntermNode* function = iter_binding_live.functions.back(); + iter_binding_live.functions.pop_back(); + function->traverse(&iter_binding_live); + } + + // sort entries by priority. see TVarEntryInfo::TOrderByPriority for info. + std::sort(uniformVarMap.begin(), uniformVarMap.end(), TVarEntryInfo::TOrderByPriority()); + + bool hadError = false; + TResolverUniformAdaptor uniformResolve(stage, *resolver, infoSink, hadError, intermediate); + TResolverInOutAdaptor inOutResolve(stage, *resolver, infoSink, hadError, intermediate); + std::for_each(inVarMap.begin(), inVarMap.end(), inOutResolve); + std::for_each(outVarMap.begin(), outVarMap.end(), inOutResolve); + std::for_each(uniformVarMap.begin(), uniformVarMap.end(), uniformResolve); + + if (!hadError) { + // sort by id again, so we can use lower bound to find entries + std::sort(uniformVarMap.begin(), uniformVarMap.end(), TVarEntryInfo::TOrderById()); + TVarSetTraverser iter_iomap(intermediate, inVarMap, outVarMap, uniformVarMap); + root->traverse(&iter_iomap); + } + + return !hadError; +} + +} // end namespace glslang diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/iomapper.h b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/iomapper.h new file mode 100644 index 0000000..5e0d439 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/iomapper.h @@ -0,0 +1,63 @@ +// +// Copyright (C) 2016 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. +// + +#ifndef _IOMAPPER_INCLUDED +#define _IOMAPPER_INCLUDED + +#include "../Public/ShaderLang.h" + +// +// A reflection database and its interface, consistent with the OpenGL API reflection queries. +// + +class TInfoSink; + +namespace glslang { + +class TIntermediate; + +// I/O mapper +class TIoMapper { +public: + TIoMapper() {} + virtual ~TIoMapper() {} + + // grow the reflection stage by stage + bool addStage(EShLanguage, TIntermediate&, TInfoSink&, TIoMapResolver*); +}; + +} // end namespace glslang + +#endif // _IOMAPPER_INCLUDED diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/limits.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/limits.cpp new file mode 100644 index 0000000..64d191b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/limits.cpp @@ -0,0 +1,198 @@ +// +// 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. +// + +// +// Do sub tree walks for +// 1) inductive loop bodies to see if the inductive variable is modified +// 2) array-index expressions to see if they are "constant-index-expression" +// +// These are per Appendix A of ES 2.0: +// +// "Within the body of the loop, the loop index is not statically assigned to nor is it used as the +// argument to a function out or inout parameter." +// +// "The following are constant-index-expressions: +// - Constant expressions +// - Loop indices as defined in section 4 +// - Expressions composed of both of the above" +// +// N.B.: assuming the last rule excludes function calls +// + +#include "ParseHelper.h" + +namespace glslang { + +// +// The inductive loop-body traverser. +// +// Just look at things that might modify the loop index. +// + +class TInductiveTraverser : public TIntermTraverser { +public: + TInductiveTraverser(int id, TSymbolTable& st) + : loopId(id), symbolTable(st), bad(false) { } + + virtual bool visitBinary(TVisit, TIntermBinary* node); + virtual bool visitUnary(TVisit, TIntermUnary* node); + virtual bool visitAggregate(TVisit, TIntermAggregate* node); + + int loopId; // unique ID of the symbol that's the loop inductive variable + TSymbolTable& symbolTable; + bool bad; + TSourceLoc badLoc; + +protected: + TInductiveTraverser(TInductiveTraverser&); + TInductiveTraverser& operator=(TInductiveTraverser&); +}; + +// check binary operations for those modifying the loop index +bool TInductiveTraverser::visitBinary(TVisit /* visit */, TIntermBinary* node) +{ + if (node->modifiesState() && node->getLeft()->getAsSymbolNode() && + node->getLeft()->getAsSymbolNode()->getId() == loopId) { + bad = true; + badLoc = node->getLoc(); + } + + return true; +} + +// check unary operations for those modifying the loop index +bool TInductiveTraverser::visitUnary(TVisit /* visit */, TIntermUnary* node) +{ + if (node->modifiesState() && node->getOperand()->getAsSymbolNode() && + node->getOperand()->getAsSymbolNode()->getId() == loopId) { + bad = true; + badLoc = node->getLoc(); + } + + return true; +} + +// check function calls for arguments modifying the loop index +bool TInductiveTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node) +{ + if (node->getOp() == EOpFunctionCall) { + // see if an out or inout argument is the loop index + const TIntermSequence& args = node->getSequence(); + for (int i = 0; i < (int)args.size(); ++i) { + if (args[i]->getAsSymbolNode() && args[i]->getAsSymbolNode()->getId() == loopId) { + TSymbol* function = symbolTable.find(node->getName()); + const TType* type = (*function->getAsFunction())[i].type; + if (type->getQualifier().storage == EvqOut || + type->getQualifier().storage == EvqInOut) { + bad = true; + badLoc = node->getLoc(); + } + } + } + } + + return true; +} + +// +// External function to call for loop check. +// +void TParseContext::inductiveLoopBodyCheck(TIntermNode* body, int loopId, TSymbolTable& symbolTable) +{ + TInductiveTraverser it(loopId, symbolTable); + + if (body == nullptr) + return; + + body->traverse(&it); + + if (it.bad) + error(it.badLoc, "inductive loop index modified", "limitations", ""); +} + +// +// The "constant-index-expression" tranverser. +// +// Just look at things that can form an index. +// + +class TIndexTraverser : public TIntermTraverser { +public: + TIndexTraverser(const TIdSetType& ids) : inductiveLoopIds(ids), bad(false) { } + virtual void visitSymbol(TIntermSymbol* symbol); + virtual bool visitAggregate(TVisit, TIntermAggregate* node); + const TIdSetType& inductiveLoopIds; + bool bad; + TSourceLoc badLoc; + +protected: + TIndexTraverser(TIndexTraverser&); + TIndexTraverser& operator=(TIndexTraverser&); +}; + +// make sure symbols are inductive-loop indexes +void TIndexTraverser::visitSymbol(TIntermSymbol* symbol) +{ + if (inductiveLoopIds.find(symbol->getId()) == inductiveLoopIds.end()) { + bad = true; + badLoc = symbol->getLoc(); + } +} + +// check for function calls, assuming they are bad; spec. doesn't really say +bool TIndexTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node) +{ + if (node->getOp() == EOpFunctionCall) { + bad = true; + badLoc = node->getLoc(); + } + + return true; +} + +// +// External function to call for loop check. +// +void TParseContext::constantIndexExpressionCheck(TIntermNode* index) +{ + TIndexTraverser it(inductiveLoopIds); + + index->traverse(&it); + + if (it.bad) + error(it.badLoc, "Non-constant-index-expression", "limitations", ""); +} + +} // end namespace glslang diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/linkValidate.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/linkValidate.cpp new file mode 100644 index 0000000..761cb41 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/linkValidate.cpp @@ -0,0 +1,1220 @@ +// +// 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. +// + +// +// Do link-time merging and validation of intermediate representations. +// +// Basic model is that during compilation, each compilation unit (shader) is +// compiled into one TIntermediate instance. Then, at link time, multiple +// units for the same stage can be merged together, which can generate errors. +// Then, after all merging, a single instance of TIntermediate represents +// the whole stage. A final error check can be done on the resulting stage, +// even if no merging was done (i.e., the stage was only one compilation unit). +// + +#include "localintermediate.h" +#include "../Include/InfoSink.h" + +namespace glslang { + +// +// Link-time error emitter. +// +void TIntermediate::error(TInfoSink& infoSink, const char* message) +{ + infoSink.info.prefix(EPrefixError); + infoSink.info << "Linking " << StageName(language) << " stage: " << message << "\n"; + + ++numErrors; +} + +// Link-time warning. +void TIntermediate::warn(TInfoSink& infoSink, const char* message) +{ + infoSink.info.prefix(EPrefixWarning); + infoSink.info << "Linking " << StageName(language) << " stage: " << message << "\n"; +} + +// TODO: 4.4 offset/align: "Two blocks linked together in the same program with the same block +// name must have the exact same set of members qualified with offset and their integral-constant +// expression values must be the same, or a link-time error results." + +// +// Merge the information from 'unit' into 'this' +// +void TIntermediate::merge(TInfoSink& infoSink, TIntermediate& unit) +{ + if (source == EShSourceNone) + source = unit.source; + + if (source != unit.source) + error(infoSink, "can't link compilation units from different source languages"); + + if (unit.getNumEntryPoints() > 0) { + if (getNumEntryPoints() > 0) + error(infoSink, "can't handle multiple entry points per stage"); + else { + entryPointName = unit.getEntryPointName(); + entryPointMangledName = unit.getEntryPointMangledName(); + } + } + numEntryPoints += unit.getNumEntryPoints(); + numErrors += unit.getNumErrors(); + numPushConstants += unit.numPushConstants; + callGraph.insert(callGraph.end(), unit.callGraph.begin(), unit.callGraph.end()); + + if (originUpperLeft != unit.originUpperLeft || pixelCenterInteger != unit.pixelCenterInteger) + error(infoSink, "gl_FragCoord redeclarations must match across shaders"); + + if (! earlyFragmentTests) + earlyFragmentTests = unit.earlyFragmentTests; + + if (depthLayout == EldNone) + depthLayout = unit.depthLayout; + else if (depthLayout != unit.depthLayout) + error(infoSink, "Contradictory depth layouts"); + + blendEquations |= unit.blendEquations; + + if (inputPrimitive == ElgNone) + inputPrimitive = unit.inputPrimitive; + else if (inputPrimitive != unit.inputPrimitive) + error(infoSink, "Contradictory input layout primitives"); + + if (outputPrimitive == ElgNone) + outputPrimitive = unit.outputPrimitive; + else if (outputPrimitive != unit.outputPrimitive) + error(infoSink, "Contradictory output layout primitives"); + + if (vertices == TQualifier::layoutNotSet) + vertices = unit.vertices; + else if (vertices != unit.vertices) { + if (language == EShLangGeometry) + error(infoSink, "Contradictory layout max_vertices values"); + else if (language == EShLangTessControl) + error(infoSink, "Contradictory layout vertices values"); + else + assert(0); + } + + if (vertexSpacing == EvsNone) + vertexSpacing = unit.vertexSpacing; + else if (vertexSpacing != unit.vertexSpacing) + error(infoSink, "Contradictory input vertex spacing"); + + if (vertexOrder == EvoNone) + vertexOrder = unit.vertexOrder; + else if (vertexOrder != unit.vertexOrder) + error(infoSink, "Contradictory triangle ordering"); + + if (unit.pointMode) + pointMode = true; + + for (int i = 0; i < 3; ++i) { + if (localSize[i] > 1) + localSize[i] = unit.localSize[i]; + else if (localSize[i] != unit.localSize[i]) + error(infoSink, "Contradictory local size"); + + if (localSizeSpecId[i] != TQualifier::layoutNotSet) + localSizeSpecId[i] = unit.localSizeSpecId[i]; + else if (localSizeSpecId[i] != unit.localSizeSpecId[i]) + error(infoSink, "Contradictory local size specialization ids"); + } + + if (unit.xfbMode) + xfbMode = true; + for (size_t b = 0; b < xfbBuffers.size(); ++b) { + if (xfbBuffers[b].stride == TQualifier::layoutXfbStrideEnd) + xfbBuffers[b].stride = unit.xfbBuffers[b].stride; + else if (xfbBuffers[b].stride != unit.xfbBuffers[b].stride) + error(infoSink, "Contradictory xfb_stride"); + xfbBuffers[b].implicitStride = std::max(xfbBuffers[b].implicitStride, unit.xfbBuffers[b].implicitStride); + if (unit.xfbBuffers[b].containsDouble) + xfbBuffers[b].containsDouble = true; + // TODO: 4.4 link: enhanced layouts: compare ranges + } + + if (unit.treeRoot == 0) + return; + + if (treeRoot == 0) { + treeRoot = unit.treeRoot; + version = unit.version; + requestedExtensions = unit.requestedExtensions; + return; + } + + // Getting this far means we have two existing trees to merge... + + version = std::max(version, unit.version); + requestedExtensions.insert(unit.requestedExtensions.begin(), unit.requestedExtensions.end()); + + // Get the top-level globals of each unit + TIntermSequence& globals = treeRoot->getAsAggregate()->getSequence(); + TIntermSequence& unitGlobals = unit.treeRoot->getAsAggregate()->getSequence(); + + // Get the linker-object lists + TIntermSequence& linkerObjects = findLinkerObjects(); + TIntermSequence& unitLinkerObjects = unit.findLinkerObjects(); + + mergeBodies(infoSink, globals, unitGlobals); + mergeLinkerObjects(infoSink, linkerObjects, unitLinkerObjects); + + ioAccessed.insert(unit.ioAccessed.begin(), unit.ioAccessed.end()); +} + +// +// Merge the function bodies and global-level initializers from unitGlobals into globals. +// Will error check duplication of function bodies for the same signature. +// +void TIntermediate::mergeBodies(TInfoSink& infoSink, TIntermSequence& globals, const TIntermSequence& unitGlobals) +{ + // TODO: link-time performance: Processing in alphabetical order will be faster + + // Error check the global objects, not including the linker objects + for (unsigned int child = 0; child < globals.size() - 1; ++child) { + for (unsigned int unitChild = 0; unitChild < unitGlobals.size() - 1; ++unitChild) { + TIntermAggregate* body = globals[child]->getAsAggregate(); + TIntermAggregate* unitBody = unitGlobals[unitChild]->getAsAggregate(); + if (body && unitBody && body->getOp() == EOpFunction && unitBody->getOp() == EOpFunction && body->getName() == unitBody->getName()) { + error(infoSink, "Multiple function bodies in multiple compilation units for the same signature in the same stage:"); + infoSink.info << " " << globals[child]->getAsAggregate()->getName() << "\n"; + } + } + } + + // Merge the global objects, just in front of the linker objects + globals.insert(globals.end() - 1, unitGlobals.begin(), unitGlobals.end() - 1); +} + +// +// Merge the linker objects from unitLinkerObjects into linkerObjects. +// Duplication is expected and filtered out, but contradictions are an error. +// +void TIntermediate::mergeLinkerObjects(TInfoSink& infoSink, TIntermSequence& linkerObjects, const TIntermSequence& unitLinkerObjects) +{ + // Error check and merge the linker objects (duplicates should not be created) + std::size_t initialNumLinkerObjects = linkerObjects.size(); + for (unsigned int unitLinkObj = 0; unitLinkObj < unitLinkerObjects.size(); ++unitLinkObj) { + bool merge = true; + for (std::size_t linkObj = 0; linkObj < initialNumLinkerObjects; ++linkObj) { + TIntermSymbol* symbol = linkerObjects[linkObj]->getAsSymbolNode(); + TIntermSymbol* unitSymbol = unitLinkerObjects[unitLinkObj]->getAsSymbolNode(); + assert(symbol && unitSymbol); + if (symbol->getName() == unitSymbol->getName()) { + // filter out copy + merge = false; + + // but if one has an initializer and the other does not, update + // the initializer + if (symbol->getConstArray().empty() && ! unitSymbol->getConstArray().empty()) + symbol->setConstArray(unitSymbol->getConstArray()); + + // Similarly for binding + if (! symbol->getQualifier().hasBinding() && unitSymbol->getQualifier().hasBinding()) + symbol->getQualifier().layoutBinding = unitSymbol->getQualifier().layoutBinding; + + // Update implicit array sizes + mergeImplicitArraySizes(symbol->getWritableType(), unitSymbol->getType()); + + // Check for consistent types/qualification/initializers etc. + mergeErrorCheck(infoSink, *symbol, *unitSymbol, false); + } + } + if (merge) + linkerObjects.push_back(unitLinkerObjects[unitLinkObj]); + } +} + +// TODO 4.5 link functionality: cull distance array size checking + +// Recursively merge the implicit array sizes through the objects' respective type trees. +void TIntermediate::mergeImplicitArraySizes(TType& type, const TType& unitType) +{ + if (type.isImplicitlySizedArray() && unitType.isArray()) { + int newImplicitArraySize = unitType.isImplicitlySizedArray() ? unitType.getImplicitArraySize() : unitType.getOuterArraySize(); + if (newImplicitArraySize > type.getImplicitArraySize ()) + type.setImplicitArraySize(newImplicitArraySize); + } + + // Type mismatches are caught and reported after this, just be careful for now. + if (! type.isStruct() || ! unitType.isStruct() || type.getStruct()->size() != unitType.getStruct()->size()) + return; + + for (int i = 0; i < (int)type.getStruct()->size(); ++i) + mergeImplicitArraySizes(*(*type.getStruct())[i].type, *(*unitType.getStruct())[i].type); +} + +// +// Compare two global objects from two compilation units and see if they match +// well enough. Rules can be different for intra- vs. cross-stage matching. +// +// This function only does one of intra- or cross-stage matching per call. +// +void TIntermediate::mergeErrorCheck(TInfoSink& infoSink, const TIntermSymbol& symbol, const TIntermSymbol& unitSymbol, bool crossStage) +{ + bool writeTypeComparison = false; + + // Types have to match + if (symbol.getType() != unitSymbol.getType()) { + error(infoSink, "Types must match:"); + writeTypeComparison = true; + } + + // Qualifiers have to (almost) match + + // Storage... + if (symbol.getQualifier().storage != unitSymbol.getQualifier().storage) { + error(infoSink, "Storage qualifiers must match:"); + writeTypeComparison = true; + } + + // Precision... + if (symbol.getQualifier().precision != unitSymbol.getQualifier().precision) { + error(infoSink, "Precision qualifiers must match:"); + writeTypeComparison = true; + } + + // Invariance... + if (! crossStage && symbol.getQualifier().invariant != unitSymbol.getQualifier().invariant) { + error(infoSink, "Presence of invariant qualifier must match:"); + writeTypeComparison = true; + } + + // Precise... + if (! crossStage && symbol.getQualifier().noContraction != unitSymbol.getQualifier().noContraction) { + error(infoSink, "Presence of precise qualifier must match:"); + writeTypeComparison = true; + } + + // Auxiliary and interpolation... + if (symbol.getQualifier().centroid != unitSymbol.getQualifier().centroid || + symbol.getQualifier().smooth != unitSymbol.getQualifier().smooth || + symbol.getQualifier().flat != unitSymbol.getQualifier().flat || + symbol.getQualifier().sample != unitSymbol.getQualifier().sample || + symbol.getQualifier().patch != unitSymbol.getQualifier().patch || + symbol.getQualifier().nopersp != unitSymbol.getQualifier().nopersp) { + error(infoSink, "Interpolation and auxiliary storage qualifiers must match:"); + writeTypeComparison = true; + } + + // Memory... + if (symbol.getQualifier().coherent != unitSymbol.getQualifier().coherent || + symbol.getQualifier().volatil != unitSymbol.getQualifier().volatil || + symbol.getQualifier().restrict != unitSymbol.getQualifier().restrict || + symbol.getQualifier().readonly != unitSymbol.getQualifier().readonly || + symbol.getQualifier().writeonly != unitSymbol.getQualifier().writeonly) { + error(infoSink, "Memory qualifiers must match:"); + writeTypeComparison = true; + } + + // Layouts... + // TODO: 4.4 enhanced layouts: Generalize to include offset/align: current spec + // requires separate user-supplied offset from actual computed offset, but + // current implementation only has one offset. + if (symbol.getQualifier().layoutMatrix != unitSymbol.getQualifier().layoutMatrix || + symbol.getQualifier().layoutPacking != unitSymbol.getQualifier().layoutPacking || + symbol.getQualifier().layoutLocation != unitSymbol.getQualifier().layoutLocation || + symbol.getQualifier().layoutComponent != unitSymbol.getQualifier().layoutComponent || + symbol.getQualifier().layoutIndex != unitSymbol.getQualifier().layoutIndex || + symbol.getQualifier().layoutBinding != unitSymbol.getQualifier().layoutBinding || + (symbol.getQualifier().hasBinding() && (symbol.getQualifier().layoutOffset != unitSymbol.getQualifier().layoutOffset))) { + error(infoSink, "Layout qualification must match:"); + writeTypeComparison = true; + } + + // Initializers have to match, if both are present, and if we don't already know the types don't match + if (! writeTypeComparison) { + if (! symbol.getConstArray().empty() && ! unitSymbol.getConstArray().empty()) { + if (symbol.getConstArray() != unitSymbol.getConstArray()) { + error(infoSink, "Initializers must match:"); + infoSink.info << " " << symbol.getName() << "\n"; + } + } + } + + if (writeTypeComparison) + infoSink.info << " " << symbol.getName() << ": \"" << symbol.getType().getCompleteString() << "\" versus \"" << + unitSymbol.getType().getCompleteString() << "\"\n"; +} + +// +// Do final link-time error checking of a complete (merged) intermediate representation. +// (Much error checking was done during merging). +// +// Also, lock in defaults of things not set, including array sizes. +// +void TIntermediate::finalCheck(TInfoSink& infoSink, bool keepUncalled) +{ + if (getTreeRoot() == nullptr) + return; + + if (numEntryPoints < 1) { + if (source == EShSourceGlsl) + error(infoSink, "Missing entry point: Each stage requires one entry point"); + else + warn(infoSink, "Entry point not found"); + } + + if (numPushConstants > 1) + error(infoSink, "Only one push_constant block is allowed per stage"); + + // recursion and missing body checking + checkCallGraphCycles(infoSink); + checkCallGraphBodies(infoSink, keepUncalled); + + // overlap/alias/missing I/O, etc. + inOutLocationCheck(infoSink); + + // invocations + if (invocations == TQualifier::layoutNotSet) + invocations = 1; + + if (inIoAccessed("gl_ClipDistance") && inIoAccessed("gl_ClipVertex")) + error(infoSink, "Can only use one of gl_ClipDistance or gl_ClipVertex (gl_ClipDistance is preferred)"); + if (inIoAccessed("gl_CullDistance") && inIoAccessed("gl_ClipVertex")) + error(infoSink, "Can only use one of gl_CullDistance or gl_ClipVertex (gl_ClipDistance is preferred)"); + + if (userOutputUsed() && (inIoAccessed("gl_FragColor") || inIoAccessed("gl_FragData"))) + error(infoSink, "Cannot use gl_FragColor or gl_FragData when using user-defined outputs"); + if (inIoAccessed("gl_FragColor") && inIoAccessed("gl_FragData")) + error(infoSink, "Cannot use both gl_FragColor and gl_FragData"); + + for (size_t b = 0; b < xfbBuffers.size(); ++b) { + if (xfbBuffers[b].containsDouble) + RoundToPow2(xfbBuffers[b].implicitStride, 8); + + // "It is a compile-time or link-time error to have + // any xfb_offset that overflows xfb_stride, whether stated on declarations before or after the xfb_stride, or + // in different compilation units. While xfb_stride can be declared multiple times for the same buffer, it is a + // compile-time or link-time error to have different values specified for the stride for the same buffer." + if (xfbBuffers[b].stride != TQualifier::layoutXfbStrideEnd && xfbBuffers[b].implicitStride > xfbBuffers[b].stride) { + error(infoSink, "xfb_stride is too small to hold all buffer entries:"); + infoSink.info.prefix(EPrefixError); + infoSink.info << " xfb_buffer " << (unsigned int)b << ", xfb_stride " << xfbBuffers[b].stride << ", minimum stride needed: " << xfbBuffers[b].implicitStride << "\n"; + } + if (xfbBuffers[b].stride == TQualifier::layoutXfbStrideEnd) + xfbBuffers[b].stride = xfbBuffers[b].implicitStride; + + // "If the buffer is capturing any + // outputs with double-precision components, the stride must be a multiple of 8, otherwise it must be a + // multiple of 4, or a compile-time or link-time error results." + if (xfbBuffers[b].containsDouble && ! IsMultipleOfPow2(xfbBuffers[b].stride, 8)) { + error(infoSink, "xfb_stride must be multiple of 8 for buffer holding a double:"); + infoSink.info.prefix(EPrefixError); + infoSink.info << " xfb_buffer " << (unsigned int)b << ", xfb_stride " << xfbBuffers[b].stride << "\n"; + } else if (! IsMultipleOfPow2(xfbBuffers[b].stride, 4)) { + error(infoSink, "xfb_stride must be multiple of 4:"); + infoSink.info.prefix(EPrefixError); + infoSink.info << " xfb_buffer " << (unsigned int)b << ", xfb_stride " << xfbBuffers[b].stride << "\n"; + } + + // "The resulting stride (implicit or explicit), when divided by 4, must be less than or equal to the + // implementation-dependent constant gl_MaxTransformFeedbackInterleavedComponents." + if (xfbBuffers[b].stride > (unsigned int)(4 * resources.maxTransformFeedbackInterleavedComponents)) { + error(infoSink, "xfb_stride is too large:"); + infoSink.info.prefix(EPrefixError); + infoSink.info << " xfb_buffer " << (unsigned int)b << ", components (1/4 stride) needed are " << xfbBuffers[b].stride/4 << ", gl_MaxTransformFeedbackInterleavedComponents is " << resources.maxTransformFeedbackInterleavedComponents << "\n"; + } + } + + switch (language) { + case EShLangVertex: + break; + case EShLangTessControl: + if (vertices == TQualifier::layoutNotSet) + 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; + break; + case EShLangGeometry: + if (inputPrimitive == ElgNone) + error(infoSink, "At least one shader must specify an input layout primitive"); + if (outputPrimitive == ElgNone +#ifdef NV_EXTENSIONS + && !getGeoPassthroughEXT() +#endif + ) + error(infoSink, "At least one shader must specify an output layout primitive"); + if (vertices == TQualifier::layoutNotSet +#ifdef NV_EXTENSIONS + && !getGeoPassthroughEXT() +#endif + ) + error(infoSink, "At least one shader must specify a layout(max_vertices = value)"); + break; + case EShLangFragment: + break; + case EShLangCompute: + break; + default: + error(infoSink, "Unknown Stage."); + break; + } + + // Process the tree for any node-specific work. + class TFinalLinkTraverser : public TIntermTraverser { + public: + TFinalLinkTraverser() { } + virtual ~TFinalLinkTraverser() { } + + virtual void visitSymbol(TIntermSymbol* symbol) + { + // Implicitly size arrays. + symbol->getWritableType().adoptImplicitArraySizes(); + } + } finalLinkTraverser; + + treeRoot->traverse(&finalLinkTraverser); +} + +// +// See if the call graph contains any static recursion, which is disallowed +// by the specification. +// +void TIntermediate::checkCallGraphCycles(TInfoSink& infoSink) +{ + // Clear fields we'll use for this. + for (TGraph::iterator call = callGraph.begin(); call != callGraph.end(); ++call) { + call->visited = false; + call->currentPath = false; + call->errorGiven = false; + } + + // + // Loop, looking for a new connected subgraph. One subgraph is handled per loop iteration. + // + + TCall* newRoot; + do { + // See if we have unvisited parts of the graph. + newRoot = 0; + for (TGraph::iterator call = callGraph.begin(); call != callGraph.end(); ++call) { + if (! call->visited) { + newRoot = &(*call); + break; + } + } + + // If not, we are done. + if (! newRoot) + break; + + // Otherwise, we found a new subgraph, process it: + // See what all can be reached by this new root, and if any of + // that is recursive. This is done by depth-first traversals, seeing + // if a new call is found that was already in the currentPath (a back edge), + // thereby detecting recursion. + std::list stack; + newRoot->currentPath = true; // currentPath will be true iff it is on the stack + stack.push_back(newRoot); + while (! stack.empty()) { + // get a caller + TCall* call = stack.back(); + + // Add to the stack just one callee. + // This algorithm always terminates, because only !visited and !currentPath causes a push + // and all pushes change currentPath to true, and all pops change visited to true. + TGraph::iterator child = callGraph.begin(); + for (; child != callGraph.end(); ++child) { + + // If we already visited this node, its whole subgraph has already been processed, so skip it. + if (child->visited) + continue; + + if (call->callee == child->caller) { + if (child->currentPath) { + // Then, we found a back edge + if (! child->errorGiven) { + error(infoSink, "Recursion detected:"); + infoSink.info << " " << call->callee << " calling " << child->callee << "\n"; + child->errorGiven = true; + recursive = true; + } + } else { + child->currentPath = true; + stack.push_back(&(*child)); + break; + } + } + } + if (child == callGraph.end()) { + // no more callees, we bottomed out, never look at this node again + stack.back()->currentPath = false; + stack.back()->visited = true; + stack.pop_back(); + } + } // end while, meaning nothing left to process in this subtree + + } while (newRoot); // redundant loop check; should always exit via the 'break' above +} + +// +// See which functions are reachable from the entry point and which have bodies. +// Reachable ones with missing bodies are errors. +// Unreachable bodies are dead code. +// +void TIntermediate::checkCallGraphBodies(TInfoSink& infoSink, bool keepUncalled) +{ + // Clear fields we'll use for this. + for (TGraph::iterator call = callGraph.begin(); call != callGraph.end(); ++call) { + call->visited = false; + call->calleeBodyPosition = -1; + } + + // The top level of the AST includes function definitions (bodies). + // Compare these to function calls in the call graph. + // We'll end up knowing which have bodies, and if so, + // how to map the call-graph node to the location in the AST. + TIntermSequence &functionSequence = getTreeRoot()->getAsAggregate()->getSequence(); + std::vector reachable(functionSequence.size(), true); // so that non-functions are reachable + for (int f = 0; f < (int)functionSequence.size(); ++f) { + glslang::TIntermAggregate* node = functionSequence[f]->getAsAggregate(); + if (node && (node->getOp() == glslang::EOpFunction)) { + if (node->getName().compare(getEntryPointMangledName().c_str()) != 0) + reachable[f] = false; // so that function bodies are unreachable, until proven otherwise + for (TGraph::iterator call = callGraph.begin(); call != callGraph.end(); ++call) { + if (call->callee == node->getName()) + call->calleeBodyPosition = f; + } + } + } + + // Start call-graph traversal by visiting the entry point nodes. + for (TGraph::iterator call = callGraph.begin(); call != callGraph.end(); ++call) { + if (call->caller.compare(getEntryPointMangledName().c_str()) == 0) + call->visited = true; + } + + // Propagate 'visited' through the call-graph to every part of the graph it + // can reach (seeded with the entry-point setting above). + bool changed; + do { + changed = false; + for (auto call1 = callGraph.begin(); call1 != callGraph.end(); ++call1) { + if (call1->visited) { + for (TGraph::iterator call2 = callGraph.begin(); call2 != callGraph.end(); ++call2) { + if (! call2->visited) { + if (call1->callee == call2->caller) { + changed = true; + call2->visited = true; + } + } + } + } + } + } while (changed); + + // Any call-graph node set to visited but without a callee body is an error. + for (TGraph::iterator call = callGraph.begin(); call != callGraph.end(); ++call) { + if (call->visited) { + if (call->calleeBodyPosition == -1) { + error(infoSink, "No function definition (body) found: "); + infoSink.info << " " << call->callee << "\n"; + } else + reachable[call->calleeBodyPosition] = true; + } + } + + // Bodies in the AST not reached by the call graph are dead; + // clear them out, since they can't be reached and also can't + // be translated further due to possibility of being ill defined. + if (! keepUncalled) { + for (int f = 0; f < (int)functionSequence.size(); ++f) { + if (! reachable[f]) + functionSequence[f] = nullptr; + } + functionSequence.erase(std::remove(functionSequence.begin(), functionSequence.end(), nullptr), functionSequence.end()); + } +} + +// +// Satisfy rules for location qualifiers on inputs and outputs +// +void TIntermediate::inOutLocationCheck(TInfoSink& infoSink) +{ + // ES 3.0 requires all outputs to have location qualifiers if there is more than one output + bool fragOutWithNoLocation = false; + int numFragOut = 0; + + // TODO: linker functionality: location collision checking + + TIntermSequence& linkObjects = findLinkerObjects(); + for (size_t i = 0; i < linkObjects.size(); ++i) { + const TType& type = linkObjects[i]->getAsTyped()->getType(); + const TQualifier& qualifier = type.getQualifier(); + if (language == EShLangFragment) { + if (qualifier.storage == EvqVaryingOut && qualifier.builtIn == EbvNone) { + ++numFragOut; + if (!qualifier.hasAnyLocation()) + fragOutWithNoLocation = true; + } + } + } + + if (profile == EEsProfile) { + if (numFragOut > 1 && fragOutWithNoLocation) + error(infoSink, "when more than one fragment shader output, all must have location qualifiers"); + } +} + +TIntermSequence& TIntermediate::findLinkerObjects() const +{ + // Get the top-level globals + TIntermSequence& globals = treeRoot->getAsAggregate()->getSequence(); + + // Get the last member of the sequences, expected to be the linker-object lists + assert(globals.back()->getAsAggregate()->getOp() == EOpLinkerObjects); + + return globals.back()->getAsAggregate()->getSequence(); +} + +// See if a variable was both a user-declared output and used. +// Note: the spec discusses writing to one, but this looks at read or write, which +// is more useful, and perhaps the spec should be changed to reflect that. +bool TIntermediate::userOutputUsed() const +{ + const TIntermSequence& linkerObjects = findLinkerObjects(); + + bool found = false; + for (size_t i = 0; i < linkerObjects.size(); ++i) { + const TIntermSymbol& symbolNode = *linkerObjects[i]->getAsSymbolNode(); + if (symbolNode.getQualifier().storage == EvqVaryingOut && + symbolNode.getName().compare(0, 3, "gl_") != 0 && + inIoAccessed(symbolNode.getName())) { + found = true; + break; + } + } + + return found; +} + +// Accumulate locations used for inputs, outputs, and uniforms, 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. +// +// typeCollision is set to true if there is no direct collision, but the types in the same location +// are different. +// +int TIntermediate::addUsedLocation(const TQualifier& qualifier, const TType& type, bool& typeCollision) +{ + typeCollision = false; + + int set; + if (qualifier.isPipeInput()) + set = 0; + else if (qualifier.isPipeOutput()) + set = 1; + else if (qualifier.storage == EvqUniform) + set = 2; + else if (qualifier.storage == EvqBuffer) + set = 3; + else + return -1; + + int size; + if (qualifier.isUniformOrBuffer()) { + if (type.isExplicitlySizedArray()) + size = type.getCumulativeArraySize(); + else + size = 1; + } else { + // Strip off the outer array dimension for those having an extra one. + if (type.isArray() && qualifier.isArrayedIo(language)) { + TType elementType(type, 0); + size = computeTypeLocationSize(elementType); + } else + size = computeTypeLocationSize(type); + } + + // Locations, and components within locations. + // + // Almost always, dealing with components means a single location is involved. + // The exception is a dvec3. From the spec: + // + // "A dvec3 will consume all four components of the first location and components 0 and 1 of + // the second location. This leaves components 2 and 3 available for other component-qualified + // declarations." + // + // That means, without ever mentioning a component, a component range + // for a different location gets specified, if it's not a vertex shader input. (!) + // (A vertex shader input will show using only one location, even for a dvec3/4.) + // + // So, for the case of dvec3, we need two independent ioRanges. + + int collision = -1; // no collision + if (size == 2 && type.getBasicType() == EbtDouble && type.getVectorSize() == 3 && + (qualifier.isPipeInput() || qualifier.isPipeOutput())) { + // Dealing with dvec3 in/out split across two locations. + // Need two io-ranges. + // The case where the dvec3 doesn't start at component 0 was previously caught as overflow. + + // First range: + TRange locationRange(qualifier.layoutLocation, qualifier.layoutLocation); + TRange componentRange(0, 3); + TIoRange range(locationRange, componentRange, type.getBasicType(), 0); + + // check for collisions + collision = checkLocationRange(set, range, type, typeCollision); + if (collision < 0) { + usedIo[set].push_back(range); + + // Second range: + TRange locationRange2(qualifier.layoutLocation + 1, qualifier.layoutLocation + 1); + TRange componentRange2(0, 1); + TIoRange range2(locationRange2, componentRange2, type.getBasicType(), 0); + + // check for collisions + collision = checkLocationRange(set, range2, type, typeCollision); + if (collision < 0) + usedIo[set].push_back(range2); + } + } else { + // Not a dvec3 in/out split across two locations, generic path. + // Need a single IO-range block. + + TRange locationRange(qualifier.layoutLocation, qualifier.layoutLocation + size - 1); + TRange componentRange(0, 3); + if (qualifier.hasComponent() || type.getVectorSize() > 0) { + int consumedComponents = type.getVectorSize() * (type.getBasicType() == EbtDouble ? 2 : 1); + if (qualifier.hasComponent()) + componentRange.start = qualifier.layoutComponent; + componentRange.last = componentRange.start + consumedComponents - 1; + } + + // combine location and component ranges + TIoRange range(locationRange, componentRange, type.getBasicType(), qualifier.hasIndex() ? qualifier.layoutIndex : 0); + + // check for collisions, except for vertex inputs on desktop + if (! (profile != EEsProfile && language == EShLangVertex && qualifier.isPipeInput())) + collision = checkLocationRange(set, range, type, typeCollision); + + if (collision < 0) + usedIo[set].push_back(range); + } + + return collision; +} + +// Compare a new (the passed in) 'range' against the existing set, and see +// if there are any collisions. +// +// Returns < 0 if no collision, >= 0 if collision and the value returned is a colliding value. +// +int TIntermediate::checkLocationRange(int set, const TIoRange& range, const TType& type, bool& typeCollision) +{ + for (size_t r = 0; r < usedIo[set].size(); ++r) { + if (range.overlap(usedIo[set][r])) { + // there is a collision; pick one + return std::max(range.location.start, usedIo[set][r].location.start); + } else if (range.location.overlap(usedIo[set][r].location) && type.getBasicType() != usedIo[set][r].basicType) { + // aliased-type mismatch + typeCollision = true; + return std::max(range.location.start, usedIo[set][r].location.start); + } + } + + return -1; // no collision +} + +// Accumulate locations used for inputs, outputs, and uniforms, 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. +// +int TIntermediate::addUsedOffsets(int binding, int offset, int numOffsets) +{ + TRange bindingRange(binding, binding); + TRange offsetRange(offset, offset + numOffsets - 1); + TOffsetRange range(bindingRange, offsetRange); + + // check for collisions, except for vertex inputs on desktop + for (size_t r = 0; r < usedAtomics.size(); ++r) { + if (range.overlap(usedAtomics[r])) { + // there is a collision; pick one + return std::max(offset, usedAtomics[r].offset.start); + } + } + + usedAtomics.push_back(range); + + return -1; // no collision +} + +// Accumulate used constant_id values. +// +// Return false is one was already used. +bool TIntermediate::addUsedConstantId(int id) +{ + if (usedConstantId.find(id) != usedConstantId.end()) + return false; + + usedConstantId.insert(id); + + return true; +} + +// Recursively figure out how many locations are used up by an input or output type. +// Return the size of type, as measured by "locations". +int TIntermediate::computeTypeLocationSize(const TType& type) const +{ + // "If the declared input is an array of size n and each element takes m locations, it will be assigned m * n + // consecutive locations..." + if (type.isArray()) { + // TODO: perf: this can be flattened by using getCumulativeArraySize(), and a deref that discards all arrayness + TType elementType(type, 0); + if (type.isImplicitlySizedArray()) { + // TODO: are there valid cases of having an implicitly-sized array with a location? If so, running this code too early. + return computeTypeLocationSize(elementType); + } else + return type.getOuterArraySize() * computeTypeLocationSize(elementType); + } + + // "The locations consumed by block and structure members are determined by applying the rules above + // recursively..." + if (type.isStruct()) { + int size = 0; + for (int member = 0; member < (int)type.getStruct()->size(); ++member) { + TType memberType(type, member); + size += computeTypeLocationSize(memberType); + } + return size; + } + + // ES: "If a shader input is any scalar or vector type, it will consume a single location." + + // Desktop: "If a vertex shader input is any scalar or vector type, it will consume a single location. If a non-vertex + // shader input is a scalar or vector type other than dvec3 or dvec4, it will consume a single location, while + // types dvec3 or dvec4 will consume two consecutive locations. Inputs of type double and dvec2 will + // consume only a single location, in all stages." + if (type.isScalar()) + return 1; + if (type.isVector()) { + if (language == EShLangVertex && type.getQualifier().isPipeInput()) + return 1; + if (type.getBasicType() == EbtDouble && type.getVectorSize() > 2) + return 2; + else + return 1; + } + + // "If the declared input is an n x m single- or double-precision matrix, ... + // The number of locations assigned for each matrix will be the same as + // for an n-element array of m-component vectors..." + if (type.isMatrix()) { + TType columnType(type, 0); + return type.getMatrixCols() * computeTypeLocationSize(columnType); + } + + assert(0); + return 1; +} + +// Accumulate xfb buffer ranges 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. +// +int TIntermediate::addXfbBufferOffset(const TType& type) +{ + const TQualifier& qualifier = type.getQualifier(); + + assert(qualifier.hasXfbOffset() && qualifier.hasXfbBuffer()); + TXfbBuffer& buffer = xfbBuffers[qualifier.layoutXfbBuffer]; + + // compute the range + unsigned int size = computeTypeXfbSize(type, buffer.containsDouble); + buffer.implicitStride = std::max(buffer.implicitStride, qualifier.layoutXfbOffset + size); + TRange range(qualifier.layoutXfbOffset, qualifier.layoutXfbOffset + size - 1); + + // check for collisions + for (size_t r = 0; r < buffer.ranges.size(); ++r) { + if (range.overlap(buffer.ranges[r])) { + // there is a collision; pick an example to return + return std::max(range.start, buffer.ranges[r].start); + } + } + + buffer.ranges.push_back(range); + + return -1; // no collision +} + +// Recursively figure out how many bytes of xfb buffer are used by the given type. +// Return the size of type, in bytes. +// Sets containsDouble to true if the type contains a double. +// N.B. Caller must set containsDouble to false before calling. +unsigned int TIntermediate::computeTypeXfbSize(const TType& type, bool& containsDouble) const +{ + // "...if applied to an aggregate containing a double, the offset must also be a multiple of 8, + // and the space taken in the buffer will be a multiple of 8. + // ...within the qualified entity, subsequent components are each + // assigned, in order, to the next available offset aligned to a multiple of + // that component's size. Aggregate types are flattened down to the component + // level to get this sequence of components." + + if (type.isArray()) { + // TODO: perf: this can be flattened by using getCumulativeArraySize(), and a deref that discards all arrayness + assert(type.isExplicitlySizedArray()); + TType elementType(type, 0); + return type.getOuterArraySize() * computeTypeXfbSize(elementType, containsDouble); + } + + if (type.isStruct()) { + unsigned int size = 0; + bool structContainsDouble = false; + for (int member = 0; member < (int)type.getStruct()->size(); ++member) { + TType memberType(type, member); + // "... if applied to + // an aggregate containing a double, the offset must also be a multiple of 8, + // and the space taken in the buffer will be a multiple of 8." + bool memberContainsDouble = false; + int memberSize = computeTypeXfbSize(memberType, memberContainsDouble); + if (memberContainsDouble) { + structContainsDouble = true; + RoundToPow2(size, 8); + } + size += memberSize; + } + + if (structContainsDouble) { + containsDouble = true; + RoundToPow2(size, 8); + } + return size; + } + + int numComponents; + if (type.isScalar()) + numComponents = 1; + else if (type.isVector()) + numComponents = type.getVectorSize(); + else if (type.isMatrix()) + numComponents = type.getMatrixCols() * type.getMatrixRows(); + else { + assert(0); + numComponents = 1; + } + + if (type.getBasicType() == EbtDouble) { + containsDouble = true; + return 8 * numComponents; + } else + return 4 * numComponents; +} + +const int baseAlignmentVec4Std140 = 16; + +// Return the size and alignment of a scalar. +// The size is returned in the 'size' parameter +// Return value is the alignment of the type. +int TIntermediate::getBaseAlignmentScalar(const TType& type, int& size) +{ + switch (type.getBasicType()) { + case EbtInt64: + case EbtUint64: + case EbtDouble: size = 8; return 8; +#ifdef AMD_EXTENSIONS + case EbtFloat16: size = 2; return 2; +#endif + default: size = 4; return 4; + } +} + +// Implement base-alignment and size rules from section 7.6.2.2 Standard Uniform Block Layout +// Operates recursively. +// +// If std140 is true, it does the rounding up to vec4 size required by std140, +// otherwise it does not, yielding std430 rules. +// +// The size is returned in the 'size' parameter +// +// The stride is only non-0 for arrays or matrices, and is the stride of the +// top-level object nested within the type. E.g., for an array of matrices, +// it is the distances needed between matrices, despite the rules saying the +// stride comes from the flattening down to vectors. +// +// Return value is the alignment of the type. +int TIntermediate::getBaseAlignment(const TType& type, int& size, int& stride, bool std140, bool rowMajor) +{ + int alignment; + + // When using the std140 storage layout, structures will be laid out in buffer + // storage with its members stored in monotonically increasing order based on their + // location in the declaration. A structure and each structure member have a base + // offset and a base alignment, from which an aligned offset is computed by rounding + // the base offset up to a multiple of the base alignment. The base offset of the first + // member of a structure is taken from the aligned offset of the structure itself. The + // base offset of all other structure members is derived by taking the offset of the + // last basic machine unit consumed by the previous member and adding one. Each + // structure member is stored in memory at its aligned offset. The members of a top- + // level uniform block are laid out in buffer storage by treating the uniform block as + // a structure with a base offset of zero. + // + // 1. If the member is a scalar consuming N basic machine units, the base alignment is N. + // + // 2. If the member is a two- or four-component vector with components consuming N basic + // machine units, the base alignment is 2N or 4N, respectively. + // + // 3. If the member is a three-component vector with components consuming N + // basic machine units, the base alignment is 4N. + // + // 4. If the member is an array of scalars or vectors, the base alignment and array + // stride are set to match the base alignment of a single array element, according + // to rules (1), (2), and (3), and rounded up to the base alignment of a vec4. The + // array may have padding at the end; the base offset of the member following + // the array is rounded up to the next multiple of the base alignment. + // + // 5. If the member is a column-major matrix with C columns and R rows, the + // matrix is stored identically to an array of C column vectors with R + // components each, according to rule (4). + // + // 6. If the member is an array of S column-major matrices with C columns and + // R rows, the matrix is stored identically to a row of S X C column vectors + // with R components each, according to rule (4). + // + // 7. If the member is a row-major matrix with C columns and R rows, the matrix + // is stored identically to an array of R row vectors with C components each, + // according to rule (4). + // + // 8. If the member is an array of S row-major matrices with C columns and R + // rows, the matrix is stored identically to a row of S X R row vectors with C + // components each, according to rule (4). + // + // 9. If the member is a structure, the base alignment of the structure is N , where + // N is the largest base alignment value of any of its members, and rounded + // up to the base alignment of a vec4. The individual members of this substructure + // are then assigned offsets by applying this set of rules recursively, + // where the base offset of the first member of the sub-structure is equal to the + // aligned offset of the structure. The structure may have padding at the end; + // the base offset of the member following the sub-structure is rounded up to + // the next multiple of the base alignment of the structure. + // + // 10. If the member is an array of S structures, the S elements of the array are laid + // out in order, according to rule (9). + // + // Assuming, for rule 10: The stride is the same as the size of an element. + + stride = 0; + int dummyStride; + + // rules 4, 6, 8, and 10 + if (type.isArray()) { + // TODO: perf: this might be flattened by using getCumulativeArraySize(), and a deref that discards all arrayness + TType derefType(type, 0); + alignment = getBaseAlignment(derefType, size, dummyStride, std140, rowMajor); + if (std140) + alignment = std::max(baseAlignmentVec4Std140, alignment); + RoundToPow2(size, alignment); + stride = size; // uses full matrix size for stride of an array of matrices (not quite what rule 6/8, but what's expected) + // uses the assumption for rule 10 in the comment above + size = stride * type.getOuterArraySize(); + return alignment; + } + + // rule 9 + if (type.getBasicType() == EbtStruct) { + const TTypeList& memberList = *type.getStruct(); + + size = 0; + int maxAlignment = std140 ? baseAlignmentVec4Std140 : 0; + for (size_t m = 0; m < memberList.size(); ++m) { + int memberSize; + // 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 = getBaseAlignment(*memberList[m].type, memberSize, dummyStride, std140, + (subMatrixLayout != ElmNone) ? (subMatrixLayout == ElmRowMajor) : rowMajor); + maxAlignment = std::max(maxAlignment, memberAlignment); + RoundToPow2(size, memberAlignment); + size += memberSize; + } + + // The structure may have padding at the end; the base offset of + // the member following the sub-structure is rounded up to the next + // multiple of the base alignment of the structure. + RoundToPow2(size, maxAlignment); + + return maxAlignment; + } + + // rule 1 + if (type.isScalar()) + return getBaseAlignmentScalar(type, size); + + // rules 2 and 3 + if (type.isVector()) { + int scalarAlign = getBaseAlignmentScalar(type, size); + switch (type.getVectorSize()) { + case 2: + size *= 2; + return 2 * scalarAlign; + default: + size *= type.getVectorSize(); + return 4 * scalarAlign; + } + } + + // rules 5 and 7 + if (type.isMatrix()) { + // rule 5: deref to row, not to column, meaning the size of vector is num columns instead of num rows + TType derefType(type, 0, rowMajor); + + alignment = getBaseAlignment(derefType, size, dummyStride, std140, rowMajor); + if (std140) + alignment = std::max(baseAlignmentVec4Std140, alignment); + RoundToPow2(size, alignment); + stride = size; // use intra-matrix stride for stride of a just a matrix + if (rowMajor) + size = stride * type.getMatrixRows(); + else + size = stride * type.getMatrixCols(); + + return alignment; + } + + assert(0); // all cases should be covered above + size = baseAlignmentVec4Std140; + return baseAlignmentVec4Std140; +} + +} // end namespace glslang diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/localintermediate.h b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/localintermediate.h new file mode 100644 index 0000000..5460dd5 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/localintermediate.h @@ -0,0 +1,519 @@ +// +// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +// Copyright (C) 2016 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. +// + +#ifndef _LOCAL_INTERMEDIATE_INCLUDED_ +#define _LOCAL_INTERMEDIATE_INCLUDED_ + +#include "../Include/intermediate.h" +#include "../Public/ShaderLang.h" +#include "Versions.h" + +#include +#include + +class TInfoSink; + +namespace glslang { + +struct TMatrixSelector { + int coord1; // stay agnostic about column/row; this is parse order + int coord2; +}; + +typedef int TVectorSelector; + +const int MaxSwizzleSelectors = 4; + +template +class TSwizzleSelectors { +public: + TSwizzleSelectors() : size_(0) { } + + void push_back(selectorType comp) + { + if (size_ < MaxSwizzleSelectors) + components[size_++] = comp; + } + void resize(int s) + { + assert(s <= size_); + size_ = s; + } + int size() const { return size_; } + selectorType operator[](int i) const + { + assert(i < MaxSwizzleSelectors); + return components[i]; + } + +private: + int size_; + selectorType components[MaxSwizzleSelectors]; +}; + +// +// Some helper structures for TIntermediate. Their contents are encapsulated +// by TIntermediate. +// + +// Used for call-graph algorithms for detecting recursion, missing bodies, and dead bodies. +// A "call" is a pair: . +// There can be duplicates. General assumption is the list is small. +struct TCall { + TCall(const TString& pCaller, const TString& pCallee) : caller(pCaller), callee(pCallee) { } + TString caller; + TString callee; + bool visited; + bool currentPath; + bool errorGiven; + int calleeBodyPosition; +}; + +// A generic 1-D range. +struct TRange { + TRange(int start, int last) : start(start), last(last) { } + bool overlap(const TRange& rhs) const + { + return last >= rhs.start && start <= rhs.last; + } + int start; + int last; +}; + +// An IO range is a 3-D rectangle; the set of (location, component, index) triples all lying +// within the same location range, component range, and index value. Locations don't alias unless +// all other dimensions of their range overlap. +struct TIoRange { + TIoRange(TRange location, TRange component, TBasicType basicType, int index) + : location(location), component(component), basicType(basicType), index(index) { } + bool overlap(const TIoRange& rhs) const + { + return location.overlap(rhs.location) && component.overlap(rhs.component) && index == rhs.index; + } + TRange location; + TRange component; + TBasicType basicType; + int index; +}; + +// An offset range is a 2-D rectangle; the set of (binding, offset) pairs all lying +// within the same binding and offset range. +struct TOffsetRange { + TOffsetRange(TRange binding, TRange offset) + : binding(binding), offset(offset) { } + bool overlap(const TOffsetRange& rhs) const + { + return binding.overlap(rhs.binding) && offset.overlap(rhs.offset); + } + TRange binding; + TRange offset; +}; + +// Things that need to be tracked per xfb buffer. +struct TXfbBuffer { + TXfbBuffer() : stride(TQualifier::layoutXfbStrideEnd), implicitStride(0), containsDouble(false) { } + std::vector ranges; // byte offsets that have already been assigned + unsigned int stride; + unsigned int implicitStride; + bool containsDouble; +}; + +class TSymbolTable; +class TSymbol; +class TVariable; + +// +// Set of helper functions to help parse and build the tree. +// +class TIntermediate { +public: + explicit TIntermediate(EShLanguage l, int v = 0, EProfile p = ENoProfile) : + 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), + pixelCenterInteger(false), originUpperLeft(false), + vertexSpacing(EvsNone), vertexOrder(EvoNone), pointMode(false), earlyFragmentTests(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), + flattenUniformArrays(false), + useUnknownFormat(false) + { + localSize[0] = 1; + localSize[1] = 1; + localSize[2] = 1; + localSizeSpecId[0] = TQualifier::layoutNotSet; + localSizeSpecId[1] = TQualifier::layoutNotSet; + localSizeSpecId[2] = TQualifier::layoutNotSet; + xfbBuffers.resize(TQualifier::layoutXfbBufferEnd); + } + void setLimits(const TBuiltInResource& r) { resources = r; } + + bool postProcess(TIntermNode*, EShLanguage); + void output(TInfoSink&, bool tree); + void removeTree(); + + void setSource(EShSource s) { source = s; } + EShSource getSource() const { return source; } + void setEntryPointName(const char* ep) { entryPointName = ep; } + 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 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; } + const SpvVersion& getSpv() const { return spvVersion; } + EShLanguage getStage() const { return language; } + void addRequestedExtension(const char* extension) { requestedExtensions.insert(extension); } + const std::set& getRequestedExtensions() const { return requestedExtensions; } + + void setTreeRoot(TIntermNode* r) { treeRoot = r; } + TIntermNode* getTreeRoot() const { return treeRoot; } + void incrementEntryPointCount() { ++numEntryPoints; } + int getNumEntryPoints() const { return numEntryPoints; } + int getNumErrors() const { return numErrors; } + void addPushConstantCount() { ++numPushConstants; } + bool isRecursive() const { return recursive; } + + TIntermSymbol* addSymbol(const TVariable&); + TIntermSymbol* addSymbol(const TVariable&, const TSourceLoc&); + TIntermSymbol* addSymbol(const TType&, const TSourceLoc&); + TIntermSymbol* addSymbol(const TIntermSymbol&); + TIntermTyped* addConversion(TOperator, const TType&, TIntermTyped*) const; + TIntermTyped* addShapeConversion(TOperator, 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); + TIntermTyped* addUnaryMath(TOperator, TIntermTyped* child, TSourceLoc); + TIntermTyped* addBuiltInFunctionCall(const TSourceLoc& line, TOperator, bool unary, TIntermNode*, const TType& returnType); + bool canImplicitlyPromote(TBasicType from, TBasicType to, TOperator op = EOpNull) const; + TOperator mapTypeToConstructorOp(const TType&) const; + TIntermAggregate* growAggregate(TIntermNode* left, TIntermNode* right); + TIntermAggregate* growAggregate(TIntermNode* left, TIntermNode* right, const TSourceLoc&); + TIntermAggregate* makeAggregate(TIntermNode* node); + TIntermAggregate* makeAggregate(TIntermNode* node, const TSourceLoc&); + 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* 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; + TIntermConstantUnion* addConstantUnion(int, const TSourceLoc&, bool literal = false) const; + 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; + 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&); + TIntermBranch* addBranch(TOperator, const TSourceLoc&); + TIntermBranch* addBranch(TOperator, TIntermTyped*, const TSourceLoc&); + template TIntermTyped* addSwizzle(TSwizzleSelectors&, const TSourceLoc&); + + // Low level functions to add nodes (no conversions or other higher level transformations) + // If a type is provided, the node's type will be set to it. + TIntermBinary* addBinaryNode(TOperator op, TIntermTyped* left, TIntermTyped* right, TSourceLoc) const; + TIntermBinary* addBinaryNode(TOperator op, TIntermTyped* left, TIntermTyped* right, TSourceLoc, const TType&) const; + TIntermUnary* addUnaryNode(TOperator op, TIntermTyped* child, TSourceLoc) const; + TIntermUnary* addUnaryNode(TOperator op, TIntermTyped* child, TSourceLoc, const TType&) const; + + // Add conversion from node's type to given basic type. + TIntermTyped* convertToBasicType(TOperator op, TBasicType basicType, TIntermTyped* node) const; + + // Constant folding (in Constant.cpp) + TIntermTyped* fold(TIntermAggregate* aggrNode); + TIntermTyped* foldConstructor(TIntermAggregate* aggrNode); + TIntermTyped* foldDereference(TIntermTyped* node, int index, const TSourceLoc&); + TIntermTyped* foldSwizzle(TIntermTyped* node, TSwizzleSelectors& fields, const TSourceLoc&); + + // Tree ops + static const TIntermTyped* findLValueBase(const TIntermTyped*, bool swizzleOkay); + + // Linkage related + void addSymbolLinkageNodes(TIntermAggregate*& linkage, EShLanguage, TSymbolTable&); + void addSymbolLinkageNode(TIntermAggregate*& linkage, const TSymbol&); + + bool setInvocations(int i) + { + if (invocations != TQualifier::layoutNotSet) + return invocations == i; + invocations = i; + return true; + } + int getInvocations() const { return invocations; } + bool setVertices(int m) + { + if (vertices != TQualifier::layoutNotSet) + return vertices == m; + vertices = m; + return true; + } + int getVertices() const { return vertices; } + bool setInputPrimitive(TLayoutGeometry p) + { + if (inputPrimitive != ElgNone) + return inputPrimitive == p; + inputPrimitive = p; + return true; + } + TLayoutGeometry getInputPrimitive() const { return inputPrimitive; } + bool setVertexSpacing(TVertexSpacing s) + { + if (vertexSpacing != EvsNone) + return vertexSpacing == s; + vertexSpacing = s; + return true; + } + TVertexSpacing getVertexSpacing() const { return vertexSpacing; } + bool setVertexOrder(TVertexOrder o) + { + if (vertexOrder != EvoNone) + return vertexOrder == o; + vertexOrder = o; + return true; + } + TVertexOrder getVertexOrder() const { return vertexOrder; } + void setPointMode() { pointMode = true; } + bool getPointMode() const { return pointMode; } + + bool setLocalSize(int dim, int size) + { + if (localSize[dim] > 1) + return size == localSize[dim]; + localSize[dim] = size; + return true; + } + unsigned int getLocalSize(int dim) const { return localSize[dim]; } + + bool setLocalSizeSpecId(int dim, int id) + { + if (localSizeSpecId[dim] != TQualifier::layoutNotSet) + return id == localSizeSpecId[dim]; + localSizeSpecId[dim] = id; + return true; + } + int getLocalSizeSpecId(int dim) const { return localSizeSpecId[dim]; } + + void setXfbMode() { xfbMode = true; } + bool getXfbMode() const { return xfbMode; } + void setMultiStream() { multiStream = true; } + bool isMultiStream() const { return multiStream; } + bool setOutputPrimitive(TLayoutGeometry p) + { + if (outputPrimitive != ElgNone) + return outputPrimitive == p; + outputPrimitive = p; + return true; + } + TLayoutGeometry getOutputPrimitive() const { return outputPrimitive; } + void setOriginUpperLeft() { originUpperLeft = true; } + bool getOriginUpperLeft() const { return originUpperLeft; } + void setPixelCenterInteger() { pixelCenterInteger = true; } + bool getPixelCenterInteger() const { return pixelCenterInteger; } + void setEarlyFragmentTests() { earlyFragmentTests = true; } + bool getEarlyFragmentTests() const { return earlyFragmentTests; } + bool setDepth(TLayoutDepth d) + { + if (depthLayout != EldNone) + return depthLayout == d; + depthLayout = d; + return true; + } + TLayoutDepth getDepth() const { return depthLayout; } + void setDepthReplacing() { depthReplacing = true; } + bool isDepthReplacing() const { return depthReplacing; } + + void addBlendEquation(TBlendEquationShift b) { blendEquations |= (1 << b); } + unsigned int getBlendEquations() const { return blendEquations; } + + void addToCallGraph(TInfoSink&, const TString& caller, const TString& callee); + void merge(TInfoSink&, TIntermediate&); + void finalCheck(TInfoSink&, bool keepUncalled); + + void addIoAccessed(const TString& name) { ioAccessed.insert(name); } + bool inIoAccessed(const TString& name) const { return ioAccessed.find(name) != ioAccessed.end(); } + + int addUsedLocation(const TQualifier&, const TType&, bool& typeCollision); + int checkLocationRange(int set, const TIoRange& range, const TType&, bool& typeCollision); + int addUsedOffsets(int binding, int offset, int numOffsets); + bool addUsedConstantId(int id); + int computeTypeLocationSize(const TType&) const; + + bool setXfbBufferStride(int buffer, unsigned stride) + { + if (xfbBuffers[buffer].stride != TQualifier::layoutXfbStrideEnd) + return xfbBuffers[buffer].stride == stride; + xfbBuffers[buffer].stride = stride; + return true; + } + int addXfbBufferOffset(const TType&); + unsigned int computeTypeXfbSize(const TType&, bool& containsDouble) const; + static int getBaseAlignment(const TType&, int& size, int& stride, bool std140, bool rowMajor); + bool promote(TIntermOperator*); + +#ifdef NV_EXTENSIONS + void setLayoutOverrideCoverage() { layoutOverrideCoverage = true; } + bool getLayoutOverrideCoverage() const { return layoutOverrideCoverage; } + void setGeoPassthroughEXT() { geoPassthroughEXT = true; } + bool getGeoPassthroughEXT() const { return geoPassthroughEXT; } +#endif + + const char* addSemanticName(const TString& name) + { + return semanticNameSet.insert(name).first->c_str(); + } + + const char* const implicitThisName = "@this"; + +protected: + TIntermSymbol* addSymbol(int Id, const TString&, const TType&, const TConstUnionArray&, TIntermTyped* subtree, const TSourceLoc&); + void error(TInfoSink& infoSink, const char*); + void warn(TInfoSink& infoSink, const char*); + void mergeBodies(TInfoSink&, TIntermSequence& globals, const TIntermSequence& unitGlobals); + void mergeLinkerObjects(TInfoSink&, TIntermSequence& linkerObjects, const TIntermSequence& unitLinkerObjects); + void mergeImplicitArraySizes(TType&, const TType&); + void mergeErrorCheck(TInfoSink&, const TIntermSymbol&, const TIntermSymbol&, bool crossStage); + void checkCallGraphCycles(TInfoSink&); + void checkCallGraphBodies(TInfoSink&, bool keepUncalled); + 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&); + void addSymbolLinkageNode(TIntermAggregate*& linkage, TSymbolTable&, const TString&); + bool promoteAggregate(TIntermAggregate&); + void pushSelector(TIntermSequence&, const TVectorSelector&, const TSourceLoc&); + void pushSelector(TIntermSequence&, const TMatrixSelector&, const TSourceLoc&); + bool specConstantPropagates(const TIntermTyped&, const TIntermTyped&); + + const EShLanguage language; // stage, known at construction time + EShSource source; // source language, known a bit later + std::string entryPointName; + std::string entryPointMangledName; + + EProfile profile; + int version; + SpvVersion spvVersion; + TIntermNode* treeRoot; + std::set requestedExtensions; // cumulation of all enabled or required extensions; not connected to what subset of the shader used them + TBuiltInResource resources; + int numEntryPoints; + int numErrors; + int numPushConstants; + bool recursive; + int invocations; + int vertices; + TLayoutGeometry inputPrimitive; + TLayoutGeometry outputPrimitive; + bool pixelCenterInteger; + bool originUpperLeft; + TVertexSpacing vertexSpacing; + TVertexOrder vertexOrder; + bool pointMode; + int localSize[3]; + int localSizeSpecId[3]; + bool earlyFragmentTests; + TLayoutDepth depthLayout; + bool depthReplacing; + int blendEquations; // an 'or'ing of masks of shifts of TBlendEquationShift + bool xfbMode; + bool multiStream; + +#ifdef NV_EXTENSIONS + bool layoutOverrideCoverage; + bool geoPassthroughEXT; +#endif + + unsigned int shiftSamplerBinding; + unsigned int shiftTextureBinding; + unsigned int shiftImageBinding; + unsigned int shiftUboBinding; + unsigned int shiftSsboBinding; + bool autoMapBindings; + bool flattenUniformArrays; + bool useUnknownFormat; + + typedef std::list TGraph; + TGraph callGraph; + + std::set ioAccessed; // set of names of statically read/written I/O that might need extra checking + std::vector usedIo[4]; // sets of used locations, one for each of in, out, uniform, and buffers + std::vector usedAtomics; // sets of bindings used by atomic counters + std::vector xfbBuffers; // all the data we need to track per xfb buffer + std::unordered_set usedConstantId; // specialization constant ids used + std::set semanticNameSet; + +private: + void operator=(TIntermediate&); // prevent assignments +}; + +} // end namespace glslang + +#endif // _LOCAL_INTERMEDIATE_INCLUDED_ diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/parseConst.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/parseConst.cpp new file mode 100644 index 0000000..22b5551 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/parseConst.cpp @@ -0,0 +1,210 @@ +// +// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +// 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. +// + +// +// Traverse a tree of constants to create a single folded constant. +// It should only be used when the whole tree is known to be constant. +// + +#include "ParseHelper.h" + +namespace glslang { + +class TConstTraverser : public TIntermTraverser { +public: + TConstTraverser(const TConstUnionArray& cUnion, bool singleConstParam, TOperator constructType, const TType& t) + : unionArray(cUnion), type(t), + constructorType(constructType), singleConstantParam(singleConstParam), error(false), isMatrix(false), + matrixCols(0), matrixRows(0) { index = 0; tOp = EOpNull; } + + virtual void visitConstantUnion(TIntermConstantUnion* node); + virtual bool visitAggregate(TVisit, TIntermAggregate* node); + + int index; + TConstUnionArray unionArray; + TOperator tOp; + const TType& type; + TOperator constructorType; + bool singleConstantParam; + bool error; + int size; // size of the constructor ( 4 for vec4) + bool isMatrix; + int matrixCols; + int matrixRows; + +protected: + TConstTraverser(TConstTraverser&); + TConstTraverser& operator=(TConstTraverser&); +}; + +bool TConstTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node) +{ + if (! node->isConstructor() && node->getOp() != EOpComma) { + error = true; + + 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; + constructorType = node->getOp(); + size = node->getType().computeNumComponents(); + + if (node->getType().isMatrix()) { + isMatrix = true; + matrixCols = node->getType().getMatrixCols(); + matrixRows = node->getType().getMatrixRows(); + } + } + + for (TIntermSequence::iterator p = node->getSequence().begin(); + p != node->getSequence().end(); p++) { + + if (node->getOp() == EOpComma) + index = 0; + + (*p)->traverse(this); + } + if (flag) + { + singleConstantParam = false; + constructorType = EOpNull; + size = 0; + isMatrix = false; + matrixCols = 0; + matrixRows = 0; + } + + return false; +} + +void TConstTraverser::visitConstantUnion(TIntermConstantUnion* node) +{ + TConstUnionArray leftUnionArray(unionArray); + int instanceSize = type.computeNumComponents(); + + if (index >= instanceSize) + return; + + if (! singleConstantParam) { + int rightUnionSize = node->getType().computeNumComponents(); + + const TConstUnionArray& rightUnionArray = node->getConstArray(); + for (int i = 0; i < rightUnionSize; i++) { + if (index >= instanceSize) + return; + leftUnionArray[index] = rightUnionArray[i]; + + index++; + } + } else { + int endIndex = index + size; + const TConstUnionArray& rightUnionArray = node->getConstArray(); + if (! isMatrix) { + int count = 0; + int nodeComps = node->getType().computeNumComponents(); + for (int i = index; i < endIndex; i++) { + if (i >= instanceSize) + return; + + leftUnionArray[i] = rightUnionArray[count]; + + (index)++; + + if (nodeComps > 1) + count++; + } + } else { + // constructing a matrix, but from what? + if (node->isMatrix()) { + // Matrix from a matrix; this has the outer matrix, node is the argument matrix. + // Traverse the outer, potentially bigger matrix, fill in missing pieces with the + // identity matrix. + for (int c = 0; c < matrixCols; ++c) { + for (int r = 0; r < matrixRows; ++r) { + int targetOffset = index + c * matrixRows + r; + if (r < node->getType().getMatrixRows() && c < node->getType().getMatrixCols()) { + int srcOffset = c * node->getType().getMatrixRows() + r; + leftUnionArray[targetOffset] = rightUnionArray[srcOffset]; + } else if (r == c) + leftUnionArray[targetOffset].setDConst(1.0); + else + leftUnionArray[targetOffset].setDConst(0.0); + } + } + } else { + // matrix from vector + int count = 0; + const int startIndex = index; + int nodeComps = node->getType().computeNumComponents(); + for (int i = startIndex; i < endIndex; i++) { + if (i >= instanceSize) + return; + if (i == startIndex || (i - startIndex) % (matrixRows + 1) == 0 ) + leftUnionArray[i] = rightUnionArray[count]; + else + leftUnionArray[i].setDConst(0.0); + + index++; + + if (nodeComps > 1) + count++; + } + } + } + } +} + +bool TIntermediate::parseConstTree(TIntermNode* root, TConstUnionArray unionArray, TOperator constructorType, const TType& t, bool singleConstantParam) +{ + if (root == 0) + return false; + + TConstTraverser it(unionArray, singleConstantParam, constructorType, t); + + root->traverse(&it); + if (it.error) + return true; + else + return false; +} + +} // end namespace glslang diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/parseVersions.h b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/parseVersions.h new file mode 100755 index 0000000..0c85f8a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/parseVersions.h @@ -0,0 +1,138 @@ +// +// Copyright (C) 2016 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. +// + +// This is implemented in Versions.cpp + +#ifndef _PARSE_VERSIONS_INCLUDED_ +#define _PARSE_VERSIONS_INCLUDED_ + +#include "../Public/ShaderLang.h" +#include "../Include/InfoSink.h" +#include "Scan.h" + +#include + +namespace glslang { + +// +// Base class for parse helpers. +// This just has version-related information and checking. +// This class should be sufficient for preprocessing. +// +class TParseVersions { +public: + TParseVersions(TIntermediate& interm, int version, EProfile profile, + const SpvVersion& spvVersion, EShLanguage language, TInfoSink& infoSink, + bool forwardCompatible, EShMessages messages) + : infoSink(infoSink), version(version), profile(profile), language(language), + spvVersion(spvVersion), forwardCompatible(forwardCompatible), + intermediate(interm), messages(messages), numErrors(0), currentScanner(0) { } + virtual ~TParseVersions() { } + virtual void initializeExtensionBehavior(); + virtual void requireProfile(const TSourceLoc&, int queryProfiles, const char* featureDesc); + virtual void profileRequires(const TSourceLoc&, int queryProfiles, int minVersion, int numExtensions, const char* const extensions[], const char* featureDesc); + virtual void profileRequires(const TSourceLoc&, int queryProfiles, int minVersion, const char* const extension, const char* featureDesc); + virtual void requireStage(const TSourceLoc&, EShLanguageMask, const char* featureDesc); + 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 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*); + virtual bool extensionTurnedOn(const char* const extension); + virtual bool extensionsTurnedOn(int numExtensions, const char* const extensions[]); + virtual void updateExtensionBehavior(int line, const char* const extension, const char* behavior); + virtual void fullIntegerCheck(const TSourceLoc&, const char* op); + virtual void doubleCheck(const TSourceLoc&, const char* op); +#ifdef AMD_EXTENSIONS + virtual void float16Check(const TSourceLoc&, const char* op, bool builtIn = false); +#endif + virtual void int64Check(const TSourceLoc&, const char* op, bool builtIn = false); + virtual void spvRemoved(const TSourceLoc&, const char* op); + virtual void vulkanRemoved(const TSourceLoc&, const char* op); + virtual void requireVulkan(const TSourceLoc&, const char* op); + virtual void requireSpv(const TSourceLoc&, const char* op); + virtual bool checkExtensionsRequested(const TSourceLoc&, int numExtensions, const char* const extensions[], const char* featureDesc); + virtual void updateExtensionBehavior(const char* const extension, TExtensionBehavior); + + virtual void C_DECL error(const TSourceLoc&, const char* szReason, const char* szToken, + const char* szExtraInfoFormat, ...) = 0; + virtual void C_DECL warn(const TSourceLoc&, const char* szReason, const char* szToken, + const char* szExtraInfoFormat, ...) = 0; + virtual void C_DECL ppError(const TSourceLoc&, const char* szReason, const char* szToken, + const char* szExtraInfoFormat, ...) = 0; + virtual void C_DECL ppWarn(const TSourceLoc&, const char* szReason, const char* szToken, + const char* szExtraInfoFormat, ...) = 0; + + void addError() { ++numErrors; } + int getNumErrors() const { return numErrors; } + + void setScanner(TInputScanner* scanner) { currentScanner = scanner; } + TInputScanner* getScanner() const { return currentScanner; } + const TSourceLoc& getCurrentLoc() const { return currentScanner->getSourceLoc(); } + void setCurrentLine(int line) { currentScanner->setLine(line); } + void setCurrentColumn(int col) { currentScanner->setColumn(col); } + void setCurrentSourceName(const char* name) { currentScanner->setFile(name); } + void setCurrentString(int string) { currentScanner->setString(string); } + + void getPreamble(std::string&); + bool relaxedErrors() const { return (messages & EShMsgRelaxedErrors) != 0; } + bool suppressWarnings() const { return (messages & EShMsgSuppressWarnings) != 0; } + bool isReadingHLSL() const { return (messages & EShMsgReadHlsl) == EShMsgReadHlsl; } + + TInfoSink& infoSink; + + // compilation mode + int version; // version, updated by #version in the shader + EProfile profile; // the declared profile in the shader (core by default) + EShLanguage language; // really the stage + SpvVersion spvVersion; + bool forwardCompatible; // true if errors are to be given for use of deprecated features + TIntermediate& intermediate; // helper for making and hooking up pieces of the parse tree + +protected: + TMap extensionBehavior; // for each extension string, what its current behavior is set to + EShMessages messages; // errors/warnings/rule-sets + int numErrors; // number of compile-time errors encountered + TInputScanner* currentScanner; + +private: + explicit TParseVersions(const TParseVersions&); + TParseVersions& operator=(const TParseVersions&); +}; + +} // end namespace glslang + +#endif // _PARSE_VERSIONS_INCLUDED_ diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/Pp.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/Pp.cpp new file mode 100644 index 0000000..590290b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/Pp.cpp @@ -0,0 +1,1243 @@ +// +// 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. +\****************************************************************************/ + +#define _CRT_SECURE_NO_WARNINGS + +#include +#include +#include +#include + +#include "PpContext.h" +#include "PpTokens.h" + +namespace glslang { + +// Handle #define +int TPpContext::CPPdefine(TPpToken* ppToken) +{ + MacroSymbol mac; + + // get the macro name + int token = scanToken(ppToken); + if (token != PpAtomIdentifier) { + parseContext.ppError(ppToken->loc, "must be followed by macro name", "#define", ""); + return token; + } + if (ppToken->loc.string >= 0) { + // We are in user code; check for reserved name use: + parseContext.reservedPpErrorCheck(ppToken->loc, ppToken->name, "#define"); + } + + // save the macro name + const int defAtom = atomStrings.getAddAtom(ppToken->name); + + // gather parameters to the macro, between (...) + token = scanToken(ppToken); + if (token == '(' && ! ppToken->space) { + mac.emptyArgs = 1; + do { + token = scanToken(ppToken); + if (mac.args.size() == 0 && token == ')') + break; + if (token != PpAtomIdentifier) { + parseContext.ppError(ppToken->loc, "bad argument", "#define", ""); + + return token; + } + mac.emptyArgs = 0; + const int argAtom = atomStrings.getAddAtom(ppToken->name); + + // check for duplication of parameter name + bool duplicate = false; + for (size_t a = 0; a < mac.args.size(); ++a) { + if (mac.args[a] == argAtom) { + parseContext.ppError(ppToken->loc, "duplicate macro parameter", "#define", ""); + duplicate = true; + break; + } + } + if (! duplicate) + mac.args.push_back(argAtom); + token = scanToken(ppToken); + } while (token == ','); + if (token != ')') { + parseContext.ppError(ppToken->loc, "missing parenthesis", "#define", ""); + + return token; + } + + token = scanToken(ppToken); + } + + // record the definition of the macro + TSourceLoc defineLoc = ppToken->loc; // because ppToken is going to go to the next line before we report errors + while (token != '\n' && token != EndOfInput) { + mac.body.putToken(token, ppToken); + token = scanToken(ppToken); + if (token != '\n' && ppToken->space) + mac.body.putToken(' ', ppToken); + } + + // check for duplicate definition + MacroSymbol* existing = lookupMacroDef(defAtom); + if (existing != nullptr) { + if (! existing->undef) { + // Already defined -- need to make sure they are identical: + // "Two replacement lists are identical if and only if the preprocessing tokens in both have the same number, + // ordering, spelling, and white-space separation, where all white-space separations are considered identical." + if (existing->args.size() != mac.args.size() || existing->emptyArgs != mac.emptyArgs) + parseContext.ppError(defineLoc, "Macro redefined; different number of arguments:", "#define", atomStrings.getString(defAtom)); + else { + if (existing->args != mac.args) + parseContext.ppError(defineLoc, "Macro redefined; different argument names:", "#define", atomStrings.getString(defAtom)); + existing->body.reset(); + mac.body.reset(); + int newToken; + do { + int oldToken; + TPpToken oldPpToken; + TPpToken newPpToken; + oldToken = existing->body.getToken(parseContext, &oldPpToken); + newToken = mac.body.getToken(parseContext, &newPpToken); + if (oldToken != newToken || oldPpToken != newPpToken) { + parseContext.ppError(defineLoc, "Macro redefined; different substitutions:", "#define", atomStrings.getString(defAtom)); + break; + } + } while (newToken > 0); + } + } + *existing = mac; + } else + addMacroDef(defAtom, mac); + + return '\n'; +} + +// Handle #undef +int TPpContext::CPPundef(TPpToken* ppToken) +{ + int token = scanToken(ppToken); + if (token != PpAtomIdentifier) { + parseContext.ppError(ppToken->loc, "must be followed by macro name", "#undef", ""); + + return token; + } + + parseContext.reservedPpErrorCheck(ppToken->loc, ppToken->name, "#undef"); + + MacroSymbol* macro = lookupMacroDef(atomStrings.getAtom(ppToken->name)); + if (macro != nullptr) + macro->undef = 1; + token = scanToken(ppToken); + if (token != '\n') + parseContext.ppError(ppToken->loc, "can only be followed by a single macro name", "#undef", ""); + + return token; +} + +// Handle #else +/* Skip forward to appropriate spot. This is used both +** to skip to a #endif after seeing an #else, AND to skip to a #else, +** #elif, or #endif after a #if/#ifdef/#ifndef/#elif test was false. +*/ +int TPpContext::CPPelse(int matchelse, TPpToken* ppToken) +{ + int depth = 0; + int token = scanToken(ppToken); + + while (token != EndOfInput) { + if (token != '#') { + while (token != '\n' && token != EndOfInput) + token = scanToken(ppToken); + + if (token == EndOfInput) + return token; + + token = scanToken(ppToken); + continue; + } + + if ((token = scanToken(ppToken)) != PpAtomIdentifier) + continue; + + int nextAtom = atomStrings.getAtom(ppToken->name); + if (nextAtom == PpAtomIf || nextAtom == PpAtomIfdef || nextAtom == PpAtomIfndef) { + depth++; + 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) + --ifdepth; + break; + } + --depth; + --ifdepth; + } else if (matchelse && depth == 0) { + if (nextAtom == PpAtomElse) { + elseSeen[elsetracker] = true; + token = extraTokenCheck(nextAtom, ppToken, scanToken(ppToken)); + // found the #else we are looking for + break; + } else if (nextAtom == PpAtomElif) { + if (elseSeen[elsetracker]) + 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) { + --ifdepth; + elseSeen[elsetracker] = false; + --elsetracker; + } + + return CPPif(ppToken); + } + } else if (nextAtom == PpAtomElse) { + if (elseSeen[elsetracker]) + parseContext.ppError(ppToken->loc, "#else after #else", "#else", ""); + else + elseSeen[elsetracker] = true; + token = extraTokenCheck(nextAtom, ppToken, scanToken(ppToken)); + } else if (nextAtom == PpAtomElif) { + if (elseSeen[elsetracker]) + parseContext.ppError(ppToken->loc, "#elif after #else", "#elif", ""); + } + } + + return token; +} + +// Call when there should be no more tokens left on a line. +int TPpContext::extraTokenCheck(int contextAtom, TPpToken* ppToken, int token) +{ + if (token != '\n' && token != EndOfInput) { + static const char* message = "unexpected tokens following directive"; + + const char* label; + if (contextAtom == PpAtomElse) + label = "#else"; + else if (contextAtom == PpAtomElif) + label = "#elif"; + else if (contextAtom == PpAtomEndif) + label = "#endif"; + else if (contextAtom == PpAtomIf) + label = "#if"; + else if (contextAtom == PpAtomLine) + label = "#line"; + else + label = ""; + + if (parseContext.relaxedErrors()) + parseContext.ppWarn(ppToken->loc, message, label, ""); + else + parseContext.ppError(ppToken->loc, message, label, ""); + + while (token != '\n' && token != EndOfInput) + token = scanToken(ppToken); + } + + return token; +} + +enum eval_prec { + MIN_PRECEDENCE, + COND, LOGOR, LOGAND, OR, XOR, AND, EQUAL, RELATION, SHIFT, ADD, MUL, UNARY, + MAX_PRECEDENCE +}; + +namespace { + + int op_logor(int a, int b) { return a || b; } + int op_logand(int a, int b) { return a && b; } + int op_or(int a, int b) { return a | b; } + int op_xor(int a, int b) { return a ^ b; } + int op_and(int a, int b) { return a & b; } + int op_eq(int a, int b) { return a == b; } + int op_ne(int a, int b) { return a != b; } + int op_ge(int a, int b) { return a >= b; } + int op_le(int a, int b) { return a <= b; } + int op_gt(int a, int b) { return a > b; } + int op_lt(int a, int b) { return a < b; } + int op_shl(int a, int b) { return a << b; } + int op_shr(int a, int b) { return a >> b; } + 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_pos(int a) { return a; } + int op_neg(int a) { return -a; } + int op_cmpl(int a) { return ~a; } + int op_not(int a) { return !a; } + +}; + +struct TBinop { + int token, precedence, (*op)(int, int); +} binop[] = { + { PpAtomOr, LOGOR, op_logor }, + { PpAtomAnd, LOGAND, op_logand }, + { '|', OR, op_or }, + { '^', XOR, op_xor }, + { '&', AND, op_and }, + { PpAtomEQ, EQUAL, op_eq }, + { PpAtomNE, EQUAL, op_ne }, + { '>', RELATION, op_gt }, + { PpAtomGE, RELATION, op_ge }, + { '<', RELATION, op_lt }, + { PpAtomLE, RELATION, op_le }, + { PpAtomLeft, SHIFT, op_shl }, + { PpAtomRight, SHIFT, op_shr }, + { '+', ADD, op_add }, + { '-', ADD, op_sub }, + { '*', MUL, op_mul }, + { '/', MUL, op_div }, + { '%', MUL, op_mod }, +}; + +struct TUnop { + int token, (*op)(int); +} unop[] = { + { '+', op_pos }, + { '-', op_neg }, + { '~', op_cmpl }, + { '!', op_not }, +}; + +#define NUM_ELEMENTS(A) (sizeof(A) / sizeof(A[0])) + +int TPpContext::eval(int token, int precedence, bool shortCircuit, int& res, bool& err, TPpToken* ppToken) +{ + TSourceLoc loc = ppToken->loc; // because we sometimes read the newline before reporting the error + if (token == PpAtomIdentifier) { + if (strcmp("defined", ppToken->name) == 0) { + bool needclose = 0; + token = scanToken(ppToken); + if (token == '(') { + needclose = true; + token = scanToken(ppToken); + } + if (token != PpAtomIdentifier) { + parseContext.ppError(loc, "incorrect directive, expected identifier", "preprocessor evaluation", ""); + err = true; + res = 0; + + return token; + } + + MacroSymbol* macro = lookupMacroDef(atomStrings.getAtom(ppToken->name)); + res = macro != nullptr ? !macro->undef : 0; + token = scanToken(ppToken); + if (needclose) { + if (token != ')') { + parseContext.ppError(loc, "expected ')'", "preprocessor evaluation", ""); + err = true; + res = 0; + + return token; + } + token = scanToken(ppToken); + } + } else { + token = evalToToken(token, shortCircuit, res, err, ppToken); + return eval(token, precedence, shortCircuit, res, err, ppToken); + } + } else if (token == PpAtomConstInt) { + res = ppToken->ival; + token = scanToken(ppToken); + } else if (token == '(') { + token = scanToken(ppToken); + token = eval(token, MIN_PRECEDENCE, shortCircuit, res, err, ppToken); + if (! err) { + if (token != ')') { + parseContext.ppError(loc, "expected ')'", "preprocessor evaluation", ""); + err = true; + res = 0; + + return token; + } + token = scanToken(ppToken); + } + } else { + int op = NUM_ELEMENTS(unop) - 1; + for (; op >= 0; op--) { + if (unop[op].token == token) + break; + } + if (op >= 0) { + token = scanToken(ppToken); + token = eval(token, UNARY, shortCircuit, res, err, ppToken); + res = unop[op].op(res); + } else { + parseContext.ppError(loc, "bad expression", "preprocessor evaluation", ""); + err = true; + res = 0; + + return token; + } + } + + token = evalToToken(token, shortCircuit, res, err, ppToken); + + // Perform evaluation of binary operation, if there is one, otherwise we are done. + while (! err) { + if (token == ')' || token == '\n') + break; + int op; + for (op = NUM_ELEMENTS(binop) - 1; op >= 0; op--) { + if (binop[op].token == token) + break; + } + if (op < 0 || binop[op].precedence <= precedence) + break; + int leftSide = res; + + // Setup short-circuiting, needed for ES, unless already in a short circuit. + // (Once in a short-circuit, can't turn off again, until that whole subexpression is done. + if (! shortCircuit) { + if ((token == PpAtomOr && leftSide == 1) || + (token == PpAtomAnd && leftSide == 0)) + shortCircuit = true; + } + + token = scanToken(ppToken); + token = eval(token, binop[op].precedence, shortCircuit, res, err, ppToken); + + if (binop[op].op == op_div || binop[op].op == op_mod) { + if (res == 0) { + parseContext.ppError(loc, "division by 0", "preprocessor evaluation", ""); + res = 1; + } + } + res = binop[op].op(leftSide, res); + } + + return token; +} + +// Expand macros, skipping empty expansions, to get to the first real token in those expansions. +int TPpContext::evalToToken(int token, bool shortCircuit, int& res, bool& err, TPpToken* ppToken) +{ + while (token == PpAtomIdentifier && strcmp("defined", ppToken->name) != 0) { + int macroReturn = MacroExpand(ppToken, true, false); + if (macroReturn == 0) { + parseContext.ppError(ppToken->loc, "can't evaluate expression", "preprocessor evaluation", ""); + err = true; + res = 0; + token = scanToken(ppToken); + break; + } + if (macroReturn == -1) { + if (! shortCircuit && parseContext.profile == EEsProfile) { + const char* message = "undefined macro in expression not allowed in es profile"; + if (parseContext.relaxedErrors()) + parseContext.ppWarn(ppToken->loc, message, "preprocessor evaluation", ppToken->name); + else + parseContext.ppError(ppToken->loc, message, "preprocessor evaluation", ppToken->name); + } + } + token = scanToken(ppToken); + } + + return token; +} + +// Handle #if +int TPpContext::CPPif(TPpToken* ppToken) +{ + int token = scanToken(ppToken); + elsetracker++; + ifdepth++; + if (ifdepth > maxIfNesting) { + parseContext.ppError(ppToken->loc, "maximum nesting depth exceeded", "#if", ""); + return 0; + } + int res = 0; + bool err = false; + token = eval(token, MIN_PRECEDENCE, false, res, err, ppToken); + token = extraTokenCheck(PpAtomIf, ppToken, token); + if (!res && !err) + token = CPPelse(1, ppToken); + + return token; +} + +// Handle #ifdef +int TPpContext::CPPifdef(int defined, TPpToken* ppToken) +{ + int token = scanToken(ppToken); + if (++ifdepth > maxIfNesting) { + parseContext.ppError(ppToken->loc, "maximum nesting depth exceeded", "#ifdef", ""); + return 0; + } + elsetracker++; + if (token != PpAtomIdentifier) { + if (defined) + parseContext.ppError(ppToken->loc, "must be followed by macro name", "#ifdef", ""); + else + parseContext.ppError(ppToken->loc, "must be followed by macro name", "#ifndef", ""); + } else { + MacroSymbol* macro = lookupMacroDef(atomStrings.getAtom(ppToken->name)); + token = scanToken(ppToken); + if (token != '\n') { + parseContext.ppError(ppToken->loc, "unexpected tokens following #ifdef directive - expected a newline", "#ifdef", ""); + while (token != '\n' && token != EndOfInput) + token = scanToken(ppToken); + } + if (((macro != nullptr && !macro->undef) ? 1 : 0) != defined) + token = CPPelse(1, ppToken); + } + + return token; +} + +// Handle #include ... +// TODO: Handle macro expansions for the header name +int TPpContext::CPPinclude(TPpToken* ppToken) +{ + const TSourceLoc directiveLoc = ppToken->loc; + bool startWithLocalSearch = true; // to additionally include the extra "" paths + int token = scanToken(ppToken); + + // handle -style #include + if (token == '<') { + startWithLocalSearch = false; + token = scanHeaderName(ppToken, '>'); + } + // otherwise ppToken already has the header name and it was "header-name" style + + if (token != PpAtomConstString) { + parseContext.ppError(directiveLoc, "must be followed by a header name", "#include", ""); + return token; + } + + // Make a copy of the name because it will be overwritten by the next token scan. + const std::string filename = ppToken->name; + + // See if the directive was well formed + token = scanToken(ppToken); + if (token != '\n') { + if (token == EndOfInput) + parseContext.ppError(ppToken->loc, "expected newline after header name:", "#include", "%s", filename.c_str()); + else + parseContext.ppError(ppToken->loc, "extra content after header name:", "#include", "%s", filename.c_str()); + return token; + } + + // Process well-formed directive + + // Find the inclusion, first look in "Local" ("") paths, if requested, + // otherwise, only search the "System" (<>) paths. + TShader::Includer::IncludeResult* res = nullptr; + if (startWithLocalSearch) + res = includer.includeLocal(filename.c_str(), currentSourceFile.c_str(), includeStack.size() + 1); + if (! res || 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) { + // path for processing one or more tokens from an included header, hand off 'res' + const bool forNextLine = parseContext.lineDirectiveShouldSetNextLine(); + std::ostringstream prologue; + std::ostringstream epilogue; + prologue << "#line " << forNextLine << " " << "\"" << res->headerName << "\"\n"; + epilogue << (res->headerData[res->headerLength - 1] == '\n'? "" : "\n") << + "#line " << directiveLoc.line + forNextLine << " " << directiveLoc.getStringNameOrNum() << "\n"; + pushInput(new TokenizableIncludeFile(directiveLoc, prologue.str(), res, epilogue.str(), this)); + // There's no "current" location anymore. + parseContext.setCurrentColumn(0); + } else { + // things are okay, but there is nothing to process + includer.releaseInclude(res); + } + } else { + // error path, clean up + std::string message = + res ? 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); + } + + return token; +} + +// Handle #line +int TPpContext::CPPline(TPpToken* ppToken) +{ + // "#line must have, after macro substitution, one of the following forms: + // "#line line + // "#line line source-string-number" + + int token = scanToken(ppToken); + const TSourceLoc directiveLoc = ppToken->loc; + if (token == '\n') { + parseContext.ppError(ppToken->loc, "must by followed by an integral literal", "#line", ""); + return token; + } + + int lineRes = 0; // Line number after macro expansion. + int lineToken = 0; + bool hasFile = false; + int fileRes = 0; // Source file number after macro expansion. + const char* sourceName = nullptr; // Optional source file name. + bool lineErr = false; + bool fileErr = false; + token = eval(token, MIN_PRECEDENCE, false, lineRes, lineErr, ppToken); + if (! lineErr) { + lineToken = lineRes; + if (token == '\n') + ++lineRes; + + if (parseContext.lineDirectiveShouldSetNextLine()) + --lineRes; + parseContext.setCurrentLine(lineRes); + + if (token != '\n') { + if (token == PpAtomConstString) { + parseContext.ppRequireExtensions(directiveLoc, 1, &E_GL_GOOGLE_cpp_style_line_directive, "filename-based #line"); + // We need to save a copy of the string instead of pointing + // to the name field of the token since the name field + // will likely be overwritten by the next token scan. + sourceName = atomStrings.getString(atomStrings.getAddAtom(ppToken->name)); + parseContext.setCurrentSourceName(sourceName); + hasFile = true; + token = scanToken(ppToken); + } else { + token = eval(token, MIN_PRECEDENCE, false, fileRes, fileErr, ppToken); + if (! fileErr) { + parseContext.setCurrentString(fileRes); + hasFile = true; + } + } + } + } + if (!fileErr && !lineErr) { + parseContext.notifyLineDirective(directiveLoc.line, lineToken, hasFile, fileRes, sourceName); + } + token = extraTokenCheck(PpAtomLine, ppToken, token); + + return token; +} + +// Handle #error +int TPpContext::CPPerror(TPpToken* ppToken) +{ + int token = scanToken(ppToken); + std::string message; + TSourceLoc loc = ppToken->loc; + + while (token != '\n' && token != EndOfInput) { + if (token == PpAtomConstInt || token == PpAtomConstUint || + token == PpAtomConstInt64 || token == PpAtomConstUint64 || +#ifdef AMD_EXTENSIONS + token == PpAtomConstFloat16 || +#endif + token == PpAtomConstFloat || token == PpAtomConstDouble) { + message.append(ppToken->name); + } else if (token == PpAtomIdentifier || token == PpAtomConstString) { + message.append(ppToken->name); + } else { + message.append(atomStrings.getString(token)); + } + message.append(" "); + token = scanToken(ppToken); + } + parseContext.notifyErrorDirective(loc.line, message.c_str()); + // store this msg into the shader's information log..set the Compile Error flag!!!! + parseContext.ppError(loc, message.c_str(), "#error", ""); + + return '\n'; +} + +// Handle #pragma +int TPpContext::CPPpragma(TPpToken* ppToken) +{ + char SrcStrName[2]; + TVector tokens; + + TSourceLoc loc = ppToken->loc; // because we go to the next line before processing + int token = scanToken(ppToken); + while (token != '\n' && token != EndOfInput) { + switch (token) { + case PpAtomIdentifier: + case PpAtomConstInt: + case PpAtomConstUint: + case PpAtomConstInt64: + case PpAtomConstUint64: + case PpAtomConstFloat: + case PpAtomConstDouble: +#ifdef AMD_EXTENSIONS + case PpAtomConstFloat16: +#endif + tokens.push_back(ppToken->name); + break; + default: + SrcStrName[0] = (char)token; + SrcStrName[1] = '\0'; + tokens.push_back(SrcStrName); + } + token = scanToken(ppToken); + } + + if (token == EndOfInput) + parseContext.ppError(loc, "directive must end with a newline", "#pragma", ""); + else + parseContext.handlePragma(loc, tokens); + + return token; +} + +// #version: This is just for error checking: the version and profile are decided before preprocessing starts +int TPpContext::CPPversion(TPpToken* ppToken) +{ + int token = scanToken(ppToken); + + if (errorOnVersion || versionSeen) + parseContext.ppError(ppToken->loc, "must occur first in shader", "#version", ""); + versionSeen = true; + + if (token == '\n') { + parseContext.ppError(ppToken->loc, "must be followed by version number", "#version", ""); + + return token; + } + + if (token != PpAtomConstInt) + parseContext.ppError(ppToken->loc, "must be followed by version number", "#version", ""); + + ppToken->ival = atoi(ppToken->name); + int versionNumber = ppToken->ival; + int line = ppToken->loc.line; + token = scanToken(ppToken); + + if (token == '\n') { + parseContext.notifyVersion(line, versionNumber, nullptr); + return token; + } else { + int profileAtom = atomStrings.getAtom(ppToken->name); + if (profileAtom != PpAtomCore && + profileAtom != PpAtomCompatibility && + profileAtom != PpAtomEs) + parseContext.ppError(ppToken->loc, "bad profile name; use es, core, or compatibility", "#version", ""); + parseContext.notifyVersion(line, versionNumber, ppToken->name); + token = scanToken(ppToken); + + if (token == '\n') + return token; + else + parseContext.ppError(ppToken->loc, "bad tokens following profile -- expected newline", "#version", ""); + } + + return token; +} + +// Handle #extension +int TPpContext::CPPextension(TPpToken* ppToken) +{ + int line = ppToken->loc.line; + int token = scanToken(ppToken); + char extensionName[MaxTokenLength + 1]; + + if (token=='\n') { + parseContext.ppError(ppToken->loc, "extension name not specified", "#extension", ""); + return token; + } + + if (token != PpAtomIdentifier) + parseContext.ppError(ppToken->loc, "extension name expected", "#extension", ""); + + assert(strlen(ppToken->name) <= MaxTokenLength); + strcpy(extensionName, ppToken->name); + + token = scanToken(ppToken); + if (token != ':') { + parseContext.ppError(ppToken->loc, "':' missing after extension name", "#extension", ""); + return token; + } + + token = scanToken(ppToken); + if (token != PpAtomIdentifier) { + parseContext.ppError(ppToken->loc, "behavior for extension not specified", "#extension", ""); + return token; + } + + parseContext.updateExtensionBehavior(line, extensionName, ppToken->name); + parseContext.notifyExtensionDirective(line, extensionName, ppToken->name); + + token = scanToken(ppToken); + if (token == '\n') + return token; + else + parseContext.ppError(ppToken->loc, "extra tokens -- expected newline", "#extension",""); + + return token; +} + +int TPpContext::readCPPline(TPpToken* ppToken) +{ + int token = scanToken(ppToken); + + if (token == PpAtomIdentifier) { + switch (atomStrings.getAtom(ppToken->name)) { + case PpAtomDefine: + token = CPPdefine(ppToken); + break; + case PpAtomElse: + if (elsetracker[elseSeen]) + parseContext.ppError(ppToken->loc, "#else after #else", "#else", ""); + elsetracker[elseSeen] = true; + if (! ifdepth) + parseContext.ppError(ppToken->loc, "mismatched statements", "#else", ""); + token = extraTokenCheck(PpAtomElse, ppToken, scanToken(ppToken)); + token = CPPelse(0, ppToken); + break; + case PpAtomElif: + if (! ifdepth) + parseContext.ppError(ppToken->loc, "mismatched statements", "#elif", ""); + if (elseSeen[elsetracker]) + parseContext.ppError(ppToken->loc, "#elif after #else", "#elif", ""); + // this token is really a dont care, but we still need to eat the tokens + token = scanToken(ppToken); + while (token != '\n' && token != EndOfInput) + token = scanToken(ppToken); + token = CPPelse(0, ppToken); + break; + case PpAtomEndif: + if (! ifdepth) + parseContext.ppError(ppToken->loc, "mismatched statements", "#endif", ""); + else { + elseSeen[elsetracker] = false; + --elsetracker; + --ifdepth; + } + token = extraTokenCheck(PpAtomEndif, ppToken, scanToken(ppToken)); + break; + case PpAtomIf: + token = CPPif(ppToken); + break; + case PpAtomIfdef: + token = CPPifdef(1, ppToken); + break; + case PpAtomIfndef: + token = CPPifdef(0, ppToken); + break; + case PpAtomInclude: + if(!parseContext.isReadingHLSL()) { + parseContext.ppRequireExtensions(ppToken->loc, 1, &E_GL_GOOGLE_include_directive, "#include"); + } + token = CPPinclude(ppToken); + break; + case PpAtomLine: + token = CPPline(ppToken); + break; + case PpAtomPragma: + token = CPPpragma(ppToken); + break; + case PpAtomUndef: + token = CPPundef(ppToken); + break; + case PpAtomError: + token = CPPerror(ppToken); + break; + case PpAtomVersion: + token = CPPversion(ppToken); + break; + case PpAtomExtension: + token = CPPextension(ppToken); + break; + default: + parseContext.ppError(ppToken->loc, "invalid directive:", "#", ppToken->name); + break; + } + } else if (token != '\n' && token != EndOfInput) + parseContext.ppError(ppToken->loc, "invalid directive", "#", ""); + + while (token != '\n' && token != EndOfInput) + token = scanToken(ppToken); + + return token; +} + +// Context-dependent parsing of a #include . +// Assumes no macro expansions etc. are being done; the name is just on the current input. +// Always creates a name and returns PpAtomicConstString, unless we run out of input. +int TPpContext::scanHeaderName(TPpToken* ppToken, char delimit) +{ + bool tooLong = false; + + if (inputStack.empty()) + return EndOfInput; + + int len = 0; + ppToken->name[0] = '\0'; + do { + int ch = inputStack.back()->getch(); + + // done yet? + if (ch == delimit) { + ppToken->name[len] = '\0'; + if (tooLong) + parseContext.ppError(ppToken->loc, "header name too long", "", ""); + return PpAtomConstString; + } else if (ch == EndOfInput) + return EndOfInput; + + // found a character to expand the name with + if (len < MaxTokenLength) + ppToken->name[len++] = (char)ch; + else + tooLong = true; + } while (true); +} + +// Macro-expand a macro argument 'arg' to create 'expandedArg'. +// Does not replace 'arg'. +// Returns nullptr if no expanded argument is created. +TPpContext::TokenStream* TPpContext::PrescanMacroArg(TokenStream& arg, TPpToken* ppToken, bool newLineOkay) +{ + // expand the argument + TokenStream* expandedArg = new TokenStream; + pushInput(new tMarkerInput(this)); + pushTokenStreamInput(arg); + int token; + while ((token = scanToken(ppToken)) != tMarkerInput::marker && token != EndOfInput) { + token = tokenPaste(token, *ppToken); + if (token == tMarkerInput::marker || token == EndOfInput) + break; + if (token == PpAtomIdentifier && MacroExpand(ppToken, false, newLineOkay) != 0) + continue; + expandedArg->putToken(token, ppToken); + } + + if (token == EndOfInput) { + // MacroExpand ate the marker, so had bad input, recover + delete expandedArg; + expandedArg = nullptr; + } else { + // remove the marker + popInput(); + } + + return expandedArg; +} + +// +// Return the next token for a macro expansion, handling macro arguments, +// whose semantics are dependent on being adjacent to ##. +// +int TPpContext::tMacroInput::scan(TPpToken* ppToken) +{ + int token; + do { + token = mac->body.getToken(pp->parseContext, ppToken); + } while (token == ' '); // handle white space in macro + + // Hash operators basically turn off a round of macro substitution + // (the round done on the argument before the round done on the RHS of the + // macro definition): + // + // "A parameter in the replacement list, unless preceded by a # or ## + // preprocessing token or followed by a ## preprocessing token (see below), + // is replaced by the corresponding argument after all macros contained + // therein have been expanded." + // + // "If, in the replacement list, a parameter is immediately preceded or + // followed by a ## preprocessing token, the parameter is replaced by the + // corresponding argument's preprocessing token sequence." + + bool pasting = false; + if (postpaste) { + // don't expand next token + pasting = true; + postpaste = false; + } + + if (prepaste) { + // already know we should be on a ##, verify + assert(token == PpAtomPaste); + prepaste = false; + postpaste = true; + } + + // see if are preceding a ## + if (mac->body.peekUntokenizedPasting()) { + prepaste = true; + pasting = true; + } + + // TODO: preprocessor: properly handle whitespace (or lack of it) between tokens when expanding + if (token == PpAtomIdentifier) { + int i; + for (i = (int)mac->args.size() - 1; i >= 0; i--) + if (strcmp(pp->atomStrings.getString(mac->args[i]), ppToken->name) == 0) + break; + if (i >= 0) { + TokenStream* arg = expandedArgs[i]; + if (arg == nullptr || pasting) + arg = args[i]; + pp->pushTokenStreamInput(*arg, prepaste); + + return pp->scanToken(ppToken); + } + } + + if (token == EndOfInput) + mac->busy = 0; + + return token; +} + +// return a textual zero, for scanning a macro that was never defined +int TPpContext::tZeroInput::scan(TPpToken* ppToken) +{ + if (done) + return EndOfInput; + + strcpy(ppToken->name, "0"); + ppToken->ival = 0; + ppToken->space = false; + done = true; + + return PpAtomConstInt; +} + +// +// Check a token to see if it is a macro that should be expanded. +// If it is, and defined, push a tInput that will produce the appropriate expansion +// and return 1. +// If it is, but undefined, and expandUndef is requested, push a tInput that will +// expand to 0 and return -1. +// Otherwise, return 0 to indicate no expansion, which is not necessarily an error. +// +int TPpContext::MacroExpand(TPpToken* ppToken, bool expandUndef, bool newLineOkay) +{ + ppToken->space = false; + int macroAtom = atomStrings.getAtom(ppToken->name); + switch (macroAtom) { + case PpAtomLineMacro: + ppToken->ival = parseContext.getCurrentLoc().line; + snprintf(ppToken->name, sizeof(ppToken->name), "%d", ppToken->ival); + UngetToken(PpAtomConstInt, ppToken); + return 1; + + case PpAtomFileMacro: { + if (parseContext.getCurrentLoc().name) + parseContext.ppRequireExtensions(ppToken->loc, 1, &E_GL_GOOGLE_cpp_style_line_directive, "filename-based __FILE__"); + ppToken->ival = parseContext.getCurrentLoc().string; + snprintf(ppToken->name, sizeof(ppToken->name), "%s", ppToken->loc.getStringNameOrNum().c_str()); + UngetToken(PpAtomConstInt, ppToken); + return 1; + } + + case PpAtomVersionMacro: + ppToken->ival = parseContext.version; + snprintf(ppToken->name, sizeof(ppToken->name), "%d", ppToken->ival); + UngetToken(PpAtomConstInt, ppToken); + return 1; + + default: + break; + } + + MacroSymbol* macro = macroAtom == 0 ? nullptr : lookupMacroDef(macroAtom); + int token; + int depth = 0; + + // no recursive expansions + if (macro != nullptr && macro->busy) + return 0; + + // not expanding undefined macros + if ((macro == nullptr || macro->undef) && ! expandUndef) + return 0; + + // 0 is the value of an undefined macro + if ((macro == nullptr || macro->undef) && expandUndef) { + pushInput(new tZeroInput(this)); + return -1; + } + + tMacroInput *in = new tMacroInput(this); + + 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); + 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; + } + in->args.resize(in->mac->args.size()); + for (size_t i = 0; i < in->mac->args.size(); i++) + in->args[i] = new TokenStream; + in->expandedArgs.resize(in->mac->args.size()); + for (size_t i = 0; i < in->mac->args.size(); i++) + in->expandedArgs[i] = nullptr; + size_t arg = 0; + bool tokenRecorded = false; + do { + depth = 0; + while (1) { + token = scanToken(ppToken); + if (token == EndOfInput || token == tMarkerInput::marker) { + parseContext.ppError(loc, "End of input in macro", "macro expansion", atomStrings.getString(macroAtom)); + delete in; + return 0; + } + if (token == '\n') { + if (! newLineOkay) { + parseContext.ppError(loc, "End of line in macro substitution:", "macro expansion", atomStrings.getString(macroAtom)); + delete in; + return 0; + } + continue; + } + if (token == '#') { + parseContext.ppError(ppToken->loc, "unexpected '#'", "macro expansion", atomStrings.getString(macroAtom)); + delete in; + return 0; + } + if (in->mac->args.size() == 0 && token != ')') + break; + if (depth == 0 && (token == ',' || token == ')')) + break; + if (token == '(') + depth++; + if (token == ')') + depth--; + in->args[arg]->putToken(token, ppToken); + tokenRecorded = true; + } + if (token == ')') { + if (in->mac->args.size() == 1 && tokenRecorded == 0) + break; + arg++; + break; + } + arg++; + } while (arg < in->mac->args.size()); + + if (arg < in->mac->args.size()) + parseContext.ppError(loc, "Too few args in Macro", "macro expansion", atomStrings.getString(macroAtom)); + else if (token != ')') { + depth=0; + while (token != EndOfInput && (depth > 0 || token != ')')) { + if (token == ')') + depth--; + token = scanToken(ppToken); + if (token == '(') + depth++; + } + + if (token == EndOfInput) { + parseContext.ppError(loc, "End of input in macro", "macro expansion", atomStrings.getString(macroAtom)); + delete in; + return 0; + } + parseContext.ppError(loc, "Too many args in macro", "macro expansion", atomStrings.getString(macroAtom)); + } + + // We need both expanded and non-expanded forms of the argument, for whether or + // not token pasting will be applied later when the argument is consumed next to ##. + for (size_t i = 0; i < in->mac->args.size(); i++) + in->expandedArgs[i] = PrescanMacroArg(*in->args[i], ppToken, newLineOkay); + } + + pushInput(in); + macro->busy = 1; + macro->body.reset(); + + return 1; +} + +} // end namespace glslang diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpAtom.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpAtom.cpp new file mode 100644 index 0000000..52df3b0 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpAtom.cpp @@ -0,0 +1,179 @@ +// +// 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. +\****************************************************************************/ + +#define _CRT_SECURE_NO_WARNINGS + +#include +#include +#include + +#include "PpContext.h" +#include "PpTokens.h" + +namespace { + +using namespace glslang; + +const struct { + int val; + const char* str; +} tokens[] = { + + { PPAtomAddAssign, "+=" }, + { PPAtomSubAssign, "-=" }, + { PPAtomMulAssign, "*=" }, + { PPAtomDivAssign, "/=" }, + { PPAtomModAssign, "%=" }, + + { PpAtomRight, ">>" }, + { PpAtomLeft, "<<" }, + { PpAtomAnd, "&&" }, + { PpAtomOr, "||" }, + { PpAtomXor, "^^" }, + + { PpAtomRightAssign, ">>=" }, + { PpAtomLeftAssign, "<<=" }, + { PpAtomAndAssign, "&=" }, + { PpAtomOrAssign, "|=" }, + { PpAtomXorAssign, "^=" }, + + { PpAtomEQ, "==" }, + { PpAtomNE, "!=" }, + { PpAtomGE, ">=" }, + { PpAtomLE, "<=" }, + + { PpAtomDecrement, "--" }, + { PpAtomIncrement, "++" }, + + { PpAtomColonColon, "::" }, + + { PpAtomDefine, "define" }, + { PpAtomUndef, "undef" }, + { PpAtomIf, "if" }, + { PpAtomElif, "elif" }, + { PpAtomElse, "else" }, + { PpAtomEndif, "endif" }, + { PpAtomIfdef, "ifdef" }, + { PpAtomIfndef, "ifndef" }, + { PpAtomLine, "line" }, + { PpAtomPragma, "pragma" }, + { PpAtomError, "error" }, + + { PpAtomVersion, "version" }, + { PpAtomCore, "core" }, + { PpAtomCompatibility, "compatibility" }, + { PpAtomEs, "es" }, + { PpAtomExtension, "extension" }, + + { PpAtomLineMacro, "__LINE__" }, + { PpAtomFileMacro, "__FILE__" }, + { PpAtomVersionMacro, "__VERSION__" }, + + { PpAtomInclude, "include" }, +}; + +} // end anonymous namespace + +namespace glslang { + +// +// Initialize the atom table. +// +TStringAtomMap::TStringAtomMap() +{ + badToken.assign(""); + + // Add single character tokens to the atom table: + const char* s = "~!%^&*()-+=|,.<>/?;:[]{}#\\"; + char t[2]; + + t[1] = '\0'; + while (*s) { + t[0] = *s; + addAtomFixed(t, s[0]); + s++; + } + + // Add multiple character scanner tokens : + for (size_t ii = 0; ii < sizeof(tokens)/sizeof(tokens[0]); ii++) + addAtomFixed(tokens[ii].str, tokens[ii].val); + + nextAtom = PpAtomLast; +} + +} // end namespace glslang diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpContext.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpContext.cpp new file mode 100644 index 0000000..6a2e05f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpContext.cpp @@ -0,0 +1,115 @@ +// +// 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. +\****************************************************************************/ + +#include + +#include "PpContext.h" + +namespace glslang { + +TPpContext::TPpContext(TParseContextBase& pc, const std::string& rootFileName, TShader::Includer& inclr) : + preamble(0), strings(0), previous_token('\n'), parseContext(pc), includer(inclr), inComment(false), + rootFileName(rootFileName), + currentSourceFile(rootFileName) +{ + ifdepth = 0; + for (elsetracker = 0; elsetracker < maxIfNesting; elsetracker++) + elseSeen[elsetracker] = false; + elsetracker = 0; +} + +TPpContext::~TPpContext() +{ + delete [] preamble; + + // free up the inputStack + while (! inputStack.empty()) + popInput(); +} + +void TPpContext::setInput(TInputScanner& input, bool versionWillBeError) +{ + assert(inputStack.size() == 0); + + pushInput(new tStringInput(this, input)); + + errorOnVersion = versionWillBeError; + versionSeen = false; +} + +} // end namespace glslang diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpContext.h b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpContext.h new file mode 100644 index 0000000..f1c41ab --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpContext.h @@ -0,0 +1,614 @@ +// +// 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. +\****************************************************************************/ + +#ifndef PPCONTEXT_H +#define PPCONTEXT_H + +#include +#include + +#include "../ParseHelper.h" + +/* windows only pragma */ +#ifdef _MSC_VER + #pragma warning(disable : 4127) +#endif + +namespace glslang { + +class TPpToken { +public: + TPpToken() : space(false), ival(0), dval(0.0), i64val(0) + { + loc.init(); + name[0] = 0; + } + + // This is used for comparing macro definitions, so checks what is relevant for that. + bool operator==(const TPpToken& right) + { + return space == right.space && + ival == right.ival && dval == right.dval && i64val == right.i64val && + strncmp(name, right.name, MaxTokenLength) == 0; + } + 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; + char name[MaxTokenLength + 1]; +}; + +class TStringAtomMap { +// +// Implementation is in PpAtom.cpp +// +// Maintain a bi-directional mapping between relevant preprocessor strings and +// "atoms" which a unique integers (small, contiguous, not hash-like) per string. +// +public: + TStringAtomMap(); + + // Map string -> atom. + // Return 0 if no existing string. + int getAtom(const char* s) const + { + auto it = atomMap.find(s); + return it == atomMap.end() ? 0 : it->second; + } + + // Map a new or existing string -> atom, inventing a new atom if necessary. + int getAddAtom(const char* s) + { + int atom = getAtom(s); + if (atom == 0) { + atom = nextAtom++; + addAtomFixed(s, atom); + } + return atom; + } + + // Map atom -> string. + const char* getString(int atom) const { return stringMap[atom]->c_str(); } + +protected: + TStringAtomMap(TStringAtomMap&); + TStringAtomMap& operator=(TStringAtomMap&); + + TUnorderedMap atomMap; + TVector stringMap; // these point into the TString in atomMap + int nextAtom; + + // Bad source characters can lead to bad atoms, so gracefully handle those by + // pre-filling the table with them (to avoid if tests later). + TString badToken; + + // Add bi-directional mappings: + // - string -> atom + // - atom -> string + void addAtomFixed(const char* s, int atom) + { + auto it = atomMap.insert(std::pair(s, atom)).first; + if (stringMap.size() < (size_t)atom + 1) + stringMap.resize(atom + 100, &badToken); + stringMap[atom] = &it->first; + } +}; + +class TInputScanner; + +// This class is the result of turning a huge pile of C code communicating through globals +// into a class. This was done to allowing instancing to attain thread safety. +// Don't expect too much in terms of OO design. +class TPpContext { +public: + TPpContext(TParseContextBase&, const std::string& rootFileName, TShader::Includer&); + virtual ~TPpContext(); + + void setPreamble(const char* preamble, size_t length); + + int tokenize(TPpToken& ppToken); + int tokenPaste(int token, TPpToken&); + + class tInput { + public: + tInput(TPpContext* p) : done(false), pp(p) { } + virtual ~tInput() { } + + virtual int scan(TPpToken*) = 0; + virtual int getch() = 0; + 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) + + // Will be called when we start reading tokens from this instance + virtual void notifyActivated() {} + // Will be called when we do not read tokens from this instance anymore + virtual void notifyDeleted() {} + protected: + bool done; + TPpContext* pp; + }; + + void setInput(TInputScanner& input, bool versionWillBeError); + + void pushInput(tInput* in) + { + inputStack.push_back(in); + in->notifyActivated(); + } + void popInput() + { + inputStack.back()->notifyDeleted(); + delete inputStack.back(); + inputStack.pop_back(); + } + + // + // From PpTokens.cpp + // + + class TokenStream { + public: + TokenStream() : current(0) { } + + void putToken(int token, TPpToken* ppToken); + int getToken(TParseContextBase&, TPpToken*); + bool atEnd() { return current >= data.size(); } + bool peekTokenizedPasting(bool lastTokenPastes); + bool peekUntokenizedPasting(); + void reset() { current = 0; } + + protected: + void putSubtoken(char); + int getSubtoken(); + void ungetSubtoken(); + + TVector data; + size_t current; + }; + + // + // From Pp.cpp + // + + struct MacroSymbol { + MacroSymbol() : emptyArgs(0), busy(0), undef(0) { } + TVector args; + TokenStream body; + unsigned emptyArgs : 1; + unsigned busy : 1; + unsigned undef : 1; + }; + + typedef TMap TSymbolMap; + TSymbolMap macroDefs; // map atoms to macro definitions + MacroSymbol* lookupMacroDef(int atom) + { + auto existingMacroIt = macroDefs.find(atom); + return (existingMacroIt == macroDefs.end()) ? nullptr : &(existingMacroIt->second); + } + void addMacroDef(int atom, MacroSymbol& macroDef) { macroDefs[atom] = macroDef; } + +protected: + TPpContext(TPpContext&); + TPpContext& operator=(TPpContext&); + + TStringAtomMap atomStrings; + char* preamble; // string to parse, all before line 1 of string 0, it is 0 if no preamble + int preambleLength; + char** strings; // official strings of shader, starting a string 0 line 1 + size_t* lengths; + int numStrings; // how many official strings there are + int currentString; // which string we're currently parsing (-1 for preamble) + + // Scanner data: + int previous_token; + TParseContextBase& parseContext; + + // Get the next token from *stack* of input sources, popping input sources + // that are out of tokens, down until an input source is found that has a token. + // Return EndOfInput when there are no more tokens to be found by doing this. + int scanToken(TPpToken* ppToken) + { + int token = EndOfInput; + + while (! inputStack.empty()) { + token = inputStack.back()->scan(ppToken); + if (token != EndOfInput || inputStack.empty()) + break; + popInput(); + } + + return token; + } + int getChar() { return inputStack.back()->getch(); } + void ungetChar() { inputStack.back()->ungetch(); } + bool peekPasting() { return !inputStack.empty() && inputStack.back()->peekPasting(); } + bool endOfReplacementList() { return inputStack.empty() || inputStack.back()->endOfReplacementList(); } + + static const int maxIfNesting = 64; + + 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 + int elsetracker; // #if-#else and #endif constructs...Counter. + + class tMacroInput : public tInput { + public: + tMacroInput(TPpContext* pp) : tInput(pp), prepaste(false), postpaste(false) { } + virtual ~tMacroInput() + { + for (size_t i = 0; i < args.size(); ++i) + delete args[i]; + for (size_t i = 0; i < expandedArgs.size(); ++i) + delete expandedArgs[i]; + } + + virtual int scan(TPpToken*) override; + virtual int getch() override { assert(0); return EndOfInput; } + virtual void ungetch() override { assert(0); } + bool peekPasting() override { return prepaste; } + bool endOfReplacementList() override { return mac->body.atEnd(); } + + MacroSymbol *mac; + TVector args; + TVector expandedArgs; + + protected: + bool prepaste; // true if we are just before ## + bool postpaste; // true if we are right after ## + }; + + class tMarkerInput : public tInput { + public: + tMarkerInput(TPpContext* pp) : tInput(pp) { } + virtual int scan(TPpToken*) override + { + if (done) + return EndOfInput; + done = true; + + return marker; + } + virtual int getch() override { assert(0); return EndOfInput; } + virtual void ungetch() override { assert(0); } + static const int marker = -3; + }; + + class tZeroInput : public tInput { + public: + tZeroInput(TPpContext* pp) : tInput(pp) { } + virtual int scan(TPpToken*) override; + virtual int getch() override { assert(0); return EndOfInput; } + virtual void ungetch() override { assert(0); } + }; + + std::vector inputStack; + bool errorOnVersion; + bool versionSeen; + + // + // from Pp.cpp + // + + // Used to obtain #include content. + TShader::Includer& includer; + + int CPPdefine(TPpToken * ppToken); + int CPPundef(TPpToken * ppToken); + int CPPelse(int matchelse, TPpToken * ppToken); + int extraTokenCheck(int atom, TPpToken* ppToken, int token); + int eval(int token, int precedence, bool shortCircuit, int& res, bool& err, TPpToken * ppToken); + int evalToToken(int token, bool shortCircuit, int& res, bool& err, TPpToken * ppToken); + int CPPif (TPpToken * ppToken); + int CPPifdef(int defined, TPpToken * ppToken); + int CPPinclude(TPpToken * ppToken); + int CPPline(TPpToken * ppToken); + int CPPerror(TPpToken * ppToken); + int CPPpragma(TPpToken * ppToken); + int CPPversion(TPpToken * ppToken); + int CPPextension(TPpToken * ppToken); + int readCPPline(TPpToken * ppToken); + int scanHeaderName(TPpToken* ppToken, char delimit); + TokenStream* PrescanMacroArg(TokenStream&, TPpToken*, bool newLineOkay); + int MacroExpand(TPpToken* ppToken, bool expandUndef, bool newLineOkay); + + // + // From PpTokens.cpp + // + void pushTokenStreamInput(TokenStream&, bool pasting = false); + void UngetToken(int token, TPpToken*); + + class tTokenInput : public tInput { + public: + tTokenInput(TPpContext* pp, TokenStream* t, bool prepasting) : tInput(pp), tokens(t), lastTokenPastes(prepasting) { } + virtual int scan(TPpToken *ppToken) override { return tokens->getToken(pp->parseContext, ppToken); } + virtual int getch() override { assert(0); return EndOfInput; } + virtual void ungetch() override { assert(0); } + virtual bool peekPasting() override { return tokens->peekTokenizedPasting(lastTokenPastes); } + protected: + TokenStream* tokens; + bool lastTokenPastes; // true if the last token in the input is to be pasted, rather than consumed as a token + }; + + class tUngotTokenInput : public tInput { + public: + tUngotTokenInput(TPpContext* pp, int t, TPpToken* p) : tInput(pp), token(t), lval(*p) { } + virtual int scan(TPpToken *) override; + virtual int getch() override { assert(0); return EndOfInput; } + virtual void ungetch() override { assert(0); } + protected: + int token; + TPpToken lval; + }; + + // + // From PpScanner.cpp + // + class tStringInput : public tInput { + public: + tStringInput(TPpContext* pp, TInputScanner& i) : tInput(pp), input(&i) { } + virtual int scan(TPpToken*) override; + + // Scanner used to get source stream characters. + // - Escaped newlines are handled here, invisibly to the caller. + // - All forms of newline are handled, and turned into just a '\n'. + int getch() override + { + int ch = input->get(); + + if (ch == '\\') { + // Move past escaped newlines, as many as sequentially exist + do { + if (input->peek() == '\r' || input->peek() == '\n') { + bool allowed = pp->parseContext.lineContinuationCheck(input->getSourceLoc(), pp->inComment); + if (! allowed && pp->inComment) + return '\\'; + + // escape one newline now + ch = input->get(); + int nextch = input->get(); + if (ch == '\r' && nextch == '\n') + ch = input->get(); + else + ch = nextch; + } else + return '\\'; + } while (ch == '\\'); + } + + // handle any non-escaped newline + if (ch == '\r' || ch == '\n') { + if (ch == '\r' && input->peek() == '\n') + input->get(); + return '\n'; + } + + return ch; + } + + // Scanner used to backup the source stream characters. Newlines are + // handled here, invisibly to the caller, meaning have to undo exactly + // what getch() above does (e.g., don't leave things in the middle of a + // sequence of escaped newlines). + void ungetch() override + { + input->unget(); + + do { + int ch = input->peek(); + if (ch == '\r' || ch == '\n') { + if (ch == '\n') { + // correct for two-character newline + input->unget(); + if (input->peek() != '\r') + input->get(); + } + // now in front of a complete newline, move past an escape character + input->unget(); + if (input->peek() == '\\') + input->unget(); + else { + input->get(); + break; + } + } else + break; + } while (true); + } + + protected: + TInputScanner* input; + }; + + // Holds a reference to included file data, as well as a + // prologue and an epilogue string. This can be scanned using the tInput + // interface and acts as a single source string. + class TokenizableIncludeFile : public tInput { + public: + // Copies prologue and epilogue. The includedFile must remain valid + // until this TokenizableIncludeFile is no longer used. + TokenizableIncludeFile(const TSourceLoc& startLoc, + const std::string& prologue, + TShader::Includer::IncludeResult* includedFile, + const std::string& epilogue, + TPpContext* pp) + : tInput(pp), + prologue_(prologue), + epilogue_(epilogue), + includedFile_(includedFile), + scanner(3, strings, lengths, names, 0, 0, true), + prevScanner(nullptr), + stringInput(pp, scanner) + { + strings[0] = prologue_.data(); + strings[1] = includedFile_->headerData; + strings[2] = epilogue_.data(); + + lengths[0] = prologue_.size(); + lengths[1] = includedFile_->headerLength; + lengths[2] = epilogue_.size(); + + scanner.setLine(startLoc.line); + scanner.setString(startLoc.string); + + scanner.setFile(startLoc.name, 0); + scanner.setFile(startLoc.name, 1); + scanner.setFile(startLoc.name, 2); + } + + // tInput methods: + int scan(TPpToken* t) override { return stringInput.scan(t); } + int getch() override { return stringInput.getch(); } + void ungetch() override { stringInput.ungetch(); } + + void notifyActivated() override + { + prevScanner = pp->parseContext.getScanner(); + pp->parseContext.setScanner(&scanner); + pp->push_include(includedFile_); + } + + void notifyDeleted() override + { + pp->parseContext.setScanner(prevScanner); + pp->pop_include(); + } + + private: + TokenizableIncludeFile& operator=(const TokenizableIncludeFile&); + + // Stores the prologue for this string. + const std::string prologue_; + + // Stores the epilogue for this string. + const std::string epilogue_; + + // Points to the IncludeResult that this TokenizableIncludeFile represents. + TShader::Includer::IncludeResult* includedFile_; + + // Will point to prologue_, includedFile_->headerData and epilogue_ + // This is passed to scanner constructor. + // These do not own the storage and it must remain valid until this + // object has been destroyed. + const char* strings[3]; + // Length of str_, passed to scanner constructor. + size_t lengths[3]; + // String names + const char* names[3]; + // Scans over str_. + TInputScanner scanner; + // The previous effective scanner before the scanner in this instance + // has been activated. + TInputScanner* prevScanner; + // Delegate object implementing the tInput interface. + tStringInput stringInput; + }; + + int ScanFromString(char* s); + void missingEndifCheck(); + int lFloatConst(int len, int ch, TPpToken* ppToken); + + void push_include(TShader::Includer::IncludeResult* result) + { + currentSourceFile = result->headerName; + includeStack.push(result); + } + + void pop_include() + { + TShader::Includer::IncludeResult* include = includeStack.top(); + includeStack.pop(); + includer.releaseInclude(include); + if (includeStack.empty()) { + currentSourceFile = rootFileName; + } else { + currentSourceFile = includeStack.top()->headerName; + } + } + + bool inComment; + std::string rootFileName; + std::stack includeStack; + std::string currentSourceFile; +}; + +} // end namespace glslang + +#endif // PPCONTEXT_H diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpMemory.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpMemory.cpp new file mode 100644 index 0000000..e30db7f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpMemory.cpp @@ -0,0 +1,81 @@ +// +// 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 new file mode 100644 index 0000000..b9e7a5b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpScanner.cpp @@ -0,0 +1,868 @@ +// +// 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. +\****************************************************************************/ + +#define _CRT_SECURE_NO_WARNINGS + +#include +#include + +#include "PpContext.h" +#include "PpTokens.h" +#include "../Scan.h" + +namespace glslang { + +/////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////// Floating point constants: ///////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////// + +/* +* lFloatConst() - Scan a single- or double-precision floating point constant. Assumes that the scanner +* has seen at least one digit, followed by either a decimal '.' or the +* letter 'e', or a precision ending (e.g., F or LF). +*/ + +int TPpContext::lFloatConst(int len, int ch, TPpToken* ppToken) +{ + bool HasDecimalOrExponent = false; + int isDouble = 0; + bool generateFloat16 = false; + bool acceptFloat16 = parseContext.intermediate.getSource() == EShSourceHlsl; + bool isFloat16 = false; + bool requireHF = false; +#ifdef AMD_EXTENSIONS + if (parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float)) { + acceptFloat16 = true; + generateFloat16 = true; + requireHF = true; + } +#endif + + const auto saveName = [&](int ch) { + if (len <= MaxTokenLength) + ppToken->name[len++] = static_cast(ch); + }; + + // Decimal: + + if (ch == '.') { + HasDecimalOrExponent = true; + saveName(ch); + ch = getChar(); + while (ch >= '0' && ch <= '9') { + saveName(ch); + ch = getChar(); + } + } + + // Exponent: + + if (ch == 'e' || ch == 'E') { + HasDecimalOrExponent = true; + saveName(ch); + ch = getChar(); + if (ch == '+' || ch == '-') { + saveName(ch); + ch = getChar(); + } + if (ch >= '0' && ch <= '9') { + while (ch >= '0' && ch <= '9') { + saveName(ch); + ch = getChar(); + } + } else { + parseContext.ppError(ppToken->loc, "bad character in float exponent", "", ""); + } + } + + // Suffix: + + if (ch == 'l' || ch == 'L') { + parseContext.doubleCheck(ppToken->loc, "double floating-point suffix"); + if (! HasDecimalOrExponent) + parseContext.ppError(ppToken->loc, "float literal needs a decimal point or exponent", "", ""); + int ch2 = getChar(); + if (ch2 != 'f' && ch2 != 'F') { + ungetChar(); + ungetChar(); + } else { + saveName(ch); + saveName(ch2); + isDouble = 1; + } + } else if (acceptFloat16 && (ch == 'h' || ch == 'H')) { +#ifdef AMD_EXTENSIONS + if (generateFloat16) + parseContext.float16Check(ppToken->loc, "half floating-point suffix"); +#endif + if (!HasDecimalOrExponent) + parseContext.ppError(ppToken->loc, "float literal needs a decimal point or exponent", "", ""); + if (requireHF) { + int ch2 = getChar(); + if (ch2 != 'f' && ch2 != 'F') { + ungetChar(); + ungetChar(); + } else { + saveName(ch); + saveName(ch2); + isFloat16 = generateFloat16; + } + } else { + saveName(ch); + isFloat16 = generateFloat16; + } + } else if (ch == 'f' || ch == 'F') { + parseContext.profileRequires(ppToken->loc, EEsProfile, 300, nullptr, "floating-point suffix"); + if (! parseContext.relaxedErrors()) + parseContext.profileRequires(ppToken->loc, ~EEsProfile, 120, nullptr, "floating-point suffix"); + if (! HasDecimalOrExponent) + parseContext.ppError(ppToken->loc, "float literal needs a decimal point or exponent", "", ""); + saveName(ch); + } else + ungetChar(); + + // Patch up the name, length, etc. + + if (len > MaxTokenLength) { + len = MaxTokenLength; + parseContext.ppError(ppToken->loc, "float literal too long", "", ""); + } + ppToken->name[len] = '\0'; + + // Get the numerical value + ppToken->dval = strtod(ppToken->name, nullptr); + + // Return the right token type + if (isDouble) + return PpAtomConstDouble; + else if (isFloat16) + return PpAtomConstFloat16; + else + return PpAtomConstFloat; +} + +// +// Scanner used to tokenize source stream. +// +int TPpContext::tStringInput::scan(TPpToken* ppToken) +{ + int AlreadyComplained = 0; + int len = 0; + int ch = 0; + int ii = 0; + unsigned long long ival = 0; + bool enableInt64 = pp->parseContext.version >= 450 && pp->parseContext.extensionTurnedOn(E_GL_ARB_gpu_shader_int64); + bool acceptHalf = pp->parseContext.intermediate.getSource() == EShSourceHlsl; +#ifdef AMD_EXTENSIONS + if (pp->parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float)) + acceptHalf = true; +#endif + + const auto floatingPointChar = [&](int ch) { return ch == '.' || ch == 'e' || ch == 'E' || + ch == 'f' || ch == 'F' || + (acceptHalf && (ch == 'h' || ch == 'H')); }; + + ppToken->ival = 0; + ppToken->i64val = 0; + ppToken->space = false; + ch = getch(); + for (;;) { + while (ch == ' ' || ch == '\t') { + ppToken->space = true; + ch = getch(); + } + + ppToken->loc = pp->parseContext.getCurrentLoc(); + len = 0; + switch (ch) { + default: + // Single character token, including EndOfInput, '#' and '\' (escaped newlines are handled at a lower level, so this is just a '\' token) + if (ch > PpAtomMaxSingle) + ch = PpAtomBadToken; + return ch; + + case 'A': case 'B': case 'C': case 'D': case 'E': + case 'F': case 'G': case 'H': case 'I': case 'J': + case 'K': case 'L': case 'M': case 'N': case 'O': + case 'P': case 'Q': case 'R': case 'S': case 'T': + case 'U': case 'V': case 'W': case 'X': case 'Y': + case 'Z': case '_': + case 'a': case 'b': case 'c': case 'd': case 'e': + case 'f': case 'g': case 'h': case 'i': case 'j': + case 'k': case 'l': case 'm': case 'n': case 'o': + case 'p': case 'q': case 'r': case 's': case 't': + case 'u': case 'v': case 'w': case 'x': case 'y': + case 'z': + do { + if (len < MaxTokenLength) { + ppToken->name[len++] = (char)ch; + ch = getch(); + } else { + if (! AlreadyComplained) { + pp->parseContext.ppError(ppToken->loc, "name too long", "", ""); + AlreadyComplained = 1; + } + ch = getch(); + } + } while ((ch >= 'a' && ch <= 'z') || + (ch >= 'A' && ch <= 'Z') || + (ch >= '0' && ch <= '9') || + ch == '_'); + + // line continuation with no token before or after makes len == 0, and need to start over skipping white space, etc. + if (len == 0) + continue; + + ppToken->name[len] = '\0'; + ungetch(); + return PpAtomIdentifier; + case '0': + ppToken->name[len++] = (char)ch; + ch = getch(); + if (ch == 'x' || ch == 'X') { + // must be hexadecimal + + bool isUnsigned = false; + bool isInt64 = false; + ppToken->name[len++] = (char)ch; + ch = getch(); + if ((ch >= '0' && ch <= '9') || + (ch >= 'A' && ch <= 'F') || + (ch >= 'a' && ch <= 'f')) { + + ival = 0; + do { + if (ival <= 0x0fffffff || (enableInt64 && ival <= 0x0fffffffffffffffull)) { + ppToken->name[len++] = (char)ch; + if (ch >= '0' && ch <= '9') { + ii = ch - '0'; + } else if (ch >= 'A' && ch <= 'F') { + ii = ch - 'A' + 10; + } else if (ch >= 'a' && ch <= 'f') { + ii = ch - 'a' + 10; + } else + pp->parseContext.ppError(ppToken->loc, "bad digit in hexadecimal literal", "", ""); + ival = (ival << 4) | ii; + } else { + if (! AlreadyComplained) { + pp->parseContext.ppError(ppToken->loc, "hexadecimal literal too big", "", ""); + AlreadyComplained = 1; + } + ival = 0xffffffffffffffffull; + } + ch = getch(); + } while ((ch >= '0' && ch <= '9') || + (ch >= 'A' && ch <= 'F') || + (ch >= 'a' && ch <= 'f')); + } else { + pp->parseContext.ppError(ppToken->loc, "bad digit in hexadecimal literal", "", ""); + } + if (ch == 'u' || ch == 'U') { + if (len < MaxTokenLength) + ppToken->name[len++] = (char)ch; + isUnsigned = true; + + if (enableInt64) { + int nextCh = getch(); + if ((ch == 'u' && nextCh == 'l') || (ch == 'U' && nextCh == 'L')) { + if (len < MaxTokenLength) + ppToken->name[len++] = (char)nextCh; + isInt64 = true; + } else + ungetch(); + } + } + else if (enableInt64 && (ch == 'l' || ch == 'L')) { + if (len < MaxTokenLength) + ppToken->name[len++] = (char)ch; + isInt64 = true; + } else + ungetch(); + ppToken->name[len] = '\0'; + + if (isInt64) { + ppToken->i64val = ival; + return isUnsigned ? PpAtomConstUint64 : PpAtomConstInt64; + } else { + ppToken->ival = (int)ival; + return isUnsigned ? PpAtomConstUint : PpAtomConstInt; + } + } else { + // could be octal integer or floating point, speculative pursue octal until it must be floating point + + bool isUnsigned = false; + bool isInt64 = false; + bool octalOverflow = false; + bool nonOctal = false; + ival = 0; + + // see how much octal-like stuff we can read + while (ch >= '0' && ch <= '7') { + if (len < MaxTokenLength) + ppToken->name[len++] = (char)ch; + else if (! AlreadyComplained) { + pp->parseContext.ppError(ppToken->loc, "numeric literal too long", "", ""); + AlreadyComplained = 1; + } + if (ival <= 0x1fffffff || (enableInt64 && ival <= 0x1fffffffffffffffull)) { + ii = ch - '0'; + ival = (ival << 3) | ii; + } else + octalOverflow = true; + ch = getch(); + } + + // could be part of a float... + if (ch == '8' || ch == '9') { + nonOctal = true; + do { + if (len < MaxTokenLength) + ppToken->name[len++] = (char)ch; + else if (! AlreadyComplained) { + pp->parseContext.ppError(ppToken->loc, "numeric literal too long", "", ""); + AlreadyComplained = 1; + } + ch = getch(); + } while (ch >= '0' && ch <= '9'); + } + if (floatingPointChar(ch)) + return pp->lFloatConst(len, ch, ppToken); + + // wasn't a float, so must be octal... + if (nonOctal) + pp->parseContext.ppError(ppToken->loc, "octal literal digit too large", "", ""); + + if (ch == 'u' || ch == 'U') { + if (len < MaxTokenLength) + ppToken->name[len++] = (char)ch; + isUnsigned = true; + + if (enableInt64) { + int nextCh = getch(); + if ((ch == 'u' && nextCh == 'l') || (ch == 'U' && nextCh == 'L')) { + if (len < MaxTokenLength) + ppToken->name[len++] = (char)nextCh; + isInt64 = true; + } else + ungetch(); + } + } + else if (enableInt64 && (ch == 'l' || ch == 'L')) { + if (len < MaxTokenLength) + ppToken->name[len++] = (char)ch; + isInt64 = true; + } else + ungetch(); + ppToken->name[len] = '\0'; + + if (octalOverflow) + pp->parseContext.ppError(ppToken->loc, "octal literal too big", "", ""); + + if (isInt64) { + ppToken->i64val = ival; + return isUnsigned ? PpAtomConstUint64 : PpAtomConstInt64; + } else { + ppToken->ival = (int)ival; + return isUnsigned ? PpAtomConstUint : PpAtomConstInt; + } + } + break; + case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + // can't be hexadecimal or octal, is either decimal or floating point + + do { + if (len < MaxTokenLength) + ppToken->name[len++] = (char)ch; + else if (! AlreadyComplained) { + pp->parseContext.ppError(ppToken->loc, "numeric literal too long", "", ""); + AlreadyComplained = 1; + } + ch = getch(); + } while (ch >= '0' && ch <= '9'); + if (floatingPointChar(ch)) + return pp->lFloatConst(len, ch, ppToken); + else { + // Finish handling signed and unsigned integers + int numericLen = len; + bool isUnsigned = false; + bool isInt64 = false; + if (ch == 'u' || ch == 'U') { + if (len < MaxTokenLength) + ppToken->name[len++] = (char)ch; + isUnsigned = true; + + if (enableInt64) { + int nextCh = getch(); + if ((ch == 'u' && nextCh == 'l') || (ch == 'U' && nextCh == 'L')) { + if (len < MaxTokenLength) + ppToken->name[len++] = (char)nextCh; + isInt64 = true; + } else + ungetch(); + } + } else if (enableInt64 && (ch == 'l' || ch == 'L')) { + if (len < MaxTokenLength) + ppToken->name[len++] = (char)ch; + isInt64 = true; + } else + ungetch(); + + ppToken->name[len] = '\0'; + ival = 0; + const unsigned oneTenthMaxInt = 0xFFFFFFFFu / 10; + const unsigned remainderMaxInt = 0xFFFFFFFFu - 10 * oneTenthMaxInt; + const unsigned long long oneTenthMaxInt64 = 0xFFFFFFFFFFFFFFFFull / 10; + const unsigned long long remainderMaxInt64 = 0xFFFFFFFFFFFFFFFFull - 10 * oneTenthMaxInt64; + 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)))) { + pp->parseContext.ppError(ppToken->loc, "numeric literal too big", "", ""); + ival = 0xFFFFFFFFFFFFFFFFull; + break; + } else + ival = ival * 10 + ch; + } + + if (isInt64) { + ppToken->i64val = ival; + return isUnsigned ? PpAtomConstUint64 : PpAtomConstInt64; + } else { + ppToken->ival = (int)ival; + return isUnsigned ? PpAtomConstUint : PpAtomConstInt; + } + } + break; + case '-': + ch = getch(); + if (ch == '-') { + return PpAtomDecrement; + } else if (ch == '=') { + return PPAtomSubAssign; + } else { + ungetch(); + return '-'; + } + case '+': + ch = getch(); + if (ch == '+') { + return PpAtomIncrement; + } else if (ch == '=') { + return PPAtomAddAssign; + } else { + ungetch(); + return '+'; + } + case '*': + ch = getch(); + if (ch == '=') { + return PPAtomMulAssign; + } else { + ungetch(); + return '*'; + } + case '%': + ch = getch(); + if (ch == '=') { + return PPAtomModAssign; + } else { + ungetch(); + return '%'; + } + case '^': + ch = getch(); + if (ch == '^') { + return PpAtomXor; + } else { + if (ch == '=') + return PpAtomXorAssign; + else{ + ungetch(); + return '^'; + } + } + + case '=': + ch = getch(); + if (ch == '=') { + return PpAtomEQ; + } else { + ungetch(); + return '='; + } + case '!': + ch = getch(); + if (ch == '=') { + return PpAtomNE; + } else { + ungetch(); + return '!'; + } + case '|': + ch = getch(); + if (ch == '|') { + return PpAtomOr; + } else if (ch == '=') { + return PpAtomOrAssign; + } else { + ungetch(); + return '|'; + } + case '&': + ch = getch(); + if (ch == '&') { + return PpAtomAnd; + } else if (ch == '=') { + return PpAtomAndAssign; + } else { + ungetch(); + return '&'; + } + case '<': + ch = getch(); + if (ch == '<') { + ch = getch(); + if (ch == '=') + return PpAtomLeftAssign; + else { + ungetch(); + return PpAtomLeft; + } + } else if (ch == '=') { + return PpAtomLE; + } else { + ungetch(); + return '<'; + } + case '>': + ch = getch(); + if (ch == '>') { + ch = getch(); + if (ch == '=') + return PpAtomRightAssign; + else { + ungetch(); + return PpAtomRight; + } + } else if (ch == '=') { + return PpAtomGE; + } else { + ungetch(); + return '>'; + } + case '.': + ch = getch(); + if (ch >= '0' && ch <= '9') { + ungetch(); + return pp->lFloatConst(0, '.', ppToken); + } else { + ungetch(); + return '.'; + } + case '/': + ch = getch(); + if (ch == '/') { + pp->inComment = true; + do { + ch = getch(); + } while (ch != '\n' && ch != EndOfInput); + ppToken->space = true; + pp->inComment = false; + + return ch; + } else if (ch == '*') { + ch = getch(); + do { + while (ch != '*') { + if (ch == EndOfInput) { + pp->parseContext.ppError(ppToken->loc, "End of input in comment", "comment", ""); + return ch; + } + ch = getch(); + } + ch = getch(); + if (ch == EndOfInput) { + pp->parseContext.ppError(ppToken->loc, "End of input in comment", "comment", ""); + return ch; + } + } while (ch != '/'); + ppToken->space = true; + // loop again to get the next token... + break; + } else if (ch == '=') { + return PPAtomDivAssign; + } else { + ungetch(); + return '/'; + } + break; + case '"': + // TODO: If this gets enhanced to handle escape sequences, or + // anything that is different than what #include needs, then + // #include needs to use scanHeaderName() for this. + ch = getch(); + while (ch != '"' && ch != '\n' && ch != EndOfInput) { + if (len < MaxTokenLength) { + ppToken->name[len] = (char)ch; + len++; + ch = getch(); + } else + break; + }; + ppToken->name[len] = '\0'; + if (ch != '"') { + ungetch(); + pp->parseContext.ppError(ppToken->loc, "End of line in string", "string", ""); + } + return PpAtomConstString; + case ':': + ch = getch(); + if (ch == ':') + return PpAtomColonColon; + ungetch(); + return ':'; + } + + ch = getch(); + } +} + +// +// The main functional entry point into the preprocessor, which will +// scan the source strings to figure out and return the next processing token. +// +// Return the token, or EndOfInput when no more tokens. +// +int TPpContext::tokenize(TPpToken& ppToken) +{ + for(;;) { + int token = scanToken(&ppToken); + + // Handle token-pasting logic + token = tokenPaste(token, ppToken); + + if (token == EndOfInput) { + missingEndifCheck(); + return EndOfInput; + } + if (token == '#') { + if (previous_token == '\n') { + token = readCPPline(&ppToken); + if (token == EndOfInput) { + missingEndifCheck(); + return EndOfInput; + } + continue; + } else { + parseContext.ppError(ppToken.loc, "preprocessor directive cannot be preceded by another token", "#", ""); + return EndOfInput; + } + } + previous_token = token; + + if (token == '\n') + continue; + + // expand macros + if (token == PpAtomIdentifier && MacroExpand(&ppToken, false, true) != 0) + continue; + + switch (token) { + case PpAtomIdentifier: + case PpAtomConstInt: + case PpAtomConstUint: + case PpAtomConstFloat: + case PpAtomConstInt64: + case PpAtomConstUint64: + case PpAtomConstDouble: +#ifdef AMD_EXTENSIONS + case PpAtomConstFloat16: +#endif + if (ppToken.name[0] == '\0') + continue; + break; + case PpAtomConstString: + if (parseContext.intermediate.getSource() != EShSourceHlsl) { + // HLSL allows string literals. + parseContext.ppError(ppToken.loc, "string literals not supported", "\"\"", ""); + continue; + } + break; + case '\'': + parseContext.ppError(ppToken.loc, "character literals not supported", "\'", ""); + continue; + default: + strcpy(ppToken.name, atomStrings.getString(token)); + break; + } + + return token; + } +} + +// +// Do all token-pasting related combining of two pasted tokens when getting a +// stream of tokens from a replacement list. Degenerates to no processing if a +// replacement list is not the source of the token stream. +// +int TPpContext::tokenPaste(int token, TPpToken& ppToken) +{ + // starting with ## is illegal, skip to next token + if (token == PpAtomPaste) { + parseContext.ppError(ppToken.loc, "unexpected location", "##", ""); + return scanToken(&ppToken); + } + + int resultToken = token; // "foo" pasted with "35" is an identifier, not a number + + // ## can be chained, process all in the chain at once + while (peekPasting()) { + TPpToken pastedPpToken; + + // next token has to be ## + token = scanToken(&pastedPpToken); + assert(token == PpAtomPaste); + + if (endOfReplacementList()) { + parseContext.ppError(ppToken.loc, "unexpected location; end of replacement list", "##", ""); + break; + } + + // get the token after the ## + token = scanToken(&pastedPpToken); + + // get the token text + switch (resultToken) { + case PpAtomIdentifier: + // already have the correct text in token.names + break; + case '=': + case '!': + case '-': + case '~': + case '+': + case '*': + case '/': + case '%': + case '<': + case '>': + case '|': + case '^': + case '&': + case PpAtomRight: + case PpAtomLeft: + case PpAtomAnd: + case PpAtomOr: + case PpAtomXor: + strcpy(ppToken.name, atomStrings.getString(resultToken)); + strcpy(pastedPpToken.name, atomStrings.getString(token)); + break; + default: + parseContext.ppError(ppToken.loc, "not supported for these tokens", "##", ""); + return resultToken; + } + + // combine the tokens + if (strlen(ppToken.name) + strlen(pastedPpToken.name) > MaxTokenLength) { + parseContext.ppError(ppToken.loc, "combined tokens are too long", "##", ""); + return resultToken; + } + strncat(ppToken.name, pastedPpToken.name, MaxTokenLength - strlen(ppToken.name)); + + // correct the kind of token we are making, if needed (identifiers stay identifiers) + if (resultToken != PpAtomIdentifier) { + int newToken = atomStrings.getAtom(ppToken.name); + if (newToken > 0) + resultToken = newToken; + else + parseContext.ppError(ppToken.loc, "combined token is invalid", "##", ""); + } + } + + return resultToken; +} + +// Checks if we've seen balanced #if...#endif +void TPpContext::missingEndifCheck() +{ + if (ifdepth > 0) + parseContext.ppError(parseContext.getCurrentLoc(), "missing #endif", "", ""); +} + +} // end namespace glslang diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpSymbols.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpSymbols.cpp new file mode 100644 index 0000000..700d82e --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpSymbols.cpp @@ -0,0 +1,77 @@ +// +// 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 new file mode 100644 index 0000000..7fa06a5 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpTokens.cpp @@ -0,0 +1,349 @@ +// +// 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. +\****************************************************************************/ + +// +// For recording and playing back the stream of tokens in a macro definition. +// + +#if (defined(_MSC_VER) && _MSC_VER < 1900 /*vs2015*/) +#define _CRT_SECURE_NO_WARNINGS +#define snprintf sprintf_s +#endif + +#include +#include +#include +#include + +#include "PpContext.h" +#include "PpTokens.h" + +namespace glslang { + +// push onto back of stream +void TPpContext::TokenStream::putSubtoken(char subtoken) +{ + data.push_back(static_cast(subtoken)); +} + +// get the next token in stream +int TPpContext::TokenStream::getSubtoken() +{ + if (current < data.size()) + return data[current++]; + else + return EndOfInput; +} + +// back up one position in the stream +void TPpContext::TokenStream::ungetSubtoken() +{ + if (current > 0) + --current; +} + +// Add a complete token (including backing string) to the end of a list +// for later playback. +void TPpContext::TokenStream::putToken(int token, TPpToken* ppToken) +{ + const char* s; + char* str = NULL; + + assert((token & ~0xff) == 0); + putSubtoken(static_cast(token)); + + switch (token) { + case PpAtomIdentifier: + case PpAtomConstString: + s = ppToken->name; + while (*s) + putSubtoken(*s++); + putSubtoken(0); + break; + case PpAtomConstInt: + case PpAtomConstUint: + case PpAtomConstInt64: + case PpAtomConstUint64: + case PpAtomConstFloat: + case PpAtomConstDouble: +#ifdef AMD_EXTENSIONS + case PpAtomConstFloat16: +#endif + str = ppToken->name; + while (*str) { + putSubtoken(*str); + str++; + } + putSubtoken(0); + break; + default: + break; + } +} + +// Read the next token from a token stream. +// (Not the source stream, but a stream used to hold a tokenized macro). +int TPpContext::TokenStream::getToken(TParseContextBase& parseContext, TPpToken *ppToken) +{ + int len; + int ch; + + int subtoken = getSubtoken(); + ppToken->loc = parseContext.getCurrentLoc(); + switch (subtoken) { + case '#': + // Check for ##, unless the current # is the last character + if (current < data.size()) { + if (getSubtoken() == '#') { + parseContext.requireProfile(ppToken->loc, ~EEsProfile, "token pasting (##)"); + parseContext.profileRequires(ppToken->loc, ~EEsProfile, 130, 0, "token pasting (##)"); + subtoken = PpAtomPaste; + } else + ungetSubtoken(); + } + break; + case PpAtomConstString: + case PpAtomIdentifier: + case PpAtomConstFloat: + case PpAtomConstDouble: +#ifdef AMD_EXTENSIONS + case PpAtomConstFloat16: +#endif + case PpAtomConstInt: + case PpAtomConstUint: + case PpAtomConstInt64: + case PpAtomConstUint64: + len = 0; + ch = getSubtoken(); + while (ch != 0 && ch != EndOfInput) { + if (len < MaxTokenLength) { + ppToken->name[len] = (char)ch; + len++; + ch = getSubtoken(); + } else { + parseContext.error(ppToken->loc, "token too long", "", ""); + break; + } + } + ppToken->name[len] = 0; + + switch (subtoken) { + case PpAtomIdentifier: + break; + case PpAtomConstString: + break; + case PpAtomConstFloat: + case PpAtomConstDouble: +#ifdef AMD_EXTENSIONS + case PpAtomConstFloat16: +#endif + ppToken->dval = atof(ppToken->name); + break; + case PpAtomConstInt: + 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); + else + ppToken->ival = (int)strtol(ppToken->name, 0, 8); + } else + ppToken->ival = atoi(ppToken->name); + break; + case PpAtomConstUint: + 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); + else + ppToken->ival = (int)strtoul(ppToken->name, 0, 8); + } else + ppToken->ival = (int)strtoul(ppToken->name, 0, 10); + break; + case PpAtomConstInt64: + if (len > 0 && ppToken->name[0] == '0') { + if (len > 1 && (ppToken->name[1] == 'x' || ppToken->name[1] == 'X')) + ppToken->i64val = strtoll(ppToken->name, nullptr, 16); + else + ppToken->i64val = strtoll(ppToken->name, nullptr, 8); + } else + ppToken->i64val = atoll(ppToken->name); + break; + case PpAtomConstUint64: + if (len > 0 && ppToken->name[0] == '0') { + if (len > 1 && (ppToken->name[1] == 'x' || ppToken->name[1] == 'X')) + ppToken->i64val = (long long)strtoull(ppToken->name, nullptr, 16); + else + ppToken->i64val = (long long)strtoull(ppToken->name, nullptr, 8); + } else + ppToken->i64val = (long long)strtoull(ppToken->name, 0, 10); + break; + } + } + + return subtoken; +} + +// We are pasting if +// 1. we are preceding a pasting operator within this stream +// or +// 2. the entire macro is preceding a pasting operator (lastTokenPastes) +// and we are also on the last token +bool TPpContext::TokenStream::peekTokenizedPasting(bool lastTokenPastes) +{ + // 1. preceding ##? + + size_t savePos = current; + int subtoken; + // skip white space + do { + subtoken = getSubtoken(); + } while (subtoken == ' '); + current = savePos; + if (subtoken == PpAtomPaste) + return true; + + // 2. last token and we've been told after this there will be a ## + + if (! lastTokenPastes) + return false; + // Getting here means the last token will be pasted, after this + + // Are we at the last non-whitespace token? + savePos = current; + bool moreTokens = false; + do { + subtoken = getSubtoken(); + if (subtoken == EndOfInput) + break; + if (subtoken != ' ') { + moreTokens = true; + break; + } + } while (true); + current = savePos; + + return !moreTokens; +} + +// See if the next non-white-space tokens are two consecutive # +bool TPpContext::TokenStream::peekUntokenizedPasting() +{ + // don't return early, have to restore this + size_t savePos = current; + + // skip white-space + int subtoken; + do { + subtoken = getSubtoken(); + } while (subtoken == ' '); + + // check for ## + bool pasting = false; + if (subtoken == '#') { + subtoken = getSubtoken(); + if (subtoken == '#') + pasting = true; + } + + current = savePos; + + return pasting; +} + +void TPpContext::pushTokenStreamInput(TokenStream& ts, bool prepasting) +{ + pushInput(new tTokenInput(this, &ts, prepasting)); + ts.reset(); +} + +int TPpContext::tUngotTokenInput::scan(TPpToken* ppToken) +{ + if (done) + return EndOfInput; + + int ret = token; + *ppToken = lval; + done = true; + + return ret; +} + +void TPpContext::UngetToken(int token, TPpToken* ppToken) +{ + pushInput(new tUngotTokenInput(this, token, ppToken)); +} + +} // end namespace glslang diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpTokens.h b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpTokens.h new file mode 100644 index 0000000..ee442d6 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpTokens.h @@ -0,0 +1,177 @@ +// +// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +// 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. +\****************************************************************************/ + +#ifndef PARSER_H +#define PARSER_H + +namespace glslang { + +// Multi-character tokens +enum EFixedAtoms { + // single character tokens get their own char value as their token; start here for multi-character tokens + PpAtomMaxSingle = 127, + + // replace bad character tokens with this, to avoid accidental aliasing with the below + PpAtomBadToken, + + // Operators + + PPAtomAddAssign, + PPAtomSubAssign, + PPAtomMulAssign, + PPAtomDivAssign, + PPAtomModAssign, + + PpAtomRight, + PpAtomLeft, + + PpAtomRightAssign, + PpAtomLeftAssign, + PpAtomAndAssign, + PpAtomOrAssign, + PpAtomXorAssign, + + PpAtomAnd, + PpAtomOr, + PpAtomXor, + + PpAtomEQ, + PpAtomNE, + PpAtomGE, + PpAtomLE, + + PpAtomDecrement, + PpAtomIncrement, + + PpAtomColonColon, + + PpAtomPaste, + + // Constants + + PpAtomConstInt, + PpAtomConstUint, + PpAtomConstInt64, + PpAtomConstUint64, + PpAtomConstFloat, + PpAtomConstDouble, + PpAtomConstFloat16, + PpAtomConstString, + + // Identifiers + PpAtomIdentifier, + + // preprocessor "keywords" + + PpAtomDefine, + PpAtomUndef, + + PpAtomIf, + PpAtomIfdef, + PpAtomIfndef, + PpAtomElse, + PpAtomElif, + PpAtomEndif, + + PpAtomLine, + PpAtomPragma, + PpAtomError, + + // #version ... + PpAtomVersion, + PpAtomCore, + PpAtomCompatibility, + PpAtomEs, + + // #extension + PpAtomExtension, + + // __LINE__, __FILE__, __VERSION__ + + PpAtomLineMacro, + PpAtomFileMacro, + PpAtomVersionMacro, + + // #include + PpAtomInclude, + + PpAtomLast, +}; + +} // end namespace glslang + +#endif /* not PARSER_H */ diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/propagateNoContraction.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/propagateNoContraction.cpp new file mode 100644 index 0000000..ae95688 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/propagateNoContraction.cpp @@ -0,0 +1,866 @@ +// +// Copyright (C) 2015-2016 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 Google Inc. 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. + +// +// Visit the nodes in the glslang intermediate tree representation to +// propagate the 'noContraction' qualifier. +// + +#include "propagateNoContraction.h" + +#include +#include +#include +#include +#include + +#include "localintermediate.h" +namespace { + +// Use a string to hold the access chain information, as in most cases the +// access chain is short and may contain only one element, which is the symbol +// ID. +// Example: struct {float a; float b;} s; +// Object s.a will be represented with: /0 +// Object s.b will be represented with: /1 +// Object s will be represented with: +// For members of vector, matrix and arrays, they will be represented with the +// same symbol ID of their container symbol objects. This is because their +// preciseness is always the same as their container symbol objects. +typedef std::string ObjectAccessChain; + +// The delimiter used in the ObjectAccessChain string to separate symbol ID and +// different level of struct indices. +const char ObjectAccesschainDelimiter = '/'; + +// Mapping from Symbol IDs of symbol nodes, to their defining operation +// nodes. +typedef std::unordered_multimap NodeMapping; +// Mapping from object nodes to their access chain info string. +typedef std::unordered_map AccessChainMapping; + +// Set of object IDs. +typedef std::unordered_set ObjectAccesschainSet; +// Set of return branch nodes. +typedef std::unordered_set ReturnBranchNodeSet; + +// A helper function to tell whether a node is 'noContraction'. Returns true if +// the node has 'noContraction' qualifier, otherwise false. +bool isPreciseObjectNode(glslang::TIntermTyped* node) +{ + return node->getType().getQualifier().noContraction; +} + +// Returns true if the opcode is a dereferencing one. +bool isDereferenceOperation(glslang::TOperator op) +{ + switch (op) { + case glslang::EOpIndexDirect: + case glslang::EOpIndexDirectStruct: + case glslang::EOpIndexIndirect: + case glslang::EOpVectorSwizzle: + case glslang::EOpMatrixSwizzle: + return true; + default: + return false; + } +} + +// Returns true if the opcode leads to an assignment operation. +bool isAssignOperation(glslang::TOperator op) +{ + switch (op) { + case glslang::EOpAssign: + case glslang::EOpAddAssign: + case glslang::EOpSubAssign: + case glslang::EOpMulAssign: + case glslang::EOpVectorTimesMatrixAssign: + case glslang::EOpVectorTimesScalarAssign: + case glslang::EOpMatrixTimesScalarAssign: + case glslang::EOpMatrixTimesMatrixAssign: + case glslang::EOpDivAssign: + case glslang::EOpModAssign: + case glslang::EOpAndAssign: + case glslang::EOpLeftShiftAssign: + case glslang::EOpRightShiftAssign: + case glslang::EOpInclusiveOrAssign: + case glslang::EOpExclusiveOrAssign: + + case glslang::EOpPostIncrement: + case glslang::EOpPostDecrement: + case glslang::EOpPreIncrement: + case glslang::EOpPreDecrement: + return true; + default: + return false; + } +} + +// A helper function to get the unsigned int from a given constant union node. +// Note the node should only hold a uint scalar. +unsigned getStructIndexFromConstantUnion(glslang::TIntermTyped* node) +{ + assert(node->getAsConstantUnion() && node->getAsConstantUnion()->isScalar()); + unsigned struct_dereference_index = node->getAsConstantUnion()->getConstArray()[0].getUConst(); + return struct_dereference_index; +} + +// A helper function to generate symbol_label. +ObjectAccessChain generateSymbolLabel(glslang::TIntermSymbol* node) +{ + ObjectAccessChain symbol_id = + std::to_string(node->getId()) + "(" + node->getName().c_str() + ")"; + return symbol_id; +} + +// Returns true if the operation is an arithmetic operation and valid for +// the 'NoContraction' decoration. +bool isArithmeticOperation(glslang::TOperator op) +{ + switch (op) { + case glslang::EOpAddAssign: + case glslang::EOpSubAssign: + case glslang::EOpMulAssign: + case glslang::EOpVectorTimesMatrixAssign: + case glslang::EOpVectorTimesScalarAssign: + case glslang::EOpMatrixTimesScalarAssign: + case glslang::EOpMatrixTimesMatrixAssign: + case glslang::EOpDivAssign: + case glslang::EOpModAssign: + + case glslang::EOpNegative: + + case glslang::EOpAdd: + case glslang::EOpSub: + case glslang::EOpMul: + case glslang::EOpDiv: + case glslang::EOpMod: + + case glslang::EOpVectorTimesScalar: + case glslang::EOpVectorTimesMatrix: + case glslang::EOpMatrixTimesVector: + case glslang::EOpMatrixTimesScalar: + case glslang::EOpMatrixTimesMatrix: + + case glslang::EOpDot: + + case glslang::EOpPostIncrement: + case glslang::EOpPostDecrement: + case glslang::EOpPreIncrement: + case glslang::EOpPreDecrement: + return true; + default: + return false; + } +} + +// A helper class to help manage the populating_initial_no_contraction_ flag. +template class StateSettingGuard { +public: + StateSettingGuard(T* state_ptr, T new_state_value) + : state_ptr_(state_ptr), previous_state_(*state_ptr) + { + *state_ptr = new_state_value; + } + StateSettingGuard(T* state_ptr) : state_ptr_(state_ptr), previous_state_(*state_ptr) {} + void setState(T new_state_value) { *state_ptr_ = new_state_value; } + ~StateSettingGuard() { *state_ptr_ = previous_state_; } + +private: + T* state_ptr_; + T previous_state_; +}; + +// A helper function to get the front element from a given ObjectAccessChain +ObjectAccessChain getFrontElement(const ObjectAccessChain& chain) +{ + size_t pos_delimiter = chain.find(ObjectAccesschainDelimiter); + return pos_delimiter == std::string::npos ? chain : chain.substr(0, pos_delimiter); +} + +// A helper function to get the access chain starting from the second element. +ObjectAccessChain subAccessChainFromSecondElement(const ObjectAccessChain& chain) +{ + size_t pos_delimiter = chain.find(ObjectAccesschainDelimiter); + return pos_delimiter == std::string::npos ? "" : chain.substr(pos_delimiter + 1); +} + +// A helper function to get the access chain after removing a given prefix. +ObjectAccessChain getSubAccessChainAfterPrefix(const ObjectAccessChain& chain, + const ObjectAccessChain& prefix) +{ + size_t pos = chain.find(prefix); + if (pos != 0) + return chain; + return chain.substr(prefix.length() + sizeof(ObjectAccesschainDelimiter)); +} + +// +// A traverser which traverses the whole AST and populates: +// 1) A mapping from symbol nodes' IDs to their defining operation nodes. +// 2) A set of access chains of the initial precise object nodes. +// +class TSymbolDefinitionCollectingTraverser : public glslang::TIntermTraverser { +public: + TSymbolDefinitionCollectingTraverser(NodeMapping* symbol_definition_mapping, + AccessChainMapping* accesschain_mapping, + ObjectAccesschainSet* precise_objects, + ReturnBranchNodeSet* precise_return_nodes); + + bool visitUnary(glslang::TVisit, glslang::TIntermUnary*) override; + bool visitBinary(glslang::TVisit, glslang::TIntermBinary*) override; + void visitSymbol(glslang::TIntermSymbol*) override; + bool visitAggregate(glslang::TVisit, glslang::TIntermAggregate*) override; + bool visitBranch(glslang::TVisit, glslang::TIntermBranch*) override; + +protected: + TSymbolDefinitionCollectingTraverser& operator=(const TSymbolDefinitionCollectingTraverser&); + + // The mapping from symbol node IDs to their defining nodes. This should be + // populated along traversing the AST. + NodeMapping& symbol_definition_mapping_; + // The set of symbol node IDs for precise symbol nodes, the ones marked as + // 'noContraction'. + ObjectAccesschainSet& precise_objects_; + // The set of precise return nodes. + ReturnBranchNodeSet& precise_return_nodes_; + // A temporary cache of the symbol node whose defining node is to be found + // currently along traversing the AST. + ObjectAccessChain current_object_; + // A map from object node to its access chain. This traverser stores + // the built access chains into this map for each object node it has + // visited. + AccessChainMapping& accesschain_mapping_; + // The pointer to the Function Definition node, so we can get the + // preciseness of the return expression from it when we traverse the + // return branch node. + glslang::TIntermAggregate* current_function_definition_node_; +}; + +TSymbolDefinitionCollectingTraverser::TSymbolDefinitionCollectingTraverser( + NodeMapping* symbol_definition_mapping, AccessChainMapping* accesschain_mapping, + ObjectAccesschainSet* precise_objects, + std::unordered_set* precise_return_nodes) + : TIntermTraverser(true, false, false), symbol_definition_mapping_(*symbol_definition_mapping), + precise_objects_(*precise_objects), precise_return_nodes_(*precise_return_nodes), + current_object_(), accesschain_mapping_(*accesschain_mapping), + current_function_definition_node_(nullptr) {} + +// Visits a symbol node, set the current_object_ to the +// current node symbol ID, and record a mapping from this node to the current +// current_object_, which is the just obtained symbol +// ID. +void TSymbolDefinitionCollectingTraverser::visitSymbol(glslang::TIntermSymbol* node) +{ + current_object_ = generateSymbolLabel(node); + accesschain_mapping_[node] = current_object_; +} + +// Visits an aggregate node, traverses all of its children. +bool TSymbolDefinitionCollectingTraverser::visitAggregate(glslang::TVisit, + glslang::TIntermAggregate* node) +{ + // This aggregate node might be a function definition node, in which case we need to + // cache this node, so we can get the preciseness information of the return value + // of this function later. + StateSettingGuard current_function_definition_node_setting_guard( + ¤t_function_definition_node_); + if (node->getOp() == glslang::EOpFunction) { + // This is function definition node, we need to cache this node so that we can + // get the preciseness of the return value later. + current_function_definition_node_setting_guard.setState(node); + } + // Traverse the items in the sequence. + glslang::TIntermSequence& seq = node->getSequence(); + for (int i = 0; i < (int)seq.size(); ++i) { + current_object_.clear(); + seq[i]->traverse(this); + } + return false; +} + +bool TSymbolDefinitionCollectingTraverser::visitBranch(glslang::TVisit, + glslang::TIntermBranch* node) +{ + if (node->getFlowOp() == glslang::EOpReturn && node->getExpression() && + current_function_definition_node_ && + current_function_definition_node_->getType().getQualifier().noContraction) { + // This node is a return node with an expression, and its function has a + // precise return value. We need to find the involved objects in its + // expression and add them to the set of initial precise objects. + precise_return_nodes_.insert(node); + node->getExpression()->traverse(this); + } + return false; +} + +// Visits a unary node. This might be an implicit assignment like i++, i--. etc. +bool TSymbolDefinitionCollectingTraverser::visitUnary(glslang::TVisit /* visit */, + glslang::TIntermUnary* node) +{ + current_object_.clear(); + node->getOperand()->traverse(this); + if (isAssignOperation(node->getOp())) { + // We should always be able to get an access chain of the operand node. + assert(!current_object_.empty()); + + // If the operand node object is 'precise', we collect its access chain + // for the initial set of 'precise' objects. + if (isPreciseObjectNode(node->getOperand())) { + // The operand node is an 'precise' object node, add its + // access chain to the set of 'precise' objects. This is to collect + // the initial set of 'precise' objects. + precise_objects_.insert(current_object_); + } + // Gets the symbol ID from the object's access chain. + ObjectAccessChain id_symbol = getFrontElement(current_object_); + // Add a mapping from the symbol ID to this assignment operation node. + symbol_definition_mapping_.insert(std::make_pair(id_symbol, node)); + } + // A unary node is not a dereference node, so we clear the access chain which + // is under construction. + current_object_.clear(); + return false; +} + +// Visits a binary node and updates the mapping from symbol IDs to the definition +// nodes. Also collects the access chains for the initial precise objects. +bool TSymbolDefinitionCollectingTraverser::visitBinary(glslang::TVisit /* visit */, + glslang::TIntermBinary* node) +{ + // Traverses the left node to build the access chain info for the object. + current_object_.clear(); + node->getLeft()->traverse(this); + + if (isAssignOperation(node->getOp())) { + // We should always be able to get an access chain for the left node. + assert(!current_object_.empty()); + + // If the left node object is 'precise', it is an initial precise object + // specified in the shader source. Adds it to the initial work list to + // process later. + if (isPreciseObjectNode(node->getLeft())) { + // The left node is an 'precise' object node, add its access chain to + // the set of 'precise' objects. This is to collect the initial set + // of 'precise' objects. + precise_objects_.insert(current_object_); + } + // Gets the symbol ID from the object access chain, which should be the + // first element recorded in the access chain. + ObjectAccessChain id_symbol = getFrontElement(current_object_); + // Adds a mapping from the symbol ID to this assignment operation node. + symbol_definition_mapping_.insert(std::make_pair(id_symbol, node)); + + // Traverses the right node, there may be other 'assignment' + // operations in the right. + current_object_.clear(); + node->getRight()->traverse(this); + + } else if (isDereferenceOperation(node->getOp())) { + // The left node (parent node) is a struct type object. We need to + // record the access chain information of the current node into its + // object id. + if (node->getOp() == glslang::EOpIndexDirectStruct) { + unsigned struct_dereference_index = getStructIndexFromConstantUnion(node->getRight()); + current_object_.push_back(ObjectAccesschainDelimiter); + current_object_.append(std::to_string(struct_dereference_index)); + } + accesschain_mapping_[node] = current_object_; + + // For a dereference node, there is no need to traverse the right child + // node as the right node should always be an integer type object. + + } else { + // For other binary nodes, still traverse the right node. + current_object_.clear(); + node->getRight()->traverse(this); + } + return false; +} + +// Traverses the AST and returns a tuple of four members: +// 1) a mapping from symbol IDs to the definition nodes (aka. assignment nodes) of these symbols. +// 2) a mapping from object nodes in the AST to the access chains of these objects. +// 3) a set of access chains of precise objects. +// 4) a set of return nodes with precise expressions. +std::tuple +getSymbolToDefinitionMappingAndPreciseSymbolIDs(const glslang::TIntermediate& intermediate) +{ + auto result_tuple = std::make_tuple(NodeMapping(), AccessChainMapping(), ObjectAccesschainSet(), + ReturnBranchNodeSet()); + + TIntermNode* root = intermediate.getTreeRoot(); + if (root == 0) + return result_tuple; + + NodeMapping& symbol_definition_mapping = std::get<0>(result_tuple); + AccessChainMapping& accesschain_mapping = std::get<1>(result_tuple); + ObjectAccesschainSet& precise_objects = std::get<2>(result_tuple); + ReturnBranchNodeSet& precise_return_nodes = std::get<3>(result_tuple); + + // Traverses the AST and populate the results. + TSymbolDefinitionCollectingTraverser collector(&symbol_definition_mapping, &accesschain_mapping, + &precise_objects, &precise_return_nodes); + root->traverse(&collector); + + return result_tuple; +} + +// +// A traverser that determine whether the left node (or operand node for unary +// node) of an assignment node is 'precise', containing 'precise' or not, +// according to the access chain a given precise object which share the same +// symbol as the left node. +// +// Post-orderly traverses the left node subtree of an binary assignment node and: +// +// 1) Propagates the 'precise' from the left object nodes to this object node. +// +// 2) Builds object access chain along the traversal, and also compares with +// the access chain of the given 'precise' object along with the traversal to +// tell if the node to be defined is 'precise' or not. +// +class TNoContractionAssigneeCheckingTraverser : public glslang::TIntermTraverser { + + enum DecisionStatus { + // The object node to be assigned to may contain 'precise' objects and also not 'precise' objects. + Mixed = 0, + // The object node to be assigned to is either a 'precise' object or a struct objects whose members are all 'precise'. + Precise = 1, + // The object node to be assigned to is not a 'precise' object. + NotPreicse = 2, + }; + +public: + TNoContractionAssigneeCheckingTraverser(const AccessChainMapping& accesschain_mapping) + : TIntermTraverser(true, false, false), accesschain_mapping_(accesschain_mapping), + precise_object_(nullptr) {} + + // Checks the preciseness of a given assignment node with a precise object + // represented as access chain. The precise object shares the same symbol + // with the assignee of the given assignment node. Return a tuple of two: + // + // 1) The preciseness of the assignee node of this assignment node. True + // if the assignee contains 'precise' objects or is 'precise', false if + // the assignee is not 'precise' according to the access chain of the given + // precise object. + // + // 2) The incremental access chain from the assignee node to its nested + // 'precise' object, according to the access chain of the given precise + // object. This incremental access chain can be empty, which means the + // assignee is 'precise'. Otherwise it shows the path to the nested + // precise object. + std::tuple + getPrecisenessAndRemainedAccessChain(glslang::TIntermOperator* node, + const ObjectAccessChain& precise_object) + { + assert(isAssignOperation(node->getOp())); + precise_object_ = &precise_object; + ObjectAccessChain assignee_object; + if (glslang::TIntermBinary* BN = node->getAsBinaryNode()) { + // This is a binary assignment node, we need to check the + // preciseness of the left node. + assert(accesschain_mapping_.count(BN->getLeft())); + // The left node (assignee node) is an object node, traverse the + // node to let the 'precise' of nesting objects being transfered to + // nested objects. + BN->getLeft()->traverse(this); + // After traversing the left node, if the left node is 'precise', + // we can conclude this assignment should propagate 'precise'. + if (isPreciseObjectNode(BN->getLeft())) { + return make_tuple(true, ObjectAccessChain()); + } + // If the preciseness of the left node (assignee node) can not + // be determined by now, we need to compare the access chain string + // of the assignee object with the given precise object. + assignee_object = accesschain_mapping_.at(BN->getLeft()); + + } else if (glslang::TIntermUnary* UN = node->getAsUnaryNode()) { + // This is a unary assignment node, we need to check the + // preciseness of the operand node. For unary assignment node, the + // operand node should always be an object node. + assert(accesschain_mapping_.count(UN->getOperand())); + // Traverse the operand node to let the 'precise' being propagated + // from lower nodes to upper nodes. + UN->getOperand()->traverse(this); + // After traversing the operand node, if the operand node is + // 'precise', this assignment should propagate 'precise'. + if (isPreciseObjectNode(UN->getOperand())) { + return make_tuple(true, ObjectAccessChain()); + } + // If the preciseness of the operand node (assignee node) can not + // be determined by now, we need to compare the access chain string + // of the assignee object with the given precise object. + assignee_object = accesschain_mapping_.at(UN->getOperand()); + } else { + // Not a binary or unary node, should not happen. + assert(false); + } + + // Compare the access chain string of the assignee node with the given + // precise object to determine if this assignment should propagate + // 'precise'. + if (assignee_object.find(precise_object) == 0) { + // The access chain string of the given precise object is a prefix + // of assignee's access chain string. The assignee should be + // 'precise'. + return make_tuple(true, ObjectAccessChain()); + } else if (precise_object.find(assignee_object) == 0) { + // The assignee's access chain string is a prefix of the given + // precise object, the assignee object contains 'precise' object, + // and we need to pass the remained access chain to the object nodes + // in the right. + return make_tuple(true, getSubAccessChainAfterPrefix(precise_object, assignee_object)); + } else { + // The access chain strings do not match, the assignee object can + // not be labeled as 'precise' according to the given precise + // object. + return make_tuple(false, ObjectAccessChain()); + } + } + +protected: + TNoContractionAssigneeCheckingTraverser& operator=(const TNoContractionAssigneeCheckingTraverser&); + + bool visitBinary(glslang::TVisit, glslang::TIntermBinary* node) override; + void visitSymbol(glslang::TIntermSymbol* node) override; + + // A map from object nodes to their access chain string (used as object ID). + const AccessChainMapping& accesschain_mapping_; + // A given precise object, represented in it access chain string. This + // precise object is used to be compared with the assignee node to tell if + // the assignee node is 'precise', contains 'precise' object or not + // 'precise'. + const ObjectAccessChain* precise_object_; +}; + +// Visits a binary node. If the node is an object node, it must be a dereference +// node. In such cases, if the left node is 'precise', this node should also be +// 'precise'. +bool TNoContractionAssigneeCheckingTraverser::visitBinary(glslang::TVisit, + glslang::TIntermBinary* node) +{ + // Traverses the left so that we transfer the 'precise' from nesting object + // to its nested object. + node->getLeft()->traverse(this); + // If this binary node is an object node, we should have it in the + // accesschain_mapping_. + if (accesschain_mapping_.count(node)) { + // A binary object node must be a dereference node. + assert(isDereferenceOperation(node->getOp())); + // If the left node is 'precise', this node should also be precise, + // otherwise, compare with the given precise_object_. If the + // access chain of this node matches with the given precise_object_, + // this node should be marked as 'precise'. + if (isPreciseObjectNode(node->getLeft())) { + node->getWritableType().getQualifier().noContraction = true; + } else if (accesschain_mapping_.at(node) == *precise_object_) { + node->getWritableType().getQualifier().noContraction = true; + } + } + return false; +} + +// Visits a symbol node, if the symbol node ID (its access chain string) matches +// with the given precise object, this node should be 'precise'. +void TNoContractionAssigneeCheckingTraverser::visitSymbol(glslang::TIntermSymbol* node) +{ + // A symbol node should always be an object node, and should have been added + // to the map from object nodes to their access chain strings. + assert(accesschain_mapping_.count(node)); + if (accesschain_mapping_.at(node) == *precise_object_) { + node->getWritableType().getQualifier().noContraction = true; + } +} + +// +// A traverser that only traverses the right side of binary assignment nodes +// and the operand node of unary assignment nodes. +// +// 1) Marks arithmetic operations as 'NoContraction'. +// +// 2) Find the object which should be marked as 'precise' in the right and +// update the 'precise' object work list. +// +class TNoContractionPropagator : public glslang::TIntermTraverser { +public: + TNoContractionPropagator(ObjectAccesschainSet* precise_objects, + const AccessChainMapping& accesschain_mapping) + : TIntermTraverser(true, false, false), + precise_objects_(*precise_objects), added_precise_object_ids_(), + remained_accesschain_(), accesschain_mapping_(accesschain_mapping) {} + + // Propagates 'precise' in the right nodes of a given assignment node with + // access chain record from the assignee node to a 'precise' object it + // contains. + void + propagateNoContractionInOneExpression(glslang::TIntermTyped* defining_node, + const ObjectAccessChain& assignee_remained_accesschain) + { + remained_accesschain_ = assignee_remained_accesschain; + if (glslang::TIntermBinary* BN = defining_node->getAsBinaryNode()) { + assert(isAssignOperation(BN->getOp())); + BN->getRight()->traverse(this); + if (isArithmeticOperation(BN->getOp())) { + BN->getWritableType().getQualifier().noContraction = true; + } + } else if (glslang::TIntermUnary* UN = defining_node->getAsUnaryNode()) { + assert(isAssignOperation(UN->getOp())); + UN->getOperand()->traverse(this); + if (isArithmeticOperation(UN->getOp())) { + UN->getWritableType().getQualifier().noContraction = true; + } + } + } + + // Propagates 'precise' in a given precise return node. + void propagateNoContractionInReturnNode(glslang::TIntermBranch* return_node) + { + remained_accesschain_ = ""; + assert(return_node->getFlowOp() == glslang::EOpReturn && return_node->getExpression()); + return_node->getExpression()->traverse(this); + } + +protected: + TNoContractionPropagator& operator=(const TNoContractionPropagator&); + + // Visits an aggregate node. The node can be a initializer list, in which + // case we need to find the 'precise' or 'precise' containing object node + // with the access chain record. In other cases, just need to traverse all + // the children nodes. + bool visitAggregate(glslang::TVisit, glslang::TIntermAggregate* node) override + { + if (!remained_accesschain_.empty() && node->getOp() == glslang::EOpConstructStruct) { + // This is a struct initializer node, and the remained + // access chain is not empty, we need to refer to the + // assignee_remained_access_chain_ to find the nested + // 'precise' object. And we don't need to visit other nodes in this + // aggregate node. + + // Gets the struct dereference index that leads to 'precise' object. + ObjectAccessChain precise_accesschain_index_str = + getFrontElement(remained_accesschain_); + unsigned precise_accesschain_index = (unsigned)strtoul(precise_accesschain_index_str.c_str(), nullptr, 10); + // Gets the node pointed by the access chain index extracted before. + glslang::TIntermTyped* potential_precise_node = + node->getSequence()[precise_accesschain_index]->getAsTyped(); + assert(potential_precise_node); + // Pop the front access chain index from the path, and visit the nested node. + { + ObjectAccessChain next_level_accesschain = + subAccessChainFromSecondElement(remained_accesschain_); + StateSettingGuard setup_remained_accesschain_for_next_level( + &remained_accesschain_, next_level_accesschain); + potential_precise_node->traverse(this); + } + return false; + } + return true; + } + + // Visits a binary node. A binary node can be an object node, e.g. a dereference node. + // As only the top object nodes in the right side of an assignment needs to be visited + // and added to 'precise' work list, this traverser won't visit the children nodes of + // an object node. If the binary node does not represent an object node, it should + // go on to traverse its children nodes and if it is an arithmetic operation node, this + // operation should be marked as 'noContraction'. + bool visitBinary(glslang::TVisit, glslang::TIntermBinary* node) override + { + if (isDereferenceOperation(node->getOp())) { + // This binary node is an object node. Need to update the precise + // object set with the access chain of this node + remained + // access chain . + ObjectAccessChain new_precise_accesschain = accesschain_mapping_.at(node); + if (remained_accesschain_.empty()) { + node->getWritableType().getQualifier().noContraction = true; + } else { + new_precise_accesschain += ObjectAccesschainDelimiter + remained_accesschain_; + } + // Cache the access chain as added precise object, so we won't add the + // same object to the work list again. + if (!added_precise_object_ids_.count(new_precise_accesschain)) { + precise_objects_.insert(new_precise_accesschain); + added_precise_object_ids_.insert(new_precise_accesschain); + } + // Only the upper-most object nodes should be visited, so do not + // visit children of this object node. + return false; + } + // If this is an arithmetic operation, marks this node as 'noContraction'. + if (isArithmeticOperation(node->getOp()) && node->getBasicType() != glslang::EbtInt) { + node->getWritableType().getQualifier().noContraction = true; + } + // As this node is not an object node, need to traverse the children nodes. + return true; + } + + // Visits a unary node. A unary node can not be an object node. If the operation + // is an arithmetic operation, need to mark this node as 'noContraction'. + bool visitUnary(glslang::TVisit /* visit */, glslang::TIntermUnary* node) override + { + // If this is an arithmetic operation, marks this with 'noContraction' + if (isArithmeticOperation(node->getOp())) { + node->getWritableType().getQualifier().noContraction = true; + } + return true; + } + + // Visits a symbol node. A symbol node is always an object node. So we + // should always be able to find its in our collected mapping from object + // nodes to access chains. As an object node, a symbol node can be either + // 'precise' or containing 'precise' objects according to unused + // access chain information we have when we visit this node. + void visitSymbol(glslang::TIntermSymbol* node) override + { + // Symbol nodes are object nodes and should always have an + // access chain collected before matches with it. + assert(accesschain_mapping_.count(node)); + ObjectAccessChain new_precise_accesschain = accesschain_mapping_.at(node); + // If the unused access chain is empty, this symbol node should be + // marked as 'precise'. Otherwise, the unused access chain should be + // appended to the symbol ID to build a new access chain which points to + // the nested 'precise' object in this symbol object. + if (remained_accesschain_.empty()) { + node->getWritableType().getQualifier().noContraction = true; + } else { + new_precise_accesschain += ObjectAccesschainDelimiter + remained_accesschain_; + } + // Add the new 'precise' access chain to the work list and make sure we + // don't visit it again. + if (!added_precise_object_ids_.count(new_precise_accesschain)) { + precise_objects_.insert(new_precise_accesschain); + added_precise_object_ids_.insert(new_precise_accesschain); + } + } + + // A set of precise objects, represented as access chains. + ObjectAccesschainSet& precise_objects_; + // Visited symbol nodes, should not revisit these nodes. + ObjectAccesschainSet added_precise_object_ids_; + // The left node of an assignment operation might be an parent of 'precise' objects. + // This means the left node might not be an 'precise' object node, but it may contains + // 'precise' qualifier which should be propagated to the corresponding child node in + // the right. So we need the path from the left node to its nested 'precise' node to + // tell us how to find the corresponding 'precise' node in the right. + ObjectAccessChain remained_accesschain_; + // A map from node pointers to their access chains. + const AccessChainMapping& accesschain_mapping_; +}; +} + +namespace glslang { + +void PropagateNoContraction(const glslang::TIntermediate& intermediate) +{ + // First, traverses the AST, records symbols with their defining operations + // and collects the initial set of precise symbols (symbol nodes that marked + // as 'noContraction') and precise return nodes. + auto mappings_and_precise_objects = + getSymbolToDefinitionMappingAndPreciseSymbolIDs(intermediate); + + // The mapping of symbol node IDs to their defining nodes. This enables us + // to get the defining node directly from a given symbol ID without + // traversing the tree again. + NodeMapping& symbol_definition_mapping = std::get<0>(mappings_and_precise_objects); + + // The mapping of object nodes to their access chains recorded. + AccessChainMapping& accesschain_mapping = std::get<1>(mappings_and_precise_objects); + + // The initial set of 'precise' objects which are represented as the + // access chain toward them. + ObjectAccesschainSet& precise_object_accesschains = std::get<2>(mappings_and_precise_objects); + + // The set of 'precise' return nodes. + ReturnBranchNodeSet& precise_return_nodes = std::get<3>(mappings_and_precise_objects); + + // Second, uses the initial set of precise objects as a work list, pops an + // access chain, extract the symbol ID from it. Then: + // 1) Check the assignee object, see if it is 'precise' object node or + // contains 'precise' object. Obtain the incremental access chain from the + // assignee node to its nested 'precise' node (if any). + // 2) If the assignee object node is 'precise' or it contains 'precise' + // objects, traverses the right side of the assignment operation + // expression to mark arithmetic operations as 'noContration' and update + // 'precise' access chain work list with new found object nodes. + // Repeat above steps until the work list is empty. + TNoContractionAssigneeCheckingTraverser checker(accesschain_mapping); + TNoContractionPropagator propagator(&precise_object_accesschains, accesschain_mapping); + + // We have two initial precise work lists to handle: + // 1) precise return nodes + // 2) precise object access chains + // We should process the precise return nodes first and the involved + // objects in the return expression should be added to the precise object + // access chain set. + while (!precise_return_nodes.empty()) { + glslang::TIntermBranch* precise_return_node = *precise_return_nodes.begin(); + propagator.propagateNoContractionInReturnNode(precise_return_node); + precise_return_nodes.erase(precise_return_node); + } + + while (!precise_object_accesschains.empty()) { + // Get the access chain of a precise object from the work list. + ObjectAccessChain precise_object_accesschain = *precise_object_accesschains.begin(); + // Get the symbol id from the access chain. + ObjectAccessChain symbol_id = getFrontElement(precise_object_accesschain); + // Get all the defining nodes of that symbol ID. + std::pair range = + symbol_definition_mapping.equal_range(symbol_id); + // Visits all the assignment nodes of that symbol ID and + // 1) Check if the assignee node is 'precise' or contains 'precise' + // objects. + // 2) Propagate the 'precise' to the top layer object nodes + // in the right side of the assignment operation, update the 'precise' + // work list with new access chains representing the new 'precise' + // objects, and mark arithmetic operations as 'noContraction'. + for (NodeMapping::iterator defining_node_iter = range.first; + defining_node_iter != range.second; defining_node_iter++) { + TIntermOperator* defining_node = defining_node_iter->second; + // Check the assignee node. + auto checker_result = checker.getPrecisenessAndRemainedAccessChain( + defining_node, precise_object_accesschain); + bool& contain_precise = std::get<0>(checker_result); + ObjectAccessChain& remained_accesschain = std::get<1>(checker_result); + // If the assignee node is 'precise' or contains 'precise', propagate the + // 'precise' to the right. Otherwise just skip this assignment node. + if (contain_precise) { + propagator.propagateNoContractionInOneExpression(defining_node, + remained_accesschain); + } + } + // Remove the last processed 'precise' object from the work list. + precise_object_accesschains.erase(precise_object_accesschain); + } +} +}; diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/propagateNoContraction.h b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/propagateNoContraction.h new file mode 100644 index 0000000..3412c85 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/propagateNoContraction.h @@ -0,0 +1,53 @@ +// +// Copyright (C) 2015-2016 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 Google Inc. 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. + +// +// Visit the nodes in the glslang intermediate tree representation to +// propagate 'noContraction' qualifier. +// + +#include "../Include/intermediate.h" + +namespace glslang { + +// Propagates the 'precise' qualifier for objects (objects marked with +// 'noContraction' qualifier) from the shader source specified 'precise' +// variables to all the involved objects, and add 'noContraction' qualifier for +// the involved arithmetic operations. +// Note that the same qualifier: 'noContraction' is used in both object nodes +// and arithmetic operation nodes, but has different meaning. For object nodes, +// 'noContraction' means the object is 'precise'; and for arithmetic operation +// nodes, it means the operation should not be contracted. +void PropagateNoContraction(const glslang::TIntermediate& intermediate); +}; diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/reflection.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/reflection.cpp new file mode 100644 index 0000000..f3f28f0 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/reflection.cpp @@ -0,0 +1,768 @@ +// +// Copyright (C) 2013-2016 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. +// + +#include "../Include/Common.h" +#include "reflection.h" +#include "LiveTraverser.h" +#include "localintermediate.h" + +#include "gl_types.h" + +// +// Grow the reflection database through a friend traverser class of TReflection and a +// collection of functions to do a liveness traversal that note what uniforms are used +// in semantically non-dead code. +// +// Can be used multiple times, once per stage, to grow a program reflection. +// +// High-level algorithm for one stage: +// +// 1. Put the entry point on the list of live functions. +// +// 2. Traverse any live function, while skipping if-tests with a compile-time constant +// condition of false, and while adding any encountered function calls to the live +// function list. +// +// Repeat until the live function list is empty. +// +// 3. Add any encountered uniform variables and blocks to the reflection database. +// +// Can be attempted with a failed link, but will return false if recursion had been detected, or +// there wasn't exactly one entry point. +// + +namespace glslang { + +// +// The traverser: mostly pass through, except +// - processing binary nodes to see if they are dereferences of an aggregates to track +// - processing symbol nodes to see if they are non-aggregate objects to track +// +// This ignores semantically dead code by using TLiveTraverser. +// +// This is in the glslang namespace directly so it can be a friend of TReflection. +// + +class TReflectionTraverser : public TLiveTraverser { +public: + TReflectionTraverser(const TIntermediate& i, TReflection& r) : + TLiveTraverser(i), reflection(r) { } + + virtual bool visitBinary(TVisit, TIntermBinary* node); + virtual void visitSymbol(TIntermSymbol* base); + + // Add a simple reference to a uniform variable to the uniform database, no dereference involved. + // However, no dereference doesn't mean simple... it could be a complex aggregate. + void addUniform(const TIntermSymbol& base) + { + if (processedDerefs.find(&base) == processedDerefs.end()) { + processedDerefs.insert(&base); + + // Use a degenerate (empty) set of dereferences to immediately put as at the end of + // the dereference change expected by blowUpActiveAggregate. + TList derefs; + blowUpActiveAggregate(base.getType(), base.getName(), derefs, derefs.end(), -1, -1, 0); + } + } + + void addAttribute(const TIntermSymbol& base) + { + if (processedDerefs.find(&base) == processedDerefs.end()) { + processedDerefs.insert(&base); + + const TString &name = base.getName(); + const TType &type = base.getType(); + + TReflection::TNameToIndex::const_iterator it = reflection.nameToIndex.find(name); + if (it == reflection.nameToIndex.end()) { + reflection.nameToIndex[name] = (int)reflection.indexToAttribute.size(); + reflection.indexToAttribute.push_back(TObjectReflection(name, type, 0, mapToGlType(type), 0, 0)); + } + } + } + + // Lookup or calculate the offset of a block member, using the recursively + // defined block offset rules. + int getOffset(const TType& type, int index) + { + const TTypeList& memberList = *type.getStruct(); + + // Don't calculate offset if one is present, it could be user supplied + // and different than what would be calculated. That is, this is faster, + // but not just an optimization. + if (memberList[index].type->getQualifier().hasOffset()) + return memberList[index].type->getQualifier().layoutOffset; + + int memberSize; + int dummyStride; + int offset = 0; + 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); + RoundToPow2(offset, memberAlignment); + if (m < index) + offset += memberSize; + } + + return offset; + } + + // Calculate the block data size. + // Block arrayness is not taken into account, each element is backed by a separate buffer. + int getBlockSize(const TType& blockType) + { + const TTypeList& memberList = *blockType.getStruct(); + int lastIndex = (int)memberList.size() - 1; + int lastOffset = getOffset(blockType, lastIndex); + + int lastMemberSize; + int dummyStride; + intermediate.getBaseAlignment(*memberList[lastIndex].type, lastMemberSize, dummyStride, blockType.getQualifier().layoutPacking == ElpStd140, + blockType.getQualifier().layoutMatrix == ElmRowMajor); + + return lastOffset + lastMemberSize; + } + + // Traverse the provided deref chain, including the base, and + // - build a full reflection-granularity name, array size, etc. entry out of it, if it goes down to that granularity + // - recursively expand any variable array index in the middle of that traversal + // - recursively expand what's left at the end if the deref chain did not reach down to reflection granularity + // + // arraySize tracks, just for the final dereference in the chain, if there was a specific known size. + // A value of 0 for arraySize will mean to use the full array's size. + void blowUpActiveAggregate(const TType& baseType, const TString& baseName, const TList& derefs, + TList::const_iterator deref, int offset, int blockIndex, int arraySize) + { + // process the part of the derefence chain that was explicit in the shader + TString name = baseName; + const TType* terminalType = &baseType; + for (; deref != derefs.end(); ++deref) { + TIntermBinary* visitNode = *deref; + terminalType = &visitNode->getType(); + int index; + 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) { + TString newBaseName = name; + if (baseType.getBasicType() != EbtBlock) + newBaseName.append(TString("[") + String(i) + "]"); + TList::const_iterator nextDeref = deref; + ++nextDeref; + TType derefType(*terminalType, 0); + blowUpActiveAggregate(derefType, newBaseName, derefs, nextDeref, offset, blockIndex, arraySize); + } + + // it was all completed in the recursive calls above + return; + case EOpIndexDirect: + index = visitNode->getRight()->getAsConstantUnion()->getConstArray()[0].getIConst(); + if (baseType.getBasicType() != EbtBlock) + name.append(TString("[") + String(index) + "]"); + break; + case EOpIndexDirectStruct: + index = visitNode->getRight()->getAsConstantUnion()->getConstArray()[0].getIConst(); + if (offset >= 0) + offset += getOffset(visitNode->getLeft()->getType(), index); + if (name.size() > 0) + name.append("."); + name.append((*visitNode->getLeft()->getType().getStruct())[index].type->getFieldName()); + break; + default: + break; + } + } + + // if the terminalType is still too coarse a granularity, this is still an aggregate to expand, expand it... + if (! isReflectionGranularity(*terminalType)) { + 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) { + TString newBaseName = name; + newBaseName.append(TString("[") + String(i) + "]"); + TType derefType(*terminalType, 0); + blowUpActiveAggregate(derefType, newBaseName, derefs, derefs.end(), offset, blockIndex, 0); + } + } else { + // Visit all members of this aggregate, and for each one, + // fully explode the remaining aggregate to dereference + const TTypeList& typeList = *terminalType->getStruct(); + for (int i = 0; i < (int)typeList.size(); ++i) { + TString newBaseName = name; + newBaseName.append(TString(".") + typeList[i].type->getFieldName()); + TType derefType(*terminalType, i); + blowUpActiveAggregate(derefType, newBaseName, derefs, derefs.end(), offset, blockIndex, 0); + } + } + + // it was all completed in the recursive calls above + return; + } + + // 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. + + // there might not be a final array dereference, it could have been copied as an array object + if (arraySize == 0) + arraySize = mapToGlArraySize(*terminalType); + + 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), + arraySize, blockIndex)); + } else if (arraySize > 1) { + int& reflectedArraySize = reflection.indexToUniform[it->second].size; + reflectedArraySize = std::max(arraySize, reflectedArraySize); + } + } + + // Add a uniform dereference where blocks/struct/arrays are involved in the access. + // Handles the situation where the left node is at the correct or too coarse a + // granularity for reflection. (That is, further dereferences up the tree will be + // skipped.) Earlier dereferences, down the tree, will be handled + // at the same time, and logged to prevent reprocessing as the tree is traversed. + // + // Note: Other things like the following must be caught elsewhere: + // - a simple non-array, non-struct variable (no dereference even conceivable) + // - an aggregrate consumed en masse, without a dereference + // + // So, this code is for cases like + // - a struct/block dereferencing a member (whether the member is array or not) + // - an array of struct + // - structs/arrays containing the above + // + void addDereferencedUniform(TIntermBinary* topNode) + { + // See if too fine-grained to process (wait to get further down the tree) + const TType& leftType = topNode->getLeft()->getType(); + if ((leftType.isVector() || leftType.isMatrix()) && ! leftType.isArray()) + return; + + // We have an array or structure or block dereference, see if it's a uniform + // based dereference (if not, skip it). + TIntermSymbol* base = findBase(topNode); + if (! base || ! base->getQualifier().isUniformOrBuffer()) + return; + + // See if we've already processed this (e.g., in the middle of something + // we did earlier), and if so skip it + if (processedDerefs.find(topNode) != processedDerefs.end()) + return; + + // Process this uniform dereference + + int offset = -1; + int blockIndex = -1; + bool anonymous = false; + + // See if we need to record the block itself + bool block = base->getBasicType() == EbtBlock; + if (block) { + offset = 0; + anonymous = IsAnonymous(base->getName()); + + const TString& blockName = base->getType().getTypeName(); + + if (base->getType().isArray()) { + TType derefType(base->getType(), 0); + + assert(! anonymous); + for (int e = 0; e < base->getType().getCumulativeArraySize(); ++e) + blockIndex = addBlockName(blockName + "[" + String(e) + "]", derefType, + getBlockSize(base->getType())); + } else + blockIndex = addBlockName(blockName, base->getType(), getBlockSize(base->getType())); + } + + // Process the dereference chain, backward, accumulating the pieces for later forward traversal. + // If the topNode is a reflection-granularity-array dereference, don't include that last dereference. + TList derefs; + for (TIntermBinary* visitNode = topNode; visitNode; visitNode = visitNode->getLeft()->getAsBinaryNode()) { + if (isReflectionGranularity(visitNode->getLeft()->getType())) + continue; + + derefs.push_front(visitNode); + processedDerefs.insert(visitNode); + } + processedDerefs.insert(base); + + // See if we have a specific array size to stick to while enumerating the explosion of the aggregate + int arraySize = 0; + if (isReflectionGranularity(topNode->getLeft()->getType()) && topNode->getLeft()->isArray()) { + if (topNode->getOp() == EOpIndexDirect) + arraySize = topNode->getRight()->getAsConstantUnion()->getConstArray()[0].getIConst() + 1; + } + + // Put the dereference chain together, forward + TString baseName; + if (! anonymous) { + if (block) + baseName = base->getType().getTypeName(); + else + baseName = base->getName(); + } + blowUpActiveAggregate(base->getType(), baseName, derefs, derefs.begin(), offset, blockIndex, arraySize); + } + + int addBlockName(const TString& name, const TType& type, int size) + { + int blockIndex; + TReflection::TNameToIndex::const_iterator it = reflection.nameToIndex.find(name); + if (reflection.nameToIndex.find(name) == reflection.nameToIndex.end()) { + blockIndex = (int)reflection.indexToUniformBlock.size(); + reflection.nameToIndex[name] = blockIndex; + reflection.indexToUniformBlock.push_back(TObjectReflection(name, type, -1, -1, size, -1)); + } else + blockIndex = it->second; + + return blockIndex; + } + + // Are we at a level in a dereference chain at which individual active uniform queries are made? + bool isReflectionGranularity(const TType& type) + { + return type.getBasicType() != EbtBlock && type.getBasicType() != EbtStruct; + } + + // For a binary operation indexing into an aggregate, chase down the base of the aggregate. + // Return 0 if the topology does not fit this situation. + TIntermSymbol* findBase(const TIntermBinary* node) + { + TIntermSymbol *base = node->getLeft()->getAsSymbolNode(); + if (base) + return base; + TIntermBinary* left = node->getLeft()->getAsBinaryNode(); + if (! left) + return nullptr; + + return findBase(left); + } + + // + // Translate a glslang sampler type into the GL API #define number. + // + int mapSamplerToGlType(TSampler sampler) + { + if (! sampler.image) { + // a sampler... + switch (sampler.type) { + case EbtFloat: + switch ((int)sampler.dim) { + case Esd1D: + switch ((int)sampler.shadow) { + case false: return sampler.arrayed ? GL_SAMPLER_1D_ARRAY : GL_SAMPLER_1D; + case true: return sampler.arrayed ? GL_SAMPLER_1D_ARRAY_SHADOW : GL_SAMPLER_1D_SHADOW; + } + case Esd2D: + switch ((int)sampler.ms) { + case false: + switch ((int)sampler.shadow) { + case false: return sampler.arrayed ? GL_SAMPLER_2D_ARRAY : GL_SAMPLER_2D; + case true: return sampler.arrayed ? GL_SAMPLER_2D_ARRAY_SHADOW : GL_SAMPLER_2D_SHADOW; + } + case true: return sampler.arrayed ? GL_SAMPLER_2D_MULTISAMPLE_ARRAY : GL_SAMPLER_2D_MULTISAMPLE; + } + case Esd3D: + return GL_SAMPLER_3D; + case EsdCube: + switch ((int)sampler.shadow) { + case false: return sampler.arrayed ? GL_SAMPLER_CUBE_MAP_ARRAY : GL_SAMPLER_CUBE; + case true: return sampler.arrayed ? GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW : GL_SAMPLER_CUBE_SHADOW; + } + case EsdRect: + return sampler.shadow ? GL_SAMPLER_2D_RECT_SHADOW : GL_SAMPLER_2D_RECT; + case EsdBuffer: + return GL_SAMPLER_BUFFER; + } + case EbtInt: + switch ((int)sampler.dim) { + case Esd1D: + return sampler.arrayed ? GL_INT_SAMPLER_1D_ARRAY : GL_INT_SAMPLER_1D; + 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 Esd3D: + return GL_INT_SAMPLER_3D; + case EsdCube: + return sampler.arrayed ? GL_INT_SAMPLER_CUBE_MAP_ARRAY : GL_INT_SAMPLER_CUBE; + case EsdRect: + return GL_INT_SAMPLER_2D_RECT; + case EsdBuffer: + return GL_INT_SAMPLER_BUFFER; + } + case EbtUint: + switch ((int)sampler.dim) { + case Esd1D: + return sampler.arrayed ? GL_UNSIGNED_INT_SAMPLER_1D_ARRAY : GL_UNSIGNED_INT_SAMPLER_1D; + 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 Esd3D: + return GL_UNSIGNED_INT_SAMPLER_3D; + case EsdCube: + return sampler.arrayed ? GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY : GL_UNSIGNED_INT_SAMPLER_CUBE; + case EsdRect: + return GL_UNSIGNED_INT_SAMPLER_2D_RECT; + case EsdBuffer: + return GL_UNSIGNED_INT_SAMPLER_BUFFER; + } + default: + return 0; + } + } else { + // an image... + switch (sampler.type) { + case EbtFloat: + switch ((int)sampler.dim) { + case Esd1D: + return sampler.arrayed ? GL_IMAGE_1D_ARRAY : GL_IMAGE_1D; + case Esd2D: + switch ((int)sampler.ms) { + case false: return sampler.arrayed ? GL_IMAGE_2D_ARRAY : GL_IMAGE_2D; + case true: return sampler.arrayed ? GL_IMAGE_2D_MULTISAMPLE_ARRAY : GL_IMAGE_2D_MULTISAMPLE; + } + case Esd3D: + return GL_IMAGE_3D; + case EsdCube: + return sampler.arrayed ? GL_IMAGE_CUBE_MAP_ARRAY : GL_IMAGE_CUBE; + case EsdRect: + return GL_IMAGE_2D_RECT; + case EsdBuffer: + return GL_IMAGE_BUFFER; + } + case EbtInt: + switch ((int)sampler.dim) { + case Esd1D: + return sampler.arrayed ? GL_INT_IMAGE_1D_ARRAY : GL_INT_IMAGE_1D; + case Esd2D: + switch ((int)sampler.ms) { + case false: return sampler.arrayed ? GL_INT_IMAGE_2D_ARRAY : GL_INT_IMAGE_2D; + case true: return sampler.arrayed ? GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY : GL_INT_IMAGE_2D_MULTISAMPLE; + } + case Esd3D: + return GL_INT_IMAGE_3D; + case EsdCube: + return sampler.arrayed ? GL_INT_IMAGE_CUBE_MAP_ARRAY : GL_INT_IMAGE_CUBE; + case EsdRect: + return GL_INT_IMAGE_2D_RECT; + case EsdBuffer: + return GL_INT_IMAGE_BUFFER; + } + case EbtUint: + switch ((int)sampler.dim) { + case Esd1D: + return sampler.arrayed ? GL_UNSIGNED_INT_IMAGE_1D_ARRAY : GL_UNSIGNED_INT_IMAGE_1D; + 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 Esd3D: + return GL_UNSIGNED_INT_IMAGE_3D; + case EsdCube: + return sampler.arrayed ? GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY : GL_UNSIGNED_INT_IMAGE_CUBE; + case EsdRect: + return GL_UNSIGNED_INT_IMAGE_2D_RECT; + case EsdBuffer: + return GL_UNSIGNED_INT_IMAGE_BUFFER; + } + default: + return 0; + } + } + } + + // + // Translate a glslang type into the GL API #define number. + // Ignores arrayness. + // + int mapToGlType(const TType& type) + { + switch (type.getBasicType()) { + case EbtSampler: + return mapSamplerToGlType(type.getSampler()); + case EbtStruct: + case EbtBlock: + case EbtVoid: + return 0; + default: + break; + } + + if (type.isVector()) { + int offset = type.getVectorSize() - 2; + switch (type.getBasicType()) { + case EbtFloat: return GL_FLOAT_VEC2 + offset; + case EbtDouble: return GL_DOUBLE_VEC2 + offset; +#ifdef AMD_EXTENSIONS + case EbtFloat16: return GL_FLOAT16_VEC2_NV + offset; +#endif + case EbtInt: return GL_INT_VEC2 + offset; + case EbtUint: return GL_UNSIGNED_INT_VEC2 + offset; + case EbtInt64: return GL_INT64_ARB + offset; + case EbtUint64: return GL_UNSIGNED_INT64_ARB + offset; + case EbtBool: return GL_BOOL_VEC2 + offset; + case EbtAtomicUint: return GL_UNSIGNED_INT_ATOMIC_COUNTER + offset; + default: return 0; + } + } + if (type.isMatrix()) { + switch (type.getBasicType()) { + case EbtFloat: + switch (type.getMatrixCols()) { + case 2: + switch (type.getMatrixRows()) { + case 2: return GL_FLOAT_MAT2; + case 3: return GL_FLOAT_MAT2x3; + case 4: return GL_FLOAT_MAT2x4; + default: return 0; + } + case 3: + switch (type.getMatrixRows()) { + case 2: return GL_FLOAT_MAT3x2; + case 3: return GL_FLOAT_MAT3; + case 4: return GL_FLOAT_MAT3x4; + default: return 0; + } + case 4: + switch (type.getMatrixRows()) { + case 2: return GL_FLOAT_MAT4x2; + case 3: return GL_FLOAT_MAT4x3; + case 4: return GL_FLOAT_MAT4; + default: return 0; + } + } + case EbtDouble: + switch (type.getMatrixCols()) { + case 2: + switch (type.getMatrixRows()) { + case 2: return GL_DOUBLE_MAT2; + case 3: return GL_DOUBLE_MAT2x3; + case 4: return GL_DOUBLE_MAT2x4; + default: return 0; + } + case 3: + switch (type.getMatrixRows()) { + case 2: return GL_DOUBLE_MAT3x2; + case 3: return GL_DOUBLE_MAT3; + case 4: return GL_DOUBLE_MAT3x4; + default: return 0; + } + case 4: + switch (type.getMatrixRows()) { + case 2: return GL_DOUBLE_MAT4x2; + case 3: return GL_DOUBLE_MAT4x3; + case 4: return GL_DOUBLE_MAT4; + default: return 0; + } + } +#ifdef AMD_EXTENSIONS + case EbtFloat16: + switch (type.getMatrixCols()) { + case 2: + switch (type.getMatrixRows()) { + case 2: return GL_FLOAT16_MAT2_AMD; + case 3: return GL_FLOAT16_MAT2x3_AMD; + case 4: return GL_FLOAT16_MAT2x4_AMD; + default: return 0; + } + case 3: + switch (type.getMatrixRows()) { + case 2: return GL_FLOAT16_MAT3x2_AMD; + case 3: return GL_FLOAT16_MAT3_AMD; + case 4: return GL_FLOAT16_MAT3x4_AMD; + default: return 0; + } + case 4: + switch (type.getMatrixRows()) { + case 2: return GL_FLOAT16_MAT4x2_AMD; + case 3: return GL_FLOAT16_MAT4x3_AMD; + case 4: return GL_FLOAT16_MAT4_AMD; + default: return 0; + } + } +#endif + default: + return 0; + } + } + if (type.getVectorSize() == 1) { + switch (type.getBasicType()) { + case EbtFloat: return GL_FLOAT; + case EbtDouble: return GL_DOUBLE; +#ifdef AMD_EXTENSIONS + case EbtFloat16: return GL_FLOAT16_NV; +#endif + case EbtInt: return GL_INT; + case EbtUint: return GL_UNSIGNED_INT; + case EbtInt64: return GL_INT64_ARB; + case EbtUint64: return GL_UNSIGNED_INT64_ARB; + case EbtBool: return GL_BOOL; + case EbtAtomicUint: return GL_UNSIGNED_INT_ATOMIC_COUNTER; + default: return 0; + } + } + + return 0; + } + + int mapToGlArraySize(const TType& type) + { + return type.isArray() ? type.getOuterArraySize() : 1; + } + + TReflection& reflection; + std::set processedDerefs; + +protected: + TReflectionTraverser(TReflectionTraverser&); + TReflectionTraverser& operator=(TReflectionTraverser&); +}; + +// +// Implement the traversal functions of interest. +// + +// To catch dereferenced aggregates that must be reflected. +// This catches them at the highest level possible in the tree. +bool TReflectionTraverser::visitBinary(TVisit /* visit */, TIntermBinary* node) +{ + switch (node->getOp()) { + case EOpIndexDirect: + case EOpIndexIndirect: + case EOpIndexDirectStruct: + addDereferencedUniform(node); + break; + default: + break; + } + + // still need to visit everything below, which could contain sub-expressions + // containing different uniforms + return true; +} + +// To reflect non-dereferenced objects. +void TReflectionTraverser::visitSymbol(TIntermSymbol* base) +{ + if (base->getQualifier().storage == EvqUniform) + addUniform(*base); + + if (intermediate.getStage() == EShLangVertex && base->getQualifier().isPipeInput()) + addAttribute(*base); +} + +// +// Implement TReflection methods. +// + +// Track any required attribute reflection, such as compute shader numthreads. +// +void TReflection::buildAttributeReflection(EShLanguage stage, const TIntermediate& intermediate) +{ + if (stage == EShLangCompute) { + // Remember thread dimensions + for (int dim=0; dim<3; ++dim) + localSize[dim] = intermediate.getLocalSize(dim); + } +} + +// 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()) + return false; + + buildAttributeReflection(stage, intermediate); + + TReflectionTraverser it(intermediate, *this); + + // put the entry point on the list of functions to process + it.pushFunction(intermediate.getEntryPointMangledName().c_str()); + + // process all the functions + while (! it.functions.empty()) { + TIntermNode* function = it.functions.back(); + it.functions.pop_back(); + function->traverse(&it); + } + + return true; +} + +void TReflection::dump() +{ + printf("Uniform reflection:\n"); + for (size_t i = 0; i < indexToUniform.size(); ++i) + indexToUniform[i].dump(); + printf("\n"); + + printf("Uniform block reflection:\n"); + for (size_t i = 0; i < indexToUniformBlock.size(); ++i) + indexToUniformBlock[i].dump(); + printf("\n"); + + printf("Vertex attribute reflection:\n"); + for (size_t i = 0; i < indexToAttribute.size(); ++i) + indexToAttribute[i].dump(); + printf("\n"); + + if (getLocalSize(0) > 1) { + static const char* axis[] = { "X", "Y", "Z" }; + + for (int dim=0; dim<3; ++dim) + if (getLocalSize(dim) > 1) + printf("Local size %s: %d\n", axis[dim], getLocalSize(dim)); + + printf("\n"); + } + + // printf("Live names\n"); + // for (TNameToIndex::const_iterator it = nameToIndex.begin(); it != nameToIndex.end(); ++it) + // printf("%s: %d\n", it->first.c_str(), it->second); + // printf("\n"); +} + +} // end namespace glslang diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/reflection.h b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/reflection.h new file mode 100644 index 0000000..c80d3ea --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/reflection.h @@ -0,0 +1,168 @@ +// +// Copyright (C) 2013-2016 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. +// + +#ifndef _REFLECTION_INCLUDED +#define _REFLECTION_INCLUDED + +#include "../Public/ShaderLang.h" +#include "../Include/Types.h" + +#include +#include + +// +// A reflection database and its interface, consistent with the OpenGL API reflection queries. +// + +namespace glslang { + +class TIntermediate; +class TIntermAggregate; +class TReflectionTraverser; + +// Data needed for just a single object at the granularity exchanged by the reflection API +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()) { } + + 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; } + + 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(); } + +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; +}; + +// The full reflection database +class TReflection { +public: + TReflection() : badReflection(TObjectReflection::badReflection()) + { + for (int dim=0; dim<3; ++dim) + localSize[dim] = 0; + } + + virtual ~TReflection() {} + + // grow the reflection stage by stage + bool addStage(EShLanguage, const TIntermediate&); + + // for mapping a uniform index to a uniform object's description + int getNumUniforms() { return (int)indexToUniform.size(); } + const TObjectReflection& getUniform(int i) const + { + if (i >= 0 && i < (int)indexToUniform.size()) + return indexToUniform[i]; + else + return badReflection; + } + + // for mapping a block index to the block's description + int getNumUniformBlocks() const { return (int)indexToUniformBlock.size(); } + const TObjectReflection& getUniformBlock(int i) const + { + if (i >= 0 && i < (int)indexToUniformBlock.size()) + return indexToUniformBlock[i]; + else + return badReflection; + } + + // for mapping an attribute index to the attribute's description + int getNumAttributes() { return (int)indexToAttribute.size(); } + const TObjectReflection& getAttribute(int i) const + { + if (i >= 0 && i < (int)indexToAttribute.size()) + return indexToAttribute[i]; + else + return badReflection; + } + + // for mapping any name to its index (block names, uniform names and attribute names) + int getIndex(const char* name) const + { + TNameToIndex::const_iterator it = nameToIndex.find(name); + if (it == nameToIndex.end()) + return -1; + else + return it->second; + } + + // Thread local size + unsigned getLocalSize(int dim) const { return dim <= 2 ? localSize[dim] : 0; } + + void dump(); + +protected: + friend class glslang::TReflectionTraverser; + + void buildAttributeReflection(EShLanguage, const TIntermediate&); + + // Need a TString hash: typedef std::unordered_map TNameToIndex; + typedef std::map TNameToIndex; + typedef std::vector TMapIndexToReflection; + + TObjectReflection badReflection; // return for queries of -1 or generally out of range; has expected descriptions with in it for this + TNameToIndex nameToIndex; // maps names to indexes; can hold all types of data: uniform/buffer and which function names have been processed + TMapIndexToReflection indexToUniform; + TMapIndexToReflection indexToUniformBlock; + TMapIndexToReflection indexToAttribute; + + unsigned int localSize[3]; +}; + +} // end namespace glslang + +#endif // _REFLECTION_INCLUDED diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Unix/CMakeLists.txt b/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Unix/CMakeLists.txt new file mode 100644 index 0000000..174cc91 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Unix/CMakeLists.txt @@ -0,0 +1,5 @@ +add_library(OSDependent STATIC ossource.cpp ../osinclude.h) +set_property(TARGET OSDependent PROPERTY FOLDER glslang) + +install(TARGETS OSDependent + ARCHIVE DESTINATION lib) diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Unix/ossource.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Unix/ossource.cpp new file mode 100644 index 0000000..4f8098b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Unix/ossource.cpp @@ -0,0 +1,205 @@ +// +// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +// 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. +// + +// +// This file contains the Linux-specific functions +// +#include "../osinclude.h" +#include "../../../OGLCompilersDLL/InitializeDll.h" + +#include +#include +#include +#include +#include + +namespace glslang { + +// +// Thread cleanup +// + +// +// Wrapper for Linux call to DetachThread. This is required as pthread_cleanup_push() expects +// the cleanup routine to return void. +// +static void DetachThreadLinux(void *) +{ + DetachThread(); +} + +// +// Registers cleanup handler, sets cancel type and state, and executes the thread specific +// cleanup handler. This function will be called in the Standalone.cpp for regression +// testing. When OpenGL applications are run with the driver code, Linux OS does the +// thread cleanup. +// +void OS_CleanupThreadData(void) +{ +#ifdef __ANDROID__ + DetachThreadLinux(NULL); +#else + int old_cancel_state, old_cancel_type; + void *cleanupArg = NULL; + + // + // Set thread cancel state and push cleanup handler. + // + pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, &old_cancel_state); + pthread_cleanup_push(DetachThreadLinux, (void *) cleanupArg); + + // + // Put the thread in deferred cancellation mode. + // + pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, &old_cancel_type); + + // + // Pop cleanup handler and execute it prior to unregistering the cleanup handler. + // + pthread_cleanup_pop(1); + + // + // Restore the thread's previous cancellation mode. + // + pthread_setcanceltype(old_cancel_state, NULL); +#endif +} + +// +// Thread Local Storage Operations +// +inline OS_TLSIndex PthreadKeyToTLSIndex(pthread_key_t key) +{ + return (OS_TLSIndex)((uintptr_t)key + 1); +} + +inline pthread_key_t TLSIndexToPthreadKey(OS_TLSIndex nIndex) +{ + return (pthread_key_t)((uintptr_t)nIndex - 1); +} + +OS_TLSIndex OS_AllocTLSIndex() +{ + pthread_key_t pPoolIndex; + + // + // Create global pool key. + // + if ((pthread_key_create(&pPoolIndex, NULL)) != 0) { + assert(0 && "OS_AllocTLSIndex(): Unable to allocate Thread Local Storage"); + return OS_INVALID_TLS_INDEX; + } + else + return PthreadKeyToTLSIndex(pPoolIndex); +} + +bool OS_SetTLSValue(OS_TLSIndex nIndex, void *lpvValue) +{ + if (nIndex == OS_INVALID_TLS_INDEX) { + assert(0 && "OS_SetTLSValue(): Invalid TLS Index"); + return false; + } + + if (pthread_setspecific(TLSIndexToPthreadKey(nIndex), lpvValue) == 0) + return true; + else + return false; +} + +void* OS_GetTLSValue(OS_TLSIndex nIndex) +{ + // + // This function should return 0 if nIndex is invalid. + // + assert(nIndex != OS_INVALID_TLS_INDEX); + return pthread_getspecific(TLSIndexToPthreadKey(nIndex)); +} + +bool OS_FreeTLSIndex(OS_TLSIndex nIndex) +{ + if (nIndex == OS_INVALID_TLS_INDEX) { + assert(0 && "OS_SetTLSValue(): Invalid TLS Index"); + return false; + } + + // + // Delete the global pool key. + // + if (pthread_key_delete(TLSIndexToPthreadKey(nIndex)) == 0) + return true; + else + return false; +} + +namespace { + pthread_mutex_t gMutex; +} + +void InitGlobalLock() +{ + pthread_mutexattr_t mutexattr; + pthread_mutexattr_init(&mutexattr); + pthread_mutexattr_settype(&mutexattr, PTHREAD_MUTEX_RECURSIVE); + pthread_mutex_init(&gMutex, &mutexattr); +} + +void GetGlobalLock() +{ + pthread_mutex_lock(&gMutex); +} + +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*/) +{ +} + +void OS_DumpMemoryCounters() +{ +} + +} // 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 new file mode 100644 index 0000000..399760c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Windows/CMakeLists.txt @@ -0,0 +1,17 @@ +set(SOURCES ossource.cpp ../osinclude.h) + +add_library(OSDependent STATIC ${SOURCES}) +set_property(TARGET OSDependent PROPERTY FOLDER glslang) + +# 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) +endif() + +if(WIN32) + source_group("Source" FILES ${SOURCES}) +endif(WIN32) + +install(TARGETS OSDependent + ARCHIVE DESTINATION lib) diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Windows/main.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Windows/main.cpp new file mode 100644 index 0000000..0bcde7b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Windows/main.cpp @@ -0,0 +1,74 @@ +// +// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +// 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. +// + +#include "InitializeDll.h" + +#define STRICT +#define VC_EXTRALEAN 1 +#include +#include + +BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) +{ + switch (fdwReason) + { + case DLL_PROCESS_ATTACH: + + if (! glslang::InitProcess()) + return FALSE; + break; + case DLL_THREAD_ATTACH: + + if (! glslang::InitThread()) + return FALSE; + break; + + case DLL_THREAD_DETACH: + + if (! glslang::DetachThread()) + return FALSE; + break; + + case DLL_PROCESS_DETACH: + + glslang::DetachProcess(); + break; + + default: + assert(0 && "DllMain(): Reason for calling DLL Main is unknown"); + return FALSE; + } + + return TRUE; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Windows/ossource.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Windows/ossource.cpp new file mode 100644 index 0000000..73ae0ca --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Windows/ossource.cpp @@ -0,0 +1,162 @@ +// +// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +// 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. +// + +#include "../osinclude.h" + +#define STRICT +#define VC_EXTRALEAN 1 +#include +#include +#include +#include +#include +#include + +// +// This file contains the Window-OS-specific functions +// + +#if !(defined(_WIN32) || defined(_WIN64)) +#error Trying to build a windows specific file in a non windows build. +#endif + +namespace glslang { + +inline OS_TLSIndex ToGenericTLSIndex (DWORD handle) +{ + return (OS_TLSIndex)((uintptr_t)handle + 1); +} + +inline DWORD ToNativeTLSIndex (OS_TLSIndex nIndex) +{ + return (DWORD)((uintptr_t)nIndex - 1); +} + +// +// Thread Local Storage Operations +// +OS_TLSIndex OS_AllocTLSIndex() +{ + DWORD dwIndex = TlsAlloc(); + if (dwIndex == TLS_OUT_OF_INDEXES) { + assert(0 && "OS_AllocTLSIndex(): Unable to allocate Thread Local Storage"); + return OS_INVALID_TLS_INDEX; + } + + return ToGenericTLSIndex(dwIndex); +} + +bool OS_SetTLSValue(OS_TLSIndex nIndex, void *lpvValue) +{ + if (nIndex == OS_INVALID_TLS_INDEX) { + assert(0 && "OS_SetTLSValue(): Invalid TLS Index"); + return false; + } + + if (TlsSetValue(ToNativeTLSIndex(nIndex), lpvValue)) + return true; + else + return false; +} + +void* OS_GetTLSValue(OS_TLSIndex nIndex) +{ + assert(nIndex != OS_INVALID_TLS_INDEX); + return TlsGetValue(ToNativeTLSIndex(nIndex)); +} + +bool OS_FreeTLSIndex(OS_TLSIndex nIndex) +{ + if (nIndex == OS_INVALID_TLS_INDEX) { + assert(0 && "OS_SetTLSValue(): Invalid TLS Index"); + return false; + } + + if (TlsFree(ToNativeTLSIndex(nIndex))) + return true; + else + return false; +} + +HANDLE GlobalLock; + +void InitGlobalLock() +{ + GlobalLock = CreateMutex(0, false, 0); +} + +void GetGlobalLock() +{ + WaitForSingleObject(GlobalLock, INFINITE); +} + +void ReleaseGlobalLock() +{ + ReleaseMutex(GlobalLock); +} + +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() +{ +#ifdef DUMP_COUNTERS + PROCESS_MEMORY_COUNTERS counters; + GetProcessMemoryInfo(GetCurrentProcess(), &counters, sizeof(counters)); + printf("Working set size: %d\n", counters.WorkingSetSize); +#else + printf("Recompile with DUMP_COUNTERS defined to see counters.\n"); +#endif +} + +} // namespace glslang diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/osinclude.h b/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/osinclude.h new file mode 100644 index 0000000..e832526 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/osinclude.h @@ -0,0 +1,66 @@ +// +// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +// 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. +// + +#ifndef __OSINCLUDE_H +#define __OSINCLUDE_H + +namespace glslang { + +// +// Thread Local Storage Operations +// +typedef void* OS_TLSIndex; +#define OS_INVALID_TLS_INDEX ((void*)0) + +OS_TLSIndex OS_AllocTLSIndex(); +bool OS_SetTLSValue(OS_TLSIndex nIndex, void *lpvValue); +bool OS_FreeTLSIndex(OS_TLSIndex nIndex); +void* OS_GetTLSValue(OS_TLSIndex nIndex); + +void InitGlobalLock(); +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(); + +} // end namespace glslang + +#endif // __OSINCLUDE_H diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/Public/ShaderLang.h b/3rdparty/bgfx/3rdparty/glslang/glslang/Public/ShaderLang.h new file mode 100644 index 0000000..8d8abd7 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/Public/ShaderLang.h @@ -0,0 +1,557 @@ +// +// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +// Copyright (C) 2013-2016 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. +// +#ifndef _COMPILER_INTERFACE_INCLUDED_ +#define _COMPILER_INTERFACE_INCLUDED_ + +#include "../Include/ResourceLimits.h" +#include "../MachineIndependent/Versions.h" + +#include + +#ifdef _WIN32 +#define C_DECL __cdecl +//#ifdef SH_EXPORTING +// #define SH_IMPORT_EXPORT __declspec(dllexport) +//#else +// #define SH_IMPORT_EXPORT __declspec(dllimport) +//#endif +#define SH_IMPORT_EXPORT +#else +#define SH_IMPORT_EXPORT +#ifndef __fastcall +#define __fastcall +#endif +#define C_DECL +#endif + +// +// This is the platform independent interface between an OGL driver +// and the shading language compiler/linker. +// + +#ifdef __cplusplus + extern "C" { +#endif + +// +// Driver must call this first, once, 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. +// +SH_IMPORT_EXPORT int __fastcall ShFinalize(); + +// +// Types of languages the compiler can consume. +// +typedef enum { + EShLangVertex, + EShLangTessControl, + EShLangTessEvaluation, + EShLangGeometry, + EShLangFragment, + EShLangCompute, + EShLangCount, +} EShLanguage; // would be better as stage, but this is ancient now + +typedef enum { + EShLangVertexMask = (1 << EShLangVertex), + EShLangTessControlMask = (1 << EShLangTessControl), + EShLangTessEvaluationMask = (1 << EShLangTessEvaluation), + EShLangGeometryMask = (1 << EShLangGeometry), + EShLangFragmentMask = (1 << EShLangFragment), + EShLangComputeMask = (1 << EShLangCompute), +} EShLanguageMask; + +namespace glslang { + +class TType; + +typedef enum { + EShSourceNone, + EShSourceGlsl, + EShSourceHlsl, +} EShSource; // if EShLanguage were EShStage, this could be EShLanguage instead + +const char* StageName(EShLanguage); + +} // end namespace glslang + +// +// Types of output the linker will create. +// +typedef enum { + EShExVertexFragment, + EShExFragment +} EShExecutable; + +// +// Optimization level for the compiler. +// +typedef enum { + EShOptNoGeneration, + EShOptNone, + EShOptSimple, // Optimizations that can be done quickly + EShOptFull, // Optimizations that will take more time +} EShOptimizationLevel; + +// +// Message choices for what errors and warnings are given. +// +enum EShMessages { + EShMsgDefault = 0, // default is to give all required errors and extra warnings + EShMsgRelaxedErrors = (1 << 0), // be liberal in accepting input + EShMsgSuppressWarnings = (1 << 1), // suppress all warnings, except those required by the specification + EShMsgAST = (1 << 2), // print the AST intermediate representation + EShMsgSpvRules = (1 << 3), // issue messages for SPIR-V generation + EShMsgVulkanRules = (1 << 4), // issue messages for Vulkan-requirements of GLSL for SPIR-V + EShMsgOnlyPreprocessor = (1 << 5), // only print out errors produced by the preprocessor + 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 +}; + +// +// Build a table for bindings. This can be used for locating +// attributes, uniforms, globals, etc., as needed. +// +typedef struct { + const char* name; + int binding; +} ShBinding; + +typedef struct { + int numBindings; + ShBinding* bindings; // array of bindings +} ShBindingTable; + +// +// ShHandle held by but opaque to the driver. It is allocated, +// managed, and de-allocated by the compiler/linker. It's contents +// are defined by and used by the compiler and linker. For example, +// symbol table information and object code passed from the compiler +// to the linker can be stored where ShHandle points. +// +// If handle creation fails, 0 will be returned. +// +typedef void* ShHandle; + +// +// Driver calls these to create and destroy compiler/linker +// objects. +// +SH_IMPORT_EXPORT ShHandle ShConstructCompiler(const EShLanguage, int debugOptions); // one per shader +SH_IMPORT_EXPORT ShHandle ShConstructLinker(const EShExecutable, int debugOptions); // one per shader pair +SH_IMPORT_EXPORT ShHandle ShConstructUniformMap(); // one per uniform namespace (currently entire program object) +SH_IMPORT_EXPORT void ShDestruct(ShHandle); + +// +// The return value of ShCompile is boolean, non-zero indicating +// success. +// +// The info-log should be written by ShCompile into +// ShHandle, so it can answer future queries. +// +SH_IMPORT_EXPORT int ShCompile( + const ShHandle, + const char* const shaderStrings[], + const int numStrings, + const int* lengths, + const EShOptimizationLevel, + const TBuiltInResource *resources, + int debugOptions, + int defaultVersion = 110, // use 100 for ES environment, overridden by #version in shader + bool forwardCompatible = false, // give errors for use of deprecated features + EShMessages messages = EShMsgDefault // warnings and errors + ); + +SH_IMPORT_EXPORT int ShLinkExt( + const ShHandle, // linker object + const ShHandle h[], // compiler objects to link together + const int numHandles); + +// +// ShSetEncrpytionMethod is a place-holder for specifying +// how source code is encrypted. +// +SH_IMPORT_EXPORT void ShSetEncryptionMethod(ShHandle); + +// +// All the following return 0 if the information is not +// available in the object passed down, or the object is bad. +// +SH_IMPORT_EXPORT const char* ShGetInfoLog(const ShHandle); +SH_IMPORT_EXPORT const void* ShGetExecutable(const ShHandle); +SH_IMPORT_EXPORT int ShSetVirtualAttributeBindings(const ShHandle, const ShBindingTable*); // to detect user aliasing +SH_IMPORT_EXPORT int ShSetFixedAttributeBindings(const ShHandle, const ShBindingTable*); // to force any physical mappings +// +// Tell the linker to never assign a vertex attribute to this list of physical attributes +// +SH_IMPORT_EXPORT int ShExcludeAttributes(const ShHandle, int *attributes, int count); + +// +// Returns the location ID of the named uniform. +// Returns -1 if error. +// +SH_IMPORT_EXPORT int ShGetUniformLocation(const ShHandle uniformMap, const char* name); + +#ifdef __cplusplus + } // end extern "C" +#endif + +//////////////////////////////////////////////////////////////////////////////////////////// +// +// Deferred-Lowering C++ Interface +// ----------------------------------- +// +// Below is a new alternate C++ interface that might potentially replace the above +// opaque handle-based interface. +// +// The below is further designed to handle multiple compilation units per stage, where +// the intermediate results, including the parse tree, are preserved until link time, +// rather than the above interface which is designed to have each compilation unit +// lowered at compile time. In the above model, linking occurs on the lowered results, +// whereas in this model intra-stage linking can occur at the parse tree +// (treeRoot in TIntermediate) level, and then a full stage can be lowered. +// + +#include +#include +#include + +class TCompiler; +class TInfoSink; + +namespace glslang { + +const char* GetEsslVersionString(); +const char* GetGlslVersionString(); +int GetKhronosToolId(); + +class TIntermediate; +class TProgram; +class TPoolAllocator; + +// Call this exactly once per process before using anything else +bool InitializeProcess(); + +// Call once per process to tear down everything +void FinalizeProcess(); + +// 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. +// Optionally use setPreamble() to set a special shader string that will be +// processed before all others but won't affect the validity of #version. +// +// N.B.: Does not yet support having the same TShader instance being linked into +// multiple programs. +// +// N.B.: Destruct a linked program *before* destructing the shaders linked into it. +// +class TShader { +public: + explicit TShader(EShLanguage); + virtual ~TShader(); + void setStrings(const char* const* s, int n); + void setStringsWithLengths(const char* const* s, const int* l, int n); + void setStringsWithLengthsAndNames( + const char* const* s, const int* l, const char* const* names, int n); + 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 setAutoMapBindings(bool map); + void setFlattenUniformArrays(bool flatten); + void setNoStorageFormat(bool useUnknownFormat); + + // Interface to #include handlers. + // + // To support #include, a client of Glslang does the following: + // 1. Call setStringsWithNames to set the source strings and associated + // names. For example, the names could be the names of the files + // containing the shader sources. + // 2. Call parse with an Includer. + // + // When the Glslang parser encounters an #include directive, it calls + // the Includer's include method with the requested include name + // together with the current string name. The returned IncludeResult + // contains the fully resolved name of the included source, together + // with the source text that should replace the #include directive + // in the source stream. After parsing that source, Glslang will + // release the IncludeResult object. + class Includer { + public: + // An IncludeResult contains the resolved name and content of a source + // inclusion. + struct IncludeResult { + IncludeResult(const std::string& headerName, const char* const headerData, const size_t headerLength, void* userData) : + headerName(headerName), headerData(headerData), headerLength(headerLength), userData(userData) { } + // For a successful inclusion, the fully resolved name of the requested + // include. For example, in a file system-based includer, full resolution + // should convert a relative path name into an absolute path name. + // For a failed inclusion, this is an empty string. + const std::string headerName; + // The content and byte length of the requested inclusion. The + // Includer producing this IncludeResult retains ownership of the + // storage. + // For a failed inclusion, the header + // field points to a string containing error details. + const char* const headerData; + const size_t headerLength; + // Include resolver's context. + void* userData; + protected: + IncludeResult& operator=(const IncludeResult&); + IncludeResult(); + }; + + // For both include methods below: + // + // Resolves an inclusion request by name, current source name, + // and include depth. + // On success, returns an IncludeResult containing the resolved name + // and content of the include. + // On failure, returns a nullptr, or an IncludeResult + // with an empty string for the headerName and error details in the + // header field. + // The Includer retains ownership of the contents + // of the returned IncludeResult value, and those contents must + // remain valid until the releaseInclude method is called on that + // IncludeResult object. + // + // Note "local" vs. "system" is not an "either/or": "local" is an + // extra thing to do over "system". Both might get called, as per + // the C++ specification. + + // For the "system" or <>-style includes; search the "system" paths. + virtual IncludeResult* includeSystem(const char* /*headerName*/, + const char* /*includerName*/, + size_t /*inclusionDepth*/) { return nullptr; } + + // For the "local"-only aspect of a "" include. Should not search in the + // "system" paths, because on returning a failure, the parser will + // call includeSystem() to look in the "system" locations. + virtual IncludeResult* includeLocal(const char* /*headerName*/, + const char* /*includerName*/, + size_t /*inclusionDepth*/) { return nullptr; } + + // Signals that the parser will no longer use the contents of the + // specified IncludeResult. + virtual void releaseInclude(IncludeResult*) = 0; + virtual ~Includer() {} + }; + + // Fail all Includer searches + class ForbidIncluder : public Includer { + public: + virtual void releaseInclude(IncludeResult*) override { } + }; + + bool parse(const TBuiltInResource* res, int defaultVersion, EProfile defaultProfile, bool forceDefaultVersionAndProfile, + bool forwardCompatible, EShMessages messages) + { + TShader::ForbidIncluder includer; + 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 preprocess(const TBuiltInResource* builtInResources, + int defaultVersion, EProfile defaultProfile, bool forceDefaultVersionAndProfile, + bool forwardCompatible, EShMessages message, std::string* outputString, + Includer& includer); + + const char* getInfoLog(); + const char* getInfoDebugLog(); + + EShLanguage getStage() const { return stage; } + +protected: + TPoolAllocator* pool; + EShLanguage stage; + TCompiler* compiler; + TIntermediate* intermediate; + TInfoSink* infoSink; + // strings and lengths follow the standard for glShaderSource: + // strings is an array of numStrings pointers to string data. + // lengths can be null, but if not it is an array of numStrings + // integers containing the length of the associated strings. + // if lengths is null or lengths[n] < 0 the associated strings[n] is + // assumed to be null-terminated. + // stringNames is the optional names for all the strings. If stringNames + // is null, then none of the strings has name. If a certain element in + // stringNames is null, then the corresponding string does not have name. + const char* const* strings; + const int* lengths; + const char* const* stringNames; + const char* preamble; + int numStrings; + + // a function in the source string can be renamed FROM this TO the name given in setEntryPoint. + std::string sourceEntryPointName; + + friend class TProgram; + +private: + TShader& operator=(TShader&); +}; + +class TReflection; +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. +// Invocations happen in a particular order: +// 1) all shader inputs +// 2) all shader outputs +// 3) all uniforms with binding and set already defined +// 4) all uniforms with binding but no set defined +// 5) all uniforms with set but no binding defined +// 6) all uniforms with no binding and no set defined +// +// NOTE: that still limit checks are applied to bindings and sets +// and may result in an error. +class TIoMapResolver +{ +public: + virtual ~TIoMapResolver() {} + + // Should return true if the resulting/current binding would be ok. + // 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. + // 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. + // 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. + // 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. + // 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. + // 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; +}; + +// Make one TProgram per set of shaders that will get linked together. Add all +// the shaders that are to be linked together. After calling shader.parse() +// for all shaders, call link(). +// +// N.B.: Destruct a linked program *before* destructing the shaders linked into it. +// +class TProgram { +public: + TProgram(); + virtual ~TProgram(); + void addShader(TShader* shader) { stages[shader->stage].push_back(shader); } + + // Link Validation interface + bool link(EShMessages); + const char* getInfoLog(); + const char* getInfoDebugLog(); + + TIntermediate* getIntermediate(EShLanguage stage) const { return intermediate[stage]; } + + // Reflection Interface + bool buildReflection(); // call first, to do liveness analysis, index mapping, etc.; returns false on failure + int getNumLiveUniformVariables() const; // can be used for glGetProgramiv(GL_ACTIVE_UNIFORMS) + int getNumLiveUniformBlocks() const; // can be used for glGetProgramiv(GL_ACTIVE_UNIFORM_BLOCKS) + const char* getUniformName(int index) const; // can be used for "name" part of glGetActiveUniform() + 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 getUniformBlockIndex(int index) const; // can be used for glGetActiveUniformsiv(GL_UNIFORM_BLOCK_INDEX) + 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) + int getNumLiveAttributes() const; // can be used for glGetProgramiv(GL_ACTIVE_ATTRIBUTES) + unsigned getLocalSize(int dim) const; // return dim'th local size + const char *getAttributeName(int index) const; // can be used for glGetActiveAttrib() + int getAttributeType(int index) const; // can be used for glGetActiveAttrib() + const TType* getUniformTType(int index) const; // returns a TType* + const TType* getUniformBlockTType(int index) const; // returns a TType* + const TType* getAttributeTType(int index) const; // returns a TType* + + void dumpReflection(); + + // I/O mapping: apply base offsets and map live unbound variables + // If resolver is not provided it uses the previous approach + // and respects auto assignment and offsets. + bool mapIO(TIoMapResolver* resolver = NULL); + +protected: + bool linkStage(EShLanguage, EShMessages); + + TPoolAllocator* pool; + std::list stages[EShLangCount]; + TIntermediate* intermediate[EShLangCount]; + bool newedIntermediate[EShLangCount]; // track which intermediate were "new" versus reusing a singleton unit in a stage + TInfoSink* infoSink; + TReflection* reflection; + TIoMapper* ioMapper; + bool linked; + +private: + TProgram(TProgram&); + TProgram& operator=(TProgram&); +}; + +} // end namespace glslang + +#endif // _COMPILER_INTERFACE_INCLUDED_ diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/updateGrammar b/3rdparty/bgfx/3rdparty/glslang/glslang/updateGrammar new file mode 100755 index 0000000..f8fa81d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/glslang/updateGrammar @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +bison --defines=MachineIndependent/glslang_tab.cpp.h -t MachineIndependent/glslang.y -o MachineIndependent/glslang_tab.cpp diff --git a/3rdparty/bgfx/3rdparty/glslang/gtests/AST.FromFile.cpp b/3rdparty/bgfx/3rdparty/glslang/gtests/AST.FromFile.cpp new file mode 100644 index 0000000..d8a5ef9 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/gtests/AST.FromFile.cpp @@ -0,0 +1,201 @@ +// +// Copyright (C) 2016 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 Google Inc. 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. + +#include + +#include "TestFixture.h" + +namespace glslangtest { +namespace { + +using CompileToAstTest = GlslangTest<::testing::TestWithParam>; + +TEST_P(CompileToAstTest, FromFile) +{ + loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(), + Source::GLSL, Semantics::OpenGL, + Target::AST); +} + +// clang-format off +INSTANTIATE_TEST_CASE_P( + Glsl, CompileToAstTest, + ::testing::ValuesIn(std::vector({ + "sample.frag", + "sample.vert", + "decls.frag", + "specExamples.frag", + "specExamples.vert", + "versionsClean.frag", + "versionsClean.vert", + "versionsErrors.frag", + "versionsErrors.vert", + "100.frag", + "120.vert", + "120.frag", + "130.vert", + "130.frag", + "140.vert", + "140.frag", + "150.vert", + "150.geom", + "150.frag", + "precision.frag", + "precision.vert", + "nonSquare.vert", + "matrixError.vert", + "cppSimple.vert", + "cppIndent.vert", + "cppNest.vert", + "cppBad.vert", + "cppBad2.vert", + "cppComplexExpr.vert", + "badChars.frag", + "pointCoord.frag", + "array.frag", + "array100.frag", + "comment.frag", + "300.vert", + "300.frag", + "300BuiltIns.frag", + "300layout.vert", + "300layout.frag", + "300operations.frag", + "300block.frag", + "310.comp", + "310.vert", + "310.geom", + "310.frag", + "310.tesc", + "310.tese", + "310implicitSizeArrayError.vert", + "310AofA.vert", + "330.frag", + "330comp.frag", + "constErrors.frag", + "constFold.frag", + "errors.frag", + "forwardRef.frag", + "uint.frag", + "switch.frag", + "tokenLength.vert", + "100Limits.vert", + "100scope.vert", + "110scope.vert", + "300scope.vert", + "400.frag", + "400.vert", + "410.vert", + "420.comp", + "420.frag", + "420.vert", + "420.geom", + "420_size_gl_in.geom", + "430scope.vert", + "lineContinuation100.vert", + "lineContinuation.vert", + "numeral.frag", + "400.geom", + "400.tesc", + "400.tese", + "410.tesc", + "420.tesc", + "420.tese", + "410.geom", + "430.vert", + "430.comp", + "430AofA.frag", + "440.vert", + "440.frag", + "450.vert", + "450.geom", + "450.tesc", + "450.tese", + "450.frag", + "450.comp", + "dce.frag", + "atomic_uint.frag", + "aggOps.frag", + "always-discard.frag", + "always-discard2.frag", + "conditionalDiscard.frag", + "conversion.frag", + "dataOut.frag", + "dataOutIndirect.frag", + "deepRvalue.frag", + "depthOut.frag", + "discard-dce.frag", + "doWhileLoop.frag", + "earlyReturnDiscard.frag", + "flowControl.frag", + "forLoop.frag", + "functionCall.frag", + "functionSemantics.frag", + "length.frag", + "localAggregates.frag", + "loops.frag", + "loopsArtificial.frag", + "matrix.frag", + "matrix2.frag", + "newTexture.frag", + "Operations.frag", + "prepost.frag", + "simpleFunctionCall.frag", + "structAssignment.frag", + "structDeref.frag", + "structure.frag", + "swizzle.frag", + "syntaxError.frag", + "test.frag", + "texture.frag", + "tokenPaste.vert", + "types.frag", + "uniformArray.frag", + "variableArrayIndex.frag", + "varyingArray.frag", + "varyingArrayIndirect.frag", + "voidFunction.frag", + "whileLoop.frag", + "nonVulkan.frag", + "negativeArraySize.comp", + "precise.tesc", + "precise_struct_block.vert", + "maxClipDistances.vert", + })), + FileNameAsCustomTestSuffix +); +// clang-format on + +} // anonymous namespace +} // namespace glslangtest diff --git a/3rdparty/bgfx/3rdparty/glslang/gtests/BuiltInResource.FromFile.cpp b/3rdparty/bgfx/3rdparty/glslang/gtests/BuiltInResource.FromFile.cpp new file mode 100644 index 0000000..da81fe9 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/gtests/BuiltInResource.FromFile.cpp @@ -0,0 +1,57 @@ +// +// Copyright (C) 2016 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 Google Inc. 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. + +#include + +#include + +#include "StandAlone/ResourceLimits.h" +#include "TestFixture.h" + +namespace glslangtest { +namespace { + +using DefaultResourceTest = GlslangTest<::testing::Test>; + +TEST_F(DefaultResourceTest, FromFile) +{ + const std::string path = GlobalTestSettings.testRoot + "/baseResults/test.conf"; + std::string expectedConfig; + tryLoadFile(path, "expected resource limit", &expectedConfig); + const std::string realConfig = glslang::GetDefaultTBuiltInResourceString(); + ASSERT_EQ(expectedConfig, realConfig); +} + +} // anonymous namespace +} // namespace glslangtest diff --git a/3rdparty/bgfx/3rdparty/glslang/gtests/CMakeLists.txt b/3rdparty/bgfx/3rdparty/glslang/gtests/CMakeLists.txt new file mode 100644 index 0000000..c383ca0 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/gtests/CMakeLists.txt @@ -0,0 +1,55 @@ +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 + + # 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 + ) + + add_executable(glslangtests ${TEST_SOURCES}) + set_property(TARGET glslangtests PROPERTY FOLDER tests) + glslang_set_link_args(glslangtests) + install(TARGETS glslangtests + RUNTIME DESTINATION bin) + + 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) + + 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() diff --git a/3rdparty/bgfx/3rdparty/glslang/gtests/Config.FromFile.cpp b/3rdparty/bgfx/3rdparty/glslang/gtests/Config.FromFile.cpp new file mode 100644 index 0000000..a6e93dc --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/gtests/Config.FromFile.cpp @@ -0,0 +1,107 @@ +// +// Copyright (C) 2016 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 Google Inc. 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. + +#include "StandAlone/ResourceLimits.h" +#include "TestFixture.h" + +namespace glslangtest { +namespace { + +struct TestCaseSpec { + std::string input; + std::string config; + std::string output; + EShMessages controls; +}; + +using ConfigTest = GlslangTest<::testing::TestWithParam>; + +TEST_P(ConfigTest, FromFile) +{ + TestCaseSpec testCase = GetParam(); + GlslangResult result; + + // Get the contents for input shader and limit configurations. + std::string shaderContents, configContents; + tryLoadFile(GlobalTestSettings.testRoot + "/" + testCase.input, "input", &shaderContents); + tryLoadFile(GlobalTestSettings.testRoot + "/" + testCase.config, "limits config", &configContents); + + // Decode limit configurations. + TBuiltInResource resources = {}; + { + const size_t len = configContents.size(); + char* configChars = new char[len + 1]; + memcpy(configChars, configContents.data(), len); + configChars[len] = 0; + glslang::DecodeResourceLimits(&resources, configChars); + delete[] configChars; + } + + // Compile the shader. + glslang::TShader shader(GetShaderStage(GetSuffix(testCase.input))); + compile(&shader, shaderContents, "", testCase.controls, &resources); + result.shaderResults.push_back( + {testCase.input, shader.getInfoLog(), shader.getInfoDebugLog()}); + + // Link the shader. + glslang::TProgram program; + program.addShader(&shader); + program.link(testCase.controls); + result.linkingOutput = program.getInfoLog(); + result.linkingError = program.getInfoDebugLog(); + + std::ostringstream stream; + outputResultToStream(&stream, result, testCase.controls); + + // Check with expected results. + const std::string expectedOutputFname = + GlobalTestSettings.testRoot + "/baseResults/" + testCase.output; + std::string expectedOutput; + tryLoadFile(expectedOutputFname, "expected output", &expectedOutput); + + checkEqAndUpdateIfRequested(expectedOutput, stream.str(), expectedOutputFname); +} + +// clang-format off +INSTANTIATE_TEST_CASE_P( + Glsl, ConfigTest, + ::testing::ValuesIn(std::vector({ + {"specExamples.vert", "baseResults/test.conf", "specExamples.vert.out", (EShMessages)(EShMsgAST | EShMsgCascadingErrors)}, + {"100Limits.vert", "100.conf", "100LimitsConf.vert.out", EShMsgCascadingErrors}, + })), +); +// clang-format on + +} // anonymous namespace +} // namespace glslangtest diff --git a/3rdparty/bgfx/3rdparty/glslang/gtests/HexFloat.cpp b/3rdparty/bgfx/3rdparty/glslang/gtests/HexFloat.cpp new file mode 100644 index 0000000..ddbee1f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/gtests/HexFloat.cpp @@ -0,0 +1,1231 @@ +// Copyright (c) 2015-2016 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. +// 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 +#include +#include +#include +#include +#include + +#include +#include "SPIRV/hex_float.h" + +namespace { +using ::testing::Eq; +using spvutils::BitwiseCast; +using spvutils::Float16; +using spvutils::FloatProxy; +using spvutils::HexFloat; +using spvutils::ParseNormalFloat; + +// In this file "encode" means converting a number into a string, +// and "decode" means converting a string into a number. + +using HexFloatTest = + ::testing::TestWithParam, std::string>>; +using DecodeHexFloatTest = + ::testing::TestWithParam>>; +using HexDoubleTest = + ::testing::TestWithParam, std::string>>; +using DecodeHexDoubleTest = + ::testing::TestWithParam>>; + +// Hex-encodes a float value. +template +std::string EncodeViaHexFloat(const T& value) { + std::stringstream ss; + ss << spvutils::HexFloat(value); + return ss.str(); +} + +// The following two tests can't be DRY because they take different parameter +// types. + +TEST_P(HexFloatTest, EncodeCorrectly) { + EXPECT_THAT(EncodeViaHexFloat(GetParam().first), Eq(GetParam().second)); +} + +TEST_P(HexDoubleTest, EncodeCorrectly) { + EXPECT_THAT(EncodeViaHexFloat(GetParam().first), Eq(GetParam().second)); +} + +// Decodes a hex-float string. +template +FloatProxy Decode(const std::string& str) { + spvutils::HexFloat> decoded(0.f); + EXPECT_TRUE((std::stringstream(str) >> decoded).eof()); + return decoded.value(); +} + +TEST_P(HexFloatTest, DecodeCorrectly) { + EXPECT_THAT(Decode(GetParam().second), Eq(GetParam().first)); +} + +TEST_P(HexDoubleTest, DecodeCorrectly) { + EXPECT_THAT(Decode(GetParam().second), Eq(GetParam().first)); +} + +INSTANTIATE_TEST_CASE_P( + Float32Tests, HexFloatTest, + ::testing::ValuesIn(std::vector, std::string>>({ + {0.f, "0x0p+0"}, + {1.f, "0x1p+0"}, + {2.f, "0x1p+1"}, + {3.f, "0x1.8p+1"}, + {0.5f, "0x1p-1"}, + {0.25f, "0x1p-2"}, + {0.75f, "0x1.8p-1"}, + {-0.f, "-0x0p+0"}, + {-1.f, "-0x1p+0"}, + {-0.5f, "-0x1p-1"}, + {-0.25f, "-0x1p-2"}, + {-0.75f, "-0x1.8p-1"}, + + // Larger numbers + {512.f, "0x1p+9"}, + {-512.f, "-0x1p+9"}, + {1024.f, "0x1p+10"}, + {-1024.f, "-0x1p+10"}, + {1024.f + 8.f, "0x1.02p+10"}, + {-1024.f - 8.f, "-0x1.02p+10"}, + + // Small numbers + {1.0f / 512.f, "0x1p-9"}, + {1.0f / -512.f, "-0x1p-9"}, + {1.0f / 1024.f, "0x1p-10"}, + {1.0f / -1024.f, "-0x1p-10"}, + {1.0f / 1024.f + 1.0f / 8.f, "0x1.02p-3"}, + {1.0f / -1024.f - 1.0f / 8.f, "-0x1.02p-3"}, + + // lowest non-denorm + {float(ldexp(1.0f, -126)), "0x1p-126"}, + {float(ldexp(-1.0f, -126)), "-0x1p-126"}, + + // Denormalized values + {float(ldexp(1.0f, -127)), "0x1p-127"}, + {float(ldexp(1.0f, -127) / 2.0f), "0x1p-128"}, + {float(ldexp(1.0f, -127) / 4.0f), "0x1p-129"}, + {float(ldexp(1.0f, -127) / 8.0f), "0x1p-130"}, + {float(ldexp(-1.0f, -127)), "-0x1p-127"}, + {float(ldexp(-1.0f, -127) / 2.0f), "-0x1p-128"}, + {float(ldexp(-1.0f, -127) / 4.0f), "-0x1p-129"}, + {float(ldexp(-1.0f, -127) / 8.0f), "-0x1p-130"}, + + {float(ldexp(1.0, -127) + (ldexp(1.0, -127) / 2.0f)), "0x1.8p-127"}, + {float(ldexp(1.0, -127) / 2.0 + (ldexp(1.0, -127) / 4.0f)), + "0x1.8p-128"}, + + })),); + +INSTANTIATE_TEST_CASE_P( + Float32NanTests, HexFloatTest, + ::testing::ValuesIn(std::vector, std::string>>({ + // Various NAN and INF cases + {uint32_t(0xFF800000), "-0x1p+128"}, // -inf + {uint32_t(0x7F800000), "0x1p+128"}, // inf + {uint32_t(0xFFC00000), "-0x1.8p+128"}, // -nan + {uint32_t(0xFF800100), "-0x1.0002p+128"}, // -nan + {uint32_t(0xFF800c00), "-0x1.0018p+128"}, // -nan + {uint32_t(0xFF80F000), "-0x1.01ep+128"}, // -nan + {uint32_t(0xFFFFFFFF), "-0x1.fffffep+128"}, // -nan + {uint32_t(0x7FC00000), "0x1.8p+128"}, // +nan + {uint32_t(0x7F800100), "0x1.0002p+128"}, // +nan + {uint32_t(0x7f800c00), "0x1.0018p+128"}, // +nan + {uint32_t(0x7F80F000), "0x1.01ep+128"}, // +nan + {uint32_t(0x7FFFFFFF), "0x1.fffffep+128"}, // +nan + })),); + +INSTANTIATE_TEST_CASE_P( + Float64Tests, HexDoubleTest, + ::testing::ValuesIn( + std::vector, std::string>>({ + {0., "0x0p+0"}, + {1., "0x1p+0"}, + {2., "0x1p+1"}, + {3., "0x1.8p+1"}, + {0.5, "0x1p-1"}, + {0.25, "0x1p-2"}, + {0.75, "0x1.8p-1"}, + {-0., "-0x0p+0"}, + {-1., "-0x1p+0"}, + {-0.5, "-0x1p-1"}, + {-0.25, "-0x1p-2"}, + {-0.75, "-0x1.8p-1"}, + + // Larger numbers + {512., "0x1p+9"}, + {-512., "-0x1p+9"}, + {1024., "0x1p+10"}, + {-1024., "-0x1p+10"}, + {1024. + 8., "0x1.02p+10"}, + {-1024. - 8., "-0x1.02p+10"}, + + // Large outside the range of normal floats + {ldexp(1.0, 128), "0x1p+128"}, + {ldexp(1.0, 129), "0x1p+129"}, + {ldexp(-1.0, 128), "-0x1p+128"}, + {ldexp(-1.0, 129), "-0x1p+129"}, + {ldexp(1.0, 128) + ldexp(1.0, 90), "0x1.0000000004p+128"}, + {ldexp(1.0, 129) + ldexp(1.0, 120), "0x1.008p+129"}, + {ldexp(-1.0, 128) + ldexp(1.0, 90), "-0x1.fffffffff8p+127"}, + {ldexp(-1.0, 129) + ldexp(1.0, 120), "-0x1.ffp+128"}, + + // Small numbers + {1.0 / 512., "0x1p-9"}, + {1.0 / -512., "-0x1p-9"}, + {1.0 / 1024., "0x1p-10"}, + {1.0 / -1024., "-0x1p-10"}, + {1.0 / 1024. + 1.0 / 8., "0x1.02p-3"}, + {1.0 / -1024. - 1.0 / 8., "-0x1.02p-3"}, + + // Small outside the range of normal floats + {ldexp(1.0, -128), "0x1p-128"}, + {ldexp(1.0, -129), "0x1p-129"}, + {ldexp(-1.0, -128), "-0x1p-128"}, + {ldexp(-1.0, -129), "-0x1p-129"}, + {ldexp(1.0, -128) + ldexp(1.0, -90), "0x1.0000000004p-90"}, + {ldexp(1.0, -129) + ldexp(1.0, -120), "0x1.008p-120"}, + {ldexp(-1.0, -128) + ldexp(1.0, -90), "0x1.fffffffff8p-91"}, + {ldexp(-1.0, -129) + ldexp(1.0, -120), "0x1.ffp-121"}, + + // lowest non-denorm + {ldexp(1.0, -1022), "0x1p-1022"}, + {ldexp(-1.0, -1022), "-0x1p-1022"}, + + // Denormalized values + {ldexp(1.0, -1023), "0x1p-1023"}, + {ldexp(1.0, -1023) / 2.0, "0x1p-1024"}, + {ldexp(1.0, -1023) / 4.0, "0x1p-1025"}, + {ldexp(1.0, -1023) / 8.0, "0x1p-1026"}, + {ldexp(-1.0, -1024), "-0x1p-1024"}, + {ldexp(-1.0, -1024) / 2.0, "-0x1p-1025"}, + {ldexp(-1.0, -1024) / 4.0, "-0x1p-1026"}, + {ldexp(-1.0, -1024) / 8.0, "-0x1p-1027"}, + + {ldexp(1.0, -1023) + (ldexp(1.0, -1023) / 2.0), "0x1.8p-1023"}, + {ldexp(1.0, -1023) / 2.0 + (ldexp(1.0, -1023) / 4.0), + "0x1.8p-1024"}, + + })),); + +INSTANTIATE_TEST_CASE_P( + Float64NanTests, HexDoubleTest, + ::testing::ValuesIn(std::vector< + std::pair, std::string>>({ + // Various NAN and INF cases + {uint64_t(0xFFF0000000000000LL), "-0x1p+1024"}, //-inf + {uint64_t(0x7FF0000000000000LL), "0x1p+1024"}, //+inf + {uint64_t(0xFFF8000000000000LL), "-0x1.8p+1024"}, // -nan + {uint64_t(0xFFF0F00000000000LL), "-0x1.0fp+1024"}, // -nan + {uint64_t(0xFFF0000000000001LL), "-0x1.0000000000001p+1024"}, // -nan + {uint64_t(0xFFF0000300000000LL), "-0x1.00003p+1024"}, // -nan + {uint64_t(0xFFFFFFFFFFFFFFFFLL), "-0x1.fffffffffffffp+1024"}, // -nan + {uint64_t(0x7FF8000000000000LL), "0x1.8p+1024"}, // +nan + {uint64_t(0x7FF0F00000000000LL), "0x1.0fp+1024"}, // +nan + {uint64_t(0x7FF0000000000001LL), "0x1.0000000000001p+1024"}, // -nan + {uint64_t(0x7FF0000300000000LL), "0x1.00003p+1024"}, // -nan + {uint64_t(0x7FFFFFFFFFFFFFFFLL), "0x1.fffffffffffffp+1024"}, // -nan + })),); + +TEST(HexFloatStreamTest, OperatorLeftShiftPreservesFloatAndFill) { + std::stringstream s; + s << std::setw(4) << std::oct << std::setfill('x') << 8 << " " + << FloatProxy(uint32_t(0xFF800100)) << " " << std::setw(4) << 9; + EXPECT_THAT(s.str(), Eq(std::string("xx10 -0x1.0002p+128 xx11"))); +} + +TEST(HexDoubleStreamTest, OperatorLeftShiftPreservesFloatAndFill) { + std::stringstream s; + s << std::setw(4) << std::oct << std::setfill('x') << 8 << " " + << FloatProxy(uint64_t(0x7FF0F00000000000LL)) << " " << std::setw(4) + << 9; + EXPECT_THAT(s.str(), Eq(std::string("xx10 0x1.0fp+1024 xx11"))); +} + +TEST_P(DecodeHexFloatTest, DecodeCorrectly) { + EXPECT_THAT(Decode(GetParam().first), Eq(GetParam().second)); +} + +TEST_P(DecodeHexDoubleTest, DecodeCorrectly) { + EXPECT_THAT(Decode(GetParam().first), Eq(GetParam().second)); +} + +INSTANTIATE_TEST_CASE_P( + Float32DecodeTests, DecodeHexFloatTest, + ::testing::ValuesIn(std::vector>>({ + {"0x0p+000", 0.f}, + {"0x0p0", 0.f}, + {"0x0p-0", 0.f}, + + // flush to zero cases + {"0x1p-500", 0.f}, // Exponent underflows. + {"-0x1p-500", -0.f}, + {"0x0.00000000001p-126", 0.f}, // Fraction causes underflow. + {"-0x0.0000000001p-127", -0.f}, + {"-0x0.01p-142", -0.f}, // Fraction causes additional underflow. + {"0x0.01p-142", 0.f}, + + // Some floats that do not encode the same way as they decode. + {"0x2p+0", 2.f}, + {"0xFFp+0", 255.f}, + {"0x0.8p+0", 0.5f}, + {"0x0.4p+0", 0.25f}, + })),); + +INSTANTIATE_TEST_CASE_P( + Float32DecodeInfTests, DecodeHexFloatTest, + ::testing::ValuesIn(std::vector>>({ + // inf cases + {"-0x1p+128", uint32_t(0xFF800000)}, // -inf + {"0x32p+127", uint32_t(0x7F800000)}, // inf + {"0x32p+500", uint32_t(0x7F800000)}, // inf + {"-0x32p+127", uint32_t(0xFF800000)}, // -inf + })),); + +INSTANTIATE_TEST_CASE_P( + Float64DecodeTests, DecodeHexDoubleTest, + ::testing::ValuesIn( + std::vector>>({ + {"0x0p+000", 0.}, + {"0x0p0", 0.}, + {"0x0p-0", 0.}, + + // flush to zero cases + {"0x1p-5000", 0.}, // Exponent underflows. + {"-0x1p-5000", -0.}, + {"0x0.0000000000000001p-1023", 0.}, // Fraction causes underflow. + {"-0x0.000000000000001p-1024", -0.}, + {"-0x0.01p-1090", -0.f}, // Fraction causes additional underflow. + {"0x0.01p-1090", 0.}, + + // Some floats that do not encode the same way as they decode. + {"0x2p+0", 2.}, + {"0xFFp+0", 255.}, + {"0x0.8p+0", 0.5}, + {"0x0.4p+0", 0.25}, + })),); + +INSTANTIATE_TEST_CASE_P( + Float64DecodeInfTests, DecodeHexDoubleTest, + ::testing::ValuesIn( + std::vector>>({ + // inf cases + {"-0x1p+1024", uint64_t(0xFFF0000000000000)}, // -inf + {"0x32p+1023", uint64_t(0x7FF0000000000000)}, // inf + {"0x32p+5000", uint64_t(0x7FF0000000000000)}, // inf + {"-0x32p+1023", uint64_t(0xFFF0000000000000)}, // -inf + })),); + +TEST(FloatProxy, ValidConversion) { + EXPECT_THAT(FloatProxy(1.f).getAsFloat(), Eq(1.0f)); + EXPECT_THAT(FloatProxy(32.f).getAsFloat(), Eq(32.0f)); + EXPECT_THAT(FloatProxy(-1.f).getAsFloat(), Eq(-1.0f)); + EXPECT_THAT(FloatProxy(0.f).getAsFloat(), Eq(0.0f)); + EXPECT_THAT(FloatProxy(-0.f).getAsFloat(), Eq(-0.0f)); + EXPECT_THAT(FloatProxy(1.2e32f).getAsFloat(), Eq(1.2e32f)); + + EXPECT_TRUE(std::isinf(FloatProxy(uint32_t(0xFF800000)).getAsFloat())); + EXPECT_TRUE(std::isinf(FloatProxy(uint32_t(0x7F800000)).getAsFloat())); + EXPECT_TRUE(std::isnan(FloatProxy(uint32_t(0xFFC00000)).getAsFloat())); + EXPECT_TRUE(std::isnan(FloatProxy(uint32_t(0xFF800100)).getAsFloat())); + EXPECT_TRUE(std::isnan(FloatProxy(uint32_t(0xFF800c00)).getAsFloat())); + EXPECT_TRUE(std::isnan(FloatProxy(uint32_t(0xFF80F000)).getAsFloat())); + EXPECT_TRUE(std::isnan(FloatProxy(uint32_t(0xFFFFFFFF)).getAsFloat())); + EXPECT_TRUE(std::isnan(FloatProxy(uint32_t(0x7FC00000)).getAsFloat())); + EXPECT_TRUE(std::isnan(FloatProxy(uint32_t(0x7F800100)).getAsFloat())); + EXPECT_TRUE(std::isnan(FloatProxy(uint32_t(0x7f800c00)).getAsFloat())); + EXPECT_TRUE(std::isnan(FloatProxy(uint32_t(0x7F80F000)).getAsFloat())); + EXPECT_TRUE(std::isnan(FloatProxy(uint32_t(0x7FFFFFFF)).getAsFloat())); + + EXPECT_THAT(FloatProxy(uint32_t(0xFF800000)).data(), Eq(0xFF800000u)); + EXPECT_THAT(FloatProxy(uint32_t(0x7F800000)).data(), Eq(0x7F800000u)); + EXPECT_THAT(FloatProxy(uint32_t(0xFFC00000)).data(), Eq(0xFFC00000u)); + EXPECT_THAT(FloatProxy(uint32_t(0xFF800100)).data(), Eq(0xFF800100u)); + EXPECT_THAT(FloatProxy(uint32_t(0xFF800c00)).data(), Eq(0xFF800c00u)); + EXPECT_THAT(FloatProxy(uint32_t(0xFF80F000)).data(), Eq(0xFF80F000u)); + EXPECT_THAT(FloatProxy(uint32_t(0xFFFFFFFF)).data(), Eq(0xFFFFFFFFu)); + EXPECT_THAT(FloatProxy(uint32_t(0x7FC00000)).data(), Eq(0x7FC00000u)); + EXPECT_THAT(FloatProxy(uint32_t(0x7F800100)).data(), Eq(0x7F800100u)); + EXPECT_THAT(FloatProxy(uint32_t(0x7f800c00)).data(), Eq(0x7f800c00u)); + EXPECT_THAT(FloatProxy(uint32_t(0x7F80F000)).data(), Eq(0x7F80F000u)); + EXPECT_THAT(FloatProxy(uint32_t(0x7FFFFFFF)).data(), Eq(0x7FFFFFFFu)); +} + +TEST(FloatProxy, Nan) { + EXPECT_TRUE(FloatProxy(uint32_t(0xFFC00000)).isNan()); + EXPECT_TRUE(FloatProxy(uint32_t(0xFF800100)).isNan()); + EXPECT_TRUE(FloatProxy(uint32_t(0xFF800c00)).isNan()); + EXPECT_TRUE(FloatProxy(uint32_t(0xFF80F000)).isNan()); + EXPECT_TRUE(FloatProxy(uint32_t(0xFFFFFFFF)).isNan()); + EXPECT_TRUE(FloatProxy(uint32_t(0x7FC00000)).isNan()); + EXPECT_TRUE(FloatProxy(uint32_t(0x7F800100)).isNan()); + EXPECT_TRUE(FloatProxy(uint32_t(0x7f800c00)).isNan()); + EXPECT_TRUE(FloatProxy(uint32_t(0x7F80F000)).isNan()); + EXPECT_TRUE(FloatProxy(uint32_t(0x7FFFFFFF)).isNan()); +} + +TEST(FloatProxy, Negation) { + EXPECT_THAT((-FloatProxy(1.f)).getAsFloat(), Eq(-1.0f)); + EXPECT_THAT((-FloatProxy(0.f)).getAsFloat(), Eq(-0.0f)); + + EXPECT_THAT((-FloatProxy(-1.f)).getAsFloat(), Eq(1.0f)); + EXPECT_THAT((-FloatProxy(-0.f)).getAsFloat(), Eq(0.0f)); + + EXPECT_THAT((-FloatProxy(32.f)).getAsFloat(), Eq(-32.0f)); + EXPECT_THAT((-FloatProxy(-32.f)).getAsFloat(), Eq(32.0f)); + + EXPECT_THAT((-FloatProxy(1.2e32f)).getAsFloat(), Eq(-1.2e32f)); + EXPECT_THAT((-FloatProxy(-1.2e32f)).getAsFloat(), Eq(1.2e32f)); + + EXPECT_THAT( + (-FloatProxy(std::numeric_limits::infinity())).getAsFloat(), + Eq(-std::numeric_limits::infinity())); + EXPECT_THAT((-FloatProxy(-std::numeric_limits::infinity())) + .getAsFloat(), + Eq(std::numeric_limits::infinity())); +} + +// Test conversion of FloatProxy values to strings. +// +// In previous cases, we always wrapped the FloatProxy value in a HexFloat +// before conversion to a string. In the following cases, the FloatProxy +// decides for itself whether to print as a regular number or as a hex float. + +using FloatProxyFloatTest = + ::testing::TestWithParam, std::string>>; +using FloatProxyDoubleTest = + ::testing::TestWithParam, std::string>>; + +// Converts a float value to a string via a FloatProxy. +template +std::string EncodeViaFloatProxy(const T& value) { + std::stringstream ss; + ss << value; + return ss.str(); +} + +// Converts a floating point string so that the exponent prefix +// is 'e', and the exponent value does not have leading zeros. +// The Microsoft runtime library likes to write things like "2.5E+010". +// Convert that to "2.5e+10". +// We don't care what happens to strings that are not floating point +// strings. +std::string NormalizeExponentInFloatString(std::string in) { + std::string result; + // Reserve one spot for the terminating null, even when the sscanf fails. + std::vector prefix(in.size() + 1); + char e; + char plus_or_minus; + int exponent; // in base 10 + if ((4 == std::sscanf(in.c_str(), "%[-+.0123456789]%c%c%d", prefix.data(), &e, + &plus_or_minus, &exponent)) && + (e == 'e' || e == 'E') && + (plus_or_minus == '-' || plus_or_minus == '+')) { + // It looks like a floating point value with exponent. + std::stringstream out; + out << prefix.data() << 'e' << plus_or_minus << exponent; + result = out.str(); + } else { + result = in; + } + return result; +} + +TEST(NormalizeFloat, Sample) { + EXPECT_THAT(NormalizeExponentInFloatString(""), Eq("")); + EXPECT_THAT(NormalizeExponentInFloatString("1e-12"), Eq("1e-12")); + EXPECT_THAT(NormalizeExponentInFloatString("1E+14"), Eq("1e+14")); + EXPECT_THAT(NormalizeExponentInFloatString("1e-0012"), Eq("1e-12")); + EXPECT_THAT(NormalizeExponentInFloatString("1.263E+014"), Eq("1.263e+14")); +} + +// The following two tests can't be DRY because they take different parameter +// types. +TEST_P(FloatProxyFloatTest, EncodeCorrectly) { + EXPECT_THAT( + NormalizeExponentInFloatString(EncodeViaFloatProxy(GetParam().first)), + Eq(GetParam().second)); +} + +TEST_P(FloatProxyDoubleTest, EncodeCorrectly) { + EXPECT_THAT( + NormalizeExponentInFloatString(EncodeViaFloatProxy(GetParam().first)), + Eq(GetParam().second)); +} + +INSTANTIATE_TEST_CASE_P( + Float32Tests, FloatProxyFloatTest, + ::testing::ValuesIn(std::vector, std::string>>({ + // Zero + {0.f, "0"}, + // Normal numbers + {1.f, "1"}, + {-0.25f, "-0.25"}, + {1000.0f, "1000"}, + + // Still normal numbers, but with large magnitude exponents. + {float(ldexp(1.f, 126)), "8.50706e+37"}, + {float(ldexp(-1.f, -126)), "-1.17549e-38"}, + + // denormalized values are printed as hex floats. + {float(ldexp(1.0f, -127)), "0x1p-127"}, + {float(ldexp(1.5f, -128)), "0x1.8p-128"}, + {float(ldexp(1.25, -129)), "0x1.4p-129"}, + {float(ldexp(1.125, -130)), "0x1.2p-130"}, + {float(ldexp(-1.0f, -127)), "-0x1p-127"}, + {float(ldexp(-1.0f, -128)), "-0x1p-128"}, + {float(ldexp(-1.0f, -129)), "-0x1p-129"}, + {float(ldexp(-1.5f, -130)), "-0x1.8p-130"}, + + // NaNs + {FloatProxy(uint32_t(0xFFC00000)), "-0x1.8p+128"}, + {FloatProxy(uint32_t(0xFF800100)), "-0x1.0002p+128"}, + + {std::numeric_limits::infinity(), "0x1p+128"}, + {-std::numeric_limits::infinity(), "-0x1p+128"}, + })),); + +INSTANTIATE_TEST_CASE_P( + Float64Tests, FloatProxyDoubleTest, + ::testing::ValuesIn( + std::vector, std::string>>({ + {0., "0"}, + {1., "1"}, + {-0.25, "-0.25"}, + {1000.0, "1000"}, + + // Large outside the range of normal floats + {ldexp(1.0, 128), "3.40282366920938e+38"}, + {ldexp(1.5, 129), "1.02084710076282e+39"}, + {ldexp(-1.0, 128), "-3.40282366920938e+38"}, + {ldexp(-1.5, 129), "-1.02084710076282e+39"}, + + // Small outside the range of normal floats + {ldexp(1.5, -129), "2.20405190779179e-39"}, + {ldexp(-1.5, -129), "-2.20405190779179e-39"}, + + // lowest non-denorm + {ldexp(1.0, -1022), "2.2250738585072e-308"}, + {ldexp(-1.0, -1022), "-2.2250738585072e-308"}, + + // Denormalized values + {ldexp(1.125, -1023), "0x1.2p-1023"}, + {ldexp(-1.375, -1024), "-0x1.6p-1024"}, + + // NaNs + {uint64_t(0x7FF8000000000000LL), "0x1.8p+1024"}, + {uint64_t(0xFFF0F00000000000LL), "-0x1.0fp+1024"}, + + // Infinity + {std::numeric_limits::infinity(), "0x1p+1024"}, + {-std::numeric_limits::infinity(), "-0x1p+1024"}, + + })),); + +// double is used so that unbiased_exponent can be used with the output +// of ldexp directly. +int32_t unbiased_exponent(double f) { + return spvutils::HexFloat>( + static_cast(f)).getUnbiasedNormalizedExponent(); +} + +int16_t unbiased_half_exponent(uint16_t f) { + return spvutils::HexFloat>(f) + .getUnbiasedNormalizedExponent(); +} + +TEST(HexFloatOperationTest, UnbiasedExponent) { + // Float cases + EXPECT_EQ(0, unbiased_exponent(ldexp(1.0f, 0))); + EXPECT_EQ(-32, unbiased_exponent(ldexp(1.0f, -32))); + EXPECT_EQ(42, unbiased_exponent(ldexp(1.0f, 42))); + EXPECT_EQ(125, unbiased_exponent(ldexp(1.0f, 125))); + // Saturates to 128 + EXPECT_EQ(128, unbiased_exponent(ldexp(1.0f, 256))); + + EXPECT_EQ(-100, unbiased_exponent(ldexp(1.0f, -100))); + EXPECT_EQ(-127, unbiased_exponent(ldexp(1.0f, -127))); // First denorm + EXPECT_EQ(-128, unbiased_exponent(ldexp(1.0f, -128))); + EXPECT_EQ(-129, unbiased_exponent(ldexp(1.0f, -129))); + EXPECT_EQ(-140, unbiased_exponent(ldexp(1.0f, -140))); + // Smallest representable number + EXPECT_EQ(-126 - 23, unbiased_exponent(ldexp(1.0f, -126 - 23))); + // Should get rounded to 0 first. + EXPECT_EQ(0, unbiased_exponent(ldexp(1.0f, -127 - 23))); + + // Float16 cases + // The exponent is represented in the bits 0x7C00 + // The offset is -15 + EXPECT_EQ(0, unbiased_half_exponent(0x3C00)); + EXPECT_EQ(3, unbiased_half_exponent(0x4800)); + EXPECT_EQ(-1, unbiased_half_exponent(0x3800)); + EXPECT_EQ(-14, unbiased_half_exponent(0x0400)); + EXPECT_EQ(16, unbiased_half_exponent(0x7C00)); + EXPECT_EQ(10, unbiased_half_exponent(0x6400)); + + // Smallest representable number + EXPECT_EQ(-24, unbiased_half_exponent(0x0001)); +} + +// Creates a float that is the sum of 1/(2 ^ fractions[i]) for i in factions +float float_fractions(const std::vector& fractions) { + float f = 0; + for(int32_t i: fractions) { + f += std::ldexp(1.0f, -i); + } + return f; +} + +// Returns the normalized significand of a HexFloat> +// that was created by calling float_fractions with the input fractions, +// raised to the power of exp. +uint32_t normalized_significand(const std::vector& fractions, uint32_t exp) { + return spvutils::HexFloat>( + static_cast(ldexp(float_fractions(fractions), exp))) + .getNormalizedSignificand(); +} + +// Sets the bits from MSB to LSB of the significand part of a float. +// For example 0 would set the bit 23 (counting from LSB to MSB), +// and 1 would set the 22nd bit. +uint32_t bits_set(const std::vector& bits) { + const uint32_t top_bit = 1u << 22u; + uint32_t val= 0; + for(uint32_t i: bits) { + val |= top_bit >> i; + } + return val; +} + +// The same as bits_set but for a Float16 value instead of 32-bit floating +// point. +uint16_t half_bits_set(const std::vector& bits) { + const uint32_t top_bit = 1u << 9u; + uint32_t val= 0; + for(uint32_t i: bits) { + val |= top_bit >> i; + } + return static_cast(val); +} + +TEST(HexFloatOperationTest, NormalizedSignificand) { + // For normalized numbers (the following) it should be a simple matter + // of getting rid of the top implicit bit + EXPECT_EQ(bits_set({}), normalized_significand({0}, 0)); + EXPECT_EQ(bits_set({0}), normalized_significand({0, 1}, 0)); + EXPECT_EQ(bits_set({0, 1}), normalized_significand({0, 1, 2}, 0)); + EXPECT_EQ(bits_set({1}), normalized_significand({0, 2}, 0)); + EXPECT_EQ(bits_set({1}), normalized_significand({0, 2}, 32)); + EXPECT_EQ(bits_set({1}), normalized_significand({0, 2}, 126)); + + // For denormalized numbers we expect the normalized significand to + // shift as if it were normalized. This means, in practice that the + // top_most set bit will be cut off. Looks very similar to above (on purpose) + EXPECT_EQ(bits_set({}), normalized_significand({0}, -127)); + EXPECT_EQ(bits_set({3}), normalized_significand({0, 4}, -128)); + EXPECT_EQ(bits_set({3}), normalized_significand({0, 4}, -127)); + EXPECT_EQ(bits_set({}), normalized_significand({22}, -127)); + EXPECT_EQ(bits_set({0}), normalized_significand({21, 22}, -127)); +} + +// Returns the 32-bit floating point value created by +// calling setFromSignUnbiasedExponentAndNormalizedSignificand +// on a HexFloat> +float set_from_sign(bool negative, int32_t unbiased_exponent, + uint32_t significand, bool round_denorm_up) { + spvutils::HexFloat> f(0.f); + f.setFromSignUnbiasedExponentAndNormalizedSignificand( + negative, unbiased_exponent, significand, round_denorm_up); + return f.value().getAsFloat(); +} + +TEST(HexFloatOperationTests, + SetFromSignUnbiasedExponentAndNormalizedSignificand) { + + EXPECT_EQ(1.f, set_from_sign(false, 0, 0, false)); + + // Tests insertion of various denormalized numbers with and without round up. + EXPECT_EQ(static_cast(ldexp(1.f, -149)), set_from_sign(false, -149, 0, false)); + EXPECT_EQ(static_cast(ldexp(1.f, -149)), set_from_sign(false, -149, 0, true)); + EXPECT_EQ(0.f, set_from_sign(false, -150, 1, false)); + EXPECT_EQ(static_cast(ldexp(1.f, -149)), set_from_sign(false, -150, 1, true)); + + EXPECT_EQ(ldexp(1.0f, -127), set_from_sign(false, -127, 0, false)); + EXPECT_EQ(ldexp(1.0f, -128), set_from_sign(false, -128, 0, false)); + EXPECT_EQ(float_fractions({0, 1, 2, 5}), + set_from_sign(false, 0, bits_set({0, 1, 4}), false)); + EXPECT_EQ(ldexp(float_fractions({0, 1, 2, 5}), -32), + set_from_sign(false, -32, bits_set({0, 1, 4}), false)); + EXPECT_EQ(ldexp(float_fractions({0, 1, 2, 5}), -128), + set_from_sign(false, -128, bits_set({0, 1, 4}), false)); + + // The negative cases from above. + EXPECT_EQ(-1.f, set_from_sign(true, 0, 0, false)); + EXPECT_EQ(-ldexp(1.0, -127), set_from_sign(true, -127, 0, false)); + EXPECT_EQ(-ldexp(1.0, -128), set_from_sign(true, -128, 0, false)); + EXPECT_EQ(-float_fractions({0, 1, 2, 5}), + set_from_sign(true, 0, bits_set({0, 1, 4}), false)); + EXPECT_EQ(-ldexp(float_fractions({0, 1, 2, 5}), -32), + set_from_sign(true, -32, bits_set({0, 1, 4}), false)); + EXPECT_EQ(-ldexp(float_fractions({0, 1, 2, 5}), -128), + set_from_sign(true, -128, bits_set({0, 1, 4}), false)); +} + +TEST(HexFloatOperationTests, NonRounding) { + // Rounding from 32-bit hex-float to 32-bit hex-float should be trivial, + // except in the denorm case which is a bit more complex. + using HF = spvutils::HexFloat>; + bool carry_bit = false; + + spvutils::round_direction rounding[] = { + spvutils::kRoundToZero, + spvutils::kRoundToNearestEven, + spvutils::kRoundToPositiveInfinity, + spvutils::kRoundToNegativeInfinity}; + + // Everything fits, so this should be straight-forward + for (spvutils::round_direction round : rounding) { + EXPECT_EQ(bits_set({}), HF(0.f).getRoundedNormalizedSignificand( + round, &carry_bit)); + EXPECT_FALSE(carry_bit); + + EXPECT_EQ(bits_set({0}), + HF(float_fractions({0, 1})) + .getRoundedNormalizedSignificand(round, &carry_bit)); + EXPECT_FALSE(carry_bit); + + EXPECT_EQ(bits_set({1, 3}), + HF(float_fractions({0, 2, 4})) + .getRoundedNormalizedSignificand(round, &carry_bit)); + EXPECT_FALSE(carry_bit); + + EXPECT_EQ( + bits_set({0, 1, 4}), + HF(static_cast(-ldexp(float_fractions({0, 1, 2, 5}), -128))) + .getRoundedNormalizedSignificand(round, &carry_bit)); + EXPECT_FALSE(carry_bit); + + EXPECT_EQ( + bits_set({0, 1, 4, 22}), + HF(static_cast(float_fractions({0, 1, 2, 5, 23}))) + .getRoundedNormalizedSignificand(round, &carry_bit)); + EXPECT_FALSE(carry_bit); + } +} + +struct RoundSignificandCase { + float source_float; + std::pair expected_results; + spvutils::round_direction round; +}; + +using HexFloatRoundTest = + ::testing::TestWithParam; + +TEST_P(HexFloatRoundTest, RoundDownToFP16) { + using HF = spvutils::HexFloat>; + using HF16 = spvutils::HexFloat>; + + HF input_value(GetParam().source_float); + bool carry_bit = false; + EXPECT_EQ(GetParam().expected_results.first, + input_value.getRoundedNormalizedSignificand( + GetParam().round, &carry_bit)); + EXPECT_EQ(carry_bit, GetParam().expected_results.second); +} + +// clang-format off +INSTANTIATE_TEST_CASE_P(F32ToF16, HexFloatRoundTest, + ::testing::ValuesIn(std::vector( + { + {float_fractions({0}), std::make_pair(half_bits_set({}), false), spvutils::kRoundToZero}, + {float_fractions({0}), std::make_pair(half_bits_set({}), false), spvutils::kRoundToNearestEven}, + {float_fractions({0}), std::make_pair(half_bits_set({}), false), spvutils::kRoundToPositiveInfinity}, + {float_fractions({0}), std::make_pair(half_bits_set({}), false), spvutils::kRoundToNegativeInfinity}, + {float_fractions({0, 1}), std::make_pair(half_bits_set({0}), false), spvutils::kRoundToZero}, + + {float_fractions({0, 1, 11}), std::make_pair(half_bits_set({0}), false), spvutils::kRoundToZero}, + {float_fractions({0, 1, 11}), std::make_pair(half_bits_set({0, 9}), false), spvutils::kRoundToPositiveInfinity}, + {float_fractions({0, 1, 11}), std::make_pair(half_bits_set({0}), false), spvutils::kRoundToNegativeInfinity}, + {float_fractions({0, 1, 11}), std::make_pair(half_bits_set({0}), false), spvutils::kRoundToNearestEven}, + + {float_fractions({0, 1, 10, 11}), std::make_pair(half_bits_set({0, 9}), false), spvutils::kRoundToZero}, + {float_fractions({0, 1, 10, 11}), std::make_pair(half_bits_set({0, 8}), false), spvutils::kRoundToPositiveInfinity}, + {float_fractions({0, 1, 10, 11}), std::make_pair(half_bits_set({0, 9}), false), spvutils::kRoundToNegativeInfinity}, + {float_fractions({0, 1, 10, 11}), std::make_pair(half_bits_set({0, 8}), false), spvutils::kRoundToNearestEven}, + + {float_fractions({0, 1, 11, 12}), std::make_pair(half_bits_set({0}), false), spvutils::kRoundToZero}, + {float_fractions({0, 1, 11, 12}), std::make_pair(half_bits_set({0, 9}), false), spvutils::kRoundToPositiveInfinity}, + {float_fractions({0, 1, 11, 12}), std::make_pair(half_bits_set({0}), false), spvutils::kRoundToNegativeInfinity}, + {float_fractions({0, 1, 11, 12}), std::make_pair(half_bits_set({0, 9}), false), spvutils::kRoundToNearestEven}, + + {-float_fractions({0, 1, 11, 12}), std::make_pair(half_bits_set({0}), false), spvutils::kRoundToZero}, + {-float_fractions({0, 1, 11, 12}), std::make_pair(half_bits_set({0}), false), spvutils::kRoundToPositiveInfinity}, + {-float_fractions({0, 1, 11, 12}), std::make_pair(half_bits_set({0, 9}), false), spvutils::kRoundToNegativeInfinity}, + {-float_fractions({0, 1, 11, 12}), std::make_pair(half_bits_set({0, 9}), false), spvutils::kRoundToNearestEven}, + + {float_fractions({0, 1, 11, 22}), std::make_pair(half_bits_set({0}), false), spvutils::kRoundToZero}, + {float_fractions({0, 1, 11, 22}), std::make_pair(half_bits_set({0, 9}), false), spvutils::kRoundToPositiveInfinity}, + {float_fractions({0, 1, 11, 22}), std::make_pair(half_bits_set({0}), false), spvutils::kRoundToNegativeInfinity}, + {float_fractions({0, 1, 11, 22}), std::make_pair(half_bits_set({0, 9}), false), spvutils::kRoundToNearestEven}, + + // Carries + {float_fractions({0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}), std::make_pair(half_bits_set({0, 1, 2, 3, 4, 5, 6, 7, 8, 9}), false), spvutils::kRoundToZero}, + {float_fractions({0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}), std::make_pair(half_bits_set({}), true), spvutils::kRoundToPositiveInfinity}, + {float_fractions({0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}), std::make_pair(half_bits_set({0, 1, 2, 3, 4, 5, 6, 7, 8, 9}), false), spvutils::kRoundToNegativeInfinity}, + {float_fractions({0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}), std::make_pair(half_bits_set({}), true), spvutils::kRoundToNearestEven}, + + // Cases where original number was denorm. Note: this should have no effect + // the number is pre-normalized. + {static_cast(ldexp(float_fractions({0, 1, 11, 13}), -128)), std::make_pair(half_bits_set({0}), false), spvutils::kRoundToZero}, + {static_cast(ldexp(float_fractions({0, 1, 11, 13}), -129)), std::make_pair(half_bits_set({0, 9}), false), spvutils::kRoundToPositiveInfinity}, + {static_cast(ldexp(float_fractions({0, 1, 11, 13}), -131)), std::make_pair(half_bits_set({0}), false), spvutils::kRoundToNegativeInfinity}, + {static_cast(ldexp(float_fractions({0, 1, 11, 13}), -130)), std::make_pair(half_bits_set({0, 9}), false), spvutils::kRoundToNearestEven}, + })),); +// clang-format on + +struct UpCastSignificandCase { + uint16_t source_half; + uint32_t expected_result; +}; + +using HexFloatRoundUpSignificandTest = + ::testing::TestWithParam; +TEST_P(HexFloatRoundUpSignificandTest, Widening) { + using HF = spvutils::HexFloat>; + using HF16 = spvutils::HexFloat>; + bool carry_bit = false; + + spvutils::round_direction rounding[] = { + spvutils::kRoundToZero, + spvutils::kRoundToNearestEven, + spvutils::kRoundToPositiveInfinity, + spvutils::kRoundToNegativeInfinity}; + + // Everything fits, so everything should just be bit-shifts. + for (spvutils::round_direction round : rounding) { + carry_bit = false; + HF16 input_value(GetParam().source_half); + EXPECT_EQ( + GetParam().expected_result, + input_value.getRoundedNormalizedSignificand(round, &carry_bit)) + << std::hex << "0x" + << input_value.getRoundedNormalizedSignificand(round, &carry_bit) + << " 0x" << GetParam().expected_result; + EXPECT_FALSE(carry_bit); + } +} + +INSTANTIATE_TEST_CASE_P(F16toF32, HexFloatRoundUpSignificandTest, + // 0xFC00 of the source 16-bit hex value cover the sign and the exponent. + // They are ignored for this test. + ::testing::ValuesIn(std::vector( + { + {0x3F00, 0x600000}, + {0x0F00, 0x600000}, + {0x0F01, 0x602000}, + {0x0FFF, 0x7FE000}, + })),); + +struct DownCastTest { + float source_float; + uint16_t expected_half; + std::vector directions; +}; + +std::string get_round_text(spvutils::round_direction direction) { +#define CASE(round_direction) \ + case round_direction: \ + return #round_direction + + switch (direction) { + CASE(spvutils::kRoundToZero); + CASE(spvutils::kRoundToPositiveInfinity); + CASE(spvutils::kRoundToNegativeInfinity); + CASE(spvutils::kRoundToNearestEven); + } +#undef CASE + return ""; +} + +using HexFloatFP32To16Tests = ::testing::TestWithParam; + +TEST_P(HexFloatFP32To16Tests, NarrowingCasts) { + using HF = spvutils::HexFloat>; + using HF16 = spvutils::HexFloat>; + HF f(GetParam().source_float); + for (auto round : GetParam().directions) { + HF16 half(0); + f.castTo(half, round); + EXPECT_EQ(GetParam().expected_half, half.value().getAsFloat().get_value()) + << get_round_text(round) << " " << std::hex + << spvutils::BitwiseCast(GetParam().source_float) + << " cast to: " << half.value().getAsFloat().get_value(); + } +} + +const uint16_t positive_infinity = 0x7C00; +const uint16_t negative_infinity = 0xFC00; + +INSTANTIATE_TEST_CASE_P(F32ToF16, HexFloatFP32To16Tests, + ::testing::ValuesIn(std::vector( + { + // Exactly representable as half. + {0.f, 0x0, {spvutils::kRoundToZero, spvutils::kRoundToPositiveInfinity, spvutils::kRoundToNegativeInfinity, spvutils::kRoundToNearestEven}}, + {-0.f, 0x8000, {spvutils::kRoundToZero, spvutils::kRoundToPositiveInfinity, spvutils::kRoundToNegativeInfinity, spvutils::kRoundToNearestEven}}, + {1.0f, 0x3C00, {spvutils::kRoundToZero, spvutils::kRoundToPositiveInfinity, spvutils::kRoundToNegativeInfinity, spvutils::kRoundToNearestEven}}, + {-1.0f, 0xBC00, {spvutils::kRoundToZero, spvutils::kRoundToPositiveInfinity, spvutils::kRoundToNegativeInfinity, spvutils::kRoundToNearestEven}}, + + {float_fractions({0, 1, 10}) , 0x3E01, {spvutils::kRoundToZero, spvutils::kRoundToPositiveInfinity, spvutils::kRoundToNegativeInfinity, spvutils::kRoundToNearestEven}}, + {-float_fractions({0, 1, 10}) , 0xBE01, {spvutils::kRoundToZero, spvutils::kRoundToPositiveInfinity, spvutils::kRoundToNegativeInfinity, spvutils::kRoundToNearestEven}}, + {static_cast(ldexp(float_fractions({0, 1, 10}), 3)), 0x4A01, {spvutils::kRoundToZero, spvutils::kRoundToPositiveInfinity, spvutils::kRoundToNegativeInfinity, spvutils::kRoundToNearestEven}}, + {static_cast(-ldexp(float_fractions({0, 1, 10}), 3)), 0xCA01, {spvutils::kRoundToZero, spvutils::kRoundToPositiveInfinity, spvutils::kRoundToNegativeInfinity, spvutils::kRoundToNearestEven}}, + + + // Underflow + {static_cast(ldexp(1.0f, -25)), 0x0, {spvutils::kRoundToZero, spvutils::kRoundToNegativeInfinity, spvutils::kRoundToNearestEven}}, + {static_cast(ldexp(1.0f, -25)), 0x1, {spvutils::kRoundToPositiveInfinity}}, + {static_cast(-ldexp(1.0f, -25)), 0x8000, {spvutils::kRoundToZero, spvutils::kRoundToPositiveInfinity, spvutils::kRoundToNearestEven}}, + {static_cast(-ldexp(1.0f, -25)), 0x8001, {spvutils::kRoundToNegativeInfinity}}, + {static_cast(ldexp(1.0f, -24)), 0x1, {spvutils::kRoundToZero, spvutils::kRoundToPositiveInfinity, spvutils::kRoundToNegativeInfinity, spvutils::kRoundToNearestEven}}, + + // Overflow + {static_cast(ldexp(1.0f, 16)), positive_infinity, {spvutils::kRoundToZero, spvutils::kRoundToPositiveInfinity, spvutils::kRoundToNegativeInfinity, spvutils::kRoundToNearestEven}}, + {static_cast(ldexp(1.0f, 18)), positive_infinity, {spvutils::kRoundToZero, spvutils::kRoundToPositiveInfinity, spvutils::kRoundToNegativeInfinity, spvutils::kRoundToNearestEven}}, + {static_cast(ldexp(1.3f, 16)), positive_infinity, {spvutils::kRoundToZero, spvutils::kRoundToPositiveInfinity, spvutils::kRoundToNegativeInfinity, spvutils::kRoundToNearestEven}}, + {static_cast(-ldexp(1.0f, 16)), negative_infinity, {spvutils::kRoundToZero, spvutils::kRoundToPositiveInfinity, spvutils::kRoundToNegativeInfinity, spvutils::kRoundToNearestEven}}, + {static_cast(-ldexp(1.0f, 18)), negative_infinity, {spvutils::kRoundToZero, spvutils::kRoundToPositiveInfinity, spvutils::kRoundToNegativeInfinity, spvutils::kRoundToNearestEven}}, + {static_cast(-ldexp(1.3f, 16)), negative_infinity, {spvutils::kRoundToZero, spvutils::kRoundToPositiveInfinity, spvutils::kRoundToNegativeInfinity, spvutils::kRoundToNearestEven}}, + + // Transfer of Infinities + {std::numeric_limits::infinity(), positive_infinity, {spvutils::kRoundToZero, spvutils::kRoundToPositiveInfinity, spvutils::kRoundToNegativeInfinity, spvutils::kRoundToNearestEven}}, + {-std::numeric_limits::infinity(), negative_infinity, {spvutils::kRoundToZero, spvutils::kRoundToPositiveInfinity, spvutils::kRoundToNegativeInfinity, spvutils::kRoundToNearestEven}}, + + // Nans are below because we cannot test for equality. + })),); + +struct UpCastCase{ + uint16_t source_half; + float expected_float; +}; + +using HexFloatFP16To32Tests = ::testing::TestWithParam; +TEST_P(HexFloatFP16To32Tests, WideningCasts) { + using HF = spvutils::HexFloat>; + using HF16 = spvutils::HexFloat>; + HF16 f(GetParam().source_half); + + spvutils::round_direction rounding[] = { + spvutils::kRoundToZero, + spvutils::kRoundToNearestEven, + spvutils::kRoundToPositiveInfinity, + spvutils::kRoundToNegativeInfinity}; + + // Everything fits, so everything should just be bit-shifts. + for (spvutils::round_direction round : rounding) { + HF flt(0.f); + f.castTo(flt, round); + EXPECT_EQ(GetParam().expected_float, flt.value().getAsFloat()) + << get_round_text(round) << " " << std::hex + << spvutils::BitwiseCast(GetParam().source_half) + << " cast to: " << flt.value().getAsFloat(); + } +} + +INSTANTIATE_TEST_CASE_P(F16ToF32, HexFloatFP16To32Tests, + ::testing::ValuesIn(std::vector( + { + {0x0000, 0.f}, + {0x8000, -0.f}, + {0x3C00, 1.0f}, + {0xBC00, -1.0f}, + {0x3F00, float_fractions({0, 1, 2})}, + {0xBF00, -float_fractions({0, 1, 2})}, + {0x3F01, float_fractions({0, 1, 2, 10})}, + {0xBF01, -float_fractions({0, 1, 2, 10})}, + + // denorm + {0x0001, static_cast(ldexp(1.0, -24))}, + {0x0002, static_cast(ldexp(1.0, -23))}, + {0x8001, static_cast(-ldexp(1.0, -24))}, + {0x8011, static_cast(-ldexp(1.0, -20) + -ldexp(1.0, -24))}, + + // inf + {0x7C00, std::numeric_limits::infinity()}, + {0xFC00, -std::numeric_limits::infinity()}, + })),); + +TEST(HexFloatOperationTests, NanTests) { + using HF = spvutils::HexFloat>; + using HF16 = spvutils::HexFloat>; + spvutils::round_direction rounding[] = { + spvutils::kRoundToZero, + spvutils::kRoundToNearestEven, + spvutils::kRoundToPositiveInfinity, + spvutils::kRoundToNegativeInfinity}; + + // Everything fits, so everything should just be bit-shifts. + for (spvutils::round_direction round : rounding) { + HF16 f16(0); + HF f(0.f); + HF(std::numeric_limits::quiet_NaN()).castTo(f16, round); + EXPECT_TRUE(f16.value().isNan()); + HF(std::numeric_limits::signaling_NaN()).castTo(f16, round); + EXPECT_TRUE(f16.value().isNan()); + + HF16(0x7C01).castTo(f, round); + EXPECT_TRUE(f.value().isNan()); + HF16(0x7C11).castTo(f, round); + EXPECT_TRUE(f.value().isNan()); + HF16(0xFC01).castTo(f, round); + EXPECT_TRUE(f.value().isNan()); + HF16(0x7C10).castTo(f, round); + EXPECT_TRUE(f.value().isNan()); + HF16(0xFF00).castTo(f, round); + EXPECT_TRUE(f.value().isNan()); + } +} + +// A test case for parsing good and bad HexFloat> literals. +template +struct FloatParseCase { + std::string literal; + bool negate_value; + bool expect_success; + HexFloat> expected_value; +}; + +using ParseNormalFloatTest = ::testing::TestWithParam>; + +TEST_P(ParseNormalFloatTest, Samples) { + std::stringstream input(GetParam().literal); + HexFloat> parsed_value(0.0f); + ParseNormalFloat(input, GetParam().negate_value, parsed_value); + EXPECT_NE(GetParam().expect_success, input.fail()) + << " literal: " << GetParam().literal + << " negate: " << GetParam().negate_value; + if (GetParam().expect_success) { + EXPECT_THAT(parsed_value.value(), Eq(GetParam().expected_value.value())) + << " literal: " << GetParam().literal + << " negate: " << GetParam().negate_value; + } +} + +// Returns a FloatParseCase with expected failure. +template +FloatParseCase BadFloatParseCase(std::string literal, bool negate_value, + T expected_value) { + HexFloat> proxy_expected_value(expected_value); + return FloatParseCase{literal, negate_value, false, proxy_expected_value}; +} + +// Returns a FloatParseCase that should successfully parse to a given value. +template +FloatParseCase GoodFloatParseCase(std::string literal, bool negate_value, + T expected_value) { + HexFloat> proxy_expected_value(expected_value); + return FloatParseCase{literal, negate_value, true, proxy_expected_value}; +} + +INSTANTIATE_TEST_CASE_P( + FloatParse, ParseNormalFloatTest, + ::testing::ValuesIn(std::vector>{ + // Failing cases due to trivially incorrect syntax. + BadFloatParseCase("abc", false, 0.0f), + BadFloatParseCase("abc", true, 0.0f), + + // Valid cases. + GoodFloatParseCase("0", false, 0.0f), + GoodFloatParseCase("0.0", false, 0.0f), + GoodFloatParseCase("-0.0", false, -0.0f), + GoodFloatParseCase("2.0", false, 2.0f), + GoodFloatParseCase("-2.0", false, -2.0f), + GoodFloatParseCase("+2.0", false, 2.0f), + // Cases with negate_value being true. + GoodFloatParseCase("0.0", true, -0.0f), + GoodFloatParseCase("2.0", true, -2.0f), + + // When negate_value is true, we should not accept a + // leading minus or plus. + BadFloatParseCase("-0.0", true, 0.0f), + BadFloatParseCase("-2.0", true, 0.0f), + BadFloatParseCase("+0.0", true, 0.0f), + BadFloatParseCase("+2.0", true, 0.0f), + + // Overflow is an error for 32-bit float parsing. + BadFloatParseCase("1e40", false, FLT_MAX), + BadFloatParseCase("1e40", true, -FLT_MAX), + BadFloatParseCase("-1e40", false, -FLT_MAX), + // We can't have -1e40 and negate_value == true since + // that represents an original case of "--1e40" which + // is invalid. + }),); + +using ParseNormalFloat16Test = + ::testing::TestWithParam>; + +TEST_P(ParseNormalFloat16Test, Samples) { + std::stringstream input(GetParam().literal); + HexFloat> parsed_value(0); + ParseNormalFloat(input, GetParam().negate_value, parsed_value); + EXPECT_NE(GetParam().expect_success, input.fail()) + << " literal: " << GetParam().literal + << " negate: " << GetParam().negate_value; + if (GetParam().expect_success) { + EXPECT_THAT(parsed_value.value(), Eq(GetParam().expected_value.value())) + << " literal: " << GetParam().literal + << " negate: " << GetParam().negate_value; + } +} + +INSTANTIATE_TEST_CASE_P( + Float16Parse, ParseNormalFloat16Test, + ::testing::ValuesIn(std::vector>{ + // Failing cases due to trivially incorrect syntax. + BadFloatParseCase("abc", false, uint16_t{0}), + BadFloatParseCase("abc", true, uint16_t{0}), + + // Valid cases. + GoodFloatParseCase("0", false, uint16_t{0}), + GoodFloatParseCase("0.0", false, uint16_t{0}), + GoodFloatParseCase("-0.0", false, uint16_t{0x8000}), + GoodFloatParseCase("2.0", false, uint16_t{0x4000}), + GoodFloatParseCase("-2.0", false, uint16_t{0xc000}), + GoodFloatParseCase("+2.0", false, uint16_t{0x4000}), + // Cases with negate_value being true. + GoodFloatParseCase("0.0", true, uint16_t{0x8000}), + GoodFloatParseCase("2.0", true, uint16_t{0xc000}), + + // When negate_value is true, we should not accept a leading minus or + // plus. + BadFloatParseCase("-0.0", true, uint16_t{0}), + BadFloatParseCase("-2.0", true, uint16_t{0}), + BadFloatParseCase("+0.0", true, uint16_t{0}), + BadFloatParseCase("+2.0", true, uint16_t{0}), + }),); + +// A test case for detecting infinities. +template +struct OverflowParseCase { + std::string input; + bool expect_success; + T expected_value; +}; + +using FloatProxyParseOverflowFloatTest = + ::testing::TestWithParam>; + +TEST_P(FloatProxyParseOverflowFloatTest, Sample) { + std::istringstream input(GetParam().input); + HexFloat> value(0.0f); + input >> value; + EXPECT_NE(GetParam().expect_success, input.fail()); + if (GetParam().expect_success) { + EXPECT_THAT(value.value().getAsFloat(), GetParam().expected_value); + } +} + +INSTANTIATE_TEST_CASE_P( + FloatOverflow, FloatProxyParseOverflowFloatTest, + ::testing::ValuesIn(std::vector>({ + {"0", true, 0.0f}, + {"0.0", true, 0.0f}, + {"1.0", true, 1.0f}, + {"1e38", true, 1e38f}, + {"-1e38", true, -1e38f}, + {"1e40", false, FLT_MAX}, + {"-1e40", false, -FLT_MAX}, + {"1e400", false, FLT_MAX}, + {"-1e400", false, -FLT_MAX}, + })),); + +using FloatProxyParseOverflowDoubleTest = + ::testing::TestWithParam>; + +TEST_P(FloatProxyParseOverflowDoubleTest, Sample) { + std::istringstream input(GetParam().input); + HexFloat> value(0.0); + input >> value; + EXPECT_NE(GetParam().expect_success, input.fail()); + if (GetParam().expect_success) { + EXPECT_THAT(value.value().getAsFloat(), Eq(GetParam().expected_value)); + } +} + +INSTANTIATE_TEST_CASE_P( + DoubleOverflow, FloatProxyParseOverflowDoubleTest, + ::testing::ValuesIn(std::vector>({ + {"0", true, 0.0}, + {"0.0", true, 0.0}, + {"1.0", true, 1.0}, + {"1e38", true, 1e38}, + {"-1e38", true, -1e38}, + {"1e40", true, 1e40}, + {"-1e40", true, -1e40}, + {"1e400", false, DBL_MAX}, + {"-1e400", false, -DBL_MAX}, + })),); + +using FloatProxyParseOverflowFloat16Test = + ::testing::TestWithParam>; + +TEST_P(FloatProxyParseOverflowFloat16Test, Sample) { + std::istringstream input(GetParam().input); + HexFloat> value(0); + input >> value; + EXPECT_NE(GetParam().expect_success, input.fail()) << " literal: " + << GetParam().input; + if (GetParam().expect_success) { + EXPECT_THAT(value.value().data(), Eq(GetParam().expected_value)) + << " literal: " << GetParam().input; + } +} + +INSTANTIATE_TEST_CASE_P( + Float16Overflow, FloatProxyParseOverflowFloat16Test, + ::testing::ValuesIn(std::vector>({ + {"0", true, uint16_t{0}}, + {"0.0", true, uint16_t{0}}, + {"1.0", true, uint16_t{0x3c00}}, + // Overflow for 16-bit float is an error, and returns max or + // lowest value. + {"1e38", false, uint16_t{0x7bff}}, + {"1e40", false, uint16_t{0x7bff}}, + {"1e400", false, uint16_t{0x7bff}}, + {"-1e38", false, uint16_t{0xfbff}}, + {"-1e40", false, uint16_t{0xfbff}}, + {"-1e400", false, uint16_t{0xfbff}}, + })),); + +TEST(FloatProxy, Max) { + EXPECT_THAT(FloatProxy::max().getAsFloat().get_value(), + Eq(uint16_t{0x7bff})); + EXPECT_THAT(FloatProxy::max().getAsFloat(), + Eq(std::numeric_limits::max())); + EXPECT_THAT(FloatProxy::max().getAsFloat(), + Eq(std::numeric_limits::max())); +} + +TEST(FloatProxy, Lowest) { + EXPECT_THAT(FloatProxy::lowest().getAsFloat().get_value(), + Eq(uint16_t{0xfbff})); + EXPECT_THAT(FloatProxy::lowest().getAsFloat(), + Eq(std::numeric_limits::lowest())); + EXPECT_THAT(FloatProxy::lowest().getAsFloat(), + Eq(std::numeric_limits::lowest())); +} + +// TODO(awoloszyn): Add fp16 tests and HexFloatTraits. +} // anonymous namespace diff --git a/3rdparty/bgfx/3rdparty/glslang/gtests/Hlsl.FromFile.cpp b/3rdparty/bgfx/3rdparty/glslang/gtests/Hlsl.FromFile.cpp new file mode 100644 index 0000000..0b68aea --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/gtests/Hlsl.FromFile.cpp @@ -0,0 +1,279 @@ +// +// Copyright (C) 2016 Google, Inc. +// Copyright (C) 2016 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 Google Inc. 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. + +#include + +#include "TestFixture.h" + +namespace glslangtest { +namespace { + +struct FileNameEntryPointPair { + const char* fileName; + const char* entryPoint; +}; + +// We are using FileNameEntryPointPair objects as parameters for instantiating +// the template, so the global FileNameAsCustomTestSuffix() won't work since +// it assumes std::string as parameters. Thus, an overriding one here. +std::string FileNameAsCustomTestSuffix( + const ::testing::TestParamInfo& info) { + std::string name = info.param.fileName; + // A valid test case suffix cannot have '.' and '-' inside. + std::replace(name.begin(), name.end(), '.', '_'); + std::replace(name.begin(), name.end(), '-', '_'); + return name; +} + +using HlslCompileTest = GlslangTest<::testing::TestWithParam>; +using HlslCompileAndFlattenTest = GlslangTest<::testing::TestWithParam>; + +// Compiling HLSL to SPIR-V under Vulkan semantics. Expected to successfully +// generate both AST and SPIR-V. +TEST_P(HlslCompileTest, FromFile) +{ + loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam().fileName, + Source::HLSL, Semantics::Vulkan, + Target::BothASTAndSpv, GetParam().entryPoint); +} + +TEST_P(HlslCompileAndFlattenTest, FromFile) +{ + loadFileCompileFlattenUniformsAndCheck(GlobalTestSettings.testRoot, GetParam().fileName, + Source::HLSL, Semantics::Vulkan, + Target::BothASTAndSpv, GetParam().entryPoint); +} + +// clang-format off +INSTANTIATE_TEST_CASE_P( + ToSpirv, HlslCompileTest, + ::testing::ValuesIn(std::vector{ + {"hlsl.amend.frag", "f1"}, + {"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.basic.comp", "main"}, + {"hlsl.basic.geom", "main"}, + {"hlsl.buffer.frag", "PixelShaderFunction"}, + {"hlsl.calculatelod.dx10.frag", "main"}, + {"hlsl.calculatelodunclamped.dx10.frag", "main"}, + {"hlsl.cast.frag", "PixelShaderFunction"}, + {"hlsl.comparison.vec.frag", "main"}, + {"hlsl.conditional.frag", "PixelShaderFunction"}, + {"hlsl.constructexpr.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.entry-in.frag", "PixelShaderFunction"}, + {"hlsl.entry-out.frag", "PixelShaderFunction"}, + {"hlsl.float1.frag", "PixelShaderFunction"}, + {"hlsl.float4.frag", "PixelShaderFunction"}, + {"hlsl.flatten.return.frag", "main"}, + {"hlsl.forLoop.frag", "PixelShaderFunction"}, + {"hlsl.gather.array.dx10.frag", "main"}, + {"hlsl.gather.basic.dx10.frag", "main"}, + {"hlsl.gather.basic.dx10.vert", "main"}, + {"hlsl.gather.offset.dx10.frag", "main"}, + {"hlsl.gather.offsetarray.dx10.frag", "main"}, + {"hlsl.gathercmpRGBA.offset.dx10.frag", "main"}, + {"hlsl.gatherRGBA.array.dx10.frag", "main"}, + {"hlsl.gatherRGBA.basic.dx10.frag", "main"}, + {"hlsl.gatherRGBA.offset.dx10.frag", "main"}, + {"hlsl.gatherRGBA.offsetarray.dx10.frag", "main"}, + {"hlsl.getdimensions.dx10.frag", "main"}, + {"hlsl.getdimensions.rw.dx10.frag", "main"}, + {"hlsl.getdimensions.dx10.vert", "main"}, + {"hlsl.getsampleposition.dx10.frag", "main"}, + {"hlsl.hull.1.tesc", "main"}, + {"hlsl.hull.2.tesc", "main"}, + {"hlsl.hull.void.tesc", "main"}, + {"hlsl.identifier.sample.frag", "main"}, + {"hlsl.if.frag", "PixelShaderFunction"}, + {"hlsl.inoutquals.frag", "main"}, + {"hlsl.init.frag", "ShaderFunction"}, + {"hlsl.init2.frag", "main"}, + {"hlsl.intrinsics.barriers.comp", "ComputeShaderFunction"}, + {"hlsl.intrinsics.comp", "ComputeShaderFunction"}, + {"hlsl.intrinsics.evalfns.frag", "main"}, + {"hlsl.intrinsics.d3dcolortoubyte4.frag", "main"}, + {"hlsl.intrinsics.double.frag", "PixelShaderFunction"}, + {"hlsl.intrinsics.f1632.frag", "main"}, + {"hlsl.intrinsics.f3216.frag", "main"}, + {"hlsl.intrinsics.frag", "main"}, + {"hlsl.intrinsics.lit.frag", "PixelShaderFunction"}, + {"hlsl.intrinsics.negative.comp", "ComputeShaderFunction"}, + {"hlsl.intrinsics.negative.frag", "PixelShaderFunction"}, + {"hlsl.intrinsics.negative.vert", "VertexShaderFunction"}, + {"hlsl.intrinsics.promote.frag", "main"}, + {"hlsl.intrinsics.promote.down.frag", "main"}, + {"hlsl.intrinsics.promote.outputs.frag", "main"}, + {"hlsl.layout.frag", "main"}, + {"hlsl.load.2dms.dx10.frag", "main"}, + {"hlsl.load.array.dx10.frag", "main"}, + {"hlsl.load.basic.dx10.frag", "main"}, + {"hlsl.load.basic.dx10.vert", "main"}, + {"hlsl.load.buffer.dx10.frag", "main"}, + {"hlsl.load.buffer.float.dx10.frag", "main"}, + {"hlsl.load.rwbuffer.dx10.frag", "main"}, + {"hlsl.load.rwtexture.dx10.frag", "main"}, + {"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.logical.binary.frag", "main"}, + {"hlsl.logical.binary.vec.frag", "main"}, + {"hlsl.matNx1.frag", "main"}, + {"hlsl.matrixSwizzle.vert", "ShaderFunction"}, + {"hlsl.mintypes.frag", "main"}, + {"hlsl.multiEntry.vert", "RealEntrypoint"}, + {"hlsl.multiReturn.frag", "main"}, + {"hlsl.matrixindex.frag", "main"}, + {"hlsl.nonstaticMemberFunction.frag", "main"}, + {"hlsl.numericsuffixes.frag", "main"}, + {"hlsl.numthreads.comp", "main_aux1"}, + {"hlsl.overload.frag", "PixelShaderFunction"}, + {"hlsl.params.default.frag", "main"}, + {"hlsl.params.default.negative.frag", "main"}, + {"hlsl.partialInit.frag", "PixelShaderFunction"}, + {"hlsl.pp.line.frag", "main"}, + {"hlsl.precise.frag", "main"}, + {"hlsl.promote.atomic.frag", "main"}, + {"hlsl.promote.binary.frag", "main"}, + {"hlsl.promote.vec1.frag", "main"}, + {"hlsl.promotions.frag", "main"}, + {"hlsl.rw.atomics.frag", "main"}, + {"hlsl.rw.bracket.frag", "main"}, + {"hlsl.rw.register.frag", "main"}, + {"hlsl.rw.scalar.bracket.frag", "main"}, + {"hlsl.rw.swizzle.frag", "main"}, + {"hlsl.rw.vec2.bracket.frag", "main"}, + {"hlsl.sample.array.dx10.frag", "main"}, + {"hlsl.sample.basic.dx10.frag", "main"}, + {"hlsl.sample.offset.dx10.frag", "main"}, + {"hlsl.sample.offsetarray.dx10.frag", "main"}, + {"hlsl.samplebias.array.dx10.frag", "main"}, + {"hlsl.samplebias.basic.dx10.frag", "main"}, + {"hlsl.samplebias.offset.dx10.frag", "main"}, + {"hlsl.samplebias.offsetarray.dx10.frag", "main"}, + {"hlsl.samplecmp.array.dx10.frag", "main"}, + {"hlsl.samplecmp.basic.dx10.frag", "main"}, + {"hlsl.samplecmp.offset.dx10.frag", "main"}, + {"hlsl.samplecmp.offsetarray.dx10.frag", "main"}, + {"hlsl.samplecmplevelzero.array.dx10.frag", "main"}, + {"hlsl.samplecmplevelzero.basic.dx10.frag", "main"}, + {"hlsl.samplecmplevelzero.offset.dx10.frag", "main"}, + {"hlsl.samplecmplevelzero.offsetarray.dx10.frag", "main"}, + {"hlsl.samplegrad.array.dx10.frag", "main"}, + {"hlsl.samplegrad.basic.dx10.frag", "main"}, + {"hlsl.samplegrad.basic.dx10.vert", "main"}, + {"hlsl.samplegrad.offset.dx10.frag", "main"}, + {"hlsl.samplegrad.offsetarray.dx10.frag", "main"}, + {"hlsl.samplelevel.array.dx10.frag", "main"}, + {"hlsl.samplelevel.basic.dx10.frag", "main"}, + {"hlsl.samplelevel.basic.dx10.vert", "main"}, + {"hlsl.samplelevel.offset.dx10.frag", "main"}, + {"hlsl.samplelevel.offsetarray.dx10.frag", "main"}, + {"hlsl.sample.sub-vec4.dx10.frag", "main"}, + {"hlsl.semicolons.frag", "main"}, + {"hlsl.shapeConv.frag", "main"}, + {"hlsl.shapeConvRet.frag", "main"}, + {"hlsl.staticMemberFunction.frag", "main"}, + {"hlsl.stringtoken.frag", "main"}, + {"hlsl.string.frag", "main"}, + {"hlsl.struct.split-1.vert", "main"}, + {"hlsl.struct.split.array.geom", "main"}, + {"hlsl.struct.split.assign.frag", "main"}, + {"hlsl.struct.split.call.vert", "main"}, + {"hlsl.struct.split.nested.geom", "main"}, + {"hlsl.struct.split.trivial.geom", "main"}, + {"hlsl.struct.split.trivial.vert", "main"}, + {"hlsl.structarray.flatten.frag", "main"}, + {"hlsl.structarray.flatten.geom", "main"}, + {"hlsl.structbuffer.frag", "main"}, + {"hlsl.structbuffer.atomics.frag", "main"}, + {"hlsl.structbuffer.byte.frag", "main"}, + {"hlsl.structbuffer.coherent.frag", "main"}, + {"hlsl.structbuffer.fn.frag", "main"}, + {"hlsl.structbuffer.rw.frag", "main"}, + {"hlsl.structbuffer.rwbyte.frag", "main"}, + {"hlsl.structin.vert", "main"}, + {"hlsl.structIoFourWay.frag", "main"}, + {"hlsl.structStructName.frag", "main"}, + {"hlsl.this.frag", "main"}, + {"hlsl.intrinsics.vert", "VertexShaderFunction"}, + {"hlsl.matType.frag", "PixelShaderFunction"}, + {"hlsl.matType.bool.frag", "main"}, + {"hlsl.matType.int.frag", "main"}, + {"hlsl.max.frag", "PixelShaderFunction"}, + {"hlsl.precedence.frag", "PixelShaderFunction"}, + {"hlsl.precedence2.frag", "PixelShaderFunction"}, + {"hlsl.semantic.geom", "main"}, + {"hlsl.semantic.vert", "main"}, + {"hlsl.scope.frag", "PixelShaderFunction"}, + {"hlsl.sin.frag", "PixelShaderFunction"}, + {"hlsl.struct.frag", "PixelShaderFunction"}, + {"hlsl.switch.frag", "PixelShaderFunction"}, + {"hlsl.swizzle.frag", "PixelShaderFunction"}, + {"hlsl.templatetypes.frag", "PixelShaderFunction"}, + {"hlsl.tx.bracket.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"}, + }), + FileNameAsCustomTestSuffix +); +// clang-format on + +// clang-format off +INSTANTIATE_TEST_CASE_P( + ToSpirv, HlslCompileAndFlattenTest, + ::testing::ValuesIn(std::vector{ + {"hlsl.array.flatten.frag", "main"}, + }), + FileNameAsCustomTestSuffix +); + +// clang-format on +} // anonymous namespace +} // namespace glslangtest diff --git a/3rdparty/bgfx/3rdparty/glslang/gtests/Initializer.h b/3rdparty/bgfx/3rdparty/glslang/gtests/Initializer.h new file mode 100644 index 0000000..b46b3f5 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/gtests/Initializer.h @@ -0,0 +1,55 @@ +// +// Copyright (C) 2016 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 Google Inc. 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. + +#ifndef GLSLANG_GTESTS_INITIALIZER_H +#define GLSLANG_GTESTS_INITIALIZER_H + +#include "glslang/Public/ShaderLang.h" + +namespace glslangtest { + +// Initializes glslang on creation, and destroys it on completion. +// This object is expected to be a singleton, so that internal glslang state +// can be correctly handled. +// +class GlslangInitializer { +public: + GlslangInitializer() { glslang::InitializeProcess(); } + + ~GlslangInitializer() { glslang::FinalizeProcess(); } +}; + +} // namespace glslangtest + +#endif // GLSLANG_GTESTS_INITIALIZER_H diff --git a/3rdparty/bgfx/3rdparty/glslang/gtests/Link.FromFile.Vk.cpp b/3rdparty/bgfx/3rdparty/glslang/gtests/Link.FromFile.Vk.cpp new file mode 100644 index 0000000..6ce1fe9 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/gtests/Link.FromFile.Vk.cpp @@ -0,0 +1,97 @@ +// +// Copyright (C) 2016-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 Google Inc. 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. + +#include + +#include + +#include "TestFixture.h" + +namespace glslangtest { +namespace { + +using LinkTestVulkan = GlslangTest< + ::testing::TestWithParam>>; + +TEST_P(LinkTestVulkan, FromFile) +{ + const auto& fileNames = GetParam(); + const size_t fileCount = fileNames.size(); + const EShMessages controls = DeriveOptions(Source::GLSL, Semantics::Vulkan, Target::AST); + GlslangResult result; + + // Compile each input shader file. + std::vector> shaders; + for (size_t i = 0; i < fileCount; ++i) { + std::string contents; + tryLoadFile(GlobalTestSettings.testRoot + "/" + fileNames[i], + "input", &contents); + shaders.emplace_back( + new glslang::TShader(GetShaderStage(GetSuffix(fileNames[i])))); + auto* shader = shaders.back().get(); + compile(shader, contents, "", controls); + result.shaderResults.push_back( + {fileNames[i], shader->getInfoLog(), shader->getInfoDebugLog()}); + } + + // Link all of them. + glslang::TProgram program; + for (const auto& shader : shaders) program.addShader(shader.get()); + program.link(controls); + result.linkingOutput = program.getInfoLog(); + result.linkingError = program.getInfoDebugLog(); + + std::ostringstream stream; + outputResultToStream(&stream, result, controls); + + // Check with expected results. + const std::string expectedOutputFname = + GlobalTestSettings.testRoot + "/baseResults/" + fileNames.front() + ".out"; + std::string expectedOutput; + tryLoadFile(expectedOutputFname, "expected output", &expectedOutput); + + checkEqAndUpdateIfRequested(expectedOutput, stream.str(), expectedOutputFname); +} + +// clang-format off +INSTANTIATE_TEST_CASE_P( + Glsl, LinkTestVulkan, + ::testing::ValuesIn(std::vector>({ + {"link1.vk.frag", "link2.vk.frag"}, + })), +); +// clang-format on + +} // anonymous namespace +} // namespace glslangtest diff --git a/3rdparty/bgfx/3rdparty/glslang/gtests/Link.FromFile.cpp b/3rdparty/bgfx/3rdparty/glslang/gtests/Link.FromFile.cpp new file mode 100644 index 0000000..ab845bf --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/gtests/Link.FromFile.cpp @@ -0,0 +1,108 @@ +// +// Copyright (C) 2016 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 Google Inc. 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. + +#include + +#include + +#include "TestFixture.h" + +namespace glslangtest { +namespace { + +using LinkTest = GlslangTest< + ::testing::TestWithParam>>; + +TEST_P(LinkTest, FromFile) +{ + const auto& fileNames = GetParam(); + const size_t fileCount = fileNames.size(); + const EShMessages controls = DeriveOptions(Source::GLSL, Semantics::OpenGL, Target::AST); + GlslangResult result; + + // Compile each input shader file. + std::vector> shaders; + for (size_t i = 0; i < fileCount; ++i) { + std::string contents; + tryLoadFile(GlobalTestSettings.testRoot + "/" + fileNames[i], + "input", &contents); + shaders.emplace_back( + new glslang::TShader(GetShaderStage(GetSuffix(fileNames[i])))); + auto* shader = shaders.back().get(); + compile(shader, contents, "", controls); + result.shaderResults.push_back( + {fileNames[i], shader->getInfoLog(), shader->getInfoDebugLog()}); + } + + // Link all of them. + glslang::TProgram program; + for (const auto& shader : shaders) program.addShader(shader.get()); + program.link(controls); + result.linkingOutput = program.getInfoLog(); + result.linkingError = program.getInfoDebugLog(); + + std::ostringstream stream; + outputResultToStream(&stream, result, controls); + + // Check with expected results. + const std::string expectedOutputFname = + GlobalTestSettings.testRoot + "/baseResults/" + fileNames.front() + ".out"; + std::string expectedOutput; + tryLoadFile(expectedOutputFname, "expected output", &expectedOutput); + + checkEqAndUpdateIfRequested(expectedOutput, stream.str(), expectedOutputFname); +} + +// clang-format off +INSTANTIATE_TEST_CASE_P( + Glsl, LinkTest, + ::testing::ValuesIn(std::vector>({ + {"mains1.frag", "mains2.frag", "noMain1.geom", "noMain2.geom"}, + {"noMain.vert", "mains.frag"}, + {"link1.frag", "link2.frag", "link3.frag"}, + {"recurse1.vert", "recurse1.frag", "recurse2.frag"}, + {"300link.frag"}, + {"300link2.frag"}, + {"300link3.frag"}, + {"empty.frag", "empty2.frag", "empty3.frag"}, + {"150.tesc", "150.tese", "400.tesc", "400.tese", "410.tesc", "420.tesc", "420.tese"}, + {"max_vertices_0.geom"}, + {"es-link1.frag", "es-link2.frag"}, + {"missingBodies.vert"} + })), +); +// clang-format on + +} // anonymous namespace +} // namespace glslangtest diff --git a/3rdparty/bgfx/3rdparty/glslang/gtests/Pp.FromFile.cpp b/3rdparty/bgfx/3rdparty/glslang/gtests/Pp.FromFile.cpp new file mode 100644 index 0000000..13daac0 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/gtests/Pp.FromFile.cpp @@ -0,0 +1,75 @@ +// +// Copyright (C) 2016 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 Google Inc. 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. + +#include + +#include "TestFixture.h" + +namespace glslangtest { +namespace { + +using PreprocessingTest = GlslangTest<::testing::TestWithParam>; + +TEST_P(PreprocessingTest, FromFile) +{ + loadFilePreprocessAndCheck(GlobalTestSettings.testRoot, GetParam()); +} + +// clang-format off +INSTANTIATE_TEST_CASE_P( + Glsl, PreprocessingTest, + ::testing::ValuesIn(std::vector({ + "preprocessor.cpp_style_line_directive.vert", + "preprocessor.cpp_style___FILE__.vert", + "preprocessor.edge_cases.vert", + "preprocessor.errors.vert", + "preprocessor.extensions.vert", + "preprocessor.function_macro.vert", + "preprocessor.include.enabled.vert", + "preprocessor.include.disabled.vert", + "preprocessor.line.vert", + "preprocessor.line.frag", + "preprocessor.pragma.vert", + "preprocessor.simple.vert", + "preprocessor.success_if_parse_would_fail.vert", + "preprocessor.defined.vert", + "preprocessor.many.endif.vert", + "preprocessor.eof_missing.vert", + })), + FileNameAsCustomTestSuffix +); +// clang-format on + +} // anonymous namespace +} // namespace glslangtest diff --git a/3rdparty/bgfx/3rdparty/glslang/gtests/README.md b/3rdparty/bgfx/3rdparty/glslang/gtests/README.md new file mode 100644 index 0000000..c8261cc --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/gtests/README.md @@ -0,0 +1,26 @@ +Glslang Tests based on the Google Test Framework +================================================ + +This directory contains [Google Test][gtest] based test fixture and test +cases for glslang. + +Apart from typical unit tests, necessary utility methods are added into +the [`GlslangTests`](TestFixture.h) fixture to provide the ability to do +file-based integration tests. Various `*.FromFile.cpp` files lists names +of files containing input shader code in the `Test/` directory. Utility +methods will load the input shader source, compile them, and compare with +the corresponding expected output in the `Test/baseResults/` directory. + +How to run the tests +-------------------- + +Please make sure you have a copy of [Google Test][gtest] checked out under +the `External` directory before building. After building, just run the +`ctest` command or the `gtests/glslangtests` binary in your build directory. + +The `gtests/glslangtests` binary also provides an `--update-mode` command +line option, which, if supplied, will overwrite the golden files under +the `Test/baseResults/` directory with real output from that invocation. +This serves as an easy way to update golden files. + +[gtest]: https://github.com/google/googletest diff --git a/3rdparty/bgfx/3rdparty/glslang/gtests/Remap.FromFile.cpp b/3rdparty/bgfx/3rdparty/glslang/gtests/Remap.FromFile.cpp new file mode 100644 index 0000000..9f25a6f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/gtests/Remap.FromFile.cpp @@ -0,0 +1,117 @@ +// +// Copyright (C) 2016 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 Google Inc. 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. + +#include + +#include "TestFixture.h" + +namespace glslangtest { +namespace { + +struct RemapTestArgs { + const char* fileName; + const char* entryPoint; + Source sourceLanguage; + unsigned int remapOpts; +}; + +// We are using FileNameEntryPointPair objects as parameters for instantiating +// the template, so the global FileNameAsCustomTestSuffix() won't work since +// it assumes std::string as parameters. Thus, an overriding one here. +std::string FileNameAsCustomTestSuffix( + const ::testing::TestParamInfo& info) { + std::string name = info.param.fileName; + // A valid test case suffix cannot have '.' and '-' inside. + std::replace(name.begin(), name.end(), '.', '_'); + std::replace(name.begin(), name.end(), '-', '_'); + return name; +} + +using RemapTest = GlslangTest<::testing::TestWithParam>; + +// Remapping SPIR-V modules. +TEST_P(RemapTest, FromFile) +{ + if (GetSuffix(GetParam().fileName) == "spv") { + loadFileRemapAndCheck(GlobalTestSettings.testRoot, GetParam().fileName, + GetParam().sourceLanguage, + Semantics::Vulkan, + Target::Spv, + GetParam().remapOpts); + } else { + loadFileCompileRemapAndCheck(GlobalTestSettings.testRoot, GetParam().fileName, + GetParam().sourceLanguage, + Semantics::Vulkan, + Target::Spv, + GetParam().entryPoint, + GetParam().remapOpts); + } +} + +// clang-format off +INSTANTIATE_TEST_CASE_P( + ToSpirv, RemapTest, + ::testing::ValuesIn(std::vector{ + // GLSL remapper tests + // testname entry language remapper_options + { "remap.basic.none.frag", "main", Source::GLSL, spv::spirvbin_t::NONE }, + { "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.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 }, + { "remap.literal64.everything.spv", "main", Source::GLSL, spv::spirvbin_t::DO_EVERYTHING }, + { "remap.if.none.frag", "main", Source::GLSL, spv::spirvbin_t::NONE }, + { "remap.if.everything.frag", "main", Source::GLSL, spv::spirvbin_t::DO_EVERYTHING }, + { "remap.similar_1a.none.frag", "main", Source::GLSL, spv::spirvbin_t::NONE }, + { "remap.similar_1b.none.frag", "main", Source::GLSL, spv::spirvbin_t::NONE }, + { "remap.similar_1a.everything.frag", "main", Source::GLSL, spv::spirvbin_t::DO_EVERYTHING }, + { "remap.similar_1b.everything.frag", "main", Source::GLSL, spv::spirvbin_t::DO_EVERYTHING }, + { "remap.uniformarray.none.frag", "main", Source::GLSL, spv::spirvbin_t::NONE }, + { "remap.uniformarray.everything.frag", "main", Source::GLSL, spv::spirvbin_t::DO_EVERYTHING }, + + // HLSL remapper tests + { "remap.hlsl.sample.basic.strip.frag", "main", Source::HLSL, spv::spirvbin_t::STRIP }, + { "remap.hlsl.sample.basic.everything.frag", "main", Source::HLSL, spv::spirvbin_t::DO_EVERYTHING }, + { "remap.hlsl.sample.basic.none.frag", "main", Source::HLSL, spv::spirvbin_t::NONE }, + { "remap.hlsl.templatetypes.none.frag", "main", Source::HLSL, spv::spirvbin_t::NONE }, + { "remap.hlsl.templatetypes.everything.frag", "main", Source::HLSL, spv::spirvbin_t::DO_EVERYTHING }, + }), + FileNameAsCustomTestSuffix +); +// clang-format on + +} // anonymous namespace +} // namespace glslangtest diff --git a/3rdparty/bgfx/3rdparty/glslang/gtests/Settings.cpp b/3rdparty/bgfx/3rdparty/glslang/gtests/Settings.cpp new file mode 100644 index 0000000..0ac5844 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/gtests/Settings.cpp @@ -0,0 +1,51 @@ +// +// Copyright (C) 2016 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 Google Inc. 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. + +#include "Settings.h" + +namespace glslangtest { + +// We need CMake to provide us the absolute path to the directory containing +// test files, so we are certain to find those files no matter where the test +// harness binary is generated. This provides out-of-source build capability. +// This will be used as the default test root, but can be overridden with +// the --test-root argument. +#ifndef GLSLANG_TEST_DIRECTORY +#error \ + "GLSLANG_TEST_DIRECTORY needs to be defined for gtest to locate test files." +#endif + +GTestSettings GlobalTestSettings = {nullptr, false, GLSLANG_TEST_DIRECTORY}; + +} // namespace glslangtest diff --git a/3rdparty/bgfx/3rdparty/glslang/gtests/Settings.h b/3rdparty/bgfx/3rdparty/glslang/gtests/Settings.h new file mode 100644 index 0000000..c38474c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/gtests/Settings.h @@ -0,0 +1,58 @@ +// +// Copyright (C) 2016 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 Google Inc. 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. + +#ifndef GLSLANG_GTESTS_SETTINGS_H +#define GLSLANG_GTESTS_SETTINGS_H + +#include + +namespace glslangtest { + +class GlslangInitializer; + +struct GTestSettings { + // A handle to GlslangInitializer instance. + GlslangInitializer* initializer; + // An indicator of whether GTest should write real output to the file for + // the expected output. + bool updateMode; + // The root directory for test files. + std::string testRoot; +}; + +extern GTestSettings GlobalTestSettings; + +} // namespace glslangtest + +#endif // GLSLANG_GTESTS_SETTINGS_H diff --git a/3rdparty/bgfx/3rdparty/glslang/gtests/Spv.FromFile.cpp b/3rdparty/bgfx/3rdparty/glslang/gtests/Spv.FromFile.cpp new file mode 100644 index 0000000..a8d4b01 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/gtests/Spv.FromFile.cpp @@ -0,0 +1,411 @@ + // +// Copyright (C) 2016 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 Google Inc. 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. + +#include + +#include + +#include "TestFixture.h" + +namespace glslangtest { +namespace { + +struct IoMapData { + const char* fileName; + const char* entryPoint; + int baseSamplerBinding; + int baseTextureBinding; + int baseImageBinding; + int baseUboBinding; + int baseSsboBinding; + bool autoMapBindings; + bool flattenUniforms; +}; + +std::string FileNameAsCustomTestSuffixIoMap( + const ::testing::TestParamInfo& info) { + std::string name = info.param.fileName; + // A valid test case suffix cannot have '.' and '-' inside. + std::replace(name.begin(), name.end(), '.', '_'); + std::replace(name.begin(), name.end(), '-', '_'); + return name; +} + +using CompileVulkanToSpirvTest = GlslangTest<::testing::TestWithParam>; +using CompileOpenGLToSpirvTest = GlslangTest<::testing::TestWithParam>; +using VulkanSemantics = GlslangTest<::testing::TestWithParam>; +using OpenGLSemantics = GlslangTest<::testing::TestWithParam>; +using VulkanAstSemantics = GlslangTest<::testing::TestWithParam>; +using HlslIoMap = GlslangTest<::testing::TestWithParam>; +using GlslIoMap = GlslangTest<::testing::TestWithParam>; +#ifdef AMD_EXTENSIONS +using CompileVulkanToSpirvTestAMD = GlslangTest<::testing::TestWithParam>; +#endif +#ifdef NV_EXTENSIONS +using CompileVulkanToSpirvTestNV = GlslangTest<::testing::TestWithParam>; +#endif + +// Compiling GLSL to SPIR-V under Vulkan semantics. Expected to successfully +// generate SPIR-V. +TEST_P(CompileVulkanToSpirvTest, FromFile) +{ + loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(), + Source::GLSL, Semantics::Vulkan, + Target::Spv); +} + +// Compiling GLSL to SPIR-V under OpenGL semantics. Expected to successfully +// generate SPIR-V. +TEST_P(CompileOpenGLToSpirvTest, FromFile) +{ + loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(), + Source::GLSL, Semantics::OpenGL, + Target::Spv); +} + +// GLSL-level Vulkan semantics test. Expected to error out before generating +// SPIR-V. +TEST_P(VulkanSemantics, FromFile) +{ + loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(), + Source::GLSL, Semantics::Vulkan, + Target::Spv); +} + +// GLSL-level Vulkan semantics test. Expected to error out before generating +// SPIR-V. +TEST_P(OpenGLSemantics, FromFile) +{ + loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(), + Source::GLSL, Semantics::OpenGL, + Target::Spv); +} + +// GLSL-level Vulkan semantics test that need to see the AST for validation. +TEST_P(VulkanAstSemantics, FromFile) +{ + loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(), + Source::GLSL, Semantics::Vulkan, + Target::AST); +} + +// HLSL-level Vulkan semantics tests. +TEST_P(HlslIoMap, FromFile) +{ + loadFileCompileIoMapAndCheck(GlobalTestSettings.testRoot, GetParam().fileName, + Source::HLSL, Semantics::Vulkan, + Target::Spv, GetParam().entryPoint, + GetParam().baseSamplerBinding, + GetParam().baseTextureBinding, + GetParam().baseImageBinding, + GetParam().baseUboBinding, + GetParam().baseSsboBinding, + GetParam().autoMapBindings, + GetParam().flattenUniforms); +} + +// GLSL-level Vulkan semantics tests. +TEST_P(GlslIoMap, FromFile) +{ + loadFileCompileIoMapAndCheck(GlobalTestSettings.testRoot, GetParam().fileName, + Source::GLSL, Semantics::Vulkan, + Target::Spv, GetParam().entryPoint, + GetParam().baseSamplerBinding, + GetParam().baseTextureBinding, + GetParam().baseImageBinding, + GetParam().baseUboBinding, + GetParam().baseSsboBinding, + GetParam().autoMapBindings, + GetParam().flattenUniforms); +} + +#ifdef AMD_EXTENSIONS +// Compiling GLSL to SPIR-V under Vulkan semantics (AMD extensions enabled). +// Expected to successfully generate SPIR-V. +TEST_P(CompileVulkanToSpirvTestAMD, FromFile) +{ + loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(), + Source::GLSL, Semantics::Vulkan, + Target::Spv); +} +#endif + +#ifdef NV_EXTENSIONS +// Compiling GLSL to SPIR-V under Vulkan semantics (AMD extensions enabled). +// Expected to successfully generate SPIR-V. +TEST_P(CompileVulkanToSpirvTestNV, FromFile) +{ + loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(), + Source::GLSL, Semantics::Vulkan, + Target::Spv); +} +#endif + +// clang-format off +INSTANTIATE_TEST_CASE_P( + Glsl, CompileVulkanToSpirvTest, + ::testing::ValuesIn(std::vector({ + // Test looping constructs. + // No tests yet for making sure break and continue from a nested loop + // goes to the innermost target. + "spv.do-simple.vert", + "spv.do-while-continue-break.vert", + "spv.for-complex-condition.vert", + "spv.for-continue-break.vert", + "spv.for-simple.vert", + "spv.for-notest.vert", + "spv.for-nobody.vert", + "spv.while-continue-break.vert", + "spv.while-simple.vert", + // vulkan-specific tests + "spv.set.vert", + "spv.double.comp", + "spv.100ops.frag", + "spv.130.frag", + "spv.140.frag", + "spv.150.geom", + "spv.150.vert", + "spv.300BuiltIns.vert", + "spv.300layout.frag", + "spv.300layout.vert", + "spv.300layoutp.vert", + "spv.310.comp", + "spv.310.bitcast.frag", + "spv.330.geom", + "spv.400.frag", + "spv.400.tesc", + "spv.400.tese", + "spv.420.geom", + "spv.430.frag", + "spv.430.vert", + "spv.450.tesc", + "spv.450.geom", + "spv.450.noRedecl.tesc", + "spv.accessChain.frag", + "spv.aggOps.frag", + "spv.always-discard.frag", + "spv.always-discard2.frag", + "spv.bitCast.frag", + "spv.bool.vert", + "spv.boolInBlock.frag", + "spv.branch-return.vert", + "spv.conditionalDiscard.frag", + "spv.conversion.frag", + "spv.dataOut.frag", + "spv.dataOutIndirect.frag", + "spv.dataOutIndirect.vert", + "spv.deepRvalue.frag", + "spv.depthOut.frag", + "spv.deviceGroup.frag", + "spv.discard-dce.frag", + "spv.drawParams.vert", + "spv.doWhileLoop.frag", + "spv.earlyReturnDiscard.frag", + "spv.flowControl.frag", + "spv.forLoop.frag", + "spv.forwardFun.frag", + "spv.functionCall.frag", + "spv.functionNestedOpaque.vert", + "spv.functionSemantics.frag", + "spv.GeometryShaderPassthrough.geom", + "spv.interpOps.frag", + "spv.int64.frag", + "spv.intOps.vert", + "spv.layoutNested.vert", + "spv.length.frag", + "spv.localAggregates.frag", + "spv.loops.frag", + "spv.loopsArtificial.frag", + "spv.matFun.vert", + "spv.matrix.frag", + "spv.matrix2.frag", + "spv.memoryQualifier.frag", + "spv.merge-unreachable.frag", + "spv.multiStruct.comp", + "spv.multiStructFuncall.frag", + "spv.multiView.frag", + "spv.newTexture.frag", + "spv.noDeadDecorations.vert", + "spv.nonSquare.vert", + "spv.noWorkgroup.comp", + "spv.offsets.frag", + "spv.Operations.frag", + "spv.precision.frag", + "spv.prepost.frag", + "spv.qualifiers.vert", + "spv.sampleMaskOverrideCoverage.frag", + "spv.shaderBallot.comp", + "spv.shaderDrawParams.vert", + "spv.shaderGroupVote.comp", + "spv.shiftOps.frag", + "spv.simpleFunctionCall.frag", + "spv.simpleMat.vert", + "spv.sparseTexture.frag", + "spv.sparseTextureClamp.frag", + "spv.structAssignment.frag", + "spv.structDeref.frag", + "spv.structure.frag", + "spv.switch.frag", + "spv.swizzle.frag", + "spv.swizzleInversion.frag", + "spv.test.frag", + "spv.test.vert", + "spv.texture.frag", + "spv.texture.vert", + "spv.image.frag", + "spv.types.frag", + "spv.uint.frag", + "spv.uniformArray.frag", + "spv.variableArrayIndex.frag", + "spv.varyingArray.frag", + "spv.varyingArrayIndirect.frag", + "spv.voidFunction.frag", + "spv.whileLoop.frag", + "spv.AofA.frag", + "spv.queryL.frag", + "spv.separate.frag", + "spv.shortCircuit.frag", + "spv.pushConstant.vert", + "spv.pushConstantAnon.vert", + "spv.subpass.frag", + "spv.specConstant.vert", + "spv.specConstant.comp", + "spv.specConstantComposite.vert", + "spv.specConstantOperations.vert", + "spv.precise.tese", + "spv.precise.tesc", + })), + FileNameAsCustomTestSuffix +); + +// clang-format off +INSTANTIATE_TEST_CASE_P( + Hlsl, HlslIoMap, + ::testing::ValuesIn(std::vector{ + { "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.buffer.autoassign.frag", "main", 5, 10, 0, 15, 30, true, true }, + { "spv.ssbo.autoassign.frag", "main", 5, 10, 0, 15, 30, true, true }, + { "spv.rw.autoassign.frag", "main", 5, 10, 20, 15, 30, true, true }, + { "spv.register.autoassign.rangetest.frag", "main", + glslang::TQualifier::layoutBindingEnd-2, + glslang::TQualifier::layoutBindingEnd+5, + 20, 30, true, false }, + }), + FileNameAsCustomTestSuffixIoMap +); + +// clang-format off +INSTANTIATE_TEST_CASE_P( + Hlsl, GlslIoMap, + ::testing::ValuesIn(std::vector{ + { "spv.glsl.register.autoassign.frag", "main", 5, 10, 0, 20, 30, true, false }, + { "spv.glsl.register.noautoassign.frag", "main", 5, 10, 0, 15, 30, false, false }, + }), + FileNameAsCustomTestSuffixIoMap +); + +// clang-format off +INSTANTIATE_TEST_CASE_P( + Glsl, CompileOpenGLToSpirvTest, + ::testing::ValuesIn(std::vector({ + "spv.atomic.comp", + "spv.glFragColor.frag", + "spv.specConst.vert", + })), + FileNameAsCustomTestSuffix +); + +INSTANTIATE_TEST_CASE_P( + Glsl, VulkanSemantics, + ::testing::ValuesIn(std::vector({ + "vulkan.frag", + "vulkan.vert", + "vulkan.comp", + })), + FileNameAsCustomTestSuffix +); + +INSTANTIATE_TEST_CASE_P( + Glsl, OpenGLSemantics, + ::testing::ValuesIn(std::vector({ + "glspv.esversion.vert", + "glspv.version.frag", + "glspv.version.vert", + "glspv.frag", + "glspv.vert", + })), + FileNameAsCustomTestSuffix +); + +INSTANTIATE_TEST_CASE_P( + Glsl, VulkanAstSemantics, + ::testing::ValuesIn(std::vector({ + "vulkan.ast.vert", + })), + FileNameAsCustomTestSuffix +); + +#ifdef AMD_EXTENSIONS +INSTANTIATE_TEST_CASE_P( + Glsl, CompileVulkanToSpirvTestAMD, + ::testing::ValuesIn(std::vector({ + "spv.float16.frag", + "spv.shaderBallotAMD.comp" + })), + FileNameAsCustomTestSuffix +); +#endif + +#ifdef NV_EXTENSIONS +INSTANTIATE_TEST_CASE_P( + Glsl, CompileVulkanToSpirvTestNV, + ::testing::ValuesIn(std::vector({ + "spv.sampleMaskOverrideCoverage.frag", + "spv.GeometryShaderPassthrough.geom", + "spv.viewportArray2.vert", + "spv.viewportArray2.tesc", + "spv.stereoViewRendering.vert", + "spv.stereoViewRendering.tesc", + "spv.multiviewPerViewAttributes.vert", + "spv.multiviewPerViewAttributes.tesc", +})), +FileNameAsCustomTestSuffix +); +#endif +// clang-format on + +} // anonymous namespace +} // namespace glslangtest diff --git a/3rdparty/bgfx/3rdparty/glslang/gtests/TestFixture.cpp b/3rdparty/bgfx/3rdparty/glslang/gtests/TestFixture.cpp new file mode 100644 index 0000000..db2b81d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/gtests/TestFixture.cpp @@ -0,0 +1,162 @@ +// +// Copyright (C) 2016 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 Google Inc. 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. + +#include "TestFixture.h" + +namespace glslangtest { + +std::string FileNameAsCustomTestSuffix( + const ::testing::TestParamInfo& info) +{ + std::string name = info.param; + // A valid test case suffix cannot have '.' and '-' inside. + std::replace(name.begin(), name.end(), '.', '_'); + std::replace(name.begin(), name.end(), '-', '_'); + return name; +} + +EShLanguage GetShaderStage(const std::string& stage) +{ + if (stage == "vert") { + return EShLangVertex; + } else if (stage == "tesc") { + return EShLangTessControl; + } else if (stage == "tese") { + return EShLangTessEvaluation; + } else if (stage == "geom") { + return EShLangGeometry; + } else if (stage == "frag") { + return EShLangFragment; + } else if (stage == "comp") { + return EShLangCompute; + } else { + assert(0 && "Unknown shader stage"); + return EShLangCount; + } +} + +EShMessages DeriveOptions(Source source, Semantics semantics, Target target) +{ + EShMessages result = EShMsgCascadingErrors; + + switch (source) { + case Source::GLSL: + break; + case Source::HLSL: + result = static_cast(result | EShMsgReadHlsl); + break; + } + + switch (target) { + case Target::AST: + result = static_cast(result | EShMsgAST); + break; + case Target::Spv: + result = static_cast(result | EShMsgSpvRules); + result = static_cast(result | EShMsgKeepUncalled); + break; + case Target::BothASTAndSpv: + result = static_cast(result | EShMsgSpvRules | EShMsgAST); + result = static_cast(result | EShMsgKeepUncalled); + break; + }; + + switch (semantics) { + case Semantics::OpenGL: + break; + case Semantics::Vulkan: + result = static_cast(result | EShMsgVulkanRules | EShMsgSpvRules); + break; + } + + return result; +} + +std::pair ReadFile(const std::string& path) +{ + std::ifstream fstream(path, std::ios::in); + if (fstream) { + std::string contents; + fstream.seekg(0, std::ios::end); + contents.reserve((std::string::size_type)fstream.tellg()); + fstream.seekg(0, std::ios::beg); + contents.assign((std::istreambuf_iterator(fstream)), + std::istreambuf_iterator()); + return std::make_pair(true, contents); + } + return std::make_pair(false, ""); +} + +std::pair > ReadSpvBinaryFile(const std::string& path) +{ + std::ifstream fstream(path, std::fstream::in | std::fstream::binary); + + if (!fstream) + return std::make_pair(false, std::vector()); + + std::vector contents; + + // Reserve space (for efficiency, not for correctness) + fstream.seekg(0, fstream.end); + contents.reserve(size_t(fstream.tellg()) / sizeof(std::uint32_t)); + fstream.seekg(0, fstream.beg); + + // There is no istream iterator traversing by uint32_t, so we must loop. + while (!fstream.eof()) { + std::uint32_t inWord; + fstream.read((char *)&inWord, sizeof(inWord)); + + if (!fstream.eof()) + contents.push_back(inWord); + } + + return std::make_pair(true, contents); // hopefully, c++11 move semantics optimizes the copy away. +} + +bool WriteFile(const std::string& path, const std::string& contents) +{ + std::ofstream fstream(path, std::ios::out); + if (!fstream) return false; + fstream << contents; + fstream.flush(); + return true; +} + +std::string GetSuffix(const std::string& name) +{ + const size_t pos = name.rfind('.'); + return (pos == std::string::npos) ? "" : name.substr(name.rfind('.') + 1); +} + +} // namespace glslangtest diff --git a/3rdparty/bgfx/3rdparty/glslang/gtests/TestFixture.h b/3rdparty/bgfx/3rdparty/glslang/gtests/TestFixture.h new file mode 100644 index 0000000..38ec54c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/gtests/TestFixture.h @@ -0,0 +1,578 @@ +// +// Copyright (C) 2016 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 Google Inc. 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. + +#ifndef GLSLANG_GTESTS_TEST_FIXTURE_H +#define GLSLANG_GTESTS_TEST_FIXTURE_H + +#include +#include +#include +#include +#include +#include + +#include + +#include "SPIRV/GlslangToSpv.h" +#include "SPIRV/disassemble.h" +#include "SPIRV/doc.h" +#include "SPIRV/SPVRemapper.h" +#include "StandAlone/ResourceLimits.h" +#include "glslang/Public/ShaderLang.h" + +#include "Initializer.h" +#include "Settings.h" + +namespace glslangtest { + +// This function is used to provide custom test name suffixes based on the +// shader source file names. Otherwise, the test name suffixes will just be +// numbers, which are not quite obvious. +std::string FileNameAsCustomTestSuffix( + const ::testing::TestParamInfo& info); + +enum class Source { + GLSL, + HLSL, +}; + +// Enum for shader compilation semantics. +enum class Semantics { + OpenGL, + Vulkan, +}; + +// Enum for compilation target. +enum class Target { + AST, + Spv, + BothASTAndSpv, +}; + +EShLanguage GetShaderStage(const std::string& stage); + +EShMessages DeriveOptions(Source, Semantics, Target); + +// Reads the content of the file at the given |path|. On success, returns true +// and the contents; otherwise, returns false and an empty string. +std::pair ReadFile(const std::string& path); +std::pair > ReadSpvBinaryFile(const std::string& path); + +// Writes the given |contents| into the file at the given |path|. Returns true +// on successful output. +bool WriteFile(const std::string& path, const std::string& contents); + +// Returns the suffix of the given |name|. +std::string GetSuffix(const std::string& name); + +// Base class for glslang integration tests. It contains many handy utility-like +// methods such as reading shader source files, compiling into AST/SPIR-V, and +// comparing with expected outputs. +// +// To write value-Parameterized tests: +// using ValueParamTest = GlslangTest<::testing::TestWithParam>; +// To use as normal fixture: +// using FixtureTest = GlslangTest<::testing::Test>; +template +class GlslangTest : public GT { +public: + GlslangTest() + : defaultVersion(100), + defaultProfile(ENoProfile), + forceVersionProfile(false), + isForwardCompatible(false) {} + + // Tries to load the contents from the file at the given |path|. On success, + // writes the contents into |contents|. On failure, errors out. + void tryLoadFile(const std::string& path, const std::string& tag, + std::string* contents) + { + bool fileReadOk; + std::tie(fileReadOk, *contents) = ReadFile(path); + ASSERT_TRUE(fileReadOk) << "Cannot open " << tag << " file: " << path; + } + + // Tries to load the contents from the file at the given |path|. On success, + // writes the contents into |contents|. On failure, errors out. + void tryLoadSpvFile(const std::string& path, const std::string& tag, + std::vector& contents) + { + bool fileReadOk; + std::tie(fileReadOk, contents) = ReadSpvBinaryFile(path); + ASSERT_TRUE(fileReadOk) << "Cannot open " << tag << " file: " << path; + } + + // Checks the equality of |expected| and |real|. If they are not equal, + // write |real| to the given file named as |fname| if update mode is on. + void checkEqAndUpdateIfRequested(const std::string& expected, + const std::string& real, + const std::string& fname) + { + // In order to output the message we want under proper circumstances, + // we need the following operator<< stuff. + EXPECT_EQ(expected, real) + << (GlobalTestSettings.updateMode + ? ("Mismatch found and update mode turned on - " + "flushing expected result output.") + : ""); + + // Update the expected output file if requested. + // It looks weird to duplicate the comparison between expected_output + // and stream.str(). However, if creating a variable for the comparison + // result, we cannot have pretty print of the string diff in the above. + if (GlobalTestSettings.updateMode && expected != real) { + EXPECT_TRUE(WriteFile(fname, real)) << "Flushing failed"; + } + } + + struct ShaderResult { + std::string shaderName; + std::string output; + std::string error; + }; + + // A struct for holding all the information returned by glslang compilation + // and linking. + struct GlslangResult { + std::vector shaderResults; + std::string linkingOutput; + std::string linkingError; + std::string spirvWarningsErrors; + std::string spirv; // Optional SPIR-V disassembly text. + }; + + // Compiles and the given source |code| of the given shader |stage| into + // the target under the semantics conveyed via |controls|. Returns true + // and modifies |shader| on success. + bool compile(glslang::TShader* shader, const std::string& code, + const std::string& entryPointName, EShMessages controls, + const TBuiltInResource* resources=nullptr) + { + const char* shaderStrings = code.data(); + const int shaderLengths = static_cast(code.size()); + + shader->setStringsWithLengths(&shaderStrings, &shaderLengths, 1); + if (!entryPointName.empty()) shader->setEntryPoint(entryPointName.c_str()); + return shader->parse( + (resources ? resources : &glslang::DefaultTBuiltInResource), + defaultVersion, isForwardCompatible, controls); + } + + // Compiles and links the given source |code| of the given shader + // |stage| into the target under the semantics specified via |controls|. + // Returns a GlslangResult instance containing all the information generated + // during the process. If the target includes SPIR-V, also disassembles + // the result and returns disassembly text. + GlslangResult compileAndLink( + const std::string shaderName, const std::string& code, + const std::string& entryPointName, EShMessages controls, + bool flattenUniformArrays = false) + { + const EShLanguage kind = GetShaderStage(GetSuffix(shaderName)); + + glslang::TShader shader(kind); + shader.setFlattenUniformArrays(flattenUniformArrays); + + bool success = compile(&shader, code, entryPointName, controls); + + glslang::TProgram program; + program.addShader(&shader); + success &= program.link(controls); + + spv::SpvBuildLogger logger; + + if (success && (controls & EShMsgSpvRules)) { + std::vector spirv_binary; + glslang::GlslangToSpv(*program.getIntermediate(kind), + spirv_binary, &logger); + + std::ostringstream disassembly_stream; + spv::Parameterize(); + spv::Disassemble(disassembly_stream, spirv_binary); + return {{{shaderName, shader.getInfoLog(), shader.getInfoDebugLog()},}, + program.getInfoLog(), program.getInfoDebugLog(), + logger.getAllMessages(), disassembly_stream.str()}; + } else { + return {{{shaderName, shader.getInfoLog(), shader.getInfoDebugLog()},}, + program.getInfoLog(), program.getInfoDebugLog(), "", ""}; + } + } + + // Compiles and links the given source |code| of the given shader + // |stage| into the target under the semantics specified via |controls|. + // Returns a GlslangResult instance containing all the information generated + // during the process. If the target includes SPIR-V, also disassembles + // the result and returns disassembly text. + GlslangResult compileLinkIoMap( + const std::string shaderName, const std::string& code, + const std::string& entryPointName, EShMessages controls, + int baseSamplerBinding, + int baseTextureBinding, + int baseImageBinding, + int baseUboBinding, + int baseSsboBinding, + bool autoMapBindings, + bool flattenUniformArrays) + { + const EShLanguage kind = GetShaderStage(GetSuffix(shaderName)); + + glslang::TShader shader(kind); + shader.setShiftSamplerBinding(baseSamplerBinding); + shader.setShiftTextureBinding(baseTextureBinding); + shader.setShiftImageBinding(baseImageBinding); + shader.setShiftUboBinding(baseUboBinding); + shader.setShiftSsboBinding(baseSsboBinding); + shader.setAutoMapBindings(autoMapBindings); + shader.setFlattenUniformArrays(flattenUniformArrays); + + bool success = compile(&shader, code, entryPointName, controls); + + glslang::TProgram program; + program.addShader(&shader); + + success &= program.link(controls); + success &= program.mapIO(); + + spv::SpvBuildLogger logger; + + if (success && (controls & EShMsgSpvRules)) { + std::vector spirv_binary; + glslang::GlslangToSpv(*program.getIntermediate(kind), + spirv_binary, &logger); + + std::ostringstream disassembly_stream; + spv::Parameterize(); + spv::Disassemble(disassembly_stream, spirv_binary); + return {{{shaderName, shader.getInfoLog(), shader.getInfoDebugLog()},}, + program.getInfoLog(), program.getInfoDebugLog(), + logger.getAllMessages(), disassembly_stream.str()}; + } else { + return {{{shaderName, shader.getInfoLog(), shader.getInfoDebugLog()},}, + program.getInfoLog(), program.getInfoDebugLog(), "", ""}; + } + } + + // This is like compileAndLink but with remapping of the SPV binary + // through spirvbin_t::remap(). While technically this could be merged + // with compileAndLink() above (with the remap step optionally being a no-op) + // it is given separately here for ease of future extraction. + GlslangResult compileLinkRemap( + const std::string shaderName, const std::string& code, + const std::string& entryPointName, EShMessages controls, + const unsigned int remapOptions = spv::spirvbin_t::NONE) + { + const EShLanguage kind = GetShaderStage(GetSuffix(shaderName)); + + glslang::TShader shader(kind); + bool success = compile(&shader, code, entryPointName, controls); + + glslang::TProgram program; + program.addShader(&shader); + success &= program.link(controls); + + spv::SpvBuildLogger logger; + + if (success && (controls & EShMsgSpvRules)) { + std::vector spirv_binary; + glslang::GlslangToSpv(*program.getIntermediate(kind), + spirv_binary, &logger); + + spv::spirvbin_t(0 /*verbosity*/).remap(spirv_binary, remapOptions); + + std::ostringstream disassembly_stream; + spv::Parameterize(); + spv::Disassemble(disassembly_stream, spirv_binary); + return {{{shaderName, shader.getInfoLog(), shader.getInfoDebugLog()},}, + program.getInfoLog(), program.getInfoDebugLog(), + logger.getAllMessages(), disassembly_stream.str()}; + } else { + return {{{shaderName, shader.getInfoLog(), shader.getInfoDebugLog()},}, + program.getInfoLog(), program.getInfoDebugLog(), "", ""}; + } + } + + // remap the binary in 'code' with the options in remapOptions + GlslangResult remap( + const std::string shaderName, const std::vector& code, + EShMessages controls, + const unsigned int remapOptions = spv::spirvbin_t::NONE) + { + if ((controls & EShMsgSpvRules)) { + std::vector spirv_binary(code); // scratch copy + + spv::spirvbin_t(0 /*verbosity*/).remap(spirv_binary, remapOptions); + + std::ostringstream disassembly_stream; + spv::Parameterize(); + spv::Disassemble(disassembly_stream, spirv_binary); + + return {{{shaderName, "", ""},}, + "", "", + "", disassembly_stream.str()}; + } else { + return {{{shaderName, "", ""},}, "", "", "", ""}; + } + } + + void outputResultToStream(std::ostringstream* stream, + const GlslangResult& result, + EShMessages controls) + { + const auto outputIfNotEmpty = [&stream](const std::string& str) { + if (!str.empty()) *stream << str << "\n"; + }; + + for (const auto& shaderResult : result.shaderResults) { + *stream << shaderResult.shaderName << "\n"; + outputIfNotEmpty(shaderResult.output); + outputIfNotEmpty(shaderResult.error); + } + outputIfNotEmpty(result.linkingOutput); + outputIfNotEmpty(result.linkingError); + *stream << result.spirvWarningsErrors; + + if (controls & EShMsgSpvRules) { + *stream + << (result.spirv.empty() + ? "SPIR-V is not generated for failed compile or link\n" + : result.spirv); + } + } + + void loadFileCompileAndCheck(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); + + // Generate the hybrid output in the way of glslangValidator. + std::ostringstream stream; + outputResultToStream(&stream, result, controls); + + checkEqAndUpdateIfRequested(expectedOutput, stream.str(), + expectedOutputFname); + } + + void loadFileCompileFlattenUniformsAndCheck(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, true); + + // Generate the hybrid output in the way of glslangValidator. + std::ostringstream stream; + outputResultToStream(&stream, result, controls); + + checkEqAndUpdateIfRequested(expectedOutput, stream.str(), + expectedOutputFname); + } + + void loadFileCompileIoMapAndCheck(const std::string& testDir, + const std::string& testName, + Source source, + Semantics semantics, + Target target, + const std::string& entryPointName, + int baseSamplerBinding, + int baseTextureBinding, + int baseImageBinding, + int baseUboBinding, + int baseSsboBinding, + bool autoMapBindings, + bool flattenUniformArrays) + { + 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 = compileLinkIoMap(testName, input, entryPointName, controls, + baseSamplerBinding, baseTextureBinding, baseImageBinding, + baseUboBinding, baseSsboBinding, + autoMapBindings, + flattenUniformArrays); + + // Generate the hybrid output in the way of glslangValidator. + std::ostringstream stream; + outputResultToStream(&stream, result, controls); + + checkEqAndUpdateIfRequested(expectedOutput, stream.str(), + expectedOutputFname); + } + + void loadFileCompileRemapAndCheck(const std::string& testDir, + const std::string& testName, + Source source, + Semantics semantics, + Target target, + const std::string& entryPointName="", + const unsigned int remapOptions = spv::spirvbin_t::NONE) + { + 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 = compileLinkRemap(testName, input, entryPointName, controls, remapOptions); + + // Generate the hybrid output in the way of glslangValidator. + std::ostringstream stream; + outputResultToStream(&stream, result, controls); + + checkEqAndUpdateIfRequested(expectedOutput, stream.str(), + expectedOutputFname); + } + + void loadFileRemapAndCheck(const std::string& testDir, + const std::string& testName, + Source source, + Semantics semantics, + Target target, + const unsigned int remapOptions = spv::spirvbin_t::NONE) + { + const std::string inputFname = testDir + "/" + testName; + const std::string expectedOutputFname = + testDir + "/baseResults/" + testName + ".out"; + std::vector input; + std::string expectedOutput; + + tryLoadSpvFile(inputFname, "input", input); + tryLoadFile(expectedOutputFname, "expected output", &expectedOutput); + + const EShMessages controls = DeriveOptions(source, semantics, target); + GlslangResult result = remap(testName, input, controls, remapOptions); + + // Generate the hybrid output in the way of glslangValidator. + std::ostringstream stream; + outputResultToStream(&stream, result, controls); + + checkEqAndUpdateIfRequested(expectedOutput, stream.str(), + expectedOutputFname); + } + + // Preprocesses the given |source| code. On success, returns true, the + // preprocessed shader, and warning messages. Otherwise, returns false, an + // empty string, and error messages. + std::tuple preprocess( + const std::string& source) + { + const char* shaderStrings = source.data(); + const int shaderLengths = static_cast(source.size()); + + glslang::TShader shader(EShLangVertex); + shader.setStringsWithLengths(&shaderStrings, &shaderLengths, 1); + std::string ppShader; + glslang::TShader::ForbidIncluder includer; + const bool success = shader.preprocess( + &glslang::DefaultTBuiltInResource, defaultVersion, defaultProfile, + forceVersionProfile, isForwardCompatible, (EShMessages)(EShMsgOnlyPreprocessor | EShMsgCascadingErrors), + &ppShader, includer); + + std::string log = shader.getInfoLog(); + log += shader.getInfoDebugLog(); + if (success) { + return std::make_tuple(true, ppShader, log); + } else { + return std::make_tuple(false, "", log); + } + } + + void loadFilePreprocessAndCheck(const std::string& testDir, + const std::string& testName) + { + const std::string inputFname = testDir + "/" + testName; + const std::string expectedOutputFname = + testDir + "/baseResults/" + testName + ".out"; + const std::string expectedErrorFname = + testDir + "/baseResults/" + testName + ".err"; + std::string input, expectedOutput, expectedError; + + tryLoadFile(inputFname, "input", &input); + tryLoadFile(expectedOutputFname, "expected output", &expectedOutput); + tryLoadFile(expectedErrorFname, "expected error", &expectedError); + + bool ppOk; + std::string output, error; + std::tie(ppOk, output, error) = preprocess(input); + if (!output.empty()) output += '\n'; + if (!error.empty()) error += '\n'; + + checkEqAndUpdateIfRequested(expectedOutput, output, + expectedOutputFname); + checkEqAndUpdateIfRequested(expectedError, error, + expectedErrorFname); + } + +private: + const int defaultVersion; + const EProfile defaultProfile; + const bool forceVersionProfile; + const bool isForwardCompatible; +}; + +} // namespace glslangtest + +#endif // GLSLANG_GTESTS_TEST_FIXTURE_H diff --git a/3rdparty/bgfx/3rdparty/glslang/gtests/main.cpp b/3rdparty/bgfx/3rdparty/glslang/gtests/main.cpp new file mode 100644 index 0000000..35f30db --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/gtests/main.cpp @@ -0,0 +1,74 @@ +// +// Copyright (C) 2016 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 Google Inc. 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. + +#include +#include + +#include + +#include "Initializer.h" +#include "Settings.h" + +int main(int argc, char** argv) +{ + ::testing::InitGoogleTest(&argc, argv); + + std::unique_ptr initializer( + new glslangtest::GlslangInitializer); + + glslangtest::GlobalTestSettings.initializer = initializer.get(); + + for (int i = 1; i < argc; ++i) { + if (std::string("--update-mode") == argv[i]) { + glslangtest::GlobalTestSettings.updateMode = true; + } + if (std::string("--test-root") == argv[i]) { + // Allow the user set the tets root directory. This is useful + // for testing with files from another source tree. + if (i + 1 < argc) { + glslangtest::GlobalTestSettings.testRoot = argv[i + 1]; + i++; + } else { + printf("error: --test-root requires an argument\n"); + return 1; + } + } + } + + const int result = RUN_ALL_TESTS(); + + glslangtest::GlobalTestSettings.initializer = nullptr; + + return result; +} diff --git a/3rdparty/bgfx/3rdparty/glslang/hlsl/CMakeLists.txt b/3rdparty/bgfx/3rdparty/glslang/hlsl/CMakeLists.txt new file mode 100755 index 0000000..ec5f1a5 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/hlsl/CMakeLists.txt @@ -0,0 +1,28 @@ +set(SOURCES + hlslAttributes.cpp + hlslParseHelper.cpp + hlslScanContext.cpp + hlslOpMap.cpp + hlslTokenStream.cpp + hlslGrammar.cpp + hlslParseables.cpp) + + set(HEADERS + hlslAttributes.h + hlslParseHelper.h + hlslTokens.h + hlslScanContext.h + hlslOpMap.h + hlslTokenStream.h + hlslGrammar.h + hlslParseables.h) + +add_library(HLSL STATIC ${SOURCES} ${HEADERS}) +set_property(TARGET HLSL PROPERTY FOLDER hlsl) + +if(WIN32) + source_group("Source" FILES ${SOURCES} ${HEADERS}) +endif(WIN32) + +install(TARGETS HLSL + ARCHIVE DESTINATION lib) diff --git a/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslAttributes.cpp b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslAttributes.cpp new file mode 100644 index 0000000..df37046 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslAttributes.cpp @@ -0,0 +1,110 @@ +// +// Copyright (C) 2016 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 Google, Inc., 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. +// + +#include "hlslAttributes.h" +#include +#include + +namespace glslang { + // Map the given string to an attribute enum from TAttributeType, + // or EatNone if invalid. + TAttributeType TAttributeMap::attributeFromName(const TString& name) + { + // These are case insensitive. + TString lowername(name); + std::transform(lowername.begin(), lowername.end(), lowername.begin(), ::tolower); + + if (lowername == "allow_uav_condition") + return EatAllow_uav_condition; + else if (lowername == "branch") + return EatBranch; + else if (lowername == "call") + return EatCall; + else if (lowername == "domain") + return EatDomain; + else if (lowername == "earlydepthstencil") + return EatEarlyDepthStencil; + else if (lowername == "fastopt") + return EatFastOpt; + else if (lowername == "flatten") + return EatFlatten; + else if (lowername == "forcecase") + return EatForceCase; + else if (lowername == "instance") + return EatInstance; + else if (lowername == "maxtessfactor") + return EatMaxTessFactor; + else if (lowername == "maxvertexcount") + return EatMaxVertexCount; + else if (lowername == "numthreads") + return EatNumThreads; + else if (lowername == "outputcontrolpoints") + return EatOutputControlPoints; + else if (lowername == "outputtopology") + return EatOutputTopology; + else if (lowername == "partitioning") + return EatPartitioning; + else if (lowername == "patchconstantfunc") + return EatPatchConstantFunc; + else if (lowername == "unroll") + return EatUnroll; + 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) + { + if (name == nullptr) + return EatNone; + + const TAttributeType attr = attributeFromName(*name); + + if (attr != EatNone) + attributes[attr] = value; + + return attr; + } + + // Look up entry (const version), and return aggregate node. This cannot change the map. + const TIntermAggregate* TAttributeMap::operator[](TAttributeType attr) const + { + const auto entry = attributes.find(attr); + + return (entry == attributes.end()) ? nullptr : entry->second; + } + +} // end namespace glslang diff --git a/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslAttributes.h b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslAttributes.h new file mode 100644 index 0000000..ad44d2a --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslAttributes.h @@ -0,0 +1,108 @@ +// +// Copyright (C) 2016 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 Google, Inc., 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. +// + +#ifndef HLSLATTRIBUTES_H_ +#define HLSLATTRIBUTES_H_ + +#include +#include +#include "hlslScanContext.h" +#include "../glslang/Include/Common.h" + +namespace glslang { + enum TAttributeType { + EatNone, + EatAllow_uav_condition, + EatBranch, + EatCall, + EatDomain, + EatEarlyDepthStencil, + EatFastOpt, + EatFlatten, + EatForceCase, + EatInstance, + EatMaxTessFactor, + EatNumThreads, + EatMaxVertexCount, + EatOutputControlPoints, + EatOutputTopology, + EatPartitioning, + EatPatchConstantFunc, + EatPatchSize, + EatUnroll, + }; +} + +namespace std { + // Allow use of TAttributeType enum in hash_map without calling code having to cast. + template <> struct hash { + std::size_t operator()(glslang::TAttributeType attr) const { + return std::hash()(int(attr)); + } + }; +} // end namespace std + +namespace glslang { + class TIntermAggregate; + + class TAttributeMap { + 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); + + // Const lookup: search for (but do not modify) the attribute in the map. + const TIntermAggregate* operator[](TAttributeType) const; + + protected: + // Find an attribute enum given its name. + static TAttributeType attributeFromName(const TString&); + + std::unordered_map attributes; + }; + + class TFunctionDeclarator { + public: + TFunctionDeclarator() : function(nullptr), body(nullptr) { } + TSourceLoc loc; + TFunction* function; + TAttributeMap attributes; + TVector* body; + }; + +} // end namespace glslang + + +#endif // HLSLATTRIBUTES_H_ diff --git a/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslGrammar.cpp b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslGrammar.cpp new file mode 100755 index 0000000..4f6f803 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslGrammar.cpp @@ -0,0 +1,3620 @@ +// +// Copyright (C) 2016 Google, Inc. +// Copyright (C) 2016 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 Google, Inc., 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. +// + +// +// This is a set of mutually recursive methods implementing the HLSL grammar. +// Generally, each returns +// - through an argument: a type specifically appropriate to which rule it +// recognized +// - through the return value: true/false to indicate whether or not it +// recognized its rule +// +// As much as possible, only grammar recognition should happen in this file, +// with all other work being farmed out to hlslParseHelper.cpp, which in turn +// will build the AST. +// +// The next token, yet to be "accepted" is always sitting in 'token'. +// When a method says it accepts a rule, that means all tokens involved +// in the rule will have been consumed, and none left in 'token'. +// + +#include "hlslTokens.h" +#include "hlslGrammar.h" +#include "hlslAttributes.h" + +namespace glslang { + +// Root entry point to this recursive decent parser. +// Return true if compilation unit was successfully accepted. +bool HlslGrammar::parse() +{ + advanceToken(); + return acceptCompilationUnit(); +} + +void HlslGrammar::expected(const char* syntax) +{ + parseContext.error(token.loc, "Expected", syntax, ""); +} + +void HlslGrammar::unimplemented(const char* error) +{ + parseContext.error(token.loc, "Unimplemented", error, ""); +} + +// IDENTIFIER +// THIS +// type that can be used as IDENTIFIER +// +// Only process the next token if it is an identifier. +// Return true if it was an identifier. +bool HlslGrammar::acceptIdentifier(HlslToken& idToken) +{ + // IDENTIFIER + if (peekTokenClass(EHTokIdentifier)) { + idToken = token; + advanceToken(); + return true; + } + + // THIS + // -> maps to the IDENTIFIER spelled with the internal special name for 'this' + if (peekTokenClass(EHTokThis)) { + idToken = token; + advanceToken(); + idToken.tokenClass = EHTokIdentifier; + idToken.string = NewPoolTString(intermediate.implicitThisName); + return true; + } + + // type that can be used as IDENTIFIER + + // Even though "sample", "bool", "float", etc keywords (for types, interpolation modifiers), + // they ARE still accepted as identifiers. This is not a dense space: e.g, "void" is not a + // 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: + return false; + } + + token.string = idString; + token.tokenClass = EHTokIdentifier; + idToken = token; + + advanceToken(); + + return true; +} + +// compilationUnit +// : list of externalDeclaration +// | SEMICOLONS +// +bool HlslGrammar::acceptCompilationUnit() +{ + TIntermNode* unitNode = nullptr; + + while (! peekTokenClass(EHTokNone)) { + // HLSL allows semicolons between global declarations, e.g, between functions. + if (acceptTokenClass(EHTokSemicolon)) + continue; + + // externalDeclaration + if (! acceptDeclaration(unitNode)) + return false; + } + + // set root of AST + if (unitNode && !unitNode->getAsAggregate()) + unitNode = intermediate.growAggregate(nullptr, unitNode); + intermediate.setTreeRoot(unitNode); + + return true; +} + +// sampler_state +// : LEFT_BRACE [sampler_state_assignment ... ] RIGHT_BRACE +// +// sampler_state_assignment +// : sampler_state_identifier EQUAL value SEMICOLON +// +// sampler_state_identifier +// : ADDRESSU +// | ADDRESSV +// | ADDRESSW +// | BORDERCOLOR +// | FILTER +// | MAXANISOTROPY +// | MAXLOD +// | MINLOD +// | MIPLODBIAS +// +bool HlslGrammar::acceptSamplerState() +{ + // TODO: this should be genericized to accept a list of valid tokens and + // return token/value pairs. Presently it is specific to texture values. + + if (! acceptTokenClass(EHTokLeftBrace)) + return true; + + parseContext.warn(token.loc, "unimplemented", "immediate sampler state", ""); + + do { + // read state name + HlslToken state; + if (! acceptIdentifier(state)) + break; // end of list + + // FXC accepts any case + TString stateName = *state.string; + std::transform(stateName.begin(), stateName.end(), stateName.begin(), ::tolower); + + if (! acceptTokenClass(EHTokAssign)) { + expected("assign"); + return false; + } + + if (stateName == "minlod" || stateName == "maxlod") { + if (! peekTokenClass(EHTokIntConstant)) { + expected("integer"); + return false; + } + + TIntermTyped* lod = nullptr; + if (! acceptLiteral(lod)) // should never fail, since we just looked for an integer + return false; + } else if (stateName == "maxanisotropy") { + if (! peekTokenClass(EHTokIntConstant)) { + expected("integer"); + return false; + } + + TIntermTyped* maxAnisotropy = nullptr; + if (! acceptLiteral(maxAnisotropy)) // should never fail, since we just looked for an integer + return false; + } else if (stateName == "filter") { + HlslToken filterMode; + if (! acceptIdentifier(filterMode)) { + expected("filter mode"); + return false; + } + } else if (stateName == "addressu" || stateName == "addressv" || stateName == "addressw") { + HlslToken addrMode; + if (! acceptIdentifier(addrMode)) { + expected("texture address mode"); + return false; + } + } else if (stateName == "miplodbias") { + TIntermTyped* lodBias = nullptr; + if (! acceptLiteral(lodBias)) { + expected("lod bias"); + return false; + } + } else if (stateName == "bordercolor") { + return false; + } else { + expected("texture state"); + return false; + } + + // SEMICOLON + if (! acceptTokenClass(EHTokSemicolon)) { + expected("semicolon"); + return false; + } + } while (true); + + if (! acceptTokenClass(EHTokRightBrace)) + return false; + + return true; +} + +// sampler_declaration_dx9 +// : SAMPLER identifier EQUAL sampler_type sampler_state +// +bool HlslGrammar::acceptSamplerDeclarationDX9(TType& /*type*/) +{ + if (! acceptTokenClass(EHTokSampler)) + return false; + + // TODO: remove this when DX9 style declarations are implemented. + unimplemented("Direct3D 9 sampler declaration"); + + // read sampler name + HlslToken name; + if (! acceptIdentifier(name)) { + expected("sampler name"); + return false; + } + + if (! acceptTokenClass(EHTokAssign)) { + expected("="); + return false; + } + + return false; +} + +// declaration +// : sampler_declaration_dx9 post_decls SEMICOLON +// | fully_specified_type declarator_list SEMICOLON +// | 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 +// +// declarator_list +// : declarator COMMA declarator COMMA declarator... // zero or more declarators +// +// declarator +// : identifier array_specifier post_decls +// | identifier array_specifier post_decls EQUAL assignment_expression +// | identifier function_parameters post_decls // function prototype +// +// Parsing has to go pretty far in to know whether it's a variable, prototype, or +// function definition, so the implementation below doesn't perfectly divide up the grammar +// as above. (The 'identifier' in the first item in init_declarator list is the +// same as 'identifier' for function declarations.) +// +// This can generate more than one subtree, one per initializer or a function body. +// All initializer subtrees are put in their own aggregate node, making one top-level +// node for all the initializers. Each function created is a top-level node to grow +// into the passed-in nodeList. +// +// If 'nodeList' is passed in as non-null, it must an aggregate to extend for +// each top-level node the declaration creates. Otherwise, if only one top-level +// node in generated here, that is want is returned in nodeList. +// +bool HlslGrammar::acceptDeclaration(TIntermNode*& nodeList) +{ + bool declarator_list = false; // true when processing comma separation + + // attributes + TFunctionDeclarator declarator; + acceptAttributes(declarator.attributes); + + // typedef + bool typedefDecl = acceptTokenClass(EHTokTypedef); + + TType declaredType; + + // DX9 sampler declaration use a different syntax + // DX9 shaders need to run through HLSL compiler (fxc) via a back compat mode, it isn't going to + // be possible to simultaneously compile D3D10+ style shaders and DX9 shaders. If we want to compile DX9 + // HLSL shaders, this will have to be a master level switch + // As such, the sampler keyword in D3D10+ turns into an automatic sampler type, and is commonly used + // For that reason, this line is commented out + // if (acceptSamplerDeclarationDX9(declaredType)) + // return true; + + // fully_specified_type + if (! acceptFullySpecifiedType(declaredType, nodeList)) + return false; + + // identifier + HlslToken idToken; + TIntermAggregate* initializers = nullptr; + while (acceptIdentifier(idToken)) { + 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); + + // function_parameters + declarator.function = new TFunction(fnName, declaredType); + if (!acceptFunctionParameters(*declarator.function)) { + expected("function parameter list"); + return false; + } + + // post_decls + acceptPostDecls(declarator.function->getWritableType().getQualifier()); + + // compound_statement (function body definition) or just a prototype? + declarator.loc = token.loc; + if (peekTokenClass(EHTokLeftBrace)) { + if (declarator_list) + parseContext.error(idToken.loc, "function body can't be in a declarator list", "{", ""); + if (typedefDecl) + parseContext.error(idToken.loc, "function body can't be in a typedef", "{", ""); + return acceptFunctionDefinition(declarator, nodeList, nullptr); + } else { + if (typedefDecl) + parseContext.error(idToken.loc, "function typedefs not implemented", "{", ""); + parseContext.handleFunctionDeclarator(declarator.loc, *declarator.function, true); + } + } else { + // A variable declaration. Fix the storage qualifier if it's a global. + if (declaredType.getQualifier().storage == EvqTemporary && parseContext.symbolTable.atGlobalLevel()) + declaredType.getQualifier().storage = EvqUniform; + + // We can handle multiple variables per type declaration, so + // the number of types can expand when arrayness is different. + TType variableType; + variableType.shallowCopy(declaredType); + + // recognize array_specifier + TArraySizes* arraySizes = nullptr; + acceptArraySpecifier(arraySizes); + + // Fix arrayness in the variableType + if (declaredType.isImplicitlySizedArray()) { + // Because "int[] a = int[2](...), b = int[3](...)" makes two arrays a and b + // of different sizes, for this case sharing the shallow copy of arrayness + // with the parseType oversubscribes it, so get a deep copy of the arrayness. + variableType.newArraySizes(declaredType.getArraySizes()); + } + if (arraySizes || variableType.isArray()) { + // In the most general case, arrayness is potentially coming both from the + // declared type and from the variable: "int[] a[];" or just one or the other. + // Merge it all to the variableType, so all arrayness is part of the variableType. + parseContext.arrayDimMerge(variableType, arraySizes); + } + + // samplers accept immediate sampler state + if (variableType.getBasicType() == EbtSampler) { + if (! acceptSamplerState()) + return false; + } + + // post_decls + acceptPostDecls(variableType.getQualifier()); + + // EQUAL assignment_expression + TIntermTyped* expressionNode = nullptr; + if (acceptTokenClass(EHTokAssign)) { + if (typedefDecl) + parseContext.error(idToken.loc, "can't have an initializer", "typedef", ""); + if (! acceptAssignmentExpression(expressionNode)) { + expected("initializer"); + return false; + } + } + + // TODO: things scoped within an annotation need their own name space; + // 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 { + 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); + } 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), + idToken.loc); + } + } + } + } + + if (acceptTokenClass(EHTokComma)) { + declarator_list = true; + continue; + } + }; + + // The top-level initializer node is a sequence. + if (initializers != nullptr) + initializers->setOperator(EOpSequence); + + // Add the initializers' aggregate to the nodeList we were handed. + if (nodeList) + nodeList = intermediate.growAggregate(nodeList, initializers); + else + nodeList = initializers; + + // SEMICOLON + if (! acceptTokenClass(EHTokSemicolon)) { + // This may have been a false detection of what appeared to be a declaration, but + // 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) + recedeToken(); + else + expected(";"); + return false; + } + + return true; +} + +// control_declaration +// : fully_specified_type identifier EQUAL expression +// +bool HlslGrammar::acceptControlDeclaration(TIntermNode*& node) +{ + node = nullptr; + + // fully_specified_type + TType type; + if (! acceptFullySpecifiedType(type)) + return false; + + // filter out type casts + if (peekTokenClass(EHTokLeftParen)) { + recedeToken(); + return false; + } + + // identifier + HlslToken idToken; + if (! acceptIdentifier(idToken)) { + expected("identifier"); + return false; + } + + // EQUAL + TIntermTyped* expressionNode = nullptr; + if (! acceptTokenClass(EHTokAssign)) { + expected("="); + return false; + } + + // expression + if (! acceptExpression(expressionNode)) { + expected("initializer"); + return false; + } + + node = parseContext.declareVariable(idToken.loc, *idToken.string, type, expressionNode); + + return true; +} + +// fully_specified_type +// : type_specifier +// | type_qualifier type_specifier +// +bool HlslGrammar::acceptFullySpecifiedType(TType& type) +{ + TIntermNode* nodeList = nullptr; + return acceptFullySpecifiedType(type, nodeList); +} +bool HlslGrammar::acceptFullySpecifiedType(TType& type, TIntermNode*& nodeList) +{ + // type_qualifier + TQualifier qualifier; + qualifier.clear(); + if (! acceptQualifier(qualifier)) + return false; + TSourceLoc loc = token.loc; + + // type_specifier + if (! acceptType(type, nodeList)) { + // If this is not a type, we may have inadvertently gone down a wrong path + // by parsing "sample", which can be treated like either an identifier or a + // qualifier. Back it out, if we did. + if (qualifier.sample) + recedeToken(); + + return false; + } + if (type.getBasicType() == EbtBlock) { + // 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)) + parseContext.declareBlock(loc, type); + } else { + // Some qualifiers are set when parsing the type. Merge those with + // whatever comes from acceptQualifier. + assert(qualifier.layoutFormat == ElfNone); + + 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 || + type.getQualifier().storage == EvqBuffer) { + qualifier.storage = type.getQualifier().storage; + qualifier.readonly = type.getQualifier().readonly; + } + + type.getQualifier() = qualifier; + } + + return true; +} + +// type_qualifier +// : qualifier qualifier ... +// +// Zero or more of these, so this can't return false. +// +bool HlslGrammar::acceptQualifier(TQualifier& qualifier) +{ + do { + switch (peek()) { + case EHTokStatic: + qualifier.storage = parseContext.symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary; + break; + case EHTokExtern: + // TODO: no meaning in glslang? + break; + case EHTokShared: + // TODO: hint + break; + case EHTokGroupShared: + qualifier.storage = EvqShared; + break; + case EHTokUniform: + qualifier.storage = EvqUniform; + break; + case EHTokConst: + qualifier.storage = EvqConst; + break; + case EHTokVolatile: + qualifier.volatil = true; + break; + case EHTokLinear: + qualifier.smooth = true; + break; + case EHTokCentroid: + qualifier.centroid = true; + break; + case EHTokNointerpolation: + qualifier.flat = true; + break; + case EHTokNoperspective: + qualifier.nopersp = true; + break; + case EHTokSample: + qualifier.sample = true; + break; + case EHTokRowMajor: + qualifier.layoutMatrix = ElmColumnMajor; + break; + case EHTokColumnMajor: + qualifier.layoutMatrix = ElmRowMajor; + break; + case EHTokPrecise: + qualifier.noContraction = true; + break; + case EHTokIn: + qualifier.storage = EvqIn; + break; + case EHTokOut: + qualifier.storage = EvqOut; + break; + case EHTokInOut: + qualifier.storage = EvqInOut; + break; + case EHTokLayout: + if (! acceptLayoutQualifierList(qualifier)) + return false; + continue; + case EHTokGloballyCoherent: + qualifier.coherent = true; + break; + case EHTokInline: + // TODO: map this to SPIR-V function control + break; + + // GS geometries: these are specified on stage input variables, and are an error (not verified here) + // for output variables. + case EHTokPoint: + qualifier.storage = EvqIn; + if (!parseContext.handleInputGeometry(token.loc, ElgPoints)) + return false; + break; + case EHTokLine: + qualifier.storage = EvqIn; + if (!parseContext.handleInputGeometry(token.loc, ElgLines)) + return false; + break; + case EHTokTriangle: + qualifier.storage = EvqIn; + if (!parseContext.handleInputGeometry(token.loc, ElgTriangles)) + return false; + break; + case EHTokLineAdj: + qualifier.storage = EvqIn; + if (!parseContext.handleInputGeometry(token.loc, ElgLinesAdjacency)) + return false; + break; + case EHTokTriangleAdj: + qualifier.storage = EvqIn; + if (!parseContext.handleInputGeometry(token.loc, ElgTrianglesAdjacency)) + return false; + break; + + default: + return true; + } + advanceToken(); + } while (true); +} + +// layout_qualifier_list +// : LAYOUT LEFT_PAREN layout_qualifier COMMA layout_qualifier ... RIGHT_PAREN +// +// layout_qualifier +// : identifier +// | identifier EQUAL expression +// +// Zero or more of these, so this can't return false. +// +bool HlslGrammar::acceptLayoutQualifierList(TQualifier& qualifier) +{ + if (! acceptTokenClass(EHTokLayout)) + return false; + + // LEFT_PAREN + if (! acceptTokenClass(EHTokLeftParen)) + return false; + + do { + // identifier + HlslToken idToken; + if (! acceptIdentifier(idToken)) + break; + + // EQUAL expression + if (acceptTokenClass(EHTokAssign)) { + TIntermTyped* expr; + if (! acceptConditionalExpression(expr)) { + expected("expression"); + return false; + } + parseContext.setLayoutQualifier(idToken.loc, qualifier, *idToken.string, expr); + } else + parseContext.setLayoutQualifier(idToken.loc, qualifier, *idToken.string); + + // COMMA + if (! acceptTokenClass(EHTokComma)) + break; + } while (true); + + // RIGHT_PAREN + if (! acceptTokenClass(EHTokRightParen)) { + expected(")"); + return false; + } + + return true; +} + +// template_type +// : FLOAT +// | DOUBLE +// | INT +// | DWORD +// | UINT +// | BOOL +// +bool HlslGrammar::acceptTemplateVecMatBasicType(TBasicType& basicType) +{ + switch (peek()) { + case EHTokFloat: + basicType = EbtFloat; + break; + case EHTokDouble: + basicType = EbtDouble; + break; + case EHTokInt: + case EHTokDword: + basicType = EbtInt; + break; + case EHTokUint: + basicType = EbtUint; + break; + case EHTokBool: + basicType = EbtBool; + break; + default: + return false; + } + + advanceToken(); + + return true; +} + +// vector_template_type +// : VECTOR +// | VECTOR LEFT_ANGLE template_type COMMA integer_literal RIGHT_ANGLE +// +bool HlslGrammar::acceptVectorTemplateType(TType& type) +{ + if (! acceptTokenClass(EHTokVector)) + return false; + + if (! acceptTokenClass(EHTokLeftAngle)) { + // in HLSL, 'vector' alone means float4. + new(&type) TType(EbtFloat, EvqTemporary, 4); + return true; + } + + TBasicType basicType; + if (! acceptTemplateVecMatBasicType(basicType)) { + expected("scalar type"); + return false; + } + + // COMMA + if (! acceptTokenClass(EHTokComma)) { + expected(","); + return false; + } + + // integer + if (! peekTokenClass(EHTokIntConstant)) { + expected("literal integer"); + return false; + } + + TIntermTyped* vecSize; + if (! acceptLiteral(vecSize)) + return false; + + const int vecSizeI = vecSize->getAsConstantUnion()->getConstArray()[0].getIConst(); + + new(&type) TType(basicType, EvqTemporary, vecSizeI); + + if (vecSizeI == 1) + type.makeVector(); + + if (!acceptTokenClass(EHTokRightAngle)) { + expected("right angle bracket"); + return false; + } + + return true; +} + +// matrix_template_type +// : MATRIX +// | MATRIX LEFT_ANGLE template_type COMMA integer_literal COMMA integer_literal RIGHT_ANGLE +// +bool HlslGrammar::acceptMatrixTemplateType(TType& type) +{ + if (! acceptTokenClass(EHTokMatrix)) + return false; + + if (! acceptTokenClass(EHTokLeftAngle)) { + // in HLSL, 'matrix' alone means float4x4. + new(&type) TType(EbtFloat, EvqTemporary, 0, 4, 4); + return true; + } + + TBasicType basicType; + if (! acceptTemplateVecMatBasicType(basicType)) { + expected("scalar type"); + return false; + } + + // COMMA + if (! acceptTokenClass(EHTokComma)) { + expected(","); + return false; + } + + // integer rows + if (! peekTokenClass(EHTokIntConstant)) { + expected("literal integer"); + return false; + } + + TIntermTyped* rows; + if (! acceptLiteral(rows)) + return false; + + // COMMA + if (! acceptTokenClass(EHTokComma)) { + expected(","); + return false; + } + + // integer cols + if (! peekTokenClass(EHTokIntConstant)) { + expected("literal integer"); + return false; + } + + TIntermTyped* cols; + if (! acceptLiteral(cols)) + return false; + + new(&type) TType(basicType, EvqTemporary, 0, + rows->getAsConstantUnion()->getConstArray()[0].getIConst(), + cols->getAsConstantUnion()->getConstArray()[0].getIConst()); + + if (!acceptTokenClass(EHTokRightAngle)) { + expected("right angle bracket"); + return false; + } + + return true; +} + +// layout_geometry +// : LINESTREAM +// | POINTSTREAM +// | TRIANGLESTREAM +// +bool HlslGrammar::acceptOutputPrimitiveGeometry(TLayoutGeometry& geometry) +{ + // read geometry type + const EHlslTokenClass geometryType = peek(); + + switch (geometryType) { + case EHTokPointStream: geometry = ElgPoints; break; + case EHTokLineStream: geometry = ElgLineStrip; break; + case EHTokTriangleStream: geometry = ElgTriangleStrip; break; + default: + return false; // not a layout geometry + } + + advanceToken(); // consume the layout keyword + return true; +} + +// tessellation_decl_type +// : INPUTPATCH +// | OUTPUTPATCH +// +bool HlslGrammar::acceptTessellationDeclType() +{ + // read geometry type + const EHlslTokenClass tessType = peek(); + + switch (tessType) { + case EHTokInputPatch: break; + case EHTokOutputPatch: break; + default: + return false; // not a tessellation decl + } + + advanceToken(); // consume the keyword + return true; +} + +// tessellation_patch_template_type +// : tessellation_decl_type LEFT_ANGLE type comma integer_literal RIGHT_ANGLE +// +bool HlslGrammar::acceptTessellationPatchTemplateType(TType& type) +{ + if (! acceptTessellationDeclType()) + return false; + + if (! acceptTokenClass(EHTokLeftAngle)) + return false; + + if (! acceptType(type)) { + expected("tessellation patch type"); + return false; + } + + if (! acceptTokenClass(EHTokComma)) + return false; + + // integer size + if (! peekTokenClass(EHTokIntConstant)) { + expected("literal integer"); + return false; + } + + TIntermTyped* size; + if (! acceptLiteral(size)) + return false; + + TArraySizes* arraySizes = new TArraySizes; + arraySizes->addInnerSize(size->getAsConstantUnion()->getConstArray()[0].getIConst()); + type.newArraySizes(*arraySizes); + + if (! acceptTokenClass(EHTokRightAngle)) { + expected("right angle bracket"); + return false; + } + + return true; +} + +// stream_out_template_type +// : output_primitive_geometry_type LEFT_ANGLE type RIGHT_ANGLE +// +bool HlslGrammar::acceptStreamOutTemplateType(TType& type, TLayoutGeometry& geometry) +{ + geometry = ElgNone; + + if (! acceptOutputPrimitiveGeometry(geometry)) + return false; + + if (! acceptTokenClass(EHTokLeftAngle)) + return false; + + if (! acceptType(type)) { + expected("stream output type"); + return false; + } + + type.getQualifier().storage = EvqVaryingOut; + + if (! acceptTokenClass(EHTokRightAngle)) { + expected("right angle bracket"); + return false; + } + + return true; +} + +// annotations +// : LEFT_ANGLE declaration SEMI_COLON ... declaration SEMICOLON RIGHT_ANGLE +// +bool HlslGrammar::acceptAnnotations(TQualifier&) +{ + if (! acceptTokenClass(EHTokLeftAngle)) + return false; + + // note that we are nesting a name space + parseContext.nestAnnotations(); + + // declaration SEMI_COLON ... declaration SEMICOLON RIGHT_ANGLE + do { + // eat any extra SEMI_COLON; don't know if the grammar calls for this or not + while (acceptTokenClass(EHTokSemicolon)) + ; + + if (acceptTokenClass(EHTokRightAngle)) + break; + + // declaration + TIntermNode* node = nullptr; + if (! acceptDeclaration(node)) { + expected("declaration in annotation"); + return false; + } + } while (true); + + parseContext.unnestAnnotations(); + return true; +} + +// sampler_type +// : SAMPLER +// | SAMPLER1D +// | SAMPLER2D +// | SAMPLER3D +// | SAMPLERCUBE +// | SAMPLERSTATE +// | SAMPLERCOMPARISONSTATE +bool HlslGrammar::acceptSamplerType(TType& type) +{ + // read sampler type + const EHlslTokenClass samplerType = peek(); + + // TODO: for DX9 + // TSamplerDim dim = EsdNone; + + bool isShadow = false; + + switch (samplerType) { + case EHTokSampler: break; + case EHTokSampler1d: /*dim = Esd1D*/; break; + case EHTokSampler2d: /*dim = Esd2D*/; break; + case EHTokSampler3d: /*dim = Esd3D*/; break; + case EHTokSamplerCube: /*dim = EsdCube*/; break; + case EHTokSamplerState: break; + case EHTokSamplerComparisonState: isShadow = true; break; + default: + return false; // not a sampler declaration + } + + advanceToken(); // consume the sampler type keyword + + TArraySizes* arraySizes = nullptr; // TODO: array + + TSampler sampler; + sampler.setPureSampler(isShadow); + + type.shallowCopy(TType(sampler, EvqUniform, arraySizes)); + + return true; +} + +// texture_type +// | BUFFER +// | TEXTURE1D +// | TEXTURE1DARRAY +// | TEXTURE2D +// | TEXTURE2DARRAY +// | TEXTURE3D +// | TEXTURECUBE +// | TEXTURECUBEARRAY +// | TEXTURE2DMS +// | TEXTURE2DMSARRAY +// | RWBUFFER +// | RWTEXTURE1D +// | RWTEXTURE1DARRAY +// | RWTEXTURE2D +// | RWTEXTURE2DARRAY +// | RWTEXTURE3D + +bool HlslGrammar::acceptTextureType(TType& type) +{ + const EHlslTokenClass textureType = peek(); + + TSamplerDim dim = EsdNone; + bool array = false; + bool ms = false; + bool image = false; + bool readonly = false; + + 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; + default: + return false; // not a texture declaration + } + + advanceToken(); // consume the texture object keyword + + TType txType(EbtFloat, EvqUniform, 4); // default type is float4 + + TIntermTyped* msCount = nullptr; + + // texture type: required for multisample types and RWBuffer/RWTextures! + if (acceptTokenClass(EHTokLeftAngle)) { + if (! acceptType(txType)) { + expected("scalar or vector type"); + return false; + } + + const TBasicType basicRetType = txType.getBasicType() ; + + if (basicRetType != EbtFloat && basicRetType != EbtUint && basicRetType != EbtInt) { + unimplemented("basic type in texture"); + return false; + } + + // Buffers can handle small mats if they fit in 4 components + if (dim == EsdBuffer && txType.isMatrix()) { + if ((txType.getMatrixCols() * txType.getMatrixRows()) > 4) { + expected("components < 4 in matrix buffer type"); + return false; + } + + // TODO: except we don't handle it yet... + unimplemented("matrix type in buffer"); + return false; + } + + if (!txType.isScalar() && !txType.isVector()) { + expected("scalar or vector type"); + return false; + } + + if (ms && acceptTokenClass(EHTokComma)) { + // read sample count for multisample types, if given + if (! peekTokenClass(EHTokIntConstant)) { + expected("multisample count"); + return false; + } + + if (! acceptLiteral(msCount)) // should never fail, since we just found an integer + return false; + } + + if (! acceptTokenClass(EHTokRightAngle)) { + expected("right angle bracket"); + return false; + } + } else if (ms) { + expected("texture type for multisample"); + return false; + } else if (image && !readonly) { + expected("type for RWTexture/RWBuffer"); + return false; + } + + TArraySizes* arraySizes = nullptr; + const bool shadow = false; // declared on the sampler + + TSampler sampler; + TLayoutFormat format = ElfNone; + + // Buffer, RWBuffer and RWTexture (images) require a TLayoutFormat. We handle only a limit set. + if (image || dim == EsdBuffer) + format = parseContext.getLayoutFromTxType(token.loc, txType); + + // 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); + } else { + sampler.setTexture(txType.getBasicType(), dim, array, shadow, ms); + } + } + + // Remember the declared vector size. + sampler.vectorSize = txType.getVectorSize(); + + type.shallowCopy(TType(sampler, EvqUniform, arraySizes)); + + type.getQualifier().layoutFormat = format; + type.getQualifier().readonly = readonly; + + return true; +} + +// If token is for a type, update 'type' with the type information, +// and return true and advance. +// Otherwise, return false, and don't advance +bool HlslGrammar::acceptType(TType& type) +{ + TIntermNode* nodeList = nullptr; + return acceptType(type, nodeList); +} +bool HlslGrammar::acceptType(TType& type, TIntermNode*& nodeList) +{ + // Basic types for min* types, broken out here in case of future + // changes, e.g, to use native halfs. + static const TBasicType min16float_bt = EbtFloat; + static const TBasicType min10float_bt = EbtFloat; + static const TBasicType half_bt = EbtFloat; + static const TBasicType min16int_bt = EbtInt; + static const TBasicType min12int_bt = EbtInt; + static const TBasicType min16uint_bt = EbtUint; + + switch (peek()) { + case EHTokVector: + return acceptVectorTemplateType(type); + break; + + case EHTokMatrix: + return acceptMatrixTemplateType(type); + break; + + case EHTokPointStream: // fall through + case EHTokLineStream: // ... + case EHTokTriangleStream: // ... + { + TLayoutGeometry geometry; + if (! acceptStreamOutTemplateType(type, geometry)) + return false; + + if (! parseContext.handleOutputGeometry(token.loc, geometry)) + return false; + + return true; + } + + case EHTokInputPatch: // fall through + case EHTokOutputPatch: // ... + { + if (! acceptTessellationPatchTemplateType(type)) + return false; + + return true; + } + + case EHTokSampler: // fall through + case EHTokSampler1d: // ... + case EHTokSampler2d: // ... + case EHTokSampler3d: // ... + case EHTokSamplerCube: // ... + case EHTokSamplerState: // ... + case EHTokSamplerComparisonState: // ... + return acceptSamplerType(type); + break; + + case EHTokBuffer: // fall through + case EHTokTexture1d: // ... + case EHTokTexture1darray: // ... + case EHTokTexture2d: // ... + case EHTokTexture2darray: // ... + case EHTokTexture3d: // ... + case EHTokTextureCube: // ... + case EHTokTextureCubearray: // ... + case EHTokTexture2DMS: // ... + case EHTokTexture2DMSarray: // ... + case EHTokRWTexture1d: // ... + case EHTokRWTexture1darray: // ... + case EHTokRWTexture2d: // ... + case EHTokRWTexture2darray: // ... + case EHTokRWTexture3d: // ... + case EHTokRWBuffer: // ... + return acceptTextureType(type); + break; + + case EHTokAppendStructuredBuffer: + case EHTokByteAddressBuffer: + case EHTokConsumeStructuredBuffer: + case EHTokRWByteAddressBuffer: + case EHTokRWStructuredBuffer: + case EHTokStructuredBuffer: + return acceptStructBufferType(type); + break; + + case EHTokClass: + case EHTokStruct: + case EHTokCBuffer: + case EHTokTBuffer: + return acceptStruct(type, nodeList); + + case EHTokIdentifier: + // An identifier could be for a user-defined type. + // Note we cache the symbol table lookup, to save for a later rule + // when this is not a type. + if (parseContext.lookupUserType(*token.string, type) != nullptr) { + advanceToken(); + return true; + } else + return false; + + case EHTokVoid: + new(&type) TType(EbtVoid); + break; + + case EHTokString: + new(&type) TType(EbtString); + break; + + case EHTokFloat: + new(&type) TType(EbtFloat); + break; + case EHTokFloat1: + new(&type) TType(EbtFloat); + type.makeVector(); + break; + case EHTokFloat2: + new(&type) TType(EbtFloat, EvqTemporary, 2); + break; + case EHTokFloat3: + new(&type) TType(EbtFloat, EvqTemporary, 3); + break; + case EHTokFloat4: + new(&type) TType(EbtFloat, EvqTemporary, 4); + break; + + case EHTokDouble: + new(&type) TType(EbtDouble); + break; + case EHTokDouble1: + new(&type) TType(EbtDouble); + type.makeVector(); + break; + case EHTokDouble2: + new(&type) TType(EbtDouble, EvqTemporary, 2); + break; + case EHTokDouble3: + new(&type) TType(EbtDouble, EvqTemporary, 3); + break; + case EHTokDouble4: + new(&type) TType(EbtDouble, EvqTemporary, 4); + break; + + case EHTokInt: + case EHTokDword: + new(&type) TType(EbtInt); + break; + case EHTokInt1: + new(&type) TType(EbtInt); + type.makeVector(); + break; + case EHTokInt2: + new(&type) TType(EbtInt, EvqTemporary, 2); + break; + case EHTokInt3: + new(&type) TType(EbtInt, EvqTemporary, 3); + break; + case EHTokInt4: + new(&type) TType(EbtInt, EvqTemporary, 4); + break; + + case EHTokUint: + new(&type) TType(EbtUint); + break; + case EHTokUint1: + new(&type) TType(EbtUint); + type.makeVector(); + break; + case EHTokUint2: + new(&type) TType(EbtUint, EvqTemporary, 2); + break; + case EHTokUint3: + new(&type) TType(EbtUint, EvqTemporary, 3); + break; + case EHTokUint4: + new(&type) TType(EbtUint, EvqTemporary, 4); + break; + + case EHTokBool: + new(&type) TType(EbtBool); + break; + case EHTokBool1: + new(&type) TType(EbtBool); + type.makeVector(); + break; + case EHTokBool2: + new(&type) TType(EbtBool, EvqTemporary, 2); + break; + case EHTokBool3: + new(&type) TType(EbtBool, EvqTemporary, 3); + break; + case EHTokBool4: + new(&type) TType(EbtBool, EvqTemporary, 4); + break; + + case EHTokHalf: + new(&type) TType(half_bt, EvqTemporary, EpqMedium); + break; + case EHTokHalf1: + new(&type) TType(half_bt, EvqTemporary, EpqMedium); + type.makeVector(); + break; + case EHTokHalf2: + new(&type) TType(half_bt, EvqTemporary, EpqMedium, 2); + break; + case EHTokHalf3: + new(&type) TType(half_bt, EvqTemporary, EpqMedium, 3); + break; + case EHTokHalf4: + new(&type) TType(half_bt, EvqTemporary, EpqMedium, 4); + break; + + case EHTokMin16float: + new(&type) TType(min16float_bt, EvqTemporary, EpqMedium); + break; + case EHTokMin16float1: + new(&type) TType(min16float_bt, EvqTemporary, EpqMedium); + type.makeVector(); + break; + case EHTokMin16float2: + new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 2); + break; + case EHTokMin16float3: + new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 3); + break; + case EHTokMin16float4: + new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 4); + break; + + case EHTokMin10float: + new(&type) TType(min10float_bt, EvqTemporary, EpqMedium); + break; + case EHTokMin10float1: + new(&type) TType(min10float_bt, EvqTemporary, EpqMedium); + type.makeVector(); + break; + case EHTokMin10float2: + new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 2); + break; + case EHTokMin10float3: + new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 3); + break; + case EHTokMin10float4: + new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 4); + break; + + case EHTokMin16int: + new(&type) TType(min16int_bt, EvqTemporary, EpqMedium); + break; + case EHTokMin16int1: + new(&type) TType(min16int_bt, EvqTemporary, EpqMedium); + type.makeVector(); + break; + case EHTokMin16int2: + new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 2); + break; + case EHTokMin16int3: + new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 3); + break; + case EHTokMin16int4: + new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 4); + break; + + case EHTokMin12int: + new(&type) TType(min12int_bt, EvqTemporary, EpqMedium); + break; + case EHTokMin12int1: + new(&type) TType(min12int_bt, EvqTemporary, EpqMedium); + type.makeVector(); + break; + case EHTokMin12int2: + new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 2); + break; + case EHTokMin12int3: + new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 3); + break; + case EHTokMin12int4: + new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 4); + break; + + case EHTokMin16uint: + new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium); + break; + case EHTokMin16uint1: + new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium); + type.makeVector(); + break; + case EHTokMin16uint2: + new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 2); + break; + case EHTokMin16uint3: + new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 3); + break; + case EHTokMin16uint4: + new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 4); + break; + + case EHTokInt1x1: + new(&type) TType(EbtInt, EvqTemporary, 0, 1, 1); + break; + case EHTokInt1x2: + new(&type) TType(EbtInt, EvqTemporary, 0, 1, 2); + break; + case EHTokInt1x3: + new(&type) TType(EbtInt, EvqTemporary, 0, 1, 3); + break; + case EHTokInt1x4: + new(&type) TType(EbtInt, EvqTemporary, 0, 1, 4); + break; + case EHTokInt2x1: + new(&type) TType(EbtInt, EvqTemporary, 0, 2, 1); + break; + case EHTokInt2x2: + new(&type) TType(EbtInt, EvqTemporary, 0, 2, 2); + break; + case EHTokInt2x3: + new(&type) TType(EbtInt, EvqTemporary, 0, 2, 3); + break; + case EHTokInt2x4: + new(&type) TType(EbtInt, EvqTemporary, 0, 2, 4); + break; + case EHTokInt3x1: + new(&type) TType(EbtInt, EvqTemporary, 0, 3, 1); + break; + case EHTokInt3x2: + new(&type) TType(EbtInt, EvqTemporary, 0, 3, 2); + break; + case EHTokInt3x3: + new(&type) TType(EbtInt, EvqTemporary, 0, 3, 3); + break; + case EHTokInt3x4: + new(&type) TType(EbtInt, EvqTemporary, 0, 3, 4); + break; + case EHTokInt4x1: + new(&type) TType(EbtInt, EvqTemporary, 0, 4, 1); + break; + case EHTokInt4x2: + new(&type) TType(EbtInt, EvqTemporary, 0, 4, 2); + break; + case EHTokInt4x3: + new(&type) TType(EbtInt, EvqTemporary, 0, 4, 3); + break; + case EHTokInt4x4: + new(&type) TType(EbtInt, EvqTemporary, 0, 4, 4); + break; + + case EHTokUint1x1: + new(&type) TType(EbtUint, EvqTemporary, 0, 1, 1); + break; + case EHTokUint1x2: + new(&type) TType(EbtUint, EvqTemporary, 0, 1, 2); + break; + case EHTokUint1x3: + new(&type) TType(EbtUint, EvqTemporary, 0, 1, 3); + break; + case EHTokUint1x4: + new(&type) TType(EbtUint, EvqTemporary, 0, 1, 4); + break; + case EHTokUint2x1: + new(&type) TType(EbtUint, EvqTemporary, 0, 2, 1); + break; + case EHTokUint2x2: + new(&type) TType(EbtUint, EvqTemporary, 0, 2, 2); + break; + case EHTokUint2x3: + new(&type) TType(EbtUint, EvqTemporary, 0, 2, 3); + break; + case EHTokUint2x4: + new(&type) TType(EbtUint, EvqTemporary, 0, 2, 4); + break; + case EHTokUint3x1: + new(&type) TType(EbtUint, EvqTemporary, 0, 3, 1); + break; + case EHTokUint3x2: + new(&type) TType(EbtUint, EvqTemporary, 0, 3, 2); + break; + case EHTokUint3x3: + new(&type) TType(EbtUint, EvqTemporary, 0, 3, 3); + break; + case EHTokUint3x4: + new(&type) TType(EbtUint, EvqTemporary, 0, 3, 4); + break; + case EHTokUint4x1: + new(&type) TType(EbtUint, EvqTemporary, 0, 4, 1); + break; + case EHTokUint4x2: + new(&type) TType(EbtUint, EvqTemporary, 0, 4, 2); + break; + case EHTokUint4x3: + new(&type) TType(EbtUint, EvqTemporary, 0, 4, 3); + break; + case EHTokUint4x4: + new(&type) TType(EbtUint, EvqTemporary, 0, 4, 4); + break; + + case EHTokBool1x1: + new(&type) TType(EbtBool, EvqTemporary, 0, 1, 1); + break; + case EHTokBool1x2: + new(&type) TType(EbtBool, EvqTemporary, 0, 1, 2); + break; + case EHTokBool1x3: + new(&type) TType(EbtBool, EvqTemporary, 0, 1, 3); + break; + case EHTokBool1x4: + new(&type) TType(EbtBool, EvqTemporary, 0, 1, 4); + break; + case EHTokBool2x1: + new(&type) TType(EbtBool, EvqTemporary, 0, 2, 1); + break; + case EHTokBool2x2: + new(&type) TType(EbtBool, EvqTemporary, 0, 2, 2); + break; + case EHTokBool2x3: + new(&type) TType(EbtBool, EvqTemporary, 0, 2, 3); + break; + case EHTokBool2x4: + new(&type) TType(EbtBool, EvqTemporary, 0, 2, 4); + break; + case EHTokBool3x1: + new(&type) TType(EbtBool, EvqTemporary, 0, 3, 1); + break; + case EHTokBool3x2: + new(&type) TType(EbtBool, EvqTemporary, 0, 3, 2); + break; + case EHTokBool3x3: + new(&type) TType(EbtBool, EvqTemporary, 0, 3, 3); + break; + case EHTokBool3x4: + new(&type) TType(EbtBool, EvqTemporary, 0, 3, 4); + break; + case EHTokBool4x1: + new(&type) TType(EbtBool, EvqTemporary, 0, 4, 1); + break; + case EHTokBool4x2: + new(&type) TType(EbtBool, EvqTemporary, 0, 4, 2); + break; + case EHTokBool4x3: + new(&type) TType(EbtBool, EvqTemporary, 0, 4, 3); + break; + case EHTokBool4x4: + new(&type) TType(EbtBool, EvqTemporary, 0, 4, 4); + break; + + case EHTokFloat1x1: + new(&type) TType(EbtFloat, EvqTemporary, 0, 1, 1); + break; + case EHTokFloat1x2: + new(&type) TType(EbtFloat, EvqTemporary, 0, 1, 2); + break; + case EHTokFloat1x3: + new(&type) TType(EbtFloat, EvqTemporary, 0, 1, 3); + break; + case EHTokFloat1x4: + new(&type) TType(EbtFloat, EvqTemporary, 0, 1, 4); + break; + case EHTokFloat2x1: + new(&type) TType(EbtFloat, EvqTemporary, 0, 2, 1); + break; + case EHTokFloat2x2: + new(&type) TType(EbtFloat, EvqTemporary, 0, 2, 2); + break; + case EHTokFloat2x3: + new(&type) TType(EbtFloat, EvqTemporary, 0, 2, 3); + break; + case EHTokFloat2x4: + new(&type) TType(EbtFloat, EvqTemporary, 0, 2, 4); + break; + case EHTokFloat3x1: + new(&type) TType(EbtFloat, EvqTemporary, 0, 3, 1); + break; + case EHTokFloat3x2: + new(&type) TType(EbtFloat, EvqTemporary, 0, 3, 2); + break; + case EHTokFloat3x3: + new(&type) TType(EbtFloat, EvqTemporary, 0, 3, 3); + break; + case EHTokFloat3x4: + new(&type) TType(EbtFloat, EvqTemporary, 0, 3, 4); + break; + case EHTokFloat4x1: + new(&type) TType(EbtFloat, EvqTemporary, 0, 4, 1); + break; + case EHTokFloat4x2: + new(&type) TType(EbtFloat, EvqTemporary, 0, 4, 2); + break; + case EHTokFloat4x3: + new(&type) TType(EbtFloat, EvqTemporary, 0, 4, 3); + break; + case EHTokFloat4x4: + new(&type) TType(EbtFloat, EvqTemporary, 0, 4, 4); + break; + + case EHTokDouble1x1: + new(&type) TType(EbtDouble, EvqTemporary, 0, 1, 1); + break; + case EHTokDouble1x2: + new(&type) TType(EbtDouble, EvqTemporary, 0, 1, 2); + break; + case EHTokDouble1x3: + new(&type) TType(EbtDouble, EvqTemporary, 0, 1, 3); + break; + case EHTokDouble1x4: + new(&type) TType(EbtDouble, EvqTemporary, 0, 1, 4); + break; + case EHTokDouble2x1: + new(&type) TType(EbtDouble, EvqTemporary, 0, 2, 1); + break; + case EHTokDouble2x2: + new(&type) TType(EbtDouble, EvqTemporary, 0, 2, 2); + break; + case EHTokDouble2x3: + new(&type) TType(EbtDouble, EvqTemporary, 0, 2, 3); + break; + case EHTokDouble2x4: + new(&type) TType(EbtDouble, EvqTemporary, 0, 2, 4); + break; + case EHTokDouble3x1: + new(&type) TType(EbtDouble, EvqTemporary, 0, 3, 1); + break; + case EHTokDouble3x2: + new(&type) TType(EbtDouble, EvqTemporary, 0, 3, 2); + break; + case EHTokDouble3x3: + new(&type) TType(EbtDouble, EvqTemporary, 0, 3, 3); + break; + case EHTokDouble3x4: + new(&type) TType(EbtDouble, EvqTemporary, 0, 3, 4); + break; + case EHTokDouble4x1: + new(&type) TType(EbtDouble, EvqTemporary, 0, 4, 1); + break; + case EHTokDouble4x2: + new(&type) TType(EbtDouble, EvqTemporary, 0, 4, 2); + break; + case EHTokDouble4x3: + new(&type) TType(EbtDouble, EvqTemporary, 0, 4, 3); + break; + case EHTokDouble4x4: + new(&type) TType(EbtDouble, EvqTemporary, 0, 4, 4); + break; + + default: + return false; + } + + advanceToken(); + + return true; +} + +// struct +// : struct_type IDENTIFIER post_decls LEFT_BRACE struct_declaration_list RIGHT_BRACE +// | struct_type post_decls LEFT_BRACE struct_declaration_list RIGHT_BRACE +// | struct_type IDENTIFIER // use of previously declared struct type +// +// struct_type +// : STRUCT +// | CLASS +// | CBUFFER +// | TBUFFER +// +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; + + // CBUFFER + if (acceptTokenClass(EHTokCBuffer)) + storageQualifier = EvqUniform; + // TBUFFER + else if (acceptTokenClass(EHTokTBuffer)) + storageQualifier = EvqBuffer; + // CLASS + // STRUCT + else if (! acceptTokenClass(EHTokClass) && ! acceptTokenClass(EHTokStruct)) + return false; + + // IDENTIFIER + TString structName = ""; + if (peekTokenClass(EHTokIdentifier)) { + structName = *token.string; + advanceToken(); + } + + // post_decls + TQualifier postDeclQualifier; + postDeclQualifier.clear(); + bool postDeclsFound = acceptPostDecls(postDeclQualifier); + + // LEFT_BRACE, or + // struct_type IDENTIFIER + if (! acceptTokenClass(EHTokLeftBrace)) { + if (structName.size() > 0 && !postDeclsFound && parseContext.lookupUserType(structName, type) != nullptr) { + // struct_type IDENTIFIER + return true; + } else { + expected("{"); + return false; + } + } + + + // struct_declaration_list + TTypeList* typeList; + // Save each member function so they can be processed after we have a fully formed 'this'. + TVector functionDeclarators; + + parseContext.pushNamespace(structName); + bool acceptedList = acceptStructDeclarationList(typeList, nodeList, structName, functionDeclarators); + parseContext.popNamespace(); + + if (! acceptedList) { + expected("struct member declarations"); + return false; + } + + // RIGHT_BRACE + if (! acceptTokenClass(EHTokRightBrace)) { + expected("}"); + return false; + } + + // create the user-defined type + if (storageQualifier == EvqTemporary) + new(&type) TType(typeList, structName); + else { + postDeclQualifier.storage = storageQualifier; + new(&type) TType(typeList, structName, postDeclQualifier); // sets EbtBlock + } + + parseContext.declareStruct(token.loc, structName, type); + + // For member functions: now that we know the type of 'this', go back and + // - add their implicit argument with 'this' (not to the mangling, just the argument list) + // - parse the functions, their tokens were saved for deferred parsing (now) + for (int b = 0; b < (int)functionDeclarators.size(); ++b) { + // update signature + if (functionDeclarators[b].function->hasImplicitThis()) + functionDeclarators[b].function->addThisParameter(type, intermediate.implicitThisName); + } + + // 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); + bool deferredSuccess = true; + for (int b = 0; b < (int)functionDeclarators.size() && deferredSuccess; ++b) { + // parse body + pushTokenStream(functionDeclarators[b].body); + if (! acceptFunctionBody(functionDeclarators[b], nodeList)) + deferredSuccess = false; + popTokenStream(); + } + parseContext.popThisScope(); + parseContext.popNamespace(); + + return deferredSuccess; +} + +// struct_buffer +// : APPENDSTRUCTUREDBUFFER +// | BYTEADDRESSBUFFER +// | CONSUMESTRUCTUREDBUFFER +// | RWBYTEADDRESSBUFFER +// | RWSTRUCTUREDBUFFER +// | STRUCTUREDBUFFER +bool HlslGrammar::acceptStructBufferType(TType& type) +{ + const EHlslTokenClass structBuffType = peek(); + + // TODO: globallycoherent + bool hasTemplateType = true; + bool readonly = false; + + TStorageQualifier storage = EvqBuffer; + + switch (structBuffType) { + case EHTokAppendStructuredBuffer: + unimplemented("AppendStructuredBuffer"); + return false; + case EHTokByteAddressBuffer: + hasTemplateType = false; + readonly = true; + break; + case EHTokConsumeStructuredBuffer: + unimplemented("ConsumeStructuredBuffer"); + return false; + case EHTokRWByteAddressBuffer: + hasTemplateType = false; + break; + case EHTokRWStructuredBuffer: + break; + case EHTokStructuredBuffer: + readonly = true; + break; + default: + return false; // not a structure buffer type + } + + advanceToken(); // consume the structure keyword + + // type on which this StructedBuffer is templatized. E.g, StructedBuffer ==> MyStruct + TType* templateType = new TType; + + if (hasTemplateType) { + if (! acceptTokenClass(EHTokLeftAngle)) { + expected("left angle bracket"); + return false; + } + + if (! acceptType(*templateType)) { + expected("type"); + return false; + } + if (! acceptTokenClass(EHTokRightAngle)) { + expected("right angle bracket"); + return false; + } + } else { + // byte address buffers have no explicit type. + TType uintType(EbtUint, storage); + templateType->shallowCopy(uintType); + } + + // Create an unsized array out of that type. + // TODO: does this work if it's already an array type? + TArraySizes unsizedArray; + unsizedArray.addInnerSize(UnsizedArraySize); + templateType->newArraySizes(unsizedArray); + templateType->getQualifier().storage = storage; + + // 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); + + // This is the type of the buffer block (SSBO) + TType blockType(blockStruct, "", templateType->getQualifier()); + + blockType.getQualifier().storage = storage; + blockType.getQualifier().readonly = readonly; + + // We may have created an equivalent type before, in which case we should use its + // deep structure. + parseContext.shareStructBufferType(blockType); + + type.shallowCopy(blockType); + + return true; +} + +// struct_declaration_list +// : struct_declaration SEMI_COLON struct_declaration SEMI_COLON ... +// +// struct_declaration +// : fully_specified_type struct_declarator COMMA struct_declarator ... +// | fully_specified_type IDENTIFIER function_parameters post_decls compound_statement // member-function definition +// +// struct_declarator +// : IDENTIFIER post_decls +// | IDENTIFIER array_specifier post_decls +// | IDENTIFIER function_parameters post_decls // member-function prototype +// +bool HlslGrammar::acceptStructDeclarationList(TTypeList*& typeList, TIntermNode*& nodeList, const TString& typeName, + TVector& declarators) +{ + typeList = new TTypeList(); + HlslToken idToken; + + do { + // success on seeing the RIGHT_BRACE coming up + if (peekTokenClass(EHTokRightBrace)) + break; + + // struct_declaration + + bool declarator_list = false; + + // fully_specified_type + TType memberType; + if (! acceptFullySpecifiedType(memberType, nodeList)) { + expected("member type"); + return false; + } + + // struct_declarator COMMA struct_declarator ... + bool functionDefinitionAccepted = false; + do { + if (! acceptIdentifier(idToken)) { + expected("member name"); + return false; + } + + if (peekTokenClass(EHTokLeftParen)) { + // function_parameters + if (!declarator_list) { + declarators.resize(declarators.size() + 1); + // request a token stream for deferred processing + functionDefinitionAccepted = acceptMemberFunctionDefinition(nodeList, memberType, *idToken.string, + declarators.back()); + if (functionDefinitionAccepted) + break; + } + expected("member-function definition"); + return false; + } else { + // add it to the list of members + TTypeLoc member = { new TType(EbtVoid), token.loc }; + member.type->shallowCopy(memberType); + member.type->setFieldName(*idToken.string); + typeList->push_back(member); + + // array_specifier + TArraySizes* arraySizes = nullptr; + acceptArraySpecifier(arraySizes); + if (arraySizes) + typeList->back().type->newArraySizes(*arraySizes); + + acceptPostDecls(member.type->getQualifier()); + + // EQUAL assignment_expression + if (acceptTokenClass(EHTokAssign)) { + parseContext.warn(idToken.loc, "struct-member initializers ignored", "typedef", ""); + TIntermTyped* expressionNode = nullptr; + if (! acceptAssignmentExpression(expressionNode)) { + expected("initializer"); + return false; + } + } + } + // success on seeing the SEMICOLON coming up + if (peekTokenClass(EHTokSemicolon)) + break; + + // COMMA + if (acceptTokenClass(EHTokComma)) + declarator_list = true; + else { + expected(","); + return false; + } + + } while (true); + + // SEMI_COLON + if (! functionDefinitionAccepted && ! acceptTokenClass(EHTokSemicolon)) { + expected(";"); + return false; + } + + } while (true); + + return true; +} + +// member_function_definition +// | function_parameters post_decls compound_statement +// +// 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, + TFunctionDeclarator& declarator) +{ + bool accepted = false; + + TString* functionName = parseContext.getFullNamespaceName(memberName); + declarator.function = new TFunction(functionName, type); + if (type.getQualifier().storage == EvqTemporary) + declarator.function->setImplicitThis(); + else + declarator.function->setIllegalImplicitThis(); + + // function_parameters + if (acceptFunctionParameters(*declarator.function)) { + // post_decls + acceptPostDecls(declarator.function->getWritableType().getQualifier()); + + // compound_statement (function body definition) + if (peekTokenClass(EHTokLeftBrace)) { + declarator.loc = token.loc; + declarator.body = new TVector; + accepted = acceptFunctionDefinition(declarator, nodeList, declarator.body); + } + } else + expected("function parameter list"); + + return accepted; +} + +// function_parameters +// : LEFT_PAREN parameter_declaration COMMA parameter_declaration ... RIGHT_PAREN +// | LEFT_PAREN VOID RIGHT_PAREN +// +bool HlslGrammar::acceptFunctionParameters(TFunction& function) +{ + // LEFT_PAREN + if (! acceptTokenClass(EHTokLeftParen)) + return false; + + // VOID RIGHT_PAREN + if (! acceptTokenClass(EHTokVoid)) { + do { + // parameter_declaration + if (! acceptParameterDeclaration(function)) + break; + + // COMMA + if (! acceptTokenClass(EHTokComma)) + break; + } while (true); + } + + // RIGHT_PAREN + if (! acceptTokenClass(EHTokRightParen)) { + expected(")"); + return false; + } + + return true; +} + +// default_parameter_declaration +// : EQUAL conditional_expression +// : EQUAL initializer +bool HlslGrammar::acceptDefaultParameterDeclaration(const TType& type, TIntermTyped*& node) +{ + node = nullptr; + + // Valid not to have a default_parameter_declaration + if (!acceptTokenClass(EHTokAssign)) + return true; + + if (!acceptConditionalExpression(node)) { + if (!acceptInitializer(node)) + return false; + + // For initializer lists, we have to const-fold into a constructor for the type, so build + // that. + TFunction* constructor = parseContext.handleConstructorCall(token.loc, type); + if (constructor == nullptr) // cannot construct + return false; + + TIntermTyped* arguments = nullptr; + for (int i = 0; i < int(node->getAsAggregate()->getSequence().size()); i++) + parseContext.handleFunctionArgument(constructor, arguments, node->getAsAggregate()->getSequence()[i]->getAsTyped()); + + node = parseContext.handleFunctionCall(token.loc, constructor, node); + } + + // If this is simply a constant, we can use it directly. + if (node->getAsConstantUnion()) + return true; + + // Otherwise, it has to be const-foldable. + TIntermTyped* origNode = node; + + node = intermediate.fold(node->getAsAggregate()); + + if (node != nullptr && origNode != node) + return true; + + parseContext.error(token.loc, "invalid default parameter value", "", ""); + + return false; +} + +// parameter_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) +{ + // fully_specified_type + TType* type = new TType; + if (! acceptFullySpecifiedType(*type)) + return false; + + // identifier + HlslToken idToken; + acceptIdentifier(idToken); + + // array_specifier + TArraySizes* arraySizes = nullptr; + acceptArraySpecifier(arraySizes); + if (arraySizes) { + if (arraySizes->isImplicit()) { + parseContext.error(token.loc, "function parameter array cannot be implicitly sized", "", ""); + return false; + } + + type->newArraySizes(*arraySizes); + } + + // post_decls + acceptPostDecls(type->getQualifier()); + + TIntermTyped* defaultValue; + if (!acceptDefaultParameterDeclaration(*type, defaultValue)) + return false; + + parseContext.paramFix(*type); + + // If any prior parameters have default values, all the parameters after that must as well. + if (defaultValue == nullptr && function.getDefaultParamCount() > 0) { + parseContext.error(idToken.loc, "invalid parameter after default value parameters", idToken.string->c_str(), ""); + return false; + } + + TParameter param = { idToken.string, type, defaultValue }; + function.addParameter(param); + + return true; +} + +// Do the work to create the function definition in addition to +// parsing the body (compound_statement). +// +// If 'deferredTokens' are passed in, just get the token stream, +// don't process. +// +bool HlslGrammar::acceptFunctionDefinition(TFunctionDeclarator& declarator, TIntermNode*& nodeList, + TVector* deferredTokens) +{ + parseContext.handleFunctionDeclarator(declarator.loc, *declarator.function, false /* not prototype */); + + if (deferredTokens) + return captureBlockTokens(*deferredTokens); + else + return acceptFunctionBody(declarator, nodeList); +} + +bool HlslGrammar::acceptFunctionBody(TFunctionDeclarator& declarator, TIntermNode*& nodeList) +{ + // we might get back an entry-point + TIntermNode* entryPointNode = nullptr; + + // This does a pushScope() + TIntermNode* functionNode = parseContext.handleFunctionDefinition(declarator.loc, *declarator.function, + declarator.attributes, entryPointNode); + + // compound_statement + TIntermNode* functionBody = nullptr; + if (! acceptCompoundStatement(functionBody)) + return false; + + // this does a popScope() + parseContext.handleFunctionBody(declarator.loc, *declarator.function, functionBody, functionNode); + + // Hook up the 1 or 2 function definitions. + nodeList = intermediate.growAggregate(nodeList, functionNode); + nodeList = intermediate.growAggregate(nodeList, entryPointNode); + + return true; +} + +// Accept an expression with parenthesis around it, where +// the parenthesis ARE NOT expression parenthesis, but the +// syntactically required ones like in "if ( expression )". +// +// Also accepts a declaration expression; "if (int a = expression)". +// +// Note this one is not set up to be speculative; as it gives +// errors if not found. +// +bool HlslGrammar::acceptParenExpression(TIntermTyped*& expression) +{ + // LEFT_PAREN + if (! acceptTokenClass(EHTokLeftParen)) + expected("("); + + bool decl = false; + TIntermNode* declNode = nullptr; + decl = acceptControlDeclaration(declNode); + if (decl) { + if (declNode == nullptr || declNode->getAsTyped() == nullptr) { + expected("initialized declaration"); + return false; + } else + expression = declNode->getAsTyped(); + } else { + // no declaration + if (! acceptExpression(expression)) { + expected("expression"); + return false; + } + } + + // RIGHT_PAREN + if (! acceptTokenClass(EHTokRightParen)) + expected(")"); + + return true; +} + +// The top-level full expression recognizer. +// +// expression +// : assignment_expression COMMA assignment_expression COMMA assignment_expression ... +// +bool HlslGrammar::acceptExpression(TIntermTyped*& node) +{ + node = nullptr; + + // assignment_expression + if (! acceptAssignmentExpression(node)) + return false; + + if (! peekTokenClass(EHTokComma)) + return true; + + do { + // ... COMMA + TSourceLoc loc = token.loc; + advanceToken(); + + // ... assignment_expression + TIntermTyped* rightNode = nullptr; + if (! acceptAssignmentExpression(rightNode)) { + expected("assignment expression"); + return false; + } + + node = intermediate.addComma(node, rightNode, loc); + + if (! peekTokenClass(EHTokComma)) + return true; + } while (true); +} + +// initializer +// : LEFT_BRACE RIGHT_BRACE +// | LEFT_BRACE initializer_list RIGHT_BRACE +// +// initializer_list +// : assignment_expression COMMA assignment_expression COMMA ... +// +bool HlslGrammar::acceptInitializer(TIntermTyped*& node) +{ + // LEFT_BRACE + if (! acceptTokenClass(EHTokLeftBrace)) + return false; + + // RIGHT_BRACE + TSourceLoc loc = token.loc; + if (acceptTokenClass(EHTokRightBrace)) { + // a zero-length initializer list + node = intermediate.makeAggregate(loc); + return true; + } + + // initializer_list + node = nullptr; + do { + // assignment_expression + TIntermTyped* expr; + if (! acceptAssignmentExpression(expr)) { + expected("assignment expression in initializer list"); + return false; + } + node = intermediate.growAggregate(node, expr, loc); + + // COMMA + if (acceptTokenClass(EHTokComma)) { + if (acceptTokenClass(EHTokRightBrace)) // allow trailing comma + return true; + continue; + } + + // RIGHT_BRACE + if (acceptTokenClass(EHTokRightBrace)) + return true; + + expected(", or }"); + return false; + } while (true); +} + +// Accept an assignment expression, where assignment operations +// associate right-to-left. That is, it is implicit, for example +// +// a op (b op (c op d)) +// +// assigment_expression +// : initializer +// | conditional_expression +// | conditional_expression assign_op conditional_expression assign_op conditional_expression ... +// +bool HlslGrammar::acceptAssignmentExpression(TIntermTyped*& node) +{ + // initializer + if (peekTokenClass(EHTokLeftBrace)) { + if (acceptInitializer(node)) + return true; + + expected("initializer"); + return false; + } + + // conditional_expression + if (! acceptConditionalExpression(node)) + return false; + + // assignment operation? + TOperator assignOp = HlslOpMap::assignment(peek()); + if (assignOp == EOpNull) + return true; + + // assign_op + TSourceLoc loc = token.loc; + advanceToken(); + + // conditional_expression assign_op conditional_expression ... + // Done by recursing this function, which automatically + // gets the right-to-left associativity. + TIntermTyped* rightNode = nullptr; + if (! acceptAssignmentExpression(rightNode)) { + expected("assignment expression"); + return false; + } + + node = parseContext.handleAssign(loc, assignOp, node, rightNode); + node = parseContext.handleLvalue(loc, "assign", node); + + if (node == nullptr) { + parseContext.error(loc, "could not create assignment", "", ""); + return false; + } + + if (! peekTokenClass(EHTokComma)) + return true; + + return true; +} + +// Accept a conditional expression, which associates right-to-left, +// accomplished by the "true" expression calling down to lower +// precedence levels than this level. +// +// conditional_expression +// : binary_expression +// | binary_expression QUESTION expression COLON assignment_expression +// +bool HlslGrammar::acceptConditionalExpression(TIntermTyped*& node) +{ + // binary_expression + if (! acceptBinaryExpression(node, PlLogicalOr)) + return false; + + if (! acceptTokenClass(EHTokQuestion)) + return true; + + TIntermTyped* trueNode = nullptr; + if (! acceptExpression(trueNode)) { + expected("expression after ?"); + return false; + } + TSourceLoc loc = token.loc; + + if (! acceptTokenClass(EHTokColon)) { + expected(":"); + return false; + } + + TIntermTyped* falseNode = nullptr; + if (! acceptAssignmentExpression(falseNode)) { + expected("expression after :"); + return false; + } + + node = intermediate.addSelection(node, trueNode, falseNode, loc); + + return true; +} + +// Accept a binary expression, for binary operations that +// associate left-to-right. This is, it is implicit, for example +// +// ((a op b) op c) op d +// +// binary_expression +// : expression op expression op expression ... +// +// where 'expression' is the next higher level in precedence. +// +bool HlslGrammar::acceptBinaryExpression(TIntermTyped*& node, PrecedenceLevel precedenceLevel) +{ + if (precedenceLevel > PlMul) + return acceptUnaryExpression(node); + + // assignment_expression + if (! acceptBinaryExpression(node, (PrecedenceLevel)(precedenceLevel + 1))) + return false; + + do { + TOperator op = HlslOpMap::binary(peek()); + PrecedenceLevel tokenLevel = HlslOpMap::precedenceLevel(op); + if (tokenLevel < precedenceLevel) + return true; + + // ... op + TSourceLoc loc = token.loc; + advanceToken(); + + // ... expression + TIntermTyped* rightNode = nullptr; + if (! acceptBinaryExpression(rightNode, (PrecedenceLevel)(precedenceLevel + 1))) { + expected("expression"); + return false; + } + + node = intermediate.addBinaryMath(op, node, rightNode, loc); + if (node == nullptr) { + parseContext.error(loc, "Could not perform requested binary operation", "", ""); + return false; + } + } while (true); +} + +// unary_expression +// : (type) unary_expression +// | + unary_expression +// | - unary_expression +// | ! unary_expression +// | ~ unary_expression +// | ++ unary_expression +// | -- unary_expression +// | postfix_expression +// +bool HlslGrammar::acceptUnaryExpression(TIntermTyped*& node) +{ + // (type) unary_expression + // Have to look two steps ahead, because this could be, e.g., a + // postfix_expression instead, since that also starts with at "(". + if (acceptTokenClass(EHTokLeftParen)) { + TType castType; + if (acceptType(castType)) { + 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); + if (constructorFunction == nullptr) { + expected("type that can be constructed"); + return false; + } + TIntermTyped* arguments = nullptr; + parseContext.handleFunctionArgument(constructorFunction, arguments, node); + node = parseContext.handleFunctionCall(loc, constructorFunction, arguments); + + return true; + } else { + // This could be a parenthesized constructor, ala (int(3)), and we just accepted + // the '(int' part. We must back up twice. + recedeToken(); + recedeToken(); + } + } else { + // This isn't a type cast, but it still started "(", so if it is a + // unary expression, it can only be a postfix_expression, so try that. + // Back it up first. + recedeToken(); + return acceptPostfixExpression(node); + } + } + + // peek for "op unary_expression" + TOperator unaryOp = HlslOpMap::preUnary(peek()); + + // postfix_expression (if no unary operator) + if (unaryOp == EOpNull) + return acceptPostfixExpression(node); + + // op unary_expression + TSourceLoc loc = token.loc; + advanceToken(); + if (! acceptUnaryExpression(node)) + return false; + + // + is a no-op + if (unaryOp == EOpAdd) + return true; + + node = intermediate.addUnaryMath(unaryOp, node, loc); + + // These unary ops require lvalues + if (unaryOp == EOpPreIncrement || unaryOp == EOpPreDecrement) + node = parseContext.handleLvalue(loc, "unary operator", node); + + return node != nullptr; +} + +// postfix_expression +// : LEFT_PAREN expression RIGHT_PAREN +// | literal +// | constructor +// | 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 INC_OP +// | postfix_expression DEC_OP +// +bool HlslGrammar::acceptPostfixExpression(TIntermTyped*& node) +{ + // Not implemented as self-recursive: + // The logical "right recursion" is done with a loop at the end + + // 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)) { + // LEFT_PAREN expression RIGHT_PAREN + if (! acceptExpression(node)) { + expected("expression"); + return false; + } + if (! acceptTokenClass(EHTokRightParen)) { + expected(")"); + return false; + } + } else if (acceptLiteral(node)) { + // literal (nothing else to do yet), go on to the + } 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 ::"); + return false; + } + } else if (! peekTokenClass(EHTokLeftParen)) { + node = parseContext.handleVariable(idToken.loc, idToken.string); + } else if (acceptFunctionCall(idToken, node)) { + // function_call (nothing else to do yet) + } else { + expected("function call arguments"); + return false; + } + } else { + // nothing found, can't post operate + 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; + TOperator postOp = HlslOpMap::postUnary(peek()); + + // Consume only a valid post-unary operator, otherwise we are done. + switch (postOp) { + case EOpIndexDirectStruct: + case EOpIndexIndirect: + case EOpPostIncrement: + case EOpPostDecrement: + case EOpScoping: + advanceToken(); + break; + default: + return true; + } + + // We have a valid post-unary operator, process it. + switch (postOp) { + case EOpScoping: + case EOpIndexDirectStruct: + { + // DOT IDENTIFIER + // includes swizzles, member variables, and member functions + HlslToken field; + if (! acceptIdentifier(field)) { + expected("swizzle or member"); + return false; + } + + if (peekTokenClass(EHTokLeftParen)) { + // member function + TIntermTyped* thisNode = node; + + // arguments + if (! acceptFunctionCall(field, node, thisNode, scope)) { + expected("function parameters"); + return false; + } + } else + node = parseContext.handleDotDereference(field.loc, node, *field.string); + + break; + } + case EOpIndexIndirect: + { + // LEFT_BRACKET integer_expression RIGHT_BRACKET + TIntermTyped* indexNode = nullptr; + if (! acceptExpression(indexNode) || + ! peekTokenClass(EHTokRightBracket)) { + expected("expression followed by ']'"); + return false; + } + advanceToken(); + node = parseContext.handleBracketDereference(indexNode->getLoc(), node, indexNode); + break; + } + case EOpPostIncrement: + // INC_OP + // fall through + case EOpPostDecrement: + // DEC_OP + node = intermediate.addUnaryMath(postOp, node, loc); + node = parseContext.handleLvalue(loc, "unary operator", node); + break; + default: + assert(0); + break; + } + } while (true); +} + +// constructor +// : type argument_list +// +bool HlslGrammar::acceptConstructor(TIntermTyped*& node) +{ + // type + TType type; + if (acceptType(type)) { + TFunction* constructorFunction = parseContext.handleConstructorCall(token.loc, type); + if (constructorFunction == nullptr) + return false; + + // arguments + TIntermTyped* arguments = nullptr; + if (! acceptArguments(constructorFunction, arguments)) { + // It's possible this is a type keyword used as an identifier. Put the token back + // for later use. + recedeToken(); + return false; + } + + // hook it up + node = parseContext.handleFunctionCall(arguments->getLoc(), constructorFunction, arguments); + + return true; + } + + return false; +} + +// The function_call identifier was already recognized, and passed in as idToken. +// +// function_call +// : [idToken] arguments +// +bool HlslGrammar::acceptFunctionCall(HlslToken callToken, TIntermTyped*& node, TIntermTyped* baseObject, + const TSymbol* scope) +{ + // name + TString* functionName = nullptr; + if ((baseObject == nullptr && scope == nullptr)) { + functionName = callToken.string; + } else if (parseContext.isBuiltInMethod(callToken.loc, baseObject, *callToken.string)) { + // 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); + } else { + functionName = NewPoolTString(""); + if (baseObject != nullptr) + functionName->append(baseObject->getType().getTypeName()); + else if (scope != nullptr) + functionName->append(scope->getType().getTypeName()); + parseContext.addScopeMangler(*functionName); + functionName->append(*callToken.string); + } + + // function + TFunction* function = new TFunction(functionName, TType(EbtVoid)); + + // arguments + TIntermTyped* arguments = nullptr; + if (baseObject != nullptr) { + // Non-static member functions have an implicit first argument of the base object. + parseContext.handleFunctionArgument(function, arguments, baseObject); + } + if (! acceptArguments(function, arguments)) + return false; + + // call + node = parseContext.handleFunctionCall(callToken.loc, function, arguments); + + return true; +} + +// arguments +// : LEFT_PAREN expression COMMA expression COMMA ... RIGHT_PAREN +// +// The arguments are pushed onto the 'function' argument list and +// onto the 'arguments' aggregate. +// +bool HlslGrammar::acceptArguments(TFunction* function, TIntermTyped*& arguments) +{ + // LEFT_PAREN + if (! acceptTokenClass(EHTokLeftParen)) + return false; + + do { + // expression + TIntermTyped* arg; + if (! acceptAssignmentExpression(arg)) + break; + + // hook it up + parseContext.handleFunctionArgument(function, arguments, arg); + + // COMMA + if (! acceptTokenClass(EHTokComma)) + break; + } while (true); + + // RIGHT_PAREN + if (! acceptTokenClass(EHTokRightParen)) { + expected(")"); + return false; + } + + return true; +} + +bool HlslGrammar::acceptLiteral(TIntermTyped*& node) +{ + switch (token.tokenClass) { + case EHTokIntConstant: + node = intermediate.addConstantUnion(token.i, token.loc, true); + break; + case EHTokUintConstant: + node = intermediate.addConstantUnion(token.u, token.loc, true); + break; + case EHTokFloatConstant: + node = intermediate.addConstantUnion(token.d, EbtFloat, token.loc, true); + break; + case EHTokDoubleConstant: + node = intermediate.addConstantUnion(token.d, EbtDouble, token.loc, true); + break; + case EHTokBoolConstant: + node = intermediate.addConstantUnion(token.b, token.loc, true); + break; + case EHTokStringConstant: + node = intermediate.addConstantUnion(token.string, token.loc, true); + break; + + default: + return false; + } + + advanceToken(); + + return true; +} + +// compound_statement +// : LEFT_CURLY statement statement ... RIGHT_CURLY +// +bool HlslGrammar::acceptCompoundStatement(TIntermNode*& retStatement) +{ + TIntermAggregate* compoundStatement = nullptr; + + // LEFT_CURLY + if (! acceptTokenClass(EHTokLeftBrace)) + return false; + + // statement statement ... + TIntermNode* statement = nullptr; + while (acceptStatement(statement)) { + TIntermBranch* branch = statement ? statement->getAsBranchNode() : nullptr; + if (branch != nullptr && (branch->getFlowOp() == EOpCase || + branch->getFlowOp() == EOpDefault)) { + // hook up individual subsequences within a switch statement + parseContext.wrapupSwitchSubsequence(compoundStatement, statement); + compoundStatement = nullptr; + } else { + // hook it up to the growing compound statement + compoundStatement = intermediate.growAggregate(compoundStatement, statement); + } + } + if (compoundStatement) + compoundStatement->setOperator(EOpSequence); + + retStatement = compoundStatement; + + // RIGHT_CURLY + return acceptTokenClass(EHTokRightBrace); +} + +bool HlslGrammar::acceptScopedStatement(TIntermNode*& statement) +{ + parseContext.pushScope(); + bool result = acceptStatement(statement); + parseContext.popScope(); + + return result; +} + +bool HlslGrammar::acceptScopedCompoundStatement(TIntermNode*& statement) +{ + parseContext.pushScope(); + bool result = acceptCompoundStatement(statement); + parseContext.popScope(); + + return result; +} + +// statement +// : attributes attributed_statement +// +// attributed_statement +// : compound_statement +// | SEMICOLON +// | expression SEMICOLON +// | declaration_statement +// | selection_statement +// | switch_statement +// | case_label +// | iteration_statement +// | jump_statement +// +bool HlslGrammar::acceptStatement(TIntermNode*& statement) +{ + statement = nullptr; + + // attributes + TAttributeMap attributes; + acceptAttributes(attributes); + + // attributed_statement + switch (peek()) { + case EHTokLeftBrace: + return acceptScopedCompoundStatement(statement); + + case EHTokIf: + return acceptSelectionStatement(statement); + + case EHTokSwitch: + return acceptSwitchStatement(statement); + + case EHTokFor: + case EHTokDo: + case EHTokWhile: + return acceptIterationStatement(statement); + + case EHTokContinue: + case EHTokBreak: + case EHTokDiscard: + case EHTokReturn: + return acceptJumpStatement(statement); + + case EHTokCase: + return acceptCaseLabel(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 true; +} + +// attributes +// : list of zero or more of: LEFT_BRACKET attribute RIGHT_BRACKET +// +// attribute: +// : UNROLL +// | UNROLL LEFT_PAREN literal RIGHT_PAREN +// | FASTOPT +// | ALLOW_UAV_CONDITION +// | BRANCH +// | FLATTEN +// | FORCECASE +// | CALL +// | DOMAIN +// | EARLYDEPTHSTENCIL +// | INSTANCE +// | MAXTESSFACTOR +// | OUTPUTCONTROLPOINTS +// | OUTPUTTOPOLOGY +// | PARTITIONING +// | PATCHCONSTANTFUNC +// | NUMTHREADS LEFT_PAREN x_size, y_size,z z_size RIGHT_PAREN +// +void HlslGrammar::acceptAttributes(TAttributeMap& attributes) +{ + // For now, accept the [ XXX(X) ] syntax, but drop all but + // numthreads, which is used to set the CS local size. + // TODO: subset to correct set? Pass on? + do { + HlslToken idToken; + + // LEFT_BRACKET? + if (! acceptTokenClass(EHTokLeftBracket)) + return; + + // attribute + if (acceptIdentifier(idToken)) { + // 'idToken.string' is the attribute + } else if (! peekTokenClass(EHTokRightBracket)) { + expected("identifier"); + advanceToken(); + } + + TIntermAggregate* expressions = nullptr; + + // (x, ...) + if (acceptTokenClass(EHTokLeftParen)) { + expressions = new TIntermAggregate; + + TIntermTyped* node; + bool expectingExpression = false; + + while (acceptAssignmentExpression(node)) { + expectingExpression = false; + expressions->getSequence().push_back(node); + if (acceptTokenClass(EHTokComma)) + expectingExpression = true; + } + + // 'expressions' is an aggregate with the expressions in it + if (! acceptTokenClass(EHTokRightParen)) + expected(")"); + + // Error for partial or missing expression + if (expectingExpression || expressions->getSequence().empty()) + expected("expression"); + } + + // RIGHT_BRACKET + if (!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); + } while (true); +} + +// selection_statement +// : IF LEFT_PAREN expression RIGHT_PAREN statement +// : IF LEFT_PAREN expression RIGHT_PAREN statement ELSE statement +// +bool HlslGrammar::acceptSelectionStatement(TIntermNode*& statement) +{ + TSourceLoc loc = token.loc; + + // IF + if (! acceptTokenClass(EHTokIf)) + return false; + + // so that something declared in the condition is scoped to the lifetimes + // of the then-else statements + parseContext.pushScope(); + + // LEFT_PAREN expression RIGHT_PAREN + TIntermTyped* condition; + if (! acceptParenExpression(condition)) + return false; + + // create the child statements + TIntermNodePair thenElse = { nullptr, nullptr }; + + // then statement + if (! acceptScopedStatement(thenElse.node1)) { + expected("then statement"); + return false; + } + + // ELSE + if (acceptTokenClass(EHTokElse)) { + // else statement + if (! acceptScopedStatement(thenElse.node2)) { + expected("else statement"); + return false; + } + } + + // Put the pieces together + statement = intermediate.addSelection(condition, thenElse, loc); + parseContext.popScope(); + + return true; +} + +// switch_statement +// : SWITCH LEFT_PAREN expression RIGHT_PAREN compound_statement +// +bool HlslGrammar::acceptSwitchStatement(TIntermNode*& statement) +{ + // SWITCH + TSourceLoc loc = token.loc; + if (! acceptTokenClass(EHTokSwitch)) + return false; + + // LEFT_PAREN expression RIGHT_PAREN + parseContext.pushScope(); + TIntermTyped* switchExpression; + if (! acceptParenExpression(switchExpression)) { + parseContext.popScope(); + return false; + } + + // compound_statement + parseContext.pushSwitchSequence(new TIntermSequence); + bool statementOkay = acceptCompoundStatement(statement); + if (statementOkay) + statement = parseContext.addSwitch(loc, switchExpression, statement ? statement->getAsAggregate() : nullptr); + + parseContext.popSwitchSequence(); + parseContext.popScope(); + + return statementOkay; +} + +// iteration_statement +// : WHILE LEFT_PAREN condition RIGHT_PAREN statement +// | DO LEFT_BRACE statement RIGHT_BRACE WHILE LEFT_PAREN expression RIGHT_PAREN SEMICOLON +// | 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) +{ + TSourceLoc loc = token.loc; + TIntermTyped* condition = nullptr; + + EHlslTokenClass loop = peek(); + assert(loop == EHTokDo || loop == EHTokFor || loop == EHTokWhile); + + // WHILE or DO or FOR + advanceToken(); + + switch (loop) { + case EHTokWhile: + // so that something declared in the condition is scoped to the lifetime + // of the while sub-statement + parseContext.pushScope(); + parseContext.nestLooping(); + + // LEFT_PAREN condition RIGHT_PAREN + if (! acceptParenExpression(condition)) + return false; + + // statement + if (! acceptScopedStatement(statement)) { + expected("while sub-statement"); + return false; + } + + parseContext.unnestLooping(); + parseContext.popScope(); + + statement = intermediate.addLoop(statement, condition, nullptr, true, loc); + + return true; + + case EHTokDo: + parseContext.nestLooping(); + + if (! acceptTokenClass(EHTokLeftBrace)) + expected("{"); + + // statement + if (! peekTokenClass(EHTokRightBrace) && ! acceptScopedStatement(statement)) { + expected("do sub-statement"); + return false; + } + + if (! acceptTokenClass(EHTokRightBrace)) + expected("}"); + + // WHILE + if (! acceptTokenClass(EHTokWhile)) { + expected("while"); + return false; + } + + // LEFT_PAREN condition RIGHT_PAREN + TIntermTyped* condition; + if (! acceptParenExpression(condition)) + return false; + + if (! acceptTokenClass(EHTokSemicolon)) + expected(";"); + + parseContext.unnestLooping(); + + statement = intermediate.addLoop(statement, condition, 0, false, loc); + + return true; + + case EHTokFor: + { + // LEFT_PAREN + if (! acceptTokenClass(EHTokLeftParen)) + expected("("); + + // so that something declared in the condition is scoped to the lifetime + // of the for sub-statement + parseContext.pushScope(); + + // initializer + TIntermNode* initNode = nullptr; + if (! acceptControlDeclaration(initNode)) { + TIntermTyped* initExpr = nullptr; + acceptExpression(initExpr); + initNode = initExpr; + } + // SEMI_COLON + if (! acceptTokenClass(EHTokSemicolon)) + expected(";"); + + parseContext.nestLooping(); + + // condition SEMI_COLON + acceptExpression(condition); + if (! acceptTokenClass(EHTokSemicolon)) + expected(";"); + + // iterator SEMI_COLON + TIntermTyped* iterator = nullptr; + acceptExpression(iterator); + if (! acceptTokenClass(EHTokRightParen)) + expected(")"); + + // statement + if (! acceptScopedStatement(statement)) { + expected("for sub-statement"); + return false; + } + + statement = intermediate.addForLoop(statement, initNode, condition, iterator, true, loc); + + parseContext.popScope(); + parseContext.unnestLooping(); + + return true; + } + + default: + return false; + } +} + +// jump_statement +// : CONTINUE SEMICOLON +// | BREAK SEMICOLON +// | DISCARD SEMICOLON +// | RETURN SEMICOLON +// | RETURN expression SEMICOLON +// +bool HlslGrammar::acceptJumpStatement(TIntermNode*& statement) +{ + EHlslTokenClass jump = peek(); + switch (jump) { + case EHTokContinue: + case EHTokBreak: + case EHTokDiscard: + case EHTokReturn: + advanceToken(); + break; + default: + // not something we handle in this function + return false; + } + + switch (jump) { + case EHTokContinue: + statement = intermediate.addBranch(EOpContinue, token.loc); + break; + case EHTokBreak: + statement = intermediate.addBranch(EOpBreak, token.loc); + break; + case EHTokDiscard: + statement = intermediate.addBranch(EOpKill, token.loc); + break; + + case EHTokReturn: + { + // expression + TIntermTyped* node; + if (acceptExpression(node)) { + // hook it up + statement = parseContext.handleReturnValue(token.loc, node); + } else + statement = intermediate.addBranch(EOpReturn, token.loc); + break; + } + + default: + assert(0); + return false; + } + + // SEMICOLON + if (! acceptTokenClass(EHTokSemicolon)) + expected(";"); + + return true; +} + +// case_label +// : CASE expression COLON +// +bool HlslGrammar::acceptCaseLabel(TIntermNode*& statement) +{ + TSourceLoc loc = token.loc; + if (! acceptTokenClass(EHTokCase)) + return false; + + TIntermTyped* expression; + if (! acceptExpression(expression)) { + expected("case expression"); + return false; + } + + if (! acceptTokenClass(EHTokColon)) { + expected(":"); + return false; + } + + statement = parseContext.intermediate.addBranch(EOpCase, expression, loc); + + return true; +} + +// default_label +// : DEFAULT COLON +// +bool HlslGrammar::acceptDefaultLabel(TIntermNode*& statement) +{ + TSourceLoc loc = token.loc; + if (! acceptTokenClass(EHTokDefault)) + return false; + + if (! acceptTokenClass(EHTokColon)) { + expected(":"); + return false; + } + + statement = parseContext.intermediate.addBranch(EOpDefault, loc); + + return true; +} + +// array_specifier +// : LEFT_BRACKET integer_expression RGHT_BRACKET ... // optional +// : LEFT_BRACKET RGHT_BRACKET // optional +// +void HlslGrammar::acceptArraySpecifier(TArraySizes*& arraySizes) +{ + arraySizes = nullptr; + + // Early-out if there aren't any array dimensions + if (!peekTokenClass(EHTokLeftBracket)) + return; + + // If we get here, we have at least one array dimension. This will track the sizes we find. + arraySizes = new TArraySizes; + + // Collect each array dimension. + while (acceptTokenClass(EHTokLeftBracket)) { + TSourceLoc loc = token.loc; + TIntermTyped* sizeExpr = nullptr; + + // Array sizing expression is optional. If omitted, array will be later sized by initializer list. + const bool hasArraySize = acceptAssignmentExpression(sizeExpr); + + if (! acceptTokenClass(EHTokRightBracket)) { + expected("]"); + return; + } + + if (hasArraySize) { + TArraySize arraySize; + parseContext.arraySizeCheck(loc, sizeExpr, arraySize); + arraySizes->addInnerSize(arraySize); + } else { + arraySizes->addInnerSize(0); // sized by initializers. + } + } +} + +// post_decls +// : COLON semantic // optional +// COLON PACKOFFSET LEFT_PAREN c[Subcomponent][.component] RIGHT_PAREN // optional +// COLON REGISTER LEFT_PAREN [shader_profile,] Type#[subcomp]opt (COMMA SPACEN)opt RIGHT_PAREN // optional +// COLON LAYOUT layout_qualifier_list +// annotations // optional +// +// Return true if any tokens were accepted. That is, +// false can be returned on successfully recognizing nothing, +// not necessarily meaning bad syntax. +// +bool HlslGrammar::acceptPostDecls(TQualifier& qualifier) +{ + bool found = false; + + do { + // COLON + if (acceptTokenClass(EHTokColon)) { + found = true; + HlslToken idToken; + if (peekTokenClass(EHTokLayout)) + acceptLayoutQualifierList(qualifier); + else if (acceptTokenClass(EHTokPackOffset)) { + // PACKOFFSET LEFT_PAREN c[Subcomponent][.component] RIGHT_PAREN + if (! acceptTokenClass(EHTokLeftParen)) { + expected("("); + return false; + } + HlslToken locationToken; + if (! acceptIdentifier(locationToken)) { + expected("c[subcomponent][.component]"); + return false; + } + HlslToken componentToken; + if (acceptTokenClass(EHTokDot)) { + if (! acceptIdentifier(componentToken)) { + expected("component"); + return false; + } + } + if (! acceptTokenClass(EHTokRightParen)) { + expected(")"); + break; + } + parseContext.handlePackOffset(locationToken.loc, qualifier, *locationToken.string, componentToken.string); + } else if (! acceptIdentifier(idToken)) { + expected("layout, semantic, packoffset, or register"); + return false; + } else if (*idToken.string == "register") { + // REGISTER LEFT_PAREN [shader_profile,] Type#[subcomp]opt (COMMA SPACEN)opt RIGHT_PAREN + // LEFT_PAREN + if (! acceptTokenClass(EHTokLeftParen)) { + expected("("); + return false; + } + HlslToken registerDesc; // for Type# + HlslToken profile; + if (! acceptIdentifier(registerDesc)) { + expected("register number description"); + return false; + } + if (registerDesc.string->size() > 1 && !isdigit((*registerDesc.string)[1]) && + acceptTokenClass(EHTokComma)) { + // Then we didn't really see the registerDesc yet, it was + // actually the profile. Adjust... + profile = registerDesc; + if (! acceptIdentifier(registerDesc)) { + expected("register number description"); + return false; + } + } + int subComponent = 0; + if (acceptTokenClass(EHTokLeftBracket)) { + // LEFT_BRACKET subcomponent RIGHT_BRACKET + if (! peekTokenClass(EHTokIntConstant)) { + expected("literal integer"); + return false; + } + subComponent = token.i; + advanceToken(); + if (! acceptTokenClass(EHTokRightBracket)) { + expected("]"); + break; + } + } + // (COMMA SPACEN)opt + HlslToken spaceDesc; + if (acceptTokenClass(EHTokComma)) { + if (! acceptIdentifier(spaceDesc)) { + expected ("space identifier"); + return false; + } + } + // RIGHT_PAREN + if (! acceptTokenClass(EHTokRightParen)) { + expected(")"); + break; + } + parseContext.handleRegister(registerDesc.loc, qualifier, profile.string, *registerDesc.string, subComponent, spaceDesc.string); + } else { + // semantic, in idToken.string + TString semanticUpperCase = *idToken.string; + std::transform(semanticUpperCase.begin(), semanticUpperCase.end(), semanticUpperCase.begin(), ::toupper); + parseContext.handleSemantic(idToken.loc, qualifier, mapSemantic(semanticUpperCase.c_str()), semanticUpperCase); + } + } else if (peekTokenClass(EHTokLeftAngle)) { + found = true; + acceptAnnotations(qualifier); + } else + break; + + } while (true); + + return found; +} + +// +// Get the stream of tokens from the scanner, but skip all syntactic/semantic +// processing. +// +bool HlslGrammar::captureBlockTokens(TVector& tokens) +{ + if (! peekTokenClass(EHTokLeftBrace)) + return false; + + int braceCount = 0; + + do { + switch (peek()) { + case EHTokLeftBrace: + ++braceCount; + break; + case EHTokRightBrace: + --braceCount; + break; + case EHTokNone: + // End of input before balance { } is bad... + return false; + default: + break; + } + + tokens.push_back(token); + advanceToken(); + } while (braceCount > 0); + + return true; +} + +} // end namespace glslang diff --git a/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslGrammar.h b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslGrammar.h new file mode 100755 index 0000000..1a3abf1 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslGrammar.h @@ -0,0 +1,135 @@ +// +// Copyright (C) 2016 Google, Inc. +// Copyright (C) 2016 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 Google, Inc., 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. +// + +#ifndef HLSLGRAMMAR_H_ +#define HLSLGRAMMAR_H_ + +#include "hlslParseHelper.h" +#include "hlslOpMap.h" +#include "hlslTokenStream.h" + +namespace glslang { + + class TAttributeMap; + class TFunctionDeclarator; + + // Should just be the grammar aspect of HLSL. + // Described in more detail in hlslGrammar.cpp. + + class HlslGrammar : public HlslTokenStream { + public: + HlslGrammar(HlslScanContext& scanner, HlslParseContext& parseContext) + : HlslTokenStream(scanner), parseContext(parseContext), intermediate(parseContext.intermediate) { } + virtual ~HlslGrammar() { } + + bool parse(); + + protected: + HlslGrammar(); + HlslGrammar& operator=(const HlslGrammar&); + + void expected(const char*); + void unimplemented(const char*); + bool acceptIdentifier(HlslToken&); + bool acceptCompilationUnit(); + bool acceptDeclaration(TIntermNode*&); + bool acceptControlDeclaration(TIntermNode*& node); + bool acceptSamplerDeclarationDX9(TType&); + bool acceptSamplerState(); + bool acceptFullySpecifiedType(TType&); + bool acceptFullySpecifiedType(TType&, TIntermNode*& nodeList); + bool acceptQualifier(TQualifier&); + bool acceptLayoutQualifierList(TQualifier&); + bool acceptType(TType&); + bool acceptType(TType&, TIntermNode*& nodeList); + bool acceptTemplateVecMatBasicType(TBasicType&); + bool acceptVectorTemplateType(TType&); + bool acceptMatrixTemplateType(TType&); + bool acceptTessellationDeclType(); + bool acceptTessellationPatchTemplateType(TType&); + bool acceptStreamOutTemplateType(TType&, TLayoutGeometry&); + bool acceptOutputPrimitiveGeometry(TLayoutGeometry&); + bool acceptAnnotations(TQualifier&); + bool acceptSamplerType(TType&); + bool acceptTextureType(TType&); + bool acceptStructBufferType(TType&); + bool acceptStruct(TType&, TIntermNode*& nodeList); + bool acceptStructDeclarationList(TTypeList*&, TIntermNode*& nodeList, const TString& typeName, + TVector&); + bool acceptMemberFunctionDefinition(TIntermNode*& nodeList, const TType&, const TString& memberName, + TFunctionDeclarator&); + bool acceptFunctionParameters(TFunction&); + bool acceptParameterDeclaration(TFunction&); + bool acceptFunctionDefinition(TFunctionDeclarator&, TIntermNode*& nodeList, TVector* deferredTokens); + bool acceptFunctionBody(TFunctionDeclarator& declarator, TIntermNode*& nodeList); + bool acceptParenExpression(TIntermTyped*&); + bool acceptExpression(TIntermTyped*&); + bool acceptInitializer(TIntermTyped*&); + bool acceptAssignmentExpression(TIntermTyped*&); + bool acceptConditionalExpression(TIntermTyped*&); + bool acceptBinaryExpression(TIntermTyped*&, PrecedenceLevel); + bool acceptUnaryExpression(TIntermTyped*&); + bool acceptPostfixExpression(TIntermTyped*&); + bool acceptConstructor(TIntermTyped*&); + bool acceptFunctionCall(HlslToken, TIntermTyped*&, TIntermTyped* objectBase = nullptr, + const TSymbol* scope = nullptr); + bool acceptArguments(TFunction*, TIntermTyped*&); + bool acceptLiteral(TIntermTyped*&); + bool acceptCompoundStatement(TIntermNode*&); + bool acceptStatement(TIntermNode*&); + bool acceptScopedStatement(TIntermNode*&); + bool acceptScopedCompoundStatement(TIntermNode*&); + bool acceptNestedStatement(TIntermNode*&); + void acceptAttributes(TAttributeMap&); + bool acceptSelectionStatement(TIntermNode*&); + bool acceptSwitchStatement(TIntermNode*&); + bool acceptIterationStatement(TIntermNode*&); + bool acceptJumpStatement(TIntermNode*&); + bool acceptCaseLabel(TIntermNode*&); + bool acceptDefaultLabel(TIntermNode*&); + void acceptArraySpecifier(TArraySizes*&); + bool acceptPostDecls(TQualifier&); + bool acceptDefaultParameterDeclaration(const TType&, TIntermTyped*&); + + bool captureBlockTokens(TVector& tokens); + + HlslParseContext& parseContext; // state of parsing and helper functions for building the intermediate + TIntermediate& intermediate; // the final product, the intermediate representation, includes the AST + }; + +} // end namespace glslang + +#endif // HLSLGRAMMAR_H_ diff --git a/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslOpMap.cpp b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslOpMap.cpp new file mode 100755 index 0000000..ebe6fbd --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslOpMap.cpp @@ -0,0 +1,173 @@ +// +// Copyright (C) 2016 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 Google, Inc., 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. +// + +// Map from physical token form (e.g. '-') to logical operator +// form (e.g., binary subtract or unary negate). + +#include "hlslOpMap.h" + +namespace glslang { + +// Map parsing tokens that could be assignments into assignment operators. +TOperator HlslOpMap::assignment(EHlslTokenClass op) +{ + switch (op) { + case EHTokAssign: return EOpAssign; + case EHTokMulAssign: return EOpMulAssign; + case EHTokDivAssign: return EOpDivAssign; + case EHTokAddAssign: return EOpAddAssign; + case EHTokModAssign: return EOpModAssign; + case EHTokLeftAssign: return EOpLeftShiftAssign; + case EHTokRightAssign: return EOpRightShiftAssign; + case EHTokAndAssign: return EOpAndAssign; + case EHTokXorAssign: return EOpExclusiveOrAssign; + case EHTokOrAssign: return EOpInclusiveOrAssign; + case EHTokSubAssign: return EOpSubAssign; + + default: + return EOpNull; + } +} + +// Map parsing tokens that could be binary operations into binary operators. +TOperator HlslOpMap::binary(EHlslTokenClass op) +{ + switch (op) { + case EHTokPlus: return EOpAdd; + case EHTokDash: return EOpSub; + case EHTokStar: return EOpMul; + case EHTokSlash: return EOpDiv; + case EHTokPercent: return EOpMod; + case EHTokRightOp: return EOpRightShift; + case EHTokLeftOp: return EOpLeftShift; + case EHTokAmpersand: return EOpAnd; + case EHTokVerticalBar: return EOpInclusiveOr; + case EHTokCaret: return EOpExclusiveOr; + case EHTokEqOp: return EOpEqual; + case EHTokNeOp: return EOpNotEqual; + case EHTokLeftAngle: return EOpLessThan; + case EHTokRightAngle: return EOpGreaterThan; + case EHTokLeOp: return EOpLessThanEqual; + case EHTokGeOp: return EOpGreaterThanEqual; + case EHTokOrOp: return EOpLogicalOr; + case EHTokXorOp: return EOpLogicalXor; + case EHTokAndOp: return EOpLogicalAnd; + + default: + return EOpNull; + } +} + +// Map parsing tokens that could be unary operations into unary operators. +// These are just the ones that can appear in front of its operand. +TOperator HlslOpMap::preUnary(EHlslTokenClass op) +{ + switch (op) { + case EHTokPlus: return EOpAdd; // means no-op, but still a unary op was present + case EHTokDash: return EOpNegative; + case EHTokBang: return EOpLogicalNot; + case EHTokTilde: return EOpBitwiseNot; + + case EHTokIncOp: return EOpPreIncrement; + case EHTokDecOp: return EOpPreDecrement; + + default: return EOpNull; // means not a pre-unary op + } +} + +// Map parsing tokens that could be unary operations into unary operators. +// These are just the ones that can appear behind its operand. +TOperator HlslOpMap::postUnary(EHlslTokenClass op) +{ + switch (op) { + case EHTokDot: return EOpIndexDirectStruct; + case EHTokLeftBracket: return EOpIndexIndirect; + + case EHTokIncOp: return EOpPostIncrement; + case EHTokDecOp: return EOpPostDecrement; + + case EHTokColonColon: return EOpScoping; + + default: return EOpNull; // means not a post-unary op + } +} + +// Map operators into their level of precedence. +PrecedenceLevel HlslOpMap::precedenceLevel(TOperator op) +{ + switch (op) { + case EOpLogicalOr: + return PlLogicalOr; + case EOpLogicalXor: + return PlLogicalXor; + case EOpLogicalAnd: + return PlLogicalAnd; + + case EOpInclusiveOr: + return PlBitwiseOr; + case EOpExclusiveOr: + return PlBitwiseXor; + case EOpAnd: + return PlBitwiseAnd; + + case EOpEqual: + case EOpNotEqual: + return PlEquality; + + case EOpLessThan: + case EOpGreaterThan: + case EOpLessThanEqual: + case EOpGreaterThanEqual: + return PlRelational; + + case EOpRightShift: + case EOpLeftShift: + return PlShift; + + case EOpAdd: + case EOpSub: + return PlAdd; + + case EOpMul: + case EOpDiv: + case EOpMod: + return PlMul; + + default: + return PlBad; + } +} + +} // end namespace glslang diff --git a/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslOpMap.h b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslOpMap.h new file mode 100755 index 0000000..4e783f3 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslOpMap.h @@ -0,0 +1,69 @@ +// +// Copyright (C) 2016 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 Google, Inc., 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. +// + +#ifndef HLSLOPMAP_H_ +#define HLSLOPMAP_H_ + +#include "hlslScanContext.h" + +namespace glslang { + + enum PrecedenceLevel { + PlBad, + PlLogicalOr, + PlLogicalXor, + PlLogicalAnd, + PlBitwiseOr, + PlBitwiseXor, + PlBitwiseAnd, + PlEquality, + PlRelational, + PlShift, + PlAdd, + PlMul + }; + + class HlslOpMap { + public: + static TOperator assignment(EHlslTokenClass op); + static TOperator binary(EHlslTokenClass op); + static TOperator preUnary(EHlslTokenClass op); + static TOperator postUnary(EHlslTokenClass op); + static PrecedenceLevel precedenceLevel(TOperator); + }; + +} // end namespace glslang + +#endif // HLSLOPMAP_H_ diff --git a/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslParseHelper.cpp b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslParseHelper.cpp new file mode 100755 index 0000000..48b94b6 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslParseHelper.cpp @@ -0,0 +1,7637 @@ +// +// Copyright (C) 2016 Google, Inc. +// Copyright (C) 2016 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. +// + +#include "hlslParseHelper.h" +#include "hlslScanContext.h" +#include "hlslGrammar.h" +#include "hlslAttributes.h" + +#include "../glslang/MachineIndependent/Scan.h" +#include "../glslang/MachineIndependent/preprocessor/PpContext.h" + +#include "../glslang/OSDependent/osinclude.h" + +#include +#include +#include +#include +#include + +namespace glslang { + +HlslParseContext::HlslParseContext(TSymbolTable& symbolTable, TIntermediate& interm, bool parsingBuiltins, + 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), + nextInLocation(0), nextOutLocation(0), + sourceEntryPointName(sourceEntryPointName), + entryPointFunction(nullptr), + entryPointFunctionBody(nullptr) +{ + globalUniformDefaults.clear(); + globalUniformDefaults.layoutMatrix = ElmRowMajor; + globalUniformDefaults.layoutPacking = ElpStd140; + + globalBufferDefaults.clear(); + globalBufferDefaults.layoutMatrix = ElmRowMajor; + globalBufferDefaults.layoutPacking = ElpStd430; + + globalInputDefaults.clear(); + globalOutputDefaults.clear(); + + // "Shaders in the transform + // feedback capturing mode have an initial global default of + // layout(xfb_buffer = 0) out;" + if (language == EShLangVertex || + language == EShLangTessControl || + language == EShLangTessEvaluation || + language == EShLangGeometry) + globalOutputDefaults.layoutXfbBuffer = 0; + + if (language == EShLangGeometry) + globalOutputDefaults.layoutStream = 0; + + if (spvVersion.spv == 0 || spvVersion.vulkan == 0) + infoSink.info << "ERROR: HLSL currently only supported when requesting SPIR-V for Vulkan.\n"; +} + +HlslParseContext::~HlslParseContext() +{ +} + +void HlslParseContext::initializeExtensionBehavior() +{ + TParseContextBase::initializeExtensionBehavior(); + + // HLSL allows #line by default. + extensionBehavior[E_GL_GOOGLE_cpp_style_line_directive] = EBhEnable; +} + +void HlslParseContext::setLimits(const TBuiltInResource& r) +{ + resources = r; + intermediate.setLimits(resources); +} + +// +// Parse an array of strings using the parser in HlslRules. +// +// Returns true for successful acceptance of the shader, false if any errors. +// +bool HlslParseContext::parseShaderStrings(TPpContext& ppContext, TInputScanner& input, bool versionWillBeError) +{ + currentScanner = &input; + ppContext.setInput(input, versionWillBeError); + + HlslScanContext scanContext(*this, ppContext); + HlslGrammar grammar(scanContext, *this); + if (!grammar.parse()) { + // 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"; + ++numErrors; + return false; + } + + finish(); + + return numErrors == 0; +} + +// +// Return true if this l-value node should be converted in some manner. +// For instance: turning a load aggregate into a store in an l-value. +// +bool HlslParseContext::shouldConvertLValue(const TIntermNode* node) const +{ + if (node == nullptr) + return false; + + const TIntermAggregate* lhsAsAggregate = node->getAsAggregate(); + const TIntermBinary* lhsAsBinary = node->getAsBinaryNode(); + + // If it's a swizzled/indexed aggregate, look at the left node instead. + 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) +{ + newTypeList = nullptr; + correctUniform(memberType.getQualifier()); + if (memberType.isStruct()) { + auto it = ioTypeMap.find(memberType.getStruct()); + if (it != ioTypeMap.end() && it->second.uniform) + newTypeList = it->second.uniform; + } + TParseContextBase::growGlobalUniformBlock(loc, memberType, memberName, newTypeList); +} + +// +// Return a TLayoutFormat corresponding to the given texture type. +// +TLayoutFormat HlslParseContext::getLayoutFromTxType(const TSourceLoc& loc, const TType& txType) +{ + const int components = txType.getVectorSize(); + + const auto selectFormat = [this,&components](TLayoutFormat v1, TLayoutFormat v2, TLayoutFormat v4) -> TLayoutFormat { + if (intermediate.getNoStorageFormat()) + return ElfNone; + + return components == 1 ? v1 : + components == 2 ? v2 : v4; + }; + + switch (txType.getBasicType()) { + case EbtFloat: return selectFormat(ElfR32f, ElfRg32f, ElfRgba32f); + case EbtInt: return selectFormat(ElfR32i, ElfRg32i, ElfRgba32i); + case EbtUint: return selectFormat(ElfR32ui, ElfRg32ui, ElfRgba32ui); + default: + error(loc, "unknown basic type in image format", "", ""); + return ElfNone; + } +} + +// +// Both test and if necessary, spit out an error, to see if the node is really +// an l-value that can be operated on this way. +// +// Returns true if there was an error. +// +bool HlslParseContext::lValueErrorCheck(const TSourceLoc& loc, const char* op, TIntermTyped* node) +{ + if (shouldConvertLValue(node)) { + // if we're writing to a texture, it must be an RW form. + + TIntermAggregate* lhsAsAggregate = node->getAsAggregate(); + TIntermTyped* object = lhsAsAggregate->getSequence()[0]->getAsTyped(); + + if (!object->getType().getSampler().isImage()) { + error(loc, "operator[] on a non-RW texture must be an r-value", "", ""); + return true; + } + } + + // Let the base class check errors + return TParseContextBase::lValueErrorCheck(loc, op, node); +} + +// +// This function handles l-value conversions and verifications. It uses, but is not synonymous +// with lValueErrorCheck. That function accepts an l-value directly, while this one must be +// given the surrounding tree - e.g, with an assignment, so we can convert the assign into a +// series of other image operations. +// +// Most things are passed through unmodified, except for error checking. +// +TIntermTyped* HlslParseContext::handleLvalue(const TSourceLoc& loc, const char* op, TIntermTyped* node) +{ + if (node == nullptr) + return nullptr; + + TIntermBinary* nodeAsBinary = node->getAsBinaryNode(); + TIntermUnary* nodeAsUnary = node->getAsUnaryNode(); + TIntermAggregate* sequence = nullptr; + + TIntermTyped* lhs = nodeAsUnary ? nodeAsUnary->getOperand() : + nodeAsBinary ? nodeAsBinary->getLeft() : + nullptr; + + // Early bail out if there is no conversion to apply + if (!shouldConvertLValue(lhs)) { + if (lhs != nullptr) + if (lValueErrorCheck(loc, op, lhs)) + return nullptr; + return node; + } + + // *** If we get here, we're going to apply some conversion to an l-value. + + // Helper to create a load. + const auto makeLoad = [&](TIntermSymbol* rhsTmp, TIntermTyped* object, TIntermTyped* coord, const TType& derefType) { + TIntermAggregate* loadOp = new TIntermAggregate(EOpImageLoad); + loadOp->setLoc(loc); + loadOp->getSequence().push_back(object); + loadOp->getSequence().push_back(intermediate.addSymbol(*coord->getAsSymbolNode())); + loadOp->setType(derefType); + + sequence = intermediate.growAggregate(sequence, + intermediate.addAssign(EOpAssign, rhsTmp, loadOp, loc), + loc); + }; + + // Helper to create a store. + const auto makeStore = [&](TIntermTyped* object, TIntermTyped* coord, TIntermSymbol* rhsTmp) { + TIntermAggregate* storeOp = new TIntermAggregate(EOpImageStore); + storeOp->getSequence().push_back(object); + storeOp->getSequence().push_back(coord); + storeOp->getSequence().push_back(intermediate.addSymbol(*rhsTmp)); + storeOp->setLoc(loc); + storeOp->setType(TType(EbtVoid)); + + sequence = intermediate.growAggregate(sequence, storeOp); + }; + + // Helper to create an assign. + const auto makeBinary = [&](TOperator op, TIntermTyped* lhs, TIntermTyped* rhs) { + sequence = intermediate.growAggregate(sequence, + intermediate.addBinaryNode(op, lhs, rhs, loc, lhs->getType()), + loc); + }; + + // Helper to complete sequence by adding trailing variable, so we evaluate to the right value. + const auto finishSequence = [&](TIntermSymbol* rhsTmp, const TType& derefType) -> TIntermAggregate* { + // Add a trailing use of the temp, so the sequence returns the proper value. + sequence = intermediate.growAggregate(sequence, intermediate.addSymbol(*rhsTmp)); + sequence->setOperator(EOpSequence); + sequence->setLoc(loc); + sequence->setType(derefType); + + return sequence; + }; + + // Helper to add unary op + const auto makeUnary = [&](TOperator op, TIntermSymbol* rhsTmp) { + sequence = intermediate.growAggregate(sequence, + intermediate.addUnaryNode(op, intermediate.addSymbol(*rhsTmp), loc, + rhsTmp->getType()), + loc); + }; + + // Return true if swizzle or index writes all components of the given variable. + const auto writesAllComponents = [&](TIntermSymbol* var, TIntermBinary* swizzle) -> bool { + if (swizzle == nullptr) // not a swizzle or index + return true; + + // Track which components are being set. + std::array compIsSet; + compIsSet.fill(false); + + const TIntermConstantUnion* asConst = swizzle->getRight()->getAsConstantUnion(); + const TIntermAggregate* asAggregate = swizzle->getRight()->getAsAggregate(); + + // This could be either a direct index, or a swizzle. + if (asConst) { + compIsSet[asConst->getConstArray()[0].getIConst()] = true; + } else if (asAggregate) { + const TIntermSequence& seq = asAggregate->getSequence(); + for (int comp=0; compgetAsConstantUnion()->getConstArray()[0].getIConst()] = true; + } else { + assert(0); + } + + // Return true if all components are being set by the index or swizzle + return std::all_of(compIsSet.begin(), compIsSet.begin() + var->getType().getVectorSize(), + [](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) + return intermediate.addBinaryNode(swizzle->getOp(), var, swizzle->getRight(), loc, swizzle->getType()); + else + return var; + }; + + TIntermBinary* lhsAsBinary = lhs->getAsBinaryNode(); + TIntermAggregate* lhsAsAggregate = lhs->getAsAggregate(); + bool lhsIsSwizzle = false; + + // If it's a swizzled L-value, remember the swizzle, and use the LHS. + if (lhsAsBinary != nullptr && (lhsAsBinary->getOp() == EOpVectorSwizzle || lhsAsBinary->getOp() == EOpIndexDirect)) { + lhsAsAggregate = lhsAsBinary->getLeft()->getAsAggregate(); + lhsIsSwizzle = true; + } + + TIntermTyped* object = lhsAsAggregate->getSequence()[0]->getAsTyped(); + TIntermTyped* coord = lhsAsAggregate->getSequence()[1]->getAsTyped(); + + const TSampler& texSampler = object->getType().getSampler(); + + const TType objDerefType(texSampler.type, EvqTemporary, texSampler.vectorSize); + + if (nodeAsBinary) { + TIntermTyped* rhs = nodeAsBinary->getRight(); + const TOperator assignOp = nodeAsBinary->getOp(); + + bool isModifyOp = false; + + switch (assignOp) { + case EOpAddAssign: + case EOpSubAssign: + case EOpMulAssign: + case EOpVectorTimesMatrixAssign: + case EOpVectorTimesScalarAssign: + case EOpMatrixTimesScalarAssign: + case EOpMatrixTimesMatrixAssign: + case EOpDivAssign: + case EOpModAssign: + case EOpAndAssign: + case EOpInclusiveOrAssign: + case EOpExclusiveOrAssign: + case EOpLeftShiftAssign: + case EOpRightShiftAssign: + isModifyOp = true; + // 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): + // 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: + // OpSequence + // rhsTmp = rhs + // OpImageStore(object, coord, rhsTmp) + // rhsTmp + // If this is a read-modify-write op, like +=, we issue: + // OpSequence + // coordtmp = load's param1 + // rhsTmp = OpImageLoad(object, coordTmp) + // rhsTmp op= rhs + // OpImageStore(object, coordTmp, rhsTmp) + // rhsTmp + // + // If the lvalue is swizzled, we apply that when writing the temp variable, like so: + // ... + // rhsTmp.some_swizzle = ... + // For partial writes, an error is generated. + + TIntermSymbol* rhsTmp = rhs->getAsSymbolNode(); + TIntermTyped* coordTmp = coord; + + if (rhsTmp == nullptr || isModifyOp || lhsIsSwizzle) { + rhsTmp = addTmpVar("storeTemp", objDerefType); + + // Partial updates not yet supported + if (!writesAllComponents(rhsTmp, lhsAsBinary)) { + error(loc, "unimplemented: partial image updates", "", ""); + } + + // 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()); + makeBinary(EOpAssign, coordTmp, coord); // coordtmp = load[param1] + makeLoad(rhsTmp, object, coordTmp, objDerefType); // rhsTmp = OpImageLoad(object, coordTmp) + } + + // rhsTmp op= rhs. + makeBinary(assignOp, addSwizzle(intermediate.addSymbol(*rhsTmp), lhsAsBinary), rhs); + } + + makeStore(object, coordTmp, rhsTmp); // add a store + return finishSequence(rhsTmp, objDerefType); // return rhsTmp from sequence + } + + default: + break; + } + } + + if (nodeAsUnary) { + const TOperator assignOp = nodeAsUnary->getOp(); + + switch (assignOp) { + case EOpPreIncrement: + case EOpPreDecrement: + { + // We turn this into: + // OpSequence + // coordtmp = load's param1 + // rhsTmp = OpImageLoad(object, coordTmp) + // rhsTmp op + // OpImageStore(object, coordTmp, rhsTmp) + // rhsTmp + + TIntermSymbol* rhsTmp = addTmpVar("storeTemp", objDerefType); + TIntermTyped* coordTmp = addTmpVar("coordTemp", coord->getType()); + + makeBinary(EOpAssign, coordTmp, coord); // coordtmp = load[param1] + makeLoad(rhsTmp, object, coordTmp, objDerefType); // rhsTmp = OpImageLoad(object, coordTmp) + makeUnary(assignOp, rhsTmp); // op rhsTmp + makeStore(object, coordTmp, rhsTmp); // OpImageStore(object, coordTmp, rhsTmp) + return finishSequence(rhsTmp, objDerefType); // return rhsTmp from sequence + } + + case EOpPostIncrement: + case EOpPostDecrement: + { + // We turn this into: + // OpSequence + // coordtmp = load's param1 + // rhsTmp1 = OpImageLoad(object, coordTmp) + // rhsTmp2 = rhsTmp1 + // 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()); + + makeBinary(EOpAssign, coordTmp, coord); // coordtmp = load[param1] + makeLoad(rhsTmp1, object, coordTmp, objDerefType); // rhsTmp1 = OpImageLoad(object, coordTmp) + makeBinary(EOpAssign, rhsTmp2, rhsTmp1); // rhsTmp2 = rhsTmp1 + makeUnary(assignOp, rhsTmp2); // rhsTmp op + makeStore(object, coordTmp, rhsTmp2); // OpImageStore(object, coordTmp, rhsTmp2) + return finishSequence(rhsTmp1, objDerefType); // return rhsTmp from sequence + } + + default: + break; + } + } + + if (lhs) + if (lValueErrorCheck(loc, op, lhs)) + return nullptr; + + return node; +} + +void HlslParseContext::handlePragma(const TSourceLoc& loc, const TVector& tokens) +{ + if (pragmaCallback) + pragmaCallback(loc.line, tokens); + + if (tokens.size() == 0) + return; +} + +// +// Look at a '.' matrix selector string and change it into components +// for a matrix. There are two types: +// +// _21 second row, first column (one based) +// _m21 third row, second column (zero based) +// +// Returns true if there is no error. +// +bool HlslParseContext::parseMatrixSwizzleSelector(const TSourceLoc& loc, const TString& fields, int cols, int rows, + TSwizzleSelectors& components) +{ + int startPos[MaxSwizzleSelectors]; + int numComps = 0; + TString compString = fields; + + // Find where each component starts, + // recording the first character position after the '_'. + for (size_t c = 0; c < compString.size(); ++c) { + if (compString[c] == '_') { + if (numComps >= MaxSwizzleSelectors) { + error(loc, "matrix component swizzle has too many components", compString.c_str(), ""); + return false; + } + if (c > compString.size() - 3 || + ((compString[c+1] == 'm' || compString[c+1] == 'M') && c > compString.size() - 4)) { + error(loc, "matrix component swizzle missing", compString.c_str(), ""); + return false; + } + startPos[numComps++] = (int)c + 1; + } + } + + // Process each component + for (int i = 0; i < numComps; ++i) { + int pos = startPos[i]; + int bias = -1; + if (compString[pos] == 'm' || compString[pos] == 'M') { + bias = 0; + ++pos; + } + TMatrixSelector comp; + comp.coord1 = compString[pos+0] - '0' + bias; + comp.coord2 = compString[pos+1] - '0' + bias; + if (comp.coord1 < 0 || comp.coord1 >= cols) { + error(loc, "matrix row component out of range", compString.c_str(), ""); + return false; + } + if (comp.coord2 < 0 || comp.coord2 >= rows) { + error(loc, "matrix column component out of range", compString.c_str(), ""); + return false; + } + components.push_back(comp); + } + + return true; +} + +// If the 'comps' express a column of a matrix, +// return the column. Column means the first coords all match. +// +// Otherwise, return -1. +// +int HlslParseContext::getMatrixComponentsColumn(int rows, const TSwizzleSelectors& selector) +{ + int col = -1; + + // right number of comps? + if (selector.size() != rows) + return -1; + + // all comps in the same column? + // rows in order? + col = selector[0].coord1; + for (int i = 0; i < rows; ++i) { + if (col != selector[i].coord1) + return -1; + if (i != selector[i].coord2) + return -1; + } + + return col; +} + +// +// Handle seeing a variable identifier in the grammar. +// +TIntermTyped* HlslParseContext::handleVariable(const TSourceLoc& loc, const TString* string) +{ + int thisDepth; + TSymbol* symbol = symbolTable.find(*string, thisDepth); + if (symbol && symbol->getAsVariable() && symbol->getAsVariable()->isUserType()) { + error(loc, "expected symbol, not user-defined type", string->c_str(), ""); + return nullptr; + } + + // Error check for requiring specific extensions present. + if (symbol && symbol->getNumExtensions()) + requireExtensions(loc, symbol->getNumExtensions(), symbol->getExtensions(), symbol->getName().c_str()); + + const TVariable* variable = nullptr; + const TAnonMember* anon = symbol ? symbol->getAsAnonMember() : nullptr; + TIntermTyped* node = nullptr; + if (anon) { + // It was a member of an anonymous container, which could be a 'this' structure. + + // Create a subtree for its dereference. + if (thisDepth > 0) { + variable = getImplicitThis(thisDepth); + if (variable == nullptr) + error(loc, "cannot access member variables (static member function?)", "this", ""); + } + if (variable == nullptr) + variable = anon->getAnonContainer().getAsVariable(); + + TIntermTyped* container = intermediate.addSymbol(*variable, loc); + TIntermTyped* constNode = intermediate.addConstantUnion(anon->getMemberNumber(), loc); + node = intermediate.addIndex(EOpIndexDirectStruct, container, constNode, loc); + + node->setType(*(*variable->getType().getStruct())[anon->getMemberNumber()].type); + if (node->getType().hiddenMember()) + error(loc, "member of nameless block was not redeclared", string->c_str(), ""); + } else { + // Not a member of an anonymous container. + + // The symbol table search was done in the lexical phase. + // See if it was a variable. + variable = symbol ? symbol->getAsVariable() : nullptr; + if (variable) { + if ((variable->getType().getBasicType() == EbtBlock || + variable->getType().getBasicType() == EbtStruct) && variable->getType().getStruct() == nullptr) { + error(loc, "cannot be used (maybe an instance name is needed)", string->c_str(), ""); + variable = nullptr; + } + } else { + if (symbol) + error(loc, "variable name expected", string->c_str(), ""); + } + + // Recovery, if it wasn't found or was not a variable. + if (! variable) { + error(loc, "unknown variable", string->c_str(), ""); + variable = new TVariable(string, TType(EbtVoid)); + } + + if (variable->getType().getQualifier().isFrontEndConstant()) + node = intermediate.addConstantUnion(variable->getConstArray(), variable->getType(), loc); + else + node = intermediate.addSymbol(*variable, loc); + } + + if (variable->getType().getQualifier().isIo()) + intermediate.addIoAccessed(*string); + + return node; +} + +// +// Handle operator[] on any objects it applies to. Currently: +// Textures +// Buffers +// +TIntermTyped* HlslParseContext::handleBracketOperator(const TSourceLoc& loc, TIntermTyped* base, TIntermTyped* index) +{ + // handle r-value operator[] on textures and images. l-values will be processed later. + 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)); + + return load; + } + } + + // Handle operator[] on structured buffers: this indexes into the array element of the buffer. + // indexStructBufferContent returns nullptr if it isn't a structuredbuffer (SSBO). + TIntermTyped* sbArray = indexStructBufferContent(loc, base); + if (sbArray != nullptr) { + if (sbArray == nullptr) + return nullptr; + + // Now we'll apply the [] index to that array + const TOperator idxOp = (index->getQualifier().storage == EvqConst) ? EOpIndexDirect : EOpIndexIndirect; + + TIntermTyped* element = intermediate.addIndex(idxOp, sbArray, index, loc); + const TType derefType(sbArray->getType(), 0); + element->setType(derefType); + return element; + } + + return nullptr; +} + +// +// Handle seeing a base[index] dereference in the grammar. +// +TIntermTyped* HlslParseContext::handleBracketDereference(const TSourceLoc& loc, TIntermTyped* base, TIntermTyped* index) +{ + TIntermTyped* result = handleBracketOperator(loc, base, index); + + if (result != nullptr) + return result; // it was handled as an operator[] + + bool flattened = false; + int indexValue = 0; + if (index->getQualifier().storage == EvqConst) { + 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(), ""); + 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) + return intermediate.foldDereference(base, indexValue, loc); + else { + // at least one of base and index is variable... + + if (base->getAsSymbolNode() && (wasFlattened(base) || shouldFlattenUniform(base->getType()))) { + 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 (base->getType().isImplicitlySizedArray()) + updateImplicitArraySize(loc, base, indexValue); + result = intermediate.addIndex(EOpIndexDirect, base, index, loc); + } else { + result = intermediate.addIndex(EOpIndexIndirect, base, index, loc); + } + } + } + + if (result == nullptr) { + // Insert dummy error-recovery result + result = intermediate.addConstantUnion(0.0, EbtFloat, loc); + } else { + // If the array reference was flattened, it has the correct type. E.g, if it was + // a uniform array, it was flattened INTO a set of scalar uniforms, not scalar temps. + // In that case, we preserve the qualifiers. + if (!flattened) { + // Insert valid dereferenced result + TType newType(base->getType(), 0); // dereferenced type + if (base->getType().getQualifier().storage == EvqConst && index->getQualifier().storage == EvqConst) + newType.getQualifier().storage = EvqConst; + else + newType.getQualifier().storage = EvqTemporary; + result->setType(newType); + } + } + + 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* result = intermediate.addBinaryMath(op, left, right, loc); + if (! result) + 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* result = intermediate.addUnaryMath(op, childNode, loc); + + if (result) + return result; + else + unaryOpError(loc, str, childNode->getCompleteString()); + + return childNode; +} +// +// Return true if the name is a struct buffer method +// +bool HlslParseContext::isStructBufferMethod(const TString& name) const +{ + return + name == "GetDimensions" || + name == "Load" || + name == "Load2" || + name == "Load3" || + name == "Load4" || + name == "Store" || + name == "Store2" || + name == "Store3" || + name == "Store4" || + name == "InterlockedAdd" || + name == "InterlockedAnd" || + name == "InterlockedCompareExchange" || + name == "InterlockedCompareStore" || + name == "InterlockedExchange" || + name == "InterlockedMax" || + name == "InterlockedMin" || + name == "InterlockedOr" || + name == "InterlockedXor"; +} + +// +// Handle seeing a base.field dereference in the grammar, where 'field' is a +// swizzle or member variable. +// +TIntermTyped* HlslParseContext::handleDotDereference(const TSourceLoc& loc, TIntermTyped* base, const TString& field) +{ + variableCheck(base); + + if (base->isArray()) { + error(loc, "cannot apply to an array:", ".", field.c_str()); + return base; + } + + TIntermTyped* result = base; + if (base->isVector() || base->isScalar()) { + TSwizzleSelectors selectors; + parseSwizzleSelector(loc, field, base->getVectorSize(), selectors); + + if (base->isScalar()) { + if (selectors.size() == 1) + return result; + else { + TType type(base->getBasicType(), EvqTemporary, selectors.size()); + return addConstructor(loc, base, type); + } + } + if (base->getVectorSize() == 1) { + TType scalarType(base->getBasicType(), EvqTemporary, 1); + if (selectors.size() == 1) + return addConstructor(loc, base, scalarType); + else { + TType vectorType(base->getBasicType(), EvqTemporary, selectors.size()); + return addConstructor(loc, addConstructor(loc, base, scalarType), vectorType); + } + } + + if (base->getType().getQualifier().isFrontEndConstant()) + result = intermediate.foldSwizzle(base, selectors, loc); + else { + if (selectors.size() == 1) { + TIntermTyped* index = intermediate.addConstantUnion(selectors[0], loc); + result = intermediate.addIndex(EOpIndexDirect, base, index, loc); + result->setType(TType(base->getBasicType(), EvqTemporary)); + } 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())); + } + } + } else if (base->isMatrix()) { + TSwizzleSelectors selectors; + if (! parseMatrixSwizzleSelector(loc, field, base->getMatrixCols(), base->getMatrixRows(), selectors)) + return result; + + if (selectors.size() == 1) { + // Representable by m[c][r] + if (base->getType().getQualifier().isFrontEndConstant()) { + 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); + TType dereferencedCol(base->getType(), 0); + result->setType(dereferencedCol); + result = intermediate.addIndex(EOpIndexDirect, result, intermediate.addConstantUnion(selectors[0].coord2, loc), loc); + TType dereferenced(dereferencedCol, 0); + result->setType(dereferenced); + } + } else { + int column = getMatrixComponentsColumn(base->getMatrixRows(), selectors); + if (column >= 0) { + // Representable by m[c] + if (base->getType().getQualifier().isFrontEndConstant()) + result = intermediate.foldDereference(base, column, loc); + else { + result = intermediate.addIndex(EOpIndexDirect, base, intermediate.addConstantUnion(column, loc), loc); + TType dereferenced(base->getType(), 0); + result->setType(dereferenced); + } + } else { + // 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())); + } + } + } else if (base->getBasicType() == EbtStruct || base->getBasicType() == EbtBlock) { + const TTypeList* fields = base->getType().getStruct(); + bool fieldFound = false; + int member; + for (member = 0; member < (int)fields->size(); ++member) { + if ((*fields)[member].type->getFieldName() == field) { + fieldFound = true; + break; + } + } + if (fieldFound) { + if (base->getAsSymbolNode() && (wasFlattened(base) || shouldFlattenUniform(base->getType()))) { + 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); + } + } + } + } else + error(loc, "no such field in structure", field.c_str(), ""); + } else + error(loc, "does not apply to this type:", field.c_str(), base->getType().getCompleteString().c_str()); + + return result; +} + +// +// Return true if the field should be treated as a built-in method. +// Return false otherwise. +// +bool HlslParseContext::isBuiltInMethod(const TSourceLoc&, TIntermTyped* base, const TString& field) +{ + if (base == nullptr) + return false; + + variableCheck(base); + + if (base->getType().getBasicType() == EbtSampler) { + return true; + } else if (isStructBufferType(base->getType()) && isStructBufferMethod(field)) { + return true; + } else if (field == "Append" || + field == "RestartStrip") { + // We cannot check the type here: it may be sanitized if we're not compiling a geometry shader, but + // the code is around in the shader source. + return true; + } else + 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) +{ + if (node == nullptr) + return; + + TIntermSymbol* symNode = node->getAsSymbolNode(); + + if (symNode == nullptr) + return; + + // Create a new variable: + TType& splitType = split(*symNode->getType().clone(), symNode->getName()); + + splitIoVars[symNode->getId()] = makeInternalVariable(symNode->getName(), splitType); +} + +// Split the type of the given variable into two structs: +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); +} + +// Recursive implementation of split(const TVariable& variable). +// Returns reference to the modified type. +TType& HlslParseContext::split(TType& type, TString name, const TType* outerStructType) +{ + 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()); + } + + // 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 +{ + const TStorageQualifier qualifier = type.getQualifier().storage; + + return qualifier == EvqUniform && + ((type.isArray() && intermediate.getFlattenUniformArrays()) || type.isStruct()) && + type.containsOpaque(); +} + +// Top level variable flattening: construct data +void HlslParseContext::flatten(const TSourceLoc& loc, const TVariable& variable) +{ + const TType& type = variable.getType(); + + auto entry = flattenMap.insert(std::make_pair(variable.getUniqueId(), + TFlattenData(type.getQualifier().layoutBinding))); + + // the item is a map pair, so first->second is the TFlattenData itself. + flatten(loc, variable, type, entry.first->second, ""); +} + +// Recursively flatten the given variable at the provided type, building the flattenData as we go. +// +// This is mutually recursive with flattenStruct and flattenArray. +// We are going to flatten an arbitrarily nested composite structure into a linear sequence of +// members, and later on, we want to turn a path through the tree structure into a final +// location in this linear sequence. +// +// If the tree was N-ary, that can be directly calculated. However, we are dealing with +// arbitrary numbers - perhaps a struct of 7 members containing an array of 3. Thus, we must +// build a data structure to allow the sequence of bracket and dot operators on arrays and +// structs to arrive at the proper member. +// +// To avoid storing a tree with pointers, we are going to flatten the tree into a vector of integers. +// The leaves are the indexes into the flattened member array. +// Each level will have the next location for the Nth item stored sequentially, so for instance: +// +// struct { float2 a[2]; int b; float4 c[3] }; +// +// This will produce the following flattened tree: +// Pos: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 +// (3, 7, 8, 5, 6, 0, 1, 2, 11, 12, 13, 3, 4, 5} +// +// Given a reference to mystruct.c[1], the access chain is (2,1), so we traverse: +// (0+2) = 8 --> (8+1) = 12 --> 12 = 4 +// +// 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) +{ + // 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); + else if (type.isStruct()) + return flattenStruct(loc, variable, type, flattenData, name); + else { + assert(0); // should never happen + return -1; + } +} + +// 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) +{ + if (isFinalFlattening(type)) { + // This is as far as we flatten. Insert the variable. + TVariable* memberVariable = makeInternalVariable(memberName, type); + mergeQualifiers(memberVariable->getWritableType().getQualifier(), variable.getType().getQualifier()); + + if (flattenData.nextBinding != TQualifier::layoutBindingEnd) + memberVariable->getWritableType().getQualifier().layoutBinding = flattenData.nextBinding++; + + flattenData.offsets.push_back(static_cast(flattenData.members.size())); + flattenData.members.push_back(memberVariable); + + if (track) + trackLinkage(*memberVariable); + + return static_cast(flattenData.offsets.size())-1; // location of the member reference + } else { + // Further recursion required + return flatten(loc, variable, type, flattenData, memberName); + } +} + +// Figure out the mapping between an aggregate's top members and an +// 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) +{ + assert(type.isStruct()); + + auto members = *type.getStruct(); + + // Reserve space for this tree level. + int start = static_cast(flattenData.offsets.size()); + 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; + } + + return start; +} + +// Figure out mapping between an array's members and an +// 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) +{ + assert(type.isArray()); + + if (type.isImplicitlySizedArray()) + error(loc, "cannot flatten implicitly sized array", variable.getName().c_str(), ""); + + const int size = type.getOuterArraySize(); + const TType dereferencedType(type, 0); + + if (name.empty()) + name = variable.getName(); + + // Reserve space for this tree level. + int start = static_cast(flattenData.offsets.size()); + int pos = start; + flattenData.offsets.resize(int(pos + size), -1); + + 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); + + flattenData.offsets[pos++] = mpos; + } + + return start; +} + +// Return true if we have flattened this node. +bool HlslParseContext::wasFlattened(const TIntermTyped* node) const +{ + return node != nullptr && node->getAsSymbolNode() != nullptr && + 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()); +} + +// 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. +TIntermTyped* HlslParseContext::flattenAccess(TIntermTyped* base, int member) +{ + const TType dereferencedType(base->getType(), member); // dereferenced type + + const TIntermSymbol& symbolNode = *base->getAsSymbolNode(); + + const auto flattenData = flattenMap.find(symbolNode.getId()); + + if (flattenData == flattenMap.end()) + return base; + + // Calculate new cumulative offset from the packed tree + flattenOffset.back() = flattenData->second.offsets[flattenOffset.back() + member]; + + if (isFinalFlattening(dereferencedType)) { + // Finished flattening: create symbol for variable + member = flattenData->second.offsets[flattenOffset.back()]; + const TVariable* memberVariable = flattenData->second.members[member]; + return intermediate.addSymbol(*memberVariable); + } 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); + } +} + +// Find and return the split IO TVariable for id, or nullptr if none. +TVariable* HlslParseContext::getSplitIoVar(int id) const +{ + const auto splitIoVar = splitIoVars.find(id); + + if (splitIoVar == splitIoVars.end()) + return nullptr; + + return splitIoVar->second; +} + +// 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 getSplitIoVar(var->getUniqueId()); +} + +// Find and return the split IO TVariable for symbol in this node, or nullptr if none. +TVariable* HlslParseContext::getSplitIoVar(const TIntermTyped* node) const +{ + if (node == nullptr) + return nullptr; + + const TIntermSymbol* symbolNode = node->getAsSymbolNode(); + + if (symbolNode == nullptr) + return nullptr; + + return getSplitIoVar(symbolNode->getId()); +} + +// 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) +{ + const TVariable* splitIoVar = getSplitIoVar(base); + + // Not a split structure + if (splitIoVar == nullptr) + return; + + if (builtInIoBase) { + error(loc, "only one array dimension supported for builtIn IO variable", "", ""); + return; + } + + builtInIoBase = base; + builtInIoIndex = index; +} + +// 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(); + + const TType& memberType = *members[member].type; + + 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); + + // 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); + + builtIn->setType(memberType); + + builtInIoIndex = nullptr; + builtInIoBase = nullptr; + } + + 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; misBuiltInInterstageIO(language)) + ++newMember; + + member = newMember; + + return nullptr; + } +} + +// 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); +} + + +// 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). +// +// Assumes it is called in the order in which locations should be assigned. +void HlslParseContext::assignLocations(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()); + } + } + + trackLinkage(variable); + } + }; + + if (wasFlattened(variable.getUniqueId())) { + auto& memberList = flattenMap[variable.getUniqueId()].members; + for (auto member = memberList.begin(); member != memberList.end(); ++member) + assignLocation(**member); + } else if (wasSplit(variable.getUniqueId())) { + TVariable* splitIoVar = getSplitIoVar(&variable); + assignLocation(*splitIoVar); + } else { + assignLocation(variable); + } +} + +// +// Handle seeing a function declarator in the grammar. This is the precursor +// to recognizing a function prototype or function definition. +// +void HlslParseContext::handleFunctionDeclarator(const TSourceLoc& loc, TFunction& function, bool prototype) +{ + // + // Multiple declarations of the same function name are allowed. + // + // If this is a definition, the definition production code will check for redefinitions + // (we don't know at this point if it's a definition or not). + // + bool builtIn; + TSymbol* symbol = symbolTable.find(function.getMangledName(), &builtIn); + const TFunction* prevDec = symbol ? symbol->getAsFunction() : 0; + + if (prototype) { + // All built-in functions are defined, even though they don't have a body. + // Count their prototype as a definition instead. + if (symbolTable.atBuiltInLevel()) + function.setDefined(); + else { + if (prevDec && ! builtIn) + symbol->getAsFunction()->setPrototyped(); // need a writable one, but like having prevDec as a const + function.setPrototyped(); + } + } + + // This insert won't actually insert it if it's a duplicate signature, but it will still check for + // other forms of name collisions. + if (! symbolTable.insert(function)) + 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() +{ + TSourceLoc loc; + loc.init(); + + std::vector io; + io.reserve(interstageBuiltInIo.size()); + + for (auto ioVar = interstageBuiltInIo.begin(); ioVar != interstageBuiltInIo.end(); ++ioVar) + io.push_back(ioVar->first); + + // Our canonical order is the TBuiltInVariable numeric order. + std::sort(io.begin(), io.end()); + + // 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]]; + + // Add the loose interstage IO to the linkage + if (var->getType().isLooseAndBuiltIn(language)) + trackLinkage(*var); + } +} + +// +// Handle seeing the function prototype in front of a function definition in the grammar. +// The body is handled after this function returns. +// +// Returns an aggregate of parameter-symbol nodes. +// +TIntermAggregate* HlslParseContext::handleFunctionDefinition(const TSourceLoc& loc, TFunction& function, + const TAttributeMap& attributes, TIntermNode*& entryPointTree) +{ + currentCaller = function.getMangledName(); + TSymbol* symbol = symbolTable.find(function.getMangledName()); + TFunction* prevDec = symbol ? symbol->getAsFunction() : nullptr; + + if (! prevDec) + 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 + // an earlier occurrence. + + if (prevDec && prevDec->isDefined()) { + // Then this function already has a body. + error(loc, "function already has a body", function.getName().c_str(), ""); + } + if (prevDec && ! prevDec->isDefined()) { + prevDec->setDefined(); + + // Remember the return type for later checking for RETURN statements. + currentFunctionType = &(prevDec->getType()); + } else + currentFunctionType = new TType(EbtVoid); + functionReturnsValue = false; + + // Entry points need different I/O and other handling, transform it so the + // rest of this function doesn't care. + entryPointTree = transformEntryPoint(loc, function, attributes); + + // + // New symbol table scope for body of function plus its arguments + // + pushScope(); + + // + // Insert parameters into the symbol table. + // If the parameter has no name, it's not an error, just don't insert it + // (could be used for unused args). + // + // Also, accumulate the list of parameters into the AST, so lower level code + // knows where to find parameters. + // + TIntermAggregate* paramNodes = new TIntermAggregate; + for (int i = 0; i < function.getParamCount(); i++) { + TParameter& param = function[i]; + if (param.name != nullptr) { + TVariable *variable = new TVariable(param.name, *param.type); + + if (i == 0 && function.hasImplicitThis()) { + // Anonymous 'this' members are already in a symbol-table level, + // and we need to know what function parameter to map them to. + 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); + } else + paramNodes = intermediate.growAggregate(paramNodes, intermediate.addSymbol(*param.type, loc), loc); + } + if (function.hasIllegalImplicitThis()) + pushImplicitThis(nullptr); + + intermediate.setAggregateOperator(paramNodes, EOpParameters, TType(EbtVoid), loc); + loopNestingLevel = 0; + controlFlowNestingLevel = 0; + postEntryPointReturn = false; + + 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...; +// out oargs ...; +// +// void shaderEntryPoint() // synthesized, but official, entry point +// { +// args = iargs...; +// ret = @shaderEntryPoint(args...); +// oargs = args...; +// } +// +// 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) +{ + // 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) { + const TIntermSequence& sequence = numThreads->getSequence(); + + for (int lid = 0; lid < int(sequence.size()); ++lid) + intermediate.setLocalSize(lid, sequence[lid]->getAsConstantUnion()->getConstArray()[0].getIConst()); + } + + // 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", "", ""); + } + } + + // Handle [patchconstantfunction("...")] + const TIntermAggregate* pcfAttr = attributes[EatPatchConstantFunc]; + if (pcfAttr != nullptr) { + const TConstUnion& pcfName = pcfAttr->getSequence()[0]->getAsConstantUnion()->getConstArray()[0]; + + if (pcfName.getType() != EbtString) { + error(loc, "invalid patch constant function", "", ""); + } else { + patchConstantFunctionName = *pcfName.getSConst(); + } + } + + // Handle [domain("...")] + const TIntermAggregate* domainAttr = attributes[EatDomain]; + if (domainAttr != nullptr) { + const TConstUnion& domainType = domainAttr->getSequence()[0]->getAsConstantUnion()->getConstArray()[0]; + if (domainType.getType() != EbtString) { + error(loc, "invalid domain", "", ""); + } else { + TString domainStr = *domainType.getSConst(); + std::transform(domainStr.begin(), domainStr.end(), domainStr.begin(), ::tolower); + + TLayoutGeometry domain = ElgNone; + + if (domainStr == "tri") { + domain = ElgTriangles; + } else if (domainStr == "quad") { + domain = ElgQuads; + } else if (domainStr == "isoline") { + domain = ElgIsolines; + } else { + error(loc, "unsupported domain type", domainStr.c_str(), ""); + } + + if (! intermediate.setInputPrimitive(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", "", ""); + } else { + TString topologyStr = *topoType.getSConst(); + std::transform(topologyStr.begin(), topologyStr.end(), topologyStr.begin(), ::tolower); + + TVertexOrder topology = EvoNone; + + if (topologyStr == "point") { + topology = EvoNone; + } else if (topologyStr == "line") { + topology = EvoNone; + } else if (topologyStr == "triangle_cw") { + topology = EvoCw; + } else if (topologyStr == "triangle_ccw") { + topology = EvoCcw; + } else { + error(loc, "unsupported outputtoplogy type", topologyStr.c_str(), ""); + } + + if (topology != EvoNone) { + if (! intermediate.setVertexOrder(topology)) { + error(loc, "cannot change previously set outputtopology", TQualifier::getVertexOrderString(topology), ""); + } + } + } + } + + // Handle [partitioning("...")] + const TIntermAggregate* partitionAttr = attributes[EatPartitioning]; + if (partitionAttr != nullptr) { + const TConstUnion& partType = partitionAttr->getSequence()[0]->getAsConstantUnion()->getConstArray()[0]; + if (partType.getType() != EbtString) { + error(loc, "invalid partitioning", "", ""); + } else { + TString partitionStr = *partType.getSConst(); + std::transform(partitionStr.begin(), partitionStr.end(), partitionStr.begin(), ::tolower); + + TVertexSpacing partitioning = EvsNone; + + if (partitionStr == "integer") { + partitioning = EvsEqual; + } else if (partitionStr == "fractional_even") { + partitioning = EvsFractionalEven; + } else if (partitionStr == "fractional_odd") { + partitioning = EvsFractionalOdd; + //} else if (partition == "pow2") { // TODO: currently nothing to map this to. + } else { + error(loc, "unsupported partitioning type", partitionStr.c_str(), ""); + } + + if (! intermediate.setVertexSpacing(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) { + error(loc, "invalid outputcontrolpoints", "", ""); + } else { + const int ctrlPoints = ctrlPointConst.getIConst(); + if (! intermediate.setVertices(ctrlPoints)) { + error(loc, "cannot change previously set outputcontrolpoints attribute", "", ""); + } + } + } + + // Move parameters and return value to shader in/out + TVariable* entryPointOutput; // gets created in remapEntryPointIO + TVector inputs; + TVector outputs; + remapEntryPointIO(userFunction, entryPointOutput, inputs, outputs); + + // 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 (entryPointOutput) + makeVariableInOut(*entryPointOutput); + for (auto it = inputs.begin(); it != inputs.end(); ++it) + makeVariableInOut(*(*it)); + for (auto it = outputs.begin(); it != outputs.end(); ++it) + makeVariableInOut(*(*it)); + + // Synthesize the call + + pushScope(); // matches the one in handleFunctionBody() + + // new signature + TType voidType(EbtVoid); + TFunction synthEntryPoint(&userFunction.getName(), voidType); + TIntermAggregate* synthParams = new TIntermAggregate(); + intermediate.setAggregateOperator(synthParams, EOpParameters, voidType, loc); + intermediate.setEntryPointMangledName(synthEntryPoint.getMangledName().c_str()); + intermediate.incrementEntryPointCount(); + TFunction callee(&userFunction.getName(), voidType); // call based on old name, which is still in the symbol table + + // change original name + userFunction.addPrefix("@"); // change the name in the function, but not in the symbol table + + // Copy inputs (shader-in -> calling arg), while building up the call node + TVector argVars; + 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(); + TIntermSymbol* arg = intermediate.addSymbol(*argVars.back()); + handleFunctionArgument(&callee, callingArgs, arg); + if (param.type->getQualifier().isParamInput()) { + intermediate.growAggregate(synthBody, handleAssign(loc, EOpAssign, arg, + intermediate.addSymbol(**inputIt))); + inputIt++; + } + } + + // Call + currentCaller = synthEntryPoint.getMangledName(); + TIntermTyped* callReturn = handleFunctionCall(loc, &callee, callingArgs); + currentCaller = userFunction.getMangledName(); + + // Return value + if (entryPointOutput) + intermediate.growAggregate(synthBody, handleAssign(loc, EOpAssign, + intermediate.addSymbol(*entryPointOutput), callReturn)); + else + intermediate.growAggregate(synthBody, callReturn); + + // Output copies + auto outputIt = outputs.begin(); + for (int i = 0; i < userFunction.getParamCount(); i++) { + TParameter& param = userFunction[i]; + if (param.type->getQualifier().isParamOutput()) { + intermediate.growAggregate(synthBody, handleAssign(loc, EOpAssign, + intermediate.addSymbol(**outputIt), + intermediate.addSymbol(*argVars[i]))); + outputIt++; + } + } + + // Put the pieces together to form a full function subtree + // for the synthesized entry point. + synthBody->setOperator(EOpSequence); + TIntermNode* synthFunctionDef = synthParams; + handleFunctionBody(loc, synthEntryPoint, synthBody, synthFunctionDef); + + entryPointFunctionBody = synthBody; + + return synthFunctionDef; +} + +void HlslParseContext::handleFunctionBody(const TSourceLoc& loc, TFunction& function, TIntermNode* functionBody, TIntermNode*& node) +{ + node = intermediate.growAggregate(node, functionBody); + intermediate.setAggregateOperator(node, EOpFunction, function.getType(), loc); + node->getAsAggregate()->setName(function.getMangledName().c_str()); + + popScope(); + if (function.hasImplicitThis()) + popImplicitThis(); + + if (function.getType().getBasicType() != EbtVoid && ! functionReturnsValue) + error(loc, "function does not return a value:", "", function.getName().c_str()); +} + +// AST I/O is done through shader globals declared in the 'in' or 'out' +// storage class. An HLSL entry point has a return value, input parameters +// and output parameters. These need to get remapped to the AST I/O. +void HlslParseContext::remapEntryPointIO(TFunction& function, TVariable*& returnValue, + TVector& inputs, TVector& outputs) +{ + // 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) { + auto newLists = ioTypeMap.find(ioVariable->getType().getStruct()); + if (newLists != ioTypeMap.end()) { + if (storage == EvqVaryingIn && newLists->second.input) + ioVariable->getWritableType().setStruct(newLists->second.input); + else if (storage == EvqVaryingOut && newLists->second.output) + ioVariable->getWritableType().setStruct(newLists->second.output); + } + } + if (storage == EvqVaryingIn) + correctInput(ioVariable->getWritableType().getQualifier()); + else + correctOutput(ioVariable->getWritableType().getQualifier()); + ioVariable->getWritableType().getQualifier().storage = storage; + return ioVariable; + }; + + // return value is actually a shader-scoped output (out) + if (function.getType().getBasicType() == EbtVoid) + returnValue = nullptr; + 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()) { + TVariable* argAsGlobal = makeIoVariable(function[i].name->c_str(), paramType, EvqVaryingIn); + inputs.push_back(argAsGlobal); + } + if (paramType.getQualifier().isParamOutput()) { + TVariable* argAsGlobal = makeIoVariable(function[i].name->c_str(), paramType, EvqVaryingOut); + outputs.push_back(argAsGlobal); + } + } +} + +// An HLSL function that looks like an entry point, but is not, +// declares entry point IO built-ins, but these have to be undone. +void HlslParseContext::remapNonEntryPointIO(TFunction& function) +{ + // return value + if (function.getType().getBasicType() != EbtVoid) + clearUniformInputOutput(function.getWritableType().getQualifier()); + + // parameters. + // References to structuredbuffer types are left unmodified + for (int i = 0; i < function.getParamCount(); i++) + if (!isReference(*function[i].type)) + clearUniformInputOutput(function[i].type->getQualifier()); +} + +// Handle function returns, including type conversions to the function return type +// if necessary. +TIntermNode* HlslParseContext::handleReturnValue(const TSourceLoc& loc, TIntermTyped* value) +{ + functionReturnsValue = true; + + if (currentFunctionType->getBasicType() == EbtVoid) { + error(loc, "void function cannot return a value", "return", ""); + return intermediate.addBranch(EOpReturn, loc); + } 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) { + error(loc, "type does not match, or is not convertible to, the function's return type", "return", ""); + return value; + } + } + + return intermediate.addBranch(EOpReturn, value, loc); +} + +void HlslParseContext::handleFunctionArgument(TFunction* function, + TIntermTyped*& arguments, TIntermTyped* newArg) +{ + TParameter param = { 0, new TType, nullptr }; + param.type->shallowCopy(newArg->getType()); + + function->addParameter(param); + if (arguments) + arguments = intermediate.growAggregate(arguments, newArg); + else + arguments = newArg; +} + +// 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) +{ + if (left == nullptr || right == nullptr) + return nullptr; + + if (left->getAsOperator() && left->getAsOperator()->getOp() == EOpMatrixSwizzle) + return handleAssignToMatrixSwizzle(loc, op, left, right); + + const bool isSplitLeft = wasSplit(left); + const bool isSplitRight = wasSplit(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) + return intermediate.addAssign(op, left, right, loc); + + TIntermAggregate* assignList = nullptr; + const TVector* leftVariables = nullptr; + const TVector* rightVariables = nullptr; + + // 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; + + // If the RHS is a simple symbol node, we'll copy it for each member. + TIntermSymbol* cloneSymNode = nullptr; + + int memberCount = 0; + + // Track how many items there are to copy. + if (left->getType().isStruct()) + memberCount = (int)left->getType().getStruct()->size(); + if (left->getType().isArray()) + memberCount = left->getType().getCumulativeArraySize(); + + if (isFlattenLeft) + leftVariables = &flattenMap.find(left->getAsSymbolNode()->getId())->second.members; + + if (isFlattenRight) { + rightVariables = &flattenMap.find(right->getAsSymbolNode()->getId())->second.members; + } else { + // The RHS is not flattened. There are several cases: + // 1. 1 item to copy: Use the RHS directly. + // 2. >1 item, simple symbol RHS: we'll create a new TIntermSymbol node for each, but no assign to temp. + // 3. >1 item, complex RHS: assign it to a new temp variable, and create a TIntermSymbol for each member. + + if (memberCount <= 1) { + // case 1: we'll use the symbol directly below. Nothing to do. + } else { + if (right->getAsSymbolNode() != nullptr) { + // case 2: we'll copy the symbol per iteration below. + cloneSymNode = right->getAsSymbolNode(); + } else { + // case 3: assign to a temp, and indirect into that. + rhsTempVar = makeInternalVariable("flattenTemp", right->getType()); + rhsTempVar->getWritableType().getQualifier().makeTemporary(); + TIntermTyped* noFlattenRHS = intermediate.addSymbol(*rhsTempVar, loc); + + // Add this to the aggregate being built. + 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 + // 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 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; + + const bool flattened = isLeft ? isFlattenLeft : isFlattenRight; + const bool split = isLeft ? isSplitLeft : isSplitRight; + const TIntermTyped* outer = isLeft ? outerLeft : outerRight; + const TVector& flatVariables = isLeft ? *leftVariables : *rightVariables; + const TOperator op = node->getType().isArray() ? EOpIndexDirect : EOpIndexDirectStruct; + const TType derefType(node->getType(), member); + + if (split && derefType.isBuiltInInterstageIO(language)) { + // copy from interstage IO builtin if needed + subTree = intermediate.addSymbol(*interstageBuiltInIo.find(HlslParseContext::tInterstageIoData(derefType, outer->getType()))->second); + + // Arrayness of builtIn symbols isn't handled by the normal recursion: it's been extracted and moved to the builtin. + 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->setType(splitDerefType); + } + } else if (flattened && isFinalFlattening(derefType)) { + subTree = intermediate.addSymbol(*flatVariables[memberIdx++]); + } else { + const TType splitDerefType(splitNode->getType(), splitMember); + + subTree = intermediate.addIndex(op, splitNode, intermediate.addConstantUnion(splitMember, loc), loc); + subTree->setType(splitDerefType); + } + + return subTree; + }; + + // 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; + + // 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 + traverse = [&](TIntermTyped* left, TIntermTyped* right, TIntermTyped* splitLeft, TIntermTyped* splitRight) -> 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); + + // array case + for (int element=0; element < left->getType().getOuterArraySize(); ++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* subSplitLeft = isSplitLeft ? getMember(true, left, element, splitLeft, element) : subLeft; + TIntermTyped* subSplitRight = isSplitRight ? getMember(false, right, element, splitRight, element) : subRight; + + if (isFinalFlattening(dereferencedType)) + assignList = intermediate.growAggregate(assignList, intermediate.addAssign(op, subLeft, subRight, loc), loc); + else + traverse(subLeft, subRight, subSplitLeft, subSplitRight); + + arrayElement.pop_back(); + } + } else if (left->getType().isStruct()) { + // struct case + const auto& membersL = *left->getType().getStruct(); + const auto& membersR = *right->getType().getStruct(); + + // These track the members in the split structures corresponding to the same in the unsplit structures, + // which we traverse in parallel. + int memberL = 0; + int memberR = 0; + + // Handle empty structure assignment + if (int(membersL.size()) == 0 && int(membersR.size()) == 0) + assignList = intermediate.growAggregate(assignList, intermediate.addAssign(op, left, right, loc), loc); + + for (int member = 0; member < int(membersL.size()); ++member) { + 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); + + // 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); + } else { + traverse(subLeft, subRight, subSplitLeft, subSplitRight); + } + + memberL += (typeL.isBuiltInInterstageIO(language) ? 0 : 1); + memberR += (typeR.isBuiltInInterstageIO(language) ? 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. + } + + }; + + TIntermTyped* splitLeft = left; + 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); + + if (isSplitRight) + splitRight = intermediate.addSymbol(*getSplitIoVar(right), loc); + + // This makes the whole assignment, recursing through subtypes as needed. + traverse(left, right, splitLeft, splitRight); + + assert(assignList != nullptr); + assignList->setOperator(EOpSequence); + + return assignList; +} + +// 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) +{ + assert(left->getAsOperator() && left->getAsOperator()->getOp() == EOpMatrixSwizzle); + + if (op != EOpAssign) + error(loc, "only simple assignment to non-simple matrix swizzle is supported", "assign", ""); + + // isolate the matrix and swizzle nodes + TIntermTyped* matrix = left->getAsBinaryNode()->getLeft()->getAsTyped(); + const TIntermSequence& swizzle = left->getAsBinaryNode()->getRight()->getAsAggregate()->getSequence(); + + // if the RHS isn't already a simple vector, let's store into one + TIntermSymbol* vector = right->getAsSymbolNode(); + TIntermTyped* vectorAssign = nullptr; + if (vector == nullptr) { + // create a new intermediate vector variable to assign to + TType vectorType(matrix->getBasicType(), EvqTemporary, matrix->getQualifier().precision, (int)swizzle.size()/2); + vector = intermediate.addSymbol(*makeInternalVariable("intermVec", vectorType), loc); + + // assign the right to the new vector + vectorAssign = handleAssign(loc, op, vector, right); + } + + // Assign the vector components to the matrix components. + // Store this as a sequence, so a single aggregate node represents this + // entire operation. + TIntermAggregate* result = intermediate.makeAggregate(vectorAssign); + TType columnType(matrix->getType(), 0); + TType componentType(columnType, 0); + TType indexType(EbtInt); + for (int i = 0; i < (int)swizzle.size(); i += 2) { + // the right component, single index into the RHS vector + TIntermTyped* rightComp = intermediate.addIndex(EOpIndexDirect, vector, + intermediate.addConstantUnion(i/2, loc), loc); + + // the left component, double index into the LHS matrix + TIntermTyped* leftComp = intermediate.addIndex(EOpIndexDirect, matrix, + intermediate.addConstantUnion(swizzle[i]->getAsConstantUnion()->getConstArray(), + indexType, loc), + loc); + leftComp->setType(columnType); + leftComp = intermediate.addIndex(EOpIndexDirect, leftComp, + intermediate.addConstantUnion(swizzle[i+1]->getAsConstantUnion()->getConstArray(), + indexType, loc), + loc); + leftComp->setType(componentType); + + // Add the assignment to the aggregate + result = intermediate.growAggregate(result, intermediate.addAssign(op, leftComp, rightComp, loc)); + } + + result->setOp(EOpSequence); + + return result; +} + +// +// HLSL atomic operations have slightly different arguments than +// GLSL/AST/SPIRV. The semantics are converted below in decomposeIntrinsic. +// This provides the post-decomposition equivalent opcode. +// +TOperator HlslParseContext::mapAtomicOp(const TSourceLoc& loc, TOperator op, bool isImage) +{ + switch (op) { + case EOpInterlockedAdd: return isImage ? EOpImageAtomicAdd : EOpAtomicAdd; + case EOpInterlockedAnd: return isImage ? EOpImageAtomicAnd : EOpAtomicAnd; + case EOpInterlockedCompareExchange: return isImage ? EOpImageAtomicCompSwap : EOpAtomicCompSwap; + case EOpInterlockedMax: return isImage ? EOpImageAtomicMax : EOpAtomicMax; + case EOpInterlockedMin: return isImage ? EOpImageAtomicMin : EOpAtomicMin; + case EOpInterlockedOr: return isImage ? EOpImageAtomicOr : EOpAtomicOr; + case EOpInterlockedXor: return isImage ? EOpImageAtomicXor : EOpAtomicXor; + case EOpInterlockedExchange: return isImage ? EOpImageAtomicExchange : EOpAtomicExchange; + case EOpInterlockedCompareStore: // TODO: ... + default: + error(loc, "unknown atomic operation", "unknown op", ""); + return EOpNull; + } +} + +// +// Create a combined sampler/texture from separate sampler and texture. +// +TIntermAggregate* HlslParseContext::handleSamplerTextureCombine(const TSourceLoc& loc, TIntermTyped* argTex, TIntermTyped* argSampler) +{ + TIntermAggregate* txcombine = new TIntermAggregate(EOpConstructTextureSampler); + + txcombine->getSequence().push_back(argTex); + txcombine->getSequence().push_back(argSampler); + + TSampler samplerType = argTex->getType().getSampler(); + samplerType.combined = true; + samplerType.shadow = argSampler->getType().getSampler().shadow; + + txcombine->setType(TType(samplerType, EvqTemporary)); + txcombine->setLoc(loc); + + return txcombine; +} + +// +// Decompose structure buffer methods into AST +// +void HlslParseContext::decomposeStructBufferMethods(const TSourceLoc& loc, TIntermTyped*& node, TIntermNode* arguments) +{ + if (!node || !node->getAsOperator()) + return; + + const TOperator op = node->getAsOperator()->getOp(); + TIntermAggregate* argAggregate = arguments ? arguments->getAsAggregate() : nullptr; + if (argAggregate == nullptr) + return; + + // Buffer is the object upon which method is called, so always arg 0 + TIntermTyped* bufferObj = argAggregate->getSequence()[0]->getAsTyped(); + + // Index to obtain the runtime sized array out of the buffer. + TIntermTyped* argArray = indexStructBufferContent(loc, bufferObj); + if (argArray == nullptr) + return; // It might not be a struct buffer method. + + switch (op) { + case EOpMethodLoad: + { + TIntermTyped* argIndex = argAggregate->getSequence()[1]->getAsTyped(); // index + + // 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); + if (isByteAddressBuffer) + argIndex = intermediate.addBinaryNode(EOpRightShift, argIndex, intermediate.addConstantUnion(2, loc, true), + loc, TType(EbtInt)); + + // Index into the array to find the item being loaded. + const TOperator idxOp = (argIndex->getQualifier().storage == EvqConst) ? EOpIndexDirect : EOpIndexIndirect; + + node = intermediate.addIndex(idxOp, argArray, argIndex, loc); + + const TType derefType(argArray->getType(), 0); + node->setType(derefType); + } + + break; + + case EOpMethodLoad2: + case EOpMethodLoad3: + case EOpMethodLoad4: + { + TIntermTyped* argIndex = argAggregate->getSequence()[1]->getAsTyped(); // index + + TOperator constructOp = EOpNull; + int size = 0; + + switch (op) { + case EOpMethodLoad2: size = 2; constructOp = EOpConstructVec2; break; + case EOpMethodLoad3: size = 3; constructOp = EOpConstructVec3; break; + case EOpMethodLoad4: size = 4; constructOp = EOpConstructVec4; break; + default: assert(0); + } + + TIntermTyped* body = nullptr; + + // 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)); + + TVariable* byteAddrSym = makeInternalVariable("byteAddrTemp", TType(EbtInt, EvqTemporary)); + TIntermTyped* byteAddrIdxVar = intermediate.addSymbol(*byteAddrSym, loc); + + body = intermediate.growAggregate(body, intermediate.addAssign(EOpAssign, byteAddrIdxVar, byteAddrIdx, loc)); + + TIntermTyped* vec = nullptr; + + // These are only valid on (rw)byteaddressbuffers, so we can always perform the >>2 + // address conversion. + for (int idx=0; idxgetQualifier().storage == EvqConst) ? EOpIndexDirect : EOpIndexIndirect; + + vec = intermediate.growAggregate(vec, intermediate.addIndex(idxOp, argArray, offsetIdx, loc)); + } + + vec->setType(TType(argArray->getBasicType(), EvqTemporary, size)); + vec->getAsAggregate()->setOperator(constructOp); + + body = intermediate.growAggregate(body, vec); + body->setType(vec->getType()); + body->getAsAggregate()->setOperator(EOpSequence); + + node = body; + } + + break; + + case EOpMethodStore: + case EOpMethodStore2: + case EOpMethodStore3: + case EOpMethodStore4: + { + TIntermTyped* argIndex = argAggregate->getSequence()[1]->getAsTyped(); // address + TIntermTyped* argValue = argAggregate->getSequence()[2]->getAsTyped(); // value + + // Index into the array to find the item being loaded. + // 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. + + int size = 0; + + switch (op) { + case EOpMethodStore: size = 1; break; + case EOpMethodStore2: size = 2; break; + case EOpMethodStore3: size = 3; break; + case EOpMethodStore4: size = 4; break; + default: assert(0); + } + + TIntermAggregate* body = nullptr; + + // 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)); + + TVariable* byteAddrSym = makeInternalVariable("byteAddrTemp", TType(EbtInt, EvqTemporary)); + TIntermTyped* byteAddrIdxVar = intermediate.addSymbol(*byteAddrSym, loc); + + body = intermediate.growAggregate(body, intermediate.addAssign(EOpAssign, byteAddrIdxVar, byteAddrIdx, loc)); + + for (int idx=0; idxgetQualifier().storage == EvqConst) ? EOpIndexDirect : EOpIndexIndirect; + + TIntermTyped* lValue = intermediate.addIndex(idxOp, argArray, offsetIdx, loc); + TIntermTyped* rValue = (size == 1) ? argValue : + intermediate.addIndex(EOpIndexDirect, argValue, idxConst, loc); + + TIntermTyped* assign = intermediate.addAssign(EOpAssign, lValue, rValue, loc); + + body = intermediate.growAggregate(body, assign); + } + + body->setOperator(EOpSequence); + node = body; + } + + break; + + case EOpMethodGetDimensions: + { + const int numArgs = (int)argAggregate->getSequence().size(); + TIntermTyped* argNumItems = argAggregate->getSequence()[1]->getAsTyped(); // out num items + TIntermTyped* argStride = numArgs > 2 ? argAggregate->getSequence()[2]->getAsTyped() : nullptr; // out stride + + TIntermAggregate* body = nullptr; + + // Length output: + if (argArray->getType().isRuntimeSizedArray()) { + TIntermTyped* lengthCall = intermediate.addBuiltInFunctionCall(loc, EOpArrayLength, true, argArray, + argNumItems->getType()); + TIntermTyped* assign = intermediate.addAssign(EOpAssign, argNumItems, lengthCall, loc); + 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); + body = intermediate.growAggregate(body, assign, loc); + } + + // Stride output: + if (argStride != nullptr) { + int size; + int stride; + intermediate.getBaseAlignment(argArray->getType(), size, stride, false, + argArray->getType().getQualifier().layoutMatrix == ElmRowMajor); + + TIntermTyped* assign = intermediate.addAssign(EOpAssign, argStride, intermediate.addConstantUnion(stride, loc, true), loc); + + body = intermediate.growAggregate(body, assign); + } + + body->setOperator(EOpSequence); + node = body; + } + + break; + + case EOpInterlockedAdd: + case EOpInterlockedAnd: + case EOpInterlockedExchange: + case EOpInterlockedMax: + case EOpInterlockedMin: + case EOpInterlockedOr: + case EOpInterlockedXor: + case EOpInterlockedCompareExchange: + case EOpInterlockedCompareStore: + { + // We'll replace the first argument with the block dereference, and let + // downstream decomposition handle the rest. + + TIntermSequence& sequence = argAggregate->getSequence(); + + TIntermTyped* argIndex = sequence[1]->getAsTyped(); // index + argIndex = intermediate.addBinaryNode(EOpRightShift, argIndex, intermediate.addConstantUnion(2, loc, true), + loc, TType(EbtInt)); + + const TOperator idxOp = (argIndex->getQualifier().storage == EvqConst) ? EOpIndexDirect : EOpIndexIndirect; + TIntermTyped* element = intermediate.addIndex(idxOp, argArray, argIndex, loc); + + const TType derefType(argArray->getType(), 0); + element->setType(derefType); + + // Replace the numeric byte offset parameter with array reference. + sequence[1] = element; + sequence.erase(sequence.begin(), sequence.begin()+1); + } + break; + + default: + break; // most pass through unchanged + } +} + +// +// Decompose DX9 and DX10 sample intrinsics & object methods into AST +// +void HlslParseContext::decomposeSampleMethods(const TSourceLoc& loc, TIntermTyped*& node, TIntermNode* arguments) +{ + if (!node || !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 + 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); + + const TOperator op = intermediate.mapTypeToConstructorOp(clampedType); + + result = constructBuiltIn(clampedType, op, result, loc, false); + } + + result->setLoc(loc); + return result; + }; + + const TOperator op = node->getAsOperator()->getOp(); + const TIntermAggregate* argAggregate = arguments ? arguments->getAsAggregate() : nullptr; + + // Bail out if not a sampler method + if (arguments != nullptr) { + if ((argAggregate != nullptr && argAggregate->getSequence()[0]->getAsTyped()->getBasicType() != EbtSampler)) + return; + + if (argAggregate == nullptr && arguments->getAsTyped()->getBasicType() != EbtSampler) + return; + } + + switch (op) { + // **** DX9 intrinsics: **** + case EOpTexture: + { + // Texture with ddx & ddy is really gradient form in HLSL + if (argAggregate->getSequence().size() == 4) + node->getAsAggregate()->setOperator(EOpTextureGrad); + + break; + } + + case EOpTextureBias: + { + TIntermTyped* arg0 = argAggregate->getSequence()[0]->getAsTyped(); // sampler + TIntermTyped* arg1 = argAggregate->getSequence()[1]->getAsTyped(); // coord + + // HLSL puts bias in W component of coordinate. We extract it and add it to + // the argument list, instead + TIntermTyped* w = intermediate.addConstantUnion(3, loc, true); + TIntermTyped* bias = intermediate.addIndex(EOpIndexDirect, arg1, w, loc); + + TOperator constructOp = EOpNull; + const TSampler& sampler = arg0->getType().getSampler(); + + switch (sampler.dim) { + case Esd1D: constructOp = EOpConstructFloat; break; // 1D + case Esd2D: constructOp = EOpConstructVec2; break; // 2D + case Esd3D: constructOp = EOpConstructVec3; break; // 3D + case EsdCube: constructOp = EOpConstructVec3; break; // also 3D + default: break; + } + + TIntermAggregate* constructCoord = new TIntermAggregate(constructOp); + constructCoord->getSequence().push_back(arg1); + constructCoord->setLoc(loc); + + // The input vector should never be less than 2, since there's always a bias. + // The max is for safety, and should be a no-op. + constructCoord->setType(TType(arg1->getBasicType(), EvqTemporary, std::max(arg1->getVectorSize() - 1, 0))); + + TIntermAggregate* tex = new TIntermAggregate(EOpTexture); + tex->getSequence().push_back(arg0); // sampler + tex->getSequence().push_back(constructCoord); // coordinate + tex->getSequence().push_back(bias); // bias + + node = clampReturn(tex, sampler); + + break; + } + + // **** DX10 methods: **** + case EOpMethodSample: // fall through + case EOpMethodSampleBias: // ... + { + TIntermTyped* argTex = argAggregate->getSequence()[0]->getAsTyped(); + TIntermTyped* argSamp = argAggregate->getSequence()[1]->getAsTyped(); + TIntermTyped* argCoord = argAggregate->getSequence()[2]->getAsTyped(); + TIntermTyped* argBias = nullptr; + TIntermTyped* argOffset = nullptr; + const TSampler& sampler = argTex->getType().getSampler(); + + int nextArg = 3; + + if (op == EOpMethodSampleBias) // SampleBias has a bias arg + argBias = argAggregate->getSequence()[nextArg++]->getAsTyped(); + + TOperator textureOp = EOpTexture; + + if ((int)argAggregate->getSequence().size() == (nextArg+1)) { // last parameter is offset form + textureOp = EOpTextureOffset; + argOffset = argAggregate->getSequence()[nextArg++]->getAsTyped(); + } + + TIntermAggregate* txcombine = handleSamplerTextureCombine(loc, argTex, argSamp); + + TIntermAggregate* txsample = new TIntermAggregate(textureOp); + txsample->getSequence().push_back(txcombine); + txsample->getSequence().push_back(argCoord); + + if (argBias != nullptr) + txsample->getSequence().push_back(argBias); + + if (argOffset != nullptr) + txsample->getSequence().push_back(argOffset); + + node = clampReturn(txsample, sampler); + + break; + } + + case EOpMethodSampleGrad: // ... + { + TIntermTyped* argTex = argAggregate->getSequence()[0]->getAsTyped(); + TIntermTyped* argSamp = argAggregate->getSequence()[1]->getAsTyped(); + TIntermTyped* argCoord = argAggregate->getSequence()[2]->getAsTyped(); + TIntermTyped* argDDX = argAggregate->getSequence()[3]->getAsTyped(); + TIntermTyped* argDDY = argAggregate->getSequence()[4]->getAsTyped(); + TIntermTyped* argOffset = nullptr; + const TSampler& sampler = argTex->getType().getSampler(); + + TOperator textureOp = EOpTextureGrad; + + if (argAggregate->getSequence().size() == 6) { // last parameter is offset form + textureOp = EOpTextureGradOffset; + argOffset = argAggregate->getSequence()[5]->getAsTyped(); + } + + TIntermAggregate* txcombine = handleSamplerTextureCombine(loc, argTex, argSamp); + + TIntermAggregate* txsample = new TIntermAggregate(textureOp); + txsample->getSequence().push_back(txcombine); + txsample->getSequence().push_back(argCoord); + txsample->getSequence().push_back(argDDX); + txsample->getSequence().push_back(argDDY); + + if (argOffset != nullptr) + txsample->getSequence().push_back(argOffset); + + node = clampReturn(txsample, sampler); + + break; + } + + case EOpMethodGetDimensions: + { + // AST returns a vector of results, which we break apart component-wise into + // separate values to assign to the HLSL method's outputs, ala: + // tx . GetDimensions(width, height); + // float2 sizeQueryTemp = EOpTextureQuerySize + // width = sizeQueryTemp.X; + // height = sizeQueryTemp.Y; + + TIntermTyped* argTex = argAggregate->getSequence()[0]->getAsTyped(); + const TType& texType = argTex->getType(); + + assert(texType.getBasicType() == EbtSampler); + + const TSampler& sampler = texType.getSampler(); + const TSamplerDim dim = sampler.dim; + const bool isImage = sampler.isImage(); + const bool isMs = sampler.isMultiSample(); + const int numArgs = (int)argAggregate->getSequence().size(); + + int numDims = 0; + + switch (dim) { + case Esd1D: numDims = 1; break; // W + case Esd2D: numDims = 2; break; // W, H + case Esd3D: numDims = 3; break; // W, H, D + case EsdCube: numDims = 2; break; // W, H (cube) + case EsdBuffer: numDims = 1; break; // W (buffers) + case EsdRect: numDims = 2; break; // W, H (rect) + default: + assert(0 && "unhandled texture dimension"); + } + + // Arrayed adds another dimension for the number of array elements + if (sampler.isArrayed()) + ++numDims; + + // Establish whether the method itself is querying mip levels. This can be false even + // if the underlying query requires a MIP level, due to the available HLSL method overloads. + const bool mipQuery = (numArgs > (numDims + 1 + (isMs ? 1 : 0))); + + // Establish whether we must use the LOD form of query (even if the method did not supply a mip level to query). + // True if: + // 1. 1D/2D/3D/Cube AND multisample==0 AND NOT image (those can be sent to the non-LOD query) + // or, + // 2. There is a LOD (because the non-LOD query cannot be used in that case, per spec) + const bool mipRequired = + ((dim == Esd1D || dim == Esd2D || dim == Esd3D || dim == EsdCube) && !isMs && !isImage) || // 1... + mipQuery; // 2... + + // AST assumes integer return. Will be converted to float if required. + TIntermAggregate* sizeQuery = new TIntermAggregate(isImage ? EOpImageQuerySize : EOpTextureQuerySize); + sizeQuery->getSequence().push_back(argTex); + + // If we're building an LOD query, add the LOD. + if (mipRequired) { + // If the base HLSL query had no MIP level given, use level 0. + TIntermTyped* queryLod = mipQuery ? argAggregate->getSequence()[1]->getAsTyped() : + intermediate.addConstantUnion(0, loc, true); + sizeQuery->getSequence().push_back(queryLod); + } + + sizeQuery->setType(TType(EbtUint, EvqTemporary, numDims)); + sizeQuery->setLoc(loc); + + // Return value from size query + TVariable* tempArg = makeInternalVariable("sizeQueryTemp", sizeQuery->getType()); + tempArg->getWritableType().getQualifier().makeTemporary(); + TIntermTyped* sizeQueryAssign = intermediate.addAssign(EOpAssign, + intermediate.addSymbol(*tempArg, loc), + sizeQuery, loc); + + // Compound statement for assigning outputs + TIntermAggregate* compoundStatement = intermediate.makeAggregate(sizeQueryAssign, loc); + // Index of first output parameter + const int outParamBase = mipQuery ? 2 : 1; + + for (int compNum = 0; compNum < numDims; ++compNum) { + TIntermTyped* indexedOut = nullptr; + TIntermSymbol* sizeQueryReturn = intermediate.addSymbol(*tempArg, loc); + + if (numDims > 1) { + TIntermTyped* component = intermediate.addConstantUnion(compNum, loc, true); + indexedOut = intermediate.addIndex(EOpIndexDirect, sizeQueryReturn, component, loc); + indexedOut->setType(TType(EbtUint, EvqTemporary, 1)); + indexedOut->setLoc(loc); + } else { + indexedOut = sizeQueryReturn; + } + + TIntermTyped* outParam = argAggregate->getSequence()[outParamBase + compNum]->getAsTyped(); + TIntermTyped* compAssign = intermediate.addAssign(EOpAssign, outParam, indexedOut, loc); + + compoundStatement = intermediate.growAggregate(compoundStatement, compAssign); + } + + // handle mip level parameter + if (mipQuery) { + TIntermTyped* outParam = argAggregate->getSequence()[outParamBase + numDims]->getAsTyped(); + + TIntermAggregate* levelsQuery = new TIntermAggregate(EOpTextureQueryLevels); + levelsQuery->getSequence().push_back(argTex); + levelsQuery->setType(TType(EbtUint, EvqTemporary, 1)); + levelsQuery->setLoc(loc); + + TIntermTyped* compAssign = intermediate.addAssign(EOpAssign, outParam, levelsQuery, loc); + compoundStatement = intermediate.growAggregate(compoundStatement, compAssign); + } + + // 2DMS formats query # samples, which needs a different query op + if (sampler.isMultiSample()) { + TIntermTyped* outParam = argAggregate->getSequence()[outParamBase + numDims]->getAsTyped(); + + TIntermAggregate* samplesQuery = new TIntermAggregate(EOpImageQuerySamples); + samplesQuery->getSequence().push_back(argTex); + samplesQuery->setType(TType(EbtUint, EvqTemporary, 1)); + samplesQuery->setLoc(loc); + + TIntermTyped* compAssign = intermediate.addAssign(EOpAssign, outParam, samplesQuery, loc); + compoundStatement = intermediate.growAggregate(compoundStatement, compAssign); + } + + compoundStatement->setOperator(EOpSequence); + compoundStatement->setLoc(loc); + compoundStatement->setType(TType(EbtVoid)); + + node = compoundStatement; + + break; + } + + case EOpMethodSampleCmp: // fall through... + case EOpMethodSampleCmpLevelZero: + { + TIntermTyped* argTex = argAggregate->getSequence()[0]->getAsTyped(); + TIntermTyped* argSamp = argAggregate->getSequence()[1]->getAsTyped(); + TIntermTyped* argCoord = argAggregate->getSequence()[2]->getAsTyped(); + TIntermTyped* argCmpVal = argAggregate->getSequence()[3]->getAsTyped(); + TIntermTyped* argOffset = nullptr; + + // optional offset value + if (argAggregate->getSequence().size() > 4) + argOffset = argAggregate->getSequence()[4]->getAsTyped(); + + const int coordDimWithCmpVal = argCoord->getType().getVectorSize() + 1; // +1 for cmp + + // AST wants comparison value as one of the texture coordinates + TOperator constructOp = EOpNull; + switch (coordDimWithCmpVal) { + // 1D can't happen: there's always at least 1 coordinate dimension + 1 cmp val + case 2: constructOp = EOpConstructVec2; break; + case 3: constructOp = EOpConstructVec3; break; + case 4: constructOp = EOpConstructVec4; break; + case 5: constructOp = EOpConstructVec4; break; // cubeArrayShadow, cmp value is separate arg. + default: assert(0); break; + } + + TIntermAggregate* coordWithCmp = new TIntermAggregate(constructOp); + coordWithCmp->getSequence().push_back(argCoord); + if (coordDimWithCmpVal != 5) // cube array shadow is special. + coordWithCmp->getSequence().push_back(argCmpVal); + coordWithCmp->setLoc(loc); + coordWithCmp->setType(TType(argCoord->getBasicType(), EvqTemporary, std::min(coordDimWithCmpVal, 4))); + + TOperator textureOp = (op == EOpMethodSampleCmpLevelZero ? EOpTextureLod : EOpTexture); + if (argOffset != nullptr) + textureOp = (op == EOpMethodSampleCmpLevelZero ? EOpTextureLodOffset : EOpTextureOffset); + + // Create combined sampler & texture op + TIntermAggregate* txcombine = handleSamplerTextureCombine(loc, argTex, argSamp); + TIntermAggregate* txsample = new TIntermAggregate(textureOp); + txsample->getSequence().push_back(txcombine); + txsample->getSequence().push_back(coordWithCmp); + + if (coordDimWithCmpVal == 5) // cube array shadow is special: cmp val follows coord. + txsample->getSequence().push_back(argCmpVal); + + // the LevelZero form uses 0 as an explicit LOD + if (op == EOpMethodSampleCmpLevelZero) + txsample->getSequence().push_back(intermediate.addConstantUnion(0.0, EbtFloat, loc, true)); + + // Add offset if present + if (argOffset != nullptr) + txsample->getSequence().push_back(argOffset); + + txsample->setType(node->getType()); + txsample->setLoc(loc); + node = txsample; + + break; + } + + case EOpMethodLoad: + { + TIntermTyped* argTex = argAggregate->getSequence()[0]->getAsTyped(); + TIntermTyped* argCoord = argAggregate->getSequence()[1]->getAsTyped(); + TIntermTyped* argOffset = nullptr; + TIntermTyped* lodComponent = nullptr; + TIntermTyped* coordSwizzle = nullptr; + + const TSampler& sampler = argTex->getType().getSampler(); + const bool isMS = sampler.isMultiSample(); + const bool isBuffer = sampler.dim == EsdBuffer; + const bool isImage = sampler.isImage(); + const TBasicType coordBaseType = argCoord->getType().getBasicType(); + + // Last component of coordinate is the mip level, for non-MS. we separate them here: + if (isMS || isBuffer || isImage) { + // MS, Buffer, and Image have no LOD + coordSwizzle = argCoord; + } else { + // Extract coordinate + int swizzleSize = argCoord->getType().getVectorSize() - (isMS ? 0 : 1); + TSwizzleSelectors coordFields; + for (int i = 0; i < swizzleSize; ++i) + coordFields.push_back(i); + TIntermTyped* coordIdx = intermediate.addSwizzle(coordFields, loc); + coordSwizzle = intermediate.addIndex(EOpVectorSwizzle, argCoord, coordIdx, loc); + coordSwizzle->setType(TType(coordBaseType, EvqTemporary, coordFields.size())); + + // Extract LOD + TIntermTyped* lodIdx = intermediate.addConstantUnion(coordFields.size(), loc, true); + lodComponent = intermediate.addIndex(EOpIndexDirect, argCoord, lodIdx, loc); + lodComponent->setType(TType(coordBaseType, EvqTemporary, 1)); + } + + const int numArgs = (int)argAggregate->getSequence().size(); + const bool hasOffset = ((!isMS && numArgs == 3) || (isMS && numArgs == 4)); + + // Create texel fetch + const TOperator fetchOp = (isImage ? EOpImageLoad : + hasOffset ? EOpTextureFetchOffset : + EOpTextureFetch); + TIntermAggregate* txfetch = new TIntermAggregate(fetchOp); + + // Build up the fetch + txfetch->getSequence().push_back(argTex); + txfetch->getSequence().push_back(coordSwizzle); + + if (isMS) { + // add 2DMS sample index + TIntermTyped* argSampleIdx = argAggregate->getSequence()[2]->getAsTyped(); + txfetch->getSequence().push_back(argSampleIdx); + } else if (isBuffer) { + // Nothing else to do for buffers. + } else if (isImage) { + // Nothing else to do for images. + } else { + // 2DMS and buffer have no LOD, but everything else does. + txfetch->getSequence().push_back(lodComponent); + } + + // Obtain offset arg, if there is one. + if (hasOffset) { + const int offsetPos = (isMS ? 3 : 2); + argOffset = argAggregate->getSequence()[offsetPos]->getAsTyped(); + txfetch->getSequence().push_back(argOffset); + } + + node = clampReturn(txfetch, sampler); + + break; + } + + case EOpMethodSampleLevel: + { + TIntermTyped* argTex = argAggregate->getSequence()[0]->getAsTyped(); + TIntermTyped* argSamp = argAggregate->getSequence()[1]->getAsTyped(); + TIntermTyped* argCoord = argAggregate->getSequence()[2]->getAsTyped(); + TIntermTyped* argLod = argAggregate->getSequence()[3]->getAsTyped(); + TIntermTyped* argOffset = nullptr; + const TSampler& sampler = argTex->getType().getSampler(); + + const int numArgs = (int)argAggregate->getSequence().size(); + + if (numArgs == 5) // offset, if present + argOffset = argAggregate->getSequence()[4]->getAsTyped(); + + const TOperator textureOp = (argOffset == nullptr ? EOpTextureLod : EOpTextureLodOffset); + TIntermAggregate* txsample = new TIntermAggregate(textureOp); + + TIntermAggregate* txcombine = handleSamplerTextureCombine(loc, argTex, argSamp); + + txsample->getSequence().push_back(txcombine); + txsample->getSequence().push_back(argCoord); + txsample->getSequence().push_back(argLod); + + if (argOffset != nullptr) + txsample->getSequence().push_back(argOffset); + + node = clampReturn(txsample, sampler); + + break; + } + + case EOpMethodGather: + { + TIntermTyped* argTex = argAggregate->getSequence()[0]->getAsTyped(); + TIntermTyped* argSamp = argAggregate->getSequence()[1]->getAsTyped(); + TIntermTyped* argCoord = argAggregate->getSequence()[2]->getAsTyped(); + TIntermTyped* argOffset = nullptr; + + // Offset is optional + if (argAggregate->getSequence().size() > 3) + argOffset = argAggregate->getSequence()[3]->getAsTyped(); + + const TOperator textureOp = (argOffset == nullptr ? EOpTextureGather : EOpTextureGatherOffset); + TIntermAggregate* txgather = new TIntermAggregate(textureOp); + + TIntermAggregate* txcombine = handleSamplerTextureCombine(loc, argTex, argSamp); + + txgather->getSequence().push_back(txcombine); + txgather->getSequence().push_back(argCoord); + // Offset if not given is implicitly channel 0 (red) + + if (argOffset != nullptr) + txgather->getSequence().push_back(argOffset); + + txgather->setType(node->getType()); + txgather->setLoc(loc); + node = txgather; + + break; + } + + case EOpMethodGatherRed: // fall through... + case EOpMethodGatherGreen: // ... + case EOpMethodGatherBlue: // ... + case EOpMethodGatherAlpha: // ... + case EOpMethodGatherCmpRed: // ... + case EOpMethodGatherCmpGreen: // ... + case EOpMethodGatherCmpBlue: // ... + case EOpMethodGatherCmpAlpha: // ... + { + int channel = 0; // the channel we are gathering + int cmpValues = 0; // 1 if there is a compare value (handier than a bool below) + + switch (op) { + case EOpMethodGatherCmpRed: cmpValues = 1; // fall through + case EOpMethodGatherRed: channel = 0; break; + case EOpMethodGatherCmpGreen: cmpValues = 1; // fall through + case EOpMethodGatherGreen: channel = 1; break; + case EOpMethodGatherCmpBlue: cmpValues = 1; // fall through + case EOpMethodGatherBlue: channel = 2; break; + case EOpMethodGatherCmpAlpha: cmpValues = 1; // fall through + case EOpMethodGatherAlpha: channel = 3; break; + default: assert(0); break; + } + + // For now, we have nothing to map the component-wise comparison forms + // to, because neither GLSL nor SPIR-V has such an opcode. Issue an + // unimplemented error instead. Most of the machinery is here if that + // should ever become available. However, red can be passed through + // to OpImageDrefGather. G/B/A cannot, because that opcode does not + // accept a component. + if (cmpValues != 0 && op != EOpMethodGatherCmpRed) { + error(loc, "unimplemented: component-level gather compare", "", ""); + return; + } + + int arg = 0; + + TIntermTyped* argTex = argAggregate->getSequence()[arg++]->getAsTyped(); + TIntermTyped* argSamp = argAggregate->getSequence()[arg++]->getAsTyped(); + TIntermTyped* argCoord = argAggregate->getSequence()[arg++]->getAsTyped(); + TIntermTyped* argOffset = nullptr; + TIntermTyped* argOffsets[4] = { nullptr, nullptr, nullptr, nullptr }; + // TIntermTyped* argStatus = nullptr; // TODO: residency + TIntermTyped* argCmp = nullptr; + + const TSamplerDim dim = argTex->getType().getSampler().dim; + + const int argSize = (int)argAggregate->getSequence().size(); + bool hasStatus = (argSize == (5+cmpValues) || argSize == (8+cmpValues)); + bool hasOffset1 = false; + bool hasOffset4 = false; + + // 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)); + hasOffset4 = (argSize == (7+cmpValues) || argSize == (8+cmpValues)); + } + + assert(!(hasOffset1 && hasOffset4)); + + TOperator textureOp = EOpTextureGather; + + // Compare forms have compare value + if (cmpValues != 0) + argCmp = argOffset = argAggregate->getSequence()[arg++]->getAsTyped(); + + // Some forms have single offset + if (hasOffset1) { + textureOp = EOpTextureGatherOffset; // single offset form + argOffset = argAggregate->getSequence()[arg++]->getAsTyped(); + } + + // Some forms have 4 gather offsets + if (hasOffset4) { + textureOp = EOpTextureGatherOffsets; // note plural, for 4 offset form + for (int offsetNum = 0; offsetNum < 4; ++offsetNum) + argOffsets[offsetNum] = argAggregate->getSequence()[arg++]->getAsTyped(); + } + + // Residency status + if (hasStatus) { + // argStatus = argAggregate->getSequence()[arg++]->getAsTyped(); + error(loc, "unimplemented: residency status", "", ""); + return; + } + + TIntermAggregate* txgather = new TIntermAggregate(textureOp); + TIntermAggregate* txcombine = handleSamplerTextureCombine(loc, argTex, argSamp); + + TIntermTyped* argChannel = intermediate.addConstantUnion(channel, loc, true); + + txgather->getSequence().push_back(txcombine); + txgather->getSequence().push_back(argCoord); + + // AST wants an array of 4 offsets, where HLSL has separate args. Here + // we construct an array from the separate args. + if (hasOffset4) { + TType arrayType(EbtInt, EvqTemporary, 2); + TArraySizes arraySizes; + arraySizes.addInnerSize(4); + arrayType.newArraySizes(arraySizes); + + TIntermAggregate* initList = new TIntermAggregate(EOpNull); + + for (int offsetNum = 0; offsetNum < 4; ++offsetNum) + initList->getSequence().push_back(argOffsets[offsetNum]); + + argOffset = addConstructor(loc, initList, arrayType); + } + + // Add comparison value if we have one + if (argCmp != nullptr) + txgather->getSequence().push_back(argCmp); + + // Add offset (either 1, or an array of 4) if we have one + if (argOffset != nullptr) + txgather->getSequence().push_back(argOffset); + + // Add channel value if the sampler is not shadow + if (! argSamp->getType().getSampler().isShadow()) + txgather->getSequence().push_back(argChannel); + + txgather->setType(node->getType()); + txgather->setLoc(loc); + node = txgather; + + break; + } + + case EOpMethodCalculateLevelOfDetail: + case EOpMethodCalculateLevelOfDetailUnclamped: + { + TIntermTyped* argTex = argAggregate->getSequence()[0]->getAsTyped(); + TIntermTyped* argSamp = argAggregate->getSequence()[1]->getAsTyped(); + TIntermTyped* argCoord = argAggregate->getSequence()[2]->getAsTyped(); + + TIntermAggregate* txquerylod = new TIntermAggregate(EOpTextureQueryLod); + + TIntermAggregate* txcombine = handleSamplerTextureCombine(loc, argTex, argSamp); + txquerylod->getSequence().push_back(txcombine); + txquerylod->getSequence().push_back(argCoord); + + TIntermTyped* lodComponent = intermediate.addConstantUnion(0, loc, true); + TIntermTyped* lodComponentIdx = intermediate.addIndex(EOpIndexDirect, txquerylod, lodComponent, loc); + lodComponentIdx->setType(TType(EbtFloat, EvqTemporary, 1)); + + node = lodComponentIdx; + + // We cannot currently obtain the unclamped LOD + if (op == EOpMethodCalculateLevelOfDetailUnclamped) + error(loc, "unimplemented: CalculateLevelOfDetailUnclamped", "", ""); + + break; + } + + case EOpMethodGetSamplePosition: + { + error(loc, "unimplemented: GetSamplePosition", "", ""); + break; + } + + default: + break; // most pass through unchanged + } +} + +// +// Decompose geometry shader methods +// +void HlslParseContext::decomposeGeometryMethods(const TSourceLoc& loc, TIntermTyped*& node, TIntermNode* arguments) +{ + if (!node || !node->getAsOperator()) + return; + + const TOperator op = node->getAsOperator()->getOp(); + const TIntermAggregate* argAggregate = arguments ? arguments->getAsAggregate() : nullptr; + + switch (op) { + case EOpMethodAppend: + if (argAggregate) { + TIntermAggregate* sequence = nullptr; + TIntermAggregate* emit = new TIntermAggregate(EOpEmitVertex); + + emit->setLoc(loc); + emit->setType(TType(EbtVoid)); + + sequence = intermediate.growAggregate(sequence, + handleAssign(loc, EOpAssign, + argAggregate->getSequence()[0]->getAsTyped(), + argAggregate->getSequence()[1]->getAsTyped()), + loc); + + sequence = intermediate.growAggregate(sequence, emit); + + sequence->setOperator(EOpSequence); + sequence->setLoc(loc); + sequence->setType(TType(EbtVoid)); + node = sequence; + } + break; + + case EOpMethodRestartStrip: + { + TIntermAggregate* cut = new TIntermAggregate(EOpEndPrimitive); + cut->setLoc(loc); + cut->setType(TType(EbtVoid)); + node = cut; + } + break; + + default: + break; // most pass through unchanged + } +} + +// +// Optionally decompose intrinsics to AST opcodes. +// +void HlslParseContext::decomposeIntrinsic(const TSourceLoc& loc, TIntermTyped*& node, TIntermNode* arguments) +{ + // Helper to find image data for image atomics: + // OpImageLoad(image[idx]) + // We take the image load apart and add its params to the atomic op aggregate node + const auto imageAtomicParams = [this, &loc, &node](TIntermAggregate* atomic, TIntermTyped* load) { + TIntermAggregate* loadOp = load->getAsAggregate(); + if (loadOp == nullptr) { + error(loc, "unknown image type in atomic operation", "", ""); + node = nullptr; + return; + } + + atomic->getSequence().push_back(loadOp->getSequence()[0]); + atomic->getSequence().push_back(loadOp->getSequence()[1]); + }; + + // Return true if this is an imageLoad, which we will change to an image atomic. + const auto isImageParam = [](TIntermTyped* image) -> bool { + TIntermAggregate* imageAggregate = image->getAsAggregate(); + return imageAggregate != nullptr && imageAggregate->getOp() == EOpImageLoad; + }; + + // HLSL intrinsics can be pass through to native AST opcodes, or decomposed here to existing AST + // opcodes for compatibility with existing software stacks. + static const bool decomposeHlslIntrinsics = true; + + if (!decomposeHlslIntrinsics || !node || !node->getAsOperator()) + return; + + const TIntermAggregate* argAggregate = arguments ? arguments->getAsAggregate() : nullptr; + TIntermUnary* fnUnary = node->getAsUnaryNode(); + const TOperator op = node->getAsOperator()->getOp(); + + switch (op) { + case EOpGenMul: + { + // mul(a,b) -> MatrixTimesMatrix, MatrixTimesVector, MatrixTimesScalar, VectorTimesScalar, Dot, Mul + // Since we are treating HLSL rows like GLSL columns (the first matrix indirection), + // we must reverse the operand order here. Hence, arg0 gets sequence[1], etc. + TIntermTyped* arg0 = argAggregate->getSequence()[1]->getAsTyped(); + TIntermTyped* arg1 = argAggregate->getSequence()[0]->getAsTyped(); + + if (arg0->isVector() && arg1->isVector()) { // vec * vec + node->getAsAggregate()->setOperator(EOpDot); + } else { + node = handleBinaryMath(loc, "mul", EOpMul, arg0, arg1); + } + + break; + } + + case EOpRcp: + { + // rcp(a) -> 1 / a + TIntermTyped* arg0 = fnUnary->getOperand(); + TBasicType type0 = arg0->getBasicType(); + TIntermTyped* one = intermediate.addConstantUnion(1, type0, loc, true); + node = handleBinaryMath(loc, "rcp", EOpDiv, one, arg0); + + break; + } + + case EOpSaturate: + { + // saturate(a) -> clamp(a,0,1) + TIntermTyped* arg0 = fnUnary->getOperand(); + TBasicType type0 = arg0->getBasicType(); + TIntermAggregate* clamp = new TIntermAggregate(EOpClamp); + + clamp->getSequence().push_back(arg0); + clamp->getSequence().push_back(intermediate.addConstantUnion(0, type0, loc, true)); + clamp->getSequence().push_back(intermediate.addConstantUnion(1, type0, loc, true)); + clamp->setLoc(loc); + clamp->setType(node->getType()); + clamp->getWritableType().getQualifier().makeTemporary(); + node = clamp; + + break; + } + + case EOpSinCos: + { + // sincos(a,b,c) -> b = sin(a), c = cos(a) + TIntermTyped* arg0 = argAggregate->getSequence()[0]->getAsTyped(); + TIntermTyped* arg1 = argAggregate->getSequence()[1]->getAsTyped(); + TIntermTyped* arg2 = argAggregate->getSequence()[2]->getAsTyped(); + + TIntermTyped* sinStatement = handleUnaryMath(loc, "sin", EOpSin, arg0); + TIntermTyped* cosStatement = handleUnaryMath(loc, "cos", EOpCos, arg0); + TIntermTyped* sinAssign = intermediate.addAssign(EOpAssign, arg1, sinStatement, loc); + TIntermTyped* cosAssign = intermediate.addAssign(EOpAssign, arg2, cosStatement, loc); + + TIntermAggregate* compoundStatement = intermediate.makeAggregate(sinAssign, loc); + compoundStatement = intermediate.growAggregate(compoundStatement, cosAssign); + compoundStatement->setOperator(EOpSequence); + compoundStatement->setLoc(loc); + compoundStatement->setType(TType(EbtVoid)); + + node = compoundStatement; + + break; + } + + case EOpClip: + { + // clip(a) -> if (any(a<0)) discard; + TIntermTyped* arg0 = fnUnary->getOperand(); + TBasicType type0 = arg0->getBasicType(); + TIntermTyped* compareNode = nullptr; + + // For non-scalars: per experiment with FXC compiler, discard if any component < 0. + if (!arg0->isScalar()) { + // component-wise compare: a < 0 + TIntermAggregate* less = new TIntermAggregate(EOpLessThan); + less->getSequence().push_back(arg0); + less->setLoc(loc); + + // make vec or mat of bool matching dimensions of input + less->setType(TType(EbtBool, EvqTemporary, + arg0->getType().getVectorSize(), + arg0->getType().getMatrixCols(), + arg0->getType().getMatrixRows(), + arg0->getType().isVector())); + + // calculate # of components for comparison const + const int constComponentCount = + std::max(arg0->getType().getVectorSize(), 1) * + std::max(arg0->getType().getMatrixCols(), 1) * + std::max(arg0->getType().getMatrixRows(), 1); + + TConstUnion zero; + 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); + compareNode = handleBinaryMath(loc, "clip", EOpLessThan, arg0, zero); + } + + TIntermBranch* killNode = intermediate.addBranch(EOpKill, loc); + + node = new TIntermSelection(compareNode, killNode, nullptr); + node->setLoc(loc); + + break; + } + + case EOpLog10: + { + // log10(a) -> log2(a) * 0.301029995663981 (== 1/log2(10)) + TIntermTyped* arg0 = fnUnary->getOperand(); + TIntermTyped* log2 = handleUnaryMath(loc, "log2", EOpLog2, arg0); + TIntermTyped* base = intermediate.addConstantUnion(0.301029995663981f, EbtFloat, loc, true); + + node = handleBinaryMath(loc, "mul", EOpMul, log2, base); + + break; + } + + case EOpDst: + { + // dest.x = 1; + // dest.y = src0.y * src1.y; + // dest.z = src0.z; + // dest.w = src1.w; + + TIntermTyped* arg0 = argAggregate->getSequence()[0]->getAsTyped(); + TIntermTyped* arg1 = argAggregate->getSequence()[1]->getAsTyped(); + + TIntermTyped* y = intermediate.addConstantUnion(1, loc, true); + TIntermTyped* z = intermediate.addConstantUnion(2, loc, true); + TIntermTyped* w = intermediate.addConstantUnion(3, loc, true); + + TIntermTyped* src0y = intermediate.addIndex(EOpIndexDirect, arg0, y, loc); + TIntermTyped* src1y = intermediate.addIndex(EOpIndexDirect, arg1, y, loc); + TIntermTyped* src0z = intermediate.addIndex(EOpIndexDirect, arg0, z, loc); + TIntermTyped* src1w = intermediate.addIndex(EOpIndexDirect, arg1, w, loc); + + TIntermAggregate* dst = new TIntermAggregate(EOpConstructVec4); + + dst->getSequence().push_back(intermediate.addConstantUnion(1.0, EbtFloat, loc, true)); + dst->getSequence().push_back(handleBinaryMath(loc, "mul", EOpMul, src0y, src1y)); + dst->getSequence().push_back(src0z); + dst->getSequence().push_back(src1w); + dst->setType(TType(EbtFloat, EvqTemporary, 4)); + dst->setLoc(loc); + node = dst; + + break; + } + + case EOpInterlockedAdd: // optional last argument (if present) is assigned from return value + case EOpInterlockedMin: // ... + case EOpInterlockedMax: // ... + case EOpInterlockedAnd: // ... + case EOpInterlockedOr: // ... + case EOpInterlockedXor: // ... + case EOpInterlockedExchange: // always has output arg + { + TIntermTyped* arg0 = argAggregate->getSequence()[0]->getAsTyped(); // dest + TIntermTyped* arg1 = argAggregate->getSequence()[1]->getAsTyped(); // value + TIntermTyped* arg2 = nullptr; + + if (argAggregate->getSequence().size() > 2) + arg2 = argAggregate->getSequence()[2]->getAsTyped(); + + const bool isImage = isImageParam(arg0); + const TOperator atomicOp = mapAtomicOp(loc, op, isImage); + TIntermAggregate* atomic = new TIntermAggregate(atomicOp); + atomic->setType(arg0->getType()); + atomic->getWritableType().getQualifier().makeTemporary(); + atomic->setLoc(loc); + + if (isImage) { + // orig_value = imageAtomicOp(image, loc, data) + imageAtomicParams(atomic, arg0); + atomic->getSequence().push_back(arg1); + + if (argAggregate->getSequence().size() > 2) { + node = intermediate.addAssign(EOpAssign, arg2, atomic, loc); + } else { + node = atomic; // no assignment needed, as there was no out var. + } + } else { + // Normal memory variable: + // arg0 = mem, arg1 = data, arg2(optional,out) = orig_value + if (argAggregate->getSequence().size() > 2) { + // optional output param is present. return value goes to arg2. + atomic->getSequence().push_back(arg0); + atomic->getSequence().push_back(arg1); + + node = intermediate.addAssign(EOpAssign, arg2, atomic, loc); + } else { + // Set the matching operator. Since output is absent, this is all we need to do. + node->getAsAggregate()->setOperator(atomicOp); + } + } + + break; + } + + case EOpInterlockedCompareExchange: + { + TIntermTyped* arg0 = argAggregate->getSequence()[0]->getAsTyped(); // dest + TIntermTyped* arg1 = argAggregate->getSequence()[1]->getAsTyped(); // cmp + TIntermTyped* arg2 = argAggregate->getSequence()[2]->getAsTyped(); // value + TIntermTyped* arg3 = argAggregate->getSequence()[3]->getAsTyped(); // orig + + const bool isImage = isImageParam(arg0); + TIntermAggregate* atomic = new TIntermAggregate(mapAtomicOp(loc, op, isImage)); + atomic->setLoc(loc); + atomic->setType(arg2->getType()); + atomic->getWritableType().getQualifier().makeTemporary(); + + if (isImage) { + imageAtomicParams(atomic, arg0); + } else { + atomic->getSequence().push_back(arg0); + } + + atomic->getSequence().push_back(arg1); + atomic->getSequence().push_back(arg2); + node = intermediate.addAssign(EOpAssign, arg3, atomic, loc); + + break; + } + + case EOpEvaluateAttributeSnapped: + { + // SPIR-V InterpolateAtOffset uses float vec2 offset in pixels + // HLSL uses int2 offset on a 16x16 grid in [-8..7] on x & y: + // iU = (iU<<28)>>28 + // fU = ((float)iU)/16 + // Targets might handle this natively, in which case they can disable + // decompositions. + + TIntermTyped* arg0 = argAggregate->getSequence()[0]->getAsTyped(); // value + TIntermTyped* arg1 = argAggregate->getSequence()[1]->getAsTyped(); // offset + + TIntermTyped* i28 = intermediate.addConstantUnion(28, loc, true); + TIntermTyped* iU = handleBinaryMath(loc, ">>", EOpRightShift, + handleBinaryMath(loc, "<<", EOpLeftShift, arg1, i28), + i28); + + TIntermTyped* recip16 = intermediate.addConstantUnion((1.0/16.0), EbtFloat, loc, true); + TIntermTyped* floatOffset = handleBinaryMath(loc, "mul", EOpMul, + intermediate.addConversion(EOpConstructFloat, + TType(EbtFloat, EvqTemporary, 2), iU), + recip16); + + TIntermAggregate* interp = new TIntermAggregate(EOpInterpolateAtOffset); + interp->getSequence().push_back(arg0); + interp->getSequence().push_back(floatOffset); + interp->setLoc(loc); + interp->setType(arg0->getType()); + interp->getWritableType().getQualifier().makeTemporary(); + + node = interp; + + break; + } + + case EOpLit: + { + TIntermTyped* n_dot_l = argAggregate->getSequence()[0]->getAsTyped(); + TIntermTyped* n_dot_h = argAggregate->getSequence()[1]->getAsTyped(); + TIntermTyped* m = argAggregate->getSequence()[2]->getAsTyped(); + + TIntermAggregate* dst = new TIntermAggregate(EOpConstructVec4); + + // Ambient + dst->getSequence().push_back(intermediate.addConstantUnion(1.0, EbtFloat, loc, true)); + + // Diffuse: + TIntermTyped* zero = intermediate.addConstantUnion(0.0, EbtFloat, loc, true); + TIntermAggregate* diffuse = new TIntermAggregate(EOpMax); + diffuse->getSequence().push_back(n_dot_l); + diffuse->getSequence().push_back(zero); + diffuse->setLoc(loc); + diffuse->setType(TType(EbtFloat)); + dst->getSequence().push_back(diffuse); + + // Specular: + TIntermAggregate* min_ndot = new TIntermAggregate(EOpMin); + min_ndot->getSequence().push_back(n_dot_l); + min_ndot->getSequence().push_back(n_dot_h); + min_ndot->setLoc(loc); + min_ndot->setType(TType(EbtFloat)); + + TIntermTyped* compare = handleBinaryMath(loc, "<", EOpLessThan, min_ndot, zero); + TIntermTyped* n_dot_h_m = handleBinaryMath(loc, "mul", EOpMul, n_dot_h, m); // n_dot_h * m + + dst->getSequence().push_back(intermediate.addSelection(compare, zero, n_dot_h_m, loc)); + + // One: + dst->getSequence().push_back(intermediate.addConstantUnion(1.0, EbtFloat, loc, true)); + + dst->setLoc(loc); + dst->setType(TType(EbtFloat, EvqTemporary, 4)); + node = dst; + break; + } + + case EOpAsDouble: + { + // asdouble accepts two 32 bit ints. we can use EOpUint64BitsToDouble, but must + // first construct a uint64. + TIntermTyped* arg0 = argAggregate->getSequence()[0]->getAsTyped(); + TIntermTyped* arg1 = argAggregate->getSequence()[1]->getAsTyped(); + + if (arg0->getType().isVector()) { // TODO: ... + error(loc, "double2 conversion not implemented", "asdouble", ""); + break; + } + + TIntermAggregate* uint64 = new TIntermAggregate(EOpConstructUVec2); + + uint64->getSequence().push_back(arg0); + uint64->getSequence().push_back(arg1); + uint64->setType(TType(EbtUint, EvqTemporary, 2)); // convert 2 uints to a uint2 + uint64->setLoc(loc); + + // bitcast uint2 to a double + TIntermTyped* convert = new TIntermUnary(EOpUint64BitsToDouble); + convert->getAsUnaryNode()->setOperand(uint64); + convert->setLoc(loc); + convert->setType(TType(EbtDouble, EvqTemporary)); + node = convert; + + break; + } + + case EOpF16tof32: + { + // input uvecN with low 16 bits of each component holding a float16. convert to float32. + TIntermTyped* argValue = node->getAsUnaryNode()->getOperand(); + TIntermTyped* zero = intermediate.addConstantUnion(0, loc, true); + const int vecSize = argValue->getType().getVectorSize(); + + TOperator constructOp = EOpNull; + switch (vecSize) { + case 1: constructOp = EOpNull; break; // direct use, no construct needed + case 2: constructOp = EOpConstructVec2; break; + case 3: constructOp = EOpConstructVec3; break; + case 4: constructOp = EOpConstructVec4; break; + default: assert(0); break; + } + + // For scalar case, we don't need to construct another type. + TIntermAggregate* result = (vecSize > 1) ? new TIntermAggregate(constructOp) : nullptr; + + if (result) { + result->setType(TType(EbtFloat, EvqTemporary, vecSize)); + result->setLoc(loc); + } + + for (int idx = 0; idx < vecSize; ++idx) { + TIntermTyped* idxConst = intermediate.addConstantUnion(idx, loc, true); + TIntermTyped* component = argValue->getType().isVector() ? + intermediate.addIndex(EOpIndexDirect, argValue, idxConst, loc) : argValue; + + if (component != argValue) + component->setType(TType(argValue->getBasicType(), EvqTemporary)); + + TIntermTyped* unpackOp = new TIntermUnary(EOpUnpackHalf2x16); + unpackOp->setType(TType(EbtFloat, EvqTemporary, 2)); + unpackOp->getAsUnaryNode()->setOperand(component); + unpackOp->setLoc(loc); + + TIntermTyped* lowOrder = intermediate.addIndex(EOpIndexDirect, unpackOp, zero, loc); + + if (result != nullptr) { + result->getSequence().push_back(lowOrder); + node = result; + } else { + node = lowOrder; + } + } + + break; + } + + case EOpF32tof16: + { + // input floatN converted to 16 bit float in low order bits of each component of uintN + TIntermTyped* argValue = node->getAsUnaryNode()->getOperand(); + + TIntermTyped* zero = intermediate.addConstantUnion(0.0, EbtFloat, loc, true); + const int vecSize = argValue->getType().getVectorSize(); + + TOperator constructOp = EOpNull; + switch (vecSize) { + case 1: constructOp = EOpNull; break; // direct use, no construct needed + case 2: constructOp = EOpConstructUVec2; break; + case 3: constructOp = EOpConstructUVec3; break; + case 4: constructOp = EOpConstructUVec4; break; + default: assert(0); break; + } + + // For scalar case, we don't need to construct another type. + TIntermAggregate* result = (vecSize > 1) ? new TIntermAggregate(constructOp) : nullptr; + + if (result) { + result->setType(TType(EbtUint, EvqTemporary, vecSize)); + result->setLoc(loc); + } + + for (int idx = 0; idx < vecSize; ++idx) { + TIntermTyped* idxConst = intermediate.addConstantUnion(idx, loc, true); + TIntermTyped* component = argValue->getType().isVector() ? + intermediate.addIndex(EOpIndexDirect, argValue, idxConst, loc) : argValue; + + if (component != argValue) + component->setType(TType(argValue->getBasicType(), EvqTemporary)); + + TIntermAggregate* vec2ComponentAndZero = new TIntermAggregate(EOpConstructVec2); + vec2ComponentAndZero->getSequence().push_back(component); + vec2ComponentAndZero->getSequence().push_back(zero); + vec2ComponentAndZero->setType(TType(EbtFloat, EvqTemporary, 2)); + vec2ComponentAndZero->setLoc(loc); + + TIntermTyped* packOp = new TIntermUnary(EOpPackHalf2x16); + packOp->getAsUnaryNode()->setOperand(vec2ComponentAndZero); + packOp->setLoc(loc); + packOp->setType(TType(EbtUint, EvqTemporary)); + + if (result != nullptr) { + result->getSequence().push_back(packOp); + node = result; + } else { + node = packOp; + } + } + + break; + } + + case EOpD3DCOLORtoUBYTE4: + { + // ivec4 ( x.zyxw * 255.001953 ); + TIntermTyped* arg0 = node->getAsUnaryNode()->getOperand(); + TSwizzleSelectors selectors; + selectors.push_back(2); + selectors.push_back(1); + selectors.push_back(0); + selectors.push_back(3); + TIntermTyped* swizzleIdx = intermediate.addSwizzle(selectors, loc); + TIntermTyped* swizzled = intermediate.addIndex(EOpVectorSwizzle, arg0, swizzleIdx, loc); + swizzled->setType(arg0->getType()); + swizzled->getWritableType().getQualifier().makeTemporary(); + + TIntermTyped* conversion = intermediate.addConstantUnion(255.001953f, EbtFloat, loc, true); + TIntermTyped* rangeConverted = handleBinaryMath(loc, "mul", EOpMul, conversion, swizzled); + rangeConverted->setType(arg0->getType()); + rangeConverted->getWritableType().getQualifier().makeTemporary(); + + node = intermediate.addConversion(EOpConstructInt, TType(EbtInt, EvqTemporary, 4), rangeConverted); + node->setLoc(loc); + node->setType(TType(EbtInt, EvqTemporary, 4)); + break; + } + + default: + break; // most pass through unchanged + } +} + +// +// Handle seeing function call syntax in the grammar, which could be any of +// - .length() method +// - constructor +// - a call to a built-in function mapped to an operator +// - a call to a built-in function that will remain a function call (e.g., texturing) +// - user function +// - subroutine call (not implemented yet) +// +TIntermTyped* HlslParseContext::handleFunctionCall(const TSourceLoc& loc, TFunction* function, TIntermTyped* arguments) +{ + TIntermTyped* result = nullptr; + + TOperator op = function->getBuiltInOp(); + if (op != EOpNull) { + // + // Then this should be a constructor. + // Don't go through the symbol table for constructors. + // Their parameters will be verified algorithmically. + // + TType type(EbtVoid); // use this to get the type back + if (! constructorError(loc, arguments, *function, op, type)) { + // + // It's a constructor, of type 'type'. + // + result = addConstructor(loc, arguments, type); + if (result == nullptr) + error(loc, "cannot construct with these arguments", type.getCompleteString().c_str(), ""); + } + } else { + // + // Find it in the symbol table. + // + const TFunction* fnCandidate = nullptr; + bool builtIn = false; + + // 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())) { + static const int methodPrefixSize = sizeof(BUILTIN_PREFIX)-1; + + if (function->getName().length() > methodPrefixSize && + isStructBufferMethod(function->getName().substr(methodPrefixSize))) { + const TString mangle = function->getName() + "("; + TSymbol* symbol = symbolTable.find(mangle, &builtIn); + + if (symbol) + fnCandidate = symbol->getAsFunction(); + } + } + } + + if (fnCandidate == nullptr) + fnCandidate = findFunction(loc, *function, builtIn, arguments); + + if (fnCandidate) { + // This is a declared function that might map to + // - a built-in operator, + // - a built-in function not mapped to an operator, or + // - a user function. + + // Error check for a function requiring specific extensions present. + if (builtIn && fnCandidate->getNumExtensions()) + requireExtensions(loc, fnCandidate->getNumExtensions(), fnCandidate->getExtensions(), fnCandidate->getName().c_str()); + + // Convert 'in' arguments + if (arguments) + addInputArgumentConversions(*fnCandidate, arguments); + + 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()); + if (result == nullptr) { + error(arguments->getLoc(), " wrong operand type", "Internal Error", + "built in unary operator function. Type: %s", + static_cast(arguments)->getCompleteString().c_str()); + } else if (result->getAsOperator()) { + builtInOpCheck(loc, *fnCandidate, *result->getAsOperator()); + } + } else { + // This is a function call not mapped to built-in operator. + // 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()); + + // 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()); + } + } + + // for decompositions, since we want to operate on the function node, not the aggregate holding + // output conversions. + const TIntermTyped* fnNode = result; + + decomposeStructBufferMethods(loc, result, arguments); // HLSL->AST struct buffer method decompositions + decomposeIntrinsic(loc, result, arguments); // HLSL->AST intrinsic decompositions + 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. + 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); + } + 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 + if (result == nullptr) + result = intermediate.addConstantUnion(0.0, EbtFloat, loc); + + return result; +} + +// +// 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) { + if (function.getParamCount() == 1) + arguments = arg; + else { + if (aggregate) + aggregate->getSequence()[argNum] = arg; + else + arguments = arg; + } + }; + + // Process each argument's conversion + for (int i = 0; i < function.getParamCount(); ++i) { + if (! function[i].type->getQualifier().isParamInput()) + continue; + + // 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()[i]->getAsTyped() : arguments->getAsTyped()); + if (*function[i].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); + if (convArg != nullptr) + convArg = intermediate.addShapeConversion(EOpFunctionCall, *function[i].type, convArg); + if (convArg != nullptr) + setArg(i, convArg); + else + error(arg->getLoc(), "cannot convert input argument, argument", "", "%d", i); + } 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(); + + // 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 output conversions for function-call arguments. This +// can require a new tree topology, complicated further by whether the function +// has a return value. +// +// Returns a node of a subtree that evaluates to the return value of the function. +// +TIntermTyped* HlslParseContext::addOutputArgumentConversions(const TFunction& function, TIntermOperator& intermNode) +{ + assert (intermNode.getAsAggregate() != nullptr || intermNode.getAsUnaryNode() != nullptr); + + const TSourceLoc& loc = intermNode.getLoc(); + + TIntermSequence argSequence; // temp sequence for unary node args + + if (intermNode.getAsUnaryNode()) + argSequence.push_back(intermNode.getAsUnaryNode()->getOperand()); + + TIntermSequence& arguments = argSequence.empty() ? intermNode.getAsAggregate()->getSequence() : argSequence; + + const auto needsConversion = [&](int argNum) { + return function[argNum].type->getQualifier().isParamOutput() && + (*function[argNum].type != arguments[argNum]->getAsTyped()->getType() || + shouldConvertLValue(arguments[argNum]) || + wasFlattened(arguments[argNum]->getAsTyped())); + }; + + // Will there be any output conversions? + bool outputConversions = false; + for (int i = 0; i < function.getParamCount(); ++i) { + if (needsConversion(i)) { + outputConversions = true; + break; + } + } + + if (! outputConversions) + return &intermNode; + + // Setup for the new tree, if needed: + // + // Output conversions need a different tree topology. + // Out-qualified arguments need a temporary of the correct type, with the call + // followed by an assignment of the temporary to the original argument: + // void: function(arg, ...) -> ( function(tempArg, ...), arg = tempArg, ...) + // ret = function(arg, ...) -> ret = (tempRet = function(tempArg, ...), arg = tempArg, ..., tempRet) + // Where the "tempArg" type needs no conversion as an argument, but will convert on assignment. + TIntermTyped* conversionTree = nullptr; + TVariable* tempRet = nullptr; + if (intermNode.getBasicType() != EbtVoid) { + // do the "tempRet = function(...), " bit from above + tempRet = makeInternalVariable("tempReturn", intermNode.getType()); + TIntermSymbol* tempRetNode = intermediate.addSymbol(*tempRet, loc); + conversionTree = intermediate.addAssign(EOpAssign, tempRetNode, &intermNode, loc); + } else + conversionTree = &intermNode; + + conversionTree = intermediate.makeAggregate(conversionTree); + + // Process each argument's conversion + for (int i = 0; i < function.getParamCount(); ++i) { + if (needsConversion(i)) { + // Out-qualified arguments needing conversion need to use the topology setup above. + // Do the " ...(tempArg, ...), arg = tempArg" bit from above. + + // Make a temporary for what the function expects the argument to look like. + TVariable* tempArg = makeInternalVariable("tempArg", *function[i].type); + tempArg->getWritableType().getQualifier().makeTemporary(); + 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); + tempAssign = handleLvalue(arguments[i]->getLoc(), "assign", tempAssign); + conversionTree = intermediate.growAggregate(conversionTree, tempAssign, arguments[i]->getLoc()); + + // replace the argument with another node for the same tempArg variable + arguments[i] = intermediate.addSymbol(*tempArg, loc); + } + } + + // Finalize the tree topology (see bigger comment above). + if (tempRet) { + // do the "..., tempRet" bit from above + TIntermSymbol* tempRetNode = intermediate.addSymbol(*tempRet, loc); + conversionTree = intermediate.growAggregate(conversionTree, tempRetNode, loc); + } + + conversionTree = intermediate.setAggregateOperator(conversionTree, EOpComma, intermNode.getType(), loc); + + return conversionTree; +} + +// +// Do additional checking of built-in function calls that is not caught +// by normal semantic checks on argument type, extension tagging, etc. +// +// Assumes there has been a semantically correct match to a built-in function prototype. +// +void HlslParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCandidate, TIntermOperator& callNode) +{ + // Set up convenience accessors to the argument(s). There is almost always + // multiple arguments for the cases below, but when there might be one, + // check the unaryArg first. + const TIntermSequence* argp = nullptr; // confusing to use [] syntax on a pointer, so this is to help get a reference + const TIntermTyped* unaryArg = nullptr; + const TIntermTyped* arg0 = nullptr; + if (callNode.getAsAggregate()) { + argp = &callNode.getAsAggregate()->getSequence(); + if (argp->size() > 0) + arg0 = (*argp)[0]->getAsTyped(); + } else { + assert(callNode.getAsUnaryNode()); + unaryArg = callNode.getAsUnaryNode()->getOperand(); + arg0 = unaryArg; + } + const TIntermSequence& aggArgs = *argp; // only valid when unaryArg is nullptr + + switch (callNode.getOp()) { + case EOpTextureGather: + case EOpTextureGatherOffset: + case EOpTextureGatherOffsets: + { + // Figure out which variants are allowed by what extensions, + // and what arguments must be constant for which situations. + + TString featureString = fnCandidate.getName() + "(...)"; + const char* feature = featureString.c_str(); + int compArg = -1; // track which argument, if any, is the constant component argument + switch (callNode.getOp()) { + 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[0].type->getSampler().shadow) + compArg = 2; + } + break; + case EOpTextureGatherOffset: + // GL_ARB_texture_gather is good enough for 2D non-shadow textures with no component argument + if (! fnCandidate[0].type->getSampler().shadow) + compArg = 3; + break; + case EOpTextureGatherOffsets: + if (! fnCandidate[0].type->getSampler().shadow) + compArg = 3; + break; + default: + break; + } + + if (compArg > 0 && compArg < fnCandidate.getParamCount()) { + if (aggArgs[compArg]->getAsConstantUnion()) { + int value = aggArgs[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"); + } + + break; + } + + case EOpTextureOffset: + case EOpTextureFetchOffset: + case EOpTextureProjOffset: + case EOpTextureLodOffset: + case EOpTextureProjLodOffset: + case EOpTextureGradOffset: + case EOpTextureProjGradOffset: + { + // Handle texture-offset limits checking + // Pick which argument has to hold constant offsets + int arg = -1; + switch (callNode.getOp()) { + case EOpTextureOffset: arg = 2; break; + case EOpTextureFetchOffset: arg = (arg0->getType().getSampler().dim != EsdRect) ? 3 : 2; break; + case EOpTextureProjOffset: arg = 2; break; + case EOpTextureLodOffset: arg = 3; break; + case EOpTextureProjLodOffset: arg = 3; break; + case EOpTextureGradOffset: arg = 4; break; + case EOpTextureProjGradOffset: arg = 4; break; + default: + assert(0); + break; + } + + if (arg > 0) { + if (! aggArgs[arg]->getAsConstantUnion()) + 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]"); + } + } + } + + break; + } + + case EOpTextureQuerySamples: + case EOpImageQuerySamples: + break; + + case EOpImageAtomicAdd: + case EOpImageAtomicMin: + case EOpImageAtomicMax: + case EOpImageAtomicAnd: + case EOpImageAtomicOr: + case EOpImageAtomicXor: + case EOpImageAtomicExchange: + case EOpImageAtomicCompSwap: + break; + + case EOpInterpolateAtCentroid: + case EOpInterpolateAtSample: + case EOpInterpolateAtOffset: + // Make sure the first argument is an interpolant, or an array element of an interpolant + if (arg0->getType().getQualifier().storage != EvqVaryingIn) { + // It might still be an array element. + // + // We could check more, but the semantics of the first argument are already met; the + // only way to turn an array into a float/vec* is array dereference and swizzle. + // + // ES and desktop 4.3 and earlier: swizzles may not be used + // 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(), ""); + } + break; + + default: + break; + } +} + +// +// Handle seeing a built-in constructor in a grammar production. +// +TFunction* HlslParseContext::handleConstructorCall(const TSourceLoc& loc, const TType& type) +{ + TOperator op = intermediate.mapTypeToConstructorOp(type); + + if (op == EOpNull) { + error(loc, "cannot construct this type", type.getBasicString(), ""); + return nullptr; + } + + TString empty(""); + + return new TFunction(&empty, type, op); +} + +// +// 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) +{ + // adjust for stage in/out + + switch(builtIn) { + case EbvPosition: + if (language == EShLangFragment) + builtIn = EbvFragCoord; + break; + case EbvStencilRef: + error(loc, "unimplemented; need ARB_shader_stencil_export", "SV_STENCILREF", ""); + break; + default: + break; + } + + qualifier.builtIn = builtIn; + qualifier.semanticName = intermediate.addSemanticName(upperCase); +} + +// +// Handle seeing something like "PACKOFFSET LEFT_PAREN c[Subcomponent][.component] RIGHT_PAREN" +// +// 'location' has the "c[Subcomponent]" part. +// 'component' points to the "component" part, or nullptr if not present. +// +void HlslParseContext::handlePackOffset(const TSourceLoc& loc, TQualifier& qualifier, const glslang::TString& location, + const glslang::TString* component) +{ + if (location.size() == 0 || location[0] != 'c') { + error(loc, "expected 'c'", "packoffset", ""); + return; + } + if (location.size() == 1) + return; + if (! isdigit(location[1])) { + error(loc, "expected number after 'c'", "packoffset", ""); + return; + } + + qualifier.layoutOffset = 16 * atoi(location.substr(1, location.size()).c_str()); + if (component != nullptr) { + int componentOffset = 0; + switch ((*component)[0]) { + case 'x': componentOffset = 0; break; + case 'y': componentOffset = 4; break; + case 'z': componentOffset = 8; break; + case 'w': componentOffset = 12; break; + default: + componentOffset = -1; + break; + } + if (componentOffset < 0 || component->size() > 1) { + error(loc, "expected {x, y, z, w} for component", "packoffset", ""); + return; + } + qualifier.layoutOffset += componentOffset; + } +} + +// +// Handle seeing something like "REGISTER LEFT_PAREN [shader_profile,] Type# RIGHT_PAREN" +// +// 'profile' points to the shader_profile part, or nullptr if not present. +// 'desc' is the type# part. +// +void HlslParseContext::handleRegister(const TSourceLoc& loc, TQualifier& qualifier, const glslang::TString* profile, + const glslang::TString& desc, int subComponent, const glslang::TString* spaceDesc) +{ + if (profile != nullptr) + warn(loc, "ignoring shader_profile", "register", ""); + + if (desc.size() < 1) { + error(loc, "expected register type", "register", ""); + return; + } + + int regNumber = 0; + if (desc.size() > 1) { + if (isdigit(desc[1])) + regNumber = atoi(desc.substr(1, desc.size()).c_str()); + else { + error(loc, "expected register number after register type", "register", ""); + return; + } + } + + // TODO: learn what all these really mean and how they interact with regNumber and subComponent + switch (std::tolower(desc[0])) { + case 'b': + case 't': + case 'c': + case 's': + case 'u': + qualifier.layoutBinding = regNumber + subComponent; + break; + default: + warn(loc, "ignoring unrecognized register type", "register", "%c", desc[0]); + break; + } + + // space + unsigned int setNumber; + const auto crackSpace = [&]() -> bool { + const int spaceLen = 5; + if (spaceDesc->size() < spaceLen + 1) + return false; + if (spaceDesc->compare(0, spaceLen, "space") != 0) + return false; + if (! isdigit((*spaceDesc)[spaceLen])) + return false; + setNumber = atoi(spaceDesc->substr(spaceLen, spaceDesc->size()).c_str()); + return true; + }; + + if (spaceDesc) { + if (! crackSpace()) { + error(loc, "expected spaceN", "register", ""); + return; + } + qualifier.layoutSet = setNumber; + } +} + +// +// Same error message for all places assignments don't work. +// +void HlslParseContext::assignError(const TSourceLoc& loc, const char* op, TString left, TString right) +{ + error(loc, "", op, "cannot convert from '%s' to '%s'", + right.c_str(), left.c_str()); +} + +// +// Same error message for all places unary operations don't work. +// +void HlslParseContext::unaryOpError(const TSourceLoc& loc, const char* op, TString operand) +{ + error(loc, " wrong operand type", op, + "no operation '%s' exists that takes an operand of type %s (or there is no acceptable conversion)", + op, operand.c_str()); +} + +// +// Same error message for all binary operations don't work. +// +void HlslParseContext::binaryOpError(const TSourceLoc& loc, const char* op, TString left, TString right) +{ + error(loc, " wrong operand types:", op, + "no operation '%s' exists that takes a left-hand operand of type '%s' and " + "a right operand of type '%s' (or there is no acceptable conversion)", + op, left.c_str(), right.c_str()); +} + +// +// A basic type of EbtVoid is a key that the name string was seen in the source, but +// it was not found as a variable in the symbol table. If so, give the error +// message and insert a dummy variable in the symbol table to prevent future errors. +// +void HlslParseContext::variableCheck(TIntermTyped*& nodePtr) +{ + TIntermSymbol* symbol = nodePtr->getAsSymbolNode(); + if (! symbol) + return; + + if (symbol->getType().getBasicType() == EbtVoid) { + error(symbol->getLoc(), "undeclared identifier", symbol->getName().c_str(), ""); + + // Add to symbol table to prevent future error messages on the same name + if (symbol->getName().size() > 0) { + TVariable* fakeVariable = new TVariable(&symbol->getName(), TType(EbtFloat)); + symbolTable.insert(*fakeVariable); + + // substitute a symbol node for this new variable + nodePtr = intermediate.addSymbol(*fakeVariable, symbol->getLoc()); + } + } +} + +// +// Both test, and if necessary spit out an error, to see if the node is really +// a constant. +// +void HlslParseContext::constantValueCheck(TIntermTyped* node, const char* token) +{ + if (node->getQualifier().storage != EvqConst) + error(node->getLoc(), "constant expression required", token, ""); +} + +// +// Both test, and if necessary spit out an error, to see if the node is really +// an integer. +// +void HlslParseContext::integerCheck(const TIntermTyped* node, const char* token) +{ + if ((node->getBasicType() == EbtInt || node->getBasicType() == EbtUint) && node->isScalar()) + return; + + error(node->getLoc(), "scalar integer expression required", token, ""); +} + +// +// Both test, and if necessary spit out an error, to see if we are currently +// globally scoped. +// +void HlslParseContext::globalCheck(const TSourceLoc& loc, const char* token) +{ + if (! symbolTable.atGlobalLevel()) + error(loc, "not allowed in nested scope", token, ""); +} + +bool HlslParseContext::builtInName(const TString& /*identifier*/) +{ + return false; +} + +// +// Make sure there is enough data and not too many arguments provided to the +// constructor to build something of the type of the constructor. Also returns +// the type of the constructor. +// +// Returns true if there was an error in construction. +// +bool HlslParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, TFunction& function, + TOperator op, TType& type) +{ + type.shallowCopy(function.getType()); + + bool constructingMatrix = false; + switch (op) { + case EOpConstructTextureSampler: + return constructorTextureSamplerError(loc, function); + case EOpConstructMat2x2: + case EOpConstructMat2x3: + case EOpConstructMat2x4: + case EOpConstructMat3x2: + case EOpConstructMat3x3: + case EOpConstructMat3x4: + case EOpConstructMat4x2: + case EOpConstructMat4x3: + case EOpConstructMat4x4: + case EOpConstructDMat2x2: + case EOpConstructDMat2x3: + case EOpConstructDMat2x4: + case EOpConstructDMat3x2: + case EOpConstructDMat3x3: + case EOpConstructDMat3x4: + case EOpConstructDMat4x2: + case EOpConstructDMat4x3: + case EOpConstructDMat4x4: + constructingMatrix = true; + break; + default: + break; + } + + // + // Walk the arguments for first-pass checks and collection of information. + // + + int size = 0; + bool constType = true; + bool full = false; + bool overFull = false; + bool matrixInMatrix = false; + bool arrayArg = false; + for (int arg = 0; arg < function.getParamCount(); ++arg) { + if (function[arg].type->isArray()) { + if (! function[arg].type->isExplicitlySizedArray()) { + // Can't construct from an unsized array. + error(loc, "array argument must be sized", "constructor", ""); + return true; + } + arrayArg = true; + } + if (constructingMatrix && function[arg].type->isMatrix()) + matrixInMatrix = true; + + // 'full' will go to true when enough args have been seen. If we loop + // again, there is an extra argument. + if (full) { + // For vectors and matrices, it's okay to have too many components + // available, but not okay to have unused arguments. + overFull = true; + } + + size += function[arg].type->computeNumComponents(); + if (op != EOpConstructStruct && ! type.isArray() && size >= type.computeNumComponents()) + full = true; + + if (function[arg].type->getQualifier().storage != EvqConst) + constType = false; + } + + if (constType) + type.getQualifier().storage = EvqConst; + + if (type.isArray()) { + if (function.getParamCount() == 0) { + error(loc, "array constructor must have at least one argument", "constructor", ""); + return true; + } + + if (type.isImplicitlySizedArray()) { + // auto adapt the constructor type to the number of arguments + type.changeOuterArraySize(function.getParamCount()); + } else if (type.getOuterArraySize() != function.getParamCount()) { + error(loc, "array constructor needs one argument per array element", "constructor", ""); + return true; + } + + if (type.isArrayOfArrays()) { + // Types have to match, but we're still making the type. + // Finish making the type, and the comparison is done later + // when checking for conversion. + TArraySizes& arraySizes = type.getArraySizes(); + + // At least the dimensionalities have to match. + 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; + } + + if (arraySizes.isInnerImplicit()) { + // "Arrays of arrays ..., and the size for any dimension is optional" + // That means we need to adopt (from the first argument) the other array sizes into the type. + for (int d = 1; d < arraySizes.getNumDims(); ++d) { + if (arraySizes.getDimSize(d) == UnsizedArraySize) { + arraySizes.setDimSize(d, function[0].type->getArraySizes().getDimSize(d - 1)); + } + } + } + } + } + + if (arrayArg && op != EOpConstructStruct && ! type.isArrayOfArrays()) { + error(loc, "constructing non-array constituent from array argument", "constructor", ""); + return true; + } + + if (matrixInMatrix && ! type.isArray()) { + return false; + } + + if (overFull) { + error(loc, "too many arguments", "constructor", ""); + return true; + } + + if (op == EOpConstructStruct && ! type.isArray() && isZeroConstructor(node)) + return false; + + if (op == EOpConstructStruct && ! type.isArray() && (int)type.getStruct()->size() != function.getParamCount()) { + error(loc, "Number of constructor parameters does not match the number of structure fields", "constructor", ""); + return true; + } + + if ((op != EOpConstructStruct && size != 1 && size < type.computeNumComponents()) || + (op == EOpConstructStruct && size < type.computeNumComponents())) { + error(loc, "not enough data provided for construction", "constructor", ""); + return true; + } + + return false; +} + +bool HlslParseContext::isZeroConstructor(const TIntermNode* node) +{ + return node->getAsTyped()->isScalar() && node->getAsConstantUnion() && + node->getAsConstantUnion()->getConstArray()[0].getIConst() == 0; +} + +// Verify all the correct semantics for constructing a combined texture/sampler. +// Return true if the semantics are incorrect. +bool HlslParseContext::constructorTextureSamplerError(const TSourceLoc& loc, const TFunction& function) +{ + TString constructorName = function.getType().getBasicTypeString(); // TODO: performance: should not be making copy; interface needs to change + const char* token = constructorName.c_str(); + + // exactly two arguments needed + if (function.getParamCount() != 2) { + error(loc, "sampler-constructor requires two arguments", token, ""); + return true; + } + + // For now, not allowing arrayed constructors, the rest of this function + // is set up to allow them, if this test is removed: + if (function.getType().isArray()) { + error(loc, "sampler-constructor cannot make an array of samplers", token, ""); + return true; + } + + // first argument + // * the constructor's first argument must be a texture type + // * the dimensionality (1D, 2D, 3D, Cube, Rect, Buffer, MS, and Array) + // of the texture type must match that of the constructed sampler type + // (that is, the suffixes of the type of the first argument and the + // type of the constructor will be spelled the same way) + if (function[0].type->getBasicType() != EbtSampler || + ! function[0].type->getSampler().isTexture() || + function[0].type->isArray()) { + error(loc, "sampler-constructor first argument must be a scalar textureXXX type", token, ""); + return true; + } + // simulate the first argument's impact on the result type, so it can be compared with the encapsulated operator!=() + TSampler texture = function.getType().getSampler(); + texture.combined = false; + texture.shadow = false; + if (texture != function[0].type->getSampler()) { + error(loc, "sampler-constructor first argument must match type and dimensionality of constructor type", token, ""); + return true; + } + + // second argument + // * the constructor's second argument must be a scalar of type + // *sampler* or *samplerShadow* + // * the presence or absence of depth comparison (Shadow) must match + // between the constructed sampler type and the type of the second argument + if (function[1].type->getBasicType() != EbtSampler || + ! function[1].type->getSampler().isPureSampler() || + function[1].type->isArray()) { + error(loc, "sampler-constructor second argument must be a scalar type 'sampler'", token, ""); + 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, ""); + return true; + } + + return false; +} + +// Checks to see if a void variable has been declared and raise an error message for such a case +// +// returns true in case of an error +// +bool HlslParseContext::voidErrorCheck(const TSourceLoc& loc, const TString& identifier, const TBasicType basicType) +{ + if (basicType == EbtVoid) { + error(loc, "illegal use of type 'void'", identifier.c_str(), ""); + return true; + } + + 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. +// +void HlslParseContext::globalQualifierFix(const TSourceLoc&, TQualifier& qualifier) +{ + // move from parameter/unknown qualifiers to pipeline in/out qualifiers + switch (qualifier.storage) { + case EvqIn: + qualifier.storage = EvqVaryingIn; + break; + case EvqOut: + qualifier.storage = EvqVaryingOut; + break; + default: + break; + } +} + +// +// Merge characteristics of the 'src' qualifier into the 'dst'. +// If there is duplication, issue error messages, unless 'force' +// is specified, which means to just override default settings. +// +// Also, when force is false, it will be assumed that 'src' follows +// 'dst', for the purpose of error checking order for versions +// that require specific orderings of qualifiers. +// +void HlslParseContext::mergeQualifiers(TQualifier& dst, const TQualifier& src) +{ + // Storage qualification + if (dst.storage == EvqTemporary || dst.storage == EvqGlobal) + dst.storage = src.storage; + else if ((dst.storage == EvqIn && src.storage == EvqOut) || + (dst.storage == EvqOut && src.storage == EvqIn)) + dst.storage = EvqInOut; + else if ((dst.storage == EvqIn && src.storage == EvqConst) || + (dst.storage == EvqConst && src.storage == EvqIn)) + dst.storage = EvqConstReadOnly; + + // Layout qualifiers + mergeObjectLayoutQualifiers(dst, src, false); + + // individual qualifiers + bool repeated = false; +#define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field; + MERGE_SINGLETON(invariant); + MERGE_SINGLETON(noContraction); + MERGE_SINGLETON(centroid); + MERGE_SINGLETON(smooth); + MERGE_SINGLETON(flat); + MERGE_SINGLETON(nopersp); + MERGE_SINGLETON(patch); + MERGE_SINGLETON(sample); + MERGE_SINGLETON(coherent); + MERGE_SINGLETON(volatil); + MERGE_SINGLETON(restrict); + MERGE_SINGLETON(readonly); + MERGE_SINGLETON(writeonly); + MERGE_SINGLETON(specConstant); +} + +// used to flatten the sampler type space into a single dimension +// correlates with the declaration of defaultSamplerPrecision[] +int HlslParseContext::computeSamplerTypeIndex(TSampler& sampler) +{ + int arrayIndex = sampler.arrayed ? 1 : 0; + int shadowIndex = sampler.shadow ? 1 : 0; + int externalIndex = sampler.external ? 1 : 0; + + return EsdNumDims * (EbtNumTypes * (2 * (2 * arrayIndex + shadowIndex) + externalIndex) + sampler.type) + sampler.dim; +} + +// +// Do size checking for an array type's size. +// +void HlslParseContext::arraySizeCheck(const TSourceLoc& loc, TIntermTyped* expr, TArraySize& sizePair) +{ + bool isConst = false; + sizePair.size = 1; + sizePair.node = nullptr; + + TIntermConstantUnion* constant = expr->getAsConstantUnion(); + if (constant) { + // handle true (non-specialization) constant + sizePair.size = constant->getConstArray()[0].getIConst(); + isConst = true; + } else { + // see if it's a specialization constant instead + if (expr->getQualifier().isSpecConstant()) { + isConst = true; + sizePair.node = expr; + TIntermSymbol* symbol = expr->getAsSymbolNode(); + if (symbol && symbol->getConstArray().size() > 0) + sizePair.size = symbol->getConstArray()[0].getIConst(); + } + } + + if (! isConst || (expr->getBasicType() != EbtInt && expr->getBasicType() != EbtUint)) { + error(loc, "array size must be a constant integer expression", "", ""); + return; + } + + if (sizePair.size <= 0) { + error(loc, "array size must be a positive integer", "", ""); + return; + } +} + +// +// Require array to be completely sized +// +void HlslParseContext::arraySizeRequiredCheck(const TSourceLoc& loc, const TArraySizes& arraySizes) +{ + if (arraySizes.isImplicit()) + error(loc, "array size required", "", ""); +} + +void HlslParseContext::structArrayCheck(const TSourceLoc& /*loc*/, const TType& type) +{ + const TTypeList& structure = *type.getStruct(); + for (int m = 0; m < (int)structure.size(); ++m) { + const TType& member = *structure[m].type; + if (member.isArray()) + arraySizeRequiredCheck(structure[m].loc, *member.getArraySizes()); + } +} + +// Merge array dimensions listed in 'sizes' onto the type's array dimensions. +// +// From the spec: "vec4[2] a[3]; // size-3 array of size-2 array of vec4" +// +// That means, the 'sizes' go in front of the 'type' as outermost sizes. +// 'type' is the type part of the declaration (to the left) +// 'sizes' is the arrayness tagged on the identifier (to the right) +// +void HlslParseContext::arrayDimMerge(TType& type, const TArraySizes* sizes) +{ + if (sizes) + type.addArrayOuterSizes(*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) +{ + if (! symbol) { + bool currentScope; + symbol = symbolTable.find(identifier, nullptr, ¤tScope); + + if (symbol && builtInName(identifier) && ! symbolTable.atBuiltInLevel()) { + // bad shader (errors already reported) trying to redeclare a built-in name as an array + return; + } + if (symbol == nullptr || ! currentScope) { + // + // Successfully process a new definition. + // (Redeclarations have to take place at the same scope; otherwise they are hiding declarations) + // + symbol = new TVariable(&identifier, type); + symbolTable.insert(*symbol); + if (track && symbolTable.atGlobalLevel()) + trackLinkage(*symbol); + + return; + } + if (symbol->getAsAnonMember()) { + error(loc, "cannot redeclare a user-block member array", identifier.c_str(), ""); + symbol = nullptr; + return; + } + } + + // + // Process a redeclaration. + // + + if (! symbol) { + error(loc, "array variable name expected", identifier.c_str(), ""); + return; + } + + // redeclareBuiltinVariable() should have already done the copyUp() + 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 + return; + } + + existingType.updateArraySizes(type); +} + +void HlslParseContext::updateImplicitArraySize(const TSourceLoc& loc, TIntermNode *node, int index) +{ + // maybe there is nothing to do... + TIntermTyped* typedNode = node->getAsTyped(); + if (typedNode->getType().getImplicitArraySize() > index) + return; + + // something to do... + + // Figure out what symbol to lookup, as we will use its type to edit for the size change, + // as that type will be shared through shallow copies for future references. + TSymbol* symbol = nullptr; + int blockIndex = -1; + const TString* lookupName = nullptr; + if (node->getAsSymbolNode()) + lookupName = &node->getAsSymbolNode()->getName(); + else if (node->getAsBinaryNode()) { + const TIntermBinary* deref = node->getAsBinaryNode(); + // This has to be the result of a block dereference, unless it's bad shader code + // If it's a uniform block, then an error will be issued elsewhere, but + // return early now to avoid crashing later in this function. + if (! deref->getLeft()->getAsSymbolNode() || deref->getLeft()->getBasicType() != EbtBlock || + deref->getLeft()->getType().getQualifier().storage == EvqUniform || + deref->getRight()->getAsConstantUnion() == nullptr) + return; + + blockIndex = deref->getRight()->getAsConstantUnion()->getConstArray()[0].getIConst(); + + lookupName = &deref->getLeft()->getAsSymbolNode()->getName(); + if (IsAnonymous(*lookupName)) + lookupName = &(*deref->getLeft()->getType().getStruct())[blockIndex].type->getFieldName(); + } + + // Lookup the symbol, should only fail if shader code is incorrect + symbol = symbolTable.find(*lookupName); + if (symbol == nullptr) + return; + + if (symbol->getAsFunction()) { + error(loc, "array variable name expected", symbol->getName().c_str(), ""); + return; + } + + symbol->getWritableType().setImplicitArraySize(index + 1); +} + +// +// Enforce non-initializer type/qualifier rules. +// +void HlslParseContext::fixConstInit(const TSourceLoc& loc, TString& identifier, TType& type, TIntermTyped*& initializer) +{ + // + // Make the qualifier make sense, given that there is an initializer. + // + if (initializer == nullptr) { + if (type.getQualifier().storage == EvqConst || + type.getQualifier().storage == EvqConstReadOnly) { + initializer = intermediate.makeAggregate(loc); + warn(loc, "variable with qualifier 'const' not initialized; zero initializing", identifier.c_str(), ""); + } + } +} + +// +// See if the identifier is a built-in symbol that can be redeclared, and if so, +// copy the symbol table's read-only built-in variable to the current +// global level, where it can be modified based on the passed in type. +// +// Returns nullptr if no redeclaration took place; meaning a normal declaration still +// needs to occur for it, not necessarily an error. +// +// Returns a redeclared and type-modified variable if a redeclared occurred. +// +TSymbol* HlslParseContext::redeclareBuiltinVariable(const TSourceLoc& /*loc*/, const TString& identifier, + const TQualifier& /*qualifier*/, + const TShaderQualifiers& /*publicType*/) +{ + if (! builtInName(identifier) || symbolTable.atBuiltInLevel() || ! symbolTable.atGlobalLevel()) + return nullptr; + + return nullptr; +} + +// +// 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 +{ + // Bail out if not a struct buffer + if (buffer == nullptr || ! isStructBufferType(buffer->getType())) + return nullptr; + + // Runtime sized array is always the last element. + const TTypeList* bufferStruct = buffer->getType().getStruct(); + TIntermTyped* arrayPosition = intermediate.addConstantUnion(unsigned(bufferStruct->size()-1), loc); + + TIntermTyped* argArray = intermediate.addIndex(EOpIndexDirectStruct, buffer, arrayPosition, loc); + argArray->setType(*(*bufferStruct)[bufferStruct->size()-1].type); + + return argArray; +} + +// +// IFF type is a structuredbuffer/byteaddressbuffer type, return the content +// (template) type. E.g, StructuredBuffer -> MyType. Else return nullptr. +// +TType* HlslParseContext::getStructBufferContentType(const TType& type) const +{ + if (type.getBasicType() != EbtBlock) + return nullptr; + + const int memberCount = (int)type.getStruct()->size(); + assert(memberCount > 0); + + TType* contentType = (*type.getStruct())[memberCount-1].type; + + return contentType->isRuntimeSizedArray() ? contentType : nullptr; +} + +// +// If an existing struct buffer has a sharable type, then share it. +// +void HlslParseContext::shareStructBufferType(TType& type) +{ + // PackOffset must be equivalent to share types on a per-member basis. + // Note: cannot use auto type due to recursion. Thus, this is a std::function. + const std::function + compareQualifiers = [&](TType& lhs, TType& rhs) -> bool { + if (lhs.getQualifier().layoutOffset != rhs.getQualifier().layoutOffset) + return false; + + if (lhs.isStruct() != rhs.isStruct()) + return false; + + if (lhs.isStruct() && rhs.isStruct()) { + if (lhs.getStruct()->size() != rhs.getStruct()->size()) + return false; + + for (int i = 0; i < int(lhs.getStruct()->size()); ++i) + if (!compareQualifiers(*(*lhs.getStruct())[i].type, *(*rhs.getStruct())[i].type)) + return false; + } + + return true; + }; + + // We need to compare certain qualifiers in addition to the type. + const auto typeEqual = [compareQualifiers](TType& lhs, TType& rhs) -> bool { + if (lhs.getQualifier().readonly != rhs.getQualifier().readonly) + return false; + + // If both are structures, recursively look for packOffset equality + // as well as type equality. + return compareQualifiers(lhs, rhs) && lhs == rhs; + }; + + // This is an exhaustive O(N) search, but real world shaders have + // only a small number of these. + for (int idx = 0; idx < int(structBufferTypes.size()); ++idx) { + // If the deep structure matches, modulo qualifiers, use it + if (typeEqual(*structBufferTypes[idx], type)) { + type.shallowCopy(*structBufferTypes[idx]); + return; + } + } + + // Otherwise, remember it: + TType* typeCopy = new TType; + typeCopy->shallowCopy(type); + structBufferTypes.push_back(typeCopy); +} + +void HlslParseContext::paramFix(TType& type) +{ + switch (type.getQualifier().storage) { + case EvqConst: + type.getQualifier().storage = EvqConstReadOnly; + break; + case EvqGlobal: + case EvqTemporary: + type.getQualifier().storage = EvqIn; + break; + case EvqBuffer: + { + // SSBO parameter. These do not go through the declareBlock path since they are fn parameters. + correctUniform(type.getQualifier()); + TQualifier bufferQualifier = globalBufferDefaults; + mergeObjectLayoutQualifiers(bufferQualifier, type.getQualifier(), true); + bufferQualifier.storage = type.getQualifier().storage; + bufferQualifier.readonly = type.getQualifier().readonly; + bufferQualifier.coherent = type.getQualifier().coherent; + type.getQualifier() = bufferQualifier; + break; + } + default: + break; + } +} + +void HlslParseContext::specializationCheck(const TSourceLoc& loc, const TType& type, const char* op) +{ + if (type.containsSpecializationSize()) + error(loc, "can't use with types containing arrays sized with a specialization constant", op, ""); +} + +// +// Layout qualifier stuff. +// + +// Put the id's layout qualification into the public type, for qualifiers not 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) +{ + std::transform(id.begin(), id.end(), id.begin(), ::tolower); + + if (id == TQualifier::getLayoutMatrixString(ElmColumnMajor)) { + qualifier.layoutMatrix = ElmRowMajor; + return; + } + if (id == TQualifier::getLayoutMatrixString(ElmRowMajor)) { + qualifier.layoutMatrix = ElmColumnMajor; + return; + } + if (id == "push_constant") { + requireVulkan(loc, "push_constant"); + qualifier.layoutPushConstant = true; + return; + } + if (language == EShLangGeometry || language == EShLangTessEvaluation) { + if (id == TQualifier::getGeometryString(ElgTriangles)) { + // publicType.shaderQualifiers.geometry = ElgTriangles; + warn(loc, "ignored", id.c_str(), ""); + return; + } + if (language == EShLangGeometry) { + if (id == TQualifier::getGeometryString(ElgPoints)) { + // publicType.shaderQualifiers.geometry = ElgPoints; + warn(loc, "ignored", id.c_str(), ""); + return; + } + if (id == TQualifier::getGeometryString(ElgLineStrip)) { + // publicType.shaderQualifiers.geometry = ElgLineStrip; + warn(loc, "ignored", id.c_str(), ""); + return; + } + if (id == TQualifier::getGeometryString(ElgLines)) { + // publicType.shaderQualifiers.geometry = ElgLines; + warn(loc, "ignored", id.c_str(), ""); + return; + } + if (id == TQualifier::getGeometryString(ElgLinesAdjacency)) { + // publicType.shaderQualifiers.geometry = ElgLinesAdjacency; + warn(loc, "ignored", id.c_str(), ""); + return; + } + if (id == TQualifier::getGeometryString(ElgTrianglesAdjacency)) { + // publicType.shaderQualifiers.geometry = ElgTrianglesAdjacency; + warn(loc, "ignored", id.c_str(), ""); + return; + } + if (id == TQualifier::getGeometryString(ElgTriangleStrip)) { + // publicType.shaderQualifiers.geometry = ElgTriangleStrip; + warn(loc, "ignored", id.c_str(), ""); + return; + } + } else { + assert(language == EShLangTessEvaluation); + + // input primitive + if (id == TQualifier::getGeometryString(ElgTriangles)) { + // publicType.shaderQualifiers.geometry = ElgTriangles; + warn(loc, "ignored", id.c_str(), ""); + return; + } + if (id == TQualifier::getGeometryString(ElgQuads)) { + // publicType.shaderQualifiers.geometry = ElgQuads; + warn(loc, "ignored", id.c_str(), ""); + return; + } + if (id == TQualifier::getGeometryString(ElgIsolines)) { + // publicType.shaderQualifiers.geometry = ElgIsolines; + warn(loc, "ignored", id.c_str(), ""); + return; + } + + // vertex spacing + if (id == TQualifier::getVertexSpacingString(EvsEqual)) { + // publicType.shaderQualifiers.spacing = EvsEqual; + warn(loc, "ignored", id.c_str(), ""); + return; + } + if (id == TQualifier::getVertexSpacingString(EvsFractionalEven)) { + // publicType.shaderQualifiers.spacing = EvsFractionalEven; + warn(loc, "ignored", id.c_str(), ""); + return; + } + if (id == TQualifier::getVertexSpacingString(EvsFractionalOdd)) { + // publicType.shaderQualifiers.spacing = EvsFractionalOdd; + warn(loc, "ignored", id.c_str(), ""); + return; + } + + // triangle order + if (id == TQualifier::getVertexOrderString(EvoCw)) { + // publicType.shaderQualifiers.order = EvoCw; + warn(loc, "ignored", id.c_str(), ""); + return; + } + if (id == TQualifier::getVertexOrderString(EvoCcw)) { + // publicType.shaderQualifiers.order = EvoCcw; + warn(loc, "ignored", id.c_str(), ""); + return; + } + + // point mode + if (id == "point_mode") { + // publicType.shaderQualifiers.pointMode = true; + warn(loc, "ignored", id.c_str(), ""); + return; + } + } + } + if (language == EShLangFragment) { + if (id == "origin_upper_left") { + // publicType.shaderQualifiers.originUpperLeft = true; + warn(loc, "ignored", id.c_str(), ""); + return; + } + if (id == "pixel_center_integer") { + // publicType.shaderQualifiers.pixelCenterInteger = true; + warn(loc, "ignored", id.c_str(), ""); + return; + } + if (id == "early_fragment_tests") { + // publicType.shaderQualifiers.earlyFragmentTests = true; + warn(loc, "ignored", id.c_str(), ""); + return; + } + for (TLayoutDepth depth = (TLayoutDepth)(EldNone + 1); depth < EldCount; depth = (TLayoutDepth)(depth + 1)) { + if (id == TQualifier::getLayoutDepthString(depth)) { + // publicType.shaderQualifiers.layoutDepth = depth; + warn(loc, "ignored", id.c_str(), ""); + return; + } + } + if (id.compare(0, 13, "blend_support") == 0) { + 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"); + intermediate.addBlendEquation(be); + // publicType.shaderQualifiers.blendEquation = true; + warn(loc, "ignored", id.c_str(), ""); + found = true; + break; + } + } + if (! found) + error(loc, "unknown blend equation", "blend_support", ""); + return; + } + } + error(loc, "unrecognized layout identifier, or qualifier requires assignment (e.g., binding = 4)", id.c_str(), ""); +} + +// 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) +{ + const char* feature = "layout-id value"; + // const char* nonLiteralFeature = "non-literal layout-id value"; + + integerCheck(node, feature); + const TIntermConstantUnion* constUnion = node->getAsConstantUnion(); + int value = 0; + if (constUnion) { + value = constUnion->getConstArray()[0].getIConst(); + } + + std::transform(id.begin(), id.end(), id.begin(), ::tolower); + + if (id == "offset") { + qualifier.layoutOffset = value; + return; + } else if (id == "align") { + // "The specified alignment must be a power of 2, or a compile-time error results." + if (! IsPow2(value)) + error(loc, "must be a power of 2", "align", ""); + else + qualifier.layoutAlign = value; + return; + } else if (id == "location") { + if ((unsigned int)value >= TQualifier::layoutLocationEnd) + error(loc, "location is too large", id.c_str(), ""); + else + qualifier.layoutLocation = value; + return; + } else if (id == "set") { + if ((unsigned int)value >= TQualifier::layoutSetEnd) + error(loc, "set is too large", id.c_str(), ""); + else + qualifier.layoutSet = value; + return; + } else if (id == "binding") { + if ((unsigned int)value >= TQualifier::layoutBindingEnd) + error(loc, "binding is too large", id.c_str(), ""); + else + qualifier.layoutBinding = value; + return; + } else if (id == "component") { + if ((unsigned)value >= TQualifier::layoutComponentEnd) + error(loc, "component is too large", id.c_str(), ""); + else + qualifier.layoutComponent = value; + return; + } else if (id.compare(0, 4, "xfb_") == 0) { + // "Any shader making any static use (after preprocessing) of any of these + // *xfb_* qualifiers will cause the shader to be in a transform feedback + // capturing mode and hence responsible for describing the transform feedback + // setup." + intermediate.setXfbMode(); + if (id == "xfb_buffer") { + // "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); + if (value >= (int)TQualifier::layoutXfbBufferEnd) + error(loc, "buffer is too large:", id.c_str(), "internal max is %d", TQualifier::layoutXfbBufferEnd - 1); + else + qualifier.layoutXfbBuffer = value; + return; + } else if (id == "xfb_offset") { + if (value >= (int)TQualifier::layoutXfbOffsetEnd) + error(loc, "offset is too large:", id.c_str(), "internal max is %d", TQualifier::layoutXfbOffsetEnd - 1); + else + qualifier.layoutXfbOffset = value; + return; + } else if (id == "xfb_stride") { + // "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); + 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) + qualifier.layoutXfbStride = value; + return; + } + } + + if (id == "input_attachment_index") { + requireVulkan(loc, "input_attachment_index"); + if (value >= (int)TQualifier::layoutAttachmentEnd) + error(loc, "attachment index is too large", id.c_str(), ""); + else + qualifier.layoutAttachment = value; + return; + } + if (id == "constant_id") { + requireSpv(loc, "constant_id"); + if (value >= (int)TQualifier::layoutSpecConstantIdEnd) { + error(loc, "specialization-constant id is too large", id.c_str(), ""); + } else { + qualifier.layoutSpecConstantId = value; + qualifier.specConstant = true; + if (! intermediate.addUsedConstantId(value)) + error(loc, "specialization-constant id already used", id.c_str(), ""); + } + return; + } + + switch (language) { + case EShLangVertex: + break; + + case EShLangTessControl: + if (id == "vertices") { + if (value == 0) + error(loc, "must be greater than 0", "vertices", ""); + else + // publicType.shaderQualifiers.vertices = value; + warn(loc, "ignored", id.c_str(), ""); + return; + } + break; + + case EShLangTessEvaluation: + break; + + case EShLangGeometry: + if (id == "invocations") { + if (value == 0) + error(loc, "must be at least 1", "invocations", ""); + else + // publicType.shaderQualifiers.invocations = value; + warn(loc, "ignored", id.c_str(), ""); + return; + } + if (id == "max_vertices") { + // publicType.shaderQualifiers.vertices = value; + warn(loc, "ignored", id.c_str(), ""); + if (value > resources.maxGeometryOutputVertices) + error(loc, "too large, must be less than gl_MaxGeometryOutputVertices", "max_vertices", ""); + return; + } + if (id == "stream") { + qualifier.layoutStream = value; + return; + } + break; + + case EShLangFragment: + if (id == "index") { + qualifier.layoutIndex = value; + return; + } + break; + + case EShLangCompute: + if (id.compare(0, 11, "local_size_") == 0) { + if (id == "local_size_x") { + // publicType.shaderQualifiers.localSize[0] = value; + warn(loc, "ignored", id.c_str(), ""); + return; + } + if (id == "local_size_y") { + // publicType.shaderQualifiers.localSize[1] = value; + warn(loc, "ignored", id.c_str(), ""); + return; + } + if (id == "local_size_z") { + // publicType.shaderQualifiers.localSize[2] = value; + warn(loc, "ignored", id.c_str(), ""); + return; + } + if (spvVersion.spv != 0) { + if (id == "local_size_x_id") { + // publicType.shaderQualifiers.localSizeSpecId[0] = value; + warn(loc, "ignored", id.c_str(), ""); + return; + } + if (id == "local_size_y_id") { + // publicType.shaderQualifiers.localSizeSpecId[1] = value; + warn(loc, "ignored", id.c_str(), ""); + return; + } + if (id == "local_size_z_id") { + // publicType.shaderQualifiers.localSizeSpecId[2] = value; + warn(loc, "ignored", id.c_str(), ""); + return; + } + } + } + break; + + default: + break; + } + + error(loc, "there is no such layout identifier for this stage taking an assigned value", id.c_str(), ""); +} + +// Merge any layout qualifier information from src into dst, leaving everything else in dst alone +// +// "More than one layout qualifier may appear in a single declaration. +// Additionally, the same layout-qualifier-name can occur multiple times +// within a layout qualifier or across multiple layout qualifiers in the +// same declaration. When the same layout-qualifier-name occurs +// multiple times, in a single declaration, the last occurrence overrides +// the former occurrence(s). Further, if such a layout-qualifier-name +// will effect subsequent declarations or other observable behavior, it +// is only the last occurrence that will have any effect, behaving as if +// the earlier occurrence(s) within the declaration are not present. +// 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 HlslParseContext::mergeObjectLayoutQualifiers(TQualifier& dst, const TQualifier& src, bool inheritOnly) +{ + if (src.hasMatrix()) + dst.layoutMatrix = src.layoutMatrix; + if (src.hasPacking()) + dst.layoutPacking = src.layoutPacking; + + if (src.hasStream()) + dst.layoutStream = src.layoutStream; + + if (src.hasFormat()) + dst.layoutFormat = src.layoutFormat; + + if (src.hasXfbBuffer()) + dst.layoutXfbBuffer = src.layoutXfbBuffer; + + if (src.hasAlign()) + dst.layoutAlign = src.layoutAlign; + + if (! inheritOnly) { + if (src.hasLocation()) + dst.layoutLocation = src.layoutLocation; + if (src.hasComponent()) + dst.layoutComponent = src.layoutComponent; + if (src.hasIndex()) + dst.layoutIndex = src.layoutIndex; + + if (src.hasOffset()) + dst.layoutOffset = src.layoutOffset; + + if (src.hasSet()) + dst.layoutSet = src.layoutSet; + if (src.layoutBinding != TQualifier::layoutBindingEnd) + dst.layoutBinding = src.layoutBinding; + + if (src.hasXfbStride()) + dst.layoutXfbStride = src.layoutXfbStride; + if (src.hasXfbOffset()) + dst.layoutXfbOffset = src.layoutXfbOffset; + if (src.hasAttachment()) + dst.layoutAttachment = src.layoutAttachment; + if (src.hasSpecConstantId()) + dst.layoutSpecConstantId = src.layoutSpecConstantId; + + if (src.layoutPushConstant) + dst.layoutPushConstant = true; + } +} + +// +// Look up a function name in the symbol table, and make sure it is a function. +// +// First, look for an exact match. If there is none, use the generic selector +// TParseContextBase::selectFunction() to find one, parameterized by the +// convertible() and better() predicates defined below. +// +// Return the function symbol if found, otherwise nullptr. +// +const TFunction* HlslParseContext::findFunction(const TSourceLoc& loc, TFunction& call, bool& builtIn, + 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); + if (symbol) + return symbol->getAsFunction(); + + // no exact match, use the generic selector, parameterized by the GLSL rules + + // create list of candidates to send + TVector candidateList; + symbolTable.findFunctionNameList(call.getMangledName(), candidateList, builtIn); + + // These builtin ops can accept any type, so we bypass the argument selection + if (candidateList.size() == 1 && builtIn && + (candidateList[0]->getBuiltInOp() == EOpMethodAppend || + candidateList[0]->getBuiltInOp() == EOpMethodRestartStrip)) { + + return candidateList[0]; + } + + bool allowOnlyUpConversions = true; + + // can 'from' convert to 'to'? + const auto convertible = [&](const TType& from, const TType& to, TOperator op, int arg) -> bool { + if (from == to) + return true; + + // no aggregate conversions + if (from.isArray() || to.isArray() || + from.isStruct() || to.isStruct()) + return false; + + switch (op) { + case EOpInterlockedAdd: + case EOpInterlockedAnd: + case EOpInterlockedCompareExchange: + case EOpInterlockedCompareStore: + case EOpInterlockedExchange: + case EOpInterlockedMax: + case EOpInterlockedMin: + case EOpInterlockedOr: + case EOpInterlockedXor: + // We do not promote the texture or image type for these ocodes. Normally that would not + // be an issue because it's a buffer, but we haven't decomposed the opcode yet, and at this + // stage it's merely e.g, a basic integer type. + // + // Instead, we want to promote other arguments, but stay within the same family. In other + // words, InterlockedAdd(RWBuffer, ...) will always use the int flavor, never the uint flavor, + // but it is allowed to promote its other arguments. + if (arg == 0) + return false; + break; + case EOpMethodSample: + case EOpMethodSampleBias: + case EOpMethodSampleCmp: + case EOpMethodSampleCmpLevelZero: + case EOpMethodSampleGrad: + case EOpMethodSampleLevel: + case EOpMethodLoad: + case EOpMethodGetDimensions: + case EOpMethodGetSamplePosition: + case EOpMethodGather: + case EOpMethodCalculateLevelOfDetail: + case EOpMethodCalculateLevelOfDetailUnclamped: + case EOpMethodGatherRed: + case EOpMethodGatherGreen: + case EOpMethodGatherBlue: + case EOpMethodGatherAlpha: + case EOpMethodGatherCmp: + case EOpMethodGatherCmpRed: + case EOpMethodGatherCmpGreen: + case EOpMethodGatherCmpBlue: + case EOpMethodGatherCmpAlpha: + case EOpMethodAppend: + case EOpMethodRestartStrip: + // those are method calls, the object type can not be changed + // they are equal if the dim and type match (is dim sufficient?) + if (arg == 0) + return from.getSampler().type == to.getSampler().type && + from.getSampler().arrayed == to.getSampler().arrayed && + from.getSampler().shadow == to.getSampler().shadow && + from.getSampler().ms == to.getSampler().ms && + from.getSampler().dim == to.getSampler().dim; + break; + default: + break; + } + + // basic types have to be convertible + if (allowOnlyUpConversions) + if (! intermediate.canImplicitlyPromote(from.getBasicType(), to.getBasicType(), EOpFunctionCall)) + return false; + + // shapes have to be convertible + if ((from.isScalarOrVec1() && to.isScalarOrVec1()) || + (from.isScalarOrVec1() && to.isVector()) || + (from.isVector() && to.isVector() && from.getVectorSize() >= to.getVectorSize())) + return true; + + // TODO: what are the matrix rules? they go here + + return false; + }; + + // Is 'to2' a better conversion than 'to1'? + // Ties should not be considered as better. + // Assumes 'convertible' already said true. + const auto better = [](const TType& from, const TType& to1, const TType& to2) -> bool { + // exact match is always better than mismatch + if (from == to2) + return from != to1; + if (from == to1) + return false; + + // shape changes are always worse + if (from.isScalar() || from.isVector()) { + if (from.getVectorSize() == to2.getVectorSize() && + from.getVectorSize() != to1.getVectorSize()) + return true; + if (from.getVectorSize() == to1.getVectorSize() && + from.getVectorSize() != to2.getVectorSize()) + return false; + } + + // Handle sampler betterness: An exact sampler match beats a non-exact match. + // (If we just looked at basic type, all EbtSamplers would look the same). + // If any type is not a sampler, just use the linearize function below. + if (from.getBasicType() == EbtSampler && to1.getBasicType() == EbtSampler && to2.getBasicType() == EbtSampler) { + // We can ignore the vector size in the comparison. + TSampler to1Sampler = to1.getSampler(); + TSampler to2Sampler = to2.getSampler(); + + to1Sampler.vectorSize = to2Sampler.vectorSize = from.getSampler().vectorSize; + + if (from.getSampler() == to2Sampler) + return from.getSampler() != to1Sampler; + if (from.getSampler() == to1Sampler) + return false; + } + + // Might or might not be changing shape, which means basic type might + // or might not match, so within that, the question is how big a + // basic-type conversion is being done. + // + // Use a hierarchy of domains, translated to order of magnitude + // in a linearized view: + // - floating-point vs. integer + // - 32 vs. 64 bit (or width in general) + // - bool vs. non bool + // - signed vs. not signed + const auto linearize = [](const TBasicType& basicType) -> int { + switch (basicType) { + case EbtBool: return 1; + case EbtInt: return 10; + case EbtUint: return 11; + case EbtInt64: return 20; + case EbtUint64: return 21; + case EbtFloat: return 100; + case EbtDouble: return 110; + default: return 0; + } + }; + + return std::abs(linearize(to2.getBasicType()) - linearize(from.getBasicType())) < + std::abs(linearize(to1.getBasicType()) - linearize(from.getBasicType())); + }; + + // for ambiguity reporting + bool tie = false; + + // send to the generic selector + const TFunction* bestMatch = selectFunction(candidateList, call, convertible, better, tie); + + if (bestMatch == nullptr) { + // If there is nothing selected by allowing only up-conversions (to a larger linearize() value), + // we instead try down-conversions, which are valid in HLSL, but not preferred if there are any + // upconversions possible. + allowOnlyUpConversions = false; + bestMatch = selectFunction(candidateList, call, convertible, better, tie); + } + + if (bestMatch == nullptr) { + error(loc, "no matching overloaded function found", call.getName().c_str(), ""); + return nullptr; + } + + // For builtins, 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 + // Step 3: Re-select after type promotion is applied, to find proper candidate. + if (builtIn) { + // Step 1: If there's an exact match, use it. + if (call.getMangledName() == bestMatch->getMangledName()) + return bestMatch; + + // Step 2a: Otherwise, get the operator from the best match and promote arguments as if we + // are that kind of operator. + if (args != nullptr) { + // The arg list can be a unary node, or an aggregate. We have to handle both. + // We will use the normal promote() facilities, which require an interm node. + TIntermOperator* promote = nullptr; + + if (call.getParamCount() == 1) { + promote = new TIntermUnary(bestMatch->getBuiltInOp()); + promote->getAsUnaryNode()->setOperand(args->getAsTyped()); + } else { + promote = new TIntermAggregate(bestMatch->getBuiltInOp()); + promote->getAsAggregate()->getSequence().swap(args->getAsAggregate()->getSequence()); + } + + if (! intermediate.promote(promote)) + return nullptr; + + // Obtain the promoted arg list. + if (call.getParamCount() == 1) { + args = promote->getAsUnaryNode()->getOperand(); + } else { + promote->getAsAggregate()->getSequence().swap(args->getAsAggregate()->getSequence()); + } + } + + // Step 2b: reconstruct the TFunction based on the new arg types + TFunction convertedCall(&call.getName(), call.getType(), call.getBuiltInOp()); + + if (args->getAsAggregate()) { + // Handle aggregates: put all args into the new function call + for (int arg=0; arggetAsAggregate()->getSequence().size()); ++arg) { + // TODO: But for constness, we could avoid the new & shallowCopy, and use the pointer directly. + TParameter param = { 0, new TType, nullptr }; + param.type->shallowCopy(args->getAsAggregate()->getSequence()[arg]->getAsTyped()->getType()); + convertedCall.addParameter(param); + } + } else if (args->getAsUnaryNode()) { + // Handle unaries: put all args into the new function call + TParameter param = { 0, new TType, nullptr }; + param.type->shallowCopy(args->getAsUnaryNode()->getOperand()->getAsTyped()->getType()); + convertedCall.addParameter(param); + } else if (args->getAsTyped()) { + // Handle bare e.g, floats, not in an aggregate. + TParameter param = { 0, new TType, nullptr }; + param.type->shallowCopy(args->getAsTyped()->getType()); + convertedCall.addParameter(param); + } else { + assert(0); // unknown argument list. + return nullptr; + } + + // Step 3: Re-select after type promotion, to find proper candidate + // send to the generic selector + bestMatch = selectFunction(candidateList, convertedCall, convertible, better, tie); + + // At this point, there should be no tie. + } + + if (tie) + error(loc, "ambiguous best function under implicit type conversion", call.getName().c_str(), ""); + + // Append default parameter values if needed + if (!tie && bestMatch != nullptr) { + for (int defParam = call.getParamCount(); defParam < bestMatch->getParamCount(); ++defParam) { + handleFunctionArgument(&call, args, (*bestMatch)[defParam].defaultValue); + } + } + + return bestMatch; +} + +// +// Do everything necessary to handle a typedef declaration, for a single symbol. +// +// '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) +{ + TVariable* typeSymbol = new TVariable(&identifier, parseType, true); + if (! symbolTable.insert(*typeSymbol)) + error(loc, "name already defined", "typedef", identifier.c_str()); +} + +// Do everything necessary to handle a struct declaration, including +// making IO aliases because HLSL allows mixed IO in a struct that specializes +// based on the usage (input, output, uniform, none). +void HlslParseContext::declareStruct(const TSourceLoc& loc, TString& structName, TType& type) +{ + // If it was named, which means the type can be reused later, add + // it to the symbol table. (Unless it's a block, in which + // case the name is not a type.) + if (type.getBasicType() == EbtBlock || structName.size() == 0) + return; + + TVariable* userTypeDef = new TVariable(&structName, type, true); + if (! symbolTable.insert(*userTypeDef)) { + error(loc, "redefinition", structName.c_str(), "struct"); + return; + } + + // See if we need IO aliases for the structure typeList + + const auto condAlloc = [](bool pred, TTypeList*& list) { + if (pred && list == nullptr) + list = new TTypeList; + }; + + tIoKinds newLists = { nullptr, nullptr, nullptr }; // allocate for each kind found + for (auto member = type.getStruct()->begin(); member != type.getStruct()->end(); ++member) { + condAlloc(hasUniform(member->type->getQualifier()), newLists.uniform); + condAlloc( hasInput(member->type->getQualifier()), newLists.input); + condAlloc( hasOutput(member->type->getQualifier()), newLists.output); + + if (member->type->isStruct()) { + auto it = ioTypeMap.find(member->type->getStruct()); + if (it != ioTypeMap.end()) { + condAlloc(it->second.uniform != nullptr, newLists.uniform); + condAlloc(it->second.input != nullptr, newLists.input); + condAlloc(it->second.output != nullptr, newLists.output); + } + } + } + if (newLists.uniform == nullptr && + newLists.input == nullptr && + newLists.output == nullptr) { + // Won't do any IO caching, clear up the type and get out now. + for (auto member = type.getStruct()->begin(); member != type.getStruct()->end(); ++member) + clearUniformInputOutput(member->type->getQualifier()); + return; + } + + // We have IO involved. + + // Make a pure typeList for the symbol table, and cache side copies of IO versions. + for (auto member = type.getStruct()->begin(); member != type.getStruct()->end(); ++member) { + const auto inheritStruct = [&](TTypeList* s, TTypeLoc& ioMember) { + if (s != nullptr) { + ioMember.type = new TType; + ioMember.type->shallowCopy(*member->type); + ioMember.type->setStruct(s); + } + }; + const auto newMember = [&](TTypeLoc& m) { + if (m.type == nullptr) { + m.type = new TType; + m.type->shallowCopy(*member->type); + } + }; + + TTypeLoc newUniformMember = { nullptr, member->loc }; + TTypeLoc newInputMember = { nullptr, member->loc }; + TTypeLoc newOutputMember = { nullptr, member->loc }; + if (member->type->isStruct()) { + // swap in an IO child if there is one + auto it = ioTypeMap.find(member->type->getStruct()); + if (it != ioTypeMap.end()) { + inheritStruct(it->second.uniform, newUniformMember); + inheritStruct(it->second.input, newInputMember); + inheritStruct(it->second.output, newOutputMember); + } + } + if (newLists.uniform) { + newMember(newUniformMember); + correctUniform(newUniformMember.type->getQualifier()); + newLists.uniform->push_back(newUniformMember); + } + if (newLists.input) { + newMember(newInputMember); + correctInput(newInputMember.type->getQualifier()); + newLists.input->push_back(newInputMember); + } + if (newLists.output) { + newMember(newOutputMember); + correctOutput(newOutputMember.type->getQualifier()); + newLists.output->push_back(newOutputMember); + } + + // make original pure + clearUniformInputOutput(member->type->getQualifier()); + } + ioTypeMap[type.getStruct()] = newLists; +} + +// Lookup a user-type by name. +// If found, fill in the type and return the defining symbol. +// If not found, return nullptr. +TSymbol* HlslParseContext::lookupUserType(const TString& typeName, TType& type) +{ + TSymbol* symbol = symbolTable.find(typeName); + if (symbol && symbol->getAsVariable() && symbol->getAsVariable()->isUserType()) { + type.shallowCopy(symbol->getType()); + return symbol; + } else + return nullptr; +} + +// +// Do everything necessary to handle a variable (non-block) declaration. +// Either redeclaring a variable, or making a new one, updating the symbol +// table, and all error checking. +// +// Returns a subtree node that computes an initializer, if needed. +// Returns nullptr if there is no code to execute for initialization. +// +// '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) +{ + if (voidErrorCheck(loc, identifier, type.getBasicType())) + return nullptr; + + // make const and initialization consistent + fixConstInit(loc, identifier, type, initializer); + + // Check for redeclaration of built-ins and/or attempting to declare a reserved name + TSymbol* symbol = nullptr; + + inheritGlobalDefaults(type.getQualifier()); + + const bool flattenVar = shouldFlattenUniform(type); + + // correct IO in the type + switch (type.getQualifier().storage) { + case EvqGlobal: + case EvqTemporary: + clearUniformInputOutput(type.getQualifier()); + break; + case EvqUniform: + case EvqBuffer: + correctUniform(type.getQualifier()); + if (type.isStruct()) { + auto it = ioTypeMap.find(type.getStruct()); + if (it != ioTypeMap.end()) + type.setStruct(it->second.uniform); + } + + break; + default: + break; + } + + // Declare the variable + if (type.isArray()) { + // array case + declareArray(loc, identifier, type, symbol, !flattenVar); + } else { + // non-array case + if (! symbol) + symbol = declareNonArray(loc, identifier, type, !flattenVar); + else if (type != symbol->getType()) + error(loc, "cannot change the type of", "redeclaration", symbol->getName().c_str()); + } + + if (flattenVar) + flatten(loc, *symbol->getAsVariable()); + + if (! symbol) + 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); + } + + return initNode; +} + +// Pick up global defaults from the provide global defaults into dst. +void HlslParseContext::inheritGlobalDefaults(TQualifier& dst) const +{ + if (dst.storage == EvqVaryingOut) { + if (! dst.hasStream() && language == EShLangGeometry) + dst.layoutStream = globalOutputDefaults.layoutStream; + if (! dst.hasXfbBuffer()) + dst.layoutXfbBuffer = globalOutputDefaults.layoutXfbBuffer; + } +} + +// +// Make an internal-only variable whose name is for debug purposes only +// and won't be searched for. Callers will only use the return value to use +// the variable, not the name to look it up. It is okay if the name +// is the same as other names; there won't be any conflict. +// +TVariable* HlslParseContext::makeInternalVariable(const char* name, const TType& type) const +{ + TString* nameString = NewPoolTString(name); + TVariable* variable = new TVariable(nameString, type); + symbolTable.makeInternalVariable(*variable); + + return variable; +} + +// +// 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) +{ + // make a new variable + TVariable* variable = new TVariable(&identifier, type); + + // add variable to symbol table + if (symbolTable.insert(*variable)) { + if (track && symbolTable.atGlobalLevel()) + trackLinkage(*variable); + return variable; + } + + error(loc, "redefinition", variable->getName().c_str(), ""); + return nullptr; +} + +// +// Handle all types of initializers from the grammar. +// +// Returning nullptr just means there is no code to execute to handle the +// initializer, which will, for example, be the case for constant initializers. +// +TIntermNode* HlslParseContext::executeInitializer(const TSourceLoc& loc, TIntermTyped* initializer, TVariable* variable) +{ + // + // Identifier must be of type constant, a global, or a temporary, and + // starting at version 120, desktop allows uniforms to have initializers. + // + TStorageQualifier qualifier = variable->getType().getQualifier().storage; + + // + // If the initializer was from braces { ... }, we convert the whole subtree to a + // constructor-style subtree, allowing the rest of the code to operate + // identically for both kinds of initializers. + // + // + // Type can't be deduced from the initializer list, so a skeletal type to + // follow has to be passed in. Constness and specialization-constness + // should be deduced bottom up, not dictated by the skeletal type. + // + TType skeletalType; + skeletalType.shallowCopy(variable->getType()); + skeletalType.getQualifier().makeTemporary(); + if (initializer->getAsAggregate() && initializer->getAsAggregate()->getOp() == EOpNull) + initializer = convertInitializerList(loc, skeletalType, initializer); + if (! initializer) { + // error recovery; don't leave const without constant values + if (qualifier == EvqConst) + variable->getWritableType().getQualifier().storage = EvqTemporary; + return nullptr; + } + + // Fix outer arrayness if variable is unsized, getting size from the initializer + if (initializer->getType().isExplicitlySizedArray() && + variable->getType().isImplicitlySizedArray()) + variable->getWritableType().changeOuterArraySize(initializer->getType().getOuterArraySize()); + + // Inner arrayness can also get set by an initializer + if (initializer->getType().isArrayOfArrays() && variable->getType().isArrayOfArrays() && + initializer->getType().getArraySizes()->getNumDims() == + variable->getType().getArraySizes()->getNumDims()) { + // adopt unsized sizes from the initializer's sizes + for (int d = 1; d < variable->getType().getArraySizes()->getNumDims(); ++d) { + if (variable->getType().getArraySizes()->getDimSize(d) == UnsizedArraySize) + variable->getWritableType().getArraySizes().setDimSize(d, initializer->getType().getArraySizes()->getDimSize(d)); + } + } + + // Uniform and global consts require a constant initializer + if (qualifier == EvqUniform && initializer->getType().getQualifier().storage != EvqConst) { + error(loc, "uniform initializers must be constant", "=", "'%s'", variable->getType().getCompleteString().c_str()); + 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 + if (qualifier == EvqConst) { + if (initializer->getType().getQualifier().storage != EvqConst) { + variable->getWritableType().getQualifier().storage = EvqConstReadOnly; + qualifier = EvqConstReadOnly; + } + } + + if (qualifier == EvqConst || qualifier == EvqUniform) { + // 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()) { + error(loc, "non-matching or non-convertible constant type for const initializer", + variable->getType().getStorageQualifierString(), ""); + variable->getWritableType().getQualifier().storage = EvqTemporary; + return nullptr; + } + + variable->setConstArray(initializer->getAsConstantUnion()->getConstArray()); + } else { + // normal assigning of a value to a variable... + specializationCheck(loc, initializer->getType(), "initializer"); + TIntermSymbol* intermSymbol = intermediate.addSymbol(*variable, loc); + TIntermNode* initNode = handleAssign(loc, EOpAssign, intermSymbol, initializer); + if (! initNode) + assignError(loc, "=", intermSymbol->getCompleteString(), initializer->getCompleteString()); + + return initNode; + } + + return nullptr; +} + +// +// Reprocess any initializer-list { ... } parts of the initializer. +// Need to hierarchically assign correct types and implicit +// conversions. Will do this mimicking the same process used for +// creating a constructor-style initializer, ensuring we get the +// same form. +// +// Returns a node representing an expression for the initializer list expressed +// as the correct type. +// +// Returns nullptr if there is an error. +// +TIntermTyped* HlslParseContext::convertInitializerList(const TSourceLoc& loc, const TType& type, TIntermTyped* initializer) +{ + // 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 + // can be an initializer list, where "top part" can extend for several (or all) levels. + + // see if we have bottomed out in the tree within the initializer-list part + TIntermAggregate* initList = initializer->getAsAggregate(); + if (! initList || 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. + if (type.isScalar() || !initializer->getType().isScalar()) + return initializer; + else + initList = intermediate.makeAggregate(initializer); + } + + // Of the initializer-list set of nodes, need to process bottom up, + // so recurse deep, then process on the way up. + + // Go down the tree here... + if (type.isArray()) { + // The type's array might be unsized, which could be okay, so base sizes on the size of the aggregate. + // Later on, initializer execution code will deal with array size logic. + TType arrayType; + arrayType.shallowCopy(type); // sharing struct stuff is fine + arrayType.newArraySizes(*type.getArraySizes()); // but get a fresh copy of the array information, to edit below + + // edit array sizes to fill in unsized dimensions + if (type.isImplicitlySizedArray()) + arrayType.changeOuterArraySize((int)initList->getSequence().size()); + + // set unsized array dimensions that can be derived from the initializer's first element + if (arrayType.isArrayOfArrays() && initList->getSequence().size() > 0) { + TIntermTyped* firstInit = initList->getSequence()[0]->getAsTyped(); + if (firstInit->getType().isArray() && + arrayType.getArraySizes().getNumDims() == firstInit->getType().getArraySizes()->getNumDims() + 1) { + for (int d = 1; d < arrayType.getArraySizes().getNumDims(); ++d) { + if (arrayType.getArraySizes().getDimSize(d) == UnsizedArraySize) + arrayType.getArraySizes().setDimSize(d, firstInit->getType().getArraySizes()->getDimSize(d - 1)); + } + } + } + + // lengthen list to be long enough + lengthenList(loc, initList->getSequence(), arrayType.getOuterArraySize()); + + // 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()); + if (initList->getSequence()[i] == nullptr) + return nullptr; + } + + return addConstructor(loc, initList, arrayType); + } else if (type.isStruct()) { + // lengthen list to be long enough + lengthenList(loc, initList->getSequence(), static_cast(type.getStruct()->size())); + + 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()); + if (initList->getSequence()[i] == nullptr) + return nullptr; + } + } else if (type.isMatrix()) { + if (type.computeNumComponents() == (int)initList->getSequence().size()) { + // This means the matrix is initialized component-wise, rather than as + // a series of rows and columns. We can just use the list directly as + // a constructor; no further processing needed. + } else { + // lengthen list to be long enough + lengthenList(loc, initList->getSequence(), type.getMatrixCols()); + + if (type.getMatrixCols() != (int)initList->getSequence().size()) { + error(loc, "wrong number of matrix columns:", "initializer list", type.getCompleteString().c_str()); + return nullptr; + } + TType vectorType(type, 0); // dereferenced type + for (int i = 0; i < type.getMatrixCols(); ++i) { + initList->getSequence()[i] = convertInitializerList(loc, vectorType, initList->getSequence()[i]->getAsTyped()); + if (initList->getSequence()[i] == nullptr) + return nullptr; + } + } + } else if (type.isVector()) { + // lengthen list to be long enough + lengthenList(loc, initList->getSequence(), type.getVectorSize()); + + // 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()); + return nullptr; + } + } else if (type.isScalar()) { + // lengthen list to be long enough + lengthenList(loc, initList->getSequence(), 1); + + if ((int)initList->getSequence().size() != 1) { + error(loc, "scalar expected one element:", "initializer list", type.getCompleteString().c_str()); + return nullptr; + } + } else { + error(loc, "unexpected initializer-list type:", "initializer list", type.getCompleteString().c_str()); + return nullptr; + } + + // Now that the subtree is processed, process this node as if the + // initializer list is a set of arguments to a constructor. + TIntermNode* emulatedConstructorArguments; + if (initList->getSequence().size() == 1) + emulatedConstructorArguments = initList->getSequence()[0]; + else + emulatedConstructorArguments = initList; + + return addConstructor(loc, emulatedConstructorArguments, type); +} + +// 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) +{ + for (int c = (int)list.size(); c < size; ++c) + list.push_back(intermediate.addConstantUnion(0, loc)); +} + +// +// 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. +// +// 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) +{ + if (node == nullptr || node->getAsTyped() == nullptr) + return nullptr; + + // Handle the idiom "(struct type)0" + if (type.isStruct() && isZeroConstructor(node)) + return convertInitializerList(loc, type, intermediate.makeAggregate(loc)); + + TIntermAggregate* aggrNode = node->getAsAggregate(); + TOperator op = intermediate.mapTypeToConstructorOp(type); + + // Combined texture-sampler constructors are completely semantic checked + // in constructorTextureSamplerError() + if (op == EOpConstructTextureSampler) + return intermediate.setAggregateOperator(aggrNode, op, type, loc); + + TTypeList::const_iterator memberTypes; + if (op == EOpConstructStruct) + memberTypes = type.getStruct()->begin(); + + TType elementType; + if (type.isArray()) { + TType dereferenced(type, 0); + elementType.shallowCopy(dereferenced); + } else + elementType.shallowCopy(type); + + bool singleArg; + if (aggrNode) { + if (aggrNode->getOp() != EOpNull || aggrNode->getSequence().size() == 1) + singleArg = true; + else + singleArg = false; + } else + singleArg = true; + + TIntermTyped *newNode; + if (singleArg) { + // 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()) + 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); + + if (newNode && (type.isArray() || op == EOpConstructStruct)) + newNode = intermediate.setAggregateOperator(newNode, EOpConstructStruct, type, loc); + + return newNode; + } + + // + // Handle list of arguments. + // + 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 + + int paramCount = 0; // keeps a track of the constructor parameter number being checked + + // for each parameter to the constructor call, check to see if the right type is passed or convert them + // to the right type if possible (and allowed). + // for structure constructors, just check if the right type is passed, no conversion is allowed. + + for (TIntermSequence::iterator p = sequenceVector.begin(); + p != sequenceVector.end(); p++, paramCount++) { + if (type.isArray()) + newNode = constructAggregate(*p, elementType, paramCount + 1, node->getLoc()); + else if (op == EOpConstructStruct) + newNode = constructAggregate(*p, *(memberTypes[paramCount]).type, paramCount + 1, node->getLoc()); + else + newNode = constructBuiltIn(type, op, (*p)->getAsTyped(), node->getLoc(), true); + + if (newNode) + *p = newNode; + else + return nullptr; + } + + TIntermTyped* constructor = intermediate.setAggregateOperator(aggrNode, op, type, loc); + + return constructor; +} + +// Function for constructor implementation. Calls addUnaryMath with appropriate EOp value +// for the parameter to the constructor (passed to this function). Essentially, it converts +// the parameter types correctly. If a constructor expects an int (like ivec2) and is passed a +// float, then float is converted to int. +// +// 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* newNode; + TOperator basicOp; + + // + // First, convert types as needed. + // + switch (op) { + case EOpConstructVec2: + case EOpConstructVec3: + case EOpConstructVec4: + case EOpConstructMat2x2: + case EOpConstructMat2x3: + case EOpConstructMat2x4: + case EOpConstructMat3x2: + case EOpConstructMat3x3: + case EOpConstructMat3x4: + case EOpConstructMat4x2: + case EOpConstructMat4x3: + case EOpConstructMat4x4: + case EOpConstructFloat: + basicOp = EOpConstructFloat; + break; + + case EOpConstructDVec2: + case EOpConstructDVec3: + case EOpConstructDVec4: + case EOpConstructDMat2x2: + case EOpConstructDMat2x3: + case EOpConstructDMat2x4: + case EOpConstructDMat3x2: + case EOpConstructDMat3x3: + case EOpConstructDMat3x4: + case EOpConstructDMat4x2: + case EOpConstructDMat4x3: + case EOpConstructDMat4x4: + case EOpConstructDouble: + basicOp = EOpConstructDouble; + break; + + case EOpConstructIVec2: + case EOpConstructIVec3: + case EOpConstructIVec4: + case EOpConstructInt: + basicOp = EOpConstructInt; + break; + + case EOpConstructUVec2: + case EOpConstructUVec3: + case EOpConstructUVec4: + case EOpConstructUint: + basicOp = EOpConstructUint; + break; + + case EOpConstructBVec2: + case EOpConstructBVec3: + case EOpConstructBVec4: + case EOpConstructBool: + basicOp = EOpConstructBool; + break; + + default: + error(loc, "unsupported construction", "", ""); + + return nullptr; + } + newNode = intermediate.addUnaryMath(basicOp, node, node->getLoc()); + if (newNode == nullptr) { + error(loc, "can't convert", "constructor", ""); + return nullptr; + } + + // + // Now, if there still isn't an operation to do the construction, and we need one, add one. + // + + // Otherwise, skip out early. + if (subset || (newNode != node && newNode->getType() == type)) + return newNode; + + // setAggregateOperator will insert a new node for the constructor, as needed. + return intermediate.setAggregateOperator(newNode, op, type, loc); +} + +// 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* converted = intermediate.addConversion(EOpConstructStruct, type, node->getAsTyped()); + if (! converted || 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()); + + return nullptr; + } + + return converted; +} + +// +// Do everything needed to add an interface block. +// +void HlslParseContext::declareBlock(const TSourceLoc& loc, TType& type, const TString* instanceName, TArraySizes* arraySizes) +{ + assert(type.getWritableStruct() != nullptr); + + // Clean up top-level decorations that don't belong. + switch (type.getQualifier().storage) { + case EvqUniform: + case EvqBuffer: + correctUniform(type.getQualifier()); + break; + case EvqVaryingIn: + correctInput(type.getQualifier()); + break; + case EvqVaryingOut: + correctOutput(type.getQualifier()); + break; + default: + break; + } + + TTypeList& typeList = *type.getWritableStruct(); + // fix and check for member storage qualifiers and types that don't belong within a block + for (unsigned int member = 0; member < typeList.size(); ++member) { + TType& memberType = *typeList[member].type; + TQualifier& memberQualifier = memberType.getQualifier(); + const TSourceLoc& memberLoc = typeList[member].loc; + globalQualifierFix(memberLoc, memberQualifier); + memberQualifier.storage = type.getQualifier().storage; + + if (memberType.isStruct()) { + // clean up and pick up the right set of decorations + auto it = ioTypeMap.find(memberType.getStruct()); + switch (type.getQualifier().storage) { + case EvqUniform: + case EvqBuffer: + correctUniform(type.getQualifier()); + if (it != ioTypeMap.end() && it->second.uniform) + type.setStruct(it->second.uniform); + break; + case EvqVaryingIn: + correctInput(type.getQualifier()); + if (it != ioTypeMap.end() && it->second.input) + type.setStruct(it->second.input); + break; + case EvqVaryingOut: + correctOutput(type.getQualifier()); + if (it != ioTypeMap.end() && it->second.output) + type.setStruct(it->second.output); + break; + default: + break; + } + } + } + + // 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; + switch (type.getQualifier().storage) { + case EvqUniform: defaultQualification = globalUniformDefaults; break; + case EvqBuffer: defaultQualification = globalBufferDefaults; break; + case EvqVaryingIn: defaultQualification = globalInputDefaults; break; + case EvqVaryingOut: defaultQualification = globalOutputDefaults; break; + default: defaultQualification.clear(); break; + } + + // Special case for "push_constant uniform", which has a default of std430, + // contrary to normal uniform defaults, and can't have a default tracked for it. + if (type.getQualifier().layoutPushConstant && ! type.getQualifier().hasPacking()) + type.getQualifier().layoutPacking = ElpStd430; + + // fix and check for member layout qualifiers + + mergeObjectLayoutQualifiers(defaultQualification, type.getQualifier(), true); + + bool memberWithLocation = false; + bool memberWithoutLocation = false; + for (unsigned int member = 0; member < typeList.size(); ++member) { + TQualifier& memberQualifier = typeList[member].type->getQualifier(); + const TSourceLoc& memberLoc = typeList[member].loc; + if (memberQualifier.hasStream()) { + if (defaultQualification.layoutStream != memberQualifier.layoutStream) + error(memberLoc, "member cannot contradict block", "stream", ""); + } + + // "This includes a block's inheritance of the + // current global default buffer, a block member's inheritance of the block's + // buffer, and the requirement that any *xfb_buffer* declared on a block + // member must match the buffer inherited from the block." + if (memberQualifier.hasXfbBuffer()) { + if (defaultQualification.layoutXfbBuffer != memberQualifier.layoutXfbBuffer) + error(memberLoc, "member cannot contradict block (or what block inherited from global)", "xfb_buffer", ""); + } + + if (memberQualifier.hasLocation()) { + switch (type.getQualifier().storage) { + case EvqVaryingIn: + case EvqVaryingOut: + memberWithLocation = true; + break; + default: + break; + } + } else + memberWithoutLocation = true; + + TQualifier newMemberQualification = defaultQualification; + mergeQualifiers(newMemberQualification, memberQualifier); + memberQualifier = newMemberQualification; + } + + // Process the members + fixBlockLocations(loc, type.getQualifier(), typeList, memberWithLocation, memberWithoutLocation); + fixBlockXfbOffsets(type.getQualifier(), typeList); + fixBlockUniformOffsets(type.getQualifier(), typeList); + + // reverse merge, so that currentBlockQualifier now has all layout information + // (can't use defaultQualification directly, it's missing other non-layout-default-class qualifiers) + mergeObjectLayoutQualifiers(type.getQualifier(), defaultQualification, true); + + // + // Build and add the interface block as a new type named 'blockName' + // + + // Use the instance name as the interface name if one exists, else the block name. + const TString& interfaceName = (instanceName && !instanceName->empty()) ? *instanceName : type.getTypeName(); + + TType blockType(&typeList, interfaceName, type.getQualifier()); + if (arraySizes) + blockType.newArraySizes(*arraySizes); + + // Add the variable, as anonymous or named instanceName. + // Make an anonymous variable if no name was provided. + if (! instanceName) + 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() */, ""); + else + error(loc, "block instance name redefinition", variable.getName().c_str(), ""); + + return; + } + + // Save it in the AST for linker use. + trackLinkage(variable); +} + +// +// "For a block, this process applies to the entire block, or until the first member +// is reached that has a location layout qualifier. When a block member is declared with a location +// qualifier, its location comes from that qualifier: The member's location qualifier overrides the block-level +// declaration. Subsequent members are again assigned consecutive locations, based on the newest location, +// until the next member declared with a location qualifier. The values used for locations do not have to be +// declared in increasing order." +void HlslParseContext::fixBlockLocations(const TSourceLoc& loc, TQualifier& qualifier, TTypeList& typeList, bool memberWithLocation, bool memberWithoutLocation) +{ + // "If a block has no block-level location layout qualifier, it is required that either all or none of its members + // have a location layout qualifier, or a compile-time error results." + if (! qualifier.hasLocation() && memberWithLocation && memberWithoutLocation) + error(loc, "either the block needs a location, or all members need a location, or no members have a location", "location", ""); + else { + if (memberWithLocation) { + // remove any block-level location and make it per *every* member + int nextLocation = 0; // by the rule above, initial value is not relevant + if (qualifier.hasAnyLocation()) { + nextLocation = qualifier.layoutLocation; + qualifier.layoutLocation = TQualifier::layoutLocationEnd; + if (qualifier.hasComponent()) { + // "It is a compile-time error to apply the *component* qualifier to a ... block" + error(loc, "cannot apply to a block", "component", ""); + } + if (qualifier.hasIndex()) { + error(loc, "cannot apply to a block", "index", ""); + } + } + for (unsigned int member = 0; member < typeList.size(); ++member) { + TQualifier& memberQualifier = typeList[member].type->getQualifier(); + const TSourceLoc& memberLoc = typeList[member].loc; + if (! memberQualifier.hasLocation()) { + if (nextLocation >= (int)TQualifier::layoutLocationEnd) + error(memberLoc, "location is too large", "location", ""); + memberQualifier.layoutLocation = nextLocation; + memberQualifier.layoutComponent = 0; + } + nextLocation = memberQualifier.layoutLocation + intermediate.computeTypeLocationSize(*typeList[member].type); + } + } + } +} + +void HlslParseContext::fixBlockXfbOffsets(TQualifier& qualifier, TTypeList& typeList) +{ + // "If a block is qualified with xfb_offset, all its + // members are assigned transform feedback buffer offsets. If a block is not qualified with xfb_offset, any + // members of that block not qualified with an xfb_offset will not be assigned transform feedback buffer + // offsets." + + if (! qualifier.hasXfbBuffer() || ! qualifier.hasXfbOffset()) + return; + + int nextOffset = qualifier.layoutXfbOffset; + for (unsigned int member = 0; member < typeList.size(); ++member) { + TQualifier& memberQualifier = typeList[member].type->getQualifier(); + bool containsDouble = false; + int memberSize = intermediate.computeTypeXfbSize(*typeList[member].type, containsDouble); + // see if we need to auto-assign an offset to this member + if (! memberQualifier.hasXfbOffset()) { + // "if applied to an aggregate containing a double, the offset must also be a multiple of 8" + if (containsDouble) + RoundToPow2(nextOffset, 8); + memberQualifier.layoutXfbOffset = nextOffset; + } else + nextOffset = memberQualifier.layoutXfbOffset; + nextOffset += memberSize; + } + + // The above gave all block members an offset, so we can take it off the block now, + // which will avoid double counting the offset usage. + qualifier.layoutXfbOffset = TQualifier::layoutXfbOffsetEnd; +} + +// Calculate and save the offset of each block member, using the recursively +// defined block offset rules and the user-provided offset and align. +// +// Also, compute and save the total size of the block. For the block's size, arrayness +// is not taken into account, as each element is backed by a separate buffer. +// +void HlslParseContext::fixBlockUniformOffsets(const TQualifier& qualifier, TTypeList& typeList) +{ + if (! qualifier.isUniformOrBuffer()) + return; + if (qualifier.layoutPacking != ElpStd140 && qualifier.layoutPacking != ElpStd430) + return; + + int offset = 0; + int memberSize; + for (unsigned int member = 0; member < typeList.size(); ++member) { + TQualifier& memberQualifier = typeList[member].type->getQualifier(); + const TSourceLoc& memberLoc = typeList[member].loc; + + // "When align is applied to an array, it effects only the start of the array, not the array's internal stride." + + // modify just the children's view of matrix layout, if there is one for this member + TLayoutMatrix subMatrixLayout = typeList[member].type->getQualifier().layoutMatrix; + int dummyStride; + int memberAlignment = intermediate.getBaseAlignment(*typeList[member].type, memberSize, dummyStride, + qualifier.layoutPacking == ElpStd140, + 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." + if (! IsMultipleOfPow2(memberQualifier.layoutOffset, memberAlignment)) + error(memberLoc, "must be a multiple of the member's alignment", "offset", ""); + + // "The offset qualifier forces the qualified member to start at or after the specified + // integral-constant expression, which will be its byte offset from the beginning of the buffer. + // "The actual offset of a member is computed as + // follows: If offset was declared, start with that offset, otherwise start with the next available offset." + offset = std::max(offset, memberQualifier.layoutOffset); + } + + // "The actual alignment of a member will be the greater of the specified align alignment and the standard + // (e.g., std140) base alignment for the member's type." + if (memberQualifier.hasAlign()) + memberAlignment = std::max(memberAlignment, memberQualifier.layoutAlign); + + // "If the resulting offset is not a multiple of the actual alignment, + // increase it to the first offset that is a multiple of + // the actual alignment." + RoundToPow2(offset, memberAlignment); + typeList[member].type->getQualifier().layoutOffset = offset; + offset += memberSize; + } +} + +// For an identifier that is already declared, add more qualification to it. +void HlslParseContext::addQualifierToExisting(const TSourceLoc& loc, TQualifier qualifier, const TString& identifier) +{ + TSymbol* symbol = symbolTable.find(identifier); + if (! symbol) { + error(loc, "identifier not previously declared", identifier.c_str(), ""); + return; + } + if (symbol->getAsFunction()) { + error(loc, "cannot re-qualify a function name", identifier.c_str(), ""); + return; + } + + if (qualifier.isAuxiliary() || + qualifier.isMemory() || + qualifier.isInterpolation() || + qualifier.hasLayout() || + qualifier.storage != EvqTemporary || + qualifier.precision != EpqNone) { + error(loc, "cannot add storage, auxiliary, memory, interpolation, layout, or precision qualifier to an existing variable", identifier.c_str(), ""); + return; + } + + // For read-only built-ins, add a new symbol for holding the modified qualifier. + // This will bring up an entire block, if a block type has to be modified (e.g., gl_Position inside a block) + if (symbol->isReadOnly()) + symbol = symbolTable.copyUp(symbol); + + if (qualifier.invariant) { + if (intermediate.inIoAccessed(identifier)) + error(loc, "cannot change qualification after use", "invariant", ""); + symbol->getWritableType().getQualifier().invariant = true; + } else if (qualifier.noContraction) { + if (intermediate.inIoAccessed(identifier)) + error(loc, "cannot change qualification after use", "precise", ""); + symbol->getWritableType().getQualifier().noContraction = true; + } else if (qualifier.specConstant) { + symbol->getWritableType().getQualifier().makeSpecConstant(); + if (qualifier.hasSpecConstantId()) + symbol->getWritableType().getQualifier().layoutSpecConstantId = qualifier.layoutSpecConstantId; + } else + warn(loc, "unknown requalification", "", ""); +} + +void HlslParseContext::addQualifierToExisting(const TSourceLoc& loc, TQualifier qualifier, TIdentifierList& identifiers) +{ + for (unsigned int i = 0; i < identifiers.size(); ++i) + addQualifierToExisting(loc, qualifier, *identifiers[i]); +} + +// +// Update the intermediate for the given input geometry +// +bool HlslParseContext::handleInputGeometry(const TSourceLoc& loc, const TLayoutGeometry& geometry) +{ + switch (geometry) { + case ElgPoints: // fall through + case ElgLines: // ... + case ElgTriangles: // ... + case ElgLinesAdjacency: // ... + case ElgTrianglesAdjacency: // ... + if (! intermediate.setInputPrimitive(geometry)) { + error(loc, "input primitive geometry redefinition", TQualifier::getGeometryString(geometry), ""); + return false; + } + break; + + default: + error(loc, "cannot apply to 'in'", TQualifier::getGeometryString(geometry), ""); + return false; + } + + return true; +} + +// +// Update the intermediate for the given output geometry +// +bool HlslParseContext::handleOutputGeometry(const TSourceLoc& loc, const TLayoutGeometry& geometry) +{ + switch (geometry) { + case ElgPoints: + case ElgLineStrip: + case ElgTriangleStrip: + if (! intermediate.setOutputPrimitive(geometry)) { + error(loc, "output primitive geometry redefinition", TQualifier::getGeometryString(geometry), ""); + return false; + } + break; + default: + error(loc, "cannot apply to 'out'", TQualifier::getGeometryString(geometry), ""); + return false; + } + + return true; +} + +// +// Updating default qualifier for the case of a declaration with just a qualifier, +// no type, block, or identifier. +// +void HlslParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, const TPublicType& publicType) +{ + if (publicType.shaderQualifiers.vertices != TQualifier::layoutNotSet) { + assert(language == EShLangTessControl || language == EShLangGeometry); + // const char* id = (language == EShLangTessControl) ? "vertices" : "max_vertices"; + } + if (publicType.shaderQualifiers.invocations != TQualifier::layoutNotSet) { + if (! intermediate.setInvocations(publicType.shaderQualifiers.invocations)) + error(loc, "cannot change previously set layout value", "invocations", ""); + } + if (publicType.shaderQualifiers.geometry != ElgNone) { + if (publicType.qualifier.storage == EvqVaryingIn) { + switch (publicType.shaderQualifiers.geometry) { + case ElgPoints: + case ElgLines: + case ElgLinesAdjacency: + case ElgTriangles: + case ElgTrianglesAdjacency: + case ElgQuads: + case ElgIsolines: + break; + default: + 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)); + } + if (publicType.shaderQualifiers.spacing != EvsNone) + intermediate.setVertexSpacing(publicType.shaderQualifiers.spacing); + if (publicType.shaderQualifiers.order != EvoNone) + intermediate.setVertexOrder(publicType.shaderQualifiers.order); + if (publicType.shaderQualifiers.pointMode) + intermediate.setPointMode(); + for (int i = 0; i < 3; ++i) { + if (publicType.shaderQualifiers.localSize[i] > 1) { + int max = 0; + switch (i) { + case 0: max = resources.maxComputeWorkGroupSizeX; break; + case 1: max = resources.maxComputeWorkGroupSizeY; break; + case 2: max = resources.maxComputeWorkGroupSizeZ; break; + default: break; + } + if (intermediate.getLocalSize(i) > (unsigned int)max) + error(loc, "too large; see gl_MaxComputeWorkGroupSize", "local_size", ""); + + // Fix the existing constant gl_WorkGroupSize with this new information. + TVariable* workGroupSize = getEditableVariable("gl_WorkGroupSize"); + workGroupSize->getWritableConstArray()[i].setUConst(intermediate.getLocalSize(i)); + } + if (publicType.shaderQualifiers.localSizeSpecId[i] != TQualifier::layoutNotSet) { + intermediate.setLocalSizeSpecId(i, publicType.shaderQualifiers.localSizeSpecId[i]); + // Set the workgroup built-in variable as a specialization constant + TVariable* workGroupSize = getEditableVariable("gl_WorkGroupSize"); + workGroupSize->getWritableType().getQualifier().specConstant = true; + } + } + if (publicType.shaderQualifiers.earlyFragmentTests) + intermediate.setEarlyFragmentTests(); + + const TQualifier& qualifier = publicType.qualifier; + + switch (qualifier.storage) { + case EvqUniform: + if (qualifier.hasMatrix()) + globalUniformDefaults.layoutMatrix = qualifier.layoutMatrix; + if (qualifier.hasPacking()) + globalUniformDefaults.layoutPacking = qualifier.layoutPacking; + break; + case EvqBuffer: + if (qualifier.hasMatrix()) + globalBufferDefaults.layoutMatrix = qualifier.layoutMatrix; + if (qualifier.hasPacking()) + globalBufferDefaults.layoutPacking = qualifier.layoutPacking; + break; + case EvqVaryingIn: + break; + case EvqVaryingOut: + if (qualifier.hasStream()) + globalOutputDefaults.layoutStream = qualifier.layoutStream; + if (qualifier.hasXfbBuffer()) + 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); + } + break; + default: + error(loc, "default qualifier requires 'uniform', 'buffer', 'in', or 'out' storage qualification", "", ""); + return; + } +} + +// +// Take the sequence of statements that has been built up since the last case/default, +// put it on the list of top-level nodes for the current (inner-most) switch statement, +// and follow that by the case/default we are on now. (See switch topology comment on +// TIntermSwitch.) +// +void HlslParseContext::wrapupSwitchSubsequence(TIntermAggregate* statements, TIntermNode* branchNode) +{ + TIntermSequence* switchSequence = switchSequenceStack.back(); + + if (statements) { + statements->setOperator(EOpSequence); + switchSequence->push_back(statements); + } + if (branchNode) { + // check all previous cases for the same label (or both are 'default') + for (unsigned int s = 0; s < switchSequence->size(); ++s) { + TIntermBranch* prevBranch = (*switchSequence)[s]->getAsBranchNode(); + if (prevBranch) { + TIntermTyped* prevExpression = prevBranch->getExpression(); + TIntermTyped* newExpression = branchNode->getAsBranchNode()->getExpression(); + if (prevExpression == nullptr && newExpression == nullptr) + error(branchNode->getLoc(), "duplicate label", "default", ""); + else if (prevExpression != nullptr && + newExpression != nullptr && + prevExpression->getAsConstantUnion() && + newExpression->getAsConstantUnion() && + prevExpression->getAsConstantUnion()->getConstArray()[0].getIConst() == + newExpression->getAsConstantUnion()->getConstArray()[0].getIConst()) + error(branchNode->getLoc(), "duplicated value", "case", ""); + } + } + switchSequence->push_back(branchNode); + } +} + +// +// Turn the top-level node sequence built up of wrapupSwitchSubsequence +// into a switch node. +// +TIntermNode* HlslParseContext::addSwitch(const TSourceLoc& loc, TIntermTyped* expression, TIntermAggregate* lastStatements) +{ + wrapupSwitchSubsequence(lastStatements, nullptr); + + if (expression == nullptr || + (expression->getBasicType() != EbtInt && expression->getBasicType() != EbtUint) || + expression->getType().isArray() || expression->getType().isMatrix() || expression->getType().isVector()) + error(loc, "condition must be a scalar integer expression", "switch", ""); + + // If there is nothing to do, drop the switch but still execute the expression + TIntermSequence* switchSequence = switchSequenceStack.back(); + if (switchSequence->size() == 0) + return expression; + + if (lastStatements == nullptr) { + // emulate a break for error recovery + lastStatements = intermediate.makeAggregate(intermediate.addBranch(EOpBreak, loc)); + lastStatements->setOperator(EOpSequence); + switchSequence->push_back(lastStatements); + } + + TIntermAggregate* body = new TIntermAggregate(EOpSequence); + body->getSequence() = *switchSequenceStack.back(); + body->setLoc(loc); + + TIntermSwitch* switchNode = new TIntermSwitch(expression, body); + switchNode->setLoc(loc); + + 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) +{ + TVariable& thisVariable = *new TVariable(NewPoolTString(""), thisStruct); + symbolTable.pushThis(thisVariable); +} + +// Track levels of class/struct/namespace nesting with a prefix string using +// the type names separated by the scoping operator. E.g., two levels +// would look like: +// +// outer::inner +// +// The string is empty when at normal global level. +// +void HlslParseContext::pushNamespace(const TString& typeName) +{ + // make new type prefix + TString newPrefix; + if (currentTypePrefix.size() > 0) { + newPrefix = currentTypePrefix.back(); + newPrefix.append(scopeMangler); + } + newPrefix.append(typeName); + currentTypePrefix.push_back(newPrefix); +} + +// Opposite of pushNamespace(), see above +void HlslParseContext::popNamespace() +{ + currentTypePrefix.pop_back(); +} + +// 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 +{ + TString* name = NewPoolTString(""); + if (currentTypePrefix.size() > 0) + name->append(currentTypePrefix.back()); + name->append(scopeMangler); + name->append(localName); + + return name; +} + +// Helper function to add the namespace scope mangling syntax to a string. +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 +{ + return qualifier.hasUniformLayout() || + qualifier.layoutPushConstant; +} + +// Potentially not the opposite of hasUniform(), as if some characteristic is +// ever used for more than one thing (e.g., uniform or input), hasUniform() should +// say it exists, but clearUniform() should leave it in place. +void HlslParseContext::clearUniform(TQualifier& qualifier) +{ + qualifier.clearUniformLayout(); + qualifier.layoutPushConstant = false; +} + +// Return false if builtIn by itself doesn't force this qualifier to be an input qualifier. +bool HlslParseContext::isInputBuiltIn(const TQualifier& qualifier) const +{ + switch (qualifier.builtIn) { + case EbvPosition: + case EbvPointSize: + return language != EShLangVertex && language != EShLangCompute && language != EShLangFragment; + case EbvClipDistance: + case EbvCullDistance: + return language != EShLangVertex && language != EShLangCompute; + case EbvFragCoord: + case EbvFace: + case EbvHelperInvocation: + case EbvLayer: + case EbvPointCoord: + case EbvSampleId: + case EbvSampleMask: + case EbvSamplePosition: + case EbvViewportIndex: + return language == EShLangFragment; + case EbvGlobalInvocationId: + case EbvLocalInvocationIndex: + case EbvLocalInvocationId: + case EbvNumWorkGroups: + case EbvWorkGroupId: + case EbvWorkGroupSize: + return language == EShLangCompute; + case EbvInvocationId: + return language == EShLangTessControl || language == EShLangTessEvaluation || language == EShLangGeometry; + case EbvPatchVertices: + return language == EShLangTessControl || language == EShLangTessEvaluation; + case EbvInstanceId: + case EbvInstanceIndex: + case EbvVertexId: + case EbvVertexIndex: + return language == EShLangVertex; + case EbvPrimitiveId: + return language == EShLangGeometry || language == EShLangFragment; + case EbvTessLevelInner: + case EbvTessLevelOuter: + return language == EShLangTessEvaluation; + default: + return false; + } +} + +// Return true if there are decorations to preserve for input-like storage. +bool HlslParseContext::hasInput(const TQualifier& qualifier) const +{ + if (qualifier.hasAnyLocation()) + return true; + + if (language == EShLangFragment && (qualifier.isInterpolation() || qualifier.centroid || qualifier.sample)) + return true; + + if (language == EShLangTessEvaluation && qualifier.patch) + return true; + + if (isInputBuiltIn(qualifier)) + return true; + + return false; +} + +// Return false if builtIn by itself doesn't force this qualifier to be an output qualifier. +bool HlslParseContext::isOutputBuiltIn(const TQualifier& qualifier) const +{ + switch (qualifier.builtIn) { + case EbvPosition: + case EbvPointSize: + case EbvClipVertex: + case EbvClipDistance: + case EbvCullDistance: + return language != EShLangFragment && language != EShLangCompute; + case EbvFragDepth: + case EbvFragDepthGreater: + case EbvFragDepthLesser: + case EbvSampleMask: + return language == EShLangFragment; + case EbvLayer: + case EbvViewportIndex: + return language == EShLangGeometry; + case EbvPrimitiveId: + return language == EShLangGeometry || language == EShLangTessControl || language == EShLangTessEvaluation; + case EbvTessLevelInner: + case EbvTessLevelOuter: + return language == EShLangTessControl; + default: + return false; + } +} + +// Return true if there are decorations to preserve for output-like storage. +bool HlslParseContext::hasOutput(const TQualifier& qualifier) const +{ + if (qualifier.hasAnyLocation()) + return true; + + if (language != EShLangFragment && language != EShLangCompute && qualifier.hasXfb()) + return true; + + if (language == EShLangTessControl && qualifier.patch) + return true; + + if (language == EShLangGeometry && qualifier.hasStream()) + return true; + + if (isOutputBuiltIn(qualifier)) + return true; + + return false; +} + +// Make the IO decorations etc. be appropriate only for an input interface. +void HlslParseContext::correctInput(TQualifier& qualifier) +{ + clearUniform(qualifier); + if (language == EShLangVertex) + qualifier.clearInterstage(); + if (language != EShLangTessEvaluation) + qualifier.patch = false; + if (language != EShLangFragment) { + qualifier.clearInterpolation(); + qualifier.sample = false; + } + + qualifier.clearStreamLayout(); + qualifier.clearXfbLayout(); + + if (! isInputBuiltIn(qualifier)) + qualifier.builtIn = EbvNone; +} + +// Make the IO decorations etc. be appropriate only for an output interface. +void HlslParseContext::correctOutput(TQualifier& qualifier) +{ + clearUniform(qualifier); + if (language == EShLangFragment) + qualifier.clearInterstage(); + if (language != EShLangGeometry) + qualifier.clearStreamLayout(); + if (language == EShLangFragment) + qualifier.clearXfbLayout(); + if (language != EShLangTessControl) + qualifier.patch = false; + + switch (qualifier.builtIn) { + case EbvFragDepthGreater: + intermediate.setDepth(EldGreater); + qualifier.builtIn = EbvFragDepth; + break; + case EbvFragDepthLesser: + intermediate.setDepth(EldLess); + qualifier.builtIn = EbvFragDepth; + break; + default: + break; + } + + if (! isOutputBuiltIn(qualifier)) + qualifier.builtIn = EbvNone; +} + +// Make the IO decorations etc. be appropriate only for uniform type interfaces. +void HlslParseContext::correctUniform(TQualifier& qualifier) +{ + qualifier.builtIn = EbvNone; + qualifier.clearInterstage(); + qualifier.clearInterstageLayout(); +} + +// Clear out all IO/Uniform stuff, so this has nothing to do with being an IO interface. +void HlslParseContext::clearUniformInputOutput(TQualifier& qualifier) +{ + clearUniform(qualifier); + correctUniform(qualifier); +} + +// 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; + + if (symbolTable.isFunctionNameVariable(patchConstantFunctionName)) { + error(loc, "can't use variable in patch constant function", patchConstantFunctionName.c_str(), ""); + return; + } + + const TString mangledName = patchConstantFunctionName + "("; + + // create list of PCF candidates + TVector candidateList; + bool builtIn; + symbolTable.findFunctionNameList(mangledName, candidateList, builtIn); + + // We have to have one and only one, or we don't know which to pick: the patchconstantfunc does not + // allow any disambiguation of overloads. + if (candidateList.empty()) { + error(loc, "patch constant function not found", patchConstantFunctionName.c_str(), ""); + return; + } + + // Based on directed experiments, it appears that if there are overloaded patchconstantfunctions, + // HLSL picks the last one in shader source order. Since that isn't yet implemented here, error + // out if there is more than one candidate. + if (candidateList.size() > 1) { + error(loc, "ambiguous patch constant function", patchConstantFunctionName.c_str(), ""); + return; + } + + // Look for builtin variables in a function's parameter list. + const auto findBuiltIns = [&](const TFunction& function, std::set& builtIns) { + for (int p=0; pgetQualifier().storage; + + if (function[p].declaredBuiltIn != EbvNone) + builtIns.insert(HlslParseContext::tInterstageIoData(function[p].declaredBuiltIn, 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. + const auto addToLinkage = [&](const TType& type, const TString* name, TIntermSymbol** symbolNode) { + if (name == nullptr) { + error(loc, "unable to locate patch function parameter name", "", ""); + return; + } else { + TVariable& variable = *new TVariable(name, type); + if (! symbolTable.insert(variable)) { + error(loc, "unable to declare patch constant function interface variable", name->c_str(), ""); + return; + } + + globalQualifierFix(loc, variable.getWritableType().getQualifier()); + + if (symbolNode != nullptr) + *symbolNode = intermediate.addSymbol(variable); + + trackLinkage(variable); + } + }; + + // 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; + + return intermediate.addSymbol(*it->second->getAsVariable()); + }; + + // 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. + // + // 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 + // variables from (1) above. + // + // 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). + + TFunction& patchConstantFunction = const_cast(*candidateList[0]); + const int pcfParamCount = patchConstantFunction.getParamCount(); + TIntermSymbol* invocationIdSym = findLinkageSymbol(EbvInvocationId); + TIntermSequence& epBodySeq = entryPointFunctionBody->getAsAggregate()->getSequence(); + + // ================ Step 1A: Union Interfaces ================ + // Our patch constant function. + { + std::set pcfBuiltIns; // patch constant function builtins + std::set epfBuiltIns; // entry point function builtins + + assert(entryPointFunction); + assert(entryPointFunctionBody); + + 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. + std::set notInEntryPoint; + + notInEntryPoint = pcfBuiltIns; + + // std::set_difference not usable on unordered containers + for (auto bi = epfBuiltIns.begin(); bi != epfBuiltIns.end(); ++bi) + notInEntryPoint.erase(*bi); + + // Now we'll add those to the entry and to the linkage. + for (int p=0; pclone(); + const TBuiltInVariable biType = patchConstantFunction[p].declaredBuiltIn; + const TStorageQualifier storage = patchConstantFunction[p].type->getQualifier().storage; + + // 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. + if (invocationIdSym == nullptr) { + TType invocationIdType(EbtUint, EvqIn, 1); + TString* invocationIdName = NewPoolTString("InvocationId"); + invocationIdType.getQualifier().builtIn = EbvInvocationId; + addToLinkage(invocationIdType, invocationIdName, &invocationIdSym); + } + + assert(invocationIdSym); + } + + TIntermTyped* pcfArguments = nullptr; + + // ================ Step 1B: Argument synthesis ================ + // Create pcfArguments for synthesis of patchconstantfunction invocation + // TODO: handle struct or array inputs + { + for (int p=0; pisArray() || + 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; + + TIntermSymbol* builtIn = findLinkageSymbol(biType); + + if (builtIn == nullptr) { + error(loc, "unable to find patch constant function builtin variable", "", ""); + return; + } + + if (pcfParamCount == 1) + pcfArguments = builtIn; + else + pcfArguments = intermediate.growAggregate(pcfArguments, builtIn); + } + } + + // ================ Step 2: Synthesize call to PCF ================ + TIntermTyped* pcfCall = nullptr; + + { + // Create a function call to the patchconstantfunction + if (pcfArguments) + addInputArgumentConversions(patchConstantFunction, pcfArguments); + + // Synthetic call. + pcfCall = intermediate.setAggregateOperator(pcfArguments, EOpFunctionCall, patchConstantFunction.getType(), loc); + pcfCall->getAsAggregate()->setUserDefined(); + pcfCall->getAsAggregate()->setName(patchConstantFunction.getMangledName()); + intermediate.addToCallGraph(infoSink, entryPointFunction->getMangledName(), patchConstantFunction.getMangledName()); + + if (pcfCall->getAsAggregate()) { + TQualifierList& qualifierList = pcfCall->getAsAggregate()->getQualifierList(); + for (int i = 0; i < patchConstantFunction.getParamCount(); ++i) { + TStorageQualifier qual = patchConstantFunction[i].type->getQualifier().storage; + qualifierList.push_back(qual); + } + pcfCall = addOutputArgumentConversions(patchConstantFunction, *pcfCall->getAsOperator()); + } + } + + // ================ Step 3: Create return Sequence ================ + // Return sequence: copy PCF result to a temporary, then to shader output variable. + if (pcfCall->getBasicType() != EbtVoid) { + const TType* retType = &patchConstantFunction.getType(); // return type from the PCF + TType outType; // output type that goes with the return type. + outType.shallowCopy(*retType); + + // substitute the output type + const auto newLists = ioTypeMap.find(retType->getStruct()); + if (newLists != ioTypeMap.end()) + outType.setStruct(newLists->second.output); + + // Substitute the top level type's builtin type + if (patchConstantFunction.getDeclaredBuiltInType() != EbvNone) + outType.getQualifier().builtIn = patchConstantFunction.getDeclaredBuiltInType(); + + TVariable* pcfOutput = makeInternalVariable("@patchConstantOutput", outType); + pcfOutput->getWritableType().getQualifier().storage = EvqVaryingOut; + + if (pcfOutput->getType().containsBuiltInInterstageIO(language)) + split(*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); + + pcfCall = pcfAggregate; + } + + // ================ Step 4: Barrier ================ + TIntermTyped* barrier = new TIntermAggregate(EOpBarrier); + barrier->setLoc(loc); + barrier->setType(TType(EbtVoid)); + epBodySeq.insert(epBodySeq.end(), barrier); + + // ================ 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); + invocationIdTest->setLoc(loc); + + // add our test sequence before the return. + epBodySeq.insert(epBodySeq.end(), invocationIdTest); +} + +// post-processing +void HlslParseContext::finish() +{ + addPatchConstantInvocation(); + addInterstageIoToLinkage(); + + TParseContextBase::finish(); +} + +} // end namespace glslang diff --git a/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslParseHelper.h b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslParseHelper.h new file mode 100755 index 0000000..2d19681 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslParseHelper.h @@ -0,0 +1,413 @@ +// +// Copyright (C) 2016 Google, Inc. +// Copyright (C) 2016 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. +// +#ifndef HLSL_PARSE_INCLUDED_ +#define HLSL_PARSE_INCLUDED_ + +#include "../glslang/MachineIndependent/parseVersions.h" +#include "../glslang/MachineIndependent/ParseHelper.h" + +namespace glslang { + +class TAttributeMap; // forward declare + +class HlslParseContext : public TParseContextBase { +public: + HlslParseContext(TSymbolTable&, TIntermediate&, bool parsingBuiltins, + int version, EProfile, const SpvVersion& spvVersion, EShLanguage, TInfoSink&, + const TString sourceEntryPointName, + bool forwardCompatible = false, EShMessages messages = EShMsgDefault); + virtual ~HlslParseContext(); + void initializeExtensionBehavior() override; + + void setLimits(const TBuiltInResource&) override; + bool parseShaderStrings(TPpContext&, TInputScanner& input, bool versionWillBeError = false) override; + virtual const char* getGlobalUniformBlockName() const override { return "$Global"; } + virtual void setUniformBlockDefaults(TType& block) const override + { + block.getQualifier().layoutPacking = ElpStd140; + block.getQualifier().layoutMatrix = ElmRowMajor; + } + + void reservedPpErrorCheck(const TSourceLoc&, const char* /*name*/, const char* /*op*/) override { } + bool lineContinuationCheck(const TSourceLoc&, bool /*endOfComment*/) override { return true; } + bool lineDirectiveShouldSetNextLine() const override { return true; } + bool builtInName(const TString&); + + void handlePragma(const TSourceLoc&, const TVector&) override; + 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 handleFunctionDeclarator(const TSourceLoc&, TFunction& function, bool prototype); + TIntermAggregate* handleFunctionDefinition(const TSourceLoc&, TFunction&, const TAttributeMap&, TIntermNode*& entryPointTree); + TIntermNode* transformEntryPoint(const TSourceLoc&, TFunction&, const TAttributeMap&); + void handleFunctionBody(const TSourceLoc&, TFunction&, TIntermNode* functionBody, TIntermNode*& node); + void remapEntryPointIO(TFunction& function, TVariable*& returnValue, TVector& inputs, TVector& outputs); + void remapNonEntryPointIO(TFunction& function); + TIntermNode* handleReturnValue(const TSourceLoc&, TIntermTyped*); + void handleFunctionArgument(TFunction*, TIntermTyped*& arguments, TIntermTyped* newArg); + TIntermTyped* handleAssign(const TSourceLoc&, TOperator, TIntermTyped* left, TIntermTyped* right); + TIntermTyped* handleAssignToMatrixSwizzle(const TSourceLoc&, TOperator, TIntermTyped* left, TIntermTyped* right); + TIntermTyped* handleFunctionCall(const TSourceLoc&, TFunction*, TIntermTyped*); + 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 addInputArgumentConversions(const TFunction&, TIntermTyped*&); + TIntermTyped* addOutputArgumentConversions(const TFunction&, TIntermOperator&); + void builtInOpCheck(const TSourceLoc&, const TFunction&, TIntermOperator&); + TFunction* handleConstructorCall(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*); + + TIntermAggregate* handleSamplerTextureCombine(const TSourceLoc& loc, TIntermTyped* argTex, TIntermTyped* argSampler); + + bool parseMatrixSwizzleSelector(const TSourceLoc&, const TString&, int cols, int rows, TSwizzleSelectors&); + int getMatrixComponentsColumn(int rows, const TSwizzleSelectors&); + void assignError(const TSourceLoc&, const char* op, TString left, TString right); + void unaryOpError(const TSourceLoc&, const char* op, TString operand); + void binaryOpError(const TSourceLoc&, const char* op, TString left, TString right); + void variableCheck(TIntermTyped*& nodePtr); + void constantValueCheck(TIntermTyped* node, const char* token); + void integerCheck(const TIntermTyped* node, const char* token); + void globalCheck(const TSourceLoc&, const char* token); + bool constructorError(const TSourceLoc&, TIntermNode*, TFunction&, TOperator, TType&); + bool constructorTextureSamplerError(const TSourceLoc&, const TFunction&); + void arraySizeCheck(const TSourceLoc&, TIntermTyped* expr, TArraySize&); + void arraySizeRequiredCheck(const TSourceLoc&, const TArraySizes&); + 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); + + void setLayoutQualifier(const TSourceLoc&, TQualifier&, TString&); + void setLayoutQualifier(const TSourceLoc&, TQualifier&, TString&, const TIntermTyped*); + 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&); + 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&); + 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 fixBlockLocations(const TSourceLoc&, TQualifier&, TTypeList&, bool memberWithLocation, bool memberWithoutLocation); + void fixBlockXfbOffsets(TQualifier&, TTypeList&); + void fixBlockUniformOffsets(const TQualifier&, TTypeList&); + void addQualifierToExisting(const TSourceLoc&, TQualifier, const TString& identifier); + 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); + + void updateImplicitArraySize(const TSourceLoc&, TIntermNode*, int index); + + void nestLooping() { ++loopNestingLevel; } + void unnestLooping() { --loopNestingLevel; } + void nestAnnotations() { ++annotationNestingLevel; } + void unnestAnnotations() { --annotationNestingLevel; } + int getAnnotationNestingLevel() { return annotationNestingLevel; } + void pushScope() { symbolTable.push(); } + void popScope() { symbolTable.pop(0); } + + void pushThisScope(const TType&); + void popThisScope() { symbolTable.pop(0); } + + void pushImplicitThis(TVariable* thisParameter) { implicitThisStack.push_back(thisParameter); } + void popImplicitThis() { implicitThisStack.pop_back(); } + TVariable* getImplicitThis(int thisDepth) const { return implicitThisStack[implicitThisStack.size() - thisDepth]; } + + void pushNamespace(const TString& name); + void popNamespace(); + TString* getFullNamespaceName(const TString& localName) 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; + + // Apply L-value conversions. E.g, turning a write to a RWTexture into an ImageStore. + TIntermTyped* handleLvalue(const TSourceLoc&, const char* op, TIntermTyped* node); + bool lValueErrorCheck(const TSourceLoc&, const char* op, TIntermTyped*) override; + + TLayoutFormat getLayoutFromTxType(const TSourceLoc&, const TType&); + + 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; + + // 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(); } + + // Share struct buffer deep types + void shareStructBufferType(TType&); + +protected: + struct TFlattenData { + TFlattenData() : nextBinding(TQualifier::layoutBindingEnd) { } + TFlattenData(int nb) : nextBinding(nb) { } + + TVector members; // individual flattened variables + TVector offsets; // offset to next tree level + int nextBinding; // next binding to use. + }; + + void fixConstInit(const TSourceLoc&, 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); + TIntermNode* executeInitializer(const TSourceLoc&, TIntermTyped* initializer, TVariable* variable); + TIntermTyped* convertInitializerList(const TSourceLoc&, const TType&, TIntermTyped* initializer); + bool isZeroConstructor(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). + bool shouldConvertLValue(const TIntermNode*) const; + + // Array and struct flattening + TIntermTyped* flattenAccess(TIntermTyped* base, int member); + bool shouldFlattenUniform(const TType&) 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*); + void split(const TVariable&); + 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(); + void addPatchConstantInvocation(); + + 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); + + bool hasUniform(const TQualifier& qualifier) const; + void clearUniform(TQualifier& qualifier); + bool isInputBuiltIn(const TQualifier& qualifier) const; + bool hasInput(const TQualifier& qualifier) const; + void correctOutput(TQualifier& qualifier); + bool isOutputBuiltIn(const TQualifier& qualifier) const; + bool hasOutput(const TQualifier& qualifier) const; + void correctInput(TQualifier& qualifier); + void correctUniform(TQualifier& qualifier); + void clearUniformInputOutput(TQualifier& qualifier); + + // Test method names + bool isStructBufferMethod(const TString& name) const; + + TType* getStructBufferContentType(const TType& type) const; + bool isStructBufferType(const TType& type) const { return getStructBufferContentType(type) != nullptr; } + TIntermTyped* indexStructBufferContent(const TSourceLoc& loc, TIntermTyped* buffer) const; + + // 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. + using TParseContextBase::trackLinkage; + void trackLinkage(TSymbol& variable) override; + + void finish() override; // post-processing + + // 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 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&); + + static const int maxSamplerIndex = EsdNumDims * (EbtNumTypes * (2 * 2 * 2)); // see computeSamplerTypeIndex() + TQualifier globalBufferDefaults; + TQualifier globalUniformDefaults; + TQualifier globalInputDefaults; + TQualifier globalOutputDefaults; + TString currentCaller; // name of last function body entered (not valid when at global scope) + TIdSetType inductiveLoopIds; + TVector needsIndexLimitationChecking; + + // + // Geometry shader input arrays: + // - array sizing is based on input primitive and/or explicit size + // + // Tessellation control output arrays: + // - array sizing is based on output layout(vertices=...) and/or explicit size + // + // Both: + // - array sizing is retroactive + // - built-in block redeclarations interact with this + // + // Design: + // - use a per-context "resize-list", a list of symbols whose array sizes + // can be fixed + // + // - the resize-list starts empty at beginning of user-shader compilation, it does + // not have built-ins in it + // + // - on built-in array use: copyUp() symbol and add it to the resize-list + // + // - on user array declaration: add it to the resize-list + // + // - on block redeclaration: copyUp() symbol and add it to the resize-list + // * note, that appropriately gives an error if redeclaring a block that + // was already used and hence already copied-up + // + // - on seeing a layout declaration that sizes the array, fix everything in the + // resize-list, giving errors for mismatch + // + // - on seeing an array size declaration, give errors on mismatch between it and previous + // array-sizing declarations + // + TVector ioArraySymbolResizeList; + + TMap flattenMap; + TVector flattenLevel; // nested postfix operator level for flattening + TVector 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, + // but HLSL allows mixing all in the same structure. + struct tIoKinds { + TTypeList* input; + TTypeList* output; + TTypeList* uniform; + }; + TMap ioTypeMap; + + // Structure splitting data: + TMap splitIoVars; // variables with the builtin interstage IO removed, indexed by unique ID. + + // Structuredbuffer shared types. Typically there are only a few. + TVector structBufferTypes; + + // The builtin 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; + + // ordering for maps + bool operator<(const tInterstageIoData d) const { + return (builtIn != d.builtIn) ? (builtIn < d.builtIn) : (storage < d.storage); + } + }; + + TMap 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; + + 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 builtInLinkageSymbols; // used for tessellation, finding declared builtins + + TVector currentTypePrefix; // current scoping prefix for nested structures + TVector implicitThisStack; // currently active 'this' variables for nested structures +}; + +// This is the prefix we use for builtin 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. +#define BUILTIN_PREFIX "__BI_" + +} // end namespace glslang + +#endif // HLSL_PARSE_INCLUDED_ diff --git a/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslParseables.cpp b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslParseables.cpp new file mode 100755 index 0000000..1a47a0b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslParseables.cpp @@ -0,0 +1,1223 @@ +// +// Copyright (C) 2016 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. +// + +// +// Create strings that declare built-in definitions, add built-ins programmatically +// that cannot be expressed in the strings, and establish mappings between +// built-in functions and operators. +// +// Where to put a built-in: +// TBuiltInParseablesHlsl::initialize(version,profile) context-independent textual built-ins; add them to the right string +// TBuiltInParseablesHlsl::initialize(resources,...) context-dependent textual built-ins; add them to the right string +// TBuiltInParseablesHlsl::identifyBuiltIns(...,symbolTable) context-independent programmatic additions/mappings to the symbol table, +// including identifying what extensions are needed if a version does not allow a symbol +// TBuiltInParseablesHlsl::identifyBuiltIns(...,symbolTable, resources) context-dependent programmatic additions/mappings to the +// symbol table, including identifying what extensions are needed if a version does +// not allow a symbol +// + +#include "hlslParseables.h" +#include "hlslParseHelper.h" +#include +#include +#include + +namespace { // anonymous namespace functions + +const bool UseHlslTypes = true; + +const char* BaseTypeName(const char argOrder, const char* scalarName, const char* vecName, const char* matName) +{ + switch (argOrder) { + case 'S': return scalarName; + case 'V': return vecName; + case 'M': return matName; + default: return "UNKNOWN_TYPE"; + } +} + +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 == '~'; } +bool IsTextureType(const char argOrder) +{ + return argOrder == '%' || argOrder == '@' || IsTextureMS(argOrder) || IsBuffer(argOrder) | IsImage(argOrder); +} + +// Reject certain combinations that are illegal sample methods. For example, +// 3D arrays. +bool IsIllegalSample(const glslang::TString& name, const char* argOrder, int dim0) +{ + const bool isArrayed = IsArrayed(*argOrder); + const bool isMS = IsTextureMS(*argOrder); + const bool isBuffer = IsBuffer(*argOrder); + + // there are no 3D arrayed textures, or 3D SampleCmp(LevelZero) + if (dim0 == 3 && (isArrayed || name == "SampleCmp" || name == "SampleCmpLevelZero")) + return true; + + const int numArgs = int(std::count(argOrder, argOrder + strlen(argOrder), ',')) + 1; + + // Reject invalid offset forms with cubemaps + if (dim0 == 4) { + if ((name == "Sample" && numArgs >= 4) || + (name == "SampleBias" && numArgs >= 5) || + (name == "SampleCmp" && numArgs >= 5) || + (name == "SampleCmpLevelZero" && numArgs >= 5) || + (name == "SampleGrad" && numArgs >= 6) || + (name == "SampleLevel" && numArgs >= 5)) + return true; + } + + const bool isGather = + (name == "Gather" || + name == "GatherRed" || + name == "GatherGreen" || + name == "GatherBlue" || + name == "GatherAlpha"); + + const bool isGatherCmp = + (name == "GatherCmpRed" || + name == "GatherCmpGreen" || + name == "GatherCmpBlue" || + name == "GatherCmpAlpha"); + + // Reject invalid Gathers + if (isGather || isGatherCmp) { + if (dim0 == 1 || dim0 == 3) // there are no 1D or 3D gathers + return true; + + // no offset on cube or cube array gathers + if (dim0 == 4) { + if ((isGather && numArgs > 3) || (isGatherCmp && numArgs > 4)) + return true; + } + } + + // Reject invalid Loads + if (name == "Load" && dim0 == 4) + return true; // Load does not support any cubemaps, arrayed or not. + + // Multisample formats are only 2D and 2Darray + if (isMS && dim0 != 2) + return true; + + // Buffer are only 1D + if (isBuffer && dim0 != 1) + return true; + + return false; +} + +// Return the number of the coordinate arg, if any +int CoordinateArgPos(const glslang::TString& name, bool isTexture) +{ + if (!isTexture || (name == "GetDimensions")) + return -1; // has none + else if (name == "Load") + return 1; + else + return 2; // other texture methods are 2 +} + +// Some texture methods use an addition coordinate dimension for the mip +bool HasMipInCoord(const glslang::TString& name, bool isMS, bool isBuffer, bool isImage) +{ + return name == "Load" && !isMS && !isBuffer && !isImage; +} + +// LOD calculations don't pass the array level in the coordinate. +bool NoArrayCoord(const glslang::TString& name) +{ + return name == "CalculateLevelOfDetail" || name == "CalculateLevelOfDetailUnclamped"; +} + +// Handle IO params marked with > or < +const char* IoParam(glslang::TString& s, const char* nthArgOrder) +{ + if (*nthArgOrder == '>') { // output params + ++nthArgOrder; + s.append("out "); + } else if (*nthArgOrder == '<') { // input params + ++nthArgOrder; + s.append("in "); + } + + return nthArgOrder; +} + +// Handle repeated args +void HandleRepeatArg(const char*& arg, const char*& prev, const char* current) +{ + if (*arg == ',' || *arg == '\0') + arg = prev; + else + prev = current; +} + +// Return true for the end of a single argument key, which can be the end of the string, or +// the comma separator. +inline bool IsEndOfArg(const char* arg) +{ + return arg == nullptr || *arg == '\0' || *arg == ','; +} + +// If this is a fixed vector size, such as V3, return the size. Else return 0. +int FixedVecSize(const char* arg) +{ + while (!IsEndOfArg(arg)) { + if (isdigit(*arg)) + return *arg - '0'; + ++arg; + } + + return 0; // none found. +} + +// Create and return a type name. This is done in GLSL, not HLSL conventions, until such +// time as builtins are parsed using the HLSL parser. +// +// order: S = scalar, V = vector, M = matrix +// argType: F = float, D = double, I = int, U = uint, B = bool, S = sampler +// dim0 = vector dimension, or matrix 1st dimension +// dim1 = matrix 2nd dimension +glslang::TString& AppendTypeName(glslang::TString& s, const char* argOrder, const char* argType, int dim0, int dim1) +{ + const bool isTranspose = (argOrder[0] == '^'); + 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 isBuffer = IsBuffer(argOrder[0]); + const bool isImage = IsImage(argOrder[0]); + + char type = *argType; + + if (isTranspose) { // Take transpose of matrix dimensions + std::swap(dim0, dim1); + } else if (isTexture) { + if (type == 'F') // map base type to texture of that type. + type = 'T'; // e.g, int -> itexture, uint -> utexture, etc. + else if (type == 'I') + type = 'i'; + else if (type == 'U') + type = 'u'; + } + + if (isTranspose) + ++argOrder; + + char order = *argOrder; + + if (UseHlslTypes) { + switch (type) { + case '-': s += "void"; break; + case 'F': s += "float"; break; + case 'D': s += "double"; break; + case 'I': s += "int"; break; + case 'U': s += "uint"; break; + case 'B': s += "bool"; break; + case 'S': s += "sampler"; break; + case 's': s += "SamplerComparisonState"; break; + case 'T': s += ((isBuffer && isImage) ? "RWBuffer" : + isBuffer ? "Buffer" : + isImage ? "RWTexture" : "Texture"); break; + case 'i': s += ((isBuffer && isImage) ? "RWBuffer" : + isBuffer ? "Buffer" : + isImage ? "RWTexture" : "Texture"); break; + case 'u': s += ((isBuffer && isImage) ? "RWBuffer" : + isBuffer ? "Buffer" : + isImage ? "RWTexture" : "Texture"); break; + default: s += "UNKNOWN_TYPE"; break; + } + } else { + switch (type) { + case '-': s += "void"; break; + case 'F': s += BaseTypeName(order, "float", "vec", "mat"); break; + case 'D': s += BaseTypeName(order, "double", "dvec", "dmat"); break; + case 'I': s += BaseTypeName(order, "int", "ivec", "imat"); break; + case 'U': s += BaseTypeName(order, "uint", "uvec", "umat"); break; + case 'B': s += BaseTypeName(order, "bool", "bvec", "bmat"); break; + case 'S': s += "sampler"; break; + case 's': s += "samplerShadow"; break; + case 'T': // fall through + case 'i': // ... + case 'u': // ... + if (type != 'T') // create itexture, utexture, etc + s += type; + + s += ((isImage && isBuffer) ? "imageBuffer" : + isImage ? "image" : + isBuffer ? "samplerBuffer" : + "texture"); + break; + + default: s += "UNKNOWN_TYPE"; break; + } + } + + // handle fixed vector sizes, such as float3, and only ever 3. + const int fixedVecSize = FixedVecSize(argOrder); + if (fixedVecSize != 0) + dim0 = dim1 = fixedVecSize; + + // Add sampler dimensions + if (isSampler || isTexture) { + if ((order == 'V' || isTexture) && !isBuffer) { + switch (dim0) { + case 1: s += "1D"; break; + case 2: s += (isMS ? "2DMS" : "2D"); break; + case 3: s += "3D"; break; + case 4: s += "Cube"; break; + default: s += "UNKNOWN_SAMPLER"; break; + } + } + } else { + // Non-sampler type: + // verify dimensions + if (((order == 'V' || order == 'M') && (dim0 < 1 || dim0 > 4)) || + (order == 'M' && (dim1 < 1 || dim1 > 4))) { + s += "UNKNOWN_DIMENSION"; + return s; + } + + switch (order) { + case '-': break; // no dimensions for voids + case 'S': break; // no dimensions on scalars + case 'V': + s += ('0' + char(dim0)); + break; + case 'M': + s += ('0' + char(dim0)); + s += 'x'; + s += ('0' + char(dim1)); + break; + default: + break; + } + } + + // handle arrayed textures + if (isArrayed) + s += "Array"; + + // For HLSL, append return type for texture types + if (UseHlslTypes) { + switch (type) { + case 'i': s += ""; break; + case 'u': s += ""; break; + case 'T': s += ""; break; + default: break; + } + } + + return s; +} + +// The GLSL parser can be used to parse a subset of HLSL prototypes. However, many valid HLSL prototypes +// are not valid GLSL prototypes. This rejects the invalid ones. Thus, there is a single switch below +// to enable creation of the entire HLSL space. +inline bool IsValid(const char* cname, char retOrder, char retType, char argOrder, char argType, int dim0, int dim1) +{ + const bool isVec = (argOrder == 'V'); + const bool isMat = (argOrder == 'M'); + + const std::string name(cname); + + // these do not have vec1 versions + if (dim0 == 1 && (name == "length" || name == "normalize" || name == "reflect" || name == "refract")) + return false; + + if (!IsTextureType(argOrder) && (isVec && dim0 == 1)) // avoid vec1 + return false; + + if (UseHlslTypes) { + // NO further restrictions for HLSL + } else { + // GLSL parser restrictions + if ((isMat && (argType == 'I' || argType == 'U' || argType == 'B')) || + (retOrder == 'M' && (retType == 'I' || retType == 'U' || retType == 'B'))) + return false; + + if (isMat && dim0 == 1 && dim1 == 1) // avoid mat1x1 + return false; + + if (isMat && dim1 == 1) // TODO: avoid mat Nx1 until we find the right GLSL profile + return false; + + if (name == "GetRenderTargetSamplePosition" || + name == "tex1D" || + name == "tex1Dgrad") + return false; + } + + return true; +} + +// return position of end of argument specifier +inline const char* FindEndOfArg(const char* arg) +{ + while (!IsEndOfArg(arg)) + ++arg; + + return *arg == '\0' ? nullptr : arg; +} + +// Return pointer to beginning of Nth argument specifier in the string. +inline const char* NthArg(const char* arg, int n) +{ + for (int x=0; x 0) // handle fixed sized vectors + dim0Min = dim0Max = fixedVecSize; +} + +} // end anonymous namespace + +namespace glslang { + +TBuiltInParseablesHlsl::TBuiltInParseablesHlsl() +{ +} + +// +// Handle creation of mat*mat specially, since it doesn't fall conveniently out of +// the generic prototype creation code below. +// +void TBuiltInParseablesHlsl::createMatTimesMat() +{ + TString& s = commonBuiltins; + + const int first = (UseHlslTypes ? 1 : 2); + + for (int xRows = first; xRows <=4; xRows++) { + for (int xCols = first; xCols <=4; xCols++) { + const int yRows = xCols; + for (int yCols = first; yCols <=4; yCols++) { + const int retRows = xRows; + const int retCols = yCols; + + // Create a mat * mat of the appropriate dimensions + AppendTypeName(s, "M", "F", retRows, retCols); // add return type + s.append(" "); // space between type and name + s.append("mul"); // intrinsic name + s.append("("); // open paren + + AppendTypeName(s, "M", "F", xRows, xCols); // add X input + s.append(", "); + AppendTypeName(s, "M", "F", yRows, yCols); // add Y input + + s.append(");\n"); // close paren + } + + // Create M*V + AppendTypeName(s, "V", "F", xRows, 1); // add return type + s.append(" "); // space between type and name + s.append("mul"); // intrinsic name + s.append("("); // open paren + + AppendTypeName(s, "M", "F", xRows, xCols); // add X input + s.append(", "); + AppendTypeName(s, "V", "F", xCols, 1); // add Y input + + s.append(");\n"); // close paren + + // Create V*M + AppendTypeName(s, "V", "F", xCols, 1); // add return type + s.append(" "); // space between type and name + s.append("mul"); // intrinsic name + s.append("("); // open paren + + AppendTypeName(s, "V", "F", xRows, 1); // add Y input + s.append(", "); + AppendTypeName(s, "M", "F", xRows, xCols); // add X input + + s.append(");\n"); // close paren + } + } +} + +// +// Add all context-independent built-in functions and variables that are present +// for the given version and profile. Share common ones across stages, otherwise +// make stage-specific entries. +// +// Most built-ins variables can be added as simple text strings. Some need to +// be added programmatically, which is done later in IdentifyBuiltIns() below. +// +void TBuiltInParseablesHlsl::initialize(int /*version*/, EProfile /*profile*/, const SpvVersion& /*spvVersion*/) +{ + 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 + // to EShLangAll, to allow any intrinsic to be used in any shader, which is legal + // if it is not called. + // + // static const EShLanguageMask EShLangPSCS = EShLanguageMask(EShLangFragmentMask | EShLangComputeMask); + // static const EShLanguageMask EShLangVSPSGS = EShLanguageMask(EShLangVertexMask | EShLangFragmentMask | EShLangGeometryMask); + // static const EShLanguageMask EShLangCS = EShLangComputeMask; + // static const EShLanguageMask EShLangPS = EShLangFragmentMask; + // static const EShLanguageMask EShLangHS = EShLangTessControlMask; + + // This set uses EShLangAll for everything. + static const EShLanguageMask EShLangPSCS = EShLangAll; + static const EShLanguageMask EShLangVSPSGS = EShLangAll; + static const EShLanguageMask EShLangCS = EShLangAll; + static const EShLanguageMask EShLangPS = EShLangAll; + static const EShLanguageMask EShLangHS = EShLangAll; + static const EShLanguageMask EShLangGS = EShLangAll; + + // This structure encodes the prototype information for each HLSL intrinsic. + // Because explicit enumeration would be cumbersome, it's procedurally generated. + // orderKey can be: + // S = scalar, V = vector, M = matrix, - = void + // typekey can be: + // D = double, F = float, U = uint, I = int, B = bool, S = sampler, s = shadowSampler + // An empty order or type key repeats the first one. E.g: SVM,, means 3 args each of SVM. + // '>' as first letter of order creates an output parameter + // '<' as first letter of order creates an input parameter + // '^' as first letter of order takes transpose dimensions + // '%' as first letter of order creates texture of given F/I/U type (texture, itexture, etc) + // '@' as first letter of order creates arrayed texture of given type + // '$' / '&' as first letter of order creates 2DMS / 2DMSArray textures + // '*' as first letter of order creates buffer object + // '!' 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 + + static const struct { + const char* name; // intrinsic name + const char* retOrder; // return type key: empty matches order of 1st argument + const char* retType; // return type key: empty matches type of 1st argument + const char* argOrder; // argument order key + const char* argType; // argument type key + unsigned int stage; // stage mask + bool method; // true if it's a method. + } hlslIntrinsics[] = { + // name retOrd retType argOrder argType stage mask + // ----------------------------------------------------------------------------------------------- + { "abort", nullptr, nullptr, "-", "-", EShLangAll, false }, + { "abs", nullptr, nullptr, "SVM", "DFUI", EShLangAll, false }, + { "acos", nullptr, nullptr, "SVM", "F", EShLangAll, false }, + { "all", "S", "B", "SVM", "BFIU", EShLangAll, false }, + { "AllMemoryBarrier", nullptr, nullptr, "-", "-", EShLangCS, false }, + { "AllMemoryBarrierWithGroupSync", nullptr, nullptr, "-", "-", EShLangCS, false }, + { "any", "S", "B", "SVM", "BFIU", EShLangAll, false }, + { "asdouble", "S", "D", "S,", "UI,", EShLangAll, false }, + { "asdouble", "V2", "D", "V2,", "UI,", EShLangAll, false }, + { "asfloat", nullptr, "F", "SVM", "BFIU", EShLangAll, false }, + { "asin", nullptr, nullptr, "SVM", "F", EShLangAll, false }, + { "asint", nullptr, "I", "SVM", "FU", EShLangAll, false }, + { "asuint", nullptr, "U", "SVM", "FU", EShLangAll, false }, + { "atan", nullptr, nullptr, "SVM", "F", EShLangAll, false }, + { "atan2", nullptr, nullptr, "SVM,", "F,", EShLangAll, false }, + { "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 }, + { "cos", nullptr, nullptr, "SVM", "F", EShLangAll, false }, + { "cosh", nullptr, nullptr, "SVM", "F", EShLangAll, false }, + { "countbits", nullptr, nullptr, "SV", "UI", EShLangAll, false }, + { "cross", nullptr, nullptr, "V3,", "F,", EShLangAll, false }, + { "D3DCOLORtoUBYTE4", "V4", "I", "V4", "F", EShLangAll, false }, + { "ddx", nullptr, nullptr, "SVM", "F", EShLangPS, false }, + { "ddx_coarse", nullptr, nullptr, "SVM", "F", EShLangPS, false }, + { "ddx_fine", nullptr, nullptr, "SVM", "F", EShLangPS, false }, + { "ddy", nullptr, nullptr, "SVM", "F", EShLangPS, false }, + { "ddy_coarse", nullptr, nullptr, "SVM", "F", EShLangPS, false }, + { "ddy_fine", nullptr, nullptr, "SVM", "F", EShLangPS, false }, + { "degrees", nullptr, nullptr, "SVM", "F", EShLangAll, false }, + { "determinant", "S", "F", "M", "F", EShLangAll, false }, + { "DeviceMemoryBarrier", nullptr, nullptr, "-", "-", EShLangPSCS, false }, + { "DeviceMemoryBarrierWithGroupSync", nullptr, nullptr, "-", "-", EShLangCS, false }, + { "distance", "S", "F", "V,", "F,", EShLangAll, false }, + { "dot", "S", nullptr, "SV,", "FI,", EShLangAll, false }, + { "dst", nullptr, nullptr, "V4,", "F,", EShLangAll, false }, + // { "errorf", "-", "-", "", "", EShLangAll, false }, TODO: varargs + { "EvaluateAttributeAtCentroid", nullptr, nullptr, "SVM", "F", EShLangPS, false }, + { "EvaluateAttributeAtSample", nullptr, nullptr, "SVM,S", "F,U", EShLangPS, false }, + { "EvaluateAttributeSnapped", nullptr, nullptr, "SVM,V2", "F,I", EShLangPS, false }, + { "exp", nullptr, nullptr, "SVM", "F", EShLangAll, false }, + { "exp2", nullptr, nullptr, "SVM", "F", EShLangAll, false }, + { "f16tof32", nullptr, "F", "SV", "U", EShLangAll, false }, + { "f32tof16", nullptr, "U", "SV", "F", EShLangAll, false }, + { "faceforward", nullptr, nullptr, "V,,", "F,,", EShLangAll, false }, + { "firstbithigh", nullptr, nullptr, "SV", "UI", EShLangAll, false }, + { "firstbitlow", nullptr, nullptr, "SV", "UI", EShLangAll, false }, + { "floor", nullptr, nullptr, "SVM", "F", EShLangAll, false }, + { "fma", nullptr, nullptr, "SVM,,", "D,,", EShLangAll, false }, + { "fmod", nullptr, nullptr, "SVM,", "F,", EShLangAll, false }, + { "frac", nullptr, nullptr, "SVM", "F", EShLangAll, false }, + { "frexp", nullptr, nullptr, "SVM,", "F,", EShLangAll, false }, + { "fwidth", nullptr, nullptr, "SVM", "F", EShLangPS, false }, + { "GetRenderTargetSampleCount", "S", "U", "-", "-", EShLangAll, false }, + { "GetRenderTargetSamplePosition", "V2", "F", "V1", "I", EShLangAll, false }, + { "GroupMemoryBarrier", nullptr, nullptr, "-", "-", EShLangCS, false }, + { "GroupMemoryBarrierWithGroupSync", nullptr, nullptr, "-", "-", EShLangCS, false }, + { "InterlockedAdd", "-", "-", "SVM,,>", "UI,,", EShLangPSCS, false }, + { "InterlockedAdd", "-", "-", "SVM,", "UI,", EShLangPSCS, false }, + { "InterlockedAnd", "-", "-", "SVM,,>", "UI,,", EShLangPSCS, false }, + { "InterlockedAnd", "-", "-", "SVM,", "UI,", EShLangPSCS, false }, + { "InterlockedCompareExchange", "-", "-", "SVM,,,>", "UI,,,", EShLangPSCS, false }, + { "InterlockedCompareStore", "-", "-", "SVM,,", "UI,,", EShLangPSCS, false }, + { "InterlockedExchange", "-", "-", "SVM,,>", "UI,,", EShLangPSCS, false }, + { "InterlockedMax", "-", "-", "SVM,,>", "UI,,", EShLangPSCS, false }, + { "InterlockedMax", "-", "-", "SVM,", "UI,", EShLangPSCS, false }, + { "InterlockedMin", "-", "-", "SVM,,>", "UI,,", EShLangPSCS, false }, + { "InterlockedMin", "-", "-", "SVM,", "UI,", EShLangPSCS, false }, + { "InterlockedOr", "-", "-", "SVM,,>", "UI,,", EShLangPSCS, false }, + { "InterlockedOr", "-", "-", "SVM,", "UI,", EShLangPSCS, false }, + { "InterlockedXor", "-", "-", "SVM,,>", "UI,,", EShLangPSCS, false }, + { "InterlockedXor", "-", "-", "SVM,", "UI,", EShLangPSCS, false }, + { "isfinite", nullptr, "B" , "SVM", "F", EShLangAll, false }, + { "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 }, + { "lerp", nullptr, nullptr, "VM,,", "F,,", EShLangAll, false }, + { "lerp", nullptr, nullptr, "SVM,,S", "F,,", EShLangAll, false }, + { "lit", "V4", "F", "S,,", "F,,", EShLangAll, false }, + { "log", nullptr, nullptr, "SVM", "F", EShLangAll, false }, + { "log10", nullptr, nullptr, "SVM", "F", EShLangAll, false }, + { "log2", nullptr, nullptr, "SVM", "F", EShLangAll, false }, + { "mad", nullptr, nullptr, "SVM,,", "DFUI,,", EShLangAll, false }, + { "max", nullptr, nullptr, "SVM,", "FIU,", EShLangAll, false }, + { "min", nullptr, nullptr, "SVM,", "FIU,", EShLangAll, false }, + { "modf", nullptr, nullptr, "SVM,>", "FIU,", EShLangAll, false }, + { "msad4", "V4", "U", "S,V2,V4", "U,,", EShLangAll, false }, + { "mul", "S", nullptr, "S,S", "FI,", EShLangAll, false }, + { "mul", "V", nullptr, "S,V", "FI,", EShLangAll, false }, + { "mul", "M", nullptr, "S,M", "FI,", EShLangAll, false }, + { "mul", "V", nullptr, "V,S", "FI,", EShLangAll, false }, + { "mul", "S", nullptr, "V,V", "FI,", EShLangAll, false }, + { "mul", "M", nullptr, "M,S", "FI,", EShLangAll, false }, + // mat*mat form of mul is handled in createMatTimesMat() + { "noise", "S", "F", "V", "F", EShLangPS, false }, + { "normalize", nullptr, nullptr, "V", "F", EShLangAll, false }, + { "pow", nullptr, nullptr, "SVM,", "F,", EShLangAll, false }, + // { "printf", "-", "-", "", "", EShLangAll, false }, TODO: varargs + { "Process2DQuadTessFactorsAvg", "-", "-", "V4,V2,>V4,>V2,", "F,,,,", EShLangHS, false }, + { "Process2DQuadTessFactorsMax", "-", "-", "V4,V2,>V4,>V2,", "F,,,,", EShLangHS, false }, + { "Process2DQuadTessFactorsMin", "-", "-", "V4,V2,>V4,>V2,", "F,,,,", EShLangHS, false }, + { "ProcessIsolineTessFactors", "-", "-", "S,,>,>", "F,,,", EShLangHS, false }, + { "ProcessQuadTessFactorsAvg", "-", "-", "V4,S,>V4,>V2,", "F,,,,", EShLangHS, false }, + { "ProcessQuadTessFactorsMax", "-", "-", "V4,S,>V4,>V2,", "F,,,,", EShLangHS, false }, + { "ProcessQuadTessFactorsMin", "-", "-", "V4,S,>V4,>V2,", "F,,,,", EShLangHS, false }, + { "ProcessTriTessFactorsAvg", "-", "-", "V3,S,>V3,>S,", "F,,,,", EShLangHS, false }, + { "ProcessTriTessFactorsMax", "-", "-", "V3,S,>V3,>S,", "F,,,,", EShLangHS, false }, + { "ProcessTriTessFactorsMin", "-", "-", "V3,S,>V3,>S,", "F,,,,", EShLangHS, false }, + { "radians", nullptr, nullptr, "SVM", "F", EShLangAll, false }, + { "rcp", nullptr, nullptr, "SVM", "FD", EShLangAll, false }, + { "reflect", nullptr, nullptr, "V,", "F,", EShLangAll, false }, + { "refract", nullptr, nullptr, "V,V,S", "F,,", EShLangAll, false }, + { "reversebits", nullptr, nullptr, "SV", "UI", EShLangAll, false }, + { "round", nullptr, nullptr, "SVM", "F", EShLangAll, false }, + { "rsqrt", nullptr, nullptr, "SVM", "F", EShLangAll, false }, + { "saturate", nullptr, nullptr , "SVM", "F", EShLangAll, false }, + { "sign", nullptr, nullptr, "SVM", "FI", EShLangAll, false }, + { "sin", nullptr, nullptr, "SVM", "F", EShLangAll, false }, + { "sincos", "-", "-", "SVM,>,>", "F,,", EShLangAll, false }, + { "sinh", nullptr, nullptr, "SVM", "F", EShLangAll, false }, + { "smoothstep", nullptr, nullptr, "SVM,,", "F,,", EShLangAll, false }, + { "sqrt", nullptr, nullptr, "SVM", "F", EShLangAll, false }, + { "step", nullptr, nullptr, "SVM,", "F,", EShLangAll, false }, + { "tan", nullptr, nullptr, "SVM", "F", EShLangAll, false }, + { "tanh", nullptr, nullptr, "SVM", "F", EShLangAll, false }, + { "tex1D", "V4", "F", "V1,S", "S,F", EShLangPS, false }, + { "tex1D", "V4", "F", "V1,S,V1,", "S,F,,", EShLangPS, false }, + { "tex1Dbias", "V4", "F", "V1,V4", "S,F", EShLangPS, false }, + { "tex1Dgrad", "V4", "F", "V1,,,", "S,F,,", EShLangPS, false }, + { "tex1Dlod", "V4", "F", "V1,V4", "S,F", EShLangPS, false }, + { "tex1Dproj", "V4", "F", "V1,V4", "S,F", EShLangPS, false }, + { "tex2D", "V4", "F", "V2,", "S,F", EShLangPS, false }, + { "tex2D", "V4", "F", "V2,,,", "S,F,,", EShLangPS, false }, + { "tex2Dbias", "V4", "F", "V2,V4", "S,F", EShLangPS, false }, + { "tex2Dgrad", "V4", "F", "V2,,,", "S,F,,", EShLangPS, false }, + { "tex2Dlod", "V4", "F", "V2,V4", "S,F", EShLangPS, false }, + { "tex2Dproj", "V4", "F", "V2,V4", "S,F", EShLangPS, false }, + { "tex3D", "V4", "F", "V3,", "S,F", EShLangPS, false }, + { "tex3D", "V4", "F", "V3,,,", "S,F,,", EShLangPS, false }, + { "tex3Dbias", "V4", "F", "V3,V4", "S,F", EShLangPS, false }, + { "tex3Dgrad", "V4", "F", "V3,,,", "S,F,,", EShLangPS, false }, + { "tex3Dlod", "V4", "F", "V3,V4", "S,F", EShLangPS, false }, + { "tex3Dproj", "V4", "F", "V3,V4", "S,F", EShLangPS, false }, + { "texCUBE", "V4", "F", "V4,V3", "S,F", EShLangPS, false }, + { "texCUBE", "V4", "F", "V4,V3,,", "S,F,,", EShLangPS, false }, + { "texCUBEbias", "V4", "F", "V4,", "S,F", EShLangPS, false }, + { "texCUBEgrad", "V4", "F", "V4,V3,,", "S,F,,", EShLangPS, false }, + { "texCUBElod", "V4", "F", "V4,", "S,F", EShLangPS, false }, + { "texCUBEproj", "V4", "F", "V4,", "S,F", EShLangPS, false }, + { "transpose", "^M", nullptr, "M", "FUIB", EShLangAll, false }, + { "trunc", nullptr, nullptr, "SVM", "F", EShLangAll, false }, + + // Texture object methods. Return type can be overridden by shader declaration. + // !O = no offset, O = offset + { "Sample", /*!O*/ "V4", nullptr, "%@,S,V", "FIU,S,F", EShLangPS, true }, + { "Sample", /* O*/ "V4", nullptr, "%@,S,V,", "FIU,S,F,I", EShLangPS, true }, + + { "SampleBias", /*!O*/ "V4", nullptr, "%@,S,V,S", "FIU,S,F,", EShLangPS, true }, + { "SampleBias", /* O*/ "V4", nullptr, "%@,S,V,S,V", "FIU,S,F,,I", EShLangPS, true }, + + // TODO: FXC accepts int/uint samplers here. unclear what that means. + { "SampleCmp", /*!O*/ "S", "F", "%@,S,V,S", "FIU,s,F,", EShLangPS, true }, + { "SampleCmp", /* O*/ "S", "F", "%@,S,V,S,V", "FIU,s,F,,I", EShLangPS, true }, + + // TODO: FXC accepts int/uint samplers here. unclear what that means. + { "SampleCmpLevelZero", /*!O*/ "S", "F", "%@,S,V,S", "FIU,s,F,F", EShLangPS, true }, + { "SampleCmpLevelZero", /* O*/ "S", "F", "%@,S,V,S,V", "FIU,s,F,F,I", EShLangPS, true }, + + { "SampleGrad", /*!O*/ "V4", nullptr, "%@,S,V,,", "FIU,S,F,,", EShLangAll, true }, + { "SampleGrad", /* O*/ "V4", nullptr, "%@,S,V,,,", "FIU,S,F,,,I", EShLangAll, true }, + + { "SampleLevel", /*!O*/ "V4", nullptr, "%@,S,V,S", "FIU,S,F,", EShLangAll, true }, + { "SampleLevel", /* O*/ "V4", nullptr, "%@,S,V,S,V", "FIU,S,F,,I", EShLangAll, true }, + + { "Load", /*!O*/ "V4", nullptr, "%@,V", "FIU,I", EShLangAll, true }, + { "Load", /* O*/ "V4", nullptr, "%@,V,V", "FIU,I,I", EShLangAll, true }, + { "Load", /* +sampleidex*/ "V4", nullptr, "$&,V,S", "FIU,I,I", EShLangAll, true }, + { "Load", /* +samplindex, offset*/ "V4", nullptr, "$&,V,S,V", "FIU,I,I,I", EShLangAll, true }, + + // RWTexture loads + { "Load", "V4", nullptr, "!#,V", "FIU,I", EShLangAll, true }, + // (RW)Buffer loads + { "Load", "V4", nullptr, "~*1,V", "FIU,I", EShLangAll, true }, + + { "Gather", /*!O*/ "V4", nullptr, "%@,S,V", "FIU,S,F", EShLangAll, true }, + { "Gather", /* O*/ "V4", nullptr, "%@,S,V,V", "FIU,S,F,I", EShLangAll, true }, + + { "CalculateLevelOfDetail", "S", "F", "%@,S,V", "FUI,S,F", EShLangPS, true }, + { "CalculateLevelOfDetailUnclamped", "S", "F", "%@,S,V", "FUI,S,F", EShLangPS, true }, + + { "GetSamplePosition", "V2", "F", "$&2,S", "FUI,I", EShLangVSPSGS,true }, + + // + // UINT Width + // UINT MipLevel, UINT Width, UINT NumberOfLevels + { "GetDimensions", /* 1D */ "-", "-", "%!~1,>S", "FUI,U", EShLangAll, true }, + { "GetDimensions", /* 1D */ "-", "-", "%!~1,>S", "FUI,F", EShLangAll, true }, + { "GetDimensions", /* 1D */ "-", "-", "%1,S,>S,", "FUI,U,,", EShLangAll, true }, + { "GetDimensions", /* 1D */ "-", "-", "%1,S,>S,", "FUI,U,F,", EShLangAll, true }, + + // UINT Width, UINT Elements + // UINT MipLevel, UINT Width, UINT Elements, UINT NumberOfLevels + { "GetDimensions", /* 1DArray */ "-", "-", "@#1,>S,", "FUI,U,", EShLangAll, true }, + { "GetDimensions", /* 1DArray */ "-", "-", "@#1,>S,", "FUI,F,", EShLangAll, true }, + { "GetDimensions", /* 1DArray */ "-", "-", "@1,S,>S,,", "FUI,U,,,", EShLangAll, true }, + { "GetDimensions", /* 1DArray */ "-", "-", "@1,S,>S,,", "FUI,U,F,,", EShLangAll, true }, + + // UINT Width, UINT Height + // UINT MipLevel, UINT Width, UINT Height, UINT NumberOfLevels + { "GetDimensions", /* 2D */ "-", "-", "%!2,>S,", "FUI,U,", EShLangAll, true }, + { "GetDimensions", /* 2D */ "-", "-", "%!2,>S,", "FUI,F,", EShLangAll, true }, + { "GetDimensions", /* 2D */ "-", "-", "%2,S,>S,,", "FUI,U,,,", EShLangAll, true }, + { "GetDimensions", /* 2D */ "-", "-", "%2,S,>S,,", "FUI,U,F,,", EShLangAll, true }, + + // UINT Width, UINT Height, UINT Elements + // UINT MipLevel, UINT Width, UINT Height, UINT Elements, UINT NumberOfLevels + { "GetDimensions", /* 2DArray */ "-", "-", "@#2,>S,,", "FUI,U,,", EShLangAll, true }, + { "GetDimensions", /* 2DArray */ "-", "-", "@#2,>S,,", "FUI,F,F,F", EShLangAll, true }, + { "GetDimensions", /* 2DArray */ "-", "-", "@2,S,>S,,,", "FUI,U,,,,", EShLangAll, true }, + { "GetDimensions", /* 2DArray */ "-", "-", "@2,S,>S,,,", "FUI,U,F,,,", EShLangAll, true }, + + // UINT Width, UINT Height, UINT Depth + // UINT MipLevel, UINT Width, UINT Height, UINT Depth, UINT NumberOfLevels + { "GetDimensions", /* 3D */ "-", "-", "%!3,>S,,", "FUI,U,,", EShLangAll, true }, + { "GetDimensions", /* 3D */ "-", "-", "%!3,>S,,", "FUI,F,,", EShLangAll, true }, + { "GetDimensions", /* 3D */ "-", "-", "%3,S,>S,,,", "FUI,U,,,,", EShLangAll, true }, + { "GetDimensions", /* 3D */ "-", "-", "%3,S,>S,,,", "FUI,U,F,,,", EShLangAll, true }, + + // UINT Width, UINT Height + // UINT MipLevel, UINT Width, UINT Height, UINT NumberOfLevels + { "GetDimensions", /* Cube */ "-", "-", "%4,>S,", "FUI,U,", EShLangAll, true }, + { "GetDimensions", /* Cube */ "-", "-", "%4,>S,", "FUI,F,", EShLangAll, true }, + { "GetDimensions", /* Cube */ "-", "-", "%4,S,>S,,", "FUI,U,,,", EShLangAll, true }, + { "GetDimensions", /* Cube */ "-", "-", "%4,S,>S,,", "FUI,U,F,,", EShLangAll, true }, + + // UINT Width, UINT Height, UINT Elements + // UINT MipLevel, UINT Width, UINT Height, UINT Elements, UINT NumberOfLevels + { "GetDimensions", /* CubeArray */ "-", "-", "@4,>S,,", "FUI,U,,", EShLangAll, true }, + { "GetDimensions", /* CubeArray */ "-", "-", "@4,>S,,", "FUI,F,,", EShLangAll, true }, + { "GetDimensions", /* CubeArray */ "-", "-", "@4,S,>S,,,", "FUI,U,,,,", EShLangAll, true }, + { "GetDimensions", /* CubeArray */ "-", "-", "@4,S,>S,,,", "FUI,U,F,,,", EShLangAll, true }, + + // UINT Width, UINT Height, UINT Samples + // UINT Width, UINT Height, UINT Elements, UINT Samples + { "GetDimensions", /* 2DMS */ "-", "-", "$2,>S,,", "FUI,U,,", EShLangAll, true }, + { "GetDimensions", /* 2DMS */ "-", "-", "$2,>S,,", "FUI,U,,", EShLangAll, true }, + { "GetDimensions", /* 2DMSArray */ "-", "-", "&2,>S,,,", "FUI,U,,,", EShLangAll, true }, + { "GetDimensions", /* 2DMSArray */ "-", "-", "&2,>S,,,", "FUI,U,,,", EShLangAll, true }, + + // SM5 texture methods + { "GatherRed", /*!O*/ "V4", nullptr, "%@,S,V", "FIU,S,F", EShLangAll, true }, + { "GatherRed", /* O*/ "V4", nullptr, "%@,S,V,", "FIU,S,F,I", EShLangAll, true }, + { "GatherRed", /* O, status*/ "V4", nullptr, "%@,S,V,,>S", "FIU,S,F,I,U", EShLangAll, true }, + { "GatherRed", /* O-4 */ "V4", nullptr, "%@,S,V,,,,", "FIU,S,F,I,,,", EShLangAll, true }, + { "GatherRed", /* O-4, status */"V4", nullptr, "%@,S,V,,,,,S", "FIU,S,F,I,,,,U", EShLangAll, true }, + + { "GatherGreen", /*!O*/ "V4", nullptr, "%@,S,V", "FIU,S,F", EShLangAll, true }, + { "GatherGreen", /* O*/ "V4", nullptr, "%@,S,V,", "FIU,S,F,I", EShLangAll, true }, + { "GatherGreen", /* O, status*/ "V4", nullptr, "%@,S,V,,>S", "FIU,S,F,I,U", EShLangAll, true }, + { "GatherGreen", /* O-4 */ "V4", nullptr, "%@,S,V,,,,", "FIU,S,F,I,,,", EShLangAll, true }, + { "GatherGreen", /* O-4, status */"V4", nullptr, "%@,S,V,,,,,S", "FIU,S,F,I,,,,U", EShLangAll, true }, + + { "GatherBlue", /*!O*/ "V4", nullptr, "%@,S,V", "FIU,S,F", EShLangAll, true }, + { "GatherBlue", /* O*/ "V4", nullptr, "%@,S,V,", "FIU,S,F,I", EShLangAll, true }, + { "GatherBlue", /* O, status*/ "V4", nullptr, "%@,S,V,,>S", "FIU,S,F,I,U", EShLangAll, true }, + { "GatherBlue", /* O-4 */ "V4", nullptr, "%@,S,V,,,,", "FIU,S,F,I,,,", EShLangAll, true }, + { "GatherBlue", /* O-4, status */"V4", nullptr, "%@,S,V,,,,,S", "FIU,S,F,I,,,,U", EShLangAll, true }, + + { "GatherAlpha", /*!O*/ "V4", nullptr, "%@,S,V", "FIU,S,F", EShLangAll, true }, + { "GatherAlpha", /* O*/ "V4", nullptr, "%@,S,V,", "FIU,S,F,I", EShLangAll, true }, + { "GatherAlpha", /* O, status*/ "V4", nullptr, "%@,S,V,,>S", "FIU,S,F,I,U", EShLangAll, true }, + { "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 }, + + { "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 }, + { "GatherCmpRed", /* O-4 */ "V4", nullptr, "%@,S,V,S,V,,,", "FIU,s,F,,I,,,", EShLangAll, true }, + { "GatherCmpRed", /* O-4, status */"V4", nullptr, "%@,S,V,S,V,,V,S","FIU,s,F,,I,,,,U",EShLangAll, true }, + + { "GatherCmpGreen", /*!O*/ "V4", nullptr, "%@,S,V,S", "FIU,s,F,", EShLangAll, true }, + { "GatherCmpGreen", /* O*/ "V4", nullptr, "%@,S,V,S,V", "FIU,s,F,,I", EShLangAll, true }, + { "GatherCmpGreen", /* O, status*/ "V4", nullptr, "%@,S,V,S,V,>S", "FIU,s,F,,I,U", EShLangAll, true }, + { "GatherCmpGreen", /* O-4 */ "V4", nullptr, "%@,S,V,S,V,,,", "FIU,s,F,,I,,,", EShLangAll, true }, + { "GatherCmpGreen", /* O-4, status */"V4", nullptr, "%@,S,V,S,V,,,,S","FIU,s,F,,I,,,,U",EShLangAll, true }, + + { "GatherCmpBlue", /*!O*/ "V4", nullptr, "%@,S,V,S", "FIU,s,F,", EShLangAll, true }, + { "GatherCmpBlue", /* O*/ "V4", nullptr, "%@,S,V,S,V", "FIU,s,F,,I", EShLangAll, true }, + { "GatherCmpBlue", /* O, status*/ "V4", nullptr, "%@,S,V,S,V,>S", "FIU,s,F,,I,U", EShLangAll, true }, + { "GatherCmpBlue", /* O-4 */ "V4", nullptr, "%@,S,V,S,V,,,", "FIU,s,F,,I,,,", EShLangAll, true }, + { "GatherCmpBlue", /* O-4, status */"V4", nullptr, "%@,S,V,S,V,,,,S","FIU,s,F,,I,,,,U",EShLangAll, true }, + + { "GatherCmpAlpha", /*!O*/ "V4", nullptr, "%@,S,V,S", "FIU,s,F,", EShLangAll, true }, + { "GatherCmpAlpha", /* O*/ "V4", nullptr, "%@,S,V,S,V", "FIU,s,F,,I", EShLangAll, true }, + { "GatherCmpAlpha", /* O, status*/ "V4", nullptr, "%@,S,V,S,V,>S", "FIU,s,F,,I,U", EShLangAll, true }, + { "GatherCmpAlpha", /* O-4 */ "V4", nullptr, "%@,S,V,S,V,,,", "FIU,s,F,,I,,,", EShLangAll, true }, + { "GatherCmpAlpha", /* O-4, status */"V4", nullptr, "%@,S,V,S,V,,,,S","FIU,s,F,,I,,,,U",EShLangAll, true }, + + // geometry methods + { "Append", "-", "-", "-", "-", EShLangGS , true }, + { "RestartStrip", "-", "-", "-", "-", EShLangGS , true }, + + // Methods for structurebuffers. TODO: wildcard type matching. + { "Load", nullptr, nullptr, "-", "-", EShLangAll, true }, + { "Load2", nullptr, nullptr, "-", "-", EShLangAll, true }, + { "Load3", nullptr, nullptr, "-", "-", EShLangAll, true }, + { "Load4", nullptr, nullptr, "-", "-", EShLangAll, true }, + { "Store", nullptr, nullptr, "-", "-", EShLangAll, true }, + { "Store2", nullptr, nullptr, "-", "-", EShLangAll, true }, + { "Store3", nullptr, nullptr, "-", "-", EShLangAll, true }, + { "Store4", nullptr, nullptr, "-", "-", EShLangAll, true }, + { "GetDimensions", nullptr, nullptr, "-", "-", EShLangAll, true }, + { "InterlockedAdd", nullptr, nullptr, "-", "-", EShLangAll, true }, + { "InterlockedAnd", nullptr, nullptr, "-", "-", EShLangAll, true }, + { "InterlockedCompareExchange", nullptr, nullptr, "-", "-", EShLangAll, true }, + { "InterlockedCompareStore", nullptr, nullptr, "-", "-", EShLangAll, true }, + { "InterlockedExchange", nullptr, nullptr, "-", "-", EShLangAll, true }, + { "InterlockedMax", nullptr, nullptr, "-", "-", EShLangAll, true }, + { "InterlockedMin", nullptr, nullptr, "-", "-", EShLangAll, true }, + { "InterlockedOr", nullptr, nullptr, "-", "-", EShLangAll, true }, + { "InterlockedXor", nullptr, nullptr, "-", "-", EShLangAll, 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 }, + }; + + // Create prototypes for the intrinsics. TODO: Avoid ranged based for until all compilers can handle it. + for (int icount = 0; hlslIntrinsics[icount].name; ++icount) { + const auto& intrinsic = hlslIntrinsics[icount]; + + for (int stage = 0; stage < EShLangCount; ++stage) { // for each stage... + if ((intrinsic.stage & (1< 0 ? std::min(dim0, 3) : dim0; + + s.append(arg > 0 ? ", ": ""); // comma separator if needed + + const char* orderBegin = nthArgOrder; + nthArgOrder = IoParam(s, nthArgOrder); + + // Comma means use the previous argument order and type. + HandleRepeatArg(nthArgOrder, prevArgOrder, orderBegin); + HandleRepeatArg(nthArgType, prevArgType, nthArgType); + + // In case the repeated arg has its own I/O marker + nthArgOrder = IoParam(s, nthArgOrder); + + // arrayed textures have one extra coordinate dimension, except for + // the CalculateLevelOfDetail family. + if (isArrayed && arg == coordArg && !NoArrayCoord(intrinsic.name)) + argDim0++; + + // Some texture methods use an addition arg dimension to hold mip + if (arg == coordArg && mipInCoord) + argDim0++; + + // For textures, the 1D case isn't a 1-vector, but a scalar. + if (isTexture && argDim0 == 1 && arg > 0 && *nthArgOrder == 'V') + nthArgOrder = "S"; + + AppendTypeName(s, nthArgOrder, nthArgType, argDim0, dim1); // Add arguments + } + + s.append(");\n"); // close paren and trailing semicolon + } // dim 1 loop + } // dim 0 loop + } // arg type loop + + // skip over special characters + if (isTexture && isalpha(argOrder[1])) + ++argOrder; + if (isdigit(argOrder[1])) + ++argOrder; + } // arg order loop + + if (intrinsic.stage == EShLangAll) // common builtins are only added once. + break; + } + } + + createMatTimesMat(); // handle this case separately, for convenience + + // printf("Common:\n%s\n", getCommonString().c_str()); + // printf("Frag:\n%s\n", getStageString(EShLangFragment).c_str()); + // printf("Vertex:\n%s\n", getStageString(EShLangVertex).c_str()); + // printf("Geo:\n%s\n", getStageString(EShLangGeometry).c_str()); + // printf("TessCtrl:\n%s\n", getStageString(EShLangTessControl).c_str()); + // printf("TessEval:\n%s\n", getStageString(EShLangTessEvaluation).c_str()); + // printf("Compute:\n%s\n", getStageString(EShLangCompute).c_str()); +} + +// +// Add context-dependent built-in functions and variables that are present +// for the given version and profile. All the results are put into just the +// commonBuiltins, because it is called for just a specific stage. So, +// add stage-specific entries to the commonBuiltins, and only if that stage +// was requested. +// +void TBuiltInParseablesHlsl::initialize(const TBuiltInResource& /*resources*/, int /*version*/, EProfile /*profile*/, + const SpvVersion& /*spvVersion*/, EShLanguage /*language*/) +{ +} + +// +// Finish adding/processing context-independent built-in symbols. +// 1) Programmatically add symbols that could not be added by simple text strings above. +// 2) Map built-in functions to operators, for those that will turn into an operation node +// instead of remaining a function call. +// 3) Tag extension-related symbols added to their base version with their extensions, so +// that if an early version has the extension turned off, there is an error reported on use. +// +void TBuiltInParseablesHlsl::identifyBuiltIns(int /*version*/, EProfile /*profile*/, const SpvVersion& /*spvVersion*/, EShLanguage /*language*/, + TSymbolTable& symbolTable) +{ + // symbolTable.relateToOperator("abort", EOpAbort); + symbolTable.relateToOperator("abs", EOpAbs); + symbolTable.relateToOperator("acos", EOpAcos); + symbolTable.relateToOperator("all", EOpAll); + symbolTable.relateToOperator("AllMemoryBarrier", EOpMemoryBarrier); + symbolTable.relateToOperator("AllMemoryBarrierWithGroupSync", EOpAllMemoryBarrierWithGroupSync); + symbolTable.relateToOperator("any", EOpAny); + symbolTable.relateToOperator("asdouble", EOpAsDouble); + symbolTable.relateToOperator("asfloat", EOpIntBitsToFloat); + symbolTable.relateToOperator("asin", EOpAsin); + symbolTable.relateToOperator("asint", EOpFloatBitsToInt); + symbolTable.relateToOperator("asuint", EOpFloatBitsToUint); + symbolTable.relateToOperator("atan", EOpAtan); + symbolTable.relateToOperator("atan2", EOpAtan); + symbolTable.relateToOperator("ceil", EOpCeil); + // symbolTable.relateToOperator("CheckAccessFullyMapped"); + symbolTable.relateToOperator("clamp", EOpClamp); + symbolTable.relateToOperator("clip", EOpClip); + symbolTable.relateToOperator("cos", EOpCos); + symbolTable.relateToOperator("cosh", EOpCosh); + symbolTable.relateToOperator("countbits", EOpBitCount); + symbolTable.relateToOperator("cross", EOpCross); + symbolTable.relateToOperator("D3DCOLORtoUBYTE4", EOpD3DCOLORtoUBYTE4); + symbolTable.relateToOperator("ddx", EOpDPdx); + symbolTable.relateToOperator("ddx_coarse", EOpDPdxCoarse); + symbolTable.relateToOperator("ddx_fine", EOpDPdxFine); + symbolTable.relateToOperator("ddy", EOpDPdy); + symbolTable.relateToOperator("ddy_coarse", EOpDPdyCoarse); + symbolTable.relateToOperator("ddy_fine", EOpDPdyFine); + symbolTable.relateToOperator("degrees", EOpDegrees); + symbolTable.relateToOperator("determinant", EOpDeterminant); + symbolTable.relateToOperator("DeviceMemoryBarrier", EOpGroupMemoryBarrier); + symbolTable.relateToOperator("DeviceMemoryBarrierWithGroupSync", EOpGroupMemoryBarrierWithGroupSync); // ... + symbolTable.relateToOperator("distance", EOpDistance); + symbolTable.relateToOperator("dot", EOpDot); + symbolTable.relateToOperator("dst", EOpDst); + // symbolTable.relateToOperator("errorf", EOpErrorf); + symbolTable.relateToOperator("EvaluateAttributeAtCentroid", EOpInterpolateAtCentroid); + symbolTable.relateToOperator("EvaluateAttributeAtSample", EOpInterpolateAtSample); + symbolTable.relateToOperator("EvaluateAttributeSnapped", EOpEvaluateAttributeSnapped); + symbolTable.relateToOperator("exp", EOpExp); + symbolTable.relateToOperator("exp2", EOpExp2); + symbolTable.relateToOperator("f16tof32", EOpF16tof32); + symbolTable.relateToOperator("f32tof16", EOpF32tof16); + symbolTable.relateToOperator("faceforward", EOpFaceForward); + symbolTable.relateToOperator("firstbithigh", EOpFindMSB); + symbolTable.relateToOperator("firstbitlow", EOpFindLSB); + symbolTable.relateToOperator("floor", EOpFloor); + symbolTable.relateToOperator("fma", EOpFma); + symbolTable.relateToOperator("fmod", EOpMod); + symbolTable.relateToOperator("frac", EOpFract); + symbolTable.relateToOperator("frexp", EOpFrexp); + symbolTable.relateToOperator("fwidth", EOpFwidth); + // symbolTable.relateToOperator("GetRenderTargetSampleCount"); + // symbolTable.relateToOperator("GetRenderTargetSamplePosition"); + symbolTable.relateToOperator("GroupMemoryBarrier", EOpWorkgroupMemoryBarrier); + symbolTable.relateToOperator("GroupMemoryBarrierWithGroupSync", EOpWorkgroupMemoryBarrierWithGroupSync); + symbolTable.relateToOperator("InterlockedAdd", EOpInterlockedAdd); + symbolTable.relateToOperator("InterlockedAnd", EOpInterlockedAnd); + symbolTable.relateToOperator("InterlockedCompareExchange", EOpInterlockedCompareExchange); + symbolTable.relateToOperator("InterlockedCompareStore", EOpInterlockedCompareStore); + symbolTable.relateToOperator("InterlockedExchange", EOpInterlockedExchange); + symbolTable.relateToOperator("InterlockedMax", EOpInterlockedMax); + symbolTable.relateToOperator("InterlockedMin", EOpInterlockedMin); + symbolTable.relateToOperator("InterlockedOr", EOpInterlockedOr); + symbolTable.relateToOperator("InterlockedXor", EOpInterlockedXor); + symbolTable.relateToOperator("isfinite", EOpIsFinite); + symbolTable.relateToOperator("isinf", EOpIsInf); + symbolTable.relateToOperator("isnan", EOpIsNan); + symbolTable.relateToOperator("ldexp", EOpLdexp); + symbolTable.relateToOperator("length", EOpLength); + symbolTable.relateToOperator("lerp", EOpMix); + symbolTable.relateToOperator("lit", EOpLit); + symbolTable.relateToOperator("log", EOpLog); + symbolTable.relateToOperator("log10", EOpLog10); + symbolTable.relateToOperator("log2", EOpLog2); + symbolTable.relateToOperator("mad", EOpFma); + symbolTable.relateToOperator("max", EOpMax); + symbolTable.relateToOperator("min", EOpMin); + symbolTable.relateToOperator("modf", EOpModf); + // symbolTable.relateToOperator("msad4", EOpMsad4); + symbolTable.relateToOperator("mul", EOpGenMul); + // symbolTable.relateToOperator("noise", EOpNoise); // TODO: check return type + symbolTable.relateToOperator("normalize", EOpNormalize); + symbolTable.relateToOperator("pow", EOpPow); + // symbolTable.relateToOperator("printf", EOpPrintf); + // symbolTable.relateToOperator("Process2DQuadTessFactorsAvg"); + // symbolTable.relateToOperator("Process2DQuadTessFactorsMax"); + // symbolTable.relateToOperator("Process2DQuadTessFactorsMin"); + // symbolTable.relateToOperator("ProcessIsolineTessFactors"); + // symbolTable.relateToOperator("ProcessQuadTessFactorsAvg"); + // symbolTable.relateToOperator("ProcessQuadTessFactorsMax"); + // symbolTable.relateToOperator("ProcessQuadTessFactorsMin"); + // symbolTable.relateToOperator("ProcessTriTessFactorsAvg"); + // symbolTable.relateToOperator("ProcessTriTessFactorsMax"); + // symbolTable.relateToOperator("ProcessTriTessFactorsMin"); + symbolTable.relateToOperator("radians", EOpRadians); + symbolTable.relateToOperator("rcp", EOpRcp); + symbolTable.relateToOperator("reflect", EOpReflect); + symbolTable.relateToOperator("refract", EOpRefract); + symbolTable.relateToOperator("reversebits", EOpBitFieldReverse); + symbolTable.relateToOperator("round", EOpRoundEven); + symbolTable.relateToOperator("rsqrt", EOpInverseSqrt); + symbolTable.relateToOperator("saturate", EOpSaturate); + symbolTable.relateToOperator("sign", EOpSign); + symbolTable.relateToOperator("sin", EOpSin); + symbolTable.relateToOperator("sincos", EOpSinCos); + symbolTable.relateToOperator("sinh", EOpSinh); + symbolTable.relateToOperator("smoothstep", EOpSmoothStep); + symbolTable.relateToOperator("sqrt", EOpSqrt); + symbolTable.relateToOperator("step", EOpStep); + symbolTable.relateToOperator("tan", EOpTan); + symbolTable.relateToOperator("tanh", EOpTanh); + symbolTable.relateToOperator("tex1D", EOpTexture); + symbolTable.relateToOperator("tex1Dbias", EOpTextureBias); + symbolTable.relateToOperator("tex1Dgrad", EOpTextureGrad); + symbolTable.relateToOperator("tex1Dlod", EOpTextureLod); + symbolTable.relateToOperator("tex1Dproj", EOpTextureProj); + symbolTable.relateToOperator("tex2D", EOpTexture); + symbolTable.relateToOperator("tex2Dbias", EOpTextureBias); + symbolTable.relateToOperator("tex2Dgrad", EOpTextureGrad); + symbolTable.relateToOperator("tex2Dlod", EOpTextureLod); + symbolTable.relateToOperator("tex2Dproj", EOpTextureProj); + symbolTable.relateToOperator("tex3D", EOpTexture); + symbolTable.relateToOperator("tex3Dbias", EOpTextureBias); + symbolTable.relateToOperator("tex3Dgrad", EOpTextureGrad); + symbolTable.relateToOperator("tex3Dlod", EOpTextureLod); + symbolTable.relateToOperator("tex3Dproj", EOpTextureProj); + symbolTable.relateToOperator("texCUBE", EOpTexture); + symbolTable.relateToOperator("texCUBEbias", EOpTextureBias); + symbolTable.relateToOperator("texCUBEgrad", EOpTextureGrad); + symbolTable.relateToOperator("texCUBElod", EOpTextureLod); + symbolTable.relateToOperator("texCUBEproj", EOpTextureProj); + symbolTable.relateToOperator("transpose", EOpTranspose); + symbolTable.relateToOperator("trunc", EOpTrunc); + + // Texture methods + symbolTable.relateToOperator(BUILTIN_PREFIX "Sample", EOpMethodSample); + symbolTable.relateToOperator(BUILTIN_PREFIX "SampleBias", EOpMethodSampleBias); + symbolTable.relateToOperator(BUILTIN_PREFIX "SampleCmp", EOpMethodSampleCmp); + symbolTable.relateToOperator(BUILTIN_PREFIX "SampleCmpLevelZero", EOpMethodSampleCmpLevelZero); + symbolTable.relateToOperator(BUILTIN_PREFIX "SampleGrad", EOpMethodSampleGrad); + symbolTable.relateToOperator(BUILTIN_PREFIX "SampleLevel", EOpMethodSampleLevel); + symbolTable.relateToOperator(BUILTIN_PREFIX "Load", EOpMethodLoad); + symbolTable.relateToOperator(BUILTIN_PREFIX "GetDimensions", EOpMethodGetDimensions); + symbolTable.relateToOperator(BUILTIN_PREFIX "GetSamplePosition", EOpMethodGetSamplePosition); + symbolTable.relateToOperator(BUILTIN_PREFIX "Gather", EOpMethodGather); + symbolTable.relateToOperator(BUILTIN_PREFIX "CalculateLevelOfDetail", EOpMethodCalculateLevelOfDetail); + symbolTable.relateToOperator(BUILTIN_PREFIX "CalculateLevelOfDetailUnclamped", EOpMethodCalculateLevelOfDetailUnclamped); + + // Structure buffer methods (excluding associations already made above for texture methods w/ same name) + symbolTable.relateToOperator(BUILTIN_PREFIX "Load2", EOpMethodLoad2); + symbolTable.relateToOperator(BUILTIN_PREFIX "Load3", EOpMethodLoad3); + symbolTable.relateToOperator(BUILTIN_PREFIX "Load4", EOpMethodLoad4); + symbolTable.relateToOperator(BUILTIN_PREFIX "Store", EOpMethodStore); + symbolTable.relateToOperator(BUILTIN_PREFIX "Store2", EOpMethodStore2); + symbolTable.relateToOperator(BUILTIN_PREFIX "Store3", EOpMethodStore3); + symbolTable.relateToOperator(BUILTIN_PREFIX "Store4", EOpMethodStore4); + + symbolTable.relateToOperator(BUILTIN_PREFIX "InterlockedAdd", EOpInterlockedAdd); + symbolTable.relateToOperator(BUILTIN_PREFIX "InterlockedAnd", EOpInterlockedAnd); + symbolTable.relateToOperator(BUILTIN_PREFIX "InterlockedCompareExchange", EOpInterlockedCompareExchange); + symbolTable.relateToOperator(BUILTIN_PREFIX "InterlockedCompareStore", EOpInterlockedCompareStore); + symbolTable.relateToOperator(BUILTIN_PREFIX "InterlockedExchange", EOpInterlockedExchange); + symbolTable.relateToOperator(BUILTIN_PREFIX "InterlockedMax", EOpInterlockedMax); + symbolTable.relateToOperator(BUILTIN_PREFIX "InterlockedMin", EOpInterlockedMin); + symbolTable.relateToOperator(BUILTIN_PREFIX "InterlockedOr", EOpInterlockedOr); + symbolTable.relateToOperator(BUILTIN_PREFIX "InterlockedXor", EOpInterlockedXor); + + // SM5 Texture methods + symbolTable.relateToOperator(BUILTIN_PREFIX "GatherRed", EOpMethodGatherRed); + symbolTable.relateToOperator(BUILTIN_PREFIX "GatherGreen", EOpMethodGatherGreen); + symbolTable.relateToOperator(BUILTIN_PREFIX "GatherBlue", EOpMethodGatherBlue); + symbolTable.relateToOperator(BUILTIN_PREFIX "GatherAlpha", EOpMethodGatherAlpha); + symbolTable.relateToOperator(BUILTIN_PREFIX "GatherCmpRed", EOpMethodGatherCmpRed); + symbolTable.relateToOperator(BUILTIN_PREFIX "GatherCmpGreen", EOpMethodGatherCmpGreen); + symbolTable.relateToOperator(BUILTIN_PREFIX "GatherCmpBlue", EOpMethodGatherCmpBlue); + symbolTable.relateToOperator(BUILTIN_PREFIX "GatherCmpAlpha", EOpMethodGatherCmpAlpha); + + // GS methods + symbolTable.relateToOperator(BUILTIN_PREFIX "Append", EOpMethodAppend); + symbolTable.relateToOperator(BUILTIN_PREFIX "RestartStrip", EOpMethodRestartStrip); +} + +// +// Add context-dependent (resource-specific) built-ins not handled by the above. These +// would be ones that need to be programmatically added because they cannot +// be added by simple text strings. For these, also +// 1) Map built-in functions to operators, for those that will turn into an operation node +// instead of remaining a function call. +// 2) Tag extension-related symbols added to their base version with their extensions, so +// that if an early version has the extension turned off, there is an error reported on use. +// +void TBuiltInParseablesHlsl::identifyBuiltIns(int /*version*/, EProfile /*profile*/, const SpvVersion& /*spvVersion*/, EShLanguage /*language*/, + TSymbolTable& /*symbolTable*/, const TBuiltInResource& /*resources*/) +{ +} + +} // end namespace glslang diff --git a/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslParseables.h b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslParseables.h new file mode 100755 index 0000000..28f424b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslParseables.h @@ -0,0 +1,64 @@ +// +// Copyright (C) 2016 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. +// + +#ifndef _HLSLPARSEABLES_INCLUDED_ +#define _HLSLPARSEABLES_INCLUDED_ + +#include "../glslang/MachineIndependent/Initialize.h" + +namespace glslang { + +// +// This is an HLSL specific derivation of TBuiltInParseables. See comment +// above TBuiltInParseables for details. +// +class TBuiltInParseablesHlsl : public TBuiltInParseables { +public: + POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator()) + TBuiltInParseablesHlsl(); + void initialize(int version, EProfile, const SpvVersion& spvVersion); + void initialize(const TBuiltInResource& resources, int version, EProfile, const SpvVersion& spvVersion, EShLanguage); + + void identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable); + + void identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable, const TBuiltInResource &resources); + +private: + void createMatTimesMat(); +}; + +} // end namespace glslang + +#endif // _HLSLPARSEABLES_INCLUDED_ diff --git a/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslScanContext.cpp b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslScanContext.cpp new file mode 100755 index 0000000..7b0365f --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslScanContext.cpp @@ -0,0 +1,903 @@ +// +// Copyright (C) 2016 Google, Inc. +// Copyright (C) 2016 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 Google, Inc., 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. +// + +// +// HLSL scanning, leveraging the scanning done by the preprocessor. +// + +#include +#include +#include + +#include "../glslang/Include/Types.h" +#include "../glslang/MachineIndependent/SymbolTable.h" +#include "../glslang/MachineIndependent/ParseHelper.h" +#include "hlslScanContext.h" +#include "hlslTokens.h" + +// preprocessor includes +#include "../glslang/MachineIndependent/preprocessor/PpContext.h" +#include "../glslang/MachineIndependent/preprocessor/PpTokens.h" + +namespace { + +struct str_eq +{ + bool operator()(const char* lhs, const char* rhs) const + { + return strcmp(lhs, rhs) == 0; + } +}; + +struct str_hash +{ + size_t operator()(const char* str) const + { + // djb2 + unsigned long hash = 5381; + int c; + + while ((c = *str++) != 0) + hash = ((hash << 5) + hash) + c; + + return hash; + } +}; + +// A single global usable by all threads, by all versions, by all languages. +// After a single process-level initialization, this is read only and thread safe +std::unordered_map* KeywordMap = nullptr; +std::unordered_set* ReservedSet = nullptr; +std::unordered_map* SemanticMap = nullptr; + +}; + +namespace glslang { + +void HlslScanContext::fillInKeywordMap() +{ + if (KeywordMap != nullptr) { + // this is really an error, as this should called only once per process + // but, the only risk is if two threads called simultaneously + return; + } + KeywordMap = new std::unordered_map; + + (*KeywordMap)["static"] = EHTokStatic; + (*KeywordMap)["const"] = EHTokConst; + (*KeywordMap)["unorm"] = EHTokUnorm; + (*KeywordMap)["snorm"] = EHTokSNorm; + (*KeywordMap)["extern"] = EHTokExtern; + (*KeywordMap)["uniform"] = EHTokUniform; + (*KeywordMap)["volatile"] = EHTokVolatile; + (*KeywordMap)["precise"] = EHTokPrecise; + (*KeywordMap)["shared"] = EHTokShared; + (*KeywordMap)["groupshared"] = EHTokGroupShared; + (*KeywordMap)["linear"] = EHTokLinear; + (*KeywordMap)["centroid"] = EHTokCentroid; + (*KeywordMap)["nointerpolation"] = EHTokNointerpolation; + (*KeywordMap)["noperspective"] = EHTokNoperspective; + (*KeywordMap)["sample"] = EHTokSample; + (*KeywordMap)["row_major"] = EHTokRowMajor; + (*KeywordMap)["column_major"] = EHTokColumnMajor; + (*KeywordMap)["packoffset"] = EHTokPackOffset; + (*KeywordMap)["in"] = EHTokIn; + (*KeywordMap)["out"] = EHTokOut; + (*KeywordMap)["inout"] = EHTokInOut; + (*KeywordMap)["layout"] = EHTokLayout; + (*KeywordMap)["globallycoherent"] = EHTokGloballyCoherent; + (*KeywordMap)["inline"] = EHTokInline; + + (*KeywordMap)["point"] = EHTokPoint; + (*KeywordMap)["line"] = EHTokLine; + (*KeywordMap)["triangle"] = EHTokTriangle; + (*KeywordMap)["lineadj"] = EHTokLineAdj; + (*KeywordMap)["triangleadj"] = EHTokTriangleAdj; + + (*KeywordMap)["PointStream"] = EHTokPointStream; + (*KeywordMap)["LineStream"] = EHTokLineStream; + (*KeywordMap)["TriangleStream"] = EHTokTriangleStream; + + (*KeywordMap)["InputPatch"] = EHTokInputPatch; + (*KeywordMap)["OutputPatch"] = EHTokOutputPatch; + + (*KeywordMap)["Buffer"] = EHTokBuffer; + (*KeywordMap)["vector"] = EHTokVector; + (*KeywordMap)["matrix"] = EHTokMatrix; + + (*KeywordMap)["void"] = EHTokVoid; + (*KeywordMap)["string"] = EHTokString; + (*KeywordMap)["bool"] = EHTokBool; + (*KeywordMap)["int"] = EHTokInt; + (*KeywordMap)["uint"] = EHTokUint; + (*KeywordMap)["dword"] = EHTokDword; + (*KeywordMap)["half"] = EHTokHalf; + (*KeywordMap)["float"] = EHTokFloat; + (*KeywordMap)["double"] = EHTokDouble; + (*KeywordMap)["min16float"] = EHTokMin16float; + (*KeywordMap)["min10float"] = EHTokMin10float; + (*KeywordMap)["min16int"] = EHTokMin16int; + (*KeywordMap)["min12int"] = EHTokMin12int; + (*KeywordMap)["min16uint"] = EHTokMin16uint; + + (*KeywordMap)["bool1"] = EHTokBool1; + (*KeywordMap)["bool2"] = EHTokBool2; + (*KeywordMap)["bool3"] = EHTokBool3; + (*KeywordMap)["bool4"] = EHTokBool4; + (*KeywordMap)["float1"] = EHTokFloat1; + (*KeywordMap)["float2"] = EHTokFloat2; + (*KeywordMap)["float3"] = EHTokFloat3; + (*KeywordMap)["float4"] = EHTokFloat4; + (*KeywordMap)["int1"] = EHTokInt1; + (*KeywordMap)["int2"] = EHTokInt2; + (*KeywordMap)["int3"] = EHTokInt3; + (*KeywordMap)["int4"] = EHTokInt4; + (*KeywordMap)["double1"] = EHTokDouble1; + (*KeywordMap)["double2"] = EHTokDouble2; + (*KeywordMap)["double3"] = EHTokDouble3; + (*KeywordMap)["double4"] = EHTokDouble4; + (*KeywordMap)["uint1"] = EHTokUint1; + (*KeywordMap)["uint2"] = EHTokUint2; + (*KeywordMap)["uint3"] = EHTokUint3; + (*KeywordMap)["uint4"] = EHTokUint4; + + (*KeywordMap)["half1"] = EHTokHalf1; + (*KeywordMap)["half2"] = EHTokHalf2; + (*KeywordMap)["half3"] = EHTokHalf3; + (*KeywordMap)["half4"] = EHTokHalf4; + (*KeywordMap)["min16float1"] = EHTokMin16float1; + (*KeywordMap)["min16float2"] = EHTokMin16float2; + (*KeywordMap)["min16float3"] = EHTokMin16float3; + (*KeywordMap)["min16float4"] = EHTokMin16float4; + (*KeywordMap)["min10float1"] = EHTokMin10float1; + (*KeywordMap)["min10float2"] = EHTokMin10float2; + (*KeywordMap)["min10float3"] = EHTokMin10float3; + (*KeywordMap)["min10float4"] = EHTokMin10float4; + (*KeywordMap)["min16int1"] = EHTokMin16int1; + (*KeywordMap)["min16int2"] = EHTokMin16int2; + (*KeywordMap)["min16int3"] = EHTokMin16int3; + (*KeywordMap)["min16int4"] = EHTokMin16int4; + (*KeywordMap)["min12int1"] = EHTokMin12int1; + (*KeywordMap)["min12int2"] = EHTokMin12int2; + (*KeywordMap)["min12int3"] = EHTokMin12int3; + (*KeywordMap)["min12int4"] = EHTokMin12int4; + (*KeywordMap)["min16uint1"] = EHTokMin16uint1; + (*KeywordMap)["min16uint2"] = EHTokMin16uint2; + (*KeywordMap)["min16uint3"] = EHTokMin16uint3; + (*KeywordMap)["min16uint4"] = EHTokMin16uint4; + + (*KeywordMap)["bool1x1"] = EHTokBool1x1; + (*KeywordMap)["bool1x2"] = EHTokBool1x2; + (*KeywordMap)["bool1x3"] = EHTokBool1x3; + (*KeywordMap)["bool1x4"] = EHTokBool1x4; + (*KeywordMap)["bool2x1"] = EHTokBool2x1; + (*KeywordMap)["bool2x2"] = EHTokBool2x2; + (*KeywordMap)["bool2x3"] = EHTokBool2x3; + (*KeywordMap)["bool2x4"] = EHTokBool2x4; + (*KeywordMap)["bool3x1"] = EHTokBool3x1; + (*KeywordMap)["bool3x2"] = EHTokBool3x2; + (*KeywordMap)["bool3x3"] = EHTokBool3x3; + (*KeywordMap)["bool3x4"] = EHTokBool3x4; + (*KeywordMap)["bool4x1"] = EHTokBool4x1; + (*KeywordMap)["bool4x2"] = EHTokBool4x2; + (*KeywordMap)["bool4x3"] = EHTokBool4x3; + (*KeywordMap)["bool4x4"] = EHTokBool4x4; + (*KeywordMap)["int1x1"] = EHTokInt1x1; + (*KeywordMap)["int1x2"] = EHTokInt1x2; + (*KeywordMap)["int1x3"] = EHTokInt1x3; + (*KeywordMap)["int1x4"] = EHTokInt1x4; + (*KeywordMap)["int2x1"] = EHTokInt2x1; + (*KeywordMap)["int2x2"] = EHTokInt2x2; + (*KeywordMap)["int2x3"] = EHTokInt2x3; + (*KeywordMap)["int2x4"] = EHTokInt2x4; + (*KeywordMap)["int3x1"] = EHTokInt3x1; + (*KeywordMap)["int3x2"] = EHTokInt3x2; + (*KeywordMap)["int3x3"] = EHTokInt3x3; + (*KeywordMap)["int3x4"] = EHTokInt3x4; + (*KeywordMap)["int4x1"] = EHTokInt4x1; + (*KeywordMap)["int4x2"] = EHTokInt4x2; + (*KeywordMap)["int4x3"] = EHTokInt4x3; + (*KeywordMap)["int4x4"] = EHTokInt4x4; + (*KeywordMap)["uint1x1"] = EHTokUint1x1; + (*KeywordMap)["uint1x2"] = EHTokUint1x2; + (*KeywordMap)["uint1x3"] = EHTokUint1x3; + (*KeywordMap)["uint1x4"] = EHTokUint1x4; + (*KeywordMap)["uint2x1"] = EHTokUint2x1; + (*KeywordMap)["uint2x2"] = EHTokUint2x2; + (*KeywordMap)["uint2x3"] = EHTokUint2x3; + (*KeywordMap)["uint2x4"] = EHTokUint2x4; + (*KeywordMap)["uint3x1"] = EHTokUint3x1; + (*KeywordMap)["uint3x2"] = EHTokUint3x2; + (*KeywordMap)["uint3x3"] = EHTokUint3x3; + (*KeywordMap)["uint3x4"] = EHTokUint3x4; + (*KeywordMap)["uint4x1"] = EHTokUint4x1; + (*KeywordMap)["uint4x2"] = EHTokUint4x2; + (*KeywordMap)["uint4x3"] = EHTokUint4x3; + (*KeywordMap)["uint4x4"] = EHTokUint4x4; + (*KeywordMap)["bool1x1"] = EHTokBool1x1; + (*KeywordMap)["bool1x2"] = EHTokBool1x2; + (*KeywordMap)["bool1x3"] = EHTokBool1x3; + (*KeywordMap)["bool1x4"] = EHTokBool1x4; + (*KeywordMap)["bool2x1"] = EHTokBool2x1; + (*KeywordMap)["bool2x2"] = EHTokBool2x2; + (*KeywordMap)["bool2x3"] = EHTokBool2x3; + (*KeywordMap)["bool2x4"] = EHTokBool2x4; + (*KeywordMap)["bool3x1"] = EHTokBool3x1; + (*KeywordMap)["bool3x2"] = EHTokBool3x2; + (*KeywordMap)["bool3x3"] = EHTokBool3x3; + (*KeywordMap)["bool3x4"] = EHTokBool3x4; + (*KeywordMap)["bool4x1"] = EHTokBool4x1; + (*KeywordMap)["bool4x2"] = EHTokBool4x2; + (*KeywordMap)["bool4x3"] = EHTokBool4x3; + (*KeywordMap)["bool4x4"] = EHTokBool4x4; + (*KeywordMap)["float1x1"] = EHTokFloat1x1; + (*KeywordMap)["float1x2"] = EHTokFloat1x2; + (*KeywordMap)["float1x3"] = EHTokFloat1x3; + (*KeywordMap)["float1x4"] = EHTokFloat1x4; + (*KeywordMap)["float2x1"] = EHTokFloat2x1; + (*KeywordMap)["float2x2"] = EHTokFloat2x2; + (*KeywordMap)["float2x3"] = EHTokFloat2x3; + (*KeywordMap)["float2x4"] = EHTokFloat2x4; + (*KeywordMap)["float3x1"] = EHTokFloat3x1; + (*KeywordMap)["float3x2"] = EHTokFloat3x2; + (*KeywordMap)["float3x3"] = EHTokFloat3x3; + (*KeywordMap)["float3x4"] = EHTokFloat3x4; + (*KeywordMap)["float4x1"] = EHTokFloat4x1; + (*KeywordMap)["float4x2"] = EHTokFloat4x2; + (*KeywordMap)["float4x3"] = EHTokFloat4x3; + (*KeywordMap)["float4x4"] = EHTokFloat4x4; + (*KeywordMap)["double1x1"] = EHTokDouble1x1; + (*KeywordMap)["double1x2"] = EHTokDouble1x2; + (*KeywordMap)["double1x3"] = EHTokDouble1x3; + (*KeywordMap)["double1x4"] = EHTokDouble1x4; + (*KeywordMap)["double2x1"] = EHTokDouble2x1; + (*KeywordMap)["double2x2"] = EHTokDouble2x2; + (*KeywordMap)["double2x3"] = EHTokDouble2x3; + (*KeywordMap)["double2x4"] = EHTokDouble2x4; + (*KeywordMap)["double3x1"] = EHTokDouble3x1; + (*KeywordMap)["double3x2"] = EHTokDouble3x2; + (*KeywordMap)["double3x3"] = EHTokDouble3x3; + (*KeywordMap)["double3x4"] = EHTokDouble3x4; + (*KeywordMap)["double4x1"] = EHTokDouble4x1; + (*KeywordMap)["double4x2"] = EHTokDouble4x2; + (*KeywordMap)["double4x3"] = EHTokDouble4x3; + (*KeywordMap)["double4x4"] = EHTokDouble4x4; + + (*KeywordMap)["sampler"] = EHTokSampler; + (*KeywordMap)["sampler1D"] = EHTokSampler1d; + (*KeywordMap)["sampler2D"] = EHTokSampler2d; + (*KeywordMap)["sampler3D"] = EHTokSampler3d; + (*KeywordMap)["samplerCube"] = EHTokSamplerCube; + (*KeywordMap)["sampler_state"] = EHTokSamplerState; + (*KeywordMap)["SamplerState"] = EHTokSamplerState; + (*KeywordMap)["SamplerComparisonState"] = EHTokSamplerComparisonState; + (*KeywordMap)["texture"] = EHTokTexture; + (*KeywordMap)["Texture1D"] = EHTokTexture1d; + (*KeywordMap)["Texture1DArray"] = EHTokTexture1darray; + (*KeywordMap)["Texture2D"] = EHTokTexture2d; + (*KeywordMap)["Texture2DArray"] = EHTokTexture2darray; + (*KeywordMap)["Texture3D"] = EHTokTexture3d; + (*KeywordMap)["TextureCube"] = EHTokTextureCube; + (*KeywordMap)["TextureCubeArray"] = EHTokTextureCubearray; + (*KeywordMap)["Texture2DMS"] = EHTokTexture2DMS; + (*KeywordMap)["Texture2DMSArray"] = EHTokTexture2DMSarray; + (*KeywordMap)["RWTexture1D"] = EHTokRWTexture1d; + (*KeywordMap)["RWTexture1DArray"] = EHTokRWTexture1darray; + (*KeywordMap)["RWTexture2D"] = EHTokRWTexture2d; + (*KeywordMap)["RWTexture2DArray"] = EHTokRWTexture2darray; + (*KeywordMap)["RWTexture3D"] = EHTokRWTexture3d; + (*KeywordMap)["RWBuffer"] = EHTokRWBuffer; + + (*KeywordMap)["AppendStructuredBuffer"] = EHTokAppendStructuredBuffer; + (*KeywordMap)["ByteAddressBuffer"] = EHTokByteAddressBuffer; + (*KeywordMap)["ConsumeStructuredBuffer"] = EHTokConsumeStructuredBuffer; + (*KeywordMap)["RWByteAddressBuffer"] = EHTokRWByteAddressBuffer; + (*KeywordMap)["RWStructuredBuffer"] = EHTokRWStructuredBuffer; + (*KeywordMap)["StructuredBuffer"] = EHTokStructuredBuffer; + + (*KeywordMap)["class"] = EHTokClass; + (*KeywordMap)["struct"] = EHTokStruct; + (*KeywordMap)["cbuffer"] = EHTokCBuffer; + (*KeywordMap)["tbuffer"] = EHTokTBuffer; + (*KeywordMap)["typedef"] = EHTokTypedef; + (*KeywordMap)["this"] = EHTokThis; + + (*KeywordMap)["true"] = EHTokBoolConstant; + (*KeywordMap)["false"] = EHTokBoolConstant; + + (*KeywordMap)["for"] = EHTokFor; + (*KeywordMap)["do"] = EHTokDo; + (*KeywordMap)["while"] = EHTokWhile; + (*KeywordMap)["break"] = EHTokBreak; + (*KeywordMap)["continue"] = EHTokContinue; + (*KeywordMap)["if"] = EHTokIf; + (*KeywordMap)["else"] = EHTokElse; + (*KeywordMap)["discard"] = EHTokDiscard; + (*KeywordMap)["return"] = EHTokReturn; + (*KeywordMap)["switch"] = EHTokSwitch; + (*KeywordMap)["case"] = EHTokCase; + (*KeywordMap)["default"] = EHTokDefault; + + // TODO: get correct set here + ReservedSet = new std::unordered_set; + + ReservedSet->insert("auto"); + ReservedSet->insert("catch"); + ReservedSet->insert("char"); + ReservedSet->insert("const_cast"); + ReservedSet->insert("enum"); + ReservedSet->insert("explicit"); + ReservedSet->insert("friend"); + ReservedSet->insert("goto"); + ReservedSet->insert("long"); + ReservedSet->insert("mutable"); + ReservedSet->insert("new"); + ReservedSet->insert("operator"); + ReservedSet->insert("private"); + ReservedSet->insert("protected"); + ReservedSet->insert("public"); + ReservedSet->insert("reinterpret_cast"); + ReservedSet->insert("short"); + ReservedSet->insert("signed"); + ReservedSet->insert("sizeof"); + ReservedSet->insert("static_cast"); + ReservedSet->insert("template"); + ReservedSet->insert("throw"); + ReservedSet->insert("try"); + ReservedSet->insert("typename"); + ReservedSet->insert("union"); + ReservedSet->insert("unsigned"); + ReservedSet->insert("using"); + ReservedSet->insert("virtual"); + + SemanticMap = new std::unordered_map; + + // in DX9, all outputs had to have a semantic associated with them, that was either consumed + // by the system or was a specific register assignment + // in DX10+, only semantics with the SV_ prefix have any meaning beyond decoration + // Fxc will only accept DX9 style semantics in compat mode + // Also, in DX10 if a SV value is present as the input of a stage, but isn't appropriate for that + // stage, it would just be ignored as it is likely there as part of an output struct from one stage + // to the next + bool bParseDX9 = false; + if (bParseDX9) { + (*SemanticMap)["PSIZE"] = EbvPointSize; + (*SemanticMap)["FOG"] = EbvFogFragCoord; + (*SemanticMap)["DEPTH"] = EbvFragDepth; + (*SemanticMap)["VFACE"] = EbvFace; + (*SemanticMap)["VPOS"] = EbvFragCoord; + } + + (*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; + (*SemanticMap)["SV_SAMPLEINDEX"] = EbvSampleId; + (*SemanticMap)["SV_RENDERTARGETARRAYINDEX"] = EbvLayer; + (*SemanticMap)["SV_PRIMITIVEID"] = EbvPrimitiveId; + (*SemanticMap)["SV_OUTPUTCONTROLPOINTID"] = EbvInvocationId; + (*SemanticMap)["SV_ISFRONTFACE"] = EbvFace; + (*SemanticMap)["SV_INSTANCEID"] = EbvInstanceIndex; + (*SemanticMap)["SV_INSIDETESSFACTOR"] = EbvTessLevelInner; + (*SemanticMap)["SV_GSINSTANCEID"] = EbvInvocationId; + (*SemanticMap)["SV_DISPATCHTHREADID"] = EbvGlobalInvocationId; + (*SemanticMap)["SV_GROUPTHREADID"] = EbvLocalInvocationId; + (*SemanticMap)["SV_GROUPINDEX"] = EbvLocalInvocationIndex; + (*SemanticMap)["SV_GROUPID"] = EbvWorkGroupId; + (*SemanticMap)["SV_DOMAINLOCATION"] = EbvTessCoord; + (*SemanticMap)["SV_DEPTH"] = EbvFragDepth; + (*SemanticMap)["SV_COVERAGE"] = EbvSampleMask; + (*SemanticMap)["SV_DEPTHGREATEREQUAL"] = EbvFragDepthGreater; + (*SemanticMap)["SV_DEPTHLESSEQUAL"] = EbvFragDepthLesser; + (*SemanticMap)["SV_STENCILREF"] = EbvStencilRef; +} + +void HlslScanContext::deleteKeywordMap() +{ + delete KeywordMap; + KeywordMap = nullptr; + delete ReservedSet; + ReservedSet = nullptr; + delete SemanticMap; + SemanticMap = nullptr; +} + +// Wrapper for tokenizeClass() to get everything inside the token. +void HlslScanContext::tokenize(HlslToken& token) +{ + EHlslTokenClass tokenClass = tokenizeClass(token); + token.tokenClass = tokenClass; +} + +glslang::TBuiltInVariable HlslScanContext::mapSemantic(const char* upperCase) +{ + auto it = SemanticMap->find(upperCase); + if (it != SemanticMap->end()) + return it->second; + else + return glslang::EbvNone; +} + +// +// Fill in token information for the next token, except for the token class. +// Returns the enum value of the token class of the next token found. +// Return 0 (EndOfTokens) on end of input. +// +EHlslTokenClass HlslScanContext::tokenizeClass(HlslToken& token) +{ + do { + parserToken = &token; + TPpToken ppToken; + int token = ppContext.tokenize(ppToken); + if (token == EndOfInput) + return EHTokNone; + + tokenText = ppToken.name; + loc = ppToken.loc; + parserToken->loc = loc; + switch (token) { + case ';': return EHTokSemicolon; + case ',': return EHTokComma; + case ':': return EHTokColon; + case '=': return EHTokAssign; + case '(': return EHTokLeftParen; + case ')': return EHTokRightParen; + case '.': return EHTokDot; + case '!': return EHTokBang; + case '-': return EHTokDash; + case '~': return EHTokTilde; + case '+': return EHTokPlus; + case '*': return EHTokStar; + case '/': return EHTokSlash; + case '%': return EHTokPercent; + case '<': return EHTokLeftAngle; + case '>': return EHTokRightAngle; + case '|': return EHTokVerticalBar; + case '^': return EHTokCaret; + case '&': return EHTokAmpersand; + case '?': return EHTokQuestion; + case '[': return EHTokLeftBracket; + case ']': return EHTokRightBracket; + case '{': return EHTokLeftBrace; + case '}': return EHTokRightBrace; + case '\\': + parseContext.error(loc, "illegal use of escape character", "\\", ""); + break; + + case PPAtomAddAssign: return EHTokAddAssign; + case PPAtomSubAssign: return EHTokSubAssign; + case PPAtomMulAssign: return EHTokMulAssign; + case PPAtomDivAssign: return EHTokDivAssign; + case PPAtomModAssign: return EHTokModAssign; + + case PpAtomRight: return EHTokRightOp; + case PpAtomLeft: return EHTokLeftOp; + + case PpAtomRightAssign: return EHTokRightAssign; + case PpAtomLeftAssign: return EHTokLeftAssign; + case PpAtomAndAssign: return EHTokAndAssign; + case PpAtomOrAssign: return EHTokOrAssign; + case PpAtomXorAssign: return EHTokXorAssign; + + case PpAtomAnd: return EHTokAndOp; + case PpAtomOr: return EHTokOrOp; + case PpAtomXor: return EHTokXorOp; + + case PpAtomEQ: return EHTokEqOp; + case PpAtomGE: return EHTokGeOp; + case PpAtomNE: return EHTokNeOp; + case PpAtomLE: return EHTokLeOp; + + case PpAtomDecrement: return EHTokDecOp; + case PpAtomIncrement: return EHTokIncOp; + + case PpAtomColonColon: return EHTokColonColon; + + case PpAtomConstInt: parserToken->i = ppToken.ival; return EHTokIntConstant; + case PpAtomConstUint: parserToken->i = ppToken.ival; return EHTokUintConstant; + case PpAtomConstFloat: parserToken->d = ppToken.dval; return EHTokFloatConstant; + case PpAtomConstDouble: parserToken->d = ppToken.dval; return EHTokDoubleConstant; + case PpAtomIdentifier: + { + EHlslTokenClass token = tokenizeIdentifier(); + return token; + } + + case PpAtomConstString: { + parserToken->string = NewPoolTString(tokenText); + return EHTokStringConstant; + } + + case EndOfInput: return EHTokNone; + + default: + char buf[2]; + buf[0] = (char)token; + buf[1] = 0; + parseContext.error(loc, "unexpected token", buf, ""); + break; + } + } while (true); +} + +EHlslTokenClass HlslScanContext::tokenizeIdentifier() +{ + if (ReservedSet->find(tokenText) != ReservedSet->end()) + return reservedWord(); + + auto it = KeywordMap->find(tokenText); + if (it == KeywordMap->end()) { + // Should have an identifier of some sort + return identifierOrType(); + } + keyword = it->second; + + switch (keyword) { + + // qualifiers + case EHTokStatic: + case EHTokConst: + case EHTokSNorm: + case EHTokUnorm: + case EHTokExtern: + case EHTokUniform: + case EHTokVolatile: + case EHTokShared: + case EHTokGroupShared: + case EHTokLinear: + case EHTokCentroid: + case EHTokNointerpolation: + case EHTokNoperspective: + case EHTokSample: + case EHTokRowMajor: + case EHTokColumnMajor: + case EHTokPackOffset: + case EHTokIn: + case EHTokOut: + case EHTokInOut: + case EHTokPrecise: + case EHTokLayout: + case EHTokGloballyCoherent: + case EHTokInline: + return keyword; + + // primitive types + case EHTokPoint: + case EHTokLine: + case EHTokTriangle: + case EHTokLineAdj: + case EHTokTriangleAdj: + return keyword; + + // stream out types + case EHTokPointStream: + case EHTokLineStream: + case EHTokTriangleStream: + return keyword; + + // Tessellation patches + case EHTokInputPatch: + case EHTokOutputPatch: + return keyword; + + case EHTokBuffer: + case EHTokVector: + case EHTokMatrix: + return keyword; + + // scalar types + case EHTokVoid: + case EHTokString: + case EHTokBool: + case EHTokInt: + case EHTokUint: + case EHTokDword: + case EHTokHalf: + case EHTokFloat: + case EHTokDouble: + case EHTokMin16float: + case EHTokMin10float: + case EHTokMin16int: + case EHTokMin12int: + case EHTokMin16uint: + + // vector types + case EHTokBool1: + case EHTokBool2: + case EHTokBool3: + case EHTokBool4: + case EHTokFloat1: + case EHTokFloat2: + case EHTokFloat3: + case EHTokFloat4: + case EHTokInt1: + case EHTokInt2: + case EHTokInt3: + case EHTokInt4: + case EHTokDouble1: + case EHTokDouble2: + case EHTokDouble3: + case EHTokDouble4: + case EHTokUint1: + case EHTokUint2: + case EHTokUint3: + case EHTokUint4: + case EHTokHalf1: + case EHTokHalf2: + case EHTokHalf3: + case EHTokHalf4: + case EHTokMin16float1: + case EHTokMin16float2: + case EHTokMin16float3: + case EHTokMin16float4: + case EHTokMin10float1: + case EHTokMin10float2: + case EHTokMin10float3: + case EHTokMin10float4: + case EHTokMin16int1: + case EHTokMin16int2: + case EHTokMin16int3: + case EHTokMin16int4: + case EHTokMin12int1: + case EHTokMin12int2: + case EHTokMin12int3: + case EHTokMin12int4: + case EHTokMin16uint1: + case EHTokMin16uint2: + case EHTokMin16uint3: + case EHTokMin16uint4: + + // matrix types + case EHTokBool1x1: + case EHTokBool1x2: + case EHTokBool1x3: + case EHTokBool1x4: + case EHTokBool2x1: + case EHTokBool2x2: + case EHTokBool2x3: + case EHTokBool2x4: + case EHTokBool3x1: + case EHTokBool3x2: + case EHTokBool3x3: + case EHTokBool3x4: + case EHTokBool4x1: + case EHTokBool4x2: + case EHTokBool4x3: + case EHTokBool4x4: + case EHTokInt1x1: + case EHTokInt1x2: + case EHTokInt1x3: + case EHTokInt1x4: + case EHTokInt2x1: + case EHTokInt2x2: + case EHTokInt2x3: + case EHTokInt2x4: + case EHTokInt3x1: + case EHTokInt3x2: + case EHTokInt3x3: + case EHTokInt3x4: + case EHTokInt4x1: + case EHTokInt4x2: + case EHTokInt4x3: + case EHTokInt4x4: + case EHTokUint1x1: + case EHTokUint1x2: + case EHTokUint1x3: + case EHTokUint1x4: + case EHTokUint2x1: + case EHTokUint2x2: + case EHTokUint2x3: + case EHTokUint2x4: + case EHTokUint3x1: + case EHTokUint3x2: + case EHTokUint3x3: + case EHTokUint3x4: + case EHTokUint4x1: + case EHTokUint4x2: + case EHTokUint4x3: + case EHTokUint4x4: + case EHTokFloat1x1: + case EHTokFloat1x2: + case EHTokFloat1x3: + case EHTokFloat1x4: + case EHTokFloat2x1: + case EHTokFloat2x2: + case EHTokFloat2x3: + case EHTokFloat2x4: + case EHTokFloat3x1: + case EHTokFloat3x2: + case EHTokFloat3x3: + case EHTokFloat3x4: + case EHTokFloat4x1: + case EHTokFloat4x2: + case EHTokFloat4x3: + case EHTokFloat4x4: + case EHTokDouble1x1: + case EHTokDouble1x2: + case EHTokDouble1x3: + case EHTokDouble1x4: + case EHTokDouble2x1: + case EHTokDouble2x2: + case EHTokDouble2x3: + case EHTokDouble2x4: + case EHTokDouble3x1: + case EHTokDouble3x2: + case EHTokDouble3x3: + case EHTokDouble3x4: + case EHTokDouble4x1: + case EHTokDouble4x2: + case EHTokDouble4x3: + case EHTokDouble4x4: + return keyword; + + // texturing types + case EHTokSampler: + case EHTokSampler1d: + case EHTokSampler2d: + case EHTokSampler3d: + case EHTokSamplerCube: + case EHTokSamplerState: + case EHTokSamplerComparisonState: + case EHTokTexture: + case EHTokTexture1d: + case EHTokTexture1darray: + case EHTokTexture2d: + case EHTokTexture2darray: + case EHTokTexture3d: + case EHTokTextureCube: + case EHTokTextureCubearray: + case EHTokTexture2DMS: + case EHTokTexture2DMSarray: + case EHTokRWTexture1d: + case EHTokRWTexture1darray: + case EHTokRWTexture2d: + case EHTokRWTexture2darray: + case EHTokRWTexture3d: + case EHTokRWBuffer: + case EHTokAppendStructuredBuffer: + case EHTokByteAddressBuffer: + case EHTokConsumeStructuredBuffer: + case EHTokRWByteAddressBuffer: + case EHTokRWStructuredBuffer: + case EHTokStructuredBuffer: + return keyword; + + // variable, user type, ... + case EHTokClass: + case EHTokStruct: + case EHTokTypedef: + case EHTokCBuffer: + case EHTokTBuffer: + case EHTokThis: + return keyword; + + case EHTokBoolConstant: + if (strcmp("true", tokenText) == 0) + parserToken->b = true; + else + parserToken->b = false; + return keyword; + + // control flow + case EHTokFor: + case EHTokDo: + case EHTokWhile: + case EHTokBreak: + case EHTokContinue: + case EHTokIf: + case EHTokElse: + case EHTokDiscard: + case EHTokReturn: + case EHTokCase: + case EHTokSwitch: + case EHTokDefault: + return keyword; + + default: + parseContext.infoSink.info.message(EPrefixInternalError, "Unknown glslang keyword", loc); + return EHTokNone; + } +} + +EHlslTokenClass HlslScanContext::identifierOrType() +{ + parserToken->string = NewPoolTString(tokenText); + + return EHTokIdentifier; +} + +// Give an error for use of a reserved symbol. +// However, allow built-in declarations to use reserved words, to allow +// extension support before the extension is enabled. +EHlslTokenClass HlslScanContext::reservedWord() +{ + if (! parseContext.symbolTable.atBuiltInLevel()) + parseContext.error(loc, "Reserved word.", tokenText, "", ""); + + 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/hlslScanContext.h b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslScanContext.h new file mode 100755 index 0000000..9d30a12 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslScanContext.h @@ -0,0 +1,109 @@ +// +// Copyright (C) 2016 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 Google, Inc., 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. +// + +// +// This holds context specific to the HLSL scanner, which +// sits between the preprocessor scanner and HLSL parser. +// + +#ifndef HLSLSCANCONTEXT_H_ +#define HLSLSCANCONTEXT_H_ + +#include "../glslang/MachineIndependent/ParseHelper.h" +#include "hlslTokens.h" + +namespace glslang { + +class TPpContext; +class TPpToken; + + +// +// Everything needed to fully describe a token. +// +struct HlslToken { + HlslToken() : string(nullptr) { loc.init(); } + TSourceLoc loc; // location of token in the source + EHlslTokenClass tokenClass; // what kind of token it is + union { // what data the token holds + glslang::TString *string; // for identifiers + int i; // for literals + unsigned int u; + bool b; + double d; + }; +}; + +// +// The state of scanning and translating raw tokens to slightly richer +// semantics, like knowing if an identifier is an existing symbol, or +// user-defined type. +// +class HlslScanContext { +public: + HlslScanContext(TParseContextBase& parseContext, TPpContext& ppContext) + : parseContext(parseContext), ppContext(ppContext) { } + virtual ~HlslScanContext() { } + + static void fillInKeywordMap(); + static void deleteKeywordMap(); + + void tokenize(HlslToken&); + glslang::TBuiltInVariable mapSemantic(const char*); + +protected: + HlslScanContext(HlslScanContext&); + HlslScanContext& operator=(HlslScanContext&); + + EHlslTokenClass tokenizeClass(HlslToken&); + EHlslTokenClass tokenizeIdentifier(); + EHlslTokenClass identifierOrType(); + EHlslTokenClass reservedWord(); + EHlslTokenClass identifierOrReserved(bool reserved); + EHlslTokenClass nonreservedKeyword(int version); + + TParseContextBase& parseContext; + TPpContext& ppContext; + TSourceLoc loc; + TPpToken* ppToken; + HlslToken* parserToken; + + const char* tokenText; + EHlslTokenClass keyword; +}; + +} // end namespace glslang + +#endif // HLSLSCANCONTEXT_H_ diff --git a/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslTokenStream.cpp b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslTokenStream.cpp new file mode 100755 index 0000000..5d9311c --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslTokenStream.cpp @@ -0,0 +1,150 @@ +// +// Copyright (C) 2016 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 Google, Inc., 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. +// + +#include "hlslTokenStream.h" + +namespace glslang { + +void HlslTokenStream::pushPreToken(const HlslToken& tok) +{ + assert(preTokenStackSize < tokenBufferSize); + preTokenStack[preTokenStackSize++] = tok; +} + +HlslToken HlslTokenStream::popPreToken() +{ + assert(preTokenStackSize > 0); + + return preTokenStack[--preTokenStackSize]; +} + +void HlslTokenStream::pushTokenBuffer(const HlslToken& tok) +{ + tokenBuffer[tokenBufferPos] = tok; + tokenBufferPos = (tokenBufferPos+1) % tokenBufferSize; +} + +HlslToken HlslTokenStream::popTokenBuffer() +{ + // Back up + tokenBufferPos = (tokenBufferPos+tokenBufferSize-1) % tokenBufferSize; + + return tokenBuffer[tokenBufferPos]; +} + +// +// Make a new source of tokens, not from the source, but from an +// already pre-processed token stream. +// +// This interrupts current token processing which must be restored +// later. Some simplifying assumptions are made (and asserted). +// +void HlslTokenStream::pushTokenStream(const TVector* tokens) +{ + // not yet setup to interrupt a stream that has been receded + // and not yet reconsumed + assert(preTokenStackSize == 0); + + // save current state + currentTokenStack.push_back(token); + + // set up new token stream + tokenStreamStack.push_back(tokens); + + // start position at first token: + token = (*tokens)[0]; + tokenPosition.push_back(0); +} + +// Undo pushTokenStream(), see above +void HlslTokenStream::popTokenStream() +{ + tokenStreamStack.pop_back(); + tokenPosition.pop_back(); + token = currentTokenStack.back(); + currentTokenStack.pop_back(); +} + +// Load 'token' with the next token in the stream of tokens. +void HlslTokenStream::advanceToken() +{ + pushTokenBuffer(token); + if (preTokenStackSize > 0) + token = popPreToken(); + else { + if (tokenStreamStack.size() == 0) + scanner.tokenize(token); + else { + ++tokenPosition.back(); + if (tokenPosition.back() >= (int)tokenStreamStack.back()->size()) + token.tokenClass = EHTokNone; + else + token = (*tokenStreamStack.back())[tokenPosition.back()]; + } + } +} + +void HlslTokenStream::recedeToken() +{ + pushPreToken(token); + token = popTokenBuffer(); +} + +// Return the current token class. +EHlslTokenClass HlslTokenStream::peek() const +{ + return token.tokenClass; +} + +// Return true, without advancing to the next token, if the current token is +// the expected (passed in) token class. +bool HlslTokenStream::peekTokenClass(EHlslTokenClass tokenClass) const +{ + return peek() == tokenClass; +} + +// Return true and advance to the next token if the current token is the +// expected (passed in) token class. +bool HlslTokenStream::acceptTokenClass(EHlslTokenClass tokenClass) +{ + if (peekTokenClass(tokenClass)) { + advanceToken(); + return true; + } + + return false; +} + +} // end namespace glslang diff --git a/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslTokenStream.h b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslTokenStream.h new file mode 100755 index 0000000..cb6c9e7 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslTokenStream.h @@ -0,0 +1,96 @@ +// +// Copyright (C) 2016 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 Google, Inc., 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. +// + +#ifndef HLSLTOKENSTREAM_H_ +#define HLSLTOKENSTREAM_H_ + +#include "hlslScanContext.h" + +namespace glslang { + + class HlslTokenStream { + public: + explicit HlslTokenStream(HlslScanContext& scanner) + : scanner(scanner), preTokenStackSize(0), tokenBufferPos(0) { } + virtual ~HlslTokenStream() { } + + public: + void advanceToken(); + void recedeToken(); + bool acceptTokenClass(EHlslTokenClass); + EHlslTokenClass peek() const; + bool peekTokenClass(EHlslTokenClass) const; + glslang::TBuiltInVariable mapSemantic(const char* upperCase) { return scanner.mapSemantic(upperCase); } + + void pushTokenStream(const TVector* tokens); + void popTokenStream(); + + protected: + HlslToken token; // the token we are currently looking at, but have not yet accepted + + private: + HlslTokenStream(); + HlslTokenStream& operator=(const HlslTokenStream&); + + HlslScanContext& scanner; // lexical scanner, to get next token from source file + TVector*> tokenStreamStack; // for getting the next token from an existing vector of tokens + TVector tokenPosition; + TVector currentTokenStack; + + // This is the number of tokens we can recedeToken() over. + static const int tokenBufferSize = 2; + + // Previously scanned tokens, returned for future advances, + // so logically in front of the token stream. + // Is logically a stack; needs last in last out semantics. + // Currently implemented as a stack of size 2. + HlslToken preTokenStack[tokenBufferSize]; + int preTokenStackSize; + void pushPreToken(const HlslToken&); + HlslToken popPreToken(); + + // Previously scanned tokens, not yet returned for future advances, + // but available for that. + // Is logically a fifo for normal advances, and a stack for recession. + // Currently implemented with an intrinsic size of 2. + HlslToken tokenBuffer[tokenBufferSize]; + int tokenBufferPos; + void pushTokenBuffer(const HlslToken&); + HlslToken popTokenBuffer(); + }; + +} // end namespace glslang + +#endif // HLSLTOKENSTREAM_H_ diff --git a/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslTokens.h b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslTokens.h new file mode 100755 index 0000000..9f91906 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslTokens.h @@ -0,0 +1,351 @@ +// +// Copyright (C) 2016 Google, Inc. +// Copyright (C) 2016 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 Google, Inc., 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. +// + +#ifndef EHLSLTOKENS_H_ +#define EHLSLTOKENS_H_ + +namespace glslang { + +enum EHlslTokenClass { + EHTokNone = 0, + + // qualifiers + EHTokStatic, + EHTokConst, + EHTokSNorm, + EHTokUnorm, + EHTokExtern, + EHTokUniform, + EHTokVolatile, + EHTokPrecise, + EHTokShared, + EHTokGroupShared, + EHTokLinear, + EHTokCentroid, + EHTokNointerpolation, + EHTokNoperspective, + EHTokSample, + EHTokRowMajor, + EHTokColumnMajor, + EHTokPackOffset, + EHTokIn, + EHTokOut, + EHTokInOut, + EHTokLayout, + EHTokGloballyCoherent, + EHTokInline, + + // primitive types + EHTokPoint, + EHTokLine, + EHTokTriangle, + EHTokLineAdj, + EHTokTriangleAdj, + + // stream out types + EHTokPointStream, + EHTokLineStream, + EHTokTriangleStream, + + // Tessellation patches + EHTokInputPatch, + EHTokOutputPatch, + + // template types + EHTokBuffer, + EHTokVector, + EHTokMatrix, + + // scalar types + EHTokVoid, + EHTokString, + EHTokBool, + EHTokInt, + EHTokUint, + EHTokDword, + EHTokHalf, + EHTokFloat, + EHTokDouble, + EHTokMin16float, + EHTokMin10float, + EHTokMin16int, + EHTokMin12int, + EHTokMin16uint, + + // vector types + EHTokBool1, + EHTokBool2, + EHTokBool3, + EHTokBool4, + EHTokFloat1, + EHTokFloat2, + EHTokFloat3, + EHTokFloat4, + EHTokInt1, + EHTokInt2, + EHTokInt3, + EHTokInt4, + EHTokDouble1, + EHTokDouble2, + EHTokDouble3, + EHTokDouble4, + EHTokUint1, + EHTokUint2, + EHTokUint3, + EHTokUint4, + EHTokHalf1, + EHTokHalf2, + EHTokHalf3, + EHTokHalf4, + EHTokMin16float1, + EHTokMin16float2, + EHTokMin16float3, + EHTokMin16float4, + EHTokMin10float1, + EHTokMin10float2, + EHTokMin10float3, + EHTokMin10float4, + EHTokMin16int1, + EHTokMin16int2, + EHTokMin16int3, + EHTokMin16int4, + EHTokMin12int1, + EHTokMin12int2, + EHTokMin12int3, + EHTokMin12int4, + EHTokMin16uint1, + EHTokMin16uint2, + EHTokMin16uint3, + EHTokMin16uint4, + + // matrix types + EHTokInt1x1, + EHTokInt1x2, + EHTokInt1x3, + EHTokInt1x4, + EHTokInt2x1, + EHTokInt2x2, + EHTokInt2x3, + EHTokInt2x4, + EHTokInt3x1, + EHTokInt3x2, + EHTokInt3x3, + EHTokInt3x4, + EHTokInt4x1, + EHTokInt4x2, + EHTokInt4x3, + EHTokInt4x4, + EHTokUint1x1, + EHTokUint1x2, + EHTokUint1x3, + EHTokUint1x4, + EHTokUint2x1, + EHTokUint2x2, + EHTokUint2x3, + EHTokUint2x4, + EHTokUint3x1, + EHTokUint3x2, + EHTokUint3x3, + EHTokUint3x4, + EHTokUint4x1, + EHTokUint4x2, + EHTokUint4x3, + EHTokUint4x4, + EHTokBool1x1, + EHTokBool1x2, + EHTokBool1x3, + EHTokBool1x4, + EHTokBool2x1, + EHTokBool2x2, + EHTokBool2x3, + EHTokBool2x4, + EHTokBool3x1, + EHTokBool3x2, + EHTokBool3x3, + EHTokBool3x4, + EHTokBool4x1, + EHTokBool4x2, + EHTokBool4x3, + EHTokBool4x4, + EHTokFloat1x1, + EHTokFloat1x2, + EHTokFloat1x3, + EHTokFloat1x4, + EHTokFloat2x1, + EHTokFloat2x2, + EHTokFloat2x3, + EHTokFloat2x4, + EHTokFloat3x1, + EHTokFloat3x2, + EHTokFloat3x3, + EHTokFloat3x4, + EHTokFloat4x1, + EHTokFloat4x2, + EHTokFloat4x3, + EHTokFloat4x4, + EHTokDouble1x1, + EHTokDouble1x2, + EHTokDouble1x3, + EHTokDouble1x4, + EHTokDouble2x1, + EHTokDouble2x2, + EHTokDouble2x3, + EHTokDouble2x4, + EHTokDouble3x1, + EHTokDouble3x2, + EHTokDouble3x3, + EHTokDouble3x4, + EHTokDouble4x1, + EHTokDouble4x2, + EHTokDouble4x3, + EHTokDouble4x4, + + // texturing types + EHTokSampler, + EHTokSampler1d, + EHTokSampler2d, + EHTokSampler3d, + EHTokSamplerCube, + EHTokSamplerState, + EHTokSamplerComparisonState, + EHTokTexture, + EHTokTexture1d, + EHTokTexture1darray, + EHTokTexture2d, + EHTokTexture2darray, + EHTokTexture3d, + EHTokTextureCube, + EHTokTextureCubearray, + EHTokTexture2DMS, + EHTokTexture2DMSarray, + EHTokRWTexture1d, + EHTokRWTexture1darray, + EHTokRWTexture2d, + EHTokRWTexture2darray, + EHTokRWTexture3d, + EHTokRWBuffer, + + // Structure buffer variants + EHTokAppendStructuredBuffer, + EHTokByteAddressBuffer, + EHTokConsumeStructuredBuffer, + EHTokRWByteAddressBuffer, + EHTokRWStructuredBuffer, + EHTokStructuredBuffer, + + // variable, user type, ... + EHTokIdentifier, + EHTokClass, + EHTokStruct, + EHTokCBuffer, + EHTokTBuffer, + EHTokTypedef, + EHTokThis, + + // constant + EHTokFloatConstant, + EHTokDoubleConstant, + EHTokIntConstant, + EHTokUintConstant, + EHTokBoolConstant, + EHTokStringConstant, + + // control flow + EHTokFor, + EHTokDo, + EHTokWhile, + EHTokBreak, + EHTokContinue, + EHTokIf, + EHTokElse, + EHTokDiscard, + EHTokReturn, + EHTokSwitch, + EHTokCase, + EHTokDefault, + + // expressions + EHTokLeftOp, + EHTokRightOp, + EHTokIncOp, + EHTokDecOp, + EHTokLeOp, + EHTokGeOp, + EHTokEqOp, + EHTokNeOp, + EHTokAndOp, + EHTokOrOp, + EHTokXorOp, + EHTokAssign, + EHTokMulAssign, + EHTokDivAssign, + EHTokAddAssign, + EHTokModAssign, + EHTokLeftAssign, + EHTokRightAssign, + EHTokAndAssign, + EHTokXorAssign, + EHTokOrAssign, + EHTokSubAssign, + EHTokLeftParen, + EHTokRightParen, + EHTokLeftBracket, + EHTokRightBracket, + EHTokLeftBrace, + EHTokRightBrace, + EHTokDot, + EHTokComma, + EHTokColon, + EHTokColonColon, + EHTokSemicolon, + EHTokBang, + EHTokDash, + EHTokTilde, + EHTokPlus, + EHTokStar, + EHTokSlash, + EHTokPercent, + EHTokLeftAngle, + EHTokRightAngle, + EHTokVerticalBar, + EHTokCaret, + EHTokAmpersand, + EHTokQuestion, +}; + +} // end namespace glslang + +#endif // EHLSLTOKENS_H_ diff --git a/3rdparty/bgfx/3rdparty/glslang/make-revision b/3rdparty/bgfx/3rdparty/glslang/make-revision new file mode 100755 index 0000000..492e437 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/glslang/make-revision @@ -0,0 +1,10 @@ +#!/bin/sh +( +echo "// This header is generated by the make-revision script." +echo "// For the version, it uses the latest git tag followed by the number of commits." +echo "// For the date, it uses the current date (when then script is run)." + +echo +echo \#define GLSLANG_REVISION \"`git describe --tags --abbrev=0`.`git log --oneline | wc -l`\" +echo \#define GLSLANG_DATE \"`date +%d-%b-%Y`\" +) > glslang/Include/revision.h diff --git a/3rdparty/bgfx/3rdparty/iconfontheaders/GenerateIconFontCppHeaders.py b/3rdparty/bgfx/3rdparty/iconfontheaders/GenerateIconFontCppHeaders.py old mode 100755 new mode 100644 index 09eae5c..fe7fe8e --- a/3rdparty/bgfx/3rdparty/iconfontheaders/GenerateIconFontCppHeaders.py +++ b/3rdparty/bgfx/3rdparty/iconfontheaders/GenerateIconFontCppHeaders.py @@ -1,13 +1,18 @@ -#!/usr/bin/python # Convert Font Awesome, Google Material Design and Kenney Game icon font -# parameters to C++11 and C89 compatible formats. +# parameters to C++11, C89 and None compatible formats. # #------------------------------------------------------------------------------ # 1 - Source material # -# 1.1 - Font Awesome - https://raw.githubusercontent.com/FortAwesome/Font-Awesome/master/src/icons.yml -# 1.2 - Material Design - https://raw.githubusercontent.com/google/material-design-icons/master/iconfont/codepoints -# 1.3 - Kenney icons - https://raw.githubusercontent.com/SamBrishes/kenney-icon-font/master/css/kenney-icons.css +# 1.1 - Font Awesome +# https://github.com/FortAwesome/Font-Awesome/blob/master/fonts/fontawesome-webfont.ttf +# https://raw.githubusercontent.com/FortAwesome/Font-Awesome/master/src/icons.yml +# 1.2 - Material Design +# https://github.com/google/material-design-icons/blob/master/iconfont/MaterialIcons-Regular.ttf +# https://raw.githubusercontent.com/google/material-design-icons/master/iconfont/codepoints +# 1.3 - Kenney icons +# https://github.com/SamBrishes/kenney-icon-font/blob/master/fonts/kenney-icon-font.ttf +# https://raw.githubusercontent.com/SamBrishes/kenney-icon-font/master/css/kenney-icons.css # #------------------------------------------------------------------------------ # 2 - Data samples @@ -24,21 +29,26 @@ # - Web Application Icons # - output C++11: #define ICON_FA_MUSIC u8"\uf001" # - output C89: #define ICON_FA_MUSIC "\xEF\x80\x81" +# - output None: var icon-fa-music "" # # 2.2 - Google Material Design icons # - input: 3d_rotation e84d # - output C++11: #define ICON_MD_3D_ROTATION u8"\ue84d" # - output C89: #define ICON_MD_3D_ROTATION "\xEE\xA1\x8D" +# - output None: var icon-md-3d_rotation "" # # 2.3 - Kenney Game icons # - input: .ki-home:before{ content: "\e900"; } # - output C++11: #define ICON_KI_HOME u8"\ue900" # - output C89: #define ICON_KI_HOME "\xEE\xA4\x80" +# - output None: var icon-ki-home "" # # 2.4 - All fonts # - computed min and max unicode fonts ICON_MIN and ICON_MAX -# - output: #define ICON_MIN_FA 0xf000 -# #define ICON_MAX_FA 0xf295 +# - output C89, C++11: #define ICON_MIN_FA 0xf000 +# #define ICON_MAX_FA 0xf295 +# - output None: var icon-min-fa 0xf000 +# var icon-max-fa 0xf2b2 # #------------------------------------------------------------------------------ # 3 - Script dependencies @@ -48,136 +58,294 @@ # 3.3 - PyYAML - http://pyyaml.org/ # #------------------------------------------------------------------------------ +# 4 - References +# +# None language: https://bitbucket.org/duangle/nonelang/src +# +#------------------------------------------------------------------------------ import requests import yaml -LINE_FORMAT_MINMAX = '#define ICON_{!s}_{!s} 0x{!s}\n' +# Fonts -UNICODE_MIN = 'ffff' -UNICODE_MAX = '0' -TIMEOUT = 2 +class Font: + font_tff = '[ ERROR - missing tff file info ]' + font_url = '[ ERROR - missing font data url ]' + font_name = '[ ERROR - missing font name ]' + font_abbr = '[ ERROR - missing font abbreviation ]' -MESSAGE_SUCCESS = '{!s} fonts - conversion success: {!s}' -MESSAGE_ERROR = '{!s} fonts - error \n\t{!s}' + @classmethod + def get_icons( cls, input ): + # intermediate representation of the fonts data, identify the min and max + print( '[ ERROR - missing implementation of class method get_icons for {!s} ]'.format( cls.font_name )) + icons_data = {} + icons_data.update({ 'font_min' : '[ ERROR - missing font min ]', + 'font_max' : '[ ERROR - missing font max ]', + 'icons' : '[ ERROR - missing list of pairs [ font icon name, code ]]' }) + return icons_data + + @classmethod + def download( cls ): + input_raw = '' + try : + response = requests.get( cls.font_url, timeout = 2 ) + if response.status_code == 200: + input_raw = response.content + print( 'Downloaded - ' + cls.font_name ) + except Exception as e : + print( '[ ERROR - {!s}: {!s} ]'.format( cls.font_name, e )) + return input_raw + + @classmethod + def get_intermediate_representation( cls ): + font_ir = {} + input_raw = cls.download() + if input_raw: + icons_data = cls.get_icons( input_raw ) + font_ir.update( icons_data ) + font_ir.update({ 'font_tff' : cls.font_tff, + 'font_url' : cls.font_url, + 'font_name' : cls.font_name, + 'font_abbr' : cls.font_abbr }) + print( 'Generated intermediate data - ' + cls.font_name ) + return font_ir -def get_prelude( url ): - prelude = '// Generated by GenerateIconFontCppHeaders.py \n// from {!s}\n#pragma once\n\n'.format( url ) - return prelude +class FontFA( Font ): + font_tff = 'https://github.com/FortAwesome/Font-Awesome/blob/master/fonts/fontawesome-webfont.ttf' + font_url = 'https://raw.githubusercontent.com/FortAwesome/Font-Awesome/master/src/icons.yml' + font_name = 'font_awesome' + font_abbr = 'FA' + + @classmethod + def get_icons( self, input ): + icons_data = {} + data = yaml.safe_load( input ) + if data: + font_min = 'ffff' + font_max = '0' + icons = [] + for item in data[ 'icons' ]: + if item[ 'unicode' ] < font_min: + font_min = item[ 'unicode' ] + if item[ 'unicode' ] >= font_max: + font_max = item[ 'unicode' ] + icons.append([ item[ 'id' ], item[ 'unicode' ]]) + icons_data.update({ 'font_min' : font_min, + 'font_max' : font_max, + 'icons' : icons }) + return icons_data -def line_format( font_abbr, font, unicode, cpp11 = True ): - if cpp11: - result = '#define ICON_{!s}_{!s} u8"\u{!s}"\n'.format( font_abbr, font, unicode ) - else: - unicode_base = ''.join([ '{0:x}'.format( ord( x )) for x in unichr( int( unicode, 16 )).encode( 'utf-8' )]).upper() - unicode = '\\x' + unicode_base[ :2 ] + '\\x' + unicode_base[ 2:4 ] + '\\x' + unicode_base[ 4: ] - result = '#define ICON_{!s}_{!s} "{!s}"\n'.format( font_abbr, font, unicode ) - return result +class FontMD( Font ): + font_tff = 'https://github.com/google/material-design-icons/blob/master/iconfont/MaterialIcons-Regular.ttf' + font_url = 'https://raw.githubusercontent.com/google/material-design-icons/master/iconfont/codepoints' + font_name = 'material_design' + font_abbr = 'MD' + + @classmethod + def get_icons( self, input ): + icons_data = {} + lines = str.split( input, '\n' ) + if lines: + font_min = 'ffff' + font_max = '0' + icons = [] + for line in lines : + words = str.split(line) + if words and len( words ) >= 2: + if words[ 1 ] < font_min: + font_min = words[ 1 ] + if words[ 1 ] >= font_max: + font_max = words[ 1 ] + icons.append( words ) + icons_data.update({ 'font_min' : font_min, + 'font_max' : font_max, + 'icons' : icons }) + return icons_data -def convert_font_awesome( font_name, font_abbr, source_url, output_file, cpp11 ): - try: - response = requests.get( source_url, timeout = TIMEOUT ) - if response.status_code == 200: - input = yaml.safe_load( response.content ) - min = UNICODE_MIN - max = UNICODE_MAX - output_fonts = '' - for item in input[ 'icons' ]: - font = '' - for char in item[ 'id' ]: - font += '_' if ( char == '-' ) else str.upper( char ) - unicode = item[ 'unicode' ] - if unicode < min: - min = unicode - elif unicode >= max: - max = unicode - output_fonts += line_format( font_abbr, font, unicode, cpp11 ) - output = get_prelude( source_url ) + \ - LINE_FORMAT_MINMAX.format( 'MIN', font_abbr, min ) + \ - LINE_FORMAT_MINMAX.format( 'MAX', font_abbr, max ) + \ - output_fonts - with open( output_file, 'w' ) as f: - f.write( output ) - print( MESSAGE_SUCCESS.format( font_name, output_file )) - except Exception as e: - print( MESSAGE_ERROR.format( font_name, e )) +class FontKI( Font ): + font_tff = 'https://github.com/SamBrishes/kenney-icon-font/blob/master/fonts/kenney-icon-font.ttf' + font_url = 'https://raw.githubusercontent.com/SamBrishes/kenney-icon-font/master/css/kenney-icons.css' + font_name = 'kenney' + font_abbr = 'KI' + + @classmethod + def get_icons( self, input ): + icons_data = {} + lines = str.split( input, '\n' ) + if lines: + font_min = 'ffff' + font_max = '0' + icons = [] + for line in lines : + if '.ki-' in line: + words = str.split(line) + if words and '.ki-' in words[ 0 ]: + font_id = words[ 0 ].partition( '.ki-' )[2].partition( ':before' )[0] + font_code = words[ 2 ].partition( '"\\' )[2].partition( '";' )[0] + if font_code < font_min: + font_min = font_code + if font_code >= font_max: + font_max = font_code + icons.append([ font_id, font_code ]) + icons_data.update({ 'font_min' : font_min, + 'font_max' : font_max, + 'icons' : icons }) + return icons_data -def convert_material_design( font_name, font_abbr, source_url, output_file, cpp11 ): - try: - response = requests.get( source_url, timeout = TIMEOUT ) - if response.status_code == 200: - input = str.split( response.content, '\n' ) - min = UNICODE_MIN - max = UNICODE_MAX - output_fonts = '' - for line in input: - words = str.split( line ) - if words: - font = '' - for char in words[ 0 ]: - font += '_' if ( char == '-' ) else str.upper( char ) - unicode = words[ 1 ] - if unicode < min: - min = unicode - elif unicode >= max: - max = unicode - output_fonts += line_format( font_abbr, font, unicode, cpp11 ) - output = get_prelude( source_url ) + \ - LINE_FORMAT_MINMAX.format( 'MIN', font_abbr, min ) + \ - LINE_FORMAT_MINMAX.format( 'MAX', font_abbr, max ) + \ - output_fonts - with open( output_file, 'w' ) as f: - f.write( output ) - print( MESSAGE_SUCCESS.format( font_name, output_file )) - except Exception as e: - print( MESSAGE_ERROR.format( font_name, e )) +# Languages -def convert_kenney( font_name, font_abbr, source_url, output_file, cpp11 ): - try: - response = requests.get( source_url, timeout = TIMEOUT ) - if response.status_code == 200: - input = str.split( response.content, '\n' ) - min = UNICODE_MIN - max = UNICODE_MAX - output_fonts = '' - font_begin= '.ki-' - font_end = ':before' - unicode_begin = '"\\' - unicode_end = '";' - for line in input: - words = str.split( line ) - if words: - if font_begin in words[ 0 ]: - font = '' - word = words[ 0 ][( words[ 0 ].find( font_begin ) + len( font_begin )) : ( words[ 0 ].find( font_end ))] - for char in word: - font += '_' if ( char == '-' ) else str.upper( char ) - unicode = str( words[ 2 ][( words[ 2 ].find( unicode_begin ) + len( unicode_begin )) : words[ 2 ].find( unicode_end )]) - if unicode < min: - min = unicode - elif unicode >= max: - max = unicode - output_fonts += line_format( font_abbr, font, unicode, cpp11 ) - output = get_prelude( source_url ) + \ - LINE_FORMAT_MINMAX.format( 'MIN', font_abbr, min ) + \ - LINE_FORMAT_MINMAX.format( 'MAX', font_abbr, max ) + \ - output_fonts - with open( output_file, 'w' ) as f: - f.write( output ) - print( MESSAGE_SUCCESS.format( font_name, output_file )) - except Exception as e: - print( MESSAGE_ERROR.format( font_name, e )) +class Language: + language_name = '[ ERROR - missing language name ]' + file_name = '[ ERROR - missing file name ]' + intermediate = {} + + def __init__( self, intermediate ): + self.intermediate = intermediate + + @classmethod + def prelude( cls ): + print('[ ERROR - missing implementation of class method prelude for {!s} ]'.format(cls.language_name)) + result = '[ ERROR - missing prelude ]' + return result + + @classmethod + def lines_minmax( cls ): + print('[ ERROR - missing implementation of class method lines_minmax for {!s} ]'.format(cls.language_name)) + result = '[ ERROR - missing min and max ]' + return result + + @classmethod + def line_icon( cls, icon ): + print('[ ERROR - missing implementation of class method line_icon for {!s} ]'.format( cls.language_name )) + result = '[ ERROR - missing icon line ]' + return result + + @classmethod + def convert( cls ): + result = cls.prelude() + cls.lines_minmax() + for icon in cls.intermediate.get( 'icons' ): + line_icon = cls.line_icon( icon ) + result += line_icon + print ( 'Converted - {!s} for {!s}' ).format( cls.intermediate.get( 'font_name' ), cls.language_name) + return result + + @classmethod + def save_to_file( cls ): + filename = cls.file_name.format( name = str(cls.intermediate.get( 'font_name' )).replace( ' ', '' )) + converted = cls.convert() + with open( filename, 'w' ) as f: + f.write( converted ) + print( 'Saved - {!s}' ).format( filename ) + + +class LanguageC89( Language ): + language_name = 'C89' + file_name = 'icons_{name}.h' + + @classmethod + def prelude( cls ): + tmpl_prelude = '// Generated by GenerateIconFontCppHeaders.py for language {lang}\n' + \ + '// from {url}\n' + \ + '// for use with {tff}\n' + \ + '#pragma once\n\n' + result = tmpl_prelude.format(lang = cls.language_name, + url = cls.intermediate.get('font_url'), + tff = cls.intermediate.get('font_tff')) + return result + + @classmethod + def lines_minmax( cls ): + tmpl_line_minmax = '#define ICON_{minmax}_{abbr} 0x{val}\n' + result = tmpl_line_minmax.format(minmax = 'MIN', + abbr = cls.intermediate.get('font_abbr'), + val = cls.intermediate.get('font_min')) + \ + tmpl_line_minmax.format(minmax = 'MAX', + abbr = cls.intermediate.get('font_abbr'), + val = cls.intermediate.get('font_max')) + return result + + @classmethod + def line_icon( cls, icon ): + tmpl_line_icon = '#define ICON_{abbr}_{icon} "{code}"\n' + icon_name = str.upper( icon[ 0 ]).replace( '-', '_' ) + code_base = ''.join([ '{0:x}'.format( ord( x )) for x in unichr( int( icon[ 1 ], 16 )).encode( 'utf-8' )]).upper() + icon_code = '\\x' + code_base[ :2 ] + '\\x' + code_base[ 2:4 ] + '\\x' + code_base[ 4: ] + result = tmpl_line_icon.format( abbr = cls.intermediate.get( 'font_abbr' ), + icon = icon_name, + code = icon_code ) + return result + + +class LanguageCpp11( LanguageC89 ): + language_name = 'C++11' + file_name = 'Icons{name}.h' + + @classmethod + def line_icon( cls, icon ): + tmpl_line_icon = '#define ICON_{abbr}_{icon} u8"\u{code}"\n' + icon_name = str.upper( icon[ 0 ]).replace( '-', '_' ) + icon_code = icon[ 1 ] + result = tmpl_line_icon.format( abbr = cls.intermediate.get('font_abbr'), + icon = icon_name, + code = icon_code) + return result + + +class LanguageNone( Language ): + language_name = 'None' + file_name = 'Icons{name}.n' + + @classmethod + def prelude( cls ): + tmpl_prelude = 'none\n' + \ + '; Generated by GenerateIconFontCppHeaders.py for language {lang}\n' + \ + '; from {url}\n' + \ + '; for use with {tff}\n' + \ + '\n$\n' + result = tmpl_prelude.format( lang = cls.language_name, + url = cls.intermediate.get( 'font_url' ), + tff = cls.intermediate.get( 'font_tff' )) + return result + + @classmethod + def lines_minmax( cls ): + tmpl_line_minmax = ' var icon-{minmax}-{abbr} 0x{val}\n' + result = tmpl_line_minmax.format( minmax = 'min', + abbr = cls.intermediate.get( 'font_abbr' ).lower(), + val = cls.intermediate.get( 'font_min' )) + \ + tmpl_line_minmax.format( minmax = 'max', + abbr = cls.intermediate.get( 'font_abbr' ).lower(), + val = cls.intermediate.get( 'font_max' )) + return result + + @classmethod + def line_icon( cls, icon ): + tmpl_line_icon = ' var icon-{abbr}-{icon} "{code}"\n' + icon_name = str.upper( icon[ 0 ]).replace( '-', '_' ).lower() + icon_code = unichr( int( icon[ 1 ], 16 )).encode( 'utf-8' ) + result = tmpl_line_icon.format( abbr = cls.intermediate.get( 'font_abbr' ).lower(), + icon = icon_name, + code = icon_code ) + return result # Main -convert_font_awesome( 'Font Awesome', 'FA', 'https://raw.githubusercontent.com/FortAwesome/Font-Awesome/master/src/icons.yml', 'icons_font_awesome.h', False ) -convert_material_design( 'Material Design', 'MD', 'https://raw.githubusercontent.com/google/material-design-icons/master/iconfont/codepoints', 'icons_material_design.h', False ) -convert_kenney( 'Kenney', 'KI', 'https://raw.githubusercontent.com/SamBrishes/kenney-icon-font/master/css/kenney-icons.css', 'icons_kenney.h', False ) +fonts = [ FontKI , FontMD, FontFA ] +languages = [ LanguageC89 ] + +intermediates = [] +for font in fonts: + intermediates.append( font.get_intermediate_representation()) +for interm in intermediates: + Language.intermediate = interm + for lang in languages: + lang.save_to_file() diff --git a/3rdparty/bgfx/3rdparty/iconfontheaders/README.md b/3rdparty/bgfx/3rdparty/iconfontheaders/README.md index 2170dee..f22b760 100644 --- a/3rdparty/bgfx/3rdparty/iconfontheaders/README.md +++ b/3rdparty/bgfx/3rdparty/iconfontheaders/README.md @@ -1,17 +1,26 @@ -# IconFontCHeaders -C++11 and C89 headers for icon fonts Font Awesome, Google Material Design icons and Kenney game icons. +# IconFontCppHeaders -A set of header files for using icon fonts in C and C++, along with the python generator used to create the files. +[https://github.com/juliettef/IconFontCppHeaders](https://github.com/juliettef/IconFontCppHeaders) + +C++11, C89 and None headers for icon fonts Font Awesome, Google Material Design icons and Kenney game icons. + +A set of header files for using icon fonts in C, C++ and [None](https://bitbucket.org/duangle/nonelang/src), along with the python generator used to create the files. Each header contains defines for one font, with each icon code point defined as ICON_*, along with the min and max code points for font loading purposes. ## Fonts -* [Font Awesome](http://fortawesome.github.io/Font-Awesome/) - [github repository](https://github.com/FortAwesome/Font-Awesome/) -* [Google Material Design icons](https://design.google.com/icons/) - [github repository](https://github.com/google/material-design-icons/) -* [Kenney Game icons](http://kenney.nl/assets/game-icons) and [Game icons expansion](http://kenney.nl/assets/game-icons-expansion) - [github repository](https://github.com/SamBrishes/kenney-icon-font) +* [Font Awesome](http://fontawesome.io/) + * [github repository](https://github.com/FortAwesome/Font-Awesome/) + * [fontawesome-webfont.ttf](https://github.com/FortAwesome/Font-Awesome/blob/master/fonts/fontawesome-webfont.ttf) +* [Google Material Design icons](https://design.google.com/icons/) + * [github repository](https://github.com/google/material-design-icons/) + * [MaterialIcons-Regular.ttf](https://github.com/google/material-design-icons/blob/master/iconfont/MaterialIcons-Regular.ttf) +* [Kenney Game icons](http://kenney.nl/assets/game-icons) and [Game icons expansion](http://kenney.nl/assets/game-icons-expansion) + * [github repository](https://github.com/SamBrishes/kenney-icon-font) + * [kenney-icon-font.ttf](https://github.com/SamBrishes/kenney-icon-font/blob/master/fonts/kenney-icon-font.ttf) -## Usage +## Example Code Using [dear imgui](https://github.com/ocornut/imgui) as an example UI library: @@ -27,3 +36,18 @@ Using [dear imgui](https://github.com/ocornut/imgui) as an example UI library: // in an imgui window somewhere... ImGui::Text( ICON_FA_FILE " File" ); // use string literal concatenation, ouputs a file icon and File as a string. + +## Projects using the font icon header files + +### [bgfx](https://github.com/bkaradzic/bgfx) - Cross-platform rendering library + +### [Avoyd](http://www.avoyd.com) - Game +The Edit Tool UI uses [dear imgui](https://github.com/ocornut/imgui) with [Font Awesome](http://fontawesome.io/) fonts. + +![Avoyd Edit Tool with Font Awesome fonts](https://www.enkisoftware.com/images/2017-02-22_Avoyd_Editor_UI_ImGui_Font_Awesome.png) + +## Credits + +Development - [Juliette Foucaut](http://www.enkisoftware.com/about.html#juliette) - [@juliettef](https://github.com/juliettef) +Requirements - [Doug Binks](http://www.enkisoftware.com/about.html#doug) - [@dougbinks](https://github.com/dougbinks) +[None language](https://bitbucket.org/duangle/nonelang/src) [format definition and refactoring](https://gist.github.com/paniq/4a734e9d8e86a2373b5bc4ca719855ec) - [Leonard Ritter](http://www.leonard-ritter.com/) - [@paniq](https://github.com/paniq) diff --git a/3rdparty/bgfx/3rdparty/iconfontheaders/icons_font_awesome.h b/3rdparty/bgfx/3rdparty/iconfontheaders/icons_font_awesome.h index 346358f..534e43c 100644 --- a/3rdparty/bgfx/3rdparty/iconfontheaders/icons_font_awesome.h +++ b/3rdparty/bgfx/3rdparty/iconfontheaders/icons_font_awesome.h @@ -1,9 +1,10 @@ -// Generated by GenerateIconFontCppHeaders.py +// Generated by GenerateIconFontCppHeaders.py for language C89 // from https://raw.githubusercontent.com/FortAwesome/Font-Awesome/master/src/icons.yml +// for use with https://github.com/FortAwesome/Font-Awesome/blob/master/fonts/fontawesome-webfont.ttf #pragma once #define ICON_MIN_FA 0xf000 -#define ICON_MAX_FA 0xf295 +#define ICON_MAX_FA 0xf2e0 #define ICON_FA_GLASS "\xEF\x80\x80" #define ICON_FA_MUSIC "\xEF\x80\x81" #define ICON_FA_SEARCH "\xEF\x80\x82" @@ -387,7 +388,7 @@ #define ICON_FA_STUMBLEUPON "\xEF\x86\xA4" #define ICON_FA_DELICIOUS "\xEF\x86\xA5" #define ICON_FA_DIGG "\xEF\x86\xA6" -#define ICON_FA_PIED_PIPER "\xEF\x86\xA7" +#define ICON_FA_PIED_PIPER_PP "\xEF\x86\xA7" #define ICON_FA_PIED_PIPER_ALT "\xEF\x86\xA8" #define ICON_FA_DRUPAL "\xEF\x86\xA9" #define ICON_FA_JOOMLA "\xEF\x86\xAA" @@ -609,3 +610,73 @@ #define ICON_FA_BLUETOOTH "\xEF\x8A\x93" #define ICON_FA_BLUETOOTH_B "\xEF\x8A\x94" #define ICON_FA_PERCENT "\xEF\x8A\x95" +#define ICON_FA_GITLAB "\xEF\x8A\x96" +#define ICON_FA_WPBEGINNER "\xEF\x8A\x97" +#define ICON_FA_WPFORMS "\xEF\x8A\x98" +#define ICON_FA_ENVIRA "\xEF\x8A\x99" +#define ICON_FA_UNIVERSAL_ACCESS "\xEF\x8A\x9A" +#define ICON_FA_WHEELCHAIR_ALT "\xEF\x8A\x9B" +#define ICON_FA_QUESTION_CIRCLE_O "\xEF\x8A\x9C" +#define ICON_FA_BLIND "\xEF\x8A\x9D" +#define ICON_FA_AUDIO_DESCRIPTION "\xEF\x8A\x9E" +#define ICON_FA_VOLUME_CONTROL_PHONE "\xEF\x8A\xA0" +#define ICON_FA_BRAILLE "\xEF\x8A\xA1" +#define ICON_FA_ASSISTIVE_LISTENING_SYSTEMS "\xEF\x8A\xA2" +#define ICON_FA_AMERICAN_SIGN_LANGUAGE_INTERPRETING "\xEF\x8A\xA3" +#define ICON_FA_DEAF "\xEF\x8A\xA4" +#define ICON_FA_GLIDE "\xEF\x8A\xA5" +#define ICON_FA_GLIDE_G "\xEF\x8A\xA6" +#define ICON_FA_SIGN_LANGUAGE "\xEF\x8A\xA7" +#define ICON_FA_LOW_VISION "\xEF\x8A\xA8" +#define ICON_FA_VIADEO "\xEF\x8A\xA9" +#define ICON_FA_VIADEO_SQUARE "\xEF\x8A\xAA" +#define ICON_FA_SNAPCHAT "\xEF\x8A\xAB" +#define ICON_FA_SNAPCHAT_GHOST "\xEF\x8A\xAC" +#define ICON_FA_SNAPCHAT_SQUARE "\xEF\x8A\xAD" +#define ICON_FA_PIED_PIPER "\xEF\x8A\xAE" +#define ICON_FA_FIRST_ORDER "\xEF\x8A\xB0" +#define ICON_FA_YOAST "\xEF\x8A\xB1" +#define ICON_FA_THEMEISLE "\xEF\x8A\xB2" +#define ICON_FA_GOOGLE_PLUS_OFFICIAL "\xEF\x8A\xB3" +#define ICON_FA_FONT_AWESOME "\xEF\x8A\xB4" +#define ICON_FA_HANDSHAKE_O "\xEF\x8A\xB5" +#define ICON_FA_ENVELOPE_OPEN "\xEF\x8A\xB6" +#define ICON_FA_ENVELOPE_OPEN_O "\xEF\x8A\xB7" +#define ICON_FA_LINODE "\xEF\x8A\xB8" +#define ICON_FA_ADDRESS_BOOK "\xEF\x8A\xB9" +#define ICON_FA_ADDRESS_BOOK_O "\xEF\x8A\xBA" +#define ICON_FA_ADDRESS_CARD "\xEF\x8A\xBB" +#define ICON_FA_ADDRESS_CARD_O "\xEF\x8A\xBC" +#define ICON_FA_USER_CIRCLE "\xEF\x8A\xBD" +#define ICON_FA_USER_CIRCLE_O "\xEF\x8A\xBE" +#define ICON_FA_USER_O "\xEF\x8B\x80" +#define ICON_FA_ID_BADGE "\xEF\x8B\x81" +#define ICON_FA_ID_CARD "\xEF\x8B\x82" +#define ICON_FA_ID_CARD_O "\xEF\x8B\x83" +#define ICON_FA_QUORA "\xEF\x8B\x84" +#define ICON_FA_FREE_CODE_CAMP "\xEF\x8B\x85" +#define ICON_FA_TELEGRAM "\xEF\x8B\x86" +#define ICON_FA_THERMOMETER_FULL "\xEF\x8B\x87" +#define ICON_FA_THERMOMETER_THREE_QUARTERS "\xEF\x8B\x88" +#define ICON_FA_THERMOMETER_HALF "\xEF\x8B\x89" +#define ICON_FA_THERMOMETER_QUARTER "\xEF\x8B\x8A" +#define ICON_FA_THERMOMETER_EMPTY "\xEF\x8B\x8B" +#define ICON_FA_SHOWER "\xEF\x8B\x8C" +#define ICON_FA_BATH "\xEF\x8B\x8D" +#define ICON_FA_PODCAST "\xEF\x8B\x8E" +#define ICON_FA_WINDOW_MAXIMIZE "\xEF\x8B\x90" +#define ICON_FA_WINDOW_MINIMIZE "\xEF\x8B\x91" +#define ICON_FA_WINDOW_RESTORE "\xEF\x8B\x92" +#define ICON_FA_WINDOW_CLOSE "\xEF\x8B\x93" +#define ICON_FA_WINDOW_CLOSE_O "\xEF\x8B\x94" +#define ICON_FA_BANDCAMP "\xEF\x8B\x95" +#define ICON_FA_GRAV "\xEF\x8B\x96" +#define ICON_FA_ETSY "\xEF\x8B\x97" +#define ICON_FA_IMDB "\xEF\x8B\x98" +#define ICON_FA_RAVELRY "\xEF\x8B\x99" +#define ICON_FA_EERCAST "\xEF\x8B\x9A" +#define ICON_FA_MICROCHIP "\xEF\x8B\x9B" +#define ICON_FA_SNOWFLAKE_O "\xEF\x8B\x9C" +#define ICON_FA_SUPERPOWERS "\xEF\x8B\x9D" +#define ICON_FA_WPEXPLORER "\xEF\x8B\x9E" +#define ICON_FA_MEETUP "\xEF\x8B\xA0" diff --git a/3rdparty/bgfx/3rdparty/iconfontheaders/icons_kenney.h b/3rdparty/bgfx/3rdparty/iconfontheaders/icons_kenney.h index dbbcb48..0d9d313 100644 --- a/3rdparty/bgfx/3rdparty/iconfontheaders/icons_kenney.h +++ b/3rdparty/bgfx/3rdparty/iconfontheaders/icons_kenney.h @@ -1,5 +1,6 @@ -// Generated by GenerateIconFontCppHeaders.py +// Generated by GenerateIconFontCppHeaders.py for language C89 // from https://raw.githubusercontent.com/SamBrishes/kenney-icon-font/master/css/kenney-icons.css +// for use with https://github.com/SamBrishes/kenney-icon-font/blob/master/fonts/kenney-icon-font.ttf #pragma once #define ICON_MIN_KI 0xe900 diff --git a/3rdparty/bgfx/3rdparty/iconfontheaders/icons_material_design.h b/3rdparty/bgfx/3rdparty/iconfontheaders/icons_material_design.h index 00ec9f6..68213f6 100644 --- a/3rdparty/bgfx/3rdparty/iconfontheaders/icons_material_design.h +++ b/3rdparty/bgfx/3rdparty/iconfontheaders/icons_material_design.h @@ -1,5 +1,6 @@ -// Generated by GenerateIconFontCppHeaders.py +// Generated by GenerateIconFontCppHeaders.py for language C89 // from https://raw.githubusercontent.com/google/material-design-icons/master/iconfont/codepoints +// for use with https://github.com/google/material-design-icons/blob/master/iconfont/MaterialIcons-Regular.ttf #pragma once #define ICON_MIN_MD 0xe000 diff --git a/3rdparty/bgfx/3rdparty/nvtt/nvtt.cpp b/3rdparty/bgfx/3rdparty/nvtt/nvtt.cpp index 404b557..51a2bce 100644 --- a/3rdparty/bgfx/3rdparty/nvtt/nvtt.cpp +++ b/3rdparty/bgfx/3rdparty/nvtt/nvtt.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ diff --git a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui.cpp b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui.cpp index 5a0698c..db8ce64 100644 --- a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui.cpp +++ b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui.cpp @@ -5,6 +5,7 @@ // Newcomers, read 'Programmer guide' below for notes on how to setup 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 // 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 @@ -280,7 +281,6 @@ 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! - 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! @@ -464,7 +464,7 @@ ISSUES & TODO-LIST ================== Issue numbers (#) refer to github issues listed at https://github.com/ocornut/imgui/issues - The list below consist mostly of notes of things to do before they are requested/discussed by users (at that point it usually happens on the github) + 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. @@ -655,6 +655,7 @@ #pragma GCC diagnostic ignored "-Wformat" // warning: format '%p' expects argument of type 'void*', but argument 6 has type 'ImGuiWindow*' #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 #endif //------------------------------------------------------------------------- @@ -688,9 +689,9 @@ static void AddWindowToSortedBuffer(ImVector& out_sort static ImGuiIniData* FindWindowSettings(const char* name); static ImGuiIniData* AddWindowSettings(const char* name); -static void LoadSettings(); -static void SaveSettings(); -static void MarkSettingsDirty(); +static void LoadIniSettingsFromDisk(const char* ini_filename); +static void SaveIniSettingsToDisk(const char* ini_filename); +static void MarkIniSettingsDirty(); static void PushColumnClipRect(int column_index = -1); static ImRect GetVisibleRect(); @@ -724,14 +725,19 @@ static void ImeSetInputScreenPosFn_DefaultImpl(int x, int y); // Context //----------------------------------------------------------------------------- -// Default context, default font atlas. +// 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 ImGuiContext GImDefaultContext; static ImFontAtlas GImDefaultFontAtlas; -// Current context pointer. Implicitely used by all ImGui functions. Always assumed to be != NULL. Change to a different context by calling ImGui::SetCurrentContext() -// 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 (A) having two instances of the ImGui code under different namespaces or (B) change this variable to be TLS. Further development aim to make this context pointer explicit to all calls. Also read https://github.com/ocornut/imgui/issues/586 +// 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() +// 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 +#ifndef GImGui +static ImGuiContext GImDefaultContext; ImGuiContext* GImGui = &GImDefaultContext; +#endif //----------------------------------------------------------------------------- // User facing structures @@ -1292,16 +1298,32 @@ void ImGui::ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& } } +FILE* ImFileOpen(const char* filename, const char* mode) +{ +#if defined(_WIN32) && !defined(__CYGWIN__) + // We need a fopen() wrapper because MSVC/Windows fopen doesn't handle UTF-8 filenames. Converting both strings from UTF-8 to wchar format (using a single allocation, because we can) + const int filename_wsize = ImTextCountCharsFromUtf8(filename, NULL) + 1; + const int mode_wsize = ImTextCountCharsFromUtf8(mode, NULL) + 1; + ImVector buf; + buf.resize(filename_wsize + mode_wsize); + ImTextStrFromUtf8(&buf[0], filename_wsize, filename, NULL); + ImTextStrFromUtf8(&buf[filename_wsize], mode_wsize, mode, NULL); + return _wfopen((wchar_t*)&buf[0], (wchar_t*)&buf[filename_wsize]); +#else + return fopen(filename, mode); +#endif +} + // Load file content into memory // Memory allocated with ImGui::MemAlloc(), must be freed by user using ImGui::MemFree() -void* ImLoadFileToMemory(const char* filename, const char* file_open_mode, int* out_file_size, int padding_bytes) +void* ImFileLoadToMemory(const char* filename, const char* file_open_mode, int* out_file_size, int padding_bytes) { IM_ASSERT(filename && file_open_mode); if (out_file_size) *out_file_size = 0; FILE* f; - if ((f = fopen(filename, file_open_mode)) == NULL) + if ((f = ImFileOpen(filename, file_open_mode)) == NULL) return NULL; long file_size_signed; @@ -1841,7 +1863,7 @@ ImGuiWindow* ImGui::GetParentWindow() return g.CurrentWindowStack[(unsigned int)g.CurrentWindowStack.Size - 2]; } -void ImGui::SetActiveID(ImGuiID id, ImGuiWindow* window = NULL) +void ImGui::SetActiveID(ImGuiID id, ImGuiWindow* window) { ImGuiContext& g = *GImGui; g.ActiveId = id; @@ -1852,6 +1874,11 @@ void ImGui::SetActiveID(ImGuiID id, ImGuiWindow* window = NULL) g.ActiveIdWindow = window; } +void ImGui::ClearActiveID() +{ + SetActiveID(0, NULL); +} + void ImGui::SetHoveredID(ImGuiID id) { ImGuiContext& g = *GImGui; @@ -2048,7 +2075,11 @@ ImGuiContext* ImGui::GetCurrentContext() void ImGui::SetCurrentContext(ImGuiContext* ctx) { +#ifdef IMGUI_SET_CURRENT_CONTEXT_FUNC + IMGUI_SET_CURRENT_CONTEXT_FUNC(ctx); // For custom thread-based hackery you may want to have control over this. +#else GImGui = ctx; +#endif } ImGuiContext* ImGui::CreateContext(void* (*malloc_fn)(size_t), void (*free_fn)(void*)) @@ -2067,7 +2098,7 @@ void ImGui::DestroyContext(ImGuiContext* ctx) ctx->~ImGuiContext(); free_fn(ctx); if (GImGui == ctx) - GImGui = NULL; + SetCurrentContext(NULL); } ImGuiIO& ImGui::GetIO() @@ -2114,7 +2145,7 @@ void ImGui::NewFrame() IM_PLACEMENT_NEW(g.LogClipboard) ImGuiTextBuffer(); IM_ASSERT(g.Settings.empty()); - LoadSettings(); + LoadIniSettingsFromDisk(g.IO.IniFilename); g.Initialized = true; } @@ -2183,7 +2214,7 @@ void ImGui::NewFrame() g.HoveredId = 0; g.HoveredIdAllowOverlap = false; if (!g.ActiveIdIsAlive && g.ActiveIdPreviousFrame == g.ActiveId && g.ActiveId != 0) - SetActiveID(0); + ClearActiveID(); g.ActiveIdPreviousFrame = g.ActiveId; g.ActiveIdIsAlive = false; g.ActiveIdIsJustActivated = false; @@ -2199,14 +2230,14 @@ void ImGui::NewFrame() if (!(g.MovedWindow->Flags & ImGuiWindowFlags_NoMove)) { g.MovedWindow->PosFloat += g.IO.MouseDelta; - if (!(g.MovedWindow->Flags & ImGuiWindowFlags_NoSavedSettings)) - MarkSettingsDirty(); + if (!(g.MovedWindow->Flags & ImGuiWindowFlags_NoSavedSettings) && (g.IO.MouseDelta.x != 0.0f || g.IO.MouseDelta.y != 0.0f)) + MarkIniSettingsDirty(); } FocusWindow(g.MovedWindow); } else { - SetActiveID(0); + ClearActiveID(); g.MovedWindow = NULL; g.MovedWindowMoveId = 0; } @@ -2222,7 +2253,7 @@ void ImGui::NewFrame() { g.SettingsDirtyTimer -= g.IO.DeltaTime; if (g.SettingsDirtyTimer <= 0.0f) - SaveSettings(); + 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 @@ -2349,7 +2380,7 @@ void ImGui::Shutdown() if (!g.Initialized) return; - SaveSettings(); + SaveIniSettingsToDisk(g.IO.IniFilename); for (int i = 0; i < g.Windows.Size; i++) { @@ -2429,15 +2460,14 @@ static ImGuiIniData* AddWindowSettings(const char* name) // Zero-tolerance, poor-man .ini parsing // FIXME: Write something less rubbish -static void LoadSettings() +static void LoadIniSettingsFromDisk(const char* ini_filename) { ImGuiContext& g = *GImGui; - const char* filename = g.IO.IniFilename; - if (!filename) + if (!ini_filename) return; int file_size; - char* file_data = (char*)ImLoadFileToMemory(filename, "rb", &file_size, 1); + char* file_data = (char*)ImFileLoadToMemory(ini_filename, "rb", &file_size, 1); if (!file_data) return; @@ -2475,11 +2505,11 @@ static void LoadSettings() ImGui::MemFree(file_data); } -static void SaveSettings() +static void SaveIniSettingsToDisk(const char* ini_filename) { ImGuiContext& g = *GImGui; - const char* filename = g.IO.IniFilename; - if (!filename) + g.SettingsDirtyTimer = 0.0f; + if (!ini_filename) return; // Gather data from windows that were active during this session @@ -2496,7 +2526,7 @@ static void SaveSettings() // Write .ini file // If a window wasn't opened in this session we preserve its settings - FILE* f = fopen(filename, "wt"); + FILE* f = ImFileOpen(ini_filename, "wt"); if (!f) return; for (int i = 0; i != g.Settings.Size; i++) @@ -2517,7 +2547,7 @@ static void SaveSettings() fclose(f); } -static void MarkSettingsDirty() +static void MarkIniSettingsDirty() { ImGuiContext& g = *GImGui; if (g.SettingsDirtyTimer <= 0.0f) @@ -3989,7 +4019,7 @@ bool ImGui::Begin(const char* name, bool* p_open, const ImVec2& size_on_first_us { window->Collapsed = !window->Collapsed; if (!(flags & ImGuiWindowFlags_NoSavedSettings)) - MarkSettingsDirty(); + MarkIniSettingsDirty(); FocusWindow(window); } } @@ -4064,7 +4094,7 @@ 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; if (!(flags & ImGuiWindowFlags_NoSavedSettings)) - MarkSettingsDirty(); + MarkIniSettingsDirty(); } } @@ -4193,15 +4223,15 @@ bool ImGui::Begin(const char* name, bool* p_open, const ImVec2& size_on_first_us // Manual auto-fit when double-clicking ApplySizeFullWithConstraint(window, size_auto_fit); if (!(flags & ImGuiWindowFlags_NoSavedSettings)) - MarkSettingsDirty(); - SetActiveID(0); + MarkIniSettingsDirty(); + 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)) - MarkSettingsDirty(); + MarkIniSettingsDirty(); } window->Size = window->SizeFull; @@ -4543,7 +4573,7 @@ void ImGui::FocusWindow(ImGuiWindow* window) // Steal focus on active widgets if (window->Flags & ImGuiWindowFlags_Popup) // FIXME: This statement should be unnecessary. Need further testing before removing it.. if (g.ActiveId != 0 && g.ActiveIdWindow && g.ActiveIdWindow->RootWindow != window) - SetActiveID(0); + ClearActiveID(); // Bring to front if ((window->Flags & ImGuiWindowFlags_NoBringToFrontOnFocus) || g.Windows.back() == window) @@ -5517,7 +5547,7 @@ bool ImGui::ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool { if (out_hovered) *out_hovered = false; if (out_held) *out_held = false; - if (g.ActiveId == id) SetActiveID(0); + if (g.ActiveId == id) ClearActiveID(); return false; } @@ -5545,14 +5575,14 @@ 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; - SetActiveID(0); + ClearActiveID(); FocusWindow(window); } if ((flags & ImGuiButtonFlags_PressedOnRelease) && g.IO.MouseReleased[0]) { if (!((flags & ImGuiButtonFlags_Repeat) && g.IO.MouseDownDurationPrev[0] >= g.IO.KeyRepeatDelay)) // Repeat mode trumps pressed = true; - SetActiveID(0); + ClearActiveID(); } // 'Repeat' mode acts when held regardless of _PressedOn flags (see table above). @@ -5574,7 +5604,7 @@ bool ImGui::ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool if (hovered && (flags & ImGuiButtonFlags_PressedOnClickRelease)) if (!((flags & ImGuiButtonFlags_Repeat) && g.IO.MouseDownDurationPrev[0] >= g.IO.KeyRepeatDelay)) // Repeat mode trumps pressed = true; - SetActiveID(0); + ClearActiveID(); } } @@ -5780,7 +5810,7 @@ void ImGui::LogToFile(int max_depth, const char* filename) return; } - g.LogFile = fopen(filename, "ab"); + g.LogFile = ImFileOpen(filename, "ab"); if (!g.LogFile) { IM_ASSERT(g.LogFile != NULL); // Consider this an error @@ -6426,6 +6456,31 @@ float ImGui::RoundScalar(float value, int decimal_precision) return negative ? -value : value; } +static inline float SliderBehaviorCalcRatioFromValue(float v, float v_min, float v_max, float power, float linear_zero_pos) +{ + if (v_min == v_max) + return 0.0f; + + const bool is_non_linear = (power < 1.0f-0.00001f) || (power > 1.0f+0.00001f); + const float v_clamped = (v_min < v_max) ? ImClamp(v, v_min, v_max) : ImClamp(v, v_max, v_min); + if (is_non_linear) + { + if (v_clamped < 0.0f) + { + const float f = 1.0f - (v_clamped - v_min) / (ImMin(0.0f,v_max) - v_min); + return (1.0f - powf(f, 1.0f/power)) * linear_zero_pos; + } + else + { + const float f = (v_clamped - ImMax(0.0f,v_min)) / (v_max - ImMax(0.0f,v_min)); + return linear_zero_pos + powf(f, 1.0f/power) * (1.0f - linear_zero_pos); + } + } + + // Linear slider + return (v_clamped - v_min) / (v_max - v_min); +} + bool ImGui::SliderBehavior(const ImRect& frame_bb, ImGuiID id, float* v, float v_min, float v_max, float power, int decimal_precision, ImGuiSliderFlags flags) { ImGuiContext& g = *GImGui; @@ -6435,7 +6490,7 @@ bool ImGui::SliderBehavior(const ImRect& frame_bb, ImGuiID id, float* v, float v // Draw frame RenderFrame(frame_bb.Min, frame_bb.Max, GetColorU32(ImGuiCol_FrameBg), true, style.FrameRounding); - const bool is_non_linear = fabsf(power - 1.0f) > 0.0001f; + const bool is_non_linear = (power < 1.0f-0.00001f) || (power > 1.0f+0.00001f); const bool is_horizontal = (flags & ImGuiSliderFlags_Vertical) == 0; const float grab_padding = 2.0f; @@ -6444,7 +6499,7 @@ bool ImGui::SliderBehavior(const ImRect& frame_bb, ImGuiID id, float* v, float v if (decimal_precision > 0) grab_sz = ImMin(style.GrabMinSize, slider_sz); else - grab_sz = ImMin(ImMax(1.0f * (slider_sz / (v_max-v_min+1.0f)), style.GrabMinSize), slider_sz); // Integer sliders, if possible have the grab size represent 1 unit + 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 const float slider_usable_sz = slider_sz - grab_sz; const float slider_usable_pos_min = (is_horizontal ? frame_bb.Min.x : frame_bb.Min.y) + grab_padding + grab_sz*0.5f; const float slider_usable_pos_max = (is_horizontal ? frame_bb.Max.x : frame_bb.Max.y) - grab_padding - grab_sz*0.5f; @@ -6471,18 +6526,18 @@ bool ImGui::SliderBehavior(const ImRect& frame_bb, ImGuiID id, float* v, float v if (g.IO.MouseDown[0]) { const float mouse_abs_pos = is_horizontal ? g.IO.MousePos.x : g.IO.MousePos.y; - float normalized_pos = ImClamp((mouse_abs_pos - slider_usable_pos_min) / slider_usable_sz, 0.0f, 1.0f); + 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; if (!is_horizontal) - normalized_pos = 1.0f - normalized_pos; + clicked_t = 1.0f - clicked_t; float new_value; if (is_non_linear) { // Account for logarithmic scale on both sides of the zero - if (normalized_pos < linear_zero_pos) + if (clicked_t < linear_zero_pos) { // Negative: rescale to the negative range before powering - float a = 1.0f - (normalized_pos / linear_zero_pos); + float a = 1.0f - (clicked_t / linear_zero_pos); a = powf(a, power); new_value = ImLerp(ImMin(v_max,0.0f), v_min, a); } @@ -6491,9 +6546,9 @@ bool ImGui::SliderBehavior(const ImRect& frame_bb, ImGuiID id, float* v, float v // Positive: rescale to the positive range before powering float a; if (fabsf(linear_zero_pos - 1.0f) > 1.e-6f) - a = (normalized_pos - linear_zero_pos) / (1.0f - linear_zero_pos); + a = (clicked_t - linear_zero_pos) / (1.0f - linear_zero_pos); else - a = normalized_pos; + a = clicked_t; a = powf(a, power); new_value = ImLerp(ImMax(v_min,0.0f), v_max, a); } @@ -6501,7 +6556,7 @@ bool ImGui::SliderBehavior(const ImRect& frame_bb, ImGuiID id, float* v, float v else { // Linear slider - new_value = ImLerp(v_min, v_max, normalized_pos); + new_value = ImLerp(v_min, v_max, clicked_t); } // Round past decimal precision @@ -6514,31 +6569,12 @@ bool ImGui::SliderBehavior(const ImRect& frame_bb, ImGuiID id, float* v, float v } else { - SetActiveID(0); + ClearActiveID(); } } // Calculate slider grab positioning - float grab_t; - if (is_non_linear) - { - float v_clamped = ImClamp(*v, v_min, v_max); - if (v_clamped < 0.0f) - { - const float f = 1.0f - (v_clamped - v_min) / (ImMin(0.0f,v_max) - v_min); - grab_t = (1.0f - powf(f, 1.0f/power)) * linear_zero_pos; - } - else - { - const float f = (v_clamped - ImMax(0.0f,v_min)) / (v_max - ImMax(0.0f,v_min)); - grab_t = linear_zero_pos + powf(f, 1.0f/power) * (1.0f - linear_zero_pos); - } - } - else - { - // Linear slider - grab_t = (ImClamp(*v, v_min, v_max) - v_min) / (v_max - v_min); - } + float grab_t = SliderBehaviorCalcRatioFromValue(*v, v_min, v_max, power, linear_zero_pos); // Draw if (!is_horizontal) @@ -6849,7 +6885,7 @@ bool ImGui::DragBehavior(const ImRect& frame_bb, ImGuiID id, float* v, float v_s } else { - SetActiveID(0); + ClearActiveID(); } } @@ -7752,7 +7788,7 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2 { // Release focus when we click outside if (g.ActiveId == id) - SetActiveID(0); + ClearActiveID(); } bool value_changed = false; @@ -7854,7 +7890,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)) { - SetActiveID(0); + ClearActiveID(); enter_pressed = true; } else if (is_editable) @@ -7870,7 +7906,7 @@ 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)) { SetActiveID(0); cancel_edit = true; } + 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; } @@ -8374,7 +8410,7 @@ bool ImGui::InputInt4(const char* label, int v[4], ImGuiInputTextFlags extra_fla static bool Items_ArrayGetter(void* data, int idx, const char** out_text) { - const char** items = (const char**)data; + const char* const* items = (const char* const*)data; if (out_text) *out_text = items[idx]; return true; @@ -8401,7 +8437,7 @@ static bool Items_SingleStringGetter(void* data, int idx, const char** out_text) } // Combo box helper allowing to pass an array of strings. -bool ImGui::Combo(const char* label, int* current_item, const char** items, int items_count, int height_in_items) +bool ImGui::Combo(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items) { const bool value_changed = Combo(label, current_item, Items_ArrayGetter, (void*)items, items_count, height_in_items); return value_changed; @@ -8465,7 +8501,7 @@ bool ImGui::Combo(const char* label, int* current_item, bool (*items_getter)(voi SetHoveredID(id); if (g.IO.MouseClicked[0]) { - SetActiveID(0); + ClearActiveID(); if (IsPopupOpen(id)) { ClosePopup(id); @@ -8514,7 +8550,7 @@ bool ImGui::Combo(const char* label, int* current_item, bool (*items_getter)(voi item_text = "*Unknown item*"; if (Selectable(item_text, item_selected)) { - SetActiveID(0); + ClearActiveID(); value_changed = true; *current_item = i; } @@ -8678,7 +8714,7 @@ void ImGui::ListBoxFooter() EndGroup(); } -bool ImGui::ListBox(const char* label, int* current_item, const char** items, int items_count, int height_items) +bool ImGui::ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_items) { const bool value_changed = ListBox(label, current_item, Items_ArrayGetter, (void*)items, items_count, height_items); return value_changed; diff --git a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui.h b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui.h index 631f6c4..f698f0b 100644 --- a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui.h +++ b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui.h @@ -265,7 +265,7 @@ namespace ImGui IMGUI_API bool CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value); 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** items, int items_count, int height_in_items = -1); + 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, 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); @@ -339,7 +339,7 @@ namespace ImGui // Widgets: Selectable / Lists IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); - IMGUI_API bool ListBox(const char* label, int* current_item, const char** items, int items_count, int height_in_items = -1); + IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); IMGUI_API bool ListBox(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 ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " @@ -372,7 +372,7 @@ namespace ImGui // 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 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 (can't close them by clicking outside) + 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). @@ -790,29 +790,29 @@ struct ImGuiIO ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. // Functions - IMGUI_API void AddInputCharacter(ImWchar c); // Helper to add a new character into InputCharacters[] - IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Helper to add new characters into InputCharacters[] from an UTF-8 string - inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Helper to clear the text input buffer + IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually //------------------------------------------------------------------ - // Output - Retrieve after calling NewFrame(), you can use them to discard inputs or hide them from the rest of your application + // Output - Retrieve after calling NewFrame() //------------------------------------------------------------------ - bool WantCaptureMouse; // Mouse is hovering a window or widget is active (= ImGui will use your mouse input) - bool WantCaptureKeyboard; // Widget is active (= ImGui will use your keyboard input) - bool WantTextInput; // Some text input widget is active, which will read input characters from the InputCharacters array. - float Framerate; // Framerate estimation, in frame per second. Rolling average estimation based on IO.DeltaTime over 120 frames + 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 + 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 windows (exclude child windows) + 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. //------------------------------------------------------------------ // [Private] ImGui will maintain those fields. Forward compatibility not guaranteed! //------------------------------------------------------------------ - ImVec2 MousePosPrev; // Previous mouse position - ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are negative to allow mouse enabling/disabling. + 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) diff --git a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_demo.cpp b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_demo.cpp index 8e79d59..c08de0c 100644 --- a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_demo.cpp +++ b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_demo.cpp @@ -38,6 +38,9 @@ #pragma GCC diagnostic ignored "-Wformat-security" // warning : format string is not a string literal (potentially insecure) #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 +#if (__GNUC__ >= 6) +#pragma GCC diagnostic ignored "-Wmisleading-indentation" // warning: this 'if' clause does not guard this statement // GCC 6.0+ only. See #883 on github. +#endif #endif // Play it nice with Windows users. Notepad in 2015 still doesn't display text data with Unix-style \n. @@ -359,7 +362,7 @@ void ImGui::ShowTestWindow(bool* p_open) 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("lazy dog. This paragraph is made to fit within %.0f pixels. The quick brown fox jumps over the lazy dog.", 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(); @@ -367,7 +370,7 @@ void ImGui::ShowTestWindow(bool* p_open) 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, cccccccc,dddddddd. eeeeeeee ffffffff. gggggggg!hhhhhhhh"); + 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(); @@ -1120,7 +1123,8 @@ void ImGui::ShowTestWindow(bool* p_open) ImGui::BeginChild("scrolling", ImVec2(0, ImGui::GetItemsLineHeightWithSpacing()*7 + 30), true, ImGuiWindowFlags_HorizontalScrollbar); for (int line = 0; line < lines; line++) { - // Display random stuff + // Display random stuff (for the sake of this trivial demo we are using basic Button+SameLine. If you want to create your own time line for a real application you may be better off + // manipulating the cursor position yourself, aka using SetCursorPos/SetCursorScreenPos to position the widgets yourself. You may also want to use the lower-level ImDrawList API) int num_buttons = 10 + ((line & 1) ? line * 9 : line * 3); for (int n = 0; n < num_buttons; n++) { @@ -1178,6 +1182,8 @@ void ImGui::ShowTestWindow(bool* p_open) const char* names[] = { "Bream", "Haddock", "Mackerel", "Pollock", "Tilefish" }; static bool toggles[] = { true, false, false, false, false }; + // Simple selection popup + // (If you want to show the current selection inside the Button itself, you may want to build a string using the "###" operator to preserve a constant ID with a variable label) if (ImGui::Button("Select..")) ImGui::OpenPopup("select"); ImGui::SameLine(); @@ -1192,6 +1198,7 @@ void ImGui::ShowTestWindow(bool* p_open) ImGui::EndPopup(); } + // Showing a menu with toggles if (ImGui::Button("Toggle..")) ImGui::OpenPopup("toggle"); if (ImGui::BeginPopup("toggle")) @@ -1226,8 +1233,8 @@ void ImGui::ShowTestWindow(bool* p_open) } if (ImGui::Button("Popup Menu..")) - ImGui::OpenPopup("popup from button"); - if (ImGui::BeginPopup("popup from button")) + ImGui::OpenPopup("FilePopup"); + if (ImGui::BeginPopup("FilePopup")) { ShowExampleMenuFile(); ImGui::EndPopup(); @@ -1804,6 +1811,7 @@ void ImGui::ShowStyleEditor(ImGuiStyle* ref) ImGui::PopItemWidth(); } +// Demonstrate creating a fullscreen menu bar and populating it. static void ShowExampleAppMainMenuBar() { if (ImGui::BeginMainMenuBar()) @@ -1882,6 +1890,7 @@ static void ShowExampleMenuFile() if (ImGui::MenuItem("Quit", "Alt+F4")) {} } +// Demonstrate creating a window which gets auto-resized according to its content. static void ShowExampleAppAutoResize(bool* p_open) { if (!ImGui::Begin("Example: Auto-resizing window", p_open, ImGuiWindowFlags_AlwaysAutoResize)) @@ -1898,6 +1907,7 @@ static void ShowExampleAppAutoResize(bool* p_open) ImGui::End(); } +// Demonstrate creating a window with custom resize constraints. static void ShowExampleAppConstrainedResize(bool* p_open) { struct CustomConstraints // Helper functions to demonstrate programmatic constraints @@ -1935,6 +1945,7 @@ static void ShowExampleAppConstrainedResize(bool* p_open) ImGui::End(); } +// Demonstrate creating a simple static window with no decoration. static void ShowExampleAppFixedOverlay(bool* p_open) { ImGui::SetNextWindowPos(ImVec2(10,10)); @@ -1949,10 +1960,12 @@ static void ShowExampleAppFixedOverlay(bool* p_open) ImGui::End(); } +// Demonstrate using "##" and "###" in identifiers to manipulate ID generation. +// Read section "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." about ID. static void ShowExampleAppManipulatingWindowTitle(bool*) { // By default, Windows are uniquely identified by their title. - // You can use the "##" and "###" markers to manipulate the display/ID. Read FAQ at the top of this file! + // 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); @@ -1974,6 +1987,7 @@ static void ShowExampleAppManipulatingWindowTitle(bool*) ImGui::End(); } +// Demonstrate using the low-level ImDrawList to draw custom shapes. static void ShowExampleAppCustomRendering(bool* p_open) { ImGui::SetNextWindowSize(ImVec2(350,560), ImGuiSetCond_FirstUseEver); @@ -2073,6 +2087,7 @@ static void ShowExampleAppCustomRendering(bool* p_open) ImGui::End(); } +// Demonstrating creating a simple console window, with scrolling, filtering, completion and history. // For the console example, here we are using a more C++ like approach of declaring a class to hold the data and the functions. struct ExampleAppConsole { @@ -2302,7 +2317,7 @@ struct ExampleAppConsole for (int i = 0; i < candidates.Size && all_candidates_matches; i++) if (i == 0) c = toupper(candidates[i][match_len]); - else if (c != toupper(candidates[i][match_len])) + else if (c == 0 || c != toupper(candidates[i][match_len])) all_candidates_matches = false; if (!all_candidates_matches) break; @@ -2423,6 +2438,7 @@ struct ExampleAppLog } }; +// Demonstrate creating a simple log window with basic filtering. static void ShowExampleAppLog(bool* p_open) { static ExampleAppLog log; @@ -2440,6 +2456,7 @@ static void ShowExampleAppLog(bool* p_open) log.Draw("Example: Log", p_open); } +// Demonstrate create a window with multiple child windows. static void ShowExampleAppLayout(bool* p_open) { ImGui::SetNextWindowSize(ImVec2(500, 440), ImGuiSetCond_FirstUseEver); @@ -2485,6 +2502,7 @@ static void ShowExampleAppLayout(bool* p_open) ImGui::End(); } +// Demonstrate create a simple property editor. static void ShowExampleAppPropertyEditor(bool* p_open) { ImGui::SetNextWindowSize(ImVec2(430,450), ImGuiSetCond_FirstUseEver); @@ -2557,6 +2575,7 @@ static void ShowExampleAppPropertyEditor(bool* p_open) ImGui::End(); } +// 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); diff --git a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_draw.cpp b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_draw.cpp index 9864883..8b3b2ec 100644 --- a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_draw.cpp +++ b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_draw.cpp @@ -46,6 +46,7 @@ #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 #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 #endif //------------------------------------------------------------------------- @@ -1196,7 +1197,7 @@ ImFont* ImFontAtlas::AddFontDefault(const ImFontConfig* font_cfg_template) ImFont* ImFontAtlas::AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg_template, const ImWchar* glyph_ranges) { int data_size = 0; - void* data = ImLoadFileToMemory(filename, "rb", &data_size, 0); + void* data = ImFileLoadToMemory(filename, "rb", &data_size, 0); if (!data) { IM_ASSERT(0); // Could not load file. @@ -1852,6 +1853,7 @@ const char* ImFont::CalcWordWrapPositionA(float scale, const char* text, const c { line_width += blank_width; blank_width = 0.0f; + word_end = s; } blank_width += char_width; inside_word = false; diff --git a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_internal.h b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_internal.h index 08f206a..effc5ce 100644 --- a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_internal.h +++ b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_internal.h @@ -67,7 +67,9 @@ namespace ImGuiStb // Context //----------------------------------------------------------------------------- -extern IMGUI_API ImGuiContext* GImGui; // current implicit ImGui context pointer +#ifndef GImGui +extern IMGUI_API ImGuiContext* GImGui; // Current implicit ImGui context pointer +#endif //----------------------------------------------------------------------------- // Helpers @@ -86,7 +88,8 @@ 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* ImLoadFileToMemory(const char* filename, const char* file_open_mode, int* out_file_size = NULL, int padding_bytes = 0); +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); static inline bool ImCharIsSpace(int c) { return c == ' ' || c == '\t' || c == 0x3000; } 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; } @@ -488,9 +491,11 @@ struct ImGuiContext SetNextWindowSizeCond = 0; SetNextWindowContentSizeCond = 0; SetNextWindowCollapsedCond = 0; - SetNextWindowFocus = false; + SetNextWindowSizeConstraintRect = ImRect(); SetNextWindowSizeConstraintCallback = NULL; SetNextWindowSizeConstraintCallbackUserData = NULL; + SetNextWindowSizeConstraint = false; + SetNextWindowFocus = false; SetNextTreeNodeOpenVal = false; SetNextTreeNodeOpenCond = 0; @@ -597,6 +602,7 @@ struct IMGUI_API ImGuiDrawContext memset(StackSizesBackup, 0, sizeof(StackSizesBackup)); IndentX = 0.0f; + GroupOffsetX = 0.0f; ColumnsOffsetX = 0.0f; ColumnsCurrent = 0; ColumnsCount = 1; @@ -704,6 +710,7 @@ namespace ImGui 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 SetActiveID(ImGuiID id, ImGuiWindow* window); + IMGUI_API void ClearActiveID(); IMGUI_API void SetHoveredID(ImGuiID id); IMGUI_API void KeepAliveID(ImGuiID id); diff --git a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_user.h b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_user.h index 45ae2c0..0a2602a 100644 --- a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_user.h +++ b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_user.h @@ -42,7 +42,9 @@ namespace ImGui } // namespace ImGui +#include "widgets/color_picker.h" +#include "widgets/dock.h" #include "widgets/file_list.h" -#include "widgets/memory_editor.h" #include "widgets/gizmo.h" -#include "widgets/dock.h" \ No newline at end of file +#include "widgets/memory_editor.h" +#include "widgets/range_slider.h" diff --git a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_user.inl b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_user.inl index b88fdd0..ef20f29 100644 --- a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_user.inl +++ b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_user.inl @@ -71,8 +71,9 @@ namespace ImGui } } // namespace - +#include "widgets/color_picker.inl" +#include "widgets/dock.inl" #include "widgets/file_list.inl" -#include "widgets/memory_editor.inl" #include "widgets/gizmo.inl" -#include "widgets/dock.inl" \ No newline at end of file +#include "widgets/memory_editor.inl" +#include "widgets/range_slider.inl" diff --git a/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/color_picker.h b/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/color_picker.h new file mode 100644 index 0000000..72a630d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/color_picker.h @@ -0,0 +1,24 @@ +namespace ImGui +{ + bool ColorPicker4(float* col, bool show_alpha); + bool ColorPicker3(float col[3]); + + inline bool ColorEdit4(const char* label, uint32_t* _rgba, bool show_alpha = true) + { + uint8_t* rgba = (uint8_t*)_rgba; + float col[4] = + { + rgba[0]/255.0f, + rgba[1]/255.0f, + rgba[2]/255.0f, + rgba[3]/255.0f, + }; + bool result = ColorEdit4(label, col, show_alpha); + rgba[0] = uint8_t(col[0]*255.0f); + rgba[1] = uint8_t(col[1]*255.0f); + rgba[2] = uint8_t(col[2]*255.0f); + rgba[3] = uint8_t(col[3]*255.0f); + return result; + } + +} // namespace ImGui diff --git a/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/color_picker.inl b/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/color_picker.inl new file mode 100644 index 0000000..a297eb3 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/color_picker.inl @@ -0,0 +1,122 @@ +// https://github.com/ocornut/imgui/issues/346#issuecomment-171961296 +// [src] https://github.com/ocornut/imgui/issues/346 + +namespace ImGui +{ + bool ColorPicker4(float* col, bool show_alpha) + { + ImGuiIO& io = ImGui::GetIO(); + ImGuiStyle& style = ImGui::GetStyle(); + ImDrawList* draw_list = ImGui::GetWindowDrawList(); + + // Setup + ImVec2 picker_pos = ImGui::GetCursorScreenPos(); + ImVec2 sv_picker_size = ImVec2(256.0f, 256.0f); // Saturation/Value picking box + float bars_width = ImGui::GetWindowFontSize() + style.FramePadding.y*2.0f; // Width of Hue/Alpha picking bars (using Framepadding.y to match the ColorButton sides) + float bar0_pos_x = picker_pos.x + sv_picker_size.x + style.ItemInnerSpacing.x; + float bar1_pos_x = bar0_pos_x + bars_width + style.ItemInnerSpacing.x; + + float H,S,V; + ImGui::ColorConvertRGBtoHSV(col[0], col[1], col[2], H, S, V); + + // Color matrix logic + bool value_changed = false, hsv_changed = false; + ImGui::BeginGroup(); + ImGui::InvisibleButton("sv", sv_picker_size); + if (ImGui::IsItemActive()) + { + S = ImSaturate((io.MousePos.x - picker_pos.x) / (sv_picker_size.x-1)); + V = 1.0f - ImSaturate((io.MousePos.y - picker_pos.y) / (sv_picker_size.y-1)); + value_changed = hsv_changed = true; + } + + // Hue bar logic + ImGui::SetCursorScreenPos(ImVec2(bar0_pos_x, picker_pos.y)); + ImGui::InvisibleButton("hue", ImVec2(bars_width, sv_picker_size.y)); + if (ImGui::IsItemActive()) + { + H = ImSaturate((io.MousePos.y - picker_pos.y) / (sv_picker_size.y-1)); + value_changed = hsv_changed = true; + } + + // Alpha bar logic + if (show_alpha) + { + ImGui::SetCursorScreenPos(ImVec2(bar1_pos_x, picker_pos.y)); + ImGui::InvisibleButton("alpha", ImVec2(bars_width, sv_picker_size.y)); + if (ImGui::IsItemActive()) + { + col[3] = 1.0f - ImSaturate((io.MousePos.y - picker_pos.y) / (sv_picker_size.y-1)); + value_changed = true; + } + } + + // Convert back to RGB + if (hsv_changed) + ImGui::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 or H,S,V color editor + ImGui::PushItemWidth((show_alpha ? bar1_pos_x : bar0_pos_x) + bars_width - picker_pos.x); + value_changed |= show_alpha ? ImGui::ColorEdit4("##edit", col) : ImGui::ColorEdit3("##edit", col); + ImGui::PopItemWidth(); + + // Try to cancel hue wrap (after ColorEdit), if any + if (value_changed) + { + float new_H, new_S, new_V; + ImGui::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) + ImGui::ColorConvertHSVtoRGB(H, S, new_V <= 0 ? V * 0.5f : new_V, col[0], col[1], col[2]); + else if (new_S <= 0) + ImGui::ColorConvertHSVtoRGB(H, new_S <= 0 ? S * 0.5f : new_S, new_V, col[0], col[1], col[2]); + } + } + + // Render hue bar + ImU32 hue_colors[] = { 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) }; + for (int i = 0; i < 6; ++i) + { + draw_list->AddRectFilledMultiColor( + ImVec2(bar0_pos_x, picker_pos.y + i * (sv_picker_size.y / 6)), + ImVec2(bar0_pos_x + bars_width, picker_pos.y + (i + 1) * (sv_picker_size.y / 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.y + 0.5f); + draw_list->AddLine(ImVec2(bar0_pos_x - 1, bar0_line_y), ImVec2(bar0_pos_x + bars_width + 1, bar0_line_y), IM_COL32_WHITE); + + // Render alpha bar + if (show_alpha) + { + float alpha = ImSaturate(col[3]); + float bar1_line_y = (float)(int)(picker_pos.y + (1.0f-alpha) * sv_picker_size.y + 0.5f); + draw_list->AddRectFilledMultiColor(ImVec2(bar1_pos_x, picker_pos.y), ImVec2(bar1_pos_x + bars_width, picker_pos.y + sv_picker_size.y), IM_COL32_WHITE, IM_COL32_WHITE, IM_COL32_BLACK, IM_COL32_BLACK); + draw_list->AddLine(ImVec2(bar1_pos_x - 1, bar1_line_y), ImVec2(bar1_pos_x + bars_width + 1, bar1_line_y), IM_COL32_WHITE); + } + + // Render color matrix + ImVec4 hue_color_f(1, 1, 1, 1); + ImGui::ColorConvertHSVtoRGB(H, 1, 1, hue_color_f.x, hue_color_f.y, hue_color_f.z); + ImU32 hue_color32 = ImGui::ColorConvertFloat4ToU32(hue_color_f); + draw_list->AddRectFilledMultiColor(picker_pos, picker_pos + sv_picker_size, IM_COL32_WHITE, hue_color32, hue_color32, IM_COL32_WHITE); + draw_list->AddRectFilledMultiColor(picker_pos, picker_pos + sv_picker_size, IM_COL32_BLACK_TRANS, IM_COL32_BLACK_TRANS, IM_COL32_BLACK, IM_COL32_BLACK); + + // Render cross-hair + const float CROSSHAIR_SIZE = 7.0f; + ImVec2 p((float)(int)(picker_pos.x + S * sv_picker_size.x + 0.5f), (float)(int)(picker_pos.y + (1 - V) * sv_picker_size.y + 0.5f)); + draw_list->AddLine(ImVec2(p.x - CROSSHAIR_SIZE, p.y), ImVec2(p.x - 2, p.y), IM_COL32_WHITE); + draw_list->AddLine(ImVec2(p.x + CROSSHAIR_SIZE, p.y), ImVec2(p.x + 2, p.y), IM_COL32_WHITE); + draw_list->AddLine(ImVec2(p.x, p.y + CROSSHAIR_SIZE), ImVec2(p.x, p.y + 2), IM_COL32_WHITE); + draw_list->AddLine(ImVec2(p.x, p.y - CROSSHAIR_SIZE), ImVec2(p.x, p.y - 2), IM_COL32_WHITE); + ImGui::EndGroup(); + + return value_changed; + } + + bool ColorPicker3(float col[3]) + { + return ColorPicker4(col, false); + } + +} // namespace ImGui diff --git a/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/gizmo.h b/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/gizmo.h index 7b398fe..caac986 100644 --- a/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/gizmo.h +++ b/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/gizmo.h @@ -143,7 +143,7 @@ namespace ImGuizmo { TRANSLATE, ROTATE, - SCALE + SCALE, }; enum MODE @@ -152,5 +152,5 @@ namespace ImGuizmo WORLD }; - void Manipulate(const float *view, const float *projection, OPERATION operation, MODE mode, float *matrix, float *deltaMatrix = 0, float *snap = 0); + void Manipulate(const float *view, const float *projection, OPERATION operation, MODE mode, float *matrix, float *deltaMatrix = 0, float *snap = 0, float *localBounds = NULL, float *boundsSnap = NULL); }; diff --git a/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/gizmo.inl b/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/gizmo.inl index 0ae83f5..d9342bb 100644 --- a/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/gizmo.inl +++ b/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/gizmo.inl @@ -89,7 +89,7 @@ namespace ImGuizmo float LengthSq() const { return (x*x + y*y + z*z); }; vec_t Normalize() { (*this) *= (1.f / Length()); return (*this); } vec_t Normalize(const vec_t& v) { this->Set(v.x, v.y, v.z, v.w); this->Normalize(); return (*this); } - + vec_t Abs() const; void Cross(const vec_t& v) { vec_t res; @@ -136,7 +136,7 @@ namespace ImGuizmo vec_t vec_t::operator - (const vec_t& v) const { return makeVect(x - v.x, y - v.y, z - v.z, w - v.w); } vec_t vec_t::operator + (const vec_t& v) const { return makeVect(x + v.x, y + v.y, z + v.z, w + v.w); } vec_t vec_t::operator * (const vec_t& v) const { return makeVect(x * v.x, y * v.y, z * v.z, w * v.w); } - + vec_t vec_t::Abs() const { return makeVect(fabsf(x), fabsf(y), fabsf(z)); } ImVec2 operator+ (const ImVec2& a, const ImVec2& b) { return ImVec2(a.x + b.x, a.y + b.y); } vec_t Normalized(const vec_t& v) { vec_t res; res = v; res.Normalize(); return res; } @@ -178,6 +178,7 @@ namespace ImGuizmo { vec_t right, up, dir, position; } v; + vec_t component[4]; }; matrix_t(const matrix_t& other) { memcpy(&m16[0], &other.m16[0], sizeof(float) * 16); } @@ -239,7 +240,6 @@ namespace ImGuizmo } float Inverse(const matrix_t &srcMatrix, bool affine = false); - float Inverse(bool affine = false); void SetToIdentity() { v.right.Set(1.f, 0.f, 0.f, 0.f); @@ -481,11 +481,12 @@ namespace ImGuizmo SCALE_Y, SCALE_Z, SCALE_XYZ, + BOUNDS }; struct Context { - Context() : mbUsing(false), mbEnable(true) + Context() : mbUsing(false), mbEnable(true), mbUsingBounds(false) { } @@ -540,6 +541,17 @@ namespace ImGuizmo bool mBelowPlaneLimit[3]; float mAxisFactor[3]; + // bounds stretching + vec_t mBoundsPivot; + vec_t mBoundsAnchor; + vec_t mBoundsPlan; + vec_t mBoundsLocalPivot; + int mBoundsBestAxis; + int mBoundsAxis[2]; + bool mbUsingBounds; + matrix_t mBoundsMatrix; + + // int mCurrentOperation; }; @@ -625,7 +637,7 @@ namespace ImGuizmo bool IsUsing() { - return gContext.mbUsing; + return gContext.mbUsing||gContext.mbUsingBounds; } bool IsOver() @@ -636,8 +648,11 @@ namespace ImGuizmo void Enable(bool enable) { gContext.mbEnable = enable; - if (!enable) - gContext.mbUsing = false; + if (!enable) + { + gContext.mbUsing = false; + gContext.mbUsingBounds = false; + } } static float GetUniform(const vec_t& position, const matrix_t& mat) @@ -770,22 +785,22 @@ namespace ImGuizmo } } - static void ComputeSnap(float*value, float *snap) + static void ComputeSnap(float*value, float snap) { - if (*snap <= FLT_EPSILON) + if (snap <= FLT_EPSILON) return; - float modulo = fmodf(*value, *snap); - float moduloRatio = fabsf(modulo) / *snap; + float modulo = fmodf(*value, snap); + float moduloRatio = fabsf(modulo) / snap; if (moduloRatio < snapTension) *value -= modulo; else if (moduloRatio >(1.f - snapTension)) - *value = *value - modulo + *snap * ((*value<0.f) ? -1.f : 1.f); + *value = *value - modulo + snap * ((*value<0.f) ? -1.f : 1.f); } static void ComputeSnap(vec_t& value, float *snap) { for (int i = 0; i < 3; i++) { - ComputeSnap(&value[i], &snap[i]); + ComputeSnap(&value[i], snap[i]); } } @@ -996,6 +1011,178 @@ namespace ImGuizmo } } + static void HandleAndDrawLocalBounds(float *bounds, matrix_t *matrix, float *snapValues) + { + ImGuiIO& io = ImGui::GetIO(); + ImDrawList* drawList = gContext.mDrawList; + + // compute best projection axis + vec_t bestAxisWorldDirection; + int bestAxis = gContext.mBoundsBestAxis; + if (!gContext.mbUsingBounds) + { + + float bestDot = 0.f; + for (unsigned int i = 0; i < 3; i++) + { + vec_t dirPlaneNormalWorld; + dirPlaneNormalWorld.TransformVector(directionUnary[i], gContext.mModelSource); + dirPlaneNormalWorld.Normalize(); + + float dt = Dot(Normalized(gContext.mCameraEye - gContext.mModelSource.v.position), dirPlaneNormalWorld); + if (fabsf(dt) >= bestDot) + { + bestDot = fabsf(dt); + bestAxis = i; + bestAxisWorldDirection = dirPlaneNormalWorld; + } + } + } + + // corners + vec_t aabb[4]; + + int secondAxis = (bestAxis + 1) % 3; + int thirdAxis = (bestAxis + 2) % 3; + + for (int i = 0; i < 4; i++) + { + aabb[i][3] = aabb[i][bestAxis] = 0.f; + aabb[i][secondAxis] = bounds[secondAxis + 3 * (i >> 1)]; + aabb[i][thirdAxis] = bounds[thirdAxis + 3 * ((i >> 1) ^ (i & 1))]; + } + + // draw bounds + unsigned int anchorAlpha = gContext.mbEnable ? 0xFF000000 : 0x80000000; + + matrix_t boundsMVP = gContext.mModelSource * gContext.mViewProjection; + for (int i = 0; i < 4;i++) + { + ImVec2 worldBound1 = worldToPos(aabb[i], boundsMVP); + ImVec2 worldBound2 = worldToPos(aabb[(i+1)%4], boundsMVP); + float boundDistance = sqrtf(ImLengthSqr(worldBound1 - worldBound2)); + int stepCount = (int)(boundDistance / 10.f); + float stepLength = 1.f / (float)stepCount; + for (int j = 0; j < stepCount; j++) + { + float t1 = (float)j * stepLength; + float t2 = (float)j * stepLength + stepLength * 0.5f; + ImVec2 worldBoundSS1 = ImLerp(worldBound1, worldBound2, ImVec2(t1, t1)); + ImVec2 worldBoundSS2 = ImLerp(worldBound1, worldBound2, ImVec2(t2, t2)); + drawList->AddLine(worldBoundSS1, worldBoundSS2, 0xAAAAAA + anchorAlpha, 3.f); + } + vec_t midPoint = (aabb[i] + aabb[(i + 1) % 4] ) * 0.5f; + ImVec2 midBound = worldToPos(midPoint, boundsMVP); + static const float AnchorBigRadius = 8.f; + static const float AnchorSmallRadius = 6.f; + bool overBigAnchor = ImLengthSqr(worldBound1 - io.MousePos) <= (AnchorBigRadius*AnchorBigRadius); + bool overSmallAnchor = ImLengthSqr(midBound - io.MousePos) <= (AnchorBigRadius*AnchorBigRadius); + + + unsigned int bigAnchorColor = overBigAnchor ? selectionColor : (0xAAAAAA + anchorAlpha); + unsigned int smallAnchorColor = overSmallAnchor ? selectionColor : (0xAAAAAA + anchorAlpha); + + drawList->AddCircleFilled(worldBound1, AnchorBigRadius, bigAnchorColor); + drawList->AddCircleFilled(midBound, AnchorSmallRadius, smallAnchorColor); + int oppositeIndex = (i + 2) % 4; + // big anchor on corners + if (!gContext.mbUsingBounds && gContext.mbEnable && overBigAnchor && io.MouseDown[0]) + { + gContext.mBoundsPivot.TransformPoint(aabb[(i + 2) % 4], gContext.mModelSource); + gContext.mBoundsAnchor.TransformPoint(aabb[i], gContext.mModelSource); + gContext.mBoundsPlan = BuildPlan(gContext.mBoundsAnchor, bestAxisWorldDirection); + gContext.mBoundsBestAxis = bestAxis; + gContext.mBoundsAxis[0] = secondAxis; + gContext.mBoundsAxis[1] = thirdAxis; + + gContext.mBoundsLocalPivot.Set(0.f); + gContext.mBoundsLocalPivot[secondAxis] = aabb[oppositeIndex][secondAxis]; + gContext.mBoundsLocalPivot[thirdAxis] = aabb[oppositeIndex][thirdAxis]; + + gContext.mbUsingBounds = true; + gContext.mBoundsMatrix = gContext.mModelSource; + } + // small anchor on middle of segment + if (!gContext.mbUsingBounds && gContext.mbEnable && overSmallAnchor && io.MouseDown[0]) + { + vec_t midPointOpposite = (aabb[(i + 2) % 4] + aabb[(i + 3) % 4]) * 0.5f; + gContext.mBoundsPivot.TransformPoint(midPointOpposite, gContext.mModelSource); + gContext.mBoundsAnchor.TransformPoint(midPoint, gContext.mModelSource); + gContext.mBoundsPlan = BuildPlan(gContext.mBoundsAnchor, bestAxisWorldDirection); + gContext.mBoundsBestAxis = bestAxis; + int indices[] = { secondAxis , thirdAxis }; + gContext.mBoundsAxis[0] = indices[i%2]; + gContext.mBoundsAxis[1] = -1; + + gContext.mBoundsLocalPivot.Set(0.f); + gContext.mBoundsLocalPivot[gContext.mBoundsAxis[0]] = aabb[oppositeIndex][indices[i % 2]];// bounds[gContext.mBoundsAxis[0]] * (((i + 1) & 2) ? 1.f : -1.f); + + gContext.mbUsingBounds = true; + gContext.mBoundsMatrix = gContext.mModelSource; + } + } + + if (gContext.mbUsingBounds) + { + matrix_t scale; + scale.SetToIdentity(); + + // compute projected mouse position on plan + const float len = IntersectRayPlane(gContext.mRayOrigin, gContext.mRayVector, gContext.mBoundsPlan); + vec_t newPos = gContext.mRayOrigin + gContext.mRayVector * len; + + // compute a reference and delta vectors base on mouse move + vec_t deltaVector = (newPos - gContext.mBoundsPivot).Abs(); + vec_t referenceVector = (gContext.mBoundsAnchor - gContext.mBoundsPivot).Abs(); + + // for 1 or 2 axes, compute a ratio that's used for scale and snap it based on resulting length + for (int i = 0; i < 2; i++) + { + int axisIndex = gContext.mBoundsAxis[i]; + if (axisIndex == -1) + continue; + + float ratioAxis = 1.f; + vec_t axisDir = gContext.mBoundsMatrix.component[axisIndex].Abs(); + + float dtAxis = axisDir.Dot(referenceVector); + float boundSize = bounds[axisIndex + 3] - bounds[axisIndex]; + if (dtAxis > FLT_EPSILON) + ratioAxis = axisDir.Dot(deltaVector) / dtAxis; + + if (snapValues) + { + float length = boundSize * ratioAxis; + ComputeSnap(&length, snapValues[axisIndex]); + if (boundSize > FLT_EPSILON) + ratioAxis = length / boundSize; + } + scale.component[axisIndex] *= ratioAxis; + } + + // transform matrix + matrix_t preScale, postScale; + preScale.Translation(-gContext.mBoundsLocalPivot); + postScale.Translation(gContext.mBoundsLocalPivot); + matrix_t res = preScale * scale * postScale * gContext.mBoundsMatrix; + *matrix = res; + + // info text + char tmps[512]; + ImVec2 destinationPosOnScreen = worldToPos(gContext.mModel.v.position, gContext.mViewProjection); + ImFormatString(tmps, sizeof(tmps), "X: %.2f Y: %.2f Z:%.2f" + , (bounds[3] - bounds[0]) * gContext.mBoundsMatrix.component[0].Length() * scale.component[0].Length() + , (bounds[4] - bounds[1]) * gContext.mBoundsMatrix.component[1].Length() * scale.component[1].Length() + , (bounds[5] - bounds[2]) * gContext.mBoundsMatrix.component[2].Length() * scale.component[2].Length() + ); + drawList->AddText(ImVec2(destinationPosOnScreen.x + 15, destinationPosOnScreen.y + 15), 0xFF000000, tmps); + drawList->AddText(ImVec2(destinationPosOnScreen.x + 14, destinationPosOnScreen.y + 14), 0xFFFFFFFF, tmps); + } + + if (!io.MouseDown[0]) + gContext.mbUsingBounds = false; + } + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // @@ -1311,7 +1498,7 @@ namespace ImGuizmo if (snap) { float snapInRadian = snap[0] * DEG2RAD; - ComputeSnap(&gContext.mRotationAngle, &snapInRadian); + ComputeSnap(&gContext.mRotationAngle, snapInRadian); } vec_t rotationAxisLocalSpace; @@ -1393,7 +1580,7 @@ namespace ImGuizmo mat.v.position.Set(translation[0], translation[1], translation[2], 1.f); } - void Manipulate(const float *view, const float *projection, OPERATION operation, MODE mode, float *matrix, float *deltaMatrix, float *snap) + void Manipulate(const float *view, const float *projection, OPERATION operation, MODE mode, float *matrix, float *deltaMatrix, float *snap, float *localBounds, float *boundsSnap) { ComputeContext(view, projection, matrix, mode); @@ -1411,32 +1598,41 @@ namespace ImGuizmo int type = NONE; if (gContext.mbEnable) { - switch (operation) - { - case ROTATE: - HandleRotation(matrix, deltaMatrix, type, snap); - break; - case TRANSLATE: - HandleTranslation(matrix, deltaMatrix, type, snap); - break; - case SCALE: - HandleScale(matrix, deltaMatrix, type, snap); - break; - } + if (!gContext.mbUsingBounds) + { + switch (operation) + { + case ROTATE: + HandleRotation(matrix, deltaMatrix, type, snap); + break; + case TRANSLATE: + HandleTranslation(matrix, deltaMatrix, type, snap); + break; + case SCALE: + HandleScale(matrix, deltaMatrix, type, snap); + break; + } + } } - switch (operation) - { - case ROTATE: - DrawRotationGizmo(type); - break; - case TRANSLATE: - DrawTranslationGizmo(type); - break; - case SCALE: - DrawScaleGizmo(type); - break; - } + if (localBounds && !gContext.mbUsing) + HandleAndDrawLocalBounds(localBounds, (matrix_t*)matrix, boundsSnap); + + if (!gContext.mbUsingBounds) + { + switch (operation) + { + case ROTATE: + DrawRotationGizmo(type); + break; + case TRANSLATE: + DrawTranslationGizmo(type); + break; + case SCALE: + DrawScaleGizmo(type); + break; + } + } } void DrawCube(const float *view, const float *projection, float *matrix) @@ -1492,4 +1688,3 @@ namespace ImGuizmo } } }; - diff --git a/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/range_slider.h b/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/range_slider.h new file mode 100644 index 0000000..a74da43 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/range_slider.h @@ -0,0 +1,5 @@ +namespace ImGui +{ + IMGUI_API bool RangeSliderFloat(const char* label, float* v1, float* v2, float v_min, float v_max, const char* display_format = "(%.3f, %.3f)", float power = 1.0f); + +} // namespace ImGui diff --git a/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/range_slider.inl b/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/range_slider.inl new file mode 100644 index 0000000..e4851a0 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/range_slider.inl @@ -0,0 +1,210 @@ +// https://github.com/ocornut/imgui/issues/76 +// Taken from: https://github.com/wasikuss/imgui/commit/a50515ace6d9a62ebcd69817f1da927d31c39bb1 + +namespace ImGui +{ + +// ~80% common code with ImGui::SliderBehavior +bool RangeSliderBehavior(const ImRect& frame_bb, ImGuiID id, float* v1, float* v2, float v_min, float v_max, float power, int decimal_precision, ImGuiSliderFlags flags) +{ + ImGuiContext& g = *GImGui; + ImGuiWindow* window = GetCurrentWindow(); + const ImGuiStyle& style = g.Style; + + // Draw frame + RenderFrame(frame_bb.Min, frame_bb.Max, GetColorU32(ImGuiCol_FrameBg), true, style.FrameRounding); + + const bool is_non_linear = (power < 1.0f-0.00001f) || (power > 1.0f+0.00001f); + const bool is_horizontal = (flags & ImGuiSliderFlags_Vertical) == 0; + + 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) + 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 + const float slider_usable_sz = slider_sz - grab_sz; + const float slider_usable_pos_min = (is_horizontal ? frame_bb.Min.x : frame_bb.Min.y) + grab_padding + grab_sz*0.5f; + const float slider_usable_pos_max = (is_horizontal ? frame_bb.Max.x : frame_bb.Max.y) - grab_padding - grab_sz*0.5f; + + // For logarithmic sliders that cross over sign boundary we want the exponential increase to be symmetric around 0.0f + float linear_zero_pos = 0.0f; // 0.0->1.0f + if (v_min * v_max < 0.0f) + { + // Different sign + const float linear_dist_min_to_0 = powf(fabsf(0.0f - v_min), 1.0f/power); + const float linear_dist_max_to_0 = powf(fabsf(v_max - 0.0f), 1.0f/power); + linear_zero_pos = linear_dist_min_to_0 / (linear_dist_min_to_0+linear_dist_max_to_0); + } + else + { + // Same sign + linear_zero_pos = v_min < 0.0f ? 1.0f : 0.0f; + } + + // Process clicking on the slider + bool value_changed = false; + if (g.ActiveId == id) + { + 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; + if (!is_horizontal) + clicked_t = 1.0f - clicked_t; + + float new_value; + if (is_non_linear) + { + // Account for logarithmic scale on both sides of the zero + if (clicked_t < linear_zero_pos) + { + // Negative: rescale to the negative range before powering + float a = 1.0f - (clicked_t / linear_zero_pos); + a = powf(a, power); + new_value = ImLerp(ImMin(v_max,0.0f), v_min, a); + } + else + { + // Positive: rescale to the positive range before powering + float a; + if (fabsf(linear_zero_pos - 1.0f) > 1.e-6f) + a = (clicked_t - linear_zero_pos) / (1.0f - linear_zero_pos); + else + a = clicked_t; + a = powf(a, power); + new_value = ImLerp(ImMax(v_min,0.0f), v_max, a); + } + } + else + { + // Linear slider + new_value = ImLerp(v_min, v_max, clicked_t); + } + + // Round past decimal precision + new_value = RoundScalar(new_value, decimal_precision); + if (*v1 != new_value || *v2 != new_value) + { + if (fabsf(*v1 - new_value) < fabsf(*v2 - new_value)) + { + *v1 = new_value; + } + else + { + *v2 = new_value; + } + value_changed = true; + } + } + else + { + ClearActiveID(); + } + } + + // Calculate slider grab positioning + float grab_t = SliderBehaviorCalcRatioFromValue(*v1, v_min, v_max, power, linear_zero_pos); + + // Draw + if (!is_horizontal) + grab_t = 1.0f - grab_t; + float grab_pos = ImLerp(slider_usable_pos_min, slider_usable_pos_max, grab_t); + ImRect grab_bb1; + if (is_horizontal) + grab_bb1 = ImRect(ImVec2(grab_pos - grab_sz*0.5f, frame_bb.Min.y + grab_padding), ImVec2(grab_pos + grab_sz*0.5f, frame_bb.Max.y - grab_padding)); + else + grab_bb1 = ImRect(ImVec2(frame_bb.Min.x + grab_padding, grab_pos - grab_sz*0.5f), ImVec2(frame_bb.Max.x - grab_padding, grab_pos + grab_sz*0.5f)); + window->DrawList->AddRectFilled(grab_bb1.Min, grab_bb1.Max, GetColorU32(g.ActiveId == id ? ImGuiCol_SliderGrabActive : ImGuiCol_SliderGrab), style.GrabRounding); + + // Calculate slider grab positioning + grab_t = SliderBehaviorCalcRatioFromValue(*v2, v_min, v_max, power, linear_zero_pos); + + // Draw + if (!is_horizontal) + grab_t = 1.0f - grab_t; + grab_pos = ImLerp(slider_usable_pos_min, slider_usable_pos_max, grab_t); + ImRect grab_bb2; + if (is_horizontal) + grab_bb2 = ImRect(ImVec2(grab_pos - grab_sz*0.5f, frame_bb.Min.y + grab_padding), ImVec2(grab_pos + grab_sz*0.5f, frame_bb.Max.y - grab_padding)); + else + grab_bb2 = ImRect(ImVec2(frame_bb.Min.x + grab_padding, grab_pos - grab_sz*0.5f), ImVec2(frame_bb.Max.x - grab_padding, grab_pos + grab_sz*0.5f)); + window->DrawList->AddRectFilled(grab_bb2.Min, grab_bb2.Max, GetColorU32(g.ActiveId == id ? ImGuiCol_SliderGrabActive : ImGuiCol_SliderGrab), style.GrabRounding); + + ImRect connector(grab_bb1.Min, grab_bb2.Max); + connector.Min.x += grab_sz; + connector.Min.y += grab_sz*0.3f; + connector.Max.x -= grab_sz; + connector.Max.y -= grab_sz*0.3f; + + window->DrawList->AddRectFilled(connector.Min, connector.Max, GetColorU32(ImGuiCol_SliderGrab), style.GrabRounding); + + return value_changed; +} + +// ~95% common code with ImGui::SliderFloat +bool RangeSliderFloat(const char* label, float* v1, float* v2, float v_min, float v_max, const char* display_format, float power) +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return false; + + ImGuiContext& g = *GImGui; + const ImGuiStyle& style = g.Style; + const ImGuiID id = window->GetID(label); + const float w = CalcItemWidth(); + + const ImVec2 label_size = CalcTextSize(label, NULL, true); + 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)); + + // NB- we don't call ItemSize() yet because we may turn into a text edit box below + if (!ItemAdd(total_bb, &id)) + { + ItemSize(total_bb, style.FramePadding.y); + return false; + } + + const bool hovered = IsHovered(frame_bb, id); + if (hovered) + SetHoveredID(id); + + if (!display_format) + display_format = "(%.3f, %.3f)"; + int decimal_precision = ParseFormatPrecision(display_format, 3); + + // 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); + 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; + g.ScalarAsInputTextId = 0; + } + } + if (start_text_input || (g.ActiveId == id && g.ScalarAsInputTextId == id)) + return InputScalarAsWidgetReplacement(frame_bb, label, ImGuiDataType_Float, v1, id, decimal_precision); + + ItemSize(total_bb, style.FramePadding.y); + + // Actual slider behavior + render grab + const bool value_changed = RangeSliderBehavior(frame_bb, id, v1, v2, v_min, v_max, power, decimal_precision, 0); + + // Display value using user-provided display format so user can add prefix/suffix/decorations to the value. + char value_buf[64]; + const char* value_buf_end = value_buf + ImFormatString(value_buf, IM_ARRAYSIZE(value_buf), display_format, *v1, *v2); + RenderTextClipped(frame_bb.Min, frame_bb.Max, value_buf, value_buf_end, NULL, ImVec2(0.5f,0.5f)); + + if (label_size.x > 0.0f) + RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y), label); + + return value_changed; +} + +} // namespace ImGui diff --git a/3rdparty/bgfx/3rdparty/remotery/lib/Remotery.c b/3rdparty/bgfx/3rdparty/remotery/lib/Remotery.c index 4dc2bf4..74b351f 100644 --- a/3rdparty/bgfx/3rdparty/remotery/lib/Remotery.c +++ b/3rdparty/bgfx/3rdparty/remotery/lib/Remotery.c @@ -1,5 +1,5 @@ // -// Copyright 2014-2016 Celtoys Ltd +// 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. @@ -27,6 +27,8 @@ @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 @@ -34,7 +36,6 @@ @WEBSOCKETS: WebSockets @MESSAGEQ: Multiple producer, single consumer message queue @NETWORK: Network Server - @JSON: Basic, text-based JSON serialisation @SAMPLE: Base Sample Description (CPU by default) @SAMPLETREE: A tree of samples with their allocator @TSAMPLER: Per-Thread Sampler @@ -42,6 +43,7 @@ @CUDA: CUDA event sampling @D3D11: Direct3D 11 event sampling @OPENGL: OpenGL event sampling + @METAL: Metal event sampling */ #define RMT_IMPL @@ -140,6 +142,7 @@ static rmtBool g_SettingsInitialized = RMT_FALSE; #endif + rmtU8 minU8(rmtU8 a, rmtU8 b) { return a < b ? a : b; @@ -283,7 +286,7 @@ static void usTimer_Init(usTimer* timer) struct timespec tv; clock_gettime(CLOCK_REALTIME, &tv); - timer->counter_start = (rmtU64)(tv.tv_sec * 1000000) + (rmtU64)(tv.tv_nsec * 0.001); + timer->counter_start = (rmtU64)(tv.tv_sec * (rmtU64)1000000) + (rmtU64)(tv.tv_nsec * 0.001); #endif } @@ -309,7 +312,7 @@ static rmtU64 usTimer_Get(usTimer* timer) struct timespec tv; clock_gettime(CLOCK_REALTIME, &tv); - return ((rmtU64)(tv.tv_sec * 1000000) + (rmtU64)(tv.tv_nsec * 0.001)) - timer->counter_start; + return ((rmtU64)(tv.tv_sec * (rmtU64)1000000) + (rmtU64)(tv.tv_nsec * 0.001)) - timer->counter_start; #endif } @@ -480,6 +483,8 @@ static void WriteFence() { #if defined(RMT_PLATFORM_WINDOWS) && !defined(__MINGW32__) _WriteBarrier(); +#elif defined (__clang__) + __asm__ volatile("" : : : "memory"); #else asm volatile ("" : : : "memory"); #endif @@ -866,11 +871,11 @@ static void VirtualMirrorBuffer_Destructor(VirtualMirrorBuffer* buffer) */ -struct Thread; -typedef rmtError(*ThreadProc)(struct Thread* thread); +typedef struct Thread_t rmtThread; +typedef rmtError(*ThreadProc)(rmtThread* thread); -typedef struct Thread +struct Thread_t { // OS-specific data #if defined(RMT_PLATFORM_WINDOWS) @@ -891,14 +896,14 @@ typedef struct Thread // External threads can set this to request an exit volatile rmtBool request_exit; -} Thread; +}; #if defined(RMT_PLATFORM_WINDOWS) static DWORD WINAPI ThreadProcWindows(LPVOID lpParameter) { - Thread* thread = (Thread*)lpParameter; + rmtThread* thread = (rmtThread*)lpParameter; assert(thread != NULL); thread->error = thread->callback(thread); return thread->error == RMT_ERROR_NONE ? 1 : 0; @@ -907,7 +912,7 @@ typedef struct Thread #else static void* StartFunc( void* pArgs ) { - Thread* thread = (Thread*)pArgs; + rmtThread* thread = (rmtThread*)pArgs; assert(thread != NULL); thread->error = thread->callback(thread); return NULL; // returned error not use, check thread->error. @@ -915,7 +920,7 @@ typedef struct Thread #endif -static int Thread_Valid(Thread* thread) +static int rmtThread_Valid(rmtThread* thread) { assert(thread != NULL); @@ -927,7 +932,7 @@ static int Thread_Valid(Thread* thread) } -static rmtError Thread_Constructor(Thread* thread, ThreadProc callback, void* param) +static rmtError rmtThread_Constructor(rmtThread* thread, ThreadProc callback, void* param) { assert(thread != NULL); @@ -968,7 +973,7 @@ static rmtError Thread_Constructor(Thread* thread, ThreadProc callback, void* pa } -static void Thread_RequestExit(Thread* thread) +static void rmtThread_RequestExit(rmtThread* thread) { // Not really worried about memory barriers or delayed visibility to the target thread assert(thread != NULL); @@ -976,9 +981,9 @@ static void Thread_RequestExit(Thread* thread) } -static void Thread_Join(Thread* thread) +static void rmtThread_Join(rmtThread* thread) { - assert(Thread_Valid(thread)); + assert(rmtThread_Valid(thread)); #if defined(RMT_PLATFORM_WINDOWS) WaitForSingleObject(thread->handle, INFINITE); @@ -988,15 +993,15 @@ static void Thread_Join(Thread* thread) } -static void Thread_Destructor(Thread* thread) +static void rmtThread_Destructor(rmtThread* thread) { assert(thread != NULL); - if (Thread_Valid(thread)) + if (rmtThread_Valid(thread)) { // Shutdown the thread - Thread_RequestExit(thread); - Thread_Join(thread); + rmtThread_RequestExit(thread); + rmtThread_Join(thread); // OS-specific release of thread resources @@ -1334,7 +1339,6 @@ strcpy_s(char *dest, rsize_t dmax, const char *src) return RCNEGATE(EOK); } - /* hold base of dest in case src was not copied */ if (dest < src) { overlap_bumper = src; @@ -1380,7 +1384,7 @@ strcpy_s(char *dest, rsize_t dmax, const char *src) return RCNEGATE(ESNOSPC); } - +#if !(defined(RMT_PLATFORM_LINUX) && RMT_USE_POSIX_THREADNAMES) /* very simple integer to hex */ static const char* hex_encoding_table = "0123456789ABCDEF"; @@ -1417,6 +1421,7 @@ static void itoahex_s( char *dest, rsize_t dmax, rmtS32 value ) } } +#endif /* ------------------------------------------------------------------------------------------------------------------------ @@ -1676,13 +1681,338 @@ static rmtError Buffer_Write(Buffer* buffer, void* data, rmtU32 length) } -static rmtError Buffer_WriteString(Buffer* buffer, rmtPStr string) +static rmtError Buffer_WriteStringZ(Buffer* buffer, rmtPStr string) { assert(string != NULL); - return Buffer_Write(buffer, (void*)string, (rmtU32)strnlen_s(string, 2048)); + 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); + } +} + /* ------------------------------------------------------------------------------------------------------------------------ @@ -1692,6 +2022,8 @@ static rmtError Buffer_WriteString(Buffer* buffer, rmtPStr string) ------------------------------------------------------------------------------------------------------------------------ */ + + #ifndef RMT_PLATFORM_WINDOWS typedef int SOCKET; #define INVALID_SOCKET -1 @@ -1699,6 +2031,8 @@ static rmtError Buffer_WriteString(Buffer* buffer, rmtPStr string) #define SD_SEND SHUT_WR #define closesocket close #endif + + typedef struct { SOCKET socket; @@ -2272,7 +2606,7 @@ static void calc(const void* src, const int bytelength, unsigned char* hash) { w[lastBlockBytes >> 2] |= (unsigned int) sarray[lastBlockBytes + currentBlock] << ((3 - (lastBlockBytes & 3)) << 3); } - w[lastBlockBytes >> 2] |= 0x80 << ((3 - (lastBlockBytes & 3)) << 3); + w[lastBlockBytes >> 2] |= 0x80U << ((3 - (lastBlockBytes & 3)) << 3); if (endCurrentBlock >= 56) { innerHash(result, w); @@ -2958,7 +3292,7 @@ typedef struct Message // Multiple producer, single consumer message queue that uses its own data buffer // to store the message data. -typedef struct MessageQueue +typedef struct rmtMessageQueue { rmtU32 size; @@ -2972,10 +3306,10 @@ typedef struct MessageQueue rmtU32 read_pos; rmtU32 write_pos; -} MessageQueue; +} rmtMessageQueue; -static rmtError MessageQueue_Constructor(MessageQueue* queue, rmtU32 size) +static rmtError rmtMessageQueue_Constructor(rmtMessageQueue* queue, rmtU32 size) { rmtError error; @@ -3002,14 +3336,14 @@ static rmtError MessageQueue_Constructor(MessageQueue* queue, rmtU32 size) } -static void MessageQueue_Destructor(MessageQueue* queue) +static void rmtMessageQueue_Destructor(rmtMessageQueue* queue) { assert(queue != NULL); Delete(VirtualMirrorBuffer, queue->data); } -static rmtU32 MessageQueue_SizeForPayload(rmtU32 payload_size) +static rmtU32 rmtMessageQueue_SizeForPayload(rmtU32 payload_size) { // Add message header and align for ARM platforms rmtU32 size = sizeof(Message) + payload_size; @@ -3018,11 +3352,11 @@ static rmtU32 MessageQueue_SizeForPayload(rmtU32 payload_size) } -static Message* MessageQueue_AllocMessage(MessageQueue* queue, rmtU32 payload_size, struct ThreadSampler* thread_sampler) +static Message* rmtMessageQueue_AllocMessage(rmtMessageQueue* queue, rmtU32 payload_size, struct ThreadSampler* thread_sampler) { Message* msg; - rmtU32 write_size = MessageQueue_SizeForPayload(payload_size); + rmtU32 write_size = rmtMessageQueue_SizeForPayload(payload_size); assert(queue != NULL); @@ -3052,7 +3386,7 @@ static Message* MessageQueue_AllocMessage(MessageQueue* queue, rmtU32 payload_si } -static void MessageQueue_CommitMessage(Message* message, MessageID id) +static void rmtMessageQueue_CommitMessage(Message* message, MessageID id) { assert(message != NULL); @@ -3065,7 +3399,7 @@ static void MessageQueue_CommitMessage(Message* message, MessageID id) } -Message* MessageQueue_PeekNextMessage(MessageQueue* queue) +Message* rmtMessageQueue_PeekNextMessage(rmtMessageQueue* queue) { Message* ptr; rmtU32 r; @@ -3088,7 +3422,7 @@ Message* MessageQueue_PeekNextMessage(MessageQueue* queue) } -static void MessageQueue_ConsumeNextMessage(MessageQueue* queue, Message* message) +static void rmtMessageQueue_ConsumeNextMessage(rmtMessageQueue* queue, Message* message) { rmtU32 message_size; @@ -3104,7 +3438,7 @@ static void MessageQueue_ConsumeNextMessage(MessageQueue* queue, Message* messag // 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 = MessageQueue_SizeForPayload(message->payload_size); + message_size = rmtMessageQueue_SizeForPayload(message->payload_size); memset(message, MsgID_NotReady, message_size); // Ensure clear completes before advancing the read position @@ -3113,6 +3447,13 @@ static void MessageQueue_ConsumeNextMessage(MessageQueue* queue, Message* messag } +static rmtBool rmtMessageQueue_IsEmpty(rmtMessageQueue* queue) +{ + assert(queue != NULL); + return queue->write_pos - queue->read_pos == 0; +} + + /* ------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------ @@ -3122,6 +3463,8 @@ static void MessageQueue_ConsumeNextMessage(MessageQueue* queue, Message* messag */ +typedef rmtError (*Server_ReceiveHandler)(void*, char*, rmtU32); + typedef struct { @@ -3133,6 +3476,10 @@ typedef struct rmtU16 port; rmtBool limit_connections_to_localhost; + + // Handler for receiving messages from the client + Server_ReceiveHandler receive_handler; + void* receive_handler_context; } Server; @@ -3142,7 +3489,7 @@ static rmtError Server_CreateListenSocket(Server* server, rmtU16 port, rmtBool l New_1(WebSocket, server->listen_socket, NULL); if (error == RMT_ERROR_NONE) - error = WebSocket_RunServer(server->listen_socket, port, limit_connections_to_localhost, WEBSOCKET_TEXT); + error = WebSocket_RunServer(server->listen_socket, port, limit_connections_to_localhost, WEBSOCKET_BINARY); return error; } @@ -3156,6 +3503,8 @@ static rmtError Server_Constructor(Server* server, rmtU16 port, rmtBool limit_co 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); @@ -3230,19 +3579,11 @@ static rmtError Server_ReceiveMessage(Server* server, char message_first_byte, r if (message_length < 4) return RMT_ERROR_NONE; - // Silly check for console input message ('CONI') - // (don't want to add safe strcmp to lib yet) - if (message_data[0] == 'C' && message_data[1] == 'O' && message_data[2] == 'N' && message_data[3] == '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); + // Dispatch to handler + if (server->receive_handler) + error = server->receive_handler(server->receive_handler_context, message_data, message_length); - rmt_LogText("Console message received..."); - rmt_LogText(message_data + 4); - } - - return RMT_ERROR_NONE; + return error; } @@ -3275,29 +3616,43 @@ static void Server_Update(Server* server) else { - // Check for any incoming messages - 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); - } - else if (error == RMT_ERROR_SOCKET_RECV_NO_DATA) - { - // no data available - } - else if (error == RMT_ERROR_SOCKET_RECV_TIMEOUT) - { - // data not available yet, can afford to ignore as we're only reading the first byte - } - 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; } } @@ -3305,119 +3660,14 @@ static void Server_Update(Server* server) cur_time = msTimer_Get(); if (cur_time - server->last_ping_time > 1000) { - rmtPStr ping_message = "{ \"id\": \"PING\" }"; - Server_Send(server, ping_message, (rmtU32)strlen(ping_message), 20); + rmtPStr ping_message = "PING"; + Server_Send(server, ping_message, (rmtU32)strlen(ping_message), 4); server->last_ping_time = cur_time; } } -/* ------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------- - @JSON: Basic, text-based JSON serialisation ------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------- -*/ - - - -// -// Simple macro for hopefully making the serialisation a little clearer by hiding the error handling -// -#define JSON_ERROR_CHECK(stmt) { error = stmt; if (error != RMT_ERROR_NONE) return error; } - - - -static rmtError json_OpenObject(Buffer* buffer) -{ - return Buffer_Write(buffer, (void*)"{", 1); -} - - -static rmtError json_CloseObject(Buffer* buffer) -{ - return Buffer_Write(buffer, (void*)"}", 1); -} - - -static rmtError json_Comma(Buffer* buffer) -{ - return Buffer_Write(buffer, (void*)",", 1); -} - - -static rmtError json_Colon(Buffer* buffer) -{ - return Buffer_Write(buffer, (void*)":", 1); -} - - -static rmtError json_String(Buffer* buffer, rmtPStr string) -{ - rmtError error; - JSON_ERROR_CHECK(Buffer_Write(buffer, (void*)"\"", 1)); - JSON_ERROR_CHECK(Buffer_WriteString(buffer, string)); - return Buffer_Write(buffer, (void*)"\"", 1); -} - - -static rmtError json_FieldStr(Buffer* buffer, rmtPStr name, rmtPStr value) -{ - rmtError error; - JSON_ERROR_CHECK(json_String(buffer, name)); - JSON_ERROR_CHECK(json_Colon(buffer)); - return json_String(buffer, value); -} - - -static rmtError json_FieldU64(Buffer* buffer, rmtPStr name, rmtU64 value) -{ - static char temp_buf[32]; - - char* end; - char* tptr; - - json_String(buffer, name); - json_Colon(buffer); - - if (value == 0) - return Buffer_Write(buffer, (void*)"0", 1); - - // Null terminate and start at the end - end = temp_buf + sizeof(temp_buf) - 1; - *end = 0; - tptr = end; - - // Loop through the value with radix 10 - do - { - rmtU64 next_value = value / 10; - *--tptr = (char)('0' + (value - next_value * 10)); - value = next_value; - } while (value); - - return Buffer_Write(buffer, tptr, (rmtU32)(end - tptr)); -} - - -static rmtError json_OpenArray(Buffer* buffer, rmtPStr name) -{ - rmtError error; - JSON_ERROR_CHECK(json_String(buffer, name)); - JSON_ERROR_CHECK(json_Colon(buffer)); - return Buffer_Write(buffer, (void*)"[", 1); -} - - -static rmtError json_CloseArray(Buffer* buffer) -{ - return Buffer_Write(buffer, (void*)"]", 1); -} - - - /* ------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------ @@ -3437,6 +3687,7 @@ enum SampleType SampleType_CUDA, SampleType_D3D11, SampleType_OpenGL, + SampleType_Metal, SampleType_Count, }; @@ -3451,8 +3702,7 @@ typedef struct Sample // Used to anonymously copy sample data without knowning its type rmtU32 size_bytes; - // Sample name and unique hash - char name[SAMPLE_NAME_LEN]; + // Hash generated from sample name rmtU32 name_hash; // Unique, persistent ID among all samples @@ -3487,7 +3737,6 @@ static rmtError Sample_Constructor(Sample* sample) sample->type = SampleType_CPU; sample->size_bytes = sizeof(Sample); - sample->name[0] = 0; sample->name_hash = 0; sample->unique_id = 0; sample->unique_id_html_colour[0] = '#'; @@ -3512,12 +3761,8 @@ static void Sample_Destructor(Sample* sample) } -static void Sample_Prepare(Sample* sample, rmtPStr name, rmtU32 name_hash, Sample* parent) +static void Sample_Prepare(Sample* sample, rmtU32 name_hash, Sample* parent) { - // Copy sample name away for two reasons: - // 1. It allows dynamic sprintf-style strings to be transient - // 2. The Remotery thread can still inspect the sample even when the source module has been unloaded - strcpy_s(sample->name, sizeof(sample->name), name); sample->name_hash = name_hash; sample->unique_id = 0; sample->parent = parent; @@ -3531,53 +3776,39 @@ static void Sample_Prepare(Sample* sample, rmtPStr name, rmtU32 name_hash, Sampl } -static rmtError json_SampleArray(Buffer* buffer, Sample* first_sample, rmtPStr name); +#define BIN_ERROR_CHECK(stmt) { error = stmt; if (error != RMT_ERROR_NONE) return error; } -static rmtError json_Sample(Buffer* buffer, Sample* sample) +static rmtError bin_SampleArray(Buffer* buffer, Sample* first_sample); + + +static rmtError bin_Sample(Buffer* buffer, Sample* sample) { rmtError error; assert(sample != NULL); - JSON_ERROR_CHECK(json_OpenObject(buffer)); + 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)); - JSON_ERROR_CHECK(json_FieldStr(buffer, "name", sample->name)); - JSON_ERROR_CHECK(json_Comma(buffer)); - JSON_ERROR_CHECK(json_FieldU64(buffer, "id", sample->unique_id)); - JSON_ERROR_CHECK(json_Comma(buffer)); - JSON_ERROR_CHECK(json_FieldStr(buffer, "colour", (rmtPStr)sample->unique_id_html_colour)); - JSON_ERROR_CHECK(json_Comma(buffer)); - JSON_ERROR_CHECK(json_FieldU64(buffer, "us_start", sample->us_start)); - JSON_ERROR_CHECK(json_Comma(buffer)); - JSON_ERROR_CHECK(json_FieldU64(buffer, "us_length", maxS64(sample->us_length, 0))); - - if (sample->first_child != NULL) - { - JSON_ERROR_CHECK(json_Comma(buffer)); - JSON_ERROR_CHECK(json_SampleArray(buffer, sample->first_child, "children")); - } - - return json_CloseObject(buffer); + return RMT_ERROR_NONE; } -static rmtError json_SampleArray(Buffer* buffer, Sample* first_sample, rmtPStr name) +static rmtError bin_SampleArray(Buffer* buffer, Sample* parent_sample) { rmtError error; - Sample* sample; - JSON_ERROR_CHECK(json_OpenArray(buffer, name)); + 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)); - for (sample = first_sample; sample != NULL; sample = sample->next_sibling) - { - JSON_ERROR_CHECK(json_Sample(buffer, sample)); - if (sample->next_sibling != NULL) - JSON_ERROR_CHECK(json_Comma(buffer)); - } - - return json_CloseArray(buffer); + return RMT_ERROR_NONE; } @@ -3625,7 +3856,7 @@ static rmtError SampleTree_Constructor(SampleTree* tree, rmtU32 sample_size, Obj error = ObjectAllocator_Alloc(tree->allocator, (void**)&tree->root); if (error != RMT_ERROR_NONE) return error; - Sample_Prepare(tree->root, "", 0, NULL); + Sample_Prepare(tree->root, 0, NULL); tree->current_parent = tree->root; return RMT_ERROR_NONE; @@ -3658,7 +3889,7 @@ static rmtU32 HashCombine(rmtU32 hash_a, rmtU32 hash_b) } -static rmtError SampleTree_Push(SampleTree* tree, rmtPStr name, rmtU32 name_hash, rmtU32 flags, Sample** sample) +static rmtError SampleTree_Push(SampleTree* tree, rmtU32 name_hash, rmtU32 flags, Sample** sample) { Sample* parent; rmtError error; @@ -3693,7 +3924,7 @@ static rmtError SampleTree_Push(SampleTree* tree, rmtPStr name, rmtU32 name_hash error = ObjectAllocator_Alloc(tree->allocator, (void**)sample); if (error != RMT_ERROR_NONE) return error; - Sample_Prepare(*sample, name, name_hash, parent); + Sample_Prepare(*sample, name_hash, parent); // Generate a unique ID for this sample in the tree unique_id = parent->unique_id; @@ -3783,12 +4014,12 @@ typedef struct Msg_SampleTree } Msg_SampleTree; -static void AddSampleTreeMessage(MessageQueue* queue, Sample* sample, ObjectAllocator* allocator, rmtPStr thread_name, struct ThreadSampler* thread_sampler) +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 = MessageQueue_AllocMessage(queue, sizeof(Msg_SampleTree), thread_sampler); + Message* message = rmtMessageQueue_AllocMessage(queue, sizeof(Msg_SampleTree), thread_sampler); if (message == NULL) { // Discard the tree on failure @@ -3801,7 +4032,7 @@ static void AddSampleTreeMessage(MessageQueue* queue, Sample* sample, ObjectAllo payload->root_sample = sample; payload->allocator = allocator; payload->thread_name = thread_name; - MessageQueue_CommitMessage(message, MsgID_SampleTree); + rmtMessageQueue_CommitMessage(message, MsgID_SampleTree); } @@ -3825,6 +4056,9 @@ typedef struct ThreadSampler // 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; @@ -3840,6 +4074,7 @@ static rmtError ThreadSampler_Constructor(ThreadSampler* thread_sampler) // 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. @@ -3860,6 +4095,11 @@ static rmtError ThreadSampler_Constructor(ThreadSampler* thread_sampler) 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; } @@ -3869,18 +4109,21 @@ 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, rmtPStr name, rmtU32 name_hash, rmtU32 flags, Sample** sample) +static rmtError ThreadSampler_Push(SampleTree* tree, rmtU32 name_hash, rmtU32 flags, Sample** sample) { - return SampleTree_Push(tree, name, name_hash, flags, sample); + return SampleTree_Push(tree, name_hash, flags, sample); } -static rmtBool ThreadSampler_Pop(ThreadSampler* ts, MessageQueue* queue, Sample* sample) +static rmtBool ThreadSampler_Pop(ThreadSampler* ts, rmtMessageQueue* queue, Sample* sample) { SampleTree* tree = ts->sample_trees[sample->type]; SampleTree_Pop(tree, sample); @@ -3902,6 +4145,34 @@ static rmtBool ThreadSampler_Pop(ThreadSampler* ts, MessageQueue* queue, Sample* } +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; +} + + + /* ------------------------------------------------------------------------------------------------------------------------ @@ -3921,12 +4192,19 @@ static void D3D11_Destructor(D3D11* d3d11); #if RMT_USE_OPENGL -typedef struct OpenGL 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; @@ -3940,13 +4218,13 @@ struct Remotery ThreadSampler* volatile first_thread_sampler; // Queue between clients and main remotery thread - MessageQueue* mq_to_rmt_thread; + rmtMessageQueue* mq_to_rmt_thread; - // A dynamically-sized buffer used for encoding the sample tree as JSON and sending to the client - Buffer* json_buf; + // A dynamically-sized buffer used for binary-encoding the sample tree and sending to the client + Buffer* bin_buf; // The main server thread - Thread* thread; + rmtThread* thread; #if RMT_USE_CUDA rmtCUDABind cuda; @@ -3959,6 +4237,10 @@ struct Remotery #if RMT_USE_OPENGL OpenGL* opengl; #endif + +#if RMT_USE_METAL + Metal* metal; +#endif }; @@ -4037,7 +4319,7 @@ static rmtError Remotery_SendLogTextMessage(Remotery* rmt, Message* message) } -static rmtError json_SampleTree(Buffer* buffer, Msg_SampleTree* msg) +static rmtError bin_SampleTree(Buffer* buffer, Msg_SampleTree* msg) { Sample* root_sample; char thread_name[64]; @@ -4063,29 +4345,33 @@ static rmtError json_SampleTree(Buffer* buffer, Msg_SampleTree* msg) 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(); - // Build the sample data - JSON_ERROR_CHECK(json_OpenObject(buffer)); + // Write global message header + BIN_ERROR_CHECK(Buffer_Write(buffer, (void*)"SMPL ", 8)); - JSON_ERROR_CHECK(json_FieldStr(buffer, "id", "SAMPLES")); - JSON_ERROR_CHECK(json_Comma(buffer)); - JSON_ERROR_CHECK(json_FieldStr(buffer, "thread_name", thread_name)); - JSON_ERROR_CHECK(json_Comma(buffer)); - JSON_ERROR_CHECK(json_FieldU64(buffer, "nb_samples", nb_samples)); - JSON_ERROR_CHECK(json_Comma(buffer)); - JSON_ERROR_CHECK(json_FieldU64(buffer, "sample_digest", digest_hash)); - JSON_ERROR_CHECK(json_Comma(buffer)); - JSON_ERROR_CHECK(json_SampleArray(buffer, root_sample, "samples")); + // 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)); - JSON_ERROR_CHECK(json_CloseObject(buffer)); + // 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); @@ -4129,9 +4415,15 @@ static rmtError Remotery_SendSampleTreeMessage(Remotery* rmt, Message* message) // Serialise the sample tree and send to the viewer with a reasonably long timeout as the size // of the sample data may be large - error = json_SampleTree(rmt->json_buf, sample_tree); + rmt_BeginCPUSample(bin_SampleTree, RMTSF_Aggregate); + error = bin_SampleTree(rmt->bin_buf, sample_tree); + rmt_EndCPUSample(); if (error == RMT_ERROR_NONE) - error = Server_Send(rmt->server, rmt->json_buf->data, rmt->json_buf->bytes_used, 5000); + { + 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); @@ -4155,7 +4447,7 @@ static rmtError Remotery_ConsumeMessageQueue(Remotery* rmt) while( nb_messages_sent++ < maxNbMessagesPerUpdate ) { rmtError error = RMT_ERROR_NONE; - Message* message = MessageQueue_PeekNextMessage(rmt->mq_to_rmt_thread); + Message* message = rmtMessageQueue_PeekNextMessage(rmt->mq_to_rmt_thread); if (message == NULL) break; @@ -4171,12 +4463,14 @@ static rmtError Remotery_ConsumeMessageQueue(Remotery* rmt) 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 - MessageQueue_ConsumeNextMessage(rmt->mq_to_rmt_thread, message); + rmtMessageQueue_ConsumeNextMessage(rmt->mq_to_rmt_thread, message); if (error != RMT_ERROR_NONE) return error; } @@ -4192,7 +4486,7 @@ static void Remotery_FlushMessageQueue(Remotery* rmt) // Loop reading all remaining messages for (;;) { - Message* message = MessageQueue_PeekNextMessage(rmt->mq_to_rmt_thread); + Message* message = rmtMessageQueue_PeekNextMessage(rmt->mq_to_rmt_thread); if (message == NULL) break; @@ -4212,12 +4506,12 @@ static void Remotery_FlushMessageQueue(Remotery* rmt) } } - MessageQueue_ConsumeNextMessage(rmt->mq_to_rmt_thread, message); + rmtMessageQueue_ConsumeNextMessage(rmt->mq_to_rmt_thread, message); } } -static rmtError Remotery_ThreadMain(Thread* thread) +static rmtError Remotery_ThreadMain(rmtThread* thread) { Remotery* rmt = (Remotery*)thread->param; assert(rmt != NULL); @@ -4259,6 +4553,69 @@ static rmtError Remotery_ThreadMain(Thread* thread) } +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; @@ -4270,7 +4627,7 @@ static rmtError Remotery_Constructor(Remotery* rmt) rmt->thread_sampler_tls_handle = TLS_INVALID_HANDLE; rmt->first_thread_sampler = NULL; rmt->mq_to_rmt_thread = NULL; - rmt->json_buf = NULL; + rmt->bin_buf = NULL; rmt->thread = NULL; #if RMT_USE_CUDA @@ -4290,6 +4647,10 @@ static rmtError Remotery_Constructor(Remotery* rmt) rmt->opengl = NULL; #endif + #if RMT_USE_METAL + rmt->metal = NULL; + #endif + // Kick-off the timer usTimer_Init(&rmt->timer); @@ -4303,13 +4664,17 @@ static rmtError Remotery_Constructor(Remotery* rmt) 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(MessageQueue, rmt->mq_to_rmt_thread, g_Settings.messageQueueSizeInBytes); + New_1(rmtMessageQueue, rmt->mq_to_rmt_thread, g_Settings.messageQueueSizeInBytes); if (error != RMT_ERROR_NONE) return error; - // Create the JSON serialisation buffer - New_1(Buffer, rmt->json_buf, 4096); + // Create the binary serialisation buffer + New_1(Buffer, rmt->bin_buf, 4096); if (error != RMT_ERROR_NONE) return error; @@ -4325,6 +4690,13 @@ static rmtError Remotery_Constructor(Remotery* rmt) 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; @@ -4334,7 +4706,7 @@ static rmtError Remotery_Constructor(Remotery* rmt) WriteFence(); // Create the main update thread once everything has been defined for the global remotery object - New_2(Thread, rmt->thread, Remotery_ThreadMain, rmt); + New_2(rmtThread, rmt->thread, Remotery_ThreadMain, rmt); return error; } @@ -4344,7 +4716,7 @@ 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(Thread, rmt->thread); + Delete(rmtThread, rmt->thread); if (g_RemoteryCreated) { @@ -4360,8 +4732,12 @@ static void Remotery_Destructor(Remotery* rmt) Delete(OpenGL, rmt->opengl); #endif - Delete(Buffer, rmt->json_buf); - Delete(MessageQueue, rmt->mq_to_rmt_thread); + #if RMT_USE_METAL + Delete(Metal, rmt->metal); + #endif + + Delete(Buffer, rmt->bin_buf); + Delete(rmtMessageQueue, rmt->mq_to_rmt_thread); Remotery_DestroyThreadSamplers(rmt); @@ -4412,6 +4788,31 @@ static rmtError Remotery_GetThreadSampler(Remotery* rmt, ThreadSampler** thread_ } +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 @@ -4474,8 +4875,8 @@ RMT_API rmtSettings* _rmt_Settings(void) g_Settings.port = 0x4597; g_Settings.limit_connections_to_localhost = RMT_FALSE; g_Settings.msSleepBetweenServerUpdates = 10; - g_Settings.messageQueueSizeInBytes = 64 * 1024; - g_Settings.maxNbMessagesPerUpdate = 100; + g_Settings.messageQueueSizeInBytes = 128 * 1024; + g_Settings.maxNbMessagesPerUpdate = 10; g_Settings.malloc = CRTMalloc; g_Settings.free = CRTFree; g_Settings.realloc = CRTRealloc; @@ -4575,7 +4976,6 @@ static void SetDebuggerThreadName(const char* name) RMT_API void _rmt_SetCurrentThreadName(rmtPStr thread_name) { ThreadSampler* ts; - rsize_t slen; if (g_Remotery == NULL) return; @@ -4584,47 +4984,39 @@ RMT_API void _rmt_SetCurrentThreadName(rmtPStr thread_name) if (Remotery_GetThreadSampler(g_Remotery, &ts) != RMT_ERROR_NONE) return; - // Use strcat to strcpy the thread name over - slen = strnlen_s(thread_name, sizeof(ts->name)); - ts->name[0] = 0; - strncat_s(ts->name, sizeof(ts->name), thread_name, slen); - - // Apply to the debugger + // Copy name and apply to the debugger + strcpy_s(ts->name, sizeof(ts->name), thread_name); SetDebuggerThreadName(thread_name); } -static rmtBool QueueLine(MessageQueue* queue, char* text, rmtU32 size, struct ThreadSampler* thread_sampler) +static rmtBool QueueLine(rmtMessageQueue* queue, unsigned char* text, rmtU32 size, struct ThreadSampler* thread_sampler) { Message* message; assert(queue != NULL); - // String/JSON block/null terminate - text[size++] = '\"'; - text[size++] = '}'; - text[size] = 0; + // Prefix with text size + rmtU32 text_size = size - 8; + U32ToByteArray(text + 4, text_size); // Allocate some space for the line - message = MessageQueue_AllocMessage(queue, size, thread_sampler); + 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); - MessageQueue_CommitMessage(message, MsgID_LogText); + rmtMessageQueue_CommitMessage(message, MsgID_LogText); return RMT_TRUE; } -static const char log_message[] = "{ \"id\": \"LOG\", \"text\": \""; - - RMT_API void _rmt_LogText(rmtPStr text) { int start_offset, prev_offset, i; - char line_buffer[1024] = { 0 }; + unsigned char line_buffer[1024] = { 0 }; ThreadSampler* ts; if (g_Remotery == NULL) @@ -4632,9 +5024,12 @@ RMT_API void _rmt_LogText(rmtPStr text) Remotery_GetThreadSampler(g_Remotery, &ts); - // Start the line buffer off with the JSON message markup - strncat_s(line_buffer, sizeof(line_buffer), log_message, sizeof(log_message)); - start_offset = (int)strnlen_s(line_buffer, sizeof(line_buffer) - 1); + // 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; @@ -4686,26 +5081,6 @@ RMT_API void _rmt_LogText(rmtPStr text) } -static rmtU32 GetNameHash(rmtPStr name, rmtU32* hash_cache) -{ - // 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); - } - - return *hash_cache; - } - - // Have to recalculate every time when no cache storage exists - return MurmurHash3_x86_32(name, (int)strnlen_s(name, 256), 0); -} - - 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 @@ -4724,8 +5099,8 @@ RMT_API void _rmt_BeginCPUSample(rmtPStr name, rmtU32 flags, rmtU32* hash_cache) if (Remotery_GetThreadSampler(g_Remotery, &ts) == RMT_ERROR_NONE) { Sample* sample; - rmtU32 name_hash = GetNameHash(name, hash_cache); - if (ThreadSampler_Push(ts->sample_trees[SampleType_CPU], name, name_hash, flags, &sample) == RMT_ERROR_NONE) + 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) @@ -4999,7 +5374,7 @@ RMT_API void _rmt_BeginCUDASample(rmtPStr name, rmtU32* hash_cache, void* stream { rmtError error; Sample* sample; - rmtU32 name_hash = GetNameHash(name, hash_cache); + 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. @@ -5021,7 +5396,7 @@ RMT_API void _rmt_BeginCUDASample(rmtPStr name, rmtU32* hash_cache, void* stream } // Push the same and record its event - if (ThreadSampler_Push(*cuda_tree, name, name_hash, 0, &sample) == RMT_ERROR_NONE) + if (ThreadSampler_Push(*cuda_tree, name_hash, 0, &sample) == RMT_ERROR_NONE) { CUDASample* cuda_sample = (CUDASample*)sample; CUDAEventRecord(cuda_sample->event_start, stream); @@ -5083,14 +5458,10 @@ typedef struct D3D11 HRESULT last_error; - // An allocator separate to the samples themselves so that D3D resource lifetime can be controlled - // outside of the Remotery thread. - ObjectAllocator* timestamp_allocator; - // 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. - MessageQueue* mq_to_d3d11_main; + rmtMessageQueue* mq_to_d3d11_main; // Mark the first time so that remaining timestamps are offset from this rmtU64 first_timestamp; @@ -5112,11 +5483,10 @@ static rmtError D3D11_Create(D3D11** d3d11) (*d3d11)->device = NULL; (*d3d11)->context = NULL; (*d3d11)->last_error = S_OK; - (*d3d11)->timestamp_allocator = NULL; (*d3d11)->mq_to_d3d11_main = NULL; (*d3d11)->first_timestamp = 0; - New_1(MessageQueue, (*d3d11)->mq_to_d3d11_main, g_Settings.messageQueueSizeInBytes); + New_1(rmtMessageQueue, (*d3d11)->mq_to_d3d11_main, g_Settings.messageQueueSizeInBytes); if (error != RMT_ERROR_NONE) { Delete(D3D11, *d3d11); @@ -5130,9 +5500,7 @@ static rmtError D3D11_Create(D3D11** d3d11) static void D3D11_Destructor(D3D11* d3d11) { assert(d3d11 != NULL); - - Delete(ObjectAllocator, d3d11->timestamp_allocator); - Delete(MessageQueue, d3d11->mq_to_d3d11_main); + Delete(rmtMessageQueue, d3d11->mq_to_d3d11_main); } @@ -5285,13 +5653,15 @@ typedef struct 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); - sample->timestamp = NULL; + New_0(D3D11Timestamp, sample->timestamp); return RMT_ERROR_NONE; } @@ -5299,6 +5669,7 @@ static rmtError D3D11Sample_Constructor(D3D11Sample* sample) static void D3D11Sample_Destructor(D3D11Sample* sample) { + Delete(D3D11Timestamp, sample->timestamp); Sample_Destructor((Sample*)sample); } @@ -5317,21 +5688,7 @@ RMT_API void _rmt_BindD3D11(void* device, void* context) } -static void FreeD3D11TimeStamps(Sample* sample) -{ - Sample* child; - - D3D11Sample* d3d_sample = (D3D11Sample*)sample; - - assert(g_Remotery != NULL); - assert(g_Remotery->d3d11 != NULL); - assert(d3d_sample->timestamp != NULL); - ObjectAllocator_Free(g_Remotery->d3d11->timestamp_allocator, (void*)d3d_sample->timestamp); - d3d_sample->timestamp = NULL; - - for (child = sample->first_child; child != NULL; child = child->next_sibling) - FreeD3D11TimeStamps(child); -} +static void UpdateD3D11Frame(void); RMT_API void _rmt_UnbindD3D11(void) @@ -5341,33 +5698,17 @@ RMT_API void _rmt_UnbindD3D11(void) 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; - // Flush the main queue of allocated D3D timestamps - for (;;) - { - Msg_SampleTree* sample_tree; - Sample* sample; - - Message* message = MessageQueue_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); - FreeD3D11TimeStamps(sample); - FreeSampleTree(sample, sample_tree->allocator); - - MessageQueue_ConsumeNextMessage(d3d11->mq_to_d3d11_main, message); - } - - // Free all allocated D3D resources - Delete(ObjectAllocator, d3d11->timestamp_allocator); + // Forcefully delete sample tree on this thread to release time stamps from + // the same thread that created them + Remotery_BlockingDeleteSampleTree(g_Remotery, SampleType_D3D11); } } @@ -5388,34 +5729,25 @@ RMT_API void _rmt_BeginD3D11Sample(rmtPStr name, rmtU32* hash_cache) if (Remotery_GetThreadSampler(g_Remotery, &ts) == RMT_ERROR_NONE) { - rmtError error; Sample* sample; - rmtU32 name_hash = GetNameHash(name, hash_cache); + 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; } - // Also create the timestamp allocator on-demand to keep the D3D11 code localised to the same file section - if (d3d11->timestamp_allocator == NULL) - New_3(ObjectAllocator, d3d11->timestamp_allocator, sizeof(D3D11Timestamp), (ObjConstructor)D3D11Timestamp_Constructor, (ObjDestructor)D3D11Timestamp_Destructor); - - // Push the sample - if (ThreadSampler_Push(*d3d_tree, name, name_hash, 0, &sample) == RMT_ERROR_NONE) + // Push the sample and activate the timestamp + if (ThreadSampler_Push(*d3d_tree, name_hash, 0, &sample) == RMT_ERROR_NONE) { D3D11Sample* d3d_sample = (D3D11Sample*)sample; - - // Allocate a timestamp for the sample and activate it - assert(d3d_sample->timestamp == NULL); - error = ObjectAllocator_Alloc(d3d11->timestamp_allocator, (void**)&d3d_sample->timestamp); - if (error == RMT_ERROR_NONE) - D3D11Timestamp_Begin(d3d_sample->timestamp, d3d11->context); + D3D11Timestamp_Begin(d3d_sample->timestamp, d3d11->context); } } } @@ -5480,7 +5812,7 @@ static void UpdateD3D11Frame(void) Msg_SampleTree* sample_tree; Sample* sample; - Message* message = MessageQueue_PeekNextMessage(d3d11->mq_to_d3d11_main); + Message* message = rmtMessageQueue_PeekNextMessage(d3d11->mq_to_d3d11_main); if (message == NULL) break; @@ -5496,9 +5828,8 @@ static void UpdateD3D11Frame(void) break; // Pass samples onto the remotery thread for sending to the viewer - FreeD3D11TimeStamps(sample); AddSampleTreeMessage(g_Remotery->mq_to_rmt_thread, sample, sample_tree->allocator, sample_tree->thread_name, message->thread_sampler); - MessageQueue_ConsumeNextMessage(d3d11->mq_to_d3d11_main, message); + rmtMessageQueue_ConsumeNextMessage(d3d11->mq_to_d3d11_main, message); } rmt_EndCPUSample(); @@ -5600,20 +5931,20 @@ typedef void (GLAPIENTRY * PFNGLQUERYCOUNTERPROC) (GLuint id, GLenum target); #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 RMT_GL_GET_FUN(x) assert(g_Remotery->opengl->x != NULL); g_Remotery->opengl->x -#define glGenQueries RMT_GL_GET_FUN(__glGenQueries) -#define glDeleteQueries RMT_GL_GET_FUN(__glDeleteQueries) -#define glBeginQuery RMT_GL_GET_FUN(__glBeginQuery) -#define glEndQuery RMT_GL_GET_FUN(__glEndQuery) -#define glGetQueryObjectiv RMT_GL_GET_FUN(__glGetQueryObjectiv) -#define glGetQueryObjectuiv RMT_GL_GET_FUN(__glGetQueryObjectuiv) -#define glGetQueryObjecti64v RMT_GL_GET_FUN(__glGetQueryObjecti64v) -#define glGetQueryObjectui64v RMT_GL_GET_FUN(__glGetQueryObjectui64v) -#define glQueryCounter RMT_GL_GET_FUN(__glQueryCounter) +#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) -typedef struct OpenGL +struct OpenGL_t { // Handle to the OS OpenGL DLL void* dll_handle; @@ -5629,18 +5960,14 @@ typedef struct OpenGL PFNGLGETQUERYOBJECTUI64VPROC __glGetQueryObjectui64v; PFNGLQUERYCOUNTERPROC __glQueryCounter; - // An allocator separate to the samples themselves so that OpenGL resource lifetime can be controlled - // outside of the Remotery thread. - ObjectAllocator* timestamp_allocator; - // 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. - MessageQueue* mq_to_opengl_main; + rmtMessageQueue* mq_to_opengl_main; // Mark the first time so that remaining timestamps are offset from this rmtU64 first_timestamp; -} OpenGL; +}; static GLenum rmtglGetError(void) @@ -5667,23 +5994,21 @@ static GLenum rmtglGetError(void) static void* rmtglGetProcAddress(OpenGL* opengl, const char* symbol) { - assert(opengl != NULL); - #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(__APPLE__) && !defined(GLEW_APPLE_GLX) + #elif defined(RMT_PLATFORM_MACOS) && !defined(GLEW_APPLE_GLX) - extern void* nsglGetProcAddress(const GLubyte* _name); - return nsglGetProcAddress((const GLubyte*)symbol); + return rmtGetProcAddress(opengl->dll_handle, symbol); #elif defined(RMT_PLATFORM_LINUX) @@ -5718,11 +6043,10 @@ static rmtError OpenGL_Create(OpenGL** opengl) (*opengl)->__glGetQueryObjectui64v = NULL; (*opengl)->__glQueryCounter = NULL; - (*opengl)->timestamp_allocator = NULL; (*opengl)->mq_to_opengl_main = NULL; (*opengl)->first_timestamp = 0; - New_1(MessageQueue, (*opengl)->mq_to_opengl_main, g_Settings.messageQueueSizeInBytes); + New_1(rmtMessageQueue, (*opengl)->mq_to_opengl_main, g_Settings.messageQueueSizeInBytes); return error; } @@ -5730,8 +6054,7 @@ static rmtError OpenGL_Create(OpenGL** opengl) static void OpenGL_Destructor(OpenGL* opengl) { assert(opengl != NULL); - Delete(ObjectAllocator, opengl->timestamp_allocator); - Delete(MessageQueue, opengl->mq_to_opengl_main); + Delete(rmtMessageQueue, opengl->mq_to_opengl_main); } @@ -5758,7 +6081,7 @@ static rmtError OpenGLTimestamp_Constructor(OpenGLTimestamp* stamp) // Create start/end timestamp queries assert(g_Remotery != NULL); - glGenQueries(2, stamp->queries); + rmtglGenQueries(2, stamp->queries); error = rmtglGetError(); if (error != GL_NO_ERROR) return RMT_ERROR_OPENGL_ERROR; @@ -5775,7 +6098,7 @@ static void OpenGLTimestamp_Destructor(OpenGLTimestamp* stamp) if (stamp->queries[0] != 0) { int error; - glDeleteQueries(2, stamp->queries); + rmtglDeleteQueries(2, stamp->queries); error = rmtglGetError(); assert(error == GL_NO_ERROR); } @@ -5784,29 +6107,21 @@ static void OpenGLTimestamp_Destructor(OpenGLTimestamp* stamp) static void OpenGLTimestamp_Begin(OpenGLTimestamp* stamp) { - int error; - assert(stamp != NULL); - // Start of disjoint and first query + // First query assert(g_Remotery != NULL); - glQueryCounter(stamp->queries[0], GL_TIMESTAMP); - error = rmtglGetError(); - assert(error == GL_NO_ERROR); + rmtglQueryCounter(stamp->queries[0], GL_TIMESTAMP); } static void OpenGLTimestamp_End(OpenGLTimestamp* stamp) { - int error; - assert(stamp != NULL); - // End of disjoint and second query + // Second query assert(g_Remotery != NULL); - glQueryCounter(stamp->queries[1], GL_TIMESTAMP); - error = rmtglGetError(); - assert(error == GL_NO_ERROR); + rmtglQueryCounter(stamp->queries[1], GL_TIMESTAMP); } @@ -5823,21 +6138,21 @@ static rmtBool OpenGLTimestamp_GetData(OpenGLTimestamp* stamp, rmtU64* out_start // Check to see if all queries are ready // If any fail to arrive, wait until later - glGetQueryObjectiv(stamp->queries[0], GL_QUERY_RESULT_AVAILABLE, &startAvailable); + rmtglGetQueryObjectiv(stamp->queries[0], GL_QUERY_RESULT_AVAILABLE, &startAvailable); error = rmtglGetError(); assert(error == GL_NO_ERROR); if (!startAvailable) return RMT_FALSE; - glGetQueryObjectiv(stamp->queries[1], GL_QUERY_RESULT_AVAILABLE, &endAvailable); + rmtglGetQueryObjectiv(stamp->queries[1], GL_QUERY_RESULT_AVAILABLE, &endAvailable); error = rmtglGetError(); assert(error == GL_NO_ERROR); if (!endAvailable) return RMT_FALSE; - glGetQueryObjectui64v(stamp->queries[0], GL_QUERY_RESULT, &start); + rmtglGetQueryObjectui64v(stamp->queries[0], GL_QUERY_RESULT, &start); error = rmtglGetError(); assert(error == GL_NO_ERROR); - glGetQueryObjectui64v(stamp->queries[1], GL_QUERY_RESULT, &end); + rmtglGetQueryObjectui64v(stamp->queries[1], GL_QUERY_RESULT, &end); error = rmtglGetError(); assert(error == GL_NO_ERROR); @@ -5866,13 +6181,15 @@ typedef struct 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); - sample->timestamp = NULL; + New_0(OpenGLTimestamp, sample->timestamp); return RMT_ERROR_NONE; } @@ -5880,6 +6197,7 @@ static rmtError OpenGLSample_Constructor(OpenGLSample* sample) static void OpenGLSample_Destructor(OpenGLSample* sample) { + Delete(OpenGLTimestamp, sample->timestamp); Sample_Destructor((Sample*)sample); } @@ -5893,6 +6211,8 @@ RMT_API void _rmt_BindOpenGL() #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"); @@ -5909,19 +6229,7 @@ RMT_API void _rmt_BindOpenGL() } -static void FreeOpenGLTimeStamps(Sample* sample) -{ - Sample* child; - - OpenGLSample* ogl_sample = (OpenGLSample*)sample; - - assert(ogl_sample->timestamp != NULL); - ObjectAllocator_Free(g_Remotery->opengl->timestamp_allocator, (void*)ogl_sample->timestamp); - ogl_sample->timestamp = NULL; - - for (child = sample->first_child; child != NULL; child = child->next_sibling) - FreeOpenGLTimeStamps(child); -} +static void UpdateOpenGLFrame(void); RMT_API void _rmt_UnbindOpenGL(void) @@ -5931,29 +6239,13 @@ RMT_API void _rmt_UnbindOpenGL(void) OpenGL* opengl = g_Remotery->opengl; assert(opengl != NULL); - // Flush the main queue of allocated OpenGL timestamps - while (1) - { - Msg_SampleTree* sample_tree; - Sample* sample; + // Stall waiting for the OpenGL queue to empty into the Remotery queue + while (!rmtMessageQueue_IsEmpty(opengl->mq_to_opengl_main)) + UpdateOpenGLFrame(); - Message* message = MessageQueue_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); - FreeOpenGLTimeStamps(sample); - FreeSampleTree(sample, sample_tree->allocator); - - MessageQueue_ConsumeNextMessage(opengl->mq_to_opengl_main, message); - } - - // Free all allocated OpenGL resources - Delete(ObjectAllocator, opengl->timestamp_allocator); + // 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) @@ -5974,37 +6266,25 @@ RMT_API void _rmt_BeginOpenGLSample(rmtPStr name, rmtU32* hash_cache) if (Remotery_GetThreadSampler(g_Remotery, &ts) == RMT_ERROR_NONE) { - rmtError error; Sample* sample; - rmtU32 name_hash = GetNameHash(name, hash_cache); - - OpenGL* opengl = g_Remotery->opengl; + 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) { - New_3(SampleTree, *ogl_tree, sizeof(OpenGLSample), (ObjConstructor)OpenGLSample_Constructor, (ObjDestructor)OpenGLSample_Destructor); + rmtError error; + New_3(SampleTree, *ogl_tree, sizeof(OpenGLSample), (ObjConstructor)OpenGLSample_Constructor, (ObjDestructor)OpenGLSample_Destructor); if (error != RMT_ERROR_NONE) return; } - // Also create the timestamp allocator on-demand to keep the OpenGL code localised to the same file section - assert(opengl != NULL); - if (opengl->timestamp_allocator == NULL) - New_3(ObjectAllocator, opengl->timestamp_allocator, sizeof(OpenGLTimestamp), (ObjConstructor)OpenGLTimestamp_Constructor, (ObjDestructor)OpenGLTimestamp_Destructor); - - // Push the sample - if (ThreadSampler_Push(*ogl_tree, name, name_hash, 0, &sample) == RMT_ERROR_NONE) + // Push the sample and activate the timestamp + if (ThreadSampler_Push(*ogl_tree, name_hash, 0, &sample) == RMT_ERROR_NONE) { OpenGLSample* ogl_sample = (OpenGLSample*)sample; - - // Allocate a timestamp for the sample and activate it - assert(ogl_sample->timestamp == NULL); - error = ObjectAllocator_Alloc(opengl->timestamp_allocator, (void**)&ogl_sample->timestamp); - if (error == RMT_ERROR_NONE) - OpenGLTimestamp_Begin(ogl_sample->timestamp); + OpenGLTimestamp_Begin(ogl_sample->timestamp); } } } @@ -6054,7 +6334,7 @@ static void UpdateOpenGLFrame(void) Msg_SampleTree* sample_tree; Sample* sample; - Message* message = MessageQueue_PeekNextMessage(opengl->mq_to_opengl_main); + Message* message = rmtMessageQueue_PeekNextMessage(opengl->mq_to_opengl_main); if (message == NULL) break; @@ -6070,9 +6350,8 @@ static void UpdateOpenGLFrame(void) break; // Pass samples onto the remotery thread for sending to the viewer - FreeOpenGLTimeStamps(sample); AddSampleTreeMessage(g_Remotery->mq_to_rmt_thread, sample, sample_tree->allocator, sample_tree->thread_name, message->thread_sampler); - MessageQueue_ConsumeNextMessage(opengl->mq_to_opengl_main, message); + rmtMessageQueue_ConsumeNextMessage(opengl->mq_to_opengl_main, message); } rmt_EndCPUSample(); @@ -6105,4 +6384,314 @@ RMT_API void _rmt_EndOpenGLSample(void) #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 index 141aeb9..9b25a0c 100644 --- a/3rdparty/bgfx/3rdparty/remotery/lib/Remotery.h +++ b/3rdparty/bgfx/3rdparty/remotery/lib/Remotery.h @@ -67,6 +67,11 @@ documented just below this comment. #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 @@ -129,9 +134,14 @@ documented just below this comment. #define IFDEF_RMT_USE_D3D11(t, f) f #endif #if RMT_ENABLED && RMT_USE_OPENGL -#define IFDEF_RMT_USE_OPENGL(t, f) t + #define IFDEF_RMT_USE_OPENGL(t, f) t #else -#define IFDEF_RMT_USE_OPENGL(t, f) f + #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 @@ -237,7 +247,7 @@ typedef enum rmtError RMT_ERROR_D3D11_FAILED_TO_CREATE_QUERY, // Failed to create query for sample // OpenGL error messages - RMT_ERROR_OPENGL_ERROR, // Generic OpenGL error, no real need to expose more detail since app will probably have an OpenGL error callback registered + 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; @@ -424,6 +434,26 @@ typedef struct rmtCUDABind 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()) + + + /* ------------------------------------------------------------------------------------------------------------------------ @@ -485,6 +515,17 @@ struct rmt_EndOpenGLSampleOnScopeExit }; #endif +#if RMT_USE_METAL +extern "C" RMT_API void _rmt_EndMetalSample(void); +struct rmt_EndMetalSampleOnScopeExit +{ + ~rmt_EndMetalSampleOnScopeExit() + { + _rmt_EndMetalSample(); + } +}; +#endif + #endif @@ -502,6 +543,9 @@ struct rmt_EndOpenGLSampleOnScopeExit #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 @@ -553,10 +597,23 @@ 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 diff --git a/3rdparty/bgfx/3rdparty/remotery/readme.md b/3rdparty/bgfx/3rdparty/remotery/readme.md index 143f582..3dc26f0 100644 --- a/3rdparty/bgfx/3rdparty/remotery/readme.md +++ b/3rdparty/bgfx/3rdparty/remotery/readme.md @@ -23,7 +23,7 @@ Compiling 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. +* 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 @@ -37,7 +37,8 @@ You can define some extra macros to modify what features are compiled into Remot 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 (standalone except you must link to OpenGL which you already do if you use it) + 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 @@ -176,6 +177,24 @@ your OpenGL device and context, ensure you notify Remotery before shutting down 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 ------------------------------- diff --git a/3rdparty/bgfx/3rdparty/remotery/vis/Code/Console.js b/3rdparty/bgfx/3rdparty/remotery/vis/Code/Console.js index a18f3dc..cd25dc7 100644 --- a/3rdparty/bgfx/3rdparty/remotery/vis/Code/Console.js +++ b/3rdparty/bgfx/3rdparty/remotery/vis/Code/Console.js @@ -36,7 +36,7 @@ Console = (function() // Setup log requests from the server this.Server = server; server.SetConsole(this); - server.AddMessageHandler("LOG", Bind(OnLog, this)); + server.AddMessageHandler("LOGM", Bind(OnLog, this)); } @@ -65,9 +65,11 @@ Console = (function() } - function OnLog(self, socket, message) + function OnLog(self, socket, data_view) { - self.AppTextBuffer = LogText(self.AppTextBuffer, message.text); + var data_view_reader = new DataViewReader(data_view, 4); + var text = data_view_reader.GetString(); + self.AppTextBuffer = LogText(self.AppTextBuffer, text); } diff --git a/3rdparty/bgfx/3rdparty/remotery/vis/Code/Remotery.js b/3rdparty/bgfx/3rdparty/remotery/vis/Code/Remotery.js index 5030f88..ca1d4f7 100644 --- a/3rdparty/bgfx/3rdparty/remotery/vis/Code/Remotery.js +++ b/3rdparty/bgfx/3rdparty/remotery/vis/Code/Remotery.js @@ -20,12 +20,37 @@ Settings = (function() 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(); - this.ConnectionAddress = LocalStore.Get("App", "Global", "ConnectionAddress", "ws://127.0.0.1:17815/rmt"); + // "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)); @@ -43,8 +68,10 @@ Remotery = (function() this.SampleWindows = { }; this.FrameHistory = { }; this.SelectedFrames = { }; + this.NameMap = { }; - this.Server.AddMessageHandler("SAMPLES", Bind(OnSamples, this)); + this.Server.AddMessageHandler("SMPL", Bind(OnSamples, this)); + this.Server.AddMessageHandler("SSMP", Bind(OnSampleName, this)); // Kick-off the auto-connect loop AutoConnect(this); @@ -80,10 +107,6 @@ Remotery = (function() { // Connection address has been validated LocalStore.Set("App", "Global", "ConnectionAddress", self.ConnectionAddress); - - self.TimelineWindow.ResetTimeRange(); - self.FrameHistory = { }; - self.SelectedFrames = { }; } @@ -115,7 +138,8 @@ Remotery = (function() // 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) + // 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(); @@ -123,15 +147,74 @@ Remotery = (function() } - function OnSamples(self, socket, message) + function DecodeSample(self, data_view_reader) { - var name = message.thread_name; + 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; + return; - // Add to frame history for this thread + // 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] = [ ]; @@ -142,7 +225,7 @@ Remotery = (function() var max_nb_frames = 10000; var extra_frames = frame_history.length - max_nb_frames; if (extra_frames > 0) - frame_history.splice(0, extra_frames); + frame_history.splice(0, extra_frames); // Create sample windows on-demand if (!(name in self.SampleWindows)) @@ -159,6 +242,16 @@ Remotery = (function() } + 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 diff --git a/3rdparty/bgfx/3rdparty/remotery/vis/Code/SampleWindow.js b/3rdparty/bgfx/3rdparty/remotery/vis/Code/SampleWindow.js index 7d7fa6c..74f769e 100644 --- a/3rdparty/bgfx/3rdparty/remotery/vis/Code/SampleWindow.js +++ b/3rdparty/bgfx/3rdparty/remotery/vis/Code/SampleWindow.js @@ -72,7 +72,7 @@ SampleWindow = (function() if (this.SampleDigest != sample_digest) { this.RootRow.Rows.ClearIndex("_ID"); - var index = UpdateSamples(this.RootRow, samples, 0, ""); + var index = UpdateAllSampleFields(this.RootRow, samples, 0, ""); this.SampleDigest = sample_digest; // Clear out any left-over rows @@ -85,8 +85,8 @@ SampleWindow = (function() else if (this.Visible) { - // Otherwise just update the existing sample times - UpdateSampleTimes(this.RootRow, samples); + // Otherwise just update the existing sample fields + UpdateChangedSampleFields(this.RootRow, samples, ""); } } @@ -99,7 +99,7 @@ SampleWindow = (function() { var cell_data = { - _ID: i, + _ID: i, Name: "", Control: new WM.Label() }; @@ -114,7 +114,7 @@ SampleWindow = (function() } - function UpdateSamples(parent_row, samples, index, indent) + function UpdateAllSampleFields(parent_row, samples, index, indent) { for (var i in samples) { @@ -131,21 +131,24 @@ SampleWindow = (function() row.CellData._ID = sample.id; parent_row.Rows.AddRowToIndex("_ID", sample.id, row); - // Set sample name and colour + // 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 = UpdateSamples(parent_row, sample.children, index, indent + "     "); + index = UpdateAllSampleFields(parent_row, sample.children, index, indent + "     "); } return index; } - function UpdateSampleTimes(parent_row, samples) + function UpdateChangedSampleFields(parent_row, samples, indent) { for (var i in samples) { @@ -153,9 +156,20 @@ SampleWindow = (function() var row = parent_row.Rows.GetBy("_ID", sample.id); if (row) - row.CellData.Control.SetText(sample.us_length); + { + row.CellData.Control.SetText(sample.us_length); - UpdateSampleTimes(parent_row, sample.children); + // 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 + "     "); } } diff --git a/3rdparty/bgfx/3rdparty/remotery/vis/Code/TimelineRow.js b/3rdparty/bgfx/3rdparty/remotery/vis/Code/TimelineRow.js index 40af043..9645f25 100644 --- a/3rdparty/bgfx/3rdparty/remotery/vis/Code/TimelineRow.js +++ b/3rdparty/bgfx/3rdparty/remotery/vis/Code/TimelineRow.js @@ -356,8 +356,9 @@ TimelineRow = (function() 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 - if (draw_text) + // 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(); diff --git a/3rdparty/bgfx/3rdparty/remotery/vis/Code/WebSocketConnection.js b/3rdparty/bgfx/3rdparty/remotery/vis/Code/WebSocketConnection.js index 2fbc31b..95b1208 100644 --- a/3rdparty/bgfx/3rdparty/remotery/vis/Code/WebSocketConnection.js +++ b/3rdparty/bgfx/3rdparty/remotery/vis/Code/WebSocketConnection.js @@ -52,6 +52,7 @@ WebSocketConnection = (function() 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); @@ -80,13 +81,13 @@ WebSocketConnection = (function() } - function CallMessageHandlers(self, message_name, 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, message); + handlers[i](self, data_view); } } @@ -120,9 +121,15 @@ WebSocketConnection = (function() function OnMessage(self, event) { - var message = JSON.parse(event.data); - if ("id" in message) - CallMessageHandlers(self, message.id, message); + 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); } diff --git a/3rdparty/bgfx/3rdparty/remotery/vis/index.html b/3rdparty/bgfx/3rdparty/remotery/vis/index.html index b761290..3e57256 100644 --- a/3rdparty/bgfx/3rdparty/remotery/vis/index.html +++ b/3rdparty/bgfx/3rdparty/remotery/vis/index.html @@ -29,6 +29,7 @@ + diff --git a/3rdparty/bgfx/3rdparty/renderdoc/renderdoc_app.h b/3rdparty/bgfx/3rdparty/renderdoc/renderdoc_app.h index b9f3341..43a1809 100644 --- a/3rdparty/bgfx/3rdparty/renderdoc/renderdoc_app.h +++ b/3rdparty/bgfx/3rdparty/renderdoc/renderdoc_app.h @@ -1,7 +1,7 @@ /****************************************************************************** * The MIT License (MIT) * - * Copyright (c) 2015-2016 Baldur Karlsson + * Copyright (c) 2015-2017 Baldur Karlsson * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/3rdparty/bgfx/3rdparty/tinyexr/tinyexr.h b/3rdparty/bgfx/3rdparty/tinyexr/tinyexr.h index a30acca..947941d 100644 --- a/3rdparty/bgfx/3rdparty/tinyexr/tinyexr.h +++ b/3rdparty/bgfx/3rdparty/tinyexr/tinyexr.h @@ -1,5 +1,5 @@ /* -Copyright (c) 2014 - 2015, Syoyo Fujita +Copyright (c) 2014 - 2016, Syoyo Fujita All rights reserved. Redistribution and use in source and binary forms, with or without @@ -24,8 +24,47 @@ 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. */ -#ifndef __TINYEXR_H__ -#define __TINYEXR_H__ + +// TinyEXR contains some OpenEXR code, which is licensed under ------------ + +/////////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas +// Digital Ltd. LLC +// +// 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 Industrial Light & Magic 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 +// OWNER 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. +// +/////////////////////////////////////////////////////////////////////////// + +// End of OpenEXR license ------------------------------------------------- + +#ifndef TINYEXR_H_ +#define TINYEXR_H_ // // @@ -43,12 +82,42 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // -#include // for size_t +#include // for size_t +#include // guess stdint.h is available(C99) #ifdef __cplusplus extern "C" { #endif +// Use embedded miniz or not to decode ZIP format pixel. Linking with zlib +// required if this flas is 0. +#ifndef TINYEXR_USE_MINIZ +#define TINYEXR_USE_MINIZ (1) +#endif + +// Disable PIZ comporession when applying cpplint. +#ifndef TINYEXR_USE_PIZ +#define TINYEXR_USE_PIZ (1) +#endif + +#ifndef TINYEXR_USE_ZFP +#define TINYEXR_USE_ZFP (0) // TinyEXR extension. +// http://computation.llnl.gov/projects/floating-point-compression +#endif + +#define TINYEXR_SUCCESS (0) +#define TINYEXR_ERROR_INVALID_MAGIC_NUMBER (-1) +#define TINYEXR_ERROR_INVALID_EXR_VERSION (-2) +#define TINYEXR_ERROR_INVALID_ARGUMENT (-3) +#define TINYEXR_ERROR_INVALID_DATA (-4) +#define TINYEXR_ERROR_INVALID_FILE (-5) +#define TINYEXR_ERROR_INVALID_PARAMETER (-5) +#define TINYEXR_ERROR_CANT_OPEN_FILE (-6) +#define TINYEXR_ERROR_UNSUPPORTED_FORMAT (-7) +#define TINYEXR_ERROR_INVALID_HEADER (-8) + +// @note { OpenEXR file format: http://www.openexr.com/openexrfilelayout.pdf } + // pixel type: possible values are: UINT = 0 HALF = 1 FLOAT = 2 #define TINYEXR_PIXELTYPE_UINT (0) #define TINYEXR_PIXELTYPE_HALF (1) @@ -57,134 +126,269 @@ extern "C" { #define TINYEXR_MAX_ATTRIBUTES (128) #define TINYEXR_COMPRESSIONTYPE_NONE (0) -//#define TINYEXR_COMPRESSIONTYPE_RLE (1) // not supported yet +#define TINYEXR_COMPRESSIONTYPE_RLE (1) #define TINYEXR_COMPRESSIONTYPE_ZIPS (2) #define TINYEXR_COMPRESSIONTYPE_ZIP (3) #define TINYEXR_COMPRESSIONTYPE_PIZ (4) +#define TINYEXR_COMPRESSIONTYPE_ZFP (128) // TinyEXR extension + +#define TINYEXR_ZFP_COMPRESSIONTYPE_RATE (0) +#define TINYEXR_ZFP_COMPRESSIONTYPE_PRECISION (1) +#define TINYEXR_ZFP_COMPRESSIONTYPE_ACCURACY (2) + +#define TINYEXR_TILE_ONE_LEVEL (0) +#define TINYEXR_TILE_MIPMAP_LEVELS (1) +#define TINYEXR_TILE_RIPMAP_LEVELS (2) + +#define TINYEXR_TILE_ROUND_DOWN (0) +#define TINYEXR_TILE_ROUND_UP (1) + +typedef struct _EXRVersion { + int version; // this must be 2 + int tiled; // tile format image + int long_name; // long name attribute + int non_image; // deep image(EXR 2.0) + int multipart; // multi-part(EXR 2.0) +} EXRVersion; typedef struct _EXRAttribute { - char *name; - char *type; + char name[256]; // name and type are up to 255 chars long. + char type[256]; + unsigned char *value; // uint8_t* int size; - unsigned char *value; // uint8_t* + int pad0; } EXRAttribute; -typedef struct _EXRImage { - // Custom attributes(exludes required attributes(e.g. `channels`, - // `compression`, etc) - EXRAttribute custom_attributes[TINYEXR_MAX_ATTRIBUTES]; - int num_custom_attributes; +typedef struct _EXRChannelInfo { + char name[256]; // less than 255 bytes long + int pixel_type; + int x_sampling; + int y_sampling; + unsigned char p_linear; + unsigned char pad[3]; +} EXRChannelInfo; - int num_channels; - const char **channel_names; +typedef struct _EXRTile { + int offset_x; + int offset_y; + int level_x; + int level_y; - unsigned char **images; // image[channels][pixels] - int *pixel_types; // Loaded pixel type(TINYEXR_PIXELTYPE_*) of `images` for - // each channel + int width; // actual width in a tile. + int height; // actual height int a tile. - int *requested_pixel_types; // Filled initially by - // ParseEXRHeaderFrom(Meomory|File), then users - // can edit it(only valid for HALF pixel type - // channel) + unsigned char **images; // image[channels][pixels] +} EXRTile; - int width; - int height; +typedef struct _EXRHeader { float pixel_aspect_ratio; - int compression; // compression type(TINYEXR_COMPRESSIONTYPE_*) int line_order; int data_window[4]; int display_window[4]; float screen_window_center[2]; float screen_window_width; -} EXRImage; -typedef struct _DeepImage { + int chunk_count; + + // Properties for tiled format(`tiledesc`). + int tiled; + int tile_size_x; + int tile_size_y; + int tile_level_mode; + int tile_rounding_mode; + + int long_name; + int non_image; + int multipart; + unsigned int header_len; + + // Custom attributes(exludes required attributes(e.g. `channels`, + // `compression`, etc) + int num_custom_attributes; + EXRAttribute custom_attributes[TINYEXR_MAX_ATTRIBUTES]; + + EXRChannelInfo *channels; // [num_channels] + + int *pixel_types; // Loaded pixel type(TINYEXR_PIXELTYPE_*) of `images` for + // each channel. This is overwritten with `requested_pixel_types` when + // loading. int num_channels; - const char **channel_names; - float ***image; // image[channels][scanlines][samples] - int **offset_table; // offset_table[scanline][offsets] + + int compression_type; // compression type(TINYEXR_COMPRESSIONTYPE_*) + int *requested_pixel_types; // Filled initially by + // ParseEXRHeaderFrom(Meomory|File), then users + // can edit it(only valid for HALF pixel type + // channel) + +} EXRHeader; + +typedef struct _EXRMultiPartHeader { + int num_headers; + EXRHeader *headers; + +} EXRMultiPartHeader; + +typedef struct _EXRImage { + EXRTile *tiles; // Tiled pixel data. The application must reconstruct image + // from tiles manually. NULL if scanline format. + unsigned char **images; // image[channels][pixels]. NULL if tiled format. + int width; int height; + int num_channels; + + // Properties for tile format. + int num_tiles; + +} EXRImage; + +typedef struct _EXRMultiPartImage { + int num_images; + EXRImage *images; + +} EXRMultiPartImage; + +typedef struct _DeepImage { + const char **channel_names; + float ***image; // image[channels][scanlines][samples] + int **offset_table; // offset_table[scanline][offsets] + int num_channels; + int width; + int height; + int pad0; } DeepImage; // @deprecated { to be removed. } // Loads single-frame OpenEXR image. Assume EXR image contains RGB(A) channels. // Application must free image data as returned by `out_rgba` // Result image format is: float x RGBA x width x hight -// Return 0 if success -// Returns error string in `err` when there's an error +// Returns negative value and may set error string in `err` when there's an +// error extern int LoadEXR(float **out_rgba, int *width, int *height, const char *filename, const char **err); -// Parse single-frame OpenEXR header from a file and initialize `EXRImage` -// struct. -// Users then call LoadMultiChannelEXRFromFile to actually load image data into -// `EXRImage` -extern int ParseMultiChannelEXRHeaderFromFile(EXRImage *image, - const char *filename, - const char **err); +// @deprecated { to be removed. } +// Saves single-frame OpenEXR image. Assume EXR image contains RGB(A) channels. +// components must be 3(RGB) or 4(RGBA). +// Result image format is: float x RGB(A) x width x hight +extern int SaveEXR(const float *data, int width, int height, int components, + const char *filename); -// Parse single-frame OpenEXR header from a memory and initialize `EXRImage` -// struct. -// Users then call LoadMultiChannelEXRFromMemory to actually load image data -// into `EXRImage` -extern int ParseMultiChannelEXRHeaderFromMemory(EXRImage *image, - const unsigned char *memory, - const char **err); +// Initialize EXRHeader struct +extern void InitEXRHeader(EXRHeader *exr_header); -// Loads multi-channel, single-frame OpenEXR image from a file. -// Application must setup `ParseMultiChannelEXRHeaderFromFile` before calling -// `LoadMultiChannelEXRFromFile`. -// Application can free EXRImage using `FreeExrImage` -// Return 0 if success -// Returns error string in `err` when there's an error -extern int LoadMultiChannelEXRFromFile(EXRImage *image, const char *filename, - const char **err); +// Initialize EXRImage struct +extern void InitEXRImage(EXRImage *exr_image); -// Loads multi-channel, single-frame OpenEXR image from a memory. -// Application must setup `EXRImage` with `ParseMultiChannelEXRHeaderFromMemory` -// before calling `LoadMultiChannelEXRFromMemory`. -// Application can free EXRImage using `FreeExrImage` -// Return 0 if success -// Returns error string in `err` when there's an error -extern int LoadMultiChannelEXRFromMemory(EXRImage *image, - const unsigned char *memory, +// Free's internal data of EXRHeader struct +extern int FreeEXRHeader(EXRHeader *exr_header); + +// Free's internal data of EXRImage struct +extern int FreeEXRImage(EXRImage *exr_image); + +// Parse EXR version header of a file. +extern int ParseEXRVersionFromFile(EXRVersion *version, const char *filename); + +// Parse EXR version header from memory-mapped EXR data. +extern int ParseEXRVersionFromMemory(EXRVersion *version, + const unsigned char *memory, size_t size); + +// Parse single-part OpenEXR header from a file and initialize `EXRHeader`. +extern int ParseEXRHeaderFromFile(EXRHeader *header, const EXRVersion *version, + const char *filename, const char **err); + +// Parse single-part OpenEXR header from a memory and initialize `EXRHeader`. +extern int ParseEXRHeaderFromMemory(EXRHeader *header, + const EXRVersion *version, + const unsigned char *memory, size_t size, + const char **err); + +// Parse multi-part OpenEXR headers from a file and initialize `EXRHeader*` +// array. +extern int ParseEXRMultipartHeaderFromFile(EXRHeader ***headers, + int *num_headers, + const EXRVersion *version, + const char *filename, + const char **err); + +// Parse multi-part OpenEXR headers from a memory and initialize `EXRHeader*` +// array +extern int ParseEXRMultipartHeaderFromMemory(EXRHeader ***headers, + int *num_headers, + const EXRVersion *version, + const unsigned char *memory, + size_t size, const char **err); + +// Loads single-part OpenEXR image from a file. +// Application must setup `ParseEXRHeaderFromFile` before calling this function. +// Application can free EXRImage using `FreeEXRImage` +// Returns negative value and may set error string in `err` when there's an +// error +extern int LoadEXRImageFromFile(EXRImage *image, const EXRHeader *header, + const char *filename, const char **err); + +// Loads single-part OpenEXR image from a memory. +// Application must setup `EXRHeader` with +// `ParseEXRHeaderFromMemory` before calling this function. +// Application can free EXRImage using `FreeEXRImage` +// Returns negative value and may set error string in `err` when there's an +// error +extern int LoadEXRImageFromMemory(EXRImage *image, const EXRHeader *header, + const unsigned char *memory, + const size_t size, + const char **err); + +// Loads multi-part OpenEXR image from a file. +// Application must setup `ParseEXRMultipartHeaderFromFile` before calling this +// function. +// Application can free EXRImage using `FreeEXRImage` +// Returns negative value and may set error string in `err` when there's an +// error +extern int LoadEXRMultipartImageFromFile(EXRImage *images, + const EXRHeader **headers, + unsigned int num_parts, + const char *filename, const char **err); -// Saves floating point RGBA image as OpenEXR. -// Image is compressed using EXRImage.compression value. -// Return 0 if success -// Returns error string in `err` when there's an error -// extern int SaveEXR(const float *in_rgba, int width, int height, -// const char *filename, const char **err); +// Loads multi-part OpenEXR image from a memory. +// Application must setup `EXRHeader*` array with +// `ParseEXRMultipartHeaderFromMemory` before calling this function. +// Application can free EXRImage using `FreeEXRImage` +// Returns negative value and may set error string in `err` when there's an +// error +extern int LoadEXRMultipartImageFromMemory(EXRImage *images, + const EXRHeader **headers, + unsigned int num_parts, + const unsigned char *memory, + const char **err); // Saves multi-channel, single-frame OpenEXR image to a file. -// `compression_type` is one of TINYEXR_COMPRESSIONTYPE_*. -// Returns 0 if success -// Returns error string in `err` when there's an error -extern int SaveMultiChannelEXRToFile(const EXRImage *image, - const char *filename, const char **err); +// Returns negative value and may set error string in `err` when there's an +// error +extern int SaveEXRImageToFile(const EXRImage *image, + const EXRHeader *exr_header, const char *filename, + const char **err); // Saves multi-channel, single-frame OpenEXR image to a memory. // Image is compressed using EXRImage.compression value. // Return the number of bytes if succes. -// Retruns 0 if success, negative number when failed. -// Returns error string in `err` when there's an error -extern size_t SaveMultiChannelEXRToMemory(const EXRImage *image, - unsigned char **memory, - const char **err); +// Returns negative value and may set error string in `err` when there's an +// error +extern size_t SaveEXRImageToMemory(const EXRImage *image, + const EXRHeader *exr_header, + unsigned char **memory, const char **err); // Loads single-frame OpenEXR deep image. // Application must free memory of variables in DeepImage(image, offset_table) -// Returns 0 if success -// Returns error string in `err` when there's an error +// Returns negative value and may set error string in `err` when there's an +// error extern int LoadDeepEXR(DeepImage *out_image, const char *filename, const char **err); // NOT YET IMPLEMENTED: // Saves single-frame OpenEXR deep image. -// Return 0 if success -// Returns error string in `err` when there's an error +// Returns negative value and may set error string in `err` when there's an +// error // extern int SaveDeepEXR(const DeepImage *in_image, const char *filename, // const char **err); @@ -195,54 +399,86 @@ extern int LoadDeepEXR(DeepImage *out_image, const char *filename, // char *filename, // const char **err); -// Initialize of EXRImage struct -extern void InitEXRImage(EXRImage *exrImage); - -// Free's internal data of EXRImage struct -// Returns 0 if success. -extern int FreeEXRImage(EXRImage *exrImage); - -// For emscripten. -// Parse single-frame OpenEXR header from memory. -// Return 0 if success -extern int ParseEXRHeaderFromMemory(EXRAttribute *customAttributes, - int *numCustomAttributes, int *width, - int *height, const unsigned char *memory); - // For emscripten. // Loads single-frame OpenEXR image from memory. Assume EXR image contains // RGB(A) channels. // `out_rgba` must have enough memory(at least sizeof(float) x 4(RGBA) x width x // hight) -// Return 0 if success -// Returns error string in `err` when there's an error +// Returns negative value and may set error string in `err` when there's an +// error extern int LoadEXRFromMemory(float *out_rgba, const unsigned char *memory, - const char **err); + size_t size, const char **err); #ifdef __cplusplus } #endif #ifdef TINYEXR_IMPLEMENTATION +#include +#include #include #include -#include #include -#include +#include #include #include +// @todo { remove including tinyexr.h } #include "tinyexr.h" #ifdef _OPENMP #include #endif -namespace { +#if TINYEXR_USE_MINIZ +#else +#include "zlib.h" +#endif + +#if TINYEXR_USE_ZFP +#include "zfp.h" +#endif + +#if __cplusplus > 199711L +// C++11 +#include +#endif // __cplusplus > 199711L + +namespace tinyexr { + +#if __cplusplus > 199711L +// C++11 +typedef uint64_t tinyexr_uint64; +typedef int64_t tinyexr_int64; +#else +// Although `long long` is not a standard type pre C++11, assume it is defined +// as a compiler's extension. +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wc++11-long-long" +#endif +typedef unsigned long long tinyexr_uint64; +typedef long long tinyexr_int64; +#ifdef __clang__ +#pragma clang diagnostic pop +#endif +#endif + +#if TINYEXR_USE_MINIZ namespace miniz { +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wc++11-long-long" +#pragma clang diagnostic ignored "-Wold-style-cast" +#pragma clang diagnostic ignored "-Wpadded" +#pragma clang diagnostic ignored "-Wsign-conversion" +#pragma clang diagnostic ignored "-Wc++11-extensions" +#pragma clang diagnostic ignored "-Wconversion" +#endif + /* miniz.c v1.15 - public domain deflate/inflate, zlib-subset, ZIP reading/writing/appending, PNG writing See "unlicense" statement at the end of this file. @@ -515,7 +751,7 @@ namespace miniz { // get/set file times, and the C run-time funcs that get/set times won't be // called. // The current downside is the times written to your archives will be from 1979. -//#define MINIZ_NO_TIME +#define MINIZ_NO_TIME // Define MINIZ_NO_ARCHIVE_APIS to disable all ZIP archive API's. //#define MINIZ_NO_ARCHIVE_APIS @@ -551,8 +787,8 @@ namespace miniz { #include #endif -#if defined(_M_IX86) || defined(_M_X64) || defined(__i386__) || \ - defined(__i386) || defined(__i486__) || defined(__i486) || \ +#if defined(_M_IX86) || defined(_M_X64) || defined(__i386__) || \ + defined(__i386) || defined(__i486__) || defined(__i486) || \ 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 @@ -571,12 +807,12 @@ namespace miniz { // 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 -#define MINIZ_USE_UNALIGNED_LOADS_AND_STORES \ - 0 // disable to suppress compiler warnings +#define MINIZ_USE_UNALIGNED_LOADS_AND_STORES \ + 0 // disable to suppress compiler warnings #endif -#if defined(_M_X64) || defined(_WIN64) || defined(__MINGW64__) || \ - defined(_LP64) || defined(__LP64__) || defined(__ia64__) || \ +#if defined(_M_X64) || defined(_WIN64) || defined(__MINGW64__) || \ + defined(_LP64) || defined(__LP64__) || defined(__ia64__) || \ defined(__x86_64__) // Set MINIZ_HAS_64BIT_REGISTERS to 1 if operations on 64-bit integers are // reasonably fast (and don't involve compiler generated calls to helper @@ -682,25 +918,25 @@ struct mz_internal_state; // Compression/decompression stream struct. typedef struct mz_stream_s { - const unsigned char *next_in; // pointer to next byte to read - unsigned int avail_in; // number of bytes available at next_in - mz_ulong total_in; // total number of bytes consumed so far + const unsigned char *next_in; // pointer to next byte to read + unsigned int avail_in; // number of bytes available at next_in + mz_ulong total_in; // total number of bytes consumed so far - unsigned char *next_out; // pointer to next byte to write - unsigned int avail_out; // number of bytes that can be written to next_out - mz_ulong total_out; // total number of bytes produced so far + unsigned char *next_out; // pointer to next byte to write + unsigned int avail_out; // number of bytes that can be written to next_out + mz_ulong total_out; // total number of bytes produced so far - char *msg; // error msg (unused) - struct mz_internal_state *state; // internal state, allocated by zalloc/zfree + char *msg; // error msg (unused) + struct mz_internal_state *state; // internal state, allocated by zalloc/zfree mz_alloc_func - zalloc; // optional heap allocation function (defaults to malloc) - mz_free_func zfree; // optional heap free function (defaults to free) - void *opaque; // heap alloc function user pointer + zalloc; // optional heap allocation function (defaults to malloc) + mz_free_func zfree; // optional heap free function (defaults to free) + void *opaque; // heap alloc function user pointer - int data_type; // data_type (unused) - mz_ulong adler; // adler32 of the source or uncompressed data - mz_ulong reserved; // not used + int data_type; // data_type (unused) + mz_ulong adler; // adler32 of the source or uncompressed data + mz_ulong reserved; // not used } mz_stream; typedef mz_stream *mz_streamp; @@ -906,9 +1142,9 @@ typedef void *const voidpc; #define ZLIB_VER_SUBREVISION MZ_VER_SUBREVISION #define zlibVersion mz_version #define zlib_version mz_version() -#endif // #ifndef MINIZ_NO_ZLIB_COMPATIBLE_NAMES +#endif // #ifndef MINIZ_NO_ZLIB_COMPATIBLE_NAMES -#endif // MINIZ_NO_ZLIB_APIS +#endif // MINIZ_NO_ZLIB_APIS // ------------------- Types and macros @@ -1196,9 +1432,9 @@ void *mz_zip_extract_archive_file_to_heap(const char *pZip_filename, const char *pArchive_name, size_t *pSize, mz_uint zip_flags); -#endif // #ifndef MINIZ_NO_ARCHIVE_WRITING_APIS +#endif // #ifndef MINIZ_NO_ARCHIVE_WRITING_APIS -#endif // #ifndef MINIZ_NO_ARCHIVE_APIS +#endif // #ifndef MINIZ_NO_ARCHIVE_APIS // ------------------- Low-level Decompression API Definitions @@ -1271,10 +1507,10 @@ typedef enum { } tinfl_status; // Initializes the decompressor to its initial state. -#define tinfl_init(r) \ - do { \ - (r)->m_state = 0; \ - } \ +#define tinfl_init(r) \ + do { \ + (r)->m_state = 0; \ + } \ MZ_MACRO_END #define tinfl_get_adler32(r) (r)->m_check_adler32 @@ -1479,7 +1715,7 @@ typedef enum { TDEFL_STATUS_BAD_PARAM = -2, TDEFL_STATUS_PUT_BUF_FAILED = -1, TDEFL_STATUS_OKAY = 0, - TDEFL_STATUS_DONE = 1, + TDEFL_STATUS_DONE = 1 } tdefl_status; // Must map to MZ_NO_FLUSH, MZ_SYNC_FLUSH, etc. enums @@ -1561,13 +1797,13 @@ mz_uint32 tdefl_get_adler32(tdefl_compressor *d); // MZ_RLE, or MZ_FIXED mz_uint tdefl_create_comp_flags_from_zip_params(int level, int window_bits, int strategy); -#endif // #ifndef MINIZ_NO_ZLIB_APIS +#endif // #ifndef MINIZ_NO_ZLIB_APIS #ifdef __cplusplus } #endif -#endif // MINIZ_HEADER_INCLUDED +#endif // MINIZ_HEADER_INCLUDED // ------------------- End of Header: Implementation follows. (If you only want // the header, define MINIZ_HEADER_FILE_ONLY.) @@ -1578,14 +1814,14 @@ typedef unsigned char mz_validate_uint16[sizeof(mz_uint16) == 2 ? 1 : -1]; typedef unsigned char mz_validate_uint32[sizeof(mz_uint32) == 4 ? 1 : -1]; typedef unsigned char mz_validate_uint64[sizeof(mz_uint64) == 8 ? 1 : -1]; -#include #include +#include #define MZ_ASSERT(x) assert(x) #ifdef MINIZ_NO_MALLOC #define MZ_MALLOC(x) NULL -#define MZ_FREE(x) (void) x, ((void)0) +#define MZ_FREE(x) (void)x, ((void)0) #define MZ_REALLOC(p, x) NULL #else #define MZ_MALLOC(x) malloc(x) @@ -1601,13 +1837,13 @@ typedef unsigned char mz_validate_uint64[sizeof(mz_uint64) == 8 ? 1 : -1]; #define MZ_READ_LE16(p) *((const mz_uint16 *)(p)) #define MZ_READ_LE32(p) *((const mz_uint32 *)(p)) #else -#define MZ_READ_LE16(p) \ - ((mz_uint32)(((const mz_uint8 *)(p))[0]) | \ +#define MZ_READ_LE16(p) \ + ((mz_uint32)(((const mz_uint8 *)(p))[0]) | \ ((mz_uint32)(((const mz_uint8 *)(p))[1]) << 8U)) -#define MZ_READ_LE32(p) \ - ((mz_uint32)(((const mz_uint8 *)(p))[0]) | \ - ((mz_uint32)(((const mz_uint8 *)(p))[1]) << 8U) | \ - ((mz_uint32)(((const mz_uint8 *)(p))[2]) << 16U) | \ +#define MZ_READ_LE32(p) \ + ((mz_uint32)(((const mz_uint8 *)(p))[0]) | \ + ((mz_uint32)(((const mz_uint8 *)(p))[1]) << 8U) | \ + ((mz_uint32)(((const mz_uint8 *)(p))[2]) << 16U) | \ ((mz_uint32)(((const mz_uint8 *)(p))[3]) << 24U)) #endif @@ -1628,8 +1864,7 @@ extern "C" { mz_ulong mz_adler32(mz_ulong adler, const unsigned char *ptr, size_t buf_len) { mz_uint32 i, s1 = (mz_uint32)(adler & 0xffff), s2 = (mz_uint32)(adler >> 16); size_t block_len = buf_len % 5552; - if (!ptr) - return MZ_ADLER32_INIT; + if (!ptr) return MZ_ADLER32_INIT; while (buf_len) { for (i = 0; i + 7 < block_len; i += 8, ptr += 8) { s1 += ptr[0], s2 += s1; @@ -1641,8 +1876,7 @@ mz_ulong mz_adler32(mz_ulong adler, const unsigned char *ptr, size_t buf_len) { s1 += ptr[6], s2 += s1; s1 += ptr[7], s2 += s1; } - for (; i < block_len; ++i) - s1 += *ptr++, s2 += s1; + for (; i < block_len; ++i) s1 += *ptr++, s2 += s1; s1 %= 65521U, s2 %= 65521U; buf_len -= block_len; block_len = 5552; @@ -1659,8 +1893,7 @@ mz_ulong mz_crc32(mz_ulong crc, const mz_uint8 *ptr, size_t buf_len) { 0x4db26158, 0x5005713c, 0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c, 0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c}; mz_uint32 crcu32 = (mz_uint32)crc; - if (!ptr) - return MZ_CRC32_INIT; + if (!ptr) return MZ_CRC32_INIT; crcu32 = ~crcu32; while (buf_len--) { mz_uint8 b = *ptr++; @@ -1702,8 +1935,7 @@ int mz_deflateInit2(mz_streamp pStream, int level, int method, int window_bits, TDEFL_COMPUTE_ADLER32 | tdefl_create_comp_flags_from_zip_params(level, window_bits, strategy); - if (!pStream) - return MZ_STREAM_ERROR; + if (!pStream) return MZ_STREAM_ERROR; if ((method != MZ_DEFLATED) || ((mem_level < 1) || (mem_level > 9)) || ((window_bits != MZ_DEFAULT_WINDOW_BITS) && (-window_bits != MZ_DEFAULT_WINDOW_BITS))) @@ -1715,15 +1947,12 @@ int mz_deflateInit2(mz_streamp pStream, int level, int method, int window_bits, pStream->reserved = 0; pStream->total_in = 0; pStream->total_out = 0; - if (!pStream->zalloc) - pStream->zalloc = def_alloc_func; - if (!pStream->zfree) - pStream->zfree = def_free_func; + if (!pStream->zalloc) pStream->zalloc = def_alloc_func; + if (!pStream->zfree) pStream->zfree = def_free_func; pComp = (tdefl_compressor *)pStream->zalloc(pStream->opaque, 1, sizeof(tdefl_compressor)); - if (!pComp) - return MZ_MEM_ERROR; + if (!pComp) return MZ_MEM_ERROR; pStream->state = (struct mz_internal_state *)pComp; @@ -1753,11 +1982,9 @@ int mz_deflate(mz_streamp pStream, int flush) { if ((!pStream) || (!pStream->state) || (flush < 0) || (flush > MZ_FINISH) || (!pStream->next_out)) return MZ_STREAM_ERROR; - if (!pStream->avail_out) - return MZ_BUF_ERROR; + if (!pStream->avail_out) return MZ_BUF_ERROR; - if (flush == MZ_PARTIAL_FLUSH) - flush = MZ_SYNC_FLUSH; + if (flush == MZ_PARTIAL_FLUSH) flush = MZ_SYNC_FLUSH; if (((tdefl_compressor *)pStream->state)->m_prev_return_status == TDEFL_STATUS_DONE) @@ -1794,15 +2021,14 @@ int mz_deflate(mz_streamp pStream, int flush) { if ((flush) || (pStream->total_in != orig_total_in) || (pStream->total_out != orig_total_out)) break; - return MZ_BUF_ERROR; // Can't make forward progress without some input. + return MZ_BUF_ERROR; // Can't make forward progress without some input. } } return mz_status; } int mz_deflateEnd(mz_streamp pStream) { - if (!pStream) - return MZ_STREAM_ERROR; + if (!pStream) return MZ_STREAM_ERROR; if (pStream->state) { pStream->zfree(pStream->opaque, pStream->state); pStream->state = NULL; @@ -1825,8 +2051,7 @@ int mz_compress2(unsigned char *pDest, mz_ulong *pDest_len, memset(&stream, 0, sizeof(stream)); // In case mz_ulong is 64-bits (argh I hate longs). - if ((source_len | *pDest_len) > 0xFFFFFFFFU) - return MZ_PARAM_ERROR; + if ((source_len | *pDest_len) > 0xFFFFFFFFU) return MZ_PARAM_ERROR; stream.next_in = pSource; stream.avail_in = (mz_uint32)source_len; @@ -1834,8 +2059,7 @@ int mz_compress2(unsigned char *pDest, mz_ulong *pDest_len, stream.avail_out = (mz_uint32)*pDest_len; status = mz_deflateInit(&stream, level); - if (status != MZ_OK) - return status; + if (status != MZ_OK) return status; status = mz_deflate(&stream, MZ_FINISH); if (status != MZ_STREAM_END) { @@ -1867,8 +2091,7 @@ typedef struct { int mz_inflateInit2(mz_streamp pStream, int window_bits) { inflate_state *pDecomp; - if (!pStream) - return MZ_STREAM_ERROR; + if (!pStream) return MZ_STREAM_ERROR; if ((window_bits != MZ_DEFAULT_WINDOW_BITS) && (-window_bits != MZ_DEFAULT_WINDOW_BITS)) return MZ_PARAM_ERROR; @@ -1879,15 +2102,12 @@ int mz_inflateInit2(mz_streamp pStream, int window_bits) { pStream->total_in = 0; pStream->total_out = 0; pStream->reserved = 0; - if (!pStream->zalloc) - pStream->zalloc = def_alloc_func; - if (!pStream->zfree) - pStream->zfree = def_free_func; + if (!pStream->zalloc) pStream->zalloc = def_alloc_func; + if (!pStream->zfree) pStream->zfree = def_free_func; pDecomp = (inflate_state *)pStream->zalloc(pStream->opaque, 1, sizeof(inflate_state)); - if (!pDecomp) - return MZ_MEM_ERROR; + if (!pDecomp) return MZ_MEM_ERROR; pStream->state = (struct mz_internal_state *)pDecomp; @@ -1912,25 +2132,20 @@ int mz_inflate(mz_streamp pStream, int flush) { size_t in_bytes, out_bytes, orig_avail_in; tinfl_status status; - if ((!pStream) || (!pStream->state)) - return MZ_STREAM_ERROR; - if (flush == MZ_PARTIAL_FLUSH) - flush = MZ_SYNC_FLUSH; + if ((!pStream) || (!pStream->state)) return MZ_STREAM_ERROR; + if (flush == MZ_PARTIAL_FLUSH) flush = MZ_SYNC_FLUSH; if ((flush) && (flush != MZ_SYNC_FLUSH) && (flush != MZ_FINISH)) return MZ_STREAM_ERROR; pState = (inflate_state *)pStream->state; - if (pState->m_window_bits > 0) - decomp_flags |= TINFL_FLAG_PARSE_ZLIB_HEADER; + if (pState->m_window_bits > 0) decomp_flags |= TINFL_FLAG_PARSE_ZLIB_HEADER; orig_avail_in = pStream->avail_in; first_call = pState->m_first_call; pState->m_first_call = 0; - if (pState->m_last_status < 0) - return MZ_DATA_ERROR; + if (pState->m_last_status < 0) return MZ_DATA_ERROR; - if (pState->m_has_flushed && (flush != MZ_FINISH)) - return MZ_STREAM_ERROR; + if (pState->m_has_flushed && (flush != MZ_FINISH)) return MZ_STREAM_ERROR; pState->m_has_flushed |= (flush == MZ_FINISH); if ((flush == MZ_FINISH) && (first_call)) { @@ -1960,8 +2175,7 @@ int mz_inflate(mz_streamp pStream, int flush) { return MZ_STREAM_END; } // flush != MZ_FINISH then we must assume there's more input. - if (flush != MZ_FINISH) - decomp_flags |= TINFL_FLAG_HAS_MORE_INPUT; + if (flush != MZ_FINISH) decomp_flags |= TINFL_FLAG_HAS_MORE_INPUT; if (pState->m_dict_avail) { n = MZ_MIN(pState->m_dict_avail, pStream->avail_out); @@ -2002,13 +2216,13 @@ int mz_inflate(mz_streamp pStream, int flush) { pState->m_dict_ofs = (pState->m_dict_ofs + n) & (TINFL_LZ_DICT_SIZE - 1); if (status < 0) - return MZ_DATA_ERROR; // Stream is corrupted (there could be some - // uncompressed data left in the output dictionary - - // oh well). + return MZ_DATA_ERROR; // Stream is corrupted (there could be some + // uncompressed data left in the output dictionary - + // oh well). else if ((status == TINFL_STATUS_NEEDS_MORE_INPUT) && (!orig_avail_in)) - return MZ_BUF_ERROR; // Signal caller that we can't make forward progress - // without supplying more input or by setting flush - // to MZ_FINISH. + return MZ_BUF_ERROR; // Signal caller that we can't make forward progress + // without supplying more input or by setting flush + // to MZ_FINISH. else if (flush == MZ_FINISH) { // The output buffer MUST be large to hold the remaining uncompressed data // when flush==MZ_FINISH. @@ -2030,8 +2244,7 @@ int mz_inflate(mz_streamp pStream, int flush) { } int mz_inflateEnd(mz_streamp pStream) { - if (!pStream) - return MZ_STREAM_ERROR; + if (!pStream) return MZ_STREAM_ERROR; if (pStream->state) { pStream->zfree(pStream->opaque, pStream->state); pStream->state = NULL; @@ -2046,8 +2259,7 @@ int mz_uncompress(unsigned char *pDest, mz_ulong *pDest_len, memset(&stream, 0, sizeof(stream)); // In case mz_ulong is 64-bits (argh I hate longs). - if ((source_len | *pDest_len) > 0xFFFFFFFFU) - return MZ_PARAM_ERROR; + if ((source_len | *pDest_len) > 0xFFFFFFFFU) return MZ_PARAM_ERROR; stream.next_in = pSource; stream.avail_in = (mz_uint32)source_len; @@ -2055,8 +2267,7 @@ int mz_uncompress(unsigned char *pDest, mz_ulong *pDest_len, stream.avail_out = (mz_uint32)*pDest_len; status = mz_inflateInit(&stream); - if (status != MZ_OK) - return status; + if (status != MZ_OK) return status; status = mz_inflate(&stream, MZ_FINISH); if (status != MZ_STREAM_END) { @@ -2085,12 +2296,11 @@ const char *mz_error(int err) { {MZ_PARAM_ERROR, "parameter error"}}; mz_uint i; for (i = 0; i < sizeof(s_error_descs) / sizeof(s_error_descs[0]); ++i) - if (s_error_descs[i].m_err == err) - return s_error_descs[i].m_pDesc; + if (s_error_descs[i].m_err == err) return s_error_descs[i].m_pDesc; return NULL; } -#endif // MINIZ_NO_ZLIB_APIS +#endif // MINIZ_NO_ZLIB_APIS // ------------------- Low-level Decompression (completely independent from all // compression API's) @@ -2098,24 +2308,23 @@ const char *mz_error(int err) { #define TINFL_MEMCPY(d, s, l) memcpy(d, s, l) #define TINFL_MEMSET(p, c, l) memset(p, c, l) -#define TINFL_CR_BEGIN \ - switch (r->m_state) { \ - case 0: -#define TINFL_CR_RETURN(state_index, result) \ - do { \ - status = result; \ - r->m_state = state_index; \ - goto common_exit; \ - case state_index: \ - ; \ - } \ +#define TINFL_CR_BEGIN \ + switch (r->m_state) { \ + case 0: +#define TINFL_CR_RETURN(state_index, result) \ + do { \ + status = result; \ + r->m_state = state_index; \ + goto common_exit; \ + case state_index:; \ + } \ MZ_MACRO_END -#define TINFL_CR_RETURN_FOREVER(state_index, result) \ - do { \ - for (;;) { \ - TINFL_CR_RETURN(state_index, result); \ - } \ - } \ +#define TINFL_CR_RETURN_FOREVER(state_index, result) \ + do { \ + for (;;) { \ + TINFL_CR_RETURN(state_index, result); \ + } \ + } \ MZ_MACRO_END #define TINFL_CR_FINISH } @@ -2124,51 +2333,51 @@ const char *mz_error(int err) { // the inflator never // reads ahead more than it needs to. Currently TINFL_GET_BYTE() pads the end of // the stream with 0's in this scenario. -#define TINFL_GET_BYTE(state_index, c) \ - do { \ - if (pIn_buf_cur >= pIn_buf_end) { \ - for (;;) { \ - if (decomp_flags & TINFL_FLAG_HAS_MORE_INPUT) { \ - TINFL_CR_RETURN(state_index, TINFL_STATUS_NEEDS_MORE_INPUT); \ - if (pIn_buf_cur < pIn_buf_end) { \ - c = *pIn_buf_cur++; \ - break; \ - } \ - } else { \ - c = 0; \ - break; \ - } \ - } \ - } else \ - c = *pIn_buf_cur++; \ - } \ +#define TINFL_GET_BYTE(state_index, c) \ + do { \ + if (pIn_buf_cur >= pIn_buf_end) { \ + for (;;) { \ + if (decomp_flags & TINFL_FLAG_HAS_MORE_INPUT) { \ + TINFL_CR_RETURN(state_index, TINFL_STATUS_NEEDS_MORE_INPUT); \ + if (pIn_buf_cur < pIn_buf_end) { \ + c = *pIn_buf_cur++; \ + break; \ + } \ + } else { \ + c = 0; \ + break; \ + } \ + } \ + } else \ + c = *pIn_buf_cur++; \ + } \ MZ_MACRO_END -#define TINFL_NEED_BITS(state_index, n) \ - do { \ - mz_uint c; \ - TINFL_GET_BYTE(state_index, c); \ - bit_buf |= (((tinfl_bit_buf_t)c) << num_bits); \ - num_bits += 8; \ +#define TINFL_NEED_BITS(state_index, n) \ + do { \ + mz_uint c; \ + TINFL_GET_BYTE(state_index, c); \ + bit_buf |= (((tinfl_bit_buf_t)c) << num_bits); \ + num_bits += 8; \ } while (num_bits < (mz_uint)(n)) -#define TINFL_SKIP_BITS(state_index, n) \ - do { \ - if (num_bits < (mz_uint)(n)) { \ - TINFL_NEED_BITS(state_index, n); \ - } \ - bit_buf >>= (n); \ - num_bits -= (n); \ - } \ +#define TINFL_SKIP_BITS(state_index, n) \ + do { \ + if (num_bits < (mz_uint)(n)) { \ + TINFL_NEED_BITS(state_index, n); \ + } \ + bit_buf >>= (n); \ + num_bits -= (n); \ + } \ MZ_MACRO_END -#define TINFL_GET_BITS(state_index, b, n) \ - do { \ - if (num_bits < (mz_uint)(n)) { \ - TINFL_NEED_BITS(state_index, n); \ - } \ - b = bit_buf & ((1 << (n)) - 1); \ - bit_buf >>= (n); \ - num_bits -= (n); \ - } \ +#define TINFL_GET_BITS(state_index, b, n) \ + do { \ + if (num_bits < (mz_uint)(n)) { \ + TINFL_NEED_BITS(state_index, n); \ + } \ + b = bit_buf & ((1 << (n)) - 1); \ + bit_buf >>= (n); \ + num_bits -= (n); \ + } \ MZ_MACRO_END // TINFL_HUFF_BITBUF_FILL() is only used rarely, when the number of bytes @@ -2180,24 +2389,22 @@ const char *mz_error(int err) { // If this fails, it reads another byte, and tries again until it succeeds or // until the // bit buffer contains >=15 bits (deflate's max. Huffman code size). -#define TINFL_HUFF_BITBUF_FILL(state_index, pHuff) \ - do { \ - temp = (pHuff)->m_look_up[bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)]; \ - if (temp >= 0) { \ - code_len = temp >> 9; \ - if ((code_len) && (num_bits >= code_len)) \ - break; \ - } else if (num_bits > TINFL_FAST_LOOKUP_BITS) { \ - code_len = TINFL_FAST_LOOKUP_BITS; \ - do { \ - temp = (pHuff)->m_tree[~temp + ((bit_buf >> code_len++) & 1)]; \ - } while ((temp < 0) && (num_bits >= (code_len + 1))); \ - if (temp >= 0) \ - break; \ - } \ - TINFL_GET_BYTE(state_index, c); \ - bit_buf |= (((tinfl_bit_buf_t)c) << num_bits); \ - num_bits += 8; \ +#define TINFL_HUFF_BITBUF_FILL(state_index, pHuff) \ + do { \ + temp = (pHuff)->m_look_up[bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)]; \ + if (temp >= 0) { \ + code_len = temp >> 9; \ + if ((code_len) && (num_bits >= code_len)) break; \ + } else if (num_bits > TINFL_FAST_LOOKUP_BITS) { \ + code_len = TINFL_FAST_LOOKUP_BITS; \ + do { \ + temp = (pHuff)->m_tree[~temp + ((bit_buf >> code_len++) & 1)]; \ + } while ((temp < 0) && (num_bits >= (code_len + 1))); \ + if (temp >= 0) break; \ + } \ + TINFL_GET_BYTE(state_index, c); \ + bit_buf |= (((tinfl_bit_buf_t)c) << num_bits); \ + num_bits += 8; \ } while (num_bits < 15); // TINFL_HUFF_DECODE() decodes the next Huffman coded symbol. It's more complex @@ -2301,7 +2508,7 @@ tinfl_status tinfl_decompress(tinfl_decompressor *r, if (!(decomp_flags & TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF)) counter |= (((1U << (8U + (r->m_zhdr0 >> 4))) > 32768U) || ((out_buf_size_mask + 1) < - (size_t)(1U << (8U + (r->m_zhdr0 >> 4))))); + (size_t)(1ULL << (8U + (r->m_zhdr0 >> 4))))); if (counter) { TINFL_CR_RETURN_FOREVER(36, TINFL_STATUS_FAILED); } @@ -2360,14 +2567,10 @@ tinfl_status tinfl_decompress(tinfl_decompressor *r, r->m_table_sizes[0] = 288; r->m_table_sizes[1] = 32; TINFL_MEMSET(r->m_tables[1].m_code_size, 5, 32); - for (i = 0; i <= 143; ++i) - *p++ = 8; - for (; i <= 255; ++i) - *p++ = 9; - for (; i <= 279; ++i) - *p++ = 7; - for (; i <= 287; ++i) - *p++ = 8; + for (i = 0; i <= 143; ++i) *p++ = 8; + for (; i <= 255; ++i) *p++ = 9; + for (; i <= 279; ++i) *p++ = 7; + for (; i <= 287; ++i) *p++ = 8; } else { for (counter = 0; counter < 3; counter++) { TINFL_GET_BITS(11, r->m_table_sizes[counter], "\05\05\04"[counter]); @@ -2405,8 +2608,7 @@ tinfl_status tinfl_decompress(tinfl_decompressor *r, sym_index < r->m_table_sizes[r->m_type]; ++sym_index) { mz_uint rev_code = 0, l, cur_code, code_size = pTable->m_code_size[sym_index]; - if (!code_size) - continue; + if (!code_size) continue; cur_code = next_code[code_size]++; for (l = code_size; l > 0; l--, cur_code >>= 1) rev_code = (rev_code << 1) | (cur_code & 1); @@ -2474,8 +2676,7 @@ tinfl_status tinfl_decompress(tinfl_decompressor *r, if (((pIn_buf_end - pIn_buf_cur) < 4) || ((pOut_buf_end - pOut_buf_cur) < 2)) { TINFL_HUFF_DECODE(23, counter, &r->m_tables[0]); - if (counter >= 256) - break; + if (counter >= 256) break; while (pOut_buf_cur >= pOut_buf_end) { TINFL_CR_RETURN(24, TINFL_STATUS_HAS_MORE_OUTPUT); } @@ -2513,8 +2714,7 @@ tinfl_status tinfl_decompress(tinfl_decompressor *r, counter = sym2; bit_buf >>= code_len; num_bits -= code_len; - if (counter & 256) - break; + if (counter & 256) break; #if !TINFL_USE_64BIT_BITBUF if (num_bits < 15) { @@ -2549,8 +2749,7 @@ tinfl_status tinfl_decompress(tinfl_decompressor *r, pOut_buf_cur += 2; } } - if ((counter &= 511) == 256) - break; + if ((counter &= 511) == 256) break; num_extra = s_length_extra[counter - 257]; counter = s_length_base[counter - 257]; @@ -2600,8 +2799,7 @@ tinfl_status tinfl_decompress(tinfl_decompressor *r, if ((counter &= 7) < 3) { if (counter) { pOut_buf_cur[0] = pSrc[0]; - if (counter > 1) - pOut_buf_cur[1] = pSrc[1]; + if (counter > 1) pOut_buf_cur[1] = pSrc[1]; pOut_buf_cur += counter; } continue; @@ -2617,8 +2815,7 @@ tinfl_status tinfl_decompress(tinfl_decompressor *r, } while ((int)(counter -= 3) > 2); if ((int)counter > 0) { pOut_buf_cur[0] = pSrc[0]; - if ((int)counter > 1) - pOut_buf_cur[1] = pSrc[1]; + if ((int)counter > 1) pOut_buf_cur[1] = pSrc[1]; pOut_buf_cur += counter; } } @@ -2666,8 +2863,7 @@ common_exit: s1 += ptr[6], s2 += s1; s1 += ptr[7], s2 += s1; } - for (; i < block_len; ++i) - s1 += *ptr++, s2 += s1; + for (; i < block_len; ++i) s1 += *ptr++, s2 += s1; s1 %= 65521U, s2 %= 65521U; buf_len -= block_len; block_len = 5552; @@ -2704,11 +2900,9 @@ void *tinfl_decompress_mem_to_heap(const void *pSrc_buf, size_t src_buf_len, } src_buf_ofs += src_buf_size; *pOut_len += dst_buf_size; - if (status == TINFL_STATUS_DONE) - break; + if (status == TINFL_STATUS_DONE) break; new_out_buf_capacity = out_buf_capacity * 2; - if (new_out_buf_capacity < 128) - new_out_buf_capacity = 128; + if (new_out_buf_capacity < 128) new_out_buf_capacity = 128; pNew_buf = MZ_REALLOC(pBuf, new_out_buf_capacity); if (!pNew_buf) { MZ_FREE(pBuf); @@ -2743,8 +2937,7 @@ int tinfl_decompress_mem_to_callback(const void *pIn_buf, size_t *pIn_buf_size, tinfl_decompressor decomp; mz_uint8 *pDict = (mz_uint8 *)MZ_MALLOC(TINFL_LZ_DICT_SIZE); size_t in_buf_ofs = 0, dict_ofs = 0; - if (!pDict) - return TINFL_STATUS_FAILED; + if (!pDict) return TINFL_STATUS_FAILED; tinfl_init(&decomp); for (;;) { size_t in_buf_size = *pIn_buf_size - in_buf_ofs, @@ -2966,8 +3159,7 @@ static void tdefl_huffman_enforce_max_code_size(int *pNum_codes, int max_code_size) { int i; mz_uint32 total = 0; - if (code_list_len <= 1) - return; + if (code_list_len <= 1) return; for (i = max_code_size + 1; i <= TDEFL_MAX_SUPPORTED_HUFF_CODESIZE; i++) pNum_codes[max_code_size] += pNum_codes[i]; for (i = max_code_size; i > 0; i--) @@ -3007,8 +3199,7 @@ static void tdefl_optimize_huffman_table(tdefl_compressor *d, int table_num, pSyms = tdefl_radix_sort_syms(num_used_syms, syms0, syms1); tdefl_calculate_minimum_redundancy(pSyms, num_used_syms); - for (i = 0; i < num_used_syms; i++) - num_codes[pSyms[i].m_key]++; + for (i = 0; i < num_used_syms; i++) num_codes[pSyms[i].m_key]++; tdefl_huffman_enforce_max_code_size(num_codes, num_used_syms, code_size_limit); @@ -3026,8 +3217,7 @@ static void tdefl_optimize_huffman_table(tdefl_compressor *d, int table_num, for (i = 0; i < table_len; i++) { mz_uint rev_code = 0, code, code_size; - if ((code_size = d->m_huff_code_sizes[table_num][i]) == 0) - continue; + if ((code_size = d->m_huff_code_sizes[table_num][i]) == 0) continue; code = next_code[code_size]++; for (l = code_size; l > 0; l--, code >>= 1) rev_code = (rev_code << 1) | (code & 1); @@ -3035,61 +3225,60 @@ static void tdefl_optimize_huffman_table(tdefl_compressor *d, int table_num, } } -#define TDEFL_PUT_BITS(b, l) \ - do { \ - mz_uint bits = b; \ - mz_uint len = l; \ - MZ_ASSERT(bits <= ((1U << len) - 1U)); \ - d->m_bit_buffer |= (bits << d->m_bits_in); \ - d->m_bits_in += len; \ - while (d->m_bits_in >= 8) { \ - if (d->m_pOutput_buf < d->m_pOutput_buf_end) \ - *d->m_pOutput_buf++ = (mz_uint8)(d->m_bit_buffer); \ - d->m_bit_buffer >>= 8; \ - d->m_bits_in -= 8; \ - } \ - } \ +#define TDEFL_PUT_BITS(b, l) \ + do { \ + mz_uint bits = b; \ + mz_uint len = l; \ + MZ_ASSERT(bits <= ((1U << len) - 1U)); \ + d->m_bit_buffer |= (bits << d->m_bits_in); \ + d->m_bits_in += len; \ + while (d->m_bits_in >= 8) { \ + if (d->m_pOutput_buf < d->m_pOutput_buf_end) \ + *d->m_pOutput_buf++ = (mz_uint8)(d->m_bit_buffer); \ + d->m_bit_buffer >>= 8; \ + d->m_bits_in -= 8; \ + } \ + } \ MZ_MACRO_END -#define TDEFL_RLE_PREV_CODE_SIZE() \ - { \ - if (rle_repeat_count) { \ - if (rle_repeat_count < 3) { \ - d->m_huff_count[2][prev_code_size] = (mz_uint16)( \ - d->m_huff_count[2][prev_code_size] + rle_repeat_count); \ - while (rle_repeat_count--) \ - packed_code_sizes[num_packed_code_sizes++] = prev_code_size; \ - } else { \ - d->m_huff_count[2][16] = (mz_uint16)(d->m_huff_count[2][16] + 1); \ - packed_code_sizes[num_packed_code_sizes++] = 16; \ - packed_code_sizes[num_packed_code_sizes++] = \ - (mz_uint8)(rle_repeat_count - 3); \ - } \ - rle_repeat_count = 0; \ - } \ +#define TDEFL_RLE_PREV_CODE_SIZE() \ + { \ + if (rle_repeat_count) { \ + if (rle_repeat_count < 3) { \ + d->m_huff_count[2][prev_code_size] = (mz_uint16)( \ + d->m_huff_count[2][prev_code_size] + rle_repeat_count); \ + while (rle_repeat_count--) \ + packed_code_sizes[num_packed_code_sizes++] = prev_code_size; \ + } else { \ + d->m_huff_count[2][16] = (mz_uint16)(d->m_huff_count[2][16] + 1); \ + packed_code_sizes[num_packed_code_sizes++] = 16; \ + packed_code_sizes[num_packed_code_sizes++] = \ + (mz_uint8)(rle_repeat_count - 3); \ + } \ + rle_repeat_count = 0; \ + } \ } -#define TDEFL_RLE_ZERO_CODE_SIZE() \ - { \ - if (rle_z_count) { \ - if (rle_z_count < 3) { \ - d->m_huff_count[2][0] = \ - (mz_uint16)(d->m_huff_count[2][0] + rle_z_count); \ - while (rle_z_count--) \ - packed_code_sizes[num_packed_code_sizes++] = 0; \ - } else if (rle_z_count <= 10) { \ - d->m_huff_count[2][17] = (mz_uint16)(d->m_huff_count[2][17] + 1); \ - packed_code_sizes[num_packed_code_sizes++] = 17; \ - packed_code_sizes[num_packed_code_sizes++] = \ - (mz_uint8)(rle_z_count - 3); \ - } else { \ - d->m_huff_count[2][18] = (mz_uint16)(d->m_huff_count[2][18] + 1); \ - packed_code_sizes[num_packed_code_sizes++] = 18; \ - packed_code_sizes[num_packed_code_sizes++] = \ - (mz_uint8)(rle_z_count - 11); \ - } \ - rle_z_count = 0; \ - } \ +#define TDEFL_RLE_ZERO_CODE_SIZE() \ + { \ + if (rle_z_count) { \ + if (rle_z_count < 3) { \ + d->m_huff_count[2][0] = \ + (mz_uint16)(d->m_huff_count[2][0] + rle_z_count); \ + while (rle_z_count--) packed_code_sizes[num_packed_code_sizes++] = 0; \ + } else if (rle_z_count <= 10) { \ + d->m_huff_count[2][17] = (mz_uint16)(d->m_huff_count[2][17] + 1); \ + packed_code_sizes[num_packed_code_sizes++] = 17; \ + packed_code_sizes[num_packed_code_sizes++] = \ + (mz_uint8)(rle_z_count - 3); \ + } else { \ + d->m_huff_count[2][18] = (mz_uint16)(d->m_huff_count[2][18] + 1); \ + packed_code_sizes[num_packed_code_sizes++] = 18; \ + packed_code_sizes[num_packed_code_sizes++] = \ + (mz_uint8)(rle_z_count - 11); \ + } \ + rle_z_count = 0; \ + } \ } static mz_uint8 s_tdefl_packed_code_size_syms_swizzle[] = { @@ -3110,11 +3299,9 @@ static void tdefl_start_dynamic_block(tdefl_compressor *d) { tdefl_optimize_huffman_table(d, 1, TDEFL_MAX_HUFF_SYMBOLS_1, 15, MZ_FALSE); for (num_lit_codes = 286; num_lit_codes > 257; num_lit_codes--) - if (d->m_huff_code_sizes[0][num_lit_codes - 1]) - break; + if (d->m_huff_code_sizes[0][num_lit_codes - 1]) break; for (num_dist_codes = 30; num_dist_codes > 1; num_dist_codes--) - if (d->m_huff_code_sizes[1][num_dist_codes - 1]) - break; + if (d->m_huff_code_sizes[1][num_dist_codes - 1]) break; memcpy(code_sizes_to_pack, &d->m_huff_code_sizes[0][0], num_lit_codes); memcpy(code_sizes_to_pack + num_lit_codes, &d->m_huff_code_sizes[1][0], @@ -3184,14 +3371,10 @@ static void tdefl_start_static_block(tdefl_compressor *d) { mz_uint i; mz_uint8 *p = &d->m_huff_code_sizes[0][0]; - for (i = 0; i <= 143; ++i) - *p++ = 8; - for (; i <= 255; ++i) - *p++ = 9; - for (; i <= 279; ++i) - *p++ = 7; - for (; i <= 287; ++i) - *p++ = 8; + for (i = 0; i <= 143; ++i) *p++ = 8; + for (; i <= 255; ++i) *p++ = 9; + for (; i <= 279; ++i) *p++ = 7; + for (; i <= 287; ++i) *p++ = 8; memset(d->m_huff_code_sizes[1], 5, 32); @@ -3205,7 +3388,7 @@ static const mz_uint mz_bitmasks[17] = { 0x0000, 0x0001, 0x0003, 0x0007, 0x000F, 0x001F, 0x003F, 0x007F, 0x00FF, 0x01FF, 0x03FF, 0x07FF, 0x0FFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF}; -#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN && \ +#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN && \ MINIZ_HAS_64BIT_REGISTERS static mz_bool tdefl_compress_lz_codes(tdefl_compressor *d) { mz_uint flags; @@ -3215,17 +3398,16 @@ static mz_bool tdefl_compress_lz_codes(tdefl_compressor *d) { mz_uint64 bit_buffer = d->m_bit_buffer; mz_uint bits_in = d->m_bits_in; -#define TDEFL_PUT_BITS_FAST(b, l) \ - { \ - bit_buffer |= (((mz_uint64)(b)) << bits_in); \ - bits_in += (l); \ +#define TDEFL_PUT_BITS_FAST(b, l) \ + { \ + bit_buffer |= (((mz_uint64)(b)) << bits_in); \ + bits_in += (l); \ } flags = 1; for (pLZ_codes = d->m_lz_code_buf; pLZ_codes < pLZ_code_buf_end; flags >>= 1) { - if (flags == 1) - flags = *pLZ_codes++ | 0x100; + if (flags == 1) flags = *pLZ_codes++ | 0x100; if (flags & 1) { mz_uint s0, s1, n0, n1, sym, num_extra_bits; @@ -3275,8 +3457,7 @@ static mz_bool tdefl_compress_lz_codes(tdefl_compressor *d) { } } - if (pOutput_buf >= d->m_pOutput_buf_end) - return MZ_FALSE; + if (pOutput_buf >= d->m_pOutput_buf_end) return MZ_FALSE; *(mz_uint64 *)pOutput_buf = bit_buffer; pOutput_buf += (bits_in >> 3); @@ -3309,8 +3490,7 @@ static mz_bool tdefl_compress_lz_codes(tdefl_compressor *d) { flags = 1; for (pLZ_codes = d->m_lz_code_buf; pLZ_codes < d->m_pLZ_code_buf; flags >>= 1) { - if (flags == 1) - flags = *pLZ_codes++ | 0x100; + if (flags == 1) flags = *pLZ_codes++ | 0x100; if (flags & 1) { mz_uint sym, num_extra_bits; mz_uint match_len = pLZ_codes[0], @@ -3344,8 +3524,8 @@ static mz_bool tdefl_compress_lz_codes(tdefl_compressor *d) { return (d->m_pOutput_buf < d->m_pOutput_buf_end); } -#endif // MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN && - // MINIZ_HAS_64BIT_REGISTERS +#endif // MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN && + // MINIZ_HAS_64BIT_REGISTERS static mz_bool tdefl_compress_block(tdefl_compressor *d, mz_bool static_block) { if (static_block) @@ -3487,10 +3667,9 @@ static int tdefl_flush_block(tdefl_compressor *d, int flush) { #if MINIZ_USE_UNALIGNED_LOADS_AND_STORES #define TDEFL_READ_UNALIGNED_WORD(p) *(const mz_uint16 *)(p) -static MZ_FORCEINLINE void -tdefl_find_match(tdefl_compressor *d, mz_uint lookahead_pos, mz_uint max_dist, - mz_uint max_match_len, mz_uint *pMatch_dist, - mz_uint *pMatch_len) { +static MZ_FORCEINLINE void tdefl_find_match( + tdefl_compressor *d, mz_uint lookahead_pos, mz_uint max_dist, + mz_uint max_match_len, mz_uint *pMatch_dist, mz_uint *pMatch_len) { mz_uint dist, pos = lookahead_pos & TDEFL_LZ_DICT_SIZE_MASK, match_len = *pMatch_len, probe_pos = pos, next_probe_pos, probe_len; @@ -3499,12 +3678,10 @@ tdefl_find_match(tdefl_compressor *d, mz_uint lookahead_pos, mz_uint max_dist, mz_uint16 c01 = TDEFL_READ_UNALIGNED_WORD(&d->m_dict[pos + match_len - 1]), s01 = TDEFL_READ_UNALIGNED_WORD(s); MZ_ASSERT(max_match_len <= TDEFL_MAX_MATCH_LEN); - if (max_match_len <= match_len) - return; + if (max_match_len <= match_len) return; for (;;) { for (;;) { - if (--num_probes_left == 0) - return; + if (--num_probes_left == 0) return; #define TDEFL_PROBE \ next_probe_pos = d->m_next[probe_pos]; \ if ((!next_probe_pos) || \ @@ -3517,11 +3694,9 @@ tdefl_find_match(tdefl_compressor *d, mz_uint lookahead_pos, mz_uint max_dist, TDEFL_PROBE; TDEFL_PROBE; } - if (!dist) - break; + if (!dist) break; q = (const mz_uint16 *)(d->m_dict + probe_pos); - if (TDEFL_READ_UNALIGNED_WORD(q) != s01) - continue; + if (TDEFL_READ_UNALIGNED_WORD(q) != s01) continue; p = s; probe_len = 32; do { @@ -3547,10 +3722,9 @@ tdefl_find_match(tdefl_compressor *d, mz_uint lookahead_pos, mz_uint max_dist, } } #else -static MZ_FORCEINLINE void -tdefl_find_match(tdefl_compressor *d, mz_uint lookahead_pos, mz_uint max_dist, - mz_uint max_match_len, mz_uint *pMatch_dist, - mz_uint *pMatch_len) { +static MZ_FORCEINLINE void tdefl_find_match( + tdefl_compressor *d, mz_uint lookahead_pos, mz_uint max_dist, + mz_uint max_match_len, mz_uint *pMatch_dist, mz_uint *pMatch_len) { mz_uint dist, pos = lookahead_pos & TDEFL_LZ_DICT_SIZE_MASK, match_len = *pMatch_len, probe_pos = pos, next_probe_pos, probe_len; @@ -3558,42 +3732,37 @@ tdefl_find_match(tdefl_compressor *d, mz_uint lookahead_pos, mz_uint max_dist, const mz_uint8 *s = d->m_dict + pos, *p, *q; mz_uint8 c0 = d->m_dict[pos + match_len], c1 = d->m_dict[pos + match_len - 1]; MZ_ASSERT(max_match_len <= TDEFL_MAX_MATCH_LEN); - if (max_match_len <= match_len) - return; + if (max_match_len <= match_len) return; for (;;) { for (;;) { - if (--num_probes_left == 0) - return; -#define TDEFL_PROBE \ - next_probe_pos = d->m_next[probe_pos]; \ - if ((!next_probe_pos) || \ - ((dist = (mz_uint16)(lookahead_pos - next_probe_pos)) > max_dist)) \ - return; \ - probe_pos = next_probe_pos & TDEFL_LZ_DICT_SIZE_MASK; \ - if ((d->m_dict[probe_pos + match_len] == c0) && \ - (d->m_dict[probe_pos + match_len - 1] == c1)) \ + if (--num_probes_left == 0) return; +#define TDEFL_PROBE \ + next_probe_pos = d->m_next[probe_pos]; \ + if ((!next_probe_pos) || \ + ((dist = (mz_uint16)(lookahead_pos - next_probe_pos)) > max_dist)) \ + return; \ + probe_pos = next_probe_pos & TDEFL_LZ_DICT_SIZE_MASK; \ + if ((d->m_dict[probe_pos + match_len] == c0) && \ + (d->m_dict[probe_pos + match_len - 1] == c1)) \ break; TDEFL_PROBE; TDEFL_PROBE; TDEFL_PROBE; } - if (!dist) - break; + if (!dist) break; p = s; q = d->m_dict + probe_pos; for (probe_len = 0; probe_len < max_match_len; probe_len++) - if (*p++ != *q++) - break; + if (*p++ != *q++) break; if (probe_len > match_len) { *pMatch_dist = dist; - if ((*pMatch_len = match_len = probe_len) == max_match_len) - return; + if ((*pMatch_len = match_len = probe_len) == max_match_len) return; c0 = d->m_dict[pos + match_len]; c1 = d->m_dict[pos + match_len - 1]; } } } -#endif // #if MINIZ_USE_UNALIGNED_LOADS_AND_STORES +#endif // #if MINIZ_USE_UNALIGNED_LOADS_AND_STORES #if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN static mz_bool tdefl_compress_fast(tdefl_compressor *d) { @@ -3775,7 +3944,7 @@ static mz_bool tdefl_compress_fast(tdefl_compressor *d) { d->m_num_flags_left = num_flags_left; return MZ_TRUE; } -#endif // MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN +#endif // MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN static MZ_FORCEINLINE void tdefl_record_literal(tdefl_compressor *d, mz_uint8 lit) { @@ -3789,8 +3958,9 @@ static MZ_FORCEINLINE void tdefl_record_literal(tdefl_compressor *d, d->m_huff_count[0][lit]++; } -static MZ_FORCEINLINE void -tdefl_record_match(tdefl_compressor *d, mz_uint match_len, mz_uint match_dist) { +static MZ_FORCEINLINE void tdefl_record_match(tdefl_compressor *d, + mz_uint match_len, + mz_uint match_dist) { mz_uint32 s0, s1; MZ_ASSERT((match_len >= TDEFL_MIN_MATCH_LEN) && (match_dist >= 1) && @@ -3875,8 +4045,7 @@ static mz_bool tdefl_compress_normal(tdefl_compressor *d) { } d->m_dict_size = MZ_MIN(TDEFL_LZ_DICT_SIZE - d->m_lookahead_size, d->m_dict_size); - if ((!flush) && (d->m_lookahead_size < TDEFL_MAX_MATCH_LEN)) - break; + if ((!flush) && (d->m_lookahead_size < TDEFL_MAX_MATCH_LEN)) break; // Simple lazy/greedy parsing state machine. len_to_move = 1; @@ -3889,8 +4058,7 @@ static mz_bool tdefl_compress_normal(tdefl_compressor *d) { mz_uint8 c = d->m_dict[(cur_pos - 1) & TDEFL_LZ_DICT_SIZE_MASK]; cur_match_len = 0; while (cur_match_len < d->m_lookahead_size) { - if (d->m_dict[cur_pos + cur_match_len] != c) - break; + if (d->m_dict[cur_pos + cur_match_len] != c) break; cur_match_len++; } if (cur_match_len < TDEFL_MIN_MATCH_LEN) @@ -3941,7 +4109,8 @@ static mz_bool tdefl_compress_normal(tdefl_compressor *d) { d->m_lookahead_pos += len_to_move; MZ_ASSERT(d->m_lookahead_size >= len_to_move); d->m_lookahead_size -= len_to_move; - d->m_dict_size = MZ_MIN(d->m_dict_size + len_to_move, (mz_uint)TDEFL_LZ_DICT_SIZE); + d->m_dict_size = + MZ_MIN(d->m_dict_size + len_to_move, (mz_uint)TDEFL_LZ_DICT_SIZE); // Check if it's time to flush the current LZ codes to the internal output // buffer. if ((d->m_pLZ_code_buf > &d->m_lz_code_buf[TDEFL_LZ_CODE_BUF_SIZE - 8]) || @@ -3987,10 +4156,8 @@ tdefl_status tdefl_compress(tdefl_compressor *d, const void *pIn_buf, size_t *pIn_buf_size, void *pOut_buf, size_t *pOut_buf_size, tdefl_flush flush) { if (!d) { - if (pIn_buf_size) - *pIn_buf_size = 0; - if (pOut_buf_size) - *pOut_buf_size = 0; + if (pIn_buf_size) *pIn_buf_size = 0; + if (pOut_buf_size) *pOut_buf_size = 0; return TDEFL_STATUS_BAD_PARAM; } @@ -4009,10 +4176,8 @@ tdefl_status tdefl_compress(tdefl_compressor *d, const void *pIn_buf, (d->m_wants_to_finish && (flush != TDEFL_FINISH)) || (pIn_buf_size && *pIn_buf_size && !pIn_buf) || (pOut_buf_size && *pOut_buf_size && !pOut_buf)) { - if (pIn_buf_size) - *pIn_buf_size = 0; - if (pOut_buf_size) - *pOut_buf_size = 0; + if (pIn_buf_size) *pIn_buf_size = 0; + if (pOut_buf_size) *pOut_buf_size = 0; return (d->m_prev_return_status = TDEFL_STATUS_BAD_PARAM); } d->m_wants_to_finish |= (flush == TDEFL_FINISH); @@ -4025,13 +4190,11 @@ tdefl_status tdefl_compress(tdefl_compressor *d, const void *pIn_buf, ((d->m_flags & TDEFL_GREEDY_PARSING_FLAG) != 0) && ((d->m_flags & (TDEFL_FILTER_MATCHES | TDEFL_FORCE_ALL_RAW_BLOCKS | TDEFL_RLE_MATCHES)) == 0)) { - if (!tdefl_compress_fast(d)) - return d->m_prev_return_status; + if (!tdefl_compress_fast(d)) return d->m_prev_return_status; } else -#endif // #if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN +#endif // #if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN { - if (!tdefl_compress_normal(d)) - return d->m_prev_return_status; + if (!tdefl_compress_normal(d)) return d->m_prev_return_status; } if ((d->m_flags & (TDEFL_WRITE_ZLIB_HEADER | TDEFL_COMPUTE_ADLER32)) && @@ -4042,8 +4205,7 @@ tdefl_status tdefl_compress(tdefl_compressor *d, const void *pIn_buf, if ((flush) && (!d->m_lookahead_size) && (!d->m_src_buf_left) && (!d->m_output_flush_remaining)) { - if (tdefl_flush_block(d, flush) < 0) - return d->m_prev_return_status; + if (tdefl_flush_block(d, flush) < 0) return d->m_prev_return_status; d->m_finished = (flush == TDEFL_FINISH); if (flush == TDEFL_FULL_FLUSH) { MZ_CLEAR_OBJ(d->m_hash); @@ -4070,8 +4232,7 @@ tdefl_status tdefl_init(tdefl_compressor *d, d->m_max_probes[0] = 1 + ((flags & 0xFFF) + 2) / 3; d->m_greedy_parsing = (flags & TDEFL_GREEDY_PARSING_FLAG) != 0; d->m_max_probes[1] = 1 + (((flags & 0xFFF) >> 2) + 2) / 3; - if (!(flags & TDEFL_NONDETERMINISTIC_PARSING_FLAG)) - MZ_CLEAR_OBJ(d->m_hash); + if (!(flags & TDEFL_NONDETERMINISTIC_PARSING_FLAG)) MZ_CLEAR_OBJ(d->m_hash); d->m_lookahead_pos = d->m_lookahead_size = d->m_dict_size = d->m_total_lz_bytes = d->m_lz_code_buf_dict_pos = d->m_bits_in = 0; d->m_output_flush_ofs = d->m_output_flush_remaining = d->m_finished = @@ -4110,11 +4271,9 @@ mz_bool tdefl_compress_mem_to_output(const void *pBuf, size_t buf_len, void *pPut_buf_user, int flags) { tdefl_compressor *pComp; mz_bool succeeded; - if (((buf_len) && (!pBuf)) || (!pPut_buf_func)) - return MZ_FALSE; + if (((buf_len) && (!pBuf)) || (!pPut_buf_func)) return MZ_FALSE; pComp = (tdefl_compressor *)MZ_MALLOC(sizeof(tdefl_compressor)); - if (!pComp) - return MZ_FALSE; + if (!pComp) return MZ_FALSE; succeeded = (tdefl_init(pComp, pPut_buf_func, pPut_buf_user, flags) == TDEFL_STATUS_OKAY); succeeded = @@ -4137,14 +4296,12 @@ static mz_bool tdefl_output_buffer_putter(const void *pBuf, int len, if (new_size > p->m_capacity) { size_t new_capacity = p->m_capacity; mz_uint8 *pNew_buf; - if (!p->m_expandable) - return MZ_FALSE; + if (!p->m_expandable) return MZ_FALSE; do { new_capacity = MZ_MAX(128U, new_capacity << 1U); } while (new_size > new_capacity); pNew_buf = (mz_uint8 *)MZ_REALLOC(p->m_pBuf, new_capacity); - if (!pNew_buf) - return MZ_FALSE; + if (!pNew_buf) return MZ_FALSE; p->m_pBuf = pNew_buf; p->m_capacity = new_capacity; } @@ -4174,8 +4331,7 @@ size_t tdefl_compress_mem_to_mem(void *pOut_buf, size_t out_buf_len, int flags) { tdefl_output_buffer out_buf; MZ_CLEAR_OBJ(out_buf); - if (!pOut_buf) - return 0; + if (!pOut_buf) return 0; out_buf.m_pBuf = (mz_uint8 *)pOut_buf; out_buf.m_capacity = out_buf_len; if (!tdefl_compress_mem_to_output( @@ -4196,8 +4352,7 @@ mz_uint tdefl_create_comp_flags_from_zip_params(int level, int window_bits, mz_uint comp_flags = s_tdefl_num_probes[(level >= 0) ? MZ_MIN(10, level) : MZ_DEFAULT_LEVEL] | ((level <= 3) ? TDEFL_GREEDY_PARSING_FLAG : 0); - if (window_bits > 0) - comp_flags |= TDEFL_WRITE_ZLIB_HEADER; + if (window_bits > 0) comp_flags |= TDEFL_WRITE_ZLIB_HEADER; if (!level) comp_flags |= TDEFL_FORCE_ALL_RAW_BLOCKS; @@ -4212,20 +4367,21 @@ mz_uint tdefl_create_comp_flags_from_zip_params(int level, int window_bits, return comp_flags; } -#endif // MINIZ_NO_ZLIB_APIS +#endif // MINIZ_NO_ZLIB_APIS #ifdef _MSC_VER #pragma warning(push) -#pragma warning(disable : 4204) // nonstandard extension used : non-constant - // aggregate initializer (also supported by GNU - // C and C99, so no big deal) -#pragma warning(disable : 4244) // 'initializing': conversion from '__int64' to - // 'int', possible loss of data -#pragma warning(disable : 4267) // 'argument': conversion from '__int64' to 'int', - // possible loss of data -#pragma warning(disable : 4996) // 'strdup': The POSIX name for this item is - // deprecated. Instead, use the ISO C and C++ - // conformant name: _strdup. +#pragma warning(disable : 4204) // nonstandard extension used : non-constant + // aggregate initializer (also supported by GNU + // C and C99, so no big deal) +#pragma warning(disable : 4244) // 'initializing': conversion from '__int64' to + // 'int', possible loss of data +#pragma warning( \ + disable : 4267) // 'argument': conversion from '__int64' to 'int', + // possible loss of data +#pragma warning(disable : 4996) // 'strdup': The POSIX name for this item is + // deprecated. Instead, use the ISO C and C++ + // conformant name: _strdup. #endif // Simple PNG writer function by Alex Evans, 2011. Released into the public @@ -4247,8 +4403,7 @@ void *tdefl_write_image_to_png_file_in_memory_ex(const void *pImage, int w, int i, bpl = w * num_chans, y, z; mz_uint32 c; *pLen_out = 0; - if (!pComp) - return NULL; + if (!pComp) return NULL; MZ_CLEAR_OBJ(out_buf); out_buf.m_expandable = MZ_TRUE; out_buf.m_capacity = 57 + MZ_MAX(64, (1 + bpl) * h); @@ -4257,12 +4412,11 @@ void *tdefl_write_image_to_png_file_in_memory_ex(const void *pImage, int w, return NULL; } // write dummy header - for (z = 41; z; --z) - tdefl_output_buffer_putter(&z, 1, &out_buf); + for (z = 41; z; --z) tdefl_output_buffer_putter(&z, 1, &out_buf); // compress image data - tdefl_init(pComp, tdefl_output_buffer_putter, &out_buf, - s_tdefl_png_num_probes[MZ_MIN(10, level)] | - TDEFL_WRITE_ZLIB_HEADER); + tdefl_init( + pComp, tdefl_output_buffer_putter, &out_buf, + s_tdefl_png_num_probes[MZ_MIN(10, level)] | TDEFL_WRITE_ZLIB_HEADER); for (y = 0; y < h; ++y) { tdefl_compress_buffer(pComp, &z, 1, TDEFL_NO_FLUSH); tdefl_compress_buffer(pComp, @@ -4279,13 +4433,47 @@ void *tdefl_write_image_to_png_file_in_memory_ex(const void *pImage, int w, *pLen_out = out_buf.m_size - 41; { static const mz_uint8 chans[] = {0x00, 0x00, 0x04, 0x02, 0x06}; - mz_uint8 pnghdr[41] = { - 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, - 0x49, 0x48, 0x44, 0x52, 0, 0, (mz_uint8)(w >> 8), (mz_uint8)w, 0, 0, - (mz_uint8)(h >> 8), (mz_uint8)h, 8, chans[num_chans], 0, 0, 0, 0, 0, 0, - 0, (mz_uint8)(*pLen_out >> 24), (mz_uint8)(*pLen_out >> 16), - (mz_uint8)(*pLen_out >> 8), (mz_uint8)*pLen_out, 0x49, 0x44, 0x41, - 0x54}; + mz_uint8 pnghdr[41] = {0x89, + 0x50, + 0x4e, + 0x47, + 0x0d, + 0x0a, + 0x1a, + 0x0a, + 0x00, + 0x00, + 0x00, + 0x0d, + 0x49, + 0x48, + 0x44, + 0x52, + 0, + 0, + (mz_uint8)(w >> 8), + (mz_uint8)w, + 0, + 0, + (mz_uint8)(h >> 8), + (mz_uint8)h, + 8, + chans[num_chans], + 0, + 0, + 0, + 0, + 0, + 0, + 0, + (mz_uint8)(*pLen_out >> 24), + (mz_uint8)(*pLen_out >> 16), + (mz_uint8)(*pLen_out >> 8), + (mz_uint8)*pLen_out, + 0x49, + 0x44, + 0x41, + 0x54}; c = (mz_uint32)mz_crc32(MZ_CRC32_INIT, pnghdr + 12, 17); for (i = 0; i < 4; ++i, c <<= 8) ((mz_uint8 *)(pnghdr + 29))[i] = (mz_uint8)(c >> 24); @@ -4327,7 +4515,7 @@ void *tdefl_write_image_to_png_file_in_memory(const void *pImage, int w, int h, #include #include -#if defined(_MSC_VER) //|| defined(__MINGW64__) +#if defined(_MSC_VER) || defined(__MINGW64__) static FILE *mz_fopen(const char *pFilename, const char *pMode) { FILE *pFile = NULL; fopen_s(&pFile, pFilename, pMode); @@ -4335,8 +4523,7 @@ static FILE *mz_fopen(const char *pFilename, const char *pMode) { } static FILE *mz_freopen(const char *pPath, const char *pMode, FILE *pStream) { FILE *pFile = NULL; - if (freopen_s(&pFile, pPath, pMode, pStream)) - return NULL; + if (freopen_s(&pFile, pPath, pMode, pStream)) return NULL; return pFile; } #ifndef MINIZ_NO_TIME @@ -4418,8 +4605,8 @@ static FILE *mz_freopen(const char *pPath, const char *pMode, FILE *pStream) { #define MZ_FFLUSH fflush #define MZ_FREOPEN(f, m, s) freopen(f, m, s) #define MZ_DELETE_FILE remove -#endif // #ifdef _MSC_VER -#endif // #ifdef MINIZ_NO_STDIO +#endif // #ifdef _MSC_VER +#endif // #ifdef MINIZ_NO_STDIO #define MZ_TOLOWER(c) ((((c) >= 'A') && ((c) <= 'Z')) ? ((c) - 'A' + 'a') : (c)) @@ -4491,9 +4678,9 @@ struct mz_zip_internal_state_tag { size_t m_mem_capacity; }; -#define MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(array_ptr, element_size) \ +#define MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(array_ptr, element_size) \ (array_ptr)->m_element_size = element_size -#define MZ_ZIP_ARRAY_ELEMENT(array_ptr, element_type, index) \ +#define MZ_ZIP_ARRAY_ELEMENT(array_ptr, element_type, index) \ ((element_type *)((array_ptr)->m_p))[index] static MZ_FORCEINLINE void mz_zip_array_clear(mz_zip_archive *pZip, @@ -4509,12 +4696,10 @@ static mz_bool mz_zip_array_ensure_capacity(mz_zip_archive *pZip, void *pNew_p; size_t new_capacity = min_new_capacity; MZ_ASSERT(pArray->m_element_size); - if (pArray->m_capacity >= min_new_capacity) - return MZ_TRUE; + if (pArray->m_capacity >= min_new_capacity) return MZ_TRUE; if (growing) { new_capacity = MZ_MAX(1, pArray->m_capacity); - while (new_capacity < min_new_capacity) - new_capacity *= 2; + while (new_capacity < min_new_capacity) new_capacity *= 2; } if (NULL == (pNew_p = pZip->m_pRealloc(pZip->m_pAlloc_opaque, pArray->m_p, pArray->m_element_size, new_capacity))) @@ -4524,9 +4709,10 @@ static mz_bool mz_zip_array_ensure_capacity(mz_zip_archive *pZip, return MZ_TRUE; } -static MZ_FORCEINLINE mz_bool -mz_zip_array_reserve(mz_zip_archive *pZip, mz_zip_array *pArray, - size_t new_capacity, mz_uint growing) { +static MZ_FORCEINLINE mz_bool mz_zip_array_reserve(mz_zip_archive *pZip, + mz_zip_array *pArray, + size_t new_capacity, + mz_uint growing) { if (new_capacity > pArray->m_capacity) { if (!mz_zip_array_ensure_capacity(pZip, pArray, new_capacity, growing)) return MZ_FALSE; @@ -4534,9 +4720,10 @@ mz_zip_array_reserve(mz_zip_archive *pZip, mz_zip_array *pArray, return MZ_TRUE; } -static MZ_FORCEINLINE mz_bool -mz_zip_array_resize(mz_zip_archive *pZip, mz_zip_array *pArray, size_t new_size, - mz_uint growing) { +static MZ_FORCEINLINE mz_bool mz_zip_array_resize(mz_zip_archive *pZip, + mz_zip_array *pArray, + size_t new_size, + mz_uint growing) { if (new_size > pArray->m_capacity) { if (!mz_zip_array_ensure_capacity(pZip, pArray, new_size, growing)) return MZ_FALSE; @@ -4545,14 +4732,16 @@ mz_zip_array_resize(mz_zip_archive *pZip, mz_zip_array *pArray, size_t new_size, return MZ_TRUE; } -static MZ_FORCEINLINE mz_bool -mz_zip_array_ensure_room(mz_zip_archive *pZip, mz_zip_array *pArray, size_t n) { +static MZ_FORCEINLINE mz_bool mz_zip_array_ensure_room(mz_zip_archive *pZip, + mz_zip_array *pArray, + size_t n) { return mz_zip_array_reserve(pZip, pArray, pArray->m_size + n, MZ_TRUE); } -static MZ_FORCEINLINE mz_bool -mz_zip_array_push_back(mz_zip_archive *pZip, mz_zip_array *pArray, - const void *pElements, size_t n) { +static MZ_FORCEINLINE mz_bool mz_zip_array_push_back(mz_zip_archive *pZip, + mz_zip_array *pArray, + const void *pElements, + size_t n) { size_t orig_size = pArray->m_size; if (!mz_zip_array_resize(pZip, pArray, orig_size + n, MZ_TRUE)) return MZ_FALSE; @@ -4607,10 +4796,9 @@ static mz_bool mz_zip_get_file_modified_time(const char *pFilename, struct MZ_FILE_STAT_STRUCT file_stat; // On Linux with x86 glibc, this call will fail on large files (>= 0x80000000 // bytes) unless you compiled with _LARGEFILE64_SOURCE. Argh. - if (MZ_FILE_STAT(pFilename, &file_stat) != 0) - return MZ_FALSE; + if (MZ_FILE_STAT(pFilename, &file_stat) != 0) return MZ_FALSE; mz_zip_time_to_dos_time(file_stat.st_mtime, pDOS_time, pDOS_date); -#endif // #ifdef MINIZ_NO_TIME +#endif // #ifdef MINIZ_NO_TIME return MZ_TRUE; } @@ -4622,8 +4810,8 @@ static mz_bool mz_zip_set_file_times(const char *pFilename, time_t access_time, t.modtime = modified_time; return !utime(pFilename, &t); } -#endif // #ifndef MINIZ_NO_TIME -#endif // #ifndef MINIZ_NO_STDIO +#endif // #ifndef MINIZ_NO_TIME +#endif // #ifndef MINIZ_NO_STDIO static mz_bool mz_zip_reader_init_internal(mz_zip_archive *pZip, mz_uint32 flags) { @@ -4631,12 +4819,9 @@ static mz_bool mz_zip_reader_init_internal(mz_zip_archive *pZip, if ((!pZip) || (pZip->m_pState) || (pZip->m_zip_mode != MZ_ZIP_MODE_INVALID)) return MZ_FALSE; - if (!pZip->m_pAlloc) - pZip->m_pAlloc = def_alloc_func; - if (!pZip->m_pFree) - pZip->m_pFree = def_free_func; - if (!pZip->m_pRealloc) - pZip->m_pRealloc = def_realloc_func; + if (!pZip->m_pAlloc) pZip->m_pAlloc = def_alloc_func; + if (!pZip->m_pFree) pZip->m_pFree = def_free_func; + if (!pZip->m_pRealloc) pZip->m_pRealloc = def_realloc_func; pZip->m_zip_mode = MZ_ZIP_MODE_READING; pZip->m_archive_size = 0; @@ -4661,14 +4846,13 @@ mz_zip_reader_filename_less(const mz_zip_array *pCentral_dir_array, const mz_zip_array *pCentral_dir_offsets, mz_uint l_index, mz_uint r_index) { const mz_uint8 *pL = &MZ_ZIP_ARRAY_ELEMENT( - pCentral_dir_array, mz_uint8, - MZ_ZIP_ARRAY_ELEMENT(pCentral_dir_offsets, mz_uint32, - l_index)), + pCentral_dir_array, mz_uint8, + MZ_ZIP_ARRAY_ELEMENT(pCentral_dir_offsets, mz_uint32, + l_index)), *pE; - const mz_uint8 *pR = - &MZ_ZIP_ARRAY_ELEMENT( - pCentral_dir_array, mz_uint8, - MZ_ZIP_ARRAY_ELEMENT(pCentral_dir_offsets, mz_uint32, r_index)); + const mz_uint8 *pR = &MZ_ZIP_ARRAY_ELEMENT( + pCentral_dir_array, mz_uint8, + MZ_ZIP_ARRAY_ELEMENT(pCentral_dir_offsets, mz_uint32, r_index)); mz_uint l_len = MZ_READ_LE16(pL + MZ_ZIP_CDH_FILENAME_LEN_OFS), r_len = MZ_READ_LE16(pR + MZ_ZIP_CDH_FILENAME_LEN_OFS); mz_uint8 l = 0, r = 0; @@ -4676,40 +4860,37 @@ mz_zip_reader_filename_less(const mz_zip_array *pCentral_dir_array, pR += MZ_ZIP_CENTRAL_DIR_HEADER_SIZE; pE = pL + MZ_MIN(l_len, r_len); while (pL < pE) { - if ((l = MZ_TOLOWER(*pL)) != (r = MZ_TOLOWER(*pR))) - break; + if ((l = MZ_TOLOWER(*pL)) != (r = MZ_TOLOWER(*pR))) break; pL++; pR++; } return (pL == pE) ? (l_len < r_len) : (l < r); } -#define MZ_SWAP_UINT32(a, b) \ - do { \ - mz_uint32 t = a; \ - a = b; \ - b = t; \ - } \ +#define MZ_SWAP_UINT32(a, b) \ + do { \ + mz_uint32 t = a; \ + a = b; \ + b = t; \ + } \ MZ_MACRO_END // Heap sort of lowercased filenames, used to help accelerate plain central // directory searches by mz_zip_reader_locate_file(). (Could also use qsort(), // but it could allocate memory.) -static void -mz_zip_reader_sort_central_dir_offsets_by_filename(mz_zip_archive *pZip) { +static void mz_zip_reader_sort_central_dir_offsets_by_filename( + mz_zip_archive *pZip) { mz_zip_internal_state *pState = pZip->m_pState; const mz_zip_array *pCentral_dir_offsets = &pState->m_central_dir_offsets; const mz_zip_array *pCentral_dir = &pState->m_central_dir; - mz_uint32 *pIndices = - &MZ_ZIP_ARRAY_ELEMENT(&pState->m_sorted_central_dir_offsets, mz_uint32, - 0); + mz_uint32 *pIndices = &MZ_ZIP_ARRAY_ELEMENT( + &pState->m_sorted_central_dir_offsets, mz_uint32, 0); const int size = pZip->m_total_files; int start = (size - 2) >> 1, end; while (start >= 0) { int child, root = start; for (;;) { - if ((child = (root << 1) + 1) >= size) - break; + if ((child = (root << 1) + 1) >= size) break; child += (((child + 1) < size) && (mz_zip_reader_filename_less(pCentral_dir, pCentral_dir_offsets, @@ -4728,8 +4909,7 @@ mz_zip_reader_sort_central_dir_offsets_by_filename(mz_zip_archive *pZip) { int child, root = 0; MZ_SWAP_UINT32(pIndices[end], pIndices[0]); for (;;) { - if ((child = (root << 1) + 1) >= end) - break; + if ((child = (root << 1) + 1) >= end) break; child += (((child + 1) < end) && mz_zip_reader_filename_less(pCentral_dir, pCentral_dir_offsets, @@ -4768,8 +4948,7 @@ static mz_bool mz_zip_reader_read_central_dir(mz_zip_archive *pZip, if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pBuf, n) != (mz_uint)n) return MZ_FALSE; for (i = n - 4; i >= 0; --i) - if (MZ_READ_LE32(pBuf + i) == MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG) - break; + if (MZ_READ_LE32(pBuf + i) == MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG) break; if (i >= 0) { cur_file_ofs += i; break; @@ -4802,8 +4981,7 @@ static mz_bool mz_zip_reader_read_central_dir(mz_zip_archive *pZip, return MZ_FALSE; cdir_ofs = MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_CDIR_OFS_OFS); - if ((cdir_ofs + (mz_uint64)cdir_size) > pZip->m_archive_size) - return MZ_FALSE; + if ((cdir_ofs + (mz_uint64)cdir_size) > pZip->m_archive_size) return MZ_FALSE; pZip->m_central_directory_file_ofs = cdir_ofs; @@ -4854,8 +5032,7 @@ static mz_bool mz_zip_reader_read_central_dir(mz_zip_archive *pZip, (comp_size == 0xFFFFFFFF)) return MZ_FALSE; disk_index = MZ_READ_LE16(p + MZ_ZIP_CDH_DISK_START_OFS); - if ((disk_index != num_this_disk) && (disk_index != 1)) - return MZ_FALSE; + if ((disk_index != num_this_disk) && (disk_index != 1)) return MZ_FALSE; if (((mz_uint64)MZ_READ_LE32(p + MZ_ZIP_CDH_LOCAL_HEADER_OFS) + MZ_ZIP_LOCAL_DIR_HEADER_SIZE + comp_size) > pZip->m_archive_size) return MZ_FALSE; @@ -4878,10 +5055,8 @@ static mz_bool mz_zip_reader_read_central_dir(mz_zip_archive *pZip, mz_bool mz_zip_reader_init(mz_zip_archive *pZip, mz_uint64 size, mz_uint32 flags) { - if ((!pZip) || (!pZip->m_pRead)) - return MZ_FALSE; - if (!mz_zip_reader_init_internal(pZip, flags)) - return MZ_FALSE; + if ((!pZip) || (!pZip->m_pRead)) return MZ_FALSE; + if (!mz_zip_reader_init_internal(pZip, flags)) return MZ_FALSE; pZip->m_archive_size = size; if (!mz_zip_reader_read_central_dir(pZip, flags)) { mz_zip_reader_end(pZip); @@ -4902,8 +5077,7 @@ static size_t mz_zip_mem_read_func(void *pOpaque, mz_uint64 file_ofs, mz_bool mz_zip_reader_init_mem(mz_zip_archive *pZip, const void *pMem, size_t size, mz_uint32 flags) { - if (!mz_zip_reader_init_internal(pZip, flags)) - return MZ_FALSE; + if (!mz_zip_reader_init_internal(pZip, flags)) return MZ_FALSE; pZip->m_archive_size = size; pZip->m_pRead = mz_zip_mem_read_func; pZip->m_pIO_opaque = pZip; @@ -4936,8 +5110,7 @@ mz_bool mz_zip_reader_init_file(mz_zip_archive *pZip, const char *pFilename, mz_uint32 flags) { mz_uint64 file_size; MZ_FILE *pFile = MZ_FOPEN(pFilename, "rb"); - if (!pFile) - return MZ_FALSE; + if (!pFile) return MZ_FALSE; if (MZ_FSEEK64(pFile, 0, SEEK_END)) { MZ_FCLOSE(pFile); return MZ_FALSE; @@ -4957,29 +5130,28 @@ mz_bool mz_zip_reader_init_file(mz_zip_archive *pZip, const char *pFilename, } return MZ_TRUE; } -#endif // #ifndef MINIZ_NO_STDIO +#endif // #ifndef MINIZ_NO_STDIO mz_uint mz_zip_reader_get_num_files(mz_zip_archive *pZip) { return pZip ? pZip->m_total_files : 0; } -static MZ_FORCEINLINE const mz_uint8 * -mz_zip_reader_get_cdh(mz_zip_archive *pZip, mz_uint file_index) { +static MZ_FORCEINLINE const mz_uint8 *mz_zip_reader_get_cdh( + mz_zip_archive *pZip, mz_uint file_index) { if ((!pZip) || (!pZip->m_pState) || (file_index >= pZip->m_total_files) || (pZip->m_zip_mode != MZ_ZIP_MODE_READING)) return NULL; return &MZ_ZIP_ARRAY_ELEMENT( - &pZip->m_pState->m_central_dir, mz_uint8, - MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_central_dir_offsets, - mz_uint32, file_index)); + &pZip->m_pState->m_central_dir, mz_uint8, + MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_central_dir_offsets, mz_uint32, + file_index)); } mz_bool mz_zip_reader_is_file_encrypted(mz_zip_archive *pZip, mz_uint file_index) { mz_uint m_bit_flag; const mz_uint8 *p = mz_zip_reader_get_cdh(pZip, file_index); - if (!p) - return MZ_FALSE; + if (!p) return MZ_FALSE; m_bit_flag = MZ_READ_LE16(p + MZ_ZIP_CDH_BIT_FLAG_OFS); return (m_bit_flag & 1); } @@ -4988,8 +5160,7 @@ mz_bool mz_zip_reader_is_file_a_directory(mz_zip_archive *pZip, mz_uint file_index) { mz_uint filename_len, external_attr; const mz_uint8 *p = mz_zip_reader_get_cdh(pZip, file_index); - if (!p) - return MZ_FALSE; + if (!p) return MZ_FALSE; // First see if the filename ends with a '/' character. filename_len = MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS); @@ -5005,8 +5176,7 @@ mz_bool mz_zip_reader_is_file_a_directory(mz_zip_archive *pZip, // ID in the created by field. // FIXME: Remove this check? Is it necessary - we already check the filename. external_attr = MZ_READ_LE32(p + MZ_ZIP_CDH_EXTERNAL_ATTR_OFS); - if ((external_attr & 0x10) != 0) - return MZ_TRUE; + if ((external_attr & 0x10) != 0) return MZ_TRUE; return MZ_FALSE; } @@ -5015,8 +5185,7 @@ mz_bool mz_zip_reader_file_stat(mz_zip_archive *pZip, mz_uint file_index, mz_zip_archive_file_stat *pStat) { mz_uint n; const mz_uint8 *p = mz_zip_reader_get_cdh(pZip, file_index); - if ((!p) || (!pStat)) - return MZ_FALSE; + if ((!p) || (!pStat)) return MZ_FALSE; // Unpack the central directory record. pStat->m_file_index = file_index; @@ -5061,8 +5230,7 @@ mz_uint mz_zip_reader_get_filename(mz_zip_archive *pZip, mz_uint file_index, mz_uint n; const mz_uint8 *p = mz_zip_reader_get_cdh(pZip, file_index); if (!p) { - if (filename_buf_size) - pFilename[0] = '\0'; + if (filename_buf_size) pFilename[0] = '\0'; return 0; } n = MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS); @@ -5074,34 +5242,32 @@ mz_uint mz_zip_reader_get_filename(mz_zip_archive *pZip, mz_uint file_index, return n + 1; } -static MZ_FORCEINLINE mz_bool -mz_zip_reader_string_equal(const char *pA, const char *pB, mz_uint len, - mz_uint flags) { +static MZ_FORCEINLINE mz_bool mz_zip_reader_string_equal(const char *pA, + const char *pB, + mz_uint len, + mz_uint flags) { mz_uint i; - if (flags & MZ_ZIP_FLAG_CASE_SENSITIVE) - return 0 == memcmp(pA, pB, len); + if (flags & MZ_ZIP_FLAG_CASE_SENSITIVE) return 0 == memcmp(pA, pB, len); for (i = 0; i < len; ++i) - if (MZ_TOLOWER(pA[i]) != MZ_TOLOWER(pB[i])) - return MZ_FALSE; + if (MZ_TOLOWER(pA[i]) != MZ_TOLOWER(pB[i])) return MZ_FALSE; return MZ_TRUE; } -static MZ_FORCEINLINE int -mz_zip_reader_filename_compare(const mz_zip_array *pCentral_dir_array, - const mz_zip_array *pCentral_dir_offsets, - mz_uint l_index, const char *pR, mz_uint r_len) { +static MZ_FORCEINLINE int mz_zip_reader_filename_compare( + const mz_zip_array *pCentral_dir_array, + const mz_zip_array *pCentral_dir_offsets, mz_uint l_index, const char *pR, + mz_uint r_len) { const mz_uint8 *pL = &MZ_ZIP_ARRAY_ELEMENT( - pCentral_dir_array, mz_uint8, - MZ_ZIP_ARRAY_ELEMENT(pCentral_dir_offsets, mz_uint32, - l_index)), + pCentral_dir_array, mz_uint8, + MZ_ZIP_ARRAY_ELEMENT(pCentral_dir_offsets, mz_uint32, + l_index)), *pE; mz_uint l_len = MZ_READ_LE16(pL + MZ_ZIP_CDH_FILENAME_LEN_OFS); mz_uint8 l = 0, r = 0; pL += MZ_ZIP_CENTRAL_DIR_HEADER_SIZE; pE = pL + MZ_MIN(l_len, r_len); while (pL < pE) { - if ((l = MZ_TOLOWER(*pL)) != (r = MZ_TOLOWER(*pR))) - break; + if ((l = MZ_TOLOWER(*pL)) != (r = MZ_TOLOWER(*pR))) break; pL++; pR++; } @@ -5113,9 +5279,8 @@ static int mz_zip_reader_locate_file_binary_search(mz_zip_archive *pZip, mz_zip_internal_state *pState = pZip->m_pState; const mz_zip_array *pCentral_dir_offsets = &pState->m_central_dir_offsets; const mz_zip_array *pCentral_dir = &pState->m_central_dir; - mz_uint32 *pIndices = - &MZ_ZIP_ARRAY_ELEMENT(&pState->m_sorted_central_dir_offsets, mz_uint32, - 0); + mz_uint32 *pIndices = &MZ_ZIP_ARRAY_ELEMENT( + &pState->m_sorted_central_dir_offsets, mz_uint32, 0); const int size = pZip->m_total_files; const mz_uint filename_len = (mz_uint)strlen(pFilename); int l = 0, h = size - 1; @@ -5145,22 +5310,18 @@ int mz_zip_reader_locate_file(mz_zip_archive *pZip, const char *pName, (!pComment) && (pZip->m_pState->m_sorted_central_dir_offsets.m_size)) return mz_zip_reader_locate_file_binary_search(pZip, pName); name_len = strlen(pName); - if (name_len > 0xFFFF) - return -1; + if (name_len > 0xFFFF) return -1; comment_len = pComment ? strlen(pComment) : 0; - if (comment_len > 0xFFFF) - return -1; + if (comment_len > 0xFFFF) return -1; for (file_index = 0; file_index < pZip->m_total_files; file_index++) { - const mz_uint8 *pHeader = - &MZ_ZIP_ARRAY_ELEMENT( - &pZip->m_pState->m_central_dir, mz_uint8, - MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_central_dir_offsets, - mz_uint32, file_index)); + const mz_uint8 *pHeader = &MZ_ZIP_ARRAY_ELEMENT( + &pZip->m_pState->m_central_dir, mz_uint8, + MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_central_dir_offsets, mz_uint32, + file_index)); mz_uint filename_len = MZ_READ_LE16(pHeader + MZ_ZIP_CDH_FILENAME_LEN_OFS); const char *pFilename = (const char *)pHeader + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE; - if (filename_len < name_len) - continue; + if (filename_len < name_len) continue; if (comment_len) { mz_uint file_extra_len = MZ_READ_LE16(pHeader + MZ_ZIP_CDH_EXTRA_LEN_OFS), file_comment_len = @@ -5205,27 +5366,22 @@ mz_bool mz_zip_reader_extract_to_mem_no_alloc(mz_zip_archive *pZip, mz_uint8 *pLocal_header = (mz_uint8 *)local_header_u32; tinfl_decompressor inflator; - if ((buf_size) && (!pBuf)) - return MZ_FALSE; + if ((buf_size) && (!pBuf)) return MZ_FALSE; - if (!mz_zip_reader_file_stat(pZip, file_index, &file_stat)) - return MZ_FALSE; + if (!mz_zip_reader_file_stat(pZip, file_index, &file_stat)) return MZ_FALSE; // Empty file, or a directory (but not always a directory - I've seen odd zips // with directories that have compressed data which inflates to 0 bytes) - if (!file_stat.m_comp_size) - return MZ_TRUE; + if (!file_stat.m_comp_size) return MZ_TRUE; // Entry is a subdirectory (I've seen old zips with dir entries which have // compressed deflate data which inflates to 0 bytes, but these entries claim // to uncompress to 512 bytes in the headers). // I'm torn how to handle this case - should it fail instead? - if (mz_zip_reader_is_file_a_directory(pZip, file_index)) - return MZ_TRUE; + if (mz_zip_reader_is_file_a_directory(pZip, file_index)) return MZ_TRUE; // Encryption and patch files are not supported. - if (file_stat.m_bit_flag & (1 | 32)) - return MZ_FALSE; + if (file_stat.m_bit_flag & (1 | 32)) return MZ_FALSE; // This function only supports stored and deflate. if ((!(flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) && (file_stat.m_method != 0) && @@ -5235,8 +5391,7 @@ mz_bool mz_zip_reader_extract_to_mem_no_alloc(mz_zip_archive *pZip, // Ensure supplied output buffer is large enough. needed_size = (flags & MZ_ZIP_FLAG_COMPRESSED_DATA) ? file_stat.m_comp_size : file_stat.m_uncomp_size; - if (buf_size < needed_size) - return MZ_FALSE; + if (buf_size < needed_size) return MZ_FALSE; // Read and parse the local directory entry. cur_file_ofs = file_stat.m_local_header_ofs; @@ -5274,15 +5429,15 @@ mz_bool mz_zip_reader_extract_to_mem_no_alloc(mz_zip_archive *pZip, comp_remaining = 0; } else if (pUser_read_buf) { // Use a user provided read buffer. - if (!user_read_buf_size) - return MZ_FALSE; + if (!user_read_buf_size) return MZ_FALSE; pRead_buf = (mz_uint8 *)pUser_read_buf; read_buf_size = user_read_buf_size; read_buf_avail = 0; comp_remaining = file_stat.m_comp_size; } else { // Temporarily allocate a read buffer. - read_buf_size = MZ_MIN(file_stat.m_comp_size, (mz_uint)MZ_ZIP_MAX_IO_BUF_SIZE); + read_buf_size = + MZ_MIN(file_stat.m_comp_size, (mz_uint)MZ_ZIP_MAX_IO_BUF_SIZE); #ifdef _MSC_VER if (((0, sizeof(size_t) == sizeof(mz_uint32))) && (read_buf_size > 0x7FFFFFFF)) @@ -5340,8 +5495,7 @@ mz_bool mz_zip_reader_extract_file_to_mem_no_alloc( mz_zip_archive *pZip, const char *pFilename, void *pBuf, size_t buf_size, mz_uint flags, void *pUser_read_buf, size_t user_read_buf_size) { int file_index = mz_zip_reader_locate_file(pZip, pFilename, NULL, flags); - if (file_index < 0) - return MZ_FALSE; + if (file_index < 0) return MZ_FALSE; return mz_zip_reader_extract_to_mem_no_alloc(pZip, file_index, pBuf, buf_size, flags, pUser_read_buf, user_read_buf_size); @@ -5367,10 +5521,8 @@ void *mz_zip_reader_extract_to_heap(mz_zip_archive *pZip, mz_uint file_index, const mz_uint8 *p = mz_zip_reader_get_cdh(pZip, file_index); void *pBuf; - if (pSize) - *pSize = 0; - if (!p) - return NULL; + if (pSize) *pSize = 0; + if (!p) return NULL; comp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_COMPRESSED_SIZE_OFS); uncomp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS); @@ -5392,8 +5544,7 @@ void *mz_zip_reader_extract_to_heap(mz_zip_archive *pZip, mz_uint file_index, return NULL; } - if (pSize) - *pSize = (size_t)alloc_size; + if (pSize) *pSize = (size_t)alloc_size; return pBuf; } @@ -5402,8 +5553,7 @@ void *mz_zip_reader_extract_file_to_heap(mz_zip_archive *pZip, mz_uint flags) { int file_index = mz_zip_reader_locate_file(pZip, pFilename, NULL, flags); if (file_index < 0) { - if (pSize) - *pSize = 0; + if (pSize) *pSize = 0; return MZ_FALSE; } return mz_zip_reader_extract_to_heap(pZip, file_index, pSize, flags); @@ -5425,24 +5575,20 @@ mz_bool mz_zip_reader_extract_to_callback(mz_zip_archive *pZip, sizeof(mz_uint32)]; mz_uint8 *pLocal_header = (mz_uint8 *)local_header_u32; - if (!mz_zip_reader_file_stat(pZip, file_index, &file_stat)) - return MZ_FALSE; + if (!mz_zip_reader_file_stat(pZip, file_index, &file_stat)) return MZ_FALSE; // Empty file, or a directory (but not always a directory - I've seen odd zips // with directories that have compressed data which inflates to 0 bytes) - if (!file_stat.m_comp_size) - return MZ_TRUE; + if (!file_stat.m_comp_size) return MZ_TRUE; // Entry is a subdirectory (I've seen old zips with dir entries which have // compressed deflate data which inflates to 0 bytes, but these entries claim // to uncompress to 512 bytes in the headers). // I'm torn how to handle this case - should it fail instead? - if (mz_zip_reader_is_file_a_directory(pZip, file_index)) - return MZ_TRUE; + if (mz_zip_reader_is_file_a_directory(pZip, file_index)) return MZ_TRUE; // Encryption and patch files are not supported. - if (file_stat.m_bit_flag & (1 | 32)) - return MZ_FALSE; + if (file_stat.m_bit_flag & (1 | 32)) return MZ_FALSE; // This function only supports stored and deflate. if ((!(flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) && (file_stat.m_method != 0) && @@ -5471,7 +5617,8 @@ mz_bool mz_zip_reader_extract_to_callback(mz_zip_archive *pZip, read_buf_size = read_buf_avail = file_stat.m_comp_size; comp_remaining = 0; } else { - read_buf_size = MZ_MIN(file_stat.m_comp_size, (mz_uint)MZ_ZIP_MAX_IO_BUF_SIZE); + read_buf_size = + MZ_MIN(file_stat.m_comp_size, (mz_uint)MZ_ZIP_MAX_IO_BUF_SIZE); if (NULL == (pRead_buf = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, (size_t)read_buf_size))) return MZ_FALSE; @@ -5583,10 +5730,8 @@ mz_bool mz_zip_reader_extract_to_callback(mz_zip_archive *pZip, status = TINFL_STATUS_FAILED; } - if (!pZip->m_pState->m_pMem) - pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf); - if (pWrite_buf) - pZip->m_pFree(pZip->m_pAlloc_opaque, pWrite_buf); + if (!pZip->m_pState->m_pMem) pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf); + if (pWrite_buf) pZip->m_pFree(pZip->m_pAlloc_opaque, pWrite_buf); return status == TINFL_STATUS_DONE; } @@ -5596,8 +5741,7 @@ mz_bool mz_zip_reader_extract_file_to_callback(mz_zip_archive *pZip, mz_file_write_func pCallback, void *pOpaque, mz_uint flags) { int file_index = mz_zip_reader_locate_file(pZip, pFilename, NULL, flags); - if (file_index < 0) - return MZ_FALSE; + if (file_index < 0) return MZ_FALSE; return mz_zip_reader_extract_to_callback(pZip, file_index, pCallback, pOpaque, flags); } @@ -5615,22 +5759,19 @@ mz_bool mz_zip_reader_extract_to_file(mz_zip_archive *pZip, mz_uint file_index, mz_bool status; mz_zip_archive_file_stat file_stat; MZ_FILE *pFile; - if (!mz_zip_reader_file_stat(pZip, file_index, &file_stat)) - return MZ_FALSE; + if (!mz_zip_reader_file_stat(pZip, file_index, &file_stat)) return MZ_FALSE; pFile = MZ_FOPEN(pDst_filename, "wb"); - if (!pFile) - return MZ_FALSE; + if (!pFile) return MZ_FALSE; status = mz_zip_reader_extract_to_callback( pZip, file_index, mz_zip_file_write_callback, pFile, flags); - if (MZ_FCLOSE(pFile) == EOF) - return MZ_FALSE; + if (MZ_FCLOSE(pFile) == EOF) return MZ_FALSE; #ifndef MINIZ_NO_TIME if (status) mz_zip_set_file_times(pDst_filename, file_stat.m_time, file_stat.m_time); #endif return status; } -#endif // #ifndef MINIZ_NO_STDIO +#endif // #ifndef MINIZ_NO_STDIO mz_bool mz_zip_reader_end(mz_zip_archive *pZip) { if ((!pZip) || (!pZip->m_pState) || (!pZip->m_pAlloc) || (!pZip->m_pFree) || @@ -5649,7 +5790,7 @@ mz_bool mz_zip_reader_end(mz_zip_archive *pZip) { MZ_FCLOSE(pState->m_pFile); pState->m_pFile = NULL; } -#endif // #ifndef MINIZ_NO_STDIO +#endif // #ifndef MINIZ_NO_STDIO pZip->m_pFree(pZip->m_pAlloc_opaque, pState); } @@ -5665,8 +5806,7 @@ mz_bool mz_zip_reader_extract_file_to_file(mz_zip_archive *pZip, mz_uint flags) { int file_index = mz_zip_reader_locate_file(pZip, pArchive_filename, NULL, flags); - if (file_index < 0) - return MZ_FALSE; + if (file_index < 0) return MZ_FALSE; return mz_zip_reader_extract_to_file(pZip, file_index, pDst_filename, flags); } #endif @@ -5699,12 +5839,9 @@ mz_bool mz_zip_writer_init(mz_zip_archive *pZip, mz_uint64 existing_size) { return MZ_FALSE; } - if (!pZip->m_pAlloc) - pZip->m_pAlloc = def_alloc_func; - if (!pZip->m_pFree) - pZip->m_pFree = def_free_func; - if (!pZip->m_pRealloc) - pZip->m_pRealloc = def_realloc_func; + if (!pZip->m_pAlloc) pZip->m_pAlloc = def_alloc_func; + if (!pZip->m_pFree) pZip->m_pFree = def_free_func; + if (!pZip->m_pRealloc) pZip->m_pRealloc = def_realloc_func; pZip->m_zip_mode = MZ_ZIP_MODE_WRITING; pZip->m_archive_size = existing_size; @@ -5740,8 +5877,7 @@ static size_t mz_zip_heap_write_func(void *pOpaque, mz_uint64 file_ofs, if (new_size > pState->m_mem_capacity) { void *pNew_block; size_t new_capacity = MZ_MAX(64, pState->m_mem_capacity); - while (new_capacity < new_size) - new_capacity *= 2; + while (new_capacity < new_size) new_capacity *= 2; if (NULL == (pNew_block = pZip->m_pRealloc( pZip->m_pAlloc_opaque, pState->m_pMem, 1, new_capacity))) return 0; @@ -5758,8 +5894,7 @@ mz_bool mz_zip_writer_init_heap(mz_zip_archive *pZip, size_t initial_allocation_size) { pZip->m_pWrite = mz_zip_heap_write_func; pZip->m_pIO_opaque = pZip; - if (!mz_zip_writer_init(pZip, size_to_reserve_at_beginning)) - return MZ_FALSE; + if (!mz_zip_writer_init(pZip, size_to_reserve_at_beginning)) return MZ_FALSE; if (0 != (initial_allocation_size = MZ_MAX(initial_allocation_size, size_to_reserve_at_beginning))) { if (NULL == (pZip->m_pState->m_pMem = pZip->m_pAlloc( @@ -5789,8 +5924,7 @@ mz_bool mz_zip_writer_init_file(mz_zip_archive *pZip, const char *pFilename, MZ_FILE *pFile; pZip->m_pWrite = mz_zip_file_write_func; pZip->m_pIO_opaque = pZip; - if (!mz_zip_writer_init(pZip, size_to_reserve_at_beginning)) - return MZ_FALSE; + if (!mz_zip_writer_init(pZip, size_to_reserve_at_beginning)) return MZ_FALSE; if (NULL == (pFile = MZ_FOPEN(pFilename, "wb"))) { mz_zip_writer_end(pZip); return MZ_FALSE; @@ -5812,7 +5946,7 @@ mz_bool mz_zip_writer_init_file(mz_zip_archive *pZip, const char *pFilename, } return MZ_TRUE; } -#endif // #ifndef MINIZ_NO_STDIO +#endif // #ifndef MINIZ_NO_STDIO mz_bool mz_zip_writer_init_from_reader(mz_zip_archive *pZip, const char *pFilename) { @@ -5834,10 +5968,8 @@ mz_bool mz_zip_writer_init_from_reader(mz_zip_archive *pZip, return MZ_FALSE; #else // Archive is being read from stdio - try to reopen as writable. - if (pZip->m_pIO_opaque != pZip) - return MZ_FALSE; - if (!pFilename) - return MZ_FALSE; + if (pZip->m_pIO_opaque != pZip) return MZ_FALSE; + if (!pFilename) return MZ_FALSE; pZip->m_pWrite = mz_zip_file_write_func; if (NULL == (pState->m_pFile = MZ_FREOPEN(pFilename, "r+b", pState->m_pFile))) { @@ -5846,12 +5978,11 @@ mz_bool mz_zip_writer_init_from_reader(mz_zip_archive *pZip, mz_zip_reader_end(pZip); return MZ_FALSE; } -#endif // #ifdef MINIZ_NO_STDIO +#endif // #ifdef MINIZ_NO_STDIO } else if (pState->m_pMem) { // Archive lives in a memory block. Assume it's from the heap that we can // resize using the realloc callback. - if (pZip->m_pIO_opaque != pZip) - return MZ_FALSE; + if (pZip->m_pIO_opaque != pZip) return MZ_FALSE; pState->m_mem_capacity = pState->m_mem_size; pZip->m_pWrite = mz_zip_heap_write_func; } @@ -5988,21 +6119,18 @@ static mz_bool mz_zip_writer_validate_archive_name(const char *pArchive_name) { // Basic ZIP archive filename validity checks: Valid filenames cannot start // with a forward slash, cannot contain a drive letter, and cannot use // DOS-style backward slashes. - if (*pArchive_name == '/') - return MZ_FALSE; + if (*pArchive_name == '/') return MZ_FALSE; while (*pArchive_name) { - if ((*pArchive_name == '\\') || (*pArchive_name == ':')) - return MZ_FALSE; + if ((*pArchive_name == '\\') || (*pArchive_name == ':')) return MZ_FALSE; pArchive_name++; } return MZ_TRUE; } -static mz_uint -mz_zip_writer_compute_padding_needed_for_file_alignment(mz_zip_archive *pZip) { +static mz_uint mz_zip_writer_compute_padding_needed_for_file_alignment( + mz_zip_archive *pZip) { mz_uint32 n; - if (!pZip->m_file_offset_alignment) - return 0; + if (!pZip->m_file_offset_alignment) return 0; n = (mz_uint32)(pZip->m_archive_size & (pZip->m_file_offset_alignment - 1)); return (pZip->m_file_offset_alignment - n) & (pZip->m_file_offset_alignment - 1); @@ -6038,8 +6166,7 @@ mz_bool mz_zip_writer_add_mem_ex(mz_zip_archive *pZip, mz_bool store_data_uncompressed; mz_zip_internal_state *pState; - if ((int)level_and_flags < 0) - level_and_flags = MZ_DEFAULT_LEVEL; + if ((int)level_and_flags < 0) level_and_flags = MZ_DEFAULT_LEVEL; level = level_and_flags & 0xF; store_data_uncompressed = ((!level) || (level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA)); @@ -6055,10 +6182,8 @@ mz_bool mz_zip_writer_add_mem_ex(mz_zip_archive *pZip, if ((!(level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) && (uncomp_size)) return MZ_FALSE; // No zip64 support yet - if ((buf_size > 0xFFFFFFFF) || (uncomp_size > 0xFFFFFFFF)) - return MZ_FALSE; - if (!mz_zip_writer_validate_archive_name(pArchive_name)) - return MZ_FALSE; + if ((buf_size > 0xFFFFFFFF) || (uncomp_size > 0xFFFFFFFF)) return MZ_FALSE; + if (!mz_zip_writer_validate_archive_name(pArchive_name)) return MZ_FALSE; #ifndef MINIZ_NO_TIME { @@ -6066,11 +6191,10 @@ mz_bool mz_zip_writer_add_mem_ex(mz_zip_archive *pZip, time(&cur_time); mz_zip_time_to_dos_time(cur_time, &dos_time, &dos_date); } -#endif // #ifndef MINIZ_NO_TIME +#endif // #ifndef MINIZ_NO_TIME archive_name_size = strlen(pArchive_name); - if (archive_name_size > 0xFFFF) - return MZ_FALSE; + if (archive_name_size > 0xFFFF) return MZ_FALSE; num_alignment_padding_bytes = mz_zip_writer_compute_padding_needed_for_file_alignment(pZip); @@ -6086,16 +6210,15 @@ mz_bool mz_zip_writer_add_mem_ex(mz_zip_archive *pZip, // Set DOS Subdirectory attribute bit. ext_attributes |= 0x10; // Subdirectories cannot contain data. - if ((buf_size) || (uncomp_size)) - return MZ_FALSE; + if ((buf_size) || (uncomp_size)) return MZ_FALSE; } // Try to do any allocations before writing to the archive, so if an // allocation fails the file remains unmodified. (A good idea if we're doing // an in-place modification.) - if ((!mz_zip_array_ensure_room(pZip, &pState->m_central_dir, - MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + - archive_name_size + comment_size)) || + if ((!mz_zip_array_ensure_room( + pZip, &pState->m_central_dir, + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + archive_name_size + comment_size)) || (!mz_zip_array_ensure_room(pZip, &pState->m_central_dir_offsets, 1))) return MZ_FALSE; @@ -6105,9 +6228,9 @@ mz_bool mz_zip_writer_add_mem_ex(mz_zip_archive *pZip, return MZ_FALSE; } - if (!mz_zip_writer_write_zeros(pZip, cur_archive_file_ofs, - num_alignment_padding_bytes + - sizeof(local_dir_header))) { + if (!mz_zip_writer_write_zeros( + pZip, cur_archive_file_ofs, + num_alignment_padding_bytes + sizeof(local_dir_header))) { pZip->m_pFree(pZip->m_pAlloc_opaque, pComp); return MZ_FALSE; } @@ -6147,8 +6270,7 @@ mz_bool mz_zip_writer_add_mem_ex(mz_zip_archive *pZip, cur_archive_file_ofs += buf_size; comp_size = buf_size; - if (level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA) - method = MZ_DEFLATED; + if (level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA) method = MZ_DEFLATED; } else if (buf_size) { mz_zip_writer_add_state state; @@ -6214,22 +6336,18 @@ mz_bool mz_zip_writer_add_file(mz_zip_archive *pZip, const char *pArchive_name, mz_uint8 local_dir_header[MZ_ZIP_LOCAL_DIR_HEADER_SIZE]; MZ_FILE *pSrc_file = NULL; - if ((int)level_and_flags < 0) - level_and_flags = MZ_DEFAULT_LEVEL; + if ((int)level_and_flags < 0) level_and_flags = MZ_DEFAULT_LEVEL; level = level_and_flags & 0xF; if ((!pZip) || (!pZip->m_pState) || (pZip->m_zip_mode != MZ_ZIP_MODE_WRITING) || (!pArchive_name) || ((comment_size) && (!pComment)) || (level > MZ_UBER_COMPRESSION)) return MZ_FALSE; - if (level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA) - return MZ_FALSE; - if (!mz_zip_writer_validate_archive_name(pArchive_name)) - return MZ_FALSE; + if (level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA) return MZ_FALSE; + if (!mz_zip_writer_validate_archive_name(pArchive_name)) return MZ_FALSE; archive_name_size = strlen(pArchive_name); - if (archive_name_size > 0xFFFF) - return MZ_FALSE; + if (archive_name_size > 0xFFFF) return MZ_FALSE; num_alignment_padding_bytes = mz_zip_writer_compute_padding_needed_for_file_alignment(pZip); @@ -6245,8 +6363,7 @@ mz_bool mz_zip_writer_add_file(mz_zip_archive *pZip, const char *pArchive_name, return MZ_FALSE; pSrc_file = MZ_FOPEN(pSrc_filename, "rb"); - if (!pSrc_file) - return MZ_FALSE; + if (!pSrc_file) return MZ_FALSE; MZ_FSEEK64(pSrc_file, 0, SEEK_END); uncomp_size = MZ_FTELL64(pSrc_file); MZ_FSEEK64(pSrc_file, 0, SEEK_SET); @@ -6256,12 +6373,11 @@ mz_bool mz_zip_writer_add_file(mz_zip_archive *pZip, const char *pArchive_name, MZ_FCLOSE(pSrc_file); return MZ_FALSE; } - if (uncomp_size <= 3) - level = 0; + if (uncomp_size <= 3) level = 0; - if (!mz_zip_writer_write_zeros(pZip, cur_archive_file_ofs, - num_alignment_padding_bytes + - sizeof(local_dir_header))) { + if (!mz_zip_writer_write_zeros( + pZip, cur_archive_file_ofs, + num_alignment_padding_bytes + sizeof(local_dir_header))) { MZ_FCLOSE(pSrc_file); return MZ_FALSE; } @@ -6292,7 +6408,8 @@ mz_bool mz_zip_writer_add_file(mz_zip_archive *pZip, const char *pArchive_name, if (!level) { while (uncomp_remaining) { - mz_uint n = (mz_uint)MZ_MIN((mz_uint)MZ_ZIP_MAX_IO_BUF_SIZE, uncomp_remaining); + mz_uint n = + (mz_uint)MZ_MIN((mz_uint)MZ_ZIP_MAX_IO_BUF_SIZE, uncomp_remaining); if ((MZ_FREAD(pRead_buf, 1, n, pSrc_file) != n) || (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, pRead_buf, n) != n)) { @@ -6332,8 +6449,8 @@ mz_bool mz_zip_writer_add_file(mz_zip_archive *pZip, const char *pArchive_name, } for (;;) { - size_t in_buf_size = - (mz_uint32)MZ_MIN(uncomp_remaining, (mz_uint)MZ_ZIP_MAX_IO_BUF_SIZE); + size_t in_buf_size = (mz_uint32)MZ_MIN(uncomp_remaining, + (mz_uint)MZ_ZIP_MAX_IO_BUF_SIZE); tdefl_status status; if (MZ_FREAD(pRead_buf, 1, in_buf_size, pSrc_file) != in_buf_size) @@ -6343,9 +6460,9 @@ mz_bool mz_zip_writer_add_file(mz_zip_archive *pZip, const char *pArchive_name, uncomp_crc32, (const mz_uint8 *)pRead_buf, in_buf_size); uncomp_remaining -= in_buf_size; - status = tdefl_compress_buffer(pComp, pRead_buf, in_buf_size, - uncomp_remaining ? TDEFL_NO_FLUSH - : TDEFL_FINISH); + status = tdefl_compress_buffer( + pComp, pRead_buf, in_buf_size, + uncomp_remaining ? TDEFL_NO_FLUSH : TDEFL_FINISH); if (status == TDEFL_STATUS_DONE) { result = MZ_TRUE; break; @@ -6397,7 +6514,7 @@ mz_bool mz_zip_writer_add_file(mz_zip_archive *pZip, const char *pArchive_name, return MZ_TRUE; } -#endif // #ifndef MINIZ_NO_STDIO +#endif // #ifndef MINIZ_NO_STDIO mz_bool mz_zip_writer_add_from_zip_reader(mz_zip_archive *pZip, mz_zip_archive *pSource_zip, @@ -6465,11 +6582,11 @@ mz_bool mz_zip_writer_add_from_zip_reader(mz_zip_archive *pZip, comp_bytes_remaining = n + MZ_READ_LE32(pSrc_central_header + MZ_ZIP_CDH_COMPRESSED_SIZE_OFS); - if (NULL == - (pBuf = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, - (size_t)MZ_MAX(sizeof(mz_uint32) * 4, - MZ_MIN((mz_uint)MZ_ZIP_MAX_IO_BUF_SIZE, - comp_bytes_remaining))))) + if (NULL == (pBuf = pZip->m_pAlloc( + pZip->m_pAlloc_opaque, 1, + (size_t)MZ_MAX(sizeof(mz_uint32) * 4, + MZ_MIN((mz_uint)MZ_ZIP_MAX_IO_BUF_SIZE, + comp_bytes_remaining))))) return MZ_FALSE; while (comp_bytes_remaining) { @@ -6511,8 +6628,7 @@ mz_bool mz_zip_writer_add_from_zip_reader(mz_zip_archive *pZip, pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf); // no zip64 support yet - if (cur_dst_file_ofs > 0xFFFFFFFF) - return MZ_FALSE; + if (cur_dst_file_ofs > 0xFFFFFFFF) return MZ_FALSE; orig_central_dir_size = pState->m_central_dir.m_size; @@ -6534,8 +6650,7 @@ mz_bool mz_zip_writer_add_from_zip_reader(mz_zip_archive *pZip, return MZ_FALSE; } - if (pState->m_central_dir.m_size > 0xFFFFFFFF) - return MZ_FALSE; + if (pState->m_central_dir.m_size > 0xFFFFFFFF) return MZ_FALSE; n = (mz_uint32)orig_central_dir_size; if (!mz_zip_array_push_back(pZip, &pState->m_central_dir_offsets, &n, 1)) { mz_zip_array_resize(pZip, &pState->m_central_dir, orig_central_dir_size, @@ -6593,9 +6708,8 @@ mz_bool mz_zip_writer_finalize_archive(mz_zip_archive *pZip) { sizeof(hdr)) != sizeof(hdr)) return MZ_FALSE; #ifndef MINIZ_NO_STDIO - if ((pState->m_pFile) && (MZ_FFLUSH(pState->m_pFile) == EOF)) - return MZ_FALSE; -#endif // #ifndef MINIZ_NO_STDIO + if ((pState->m_pFile) && (MZ_FFLUSH(pState->m_pFile) == EOF)) return MZ_FALSE; +#endif // #ifndef MINIZ_NO_STDIO pZip->m_archive_size += sizeof(hdr); @@ -6605,12 +6719,9 @@ mz_bool mz_zip_writer_finalize_archive(mz_zip_archive *pZip) { mz_bool mz_zip_writer_finalize_heap_archive(mz_zip_archive *pZip, void **pBuf, size_t *pSize) { - if ((!pZip) || (!pZip->m_pState) || (!pBuf) || (!pSize)) - return MZ_FALSE; - if (pZip->m_pWrite != mz_zip_heap_write_func) - return MZ_FALSE; - if (!mz_zip_writer_finalize_archive(pZip)) - return MZ_FALSE; + if ((!pZip) || (!pZip->m_pState) || (!pBuf) || (!pSize)) return MZ_FALSE; + if (pZip->m_pWrite != mz_zip_heap_write_func) return MZ_FALSE; + if (!mz_zip_writer_finalize_archive(pZip)) return MZ_FALSE; *pBuf = pZip->m_pState->m_pMem; *pSize = pZip->m_pState->m_mem_size; @@ -6638,7 +6749,7 @@ mz_bool mz_zip_writer_end(mz_zip_archive *pZip) { MZ_FCLOSE(pState->m_pFile); pState->m_pFile = NULL; } -#endif // #ifndef MINIZ_NO_STDIO +#endif // #ifndef MINIZ_NO_STDIO if ((pZip->m_pWrite == mz_zip_heap_write_func) && (pState->m_pMem)) { pZip->m_pFree(pZip->m_pAlloc_opaque, pState->m_pMem); @@ -6659,14 +6770,12 @@ mz_bool mz_zip_add_mem_to_archive_file_in_place( mz_zip_archive zip_archive; struct MZ_FILE_STAT_STRUCT file_stat; MZ_CLEAR_OBJ(zip_archive); - if ((int)level_and_flags < 0) - level_and_flags = MZ_DEFAULT_LEVEL; + if ((int)level_and_flags < 0) level_and_flags = MZ_DEFAULT_LEVEL; if ((!pZip_filename) || (!pArchive_name) || ((buf_size) && (!pBuf)) || ((comment_size) && (!pComment)) || ((level_and_flags & 0xF) > MZ_UBER_COMPRESSION)) return MZ_FALSE; - if (!mz_zip_writer_validate_archive_name(pArchive_name)) - return MZ_FALSE; + if (!mz_zip_writer_validate_archive_name(pArchive_name)) return MZ_FALSE; if (MZ_FILE_STAT(pZip_filename, &file_stat) != 0) { // Create a new archive. if (!mz_zip_writer_init_file(&zip_archive, pZip_filename, 0)) @@ -6674,9 +6783,9 @@ mz_bool mz_zip_add_mem_to_archive_file_in_place( created_new_archive = MZ_TRUE; } else { // Append to an existing archive. - if (!mz_zip_reader_init_file(&zip_archive, pZip_filename, - level_and_flags | - MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY)) + if (!mz_zip_reader_init_file( + &zip_archive, pZip_filename, + level_and_flags | MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY)) return MZ_FALSE; if (!mz_zip_writer_init_from_reader(&zip_archive, pZip_filename)) { mz_zip_reader_end(&zip_archive); @@ -6688,10 +6797,8 @@ mz_bool mz_zip_add_mem_to_archive_file_in_place( pComment, comment_size, level_and_flags, 0, 0); // Always finalize, even if adding failed for some reason, so we have a valid // central directory. (This may not always succeed, but we can try.) - if (!mz_zip_writer_finalize_archive(&zip_archive)) - status = MZ_FALSE; - if (!mz_zip_writer_end(&zip_archive)) - status = MZ_FALSE; + if (!mz_zip_writer_finalize_archive(&zip_archive)) status = MZ_FALSE; + if (!mz_zip_writer_end(&zip_archive)) status = MZ_FALSE; if ((!status) && (created_new_archive)) { // It's a new archive and something went wrong, so just delete it. int ignoredStatus = MZ_DELETE_FILE(pZip_filename); @@ -6707,16 +6814,14 @@ void *mz_zip_extract_archive_file_to_heap(const char *pZip_filename, mz_zip_archive zip_archive; void *p = NULL; - if (pSize) - *pSize = 0; + if (pSize) *pSize = 0; - if ((!pZip_filename) || (!pArchive_name)) - return NULL; + if ((!pZip_filename) || (!pArchive_name)) return NULL; MZ_CLEAR_OBJ(zip_archive); - if (!mz_zip_reader_init_file(&zip_archive, pZip_filename, - flags | - MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY)) + if (!mz_zip_reader_init_file( + &zip_archive, pZip_filename, + flags | MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY)) return NULL; if ((file_index = mz_zip_reader_locate_file(&zip_archive, pArchive_name, NULL, @@ -6727,17 +6832,17 @@ void *mz_zip_extract_archive_file_to_heap(const char *pZip_filename, return p; } -#endif // #ifndef MINIZ_NO_STDIO +#endif // #ifndef MINIZ_NO_STDIO -#endif // #ifndef MINIZ_NO_ARCHIVE_WRITING_APIS +#endif // #ifndef MINIZ_NO_ARCHIVE_WRITING_APIS -#endif // #ifndef MINIZ_NO_ARCHIVE_APIS +#endif // #ifndef MINIZ_NO_ARCHIVE_APIS #ifdef __cplusplus } #endif -#endif // MINIZ_HEADER_FILE_ONLY +#endif // MINIZ_HEADER_FILE_ONLY /* This is free and unencumbered software released into the public domain. @@ -6767,41 +6872,72 @@ void *mz_zip_extract_archive_file_to_heap(const char *pZip_filename, */ // ---------------------- end of miniz ---------------------------------------- + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif } +#else -bool IsBigEndian(void) { - union { - unsigned int i; - char c[4]; - } bint = {0x01020304}; +// Reuse MINIZ_LITTE_ENDIAN macro - return bint.c[0] == 1; -} +#if defined(__sparcv9) +// Big endian +#else +#if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) || MINIZ_X86_OR_X64_CPU +// Set MINIZ_LITTLE_ENDIAN to 1 if the processor is little endian. +#define MINIZ_LITTLE_ENDIAN 1 +#endif +#endif -void swap2(unsigned short *val) { +#endif // TINYEXR_USE_MINIZ + +// static bool IsBigEndian(void) { +// union { +// unsigned int i; +// char c[4]; +// } bint = {0x01020304}; +// +// return bint.c[0] == 1; +//} + +static const int kEXRVersionSize = 8; + +static void swap2(unsigned short *val) { +#ifdef MINIZ_LITTLE_ENDIAN + (void)val; +#else unsigned short tmp = *val; - unsigned char *dst = (unsigned char *)val; - unsigned char *src = (unsigned char *)&tmp; + unsigned char *dst = reinterpret_cast(val); + unsigned char *src = reinterpret_cast(&tmp); dst[0] = src[1]; dst[1] = src[0]; +#endif } -void swap4(unsigned int *val) { +static void swap4(unsigned int *val) { +#ifdef MINIZ_LITTLE_ENDIAN + (void)val; +#else unsigned int tmp = *val; - unsigned char *dst = (unsigned char *)val; - unsigned char *src = (unsigned char *)&tmp; + unsigned char *dst = reinterpret_cast(val); + unsigned char *src = reinterpret_cast(&tmp); dst[0] = src[3]; dst[1] = src[2]; dst[2] = src[1]; dst[3] = src[0]; +#endif } -void swap8(unsigned long long *val) { - unsigned long long tmp = (*val); - unsigned char *dst = (unsigned char *)val; - unsigned char *src = (unsigned char *)&tmp; +static void swap8(tinyexr::tinyexr_uint64 *val) { +#ifdef MINIZ_LITTLE_ENDIAN + (void)val; +#else + tinyexr::tinyexr_uint64 tmp = (*val); + unsigned char *dst = reinterpret_cast(val); + unsigned char *src = reinterpret_cast(&tmp); dst[0] = src[7]; dst[1] = src[6]; @@ -6811,6 +6947,7 @@ void swap8(unsigned long long *val) { dst[5] = src[2]; dst[6] = src[1]; dst[7] = src[0]; +#endif } // https://gist.github.com/rygorous/2156668 @@ -6831,6 +6968,11 @@ union FP32 { } s; }; +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wpadded" +#endif + union FP16 { unsigned short u; struct { @@ -6846,59 +6988,63 @@ union FP16 { } s; }; -FP32 half_to_float(FP16 h) { +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + +static FP32 half_to_float(FP16 h) { static const FP32 magic = {113 << 23}; static const unsigned int shifted_exp = 0x7c00 - << 13; // exponent mask after shift + << 13; // exponent mask after shift FP32 o; - o.u = (h.u & 0x7fff) << 13; // exponent/mantissa bits - unsigned int exp_ = shifted_exp & o.u; // just the exponent - o.u += (127 - 15) << 23; // exponent adjust + o.u = (h.u & 0x7fffU) << 13U; // exponent/mantissa bits + unsigned int exp_ = shifted_exp & o.u; // just the exponent + o.u += (127 - 15) << 23; // exponent adjust // handle exponent special cases - if (exp_ == shifted_exp) // Inf/NaN? - o.u += (128 - 16) << 23; // extra exp adjust - else if (exp_ == 0) // Zero/Denormal? + if (exp_ == shifted_exp) // Inf/NaN? + o.u += (128 - 16) << 23; // extra exp adjust + else if (exp_ == 0) // Zero/Denormal? { - o.u += 1 << 23; // extra exp adjust - o.f -= magic.f; // renormalize + o.u += 1 << 23; // extra exp adjust + o.f -= magic.f; // renormalize } - o.u |= (h.u & 0x8000) << 16; // sign bit + o.u |= (h.u & 0x8000U) << 16U; // sign bit return o; } -FP16 float_to_half_full(FP32 f) { +static FP16 float_to_half_full(FP32 f) { FP16 o = {0}; // Based on ISPC reference code (with minor modifications) - if (f.s.Exponent == 0) // Signed zero/denormal (which will underflow) + if (f.s.Exponent == 0) // Signed zero/denormal (which will underflow) o.s.Exponent = 0; - else if (f.s.Exponent == 255) // Inf or NaN (all exponent bits set) + else if (f.s.Exponent == 255) // Inf or NaN (all exponent bits set) { o.s.Exponent = 31; - o.s.Mantissa = f.s.Mantissa ? 0x200 : 0; // NaN->qNaN and Inf->Inf - } else // Normalized number + o.s.Mantissa = f.s.Mantissa ? 0x200 : 0; // NaN->qNaN and Inf->Inf + } else // Normalized number { // Exponent unbias the single, then bias the halfp int newexp = f.s.Exponent - 127 + 15; - if (newexp >= 31) // Overflow, return signed infinity + if (newexp >= 31) // Overflow, return signed infinity o.s.Exponent = 31; - else if (newexp <= 0) // Underflow + else if (newexp <= 0) // Underflow { - if ((14 - newexp) <= 24) // Mantissa might be non-zero + if ((14 - newexp) <= 24) // Mantissa might be non-zero { - unsigned int mant = f.s.Mantissa | 0x800000; // Hidden 1 bit + unsigned int mant = f.s.Mantissa | 0x800000; // Hidden 1 bit o.s.Mantissa = mant >> (14 - newexp); - if ((mant >> (13 - newexp)) & 1) // Check for rounding - o.u++; // Round, might overflow into exp bit, but this is OK + if ((mant >> (13 - newexp)) & 1) // Check for rounding + o.u++; // Round, might overflow into exp bit, but this is OK } } else { - o.s.Exponent = newexp; + o.s.Exponent = static_cast(newexp); o.s.Mantissa = f.s.Mantissa >> 13; - if (f.s.Mantissa & 0x1000) // Check for rounding - o.u++; // Round, might overflow to inf, this is OK + if (f.s.Mantissa & 0x1000) // Check for rounding + o.u++; // Round, might overflow to inf, this is OK } } @@ -6920,91 +7066,139 @@ FP16 float_to_half_full(FP32 f) { // #define IMF_B44_COMPRESSION 6 // #define IMF_B44A_COMPRESSION 7 -const char *ReadString(std::string &s, const char *ptr) { +static const char *ReadString(std::string *s, const char *ptr) { // Read untile NULL(\0). const char *p = ptr; const char *q = ptr; - while ((*q) != 0) - q++; + while ((*q) != 0) q++; - s = std::string(p, q); + (*s) = std::string(p, q); - return q + 1; // skip '\0' + return q + 1; // skip '\0' } -const char *ReadAttribute(std::string &name, std::string &ty, - std::vector &data, const char *ptr) { +static bool ReadAttribute(std::string *name, std::string *type, + std::vector *data, size_t *marker_size, + const char *marker, size_t size) { + size_t name_len = strnlen(marker, size); + if (name_len == size) { + // String does not have a terminating character. + return false; + } + *name = std::string(marker, name_len); - if ((*ptr) == 0) { - // end of attribute. - return NULL; + marker += name_len + 1; + size -= name_len + 1; + + size_t type_len = strnlen(marker, size); + if (type_len == size) { + return false; + } + *type = std::string(marker, type_len); + + marker += type_len + 1; + size -= type_len + 1; + + if (size < sizeof(uint32_t)) { + return false; } - const char *p = ReadString(name, ptr); + uint32_t data_len; + memcpy(&data_len, marker, sizeof(uint32_t)); + tinyexr::swap4(reinterpret_cast(&data_len)); - p = ReadString(ty, p); + marker += sizeof(uint32_t); + size -= sizeof(uint32_t); - int dataLen; - memcpy(&dataLen, p, sizeof(int)); - p += 4; - - if (IsBigEndian()) { - swap4(reinterpret_cast(&dataLen)); + if (size < data_len) { + return false; } - data.resize(dataLen); - memcpy(&data.at(0), p, dataLen); - p += dataLen; + data->resize(static_cast(data_len)); + memcpy(&data->at(0), marker, static_cast(data_len)); - return p; + *marker_size = name_len + 1 + type_len + 1 + sizeof(uint32_t) + data_len; + return true; } -void WriteAttribute(FILE *fp, const char *name, const char *type, - const unsigned char *data, int len) { - size_t n = fwrite(name, 1, strlen(name) + 1, fp); - assert(n == strlen(name) + 1); - - n = fwrite(type, 1, strlen(type) + 1, fp); - assert(n == strlen(type) + 1); +static void WriteAttributeToMemory(std::vector *out, + const char *name, const char *type, + const unsigned char *data, int len) { + out->insert(out->end(), name, name + strlen(name) + 1); + out->insert(out->end(), type, type + strlen(type) + 1); int outLen = len; - if (IsBigEndian()) { - swap4(reinterpret_cast(&outLen)); - } - n = fwrite(&outLen, 1, sizeof(int), fp); - assert(n == sizeof(int)); - - n = fwrite(data, 1, len, fp); - assert(n == (size_t)len); - - (void)n; -} - -void WriteAttributeToMemory(std::vector &out, const char *name, - const char *type, const unsigned char *data, - int len) { - out.insert(out.end(), name, name + strlen(name) + 1); - out.insert(out.end(), type, type + strlen(type) + 1); - - int outLen = len; - if (IsBigEndian()) { - swap4(reinterpret_cast(&outLen)); - } - out.insert(out.end(), reinterpret_cast(&outLen), - reinterpret_cast(&outLen) + sizeof(int)); - out.insert(out.end(), data, data + len); + tinyexr::swap4(reinterpret_cast(&outLen)); + out->insert(out->end(), reinterpret_cast(&outLen), + reinterpret_cast(&outLen) + sizeof(int)); + out->insert(out->end(), data, data + len); } typedef struct { - std::string name; // less than 255 bytes long - int pixelType; - unsigned char pLinear; - int xSampling; - int ySampling; + std::string name; // less than 255 bytes long + int pixel_type; + int x_sampling; + int y_sampling; + unsigned char p_linear; + unsigned char pad[3]; } ChannelInfo; -void ReadChannelInfo(std::vector &channels, - const std::vector &data) { +typedef struct { + std::vector channels; + std::vector attributes; + + int data_window[4]; + int line_order; + int display_window[4]; + float screen_window_center[2]; + float screen_window_width; + float pixel_aspect_ratio; + + int chunk_count; + + // Tiled format + int tile_size_x; + int tile_size_y; + int tile_level_mode; + int tile_rounding_mode; + + unsigned int header_len; + + int compression_type; + + void clear() { + channels.clear(); + attributes.clear(); + + data_window[0] = 0; + data_window[1] = 0; + data_window[2] = 0; + data_window[3] = 0; + line_order = 0; + display_window[0] = 0; + display_window[1] = 0; + display_window[2] = 0; + display_window[3] = 0; + screen_window_center[0] = 0.0f; + screen_window_center[1] = 0.0f; + screen_window_width = 0.0f; + pixel_aspect_ratio = 0.0f; + + chunk_count = 0; + + // Tiled format + tile_size_x = 0; + tile_size_y = 0; + tile_level_mode = 0; + tile_rounding_mode = 0; + + header_len = 0; + compression_type = 0; + } +} HeaderInfo; + +static void ReadChannelInfo(std::vector &channels, + const std::vector &data) { const char *p = reinterpret_cast(&data.at(0)); for (;;) { @@ -7012,36 +7206,33 @@ void ReadChannelInfo(std::vector &channels, break; } ChannelInfo info; - p = ReadString(info.name, p); + p = ReadString(&info.name, p); - memcpy(&info.pixelType, p, sizeof(int)); + memcpy(&info.pixel_type, p, sizeof(int)); p += 4; - info.pLinear = p[0]; // uchar - p += 1 + 3; // reserved: uchar[3] - memcpy(&info.xSampling, p, sizeof(int)); // int + info.p_linear = static_cast(p[0]); // uchar + p += 1 + 3; // reserved: uchar[3] + memcpy(&info.x_sampling, p, sizeof(int)); // int p += 4; - memcpy(&info.ySampling, p, sizeof(int)); // int + memcpy(&info.y_sampling, p, sizeof(int)); // int p += 4; - if (IsBigEndian()) { - swap4(reinterpret_cast(&info.pixelType)); - swap4(reinterpret_cast(&info.xSampling)); - swap4(reinterpret_cast(&info.ySampling)); - } + tinyexr::swap4(reinterpret_cast(&info.pixel_type)); + tinyexr::swap4(reinterpret_cast(&info.x_sampling)); + tinyexr::swap4(reinterpret_cast(&info.y_sampling)); channels.push_back(info); } } -void WriteChannelInfo(std::vector &data, - const std::vector &channels) { - +static void WriteChannelInfo(std::vector &data, + const std::vector &channels) { size_t sz = 0; // Calculate total size. for (size_t c = 0; c < channels.size(); c++) { - sz += strlen(channels[c].name.c_str()) + 1; // +1 for \0 - sz += 16; // 4 * int + sz += strlen(channels[c].name.c_str()) + 1; // +1 for \0 + sz += 16; // 4 * int } data.resize(sz + 1); @@ -7053,35 +7244,33 @@ void WriteChannelInfo(std::vector &data, (*p) = '\0'; p++; - int pixelType = channels[c].pixelType; - int xSampling = channels[c].xSampling; - int ySampling = channels[c].ySampling; - if (IsBigEndian()) { - swap4(reinterpret_cast(&pixelType)); - swap4(reinterpret_cast(&xSampling)); - swap4(reinterpret_cast(&ySampling)); - } + int pixel_type = channels[c].pixel_type; + int x_sampling = channels[c].x_sampling; + int y_sampling = channels[c].y_sampling; + tinyexr::swap4(reinterpret_cast(&pixel_type)); + tinyexr::swap4(reinterpret_cast(&x_sampling)); + tinyexr::swap4(reinterpret_cast(&y_sampling)); - memcpy(p, &pixelType, sizeof(int)); + memcpy(p, &pixel_type, sizeof(int)); p += sizeof(int); - (*p) = channels[c].pLinear; + (*p) = channels[c].p_linear; p += 4; - memcpy(p, &xSampling, sizeof(int)); + memcpy(p, &x_sampling, sizeof(int)); p += sizeof(int); - memcpy(p, &ySampling, sizeof(int)); + memcpy(p, &y_sampling, sizeof(int)); p += sizeof(int); } (*p) = '\0'; } -void CompressZip(unsigned char *dst, unsigned long long &compressedSize, - const unsigned char *src, unsigned long srcSize) { - - std::vector tmpBuf(srcSize); +static void CompressZip(unsigned char *dst, + tinyexr::tinyexr_uint64 &compressedSize, + const unsigned char *src, unsigned long src_size) { + std::vector tmpBuf(src_size); // // Apply EXR-specific? postprocess. Grabbed from OpenEXR's @@ -7092,19 +7281,21 @@ void CompressZip(unsigned char *dst, unsigned long long &compressedSize, // Reorder the pixel data. // - { - char *t1 = (char *)&tmpBuf.at(0); - char *t2 = (char *)&tmpBuf.at(0) + (srcSize + 1) / 2; - const char *stop = (const char *)src + srcSize; + const char *srcPtr = reinterpret_cast(src); - while (true) { - if ((const char *)src < stop) - *(t1++) = *(src++); + { + char *t1 = reinterpret_cast(&tmpBuf.at(0)); + char *t2 = reinterpret_cast(&tmpBuf.at(0)) + (src_size + 1) / 2; + const char *stop = srcPtr + src_size; + + for (;;) { + if (srcPtr < stop) + *(t1++) = *(srcPtr++); else break; - if ((const char *)src < stop) - *(t2++) = *(src++); + if (srcPtr < stop) + *(t2++) = *(srcPtr++); else break; } @@ -7116,38 +7307,55 @@ void CompressZip(unsigned char *dst, unsigned long long &compressedSize, { unsigned char *t = &tmpBuf.at(0) + 1; - unsigned char *stop = &tmpBuf.at(0) + srcSize; + unsigned char *stop = &tmpBuf.at(0) + src_size; int p = t[-1]; while (t < stop) { int d = int(t[0]) - p + (128 + 256); p = t[0]; - t[0] = d; + t[0] = static_cast(d); ++t; } } +#if TINYEXR_USE_MINIZ // // Compress the data using miniz // - miniz::mz_ulong outSize = miniz::mz_compressBound(srcSize); - int ret = miniz::mz_compress(dst, &outSize, - (const unsigned char *)&tmpBuf.at(0), srcSize); + miniz::mz_ulong outSize = miniz::mz_compressBound(src_size); + int ret = miniz::mz_compress( + dst, &outSize, static_cast(&tmpBuf.at(0)), + src_size); assert(ret == miniz::MZ_OK); (void)ret; compressedSize = outSize; +#else + uLong outSize = compressBound(static_cast(src_size)); + int ret = compress(dst, &outSize, static_cast(&tmpBuf.at(0)), + src_size); + assert(ret == Z_OK); + + compressedSize = outSize; +#endif } -void DecompressZip(unsigned char *dst, unsigned long &uncompressedSize, - const unsigned char *src, unsigned long srcSize) { - std::vector tmpBuf(uncompressedSize); +static void DecompressZip(unsigned char *dst, + unsigned long *uncompressed_size /* inout */, + const unsigned char *src, unsigned long src_size) { + std::vector tmpBuf(*uncompressed_size); +#if TINYEXR_USE_MINIZ int ret = - miniz::mz_uncompress(&tmpBuf.at(0), &uncompressedSize, src, srcSize); + miniz::mz_uncompress(&tmpBuf.at(0), uncompressed_size, src, src_size); assert(ret == miniz::MZ_OK); (void)ret; +#else + int ret = uncompress(&tmpBuf.at(0), uncompressed_size, src, src_size); + assert(ret == Z_OK); + (void)ret; +#endif // // Apply EXR-specific? postprocess. Grabbed from OpenEXR's @@ -7157,11 +7365,11 @@ void DecompressZip(unsigned char *dst, unsigned long &uncompressedSize, // Predictor. { unsigned char *t = &tmpBuf.at(0) + 1; - unsigned char *stop = &tmpBuf.at(0) + uncompressedSize; + unsigned char *stop = &tmpBuf.at(0) + (*uncompressed_size); while (t < stop) { int d = int(t[-1]) + int(t[0]) - 128; - t[0] = d; + t[0] = static_cast(d); ++t; } } @@ -7170,11 +7378,11 @@ void DecompressZip(unsigned char *dst, unsigned long &uncompressedSize, { const char *t1 = reinterpret_cast(&tmpBuf.at(0)); const char *t2 = reinterpret_cast(&tmpBuf.at(0)) + - (uncompressedSize + 1) / 2; + (*uncompressed_size + 1) / 2; char *s = reinterpret_cast(dst); - char *stop = s + uncompressedSize; + char *stop = s + (*uncompressed_size); - while (true) { + for (;;) { if (s < stop) *(s++) = *(t1++); else @@ -7188,6 +7396,230 @@ void DecompressZip(unsigned char *dst, unsigned long &uncompressedSize, } } +// RLE code from OpenEXR -------------------------------------- + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wsign-conversion" +#endif + +const int MIN_RUN_LENGTH = 3; +const int MAX_RUN_LENGTH = 127; + +// +// Compress an array of bytes, using run-length encoding, +// and return the length of the compressed data. +// + +static int rleCompress(int inLength, const char in[], signed char out[]) { + const char *inEnd = in + inLength; + const char *runStart = in; + const char *runEnd = in + 1; + signed char *outWrite = out; + + while (runStart < inEnd) { + while (runEnd < inEnd && *runStart == *runEnd && + runEnd - runStart - 1 < MAX_RUN_LENGTH) { + ++runEnd; + } + + if (runEnd - runStart >= MIN_RUN_LENGTH) { + // + // Compressable run + // + + *outWrite++ = static_cast(runEnd - runStart) - 1; + *outWrite++ = *(reinterpret_cast(runStart)); + runStart = runEnd; + } else { + // + // Uncompressable run + // + + while (runEnd < inEnd && + ((runEnd + 1 >= inEnd || *runEnd != *(runEnd + 1)) || + (runEnd + 2 >= inEnd || *(runEnd + 1) != *(runEnd + 2))) && + runEnd - runStart < MAX_RUN_LENGTH) { + ++runEnd; + } + + *outWrite++ = static_cast(runStart - runEnd); + + while (runStart < runEnd) { + *outWrite++ = *(reinterpret_cast(runStart++)); + } + } + + ++runEnd; + } + + return static_cast(outWrite - out); +} + +// +// Uncompress an array of bytes compressed with rleCompress(). +// Returns the length of the oncompressed data, or 0 if the +// length of the uncompressed data would be more than maxLength. +// + +static int rleUncompress(int inLength, int maxLength, const signed char in[], + char out[]) { + char *outStart = out; + + while (inLength > 0) { + if (*in < 0) { + int count = -(static_cast(*in++)); + inLength -= count + 1; + + if (0 > (maxLength -= count)) return 0; + + memcpy(out, in, count); + out += count; + in += count; + } else { + int count = *in++; + inLength -= 2; + + if (0 > (maxLength -= count + 1)) return 0; + + memset(out, *reinterpret_cast(in), count + 1); + out += count + 1; + + in++; + } + } + + return static_cast(out - outStart); +} + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif +// End of RLE code from OpenEXR ----------------------------------- + +static void CompressRle(unsigned char *dst, + tinyexr::tinyexr_uint64 &compressedSize, + const unsigned char *src, unsigned long src_size) { + std::vector tmpBuf(src_size); + + // + // Apply EXR-specific? postprocess. Grabbed from OpenEXR's + // ImfRleCompressor.cpp + // + + // + // Reorder the pixel data. + // + + const char *srcPtr = reinterpret_cast(src); + + { + char *t1 = reinterpret_cast(&tmpBuf.at(0)); + char *t2 = reinterpret_cast(&tmpBuf.at(0)) + (src_size + 1) / 2; + const char *stop = srcPtr + src_size; + + for (;;) { + if (srcPtr < stop) + *(t1++) = *(srcPtr++); + else + break; + + if (srcPtr < stop) + *(t2++) = *(srcPtr++); + else + break; + } + } + + // + // Predictor. + // + + { + unsigned char *t = &tmpBuf.at(0) + 1; + unsigned char *stop = &tmpBuf.at(0) + src_size; + int p = t[-1]; + + while (t < stop) { + int d = int(t[0]) - p + (128 + 256); + p = t[0]; + t[0] = static_cast(d); + ++t; + } + } + + // outSize will be (srcSiz * 3) / 2 at max. + int outSize = rleCompress(static_cast(src_size), + reinterpret_cast(&tmpBuf.at(0)), + reinterpret_cast(dst)); + assert(outSize > 0); + + compressedSize = static_cast(outSize); +} + +static void DecompressRle(unsigned char *dst, + const unsigned long uncompressed_size, + const unsigned char *src, unsigned long src_size) { + std::vector tmpBuf(uncompressed_size); + + int ret = rleUncompress(static_cast(src_size), + static_cast(uncompressed_size), + reinterpret_cast(src), + reinterpret_cast(&tmpBuf.at(0))); + assert(ret == static_cast(uncompressed_size)); + (void)ret; + + // + // Apply EXR-specific? postprocess. Grabbed from OpenEXR's + // ImfRleCompressor.cpp + // + + // Predictor. + { + unsigned char *t = &tmpBuf.at(0) + 1; + unsigned char *stop = &tmpBuf.at(0) + uncompressed_size; + + while (t < stop) { + int d = int(t[-1]) + int(t[0]) - 128; + t[0] = static_cast(d); + ++t; + } + } + + // Reorder the pixel data. + { + const char *t1 = reinterpret_cast(&tmpBuf.at(0)); + const char *t2 = reinterpret_cast(&tmpBuf.at(0)) + + (uncompressed_size + 1) / 2; + char *s = reinterpret_cast(dst); + char *stop = s + uncompressed_size; + + for (;;) { + if (s < stop) + *(s++) = *(t1++); + else + break; + + if (s < stop) + *(s++) = *(t2++); + else + break; + } + } +} + +#if TINYEXR_USE_PIZ + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wc++11-long-long" +#pragma clang diagnostic ignored "-Wold-style-cast" +#pragma clang diagnostic ignored "-Wpadded" +#pragma clang diagnostic ignored "-Wsign-conversion" +#pragma clang diagnostic ignored "-Wc++11-extensions" +#pragma clang diagnostic ignored "-Wconversion" +#endif + // // PIZ compress/uncompress, based on OpenEXR's ImfPizCompressor.cpp // @@ -7223,33 +7655,31 @@ struct PIZChannelData { // data (untransformed data values must be less than (1 << 14)). // -#if 0 // @todo inline void wenc14(unsigned short a, unsigned short b, unsigned short &l, unsigned short &h) { - short as = a; - short bs = b; + short as = static_cast(a); + short bs = static_cast(b); short ms = (as + bs) >> 1; short ds = as - bs; - l = ms; - h = ds; + l = static_cast(ms); + h = static_cast(ds); } -#endif inline void wdec14(unsigned short l, unsigned short h, unsigned short &a, unsigned short &b) { - short ls = l; - short hs = h; + short ls = static_cast(l); + short hs = static_cast(h); int hi = hs; int ai = ls + (hi & 1) + (hi >> 1); - short as = ai; - short bs = ai - hi; + short as = static_cast(ai); + short bs = static_cast(ai - hi); - a = as; - b = bs; + a = static_cast(as); + b = static_cast(bs); } // @@ -7260,25 +7690,22 @@ inline void wdec14(unsigned short l, unsigned short h, unsigned short &a, const int NBITS = 16; const int A_OFFSET = 1 << (NBITS - 1); -// const int M_OFFSET = 1 << (NBITS - 1); +const int M_OFFSET = 1 << (NBITS - 1); const int MOD_MASK = (1 << NBITS) - 1; -#if 0 // @ood inline void wenc16(unsigned short a, unsigned short b, unsigned short &l, unsigned short &h) { int ao = (a + A_OFFSET) & MOD_MASK; int m = ((ao + b) >> 1); int d = ao - b; - if (d < 0) - m = (m + M_OFFSET) & MOD_MASK; + if (d < 0) m = (m + M_OFFSET) & MOD_MASK; d &= MOD_MASK; - l = m; - h = d; + l = static_cast(m); + h = static_cast(d); } -#endif inline void wdec16(unsigned short l, unsigned short h, unsigned short &a, unsigned short &b) { @@ -7286,26 +7713,26 @@ inline void wdec16(unsigned short l, unsigned short h, unsigned short &a, int d = h; int bb = (m - (d >> 1)) & MOD_MASK; int aa = (d + bb - A_OFFSET) & MOD_MASK; - b = bb; - a = aa; + b = static_cast(bb); + a = static_cast(aa); } // // 2D Wavelet encoding: // -#if 0 // @todo -void wav2Encode(unsigned short *in, // io: values are transformed in place - int nx, // i : x size - int ox, // i : x offset - int ny, // i : y size - int oy, // i : y offset - unsigned short mx) // i : maximum in[x][y] value +static void wav2Encode( + unsigned short *in, // io: values are transformed in place + int nx, // i : x size + int ox, // i : x offset + int ny, // i : y size + int oy, // i : y offset + unsigned short mx) // i : maximum in[x][y] value { bool w14 = (mx < (1 << 14)); int n = (nx > ny) ? ny : nx; - int p = 1; // == 1 << level - int p2 = 2; // == 1 << (level+1) + int p = 1; // == 1 << level + int p2 = 2; // == 1 << (level+1) // // Hierachical loop on smaller dimension n @@ -7398,18 +7825,18 @@ void wav2Encode(unsigned short *in, // io: values are transformed in place p2 <<= 1; } } -#endif // // 2D Wavelet decoding: // -void wav2Decode(unsigned short *in, // io: values are transformed in place - int nx, // i : x size - int ox, // i : x offset - int ny, // i : y size - int oy, // i : y offset - unsigned short mx) // i : maximum in[x][y] value +static void wav2Decode( + unsigned short *in, // io: values are transformed in place + int nx, // i : x size + int ox, // i : x offset + int ny, // i : y size + int oy, // i : y offset + unsigned short mx) // i : maximum in[x][y] value { bool w14 = (mx < (1 << 14)); int n = (nx > ny) ? ny : nx; @@ -7420,8 +7847,7 @@ void wav2Decode(unsigned short *in, // io: values are transformed in place // Search max level // - while (p <= n) - p <<= 1; + while (p <= n) p <<= 1; p >>= 1; p2 = p; @@ -7521,35 +7947,34 @@ void wav2Decode(unsigned short *in, // io: values are transformed in place //----------------------------------------------------------------------------- // -// 16-bit Huffman compression and decompression. +// 16-bit Huffman compression and decompression. // -// The source code in this file is derived from the 8-bit -// Huffman compression and decompression routines written -// by Christian Rouet for his PIZ image file format. +// The source code in this file is derived from the 8-bit +// Huffman compression and decompression routines written +// by Christian Rouet for his PIZ image file format. // //----------------------------------------------------------------------------- // Adds some modification for tinyexr. -const int HUF_ENCBITS = 16; // literal (value) bit length -const int HUF_DECBITS = 14; // decoding bit size (>= 8) +const int HUF_ENCBITS = 16; // literal (value) bit length +const int HUF_DECBITS = 14; // decoding bit size (>= 8) -const int HUF_ENCSIZE = (1 << HUF_ENCBITS) + 1; // encoding table size -const int HUF_DECSIZE = 1 << HUF_DECBITS; // decoding table size +const int HUF_ENCSIZE = (1 << HUF_ENCBITS) + 1; // encoding table size +const int HUF_DECSIZE = 1 << HUF_DECBITS; // decoding table size const int HUF_DECMASK = HUF_DECSIZE - 1; -struct HufDec { // short code long code +struct HufDec { // short code long code //------------------------------- - int len : 8; // code length 0 - int lit : 24; // lit p size - int *p; // 0 lits + int len : 8; // code length 0 + int lit : 24; // lit p size + int *p; // 0 lits }; inline long long hufLength(long long code) { return code & 63; } inline long long hufCode(long long code) { return code >> 6; } -#if 0 inline void outputBits(int nBits, long long bits, long long &c, int &lc, char *&out) { c <<= nBits; @@ -7557,14 +7982,12 @@ inline void outputBits(int nBits, long long bits, long long &c, int &lc, c |= bits; - while (lc >= 8) - *out++ = (c >> (lc -= 8)); + while (lc >= 8) *out++ = static_cast((c >> (lc -= 8))); } -#endif inline long long getBits(int nBits, long long &c, int &lc, const char *&in) { while (lc < nBits) { - c = (c << 8) | *(unsigned char *)(in++); + c = (c << 8) | *(reinterpret_cast(in++)); lc += 8; } @@ -7578,21 +8001,21 @@ inline long long getBits(int nBits, long long &c, int &lc, const char *&in) { // // Build a "canonical" Huffman code table: -// - for each (uncompressed) symbol, hcode contains the length -// of the corresponding code (in the compressed data) -// - canonical codes are computed and stored in hcode -// - the rules for constructing canonical codes are as follows: -// * shorter codes (if filled with zeroes to the right) -// have a numerically higher value than longer codes -// * for codes with the same length, numerical values -// increase with numerical symbol values -// - because the canonical code table can be constructed from -// symbol lengths alone, the code table can be transmitted -// without sending the actual code values -// - see http://www.compressconsult.com/huffman/ +// - for each (uncompressed) symbol, hcode contains the length +// of the corresponding code (in the compressed data) +// - canonical codes are computed and stored in hcode +// - the rules for constructing canonical codes are as follows: +// * shorter codes (if filled with zeroes to the right) +// have a numerically higher value than longer codes +// * for codes with the same length, numerical values +// increase with numerical symbol values +// - because the canonical code table can be constructed from +// symbol lengths alone, the code table can be transmitted +// without sending the actual code values +// - see http://www.compressconsult.com/huffman/ // -void hufCanonicalCodeTable(long long hcode[HUF_ENCSIZE]) { +static void hufCanonicalCodeTable(long long hcode[HUF_ENCSIZE]) { long long n[59]; // @@ -7601,11 +8024,9 @@ void hufCanonicalCodeTable(long long hcode[HUF_ENCSIZE]) { // store the count in n[i]. // - for (int i = 0; i <= 58; ++i) - n[i] = 0; + for (int i = 0; i <= 58; ++i) n[i] = 0; - for (int i = 0; i < HUF_ENCSIZE; ++i) - n[hcode[i]] += 1; + for (int i = 0; i < HUF_ENCSIZE; ++i) n[hcode[i]] += 1; // // For each i from 58 through 1, compute the @@ -7629,31 +8050,29 @@ void hufCanonicalCodeTable(long long hcode[HUF_ENCSIZE]) { // for (int i = 0; i < HUF_ENCSIZE; ++i) { - int l = hcode[i]; + int l = static_cast(hcode[i]); - if (l > 0) - hcode[i] = l | (n[l]++ << 6); + if (l > 0) hcode[i] = l | (n[l]++ << 6); } } // // Compute Huffman codes (based on frq input) and store them in frq: -// - code structure is : [63:lsb - 6:msb] | [5-0: bit length]; -// - max code length is 58 bits; -// - codes outside the range [im-iM] have a null length (unused values); -// - original frequencies are destroyed; -// - encoding tables are used by hufEncode() and hufBuildDecTable(); +// - code structure is : [63:lsb - 6:msb] | [5-0: bit length]; +// - max code length is 58 bits; +// - codes outside the range [im-iM] have a null length (unused values); +// - original frequencies are destroyed; +// - encoding tables are used by hufEncode() and hufBuildDecTable(); // -#if 0 // @todo struct FHeapCompare { bool operator()(long long *a, long long *b) { return *a > *b; } }; -void hufBuildEncTable( - long long *frq, // io: input frequencies [HUF_ENCSIZE], output table - int *im, // o: min frq index - int *iM) // o: max frq index +static void hufBuildEncTable( + long long *frq, // io: input frequencies [HUF_ENCSIZE], output table + int *im, // o: min frq index + int *iM) // o: max frq index { // // This function assumes that when it is called, array frq @@ -7681,8 +8100,7 @@ void hufBuildEncTable( *im = 0; - while (!frq[*im]) - (*im)++; + while (!frq[*im]) (*im)++; int nf = 0; @@ -7776,7 +8194,7 @@ void hufBuildEncTable( // Add a bit to all codes in the first list. // - for (int j = m; true; j = hlink[j]) { + for (int j = m;; j = hlink[j]) { scode[j]++; assert(scode[j] <= 58); @@ -7795,13 +8213,12 @@ void hufBuildEncTable( // Add a bit to all codes in the second list // - for (int j = mm; true; j = hlink[j]) { + for (int j = mm;; j = hlink[j]) { scode[j]++; assert(scode[j] <= 58); - if (hlink[j] == j) - break; + if (hlink[j] == j) break; } } @@ -7814,33 +8231,32 @@ void hufBuildEncTable( hufCanonicalCodeTable(scode); memcpy(frq, scode, sizeof(long long) * HUF_ENCSIZE); } -#endif // // Pack an encoding table: -// - only code lengths, not actual codes, are stored -// - runs of zeroes are compressed as follows: +// - only code lengths, not actual codes, are stored +// - runs of zeroes are compressed as follows: // -// unpacked packed -// -------------------------------- -// 1 zero 0 (6 bits) -// 2 zeroes 59 -// 3 zeroes 60 -// 4 zeroes 61 -// 5 zeroes 62 -// n zeroes (6 or more) 63 n-6 (6 + 8 bits) +// unpacked packed +// -------------------------------- +// 1 zero 0 (6 bits) +// 2 zeroes 59 +// 3 zeroes 60 +// 4 zeroes 61 +// 5 zeroes 62 +// n zeroes (6 or more) 63 n-6 (6 + 8 bits) // const int SHORT_ZEROCODE_RUN = 59; const int LONG_ZEROCODE_RUN = 63; const int SHORTEST_LONG_RUN = 2 + LONG_ZEROCODE_RUN - SHORT_ZEROCODE_RUN; -// const int LONGEST_LONG_RUN = 255 + SHORTEST_LONG_RUN; +const int LONGEST_LONG_RUN = 255 + SHORTEST_LONG_RUN; -#if 0 -void hufPackEncTable(const long long *hcode, // i : encoding table [HUF_ENCSIZE] - int im, // i : min hcode index - int iM, // i : max hcode index - char **pcode) // o: ptr to packed table (updated) +static void hufPackEncTable( + const long long *hcode, // i : encoding table [HUF_ENCSIZE] + int im, // i : min hcode index + int iM, // i : max hcode index + char **pcode) // o: ptr to packed table (updated) { char *p = *pcode; long long c = 0; @@ -7853,8 +8269,7 @@ void hufPackEncTable(const long long *hcode, // i : encoding table [HUF_ENCSIZE] int zerun = 1; while ((im < iM) && (zerun < LONGEST_LONG_RUN)) { - if (hufLength(hcode[im + 1]) > 0) - break; + if (hufLength(hcode[im + 1]) > 0) break; im++; zerun++; } @@ -7873,22 +8288,21 @@ void hufPackEncTable(const long long *hcode, // i : encoding table [HUF_ENCSIZE] outputBits(6, l, c, lc, p); } - if (lc > 0) - *p++ = (unsigned char)(c << (8 - lc)); + if (lc > 0) *p++ = (unsigned char)(c << (8 - lc)); *pcode = p; } -#endif // // Unpack an encoding table packed by hufPackEncTable(): // -bool hufUnpackEncTable(const char **pcode, // io: ptr to packed table (updated) - int ni, // i : input size (in bytes) - int im, // i : min hcode index - int iM, // i : max hcode index - long long *hcode) // o: encoding table [HUF_ENCSIZE] +static bool hufUnpackEncTable( + const char **pcode, // io: ptr to packed table (updated) + int ni, // i : input size (in bytes) + int im, // i : min hcode index + int iM, // i : max hcode index + long long *hcode) // o: encoding table [HUF_ENCSIZE] { memset(hcode, 0, sizeof(long long) * HUF_ENCSIZE); @@ -7901,7 +8315,7 @@ bool hufUnpackEncTable(const char **pcode, // io: ptr to packed table (updated) return false; } - long long l = hcode[im] = getBits(6, c, lc, p); // code length + long long l = hcode[im] = getBits(6, c, lc, p); // code length if (l == (long long)LONG_ZEROCODE_RUN) { if (p - *pcode > ni) { @@ -7914,8 +8328,7 @@ bool hufUnpackEncTable(const char **pcode, // io: ptr to packed table (updated) return false; } - while (zerun--) - hcode[im++] = 0; + while (zerun--) hcode[im++] = 0; im--; } else if (l >= (long long)SHORT_ZEROCODE_RUN) { @@ -7925,8 +8338,7 @@ bool hufUnpackEncTable(const char **pcode, // io: ptr to packed table (updated) return false; } - while (zerun--) - hcode[im++] = 0; + while (zerun--) hcode[im++] = 0; im--; } @@ -7947,8 +8359,8 @@ bool hufUnpackEncTable(const char **pcode, // io: ptr to packed table (updated) // Clear a newly allocated decoding table so that it contains only zeroes. // -void hufClearDecTable(HufDec *hdecod) // io: (allocated by caller) - // decoding table [HUF_DECSIZE] +static void hufClearDecTable(HufDec *hdecod) // io: (allocated by caller) +// decoding table [HUF_DECSIZE] { for (int i = 0; i < HUF_DECSIZE; i++) { hdecod[i].len = 0; @@ -7960,16 +8372,16 @@ void hufClearDecTable(HufDec *hdecod) // io: (allocated by caller) // // Build a decoding hash table based on the encoding table hcode: -// - short codes (<= HUF_DECBITS) are resolved with a single table access; -// - long code entry allocations are not optimized, because long codes are -// unfrequent; -// - decoding tables are used by hufDecode(); +// - short codes (<= HUF_DECBITS) are resolved with a single table access; +// - long code entry allocations are not optimized, because long codes are +// unfrequent; +// - decoding tables are used by hufDecode(); // -bool hufBuildDecTable(const long long *hcode, // i : encoding table - int im, // i : min index in hcode - int iM, // i : max index in hcode - HufDec *hdecod) // o: (allocated by caller) +static bool hufBuildDecTable(const long long *hcode, // i : encoding table + int im, // i : min index in hcode + int iM, // i : max index in hcode + HufDec *hdecod) // o: (allocated by caller) // decoding table [HUF_DECSIZE] { // @@ -8015,8 +8427,7 @@ bool hufBuildDecTable(const long long *hcode, // i : encoding table int *p = pl->p; pl->p = new int[pl->lit]; - for (int i = 0; i < pl->lit - 1; ++i) - pl->p[i] = p[i]; + for (int i = 0; i < pl->lit - 1; ++i) pl->p[i] = p[i]; delete[] p; } else { @@ -8031,7 +8442,7 @@ bool hufBuildDecTable(const long long *hcode, // i : encoding table HufDec *pl = hdecod + (c << (HUF_DECBITS - l)); - for (long long i = (long long)1 << (HUF_DECBITS - l); i > 0; i--, pl++) { + for (long long i = 1ULL << (HUF_DECBITS - l); i > 0; i--, pl++) { if (pl->len || pl->p) { // // Error: a short code or a long code has @@ -8055,7 +8466,7 @@ bool hufBuildDecTable(const long long *hcode, // i : encoding table // Free the long code entries of a decoding table built by hufBuildDecTable() // -void hufFreeDecTable(HufDec *hdecod) // io: Decoding table +static void hufFreeDecTable(HufDec *hdecod) // io: Decoding table { for (int i = 0; i < HUF_DECSIZE; i++) { if (hdecod[i].p) { @@ -8069,7 +8480,6 @@ void hufFreeDecTable(HufDec *hdecod) // io: Decoding table // ENCODING // -#if 0 // @todo inline void outputCode(long long code, long long &c, int &lc, char *&out) { outputBits(hufLength(code), hufCode(code), c, lc, out); } @@ -8088,8 +8498,7 @@ inline void sendCode(long long sCode, int runCount, long long runCode, outputCode(runCode, c, lc, out); outputBits(8, runCount, c, lc, out); } else { - while (runCount-- >= 0) - outputCode(sCode, c, lc, out); + while (runCount-- >= 0) outputCode(sCode, c, lc, out); } } @@ -8097,16 +8506,16 @@ inline void sendCode(long long sCode, int runCount, long long runCode, // Encode (compress) ni values based on the Huffman encoding table hcode: // -int hufEncode // return: output size (in bits) - (const long long *hcode, // i : encoding table - const unsigned short *in, // i : uncompressed input buffer - const int ni, // i : input buffer size (in bytes) - int rlc, // i : rl code - char *out) // o: compressed output buffer +static int hufEncode // return: output size (in bits) + (const long long *hcode, // i : encoding table + const unsigned short *in, // i : uncompressed input buffer + const int ni, // i : input buffer size (in bytes) + int rlc, // i : rl code + char *out) // o: compressed output buffer { char *outStart = out; - long long c = 0; // bits not yet written to out - int lc = 0; // number of valid bits in c (LSB) + long long c = 0; // bits not yet written to out + int lc = 0; // number of valid bits in c (LSB) int s = in[0]; int cs = 0; @@ -8135,12 +8544,10 @@ int hufEncode // return: output size (in bits) sendCode(hcode[s], cs, hcode[rlc], c, lc, out); - if (lc) - *out = (c << (8 - lc)) & 0xff; + if (lc) *out = (c << (8 - lc)) & 0xff; return (out - outStart) * 8 + lc; } -#endif // // DECODING @@ -8152,53 +8559,50 @@ int hufEncode // return: output size (in bits) // instead of "inline" functions. // -#define getChar(c, lc, in) \ - { \ - c = (c << 8) | *(unsigned char *)(in++); \ - lc += 8; \ +#define getChar(c, lc, in) \ + { \ + c = (c << 8) | *(unsigned char *)(in++); \ + lc += 8; \ } -#define getCode(po, rlc, c, lc, in, out, oe) \ - { \ - if (po == rlc) { \ - if (lc < 8) \ - getChar(c, lc, in); \ - \ - lc -= 8; \ - \ - unsigned char cs = (c >> lc); \ - \ - if (out + cs > oe) \ - return false; \ - \ - unsigned short s = out[-1]; \ - \ - while (cs-- > 0) \ - *out++ = s; \ - } else if (out < oe) { \ - *out++ = po; \ - } else { \ - return false; \ - } \ +#define getCode(po, rlc, c, lc, in, out, oe) \ + { \ + if (po == rlc) { \ + if (lc < 8) getChar(c, lc, in); \ + \ + lc -= 8; \ + \ + unsigned char cs = (c >> lc); \ + \ + if (out + cs > oe) return false; \ + \ + unsigned short s = out[-1]; \ + \ + while (cs-- > 0) *out++ = s; \ + } else if (out < oe) { \ + *out++ = po; \ + } else { \ + return false; \ + } \ } // // Decode (uncompress) ni bits based on encoding & decoding tables: // -bool hufDecode(const long long *hcode, // i : encoding table - const HufDec *hdecod, // i : decoding table - const char *in, // i : compressed input buffer - int ni, // i : input size (in bits) - int rlc, // i : run-length code - int no, // i : expected output size (in bytes) - unsigned short *out) // o: uncompressed output buffer +static bool hufDecode(const long long *hcode, // i : encoding table + const HufDec *hdecod, // i : decoding table + const char *in, // i : compressed input buffer + int ni, // i : input size (in bits) + int rlc, // i : run-length code + int no, // i : expected output size (in bytes) + unsigned short *out) // o: uncompressed output buffer { long long c = 0; int lc = 0; unsigned short *outb = out; unsigned short *oe = out + no; - const char *ie = in + (ni + 7) / 8; // input byte size + const char *ie = in + (ni + 7) / 8; // input byte size // // Loop on input bytes @@ -8236,7 +8640,7 @@ bool hufDecode(const long long *hcode, // i : encoding table for (j = 0; j < pl.lit; j++) { int l = hufLength(hcode[pl.p[j]]); - while (lc < l && in < ie) // get more bits + while (lc < l && in < ie) // get more bits getChar(c, lc, in); if (lc >= l) { @@ -8289,17 +8693,14 @@ bool hufDecode(const long long *hcode, // i : encoding table return true; } -#if 0 // @todo -void countFrequencies(long long freq[HUF_ENCSIZE], - const unsigned short data[/*n*/], int n) { - for (int i = 0; i < HUF_ENCSIZE; ++i) - freq[i] = 0; +static void countFrequencies(long long freq[HUF_ENCSIZE], + const unsigned short data[/*n*/], int n) { + for (int i = 0; i < HUF_ENCSIZE; ++i) freq[i] = 0; - for (int i = 0; i < n; ++i) - ++freq[data[i]]; + for (int i = 0; i < n; ++i) ++freq[data[i]]; } -void writeUInt(char buf[4], unsigned int i) { +static void writeUInt(char buf[4], unsigned int i) { unsigned char *b = (unsigned char *)buf; b[0] = i; @@ -8307,9 +8708,8 @@ void writeUInt(char buf[4], unsigned int i) { b[2] = i >> 16; b[3] = i >> 24; } -#endif -unsigned int readUInt(const char buf[4]) { +static unsigned int readUInt(const char buf[4]) { const unsigned char *b = (const unsigned char *)buf; return (b[0] & 0x000000ff) | ((b[1] << 8) & 0x0000ff00) | @@ -8320,10 +8720,9 @@ unsigned int readUInt(const char buf[4]) { // EXTERNAL INTERFACE // -#if 0 // @todo -int hufCompress(const unsigned short raw[], int nRaw, char compressed[]) { - if (nRaw == 0) - return 0; +static int hufCompress(const unsigned short raw[], int nRaw, + char compressed[]) { + if (nRaw == 0) return 0; long long freq[HUF_ENCSIZE]; @@ -8340,23 +8739,21 @@ int hufCompress(const unsigned short raw[], int nRaw, char compressed[]) { char *dataStart = tableEnd; int nBits = hufEncode(freq, raw, nRaw, iM, dataStart); - int dataLength = (nBits + 7) / 8; + int data_length = (nBits + 7) / 8; writeUInt(compressed, im); writeUInt(compressed + 4, iM); writeUInt(compressed + 8, tableLength); writeUInt(compressed + 12, nBits); - writeUInt(compressed + 16, 0); // room for future extensions + writeUInt(compressed + 16, 0); // room for future extensions - return dataStart + dataLength - compressed; + return dataStart + data_length - compressed; } -#endif -bool hufUncompress(const char compressed[], int nCompressed, - unsigned short raw[], int nRaw) { +static bool hufUncompress(const char compressed[], int nCompressed, + unsigned short raw[], int nRaw) { if (nCompressed == 0) { - if (nRaw != 0) - return false; + if (nRaw != 0) return false; return false; } @@ -8366,8 +8763,7 @@ bool hufUncompress(const char compressed[], int nCompressed, // int tableLength = readUInt (compressed + 8); int nBits = readUInt(compressed + 12); - if (im < 0 || im >= HUF_ENCSIZE || iM < 0 || iM >= HUF_ENCSIZE) - return false; + if (im < 0 || im >= HUF_ENCSIZE || iM < 0 || iM >= HUF_ENCSIZE) return false; const char *ptr = compressed + 20; @@ -8419,35 +8815,30 @@ bool hufUncompress(const char compressed[], int nCompressed, const int USHORT_RANGE = (1 << 16); const int BITMAP_SIZE = (USHORT_RANGE >> 3); -#if 0 // @todo +static void bitmapFromData(const unsigned short data[/*nData*/], int nData, + unsigned char bitmap[BITMAP_SIZE], + unsigned short &minNonZero, + unsigned short &maxNonZero) { + for (int i = 0; i < BITMAP_SIZE; ++i) bitmap[i] = 0; -void bitmapFromData(const unsigned short data[/*nData*/], int nData, - unsigned char bitmap[BITMAP_SIZE], - unsigned short &minNonZero, unsigned short &maxNonZero) { - for (int i = 0; i < BITMAP_SIZE; ++i) - bitmap[i] = 0; + for (int i = 0; i < nData; ++i) bitmap[data[i] >> 3] |= (1 << (data[i] & 7)); - for (int i = 0; i < nData; ++i) - bitmap[data[i] >> 3] |= (1 << (data[i] & 7)); - - bitmap[0] &= ~1; // zero is not explicitly stored in - // the bitmap; we assume that the - // data always contain zeroes + bitmap[0] &= ~1; // zero is not explicitly stored in + // the bitmap; we assume that the + // data always contain zeroes minNonZero = BITMAP_SIZE - 1; maxNonZero = 0; for (int i = 0; i < BITMAP_SIZE; ++i) { if (bitmap[i]) { - if (minNonZero > i) - minNonZero = i; - if (maxNonZero < i) - maxNonZero = i; + if (minNonZero > i) minNonZero = i; + if (maxNonZero < i) maxNonZero = i; } } } -unsigned short forwardLutFromBitmap(const unsigned char bitmap[BITMAP_SIZE], - unsigned short lut[USHORT_RANGE]) { +static unsigned short forwardLutFromBitmap( + const unsigned char bitmap[BITMAP_SIZE], unsigned short lut[USHORT_RANGE]) { int k = 0; for (int i = 0; i < USHORT_RANGE; ++i) { @@ -8457,53 +8848,94 @@ unsigned short forwardLutFromBitmap(const unsigned char bitmap[BITMAP_SIZE], lut[i] = 0; } - return k - 1; // maximum value stored in lut[], -} // i.e. number of ones in bitmap minus 1 -#endif + return k - 1; // maximum value stored in lut[], +} // i.e. number of ones in bitmap minus 1 -unsigned short reverseLutFromBitmap(const unsigned char bitmap[BITMAP_SIZE], - unsigned short lut[USHORT_RANGE]) { +static unsigned short reverseLutFromBitmap( + const unsigned char bitmap[BITMAP_SIZE], unsigned short lut[USHORT_RANGE]) { int k = 0; for (int i = 0; i < USHORT_RANGE; ++i) { - if ((i == 0) || (bitmap[i >> 3] & (1 << (i & 7)))) - lut[k++] = i; + if ((i == 0) || (bitmap[i >> 3] & (1 << (i & 7)))) lut[k++] = i; } int n = k - 1; - while (k < USHORT_RANGE) - lut[k++] = 0; + while (k < USHORT_RANGE) lut[k++] = 0; - return n; // maximum k where lut[k] is non-zero, -} // i.e. number of ones in bitmap minus 1 + return n; // maximum k where lut[k] is non-zero, +} // i.e. number of ones in bitmap minus 1 -void applyLut(const unsigned short lut[USHORT_RANGE], - unsigned short data[/*nData*/], int nData) { - for (int i = 0; i < nData; ++i) - data[i] = lut[data[i]]; +static void applyLut(const unsigned short lut[USHORT_RANGE], + unsigned short data[/*nData*/], int nData) { + for (int i = 0; i < nData; ++i) data[i] = lut[data[i]]; } -#if 0 // @todo -bool CompressPiz(unsigned char *outPtr, unsigned int &outSize) { +#ifdef __clang__ +#pragma clang diagnostic pop +#endif // __clang__ + +static bool CompressPiz(unsigned char *outPtr, unsigned int &outSize, + const unsigned char *inPtr, size_t inSize, + const std::vector &channelInfo, + int data_width, int num_lines) { unsigned char bitmap[BITMAP_SIZE]; unsigned short minNonZero; unsigned short maxNonZero; - if (IsBigEndian()) { - // @todo { PIZ compression on BigEndian architecture. } - assert(0); - return false; +#if !MINIZ_LITTLE_ENDIAN + // @todo { PIZ compression on BigEndian architecture. } + assert(0); + return false; +#endif + + // Assume `inSize` is multiple of 2 or 4. + std::vector tmpBuffer(inSize / sizeof(unsigned short)); + + std::vector channelData(channelInfo.size()); + unsigned short *tmpBufferEnd = &tmpBuffer.at(0); + + for (size_t c = 0; c < channelData.size(); c++) { + PIZChannelData &cd = channelData[c]; + + cd.start = tmpBufferEnd; + cd.end = cd.start; + + cd.nx = data_width; + cd.ny = num_lines; + // cd.ys = c.channel().ySampling; + + size_t pixelSize = sizeof(int); // UINT and FLOAT + if (channelInfo[c].pixel_type == TINYEXR_PIXELTYPE_HALF) { + pixelSize = sizeof(short); + } + + cd.size = static_cast(pixelSize / sizeof(short)); + + tmpBufferEnd += cd.nx * cd.ny * cd.size; } - std::vector tmpBuffer; - int nData = tmpBuffer.size(); + const unsigned char *ptr = inPtr; + for (int y = 0; y < num_lines; ++y) { + for (size_t i = 0; i < channelData.size(); ++i) { + PIZChannelData &cd = channelData[i]; - bitmapFromData(&tmpBuffer.at(0), nData, bitmap, minNonZero, maxNonZero); + // if (modp (y, cd.ys) != 0) + // continue; + + size_t n = static_cast(cd.nx * cd.size); + memcpy(cd.end, ptr, n * sizeof(unsigned short)); + ptr += n * sizeof(unsigned short); + cd.end += n; + } + } + + bitmapFromData(&tmpBuffer.at(0), static_cast(tmpBuffer.size()), bitmap, + minNonZero, maxNonZero); unsigned short lut[USHORT_RANGE]; - //unsigned short maxValue = forwardLutFromBitmap(bitmap, lut); - applyLut(lut, &tmpBuffer.at(0), nData); + unsigned short maxValue = forwardLutFromBitmap(bitmap, lut); + applyLut(lut, &tmpBuffer.at(0), static_cast(tmpBuffer.size())); // // Store range compression info in _outBuffer @@ -8517,62 +8949,58 @@ bool CompressPiz(unsigned char *outPtr, unsigned int &outSize) { buf += sizeof(unsigned short); if (minNonZero <= maxNonZero) { - memcpy(buf, (char *)&bitmap[0] + minNonZero, maxNonZero - minNonZero + 1); + memcpy(buf, reinterpret_cast(&bitmap[0] + minNonZero), + maxNonZero - minNonZero + 1); buf += maxNonZero - minNonZero + 1; } -#if 0 // @todo - // - // Apply wavelet encoding - // + // + // Apply wavelet encoding + // - for (int i = 0; i < channels; ++i) - { - ChannelData &cd = _channelData[i]; + for (size_t i = 0; i < channelData.size(); ++i) { + PIZChannelData &cd = channelData[i]; - for (int j = 0; j < cd.size; ++j) - { - wav2Encode (cd.start + j, - cd.nx, cd.size, - cd.ny, cd.nx * cd.size, - maxValue); - } + for (int j = 0; j < cd.size; ++j) { + wav2Encode(cd.start + j, cd.nx, cd.size, cd.ny, cd.nx * cd.size, + maxValue); } + } - // - // Apply Huffman encoding; append the result to _outBuffer - // + // + // Apply Huffman encoding; append the result to _outBuffer + // - char *lengthPtr = buf; - int zero = 0; - memcpy(buf, &zero, sizeof(int)); buf += sizeof(int); + // length header(4byte), then huff data. Initialize length header with zero, + // then later fill it by `length`. + char *lengthPtr = buf; + int zero = 0; + memcpy(buf, &zero, sizeof(int)); + buf += sizeof(int); - int length = hufCompress (_tmpBuffer, tmpBufferEnd - _tmpBuffer, buf); - memcpy(lengthPtr, tmpBuffer, length); - //Xdr::write (lengthPtr, length); - - outPtr = _outBuffer; - return buf - _outBuffer + length; -#endif - assert(0); + int length = + hufCompress(&tmpBuffer.at(0), static_cast(tmpBuffer.size()), buf); + memcpy(lengthPtr, &length, sizeof(int)); + outSize = static_cast( + (reinterpret_cast(buf) - outPtr) + + static_cast(length)); return true; } -#endif -bool DecompressPiz(unsigned char *outPtr, unsigned int &, - const unsigned char *inPtr, size_t tmpBufSize, - const std::vector &channelInfo, int dataWidth, - int numLines) { +static bool DecompressPiz(unsigned char *outPtr, const unsigned char *inPtr, + size_t tmpBufSize, int num_channels, + const EXRChannelInfo *channels, int data_width, + int num_lines) { unsigned char bitmap[BITMAP_SIZE]; unsigned short minNonZero; unsigned short maxNonZero; - if (IsBigEndian()) { - // @todo { PIZ compression on BigEndian architecture. } - assert(0); - return false; - } +#if !MINIZ_LITTLE_ENDIAN + // @todo { PIZ compression on BigEndian architecture. } + assert(0); + return false; +#endif memset(bitmap, 0, BITMAP_SIZE); @@ -8586,7 +9014,8 @@ bool DecompressPiz(unsigned char *outPtr, unsigned int &, } if (minNonZero <= maxNonZero) { - memcpy((char *)&bitmap[0] + minNonZero, ptr, maxNonZero - minNonZero + 1); + memcpy(reinterpret_cast(&bitmap[0] + minNonZero), ptr, + maxNonZero - minNonZero + 1); ptr += maxNonZero - minNonZero + 1; } @@ -8605,30 +9034,30 @@ bool DecompressPiz(unsigned char *outPtr, unsigned int &, std::vector tmpBuffer(tmpBufSize); hufUncompress(reinterpret_cast(ptr), length, &tmpBuffer.at(0), - tmpBufSize); + static_cast(tmpBufSize)); // // Wavelet decoding // - std::vector channelData(channelInfo.size()); + std::vector channelData(static_cast(num_channels)); unsigned short *tmpBufferEnd = &tmpBuffer.at(0); - for (size_t i = 0; i < channelInfo.size(); ++i) { - const ChannelInfo &chan = channelInfo[i]; + for (size_t i = 0; i < static_cast(num_channels); ++i) { + const EXRChannelInfo &chan = channels[i]; - int pixelSize = sizeof(int); // UINT and FLOAT - if (chan.pixelType == TINYEXR_PIXELTYPE_HALF) { + size_t pixelSize = sizeof(int); // UINT and FLOAT + if (chan.pixel_type == TINYEXR_PIXELTYPE_HALF) { pixelSize = sizeof(short); } channelData[i].start = tmpBufferEnd; channelData[i].end = channelData[i].start; - channelData[i].nx = dataWidth; - channelData[i].ny = numLines; + channelData[i].nx = data_width; + channelData[i].ny = num_lines; // channelData[i].ys = 1; - channelData[i].size = pixelSize / sizeof(short); + channelData[i].size = static_cast(pixelSize / sizeof(short)); tmpBufferEnd += channelData[i].nx * channelData[i].ny * channelData[i].size; } @@ -8646,19 +9075,17 @@ bool DecompressPiz(unsigned char *outPtr, unsigned int &, // Expand the pixel data to their original range // - applyLut(lut, &tmpBuffer.at(0), tmpBufSize); + applyLut(lut, &tmpBuffer.at(0), static_cast(tmpBufSize)); - // @todo { Xdr } - - for (int y = 0; y < numLines; y++) { + for (int y = 0; y < num_lines; y++) { for (size_t i = 0; i < channelData.size(); ++i) { PIZChannelData &cd = channelData[i]; // if (modp (y, cd.ys) != 0) // continue; - int n = cd.nx * cd.size; - memcpy(outPtr, cd.end, n * sizeof(unsigned short)); + size_t n = static_cast(cd.nx * cd.size); + memcpy(outPtr, cd.end, static_cast(n * sizeof(unsigned short))); outPtr += n * sizeof(unsigned short); cd.end += n; } @@ -8666,42 +9093,1500 @@ bool DecompressPiz(unsigned char *outPtr, unsigned int &, return true; } +#endif // TINYEXR_USE_PIZ + +#if TINYEXR_USE_ZFP +struct ZFPCompressionParam { + double rate; + int precision; + double tolerance; + int type; // TINYEXR_ZFP_COMPRESSIONTYPE_* + + ZFPCompressionParam() { + type = TINYEXR_ZFP_COMPRESSIONTYPE_RATE; + rate = 2.0; + precision = 0; + tolerance = 0.0f; + } +}; + +bool FindZFPCompressionParam(ZFPCompressionParam *param, + const EXRAttribute *attributes, + int num_attributes) { + bool foundType = false; + + for (int i = 0; i < num_attributes; i++) { + if ((strcmp(attributes[i].name, "zfpCompressionType") == 0) && + (attributes[i].size == 1)) { + param->type = static_cast(attributes[i].value[0]); + + foundType = true; + } + } + + if (!foundType) { + return false; + } + + if (param->type == TINYEXR_ZFP_COMPRESSIONTYPE_RATE) { + for (int i = 0; i < num_attributes; i++) { + if ((strcmp(attributes[i].name, "zfpCompressionRate") == 0) && + (attributes[i].size == 8)) { + param->rate = *(reinterpret_cast(attributes[i].value)); + return true; + } + } + } else if (param->type == TINYEXR_ZFP_COMPRESSIONTYPE_PRECISION) { + for (int i = 0; i < num_attributes; i++) { + if ((strcmp(attributes[i].name, "zfpCompressionPrecision") == 0) && + (attributes[i].size == 4)) { + param->rate = *(reinterpret_cast(attributes[i].value)); + return true; + } + } + } else if (param->type == TINYEXR_ZFP_COMPRESSIONTYPE_ACCURACY) { + for (int i = 0; i < num_attributes; i++) { + if ((strcmp(attributes[i].name, "zfpCompressionTolerance") == 0) && + (attributes[i].size == 8)) { + param->tolerance = *(reinterpret_cast(attributes[i].value)); + return true; + } + } + } else { + assert(0); + } + + return false; +} + +// Assume pixel format is FLOAT for all channels. +static bool DecompressZfp(float *dst, int dst_width, int dst_num_lines, + int num_channels, const unsigned char *src, + unsigned long src_size, + const ZFPCompressionParam ¶m) { + size_t uncompressed_size = dst_width * dst_num_lines * num_channels; + + zfp_stream *zfp = NULL; + zfp_field *field = NULL; + + assert((dst_width % 4) == 0); + assert((dst_num_lines % 4) == 0); + + if ((dst_width & 3U) || (dst_num_lines & 3U)) { + return false; + } + + field = + zfp_field_2d(reinterpret_cast(const_cast(src)), + zfp_type_float, dst_width, dst_num_lines * num_channels); + zfp = zfp_stream_open(NULL); + + if (param.type == TINYEXR_ZFP_COMPRESSIONTYPE_RATE) { + zfp_stream_set_rate(zfp, param.rate, zfp_type_float, /* dimention */ 2, + /* write random access */ 0); + } else if (param.type == TINYEXR_ZFP_COMPRESSIONTYPE_PRECISION) { + zfp_stream_set_precision(zfp, param.precision, zfp_type_float); + } else if (param.type == TINYEXR_ZFP_COMPRESSIONTYPE_ACCURACY) { + zfp_stream_set_accuracy(zfp, param.tolerance, zfp_type_float); + } else { + assert(0); + } + + size_t buf_size = zfp_stream_maximum_size(zfp, field); + std::vector buf(buf_size); + memcpy(&buf.at(0), src, src_size); + + bitstream *stream = stream_open(&buf.at(0), buf_size); + zfp_stream_set_bit_stream(zfp, stream); + zfp_stream_rewind(zfp); + + size_t image_size = dst_width * dst_num_lines; + + for (int c = 0; c < num_channels; c++) { + // decompress 4x4 pixel block. + for (int y = 0; y < dst_num_lines; y += 4) { + for (int x = 0; x < dst_width; x += 4) { + float fblock[16]; + zfp_decode_block_float_2(zfp, fblock); + for (int j = 0; j < 4; j++) { + for (int i = 0; i < 4; i++) { + dst[c * image_size + ((y + j) * dst_width + (x + i))] = + fblock[j * 4 + i]; + } + } + } + } + } + + zfp_field_free(field); + zfp_stream_close(zfp); + stream_close(stream); + + return true; +} + +// Assume pixel format is FLOAT for all channels. +bool CompressZfp(std::vector *outBuf, unsigned int *outSize, + const float *inPtr, int width, int num_lines, int num_channels, + const ZFPCompressionParam ¶m) { + zfp_stream *zfp = NULL; + zfp_field *field = NULL; + + assert((width % 4) == 0); + assert((num_lines % 4) == 0); + + if ((width & 3U) || (num_lines & 3U)) { + return false; + } + + // create input array. + field = zfp_field_2d(reinterpret_cast(const_cast(inPtr)), + zfp_type_float, width, num_lines * num_channels); + + zfp = zfp_stream_open(NULL); + + if (param.type == TINYEXR_ZFP_COMPRESSIONTYPE_RATE) { + zfp_stream_set_rate(zfp, param.rate, zfp_type_float, 2, 0); + } else if (param.type == TINYEXR_ZFP_COMPRESSIONTYPE_PRECISION) { + zfp_stream_set_precision(zfp, param.precision, zfp_type_float); + } else if (param.type == TINYEXR_ZFP_COMPRESSIONTYPE_ACCURACY) { + zfp_stream_set_accuracy(zfp, param.tolerance, zfp_type_float); + } else { + assert(0); + } + + size_t buf_size = zfp_stream_maximum_size(zfp, field); + + outBuf->resize(buf_size); + + bitstream *stream = stream_open(&outBuf->at(0), buf_size); + zfp_stream_set_bit_stream(zfp, stream); + zfp_field_free(field); + + size_t image_size = width * num_lines; + + for (int c = 0; c < num_channels; c++) { + // compress 4x4 pixel block. + for (int y = 0; y < num_lines; y += 4) { + for (int x = 0; x < width; x += 4) { + float fblock[16]; + for (int j = 0; j < 4; j++) { + for (int i = 0; i < 4; i++) { + fblock[j * 4 + i] = + inPtr[c * image_size + ((y + j) * width + (x + i))]; + } + } + zfp_encode_block_float_2(zfp, fblock); + } + } + } + + zfp_stream_flush(zfp); + (*outSize) = zfp_stream_compressed_size(zfp); + + zfp_stream_close(zfp); + + return true; +} + +#endif + // // ----------------------------------------------------------------- // -} // namespace +static void DecodePixelData(/* out */ unsigned char **out_images, + const int *requested_pixel_types, + const unsigned char *data_ptr, size_t data_len, + int compression_type, int line_order, int width, + int height, int x_stride, int y, int line_no, + int num_lines, size_t pixel_data_size, + size_t num_attributes, + const EXRAttribute *attributes, size_t num_channels, + const EXRChannelInfo *channels, + const std::vector &channel_offset_list) { + if (compression_type == TINYEXR_COMPRESSIONTYPE_PIZ) { // PIZ +#if TINYEXR_USE_PIZ + // Allocate original data size. + std::vector outBuf(static_cast( + static_cast(width * num_lines) * pixel_data_size)); + size_t tmpBufLen = static_cast( + static_cast(width * num_lines) * pixel_data_size); + + bool ret = tinyexr::DecompressPiz( + reinterpret_cast(&outBuf.at(0)), data_ptr, tmpBufLen, + static_cast(num_channels), channels, width, num_lines); + + assert(ret); + (void)ret; + + // For PIZ_COMPRESSION: + // pixel sample data for channel 0 for scanline 0 + // pixel sample data for channel 1 for scanline 0 + // pixel sample data for channel ... for scanline 0 + // pixel sample data for channel n for scanline 0 + // pixel sample data for channel 0 for scanline 1 + // pixel sample data for channel 1 for scanline 1 + // pixel sample data for channel ... for scanline 1 + // pixel sample data for channel n for scanline 1 + // ... + for (size_t c = 0; c < static_cast(num_channels); c++) { + if (channels[c].pixel_type == TINYEXR_PIXELTYPE_HALF) { + for (size_t v = 0; v < static_cast(num_lines); v++) { + const unsigned short *line_ptr = reinterpret_cast( + &outBuf.at(v * pixel_data_size * static_cast(width) + + channel_offset_list[c] * static_cast(width))); + for (size_t u = 0; u < static_cast(width); u++) { + FP16 hf; + + hf.u = line_ptr[u]; + + tinyexr::swap2(reinterpret_cast(&hf.u)); + + if (requested_pixel_types[c] == TINYEXR_PIXELTYPE_HALF) { + unsigned short *image = + reinterpret_cast(out_images)[c]; + if (line_order == 0) { + image += (static_cast(line_no) + v) * + static_cast(x_stride) + + u; + } else { + image += static_cast( + (height - 1 - (line_no + static_cast(v)))) * + static_cast(x_stride) + + u; + } + *image = hf.u; + } else { // HALF -> FLOAT + FP32 f32 = half_to_float(hf); + float *image = reinterpret_cast(out_images)[c]; + if (line_order == 0) { + image += (static_cast(line_no) + v) * + static_cast(x_stride) + + u; + } else { + image += static_cast( + (height - 1 - (line_no + static_cast(v)))) * + static_cast(x_stride) + + u; + } + *image = f32.f; + } + } + } + } else if (channels[c].pixel_type == TINYEXR_PIXELTYPE_UINT) { + assert(requested_pixel_types[c] == TINYEXR_PIXELTYPE_UINT); + + for (size_t v = 0; v < static_cast(num_lines); v++) { + const unsigned int *line_ptr = reinterpret_cast( + &outBuf.at(v * pixel_data_size * static_cast(width) + + channel_offset_list[c] * static_cast(width))); + for (size_t u = 0; u < static_cast(width); u++) { + unsigned int val = line_ptr[u]; + + tinyexr::swap4(&val); + + unsigned int *image = + reinterpret_cast(out_images)[c]; + if (line_order == 0) { + image += (static_cast(line_no) + v) * + static_cast(x_stride) + + u; + } else { + image += static_cast( + (height - 1 - (line_no + static_cast(v)))) * + static_cast(x_stride) + + u; + } + *image = val; + } + } + } else if (channels[c].pixel_type == TINYEXR_PIXELTYPE_FLOAT) { + assert(requested_pixel_types[c] == TINYEXR_PIXELTYPE_FLOAT); + for (size_t v = 0; v < static_cast(num_lines); v++) { + const float *line_ptr = reinterpret_cast(&outBuf.at( + v * pixel_data_size * static_cast(x_stride) + + channel_offset_list[c] * static_cast(x_stride))); + for (size_t u = 0; u < static_cast(width); u++) { + float val = line_ptr[u]; + + tinyexr::swap4(reinterpret_cast(&val)); + + float *image = reinterpret_cast(out_images)[c]; + if (line_order == 0) { + image += (static_cast(line_no) + v) * + static_cast(x_stride) + + u; + } else { + image += static_cast( + (height - 1 - (line_no + static_cast(v)))) * + static_cast(x_stride) + + u; + } + *image = val; + } + } + } else { + assert(0); + } + } +#else + assert(0 && "PIZ is enabled in this build"); +#endif + + } else if (compression_type == TINYEXR_COMPRESSIONTYPE_ZIPS || + compression_type == TINYEXR_COMPRESSIONTYPE_ZIP) { + // Allocate original data size. + std::vector outBuf(static_cast(width) * + static_cast(num_lines) * + pixel_data_size); + + unsigned long dstLen = outBuf.size(); + assert(dstLen > 0); + tinyexr::DecompressZip(reinterpret_cast(&outBuf.at(0)), + &dstLen, data_ptr, + static_cast(data_len)); + + // For ZIP_COMPRESSION: + // pixel sample data for channel 0 for scanline 0 + // pixel sample data for channel 1 for scanline 0 + // pixel sample data for channel ... for scanline 0 + // pixel sample data for channel n for scanline 0 + // pixel sample data for channel 0 for scanline 1 + // pixel sample data for channel 1 for scanline 1 + // pixel sample data for channel ... for scanline 1 + // pixel sample data for channel n for scanline 1 + // ... + for (size_t c = 0; c < static_cast(num_channels); c++) { + if (channels[c].pixel_type == TINYEXR_PIXELTYPE_HALF) { + for (size_t v = 0; v < static_cast(num_lines); v++) { + const unsigned short *line_ptr = reinterpret_cast( + &outBuf.at(v * static_cast(pixel_data_size) * + static_cast(width) + + channel_offset_list[c] * static_cast(width))); + for (size_t u = 0; u < static_cast(width); u++) { + tinyexr::FP16 hf; + + hf.u = line_ptr[u]; + + tinyexr::swap2(reinterpret_cast(&hf.u)); + + if (requested_pixel_types[c] == TINYEXR_PIXELTYPE_HALF) { + unsigned short *image = + reinterpret_cast(out_images)[c]; + if (line_order == 0) { + image += (static_cast(line_no) + v) * + static_cast(x_stride) + + u; + } else { + image += (static_cast(height) - 1U - + (static_cast(line_no) + v)) * + static_cast(x_stride) + + u; + } + *image = hf.u; + } else { // HALF -> FLOAT + tinyexr::FP32 f32 = half_to_float(hf); + float *image = reinterpret_cast(out_images)[c]; + if (line_order == 0) { + image += (static_cast(line_no) + v) * + static_cast(x_stride) + + u; + } else { + image += (static_cast(height) - 1U - + (static_cast(line_no) + v)) * + static_cast(x_stride) + + u; + } + *image = f32.f; + } + } + } + } else if (channels[c].pixel_type == TINYEXR_PIXELTYPE_UINT) { + assert(requested_pixel_types[c] == TINYEXR_PIXELTYPE_UINT); + + for (size_t v = 0; v < static_cast(num_lines); v++) { + const unsigned int *line_ptr = reinterpret_cast( + &outBuf.at(v * pixel_data_size * static_cast(width) + + channel_offset_list[c] * static_cast(width))); + for (size_t u = 0; u < static_cast(width); u++) { + unsigned int val = line_ptr[u]; + + tinyexr::swap4(&val); + + unsigned int *image = + reinterpret_cast(out_images)[c]; + if (line_order == 0) { + image += (static_cast(line_no) + v) * + static_cast(x_stride) + + u; + } else { + image += (static_cast(height) - 1U - + (static_cast(line_no) + v)) * + static_cast(x_stride) + + u; + } + *image = val; + } + } + } else if (channels[c].pixel_type == TINYEXR_PIXELTYPE_FLOAT) { + assert(requested_pixel_types[c] == TINYEXR_PIXELTYPE_FLOAT); + for (size_t v = 0; v < static_cast(num_lines); v++) { + const float *line_ptr = reinterpret_cast( + &outBuf.at(v * pixel_data_size * static_cast(width) + + channel_offset_list[c] * static_cast(width))); + for (size_t u = 0; u < static_cast(width); u++) { + float val = line_ptr[u]; + + tinyexr::swap4(reinterpret_cast(&val)); + + float *image = reinterpret_cast(out_images)[c]; + if (line_order == 0) { + image += (static_cast(line_no) + v) * + static_cast(x_stride) + + u; + } else { + image += (static_cast(height) - 1U - + (static_cast(line_no) + v)) * + static_cast(x_stride) + + u; + } + *image = val; + } + } + } else { + assert(0); + } + } + } else if (compression_type == TINYEXR_COMPRESSIONTYPE_RLE) { + // Allocate original data size. + std::vector outBuf(static_cast(width) * + static_cast(num_lines) * + pixel_data_size); + + unsigned long dstLen = outBuf.size(); + assert(dstLen > 0); + tinyexr::DecompressRle(reinterpret_cast(&outBuf.at(0)), + dstLen, data_ptr, + static_cast(data_len)); + + // For RLE_COMPRESSION: + // pixel sample data for channel 0 for scanline 0 + // pixel sample data for channel 1 for scanline 0 + // pixel sample data for channel ... for scanline 0 + // pixel sample data for channel n for scanline 0 + // pixel sample data for channel 0 for scanline 1 + // pixel sample data for channel 1 for scanline 1 + // pixel sample data for channel ... for scanline 1 + // pixel sample data for channel n for scanline 1 + // ... + for (size_t c = 0; c < static_cast(num_channels); c++) { + if (channels[c].pixel_type == TINYEXR_PIXELTYPE_HALF) { + for (size_t v = 0; v < static_cast(num_lines); v++) { + const unsigned short *line_ptr = reinterpret_cast( + &outBuf.at(v * static_cast(pixel_data_size) * + static_cast(width) + + channel_offset_list[c] * static_cast(width))); + for (size_t u = 0; u < static_cast(width); u++) { + tinyexr::FP16 hf; + + hf.u = line_ptr[u]; + + tinyexr::swap2(reinterpret_cast(&hf.u)); + + if (requested_pixel_types[c] == TINYEXR_PIXELTYPE_HALF) { + unsigned short *image = + reinterpret_cast(out_images)[c]; + if (line_order == 0) { + image += (static_cast(line_no) + v) * + static_cast(x_stride) + + u; + } else { + image += (static_cast(height) - 1U - + (static_cast(line_no) + v)) * + static_cast(x_stride) + + u; + } + *image = hf.u; + } else { // HALF -> FLOAT + tinyexr::FP32 f32 = half_to_float(hf); + float *image = reinterpret_cast(out_images)[c]; + if (line_order == 0) { + image += (static_cast(line_no) + v) * + static_cast(x_stride) + + u; + } else { + image += (static_cast(height) - 1U - + (static_cast(line_no) + v)) * + static_cast(x_stride) + + u; + } + *image = f32.f; + } + } + } + } else if (channels[c].pixel_type == TINYEXR_PIXELTYPE_UINT) { + assert(requested_pixel_types[c] == TINYEXR_PIXELTYPE_UINT); + + for (size_t v = 0; v < static_cast(num_lines); v++) { + const unsigned int *line_ptr = reinterpret_cast( + &outBuf.at(v * pixel_data_size * static_cast(width) + + channel_offset_list[c] * static_cast(width))); + for (size_t u = 0; u < static_cast(width); u++) { + unsigned int val = line_ptr[u]; + + tinyexr::swap4(&val); + + unsigned int *image = + reinterpret_cast(out_images)[c]; + if (line_order == 0) { + image += (static_cast(line_no) + v) * + static_cast(x_stride) + + u; + } else { + image += (static_cast(height) - 1U - + (static_cast(line_no) + v)) * + static_cast(x_stride) + + u; + } + *image = val; + } + } + } else if (channels[c].pixel_type == TINYEXR_PIXELTYPE_FLOAT) { + assert(requested_pixel_types[c] == TINYEXR_PIXELTYPE_FLOAT); + for (size_t v = 0; v < static_cast(num_lines); v++) { + const float *line_ptr = reinterpret_cast( + &outBuf.at(v * pixel_data_size * static_cast(width) + + channel_offset_list[c] * static_cast(width))); + for (size_t u = 0; u < static_cast(width); u++) { + float val = line_ptr[u]; + + tinyexr::swap4(reinterpret_cast(&val)); + + float *image = reinterpret_cast(out_images)[c]; + if (line_order == 0) { + image += (static_cast(line_no) + v) * + static_cast(x_stride) + + u; + } else { + image += (static_cast(height) - 1U - + (static_cast(line_no) + v)) * + static_cast(x_stride) + + u; + } + *image = val; + } + } + } else { + assert(0); + } + } + } else if (compression_type == TINYEXR_COMPRESSIONTYPE_ZFP) { +#if TINYEXR_USE_ZFP + tinyexr::ZFPCompressionParam zfp_compression_param; + if (!FindZFPCompressionParam(&zfp_compression_param, attributes, + num_attributes)) { + assert(0); + return; + } + + // Allocate original data size. + std::vector outBuf(static_cast(width) * + static_cast(num_lines) * + pixel_data_size); + + unsigned long dstLen = outBuf.size(); + assert(dstLen > 0); + tinyexr::DecompressZfp(reinterpret_cast(&outBuf.at(0)), width, + num_lines, num_channels, data_ptr, + static_cast(data_len), + zfp_compression_param); + + // For ZFP_COMPRESSION: + // pixel sample data for channel 0 for scanline 0 + // pixel sample data for channel 1 for scanline 0 + // pixel sample data for channel ... for scanline 0 + // pixel sample data for channel n for scanline 0 + // pixel sample data for channel 0 for scanline 1 + // pixel sample data for channel 1 for scanline 1 + // pixel sample data for channel ... for scanline 1 + // pixel sample data for channel n for scanline 1 + // ... + for (size_t c = 0; c < static_cast(num_channels); c++) { + assert(channels[c].pixel_type == TINYEXR_PIXELTYPE_FLOAT); + if (channels[c].pixel_type == TINYEXR_PIXELTYPE_FLOAT) { + assert(requested_pixel_types[c] == TINYEXR_PIXELTYPE_FLOAT); + for (size_t v = 0; v < static_cast(num_lines); v++) { + const float *line_ptr = reinterpret_cast( + &outBuf.at(v * pixel_data_size * static_cast(width) + + channel_offset_list[c] * static_cast(width))); + for (size_t u = 0; u < static_cast(width); u++) { + float val = line_ptr[u]; + + tinyexr::swap4(reinterpret_cast(&val)); + + float *image = reinterpret_cast(out_images)[c]; + if (line_order == 0) { + image += (static_cast(line_no) + v) * + static_cast(x_stride) + + u; + } else { + image += (static_cast(height) - 1U - + (static_cast(line_no) + v)) * + static_cast(x_stride) + + u; + } + *image = val; + } + } + } else { + assert(0); + } + } +#else + (void)attributes; + (void)num_attributes; + (void)num_channels; + assert(0); +#endif + } else if (compression_type == TINYEXR_COMPRESSIONTYPE_NONE) { + for (size_t c = 0; c < num_channels; c++) { + if (channels[c].pixel_type == TINYEXR_PIXELTYPE_HALF) { + const unsigned short *line_ptr = + reinterpret_cast( + data_ptr + + c * static_cast(width) * sizeof(unsigned short)); + + if (requested_pixel_types[c] == TINYEXR_PIXELTYPE_HALF) { + unsigned short *outLine = + reinterpret_cast(out_images[c]); + if (line_order == 0) { + outLine += y * x_stride; + } else { + outLine += (height - 1 - y) * x_stride; + } + + for (int u = 0; u < width; u++) { + tinyexr::FP16 hf; + + hf.u = line_ptr[u]; + + tinyexr::swap2(reinterpret_cast(&hf.u)); + + outLine[u] = hf.u; + } + } else if (requested_pixel_types[c] == TINYEXR_PIXELTYPE_FLOAT) { + float *outLine = reinterpret_cast(out_images[c]); + if (line_order == 0) { + outLine += y * x_stride; + } else { + outLine += (height - 1 - y) * x_stride; + } + + for (int u = 0; u < width; u++) { + tinyexr::FP16 hf; + + hf.u = line_ptr[u]; + + tinyexr::swap2(reinterpret_cast(&hf.u)); + + tinyexr::FP32 f32 = half_to_float(hf); + + outLine[u] = f32.f; + } + } else { + assert(0); + } + } else if (channels[c].pixel_type == TINYEXR_PIXELTYPE_FLOAT) { + const float *line_ptr = reinterpret_cast( + data_ptr + c * static_cast(width) * sizeof(float)); + + float *outLine = reinterpret_cast(out_images[c]); + if (line_order == 0) { + outLine += y * x_stride; + } else { + outLine += (height - 1 - y) * x_stride; + } + + for (int u = 0; u < width; u++) { + float val = line_ptr[u]; + + tinyexr::swap4(reinterpret_cast(&val)); + + outLine[u] = val; + } + } else if (channels[c].pixel_type == TINYEXR_PIXELTYPE_UINT) { + const unsigned int *line_ptr = reinterpret_cast( + data_ptr + c * static_cast(width) * sizeof(unsigned int)); + + unsigned int *outLine = reinterpret_cast(out_images[c]); + if (line_order == 0) { + outLine += y * x_stride; + } else { + outLine += (height - 1 - y) * x_stride; + } + + for (int u = 0; u < width; u++) { + unsigned int val = line_ptr[u]; + + tinyexr::swap4(reinterpret_cast(&val)); + + outLine[u] = val; + } + } + } + } +} + +static void DecodeTiledPixelData( + unsigned char **out_images, int *width, int *height, + const int *requested_pixel_types, const unsigned char *data_ptr, + size_t data_len, int compression_type, int line_order, int data_width, + int data_height, int tile_offset_x, int tile_offset_y, int tile_size_x, + int tile_size_y, size_t pixel_data_size, size_t num_attributes, + const EXRAttribute *attributes, size_t num_channels, + const EXRChannelInfo *channels, + const std::vector &channel_offset_list) { + assert(tile_offset_x * tile_size_x < data_width); + assert(tile_offset_y * tile_size_y < data_height); + + // Compute actual image size in a tile. + if ((tile_offset_x + 1) * tile_size_x >= data_width) { + (*width) = data_width - (tile_offset_x * tile_size_x); + } else { + (*width) = tile_size_x; + } + + if ((tile_offset_y + 1) * tile_size_y >= data_height) { + (*height) = data_height - (tile_offset_y * tile_size_y); + } else { + (*height) = tile_size_y; + } + + // Image size = tile size. + DecodePixelData(out_images, requested_pixel_types, data_ptr, data_len, + compression_type, line_order, (*width), tile_size_y, + /* stride */ tile_size_x, /* y */ 0, /* line_no */ 0, + (*height), pixel_data_size, num_attributes, attributes, + num_channels, channels, channel_offset_list); +} + +static void ComputeChannelLayout(std::vector *channel_offset_list, + int *pixel_data_size, size_t *channel_offset, + int num_channels, + const EXRChannelInfo *channels) { + channel_offset_list->resize(static_cast(num_channels)); + + (*pixel_data_size) = 0; + (*channel_offset) = 0; + + for (size_t c = 0; c < static_cast(num_channels); c++) { + (*channel_offset_list)[c] = (*channel_offset); + if (channels[c].pixel_type == TINYEXR_PIXELTYPE_HALF) { + (*pixel_data_size) += sizeof(unsigned short); + (*channel_offset) += sizeof(unsigned short); + } else if (channels[c].pixel_type == TINYEXR_PIXELTYPE_FLOAT) { + (*pixel_data_size) += sizeof(float); + (*channel_offset) += sizeof(float); + } else if (channels[c].pixel_type == TINYEXR_PIXELTYPE_UINT) { + (*pixel_data_size) += sizeof(unsigned int); + (*channel_offset) += sizeof(unsigned int); + } else { + assert(0); + } + } +} + +static unsigned char **AllocateImage(int num_channels, + const EXRChannelInfo *channels, + const int *requested_pixel_types, + int data_width, int data_height) { + unsigned char **images = + reinterpret_cast(static_cast( + malloc(sizeof(float *) * static_cast(num_channels)))); + + for (size_t c = 0; c < static_cast(num_channels); c++) { + size_t data_len = + static_cast(data_width) * static_cast(data_height); + if (channels[c].pixel_type == TINYEXR_PIXELTYPE_HALF) { + // pixel_data_size += sizeof(unsigned short); + // channel_offset += sizeof(unsigned short); + // Alloc internal image for half type. + if (requested_pixel_types[c] == TINYEXR_PIXELTYPE_HALF) { + images[c] = + reinterpret_cast(static_cast( + malloc(sizeof(unsigned short) * data_len))); + } else if (requested_pixel_types[c] == TINYEXR_PIXELTYPE_FLOAT) { + images[c] = reinterpret_cast( + static_cast(malloc(sizeof(float) * data_len))); + } else { + assert(0); + } + } else if (channels[c].pixel_type == TINYEXR_PIXELTYPE_FLOAT) { + // pixel_data_size += sizeof(float); + // channel_offset += sizeof(float); + images[c] = reinterpret_cast( + static_cast(malloc(sizeof(float) * data_len))); + } else if (channels[c].pixel_type == TINYEXR_PIXELTYPE_UINT) { + // pixel_data_size += sizeof(unsigned int); + // channel_offset += sizeof(unsigned int); + images[c] = reinterpret_cast( + static_cast(malloc(sizeof(unsigned int) * data_len))); + } else { + assert(0); + } + } + + return images; +} + +static int ParseEXRHeader(HeaderInfo *info, bool *empty_header, + const EXRVersion *version, std::string *err, + const unsigned char *buf, size_t size) { + const char *marker = reinterpret_cast(&buf[0]); + + if (empty_header) { + (*empty_header) = false; + } + + if (version->multipart) { + if (size > 0 && marker[0] == '\0') { + // End of header list. + if (empty_header) { + (*empty_header) = true; + } + return TINYEXR_SUCCESS; + } + } + + // According to the spec, the header of every OpenEXR file must contain at + // least the following attributes: + // + // channels chlist + // compression compression + // dataWindow box2i + // displayWindow box2i + // lineOrder lineOrder + // pixelAspectRatio float + // screenWindowCenter v2f + // screenWindowWidth float + bool has_channels = false; + bool has_compression = false; + bool has_data_window = false; + bool has_display_window = false; + bool has_line_order = false; + bool has_pixel_aspect_ratio = false; + bool has_screen_window_center = false; + bool has_screen_window_width = false; + + info->data_window[0] = 0; + info->data_window[1] = 0; + info->data_window[2] = 0; + info->data_window[3] = 0; + info->line_order = 0; // @fixme + info->display_window[0] = 0; + info->display_window[1] = 0; + info->display_window[2] = 0; + info->display_window[3] = 0; + info->screen_window_center[0] = 0.0f; + info->screen_window_center[1] = 0.0f; + info->screen_window_width = -1.0f; + info->pixel_aspect_ratio = -1.0f; + + info->tile_size_x = -1; + info->tile_size_y = -1; + info->tile_level_mode = -1; + info->tile_rounding_mode = -1; + + info->attributes.clear(); + + // Read attributes + size_t orig_size = size; + for (;;) { + if (0 == size) { + return TINYEXR_ERROR_INVALID_DATA; + } else if (marker[0] == '\0') { + size--; + break; + } + + std::string attr_name; + std::string attr_type; + std::vector data; + size_t marker_size; + if (!tinyexr::ReadAttribute(&attr_name, &attr_type, &data, &marker_size, + marker, size)) { + return TINYEXR_ERROR_INVALID_DATA; + } + marker += marker_size; + size -= marker_size; + + if (version->tiled && attr_name.compare("tiles") == 0) { + unsigned int x_size, y_size; + unsigned char tile_mode; + assert(data.size() == 9); + memcpy(&x_size, &data.at(0), sizeof(int)); + memcpy(&y_size, &data.at(4), sizeof(int)); + tile_mode = data[8]; + tinyexr::swap4(&x_size); + tinyexr::swap4(&y_size); + + info->tile_size_x = static_cast(x_size); + info->tile_size_y = static_cast(y_size); + + // mode = levelMode + roundingMode * 16 + info->tile_level_mode = tile_mode & 0x3; + info->tile_rounding_mode = (tile_mode >> 4) & 0x1; + + } else if (attr_name.compare("compression") == 0) { + bool ok = false; + if ((data[0] >= TINYEXR_COMPRESSIONTYPE_NONE) && + (data[0] < TINYEXR_COMPRESSIONTYPE_PIZ)) { + ok = true; + } + + if (data[0] == TINYEXR_COMPRESSIONTYPE_PIZ) { +#if TINYEXR_USE_PIZ + ok = true; +#else + if (err) { + (*err) = "PIZ compression is not supported."; + } + return TINYEXR_ERROR_UNSUPPORTED_FORMAT; +#endif + } + + if (data[0] == TINYEXR_COMPRESSIONTYPE_ZFP) { +#if TINYEXR_USE_ZFP + ok = true; +#else + if (err) { + (*err) = "ZFP compression is not supported."; + } + return TINYEXR_ERROR_UNSUPPORTED_FORMAT; +#endif + } + + if (!ok) { + if (err) { + (*err) = "Unknown compression type."; + } + return TINYEXR_ERROR_UNSUPPORTED_FORMAT; + } + + info->compression_type = static_cast(data[0]); + has_compression = true; + + } else if (attr_name.compare("channels") == 0) { + // name: zero-terminated string, from 1 to 255 bytes long + // pixel type: int, possible values are: UINT = 0 HALF = 1 FLOAT = 2 + // pLinear: unsigned char, possible values are 0 and 1 + // reserved: three chars, should be zero + // xSampling: int + // ySampling: int + + ReadChannelInfo(info->channels, data); + + if (info->channels.size() < 1) { + if (err) { + (*err) = "# of channels is zero."; + } + return TINYEXR_ERROR_INVALID_DATA; + } + + has_channels = true; + + } else if (attr_name.compare("dataWindow") == 0) { + memcpy(&info->data_window[0], &data.at(0), sizeof(int)); + memcpy(&info->data_window[1], &data.at(4), sizeof(int)); + memcpy(&info->data_window[2], &data.at(8), sizeof(int)); + memcpy(&info->data_window[3], &data.at(12), sizeof(int)); + tinyexr::swap4(reinterpret_cast(&info->data_window[0])); + tinyexr::swap4(reinterpret_cast(&info->data_window[1])); + tinyexr::swap4(reinterpret_cast(&info->data_window[2])); + tinyexr::swap4(reinterpret_cast(&info->data_window[3])); + + has_data_window = true; + } else if (attr_name.compare("displayWindow") == 0) { + memcpy(&info->display_window[0], &data.at(0), sizeof(int)); + memcpy(&info->display_window[1], &data.at(4), sizeof(int)); + memcpy(&info->display_window[2], &data.at(8), sizeof(int)); + memcpy(&info->display_window[3], &data.at(12), sizeof(int)); + tinyexr::swap4( + reinterpret_cast(&info->display_window[0])); + tinyexr::swap4( + reinterpret_cast(&info->display_window[1])); + tinyexr::swap4( + reinterpret_cast(&info->display_window[2])); + tinyexr::swap4( + reinterpret_cast(&info->display_window[3])); + + has_display_window = true; + } else if (attr_name.compare("lineOrder") == 0) { + info->line_order = static_cast(data[0]); + has_line_order = true; + } else if (attr_name.compare("pixelAspectRatio") == 0) { + memcpy(&info->pixel_aspect_ratio, &data.at(0), sizeof(float)); + tinyexr::swap4( + reinterpret_cast(&info->pixel_aspect_ratio)); + has_pixel_aspect_ratio = true; + } else if (attr_name.compare("screenWindowCenter") == 0) { + memcpy(&info->screen_window_center[0], &data.at(0), sizeof(float)); + memcpy(&info->screen_window_center[1], &data.at(4), sizeof(float)); + tinyexr::swap4( + reinterpret_cast(&info->screen_window_center[0])); + tinyexr::swap4( + reinterpret_cast(&info->screen_window_center[1])); + has_screen_window_center = true; + } else if (attr_name.compare("screenWindowWidth") == 0) { + memcpy(&info->screen_window_width, &data.at(0), sizeof(float)); + tinyexr::swap4( + reinterpret_cast(&info->screen_window_width)); + + has_screen_window_width = true; + } else if (attr_name.compare("chunkCount") == 0) { + memcpy(&info->chunk_count, &data.at(0), sizeof(int)); + tinyexr::swap4(reinterpret_cast(&info->chunk_count)); + } else { + // Custom attribute(up to TINYEXR_MAX_ATTRIBUTES) + if (info->attributes.size() < TINYEXR_MAX_ATTRIBUTES) { + EXRAttribute attrib; + strncpy(attrib.name, attr_name.c_str(), 255); + attrib.name[255] = '\0'; + strncpy(attrib.type, attr_type.c_str(), 255); + attrib.type[255] = '\0'; + attrib.size = static_cast(data.size()); + attrib.value = static_cast(malloc(data.size())); + memcpy(reinterpret_cast(attrib.value), &data.at(0), + data.size()); + info->attributes.push_back(attrib); + } + } + } + + // Check if required attributes exist + { + std::stringstream ss_err; + + if (!has_compression) { + ss_err << "\"compression\" attribute not found in the header." + << std::endl; + } + + if (!has_channels) { + ss_err << "\"channels\" attribute not found in the header." << std::endl; + } + + if (!has_line_order) { + ss_err << "\"lineOrder\" attribute not found in the header." << std::endl; + } + + if (!has_display_window) { + ss_err << "\"displayWindow\" attribute not found in the header." + << std::endl; + } + + if (!has_data_window) { + ss_err << "\"dataWindow\" attribute not found in the header." + << std::endl; + } + + if (!has_pixel_aspect_ratio) { + ss_err << "\"pixelAspectRatio\" attribute not found in the header." + << std::endl; + } + + if (!has_screen_window_width) { + ss_err << "\"screenWindowWidth\" attribute not found in the header." + << std::endl; + } + + if (!has_screen_window_center) { + ss_err << "\"screenWindowCenter\" attribute not found in the header." + << std::endl; + } + + if (!(ss_err.str().empty())) { + if (err) { + (*err) += ss_err.str(); + } + return TINYEXR_ERROR_INVALID_HEADER; + } + } + + info->header_len = static_cast(orig_size - size); + + return TINYEXR_SUCCESS; +} + +// C++ HeaderInfo to C EXRHeader conversion. +static void ConvertHeader(EXRHeader *exr_header, const HeaderInfo &info) { + exr_header->pixel_aspect_ratio = info.pixel_aspect_ratio; + exr_header->screen_window_center[0] = info.screen_window_center[0]; + exr_header->screen_window_center[1] = info.screen_window_center[1]; + exr_header->screen_window_width = info.screen_window_width; + exr_header->chunk_count = info.chunk_count; + exr_header->display_window[0] = info.display_window[0]; + exr_header->display_window[1] = info.display_window[1]; + exr_header->display_window[2] = info.display_window[2]; + exr_header->display_window[3] = info.display_window[3]; + exr_header->data_window[0] = info.data_window[0]; + exr_header->data_window[1] = info.data_window[1]; + exr_header->data_window[2] = info.data_window[2]; + exr_header->data_window[3] = info.data_window[3]; + exr_header->line_order = info.line_order; + exr_header->compression_type = info.compression_type; + + exr_header->tile_size_x = info.tile_size_x; + exr_header->tile_size_y = info.tile_size_y; + exr_header->tile_level_mode = info.tile_level_mode; + exr_header->tile_rounding_mode = info.tile_rounding_mode; + + exr_header->num_channels = static_cast(info.channels.size()); + + exr_header->channels = static_cast(malloc( + sizeof(EXRChannelInfo) * static_cast(exr_header->num_channels))); + for (size_t c = 0; c < static_cast(exr_header->num_channels); c++) { + strncpy(exr_header->channels[c].name, info.channels[c].name.c_str(), 255); + // manually add '\0' for safety. + exr_header->channels[c].name[255] = '\0'; + + exr_header->channels[c].pixel_type = info.channels[c].pixel_type; + exr_header->channels[c].p_linear = info.channels[c].p_linear; + exr_header->channels[c].x_sampling = info.channels[c].x_sampling; + exr_header->channels[c].y_sampling = info.channels[c].y_sampling; + } + + exr_header->pixel_types = static_cast( + malloc(sizeof(int) * static_cast(exr_header->num_channels))); + for (size_t c = 0; c < static_cast(exr_header->num_channels); c++) { + exr_header->pixel_types[c] = info.channels[c].pixel_type; + } + + // Initially fill with values of `pixel_types` + exr_header->requested_pixel_types = static_cast( + malloc(sizeof(int) * static_cast(exr_header->num_channels))); + for (size_t c = 0; c < static_cast(exr_header->num_channels); c++) { + exr_header->requested_pixel_types[c] = info.channels[c].pixel_type; + } + + assert(info.attributes.size() < TINYEXR_MAX_ATTRIBUTES); + exr_header->num_custom_attributes = static_cast(info.attributes.size()); + + for (size_t i = 0; i < info.attributes.size(); i++) { + memcpy(exr_header->custom_attributes[i].name, info.attributes[i].name, 256); + memcpy(exr_header->custom_attributes[i].type, info.attributes[i].type, 256); + exr_header->custom_attributes[i].size = info.attributes[i].size; + // Just copy poiner + exr_header->custom_attributes[i].value = info.attributes[i].value; + } + + exr_header->header_len = info.header_len; +} + +static int DecodeChunk(EXRImage *exr_image, const EXRHeader *exr_header, + const std::vector &offsets, + const unsigned char *head) { + int num_channels = exr_header->num_channels; + + int num_scanline_blocks = 1; + if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_ZIP) { + num_scanline_blocks = 16; + } else if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_PIZ) { + num_scanline_blocks = 32; + } else if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_ZFP) { + num_scanline_blocks = 16; + } + + int data_width = exr_header->data_window[2] - exr_header->data_window[0] + 1; + int data_height = exr_header->data_window[3] - exr_header->data_window[1] + 1; + + size_t num_blocks = offsets.size(); + + std::vector channel_offset_list; + int pixel_data_size = 0; + size_t channel_offset = 0; + tinyexr::ComputeChannelLayout(&channel_offset_list, &pixel_data_size, + &channel_offset, num_channels, + exr_header->channels); + + if (exr_header->tiled) { + size_t num_tiles = offsets.size(); // = # of blocks + + exr_image->tiles = static_cast( + malloc(sizeof(EXRTile) * static_cast(num_tiles))); + + for (size_t tile_idx = 0; tile_idx < num_tiles; tile_idx++) { + // Allocate memory for each tile. + exr_image->tiles[tile_idx].images = tinyexr::AllocateImage( + num_channels, exr_header->channels, exr_header->requested_pixel_types, + data_width, data_height); + + // 16 byte: tile coordinates + // 4 byte : data size + // ~ : data(uncompressed or compressed) + const unsigned char *data_ptr = + reinterpret_cast(head + offsets[tile_idx]); + + int tile_coordinates[4]; + memcpy(tile_coordinates, data_ptr, sizeof(int) * 4); + tinyexr::swap4(reinterpret_cast(&tile_coordinates[0])); + tinyexr::swap4(reinterpret_cast(&tile_coordinates[1])); + tinyexr::swap4(reinterpret_cast(&tile_coordinates[2])); + tinyexr::swap4(reinterpret_cast(&tile_coordinates[3])); + + // @todo{ LoD } + assert(tile_coordinates[2] == 0); + assert(tile_coordinates[3] == 0); + + int data_len; + memcpy(&data_len, data_ptr + 16, + sizeof(int)); // 16 = sizeof(tile_coordinates) + tinyexr::swap4(reinterpret_cast(&data_len)); + assert(data_len >= 4); + + // Move to data addr: 20 = 16 + 4; + data_ptr += 20; + + tinyexr::DecodeTiledPixelData( + exr_image->tiles[tile_idx].images, + &(exr_image->tiles[tile_idx].width), + &(exr_image->tiles[tile_idx].height), + exr_header->requested_pixel_types, data_ptr, + static_cast(data_len), exr_header->compression_type, + exr_header->line_order, data_width, data_height, tile_coordinates[0], + tile_coordinates[1], exr_header->tile_size_x, exr_header->tile_size_y, + static_cast(pixel_data_size), + static_cast(exr_header->num_custom_attributes), + exr_header->custom_attributes, + static_cast(exr_header->num_channels), exr_header->channels, + channel_offset_list); + + exr_image->tiles[tile_idx].offset_x = tile_coordinates[0]; + exr_image->tiles[tile_idx].offset_y = tile_coordinates[1]; + exr_image->tiles[tile_idx].level_x = tile_coordinates[2]; + exr_image->tiles[tile_idx].level_y = tile_coordinates[3]; + + exr_image->num_tiles = static_cast(num_tiles); + } + } else { // scanline format + + exr_image->images = tinyexr::AllocateImage( + num_channels, exr_header->channels, exr_header->requested_pixel_types, + data_width, data_height); + +#ifdef _OPENMP +#pragma omp parallel for +#endif + for (int y = 0; y < static_cast(num_blocks); y++) { + size_t y_idx = static_cast(y); + const unsigned char *data_ptr = + reinterpret_cast(head + offsets[y_idx]); + // 4 byte: scan line + // 4 byte: data size + // ~ : pixel data(uncompressed or compressed) + int line_no; + memcpy(&line_no, data_ptr, sizeof(int)); + int data_len; + memcpy(&data_len, data_ptr + 4, sizeof(int)); + tinyexr::swap4(reinterpret_cast(&line_no)); + tinyexr::swap4(reinterpret_cast(&data_len)); + + int end_line_no = (std::min)(line_no + num_scanline_blocks, + (exr_header->data_window[3] + 1)); + + int num_lines = end_line_no - line_no; + assert(num_lines > 0); + + // Move to data addr: 8 = 4 + 4; + data_ptr += 8; + + // Adjust line_no with data_window.bmin.y + line_no -= exr_header->data_window[1]; + + tinyexr::DecodePixelData( + exr_image->images, exr_header->requested_pixel_types, data_ptr, + static_cast(data_len), exr_header->compression_type, + exr_header->line_order, data_width, data_height, data_width, y, + line_no, num_lines, static_cast(pixel_data_size), + static_cast(exr_header->num_custom_attributes), + exr_header->custom_attributes, + static_cast(exr_header->num_channels), exr_header->channels, + channel_offset_list); + } // omp parallel + } + + // Overwrite `pixel_type` with `requested_pixel_type`. + { + for (int c = 0; c < exr_header->num_channels; c++) { + exr_header->pixel_types[c] = exr_header->requested_pixel_types[c]; + } + } + + { + exr_image->num_channels = num_channels; + + exr_image->width = data_width; + exr_image->height = data_height; + } + + return TINYEXR_SUCCESS; +} + +static void ReconstructLineOffsets(std::vector *offsets, size_t n, const unsigned char *head, const unsigned char *marker, const size_t size) +{ + assert(head < marker); + assert(offsets->size() == n); + + for (size_t i = 0; i < n; i++) { + size_t offset = static_cast(marker - head); + assert(offset < size); // Offset should not exceed whole EXR file/data size. + + int y; + int data_len; + + memcpy(&y, marker, sizeof(int)); + memcpy(&data_len, marker + 4, sizeof(unsigned int)); + + tinyexr::swap4(reinterpret_cast(&y)); + tinyexr::swap4(reinterpret_cast(&data_len)); + + (*offsets)[i] = offset; + + marker += data_len + 8; // 8 = 4 bytes(y) + 4 bytes(data_len) + } +} + +static int DecodeEXRImage(EXRImage *exr_image, const EXRHeader *exr_header, + const unsigned char *head, + const unsigned char *marker, const size_t size, const char **err) { + if (exr_image == NULL || exr_header == NULL || head == NULL || + marker == NULL || (size <= tinyexr::kEXRVersionSize)) { + if (err) { + (*err) = "Invalid argument."; + } + return TINYEXR_ERROR_INVALID_ARGUMENT; + } + + int num_scanline_blocks = 1; + if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_ZIP) { + num_scanline_blocks = 16; + } else if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_PIZ) { + num_scanline_blocks = 32; + } else if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_ZFP) { + num_scanline_blocks = 16; + } + + int data_width = exr_header->data_window[2] - exr_header->data_window[0] + 1; + int data_height = exr_header->data_window[3] - exr_header->data_window[1] + 1; + + // Read offset tables. + size_t num_blocks; + + if (exr_header->chunk_count > 0) { + // Use `chunkCount` attribute. + num_blocks = static_cast(exr_header->chunk_count); + } else if (exr_header->tiled) { + // @todo { LoD } + size_t num_x_tiles = static_cast(data_width) / + static_cast(exr_header->tile_size_x); + if (num_x_tiles * static_cast(exr_header->tile_size_x) < + static_cast(data_width)) { + num_x_tiles++; + } + size_t num_y_tiles = static_cast(data_height) / + static_cast(exr_header->tile_size_y); + if (num_y_tiles * static_cast(exr_header->tile_size_y) < + static_cast(data_height)) { + num_y_tiles++; + } + + num_blocks = num_x_tiles * num_y_tiles; + } else { + num_blocks = static_cast(data_height) / + static_cast(num_scanline_blocks); + if (num_blocks * static_cast(num_scanline_blocks) < + static_cast(data_height)) { + num_blocks++; + } + } + + std::vector offsets(num_blocks); + + for (size_t y = 0; y < num_blocks; y++) { + tinyexr::tinyexr_uint64 offset; + memcpy(&offset, marker, sizeof(tinyexr::tinyexr_uint64)); + tinyexr::swap8(&offset); + marker += sizeof(tinyexr::tinyexr_uint64); // = 8 + offsets[y] = offset; + } + + // If line offsets are invalid, we try to reconstruct it. + // See OpenEXR/IlmImf/ImfScanLineInputFile.cpp::readLineOffsets() for details. + for (size_t y = 0; y < num_blocks; y++) { + if (offsets[y] <= 0) { + // TODO(syoyo) Report as warning. + //if (err) { + // stringstream ss; + // ss << "Incomplete lineOffsets." << std::endl; + // (*err) += ss.str(); + //} + ReconstructLineOffsets(&offsets, num_blocks, head, marker, size); + break; + } + } + + return DecodeChunk(exr_image, exr_header, offsets, head); +} + +} // namespace tinyexr int LoadEXR(float **out_rgba, int *width, int *height, const char *filename, const char **err) { - if (out_rgba == NULL) { if (err) { (*err) = "Invalid argument.\n"; } - return -1; + return TINYEXR_ERROR_INVALID_ARGUMENT; } - EXRImage exrImage; - InitEXRImage(&exrImage); + EXRVersion exr_version; + EXRImage exr_image; + EXRHeader exr_header; + InitEXRHeader(&exr_header); + InitEXRImage(&exr_image); { - int ret = ParseMultiChannelEXRHeaderFromFile(&exrImage, filename, err); - if (ret != 0) { + int ret = ParseEXRVersionFromFile(&exr_version, filename); + if (ret != TINYEXR_SUCCESS) { + return ret; + } + + if (exr_version.multipart || exr_version.non_image) { + if (err) { + (*err) = "Loading multipart or DeepImage is not supported yet.\n"; + } + return TINYEXR_ERROR_INVALID_DATA; // @fixme. + } + } + + { + int ret = ParseEXRHeaderFromFile(&exr_header, &exr_version, filename, err); + if (ret != TINYEXR_SUCCESS) { return ret; } } // Read HALF channel as FLOAT. - for (int i = 0; i < exrImage.num_channels; i++) { - if (exrImage.pixel_types[i] == TINYEXR_PIXELTYPE_HALF) { - exrImage.requested_pixel_types[i] = TINYEXR_PIXELTYPE_FLOAT; + for (int i = 0; i < exr_header.num_channels; i++) { + if (exr_header.pixel_types[i] == TINYEXR_PIXELTYPE_HALF) { + exr_header.requested_pixel_types[i] = TINYEXR_PIXELTYPE_FLOAT; } } { - int ret = LoadMultiChannelEXRFromFile(&exrImage, filename, err); - if (ret != 0) { + int ret = LoadEXRImageFromFile(&exr_image, &exr_header, filename, err); + if (ret != TINYEXR_SUCCESS) { return ret; } } @@ -8711,14 +10596,14 @@ int LoadEXR(float **out_rgba, int *width, int *height, const char *filename, int idxG = -1; int idxB = -1; int idxA = -1; - for (int c = 0; c < exrImage.num_channels; c++) { - if (strcmp(exrImage.channel_names[c], "R") == 0) { + for (int c = 0; c < exr_header.num_channels; c++) { + if (strcmp(exr_header.channels[c].name, "R") == 0) { idxR = c; - } else if (strcmp(exrImage.channel_names[c], "G") == 0) { + } else if (strcmp(exr_header.channels[c].name, "G") == 0) { idxG = c; - } else if (strcmp(exrImage.channel_names[c], "B") == 0) { + } else if (strcmp(exr_header.channels[c].name, "B") == 0) { idxB = c; - } else if (strcmp(exrImage.channel_names[c], "A") == 0) { + } else if (strcmp(exr_header.channels[c].name, "A") == 0) { idxA = c; } } @@ -8728,252 +10613,120 @@ int LoadEXR(float **out_rgba, int *width, int *height, const char *filename, (*err) = "R channel not found\n"; } - // @todo { free exrImage } - return -1; + // @todo { free exr_image } + return TINYEXR_ERROR_INVALID_DATA; } if (idxG == -1) { if (err) { (*err) = "G channel not found\n"; } - // @todo { free exrImage } - return -1; + // @todo { free exr_image } + return TINYEXR_ERROR_INVALID_DATA; } if (idxB == -1) { if (err) { (*err) = "B channel not found\n"; } - // @todo { free exrImage } - return -1; + // @todo { free exr_image } + return TINYEXR_ERROR_INVALID_DATA; } - (*out_rgba) = - (float *)malloc(4 * sizeof(float) * exrImage.width * exrImage.height); - for (int i = 0; i < exrImage.width * exrImage.height; i++) { + (*out_rgba) = reinterpret_cast( + malloc(4 * sizeof(float) * static_cast(exr_image.width) * + static_cast(exr_image.height))); + for (int i = 0; i < exr_image.width * exr_image.height; i++) { (*out_rgba)[4 * i + 0] = - reinterpret_cast(exrImage.images)[idxR][i]; + reinterpret_cast(exr_image.images)[idxR][i]; (*out_rgba)[4 * i + 1] = - reinterpret_cast(exrImage.images)[idxG][i]; + reinterpret_cast(exr_image.images)[idxG][i]; (*out_rgba)[4 * i + 2] = - reinterpret_cast(exrImage.images)[idxB][i]; - if (idxA > 0) { + reinterpret_cast(exr_image.images)[idxB][i]; + if (idxA != -1) { (*out_rgba)[4 * i + 3] = - reinterpret_cast(exrImage.images)[idxA][i]; + reinterpret_cast(exr_image.images)[idxA][i]; } else { (*out_rgba)[4 * i + 3] = 1.0; } } - (*width) = exrImage.width; - (*height) = exrImage.height; + (*width) = exr_image.width; + (*height) = exr_image.height; - // @todo { free exrImage } - return 0; + FreeEXRHeader(&exr_header); + FreeEXRImage(&exr_image); + + return TINYEXR_SUCCESS; } -int ParseEXRHeaderFromMemory(EXRAttribute *customAttributes, - int *numCustomAttributes, int *width, int *height, - const unsigned char *memory) { +int ParseEXRHeaderFromMemory(EXRHeader *exr_header, const EXRVersion *version, + const unsigned char *memory, size_t size, + const char **err) { + if (memory == NULL || exr_header == NULL) { + if (err) { + (*err) = "Invalid argument.\n"; + } - if (memory == NULL) { // Invalid argument - return -1; + return TINYEXR_ERROR_INVALID_ARGUMENT; } - const char *buf = reinterpret_cast(memory); - - const char *marker = &buf[0]; - - // Header check. - { - const char header[] = {0x76, 0x2f, 0x31, 0x01}; - - if (memcmp(marker, header, 4) != 0) { - // if (err) { - // (*err) = "Header mismatch."; - //} - return -3; - } - marker += 4; + if (size < tinyexr::kEXRVersionSize) { + return TINYEXR_ERROR_INVALID_DATA; } - // Version, scanline. - { - // must be [2, 0, 0, 0] - if (marker[0] != 2 || marker[1] != 0 || marker[2] != 0 || marker[3] != 0) { - // if (err) { - // (*err) = "Unsupported version or scanline."; - //} - return -4; - } + const unsigned char *marker = memory + tinyexr::kEXRVersionSize; + size_t marker_size = size - tinyexr::kEXRVersionSize; - marker += 4; - } + tinyexr::HeaderInfo info; + info.clear(); - int dx = -1; - int dy = -1; - int dw = -1; - int dh = -1; - int lineOrder = 0; // @fixme - int displayWindow[4] = {-1, -1, -1, -1}; // @fixme - float screenWindowCenter[2] = {0.0f, 0.0f}; // @fixme - float screenWindowWidth = 1.0f; // @fixme - int numChannels = -1; - float pixelAspectRatio = 1.0f; // @fixme - std::vector channels; - std::vector attribs; + std::string err_str; + int ret = ParseEXRHeader(&info, NULL, version, &err_str, marker, marker_size); - if (numCustomAttributes) { - (*numCustomAttributes) = 0; - } - - // Read attributes - for (;;) { - std::string attrName; - std::string attrType; - std::vector data; - const char *marker_next = ReadAttribute(attrName, attrType, data, marker); - if (marker_next == NULL) { - marker++; // skip '\0' - break; - } - - if (attrName.compare("compression") == TINYEXR_COMPRESSIONTYPE_NONE) { - // mwkm - // 0 : NO_COMPRESSION - // 1 : RLE - // 2 : ZIPS (Single scanline) - // 3 : ZIP (16-line block) - // 4 : PIZ (32-line block) - if (data[0] > TINYEXR_COMPRESSIONTYPE_PIZ) { - // if (err) { - // (*err) = "Unsupported compression type."; - //} - return -5; - } - - } else if (attrName.compare("channels") == 0) { - - // name: zero-terminated string, from 1 to 255 bytes long - // pixel type: int, possible values are: UINT = 0 HALF = 1 FLOAT = 2 - // pLinear: unsigned char, possible values are 0 and 1 - // reserved: three chars, should be zero - // xSampling: int - // ySampling: int - - ReadChannelInfo(channels, data); - - numChannels = channels.size(); - - if (numChannels < 1) { - // if (err) { - // (*err) = "Invalid channels format."; - //} - return -6; - } - - } else if (attrName.compare("dataWindow") == 0) { - memcpy(&dx, &data.at(0), sizeof(int)); - memcpy(&dy, &data.at(4), sizeof(int)); - memcpy(&dw, &data.at(8), sizeof(int)); - memcpy(&dh, &data.at(12), sizeof(int)); - if (IsBigEndian()) { - swap4(reinterpret_cast(&dx)); - swap4(reinterpret_cast(&dy)); - swap4(reinterpret_cast(&dw)); - swap4(reinterpret_cast(&dh)); - } - } else if (attrName.compare("displayWindow") == 0) { - memcpy(&displayWindow[0], &data.at(0), sizeof(int)); - memcpy(&displayWindow[1], &data.at(4), sizeof(int)); - memcpy(&displayWindow[2], &data.at(8), sizeof(int)); - memcpy(&displayWindow[3], &data.at(12), sizeof(int)); - if (IsBigEndian()) { - swap4(reinterpret_cast(&displayWindow[0])); - swap4(reinterpret_cast(&displayWindow[1])); - swap4(reinterpret_cast(&displayWindow[2])); - swap4(reinterpret_cast(&displayWindow[3])); - } - } else if (attrName.compare("lineOrder") == 0) { - memcpy(&lineOrder, &data.at(0), sizeof(float)); - if (IsBigEndian()) { - swap4(reinterpret_cast(&lineOrder)); - } - } else if (attrName.compare("pixelAspectRatio") == 0) { - memcpy(&pixelAspectRatio, &data.at(0), sizeof(float)); - if (IsBigEndian()) { - swap4(reinterpret_cast(&pixelAspectRatio)); - } - } else if (attrName.compare("screenWindowCenter") == 0) { - memcpy(&screenWindowCenter[0], &data.at(0), sizeof(float)); - memcpy(&screenWindowCenter[1], &data.at(4), sizeof(float)); - if (IsBigEndian()) { - swap4(reinterpret_cast(&screenWindowCenter[0])); - swap4(reinterpret_cast(&screenWindowCenter[1])); - } - } else if (attrName.compare("screenWindowWidth") == 0) { - memcpy(&screenWindowWidth, &data.at(0), sizeof(float)); - if (IsBigEndian()) { - swap4(reinterpret_cast(&screenWindowWidth)); - } - - } else { - // Custom attribute(up to TINYEXR_MAX_ATTRIBUTES) - if (numCustomAttributes && - ((*numCustomAttributes) < TINYEXR_MAX_ATTRIBUTES)) { - EXRAttribute attrib; - attrib.name = strdup(attrName.c_str()); - attrib.type = strdup(attrType.c_str()); - attrib.size = data.size(); - attrib.value = (unsigned char *)malloc(data.size()); - memcpy((char *)attrib.value, &data.at(0), data.size()); - attribs.push_back(attrib); - } - } - - marker = marker_next; - } - - assert(dx >= 0); - assert(dy >= 0); - assert(dw >= 0); - assert(dh >= 0); - assert(numChannels >= 1); - - int dataWidth = dw - dx + 1; - int dataHeight = dh - dy + 1; - - (*width) = dataWidth; - (*height) = dataHeight; - - if (numCustomAttributes) { - assert(attribs.size() < TINYEXR_MAX_ATTRIBUTES); - (*numCustomAttributes) = attribs.size(); - - // Assume the pointer to customAttributes has enough memory to store. - for (int i = 0; i < (int)attribs.size(); i++) { - customAttributes[i] = attribs[i]; + if (ret != TINYEXR_SUCCESS) { + if (err && !err_str.empty()) { + (*err) = strdup(err_str.c_str()); // May leak } } - return 0; + ConvertHeader(exr_header, info); + + // transfoer `tiled` from version. + exr_header->tiled = version->tiled; + + return ret; } -int LoadEXRFromMemory(float *out_rgba, const unsigned char *memory, +int LoadEXRFromMemory(float *out_rgba, const unsigned char *memory, size_t size, const char **err) { - if (out_rgba == NULL || memory == NULL) { if (err) { (*err) = "Invalid argument.\n"; } - return -1; + return TINYEXR_ERROR_INVALID_ARGUMENT; } - EXRImage exrImage; - InitEXRImage(&exrImage); - int ret = LoadMultiChannelEXRFromMemory(&exrImage, memory, err); - if (ret != 0) { + EXRVersion exr_version; + EXRImage exr_image; + EXRHeader exr_header; + + InitEXRHeader(&exr_header); + + int ret = ParseEXRVersionFromMemory(&exr_version, memory, size); + if (ret != TINYEXR_SUCCESS) { + return ret; + } + + ret = ParseEXRHeaderFromMemory(&exr_header, &exr_version, memory, size, err); + if (ret != TINYEXR_SUCCESS) { + return ret; + } + + InitEXRImage(&exr_image); + ret = LoadEXRImageFromMemory(&exr_image, &exr_header, memory, size, err); + if (ret != TINYEXR_SUCCESS) { return ret; } @@ -8982,14 +10735,14 @@ int LoadEXRFromMemory(float *out_rgba, const unsigned char *memory, int idxG = -1; int idxB = -1; int idxA = -1; - for (int c = 0; c < exrImage.num_channels; c++) { - if (strcmp(exrImage.channel_names[c], "R") == 0) { + for (int c = 0; c < exr_header.num_channels; c++) { + if (strcmp(exr_header.channels[c].name, "R") == 0) { idxR = c; - } else if (strcmp(exrImage.channel_names[c], "G") == 0) { + } else if (strcmp(exr_header.channels[c].name, "G") == 0) { idxG = c; - } else if (strcmp(exrImage.channel_names[c], "B") == 0) { + } else if (strcmp(exr_header.channels[c].name, "B") == 0) { idxB = c; - } else if (strcmp(exrImage.channel_names[c], "A") == 0) { + } else if (strcmp(exr_header.channels[c].name, "A") == 0) { idxA = c; } } @@ -8999,66 +10752,71 @@ int LoadEXRFromMemory(float *out_rgba, const unsigned char *memory, (*err) = "R channel not found\n"; } - // @todo { free exrImage } - return -1; + // @todo { free exr_image } + return TINYEXR_ERROR_INVALID_DATA; } if (idxG == -1) { if (err) { (*err) = "G channel not found\n"; } - // @todo { free exrImage } - return -1; + // @todo { free exr_image } + return TINYEXR_ERROR_INVALID_DATA; } if (idxB == -1) { if (err) { (*err) = "B channel not found\n"; } - // @todo { free exrImage } - return -1; + // @todo { free exr_image } + return TINYEXR_ERROR_INVALID_DATA; } // Assume `out_rgba` have enough memory allocated. - for (int i = 0; i < exrImage.width * exrImage.height; i++) { - out_rgba[4 * i + 0] = reinterpret_cast(exrImage.images)[idxR][i]; - out_rgba[4 * i + 1] = reinterpret_cast(exrImage.images)[idxG][i]; - out_rgba[4 * i + 2] = reinterpret_cast(exrImage.images)[idxB][i]; + for (int i = 0; i < exr_image.width * exr_image.height; i++) { + out_rgba[4 * i + 0] = reinterpret_cast(exr_image.images)[idxR][i]; + out_rgba[4 * i + 1] = reinterpret_cast(exr_image.images)[idxG][i]; + out_rgba[4 * i + 2] = reinterpret_cast(exr_image.images)[idxB][i]; if (idxA > 0) { out_rgba[4 * i + 3] = - reinterpret_cast(exrImage.images)[idxA][i]; + reinterpret_cast(exr_image.images)[idxA][i]; } else { out_rgba[4 * i + 3] = 1.0; } } - return 0; + return TINYEXR_SUCCESS; } -int LoadMultiChannelEXRFromFile(EXRImage *exrImage, const char *filename, - const char **err) { - if (exrImage == NULL) { +int LoadEXRImageFromFile(EXRImage *exr_image, const EXRHeader *exr_header, + const char *filename, const char **err) { + if (exr_image == NULL) { if (err) { (*err) = "Invalid argument."; } - return -1; + return TINYEXR_ERROR_INVALID_ARGUMENT; } +#ifdef _WIN32 + FILE *fp = NULL; + fopen_s(&fp, filename, "rb"); +#else FILE *fp = fopen(filename, "rb"); +#endif if (!fp) { if (err) { (*err) = "Cannot read file."; } - return -1; + return TINYEXR_ERROR_CANT_OPEN_FILE; } size_t filesize; // Compute size fseek(fp, 0, SEEK_END); - filesize = ftell(fp); + filesize = static_cast(ftell(fp)); fseek(fp, 0, SEEK_SET); - std::vector buf(filesize); // @todo { use mmap } + std::vector buf(filesize); // @todo { use mmap } { size_t ret; ret = fread(&buf[0], 1, filesize, fp); @@ -9067,774 +10825,71 @@ int LoadMultiChannelEXRFromFile(EXRImage *exrImage, const char *filename, (void)ret; } - return LoadMultiChannelEXRFromMemory(exrImage, &buf.at(0), err); + return LoadEXRImageFromMemory(exr_image, exr_header, &buf.at(0), filesize, err); } -int LoadMultiChannelEXRFromMemory(EXRImage *exrImage, - const unsigned char *memory, - const char **err) { - if (exrImage == NULL || memory == NULL) { +int LoadEXRImageFromMemory(EXRImage *exr_image, const EXRHeader *exr_header, + const unsigned char *memory, const size_t size, const char **err) { + if (exr_image == NULL || memory == NULL || (size < tinyexr::kEXRVersionSize)) { if (err) { (*err) = "Invalid argument."; } - return -1; + return TINYEXR_ERROR_INVALID_ARGUMENT; } - const char *buf = reinterpret_cast(memory); - - const char *head = &buf[0]; - const char *marker = &buf[0]; - - // Header check. - { - const char header[] = {0x76, 0x2f, 0x31, 0x01}; - - if (memcmp(marker, header, 4) != 0) { - if (err) { - (*err) = "Header mismatch."; - } - return -3; + if (exr_header->header_len == 0) { + if (err) { + (*err) = "EXRHeader is not initialized."; } - marker += 4; + return TINYEXR_ERROR_INVALID_ARGUMENT; } - // Version, scanline. - { - // must be [2, 0, 0, 0] - if (marker[0] != 2 || marker[1] != 0 || marker[2] != 0 || marker[3] != 0) { - if (err) { - (*err) = "Unsupported version or scanline."; - } - return -4; - } - - marker += 4; - } - - int dx = -1; - int dy = -1; - int dw = -1; - int dh = -1; - int numScanlineBlocks = 1; // 16 for ZIP compression. - int compressionType = -1; - int numChannels = -1; - unsigned char lineOrder = 0; // 0 -> increasing y; 1 -> decreasing - std::vector channels; - - // Read attributes - for (;;) { - std::string attrName; - std::string attrType; - std::vector data; - const char *marker_next = ReadAttribute(attrName, attrType, data, marker); - if (marker_next == NULL) { - marker++; // skip '\0' - break; - } - - if (attrName.compare("compression") == 0) { - // mwkm - // 0 : NO_COMPRESSION - // 1 : RLE - // 2 : ZIPS (Single scanline) - // 3 : ZIP (16-line block) - // 4 : PIZ (32-line block) - if (data[0] != TINYEXR_COMPRESSIONTYPE_NONE && - data[0] != TINYEXR_COMPRESSIONTYPE_ZIPS && - data[0] != TINYEXR_COMPRESSIONTYPE_ZIP && - data[0] != TINYEXR_COMPRESSIONTYPE_PIZ) { - - if (err) { - (*err) = "Unsupported compression type."; - } - return -5; - } - - compressionType = data[0]; - - if (compressionType == TINYEXR_COMPRESSIONTYPE_ZIP) { - numScanlineBlocks = 16; - } else if (compressionType == TINYEXR_COMPRESSIONTYPE_PIZ) { - numScanlineBlocks = 32; - } - - } else if (attrName.compare("channels") == 0) { - - // name: zero-terminated string, from 1 to 255 bytes long - // pixel type: int, possible values are: UINT = 0 HALF = 1 FLOAT = 2 - // pLinear: unsigned char, possible values are 0 and 1 - // reserved: three chars, should be zero - // xSampling: int - // ySampling: int - - ReadChannelInfo(channels, data); - - numChannels = channels.size(); - - if (numChannels < 1) { - if (err) { - (*err) = "Invalid channels format."; - } - return -6; - } - - } else if (attrName.compare("dataWindow") == 0) { - memcpy(&dx, &data.at(0), sizeof(int)); - memcpy(&dy, &data.at(4), sizeof(int)); - memcpy(&dw, &data.at(8), sizeof(int)); - memcpy(&dh, &data.at(12), sizeof(int)); - if (IsBigEndian()) { - swap4(reinterpret_cast(&dx)); - swap4(reinterpret_cast(&dy)); - swap4(reinterpret_cast(&dw)); - swap4(reinterpret_cast(&dh)); - } - } else if (attrName.compare("displayWindow") == 0) { - int x, y, w, h; - memcpy(&x, &data.at(0), sizeof(int)); - memcpy(&y, &data.at(4), sizeof(int)); - memcpy(&w, &data.at(8), sizeof(int)); - memcpy(&h, &data.at(12), sizeof(int)); - if (IsBigEndian()) { - swap4(reinterpret_cast(&x)); - swap4(reinterpret_cast(&y)); - swap4(reinterpret_cast(&w)); - swap4(reinterpret_cast(&h)); - } - } else if (attrName.compare("lineOrder") == 0) { - memcpy(&lineOrder, &data.at(0), sizeof(lineOrder)); - } - - marker = marker_next; - } - - assert(dx >= 0); - assert(dy >= 0); - assert(dw >= 0); - assert(dh >= 0); - assert(numChannels >= 1); - - int dataWidth = dw - dx + 1; - int dataHeight = dh - dy + 1; - - // Read offset tables. - int numBlocks = dataHeight / numScanlineBlocks; - if (numBlocks * numScanlineBlocks < dataHeight) { - numBlocks++; - } - - std::vector offsets(numBlocks); - - for (int y = 0; y < numBlocks; y++) { - long long offset; - memcpy(&offset, marker, sizeof(long long)); - if (IsBigEndian()) { - swap8(reinterpret_cast(&offset)); - } - marker += sizeof(long long); // = 8 - offsets[y] = offset; - } - - exrImage->images = reinterpret_cast( - (float **)malloc(sizeof(float *) * numChannels)); - - std::vector channelOffsetList(numChannels); - int pixelDataSize = 0; - size_t channelOffset = 0; - for (int c = 0; c < numChannels; c++) { - channelOffsetList[c] = channelOffset; - if (channels[c].pixelType == TINYEXR_PIXELTYPE_HALF) { - pixelDataSize += sizeof(unsigned short); - channelOffset += sizeof(unsigned short); - // Alloc internal image for half type. - if (exrImage->requested_pixel_types[c] == TINYEXR_PIXELTYPE_HALF) { - exrImage->images[c] = - reinterpret_cast((unsigned short *)malloc( - sizeof(unsigned short) * dataWidth * dataHeight)); - } else if (exrImage->requested_pixel_types[c] == - TINYEXR_PIXELTYPE_FLOAT) { - exrImage->images[c] = reinterpret_cast( - (float *)malloc(sizeof(float) * dataWidth * dataHeight)); - } else { - assert(0); - } - } else if (channels[c].pixelType == TINYEXR_PIXELTYPE_FLOAT) { - pixelDataSize += sizeof(float); - channelOffset += sizeof(float); - exrImage->images[c] = reinterpret_cast( - (float *)malloc(sizeof(float) * dataWidth * dataHeight)); - } else if (channels[c].pixelType == TINYEXR_PIXELTYPE_UINT) { - pixelDataSize += sizeof(unsigned int); - channelOffset += sizeof(unsigned int); - exrImage->images[c] = reinterpret_cast(( - unsigned int *)malloc(sizeof(unsigned int) * dataWidth * dataHeight)); - } else { - assert(0); - } - } - -#ifdef _OPENMP -#pragma omp parallel for -#endif - for (int y = 0; y < numBlocks; y++) { - const unsigned char *dataPtr = - reinterpret_cast(head + offsets[y]); - // 4 byte: scan line - // 4 byte: data size - // ~ : pixel data(uncompressed or compressed) - int lineNo; - memcpy(&lineNo, dataPtr, sizeof(int)); - int dataLen; - memcpy(&dataLen, dataPtr + 4, sizeof(int)); - if (IsBigEndian()) { - swap4(reinterpret_cast(&lineNo)); - swap4(reinterpret_cast(&dataLen)); - } - - int endLineNo = (std::min)(lineNo + numScanlineBlocks, dataHeight); - - int numLines = endLineNo - lineNo; - - if (compressionType == 4) { // PIZ - // Allocate original data size. - std::vector outBuf(dataWidth * numLines * pixelDataSize); - unsigned int dstLen; - size_t tmpBufLen = dataWidth * numLines * pixelDataSize; - - DecompressPiz(reinterpret_cast(&outBuf.at(0)), dstLen, - dataPtr + 8, tmpBufLen, channels, dataWidth, numLines); - - bool isBigEndian = IsBigEndian(); - - // For ZIP_COMPRESSION: - // pixel sample data for channel 0 for scanline 0 - // pixel sample data for channel 1 for scanline 0 - // pixel sample data for channel ... for scanline 0 - // pixel sample data for channel n for scanline 0 - // pixel sample data for channel 0 for scanline 1 - // pixel sample data for channel 1 for scanline 1 - // pixel sample data for channel ... for scanline 1 - // pixel sample data for channel n for scanline 1 - // ... - for (int c = 0; c < numChannels; c++) { - - if (channels[c].pixelType == TINYEXR_PIXELTYPE_HALF) { - for (int v = 0; v < numLines; v++) { - const unsigned short *linePtr = reinterpret_cast( - &outBuf.at(v * pixelDataSize * dataWidth + - channelOffsetList[c] * dataWidth)); - for (int u = 0; u < dataWidth; u++) { - FP16 hf; - - hf.u = linePtr[u]; - - if (isBigEndian) { - swap2(reinterpret_cast(&hf.u)); - } - - if (exrImage->requested_pixel_types[c] == - TINYEXR_PIXELTYPE_HALF) { - unsigned short *image = - reinterpret_cast(exrImage->images)[c]; - if (lineOrder == 0) { - image += (lineNo + v) * dataWidth + u; - } else { - image += (dataHeight - 1 - (lineNo + v)) * dataWidth + u; - } - *image = hf.u; - } else { // HALF -> FLOAT - FP32 f32 = half_to_float(hf); - float *image = reinterpret_cast(exrImage->images)[c]; - if (lineOrder == 0) { - image += (lineNo + v) * dataWidth + u; - } else { - image += (dataHeight - 1 - (lineNo + v)) * dataWidth + u; - } - *image = f32.f; - } - } - } - } else if (channels[c].pixelType == TINYEXR_PIXELTYPE_UINT) { - - assert(exrImage->requested_pixel_types[c] == TINYEXR_PIXELTYPE_UINT); - - for (int v = 0; v < numLines; v++) { - const unsigned int *linePtr = reinterpret_cast( - &outBuf.at(v * pixelDataSize * dataWidth + - channelOffsetList[c] * dataWidth)); - for (int u = 0; u < dataWidth; u++) { - - unsigned int val = linePtr[u]; - - if (isBigEndian) { - swap4(&val); - } - - unsigned int *image = - reinterpret_cast(exrImage->images)[c]; - if (lineOrder == 0) { - image += (lineNo + v) * dataWidth + u; - } else { - image += (dataHeight - 1 - (lineNo + v)) * dataWidth + u; - } - *image = val; - } - } - } else if (channels[c].pixelType == TINYEXR_PIXELTYPE_FLOAT) { - assert(exrImage->requested_pixel_types[c] == TINYEXR_PIXELTYPE_FLOAT); - for (int v = 0; v < numLines; v++) { - const float *linePtr = reinterpret_cast( - &outBuf.at(v * pixelDataSize * dataWidth + - channelOffsetList[c] * dataWidth)); - for (int u = 0; u < dataWidth; u++) { - - float val = linePtr[u]; - - if (isBigEndian) { - swap4(reinterpret_cast(&val)); - } - - float *image = reinterpret_cast(exrImage->images)[c]; - if (lineOrder == 0) { - image += (lineNo + v) * dataWidth + u; - } else { - image += (dataHeight - 1 - (lineNo + v)) * dataWidth + u; - } - *image = val; - } - } - } else { - assert(0); - } - } - - // mwkm, ZIPS or ZIP both good to go - } else if (compressionType == 2 || compressionType == 3) { // ZIP - - // Allocate original data size. - std::vector outBuf(dataWidth * numLines * pixelDataSize); - - unsigned long dstLen = outBuf.size(); - DecompressZip(reinterpret_cast(&outBuf.at(0)), dstLen, - dataPtr + 8, dataLen); - - - bool isBigEndian = IsBigEndian(); - - // For ZIP_COMPRESSION: - // pixel sample data for channel 0 for scanline 0 - // pixel sample data for channel 1 for scanline 0 - // pixel sample data for channel ... for scanline 0 - // pixel sample data for channel n for scanline 0 - // pixel sample data for channel 0 for scanline 1 - // pixel sample data for channel 1 for scanline 1 - // pixel sample data for channel ... for scanline 1 - // pixel sample data for channel n for scanline 1 - // ... - for (int c = 0; c < numChannels; c++) { - - if (channels[c].pixelType == TINYEXR_PIXELTYPE_HALF) { - for (int v = 0; v < numLines; v++) { - const unsigned short *linePtr = reinterpret_cast( - &outBuf.at(v * pixelDataSize * dataWidth + - channelOffsetList[c] * dataWidth)); - for (int u = 0; u < dataWidth; u++) { - FP16 hf; - - hf.u = linePtr[u]; - - if (isBigEndian) { - swap2(reinterpret_cast(&hf.u)); - } - - if (exrImage->requested_pixel_types[c] == - TINYEXR_PIXELTYPE_HALF) { - unsigned short *image = - reinterpret_cast(exrImage->images)[c]; - if (lineOrder == 0) { - image += (lineNo + v) * dataWidth + u; - } else { - image += (dataHeight - 1 - (lineNo + v)) * dataWidth + u; - } - *image = hf.u; - } else { // HALF -> FLOAT - FP32 f32 = half_to_float(hf); - float *image = reinterpret_cast(exrImage->images)[c]; - if (lineOrder == 0) { - image += (lineNo + v) * dataWidth + u; - } else { - image += (dataHeight - 1 - (lineNo + v)) * dataWidth + u; - } - *image = f32.f; - } - } - } - } else if (channels[c].pixelType == TINYEXR_PIXELTYPE_UINT) { - - assert(exrImage->requested_pixel_types[c] == TINYEXR_PIXELTYPE_UINT); - - for (int v = 0; v < numLines; v++) { - const unsigned int *linePtr = reinterpret_cast( - &outBuf.at(v * pixelDataSize * dataWidth + - channelOffsetList[c] * dataWidth)); - for (int u = 0; u < dataWidth; u++) { - - unsigned int val = linePtr[u]; - - if (isBigEndian) { - swap4(&val); - } - - unsigned int *image = - reinterpret_cast(exrImage->images)[c]; - if (lineOrder == 0) { - image += (lineNo + v) * dataWidth + u; - } else { - image += (dataHeight - 1 - (lineNo + v)) * dataWidth + u; - } - *image = val; - } - } - } else if (channels[c].pixelType == TINYEXR_PIXELTYPE_FLOAT) { - assert(exrImage->requested_pixel_types[c] == TINYEXR_PIXELTYPE_FLOAT); - for (int v = 0; v < numLines; v++) { - const float *linePtr = reinterpret_cast( - &outBuf.at(v * pixelDataSize * dataWidth + - channelOffsetList[c] * dataWidth)); - for (int u = 0; u < dataWidth; u++) { - - float val = linePtr[u]; - - if (isBigEndian) { - swap4(reinterpret_cast(&val)); - } - - float *image = reinterpret_cast(exrImage->images)[c]; - if (lineOrder == 0) { - image += (lineNo + v) * dataWidth + u; - } else { - image += (dataHeight - 1 - (lineNo + v)) * dataWidth + u; - } - *image = val; - } - } - } else { - assert(0); - } - } - - } else if (compressionType == 0) { // No compression - - bool isBigEndian = IsBigEndian(); - - for (int c = 0; c < numChannels; c++) { - - if (channels[c].pixelType == TINYEXR_PIXELTYPE_HALF) { - - const unsigned short *linePtr = - reinterpret_cast( - dataPtr + 8 + c * dataWidth * sizeof(unsigned short)); - - if (exrImage->requested_pixel_types[c] == TINYEXR_PIXELTYPE_HALF) { - unsigned short *outLine = - reinterpret_cast(exrImage->images[c]); - if (lineOrder == 0) { - outLine += y * dataWidth; - } else { - outLine += (dataHeight - 1 - y) * dataWidth; - } - - for (int u = 0; u < dataWidth; u++) { - FP16 hf; - - hf.u = linePtr[u]; - - if (isBigEndian) { - swap2(reinterpret_cast(&hf.u)); - } - - outLine[u] = hf.u; - } - } else if (exrImage->requested_pixel_types[c] == - TINYEXR_PIXELTYPE_FLOAT) { - float *outLine = reinterpret_cast(exrImage->images[c]); - if (lineOrder == 0) { - outLine += y * dataWidth; - } else { - outLine += (dataHeight - 1 - y) * dataWidth; - } - - for (int u = 0; u < dataWidth; u++) { - FP16 hf; - - hf.u = linePtr[u]; - - if (isBigEndian) { - swap2(reinterpret_cast(&hf.u)); - } - - FP32 f32 = half_to_float(hf); - - outLine[u] = f32.f; - } - } else { - assert(0); - } - } else if (channels[c].pixelType == TINYEXR_PIXELTYPE_FLOAT) { - - const float *linePtr = reinterpret_cast( - dataPtr + 8 + c * dataWidth * sizeof(float)); - - float *outLine = reinterpret_cast(exrImage->images[c]); - if (lineOrder == 0) { - outLine += y * dataWidth; - } else { - outLine += (dataHeight - 1 - y) * dataWidth; - } - - for (int u = 0; u < dataWidth; u++) { - float val = linePtr[u]; - - if (isBigEndian) { - swap4(reinterpret_cast(&val)); - } - - outLine[u] = val; - } - } else if (channels[c].pixelType == TINYEXR_PIXELTYPE_UINT) { - - const unsigned int *linePtr = reinterpret_cast( - dataPtr + 8 + c * dataWidth * sizeof(unsigned int)); - - unsigned int *outLine = - reinterpret_cast(exrImage->images[c]); - if (lineOrder == 0) { - outLine += y * dataWidth; - } else { - outLine += (dataHeight - 1 - y) * dataWidth; - } - - for (int u = 0; u < dataWidth; u++) { - unsigned int val = linePtr[u]; - - if (isBigEndian) { - swap4(reinterpret_cast(&val)); - } - - outLine[u] = val; - } - } - } - } - } // omp parallel - - { - exrImage->channel_names = - (const char **)malloc(sizeof(const char *) * numChannels); - for (int c = 0; c < numChannels; c++) { -#ifdef _WIN32 - exrImage->channel_names[c] = _strdup(channels[c].name.c_str()); -#else - exrImage->channel_names[c] = strdup(channels[c].name.c_str()); -#endif - } - exrImage->num_channels = numChannels; - - exrImage->width = dataWidth; - exrImage->height = dataHeight; - - // Fill with requested_pixel_types. - exrImage->pixel_types = (int *)malloc(sizeof(int *) * numChannels); - for (int c = 0; c < numChannels; c++) { - exrImage->pixel_types[c] = exrImage->requested_pixel_types[c]; - } - } - - return 0; // OK + const unsigned char *head = memory; + const unsigned char *marker = reinterpret_cast( + memory + exr_header->header_len + + 8); // +8 for magic number + version header. + return tinyexr::DecodeEXRImage(exr_image, exr_header, head, marker, size, err); } -// @deprecated -#if 0 -int SaveEXR(const float *in_rgba, int width, int height, const char *filename, - const char **err) { - if (in_rgba == NULL || filename == NULL) { +size_t SaveEXRImageToMemory(const EXRImage *exr_image, + const EXRHeader *exr_header, + unsigned char **memory_out, const char **err) { + if (exr_image == NULL || memory_out == NULL || + exr_header->compression_type < 0) { if (err) { (*err) = "Invalid argument."; } - return -1; + return 0; // @fixme } - FILE *fp = fopen(filename, "wb"); - if (!fp) { +#if !TINYEXR_USE_PIZ + if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_PIZ) { if (err) { - (*err) = "Cannot write a file."; - } - return -1; - } - - // Header - { - const char header[] = {0x76, 0x2f, 0x31, 0x01}; - size_t n = fwrite(header, 1, 4, fp); - assert(n == 4); - } - - // Version, scanline. - { - const char marker[] = {2, 0, 0, 0}; - size_t n = fwrite(marker, 1, 4, fp); - assert(n == 4); - } - - int numScanlineBlocks = 16; // 16 for ZIP compression. - - // Write attributes. - { - unsigned char data[] = { - 'A', 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 'B', - 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 'G', 0, - 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 'R', 0, 1, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0}; // last 0 = - // terminator. - - WriteAttribute(fp, "channels", "chlist", data, 18 * 4 + 1); // +1 = null - } - - { - int compressionType = 3; // ZIP compression - WriteAttribute(fp, "compression", "compression", - reinterpret_cast(&compressionType), - 1); - } - - { - int data[4] = {0, 0, width - 1, height - 1}; - WriteAttribute(fp, "dataWindow", "box2i", - reinterpret_cast(data), - sizeof(int) * 4); - WriteAttribute(fp, "displayWindow", "box2i", - reinterpret_cast(data), - sizeof(int) * 4); - } - - { - unsigned char lineOrder = 0; // increasingY - WriteAttribute(fp, "lineOrder", "lineOrder", &lineOrder, 1); - } - - { - float aspectRatio = 1.0f; - WriteAttribute(fp, "pixelAspectRatio", "float", - reinterpret_cast(&aspectRatio), - sizeof(float)); - } - - { - float center[2] = {0.0f, 0.0f}; - WriteAttribute(fp, "screenWindowCenter", "v2f", - reinterpret_cast(center), - 2 * sizeof(float)); - } - - { - float w = (float)width; - WriteAttribute(fp, "screenWindowWidth", "float", - reinterpret_cast(&w), sizeof(float)); - } - - { // end of header - unsigned char e = 0; - fwrite(&e, 1, 1, fp); - } - - int numBlocks = height / numScanlineBlocks; - if (numBlocks * numScanlineBlocks < height) { - numBlocks++; - } - - std::vector offsets(numBlocks); - - size_t headerSize = ftell(fp); // sizeof(header) - long long offset = - headerSize + - numBlocks * sizeof(long long); // sizeof(header) + sizeof(offsetTable) - - std::vector data; - - for (int i = 0; i < numBlocks; i++) { - int startY = numScanlineBlocks * i; - int endY = (std::min)(numScanlineBlocks * (i + 1), height); - int h = endY - startY; - - std::vector buf(4 * width * h); - - for (int y = 0; y < h; y++) { - for (int x = 0; x < width; x++) { - FP32 r, g, b, a; - r.f = in_rgba[4 * ((y + startY) * width + x) + 0]; - g.f = in_rgba[4 * ((y + startY) * width + x) + 1]; - b.f = in_rgba[4 * ((y + startY) * width + x) + 2]; - a.f = in_rgba[4 * ((y + startY) * width + x) + 3]; - - FP16 hr, hg, hb, ha; - hr = float_to_half_full(r); - hg = float_to_half_full(g); - hb = float_to_half_full(b); - ha = float_to_half_full(a); - - // Assume increasing Y - buf[4 * y * width + 3 * width + x] = hr.u; - buf[4 * y * width + 2 * width + x] = hg.u; - buf[4 * y * width + 1 * width + x] = hb.u; - buf[4 * y * width + 0 * width + x] = ha.u; - } - } - - int bound = miniz::mz_compressBound(buf.size() * sizeof(unsigned short)); - - std::vector block( - miniz::mz_compressBound(buf.size() * sizeof(unsigned short))); - unsigned long long outSize = block.size(); - - CompressZip(&block.at(0), outSize, - reinterpret_cast(&buf.at(0)), - buf.size() * sizeof(unsigned short)); - - // 4 byte: scan line - // 4 byte: data size - // ~ : pixel data(compressed) - std::vector header(8); - unsigned int dataLen = outSize; // truncate - memcpy(&header.at(0), &startY, sizeof(int)); - memcpy(&header.at(4), &dataLen, sizeof(unsigned int)); - - data.insert(data.end(), header.begin(), header.end()); - data.insert(data.end(), block.begin(), block.begin() + dataLen); - - offsets[i] = offset; - offset += dataLen + 8; // 8 = sizeof(blockHeader) - } - - fwrite(&offsets.at(0), 1, sizeof(unsigned long long) * numBlocks, fp); - - fwrite(&data.at(0), 1, data.size(), fp); - - fclose(fp); - - return 0; // OK -} -#endif - -size_t SaveMultiChannelEXRToMemory(const EXRImage *exrImage, - unsigned char **memory_out, - const char **err) { - if (exrImage == NULL || memory_out == NULL || exrImage->compression < 0 || - exrImage->compression > TINYEXR_COMPRESSIONTYPE_PIZ) { - if (err) { - (*err) = "Invalid argument."; + (*err) = "PIZ compression is not supported in this build."; } return 0; } +#endif + +#if !TINYEXR_USE_ZFP + if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_ZFP) { + if (err) { + (*err) = "ZFP compression is not supported in this build."; + } + return 0; + } +#endif + +#if TINYEXR_USE_ZFP + for (size_t i = 0; i < static_cast(exr_header->num_channels); i++) { + if (exr_header->requested_pixel_types[i] != TINYEXR_PIXELTYPE_FLOAT) { + if (err) { + (*err) = "Pixel type must be FLOAT for ZFP compression."; + } + return 0; + } + } +#endif std::vector memory; @@ -9846,393 +10901,518 @@ size_t SaveMultiChannelEXRToMemory(const EXRImage *exrImage, // Version, scanline. { - const char marker[] = {2, 0, 0, 0}; + char marker[] = {2, 0, 0, 0}; + /* @todo + if (exr_header->tiled) { + marker[1] |= 0x2; + } + if (exr_header->long_name) { + marker[1] |= 0x4; + } + if (exr_header->non_image) { + marker[1] |= 0x8; + } + if (exr_header->multipart) { + marker[1] |= 0x10; + } + */ memory.insert(memory.end(), marker, marker + 4); } - int numScanlineBlocks = 1; - if (exrImage->compression == TINYEXR_COMPRESSIONTYPE_ZIP) { - numScanlineBlocks = 16; - } else if (exrImage->compression == TINYEXR_COMPRESSIONTYPE_PIZ) { - numScanlineBlocks = 32; + int num_scanlines = 1; + if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_ZIP) { + num_scanlines = 16; + } else if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_PIZ) { + num_scanlines = 32; + } else if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_ZFP) { + num_scanlines = 16; } // Write attributes. + std::vector channels; { std::vector data; - std::vector channels; - for (int c = 0; c < exrImage->num_channels; c++) { - ChannelInfo info; - info.pLinear = 0; - info.pixelType = exrImage->requested_pixel_types[c]; - info.xSampling = 1; - info.ySampling = 1; - info.name = std::string(exrImage->channel_names[c]); + for (int c = 0; c < exr_header->num_channels; c++) { + tinyexr::ChannelInfo info; + info.p_linear = 0; + info.pixel_type = exr_header->requested_pixel_types[c]; + info.x_sampling = 1; + info.y_sampling = 1; + info.name = std::string(exr_header->channels[c].name); channels.push_back(info); } - WriteChannelInfo(data, channels); + tinyexr::WriteChannelInfo(data, channels); - WriteAttributeToMemory(memory, "channels", "chlist", &data.at(0), - data.size()); // +1 = null + tinyexr::WriteAttributeToMemory(&memory, "channels", "chlist", &data.at(0), + static_cast(data.size())); } { - int comp = exrImage->compression; - if (IsBigEndian()) { - swap4(reinterpret_cast(&comp)); - } - WriteAttributeToMemory(memory, "compression", "compression", - reinterpret_cast(&comp), 1); + int comp = exr_header->compression_type; + tinyexr::swap4(reinterpret_cast(&comp)); + tinyexr::WriteAttributeToMemory( + &memory, "compression", "compression", + reinterpret_cast(&comp), 1); } { - int data[4] = {0, 0, exrImage->width - 1, exrImage->height - 1}; - if (IsBigEndian()) { - swap4(reinterpret_cast(&data[0])); - swap4(reinterpret_cast(&data[1])); - swap4(reinterpret_cast(&data[2])); - swap4(reinterpret_cast(&data[3])); - } - WriteAttributeToMemory(memory, "dataWindow", "box2i", - reinterpret_cast(data), - sizeof(int) * 4); - WriteAttributeToMemory(memory, "displayWindow", "box2i", - reinterpret_cast(data), - sizeof(int) * 4); + int data[4] = {0, 0, exr_image->width - 1, exr_image->height - 1}; + tinyexr::swap4(reinterpret_cast(&data[0])); + tinyexr::swap4(reinterpret_cast(&data[1])); + tinyexr::swap4(reinterpret_cast(&data[2])); + tinyexr::swap4(reinterpret_cast(&data[3])); + tinyexr::WriteAttributeToMemory( + &memory, "dataWindow", "box2i", + reinterpret_cast(data), sizeof(int) * 4); + tinyexr::WriteAttributeToMemory( + &memory, "displayWindow", "box2i", + reinterpret_cast(data), sizeof(int) * 4); } { - unsigned char lineOrder = 0; // increasingY - WriteAttributeToMemory(memory, "lineOrder", "lineOrder", &lineOrder, 1); + unsigned char line_order = 0; // @fixme { read line_order from EXRHeader } + tinyexr::WriteAttributeToMemory(&memory, "lineOrder", "lineOrder", + &line_order, 1); } { float aspectRatio = 1.0f; - if (IsBigEndian()) { - swap4(reinterpret_cast(&aspectRatio)); - } - WriteAttributeToMemory( - memory, "pixelAspectRatio", "float", + tinyexr::swap4(reinterpret_cast(&aspectRatio)); + tinyexr::WriteAttributeToMemory( + &memory, "pixelAspectRatio", "float", reinterpret_cast(&aspectRatio), sizeof(float)); } { float center[2] = {0.0f, 0.0f}; - if (IsBigEndian()) { - swap4(reinterpret_cast(¢er[0])); - swap4(reinterpret_cast(¢er[1])); - } - WriteAttributeToMemory(memory, "screenWindowCenter", "v2f", - reinterpret_cast(center), - 2 * sizeof(float)); + tinyexr::swap4(reinterpret_cast(¢er[0])); + tinyexr::swap4(reinterpret_cast(¢er[1])); + tinyexr::WriteAttributeToMemory( + &memory, "screenWindowCenter", "v2f", + reinterpret_cast(center), 2 * sizeof(float)); } { - float w = (float)exrImage->width; - if (IsBigEndian()) { - swap4(reinterpret_cast(&w)); - } - WriteAttributeToMemory(memory, "screenWindowWidth", "float", - reinterpret_cast(&w), - sizeof(float)); + float w = static_cast(exr_image->width); + tinyexr::swap4(reinterpret_cast(&w)); + tinyexr::WriteAttributeToMemory(&memory, "screenWindowWidth", "float", + reinterpret_cast(&w), + sizeof(float)); } // Custom attributes - if (exrImage->num_custom_attributes > 0) { - // @todo { endian } - for (int i = 0; i < exrImage->num_custom_attributes; i++) { - WriteAttributeToMemory(memory, exrImage->custom_attributes[i].name, - exrImage->custom_attributes[i].type, - reinterpret_cast( - &exrImage->custom_attributes[i].value), - exrImage->custom_attributes[i].size); + if (exr_header->num_custom_attributes > 0) { + for (int i = 0; i < exr_header->num_custom_attributes; i++) { + tinyexr::WriteAttributeToMemory( + &memory, exr_header->custom_attributes[i].name, + exr_header->custom_attributes[i].type, + reinterpret_cast( + exr_header->custom_attributes[i].value), + exr_header->custom_attributes[i].size); } } - { // end of header + { // end of header unsigned char e = 0; memory.push_back(e); } - int numBlocks = exrImage->height / numScanlineBlocks; - if (numBlocks * numScanlineBlocks < exrImage->height) { - numBlocks++; + int num_blocks = exr_image->height / num_scanlines; + if (num_blocks * num_scanlines < exr_image->height) { + num_blocks++; } - std::vector offsets(numBlocks); + std::vector offsets(static_cast(num_blocks)); size_t headerSize = memory.size(); - long long offset = + tinyexr::tinyexr_uint64 offset = headerSize + - numBlocks * sizeof(long long); // sizeof(header) + sizeof(offsetTable) + static_cast(num_blocks) * + sizeof( + tinyexr::tinyexr_int64); // sizeof(header) + sizeof(offsetTable) std::vector data; - bool isBigEndian = IsBigEndian(); + std::vector > data_list( + static_cast(num_blocks)); + std::vector channel_offset_list( + static_cast(exr_header->num_channels)); - std::vector > dataList(numBlocks); - std::vector channelOffsetList(exrImage->num_channels); - - int pixelDataSize = 0; - size_t channelOffset = 0; - for (int c = 0; c < exrImage->num_channels; c++) { - channelOffsetList[c] = channelOffset; - if (exrImage->requested_pixel_types[c] == TINYEXR_PIXELTYPE_HALF) { - pixelDataSize += sizeof(unsigned short); - channelOffset += sizeof(unsigned short); - } else if (exrImage->requested_pixel_types[c] == TINYEXR_PIXELTYPE_FLOAT) { - pixelDataSize += sizeof(float); - channelOffset += sizeof(float); - } else if (exrImage->requested_pixel_types[c] == TINYEXR_PIXELTYPE_UINT) { - pixelDataSize += sizeof(unsigned int); - channelOffset += sizeof(unsigned int); + int pixel_data_size = 0; + size_t channel_offset = 0; + for (size_t c = 0; c < static_cast(exr_header->num_channels); c++) { + channel_offset_list[c] = channel_offset; + if (exr_header->requested_pixel_types[c] == TINYEXR_PIXELTYPE_HALF) { + pixel_data_size += sizeof(unsigned short); + channel_offset += sizeof(unsigned short); + } else if (exr_header->requested_pixel_types[c] == + TINYEXR_PIXELTYPE_FLOAT) { + pixel_data_size += sizeof(float); + channel_offset += sizeof(float); + } else if (exr_header->requested_pixel_types[c] == TINYEXR_PIXELTYPE_UINT) { + pixel_data_size += sizeof(unsigned int); + channel_offset += sizeof(unsigned int); } else { assert(0); } } +#if TINYEXR_USE_ZFP + tinyexr::ZFPCompressionParam zfp_compression_param; + + // Use ZFP compression parameter from custom attributes(if such a parameter + // exists) + { + bool ret = tinyexr::FindZFPCompressionParam( + &zfp_compression_param, exr_header->custom_attributes, + exr_header->num_custom_attributes); + + if (!ret) { + // Use predefined compression parameter. + zfp_compression_param.type = 0; + zfp_compression_param.rate = 2; + } + } +#endif + +// Use signed int since some OpenMP compiler doesn't allow unsigned type for +// `parallel for` #ifdef _OPENMP #pragma omp parallel for #endif - for (int i = 0; i < numBlocks; i++) { - int startY = numScanlineBlocks * i; - int endY = (std::min)(numScanlineBlocks * (i + 1), exrImage->height); - int h = endY - startY; + for (int i = 0; i < num_blocks; i++) { + size_t ii = static_cast(i); + int start_y = num_scanlines * i; + int endY = (std::min)(num_scanlines * (i + 1), exr_image->height); + int h = endY - start_y; - std::vector buf(exrImage->width * h * pixelDataSize); + std::vector buf( + static_cast(exr_image->width * h * pixel_data_size)); - for (int c = 0; c < exrImage->num_channels; c++) { - if (exrImage->pixel_types[c] == TINYEXR_PIXELTYPE_HALF) { - - if (exrImage->requested_pixel_types[c] == TINYEXR_PIXELTYPE_FLOAT) { + for (size_t c = 0; c < static_cast(exr_header->num_channels); c++) { + if (exr_header->pixel_types[c] == TINYEXR_PIXELTYPE_HALF) { + if (exr_header->requested_pixel_types[c] == TINYEXR_PIXELTYPE_FLOAT) { for (int y = 0; y < h; y++) { - for (int x = 0; x < exrImage->width; x++) { - FP16 h16; + for (int x = 0; x < exr_image->width; x++) { + tinyexr::FP16 h16; h16.u = reinterpret_cast( - exrImage->images)[c][(y + startY) * exrImage->width + x]; + exr_image->images)[c][(y + start_y) * exr_image->width + x]; - FP32 f32 = half_to_float(h16); + tinyexr::FP32 f32 = half_to_float(h16); - if (isBigEndian) { - swap4(reinterpret_cast(&f32.f)); - } + tinyexr::swap4(reinterpret_cast(&f32.f)); // Assume increasing Y - float *linePtr = reinterpret_cast( - &buf.at(pixelDataSize * y * exrImage->width + - channelOffsetList[c] * exrImage->width)); - linePtr[x] = f32.f; + float *line_ptr = reinterpret_cast(&buf.at( + static_cast(pixel_data_size * y * exr_image->width) + + channel_offset_list[c] * + static_cast(exr_image->width))); + line_ptr[x] = f32.f; } } - } else if (exrImage->requested_pixel_types[c] == + } else if (exr_header->requested_pixel_types[c] == TINYEXR_PIXELTYPE_HALF) { for (int y = 0; y < h; y++) { - for (int x = 0; x < exrImage->width; x++) { + for (int x = 0; x < exr_image->width; x++) { unsigned short val = reinterpret_cast( - exrImage->images)[c][(y + startY) * exrImage->width + x]; + exr_image->images)[c][(y + start_y) * exr_image->width + x]; - if (isBigEndian) { - swap2(&val); - } + tinyexr::swap2(&val); // Assume increasing Y - unsigned short *linePtr = reinterpret_cast( - &buf.at(pixelDataSize * y * exrImage->width + - channelOffsetList[c] * exrImage->width)); - linePtr[x] = val; + unsigned short *line_ptr = reinterpret_cast( + &buf.at(static_cast(pixel_data_size * y * + exr_image->width) + + channel_offset_list[c] * + static_cast(exr_image->width))); + line_ptr[x] = val; } } } else { assert(0); } - } else if (exrImage->pixel_types[c] == TINYEXR_PIXELTYPE_FLOAT) { - - if (exrImage->requested_pixel_types[c] == TINYEXR_PIXELTYPE_HALF) { + } else if (exr_header->pixel_types[c] == TINYEXR_PIXELTYPE_FLOAT) { + if (exr_header->requested_pixel_types[c] == TINYEXR_PIXELTYPE_HALF) { for (int y = 0; y < h; y++) { - for (int x = 0; x < exrImage->width; x++) { - FP32 f32; + for (int x = 0; x < exr_image->width; x++) { + tinyexr::FP32 f32; f32.f = reinterpret_cast( - exrImage->images)[c][(y + startY) * exrImage->width + x]; + exr_image->images)[c][(y + start_y) * exr_image->width + x]; - FP16 h16; + tinyexr::FP16 h16; h16 = float_to_half_full(f32); - if (isBigEndian) { - swap2(reinterpret_cast(&h16.u)); - } + tinyexr::swap2(reinterpret_cast(&h16.u)); // Assume increasing Y - unsigned short *linePtr = reinterpret_cast( - &buf.at(pixelDataSize * y * exrImage->width + - channelOffsetList[c] * exrImage->width)); - linePtr[x] = h16.u; + unsigned short *line_ptr = reinterpret_cast( + &buf.at(static_cast(pixel_data_size * y * + exr_image->width) + + channel_offset_list[c] * + static_cast(exr_image->width))); + line_ptr[x] = h16.u; } } - } else if (exrImage->requested_pixel_types[c] == + } else if (exr_header->requested_pixel_types[c] == TINYEXR_PIXELTYPE_FLOAT) { for (int y = 0; y < h; y++) { - for (int x = 0; x < exrImage->width; x++) { + for (int x = 0; x < exr_image->width; x++) { float val = reinterpret_cast( - exrImage->images)[c][(y + startY) * exrImage->width + x]; + exr_image->images)[c][(y + start_y) * exr_image->width + x]; - if (isBigEndian) { - swap4(reinterpret_cast(&val)); - } + tinyexr::swap4(reinterpret_cast(&val)); // Assume increasing Y - float *linePtr = reinterpret_cast( - &buf.at(pixelDataSize * y * exrImage->width + - channelOffsetList[c] * exrImage->width)); - linePtr[x] = val; + float *line_ptr = reinterpret_cast(&buf.at( + static_cast(pixel_data_size * y * exr_image->width) + + channel_offset_list[c] * + static_cast(exr_image->width))); + line_ptr[x] = val; } } } else { assert(0); } - } else if (exrImage->pixel_types[c] == TINYEXR_PIXELTYPE_UINT) { - + } else if (exr_header->pixel_types[c] == TINYEXR_PIXELTYPE_UINT) { for (int y = 0; y < h; y++) { - for (int x = 0; x < exrImage->width; x++) { + for (int x = 0; x < exr_image->width; x++) { unsigned int val = reinterpret_cast( - exrImage->images)[c][(y + startY) * exrImage->width + x]; + exr_image->images)[c][(y + start_y) * exr_image->width + x]; - if (isBigEndian) { - swap4(&val); - } + tinyexr::swap4(&val); // Assume increasing Y - unsigned int *linePtr = reinterpret_cast( - &buf.at(pixelDataSize * y * exrImage->width + - channelOffsetList[c] * exrImage->width)); - linePtr[x] = val; + unsigned int *line_ptr = reinterpret_cast(&buf.at( + static_cast(pixel_data_size * y * exr_image->width) + + channel_offset_list[c] * + static_cast(exr_image->width))); + line_ptr[x] = val; } } } } - if (exrImage->compression == TINYEXR_COMPRESSIONTYPE_NONE) { - + if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_NONE) { // 4 byte: scan line // 4 byte: data size // ~ : pixel data(uncompressed) std::vector header(8); - unsigned int dataLen = (unsigned int)buf.size(); - memcpy(&header.at(0), &startY, sizeof(int)); - memcpy(&header.at(4), &dataLen, sizeof(unsigned int)); + unsigned int data_len = static_cast(buf.size()); + memcpy(&header.at(0), &start_y, sizeof(int)); + memcpy(&header.at(4), &data_len, sizeof(unsigned int)); - if (IsBigEndian()) { - swap4(reinterpret_cast(&header.at(0))); - swap4(reinterpret_cast(&header.at(4))); - } + tinyexr::swap4(reinterpret_cast(&header.at(0))); + tinyexr::swap4(reinterpret_cast(&header.at(4))); - dataList[i].insert(dataList[i].end(), header.begin(), header.end()); - dataList[i].insert(dataList[i].end(), buf.begin(), buf.begin() + dataLen); + data_list[ii].insert(data_list[ii].end(), header.begin(), header.end()); + data_list[ii].insert(data_list[ii].end(), buf.begin(), + buf.begin() + data_len); - } else if ((exrImage->compression == TINYEXR_COMPRESSIONTYPE_ZIPS) || - (exrImage->compression == TINYEXR_COMPRESSIONTYPE_ZIP)) { + } else if ((exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_ZIPS) || + (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_ZIP)) { +#if TINYEXR_USE_MINIZ + std::vector block( + tinyexr::miniz::mz_compressBound(buf.size())); +#else + std::vector block(compressBound(buf.size())); +#endif + tinyexr::tinyexr_uint64 outSize = block.size(); - std::vector block(miniz::mz_compressBound(buf.size())); - unsigned long long outSize = block.size(); - - CompressZip(&block.at(0), outSize, - reinterpret_cast(&buf.at(0)), - buf.size()); + tinyexr::CompressZip(&block.at(0), outSize, + reinterpret_cast(&buf.at(0)), + buf.size()); // 4 byte: scan line // 4 byte: data size // ~ : pixel data(compressed) std::vector header(8); - unsigned int dataLen = outSize; // truncate - memcpy(&header.at(0), &startY, sizeof(int)); - memcpy(&header.at(4), &dataLen, sizeof(unsigned int)); + unsigned int data_len = static_cast(outSize); // truncate + memcpy(&header.at(0), &start_y, sizeof(int)); + memcpy(&header.at(4), &data_len, sizeof(unsigned int)); - if (IsBigEndian()) { - swap4(reinterpret_cast(&header.at(0))); - swap4(reinterpret_cast(&header.at(4))); - } + tinyexr::swap4(reinterpret_cast(&header.at(0))); + tinyexr::swap4(reinterpret_cast(&header.at(4))); - dataList[i].insert(dataList[i].end(), header.begin(), header.end()); - dataList[i].insert(dataList[i].end(), block.begin(), - block.begin() + dataLen); + data_list[ii].insert(data_list[ii].end(), header.begin(), header.end()); + data_list[ii].insert(data_list[ii].end(), block.begin(), + block.begin() + data_len); - } else if (exrImage->compression == TINYEXR_COMPRESSIONTYPE_PIZ) { - // @todo + } else if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_RLE) { + // (buf.size() * 3) / 2 would be enough. + std::vector block((buf.size() * 3) / 2); + + tinyexr::tinyexr_uint64 outSize = block.size(); + + tinyexr::CompressRle(&block.at(0), outSize, + reinterpret_cast(&buf.at(0)), + buf.size()); + + // 4 byte: scan line + // 4 byte: data size + // ~ : pixel data(compressed) + std::vector header(8); + unsigned int data_len = static_cast(outSize); // truncate + memcpy(&header.at(0), &start_y, sizeof(int)); + memcpy(&header.at(4), &data_len, sizeof(unsigned int)); + + tinyexr::swap4(reinterpret_cast(&header.at(0))); + tinyexr::swap4(reinterpret_cast(&header.at(4))); + + data_list[ii].insert(data_list[ii].end(), header.begin(), header.end()); + data_list[ii].insert(data_list[ii].end(), block.begin(), + block.begin() + data_len); + + } else if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_PIZ) { +#if TINYEXR_USE_PIZ + unsigned int bufLen = + 1024 + static_cast( + 1.2 * static_cast( + buf.size())); // @fixme { compute good bound. } + std::vector block(bufLen); + unsigned int outSize = static_cast(block.size()); + + CompressPiz(&block.at(0), outSize, + reinterpret_cast(&buf.at(0)), + buf.size(), channels, exr_image->width, h); + + // 4 byte: scan line + // 4 byte: data size + // ~ : pixel data(compressed) + std::vector header(8); + unsigned int data_len = outSize; + memcpy(&header.at(0), &start_y, sizeof(int)); + memcpy(&header.at(4), &data_len, sizeof(unsigned int)); + + tinyexr::swap4(reinterpret_cast(&header.at(0))); + tinyexr::swap4(reinterpret_cast(&header.at(4))); + + data_list[ii].insert(data_list[ii].end(), header.begin(), header.end()); + data_list[ii].insert(data_list[ii].end(), block.begin(), + block.begin() + data_len); + +#else assert(0); +#endif + } else if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_ZFP) { +#if TINYEXR_USE_ZFP + std::vector block; + unsigned int outSize; + + tinyexr::CompressZfp( + &block, &outSize, reinterpret_cast(&buf.at(0)), + exr_image->width, h, exr_header->num_channels, zfp_compression_param); + + // 4 byte: scan line + // 4 byte: data size + // ~ : pixel data(compressed) + std::vector header(8); + unsigned int data_len = outSize; + memcpy(&header.at(0), &start_y, sizeof(int)); + memcpy(&header.at(4), &data_len, sizeof(unsigned int)); + + tinyexr::swap4(reinterpret_cast(&header.at(0))); + tinyexr::swap4(reinterpret_cast(&header.at(4))); + + data_list[ii].insert(data_list[ii].end(), header.begin(), header.end()); + data_list[ii].insert(data_list[ii].end(), block.begin(), + block.begin() + data_len); + +#else + assert(0); +#endif } else { assert(0); } + } // omp parallel - } // omp parallel - - for (int i = 0; i < numBlocks; i++) { - - data.insert(data.end(), dataList[i].begin(), dataList[i].end()); + for (size_t i = 0; i < static_cast(num_blocks); i++) { + data.insert(data.end(), data_list[i].begin(), data_list[i].end()); offsets[i] = offset; - if (IsBigEndian()) { - swap8(reinterpret_cast(&offsets[i])); - } - offset += dataList[i].size(); + tinyexr::swap8(reinterpret_cast(&offsets[i])); + offset += data_list[i].size(); } { - memory.insert(memory.end(), - reinterpret_cast(&offsets.at(0)), - reinterpret_cast(&offsets.at(0)) + - sizeof(unsigned long long) * numBlocks); + memory.insert( + memory.end(), reinterpret_cast(&offsets.at(0)), + reinterpret_cast(&offsets.at(0)) + + sizeof(tinyexr::tinyexr_uint64) * static_cast(num_blocks)); } { memory.insert(memory.end(), data.begin(), data.end()); } assert(memory.size() > 0); - (*memory_out) = (unsigned char *)malloc(memory.size()); + (*memory_out) = static_cast(malloc(memory.size())); memcpy((*memory_out), &memory.at(0), memory.size()); - return memory.size(); // OK + return memory.size(); // OK } -int SaveMultiChannelEXRToFile(const EXRImage *exrImage, const char *filename, - const char **err) { - if (exrImage == NULL || filename == NULL || exrImage->compression < 0 || - exrImage->compression > TINYEXR_COMPRESSIONTYPE_PIZ) { +int SaveEXRImageToFile(const EXRImage *exr_image, const EXRHeader *exr_header, + const char *filename, const char **err) { + if (exr_image == NULL || filename == NULL || + exr_header->compression_type < 0) { if (err) { (*err) = "Invalid argument."; } - return -1; + return TINYEXR_ERROR_INVALID_ARGUMENT; } +#if !TINYEXR_USE_PIZ + if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_PIZ) { + if (err) { + (*err) = "PIZ compression is not supported in this build."; + } + return 0; + } +#endif + +#if !TINYEXR_USE_ZFP + if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_ZFP) { + if (err) { + (*err) = "ZFP compression is not supported in this build."; + } + return 0; + } +#endif + +#ifdef _WIN32 + FILE *fp = NULL; + fopen_s(&fp, filename, "wb"); +#else FILE *fp = fopen(filename, "wb"); +#endif if (!fp) { if (err) { (*err) = "Cannot write a file."; } - return -1; + return TINYEXR_ERROR_CANT_OPEN_FILE; } unsigned char *mem = NULL; - size_t mem_size = SaveMultiChannelEXRToMemory(exrImage, &mem, err); + size_t mem_size = SaveEXRImageToMemory(exr_image, exr_header, &mem, err); if ((mem_size > 0) && mem) { - fwrite(mem, 1, mem_size, fp); } free(mem); fclose(fp); - return 0; // OK + return TINYEXR_SUCCESS; } -int LoadDeepEXR(DeepImage *deepImage, const char *filename, const char **err) { - if (deepImage == NULL) { +int LoadDeepEXR(DeepImage *deep_image, const char *filename, const char **err) { + if (deep_image == NULL) { if (err) { (*err) = "Invalid argument."; } - return -1; + return TINYEXR_ERROR_INVALID_ARGUMENT; } FILE *fp = fopen(filename, "rb"); @@ -10240,13 +11420,13 @@ int LoadDeepEXR(DeepImage *deepImage, const char *filename, const char **err) { if (err) { (*err) = "Cannot read file."; } - return -1; + return TINYEXR_ERROR_CANT_OPEN_FILE; } size_t filesize; // Compute size fseek(fp, 0, SEEK_END); - filesize = ftell(fp); + filesize = static_cast(ftell(fp)); fseek(fp, 0, SEEK_SET); if (filesize == 0) { @@ -10254,10 +11434,10 @@ int LoadDeepEXR(DeepImage *deepImage, const char *filename, const char **err) { if (err) { (*err) = "File size is zero."; } - return -1; + return TINYEXR_ERROR_INVALID_FILE; } - std::vector buf(filesize); // @todo { use mmap } + std::vector buf(filesize); // @todo { use mmap } { size_t ret; ret = fread(&buf[0], 1, filesize, fp); @@ -10275,9 +11455,9 @@ int LoadDeepEXR(DeepImage *deepImage, const char *filename, const char **err) { if (memcmp(marker, header, 4) != 0) { if (err) { - (*err) = "Header mismatch."; + (*err) = "Invalid magic number."; } - return -3; + return TINYEXR_ERROR_INVALID_MAGIC_NUMBER; } marker += 4; } @@ -10290,7 +11470,7 @@ int LoadDeepEXR(DeepImage *deepImage, const char *filename, const char **err) { if (err) { (*err) = "Unsupported version or scanline."; } - return -4; + return TINYEXR_ERROR_UNSUPPORTED_FORMAT; } marker += 4; @@ -10300,39 +11480,46 @@ int LoadDeepEXR(DeepImage *deepImage, const char *filename, const char **err) { int dy = -1; int dw = -1; int dh = -1; - int numScanlineBlocks = 1; // 16 for ZIP compression. - int compressionType = -1; - int numChannels = -1; - std::vector channels; + int num_scanline_blocks = 1; // 16 for ZIP compression. + int compression_type = -1; + int num_channels = -1; + std::vector channels; // Read attributes + size_t size = filesize - tinyexr::kEXRVersionSize; for (;;) { - std::string attrName; - std::string attrType; - std::vector data; - const char *marker_next = ReadAttribute(attrName, attrType, data, marker); - if (marker_next == NULL) { - marker++; // skip '\0' + if (0 == size) { + return TINYEXR_ERROR_INVALID_DATA; + } else if (marker[0] == '\0') { + size--; break; } - if (attrName.compare("compression") == 0) { - // must be 0:No compression, 1: RLE, 2: ZIPs or 3: ZIP - if (data[0] > 3) { + std::string attr_name; + std::string attr_type; + std::vector data; + size_t marker_size; + if (!tinyexr::ReadAttribute(&attr_name, &attr_type, &data, &marker_size, + marker, size)) { + return TINYEXR_ERROR_INVALID_DATA; + } + marker += marker_size; + size -= marker_size; + + if (attr_name.compare("compression") == 0) { + compression_type = data[0]; + if (compression_type > TINYEXR_COMPRESSIONTYPE_PIZ) { if (err) { (*err) = "Unsupported compression type."; } - return -5; + return TINYEXR_ERROR_UNSUPPORTED_FORMAT; } - compressionType = data[0]; - - if (compressionType == 3) { // ZIP - numScanlineBlocks = 16; + if (compression_type == TINYEXR_COMPRESSIONTYPE_ZIP) { + num_scanline_blocks = 16; } - } else if (attrName.compare("channels") == 0) { - + } else if (attr_name.compare("channels") == 0) { // name: zero-terminated string, from 1 to 255 bytes long // pixel type: int, possible values are: UINT = 0 HALF = 1 FLOAT = 2 // pLinear: unsigned char, possible values are 0 and 1 @@ -10340,30 +11527,28 @@ int LoadDeepEXR(DeepImage *deepImage, const char *filename, const char **err) { // xSampling: int // ySampling: int - ReadChannelInfo(channels, data); + tinyexr::ReadChannelInfo(channels, data); - numChannels = channels.size(); + num_channels = static_cast(channels.size()); - if (numChannels < 1) { + if (num_channels < 1) { if (err) { (*err) = "Invalid channels format."; } - return -6; + return TINYEXR_ERROR_INVALID_DATA; } - } else if (attrName.compare("dataWindow") == 0) { + } else if (attr_name.compare("dataWindow") == 0) { memcpy(&dx, &data.at(0), sizeof(int)); memcpy(&dy, &data.at(4), sizeof(int)); memcpy(&dw, &data.at(8), sizeof(int)); memcpy(&dh, &data.at(12), sizeof(int)); - if (IsBigEndian()) { - swap4(reinterpret_cast(&dx)); - swap4(reinterpret_cast(&dy)); - swap4(reinterpret_cast(&dw)); - swap4(reinterpret_cast(&dh)); - } + tinyexr::swap4(reinterpret_cast(&dx)); + tinyexr::swap4(reinterpret_cast(&dy)); + tinyexr::swap4(reinterpret_cast(&dw)); + tinyexr::swap4(reinterpret_cast(&dh)); - } else if (attrName.compare("displayWindow") == 0) { + } else if (attr_name.compare("displayWindow") == 0) { int x; int y; int w; @@ -10372,67 +11557,79 @@ int LoadDeepEXR(DeepImage *deepImage, const char *filename, const char **err) { memcpy(&y, &data.at(4), sizeof(int)); memcpy(&w, &data.at(8), sizeof(int)); memcpy(&h, &data.at(12), sizeof(int)); - if (IsBigEndian()) { - swap4(reinterpret_cast(&x)); - swap4(reinterpret_cast(&y)); - swap4(reinterpret_cast(&w)); - swap4(reinterpret_cast(&h)); - } + tinyexr::swap4(reinterpret_cast(&x)); + tinyexr::swap4(reinterpret_cast(&y)); + tinyexr::swap4(reinterpret_cast(&w)); + tinyexr::swap4(reinterpret_cast(&h)); } - - marker = marker_next; } assert(dx >= 0); assert(dy >= 0); assert(dw >= 0); assert(dh >= 0); - assert(numChannels >= 1); + assert(num_channels >= 1); - int dataWidth = dw - dx + 1; - int dataHeight = dh - dy + 1; + int data_width = dw - dx + 1; + int data_height = dh - dy + 1; - std::vector image(dataWidth * dataHeight * 4); // 4 = RGBA + std::vector image( + static_cast(data_width * data_height * 4)); // 4 = RGBA // Read offset tables. - int numBlocks = dataHeight / numScanlineBlocks; - if (numBlocks * numScanlineBlocks < dataHeight) { - numBlocks++; + int num_blocks = data_height / num_scanline_blocks; + if (num_blocks * num_scanline_blocks < data_height) { + num_blocks++; } - std::vector offsets(numBlocks); + std::vector offsets(static_cast(num_blocks)); - for (int y = 0; y < numBlocks; y++) { - long long offset; - memcpy(&offset, marker, sizeof(long long)); - if (IsBigEndian()) { - swap8(reinterpret_cast(&offset)); - } - marker += sizeof(long long); // = 8 + for (size_t y = 0; y < static_cast(num_blocks); y++) { + tinyexr::tinyexr_int64 offset; + memcpy(&offset, marker, sizeof(tinyexr::tinyexr_int64)); + tinyexr::swap8(reinterpret_cast(&offset)); + marker += sizeof(tinyexr::tinyexr_int64); // = 8 offsets[y] = offset; } - if (compressionType != 0 && compressionType != 2 && compressionType != 3) { +#if TINYEXR_USE_PIZ + if ((compression_type == TINYEXR_COMPRESSIONTYPE_NONE) || + (compression_type == TINYEXR_COMPRESSIONTYPE_RLE) || + (compression_type == TINYEXR_COMPRESSIONTYPE_ZIPS) || + (compression_type == TINYEXR_COMPRESSIONTYPE_ZIP) || + (compression_type == TINYEXR_COMPRESSIONTYPE_PIZ)) { +#else + if ((compression_type == TINYEXR_COMPRESSIONTYPE_NONE) || + (compression_type == TINYEXR_COMPRESSIONTYPE_RLE) || + (compression_type == TINYEXR_COMPRESSIONTYPE_ZIPS) || + (compression_type == TINYEXR_COMPRESSIONTYPE_ZIP)) { +#endif + // OK + } else { if (err) { (*err) = "Unsupported format."; } - return -10; + return TINYEXR_ERROR_UNSUPPORTED_FORMAT; } - deepImage->image = (float ***)malloc(sizeof(float **) * numChannels); - for (int c = 0; c < numChannels; c++) { - deepImage->image[c] = (float **)malloc(sizeof(float *) * dataHeight); - for (int y = 0; y < dataHeight; y++) { + deep_image->image = static_cast( + malloc(sizeof(float **) * static_cast(num_channels))); + for (int c = 0; c < num_channels; c++) { + deep_image->image[c] = static_cast( + malloc(sizeof(float *) * static_cast(data_height))); + for (int y = 0; y < data_height; y++) { } } - deepImage->offset_table = (int **)malloc(sizeof(int *) * dataHeight); - for (int y = 0; y < dataHeight; y++) { - deepImage->offset_table[y] = (int *)malloc(sizeof(int) * dataWidth); + deep_image->offset_table = static_cast( + malloc(sizeof(int *) * static_cast(data_height))); + for (int y = 0; y < data_height; y++) { + deep_image->offset_table[y] = static_cast( + malloc(sizeof(int) * static_cast(data_width))); } - for (int y = 0; y < numBlocks; y++) { - const unsigned char *dataPtr = + for (size_t y = 0; y < static_cast(num_blocks); y++) { + const unsigned char *data_ptr = reinterpret_cast(head + offsets[y]); // int: y coordinate @@ -10441,71 +11638,80 @@ int LoadDeepEXR(DeepImage *deepImage, const char *filename, const char **err) { // int64: unpacked size of sample data // compressed pixel offset table // compressed sample data - int lineNo; - long long packedOffsetTableSize; - long long packedSampleDataSize; - long long unpackedSampleDataSize; - memcpy(&lineNo, dataPtr, sizeof(int)); - memcpy(&packedOffsetTableSize, dataPtr + 4, sizeof(long long)); - memcpy(&packedSampleDataSize, dataPtr + 12, sizeof(long long)); - memcpy(&unpackedSampleDataSize, dataPtr + 20, sizeof(long long)); + int line_no; + tinyexr::tinyexr_int64 packedOffsetTableSize; + tinyexr::tinyexr_int64 packedSampleDataSize; + tinyexr::tinyexr_int64 unpackedSampleDataSize; + memcpy(&line_no, data_ptr, sizeof(int)); + memcpy(&packedOffsetTableSize, data_ptr + 4, + sizeof(tinyexr::tinyexr_int64)); + memcpy(&packedSampleDataSize, data_ptr + 12, + sizeof(tinyexr::tinyexr_int64)); + memcpy(&unpackedSampleDataSize, data_ptr + 20, + sizeof(tinyexr::tinyexr_int64)); - if (IsBigEndian()) { - swap4(reinterpret_cast(&lineNo)); - swap8(reinterpret_cast(&packedOffsetTableSize)); - swap8(reinterpret_cast(&packedSampleDataSize)); - swap8(reinterpret_cast(&unpackedSampleDataSize)); - } + tinyexr::swap4(reinterpret_cast(&line_no)); + tinyexr::swap8( + reinterpret_cast(&packedOffsetTableSize)); + tinyexr::swap8( + reinterpret_cast(&packedSampleDataSize)); + tinyexr::swap8( + reinterpret_cast(&unpackedSampleDataSize)); - std::vector pixelOffsetTable(dataWidth); + std::vector pixelOffsetTable(static_cast(data_width)); // decode pixel offset table. { unsigned long dstLen = pixelOffsetTable.size() * sizeof(int); - DecompressZip(reinterpret_cast(&pixelOffsetTable.at(0)), - dstLen, dataPtr + 28, packedOffsetTableSize); + tinyexr::DecompressZip( + reinterpret_cast(&pixelOffsetTable.at(0)), &dstLen, + data_ptr + 28, static_cast(packedOffsetTableSize)); assert(dstLen == pixelOffsetTable.size() * sizeof(int)); - for (int i = 0; i < dataWidth; i++) { - deepImage->offset_table[y][i] = pixelOffsetTable[i]; + for (size_t i = 0; i < static_cast(data_width); i++) { + deep_image->offset_table[y][i] = pixelOffsetTable[i]; } } - std::vector sampleData(unpackedSampleDataSize); + std::vector sample_data( + static_cast(unpackedSampleDataSize)); // decode sample data. { - unsigned long dstLen = unpackedSampleDataSize; - DecompressZip(reinterpret_cast(&sampleData.at(0)), - dstLen, dataPtr + 28 + packedOffsetTableSize, - packedSampleDataSize); - assert(dstLen == (unsigned long)unpackedSampleDataSize); + unsigned long dstLen = static_cast(unpackedSampleDataSize); + tinyexr::DecompressZip( + reinterpret_cast(&sample_data.at(0)), &dstLen, + data_ptr + 28 + packedOffsetTableSize, + static_cast(packedSampleDataSize)); + assert(dstLen == static_cast(unpackedSampleDataSize)); } // decode sample int sampleSize = -1; - std::vector channelOffsetList(numChannels); + std::vector channel_offset_list(static_cast(num_channels)); { - int channelOffset = 0; - for (int i = 0; i < numChannels; i++) { - channelOffsetList[i] = channelOffset; - if (channels[i].pixelType == TINYEXR_PIXELTYPE_UINT) { // UINT - channelOffset += 4; - } else if (channels[i].pixelType == TINYEXR_PIXELTYPE_HALF) { // half - channelOffset += 2; - } else if (channels[i].pixelType == TINYEXR_PIXELTYPE_FLOAT) { // float - channelOffset += 4; + int channel_offset = 0; + for (size_t i = 0; i < static_cast(num_channels); i++) { + channel_offset_list[i] = channel_offset; + if (channels[i].pixel_type == TINYEXR_PIXELTYPE_UINT) { // UINT + channel_offset += 4; + } else if (channels[i].pixel_type == TINYEXR_PIXELTYPE_HALF) { // half + channel_offset += 2; + } else if (channels[i].pixel_type == + TINYEXR_PIXELTYPE_FLOAT) { // float + channel_offset += 4; } else { assert(0); } } - sampleSize = channelOffset; + sampleSize = channel_offset; } assert(sampleSize >= 2); - assert((size_t)(pixelOffsetTable[dataWidth - 1] * sampleSize) == - sampleData.size()); - int samplesPerLine = sampleData.size() / sampleSize; + assert(static_cast( + pixelOffsetTable[static_cast(data_width - 1)] * + sampleSize) == sample_data.size()); + int samples_per_line = static_cast(sample_data.size()) / sampleSize; // // Alloc memory @@ -10515,389 +11721,519 @@ int LoadDeepEXR(DeepImage *deepImage, const char *filename, const char **err) { // pixel data is stored as image[channels][pixel_samples] // { - unsigned long long dataOffset = 0; - for (int c = 0; c < numChannels; c++) { + tinyexr::tinyexr_uint64 data_offset = 0; + for (size_t c = 0; c < static_cast(num_channels); c++) { + deep_image->image[c][y] = static_cast( + malloc(sizeof(float) * static_cast(samples_per_line))); - deepImage->image[c][y] = - (float *)malloc(sizeof(float) * samplesPerLine); - - if (channels[c].pixelType == 0) { // UINT - for (int x = 0; x < samplesPerLine; x++) { + if (channels[c].pixel_type == 0) { // UINT + for (size_t x = 0; x < static_cast(samples_per_line); x++) { unsigned int ui = *reinterpret_cast( - &sampleData.at(dataOffset + x * sizeof(int))); - deepImage->image[c][y][x] = (float)ui; // @fixme + &sample_data.at(data_offset + x * sizeof(int))); + deep_image->image[c][y][x] = static_cast(ui); // @fixme } - dataOffset += sizeof(unsigned int) * samplesPerLine; - } else if (channels[c].pixelType == 1) { // half - for (int x = 0; x < samplesPerLine; x++) { - FP16 f16; + data_offset += + sizeof(unsigned int) * static_cast(samples_per_line); + } else if (channels[c].pixel_type == 1) { // half + for (size_t x = 0; x < static_cast(samples_per_line); x++) { + tinyexr::FP16 f16; f16.u = *reinterpret_cast( - &sampleData.at(dataOffset + x * sizeof(short))); - FP32 f32 = half_to_float(f16); - deepImage->image[c][y][x] = f32.f; + &sample_data.at(data_offset + x * sizeof(short))); + tinyexr::FP32 f32 = half_to_float(f16); + deep_image->image[c][y][x] = f32.f; } - dataOffset += sizeof(short) * samplesPerLine; - } else { // float - for (int x = 0; x < samplesPerLine; x++) { + data_offset += sizeof(short) * static_cast(samples_per_line); + } else { // float + for (size_t x = 0; x < static_cast(samples_per_line); x++) { float f = *reinterpret_cast( - &sampleData.at(dataOffset + x * sizeof(float))); - deepImage->image[c][y][x] = f; + &sample_data.at(data_offset + x * sizeof(float))); + deep_image->image[c][y][x] = f; } - dataOffset += sizeof(float) * samplesPerLine; + data_offset += sizeof(float) * static_cast(samples_per_line); } } } + } // y - } // y + deep_image->width = data_width; + deep_image->height = data_height; - deepImage->width = dataWidth; - deepImage->height = dataHeight; - - deepImage->channel_names = - (const char **)malloc(sizeof(const char *) * numChannels); - for (int c = 0; c < numChannels; c++) { + deep_image->channel_names = static_cast( + malloc(sizeof(const char *) * static_cast(num_channels))); + for (size_t c = 0; c < static_cast(num_channels); c++) { #ifdef _WIN32 - deepImage->channel_names[c] = _strdup(channels[c].name.c_str()); + deep_image->channel_names[c] = _strdup(channels[c].name.c_str()); #else - deepImage->channel_names[c] = strdup(channels[c].name.c_str()); + deep_image->channel_names[c] = strdup(channels[c].name.c_str()); #endif } - deepImage->num_channels = numChannels; + deep_image->num_channels = num_channels; - return 0; // OK + return TINYEXR_SUCCESS; } -int SaveDeepEXR(const DeepImage *deepImage, const char *filename, - const char **err) { - if (deepImage == NULL || filename == NULL) { - if (err) { - (*err) = "Invalid argument."; - } - return -1; - } - - FILE *fp = fopen(filename, "rb"); - if (!fp) { - if (err) { - (*err) = "Cannot write file."; - } - return -1; - } - - // Write header check. - { - const char header[] = {0x76, 0x2f, 0x31, 0x01}; - size_t n = fwrite(header, 1, 4, fp); - if (n != 4) { - if (err) { - (*err) = "Header write failed."; - } - fclose(fp); - return -3; - } - } - - // Version, scanline. - { - // ver 2.0, scanline, deep bit on(0x800) - const char data[] = {2, 8, 0, 0}; - size_t n = fwrite(data, 1, 4, fp); - if (n != 4) { - if (err) { - (*err) = "Flag write failed."; - } - fclose(fp); - return -3; - } - } - - // Write attributes. - { - int data = 2; // ZIPS - WriteAttribute(fp, "compression", "compression", - reinterpret_cast(&data), sizeof(int)); - } - - { - int data[4] = {0, 0, deepImage->width - 1, deepImage->height - 1}; - WriteAttribute(fp, "dataWindow", "box2i", - reinterpret_cast(data), - sizeof(int) * 4); - WriteAttribute(fp, "displayWindow", "box2i", - reinterpret_cast(data), - sizeof(int) * 4); - } - - int numScanlineBlocks = 1; - // Write offset tables. - int numBlocks = deepImage->height / numScanlineBlocks; - if (numBlocks * numScanlineBlocks < deepImage->height) { - numBlocks++; - } - -#if 0 // @todo - std::vector offsets(numBlocks); - - //std::vector pixelOffsetTable(dataWidth); - - // compress pixel offset table. - { - unsigned long dstLen = pixelOffsetTable.size() * sizeof(int); - Compresses(reinterpret_cast(&pixelOffsetTable.at(0)), - dstLen, dataPtr + 28, packedOffsetTableSize); - - assert(dstLen == pixelOffsetTable.size() * sizeof(int)); - // int ret = - // miniz::mz_uncompress(reinterpret_cast(&pixelOffsetTable.at(0)), &dstLen, dataPtr + 28, - // packedOffsetTableSize); - // printf("ret = %d, dstLen = %d\n", ret, (int)dstLen); - // - for (int i = 0; i < dataWidth; i++) { - // printf("offt[%d] = %d\n", i, pixelOffsetTable[i]); - deepImage->offset_table[y][i] = pixelOffsetTable[i]; - } - } - - - for (int y = 0; y < numBlocks; y++) { - //long long offset = *(reinterpret_cast(marker)); - // printf("offset[%d] = %lld\n", y, offset); - //marker += sizeof(long long); // = 8 - offsets[y] = offset; - } - - // Write offset table. - fwrite(&offsets.at(0), sizeof(long long), numBlocks, fp); - - for (int y = 0; y < numBlocks; y++) { - const unsigned char *dataPtr = - reinterpret_cast(head + offsets[y]); - - // int: y coordinate - // int64: packed size of pixel offset table - // int64: packed size of sample data - // int64: unpacked size of sample data - // compressed pixel offset table - // compressed sample data - int lineNo = *reinterpret_cast(dataPtr); - long long packedOffsetTableSize = - *reinterpret_cast(dataPtr + 4); - long long packedSampleDataSize = - *reinterpret_cast(dataPtr + 12); - long long unpackedSampleDataSize = - *reinterpret_cast(dataPtr + 20); - // printf("line: %d, %lld/%lld/%lld\n", lineNo, packedOffsetTableSize, - // packedSampleDataSize, unpackedSampleDataSize); - - int endLineNo = (std::min)(lineNo + numScanlineBlocks, dataHeight); - - int numLines = endLineNo - lineNo; - // printf("numLines: %d\n", numLines); - - std::vector pixelOffsetTable(dataWidth); - - // decode pixel offset table. - { - unsigned long dstLen = pixelOffsetTable.size() * sizeof(int); - DecompressZip(reinterpret_cast(&pixelOffsetTable.at(0)), - dstLen, dataPtr + 28, packedOffsetTableSize); - - assert(dstLen == pixelOffsetTable.size() * sizeof(int)); - // int ret = - // miniz::mz_uncompress(reinterpret_cast(&pixelOffsetTable.at(0)), &dstLen, dataPtr + 28, - // packedOffsetTableSize); - // printf("ret = %d, dstLen = %d\n", ret, (int)dstLen); - // - for (int i = 0; i < dataWidth; i++) { - // printf("offt[%d] = %d\n", i, pixelOffsetTable[i]); - deepImage->offset_table[y][i] = pixelOffsetTable[i]; - } - } - - std::vector sampleData(unpackedSampleDataSize); - - // decode sample data. - { - unsigned long dstLen = unpackedSampleDataSize; - // printf("dstLen = %d\n", dstLen); - // printf("srcLen = %d\n", packedSampleDataSize); - DecompressZip(reinterpret_cast(&sampleData.at(0)), - dstLen, dataPtr + 28 + packedOffsetTableSize, - packedSampleDataSize); - assert(dstLen == unpackedSampleDataSize); - } - - // decode sample - int sampleSize = -1; - std::vector channelOffsetList(numChannels); - { - int channelOffset = 0; - for (int i = 0; i < numChannels; i++) { - // printf("offt[%d] = %d\n", i, channelOffset); - channelOffsetList[i] = channelOffset; - if (channels[i].pixelType == 0) { // UINT - channelOffset += 4; - } else if (channels[i].pixelType == 1) { // half - channelOffset += 2; - } else if (channels[i].pixelType == 2) { // float - channelOffset += 4; - } else { - assert(0); - } - } - sampleSize = channelOffset; - } - assert(sampleSize >= 2); - - assert(pixelOffsetTable[dataWidth - 1] * sampleSize == sampleData.size()); - int samplesPerLine = sampleData.size() / sampleSize; - - // - // Alloc memory - // - - // - // pixel data is stored as image[channels][pixel_samples] - // - { - unsigned long long dataOffset = 0; - for (int c = 0; c < numChannels; c++) { - - deepImage->image[c][y] = - (float *)malloc(sizeof(float) * samplesPerLine); - - // unsigned int channelOffset = channelOffsetList[c]; - // unsigned int i = channelOffset; - // printf("channel = %d. name = %s. ty = %d\n", c, - // channels[c].name.c_str(), channels[c].pixelType); - - // printf("dataOffset = %d\n", (int)dataOffset); - - if (channels[c].pixelType == 0) { // UINT - for (int x = 0; x < samplesPerLine; x++) { - unsigned int ui = *reinterpret_cast( - &sampleData.at(dataOffset + x * sizeof(int))); - deepImage->image[c][y][x] = (float)ui; // @fixme - } - dataOffset += sizeof(unsigned int) * samplesPerLine; - } else if (channels[c].pixelType == 1) { // half - for (int x = 0; x < samplesPerLine; x++) { - FP16 f16; - f16.u = *reinterpret_cast( - &sampleData.at(dataOffset + x * sizeof(short))); - FP32 f32 = half_to_float(f16); - deepImage->image[c][y][x] = f32.f; - // printf("c[%d] f(half) = %f (0x%08x)\n", c, f32.f, f16.u); - } - dataOffset += sizeof(short) * samplesPerLine; - } else { // float - for (int x = 0; x < samplesPerLine; x++) { - float f = *reinterpret_cast( - &sampleData.at(dataOffset + x * sizeof(float))); - // printf(" f = %f(0x%08x)\n", f, *((unsigned int *)&f)); - deepImage->image[c][y][x] = f; - } - dataOffset += sizeof(float) * samplesPerLine; - } - } - // printf("total: %d\n", dataOffset); - } - - } // y -#endif - fclose(fp); - - return 0; // OK -} - -void InitEXRImage(EXRImage *exrImage) { - if (exrImage == NULL) { +void InitEXRImage(EXRImage *exr_image) { + if (exr_image == NULL) { return; } - exrImage->num_custom_attributes = 0; - exrImage->num_channels = 0; - exrImage->channel_names = NULL; - exrImage->images = NULL; - exrImage->pixel_types = NULL; - exrImage->requested_pixel_types = NULL; - exrImage->compression = TINYEXR_COMPRESSIONTYPE_ZIP; + exr_image->width = 0; + exr_image->height = 0; + exr_image->num_channels = 0; + + exr_image->images = NULL; + exr_image->tiles = NULL; } -int FreeEXRImage(EXRImage *exrImage) { - - if (exrImage == NULL) { - return -1; // Err +void InitEXRHeader(EXRHeader *exr_header) { + if (exr_header == NULL) { + return; } - for (int i = 0; i < exrImage->num_channels; i++) { - - if (exrImage->channel_names && exrImage->channel_names[i]) { - free((char *)exrImage->channel_names[i]); // remove const - } - - if (exrImage->images && exrImage->images[i]) { - free(exrImage->images[i]); - } - } - - if (exrImage->channel_names) { - free(exrImage->channel_names); - } - - if (exrImage->images) { - free(exrImage->images); - } - - if (exrImage->pixel_types) { - free(exrImage->pixel_types); - } - - if (exrImage->requested_pixel_types) { - free(exrImage->requested_pixel_types); - } - - for (int i = 0; i < exrImage->num_custom_attributes; i++) { - if (exrImage->custom_attributes[i].name) { - free(exrImage->custom_attributes[i].name); - } - if (exrImage->custom_attributes[i].type) { - free(exrImage->custom_attributes[i].type); - } - if (exrImage->custom_attributes[i].value) { - free(exrImage->custom_attributes[i].value); - } - } - - return 0; + memset(exr_header, 0, sizeof(EXRHeader)); } -int ParseMultiChannelEXRHeaderFromFile(EXRImage *exrImage, const char *filename, - const char **err) { - if (exrImage == NULL) { +int FreeEXRHeader(EXRHeader *exr_header) { + if (exr_header == NULL) { + return TINYEXR_ERROR_INVALID_ARGUMENT; + } + + if (exr_header->channels) { + free(exr_header->channels); + } + + if (exr_header->pixel_types) { + free(exr_header->pixel_types); + } + + if (exr_header->requested_pixel_types) { + free(exr_header->requested_pixel_types); + } + + for (int i = 0; i < exr_header->num_custom_attributes; i++) { + if (exr_header->custom_attributes[i].value) { + free(exr_header->custom_attributes[i].value); + } + } + + return TINYEXR_SUCCESS; +} + +int FreeEXRImage(EXRImage *exr_image) { + if (exr_image == NULL) { + return TINYEXR_ERROR_INVALID_ARGUMENT; + } + + for (int i = 0; i < exr_image->num_channels; i++) { + if (exr_image->images && exr_image->images[i]) { + free(exr_image->images[i]); + } + } + + if (exr_image->images) { + free(exr_image->images); + } + + if (exr_image->tiles) { + for (int tid = 0; tid < exr_image->num_tiles; tid++) { + for (int i = 0; i < exr_image->num_channels; i++) { + if (exr_image->tiles[tid].images && exr_image->tiles[tid].images[i]) { + free(exr_image->tiles[tid].images[i]); + } + } + if (exr_image->tiles[tid].images) { + free(exr_image->tiles[tid].images); + } + } + } + + return TINYEXR_SUCCESS; +} + +int ParseEXRHeaderFromFile(EXRHeader *exr_header, const EXRVersion *exr_version, + const char *filename, const char **err) { + if (exr_header == NULL || exr_version == NULL || filename == NULL) { if (err) { (*err) = "Invalid argument."; } - return -1; + return TINYEXR_ERROR_INVALID_ARGUMENT; } +#ifdef _WIN32 + FILE *fp = NULL; + fopen_s(&fp, filename, "rb"); +#else FILE *fp = fopen(filename, "rb"); +#endif if (!fp) { if (err) { (*err) = "Cannot read file."; } - return -1; + return TINYEXR_ERROR_CANT_OPEN_FILE; } size_t filesize; // Compute size fseek(fp, 0, SEEK_END); - filesize = ftell(fp); + filesize = static_cast(ftell(fp)); fseek(fp, 0, SEEK_SET); - std::vector buf(filesize); // @todo { use mmap } + std::vector buf(filesize); // @todo { use mmap } + { + size_t ret; + ret = fread(&buf[0], 1, filesize, fp); + assert(ret == filesize); + fclose(fp); + + if (ret != filesize) { + if (err) { + (*err) = "fread error."; + } + return TINYEXR_ERROR_INVALID_FILE; + } + } + + return ParseEXRHeaderFromMemory(exr_header, exr_version, &buf.at(0), filesize, + err); +} + +int ParseEXRMultipartHeaderFromMemory(EXRHeader ***exr_headers, + int *num_headers, + const EXRVersion *exr_version, + const unsigned char *memory, size_t size, + const char **err) { + if (memory == NULL || exr_headers == NULL || num_headers == NULL || + exr_version == NULL) { + // Invalid argument + return TINYEXR_ERROR_INVALID_ARGUMENT; + } + + if (size < tinyexr::kEXRVersionSize) { + return TINYEXR_ERROR_INVALID_DATA; + } + + const unsigned char *marker = memory + tinyexr::kEXRVersionSize; + size_t marker_size = size - tinyexr::kEXRVersionSize; + + std::vector infos; + + for (;;) { + tinyexr::HeaderInfo info; + info.clear(); + + std::string err_str; + bool empty_header = false; + int ret = ParseEXRHeader(&info, &empty_header, exr_version, &err_str, + marker, marker_size); + + if (ret != TINYEXR_SUCCESS) { + if (err) { + (*err) = strdup(err_str.c_str()); // may leak + } + return ret; + } + + if (empty_header) { + marker += 1; // skip '\0' + break; + } + + // `chunkCount` must exist in the header. + if (info.chunk_count == 0) { + if (err) { + (*err) = "`chunkCount' attribute is not found in the header."; + } + return TINYEXR_ERROR_INVALID_DATA; + } + + infos.push_back(info); + + // move to next header. + marker += info.header_len; + size -= info.header_len; + } + + // allocate memory for EXRHeader and create array of EXRHeader pointers. + (*exr_headers) = + static_cast(malloc(sizeof(EXRHeader *) * infos.size())); + for (size_t i = 0; i < infos.size(); i++) { + EXRHeader *exr_header = static_cast(malloc(sizeof(EXRHeader))); + + ConvertHeader(exr_header, infos[i]); + + // transfoer `tiled` from version. + exr_header->tiled = exr_version->tiled; + + (*exr_headers)[i] = exr_header; + } + + (*num_headers) = static_cast(infos.size()); + + return TINYEXR_SUCCESS; +} + +int ParseEXRMultipartHeaderFromFile(EXRHeader ***exr_headers, int *num_headers, + const EXRVersion *exr_version, + const char *filename, const char **err) { + if (exr_headers == NULL || num_headers == NULL || exr_version == NULL || + filename == NULL) { + if (err) { + (*err) = "Invalid argument."; + } + return TINYEXR_ERROR_INVALID_ARGUMENT; + } + +#ifdef _WIN32 + FILE *fp = NULL; + fopen_s(&fp, filename, "rb"); +#else + FILE *fp = fopen(filename, "rb"); +#endif + if (!fp) { + if (err) { + (*err) = "Cannot read file."; + } + return TINYEXR_ERROR_CANT_OPEN_FILE; + } + + size_t filesize; + // Compute size + fseek(fp, 0, SEEK_END); + filesize = static_cast(ftell(fp)); + fseek(fp, 0, SEEK_SET); + + std::vector buf(filesize); // @todo { use mmap } + { + size_t ret; + ret = fread(&buf[0], 1, filesize, fp); + assert(ret == filesize); + fclose(fp); + + if (ret != filesize) { + if (err) { + (*err) = "fread error."; + } + return TINYEXR_ERROR_INVALID_FILE; + } + } + + return ParseEXRMultipartHeaderFromMemory( + exr_headers, num_headers, exr_version, &buf.at(0), filesize, err); +} + +int ParseEXRVersionFromMemory(EXRVersion *version, const unsigned char *memory, + size_t size) { + if (version == NULL || memory == NULL) { + return TINYEXR_ERROR_INVALID_ARGUMENT; + } + + if (size < tinyexr::kEXRVersionSize) { + return TINYEXR_ERROR_INVALID_DATA; + } + + const unsigned char *marker = memory; + + // Header check. + { + const char header[] = {0x76, 0x2f, 0x31, 0x01}; + + if (memcmp(marker, header, 4) != 0) { + return TINYEXR_ERROR_INVALID_MAGIC_NUMBER; + } + marker += 4; + } + + version->tiled = false; + version->long_name = false; + version->non_image = false; + version->multipart = false; + + // Parse version header. + { + // must be 2 + if (marker[0] != 2) { + return TINYEXR_ERROR_INVALID_EXR_VERSION; + } + + if (version == NULL) { + return TINYEXR_SUCCESS; // May OK + } + + version->version = 2; + + if (marker[1] & 0x2) { // 9th bit + version->tiled = true; + } + if (marker[1] & 0x4) { // 10th bit + version->long_name = true; + } + if (marker[1] & 0x8) { // 11th bit + version->non_image = true; // (deep image) + } + if (marker[1] & 0x10) { // 12th bit + version->multipart = true; + } + } + + return TINYEXR_SUCCESS; +} + +int ParseEXRVersionFromFile(EXRVersion *version, const char *filename) { + if (filename == NULL) { + return TINYEXR_ERROR_INVALID_ARGUMENT; + } + +#ifdef _WIN32 + FILE *fp = NULL; + fopen_s(&fp, filename, "rb"); +#else + FILE *fp = fopen(filename, "rb"); +#endif + if (!fp) { + return TINYEXR_ERROR_CANT_OPEN_FILE; + } + + size_t file_size; + // Compute size + fseek(fp, 0, SEEK_END); + file_size = static_cast(ftell(fp)); + fseek(fp, 0, SEEK_SET); + + if (file_size < tinyexr::kEXRVersionSize) { + return TINYEXR_ERROR_INVALID_FILE; + } + + unsigned char buf[tinyexr::kEXRVersionSize]; + size_t ret = fread(&buf[0], 1, tinyexr::kEXRVersionSize, fp); + fclose(fp); + + if (ret != tinyexr::kEXRVersionSize) { + return TINYEXR_ERROR_INVALID_FILE; + } + + return ParseEXRVersionFromMemory(version, buf, tinyexr::kEXRVersionSize); +} + +int LoadEXRMultipartImageFromMemory(EXRImage *exr_images, + const EXRHeader **exr_headers, + unsigned int num_parts, + const unsigned char *memory, + const char **err) { + if (exr_images == NULL || exr_headers == NULL || num_parts == 0 || + memory == NULL) { + if (err) { + (*err) = "Invalid argument."; + } + return TINYEXR_ERROR_INVALID_ARGUMENT; + } + + // compute total header size. + size_t total_header_size = 0; + for (unsigned int i = 0; i < num_parts; i++) { + if (exr_headers[i]->header_len == 0) { + if (err) { + (*err) = "EXRHeader is not initialized."; + } + return TINYEXR_ERROR_INVALID_ARGUMENT; + } + + total_header_size += exr_headers[i]->header_len; + } + + const char *marker = reinterpret_cast( + memory + total_header_size + 4 + + 4); // +8 for magic number and version header. + + marker += 1; // Skip empty header. + + // NOTE 1: + // In multipart image, There is 'part number' before chunk data. + // 4 byte : part number + // 4+ : chunk + // + // NOTE 2: + // EXR spec says 'part number' is 'unsigned long' but actually this is + // 'unsigned int(4 bytes)' in OpenEXR implementation... + // http://www.openexr.com/openexrfilelayout.pdf + + // Load chunk offset table. + std::vector > chunk_offset_table_list; + for (size_t i = 0; i < static_cast(num_parts); i++) { + std::vector offset_table( + static_cast(exr_headers[i]->chunk_count)); + + for (size_t c = 0; c < offset_table.size(); c++) { + tinyexr::tinyexr_uint64 offset; + memcpy(&offset, marker, 8); + tinyexr::swap8(&offset); + + offset_table[c] = offset + 4; // +4 to skip 'part number' + marker += 8; + } + + chunk_offset_table_list.push_back(offset_table); + } + + // Decode image. + for (size_t i = 0; i < static_cast(num_parts); i++) { + std::vector &offset_table = + chunk_offset_table_list[i]; + + // First check 'part number' is identitical to 'i' + for (size_t c = 0; c < offset_table.size(); c++) { + const unsigned char *part_number_addr = + memory + offset_table[c] - 4; // -4 to move to 'part number' field. + unsigned int part_no; + memcpy(&part_no, part_number_addr, sizeof(unsigned int)); // 4 + tinyexr::swap4(&part_no); + + if (part_no != i) { + assert(0); + return TINYEXR_ERROR_INVALID_DATA; + } + } + + int ret = tinyexr::DecodeChunk(&exr_images[i], exr_headers[i], offset_table, + memory); + if (ret != TINYEXR_SUCCESS) { + return ret; + } + } + + return TINYEXR_SUCCESS; +} + +int LoadEXRMultipartImageFromFile(EXRImage *exr_images, + const EXRHeader **exr_headers, + unsigned int num_parts, const char *filename, + const char **err) { + if (exr_images == NULL || exr_headers == NULL || num_parts == 0) { + if (err) { + (*err) = "Invalid argument."; + } + return TINYEXR_ERROR_INVALID_ARGUMENT; + } + +#ifdef _WIN32 + FILE *fp = NULL; + fopen_s(&fp, filename, "rb"); +#else + FILE *fp = fopen(filename, "rb"); +#endif + if (!fp) { + if (err) { + (*err) = "Cannot read file."; + } + return TINYEXR_ERROR_CANT_OPEN_FILE; + } + + size_t filesize; + // Compute size + fseek(fp, 0, SEEK_END); + filesize = static_cast(ftell(fp)); + fseek(fp, 0, SEEK_SET); + + std::vector buf(filesize); // @todo { use mmap } { size_t ret; ret = fread(&buf[0], 1, filesize, fp); @@ -10906,229 +12242,107 @@ int ParseMultiChannelEXRHeaderFromFile(EXRImage *exrImage, const char *filename, (void)ret; } - return ParseMultiChannelEXRHeaderFromMemory(exrImage, &buf.at(0), err); + return LoadEXRMultipartImageFromMemory(exr_images, exr_headers, num_parts, + &buf.at(0), err); } -int ParseMultiChannelEXRHeaderFromMemory(EXRImage *exrImage, - const unsigned char *memory, - const char **err) { - if (exrImage == NULL || memory == NULL) { - if (err) { - (*err) = "Invalid argument."; - } - return -1; +int SaveEXR(const float *data, int width, int height, int components, + const char *outfilename) { + if (components == 3 || components == 4) { + // OK + } else { + return TINYEXR_ERROR_INVALID_ARGUMENT; } - const char *buf = reinterpret_cast(memory); + // Assume at least 16x16 pixels. + if (width < 16) return TINYEXR_ERROR_INVALID_ARGUMENT; + if (height < 16) return TINYEXR_ERROR_INVALID_ARGUMENT; - const char *marker = &buf[0]; + EXRHeader header; + InitEXRHeader(&header); - // Header check. - { - const char header[] = {0x76, 0x2f, 0x31, 0x01}; + EXRImage image; + InitEXRImage(&image); - if (memcmp(marker, header, 4) != 0) { - if (err) { - (*err) = "Header mismatch."; - } - return -3; - } - marker += 4; - } + image.num_channels = components; - // Version, scanline. - { - // must be [2, 0, 0, 0] - if (marker[0] != 2 || marker[1] != 0 || marker[2] != 0 || marker[3] != 0) { - if (err) { - (*err) = "Unsupported version or scanline."; - } - return -4; - } + std::vector images[4]; + images[0].resize(static_cast(width * height)); + images[1].resize(static_cast(width * height)); + images[2].resize(static_cast(width * height)); + images[3].resize(static_cast(width * height)); - marker += 4; - } - - int dx = -1; - int dy = -1; - int dw = -1; - int dh = -1; - int numChannels = -1; - int displayWindow[4] = {-1, -1, -1, -1}; // @fixme. - float screenWindowCenter[2] = {0.0f, 0.0f}; // @fixme - float screenWindowWidth = 1.0f; // @fixme - float pixelAspectRatio = 1.0f; - unsigned char lineOrder = 0; // 0 -> increasing y; 1 -> decreasing - std::vector channels; - int compressionType = 0; // @fixme - - int numCustomAttributes = 0; - std::vector customAttribs; - - // Read attributes - for (;;) { - std::string attrName; - std::string attrType; - std::vector data; - const char *marker_next = ReadAttribute(attrName, attrType, data, marker); - if (marker_next == NULL) { - marker++; // skip '\0' - break; - } - - if (attrName.compare("compression") == 0) { - // must be 0:No compression, 1: RLE, 2: ZIPs, 3: ZIP or 4: PIZ - if (data[0] > TINYEXR_COMPRESSIONTYPE_PIZ) { - if (err) { - (*err) = "Unsupported compression type."; - } - return -5; - } - - compressionType = data[0]; - - } else if (attrName.compare("channels") == 0) { - - // name: zero-terminated string, from 1 to 255 bytes long - // pixel type: int, possible values are: UINT = 0 HALF = 1 FLOAT = 2 - // pLinear: unsigned char, possible values are 0 and 1 - // reserved: three chars, should be zero - // xSampling: int - // ySampling: int - - ReadChannelInfo(channels, data); - - numChannels = channels.size(); - - if (numChannels < 1) { - if (err) { - (*err) = "Invalid channels format."; - } - return -6; - } - - } else if (attrName.compare("dataWindow") == 0) { - memcpy(&dx, &data.at(0), sizeof(int)); - memcpy(&dy, &data.at(4), sizeof(int)); - memcpy(&dw, &data.at(8), sizeof(int)); - memcpy(&dh, &data.at(12), sizeof(int)); - if (IsBigEndian()) { - swap4(reinterpret_cast(&dx)); - swap4(reinterpret_cast(&dy)); - swap4(reinterpret_cast(&dw)); - swap4(reinterpret_cast(&dh)); - } - } else if (attrName.compare("displayWindow") == 0) { - memcpy(&displayWindow[0], &data.at(0), sizeof(int)); - memcpy(&displayWindow[1], &data.at(4), sizeof(int)); - memcpy(&displayWindow[2], &data.at(8), sizeof(int)); - memcpy(&displayWindow[3], &data.at(12), sizeof(int)); - if (IsBigEndian()) { - swap4(reinterpret_cast(&displayWindow[0])); - swap4(reinterpret_cast(&displayWindow[1])); - swap4(reinterpret_cast(&displayWindow[2])); - swap4(reinterpret_cast(&displayWindow[3])); - } - } else if (attrName.compare("lineOrder") == 0) { - int order; - memcpy(&order, &data.at(0), sizeof(int)); - if (IsBigEndian()) { - swap4(reinterpret_cast(&order)); - } - lineOrder = (unsigned char)order; - } else if (attrName.compare("pixelAspectRatio") == 0) { - memcpy(&pixelAspectRatio, &data.at(0), sizeof(float)); - if (IsBigEndian()) { - swap4(reinterpret_cast(&pixelAspectRatio)); - } - } else if (attrName.compare("screenWindowCenter") == 0) { - memcpy(&screenWindowCenter[0], &data.at(0), sizeof(float)); - memcpy(&screenWindowCenter[1], &data.at(4), sizeof(float)); - if (IsBigEndian()) { - swap4(reinterpret_cast(&screenWindowCenter[0])); - swap4(reinterpret_cast(&screenWindowCenter[1])); - } - } else if (attrName.compare("screenWindowWidth") == 0) { - memcpy(&screenWindowWidth, &data.at(0), sizeof(float)); - if (IsBigEndian()) { - swap4(reinterpret_cast(&screenWindowWidth)); - } - } else { - // Custom attribute(up to TINYEXR_MAX_ATTRIBUTES) - if (numCustomAttributes < TINYEXR_MAX_ATTRIBUTES) { - EXRAttribute attrib; - attrib.name = strdup(attrName.c_str()); - attrib.type = strdup(attrType.c_str()); - attrib.size = data.size(); - attrib.value = (unsigned char *)malloc(data.size()); - memcpy((char *)attrib.value, &data.at(0), data.size()); - customAttribs.push_back(attrib); - } - } - - marker = marker_next; - } - - assert(dx >= 0); - assert(dy >= 0); - assert(dw >= 0); - assert(dh >= 0); - assert(numChannels >= 1); - - int dataWidth = dw - dx + 1; - int dataHeight = dh - dy + 1; - - { - exrImage->channel_names = - (const char **)malloc(sizeof(const char *) * numChannels); - for (int c = 0; c < numChannels; c++) { -#ifdef _WIN32 - exrImage->channel_names[c] = _strdup(channels[c].name.c_str()); -#else - exrImage->channel_names[c] = strdup(channels[c].name.c_str()); -#endif - } - exrImage->num_channels = numChannels; - - exrImage->width = dataWidth; - exrImage->height = dataHeight; - exrImage->pixel_aspect_ratio = pixelAspectRatio; - exrImage->screen_window_center[0] = screenWindowCenter[0]; - exrImage->screen_window_center[1] = screenWindowCenter[1]; - exrImage->screen_window_width = screenWindowWidth; - exrImage->display_window[0] = displayWindow[0]; - exrImage->display_window[1] = displayWindow[1]; - exrImage->display_window[2] = displayWindow[2]; - exrImage->display_window[3] = displayWindow[3]; - exrImage->data_window[0] = dx; - exrImage->data_window[1] = dy; - exrImage->data_window[2] = dw; - exrImage->data_window[3] = dh; - exrImage->line_order = lineOrder; - exrImage->compression = compressionType; - - exrImage->pixel_types = (int *)malloc(sizeof(int) * numChannels); - for (int c = 0; c < numChannels; c++) { - exrImage->pixel_types[c] = channels[c].pixelType; - } - - // Initially fill with values of `pixel-types` - exrImage->requested_pixel_types = (int *)malloc(sizeof(int) * numChannels); - for (int c = 0; c < numChannels; c++) { - exrImage->requested_pixel_types[c] = channels[c].pixelType; + // Split RGB(A)RGB(A)RGB(A)... into R, G and B(and A) layers + for (size_t i = 0; i < static_cast(width * height); i++) { + images[0][i] = data[static_cast(components) * i + 0]; + images[1][i] = data[static_cast(components) * i + 1]; + images[2][i] = data[static_cast(components) * i + 2]; + if (components == 4) { + images[3][i] = data[static_cast(components) * i + 3]; } } - if (numCustomAttributes > 0) { - assert(customAttribs.size() < TINYEXR_MAX_ATTRIBUTES); - exrImage->num_custom_attributes = numCustomAttributes; - - for (int i = 0; i < (int)customAttribs.size(); i++) { - exrImage->custom_attributes[i] = customAttribs[i]; - } + float *image_ptr[4] = {0, 0, 0, 0}; + if (components == 4) { + image_ptr[0] = &(images[3].at(0)); // A + image_ptr[1] = &(images[2].at(0)); // B + image_ptr[2] = &(images[1].at(0)); // G + image_ptr[3] = &(images[0].at(0)); // R + } else { + image_ptr[0] = &(images[2].at(0)); // B + image_ptr[1] = &(images[1].at(0)); // G + image_ptr[2] = &(images[0].at(0)); // R } - return 0; // OK + image.images = reinterpret_cast(image_ptr); + image.width = width; + image.height = height; + + header.num_channels = components; + header.channels = static_cast(malloc( + sizeof(EXRChannelInfo) * static_cast(header.num_channels))); + // Must be (A)BGR order, since most of EXR viewers expect this channel order. + if (components == 4) { + strncpy(header.channels[0].name, "A", 255); + header.channels[0].name[strlen("A")] = '\0'; + strncpy(header.channels[1].name, "B", 255); + header.channels[1].name[strlen("B")] = '\0'; + strncpy(header.channels[2].name, "G", 255); + header.channels[2].name[strlen("G")] = '\0'; + strncpy(header.channels[3].name, "R", 255); + header.channels[3].name[strlen("R")] = '\0'; + } else { + strncpy(header.channels[0].name, "B", 255); + header.channels[0].name[strlen("B")] = '\0'; + strncpy(header.channels[1].name, "G", 255); + header.channels[1].name[strlen("G")] = '\0'; + strncpy(header.channels[2].name, "R", 255); + header.channels[2].name[strlen("R")] = '\0'; + } + + header.pixel_types = static_cast( + malloc(sizeof(int) * static_cast(header.num_channels))); + header.requested_pixel_types = static_cast( + malloc(sizeof(int) * static_cast(header.num_channels))); + for (int i = 0; i < header.num_channels; i++) { + header.pixel_types[i] = + TINYEXR_PIXELTYPE_FLOAT; // pixel type of input image + header.requested_pixel_types[i] = + TINYEXR_PIXELTYPE_HALF; // pixel type of output image to be stored in + // .EXR + } + + const char *err; + int ret = SaveEXRImageToFile(&image, &header, outfilename, &err); + if (ret != TINYEXR_SUCCESS) { + return ret; + } + + free(header.channels); + free(header.pixel_types); + free(header.requested_pixel_types); + + return ret; } #ifdef _MSC_VER @@ -11137,4 +12351,4 @@ int ParseMultiChannelEXRHeaderFromMemory(EXRImage *exrImage, #endif -#endif // __TINYEXR_H__ +#endif // TINYEXR_H_ diff --git a/3rdparty/bgfx/CMakeLists.txt b/3rdparty/bgfx/CMakeLists.txt index 84b8d7f..4855aea 100644 --- a/3rdparty/bgfx/CMakeLists.txt +++ b/3rdparty/bgfx/CMakeLists.txt @@ -6,7 +6,7 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.6) #ADD_DEFINITIONS ("BX_PLATFORM_LINUX") #ADD_DEFINITIONS ("-DBGFX_CONFIG_MULTITHREADED=0") -#ADD_DEFINITIONS ("-DBGFX_CONFIG_RENDERER_OPENGL=1") +ADD_DEFINITIONS ("-DBGFX_CONFIG_RENDERER_OPENGL=1") ADD_DEFINITIONS ("-DENTRY_CONFIG_USE_GLFW=1") ADD_DEFINITIONS ("-D__STDC_LIMIT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_CONSTANT_MACROS") @@ -22,6 +22,7 @@ INCLUDE_DIRECTORIES ( ) SET (BGFX_SOURCES + ../bx/src/amalgamated.cpp src/amalgamated.cpp ) diff --git a/3rdparty/bgfx/LICENSE b/3rdparty/bgfx/LICENSE index 6877280..af0e7b0 100644 --- a/3rdparty/bgfx/LICENSE +++ b/3rdparty/bgfx/LICENSE @@ -1,4 +1,4 @@ -Copyright 2010-2016 Branimir Karadzic. All rights reserved. +Copyright 2010-2017 Branimir Karadzic. All rights reserved. https://github.com/bkaradzic/bgfx diff --git a/3rdparty/bgfx/README.md b/3rdparty/bgfx/README.md index f141387..bd56e14 100644 --- a/3rdparty/bgfx/README.md +++ b/3rdparty/bgfx/README.md @@ -48,7 +48,7 @@ Supported compilers: * Clang 3.3 and above * GCC 4.6 and above - * vs2012 and above + * VS2012 and above Languages: @@ -57,7 +57,6 @@ Languages: * [D language API bindings](https://github.com/DerelictOrg/DerelictBgfx) * [Go language API bindings](https://github.com/james4k/go-bgfx) * [Haskell language API bindings](https://github.com/haskell-game/bgfx) - * [Java language API bindings](https://github.com/enleeten/twilight-bgfx) * [Lightweight Java Game Library 3 bindings](https://github.com/LWJGL/lwjgl3) * [Lua language API bindings](https://github.com/excessive/lua-bgfx) * [Nim language API bindings](https://github.com/Halsys/nim-bgfx) @@ -83,28 +82,32 @@ Languages: Who is using it? ---------------- +## Airmech + http://airmech.com/ AirMech is a free-to-play futuristic action real-time strategy video game developed and published by Carbon Games. ![airmech](https://www.mobygames.com/images/shots/l/830630-airmech-playstation-4-screenshot-blue-bar-on-your-mech-indicates.jpg) +## cmftStudio + https://github.com/dariomanesku/cmftStudio cmftStudio - cubemap filtering tool. ![cmftStudio](https://github.com/dariomanesku/cmftStudio/raw/master/screenshots/cmftStudio_small.jpg) +## Crown + https://github.com/taylor001/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) -https://github.com/emoon/ProDBG - ProDBG is a new debugger under development -that will support a variety of targets and operating systems. Currently it's in -very early development and primary focusing on Mac as primary target. This is -how it currently looks. -![ProDBG_screenshot](https://raw.githubusercontent.com/emoon/ProDBG/master/data/screens/mac_screenshot.png) +## Offroad Legends 2 http://www.dogbytegames.com/ Dogbyte Games is an indie mobile developer studio focusing on racing games. ![ios](http://www.dogbytegames.com/bgfx/offroadlegends2_bgfx_ipad2.jpg) +## Torque6 + 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. @@ -112,32 +115,48 @@ derivative of the original Torque Engine. " target="_blank">Torque 6 Material Editor +## twinkle + https://github.com/cgbystrom/twinkle GPU-accelerated UI framework powered by JavaScript for desktop/mobile apps. Idea is to combine the fast workflow and deployment model of web with the performance of native code and GPU acceleration. +## Lumix Engine + https://github.com/nem0/LumixEngine LumixEngine is a MIT licensed 3D engine. The main goal is performance and Unity-like usability. ![LumixEngine screenshot](https://cloud.githubusercontent.com/assets/153526/12904252/3fcf130e-cece-11e5-878b-c9fe24c1b11a.png) +## Kepler Orbits + https://github.com/podgorskiy/KeplerOrbits KeplerOrbits - Tool that calculates positions of celestial bodies using their orbital elements. [Web Demo](http://podgorskiy.com/KeplerOrbits/KeplerOrbits.html) +## CETech + https://github.com/cyberegoorg/cetech - CETech is Data-Driven game engine and toolbox inspired by Bitsquid/Stingray engine. ![CETech screenshot](https://github.com/cyberegoorg/cetech/raw/master/docs/img/prototyp.png) +## ioquake3 + https://github.com/jpcy/ioq3-renderer-bgfx - A renderer for ioquake3 written in C++ and using bgfx to support multiple rendering APIs. ![ioq3-renderer-bgfx screenshot](https://camo.githubusercontent.com/052aa40c05120e56306294d3a1bb5f99f97de8c8/687474703a2f2f692e696d6775722e636f6d2f64364f6856594b2e6a7067) +## DLS + http://makingartstudios.itch.io/dls - DLS the digital logic simulator game. ![dls-screenshot](https://img.itch.io/aW1hZ2UvMzk3MTgvMTc5MjQ4LnBuZw==/original/kA%2FQPb.png) +## MAME + https://github.com/mamedev/mame MAME - Multiple Arcade Machine Emulator [Try MAME in Browser!](http://fos.textfiles.com/dfjustin/pacman/pacman/) ![mame-screenshot](https://raw.githubusercontent.com/mamedev/www.mamedev.org/d8d716dbb63919a11964b5d47b9b7f6cfa006b56/bgfx/Raiden.png) +## Blackshift + 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. @@ -146,6 +165,8 @@ crack. alt="Blackshift Trailer, May 2016" width="640" height="480" border="0" /> +## Real-Time Polygonal-Light Shading with Linearly Transformed Cosines + 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 @@ -154,6 +175,8 @@ David Neubelt, ACM SIGGRAPH 2016 alt="Real-Time Polygonal-Light Shading with Linearly Transformed Cosines" width="640" height="480" border="0" /> +## Dead Venture + 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. @@ -162,14 +185,58 @@ base on a far island. alt="Dead Venture - Gameplay Teaser (iOS / Android)" width="640" height="480" border="0" /> +## REGoth + https://github.com/degenerated1123/REGoth - Open source reimplementation of the zEngine, used by the game "Gothic" and "Gothic II". +Browser demo: http://gothic-dx11.de/gothic-js/REGoth.html + REGoth Engine +## Ethereal Engine + +https://github.com/volcoma/EtherealEngine EtherealEngine C++ Game Engine and +WYSIWYG Editor +![EtherealEngine screenshot](https://cloud.githubusercontent.com/assets/1499411/19988985/2a302204-a22c-11e6-98af-5f446d0c79ac.png) + +## Go Rally + +http://gorallygame.com/ - Go Rally is top-down rally game with a career mode, +multiplayer time challenges, and a track creator. + + + +## Fiber2D + +https://github.com/s1ddok/Fiber2D#fiber2d - Fiber2D - Cross-platform 2D Game +Engine in pure Swift +![Fiber2D Demo Gif](http://imgur.com/CP6d9kT.gif) + +## On the Hunt + +http://www.indiedb.com/games/on-the-hunt - On the Hunt is an open world hunting +game in development. It's a combination of FPS and stealth. +![On the Hunt](http://media.indiedb.com/images/downloads/1/120/119448/img.png) + +## FbxPipeline + +https://github.com/VladSerhiienko/FbxPipeline - Yet another FBX exporter with +flatbuffers serialization. + +## FRAG + +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. + [License (BSD 2-clause)](https://bkaradzic.github.io/bgfx/license.html) ----------------------------------------------------------------------- @@ -177,7 +244,7 @@ width="640" height="480" border="0" /> - Copyright 2010-2016 Branimir Karadzic. All rights reserved. + Copyright 2010-2017 Branimir Karadzic. All rights reserved. https://github.com/bkaradzic/bgfx diff --git a/3rdparty/bgfx/examples/common/aviwriter.h b/3rdparty/bgfx/examples/common/aviwriter.h index dad992a..41bd1ab 100644 --- a/3rdparty/bgfx/examples/common/aviwriter.h +++ b/3rdparty/bgfx/examples/common/aviwriter.h @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ diff --git a/3rdparty/bgfx/examples/common/bgfx_utils.cpp b/3rdparty/bgfx/examples/common/bgfx_utils.cpp index 7216b06..edea94c 100644 --- a/3rdparty/bgfx/examples/common/bgfx_utils.cpp +++ b/3rdparty/bgfx/examples/common/bgfx_utils.cpp @@ -1,10 +1,8 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ -#include // strlen - #include "common.h" #include @@ -21,14 +19,6 @@ namespace stl = tinystl; #include "entry/entry.h" #include -#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 - #include "bgfx_utils.h" void* load(bx::FileReaderI* _reader, bx::AllocatorI* _allocator, const char* _filePath, uint32_t* _size) @@ -127,9 +117,9 @@ static bgfx::ShaderHandle loadShader(bx::FileReaderI* _reader, const char* _name break; } - strcpy(filePath, shaderPath); - strcat(filePath, _name); - strcat(filePath, ".bin"); + bx::strlncpy(filePath, BX_COUNTOF(filePath), shaderPath); + bx::strlncat(filePath, BX_COUNTOF(filePath), _name); + bx::strlncat(filePath, BX_COUNTOF(filePath), ".bin"); return bgfx::createShader(loadMem(_reader, filePath) ); } @@ -156,175 +146,73 @@ bgfx::ProgramHandle loadProgram(const char* _vsName, const char* _fsName) return loadProgram(entry::getFileReader(), _vsName, _fsName); } -typedef unsigned char stbi_uc; -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" void stbi_image_free(void* _ptr); -extern void lodepng_free(void* _ptr); +static void imageReleaseCb(void* _ptr, void* _userData) +{ + BX_UNUSED(_ptr); + bgfx::ImageContainer* imageContainer = (bgfx::ImageContainer*)_userData; + bgfx::imageFree(imageContainer); +} bgfx::TextureHandle loadTexture(bx::FileReaderI* _reader, const char* _filePath, uint32_t _flags, uint8_t _skip, bgfx::TextureInfo* _info) { - if (NULL != bx::stristr(_filePath, ".dds") - || NULL != bx::stristr(_filePath, ".pvr") - || NULL != bx::stristr(_filePath, ".ktx") ) - { - const bgfx::Memory* mem = loadMem(_reader, _filePath); - if (NULL != mem) - { - return bgfx::createTexture(mem, _flags, _skip, _info); - } - - bgfx::TextureHandle handle = BGFX_INVALID_HANDLE; - DBG("Failed to load %s.", _filePath); - return handle; - } - + BX_UNUSED(_skip); bgfx::TextureHandle handle = BGFX_INVALID_HANDLE; - bx::AllocatorI* allocator = entry::getAllocator(); - uint32_t size = 0; - void* data = loadMem(_reader, allocator, _filePath, &size); + uint32_t size; + void* data = load(_reader, entry::getAllocator(), _filePath, &size); if (NULL != data) { - bgfx::TextureFormat::Enum format = bgfx::TextureFormat::RGBA8; - uint32_t bpp = 32; + bgfx::ImageContainer* imageContainer = bgfx::imageParse(entry::getAllocator(), data, size); - uint32_t width = 0; - uint32_t height = 0; - - typedef void (*ReleaseFn)(void* _ptr); - ReleaseFn release = stbi_image_free; - - uint8_t* out = NULL; - static uint8_t pngMagic[] = { 0x89, 0x50, 0x4E, 0x47, 0x0d, 0x0a }; - if (0 == memcmp(data, pngMagic, sizeof(pngMagic) ) ) + if (NULL != imageContainer) { - release = lodepng_free; + const bgfx::Memory* mem = bgfx::makeRef( + imageContainer->m_data + , imageContainer->m_size + , imageReleaseCb + , imageContainer + ); + unload(data); - 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) + if (imageContainer->m_cubeMap) { - 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: - format = bgfx::TextureFormat::R8; - bpp = 8; - 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*4; - 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*4; - rgba[0] = bx::toHostEndian(rgba[0], false); - rgba[1] = bx::toHostEndian(rgba[1], false); - } - format = bgfx::TextureFormat::R16; - bpp = 16; - 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; - } + handle = bgfx::createTextureCube( + uint16_t(imageContainer->m_width) + , 1 < imageContainer->m_numMips + , imageContainer->m_numLayers + , imageContainer->m_format + , _flags + , mem + ); + } + else + { + handle = bgfx::createTexture2D( + uint16_t(imageContainer->m_width) + , uint16_t(imageContainer->m_height) + , 1 < imageContainer->m_numMips + , imageContainer->m_numLayers + , imageContainer->m_format + , _flags + , mem + ); } - - lodepng_state_cleanup(&state); - } - else - { - int comp = 0; - out = stbi_load_from_memory( (uint8_t*)data, size, (int*)&width, (int*)&height, &comp, 4); - } - - BX_FREE(allocator, data); - - if (NULL != out) - { - handle = bgfx::createTexture2D(uint16_t(width), uint16_t(height), false, 1 - , format - , _flags - , bgfx::copy(out, width*height*bpp/8) - ); - release(out); if (NULL != _info) { - bgfx::calcTextureSize(*_info - , uint16_t(width) - , uint16_t(height) + bgfx::calcTextureSize( + *_info + , uint16_t(imageContainer->m_width) + , uint16_t(imageContainer->m_height) , 0 , false , false , 1 - , format + , imageContainer->m_format ); } } } - else - { - DBG("Failed to load %s.", _filePath); - } return handle; } @@ -334,6 +222,14 @@ bgfx::TextureHandle loadTexture(const char* _name, uint32_t _flags, uint8_t _ski return loadTexture(entry::getFileReader(), _name, _flags, _skip, _info); } +bgfx::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); +} + void calcTangents(void* _vertices, uint16_t _numVertices, bgfx::VertexDecl _decl, const uint16_t* _indices, uint32_t _numIndices) { struct PosTexcoord @@ -349,7 +245,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; diff --git a/3rdparty/bgfx/examples/common/bgfx_utils.h b/3rdparty/bgfx/examples/common/bgfx_utils.h index f9037da..f948d1b 100644 --- a/3rdparty/bgfx/examples/common/bgfx_utils.h +++ b/3rdparty/bgfx/examples/common/bgfx_utils.h @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -7,14 +7,44 @@ #define BGFX_UTILS_H_HEADER_GUARD #include +#include "image.h" +/// void* load(const char* _filePath, uint32_t* _size = NULL); + +/// void unload(void* _ptr); + +/// 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::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); +/// Returns true if both internal transient index and vertex buffer have +/// enough space. +/// +/// @param[in] _numVertices Number of vertices. +/// @param[in] _decl Vertex declaration. +/// @param[in] _numIndices Number of indices. +/// +inline bool checkAvailTransientBuffers(uint32_t _numVertices, const bgfx::VertexDecl& _decl, uint32_t _numIndices) +{ + return _numVertices == bgfx::getAvailTransientVertexBuffer(_numVertices, _decl) + && _numIndices == bgfx::getAvailTransientIndexBuffer(_numIndices) + ; +} + +/// struct MeshState { struct Texture @@ -34,15 +64,25 @@ struct MeshState struct Mesh; +/// Mesh* meshLoad(const char* _filePath); + +/// void meshUnload(Mesh* _mesh); +/// 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, const MeshState*const* _state, uint8_t _numPasses, const float* _mtx, uint16_t _numMatrices = 1); +/// struct Args { Args(int _argc, char** _argv); diff --git a/3rdparty/bgfx/examples/common/bounds.cpp b/3rdparty/bgfx/examples/common/bounds.cpp index ff34238..0240da2 100644 --- a/3rdparty/bgfx/examples/common/bounds.cpp +++ b/3rdparty/bgfx/examples/common/bounds.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -9,7 +9,7 @@ void aabbToObb(Obb& _obb, const Aabb& _aabb) { - memset(_obb.m_mtx, 0, sizeof(_obb.m_mtx) ); + bx::memSet(_obb.m_mtx, 0, sizeof(_obb.m_mtx) ); _obb.m_mtx[ 0] = (_aabb.m_max[0] - _aabb.m_min[0]) * 0.5f; _obb.m_mtx[ 5] = (_aabb.m_max[1] - _aabb.m_min[1]) * 0.5f; _obb.m_mtx[10] = (_aabb.m_max[2] - _aabb.m_min[2]) * 0.5f; @@ -19,30 +19,82 @@ void aabbToObb(Obb& _obb, const Aabb& _aabb) _obb.m_mtx[15] = 1.0f; } -void sphereToAabb(Aabb& _aabb, const Sphere& _sphere) +void toAabb(Aabb& _aabb, const Sphere& _sphere) { float radius = _sphere.m_radius; bx::vec3Sub(_aabb.m_min, _sphere.m_center, radius); bx::vec3Add(_aabb.m_max, _sphere.m_center, radius); } +void toAabb(Aabb& _aabb, const Disk& _disk) +{ + // Reference: http://iquilezles.org/www/articles/diskbbox/diskbbox.htm + float nsq[3]; + bx::vec3Mul(nsq, _disk.m_normal, _disk.m_normal); + + float one[3] = { 1.0f, 1.0f, 1.0f }; + float tmp[3]; + bx::vec3Sub(tmp, one, nsq); + + const float inv = 1.0f / (tmp[0]*tmp[1]*tmp[2]); + + float extent[3]; + extent[0] = _disk.m_radius * tmp[0] * bx::fsqrt( (nsq[0] + nsq[1] * nsq[2]) * inv); + extent[1] = _disk.m_radius * tmp[1] * bx::fsqrt( (nsq[1] + nsq[2] * nsq[0]) * inv); + extent[2] = _disk.m_radius * tmp[2] * bx::fsqrt( (nsq[2] + nsq[0] * nsq[1]) * inv); + + bx::vec3Sub(_aabb.m_min, _disk.m_center, extent); + bx::vec3Add(_aabb.m_max, _disk.m_center, extent); +} + +void toAabb(Aabb& _aabb, const Cylinder& _cylinder) +{ + // Reference: http://iquilezles.org/www/articles/diskbbox/diskbbox.htm + float axis[3]; + bx::vec3Sub(axis, _cylinder.m_end, _cylinder.m_pos); + + float asq[3]; + bx::vec3Mul(asq, axis, axis); + + float nsq[3]; + bx::vec3Mul(nsq, asq, 1.0f/bx::vec3Dot(axis, axis) ); + + float one[3] = { 1.0f, 1.0f, 1.0f }; + float tmp[3]; + bx::vec3Sub(tmp, one, nsq); + + const float inv = 1.0f / (tmp[0]*tmp[1]*tmp[2]); + + float extent[3]; + extent[0] = _cylinder.m_radius * tmp[0] * bx::fsqrt( (nsq[0] + nsq[1] * nsq[2]) * inv); + extent[1] = _cylinder.m_radius * tmp[1] * bx::fsqrt( (nsq[1] + nsq[2] * nsq[0]) * inv); + extent[2] = _cylinder.m_radius * tmp[2] * bx::fsqrt( (nsq[2] + nsq[0] * nsq[1]) * inv); + + float minP[3]; + bx::vec3Sub(minP, _cylinder.m_pos, extent); + + float minE[3]; + bx::vec3Sub(minE, _cylinder.m_end, extent); + + float maxP[3]; + bx::vec3Add(maxP, _cylinder.m_pos, extent); + + float maxE[3]; + bx::vec3Add(maxE, _cylinder.m_end, extent); + + bx::vec3Min(_aabb.m_min, minP, minE); + bx::vec3Max(_aabb.m_max, maxP, maxE); +} + void aabbTransformToObb(Obb& _obb, const Aabb& _aabb, const float* _mtx) { aabbToObb(_obb, _aabb); float result[16]; bx::mtxMul(result, _obb.m_mtx, _mtx); - memcpy(_obb.m_mtx, result, sizeof(result) ); + bx::memCopy(_obb.m_mtx, result, sizeof(result) ); } -float calcAreaAabb(Aabb& _aabb) -{ - float ww = _aabb.m_max[0] - _aabb.m_min[0]; - float hh = _aabb.m_max[1] - _aabb.m_min[1]; - float dd = _aabb.m_max[2] - _aabb.m_min[2]; - return 2.0f * (ww*hh + ww*dd + hh*dd); -} - -void calcAabb(Aabb& _aabb, const void* _vertices, uint32_t _numVertices, uint32_t _stride) +void toAabb(Aabb& _aabb, const void* _vertices, uint32_t _numVertices, uint32_t _stride) { float min[3], max[3]; uint8_t* vertex = (uint8_t*)_vertices; @@ -76,7 +128,7 @@ void calcAabb(Aabb& _aabb, const void* _vertices, uint32_t _numVertices, uint32_ _aabb.m_max[2] = max[2]; } -void calcAabb(Aabb& _aabb, const float* _mtx, const void* _vertices, uint32_t _numVertices, uint32_t _stride) +void toAabb(Aabb& _aabb, const float* _mtx, const void* _vertices, uint32_t _numVertices, uint32_t _stride) { float min[3], max[3]; uint8_t* vertex = (uint8_t*)_vertices; @@ -112,6 +164,14 @@ void calcAabb(Aabb& _aabb, const float* _mtx, const void* _vertices, uint32_t _n _aabb.m_max[2] = max[2]; } +float calcAreaAabb(const Aabb& _aabb) +{ + float ww = _aabb.m_max[0] - _aabb.m_min[0]; + float hh = _aabb.m_max[1] - _aabb.m_min[1]; + float dd = _aabb.m_max[2] - _aabb.m_min[2]; + return 2.0f * (ww*hh + ww*dd + hh*dd); +} + void aabbExpand(Aabb& _aabb, float _factor) { _aabb.m_min[0] -= _factor; @@ -122,6 +182,12 @@ void aabbExpand(Aabb& _aabb, float _factor) _aabb.m_max[2] += _factor; } +void aabbExpand(Aabb& _aabb, const float* _pos) +{ + bx::vec3Min(_aabb.m_min, _aabb.m_min, _pos); + bx::vec3Max(_aabb.m_max, _aabb.m_max, _pos); +} + uint32_t aabbOverlapTest(const Aabb& _aabb0, const Aabb& _aabb1) { const uint32_t ltMinX = _aabb0.m_max[0] < _aabb1.m_min[0]; @@ -144,7 +210,7 @@ uint32_t aabbOverlapTest(const Aabb& _aabb0, const Aabb& _aabb1) void calcObb(Obb& _obb, const void* _vertices, uint32_t _numVertices, uint32_t _stride, uint32_t _steps) { Aabb aabb; - calcAabb(aabb, _vertices, _numVertices, _stride); + toAabb(aabb, _vertices, _numVertices, _stride); float minArea = calcAreaAabb(aabb); Obb best; @@ -168,7 +234,7 @@ void calcObb(Obb& _obb, const void* _vertices, uint32_t _numVertices, uint32_t _ float mtxT[16]; bx::mtxTranspose(mtxT, mtx); - calcAabb(aabb, mtxT, _vertices, _numVertices, _stride); + toAabb(aabb, mtxT, _vertices, _numVertices, _stride); float area = calcAreaAabb(aabb); if (area < minArea) @@ -186,13 +252,13 @@ void calcObb(Obb& _obb, const void* _vertices, uint32_t _numVertices, uint32_t _ ax += angleStep; } - memcpy(&_obb, &best, sizeof(Obb) ); + bx::memCopy(&_obb, &best, sizeof(Obb) ); } void calcMaxBoundingSphere(Sphere& _sphere, const void* _vertices, uint32_t _numVertices, uint32_t _stride) { Aabb aabb; - calcAabb(aabb, _vertices, _numVertices, _stride); + toAabb(aabb, _vertices, _numVertices, _stride); float center[3]; center[0] = (aabb.m_min[0] + aabb.m_max[0]) * 0.5f; @@ -216,7 +282,7 @@ void calcMaxBoundingSphere(Sphere& _sphere, const void* _vertices, uint32_t _num } bx::vec3Move(_sphere.m_center, center); - _sphere.m_radius = sqrtf(maxDistSq); + _sphere.m_radius = bx::fsqrt(maxDistSq); } void calcMinBoundingSphere(Sphere& _sphere, const void* _vertices, uint32_t _numVertices, uint32_t _stride, float _step) diff --git a/3rdparty/bgfx/examples/common/bounds.h b/3rdparty/bgfx/examples/common/bounds.h index 03cac67..604892c 100644 --- a/3rdparty/bgfx/examples/common/bounds.h +++ b/3rdparty/bgfx/examples/common/bounds.h @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -67,20 +67,29 @@ struct Intersection void aabbToObb(Obb& _obb, const Aabb& _aabb); /// Convert sphere to axis aligned bounding box. -void sphereToAabb(Aabb& _aabb, const Sphere& _sphere); +void toAabb(Aabb& _aabb, const Sphere& _sphere); -/// Calculate surface area of axis aligned bounding box. -float calcAabbArea(Aabb& _aabb); +/// Convert disk to axis aligned bounding box. +void toAabb(Aabb& _aabb, const Disk& _disk); + +/// Convert cylinder to axis aligned bounding box. +void toAabb(Aabb& _aabb, const Cylinder& _cylinder); /// Calculate axis aligned bounding box. -void calcAabb(Aabb& _aabb, const void* _vertices, uint32_t _numVertices, uint32_t _stride); +void toAabb(Aabb& _aabb, const void* _vertices, uint32_t _numVertices, uint32_t _stride); /// Transform vertices and calculate axis aligned bounding box. -void calcAabb(Aabb& _aabb, const float* _mtx, const void* _vertices, uint32_t _numVertices, uint32_t _stride); +void toAabb(Aabb& _aabb, const float* _mtx, const void* _vertices, uint32_t _numVertices, uint32_t _stride); /// Expand AABB. void aabbExpand(Aabb& _aabb, float _factor); +/// Expand AABB with xyz. +void aabbExpand(Aabb& _aabb, const float* _pos); + +/// Calculate surface area of axis aligned bounding box. +float calcAreaAabb(const Aabb& _aabb); + /// Returns 0 is two AABB don't overlap, otherwise returns flags of overlap /// test. uint32_t aabbOverlapTest(const Aabb& _aabb0, const Aabb& _aabb1); @@ -94,9 +103,6 @@ void calcMaxBoundingSphere(Sphere& _sphere, const void* _vertices, uint32_t _num /// Calculate minimum bounding sphere. void calcMinBoundingSphere(Sphere& _sphere, const void* _vertices, uint32_t _numVertices, uint32_t _stride, float _step = 0.01f); -/// Calculate coplanar U/V vectors. -void calcPlaneUv(const Plane& _plane, float* _udir, float* _vdir); - /// Returns 6 (near, far, left, right, top, bottom) planes representing frustum planes. void buildFrustumPlanes(Plane* _planes, const float* _viewProj); diff --git a/3rdparty/bgfx/examples/common/camera.cpp b/3rdparty/bgfx/examples/common/camera.cpp index e721bd2..a2a1c31 100644 --- a/3rdparty/bgfx/examples/common/camera.cpp +++ b/3rdparty/bgfx/examples/common/camera.cpp @@ -15,32 +15,32 @@ int cmdMove(CmdContext* /*_context*/, void* /*_userData*/, int _argc, char const { if (_argc > 1) { - if (0 == strcmp(_argv[1], "forward") ) + if (0 == bx::strncmp(_argv[1], "forward") ) { cameraSetKeyState(CAMERA_KEY_FORWARD, true); return 0; } - else if (0 == strcmp(_argv[1], "left") ) + else if (0 == bx::strncmp(_argv[1], "left") ) { cameraSetKeyState(CAMERA_KEY_LEFT, true); return 0; } - else if (0 == strcmp(_argv[1], "right") ) + else if (0 == bx::strncmp(_argv[1], "right") ) { cameraSetKeyState(CAMERA_KEY_RIGHT, true); return 0; } - else if (0 == strcmp(_argv[1], "backward") ) + else if (0 == bx::strncmp(_argv[1], "backward") ) { cameraSetKeyState(CAMERA_KEY_BACKWARD, true); return 0; } - else if (0 == strcmp(_argv[1], "up") ) + else if (0 == bx::strncmp(_argv[1], "up") ) { cameraSetKeyState(CAMERA_KEY_UP, true); return 0; } - else if (0 == strcmp(_argv[1], "down") ) + else if (0 == bx::strncmp(_argv[1], "down") ) { cameraSetKeyState(CAMERA_KEY_DOWN, true); return 0; @@ -166,16 +166,16 @@ struct Camera float direction[3] = { - cosf(m_verticalAngle) * sinf(m_horizontalAngle), - sinf(m_verticalAngle), - cosf(m_verticalAngle) * cosf(m_horizontalAngle), + bx::fcos(m_verticalAngle) * bx::fsin(m_horizontalAngle), + bx::fsin(m_verticalAngle), + bx::fcos(m_verticalAngle) * bx::fcos(m_horizontalAngle), }; float right[3] = { - sinf(m_horizontalAngle - bx::piHalf), + bx::fsin(m_horizontalAngle - bx::piHalf), 0, - cosf(m_horizontalAngle - bx::piHalf), + bx::fcos(m_horizontalAngle - bx::piHalf), }; float up[3]; @@ -264,7 +264,7 @@ struct Camera void setPosition(const float* _pos) { - memcpy(m_eye, _pos, sizeof(float)*3); + bx::memCopy(m_eye, _pos, sizeof(float)*3); } void setVerticalAngle(float _verticalAngle) @@ -334,12 +334,12 @@ void cameraGetViewMtx(float* _viewMtx) void cameraGetPosition(float* _pos) { - memcpy(_pos, s_camera->m_eye, 3*sizeof(float) ); + bx::memCopy(_pos, s_camera->m_eye, 3*sizeof(float) ); } void cameraGetAt(float* _at) { - memcpy(_at, s_camera->m_at, 3*sizeof(float) ); + bx::memCopy(_at, s_camera->m_at, 3*sizeof(float) ); } void cameraUpdate(float _deltaTime, const entry::MouseState& _mouseState) diff --git a/3rdparty/bgfx/examples/common/common.h b/3rdparty/bgfx/examples/common/common.h index 209cfc1..b53aba2 100644 --- a/3rdparty/bgfx/examples/common/common.h +++ b/3rdparty/bgfx/examples/common/common.h @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ diff --git a/3rdparty/bgfx/examples/common/common.sh b/3rdparty/bgfx/examples/common/common.sh index c3f5026..2ebe4c7 100644 --- a/3rdparty/bgfx/examples/common/common.sh +++ b/3rdparty/bgfx/examples/common/common.sh @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ diff --git a/3rdparty/bgfx/examples/common/cube_atlas.cpp b/3rdparty/bgfx/examples/common/cube_atlas.cpp index c63f0a0..481e978 100644 --- a/3rdparty/bgfx/examples/common/cube_atlas.cpp +++ b/3rdparty/bgfx/examples/common/cube_atlas.cpp @@ -7,7 +7,6 @@ #include #include // INT_MAX -#include // memset #include #include "cube_atlas.h" @@ -270,7 +269,7 @@ Atlas::Atlas(uint16_t _textureSize, uint16_t _maxRegionsCount) m_regions = new AtlasRegion[_maxRegionsCount]; m_textureBuffer = new uint8_t[ _textureSize * _textureSize * 6 * 4 ]; - memset(m_textureBuffer, 0, _textureSize * _textureSize * 6 * 4); + bx::memSet(m_textureBuffer, 0, _textureSize * _textureSize * 6 * 4); m_textureHandle = bgfx::createTextureCube(_textureSize , false @@ -293,8 +292,8 @@ Atlas::Atlas(uint16_t _textureSize, const uint8_t* _textureBuffer, uint16_t _reg m_regions = new AtlasRegion[_regionCount]; m_textureBuffer = new uint8_t[getTextureBufferSize()]; - memcpy(m_regions, _regionBuffer, _regionCount * sizeof(AtlasRegion) ); - memcpy(m_textureBuffer, _textureBuffer, getTextureBufferSize() ); + bx::memCopy(m_regions, _regionBuffer, _regionCount * sizeof(AtlasRegion) ); + bx::memCopy(m_textureBuffer, _textureBuffer, getTextureBufferSize() ); m_textureHandle = bgfx::createTextureCube(_textureSize , false @@ -409,7 +408,7 @@ void Atlas::updateRegion(const AtlasRegion& _region, const uint8_t* _bitmapBuffe if (0 < size) { const bgfx::Memory* mem = bgfx::alloc(size); - memset(mem->data, 0, mem->size); + bx::memSet(mem->data, 0, mem->size); if (_region.getType() == AtlasRegion::TYPE_BGRA8) { const uint8_t* inLineBuffer = _bitmapBuffer; @@ -417,12 +416,12 @@ void Atlas::updateRegion(const AtlasRegion& _region, const uint8_t* _bitmapBuffe for (int yy = 0; yy < _region.height; ++yy) { - memcpy(outLineBuffer, inLineBuffer, _region.width * 4); + bx::memCopy(outLineBuffer, inLineBuffer, _region.width * 4); inLineBuffer += _region.width * 4; outLineBuffer += m_textureSize * 4; } - memcpy(mem->data, _bitmapBuffer, mem->size); + bx::memCopy(mem->data, _bitmapBuffer, mem->size); } else { @@ -437,7 +436,7 @@ void Atlas::updateRegion(const AtlasRegion& _region, const uint8_t* _bitmapBuffe outLineBuffer[(xx * 4) + layer] = inLineBuffer[xx]; } - memcpy(mem->data + yy * _region.width * 4, outLineBuffer, _region.width * 4); + bx::memCopy(mem->data + yy * _region.width * 4, outLineBuffer, _region.width * 4); inLineBuffer += _region.width; outLineBuffer += m_textureSize * 4; } diff --git a/3rdparty/bgfx/examples/common/debugdraw/debugdraw.cpp b/3rdparty/bgfx/examples/common/debugdraw/debugdraw.cpp index ac242b0..7565966 100644 --- a/3rdparty/bgfx/examples/common/debugdraw/debugdraw.cpp +++ b/3rdparty/bgfx/examples/common/debugdraw/debugdraw.cpp @@ -1,15 +1,19 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. - * License: http://www.opensource.org/licenses/BSD-2-Clause + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ #include +#include #include "debugdraw.h" +#include "../bgfx_utils.h" +#include "../packrect.h" #include -#include +#include #include #include +#include struct DebugVertex { @@ -34,6 +38,30 @@ struct DebugVertex bgfx::VertexDecl DebugVertex::ms_decl; +struct DebugUvVertex +{ + float m_x; + float m_y; + float m_z; + float m_u; + float m_v; + uint32_t m_abgr; + + static void init() + { + ms_decl + .begin() + .add(bgfx::Attrib::Position, 3, 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 DebugUvVertex::ms_decl; + struct DebugShapeVertex { float m_x; @@ -276,51 +304,68 @@ void getPoint(float* _result, Axis::Enum _axis, float _x, float _y) #include "fs_debugdraw_fill.bin.h" #include "vs_debugdraw_fill_lit.bin.h" #include "fs_debugdraw_fill_lit.bin.h" +#include "vs_debugdraw_fill_texture.bin.h" +#include "fs_debugdraw_fill_texture.bin.h" -struct EmbeddedShader +static const bgfx::EmbeddedShader s_embeddedShaders[] = { - bgfx::RendererType::Enum type; - const uint8_t* data; - uint32_t size; + BGFX_EMBEDDED_SHADER(vs_debugdraw_lines), + BGFX_EMBEDDED_SHADER(fs_debugdraw_lines), + BGFX_EMBEDDED_SHADER(vs_debugdraw_lines_stipple), + BGFX_EMBEDDED_SHADER(fs_debugdraw_lines_stipple), + BGFX_EMBEDDED_SHADER(vs_debugdraw_fill), + BGFX_EMBEDDED_SHADER(fs_debugdraw_fill), + BGFX_EMBEDDED_SHADER(vs_debugdraw_fill_lit), + BGFX_EMBEDDED_SHADER(fs_debugdraw_fill_lit), + BGFX_EMBEDDED_SHADER(vs_debugdraw_fill_texture), + BGFX_EMBEDDED_SHADER(fs_debugdraw_fill_texture), + + BGFX_EMBEDDED_SHADER_END() }; -#define BGFX_DECLARE_SHADER_EMBEDDED(_name) \ - { \ - { bgfx::RendererType::Direct3D9, BX_CONCATENATE(_name, _dx9 ), sizeof(BX_CONCATENATE(_name, _dx9 ) ) }, \ - { bgfx::RendererType::Direct3D11, BX_CONCATENATE(_name, _dx11), sizeof(BX_CONCATENATE(_name, _dx11) ) }, \ - { bgfx::RendererType::Direct3D12, BX_CONCATENATE(_name, _dx11), sizeof(BX_CONCATENATE(_name, _dx11) ) }, \ - { bgfx::RendererType::OpenGL, BX_CONCATENATE(_name, _glsl), sizeof(BX_CONCATENATE(_name, _glsl) ) }, \ - { bgfx::RendererType::OpenGLES, BX_CONCATENATE(_name, _glsl), sizeof(BX_CONCATENATE(_name, _glsl) ) }, \ - { bgfx::RendererType::Vulkan, BX_CONCATENATE(_name, _glsl), sizeof(BX_CONCATENATE(_name, _glsl) ) }, \ - { bgfx::RendererType::Metal, BX_CONCATENATE(_name, _mtl ), sizeof(BX_CONCATENATE(_name, _mtl ) ) }, \ - { bgfx::RendererType::Count, NULL, 0 }, \ - } +#define SPRITE_TEXTURE_SIZE 1024 -static const EmbeddedShader s_embeddedShaders[][8] = +template +struct SpriteT { - BGFX_DECLARE_SHADER_EMBEDDED(vs_debugdraw_lines), - BGFX_DECLARE_SHADER_EMBEDDED(fs_debugdraw_lines), - BGFX_DECLARE_SHADER_EMBEDDED(vs_debugdraw_lines_stipple), - BGFX_DECLARE_SHADER_EMBEDDED(fs_debugdraw_lines_stipple), - BGFX_DECLARE_SHADER_EMBEDDED(vs_debugdraw_fill), - BGFX_DECLARE_SHADER_EMBEDDED(fs_debugdraw_fill), - BGFX_DECLARE_SHADER_EMBEDDED(vs_debugdraw_fill_lit), - BGFX_DECLARE_SHADER_EMBEDDED(fs_debugdraw_fill_lit), -}; - -static bgfx::ShaderHandle createEmbeddedShader(bgfx::RendererType::Enum _type, uint32_t _index) -{ - for (const EmbeddedShader* es = s_embeddedShaders[_index]; bgfx::RendererType::Count != es->type; ++es) + SpriteT() + : m_ra(TextureSizeT, TextureSizeT) { - if (_type == es->type) - { - return bgfx::createShader(bgfx::makeRef(es->data, es->size) ); - } } - bgfx::ShaderHandle handle = BGFX_INVALID_HANDLE; - return handle; -} + SpriteHandle create(uint16_t _width, uint16_t _height) + { + SpriteHandle handle = { bx::HandleAlloc::invalid }; + + if (m_handleAlloc.getNumHandles() < m_handleAlloc.getMaxHandles() ) + { + Pack2D pack; + if (m_ra.find(_width, _height, pack) ) + { + handle.idx = m_handleAlloc.alloc(); + m_pack[handle.idx] = pack; + } + } + + return handle; + } + + void destroy(SpriteHandle _sprite) + { + const Pack2D& pack = m_pack[_sprite.idx]; + m_ra.clear(pack); + m_handleAlloc.free(_sprite.idx); + } + + const Pack2D& get(SpriteHandle _sprite) const + { + return m_pack[_sprite.idx]; + } + + bx::HandleAllocT m_handleAlloc; + Pack2D m_pack[MaxHandlesT]; + RectPack2DT<256> m_ra; +}; struct DebugDraw { @@ -344,35 +389,49 @@ struct DebugDraw #endif // BX_CONFIG_ALLOCATOR_CRT DebugVertex::init(); + DebugUvVertex::init(); DebugShapeVertex::init(); bgfx::RendererType::Enum type = bgfx::getRendererType(); m_program[Program::Lines] = - bgfx::createProgram(createEmbeddedShader(type, 0) - , createEmbeddedShader(type, 1) - , true - ); + 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(createEmbeddedShader(type, 2) - , createEmbeddedShader(type, 3) - , true - ); + 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(createEmbeddedShader(type, 4) - , createEmbeddedShader(type, 5) - , true - ); + 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(createEmbeddedShader(type, 6) - , createEmbeddedShader(type, 7) - , true - ); + bgfx::createProgram( + bgfx::createEmbeddedShader(s_embeddedShaders, type, "vs_debugdraw_fill_lit") + , bgfx::createEmbeddedShader(s_embeddedShaders, type, "fs_debugdraw_fill_lit") + , true + ); - u_params = bgfx::createUniform("u_params", bgfx::UniformType::Vec4, 4); + 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); + m_texture = bgfx::createTexture2D(SPRITE_TEXTURE_SIZE, SPRITE_TEXTURE_SIZE, false, 1, bgfx::TextureFormat::BGRA8); void* vertices[Mesh::Count] = {}; uint16_t* indices[Mesh::Count] = {}; @@ -390,7 +449,7 @@ struct DebugDraw const uint32_t numIndices = numVertices; vertices[id] = BX_ALLOC(m_allocator, numVertices*stride); - memset(vertices[id], 0, numVertices*stride); + bx::memSet(vertices[id], 0, numVertices*stride); genSphere(tess, vertices[id], stride); uint16_t* trilist = (uint16_t*)BX_ALLOC(m_allocator, numIndices*sizeof(uint16_t) ); @@ -408,7 +467,7 @@ struct DebugDraw ); indices[id] = (uint16_t*)BX_ALLOC(m_allocator, (numIndices + numLineListIndices)*sizeof(uint16_t) ); uint16_t* indicesOut = indices[id]; - memcpy(indicesOut, trilist, numIndices*sizeof(uint16_t) ); + bx::memCopy(indicesOut, trilist, numIndices*sizeof(uint16_t) ); bgfx::topologyConvert(bgfx::TopologyConvert::TriListToLineList , &indicesOut[numIndices] @@ -444,7 +503,7 @@ struct DebugDraw vertices[id] = BX_ALLOC(m_allocator, numVertices*stride); indices[id] = (uint16_t*)BX_ALLOC(m_allocator, (numIndices + numLineListIndices)*sizeof(uint16_t) ); - memset(indices[id], 0, (numIndices + numLineListIndices)*sizeof(uint16_t) ); + bx::memSet(indices[id], 0, (numIndices + numLineListIndices)*sizeof(uint16_t) ); DebugShapeVertex* vertex = (DebugShapeVertex*)vertices[id]; uint16_t* index = indices[id]; @@ -505,7 +564,7 @@ struct DebugDraw vertices[id] = BX_ALLOC(m_allocator, numVertices*stride); indices[id] = (uint16_t*)BX_ALLOC(m_allocator, (numIndices + numLineListIndices)*sizeof(uint16_t) ); - memset(indices[id], 0, (numIndices + numLineListIndices)*sizeof(uint16_t) ); + bx::memSet(indices[id], 0, (numIndices + numLineListIndices)*sizeof(uint16_t) ); DebugShapeVertex* vertex = (DebugShapeVertex*)vertices[id]; uint16_t* index = indices[id]; @@ -575,7 +634,7 @@ struct DebugDraw vertices[id] = BX_ALLOC(m_allocator, numVertices*stride); indices[id] = (uint16_t*)BX_ALLOC(m_allocator, (numIndices + numLineListIndices)*sizeof(uint16_t) ); - memset(indices[id], 0, (numIndices + numLineListIndices)*sizeof(uint16_t) ); + bx::memSet(indices[id], 0, (numIndices + numLineListIndices)*sizeof(uint16_t) ); DebugShapeVertex* vertex = (DebugShapeVertex*)vertices[id]; uint16_t* index = indices[id]; @@ -647,12 +706,12 @@ struct DebugDraw for (uint32_t mesh = Mesh::Sphere0; mesh < Mesh::Cube; ++mesh) { Mesh::Enum id = Mesh::Enum(mesh); - memcpy(&vb->data[m_mesh[id].m_startVertex * stride] + bx::memCopy(&vb->data[m_mesh[id].m_startVertex * stride] , vertices[id] , m_mesh[id].m_numVertices*stride ); - memcpy(&ib->data[m_mesh[id].m_startIndex[0] * sizeof(uint16_t)] + bx::memCopy(&ib->data[m_mesh[id].m_startIndex[0] * sizeof(uint16_t)] , indices[id] , (m_mesh[id].m_numIndices[0]+m_mesh[id].m_numIndices[1])*sizeof(uint16_t) ); @@ -661,12 +720,12 @@ struct DebugDraw BX_FREE(m_allocator, indices[id]); } - memcpy(&vb->data[m_mesh[Mesh::Cube].m_startVertex * stride] + bx::memCopy(&vb->data[m_mesh[Mesh::Cube].m_startVertex * stride] , s_cubeVertices , sizeof(s_cubeVertices) ); - memcpy(&ib->data[m_mesh[Mesh::Cube].m_startIndex[0] * sizeof(uint16_t)] + bx::memCopy(&ib->data[m_mesh[Mesh::Cube].m_startIndex[0] * sizeof(uint16_t)] , s_cubeIndices , sizeof(s_cubeIndices) ); @@ -679,6 +738,7 @@ struct DebugDraw m_pos = 0; m_indexPos = 0; m_vertexPos = 0; + m_posQuad = 0; } void shutdown() @@ -690,6 +750,35 @@ struct DebugDraw bgfx::destroyProgram(m_program[ii]); } bgfx::destroyUniform(u_params); + bgfx::destroyUniform(s_texColor); + bgfx::destroyTexture(m_texture); + } + + SpriteHandle createSprite(uint16_t _width, uint16_t _height, const void* _data) + { + SpriteHandle handle = m_sprite.create(_width, _height); + + if (isValid(handle) ) + { + const Pack2D& pack = m_sprite.get(handle); + bgfx::updateTexture2D( + m_texture + , 0 + , 0 + , pack.m_x + , pack.m_y + , pack.m_width + , pack.m_height + , bgfx::copy(_data, pack.m_width*pack.m_height*4) + ); + } + + return handle; + } + + void destroy(SpriteHandle _handle) + { + m_sprite.destroy(_handle); } void begin(uint8_t _viewId) @@ -709,6 +798,7 @@ struct DebugDraw | BGFX_STATE_DEPTH_WRITE ; attrib.m_scale = 1.0f; + attrib.m_spin = 0.0f; attrib.m_offset = 0.0f; attrib.m_abgr = UINT32_MAX; attrib.m_stipple = false; @@ -720,6 +810,7 @@ struct DebugDraw { BX_CHECK(0 == m_stack, "Invalid stack %d.", m_stack); + flushQuad(); flush(); m_state = State::Count; @@ -758,7 +849,7 @@ struct DebugDraw bgfx::Transform transform; m_mtx = bgfx::allocTransform(&transform, 1); - memcpy(transform.data, _mtx, 64); + bx::memCopy(transform.data, _mtx, 64); } void setTranslate(float _x, float _y, float _z) @@ -780,27 +871,34 @@ struct DebugDraw : BGFX_STATE_DEPTH_TEST_GREATER ; - m_attrib[m_stack].m_state &= ~(0 + uint64_t state = m_attrib[m_stack].m_state & ~(0 | BGFX_STATE_DEPTH_TEST_MASK | BGFX_STATE_DEPTH_WRITE | BGFX_STATE_CULL_CW | BGFX_STATE_CULL_CCW ); - m_attrib[m_stack].m_state |= _depthTest + state |= _depthTest ? depthTest : 0 ; - m_attrib[m_stack].m_state |= _depthWrite + state |= _depthWrite ? BGFX_STATE_DEPTH_WRITE : 0 ; - m_attrib[m_stack].m_state |= _clockwise + state |= _clockwise ? BGFX_STATE_CULL_CW : BGFX_STATE_CULL_CCW ; + + if (m_attrib[m_stack].m_state != state) + { + flush(); + } + + m_attrib[m_stack].m_state = state; } void setColor(uint32_t _abgr) @@ -837,6 +935,12 @@ struct DebugDraw attrib.m_scale = _scale; } + void setSpin(float _spin) + { + Attrib& attrib = m_attrib[m_stack]; + attrib.m_spin = _spin; + } + void moveTo(float _x, float _y, float _z = 0.0f) { BX_CHECK(State::Count != m_state); @@ -888,14 +992,14 @@ struct DebugDraw flush(); - memcpy(&m_cache[0], &m_cache[vertexPos], sizeof(DebugVertex) ); + bx::memCopy(&m_cache[0], &m_cache[vertexPos], sizeof(DebugVertex) ); if (vertexPos == pos) { m_pos = 1; } else { - memcpy(&m_cache[1], &m_cache[pos - 1], sizeof(DebugVertex) ); + bx::memCopy(&m_cache[1], &m_cache[pos - 1], sizeof(DebugVertex) ); m_pos = 2; } @@ -985,7 +1089,7 @@ struct DebugDraw void draw(const Disk& _disk) { - BX_UNUSED(_disk); + drawCircle(_disk.m_normal, _disk.m_center, _disk.m_radius, 0.0f); } void draw(const Obb& _obb) @@ -1143,10 +1247,9 @@ struct DebugDraw const float step = bx::pi * 2.0f / num; _weight = bx::fclamp(_weight, 0.0f, 2.0f); - Plane plane = { { _normal[0], _normal[1], _normal[2] }, 0.0f }; float udir[3]; float vdir[3]; - calcPlaneUv(plane, udir, vdir); + bx::vec3TangentFrame(_normal, udir, vdir, attrib.m_spin); float pos[3]; float tmp0[3]; @@ -1218,6 +1321,138 @@ struct DebugDraw close(); } + void drawQuad(const float* _normal, const float* _center, float _size) + { + const Attrib& attrib = m_attrib[m_stack]; + + float udir[3]; + float vdir[3]; + + bx::vec3TangentFrame(_normal, udir, vdir, attrib.m_spin); + + const float halfExtent = _size*0.5f; + + float umin[3]; + bx::vec3Mul(umin, udir, -halfExtent); + + float umax[3]; + bx::vec3Mul(umax, udir, halfExtent); + + float vmin[3]; + bx::vec3Mul(vmin, vdir, -halfExtent); + + float vmax[3]; + bx::vec3Mul(vmax, vdir, halfExtent); + + float pt[3]; + float tmp[3]; + bx::vec3Add(tmp, umin, vmin); + bx::vec3Add(pt, _center, tmp); + moveTo(pt); + + bx::vec3Add(tmp, umax, vmin); + bx::vec3Add(pt, _center, tmp); + lineTo(pt); + + bx::vec3Add(tmp, umax, vmax); + bx::vec3Add(pt, _center, tmp); + lineTo(pt); + + bx::vec3Add(tmp, umin, vmax); + bx::vec3Add(pt, _center, tmp); + lineTo(pt); + + close(); + } + + void drawQuad(SpriteHandle _handle, const float* _normal, const float* _center, float _size) + { + if (m_posQuad == BX_COUNTOF(m_cacheQuad) ) + { + flushQuad(); + } + + const Attrib& attrib = m_attrib[m_stack]; + + float udir[3]; + float vdir[3]; + + bx::vec3TangentFrame(_normal, udir, vdir, attrib.m_spin); + + const Pack2D& pack = m_sprite.get(_handle); + const float invTextureSize = 1.0f/SPRITE_TEXTURE_SIZE; + const float us = pack.m_x * invTextureSize; + const float vs = pack.m_y * invTextureSize; + const float ue = (pack.m_x + pack.m_width ) * invTextureSize; + const float ve = (pack.m_y + pack.m_height) * invTextureSize; + + const float aspectRatio = float(pack.m_width)/float(pack.m_height); + const float halfExtentU = aspectRatio*_size*0.5f; + const float halfExtentV = 1.0f/aspectRatio*_size*0.5f; + + float umin[3]; + bx::vec3Mul(umin, udir, -halfExtentU); + + float umax[3]; + bx::vec3Mul(umax, udir, halfExtentU); + + float vmin[3]; + bx::vec3Mul(vmin, vdir, -halfExtentV); + + float vmax[3]; + bx::vec3Mul(vmax, vdir, halfExtentV); + + DebugUvVertex* vertex = &m_cacheQuad[m_posQuad]; + m_posQuad += 4; + + float pt[3]; + float tmp[3]; + bx::vec3Add(tmp, umin, vmin); + bx::vec3Add(pt, _center, tmp); + vertex->m_x = pt[0]; + vertex->m_y = pt[1]; + vertex->m_z = pt[2]; + vertex->m_u = us; + vertex->m_v = vs; + vertex->m_abgr = attrib.m_abgr; + ++vertex; + + bx::vec3Add(tmp, umax, vmin); + bx::vec3Add(pt, _center, tmp); + vertex->m_x = pt[0]; + vertex->m_y = pt[1]; + vertex->m_z = pt[2]; + vertex->m_u = ue; + vertex->m_v = vs; + vertex->m_abgr = attrib.m_abgr; + ++vertex; + + bx::vec3Add(tmp, umin, vmax); + bx::vec3Add(pt, _center, tmp); + vertex->m_x = pt[0]; + vertex->m_y = pt[1]; + vertex->m_z = pt[2]; + vertex->m_u = us; + vertex->m_v = ve; + vertex->m_abgr = attrib.m_abgr; + ++vertex; + + bx::vec3Add(tmp, umax, vmax); + bx::vec3Add(pt, _center, tmp); + vertex->m_x = pt[0]; + vertex->m_y = pt[1]; + vertex->m_z = pt[2]; + vertex->m_u = ue; + vertex->m_v = ve; + vertex->m_abgr = attrib.m_abgr; + ++vertex; + } + + void drawQuad(bgfx::TextureHandle _handle, const float* _normal, const float* _center, float _size) + { + BX_UNUSED(_handle, _normal, _center, _size); + } + void drawCone(const float* _from, const float* _to, float _radius) { const Attrib& attrib = m_attrib[m_stack]; @@ -1229,9 +1464,9 @@ struct DebugDraw bx::vec3Norm(normal, tmp0); float mtx[2][16]; - bx::mtxFromNormal(mtx[0], normal, _radius, _from); + bx::mtxFromNormal(mtx[0], normal, _radius, _from, attrib.m_spin); - memcpy(mtx[1], mtx[0], 64); + bx::memCopy(mtx[1], mtx[0], 64); mtx[1][12] = _to[0]; mtx[1][13] = _to[1]; mtx[1][14] = _to[2]; @@ -1259,9 +1494,9 @@ struct DebugDraw bx::vec3Norm(normal, tmp0); float mtx[2][16]; - bx::mtxFromNormal(mtx[0], normal, _radius, _from); + bx::mtxFromNormal(mtx[0], normal, _radius, _from, attrib.m_spin); - memcpy(mtx[1], mtx[0], 64); + bx::memCopy(mtx[1], mtx[0], 64); mtx[1][12] = _to[0]; mtx[1][13] = _to[1]; mtx[1][14] = _to[2]; @@ -1357,10 +1592,11 @@ struct DebugDraw void drawGrid(const float* _normal, const float* _center, uint32_t _size, float _step) { + const Attrib& attrib = m_attrib[m_stack]; + float udir[3]; float vdir[3]; - Plane plane = { { _normal[0], _normal[1], _normal[2] }, 0.0f }; - calcPlaneUv(plane, udir, vdir); + bx::vec3TangentFrame(_normal, udir, vdir, attrib.m_spin); bx::vec3Mul(udir, udir, _step); bx::vec3Mul(vdir, vdir, _step); @@ -1526,6 +1762,7 @@ private: LinesStipple, Fill, FillLit, + FillTexture, Count }; @@ -1602,15 +1839,15 @@ private: { if (0 != m_pos) { - if (bgfx::checkAvailTransientBuffers(m_pos, DebugVertex::ms_decl, m_indexPos) ) + if (checkAvailTransientBuffers(m_pos, DebugVertex::ms_decl, m_indexPos) ) { bgfx::TransientVertexBuffer tvb; bgfx::allocTransientVertexBuffer(&tvb, m_pos, DebugVertex::ms_decl); - memcpy(tvb.data, m_cache, m_pos * DebugVertex::ms_decl.m_stride); + bx::memCopy(tvb.data, m_cache, m_pos * DebugVertex::ms_decl.m_stride); bgfx::TransientIndexBuffer tib; bgfx::allocTransientIndexBuffer(&tib, m_indexPos); - memcpy(tib.data, m_indices, m_indexPos * sizeof(uint16_t) ); + bx::memCopy(tib.data, m_indices, m_indexPos * sizeof(uint16_t) ); const Attrib& attrib = m_attrib[m_stack]; @@ -1635,6 +1872,48 @@ private: } } + void flushQuad() + { + if (0 != m_posQuad) + { + const uint32_t numIndices = m_posQuad/4*6; + if (checkAvailTransientBuffers(m_posQuad, DebugUvVertex::ms_decl, numIndices) ) + { + bgfx::TransientVertexBuffer tvb; + bgfx::allocTransientVertexBuffer(&tvb, m_posQuad, DebugUvVertex::ms_decl); + bx::memCopy(tvb.data, m_cacheQuad, m_posQuad * DebugUvVertex::ms_decl.m_stride); + + bgfx::TransientIndexBuffer tib; + bgfx::allocTransientIndexBuffer(&tib, numIndices); + uint16_t* indices = (uint16_t*)tib.data; + for (uint16_t ii = 0, num = m_posQuad/4; ii < num; ++ii) + { + uint16_t startVertex = ii*4; + indices[0] = startVertex+0; + indices[1] = startVertex+1; + indices[2] = startVertex+2; + indices[3] = startVertex+1; + indices[4] = startVertex+3; + indices[5] = startVertex+2; + indices += 6; + } + + const Attrib& attrib = m_attrib[m_stack]; + + bgfx::setVertexBuffer(&tvb); + bgfx::setIndexBuffer(&tib); + bgfx::setState(0 + | (attrib.m_state & ~BGFX_STATE_CULL_MASK) + ); + bgfx::setTransform(m_mtx); + bgfx::setTexture(0, s_texColor, m_texture); + bgfx::submit(m_viewId, m_program[Program::FillTexture]); + } + + m_posQuad = 0; + } + } + struct State { enum Enum @@ -1651,11 +1930,16 @@ private: static const uint32_t stackSize = 16; BX_STATIC_ASSERT(cacheSize >= 3, "Cache must be at least 3 elements."); DebugVertex m_cache[cacheSize+1]; - uint32_t m_mtx; uint16_t m_indices[cacheSize*2]; uint16_t m_pos; uint16_t m_indexPos; uint16_t m_vertexPos; + + static const uint32_t cacheQuadSize = 1024; + DebugUvVertex m_cacheQuad[cacheQuadSize]; + uint16_t m_posQuad; + + uint32_t m_mtx; uint8_t m_viewId; uint8_t m_stack; bool m_depthTestLess; @@ -1665,6 +1949,7 @@ private: uint64_t m_state; float m_offset; float m_scale; + float m_spin; uint32_t m_abgr; bool m_stipple; bool m_wireframe; @@ -1677,6 +1962,11 @@ private: Mesh m_mesh[Mesh::Count]; + typedef SpriteT<256, SPRITE_TEXTURE_SIZE> Sprite; + Sprite m_sprite; + + bgfx::UniformHandle s_texColor; + bgfx::TextureHandle m_texture; bgfx::ProgramHandle m_program[Program::Count]; bgfx::UniformHandle u_params; @@ -1698,6 +1988,16 @@ void ddShutdown() s_dd.shutdown(); } +SpriteHandle ddCreateSprite(uint16_t _width, uint16_t _height, const void* _data) +{ + return s_dd.createSprite(_width, _height, _data); +} + +void ddDestroy(SpriteHandle _handle) +{ + s_dd.destroy(_handle); +} + void ddBegin(uint8_t _viewId) { s_dd.begin(_viewId); @@ -1743,6 +2043,11 @@ void ddSetStipple(bool _stipple, float _scale, float _offset) s_dd.setStipple(_stipple, _scale, _offset); } +void ddSetSpin(float _spin) +{ + s_dd.setSpin(_spin); +} + void ddSetTransform(const void* _mtx) { s_dd.setTransform(_mtx); @@ -1823,6 +2128,21 @@ void ddDrawCircle(Axis::Enum _axis, float _x, float _y, float _z, float _radius, s_dd.drawCircle(_axis, _x, _y, _z, _radius, _weight); } +void ddDrawQuad(const float* _normal, const float* _center, float _size) +{ + s_dd.drawQuad(_normal, _center, _size); +} + +void ddDrawQuad(SpriteHandle _handle, const float* _normal, const float* _center, float _size) +{ + s_dd.drawQuad(_handle, _normal, _center, _size); +} + +void ddDrawQuad(bgfx::TextureHandle _handle, const float* _normal, const float* _center, float _size) +{ + s_dd.drawQuad(_handle, _normal, _center, _size); +} + void ddDrawCone(const void* _from, const void* _to, float _radius) { s_dd.drawCone(_from, _to, _radius); diff --git a/3rdparty/bgfx/examples/common/debugdraw/debugdraw.h b/3rdparty/bgfx/examples/common/debugdraw/debugdraw.h index 2535e5b..222c05f 100644 --- a/3rdparty/bgfx/examples/common/debugdraw/debugdraw.h +++ b/3rdparty/bgfx/examples/common/debugdraw/debugdraw.h @@ -1,6 +1,6 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. - * License: http://www.opensource.org/licenses/BSD-2-Clause + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ #ifndef DEBUGDRAW_H_HEADER_GUARD @@ -21,12 +21,22 @@ struct Axis }; }; +struct SpriteHandle { uint16_t idx; }; + +inline bool isValid(SpriteHandle _handle) { return _handle.idx != UINT16_MAX; } + /// void ddInit(bool _depthTestLess = true, bx::AllocatorI* _allocator = NULL); /// void ddShutdown(); +/// +SpriteHandle ddCreateSprite(uint16_t _width, uint16_t _height, const void* _data); + +/// +void ddDestroy(SpriteHandle _handle); + /// void ddBegin(uint8_t _viewId); @@ -54,6 +64,9 @@ void ddSetWireframe(bool _wireframe); /// void ddSetStipple(bool _stipple, float _scale = 1.0f, float _offset = 0.0f); +/// +void ddSetSpin(float _spin); + /// void ddSetTransform(const void* _mtx); @@ -102,6 +115,15 @@ void ddDrawCircle(const void* _normal, const void* _center, float _radius, float /// void ddDrawCircle(Axis::Enum _axis, float _x, float _y, float _z, float _radius, float _weight = 0.0f); +/// +void ddDrawQuad(const float* _normal, const float* _center, float _size); + +/// +void ddDrawQuad(SpriteHandle _handle, const float* _normal, const float* _center, float _size); + +/// +void ddDrawQuad(bgfx::TextureHandle _handle, const float* _normal, const float* _center, float _size); + /// void ddDrawCone(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 5bdca88..59db5b6 100644 --- a/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_fill.bin.h +++ b/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_fill.bin.h @@ -8,11 +8,147 @@ 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_dx9[192] = +static const uint8_t fs_debugdraw_fill_spv[2128] = { 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, 0xa4, 0x00, 0x00, 0x03, 0xff, 0xff, 0xfe, // ams............. - 0xff, 0x23, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x00, // .#.CTAB....S.... + 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.... +}; +static const uint8_t fs_debugdraw_fill_dx9[180] = +{ + 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. @@ -20,8 +156,8 @@ static const uint8_t fs_debugdraw_fill_dx9[192] = 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, 0x03, 0x00, 0xe4, 0xa0, 0xff, 0xff, 0x00, 0x00, 0x00, // ................ + 0x31, 0x00, 0xab, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, 0x80, 0x03, 0x00, 0xe4, 0xa0, 0xff, // 1............... + 0xff, 0x00, 0x00, 0x00, // .... }; static const uint8_t fs_debugdraw_fill_dx11[251] = { @@ -42,32 +178,35 @@ static const uint8_t fs_debugdraw_fill_dx11[251] = 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, // ...>.....@. }; -static const uint8_t fs_debugdraw_fill_mtl[410] = +static const uint8_t fs_debugdraw_fill_mtl[425] = { - 0x46, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8b, 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, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x34, 0x5d, 0x3b, 0x0a, 0x7d, // 4 u_params[4];.} - 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, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, // o.gl_FragColor = - 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, // _mtl_u.u_params - 0x5b, 0x33, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, // [3];. return _m - 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // tl_o;.}... + 0x46, 0x53, 0x48, 0x04, 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 + 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, // tlShaderInput {. + 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, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, // lShaderOutput {. + 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, // float4 gl_Frag + 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, // Color;.};.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, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x34, 0x5d, 0x3b, 0x0a, 0x7d, 0x3b, // u_params[4];.}; + 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, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, // _mtl_u.u_params[ + 0x33, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, // 3];. return _mt + 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // l_o;.}... }; +extern const uint8_t* fs_debugdraw_fill_pssl; +extern const uint32_t fs_debugdraw_fill_pssl_size; diff --git a/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_fill.sc b/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_fill.sc index 3ae18cd..532cf6e 100644 --- a/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_fill.sc +++ b/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_fill.sc @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ 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 7bc4cae..83c8f56 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 @@ -33,11 +33,266 @@ 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_dx9[412] = +static const uint8_t fs_debugdraw_fill_lit_spv[4024] = { 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, 0x80, 0x01, 0x00, 0x03, 0xff, 0xff, 0xfe, // ams............. - 0xff, 0x23, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x00, // .#.CTAB....S.... + 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.... +}; +static const uint8_t fs_debugdraw_fill_lit_dx9[400] = +{ + 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. @@ -45,22 +300,21 @@ static const uint8_t fs_debugdraw_fill_lit_dx9[412] = 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, 0x51, // 0.10011.16384..Q - 0x00, 0x00, 0x05, 0x04, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x00, 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, // ............ + 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, // ................ }; static const uint8_t fs_debugdraw_fill_lit_dx11[719] = { @@ -110,59 +364,62 @@ static const uint8_t fs_debugdraw_fill_lit_dx11[719] = 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, // .......>.....@. }; -static const uint8_t fs_debugdraw_fill_lit_mtl[835] = +static const uint8_t fs_debugdraw_fill_lit_mtl[862] = { - 0x46, 0x53, 0x48, 0x04, 0x0f, 0xc8, 0x56, 0x5f, 0x00, 0x00, 0x34, 0x03, 0x00, 0x00, 0x75, 0x73, // FSH...V_..4...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, 0x33, 0x20, 0x76, 0x5f, 0x77, 0x6f, 0x72, 0x6c, // . float3 v_worl - 0x64, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, // d;.};.struct xla - 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, // tMtlShaderOutput - 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, // {. float4 gl_F - 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, // ragColor;.};.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, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x34, 0x5d, 0x3b, // at4 u_params[4]; - 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, 0x66, 0x6c, 0x6f, // ut _mtl_o;. flo - 0x61, 0x74, 0x33, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x3b, 0x0a, 0x20, 0x20, // at3 tmpvar_1;. - 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x64, 0x66, 0x64, 0x78, 0x28, // tmpvar_1 = dfdx( - 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x29, 0x3b, // _mtl_i.v_world); - 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, // . float3 tmpvar - 0x5f, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x20, 0x3d, // _2;. tmpvar_2 = - 0x20, 0x64, 0x66, 0x64, 0x79, 0x28, 0x2d, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, // dfdy(-_mtl_i.v_ - 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, // world);. float4 - 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, // tmpvar_3;. tmp - 0x76, 0x61, 0x72, 0x5f, 0x33, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x28, 0x6d, 0x69, 0x78, // var_3.xyz = (mix - 0x20, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, // (_mtl_u.u_param - 0x73, 0x5b, 0x32, 0x5d, 0x2e, 0x78, 0x79, 0x7a, 0x2c, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, // s[2].xyz, _mtl_u - 0x2e, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x31, 0x5d, 0x2e, 0x78, 0x79, 0x7a, // .u_params[1].xyz - 0x2c, 0x20, 0x28, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x28, 0x64, 0x6f, 0x74, 0x20, 0x28, 0x6e, 0x6f, // , (. (dot (no - 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x28, 0x28, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, // rmalize((. - 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x79, 0x7a, 0x78, 0x20, 0x2a, 0x20, // (tmpvar_1.yzx * - 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x2e, 0x7a, 0x78, 0x79, 0x29, 0x0a, 0x20, 0x20, // tmpvar_2.zxy). - 0x20, 0x20, 0x20, 0x2d, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x74, 0x6d, 0x70, // - . (tmp - 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x7a, 0x78, 0x79, 0x20, 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, // var_1.zxy * tmpv - 0x61, 0x72, 0x5f, 0x32, 0x2e, 0x79, 0x7a, 0x78, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, // ar_2.yzx). )) - 0x2c, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, // , _mtl_u.u_param - 0x73, 0x5b, 0x30, 0x5d, 0x2e, 0x78, 0x79, 0x7a, 0x29, 0x20, 0x2a, 0x20, 0x30, 0x2e, 0x35, 0x29, // s[0].xyz) * 0.5) - 0x0a, 0x20, 0x20, 0x20, 0x2b, 0x20, 0x30, 0x2e, 0x35, 0x29, 0x29, 0x20, 0x2a, 0x20, 0x5f, 0x6d, // . + 0.5)) * _m - 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x33, 0x5d, // tl_u.u_params[3] - 0x2e, 0x78, 0x79, 0x7a, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // .xyz);. tmpvar_ - 0x33, 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x70, // 3.w = _mtl_u.u_p - 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x33, 0x5d, 0x2e, 0x77, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, // arams[3].w;. _m - 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, // tl_o.gl_FragColo - 0x72, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x3b, 0x0a, 0x20, 0x20, // r = tmpvar_3;. - 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, 0x04, 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 + 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, 0x77, 0x6f, 0x72, 0x6c, 0x64, // float3 v_world + 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, 0x46, 0x72, // {. float4 gl_Fr + 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, // agColor;.};.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, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x34, 0x5d, 0x3b, 0x0a, // t4 u_params[4];. + 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, 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, 0x20, 0x3d, 0x20, 0x64, 0x66, // . tmpvar_1 = df + 0x64, 0x78, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x77, 0x6f, 0x72, 0x6c, // dx(_mtl_i.v_worl + 0x64, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x74, 0x6d, 0x70, // d);. float3 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, 0x20, 0x3d, 0x20, 0x64, 0x66, 0x64, 0x79, 0x28, 0x2d, 0x5f, 0x6d, // var_2 = dfdy(-_m + 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x29, 0x3b, 0x0a, 0x20, // tl_i.v_world);. + 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, // float4 tmpvar_3 + 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, // = 0;. tmpvar_3 + 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x28, 0x6d, 0x69, 0x78, 0x20, 0x28, 0x5f, 0x6d, 0x74, // .xyz = (mix (_mt + 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x32, 0x5d, 0x2e, // l_u.u_params[2]. + 0x78, 0x79, 0x7a, 0x2c, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x70, 0x61, // xyz, _mtl_u.u_pa + 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x31, 0x5d, 0x2e, 0x78, 0x79, 0x7a, 0x2c, 0x20, 0x28, 0x0a, 0x20, // rams[1].xyz, (. + 0x20, 0x20, 0x20, 0x28, 0x64, 0x6f, 0x74, 0x20, 0x28, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, // (dot (normali + 0x7a, 0x65, 0x28, 0x28, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x74, 0x6d, 0x70, 0x76, // ze((. (tmpv + 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x79, 0x7a, 0x78, 0x20, 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // ar_1.yzx * tmpva + 0x72, 0x5f, 0x32, 0x2e, 0x7a, 0x78, 0x79, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x20, // r_2.zxy). - + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, // . (tmpvar_1 + 0x2e, 0x7a, 0x78, 0x79, 0x20, 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x2e, // .zxy * tmpvar_2. + 0x79, 0x7a, 0x78, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x2c, 0x20, 0x5f, 0x6d, 0x74, // yzx). )), _mt + 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x30, 0x5d, 0x2e, // l_u.u_params[0]. + 0x78, 0x79, 0x7a, 0x29, 0x20, 0x2a, 0x20, 0x30, 0x2e, 0x35, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x2b, // xyz) * 0.5). + + 0x20, 0x30, 0x2e, 0x35, 0x29, 0x29, 0x20, 0x2a, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, // 0.5)) * _mtl_u. + 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x33, 0x5d, 0x2e, 0x78, 0x79, 0x7a, 0x29, // u_params[3].xyz) + 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x2e, 0x77, 0x20, 0x3d, // ;. tmpvar_3.w = + 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, // _mtl_u.u_params + 0x5b, 0x33, 0x5d, 0x2e, 0x77, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, // [3].w;. _mtl_o. + 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x74, // gl_FragColor = t + 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, // mpvar_3;. retur + 0x6e, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // n _mtl_o;.}... }; +extern const uint8_t* fs_debugdraw_fill_lit_pssl; +extern const uint32_t fs_debugdraw_fill_lit_pssl_size; diff --git a/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_fill_lit.sc b/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_fill_lit.sc index 3e06387..7fb087d 100644 --- a/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_fill_lit.sc +++ b/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_fill_lit.sc @@ -1,7 +1,7 @@ $input v_view, v_world /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ 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 747bb10..75233cf 100644 --- a/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_lines.bin.h +++ b/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_lines.bin.h @@ -7,17 +7,150 @@ static const uint8_t fs_debugdraw_lines_glsl[89] = 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_dx9[141] = +static const uint8_t fs_debugdraw_lines_spv[2065] = { - 0x46, 0x53, 0x48, 0x04, 0xa4, 0x8b, 0xef, 0x49, 0x00, 0x00, 0x80, 0x00, 0x00, 0x03, 0xff, 0xff, // FSH....I........ - 0xfe, 0xff, 0x17, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // ....CTAB....#... + 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, // . +}; +static const uint8_t fs_debugdraw_lines_dx9[129] = +{ + 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, 0x30, 0x2e, 0x31, 0x30, 0x30, 0x31, 0x31, 0x2e, 0x31, 0x36, 0x33, 0x38, 0x34, 0x00, 0xab, // .0.10011.16384.. - 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x01, 0x00, 0x00, 0x02, // ................ - 0x00, 0x08, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // ............. + 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, // . }; static const uint8_t fs_debugdraw_lines_dx11[260] = { @@ -68,3 +201,5 @@ static const uint8_t fs_debugdraw_lines_mtl[404] = 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_debugdraw_lines_pssl; +extern const uint32_t fs_debugdraw_lines_pssl_size; diff --git a/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_lines.sc b/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_lines.sc index 9ba669f..19f8692 100644 --- a/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_lines.sc +++ b/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_lines.sc @@ -1,8 +1,8 @@ $input v_color0 /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. - * License: http://www.opensource.org/licenses/BSD-2-Clause + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ #include 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 76ea165..9d8ff47 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 @@ -16,28 +16,204 @@ 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_dx9[309] = +static const uint8_t fs_debugdraw_lines_stipple_spv[2773] = { - 0x46, 0x53, 0x48, 0x04, 0xe7, 0x1a, 0x5a, 0xef, 0x00, 0x00, 0x28, 0x01, 0x00, 0x03, 0xff, 0xff, // FSH...Z...(..... - 0xfe, 0xff, 0x17, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // ....CTAB....#... + 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.... +}; +static const uint8_t fs_debugdraw_lines_stipple_dx9[297] = +{ + 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, 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, 0x40, 0x00, 0x00, 0x80, 0x3e, // Q..........@...> - 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x05, 0x01, 0x00, 0x0f, 0xa0, // ...>....Q....... - 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, // ..............U. - 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, // ................ - 0x00, 0x00, 0x55, 0xa1, 0x01, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80, // ..U............. - 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0xaa, 0xa0, 0x58, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, // ........X....... - 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x55, 0xa0, 0x41, 0x00, 0x00, 0x01, // ..........U.A... - 0x00, 0x00, 0x0f, 0x80, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x90, // ................ - 0xff, 0xff, 0x00, 0x00, 0x00, // ..... + 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, // ......... }; static const uint8_t fs_debugdraw_lines_stipple_dx11[440] = { @@ -70,9 +246,9 @@ static const uint8_t fs_debugdraw_lines_stipple_dx11[440] = 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, // >....... }; -static const uint8_t fs_debugdraw_lines_stipple_mtl[551] = +static const uint8_t fs_debugdraw_lines_stipple_mtl[555] = { - 0x46, 0x53, 0x48, 0x04, 0xe7, 0x1a, 0x5a, 0xef, 0x00, 0x00, 0x18, 0x02, 0x00, 0x00, 0x75, 0x73, // FSH...Z.......us + 0x46, 0x53, 0x48, 0x04, 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 { @@ -95,16 +271,18 @@ static const uint8_t fs_debugdraw_lines_stipple_mtl[551] = 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 - 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, 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x28, 0x66, // var_1 = (float(f - 0x6d, 0x6f, 0x64, 0x20, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x73, 0x74, // mod (_mtl_i.v_st - 0x69, 0x70, 0x70, 0x6c, 0x65, 0x2c, 0x20, 0x30, 0x2e, 0x32, 0x35, 0x29, 0x29, 0x29, 0x3b, 0x0a, // ipple, 0.25)));. - 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x30, 0x2e, 0x31, 0x32, 0x35, 0x20, 0x3c, 0x20, 0x74, // if ((0.125 < t - 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x29, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, // mpvar_1)) {. - 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, // discard_fragment - 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, // ();. };. _mtl_ - 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, // o.gl_FragColor = - 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, // _mtl_i.v_color0 - 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;.}... + 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, // tmpvar_1 = 0;. + 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x28, 0x66, 0x6c, 0x6f, // tmpvar_1 = (flo + 0x61, 0x74, 0x28, 0x66, 0x6d, 0x6f, 0x64, 0x20, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, // at(fmod (_mtl_i. + 0x76, 0x5f, 0x73, 0x74, 0x69, 0x70, 0x70, 0x6c, 0x65, 0x2c, 0x20, 0x30, 0x2e, 0x32, 0x35, 0x29, // v_stipple, 0.25) + 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x30, 0x2e, 0x31, 0x32, 0x35, // ));. if ((0.125 + 0x20, 0x3c, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x29, 0x29, 0x20, 0x7b, 0x0a, // < tmpvar_1)) {. + 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, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x63, 0x6f, // or = _mtl_i.v_co + 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, // lor0;. return _ + 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // mtl_o;.}... }; +extern const uint8_t* fs_debugdraw_lines_stipple_pssl; +extern const uint32_t fs_debugdraw_lines_stipple_pssl_size; diff --git a/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_lines_stipple.sc b/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_lines_stipple.sc index bfc5b64..29a2e7a 100644 --- a/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_lines_stipple.sc +++ b/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_lines_stipple.sc @@ -1,8 +1,8 @@ $input v_color0, v_stipple /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. - * License: http://www.opensource.org/licenses/BSD-2-Clause + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ #include diff --git a/3rdparty/bgfx/examples/common/debugdraw/makefile b/3rdparty/bgfx/examples/common/debugdraw/makefile index ab2bae2..27e6c6b 100644 --- a/3rdparty/bgfx/examples/common/debugdraw/makefile +++ b/3rdparty/bgfx/examples/common/debugdraw/makefile @@ -1,6 +1,6 @@ # -# Copyright 2011-2016 Branimir Karadzic. All rights reserved. -# License: http://www.opensource.org/licenses/BSD-2-Clause +# Copyright 2011-2017 Branimir Karadzic. All rights reserved. +# License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause # include ../../../../bgfx/scripts/shader-embeded.mk diff --git a/3rdparty/bgfx/examples/common/debugdraw/varying.def.sc b/3rdparty/bgfx/examples/common/debugdraw/varying.def.sc index 07d21a3..62da714 100644 --- a/3rdparty/bgfx/examples/common/debugdraw/varying.def.sc +++ b/3rdparty/bgfx/examples/common/debugdraw/varying.def.sc @@ -1,8 +1,9 @@ vec3 a_position : POSITION; ivec4 a_indices : BLENDINDICES; vec4 a_color0 : COLOR0; -float a_texcoord0 : TEXCOORD0; +vec2 a_texcoord0 : TEXCOORD0; +vec2 v_texcoord0 : TEXCOORD0 = vec2(0.0, 0.0); vec4 v_color0 : COLOR = vec4(1.0, 0.0, 0.0, 1.0); float v_stipple : TEXCOORD0 = 0.0; vec3 v_view : TEXCOORD0 = vec3(0.0, 0.0, 0.0); 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 50c1b1e..d816a1c 100644 --- a/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill.bin.h +++ b/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill.bin.h @@ -22,12 +22,180 @@ 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_dx9[492] = +static const uint8_t vs_debugdraw_fill_spv[2636] = +{ + 0x56, 0x53, 0x48, 0x04, 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.... +}; +static const uint8_t vs_debugdraw_fill_dx9[480] = { 0x56, 0x53, 0x48, 0x04, 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, 0xc0, 0x01, 0x00, 0x03, 0xfe, 0xff, 0xfe, // roj............. - 0xff, 0x2e, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, // ...CTAB......... + 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, // ................ @@ -37,24 +205,23 @@ static const uint8_t vs_debugdraw_fill_dx9[492] = 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, 0x30, 0x2e, 0x31, 0x30, // Compiler 10.0.10 - 0x30, 0x31, 0x31, 0x2e, 0x31, 0x36, 0x33, 0x38, 0x34, 0x00, 0xab, 0x51, 0x00, 0x00, 0x05, 0x84, // 011.16384..Q.... - 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, // .............U.. - 0x20, 0xe4, 0xa0, 0x00, 0x00, 0x00, 0xb0, 0x04, 0x00, 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, 0x81, 0x00, 0xe4, 0xa0, 0x04, 0x00, 0x00, 0x04, 0x01, // .....U.......... - 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, // ............ + 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, // ................ }; static const uint8_t vs_debugdraw_fill_dx11[675] = { @@ -102,47 +269,51 @@ static const uint8_t vs_debugdraw_fill_dx11[675] = 0x0e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x02, 0x0e, 0x00, 0x01, // .......>........ 0x00, 0x40, 0x08, // .@. }; -static const uint8_t vs_debugdraw_fill_mtl[650] = +static const uint8_t vs_debugdraw_fill_mtl[685] = { - 0x56, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 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, 0x69, 0x6e, 0x64, 0x69, // . float4 a_indi - 0x63, 0x65, 0x73, 0x20, 0x5b, 0x5b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x28, // ces [[attribute( - 0x30, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x61, // 0)]];. float3 a - 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x5b, 0x5b, 0x61, 0x74, 0x74, 0x72, // _position [[attr - 0x69, 0x62, 0x75, 0x74, 0x65, 0x28, 0x31, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, // ibute(1)]];.};.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, 0x7d, // [[position]];.} - 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, 0x78, 0x34, 0x20, 0x75, 0x5f, 0x76, 0x69, 0x65, // float4x4 u_vie - 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x78, // wProj;. float4x - 0x34, 0x20, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5b, 0x33, 0x32, 0x5d, 0x3b, 0x0a, 0x7d, // 4 u_model[32];.} - 0x3b, 0x0a, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, // ;.vertex xlatMtl - 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x78, 0x6c, 0x61, // ShaderOutput xla - 0x74, 0x4d, 0x74, 0x6c, 0x4d, 0x61, 0x69, 0x6e, 0x20, 0x28, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, // tMtlMain (xlatMt - 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, // lShaderInput _mt - 0x6c, 0x5f, 0x69, 0x20, 0x5b, 0x5b, 0x73, 0x74, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x6e, 0x5d, 0x5d, // l_i [[stage_in]] - 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, // , constant xlatM - 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x26, // tlShaderUniform& - 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x20, 0x5b, 0x5b, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, // _mtl_u [[buffer - 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, 0x34, 0x20, // mtl_o;. float4 - 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, // tmpvar_1;. tmpv - 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x31, 0x2e, 0x30, 0x3b, 0x0a, 0x20, 0x20, // ar_1.w = 1.0;. - 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x5f, // tmpvar_1.xyz = _ - 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, // mtl_i.a_position - 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x50, 0x6f, // ;. _mtl_o.gl_Po - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, // sition = (_mtl_u - 0x2e, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x20, 0x2a, 0x20, 0x28, 0x5f, // .u_viewProj * (_ - 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5b, 0x69, 0x6e, // mtl_u.u_model[in - 0x74, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x61, 0x5f, 0x69, 0x6e, 0x64, 0x69, 0x63, // t(_mtl_i.a_indic - 0x65, 0x73, 0x2e, 0x78, 0x29, 0x5d, 0x20, 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // es.x)] * tmpvar_ - 0x31, 0x29, 0x29, 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;.}... + 0x56, 0x53, 0x48, 0x04, 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 + 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, 0x61, 0x5f, 0x69, 0x6e, 0x64, 0x69, 0x63, // float4 a_indic + 0x65, 0x73, 0x20, 0x5b, 0x5b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x28, 0x30, // es [[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, 0x7d, 0x3b, 0x0a, 0x73, 0x74, // bute(1)]];.};.st + 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, // ruct xlatMtlShad + 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, // erOutput {. flo + 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, // at4 gl_Position + 0x5b, 0x5b, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5d, 0x5d, 0x3b, 0x0a, 0x7d, 0x3b, // [[position]];.}; + 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, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x78, 0x34, // Proj;. float4x4 + 0x20, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5b, 0x33, 0x32, 0x5d, 0x3b, 0x0a, 0x7d, 0x3b, // u_model[32];.}; + 0x0a, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, // .vertex xlatMtlS + 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // haderOutput xlat + 0x4d, 0x74, 0x6c, 0x4d, 0x61, 0x69, 0x6e, 0x20, 0x28, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, // MtlMain (xlatMtl + 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, // ShaderInput _mtl + 0x5f, 0x69, 0x20, 0x5b, 0x5b, 0x73, 0x74, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x6e, 0x5d, 0x5d, 0x2c, // _i [[stage_in]], + 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, // constant xlatMt + 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x26, 0x20, // lShaderUniform& + 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x20, 0x5b, 0x5b, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, // _mtl_u [[buffer( + 0x30, 0x29, 0x5d, 0x5d, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, // 0)]]).{. xlatMt + 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, // lShaderOutput _m + 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x74, // tl_o;. float4 t + 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, // mpvar_1 = 0;. t + 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x31, 0x2e, 0x30, 0x3b, // mpvar_1.w = 1.0; + 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x78, 0x79, 0x7a, 0x20, // . tmpvar_1.xyz + 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, // = _mtl_i.a_posit + 0x69, 0x6f, 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, // ion;. _mtl_o.gl + 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x28, 0x5f, 0x6d, 0x74, // _Position = (_mt + 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x20, 0x2a, // l_u.u_viewProj * + 0x20, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, // (_mtl_u.u_model + 0x5b, 0x69, 0x6e, 0x74, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x61, 0x5f, 0x69, 0x6e, // [int(_mtl_i.a_in + 0x64, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x78, 0x29, 0x5d, 0x20, 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, // dices.x)] * tmpv + 0x61, 0x72, 0x5f, 0x31, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, // ar_1));. return + 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // _mtl_o;.}... }; +extern const uint8_t* vs_debugdraw_fill_pssl; +extern const uint32_t vs_debugdraw_fill_pssl_size; diff --git a/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill.sc b/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill.sc index 58f7be4..7cd02be 100644 --- a/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill.sc +++ b/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill.sc @@ -1,7 +1,7 @@ $input a_position, a_indices /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ 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 c820141..c925652 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 @@ -35,12 +35,221 @@ 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_dx9[645] = +static const uint8_t vs_debugdraw_fill_lit_spv[3281] = +{ + 0x56, 0x53, 0x48, 0x04, 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, // . +}; +static const uint8_t vs_debugdraw_fill_lit_dx9[633] = { 0x56, 0x53, 0x48, 0x04, 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, 0x4c, 0x02, 0x00, 0x03, 0xfe, 0xff, 0xfe, 0xff, 0x35, 0x00, // ......L.......5. + 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...........`... @@ -53,31 +262,30 @@ static const uint8_t vs_debugdraw_fill_lit_dx9[645] = 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, 0x30, 0x2e, 0x31, 0x30, 0x30, 0x31, 0x31, 0x2e, 0x31, 0x36, 0x33, 0x38, // 10.0.10011.1638 - 0x34, 0x00, 0xab, 0xab, 0x51, 0x00, 0x00, 0x05, 0x88, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x80, 0x40, // 4...Q..........@ - 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, // ..............U. - 0x01, 0x20, 0xe4, 0xa0, 0x00, 0x00, 0x00, 0xb0, 0x04, 0x00, 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, 0xe4, 0xa0, 0x04, 0x00, 0x00, 0x04, // ......U......... - 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, 0x01, 0x00, 0x07, 0x80, // ..U............. - 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, // ..... + 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, // ......... }; static const uint8_t vs_debugdraw_fill_lit_dx11[944] = { @@ -141,58 +349,64 @@ static const uint8_t vs_debugdraw_fill_lit_dx11[944] = 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, // ....>........... }; -static const uint8_t vs_debugdraw_fill_lit_mtl[829] = +static const uint8_t vs_debugdraw_fill_lit_mtl[881] = { - 0x56, 0x53, 0x48, 0x04, 0x0f, 0xc8, 0x56, 0x5f, 0x00, 0x00, 0x2e, 0x03, 0x00, 0x00, 0x75, 0x73, // VSH...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 { - 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x61, 0x5f, 0x69, 0x6e, 0x64, 0x69, // . float4 a_indi - 0x63, 0x65, 0x73, 0x20, 0x5b, 0x5b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x28, // ces [[attribute( - 0x30, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x61, // 0)]];. float3 a - 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x5b, 0x5b, 0x61, 0x74, 0x74, 0x72, // _position [[attr - 0x69, 0x62, 0x75, 0x74, 0x65, 0x28, 0x31, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, // ibute(1)]];.};.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, 0x33, 0x20, 0x76, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x3b, 0x0a, // float3 v_view;. - 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x76, 0x5f, 0x77, 0x6f, 0x72, 0x6c, 0x64, // float3 v_world - 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, 0x78, 0x34, 0x20, 0x75, 0x5f, // {. float4x4 u_ - 0x76, 0x69, 0x65, 0x77, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x78, 0x34, // view;. float4x4 - 0x20, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x3b, 0x0a, 0x20, 0x20, 0x66, // u_viewProj;. f - 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x78, 0x34, 0x20, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5b, // loat4x4 u_model[ - 0x33, 0x32, 0x5d, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x20, 0x78, // 32];.};.vertex 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, 0x66, // tput _mtl_o;. f - 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x3b, 0x0a, // loat4 tmpvar_1;. + 0x56, 0x53, 0x48, 0x04, 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 + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x3b, // namespace metal; + 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, // .struct xlatMtlS + 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, // haderInput {. f + 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x61, 0x5f, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x20, // loat4 a_indices + 0x5b, 0x5b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x28, 0x30, 0x29, 0x5d, 0x5d, // [[attribute(0)]] + 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x61, 0x5f, 0x70, 0x6f, 0x73, // ;. float3 a_pos + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x5b, 0x5b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, // ition [[attribut + 0x65, 0x28, 0x31, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, // e(1)]];.};.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, 0x33, 0x20, 0x76, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, // at3 v_view;. fl + 0x6f, 0x61, 0x74, 0x33, 0x20, 0x76, 0x5f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x3b, 0x0a, 0x7d, 0x3b, // oat3 v_world;.}; + 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 + 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x78, 0x34, 0x20, 0x75, 0x5f, 0x76, // ;. float4x4 u_v + 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, // iewProj;. float + 0x34, 0x78, 0x34, 0x20, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5b, 0x33, 0x32, 0x5d, 0x3b, // 4x4 u_model[32]; + 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, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, // sition;. float4 - 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, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, // var_2 = (_mtl_u. - 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5b, 0x69, 0x6e, 0x74, 0x28, 0x5f, 0x6d, 0x74, 0x6c, // u_model[int(_mtl - 0x5f, 0x69, 0x2e, 0x61, 0x5f, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x78, 0x29, 0x5d, // _i.a_indices.x)] - 0x20, 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, // * tmpvar_1);. - 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, 0x76, // on = (_mtl_u.u_v - 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x20, 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, // iewProj * tmpvar - 0x5f, 0x32, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x76, 0x5f, // _2);. _mtl_o.v_ - 0x76, 0x69, 0x65, 0x77, 0x20, 0x3d, 0x20, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, // view = (_mtl_u.u - 0x5f, 0x76, 0x69, 0x65, 0x77, 0x20, 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, // _view * tmpvar_2 - 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, // ).xyz;. _mtl_o. - 0x76, 0x5f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, // v_world = tmpvar - 0x5f, 0x32, 0x2e, 0x78, 0x79, 0x7a, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, // _2.xyz;. return - 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // _mtl_o;.}... + 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, 0x5f, 0x6d, 0x74, // tmpvar_2 = (_mt + 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5b, 0x69, 0x6e, 0x74, 0x28, // l_u.u_model[int( + 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x61, 0x5f, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, // _mtl_i.a_indices + 0x2e, 0x78, 0x29, 0x5d, 0x20, 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x29, // .x)] * tmpvar_1) + 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x50, 0x6f, // ;. _mtl_o.gl_Po + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, // sition = (_mtl_u + 0x2e, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x20, 0x2a, 0x20, 0x74, 0x6d, // .u_viewProj * tm + 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, // pvar_2);. _mtl_ + 0x6f, 0x2e, 0x76, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x20, 0x3d, 0x20, 0x28, 0x5f, 0x6d, 0x74, 0x6c, // o.v_view = (_mtl + 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x20, 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, // _u.u_view * tmpv + 0x61, 0x72, 0x5f, 0x32, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, // ar_2).xyz;. _mt + 0x6c, 0x5f, 0x6f, 0x2e, 0x76, 0x5f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x20, 0x3d, 0x20, 0x74, 0x6d, // l_o.v_world = tm + 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x2e, 0x78, 0x79, 0x7a, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, // pvar_2.xyz;. 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* vs_debugdraw_fill_lit_pssl; +extern const uint32_t vs_debugdraw_fill_lit_pssl_size; diff --git a/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill_lit.sc b/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill_lit.sc index ea4ce6b..ab5a83f 100644 --- a/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill_lit.sc +++ b/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill_lit.sc @@ -2,7 +2,7 @@ $input a_position, a_indices $output v_view, v_world /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ 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 b5c9c73..bd669a2 100644 --- a/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_lines.bin.h +++ b/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_lines.bin.h @@ -22,11 +22,187 @@ 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_dx9[323] = +static const uint8_t vs_debugdraw_lines_spv[2763] = +{ + 0x56, 0x53, 0x48, 0x04, 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.... +}; +static const uint8_t vs_debugdraw_lines_dx9[311] = { 0x56, 0x53, 0x48, 0x04, 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...... - 0x20, 0x01, 0x00, 0x03, 0xfe, 0xff, 0xfe, 0xff, 0x24, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, // .......$.CTAB.. + 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_ @@ -34,17 +210,16 @@ static const uint8_t vs_debugdraw_lines_dx9[323] = 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, 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, // ........U....... - 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, // ... + 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, // ....... }; static const uint8_t vs_debugdraw_lines_dx11[510] = { @@ -81,47 +256,51 @@ static const uint8_t vs_debugdraw_lines_dx11[510] = 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, // ..>.........@. }; -static const uint8_t vs_debugdraw_lines_mtl[647] = +static const uint8_t vs_debugdraw_lines_mtl[673] = { - 0x56, 0x53, 0x48, 0x04, 0xa4, 0x8b, 0xef, 0x49, 0x00, 0x00, 0x78, 0x02, 0x00, 0x00, 0x75, 0x73, // VSH....I..x...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, 0x7d, 0x3b, 0x0a, 0x73, 0x74, // bute(1)]];.};.st - 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, // ruct xlatMtlShad - 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, // erOutput {. flo - 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, // at4 gl_Position - 0x5b, 0x5b, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, // [[position]];. - 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, // float4 v_color0; + 0x56, 0x53, 0x48, 0x04, 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 + 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, 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, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, // tlShaderUniform - 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x78, 0x34, 0x20, 0x75, 0x5f, 0x6d, // {. float4x4 u_m - 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x3b, 0x0a, 0x7d, 0x3b, // odelViewProj;.}; - 0x0a, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, // .vertex xlatMtlS - 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // haderOutput xlat - 0x4d, 0x74, 0x6c, 0x4d, 0x61, 0x69, 0x6e, 0x20, 0x28, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, // MtlMain (xlatMtl - 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, // ShaderInput _mtl - 0x5f, 0x69, 0x20, 0x5b, 0x5b, 0x73, 0x74, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x6e, 0x5d, 0x5d, 0x2c, // _i [[stage_in]], - 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, // constant xlatMt - 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x26, 0x20, // lShaderUniform& - 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x20, 0x5b, 0x5b, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, // _mtl_u [[buffer( - 0x30, 0x29, 0x5d, 0x5d, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, // 0)]]).{. xlatMt - 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, // lShaderOutput _m - 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x74, // tl_o;. float4 t - 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // mpvar_1;. tmpva - 0x72, 0x5f, 0x31, 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x31, 0x2e, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, // r_1.w = 1.0;. t - 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x5f, 0x6d, // mpvar_1.xyz = _m - 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3b, // tl_i.a_position; - 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, // . _mtl_o.gl_Pos - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, // ition = (_mtl_u. - 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x20, // u_modelViewProj - 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x5f, // * tmpvar_1);. _ - 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x20, 0x3d, // mtl_o.v_color0 = - 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, // _mtl_i.a_color0 - 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;.}... + 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, 0x50, 0x6f, 0x73, // . float4 gl_Pos + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x5b, 0x5b, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, // ition [[position + 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x76, 0x5f, 0x63, // ]];. float4 v_c + 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, // olor0;.};.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 + 0x78, 0x34, 0x20, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, // x4 u_modelViewPr + 0x6f, 0x6a, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x20, 0x78, 0x6c, // oj;.};.vertex 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, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, // uffer(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, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, // oat4 tmpvar_1 = + 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x77, 0x20, // 0;. tmpvar_1.w + 0x3d, 0x20, 0x31, 0x2e, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // = 1.0;. tmpvar_ + 0x31, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x61, // 1.xyz = _mtl_i.a + 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, // _position;. _mt + 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, // l_o.gl_Position + 0x3d, 0x20, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, // = (_mtl_u.u_mode + 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x20, 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, // lViewProj * tmpv + 0x61, 0x72, 0x5f, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, // ar_1);. _mtl_o. + 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, // v_color0 = _mtl_ + 0x69, 0x2e, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, // i.a_color0;. 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* vs_debugdraw_lines_pssl; +extern const uint32_t vs_debugdraw_lines_pssl_size; diff --git a/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_lines.sc b/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_lines.sc index b4090d2..a709737 100644 --- a/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_lines.sc +++ b/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_lines.sc @@ -2,8 +2,8 @@ $input a_position, a_color0 $output v_color0 /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. - * License: http://www.opensource.org/licenses/BSD-2-Clause + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ #include 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 875c4ac..65a08ad 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,38 +1,246 @@ -static const uint8_t vs_debugdraw_lines_stipple_glsl[418] = +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 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, // elViewProj...... - 0x7d, 0x01, 0x00, 0x00, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x68, 0x69, // }...attribute hi + 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 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, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, // ghp float a_texc - 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x68, // oord0;.varying h - 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // ighp vec4 v_colo - 0x72, 0x30, 0x3b, 0x0a, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x69, 0x67, 0x68, // r0;.varying high - 0x70, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x76, 0x5f, 0x73, 0x74, 0x69, 0x70, 0x70, 0x6c, // p float v_stippl - 0x65, 0x3b, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, // e;.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, 0x77, 0x20, 0x3d, 0x20, 0x31, 0x2e, 0x30, 0x3b, // mpvar_1.w = 1.0; - 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x78, 0x79, 0x7a, 0x20, // . tmpvar_1.xyz - 0x3d, 0x20, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0x0a, 0x20, 0x20, // = a_position;. - 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x28, 0x75, // gl_Position = (u - 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x20, 0x2a, // _modelViewProj * - 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x76, 0x5f, // tmpvar_1);. v_ - 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x20, 0x3d, 0x20, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // color0 = a_color - 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x76, 0x5f, 0x73, 0x74, 0x69, 0x70, 0x70, 0x6c, 0x65, 0x20, 0x3d, // 0;. v_stipple = - 0x20, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x7d, 0x0a, // a_texcoord0;.}. - 0x0a, 0x00, // .. + 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, // ghp vec2 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, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x76, 0x5f, 0x73, 0x74, 0x69, 0x70, 0x70, 0x6c, 0x65, // float v_stipple + 0x3b, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, // ;.uniform highp + 0x6d, 0x61, 0x74, 0x34, 0x20, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, // mat4 u_modelView + 0x50, 0x72, 0x6f, 0x6a, 0x3b, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x20, // Proj;.void main + 0x28, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, // ().{. highp vec + 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, 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x31, 0x2e, 0x30, 0x3b, 0x0a, // pvar_1.w = 1.0;. + 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, // tmpvar_1.xyz = + 0x20, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x67, // a_position;. g + 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x5f, // l_Position = (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, 0x76, 0x5f, 0x63, // tmpvar_1);. v_c + 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x20, 0x3d, 0x20, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, // olor0 = a_color0 + 0x3b, 0x0a, 0x20, 0x20, 0x76, 0x5f, 0x73, 0x74, 0x69, 0x70, 0x70, 0x6c, 0x65, 0x20, 0x3d, 0x20, // ;. v_stipple = + 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_dx9[359] = +static const uint8_t vs_debugdraw_lines_stipple_spv[3279] = +{ + 0x56, 0x53, 0x48, 0x04, 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.... +}; +static const uint8_t vs_debugdraw_lines_stipple_dx9[347] = { 0x56, 0x53, 0x48, 0x04, 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...... - 0x44, 0x01, 0x00, 0x03, 0xfe, 0xff, 0xfe, 0xff, 0x24, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, // D.......$.CTAB.. + 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_ @@ -40,33 +248,32 @@ static const uint8_t vs_debugdraw_lines_stipple_dx9[359] = 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, // ................ - 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, 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, 0x01, 0xe0, 0x02, 0x00, // ................ - 0x00, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // ....... + 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, // ........... }; static const uint8_t vs_debugdraw_lines_stipple_dx11[620] = { 0x56, 0x53, 0x48, 0x04, 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, 0xe3, 0xb5, 0xa4, 0x88, 0xa6, 0x8c, 0xfa, 0x02, 0x7e, 0x55, // @.DXBC........~U - 0x75, 0xcd, 0x57, 0x76, 0xf4, 0xc2, 0x01, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x03, 0x00, // u.Wv......@..... + 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, 0x01, 0x01, 0x00, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x50, 0x4f, 0x53, 0x49, // ......COLOR.POSI + 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, // ................ @@ -96,53 +303,57 @@ static const uint8_t vs_debugdraw_lines_stipple_dx11[620] = 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[745] = +static const uint8_t vs_debugdraw_lines_stipple_mtl[774] = { - 0x56, 0x53, 0x48, 0x04, 0xe7, 0x1a, 0x5a, 0xef, 0x00, 0x00, 0xda, 0x02, 0x00, 0x00, 0x75, 0x73, // VSH...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 { - 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, 0x20, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x20, 0x5b, // at a_texcoord0 [ - 0x5b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x28, 0x32, 0x29, 0x5d, 0x5d, 0x3b, // [attribute(2)]]; + 0x56, 0x53, 0x48, 0x04, 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 + 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, 0x32, 0x20, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, // . float2 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, 0x20, 0x76, 0x5f, 0x73, 0x74, 0x69, 0x70, 0x70, 0x6c, 0x65, 0x3b, // float v_stipple; 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, 0x50, 0x6f, 0x73, // . float4 gl_Pos - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x5b, 0x5b, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, // ition [[position - 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x76, 0x5f, 0x63, // ]];. float4 v_c - 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x76, // olor0;. float v - 0x5f, 0x73, 0x74, 0x69, 0x70, 0x70, 0x6c, 0x65, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, // _stipple;.};.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, 0x78, 0x34, 0x20, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, // at4x4 u_modelVie - 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, // wProj;.};.vertex - 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, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, // float4 tmpvar_1 - 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x77, 0x20, 0x3d, // ;. tmpvar_1.w = - 0x20, 0x31, 0x2e, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, // 1.0;. tmpvar_1 - 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x61, 0x5f, // .xyz = _mtl_i.a_ - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, // position;. _mtl - 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, // _o.gl_Position = - 0x20, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, // (_mtl_u.u_model - 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x20, 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // ViewProj * tmpva - 0x72, 0x5f, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x76, // r_1);. _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, 0x73, 0x74, 0x69, 0x70, 0x70, 0x6c, 0x65, 0x20, 0x3d, 0x20, // l_o.v_stipple = - 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, // _mtl_i.a_texcoor - 0x64, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, // d0;. return _mt - 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // l_o;.}... + 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, 0x78, 0x34, 0x20, 0x75, 0x5f, 0x6d, // {. float4x4 u_m + 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x3b, 0x0a, 0x7d, 0x3b, // odelViewProj;.}; + 0x0a, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, // .vertex xlatMtlS + 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // haderOutput xlat + 0x4d, 0x74, 0x6c, 0x4d, 0x61, 0x69, 0x6e, 0x20, 0x28, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, // MtlMain (xlatMtl + 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, // ShaderInput _mtl + 0x5f, 0x69, 0x20, 0x5b, 0x5b, 0x73, 0x74, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x6e, 0x5d, 0x5d, 0x2c, // _i [[stage_in]], + 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, // constant xlatMt + 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x26, 0x20, // lShaderUniform& + 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x20, 0x5b, 0x5b, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, // _mtl_u [[buffer( + 0x30, 0x29, 0x5d, 0x5d, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, // 0)]]).{. xlatMt + 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, // lShaderOutput _m + 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x74, // tl_o;. float4 t + 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, // mpvar_1 = 0;. t + 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x31, 0x2e, 0x30, 0x3b, // mpvar_1.w = 1.0; + 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x78, 0x79, 0x7a, 0x20, // . tmpvar_1.xyz + 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, // = _mtl_i.a_posit + 0x69, 0x6f, 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, // ion;. _mtl_o.gl + 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x28, 0x5f, 0x6d, 0x74, // _Position = (_mt + 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, // l_u.u_modelViewP + 0x72, 0x6f, 0x6a, 0x20, 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x29, 0x3b, // roj * tmpvar_1); + 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // . _mtl_o.v_colo + 0x72, 0x30, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x61, 0x5f, 0x63, 0x6f, // r0 = _mtl_i.a_co + 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x76, // lor0;. _mtl_o.v + 0x5f, 0x73, 0x74, 0x69, 0x70, 0x70, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, // _stipple = _mtl_ + 0x69, 0x2e, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x2e, 0x78, 0x3b, // i.a_texcoord0.x; + 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* vs_debugdraw_lines_stipple_pssl; +extern const uint32_t vs_debugdraw_lines_stipple_pssl_size; diff --git a/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_lines_stipple.sc b/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_lines_stipple.sc index 9607a45..9e027b8 100644 --- a/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_lines_stipple.sc +++ b/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_lines_stipple.sc @@ -2,8 +2,8 @@ $input a_position, a_color0, a_texcoord0 $output v_color0, v_stipple /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. - * License: http://www.opensource.org/licenses/BSD-2-Clause + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ #include @@ -11,6 +11,6 @@ $output v_color0, v_stipple void main() { gl_Position = mul(u_modelViewProj, vec4(a_position, 1.0) ); - v_color0 = a_color0; - v_stipple = a_texcoord0; + v_color0 = a_color0; + v_stipple = a_texcoord0.x; } diff --git a/3rdparty/bgfx/examples/common/entry/cmd.cpp b/3rdparty/bgfx/examples/common/entry/cmd.cpp index eaae44f..ae3d14d 100644 --- a/3rdparty/bgfx/examples/common/entry/cmd.cpp +++ b/3rdparty/bgfx/examples/common/entry/cmd.cpp @@ -1,16 +1,11 @@ /* - * Copyright 2010-2016 Branimir Karadzic. All rights reserved. + * Copyright 2010-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ -#include // isspace -#include -#include // size_t -#include // strlen - #include #include -#include +#include #include "dbg.h" #include "cmd.h" @@ -33,7 +28,7 @@ struct CmdContext void add(const char* _name, ConsoleFn _fn, void* _userData) { - uint32_t cmd = bx::hashMurmur2A(_name, (uint32_t)strlen(_name) ); + uint32_t cmd = bx::hashMurmur2A(_name, (uint32_t)bx::strnlen(_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) ); @@ -51,7 +46,7 @@ struct CmdContext if (argc > 0) { int err = -1; - uint32_t cmd = bx::hashMurmur2A(argv[0], (uint32_t)strlen(argv[0]) ); + uint32_t cmd = bx::hashMurmur2A(argv[0], (uint32_t)bx::strnlen(argv[0]) ); CmdLookup::iterator it = m_lookup.find(cmd); if (it != m_lookup.end() ) { diff --git a/3rdparty/bgfx/examples/common/entry/cmd.h b/3rdparty/bgfx/examples/common/entry/cmd.h index 4976c79..2fa1ad4 100644 --- a/3rdparty/bgfx/examples/common/entry/cmd.h +++ b/3rdparty/bgfx/examples/common/entry/cmd.h @@ -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/bgfx#license-bsd-2-clause */ diff --git a/3rdparty/bgfx/examples/common/entry/dbg.h b/3rdparty/bgfx/examples/common/entry/dbg.h index 7a4bb16..06a228e 100644 --- a/3rdparty/bgfx/examples/common/entry/dbg.h +++ b/3rdparty/bgfx/examples/common/entry/dbg.h @@ -1,21 +1,16 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ #ifndef DBG_H_HEADER_GUARD #define DBG_H_HEADER_GUARD -#include // va_list -#include +#include #define DBG_STRINGIZE(_x) DBG_STRINGIZE_(_x) #define DBG_STRINGIZE_(_x) #_x #define DBG_FILE_LINE_LITERAL "" __FILE__ "(" DBG_STRINGIZE(__LINE__) "): " -#define DBG(_format, ...) dbgPrintf(DBG_FILE_LINE_LITERAL "" _format "\n", ##__VA_ARGS__) - -extern void dbgPrintfVargs(const char* _format, va_list _argList); -extern void dbgPrintf(const char* _format, ...); -extern void dbgPrintfData(const void* _data, uint32_t _size, const char* _format, ...); +#define DBG(_format, ...) bx::debugPrintf(DBG_FILE_LINE_LITERAL "" _format "\n", ##__VA_ARGS__) #endif // DBG_H_HEADER_GUARD diff --git a/3rdparty/bgfx/examples/common/entry/entry.cpp b/3rdparty/bgfx/examples/common/entry/entry.cpp index a72b802..9770134 100644 --- a/3rdparty/bgfx/examples/common/entry/entry.cpp +++ b/3rdparty/bgfx/examples/common/entry/entry.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -35,21 +35,58 @@ namespace entry static bx::FileWriterI* s_fileWriter = NULL; extern bx::AllocatorI* getDefaultAllocator(); - static bx::AllocatorI* s_allocator = getDefaultAllocator(); + bx::AllocatorI* g_allocator = getDefaultAllocator(); + + typedef bx::StringT<&g_allocator> String; void* rmtMalloc(void* /*_context*/, rmtU32 _size) { - return BX_ALLOC(s_allocator, _size); + return BX_ALLOC(g_allocator, _size); } void* rmtRealloc(void* /*_context*/, void* _ptr, rmtU32 _size) { - return BX_REALLOC(s_allocator, _ptr, _size); + return BX_REALLOC(g_allocator, _ptr, _size); } void rmtFree(void* /*_context*/, void* _ptr) { - BX_FREE(s_allocator, _ptr); + BX_FREE(g_allocator, _ptr); + } + + static String s_currentDir; + +#if BX_CONFIG_CRT_FILE_READER_WRITER + class FileReader : public bx::CrtFileReader + { + typedef bx::CrtFileReader super; + + public: + virtual bool open(const char* _filePath, bx::Error* _err) BX_OVERRIDE + { + String filePath(s_currentDir); + filePath.append(_filePath); + return super::open(filePath.getPtr(), _err); + } + }; + + class FileWriter : public bx::CrtFileWriter + { + typedef bx::CrtFileWriter super; + + public: + virtual bool open(const char* _filePath, bool _append, bx::Error* _err) BX_OVERRIDE + { + String filePath(s_currentDir); + filePath.append(_filePath); + return super::open(filePath.getPtr(), _append, _err); + } + }; +#endif // BX_CONFIG_CRT_FILE_READER_WRITER + + void setCurrentDir(const char* _dir) + { + s_currentDir.set(_dir); } #if ENTRY_CONFIG_IMPLEMENT_DEFAULT_ALLOCATOR @@ -217,7 +254,7 @@ 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 == strcmp(_argv[_first], _name) ) + if (0 == bx::strncmp(_argv[_first], _name) ) { int arg = _first+1; if (_argc > arg) @@ -273,11 +310,13 @@ BX_PRAGMA_DIAGNOSTIC_POP(); bgfx::setDebug(s_debug); return 0; } - else if (0 == strcmp(_argv[1], "screenshot") ) + else if (0 == bx::strncmp(_argv[1], "screenshot") ) { + bgfx::FrameBufferHandle fbh = BGFX_INVALID_HANDLE; + if (_argc > 2) { - bgfx::saveScreenShot(_argv[2]); + bgfx::requestScreenShot(fbh, _argv[2]); } else { @@ -286,12 +325,12 @@ BX_PRAGMA_DIAGNOSTIC_POP(); char filePath[256]; bx::snprintf(filePath, sizeof(filePath), "temp/screenshot-%d", tt); - bgfx::saveScreenShot(filePath); + bgfx::requestScreenShot(fbh, filePath); } return 0; } - else if (0 == strcmp(_argv[1], "fullscreen") ) + else if (0 == bx::strncmp(_argv[1], "fullscreen") ) { WindowHandle window = { 0 }; toggleFullscreen(window); @@ -316,6 +355,7 @@ BX_PRAGMA_DIAGNOSTIC_POP(); { entry::Key::KeyF, entry::Modifier::RightCtrl, 1, NULL, "graphics fullscreen" }, { entry::Key::Return, entry::Modifier::RightAlt, 1, NULL, "graphics fullscreen" }, { entry::Key::F1, entry::Modifier::None, 1, NULL, "graphics stats" }, + { entry::Key::F1, entry::Modifier::LeftCtrl, 1, NULL, "graphics ifh" }, { entry::Key::GamepadStart, entry::Modifier::None, 1, NULL, "graphics stats" }, { entry::Key::F1, entry::Modifier::LeftShift, 1, NULL, "graphics stats 0\ngraphics text 0" }, { entry::Key::F3, entry::Modifier::None, 1, NULL, "graphics wireframe" }, @@ -327,6 +367,7 @@ BX_PRAGMA_DIAGNOSTIC_POP(); { entry::Key::F9, entry::Modifier::None, 1, NULL, "graphics flush" }, { entry::Key::F10, entry::Modifier::None, 1, NULL, "graphics hidpi" }, { entry::Key::Print, entry::Modifier::None, 1, NULL, "graphics screenshot" }, + { entry::Key::KeyP, entry::Modifier::LeftCtrl, 1, NULL, "graphics screenshot" }, INPUT_BINDING_END }; @@ -339,6 +380,24 @@ BX_PRAGMA_DIAGNOSTIC_POP(); } #endif // BX_PLATFORM_EMSCRIPTEN + static App* s_apps = NULL; + + App::App(const char* _name) + { + m_name = _name; + m_next = s_apps; + s_apps = this; + } + + App::~App() + { + } + + App* getFirstApp() + { + return s_apps; + } + int runApp(AppI* _app, int _argc, char** _argv) { _app->init(_argc, _argv); @@ -385,8 +444,8 @@ BX_PRAGMA_DIAGNOSTIC_POP(); } #if BX_CONFIG_CRT_FILE_READER_WRITER - s_fileReader = new bx::CrtFileReader; - s_fileWriter = new bx::CrtFileWriter; + s_fileReader = BX_NEW(g_allocator, FileReader); + s_fileWriter = BX_NEW(g_allocator, FileWriter); #endif // BX_CONFIG_CRT_FILE_READER_WRITER cmdInit(); @@ -402,6 +461,7 @@ BX_PRAGMA_DIAGNOSTIC_POP(); setWindowSize(defaultWindow, ENTRY_DEFAULT_WIDTH, ENTRY_DEFAULT_HEIGHT); int32_t result = ::_main_(_argc, _argv); + setCurrentDir(""); inputRemoveBindings("bindings"); inputShutdown(); @@ -409,10 +469,10 @@ BX_PRAGMA_DIAGNOSTIC_POP(); cmdShutdown(); #if BX_CONFIG_CRT_FILE_READER_WRITER - delete s_fileReader; + BX_DELETE(g_allocator, s_fileReader); s_fileReader = NULL; - delete s_fileWriter; + BX_DELETE(g_allocator, s_fileWriter); s_fileWriter = NULL; #endif // BX_CONFIG_CRT_FILE_READER_WRITER @@ -485,7 +545,7 @@ BX_PRAGMA_DIAGNOSTIC_POP(); _mouse->m_mx = mouse->m_mx; _mouse->m_my = mouse->m_my; _mouse->m_mz = mouse->m_mz; - if (!mouse->m_move) + if (!mouse->m_move) { _mouse->m_buttons[mouse->m_button] = mouse->m_down; } @@ -714,7 +774,7 @@ BX_PRAGMA_DIAGNOSTIC_POP(); bx::AllocatorI* getAllocator() { - return s_allocator; + return g_allocator; } void* TinyStlAllocator::static_allocate(size_t _bytes) diff --git a/3rdparty/bgfx/examples/common/entry/entry.h b/3rdparty/bgfx/examples/common/entry/entry.h index 54c79d1..cfdfd25 100644 --- a/3rdparty/bgfx/examples/common/entry/entry.h +++ b/3rdparty/bgfx/examples/common/entry/entry.h @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -7,8 +7,8 @@ #define ENTRY_H_HEADER_GUARD #include "dbg.h" -#include // memset #include +#include namespace bx { struct FileReaderI; struct FileWriterI; struct AllocatorI; } @@ -226,7 +226,7 @@ namespace entry { GamepadState() { - memset(m_axis, 0, sizeof(m_axis) ); + bx::memSet(m_axis, 0, sizeof(m_axis) ); } int32_t m_axis[entry::GamepadAxis::Count]; @@ -246,6 +246,7 @@ namespace entry void toggleWindowFrame(WindowHandle _handle); void toggleFullscreen(WindowHandle _handle); void setMouseLock(WindowHandle _handle, bool _lock); + void setCurrentDir(const char* _dir); struct WindowState { @@ -278,6 +279,32 @@ namespace entry { } + class App : public AppI + { + public: + App(const char* _name); + + virtual ~App(); + + const char* getName() const + { + return m_name; + } + + AppI* getNext() + { + return m_next; + } + + private: + const char* m_name; + App* m_next; + }; + + /// + App* getFirstApp(); + + /// int runApp(AppI* _app, int _argc, char** _argv); } // namespace entry diff --git a/3rdparty/bgfx/examples/common/entry/entry_android.cpp b/3rdparty/bgfx/examples/common/entry/entry_android.cpp index 155fb89..78ed2f7 100644 --- a/3rdparty/bgfx/examples/common/entry/entry_android.cpp +++ b/3rdparty/bgfx/examples/common/entry/entry_android.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -7,7 +7,7 @@ #if ENTRY_CONFIG_USE_NATIVE && BX_PLATFORM_ANDROID -#include +#include #include #include @@ -96,7 +96,7 @@ namespace entry Context() : m_window(NULL) { - memset(m_value, 0, sizeof(m_value) ); + bx::memSet(m_value, 0, sizeof(m_value) ); // Deadzone values from xinput.h m_deadzone[GamepadAxis::LeftX ] = diff --git a/3rdparty/bgfx/examples/common/entry/entry_asmjs.cpp b/3rdparty/bgfx/examples/common/entry/entry_asmjs.cpp index 030992a..9cabff5 100644 --- a/3rdparty/bgfx/examples/common/entry/entry_asmjs.cpp +++ b/3rdparty/bgfx/examples/common/entry/entry_asmjs.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -29,7 +29,7 @@ namespace entry , m_my(0) , m_scroll(0) { - memset(s_translateKey, 0, sizeof(s_translateKey)); + bx::memSet(s_translateKey, 0, sizeof(s_translateKey)); s_translateKey[27] = Key::Esc; s_translateKey[uint8_t('\n')] = s_translateKey[uint8_t('\r')] = Key::Return; diff --git a/3rdparty/bgfx/examples/common/entry/entry_glfw.cpp b/3rdparty/bgfx/examples/common/entry/entry_glfw.cpp index cba7fbb..0ff8fd3 100644 --- a/3rdparty/bgfx/examples/common/entry/entry_glfw.cpp +++ b/3rdparty/bgfx/examples/common/entry/entry_glfw.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -26,7 +26,7 @@ #endif // #include -#include +#include #include #include @@ -36,21 +36,30 @@ namespace entry { - inline void glfwSetWindow(GLFWwindow* _window) + static void* glfwNativeWindowHandle(GLFWwindow* _window) + { +# if BX_PLATFORM_LINUX || BX_PLATFORM_BSD + return (void*)(uintptr_t)glfwGetX11Window(_window); +# elif BX_PLATFORM_OSX + return glfwGetCocoaWindow(_window); +# elif BX_PLATFORM_WINDOWS + return glfwGetWin32Window(_window); +# endif // BX_PLATFORM_ + } + + static void glfwSetWindow(GLFWwindow* _window) { bgfx::PlatformData pd; # if BX_PLATFORM_LINUX || BX_PLATFORM_BSD - pd.ndt = glfwGetX11Display(); - pd.nwh = (void*)(uintptr_t)glfwGetX11Window(_window); + pd.ndt = glfwGetX11Display(); # elif BX_PLATFORM_OSX - pd.ndt = NULL; - pd.nwh = glfwGetCocoaWindow(_window); + pd.ndt = NULL; # elif BX_PLATFORM_WINDOWS - pd.ndt = NULL; - pd.nwh = glfwGetWin32Window(_window); - pd.context = NULL; + pd.ndt = NULL; # endif // BX_PLATFORM_WINDOWS - pd.backBuffer = NULL; + pd.nwh = glfwNativeWindowHandle(_window); + pd.context = NULL; + pd.backBuffer = NULL; pd.backBufferDS = NULL; bgfx::setPlatformData(pd); } @@ -149,8 +158,8 @@ namespace entry GamepadGLFW() : m_connected(false) { - memset(m_axes, 0, sizeof(m_axes)); - memset(m_buttons, 0, sizeof(m_buttons)); + bx::memSet(m_axes, 0, sizeof(m_axes)); + bx::memSet(m_buttons, 0, sizeof(m_buttons)); } void update(EventQueue& _eventQueue) @@ -223,17 +232,6 @@ namespace entry static int32_t threadFunc(void* _userData); }; - static void* glfwNativeWindowHandle(GLFWwindow* _window) - { -# if BX_PLATFORM_LINUX || BX_PLATFORM_BSD - return (void*)(uintptr_t)glfwGetX11Window(_window); -# elif BX_PLATFORM_OSX - return glfwGetCocoaWindow(_window); -# elif BX_PLATFORM_WINDOWS - return glfwGetWin32Window(_window); -# endif // BX_PLATFORM_ - } - enum MsgType { GLFW_WINDOW_CREATE, @@ -312,7 +310,7 @@ namespace entry Context() : m_scrollPos(0.0) { - memset(s_translateKey, 0, sizeof(s_translateKey)); + 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; @@ -395,7 +393,6 @@ namespace entry m_mte.m_argv = _argv; glfwSetErrorCallback(errorCb); - glfwSetJoystickCallback(joystickCb); if (!glfwInit() ) { @@ -403,6 +400,8 @@ namespace entry return EXIT_FAILURE; } + glfwSetJoystickCallback(joystickCb); + glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API); WindowHandle handle = { m_windowAlloc.alloc() }; @@ -445,7 +444,7 @@ namespace entry m_thread.init(MainThreadEntry::threadFunc, &m_mte); while (NULL != m_windows[0] - && !glfwWindowShouldClose(m_windows[0])) + && !glfwWindowShouldClose(m_windows[0])) { glfwWaitEvents(); @@ -590,7 +589,7 @@ namespace entry WindowHandle findHandle(GLFWwindow* _window) { - bx::LwMutexScope scope(m_lock); + bx::MutexScope scope(m_lock); for (uint32_t ii = 0, num = m_windowAlloc.getNumHandles(); ii < num; ++ii) { uint16_t idx = m_windowAlloc.getHandleAt(ii); @@ -616,14 +615,14 @@ namespace entry bx::Thread m_thread; EventQueue m_eventQueue; - bx::LwMutex m_lock; + bx::Mutex m_lock; GLFWwindow* m_windows[ENTRY_CONFIG_MAX_WINDOWS]; bx::HandleAllocT m_windowAlloc; GamepadGLFW m_gamepad[ENTRY_CONFIG_MAX_GAMEPADS]; - bx::SpScUnboundedQueueLf m_msgs; + bx::SpScUnboundedQueueT m_msgs; double m_scrollPos; }; diff --git a/3rdparty/bgfx/examples/common/entry/entry_ios.mm b/3rdparty/bgfx/examples/common/entry/entry_ios.mm index a534821..c2dbdce 100644 --- a/3rdparty/bgfx/examples/common/entry/entry_ios.mm +++ b/3rdparty/bgfx/examples/common/entry/entry_ios.mm @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -17,7 +17,7 @@ //# define HAS_METAL_SDK #endif -#include +#include #include #include diff --git a/3rdparty/bgfx/examples/common/entry/entry_nacl.cpp b/3rdparty/bgfx/examples/common/entry/entry_nacl.cpp index 7ce9375..b51a96e 100644 --- a/3rdparty/bgfx/examples/common/entry/entry_nacl.cpp +++ b/3rdparty/bgfx/examples/common/entry/entry_nacl.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -7,10 +7,8 @@ #if ENTRY_CONFIG_USE_NATIVE && BX_PLATFORM_NACL -#include +#include -#include -#include #include #include @@ -29,7 +27,6 @@ #include #include -#include #include #include "entry.h" @@ -191,7 +188,7 @@ using namespace entry; PP_EXPORT const void* PPP_GetInterface(const char* _name) { - if (0 == strcmp(_name, PPP_INSTANCE_INTERFACE) ) + if (0 == bx::strncmp(_name, PPP_INSTANCE_INTERFACE) ) { static PPP_Instance instanceInterface = { diff --git a/3rdparty/bgfx/examples/common/entry/entry_noop.cpp b/3rdparty/bgfx/examples/common/entry/entry_noop.cpp index c654459..1e85e2d 100644 --- a/3rdparty/bgfx/examples/common/entry/entry_noop.cpp +++ b/3rdparty/bgfx/examples/common/entry/entry_noop.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ diff --git a/3rdparty/bgfx/examples/common/entry/entry_osx.mm b/3rdparty/bgfx/examples/common/entry/entry_osx.mm index 5e651e2..49a8f9b 100644 --- a/3rdparty/bgfx/examples/common/entry/entry_osx.mm +++ b/3rdparty/bgfx/examples/common/entry/entry_osx.mm @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -9,7 +9,7 @@ #import -#include +#include #include #include @@ -485,9 +485,12 @@ namespace entry while (!(m_exit = [dg applicationHasTerminated]) ) { - if (bgfx::RenderFrame::Exiting == bgfx::renderFrame() ) + @autoreleasepool { - break; + if (bgfx::RenderFrame::Exiting == bgfx::renderFrame() ) + { + break; + } } while (dispatchEvent(peekEvent() ) ) diff --git a/3rdparty/bgfx/examples/common/entry/entry_p.h b/3rdparty/bgfx/examples/common/entry/entry_p.h index cc1e892..ab45cfe 100644 --- a/3rdparty/bgfx/examples/common/entry/entry_p.h +++ b/3rdparty/bgfx/examples/common/entry/entry_p.h @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -11,10 +11,9 @@ #include #include "entry.h" -#include // memcpy #ifndef ENTRY_CONFIG_USE_NOOP -# define ENTRY_CONFIG_USE_NOOP (BX_PLATFORM_QNX || BX_PLATFORM_PS4) +# define ENTRY_CONFIG_USE_NOOP (BX_PLATFORM_QNX) #endif // ENTRY_CONFIG_USE_NOOP #ifndef ENTRY_CONFIG_USE_SDL @@ -199,7 +198,7 @@ namespace entry { CharEvent* ev = new CharEvent(_handle); ev->m_len = _len; - memcpy(ev->m_char, _char, 4); + bx::memCopy(ev->m_char, _char, 4); m_queue.push(ev); } @@ -298,7 +297,7 @@ namespace entry } private: - bx::SpScUnboundedQueue m_queue; + bx::SpScUnboundedQueueT m_queue; }; } // namespace entry diff --git a/3rdparty/bgfx/examples/common/entry/entry_sdl.cpp b/3rdparty/bgfx/examples/common/entry/entry_sdl.cpp index 63159c6..b8476f7 100644 --- a/3rdparty/bgfx/examples/common/entry/entry_sdl.cpp +++ b/3rdparty/bgfx/examples/common/entry/entry_sdl.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -20,12 +20,13 @@ BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG("-Wextern-c-compat") #include BX_PRAGMA_DIAGNOSTIC_POP() -#include +#include #if defined(None) // X11 defines this... # undef None #endif // defined(None) #include +#include #include #include #include @@ -158,7 +159,7 @@ namespace entry : m_controller(NULL) , m_jid(INT32_MAX) { - memset(m_value, 0, sizeof(m_value) ); + bx::memSet(m_value, 0, sizeof(m_value) ); // Deadzone values from xinput.h m_deadzone[GamepadAxis::LeftX ] = @@ -341,7 +342,7 @@ namespace entry , m_mouseLock(false) , m_fullscreen(false) { - memset(s_translateKey, 0, sizeof(s_translateKey) ); + bx::memSet(s_translateKey, 0, sizeof(s_translateKey) ); initTranslateKey(SDL_SCANCODE_ESCAPE, Key::Esc); initTranslateKey(SDL_SCANCODE_RETURN, Key::Return); initTranslateKey(SDL_SCANCODE_TAB, Key::Tab); @@ -425,7 +426,7 @@ namespace entry initTranslateKey(SDL_SCANCODE_Y, Key::KeyY); initTranslateKey(SDL_SCANCODE_Z, Key::KeyZ); - memset(s_translateGamepad, uint8_t(Key::Count), sizeof(s_translateGamepad) ); + bx::memSet(s_translateGamepad, uint8_t(Key::Count), sizeof(s_translateGamepad) ); initTranslateGamepad(SDL_CONTROLLER_BUTTON_A, Key::GamepadA); initTranslateGamepad(SDL_CONTROLLER_BUTTON_B, Key::GamepadB); initTranslateGamepad(SDL_CONTROLLER_BUTTON_X, Key::GamepadX); @@ -442,7 +443,7 @@ namespace entry initTranslateGamepad(SDL_CONTROLLER_BUTTON_START, Key::GamepadStart); initTranslateGamepad(SDL_CONTROLLER_BUTTON_GUIDE, Key::GamepadGuide); - memset(s_translateGamepadAxis, uint8_t(GamepadAxis::Count), sizeof(s_translateGamepadAxis) ); + bx::memSet(s_translateGamepadAxis, uint8_t(GamepadAxis::Count), sizeof(s_translateGamepadAxis) ); initTranslateGamepadAxis(SDL_CONTROLLER_AXIS_LEFTX, GamepadAxis::LeftX); initTranslateGamepadAxis(SDL_CONTROLLER_AXIS_LEFTY, GamepadAxis::LeftY); initTranslateGamepadAxis(SDL_CONTROLLER_AXIS_TRIGGERLEFT, GamepadAxis::LeftZ); @@ -486,14 +487,14 @@ namespace entry WindowHandle defaultWindow = { 0 }; setWindowSize(defaultWindow, m_width, m_height, true); - bx::CrtFileReader reader; - if (bx::open(&reader, "gamecontrollerdb.txt") ) + bx::FileReaderI* reader = getFileReader(); + if (bx::open(reader, "gamecontrollerdb.txt") ) { bx::AllocatorI* allocator = getAllocator(); - uint32_t size = (uint32_t)bx::getSize(&reader); + uint32_t size = (uint32_t)bx::getSize(reader); void* data = BX_ALLOC(allocator, size); - bx::read(&reader, data, size); - bx::close(&reader); + bx::read(reader, data, size); + bx::close(reader); SDL_GameControllerAddMapping( (char*)data); @@ -923,7 +924,7 @@ namespace entry WindowHandle findHandle(SDL_Window* _window) { - bx::LwMutexScope scope(m_lock); + bx::MutexScope scope(m_lock); for (uint32_t ii = 0, num = m_windowAlloc.getNumHandles(); ii < num; ++ii) { uint16_t idx = m_windowAlloc.getHandleAt(ii); @@ -972,7 +973,7 @@ namespace entry bx::Thread m_thread; EventQueue m_eventQueue; - bx::LwMutex m_lock; + bx::Mutex m_lock; bx::HandleAllocT m_windowAlloc; SDL_Window* m_window[ENTRY_CONFIG_MAX_WINDOWS]; @@ -1011,7 +1012,7 @@ namespace entry WindowHandle createWindow(int32_t _x, int32_t _y, uint32_t _width, uint32_t _height, uint32_t _flags, const char* _title) { - bx::LwMutexScope scope(s_ctx.m_lock); + bx::MutexScope scope(s_ctx.m_lock); WindowHandle handle = { s_ctx.m_windowAlloc.alloc() }; if (UINT16_MAX != handle.idx) @@ -1036,7 +1037,7 @@ namespace entry { sdlPostEvent(SDL_USER_WINDOW_DESTROY, _handle); - bx::LwMutexScope scope(s_ctx.m_lock); + bx::MutexScope scope(s_ctx.m_lock); s_ctx.m_windowAlloc.free(_handle.idx); } } diff --git a/3rdparty/bgfx/examples/common/entry/entry_windows.cpp b/3rdparty/bgfx/examples/common/entry/entry_windows.cpp index 401e971..055c857 100644 --- a/3rdparty/bgfx/examples/common/entry/entry_windows.cpp +++ b/3rdparty/bgfx/examples/common/entry/entry_windows.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -7,16 +7,19 @@ #if ENTRY_CONFIG_USE_NATIVE && BX_PLATFORM_WINDOWS -#include +#include -#include -#include #include #include +#include +#include #include +#include + #include #include +#include #include #include @@ -34,7 +37,7 @@ namespace entry inline void winSetHwnd(::HWND _window) { bgfx::PlatformData pd; - memset(&pd, 0, sizeof(pd) ); + bx::memSet(&pd, 0, sizeof(pd) ); pd.nwh = _window; bgfx::setPlatformData(pd); } @@ -75,8 +78,8 @@ namespace entry XInput() : m_xinputdll(NULL) { - memset(m_connected, 0, sizeof(m_connected) ); - memset(m_state, 0, sizeof(m_state) ); + bx::memSet(m_connected, 0, sizeof(m_connected) ); + bx::memSet(m_state, 0, sizeof(m_state) ); m_deadzone[GamepadAxis::LeftX ] = m_deadzone[GamepadAxis::LeftY ] = XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE; @@ -85,7 +88,7 @@ namespace entry m_deadzone[GamepadAxis::LeftZ ] = m_deadzone[GamepadAxis::RightZ] = XINPUT_GAMEPAD_TRIGGER_THRESHOLD; - memset(m_flip, 1, sizeof(m_flip) ); + bx::memSet(m_flip, 1, sizeof(m_flip) ); m_flip[GamepadAxis::LeftY ] = m_flip[GamepadAxis::RightY] = -1; } @@ -143,13 +146,14 @@ namespace entry } WindowHandle defaultWindow = { 0 }; - GamepadHandle handle = { 0 }; - for (uint32_t ii = 0; ii < BX_COUNTOF(m_state); ++ii) + for (uint16_t ii = 0; ii < BX_COUNTOF(m_state); ++ii) { XINPUT_STATE state; DWORD result = XInputGetState(ii, &state); + GamepadHandle handle = { ii }; + bool connected = ERROR_SUCCESS == result; if (connected != m_connected[ii]) { @@ -352,7 +356,7 @@ namespace entry , m_init(false) , m_exit(false) { - memset(s_translateKey, 0, sizeof(s_translateKey) ); + bx::memSet(s_translateKey, 0, sizeof(s_translateKey) ); s_translateKey[VK_ESCAPE] = Key::Esc; s_translateKey[VK_RETURN] = Key::Return; s_translateKey[VK_TAB] = Key::Tab; @@ -450,7 +454,7 @@ namespace entry HINSTANCE instance = (HINSTANCE)GetModuleHandle(NULL); WNDCLASSEXA wnd; - memset(&wnd, 0, sizeof(wnd) ); + bx::memSet(&wnd, 0, sizeof(wnd) ); wnd.cbSize = sizeof(wnd); wnd.style = CS_HREDRAW | CS_VREDRAW; wnd.lpfnWndProc = wndProc; @@ -560,10 +564,15 @@ namespace entry case WM_USER_WINDOW_DESTROY: { WindowHandle handle = { (uint16_t)_wparam }; - PostMessageA(m_hwnd[_wparam], WM_CLOSE, 0, 0); m_eventQueue.postWindowEvent(handle); DestroyWindow(m_hwnd[_wparam]); m_hwnd[_wparam] = 0; + + if (0 == handle.idx) + { + m_exit = true; + m_eventQueue.postExitEvent(); + } } break; @@ -615,15 +624,7 @@ namespace entry case WM_QUIT: case WM_CLOSE: - if (_hwnd == m_hwnd[0]) - { - m_exit = true; - m_eventQueue.postExitEvent(); - } - else - { - destroyWindow(findHandle(_hwnd) ); - } + destroyWindow(findHandle(_hwnd) ); // Don't process message. Window will be destroyed later. return 0; @@ -831,7 +832,7 @@ namespace entry WindowHandle findHandle(HWND _hwnd) { - bx::LwMutexScope scope(m_lock); + bx::MutexScope scope(m_lock); for (uint16_t ii = 0, num = m_windowAlloc.getNumHandles(); ii < num; ++ii) { uint16_t idx = m_windowAlloc.getHandleAt(ii); @@ -969,7 +970,7 @@ namespace entry static LRESULT CALLBACK wndProc(HWND _hwnd, UINT _id, WPARAM _wparam, LPARAM _lparam); EventQueue m_eventQueue; - bx::LwMutex m_lock; + bx::Mutex m_lock; bx::HandleAllocT m_windowAlloc; @@ -1020,7 +1021,7 @@ namespace entry WindowHandle createWindow(int32_t _x, int32_t _y, uint32_t _width, uint32_t _height, uint32_t _flags, const char* _title) { - bx::LwMutexScope scope(s_ctx.m_lock); + bx::MutexScope scope(s_ctx.m_lock); WindowHandle handle = { s_ctx.m_windowAlloc.alloc() }; if (UINT16_MAX != handle.idx) @@ -1044,7 +1045,7 @@ namespace entry { PostMessage(s_ctx.m_hwnd[0], WM_USER_WINDOW_DESTROY, _handle.idx, 0); - bx::LwMutexScope scope(s_ctx.m_lock); + bx::MutexScope scope(s_ctx.m_lock); s_ctx.m_windowAlloc.free(_handle.idx); } } diff --git a/3rdparty/bgfx/examples/common/entry/entry_winrt.cx b/3rdparty/bgfx/examples/common/entry/entry_winrt.cx index db90098..39e3d1d 100644 --- a/3rdparty/bgfx/examples/common/entry/entry_winrt.cx +++ b/3rdparty/bgfx/examples/common/entry/entry_winrt.cx @@ -7,8 +7,9 @@ #if BX_PLATFORM_WINRT || BX_PLATFORM_XBOXONE -#include +#include #include +#include #include using namespace Windows::ApplicationModel; diff --git a/3rdparty/bgfx/examples/common/entry/entry_x11.cpp b/3rdparty/bgfx/examples/common/entry/entry_x11.cpp index 16f955d..78e4306 100644 --- a/3rdparty/bgfx/examples/common/entry/entry_x11.cpp +++ b/3rdparty/bgfx/examples/common/entry/entry_x11.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -11,19 +11,26 @@ #define XK_LATIN1 #include #include // will include X11 which #defines None... Don't mess with order of includes. -#include +#include +#include + +#include // syscall #undef None #include #include #include -#include // memset +#include + #include #include namespace entry { + static const char* s_applicationName = "BGFX"; + static const char* s_applicationClass = "bgfx"; + /// inline void x11SetDisplayWindow(void* _display, uint32_t _window, void* _glx = NULL) { @@ -101,7 +108,7 @@ namespace entry { m_fd = open("/dev/input/js0", O_RDONLY | O_NONBLOCK); - memset(m_value, 0, sizeof(m_value) ); + bx::memSet(m_value, 0, sizeof(m_value) ); // Deadzone values from xinput.h m_deadzone[GamepadAxis::LeftX ] = @@ -244,7 +251,7 @@ namespace entry : m_modifiers(Modifier::None) , m_exit(false) { - memset(s_translateKey, 0, sizeof(s_translateKey) ); + bx::memSet(s_translateKey, 0, sizeof(s_translateKey) ); initTranslateKey(XK_Escape, Key::Esc); initTranslateKey(XK_Return, Key::Return); initTranslateKey(XK_Tab, Key::Tab); @@ -346,7 +353,7 @@ namespace entry m_visual = DefaultVisual(m_display, screen); m_root = RootWindow(m_display, screen); - memset(&m_windowAttrs, 0, sizeof(m_windowAttrs) ); + bx::memSet(&m_windowAttrs, 0, sizeof(m_windowAttrs) ); m_windowAttrs.background_pixmap = 0; m_windowAttrs.border_pixel = 0; m_windowAttrs.event_mask = 0 @@ -373,7 +380,7 @@ namespace entry // Clear window to black. XSetWindowAttributes attr; - memset(&attr, 0, sizeof(attr) ); + bx::memSet(&attr, 0, sizeof(attr) ); XChangeWindowAttributes(m_display, m_window[0], CWBackPixel, &attr); const char* wmDeleteWindowName = "WM_DELETE_WINDOW"; @@ -382,7 +389,13 @@ namespace entry XSetWMProtocols(m_display, m_window[0], &wmDeleteWindow, 1); XMapWindow(m_display, m_window[0]); - XStoreName(m_display, m_window[0], "BGFX"); + XStoreName(m_display, m_window[0], s_applicationName); + + XClassHint* hint = XAllocClassHint(); + hint->res_name = (char*)s_applicationName; + hint->res_class = (char*)s_applicationClass; + XSetClassHint(m_display, m_window[0], hint); + XFree(hint); XIM im; im = XOpenIM(m_display, NULL, NULL, NULL); @@ -593,7 +606,7 @@ namespace entry // Clear window to black. XSetWindowAttributes attr; - memset(&attr, 0, sizeof(attr) ); + bx::memSet(&attr, 0, sizeof(attr) ); XChangeWindowAttributes(m_display, window, CWBackPixel, &attr); const char* wmDeleteWindowName = "WM_DELETE_WINDOW"; @@ -604,6 +617,12 @@ namespace entry XMapWindow(m_display, window); XStoreName(m_display, window, msg->m_title.c_str() ); + XClassHint* hint = XAllocClassHint(); + hint->res_name = (char*)msg->m_title.c_str(); + hint->res_class = (char*)s_applicationClass; + XSetClassHint(m_display, window, hint); + XFree(hint); + m_eventQueue.postSizeEvent(_handle, msg->m_width, msg->m_height); union cast @@ -621,7 +640,7 @@ namespace entry WindowHandle findHandle(Window _window) { - bx::LwMutexScope scope(m_lock); + bx::MutexScope scope(m_lock); for (uint32_t ii = 0, num = m_windowAlloc.getNumHandles(); ii < num; ++ii) { uint16_t idx = m_windowAlloc.getHandleAt(ii); @@ -644,7 +663,7 @@ namespace entry int32_t m_mz; EventQueue m_eventQueue; - bx::LwMutex m_lock; + bx::Mutex m_lock; bx::HandleAllocT m_windowAlloc; int32_t m_depth; @@ -685,7 +704,7 @@ namespace entry WindowHandle createWindow(int32_t _x, int32_t _y, uint32_t _width, uint32_t _height, uint32_t _flags, const char* _title) { - bx::LwMutexScope scope(s_ctx.m_lock); + bx::MutexScope scope(s_ctx.m_lock); WindowHandle handle = { s_ctx.m_windowAlloc.alloc() }; if (isValid(handle) ) @@ -711,7 +730,7 @@ namespace entry XUnmapWindow(s_ctx.m_display, s_ctx.m_window[_handle.idx]); XDestroyWindow(s_ctx.m_display, s_ctx.m_window[_handle.idx]); - bx::LwMutexScope scope(s_ctx.m_lock); + bx::MutexScope scope(s_ctx.m_lock); s_ctx.m_windowAlloc.free(_handle.idx); } } diff --git a/3rdparty/bgfx/examples/common/entry/input.cpp b/3rdparty/bgfx/examples/common/entry/input.cpp index b63e0ea..e90d05e 100644 --- a/3rdparty/bgfx/examples/common/entry/input.cpp +++ b/3rdparty/bgfx/examples/common/entry/input.cpp @@ -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/bgfx#license-bsd-2-clause */ @@ -35,7 +35,7 @@ struct InputMouse m_norm[2] = 0.0f; } - memset(m_buttons, 0, sizeof(m_buttons) ); + bx::memSet(m_buttons, 0, sizeof(m_buttons) ); } void setResolution(uint16_t _width, uint16_t _height) @@ -78,14 +78,14 @@ struct InputKeyboard void reset() { - memset(m_key, 0, sizeof(m_key) ); - memset(m_once, 0xff, sizeof(m_once) ); + bx::memSet(m_key, 0, sizeof(m_key) ); + bx::memSet(m_once, 0xff, sizeof(m_once) ); } static uint32_t encodeKeyState(uint8_t _modifiers, bool _down) { uint32_t state = 0; - state |= uint32_t(_modifiers)<<16; + state |= uint32_t(_down ? _modifiers : 0)<<16; state |= uint32_t(_down)<<8; return state; } @@ -130,7 +130,7 @@ struct InputKeyboard popChar(); } - memcpy(&m_char[m_ring.m_current], _char, 4); + bx::memCopy(&m_char[m_ring.m_current], _char, 4); m_ring.commit(4); } @@ -169,7 +169,7 @@ struct Gamepad void reset() { - memset(m_axis, 0, sizeof(m_axis) ); + bx::memSet(m_axis, 0, sizeof(m_axis) ); } void setAxis(entry::GamepadAxis::Enum _axis, int32_t _value) diff --git a/3rdparty/bgfx/examples/common/entry/input.h b/3rdparty/bgfx/examples/common/entry/input.h index 66c60c0..281267d 100644 --- a/3rdparty/bgfx/examples/common/entry/input.h +++ b/3rdparty/bgfx/examples/common/entry/input.h @@ -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/bgfx#license-bsd-2-clause */ @@ -12,6 +12,24 @@ typedef void (*InputBindingFn)(const void* _userData); struct InputBinding { + void set(entry::Key::Enum _key, uint8_t _modifiers, uint8_t _flags, InputBindingFn _fn, const void* _userData = NULL) + { + m_key = _key; + m_modifiers = _modifiers; + m_flags = _flags; + m_fn = _fn; + m_userData = _userData; + } + + void end() + { + m_key = entry::Key::None; + m_modifiers = entry::Modifier::None; + m_flags = 0; + m_fn = NULL; + m_userData = NULL; + } + entry::Key::Enum m_key; uint8_t m_modifiers; uint8_t m_flags; diff --git a/3rdparty/bgfx/examples/common/font/font_manager.cpp b/3rdparty/bgfx/examples/common/font/font_manager.cpp index 40fbe5a..fb44cad 100644 --- a/3rdparty/bgfx/examples/common/font/font_manager.cpp +++ b/3rdparty/bgfx/examples/common/font/font_manager.cpp @@ -13,6 +13,7 @@ BX_PRAGMA_DIAGNOSTIC_PUSH(); BX_PRAGMA_DIAGNOSTIC_IGNORED_MSVC(4245) // error C4245: '=' : conversion from 'int' to 'FT_UInt', signed/unsigned mismatch +BX_PRAGMA_DIAGNOSTIC_IGNORED_MSVC(4611) // warning C4611 : interaction between '_setjmp' and C++ object destruction is non - portable #if BX_COMPILER_MSVC || BX_COMPILER_GCC >= 40300 #pragma push_macro("interface") #endif @@ -26,7 +27,6 @@ BX_PRAGMA_DIAGNOSTIC_POP(); #include "../common.h" #include -#include #if USE_EDTAA3 # include @@ -197,7 +197,7 @@ static void glyphInfoInit(GlyphInfo& _glyphInfo, FT_BitmapGlyph _bitmap, FT_Glyp for (int32_t ii = 0; ii < hh; ++ii) { - memcpy(_dst, src, dstPitch); + bx::memCopy(_dst, src, dstPitch); _dst += dstPitch; src += srcPitch; @@ -319,8 +319,8 @@ static void makeDistanceMap(const uint8_t* _img, uint8_t* _outImg, uint32_t _wid } // Compute inside = edtaa3(1-bitmap); % Transform foreground (1's) - memset(gx, 0, sizeof(double) * _width * _height); - memset(gy, 0, sizeof(double) * _width * _height); + bx::memSet(gx, 0, sizeof(double) * _width * _height); + bx::memSet(gy, 0, sizeof(double) * _width * _height); for (ii = 0; ii < _width * _height; ++ii) { data[ii] = 1.0 - data[ii]; @@ -418,12 +418,12 @@ bool TrueTypeFont::bakeGlyphDistance(CodePoint _codePoint, GlyphInfo& _glyphInfo uint32_t buffSize = nw * nh * sizeof(uint8_t); uint8_t* alphaImg = (uint8_t*)malloc(buffSize); - memset(alphaImg, 0, nw * nh * sizeof(uint8_t) ); + bx::memSet(alphaImg, 0, nw * nh * sizeof(uint8_t) ); //copy the original buffer to the temp one for (uint32_t ii = dh; ii < nh - dh; ++ii) { - memcpy(alphaImg + ii * nw + dw, _outBuffer + (ii - dh) * ww, ww); + bx::memCopy(alphaImg + ii * nw + dw, _outBuffer + (ii - dh) * ww, ww); } makeDistanceMap(alphaImg, _outBuffer, nw, nh); @@ -482,7 +482,7 @@ void FontManager::init() const uint32_t W = 3; // Create filler rectangle uint8_t buffer[W * W * 4]; - memset(buffer, 255, W * W * 4); + bx::memSet(buffer, 255, W * W * 4); m_blackGlyph.width = W; m_blackGlyph.height = W; @@ -513,7 +513,7 @@ TrueTypeHandle FontManager::createTtf(const uint8_t* _buffer, uint32_t _size) BX_CHECK(id != bx::HandleAlloc::invalid, "Invalid handle used"); m_cachedFiles[id].buffer = new uint8_t[_size]; m_cachedFiles[id].bufferSize = _size; - memcpy(m_cachedFiles[id].buffer, _buffer, _size); + bx::memCopy(m_cachedFiles[id].buffer, _buffer, _size); TrueTypeHandle ret = { id }; return ret; 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 c1742c7..709bec2 100644 --- a/3rdparty/bgfx/examples/common/font/fs_font_basic.bin.h +++ b/3rdparty/bgfx/examples/common/font/fs_font_basic.bin.h @@ -36,38 +36,294 @@ 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_dx9[466] = +static const uint8_t fs_font_basic_spv[4053] = +{ + 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.... +}; +static const uint8_t fs_font_basic_dx9[454] = { 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, 0xb4, 0x01, 0x00, 0x03, 0xff, // Color0.......... - 0xff, 0xfe, 0xff, 0x23, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, // ...#.CTAB....S.. + 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, 0x36, // hader Compiler 6 - 0x2e, 0x33, 0x2e, 0x39, 0x36, 0x30, 0x30, 0x2e, 0x31, 0x36, 0x33, 0x38, 0x34, 0x00, 0xab, 0xab, // .3.9600.16384... - 0xab, 0x51, 0x00, 0x00, 0x05, 0x00, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0x00, // .Q..........@... - 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x51, 0x00, 0x00, 0x05, 0x01, 0x00, 0x0f, // ?.......?Q...... - 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, 0x02, 0x00, 0x00, 0x02, // .......U........ - 0x80, 0x00, 0x00, 0x00, 0x80, 0x58, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x55, // .....X.........U - 0x81, 0x00, 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, // .......U.X...... - 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, // ...........U.... - 0x03, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0xe4, 0xa0, 0x58, 0x00, 0x00, // .............X.. - 0x04, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x8c, 0x00, 0x00, 0xff, 0xa0, 0x00, 0x00, 0xaa, // ................ - 0xa0, 0x42, 0x00, 0x00, 0x03, 0x01, 0x00, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0x90, 0x00, 0x08, 0xe4, // .B.............. - 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, // .. + 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, // ...... }; static const uint8_t fs_font_basic_dx11[617] = { @@ -111,9 +367,9 @@ static const uint8_t fs_font_basic_dx11[617] = 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, // .>....... }; -static const uint8_t fs_font_basic_mtl[964] = +static const uint8_t fs_font_basic_mtl[937] = { - 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x00, 0x00, 0xb5, 0x03, 0x00, 0x00, 0x75, 0x73, // FSH...........us + 0x46, 0x53, 0x48, 0x04, 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 { @@ -121,57 +377,57 @@ static const uint8_t fs_font_basic_mtl[964] = 0x72, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x76, 0x5f, 0x74, // r0;. float4 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, 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, 0x63, 0x75, 0x62, 0x65, 0x3c, 0x66, 0x6c, 0x6f, 0x61, // texturecube s_texColor [[ - 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x2c, 0x20, 0x73, 0x61, // texture(0)]], sa - 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x73, 0x6d, 0x70, 0x5f, 0x73, 0x5f, // mpler _mtlsmp_s_ - 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x5b, 0x5b, 0x73, 0x61, 0x6d, 0x70, 0x6c, // texColor [[sampl - 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, 0x68, 0x61, 0x6c, 0x66, 0x20, // _mtl_o;. half - 0x72, 0x67, 0x62, 0x61, 0x5f, 0x31, 0x5b, 0x34, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x68, 0x61, 0x6c, // rgba_1[4];. hal - 0x66, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x20, 0x3d, 0x20, 0x30, 0x3b, // f4 tmpvar_2 = 0; - 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x20, 0x3d, 0x20, 0x68, 0x61, // . tmpvar_2 = ha - 0x6c, 0x66, 0x34, 0x28, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x73, // lf4(s_texColor.s - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x73, 0x6d, 0x70, 0x5f, 0x73, 0x5f, // ample(_mtlsmp_s_ - 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2c, 0x20, 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74, // texColor, (float - 0x33, 0x29, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, // 3)(_mtl_i.v_texc - 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x2e, 0x78, 0x79, 0x7a, 0x29, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, // oord0.xyz)));. - 0x69, 0x6e, 0x74, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x20, 0x3d, 0x20, 0x30, // int tmpvar_3 = 0 - 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x20, 0x3d, 0x20, 0x69, // ;. tmpvar_3 = i - 0x6e, 0x74, 0x28, 0x28, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x74, 0x65, // nt(((_mtl_i.v_te - 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x2e, 0x77, 0x20, 0x2a, 0x20, 0x34, 0x2e, 0x30, 0x29, // xcoord0.w * 4.0) - 0x20, 0x2b, 0x20, 0x30, 0x2e, 0x35, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x67, 0x62, 0x61, // + 0.5));. rgba - 0x5f, 0x31, 0x5b, 0x30, 0x5d, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, // _1[0] = tmpvar_2 - 0x2e, 0x7a, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x67, 0x62, 0x61, 0x5f, 0x31, 0x5b, 0x31, 0x5d, 0x20, // .z;. rgba_1[1] - 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x2e, 0x79, 0x3b, 0x0a, 0x20, 0x20, // = tmpvar_2.y;. - 0x72, 0x67, 0x62, 0x61, 0x5f, 0x31, 0x5b, 0x32, 0x5d, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, // rgba_1[2] = tmpv - 0x61, 0x72, 0x5f, 0x32, 0x2e, 0x78, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x67, 0x62, 0x61, 0x5f, 0x31, // ar_2.x;. rgba_1 - 0x5b, 0x33, 0x5d, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x2e, 0x77, // [3] = tmpvar_2.w - 0x3b, 0x0a, 0x20, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, // ;. half4 tmpvar - 0x5f, 0x34, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, // _4 = 0;. tmpvar - 0x5f, 0x34, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x33, 0x28, 0x5f, // _4.xyz = half3(_ - 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x2e, 0x78, // mtl_i.v_color0.x - 0x79, 0x7a, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x34, 0x2e, // yz);. tmpvar_4. - 0x77, 0x20, 0x3d, 0x20, 0x28, 0x28, 0x68, 0x61, 0x6c, 0x66, 0x29, 0x28, 0x5f, 0x6d, 0x74, 0x6c, // w = ((half)(_mtl - 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x2e, 0x77, 0x20, 0x2a, 0x20, // _i.v_color0.w * - 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x29, 0x28, 0x72, 0x67, 0x62, 0x61, 0x5f, 0x31, 0x5b, 0x74, // (float)(rgba_1[t - 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x5d, 0x29, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x5f, // mpvar_3])));. _ - 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, 0x34, 0x3b, 0x0a, 0x20, // or = tmpvar_4;. - 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, // return _mtl_o;. - 0x7d, 0x0a, 0x0a, 0x00, // }... + 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, // rOutput {. floa + 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x3b, // t4 gl_FragColor; + 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, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, // tlShaderUniform + 0x7b, 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 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, 0x20, 0x72, 0x67, 0x62, 0x61, 0x5f, 0x31, 0x5b, 0x34, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, // t rgba_1[4];. f + 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x20, 0x3d, // loat4 tmpvar_2 = + 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x20, 0x3d, // 0;. tmpvar_2 = + 0x20, 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, 0x2e, 0x78, 0x79, 0x7a, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, // d0.xyz));. int + 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, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x74, 0x28, 0x28, // tmpvar_3 = int(( + 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, // (_mtl_i.v_texcoo + 0x72, 0x64, 0x30, 0x2e, 0x77, 0x20, 0x2a, 0x20, 0x34, 0x2e, 0x30, 0x29, 0x20, 0x2b, 0x20, 0x30, // rd0.w * 4.0) + 0 + 0x2e, 0x35, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x67, 0x62, 0x61, 0x5f, 0x31, 0x5b, 0x30, // .5));. rgba_1[0 + 0x5d, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x2e, 0x7a, 0x3b, 0x0a, // ] = tmpvar_2.z;. + 0x20, 0x20, 0x72, 0x67, 0x62, 0x61, 0x5f, 0x31, 0x5b, 0x31, 0x5d, 0x20, 0x3d, 0x20, 0x74, 0x6d, // rgba_1[1] = tm + 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x2e, 0x79, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x67, 0x62, 0x61, // pvar_2.y;. rgba + 0x5f, 0x31, 0x5b, 0x32, 0x5d, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, // _1[2] = tmpvar_2 + 0x2e, 0x78, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x67, 0x62, 0x61, 0x5f, 0x31, 0x5b, 0x33, 0x5d, 0x20, // .x;. rgba_1[3] + 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x2e, 0x77, 0x3b, 0x0a, 0x20, 0x20, // = tmpvar_2.w;. + 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x34, 0x20, // float4 tmpvar_4 + 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x34, 0x2e, // = 0;. tmpvar_4. + 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x63, // xyz = _mtl_i.v_c + 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x2e, 0x78, 0x79, 0x7a, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, // olor0.xyz;. tmp + 0x76, 0x61, 0x72, 0x5f, 0x34, 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, // var_4.w = (_mtl_ + 0x69, 0x2e, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x2e, 0x77, 0x20, 0x2a, 0x20, 0x72, // i.v_color0.w * r + 0x67, 0x62, 0x61, 0x5f, 0x31, 0x5b, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x5d, 0x29, // gba_1[tmpvar_3]) + 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_font_basic_pssl; +extern const uint32_t fs_font_basic_pssl_size; 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 6f31955..91090bc 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 @@ -65,56 +65,335 @@ 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_dx9[758] = +static const uint8_t fs_font_distance_field_spv[4425] = +{ + 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.... +}; +static const uint8_t fs_font_distance_field_dx9[746] = { 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, 0xd8, 0x02, 0x00, 0x03, 0xff, // Color0.......... - 0xff, 0xfe, 0xff, 0x23, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, // ...#.CTAB....S.. + 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, 0x36, // hader Compiler 6 - 0x2e, 0x33, 0x2e, 0x39, 0x36, 0x30, 0x30, 0x2e, 0x31, 0x36, 0x33, 0x38, 0x34, 0x00, 0xab, 0xab, // .3.9600.16384... - 0xab, 0x51, 0x00, 0x00, 0x05, 0x00, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0x00, // .Q..........@... - 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x51, 0x00, 0x00, 0x05, 0x01, 0x00, 0x0f, // ?.......?Q...... - 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, 0x41, 0x00, 0x00, 0x00, // .Q..........A... - 0x3f, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x40, 0x40, 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, // ...............U - 0xa0, 0x13, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x00, 0x80, 0x58, 0x00, 0x00, // .............X.. - 0x04, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x55, 0x81, 0x00, 0x00, 0xaa, 0xa0, 0x00, 0x00, 0xff, // .......U........ - 0xa0, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x55, // ...............U - 0x81, 0x58, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0xaa, // .X.............. - 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, // ...U............ - 0x80, 0x01, 0x00, 0xe4, 0xa0, 0x58, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, // .....X.......... - 0x8c, 0x00, 0x00, 0xff, 0xa0, 0x00, 0x00, 0xaa, 0xa0, 0x42, 0x00, 0x00, 0x03, 0x01, 0x00, 0x0f, // .........B...... - 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, // ...........U.... - 0x02, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x55, 0x80, 0x5b, 0x00, 0x00, 0x02, 0x01, 0x00, 0x07, // .......U.[...... - 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, 0x80, 0x04, 0x00, 0x00, // .......U........ - 0x04, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x55, 0x80, 0x02, 0x00, 0x00, 0xa1, 0x02, 0x00, 0x55, // .......U.......U - 0xa0, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x55, 0x80, 0x02, 0x00, 0x00, // ...........U.... - 0xa0, 0x02, 0x00, 0x55, 0xa0, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0xaa, // ...U............ - 0x81, 0x00, 0x00, 0xe4, 0x80, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x55, // ...............U - 0x80, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x11, 0x80, 0x00, 0x00, 0x55, 0x80, 0x00, 0x00, 0x00, // ...........U.... - 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, 0x80, 0x00, 0x00, 0x00, // ...U............ - 0x80, 0x00, 0x00, 0xff, 0x90, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x07, 0x80, 0x00, 0x00, 0xe4, // ................ - 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // ...... + 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, // .......... }; static const uint8_t fs_font_distance_field_dx11[1053] = { @@ -185,9 +464,9 @@ static const uint8_t fs_font_distance_field_dx11[1053] = 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, // .....>....... }; -static const uint8_t fs_font_distance_field_mtl[1539] = +static const uint8_t fs_font_distance_field_mtl[1413] = { - 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x00, 0x00, 0xf4, 0x05, 0x00, 0x00, 0x75, 0x73, // FSH...........us + 0x46, 0x53, 0x48, 0x04, 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 { @@ -195,93 +474,87 @@ static const uint8_t fs_font_distance_field_mtl[1539] = 0x72, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x76, 0x5f, 0x74, // r0;. float4 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, 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, 0x63, 0x75, 0x62, 0x65, 0x3c, 0x66, 0x6c, 0x6f, 0x61, // texturecube s_texColor [[ - 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x2c, 0x20, 0x73, 0x61, // texture(0)]], sa - 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x73, 0x6d, 0x70, 0x5f, 0x73, 0x5f, // mpler _mtlsmp_s_ - 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x5b, 0x5b, 0x73, 0x61, 0x6d, 0x70, 0x6c, // texColor [[sampl - 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, 0x68, 0x61, 0x6c, 0x66, 0x20, // _mtl_o;. half - 0x72, 0x67, 0x62, 0x61, 0x5f, 0x31, 0x5b, 0x34, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x68, 0x61, 0x6c, // rgba_1[4];. hal - 0x66, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x20, 0x3d, 0x20, 0x30, 0x3b, // f4 tmpvar_2 = 0; - 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x20, 0x3d, 0x20, 0x68, 0x61, // . tmpvar_2 = ha - 0x6c, 0x66, 0x34, 0x28, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x73, // lf4(s_texColor.s - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x73, 0x6d, 0x70, 0x5f, 0x73, 0x5f, // ample(_mtlsmp_s_ - 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2c, 0x20, 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74, // texColor, (float - 0x33, 0x29, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, // 3)(_mtl_i.v_texc - 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x2e, 0x78, 0x79, 0x7a, 0x29, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, // oord0.xyz)));. - 0x69, 0x6e, 0x74, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x20, 0x3d, 0x20, 0x30, // int tmpvar_3 = 0 - 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x20, 0x3d, 0x20, 0x69, // ;. tmpvar_3 = i - 0x6e, 0x74, 0x28, 0x28, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x74, 0x65, // nt(((_mtl_i.v_te - 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x2e, 0x77, 0x20, 0x2a, 0x20, 0x34, 0x2e, 0x30, 0x29, // xcoord0.w * 4.0) - 0x20, 0x2b, 0x20, 0x30, 0x2e, 0x35, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x67, 0x62, 0x61, // + 0.5));. rgba - 0x5f, 0x31, 0x5b, 0x30, 0x5d, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, // _1[0] = tmpvar_2 - 0x2e, 0x7a, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x67, 0x62, 0x61, 0x5f, 0x31, 0x5b, 0x31, 0x5d, 0x20, // .z;. rgba_1[1] - 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x2e, 0x79, 0x3b, 0x0a, 0x20, 0x20, // = tmpvar_2.y;. - 0x72, 0x67, 0x62, 0x61, 0x5f, 0x31, 0x5b, 0x32, 0x5d, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, // rgba_1[2] = tmpv - 0x61, 0x72, 0x5f, 0x32, 0x2e, 0x78, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x67, 0x62, 0x61, 0x5f, 0x31, // ar_2.x;. rgba_1 - 0x5b, 0x33, 0x5d, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x2e, 0x77, // [3] = tmpvar_2.w - 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // ;. float3 tmpva - 0x72, 0x5f, 0x34, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // r_4 = 0;. tmpva - 0x72, 0x5f, 0x34, 0x20, 0x3d, 0x20, 0x64, 0x66, 0x64, 0x78, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, // r_4 = dfdx(_mtl_ - 0x69, 0x2e, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x2e, 0x78, 0x79, // i.v_texcoord0.xy - 0x7a, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x74, 0x6d, 0x70, // z);. float3 tmp - 0x76, 0x61, 0x72, 0x5f, 0x35, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, // var_5 = 0;. tmp - 0x76, 0x61, 0x72, 0x5f, 0x35, 0x20, 0x3d, 0x20, 0x64, 0x66, 0x64, 0x79, 0x28, 0x2d, 0x5f, 0x6d, // var_5 = dfdy(-_m - 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, // tl_i.v_texcoord0 - 0x2e, 0x78, 0x79, 0x7a, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x74, // .xyz);. float t - 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x36, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, // mpvar_6 = 0;. t - 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x36, 0x20, 0x3d, 0x20, 0x28, 0x38, 0x2e, 0x30, 0x20, 0x2a, // mpvar_6 = (8.0 * - 0x20, 0x28, 0x73, 0x71, 0x72, 0x74, 0x28, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x64, 0x6f, 0x74, 0x20, // (sqrt(. dot - 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x34, 0x2c, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // (tmpvar_4, tmpva - 0x72, 0x5f, 0x34, 0x29, 0x0a, 0x20, 0x20, 0x29, 0x20, 0x2b, 0x20, 0x73, 0x71, 0x72, 0x74, 0x28, // r_4). ) + sqrt( - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x64, 0x6f, 0x74, 0x20, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, // . dot (tmpvar - 0x5f, 0x35, 0x2c, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x35, 0x29, 0x0a, 0x20, 0x20, // _5, tmpvar_5). - 0x29, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x65, 0x64, 0x67, // )));. float edg - 0x65, 0x30, 0x5f, 0x37, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x65, 0x64, 0x67, 0x65, // e0_7 = 0;. edge - 0x30, 0x5f, 0x37, 0x20, 0x3d, 0x20, 0x28, 0x30, 0x2e, 0x35, 0x20, 0x2d, 0x20, 0x74, 0x6d, 0x70, // 0_7 = (0.5 - tmp - 0x76, 0x61, 0x72, 0x5f, 0x36, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, // var_6);. float - 0x65, 0x64, 0x67, 0x65, 0x31, 0x5f, 0x38, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x65, // edge1_8 = 0;. e - 0x64, 0x67, 0x65, 0x31, 0x5f, 0x38, 0x20, 0x3d, 0x20, 0x28, 0x30, 0x2e, 0x35, 0x20, 0x2b, 0x20, // dge1_8 = (0.5 + - 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x36, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x68, 0x61, 0x6c, // tmpvar_6);. hal - 0x66, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x39, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, // f tmpvar_9 = 0;. - 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x39, 0x20, 0x3d, 0x20, 0x63, 0x6c, 0x61, // tmpvar_9 = cla - 0x6d, 0x70, 0x20, 0x28, 0x28, 0x28, 0x68, 0x61, 0x6c, 0x66, 0x29, 0x28, 0x28, 0x66, 0x6c, 0x6f, // mp (((half)((flo - 0x61, 0x74, 0x29, 0x28, 0x28, 0x28, 0x68, 0x61, 0x6c, 0x66, 0x29, 0x28, 0x28, 0x66, 0x6c, 0x6f, // at)(((half)((flo - 0x61, 0x74, 0x29, 0x28, 0x72, 0x67, 0x62, 0x61, 0x5f, 0x31, 0x5b, 0x74, 0x6d, 0x70, 0x76, 0x61, // at)(rgba_1[tmpva - 0x72, 0x5f, 0x33, 0x5d, 0x29, 0x20, 0x2d, 0x20, 0x65, 0x64, 0x67, 0x65, 0x30, 0x5f, 0x37, 0x29, // r_3]) - edge0_7) - 0x29, 0x29, 0x20, 0x2f, 0x20, 0x28, 0x65, 0x64, 0x67, 0x65, 0x31, 0x5f, 0x38, 0x20, 0x2d, 0x20, // )) / (edge1_8 - - 0x65, 0x64, 0x67, 0x65, 0x30, 0x5f, 0x37, 0x29, 0x29, 0x29, 0x2c, 0x20, 0x28, 0x68, 0x61, 0x6c, // edge0_7))), (hal - 0x66, 0x29, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x28, 0x68, 0x61, 0x6c, 0x66, 0x29, 0x31, 0x2e, 0x30, // f)0.0, (half)1.0 - 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // );. half4 tmpva - 0x72, 0x5f, 0x31, 0x30, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, // r_10 = 0;. tmpv - 0x61, 0x72, 0x5f, 0x31, 0x30, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x68, 0x61, 0x6c, 0x66, // ar_10.xyz = half - 0x33, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // 3(_mtl_i.v_color - 0x30, 0x2e, 0x78, 0x79, 0x7a, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, // 0.xyz);. tmpvar - 0x5f, 0x31, 0x30, 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x28, 0x28, 0x68, 0x61, 0x6c, 0x66, 0x29, 0x28, // _10.w = ((half)( - 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x2e, // _mtl_i.v_color0. - 0x77, 0x20, 0x2a, 0x20, 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x29, 0x28, 0x28, 0x74, 0x6d, 0x70, // w * (float)((tmp - 0x76, 0x61, 0x72, 0x5f, 0x39, 0x20, 0x2a, 0x20, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // var_9 * (tmpvar_ - 0x39, 0x20, 0x2a, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x28, 0x28, 0x68, 0x61, 0x6c, 0x66, 0x29, // 9 * . ((half) - 0x28, 0x33, 0x2e, 0x30, 0x29, 0x20, 0x2d, 0x20, 0x28, 0x28, 0x68, 0x61, 0x6c, 0x66, 0x29, 0x28, // (3.0) - ((half)( - 0x32, 0x2e, 0x30, 0x29, 0x20, 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x39, 0x29, // 2.0) * tmpvar_9) - 0x29, 0x0a, 0x20, 0x20, 0x29, 0x29, 0x29, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, // ). )))));. _mt - 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, // l_o.gl_FragColor - 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x30, 0x3b, 0x0a, 0x20, 0x20, // = tmpvar_10;. - 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, // return _mtl_o;.} - 0x0a, 0x0a, 0x00, // ... + 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, // rOutput {. floa + 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x3b, // t4 gl_FragColor; + 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, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, // tlShaderUniform + 0x7b, 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 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, 0x20, 0x72, 0x67, 0x62, 0x61, 0x5f, 0x31, 0x5b, 0x34, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, // t rgba_1[4];. f + 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x20, 0x3d, // loat4 tmpvar_2 = + 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x20, 0x3d, // 0;. tmpvar_2 = + 0x20, 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, 0x2e, 0x78, 0x79, 0x7a, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, // d0.xyz));. int + 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, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x74, 0x28, 0x28, // tmpvar_3 = int(( + 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, // (_mtl_i.v_texcoo + 0x72, 0x64, 0x30, 0x2e, 0x77, 0x20, 0x2a, 0x20, 0x34, 0x2e, 0x30, 0x29, 0x20, 0x2b, 0x20, 0x30, // rd0.w * 4.0) + 0 + 0x2e, 0x35, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x67, 0x62, 0x61, 0x5f, 0x31, 0x5b, 0x30, // .5));. rgba_1[0 + 0x5d, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x2e, 0x7a, 0x3b, 0x0a, // ] = tmpvar_2.z;. + 0x20, 0x20, 0x72, 0x67, 0x62, 0x61, 0x5f, 0x31, 0x5b, 0x31, 0x5d, 0x20, 0x3d, 0x20, 0x74, 0x6d, // rgba_1[1] = tm + 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x2e, 0x79, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x67, 0x62, 0x61, // pvar_2.y;. rgba + 0x5f, 0x31, 0x5b, 0x32, 0x5d, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, // _1[2] = tmpvar_2 + 0x2e, 0x78, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x67, 0x62, 0x61, 0x5f, 0x31, 0x5b, 0x33, 0x5d, 0x20, // .x;. rgba_1[3] + 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x2e, 0x77, 0x3b, 0x0a, 0x20, 0x20, // = tmpvar_2.w;. + 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x34, 0x20, // float3 tmpvar_4 + 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x34, 0x20, // = 0;. tmpvar_4 + 0x3d, 0x20, 0x64, 0x66, 0x64, 0x78, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, // = dfdx(_mtl_i.v_ + 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x2e, 0x78, 0x79, 0x7a, 0x29, 0x3b, 0x0a, // texcoord0.xyz);. + 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // float3 tmpvar_ + 0x35, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // 5 = 0;. tmpvar_ + 0x35, 0x20, 0x3d, 0x20, 0x64, 0x66, 0x64, 0x79, 0x28, 0x2d, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, // 5 = dfdy(-_mtl_i + 0x2e, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x2e, 0x78, 0x79, 0x7a, // .v_texcoord0.xyz + 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // );. float tmpva + 0x72, 0x5f, 0x36, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // r_6 = 0;. tmpva + 0x72, 0x5f, 0x36, 0x20, 0x3d, 0x20, 0x28, 0x38, 0x2e, 0x30, 0x20, 0x2a, 0x20, 0x28, 0x73, 0x71, // r_6 = (8.0 * (sq + 0x72, 0x74, 0x28, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x64, 0x6f, 0x74, 0x20, 0x28, 0x74, 0x6d, 0x70, // rt(. dot (tmp + 0x76, 0x61, 0x72, 0x5f, 0x34, 0x2c, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x34, 0x29, // var_4, tmpvar_4) + 0x0a, 0x20, 0x20, 0x29, 0x20, 0x2b, 0x20, 0x73, 0x71, 0x72, 0x74, 0x28, 0x0a, 0x20, 0x20, 0x20, // . ) + sqrt(. + 0x20, 0x64, 0x6f, 0x74, 0x20, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x35, 0x2c, 0x20, // dot (tmpvar_5, + 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x35, 0x29, 0x0a, 0x20, 0x20, 0x29, 0x29, 0x29, 0x3b, // tmpvar_5). ))); + 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x65, 0x64, 0x67, 0x65, 0x30, 0x5f, 0x37, // . float edge0_7 + 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x65, 0x64, 0x67, 0x65, 0x30, 0x5f, 0x37, 0x20, // = 0;. edge0_7 + 0x3d, 0x20, 0x28, 0x30, 0x2e, 0x35, 0x20, 0x2d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // = (0.5 - tmpvar_ + 0x36, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x74, 0x6d, 0x70, 0x76, // 6);. float tmpv + 0x61, 0x72, 0x5f, 0x38, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, // ar_8 = 0;. tmpv + 0x61, 0x72, 0x5f, 0x38, 0x20, 0x3d, 0x20, 0x63, 0x6c, 0x61, 0x6d, 0x70, 0x20, 0x28, 0x28, 0x28, // ar_8 = clamp ((( + 0x72, 0x67, 0x62, 0x61, 0x5f, 0x31, 0x5b, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x5d, // rgba_1[tmpvar_3] + 0x20, 0x2d, 0x20, 0x65, 0x64, 0x67, 0x65, 0x30, 0x5f, 0x37, 0x29, 0x20, 0x2f, 0x20, 0x28, 0x0a, // - edge0_7) / (. + 0x20, 0x20, 0x20, 0x20, 0x28, 0x30, 0x2e, 0x35, 0x20, 0x2b, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // (0.5 + tmpva + 0x72, 0x5f, 0x36, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x65, 0x64, 0x67, 0x65, 0x30, 0x5f, // r_6). - edge0_ + 0x37, 0x29, 0x29, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x31, 0x2e, 0x30, 0x29, 0x3b, 0x0a, // 7)), 0.0, 1.0);. + 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // float4 tmpvar_ + 0x39, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // 9 = 0;. tmpvar_ + 0x39, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, // 9.xyz = _mtl_i.v + 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x2e, 0x78, 0x79, 0x7a, 0x3b, 0x0a, 0x20, 0x20, 0x74, // _color0.xyz;. t + 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x39, 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x28, 0x5f, 0x6d, 0x74, // mpvar_9.w = (_mt + 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x2e, 0x77, 0x20, 0x2a, // l_i.v_color0.w * + 0x20, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x38, 0x20, 0x2a, 0x20, 0x28, 0x74, 0x6d, // (tmpvar_8 * (tm + 0x70, 0x76, 0x61, 0x72, 0x5f, 0x38, 0x20, 0x2a, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x28, 0x33, // pvar_8 * . (3 + 0x2e, 0x30, 0x20, 0x2d, 0x20, 0x28, 0x32, 0x2e, 0x30, 0x20, 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, // .0 - (2.0 * tmpv + 0x61, 0x72, 0x5f, 0x38, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x29, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, // ar_8)). )));. + 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, // _mtl_o.gl_FragCo + 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x39, 0x3b, 0x0a, // lor = tmpvar_9;. + 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_font_distance_field_pssl; +extern const uint32_t fs_font_distance_field_pssl_size; 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 dd63650..5764cc1 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 @@ -81,65 +81,346 @@ 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_dx9[906] = +static const uint8_t fs_font_distance_field_subpixel_spv[4457] = +{ + 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.... +}; +static const uint8_t fs_font_distance_field_subpixel_dx9[894] = { 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, 0x6c, 0x03, 0x00, 0x03, 0xff, // Color0.....l.... - 0xff, 0xfe, 0xff, 0x23, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, // ...#.CTAB....S.. + 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, 0x36, // hader Compiler 6 - 0x2e, 0x33, 0x2e, 0x39, 0x36, 0x30, 0x30, 0x2e, 0x31, 0x36, 0x33, 0x38, 0x34, 0x00, 0xab, 0xab, // .3.9600.16384... - 0xab, 0x51, 0x00, 0x00, 0x05, 0x00, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0x00, // .Q..........@... - 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x51, 0x00, 0x00, 0x05, 0x01, 0x00, 0x0f, // ?.......?Q...... - 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, 0xc0, 0x00, 0x00, 0x40, // .Q.............@ - 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x05, 0x03, 0x00, 0x0f, // @........Q...... - 0xa0, 0xc1, 0xaa, 0x2a, 0x3e, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, // ...*>...A...?... - 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, 0x02, 0x00, 0x00, 0x02, // .......U........ - 0x80, 0x00, 0x00, 0x00, 0x80, 0x58, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x55, // .....X.........U - 0x81, 0x00, 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, // .......U.X...... - 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, // ...........U.... - 0x03, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0xe4, 0xa0, 0x58, 0x00, 0x00, // .............X.. - 0x04, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x8c, 0x00, 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, 0x00, 0xe4, 0x80, 0x00, 0x08, 0xe4, // .B.............. - 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, // .............B.. - 0x03, 0x03, 0x00, 0x0f, 0x80, 0x03, 0x00, 0xe4, 0x80, 0x00, 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, // ...........U.... - 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, 0xa1, 0x03, 0x00, 0xaa, // ...........U.... - 0xa0, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x55, // ...............U - 0xa0, 0x03, 0x00, 0xaa, 0xa0, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x55, // ...............U - 0x81, 0x00, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0e, 0x80, 0x00, 0x00, 0x55, // ...............U - 0x81, 0x02, 0x00, 0x90, 0x80, 0x05, 0x00, 0x00, 0x03, 0x00, 0x08, 0x08, 0x80, 0x02, 0x00, 0x55, // ...............U - 0x80, 0x00, 0x00, 0xff, 0x90, 0x06, 0x00, 0x00, 0x02, 0x00, 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, 0x00, 0x07, 0x80, 0x00, 0x00, 0xe4, // ...U............ - 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, // .......... + 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, // .............. }; static const uint8_t fs_font_distance_field_subpixel_dx11[1305] = { @@ -226,9 +507,9 @@ static const uint8_t fs_font_distance_field_subpixel_dx11[1305] = 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, // .>....... }; -static const uint8_t fs_font_distance_field_subpixel_mtl[2024] = +static const uint8_t fs_font_distance_field_subpixel_mtl[1654] = { - 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x00, 0x00, 0xd9, 0x07, 0x00, 0x00, 0x75, 0x73, // FSH...........us + 0x46, 0x53, 0x48, 0x04, 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 { @@ -236,123 +517,102 @@ static const uint8_t fs_font_distance_field_subpixel_mtl[2024] = 0x72, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x76, 0x5f, 0x74, // r0;. float4 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, 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, 0x63, 0x75, 0x62, 0x65, 0x3c, 0x66, 0x6c, 0x6f, 0x61, // texturecube s_texColor [[ - 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x2c, 0x20, 0x73, 0x61, // texture(0)]], sa - 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x73, 0x6d, 0x70, 0x5f, 0x73, 0x5f, // mpler _mtlsmp_s_ - 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x5b, 0x5b, 0x73, 0x61, 0x6d, 0x70, 0x6c, // texColor [[sampl - 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, 0x69, 0x6e, 0x74, 0x20, 0x74, // _mtl_o;. int t - 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, // mpvar_1 = 0;. t - 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x74, 0x28, 0x28, 0x28, // mpvar_1 = int((( - 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, // _mtl_i.v_texcoor - 0x64, 0x30, 0x2e, 0x77, 0x20, 0x2a, 0x20, 0x34, 0x2e, 0x30, 0x29, 0x20, 0x2b, 0x20, 0x30, 0x2e, // d0.w * 4.0) + 0. - 0x35, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x74, 0x6d, // 5));. float3 tm - 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, // pvar_2 = 0;. tm - 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x20, 0x3d, 0x20, 0x64, 0x66, 0x64, 0x78, 0x28, 0x5f, 0x6d, // pvar_2 = dfdx(_m - 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, // tl_i.v_texcoord0 - 0x2e, 0x78, 0x79, 0x7a, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, // .xyz);. float3 - 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, 0x20, 0x3d, 0x20, 0x64, 0x66, 0x64, 0x79, 0x28, // tmpvar_3 = dfdy( - 0x2d, 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, 0x7a, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, // rd0.xyz);. floa - 0x74, 0x33, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x34, 0x20, 0x3d, 0x20, 0x30, 0x3b, // t3 tmpvar_4 = 0; - 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x34, 0x20, 0x3d, 0x20, 0x28, 0x30, // . tmpvar_4 = (0 - 0x2e, 0x31, 0x36, 0x36, 0x36, 0x36, 0x37, 0x20, 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, // .166667 * tmpvar - 0x5f, 0x32, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x74, 0x6d, // _2);. float3 tm + 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, // rOutput {. floa + 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x3b, // t4 gl_FragColor; + 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, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, // tlShaderUniform + 0x7b, 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 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, 0x69, 0x6e, 0x74, 0x20, // t _mtl_o;. int + 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, 0x69, 0x6e, 0x74, 0x28, 0x28, // tmpvar_1 = int(( + 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, // (_mtl_i.v_texcoo + 0x72, 0x64, 0x30, 0x2e, 0x77, 0x20, 0x2a, 0x20, 0x34, 0x2e, 0x30, 0x29, 0x20, 0x2b, 0x20, 0x30, // rd0.w * 4.0) + 0 + 0x2e, 0x35, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x74, // .5));. float3 t + 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, // mpvar_2 = 0;. t + 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x20, 0x3d, 0x20, 0x64, 0x66, 0x64, 0x78, 0x28, 0x5f, // mpvar_2 = dfdx(_ + 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, // mtl_i.v_texcoord + 0x30, 0x2e, 0x78, 0x79, 0x7a, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, // 0.xyz);. float3 + 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, 0x20, 0x3d, 0x20, 0x64, 0x66, 0x64, 0x79, // tmpvar_3 = dfdy + 0x28, 0x2d, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, // (-_mtl_i.v_texco + 0x6f, 0x72, 0x64, 0x30, 0x2e, 0x78, 0x79, 0x7a, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, // ord0.xyz);. flo + 0x61, 0x74, 0x33, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x34, 0x20, 0x3d, 0x20, 0x30, // at3 tmpvar_4 = 0 + 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x34, 0x20, 0x3d, 0x20, 0x28, // ;. tmpvar_4 = ( + 0x30, 0x2e, 0x31, 0x36, 0x36, 0x36, 0x36, 0x37, 0x20, 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // 0.166667 * tmpva + 0x72, 0x5f, 0x32, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x74, 0x6d, // r_2);. float tm 0x70, 0x76, 0x61, 0x72, 0x5f, 0x35, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, // pvar_5 = 0;. tm - 0x70, 0x76, 0x61, 0x72, 0x5f, 0x35, 0x20, 0x3d, 0x20, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, // pvar_5 = (_mtl_i - 0x2e, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x2e, 0x78, 0x79, 0x7a, // .v_texcoord0.xyz - 0x20, 0x2d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x34, 0x29, 0x3b, 0x0a, 0x20, 0x20, // - tmpvar_4);. - 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x36, 0x20, // float3 tmpvar_6 - 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x36, 0x20, // = 0;. tmpvar_6 - 0x3d, 0x20, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, // = (_mtl_i.v_texc - 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x2b, 0x20, 0x74, 0x6d, 0x70, 0x76, // oord0.xyz + tmpv - 0x61, 0x72, 0x5f, 0x34, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x20, 0x74, // ar_4);. half4 t - 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x37, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, // mpvar_7 = 0;. t - 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x37, 0x20, 0x3d, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x28, // mpvar_7 = 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, 0x35, 0x29, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x68, 0x61, // mpvar_5)));. ha - 0x6c, 0x66, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x38, 0x20, 0x3d, 0x20, 0x30, 0x3b, // lf tmpvar_8 = 0; - 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x38, 0x20, 0x3d, 0x20, 0x28, 0x28, // . tmpvar_8 = (( - 0x68, 0x61, 0x6c, 0x66, 0x29, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x37, 0x2e, 0x7a, 0x79, // half)tmpvar_7.zy - 0x78, 0x77, 0x5b, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x5d, 0x29, 0x3b, 0x0a, 0x20, // xw[tmpvar_1]);. - 0x20, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x39, 0x20, // half4 tmpvar_9 - 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x39, 0x20, // = 0;. tmpvar_9 - 0x3d, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x28, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, // = half4(s_texCol - 0x6f, 0x72, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x73, 0x6d, // or.sample(_mtlsm - 0x70, 0x5f, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2c, 0x20, 0x28, 0x66, // p_s_texColor, (f - 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x29, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x36, 0x29, // loat3)(tmpvar_6) - 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // ));. half tmpva - 0x72, 0x5f, 0x31, 0x30, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, // r_10 = 0;. tmpv - 0x61, 0x72, 0x5f, 0x31, 0x30, 0x20, 0x3d, 0x20, 0x28, 0x28, 0x68, 0x61, 0x6c, 0x66, 0x29, 0x74, // ar_10 = ((half)t - 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x39, 0x2e, 0x7a, 0x79, 0x78, 0x77, 0x5b, 0x74, 0x6d, 0x70, // mpvar_9.zyxw[tmp - 0x76, 0x61, 0x72, 0x5f, 0x31, 0x5d, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x20, // var_1]);. half - 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x31, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, // tmpvar_11 = 0;. - 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x31, 0x20, 0x3d, 0x20, 0x28, 0x28, 0x68, // tmpvar_11 = ((h - 0x61, 0x6c, 0x66, 0x29, 0x28, 0x30, 0x2e, 0x35, 0x29, 0x20, 0x2a, 0x20, 0x28, 0x74, 0x6d, 0x70, // alf)(0.5) * (tmp - 0x76, 0x61, 0x72, 0x5f, 0x38, 0x20, 0x2b, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, // var_8 + tmpvar_1 - 0x30, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x74, 0x6d, 0x70, // 0));. float tmp - 0x76, 0x61, 0x72, 0x5f, 0x31, 0x32, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, // var_12 = 0;. tm - 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x32, 0x20, 0x3d, 0x20, 0x28, 0x38, 0x2e, 0x30, 0x20, 0x2a, // pvar_12 = (8.0 * - 0x20, 0x28, 0x73, 0x71, 0x72, 0x74, 0x28, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x64, 0x6f, 0x74, 0x20, // (sqrt(. dot - 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x2c, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // (tmpvar_2, tmpva - 0x72, 0x5f, 0x32, 0x29, 0x0a, 0x20, 0x20, 0x29, 0x20, 0x2b, 0x20, 0x73, 0x71, 0x72, 0x74, 0x28, // r_2). ) + sqrt( - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x64, 0x6f, 0x74, 0x20, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, // . dot (tmpvar - 0x5f, 0x33, 0x2c, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x29, 0x0a, 0x20, 0x20, // _3, tmpvar_3). - 0x29, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x33, 0x20, 0x74, 0x6d, 0x70, // )));. half3 tmp - 0x76, 0x61, 0x72, 0x5f, 0x31, 0x33, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, // var_13 = 0;. tm - 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x33, 0x2e, 0x78, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, // pvar_13.x = tmpv - 0x61, 0x72, 0x5f, 0x38, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, // ar_8;. tmpvar_1 - 0x33, 0x2e, 0x79, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x31, 0x3b, // 3.y = tmpvar_11; - 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x33, 0x2e, 0x7a, 0x20, 0x3d, // . tmpvar_13.z = - 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, // tmpvar_10;. fl - 0x6f, 0x61, 0x74, 0x20, 0x65, 0x64, 0x67, 0x65, 0x30, 0x5f, 0x31, 0x34, 0x20, 0x3d, 0x20, 0x30, // oat edge0_14 = 0 - 0x3b, 0x0a, 0x20, 0x20, 0x65, 0x64, 0x67, 0x65, 0x30, 0x5f, 0x31, 0x34, 0x20, 0x3d, 0x20, 0x28, // ;. edge0_14 = ( - 0x30, 0x2e, 0x35, 0x20, 0x2d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x32, 0x29, // 0.5 - tmpvar_12) - 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x65, 0x64, 0x67, 0x65, 0x31, 0x5f, // ;. float edge1_ - 0x31, 0x35, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x65, 0x64, 0x67, 0x65, 0x31, 0x5f, // 15 = 0;. edge1_ - 0x31, 0x35, 0x20, 0x3d, 0x20, 0x28, 0x30, 0x2e, 0x35, 0x20, 0x2b, 0x20, 0x74, 0x6d, 0x70, 0x76, // 15 = (0.5 + tmpv - 0x61, 0x72, 0x5f, 0x31, 0x32, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x33, 0x20, // ar_12);. half3 - 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x36, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, // tmpvar_16 = 0;. - 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x36, 0x20, 0x3d, 0x20, 0x63, 0x6c, 0x61, // tmpvar_16 = cla - 0x6d, 0x70, 0x20, 0x28, 0x28, 0x28, 0x68, 0x61, 0x6c, 0x66, 0x33, 0x29, 0x28, 0x28, 0x66, 0x6c, // mp (((half3)((fl - 0x6f, 0x61, 0x74, 0x33, 0x29, 0x28, 0x28, 0x28, 0x68, 0x61, 0x6c, 0x66, 0x33, 0x29, 0x28, 0x28, // oat3)(((half3)(( - 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x29, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, // float3)(tmpvar_1 - 0x33, 0x29, 0x20, 0x2d, 0x20, 0x65, 0x64, 0x67, 0x65, 0x30, 0x5f, 0x31, 0x34, 0x29, 0x29, 0x29, // 3) - edge0_14))) - 0x20, 0x2f, 0x20, 0x28, 0x65, 0x64, 0x67, 0x65, 0x31, 0x5f, 0x31, 0x35, 0x20, 0x2d, 0x20, 0x65, // / (edge1_15 - e - 0x64, 0x67, 0x65, 0x30, 0x5f, 0x31, 0x34, 0x29, 0x29, 0x29, 0x2c, 0x20, 0x28, 0x68, 0x61, 0x6c, // dge0_14))), (hal - 0x66, 0x29, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x28, 0x68, 0x61, 0x6c, 0x66, 0x29, 0x31, 0x2e, 0x30, // f)0.0, (half)1.0 - 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, // );. _mtl_o.gl_F - 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x28, // ragColor.xyz = ( - 0x28, 0x68, 0x61, 0x6c, 0x66, 0x33, 0x29, 0x28, 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x29, // (half3)((float3) - 0x28, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x36, 0x20, 0x2a, 0x20, 0x28, 0x74, // ((tmpvar_16 * (t - 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x36, 0x20, 0x2a, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, // mpvar_16 * . - 0x28, 0x28, 0x68, 0x61, 0x6c, 0x66, 0x29, 0x28, 0x33, 0x2e, 0x30, 0x29, 0x20, 0x2d, 0x20, 0x28, // ((half)(3.0) - ( - 0x28, 0x68, 0x61, 0x6c, 0x66, 0x29, 0x28, 0x32, 0x2e, 0x30, 0x29, 0x20, 0x2a, 0x20, 0x74, 0x6d, // (half)(2.0) * tm - 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x36, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x29, 0x29, 0x29, 0x20, // pvar_16)). ))) - 0x2a, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // * _mtl_i.v_color - 0x30, 0x2e, 0x77, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, // 0.w));. _mtl_o. + 0x70, 0x76, 0x61, 0x72, 0x5f, 0x35, 0x20, 0x3d, 0x20, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, // pvar_5 = s_texCo + 0x6c, 0x6f, 0x72, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x73, // lor.sample(_mtls + 0x6d, 0x70, 0x5f, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2c, 0x20, 0x28, // mp_s_texColor, ( + 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x29, 0x28, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, // float3)((_mtl_i. + 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x2e, 0x78, 0x79, 0x7a, 0x20, // v_texcoord0.xyz + 0x2d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x34, 0x29, 0x29, 0x29, 0x2e, 0x7a, 0x79, // - tmpvar_4))).zy + 0x78, 0x77, 0x5b, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x5d, 0x3b, 0x0a, 0x20, 0x20, // xw[tmpvar_1];. + 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x36, 0x20, 0x3d, // float tmpvar_6 = + 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x36, 0x20, 0x3d, // 0;. tmpvar_6 = + 0x20, 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)( + 0x28, 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, 0x7a, 0x20, 0x2b, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, // rd0.xyz + tmpvar + 0x5f, 0x34, 0x29, 0x29, 0x29, 0x2e, 0x7a, 0x79, 0x78, 0x77, 0x5b, 0x74, 0x6d, 0x70, 0x76, 0x61, // _4))).zyxw[tmpva + 0x72, 0x5f, 0x31, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x74, 0x6d, // r_1];. float tm + 0x70, 0x76, 0x61, 0x72, 0x5f, 0x37, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, // pvar_7 = 0;. tm + 0x70, 0x76, 0x61, 0x72, 0x5f, 0x37, 0x20, 0x3d, 0x20, 0x28, 0x30, 0x2e, 0x35, 0x20, 0x2a, 0x20, // pvar_7 = (0.5 * + 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x35, 0x20, 0x2b, 0x20, 0x74, 0x6d, 0x70, 0x76, // (tmpvar_5 + tmpv + 0x61, 0x72, 0x5f, 0x36, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, // ar_6));. float + 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x38, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, // tmpvar_8 = 0;. + 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x38, 0x20, 0x3d, 0x20, 0x28, 0x38, 0x2e, 0x30, 0x20, // tmpvar_8 = (8.0 + 0x2a, 0x20, 0x28, 0x73, 0x71, 0x72, 0x74, 0x28, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x64, 0x6f, 0x74, // * (sqrt(. dot + 0x20, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x2c, 0x20, 0x74, 0x6d, 0x70, 0x76, // (tmpvar_2, tmpv + 0x61, 0x72, 0x5f, 0x32, 0x29, 0x0a, 0x20, 0x20, 0x29, 0x20, 0x2b, 0x20, 0x73, 0x71, 0x72, 0x74, // ar_2). ) + sqrt + 0x28, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x64, 0x6f, 0x74, 0x20, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, // (. dot (tmpva + 0x72, 0x5f, 0x33, 0x2c, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x29, 0x0a, 0x20, // r_3, tmpvar_3). + 0x20, 0x29, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x74, // )));. float3 t + 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x39, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, // mpvar_9 = 0;. t + 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x39, 0x2e, 0x78, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, // mpvar_9.x = tmpv + 0x61, 0x72, 0x5f, 0x35, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x39, // ar_5;. tmpvar_9 + 0x2e, 0x79, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x37, 0x3b, 0x0a, 0x20, // .y = tmpvar_7;. + 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x39, 0x2e, 0x7a, 0x20, 0x3d, 0x20, 0x74, 0x6d, // tmpvar_9.z = tm + 0x70, 0x76, 0x61, 0x72, 0x5f, 0x36, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, // pvar_6;. float + 0x65, 0x64, 0x67, 0x65, 0x30, 0x5f, 0x31, 0x30, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, // edge0_10 = 0;. + 0x65, 0x64, 0x67, 0x65, 0x30, 0x5f, 0x31, 0x30, 0x20, 0x3d, 0x20, 0x28, 0x30, 0x2e, 0x35, 0x20, // edge0_10 = (0.5 + 0x2d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x38, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x66, // - tmpvar_8);. f + 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x31, 0x20, // loat3 tmpvar_11 + 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x31, // = 0;. tmpvar_11 + 0x20, 0x3d, 0x20, 0x63, 0x6c, 0x61, 0x6d, 0x70, 0x20, 0x28, 0x28, 0x28, 0x74, 0x6d, 0x70, 0x76, // = clamp (((tmpv + 0x61, 0x72, 0x5f, 0x39, 0x20, 0x2d, 0x20, 0x65, 0x64, 0x67, 0x65, 0x30, 0x5f, 0x31, 0x30, 0x29, // ar_9 - edge0_10) + 0x20, 0x2f, 0x20, 0x28, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x28, 0x30, 0x2e, 0x35, 0x20, 0x2b, 0x20, // / (. (0.5 + + 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x38, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x65, // tmpvar_8). - e + 0x64, 0x67, 0x65, 0x30, 0x5f, 0x31, 0x30, 0x29, 0x29, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, // dge0_10)), 0.0, + 0x31, 0x2e, 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, // 1.0);. _mtl_o.g + 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x78, 0x79, 0x7a, 0x20, // l_FragColor.xyz + 0x3d, 0x20, 0x28, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x31, 0x20, 0x2a, 0x20, // = ((tmpvar_11 * + 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x31, 0x20, 0x2a, 0x20, 0x0a, 0x20, 0x20, // (tmpvar_11 * . + 0x20, 0x20, 0x28, 0x33, 0x2e, 0x30, 0x20, 0x2d, 0x20, 0x28, 0x32, 0x2e, 0x30, 0x20, 0x2a, 0x20, // (3.0 - (2.0 * + 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x31, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x29, 0x29, // tmpvar_11)). )) + 0x20, 0x2a, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // * _mtl_i.v_colo + 0x72, 0x30, 0x2e, 0x77, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, // r0.w);. _mtl_o. 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x77, 0x20, 0x3d, // gl_FragColor.w = - 0x20, 0x28, 0x28, 0x68, 0x61, 0x6c, 0x66, 0x29, 0x28, 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x29, // ((half)((float) - 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x31, 0x29, 0x20, 0x2a, 0x20, 0x5f, 0x6d, // (tmpvar_11) * _m - 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x2e, 0x77, 0x29, // tl_i.v_color0.w) - 0x29, 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;.}... + 0x20, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x37, 0x20, 0x2a, 0x20, 0x5f, 0x6d, 0x74, // (tmpvar_7 * _mt + 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x2e, 0x77, 0x29, 0x3b, // l_i.v_color0.w); + 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_font_distance_field_subpixel_pssl; +extern const uint32_t fs_font_distance_field_subpixel_pssl_size; diff --git a/3rdparty/bgfx/examples/common/font/makefile b/3rdparty/bgfx/examples/common/font/makefile index 38f4d0d..928467d 100644 --- a/3rdparty/bgfx/examples/common/font/makefile +++ b/3rdparty/bgfx/examples/common/font/makefile @@ -1,6 +1,6 @@ # -# Copyright 2011-2016 Branimir Karadzic. All rights reserved. -# License: http://www.opensource.org/licenses/BSD-2-Clause +# Copyright 2011-2017 Branimir Karadzic. All rights reserved. +# License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause # include ../../../scripts/shader-embeded.mk diff --git a/3rdparty/bgfx/examples/common/font/text_buffer_manager.cpp b/3rdparty/bgfx/examples/common/font/text_buffer_manager.cpp index 9acb796..0ae7877 100644 --- a/3rdparty/bgfx/examples/common/font/text_buffer_manager.cpp +++ b/3rdparty/bgfx/examples/common/font/text_buffer_manager.cpp @@ -6,8 +6,9 @@ #include "../common.h" #include +#include + #include // offsetof -#include // memcpy #include // wcslen #include "text_buffer_manager.h" @@ -21,6 +22,18 @@ #include "vs_font_distance_field_subpixel.bin.h" #include "fs_font_distance_field_subpixel.bin.h" +static const bgfx::EmbeddedShader s_embeddedShaders[] = +{ + BGFX_EMBEDDED_SHADER(vs_font_basic), + BGFX_EMBEDDED_SHADER(fs_font_basic), + BGFX_EMBEDDED_SHADER(vs_font_distance_field), + BGFX_EMBEDDED_SHADER(fs_font_distance_field), + BGFX_EMBEDDED_SHADER(vs_font_distance_field_subpixel), + BGFX_EMBEDDED_SHADER(fs_font_distance_field_subpixel), + + BGFX_EMBEDDED_SHADER_END() +}; + #define MAX_BUFFERED_CHARACTERS (8192 - 5) class TextBuffer @@ -238,7 +251,7 @@ void TextBuffer::appendText(FontHandle _fontHandle, const char* _string, const c if (_end == NULL) { - _end = _string + strlen(_string); + _end = _string + bx::strnlen(_string); } BX_CHECK(_end >= _string); @@ -565,70 +578,25 @@ TextBufferManager::TextBufferManager(FontManager* _fontManager) { m_textBuffers = new BufferCache[MAX_TEXT_BUFFER_COUNT]; - const bgfx::Memory* vs_font_basic; - const bgfx::Memory* fs_font_basic; - const bgfx::Memory* vs_font_distance_field; - const bgfx::Memory* fs_font_distance_field; - const bgfx::Memory* vs_font_distance_field_subpixel; - const bgfx::Memory* fs_font_distance_field_subpixel; - - switch (bgfx::getRendererType() ) - { - case bgfx::RendererType::Direct3D9: - vs_font_basic = bgfx::makeRef(vs_font_basic_dx9, sizeof(vs_font_basic_dx9) ); - fs_font_basic = bgfx::makeRef(fs_font_basic_dx9, sizeof(fs_font_basic_dx9) ); - vs_font_distance_field = bgfx::makeRef(vs_font_distance_field_dx9, sizeof(vs_font_distance_field_dx9) ); - fs_font_distance_field = bgfx::makeRef(fs_font_distance_field_dx9, sizeof(fs_font_distance_field_dx9) ); - vs_font_distance_field_subpixel = bgfx::makeRef(vs_font_distance_field_subpixel_dx9, sizeof(vs_font_distance_field_subpixel_dx9) ); - fs_font_distance_field_subpixel = bgfx::makeRef(fs_font_distance_field_subpixel_dx9, sizeof(fs_font_distance_field_subpixel_dx9) ); - break; - - case bgfx::RendererType::Direct3D11: - case bgfx::RendererType::Direct3D12: - vs_font_basic = bgfx::makeRef(vs_font_basic_dx11, sizeof(vs_font_basic_dx11) ); - fs_font_basic = bgfx::makeRef(fs_font_basic_dx11, sizeof(fs_font_basic_dx11) ); - vs_font_distance_field = bgfx::makeRef(vs_font_distance_field_dx11, sizeof(vs_font_distance_field_dx11) ); - fs_font_distance_field = bgfx::makeRef(fs_font_distance_field_dx11, sizeof(fs_font_distance_field_dx11) ); - vs_font_distance_field_subpixel = bgfx::makeRef(vs_font_distance_field_subpixel_dx11, sizeof(vs_font_distance_field_subpixel_dx11) ); - fs_font_distance_field_subpixel = bgfx::makeRef(fs_font_distance_field_subpixel_dx11, sizeof(fs_font_distance_field_subpixel_dx11) ); - break; - - case bgfx::RendererType::Metal: - vs_font_basic = bgfx::makeRef(vs_font_basic_mtl, sizeof(vs_font_basic_mtl) ); - fs_font_basic = bgfx::makeRef(fs_font_basic_mtl, sizeof(fs_font_basic_mtl) ); - vs_font_distance_field = bgfx::makeRef(vs_font_distance_field_mtl, sizeof(vs_font_distance_field_mtl) ); - fs_font_distance_field = bgfx::makeRef(fs_font_distance_field_mtl, sizeof(fs_font_distance_field_mtl) ); - vs_font_distance_field_subpixel = bgfx::makeRef(vs_font_distance_field_subpixel_mtl, sizeof(vs_font_distance_field_subpixel_mtl) ); - fs_font_distance_field_subpixel = bgfx::makeRef(fs_font_distance_field_subpixel_mtl, sizeof(fs_font_distance_field_subpixel_mtl) ); - break; - - default: - vs_font_basic = bgfx::makeRef(vs_font_basic_glsl, sizeof(vs_font_basic_glsl) ); - fs_font_basic = bgfx::makeRef(fs_font_basic_glsl, sizeof(fs_font_basic_glsl) ); - vs_font_distance_field = bgfx::makeRef(vs_font_distance_field_glsl, sizeof(vs_font_distance_field_glsl) ); - fs_font_distance_field = bgfx::makeRef(fs_font_distance_field_glsl, sizeof(fs_font_distance_field_glsl) ); - vs_font_distance_field_subpixel = bgfx::makeRef(vs_font_distance_field_subpixel_glsl, sizeof(vs_font_distance_field_subpixel_glsl) ); - fs_font_distance_field_subpixel = bgfx::makeRef(fs_font_distance_field_subpixel_glsl, sizeof(fs_font_distance_field_subpixel_glsl) ); - break; - } + bgfx::RendererType::Enum type = bgfx::getRendererType(); m_basicProgram = bgfx::createProgram( - bgfx::createShader(vs_font_basic) - , bgfx::createShader(fs_font_basic) - , true - ); + bgfx::createEmbeddedShader(s_embeddedShaders, type, "vs_font_basic") + , bgfx::createEmbeddedShader(s_embeddedShaders, type, "fs_font_basic") + , true + ); m_distanceProgram = bgfx::createProgram( - bgfx::createShader(vs_font_distance_field) - , bgfx::createShader(fs_font_distance_field) - , true - ); + bgfx::createEmbeddedShader(s_embeddedShaders, type, "vs_font_distance_field") + , bgfx::createEmbeddedShader(s_embeddedShaders, type, "fs_font_distance_field") + , true + ); m_distanceSubpixelProgram = bgfx::createProgram( - bgfx::createShader(vs_font_distance_field_subpixel) - , bgfx::createShader(fs_font_distance_field_subpixel) - , true - ); + bgfx::createEmbeddedShader(s_embeddedShaders, type, "vs_font_distance_field_subpixel") + , bgfx::createEmbeddedShader(s_embeddedShaders, type, "fs_font_distance_field_subpixel") + , true + ); m_vertexDecl .begin() @@ -833,8 +801,8 @@ void TextBufferManager::submitTextBuffer(TextBufferHandle _handle, uint8_t _id, bgfx::TransientVertexBuffer tvb; bgfx::allocTransientIndexBuffer(&tib, bc.textBuffer->getIndexCount() ); bgfx::allocTransientVertexBuffer(&tvb, bc.textBuffer->getVertexCount(), m_vertexDecl); - memcpy(tib.data, bc.textBuffer->getIndexBuffer(), indexSize); - memcpy(tvb.data, bc.textBuffer->getVertexBuffer(), vertexSize); + bx::memCopy(tib.data, bc.textBuffer->getIndexBuffer(), indexSize); + bx::memCopy(tvb.data, bc.textBuffer->getVertexBuffer(), vertexSize); bgfx::setVertexBuffer(&tvb, 0, bc.textBuffer->getVertexCount() ); bgfx::setIndexBuffer(&tib, 0, bc.textBuffer->getIndexCount() ); } diff --git a/3rdparty/bgfx/examples/common/font/text_metrics.cpp b/3rdparty/bgfx/examples/common/font/text_metrics.cpp index 768ebbd..835c9e1 100644 --- a/3rdparty/bgfx/examples/common/font/text_metrics.cpp +++ b/3rdparty/bgfx/examples/common/font/text_metrics.cpp @@ -10,12 +10,13 @@ TextMetrics::TextMetrics(FontManager* _fontManager) : m_fontManager(_fontManager) - , m_width(0) - , m_height(0) - , m_x(0) - , m_lineHeight(0) - , m_lineGap(0) { + clearText(); +} + +void TextMetrics::clearText() +{ + m_width = m_height = m_x = m_lineHeight = m_lineGap = 0; } void TextMetrics::appendText(FontHandle _fontHandle, const char* _string) @@ -50,7 +51,6 @@ void TextMetrics::appendText(FontHandle _fontHandle, const char* _string) m_lineGap = font.lineGap; m_lineHeight = font.ascender - font.descender; m_x = 0; - break; } m_x += glyph->advance_x; @@ -97,7 +97,6 @@ void TextMetrics::appendText(FontHandle _fontHandle, const wchar_t* _string) m_lineGap = font.lineGap; m_lineHeight = font.ascender - font.descender; m_x = 0; - break; } m_x += glyph->advance_x; diff --git a/3rdparty/bgfx/examples/common/font/text_metrics.h b/3rdparty/bgfx/examples/common/font/text_metrics.h index ec373c7..48c9323 100644 --- a/3rdparty/bgfx/examples/common/font/text_metrics.h +++ b/3rdparty/bgfx/examples/common/font/text_metrics.h @@ -25,6 +25,9 @@ public: /// Return the height of the measured text. float getHeight() const { return m_height; } + /// Clear the width and height of the measured text. + void clearText(); + private: FontManager* m_fontManager; float m_width; 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 e3bafef..49d22ec 100644 --- a/3rdparty/bgfx/examples/common/font/vs_font_basic.bin.h +++ b/3rdparty/bgfx/examples/common/font/vs_font_basic.bin.h @@ -28,11 +28,213 @@ 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_dx9[339] = +static const uint8_t vs_font_basic_spv[3171] = +{ + 0x56, 0x53, 0x48, 0x04, 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, // ... +}; +static const uint8_t vs_font_basic_dx9[327] = { 0x56, 0x53, 0x48, 0x04, 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...... - 0x30, 0x01, 0x00, 0x03, 0xfe, 0xff, 0xfe, 0xff, 0x24, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, // 0.......$.CTAB.. + 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_ @@ -40,18 +242,17 @@ static const uint8_t vs_font_basic_dx9[339] = 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, 0x36, 0x2e, 0x33, 0x2e, 0x39, 0x36, 0x30, 0x30, // ompiler 6.3.9600 - 0x2e, 0x31, 0x36, 0x33, 0x38, 0x34, 0x00, 0xab, 0xab, 0xab, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, // .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, // ................ - 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, 0xa0, 0x01, 0x00, // U............... - 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, // ... + 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, // ....... }; static const uint8_t vs_font_basic_dx11[580] = { @@ -146,3 +347,5 @@ static const uint8_t vs_font_basic_mtl[790] = 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* vs_font_basic_pssl; +extern const uint32_t vs_font_basic_pssl_size; 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 166aef6..273d399 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 @@ -28,11 +28,213 @@ 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_dx9[339] = +static const uint8_t vs_font_distance_field_spv[3171] = +{ + 0x56, 0x53, 0x48, 0x04, 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, // ... +}; +static const uint8_t vs_font_distance_field_dx9[327] = { 0x56, 0x53, 0x48, 0x04, 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...... - 0x30, 0x01, 0x00, 0x03, 0xfe, 0xff, 0xfe, 0xff, 0x24, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, // 0.......$.CTAB.. + 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_ @@ -40,18 +242,17 @@ static const uint8_t vs_font_distance_field_dx9[339] = 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, 0x36, 0x2e, 0x33, 0x2e, 0x39, 0x36, 0x30, 0x30, // ompiler 6.3.9600 - 0x2e, 0x31, 0x36, 0x33, 0x38, 0x34, 0x00, 0xab, 0xab, 0xab, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, // .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, // ................ - 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, 0xa0, 0x01, 0x00, // U............... - 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, // ... + 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, // ....... }; static const uint8_t vs_font_distance_field_dx11[580] = { @@ -146,3 +347,5 @@ static const uint8_t vs_font_distance_field_mtl[790] = 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* vs_font_distance_field_pssl; +extern const uint32_t vs_font_distance_field_pssl_size; 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 8ccca0f..fecf290 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 @@ -28,11 +28,213 @@ 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_dx9[339] = +static const uint8_t vs_font_distance_field_subpixel_spv[3171] = +{ + 0x56, 0x53, 0x48, 0x04, 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, // ... +}; +static const uint8_t vs_font_distance_field_subpixel_dx9[327] = { 0x56, 0x53, 0x48, 0x04, 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...... - 0x30, 0x01, 0x00, 0x03, 0xfe, 0xff, 0xfe, 0xff, 0x24, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, // 0.......$.CTAB.. + 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_ @@ -40,18 +242,17 @@ static const uint8_t vs_font_distance_field_subpixel_dx9[339] = 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, 0x36, 0x2e, 0x33, 0x2e, 0x39, 0x36, 0x30, 0x30, // ompiler 6.3.9600 - 0x2e, 0x31, 0x36, 0x33, 0x38, 0x34, 0x00, 0xab, 0xab, 0xab, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, // .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, // ................ - 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, 0xa0, 0x01, 0x00, // U............... - 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, // ... + 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, // ....... }; static const uint8_t vs_font_distance_field_subpixel_dx11[580] = { @@ -146,3 +347,5 @@ static const uint8_t vs_font_distance_field_subpixel_mtl[790] = 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* vs_font_distance_field_subpixel_pssl; +extern const uint32_t vs_font_distance_field_subpixel_pssl_size; 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 2c6ecfe..9cad96b 100644 --- a/3rdparty/bgfx/examples/common/imgui/fs_imgui_color.bin.h +++ b/3rdparty/bgfx/examples/common/imgui/fs_imgui_color.bin.h @@ -7,17 +7,150 @@ static const uint8_t fs_imgui_color_glsl[89] = 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_dx9[141] = +static const uint8_t fs_imgui_color_spv[2065] = { - 0x46, 0x53, 0x48, 0x04, 0xa4, 0x8b, 0xef, 0x49, 0x00, 0x00, 0x80, 0x00, 0x00, 0x03, 0xff, 0xff, // FSH....I........ - 0xfe, 0xff, 0x17, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // ....CTAB....#... + 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, // . +}; +static const uint8_t fs_imgui_color_dx9[129] = +{ + 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, 0x36, 0x2e, // ader Compiler 6. - 0x33, 0x2e, 0x39, 0x36, 0x30, 0x30, 0x2e, 0x31, 0x36, 0x33, 0x38, 0x34, 0x00, 0xab, 0xab, 0xab, // 3.9600.16384.... - 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x01, 0x00, 0x00, 0x02, // ................ - 0x00, 0x08, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // ............. + 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, // . }; static const uint8_t fs_imgui_color_dx11[260] = { @@ -68,3 +201,5 @@ static const uint8_t fs_imgui_color_mtl[404] = 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_imgui_color_pssl; +extern const uint32_t fs_imgui_color_pssl_size; diff --git a/3rdparty/bgfx/examples/common/imgui/fs_imgui_color.sc b/3rdparty/bgfx/examples/common/imgui/fs_imgui_color.sc index e1b4bd8..19f8692 100644 --- a/3rdparty/bgfx/examples/common/imgui/fs_imgui_color.sc +++ b/3rdparty/bgfx/examples/common/imgui/fs_imgui_color.sc @@ -1,7 +1,7 @@ $input v_color0 /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ 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 3692ef1..d0d5acf 100644 --- a/3rdparty/bgfx/examples/common/imgui/fs_imgui_cubemap.bin.h +++ b/3rdparty/bgfx/examples/common/imgui/fs_imgui_cubemap.bin.h @@ -24,12 +24,240 @@ 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_dx9[394] = +static const uint8_t fs_imgui_cubemap_spv[3585] = +{ + 0x46, 0x53, 0x48, 0x04, 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, // . +}; +static const uint8_t fs_imgui_cubemap_dx9[382] = { 0x46, 0x53, 0x48, 0x04, 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, 0x54, 0x01, 0x00, 0x03, 0xff, 0xff, 0xfe, 0xff, 0x31, 0x00, 0x43, 0x54, 0x41, // ...T.......1.CTA + 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...... @@ -40,17 +268,16 @@ static const uint8_t fs_imgui_cubemap_dx9[394] = 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, 0x36, // hader Compiler 6 - 0x2e, 0x33, 0x2e, 0x39, 0x36, 0x30, 0x30, 0x2e, 0x31, 0x36, 0x33, 0x38, 0x34, 0x00, 0xab, 0xab, // .3.9600.16384... - 0xab, 0x51, 0x00, 0x00, 0x05, 0x01, 0x00, 0x0f, 0xa0, 0xcd, 0xcc, 0x4c, 0x3f, 0xcd, 0xcc, 0x4c, // .Q.........L?..L - 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 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, // ...............U - 0xa0, 0x04, 0x00, 0x00, 0x04, 0x00, 0x08, 0x08, 0x80, 0x00, 0x00, 0x55, 0x80, 0x01, 0x00, 0x00, // ...........U.... - 0xa0, 0x01, 0x00, 0x55, 0xa0, 0xff, 0xff, 0x00, 0x00, 0x00, // ...U...... + 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...... }; static const uint8_t fs_imgui_cubemap_dx11[441] = { @@ -83,59 +310,55 @@ static const uint8_t fs_imgui_cubemap_dx11[441] = 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, // >>....... }; -static const uint8_t fs_imgui_cubemap_mtl[848] = +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 0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x02, 0x01, 0x00, 0x00, // geLodEnabled.... - 0x01, 0x00, 0x29, 0x03, 0x00, 0x00, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, // ..)...using name + 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 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, // uct xlatMtlShade 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, // rInput {. float 0x33, 0x20, 0x76, 0x5f, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, // 3 v_normal;.};.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, 0x68, 0x61, // derOutput {. ha - 0x6c, 0x66, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, // lf4 gl_FragColor - 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, 0x75, 0x5f, 0x69, 0x6d, // {. float4 u_im - 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x3b, 0x0a, 0x7d, // ageLodEnabled;.} - 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 + 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, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, // oat4 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, 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, 0x0a, 0x20, 0x20, 0x2c, 0x20, 0x20, 0x20, 0x74, 0x65, // er(0)]]. , te - 0x78, 0x74, 0x75, 0x72, 0x65, 0x63, 0x75, 0x62, 0x65, 0x3c, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x3e, // xturecube - 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, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x20, 0x74, // mtl_o;. half4 t - 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, // mpvar_1 = 0;. t - 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x28, // mpvar_1 = half4( + 0x6d, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x75, 0x5f, 0x69, // m {. float4 u_i + 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x3b, 0x0a, // mageLodEnabled;. + 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, 0x0a, 0x20, 0x20, 0x2c, 0x20, 0x20, 0x20, 0x74, // fer(0)]]. , t + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x63, 0x75, 0x62, 0x65, 0x3c, 0x66, 0x6c, 0x6f, 0x61, 0x74, // exturecube s_texColor [[t + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x2c, 0x20, 0x73, 0x61, 0x6d, // exture(0)]], sam + 0x70, 0x6c, 0x65, 0x72, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x73, 0x6d, 0x70, 0x5f, 0x73, 0x5f, 0x74, // pler _mtlsmp_s_t + 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x5b, 0x5b, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, // exColor [[sample + 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, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, // _mtl_o;. float4 + 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, // tmpvar_1 = 0;. + 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, // tmpvar_1.xyz = 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, 0x5f, // olor, (float3)(_ 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x29, 0x2c, // mtl_i.v_normal), 0x20, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, // level(_mtl_u.u_ 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x2e, // imageLodEnabled. - 0x78, 0x29, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x74, 0x6d, // x)));. float tm - 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, // pvar_2 = 0;. tm - 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x20, 0x3d, 0x20, 0x28, 0x30, 0x2e, 0x32, 0x20, 0x2b, 0x20, // pvar_2 = (0.2 + - 0x28, 0x30, 0x2e, 0x38, 0x20, 0x2a, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, // (0.8 * _mtl_u.u_ - 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x2e, // imageLodEnabled. - 0x79, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x20, 0x74, 0x6d, 0x70, // y));. half4 tmp - 0x76, 0x61, 0x72, 0x5f, 0x33, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, // var_3 = 0;. tmp - 0x76, 0x61, 0x72, 0x5f, 0x33, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, // var_3.xyz = tmpv - 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x78, 0x79, 0x7a, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, // ar_1.xyz;. tmpv - 0x61, 0x72, 0x5f, 0x33, 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x28, 0x74, 0x6d, // ar_3.w = half(tm - 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, // pvar_2);. _mtl_ - 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, // o.gl_FragColor = - 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, // tmpvar_3;. ret - 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // urn _mtl_o;.}... + 0x78, 0x29, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // x)).xyz;. tmpva + 0x72, 0x5f, 0x31, 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x28, 0x30, 0x2e, 0x32, 0x20, 0x2b, 0x20, 0x28, // r_1.w = (0.2 + ( + 0x30, 0x2e, 0x38, 0x20, 0x2a, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x69, // 0.8 * _mtl_u.u_i + 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x2e, 0x79, // mageLodEnabled.y + 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, // ));. _mtl_o.gl_ + 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, // FragColor = tmpv + 0x61, 0x72, 0x5f, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, // ar_1;. return _ + 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // mtl_o;.}... }; +extern const uint8_t* fs_imgui_cubemap_pssl; +extern const uint32_t fs_imgui_cubemap_pssl_size; diff --git a/3rdparty/bgfx/examples/common/imgui/fs_imgui_cubemap.sc b/3rdparty/bgfx/examples/common/imgui/fs_imgui_cubemap.sc index 95ca630..cf210f6 100644 --- a/3rdparty/bgfx/examples/common/imgui/fs_imgui_cubemap.sc +++ b/3rdparty/bgfx/examples/common/imgui/fs_imgui_cubemap.sc @@ -1,7 +1,7 @@ $input v_normal /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ 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 7b065e8..54fe9d1 100644 --- a/3rdparty/bgfx/examples/common/imgui/fs_imgui_image.bin.h +++ b/3rdparty/bgfx/examples/common/imgui/fs_imgui_image.bin.h @@ -24,12 +24,240 @@ 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_dx9[398] = +static const uint8_t fs_imgui_image_spv[3597] = +{ + 0x46, 0x53, 0x48, 0x04, 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.... +}; +static const uint8_t fs_imgui_image_dx9[386] = { 0x46, 0x53, 0x48, 0x04, 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, 0x58, 0x01, 0x00, 0x03, 0xff, 0xff, 0xfe, 0xff, 0x31, 0x00, 0x43, 0x54, 0x41, // ...X.......1.CTA + 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...... @@ -40,17 +268,17 @@ static const uint8_t fs_imgui_image_dx9[398] = 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, 0x36, // hader Compiler 6 - 0x2e, 0x33, 0x2e, 0x39, 0x36, 0x30, 0x30, 0x2e, 0x31, 0x36, 0x33, 0x38, 0x34, 0x00, 0xab, 0xab, // .3.9600.16384... - 0xab, 0x51, 0x00, 0x00, 0x05, 0x01, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, // .Q..........?... - 0x00, 0xcd, 0xcc, 0x4c, 0x3f, 0xcd, 0xcc, 0x4c, 0x3e, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, // ...L?..L>....... - 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, // ...............U - 0xa0, 0x00, 0x00, 0xaa, 0x80, 0x00, 0x00, 0xff, 0x80, 0xff, 0xff, 0x00, 0x00, 0x00, // .............. + 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, // .. }; static const uint8_t fs_imgui_image_dx11[445] = { @@ -83,60 +311,55 @@ static const uint8_t fs_imgui_image_dx11[445] = 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>>....... }; -static const uint8_t fs_imgui_image_mtl[852] = +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 0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x02, 0x01, 0x00, 0x00, // geLodEnabled.... - 0x01, 0x00, 0x2d, 0x03, 0x00, 0x00, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, // ..-...using name + 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 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, // uct xlatMtlShade 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, // rInput {. float 0x32, 0x20, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x7d, // 2 v_texcoord0;.} 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, // ;.struct xlatMtl 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, // ShaderOutput {. - 0x20, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, // half4 gl_FragCo - 0x6c, 0x6f, 0x72, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, // lor;.};.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, 0x75, // orm {. float4 u - 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, // _imageLodEnabled - 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 + 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, // float4 gl_FragC + 0x6f, 0x6c, 0x6f, 0x72, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, // olor;.};.struct 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, 0x32, 0x64, 0x3c, 0x66, 0x6c, 0x6f, 0x61, 0x74, // texture2d s_texColor [[t - 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x2c, 0x20, 0x73, 0x61, 0x6d, // exture(0)]], sam - 0x70, 0x6c, 0x65, 0x72, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x73, 0x6d, 0x70, 0x5f, 0x73, 0x5f, 0x74, // pler _mtlsmp_s_t - 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x5b, 0x5b, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, // exColor [[sample - 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, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x20, // _mtl_o;. half4 - 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, 0x68, 0x61, 0x6c, 0x66, 0x34, // tmpvar_1 = half4 - 0x28, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x73, 0x61, 0x6d, 0x70, // (s_texColor.samp + 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, // form {. float4 + 0x75, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, // u_imageLodEnable + 0x64, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x78, // d;.};.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, 0x0a, 0x20, 0x20, 0x2c, 0x20, // buffer(0)]]. , + 0x20, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x3c, 0x66, 0x6c, 0x6f, 0x61, // texture2d s_texColor [[ + 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x2c, 0x20, 0x73, 0x61, // texture(0)]], sa + 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x73, 0x6d, 0x70, 0x5f, 0x73, 0x5f, // mpler _mtlsmp_s_ + 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x5b, 0x5b, 0x73, 0x61, 0x6d, 0x70, 0x6c, // texColor [[sampl + 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, 0x78, 0x79, 0x7a, 0x20, 0x3d, // tmpvar_1.xyz = + 0x20, 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, 0x32, 0x29, 0x28, // Color, (float2)( 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, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, // u.u_imageLodEnab - 0x6c, 0x65, 0x64, 0x2e, 0x78, 0x29, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, // led.x)));. floa - 0x74, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, // t tmpvar_2 = 0;. - 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x20, 0x3d, 0x20, 0x28, 0x30, 0x2e, // tmpvar_2 = (0. - 0x32, 0x20, 0x2b, 0x20, 0x28, 0x30, 0x2e, 0x38, 0x20, 0x2a, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, // 2 + (0.8 * _mtl_ - 0x75, 0x2e, 0x75, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, // u.u_imageLodEnab - 0x6c, 0x65, 0x64, 0x2e, 0x79, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x34, // led.y));. half4 - 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 = - 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x78, 0x79, 0x7a, 0x3b, 0x0a, 0x20, 0x20, // tmpvar_1.xyz;. - 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x68, 0x61, 0x6c, // tmpvar_3.w = hal - 0x66, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x5f, // f(tmpvar_2);. _ - 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, 0x33, 0x3b, 0x0a, 0x20, // or = tmpvar_3;. - 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, // return _mtl_o;. - 0x7d, 0x0a, 0x0a, 0x00, // }... + 0x6c, 0x65, 0x64, 0x2e, 0x78, 0x29, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x3b, 0x0a, 0x20, 0x20, 0x74, // led.x)).xyz;. t + 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x28, 0x30, 0x2e, 0x32, // mpvar_1.w = (0.2 + 0x20, 0x2b, 0x20, 0x28, 0x30, 0x2e, 0x38, 0x20, 0x2a, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, // + (0.8 * _mtl_u + 0x2e, 0x75, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, // .u_imageLodEnabl + 0x65, 0x64, 0x2e, 0x79, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, // ed.y));. _mtl_o + 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, // .gl_FragColor = + 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, // tmpvar_1;. retu + 0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // rn _mtl_o;.}... }; +extern const uint8_t* fs_imgui_image_pssl; +extern const uint32_t fs_imgui_image_pssl_size; 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 0574e4b..e490439 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 @@ -37,13 +37,264 @@ 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_dx9[458] = +static const uint8_t fs_imgui_image_swizz_spv[3957] = +{ + 0x46, 0x53, 0x48, 0x04, 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.... +}; +static const uint8_t fs_imgui_image_swizz_dx9[450] = { 0x46, 0x53, 0x48, 0x04, 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, 0x84, 0x01, 0x00, 0x03, 0xff, 0xff, 0xfe, 0xff, 0x38, 0x00, 0x43, 0x54, 0x41, // ...........8.CTA + 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...... @@ -56,18 +307,18 @@ static const uint8_t fs_imgui_image_swizz_dx9[458] = 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, 0x36, 0x2e, 0x33, // der Compiler 6.3 - 0x2e, 0x39, 0x36, 0x30, 0x30, 0x2e, 0x31, 0x36, 0x33, 0x38, 0x34, 0x00, 0xab, 0x51, 0x00, 0x00, // .9600.16384..Q.. - 0x05, 0x02, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xcd, 0xcc, 0x4c, // ........?......L - 0x3f, 0xcd, 0xcc, 0x4c, 0x3e, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x00, 0x00, 0x03, // ?..L>........... - 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, // ...............U - 0xa0, 0x00, 0x00, 0xaa, 0x80, 0x00, 0x00, 0xff, 0x80, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, // ................ - 0x80, 0x00, 0x00, 0x40, 0x80, 0xff, 0xff, 0x00, 0x00, 0x00, // ...@...... + 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, // .. }; static const uint8_t fs_imgui_image_swizz_dx11[493] = { @@ -103,73 +354,68 @@ static const uint8_t fs_imgui_image_swizz_dx11[493] = 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, // .....>..... . }; -static const uint8_t fs_imgui_image_swizz_mtl[1065] = +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 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, 0xf2, 0x03, 0x00, 0x00, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, // ......using name + 0x01, 0x00, 0x7f, 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 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, // uct xlatMtlShade 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, // rInput {. float 0x32, 0x20, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x7d, // 2 v_texcoord0;.} 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, // ;.struct xlatMtl 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, // ShaderOutput {. - 0x20, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, // half4 gl_FragCo - 0x6c, 0x6f, 0x72, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, // lor;.};.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, 0x75, // orm {. float4 u - 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, // _imageLodEnabled - 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x75, 0x5f, 0x73, 0x77, 0x69, // ;. float4 u_swi - 0x7a, 0x7a, 0x6c, 0x65, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, // zzle;.};.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, 0x32, 0x64, 0x3c, 0x66, // , texture2d 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, 0x68, 0x61, // put _mtl_o;. ha - 0x6c, 0x66, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x30, // lf4 tmpvar_1 = 0 - 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x68, // ;. tmpvar_1 = h - 0x61, 0x6c, 0x66, 0x34, 0x28, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, // alf4(s_texColor. + 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, // float4 gl_FragC + 0x6f, 0x6c, 0x6f, 0x72, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, // olor;.};.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 + 0x75, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, // u_imageLodEnable + 0x64, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x75, 0x5f, 0x73, 0x77, // d;. float4 u_sw + 0x69, 0x7a, 0x7a, 0x6c, 0x65, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, // izzle;.};.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, 0x0a, // u [[buffer(0)]]. + 0x20, 0x20, 0x2c, 0x20, 0x20, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x3c, // , texture2d< + 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x3e, 0x20, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, // float> s_texColo + 0x72, 0x20, 0x5b, 0x5b, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x30, 0x29, 0x5d, 0x5d, // r [[texture(0)]] + 0x2c, 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x73, 0x6d, // , sampler _mtlsm + 0x70, 0x5f, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x5b, 0x5b, 0x73, // p_s_texColor [[s + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x29, 0x0a, 0x7b, 0x0a, 0x20, // ampler(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, 0x66, // tput _mtl_o;. f + 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, // loat tmpvar_1 = + 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, // 0;. tmpvar_1 = + 0x64, 0x6f, 0x74, 0x20, 0x28, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, // dot (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, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x74, 0x65, 0x78, // t2)(_mtl_i.v_tex 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x29, 0x2c, 0x20, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x28, 0x5f, // coord0), level(_ 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x64, // mtl_u.u_imageLod - 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x2e, 0x78, 0x29, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, // Enabled.x)));. - 0x68, 0x61, 0x6c, 0x66, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x20, 0x3d, 0x20, // half tmpvar_2 = - 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x20, 0x3d, 0x20, // 0;. tmpvar_2 = - 0x28, 0x28, 0x68, 0x61, 0x6c, 0x66, 0x29, 0x64, 0x6f, 0x74, 0x20, 0x28, 0x28, 0x66, 0x6c, 0x6f, // ((half)dot ((flo - 0x61, 0x74, 0x34, 0x29, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2c, 0x20, 0x5f, 0x6d, // at4)tmpvar_1, _m - 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x73, 0x77, 0x69, 0x7a, 0x7a, 0x6c, 0x65, 0x29, 0x29, // tl_u.u_swizzle)) - 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, // ;. float tmpvar - 0x5f, 0x33, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, // _3 = 0;. tmpvar - 0x5f, 0x33, 0x20, 0x3d, 0x20, 0x28, 0x30, 0x2e, 0x32, 0x20, 0x2b, 0x20, 0x28, 0x30, 0x2e, 0x38, // _3 = (0.2 + (0.8 - 0x20, 0x2a, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x69, 0x6d, 0x61, 0x67, // * _mtl_u.u_imag - 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x2e, 0x79, 0x29, 0x29, 0x3b, // eLodEnabled.y)); - 0x0a, 0x20, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x33, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // . half3 tmpvar_ - 0x34, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // 4 = 0;. tmpvar_ - 0x34, 0x2e, 0x78, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x3b, 0x0a, // 4.x = tmpvar_2;. - 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x34, 0x2e, 0x79, 0x20, 0x3d, 0x20, 0x74, // tmpvar_4.y = t - 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // mpvar_2;. tmpva - 0x72, 0x5f, 0x34, 0x2e, 0x7a, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, // r_4.z = tmpvar_2 - 0x3b, 0x0a, 0x20, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, // ;. half4 tmpvar - 0x5f, 0x35, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, // _5 = 0;. tmpvar - 0x5f, 0x35, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // _5.xyz = tmpvar_ - 0x34, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x35, 0x2e, 0x77, 0x20, // 4;. tmpvar_5.w - 0x3d, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x29, // = half(tmpvar_3) - 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, 0x35, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, // _5;. return _mt - 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // l_o;.}... + 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x2e, 0x78, 0x29, 0x29, 0x2c, 0x20, 0x5f, 0x6d, 0x74, // Enabled.x)), _mt + 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x73, 0x77, 0x69, 0x7a, 0x7a, 0x6c, 0x65, 0x29, 0x3b, 0x0a, // l_u.u_swizzle);. + 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // float3 tmpvar_ + 0x32, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // 2 = 0;. tmpvar_ + 0x32, 0x2e, 0x78, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x3b, 0x0a, // 2.x = tmpvar_1;. + 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x2e, 0x79, 0x20, 0x3d, 0x20, 0x74, // tmpvar_2.y = t + 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // mpvar_1;. tmpva + 0x72, 0x5f, 0x32, 0x2e, 0x7a, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, // r_2.z = tmpvar_1 + 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // ;. float4 tmpva + 0x72, 0x5f, 0x33, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // r_3 = 0;. tmpva + 0x72, 0x5f, 0x33, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, // r_3.xyz = tmpvar + 0x5f, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x2e, 0x77, // _2;. tmpvar_3.w + 0x20, 0x3d, 0x20, 0x28, 0x30, 0x2e, 0x32, 0x20, 0x2b, 0x20, 0x28, 0x30, 0x2e, 0x38, 0x20, 0x2a, // = (0.2 + (0.8 * + 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, // _mtl_u.u_imageL + 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x2e, 0x79, 0x29, 0x29, 0x3b, 0x0a, 0x20, // odEnabled.y));. + 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, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x3b, // olor = tmpvar_3; + 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_imgui_image_swizz_pssl; +extern const uint32_t fs_imgui_image_swizz_pssl_size; 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 d87a480..b663f8e 100644 --- a/3rdparty/bgfx/examples/common/imgui/fs_imgui_latlong.bin.h +++ b/3rdparty/bgfx/examples/common/imgui/fs_imgui_latlong.bin.h @@ -42,12 +42,289 @@ 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_dx9[558] = +static const uint8_t fs_imgui_latlong_spv[4373] = +{ + 0x46, 0x53, 0x48, 0x04, 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.... +}; +static const uint8_t fs_imgui_latlong_dx9[546] = { 0x46, 0x53, 0x48, 0x04, 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, 0xf8, 0x01, 0x00, 0x03, 0xff, 0xff, 0xfe, 0xff, 0x31, 0x00, 0x43, 0x54, 0x41, // ...........1.CTA + 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...... @@ -58,27 +335,27 @@ static const uint8_t fs_imgui_latlong_dx9[558] = 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, 0x36, // hader Compiler 6 - 0x2e, 0x33, 0x2e, 0x39, 0x36, 0x30, 0x30, 0x2e, 0x31, 0x36, 0x33, 0x38, 0x34, 0x00, 0xab, 0xab, // .3.9600.16384... - 0xab, 0x51, 0x00, 0x00, 0x05, 0x01, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x00, 0x3f, 0xdb, 0x0f, 0xc9, // .Q..........?... - 0x40, 0xdb, 0x0f, 0x49, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x05, 0x02, 0x00, 0x0f, // @..I.....Q...... - 0xa0, 0xcd, 0xcc, 0x4c, 0x3f, 0xcd, 0xcc, 0x4c, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ...L?..L>....... - 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, 0x02, 0x01, 0x00, 0x03, // ...U.....%...... - 0x80, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x55, // ...............U - 0x90, 0x01, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0xa0, 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, 0x02, 0x02, 0x00, 0x03, // ...U.....%...... - 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, 0x80, 0x02, 0x00, 0x00, // ...U............ - 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, 0x80, 0x00, 0x00, 0x55, // ...U...........U - 0x80, 0x02, 0x00, 0x00, 0xa0, 0x02, 0x00, 0x55, 0xa0, 0xff, 0xff, 0x00, 0x00, 0x00, // .......U...... + 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, // .. }; static const uint8_t fs_imgui_latlong_dx11[617] = { @@ -122,78 +399,73 @@ static const uint8_t fs_imgui_latlong_dx11[617] = 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, // >>....... }; -static const uint8_t fs_imgui_latlong_mtl[1139] = +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 0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x02, 0x01, 0x00, 0x00, // geLodEnabled.... - 0x01, 0x00, 0x4c, 0x04, 0x00, 0x00, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, // ..L...using name + 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 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, // uct xlatMtlShade 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, // rInput {. float 0x32, 0x20, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x7d, // 2 v_texcoord0;.} 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, // ;.struct xlatMtl 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, // ShaderOutput {. - 0x20, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, // half4 gl_FragCo - 0x6c, 0x6f, 0x72, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, // lor;.};.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, 0x75, // orm {. float4 u - 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, // _imageLodEnabled - 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 + 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, // float4 gl_FragC + 0x6f, 0x6c, 0x6f, 0x72, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, // olor;.};.struct 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 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, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x30, 0x3b, // t3 result_1 = 0; - 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, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x74, 0x65, // 2 = (_mtl_i.v_te - 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x2e, 0x78, 0x20, 0x2a, 0x20, 0x36, 0x2e, 0x32, 0x38, // xcoord0.x * 6.28 - 0x33, 0x31, 0x38, 0x35, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x74, // 3185);. float t - 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, // mpvar_3 = 0;. t - 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x20, 0x3d, 0x20, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, // mpvar_3 = (_mtl_ - 0x69, 0x2e, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x2e, 0x79, 0x20, // i.v_texcoord0.y - 0x2a, 0x20, 0x33, 0x2e, 0x31, 0x34, 0x31, 0x35, 0x39, 0x33, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x72, // * 3.141593);. r - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x31, 0x2e, 0x78, 0x20, 0x3d, 0x20, 0x28, 0x2d, 0x28, 0x73, // esult_1.x = (-(s - 0x69, 0x6e, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x29, 0x29, 0x20, 0x2a, 0x20, // in(tmpvar_3)) * - 0x73, 0x69, 0x6e, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x29, 0x29, 0x3b, 0x0a, // sin(tmpvar_2));. - 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x31, 0x2e, 0x79, 0x20, 0x3d, 0x20, 0x63, // result_1.y = c - 0x6f, 0x73, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x29, 0x3b, 0x0a, 0x20, 0x20, // os(tmpvar_3);. - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x31, 0x2e, 0x7a, 0x20, 0x3d, 0x20, 0x28, 0x2d, 0x28, // result_1.z = (-( + 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, // form {. float4 + 0x75, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, // u_imageLodEnable + 0x64, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x78, // d;.};.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, 0x0a, 0x20, 0x20, 0x2c, 0x20, // buffer(0)]]. , + 0x20, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x63, 0x75, 0x62, 0x65, 0x3c, 0x66, 0x6c, // texturecube 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, 0x33, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x30, // at3 result_1 = 0 + 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, // ;. float tmpvar + 0x5f, 0x32, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, // _2 = 0;. tmpvar + 0x5f, 0x32, 0x20, 0x3d, 0x20, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x74, // _2 = (_mtl_i.v_t + 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x2e, 0x78, 0x20, 0x2a, 0x20, 0x36, 0x2e, 0x32, // excoord0.x * 6.2 + 0x38, 0x33, 0x31, 0x38, 0x35, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, // 83185);. float + 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, 0x20, 0x3d, 0x20, 0x28, 0x5f, 0x6d, 0x74, 0x6c, // tmpvar_3 = (_mtl + 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x2e, 0x79, // _i.v_texcoord0.y + 0x20, 0x2a, 0x20, 0x33, 0x2e, 0x31, 0x34, 0x31, 0x35, 0x39, 0x33, 0x29, 0x3b, 0x0a, 0x20, 0x20, // * 3.141593);. + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x31, 0x2e, 0x78, 0x20, 0x3d, 0x20, 0x28, 0x2d, 0x28, // result_1.x = (-( 0x73, 0x69, 0x6e, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x29, 0x29, 0x20, 0x2a, // sin(tmpvar_3)) * - 0x20, 0x63, 0x6f, 0x73, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x29, 0x29, 0x3b, // cos(tmpvar_2)); - 0x0a, 0x20, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // . half4 tmpvar_ - 0x34, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // 4 = 0;. tmpvar_ - 0x34, 0x20, 0x3d, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x28, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, // 4 = half4(s_texC + 0x20, 0x73, 0x69, 0x6e, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x29, 0x29, 0x3b, // sin(tmpvar_2)); + 0x0a, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x31, 0x2e, 0x79, 0x20, 0x3d, 0x20, // . result_1.y = + 0x63, 0x6f, 0x73, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x29, 0x3b, 0x0a, 0x20, // cos(tmpvar_3);. + 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x31, 0x2e, 0x7a, 0x20, 0x3d, 0x20, 0x28, 0x2d, // result_1.z = (- + 0x28, 0x73, 0x69, 0x6e, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x29, 0x29, 0x20, // (sin(tmpvar_3)) + 0x2a, 0x20, 0x63, 0x6f, 0x73, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x29, 0x29, // * cos(tmpvar_2)) + 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // ;. float4 tmpva + 0x72, 0x5f, 0x34, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // r_4 = 0;. tmpva + 0x72, 0x5f, 0x34, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, // r_4.xyz = s_texC 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x28, 0x5f, 0x6d, 0x74, 0x6c, // olor.sample(_mtl 0x73, 0x6d, 0x70, 0x5f, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2c, 0x20, // smp_s_texColor, 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x29, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, // (float3)(result_ 0x31, 0x29, 0x2c, 0x20, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, // 1), level(_mtl_u 0x2e, 0x75, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, // .u_imageLodEnabl - 0x65, 0x64, 0x2e, 0x78, 0x29, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, // ed.x)));. float - 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x35, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, // tmpvar_5 = 0;. - 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x35, 0x20, 0x3d, 0x20, 0x28, 0x30, 0x2e, 0x32, // tmpvar_5 = (0.2 - 0x20, 0x2b, 0x20, 0x28, 0x30, 0x2e, 0x38, 0x20, 0x2a, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, // + (0.8 * _mtl_u - 0x2e, 0x75, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, // .u_imageLodEnabl - 0x65, 0x64, 0x2e, 0x79, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x20, // ed.y));. half4 - 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x36, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, // tmpvar_6 = 0;. - 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x36, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x74, // tmpvar_6.xyz = t - 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x34, 0x2e, 0x78, 0x79, 0x7a, 0x3b, 0x0a, 0x20, 0x20, 0x74, // mpvar_4.xyz;. t - 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x36, 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x68, 0x61, 0x6c, 0x66, // mpvar_6.w = half - 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x35, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, // (tmpvar_5);. _m - 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, // tl_o.gl_FragColo - 0x72, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x36, 0x3b, 0x0a, 0x20, 0x20, // r = tmpvar_6;. - 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, // return _mtl_o;.} - 0x0a, 0x0a, 0x00, // ... + 0x65, 0x64, 0x2e, 0x78, 0x29, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, // ed.x)).xyz;. tm + 0x70, 0x76, 0x61, 0x72, 0x5f, 0x34, 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x28, 0x30, 0x2e, 0x32, 0x20, // pvar_4.w = (0.2 + 0x2b, 0x20, 0x28, 0x30, 0x2e, 0x38, 0x20, 0x2a, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, // + (0.8 * _mtl_u. + 0x75, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, // u_imageLodEnable + 0x64, 0x2e, 0x79, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, // d.y));. _mtl_o. + 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x74, // gl_FragColor = t + 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x34, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, // mpvar_4;. retur + 0x6e, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // n _mtl_o;.}... }; +extern const uint8_t* fs_imgui_latlong_pssl; +extern const uint32_t fs_imgui_latlong_pssl_size; 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 bf5b54a..0447442 100644 --- a/3rdparty/bgfx/examples/common/imgui/fs_imgui_texture.bin.h +++ b/3rdparty/bgfx/examples/common/imgui/fs_imgui_texture.bin.h @@ -20,25 +20,241 @@ 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_dx9[262] = +static const uint8_t fs_imgui_texture_spv[3417] = +{ + 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.... +}; +static const uint8_t fs_imgui_texture_dx9[250] = { 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, 0xe8, 0x00, 0x00, 0x03, 0xff, // Color0.......... - 0xff, 0xfe, 0xff, 0x23, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, // ...#.CTAB....S.. + 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, 0x36, // hader Compiler 6 - 0x2e, 0x33, 0x2e, 0x39, 0x36, 0x30, 0x30, 0x2e, 0x31, 0x36, 0x33, 0x38, 0x34, 0x00, 0xab, 0xab, // .3.9600.16384... - 0xab, 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, 0x42, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x01, 0x00, 0xe4, // .....B.......... - 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, // ...... + 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, // .......... }; static const uint8_t fs_imgui_texture_dx11[421] = { @@ -70,9 +286,9 @@ static const uint8_t fs_imgui_texture_dx11[421] = 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x12, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, // .....F.......>.. 0x01, 0x00, 0x00, 0x00, 0x00, // ..... }; -static const uint8_t fs_imgui_texture_mtl[754] = +static const uint8_t fs_imgui_texture_mtl[680] = { - 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x00, 0x00, 0xe3, 0x02, 0x00, 0x00, 0x75, 0x73, // FSH...........us + 0x46, 0x53, 0x48, 0x04, 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 { @@ -80,44 +296,41 @@ static const uint8_t fs_imgui_texture_mtl[754] = 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, 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 - 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, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x20, 0x74, // mtl_o;. half4 t - 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, // mpvar_1 = 0;. t - 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x28, // mpvar_1 = 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, 0x32, 0x29, 0x28, 0x5f, // olor, (float2)(_ - 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, // mtl_i.v_texcoord - 0x30, 0x29, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x20, 0x74, 0x6d, // 0)));. half4 tm - 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, // pvar_2 = 0;. tm - 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x68, 0x61, 0x6c, // pvar_2.xyz = hal - 0x66, 0x33, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // f3(_mtl_i.v_colo - 0x72, 0x30, 0x2e, 0x78, 0x79, 0x7a, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // r0.xyz);. tmpva - 0x72, 0x5f, 0x32, 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x28, 0x28, 0x68, 0x61, 0x6c, 0x66, 0x29, 0x28, // r_2.w = ((half)( + 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, // rOutput {. floa + 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x3b, // t4 gl_FragColor; + 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, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, // tlShaderUniform + 0x7b, 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, 0x32, 0x64, 0x3c, 0x66, 0x6c, 0x6f, 0x61, 0x74, // texture2d s_texColor [[t + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x2c, 0x20, 0x73, 0x61, 0x6d, // exture(0)]], sam + 0x70, 0x6c, 0x65, 0x72, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x73, 0x6d, 0x70, 0x5f, 0x73, 0x5f, 0x74, // pler _mtlsmp_s_t + 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x5b, 0x5b, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, // exColor [[sample + 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, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, // _mtl_o;. float4 + 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, // tmpvar_1 = 0;. + 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, // tmpvar_1.xyz = 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x2e, // _mtl_i.v_color0. - 0x77, 0x20, 0x2a, 0x20, 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x29, 0x28, 0x74, 0x6d, 0x70, 0x76, // w * (float)(tmpv - 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x78, 0x29, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, // ar_1.x)));. _mt - 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, // l_o.gl_FragColor - 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x72, // = tmpvar_2;. r - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, // eturn _mtl_o;.}. - 0x0a, 0x00, // .. + 0x78, 0x79, 0x7a, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, // xyz;. tmpvar_1. + 0x77, 0x20, 0x3d, 0x20, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x63, 0x6f, // w = (_mtl_i.v_co + 0x6c, 0x6f, 0x72, 0x30, 0x2e, 0x77, 0x20, 0x2a, 0x20, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, // lor0.w * s_texCo + 0x6c, 0x6f, 0x72, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x73, // lor.sample(_mtls + 0x6d, 0x70, 0x5f, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2c, 0x20, 0x28, // mp_s_texColor, ( + 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x29, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, // float2)(_mtl_i.v + 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x29, 0x29, 0x2e, 0x78, 0x29, 0x3b, // _texcoord0)).x); + 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_ + 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, 0x6c, // 1;. return _mtl + 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // _o;.}... }; +extern const uint8_t* fs_imgui_texture_pssl; +extern const uint32_t fs_imgui_texture_pssl_size; diff --git a/3rdparty/bgfx/examples/common/imgui/fs_imgui_texture.sc b/3rdparty/bgfx/examples/common/imgui/fs_imgui_texture.sc index 8e12fe0..99814a3 100644 --- a/3rdparty/bgfx/examples/common/imgui/fs_imgui_texture.sc +++ b/3rdparty/bgfx/examples/common/imgui/fs_imgui_texture.sc @@ -1,7 +1,7 @@ $input v_texcoord0, v_color0 /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ 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 f44f05a..c1585aa 100644 --- a/3rdparty/bgfx/examples/common/imgui/fs_ocornut_imgui.bin.h +++ b/3rdparty/bgfx/examples/common/imgui/fs_ocornut_imgui.bin.h @@ -16,10 +16,213 @@ 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_dx9[241] = +static const uint8_t fs_ocornut_imgui_spv[3197] = +{ + 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.... +}; +static const uint8_t fs_ocornut_imgui_dx9[229] = { 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, 0xd8, 0x00, 0x00, 0x03, 0xff, 0xff, 0xfe, 0xff, 0x22, 0x00, // 0.............". + 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... @@ -27,13 +230,12 @@ static const uint8_t fs_ocornut_imgui_dx9[241] = 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, 0x36, 0x2e, 0x33, 0x2e, 0x39, 0x36, 0x30, 0x30, 0x2e, 0x31, // piler 6.3.9600.1 - 0x36, 0x33, 0x38, 0x34, 0x00, 0xab, 0xab, 0xab, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, // 6384............ - 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, // ............B... - 0x00, 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, // . + 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, // ..... }; static const uint8_t fs_ocornut_imgui_dx11[396] = { @@ -63,9 +265,9 @@ static const uint8_t fs_ocornut_imgui_dx11[396] = 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, // ....>....... }; -static const uint8_t fs_ocornut_imgui_mtl[640] = +static const uint8_t fs_ocornut_imgui_mtl[570] = { - 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x00, 0x00, 0x71, 0x02, 0x00, 0x00, 0x75, 0x73, // FSH.......q...us + 0x46, 0x53, 0x48, 0x04, 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 { @@ -73,36 +275,34 @@ static const uint8_t fs_ocornut_imgui_mtl[640] = 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, 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 - 0x20, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x20, 0x5b, 0x5b, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, // s_tex [[texture - 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x2c, 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x20, 0x5f, // (0)]], sampler _ - 0x6d, 0x74, 0x6c, 0x73, 0x6d, 0x70, 0x5f, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x20, 0x5b, 0x5b, 0x73, // mtlsmp_s_tex [[s - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x29, 0x0a, 0x7b, 0x0a, 0x20, // ampler(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, 0x68, // tput _mtl_o;. h - 0x61, 0x6c, 0x66, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, // alf4 tmpvar_1 = - 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, // 0;. tmpvar_1 = - 0x68, 0x61, 0x6c, 0x66, 0x34, 0x28, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x2e, 0x73, 0x61, 0x6d, 0x70, // half4(s_tex.samp - 0x6c, 0x65, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x73, 0x6d, 0x70, 0x5f, 0x73, 0x5f, 0x74, 0x65, 0x78, // le(_mtlsmp_s_tex - 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, 0x29, 0x29, // i.v_texcoord0))) - 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, 0x28, 0x28, 0x68, 0x61, 0x6c, 0x66, // agColor = ((half - 0x34, 0x29, 0x28, 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x29, 0x28, 0x74, 0x6d, 0x70, 0x76, // 4)((float4)(tmpv - 0x61, 0x72, 0x5f, 0x31, 0x29, 0x20, 0x2a, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, // ar_1) * _mtl_i.v - 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, // _color0));. ret - 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // urn _mtl_o;.}... + 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, // rOutput {. floa + 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x3b, // t4 gl_FragColor; + 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, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, // tlShaderUniform + 0x7b, 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, 0x32, 0x64, 0x3c, 0x66, 0x6c, 0x6f, 0x61, 0x74, // texture2d s_tex [[textur + 0x65, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x2c, 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x20, // e(0)]], sampler + 0x5f, 0x6d, 0x74, 0x6c, 0x73, 0x6d, 0x70, 0x5f, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x20, 0x5b, 0x5b, // _mtlsmp_s_tex [[ + 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;. + 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, // _mtl_o.gl_FragCo + 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x28, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x2e, 0x73, 0x61, 0x6d, // lor = (s_tex.sam + 0x70, 0x6c, 0x65, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x73, 0x6d, 0x70, 0x5f, 0x73, 0x5f, 0x74, 0x65, // ple(_mtlsmp_s_te + 0x78, 0x2c, 0x20, 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x29, 0x28, 0x5f, 0x6d, 0x74, 0x6c, // x, (float2)(_mtl + 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x29, 0x29, // _i.v_texcoord0)) + 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, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, // r0);. return _m + 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // tl_o;.}... }; +extern const uint8_t* fs_ocornut_imgui_pssl; +extern const uint32_t fs_ocornut_imgui_pssl_size; diff --git a/3rdparty/bgfx/examples/common/imgui/icons_font_awesome.ttf.h b/3rdparty/bgfx/examples/common/imgui/icons_font_awesome.ttf.h index 4312c9b..ee41a7d 100644 --- a/3rdparty/bgfx/examples/common/imgui/icons_font_awesome.ttf.h +++ b/3rdparty/bgfx/examples/common/imgui/icons_font_awesome.ttf.h @@ -1,48 +1,234 @@ -static const uint8_t s_iconsFontAwesomeTtf[80776] = +static const uint8_t s_iconsFontAwesomeTtf[165548] = { - 0x00, 0x01, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x80, 0x00, 0x03, 0x00, 0x60, 0x46, 0x46, 0x54, 0x4d, // ...........`FFTM - 0x66, 0x1f, 0x16, 0xdb, 0x00, 0x00, 0x00, 0xec, 0x00, 0x00, 0x00, 0x1c, 0x47, 0x44, 0x45, 0x46, // f...........GDEF - 0x01, 0xc3, 0x00, 0x04, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x00, 0x20, 0x4f, 0x53, 0x2f, 0x32, // ........... OS/2 - 0x8b, 0x02, 0x7a, 0x13, 0x00, 0x00, 0x01, 0x28, 0x00, 0x00, 0x00, 0x60, 0x63, 0x6d, 0x61, 0x70, // ..z....(...`cmap - 0xd1, 0x6b, 0xbc, 0x03, 0x00, 0x00, 0x01, 0x88, 0x00, 0x00, 0x02, 0x72, 0x67, 0x61, 0x73, 0x70, // .k.........rgasp - 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x03, 0xfc, 0x00, 0x00, 0x00, 0x08, 0x67, 0x6c, 0x79, 0x66, // ............glyf - 0x73, 0x8e, 0xb5, 0x09, 0x00, 0x00, 0x04, 0x04, 0x00, 0x01, 0x19, 0x7c, 0x68, 0x65, 0x61, 0x64, // s..........|head - 0x03, 0xba, 0x2d, 0x36, 0x00, 0x01, 0x1d, 0x80, 0x00, 0x00, 0x00, 0x36, 0x68, 0x68, 0x65, 0x61, // ..-6.......6hhea - 0x0d, 0x82, 0x07, 0xea, 0x00, 0x01, 0x1d, 0xb8, 0x00, 0x00, 0x00, 0x24, 0x68, 0x6d, 0x74, 0x78, // ...........$hmtx - 0x0a, 0x6c, 0x0e, 0x07, 0x00, 0x01, 0x1d, 0xdc, 0x00, 0x00, 0x06, 0x46, 0x6c, 0x6f, 0x63, 0x61, // .l.........Floca - 0xd1, 0x74, 0x8a, 0x74, 0x00, 0x01, 0x24, 0x24, 0x00, 0x00, 0x03, 0x2e, 0x6d, 0x61, 0x78, 0x70, // .t.t..$$....maxp - 0x01, 0xec, 0x02, 0x1c, 0x00, 0x01, 0x27, 0x54, 0x00, 0x00, 0x00, 0x20, 0x6e, 0x61, 0x6d, 0x65, // ......'T... name - 0x3c, 0x0c, 0x65, 0x95, 0x00, 0x01, 0x27, 0x74, 0x00, 0x00, 0x02, 0xb8, 0x70, 0x6f, 0x73, 0x74, // <.e...'t....post - 0x09, 0x72, 0x9d, 0xdd, 0x00, 0x01, 0x2a, 0x2c, 0x00, 0x00, 0x11, 0x54, 0x77, 0x65, 0x62, 0x66, // .r....*,...Twebf - 0x41, 0x5c, 0x52, 0x67, 0x00, 0x01, 0x3b, 0x80, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, // A.Rg..;......... - 0x00, 0x00, 0x00, 0x00, 0xcc, 0x3d, 0xa2, 0xcf, 0x00, 0x00, 0x00, 0x00, 0xcb, 0x54, 0x82, 0x30, // .....=.......T.0 - 0x00, 0x00, 0x00, 0x00, 0xce, 0x8c, 0xf1, 0xdb, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, // ................ - 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x01, 0x95, 0x00, 0x01, // ................ - 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x05, 0xe2, 0x01, 0x90, 0x00, 0x05, // ................ - 0x00, 0x04, 0x04, 0x8c, 0x04, 0x33, 0x00, 0x00, 0x00, 0x86, 0x04, 0x8c, 0x04, 0x33, 0x00, 0x00, // .....3.......3.. - 0x02, 0x73, 0x00, 0x5a, 0x04, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .s.Z.3.......... + 0x00, 0x01, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x80, 0x00, 0x03, 0x00, 0x50, 0x46, 0x46, 0x54, 0x4d, // ...........PFFTM + 0x6b, 0xbe, 0x47, 0xb9, 0x00, 0x02, 0x86, 0x90, 0x00, 0x00, 0x00, 0x1c, 0x47, 0x44, 0x45, 0x46, // k.G.........GDEF + 0x02, 0xf0, 0x00, 0x04, 0x00, 0x02, 0x86, 0x70, 0x00, 0x00, 0x00, 0x20, 0x4f, 0x53, 0x2f, 0x32, // .......p... OS/2 + 0x88, 0x32, 0x7a, 0x40, 0x00, 0x00, 0x01, 0x58, 0x00, 0x00, 0x00, 0x60, 0x63, 0x6d, 0x61, 0x70, // .2z@...X...`cmap + 0x0a, 0xbf, 0x3a, 0x7f, 0x00, 0x00, 0x0c, 0xa8, 0x00, 0x00, 0x02, 0xf2, 0x67, 0x61, 0x73, 0x70, // ..:.........gasp + 0xff, 0xff, 0x00, 0x03, 0x00, 0x02, 0x86, 0x68, 0x00, 0x00, 0x00, 0x08, 0x67, 0x6c, 0x79, 0x66, // .......h....glyf + 0x8f, 0xf7, 0xae, 0x4d, 0x00, 0x00, 0x1a, 0xac, 0x00, 0x02, 0x4c, 0xbc, 0x68, 0x65, 0x61, 0x64, // ...M......L.head + 0x10, 0x89, 0xe5, 0x2d, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, 0x36, 0x68, 0x68, 0x65, 0x61, // ...-.......6hhea + 0x0f, 0x03, 0x0a, 0xb5, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x24, 0x68, 0x6d, 0x74, 0x78, // ...........$hmtx + 0x45, 0x79, 0x18, 0x85, 0x00, 0x00, 0x01, 0xb8, 0x00, 0x00, 0x0a, 0xf0, 0x6c, 0x6f, 0x63, 0x61, // Ey..........loca + 0x02, 0xf5, 0xa2, 0x5c, 0x00, 0x00, 0x0f, 0x9c, 0x00, 0x00, 0x0b, 0x10, 0x6d, 0x61, 0x78, 0x70, // ............maxp + 0x03, 0x2c, 0x02, 0x1c, 0x00, 0x00, 0x01, 0x38, 0x00, 0x00, 0x00, 0x20, 0x6e, 0x61, 0x6d, 0x65, // .,.....8... name + 0xe3, 0x97, 0x8b, 0xac, 0x00, 0x02, 0x67, 0x68, 0x00, 0x00, 0x04, 0x86, 0x70, 0x6f, 0x73, 0x74, // ......gh....post + 0xaf, 0x8f, 0x9b, 0xa1, 0x00, 0x02, 0x6b, 0xf0, 0x00, 0x00, 0x1a, 0x75, 0x00, 0x01, 0x00, 0x00, // ......k....u.... + 0x00, 0x04, 0x01, 0xcb, 0x90, 0xcf, 0x78, 0x59, 0x5f, 0x0f, 0x3c, 0xf5, 0x00, 0x0b, 0x07, 0x00, // ......xY_.<..... + 0x00, 0x00, 0x00, 0x00, 0xd4, 0x33, 0xcd, 0x32, 0x00, 0x00, 0x00, 0x00, 0xd4, 0x33, 0xcd, 0x32, // .....3.2.....3.2 + 0xff, 0xff, 0xff, 0x00, 0x09, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x02, 0x00, 0x01, // ................ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x06, 0x00, 0xff, 0x00, 0x00, 0x00, 0x09, 0x00, // ................ + 0xff, 0xff, 0xff, 0xff, 0x09, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xb5, 0x00, 0x01, 0x00, 0x00, 0x02, 0xc3, 0x02, 0x19, // ................ + 0x00, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, // .'.............. + 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x06, 0x69, 0x01, 0x90, 0x00, 0x05, // .@.........i.... + 0x00, 0x00, 0x04, 0x8c, 0x04, 0x33, 0x00, 0x00, 0x00, 0x86, 0x04, 0x8c, 0x04, 0x33, 0x00, 0x00, // .....3.......3.. + 0x02, 0x73, 0x00, 0x00, 0x01, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .s.............. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ 0x00, 0x00, 0x70, 0x79, 0x72, 0x73, 0x00, 0x40, 0x00, 0x20, 0xf5, 0x00, 0x06, 0x00, 0xff, 0x00, // ..pyrs.@. ...... - 0x00, 0x00, 0x06, 0x00, 0x01, 0x23, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .....#.......... - 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, // ..... .......... - 0x00, 0x00, 0x00, 0x1c, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x6c, 0x00, 0x03, 0x00, 0x01, // ...........l.... - 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x01, 0x50, 0x00, 0x00, 0x00, 0x50, 0x00, 0x40, 0x00, 0x05, // .......P...P.@.. - 0x00, 0x10, 0x00, 0x20, 0x00, 0xa0, 0x00, 0xa9, 0x00, 0xae, 0x00, 0xb4, 0x00, 0xc6, 0x20, 0x0a, // ... .......... . - 0x20, 0x2f, 0x20, 0x5f, 0x21, 0x22, 0x22, 0x1e, 0x22, 0x60, 0xe0, 0x00, 0xf0, 0x0e, 0xf0, 0x1e, // / _!""."`...... - 0xf0, 0x3e, 0xf0, 0x4e, 0xf0, 0x5e, 0xf0, 0x6e, 0xf0, 0x7e, 0xf0, 0x8e, 0xf0, 0x9e, 0xf0, 0xae, // .>.N.^.n.~...... - 0xf0, 0xb2, 0xf0, 0xce, 0xf0, 0xde, 0xf0, 0xee, 0xf0, 0xfe, 0xf1, 0x0e, 0xf1, 0x1e, 0xf1, 0x2e, // ................ - 0xf1, 0x3e, 0xf1, 0x4e, 0xf1, 0x5e, 0xf1, 0x6e, 0xf1, 0x7e, 0xf1, 0x8e, 0xf1, 0x9e, 0xf5, 0x00, // .>.N.^.n.~...... - 0xff, 0xff, 0x00, 0x00, 0x00, 0x20, 0x00, 0xa0, 0x00, 0xa8, 0x00, 0xae, 0x00, 0xb4, 0x00, 0xc6, // ..... .......... - 0x20, 0x00, 0x20, 0x2f, 0x20, 0x5f, 0x21, 0x22, 0x22, 0x1e, 0x22, 0x60, 0xe0, 0x00, 0xf0, 0x00, // . / _!""."`.... - 0xf0, 0x10, 0xf0, 0x21, 0xf0, 0x40, 0xf0, 0x50, 0xf0, 0x60, 0xf0, 0x70, 0xf0, 0x80, 0xf0, 0x90, // ...!.@.P.`.p.... - 0xf0, 0xa0, 0xf0, 0xb0, 0xf0, 0xc0, 0xf0, 0xd0, 0xf0, 0xe0, 0xf0, 0xf0, 0xf1, 0x00, 0xf1, 0x10, // ................ - 0xf1, 0x20, 0xf1, 0x30, 0xf1, 0x40, 0xf1, 0x50, 0xf1, 0x60, 0xf1, 0x70, 0xf1, 0x80, 0xf1, 0x90, // . .0.@.P.`.p.... - 0xf5, 0x00, 0xff, 0xff, 0xff, 0xe3, 0xff, 0x64, 0xff, 0x5d, 0xff, 0x59, 0xff, 0x54, 0xff, 0x43, // .......d.].Y.T.C - 0xe0, 0x0a, 0xdf, 0xe6, 0xdf, 0xb7, 0xde, 0xf5, 0xdd, 0xfa, 0xdd, 0xb9, 0x20, 0x1a, 0x10, 0x1b, // ............ ... - 0x10, 0x1a, 0x10, 0x18, 0x10, 0x17, 0x10, 0x16, 0x10, 0x15, 0x10, 0x14, 0x10, 0x13, 0x10, 0x12, // ................ - 0x10, 0x11, 0x10, 0x10, 0x10, 0x03, 0x10, 0x02, 0x10, 0x01, 0x10, 0x00, 0x0f, 0xff, 0x0f, 0xfe, // ................ - 0x0f, 0xfd, 0x0f, 0xfc, 0x0f, 0xfb, 0x0f, 0xfa, 0x0f, 0xf9, 0x0f, 0xf8, 0x0f, 0xf7, 0x0f, 0xf6, // ................ - 0x0c, 0x95, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x01, 0x03, 0x80, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, // ..... .....p.... + 0x02, 0x55, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // .U.............. + 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ................ + 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x5d, // ...............] + 0x06, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ................ + 0x06, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, // ................ + 0x06, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x79, // ...............y + 0x05, 0x80, 0x00, 0x6e, 0x06, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ...n............ + 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x1a, // ................ + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x32, 0x06, 0x80, 0x00, 0x00, // ...........2.... + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, // ................ + 0x07, 0x00, 0x00, 0x40, 0x06, 0x80, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, // ...@............ + 0x06, 0x80, 0x00, 0x00, 0x05, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ + 0x07, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x0a, 0x05, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, // ................ + 0x07, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x05, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // ................ + 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ................ + 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ................ + 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ + 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ................ + 0x06, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // ................ + 0x07, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x7a, 0x05, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // .......z........ + 0x06, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // ................ + 0x06, 0x02, 0x00, 0x01, 0x05, 0x00, 0x00, 0x9a, 0x05, 0x00, 0x00, 0x5a, 0x06, 0x00, 0x00, 0x00, // ...........Z.... + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x40, 0x06, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x35, // .......@.......5 + 0x06, 0x80, 0x00, 0x35, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0d, // ...5............ + 0x05, 0x80, 0x00, 0x00, 0x05, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x7a, 0x06, 0x00, 0x00, 0x00, // ...........z.... + 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ................ + 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x10, 0x05, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, // ................ + 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x5a, // ...............Z + 0x07, 0x00, 0x00, 0x5a, 0x07, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, // ...Z............ + 0x07, 0x80, 0x00, 0x00, 0x03, 0x00, 0x00, 0x40, 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // .......@........ + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ................ + 0x07, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ + 0x03, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ + 0x04, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, // ................ + 0x06, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x80, 0x00, 0x00, // ................ + 0x05, 0x80, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x2c, // ..............., + 0x04, 0x00, 0x00, 0x5f, 0x06, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, // ..._............ + 0x05, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x40, // ...............@ + 0x06, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x15, 0x07, 0x00, 0x00, 0x00, // ................ + 0x05, 0x80, 0x00, 0x05, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, // ................ + 0x06, 0x80, 0x00, 0x10, 0x07, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x73, 0x07, 0x00, 0x00, 0x01, // ...........s.... + 0x07, 0x00, 0x00, 0x00, 0x05, 0x80, 0x00, 0x04, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ + 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x0f, 0x07, 0x00, 0x00, 0x00, // ................ + 0x06, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x1b, 0x07, 0x00, 0x00, 0x40, // ...............@ + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, // ................ + 0x07, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x80, 0x00, 0x40, // ...............@ + 0x02, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // ................ + 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ + 0x07, 0x00, 0x00, 0x28, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ...(............ + 0x03, 0x80, 0x00, 0x01, 0x07, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ................ + 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, // ................ + 0x05, 0x80, 0x00, 0x00, 0x05, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x40, // ...............@ + 0x07, 0x80, 0x00, 0x00, 0x05, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x80, 0x00, 0x00, // ................ + 0x05, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x40, 0x07, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, // .......@........ + 0x06, 0x80, 0x00, 0x40, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x2d, // ...@...........- + 0x04, 0x00, 0x00, 0x0d, 0x04, 0x80, 0x00, 0x4d, 0x04, 0x80, 0x00, 0x4d, 0x02, 0x80, 0x00, 0x2d, // .......M...M...- + 0x02, 0x80, 0x00, 0x0d, 0x04, 0x80, 0x00, 0x4d, 0x04, 0x80, 0x00, 0x4d, 0x07, 0x80, 0x00, 0x00, // .......M...M.... + 0x07, 0x80, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ + 0x06, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x40, 0x06, 0x00, 0x00, 0x00, // ...........@.... + 0x07, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, // ................ + 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ + 0x06, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x40, // ...............@ + 0x07, 0x00, 0x00, 0x40, 0x06, 0x80, 0x00, 0x0d, 0x07, 0x80, 0x00, 0x2d, 0x07, 0x00, 0x00, 0x00, // ...@.......-.... + 0x06, 0x80, 0x00, 0x02, 0x05, 0x80, 0x00, 0x02, 0x06, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // ................ + 0x06, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x60, 0x02, 0x80, 0x00, 0x00, 0x02, 0x80, 0x00, 0x62, // .......`.......b + 0x06, 0x00, 0x00, 0x05, 0x06, 0x00, 0x00, 0x05, 0x07, 0x80, 0x00, 0x01, 0x06, 0x80, 0x00, 0x00, // ................ + 0x04, 0x80, 0x00, 0x00, 0x05, 0x80, 0x00, 0x0d, 0x05, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, // ................ + 0x05, 0x80, 0x00, 0x03, 0x06, 0x80, 0x00, 0x24, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // .......$........ + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x80, 0x00, 0x00, // ................ + 0x07, 0x00, 0x00, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ + 0x05, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ + 0x07, 0x00, 0x00, 0x36, 0x06, 0x00, 0x00, 0x00, 0x05, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, // ...6............ + 0x04, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ + 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x34, // ...............4 + 0x03, 0x82, 0x00, 0x00, 0x04, 0x03, 0x00, 0x04, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ................ + 0x05, 0x00, 0x00, 0x38, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x22, // ...8..........." + 0x06, 0x80, 0x00, 0x22, 0x07, 0x00, 0x00, 0x22, 0x07, 0x00, 0x00, 0x22, 0x06, 0x00, 0x00, 0x22, // ..."..."..."..." + 0x06, 0x00, 0x00, 0x22, 0x06, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ..."............ + 0x06, 0x00, 0x00, 0x1b, 0x05, 0x80, 0x00, 0x05, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ................ + 0x07, 0x00, 0x00, 0x40, 0x06, 0x00, 0x00, 0x0b, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ...@............ + 0x06, 0x00, 0x00, 0x00, 0x05, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x44, // ...............D + 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x07, 0x00, 0x00, 0x40, // ...............@ + 0x07, 0x00, 0x00, 0x00, 0x05, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x05, 0x80, 0x00, 0x00, // ................ + 0x06, 0x00, 0x00, 0x0b, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x2c, // ..............., + 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ + 0x07, 0x00, 0x00, 0x2c, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x40, 0x06, 0x80, 0x00, 0x20, // ...,.......@... + 0x07, 0x80, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x80, 0x00, 0x00, // ................ + 0x05, 0x00, 0x00, 0x15, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ + 0x06, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, // ................ + 0x05, 0x80, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ + 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, // ................ + 0x06, 0x00, 0x00, 0x6d, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ...m............ + 0x06, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ................ + 0x06, 0x00, 0x00, 0x00, 0x07, 0xf6, 0x00, 0x29, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // .......)........ + 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x40, // ...............@ + 0x06, 0x80, 0x00, 0x00, 0x03, 0x00, 0x00, 0x40, 0x07, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, // .......@........ + 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ + 0x07, 0x00, 0x00, 0x10, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x20, // ............... + 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x27, 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // .......'........ + 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x20, 0x07, 0x00, 0x00, 0x13, 0x07, 0x00, 0x00, 0x00, // ....... ........ + 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x44, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x39, // .......D.......9 + 0x07, 0x00, 0x00, 0x12, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ................ + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x3e, 0x05, 0x00, 0x00, 0x18, // ...........>.... + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ................ + 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ................ + 0x07, 0x00, 0x00, 0x19, 0x07, 0x00, 0x00, 0x64, 0x06, 0x00, 0x00, 0x59, 0x08, 0x00, 0x00, 0x00, // .......d...Y.... + 0x08, 0x00, 0x00, 0x2a, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x09, 0x07, 0x00, 0x00, 0x27, // ...*...........' + 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, // ................ + 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0e, 0x08, 0x00, 0x00, 0x0e, // ................ + 0x05, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ................ + 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ................ + 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ................ + 0x08, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ................ + 0x05, 0x00, 0x00, 0x0b, 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ + 0x06, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ + 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ................ + 0x08, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ................ + 0x08, 0x00, 0x00, 0x13, 0x06, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ + 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, // ................ + 0x06, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x02, 0x07, 0x80, 0x00, 0x01, // ................ + 0x08, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x04, // ................ + 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ................ + 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ................ + 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ + 0x08, 0xf8, 0x00, 0x54, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, // ...T............ + 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, // ................ + 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, // ................ + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, // ................ + 0x07, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ + 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ................ + 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0xb5, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ................ + 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x40, 0x07, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, // .......@........ + 0x05, 0x00, 0x00, 0x66, 0x06, 0x00, 0x00, 0x00, 0x06, 0xb8, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, // ...f............ + 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x00, // ................ + 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x16, 0x06, 0x00, 0x00, 0x0e, // ................ + 0x07, 0x00, 0x00, 0x1d, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ................ + 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x25, // ...............% + 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ................ + 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x52, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // .......R........ + 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x45, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // .......E........ + 0x07, 0x00, 0x00, 0x20, 0x07, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ... ............ + 0x09, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x24, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // .......$........ + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ................ + 0x07, 0x00, 0x00, 0x21, 0x06, 0x00, 0x00, 0x6b, 0x04, 0x00, 0x00, 0x28, 0x06, 0x00, 0x00, 0x00, // ...!...k...(.... + 0x07, 0x00, 0x00, 0x03, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ................ + 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x44, 0x06, 0x00, 0x00, 0x00, 0x05, 0x80, 0x00, 0x27, // .......D.......' + 0x09, 0x00, 0x00, 0x03, 0x05, 0x80, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ................ + 0x09, 0x00, 0x00, 0x03, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0xff, 0x00, 0x25, // ...............% + 0x06, 0x80, 0x00, 0x01, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ + 0x06, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x0f, 0x06, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, // ................ + 0x06, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ + 0x06, 0x00, 0x00, 0x25, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ...%............ + 0x06, 0x00, 0x00, 0x15, 0x06, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ................ + 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ + 0x05, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x1d, // ................ + 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // ................ + 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, // ................ + 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ................ + 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ................ + 0x07, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x08, 0x80, 0x00, 0x30, // ...............0 + 0x07, 0x00, 0x00, 0x25, 0x06, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x2f, 0x07, 0x00, 0x00, 0x00, // ...%......./.... + 0x07, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x26, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .......&........ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, // ................ + 0x00, 0x00, 0x00, 0x1c, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0xec, 0x00, 0x03, 0x00, 0x01, // ................ + 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x01, 0xd0, 0x00, 0x00, 0x00, 0x70, 0x00, 0x40, 0x00, 0x05, // ...........p.@.. + 0x00, 0x30, 0x00, 0x20, 0x00, 0xa9, 0x00, 0xae, 0x00, 0xb4, 0x00, 0xc6, 0x00, 0xd8, 0x21, 0x22, // .0. ..........!" + 0x22, 0x1e, 0x22, 0x60, 0xf0, 0x0e, 0xf0, 0x1e, 0xf0, 0x3e, 0xf0, 0x4e, 0xf0, 0x5e, 0xf0, 0x6e, // "."`.....>.N.^.n + 0xf0, 0x7e, 0xf0, 0x8e, 0xf0, 0x9e, 0xf0, 0xae, 0xf0, 0xb2, 0xf0, 0xce, 0xf0, 0xde, 0xf0, 0xee, // .~.............. + 0xf0, 0xfe, 0xf1, 0x0e, 0xf1, 0x1e, 0xf1, 0x2e, 0xf1, 0x3e, 0xf1, 0x4e, 0xf1, 0x5e, 0xf1, 0x6e, // .........>.N.^.n + 0xf1, 0x7e, 0xf1, 0x8e, 0xf1, 0x9e, 0xf1, 0xae, 0xf1, 0xbe, 0xf1, 0xce, 0xf1, 0xde, 0xf1, 0xee, // .~.............. + 0xf1, 0xfe, 0xf2, 0x0e, 0xf2, 0x1e, 0xf2, 0x3e, 0xf2, 0x4e, 0xf2, 0x5e, 0xf2, 0x6e, 0xf2, 0x7e, // .......>.N.^.n.~ + 0xf2, 0x8e, 0xf2, 0x9e, 0xf2, 0xae, 0xf2, 0xbe, 0xf2, 0xce, 0xf2, 0xde, 0xf2, 0xee, 0xf5, 0x00, // ................ + 0xff, 0xff, 0x00, 0x00, 0x00, 0x20, 0x00, 0xa8, 0x00, 0xae, 0x00, 0xb4, 0x00, 0xc6, 0x00, 0xd8, // ..... .......... + 0x21, 0x22, 0x22, 0x1e, 0x22, 0x60, 0xf0, 0x00, 0xf0, 0x10, 0xf0, 0x21, 0xf0, 0x40, 0xf0, 0x50, // !""."`.....!.@.P + 0xf0, 0x60, 0xf0, 0x70, 0xf0, 0x80, 0xf0, 0x90, 0xf0, 0xa0, 0xf0, 0xb0, 0xf0, 0xc0, 0xf0, 0xd0, // .`.p............ + 0xf0, 0xe0, 0xf0, 0xf0, 0xf1, 0x00, 0xf1, 0x10, 0xf1, 0x20, 0xf1, 0x30, 0xf1, 0x40, 0xf1, 0x50, // ......... .0.@.P + 0xf1, 0x60, 0xf1, 0x70, 0xf1, 0x80, 0xf1, 0x90, 0xf1, 0xa0, 0xf1, 0xb0, 0xf1, 0xc0, 0xf1, 0xd0, // .`.p............ + 0xf1, 0xe0, 0xf1, 0xf0, 0xf2, 0x00, 0xf2, 0x10, 0xf2, 0x21, 0xf2, 0x40, 0xf2, 0x50, 0xf2, 0x60, // .........!.@.P.` + 0xf2, 0x70, 0xf2, 0x80, 0xf2, 0x90, 0xf2, 0xa0, 0xf2, 0xb0, 0xf2, 0xc0, 0xf2, 0xd0, 0xf2, 0xe0, // .p.............. + 0xf5, 0x00, 0xff, 0xff, 0xff, 0xe3, 0xff, 0x5c, 0xff, 0x58, 0xff, 0x53, 0xff, 0x42, 0xff, 0x31, // .........X.S.B.1 + 0xde, 0xe8, 0xdd, 0xed, 0xdd, 0xac, 0x10, 0x0d, 0x10, 0x0c, 0x10, 0x0a, 0x10, 0x09, 0x10, 0x08, // ................ + 0x10, 0x07, 0x10, 0x06, 0x10, 0x05, 0x10, 0x04, 0x10, 0x03, 0x10, 0x02, 0x0f, 0xf5, 0x0f, 0xf4, // ................ + 0x0f, 0xf3, 0x0f, 0xf2, 0x0f, 0xf1, 0x0f, 0xf0, 0x0f, 0xef, 0x0f, 0xee, 0x0f, 0xed, 0x0f, 0xec, // ................ + 0x0f, 0xeb, 0x0f, 0xea, 0x0f, 0xe9, 0x0f, 0xe8, 0x0f, 0xe7, 0x0f, 0xe6, 0x0f, 0xe5, 0x0f, 0xe4, // ................ + 0x0f, 0xe3, 0x0f, 0xe2, 0x0f, 0xe1, 0x0f, 0xe0, 0x0f, 0xde, 0x0f, 0xdd, 0x0f, 0xdc, 0x0f, 0xdb, // ................ + 0x0f, 0xda, 0x0f, 0xd9, 0x0f, 0xd8, 0x0f, 0xd7, 0x0f, 0xd6, 0x0f, 0xd5, 0x0f, 0xd4, 0x0f, 0xd3, // ................ + 0x0d, 0xc2, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ @@ -58,1487 +244,1649 @@ static const uint8_t s_iconsFontAwesomeTtf[80776] = 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ - 0x00, 0x00, 0x07, 0x06, 0x17, 0x08, 0x05, 0x19, 0x09, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ - 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x00, 0x06, 0x05, 0x0a, 0x07, 0x04, 0x0c, 0x08, 0x09, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, // ................ - 0xff, 0xff, 0x00, 0x0f, 0x00, 0x02, 0x00, 0x70, 0x00, 0x00, 0x03, 0x10, 0x06, 0x00, 0x00, 0x03, // .......p........ - 0x00, 0x07, 0x00, 0x00, 0x37, 0x21, 0x11, 0x21, 0x03, 0x11, 0x21, 0x11, 0xe0, 0x01, 0xc0, 0xfe, // ....7!.!..!..... - 0x40, 0x70, 0x02, 0xa0, 0x70, 0x05, 0x20, 0xfa, 0x70, 0x06, 0x00, 0xfa, 0x00, 0x00, 0x00, 0x00, // @p..p. .p....... - 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, // ..............1. - 0x00, 0x01, 0x00, 0x5d, 0xff, 0x00, 0x06, 0xa3, 0x05, 0x80, 0x00, 0x1d, 0x00, 0x00, 0x01, 0x14, // ...]............ - 0x07, 0x01, 0x11, 0x21, 0x32, 0x16, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x34, 0x36, 0x33, 0x21, // ...!2...#!"&463! - 0x11, 0x01, 0x26, 0x35, 0x34, 0x3e, 0x01, 0x33, 0x21, 0x32, 0x1e, 0x01, 0x06, 0xa3, 0x2b, 0xfd, // ..&54>.3!2....+. - 0x88, 0x01, 0x40, 0x1a, 0x26, 0x26, 0x1a, 0xfc, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0x40, 0xfd, // ..@.&&....&&..@. - 0x88, 0x2b, 0x24, 0x28, 0x17, 0x05, 0x80, 0x17, 0x28, 0x24, 0x05, 0x46, 0x23, 0x2b, 0xfd, 0x88, // .+$(....($.F#+.. - 0xfd, 0x00, 0x26, 0x34, 0x26, 0x26, 0x34, 0x26, 0x03, 0x00, 0x02, 0x78, 0x2b, 0x23, 0x17, 0x1b, // ..&4&&4&...x+#.. - 0x08, 0x08, 0x1b, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0x00, 0x06, 0x00, 0x05, 0x80, 0x00, 0x2b, // ...............+ - 0x00, 0x00, 0x01, 0x11, 0x14, 0x0e, 0x02, 0x22, 0x2e, 0x02, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x17, // ......."..4>.32. - 0x11, 0x05, 0x11, 0x14, 0x0e, 0x02, 0x22, 0x2e, 0x02, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x17, 0x11, // ......"..4>.32.. - 0x34, 0x36, 0x37, 0x01, 0x36, 0x33, 0x32, 0x16, 0x06, 0x00, 0x44, 0x68, 0x67, 0x5a, 0x67, 0x68, // 467.632...DhgZgh - 0x44, 0x44, 0x68, 0x67, 0x2d, 0x69, 0x57, 0xfd, 0x00, 0x44, 0x68, 0x67, 0x5a, 0x67, 0x68, 0x44, // DDhg-iW..DhgZghD - 0x44, 0x68, 0x67, 0x2d, 0x69, 0x57, 0x26, 0x1e, 0x03, 0x40, 0x0c, 0x10, 0x28, 0x38, 0x05, 0x20, // Dhg-iW&..@..(8. - 0xfb, 0xa0, 0x32, 0x4e, 0x2b, 0x15, 0x15, 0x2b, 0x4e, 0x64, 0x4e, 0x2b, 0x15, 0x27, 0x02, 0x19, // ..2N+..+NdN+.'.. - 0xed, 0xfd, 0x3b, 0x32, 0x4e, 0x2b, 0x15, 0x15, 0x2b, 0x4e, 0x64, 0x4e, 0x2b, 0x15, 0x27, 0x03, // ..;2N+..+NdN+.'. - 0xc7, 0x1f, 0x33, 0x0a, 0x01, 0x00, 0x04, 0x38, 0x00, 0x02, 0x00, 0x00, 0xff, 0x00, 0x06, 0x80, // ..3....8........ - 0x05, 0x80, 0x00, 0x07, 0x00, 0x21, 0x00, 0x00, 0x00, 0x10, 0x00, 0x20, 0x00, 0x10, 0x00, 0x20, // .....!..... ... - 0x01, 0x14, 0x06, 0x23, 0x22, 0x27, 0x01, 0x06, 0x23, 0x22, 0x24, 0x26, 0x02, 0x10, 0x12, 0x36, // ...#"'..#"$&...6 - 0x24, 0x20, 0x04, 0x16, 0x12, 0x15, 0x14, 0x07, 0x01, 0x16, 0x04, 0x80, 0xfe, 0xf9, 0xfe, 0x8e, // $ .............. - 0xfe, 0xf9, 0x01, 0x07, 0x01, 0x72, 0x03, 0x07, 0x4c, 0x34, 0x36, 0x24, 0xfe, 0xa9, 0xb3, 0xdc, // .....r..L46$.... - 0x8f, 0xfe, 0xfb, 0xbd, 0x6f, 0x6f, 0xbd, 0x01, 0x05, 0x01, 0x1e, 0x01, 0x05, 0xbd, 0x6f, 0x7c, // ....oo........o| - 0x01, 0x57, 0x25, 0x02, 0x07, 0x01, 0x72, 0x01, 0x07, 0xfe, 0xf9, 0xfe, 0x8e, 0xfe, 0xf9, 0xfe, // .W%...r......... - 0x80, 0x34, 0x4c, 0x26, 0x01, 0x56, 0x7c, 0x6f, 0xbd, 0x01, 0x05, 0x01, 0x1e, 0x01, 0x05, 0xbd, // .4L&.V|o........ - 0x6f, 0x6f, 0xbd, 0xfe, 0xfb, 0x8f, 0xdc, 0xb3, 0xfe, 0xa9, 0x25, 0x00, 0x00, 0x03, 0x00, 0x00, // oo........%..... - 0xff, 0x80, 0x07, 0x00, 0x05, 0x00, 0x00, 0x1a, 0x00, 0x3d, 0x00, 0x4d, 0x00, 0x00, 0x25, 0x11, // .........=.M..%. - 0x06, 0x07, 0x04, 0x07, 0x0e, 0x02, 0x2b, 0x02, 0x22, 0x2e, 0x01, 0x27, 0x26, 0x25, 0x26, 0x27, // ......+."..'&%&' - 0x11, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x11, 0x3c, 0x02, 0x2e, 0x03, 0x23, 0x21, 0x22, 0x06, // ...3!26.<...#!". - 0x15, 0x14, 0x17, 0x16, 0x17, 0x1e, 0x04, 0x3b, 0x02, 0x32, 0x3e, 0x03, 0x37, 0x36, 0x37, 0x3e, // .......;.2>.767> - 0x01, 0x37, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, // .7...#!"&5.463!2 - 0x16, 0x06, 0x80, 0x20, 0x25, 0xfe, 0xf4, 0x9e, 0x33, 0x40, 0x6d, 0x30, 0x01, 0x01, 0x30, 0x6d, // ... %...3@m0..0m - 0x40, 0x33, 0x9e, 0xfe, 0xf4, 0x25, 0x20, 0x13, 0x0d, 0x05, 0xc0, 0x0d, 0x13, 0x01, 0x05, 0x06, // @3...% ......... - 0x0c, 0x08, 0xfa, 0x40, 0x0d, 0x13, 0x93, 0xc1, 0xd0, 0x06, 0x3a, 0x22, 0x37, 0x2e, 0x14, 0x01, // ...@......:"7... - 0x01, 0x14, 0x2e, 0x37, 0x22, 0x3a, 0x06, 0xd0, 0xc1, 0x36, 0x5d, 0x80, 0x5e, 0x42, 0xfa, 0x40, // ...7":...6].^B.@ - 0x42, 0x5e, 0x5e, 0x42, 0x05, 0xc0, 0x42, 0x5e, 0x20, 0x03, 0x00, 0x24, 0x1e, 0xce, 0x84, 0x2b, // B^^B..B^ ..$...+ - 0x30, 0x31, 0x31, 0x30, 0x2b, 0x84, 0xce, 0x1e, 0x24, 0xfd, 0x00, 0x0d, 0x13, 0x13, 0x04, 0x28, // 0110+...$......( - 0x02, 0x12, 0x09, 0x11, 0x08, 0x0a, 0x05, 0x13, 0x0d, 0xa8, 0x74, 0x98, 0xa5, 0x05, 0x31, 0x1a, // ..........t...1. - 0x25, 0x12, 0x12, 0x25, 0x1a, 0x31, 0x05, 0xa5, 0x98, 0x2b, 0x91, 0x60, 0xfb, 0xc0, 0x42, 0x5e, // %..%.1...+.`..B^ - 0x5e, 0x42, 0x04, 0x40, 0x42, 0x5e, 0x5e, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0x80, 0x07, 0x00, // ^B.@B^^......... - 0x05, 0x80, 0x00, 0x1c, 0x00, 0x00, 0x04, 0x22, 0x27, 0x01, 0x2e, 0x04, 0x35, 0x34, 0x36, 0x33, // ......."'...5463 - 0x32, 0x1e, 0x02, 0x17, 0x3e, 0x03, 0x33, 0x32, 0x16, 0x15, 0x14, 0x07, 0x01, 0x03, 0x9a, 0x34, // 2...>.32.......4 - 0x12, 0xfd, 0x90, 0x0a, 0x23, 0x4c, 0x3c, 0x2f, 0xfe, 0xe0, 0x3e, 0x81, 0x6f, 0x50, 0x24, 0x24, // ....#L.oP$$ - 0x50, 0x6f, 0x81, 0x3e, 0xe0, 0xfe, 0xe5, 0xfd, 0x91, 0x80, 0x12, 0x02, 0x5a, 0x08, 0x24, 0x5f, // Po.>........Z.$_ - 0x64, 0x8e, 0x43, 0xdc, 0xf8, 0x2b, 0x49, 0x40, 0x24, 0x24, 0x40, 0x49, 0x2b, 0xf8, 0xdc, 0xdd, // d.C..+I@$$@I+... - 0xe5, 0xfd, 0xa8, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0xad, 0x06, 0x80, 0x05, 0xe0, 0x00, 0x22, // ..............." - 0x00, 0x00, 0x01, 0x14, 0x07, 0x01, 0x13, 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x27, 0x25, 0x05, // ...........#"'%. - 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x37, 0x13, 0x01, 0x26, 0x35, 0x34, 0x37, 0x25, 0x13, 0x36, // .#"&547..&547%.6 - 0x32, 0x17, 0x13, 0x05, 0x16, 0x06, 0x80, 0x1a, 0xfe, 0x95, 0x56, 0x01, 0x15, 0x14, 0x13, 0x15, // 2.........V..... - 0xfe, 0x3f, 0xfe, 0x3f, 0x16, 0x12, 0x15, 0x15, 0x02, 0x56, 0xfe, 0x94, 0x19, 0x38, 0x01, 0xf6, // .?.?.....V...8.. - 0xe1, 0x13, 0x3c, 0x13, 0xe1, 0x01, 0xf6, 0x38, 0x03, 0x79, 0x16, 0x1a, 0xfe, 0x9e, 0xfe, 0x0c, // ..<....8.y...... - 0x07, 0x0d, 0x15, 0x1d, 0x0c, 0xec, 0xec, 0x0c, 0x1d, 0x15, 0x06, 0x0e, 0x01, 0xf4, 0x01, 0x62, // ...............b - 0x1b, 0x15, 0x25, 0x09, 0x49, 0x01, 0xc7, 0x29, 0x29, 0xfe, 0x39, 0x49, 0x09, 0x00, 0x00, 0x00, // ..%.I..)).9I.... - 0x00, 0x02, 0x00, 0x00, 0xff, 0xad, 0x06, 0x80, 0x05, 0xe0, 0x00, 0x09, 0x00, 0x2b, 0x00, 0x00, // .............+.. - 0x09, 0x01, 0x25, 0x0b, 0x01, 0x05, 0x01, 0x03, 0x25, 0x05, 0x01, 0x14, 0x07, 0x01, 0x13, 0x16, // ..%.....%....... - 0x15, 0x14, 0x23, 0x22, 0x27, 0x25, 0x05, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x37, 0x13, 0x01, // ..#"'%..#"&547.. - 0x26, 0x35, 0x34, 0x37, 0x25, 0x13, 0x36, 0x32, 0x17, 0x13, 0x05, 0x16, 0x04, 0x71, 0x01, 0x32, // &547%.62.....q.2 - 0xfe, 0x5a, 0xbd, 0xbd, 0xfe, 0x5a, 0x01, 0x32, 0x49, 0x01, 0x7a, 0x01, 0x79, 0x01, 0xc7, 0x1a, // .Z...Z.2I.z.y... - 0xfe, 0x95, 0x56, 0x01, 0x29, 0x13, 0x15, 0xfe, 0x3f, 0xfe, 0x3f, 0x16, 0x12, 0x15, 0x15, 0x02, // ..V.)...?.?..... - 0x56, 0xfe, 0x94, 0x19, 0x38, 0x01, 0xf6, 0xe1, 0x13, 0x3c, 0x13, 0xe1, 0x01, 0xf6, 0x38, 0x02, // V...8....<....8. - 0x14, 0x01, 0x29, 0x3e, 0x01, 0x7e, 0xfe, 0x82, 0x3e, 0xfe, 0xd7, 0xfe, 0x5b, 0xc7, 0xc7, 0x03, // ..)>.~..>...[... - 0x0a, 0x16, 0x1a, 0xfe, 0x9e, 0xfe, 0x0c, 0x07, 0x0d, 0x32, 0x0c, 0xec, 0xec, 0x0c, 0x1d, 0x15, // .........2...... - 0x06, 0x0e, 0x01, 0xf4, 0x01, 0x62, 0x1b, 0x15, 0x25, 0x09, 0x49, 0x01, 0xc7, 0x29, 0x29, 0xfe, // .....b..%.I..)). - 0x39, 0x49, 0x09, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x05, 0x80, 0x05, 0x80, 0x00, 0x1f, // 9I.............. - 0x00, 0x27, 0x00, 0x00, 0x25, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x34, 0x3e, 0x05, 0x33, // .'..%..#!"&54>.3 - 0x32, 0x1e, 0x02, 0x32, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x05, 0x00, 0x10, 0x06, 0x20, 0x26, 0x10, // 2..2>.32..... &. - 0x36, 0x20, 0x05, 0x80, 0x92, 0x79, 0xfc, 0x96, 0x79, 0x92, 0x07, 0x15, 0x20, 0x36, 0x46, 0x65, // 6 ...y..y... 6Fe - 0x3d, 0x09, 0x42, 0x53, 0x85, 0x86, 0x85, 0x53, 0x42, 0x09, 0x3d, 0x65, 0x46, 0x36, 0x20, 0x15, // =.BS...SB.=eF6 . - 0x07, 0xfe, 0xc0, 0xe1, 0xfe, 0xc2, 0xe1, 0xe1, 0x01, 0x3e, 0x83, 0x78, 0x8b, 0x8b, 0x78, 0x35, // .........>.x..x5 - 0x65, 0x75, 0x64, 0x5f, 0x43, 0x28, 0x2b, 0x35, 0x2b, 0x2b, 0x35, 0x2b, 0x28, 0x43, 0x5f, 0x64, // eud_C(+5++5+(C_d - 0x75, 0x65, 0x03, 0xe7, 0xfe, 0xc2, 0xe1, 0xe1, 0x01, 0x3e, 0xe1, 0x00, 0x00, 0x0b, 0x00, 0x00, // ue.......>...... - 0xff, 0x00, 0x07, 0x80, 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x3f, 0x00, 0x4f, // .........../.?.O - 0x00, 0x5f, 0x00, 0x6f, 0x00, 0x7f, 0x00, 0x8f, 0x00, 0x9f, 0x00, 0xaf, 0x00, 0x00, 0x05, 0x35, // ._.o...........5 - 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x11, 0x35, // 4&+.".....;.26.5 - 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x11, 0x35, // 4&+.".....;.26.5 - 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x01, 0x11, // 4&+.".....;.26.. - 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x01, 0x35, // 4&#!".....3!26.5 - 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x01, 0x35, // 4&+.".....;.26.5 - 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x01, 0x11, // 4&+.".....;.26.. - 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x01, 0x35, // 4&#!".....3!26.5 - 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x11, 0x35, // 4&+.".....;.26.5 - 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x11, 0x35, // 4&+.".....;.26.5 - 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x37, 0x11, // 4&+.".....;.267. - 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x80, // ..#!"&5.463!2... - 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, // &...&&...&&...&& - 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x04, 0x00, // ...&&...&&...&.. - 0x26, 0x1a, 0xfd, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x03, 0x00, 0x1a, 0x26, 0xfc, 0x00, 0x26, 0x1a, // &....&&....&..&. - 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x05, 0x80, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, // ..&&...&..&...&& - 0x1a, 0x80, 0x1a, 0x26, 0xfe, 0x80, 0x26, 0x1a, 0xfd, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x03, 0x00, // ...&..&....&&... - 0x1a, 0x26, 0x01, 0x80, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x1a, // .&..&...&&...&&. + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x2c, // ...,...,...,..., + 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x2c, // ...,...,...,..., + 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x2c, // ...,...,...,..., + 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x01, 0x98, // ...,............ + 0x00, 0x00, 0x02, 0x74, 0x00, 0x00, 0x02, 0xd0, 0x00, 0x00, 0x03, 0x4c, 0x00, 0x00, 0x03, 0xf0, // ...t.......L.... + 0x00, 0x00, 0x04, 0x54, 0x00, 0x00, 0x06, 0x24, 0x00, 0x00, 0x06, 0xe0, 0x00, 0x00, 0x08, 0x6c, // ...T...$.......l + 0x00, 0x00, 0x09, 0x78, 0x00, 0x00, 0x09, 0xd0, 0x00, 0x00, 0x0a, 0x54, 0x00, 0x00, 0x0b, 0x28, // ...x.......T...( + 0x00, 0x00, 0x0b, 0xd4, 0x00, 0x00, 0x0c, 0x84, 0x00, 0x00, 0x0d, 0x64, 0x00, 0x00, 0x0e, 0xa8, // ...........d.... + 0x00, 0x00, 0x0f, 0xd4, 0x00, 0x00, 0x10, 0x84, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x11, 0x9c, // ................ + 0x00, 0x00, 0x12, 0x6c, 0x00, 0x00, 0x13, 0x2c, 0x00, 0x00, 0x13, 0xd8, 0x00, 0x00, 0x14, 0x80, // ...l...,........ + 0x00, 0x00, 0x14, 0xfc, 0x00, 0x00, 0x15, 0x90, 0x00, 0x00, 0x16, 0x34, 0x00, 0x00, 0x17, 0x10, // ...........4.... + 0x00, 0x00, 0x18, 0x64, 0x00, 0x00, 0x18, 0xcc, 0x00, 0x00, 0x19, 0x70, 0x00, 0x00, 0x1a, 0x48, // ...d.......p...H + 0x00, 0x00, 0x1a, 0x94, 0x00, 0x00, 0x1b, 0x24, 0x00, 0x00, 0x1c, 0x64, 0x00, 0x00, 0x1d, 0x2c, // .......$...d..., + 0x00, 0x00, 0x1e, 0x08, 0x00, 0x00, 0x1e, 0x74, 0x00, 0x00, 0x1f, 0x28, 0x00, 0x00, 0x20, 0x8c, // .......t...(.. . + 0x00, 0x00, 0x20, 0xf0, 0x00, 0x00, 0x21, 0xa0, 0x00, 0x00, 0x22, 0x30, 0x00, 0x00, 0x23, 0x20, // .. ...!..."0..# + 0x00, 0x00, 0x24, 0x2c, 0x00, 0x00, 0x24, 0xe0, 0x00, 0x00, 0x26, 0x44, 0x00, 0x00, 0x27, 0xe4, // ..$,..$...&D..'. + 0x00, 0x00, 0x28, 0x9c, 0x00, 0x00, 0x29, 0x54, 0x00, 0x00, 0x2a, 0x08, 0x00, 0x00, 0x2a, 0xbc, // ..(...)T..*...*. + 0x00, 0x00, 0x2c, 0x10, 0x00, 0x00, 0x2c, 0xf4, 0x00, 0x00, 0x2d, 0xd8, 0x00, 0x00, 0x2e, 0x40, // ..,...,...-....@ + 0x00, 0x00, 0x2e, 0xd8, 0x00, 0x00, 0x2f, 0x60, 0x00, 0x00, 0x2f, 0xbc, 0x00, 0x00, 0x30, 0x14, // ....../`../...0. + 0x00, 0x00, 0x30, 0xa4, 0x00, 0x00, 0x31, 0x94, 0x00, 0x00, 0x32, 0x90, 0x00, 0x00, 0x33, 0x64, // ..0...1...2...3d + 0x00, 0x00, 0x34, 0x34, 0x00, 0x00, 0x34, 0x94, 0x00, 0x00, 0x35, 0x20, 0x00, 0x00, 0x35, 0x80, // ..44..4...5 ..5. + 0x00, 0x00, 0x35, 0xb8, 0x00, 0x00, 0x36, 0x20, 0x00, 0x00, 0x36, 0x5c, 0x00, 0x00, 0x36, 0xbc, // ..5...6 ..6...6. + 0x00, 0x00, 0x37, 0x48, 0x00, 0x00, 0x37, 0xa8, 0x00, 0x00, 0x38, 0x0c, 0x00, 0x00, 0x38, 0x60, // ..7H..7...8...8` + 0x00, 0x00, 0x38, 0xb4, 0x00, 0x00, 0x39, 0x4c, 0x00, 0x00, 0x39, 0xb4, 0x00, 0x00, 0x3a, 0x68, // ..8...9L..9...:h + 0x00, 0x00, 0x3a, 0xec, 0x00, 0x00, 0x3b, 0xc0, 0x00, 0x00, 0x3c, 0x70, 0x00, 0x00, 0x3d, 0x70, // ..:...;...<..>...?h..?. + 0x00, 0x00, 0x40, 0x48, 0x00, 0x00, 0x40, 0xbc, 0x00, 0x00, 0x41, 0x30, 0x00, 0x00, 0x41, 0xb8, // ..@H..@...A0..A. + 0x00, 0x00, 0x42, 0x58, 0x00, 0x00, 0x42, 0xf8, 0x00, 0x00, 0x43, 0x64, 0x00, 0x00, 0x43, 0x9c, // ..BX..B...Cd..C. + 0x00, 0x00, 0x44, 0x4c, 0x00, 0x00, 0x44, 0xe4, 0x00, 0x00, 0x45, 0xb8, 0x00, 0x00, 0x46, 0x9c, // ..DL..D...E...F. + 0x00, 0x00, 0x47, 0x30, 0x00, 0x00, 0x47, 0xdc, 0x00, 0x00, 0x48, 0xec, 0x00, 0x00, 0x49, 0x8c, // ..G0..G...H...I. + 0x00, 0x00, 0x4a, 0x38, 0x00, 0x00, 0x4b, 0xac, 0x00, 0x00, 0x4c, 0xe4, 0x00, 0x00, 0x4d, 0x64, // ..J8..K...L...Md + 0x00, 0x00, 0x4e, 0x2c, 0x00, 0x00, 0x4e, 0x80, 0x00, 0x00, 0x4e, 0xd4, 0x00, 0x00, 0x4f, 0xb0, // ..N,..N...N...O. + 0x00, 0x00, 0x50, 0x60, 0x00, 0x00, 0x50, 0xa8, 0x00, 0x00, 0x51, 0x34, 0x00, 0x00, 0x51, 0xa0, // ..P`..P...Q4..Q. + 0x00, 0x00, 0x52, 0x0c, 0x00, 0x00, 0x52, 0x6c, 0x00, 0x00, 0x53, 0x2c, 0x00, 0x00, 0x53, 0x98, // ..R...Rl..S,..S. + 0x00, 0x00, 0x54, 0x60, 0x00, 0x00, 0x55, 0x30, 0x00, 0x00, 0x57, 0xf0, 0x00, 0x00, 0x58, 0xdc, // ..T`..U0..W...X. + 0x00, 0x00, 0x5a, 0x08, 0x00, 0x00, 0x5b, 0x40, 0x00, 0x00, 0x5b, 0x8c, 0x00, 0x00, 0x5c, 0x3c, // ..Z...[@..[....< + 0x00, 0x00, 0x5c, 0xf8, 0x00, 0x00, 0x5d, 0x98, 0x00, 0x00, 0x5e, 0x28, 0x00, 0x00, 0x5e, 0xe4, // ......]...^(..^. + 0x00, 0x00, 0x5f, 0xa0, 0x00, 0x00, 0x60, 0x70, 0x00, 0x00, 0x62, 0x2c, 0x00, 0x00, 0x62, 0xf4, // .._...`p..b,..b. + 0x00, 0x00, 0x64, 0x04, 0x00, 0x00, 0x64, 0xec, 0x00, 0x00, 0x65, 0x50, 0x00, 0x00, 0x65, 0xd0, // ..d...d...eP..e. + 0x00, 0x00, 0x66, 0xc4, 0x00, 0x00, 0x67, 0x60, 0x00, 0x00, 0x67, 0xa8, 0x00, 0x00, 0x69, 0x4c, // ..f...g`..g...iL + 0x00, 0x00, 0x69, 0xc0, 0x00, 0x00, 0x6a, 0x44, 0x00, 0x00, 0x6b, 0x0c, 0x00, 0x00, 0x6b, 0xd4, // ..i...jD..k...k. + 0x00, 0x00, 0x6c, 0x80, 0x00, 0x00, 0x6d, 0x40, 0x00, 0x00, 0x6e, 0x2c, 0x00, 0x00, 0x6f, 0x4c, // ..l...m@..n,..oL + 0x00, 0x00, 0x70, 0x84, 0x00, 0x00, 0x71, 0xa4, 0x00, 0x00, 0x72, 0xdc, 0x00, 0x00, 0x73, 0x78, // ..p...q...r...sx + 0x00, 0x00, 0x74, 0x10, 0x00, 0x00, 0x74, 0xa8, 0x00, 0x00, 0x75, 0x44, 0x00, 0x00, 0x7b, 0x60, // ..t...t...uD..{` + 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x7c, 0xbc, 0x00, 0x00, 0x7d, 0x10, 0x00, 0x00, 0x7d, 0xa4, // ..|...|...}...}. + 0x00, 0x00, 0x7e, 0x88, 0x00, 0x00, 0x7f, 0x94, 0x00, 0x00, 0x80, 0xbc, 0x00, 0x00, 0x81, 0x18, // ..~............. + 0x00, 0x00, 0x81, 0x8c, 0x00, 0x00, 0x83, 0x48, 0x00, 0x00, 0x84, 0x14, 0x00, 0x00, 0x84, 0xd4, // .......H........ + 0x00, 0x00, 0x85, 0xa8, 0x00, 0x00, 0x85, 0xe4, 0x00, 0x00, 0x86, 0x6c, 0x00, 0x00, 0x87, 0x40, // ...........l...@ + 0x00, 0x00, 0x88, 0x98, 0x00, 0x00, 0x89, 0xc0, 0x00, 0x00, 0x8b, 0x10, 0x00, 0x00, 0x8c, 0xc8, // ................ + 0x00, 0x00, 0x8d, 0x8c, 0x00, 0x00, 0x8e, 0x6c, 0x00, 0x00, 0x8f, 0x48, 0x00, 0x00, 0x90, 0x20, // .......l...H... + 0x00, 0x00, 0x90, 0xc0, 0x00, 0x00, 0x91, 0x54, 0x00, 0x00, 0x92, 0x0c, 0x00, 0x00, 0x92, 0x48, // .......T.......H + 0x00, 0x00, 0x92, 0x84, 0x00, 0x00, 0x92, 0xc0, 0x00, 0x00, 0x92, 0xfc, 0x00, 0x00, 0x93, 0x60, // ...............` + 0x00, 0x00, 0x93, 0xc8, 0x00, 0x00, 0x94, 0x04, 0x00, 0x00, 0x94, 0x40, 0x00, 0x00, 0x94, 0xf0, // ...........@.... + 0x00, 0x00, 0x95, 0x80, 0x00, 0x00, 0x96, 0x24, 0x00, 0x00, 0x97, 0x5c, 0x00, 0x00, 0x98, 0x58, // .......$.......X + 0x00, 0x00, 0x99, 0x1c, 0x00, 0x00, 0x9a, 0x44, 0x00, 0x00, 0x9a, 0xb8, 0x00, 0x00, 0x9b, 0x98, // .......D........ + 0x00, 0x00, 0x9c, 0xa0, 0x00, 0x00, 0x9d, 0x54, 0x00, 0x00, 0x9e, 0x58, 0x00, 0x00, 0x9e, 0xf8, // .......T...X.... + 0x00, 0x00, 0x9f, 0x9c, 0x00, 0x00, 0xa0, 0x44, 0x00, 0x00, 0xa1, 0x50, 0x00, 0x00, 0xa2, 0x2c, // .......D...P..., + 0x00, 0x00, 0xa2, 0xa4, 0x00, 0x00, 0xa3, 0x38, 0x00, 0x00, 0xa3, 0xa8, 0x00, 0x00, 0xa4, 0x64, // .......8.......d + 0x00, 0x00, 0xa5, 0x5c, 0x00, 0x00, 0xa8, 0x90, 0x00, 0x00, 0xab, 0x08, 0x00, 0x00, 0xac, 0x1c, // ................ + 0x00, 0x00, 0xac, 0xec, 0x00, 0x00, 0xad, 0x90, 0x00, 0x00, 0xad, 0xe8, 0x00, 0x00, 0xae, 0x80, // ................ + 0x00, 0x00, 0xaf, 0x18, 0x00, 0x00, 0xaf, 0xb0, 0x00, 0x00, 0xb0, 0x48, 0x00, 0x00, 0xb0, 0xe0, // ...........H.... + 0x00, 0x00, 0xb1, 0x78, 0x00, 0x00, 0xb1, 0xcc, 0x00, 0x00, 0xb2, 0x20, 0x00, 0x00, 0xb2, 0x74, // ...x....... ...t + 0x00, 0x00, 0xb2, 0xc8, 0x00, 0x00, 0xb3, 0x58, 0x00, 0x00, 0xb3, 0xf4, 0x00, 0x00, 0xb4, 0x70, // .......X.......p + 0x00, 0x00, 0xb5, 0x00, 0x00, 0x00, 0xb5, 0x64, 0x00, 0x00, 0xb6, 0x1c, 0x00, 0x00, 0xb6, 0xd4, // .......d........ + 0x00, 0x00, 0xb7, 0xb4, 0x00, 0x00, 0xb7, 0xf0, 0x00, 0x00, 0xb8, 0x78, 0x00, 0x00, 0xb9, 0x74, // ...........x...t + 0x00, 0x00, 0xb9, 0xf8, 0x00, 0x00, 0xba, 0xcc, 0x00, 0x00, 0xba, 0xcc, 0x00, 0x00, 0xba, 0xcc, // ................ + 0x00, 0x00, 0xbb, 0xa8, 0x00, 0x00, 0xbc, 0x84, 0x00, 0x00, 0xbd, 0x40, 0x00, 0x00, 0xbe, 0x04, // ...........@.... + 0x00, 0x00, 0xbf, 0xc8, 0x00, 0x00, 0xc0, 0xc4, 0x00, 0x00, 0xc2, 0x0c, 0x00, 0x00, 0xc2, 0x8c, // ................ + 0x00, 0x00, 0xc3, 0x5c, 0x00, 0x00, 0xc4, 0x20, 0x00, 0x00, 0xc4, 0xbc, 0x00, 0x00, 0xc5, 0x10, // ....... ........ + 0x00, 0x00, 0xc5, 0xb8, 0x00, 0x00, 0xc6, 0x94, 0x00, 0x00, 0xc8, 0x30, 0x00, 0x00, 0xc8, 0xe0, // ...........0.... + 0x00, 0x00, 0xc9, 0x64, 0x00, 0x00, 0xc9, 0xcc, 0x00, 0x00, 0xca, 0xa8, 0x00, 0x00, 0xcb, 0x80, // ...d............ + 0x00, 0x00, 0xcb, 0xe0, 0x00, 0x00, 0xcc, 0xf4, 0x00, 0x00, 0xcd, 0x94, 0x00, 0x00, 0xce, 0x78, // ...............x + 0x00, 0x00, 0xce, 0xe8, 0x00, 0x00, 0xcf, 0xb0, 0x00, 0x00, 0xd0, 0x8c, 0x00, 0x00, 0xd1, 0x2c, // ..............., + 0x00, 0x00, 0xd1, 0x88, 0x00, 0x00, 0xd2, 0x08, 0x00, 0x00, 0xd2, 0x88, 0x00, 0x00, 0xd3, 0x0c, // ................ + 0x00, 0x00, 0xd3, 0x8c, 0x00, 0x00, 0xd3, 0xec, 0x00, 0x00, 0xd4, 0x38, 0x00, 0x00, 0xd5, 0x2c, // ...........8..., + 0x00, 0x00, 0xd5, 0x9c, 0x00, 0x00, 0xd6, 0x60, 0x00, 0x00, 0xd6, 0xe8, 0x00, 0x00, 0xd7, 0x6c, // .......`.......l + 0x00, 0x00, 0xd8, 0x48, 0x00, 0x00, 0xd8, 0xb4, 0x00, 0x00, 0xd9, 0x60, 0x00, 0x00, 0xd9, 0xc4, // ...H.......`.... + 0x00, 0x00, 0xda, 0x54, 0x00, 0x00, 0xda, 0xb8, 0x00, 0x00, 0xdb, 0x18, 0x00, 0x00, 0xdb, 0x94, // ...T............ + 0x00, 0x00, 0xdc, 0x40, 0x00, 0x00, 0xdc, 0xc8, 0x00, 0x00, 0xdd, 0x6c, 0x00, 0x00, 0xdd, 0xf0, // ...@.......l.... + 0x00, 0x00, 0xde, 0x84, 0x00, 0x00, 0xdf, 0x18, 0x00, 0x00, 0xdf, 0xac, 0x00, 0x00, 0xe0, 0xbc, // ................ + 0x00, 0x00, 0xe1, 0x6c, 0x00, 0x00, 0xe2, 0x70, 0x00, 0x00, 0xe3, 0x20, 0x00, 0x00, 0xe3, 0xe4, // ...l...p... .... + 0x00, 0x00, 0xe4, 0x80, 0x00, 0x00, 0xe5, 0xc8, 0x00, 0x00, 0xe6, 0xc0, 0x00, 0x00, 0xe7, 0x18, // ................ + 0x00, 0x00, 0xe7, 0xec, 0x00, 0x00, 0xe8, 0xe4, 0x00, 0x00, 0xe9, 0xd8, 0x00, 0x00, 0xea, 0xd8, // ................ + 0x00, 0x00, 0xeb, 0xd8, 0x00, 0x00, 0xec, 0xd4, 0x00, 0x00, 0xed, 0xd0, 0x00, 0x00, 0xee, 0xdc, // ................ + 0x00, 0x00, 0xef, 0xe4, 0x00, 0x00, 0xf2, 0x04, 0x00, 0x00, 0xf3, 0xf4, 0x00, 0x00, 0xf4, 0x80, // ................ + 0x00, 0x00, 0xf5, 0x34, 0x00, 0x00, 0xf6, 0x10, 0x00, 0x00, 0xf6, 0x9c, 0x00, 0x00, 0xf7, 0x18, // ...4............ + 0x00, 0x00, 0xf8, 0x58, 0x00, 0x00, 0xf8, 0xc0, 0x00, 0x00, 0xf9, 0x24, 0x00, 0x00, 0xfa, 0x6c, // ...X.......$...l + 0x00, 0x00, 0xfb, 0xbc, 0x00, 0x00, 0xfc, 0x28, 0x00, 0x00, 0xfc, 0xb8, 0x00, 0x00, 0xfd, 0x0c, // .......(........ + 0x00, 0x00, 0xfd, 0x60, 0x00, 0x00, 0xfd, 0xb4, 0x00, 0x00, 0xfe, 0x08, 0x00, 0x00, 0xfe, 0xb8, // ...`............ + 0x00, 0x00, 0xff, 0x08, 0x00, 0x01, 0x00, 0x14, 0x00, 0x01, 0x05, 0xb4, 0x00, 0x01, 0x06, 0xf4, // ................ + 0x00, 0x01, 0x07, 0xf8, 0x00, 0x01, 0x08, 0xd0, 0x00, 0x01, 0x09, 0x64, 0x00, 0x01, 0x0a, 0x10, // ...........d.... + 0x00, 0x01, 0x0a, 0x98, 0x00, 0x01, 0x0b, 0x18, 0x00, 0x01, 0x0c, 0x04, 0x00, 0x01, 0x0c, 0xa4, // ................ + 0x00, 0x01, 0x0d, 0x2c, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x01, 0x0f, 0x88, 0x00, 0x01, 0x11, 0x2c, // ...,..........., + 0x00, 0x01, 0x11, 0xa0, 0x00, 0x01, 0x12, 0xcc, 0x00, 0x01, 0x13, 0x38, 0x00, 0x01, 0x13, 0xe4, // ...........8.... + 0x00, 0x01, 0x14, 0x90, 0x00, 0x01, 0x15, 0x28, 0x00, 0x01, 0x15, 0xa4, 0x00, 0x01, 0x16, 0x58, // .......(.......X + 0x00, 0x01, 0x16, 0xfc, 0x00, 0x01, 0x17, 0xc0, 0x00, 0x01, 0x18, 0x84, 0x00, 0x01, 0x19, 0x78, // ...............x + 0x00, 0x01, 0x1a, 0x7c, 0x00, 0x01, 0x1b, 0x54, 0x00, 0x01, 0x1c, 0xd4, 0x00, 0x01, 0x1d, 0x40, // ...|...T.......@ + 0x00, 0x01, 0x1d, 0xd4, 0x00, 0x01, 0x1e, 0x90, 0x00, 0x01, 0x1f, 0x04, 0x00, 0x01, 0x1f, 0x7c, // ...............| + 0x00, 0x01, 0x20, 0xa4, 0x00, 0x01, 0x21, 0xc0, 0x00, 0x01, 0x22, 0x78, 0x00, 0x01, 0x23, 0x08, // .. ...!..."x..#. + 0x00, 0x01, 0x23, 0x6c, 0x00, 0x01, 0x24, 0x04, 0x00, 0x01, 0x24, 0xcc, 0x00, 0x01, 0x27, 0x68, // ..#l..$...$...'h + 0x00, 0x01, 0x28, 0xe8, 0x00, 0x01, 0x2a, 0x4c, 0x00, 0x01, 0x2c, 0x54, 0x00, 0x01, 0x2e, 0x4c, // ..(...*L..,T...L + 0x00, 0x01, 0x31, 0x74, 0x00, 0x01, 0x31, 0xf4, 0x00, 0x01, 0x32, 0xe0, 0x00, 0x01, 0x33, 0x30, // ..1t..1...2...30 + 0x00, 0x01, 0x33, 0xb0, 0x00, 0x01, 0x34, 0xa8, 0x00, 0x01, 0x35, 0x74, 0x00, 0x01, 0x36, 0x54, // ..3...4...5t..6T + 0x00, 0x01, 0x37, 0x24, 0x00, 0x01, 0x38, 0x0c, 0x00, 0x01, 0x39, 0x48, 0x00, 0x01, 0x3a, 0x10, // ..7$..8...9H..:. + 0x00, 0x01, 0x3a, 0xf0, 0x00, 0x01, 0x3b, 0x90, 0x00, 0x01, 0x3c, 0x84, 0x00, 0x01, 0x3c, 0xd8, // ..:...;...<...<. + 0x00, 0x01, 0x3f, 0x58, 0x00, 0x01, 0x40, 0x1c, 0x00, 0x01, 0x41, 0xc0, 0x00, 0x01, 0x42, 0xc8, // ..?X..@...A...B. + 0x00, 0x01, 0x43, 0xc8, 0x00, 0x01, 0x44, 0x9c, 0x00, 0x01, 0x45, 0x48, 0x00, 0x01, 0x46, 0x48, // ..C...D...EH..FH + 0x00, 0x01, 0x47, 0x70, 0x00, 0x01, 0x48, 0x48, 0x00, 0x01, 0x49, 0x78, 0x00, 0x01, 0x4a, 0x20, // ..Gp..HH..Ix..J + 0x00, 0x01, 0x4a, 0xe4, 0x00, 0x01, 0x4b, 0xd4, 0x00, 0x01, 0x4c, 0xa0, 0x00, 0x01, 0x4d, 0x18, // ..J...K...L...M. + 0x00, 0x01, 0x4e, 0x40, 0x00, 0x01, 0x50, 0x40, 0x00, 0x01, 0x51, 0xa0, 0x00, 0x01, 0x52, 0xe0, // ..N@..P@..Q...R. + 0x00, 0x01, 0x53, 0x44, 0x00, 0x01, 0x54, 0x20, 0x00, 0x01, 0x55, 0x4c, 0x00, 0x01, 0x56, 0x60, // ..SD..T ..UL..V` + 0x00, 0x01, 0x56, 0xd4, 0x00, 0x01, 0x57, 0x58, 0x00, 0x01, 0x58, 0x34, 0x00, 0x01, 0x58, 0xa0, // ..V...WX..X4..X. + 0x00, 0x01, 0x5a, 0x04, 0x00, 0x01, 0x5a, 0x88, 0x00, 0x01, 0x5b, 0x64, 0x00, 0x01, 0x5b, 0xe0, // ..Z...Z...[d..[. + 0x00, 0x01, 0x5c, 0x7c, 0x00, 0x01, 0x5d, 0xd8, 0x00, 0x01, 0x5e, 0xa0, 0x00, 0x01, 0x60, 0x94, // ...|..]...^...`. + 0x00, 0x01, 0x61, 0x48, 0x00, 0x01, 0x61, 0xbc, 0x00, 0x01, 0x62, 0xf0, 0x00, 0x01, 0x63, 0x58, // ..aH..a...b...cX + 0x00, 0x01, 0x64, 0xac, 0x00, 0x01, 0x65, 0x74, 0x00, 0x01, 0x66, 0x68, 0x00, 0x01, 0x67, 0xdc, // ..d...et..fh..g. + 0x00, 0x01, 0x68, 0xb4, 0x00, 0x01, 0x69, 0x5c, 0x00, 0x01, 0x6a, 0x78, 0x00, 0x01, 0x6e, 0x84, // ..h...i...jx..n. + 0x00, 0x01, 0x70, 0x40, 0x00, 0x01, 0x73, 0xe0, 0x00, 0x01, 0x76, 0x10, 0x00, 0x01, 0x77, 0xc8, // ..p@..s...v...w. + 0x00, 0x01, 0x78, 0x90, 0x00, 0x01, 0x79, 0x88, 0x00, 0x01, 0x7a, 0x8c, 0x00, 0x01, 0x7b, 0x68, // ..x...y...z...{h + 0x00, 0x01, 0x7c, 0x8c, 0x00, 0x01, 0x7d, 0x1c, 0x00, 0x01, 0x7d, 0xa4, 0x00, 0x01, 0x7f, 0x5c, // ..|...}...}..... + 0x00, 0x01, 0x7f, 0x98, 0x00, 0x01, 0x7f, 0xf8, 0x00, 0x01, 0x80, 0x6c, 0x00, 0x01, 0x81, 0x74, // ...........l...t + 0x00, 0x01, 0x82, 0x90, 0x00, 0x01, 0x83, 0x34, 0x00, 0x01, 0x83, 0xa4, 0x00, 0x01, 0x84, 0xc8, // .......4........ + 0x00, 0x01, 0x85, 0xb0, 0x00, 0x01, 0x86, 0xa4, 0x00, 0x01, 0x88, 0x74, 0x00, 0x01, 0x89, 0x8c, // ...........t.... + 0x00, 0x01, 0x8a, 0x38, 0x00, 0x01, 0x8b, 0x38, 0x00, 0x01, 0x8b, 0xa0, 0x00, 0x01, 0x8e, 0x4c, // ...8...8.......L + 0x00, 0x01, 0x8e, 0xa8, 0x00, 0x01, 0x8f, 0x54, 0x00, 0x01, 0x90, 0x10, 0x00, 0x01, 0x91, 0x14, // .......T........ + 0x00, 0x01, 0x93, 0x90, 0x00, 0x01, 0x94, 0x14, 0x00, 0x01, 0x95, 0x04, 0x00, 0x01, 0x95, 0xfc, // ................ + 0x00, 0x01, 0x96, 0xf8, 0x00, 0x01, 0x97, 0xa0, 0x00, 0x01, 0x99, 0x7c, 0x00, 0x01, 0x9a, 0xc8, // ...........|.... + 0x00, 0x01, 0x9c, 0x10, 0x00, 0x01, 0x9d, 0x08, 0x00, 0x01, 0x9d, 0xd8, 0x00, 0x01, 0x9e, 0x7c, // ...............| + 0x00, 0x01, 0x9f, 0x18, 0x00, 0x01, 0x9f, 0xe8, 0x00, 0x01, 0xa0, 0xc4, 0x00, 0x01, 0xa2, 0x0c, // ................ + 0x00, 0x01, 0xa3, 0x34, 0x00, 0x01, 0xa4, 0x78, 0x00, 0x01, 0xa5, 0xb0, 0x00, 0x01, 0xa6, 0x80, // ...4...x........ + 0x00, 0x01, 0xa7, 0x4c, 0x00, 0x01, 0xa8, 0x1c, 0x00, 0x01, 0xa8, 0x90, 0x00, 0x01, 0xa8, 0xec, // ...L............ + 0x00, 0x01, 0xa8, 0xec, 0x00, 0x01, 0xa8, 0xec, 0x00, 0x01, 0xa9, 0x58, 0x00, 0x01, 0xaa, 0x28, // ...........X...( + 0x00, 0x01, 0xab, 0x20, 0x00, 0x01, 0xab, 0xcc, 0x00, 0x01, 0xac, 0xac, 0x00, 0x01, 0xad, 0xa8, // ... ............ + 0x00, 0x01, 0xae, 0x20, 0x00, 0x01, 0xae, 0x88, 0x00, 0x01, 0xaf, 0x04, 0x00, 0x01, 0xaf, 0xa8, // ... ............ + 0x00, 0x01, 0xb0, 0x40, 0x00, 0x01, 0xb0, 0x88, 0x00, 0x01, 0xb6, 0xbc, 0x00, 0x01, 0xb7, 0x6c, // ...@...........l + 0x00, 0x01, 0xb8, 0xe0, 0x00, 0x01, 0xb9, 0x74, 0x00, 0x01, 0xba, 0x04, 0x00, 0x01, 0xba, 0x94, // .......t........ + 0x00, 0x01, 0xbb, 0x24, 0x00, 0x01, 0xbb, 0xa4, 0x00, 0x01, 0xbc, 0x08, 0x00, 0x01, 0xbc, 0x78, // ...$...........x + 0x00, 0x01, 0xbd, 0x4c, 0x00, 0x01, 0xbe, 0x4c, 0x00, 0x01, 0xbe, 0xa4, 0x00, 0x01, 0xbf, 0x20, // ...L...L....... + 0x00, 0x01, 0xc0, 0x48, 0x00, 0x01, 0xc1, 0x18, 0x00, 0x01, 0xc1, 0xc4, 0x00, 0x01, 0xc3, 0x04, // ...H............ + 0x00, 0x01, 0xc3, 0xe4, 0x00, 0x01, 0xc4, 0xa0, 0x00, 0x01, 0xc5, 0x54, 0x00, 0x01, 0xc6, 0x28, // ...........T...( + 0x00, 0x01, 0xc6, 0xec, 0x00, 0x01, 0xc8, 0x0c, 0x00, 0x01, 0xc9, 0x0c, 0x00, 0x01, 0xca, 0x88, // ................ + 0x00, 0x01, 0xcb, 0xa0, 0x00, 0x01, 0xcc, 0xf8, 0x00, 0x01, 0xce, 0x1c, 0x00, 0x01, 0xcf, 0x94, // ................ + 0x00, 0x01, 0xd0, 0x6c, 0x00, 0x01, 0xd1, 0x64, 0x00, 0x01, 0xd2, 0xdc, 0x00, 0x01, 0xd3, 0x50, // ...l...d.......P + 0x00, 0x01, 0xd3, 0xf8, 0x00, 0x01, 0xd5, 0x84, 0x00, 0x01, 0xd6, 0x78, 0x00, 0x01, 0xd7, 0x70, // ...........x...p + 0x00, 0x01, 0xd7, 0xfc, 0x00, 0x01, 0xd8, 0xf4, 0x00, 0x01, 0xda, 0xac, 0x00, 0x01, 0xdb, 0x54, // ...............T + 0x00, 0x01, 0xdc, 0x54, 0x00, 0x01, 0xdd, 0x0c, 0x00, 0x01, 0xdd, 0xf0, 0x00, 0x01, 0xde, 0x88, // ...T............ + 0x00, 0x01, 0xdf, 0x4c, 0x00, 0x01, 0xe1, 0x80, 0x00, 0x01, 0xe2, 0xf8, 0x00, 0x01, 0xe4, 0x18, // ...L............ + 0x00, 0x01, 0xe5, 0x0c, 0x00, 0x01, 0xe6, 0x3c, 0x00, 0x01, 0xe7, 0x48, 0x00, 0x01, 0xe7, 0xa8, // .......<...H.... + 0x00, 0x01, 0xe8, 0x24, 0x00, 0x01, 0xe8, 0xd4, 0x00, 0x01, 0xe9, 0x6c, 0x00, 0x01, 0xea, 0x1c, // ...$.......l.... + 0x00, 0x01, 0xea, 0xd4, 0x00, 0x01, 0xeb, 0xe4, 0x00, 0x01, 0xec, 0x34, 0x00, 0x01, 0xec, 0xb8, // ...........4.... + 0x00, 0x01, 0xec, 0xf4, 0x00, 0x01, 0xed, 0xf0, 0x00, 0x01, 0xef, 0x08, 0x00, 0x01, 0xef, 0xa4, // ................ + 0x00, 0x01, 0xf0, 0x04, 0x00, 0x01, 0xf0, 0xcc, 0x00, 0x01, 0xf1, 0x20, 0x00, 0x01, 0xf2, 0x50, // ........... ...P + 0x00, 0x01, 0xf3, 0x6c, 0x00, 0x01, 0xf3, 0xe8, 0x00, 0x01, 0xf5, 0x0c, 0x00, 0x01, 0xf6, 0x2c, // ...l..........., + 0x00, 0x01, 0xf6, 0xc0, 0x00, 0x01, 0xf7, 0x78, 0x00, 0x01, 0xf7, 0xe0, 0x00, 0x01, 0xf8, 0x70, // .......x.......p + 0x00, 0x01, 0xf9, 0x2c, 0x00, 0x01, 0xfa, 0x78, 0x00, 0x01, 0xfb, 0x74, 0x00, 0x01, 0xfc, 0x0c, // ...,...x...t.... + 0x00, 0x01, 0xfc, 0x64, 0x00, 0x01, 0xfd, 0x0c, 0x00, 0x01, 0xfd, 0x8c, 0x00, 0x01, 0xfe, 0x34, // ...d...........4 + 0x00, 0x01, 0xff, 0x08, 0x00, 0x01, 0xff, 0xd0, 0x00, 0x02, 0x01, 0x34, 0x00, 0x02, 0x02, 0x1c, // ...........4.... + 0x00, 0x02, 0x03, 0x2c, 0x00, 0x02, 0x04, 0x68, 0x00, 0x02, 0x05, 0xd4, 0x00, 0x02, 0x07, 0x50, // ...,...h.......P + 0x00, 0x02, 0x09, 0x34, 0x00, 0x02, 0x0a, 0xd4, 0x00, 0x02, 0x0c, 0xe0, 0x00, 0x02, 0x0d, 0xf0, // ...4............ + 0x00, 0x02, 0x0f, 0x18, 0x00, 0x02, 0x10, 0x34, 0x00, 0x02, 0x11, 0xe4, 0x00, 0x02, 0x13, 0x3c, // .......4.......< + 0x00, 0x02, 0x14, 0x2c, 0x00, 0x02, 0x15, 0x2c, 0x00, 0x02, 0x16, 0x34, 0x00, 0x02, 0x17, 0x30, // ...,...,...4...0 + 0x00, 0x02, 0x18, 0x38, 0x00, 0x02, 0x19, 0x24, 0x00, 0x02, 0x1a, 0x88, 0x00, 0x02, 0x1b, 0x38, // ...8...$.......8 + 0x00, 0x02, 0x1d, 0xb4, 0x00, 0x02, 0x1e, 0x54, 0x00, 0x02, 0x1e, 0xcc, 0x00, 0x02, 0x20, 0x7c, // .......T...... | + 0x00, 0x02, 0x21, 0x68, 0x00, 0x02, 0x22, 0xac, 0x00, 0x02, 0x24, 0x4c, 0x00, 0x02, 0x25, 0x30, // ..!h.."...$L..%0 + 0x00, 0x02, 0x26, 0x48, 0x00, 0x02, 0x27, 0x88, 0x00, 0x02, 0x28, 0xf4, 0x00, 0x02, 0x29, 0x8c, // ..&H..'...(...). + 0x00, 0x02, 0x2a, 0x30, 0x00, 0x02, 0x2a, 0xdc, 0x00, 0x02, 0x2b, 0x94, 0x00, 0x02, 0x2c, 0xdc, // ..*0..*...+...,. + 0x00, 0x02, 0x2e, 0x24, 0x00, 0x02, 0x2e, 0xec, 0x00, 0x02, 0x30, 0xec, 0x00, 0x02, 0x31, 0x84, // ...$......0...1. + 0x00, 0x02, 0x32, 0x40, 0x00, 0x02, 0x32, 0xfc, 0x00, 0x02, 0x33, 0xb8, 0x00, 0x02, 0x34, 0x74, // ..2@..2...3...4t + 0x00, 0x02, 0x35, 0x24, 0x00, 0x02, 0x36, 0xf4, 0x00, 0x02, 0x39, 0x20, 0x00, 0x02, 0x3a, 0x8c, // ..5$..6...9 ..:. + 0x00, 0x02, 0x3a, 0xd4, 0x00, 0x02, 0x3b, 0x0c, 0x00, 0x02, 0x3b, 0x88, 0x00, 0x02, 0x3c, 0x28, // ..:...;...;...<( + 0x00, 0x02, 0x3c, 0xd8, 0x00, 0x02, 0x3d, 0x34, 0x00, 0x02, 0x3f, 0xb8, 0x00, 0x02, 0x40, 0x98, // ..<...=4..?...@. + 0x00, 0x02, 0x41, 0xe0, 0x00, 0x02, 0x43, 0xa0, 0x00, 0x02, 0x44, 0xfc, 0x00, 0x02, 0x46, 0x98, // ..A...C...D...F. + 0x00, 0x02, 0x48, 0x60, 0x00, 0x02, 0x48, 0xf4, 0x00, 0x02, 0x49, 0xcc, 0x00, 0x02, 0x4c, 0xbc, // ..H`..H...I...L. + 0x00, 0x02, 0x4c, 0xbc, 0x00, 0x02, 0x4c, 0xbc, 0x00, 0x02, 0x4c, 0xbc, 0x00, 0x02, 0x4c, 0xbc, // ..L...L...L...L. + 0x00, 0x02, 0x4c, 0xbc, 0x00, 0x02, 0x4c, 0xbc, 0x00, 0x02, 0x4c, 0xbc, 0x00, 0x02, 0x4c, 0xbc, // ..L...L...L...L. + 0x00, 0x02, 0x4c, 0xbc, 0x00, 0x02, 0x4c, 0xbc, 0x00, 0x02, 0x4c, 0xbc, 0x00, 0x02, 0x4c, 0xbc, // ..L...L...L...L. + 0x00, 0x02, 0x4c, 0xbc, 0x00, 0x02, 0x4c, 0xbc, 0x00, 0x02, 0x4c, 0xbc, 0x00, 0x02, 0x00, 0x70, // ..L...L...L....p + 0x00, 0x00, 0x03, 0x10, 0x06, 0x00, 0x00, 0x03, 0x00, 0x07, 0x00, 0x00, 0x37, 0x21, 0x11, 0x21, // ............7!.! + 0x03, 0x11, 0x21, 0x11, 0xe0, 0x01, 0xc0, 0xfe, 0x40, 0x70, 0x02, 0xa0, 0x70, 0x05, 0x20, 0xfa, // ..!.....@p..p. . + 0x70, 0x06, 0x00, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x5d, 0xff, 0x00, 0x06, 0xa3, // p..........].... + 0x05, 0x80, 0x00, 0x1d, 0x00, 0x00, 0x01, 0x14, 0x07, 0x01, 0x11, 0x21, 0x32, 0x16, 0x14, 0x06, // ...........!2... + 0x23, 0x21, 0x22, 0x26, 0x34, 0x36, 0x33, 0x21, 0x11, 0x01, 0x26, 0x35, 0x34, 0x3e, 0x01, 0x33, // #!"&463!..&54>.3 + 0x21, 0x32, 0x1e, 0x01, 0x06, 0xa3, 0x2b, 0xfd, 0x88, 0x01, 0x40, 0x1a, 0x26, 0x26, 0x1a, 0xfc, // !2....+...@.&&.. + 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0x40, 0xfd, 0x88, 0x2b, 0x24, 0x28, 0x17, 0x05, 0x80, 0x17, // ..&&..@..+$(.... + 0x28, 0x24, 0x05, 0x46, 0x23, 0x2b, 0xfd, 0x88, 0xfd, 0x00, 0x26, 0x34, 0x26, 0x26, 0x34, 0x26, // ($.F#+....&4&&4& + 0x03, 0x00, 0x02, 0x78, 0x2b, 0x23, 0x17, 0x1b, 0x08, 0x08, 0x1b, 0x00, 0x00, 0x01, 0x00, 0x00, // ...x+#.......... + 0xff, 0x00, 0x06, 0x00, 0x05, 0x80, 0x00, 0x2b, 0x00, 0x00, 0x01, 0x11, 0x14, 0x0e, 0x02, 0x22, // .......+......." + 0x2e, 0x02, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x17, 0x11, 0x05, 0x11, 0x14, 0x0e, 0x02, 0x22, 0x2e, // ..4>.32.......". + 0x02, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x17, 0x11, 0x34, 0x36, 0x37, 0x01, 0x36, 0x33, 0x32, 0x16, // .4>.32..467.632. + 0x06, 0x00, 0x44, 0x68, 0x67, 0x5a, 0x67, 0x68, 0x44, 0x44, 0x68, 0x67, 0x2d, 0x69, 0x57, 0xfd, // ..DhgZghDDhg-iW. + 0x00, 0x44, 0x68, 0x67, 0x5a, 0x67, 0x68, 0x44, 0x44, 0x68, 0x67, 0x2d, 0x69, 0x57, 0x26, 0x1e, // .DhgZghDDhg-iW&. + 0x03, 0x40, 0x0c, 0x10, 0x28, 0x38, 0x05, 0x20, 0xfb, 0xa0, 0x32, 0x4e, 0x2b, 0x15, 0x15, 0x2b, // .@..(8. ..2N+..+ + 0x4e, 0x64, 0x4e, 0x2b, 0x15, 0x27, 0x02, 0x19, 0xed, 0xfd, 0x3b, 0x32, 0x4e, 0x2b, 0x15, 0x15, // NdN+.'....;2N+.. + 0x2b, 0x4e, 0x64, 0x4e, 0x2b, 0x15, 0x27, 0x03, 0xc7, 0x1f, 0x33, 0x0a, 0x01, 0x00, 0x04, 0x38, // +NdN+.'...3....8 + 0x00, 0x02, 0x00, 0x00, 0xff, 0x00, 0x06, 0x80, 0x05, 0x80, 0x00, 0x07, 0x00, 0x21, 0x00, 0x00, // .............!.. + 0x00, 0x10, 0x00, 0x20, 0x00, 0x10, 0x00, 0x20, 0x01, 0x14, 0x06, 0x23, 0x22, 0x27, 0x01, 0x06, // ... ... ...#"'.. + 0x23, 0x22, 0x24, 0x26, 0x02, 0x10, 0x12, 0x36, 0x24, 0x20, 0x04, 0x16, 0x12, 0x15, 0x14, 0x07, // #"$&...6$ ...... + 0x01, 0x16, 0x04, 0x80, 0xfe, 0xf9, 0xfe, 0x8e, 0xfe, 0xf9, 0x01, 0x07, 0x01, 0x72, 0x03, 0x07, // .............r.. + 0x4c, 0x34, 0x36, 0x24, 0xfe, 0xa9, 0xb3, 0xdc, 0x8f, 0xfe, 0xfb, 0xbd, 0x6f, 0x6f, 0xbd, 0x01, // L46$........oo.. + 0x05, 0x01, 0x1e, 0x01, 0x05, 0xbd, 0x6f, 0x7c, 0x01, 0x57, 0x25, 0x02, 0x07, 0x01, 0x72, 0x01, // ......o|.W%...r. + 0x07, 0xfe, 0xf9, 0xfe, 0x8e, 0xfe, 0xf9, 0xfe, 0x80, 0x34, 0x4c, 0x26, 0x01, 0x56, 0x7c, 0x6f, // .........4L&.V|o + 0xbd, 0x01, 0x05, 0x01, 0x1e, 0x01, 0x05, 0xbd, 0x6f, 0x6f, 0xbd, 0xfe, 0xfb, 0x8f, 0xdc, 0xb3, // ........oo...... + 0xfe, 0xa9, 0x25, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x07, 0x00, 0x05, 0x00, 0x00, 0x1a, // ..%............. + 0x00, 0x3d, 0x00, 0x4d, 0x00, 0x00, 0x25, 0x11, 0x06, 0x07, 0x04, 0x07, 0x0e, 0x02, 0x2b, 0x02, // .=.M..%.......+. + 0x22, 0x2e, 0x01, 0x27, 0x26, 0x25, 0x26, 0x27, 0x11, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x11, // "..'&%&'...3!26. + 0x3c, 0x02, 0x2e, 0x03, 0x23, 0x21, 0x22, 0x06, 0x15, 0x14, 0x17, 0x16, 0x17, 0x1e, 0x04, 0x3b, // <...#!"........; + 0x02, 0x32, 0x3e, 0x03, 0x37, 0x36, 0x37, 0x3e, 0x01, 0x37, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, // .2>.767>.7...#!" + 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x06, 0x80, 0x20, 0x25, 0xfe, 0xf4, 0x9e, // &5.463!2... %... + 0x33, 0x40, 0x6d, 0x30, 0x01, 0x01, 0x30, 0x6d, 0x40, 0x33, 0x9e, 0xfe, 0xf4, 0x25, 0x20, 0x13, // 3@m0..0m@3...% . + 0x0d, 0x05, 0xc0, 0x0d, 0x13, 0x01, 0x05, 0x06, 0x0c, 0x08, 0xfa, 0x40, 0x0d, 0x13, 0x93, 0xc1, // ...........@.... + 0xd0, 0x06, 0x3a, 0x22, 0x37, 0x2e, 0x14, 0x01, 0x01, 0x14, 0x2e, 0x37, 0x22, 0x3a, 0x06, 0xd0, // ..:"7......7":.. + 0xc1, 0x36, 0x5d, 0x80, 0x5e, 0x42, 0xfa, 0x40, 0x42, 0x5e, 0x5e, 0x42, 0x05, 0xc0, 0x42, 0x5e, // .6].^B.@B^^B..B^ + 0x20, 0x03, 0x00, 0x24, 0x1e, 0xce, 0x84, 0x2b, 0x30, 0x31, 0x31, 0x30, 0x2b, 0x84, 0xce, 0x1e, // ..$...+0110+... + 0x24, 0xfd, 0x00, 0x0d, 0x13, 0x13, 0x04, 0x28, 0x02, 0x12, 0x09, 0x11, 0x08, 0x0a, 0x05, 0x13, // $......(........ + 0x0d, 0xa8, 0x74, 0x98, 0xa5, 0x05, 0x31, 0x1a, 0x25, 0x12, 0x12, 0x25, 0x1a, 0x31, 0x05, 0xa5, // ..t...1.%..%.1.. + 0x98, 0x2b, 0x91, 0x60, 0xfb, 0xc0, 0x42, 0x5e, 0x5e, 0x42, 0x04, 0x40, 0x42, 0x5e, 0x5e, 0x00, // .+.`..B^^B.@B^^. + 0x00, 0x01, 0x00, 0x00, 0xff, 0x80, 0x07, 0x00, 0x05, 0x80, 0x00, 0x1c, 0x00, 0x00, 0x04, 0x22, // ..............." + 0x27, 0x01, 0x2e, 0x04, 0x35, 0x34, 0x36, 0x33, 0x32, 0x1e, 0x02, 0x17, 0x3e, 0x03, 0x33, 0x32, // '...54632...>.32 + 0x16, 0x15, 0x14, 0x07, 0x01, 0x03, 0x9a, 0x34, 0x12, 0xfd, 0x90, 0x0a, 0x23, 0x4c, 0x3c, 0x2f, // .......4....#L.oP$$Po.>.... + 0x91, 0x80, 0x12, 0x02, 0x5a, 0x08, 0x24, 0x5f, 0x64, 0x8e, 0x43, 0xdc, 0xf8, 0x2b, 0x49, 0x40, // ....Z.$_d.C..+I@ + 0x24, 0x24, 0x40, 0x49, 0x2b, 0xf8, 0xdc, 0xdd, 0xe5, 0xfd, 0xa8, 0x00, 0x00, 0x01, 0x00, 0x00, // $$@I+........... + 0xff, 0xad, 0x06, 0x80, 0x05, 0xe0, 0x00, 0x22, 0x00, 0x00, 0x01, 0x14, 0x07, 0x01, 0x13, 0x16, // ......."........ + 0x15, 0x14, 0x06, 0x23, 0x22, 0x27, 0x25, 0x05, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x37, 0x13, // ...#"'%..#"&547. + 0x01, 0x26, 0x35, 0x34, 0x37, 0x25, 0x13, 0x36, 0x32, 0x17, 0x13, 0x05, 0x16, 0x06, 0x80, 0x1a, // .&547%.62....... + 0xfe, 0x95, 0x56, 0x01, 0x15, 0x14, 0x13, 0x15, 0xfe, 0x3f, 0xfe, 0x3f, 0x16, 0x12, 0x15, 0x15, // ..V......?.?.... + 0x02, 0x56, 0xfe, 0x94, 0x19, 0x38, 0x01, 0xf6, 0xe1, 0x13, 0x3c, 0x13, 0xe1, 0x01, 0xf6, 0x38, // .V...8....<....8 + 0x03, 0x79, 0x16, 0x1a, 0xfe, 0x9e, 0xfe, 0x0c, 0x07, 0x0d, 0x15, 0x1d, 0x0c, 0xec, 0xec, 0x0c, // .y.............. + 0x1d, 0x15, 0x06, 0x0e, 0x01, 0xf4, 0x01, 0x62, 0x1b, 0x15, 0x25, 0x09, 0x49, 0x01, 0xc7, 0x29, // .......b..%.I..) + 0x29, 0xfe, 0x39, 0x49, 0x09, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0xad, 0x06, 0x80, // ).9I............ + 0x05, 0xe0, 0x00, 0x09, 0x00, 0x2b, 0x00, 0x00, 0x09, 0x01, 0x25, 0x0b, 0x01, 0x05, 0x01, 0x03, // .....+....%..... + 0x25, 0x05, 0x01, 0x14, 0x07, 0x01, 0x13, 0x16, 0x15, 0x14, 0x23, 0x22, 0x27, 0x25, 0x05, 0x06, // %.........#"'%.. + 0x23, 0x22, 0x26, 0x35, 0x34, 0x37, 0x13, 0x01, 0x26, 0x35, 0x34, 0x37, 0x25, 0x13, 0x36, 0x32, // #"&547..&547%.62 + 0x17, 0x13, 0x05, 0x16, 0x04, 0x71, 0x01, 0x32, 0xfe, 0x5a, 0xbd, 0xbd, 0xfe, 0x5a, 0x01, 0x32, // .....q.2.Z...Z.2 + 0x49, 0x01, 0x7a, 0x01, 0x79, 0x01, 0xc7, 0x1a, 0xfe, 0x95, 0x56, 0x01, 0x29, 0x13, 0x15, 0xfe, // I.z.y.....V.)... + 0x3f, 0xfe, 0x3f, 0x16, 0x12, 0x15, 0x15, 0x02, 0x56, 0xfe, 0x94, 0x19, 0x38, 0x01, 0xf6, 0xe1, // ?.?.....V...8... + 0x13, 0x3c, 0x13, 0xe1, 0x01, 0xf6, 0x38, 0x02, 0x14, 0x01, 0x29, 0x3e, 0x01, 0x7e, 0xfe, 0x82, // .<....8...)>.~.. + 0x3e, 0xfe, 0xd7, 0xfe, 0x5b, 0xc7, 0xc7, 0x03, 0x0a, 0x16, 0x1a, 0xfe, 0x9e, 0xfe, 0x0c, 0x07, // >...[........... + 0x0d, 0x32, 0x0c, 0xec, 0xec, 0x0c, 0x1d, 0x15, 0x06, 0x0e, 0x01, 0xf4, 0x01, 0x62, 0x1b, 0x15, // .2...........b.. + 0x25, 0x09, 0x49, 0x01, 0xc7, 0x29, 0x29, 0xfe, 0x39, 0x49, 0x09, 0x00, 0x00, 0x02, 0x00, 0x00, // %.I..)).9I...... + 0xff, 0x80, 0x05, 0x00, 0x05, 0x80, 0x00, 0x15, 0x00, 0x1d, 0x00, 0x00, 0x25, 0x14, 0x06, 0x23, // ............%..# + 0x21, 0x22, 0x26, 0x35, 0x34, 0x3e, 0x03, 0x33, 0x16, 0x20, 0x37, 0x32, 0x1e, 0x03, 0x00, 0x10, // !"&54>.3. 72.... + 0x06, 0x20, 0x26, 0x10, 0x36, 0x20, 0x05, 0x00, 0x7d, 0x58, 0xfc, 0xaa, 0x58, 0x7d, 0x11, 0x2e, // . &.6 ..}X..X}.. + 0x47, 0x75, 0x4c, 0x83, 0x01, 0x6c, 0x83, 0x4c, 0x75, 0x47, 0x2e, 0x11, 0xff, 0x00, 0xe1, 0xfe, // GuL..l.LuG...... + 0xc2, 0xe1, 0xe1, 0x01, 0x3e, 0x89, 0x6d, 0x9c, 0x9c, 0x6d, 0x55, 0x97, 0x99, 0x6d, 0x45, 0x80, // ....>.m..mU..mE. + 0x80, 0x45, 0x6d, 0x99, 0x97, 0x03, 0xc1, 0xfe, 0xc2, 0xe1, 0xe1, 0x01, 0x3e, 0xe1, 0x00, 0x00, // .Em.........>... + 0x00, 0x0b, 0x00, 0x00, 0xff, 0x00, 0x07, 0x80, 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, // .............../ + 0x00, 0x3f, 0x00, 0x4f, 0x00, 0x5f, 0x00, 0x6f, 0x00, 0x7f, 0x00, 0x8f, 0x00, 0x9f, 0x00, 0xaf, // .?.O._.o........ + 0x00, 0x00, 0x05, 0x35, 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, // ...54&+.".....;. + 0x32, 0x36, 0x11, 0x35, 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, // 26.54&+.".....;. + 0x32, 0x36, 0x11, 0x35, 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, // 26.54&+.".....;. + 0x32, 0x36, 0x01, 0x11, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x33, 0x21, // 26..4&#!".....3! + 0x32, 0x36, 0x01, 0x35, 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, // 26.54&+.".....;. + 0x32, 0x36, 0x01, 0x35, 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, // 26.54&+.".....;. + 0x32, 0x36, 0x01, 0x11, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x33, 0x21, // 26..4&#!".....3! + 0x32, 0x36, 0x01, 0x35, 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, // 26.54&+.".....;. + 0x32, 0x36, 0x11, 0x35, 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, // 26.54&+.".....;. + 0x32, 0x36, 0x11, 0x35, 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, // 26.54&+.".....;. + 0x32, 0x36, 0x37, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, // 267...#!"&5.463! + 0x32, 0x16, 0x01, 0x80, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x1a, // 2...&...&&...&&. 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, // ..&&...&&...&&.. - 0x1a, 0x26, 0x80, 0x5e, 0x42, 0xf9, 0xc0, 0x42, 0x5e, 0x5e, 0x42, 0x06, 0x40, 0x42, 0x5e, 0x40, // .&.^B..B^^B.@B^@ + 0x1a, 0x26, 0x04, 0x00, 0x26, 0x1a, 0xfd, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x03, 0x00, 0x1a, 0x26, // .&..&....&&....& + 0xfc, 0x00, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x05, 0x80, 0x26, 0x1a, // ..&...&&...&..&. + 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0xfe, 0x80, 0x26, 0x1a, 0xfd, 0x00, 0x1a, 0x26, // ..&&...&..&....& + 0x26, 0x1a, 0x03, 0x00, 0x1a, 0x26, 0x01, 0x80, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, // &....&..&...&&.. + 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, // .&&...&&...&&... + 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x80, 0x5e, 0x42, 0xf9, 0xc0, 0x42, 0x5e, 0x5e, 0x42, 0x06, // &&...&.^B..B^^B. + 0x40, 0x42, 0x5e, 0x40, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x01, 0x9a, 0x80, // @B^@..&&...&&... + 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x01, 0x9a, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, // .&&...&&....&&.. + 0x1a, 0x26, 0x26, 0xfd, 0x1a, 0x02, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0xfe, 0x00, 0x1a, 0x26, 0x26, // .&&.....&&....&& + 0x04, 0x9a, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0xfb, 0x9a, 0x80, 0x1a, 0x26, // ....&&...&&....& + 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x03, 0x1a, 0x02, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0xfe, 0x00, // &...&&.....&&... + 0x1a, 0x26, 0x26, 0xfe, 0x9a, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x01, 0x9a, // .&&....&&...&&.. 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x01, 0x9a, 0x80, 0x1a, 0x26, 0x26, 0x1a, // ..&&...&&....&&. - 0x80, 0x1a, 0x26, 0x26, 0x01, 0x9a, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0xfd, // ..&&....&&...&&. - 0x1a, 0x02, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0xfe, 0x00, 0x1a, 0x26, 0x26, 0x04, 0x9a, 0x80, 0x1a, // ....&&....&&.... - 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0xfb, 0x9a, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, // &&...&&....&&... - 0x26, 0x26, 0x03, 0x1a, 0x02, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0xfe, 0x00, 0x1a, 0x26, 0x26, 0xfe, // &&.....&&....&&. - 0x9a, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x01, 0x9a, 0x80, 0x1a, 0x26, 0x26, // ...&&...&&....&& - 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x01, 0x9a, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, // ...&&....&&...&& - 0xba, 0xfa, 0xc0, 0x42, 0x5e, 0x5e, 0x42, 0x05, 0x40, 0x42, 0x5e, 0x5e, 0x00, 0x04, 0x00, 0x00, // ...B^^B.@B^^.... - 0x00, 0x00, 0x06, 0x80, 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x3f, 0x00, 0x00, // .........../.?.. - 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // ....#!"&5.463!2. - 0x19, 0x01, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // ....#!"&5.463!2. - 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // ....#!"&5.463!2. - 0x19, 0x01, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // ....#!"&5.463!2. - 0x03, 0x00, 0x4c, 0x34, 0xfe, 0x00, 0x34, 0x4c, 0x4c, 0x34, 0x02, 0x00, 0x34, 0x4c, 0x4c, 0x34, // ..L4..4LL4..4LL4 - 0xfe, 0x00, 0x34, 0x4c, 0x4c, 0x34, 0x02, 0x00, 0x34, 0x4c, 0x03, 0x80, 0x4c, 0x34, 0xfe, 0x00, // ..4LL4..4L..L4.. - 0x34, 0x4c, 0x4c, 0x34, 0x02, 0x00, 0x34, 0x4c, 0x4c, 0x34, 0xfe, 0x00, 0x34, 0x4c, 0x4c, 0x34, // 4LL4..4LL4..4LL4 - 0x02, 0x00, 0x34, 0x4c, 0x02, 0x00, 0xfe, 0x80, 0x34, 0x4c, 0x4c, 0x34, 0x01, 0x80, 0x34, 0x4c, // ..4L....4LL4..4L - 0x4c, 0x02, 0xcc, 0xfe, 0x80, 0x34, 0x4c, 0x4c, 0x34, 0x01, 0x80, 0x34, 0x4c, 0x4c, 0xfc, 0xcc, // L....4LL4..4LL.. - 0xfe, 0x80, 0x34, 0x4c, 0x4c, 0x34, 0x01, 0x80, 0x34, 0x4c, 0x4c, 0x02, 0xcc, 0xfe, 0x80, 0x34, // ..4LL4..4LL....4 - 0x4c, 0x4c, 0x34, 0x01, 0x80, 0x34, 0x4c, 0x4c, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, // LL4..4LL........ - 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x3f, 0x00, 0x4f, 0x00, 0x5f, 0x00, 0x6f, // ......./.?.O._.o - 0x00, 0x7f, 0x00, 0x8f, 0x00, 0x00, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, // ..........#!"&=. - 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, // 463!2.....#!"&=. - 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, // 463!2.....#!"&=. - 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, // 463!2.....#!"&=. - 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, // 463!2.....#!"&=. - 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, // 463!2.....#!"&=. - 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, // 463!2.....#!"&=. - 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, // 463!2.....#!"&=. - 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, // 463!2.....#!"&=. - 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x02, 0x00, 0x38, 0x28, 0xfe, 0xc0, 0x28, 0x38, 0x38, 0x28, // 463!2...8(..(88( - 0x01, 0x40, 0x28, 0x38, 0x38, 0x28, 0xfe, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x01, 0x40, 0x28, 0x38, // .@(88(..(88(.@(8 - 0x02, 0x80, 0x38, 0x28, 0xfe, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x01, 0x40, 0x28, 0x38, 0xfd, 0x80, // ..8(..(88(.@(8.. - 0x38, 0x28, 0xfe, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x01, 0x40, 0x28, 0x38, 0x02, 0x80, 0x38, 0x28, // 8(..(88(.@(8..8( + 0x80, 0x1a, 0x26, 0x26, 0xba, 0xfa, 0xc0, 0x42, 0x5e, 0x5e, 0x42, 0x05, 0x40, 0x42, 0x5e, 0x5e, // ..&&...B^^B.@B^^ + 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x06, 0x80, 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, // .............../ + 0x00, 0x3f, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, // .?......#!"&5.46 + 0x33, 0x21, 0x32, 0x16, 0x19, 0x01, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, // 3!2.....#!"&5.46 + 0x33, 0x21, 0x32, 0x16, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, // 3!2.....#!"&5.46 + 0x33, 0x21, 0x32, 0x16, 0x19, 0x01, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, // 3!2.....#!"&5.46 + 0x33, 0x21, 0x32, 0x16, 0x03, 0x00, 0x4c, 0x34, 0xfe, 0x00, 0x34, 0x4c, 0x4c, 0x34, 0x02, 0x00, // 3!2...L4..4LL4.. + 0x34, 0x4c, 0x4c, 0x34, 0xfe, 0x00, 0x34, 0x4c, 0x4c, 0x34, 0x02, 0x00, 0x34, 0x4c, 0x03, 0x80, // 4LL4..4LL4..4L.. + 0x4c, 0x34, 0xfe, 0x00, 0x34, 0x4c, 0x4c, 0x34, 0x02, 0x00, 0x34, 0x4c, 0x4c, 0x34, 0xfe, 0x00, // L4..4LL4..4LL4.. + 0x34, 0x4c, 0x4c, 0x34, 0x02, 0x00, 0x34, 0x4c, 0x02, 0x00, 0xfe, 0x80, 0x34, 0x4c, 0x4c, 0x34, // 4LL4..4L....4LL4 + 0x01, 0x80, 0x34, 0x4c, 0x4c, 0x02, 0xcc, 0xfe, 0x80, 0x34, 0x4c, 0x4c, 0x34, 0x01, 0x80, 0x34, // ..4LL....4LL4..4 + 0x4c, 0x4c, 0xfc, 0xcc, 0xfe, 0x80, 0x34, 0x4c, 0x4c, 0x34, 0x01, 0x80, 0x34, 0x4c, 0x4c, 0x02, // LL....4LL4..4LL. + 0xcc, 0xfe, 0x80, 0x34, 0x4c, 0x4c, 0x34, 0x01, 0x80, 0x34, 0x4c, 0x4c, 0x00, 0x09, 0x00, 0x00, // ...4LL4..4LL.... + 0x00, 0x00, 0x07, 0x00, 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x3f, 0x00, 0x4f, // .........../.?.O + 0x00, 0x5f, 0x00, 0x6f, 0x00, 0x7f, 0x00, 0x8f, 0x00, 0x00, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, // ._.o..........#! + 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x23, 0x21, // "&=.463!2.....#! + 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, // "&=.463!2.....#! + 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, // "&=.463!2.....#! + 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, // "&=.463!2.....#! + 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, // "&=.463!2.....#! + 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, // "&=.463!2.....#! + 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, // "&=.463!2.....#! + 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x23, 0x21, // "&=.463!2.....#! + 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x02, 0x00, 0x38, 0x28, 0xfe, 0xc0, // "&=.463!2...8(.. + 0x28, 0x38, 0x38, 0x28, 0x01, 0x40, 0x28, 0x38, 0x38, 0x28, 0xfe, 0xc0, 0x28, 0x38, 0x38, 0x28, // (88(.@(88(..(88( + 0x01, 0x40, 0x28, 0x38, 0x02, 0x80, 0x38, 0x28, 0xfe, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x01, 0x40, // .@(8..8(..(88(.@ + 0x28, 0x38, 0xfd, 0x80, 0x38, 0x28, 0xfe, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x01, 0x40, 0x28, 0x38, // (8..8(..(88(.@(8 + 0x02, 0x80, 0x38, 0x28, 0xfe, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x01, 0x40, 0x28, 0x38, 0x02, 0x80, // ..8(..(88(.@(8.. + 0x38, 0x28, 0xfe, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x01, 0x40, 0x28, 0x38, 0xfd, 0x80, 0x38, 0x28, // 8(..(88(.@(8..8( 0xfe, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x01, 0x40, 0x28, 0x38, 0x02, 0x80, 0x38, 0x28, 0xfe, 0xc0, // ..(88(.@(8..8(.. - 0x28, 0x38, 0x38, 0x28, 0x01, 0x40, 0x28, 0x38, 0xfd, 0x80, 0x38, 0x28, 0xfe, 0xc0, 0x28, 0x38, // (88(.@(8..8(..(8 - 0x38, 0x28, 0x01, 0x40, 0x28, 0x38, 0x02, 0x80, 0x38, 0x28, 0xfe, 0xc0, 0x28, 0x38, 0x38, 0x28, // 8(.@(8..8(..(88( - 0x01, 0x40, 0x28, 0x38, 0x38, 0x28, 0xfe, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x01, 0x40, 0x28, 0x38, // .@(88(..(88(.@(8 + 0x28, 0x38, 0x38, 0x28, 0x01, 0x40, 0x28, 0x38, 0x38, 0x28, 0xfe, 0xc0, 0x28, 0x38, 0x38, 0x28, // (88(.@(88(..(88( + 0x01, 0x40, 0x28, 0x38, 0x01, 0x20, 0xc0, 0x28, 0x38, 0x38, 0x28, 0xc0, 0x28, 0x38, 0x38, 0x01, // .@(8. .(88(.(88. + 0xd8, 0xc0, 0x28, 0x38, 0x38, 0x28, 0xc0, 0x28, 0x38, 0x38, 0xfd, 0xd8, 0xc0, 0x28, 0x38, 0x38, // ..(88(.(88...(88 + 0x28, 0xc0, 0x28, 0x38, 0x38, 0x03, 0xd8, 0xc0, 0x28, 0x38, 0x38, 0x28, 0xc0, 0x28, 0x38, 0x38, // (.(88...(88(.(88 + 0xfd, 0xd8, 0xc0, 0x28, 0x38, 0x38, 0x28, 0xc0, 0x28, 0x38, 0x38, 0xfd, 0xd8, 0xc0, 0x28, 0x38, // ...(88(.(88...(8 + 0x38, 0x28, 0xc0, 0x28, 0x38, 0x38, 0x03, 0xd8, 0xc0, 0x28, 0x38, 0x38, 0x28, 0xc0, 0x28, 0x38, // 8(.(88...(88(.(8 + 0x38, 0xfd, 0xd8, 0xc0, 0x28, 0x38, 0x38, 0x28, 0xc0, 0x28, 0x38, 0x38, 0x01, 0xd8, 0xc0, 0x28, // 8...(88(.(88...( + 0x38, 0x38, 0x28, 0xc0, 0x28, 0x38, 0x38, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, // 88(.(88......... + 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x3f, 0x00, 0x4f, 0x00, 0x5f, 0x00, 0x00, // ......./.?.O._.. + 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // ....#!"&=.463!2. + 0x11, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // ....#!"&=.463!2. + 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // ....#!"&=.463!2. + 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // ....#!"&=.463!2. + 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // ....#!"&=.463!2. + 0x11, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // ....#!"&=.463!2. + 0x02, 0x00, 0x38, 0x28, 0xfe, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x01, 0x40, 0x28, 0x38, 0x38, 0x28, // ..8(..(88(.@(88( + 0xfe, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x01, 0x40, 0x28, 0x38, 0x05, 0x00, 0x38, 0x28, 0xfc, 0x40, // ..(88(.@(8..8(.@ + 0x28, 0x38, 0x38, 0x28, 0x03, 0xc0, 0x28, 0x38, 0xfb, 0x00, 0x38, 0x28, 0xfe, 0xc0, 0x28, 0x38, // (88(..(8..8(..(8 + 0x38, 0x28, 0x01, 0x40, 0x28, 0x38, 0x05, 0x00, 0x38, 0x28, 0xfc, 0x40, 0x28, 0x38, 0x38, 0x28, // 8(.@(8..8(.@(88( + 0x03, 0xc0, 0x28, 0x38, 0x38, 0x28, 0xfc, 0x40, 0x28, 0x38, 0x38, 0x28, 0x03, 0xc0, 0x28, 0x38, // ..(88(.@(88(..(8 0x01, 0x20, 0xc0, 0x28, 0x38, 0x38, 0x28, 0xc0, 0x28, 0x38, 0x38, 0x01, 0xd8, 0xc0, 0x28, 0x38, // . .(88(.(88...(8 0x38, 0x28, 0xc0, 0x28, 0x38, 0x38, 0xfd, 0xd8, 0xc0, 0x28, 0x38, 0x38, 0x28, 0xc0, 0x28, 0x38, // 8(.(88...(88(.(8 0x38, 0x03, 0xd8, 0xc0, 0x28, 0x38, 0x38, 0x28, 0xc0, 0x28, 0x38, 0x38, 0xfd, 0xd8, 0xc0, 0x28, // 8...(88(.(88...( - 0x38, 0x38, 0x28, 0xc0, 0x28, 0x38, 0x38, 0xfd, 0xd8, 0xc0, 0x28, 0x38, 0x38, 0x28, 0xc0, 0x28, // 88(.(88...(88(.( - 0x38, 0x38, 0x03, 0xd8, 0xc0, 0x28, 0x38, 0x38, 0x28, 0xc0, 0x28, 0x38, 0x38, 0xfd, 0xd8, 0xc0, // 88...(88(.(88... - 0x28, 0x38, 0x38, 0x28, 0xc0, 0x28, 0x38, 0x38, 0x01, 0xd8, 0xc0, 0x28, 0x38, 0x38, 0x28, 0xc0, // (88(.(88...(88(. - 0x28, 0x38, 0x38, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x05, 0x80, 0x00, 0x0f, // (88............. - 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x3f, 0x00, 0x4f, 0x00, 0x5f, 0x00, 0x00, 0x01, 0x15, 0x14, 0x06, // .../.?.O._...... - 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, // #!"&=.463!2..... - 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, // #!"&=.463!2..... - 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, // #!"&=.463!2..... - 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, // #!"&=.463!2..... - 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, // #!"&=.463!2..... - 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x02, 0x00, 0x38, 0x28, // #!"&=.463!2...8( - 0xfe, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x01, 0x40, 0x28, 0x38, 0x38, 0x28, 0xfe, 0xc0, 0x28, 0x38, // ..(88(.@(88(..(8 - 0x38, 0x28, 0x01, 0x40, 0x28, 0x38, 0x05, 0x00, 0x38, 0x28, 0xfc, 0x40, 0x28, 0x38, 0x38, 0x28, // 8(.@(8..8(.@(88( - 0x03, 0xc0, 0x28, 0x38, 0xfb, 0x00, 0x38, 0x28, 0xfe, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x01, 0x40, // ..(8..8(..(88(.@ - 0x28, 0x38, 0x05, 0x00, 0x38, 0x28, 0xfc, 0x40, 0x28, 0x38, 0x38, 0x28, 0x03, 0xc0, 0x28, 0x38, // (8..8(.@(88(..(8 - 0x38, 0x28, 0xfc, 0x40, 0x28, 0x38, 0x38, 0x28, 0x03, 0xc0, 0x28, 0x38, 0x01, 0x20, 0xc0, 0x28, // 8(.@(88(..(8. .( 0x38, 0x38, 0x28, 0xc0, 0x28, 0x38, 0x38, 0x01, 0xd8, 0xc0, 0x28, 0x38, 0x38, 0x28, 0xc0, 0x28, // 88(.(88...(88(.( - 0x38, 0x38, 0xfd, 0xd8, 0xc0, 0x28, 0x38, 0x38, 0x28, 0xc0, 0x28, 0x38, 0x38, 0x03, 0xd8, 0xc0, // 88...(88(.(88... - 0x28, 0x38, 0x38, 0x28, 0xc0, 0x28, 0x38, 0x38, 0xfd, 0xd8, 0xc0, 0x28, 0x38, 0x38, 0x28, 0xc0, // (88(.(88...(88(. - 0x28, 0x38, 0x38, 0x01, 0xd8, 0xc0, 0x28, 0x38, 0x38, 0x28, 0xc0, 0x28, 0x38, 0x38, 0x00, 0x00, // (88...(88(.(88.. - 0x00, 0x01, 0x00, 0x79, 0x00, 0x0e, 0x06, 0x87, 0x04, 0xb2, 0x00, 0x16, 0x00, 0x00, 0x00, 0x14, // ...y............ - 0x07, 0x01, 0x07, 0x06, 0x22, 0x2f, 0x01, 0x01, 0x26, 0x34, 0x3f, 0x01, 0x36, 0x32, 0x17, 0x09, // ...."/..&4?.62.. - 0x01, 0x36, 0x32, 0x1f, 0x01, 0x06, 0x87, 0x1c, 0xfd, 0x2c, 0x88, 0x1c, 0x50, 0x1c, 0x88, 0xfe, // .62......,..P... - 0x96, 0x1c, 0x1c, 0x88, 0x1c, 0x50, 0x1c, 0x01, 0x26, 0x02, 0x90, 0x1c, 0x50, 0x1c, 0x88, 0x03, // .....P..&...P... - 0xf2, 0x50, 0x1c, 0xfd, 0x2c, 0x88, 0x1c, 0x1c, 0x88, 0x01, 0x6a, 0x1c, 0x50, 0x1c, 0x88, 0x1c, // .P..,.....j.P... - 0x1c, 0xfe, 0xd9, 0x02, 0x91, 0x1c, 0x1c, 0x88, 0x00, 0x01, 0x00, 0x6e, 0xff, 0xee, 0x05, 0x12, // ...........n.... - 0x04, 0x92, 0x00, 0x23, 0x00, 0x00, 0x24, 0x14, 0x0f, 0x01, 0x06, 0x22, 0x27, 0x09, 0x01, 0x06, // ...#..$...."'... - 0x22, 0x2f, 0x01, 0x26, 0x34, 0x37, 0x09, 0x01, 0x26, 0x34, 0x3f, 0x01, 0x36, 0x32, 0x17, 0x09, // "/.&47..&4?.62.. - 0x01, 0x36, 0x32, 0x1f, 0x01, 0x16, 0x14, 0x07, 0x09, 0x01, 0x05, 0x12, 0x1c, 0x88, 0x1c, 0x50, // .62............P - 0x1c, 0xfe, 0xda, 0xfe, 0xda, 0x1c, 0x50, 0x1c, 0x88, 0x1c, 0x1c, 0x01, 0x26, 0xfe, 0xda, 0x1c, // ......P.....&... - 0x1c, 0x88, 0x1c, 0x50, 0x1c, 0x01, 0x26, 0x01, 0x26, 0x1c, 0x50, 0x1c, 0x88, 0x1c, 0x1c, 0xfe, // ...P..&.&.P..... - 0xda, 0x01, 0x26, 0xfe, 0x50, 0x1c, 0x88, 0x1c, 0x1c, 0x01, 0x26, 0xfe, 0xda, 0x1c, 0x1c, 0x88, // ..&.P.....&..... - 0x1c, 0x50, 0x1c, 0x01, 0x26, 0x01, 0x26, 0x1c, 0x50, 0x1c, 0x88, 0x1c, 0x1c, 0xfe, 0xda, 0x01, // .P..&.&.P....... - 0x26, 0x1c, 0x1c, 0x88, 0x1c, 0x50, 0x1c, 0xfe, 0xda, 0xfe, 0xda, 0x00, 0x00, 0x03, 0x00, 0x00, // &....P.......... - 0xff, 0x00, 0x06, 0x80, 0x05, 0x80, 0x00, 0x23, 0x00, 0x2b, 0x00, 0x44, 0x00, 0x00, 0x01, 0x15, // .......#.+.D.... - 0x14, 0x06, 0x2b, 0x01, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x23, 0x22, 0x26, // ..+....+."&=.#"& - 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x35, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x1d, 0x01, 0x33, // =.46;.546;.2...3 - 0x32, 0x1e, 0x01, 0x10, 0x00, 0x20, 0x00, 0x10, 0x00, 0x20, 0x00, 0x14, 0x06, 0x23, 0x22, 0x27, // 2.... ... ...#"' - 0x01, 0x06, 0x23, 0x22, 0x24, 0x26, 0x02, 0x10, 0x12, 0x36, 0x24, 0x20, 0x04, 0x16, 0x12, 0x15, // ..#"$&...6$ .... - 0x14, 0x07, 0x01, 0x04, 0x00, 0x13, 0x0d, 0xe0, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0xe0, 0x0d, 0x13, // ..........@..... - 0x13, 0x0d, 0xe0, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0xe0, 0x0d, 0x13, 0x80, 0xfe, 0xf9, 0xfe, 0x8e, // .....@.......... - 0xfe, 0xf9, 0x01, 0x07, 0x01, 0x72, 0x03, 0x07, 0x4b, 0x35, 0x36, 0x24, 0xfe, 0xa9, 0xb3, 0xdc, // .....r..K56$.... - 0x8f, 0xfe, 0xfb, 0xbd, 0x6f, 0x6f, 0xbd, 0x01, 0x05, 0x01, 0x1e, 0x01, 0x05, 0xbd, 0x6f, 0x7c, // ....oo........o| - 0x01, 0x57, 0x02, 0xe0, 0x40, 0x0d, 0x13, 0xe0, 0x0d, 0x13, 0x13, 0x0d, 0xe0, 0x13, 0x0d, 0x40, // .W..@..........@ - 0x0d, 0x13, 0xe0, 0x0d, 0x13, 0x13, 0x0d, 0xe0, 0x13, 0xe6, 0x01, 0x72, 0x01, 0x07, 0xfe, 0xf9, // ...........r.... - 0xfe, 0x8e, 0xfe, 0xf9, 0xfe, 0xb5, 0x6a, 0x4b, 0x26, 0x01, 0x56, 0x7c, 0x6f, 0xbd, 0x01, 0x05, // ......jK&.V|o... - 0x01, 0x1e, 0x01, 0x05, 0xbd, 0x6f, 0x6f, 0xbd, 0xfe, 0xfb, 0x8f, 0xdc, 0xb3, 0xfe, 0xa9, 0x00, // .....oo......... - 0x00, 0x03, 0x00, 0x00, 0xff, 0x00, 0x06, 0x80, 0x05, 0x80, 0x00, 0x0f, 0x00, 0x17, 0x00, 0x30, // ...............0 - 0x00, 0x00, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, // ......#!"&=.463! - 0x32, 0x1e, 0x01, 0x10, 0x00, 0x20, 0x00, 0x10, 0x00, 0x20, 0x00, 0x14, 0x06, 0x23, 0x22, 0x27, // 2.... ... ...#"' - 0x01, 0x06, 0x23, 0x22, 0x24, 0x26, 0x02, 0x10, 0x12, 0x36, 0x24, 0x20, 0x04, 0x16, 0x12, 0x15, // ..#"$&...6$ .... - 0x14, 0x07, 0x01, 0x04, 0x00, 0x13, 0x0d, 0xfd, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0x02, 0x40, 0x0d, // ..............@. - 0x13, 0x80, 0xfe, 0xf9, 0xfe, 0x8e, 0xfe, 0xf9, 0x01, 0x07, 0x01, 0x72, 0x03, 0x07, 0x4b, 0x35, // ...........r..K5 - 0x36, 0x24, 0xfe, 0xa9, 0xb3, 0xdc, 0x8f, 0xfe, 0xfb, 0xbd, 0x6f, 0x6f, 0xbd, 0x01, 0x05, 0x01, // 6$........oo.... - 0x1e, 0x01, 0x05, 0xbd, 0x6f, 0x7c, 0x01, 0x57, 0x02, 0xe0, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, // ....o|.W..@....@ - 0x0d, 0x13, 0x13, 0xe6, 0x01, 0x72, 0x01, 0x07, 0xfe, 0xf9, 0xfe, 0x8e, 0xfe, 0xf9, 0xfe, 0xb5, // .....r.......... - 0x6a, 0x4b, 0x26, 0x01, 0x56, 0x7c, 0x6f, 0xbd, 0x01, 0x05, 0x01, 0x1e, 0x01, 0x05, 0xbd, 0x6f, // jK&.V|o........o - 0x6f, 0xbd, 0xfe, 0xfb, 0x8f, 0xdc, 0xb3, 0xfe, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // o............... - 0xff, 0x80, 0x06, 0x00, 0x06, 0x00, 0x00, 0x29, 0x00, 0x35, 0x00, 0x00, 0x01, 0x14, 0x02, 0x06, // .......).5...... - 0x04, 0x20, 0x24, 0x26, 0x02, 0x35, 0x34, 0x12, 0x37, 0x36, 0x16, 0x17, 0x16, 0x06, 0x07, 0x0e, // . $&.54.76...... - 0x01, 0x15, 0x14, 0x1e, 0x02, 0x32, 0x3e, 0x02, 0x35, 0x34, 0x26, 0x27, 0x2e, 0x01, 0x37, 0x3e, // .....2>.54&'..7> - 0x01, 0x17, 0x16, 0x12, 0x01, 0x11, 0x14, 0x06, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x32, 0x16, // ........"&5.462. - 0x06, 0x00, 0x7a, 0xce, 0xfe, 0xe4, 0xfe, 0xc8, 0xfe, 0xe4, 0xce, 0x7a, 0xa1, 0x92, 0x2b, 0x69, // ..z........z..+i - 0x1f, 0x20, 0x0f, 0x2a, 0x62, 0x6b, 0x51, 0x8a, 0xbd, 0xd0, 0xbd, 0x8a, 0x51, 0x6b, 0x62, 0x2a, // . .*bkQ.....Qkb* - 0x0f, 0x20, 0x1f, 0x6a, 0x2a, 0x92, 0xa1, 0xfd, 0x80, 0x4c, 0x68, 0x4c, 0x4c, 0x68, 0x4c, 0x02, // . .j*....LhLLhL. - 0x80, 0x9c, 0xfe, 0xe4, 0xce, 0x7a, 0x7a, 0xce, 0x01, 0x1c, 0x9c, 0xb6, 0x01, 0x42, 0x6d, 0x20, // .....zz......Bm - 0x0e, 0x2b, 0x2a, 0x69, 0x20, 0x4a, 0xd6, 0x79, 0x68, 0xbd, 0x8a, 0x51, 0x51, 0x8a, 0xbd, 0x68, // .+*i J.yh..QQ..h - 0x79, 0xd6, 0x4a, 0x20, 0x69, 0x2a, 0x2b, 0x0e, 0x20, 0x6d, 0xfe, 0xbe, 0x02, 0x4a, 0xfd, 0x80, // y.J i*+. m...J.. - 0x34, 0x4c, 0x4c, 0x34, 0x02, 0x80, 0x34, 0x4c, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, // 4LL4..4LL....... - 0xff, 0x80, 0x07, 0x00, 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x3f, 0x00, 0x4f, // .........../.?.O - 0x00, 0x00, 0x25, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, // ..%...+."&=.46;. - 0x32, 0x16, 0x25, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x3b, 0x01, // 2.%...+."&5.46;. - 0x32, 0x16, 0x25, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x3b, 0x01, // 2.%...+."&5.46;. - 0x32, 0x16, 0x01, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x3b, 0x01, // 2.....+."&5.46;. - 0x32, 0x16, 0x01, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x3b, 0x01, // 2.....+."&5.46;. - 0x32, 0x16, 0x01, 0x00, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x01, 0x80, // 2............... + 0x38, 0x38, 0x00, 0x00, 0x00, 0x01, 0x00, 0x79, 0x00, 0x0e, 0x06, 0x87, 0x04, 0xb2, 0x00, 0x16, // 88.....y........ + 0x00, 0x00, 0x00, 0x14, 0x07, 0x01, 0x07, 0x06, 0x22, 0x2f, 0x01, 0x01, 0x26, 0x34, 0x3f, 0x01, // ........"/..&4?. + 0x36, 0x32, 0x17, 0x09, 0x01, 0x36, 0x32, 0x1f, 0x01, 0x06, 0x87, 0x1c, 0xfd, 0x2c, 0x88, 0x1c, // 62...62......,.. + 0x50, 0x1c, 0x88, 0xfe, 0x96, 0x1c, 0x1c, 0x88, 0x1c, 0x50, 0x1c, 0x01, 0x26, 0x02, 0x90, 0x1c, // P........P..&... + 0x50, 0x1c, 0x88, 0x03, 0xf2, 0x50, 0x1c, 0xfd, 0x2c, 0x88, 0x1c, 0x1c, 0x88, 0x01, 0x6a, 0x1c, // P....P..,.....j. + 0x50, 0x1c, 0x88, 0x1c, 0x1c, 0xfe, 0xd9, 0x02, 0x91, 0x1c, 0x1c, 0x88, 0x00, 0x01, 0x00, 0x6e, // P..............n + 0xff, 0xee, 0x05, 0x12, 0x04, 0x92, 0x00, 0x23, 0x00, 0x00, 0x24, 0x14, 0x0f, 0x01, 0x06, 0x22, // .......#..$...." + 0x27, 0x09, 0x01, 0x06, 0x22, 0x2f, 0x01, 0x26, 0x34, 0x37, 0x09, 0x01, 0x26, 0x34, 0x3f, 0x01, // '..."/.&47..&4?. + 0x36, 0x32, 0x17, 0x09, 0x01, 0x36, 0x32, 0x1f, 0x01, 0x16, 0x14, 0x07, 0x09, 0x01, 0x05, 0x12, // 62...62......... + 0x1c, 0x88, 0x1c, 0x50, 0x1c, 0xfe, 0xda, 0xfe, 0xda, 0x1c, 0x50, 0x1c, 0x88, 0x1c, 0x1c, 0x01, // ...P......P..... + 0x26, 0xfe, 0xda, 0x1c, 0x1c, 0x88, 0x1c, 0x50, 0x1c, 0x01, 0x26, 0x01, 0x26, 0x1c, 0x50, 0x1c, // &......P..&.&.P. + 0x88, 0x1c, 0x1c, 0xfe, 0xda, 0x01, 0x26, 0xfe, 0x50, 0x1c, 0x88, 0x1c, 0x1c, 0x01, 0x26, 0xfe, // ......&.P.....&. + 0xda, 0x1c, 0x1c, 0x88, 0x1c, 0x50, 0x1c, 0x01, 0x26, 0x01, 0x26, 0x1c, 0x50, 0x1c, 0x88, 0x1c, // .....P..&.&.P... + 0x1c, 0xfe, 0xda, 0x01, 0x26, 0x1c, 0x1c, 0x88, 0x1c, 0x50, 0x1c, 0xfe, 0xda, 0xfe, 0xda, 0x00, // ....&....P...... + 0x00, 0x03, 0x00, 0x00, 0xff, 0x00, 0x06, 0x80, 0x05, 0x80, 0x00, 0x23, 0x00, 0x2b, 0x00, 0x44, // ...........#.+.D + 0x00, 0x00, 0x01, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, // ......+....+."&= + 0x01, 0x23, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x35, 0x34, 0x36, 0x3b, 0x01, 0x32, // .#"&=.46;.546;.2 + 0x16, 0x1d, 0x01, 0x33, 0x32, 0x1e, 0x01, 0x10, 0x00, 0x20, 0x00, 0x10, 0x00, 0x20, 0x00, 0x14, // ...32.... ... .. + 0x06, 0x23, 0x22, 0x27, 0x01, 0x06, 0x23, 0x22, 0x24, 0x26, 0x02, 0x10, 0x12, 0x36, 0x24, 0x20, // .#"'..#"$&...6$ + 0x04, 0x16, 0x12, 0x15, 0x14, 0x07, 0x01, 0x04, 0x00, 0x13, 0x0d, 0xe0, 0x13, 0x0d, 0x40, 0x0d, // ..............@. + 0x13, 0xe0, 0x0d, 0x13, 0x13, 0x0d, 0xe0, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0xe0, 0x0d, 0x13, 0x80, // .........@...... + 0xfe, 0xf9, 0xfe, 0x8e, 0xfe, 0xf9, 0x01, 0x07, 0x01, 0x72, 0x03, 0x07, 0x4b, 0x35, 0x36, 0x24, // .........r..K56$ + 0xfe, 0xa9, 0xb3, 0xdc, 0x8f, 0xfe, 0xfb, 0xbd, 0x6f, 0x6f, 0xbd, 0x01, 0x05, 0x01, 0x1e, 0x01, // ........oo...... + 0x05, 0xbd, 0x6f, 0x7c, 0x01, 0x57, 0x02, 0xe0, 0x40, 0x0d, 0x13, 0xe0, 0x0d, 0x13, 0x13, 0x0d, // ..o|.W..@....... + 0xe0, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0xe0, 0x0d, 0x13, 0x13, 0x0d, 0xe0, 0x13, 0xe6, 0x01, 0x72, // ...@...........r + 0x01, 0x07, 0xfe, 0xf9, 0xfe, 0x8e, 0xfe, 0xf9, 0xfe, 0xb5, 0x6a, 0x4b, 0x26, 0x01, 0x56, 0x7c, // ..........jK&.V| + 0x6f, 0xbd, 0x01, 0x05, 0x01, 0x1e, 0x01, 0x05, 0xbd, 0x6f, 0x6f, 0xbd, 0xfe, 0xfb, 0x8f, 0xdc, // o........oo..... + 0xb3, 0xfe, 0xa9, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x00, 0x06, 0x80, 0x05, 0x80, 0x00, 0x0f, // ................ + 0x00, 0x17, 0x00, 0x30, 0x00, 0x00, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, // ...0......#!"&=. + 0x34, 0x36, 0x33, 0x21, 0x32, 0x1e, 0x01, 0x10, 0x00, 0x20, 0x00, 0x10, 0x00, 0x20, 0x00, 0x14, // 463!2.... ... .. + 0x06, 0x23, 0x22, 0x27, 0x01, 0x06, 0x23, 0x22, 0x24, 0x26, 0x02, 0x10, 0x12, 0x36, 0x24, 0x20, // .#"'..#"$&...6$ + 0x04, 0x16, 0x12, 0x15, 0x14, 0x07, 0x01, 0x04, 0x00, 0x13, 0x0d, 0xfd, 0xc0, 0x0d, 0x13, 0x13, // ................ + 0x0d, 0x02, 0x40, 0x0d, 0x13, 0x80, 0xfe, 0xf9, 0xfe, 0x8e, 0xfe, 0xf9, 0x01, 0x07, 0x01, 0x72, // ..@............r + 0x03, 0x07, 0x4b, 0x35, 0x36, 0x24, 0xfe, 0xa9, 0xb3, 0xdc, 0x8f, 0xfe, 0xfb, 0xbd, 0x6f, 0x6f, // ..K56$........oo + 0xbd, 0x01, 0x05, 0x01, 0x1e, 0x01, 0x05, 0xbd, 0x6f, 0x7c, 0x01, 0x57, 0x02, 0xe0, 0x40, 0x0d, // ........o|.W..@. + 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0xe6, 0x01, 0x72, 0x01, 0x07, 0xfe, 0xf9, 0xfe, 0x8e, // ...@.....r...... + 0xfe, 0xf9, 0xfe, 0xb5, 0x6a, 0x4b, 0x26, 0x01, 0x56, 0x7c, 0x6f, 0xbd, 0x01, 0x05, 0x01, 0x1e, // ....jK&.V|o..... + 0x01, 0x05, 0xbd, 0x6f, 0x6f, 0xbd, 0xfe, 0xfb, 0x8f, 0xdc, 0xb3, 0xfe, 0xa9, 0x00, 0x00, 0x00, // ...oo........... + 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x06, 0x00, 0x00, 0x29, 0x00, 0x35, 0x00, 0x00, // ...........).5.. + 0x01, 0x14, 0x02, 0x06, 0x04, 0x20, 0x24, 0x26, 0x02, 0x35, 0x34, 0x12, 0x37, 0x36, 0x16, 0x17, // ..... $&.54.76.. + 0x16, 0x06, 0x07, 0x0e, 0x01, 0x15, 0x14, 0x1e, 0x02, 0x32, 0x3e, 0x02, 0x35, 0x34, 0x26, 0x27, // .........2>.54&' + 0x2e, 0x01, 0x37, 0x3e, 0x01, 0x17, 0x16, 0x12, 0x01, 0x11, 0x14, 0x06, 0x22, 0x26, 0x35, 0x11, // ..7>........"&5. + 0x34, 0x36, 0x32, 0x16, 0x06, 0x00, 0x7a, 0xce, 0xfe, 0xe4, 0xfe, 0xc8, 0xfe, 0xe4, 0xce, 0x7a, // 462...z........z + 0xa1, 0x92, 0x2b, 0x69, 0x1f, 0x20, 0x0f, 0x2a, 0x62, 0x6b, 0x51, 0x8a, 0xbd, 0xd0, 0xbd, 0x8a, // ..+i. .*bkQ..... + 0x51, 0x6b, 0x62, 0x2a, 0x0f, 0x20, 0x1f, 0x6a, 0x2a, 0x92, 0xa1, 0xfd, 0x80, 0x4c, 0x68, 0x4c, // Qkb*. .j*....LhL + 0x4c, 0x68, 0x4c, 0x02, 0x80, 0x9c, 0xfe, 0xe4, 0xce, 0x7a, 0x7a, 0xce, 0x01, 0x1c, 0x9c, 0xb6, // LhL......zz..... + 0x01, 0x42, 0x6d, 0x20, 0x0e, 0x2b, 0x2a, 0x69, 0x20, 0x4a, 0xd6, 0x79, 0x68, 0xbd, 0x8a, 0x51, // .Bm .+*i J.yh..Q + 0x51, 0x8a, 0xbd, 0x68, 0x79, 0xd6, 0x4a, 0x20, 0x69, 0x2a, 0x2b, 0x0e, 0x20, 0x6d, 0xfe, 0xbe, // Q..hy.J i*+. m.. + 0x02, 0x4a, 0xfd, 0x80, 0x34, 0x4c, 0x4c, 0x34, 0x02, 0x80, 0x34, 0x4c, 0x4c, 0x00, 0x00, 0x00, // .J..4LL4..4LL... + 0x00, 0x05, 0x00, 0x00, 0xff, 0x80, 0x07, 0x00, 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, // .............../ + 0x00, 0x3f, 0x00, 0x4f, 0x00, 0x00, 0x25, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, // .?.O..%...+."&=. + 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x25, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, // 46;.2.%...+."&5. + 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x25, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, // 46;.2.%...+."&5. + 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x01, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, // 46;.2.....+."&5. + 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x01, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, // 46;.2.....+."&5. + 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x01, 0x00, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, // 46;.2........... + 0x0e, 0x12, 0x01, 0x80, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x01, 0x80, // ................ 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x01, 0x80, 0x12, 0x0e, 0xc0, 0x0e, // ................ 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x01, 0x80, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, // ................ - 0x0e, 0x12, 0x01, 0x80, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x60, 0xc0, // ..............`. - 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x72, 0xfe, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0x01, // ........r....... - 0x40, 0x0e, 0x12, 0x12, 0xf2, 0xfd, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0x02, 0x40, 0x0e, 0x12, 0x12, // @...........@... - 0x01, 0x72, 0xfc, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x03, 0xc0, 0x0e, 0x12, 0x12, 0x01, 0xf2, 0xfa, // .r.@............ - 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x05, 0xc0, 0x0e, 0x12, 0x12, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // @............... - 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x07, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x34, 0x26, 0x22, // .........n...4&" - 0x06, 0x14, 0x16, 0x32, 0x01, 0x15, 0x14, 0x06, 0x0f, 0x01, 0x06, 0x07, 0x16, 0x17, 0x16, 0x14, // ...2............ - 0x07, 0x0e, 0x01, 0x23, 0x22, 0x2f, 0x01, 0x06, 0x07, 0x06, 0x07, 0x06, 0x2b, 0x01, 0x22, 0x26, // ...#"/......+."& - 0x2f, 0x01, 0x26, 0x27, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x27, 0x26, 0x35, 0x34, 0x37, 0x3e, // /.&'..#"'&'&547> - 0x01, 0x37, 0x26, 0x2f, 0x01, 0x2e, 0x01, 0x3d, 0x01, 0x34, 0x36, 0x3f, 0x01, 0x36, 0x37, 0x26, // .7&/...=.46?.67& - 0x27, 0x26, 0x35, 0x34, 0x37, 0x3e, 0x01, 0x33, 0x32, 0x1f, 0x01, 0x36, 0x37, 0x36, 0x37, 0x36, // '&547>.32..67676 - 0x3b, 0x01, 0x32, 0x16, 0x1f, 0x01, 0x16, 0x17, 0x37, 0x36, 0x33, 0x32, 0x17, 0x16, 0x17, 0x16, // ;.2.....7632.... - 0x15, 0x14, 0x07, 0x0e, 0x01, 0x07, 0x16, 0x1f, 0x01, 0x1e, 0x01, 0x04, 0x00, 0x96, 0xd4, 0x96, // ................ - 0x96, 0xd4, 0x02, 0x96, 0x10, 0x0c, 0xb9, 0x13, 0x14, 0x23, 0x48, 0x0a, 0x09, 0x1b, 0x90, 0x16, // .........#H..... - 0x0c, 0x0e, 0x8a, 0x2c, 0x2f, 0x10, 0x0d, 0x07, 0x1d, 0xde, 0x0e, 0x15, 0x01, 0x1c, 0x31, 0x29, // ...,/.........1) - 0x8d, 0x0a, 0x0f, 0x0e, 0x0b, 0x7e, 0x27, 0x07, 0x08, 0x0f, 0x48, 0x12, 0x1b, 0x0e, 0xb7, 0x0d, // .....~'...H..... - 0x10, 0x10, 0x0b, 0xba, 0x0e, 0x19, 0x28, 0x43, 0x0a, 0x09, 0x1a, 0x91, 0x16, 0x0d, 0x0d, 0x8a, // ......(C........ - 0x2c, 0x2f, 0x10, 0x0d, 0x07, 0x1d, 0xde, 0x0e, 0x15, 0x01, 0x1c, 0x31, 0x29, 0x8e, 0x09, 0x0f, // ,/.........1)... - 0x0d, 0x0c, 0x81, 0x24, 0x07, 0x08, 0x0f, 0x48, 0x12, 0x1a, 0x0f, 0xb7, 0x0d, 0x10, 0x02, 0x16, // ...$...H........ - 0xd4, 0x96, 0x96, 0xd4, 0x96, 0x01, 0x6d, 0xde, 0x0c, 0x16, 0x02, 0x1c, 0x36, 0x25, 0x32, 0x58, // ......m.....6%2X - 0x0c, 0x1a, 0x0a, 0x25, 0x8e, 0x09, 0x6c, 0x17, 0x0f, 0x88, 0x32, 0x1c, 0x11, 0x0d, 0xb8, 0x10, // ...%..l...2..... - 0x15, 0x6b, 0x09, 0x0b, 0x72, 0x36, 0x0a, 0x0d, 0x0c, 0x0b, 0x15, 0x5b, 0x19, 0x32, 0x31, 0x1b, // .k..r6.....[.21. - 0x02, 0x15, 0x0d, 0xde, 0x0c, 0x16, 0x02, 0x1c, 0x2e, 0x2e, 0x39, 0x51, 0x0c, 0x0c, 0x0a, 0x0d, // ..........9Q.... - 0x24, 0x8f, 0x0a, 0x6b, 0x17, 0x0f, 0x88, 0x32, 0x1c, 0x11, 0x0d, 0xb8, 0x10, 0x15, 0x6b, 0x09, // $..k...2......k. - 0x0a, 0x77, 0x33, 0x08, 0x0e, 0x0c, 0x0b, 0x15, 0x5b, 0x19, 0x32, 0x30, 0x1c, 0x02, 0x15, 0x00, // .w3.....[.20.... - 0x00, 0x06, 0x00, 0x00, 0xff, 0x80, 0x05, 0x80, 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, // .............../ - 0x00, 0x3b, 0x00, 0x43, 0x00, 0x67, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, // .;.C.g......+."& - 0x35, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x05, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, // 5.46;.2.....+."& - 0x35, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x05, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, // 5.46;.2.....+."& - 0x35, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x13, 0x11, 0x21, 0x11, 0x14, 0x1e, 0x01, 0x33, // 5.46;.2...!....3 - 0x21, 0x32, 0x3e, 0x01, 0x01, 0x21, 0x27, 0x26, 0x27, 0x21, 0x06, 0x07, 0x05, 0x15, 0x14, 0x06, // !2>..!'&'!...... - 0x2b, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x23, 0x22, 0x26, 0x3d, 0x01, // +....#!"&5.#"&=. - 0x34, 0x36, 0x33, 0x21, 0x37, 0x3e, 0x01, 0x33, 0x21, 0x32, 0x16, 0x1f, 0x01, 0x21, 0x32, 0x16, // 463!7>.3!2...!2. - 0x02, 0x00, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x01, 0x00, 0x12, 0x0e, // ....@....@...... - 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x01, 0x00, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, // @....@......@... - 0x0e, 0x40, 0x0e, 0x12, 0x80, 0xfc, 0x80, 0x0e, 0x0f, 0x03, 0x03, 0x40, 0x03, 0x0f, 0x0e, 0xfd, // .@.........@.... - 0x60, 0x01, 0xc0, 0x30, 0x07, 0x0a, 0xfe, 0xc3, 0x0a, 0x07, 0x03, 0x6f, 0x12, 0x0e, 0x60, 0x5e, // `..0.......o..`^ - 0x42, 0xfc, 0xc0, 0x42, 0x5e, 0x60, 0x0e, 0x12, 0x12, 0x0e, 0x01, 0x35, 0x46, 0x0f, 0x4e, 0x28, // B..B^`.....5F.N( - 0x01, 0x40, 0x28, 0x4e, 0x0f, 0x46, 0x01, 0x35, 0x0e, 0x12, 0x03, 0x20, 0xfd, 0xc0, 0x0e, 0x12, // .@(N.F.5... .... + 0x0e, 0x12, 0x60, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x72, 0xfe, 0xc0, 0x0e, // ..`.........r... + 0x12, 0x12, 0x0e, 0x01, 0x40, 0x0e, 0x12, 0x12, 0xf2, 0xfd, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0x02, // ....@........... + 0x40, 0x0e, 0x12, 0x12, 0x01, 0x72, 0xfc, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x03, 0xc0, 0x0e, 0x12, // @....r.@........ + 0x12, 0x01, 0xf2, 0xfa, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x05, 0xc0, 0x0e, 0x12, 0x12, 0x00, 0x00, // ....@........... + 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x07, 0x00, 0x6e, 0x00, 0x00, // .............n.. + 0x00, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x01, 0x15, 0x14, 0x06, 0x0f, 0x01, 0x06, 0x07, // .4&"...2........ + 0x16, 0x17, 0x16, 0x14, 0x07, 0x0e, 0x01, 0x23, 0x22, 0x2f, 0x01, 0x06, 0x07, 0x06, 0x07, 0x06, // .......#"/...... + 0x2b, 0x01, 0x22, 0x26, 0x2f, 0x01, 0x26, 0x27, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x27, 0x26, // +."&/.&'..#"'&'& + 0x35, 0x34, 0x37, 0x3e, 0x01, 0x37, 0x26, 0x2f, 0x01, 0x2e, 0x01, 0x3d, 0x01, 0x34, 0x36, 0x3f, // 547>.7&/...=.46? + 0x01, 0x36, 0x37, 0x26, 0x27, 0x26, 0x35, 0x34, 0x37, 0x3e, 0x01, 0x33, 0x32, 0x1f, 0x01, 0x36, // .67&'&547>.32..6 + 0x37, 0x36, 0x37, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x1f, 0x01, 0x16, 0x17, 0x37, 0x36, 0x33, 0x32, // 7676;.2.....7632 + 0x17, 0x16, 0x17, 0x16, 0x15, 0x14, 0x07, 0x0e, 0x01, 0x07, 0x16, 0x1f, 0x01, 0x1e, 0x01, 0x04, // ................ + 0x00, 0x96, 0xd4, 0x96, 0x96, 0xd4, 0x02, 0x96, 0x10, 0x0c, 0xb9, 0x13, 0x14, 0x23, 0x48, 0x0a, // .............#H. + 0x09, 0x1b, 0x90, 0x16, 0x0c, 0x0e, 0x8a, 0x2c, 0x2f, 0x10, 0x0d, 0x07, 0x1d, 0xde, 0x0e, 0x15, // .......,/....... + 0x01, 0x1c, 0x31, 0x29, 0x8d, 0x0a, 0x0f, 0x0e, 0x0b, 0x7e, 0x27, 0x07, 0x08, 0x0f, 0x48, 0x12, // ..1).....~'...H. + 0x1b, 0x0e, 0xb7, 0x0d, 0x10, 0x10, 0x0b, 0xba, 0x0e, 0x19, 0x28, 0x43, 0x0a, 0x09, 0x1a, 0x91, // ..........(C.... + 0x16, 0x0d, 0x0d, 0x8a, 0x2c, 0x2f, 0x10, 0x0d, 0x07, 0x1d, 0xde, 0x0e, 0x15, 0x01, 0x1c, 0x31, // ....,/.........1 + 0x29, 0x8e, 0x09, 0x0f, 0x0d, 0x0c, 0x81, 0x24, 0x07, 0x08, 0x0f, 0x48, 0x12, 0x1a, 0x0f, 0xb7, // )......$...H.... + 0x0d, 0x10, 0x02, 0x16, 0xd4, 0x96, 0x96, 0xd4, 0x96, 0x01, 0x6d, 0xde, 0x0c, 0x16, 0x02, 0x1c, // ..........m..... + 0x36, 0x25, 0x32, 0x58, 0x0c, 0x1a, 0x0a, 0x25, 0x8e, 0x09, 0x6c, 0x17, 0x0f, 0x88, 0x32, 0x1c, // 6%2X...%..l...2. + 0x11, 0x0d, 0xb8, 0x10, 0x15, 0x6b, 0x09, 0x0b, 0x72, 0x36, 0x0a, 0x0d, 0x0c, 0x0b, 0x15, 0x5b, // .....k..r6.....[ + 0x19, 0x32, 0x31, 0x1b, 0x02, 0x15, 0x0d, 0xde, 0x0c, 0x16, 0x02, 0x1c, 0x2e, 0x2e, 0x39, 0x51, // .21...........9Q + 0x0c, 0x0c, 0x0a, 0x0d, 0x24, 0x8f, 0x0a, 0x6b, 0x17, 0x0f, 0x88, 0x32, 0x1c, 0x11, 0x0d, 0xb8, // ....$..k...2.... + 0x10, 0x15, 0x6b, 0x09, 0x0a, 0x77, 0x33, 0x08, 0x0e, 0x0c, 0x0b, 0x15, 0x5b, 0x19, 0x32, 0x30, // ..k..w3.....[.20 + 0x1c, 0x02, 0x15, 0x00, 0x00, 0x06, 0x00, 0x00, 0xff, 0x80, 0x05, 0x80, 0x05, 0x80, 0x00, 0x0f, // ................ + 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x3b, 0x00, 0x43, 0x00, 0x67, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, // .../.;.C.g...... + 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x05, 0x11, 0x14, 0x06, // +."&5.46;.2..... + 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x05, 0x11, 0x14, 0x06, // +."&5.46;.2..... + 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x13, 0x11, 0x21, 0x11, // +."&5.46;.2...!. + 0x14, 0x1e, 0x01, 0x33, 0x21, 0x32, 0x3e, 0x01, 0x01, 0x21, 0x27, 0x26, 0x27, 0x21, 0x06, 0x07, // ...3!2>..!'&'!.. + 0x05, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x23, // ....+....#!"&5.# + 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x37, 0x3e, 0x01, 0x33, 0x21, 0x32, 0x16, 0x1f, // "&=.463!7>.3!2.. + 0x01, 0x21, 0x32, 0x16, 0x02, 0x00, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, // .!2.....@....@.. + 0x01, 0x00, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x01, 0x00, 0x12, 0x0e, // ....@....@...... + 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x80, 0xfc, 0x80, 0x0e, 0x0f, 0x03, 0x03, 0x40, // @....@.........@ + 0x03, 0x0f, 0x0e, 0xfd, 0x60, 0x01, 0xc0, 0x30, 0x07, 0x0a, 0xfe, 0xc3, 0x0a, 0x07, 0x03, 0x6f, // ....`..0.......o + 0x12, 0x0e, 0x60, 0x5e, 0x42, 0xfc, 0xc0, 0x42, 0x5e, 0x60, 0x0e, 0x12, 0x12, 0x0e, 0x01, 0x35, // ..`^B..B^`.....5 + 0x46, 0x0f, 0x4e, 0x28, 0x01, 0x40, 0x28, 0x4e, 0x0f, 0x46, 0x01, 0x35, 0x0e, 0x12, 0x03, 0x20, // F.N(.@(N.F.5... + 0xfd, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0x02, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0xfd, 0xc0, 0x0e, 0x12, // .......@........ 0x12, 0x0e, 0x02, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0xfd, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0x02, 0x40, // ...@...........@ - 0x0e, 0x12, 0x12, 0x0e, 0xfd, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0x02, 0x40, 0x0e, 0x12, 0x12, 0xfd, // ...........@.... - 0x1e, 0x03, 0xb4, 0xfc, 0x4c, 0x16, 0x25, 0x11, 0x11, 0x25, 0x04, 0x4a, 0x75, 0x09, 0x02, 0x02, // ....L.%..%.Ju... - 0x09, 0x95, 0x40, 0x0e, 0x12, 0xfc, 0x4c, 0x53, 0x79, 0x75, 0x53, 0x03, 0xb8, 0x12, 0x0e, 0x40, // ..@...LSyuS....@ - 0x0e, 0x12, 0xa7, 0x25, 0x34, 0x34, 0x25, 0xa7, 0x12, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x1a, // ...%44%......... - 0x00, 0x00, 0x06, 0x66, 0x05, 0x03, 0x00, 0x13, 0x00, 0x35, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, // ...f.....5...... - 0x23, 0x21, 0x11, 0x21, 0x11, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x35, 0x09, 0x01, 0x16, // #!.!.!"&5.465... - 0x37, 0x07, 0x06, 0x07, 0x23, 0x22, 0x27, 0x09, 0x01, 0x06, 0x27, 0x26, 0x2f, 0x01, 0x26, 0x36, // 7...#"'...'&/.&6 - 0x37, 0x01, 0x36, 0x32, 0x1f, 0x01, 0x35, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x15, 0x11, 0x17, // 7.62..546;.2.... - 0x1e, 0x01, 0x05, 0x80, 0x26, 0x1a, 0xfe, 0x80, 0xff, 0x00, 0xfe, 0x80, 0x1a, 0x26, 0x01, 0x02, // ....&........&.. - 0x3f, 0x02, 0x3f, 0x01, 0xdf, 0x3e, 0x08, 0x0d, 0x03, 0x0d, 0x08, 0xfd, 0x4c, 0xfd, 0x4c, 0x0c, // ?.?..>......L.L. - 0x0c, 0x0d, 0x08, 0x3e, 0x08, 0x02, 0x0a, 0x02, 0xcf, 0x20, 0x58, 0x20, 0xf4, 0x12, 0x0e, 0xc0, // ...>..... X .... - 0x0e, 0x12, 0xdb, 0x0a, 0x02, 0x02, 0x20, 0xfe, 0x20, 0x1a, 0x26, 0x01, 0x80, 0xfe, 0x80, 0x26, // ...... . .&....& - 0x1a, 0x01, 0xe0, 0x01, 0x04, 0x01, 0x01, 0xda, 0xfe, 0x26, 0x02, 0x41, 0x4a, 0x09, 0x02, 0x07, // .........&.AJ... - 0x02, 0x41, 0xfd, 0xbf, 0x08, 0x01, 0x02, 0x09, 0x4a, 0x0a, 0x1b, 0x08, 0x02, 0x57, 0x1a, 0x1a, // .A......J....W.. - 0xcc, 0xc3, 0x0e, 0x12, 0x12, 0x0e, 0xfe, 0x68, 0xb6, 0x08, 0x1b, 0x00, 0x00, 0x03, 0x00, 0x00, // .......h........ - 0xff, 0x80, 0x05, 0x00, 0x05, 0x80, 0x00, 0x08, 0x00, 0x0f, 0x00, 0x23, 0x00, 0x00, 0x33, 0x21, // ...........#..3! - 0x11, 0x21, 0x22, 0x26, 0x35, 0x11, 0x21, 0x01, 0x21, 0x26, 0x27, 0x01, 0x26, 0x27, 0x01, 0x11, // .!"&5.!.!&'.&'.. - 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x17, 0x01, // ..#!"&5.463!2... - 0x1e, 0x01, 0x80, 0x04, 0x00, 0xfe, 0x60, 0x28, 0x38, 0xfe, 0x00, 0x02, 0x80, 0x01, 0x78, 0x0a, // ......`(8.....x. - 0x0c, 0xfe, 0xc7, 0x0c, 0x1d, 0x02, 0x00, 0x38, 0x28, 0xfb, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x02, // .......8(..(88(. - 0x80, 0x28, 0x60, 0x1c, 0x01, 0x38, 0x1c, 0x28, 0x03, 0x00, 0x38, 0x28, 0x01, 0xa0, 0xfe, 0x80, // .(`..8.(..8(.... - 0x1d, 0x0c, 0x01, 0x39, 0x0c, 0x0a, 0xfe, 0x68, 0xfc, 0x80, 0x28, 0x38, 0x38, 0x28, 0x05, 0x40, // ...9...h..(88(.@ - 0x28, 0x38, 0x28, 0x1c, 0xfe, 0xc8, 0x1c, 0x60, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // (8(....`........ - 0x05, 0x80, 0x00, 0x14, 0x00, 0x20, 0x00, 0x2c, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, // ..... .,......#! - 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x00, // "&=.46;..46;.2.. - 0x10, 0x2e, 0x01, 0x20, 0x0e, 0x01, 0x10, 0x1e, 0x01, 0x20, 0x36, 0x00, 0x10, 0x02, 0x04, 0x20, // ... ..... 6.... - 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, 0x03, 0x80, 0x12, 0x0e, 0xfe, 0xc0, 0x0e, 0x12, 0x12, // $...$ .......... - 0x0e, 0xe0, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x01, 0xa0, 0x92, 0xfa, 0xfe, 0xd8, 0xfa, 0x92, 0x92, // ....@........... - 0xfa, 0x01, 0x28, 0xfa, 0x01, 0x72, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, // ..(..r....^..... - 0x61, 0x01, 0xa2, 0x01, 0x61, 0x03, 0xe0, 0xfe, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, // a...a...@....@.. - 0x01, 0x60, 0x0e, 0x12, 0x12, 0xfd, 0xfe, 0x01, 0x28, 0xfa, 0x92, 0x92, 0xfa, 0xfe, 0xd8, 0xfa, // .`......(....... - 0x92, 0x92, 0x02, 0x5f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, // ..._.^.....a...a - 0xce, 0xce, 0x00, 0x00, 0x00, 0x02, 0x00, 0x32, 0x00, 0x00, 0x07, 0x4e, 0x05, 0x00, 0x00, 0x11, // .......2...N.... - 0x00, 0x43, 0x00, 0x00, 0x01, 0x35, 0x03, 0x2e, 0x01, 0x2b, 0x01, 0x22, 0x06, 0x07, 0x03, 0x15, // .C...5...+.".... - 0x06, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x01, 0x14, 0x23, 0x21, 0x32, 0x36, 0x27, 0x03, 0x2e, 0x01, // ..;.26..#!26'... - 0x23, 0x21, 0x22, 0x06, 0x07, 0x03, 0x06, 0x16, 0x33, 0x21, 0x22, 0x35, 0x34, 0x37, 0x01, 0x3e, // #!".....3!"547.> - 0x01, 0x33, 0x21, 0x22, 0x06, 0x0f, 0x01, 0x06, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x2f, 0x01, 0x2e, // .3!".....;.26/.. - 0x01, 0x23, 0x21, 0x32, 0x16, 0x17, 0x01, 0x16, 0x04, 0x57, 0x18, 0x01, 0x14, 0x0d, 0xba, 0x0d, // .#!2.....W...... - 0x14, 0x01, 0x18, 0x01, 0x12, 0x0c, 0xf4, 0x0c, 0x12, 0x02, 0xf6, 0x2e, 0xfd, 0x40, 0x0d, 0x12, // .............@.. - 0x01, 0x14, 0x01, 0x14, 0x0d, 0xfe, 0xf0, 0x0d, 0x14, 0x01, 0x14, 0x01, 0x12, 0x0d, 0xfd, 0x40, // ...............@ - 0x2e, 0x1a, 0x01, 0xa1, 0x08, 0x24, 0x14, 0x01, 0x53, 0x0d, 0x14, 0x01, 0x0f, 0x01, 0x12, 0x0d, // .....$..S....... - 0xa6, 0x0d, 0x12, 0x01, 0x0f, 0x01, 0x14, 0x0d, 0x01, 0x53, 0x14, 0x24, 0x08, 0x01, 0xa1, 0x1a, // .........S.$.... - 0x02, 0x1c, 0x04, 0x01, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0xfe, 0xc0, 0x04, 0x0c, 0x10, 0x10, 0xfe, // ....@........... - 0x39, 0x49, 0x13, 0x0d, 0x01, 0x00, 0x0d, 0x13, 0x13, 0x0d, 0xff, 0x00, 0x0d, 0x13, 0x49, 0x36, // 9I............I6 - 0x3e, 0x04, 0x14, 0x13, 0x1c, 0x13, 0x0d, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0d, 0x13, 0x1c, // >............... - 0x13, 0xfb, 0xec, 0x3e, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x06, 0x80, 0x06, 0x00, 0x00, 0x07, // ...>............ - 0x00, 0x0f, 0x00, 0x25, 0x00, 0x3d, 0x00, 0x00, 0x24, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, // ...%.=..$4&"...2 - 0x24, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x13, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // $4&"...2....#!"& - 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x17, 0x16, 0x32, 0x3f, 0x01, 0x21, 0x32, 0x16, 0x01, 0x16, // 5.463!..2?.!2... - 0x07, 0x01, 0x06, 0x22, 0x27, 0x01, 0x26, 0x37, 0x36, 0x33, 0x21, 0x11, 0x34, 0x36, 0x33, 0x21, // ..."'.&763!.463! - 0x32, 0x16, 0x15, 0x11, 0x21, 0x32, 0x05, 0x00, 0x26, 0x34, 0x26, 0x26, 0x34, 0x01, 0x26, 0x26, // 2...!2..&4&&4.&& - 0x34, 0x26, 0x26, 0x34, 0xa6, 0x38, 0x28, 0xfa, 0x40, 0x28, 0x38, 0x38, 0x28, 0x01, 0xd1, 0x87, // 4&&4.8(.@(88(... - 0x3a, 0x9c, 0x3a, 0x88, 0x01, 0xd0, 0x28, 0x38, 0xfe, 0xbb, 0x11, 0x1f, 0xfe, 0x40, 0x12, 0x36, // :.:...(8.....@.6 - 0x12, 0xfe, 0x40, 0x1f, 0x11, 0x11, 0x2a, 0x01, 0x00, 0x26, 0x1a, 0x01, 0x00, 0x1a, 0x26, 0x01, // ..@...*..&....&. - 0x00, 0x2a, 0xa6, 0x34, 0x26, 0x26, 0x34, 0x26, 0x26, 0x34, 0x26, 0x26, 0x34, 0x26, 0x01, 0x20, // .*.4&&4&&4&&4&. - 0xfe, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x01, 0x40, 0x28, 0x38, 0x88, 0x38, 0x38, 0x88, 0x38, 0x02, // ..(88(.@(8.88.8. - 0x11, 0x29, 0x1d, 0xfe, 0x40, 0x13, 0x13, 0x01, 0xc0, 0x1d, 0x29, 0x27, 0x01, 0xc0, 0x1a, 0x26, // .)..@.....)'...& - 0x26, 0x1a, 0xfe, 0x40, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x18, // &..@............ - 0x00, 0x24, 0x00, 0x30, 0x00, 0x00, 0x01, 0x14, 0x07, 0x01, 0x06, 0x22, 0x27, 0x01, 0x26, 0x37, // .$.0......."'.&7 - 0x36, 0x3b, 0x01, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x15, 0x11, 0x33, 0x32, 0x16, 0x02, // 6;..46;.2...32.. + 0x0e, 0x12, 0x12, 0xfd, 0x1e, 0x03, 0xb4, 0xfc, 0x4c, 0x16, 0x25, 0x11, 0x11, 0x25, 0x04, 0x4a, // ........L.%..%.J + 0x75, 0x09, 0x02, 0x02, 0x09, 0x95, 0x40, 0x0e, 0x12, 0xfc, 0x4c, 0x53, 0x79, 0x75, 0x53, 0x03, // u.....@...LSyuS. + 0xb8, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0xa7, 0x25, 0x34, 0x34, 0x25, 0xa7, 0x12, 0x00, 0x00, 0x00, // ...@...%44%..... + 0x00, 0x02, 0x00, 0x1a, 0x00, 0x00, 0x06, 0x66, 0x05, 0x03, 0x00, 0x13, 0x00, 0x35, 0x00, 0x00, // .......f.....5.. + 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x11, 0x21, 0x11, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, // ....#!.!.!"&5.46 + 0x35, 0x09, 0x01, 0x16, 0x37, 0x07, 0x06, 0x07, 0x23, 0x22, 0x27, 0x09, 0x01, 0x06, 0x27, 0x26, // 5...7...#"'...'& + 0x2f, 0x01, 0x26, 0x36, 0x37, 0x01, 0x36, 0x32, 0x1f, 0x01, 0x35, 0x34, 0x36, 0x3b, 0x01, 0x32, // /.&67.62..546;.2 + 0x16, 0x15, 0x11, 0x17, 0x1e, 0x01, 0x05, 0x80, 0x26, 0x1a, 0xfe, 0x80, 0xff, 0x00, 0xfe, 0x80, // ........&....... + 0x1a, 0x26, 0x01, 0x02, 0x3f, 0x02, 0x3f, 0x01, 0xdf, 0x3e, 0x08, 0x0d, 0x03, 0x0d, 0x08, 0xfd, // .&..?.?..>...... + 0x4c, 0xfd, 0x4c, 0x0c, 0x0c, 0x0d, 0x08, 0x3e, 0x08, 0x02, 0x0a, 0x02, 0xcf, 0x20, 0x58, 0x20, // L.L....>..... X + 0xf4, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0xdb, 0x0a, 0x02, 0x02, 0x20, 0xfe, 0x20, 0x1a, 0x26, 0x01, // .......... . .&. + 0x80, 0xfe, 0x80, 0x26, 0x1a, 0x01, 0xe0, 0x01, 0x04, 0x01, 0x01, 0xda, 0xfe, 0x26, 0x02, 0x41, // ...&.........&.A + 0x4a, 0x09, 0x02, 0x07, 0x02, 0x41, 0xfd, 0xbf, 0x08, 0x01, 0x02, 0x09, 0x4a, 0x0a, 0x1b, 0x08, // J....A......J... + 0x02, 0x57, 0x1a, 0x1a, 0xcc, 0xc3, 0x0e, 0x12, 0x12, 0x0e, 0xfe, 0x68, 0xb6, 0x08, 0x1b, 0x00, // .W.........h.... + 0x00, 0x03, 0x00, 0x00, 0xff, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x13, 0x00, 0x1a, 0x00, 0x23, // ...............# + 0x00, 0x00, 0x01, 0x1e, 0x01, 0x15, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, // .........#!"&5.4 + 0x36, 0x33, 0x21, 0x32, 0x16, 0x17, 0x07, 0x11, 0x21, 0x26, 0x27, 0x01, 0x26, 0x01, 0x11, 0x21, // 63!2....!&'.&..! + 0x22, 0x26, 0x35, 0x11, 0x21, 0x11, 0x05, 0xbc, 0x1c, 0x28, 0x38, 0x28, 0xfa, 0xc0, 0x28, 0x38, // "&5.!....(8(..(8 + 0x38, 0x28, 0x03, 0x80, 0x28, 0x60, 0x1c, 0x84, 0x01, 0x78, 0x0a, 0x0c, 0xfe, 0xc7, 0x0c, 0x01, // 8(..(`...x...... + 0x63, 0xfe, 0x60, 0x28, 0x38, 0xfd, 0x00, 0x04, 0x84, 0x1c, 0x60, 0x28, 0xfb, 0x80, 0x28, 0x38, // c.`(8.....`(..(8 + 0x38, 0x28, 0x06, 0x40, 0x28, 0x38, 0x28, 0x1c, 0x44, 0xfe, 0x88, 0x1d, 0x0c, 0x01, 0x39, 0x0c, // 8(.@(8(.D.....9. + 0xfa, 0x12, 0x04, 0x00, 0x38, 0x28, 0x01, 0xa0, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // ....8(.......... + 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x14, 0x00, 0x20, 0x00, 0x2c, 0x00, 0x00, 0x01, 0x11, // ......... .,.... + 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x11, 0x34, 0x36, 0x3b, // ..#!"&=.46;..46; + 0x01, 0x32, 0x16, 0x00, 0x10, 0x2e, 0x01, 0x20, 0x0e, 0x01, 0x10, 0x1e, 0x01, 0x20, 0x36, 0x00, // .2..... ..... 6. + 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, 0x03, 0x80, 0x12, 0x0e, 0xfe, // ... $...$ ...... + 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xe0, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x01, 0xa0, 0x92, 0xfa, 0xfe, // ........@....... + 0xd8, 0xfa, 0x92, 0x92, 0xfa, 0x01, 0x28, 0xfa, 0x01, 0x72, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, // ......(..r....^. + 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x03, 0xe0, 0xfe, 0x40, 0x0e, 0x12, 0x12, // ....a...a...@... + 0x0e, 0x40, 0x0e, 0x12, 0x01, 0x60, 0x0e, 0x12, 0x12, 0xfd, 0xfe, 0x01, 0x28, 0xfa, 0x92, 0x92, // .@...`......(... + 0xfa, 0xfe, 0xd8, 0xfa, 0x92, 0x92, 0x02, 0x5f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, // ......._.^.....a + 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x00, 0x00, 0x02, 0x00, 0x32, 0x00, 0x00, 0x07, 0x4e, // ...a.......2...N + 0x05, 0x00, 0x00, 0x11, 0x00, 0x43, 0x00, 0x00, 0x01, 0x35, 0x03, 0x2e, 0x01, 0x2b, 0x01, 0x22, // .....C...5...+." + 0x06, 0x07, 0x03, 0x15, 0x06, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x01, 0x14, 0x23, 0x21, 0x32, 0x36, // ......;.26..#!26 + 0x27, 0x03, 0x2e, 0x01, 0x23, 0x21, 0x22, 0x06, 0x07, 0x03, 0x06, 0x16, 0x33, 0x21, 0x22, 0x35, // '...#!".....3!"5 + 0x34, 0x37, 0x01, 0x3e, 0x01, 0x33, 0x21, 0x22, 0x06, 0x0f, 0x01, 0x06, 0x16, 0x3b, 0x01, 0x32, // 47.>.3!".....;.2 + 0x36, 0x2f, 0x01, 0x2e, 0x01, 0x23, 0x21, 0x32, 0x16, 0x17, 0x01, 0x16, 0x04, 0x57, 0x18, 0x01, // 6/...#!2.....W.. + 0x14, 0x0d, 0xba, 0x0d, 0x14, 0x01, 0x18, 0x01, 0x12, 0x0c, 0xf4, 0x0c, 0x12, 0x02, 0xf6, 0x2e, // ................ + 0xfd, 0x40, 0x0d, 0x12, 0x01, 0x14, 0x01, 0x14, 0x0d, 0xfe, 0xf0, 0x0d, 0x14, 0x01, 0x14, 0x01, // .@.............. + 0x12, 0x0d, 0xfd, 0x40, 0x2e, 0x1a, 0x01, 0xa1, 0x08, 0x24, 0x14, 0x01, 0x53, 0x0d, 0x14, 0x01, // ...@.....$..S... + 0x0f, 0x01, 0x12, 0x0d, 0xa6, 0x0d, 0x12, 0x01, 0x0f, 0x01, 0x14, 0x0d, 0x01, 0x53, 0x14, 0x24, // .............S.$ + 0x08, 0x01, 0xa1, 0x1a, 0x02, 0x1c, 0x04, 0x01, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0xfe, 0xc0, 0x04, // ........@....... + 0x0c, 0x10, 0x10, 0xfe, 0x39, 0x49, 0x13, 0x0d, 0x01, 0x00, 0x0d, 0x13, 0x13, 0x0d, 0xff, 0x00, // ....9I.......... + 0x0d, 0x13, 0x49, 0x36, 0x3e, 0x04, 0x14, 0x13, 0x1c, 0x13, 0x0d, 0xc0, 0x0e, 0x12, 0x12, 0x0e, // ..I6>........... + 0xc0, 0x0d, 0x13, 0x1c, 0x13, 0xfb, 0xec, 0x3e, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x06, 0x80, // .......>........ + 0x06, 0x00, 0x00, 0x07, 0x00, 0x0f, 0x00, 0x25, 0x00, 0x3d, 0x00, 0x00, 0x24, 0x34, 0x26, 0x22, // .......%.=..$4&" + 0x06, 0x14, 0x16, 0x32, 0x24, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x13, 0x11, 0x14, 0x06, // ...2$4&"...2.... + 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x17, 0x16, 0x32, 0x3f, 0x01, 0x21, // #!"&5.463!..2?.! + 0x32, 0x16, 0x01, 0x16, 0x07, 0x01, 0x06, 0x22, 0x27, 0x01, 0x26, 0x37, 0x36, 0x33, 0x21, 0x11, // 2......"'.&763!. + 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x15, 0x11, 0x21, 0x32, 0x05, 0x00, 0x26, 0x34, 0x26, 0x26, // 463!2...!2..&4&& + 0x34, 0x01, 0x26, 0x26, 0x34, 0x26, 0x26, 0x34, 0xa6, 0x38, 0x28, 0xfa, 0x40, 0x28, 0x38, 0x38, // 4.&&4&&4.8(.@(88 + 0x28, 0x01, 0xd1, 0x87, 0x3a, 0x9c, 0x3a, 0x88, 0x01, 0xd0, 0x28, 0x38, 0xfe, 0xbb, 0x11, 0x1f, // (...:.:...(8.... + 0xfe, 0x40, 0x12, 0x36, 0x12, 0xfe, 0x40, 0x1f, 0x11, 0x11, 0x2a, 0x01, 0x00, 0x26, 0x1a, 0x01, // .@.6..@...*..&.. + 0x00, 0x1a, 0x26, 0x01, 0x00, 0x2a, 0xa6, 0x34, 0x26, 0x26, 0x34, 0x26, 0x26, 0x34, 0x26, 0x26, // ..&..*.4&&4&&4&& + 0x34, 0x26, 0x01, 0x20, 0xfe, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x01, 0x40, 0x28, 0x38, 0x88, 0x38, // 4&. ..(88(.@(8.8 + 0x38, 0x88, 0x38, 0x02, 0x11, 0x29, 0x1d, 0xfe, 0x40, 0x13, 0x13, 0x01, 0xc0, 0x1d, 0x29, 0x27, // 8.8..)..@.....)' + 0x01, 0xc0, 0x1a, 0x26, 0x26, 0x1a, 0xfe, 0x40, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // ...&&..@........ + 0x05, 0x80, 0x00, 0x18, 0x00, 0x24, 0x00, 0x30, 0x00, 0x00, 0x01, 0x14, 0x07, 0x01, 0x06, 0x22, // .....$.0......." + 0x27, 0x01, 0x26, 0x37, 0x36, 0x3b, 0x01, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x15, 0x11, // '.&76;..46;.2... + 0x33, 0x32, 0x16, 0x02, 0x20, 0x0e, 0x01, 0x10, 0x1e, 0x01, 0x20, 0x3e, 0x01, 0x10, 0x26, 0x04, // 32.. ..... >..&. + 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, 0x04, 0x60, 0x0a, 0xfe, 0xc1, // ... $...$ ..`... + 0x0b, 0x18, 0x0b, 0xfe, 0xc0, 0x0f, 0x08, 0x08, 0x16, 0xc0, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0xc0, // ................ + 0x0e, 0x12, 0xcc, 0xfe, 0xd8, 0xfa, 0x92, 0x92, 0xfa, 0x01, 0x28, 0xfa, 0x92, 0x92, 0x01, 0x72, // ..........(....r + 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x02, // ....^.....a...a. + 0x60, 0x0c, 0x0c, 0xfe, 0xc1, 0x09, 0x09, 0x01, 0x40, 0x10, 0x13, 0x14, 0x01, 0x60, 0x0e, 0x12, // `.......@....`.. + 0x12, 0x0e, 0xfe, 0xa0, 0x12, 0x02, 0x32, 0x92, 0xfa, 0xfe, 0xd8, 0xfa, 0x92, 0x92, 0xfa, 0x01, // ......2......... + 0x28, 0xfa, 0xbd, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, // (...^.....a...a. + 0xce, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x18, // ................ + 0x00, 0x24, 0x00, 0x30, 0x00, 0x00, 0x01, 0x06, 0x2b, 0x01, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, // .$.0....+....+." + 0x26, 0x35, 0x11, 0x23, 0x22, 0x26, 0x35, 0x34, 0x37, 0x01, 0x36, 0x32, 0x17, 0x01, 0x16, 0x02, // &5.#"&547.62.... 0x20, 0x0e, 0x01, 0x10, 0x1e, 0x01, 0x20, 0x3e, 0x01, 0x10, 0x26, 0x04, 0x10, 0x02, 0x04, 0x20, // ..... >..&.... - 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, 0x04, 0x60, 0x0a, 0xfe, 0xc1, 0x0b, 0x18, 0x0b, 0xfe, // $...$ ..`....... - 0xc0, 0x0f, 0x08, 0x08, 0x16, 0xc0, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0xc0, 0x0e, 0x12, 0xcc, 0xfe, // ................ - 0xd8, 0xfa, 0x92, 0x92, 0xfa, 0x01, 0x28, 0xfa, 0x92, 0x92, 0x01, 0x72, 0xce, 0xfe, 0x9f, 0xfe, // ......(....r.... - 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x02, 0x60, 0x0c, 0x0c, 0xfe, // ^.....a...a.`... - 0xc1, 0x09, 0x09, 0x01, 0x40, 0x10, 0x13, 0x14, 0x01, 0x60, 0x0e, 0x12, 0x12, 0x0e, 0xfe, 0xa0, // ....@....`...... - 0x12, 0x02, 0x32, 0x92, 0xfa, 0xfe, 0xd8, 0xfa, 0x92, 0x92, 0xfa, 0x01, 0x28, 0xfa, 0xbd, 0xfe, // ..2.........(... - 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x00, 0x00, // ^.....a...a..... - 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x18, 0x00, 0x24, 0x00, 0x30, // .............$.0 - 0x00, 0x00, 0x01, 0x06, 0x2b, 0x01, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, 0x23, // ....+....+."&5.# - 0x22, 0x26, 0x35, 0x34, 0x37, 0x01, 0x36, 0x32, 0x17, 0x01, 0x16, 0x02, 0x20, 0x0e, 0x01, 0x10, // "&547.62.... ... - 0x1e, 0x01, 0x20, 0x3e, 0x01, 0x10, 0x26, 0x04, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, // .. >..&.... $... - 0x24, 0x20, 0x04, 0x04, 0x5e, 0x08, 0x16, 0xc0, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0xc0, 0x0e, 0x12, // $ ..^........... - 0x0a, 0x01, 0x3f, 0x0b, 0x18, 0x0b, 0x01, 0x40, 0x0f, 0xd2, 0xfe, 0xd8, 0xfa, 0x92, 0x92, 0xfa, // ..?....@........ - 0x01, 0x28, 0xfa, 0x92, 0x92, 0x01, 0x72, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, // .(....r....^.... - 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x02, 0x94, 0x14, 0xfe, 0xa0, 0x0e, 0x12, 0x12, 0x0e, 0x01, // .a...a.......... - 0x60, 0x12, 0x0e, 0x0c, 0x0c, 0x01, 0x3f, 0x09, 0x09, 0xfe, 0xc0, 0x10, 0x01, 0xf9, 0x92, 0xfa, // `.....?......... - 0xfe, 0xd8, 0xfa, 0x92, 0x92, 0xfa, 0x01, 0x28, 0xfa, 0xbd, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, // .......(...^.... - 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, // .a...a.......... - 0x05, 0x00, 0x00, 0x0d, 0x00, 0x23, 0x00, 0x00, 0x01, 0x21, 0x2e, 0x01, 0x27, 0x03, 0x21, 0x03, // .....#...!..'.!. - 0x0e, 0x01, 0x07, 0x21, 0x17, 0x21, 0x25, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, // ...!.!%...#!"&5. - 0x34, 0x37, 0x13, 0x3e, 0x01, 0x33, 0x21, 0x32, 0x16, 0x17, 0x13, 0x16, 0x03, 0xff, 0x01, 0x3c, // 47.>.3!2.......< - 0x01, 0x03, 0x01, 0xd4, 0xfd, 0x3c, 0xd4, 0x01, 0x03, 0x01, 0x01, 0x3c, 0x5f, 0x01, 0x40, 0x02, // .....<.....<_.@. - 0x60, 0x26, 0x1a, 0xfa, 0x80, 0x1a, 0x26, 0x19, 0xee, 0x0a, 0x35, 0x1a, 0x03, 0x40, 0x1a, 0x35, // `&....&...5..@.5 - 0x0a, 0xee, 0x19, 0x02, 0x40, 0x03, 0x0a, 0x03, 0x01, 0xf0, 0xfe, 0x10, 0x02, 0x0c, 0x02, 0xc0, // ....@........... - 0xa2, 0xfe, 0x1e, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0xe2, 0x3e, 0x3d, 0x02, 0x28, 0x19, 0x22, 0x22, // ....&&...>=.(."" - 0x19, 0xfd, 0xd8, 0x3d, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x0f, // ...=............ - 0x00, 0x1b, 0x00, 0x27, 0x00, 0x00, 0x00, 0x14, 0x07, 0x01, 0x06, 0x23, 0x22, 0x27, 0x26, 0x35, // ...'.......#"'&5 - 0x11, 0x34, 0x37, 0x36, 0x17, 0x01, 0x16, 0x10, 0x2e, 0x01, 0x20, 0x0e, 0x01, 0x10, 0x1e, 0x01, // .476...... ..... - 0x20, 0x36, 0x00, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, 0x04, 0xa0, // 6.... $...$ ... - 0x20, 0xfd, 0xe0, 0x0f, 0x11, 0x10, 0x10, 0x20, 0x20, 0x21, 0x1f, 0x02, 0x20, 0xa0, 0x92, 0xfa, // ...... !.. ... - 0xfe, 0xd8, 0xfa, 0x92, 0x92, 0xfa, 0x01, 0x28, 0xfa, 0x01, 0x72, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, // .......(..r....^ - 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x02, 0xa5, 0x4a, 0x12, 0xfe, 0xc0, // .....a...a..J... - 0x09, 0x08, 0x13, 0x25, 0x02, 0x80, 0x25, 0x13, 0x12, 0x13, 0xfe, 0xc0, 0xcb, 0x01, 0x28, 0xfa, // ...%..%.......(. - 0x92, 0x92, 0xfa, 0xfe, 0xd8, 0xfa, 0x92, 0x92, 0x02, 0x5f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, // ........._.^.... - 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x01, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // .a...a.......... - 0x05, 0x80, 0x00, 0x33, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x27, 0x26, 0x3f, // ...3......#!"'&? - 0x01, 0x26, 0x23, 0x22, 0x0e, 0x02, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x36, 0x37, 0x36, 0x37, 0x32, // .&#".....3267672 - 0x1f, 0x01, 0x1e, 0x01, 0x07, 0x06, 0x04, 0x23, 0x22, 0x24, 0x26, 0x02, 0x10, 0x12, 0x36, 0x24, // .......#"$&...6$ - 0x33, 0x32, 0x04, 0x17, 0x37, 0x36, 0x17, 0x16, 0x06, 0x00, 0x26, 0x1a, 0xfe, 0x40, 0x2a, 0x11, // 32..76....&..@*. - 0x11, 0x1f, 0x8a, 0x94, 0xc9, 0x68, 0xbd, 0x8a, 0x51, 0x51, 0x8a, 0xbd, 0x68, 0x77, 0xd4, 0x49, // .....h..QQ..hw.I - 0x07, 0x10, 0x0e, 0x0b, 0x89, 0x09, 0x01, 0x08, 0x6d, 0xfe, 0xca, 0xac, 0x9c, 0xfe, 0xe4, 0xce, // ........m....... - 0x7a, 0x7a, 0xce, 0x01, 0x1c, 0x9c, 0x93, 0x01, 0x13, 0x6b, 0x82, 0x1d, 0x29, 0x27, 0x05, 0x00, // zz.......k..)'.. - 0xfe, 0x40, 0x1a, 0x26, 0x28, 0x27, 0x1e, 0x8a, 0x89, 0x51, 0x8a, 0xbd, 0xd0, 0xbd, 0x8a, 0x51, // .@.&('...Q.....Q - 0x68, 0x5f, 0x0a, 0x02, 0x09, 0x8a, 0x08, 0x19, 0x0a, 0x84, 0x91, 0x7a, 0xce, 0x01, 0x1c, 0x01, // h_.........z.... - 0x38, 0x01, 0x1c, 0xce, 0x7a, 0x6f, 0x65, 0x81, 0x1f, 0x11, 0x11, 0x00, 0x00, 0x02, 0x00, 0x00, // 8...zoe......... - 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x24, 0x00, 0x47, 0x00, 0x00, 0x01, 0x14, 0x07, 0x02, // .......$.G...... - 0x00, 0x21, 0x22, 0x24, 0x27, 0x07, 0x06, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, // .!"$'.."&5.463!2 - 0x16, 0x14, 0x0f, 0x01, 0x1e, 0x01, 0x33, 0x32, 0x36, 0x37, 0x36, 0x37, 0x36, 0x3b, 0x01, 0x32, // ......3267676;.2 - 0x16, 0x13, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x34, 0x3f, 0x01, 0x26, 0x23, 0x22, 0x06, // .....#!"&4?.&#". - 0x07, 0x06, 0x07, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x12, 0x00, 0x21, 0x32, 0x04, 0x17, // ....+."&=...!2.. - 0x37, 0x36, 0x32, 0x16, 0x05, 0xe7, 0x01, 0x40, 0xfe, 0x68, 0xfe, 0xee, 0x92, 0xfe, 0xef, 0x6b, // 762....@.h.....k - 0x81, 0x13, 0x34, 0x26, 0x26, 0x1a, 0x01, 0xc0, 0x1a, 0x26, 0x13, 0x89, 0x47, 0xb4, 0x61, 0x86, // ..4&&....&..G.a. - 0xe8, 0x46, 0x0b, 0x2a, 0x08, 0x16, 0xc0, 0x0d, 0x13, 0x19, 0x26, 0x1a, 0xfe, 0x40, 0x1a, 0x26, // .F.*......&..@.& - 0x13, 0x8a, 0x94, 0xc9, 0x86, 0xe8, 0x46, 0x0b, 0x2a, 0x08, 0x16, 0xc7, 0x0d, 0x13, 0x41, 0x01, // ......F.*.....A. - 0x9a, 0x01, 0x13, 0x92, 0x01, 0x14, 0x6b, 0x82, 0x13, 0x34, 0x26, 0x01, 0xe0, 0x05, 0x02, 0xfe, // ......k..4&..... - 0xf4, 0xfe, 0xb3, 0x6e, 0x66, 0x81, 0x13, 0x26, 0x1a, 0x01, 0xc0, 0x1a, 0x26, 0x26, 0x34, 0x13, // ...nf..&....&&4. - 0x89, 0x42, 0x48, 0x82, 0x72, 0x11, 0x64, 0x17, 0x13, 0x03, 0x13, 0xfe, 0x40, 0x1a, 0x26, 0x26, // .BH.r.d.....@.&& - 0x34, 0x13, 0x8a, 0x89, 0x82, 0x72, 0x11, 0x64, 0x17, 0x13, 0x0d, 0x07, 0x01, 0x0c, 0x01, 0x4d, // 4....r.d.......M - 0x6f, 0x65, 0x81, 0x13, 0x26, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, // oe..&........... - 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x3f, 0x00, 0x4f, 0x00, 0x5f, 0x00, 0x6f, // ......./.?.O._.o - 0x00, 0x7f, 0x00, 0x00, 0x01, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, // ........+."&=.46 - 0x3b, 0x01, 0x32, 0x16, 0x35, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, // ;.2.5...+."&=.46 - 0x3b, 0x01, 0x32, 0x16, 0x35, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, // ;.2.5...+."&=.46 - 0x3b, 0x01, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, // ;.2.....#!"&=.46 - 0x33, 0x21, 0x32, 0x16, 0x35, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, // 3!2.5...#!"&=.46 - 0x33, 0x21, 0x32, 0x16, 0x35, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, // 3!2.5...#!"&=.46 - 0x33, 0x21, 0x32, 0x16, 0x13, 0x11, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, // 3!2...4&#!"..... - 0x33, 0x21, 0x32, 0x36, 0x13, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, // 3!26....#!"&5.46 - 0x33, 0x21, 0x32, 0x16, 0x01, 0x80, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, // 3!2.....@....@.. - 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, // ..@....@....@... - 0x0d, 0x40, 0x0d, 0x13, 0x04, 0x80, 0x13, 0x0d, 0xfc, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x03, 0xc0, // .@.......@...... - 0x0d, 0x13, 0x13, 0x0d, 0xfc, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x03, 0xc0, 0x0d, 0x13, 0x13, 0x0d, // .....@.......... - 0xfc, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x03, 0xc0, 0x0d, 0x13, 0x80, 0x13, 0x0d, 0xfa, 0x40, 0x0d, // .@............@. - 0x13, 0x13, 0x0d, 0x05, 0xc0, 0x0d, 0x13, 0x80, 0x5e, 0x42, 0xfa, 0x40, 0x42, 0x5e, 0x5e, 0x42, // ........^B.@B^^B - 0x05, 0xc0, 0x42, 0x5e, 0x01, 0x60, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0xf3, // ..B^.`@....@.... - 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0xf3, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, // @....@....@....@ - 0x0d, 0x13, 0x13, 0xfd, 0xf3, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0xf3, 0x40, // .....@....@....@ - 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0xf3, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, // ....@....@....@. - 0x13, 0x13, 0xfd, 0x33, 0x03, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0xfc, 0xc0, 0x0d, 0x13, 0x13, 0x04, // ...3.@.......... - 0x4d, 0xfb, 0xc0, 0x42, 0x5e, 0x5e, 0x42, 0x04, 0x40, 0x42, 0x5e, 0x5e, 0x00, 0x02, 0x00, 0x00, // M..B^^B.@B^^.... - 0x00, 0x00, 0x04, 0x80, 0x05, 0x80, 0x00, 0x07, 0x00, 0x1f, 0x00, 0x00, 0x01, 0x21, 0x35, 0x34, // .............!54 - 0x26, 0x22, 0x06, 0x15, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, // &"......#!"&5.46 - 0x3b, 0x01, 0x35, 0x34, 0x00, 0x20, 0x00, 0x1d, 0x01, 0x33, 0x32, 0x16, 0x01, 0x40, 0x02, 0x00, // ;.54. ...32..@.. - 0x96, 0xd4, 0x96, 0x03, 0x40, 0x38, 0x28, 0xfc, 0x40, 0x28, 0x38, 0x38, 0x28, 0x20, 0x01, 0x08, // ....@8(.@(88( .. - 0x01, 0x70, 0x01, 0x08, 0x20, 0x28, 0x38, 0x03, 0x00, 0xc0, 0x6a, 0x96, 0x96, 0x6a, 0xfe, 0xe0, // .p.. (8...j..j.. - 0xfd, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x02, 0x40, 0x28, 0x38, 0xc0, 0xb8, 0x01, 0x08, 0xfe, 0xf8, // ..(88(.@(8...... - 0xb8, 0xc0, 0x38, 0x00, 0x00, 0x02, 0x00, 0x40, 0xff, 0x80, 0x07, 0x00, 0x05, 0x80, 0x00, 0x11, // ..8....@........ - 0x00, 0x37, 0x00, 0x00, 0x01, 0x14, 0x07, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, // .7........+."&5. - 0x26, 0x35, 0x34, 0x36, 0x32, 0x16, 0x05, 0x11, 0x14, 0x06, 0x07, 0x06, 0x23, 0x22, 0x2e, 0x02, // &5462.......#".. - 0x23, 0x22, 0x05, 0x06, 0x23, 0x22, 0x26, 0x35, 0x11, 0x34, 0x37, 0x36, 0x37, 0x36, 0x33, 0x32, // #"..#"&5.4767632 - 0x16, 0x17, 0x16, 0x33, 0x32, 0x3e, 0x02, 0x33, 0x32, 0x16, 0x01, 0x40, 0x40, 0x13, 0x0d, 0x40, // ...32>.32..@@..@ - 0x0d, 0x13, 0x40, 0x4b, 0x6a, 0x4b, 0x05, 0xc0, 0x19, 0x1b, 0xd7, 0x9a, 0x3d, 0x7d, 0x5c, 0x8b, // ..@KjK......=}.. - 0x49, 0xc0, 0xfe, 0xf0, 0x11, 0x10, 0x1a, 0x26, 0x1f, 0x15, 0x3a, 0xec, 0xb9, 0x6b, 0xba, 0x7e, // I......&..:..k.~ - 0x26, 0x32, 0x36, 0x7f, 0x5d, 0x53, 0x0d, 0x1a, 0x26, 0x05, 0x00, 0x48, 0x26, 0xfb, 0x0e, 0x0d, // &26.]S..&..H&... - 0x13, 0x13, 0x0d, 0x04, 0xf2, 0x26, 0x48, 0x35, 0x4b, 0x4b, 0x75, 0xfd, 0x05, 0x19, 0x1b, 0x0e, // .....&H5KKu..... - 0x74, 0x2c, 0x34, 0x2c, 0x92, 0x09, 0x26, 0x1a, 0x02, 0xe6, 0x20, 0x17, 0x0e, 0x1d, 0x78, 0x3a, // t,4,..&... ...x: - 0x3b, 0x13, 0x2a, 0x34, 0x2a, 0x26, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x06, 0x80, // ;.*4*&.......... - 0x05, 0x80, 0x00, 0x4b, 0x00, 0x00, 0x01, 0x14, 0x0f, 0x02, 0x0e, 0x01, 0x23, 0x15, 0x14, 0x06, // ...K........#... - 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x1d, 0x01, 0x32, 0x16, // +."&5.46;.2...2. - 0x17, 0x37, 0x36, 0x35, 0x34, 0x02, 0x24, 0x20, 0x04, 0x02, 0x15, 0x14, 0x1f, 0x01, 0x3e, 0x01, // .7654.$ ......>. - 0x33, 0x35, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x15, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, // 3546;.2.....+."& - 0x3d, 0x01, 0x22, 0x26, 0x2f, 0x02, 0x26, 0x35, 0x34, 0x12, 0x36, 0x24, 0x20, 0x04, 0x16, 0x12, // =."&/.&54.6$ ... - 0x06, 0x80, 0x3c, 0x14, 0xb9, 0x16, 0x89, 0x58, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, // ..<....X..@....@ - 0x0e, 0x12, 0x47, 0x76, 0x22, 0x44, 0x1d, 0xb0, 0xfe, 0xd7, 0xfe, 0xb2, 0xfe, 0xd7, 0xb0, 0x1d, // ..Gv"D.......... - 0x44, 0x22, 0x76, 0x47, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x58, 0x89, // D"vG..@....@..X. - 0x16, 0xb9, 0x14, 0x3c, 0x86, 0xe0, 0x01, 0x34, 0x01, 0x4c, 0x01, 0x34, 0xe0, 0x86, 0x02, 0x8a, // ...<...4.L.4.... - 0xa6, 0x94, 0x31, 0x21, 0x53, 0x6b, 0x20, 0x0e, 0x12, 0x12, 0x0e, 0x02, 0x40, 0x0e, 0x12, 0x12, // ..1!Sk .....@... - 0x0e, 0x20, 0x47, 0x3c, 0x0c, 0x5f, 0x62, 0x94, 0x01, 0x06, 0x9c, 0x9c, 0xfe, 0xfa, 0x94, 0x62, // . G<._b........b - 0x5f, 0x0c, 0x3c, 0x47, 0x20, 0x0e, 0x12, 0x12, 0x0e, 0xfd, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0x20, // _..4..5 - 0x34, 0x36, 0x33, 0x32, 0x17, 0x16, 0x03, 0x00, 0x26, 0x34, 0x13, 0xfe, 0xb3, 0xfe, 0xfa, 0x1a, // 4632....&4...... - 0x26, 0x26, 0x1a, 0x01, 0x06, 0x01, 0x4d, 0x13, 0x34, 0x26, 0x01, 0x80, 0x55, 0x46, 0x0a, 0x0f, // &&....M.4&..UF.. - 0x1a, 0x26, 0x18, 0x22, 0x22, 0x18, 0x18, 0x22, 0x22, 0x18, 0x26, 0x1a, 0x0f, 0x0a, 0x46, 0x04, // .&."".."".&...F. - 0xa0, 0xfb, 0xc0, 0x1a, 0x26, 0x13, 0x01, 0x4d, 0x26, 0x1a, 0x01, 0x80, 0x1a, 0x26, 0x01, 0x4d, // ....&..M&....&.M - 0x13, 0x26, 0xfe, 0x12, 0x98, 0x83, 0x1c, 0x05, 0x25, 0x1b, 0x15, 0x1d, 0x15, 0x19, 0x2e, 0x44, // .&......%......D - 0x2e, 0x19, 0x15, 0x1d, 0x15, 0x1b, 0x25, 0x05, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, // ......%......... - 0xff, 0xb9, 0x06, 0x80, 0x05, 0x47, 0x00, 0x13, 0x00, 0x2d, 0x00, 0x49, 0x00, 0x6b, 0x00, 0x00, // .....G...-.I.k.. + 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, 0x04, 0x5e, 0x08, 0x16, 0xc0, 0x12, 0x0e, 0xc0, 0x0e, // $...$ ..^....... + 0x12, 0xc0, 0x0e, 0x12, 0x0a, 0x01, 0x3f, 0x0b, 0x18, 0x0b, 0x01, 0x40, 0x0f, 0xd2, 0xfe, 0xd8, // ......?....@.... + 0xfa, 0x92, 0x92, 0xfa, 0x01, 0x28, 0xfa, 0x92, 0x92, 0x01, 0x72, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, // .....(....r....^ + 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x02, 0x94, 0x14, 0xfe, 0xa0, 0x0e, // .....a...a...... + 0x12, 0x12, 0x0e, 0x01, 0x60, 0x12, 0x0e, 0x0c, 0x0c, 0x01, 0x3f, 0x09, 0x09, 0xfe, 0xc0, 0x10, // ....`.....?..... + 0x01, 0xf9, 0x92, 0xfa, 0xfe, 0xd8, 0xfa, 0x92, 0x92, 0xfa, 0x01, 0x28, 0xfa, 0xbd, 0xfe, 0x5e, // ...........(...^ + 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x02, 0x00, 0x00, // .....a...a...... + 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x00, 0x0d, 0x00, 0x23, 0x00, 0x00, 0x01, 0x21, 0x2e, 0x01, // .........#...!.. + 0x27, 0x03, 0x21, 0x03, 0x0e, 0x01, 0x07, 0x21, 0x17, 0x21, 0x25, 0x11, 0x14, 0x06, 0x23, 0x21, // '.!....!.!%...#! + 0x22, 0x26, 0x35, 0x11, 0x34, 0x37, 0x13, 0x3e, 0x01, 0x33, 0x21, 0x32, 0x16, 0x17, 0x13, 0x16, // "&5.47.>.3!2.... + 0x03, 0xff, 0x01, 0x3c, 0x01, 0x03, 0x01, 0xd4, 0xfd, 0x3c, 0xd4, 0x01, 0x03, 0x01, 0x01, 0x3c, // ...<.....<.....< + 0x5f, 0x01, 0x40, 0x02, 0x60, 0x26, 0x1a, 0xfa, 0x80, 0x1a, 0x26, 0x19, 0xee, 0x0a, 0x35, 0x1a, // _.@.`&....&...5. + 0x03, 0x40, 0x1a, 0x35, 0x0a, 0xee, 0x19, 0x02, 0x40, 0x03, 0x0b, 0x02, 0x01, 0xf0, 0xfe, 0x10, // .@.5....@....... + 0x03, 0x0b, 0x02, 0xc0, 0xa2, 0xfe, 0x1e, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0xe2, 0x3e, 0x3d, 0x02, // ........&&...>=. + 0x28, 0x19, 0x22, 0x22, 0x19, 0xfd, 0xd8, 0x3d, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // (.""...=........ + 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1b, 0x00, 0x27, 0x00, 0x00, 0x00, 0x14, 0x07, 0x01, 0x06, 0x23, // .......'.......# + 0x22, 0x27, 0x26, 0x35, 0x11, 0x34, 0x37, 0x36, 0x17, 0x01, 0x16, 0x10, 0x2e, 0x01, 0x20, 0x0e, // "'&5.476...... . + 0x01, 0x10, 0x1e, 0x01, 0x20, 0x36, 0x00, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, // .... 6.... $...$ + 0x20, 0x04, 0x04, 0xa0, 0x20, 0xfd, 0xe0, 0x0f, 0x11, 0x10, 0x10, 0x20, 0x20, 0x21, 0x1f, 0x02, // ... ...... !.. + 0x20, 0xa0, 0x92, 0xfa, 0xfe, 0xd8, 0xfa, 0x92, 0x92, 0xfa, 0x01, 0x28, 0xfa, 0x01, 0x72, 0xce, // ..........(..r. + 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x02, 0xa5, // ...^.....a...a.. + 0x4a, 0x12, 0xfe, 0xc0, 0x09, 0x08, 0x13, 0x25, 0x02, 0x80, 0x25, 0x13, 0x12, 0x13, 0xfe, 0xc0, // J......%..%..... + 0xcb, 0x01, 0x28, 0xfa, 0x92, 0x92, 0xfa, 0xfe, 0xd8, 0xfa, 0x92, 0x92, 0x02, 0x5f, 0xfe, 0x5e, // ..(.........._.^ + 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x01, 0x00, 0x00, // .....a...a...... + 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x33, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, // .......3......#! + 0x22, 0x27, 0x26, 0x3f, 0x01, 0x26, 0x23, 0x22, 0x0e, 0x02, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x36, // "'&?.&#".....326 + 0x37, 0x36, 0x37, 0x32, 0x1f, 0x01, 0x1e, 0x01, 0x07, 0x06, 0x04, 0x23, 0x22, 0x24, 0x26, 0x02, // 7672.......#"$&. + 0x10, 0x12, 0x36, 0x24, 0x33, 0x32, 0x04, 0x17, 0x37, 0x36, 0x17, 0x16, 0x06, 0x00, 0x26, 0x1a, // ..6$32..76....&. + 0xfe, 0x40, 0x2a, 0x11, 0x11, 0x1f, 0x8a, 0x94, 0xc9, 0x68, 0xbd, 0x8a, 0x51, 0x51, 0x8a, 0xbd, // .@*......h..QQ.. + 0x68, 0x77, 0xd4, 0x49, 0x07, 0x10, 0x0f, 0x0a, 0x89, 0x09, 0x01, 0x08, 0x6d, 0xfe, 0xca, 0xac, // hw.I........m... + 0x9c, 0xfe, 0xe4, 0xce, 0x7a, 0x7a, 0xce, 0x01, 0x1c, 0x9c, 0x93, 0x01, 0x13, 0x6b, 0x82, 0x1d, // ....zz.......k.. + 0x29, 0x27, 0x05, 0x00, 0xfe, 0x40, 0x1a, 0x26, 0x28, 0x27, 0x1e, 0x8a, 0x89, 0x51, 0x8a, 0xbd, // )'...@.&('...Q.. + 0xd0, 0xbd, 0x8a, 0x51, 0x68, 0x5f, 0x0a, 0x02, 0x09, 0x8a, 0x08, 0x19, 0x0a, 0x84, 0x91, 0x7a, // ...Qh_.........z + 0xce, 0x01, 0x1c, 0x01, 0x38, 0x01, 0x1c, 0xce, 0x7a, 0x6f, 0x65, 0x81, 0x1f, 0x11, 0x11, 0x00, // ....8...zoe..... + 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x24, 0x00, 0x47, 0x00, 0x00, // ...........$.G.. + 0x01, 0x14, 0x07, 0x02, 0x00, 0x21, 0x22, 0x24, 0x27, 0x07, 0x06, 0x22, 0x26, 0x35, 0x11, 0x34, // .....!"$'.."&5.4 + 0x36, 0x33, 0x21, 0x32, 0x16, 0x14, 0x0f, 0x01, 0x1e, 0x01, 0x33, 0x32, 0x36, 0x37, 0x36, 0x37, // 63!2......326767 + 0x36, 0x3b, 0x01, 0x32, 0x16, 0x13, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x34, 0x3f, 0x01, // 6;.2.....#!"&4?. + 0x26, 0x23, 0x22, 0x06, 0x07, 0x06, 0x07, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x12, 0x00, // &#".....+."&=... + 0x21, 0x32, 0x04, 0x17, 0x37, 0x36, 0x32, 0x16, 0x05, 0xe7, 0x01, 0x40, 0xfe, 0x68, 0xfe, 0xee, // !2..762....@.h.. + 0x92, 0xfe, 0xef, 0x6b, 0x81, 0x13, 0x34, 0x26, 0x26, 0x1a, 0x01, 0xc0, 0x1a, 0x26, 0x13, 0x89, // ...k..4&&....&.. + 0x47, 0xb4, 0x61, 0x86, 0xe8, 0x46, 0x0b, 0x2a, 0x08, 0x16, 0xc0, 0x0d, 0x13, 0x19, 0x26, 0x1a, // G.a..F.*......&. + 0xfe, 0x40, 0x1a, 0x26, 0x13, 0x8a, 0x94, 0xc9, 0x86, 0xe8, 0x46, 0x0b, 0x2a, 0x08, 0x16, 0xc7, // .@.&......F.*... + 0x0d, 0x13, 0x41, 0x01, 0x9a, 0x01, 0x13, 0x92, 0x01, 0x14, 0x6b, 0x82, 0x13, 0x34, 0x26, 0x01, // ..A.......k..4&. + 0xe0, 0x05, 0x02, 0xfe, 0xf4, 0xfe, 0xb3, 0x6e, 0x66, 0x81, 0x13, 0x26, 0x1a, 0x01, 0xc0, 0x1a, // .......nf..&.... + 0x26, 0x26, 0x34, 0x13, 0x89, 0x42, 0x48, 0x82, 0x72, 0x11, 0x64, 0x17, 0x13, 0x03, 0x13, 0xfe, // &&4..BH.r.d..... + 0x40, 0x1a, 0x26, 0x26, 0x34, 0x13, 0x8a, 0x89, 0x82, 0x72, 0x11, 0x64, 0x17, 0x13, 0x0d, 0x07, // @.&&4....r.d.... + 0x01, 0x0c, 0x01, 0x4d, 0x6f, 0x65, 0x81, 0x13, 0x26, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, // ...Moe..&....... + 0x00, 0x00, 0x07, 0x00, 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x3f, 0x00, 0x4f, // .........../.?.O + 0x00, 0x5f, 0x00, 0x6f, 0x00, 0x7f, 0x00, 0x00, 0x01, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, // ._.o........+."& + 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x35, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, // =.46;.2.5...+."& + 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x35, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, // =.46;.2.5...+."& + 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // =.46;.2.....#!"& + 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x35, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // =.463!2.5...#!"& + 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x35, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // =.463!2.5...#!"& + 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x13, 0x11, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, // =.463!2...4&#!". + 0x15, 0x11, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x13, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // ....3!26....#!"& + 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x80, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, // 5.463!2.....@... + 0x0d, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0x0d, // .@....@....@.... + 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x04, 0x80, 0x13, 0x0d, 0xfc, 0x40, 0x0d, 0x13, // @....@.......@.. + 0x13, 0x0d, 0x03, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xfc, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x03, 0xc0, // .........@...... + 0x0d, 0x13, 0x13, 0x0d, 0xfc, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x03, 0xc0, 0x0d, 0x13, 0x80, 0x13, // .....@.......... + 0x0d, 0xfa, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x05, 0xc0, 0x0d, 0x13, 0x80, 0x5e, 0x42, 0xfa, 0x40, // ..@.........^B.@ + 0x42, 0x5e, 0x5e, 0x42, 0x05, 0xc0, 0x42, 0x5e, 0x01, 0x60, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, // B^^B..B^.`@....@ + 0x0d, 0x13, 0x13, 0xf3, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0xf3, 0x40, 0x0d, // ....@....@....@. + 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0xfd, 0xf3, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, // ...@.....@....@. + 0x13, 0x13, 0xf3, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0xf3, 0x40, 0x0d, 0x13, // ...@....@....@.. + 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0xfd, 0x33, 0x03, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0xfc, 0xc0, // ..@....3.@...... + 0x0d, 0x13, 0x13, 0x04, 0x4d, 0xfb, 0xc0, 0x42, 0x5e, 0x5e, 0x42, 0x04, 0x40, 0x42, 0x5e, 0x5e, // ....M..B^^B.@B^^ + 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x04, 0x80, 0x05, 0x80, 0x00, 0x07, 0x00, 0x1f, 0x00, 0x00, // ................ + 0x01, 0x21, 0x35, 0x34, 0x26, 0x22, 0x06, 0x15, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // .!54&"......#!"& + 0x35, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x35, 0x34, 0x00, 0x20, 0x00, 0x1d, 0x01, 0x33, 0x32, 0x16, // 5.46;.54. ...32. + 0x01, 0x40, 0x02, 0x00, 0x96, 0xd4, 0x96, 0x03, 0x40, 0x38, 0x28, 0xfc, 0x40, 0x28, 0x38, 0x38, // .@......@8(.@(88 + 0x28, 0x20, 0x01, 0x08, 0x01, 0x70, 0x01, 0x08, 0x20, 0x28, 0x38, 0x03, 0x00, 0xc0, 0x6a, 0x96, // ( ...p.. (8...j. + 0x96, 0x6a, 0xfe, 0xe0, 0xfd, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x02, 0x40, 0x28, 0x38, 0xc0, 0xb8, // .j....(88(.@(8.. + 0x01, 0x08, 0xfe, 0xf8, 0xb8, 0xc0, 0x38, 0x00, 0x00, 0x02, 0x00, 0x40, 0xff, 0x80, 0x07, 0x00, // ......8....@.... + 0x05, 0x80, 0x00, 0x11, 0x00, 0x37, 0x00, 0x00, 0x01, 0x14, 0x07, 0x11, 0x14, 0x06, 0x2b, 0x01, // .....7........+. + 0x22, 0x26, 0x35, 0x11, 0x26, 0x35, 0x34, 0x36, 0x32, 0x16, 0x05, 0x11, 0x14, 0x06, 0x07, 0x06, // "&5.&5462....... + 0x23, 0x22, 0x2e, 0x02, 0x23, 0x22, 0x05, 0x06, 0x23, 0x22, 0x26, 0x35, 0x11, 0x34, 0x37, 0x36, // #"..#"..#"&5.476 + 0x37, 0x36, 0x33, 0x32, 0x16, 0x17, 0x16, 0x33, 0x32, 0x3e, 0x02, 0x33, 0x32, 0x16, 0x01, 0x40, // 7632...32>.32..@ + 0x40, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x40, 0x4b, 0x6a, 0x4b, 0x05, 0xc0, 0x19, 0x1b, 0xd7, 0x9a, // @..@..@KjK...... + 0x3d, 0x7d, 0x5c, 0x8b, 0x49, 0xc0, 0xfe, 0xf0, 0x11, 0x10, 0x1a, 0x26, 0x1f, 0x15, 0x3a, 0xec, // =}..I......&..:. + 0xb9, 0x6b, 0xba, 0x7e, 0x26, 0x32, 0x36, 0x7f, 0x5d, 0x53, 0x0d, 0x1a, 0x26, 0x05, 0x00, 0x48, // .k.~&26.]S..&..H + 0x26, 0xfb, 0x0e, 0x0d, 0x13, 0x13, 0x0d, 0x04, 0xf2, 0x26, 0x48, 0x35, 0x4b, 0x4b, 0x75, 0xfd, // &........&H5KKu. + 0x05, 0x19, 0x1b, 0x0e, 0x74, 0x2c, 0x34, 0x2c, 0x92, 0x09, 0x26, 0x1a, 0x02, 0xe6, 0x20, 0x17, // ....t,4,..&... . + 0x0e, 0x1d, 0x78, 0x3a, 0x3b, 0x13, 0x2a, 0x34, 0x2a, 0x26, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // ..x:;.*4*&...... + 0x00, 0x00, 0x06, 0x80, 0x05, 0x80, 0x00, 0x4b, 0x00, 0x00, 0x01, 0x14, 0x0f, 0x02, 0x0e, 0x01, // .......K........ + 0x23, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, // #...+."&5.46;.2. + 0x1d, 0x01, 0x32, 0x16, 0x17, 0x37, 0x36, 0x35, 0x34, 0x02, 0x24, 0x20, 0x04, 0x02, 0x15, 0x14, // ..2..7654.$ .... + 0x1f, 0x01, 0x3e, 0x01, 0x33, 0x35, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x15, 0x11, 0x14, 0x06, // ..>.3546;.2..... + 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x22, 0x26, 0x2f, 0x02, 0x26, 0x35, 0x34, 0x12, 0x36, 0x24, // +."&=."&/.&54.6$ + 0x20, 0x04, 0x16, 0x12, 0x06, 0x80, 0x3c, 0x14, 0xb9, 0x16, 0x89, 0x58, 0x12, 0x0e, 0x40, 0x0e, // .....<....X..@. + 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x47, 0x76, 0x22, 0x44, 0x1d, 0xb0, 0xfe, 0xd7, 0xfe, 0xb2, // ...@..Gv"D...... + 0xfe, 0xd7, 0xb0, 0x1d, 0x44, 0x22, 0x76, 0x47, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, // ....D"vG..@....@ + 0x0e, 0x12, 0x58, 0x89, 0x16, 0xb9, 0x14, 0x3c, 0x86, 0xe0, 0x01, 0x34, 0x01, 0x4c, 0x01, 0x34, // ..X....<...4.L.4 + 0xe0, 0x86, 0x02, 0x8a, 0xa6, 0x94, 0x31, 0x21, 0x53, 0x6b, 0x20, 0x0e, 0x12, 0x12, 0x0e, 0x02, // ......1!Sk ..... + 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x20, 0x47, 0x3c, 0x0c, 0x5f, 0x62, 0x94, 0x01, 0x06, 0x9c, 0x9c, // @.... G<._b..... + 0xfe, 0xfa, 0x94, 0x62, 0x5f, 0x0c, 0x3c, 0x47, 0x20, 0x0e, 0x12, 0x12, 0x0e, 0xfd, 0xc0, 0x0e, // ...b_.. - 0x34, 0x2e, 0x03, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x16, 0x04, 0x10, 0x02, 0x07, 0x06, 0x23, // 4..54632.......# - 0x22, 0x26, 0x35, 0x34, 0x37, 0x36, 0x37, 0x3e, 0x01, 0x34, 0x26, 0x27, 0x26, 0x27, 0x26, 0x35, // "&54767>.4&'&'&5 - 0x34, 0x36, 0x33, 0x32, 0x17, 0x16, 0x04, 0x10, 0x02, 0x07, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, // 4632.......#"&54 - 0x37, 0x3e, 0x01, 0x37, 0x36, 0x37, 0x36, 0x12, 0x10, 0x02, 0x27, 0x26, 0x27, 0x2e, 0x01, 0x27, // 7>.7676...'&'..' - 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x16, 0x03, 0x00, 0x26, 0x34, 0x13, 0xfe, 0xb3, 0xfe, // &54632....&4.... - 0xfa, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0x06, 0x01, 0x4d, 0x13, 0x34, 0x26, 0x01, 0x80, 0x55, 0x46, // ..&&....M.4&..UF - 0x0a, 0x0f, 0x1a, 0x26, 0x18, 0x22, 0x22, 0x18, 0x18, 0x22, 0x22, 0x18, 0x26, 0x1a, 0x0f, 0x0a, // ...&."".."".&... - 0x46, 0x01, 0x55, 0xaa, 0x8c, 0x0d, 0x0c, 0x1b, 0x26, 0x27, 0x38, 0x14, 0x4a, 0x53, 0x53, 0x4a, // F.U.....&'8.JSSJ - 0x14, 0x38, 0x27, 0x26, 0x1a, 0x0d, 0x0d, 0x8c, 0x01, 0xaa, 0xfe, 0xd3, 0x0d, 0x0d, 0x1a, 0x26, // .8'&...........& - 0x27, 0x07, 0x1f, 0x07, 0x2e, 0x24, 0x7b, 0x8a, 0x8a, 0x7b, 0x24, 0x2e, 0x07, 0x1f, 0x07, 0x27, // '....${..{$....' - 0x26, 0x1a, 0x0d, 0x0d, 0xd3, 0x04, 0xa0, 0xfb, 0xc0, 0x1a, 0x26, 0x13, 0x01, 0x4d, 0x26, 0x1a, // &.........&..M&. - 0x01, 0x80, 0x1a, 0x26, 0x01, 0x4d, 0x13, 0x26, 0xfe, 0x12, 0x98, 0x83, 0x1c, 0x05, 0x25, 0x1b, // ...&.M.&......%. - 0x15, 0x1d, 0x15, 0x19, 0x2e, 0x44, 0x2e, 0x19, 0x15, 0x1d, 0x15, 0x1b, 0x25, 0x05, 0x1b, 0x37, // .....D......%..7 - 0xfe, 0xce, 0xfe, 0xfd, 0x3b, 0x05, 0x26, 0x1a, 0x27, 0x14, 0x1d, 0x0f, 0x36, 0xa3, 0xb8, 0xa3, // ....;.&.'...6... - 0x36, 0x0f, 0x1d, 0x14, 0x27, 0x1a, 0x26, 0x05, 0x3b, 0xb6, 0xfe, 0x34, 0xfe, 0x7f, 0x5b, 0x05, // 6...'.&.;..4..[. - 0x26, 0x1a, 0x24, 0x17, 0x04, 0x0d, 0x04, 0x19, 0x1a, 0x5b, 0x01, 0x10, 0x01, 0x32, 0x01, 0x10, // &.$......[...2.. - 0x5b, 0x1a, 0x19, 0x04, 0x0d, 0x04, 0x17, 0x24, 0x1a, 0x26, 0x05, 0x5b, 0x00, 0x0c, 0x00, 0x00, // [......$.&.[.... - 0x00, 0x00, 0x05, 0x80, 0x05, 0x80, 0x00, 0x03, 0x00, 0x07, 0x00, 0x0b, 0x00, 0x0f, 0x00, 0x13, // ................ - 0x00, 0x17, 0x00, 0x1b, 0x00, 0x1f, 0x00, 0x23, 0x00, 0x2f, 0x00, 0x33, 0x00, 0x37, 0x00, 0x00, // .......#./.3.7.. - 0x01, 0x15, 0x23, 0x35, 0x13, 0x15, 0x23, 0x35, 0x21, 0x15, 0x23, 0x35, 0x01, 0x21, 0x11, 0x21, // ..#5..#5!.#5.!.! - 0x11, 0x21, 0x11, 0x21, 0x01, 0x21, 0x11, 0x21, 0x01, 0x11, 0x21, 0x11, 0x01, 0x15, 0x23, 0x35, // .!.!.!.!..!...#5 - 0x21, 0x15, 0x23, 0x35, 0x13, 0x11, 0x21, 0x35, 0x23, 0x11, 0x23, 0x11, 0x21, 0x15, 0x33, 0x35, // !.#5..!5#.#.!.35 - 0x01, 0x11, 0x21, 0x11, 0x21, 0x11, 0x21, 0x11, 0x01, 0x80, 0x80, 0x80, 0x80, 0x03, 0x80, 0x80, // ..!.!.!......... - 0xfc, 0x80, 0x01, 0x80, 0xfe, 0x80, 0x01, 0x80, 0xfe, 0x80, 0x03, 0x00, 0x01, 0x80, 0xfe, 0x80, // ................ - 0xff, 0x00, 0xfd, 0x80, 0x04, 0x80, 0x80, 0x01, 0x80, 0x80, 0x80, 0xfe, 0x80, 0x80, 0x80, 0x01, // ................ - 0x80, 0x80, 0xfd, 0x80, 0xfd, 0x80, 0x05, 0x80, 0xfd, 0x80, 0x01, 0x80, 0x80, 0x80, 0x03, 0x00, // ................ - 0x80, 0x80, 0x80, 0x80, 0xfc, 0x01, 0x01, 0x7f, 0x01, 0x80, 0x01, 0x80, 0xfe, 0x80, 0x01, 0x80, // ................ - 0xfd, 0x80, 0xfd, 0x80, 0x02, 0x80, 0xfe, 0x00, 0x80, 0x80, 0x80, 0x80, 0x02, 0x00, 0xfe, 0x80, // ................ - 0x80, 0xfe, 0x80, 0x02, 0x80, 0x80, 0x80, 0x03, 0x00, 0xfd, 0x80, 0x02, 0x80, 0xfd, 0x80, 0x02, // ................ - 0x80, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x05, 0x80, 0x00, 0x03, // ................ - 0x00, 0x07, 0x00, 0x0b, 0x00, 0x0f, 0x00, 0x13, 0x00, 0x17, 0x00, 0x1b, 0x00, 0x1f, 0x00, 0x23, // ...............# - 0x00, 0x27, 0x00, 0x2b, 0x00, 0x2f, 0x00, 0x33, 0x00, 0x37, 0x00, 0x3b, 0x00, 0x3f, 0x00, 0x00, // .'.+./.3.7.;.?.. - 0x33, 0x23, 0x11, 0x33, 0x13, 0x23, 0x11, 0x33, 0x13, 0x23, 0x11, 0x33, 0x13, 0x23, 0x11, 0x33, // 3#.3.#.3.#.3.#.3 + 0x34, 0x2e, 0x03, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x16, 0x03, 0x00, 0x26, 0x34, 0x13, 0xfe, // 4..54632....&4.. + 0xb3, 0xfe, 0xfa, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0x06, 0x01, 0x4d, 0x13, 0x34, 0x26, 0x01, 0x80, // ....&&....M.4&.. + 0x55, 0x46, 0x0a, 0x0f, 0x1a, 0x26, 0x18, 0x22, 0x22, 0x18, 0x18, 0x22, 0x22, 0x18, 0x26, 0x1a, // UF...&."".."".&. + 0x0f, 0x0a, 0x46, 0x04, 0xa0, 0xfb, 0xc0, 0x1a, 0x26, 0x13, 0x01, 0x4d, 0x26, 0x1a, 0x01, 0x80, // ..F.....&..M&... + 0x1a, 0x26, 0x01, 0x4d, 0x13, 0x26, 0xfe, 0x12, 0x98, 0x83, 0x1c, 0x05, 0x25, 0x1b, 0x15, 0x1d, // .&.M.&......%... + 0x15, 0x19, 0x2f, 0x42, 0x2f, 0x19, 0x15, 0x1d, 0x15, 0x1b, 0x25, 0x05, 0x1b, 0x00, 0x00, 0x00, // ../B/.....%..... + 0x00, 0x04, 0x00, 0x00, 0xff, 0xb9, 0x06, 0x80, 0x05, 0x47, 0x00, 0x13, 0x00, 0x2d, 0x00, 0x49, // .........G...-.I + 0x00, 0x6b, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, 0x22, 0x27, 0x01, 0x21, 0x22, 0x26, 0x35, 0x11, // .k......"'.!"&5. + 0x34, 0x36, 0x33, 0x21, 0x01, 0x36, 0x32, 0x16, 0x00, 0x14, 0x06, 0x07, 0x06, 0x23, 0x22, 0x26, // 463!.62......#"& + 0x35, 0x34, 0x3e, 0x03, 0x34, 0x2e, 0x03, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x16, 0x04, 0x10, // 54>.4..54632.... + 0x02, 0x07, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x37, 0x36, 0x37, 0x3e, 0x01, 0x34, 0x26, 0x27, // ...#"&54767>.4&' + 0x26, 0x27, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x16, 0x04, 0x10, 0x02, 0x07, 0x06, 0x23, // &'&54632.......# + 0x22, 0x26, 0x35, 0x34, 0x37, 0x3e, 0x01, 0x37, 0x36, 0x37, 0x36, 0x12, 0x10, 0x02, 0x27, 0x26, // "&547>.7676...'& + 0x27, 0x2e, 0x01, 0x27, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x16, 0x03, 0x00, 0x26, 0x34, // '..'&54632....&4 + 0x13, 0xfe, 0xb3, 0xfe, 0xfa, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0x06, 0x01, 0x4d, 0x13, 0x34, 0x26, // ......&&....M.4& + 0x01, 0x80, 0x55, 0x46, 0x0a, 0x0f, 0x1a, 0x26, 0x18, 0x22, 0x22, 0x18, 0x18, 0x22, 0x22, 0x18, // ..UF...&."".."". + 0x26, 0x1a, 0x0f, 0x0a, 0x46, 0x01, 0x55, 0xaa, 0x8c, 0x0d, 0x0c, 0x1b, 0x26, 0x27, 0x38, 0x14, // &...F.U.....&'8. + 0x4a, 0x53, 0x53, 0x4a, 0x14, 0x38, 0x27, 0x26, 0x1a, 0x0d, 0x0d, 0x8c, 0x01, 0xaa, 0xfe, 0xd3, // JSSJ.8'&........ + 0x0d, 0x0d, 0x1a, 0x26, 0x27, 0x07, 0x1f, 0x07, 0x2e, 0x24, 0x7b, 0x8a, 0x8a, 0x7b, 0x24, 0x2e, // ...&'....${..{$. + 0x07, 0x1f, 0x07, 0x27, 0x26, 0x1a, 0x0d, 0x0d, 0xd3, 0x04, 0xa0, 0xfb, 0xc0, 0x1a, 0x26, 0x13, // ...'&.........&. + 0x01, 0x4d, 0x26, 0x1a, 0x01, 0x80, 0x1a, 0x26, 0x01, 0x4d, 0x13, 0x26, 0xfe, 0x12, 0x98, 0x83, // .M&....&.M.&.... + 0x1c, 0x05, 0x25, 0x1b, 0x15, 0x1d, 0x15, 0x19, 0x2f, 0x42, 0x2f, 0x19, 0x15, 0x1d, 0x15, 0x1b, // ..%...../B/..... + 0x25, 0x05, 0x1b, 0x37, 0xfe, 0xce, 0xfe, 0xfd, 0x3b, 0x05, 0x26, 0x1a, 0x27, 0x14, 0x1d, 0x0f, // %..7....;.&.'... + 0x36, 0xa3, 0xb8, 0xa3, 0x36, 0x0f, 0x1d, 0x14, 0x27, 0x1a, 0x26, 0x05, 0x3b, 0xb6, 0xfe, 0x34, // 6...6...'.&.;..4 + 0xfe, 0x7f, 0x5b, 0x05, 0x26, 0x1a, 0x24, 0x17, 0x04, 0x0d, 0x04, 0x19, 0x1a, 0x5b, 0x01, 0x10, // ..[.&.$......[.. + 0x01, 0x32, 0x01, 0x10, 0x5b, 0x1a, 0x19, 0x04, 0x0d, 0x04, 0x17, 0x24, 0x1a, 0x26, 0x05, 0x5b, // .2..[......$.&.[ + 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x05, 0x80, 0x05, 0x80, 0x00, 0x03, 0x00, 0x07, 0x00, 0x0b, // ................ + 0x00, 0x0f, 0x00, 0x13, 0x00, 0x17, 0x00, 0x1b, 0x00, 0x1f, 0x00, 0x23, 0x00, 0x2f, 0x00, 0x33, // ...........#./.3 + 0x00, 0x37, 0x00, 0x00, 0x01, 0x15, 0x23, 0x35, 0x13, 0x15, 0x23, 0x35, 0x21, 0x15, 0x23, 0x35, // .7....#5..#5!.#5 + 0x01, 0x21, 0x11, 0x21, 0x11, 0x21, 0x11, 0x21, 0x01, 0x21, 0x11, 0x21, 0x01, 0x11, 0x21, 0x11, // .!.!.!.!.!.!..!. + 0x01, 0x15, 0x23, 0x35, 0x21, 0x15, 0x23, 0x35, 0x13, 0x11, 0x21, 0x35, 0x23, 0x11, 0x23, 0x11, // ..#5!.#5..!5#.#. + 0x21, 0x15, 0x33, 0x35, 0x01, 0x11, 0x21, 0x11, 0x21, 0x11, 0x21, 0x11, 0x01, 0x80, 0x80, 0x80, // !.35..!.!.!..... + 0x80, 0x03, 0x80, 0x80, 0xfc, 0x80, 0x01, 0x80, 0xfe, 0x80, 0x01, 0x80, 0xfe, 0x80, 0x03, 0x00, // ................ + 0x01, 0x80, 0xfe, 0x80, 0xff, 0x00, 0xfd, 0x80, 0x04, 0x80, 0x80, 0x01, 0x80, 0x80, 0x80, 0xfe, // ................ + 0x80, 0x80, 0x80, 0x01, 0x80, 0x80, 0xfd, 0x80, 0xfd, 0x80, 0x05, 0x80, 0xfd, 0x80, 0x01, 0x80, // ................ + 0x80, 0x80, 0x03, 0x00, 0x80, 0x80, 0x80, 0x80, 0xfc, 0x01, 0x01, 0x7f, 0x01, 0x80, 0x01, 0x80, // ................ + 0xfe, 0x80, 0x01, 0x80, 0xfd, 0x80, 0xfd, 0x80, 0x02, 0x80, 0xfe, 0x00, 0x80, 0x80, 0x80, 0x80, // ................ + 0x02, 0x00, 0xfe, 0x80, 0x80, 0xfe, 0x80, 0x02, 0x80, 0x80, 0x80, 0x03, 0x00, 0xfd, 0x80, 0x02, // ................ + 0x80, 0xfd, 0x80, 0x02, 0x80, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, // ................ + 0x05, 0x80, 0x00, 0x03, 0x00, 0x07, 0x00, 0x0b, 0x00, 0x0f, 0x00, 0x13, 0x00, 0x17, 0x00, 0x1b, // ................ + 0x00, 0x1f, 0x00, 0x23, 0x00, 0x27, 0x00, 0x2b, 0x00, 0x2f, 0x00, 0x33, 0x00, 0x37, 0x00, 0x3b, // ...#.'.+./.3.7.; + 0x00, 0x3f, 0x00, 0x00, 0x33, 0x23, 0x11, 0x33, 0x13, 0x23, 0x11, 0x33, 0x13, 0x23, 0x11, 0x33, // .?..3#.3.#.3.#.3 0x13, 0x23, 0x11, 0x33, 0x13, 0x23, 0x11, 0x33, 0x13, 0x23, 0x11, 0x33, 0x13, 0x23, 0x11, 0x33, // .#.3.#.3.#.3.#.3 0x13, 0x23, 0x11, 0x33, 0x13, 0x23, 0x11, 0x33, 0x13, 0x23, 0x11, 0x33, 0x13, 0x23, 0x11, 0x33, // .#.3.#.3.#.3.#.3 0x13, 0x23, 0x11, 0x33, 0x13, 0x23, 0x11, 0x33, 0x13, 0x23, 0x11, 0x33, 0x13, 0x23, 0x11, 0x33, // .#.3.#.3.#.3.#.3 - 0x3f, 0x3f, 0x3f, 0x3f, 0x20, 0x20, 0x5e, 0x1f, 0x1f, 0x9d, 0x1f, 0x1f, 0x9d, 0x3e, 0x3e, 0x7e, // ???? ^......>>~ - 0x1f, 0x1f, 0x3f, 0x1f, 0x1f, 0x3f, 0x1f, 0x1f, 0x9d, 0x3f, 0x3f, 0x9d, 0x3f, 0x3f, 0x7e, 0x3f, // ..?..?...??.??~? - 0x3f, 0x7e, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0xbd, 0x5e, 0x5e, 0x3f, 0x20, 0x20, 0x5e, 0x3f, 0x3f, // ?~??^??.^^? ^?? - 0x05, 0x80, 0xfa, 0x81, 0x05, 0x7f, 0xfa, 0x81, 0x05, 0x7f, 0xfa, 0x81, 0x05, 0x7f, 0xfa, 0x81, // ................ + 0x13, 0x23, 0x11, 0x33, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, 0x20, 0x5e, 0x1f, 0x1f, 0x9d, 0x1f, 0x1f, // .#.3???? ^..... + 0x9d, 0x3e, 0x3e, 0x7e, 0x1f, 0x1f, 0x3f, 0x1f, 0x1f, 0x3f, 0x1f, 0x1f, 0x9d, 0x3f, 0x3f, 0x9d, // .>>~..?..?...??. + 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0xbd, 0x5e, 0x5e, 0x3f, 0x20, // ??~??~??^??.^^? + 0x20, 0x5e, 0x3f, 0x3f, 0x05, 0x80, 0xfa, 0x81, 0x05, 0x7f, 0xfa, 0x81, 0x05, 0x7f, 0xfa, 0x81, // ^??............ 0x05, 0x7f, 0xfa, 0x81, 0x05, 0x7f, 0xfa, 0x81, 0x05, 0x7f, 0xfa, 0x81, 0x05, 0x7f, 0xfa, 0x81, // ................ 0x05, 0x7f, 0xfa, 0x81, 0x05, 0x7f, 0xfa, 0x81, 0x05, 0x7f, 0xfa, 0x81, 0x05, 0x7f, 0xfa, 0x81, // ................ - 0x05, 0x7f, 0xfa, 0x81, 0x05, 0x7f, 0xfa, 0x81, 0x05, 0x7f, 0xfa, 0x80, 0x05, 0x80, 0x00, 0x00, // ................ - 0x00, 0x02, 0x00, 0x00, 0xff, 0x95, 0x05, 0xeb, 0x05, 0x80, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, // ................ - 0x00, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x01, 0x14, 0x07, 0x01, 0x06, 0x23, 0x22, 0x27, // .4&"...2.....#"' - 0x01, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x17, 0x01, 0x16, 0x01, 0xc0, // ...5.463!2...... - 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x04, 0x76, 0x25, 0xfe, 0x15, 0x27, 0x34, 0x35, 0x25, 0xfd, 0x35, // KjKKj.v%..'45%.5 - 0x26, 0x35, 0x4c, 0x34, 0x01, 0xa0, 0x35, 0x80, 0x26, 0x02, 0xcb, 0x25, 0x04, 0x0b, 0x6a, 0x4b, // &5L4..5.&..%..jK - 0x4b, 0x6a, 0x4b, 0xfe, 0x40, 0x35, 0x25, 0xfe, 0x14, 0x25, 0x25, 0x02, 0xcc, 0x25, 0x80, 0x35, // KjK.@5%..%%..%.5 - 0x01, 0xa0, 0x34, 0x4c, 0x35, 0x26, 0xfd, 0x36, 0x27, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // ..4L5&.6'....... - 0xff, 0x95, 0x07, 0x6b, 0x05, 0x80, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x35, 0x00, 0x00, 0x00, 0x34, // ...k.......5...4 - 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x01, 0x14, 0x07, 0x01, 0x06, 0x23, 0x22, 0x27, 0x01, 0x2e, // &"...2.....#"'.. - 0x01, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x17, 0x01, 0x16, 0x05, 0x14, 0x07, 0x01, // .5.463!2........ - 0x06, 0x23, 0x22, 0x26, 0x27, 0x01, 0x36, 0x35, 0x34, 0x27, 0x01, 0x2e, 0x01, 0x23, 0x33, 0x32, // .#"&'.654'...#32 - 0x16, 0x17, 0x01, 0x16, 0x01, 0xc0, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x04, 0x76, 0x25, 0xfe, 0x15, // ......KjKKj.v%.. - 0x27, 0x34, 0x35, 0x25, 0xfd, 0x35, 0x26, 0x35, 0x4c, 0x34, 0x01, 0xa0, 0x35, 0x80, 0x26, 0x02, // '45%.5&5L4..5.&. - 0xcb, 0x25, 0x01, 0x80, 0x25, 0xfe, 0x15, 0x27, 0x34, 0x24, 0x2e, 0x1e, 0x01, 0xd6, 0x25, 0x25, // .%..%..'4$....%% - 0xfd, 0x35, 0x26, 0x80, 0x35, 0xe0, 0x35, 0x80, 0x26, 0x02, 0xcb, 0x25, 0x04, 0x0b, 0x6a, 0x4b, // .5&.5.5.&..%..jK - 0x4b, 0x6a, 0x4b, 0xfe, 0x40, 0x35, 0x25, 0xfe, 0x14, 0x25, 0x25, 0x02, 0xcc, 0x25, 0x80, 0x35, // KjK.@5%..%%..%.5 - 0x01, 0xa0, 0x34, 0x4c, 0x35, 0x26, 0xfd, 0x36, 0x27, 0x34, 0x35, 0x25, 0xfe, 0x14, 0x25, 0x1c, // ..4L5&.6'45%..%. - 0x1f, 0x01, 0xd6, 0x25, 0x35, 0x34, 0x27, 0x02, 0xca, 0x26, 0x35, 0x35, 0x26, 0xfd, 0x36, 0x27, // ...%54'..&55&.6' - 0x00, 0x03, 0x00, 0x0a, 0xff, 0x80, 0x06, 0x79, 0x05, 0x80, 0x00, 0x54, 0x00, 0x64, 0x00, 0x74, // .......y...T.d.t - 0x00, 0x00, 0x01, 0x16, 0x07, 0x01, 0x0e, 0x01, 0x23, 0x21, 0x22, 0x26, 0x27, 0x26, 0x37, 0x34, // ........#!"&'&74 - 0x36, 0x37, 0x36, 0x26, 0x37, 0x3e, 0x02, 0x37, 0x3e, 0x01, 0x37, 0x36, 0x26, 0x37, 0x3e, 0x01, // 676&7>.7>.76&7>. - 0x37, 0x3e, 0x01, 0x37, 0x36, 0x26, 0x37, 0x3e, 0x01, 0x37, 0x3e, 0x01, 0x37, 0x36, 0x26, 0x37, // 7>.76&7>.7>.76&7 - 0x3e, 0x02, 0x37, 0x3e, 0x06, 0x17, 0x07, 0x36, 0x33, 0x21, 0x32, 0x16, 0x07, 0x01, 0x0e, 0x01, // >.7>...63!2..... - 0x23, 0x21, 0x22, 0x07, 0x06, 0x17, 0x16, 0x33, 0x21, 0x32, 0x36, 0x37, 0x01, 0x36, 0x27, 0x16, // #!"....3!267.6'. - 0x05, 0x06, 0x16, 0x33, 0x21, 0x32, 0x36, 0x3f, 0x01, 0x36, 0x26, 0x23, 0x21, 0x22, 0x06, 0x07, // ...3!26?.6&#!".. - 0x03, 0x06, 0x16, 0x33, 0x21, 0x32, 0x36, 0x3f, 0x01, 0x36, 0x26, 0x23, 0x21, 0x22, 0x06, 0x07, // ...3!26?.6&#!".. - 0x06, 0x67, 0x28, 0x16, 0xfe, 0xed, 0x13, 0x73, 0x41, 0xfc, 0x65, 0x4d, 0x8f, 0x1c, 0x18, 0x16, // .g(....sA.eM.... - 0x06, 0x01, 0x01, 0x08, 0x01, 0x02, 0x0c, 0x15, 0x06, 0x17, 0x2c, 0x08, 0x03, 0x05, 0x02, 0x03, // ..........,..... - 0x1c, 0x03, 0x15, 0x2a, 0x04, 0x01, 0x07, 0x04, 0x04, 0x24, 0x04, 0x13, 0x2f, 0x04, 0x01, 0x08, // ...*.....$../... - 0x02, 0x02, 0x0e, 0x16, 0x06, 0x08, 0x11, 0x0d, 0x13, 0x14, 0x21, 0x27, 0x1c, 0x01, 0x26, 0x0d, // ..........!'..&. - 0x02, 0xf9, 0x4a, 0x50, 0x16, 0xfe, 0xee, 0x24, 0x47, 0x5d, 0xfc, 0x9b, 0x1b, 0x0b, 0x0b, 0x0a, // ..JP...$G]...... - 0x18, 0x78, 0x03, 0x9b, 0x1d, 0x36, 0x08, 0x01, 0x2c, 0x07, 0x02, 0x26, 0xfb, 0xed, 0x04, 0x0c, // .x...6..,..&.... - 0x0e, 0x02, 0x60, 0x0d, 0x19, 0x04, 0x15, 0x04, 0x0c, 0x0e, 0xfd, 0xa0, 0x0d, 0x19, 0x04, 0x68, // ..`............h - 0x04, 0x0c, 0x0e, 0x02, 0x60, 0x0d, 0x19, 0x04, 0x15, 0x04, 0x0c, 0x0e, 0xfd, 0xa0, 0x0d, 0x19, // ....`........... - 0x04, 0x04, 0x22, 0x39, 0x48, 0xfc, 0x76, 0x40, 0x57, 0x6b, 0x4e, 0x43, 0x3c, 0x04, 0x2e, 0x0e, // .."9H.v@WkNC<... - 0x08, 0x1b, 0x06, 0x0b, 0x14, 0x1b, 0x0a, 0x26, 0x6b, 0x26, 0x0a, 0x28, 0x08, 0x0b, 0x22, 0x06, // .......&k&.(..". - 0x24, 0x70, 0x22, 0x09, 0x2e, 0x05, 0x0d, 0x23, 0x05, 0x1a, 0x75, 0x26, 0x08, 0x23, 0x09, 0x08, // $p"....#..u&.#.. - 0x14, 0x1a, 0x08, 0x0c, 0x25, 0x21, 0x27, 0x19, 0x16, 0x01, 0x06, 0x03, 0x09, 0x70, 0x4a, 0xfc, // ....%!'......pJ. - 0x76, 0x77, 0x45, 0x0f, 0x10, 0x1b, 0x46, 0x1f, 0x1a, 0x03, 0xdb, 0x16, 0x23, 0x0f, 0x1e, 0x0d, // vwE...F.....#... - 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0xfe, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, // ...@..........@. - 0x13, 0x13, 0x0d, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0x97, 0x05, 0x00, 0x05, 0x80, 0x00, 0x1c, // ................ - 0x00, 0x00, 0x01, 0x32, 0x17, 0x1e, 0x01, 0x15, 0x11, 0x14, 0x06, 0x07, 0x06, 0x23, 0x22, 0x27, // ...2.........#"' - 0x09, 0x01, 0x06, 0x23, 0x22, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, 0x36, 0x33, 0x04, // ...#"'..5.46763. - 0x8c, 0x17, 0x15, 0x21, 0x27, 0x27, 0x21, 0x13, 0x19, 0x30, 0x23, 0xfe, 0x47, 0xfe, 0x47, 0x24, // ...!''!..0#.G.G$ - 0x2f, 0x17, 0x15, 0x21, 0x27, 0x27, 0x21, 0x15, 0x17, 0x05, 0x80, 0x09, 0x0d, 0x38, 0x22, 0xfa, // /..!''!......8". - 0xf7, 0x22, 0x38, 0x0d, 0x08, 0x20, 0x01, 0xa8, 0xfe, 0x58, 0x21, 0x09, 0x0d, 0x38, 0x22, 0x05, // ."8.. ...X!..8". - 0x09, 0x22, 0x38, 0x0d, 0x09, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0xff, 0x80, 0x06, 0x80, // ."8............. - 0x05, 0x80, 0x00, 0x03, 0x00, 0x0c, 0x00, 0x14, 0x00, 0x3c, 0x00, 0x00, 0x29, 0x01, 0x11, 0x21, // .........<..)..! - 0x11, 0x21, 0x11, 0x23, 0x22, 0x26, 0x3d, 0x01, 0x21, 0x00, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, // .!.#"&=.!.4&"... - 0x32, 0x37, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, // 27...+....#!"&=. - 0x23, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // #"&5.46;..463!2. - 0x1f, 0x01, 0x1e, 0x01, 0x15, 0x11, 0x33, 0x32, 0x16, 0x01, 0x80, 0x03, 0x80, 0xfc, 0x80, 0x03, // ......32........ - 0x80, 0xa0, 0x28, 0x38, 0xfd, 0x80, 0x04, 0x80, 0x26, 0x34, 0x26, 0x26, 0x34, 0xa6, 0x13, 0x0d, // ..(8....&4&&4... - 0xe0, 0x38, 0x28, 0xfc, 0x40, 0x28, 0x38, 0xe0, 0x0d, 0x13, 0x71, 0x4f, 0x40, 0x38, 0x28, 0x02, // .8(.@(8...qO@8(. - 0xa0, 0x28, 0x60, 0x1c, 0x98, 0x1c, 0x28, 0x40, 0x4f, 0x71, 0x01, 0x00, 0x01, 0x80, 0x01, 0x80, // .(`...(@Oq...... - 0x38, 0x28, 0xa0, 0xfd, 0x26, 0x34, 0x26, 0x26, 0x34, 0x26, 0x40, 0xfe, 0x60, 0x0d, 0x13, 0xa0, // 8(..&4&&4&@.`... - 0x28, 0x38, 0x38, 0x28, 0xa0, 0x13, 0x0d, 0x01, 0xa0, 0x4f, 0x71, 0x02, 0x20, 0x28, 0x38, 0x28, // (88(.....Oq. (8( - 0x1c, 0x98, 0x1c, 0x60, 0x28, 0xff, 0x00, 0x71, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x07, 0x80, // ...`(..q........ - 0x06, 0x00, 0x00, 0x07, 0x00, 0x21, 0x00, 0x29, 0x00, 0x00, 0x00, 0x32, 0x16, 0x14, 0x06, 0x22, // .....!.)...2..." - 0x26, 0x34, 0x01, 0x32, 0x16, 0x15, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, // &4.2.....#!"&5.4 - 0x36, 0x3b, 0x01, 0x37, 0x3e, 0x01, 0x33, 0x21, 0x32, 0x16, 0x1f, 0x01, 0x00, 0x20, 0x00, 0x10, // 6;.7>.3!2.... .. - 0x00, 0x20, 0x00, 0x10, 0x03, 0x49, 0xee, 0xa9, 0xa9, 0xee, 0xa9, 0x03, 0xe0, 0x6a, 0x96, 0x96, // . ...I.......j.. - 0x6a, 0xfa, 0x80, 0x6a, 0x96, 0x96, 0x6a, 0xe0, 0x33, 0x13, 0x65, 0x35, 0x02, 0x00, 0x35, 0x65, // j..j..j.3.e5..5e - 0x13, 0x33, 0xfd, 0x67, 0x01, 0x72, 0x01, 0x07, 0xfe, 0xf9, 0xfe, 0x8e, 0xfe, 0xf9, 0x03, 0x60, // .3.g.r.........` - 0xa9, 0xee, 0xa9, 0xa9, 0xee, 0x02, 0x49, 0x96, 0x6a, 0xfc, 0x80, 0x6a, 0x96, 0x96, 0x6a, 0x03, // ......I.j..j..j. - 0x80, 0x6a, 0x96, 0x88, 0x31, 0x47, 0x47, 0x31, 0x88, 0xfb, 0x80, 0x01, 0x07, 0x01, 0x72, 0x01, // .j..1GG1......r. - 0x07, 0xfe, 0xf9, 0xfe, 0x8e, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x80, // ................ - 0x05, 0x80, 0x00, 0x09, 0x00, 0x51, 0x00, 0x00, 0x01, 0x03, 0x1e, 0x02, 0x33, 0x37, 0x26, 0x27, // .....Q......37&' - 0x26, 0x01, 0x23, 0x37, 0x36, 0x37, 0x36, 0x37, 0x36, 0x37, 0x13, 0x01, 0x3b, 0x01, 0x17, 0x13, // &.#7676767..;... - 0x16, 0x17, 0x16, 0x17, 0x16, 0x17, 0x16, 0x17, 0x16, 0x17, 0x16, 0x17, 0x16, 0x17, 0x16, 0x15, // ................ - 0x14, 0x07, 0x22, 0x27, 0x26, 0x23, 0x22, 0x0f, 0x02, 0x34, 0x3f, 0x01, 0x36, 0x37, 0x36, 0x34, // .."'&#"..4?.6764 - 0x2f, 0x02, 0x25, 0x06, 0x07, 0x06, 0x15, 0x14, 0x17, 0x16, 0x17, 0x32, 0x1e, 0x01, 0x17, 0x16, // /.%........2.... - 0x15, 0x14, 0x07, 0x22, 0x25, 0x07, 0x06, 0x02, 0xd5, 0xaa, 0x49, 0xa1, 0x4d, 0x0e, 0x1d, 0x20, // ..."%.....I.M.. - 0x3c, 0x35, 0xfd, 0x19, 0x15, 0x02, 0x16, 0x3a, 0x59, 0x15, 0x14, 0x1c, 0xed, 0x01, 0x18, 0x4b, // <5.....:Y......K - 0x35, 0x0b, 0xcd, 0x67, 0x15, 0x27, 0x39, 0x1a, 0x27, 0x18, 0x29, 0x16, 0x0d, 0x16, 0x2f, 0x2f, // 5..g.'9.'.)...// - 0x38, 0x06, 0x01, 0x50, 0x70, 0x5d, 0x60, 0x4f, 0x38, 0xc8, 0x3a, 0x04, 0x83, 0x38, 0x0c, 0x0c, // 8..Pp]`O8.:..8.. - 0x06, 0x2f, 0x5c, 0xfe, 0x3e, 0x1d, 0x4b, 0x17, 0x11, 0x1a, 0x4d, 0x03, 0x15, 0x27, 0x15, 0x01, // ./..>.K...M..'.. - 0x02, 0x42, 0xfe, 0xe5, 0x30, 0x51, 0x03, 0xd1, 0xfe, 0x3e, 0x01, 0x02, 0x01, 0x02, 0x5f, 0x92, // .B..0Q...>...._. - 0x84, 0xfb, 0xfe, 0x4f, 0x07, 0x0b, 0x10, 0x0f, 0x10, 0x34, 0x02, 0x68, 0x02, 0xd4, 0x15, 0xfe, // ...O.....4.h.... - 0x20, 0xf2, 0x37, 0x66, 0x85, 0x3a, 0x6a, 0x43, 0x52, 0x31, 0x08, 0x13, 0x04, 0x06, 0x15, 0x27, // .7f.:jCR1.....' - 0x12, 0x0e, 0x0c, 0x08, 0x08, 0x02, 0x0b, 0x02, 0x2d, 0x21, 0x1c, 0x0d, 0x0a, 0x0c, 0x1e, 0x11, // ........-!...... - 0x72, 0xe4, 0x02, 0x41, 0xd1, 0x40, 0x14, 0x1f, 0x0c, 0x15, 0x0b, 0x04, 0x06, 0x03, 0x1c, 0x1e, // r..A.@.......... - 0x11, 0x0a, 0x14, 0x08, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x05, 0x80, // ................ - 0x05, 0x80, 0x00, 0x13, 0x00, 0x25, 0x00, 0x65, 0x00, 0x00, 0x25, 0x16, 0x33, 0x32, 0x36, 0x37, // .....%.e..%.3267 - 0x36, 0x35, 0x34, 0x27, 0x26, 0x27, 0x26, 0x23, 0x22, 0x07, 0x15, 0x07, 0x13, 0x14, 0x03, 0x16, // 654'&'&#"....... - 0x33, 0x32, 0x36, 0x35, 0x34, 0x27, 0x26, 0x23, 0x22, 0x07, 0x14, 0x17, 0x16, 0x0f, 0x01, 0x14, // 32654'&#"....... - 0x01, 0x37, 0x36, 0x37, 0x36, 0x37, 0x36, 0x37, 0x36, 0x35, 0x03, 0x02, 0x27, 0x26, 0x27, 0x26, // .767676765..'&'& - 0x27, 0x26, 0x27, 0x26, 0x2f, 0x01, 0x2d, 0x01, 0x37, 0x32, 0x36, 0x33, 0x32, 0x16, 0x3b, 0x01, // '&'&/.-.72632.;. - 0x32, 0x17, 0x16, 0x17, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x07, 0x06, 0x07, 0x16, 0x17, // 2............... - 0x16, 0x15, 0x14, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x2f, 0x01, 0x26, 0x07, 0x06, // .........../.&.. - 0x02, 0x2b, 0x4c, 0x40, 0x83, 0xaa, 0x25, 0x26, 0x29, 0x3a, 0x53, 0x50, 0xa7, 0x4a, 0x1b, 0x01, // .+L@..%&):SP.J.. - 0x03, 0x02, 0x2b, 0x42, 0xaf, 0xb2, 0x55, 0x54, 0xab, 0x34, 0x4e, 0x02, 0x07, 0x01, 0x01, 0xfd, // ..+B..UT.4N..... - 0xe4, 0x02, 0x2d, 0x17, 0x4d, 0x2e, 0x11, 0x04, 0x09, 0x02, 0x05, 0x04, 0x01, 0x0a, 0x01, 0x0b, // ..-.M........... - 0x12, 0x33, 0x1e, 0x54, 0x04, 0x01, 0x04, 0x01, 0x7c, 0x2d, 0x05, 0x12, 0x05, 0x01, 0x29, 0x14, // .3.T....|-....). - 0x4a, 0x58, 0x67, 0x2b, 0x35, 0x39, 0x2d, 0x2c, 0x2a, 0x40, 0x3f, 0x1a, 0x7c, 0xb1, 0x5a, 0x5c, // JXg+59-,*@?.|.Z. - 0x1d, 0x15, 0x32, 0x42, 0x4a, 0x49, 0x82, 0x52, 0x74, 0xc5, 0x54, 0xd6, 0x21, 0x0f, 0x20, 0x52, // ..2BJI.Rt.T.!. R - 0x48, 0x46, 0x6f, 0x72, 0x42, 0x5e, 0x20, 0x20, 0x0a, 0x90, 0xad, 0xfe, 0xf2, 0x0f, 0x02, 0xcd, // HForB^ ........ - 0x07, 0x82, 0x9f, 0x70, 0x4b, 0x4b, 0x0d, 0x2c, 0x21, 0x7a, 0x9d, 0x62, 0x2b, 0xfc, 0x65, 0x5e, // ...pKK.,!z.b+.e^ - 0x09, 0x03, 0x0c, 0x13, 0x1b, 0x18, 0x42, 0x80, 0x01, 0xf1, 0x01, 0x00, 0x94, 0x57, 0x16, 0x04, // ......B......W.. - 0x08, 0x0c, 0x03, 0x02, 0x0b, 0x53, 0x06, 0x0d, 0x01, 0x01, 0x01, 0x1b, 0x0d, 0x1a, 0x1d, 0x2f, // .....S........./ - 0x2f, 0x72, 0x41, 0x46, 0x74, 0x2f, 0x14, 0x39, 0x29, 0x69, 0x6a, 0x82, 0x4c, 0x55, 0x3e, 0x37, // /rAFt/.9)ij.LU>7 - 0x48, 0x24, 0x24, 0x18, 0x0f, 0x04, 0x04, 0x02, 0x0d, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // H$$............. - 0xff, 0x80, 0x04, 0x00, 0x05, 0x80, 0x00, 0x4a, 0x00, 0x00, 0x15, 0x37, 0x36, 0x37, 0x36, 0x37, // .......J...76767 - 0x36, 0x3f, 0x01, 0x13, 0x37, 0x3e, 0x04, 0x35, 0x3f, 0x03, 0x35, 0x26, 0x27, 0x26, 0x27, 0x37, // 6?..7>.5?.5&'&'7 - 0x05, 0x16, 0x33, 0x32, 0x37, 0x3e, 0x01, 0x33, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, // ..327>.3........ - 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x03, 0x0f, 0x02, 0x06, 0x17, 0x16, 0x17, 0x16, 0x17, 0x06, // ................ - 0x07, 0x06, 0x07, 0x22, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x2f, 0x01, 0x26, 0x07, 0x06, 0x11, // ..."..#"'&/.&... - 0x04, 0x49, 0x4c, 0x28, 0x1d, 0x0c, 0x1b, 0x38, 0x0c, 0x08, 0x12, 0x0e, 0x0b, 0x07, 0x1d, 0x10, // .IL(...8........ - 0x16, 0x08, 0x29, 0x67, 0x1c, 0x0a, 0x13, 0x01, 0x3d, 0x27, 0x22, 0x42, 0x94, 0x21, 0x46, 0x01, // ..)g....='"B.!F. - 0x02, 0x04, 0x07, 0x06, 0x37, 0x36, 0x40, 0x25, 0x0c, 0x0c, 0x09, 0x04, 0x2c, 0x16, 0x3d, 0x26, // ....76@%....,.=& - 0x2b, 0x0c, 0x02, 0x03, 0x40, 0x37, 0x24, 0x1e, 0x01, 0x06, 0x07, 0x02, 0x12, 0x05, 0x18, 0x12, // +...@7$......... - 0x09, 0x13, 0x13, 0x7e, 0xc6, 0x29, 0x85, 0x4a, 0x7e, 0x55, 0x01, 0x13, 0x13, 0x14, 0x25, 0x40, // ...~.).J~U....%@ - 0x8b, 0x01, 0x0c, 0x40, 0x2c, 0x51, 0x35, 0x28, 0x15, 0x01, 0x9d, 0x3f, 0x87, 0x32, 0x26, 0x16, // ...@,Q5(...?.2&. - 0x06, 0x02, 0x02, 0x67, 0x0e, 0x02, 0x09, 0x02, 0x05, 0x13, 0x13, 0x1d, 0x16, 0x13, 0x0c, 0x10, // ...g............ - 0x0f, 0x1f, 0x39, 0x2c, 0x26, 0xc7, 0x6b, 0xfe, 0xc9, 0x9e, 0xeb, 0x2d, 0x07, 0x14, 0x0f, 0x06, // ..9,&.k....-.... - 0x05, 0x05, 0x1d, 0x1d, 0x1f, 0x0a, 0x01, 0x02, 0x03, 0x04, 0x0d, 0x02, 0x01, 0x0c, 0x07, 0x00, // ................ - 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0xfa, 0x05, 0x80, 0x00, 0x69, 0x00, 0x85, 0x00, 0x00, // ...........i.... - 0x13, 0x17, 0x16, 0x3b, 0x01, 0x3f, 0x01, 0x17, 0x21, 0x17, 0x16, 0x36, 0x3f, 0x02, 0x32, 0x17, // ...;.?..!..6?.2. - 0x1c, 0x01, 0x1f, 0x01, 0x07, 0x14, 0x07, 0x06, 0x07, 0x26, 0x27, 0x2e, 0x02, 0x27, 0x26, 0x27, // .........&'..'&' - 0x26, 0x22, 0x06, 0x23, 0x22, 0x07, 0x06, 0x1f, 0x01, 0x11, 0x13, 0x07, 0x06, 0x17, 0x16, 0x17, // &".#"........... - 0x32, 0x1e, 0x01, 0x17, 0x16, 0x17, 0x16, 0x15, 0x14, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x23, // 2..........#"'&# - 0x22, 0x07, 0x06, 0x23, 0x26, 0x35, 0x27, 0x35, 0x36, 0x37, 0x36, 0x37, 0x36, 0x37, 0x36, 0x27, // "..#&5'56767676' - 0x03, 0x26, 0x36, 0x34, 0x26, 0x27, 0x26, 0x27, 0x26, 0x23, 0x22, 0x06, 0x07, 0x0e, 0x02, 0x07, // .&64&'&'&#"..... - 0x0e, 0x01, 0x23, 0x26, 0x27, 0x11, 0x35, 0x01, 0x32, 0x16, 0x0f, 0x01, 0x06, 0x22, 0x2f, 0x01, // ..#&'.5.2...."/. - 0x26, 0x36, 0x3b, 0x01, 0x11, 0x23, 0x22, 0x26, 0x3f, 0x01, 0x36, 0x32, 0x1f, 0x01, 0x16, 0x06, // &6;..#"&?.62.... - 0x2b, 0x01, 0x11, 0x51, 0x36, 0x14, 0xbf, 0x82, 0x13, 0x73, 0xd7, 0x01, 0x25, 0x22, 0x0e, 0x1c, // +..Q6....s..%".. - 0x07, 0x07, 0x2a, 0x0f, 0x0d, 0x01, 0x01, 0x01, 0x04, 0x27, 0x1d, 0x19, 0x1d, 0x08, 0x0f, 0x08, // ..*......'...... - 0x02, 0x0d, 0x0e, 0x07, 0x47, 0x88, 0x2b, 0x22, 0x21, 0x0a, 0x02, 0x01, 0x03, 0x01, 0x01, 0x0c, // ....G.+"!....... - 0x31, 0x28, 0x02, 0x20, 0x38, 0x0f, 0x1e, 0x14, 0x05, 0x03, 0x0e, 0x14, 0x6e, 0x4d, 0x48, 0xa6, // 1(. 8.......nMH. - 0x58, 0x91, 0x30, 0x16, 0x02, 0x01, 0x15, 0x3a, 0x8b, 0x14, 0x09, 0x03, 0x08, 0x02, 0x05, 0x01, // X.0....:........ - 0x01, 0x04, 0x04, 0x06, 0x08, 0x26, 0x6e, 0x2b, 0x72, 0x10, 0x0d, 0x12, 0x1a, 0x0b, 0x06, 0x1b, // .....&n+r....... - 0x07, 0x2c, 0x0c, 0x06, 0xd0, 0x21, 0x12, 0x14, 0x7e, 0x14, 0x3a, 0x14, 0x7e, 0x14, 0x12, 0x21, // .,...!..~.:.~..! - 0x50, 0x50, 0x21, 0x12, 0x14, 0x7e, 0x14, 0x3a, 0x14, 0x7e, 0x14, 0x12, 0x21, 0x50, 0x05, 0x7f, // PP!..~.:.~..!P.. - 0x1b, 0x05, 0x03, 0x01, 0x01, 0x02, 0x01, 0x10, 0x08, 0x08, 0x01, 0x01, 0x1a, 0x9d, 0x35, 0x64, // ..............5d - 0x3a, 0x20, 0x13, 0x0f, 0x03, 0x2b, 0x55, 0x18, 0x4d, 0x36, 0x02, 0x0f, 0x04, 0x02, 0x02, 0x05, // : ...+U.M6...... - 0x61, 0x27, 0x98, 0xfe, 0xb4, 0xfe, 0x99, 0x93, 0x2e, 0x27, 0x19, 0x07, 0x0a, 0x10, 0x04, 0x08, // a'.......'...... - 0x0a, 0x2d, 0x05, 0x0a, 0x13, 0x01, 0x0a, 0x08, 0x0e, 0x04, 0x16, 0x04, 0x1a, 0x09, 0x21, 0x10, // .-............!. - 0x26, 0x0c, 0x15, 0x23, 0xc0, 0xf1, 0x01, 0xac, 0x3e, 0x71, 0x5c, 0x16, 0x04, 0x05, 0x01, 0x06, // &..#....>q...... - 0x1b, 0x0b, 0x09, 0x30, 0x66, 0x21, 0x13, 0x1a, 0x1b, 0x11, 0x01, 0x29, 0x56, 0xfb, 0x02, 0x25, // ...0f!.....)V..% - 0x1a, 0xa2, 0x1a, 0x1a, 0xa2, 0x1a, 0x25, 0x04, 0x00, 0x25, 0x1a, 0xa2, 0x1a, 0x1a, 0xa2, 0x1a, // ......%..%...... - 0x25, 0xfc, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x86, 0x06, 0x00, 0x05, 0x80, 0x00, 0x68, // %..............h - 0x00, 0x84, 0x00, 0x00, 0x13, 0x17, 0x16, 0x3b, 0x01, 0x3f, 0x01, 0x05, 0x21, 0x17, 0x16, 0x36, // .......;.?..!..6 - 0x3f, 0x02, 0x32, 0x17, 0x1c, 0x01, 0x1f, 0x01, 0x07, 0x14, 0x07, 0x06, 0x07, 0x26, 0x27, 0x2e, // ?.2..........&'. - 0x02, 0x27, 0x26, 0x27, 0x26, 0x22, 0x06, 0x23, 0x22, 0x07, 0x06, 0x1f, 0x01, 0x35, 0x13, 0x07, // .'&'&".#"....5.. - 0x06, 0x17, 0x16, 0x17, 0x32, 0x1e, 0x01, 0x17, 0x16, 0x17, 0x16, 0x15, 0x14, 0x07, 0x06, 0x23, // ....2..........# - 0x22, 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x23, 0x26, 0x35, 0x27, 0x35, 0x36, 0x37, 0x36, 0x37, // "'&#"..#&5'56767 - 0x36, 0x37, 0x36, 0x11, 0x27, 0x10, 0x27, 0x26, 0x27, 0x26, 0x27, 0x26, 0x23, 0x22, 0x06, 0x07, // 676.'.'&'&'&#".. - 0x0e, 0x02, 0x07, 0x0e, 0x01, 0x23, 0x26, 0x27, 0x11, 0x35, 0x01, 0x16, 0x14, 0x0f, 0x01, 0x06, // .....#&'.5...... - 0x26, 0x3d, 0x01, 0x21, 0x15, 0x14, 0x06, 0x2f, 0x01, 0x26, 0x34, 0x3f, 0x01, 0x36, 0x16, 0x1d, // &=.!.../.&4?.6.. - 0x01, 0x21, 0x35, 0x34, 0x36, 0x17, 0x51, 0x36, 0x14, 0xbf, 0x82, 0x13, 0x73, 0x01, 0xbe, 0x01, // .!546.Q6....s... - 0x3e, 0x22, 0x0e, 0x1c, 0x07, 0x07, 0x2a, 0x0f, 0x0d, 0x01, 0x01, 0x01, 0x04, 0x27, 0x1d, 0x19, // >"....*......'.. - 0x1d, 0x08, 0x0f, 0x08, 0x02, 0x0d, 0x0e, 0x07, 0x67, 0xae, 0x29, 0x5e, 0x21, 0x0a, 0x02, 0x01, // ........g.)^!... - 0x03, 0x01, 0x01, 0x0c, 0x31, 0x28, 0x02, 0x20, 0x38, 0x0f, 0x1e, 0x14, 0x05, 0x03, 0x0e, 0x14, // ....1(. 8....... - 0x6e, 0x4d, 0x48, 0xa6, 0x52, 0x97, 0x2d, 0x19, 0x02, 0x01, 0x15, 0x3a, 0x8b, 0x14, 0x09, 0x03, // nMH.R.-....:.... - 0x06, 0x05, 0x02, 0x02, 0x04, 0x06, 0x08, 0x26, 0x6e, 0x32, 0xed, 0x0e, 0x0d, 0x12, 0x1a, 0x0b, // .......&n2...... - 0x06, 0x1b, 0x07, 0x2c, 0x0c, 0x05, 0xe1, 0x1a, 0x1a, 0xa2, 0x1a, 0x25, 0xfc, 0x00, 0x25, 0x1a, // ...,.......%..%. - 0xa2, 0x1a, 0x1a, 0xa2, 0x1a, 0x25, 0x04, 0x00, 0x25, 0x1a, 0x05, 0x7f, 0x1b, 0x05, 0x03, 0x01, // .....%..%....... - 0x01, 0x02, 0x01, 0x10, 0x08, 0x08, 0x01, 0x01, 0x1a, 0x9d, 0x35, 0x64, 0x3a, 0x20, 0x13, 0x0f, // ..........5d: .. - 0x03, 0x2b, 0x55, 0x18, 0x4d, 0x36, 0x02, 0x0f, 0x04, 0x02, 0x02, 0x05, 0x61, 0x27, 0x98, 0x34, // .+U.M6......a'.4 - 0xfe, 0x99, 0x93, 0x2e, 0x27, 0x19, 0x07, 0x0a, 0x10, 0x04, 0x08, 0x0a, 0x2d, 0x05, 0x0a, 0x13, // ....'.......-... - 0x01, 0x0a, 0x08, 0x0d, 0x05, 0x16, 0x04, 0x1a, 0x09, 0x21, 0x10, 0x26, 0x0c, 0x15, 0x23, 0x89, // .........!.&..#. - 0x01, 0x28, 0x2c, 0x01, 0x09, 0x0d, 0x0b, 0x04, 0x05, 0x01, 0x06, 0x1c, 0x0a, 0x09, 0x30, 0x66, // .(,...........0f - 0x21, 0x13, 0x1a, 0x1b, 0x11, 0x01, 0x29, 0x56, 0xfa, 0xf3, 0x14, 0x3a, 0x14, 0x7e, 0x14, 0x12, // !.....)V...:.~.. - 0x21, 0x50, 0x50, 0x21, 0x12, 0x14, 0x7e, 0x14, 0x3a, 0x14, 0x7e, 0x14, 0x12, 0x21, 0x50, 0x50, // !PP!..~.:.~..!PP - 0x21, 0x12, 0x14, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x05, 0x80, 0x00, 0x0f, // !............... - 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x3f, 0x00, 0x00, 0x25, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // .../.?..%...#!"& - 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // =.463!2.....#!"& - 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // =.463!2.....#!"& - 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // =.463!2.....#!"& - 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x07, 0x00, 0x26, 0x1a, 0xf9, 0x80, 0x1a, 0x26, // =.463!2...&....& - 0x26, 0x1a, 0x06, 0x80, 0x1a, 0x26, 0xfe, 0x80, 0x26, 0x1a, 0xfb, 0x00, 0x1a, 0x26, 0x26, 0x1a, // &....&..&....&&. - 0x05, 0x00, 0x1a, 0x26, 0x01, 0x00, 0x26, 0x1a, 0xfa, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x06, 0x00, // ...&..&....&&... - 0x1a, 0x26, 0xfe, 0x80, 0x26, 0x1a, 0xfb, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x04, 0x80, 0x1a, 0x26, // .&..&....&&....& - 0xc0, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x01, 0x66, 0x80, 0x1a, 0x26, 0x26, // ...&&...&&.f..&& - 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x01, 0x66, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, // ...&&.f..&&...&& - 0x01, 0x66, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x00, 0x00, 0x04, 0x00, 0x00, // .f..&&...&&..... - 0x00, 0x00, 0x07, 0x00, 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x3f, 0x00, 0x00, // .........../.?.. - 0x25, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // %...#!"&=.463!2. - 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // ....#!"&=.463!2. - 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // ....#!"&=.463!2. - 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // ....#!"&=.463!2. - 0x07, 0x00, 0x26, 0x1a, 0xf9, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x06, 0x80, 0x1a, 0x26, 0xfe, 0x80, // ..&....&&....&.. - 0x26, 0x1a, 0xfc, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x03, 0x80, 0x1a, 0x26, 0x01, 0x00, 0x26, 0x1a, // &....&&....&..&. - 0xfa, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x05, 0x80, 0x1a, 0x26, 0xfe, 0x80, 0x26, 0x1a, 0xfd, 0x80, // ...&&....&..&... - 0x1a, 0x26, 0x26, 0x1a, 0x02, 0x80, 0x1a, 0x26, 0xc0, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, // .&&....&...&&... - 0x26, 0x26, 0x01, 0x66, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x01, 0x66, 0x80, // &&.f..&&...&&.f. - 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x01, 0x66, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, // .&&...&&.f..&&.. - 0x1a, 0x26, 0x26, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x05, 0x80, 0x00, 0x0f, // .&&............. + 0x05, 0x7f, 0xfa, 0x81, 0x05, 0x7f, 0xfa, 0x81, 0x05, 0x7f, 0xfa, 0x81, 0x05, 0x7f, 0xfa, 0x80, // ................ + 0x05, 0x80, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x95, 0x05, 0xeb, 0x05, 0x80, 0x00, 0x07, // ................ + 0x00, 0x1d, 0x00, 0x00, 0x00, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x01, 0x14, 0x07, 0x01, // .....4&"...2.... + 0x06, 0x23, 0x22, 0x27, 0x01, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x17, // .#"'...5.463!2.. + 0x01, 0x16, 0x01, 0xc0, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x04, 0x76, 0x25, 0xfe, 0x15, 0x27, 0x34, // ....KjKKj.v%..'4 + 0x35, 0x25, 0xfd, 0x35, 0x26, 0x35, 0x4c, 0x34, 0x01, 0xa0, 0x35, 0x80, 0x26, 0x02, 0xcb, 0x25, // 5%.5&5L4..5.&..% + 0x04, 0x0b, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0xfe, 0x40, 0x35, 0x25, 0xfe, 0x14, 0x25, 0x25, 0x02, // ..jKKjK.@5%..%%. + 0xcc, 0x25, 0x80, 0x35, 0x01, 0xa0, 0x34, 0x4c, 0x35, 0x26, 0xfd, 0x36, 0x27, 0x00, 0x00, 0x00, // .%.5..4L5&.6'... + 0x00, 0x03, 0x00, 0x00, 0xff, 0x95, 0x07, 0x6b, 0x05, 0x80, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x35, // .......k.......5 + 0x00, 0x00, 0x00, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x01, 0x14, 0x07, 0x01, 0x06, 0x23, // ...4&"...2.....# + 0x22, 0x27, 0x01, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x17, 0x01, 0x16, // "'...5.463!2.... + 0x05, 0x14, 0x07, 0x01, 0x06, 0x23, 0x22, 0x26, 0x27, 0x01, 0x36, 0x35, 0x34, 0x27, 0x01, 0x2e, // .....#"&'.654'.. + 0x01, 0x23, 0x33, 0x32, 0x16, 0x17, 0x01, 0x16, 0x01, 0xc0, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x04, // .#32......KjKKj. + 0x76, 0x25, 0xfe, 0x15, 0x27, 0x34, 0x35, 0x25, 0xfd, 0x35, 0x26, 0x35, 0x4c, 0x34, 0x01, 0xa0, // v%..'45%.5&5L4.. + 0x35, 0x80, 0x26, 0x02, 0xcb, 0x25, 0x01, 0x80, 0x25, 0xfe, 0x15, 0x27, 0x34, 0x24, 0x2e, 0x1e, // 5.&..%..%..'4$.. + 0x01, 0xd6, 0x25, 0x25, 0xfd, 0x35, 0x26, 0x80, 0x35, 0xe0, 0x35, 0x80, 0x26, 0x02, 0xcb, 0x25, // ..%%.5&.5.5.&..% + 0x04, 0x0b, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0xfe, 0x40, 0x35, 0x25, 0xfe, 0x14, 0x25, 0x25, 0x02, // ..jKKjK.@5%..%%. + 0xcc, 0x25, 0x80, 0x35, 0x01, 0xa0, 0x34, 0x4c, 0x35, 0x26, 0xfd, 0x36, 0x27, 0x34, 0x35, 0x25, // .%.5..4L5&.6'45% + 0xfe, 0x14, 0x25, 0x1c, 0x1f, 0x01, 0xd6, 0x25, 0x35, 0x34, 0x27, 0x02, 0xca, 0x26, 0x35, 0x35, // ..%....%54'..&55 + 0x26, 0xfd, 0x36, 0x27, 0x00, 0x03, 0x00, 0x0a, 0xff, 0x80, 0x06, 0x79, 0x05, 0x80, 0x00, 0x54, // &.6'.......y...T + 0x00, 0x64, 0x00, 0x74, 0x00, 0x00, 0x01, 0x16, 0x07, 0x01, 0x0e, 0x01, 0x23, 0x21, 0x22, 0x26, // .d.t........#!"& + 0x27, 0x26, 0x37, 0x34, 0x36, 0x37, 0x36, 0x26, 0x37, 0x3e, 0x02, 0x37, 0x3e, 0x01, 0x37, 0x36, // '&74676&7>.7>.76 + 0x26, 0x37, 0x3e, 0x01, 0x37, 0x3e, 0x01, 0x37, 0x36, 0x26, 0x37, 0x3e, 0x01, 0x37, 0x3e, 0x01, // &7>.7>.76&7>.7>. + 0x37, 0x36, 0x26, 0x37, 0x3e, 0x02, 0x37, 0x3e, 0x06, 0x17, 0x07, 0x36, 0x33, 0x21, 0x32, 0x16, // 76&7>.7>...63!2. + 0x07, 0x01, 0x0e, 0x01, 0x23, 0x21, 0x22, 0x07, 0x06, 0x17, 0x16, 0x33, 0x21, 0x32, 0x36, 0x37, // ....#!"....3!267 + 0x01, 0x36, 0x27, 0x16, 0x05, 0x06, 0x16, 0x33, 0x21, 0x32, 0x36, 0x3f, 0x01, 0x36, 0x26, 0x23, // .6'....3!26?.6&# + 0x21, 0x22, 0x06, 0x07, 0x03, 0x06, 0x16, 0x33, 0x21, 0x32, 0x36, 0x3f, 0x01, 0x36, 0x26, 0x23, // !".....3!26?.6&# + 0x21, 0x22, 0x06, 0x07, 0x06, 0x67, 0x28, 0x16, 0xfe, 0xed, 0x13, 0x73, 0x41, 0xfc, 0x65, 0x4d, // !"...g(....sA.eM + 0x8f, 0x1c, 0x18, 0x16, 0x06, 0x01, 0x01, 0x08, 0x01, 0x02, 0x0c, 0x15, 0x06, 0x17, 0x2c, 0x08, // ..............,. + 0x03, 0x05, 0x02, 0x03, 0x1c, 0x03, 0x15, 0x2a, 0x04, 0x01, 0x07, 0x04, 0x04, 0x24, 0x04, 0x13, // .......*.....$.. + 0x2f, 0x04, 0x01, 0x08, 0x02, 0x02, 0x0e, 0x16, 0x06, 0x08, 0x11, 0x0d, 0x13, 0x14, 0x21, 0x27, // /.............!' + 0x1c, 0x01, 0x26, 0x0d, 0x02, 0xf9, 0x4a, 0x50, 0x16, 0xfe, 0xee, 0x24, 0x47, 0x5d, 0xfc, 0x9b, // ..&...JP...$G].. + 0x1b, 0x0b, 0x0b, 0x0a, 0x18, 0x78, 0x03, 0x9b, 0x1d, 0x36, 0x08, 0x01, 0x2c, 0x07, 0x02, 0x26, // .....x...6..,..& + 0xfb, 0xed, 0x04, 0x0c, 0x0e, 0x02, 0x60, 0x0d, 0x19, 0x04, 0x15, 0x04, 0x0c, 0x0e, 0xfd, 0xa0, // ......`......... + 0x0d, 0x19, 0x04, 0x68, 0x04, 0x0c, 0x0e, 0x02, 0x60, 0x0d, 0x19, 0x04, 0x15, 0x04, 0x0c, 0x0e, // ...h....`....... + 0xfd, 0xa0, 0x0d, 0x19, 0x04, 0x04, 0x22, 0x39, 0x48, 0xfc, 0x76, 0x40, 0x57, 0x6b, 0x4e, 0x43, // ......"9H.v@WkNC + 0x3c, 0x04, 0x2e, 0x0e, 0x08, 0x1b, 0x06, 0x0b, 0x14, 0x1b, 0x0a, 0x26, 0x6b, 0x26, 0x0a, 0x28, // <..........&k&.( + 0x08, 0x0b, 0x22, 0x06, 0x24, 0x70, 0x22, 0x09, 0x2e, 0x05, 0x0d, 0x23, 0x05, 0x1a, 0x75, 0x26, // ..".$p"....#..u& + 0x08, 0x23, 0x09, 0x08, 0x14, 0x1a, 0x08, 0x0c, 0x25, 0x21, 0x27, 0x19, 0x16, 0x01, 0x06, 0x03, // .#......%!'..... + 0x09, 0x70, 0x4a, 0xfc, 0x76, 0x77, 0x45, 0x0f, 0x10, 0x1b, 0x46, 0x1f, 0x1a, 0x03, 0xdb, 0x16, // .pJ.vwE...F..... + 0x23, 0x0f, 0x1e, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0xfe, 0xc0, 0x0d, 0x13, // #......@........ + 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0x97, 0x05, 0x00, // ..@............. + 0x05, 0x80, 0x00, 0x1c, 0x00, 0x00, 0x01, 0x32, 0x17, 0x1e, 0x01, 0x15, 0x11, 0x14, 0x06, 0x07, // .......2........ + 0x06, 0x23, 0x22, 0x27, 0x09, 0x01, 0x06, 0x23, 0x22, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, // .#"'...#"'..5.46 + 0x37, 0x36, 0x33, 0x04, 0x8c, 0x17, 0x15, 0x21, 0x27, 0x27, 0x21, 0x13, 0x19, 0x30, 0x23, 0xfe, // 763....!''!..0#. + 0x47, 0xfe, 0x47, 0x24, 0x2f, 0x17, 0x15, 0x21, 0x27, 0x27, 0x21, 0x15, 0x17, 0x05, 0x80, 0x09, // G.G$/..!''!..... + 0x0d, 0x38, 0x22, 0xfa, 0xf7, 0x22, 0x38, 0x0d, 0x08, 0x20, 0x01, 0xa8, 0xfe, 0x58, 0x21, 0x09, // .8".."8.. ...X!. + 0x0d, 0x38, 0x22, 0x05, 0x09, 0x22, 0x38, 0x0d, 0x09, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, // .8".."8......... + 0xff, 0x80, 0x06, 0x80, 0x05, 0x80, 0x00, 0x03, 0x00, 0x0c, 0x00, 0x14, 0x00, 0x3c, 0x00, 0x00, // .............<.. + 0x29, 0x01, 0x11, 0x21, 0x11, 0x21, 0x11, 0x23, 0x22, 0x26, 0x3d, 0x01, 0x21, 0x00, 0x34, 0x26, // )..!.!.#"&=.!.4& + 0x22, 0x06, 0x14, 0x16, 0x32, 0x37, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, // "...27...+....#! + 0x22, 0x26, 0x3d, 0x01, 0x23, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x11, 0x34, 0x36, // "&=.#"&5.46;..46 + 0x33, 0x21, 0x32, 0x16, 0x1f, 0x01, 0x1e, 0x01, 0x15, 0x11, 0x33, 0x32, 0x16, 0x01, 0x80, 0x03, // 3!2.......32.... + 0x80, 0xfc, 0x80, 0x03, 0x80, 0xa0, 0x28, 0x38, 0xfd, 0x80, 0x04, 0x80, 0x26, 0x34, 0x26, 0x26, // ......(8....&4&& + 0x34, 0xa6, 0x13, 0x0d, 0xe0, 0x38, 0x28, 0xfc, 0x40, 0x28, 0x38, 0xe0, 0x0d, 0x13, 0x71, 0x4f, // 4....8(.@(8...qO + 0x40, 0x38, 0x28, 0x02, 0xa0, 0x28, 0x60, 0x1c, 0x98, 0x1c, 0x28, 0x40, 0x4f, 0x71, 0x01, 0x00, // @8(..(`...(@Oq.. + 0x01, 0x80, 0x01, 0x80, 0x38, 0x28, 0xa0, 0xfd, 0x26, 0x34, 0x26, 0x26, 0x34, 0x26, 0x40, 0xfe, // ....8(..&4&&4&@. + 0x60, 0x0d, 0x13, 0xa0, 0x28, 0x38, 0x38, 0x28, 0xa0, 0x13, 0x0d, 0x01, 0xa0, 0x4f, 0x71, 0x02, // `...(88(.....Oq. + 0x20, 0x28, 0x38, 0x28, 0x1c, 0x98, 0x1c, 0x60, 0x28, 0xff, 0x00, 0x71, 0x00, 0x03, 0x00, 0x00, // (8(...`(..q.... + 0xff, 0x80, 0x07, 0x80, 0x06, 0x00, 0x00, 0x07, 0x00, 0x21, 0x00, 0x29, 0x00, 0x00, 0x00, 0x32, // .........!.)...2 + 0x16, 0x14, 0x06, 0x22, 0x26, 0x34, 0x01, 0x32, 0x16, 0x15, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, // ..."&4.2.....#!" + 0x26, 0x35, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x37, 0x3e, 0x01, 0x33, 0x21, 0x32, 0x16, 0x1f, 0x01, // &5.46;.7>.3!2... + 0x00, 0x20, 0x00, 0x10, 0x00, 0x20, 0x00, 0x10, 0x03, 0x49, 0xee, 0xa9, 0xa9, 0xee, 0xa9, 0x03, // . ... ...I...... + 0xe0, 0x6a, 0x96, 0x96, 0x6a, 0xfa, 0x80, 0x6a, 0x96, 0x96, 0x6a, 0xe0, 0x33, 0x13, 0x65, 0x35, // .j..j..j..j.3.e5 + 0x02, 0x00, 0x35, 0x65, 0x13, 0x33, 0xfd, 0x67, 0x01, 0x72, 0x01, 0x07, 0xfe, 0xf9, 0xfe, 0x8e, // ..5e.3.g.r...... + 0xfe, 0xf9, 0x03, 0x60, 0xa9, 0xee, 0xa9, 0xa9, 0xee, 0x02, 0x49, 0x96, 0x6a, 0xfc, 0x80, 0x6a, // ...`......I.j..j + 0x96, 0x96, 0x6a, 0x03, 0x80, 0x6a, 0x96, 0x88, 0x31, 0x47, 0x47, 0x31, 0x88, 0xfb, 0x80, 0x01, // ..j..j..1GG1.... + 0x07, 0x01, 0x72, 0x01, 0x07, 0xfe, 0xf9, 0xfe, 0x8e, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // ..r............. + 0xff, 0x80, 0x06, 0x80, 0x05, 0x80, 0x00, 0x07, 0x00, 0x50, 0x00, 0x00, 0x01, 0x03, 0x32, 0x16, // .........P....2. + 0x33, 0x32, 0x37, 0x26, 0x01, 0x37, 0x3e, 0x04, 0x37, 0x13, 0x01, 0x3b, 0x01, 0x16, 0x17, 0x13, // 327&.7>.7..;.... + 0x16, 0x12, 0x17, 0x1e, 0x01, 0x17, 0x16, 0x17, 0x1e, 0x01, 0x17, 0x16, 0x15, 0x14, 0x06, 0x15, // ................ + 0x22, 0x26, 0x23, 0x22, 0x04, 0x07, 0x34, 0x3f, 0x01, 0x32, 0x3e, 0x05, 0x35, 0x34, 0x2e, 0x01, // "&#"..4?.2>.54.. + 0x27, 0x25, 0x06, 0x02, 0x15, 0x14, 0x1e, 0x03, 0x33, 0x16, 0x15, 0x14, 0x07, 0x22, 0x26, 0x23, // '%......3...."&# + 0x22, 0x06, 0x23, 0x06, 0x02, 0xd5, 0xaa, 0x21, 0xcf, 0x39, 0x13, 0x26, 0x57, 0xfc, 0xca, 0x02, // ".#....!.9.&W... + 0x17, 0x42, 0x30, 0x33, 0x26, 0x0c, 0xed, 0x01, 0x18, 0x4b, 0x35, 0x08, 0x03, 0xcd, 0x21, 0x92, // .B03&....K5...!. + 0x29, 0x0f, 0x56, 0x1d, 0x14, 0x0f, 0x13, 0x8a, 0x0f, 0x06, 0x01, 0x3f, 0xfe, 0x40, 0x4c, 0xfe, // ).V........?.@L. + 0xea, 0x27, 0x04, 0x83, 0x01, 0x17, 0x08, 0x15, 0x09, 0x0d, 0x05, 0x3e, 0x52, 0x01, 0xfe, 0x3e, // .'.........>R..> + 0x1a, 0x65, 0x1c, 0x3b, 0x26, 0x4c, 0x03, 0x01, 0x02, 0x3a, 0xe9, 0x3a, 0x08, 0x25, 0x03, 0x50, // .e.;&L...:.:.%.P + 0x03, 0xd1, 0xfe, 0x3e, 0x04, 0x02, 0xfd, 0xfc, 0x76, 0x4f, 0x07, 0x0b, 0x0a, 0x13, 0x27, 0x1f, // ...>....vO....'. + 0x02, 0x68, 0x02, 0xd4, 0x0e, 0x07, 0xfe, 0x20, 0x4e, 0xfe, 0x99, 0x5f, 0x22, 0xdd, 0x3a, 0x2d, // .h..... N.._".:- + 0x0c, 0x0f, 0x1d, 0x06, 0x26, 0x13, 0x05, 0x11, 0x04, 0x10, 0x0e, 0x01, 0x2b, 0x23, 0x1c, 0x05, // ....&.......+#.. + 0x02, 0x07, 0x06, 0x0a, 0x0c, 0x08, 0x10, 0xa1, 0xc2, 0x03, 0x02, 0x3a, 0xfe, 0xed, 0x19, 0x16, // ...........:.... + 0x1f, 0x12, 0x09, 0x08, 0x13, 0x27, 0x09, 0x12, 0x14, 0x08, 0x0e, 0x00, 0x00, 0x03, 0x00, 0x00, // .....'.......... + 0xff, 0x80, 0x05, 0x80, 0x05, 0x80, 0x00, 0x15, 0x00, 0x2b, 0x00, 0x61, 0x00, 0x00, 0x25, 0x16, // .........+.a..%. + 0x33, 0x20, 0x11, 0x34, 0x27, 0x2e, 0x04, 0x23, 0x22, 0x07, 0x14, 0x06, 0x15, 0x14, 0x06, 0x1e, // 3 .4'..#"....... + 0x01, 0x03, 0x16, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x07, 0x14, 0x16, // ...32>.54..#"... + 0x15, 0x14, 0x06, 0x15, 0x14, 0x01, 0x37, 0x3e, 0x01, 0x37, 0x3e, 0x04, 0x3c, 0x01, 0x35, 0x10, // ......7>.7>.<.5. + 0x27, 0x2e, 0x04, 0x2f, 0x01, 0x36, 0x24, 0x33, 0x32, 0x16, 0x33, 0x32, 0x1e, 0x03, 0x15, 0x14, // '../.6$32.32.... + 0x0e, 0x03, 0x07, 0x1e, 0x01, 0x15, 0x14, 0x0e, 0x03, 0x23, 0x22, 0x26, 0x23, 0x22, 0x04, 0x02, // .........#"&#".. + 0x2b, 0x4a, 0x42, 0x01, 0x78, 0x29, 0x1b, 0x45, 0x42, 0x5f, 0x49, 0x3a, 0x49, 0x1c, 0x01, 0x02, // +JB.x).EB_I:I... + 0x01, 0x08, 0x06, 0x2a, 0x43, 0x52, 0x7a, 0x62, 0x33, 0x3a, 0x64, 0x74, 0x42, 0x32, 0x50, 0x08, // ...*CRzb3:dtB2P. + 0x01, 0xfd, 0xe4, 0x02, 0x0f, 0x8c, 0x24, 0x07, 0x0b, 0x06, 0x05, 0x01, 0x16, 0x04, 0x24, 0x35, // ......$.......$5 + 0x2e, 0x33, 0x05, 0x04, 0x62, 0x01, 0xe4, 0x83, 0x17, 0x5a, 0x17, 0x46, 0x85, 0x7c, 0x5c, 0x38, // .3..b....Z.F.|.8 + 0x21, 0x2d, 0x54, 0x3e, 0x35, 0x9a, 0xcd, 0x46, 0x75, 0x9f, 0xa8, 0x5c, 0x2c, 0xb0, 0x2c, 0x6a, // !-T>5..Fu...,.,j + 0xfe, 0x6e, 0x0f, 0x20, 0x01, 0x4f, 0x72, 0x42, 0x2c, 0x3c, 0x21, 0x11, 0x04, 0x0a, 0x35, 0xd4, // .n. .OrB,.7676.. + 0x27, 0x35, 0x2e, 0x02, 0x27, 0x37, 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x01, 0x37, 0x06, 0x07, 0x0e, // '5..'7..32>.7... + 0x01, 0x07, 0x0e, 0x03, 0x07, 0x06, 0x02, 0x07, 0x0e, 0x03, 0x1f, 0x01, 0x16, 0x17, 0x06, 0x07, // ................ + 0x22, 0x06, 0x23, 0x22, 0x26, 0x23, 0x26, 0x23, 0x22, 0x06, 0x11, 0x16, 0x4f, 0x41, 0x1b, 0x1c, // ".#"&#&#"...OA.. + 0x0d, 0x01, 0x7a, 0x6a, 0x01, 0x18, 0x3d, 0x4e, 0x13, 0x13, 0x21, 0xae, 0x7d, 0x3a, 0x30, 0x65, // ..zj..=N..!.}:0e + 0x8d, 0x1c, 0x05, 0x0e, 0x1e, 0x8f, 0x25, 0x08, 0x0c, 0x06, 0x09, 0x02, 0x1b, 0x79, 0x11, 0x02, // ......%......y.. + 0x16, 0x12, 0x0e, 0x01, 0x01, 0x11, 0xa8, 0x03, 0x0d, 0x0b, 0x2b, 0x0b, 0x1d, 0x74, 0x1c, 0x8a, // ..........+..t.. + 0x44, 0x33, 0xb8, 0x7e, 0x55, 0x07, 0x13, 0x13, 0x0e, 0x23, 0x42, 0x07, 0x02, 0x34, 0x02, 0x0b, // D3.~U....#B..4.. + 0x23, 0x19, 0x0d, 0x0b, 0x05, 0x03, 0x67, 0x02, 0x09, 0x05, 0x05, 0x09, 0x02, 0x27, 0x32, 0x0a, // #.....g......'2. + 0x25, 0x0f, 0x13, 0x2f, 0x21, 0x3a, 0x0d, 0x94, 0xfd, 0xe1, 0x54, 0x09, 0x62, 0x52, 0x55, 0x0f, // %../!:....T.bRU. + 0x12, 0x04, 0x1b, 0x2c, 0x37, 0x03, 0x14, 0x02, 0x12, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // ...,7........... + 0xff, 0x80, 0x06, 0xfa, 0x05, 0x80, 0x00, 0x1b, 0x00, 0x7d, 0x00, 0x00, 0x25, 0x32, 0x16, 0x0f, // .........}..%2.. + 0x01, 0x06, 0x22, 0x2f, 0x01, 0x26, 0x36, 0x3b, 0x01, 0x11, 0x23, 0x22, 0x26, 0x3f, 0x01, 0x36, // .."/.&6;..#"&?.6 + 0x32, 0x1f, 0x01, 0x16, 0x06, 0x2b, 0x01, 0x11, 0x01, 0x17, 0x16, 0x33, 0x32, 0x36, 0x33, 0x32, // 2....+.....32632 + 0x16, 0x33, 0x21, 0x32, 0x16, 0x3e, 0x02, 0x3f, 0x01, 0x32, 0x16, 0x33, 0x16, 0x15, 0x14, 0x07, // .3!2.>.?.2.3.... + 0x06, 0x07, 0x26, 0x27, 0x2e, 0x02, 0x27, 0x2e, 0x03, 0x06, 0x23, 0x22, 0x26, 0x22, 0x06, 0x07, // ..&'..'...#"&".. + 0x06, 0x17, 0x14, 0x12, 0x15, 0x14, 0x06, 0x16, 0x17, 0x1e, 0x01, 0x17, 0x16, 0x15, 0x14, 0x0f, // ................ + 0x01, 0x06, 0x24, 0x23, 0x22, 0x06, 0x23, 0x26, 0x3d, 0x01, 0x3e, 0x02, 0x37, 0x36, 0x11, 0x34, // ..$#".#&=.>.76.4 + 0x02, 0x3d, 0x01, 0x34, 0x36, 0x34, 0x2e, 0x01, 0x27, 0x26, 0x23, 0x22, 0x06, 0x07, 0x0e, 0x02, // .=.464..'&#".... + 0x07, 0x26, 0x27, 0x11, 0x06, 0xd0, 0x21, 0x12, 0x14, 0x7e, 0x14, 0x3a, 0x14, 0x7e, 0x14, 0x12, // .&'...!..~.:.~.. + 0x21, 0x50, 0x50, 0x21, 0x12, 0x14, 0x7e, 0x14, 0x3a, 0x14, 0x7e, 0x14, 0x12, 0x21, 0x50, 0xf9, // !PP!..~.:.~..!P. + 0xd1, 0x36, 0x0c, 0xc7, 0x2c, 0xb0, 0x2c, 0x24, 0x8f, 0x24, 0x01, 0x25, 0x06, 0x1e, 0x0b, 0x15, // .6..,.,$.$.%.... + 0x0e, 0x08, 0x2a, 0x04, 0x14, 0x04, 0x02, 0x05, 0x27, 0x1d, 0x19, 0x1d, 0x03, 0x10, 0x0d, 0x01, // ..*.....'....... + 0x06, 0x0c, 0x13, 0x07, 0x1d, 0x02, 0x11, 0x63, 0x32, 0x4e, 0x20, 0x09, 0x01, 0x04, 0x05, 0x05, // .......c2N ..... + 0x0a, 0x28, 0xa8, 0x24, 0x05, 0x03, 0x22, 0x4c, 0xfe, 0xe4, 0x41, 0x32, 0xca, 0x33, 0x03, 0x11, // .(.$.."L..A2.3.. + 0x59, 0x6c, 0x18, 0x13, 0x06, 0x01, 0x02, 0x04, 0x03, 0x0b, 0x97, 0x21, 0x78, 0x14, 0x13, 0x1e, // Yl.........!x... + 0x21, 0x1a, 0x2a, 0x0e, 0x80, 0x25, 0x1a, 0xa2, 0x1a, 0x1a, 0xa2, 0x1a, 0x25, 0x04, 0x00, 0x25, // !.*..%......%..% + 0x1a, 0xa2, 0x1a, 0x1a, 0xa2, 0x1a, 0x25, 0xfc, 0x00, 0x04, 0xff, 0x1b, 0x05, 0x04, 0x01, 0x01, // ......%......... + 0x01, 0x05, 0x0d, 0x0b, 0x01, 0x01, 0x70, 0xe0, 0x50, 0x1d, 0x0e, 0x04, 0x2c, 0x54, 0x09, 0x4e, // ......p.P...,T.N + 0x45, 0x01, 0x08, 0x09, 0x03, 0x02, 0x01, 0x01, 0x04, 0x04, 0x51, 0x37, 0x5e, 0xfd, 0xb4, 0xa1, // E.........Q7^... + 0x10, 0x6f, 0x48, 0x21, 0x15, 0x2b, 0x10, 0x28, 0x0a, 0x0e, 0x0f, 0x01, 0x02, 0x14, 0x12, 0x33, // .oH!.+.(.......3 + 0x01, 0x09, 0x1b, 0x20, 0x1a, 0x0e, 0x2a, 0x01, 0x55, 0x65, 0x01, 0x94, 0x65, 0x75, 0x02, 0x1b, // ... ..*.Ue..eu.. + 0x17, 0x1c, 0x14, 0x04, 0x0c, 0x18, 0x0e, 0x0d, 0x77, 0x67, 0x02, 0x1a, 0x12, 0x01, 0x7f, 0x00, // ........wg...... + 0x00, 0x02, 0x00, 0x00, 0xff, 0x03, 0x06, 0x00, 0x05, 0x80, 0x00, 0x61, 0x00, 0x95, 0x00, 0x00, // ...........a.... + 0x13, 0x17, 0x16, 0x33, 0x32, 0x36, 0x33, 0x32, 0x24, 0x04, 0x17, 0x16, 0x3f, 0x01, 0x32, 0x16, // ...32632$...?.2. + 0x33, 0x16, 0x15, 0x14, 0x07, 0x06, 0x07, 0x26, 0x27, 0x2e, 0x02, 0x35, 0x26, 0x27, 0x26, 0x23, // 3......&'..5&'&# + 0x22, 0x26, 0x22, 0x06, 0x07, 0x06, 0x1f, 0x01, 0x35, 0x14, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x16, // "&".....5....... + 0x17, 0x1e, 0x01, 0x17, 0x16, 0x15, 0x14, 0x0f, 0x01, 0x06, 0x24, 0x23, 0x22, 0x06, 0x23, 0x26, // ..........$#".#& + 0x3d, 0x01, 0x3e, 0x02, 0x37, 0x3e, 0x02, 0x34, 0x26, 0x35, 0x34, 0x26, 0x35, 0x34, 0x3e, 0x01, // =.>.7>.4&54&54>. + 0x2e, 0x01, 0x27, 0x26, 0x23, 0x22, 0x06, 0x07, 0x0e, 0x02, 0x07, 0x26, 0x27, 0x11, 0x01, 0x32, // ..'&#".....&'..2 + 0x1e, 0x02, 0x17, 0x16, 0x14, 0x07, 0x0e, 0x03, 0x23, 0x22, 0x2e, 0x01, 0x34, 0x36, 0x35, 0x21, // ........#"..465! + 0x14, 0x16, 0x14, 0x0e, 0x01, 0x23, 0x22, 0x2e, 0x02, 0x27, 0x26, 0x34, 0x37, 0x3e, 0x03, 0x33, // .....#"..'&47>.3 + 0x32, 0x1e, 0x01, 0x14, 0x06, 0x15, 0x21, 0x34, 0x26, 0x34, 0x3e, 0x01, 0x51, 0x36, 0x0c, 0xc7, // 2.....!4&4>.Q6.. + 0x2c, 0xb0, 0x2c, 0x46, 0x01, 0x61, 0x01, 0x00, 0x77, 0x21, 0x17, 0x2a, 0x04, 0x14, 0x04, 0x02, // ,.,F.a..w!.*.... + 0x05, 0x27, 0x1d, 0x19, 0x1d, 0x03, 0x10, 0x0e, 0x0a, 0x11, 0x05, 0x3d, 0x1e, 0x7e, 0x50, 0x6c, // .'.........=.~Pl + 0x2a, 0x09, 0x01, 0x01, 0x02, 0x01, 0x05, 0x05, 0x0a, 0x28, 0xa8, 0x24, 0x05, 0x03, 0x22, 0x4c, // *........(.$.."L + 0xfe, 0xe4, 0x41, 0x32, 0xca, 0x33, 0x03, 0x11, 0x59, 0x6c, 0x18, 0x07, 0x09, 0x03, 0x01, 0x05, // ..A2.3..Yl...... + 0x01, 0x01, 0x01, 0x05, 0x04, 0x0b, 0x97, 0x29, 0xf4, 0x10, 0x13, 0x1e, 0x21, 0x1a, 0x2a, 0x0e, // .......)....!.*. + 0x05, 0x1e, 0x0c, 0x3c, 0x37, 0x40, 0x04, 0x1a, 0x1a, 0x04, 0x40, 0x37, 0x3c, 0x0c, 0x0d, 0x0f, // ...<7@....@7<... + 0x05, 0x03, 0xfc, 0x00, 0x03, 0x05, 0x0f, 0x0d, 0x0c, 0x3c, 0x37, 0x40, 0x04, 0x1a, 0x1a, 0x04, // .........<7@.... + 0x40, 0x37, 0x3c, 0x0c, 0x0d, 0x0f, 0x05, 0x03, 0x04, 0x00, 0x03, 0x05, 0x0f, 0x05, 0x7f, 0x1b, // @7<............. + 0x05, 0x04, 0x02, 0x01, 0x04, 0x01, 0x20, 0x01, 0x01, 0x70, 0xe0, 0x50, 0x1d, 0x0e, 0x04, 0x2c, // ...... ..p.P..., + 0x54, 0x09, 0x4d, 0x46, 0x01, 0x0d, 0x06, 0x02, 0x02, 0x04, 0x05, 0x51, 0x37, 0x98, 0x34, 0x37, // T.MF.......Q7.47 + 0xc6, 0xa2, 0x48, 0x10, 0x6f, 0x48, 0x21, 0x15, 0x2b, 0x10, 0x28, 0x0a, 0x0e, 0x0f, 0x01, 0x02, // ..H.oH!.+.(..... + 0x14, 0x12, 0x33, 0x01, 0x09, 0x1b, 0x20, 0x1a, 0x0e, 0x10, 0x74, 0xaf, 0x87, 0xac, 0x03, 0x07, // ..3... ...t..... + 0x1d, 0x08, 0x07, 0x4a, 0x48, 0x51, 0x36, 0x05, 0x0c, 0x1b, 0x0b, 0x0c, 0x77, 0x68, 0x02, 0x1a, // ...JHQ6.....wh.. + 0x12, 0x01, 0x7f, 0xfa, 0xff, 0x27, 0x2c, 0x36, 0x03, 0x15, 0x38, 0x15, 0x03, 0x36, 0x2c, 0x27, // .....',6..8..6,' + 0x15, 0x24, 0x1f, 0x23, 0x02, 0x02, 0x23, 0x1f, 0x24, 0x15, 0x27, 0x2c, 0x36, 0x03, 0x15, 0x38, // .$.#..#.$.',6..8 + 0x15, 0x03, 0x36, 0x2c, 0x27, 0x15, 0x24, 0x1f, 0x23, 0x02, 0x02, 0x23, 0x1f, 0x24, 0x15, 0x00, // ..6,'.$.#..#.$.. + 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, // .............../ + 0x00, 0x3f, 0x00, 0x00, 0x25, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, // .?..%...#!"&=.46 + 0x33, 0x21, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, // 3!2.....#!"&=.46 + 0x33, 0x21, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, // 3!2.....#!"&=.46 + 0x33, 0x21, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, // 3!2.....#!"&=.46 + 0x33, 0x21, 0x32, 0x16, 0x07, 0x00, 0x26, 0x1a, 0xf9, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x06, 0x80, // 3!2...&....&&... + 0x1a, 0x26, 0xfe, 0x80, 0x26, 0x1a, 0xfb, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x05, 0x00, 0x1a, 0x26, // .&..&....&&....& + 0x01, 0x00, 0x26, 0x1a, 0xfa, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x06, 0x00, 0x1a, 0x26, 0xfe, 0x80, // ..&....&&....&.. + 0x26, 0x1a, 0xfb, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x04, 0x80, 0x1a, 0x26, 0xc0, 0x80, 0x1a, 0x26, // &....&&....&...& + 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x01, 0x66, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, // &...&&.f..&&...& + 0x26, 0x01, 0x66, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x01, 0x66, 0x80, 0x1a, // &.f..&&...&&.f.. + 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, // &&...&&......... + 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x3f, 0x00, 0x00, 0x25, 0x15, 0x14, 0x06, // ......./.?..%... + 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, // #!"&=.463!2..... + 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, // #!"&=.463!2..... + 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, // #!"&=.463!2..... + 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x07, 0x00, 0x26, 0x1a, // #!"&=.463!2...&. + 0xf9, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x06, 0x80, 0x1a, 0x26, 0xfe, 0x80, 0x26, 0x1a, 0xfc, 0x80, // ...&&....&..&... + 0x1a, 0x26, 0x26, 0x1a, 0x03, 0x80, 0x1a, 0x26, 0x01, 0x00, 0x26, 0x1a, 0xfa, 0x80, 0x1a, 0x26, // .&&....&..&....& + 0x26, 0x1a, 0x05, 0x80, 0x1a, 0x26, 0xfe, 0x80, 0x26, 0x1a, 0xfd, 0x80, 0x1a, 0x26, 0x26, 0x1a, // &....&..&....&&. + 0x02, 0x80, 0x1a, 0x26, 0xc0, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x01, 0x66, // ...&...&&...&&.f + 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x01, 0x66, 0x80, 0x1a, 0x26, 0x26, 0x1a, // ..&&...&&.f..&&. + 0x80, 0x1a, 0x26, 0x26, 0x01, 0x66, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x00, // ..&&.f..&&...&&. + 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, // .............../ + 0x00, 0x3f, 0x00, 0x00, 0x25, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, // .?..%...#!"&=.46 + 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, // 3!2.....#!"&=.46 + 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, // 3!2.....#!"&=.46 + 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, // 3!2.....#!"&=.46 + 0x33, 0x21, 0x32, 0x16, 0x07, 0x00, 0x26, 0x1a, 0xf9, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x06, 0x80, // 3!2...&....&&... + 0x1a, 0x26, 0x26, 0x1a, 0xfb, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x05, 0x00, 0x1a, 0x26, 0x26, 0x1a, // .&&....&&....&&. + 0xfa, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x06, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0xfb, 0x80, 0x1a, 0x26, // ...&&....&&....& + 0x26, 0x1a, 0x04, 0x80, 0x1a, 0x26, 0xc0, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, // &....&...&&...&& + 0x01, 0x66, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x01, 0x66, 0x80, 0x1a, 0x26, // .f..&&...&&.f..& + 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x01, 0x66, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, // &...&&.f..&&...& + 0x26, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x05, 0x80, 0x00, 0x0f, // &............... 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x3f, 0x00, 0x00, 0x25, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // .../.?..%...#!"& 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // =.463!2.....#!"& 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // =.463!2.....#!"& 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // =.463!2.....#!"& 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x07, 0x00, 0x26, 0x1a, 0xf9, 0x80, 0x1a, 0x26, // =.463!2...&....& - 0x26, 0x1a, 0x06, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0xfb, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x05, 0x00, // &....&&....&&... - 0x1a, 0x26, 0x26, 0x1a, 0xfa, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x06, 0x00, 0x1a, 0x26, 0x26, 0x1a, // .&&....&&....&&. - 0xfb, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x04, 0x80, 0x1a, 0x26, 0xc0, 0x80, 0x1a, 0x26, 0x26, 0x1a, // ...&&....&...&&. + 0x26, 0x1a, 0x06, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0xf9, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x06, 0x80, // &....&&....&&... + 0x1a, 0x26, 0x26, 0x1a, 0xf9, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x06, 0x80, 0x1a, 0x26, 0x26, 0x1a, // .&&....&&....&&. + 0xf9, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x06, 0x80, 0x1a, 0x26, 0xc0, 0x80, 0x1a, 0x26, 0x26, 0x1a, // ...&&....&...&&. 0x80, 0x1a, 0x26, 0x26, 0x01, 0x66, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x01, // ..&&.f..&&...&&. 0x66, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x01, 0x66, 0x80, 0x1a, 0x26, 0x26, // f..&&...&&.f..&& - 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, // ...&&........... - 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x3f, 0x00, 0x00, 0x25, 0x15, 0x14, 0x06, // ......./.?..%... - 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, // #!"&=.463!2..... - 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, // #!"&=.463!2..... - 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, // #!"&=.463!2..... - 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x07, 0x00, 0x26, 0x1a, // #!"&=.463!2...&. - 0xf9, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x06, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0xf9, 0x80, 0x1a, 0x26, // ...&&....&&....& - 0x26, 0x1a, 0x06, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0xf9, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x06, 0x80, // &....&&....&&... - 0x1a, 0x26, 0x26, 0x1a, 0xf9, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x06, 0x80, 0x1a, 0x26, 0xc0, 0x80, // .&&....&&....&.. - 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x01, 0x66, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, // .&&...&&.f..&&.. - 0x1a, 0x26, 0x26, 0x01, 0x66, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x01, 0x66, // .&&.f..&&...&&.f - 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, // ..&&...&&....... - 0x00, 0x00, 0x07, 0x00, 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x3f, 0x00, 0x4f, // .........../.?.O - 0x00, 0x5f, 0x00, 0x6f, 0x00, 0x7f, 0x00, 0x00, 0x25, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, // ._.o....%...+."& - 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, // =.46;.2.....+."& - 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, // =.46;.2.....+."& - 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // =.46;.2.....#!"& - 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, // =.463!2.....+."& - 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // =.46;.2.....#!"& - 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // =.463!2.....#!"& - 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // =.463!2.....#!"& - 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x00, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, // =.463!2......... - 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0x0d, // ................ - 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x06, 0x00, 0x13, 0x0d, 0xfa, 0xc0, 0x0d, 0x13, // ................ - 0x13, 0x0d, 0x05, 0x40, 0x0d, 0x13, 0xfa, 0x00, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, // ...@............ - 0x0d, 0x13, 0x06, 0x00, 0x13, 0x0d, 0xfa, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0x05, 0x40, 0x0d, 0x13, // .............@.. + 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, // ...&&........... + 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x3f, 0x00, 0x4f, 0x00, 0x5f, 0x00, 0x6f, // ......./.?.O._.o + 0x00, 0x7f, 0x00, 0x00, 0x25, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, // ....%...+."&=.46 + 0x3b, 0x01, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, // ;.2.....+."&=.46 + 0x3b, 0x01, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, // ;.2.....+."&=.46 + 0x3b, 0x01, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, // ;.2.....#!"&=.46 + 0x33, 0x21, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, // 3!2.....+."&=.46 + 0x3b, 0x01, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, // ;.2.....#!"&=.46 + 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, // 3!2.....#!"&=.46 + 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, // 3!2.....#!"&=.46 + 0x33, 0x21, 0x32, 0x16, 0x01, 0x00, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, // 3!2............. + 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, // ................ + 0x0d, 0xc0, 0x0d, 0x13, 0x06, 0x00, 0x13, 0x0d, 0xfa, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0x05, 0x40, // ...............@ + 0x0d, 0x13, 0xfa, 0x00, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x06, 0x00, // ................ 0x13, 0x0d, 0xfa, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0x05, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0xfa, 0xc0, // .........@...... - 0x0d, 0x13, 0x13, 0x0d, 0x05, 0x40, 0x0d, 0x13, 0xe0, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, // .....@.......... - 0x13, 0x13, 0x01, 0x73, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0x01, 0x73, 0xc0, // ...s..........s. - 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0xfc, 0xf3, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, // ................ - 0x0d, 0x13, 0x13, 0x04, 0x73, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0xfc, 0xf3, // ....s........... + 0x0d, 0x13, 0x13, 0x0d, 0x05, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0xfa, 0xc0, 0x0d, 0x13, 0x13, 0x0d, // .....@.......... + 0x05, 0x40, 0x0d, 0x13, 0xe0, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0x01, 0x73, // .@.............s 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0x01, 0x73, 0xc0, 0x0d, 0x13, 0x13, 0x0d, // ..........s..... - 0xc0, 0x0d, 0x13, 0x13, 0x01, 0x73, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0x00, // .....s.......... + 0xc0, 0x0d, 0x13, 0x13, 0xfc, 0xf3, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0x04, // ................ + 0x73, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0xfc, 0xf3, 0xc0, 0x0d, 0x13, 0x13, // s............... + 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0x01, 0x73, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, // ......s......... + 0x01, 0x73, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0x00, 0x00, 0x05, 0x00, 0x00, // .s.............. + 0x00, 0x00, 0x07, 0x00, 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x3f, 0x00, 0x4f, // .........../.?.O + 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, 0x23, 0x22, 0x27, 0x01, 0x26, 0x34, 0x37, 0x01, 0x36, 0x33, // ......#"'.&47.63 + 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, // 2.....#!"&=.463! + 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, // 2.....#!"&=.463! + 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, // 2.....#!"&=.463! + 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, // 2.....#!"&=.463! + 0x32, 0x16, 0x01, 0x80, 0x13, 0x0d, 0x0e, 0x09, 0xfe, 0xe0, 0x09, 0x09, 0x01, 0x20, 0x09, 0x0e, // 2............ .. + 0x0d, 0x13, 0x05, 0x80, 0x13, 0x0d, 0xf9, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x06, 0xc0, 0x0d, 0x13, // .......@........ + 0x13, 0x0d, 0xfb, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0x04, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0xfb, 0xc0, // .........@...... + 0x0d, 0x13, 0x13, 0x0d, 0x04, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0xf9, 0x40, 0x0d, 0x13, 0x13, 0x0d, // .....@.....@.... + 0x06, 0xc0, 0x0d, 0x13, 0x03, 0xe0, 0xfd, 0xc0, 0x0d, 0x13, 0x09, 0x01, 0x20, 0x09, 0x1c, 0x09, // ............ ... + 0x01, 0x20, 0x09, 0x13, 0xfc, 0xf3, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0x01, // . .............. + 0x73, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0x01, 0x73, 0xc0, 0x0d, 0x13, 0x13, // s..........s.... + 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0x01, 0x73, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, // ......s......... 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, // .............../ - 0x00, 0x3f, 0x00, 0x4f, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, 0x23, 0x22, 0x27, 0x01, 0x26, 0x34, // .?.O......#"'.&4 - 0x37, 0x01, 0x36, 0x33, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, // 7.632.....#!"&=. + 0x00, 0x3f, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x14, 0x07, 0x01, 0x06, 0x23, 0x22, 0x26, 0x35, 0x11, // .?.O.......#"&5. + 0x34, 0x36, 0x33, 0x32, 0x17, 0x09, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, // 4632......#!"&=. 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, // 463!2.....#!"&=. 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, // 463!2.....#!"&=. 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, // 463!2.....#!"&=. - 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x80, 0x13, 0x0d, 0x0e, 0x09, 0xfe, 0xe0, 0x09, 0x09, // 463!2........... - 0x01, 0x20, 0x09, 0x0e, 0x0d, 0x13, 0x05, 0x80, 0x13, 0x0d, 0xf9, 0x40, 0x0d, 0x13, 0x13, 0x0d, // . .........@.... - 0x06, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xfb, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0x04, 0x40, 0x0d, 0x13, // .............@.. - 0x13, 0x0d, 0xfb, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0x04, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0xf9, 0x40, // .........@.....@ - 0x0d, 0x13, 0x13, 0x0d, 0x06, 0xc0, 0x0d, 0x13, 0x03, 0xe0, 0xfd, 0xc0, 0x0d, 0x13, 0x09, 0x01, // ................ - 0x20, 0x09, 0x1c, 0x09, 0x01, 0x20, 0x09, 0x13, 0xfc, 0xf3, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, // .... .......... - 0x0d, 0x13, 0x13, 0x01, 0x73, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0x01, 0x73, // ....s..........s - 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0x01, 0x73, 0xc0, 0x0d, 0x13, 0x13, 0x0d, // ..........s..... - 0xc0, 0x0d, 0x13, 0x13, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x05, 0x80, 0x00, 0x0f, // ................ - 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x3f, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x14, 0x07, 0x01, 0x06, 0x23, // .../.?.O.......# - 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x32, 0x17, 0x09, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, // "&5.4632......#! - 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x23, 0x21, // "&=.463!2.....#! - 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x23, 0x21, // "&=.463!2.....#! - 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x23, 0x21, // "&=.463!2.....#! - 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x60, 0x09, 0xfe, 0xe0, 0x09, // "&=.463!2..`.... - 0x0e, 0x0d, 0x13, 0x13, 0x0d, 0x0e, 0x09, 0x01, 0x20, 0x05, 0xa9, 0x13, 0x0d, 0xf9, 0x40, 0x0d, // ........ .....@. - 0x13, 0x13, 0x0d, 0x06, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xfb, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0x04, // ................ - 0x40, 0x0d, 0x13, 0x13, 0x0d, 0xfb, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0x04, 0x40, 0x0d, 0x13, 0x13, // @...........@... - 0x0d, 0xf9, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x06, 0xc0, 0x0d, 0x13, 0x02, 0xce, 0x1c, 0x09, 0xfe, // ..@............. - 0xe0, 0x09, 0x13, 0x0d, 0x02, 0x40, 0x0d, 0x13, 0x09, 0xfe, 0xe0, 0xfe, 0x09, 0xc0, 0x0d, 0x13, // .....@.......... - 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0x01, 0x73, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, // .......s........ - 0x13, 0x01, 0x73, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0x01, 0x73, 0xc0, 0x0d, // ..s..........s.. - 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, // ................ - 0x05, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x01, 0x11, 0x14, 0x07, 0x06, 0x23, 0x22, 0x27, 0x01, 0x15, // ...........#"'.. - 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x1d, 0x01, // ..#!"&5.463!2... - 0x01, 0x36, 0x33, 0x32, 0x17, 0x16, 0x07, 0x00, 0x27, 0x0d, 0x0c, 0x1b, 0x12, 0xfe, 0x6d, 0xa9, // .632....'.....m. - 0x77, 0xfd, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x02, 0xc0, 0x77, 0xa9, 0x01, 0x93, 0x12, 0x1b, 0x0c, // w.@w..w..w...... - 0x0d, 0x27, 0x04, 0xa0, 0xfb, 0xc0, 0x2a, 0x11, 0x05, 0x13, 0x01, 0x93, 0xa6, 0x77, 0xa9, 0xa9, // .'....*......w.. - 0x77, 0x02, 0xc0, 0x77, 0xa9, 0xa9, 0x77, 0xa5, 0x01, 0x92, 0x13, 0x05, 0x11, 0x00, 0x00, 0x00, // w..w..w......... - 0x00, 0x04, 0x00, 0x00, 0xff, 0x80, 0x07, 0x80, 0x05, 0x80, 0x00, 0x07, 0x00, 0x0e, 0x00, 0x1e, // ................ - 0x00, 0x2e, 0x00, 0x00, 0x00, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x01, 0x11, 0x21, 0x35, // ......."&462..!5 - 0x01, 0x17, 0x09, 0x01, 0x21, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x35, // ....!".....3!265 - 0x11, 0x34, 0x26, 0x17, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, // .4&....#!"&5.463 - 0x21, 0x32, 0x16, 0x02, 0x80, 0x70, 0xa0, 0x70, 0x70, 0xa0, 0x04, 0x70, 0xfa, 0x80, 0x01, 0x40, // !2...p.pp..p...@ - 0xa0, 0x02, 0x00, 0x02, 0x00, 0xf9, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0x06, 0x40, 0x0d, 0x13, 0x13, // ............@... - 0x93, 0x5e, 0x42, 0xf9, 0xc0, 0x42, 0x5e, 0x5e, 0x42, 0x06, 0x40, 0x42, 0x5e, 0x04, 0x10, 0xa0, // .^B..B^^B.@B^... - 0x70, 0x70, 0xa0, 0x70, 0xfd, 0xc0, 0xfe, 0x40, 0xc0, 0x01, 0x40, 0xa0, 0x02, 0x00, 0x01, 0x20, // pp.p...@..@.... - 0x13, 0x0d, 0xfb, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x04, 0xc0, 0x0d, 0x13, 0x20, 0xfb, 0x40, 0x42, // ...@........ .@B - 0x5e, 0x5e, 0x42, 0x04, 0xc0, 0x42, 0x5e, 0x5e, 0x00, 0x04, 0x00, 0x00, 0xff, 0x80, 0x05, 0xeb, // ^^B..B^^........ - 0x05, 0x6b, 0x00, 0x06, 0x00, 0x14, 0x00, 0x19, 0x00, 0x25, 0x00, 0x00, 0x21, 0x37, 0x27, 0x07, // .k.......%..!7'. - 0x15, 0x33, 0x15, 0x01, 0x34, 0x23, 0x22, 0x07, 0x01, 0x06, 0x15, 0x14, 0x33, 0x32, 0x37, 0x01, // .3..4#".....327. - 0x36, 0x27, 0x09, 0x01, 0x21, 0x11, 0x01, 0x14, 0x0f, 0x01, 0x01, 0x37, 0x36, 0x33, 0x32, 0x1f, // 6'..!......7632. - 0x01, 0x16, 0x01, 0x6b, 0x5b, 0xeb, 0x5b, 0x80, 0x02, 0x76, 0x16, 0x0a, 0x07, 0xfd, 0xe2, 0x07, // ...k[.[..v...... - 0x16, 0x0a, 0x07, 0x02, 0x1e, 0x07, 0x36, 0x01, 0xa0, 0xfc, 0xc0, 0xfe, 0x60, 0x05, 0xeb, 0x25, // ......6.....`..% - 0xa6, 0xfe, 0x60, 0xa6, 0x24, 0x36, 0x35, 0x26, 0xeb, 0x25, 0x5b, 0xeb, 0x5b, 0x6b, 0x80, 0x03, // ..`.$65&.%[.[k.. - 0xa0, 0x16, 0x07, 0xfd, 0xe2, 0x07, 0x0a, 0x16, 0x07, 0x02, 0x1e, 0x07, 0xca, 0xfe, 0x60, 0xfc, // ..............`. - 0xc0, 0x01, 0xa0, 0x02, 0xe0, 0x35, 0x25, 0xa6, 0x01, 0xa0, 0xa5, 0x26, 0x26, 0xea, 0x27, 0x00, // .....5%....&&.'. - 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x04, 0x00, 0x05, 0x80, 0x00, 0x07, 0x00, 0x17, 0x00, 0x00, // ................ - 0x00, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x01, 0x14, 0x07, 0x01, 0x0e, 0x01, 0x22, 0x26, // .4&"...2......"& - 0x27, 0x01, 0x26, 0x35, 0x34, 0x00, 0x20, 0x00, 0x03, 0x00, 0x96, 0xd4, 0x96, 0x96, 0xd4, 0x01, // '.&54. ......... - 0x96, 0x21, 0xfe, 0x94, 0x10, 0x3f, 0x48, 0x3f, 0x0f, 0xfe, 0x93, 0x21, 0x01, 0x2c, 0x01, 0xa8, // .!...?H?...!.,.. - 0x01, 0x2c, 0x03, 0x16, 0xd4, 0x96, 0x96, 0xd4, 0x96, 0x01, 0x00, 0x6d, 0x46, 0xfc, 0xfa, 0x21, // .,.........mF..! - 0x26, 0x26, 0x21, 0x03, 0x06, 0x46, 0x6d, 0xd4, 0x01, 0x2c, 0xfe, 0xd4, 0x00, 0x02, 0x00, 0x00, // &&!..Fm..,...... - 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x07, 0x00, 0x13, 0x00, 0x00, 0x25, 0x11, 0x22, 0x0e, // ............%.". - 0x01, 0x10, 0x1e, 0x01, 0x00, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, // ........ $...$ . - 0x03, 0x00, 0x94, 0xfa, 0x92, 0x92, 0xfa, 0x03, 0x94, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, // .............^.. - 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x60, 0x04, 0x40, 0x92, 0xfa, 0xfe, 0xd8, 0xfa, // ...a...a`.@..... - 0x92, 0x02, 0xf1, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, // ....^.....a...a. - 0xce, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x05, 0xc0, 0x00, 0x15, // ................ - 0x00, 0x2d, 0x00, 0x00, 0x01, 0x34, 0x27, 0x2e, 0x03, 0x27, 0x26, 0x22, 0x07, 0x0e, 0x03, 0x07, // .-...4'..'&".... - 0x06, 0x15, 0x14, 0x16, 0x32, 0x36, 0x25, 0x14, 0x00, 0x20, 0x00, 0x35, 0x34, 0x37, 0x3e, 0x03, // ....26%.. .547>. - 0x37, 0x3e, 0x01, 0x32, 0x16, 0x17, 0x1e, 0x03, 0x17, 0x16, 0x02, 0x00, 0x14, 0x01, 0x1d, 0x16, // 7>.2............ - 0x1c, 0x07, 0x04, 0x22, 0x04, 0x07, 0x1c, 0x16, 0x1d, 0x01, 0x14, 0x4b, 0x6a, 0x4b, 0x02, 0x00, // ...".......KjK.. - 0xfe, 0xd4, 0xfe, 0x58, 0xfe, 0xd4, 0x51, 0x06, 0x71, 0x59, 0x6e, 0x1c, 0x09, 0x32, 0x34, 0x33, // ...X..Q.qYn..243 - 0x08, 0x1c, 0x6e, 0x59, 0x71, 0x06, 0x51, 0x01, 0x80, 0x24, 0x21, 0x01, 0x2b, 0x21, 0x37, 0x17, // ..nYq.Q..$!.+!7. - 0x10, 0x10, 0x17, 0x37, 0x21, 0x2b, 0x01, 0x21, 0x24, 0x35, 0x4b, 0x4b, 0xb5, 0xd4, 0xfe, 0xd4, // ...7!+.!$5KK.... - 0x01, 0x2c, 0xd4, 0x91, 0x82, 0x09, 0xa3, 0x8b, 0xd9, 0x5d, 0x1e, 0x22, 0x22, 0x1e, 0x5d, 0xd9, // .,.......]."".]. - 0x8b, 0xa3, 0x09, 0x7f, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x06, 0xf8, 0x05, 0x80, 0x00, 0x06, // ................ - 0x00, 0x0e, 0x00, 0x39, 0x00, 0x3e, 0x00, 0x48, 0x00, 0x00, 0x01, 0x37, 0x27, 0x07, 0x15, 0x33, // ...9.>.H...7'..3 - 0x15, 0x00, 0x26, 0x07, 0x01, 0x06, 0x16, 0x37, 0x01, 0x13, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, // ..&....7.....#!" - 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x17, 0x16, 0x17, 0x16, 0x0f, 0x01, 0x06, 0x27, // &5.463!2.......' - 0x26, 0x23, 0x21, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x3d, 0x01, 0x34, // &#!".....3!26=.4 - 0x3f, 0x01, 0x36, 0x16, 0x03, 0x09, 0x01, 0x21, 0x11, 0x01, 0x07, 0x01, 0x37, 0x36, 0x32, 0x1f, // ?.6....!....762. - 0x01, 0x16, 0x14, 0x03, 0x78, 0x74, 0x98, 0x74, 0x60, 0x02, 0x00, 0x20, 0x11, 0xfe, 0xa2, 0x11, // ....xt.t`.. .... - 0x20, 0x11, 0x01, 0x5e, 0x51, 0xa9, 0x77, 0xfc, 0xc0, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0x40, 0x3f, // ..^Q.w..w..w.@? - 0x36, 0x0f, 0x03, 0x03, 0x0c, 0x31, 0x0e, 0x12, 0x17, 0x16, 0xfc, 0xc0, 0x42, 0x5e, 0x5e, 0x42, // 6....1......B^^B - 0x03, 0x40, 0x42, 0x5e, 0x09, 0x40, 0x0f, 0x28, 0x60, 0x01, 0x20, 0xfd, 0x60, 0xfe, 0xe0, 0x04, // .@B^.@.(`. .`... - 0x5c, 0x5c, 0xfe, 0xe0, 0x5c, 0x1c, 0x50, 0x1c, 0x98, 0x1c, 0x01, 0x60, 0x74, 0x98, 0x74, 0x38, // ......P....`t.t8 - 0x60, 0x02, 0xc0, 0x20, 0x11, 0xfe, 0xa2, 0x11, 0x20, 0x11, 0x01, 0x5e, 0xfd, 0xcf, 0xbe, 0x77, // `.. .... ..^...w - 0xa9, 0xa9, 0x77, 0x03, 0x40, 0x77, 0xa9, 0x19, 0x07, 0x10, 0x11, 0x0c, 0x31, 0x0e, 0x06, 0x06, // ..w.@w......1... - 0x5e, 0x42, 0xfc, 0xc0, 0x42, 0x5e, 0x5e, 0x42, 0x7e, 0x0d, 0x09, 0x40, 0x0f, 0x10, 0x02, 0xcd, // ^B..B^^B~..@.... - 0xfe, 0xe0, 0xfd, 0x60, 0x01, 0x20, 0x02, 0x1c, 0x5c, 0x01, 0x20, 0x5c, 0x1c, 0x1c, 0x98, 0x1c, // ...`. .... ..... - 0x50, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x06, 0x80, 0x06, 0x00, 0x00, 0x2b, // P..............+ - 0x00, 0x5a, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, // .Z......#!"&5.46 - 0x33, 0x21, 0x31, 0x32, 0x16, 0x15, 0x14, 0x07, 0x06, 0x07, 0x06, 0x2b, 0x01, 0x22, 0x06, 0x15, // 3!12.......+.".. - 0x11, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x3d, 0x01, 0x34, 0x37, 0x36, 0x37, 0x36, 0x17, 0x16, // ...3!26=.47676.. - 0x13, 0x01, 0x06, 0x23, 0x22, 0x27, 0x26, 0x3d, 0x01, 0x23, 0x20, 0x07, 0x06, 0x13, 0x16, 0x07, // ...#"'&=.# ..... - 0x06, 0x23, 0x22, 0x27, 0x2e, 0x04, 0x35, 0x34, 0x3e, 0x07, 0x3b, 0x01, 0x35, 0x34, 0x37, 0x36, // .#"'..54>.;.5476 - 0x33, 0x32, 0x17, 0x01, 0x16, 0x14, 0x05, 0x80, 0xa9, 0x77, 0xfc, 0xc0, 0x77, 0xa9, 0xa9, 0x77, // 32.......w..w..w - 0x00, 0xff, 0x0d, 0x13, 0x1a, 0x4d, 0x38, 0x0a, 0x06, 0x70, 0x42, 0x5e, 0x5e, 0x42, 0x03, 0x40, // .....M8..pB^^B.@ - 0x42, 0x5e, 0x12, 0x1c, 0x1a, 0x10, 0x13, 0x15, 0xed, 0xfe, 0x80, 0x12, 0x1b, 0x0c, 0x0d, 0x27, // B^.............' - 0xa0, 0xfe, 0xbd, 0x73, 0x77, 0x2d, 0x03, 0x17, 0x08, 0x04, 0x10, 0x0a, 0x0a, 0x16, 0x39, 0x2a, // ...sw-........9* - 0x23, 0x07, 0x15, 0x23, 0x3b, 0x4e, 0x6f, 0x8a, 0xb5, 0x6a, 0xa0, 0x27, 0x0d, 0x0c, 0x1a, 0x13, // #..#;No..j.'.... - 0x01, 0x80, 0x13, 0x02, 0x23, 0xfe, 0xfd, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0x40, 0x77, 0xa9, 0x13, // ....#..w..w.@w.. - 0x0d, 0x1b, 0x05, 0x1a, 0x22, 0x04, 0x5e, 0x42, 0xfc, 0xc0, 0x42, 0x5e, 0x5e, 0x42, 0xd6, 0x13, // ....".^B..B^^B.. - 0x0a, 0x0d, 0x18, 0x10, 0x08, 0x09, 0x01, 0xdc, 0xfe, 0x80, 0x13, 0x05, 0x11, 0x2a, 0xc0, 0x83, // .............*.. - 0x89, 0xfe, 0xb0, 0x17, 0x0b, 0x02, 0x0d, 0x0e, 0x22, 0x67, 0x60, 0x84, 0x38, 0x31, 0x54, 0x60, // ........"g`.81T` - 0x50, 0x53, 0x41, 0x3a, 0x27, 0x16, 0xc0, 0x2a, 0x11, 0x05, 0x13, 0xfe, 0x80, 0x13, 0x34, 0x00, // PSA:'..*......4. - 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x06, 0x7f, 0x05, 0x80, 0x00, 0x2f, 0x00, 0x44, 0x00, 0x00, // .........../.D.. - 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x17, // ....#!"&5.463!2. - 0x16, 0x17, 0x16, 0x0f, 0x01, 0x06, 0x23, 0x22, 0x27, 0x26, 0x23, 0x21, 0x22, 0x06, 0x15, 0x11, // ......#"'&#!"... - 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x3d, 0x01, 0x34, 0x3f, 0x01, 0x36, 0x33, 0x32, 0x17, 0x16, // ..3!26=.4?.632.. - 0x13, 0x01, 0x06, 0x22, 0x27, 0x01, 0x26, 0x34, 0x3f, 0x01, 0x36, 0x32, 0x17, 0x09, 0x01, 0x36, // ..."'.&4?.62...6 - 0x32, 0x1f, 0x01, 0x16, 0x14, 0x05, 0x80, 0xa9, 0x77, 0xfc, 0xc0, 0x77, 0xa9, 0xa9, 0x77, 0x03, // 2.......w..w..w. - 0x40, 0x3f, 0x36, 0x0f, 0x03, 0x03, 0x0c, 0x31, 0x0a, 0x0d, 0x03, 0x06, 0x17, 0x16, 0xfc, 0xc0, // @?6....1........ - 0x42, 0x5e, 0x5e, 0x42, 0x03, 0x40, 0x42, 0x5e, 0x09, 0x40, 0x0a, 0x0d, 0x06, 0x06, 0x14, 0xe7, // B^^B.@B^.@...... - 0xfc, 0xd2, 0x18, 0x42, 0x18, 0xfe, 0x52, 0x18, 0x18, 0x6e, 0x18, 0x42, 0x18, 0x01, 0x07, 0x02, // ...B..R..n.B.... - 0x87, 0x18, 0x42, 0x18, 0x6e, 0x18, 0x02, 0x5e, 0xfe, 0xc2, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0x40, // ..B.n..^..w..w.@ - 0x77, 0xa9, 0x19, 0x07, 0x10, 0x11, 0x0c, 0x31, 0x0a, 0x02, 0x06, 0x5e, 0x42, 0xfc, 0xc0, 0x42, // w......1...^B..B - 0x5e, 0x5e, 0x42, 0xfe, 0x0d, 0x09, 0x40, 0x0a, 0x03, 0x08, 0x01, 0xd4, 0xfc, 0xd2, 0x18, 0x18, // ^^B...@......... - 0x01, 0xae, 0x18, 0x42, 0x18, 0x6e, 0x18, 0x18, 0xfe, 0xf9, 0x02, 0x87, 0x18, 0x18, 0x6e, 0x18, // ...B.n........n. - 0x42, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x43, // B..............C - 0x00, 0x00, 0x00, 0x14, 0x07, 0x01, 0x06, 0x22, 0x26, 0x3d, 0x01, 0x21, 0x11, 0x33, 0x32, 0x16, // ......."&=.!.32. - 0x14, 0x07, 0x01, 0x06, 0x22, 0x27, 0x01, 0x26, 0x34, 0x36, 0x3b, 0x01, 0x11, 0x21, 0x15, 0x14, // ...."'.&46;..!.. - 0x06, 0x22, 0x27, 0x01, 0x26, 0x34, 0x37, 0x01, 0x36, 0x32, 0x16, 0x1d, 0x01, 0x21, 0x11, 0x23, // ."'.&47.62...!.# - 0x22, 0x26, 0x34, 0x37, 0x01, 0x36, 0x32, 0x17, 0x01, 0x16, 0x14, 0x06, 0x2b, 0x01, 0x11, 0x21, // "&47.62.....+..! - 0x35, 0x34, 0x36, 0x32, 0x17, 0x01, 0x07, 0x00, 0x13, 0xff, 0x00, 0x13, 0x34, 0x26, 0xfe, 0x80, // 5462........4&.. - 0x80, 0x1a, 0x26, 0x13, 0xff, 0x00, 0x13, 0x34, 0x13, 0xff, 0x00, 0x13, 0x26, 0x1a, 0x80, 0xfe, // ..&....4....&... - 0x80, 0x26, 0x34, 0x13, 0xff, 0x00, 0x13, 0x13, 0x01, 0x00, 0x13, 0x34, 0x26, 0x01, 0x80, 0x80, // .&4........4&... - 0x1a, 0x26, 0x13, 0x01, 0x00, 0x13, 0x34, 0x13, 0x01, 0x00, 0x13, 0x26, 0x1a, 0x80, 0x01, 0x80, // .&....4....&.... - 0x26, 0x34, 0x13, 0x01, 0x00, 0x02, 0x9a, 0x34, 0x13, 0xff, 0x00, 0x13, 0x26, 0x1a, 0x80, 0xfe, // &4.....4....&... - 0x80, 0x26, 0x34, 0x13, 0xff, 0x00, 0x13, 0x13, 0x01, 0x00, 0x13, 0x34, 0x26, 0x01, 0x80, 0x80, // .&4........4&... - 0x1a, 0x26, 0x13, 0x01, 0x00, 0x13, 0x34, 0x13, 0x01, 0x00, 0x13, 0x26, 0x1a, 0x80, 0x01, 0x80, // .&....4....&.... - 0x26, 0x34, 0x13, 0x01, 0x00, 0x13, 0x13, 0xff, 0x00, 0x13, 0x34, 0x26, 0xfe, 0x80, 0x80, 0x1a, // &4........4&.... - 0x26, 0x13, 0xff, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0x80, 0x04, 0x00, 0x05, 0x80, 0x00, 0x1d, // &............... - 0x00, 0x00, 0x01, 0x36, 0x16, 0x15, 0x11, 0x14, 0x06, 0x27, 0x01, 0x26, 0x27, 0x11, 0x14, 0x06, // ...6.....'.&'... - 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x15, 0x11, 0x36, 0x37, // +."&5.46;.2...67 - 0x03, 0xd3, 0x13, 0x1a, 0x1a, 0x13, 0xfd, 0x3a, 0x09, 0x04, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, // .......:..&...&& - 0x1a, 0x80, 0x1a, 0x26, 0x04, 0x09, 0x05, 0x73, 0x13, 0x0c, 0x1a, 0xfa, 0x40, 0x1a, 0x0c, 0x13, // ...&...s....@... - 0x02, 0xc6, 0x09, 0x0a, 0xfd, 0x5a, 0x1a, 0x26, 0x26, 0x1a, 0x05, 0x80, 0x1a, 0x26, 0x26, 0x1a, // .....Z.&&....&&. - 0xfd, 0x5a, 0x0b, 0x08, 0x00, 0x01, 0x00, 0x00, 0xff, 0x80, 0x07, 0x00, 0x05, 0x80, 0x00, 0x2b, // .Z.............+ - 0x00, 0x00, 0x01, 0x36, 0x16, 0x15, 0x11, 0x14, 0x06, 0x27, 0x01, 0x26, 0x27, 0x11, 0x14, 0x06, // ...6.....'.&'... - 0x27, 0x01, 0x26, 0x27, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x3b, // '.&'...+."&5.46; - 0x01, 0x32, 0x16, 0x15, 0x11, 0x36, 0x37, 0x01, 0x36, 0x16, 0x15, 0x11, 0x36, 0x37, 0x06, 0xd3, // .2...67.6...67.. - 0x13, 0x1a, 0x1a, 0x13, 0xfd, 0x3a, 0x09, 0x04, 0x1a, 0x13, 0xfd, 0x3a, 0x09, 0x04, 0x26, 0x1a, // .....:.....:..&. - 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x04, 0x09, 0x02, 0xc6, 0x13, 0x1a, 0x04, 0x09, // ..&&...&........ - 0x05, 0x73, 0x13, 0x0c, 0x1a, 0xfa, 0x40, 0x1a, 0x0c, 0x13, 0x02, 0xc6, 0x09, 0x0a, 0xfd, 0x3a, // .s....@........: - 0x1a, 0x0c, 0x13, 0x02, 0xc6, 0x09, 0x0a, 0xfd, 0x5a, 0x1a, 0x26, 0x26, 0x1a, 0x05, 0x80, 0x1a, // ........Z.&&.... - 0x26, 0x26, 0x1a, 0xfd, 0x5a, 0x0b, 0x08, 0x02, 0xc6, 0x13, 0x0c, 0x1a, 0xfd, 0x3a, 0x0b, 0x08, // &&..Z........:.. - 0x00, 0x01, 0x00, 0x7a, 0xff, 0x80, 0x06, 0x80, 0x05, 0x80, 0x00, 0x19, 0x00, 0x00, 0x01, 0x36, // ...z...........6 - 0x16, 0x15, 0x11, 0x14, 0x06, 0x27, 0x01, 0x26, 0x27, 0x11, 0x14, 0x06, 0x27, 0x01, 0x26, 0x34, // .....'.&'...'.&4 - 0x37, 0x01, 0x36, 0x16, 0x15, 0x11, 0x36, 0x37, 0x06, 0x53, 0x13, 0x1a, 0x1a, 0x13, 0xfd, 0x3a, // 7.6...67.S.....: - 0x08, 0x05, 0x1a, 0x13, 0xfd, 0x3a, 0x13, 0x13, 0x02, 0xc6, 0x13, 0x1a, 0x05, 0x08, 0x05, 0x73, // .....:.........s - 0x13, 0x0c, 0x1a, 0xfa, 0x40, 0x1a, 0x0c, 0x13, 0x02, 0xc6, 0x09, 0x0a, 0xfd, 0x3a, 0x1a, 0x0c, // ....@........:.. - 0x13, 0x02, 0xc6, 0x13, 0x34, 0x13, 0x02, 0xc6, 0x13, 0x0c, 0x1a, 0xfd, 0x3a, 0x0b, 0x08, 0x00, // ....4.......:... - 0x00, 0x01, 0x00, 0x00, 0xff, 0x7c, 0x05, 0x7f, 0x05, 0x84, 0x00, 0x0b, 0x00, 0x00, 0x09, 0x01, // .....|.......... - 0x06, 0x26, 0x35, 0x11, 0x34, 0x36, 0x17, 0x01, 0x16, 0x14, 0x05, 0x68, 0xfa, 0xd0, 0x17, 0x21, // .&5.46.....h...! - 0x21, 0x17, 0x05, 0x30, 0x17, 0x02, 0x61, 0xfd, 0x1e, 0x0d, 0x14, 0x1a, 0x05, 0xc0, 0x1a, 0x14, // !..0..a......... - 0x0d, 0xfd, 0x1e, 0x0d, 0x24, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // ....$........... - 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // ............#!"& - 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x05, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // 5.463!2.....#!"& - 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x06, 0x00, 0x26, 0x1a, 0xfe, 0x00, 0x1a, 0x26, // 5.463!2...&....& - 0x26, 0x1a, 0x02, 0x00, 0x1a, 0x26, 0xfc, 0x80, 0x26, 0x1a, 0xfe, 0x00, 0x1a, 0x26, 0x26, 0x1a, // &....&..&....&&. - 0x02, 0x00, 0x1a, 0x26, 0x05, 0x40, 0xfa, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x05, 0x80, 0x1a, 0x26, // ...&.@...&&....& - 0x26, 0x1a, 0xfa, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x05, 0x80, 0x1a, 0x26, 0x26, 0x00, 0x00, 0x00, // &....&&....&&... - 0x00, 0x01, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x0f, 0x00, 0x00, 0x01, 0x11, // ................ - 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x06, 0x00, // ..#!"&5.463!2... - 0x26, 0x1a, 0xfa, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x05, 0x80, 0x1a, 0x26, 0x05, 0x40, 0xfa, 0x80, // &....&&....&.@.. + 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x60, 0x09, 0xfe, 0xe0, 0x09, 0x0e, 0x0d, 0x13, 0x13, // 463!2..`........ + 0x0d, 0x0e, 0x09, 0x01, 0x20, 0x05, 0xa9, 0x13, 0x0d, 0xf9, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x06, // .... .....@..... + 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xfb, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0x04, 0x40, 0x0d, 0x13, 0x13, // ............@... + 0x0d, 0xfb, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0x04, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0xf9, 0x40, 0x0d, // ........@.....@. + 0x13, 0x13, 0x0d, 0x06, 0xc0, 0x0d, 0x13, 0x02, 0xce, 0x1c, 0x09, 0xfe, 0xe0, 0x09, 0x13, 0x0d, // ................ + 0x02, 0x40, 0x0d, 0x13, 0x09, 0xfe, 0xe0, 0xfe, 0x09, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, // .@.............. + 0x13, 0x13, 0x01, 0x73, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0x01, 0x73, 0xc0, // ...s..........s. + 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0x01, 0x73, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, // .........s...... + 0x0d, 0x13, 0x13, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x05, 0x00, 0x00, 0x1f, // ................ + 0x00, 0x00, 0x01, 0x11, 0x14, 0x07, 0x06, 0x23, 0x22, 0x27, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, // .......#"'....#! + 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x1d, 0x01, 0x01, 0x36, 0x33, 0x32, // "&5.463!2....632 + 0x17, 0x16, 0x07, 0x00, 0x27, 0x0d, 0x0c, 0x1b, 0x12, 0xfe, 0x6d, 0xa9, 0x77, 0xfd, 0x40, 0x77, // ....'.....m.w.@w + 0xa9, 0xa9, 0x77, 0x02, 0xc0, 0x77, 0xa9, 0x01, 0x93, 0x12, 0x1b, 0x0c, 0x0d, 0x27, 0x04, 0xa0, // ..w..w.......'.. + 0xfb, 0xc0, 0x2a, 0x11, 0x05, 0x13, 0x01, 0x93, 0xa6, 0x77, 0xa9, 0xa9, 0x77, 0x02, 0xc0, 0x77, // ..*......w..w..w + 0xa9, 0xa9, 0x77, 0xa5, 0x01, 0x92, 0x13, 0x05, 0x11, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, // ..w............. + 0xff, 0x80, 0x07, 0x80, 0x05, 0x80, 0x00, 0x07, 0x00, 0x0e, 0x00, 0x1e, 0x00, 0x2e, 0x00, 0x00, // ................ + 0x00, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x01, 0x11, 0x21, 0x35, 0x01, 0x17, 0x09, 0x01, // ..."&462..!5.... + 0x21, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x35, 0x11, 0x34, 0x26, 0x17, // !".....3!265.4&. + 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x02, // ...#!"&5.463!2.. + 0x80, 0x70, 0xa0, 0x70, 0x70, 0xa0, 0x04, 0x70, 0xfa, 0x80, 0x01, 0x40, 0xa0, 0x02, 0x00, 0x02, // .p.pp..p...@.... + 0x00, 0xf9, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0x06, 0x40, 0x0d, 0x13, 0x13, 0x93, 0x5e, 0x42, 0xf9, // ........@....^B. + 0xc0, 0x42, 0x5e, 0x5e, 0x42, 0x06, 0x40, 0x42, 0x5e, 0x04, 0x10, 0xa0, 0x70, 0x70, 0xa0, 0x70, // .B^^B.@B^...pp.p + 0xfd, 0xc0, 0xfe, 0x40, 0xc0, 0x01, 0x40, 0xa0, 0x02, 0x00, 0x01, 0x20, 0x13, 0x0d, 0xfb, 0x40, // ...@..@.... ...@ + 0x0d, 0x13, 0x13, 0x0d, 0x04, 0xc0, 0x0d, 0x13, 0x20, 0xfb, 0x40, 0x42, 0x5e, 0x5e, 0x42, 0x04, // ........ .@B^^B. + 0xc0, 0x42, 0x5e, 0x5e, 0x00, 0x04, 0x00, 0x00, 0xff, 0x80, 0x05, 0xeb, 0x05, 0x6b, 0x00, 0x06, // .B^^.........k.. + 0x00, 0x14, 0x00, 0x19, 0x00, 0x25, 0x00, 0x00, 0x21, 0x37, 0x27, 0x07, 0x15, 0x33, 0x15, 0x01, // .....%..!7'..3.. + 0x34, 0x23, 0x22, 0x07, 0x01, 0x06, 0x15, 0x14, 0x33, 0x32, 0x37, 0x01, 0x36, 0x27, 0x09, 0x01, // 4#".....327.6'.. + 0x21, 0x11, 0x01, 0x14, 0x0f, 0x01, 0x01, 0x37, 0x36, 0x33, 0x32, 0x1f, 0x01, 0x16, 0x01, 0x6b, // !......7632....k + 0x5b, 0xeb, 0x5b, 0x80, 0x02, 0x76, 0x16, 0x0a, 0x07, 0xfd, 0xe2, 0x07, 0x16, 0x0a, 0x07, 0x02, // [.[..v.......... + 0x1e, 0x07, 0x36, 0x01, 0xa0, 0xfc, 0xc0, 0xfe, 0x60, 0x05, 0xeb, 0x25, 0xa6, 0xfe, 0x60, 0xa6, // ..6.....`..%..`. + 0x24, 0x36, 0x35, 0x26, 0xeb, 0x25, 0x5b, 0xeb, 0x5b, 0x6b, 0x80, 0x03, 0xa0, 0x16, 0x07, 0xfd, // $65&.%[.[k...... + 0xe2, 0x07, 0x0a, 0x16, 0x07, 0x02, 0x1e, 0x07, 0xca, 0xfe, 0x60, 0xfc, 0xc0, 0x01, 0xa0, 0x02, // ..........`..... + 0xe0, 0x35, 0x25, 0xa6, 0x01, 0xa0, 0xa5, 0x26, 0x26, 0xea, 0x27, 0x00, 0x00, 0x02, 0x00, 0x00, // .5%....&&.'..... + 0xff, 0x80, 0x04, 0x00, 0x05, 0x80, 0x00, 0x07, 0x00, 0x17, 0x00, 0x00, 0x00, 0x34, 0x26, 0x22, // .............4&" + 0x06, 0x14, 0x16, 0x32, 0x01, 0x14, 0x07, 0x01, 0x0e, 0x01, 0x22, 0x26, 0x27, 0x01, 0x26, 0x35, // ...2......"&'.&5 + 0x34, 0x00, 0x20, 0x00, 0x03, 0x00, 0x96, 0xd4, 0x96, 0x96, 0xd4, 0x01, 0x96, 0x21, 0xfe, 0x94, // 4. ..........!.. + 0x10, 0x3f, 0x48, 0x3f, 0x0f, 0xfe, 0x93, 0x21, 0x01, 0x2c, 0x01, 0xa8, 0x01, 0x2c, 0x03, 0x16, // .?H?...!.,...,.. + 0xd4, 0x96, 0x96, 0xd4, 0x96, 0x01, 0x00, 0x6d, 0x46, 0xfc, 0xfa, 0x21, 0x26, 0x26, 0x21, 0x03, // .......mF..!&&!. + 0x06, 0x46, 0x6d, 0xd4, 0x01, 0x2c, 0xfe, 0xd4, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // .Fm..,.......... + 0x05, 0x80, 0x00, 0x07, 0x00, 0x13, 0x00, 0x00, 0x25, 0x11, 0x22, 0x0e, 0x01, 0x10, 0x1e, 0x01, // ........%."..... + 0x00, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, 0x03, 0x00, 0x94, 0xfa, // .... $...$ ..... + 0x92, 0x92, 0xfa, 0x03, 0x94, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, // .........^.....a + 0x01, 0xa2, 0x01, 0x61, 0x60, 0x04, 0x40, 0x92, 0xfa, 0xfe, 0xd8, 0xfa, 0x92, 0x02, 0xf1, 0xfe, // ...a`.@......... + 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x00, 0x00, // ^.....a...a..... + 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x05, 0xc0, 0x00, 0x15, 0x00, 0x2d, 0x00, 0x00, // .............-.. + 0x01, 0x34, 0x27, 0x2e, 0x03, 0x27, 0x26, 0x22, 0x07, 0x0e, 0x03, 0x07, 0x06, 0x15, 0x14, 0x16, // .4'..'&"........ + 0x32, 0x36, 0x25, 0x14, 0x00, 0x20, 0x00, 0x35, 0x34, 0x37, 0x3e, 0x03, 0x37, 0x3e, 0x01, 0x32, // 26%.. .547>.7>.2 + 0x16, 0x17, 0x1e, 0x03, 0x17, 0x16, 0x02, 0x00, 0x14, 0x01, 0x1d, 0x16, 0x1c, 0x07, 0x04, 0x22, // ..............." + 0x04, 0x07, 0x1c, 0x16, 0x1d, 0x01, 0x14, 0x4b, 0x6a, 0x4b, 0x02, 0x00, 0xfe, 0xd4, 0xfe, 0x58, // .......KjK.....X + 0xfe, 0xd4, 0x51, 0x06, 0x71, 0x59, 0x6e, 0x1c, 0x09, 0x32, 0x34, 0x33, 0x08, 0x1c, 0x6e, 0x59, // ..Q.qYn..243..nY + 0x71, 0x06, 0x51, 0x01, 0x80, 0x24, 0x21, 0x01, 0x2b, 0x21, 0x37, 0x17, 0x10, 0x10, 0x17, 0x37, // q.Q..$!.+!7....7 + 0x21, 0x2b, 0x01, 0x21, 0x24, 0x35, 0x4b, 0x4b, 0xb5, 0xd4, 0xfe, 0xd4, 0x01, 0x2c, 0xd4, 0x91, // !+.!$5KK.....,.. + 0x82, 0x09, 0xa3, 0x8b, 0xd9, 0x5d, 0x1e, 0x22, 0x22, 0x1e, 0x5d, 0xd9, 0x8b, 0xa3, 0x09, 0x7f, // .....]."".]..... + 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x06, 0xf8, 0x05, 0x80, 0x00, 0x06, 0x00, 0x0e, 0x00, 0x39, // ...............9 + 0x00, 0x3e, 0x00, 0x48, 0x00, 0x00, 0x01, 0x37, 0x27, 0x07, 0x15, 0x33, 0x15, 0x00, 0x26, 0x07, // .>.H...7'..3..&. + 0x01, 0x06, 0x16, 0x37, 0x01, 0x13, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, // ...7.....#!"&5.4 + 0x36, 0x33, 0x21, 0x32, 0x17, 0x16, 0x17, 0x16, 0x0f, 0x01, 0x06, 0x27, 0x26, 0x23, 0x21, 0x22, // 63!2.......'&#!" + 0x06, 0x15, 0x11, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x3d, 0x01, 0x34, 0x3f, 0x01, 0x36, 0x16, // .....3!26=.4?.6. + 0x03, 0x09, 0x01, 0x21, 0x11, 0x01, 0x07, 0x01, 0x37, 0x36, 0x32, 0x1f, 0x01, 0x16, 0x14, 0x03, // ...!....762..... + 0x78, 0x74, 0x98, 0x74, 0x60, 0x02, 0x00, 0x20, 0x11, 0xfe, 0xa2, 0x11, 0x20, 0x11, 0x01, 0x5e, // xt.t`.. .... ..^ + 0x51, 0xa9, 0x77, 0xfc, 0xc0, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0x40, 0x3f, 0x36, 0x0f, 0x03, 0x03, // Q.w..w..w.@?6... + 0x0c, 0x31, 0x0e, 0x12, 0x17, 0x16, 0xfc, 0xc0, 0x42, 0x5e, 0x5e, 0x42, 0x03, 0x40, 0x42, 0x5e, // .1......B^^B.@B^ + 0x09, 0x40, 0x0f, 0x28, 0x60, 0x01, 0x20, 0xfd, 0x60, 0xfe, 0xe0, 0x04, 0x5c, 0x5c, 0xfe, 0xe0, // .@.(`. .`....... + 0x5c, 0x1c, 0x50, 0x1c, 0x98, 0x1c, 0x01, 0x60, 0x74, 0x98, 0x74, 0x38, 0x60, 0x02, 0xc0, 0x20, // ..P....`t.t8`.. + 0x11, 0xfe, 0xa2, 0x11, 0x20, 0x11, 0x01, 0x5e, 0xfd, 0xcf, 0xbe, 0x77, 0xa9, 0xa9, 0x77, 0x03, // .... ..^...w..w. + 0x40, 0x77, 0xa9, 0x19, 0x07, 0x10, 0x11, 0x0c, 0x31, 0x0e, 0x06, 0x06, 0x5e, 0x42, 0xfc, 0xc0, // @w......1...^B.. + 0x42, 0x5e, 0x5e, 0x42, 0x7e, 0x0d, 0x09, 0x40, 0x0f, 0x10, 0x02, 0xcd, 0xfe, 0xe0, 0xfd, 0x60, // B^^B~..@.......` + 0x01, 0x20, 0x02, 0x1c, 0x5c, 0x01, 0x20, 0x5c, 0x1c, 0x1c, 0x98, 0x1c, 0x50, 0x00, 0x00, 0x00, // . .... .....P... + 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x06, 0x80, 0x06, 0x00, 0x00, 0x2b, 0x00, 0x5a, 0x00, 0x00, // ...........+.Z.. + 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x31, 0x32, // ....#!"&5.463!12 + 0x16, 0x15, 0x14, 0x07, 0x06, 0x07, 0x06, 0x2b, 0x01, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x33, // .......+.".....3 + 0x21, 0x32, 0x36, 0x3d, 0x01, 0x34, 0x37, 0x36, 0x37, 0x36, 0x17, 0x16, 0x13, 0x01, 0x06, 0x23, // !26=.47676.....# + 0x22, 0x27, 0x26, 0x3d, 0x01, 0x23, 0x20, 0x07, 0x06, 0x13, 0x16, 0x07, 0x06, 0x23, 0x22, 0x27, // "'&=.# ......#"' + 0x2e, 0x04, 0x35, 0x34, 0x3e, 0x07, 0x3b, 0x01, 0x35, 0x34, 0x37, 0x36, 0x33, 0x32, 0x17, 0x01, // ..54>.;.547632.. + 0x16, 0x14, 0x05, 0x80, 0xa9, 0x77, 0xfc, 0xc0, 0x77, 0xa9, 0xa9, 0x77, 0x00, 0xff, 0x0d, 0x13, // .....w..w..w.... + 0x1a, 0x4d, 0x38, 0x0a, 0x06, 0x70, 0x42, 0x5e, 0x5e, 0x42, 0x03, 0x40, 0x42, 0x5e, 0x12, 0x1c, // .M8..pB^^B.@B^.. + 0x1a, 0x10, 0x13, 0x15, 0xed, 0xfe, 0x80, 0x12, 0x1b, 0x0c, 0x0d, 0x27, 0xa0, 0xfe, 0xbd, 0x73, // ...........'...s + 0x77, 0x2d, 0x03, 0x17, 0x08, 0x04, 0x10, 0x0a, 0x0a, 0x16, 0x39, 0x2a, 0x23, 0x07, 0x15, 0x23, // w-........9*#..# + 0x3b, 0x4e, 0x6f, 0x8a, 0xb5, 0x6a, 0xa0, 0x27, 0x0d, 0x0c, 0x1a, 0x13, 0x01, 0x80, 0x13, 0x02, // ;No..j.'........ + 0x23, 0xfe, 0xfd, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0x40, 0x77, 0xa9, 0x13, 0x0d, 0x1b, 0x05, 0x1a, // #..w..w.@w...... + 0x22, 0x04, 0x5e, 0x42, 0xfc, 0xc0, 0x42, 0x5e, 0x5e, 0x42, 0xd6, 0x13, 0x0a, 0x0d, 0x18, 0x10, // ".^B..B^^B...... + 0x08, 0x09, 0x01, 0xdc, 0xfe, 0x80, 0x13, 0x05, 0x11, 0x2a, 0xc0, 0x83, 0x89, 0xfe, 0xb0, 0x17, // .........*...... + 0x0b, 0x02, 0x0d, 0x0e, 0x22, 0x67, 0x60, 0x84, 0x38, 0x31, 0x54, 0x60, 0x50, 0x53, 0x41, 0x3a, // ...."g`.81T`PSA: + 0x27, 0x16, 0xc0, 0x2a, 0x11, 0x05, 0x13, 0xfe, 0x80, 0x13, 0x34, 0x00, 0x00, 0x02, 0x00, 0x00, // '..*......4..... + 0x00, 0x00, 0x06, 0x7f, 0x05, 0x80, 0x00, 0x2f, 0x00, 0x44, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, // ......./.D...... + 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x17, 0x16, 0x17, 0x16, 0x0f, // #!"&5.463!2..... + 0x01, 0x06, 0x23, 0x22, 0x27, 0x26, 0x23, 0x21, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x33, 0x21, // ..#"'&#!".....3! + 0x32, 0x36, 0x3d, 0x01, 0x34, 0x3f, 0x01, 0x36, 0x33, 0x32, 0x17, 0x16, 0x13, 0x01, 0x06, 0x22, // 26=.4?.632....." + 0x27, 0x01, 0x26, 0x34, 0x3f, 0x01, 0x36, 0x32, 0x17, 0x09, 0x01, 0x36, 0x32, 0x1f, 0x01, 0x16, // '.&4?.62...62... + 0x14, 0x05, 0x80, 0xa9, 0x77, 0xfc, 0xc0, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0x40, 0x3f, 0x36, 0x0f, // ....w..w..w.@?6. + 0x03, 0x03, 0x0c, 0x31, 0x0a, 0x0d, 0x03, 0x06, 0x17, 0x16, 0xfc, 0xc0, 0x42, 0x5e, 0x5e, 0x42, // ...1........B^^B + 0x03, 0x40, 0x42, 0x5e, 0x09, 0x40, 0x0a, 0x0d, 0x06, 0x06, 0x14, 0xe7, 0xfc, 0xd2, 0x18, 0x42, // .@B^.@.........B + 0x18, 0xfe, 0x52, 0x18, 0x18, 0x6e, 0x18, 0x42, 0x18, 0x01, 0x07, 0x02, 0x87, 0x18, 0x42, 0x18, // ..R..n.B......B. + 0x6e, 0x18, 0x02, 0x5e, 0xfe, 0xc2, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0x40, 0x77, 0xa9, 0x19, 0x07, // n..^..w..w.@w... + 0x10, 0x11, 0x0c, 0x31, 0x0a, 0x02, 0x06, 0x5e, 0x42, 0xfc, 0xc0, 0x42, 0x5e, 0x5e, 0x42, 0xfe, // ...1...^B..B^^B. + 0x0d, 0x09, 0x40, 0x0a, 0x03, 0x08, 0x01, 0xd4, 0xfc, 0xd2, 0x18, 0x18, 0x01, 0xae, 0x18, 0x42, // ..@............B + 0x18, 0x6e, 0x18, 0x18, 0xfe, 0xf9, 0x02, 0x87, 0x18, 0x18, 0x6e, 0x18, 0x42, 0x00, 0x00, 0x00, // .n........n.B... + 0x00, 0x01, 0x00, 0x00, 0xff, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x14, // ...........C.... + 0x07, 0x01, 0x06, 0x22, 0x26, 0x3d, 0x01, 0x21, 0x11, 0x33, 0x32, 0x16, 0x14, 0x07, 0x01, 0x06, // ..."&=.!.32..... + 0x22, 0x27, 0x01, 0x26, 0x34, 0x36, 0x3b, 0x01, 0x11, 0x21, 0x15, 0x14, 0x06, 0x22, 0x27, 0x01, // "'.&46;..!..."'. + 0x26, 0x34, 0x37, 0x01, 0x36, 0x32, 0x16, 0x1d, 0x01, 0x21, 0x11, 0x23, 0x22, 0x26, 0x34, 0x37, // &47.62...!.#"&47 + 0x01, 0x36, 0x32, 0x17, 0x01, 0x16, 0x14, 0x06, 0x2b, 0x01, 0x11, 0x21, 0x35, 0x34, 0x36, 0x32, // .62.....+..!5462 + 0x17, 0x01, 0x07, 0x00, 0x13, 0xff, 0x00, 0x13, 0x34, 0x26, 0xfe, 0x80, 0x80, 0x1a, 0x26, 0x13, // ........4&....&. + 0xff, 0x00, 0x13, 0x34, 0x13, 0xff, 0x00, 0x13, 0x26, 0x1a, 0x80, 0xfe, 0x80, 0x26, 0x34, 0x13, // ...4....&....&4. + 0xff, 0x00, 0x13, 0x13, 0x01, 0x00, 0x13, 0x34, 0x26, 0x01, 0x80, 0x80, 0x1a, 0x26, 0x13, 0x01, // .......4&....&.. + 0x00, 0x13, 0x34, 0x13, 0x01, 0x00, 0x13, 0x26, 0x1a, 0x80, 0x01, 0x80, 0x26, 0x34, 0x13, 0x01, // ..4....&....&4.. + 0x00, 0x02, 0x9a, 0x34, 0x13, 0xff, 0x00, 0x13, 0x26, 0x1a, 0x80, 0xfe, 0x80, 0x26, 0x34, 0x13, // ...4....&....&4. + 0xff, 0x00, 0x13, 0x13, 0x01, 0x00, 0x13, 0x34, 0x26, 0x01, 0x80, 0x80, 0x1a, 0x26, 0x13, 0x01, // .......4&....&.. + 0x00, 0x13, 0x34, 0x13, 0x01, 0x00, 0x13, 0x26, 0x1a, 0x80, 0x01, 0x80, 0x26, 0x34, 0x13, 0x01, // ..4....&....&4.. + 0x00, 0x13, 0x13, 0xff, 0x00, 0x13, 0x34, 0x26, 0xfe, 0x80, 0x80, 0x1a, 0x26, 0x13, 0xff, 0x00, // ......4&....&... + 0x00, 0x01, 0x00, 0x00, 0xff, 0x80, 0x04, 0x00, 0x05, 0x80, 0x00, 0x1d, 0x00, 0x00, 0x01, 0x36, // ...............6 + 0x16, 0x15, 0x11, 0x14, 0x06, 0x27, 0x01, 0x26, 0x27, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, // .....'.&'...+."& + 0x35, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x15, 0x11, 0x36, 0x37, 0x03, 0xd3, 0x13, 0x1a, // 5.46;.2...67.... + 0x1a, 0x13, 0xfd, 0x3a, 0x09, 0x04, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, // ...:..&...&&...& + 0x04, 0x09, 0x05, 0x73, 0x13, 0x0c, 0x1a, 0xfa, 0x40, 0x1a, 0x0c, 0x13, 0x02, 0xc6, 0x09, 0x0a, // ...s....@....... + 0xfd, 0x5a, 0x1a, 0x26, 0x26, 0x1a, 0x05, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0xfd, 0x5a, 0x0a, 0x09, // .Z.&&....&&..Z.. + 0x00, 0x01, 0x00, 0x00, 0xff, 0x80, 0x07, 0x00, 0x05, 0x80, 0x00, 0x2b, 0x00, 0x00, 0x01, 0x36, // ...........+...6 + 0x16, 0x15, 0x11, 0x14, 0x06, 0x27, 0x01, 0x26, 0x27, 0x11, 0x14, 0x06, 0x27, 0x01, 0x26, 0x27, // .....'.&'...'.&' + 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x15, // ...+."&5.46;.2.. + 0x11, 0x36, 0x37, 0x01, 0x36, 0x16, 0x15, 0x11, 0x36, 0x37, 0x06, 0xd3, 0x13, 0x1a, 0x1a, 0x13, // .67.6...67...... + 0xfd, 0x3a, 0x09, 0x04, 0x1a, 0x13, 0xfd, 0x3a, 0x09, 0x04, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, // .:.....:..&...&& + 0x1a, 0x80, 0x1a, 0x26, 0x04, 0x09, 0x02, 0xc6, 0x13, 0x1a, 0x04, 0x09, 0x05, 0x73, 0x13, 0x0c, // ...&.........s.. + 0x1a, 0xfa, 0x40, 0x1a, 0x0c, 0x13, 0x02, 0xc6, 0x09, 0x0a, 0xfd, 0x3a, 0x1a, 0x0c, 0x13, 0x02, // ..@........:.... + 0xc6, 0x09, 0x0a, 0xfd, 0x5a, 0x1a, 0x26, 0x26, 0x1a, 0x05, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0xfd, // ....Z.&&....&&.. + 0x5a, 0x0a, 0x09, 0x02, 0xc6, 0x13, 0x0c, 0x1a, 0xfd, 0x3a, 0x0a, 0x09, 0x00, 0x01, 0x00, 0x7a, // Z........:.....z + 0xff, 0x80, 0x06, 0x80, 0x05, 0x80, 0x00, 0x19, 0x00, 0x00, 0x01, 0x36, 0x16, 0x15, 0x11, 0x14, // ...........6.... + 0x06, 0x27, 0x01, 0x26, 0x27, 0x11, 0x14, 0x06, 0x27, 0x01, 0x26, 0x34, 0x37, 0x01, 0x36, 0x16, // .'.&'...'.&47.6. + 0x15, 0x11, 0x36, 0x37, 0x06, 0x53, 0x13, 0x1a, 0x1a, 0x13, 0xfd, 0x3a, 0x09, 0x04, 0x1a, 0x13, // ..67.S.....:.... + 0xfd, 0x3a, 0x13, 0x13, 0x02, 0xc6, 0x13, 0x1a, 0x04, 0x09, 0x05, 0x73, 0x13, 0x0c, 0x1a, 0xfa, // .:.........s.... + 0x40, 0x1a, 0x0c, 0x13, 0x02, 0xc6, 0x09, 0x0a, 0xfd, 0x3a, 0x1a, 0x0c, 0x13, 0x02, 0xc6, 0x13, // @........:...... + 0x34, 0x13, 0x02, 0xc6, 0x13, 0x0c, 0x1a, 0xfd, 0x3a, 0x0a, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, // 4.......:....... + 0xff, 0x7c, 0x05, 0x7f, 0x05, 0x84, 0x00, 0x0b, 0x00, 0x00, 0x09, 0x01, 0x06, 0x26, 0x35, 0x11, // .|...........&5. + 0x34, 0x36, 0x17, 0x01, 0x16, 0x14, 0x05, 0x68, 0xfa, 0xd0, 0x17, 0x21, 0x21, 0x17, 0x05, 0x30, // 46.....h...!!..0 + 0x17, 0x02, 0x61, 0xfd, 0x1e, 0x0d, 0x14, 0x1a, 0x05, 0xc0, 0x1a, 0x14, 0x0d, 0xfd, 0x1e, 0x0d, // ..a............. + 0x24, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x0f, // $............... + 0x00, 0x1f, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, // ........#!"&5.46 + 0x33, 0x21, 0x32, 0x16, 0x05, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, // 3!2.....#!"&5.46 + 0x33, 0x21, 0x32, 0x16, 0x06, 0x00, 0x26, 0x1a, 0xfe, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x02, 0x00, // 3!2...&....&&... + 0x1a, 0x26, 0xfc, 0x80, 0x26, 0x1a, 0xfe, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x02, 0x00, 0x1a, 0x26, // .&..&....&&....& + 0x05, 0x40, 0xfa, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x05, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0xfa, 0x80, // .@...&&....&&... 0x1a, 0x26, 0x26, 0x1a, 0x05, 0x80, 0x1a, 0x26, 0x26, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // .&&....&&....... - 0xff, 0x80, 0x06, 0x06, 0x05, 0x80, 0x00, 0x19, 0x00, 0x00, 0x17, 0x06, 0x26, 0x35, 0x11, 0x34, // ............&5.4 - 0x36, 0x17, 0x01, 0x16, 0x17, 0x11, 0x34, 0x36, 0x17, 0x01, 0x16, 0x14, 0x07, 0x01, 0x06, 0x26, // 6.....46.......& - 0x35, 0x11, 0x06, 0x07, 0x2d, 0x13, 0x1a, 0x1a, 0x13, 0x02, 0xc6, 0x08, 0x05, 0x1a, 0x13, 0x02, // 5...-........... - 0xc6, 0x13, 0x13, 0xfd, 0x3a, 0x13, 0x1a, 0x05, 0x08, 0x73, 0x13, 0x0c, 0x1a, 0x05, 0xc0, 0x1a, // ....:....s...... - 0x0c, 0x13, 0xfd, 0x3a, 0x08, 0x0b, 0x02, 0xc6, 0x1a, 0x0c, 0x13, 0xfd, 0x3a, 0x13, 0x34, 0x13, // ...:........:.4. - 0xfd, 0x3a, 0x13, 0x0c, 0x1a, 0x02, 0xc6, 0x0a, 0x09, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // .:.............. - 0xff, 0x80, 0x07, 0x00, 0x05, 0x80, 0x00, 0x2b, 0x00, 0x00, 0x17, 0x06, 0x26, 0x35, 0x11, 0x34, // .......+....&5.4 - 0x36, 0x17, 0x01, 0x16, 0x17, 0x11, 0x34, 0x36, 0x17, 0x01, 0x16, 0x17, 0x11, 0x34, 0x36, 0x3b, // 6.....46.....46; - 0x01, 0x32, 0x16, 0x15, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, 0x06, 0x07, 0x01, // .2.....+."&5.... - 0x06, 0x26, 0x35, 0x11, 0x06, 0x07, 0x2d, 0x13, 0x1a, 0x1a, 0x13, 0x02, 0xc6, 0x08, 0x05, 0x1a, // .&5...-......... - 0x13, 0x02, 0xc6, 0x08, 0x05, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x05, // .....&...&&...&. - 0x08, 0xfd, 0x3a, 0x13, 0x1a, 0x05, 0x08, 0x73, 0x13, 0x0c, 0x1a, 0x05, 0xc0, 0x1a, 0x0c, 0x13, // ..:....s........ - 0xfd, 0x3a, 0x08, 0x0b, 0x02, 0xc6, 0x1a, 0x0c, 0x13, 0xfd, 0x3a, 0x08, 0x0b, 0x02, 0xa6, 0x1a, // .:........:..... - 0x26, 0x26, 0x1a, 0xfa, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x02, 0xa6, 0x0a, 0x09, 0xfd, 0x3a, 0x13, // &&....&&......:. - 0x0c, 0x1a, 0x02, 0xc6, 0x0a, 0x09, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0x80, 0x04, 0x00, // ................ - 0x05, 0x80, 0x00, 0x1d, 0x00, 0x00, 0x17, 0x06, 0x26, 0x35, 0x11, 0x34, 0x36, 0x17, 0x01, 0x16, // ........&5.46... - 0x17, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x15, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, // ..46;.2.....+."& - 0x35, 0x11, 0x06, 0x07, 0x2d, 0x13, 0x1a, 0x1a, 0x13, 0x02, 0xc6, 0x08, 0x05, 0x26, 0x1a, 0x80, // 5...-........&.. - 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x05, 0x08, 0x73, 0x13, 0x0c, 0x1a, 0x05, 0xc0, 0x1a, // .&&...&..s...... - 0x0c, 0x13, 0xfd, 0x3a, 0x08, 0x0b, 0x02, 0xa6, 0x1a, 0x26, 0x26, 0x1a, 0xfa, 0x80, 0x1a, 0x26, // ...:.....&&....& - 0x26, 0x1a, 0x02, 0xa6, 0x0a, 0x09, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x06, 0x01, // &............... - 0x05, 0x06, 0x00, 0x0b, 0x00, 0x1b, 0x00, 0x00, 0x13, 0x01, 0x36, 0x32, 0x17, 0x01, 0x16, 0x06, // ..........62.... - 0x23, 0x21, 0x22, 0x26, 0x01, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // #!"&.!"&5.463!2. - 0x15, 0x11, 0x14, 0x06, 0x0e, 0x02, 0xc6, 0x13, 0x34, 0x13, 0x02, 0xc6, 0x13, 0x0c, 0x1a, 0xfa, // ........4....... - 0x40, 0x1a, 0x0c, 0x05, 0xc6, 0xfa, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x05, 0x80, 0x1a, 0x26, 0x26, // @.......&&....&& - 0x02, 0x2d, 0x02, 0xc6, 0x13, 0x13, 0xfd, 0x3a, 0x13, 0x1a, 0x1a, 0xfd, 0xe6, 0x26, 0x1a, 0x01, // .-.....:.....&.. - 0x00, 0x1a, 0x26, 0x26, 0x1a, 0xff, 0x00, 0x1a, 0x26, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x35, // ..&&....&......5 - 0xff, 0xb6, 0x04, 0x0b, 0x05, 0xcb, 0x00, 0x14, 0x00, 0x00, 0x05, 0x01, 0x26, 0x34, 0x37, 0x01, // ............&47. - 0x36, 0x32, 0x1f, 0x01, 0x16, 0x14, 0x07, 0x09, 0x01, 0x16, 0x14, 0x0f, 0x01, 0x06, 0x22, 0x02, // 62............". - 0xe6, 0xfd, 0x74, 0x25, 0x25, 0x02, 0x8c, 0x25, 0x6b, 0x25, 0x4b, 0x25, 0x25, 0xfe, 0x1a, 0x01, // ..t%%..%k%K%%... - 0xe6, 0x25, 0x25, 0x4b, 0x25, 0x6b, 0x25, 0x02, 0x8b, 0x25, 0x6b, 0x25, 0x02, 0x8b, 0x25, 0x25, // .%%K%k%..%k%..%% - 0x4b, 0x25, 0x6b, 0x25, 0xfe, 0x1a, 0xfe, 0x1b, 0x26, 0x6a, 0x25, 0x4b, 0x25, 0x00, 0x00, 0x00, // K%k%....&j%K%... - 0x00, 0x01, 0x00, 0x75, 0xff, 0xb5, 0x04, 0x4b, 0x05, 0xcb, 0x00, 0x17, 0x00, 0x00, 0x01, 0x14, // ...u...K........ - 0x07, 0x01, 0x06, 0x22, 0x2f, 0x01, 0x26, 0x35, 0x34, 0x37, 0x09, 0x01, 0x26, 0x35, 0x34, 0x3f, // ..."/.&547..&54? - 0x01, 0x36, 0x32, 0x17, 0x01, 0x16, 0x04, 0x4b, 0x25, 0xfd, 0x74, 0x25, 0x6a, 0x25, 0x4c, 0x25, // .62....K%.t%j%L% - 0x25, 0x01, 0xe6, 0xfe, 0x1a, 0x25, 0x25, 0x4c, 0x24, 0x6c, 0x24, 0x02, 0x8c, 0x25, 0x02, 0xc0, // %....%%L$l$..%.. - 0x34, 0x27, 0xfd, 0x75, 0x25, 0x25, 0x4b, 0x27, 0x34, 0x35, 0x25, 0x01, 0xe6, 0x01, 0xe5, 0x27, // 4'.u%%K'45%....' - 0x34, 0x35, 0x25, 0x4b, 0x26, 0x26, 0xfd, 0x75, 0x25, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // 45%K&&.u%....... - 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x23, 0x00, 0x2f, 0x00, 0x00, 0x01, 0x35, 0x34, 0x26, // .......#./...54& - 0x23, 0x21, 0x11, 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x15, 0x11, 0x21, 0x22, 0x06, 0x1d, 0x01, // #!.4&+."...!"... - 0x14, 0x16, 0x33, 0x21, 0x11, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x35, 0x11, 0x21, 0x32, 0x36, // ..3!...;.265.!26 - 0x00, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, 0x04, 0xc0, 0x26, 0x1a, // .... $...$ ...&. - 0xff, 0x00, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0xff, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0x00, 0x26, // ..&...&...&&...& - 0x1a, 0x80, 0x1a, 0x26, 0x01, 0x00, 0x1a, 0x26, 0x01, 0x40, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, // ...&...&.@....^. - 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x02, 0x40, 0x80, 0x1a, 0x26, 0x01, 0x00, // ....a...a.@..&.. - 0x1a, 0x26, 0x26, 0x1a, 0xff, 0x00, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0xff, 0x00, 0x1a, 0x26, 0x26, // .&&...&...&...&& - 0x1a, 0x01, 0x00, 0x26, 0x01, 0x2b, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, // ...&.+.^.....a.. - 0x01, 0x61, 0xce, 0xce, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x0f, // .a.............. - 0x00, 0x1b, 0x00, 0x00, 0x01, 0x35, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, // .....54&#!"..... - 0x33, 0x21, 0x32, 0x36, 0x00, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, // 3!26.... $...$ . - 0x04, 0xc0, 0x26, 0x1a, 0xfd, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x03, 0x00, 0x1a, 0x26, 0x01, 0x40, // ..&....&&....&.@ - 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x02, // ....^.....a...a. - 0x40, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x01, 0x2b, 0xfe, 0x5e, 0xfe, 0x9f, // @..&&...&&.+.^.. - 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // ...a...a........ - 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x2b, 0x00, 0x37, 0x00, 0x00, 0x01, 0x34, 0x2f, 0x01, // .......+.7...4/. - 0x37, 0x36, 0x35, 0x34, 0x2f, 0x01, 0x26, 0x23, 0x22, 0x0f, 0x01, 0x27, 0x26, 0x23, 0x22, 0x0f, // 7654/.&#"..'&#". - 0x01, 0x06, 0x15, 0x14, 0x1f, 0x01, 0x07, 0x06, 0x15, 0x14, 0x1f, 0x01, 0x16, 0x33, 0x32, 0x3f, // .............32? - 0x01, 0x17, 0x16, 0x33, 0x32, 0x3f, 0x01, 0x36, 0x00, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, // ...32?.6.... $.. - 0x12, 0x24, 0x20, 0x04, 0x04, 0x7d, 0x13, 0xb5, 0xb5, 0x13, 0x13, 0x5a, 0x13, 0x1b, 0x1a, 0x13, // .$ ..}.....Z.... - 0xb5, 0xb5, 0x13, 0x1a, 0x1b, 0x13, 0x5a, 0x13, 0x13, 0xb5, 0xb5, 0x13, 0x13, 0x5a, 0x13, 0x1b, // ......Z......Z.. - 0x1a, 0x13, 0xb5, 0xb5, 0x13, 0x1a, 0x1b, 0x13, 0x5a, 0x13, 0x01, 0x83, 0xce, 0xfe, 0x9f, 0xfe, // ........Z....... - 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x01, 0x9e, 0x1a, 0x13, 0xb5, // ^.....a...a..... - 0xb5, 0x13, 0x1a, 0x1b, 0x13, 0x5a, 0x13, 0x13, 0xb5, 0xb5, 0x13, 0x13, 0x5a, 0x13, 0x1b, 0x1a, // .....Z......Z... - 0x13, 0xb5, 0xb5, 0x13, 0x1a, 0x1b, 0x13, 0x5a, 0x13, 0x13, 0xb5, 0xb5, 0x13, 0x13, 0x5a, 0x13, // .......Z......Z. - 0x01, 0xce, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, // ...^.....a...a.. - 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x17, 0x00, 0x23, 0x00, 0x00, // .............#.. - 0x01, 0x34, 0x2f, 0x01, 0x26, 0x22, 0x07, 0x01, 0x27, 0x26, 0x22, 0x0f, 0x01, 0x06, 0x15, 0x14, // .4/.&"..'&"..... - 0x17, 0x01, 0x16, 0x33, 0x32, 0x37, 0x01, 0x3e, 0x01, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, // ...327.>.... $.. - 0x12, 0x24, 0x20, 0x04, 0x05, 0x04, 0x12, 0x5b, 0x13, 0x34, 0x13, 0xfe, 0x68, 0xe2, 0x13, 0x34, // .$ ....[.4..h..4 - 0x13, 0x5b, 0x12, 0x12, 0x01, 0x6a, 0x13, 0x1a, 0x1b, 0x13, 0x02, 0x1f, 0x12, 0xfc, 0xce, 0xfe, // .[...j.......... - 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x03, 0x22, 0x1c, // ..^.....a...a.". - 0x12, 0x5a, 0x13, 0x13, 0xfe, 0x69, 0xe2, 0x13, 0x13, 0x5a, 0x12, 0x1c, 0x1b, 0x12, 0xfe, 0x96, // .Z...i...Z...... - 0x13, 0x13, 0x02, 0x1f, 0x12, 0x4a, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, // .....J.^.....a.. - 0x01, 0x61, 0xce, 0xce, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x0f, // .a.............. - 0x00, 0x3a, 0x00, 0x46, 0x00, 0x00, 0x25, 0x35, 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, // .:.F..%54&+."... - 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x01, 0x34, 0x2e, 0x01, 0x23, 0x22, 0x07, 0x06, 0x1f, 0x01, // ..;.26.4..#".... - 0x16, 0x33, 0x32, 0x37, 0x36, 0x37, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x07, 0x0e, 0x01, // .32767632....... - 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x35, 0x34, 0x36, 0x37, 0x3e, 0x04, 0x24, 0x10, // ....;.265467>.$. - 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, 0x03, 0x80, 0x12, 0x0e, 0xc0, 0x0e, // .. $...$ ....... - 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x01, 0x00, 0x6f, 0xa6, 0x57, 0xf3, 0x80, 0x0f, 0x17, 0x84, // ........o.W..... - 0x07, 0x0c, 0x10, 0x09, 0x35, 0x21, 0x22, 0x34, 0x30, 0x4b, 0x28, 0x30, 0x3f, 0x69, 0x12, 0x0e, // ....5!"40K(0?i.. - 0xc0, 0x0e, 0x12, 0x2b, 0x21, 0x20, 0x22, 0x3a, 0x1f, 0x19, 0x01, 0x80, 0xce, 0xfe, 0x9f, 0xfe, // ...+! ":........ - 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xa0, 0xc0, 0x0e, 0x12, 0x12, // ^.....a...a..... - 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x02, 0xae, 0x58, 0x96, 0x52, 0xd5, 0x18, 0x12, 0x64, 0x06, 0x0c, // .......X.R...d.. - 0x44, 0x18, 0x18, 0x34, 0x21, 0x26, 0x2e, 0x16, 0x1c, 0x75, 0x43, 0x24, 0x0e, 0x12, 0x12, 0x0e, // D..4!&...uC$.... - 0x13, 0x3d, 0x13, 0x12, 0x15, 0x31, 0x2f, 0x4a, 0x3d, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, // .=...1/J=.^..... - 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // a...a........... - 0x05, 0x80, 0x00, 0x1e, 0x00, 0x2e, 0x00, 0x3a, 0x00, 0x00, 0x25, 0x35, 0x34, 0x26, 0x2b, 0x01, // .......:..%54&+. - 0x11, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x11, 0x23, 0x22, // .4&#!".....;..#" - 0x06, 0x1d, 0x01, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x03, 0x35, 0x34, 0x26, 0x2b, 0x01, 0x22, // .....3!26.54&+." - 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x04, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, // .....;.26.... $. - 0x10, 0x12, 0x24, 0x20, 0x04, 0x04, 0x00, 0x12, 0x0e, 0x60, 0x12, 0x0e, 0xfe, 0xc0, 0x0e, 0x12, // ..$ .....`...... - 0x12, 0x0e, 0x60, 0x60, 0x0e, 0x12, 0x12, 0x0e, 0x01, 0xc0, 0x0e, 0x12, 0x80, 0x12, 0x0e, 0xc0, // ..``............ - 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x02, 0x80, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, // .............^.. - 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xa0, 0xa0, 0x0e, 0x12, 0x02, 0x00, 0x0e, 0x12, // ...a...a........ - 0x12, 0x0e, 0xa0, 0x0e, 0x12, 0xfe, 0xc0, 0x12, 0x0e, 0xa0, 0x0e, 0x12, 0x12, 0x03, 0x8e, 0xa0, // ................ - 0x0e, 0x12, 0x12, 0x0e, 0xa0, 0x0e, 0x12, 0x12, 0xc1, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, // ..........^..... - 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // a...a........... - 0x05, 0x80, 0x00, 0x2f, 0x00, 0x5f, 0x00, 0x00, 0x01, 0x23, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, // .../._...#"&=.46 - 0x3b, 0x01, 0x2e, 0x01, 0x27, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x0e, 0x01, // ;...'...+."&=... - 0x07, 0x33, 0x32, 0x16, 0x1d, 0x01, 0x14, 0x06, 0x2b, 0x01, 0x1e, 0x01, 0x17, 0x35, 0x34, 0x36, // .32.....+....546 - 0x3b, 0x01, 0x32, 0x16, 0x1d, 0x01, 0x3e, 0x01, 0x01, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x0e, 0x01, // ;.2...>.....+... - 0x07, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x2e, 0x01, 0x27, 0x23, 0x22, 0x26, // ....+."&=...'#"& - 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x3e, 0x01, 0x37, 0x35, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, // =.46;.>.7546;.2. - 0x1d, 0x01, 0x1e, 0x01, 0x17, 0x33, 0x32, 0x16, 0x04, 0xad, 0x6d, 0x1a, 0x26, 0x26, 0x1a, 0x6d, // .....32...m.&&.m - 0x20, 0xa1, 0x6c, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x6c, 0xa1, 0x20, 0x6d, 0x1a, 0x26, 0x26, 0x1a, // .l&...&l. m.&&. - 0x6d, 0x20, 0xa1, 0x6c, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x6c, 0xa1, 0x01, 0x73, 0x26, 0x1a, 0x8f, // m .l&...&l..s&.. - 0x25, 0xeb, 0xa1, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0xa1, 0xeb, 0x25, 0x8f, 0x1a, 0x26, 0x26, 0x1a, // %..&...&..%..&&. - 0x8f, 0x25, 0xeb, 0xa1, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0xa1, 0xeb, 0x25, 0x8f, 0x1a, 0x26, 0x02, // .%..&...&..%..&. - 0x00, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x6c, 0xa1, 0x20, 0x6d, 0x1a, 0x26, 0x26, 0x1a, 0x6d, 0x20, // .&...&l. m.&&.m - 0xa1, 0x6c, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x6c, 0xa1, 0x20, 0x6d, 0x1a, 0x26, 0x26, 0x1a, 0x6d, // .l&...&l. m.&&.m - 0x20, 0xa1, 0x01, 0x2c, 0x80, 0x1a, 0x26, 0xa1, 0xeb, 0x25, 0x8f, 0x1a, 0x26, 0x26, 0x1a, 0x8f, // ..,..&..%..&&.. - 0x25, 0xeb, 0xa1, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0xa1, 0xeb, 0x25, 0x8f, 0x1a, 0x26, 0x26, 0x1a, // %..&...&..%..&&. - 0x8f, 0x25, 0xeb, 0xa1, 0x26, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // .%..&........... - 0x05, 0x80, 0x00, 0x23, 0x00, 0x2f, 0x00, 0x3b, 0x00, 0x00, 0x01, 0x07, 0x06, 0x22, 0x2f, 0x01, // ...#./.;....."/. - 0x07, 0x06, 0x22, 0x2f, 0x01, 0x26, 0x34, 0x3f, 0x01, 0x27, 0x26, 0x34, 0x3f, 0x01, 0x36, 0x32, // .."/.&4?.'&4?.62 - 0x1f, 0x01, 0x37, 0x36, 0x32, 0x1f, 0x01, 0x16, 0x14, 0x0f, 0x01, 0x17, 0x16, 0x14, 0x36, 0x10, // ..762.........6. - 0x2e, 0x01, 0x20, 0x0e, 0x01, 0x10, 0x1e, 0x01, 0x20, 0x36, 0x00, 0x10, 0x02, 0x04, 0x20, 0x24, // .. ..... 6.... $ - 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, 0x04, 0x49, 0x92, 0x0a, 0x1a, 0x0a, 0x89, 0x89, 0x0a, 0x1a, // ...$ ..I........ - 0x0a, 0x92, 0x0a, 0x0a, 0x89, 0x89, 0x0a, 0x0a, 0x92, 0x0a, 0x1a, 0x0a, 0x89, 0x89, 0x0a, 0x1a, // ................ - 0x0a, 0x92, 0x0a, 0x0a, 0x89, 0x89, 0x0a, 0xcd, 0x92, 0xfa, 0xfe, 0xd8, 0xfa, 0x92, 0x92, 0xfa, // ................ - 0x01, 0x28, 0xfa, 0x01, 0x72, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, // .(..r....^.....a - 0x01, 0xa2, 0x01, 0x61, 0x01, 0xc9, 0x92, 0x0a, 0x0a, 0x89, 0x89, 0x0a, 0x0a, 0x92, 0x0a, 0x1a, // ...a............ - 0x0a, 0x89, 0x89, 0x0a, 0x1a, 0x0a, 0x92, 0x0a, 0x0a, 0x89, 0x89, 0x0a, 0x0a, 0x92, 0x0a, 0x1a, // ................ - 0x0a, 0x89, 0x89, 0x0a, 0x1a, 0x19, 0x01, 0x28, 0xfa, 0x92, 0x92, 0xfa, 0xfe, 0xd8, 0xfa, 0x92, // .......(........ - 0x92, 0x02, 0x5f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, // .._.^.....a...a. - 0xce, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x14, // ................ - 0x00, 0x20, 0x00, 0x2c, 0x00, 0x00, 0x09, 0x01, 0x06, 0x22, 0x27, 0x01, 0x26, 0x34, 0x3f, 0x01, // . .,....."'.&4?. - 0x36, 0x32, 0x1f, 0x01, 0x01, 0x36, 0x32, 0x1f, 0x01, 0x16, 0x14, 0x16, 0x10, 0x2e, 0x01, 0x20, // 62...62........ - 0x0e, 0x01, 0x10, 0x1e, 0x01, 0x20, 0x36, 0x00, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, // ..... 6.... $... - 0x24, 0x20, 0x04, 0x04, 0x93, 0xfe, 0x5a, 0x13, 0x34, 0x13, 0xfe, 0xda, 0x13, 0x13, 0x66, 0x13, // $ ....Z.4.....f. - 0x34, 0x13, 0x93, 0x01, 0x13, 0x13, 0x34, 0x13, 0x66, 0x13, 0x7a, 0x92, 0xfa, 0xfe, 0xd8, 0xfa, // 4.....4.f.z..... - 0x92, 0x92, 0xfa, 0x01, 0x28, 0xfa, 0x01, 0x72, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, // ....(..r....^... - 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x02, 0xd3, 0xfe, 0x5a, 0x13, 0x13, 0x01, 0x26, 0x13, // ..a...a...Z...&. - 0x34, 0x13, 0x66, 0x13, 0x13, 0x93, 0x01, 0x13, 0x13, 0x13, 0x66, 0x13, 0x34, 0xfa, 0x01, 0x28, // 4.f.......f.4..( - 0xfa, 0x92, 0x92, 0xfa, 0xfe, 0xd8, 0xfa, 0x92, 0x92, 0x02, 0x5f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, // .........._.^... - 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // ..a...a......... - 0xff, 0x80, 0x06, 0x00, 0x05, 0x85, 0x00, 0x09, 0x00, 0x12, 0x00, 0x22, 0x00, 0x00, 0x01, 0x34, // ..........."...4 - 0x27, 0x01, 0x16, 0x33, 0x32, 0x3e, 0x02, 0x05, 0x01, 0x26, 0x23, 0x22, 0x0e, 0x01, 0x15, 0x14, // '..32>...&#".... - 0x00, 0x10, 0x02, 0x06, 0x04, 0x20, 0x24, 0x26, 0x02, 0x10, 0x12, 0x36, 0x24, 0x20, 0x04, 0x16, // ..... $&...6$ .. - 0x05, 0x20, 0x57, 0xfd, 0x0e, 0x89, 0xa0, 0x6f, 0xc9, 0x92, 0x56, 0xfc, 0x19, 0x02, 0xf3, 0x87, // . W....o..V..... - 0xa5, 0x94, 0xfa, 0x92, 0x05, 0x20, 0x7a, 0xcd, 0xfe, 0xe3, 0xfe, 0xc8, 0xfe, 0xe3, 0xcd, 0x7a, // ..... z........z - 0x7a, 0xcd, 0x01, 0x1d, 0x01, 0x38, 0x01, 0x1d, 0xcd, 0x02, 0x83, 0xa1, 0x86, 0xfd, 0x0f, 0x59, // z....8.........Y - 0x57, 0x92, 0xcb, 0xbc, 0x02, 0xf2, 0x5b, 0x92, 0xfc, 0x94, 0xa2, 0x01, 0x3f, 0xfe, 0xc6, 0xfe, // W.....[.....?... - 0xe2, 0xce, 0x7a, 0x7a, 0xce, 0x01, 0x1e, 0x01, 0x3a, 0x01, 0x1d, 0xce, 0x7a, 0x7a, 0xce, 0x00, // ..zz....:...zz.. - 0x00, 0x01, 0x00, 0x40, 0xff, 0x35, 0x06, 0x00, 0x05, 0x4b, 0x00, 0x20, 0x00, 0x00, 0x01, 0x15, // ...@.5...K. .... - 0x14, 0x06, 0x23, 0x21, 0x01, 0x16, 0x14, 0x0f, 0x01, 0x06, 0x23, 0x22, 0x27, 0x01, 0x26, 0x35, // ..#!......#"'.&5 - 0x34, 0x37, 0x01, 0x36, 0x33, 0x32, 0x1f, 0x01, 0x16, 0x14, 0x07, 0x01, 0x21, 0x32, 0x16, 0x06, // 47.632......!2.. - 0x00, 0x41, 0x34, 0xfd, 0x40, 0x01, 0x25, 0x26, 0x26, 0x4b, 0x25, 0x35, 0x34, 0x27, 0xfd, 0x75, // .A4.@.%&&K%54'.u - 0x25, 0x25, 0x02, 0x8b, 0x26, 0x35, 0x34, 0x26, 0x4b, 0x26, 0x26, 0xfe, 0xdb, 0x02, 0xc0, 0x34, // %%..&54&K&&....4 - 0x41, 0x02, 0x80, 0x80, 0x35, 0x4b, 0xfe, 0xda, 0x24, 0x6c, 0x24, 0x4c, 0x25, 0x25, 0x02, 0x8c, // A...5K..$l$L%%.. - 0x25, 0x35, 0x34, 0x27, 0x02, 0x8a, 0x26, 0x26, 0x4a, 0x26, 0x6a, 0x26, 0xfe, 0xdb, 0x4b, 0x00, // %54'..&&J&j&..K. - 0x00, 0x01, 0x00, 0x00, 0xff, 0x35, 0x05, 0xc0, 0x05, 0x4b, 0x00, 0x20, 0x00, 0x00, 0x01, 0x14, // .....5...K. .... - 0x07, 0x01, 0x06, 0x23, 0x22, 0x2f, 0x01, 0x26, 0x34, 0x37, 0x01, 0x21, 0x22, 0x26, 0x3d, 0x01, // ...#"/.&47.!"&=. - 0x34, 0x36, 0x33, 0x21, 0x01, 0x26, 0x34, 0x3f, 0x01, 0x36, 0x33, 0x32, 0x17, 0x01, 0x16, 0x05, // 463!.&4?.632.... - 0xc0, 0x25, 0xfd, 0x75, 0x27, 0x34, 0x33, 0x27, 0x4b, 0x26, 0x26, 0x01, 0x25, 0xfd, 0x40, 0x34, // .%.u'43'K&&.%.@4 + 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x0f, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, // ..............#! + 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x06, 0x00, 0x26, 0x1a, 0xfa, 0x80, // "&5.463!2...&... + 0x1a, 0x26, 0x26, 0x1a, 0x05, 0x80, 0x1a, 0x26, 0x05, 0x40, 0xfa, 0x80, 0x1a, 0x26, 0x26, 0x1a, // .&&....&.@...&&. + 0x05, 0x80, 0x1a, 0x26, 0x26, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0x80, 0x06, 0x06, // ...&&........... + 0x05, 0x80, 0x00, 0x19, 0x00, 0x00, 0x17, 0x06, 0x26, 0x35, 0x11, 0x34, 0x36, 0x17, 0x01, 0x16, // ........&5.46... + 0x17, 0x11, 0x34, 0x36, 0x17, 0x01, 0x16, 0x14, 0x07, 0x01, 0x06, 0x26, 0x35, 0x11, 0x06, 0x07, // ..46.......&5... + 0x2d, 0x13, 0x1a, 0x1a, 0x13, 0x02, 0xc6, 0x09, 0x04, 0x1a, 0x13, 0x02, 0xc6, 0x13, 0x13, 0xfd, // -............... + 0x3a, 0x13, 0x1a, 0x04, 0x09, 0x73, 0x13, 0x0c, 0x1a, 0x05, 0xc0, 0x1a, 0x0c, 0x13, 0xfd, 0x3a, // :....s.........: + 0x09, 0x0a, 0x02, 0xc6, 0x1a, 0x0c, 0x13, 0xfd, 0x3a, 0x13, 0x34, 0x13, 0xfd, 0x3a, 0x13, 0x0c, // ........:.4..:.. + 0x1a, 0x02, 0xc6, 0x0a, 0x09, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0x80, 0x07, 0x00, // ................ + 0x05, 0x80, 0x00, 0x2b, 0x00, 0x00, 0x17, 0x06, 0x26, 0x35, 0x11, 0x34, 0x36, 0x17, 0x01, 0x16, // ...+....&5.46... + 0x17, 0x11, 0x34, 0x36, 0x17, 0x01, 0x16, 0x17, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x15, // ..46.....46;.2.. + 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, 0x06, 0x07, 0x01, 0x06, 0x26, 0x35, 0x11, // ...+."&5.....&5. + 0x06, 0x07, 0x2d, 0x13, 0x1a, 0x1a, 0x13, 0x02, 0xc6, 0x09, 0x04, 0x1a, 0x13, 0x02, 0xc6, 0x09, // ..-............. + 0x04, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x04, 0x09, 0xfd, 0x3a, 0x13, // .&...&&...&...:. + 0x1a, 0x04, 0x09, 0x73, 0x13, 0x0c, 0x1a, 0x05, 0xc0, 0x1a, 0x0c, 0x13, 0xfd, 0x3a, 0x09, 0x0a, // ...s.........:.. + 0x02, 0xc6, 0x1a, 0x0c, 0x13, 0xfd, 0x3a, 0x09, 0x0a, 0x02, 0xa6, 0x1a, 0x26, 0x26, 0x1a, 0xfa, // ......:.....&&.. + 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x02, 0xa6, 0x0a, 0x09, 0xfd, 0x3a, 0x13, 0x0c, 0x1a, 0x02, 0xc6, // ..&&......:..... + 0x0a, 0x09, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0x80, 0x04, 0x00, 0x05, 0x80, 0x00, 0x1d, // ................ + 0x00, 0x00, 0x17, 0x06, 0x26, 0x35, 0x11, 0x34, 0x36, 0x17, 0x01, 0x16, 0x17, 0x11, 0x34, 0x36, // ....&5.46.....46 + 0x3b, 0x01, 0x32, 0x16, 0x15, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, 0x06, 0x07, // ;.2.....+."&5... + 0x2d, 0x13, 0x1a, 0x1a, 0x13, 0x02, 0xc6, 0x09, 0x04, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x1a, // -........&...&&. + 0x80, 0x1a, 0x26, 0x04, 0x09, 0x73, 0x13, 0x0c, 0x1a, 0x05, 0xc0, 0x1a, 0x0c, 0x13, 0xfd, 0x3a, // ..&..s.........: + 0x09, 0x0a, 0x02, 0xa6, 0x1a, 0x26, 0x26, 0x1a, 0xfa, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x02, 0xa6, // .....&&....&&... + 0x0a, 0x09, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x06, 0x01, 0x05, 0x06, 0x00, 0x0b, // ................ + 0x00, 0x1b, 0x00, 0x00, 0x13, 0x01, 0x36, 0x32, 0x17, 0x01, 0x16, 0x06, 0x23, 0x21, 0x22, 0x26, // ......62....#!"& + 0x01, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x15, 0x11, 0x14, 0x06, // .!"&5.463!2..... + 0x0e, 0x02, 0xc6, 0x13, 0x34, 0x13, 0x02, 0xc6, 0x13, 0x0c, 0x1a, 0xfa, 0x40, 0x1a, 0x0c, 0x05, // ....4.......@... + 0xc6, 0xfa, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x05, 0x80, 0x1a, 0x26, 0x26, 0x02, 0x2d, 0x02, 0xc6, // ....&&....&&.-.. + 0x13, 0x13, 0xfd, 0x3a, 0x13, 0x1a, 0x1a, 0xfd, 0xe6, 0x26, 0x1a, 0x01, 0x00, 0x1a, 0x26, 0x26, // ...:.....&....&& + 0x1a, 0xff, 0x00, 0x1a, 0x26, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x9a, 0xff, 0x9a, 0x04, 0xa6, // ....&........... + 0x05, 0xe6, 0x00, 0x14, 0x00, 0x00, 0x09, 0x02, 0x16, 0x14, 0x0f, 0x01, 0x06, 0x22, 0x27, 0x01, // ............."'. + 0x26, 0x34, 0x37, 0x01, 0x36, 0x32, 0x1f, 0x01, 0x16, 0x14, 0x04, 0x93, 0xfd, 0xed, 0x02, 0x13, // &47.62.......... + 0x13, 0x13, 0xa6, 0x13, 0x34, 0x13, 0xfd, 0x1a, 0x13, 0x13, 0x02, 0xe6, 0x13, 0x34, 0x13, 0xa6, // ....4........4.. + 0x13, 0x04, 0xd3, 0xfd, 0xed, 0xfd, 0xed, 0x13, 0x34, 0x13, 0xa6, 0x13, 0x13, 0x02, 0xe6, 0x13, // ........4....... + 0x34, 0x13, 0x02, 0xe6, 0x13, 0x13, 0xa6, 0x13, 0x34, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x5a, // 4.......4......Z + 0xff, 0x9a, 0x04, 0x66, 0x05, 0xe6, 0x00, 0x14, 0x00, 0x00, 0x09, 0x01, 0x06, 0x22, 0x2f, 0x01, // ...f........."/. + 0x26, 0x34, 0x37, 0x09, 0x01, 0x26, 0x34, 0x3f, 0x01, 0x36, 0x32, 0x17, 0x01, 0x16, 0x14, 0x04, // &47..&4?.62..... + 0x53, 0xfd, 0x1a, 0x13, 0x34, 0x13, 0xa6, 0x13, 0x13, 0x02, 0x13, 0xfd, 0xed, 0x13, 0x13, 0xa6, // S...4........... + 0x13, 0x34, 0x13, 0x02, 0xe6, 0x13, 0x02, 0x93, 0xfd, 0x1a, 0x13, 0x13, 0xa6, 0x13, 0x34, 0x13, // .4............4. + 0x02, 0x13, 0x02, 0x13, 0x13, 0x34, 0x13, 0xa6, 0x13, 0x13, 0xfd, 0x1a, 0x13, 0x34, 0x00, 0x00, // .....4.......4.. + 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x23, 0x00, 0x2f, 0x00, 0x00, // ...........#./.. + 0x01, 0x35, 0x34, 0x26, 0x23, 0x21, 0x11, 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x15, 0x11, 0x21, // .54&#!.4&+."...! + 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x33, 0x21, 0x11, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x35, // ".....3!...;.265 + 0x11, 0x21, 0x32, 0x36, 0x00, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, // .!26.... $...$ . + 0x04, 0xc0, 0x26, 0x1a, 0xff, 0x00, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0xff, 0x00, 0x1a, 0x26, 0x26, // ..&...&...&...&& + 0x1a, 0x01, 0x00, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x01, 0x00, 0x1a, 0x26, 0x01, 0x40, 0xce, 0xfe, // ...&...&...&.@.. + 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x02, 0x40, 0x80, // ..^.....a...a.@. + 0x1a, 0x26, 0x01, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0xff, 0x00, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0xff, // .&...&&...&...&. + 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0x00, 0x26, 0x01, 0x2b, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, // ..&&...&.+.^.... + 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // .a...a.......... + 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1b, 0x00, 0x00, 0x01, 0x35, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, // .........54&#!". + 0x1d, 0x01, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x00, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, // ....3!26.... $.. + 0x12, 0x24, 0x20, 0x04, 0x04, 0xc0, 0x26, 0x1a, 0xfd, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x03, 0x00, // .$ ...&....&&... + 0x1a, 0x26, 0x01, 0x40, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, // .&.@....^.....a. + 0xa2, 0x01, 0x61, 0x02, 0x40, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x01, 0x2b, // ..a.@..&&...&&.+ + 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x00, // .^.....a...a.... + 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x2b, 0x00, 0x37, 0x00, 0x00, // ...........+.7.. + 0x01, 0x34, 0x2f, 0x01, 0x37, 0x36, 0x35, 0x34, 0x2f, 0x01, 0x26, 0x23, 0x22, 0x0f, 0x01, 0x27, // .4/.7654/.&#"..' + 0x26, 0x23, 0x22, 0x0f, 0x01, 0x06, 0x15, 0x14, 0x1f, 0x01, 0x07, 0x06, 0x15, 0x14, 0x1f, 0x01, // &#"............. + 0x16, 0x33, 0x32, 0x3f, 0x01, 0x17, 0x16, 0x33, 0x32, 0x3f, 0x01, 0x36, 0x00, 0x10, 0x02, 0x04, // .32?...32?.6.... + 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, 0x04, 0x7d, 0x13, 0xb5, 0xb5, 0x13, 0x13, 0x5a, // $...$ ..}.....Z + 0x13, 0x1b, 0x1a, 0x13, 0xb5, 0xb5, 0x13, 0x1a, 0x1b, 0x13, 0x5a, 0x13, 0x13, 0xb5, 0xb5, 0x13, // ..........Z..... + 0x13, 0x5a, 0x13, 0x1b, 0x1a, 0x13, 0xb5, 0xb5, 0x13, 0x1a, 0x1b, 0x13, 0x5a, 0x13, 0x01, 0x83, // .Z..........Z... + 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x01, // ....^.....a...a. + 0x9e, 0x1a, 0x13, 0xb5, 0xb5, 0x13, 0x1a, 0x1b, 0x13, 0x5a, 0x13, 0x13, 0xb5, 0xb5, 0x13, 0x13, // .........Z...... + 0x5a, 0x13, 0x1b, 0x1a, 0x13, 0xb5, 0xb5, 0x13, 0x1a, 0x1b, 0x13, 0x5a, 0x13, 0x13, 0xb5, 0xb5, // Z..........Z.... + 0x13, 0x13, 0x5a, 0x13, 0x01, 0xce, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, // ..Z....^.....a.. + 0x01, 0x61, 0xce, 0xce, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x17, // .a.............. + 0x00, 0x23, 0x00, 0x00, 0x01, 0x34, 0x2f, 0x01, 0x26, 0x22, 0x07, 0x01, 0x27, 0x26, 0x22, 0x0f, // .#...4/.&"..'&". + 0x01, 0x06, 0x15, 0x14, 0x17, 0x01, 0x16, 0x33, 0x32, 0x37, 0x01, 0x3e, 0x01, 0x10, 0x02, 0x04, // .......327.>.... + 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, 0x05, 0x04, 0x12, 0x5b, 0x13, 0x34, 0x13, 0xfe, // $...$ ....[.4.. + 0x68, 0xe2, 0x13, 0x34, 0x13, 0x5b, 0x12, 0x12, 0x01, 0x6a, 0x13, 0x1a, 0x1b, 0x13, 0x02, 0x1f, // h..4.[...j...... + 0x12, 0xfc, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, // ......^.....a... + 0x61, 0x03, 0x22, 0x1c, 0x12, 0x5a, 0x13, 0x13, 0xfe, 0x69, 0xe2, 0x13, 0x13, 0x5a, 0x12, 0x1c, // a."..Z...i...Z.. + 0x1b, 0x12, 0xfe, 0x96, 0x13, 0x13, 0x02, 0x1f, 0x12, 0x4a, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, // .........J.^.... + 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // .a...a.......... + 0x05, 0x80, 0x00, 0x0f, 0x00, 0x3a, 0x00, 0x46, 0x00, 0x00, 0x25, 0x35, 0x34, 0x26, 0x2b, 0x01, // .....:.F..%54&+. + 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x01, 0x34, 0x2e, 0x01, 0x23, 0x22, // ".....;.26.4..#" + 0x07, 0x06, 0x1f, 0x01, 0x16, 0x33, 0x32, 0x37, 0x36, 0x37, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, // .....32767632... + 0x06, 0x07, 0x0e, 0x01, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x35, 0x34, 0x36, 0x37, // ........;.265467 + 0x3e, 0x04, 0x24, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, 0x03, 0x80, // >.$... $...$ ... + 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x01, 0x00, 0x6f, 0xa6, 0x57, 0xf3, // ............o.W. + 0x80, 0x0f, 0x17, 0x84, 0x07, 0x0c, 0x10, 0x09, 0x35, 0x21, 0x22, 0x34, 0x30, 0x4b, 0x28, 0x30, // ........5!"40K(0 + 0x3f, 0x69, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x2b, 0x21, 0x20, 0x22, 0x3a, 0x1f, 0x19, 0x01, 0x80, // ?i.....+! ":.... + 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xa0, // ....^.....a...a. + 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x02, 0xae, 0x58, 0x96, 0x52, 0xd5, 0x18, // ...........X.R.. + 0x12, 0x64, 0x06, 0x0c, 0x44, 0x18, 0x18, 0x34, 0x21, 0x26, 0x2e, 0x16, 0x1c, 0x75, 0x43, 0x24, // .d..D..4!&...uC$ + 0x0e, 0x12, 0x12, 0x0e, 0x13, 0x3d, 0x13, 0x12, 0x15, 0x31, 0x2f, 0x4a, 0x3d, 0xfe, 0x5e, 0xfe, // .....=...1/J=.^. + 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x00, 0x03, 0x00, 0x00, // ....a...a....... + 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x1e, 0x00, 0x2e, 0x00, 0x3a, 0x00, 0x00, 0x25, 0x35, // ...........:..%5 + 0x34, 0x26, 0x2b, 0x01, 0x11, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, // 4&+..4&#!".....; + 0x01, 0x11, 0x23, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x03, 0x35, 0x34, // ..#".....3!26.54 + 0x26, 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x04, 0x10, 0x02, // &+.".....;.26... + 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, 0x04, 0x00, 0x12, 0x0e, 0x60, 0x12, 0x0e, // . $...$ .....`.. + 0xfe, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0x60, 0x60, 0x0e, 0x12, 0x12, 0x0e, 0x01, 0xc0, 0x0e, 0x12, // ......``........ + 0x80, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x02, 0x80, 0xce, 0xfe, 0x9f, // ................ + 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xa0, 0xa0, 0x0e, 0x12, // .^.....a...a.... + 0x02, 0x00, 0x0e, 0x12, 0x12, 0x0e, 0xa0, 0x0e, 0x12, 0xfe, 0xc0, 0x12, 0x0e, 0xa0, 0x0e, 0x12, // ................ + 0x12, 0x03, 0x8e, 0xa0, 0x0e, 0x12, 0x12, 0x0e, 0xa0, 0x0e, 0x12, 0x12, 0xc1, 0xfe, 0x5e, 0xfe, // ..............^. + 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x00, 0x02, 0x00, 0x00, // ....a...a....... + 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x2f, 0x00, 0x5f, 0x00, 0x00, 0x01, 0x23, 0x22, 0x26, // ......./._...#"& + 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x2e, 0x01, 0x27, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, // =.46;...'...+."& + 0x3d, 0x01, 0x0e, 0x01, 0x07, 0x33, 0x32, 0x16, 0x1d, 0x01, 0x14, 0x06, 0x2b, 0x01, 0x1e, 0x01, // =....32.....+... + 0x17, 0x35, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x1d, 0x01, 0x3e, 0x01, 0x01, 0x15, 0x14, 0x06, // .546;.2...>..... + 0x2b, 0x01, 0x0e, 0x01, 0x07, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x2e, 0x01, // +.......+."&=... + 0x27, 0x23, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x3e, 0x01, 0x37, 0x35, 0x34, 0x36, // '#"&=.46;.>.7546 + 0x3b, 0x01, 0x32, 0x16, 0x1d, 0x01, 0x1e, 0x01, 0x17, 0x33, 0x32, 0x16, 0x04, 0xad, 0x6d, 0x1a, // ;.2......32...m. + 0x26, 0x26, 0x1a, 0x6d, 0x20, 0xa1, 0x6c, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x6c, 0xa1, 0x20, 0x6d, // &&.m .l&...&l. m + 0x1a, 0x26, 0x26, 0x1a, 0x6d, 0x20, 0xa1, 0x6c, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x6c, 0xa1, 0x01, // .&&.m .l&...&l.. + 0x73, 0x26, 0x1a, 0x8f, 0x25, 0xeb, 0xa1, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0xa1, 0xeb, 0x25, 0x8f, // s&..%..&...&..%. + 0x1a, 0x26, 0x26, 0x1a, 0x8f, 0x25, 0xeb, 0xa1, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0xa1, 0xeb, 0x25, // .&&..%..&...&..% + 0x8f, 0x1a, 0x26, 0x02, 0x00, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x6c, 0xa1, 0x20, 0x6d, 0x1a, 0x26, // ..&..&...&l. m.& + 0x26, 0x1a, 0x6d, 0x20, 0xa1, 0x6c, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x6c, 0xa1, 0x20, 0x6d, 0x1a, // &.m .l&...&l. m. + 0x26, 0x26, 0x1a, 0x6d, 0x20, 0xa1, 0x01, 0x2c, 0x80, 0x1a, 0x26, 0xa1, 0xeb, 0x25, 0x8f, 0x1a, // &&.m ..,..&..%.. + 0x26, 0x26, 0x1a, 0x8f, 0x25, 0xeb, 0xa1, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0xa1, 0xeb, 0x25, 0x8f, // &&..%..&...&..%. + 0x1a, 0x26, 0x26, 0x1a, 0x8f, 0x25, 0xeb, 0xa1, 0x26, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // .&&..%..&....... + 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x23, 0x00, 0x2f, 0x00, 0x3b, 0x00, 0x00, 0x01, 0x07, // .......#./.;.... + 0x06, 0x22, 0x2f, 0x01, 0x07, 0x06, 0x22, 0x2f, 0x01, 0x26, 0x34, 0x3f, 0x01, 0x27, 0x26, 0x34, // ."/..."/.&4?.'&4 + 0x3f, 0x01, 0x36, 0x32, 0x1f, 0x01, 0x37, 0x36, 0x32, 0x1f, 0x01, 0x16, 0x14, 0x0f, 0x01, 0x17, // ?.62..762....... + 0x16, 0x14, 0x36, 0x10, 0x2e, 0x01, 0x20, 0x0e, 0x01, 0x10, 0x1e, 0x01, 0x20, 0x36, 0x00, 0x10, // ..6... ..... 6.. + 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, 0x04, 0x49, 0x92, 0x0a, 0x1a, 0x0a, // .. $...$ ..I.... + 0x89, 0x89, 0x0a, 0x1a, 0x0a, 0x92, 0x0a, 0x0a, 0x89, 0x89, 0x0a, 0x0a, 0x92, 0x0a, 0x1a, 0x0a, // ................ + 0x89, 0x89, 0x0a, 0x1a, 0x0a, 0x92, 0x0a, 0x0a, 0x89, 0x89, 0x0a, 0xcd, 0x92, 0xfa, 0xfe, 0xd8, // ................ + 0xfa, 0x92, 0x92, 0xfa, 0x01, 0x28, 0xfa, 0x01, 0x72, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, // .....(..r....^.. + 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x01, 0xc9, 0x92, 0x0a, 0x0a, 0x89, 0x89, 0x0a, // ...a...a........ + 0x0a, 0x92, 0x0a, 0x1a, 0x0a, 0x89, 0x89, 0x0a, 0x1a, 0x0a, 0x92, 0x0a, 0x0a, 0x89, 0x89, 0x0a, // ................ + 0x0a, 0x92, 0x0a, 0x1a, 0x0a, 0x89, 0x89, 0x0a, 0x1a, 0x19, 0x01, 0x28, 0xfa, 0x92, 0x92, 0xfa, // ...........(.... + 0xfe, 0xd8, 0xfa, 0x92, 0x92, 0x02, 0x5f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, // ......_.^.....a. + 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // ..a............. + 0x05, 0x80, 0x00, 0x14, 0x00, 0x20, 0x00, 0x2c, 0x00, 0x00, 0x09, 0x01, 0x06, 0x22, 0x27, 0x01, // ..... .,....."'. + 0x26, 0x34, 0x3f, 0x01, 0x36, 0x32, 0x1f, 0x01, 0x01, 0x36, 0x32, 0x1f, 0x01, 0x16, 0x14, 0x16, // &4?.62...62..... + 0x10, 0x2e, 0x01, 0x20, 0x0e, 0x01, 0x10, 0x1e, 0x01, 0x20, 0x36, 0x00, 0x10, 0x02, 0x04, 0x20, // ... ..... 6.... + 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, 0x04, 0x93, 0xfe, 0x5a, 0x13, 0x34, 0x13, 0xfe, 0xda, // $...$ ....Z.4... + 0x13, 0x13, 0x66, 0x13, 0x34, 0x13, 0x93, 0x01, 0x13, 0x13, 0x34, 0x13, 0x66, 0x13, 0x7a, 0x92, // ..f.4.....4.f.z. + 0xfa, 0xfe, 0xd8, 0xfa, 0x92, 0x92, 0xfa, 0x01, 0x28, 0xfa, 0x01, 0x72, 0xce, 0xfe, 0x9f, 0xfe, // ........(..r.... + 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x02, 0xd3, 0xfe, 0x5a, 0x13, // ^.....a...a...Z. + 0x13, 0x01, 0x26, 0x13, 0x34, 0x13, 0x66, 0x13, 0x13, 0x93, 0x01, 0x13, 0x13, 0x13, 0x66, 0x13, // ..&.4.f.......f. + 0x34, 0xfa, 0x01, 0x28, 0xfa, 0x92, 0x92, 0xfa, 0xfe, 0xd8, 0xfa, 0x92, 0x92, 0x02, 0x5f, 0xfe, // 4..(.........._. + 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x00, 0x00, // ^.....a...a..... + 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x85, 0x00, 0x09, 0x00, 0x12, 0x00, 0x22, // ..............." + 0x00, 0x00, 0x01, 0x34, 0x27, 0x01, 0x16, 0x33, 0x32, 0x3e, 0x02, 0x05, 0x01, 0x26, 0x23, 0x22, // ...4'..32>...&#" + 0x0e, 0x01, 0x15, 0x14, 0x00, 0x10, 0x02, 0x06, 0x04, 0x20, 0x24, 0x26, 0x02, 0x10, 0x12, 0x36, // ......... $&...6 + 0x24, 0x20, 0x04, 0x16, 0x05, 0x20, 0x57, 0xfd, 0x0e, 0x89, 0xa0, 0x6f, 0xc9, 0x92, 0x56, 0xfc, // $ ... W....o..V. + 0x19, 0x02, 0xf3, 0x87, 0xa5, 0x94, 0xfa, 0x92, 0x05, 0x20, 0x7a, 0xcd, 0xfe, 0xe3, 0xfe, 0xc8, // ......... z..... + 0xfe, 0xe3, 0xcd, 0x7a, 0x7a, 0xcd, 0x01, 0x1d, 0x01, 0x38, 0x01, 0x1d, 0xcd, 0x02, 0x83, 0xa1, // ...zz....8...... + 0x86, 0xfd, 0x0f, 0x59, 0x57, 0x92, 0xcb, 0xbc, 0x02, 0xf2, 0x5b, 0x92, 0xfc, 0x94, 0xa2, 0x01, // ...YW.....[..... + 0x3f, 0xfe, 0xc6, 0xfe, 0xe2, 0xce, 0x7a, 0x7a, 0xce, 0x01, 0x1e, 0x01, 0x3a, 0x01, 0x1d, 0xce, // ?.....zz....:... + 0x7a, 0x7a, 0xce, 0x00, 0x00, 0x01, 0x00, 0x40, 0xff, 0x35, 0x06, 0x00, 0x05, 0x4b, 0x00, 0x20, // zz.....@.5...K. + 0x00, 0x00, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x01, 0x16, 0x14, 0x0f, 0x01, 0x06, 0x23, 0x22, // ......#!......#" + 0x27, 0x01, 0x26, 0x35, 0x34, 0x37, 0x01, 0x36, 0x33, 0x32, 0x1f, 0x01, 0x16, 0x14, 0x07, 0x01, // '.&547.632...... + 0x21, 0x32, 0x16, 0x06, 0x00, 0x41, 0x34, 0xfd, 0x40, 0x01, 0x25, 0x26, 0x26, 0x4b, 0x25, 0x35, // !2...A4.@.%&&K%5 + 0x34, 0x27, 0xfd, 0x75, 0x25, 0x25, 0x02, 0x8b, 0x26, 0x35, 0x34, 0x26, 0x4b, 0x26, 0x26, 0xfe, // 4'.u%%..&54&K&&. + 0xdb, 0x02, 0xc0, 0x34, 0x41, 0x02, 0x80, 0x80, 0x35, 0x4b, 0xfe, 0xda, 0x24, 0x6c, 0x24, 0x4c, // ...4A...5K..$l$L + 0x25, 0x25, 0x02, 0x8c, 0x25, 0x35, 0x34, 0x27, 0x02, 0x8a, 0x26, 0x26, 0x4a, 0x26, 0x6a, 0x26, // %%..%54'..&&J&j& + 0xfe, 0xdb, 0x4b, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0x35, 0x05, 0xc0, 0x05, 0x4b, 0x00, 0x20, // ..K......5...K. + 0x00, 0x00, 0x01, 0x14, 0x07, 0x01, 0x06, 0x23, 0x22, 0x2f, 0x01, 0x26, 0x34, 0x37, 0x01, 0x21, // .......#"/.&47.! + 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x01, 0x26, 0x34, 0x3f, 0x01, 0x36, 0x33, 0x32, // "&=.463!.&4?.632 + 0x17, 0x01, 0x16, 0x05, 0xc0, 0x25, 0xfd, 0x75, 0x27, 0x34, 0x33, 0x27, 0x4b, 0x26, 0x26, 0x01, // .....%.u'43'K&&. + 0x25, 0xfd, 0x40, 0x34, 0x41, 0x41, 0x34, 0x02, 0xc0, 0xfe, 0xdb, 0x26, 0x26, 0x4b, 0x26, 0x34, // %.@4AA4....&&K&4 + 0x35, 0x26, 0x02, 0x8b, 0x25, 0x02, 0x40, 0x36, 0x25, 0xfd, 0x75, 0x25, 0x25, 0x4b, 0x26, 0x6a, // 5&..%.@6%.u%%K&j + 0x26, 0x01, 0x25, 0x4b, 0x35, 0x80, 0x35, 0x4b, 0x01, 0x26, 0x24, 0x6c, 0x24, 0x4b, 0x26, 0x26, // &.%K5.5K.&$l$K&& + 0xfd, 0x75, 0x23, 0x00, 0x00, 0x01, 0x00, 0x35, 0xff, 0x80, 0x06, 0x4b, 0x05, 0x40, 0x00, 0x21, // .u#....5...K.@.! + 0x00, 0x00, 0x01, 0x14, 0x0f, 0x01, 0x06, 0x23, 0x22, 0x27, 0x01, 0x11, 0x14, 0x06, 0x2b, 0x01, // .......#"'....+. + 0x22, 0x26, 0x35, 0x11, 0x01, 0x06, 0x22, 0x2f, 0x01, 0x26, 0x35, 0x34, 0x37, 0x01, 0x36, 0x33, // "&5..."/.&547.63 + 0x32, 0x17, 0x01, 0x16, 0x06, 0x4b, 0x25, 0x4b, 0x26, 0x35, 0x36, 0x24, 0xfe, 0xda, 0x4b, 0x35, // 2....K%K&56$..K5 + 0x80, 0x35, 0x4b, 0xfe, 0xda, 0x24, 0x6c, 0x24, 0x4b, 0x26, 0x26, 0x02, 0x8b, 0x23, 0x37, 0x36, // .5K..$l$K&&..#76 + 0x25, 0x02, 0x8b, 0x25, 0x02, 0x35, 0x33, 0x27, 0x4b, 0x26, 0x26, 0x01, 0x25, 0xfd, 0x40, 0x34, // %..%.53'K&&.%.@4 0x41, 0x41, 0x34, 0x02, 0xc0, 0xfe, 0xdb, 0x26, 0x26, 0x4b, 0x26, 0x34, 0x35, 0x26, 0x02, 0x8b, // AA4....&&K&45&.. - 0x25, 0x02, 0x40, 0x36, 0x25, 0xfd, 0x75, 0x25, 0x25, 0x4b, 0x26, 0x6a, 0x26, 0x01, 0x25, 0x4b, // %.@6%.u%%K&j&.%K - 0x35, 0x80, 0x35, 0x4b, 0x01, 0x26, 0x24, 0x6c, 0x24, 0x4b, 0x26, 0x26, 0xfd, 0x75, 0x23, 0x00, // 5.5K.&$l$K&&.u#. - 0x00, 0x01, 0x00, 0x35, 0xff, 0x80, 0x06, 0x4b, 0x05, 0x40, 0x00, 0x21, 0x00, 0x00, 0x01, 0x14, // ...5...K.@.!.... - 0x0f, 0x01, 0x06, 0x23, 0x22, 0x27, 0x01, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, // ...#"'....+."&5. - 0x01, 0x06, 0x22, 0x2f, 0x01, 0x26, 0x35, 0x34, 0x37, 0x01, 0x36, 0x33, 0x32, 0x17, 0x01, 0x16, // .."/.&547.632... - 0x06, 0x4b, 0x25, 0x4b, 0x26, 0x35, 0x36, 0x24, 0xfe, 0xda, 0x4b, 0x35, 0x80, 0x35, 0x4b, 0xfe, // .K%K&56$..K5.5K. - 0xda, 0x24, 0x6c, 0x24, 0x4b, 0x26, 0x26, 0x02, 0x8b, 0x23, 0x37, 0x36, 0x25, 0x02, 0x8b, 0x25, // .$l$K&&..#76%..% - 0x02, 0x35, 0x33, 0x27, 0x4b, 0x26, 0x26, 0x01, 0x25, 0xfd, 0x40, 0x34, 0x41, 0x41, 0x34, 0x02, // .53'K&&.%.@4AA4. - 0xc0, 0xfe, 0xdb, 0x26, 0x26, 0x4b, 0x26, 0x34, 0x35, 0x26, 0x02, 0x8b, 0x25, 0x25, 0xfd, 0x75, // ...&&K&45&..%%.u - 0x27, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x35, 0xff, 0xb5, 0x06, 0x4b, 0x05, 0x80, 0x00, 0x22, // '......5...K..." - 0x00, 0x00, 0x01, 0x14, 0x07, 0x01, 0x06, 0x23, 0x22, 0x27, 0x01, 0x26, 0x35, 0x34, 0x3f, 0x01, // .......#"'.&54?. - 0x36, 0x33, 0x32, 0x17, 0x01, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x15, 0x11, 0x01, 0x36, // 632...46;.2....6 - 0x33, 0x32, 0x1f, 0x01, 0x16, 0x06, 0x4b, 0x25, 0xfd, 0x75, 0x27, 0x34, 0x35, 0x25, 0xfd, 0x75, // 32....K%.u'45%.u - 0x26, 0x26, 0x4a, 0x27, 0x34, 0x35, 0x25, 0x01, 0x26, 0x4c, 0x34, 0x80, 0x34, 0x4c, 0x01, 0x26, // &&J'45%.&L4.4L.& - 0x25, 0x35, 0x34, 0x27, 0x4b, 0x25, 0x02, 0xc0, 0x35, 0x25, 0xfd, 0x74, 0x25, 0x25, 0x02, 0x8c, // %54'K%..5%.t%%.. - 0x24, 0x36, 0x35, 0x26, 0x4b, 0x25, 0x25, 0xfe, 0xda, 0x02, 0xc0, 0x34, 0x4c, 0x4c, 0x34, 0xfd, // $65&K%%....4LL4. - 0x40, 0x01, 0x26, 0x25, 0x25, 0x4b, 0x27, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0x80, 0x07, 0x00, // @.&%%K'......... - 0x05, 0xc0, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x14, 0x07, 0x01, 0x06, 0x22, 0x26, 0x35, 0x11, 0x23, // ...,......."&5.# - 0x22, 0x0e, 0x05, 0x15, 0x14, 0x17, 0x14, 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x27, 0x2e, 0x02, // "..........#"'.. - 0x27, 0x02, 0x35, 0x34, 0x37, 0x12, 0x21, 0x33, 0x11, 0x34, 0x36, 0x32, 0x17, 0x01, 0x07, 0x00, // '.547.!3.462.... - 0x13, 0xfe, 0x00, 0x13, 0x34, 0x26, 0xe0, 0x62, 0x9b, 0x99, 0x71, 0x62, 0x3e, 0x23, 0x05, 0x05, // ....4&.b..qb>#.. - 0x11, 0x0f, 0x10, 0x0c, 0x07, 0x0c, 0x0f, 0x03, 0x7f, 0x35, 0xa2, 0x02, 0xc9, 0xe0, 0x26, 0x34, // .........5....&4 - 0x13, 0x02, 0x00, 0x03, 0x9a, 0x34, 0x13, 0xfe, 0x00, 0x13, 0x26, 0x1a, 0x01, 0x00, 0x0c, 0x1f, // .....4....&..... - 0x36, 0x55, 0x75, 0xa0, 0x65, 0x37, 0x44, 0x06, 0x23, 0x09, 0x0f, 0x14, 0x11, 0x09, 0x1a, 0x22, // 6Uu.e7D.#......" - 0x07, 0x01, 0x1d, 0xa6, 0xc7, 0x86, 0x01, 0x93, 0x01, 0x00, 0x1a, 0x26, 0x13, 0xfe, 0x00, 0x00, // ...........&.... - 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x17, 0x00, 0x2f, 0x00, 0x00, // ............./.. - 0x00, 0x14, 0x07, 0x01, 0x17, 0x16, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, // ........#!"&5.46 - 0x32, 0x1f, 0x01, 0x01, 0x36, 0x32, 0x1f, 0x01, 0x01, 0x11, 0x14, 0x06, 0x22, 0x2f, 0x01, 0x01, // 2...62......"/.. - 0x06, 0x22, 0x2f, 0x01, 0x26, 0x34, 0x37, 0x01, 0x27, 0x26, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // ."/.&47.'&463!2. - 0x02, 0xf3, 0x0a, 0xfe, 0xb4, 0x90, 0x13, 0x26, 0x1a, 0xfe, 0x40, 0x1a, 0x26, 0x26, 0x34, 0x13, // .......&..@.&&4. - 0x90, 0x01, 0x4c, 0x0a, 0x1a, 0x0a, 0x72, 0x03, 0x17, 0x26, 0x34, 0x13, 0x90, 0xfe, 0xb4, 0x0a, // ..L...r..&4..... - 0x1a, 0x0a, 0x72, 0x0a, 0x0a, 0x01, 0x4c, 0x90, 0x13, 0x26, 0x1a, 0x01, 0xc0, 0x1a, 0x26, 0x01, // ..r...L..&....&. - 0xed, 0x1a, 0x0a, 0xfe, 0xb4, 0x90, 0x13, 0x34, 0x26, 0x26, 0x1a, 0x01, 0xc0, 0x1a, 0x26, 0x13, // .......4&&....&. - 0x90, 0x01, 0x4c, 0x0a, 0x0a, 0x72, 0x03, 0x49, 0xfe, 0x40, 0x1a, 0x26, 0x13, 0x90, 0xfe, 0xb4, // ..L..r.I.@.&.... - 0x0a, 0x0a, 0x72, 0x0a, 0x1a, 0x0a, 0x01, 0x4c, 0x90, 0x13, 0x34, 0x26, 0x26, 0x00, 0x00, 0x00, // ..r....L..4&&... - 0x00, 0x02, 0x00, 0x0d, 0xff, 0x8d, 0x05, 0xf3, 0x05, 0x73, 0x00, 0x17, 0x00, 0x2f, 0x00, 0x00, // .........s.../.. - 0x01, 0x11, 0x14, 0x06, 0x22, 0x2f, 0x01, 0x01, 0x06, 0x22, 0x2f, 0x01, 0x26, 0x34, 0x37, 0x01, // ...."/..."/.&47. - 0x27, 0x26, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x00, 0x14, 0x07, 0x01, 0x17, 0x16, 0x14, 0x06, // '&463!2......... - 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x32, 0x1f, 0x01, 0x01, 0x36, 0x32, 0x1f, 0x01, // #!"&5.462...62.. - 0x03, 0x00, 0x26, 0x34, 0x13, 0x90, 0xfe, 0xb4, 0x0a, 0x1a, 0x0a, 0x72, 0x0a, 0x0a, 0x01, 0x4c, // ..&4.......r...L - 0x90, 0x13, 0x26, 0x1a, 0x01, 0xc0, 0x1a, 0x26, 0x02, 0xf3, 0x0a, 0xfe, 0xb4, 0x90, 0x13, 0x26, // ..&....&.......& - 0x1a, 0xfe, 0x40, 0x1a, 0x26, 0x26, 0x34, 0x13, 0x90, 0x01, 0x4c, 0x0a, 0x1a, 0x0a, 0x72, 0x02, // ..@.&&4...L...r. - 0x40, 0xfe, 0x40, 0x1a, 0x26, 0x13, 0x90, 0xfe, 0xb4, 0x0a, 0x0a, 0x72, 0x0a, 0x1a, 0x0a, 0x01, // @.@.&......r.... - 0x4c, 0x90, 0x13, 0x34, 0x26, 0x26, 0x02, 0x93, 0x1a, 0x0a, 0xfe, 0xb4, 0x90, 0x13, 0x34, 0x26, // L..4&&........4& - 0x26, 0x1a, 0x01, 0xc0, 0x1a, 0x26, 0x13, 0x90, 0x01, 0x4c, 0x0a, 0x0a, 0x72, 0x00, 0x00, 0x00, // &....&...L..r... - 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x05, 0x80, 0x05, 0x80, 0x00, 0x23, 0x00, 0x00, 0x01, 0x15, // ...........#.... - 0x14, 0x06, 0x23, 0x21, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, 0x21, 0x22, 0x26, // ..#!...+."&5.!"& - 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x15, 0x11, 0x21, // =.463!.46;.2...! - 0x32, 0x16, 0x05, 0x80, 0x38, 0x28, 0xfe, 0x60, 0x38, 0x28, 0xc0, 0x28, 0x38, 0xfe, 0x60, 0x28, // 2...8(.`8(.(8.`( - 0x38, 0x38, 0x28, 0x01, 0xa0, 0x38, 0x28, 0xc0, 0x28, 0x38, 0x01, 0xa0, 0x28, 0x38, 0x03, 0x20, // 88(..8(.(8..(8. - 0xc0, 0x28, 0x38, 0xfe, 0x60, 0x28, 0x38, 0x38, 0x28, 0x01, 0xa0, 0x38, 0x28, 0xc0, 0x28, 0x38, // .(8.`(88(..8(.(8 - 0x01, 0xa0, 0x28, 0x38, 0x38, 0x28, 0xfe, 0x60, 0x38, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // ..(88(.`8....... - 0x02, 0x00, 0x05, 0x80, 0x03, 0x80, 0x00, 0x0f, 0x00, 0x00, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, // ..............#! - 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x05, 0x80, 0x38, 0x28, 0xfb, 0x40, // "&=.463!2...8(.@ - 0x28, 0x38, 0x38, 0x28, 0x04, 0xc0, 0x28, 0x38, 0x03, 0x20, 0xc0, 0x28, 0x38, 0x38, 0x28, 0xc0, // (88(..(8. .(88(. - 0x28, 0x38, 0x38, 0x00, 0x00, 0x01, 0x00, 0x7a, 0xff, 0x80, 0x06, 0x06, 0x05, 0x80, 0x00, 0x35, // (88....z.......5 - 0x00, 0x00, 0x01, 0x1e, 0x01, 0x0f, 0x01, 0x0e, 0x01, 0x27, 0x25, 0x11, 0x14, 0x06, 0x2b, 0x01, // .........'%...+. - 0x22, 0x26, 0x35, 0x11, 0x05, 0x06, 0x26, 0x2f, 0x01, 0x26, 0x36, 0x37, 0x2d, 0x01, 0x2e, 0x01, // "&5...&/.&67-... - 0x3f, 0x01, 0x3e, 0x01, 0x17, 0x05, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x15, 0x11, 0x25, // ?.>....46;.2...% - 0x36, 0x16, 0x1f, 0x01, 0x16, 0x06, 0x07, 0x05, 0x05, 0xca, 0x2e, 0x1b, 0x1a, 0x40, 0x1a, 0x67, // 6............@.g - 0x2e, 0xfe, 0xf6, 0x4c, 0x34, 0x80, 0x34, 0x4c, 0xfe, 0xf6, 0x2e, 0x67, 0x1a, 0x40, 0x1a, 0x1b, // ...L4.4L...g.@.. - 0x2e, 0x01, 0x0a, 0xfe, 0xf6, 0x2e, 0x1b, 0x1a, 0x40, 0x1a, 0x67, 0x2e, 0x01, 0x0a, 0x4c, 0x34, // ........@.g...L4 - 0x80, 0x34, 0x4c, 0x01, 0x0a, 0x2e, 0x67, 0x1a, 0x40, 0x1a, 0x1b, 0x2e, 0xfe, 0xf6, 0x01, 0xe6, // .4L...g.@....... - 0x1a, 0x67, 0x2e, 0x6e, 0x2e, 0x1b, 0x1a, 0x99, 0xfe, 0xcd, 0x34, 0x4c, 0x4c, 0x34, 0x01, 0x33, // .g.n......4LL4.3 - 0x99, 0x1a, 0x1b, 0x2e, 0x6e, 0x2e, 0x67, 0x1a, 0x9a, 0x9a, 0x1a, 0x67, 0x2e, 0x6e, 0x2e, 0x1b, // ....n.g....g.n.. - 0x1a, 0x99, 0x01, 0x33, 0x34, 0x4c, 0x4c, 0x34, 0xfe, 0xcd, 0x99, 0x1a, 0x1b, 0x2e, 0x6e, 0x2e, // ...34LL4......n. - 0x67, 0x1a, 0x9a, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x0b, // g............... - 0x00, 0x1b, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x20, 0x04, 0x12, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, // ...-... ..... $. - 0x10, 0x12, 0x01, 0x35, 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, // ...54&+.".....;. - 0x32, 0x36, 0x03, 0x13, 0x34, 0x27, 0x26, 0x2b, 0x01, 0x22, 0x07, 0x06, 0x15, 0x13, 0x14, 0x16, // 26..4'&+."...... - 0x3b, 0x01, 0x32, 0x36, 0x02, 0x2f, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, // ;.26./...a.....^ - 0xfe, 0x9f, 0xce, 0xce, 0x02, 0xb2, 0x12, 0x0d, 0xc0, 0x0d, 0x14, 0x14, 0x0d, 0xc0, 0x0d, 0x12, // ................ - 0x02, 0x12, 0x0a, 0x0a, 0x0e, 0xdc, 0x0e, 0x0a, 0x0a, 0x11, 0x14, 0x0e, 0xb9, 0x0e, 0x13, 0x05, // ................ - 0x80, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, // .....^.....a...a - 0xfb, 0xef, 0xbe, 0x0e, 0x13, 0x14, 0x0d, 0xbe, 0x0d, 0x14, 0x13, 0x01, 0x66, 0x02, 0x6d, 0x0c, // ............f.m. - 0x06, 0x08, 0x08, 0x06, 0x0c, 0xfd, 0x93, 0x0a, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, // ................ - 0x00, 0x00, 0x06, 0x00, 0x05, 0x40, 0x00, 0x0d, 0x00, 0x16, 0x00, 0x1f, 0x00, 0x4a, 0x00, 0x00, // .....@.......J.. - 0x25, 0x35, 0x11, 0x35, 0x21, 0x15, 0x11, 0x15, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x01, 0x33, // %5.5!.....;.26.3 - 0x27, 0x26, 0x23, 0x22, 0x06, 0x14, 0x16, 0x24, 0x34, 0x26, 0x23, 0x22, 0x0f, 0x01, 0x33, 0x32, // '&#"...$4&#"..32 - 0x05, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x23, // ....+....#!"&5.# - 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x22, 0x26, 0x34, 0x36, 0x33, 0x32, 0x1f, 0x01, // "&5.463!"&4632.. - 0x37, 0x36, 0x33, 0x32, 0x16, 0x14, 0x06, 0x23, 0x21, 0x32, 0x16, 0x03, 0xa0, 0xfe, 0xc0, 0x24, // 7632...#!2.....$ - 0x1c, 0xc0, 0x1c, 0x24, 0xfe, 0x38, 0xc3, 0x7e, 0x1a, 0x2b, 0x28, 0x38, 0x38, 0x02, 0xd8, 0x38, // ...$.8.~.+(88..8 - 0x28, 0x2b, 0x1a, 0x7d, 0xc2, 0x28, 0x01, 0xb0, 0x12, 0x0e, 0x60, 0x38, 0x28, 0xfb, 0xc0, 0x28, // (+.}.(....`8(..( - 0x38, 0x60, 0x0e, 0x12, 0x12, 0x0e, 0x01, 0xb8, 0x5d, 0x83, 0x83, 0x5d, 0x6b, 0x3d, 0x80, 0x80, // 8`......]..]k=.. - 0x3d, 0x6b, 0x5d, 0x83, 0x83, 0x5d, 0x01, 0xb8, 0x0e, 0x12, 0xb4, 0x38, 0x01, 0xd4, 0xc0, 0xc0, // =k]..].....8.... - 0xfe, 0x2c, 0x38, 0x19, 0x1b, 0x1b, 0x03, 0x65, 0xa1, 0x1f, 0x38, 0x50, 0x38, 0x38, 0x50, 0x38, // .,8....e..8P88P8 - 0x1f, 0xa1, 0xa0, 0xfe, 0xc0, 0x0e, 0x12, 0xfe, 0x60, 0x28, 0x38, 0x38, 0x28, 0x01, 0xa0, 0x12, // ........`(88(... - 0x0e, 0x01, 0x40, 0x0e, 0x12, 0x83, 0xba, 0x83, 0x4d, 0xa5, 0xa5, 0x4d, 0x83, 0xba, 0x83, 0x12, // ..@.....M..M.... - 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x05, 0x80, 0x00, 0x15, 0x00, 0x4f, 0x00, 0x00, // .............O.. - 0x00, 0x34, 0x26, 0x23, 0x22, 0x04, 0x06, 0x07, 0x06, 0x15, 0x14, 0x16, 0x33, 0x32, 0x37, 0x3e, // .4&#".......327> - 0x01, 0x37, 0x36, 0x24, 0x33, 0x32, 0x01, 0x14, 0x07, 0x06, 0x00, 0x07, 0x06, 0x23, 0x22, 0x27, // .76$32.......#"' - 0x2e, 0x01, 0x23, 0x22, 0x0e, 0x02, 0x23, 0x22, 0x2e, 0x01, 0x27, 0x2e, 0x03, 0x35, 0x34, 0x3e, // ..#"..#"..'..54> - 0x02, 0x35, 0x34, 0x26, 0x27, 0x26, 0x35, 0x34, 0x3e, 0x02, 0x37, 0x3e, 0x04, 0x37, 0x3e, 0x04, // .54&'&54>.7>.7>. - 0x33, 0x32, 0x1e, 0x02, 0x05, 0x00, 0x26, 0x1a, 0xac, 0xfe, 0xdc, 0xe3, 0x7a, 0x13, 0x26, 0x1a, // 32....&.....z.&. - 0x18, 0x15, 0x1b, 0x5e, 0x14, 0x89, 0x01, 0x07, 0xb6, 0x1a, 0x02, 0x26, 0x14, 0x2e, 0xfe, 0xeb, // ...^.......&.... - 0xdb, 0xd6, 0xe0, 0x94, 0x8a, 0x0f, 0x92, 0x17, 0x10, 0x2f, 0x2b, 0x3e, 0x1d, 0x1e, 0x2a, 0x14, // ........./+>..*. - 0x11, 0x02, 0x08, 0x03, 0x03, 0x3e, 0x4a, 0x3e, 0x1c, 0x02, 0x09, 0x57, 0x97, 0xbe, 0x6d, 0x37, // .....>J>...W..m7 - 0xb4, 0xb3, 0xb2, 0x95, 0x27, 0x0a, 0x27, 0x14, 0x22, 0x27, 0x18, 0x27, 0x3f, 0x20, 0x10, 0x03, // ....'.'."'.'? .. - 0x26, 0x34, 0x26, 0x63, 0xa9, 0x87, 0x15, 0x18, 0x1a, 0x26, 0x13, 0x18, 0x5e, 0x13, 0x7c, 0x68, // &4&c.....&..^.|h - 0x01, 0x06, 0x5f, 0x62, 0xe0, 0xfe, 0xc2, 0x6d, 0x6c, 0x2f, 0x05, 0x4a, 0x40, 0x4c, 0x40, 0x16, // .._b...ml/.J@L@. - 0x1a, 0x1d, 0x04, 0x0e, 0x06, 0x0d, 0x07, 0x23, 0x4d, 0x36, 0x3a, 0x13, 0x04, 0x44, 0x0a, 0x33, // .......#M6:..D.3 - 0x35, 0x73, 0xd2, 0x9f, 0x77, 0x24, 0x12, 0x0f, 0x03, 0x09, 0x27, 0x25, 0x0a, 0x27, 0x11, 0x17, // 5s..w$....'%.'.. - 0x09, 0x5c, 0x84, 0x74, 0x00, 0x02, 0x00, 0x00, 0xff, 0x00, 0x05, 0x80, 0x06, 0x00, 0x00, 0x0f, // ...t............ - 0x00, 0x33, 0x00, 0x00, 0x05, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, // .3......#!"&=.46 - 0x33, 0x21, 0x32, 0x16, 0x01, 0x14, 0x0e, 0x05, 0x15, 0x14, 0x17, 0x27, 0x17, 0x2e, 0x04, 0x35, // 3!2........'...5 - 0x34, 0x3e, 0x05, 0x35, 0x34, 0x27, 0x17, 0x27, 0x1e, 0x04, 0x05, 0x80, 0x13, 0x0d, 0xfa, 0xc0, // 4>.54'.'........ - 0x0d, 0x13, 0x13, 0x0d, 0x05, 0x40, 0x0d, 0x13, 0xff, 0x00, 0x31, 0x4f, 0x60, 0x60, 0x4f, 0x31, // .....@....1O``O1 - 0x43, 0x04, 0x01, 0x5a, 0x8c, 0x89, 0x5a, 0x37, 0x31, 0x4f, 0x60, 0x60, 0x4f, 0x31, 0x42, 0x03, // C..Z..Z71O``O1B. - 0x01, 0x5a, 0x8c, 0x89, 0x5a, 0x37, 0xa0, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, // .Z..Z7.@....@... - 0x04, 0x13, 0x4e, 0x84, 0x5d, 0x53, 0x48, 0x48, 0x5b, 0x33, 0x60, 0x80, 0x01, 0x01, 0x29, 0x54, // ..N.]SHH[3`...)T - 0x74, 0x81, 0xac, 0x62, 0x4e, 0x84, 0x5d, 0x53, 0x48, 0x48, 0x5b, 0x33, 0x5e, 0x82, 0x01, 0x01, // t..bN.]SHH[3^... - 0x29, 0x54, 0x74, 0x81, 0xac, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, // )Tt............. - 0x04, 0x80, 0x00, 0x11, 0x00, 0x21, 0x00, 0x31, 0x00, 0x00, 0x01, 0x26, 0x27, 0x16, 0x15, 0x14, // .....!.1...&'... - 0x00, 0x20, 0x00, 0x35, 0x34, 0x37, 0x06, 0x07, 0x16, 0x04, 0x20, 0x24, 0x00, 0x34, 0x26, 0x23, // . .547.... $.4&# - 0x22, 0x06, 0x15, 0x14, 0x16, 0x32, 0x36, 0x35, 0x34, 0x36, 0x33, 0x32, 0x00, 0x14, 0x07, 0x06, // "....2654632.... - 0x00, 0x20, 0x00, 0x27, 0x26, 0x34, 0x37, 0x36, 0x00, 0x20, 0x00, 0x17, 0x06, 0x80, 0x98, 0xe5, // . .'&476. ...... - 0x3d, 0xfe, 0xf9, 0xfe, 0x8e, 0xfe, 0xf9, 0x3d, 0xe5, 0x98, 0x85, 0x01, 0x91, 0x01, 0xd4, 0x01, // =......=........ - 0x91, 0xfd, 0xb5, 0x1c, 0x14, 0x7d, 0xb3, 0x1c, 0x28, 0x1c, 0x7a, 0x56, 0x14, 0x03, 0x6c, 0x14, // .....}..(.zV..l. - 0x8c, 0xfe, 0x27, 0xfd, 0xf2, 0xfe, 0x27, 0x8c, 0x14, 0x14, 0x8c, 0x01, 0xd9, 0x02, 0x0e, 0x01, // ..'...'......... - 0xd9, 0x8c, 0x02, 0x40, 0xec, 0x75, 0x68, 0x79, 0xb9, 0xfe, 0xf9, 0x01, 0x07, 0xb9, 0x79, 0x68, // ...@.uhy......yh - 0x75, 0xec, 0xcd, 0xf3, 0xf3, 0x02, 0x39, 0x28, 0x1c, 0xb3, 0x7d, 0x14, 0x1c, 0x1c, 0x14, 0x56, // u.....9(..}....V - 0x7a, 0xfe, 0xd2, 0x44, 0x23, 0xe6, 0xfe, 0xeb, 0x01, 0x16, 0xe5, 0x23, 0x44, 0x23, 0xe5, 0x01, // z..D#......#D#.. - 0x16, 0xfe, 0xea, 0xe5, 0x00, 0x05, 0x00, 0x00, 0xff, 0xa0, 0x07, 0x00, 0x04, 0xe0, 0x00, 0x09, // ................ - 0x00, 0x19, 0x00, 0x3d, 0x00, 0x43, 0x00, 0x55, 0x00, 0x00, 0x25, 0x37, 0x2e, 0x01, 0x35, 0x34, // ...=.C.U..%7..54 - 0x37, 0x06, 0x07, 0x12, 0x00, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, 0x32, 0x36, 0x35, // 7....4&#"....265 - 0x34, 0x36, 0x33, 0x32, 0x25, 0x14, 0x07, 0x06, 0x00, 0x0f, 0x01, 0x06, 0x23, 0x22, 0x27, 0x26, // 4632%.......#"'& - 0x35, 0x34, 0x37, 0x2e, 0x01, 0x27, 0x26, 0x34, 0x37, 0x36, 0x00, 0x21, 0x32, 0x17, 0x37, 0x36, // 547..'&476.!2.76 - 0x33, 0x32, 0x1e, 0x03, 0x17, 0x16, 0x13, 0x14, 0x06, 0x07, 0x01, 0x16, 0x04, 0x14, 0x07, 0x06, // 32.............. - 0x07, 0x06, 0x04, 0x23, 0x37, 0x36, 0x24, 0x37, 0x26, 0x27, 0x37, 0x1e, 0x01, 0x17, 0x02, 0x2b, // ...#76$7&'7....+ - 0x4e, 0x57, 0x62, 0x3d, 0xe5, 0x98, 0xa7, 0x02, 0x89, 0x1c, 0x14, 0x7d, 0xb3, 0x1c, 0x28, 0x1c, // NWb=.......}..(. - 0x7a, 0x56, 0x14, 0x01, 0x87, 0x01, 0x69, 0xfe, 0x5c, 0x6a, 0x31, 0x0a, 0x12, 0x0c, 0x7a, 0x10, // zV....i..j1...z. - 0x2c, 0x8f, 0xf1, 0x58, 0x14, 0x14, 0x99, 0x01, 0xc6, 0x01, 0x0d, 0x59, 0x5b, 0x36, 0x0a, 0x12, // ,..X.......Y[6.. - 0x05, 0x1a, 0x24, 0x1e, 0x21, 0x03, 0x10, 0x25, 0x9e, 0x82, 0x01, 0x18, 0x08, 0x01, 0xc0, 0x14, // ..$.!..%........ - 0x27, 0x46, 0x96, 0xfe, 0x75, 0xde, 0x4a, 0xd4, 0x01, 0x69, 0x79, 0x73, 0xa7, 0x3f, 0x5f, 0xaf, // 'F..u.J..iys.?_. - 0x39, 0xc9, 0x8d, 0x3f, 0xc0, 0x6b, 0x79, 0x68, 0x75, 0xec, 0xfe, 0xfe, 0x02, 0x6e, 0x28, 0x1c, // 9..?.kyhu....n(. - 0xb3, 0x7d, 0x14, 0x1c, 0x1c, 0x14, 0x56, 0x7a, 0xef, 0x07, 0x02, 0xbc, 0xfd, 0x0c, 0xbd, 0x59, // .}....Vz.......Y - 0x10, 0x46, 0x0a, 0x12, 0x0c, 0x4b, 0x41, 0xd8, 0x89, 0x1f, 0x4c, 0x1f, 0xeb, 0x01, 0x10, 0x11, // .F...KA...L..... - 0x61, 0x10, 0x0c, 0x13, 0x12, 0x13, 0x02, 0x0a, 0xfe, 0x30, 0x8b, 0xe5, 0x32, 0x01, 0xf6, 0x2d, // a........0..2..- - 0x84, 0x46, 0x22, 0x40, 0x51, 0xac, 0xbe, 0x84, 0x12, 0xee, 0xbc, 0xb3, 0x73, 0x70, 0x40, 0xb2, // .F"@Q.......sp@. - 0x5f, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x10, 0xff, 0x80, 0x06, 0xf0, 0x06, 0x00, 0x00, 0x0f, // _............... - 0x00, 0x21, 0x00, 0x33, 0x00, 0x00, 0x25, 0x35, 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, // .!.3..%54&+."... + 0x25, 0x25, 0xfd, 0x75, 0x27, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x35, 0xff, 0xb5, 0x06, 0x4b, // %%.u'......5...K + 0x05, 0x80, 0x00, 0x22, 0x00, 0x00, 0x01, 0x14, 0x07, 0x01, 0x06, 0x23, 0x22, 0x27, 0x01, 0x26, // ...".......#"'.& + 0x35, 0x34, 0x3f, 0x01, 0x36, 0x33, 0x32, 0x17, 0x01, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, // 54?.632...46;.2. + 0x15, 0x11, 0x01, 0x36, 0x33, 0x32, 0x1f, 0x01, 0x16, 0x06, 0x4b, 0x25, 0xfd, 0x75, 0x27, 0x34, // ...632....K%.u'4 + 0x35, 0x25, 0xfd, 0x75, 0x26, 0x26, 0x4a, 0x27, 0x34, 0x35, 0x25, 0x01, 0x26, 0x4c, 0x34, 0x80, // 5%.u&&J'45%.&L4. + 0x34, 0x4c, 0x01, 0x26, 0x25, 0x35, 0x34, 0x27, 0x4b, 0x25, 0x02, 0xc0, 0x35, 0x25, 0xfd, 0x74, // 4L.&%54'K%..5%.t + 0x25, 0x25, 0x02, 0x8c, 0x24, 0x36, 0x35, 0x26, 0x4b, 0x25, 0x25, 0xfe, 0xda, 0x02, 0xc0, 0x34, // %%..$65&K%%....4 + 0x4c, 0x4c, 0x34, 0xfd, 0x40, 0x01, 0x26, 0x25, 0x25, 0x4b, 0x27, 0x00, 0x00, 0x01, 0x00, 0x00, // LL4.@.&%%K'..... + 0xff, 0x80, 0x07, 0x00, 0x05, 0xc0, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x14, 0x07, 0x01, 0x06, 0x22, // .......,......." + 0x26, 0x35, 0x11, 0x23, 0x22, 0x0e, 0x05, 0x15, 0x14, 0x17, 0x14, 0x16, 0x15, 0x14, 0x06, 0x23, // &5.#"..........# + 0x22, 0x27, 0x2e, 0x02, 0x27, 0x02, 0x35, 0x34, 0x37, 0x12, 0x21, 0x33, 0x11, 0x34, 0x36, 0x32, // "'..'.547.!3.462 + 0x17, 0x01, 0x07, 0x00, 0x13, 0xfe, 0x00, 0x13, 0x34, 0x26, 0xe0, 0x62, 0x9b, 0x99, 0x71, 0x62, // ........4&.b..qb + 0x3e, 0x23, 0x05, 0x05, 0x11, 0x0f, 0x10, 0x0c, 0x07, 0x0c, 0x0f, 0x03, 0x7f, 0x35, 0xa2, 0x02, // >#...........5.. + 0xc9, 0xe0, 0x26, 0x34, 0x13, 0x02, 0x00, 0x03, 0x9a, 0x34, 0x13, 0xfe, 0x00, 0x13, 0x26, 0x1a, // ..&4.....4....&. + 0x01, 0x00, 0x0c, 0x1f, 0x36, 0x55, 0x75, 0xa0, 0x65, 0x37, 0x44, 0x06, 0x23, 0x09, 0x0f, 0x14, // ....6Uu.e7D.#... + 0x11, 0x09, 0x1a, 0x22, 0x07, 0x01, 0x1d, 0xa6, 0xc7, 0x86, 0x01, 0x93, 0x01, 0x00, 0x1a, 0x26, // ..."...........& + 0x13, 0xfe, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x17, // ................ + 0x00, 0x2f, 0x00, 0x00, 0x00, 0x14, 0x07, 0x01, 0x17, 0x16, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // ./..........#!"& + 0x35, 0x11, 0x34, 0x36, 0x32, 0x1f, 0x01, 0x01, 0x36, 0x32, 0x1f, 0x01, 0x01, 0x11, 0x14, 0x06, // 5.462...62...... + 0x22, 0x2f, 0x01, 0x01, 0x06, 0x22, 0x2f, 0x01, 0x26, 0x34, 0x37, 0x01, 0x27, 0x26, 0x34, 0x36, // "/..."/.&47.'&46 + 0x33, 0x21, 0x32, 0x16, 0x02, 0xf3, 0x0a, 0xfe, 0xb4, 0x90, 0x13, 0x26, 0x1a, 0xfe, 0x40, 0x1a, // 3!2........&..@. + 0x26, 0x26, 0x34, 0x13, 0x90, 0x01, 0x4c, 0x0a, 0x1a, 0x0a, 0x72, 0x03, 0x17, 0x26, 0x34, 0x13, // &&4...L...r..&4. + 0x90, 0xfe, 0xb4, 0x0a, 0x1a, 0x0a, 0x72, 0x0a, 0x0a, 0x01, 0x4c, 0x90, 0x13, 0x26, 0x1a, 0x01, // ......r...L..&.. + 0xc0, 0x1a, 0x26, 0x01, 0xed, 0x1a, 0x0a, 0xfe, 0xb4, 0x90, 0x13, 0x34, 0x26, 0x26, 0x1a, 0x01, // ..&........4&&.. + 0xc0, 0x1a, 0x26, 0x13, 0x90, 0x01, 0x4c, 0x0a, 0x0a, 0x72, 0x03, 0x49, 0xfe, 0x40, 0x1a, 0x26, // ..&...L..r.I.@.& + 0x13, 0x90, 0xfe, 0xb4, 0x0a, 0x0a, 0x72, 0x0a, 0x1a, 0x0a, 0x01, 0x4c, 0x90, 0x13, 0x34, 0x26, // ......r....L..4& + 0x26, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0d, 0xff, 0x8d, 0x05, 0xf3, 0x05, 0x73, 0x00, 0x17, // &............s.. + 0x00, 0x2f, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, 0x22, 0x2f, 0x01, 0x01, 0x06, 0x22, 0x2f, 0x01, // ./......"/..."/. + 0x26, 0x34, 0x37, 0x01, 0x27, 0x26, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x00, 0x14, 0x07, 0x01, // &47.'&463!2..... + 0x17, 0x16, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x32, 0x1f, 0x01, 0x01, // ....#!"&5.462... + 0x36, 0x32, 0x1f, 0x01, 0x03, 0x00, 0x26, 0x34, 0x13, 0x90, 0xfe, 0xb4, 0x0a, 0x1a, 0x0a, 0x72, // 62....&4.......r + 0x0a, 0x0a, 0x01, 0x4c, 0x90, 0x13, 0x26, 0x1a, 0x01, 0xc0, 0x1a, 0x26, 0x02, 0xf3, 0x0a, 0xfe, // ...L..&....&.... + 0xb4, 0x90, 0x13, 0x26, 0x1a, 0xfe, 0x40, 0x1a, 0x26, 0x26, 0x34, 0x13, 0x90, 0x01, 0x4c, 0x0a, // ...&..@.&&4...L. + 0x1a, 0x0a, 0x72, 0x02, 0x40, 0xfe, 0x40, 0x1a, 0x26, 0x13, 0x90, 0xfe, 0xb4, 0x0a, 0x0a, 0x72, // ..r.@.@.&......r + 0x0a, 0x1a, 0x0a, 0x01, 0x4c, 0x90, 0x13, 0x34, 0x26, 0x26, 0x02, 0x93, 0x1a, 0x0a, 0xfe, 0xb4, // ....L..4&&...... + 0x90, 0x13, 0x34, 0x26, 0x26, 0x1a, 0x01, 0xc0, 0x1a, 0x26, 0x13, 0x90, 0x01, 0x4c, 0x0a, 0x0a, // ..4&&....&...L.. + 0x72, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x05, 0x80, 0x05, 0x80, 0x00, 0x23, // r..............# + 0x00, 0x00, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, // ......#!...+."&5 + 0x11, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, // .!"&=.463!.46;.2 + 0x16, 0x15, 0x11, 0x21, 0x32, 0x16, 0x05, 0x80, 0x38, 0x28, 0xfe, 0x60, 0x38, 0x28, 0xc0, 0x28, // ...!2...8(.`8(.( + 0x38, 0xfe, 0x60, 0x28, 0x38, 0x38, 0x28, 0x01, 0xa0, 0x38, 0x28, 0xc0, 0x28, 0x38, 0x01, 0xa0, // 8.`(88(..8(.(8.. + 0x28, 0x38, 0x03, 0x20, 0xc0, 0x28, 0x38, 0xfe, 0x60, 0x28, 0x38, 0x38, 0x28, 0x01, 0xa0, 0x38, // (8. .(8.`(88(..8 + 0x28, 0xc0, 0x28, 0x38, 0x01, 0xa0, 0x28, 0x38, 0x38, 0x28, 0xfe, 0x60, 0x38, 0x00, 0x00, 0x00, // (.(8..(88(.`8... + 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x05, 0x80, 0x03, 0x80, 0x00, 0x0f, 0x00, 0x00, 0x01, 0x15, // ................ + 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x05, 0x80, // ..#!"&=.463!2... + 0x38, 0x28, 0xfb, 0x40, 0x28, 0x38, 0x38, 0x28, 0x04, 0xc0, 0x28, 0x38, 0x03, 0x20, 0xc0, 0x28, // 8(.@(88(..(8. .( + 0x38, 0x38, 0x28, 0xc0, 0x28, 0x38, 0x38, 0x00, 0x00, 0x01, 0x00, 0x7a, 0xff, 0x80, 0x06, 0x06, // 88(.(88....z.... + 0x05, 0x80, 0x00, 0x35, 0x00, 0x00, 0x01, 0x1e, 0x01, 0x0f, 0x01, 0x0e, 0x01, 0x27, 0x25, 0x11, // ...5.........'%. + 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, 0x05, 0x06, 0x26, 0x2f, 0x01, 0x26, 0x36, 0x37, // ..+."&5...&/.&67 + 0x2d, 0x01, 0x2e, 0x01, 0x3f, 0x01, 0x3e, 0x01, 0x17, 0x05, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, // -...?.>....46;.2 + 0x16, 0x15, 0x11, 0x25, 0x36, 0x16, 0x1f, 0x01, 0x16, 0x06, 0x07, 0x05, 0x05, 0xca, 0x2e, 0x1b, // ...%6........... + 0x1a, 0x40, 0x1a, 0x67, 0x2e, 0xfe, 0xf6, 0x4c, 0x34, 0x80, 0x34, 0x4c, 0xfe, 0xf6, 0x2e, 0x67, // .@.g...L4.4L...g + 0x1a, 0x40, 0x1a, 0x1b, 0x2e, 0x01, 0x0a, 0xfe, 0xf6, 0x2e, 0x1b, 0x1a, 0x40, 0x1a, 0x67, 0x2e, // .@..........@.g. + 0x01, 0x0a, 0x4c, 0x34, 0x80, 0x34, 0x4c, 0x01, 0x0a, 0x2e, 0x67, 0x1a, 0x40, 0x1a, 0x1b, 0x2e, // ..L4.4L...g.@... + 0xfe, 0xf6, 0x01, 0xe6, 0x1a, 0x67, 0x2e, 0x6e, 0x2e, 0x1b, 0x1a, 0x99, 0xfe, 0xcd, 0x34, 0x4c, // .....g.n......4L + 0x4c, 0x34, 0x01, 0x33, 0x99, 0x1a, 0x1b, 0x2e, 0x6e, 0x2e, 0x67, 0x1a, 0x9a, 0x9a, 0x1a, 0x67, // L4.3....n.g....g + 0x2e, 0x6e, 0x2e, 0x1b, 0x1a, 0x99, 0x01, 0x33, 0x34, 0x4c, 0x4c, 0x34, 0xfe, 0xcd, 0x99, 0x1a, // .n.....34LL4.... + 0x1b, 0x2e, 0x6e, 0x2e, 0x67, 0x1a, 0x9a, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // ..n.g........... + 0x05, 0x80, 0x00, 0x0b, 0x00, 0x1b, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x20, 0x04, 0x12, 0x10, 0x02, // .......-... .... + 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, 0x01, 0x35, 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, // . $....54&+."... 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x03, 0x13, 0x34, 0x27, 0x26, 0x2b, 0x01, 0x22, 0x07, 0x06, // ..;.26..4'&+.".. - 0x15, 0x13, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x03, 0x01, 0x16, 0x07, 0x0e, 0x01, 0x23, 0x21, // ....;.26......#! - 0x22, 0x26, 0x27, 0x26, 0x37, 0x01, 0x3e, 0x01, 0x32, 0x16, 0x04, 0x00, 0x13, 0x0d, 0xc0, 0x0d, // "&'&7.>.2....... - 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x02, 0x12, 0x0a, 0x0d, 0x0b, 0xdc, 0x0b, 0x0d, 0x0a, 0x11, // ................ - 0x14, 0x0e, 0xb9, 0x0e, 0x13, 0x0d, 0x03, 0x00, 0x23, 0x25, 0x11, 0x3b, 0x22, 0xfa, 0x00, 0x22, // ........#%.;".." - 0x3b, 0x11, 0x25, 0x23, 0x03, 0x00, 0x11, 0x3c, 0x46, 0x3c, 0xa1, 0xbe, 0x0e, 0x13, 0x13, 0x0e, // ;.%#.....`,@L....... - 0x04, 0x03, 0x0f, 0x06, 0xfe, 0xe9, 0xfe, 0xfd, 0x35, 0x05, 0x0d, 0x60, 0x09, 0x0e, 0x02, 0x0f, // ........5..`.... - 0x09, 0xbd, 0xfc, 0x0b, 0x02, 0x01, 0x0a, 0x60, 0x09, 0x0e, 0x06, 0x02, 0xc2, 0x01, 0x03, 0xfe, // .......`........ - 0x04, 0x0e, 0x03, 0x02, 0x0b, 0x80, 0x0e, 0x10, 0x02, 0x99, 0xa0, 0x4c, 0xc0, 0x05, 0x60, 0x34, // ...........L..`4 - 0xc0, 0x4c, 0xa1, 0xfd, 0x48, 0x13, 0x0e, 0x60, 0x06, 0x01, 0x03, 0x0d, 0x01, 0xfc, 0xfe, 0xfd, // .L..H..`........ - 0xc2, 0x11, 0x0e, 0x60, 0x09, 0x02, 0x0b, 0xfc, 0xbd, 0x07, 0x10, 0x0d, 0x0c, 0x61, 0x09, 0x01, // ...`.........a.. - 0x35, 0x01, 0x03, 0x01, 0x17, 0x08, 0x10, 0x10, 0x0b, 0x80, 0x0d, 0x05, 0x9f, 0xa0, 0x4c, 0x40, // 5.............L@ - 0x00, 0x0f, 0x00, 0x00, 0xff, 0x00, 0x06, 0x80, 0x06, 0x00, 0x00, 0x03, 0x00, 0x07, 0x00, 0x0b, // ................ - 0x00, 0x0f, 0x00, 0x13, 0x00, 0x17, 0x00, 0x1b, 0x00, 0x1f, 0x00, 0x23, 0x00, 0x33, 0x00, 0x37, // ...........#.3.7 - 0x00, 0x3b, 0x00, 0x3f, 0x00, 0x4f, 0x00, 0x73, 0x00, 0x00, 0x17, 0x21, 0x11, 0x21, 0x01, 0x21, // .;.?.O.s...!.!.! - 0x11, 0x21, 0x25, 0x21, 0x11, 0x21, 0x01, 0x21, 0x11, 0x21, 0x25, 0x21, 0x11, 0x21, 0x01, 0x21, // .!%!.!.!.!%!.!.! - 0x11, 0x21, 0x01, 0x21, 0x11, 0x21, 0x01, 0x21, 0x11, 0x21, 0x25, 0x21, 0x11, 0x21, 0x01, 0x11, // .!.!.!.!.!%!.!.. - 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x01, 0x21, // 4&+.".....;.26.! - 0x11, 0x21, 0x25, 0x21, 0x11, 0x21, 0x01, 0x21, 0x11, 0x21, 0x37, 0x11, 0x34, 0x26, 0x2b, 0x01, // .!%!.!.!.!7.4&+. - 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x25, 0x11, 0x14, 0x06, 0x23, 0x21, // ".....;.26%...#! - 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x35, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x1d, // "&5.46;.546;.2.. - 0x01, 0x21, 0x35, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x1d, 0x01, 0x33, 0x32, 0x16, 0x80, 0x01, // .!546;.2...32... - 0x20, 0xfe, 0xe0, 0x01, 0x60, 0x01, 0x40, 0xfe, 0xc0, 0xfe, 0xa0, 0x01, 0x20, 0xfe, 0xe0, 0x01, // ...`.@..... ... - 0x60, 0x01, 0x40, 0xfe, 0xc0, 0xfe, 0xa0, 0x01, 0x20, 0xfe, 0xe0, 0x02, 0xe0, 0x01, 0x40, 0xfe, // `.@..... .....@. - 0xc0, 0xfe, 0x80, 0x01, 0x40, 0xfe, 0xc0, 0x03, 0x00, 0x01, 0x20, 0xfe, 0xe0, 0xfe, 0x80, 0x01, // ....@..... ..... - 0x40, 0xfe, 0xc0, 0xfe, 0xa0, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x02, // @......@....@... - 0xe0, 0x01, 0x20, 0xfe, 0xe0, 0xfe, 0x80, 0x01, 0x40, 0xfe, 0xc0, 0x01, 0x80, 0x01, 0x20, 0xfe, // .. .....@..... . - 0xe0, 0x20, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x01, 0x80, 0x4c, 0x34, // . ..@....@....L4 - 0xfa, 0x80, 0x34, 0x4c, 0x4c, 0x34, 0x80, 0x5e, 0x42, 0x40, 0x42, 0x5e, 0x01, 0x80, 0x5e, 0x42, // ..4LL4.^B@B^..^B - 0x40, 0x42, 0x5e, 0x80, 0x34, 0x4c, 0x80, 0x01, 0x20, 0xfe, 0xe0, 0x01, 0x20, 0x40, 0x01, 0x40, // @B^.4L.. ... @.@ - 0xfe, 0xc0, 0x01, 0x40, 0x40, 0x01, 0x20, 0xfc, 0x00, 0x01, 0x20, 0x01, 0xc0, 0x01, 0x20, 0xfc, // ...@@. ... ... . - 0x00, 0x01, 0x20, 0x40, 0x01, 0x40, 0x02, 0x20, 0x01, 0x20, 0x0d, 0x13, 0x13, 0x0d, 0xfe, 0xe0, // .. @.@. . ...... - 0x0d, 0x13, 0x13, 0xfc, 0xad, 0x01, 0x40, 0x40, 0x01, 0x20, 0xfe, 0xe0, 0x01, 0x20, 0xc0, 0x01, // ......@@. ... .. - 0x20, 0x0d, 0x13, 0x13, 0x0d, 0xfe, 0xe0, 0x0d, 0x13, 0x13, 0x4d, 0xfb, 0x00, 0x34, 0x4c, 0x4c, // .........M..4LL - 0x34, 0x05, 0x00, 0x34, 0x4c, 0x60, 0x42, 0x5e, 0x5e, 0x42, 0x60, 0x60, 0x42, 0x5e, 0x5e, 0x42, // 4..4L`B^^B``B^^B - 0x60, 0x4c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0xa0, 0x07, 0x00, 0x05, 0xe0, 0x00, 0x12, // `L.............. - 0x00, 0x37, 0x00, 0x71, 0x00, 0x00, 0x01, 0x06, 0x07, 0x2e, 0x04, 0x2b, 0x01, 0x22, 0x26, 0x3d, // .7.q.......+."&= - 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x00, 0x14, 0x07, 0x01, 0x06, 0x23, 0x22, 0x26, 0x3d, 0x01, // .46;.2.....#"&=. - 0x22, 0x0e, 0x01, 0x2e, 0x06, 0x27, 0x36, 0x37, 0x1e, 0x04, 0x33, 0x21, 0x35, 0x34, 0x36, 0x33, // "....'67..3!5463 - 0x32, 0x17, 0x01, 0x12, 0x14, 0x07, 0x01, 0x06, 0x23, 0x22, 0x26, 0x3d, 0x01, 0x21, 0x22, 0x0e, // 2.......#"&=.!". - 0x02, 0x07, 0x06, 0x07, 0x0e, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, // ......+."&=.46;. - 0x32, 0x3e, 0x02, 0x37, 0x36, 0x37, 0x3e, 0x06, 0x33, 0x21, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, // 2>.767>.3!54632. - 0x01, 0x02, 0x9a, 0x3c, 0x4d, 0x16, 0x1e, 0x33, 0x33, 0x4b, 0x2c, 0xe0, 0x0e, 0x12, 0x12, 0x0e, // ....7> - 0x05, 0x37, 0x26, 0x02, 0x35, 0x34, 0x3e, 0x01, 0x24, 0x33, 0x32, 0x04, 0x07, 0x00, 0xf0, 0xfe, // .7&.54>.$32..... - 0x64, 0xf4, 0x46, 0x4b, 0xc6, 0xfe, 0xfa, 0x31, 0x41, 0x11, 0x1b, 0x04, 0x03, 0x05, 0x01, 0x0a, // d.FK...1A....... - 0x02, 0x0c, 0x02, 0x07, 0x30, 0x15, 0x29, 0x18, 0x1e, 0x0b, 0x9d, 0xb5, 0x8e, 0xf0, 0x01, 0x4c, // ....0.)........L - 0xb6, 0xf4, 0x01, 0x9c, 0x03, 0x2e, 0xfe, 0xa4, 0xfe, 0xd9, 0xab, 0x08, 0xaf, 0x43, 0x0e, 0x08, // .............C.. - 0x02, 0x16, 0x12, 0x01, 0x04, 0x10, 0x04, 0x0f, 0x03, 0x0e, 0x02, 0x08, 0x35, 0x17, 0x38, 0x2e, // ............5.8. - 0x48, 0x28, 0x59, 0x01, 0x06, 0x96, 0x82, 0xed, 0xac, 0x65, 0xab, 0x00, 0x00, 0x03, 0x00, 0x00, // H(Y......e...... - 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x23, 0x00, 0x33, 0x00, 0x43, 0x00, 0x00, 0x01, 0x15, // .......#.3.C.... - 0x14, 0x02, 0x04, 0x20, 0x24, 0x02, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x1d, 0x01, // ... $.=.463!2... - 0x14, 0x1e, 0x03, 0x32, 0x3e, 0x03, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x11, // ...2>.=.463!2... - 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x05, 0x11, // ..#!"&5.463!2... - 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x06, 0x00, // ..#!"&5.463!2... - 0xc5, 0xfe, 0xa1, 0xfe, 0x48, 0xfe, 0xa1, 0xc5, 0x26, 0x1a, 0x01, 0x80, 0x1a, 0x26, 0x2f, 0x3c, // ....H...&....&/< - 0x52, 0x2e, 0x2a, 0x2e, 0x52, 0x3c, 0x2f, 0x26, 0x1a, 0x01, 0x80, 0x1a, 0x26, 0xfc, 0x00, 0x26, // R.*.R.7.#"&463!2...! - 0x32, 0x16, 0x02, 0x80, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x03, 0xcb, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, // 2...KjKKj..KjKKj - 0xcb, 0x20, 0x19, 0xfb, 0xec, 0x01, 0x07, 0x05, 0x18, 0x03, 0x98, 0x1a, 0x26, 0x26, 0x1a, 0xfc, // . ..........&&.. - 0x00, 0x1a, 0x26, 0x16, 0x25, 0x02, 0xb1, 0xcc, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0x00, 0x10, 0x19, // ..&.%....&&..... - 0x0f, 0x0b, 0x04, 0x07, 0x01, 0x04, 0xb1, 0x1a, 0x26, 0x35, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0x4b, // ........&5jKKjKK - 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0x03, 0xc0, 0xfe, 0x00, 0x18, 0x25, 0x03, 0x7a, 0x07, 0x1d, 0x18, // jKKjK.....%.z... - 0x0a, 0x10, 0x30, 0x26, 0x34, 0x26, 0x26, 0x1a, 0x0e, 0x33, 0x44, 0x04, 0x03, 0x37, 0x26, 0x34, // ..0&4&&..3D..7&4 - 0x26, 0x0d, 0x12, 0x1f, 0x16, 0x25, 0x07, 0x26, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x06, 0x80, // &....%.&........ - 0x05, 0x80, 0x00, 0x14, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, // ..........#!"&5. - 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x1d, 0x01, 0x21, 0x32, 0x16, 0x06, 0x80, 0x84, 0x5c, 0xfb, // 463!2...!2...... - 0x40, 0x5c, 0x84, 0x84, 0x5c, 0x01, 0x40, 0x5c, 0x84, 0x02, 0xa0, 0x5c, 0x84, 0x03, 0xa0, 0xfd, // @.....@......... - 0x40, 0x5c, 0x84, 0x84, 0x5c, 0x03, 0xc0, 0x5c, 0x84, 0x84, 0x5c, 0x20, 0x84, 0x00, 0x00, 0x00, // @.......... .... - 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x07, 0x57, 0x05, 0x80, 0x00, 0x13, 0x00, 0x2a, 0x00, 0x00, // .......W.....*.. - 0x01, 0x14, 0x07, 0x01, 0x0e, 0x01, 0x23, 0x21, 0x22, 0x26, 0x35, 0x34, 0x37, 0x01, 0x3e, 0x01, // ......#!"&547.>. - 0x33, 0x21, 0x32, 0x16, 0x01, 0x15, 0x21, 0x22, 0x06, 0x07, 0x01, 0x07, 0x34, 0x26, 0x35, 0x11, // 3!2...!"....4&5. - 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x1d, 0x01, 0x21, 0x32, 0x16, 0x07, 0x57, 0x1f, 0xfe, 0xb0, // 463!2...!2..W... - 0x2b, 0x9b, 0x42, 0xfb, 0xc0, 0x22, 0x35, 0x1f, 0x01, 0x50, 0x2b, 0x9b, 0x42, 0x04, 0x40, 0x22, // +.B.."5..P+.B.@" - 0x35, 0xfe, 0xa9, 0xfc, 0xc0, 0x5e, 0xce, 0x3d, 0xfe, 0xaf, 0x05, 0x01, 0x84, 0x5c, 0x01, 0x40, // 5....^.=.......@ - 0x5c, 0x84, 0x02, 0x20, 0x5c, 0x84, 0x02, 0x48, 0x1f, 0x23, 0xfe, 0x74, 0x33, 0x47, 0x1a, 0x1e, // ... ...H.#.t3G.. - 0x1f, 0x23, 0x01, 0x8c, 0x33, 0x47, 0x1a, 0x01, 0x3a, 0xa0, 0x5f, 0x48, 0xfe, 0x74, 0x06, 0x04, // .#..3G..:._H.t.. - 0x11, 0x04, 0x03, 0xc0, 0x5c, 0x84, 0x84, 0x5c, 0x20, 0x84, 0x00, 0x00, 0x00, 0x01, 0x00, 0x40, // ........ ......@ - 0xff, 0x00, 0x02, 0xc0, 0x06, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x14, 0x06, 0x2b, 0x01, 0x11, // .............+.. - 0x33, 0x32, 0x16, 0x14, 0x07, 0x01, 0x06, 0x22, 0x27, 0x01, 0x26, 0x34, 0x36, 0x3b, 0x01, 0x11, // 32....."'.&46;.. - 0x23, 0x22, 0x26, 0x34, 0x37, 0x01, 0x36, 0x32, 0x17, 0x01, 0x02, 0xc0, 0x26, 0x1a, 0x80, 0x80, // #"&47.62....&... - 0x1a, 0x26, 0x13, 0xff, 0x00, 0x13, 0x34, 0x13, 0xff, 0x00, 0x13, 0x26, 0x1a, 0x80, 0x80, 0x1a, // .&....4....&.... - 0x26, 0x13, 0x01, 0x00, 0x13, 0x34, 0x13, 0x01, 0x00, 0x04, 0xda, 0x34, 0x26, 0xfc, 0x00, 0x26, // &....4.....4&..& - 0x34, 0x13, 0xff, 0x00, 0x13, 0x13, 0x01, 0x00, 0x13, 0x34, 0x26, 0x04, 0x00, 0x26, 0x34, 0x13, // 4........4&..&4. - 0x01, 0x00, 0x13, 0x13, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x40, 0x07, 0x00, // .............@.. - 0x03, 0xc0, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x14, 0x07, 0x01, 0x06, 0x22, 0x26, 0x3d, 0x01, 0x21, // ..........."&=.! - 0x15, 0x14, 0x06, 0x22, 0x27, 0x01, 0x26, 0x34, 0x37, 0x01, 0x36, 0x32, 0x16, 0x1d, 0x01, 0x21, // ..."'.&47.62...! - 0x35, 0x34, 0x36, 0x32, 0x17, 0x01, 0x07, 0x00, 0x13, 0xff, 0x00, 0x13, 0x34, 0x26, 0xfc, 0x00, // 5462........4&.. - 0x26, 0x34, 0x13, 0xff, 0x00, 0x13, 0x13, 0x01, 0x00, 0x13, 0x34, 0x26, 0x04, 0x00, 0x26, 0x34, // &4........4&..&4 - 0x13, 0x01, 0x00, 0x02, 0x9a, 0x34, 0x13, 0xff, 0x00, 0x13, 0x26, 0x1a, 0x80, 0x80, 0x1a, 0x26, // .....4....&....& - 0x13, 0x01, 0x00, 0x13, 0x34, 0x13, 0x01, 0x00, 0x13, 0x26, 0x1a, 0x80, 0x80, 0x1a, 0x26, 0x13, // ....4....&....&. - 0xff, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0xff, 0x80, 0x07, 0x80, 0x05, 0x80, 0x00, 0x03, // ................ - 0x00, 0x07, 0x00, 0x0b, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x00, 0x01, 0x11, 0x21, 0x11, // ........./....!. - 0x01, 0x11, 0x21, 0x11, 0x01, 0x11, 0x21, 0x11, 0x01, 0x11, 0x21, 0x11, 0x01, 0x11, 0x34, 0x26, // ..!...!...!...4& - 0x23, 0x21, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x13, 0x11, 0x14, 0x06, // #!".....3!26.... - 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x02, 0x00, 0xff, 0x00, // #!"&5.463!2..... - 0x02, 0x80, 0xff, 0x00, 0x02, 0x80, 0xff, 0x00, 0x02, 0x80, 0xff, 0x00, 0x01, 0x80, 0x13, 0x0d, // ................ - 0xf9, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0x06, 0x40, 0x0d, 0x13, 0x80, 0x5e, 0x42, 0xf9, 0xc0, 0x42, // .......@...^B..B - 0x5e, 0x5e, 0x42, 0x06, 0x40, 0x42, 0x5e, 0x02, 0x00, 0xfe, 0x80, 0x01, 0x80, 0x02, 0x00, 0xfc, // ^^B.@B^......... - 0x80, 0x03, 0x80, 0xff, 0x00, 0xfd, 0x80, 0x02, 0x80, 0x01, 0x80, 0xfc, 0x00, 0x04, 0x00, 0xfb, // ................ - 0xa0, 0x04, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xfb, 0x40, 0x0d, 0x13, 0x13, 0x04, 0xcd, 0xfb, 0x40, // ........@......@ - 0x42, 0x5e, 0x5e, 0x42, 0x04, 0xc0, 0x42, 0x5e, 0x5e, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // B^^B..B^^....... - 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x30, 0x00, 0x40, 0x00, 0x00, 0x01, 0x06, 0x07, 0x36, // .......0.@.....6 - 0x37, 0x06, 0x07, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x17, 0x2e, 0x01, 0x27, 0x06, 0x15, 0x14, // 7..&#"......'... - 0x17, 0x26, 0x27, 0x15, 0x14, 0x16, 0x17, 0x06, 0x23, 0x22, 0x27, 0x1e, 0x01, 0x17, 0x06, 0x23, // .&'.....#"'....# - 0x22, 0x27, 0x16, 0x33, 0x32, 0x3e, 0x03, 0x35, 0x34, 0x27, 0x36, 0x01, 0x11, 0x14, 0x06, 0x23, // "'.32>.54'6....# - 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x05, 0x00, 0x38, 0x41, 0x44, // !"&5.463!2...8AD - 0x19, 0x41, 0x45, 0x3d, 0x5c, 0x57, 0x7b, 0x05, 0x81, 0xe2, 0x4f, 0x1d, 0x5b, 0x2f, 0x35, 0x64, // .AE=.W{...O.[/5d - 0x49, 0x1d, 0x16, 0x0d, 0x1a, 0x15, 0x6b, 0x44, 0x74, 0x91, 0x1a, 0x18, 0x94, 0xae, 0x70, 0xc4, // I.....kDt.....p. - 0x8c, 0x65, 0x31, 0x01, 0x3f, 0x01, 0x2a, 0xa9, 0x77, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, // .e1.?.*.w.@w..w. - 0xc0, 0x77, 0xa9, 0x03, 0x9e, 0x19, 0x09, 0x28, 0x4d, 0x26, 0x0d, 0x42, 0x7b, 0x57, 0x1d, 0x13, // .w.....(M&.B{W.. - 0x07, 0x74, 0x61, 0x32, 0x38, 0x72, 0x3d, 0x01, 0x19, 0x02, 0x4b, 0x75, 0x0e, 0x08, 0x04, 0x3f, // .ta28r=...Ku...? - 0x52, 0x01, 0x5a, 0x03, 0x5e, 0x47, 0x77, 0x9b, 0xa9, 0x54, 0x12, 0x09, 0x2d, 0x01, 0x02, 0xfc, // R.Z.^Gw..T..-... - 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0xa9, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // @w..w..w........ - 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x13, 0x00, 0x23, 0x00, 0x00, 0x01, 0x37, 0x23, 0x35, // .........#...7#5 - 0x34, 0x36, 0x3b, 0x01, 0x35, 0x23, 0x22, 0x06, 0x1d, 0x01, 0x23, 0x15, 0x33, 0x11, 0x21, 0x11, // 46;.5#"...#.3.!. - 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // ....#!"&5.463!2. - 0x05, 0x1b, 0x17, 0xc6, 0x1f, 0x38, 0x6e, 0xaf, 0x98, 0x84, 0x83, 0x83, 0x01, 0x06, 0x01, 0x94, // .....8n......... - 0xa9, 0x77, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0x02, 0x6a, 0xdb, 0x6d, // .w.@w..w..w..j.m - 0x31, 0x27, 0xdb, 0x90, 0x8d, 0x83, 0xdb, 0xfd, 0x85, 0x02, 0x7b, 0x01, 0xf6, 0xfc, 0x40, 0x77, // 1'........{...@w - 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0xa9, 0x00, 0x07, 0x00, 0x00, 0xff, 0x80, 0x07, 0x00, // ..w..w.......... - 0x05, 0x80, 0x00, 0x0f, 0x00, 0x17, 0x00, 0x1b, 0x00, 0x23, 0x00, 0x27, 0x00, 0x2e, 0x00, 0x3e, // .........#.'...> - 0x00, 0x00, 0x00, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, 0x32, 0x36, 0x35, 0x34, 0x36, // ...4&#"....26546 - 0x33, 0x32, 0x36, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x01, 0x21, 0x35, 0x21, 0x00, 0x10, // 326.."&462.!5!.. - 0x26, 0x20, 0x06, 0x10, 0x16, 0x20, 0x01, 0x21, 0x35, 0x21, 0x03, 0x21, 0x3d, 0x01, 0x21, 0x07, // & ... .!5!.!=.!. - 0x21, 0x25, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, // !%...#!"&5.463!2 - 0x16, 0x03, 0xa0, 0x12, 0x0e, 0x42, 0x5e, 0x12, 0x1c, 0x12, 0x38, 0x28, 0x0e, 0xf2, 0x96, 0xd4, // .....B^...8(.... - 0x96, 0x96, 0xd4, 0xfc, 0x96, 0x06, 0x00, 0xfa, 0x00, 0x04, 0x80, 0xe1, 0xfe, 0xc2, 0xe1, 0xe1, // ................ - 0x01, 0x3e, 0xfc, 0xe1, 0x01, 0x80, 0xfe, 0x80, 0x80, 0x06, 0x00, 0xfc, 0xc4, 0x40, 0xfd, 0x7c, // .>...........@.| - 0x06, 0x80, 0x4b, 0x35, 0xfa, 0x00, 0x35, 0x4b, 0x4b, 0x35, 0x06, 0x00, 0x35, 0x4b, 0x02, 0xb2, // ..K5..5KK5..5K.. - 0x1c, 0x12, 0x5e, 0x42, 0x0e, 0x12, 0x12, 0x0e, 0x28, 0x38, 0x08, 0xd4, 0x96, 0x96, 0xd4, 0x96, // ..^B....(8...... - 0xfc, 0xc2, 0x80, 0x01, 0x1f, 0x01, 0x3e, 0xe1, 0xe1, 0xfe, 0xc2, 0xe1, 0x04, 0x02, 0x80, 0xfe, // ......>......... - 0xc0, 0x76, 0x8a, 0x80, 0x80, 0xfb, 0x00, 0x35, 0x4b, 0x4b, 0x35, 0x05, 0x00, 0x35, 0x4b, 0x4b, // .v.....5KK5..5KK - 0x00, 0x02, 0x00, 0x00, 0xff, 0x48, 0x06, 0x93, 0x05, 0x80, 0x00, 0x15, 0x00, 0x47, 0x00, 0x00, // .....H.......G.. - 0x00, 0x34, 0x26, 0x22, 0x06, 0x15, 0x14, 0x17, 0x26, 0x23, 0x22, 0x06, 0x14, 0x16, 0x32, 0x36, // .4&"....&#"...26 - 0x35, 0x34, 0x27, 0x16, 0x33, 0x32, 0x01, 0x14, 0x06, 0x23, 0x22, 0x2e, 0x02, 0x27, 0x07, 0x17, // 54'.32...#"..'.. - 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x27, 0x01, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x12, 0x24, // ....#"'..#"&54.$ - 0x33, 0x32, 0x16, 0x15, 0x14, 0x07, 0x01, 0x37, 0x2e, 0x03, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, // 32.....7..54632. - 0x1e, 0x04, 0x03, 0x40, 0x70, 0xa0, 0x70, 0x13, 0x29, 0x2a, 0x50, 0x70, 0x70, 0xa0, 0x70, 0x13, // ...@p.p.)*Ppp.p. - 0x29, 0x2a, 0x50, 0x03, 0xc3, 0x62, 0x11, 0x09, 0x27, 0x22, 0x2b, 0x03, 0x60, 0xdc, 0x1c, 0x4e, // )*P..b..'"+.`..N - 0x2a, 0x28, 0x1c, 0xfd, 0x61, 0xb0, 0xbd, 0xa3, 0xcd, 0xbe, 0x01, 0x32, 0xa0, 0xa3, 0xcd, 0x83, // *(..a......2.... - 0x01, 0x63, 0x60, 0x03, 0x2e, 0x22, 0x20, 0x62, 0x11, 0x0d, 0x0a, 0x06, 0x50, 0x54, 0x59, 0x39, // .c`.." b....PTY9 - 0x03, 0xb0, 0xa0, 0x70, 0x70, 0x50, 0x2a, 0x29, 0x13, 0x70, 0xa0, 0x70, 0x70, 0x50, 0x2a, 0x29, // ...ppP*).p.ppP*) - 0x13, 0xfe, 0x00, 0x11, 0x62, 0x20, 0x22, 0x2e, 0x03, 0x60, 0xdc, 0x1c, 0x28, 0x2a, 0x4e, 0x1c, // ....b "..`..(*N. - 0x02, 0x9f, 0x83, 0xcd, 0xa3, 0xa0, 0x01, 0x32, 0xbe, 0xcd, 0xa3, 0xbd, 0xb0, 0xfe, 0x9d, 0x60, // .......2.......` - 0x03, 0x2b, 0x22, 0x27, 0x09, 0x11, 0x62, 0x0a, 0x06, 0x4d, 0x52, 0x5a, 0x42, 0x00, 0x00, 0x00, // .+"'..b..MRZB... - 0x00, 0x06, 0x00, 0x00, 0xff, 0x0f, 0x07, 0x80, 0x05, 0xf0, 0x00, 0x07, 0x00, 0x11, 0x00, 0x1b, // ................ - 0x00, 0x7f, 0x00, 0xbd, 0x00, 0xfb, 0x00, 0x00, 0x00, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, // .........4&"...2 - 0x01, 0x34, 0x26, 0x22, 0x06, 0x15, 0x14, 0x16, 0x32, 0x36, 0x11, 0x34, 0x26, 0x22, 0x06, 0x15, // .4&"....26.4&".. - 0x14, 0x16, 0x32, 0x36, 0x01, 0x15, 0x14, 0x06, 0x0f, 0x01, 0x06, 0x07, 0x16, 0x17, 0x16, 0x15, // ..26............ - 0x14, 0x07, 0x0e, 0x01, 0x23, 0x22, 0x2f, 0x01, 0x06, 0x07, 0x06, 0x07, 0x06, 0x2b, 0x01, 0x22, // ....#"/......+." - 0x26, 0x2f, 0x01, 0x26, 0x27, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x35, 0x34, 0x37, 0x3e, 0x01, // &/.&'..#"'&547>. - 0x37, 0x26, 0x2f, 0x01, 0x2e, 0x01, 0x3d, 0x01, 0x34, 0x36, 0x3f, 0x01, 0x36, 0x37, 0x26, 0x27, // 7&/...=.46?.67&' - 0x26, 0x35, 0x34, 0x37, 0x3e, 0x01, 0x33, 0x32, 0x1f, 0x01, 0x36, 0x37, 0x36, 0x37, 0x36, 0x3b, // &547>.32..67676; - 0x01, 0x32, 0x16, 0x1f, 0x01, 0x16, 0x17, 0x37, 0x36, 0x33, 0x32, 0x17, 0x16, 0x15, 0x14, 0x07, // .2.....7632..... - 0x0e, 0x01, 0x07, 0x16, 0x1f, 0x01, 0x1e, 0x01, 0x01, 0x15, 0x14, 0x07, 0x06, 0x07, 0x16, 0x15, // ................ - 0x14, 0x07, 0x06, 0x23, 0x22, 0x26, 0x27, 0x06, 0x22, 0x27, 0x0e, 0x01, 0x23, 0x22, 0x27, 0x26, // ...#"&'."'..#"'& - 0x35, 0x34, 0x37, 0x26, 0x27, 0x26, 0x3d, 0x01, 0x34, 0x37, 0x36, 0x37, 0x26, 0x35, 0x34, 0x37, // 547&'&=.4767&547 - 0x3e, 0x02, 0x33, 0x32, 0x16, 0x17, 0x36, 0x32, 0x17, 0x36, 0x3f, 0x01, 0x32, 0x17, 0x16, 0x15, // >.32..62.6?.2... - 0x14, 0x07, 0x16, 0x17, 0x16, 0x11, 0x15, 0x14, 0x07, 0x06, 0x07, 0x16, 0x15, 0x14, 0x07, 0x06, // ................ - 0x23, 0x22, 0x26, 0x27, 0x06, 0x22, 0x27, 0x0e, 0x01, 0x23, 0x22, 0x27, 0x26, 0x35, 0x34, 0x37, // #"&'."'..#"'&547 - 0x26, 0x27, 0x26, 0x3d, 0x01, 0x34, 0x37, 0x36, 0x37, 0x26, 0x35, 0x34, 0x37, 0x3e, 0x02, 0x33, // &'&=.4767&547>.3 - 0x32, 0x16, 0x17, 0x36, 0x32, 0x17, 0x36, 0x3f, 0x01, 0x32, 0x17, 0x16, 0x15, 0x14, 0x07, 0x16, // 2..62.6?.2...... - 0x17, 0x16, 0x03, 0x80, 0x96, 0xd4, 0x96, 0x96, 0xd4, 0x03, 0x96, 0x4c, 0x68, 0x4c, 0x4b, 0x6a, // ...........LhLKj - 0x4b, 0x4c, 0x68, 0x4c, 0x4b, 0x6a, 0x4b, 0xfe, 0x80, 0x0e, 0x09, 0x9b, 0x0b, 0x15, 0x22, 0x38, // KLhLKjK......."8 - 0x07, 0x07, 0x17, 0x77, 0x13, 0x0b, 0x0a, 0x73, 0x25, 0x28, 0x0b, 0x0c, 0x07, 0x17, 0xba, 0x0b, // ...w...s%(...... - 0x12, 0x01, 0x17, 0x22, 0x29, 0x76, 0x07, 0x0d, 0x0b, 0x0a, 0x90, 0x07, 0x0a, 0x3e, 0x10, 0x17, // ...")v.......>.. - 0x0c, 0x98, 0x0a, 0x0e, 0x0e, 0x09, 0x9b, 0x0b, 0x15, 0x22, 0x38, 0x07, 0x07, 0x16, 0x78, 0x13, // ........."8...x. - 0x0b, 0x0a, 0x73, 0x22, 0x2b, 0x0b, 0x0c, 0x07, 0x17, 0xba, 0x0b, 0x12, 0x01, 0x17, 0x22, 0x29, // ..s"+.........") - 0x76, 0x08, 0x0c, 0x0b, 0x0a, 0x90, 0x07, 0x0c, 0x3c, 0x0f, 0x17, 0x0b, 0x98, 0x0a, 0x0e, 0x02, // v.......<....... - 0x80, 0x95, 0x0c, 0x12, 0x33, 0x04, 0x7a, 0x02, 0x08, 0x4c, 0x0e, 0x14, 0x14, 0x14, 0x0e, 0x4c, // ....3.z..L.....L - 0x08, 0x02, 0x7a, 0x04, 0x33, 0x12, 0x0c, 0x95, 0x95, 0x0d, 0x11, 0x33, 0x04, 0x04, 0x3e, 0x38, // ..z.3......3..>8 - 0x02, 0x08, 0x4c, 0x0e, 0x14, 0x14, 0x14, 0x33, 0x29, 0x06, 0x04, 0x78, 0x04, 0x33, 0x11, 0x0d, // ..L....3)..x.3.. - 0x95, 0x95, 0x0c, 0x12, 0x33, 0x04, 0x7a, 0x02, 0x08, 0x4c, 0x0e, 0x14, 0x14, 0x14, 0x0e, 0x4c, // ....3.z..L.....L - 0x08, 0x02, 0x7a, 0x04, 0x33, 0x12, 0x0c, 0x95, 0x95, 0x0d, 0x11, 0x33, 0x04, 0x04, 0x3e, 0x38, // ..z.3......3..>8 - 0x02, 0x08, 0x4c, 0x0e, 0x14, 0x14, 0x14, 0x33, 0x29, 0x06, 0x04, 0x78, 0x04, 0x33, 0x11, 0x0d, // ..L....3)..x.3.. - 0x95, 0x02, 0x16, 0xd4, 0x96, 0x96, 0xd4, 0x96, 0xff, 0x00, 0x34, 0x4c, 0x4c, 0x34, 0x35, 0x4b, // ..........4LL45K - 0x4b, 0x04, 0x35, 0x34, 0x4c, 0x4c, 0x34, 0x35, 0x4b, 0x4b, 0xfe, 0x90, 0xb9, 0x0a, 0x13, 0x01, // K.54LL45KK...... - 0x18, 0x23, 0x29, 0x30, 0x43, 0x0a, 0x0a, 0x0c, 0x07, 0x1e, 0x77, 0x07, 0x5a, 0x13, 0x0c, 0x6c, // .#)0C.....w.Z..l - 0x2f, 0x18, 0x0f, 0x0a, 0x99, 0x0a, 0x15, 0x59, 0x07, 0x08, 0x85, 0x1b, 0x09, 0x0a, 0x0e, 0x4e, // /......Y.......N - 0x16, 0x2c, 0x26, 0x18, 0x01, 0x11, 0x0b, 0xb9, 0x0a, 0x13, 0x01, 0x18, 0x23, 0x29, 0x30, 0x43, // .,&.........#)0C - 0x0b, 0x09, 0x0c, 0x08, 0x1e, 0x76, 0x07, 0x5a, 0x12, 0x0e, 0x6c, 0x2e, 0x18, 0x0f, 0x0a, 0x99, // .....v.Z..l..... - 0x0a, 0x15, 0x59, 0x07, 0x08, 0x85, 0x1b, 0x09, 0x0a, 0x10, 0x4c, 0x16, 0x30, 0x22, 0x17, 0x02, // ..Y.......L.0".. - 0x11, 0xfd, 0xe0, 0x8c, 0x10, 0x0f, 0x1b, 0x19, 0x71, 0x19, 0x04, 0x03, 0x47, 0x5e, 0x15, 0x02, // ........q...G^.. - 0x02, 0x15, 0x5e, 0x47, 0x03, 0x04, 0x19, 0x71, 0x19, 0x1b, 0x0f, 0x10, 0x8c, 0x10, 0x0f, 0x1d, // ..^G...q........ - 0x17, 0x71, 0x19, 0x04, 0x03, 0x02, 0x24, 0x20, 0x5d, 0x15, 0x02, 0x02, 0x47, 0x29, 0x02, 0x46, // .q....$ ]...G).F - 0x03, 0x04, 0x19, 0x71, 0x17, 0x1d, 0x0f, 0x03, 0xf0, 0x8c, 0x10, 0x0f, 0x1b, 0x19, 0x71, 0x19, // ...q..........q. - 0x04, 0x03, 0x47, 0x5e, 0x15, 0x02, 0x02, 0x15, 0x5e, 0x47, 0x03, 0x04, 0x19, 0x71, 0x19, 0x1b, // ..G^....^G...q.. - 0x0f, 0x10, 0x8c, 0x10, 0x0f, 0x1d, 0x17, 0x71, 0x19, 0x04, 0x03, 0x02, 0x24, 0x20, 0x5d, 0x15, // .......q....$ ]. - 0x02, 0x02, 0x47, 0x29, 0x02, 0x46, 0x03, 0x04, 0x19, 0x71, 0x17, 0x1d, 0x0f, 0x00, 0x00, 0x00, // ..G).F...q...... - 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x07, 0x00, 0x05, 0x00, 0x00, 0x25, 0x00, 0x4f, 0x00, 0x00, // ...........%.O.. - 0x00, 0x10, 0x06, 0x04, 0x23, 0x22, 0x27, 0x06, 0x07, 0x06, 0x07, 0x23, 0x22, 0x26, 0x27, 0x26, // ....#"'....#"&'& - 0x34, 0x3e, 0x05, 0x37, 0x3e, 0x04, 0x37, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x24, 0x20, 0x04, 0x01, // 4>.7>.7..546$ .. - 0x14, 0x06, 0x07, 0x1e, 0x04, 0x17, 0x1e, 0x06, 0x14, 0x07, 0x0e, 0x01, 0x27, 0x26, 0x27, 0x26, // ............'&'& - 0x27, 0x06, 0x23, 0x20, 0x27, 0x16, 0x33, 0x32, 0x24, 0x37, 0x3e, 0x01, 0x35, 0x34, 0x27, 0x1e, // '.# '.32$7>.54'. - 0x01, 0x05, 0x80, 0xbc, 0xfe, 0xbb, 0xbf, 0x56, 0x5a, 0x7c, 0x9a, 0x24, 0x32, 0x03, 0x0b, 0x13, // .......VZ|.$2... - 0x02, 0x01, 0x01, 0x03, 0x02, 0x05, 0x03, 0x06, 0x01, 0x05, 0x24, 0x10, 0x1d, 0x15, 0x0a, 0x7c, // ..........$....| - 0x8e, 0xbc, 0x01, 0x45, 0x01, 0x7e, 0x01, 0x45, 0x02, 0x3c, 0x8e, 0x7c, 0x0a, 0x15, 0x1d, 0x10, // ...E.~.E.<.|.... - 0x24, 0x05, 0x01, 0x06, 0x03, 0x05, 0x02, 0x03, 0x01, 0x01, 0x03, 0x14, 0x0c, 0x32, 0x24, 0x9a, // $............2$. - 0x7c, 0x5a, 0x56, 0xfe, 0xf1, 0xc9, 0x3a, 0x1e, 0xa1, 0x01, 0x28, 0x74, 0x7d, 0x86, 0x17, 0x81, // |ZV...:...(t}... - 0x96, 0x03, 0x8b, 0xfe, 0xea, 0xec, 0x89, 0x10, 0x58, 0x28, 0x09, 0x07, 0x10, 0x0d, 0x03, 0x07, // ........X(...... - 0x06, 0x06, 0x04, 0x07, 0x03, 0x07, 0x01, 0x06, 0x26, 0x15, 0x25, 0x28, 0x18, 0x48, 0xd2, 0x77, // ........&.%(.H.w - 0x8b, 0xec, 0x89, 0x89, 0xfd, 0x89, 0x78, 0xd1, 0x48, 0x18, 0x28, 0x25, 0x15, 0x26, 0x06, 0x01, // ......x.H.(%.&.. - 0x07, 0x03, 0x07, 0x04, 0x06, 0x06, 0x07, 0x03, 0x0e, 0x10, 0x01, 0x07, 0x09, 0x28, 0x58, 0x10, // .............(X. - 0x84, 0x04, 0x5a, 0x54, 0x5c, 0xf0, 0x86, 0x4d, 0x4b, 0x47, 0xd6, 0x00, 0x00, 0x03, 0x00, 0x00, // ..ZT...MKG...... - 0xff, 0x80, 0x06, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x3c, 0x00, 0x6d, 0x00, 0x00, 0x24, 0x34, // .........<.m..$4 - 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x01, 0x34, 0x26, 0x23, 0x21, 0x34, 0x36, 0x35, 0x34, 0x26, // &"...2.4&#!4654& - 0x23, 0x0e, 0x02, 0x07, 0x06, 0x07, 0x0e, 0x06, 0x2b, 0x01, 0x11, 0x33, 0x32, 0x1e, 0x04, 0x17, // #.......+..32... - 0x16, 0x3b, 0x01, 0x32, 0x35, 0x34, 0x27, 0x3e, 0x01, 0x34, 0x27, 0x36, 0x35, 0x34, 0x26, 0x27, // .;.254'>.4'654&' - 0x3e, 0x01, 0x37, 0x14, 0x07, 0x16, 0x15, 0x14, 0x07, 0x16, 0x15, 0x14, 0x07, 0x16, 0x06, 0x2b, // >.7............+ - 0x02, 0x22, 0x26, 0x27, 0x26, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x36, // ."&'&#!"&5.463!6 - 0x37, 0x36, 0x37, 0x3e, 0x02, 0x37, 0x36, 0x33, 0x32, 0x1e, 0x01, 0x15, 0x14, 0x07, 0x33, 0x32, // 767>.7632.....32 - 0x16, 0x01, 0x00, 0x26, 0x34, 0x26, 0x26, 0x34, 0x04, 0xa6, 0x4e, 0x32, 0xfe, 0xa0, 0x60, 0x40, // ...&4&&4..N2..`@ - 0x60, 0x1a, 0x18, 0x25, 0x29, 0x16, 0x37, 0x04, 0x26, 0x19, 0x2c, 0x24, 0x29, 0x27, 0x10, 0x20, // `..%).7.&.,$)'. - 0x20, 0x0d, 0x25, 0x1d, 0x2f, 0x17, 0x30, 0x05, 0xd3, 0x83, 0x79, 0xc0, 0x05, 0x1e, 0x23, 0x12, // .%./.0...y...#. - 0x35, 0x14, 0x0f, 0x20, 0x2b, 0x80, 0x31, 0x09, 0x26, 0x03, 0x3c, 0x01, 0xac, 0x8d, 0x24, 0x5d, // 5.. +.1.&.<...$] - 0x60, 0xbb, 0x7b, 0x74, 0x16, 0xfe, 0xe0, 0x35, 0x4b, 0x4b, 0x35, 0x01, 0x12, 0x24, 0x65, 0x3a, // `.{t...5KK5..$e: - 0x31, 0x18, 0x17, 0x26, 0x2b, 0x27, 0x33, 0x54, 0x86, 0x46, 0x30, 0xb0, 0x68, 0x98, 0xa6, 0x34, // 1..&+'3T.F0.h..4 - 0x26, 0x26, 0x34, 0x26, 0x02, 0x80, 0x33, 0x4d, 0x3a, 0xcb, 0x3b, 0x62, 0x5e, 0x1a, 0x76, 0x85, // &&4&..3M:.;b^.v. - 0x2b, 0x17, 0x44, 0x05, 0x32, 0x20, 0x35, 0x23, 0x24, 0x12, 0xfd, 0x80, 0x06, 0x07, 0x0f, 0x08, // +.D.2 5#$....... - 0x11, 0x02, 0x49, 0xa7, 0x1a, 0x1e, 0x10, 0x49, 0x4a, 0x20, 0x32, 0x45, 0x19, 0x3d, 0x11, 0x01, // ..I....IJ 2E.=.. - 0x5c, 0x24, 0x59, 0x4a, 0x21, 0x24, 0x4d, 0x43, 0x15, 0x16, 0x65, 0x4d, 0x8b, 0xa1, 0x2d, 0x2b, // .$YJ!$MC..eM..-+ - 0x28, 0x4b, 0x35, 0x02, 0x80, 0x35, 0x4b, 0x18, 0x83, 0x4b, 0x35, 0x19, 0x79, 0x84, 0x2a, 0x25, // (K5..5K..K5.y.*% - 0x41, 0x8a, 0x75, 0x5d, 0x63, 0x98, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x00, 0x06, 0x00, // A.u]c........... - 0x05, 0x80, 0x00, 0x07, 0x00, 0x3d, 0x00, 0x70, 0x00, 0x00, 0x00, 0x34, 0x26, 0x22, 0x06, 0x14, // .....=.p...4&".. - 0x16, 0x32, 0x01, 0x34, 0x26, 0x27, 0x3e, 0x01, 0x35, 0x34, 0x27, 0x36, 0x34, 0x26, 0x27, 0x36, // .2.4&'>.54'64&'6 - 0x35, 0x34, 0x26, 0x2b, 0x01, 0x22, 0x07, 0x0e, 0x05, 0x2b, 0x01, 0x11, 0x33, 0x32, 0x1e, 0x05, // 54&+."...+..32.. - 0x17, 0x16, 0x17, 0x1e, 0x02, 0x17, 0x32, 0x36, 0x35, 0x34, 0x26, 0x35, 0x21, 0x32, 0x36, 0x37, // ......2654&5!267 - 0x14, 0x06, 0x2b, 0x01, 0x16, 0x15, 0x14, 0x07, 0x0e, 0x01, 0x23, 0x22, 0x27, 0x2e, 0x03, 0x27, // ..+.......#"'..' - 0x26, 0x27, 0x26, 0x27, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x37, 0x3e, // &'&'!"&5.463!27> - 0x01, 0x3b, 0x01, 0x32, 0x16, 0x07, 0x15, 0x16, 0x15, 0x14, 0x07, 0x16, 0x15, 0x14, 0x07, 0x16, // .;.2............ - 0x01, 0x00, 0x26, 0x34, 0x26, 0x26, 0x34, 0x04, 0xa6, 0x2b, 0x20, 0x0f, 0x14, 0x35, 0x12, 0x23, // ..&4&&4..+ ..5.# - 0x1e, 0x05, 0x62, 0x57, 0x80, 0x83, 0xd3, 0x05, 0x30, 0x17, 0x2f, 0x1d, 0x25, 0x0d, 0x20, 0x20, // ..bW....0./.%. - 0x10, 0x27, 0x29, 0x24, 0x2c, 0x19, 0x26, 0x04, 0x37, 0x16, 0x29, 0x25, 0x18, 0x1a, 0x60, 0x40, // .')$,.&.7.)%..`@ - 0x60, 0x01, 0x60, 0x32, 0x4e, 0x80, 0x98, 0x68, 0xb0, 0x30, 0x23, 0x23, 0x86, 0x54, 0x33, 0x27, // `.`2N..h.0##.T3' - 0x22, 0x28, 0x0b, 0x18, 0x13, 0x30, 0x3b, 0x65, 0x24, 0xfe, 0xee, 0x35, 0x4b, 0x4b, 0x35, 0x01, // "(...0;e$..5KK5. - 0x20, 0x16, 0x74, 0x80, 0xbe, 0x69, 0x70, 0x8c, 0xad, 0x01, 0x3c, 0x03, 0x26, 0x09, 0x31, 0x04, // .t..ip...<.&.1. - 0x26, 0x34, 0x26, 0x26, 0x34, 0x26, 0xfe, 0x00, 0x23, 0x5c, 0x01, 0x11, 0x3d, 0x19, 0x45, 0x32, // &4&&4&..#...=.E2 - 0x20, 0x4a, 0x49, 0x10, 0x1e, 0x1a, 0x55, 0x52, 0x49, 0x02, 0x11, 0x08, 0x0f, 0x07, 0x06, 0xfd, // JI...URI....... - 0x80, 0x12, 0x24, 0x23, 0x35, 0x20, 0x32, 0x05, 0x44, 0x17, 0x2b, 0x85, 0x76, 0x1a, 0x5e, 0x62, // ..$#5 2.D.+.v.^b - 0x3b, 0xcb, 0x3a, 0x4d, 0x32, 0x67, 0x98, 0x63, 0x5d, 0x76, 0x44, 0x45, 0x41, 0x25, 0x21, 0x62, // ;.:M2g.c]vDEA%!b - 0x53, 0x56, 0x15, 0x32, 0x4d, 0x83, 0x18, 0x4b, 0x35, 0x02, 0x80, 0x35, 0x4b, 0x28, 0x2c, 0x2c, // SV.2M..K5..5K(,, - 0x9e, 0x89, 0x05, 0x4d, 0x65, 0x16, 0x15, 0x43, 0x4d, 0x24, 0x21, 0x4a, 0x00, 0x01, 0x00, 0x00, // ...Me..CM$!J.... + 0x15, 0x13, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x02, 0x2f, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, // ....;.26./...a.. + 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x02, 0xb2, 0x12, 0x0d, 0xc0, 0x0d, 0x14, 0x14, // ...^............ + 0x0d, 0xc0, 0x0d, 0x12, 0x02, 0x12, 0x0a, 0x0a, 0x0e, 0xdc, 0x0e, 0x0a, 0x0a, 0x11, 0x14, 0x0e, // ................ + 0xb9, 0x0e, 0x13, 0x05, 0x80, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, // .........^.....a + 0x01, 0xa2, 0x01, 0x61, 0xfb, 0xef, 0xbe, 0x0e, 0x13, 0x14, 0x0d, 0xbe, 0x0d, 0x14, 0x13, 0x01, // ...a............ + 0x66, 0x02, 0x6d, 0x0c, 0x06, 0x08, 0x08, 0x06, 0x0c, 0xfd, 0x93, 0x0a, 0x0f, 0x0f, 0x00, 0x00, // f.m............. + 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x40, 0x00, 0x0d, 0x00, 0x16, 0x00, 0x1f, // .........@...... + 0x00, 0x4a, 0x00, 0x00, 0x25, 0x35, 0x11, 0x35, 0x21, 0x15, 0x11, 0x15, 0x14, 0x16, 0x3b, 0x01, // .J..%5.5!.....;. + 0x32, 0x36, 0x01, 0x33, 0x27, 0x26, 0x23, 0x22, 0x06, 0x14, 0x16, 0x24, 0x34, 0x26, 0x23, 0x22, // 26.3'&#"...$4&#" + 0x0f, 0x01, 0x33, 0x32, 0x05, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, // ..32....+....#!" + 0x26, 0x35, 0x11, 0x23, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x22, 0x26, 0x34, 0x36, // &5.#"&5.463!"&46 + 0x33, 0x32, 0x1f, 0x01, 0x37, 0x36, 0x33, 0x32, 0x16, 0x14, 0x06, 0x23, 0x21, 0x32, 0x16, 0x03, // 32..7632...#!2.. + 0xa0, 0xfe, 0xc0, 0x24, 0x1c, 0xc0, 0x1c, 0x24, 0xfe, 0x38, 0xc3, 0x7e, 0x1a, 0x2b, 0x28, 0x38, // ...$...$.8.~.+(8 + 0x38, 0x02, 0xd8, 0x38, 0x28, 0x2b, 0x1a, 0x7d, 0xc2, 0x28, 0x01, 0xb0, 0x12, 0x0e, 0x60, 0x38, // 8..8(+.}.(....`8 + 0x28, 0xfb, 0xc0, 0x28, 0x38, 0x60, 0x0e, 0x12, 0x12, 0x0e, 0x01, 0xb8, 0x5d, 0x83, 0x83, 0x5d, // (..(8`......]..] + 0x6b, 0x3d, 0x80, 0x80, 0x3d, 0x6b, 0x5d, 0x83, 0x83, 0x5d, 0x01, 0xb8, 0x0e, 0x12, 0xb4, 0x38, // k=..=k]..].....8 + 0x01, 0xd4, 0xc0, 0xc0, 0xfe, 0x2c, 0x38, 0x19, 0x1b, 0x1b, 0x03, 0x65, 0xa1, 0x1f, 0x38, 0x50, // .....,8....e..8P + 0x38, 0x38, 0x50, 0x38, 0x1f, 0xa1, 0xa0, 0xfe, 0xc0, 0x0e, 0x12, 0xfe, 0x60, 0x28, 0x38, 0x38, // 88P8........`(88 + 0x28, 0x01, 0xa0, 0x12, 0x0e, 0x01, 0x40, 0x0e, 0x12, 0x83, 0xba, 0x83, 0x4d, 0xa5, 0xa5, 0x4d, // (.....@.....M..M + 0x83, 0xba, 0x83, 0x12, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x05, 0x80, 0x00, 0x15, // ................ + 0x00, 0x4e, 0x00, 0x00, 0x00, 0x34, 0x26, 0x23, 0x22, 0x04, 0x06, 0x07, 0x06, 0x15, 0x14, 0x16, // .N...4&#"....... + 0x33, 0x32, 0x37, 0x3e, 0x01, 0x37, 0x36, 0x24, 0x33, 0x32, 0x01, 0x14, 0x07, 0x06, 0x00, 0x07, // 327>.76$32...... + 0x06, 0x23, 0x22, 0x27, 0x2e, 0x01, 0x23, 0x22, 0x0e, 0x02, 0x23, 0x22, 0x26, 0x27, 0x2e, 0x03, // .#"'..#"..#"&'.. + 0x35, 0x34, 0x3e, 0x02, 0x35, 0x34, 0x26, 0x27, 0x26, 0x35, 0x34, 0x3e, 0x02, 0x37, 0x3e, 0x04, // 54>.54&'&54>.7>. + 0x37, 0x3e, 0x04, 0x33, 0x32, 0x1e, 0x02, 0x05, 0x00, 0x26, 0x1a, 0xac, 0xfe, 0xdc, 0xe3, 0x7a, // 7>.32....&.....z + 0x13, 0x26, 0x1a, 0x18, 0x15, 0x1b, 0x5e, 0x14, 0x89, 0x01, 0x07, 0xb6, 0x1a, 0x02, 0x26, 0x14, // .&....^.......&. + 0x2e, 0xfe, 0xeb, 0xdb, 0xd6, 0xe0, 0x94, 0x8a, 0x0f, 0x92, 0x17, 0x10, 0x2f, 0x2b, 0x3e, 0x1d, // ............/+>. + 0x2b, 0x29, 0x19, 0x02, 0x08, 0x03, 0x03, 0x3e, 0x4a, 0x3e, 0x1c, 0x02, 0x09, 0x57, 0x97, 0xbe, // +).....>J>...W.. + 0x6d, 0x37, 0xb4, 0xb3, 0xb2, 0x95, 0x27, 0x0a, 0x27, 0x14, 0x22, 0x27, 0x18, 0x27, 0x3f, 0x20, // m7....'.'."'.'? + 0x10, 0x03, 0x26, 0x34, 0x26, 0x63, 0xa9, 0x87, 0x15, 0x18, 0x1a, 0x26, 0x13, 0x18, 0x5e, 0x13, // ..&4&c.....&..^. + 0x7c, 0x68, 0x01, 0x06, 0x5f, 0x62, 0xe0, 0xfe, 0xc2, 0x6d, 0x6c, 0x2f, 0x05, 0x4a, 0x40, 0x4c, // |h.._b...ml/.J@L + 0x40, 0x23, 0x2a, 0x04, 0x0e, 0x06, 0x0d, 0x07, 0x23, 0x4d, 0x36, 0x3a, 0x13, 0x04, 0x44, 0x0a, // @#*.....#M6:..D. + 0x33, 0x35, 0x73, 0xd2, 0x9f, 0x77, 0x24, 0x12, 0x0f, 0x03, 0x09, 0x27, 0x25, 0x0a, 0x27, 0x11, // 35s..w$....'%.'. + 0x17, 0x09, 0x5c, 0x84, 0x74, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x00, 0x05, 0x80, // ....t........... + 0x06, 0x00, 0x00, 0x0f, 0x00, 0x33, 0x00, 0x00, 0x05, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // .....3......#!"& + 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x14, 0x0e, 0x05, 0x15, 0x14, 0x17, 0x27, // =.463!2........' + 0x17, 0x2e, 0x04, 0x35, 0x34, 0x3e, 0x05, 0x35, 0x34, 0x27, 0x17, 0x27, 0x1e, 0x04, 0x05, 0x80, // ...54>.54'.'.... + 0x13, 0x0d, 0xfa, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0x05, 0x40, 0x0d, 0x13, 0xff, 0x00, 0x31, 0x4f, // .........@....1O + 0x60, 0x60, 0x4f, 0x31, 0x43, 0x04, 0x01, 0x5a, 0x8c, 0x89, 0x5a, 0x37, 0x31, 0x4f, 0x60, 0x60, // ``O1C..Z..Z71O`` + 0x4f, 0x31, 0x42, 0x03, 0x01, 0x5a, 0x8c, 0x89, 0x5a, 0x37, 0xa0, 0x40, 0x0d, 0x13, 0x13, 0x0d, // O1B..Z..Z7.@.... + 0x40, 0x0d, 0x13, 0x13, 0x04, 0x13, 0x4e, 0x84, 0x5d, 0x53, 0x48, 0x48, 0x5b, 0x33, 0x60, 0x80, // @.....N.]SHH[3`. + 0x01, 0x01, 0x29, 0x54, 0x74, 0x81, 0xac, 0x62, 0x4e, 0x84, 0x5d, 0x53, 0x48, 0x48, 0x5b, 0x33, // ..)Tt..bN.]SHH[3 + 0x5e, 0x82, 0x01, 0x01, 0x29, 0x54, 0x74, 0x81, 0xac, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // ^...)Tt......... + 0x00, 0x00, 0x07, 0x00, 0x04, 0x80, 0x00, 0x11, 0x00, 0x21, 0x00, 0x31, 0x00, 0x00, 0x01, 0x26, // .........!.1...& + 0x27, 0x16, 0x15, 0x14, 0x00, 0x20, 0x00, 0x35, 0x34, 0x37, 0x06, 0x07, 0x16, 0x04, 0x20, 0x24, // '.... .547.... $ + 0x00, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, 0x32, 0x36, 0x35, 0x34, 0x36, 0x33, 0x32, // .4&#"....2654632 + 0x00, 0x14, 0x07, 0x06, 0x00, 0x20, 0x00, 0x27, 0x26, 0x34, 0x37, 0x36, 0x00, 0x20, 0x00, 0x17, // ..... .'&476. .. + 0x06, 0x80, 0x98, 0xe5, 0x3d, 0xfe, 0xf9, 0xfe, 0x8e, 0xfe, 0xf9, 0x3d, 0xe5, 0x98, 0x85, 0x01, // ....=......=.... + 0x91, 0x01, 0xd4, 0x01, 0x91, 0xfd, 0xb5, 0x1c, 0x14, 0x7d, 0xb3, 0x1c, 0x28, 0x1c, 0x7a, 0x56, // .........}..(.zV + 0x14, 0x03, 0x6c, 0x14, 0x8c, 0xfe, 0x27, 0xfd, 0xf2, 0xfe, 0x27, 0x8c, 0x14, 0x14, 0x8c, 0x01, // ..l...'...'..... + 0xd9, 0x02, 0x0e, 0x01, 0xd9, 0x8c, 0x02, 0x40, 0xec, 0x75, 0x68, 0x79, 0xb9, 0xfe, 0xf9, 0x01, // .......@.uhy.... + 0x07, 0xb9, 0x79, 0x68, 0x75, 0xec, 0xcd, 0xf3, 0xf3, 0x02, 0x39, 0x28, 0x1c, 0xb3, 0x7d, 0x14, // ..yhu.....9(..}. + 0x1c, 0x1c, 0x14, 0x56, 0x7a, 0xfe, 0xd2, 0x44, 0x23, 0xe6, 0xfe, 0xeb, 0x01, 0x16, 0xe5, 0x23, // ...Vz..D#......# + 0x44, 0x23, 0xe5, 0x01, 0x16, 0xfe, 0xea, 0xe5, 0x00, 0x05, 0x00, 0x00, 0xff, 0xa0, 0x07, 0x00, // D#.............. + 0x04, 0xe0, 0x00, 0x09, 0x00, 0x19, 0x00, 0x3d, 0x00, 0x43, 0x00, 0x55, 0x00, 0x00, 0x25, 0x37, // .......=.C.U..%7 + 0x2e, 0x01, 0x35, 0x34, 0x37, 0x06, 0x07, 0x12, 0x00, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, // ..547....4&#"... + 0x16, 0x32, 0x36, 0x35, 0x34, 0x36, 0x33, 0x32, 0x25, 0x14, 0x07, 0x06, 0x00, 0x0f, 0x01, 0x06, // .2654632%....... + 0x23, 0x22, 0x27, 0x26, 0x35, 0x34, 0x37, 0x2e, 0x01, 0x27, 0x26, 0x34, 0x37, 0x36, 0x00, 0x21, // #"'&547..'&476.! + 0x32, 0x17, 0x37, 0x36, 0x33, 0x32, 0x1e, 0x03, 0x17, 0x16, 0x13, 0x14, 0x06, 0x07, 0x01, 0x16, // 2.7632.......... + 0x04, 0x14, 0x07, 0x06, 0x07, 0x06, 0x04, 0x23, 0x37, 0x36, 0x24, 0x37, 0x26, 0x27, 0x37, 0x1e, // .......#76$7&'7. + 0x01, 0x17, 0x02, 0x2b, 0x4e, 0x57, 0x62, 0x3d, 0xe5, 0x98, 0xa7, 0x02, 0x89, 0x1c, 0x14, 0x7d, // ...+NWb=.......} + 0xb3, 0x1c, 0x28, 0x1c, 0x7a, 0x56, 0x14, 0x01, 0x87, 0x01, 0x6a, 0xfe, 0x5c, 0x69, 0x31, 0x0a, // ..(.zV....j..i1. + 0x12, 0x0c, 0x7a, 0x10, 0x2c, 0x8f, 0xf1, 0x58, 0x14, 0x14, 0x99, 0x01, 0xc6, 0x01, 0x0d, 0x59, // ..z.,..X.......Y + 0x5b, 0x36, 0x0a, 0x12, 0x05, 0x1a, 0x24, 0x1e, 0x21, 0x03, 0x10, 0x25, 0x9e, 0x82, 0x01, 0x18, // [6....$.!..%.... + 0x08, 0x01, 0xc0, 0x14, 0x27, 0x46, 0x96, 0xfe, 0x75, 0xde, 0x4a, 0xd4, 0x01, 0x69, 0x79, 0x73, // ....'F..u.J..iys + 0xa7, 0x3f, 0x5f, 0xaf, 0x39, 0xc9, 0x8d, 0x3f, 0xc0, 0x6b, 0x79, 0x68, 0x75, 0xec, 0xfe, 0xfe, // .?_.9..?.kyhu... + 0x02, 0x6e, 0x28, 0x1c, 0xb3, 0x7d, 0x14, 0x1c, 0x1c, 0x14, 0x56, 0x7a, 0xef, 0x07, 0x02, 0xbd, // .n(..}....Vz.... + 0xfd, 0x0c, 0xbc, 0x59, 0x10, 0x46, 0x0a, 0x12, 0x0c, 0x4b, 0x41, 0xd8, 0x89, 0x1f, 0x4c, 0x1f, // ...Y.F...KA...L. + 0xeb, 0x01, 0x10, 0x11, 0x61, 0x10, 0x0c, 0x13, 0x12, 0x13, 0x02, 0x0a, 0xfe, 0x30, 0x8b, 0xe5, // ....a........0.. + 0x32, 0x01, 0xf6, 0x2d, 0x84, 0x46, 0x22, 0x40, 0x51, 0xac, 0xbe, 0x84, 0x12, 0xee, 0xbc, 0xb3, // 2..-.F"@Q....... + 0x73, 0x70, 0x40, 0xb2, 0x5f, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x10, 0xff, 0x80, 0x06, 0xf0, // sp@._........... + 0x06, 0x00, 0x00, 0x0f, 0x00, 0x21, 0x00, 0x33, 0x00, 0x00, 0x25, 0x35, 0x34, 0x26, 0x2b, 0x01, // .....!.3..%54&+. + 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x03, 0x13, 0x34, 0x27, 0x26, 0x2b, // ".....;.26..4'&+ + 0x01, 0x22, 0x07, 0x06, 0x15, 0x13, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x03, 0x01, 0x16, 0x07, // ."......;.26.... + 0x0e, 0x01, 0x23, 0x21, 0x22, 0x26, 0x27, 0x26, 0x37, 0x01, 0x3e, 0x01, 0x32, 0x16, 0x04, 0x00, // ..#!"&'&7.>.2... + 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x02, 0x12, 0x0a, 0x0d, 0x0b, 0xdc, // ................ + 0x0b, 0x0d, 0x0a, 0x11, 0x14, 0x0e, 0xb9, 0x0e, 0x13, 0x0d, 0x03, 0x00, 0x23, 0x25, 0x11, 0x3b, // ............#%.; + 0x22, 0xfa, 0x00, 0x22, 0x3b, 0x11, 0x25, 0x23, 0x03, 0x00, 0x11, 0x3c, 0x46, 0x3c, 0xa1, 0xbe, // "..";.%#.....`,@L... + 0x11, 0x80, 0x07, 0x0c, 0x04, 0x03, 0x0f, 0x06, 0xfe, 0xe9, 0xfe, 0xfd, 0x35, 0x05, 0x0d, 0x60, // ............5..` + 0x09, 0x0e, 0x02, 0x0f, 0x09, 0xbd, 0xfc, 0x0b, 0x02, 0x01, 0x0a, 0x60, 0x09, 0x0e, 0x06, 0x02, // ...........`.... + 0xc2, 0x01, 0x03, 0xfe, 0x04, 0x0e, 0x03, 0x02, 0x0b, 0x80, 0x0e, 0x10, 0x02, 0x99, 0xa0, 0x4c, // ...............L + 0xc0, 0x05, 0x60, 0x34, 0xc0, 0x4c, 0xa1, 0xfd, 0x48, 0x13, 0x0e, 0x60, 0x06, 0x01, 0x03, 0x0d, // ..`4.L..H..`.... + 0x01, 0xfc, 0xfe, 0xfd, 0xc2, 0x11, 0x0e, 0x60, 0x09, 0x02, 0x0b, 0xfc, 0xbd, 0x07, 0x10, 0x0d, // .......`........ + 0x0c, 0x61, 0x09, 0x01, 0x35, 0x01, 0x03, 0x01, 0x17, 0x08, 0x10, 0x10, 0x0b, 0x80, 0x0d, 0x05, // .a..5........... + 0x9f, 0xa0, 0x4c, 0x40, 0x00, 0x0f, 0x00, 0x00, 0xff, 0x00, 0x06, 0x80, 0x06, 0x00, 0x00, 0x03, // ..L@............ + 0x00, 0x07, 0x00, 0x0b, 0x00, 0x0f, 0x00, 0x13, 0x00, 0x17, 0x00, 0x1b, 0x00, 0x1f, 0x00, 0x23, // ...............# + 0x00, 0x33, 0x00, 0x37, 0x00, 0x3b, 0x00, 0x3f, 0x00, 0x4f, 0x00, 0x73, 0x00, 0x00, 0x17, 0x21, // .3.7.;.?.O.s...! + 0x11, 0x21, 0x01, 0x21, 0x11, 0x21, 0x25, 0x21, 0x11, 0x21, 0x01, 0x21, 0x11, 0x21, 0x25, 0x21, // .!.!.!%!.!.!.!%! + 0x11, 0x21, 0x01, 0x21, 0x11, 0x21, 0x01, 0x21, 0x11, 0x21, 0x01, 0x21, 0x11, 0x21, 0x25, 0x21, // .!.!.!.!.!.!.!%! + 0x11, 0x21, 0x01, 0x11, 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x3b, 0x01, // .!..4&+.".....;. + 0x32, 0x36, 0x01, 0x21, 0x11, 0x21, 0x25, 0x21, 0x11, 0x21, 0x01, 0x21, 0x11, 0x21, 0x37, 0x11, // 26.!.!%!.!.!.!7. + 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x25, 0x11, // 4&+.".....;.26%. + 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x35, 0x34, 0x36, 0x3b, // ..#!"&5.46;.546; + 0x01, 0x32, 0x16, 0x1d, 0x01, 0x21, 0x35, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x1d, 0x01, 0x33, // .2...!546;.2...3 + 0x32, 0x16, 0x80, 0x01, 0x20, 0xfe, 0xe0, 0x01, 0x60, 0x01, 0x40, 0xfe, 0xc0, 0xfe, 0xa0, 0x01, // 2... ...`.@..... + 0x20, 0xfe, 0xe0, 0x01, 0x60, 0x01, 0x40, 0xfe, 0xc0, 0xfe, 0xa0, 0x01, 0x20, 0xfe, 0xe0, 0x02, // ...`.@..... ... + 0xe0, 0x01, 0x40, 0xfe, 0xc0, 0xfe, 0x80, 0x01, 0x40, 0xfe, 0xc0, 0x03, 0x00, 0x01, 0x20, 0xfe, // ..@.....@..... . + 0xe0, 0xfe, 0x80, 0x01, 0x40, 0xfe, 0xc0, 0xfe, 0xa0, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0x0d, // ....@......@.... + 0x40, 0x0d, 0x13, 0x02, 0xe0, 0x01, 0x20, 0xfe, 0xe0, 0xfe, 0x80, 0x01, 0x40, 0xfe, 0xc0, 0x01, // @..... .....@... + 0x80, 0x01, 0x20, 0xfe, 0xe0, 0x20, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, // .. .. ..@....@.. + 0x01, 0x80, 0x4c, 0x34, 0xfa, 0x80, 0x34, 0x4c, 0x4c, 0x34, 0x80, 0x5e, 0x42, 0x40, 0x42, 0x5e, // ..L4..4LL4.^B@B^ + 0x01, 0x80, 0x5e, 0x42, 0x40, 0x42, 0x5e, 0x80, 0x34, 0x4c, 0x80, 0x01, 0x20, 0xfe, 0xe0, 0x01, // ..^B@B^.4L.. ... + 0x20, 0x40, 0x01, 0x40, 0xfe, 0xc0, 0x01, 0x40, 0x40, 0x01, 0x20, 0xfc, 0x00, 0x01, 0x20, 0x01, // @.@...@@. ... . + 0xc0, 0x01, 0x20, 0xfc, 0x00, 0x01, 0x20, 0x40, 0x01, 0x40, 0x02, 0x20, 0x01, 0x20, 0x0d, 0x13, // .. ... @.@. . .. + 0x13, 0x0d, 0xfe, 0xe0, 0x0d, 0x13, 0x13, 0xfc, 0xad, 0x01, 0x40, 0x40, 0x01, 0x20, 0xfe, 0xe0, // ..........@@. .. + 0x01, 0x20, 0xc0, 0x01, 0x20, 0x0d, 0x13, 0x13, 0x0d, 0xfe, 0xe0, 0x0d, 0x13, 0x13, 0x4d, 0xfb, // . .. .........M. + 0x00, 0x34, 0x4c, 0x4c, 0x34, 0x05, 0x00, 0x34, 0x4c, 0x60, 0x42, 0x5e, 0x5e, 0x42, 0x60, 0x60, // .4LL4..4L`B^^B`` + 0x42, 0x5e, 0x5e, 0x42, 0x60, 0x4c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0xa0, 0x07, 0x00, // B^^B`L.......... + 0x05, 0xe0, 0x00, 0x12, 0x00, 0x37, 0x00, 0x71, 0x00, 0x00, 0x01, 0x06, 0x07, 0x2e, 0x04, 0x2b, // .....7.q.......+ + 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x00, 0x14, 0x07, 0x01, 0x06, 0x23, // ."&=.46;.2.....# + 0x22, 0x26, 0x3d, 0x01, 0x22, 0x0e, 0x01, 0x2e, 0x06, 0x27, 0x36, 0x37, 0x1e, 0x04, 0x33, 0x21, // "&=."....'67..3! + 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x01, 0x12, 0x14, 0x07, 0x01, 0x06, 0x23, 0x22, 0x26, 0x3d, // 54632.......#"&= + 0x01, 0x21, 0x22, 0x0e, 0x02, 0x07, 0x06, 0x07, 0x0e, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, // .!".......+."&=. + 0x34, 0x36, 0x3b, 0x01, 0x32, 0x3e, 0x02, 0x37, 0x36, 0x37, 0x3e, 0x06, 0x33, 0x21, 0x35, 0x34, // 46;.2>.767>.3!54 + 0x36, 0x33, 0x32, 0x17, 0x01, 0x02, 0x9a, 0x3c, 0x4d, 0x16, 0x1e, 0x33, 0x33, 0x4b, 0x2c, 0xe0, // 632....mB + 0x5a, 0x78, 0x50, 0x56, 0x33, 0x21, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x1e, 0x3c, 0x3f, 0x2e, 0x3e, // ZxPV3!...... + 0x6d, 0x42, 0x5a, 0x78, 0x50, 0x56, 0x33, 0x21, 0xc0, 0x0e, 0x12, 0x0a, 0xfe, 0xc1, 0x00, 0x00, // mBZxPV3!........ + 0x00, 0x01, 0x00, 0x00, 0xff, 0x00, 0x07, 0x00, 0x05, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x10, // ...........&.... + 0x02, 0x04, 0x23, 0x22, 0x27, 0x06, 0x05, 0x06, 0x07, 0x06, 0x26, 0x27, 0x35, 0x26, 0x36, 0x26, // ..#"'.....&'5&6& + 0x3e, 0x02, 0x37, 0x3e, 0x05, 0x37, 0x26, 0x02, 0x35, 0x34, 0x3e, 0x01, 0x24, 0x33, 0x32, 0x04, // >.7>.7&.54>.$32. + 0x07, 0x00, 0xf0, 0xfe, 0x64, 0xf4, 0x46, 0x4b, 0xc6, 0xfe, 0xfa, 0x31, 0x41, 0x11, 0x1b, 0x04, // ....d.FK...1A... + 0x03, 0x05, 0x01, 0x0a, 0x02, 0x0c, 0x02, 0x07, 0x30, 0x15, 0x29, 0x18, 0x1e, 0x0b, 0x9d, 0xb5, // ........0.)..... + 0x8e, 0xf0, 0x01, 0x4c, 0xb6, 0xf4, 0x01, 0x9c, 0x03, 0x2e, 0xfe, 0xa4, 0xfe, 0xd9, 0xab, 0x08, // ...L............ + 0xaf, 0x43, 0x0e, 0x08, 0x02, 0x16, 0x12, 0x01, 0x04, 0x10, 0x04, 0x0f, 0x03, 0x0e, 0x02, 0x08, // .C.............. + 0x35, 0x17, 0x38, 0x2e, 0x48, 0x28, 0x59, 0x01, 0x06, 0x96, 0x82, 0xed, 0xac, 0x65, 0xab, 0x00, // 5.8.H(Y......e.. + 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x23, 0x00, 0x33, 0x00, 0x43, // ...........#.3.C + 0x00, 0x00, 0x01, 0x15, 0x14, 0x02, 0x04, 0x20, 0x24, 0x02, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, // ....... $.=.463! + 0x32, 0x16, 0x1d, 0x01, 0x14, 0x1e, 0x03, 0x32, 0x3e, 0x03, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, // 2......2>.=.463! + 0x32, 0x16, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, // 2.....#!"&5.463! + 0x32, 0x16, 0x05, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, // 2.....#!"&5.463! + 0x32, 0x16, 0x06, 0x00, 0xc5, 0xfe, 0xa1, 0xfe, 0x48, 0xfe, 0xa1, 0xc5, 0x26, 0x1a, 0x01, 0x80, // 2.......H...&... + 0x1a, 0x26, 0x2f, 0x3c, 0x52, 0x2e, 0x2a, 0x2e, 0x52, 0x3c, 0x2f, 0x26, 0x1a, 0x01, 0x80, 0x1a, // .&/.7.#"&463!2. + 0x04, 0x17, 0x21, 0x32, 0x16, 0x02, 0x80, 0x4c, 0x68, 0x4c, 0x4c, 0x68, 0x03, 0xcc, 0x4c, 0x68, // ..!2...LhLLh..Lh + 0x4c, 0x4c, 0x68, 0xcc, 0x21, 0x18, 0xfb, 0xec, 0x0d, 0x18, 0x03, 0x98, 0x1a, 0x26, 0x26, 0x1a, // LLh.!........&&. + 0xfc, 0x00, 0x1a, 0x26, 0x10, 0x10, 0x1b, 0x02, 0xb1, 0xcc, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0x00, // ...&.......&&... + 0x10, 0x19, 0x0e, 0x0c, 0x04, 0x07, 0x01, 0x04, 0xb1, 0x1a, 0x26, 0x34, 0x68, 0x4c, 0x4c, 0x68, // ..........&4hLLh + 0x4c, 0x4c, 0x68, 0x4c, 0x4c, 0x68, 0x4c, 0x03, 0xc0, 0xfe, 0x00, 0x18, 0x25, 0x03, 0x7a, 0x3c, // LLhLLhL.....%.z< + 0x0a, 0x10, 0x30, 0x26, 0x34, 0x26, 0x26, 0x1a, 0x0b, 0x29, 0x1f, 0x31, 0x05, 0x03, 0x37, 0x26, // ..0&4&&..).1..7& + 0x34, 0x26, 0x0d, 0x12, 0x1f, 0x15, 0x26, 0x07, 0x26, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // 4&....&.&....... + 0x00, 0x00, 0x06, 0x80, 0x05, 0x80, 0x00, 0x14, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, // ..............#! + 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x1d, 0x01, 0x21, 0x32, 0x16, 0x06, // "&5.463!2...!2.. + 0x80, 0x84, 0x5c, 0xfb, 0x40, 0x5c, 0x84, 0x84, 0x5c, 0x01, 0x40, 0x5c, 0x84, 0x02, 0xa0, 0x5c, // ....@.....@..... + 0x84, 0x03, 0xa0, 0xfd, 0x40, 0x5c, 0x84, 0x84, 0x5c, 0x03, 0xc0, 0x5c, 0x84, 0x84, 0x5c, 0x20, // ....@.......... + 0x84, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x07, 0x57, 0x05, 0x80, 0x00, 0x13, // ...........W.... + 0x00, 0x2a, 0x00, 0x00, 0x01, 0x14, 0x07, 0x01, 0x0e, 0x01, 0x23, 0x21, 0x22, 0x26, 0x35, 0x34, // .*........#!"&54 + 0x37, 0x01, 0x3e, 0x01, 0x33, 0x21, 0x32, 0x16, 0x01, 0x15, 0x21, 0x22, 0x06, 0x07, 0x01, 0x07, // 7.>.3!2...!".... + 0x34, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x1d, 0x01, 0x21, 0x32, 0x16, 0x07, // 4&5.463!2...!2.. + 0x57, 0x1f, 0xfe, 0xb0, 0x2b, 0x9b, 0x42, 0xfb, 0xc0, 0x22, 0x35, 0x1f, 0x01, 0x50, 0x2b, 0x9b, // W...+.B.."5..P+. + 0x42, 0x04, 0x40, 0x22, 0x35, 0xfe, 0xa9, 0xfc, 0xc0, 0x5e, 0xce, 0x3d, 0xfe, 0xaf, 0x05, 0x01, // B.@"5....^.=.... + 0x84, 0x5c, 0x01, 0x40, 0x5c, 0x84, 0x02, 0x20, 0x5c, 0x84, 0x02, 0x48, 0x1f, 0x23, 0xfe, 0x74, // ...@... ...H.#.t + 0x33, 0x47, 0x1a, 0x1e, 0x1f, 0x23, 0x01, 0x8c, 0x33, 0x47, 0x1a, 0x01, 0x3a, 0xa0, 0x5f, 0x48, // 3G...#..3G..:._H + 0xfe, 0x74, 0x06, 0x04, 0x11, 0x04, 0x03, 0xc0, 0x5c, 0x84, 0x84, 0x5c, 0x20, 0x84, 0x00, 0x00, // .t.......... ... + 0x00, 0x01, 0x00, 0x40, 0xff, 0x00, 0x02, 0xc0, 0x06, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x14, // ...@............ + 0x06, 0x2b, 0x01, 0x11, 0x33, 0x32, 0x16, 0x14, 0x07, 0x01, 0x06, 0x22, 0x27, 0x01, 0x26, 0x34, // .+..32....."'.&4 + 0x36, 0x3b, 0x01, 0x11, 0x23, 0x22, 0x26, 0x34, 0x37, 0x01, 0x36, 0x32, 0x17, 0x01, 0x02, 0xc0, // 6;..#"&47.62.... + 0x26, 0x1a, 0x80, 0x80, 0x1a, 0x26, 0x13, 0xff, 0x00, 0x13, 0x34, 0x13, 0xff, 0x00, 0x13, 0x26, // &....&....4....& + 0x1a, 0x80, 0x80, 0x1a, 0x26, 0x13, 0x01, 0x00, 0x13, 0x34, 0x13, 0x01, 0x00, 0x04, 0xda, 0x34, // ....&....4.....4 + 0x26, 0xfc, 0x00, 0x26, 0x34, 0x13, 0xff, 0x00, 0x13, 0x13, 0x01, 0x00, 0x13, 0x34, 0x26, 0x04, // &..&4........4&. + 0x00, 0x26, 0x34, 0x13, 0x01, 0x00, 0x13, 0x13, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // .&4............. + 0x01, 0x40, 0x07, 0x00, 0x03, 0xc0, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x14, 0x07, 0x01, 0x06, 0x22, // .@............." + 0x26, 0x3d, 0x01, 0x21, 0x15, 0x14, 0x06, 0x22, 0x27, 0x01, 0x26, 0x34, 0x37, 0x01, 0x36, 0x32, // &=.!..."'.&47.62 + 0x16, 0x1d, 0x01, 0x21, 0x35, 0x34, 0x36, 0x32, 0x17, 0x01, 0x07, 0x00, 0x13, 0xff, 0x00, 0x13, // ...!5462........ + 0x34, 0x26, 0xfc, 0x00, 0x26, 0x34, 0x13, 0xff, 0x00, 0x13, 0x13, 0x01, 0x00, 0x13, 0x34, 0x26, // 4&..&4........4& + 0x04, 0x00, 0x26, 0x34, 0x13, 0x01, 0x00, 0x02, 0x9a, 0x34, 0x13, 0xff, 0x00, 0x13, 0x26, 0x1a, // ..&4.....4....&. + 0x80, 0x80, 0x1a, 0x26, 0x13, 0x01, 0x00, 0x13, 0x34, 0x13, 0x01, 0x00, 0x13, 0x26, 0x1a, 0x80, // ...&....4....&.. + 0x80, 0x1a, 0x26, 0x13, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0xff, 0x80, 0x08, 0x00, // ..&............. + 0x05, 0x80, 0x00, 0x03, 0x00, 0x07, 0x00, 0x0d, 0x00, 0x11, 0x00, 0x15, 0x00, 0x00, 0x01, 0x11, // ................ + 0x21, 0x11, 0x01, 0x11, 0x21, 0x11, 0x01, 0x15, 0x21, 0x11, 0x33, 0x11, 0x01, 0x11, 0x21, 0x11, // !...!...!.3...!. + 0x01, 0x11, 0x21, 0x11, 0x02, 0x80, 0xff, 0x00, 0x02, 0x80, 0xff, 0x00, 0x05, 0x00, 0xf8, 0x00, // ..!............. + 0x80, 0x05, 0x00, 0xff, 0x00, 0x02, 0x80, 0xff, 0x00, 0x02, 0x80, 0xfe, 0x00, 0x02, 0x00, 0x02, // ................ + 0x00, 0xfc, 0x00, 0x04, 0x00, 0xfb, 0x80, 0x80, 0x06, 0x00, 0xfa, 0x80, 0x03, 0x80, 0xfd, 0x00, // ................ + 0x03, 0x00, 0x01, 0x80, 0xfb, 0x80, 0x04, 0x80, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // ................ + 0x05, 0x80, 0x00, 0x30, 0x00, 0x40, 0x00, 0x00, 0x01, 0x06, 0x07, 0x36, 0x37, 0x06, 0x07, 0x26, // ...0.@.....67..& + 0x23, 0x22, 0x06, 0x15, 0x14, 0x17, 0x2e, 0x01, 0x27, 0x06, 0x15, 0x14, 0x17, 0x26, 0x27, 0x15, // #"......'....&'. + 0x14, 0x16, 0x17, 0x06, 0x23, 0x22, 0x27, 0x1e, 0x01, 0x17, 0x06, 0x23, 0x22, 0x27, 0x16, 0x33, // ....#"'....#"'.3 + 0x32, 0x3e, 0x03, 0x35, 0x34, 0x27, 0x36, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, // 2>.54'6....#!"&5 + 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x05, 0x00, 0x38, 0x41, 0x44, 0x19, 0x41, 0x45, 0x3d, // .463!2...8AD.AE= + 0x5c, 0x57, 0x7b, 0x05, 0x81, 0xe2, 0x4f, 0x1d, 0x5b, 0x2f, 0x35, 0x64, 0x49, 0x1d, 0x16, 0x0d, // .W{...O.[/5dI... + 0x1a, 0x15, 0x6b, 0x44, 0x74, 0x91, 0x1a, 0x18, 0x94, 0xae, 0x70, 0xc4, 0x8c, 0x65, 0x31, 0x01, // ..kDt.....p..e1. + 0x3f, 0x01, 0x2a, 0xa9, 0x77, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0x03, // ?.*.w.@w..w..w.. + 0x9e, 0x19, 0x09, 0x28, 0x4d, 0x26, 0x0d, 0x42, 0x7b, 0x57, 0x1d, 0x13, 0x07, 0x74, 0x61, 0x32, // ...(M&.B{W...ta2 + 0x38, 0x72, 0x3d, 0x01, 0x19, 0x02, 0x4b, 0x75, 0x0e, 0x08, 0x04, 0x3f, 0x52, 0x01, 0x5a, 0x03, // 8r=...Ku...?R.Z. + 0x5e, 0x47, 0x77, 0x9b, 0xa9, 0x54, 0x12, 0x09, 0x2d, 0x01, 0x02, 0xfc, 0x40, 0x77, 0xa9, 0xa9, // ^Gw..T..-...@w.. + 0x77, 0x03, 0xc0, 0x77, 0xa9, 0xa9, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // w..w............ + 0x05, 0x80, 0x00, 0x24, 0x00, 0x00, 0x01, 0x32, 0x16, 0x15, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x11, // ...$...2.....+.. + 0x33, 0x37, 0x23, 0x35, 0x34, 0x36, 0x33, 0x37, 0x35, 0x26, 0x23, 0x22, 0x06, 0x1d, 0x01, 0x23, // 37#546375&#"...# + 0x15, 0x33, 0x11, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x04, 0xe0, 0x77, 0xa9, 0xa9, // .3.!"&5.463..w.. + 0x77, 0xbc, 0xc7, 0x1e, 0xe5, 0x2f, 0x44, 0x7a, 0x3f, 0x73, 0x88, 0xa3, 0xc8, 0xc8, 0xfd, 0xec, // w..../Dz?s...... + 0x77, 0xa9, 0xa9, 0x77, 0x05, 0x80, 0xa9, 0x77, 0xfc, 0x40, 0x77, 0xa9, 0x02, 0x53, 0xe8, 0x94, // w..w...w.@w..S.. + 0x38, 0x38, 0x01, 0xcf, 0x09, 0xa0, 0x92, 0xab, 0xe8, 0xfd, 0xad, 0xa9, 0x77, 0x03, 0xc0, 0x77, // 88..........w..w + 0xa9, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0xff, 0x80, 0x07, 0x00, 0x05, 0x80, 0x00, 0x0f, // ................ + 0x00, 0x17, 0x00, 0x1b, 0x00, 0x23, 0x00, 0x27, 0x00, 0x2e, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x34, // .....#.'...>...4 + 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, 0x32, 0x36, 0x35, 0x34, 0x36, 0x33, 0x32, 0x36, 0x14, // &#"....26546326. + 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x01, 0x21, 0x35, 0x21, 0x00, 0x10, 0x26, 0x20, 0x06, 0x10, // ."&462.!5!..& .. + 0x16, 0x20, 0x01, 0x21, 0x35, 0x21, 0x03, 0x21, 0x3d, 0x01, 0x21, 0x07, 0x21, 0x25, 0x11, 0x14, // . .!5!.!=.!.!%.. + 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x03, 0xa0, 0x12, // .#!"&5.463!2.... + 0x0e, 0x42, 0x5e, 0x12, 0x1c, 0x12, 0x38, 0x28, 0x0e, 0xf2, 0x96, 0xd4, 0x96, 0x96, 0xd4, 0xfc, // .B^...8(........ + 0x96, 0x06, 0x00, 0xfa, 0x00, 0x04, 0x80, 0xe1, 0xfe, 0xc2, 0xe1, 0xe1, 0x01, 0x3e, 0xfc, 0xe1, // .............>.. + 0x01, 0x80, 0xfe, 0x80, 0x80, 0x06, 0x00, 0xfc, 0xc4, 0x40, 0xfd, 0x7c, 0x06, 0x80, 0x4b, 0x35, // .........@.|..K5 + 0xfa, 0x00, 0x35, 0x4b, 0x4b, 0x35, 0x06, 0x00, 0x35, 0x4b, 0x02, 0xb2, 0x1c, 0x12, 0x5e, 0x42, // ..5KK5..5K....^B + 0x0e, 0x12, 0x12, 0x0e, 0x28, 0x38, 0x08, 0xd4, 0x96, 0x96, 0xd4, 0x96, 0xfc, 0xc2, 0x80, 0x01, // ....(8.......... + 0x1f, 0x01, 0x3e, 0xe1, 0xe1, 0xfe, 0xc2, 0xe1, 0x04, 0x02, 0x80, 0xfe, 0xc0, 0x76, 0x8a, 0x80, // ..>..........v.. + 0x80, 0xfb, 0x00, 0x35, 0x4b, 0x4b, 0x35, 0x05, 0x00, 0x35, 0x4b, 0x4b, 0x00, 0x02, 0x00, 0x00, // ...5KK5..5KK.... + 0xff, 0x48, 0x06, 0x93, 0x05, 0x80, 0x00, 0x15, 0x00, 0x47, 0x00, 0x00, 0x00, 0x34, 0x26, 0x22, // .H.......G...4&" + 0x06, 0x15, 0x14, 0x17, 0x26, 0x23, 0x22, 0x06, 0x14, 0x16, 0x32, 0x36, 0x35, 0x34, 0x27, 0x16, // ....&#"...2654'. + 0x33, 0x32, 0x01, 0x14, 0x06, 0x23, 0x22, 0x2e, 0x02, 0x27, 0x07, 0x17, 0x16, 0x15, 0x14, 0x06, // 32...#"..'...... + 0x23, 0x22, 0x27, 0x01, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x12, 0x24, 0x33, 0x32, 0x16, 0x15, // #"'..#"&54.$32.. + 0x14, 0x07, 0x01, 0x37, 0x2e, 0x03, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x1e, 0x04, 0x03, 0x40, // ...7..54632....@ + 0x70, 0xa0, 0x70, 0x13, 0x29, 0x2a, 0x50, 0x70, 0x70, 0xa0, 0x70, 0x13, 0x29, 0x2a, 0x50, 0x03, // p.p.)*Ppp.p.)*P. + 0xc3, 0x62, 0x11, 0x09, 0x27, 0x22, 0x2b, 0x03, 0x60, 0xdc, 0x1c, 0x4e, 0x2a, 0x28, 0x1c, 0xfd, // .b..'"+.`..N*(.. + 0x61, 0xb0, 0xbd, 0xa3, 0xcd, 0xbe, 0x01, 0x32, 0xa0, 0xa3, 0xcd, 0x83, 0x01, 0x63, 0x60, 0x03, // a......2.....c`. + 0x2e, 0x22, 0x20, 0x62, 0x11, 0x0d, 0x0a, 0x06, 0x50, 0x54, 0x59, 0x39, 0x03, 0xb0, 0xa0, 0x70, // ." b....PTY9...p + 0x70, 0x50, 0x2a, 0x29, 0x13, 0x70, 0xa0, 0x70, 0x70, 0x50, 0x2a, 0x29, 0x13, 0xfe, 0x00, 0x11, // pP*).p.ppP*).... + 0x62, 0x20, 0x22, 0x2e, 0x03, 0x60, 0xdc, 0x1c, 0x28, 0x2a, 0x4e, 0x1c, 0x02, 0x9f, 0x83, 0xcd, // b "..`..(*N..... + 0xa3, 0xa0, 0x01, 0x32, 0xbe, 0xcd, 0xa3, 0xbd, 0xb0, 0xfe, 0x9d, 0x60, 0x03, 0x2b, 0x22, 0x27, // ...2.......`.+"' + 0x09, 0x11, 0x62, 0x0a, 0x06, 0x4d, 0x52, 0x5a, 0x42, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, // ..b..MRZB....... + 0xff, 0x0f, 0x07, 0x80, 0x05, 0xf0, 0x00, 0x07, 0x00, 0x11, 0x00, 0x1b, 0x00, 0x7f, 0x00, 0xbd, // ................ + 0x00, 0xfb, 0x00, 0x00, 0x00, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x01, 0x34, 0x26, 0x22, // .....4&"...2.4&" + 0x06, 0x15, 0x14, 0x16, 0x32, 0x36, 0x11, 0x34, 0x26, 0x22, 0x06, 0x15, 0x14, 0x16, 0x32, 0x36, // ....26.4&"....26 + 0x01, 0x15, 0x14, 0x06, 0x0f, 0x01, 0x06, 0x07, 0x16, 0x17, 0x16, 0x15, 0x14, 0x07, 0x0e, 0x01, // ................ + 0x23, 0x22, 0x2f, 0x01, 0x06, 0x07, 0x06, 0x07, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x2f, 0x01, 0x26, // #"/......+."&/.& + 0x27, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x35, 0x34, 0x37, 0x3e, 0x01, 0x37, 0x26, 0x2f, 0x01, // '..#"'&547>.7&/. + 0x2e, 0x01, 0x3d, 0x01, 0x34, 0x36, 0x3f, 0x01, 0x36, 0x37, 0x26, 0x27, 0x26, 0x35, 0x34, 0x37, // ..=.46?.67&'&547 + 0x3e, 0x01, 0x33, 0x32, 0x1f, 0x01, 0x36, 0x37, 0x36, 0x37, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x1f, // >.32..67676;.2.. + 0x01, 0x16, 0x17, 0x37, 0x36, 0x33, 0x32, 0x17, 0x16, 0x15, 0x14, 0x07, 0x0e, 0x01, 0x07, 0x16, // ...7632......... + 0x1f, 0x01, 0x1e, 0x01, 0x01, 0x15, 0x14, 0x07, 0x06, 0x07, 0x16, 0x15, 0x14, 0x07, 0x06, 0x23, // ...............# + 0x22, 0x26, 0x27, 0x06, 0x22, 0x27, 0x0e, 0x01, 0x23, 0x22, 0x27, 0x26, 0x35, 0x34, 0x37, 0x26, // "&'."'..#"'&547& + 0x27, 0x26, 0x3d, 0x01, 0x34, 0x37, 0x36, 0x37, 0x26, 0x35, 0x34, 0x37, 0x3e, 0x02, 0x33, 0x32, // '&=.4767&547>.32 + 0x16, 0x17, 0x36, 0x32, 0x17, 0x36, 0x3f, 0x01, 0x32, 0x17, 0x16, 0x15, 0x14, 0x07, 0x16, 0x17, // ..62.6?.2....... + 0x16, 0x11, 0x15, 0x14, 0x07, 0x06, 0x07, 0x16, 0x15, 0x14, 0x07, 0x06, 0x23, 0x22, 0x26, 0x27, // ............#"&' + 0x06, 0x22, 0x27, 0x0e, 0x01, 0x23, 0x22, 0x27, 0x26, 0x35, 0x34, 0x37, 0x26, 0x27, 0x26, 0x3d, // ."'..#"'&547&'&= + 0x01, 0x34, 0x37, 0x36, 0x37, 0x26, 0x35, 0x34, 0x37, 0x3e, 0x02, 0x33, 0x32, 0x16, 0x17, 0x36, // .4767&547>.32..6 + 0x32, 0x17, 0x36, 0x3f, 0x01, 0x32, 0x17, 0x16, 0x15, 0x14, 0x07, 0x16, 0x17, 0x16, 0x03, 0x80, // 2.6?.2.......... + 0x96, 0xd4, 0x96, 0x96, 0xd4, 0x03, 0x96, 0x4c, 0x68, 0x4c, 0x4b, 0x6a, 0x4b, 0x4c, 0x68, 0x4c, // .......LhLKjKLhL + 0x4b, 0x6a, 0x4b, 0xfe, 0x80, 0x0e, 0x09, 0x9b, 0x0b, 0x15, 0x22, 0x38, 0x07, 0x07, 0x17, 0x77, // KjK......."8...w + 0x13, 0x0b, 0x0a, 0x73, 0x25, 0x28, 0x0b, 0x0c, 0x07, 0x17, 0xba, 0x0b, 0x12, 0x01, 0x17, 0x22, // ...s%(........." + 0x29, 0x76, 0x07, 0x0d, 0x0b, 0x0a, 0x90, 0x07, 0x0a, 0x3e, 0x10, 0x17, 0x0c, 0x98, 0x0a, 0x0e, // )v.......>...... + 0x0e, 0x09, 0x9b, 0x0b, 0x15, 0x22, 0x38, 0x07, 0x07, 0x16, 0x78, 0x13, 0x0b, 0x0a, 0x73, 0x22, // ....."8...x...s" + 0x2b, 0x0b, 0x0c, 0x07, 0x17, 0xba, 0x0b, 0x12, 0x01, 0x17, 0x22, 0x29, 0x76, 0x08, 0x0c, 0x0b, // +.........")v... + 0x0a, 0x90, 0x07, 0x0c, 0x3c, 0x0f, 0x17, 0x0b, 0x98, 0x0a, 0x0e, 0x02, 0x80, 0x95, 0x0c, 0x12, // ....<........... + 0x33, 0x04, 0x7a, 0x02, 0x08, 0x4c, 0x0e, 0x14, 0x14, 0x14, 0x0e, 0x4c, 0x08, 0x02, 0x7a, 0x04, // 3.z..L.....L..z. + 0x33, 0x12, 0x0c, 0x95, 0x95, 0x0d, 0x11, 0x33, 0x04, 0x04, 0x3e, 0x38, 0x02, 0x08, 0x4c, 0x0e, // 3......3..>8..L. + 0x14, 0x14, 0x14, 0x33, 0x29, 0x06, 0x04, 0x78, 0x04, 0x33, 0x11, 0x0d, 0x95, 0x95, 0x0c, 0x12, // ...3)..x.3...... + 0x33, 0x04, 0x7a, 0x02, 0x08, 0x4c, 0x0e, 0x14, 0x14, 0x14, 0x0e, 0x4c, 0x08, 0x02, 0x7a, 0x04, // 3.z..L.....L..z. + 0x33, 0x12, 0x0c, 0x95, 0x95, 0x0d, 0x11, 0x33, 0x04, 0x04, 0x3e, 0x38, 0x02, 0x08, 0x4c, 0x0e, // 3......3..>8..L. + 0x14, 0x14, 0x14, 0x33, 0x29, 0x06, 0x04, 0x78, 0x04, 0x33, 0x11, 0x0d, 0x95, 0x02, 0x16, 0xd4, // ...3)..x.3...... + 0x96, 0x96, 0xd4, 0x96, 0xff, 0x00, 0x34, 0x4c, 0x4c, 0x34, 0x35, 0x4b, 0x4b, 0x04, 0x35, 0x34, // ......4LL45KK.54 + 0x4c, 0x4c, 0x34, 0x35, 0x4b, 0x4b, 0xfe, 0x90, 0xb9, 0x0a, 0x13, 0x01, 0x18, 0x23, 0x29, 0x30, // LL45KK.......#)0 + 0x43, 0x0b, 0x09, 0x0c, 0x07, 0x1e, 0x77, 0x07, 0x5a, 0x13, 0x0c, 0x6c, 0x2f, 0x18, 0x0f, 0x0a, // C.....w.Z..l/... + 0x99, 0x0a, 0x15, 0x59, 0x07, 0x08, 0x85, 0x1b, 0x09, 0x0a, 0x0e, 0x4e, 0x16, 0x2c, 0x26, 0x18, // ...Y.......N.,&. + 0x01, 0x11, 0x0b, 0xb9, 0x0a, 0x13, 0x01, 0x18, 0x23, 0x29, 0x30, 0x43, 0x0b, 0x09, 0x0c, 0x08, // ........#)0C.... + 0x1e, 0x76, 0x07, 0x5a, 0x12, 0x0e, 0x6c, 0x2e, 0x18, 0x0f, 0x0a, 0x99, 0x0a, 0x15, 0x59, 0x07, // .v.Z..l.......Y. + 0x08, 0x85, 0x1b, 0x08, 0x0b, 0x10, 0x4c, 0x16, 0x30, 0x22, 0x17, 0x02, 0x11, 0xfd, 0xe0, 0x8c, // ......L.0"...... + 0x10, 0x0f, 0x1b, 0x19, 0x71, 0x19, 0x04, 0x03, 0x47, 0x5e, 0x15, 0x02, 0x02, 0x15, 0x5e, 0x47, // ....q...G^....^G + 0x03, 0x04, 0x19, 0x71, 0x19, 0x1b, 0x0f, 0x10, 0x8c, 0x10, 0x0f, 0x1d, 0x17, 0x71, 0x19, 0x04, // ...q.........q.. + 0x03, 0x02, 0x24, 0x20, 0x5d, 0x15, 0x02, 0x02, 0x47, 0x29, 0x02, 0x46, 0x03, 0x04, 0x19, 0x71, // ..$ ]...G).F...q + 0x17, 0x1d, 0x0f, 0x03, 0xf0, 0x8c, 0x10, 0x0f, 0x1b, 0x19, 0x71, 0x19, 0x04, 0x03, 0x47, 0x5e, // ..........q...G^ + 0x15, 0x02, 0x02, 0x15, 0x5e, 0x47, 0x03, 0x04, 0x19, 0x71, 0x19, 0x1b, 0x0f, 0x10, 0x8c, 0x10, // ....^G...q...... + 0x0f, 0x1d, 0x17, 0x71, 0x19, 0x04, 0x03, 0x02, 0x24, 0x20, 0x5d, 0x15, 0x02, 0x02, 0x47, 0x29, // ...q....$ ]...G) + 0x02, 0x46, 0x03, 0x04, 0x19, 0x71, 0x17, 0x1d, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // .F...q.......... + 0xff, 0x80, 0x07, 0x00, 0x05, 0x00, 0x00, 0x25, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x10, 0x06, 0x04, // .......%.O...... + 0x23, 0x22, 0x27, 0x06, 0x07, 0x06, 0x07, 0x23, 0x22, 0x26, 0x27, 0x26, 0x34, 0x3e, 0x05, 0x37, // #"'....#"&'&4>.7 + 0x3e, 0x04, 0x37, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x24, 0x20, 0x04, 0x01, 0x14, 0x06, 0x07, 0x1e, // >.7..546$ ...... + 0x04, 0x17, 0x1e, 0x06, 0x14, 0x07, 0x0e, 0x01, 0x27, 0x26, 0x27, 0x26, 0x27, 0x06, 0x23, 0x20, // ........'&'&'.# + 0x27, 0x16, 0x33, 0x32, 0x24, 0x37, 0x3e, 0x01, 0x35, 0x34, 0x27, 0x1e, 0x01, 0x05, 0x80, 0xbc, // '.32$7>.54'..... + 0xfe, 0xbb, 0xbf, 0x56, 0x5a, 0x7c, 0x9a, 0x24, 0x32, 0x03, 0x0b, 0x13, 0x02, 0x01, 0x01, 0x03, // ...VZ|.$2....... + 0x02, 0x05, 0x03, 0x06, 0x01, 0x05, 0x24, 0x10, 0x1d, 0x15, 0x0a, 0x7c, 0x8e, 0xbc, 0x01, 0x45, // ......$....|...E + 0x01, 0x7e, 0x01, 0x45, 0x02, 0x3c, 0x8e, 0x7c, 0x0a, 0x15, 0x1d, 0x10, 0x24, 0x05, 0x01, 0x06, // .~.E.<.|....$... + 0x03, 0x05, 0x02, 0x03, 0x01, 0x01, 0x03, 0x14, 0x0c, 0x32, 0x24, 0x9a, 0x7c, 0x5a, 0x56, 0xfe, // .........2$.|ZV. + 0xf1, 0xc9, 0x3a, 0x1e, 0xa1, 0x01, 0x28, 0x74, 0x7d, 0x86, 0x17, 0x81, 0x96, 0x03, 0x8b, 0xfe, // ..:...(t}....... + 0xea, 0xec, 0x89, 0x10, 0x58, 0x28, 0x09, 0x07, 0x10, 0x0d, 0x03, 0x07, 0x06, 0x06, 0x04, 0x07, // ....X(.......... + 0x03, 0x07, 0x01, 0x06, 0x26, 0x15, 0x25, 0x28, 0x18, 0x48, 0xd2, 0x77, 0x8b, 0xec, 0x89, 0x89, // ....&.%(.H.w.... + 0xfd, 0x89, 0x78, 0xd1, 0x48, 0x18, 0x28, 0x25, 0x15, 0x26, 0x06, 0x01, 0x07, 0x03, 0x07, 0x04, // ..x.H.(%.&...... + 0x06, 0x06, 0x07, 0x03, 0x0e, 0x10, 0x01, 0x07, 0x09, 0x28, 0x58, 0x10, 0x84, 0x04, 0x5a, 0x54, // .........(X...ZT + 0x5c, 0xf0, 0x86, 0x4d, 0x4b, 0x47, 0xd6, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // ...MKG.......... + 0x06, 0x00, 0x00, 0x07, 0x00, 0x3c, 0x00, 0x6d, 0x00, 0x00, 0x24, 0x34, 0x26, 0x22, 0x06, 0x14, // .....<.m..$4&".. + 0x16, 0x32, 0x01, 0x34, 0x26, 0x23, 0x21, 0x34, 0x36, 0x35, 0x34, 0x26, 0x23, 0x0e, 0x02, 0x07, // .2.4&#!4654&#... + 0x06, 0x07, 0x0e, 0x06, 0x2b, 0x01, 0x11, 0x33, 0x32, 0x1e, 0x04, 0x17, 0x16, 0x3b, 0x01, 0x32, // ....+..32....;.2 + 0x35, 0x34, 0x27, 0x3e, 0x01, 0x34, 0x27, 0x36, 0x35, 0x34, 0x26, 0x27, 0x3e, 0x01, 0x37, 0x14, // 54'>.4'654&'>.7. + 0x07, 0x16, 0x15, 0x14, 0x07, 0x16, 0x15, 0x14, 0x07, 0x16, 0x06, 0x2b, 0x02, 0x22, 0x26, 0x27, // ...........+."&' + 0x26, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x36, 0x37, 0x36, 0x37, 0x3e, // &#!"&5.463!6767> + 0x02, 0x37, 0x36, 0x33, 0x32, 0x1e, 0x01, 0x15, 0x14, 0x07, 0x33, 0x32, 0x16, 0x01, 0x00, 0x26, // .7632.....32...& + 0x34, 0x26, 0x26, 0x34, 0x04, 0xa6, 0x4e, 0x32, 0xfe, 0xa0, 0x60, 0x40, 0x60, 0x1a, 0x18, 0x25, // 4&&4..N2..`@`..% + 0x29, 0x16, 0x37, 0x04, 0x26, 0x19, 0x2c, 0x24, 0x29, 0x27, 0x10, 0x20, 0x20, 0x0d, 0x25, 0x1d, // ).7.&.,$)'. .%. + 0x2f, 0x17, 0x30, 0x05, 0xd3, 0x83, 0x79, 0xc0, 0x05, 0x1e, 0x23, 0x12, 0x35, 0x14, 0x0f, 0x20, // /.0...y...#.5.. + 0x2b, 0x80, 0x31, 0x09, 0x26, 0x03, 0x3c, 0x01, 0xac, 0x8d, 0x24, 0x5d, 0x60, 0xbb, 0x7b, 0x74, // +.1.&.<...$]`.{t + 0x16, 0xfe, 0xe0, 0x35, 0x4b, 0x4b, 0x35, 0x01, 0x12, 0x24, 0x65, 0x3a, 0x31, 0x18, 0x17, 0x26, // ...5KK5..$e:1..& + 0x2b, 0x27, 0x33, 0x54, 0x86, 0x46, 0x30, 0xb0, 0x68, 0x98, 0xa6, 0x34, 0x26, 0x26, 0x34, 0x26, // +'3T.F0.h..4&&4& + 0x02, 0x80, 0x33, 0x4d, 0x3a, 0xcb, 0x3b, 0x62, 0x5e, 0x1a, 0x76, 0x85, 0x2b, 0x17, 0x44, 0x05, // ..3M:.;b^.v.+.D. + 0x32, 0x20, 0x35, 0x23, 0x24, 0x12, 0xfd, 0x80, 0x06, 0x07, 0x0f, 0x08, 0x11, 0x02, 0x49, 0xa7, // 2 5#$.........I. + 0x1a, 0x1e, 0x10, 0x49, 0x4a, 0x20, 0x32, 0x45, 0x19, 0x3d, 0x11, 0x01, 0x5c, 0x24, 0x59, 0x4a, // ...IJ 2E.=...$YJ + 0x21, 0x24, 0x4d, 0x43, 0x15, 0x16, 0x65, 0x4d, 0x8b, 0xa1, 0x2d, 0x2b, 0x28, 0x4b, 0x35, 0x02, // !$MC..eM..-+(K5. + 0x80, 0x35, 0x4b, 0x18, 0x83, 0x4b, 0x35, 0x19, 0x79, 0x84, 0x2a, 0x25, 0x41, 0x8a, 0x75, 0x5d, // .5K..K5.y.*%A.u] + 0x63, 0x98, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x00, 0x06, 0x00, 0x05, 0x80, 0x00, 0x07, // c............... + 0x00, 0x3e, 0x00, 0x71, 0x00, 0x00, 0x00, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x01, 0x34, // .>.q...4&"...2.4 + 0x26, 0x27, 0x3e, 0x01, 0x35, 0x34, 0x27, 0x36, 0x35, 0x34, 0x26, 0x27, 0x36, 0x35, 0x34, 0x26, // &'>.54'654&'654& + 0x2b, 0x01, 0x22, 0x07, 0x0e, 0x05, 0x2b, 0x01, 0x11, 0x33, 0x32, 0x1e, 0x05, 0x17, 0x16, 0x17, // +."...+..32..... + 0x1e, 0x02, 0x17, 0x32, 0x36, 0x35, 0x34, 0x26, 0x35, 0x21, 0x32, 0x36, 0x37, 0x14, 0x06, 0x2b, // ...2654&5!267..+ + 0x01, 0x16, 0x15, 0x14, 0x07, 0x0e, 0x01, 0x23, 0x22, 0x27, 0x2e, 0x03, 0x27, 0x26, 0x27, 0x26, // .......#"'..'&'& + 0x27, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x37, 0x3e, 0x01, 0x3b, 0x01, // '!"&5.463!27>.;. + 0x32, 0x16, 0x07, 0x15, 0x16, 0x15, 0x14, 0x07, 0x16, 0x15, 0x14, 0x07, 0x16, 0x01, 0x00, 0x26, // 2..............& + 0x34, 0x26, 0x26, 0x34, 0x04, 0xa6, 0x2b, 0x20, 0x0f, 0x14, 0x35, 0x12, 0x23, 0x1e, 0x05, 0x62, // 4&&4..+ ..5.#..b + 0x57, 0x80, 0x83, 0xd3, 0x05, 0x30, 0x17, 0x2f, 0x1d, 0x25, 0x0d, 0x20, 0x20, 0x10, 0x27, 0x29, // W....0./.%. .') + 0x24, 0x2c, 0x19, 0x26, 0x04, 0x37, 0x16, 0x29, 0x25, 0x18, 0x1a, 0x60, 0x40, 0x60, 0x01, 0x60, // $,.&.7.)%..`@`.` + 0x32, 0x4e, 0x80, 0x98, 0x68, 0xb0, 0x30, 0x23, 0x23, 0x86, 0x54, 0x33, 0x27, 0x22, 0x28, 0x0b, // 2N..h.0##.T3'"(. + 0x18, 0x13, 0x30, 0x3b, 0x65, 0x24, 0xfe, 0xee, 0x35, 0x4b, 0x4b, 0x35, 0x01, 0x20, 0x16, 0x74, // ..0;e$..5KK5. .t + 0x80, 0xbe, 0x69, 0x70, 0x8c, 0xad, 0x01, 0x3c, 0x03, 0x26, 0x09, 0x31, 0x04, 0x26, 0x34, 0x26, // ..ip...<.&.1.&4& + 0x26, 0x34, 0x26, 0xfe, 0x00, 0x23, 0x5c, 0x01, 0x11, 0x3d, 0x19, 0x45, 0x32, 0x1f, 0x26, 0x25, // &4&..#...=.E2.&% + 0x49, 0x10, 0x1e, 0x1a, 0x55, 0x52, 0x49, 0x02, 0x11, 0x08, 0x0f, 0x07, 0x06, 0xfd, 0x80, 0x12, // I...URI......... + 0x24, 0x23, 0x35, 0x20, 0x32, 0x05, 0x44, 0x17, 0x2b, 0x85, 0x76, 0x1a, 0x5e, 0x62, 0x3b, 0xcb, // $#5 2.D.+.v.^b;. + 0x3a, 0x4d, 0x32, 0x67, 0x98, 0x63, 0x5d, 0x76, 0x44, 0x45, 0x41, 0x25, 0x21, 0x62, 0x53, 0x56, // :M2g.c]vDEA%!bSV + 0x15, 0x32, 0x4d, 0x83, 0x18, 0x4b, 0x35, 0x02, 0x80, 0x35, 0x4b, 0x28, 0x2c, 0x2c, 0x9e, 0x89, // .2M..K5..5K(,,.. + 0x05, 0x4d, 0x65, 0x16, 0x15, 0x43, 0x4d, 0x24, 0x21, 0x49, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // .Me..CM$!I...... 0xff, 0xad, 0x03, 0x40, 0x05, 0xe0, 0x00, 0x12, 0x00, 0x00, 0x01, 0x11, 0x05, 0x06, 0x23, 0x22, // ...@..........#" 0x26, 0x35, 0x34, 0x37, 0x13, 0x01, 0x26, 0x35, 0x34, 0x37, 0x25, 0x13, 0x36, 0x03, 0x40, 0xfe, // &547..&547%.6.@. 0x3f, 0x16, 0x12, 0x15, 0x15, 0x02, 0x56, 0xfe, 0x94, 0x19, 0x38, 0x01, 0xf6, 0xe1, 0x13, 0x05, // ?.....V...8..... @@ -1621,199 +1969,212 @@ static const uint8_t s_iconsFontAwesomeTtf[80776] = 0x8d, 0xa2, 0xd1, 0x60, 0x4e, 0xa8, 0xf6, 0x60, 0xd1, 0xa2, 0x1d, 0xa8, 0xce, 0x80, 0x47, 0x90, // ...`N..`......G. 0x74, 0x4f, 0x05, 0x36, 0x29, 0x22, 0x4d, 0x33, 0x36, 0x4a, 0x5b, 0x45, 0x40, 0x0e, 0x12, 0x12, // tO.6)"M36J[E@... 0x0e, 0x40, 0x45, 0x5b, 0x4a, 0x36, 0x33, 0x4d, 0x22, 0x29, 0x36, 0x05, 0x4f, 0x74, 0x90, 0x47, // .@E[J63M")6.Ot.G - 0x80, 0x28, 0x38, 0x60, 0x42, 0x5e, 0x5e, 0x42, 0x60, 0x38, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, // .(8`B^^B`8...... - 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x07, 0x00, 0x0e, 0x00, 0x16, 0x00, 0x1e, 0x00, 0x25, // ...............% - 0x00, 0x2d, 0x00, 0x33, 0x00, 0x8d, 0x00, 0x00, 0x25, 0x06, 0x27, 0x26, 0x37, 0x36, 0x17, 0x16, // .-.3....%.'&76.. - 0x27, 0x16, 0x07, 0x06, 0x26, 0x37, 0x36, 0x27, 0x06, 0x27, 0x26, 0x37, 0x36, 0x17, 0x16, 0x17, // '...&76'.'&76... - 0x06, 0x27, 0x26, 0x37, 0x36, 0x17, 0x16, 0x17, 0x06, 0x27, 0x26, 0x36, 0x17, 0x16, 0x17, 0x14, // .'&76....'&6.... - 0x23, 0x06, 0x35, 0x34, 0x33, 0x36, 0x17, 0x16, 0x06, 0x26, 0x37, 0x36, 0x01, 0x11, 0x14, 0x06, // #.5436...&76.... - 0x2b, 0x01, 0x22, 0x2e, 0x02, 0x3d, 0x01, 0x34, 0x27, 0x3e, 0x04, 0x35, 0x34, 0x27, 0x36, 0x27, // +."..=.4'>.54'6' - 0x26, 0x06, 0x0f, 0x01, 0x26, 0x22, 0x07, 0x2e, 0x02, 0x07, 0x06, 0x17, 0x06, 0x15, 0x14, 0x1e, // &...&".......... - 0x03, 0x17, 0x06, 0x07, 0x0e, 0x01, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x2f, 0x01, 0x22, 0x06, 0x1e, // ......"&'../.".. - 0x01, 0x1f, 0x01, 0x1e, 0x01, 0x1f, 0x01, 0x1e, 0x03, 0x3f, 0x01, 0x14, 0x16, 0x15, 0x14, 0x0e, // .........?...... - 0x01, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x8a, 0x08, // .+."&5.463!2.... - 0x0c, 0x0d, 0x09, 0x08, 0x0c, 0x0c, 0x32, 0x09, 0x09, 0x08, 0x12, 0x09, 0x09, 0x35, 0x05, 0x08, // ......2......5.. - 0x0a, 0x03, 0x03, 0x0a, 0x0a, 0x1c, 0x06, 0x0a, 0x09, 0x07, 0x06, 0x0a, 0x09, 0x7a, 0x04, 0x0f, // .............z.. - 0x11, 0x08, 0x0f, 0x10, 0x3c, 0x10, 0x11, 0x10, 0x11, 0x3a, 0x02, 0x20, 0x04, 0x10, 0x10, 0x03, // ....<....:. .... - 0xc6, 0xa9, 0x77, 0xe0, 0x10, 0x11, 0x16, 0x0a, 0x34, 0x39, 0x5b, 0x61, 0x41, 0x29, 0x4f, 0x25, // ..w.....49[aA)O% - 0x2d, 0x1c, 0x6a, 0x27, 0x26, 0x5d, 0xc6, 0x5d, 0x10, 0x35, 0x72, 0x1d, 0x2c, 0x25, 0x4f, 0x29, // -.j'&].].5r.,%O) - 0x40, 0x61, 0x5b, 0x39, 0x28, 0x09, 0x15, 0x30, 0x42, 0x41, 0x17, 0x13, 0x3b, 0x14, 0x14, 0x15, // @a[9(..0BA..;... - 0x10, 0x06, 0x0c, 0x07, 0x07, 0x16, 0x2b, 0x0a, 0x0a, 0x0d, 0x3e, 0x48, 0x43, 0x16, 0x17, 0x01, // ......+...>HC... - 0x16, 0x16, 0x16, 0xe0, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0xb8, 0x09, 0x0c, 0x0b, // ....w..w..w..... - 0x08, 0x09, 0x0c, 0x0b, 0x35, 0x0c, 0x07, 0x06, 0x1a, 0x05, 0x07, 0x2f, 0x07, 0x05, 0x05, 0x07, // ....5....../.... - 0x05, 0x03, 0x05, 0x29, 0x07, 0x0a, 0x0b, 0x05, 0x06, 0x09, 0x0b, 0x75, 0x0c, 0x06, 0x04, 0x16, // ...).......u.... - 0x04, 0x05, 0x10, 0x0b, 0x02, 0x0d, 0x0b, 0x02, 0x03, 0x0a, 0x08, 0x18, 0x03, 0x02, 0x03, 0xb1, // ................ - 0xfc, 0x40, 0x77, 0xa9, 0x02, 0x08, 0x15, 0x11, 0xef, 0x61, 0x2d, 0x06, 0x18, 0x36, 0x4f, 0x83, // .@w......a-..6O. - 0x55, 0x79, 0x55, 0x5b, 0x71, 0x09, 0x28, 0x18, 0x18, 0x1a, 0x1a, 0x0b, 0x20, 0x2d, 0x09, 0x71, // UyU[q.(..... -.q - 0x5b, 0x55, 0x79, 0x55, 0x82, 0x50, 0x36, 0x18, 0x06, 0x24, 0x43, 0x0a, 0x0a, 0x2b, 0x29, 0x20, // [UyU.P6..$C..+) - 0x28, 0x04, 0x03, 0x09, 0x0e, 0x0e, 0x05, 0x05, 0x0a, 0x38, 0x17, 0x17, 0x26, 0x2f, 0x0d, 0x01, // (........8..&/.. - 0x04, 0x04, 0x26, 0x82, 0x03, 0x16, 0x17, 0x03, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0xa9, 0x00, // ..&......w..w... - 0x00, 0x04, 0x00, 0x00, 0xff, 0x80, 0x06, 0x80, 0x05, 0xc0, 0x00, 0x07, 0x00, 0x0f, 0x00, 0x27, // ...............' - 0x00, 0x3f, 0x00, 0x00, 0x24, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x24, 0x34, 0x26, 0x22, // .?..$4&"...2$4&" - 0x06, 0x14, 0x16, 0x32, 0x13, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, // ...2....#!"&5.46 - 0x33, 0x21, 0x1e, 0x01, 0x33, 0x21, 0x32, 0x36, 0x37, 0x21, 0x32, 0x16, 0x01, 0x06, 0x23, 0x21, // 3!..3!267!2...#! - 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x21, 0x22, 0x27, 0x26, 0x37, 0x01, 0x36, // ...#!"&5.!"'&7.6 - 0x32, 0x17, 0x01, 0x16, 0x05, 0x00, 0x26, 0x34, 0x26, 0x26, 0x34, 0x01, 0x26, 0x26, 0x34, 0x26, // 2.....&4&&4.&&4& - 0x26, 0x34, 0xa6, 0x38, 0x28, 0xfa, 0x40, 0x28, 0x38, 0x38, 0x28, 0x01, 0xab, 0x15, 0x63, 0x3d, // &4.8(.@(88(...c= - 0x01, 0x00, 0x3d, 0x63, 0x15, 0x01, 0xab, 0x28, 0x38, 0xfe, 0xbb, 0x11, 0x2a, 0xff, 0x00, 0x26, // ..=c...(8...*..& - 0x1a, 0xff, 0x00, 0x1a, 0x26, 0xff, 0x00, 0x2a, 0x11, 0x11, 0x1f, 0x01, 0xc0, 0x12, 0x36, 0x12, // ....&..*......6. - 0x01, 0xc0, 0x1f, 0x26, 0x34, 0x26, 0x26, 0x34, 0x26, 0x26, 0x34, 0x26, 0x26, 0x34, 0x26, 0x01, // ...&4&&4&&4&&4&. - 0x20, 0xfe, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x01, 0x40, 0x28, 0x38, 0x38, 0x48, 0x48, 0x38, 0x38, // ..(88(.@(88HH88 - 0x02, 0x60, 0x28, 0xfe, 0x40, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0xc0, 0x28, 0x27, 0x1e, 0x01, 0xc0, // .`(.@.&&...('... - 0x13, 0x13, 0xfe, 0x40, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x05, 0xff, // ...@............ - 0x05, 0x80, 0x00, 0x31, 0x00, 0x64, 0x00, 0x00, 0x01, 0x34, 0x26, 0x27, 0x2e, 0x02, 0x35, 0x34, // ...1.d...4&'..54 - 0x36, 0x35, 0x34, 0x27, 0x26, 0x23, 0x22, 0x06, 0x23, 0x22, 0x26, 0x23, 0x22, 0x0e, 0x01, 0x07, // 654'&#".#"&#"... - 0x06, 0x07, 0x0e, 0x02, 0x15, 0x14, 0x16, 0x15, 0x14, 0x06, 0x14, 0x16, 0x33, 0x32, 0x36, 0x33, // ............3263 - 0x32, 0x16, 0x33, 0x32, 0x37, 0x3e, 0x01, 0x12, 0x37, 0x14, 0x02, 0x06, 0x07, 0x06, 0x23, 0x22, // 2.327>..7.....#" - 0x26, 0x23, 0x22, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x35, 0x34, 0x26, 0x35, 0x34, 0x3e, // &#".#"&54654&54> - 0x02, 0x37, 0x36, 0x37, 0x36, 0x33, 0x32, 0x16, 0x33, 0x32, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, // .767632.32632... - 0x06, 0x15, 0x14, 0x1e, 0x03, 0x17, 0x1e, 0x01, 0x05, 0x7f, 0x0e, 0x0b, 0x0c, 0x0a, 0x08, 0x0a, // ................ - 0x0a, 0x04, 0x09, 0x13, 0x4e, 0x14, 0x3c, 0xe8, 0x3b, 0x2b, 0x67, 0x43, 0x38, 0x89, 0x41, 0x60, // ....N.<.;+gC8.A` - 0x7f, 0x31, 0x19, 0x16, 0x18, 0x16, 0x18, 0x61, 0x19, 0x39, 0xe1, 0x39, 0xb5, 0x67, 0x81, 0xd5, // .1.....a.9.9.g.. - 0x77, 0x80, 0x8c, 0xfc, 0x9b, 0x7c, 0xca, 0x39, 0xe2, 0x38, 0x18, 0x61, 0x19, 0x49, 0x65, 0x16, // w....|.9.8.a.Ie. - 0x19, 0x24, 0x49, 0x80, 0x56, 0x4e, 0x9a, 0xc2, 0x7a, 0x3c, 0xe7, 0x3a, 0x13, 0x4c, 0x14, 0x51, // .$I.VN..z<.:.L.Q - 0x4a, 0x0a, 0x02, 0x04, 0x04, 0x09, 0x02, 0x10, 0x12, 0x02, 0xc6, 0x2c, 0x8b, 0x1b, 0x1e, 0x1c, // J..........,.... - 0x2d, 0x1a, 0x17, 0x5b, 0x16, 0x25, 0x12, 0x01, 0x09, 0x30, 0x17, 0x18, 0x16, 0x36, 0x31, 0x49, // -..[.%...0...61I - 0xe9, 0xef, 0x81, 0x28, 0xa0, 0x29, 0x17, 0x57, 0x2c, 0x1d, 0x16, 0x1f, 0x24, 0x2d, 0xd7, 0x01, // ...(.).W,...$-.. - 0x14, 0x8b, 0xa5, 0xfe, 0xbb, 0xfb, 0x37, 0x2c, 0x1d, 0x1d, 0x6f, 0x49, 0x18, 0x58, 0x17, 0x28, // ......7,..oI.X.( - 0xa1, 0x29, 0x6f, 0xd5, 0xce, 0xb6, 0x41, 0x3b, 0x3d, 0x4e, 0x30, 0x0a, 0x65, 0x54, 0x17, 0x5a, // .)o...A;=N0.eT.Z - 0x17, 0x0a, 0x11, 0x11, 0x0a, 0x16, 0x06, 0x28, 0x9d, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // .......(........ - 0x00, 0x00, 0x05, 0x80, 0x05, 0x80, 0x00, 0x4f, 0x00, 0x00, 0x01, 0x14, 0x06, 0x07, 0x06, 0x07, // .......O........ - 0x06, 0x23, 0x22, 0x2e, 0x03, 0x27, 0x26, 0x27, 0x26, 0x00, 0x27, 0x26, 0x27, 0x2e, 0x04, 0x35, // .#"..'&'&.'&'..5 - 0x34, 0x37, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x32, 0x17, 0x16, 0x17, 0x1e, 0x02, 0x17, 0x1e, 0x02, // 4767>.32........ - 0x15, 0x14, 0x0e, 0x02, 0x15, 0x14, 0x1e, 0x02, 0x17, 0x1e, 0x01, 0x17, 0x1e, 0x03, 0x33, 0x32, // ..............32 - 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x01, 0x17, 0x1e, 0x02, 0x17, 0x16, 0x17, 0x16, 0x05, 0x80, 0x14, // >.32............ - 0x0b, 0x15, 0x65, 0x5e, 0x5c, 0x1b, 0x33, 0x40, 0x1f, 0x50, 0x09, 0x62, 0x4d, 0x80, 0xfe, 0xef, // ..e^..3@.P.bM... - 0x4f, 0x30, 0x23, 0x03, 0x1e, 0x0b, 0x12, 0x07, 0x33, 0x38, 0x32, 0x19, 0x57, 0x1b, 0x0e, 0x07, // O0#.....382.W... - 0x12, 0x23, 0x0b, 0x26, 0x20, 0x0f, 0x03, 0x1d, 0x0e, 0x39, 0x43, 0x39, 0x0a, 0x07, 0x15, 0x01, // .#.& ....9C9.... - 0x4c, 0xc4, 0x89, 0x02, 0x22, 0x0e, 0x1b, 0x09, 0x12, 0x38, 0x32, 0x3c, 0x14, 0x0e, 0x1d, 0x2a, // L..."....82<...* - 0x04, 0x19, 0x39, 0x46, 0x13, 0x46, 0x06, 0x03, 0x01, 0x28, 0x1b, 0x57, 0x19, 0x32, 0x38, 0x33, // ..9F.F...(.W.283 - 0x07, 0x12, 0x0b, 0x1e, 0x03, 0x23, 0x30, 0x4f, 0x01, 0x11, 0x80, 0x4d, 0x62, 0x09, 0x50, 0x1f, // .....#0O...Mb.P. - 0x40, 0x33, 0x1b, 0x5c, 0x5e, 0x65, 0x15, 0x0b, 0x14, 0x03, 0x06, 0x46, 0x13, 0x46, 0x39, 0x19, // @3..^e.....F.F9. - 0x04, 0x2a, 0x1d, 0x0e, 0x14, 0x3c, 0x32, 0x38, 0x12, 0x09, 0x1b, 0x0e, 0x22, 0x02, 0x89, 0xc4, // .*...<28...."... - 0x4c, 0x01, 0x15, 0x07, 0x0a, 0x39, 0x43, 0x39, 0x0e, 0x1d, 0x03, 0x0f, 0x20, 0x26, 0x0b, 0x23, // L....9C9.... &.# - 0x12, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x05, 0x80, 0x05, 0x80, 0x00, 0x0f, // ................ - 0x00, 0x1f, 0x00, 0x00, 0x01, 0x21, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, // .....!".....3!26 - 0x35, 0x11, 0x34, 0x26, 0x17, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, // 5.4&....#!"&5.46 - 0x33, 0x21, 0x32, 0x16, 0x04, 0x60, 0xfc, 0xc0, 0x42, 0x5e, 0x5e, 0x42, 0x03, 0x40, 0x42, 0x5e, // 3!2..`..B^^B.@B^ - 0x5e, 0xde, 0xa9, 0x77, 0xfc, 0xc0, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0x40, 0x77, 0xa9, 0x05, 0x00, // ^..w..w..w.@w... - 0x5e, 0x42, 0xfc, 0xc0, 0x42, 0x5e, 0x5e, 0x42, 0x03, 0x40, 0x42, 0x5e, 0xa0, 0xfc, 0xc0, 0x77, // ^B..B^^B.@B^...w - 0xa9, 0xa9, 0x77, 0x03, 0x40, 0x77, 0xa9, 0xa9, 0x00, 0x02, 0x00, 0x00, 0xff, 0x97, 0x05, 0x00, // ..w.@w.......... - 0x05, 0x80, 0x00, 0x06, 0x00, 0x23, 0x00, 0x00, 0x01, 0x21, 0x11, 0x01, 0x37, 0x17, 0x01, 0x13, // .....#...!..7... - 0x32, 0x17, 0x1e, 0x01, 0x15, 0x11, 0x14, 0x06, 0x07, 0x06, 0x23, 0x22, 0x27, 0x09, 0x01, 0x06, // 2.........#"'... - 0x23, 0x22, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, 0x36, 0x33, 0x04, 0x80, 0xfc, 0x00, // #"'..5.46763.... - 0x01, 0xa7, 0x59, 0x59, 0x01, 0xa7, 0x0c, 0x17, 0x15, 0x21, 0x27, 0x27, 0x21, 0x13, 0x19, 0x30, // ..YY.....!''!..0 - 0x23, 0xfe, 0x47, 0xfe, 0x47, 0x24, 0x2f, 0x17, 0x15, 0x21, 0x27, 0x27, 0x21, 0x15, 0x17, 0x05, // #.G.G$/..!''!... - 0x00, 0xfb, 0x26, 0x01, 0x96, 0x55, 0x55, 0xfe, 0x6a, 0x05, 0x5a, 0x09, 0x0d, 0x38, 0x22, 0xfa, // ..&..UU.j.Z..8". - 0xf7, 0x22, 0x38, 0x0d, 0x08, 0x20, 0x01, 0xa8, 0xfe, 0x58, 0x21, 0x09, 0x0d, 0x38, 0x22, 0x05, // ."8.. ...X!..8". - 0x09, 0x22, 0x38, 0x0d, 0x09, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // ."8............. - 0x05, 0x80, 0x00, 0x45, 0x00, 0x55, 0x00, 0x00, 0x01, 0x34, 0x27, 0x2e, 0x01, 0x2f, 0x01, 0x2e, // ...E.U...4'../.. - 0x02, 0x23, 0x22, 0x0e, 0x01, 0x23, 0x22, 0x2e, 0x02, 0x27, 0x2e, 0x01, 0x27, 0x2e, 0x03, 0x35, // .#"..#"..'..'..5 - 0x34, 0x3e, 0x02, 0x35, 0x34, 0x2e, 0x01, 0x27, 0x2e, 0x05, 0x23, 0x22, 0x07, 0x0e, 0x01, 0x15, // 4>.54..'..#".... - 0x14, 0x1e, 0x04, 0x17, 0x16, 0x00, 0x17, 0x1e, 0x05, 0x33, 0x32, 0x36, 0x37, 0x36, 0x01, 0x11, // .........32676.. - 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x05, 0x00, // ..#!"&5.463!2... - 0x02, 0x03, 0x47, 0x35, 0x35, 0x05, 0x1c, 0x16, 0x0a, 0x12, 0x3a, 0x38, 0x10, 0x07, 0x13, 0x0c, // ..G55.....:8.... - 0x16, 0x03, 0x63, 0x8f, 0x37, 0x02, 0x0d, 0x06, 0x07, 0x29, 0x31, 0x29, 0x0a, 0x14, 0x03, 0x03, // ..c.7....)1).... - 0x18, 0x1a, 0x1b, 0x17, 0x0a, 0x0b, 0x30, 0x35, 0x2e, 0x44, 0x05, 0x05, 0x0d, 0x07, 0x12, 0x02, // ......05.D...... - 0x3c, 0x01, 0x39, 0xa4, 0x06, 0x30, 0x12, 0x29, 0x19, 0x24, 0x10, 0x39, 0x93, 0x15, 0x16, 0x01, // <.9..0.).$.9.... - 0x00, 0xa9, 0x77, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0x01, 0x57, 0x0b, // ..w.@w..w..w..W. - 0x05, 0x08, 0x2b, 0x1c, 0x1d, 0x03, 0x14, 0x0a, 0x41, 0x42, 0x07, 0x06, 0x0d, 0x02, 0x37, 0x8f, // ..+.....AB....7. - 0x63, 0x03, 0x16, 0x0c, 0x13, 0x07, 0x0d, 0x29, 0x24, 0x2b, 0x0f, 0x0a, 0x16, 0x1c, 0x05, 0x06, // c......)$+...... - 0x2d, 0x2e, 0x31, 0x20, 0x04, 0x16, 0x15, 0x93, 0x39, 0x10, 0x24, 0x19, 0x29, 0x12, 0x30, 0x06, // -.1 ....9.$.).0. - 0xa4, 0xfe, 0xc7, 0x3c, 0x02, 0x12, 0x07, 0x0d, 0x05, 0x05, 0x44, 0x2e, 0x35, 0x03, 0x39, 0xfc, // ...<......D.5.9. - 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0xa9, 0x00, 0x00, 0x00, 0x01, 0x00, 0x2c, // @w..w..w......., - 0x00, 0x00, 0x06, 0x54, 0x05, 0x00, 0x00, 0x31, 0x00, 0x00, 0x01, 0x06, 0x07, 0x16, 0x15, 0x14, // ...T...1........ - 0x02, 0x0e, 0x01, 0x04, 0x23, 0x20, 0x27, 0x16, 0x33, 0x32, 0x37, 0x2e, 0x01, 0x27, 0x16, 0x33, // ....# '.327..'.3 - 0x32, 0x37, 0x2e, 0x01, 0x3d, 0x01, 0x16, 0x17, 0x2e, 0x01, 0x35, 0x34, 0x37, 0x16, 0x04, 0x17, // 27..=.....547... - 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x36, 0x37, 0x06, 0x07, 0x36, 0x06, 0x54, 0x43, 0x5f, // &54632.67..6.TC_ - 0x01, 0x4c, 0x9b, 0xd6, 0xfe, 0xd2, 0xac, 0xfe, 0xf1, 0xe1, 0x23, 0x2b, 0xe1, 0xb0, 0x69, 0xa6, // .L........#+..i. - 0x1f, 0x21, 0x1c, 0x2b, 0x2a, 0x70, 0x93, 0x44, 0x4e, 0x42, 0x4e, 0x2c, 0x79, 0x01, 0x5b, 0xc6, // .!.+*p.DNBN,y.[. - 0x08, 0xbd, 0x86, 0x8c, 0x60, 0x6d, 0x60, 0x25, 0x69, 0x5d, 0x04, 0x68, 0x62, 0x45, 0x0e, 0x1c, // ....`m`%i].hbE.. - 0x82, 0xfe, 0xfd, 0xee, 0xb7, 0x6d, 0x91, 0x04, 0x8a, 0x02, 0x7d, 0x61, 0x05, 0x0b, 0x17, 0xb1, // .....m....}a.... - 0x75, 0x04, 0x26, 0x03, 0x2c, 0x8e, 0x53, 0x58, 0x4b, 0x95, 0xb3, 0x0a, 0x26, 0x24, 0x86, 0xbd, // u.&.,.SXK...&$.. - 0x66, 0x15, 0x39, 0x73, 0x3f, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0x80, 0x03, 0x00, // f.9s?........... - 0x05, 0xf0, 0x00, 0x15, 0x00, 0x00, 0x01, 0x21, 0x03, 0x23, 0x11, 0x21, 0x11, 0x23, 0x11, 0x33, // .......!.#.!.#.3 - 0x35, 0x34, 0x36, 0x3b, 0x01, 0x11, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x01, 0xff, 0x01, 0x01, 0x1e, // 546;..#"........ - 0xe3, 0xfe, 0xab, 0xaa, 0xaa, 0xac, 0xc5, 0xe3, 0x8e, 0x27, 0x2f, 0x15, 0x06, 0x03, 0xd4, 0xfe, // .........'/..... - 0xe4, 0xfc, 0xc8, 0x03, 0x38, 0x01, 0x1c, 0xab, 0xb6, 0xbb, 0xfe, 0xe4, 0x0d, 0x22, 0x23, 0x20, // ....8........"# - 0x00, 0x01, 0x00, 0x00, 0xff, 0xa7, 0x06, 0x00, 0x05, 0x80, 0x00, 0x52, 0x00, 0x00, 0x01, 0x14, // ...........R.... - 0x00, 0x07, 0x06, 0x26, 0x3d, 0x01, 0x34, 0x27, 0x3e, 0x04, 0x35, 0x34, 0x27, 0x36, 0x27, 0x26, // ...&=.4'>.54'6'& - 0x06, 0x0f, 0x01, 0x26, 0x22, 0x07, 0x2e, 0x02, 0x07, 0x06, 0x17, 0x06, 0x15, 0x14, 0x1e, 0x03, // ...&"........... - 0x17, 0x06, 0x07, 0x0e, 0x01, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x2f, 0x01, 0x22, 0x06, 0x1e, 0x01, // ....."&'../."... - 0x1f, 0x01, 0x1e, 0x01, 0x1f, 0x01, 0x1e, 0x03, 0x3f, 0x01, 0x14, 0x16, 0x15, 0x14, 0x06, 0x27, // ........?......' - 0x26, 0x00, 0x35, 0x34, 0x12, 0x24, 0x20, 0x04, 0x12, 0x06, 0x00, 0xfe, 0xdb, 0xe8, 0x1b, 0x19, // &.54.$ ......... - 0x34, 0x39, 0x5b, 0x61, 0x41, 0x29, 0x4f, 0x25, 0x2d, 0x1c, 0x6a, 0x27, 0x26, 0x5d, 0xc6, 0x5d, // 49[aA)O%-.j'&].] - 0x10, 0x35, 0x72, 0x1d, 0x2c, 0x25, 0x4f, 0x29, 0x40, 0x61, 0x5b, 0x39, 0x28, 0x09, 0x15, 0x30, // .5r.,%O)@a[9(..0 - 0x42, 0x41, 0x17, 0x13, 0x3b, 0x14, 0x14, 0x15, 0x10, 0x06, 0x0c, 0x07, 0x07, 0x16, 0x2b, 0x0a, // BA..;.........+. - 0x0a, 0x0d, 0x3e, 0x48, 0x43, 0x16, 0x17, 0x01, 0x1a, 0x1b, 0xe8, 0xfe, 0xdb, 0xce, 0x01, 0x61, // ..>HC..........a - 0x01, 0xa2, 0x01, 0x61, 0xce, 0x02, 0x80, 0xfb, 0xfe, 0x6f, 0x4d, 0x05, 0x18, 0x12, 0xd3, 0x61, // ...a.....oM....a - 0x2d, 0x06, 0x18, 0x36, 0x4f, 0x83, 0x55, 0x79, 0x55, 0x5b, 0x71, 0x09, 0x28, 0x18, 0x18, 0x1a, // -..6O.UyU[q.(... - 0x1a, 0x0b, 0x20, 0x2d, 0x09, 0x71, 0x5b, 0x55, 0x79, 0x55, 0x82, 0x50, 0x36, 0x18, 0x06, 0x24, // .. -.q[UyU.P6..$ - 0x43, 0x0a, 0x0a, 0x2b, 0x29, 0x20, 0x28, 0x04, 0x03, 0x09, 0x0e, 0x0e, 0x05, 0x05, 0x0a, 0x38, // C..+) (........8 - 0x17, 0x17, 0x26, 0x2f, 0x0d, 0x01, 0x04, 0x04, 0x26, 0x66, 0x03, 0x12, 0x18, 0x05, 0x4d, 0x01, // ..&/....&f....M. - 0x91, 0xfb, 0xd1, 0x01, 0x61, 0xce, 0xce, 0xfe, 0x9f, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // ....a........... - 0x00, 0x00, 0x06, 0x80, 0x05, 0x80, 0x00, 0x25, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, 0x2b, 0x01, // .......%......+. - 0x22, 0x26, 0x35, 0x11, 0x34, 0x26, 0x22, 0x06, 0x1d, 0x01, 0x33, 0x32, 0x16, 0x15, 0x11, 0x14, // "&5.4&"...32.... - 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x35, 0x34, 0x00, 0x20, 0x00, // .#!"&5.463!54. . - 0x06, 0x80, 0x26, 0x1a, 0x40, 0x1a, 0x26, 0x96, 0xd4, 0x96, 0x60, 0x28, 0x38, 0x38, 0x28, 0xfc, // ..&.@.&...`(88(. - 0x40, 0x28, 0x38, 0x38, 0x28, 0x02, 0xa0, 0x01, 0x07, 0x01, 0x72, 0x01, 0x07, 0x03, 0xc0, 0xff, // @(88(.....r..... - 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0x00, 0x6a, 0x96, 0x96, 0x6a, 0xc0, 0x38, 0x28, 0xfd, 0xc0, // ..&&...j..j.8(.. - 0x28, 0x38, 0x38, 0x28, 0x02, 0x40, 0x28, 0x38, 0xc0, 0xb9, 0x01, 0x07, 0xfe, 0xf9, 0x00, 0x00, // (88(.@(8........ - 0x00, 0x05, 0x00, 0x00, 0xff, 0x80, 0x07, 0x80, 0x05, 0x80, 0x00, 0x0f, 0x00, 0x19, 0x00, 0x23, // ...............# - 0x00, 0x27, 0x00, 0x2b, 0x00, 0x00, 0x01, 0x32, 0x16, 0x15, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, // .'.+...2.....#!" - 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x15, 0x22, 0x06, 0x1d, 0x01, 0x21, 0x35, 0x34, 0x26, 0x23, // &5.463."...!54&# - 0x11, 0x32, 0x36, 0x35, 0x11, 0x21, 0x11, 0x14, 0x16, 0x33, 0x37, 0x35, 0x21, 0x15, 0x33, 0x35, // .265.!...375!.35 - 0x21, 0x15, 0x06, 0xe0, 0x42, 0x5e, 0x5e, 0x42, 0xf9, 0xc0, 0x42, 0x5e, 0x5e, 0x42, 0x0d, 0x13, // !...B^^B..B^^B.. - 0x06, 0x80, 0x13, 0x0d, 0x0d, 0x13, 0xf9, 0x80, 0x13, 0x0d, 0x60, 0x01, 0x00, 0x80, 0x01, 0x80, // ..........`..... - 0x05, 0x80, 0x5e, 0x42, 0xfb, 0x40, 0x42, 0x5e, 0x5e, 0x42, 0x04, 0xc0, 0x42, 0x5e, 0x80, 0x13, // ..^B.@B^^B..B^.. - 0x0d, 0xe0, 0xe0, 0x0d, 0x13, 0xfb, 0x00, 0x13, 0x0d, 0x02, 0x60, 0xfd, 0xa0, 0x0d, 0x13, 0x80, // ..........`..... - 0x80, 0x80, 0x80, 0x80, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x05, 0x80, 0x05, 0x80, 0x00, 0x07, // ................ - 0x00, 0x21, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x01, 0x16, // .!.=....."&462.. - 0x07, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x27, 0x26, 0x00, 0x27, 0x2e, 0x01, 0x3d, 0x01, 0x34, 0x37, // ..+."&'&.'..=.47 - 0x36, 0x3b, 0x01, 0x16, 0x04, 0x17, 0x16, 0x12, 0x05, 0x16, 0x07, 0x06, 0x2b, 0x01, 0x22, 0x26, // 6;..........+."& - 0x27, 0x26, 0x02, 0x00, 0x24, 0x27, 0x2e, 0x01, 0x3d, 0x01, 0x34, 0x37, 0x36, 0x3b, 0x01, 0x0c, // '&..$'..=.476;.. - 0x01, 0x17, 0x16, 0x12, 0x01, 0x80, 0x70, 0xa0, 0x70, 0x70, 0xa0, 0x02, 0x70, 0x02, 0x13, 0x12, // ......p.pp..p... - 0x1d, 0x87, 0x19, 0x24, 0x02, 0x16, 0xfe, 0xbb, 0xe5, 0x19, 0x21, 0x15, 0x11, 0x1a, 0x05, 0xa0, // ...$......!..... - 0x01, 0x24, 0x71, 0x72, 0x87, 0x02, 0x0d, 0x02, 0x14, 0x12, 0x1c, 0x8f, 0x1a, 0x25, 0x01, 0x0c, // .$qr.........%.. - 0xb2, 0xfe, 0xe3, 0xfe, 0x7d, 0xd7, 0x19, 0x23, 0x14, 0x12, 0x1a, 0x03, 0x01, 0x06, 0x01, 0xdf, // ....}..#........ - 0xba, 0xbb, 0xd6, 0x01, 0x10, 0xa0, 0x70, 0x70, 0xa0, 0x70, 0xfe, 0xc5, 0x1c, 0x14, 0x15, 0x21, // ......pp.p.....! - 0x19, 0xe5, 0x01, 0x45, 0x16, 0x02, 0x24, 0x19, 0x87, 0x1d, 0x12, 0x11, 0x0d, 0x87, 0x72, 0x71, // ...E..$.......rq - 0xfe, 0xdc, 0xa2, 0x1b, 0x14, 0x14, 0x23, 0x19, 0xd7, 0x01, 0x83, 0x01, 0x1d, 0xb2, 0x0d, 0x01, // ......#......... - 0x25, 0x19, 0x8f, 0x1c, 0x12, 0x12, 0x0d, 0xd6, 0xbb, 0xba, 0xfe, 0x21, 0x00, 0x05, 0x00, 0x00, // %..........!.... - 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x00, 0x07, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x29, 0x00, 0x3f, // .............).? - 0x00, 0x00, 0x00, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x04, 0x14, 0x06, 0x22, 0x26, 0x34, // ....."&462..."&4 - 0x36, 0x32, 0x17, 0x11, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x33, 0x21, // 62..4&#!".....3! - 0x32, 0x36, 0x01, 0x21, 0x03, 0x2e, 0x01, 0x23, 0x21, 0x22, 0x06, 0x07, 0x01, 0x11, 0x14, 0x06, // 26.!...#!"...... - 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x37, 0x13, 0x3e, 0x01, 0x33, 0x21, 0x32, 0x16, 0x17, // #!"&5.47.>.3!2.. - 0x13, 0x16, 0x04, 0x10, 0x2f, 0x42, 0x2f, 0x2f, 0x42, 0x01, 0x2f, 0x2f, 0x42, 0x2f, 0x2f, 0x42, // ..../B//B.//B//B - 0x9f, 0x13, 0x0d, 0xfb, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x04, 0xc0, 0x0d, 0x13, 0xfb, 0x32, 0x04, // ....@.........2. - 0x9c, 0x9d, 0x04, 0x18, 0x0e, 0xfc, 0xf2, 0x0e, 0x18, 0x04, 0x04, 0xb1, 0x5e, 0x42, 0xfb, 0x40, // ............^B.@ - 0x42, 0x5e, 0x10, 0xc5, 0x11, 0x5c, 0x37, 0x03, 0x0e, 0x37, 0x5c, 0x11, 0xc5, 0x10, 0x01, 0x61, // B^....7..7.....a - 0x42, 0x2f, 0x2f, 0x42, 0x2f, 0x2f, 0x42, 0x2f, 0x2f, 0x42, 0x2f, 0xf0, 0x01, 0x40, 0x0d, 0x13, // B//B//B//B/..@.. - 0x13, 0x0d, 0xfe, 0xc0, 0x0d, 0x13, 0x13, 0x01, 0xed, 0x01, 0xe2, 0x0d, 0x11, 0x11, 0x0d, 0xfd, // ................ - 0x7e, 0xfe, 0xc0, 0x42, 0x5e, 0x5e, 0x42, 0x01, 0x40, 0x19, 0x32, 0x02, 0x5e, 0x35, 0x42, 0x42, // ~..B^^B.@.2.^5BB - 0x35, 0xfd, 0xa2, 0x32, 0x00, 0x02, 0x00, 0x00, 0xff, 0x83, 0x07, 0x00, 0x05, 0x80, 0x00, 0x2e, // 5..2............ - 0x00, 0x34, 0x00, 0x00, 0x01, 0x32, 0x16, 0x14, 0x06, 0x23, 0x11, 0x14, 0x06, 0x23, 0x00, 0x25, // .4...2...#...#.% - 0x0e, 0x01, 0x16, 0x17, 0x0e, 0x01, 0x1e, 0x02, 0x17, 0x0e, 0x01, 0x26, 0x27, 0x2e, 0x04, 0x36, // ...........&'..6 - 0x37, 0x23, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x20, 0x01, 0x32, 0x16, 0x15, 0x03, // 7#"&=.463! .2... - 0x11, 0x00, 0x05, 0x11, 0x04, 0x06, 0x80, 0x35, 0x4b, 0x4b, 0x35, 0x4c, 0x34, 0xfe, 0x5f, 0xfe, // .......5KK5L4._. - 0x75, 0x3a, 0x42, 0x04, 0x26, 0x14, 0x06, 0x12, 0x31, 0x2f, 0x26, 0x1d, 0xa5, 0xac, 0x2e, 0x07, // u:B.&...1/&..... - 0x2d, 0x13, 0x1b, 0x03, 0x0a, 0x11, 0x7a, 0x42, 0x5e, 0x5e, 0x42, 0x01, 0xe0, 0x01, 0xb3, 0x01, // -.....zB^^B..... - 0xcd, 0x34, 0x4c, 0x80, 0xfe, 0x76, 0xfe, 0x8a, 0x01, 0x79, 0x03, 0x80, 0x4b, 0x6a, 0x4b, 0xfe, // .4L..v...y..KjK. - 0x80, 0x34, 0x4c, 0x01, 0x5b, 0x21, 0x13, 0x5e, 0x6b, 0x27, 0x21, 0x41, 0x33, 0x3b, 0x29, 0x1e, // .4L.[!.^k'!A3;). - 0x3a, 0x32, 0x1b, 0x2a, 0x17, 0x81, 0x3c, 0x76, 0x54, 0x71, 0x36, 0x5e, 0x42, 0xc0, 0x42, 0x5e, // :2.*.. + 0x02, 0x17, 0x16, 0x07, 0x16, 0x15, 0x14, 0x0e, 0x03, 0x07, 0x16, 0x15, 0x14, 0x06, 0x15, 0x14, // ................ + 0x16, 0x37, 0x36, 0x12, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, // .76.....#!"&5.46 + 0x33, 0x21, 0x32, 0x16, 0x02, 0x07, 0x04, 0x07, 0x09, 0x05, 0x04, 0x07, 0x09, 0x17, 0x05, 0x07, // 3!2............. + 0x06, 0x06, 0x07, 0x05, 0x06, 0x2f, 0x02, 0x07, 0x07, 0x01, 0x03, 0x07, 0x08, 0x16, 0x02, 0x01, // ...../.......... + 0x03, 0x06, 0x08, 0x05, 0x06, 0x5b, 0x02, 0x0b, 0x09, 0x04, 0x02, 0x0b, 0x09, 0x2e, 0x0c, 0x0a, // .....[.......... + 0x3d, 0x02, 0x16, 0x02, 0x02, 0x14, 0x02, 0x82, 0xfe, 0xd4, 0xfe, 0x58, 0xfe, 0xd4, 0xc4, 0x9a, // =..........X.... + 0x12, 0x11, 0x01, 0x06, 0x13, 0x34, 0x2c, 0x2b, 0x08, 0x17, 0x22, 0x02, 0x05, 0x0b, 0x03, 0x0b, // .....4,+.."..... + 0x0e, 0x06, 0x12, 0x2a, 0x0c, 0x10, 0x2b, 0x2c, 0x20, 0x0e, 0x07, 0x1a, 0x31, 0x4a, 0x48, 0x27, // ...*..+, ...1JH' + 0x35, 0x18, 0x1d, 0x13, 0x47, 0x19, 0x1a, 0x3a, 0x8c, 0x3a, 0x0b, 0x23, 0x4c, 0x13, 0x1d, 0x18, // 5...G..:.:.#L... + 0x35, 0x1c, 0x2b, 0x40, 0x3d, 0x26, 0x23, 0x01, 0x11, 0x12, 0x9a, 0xc4, 0x01, 0x00, 0xa9, 0x77, // 5.+@=&#........w + 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0x01, 0x50, 0x06, 0x07, 0x07, 0x05, // .@w..w..w..P.... + 0x06, 0x07, 0x07, 0x2e, 0x07, 0x03, 0x04, 0x08, 0x08, 0x03, 0x04, 0x31, 0x04, 0x04, 0x02, 0x04, // ...........1.... + 0x05, 0x03, 0x02, 0x13, 0x01, 0x07, 0x02, 0x07, 0x08, 0x07, 0x06, 0x47, 0x07, 0x04, 0x03, 0x07, // ...........G.... + 0x07, 0x04, 0x03, 0x04, 0x10, 0x10, 0x0f, 0x07, 0x04, 0x07, 0x08, 0x04, 0x01, 0x45, 0xd4, 0x01, // .............E.. + 0x2c, 0xfe, 0xd4, 0xd4, 0xa7, 0xfe, 0xf5, 0x34, 0x03, 0x10, 0x0c, 0x34, 0x2b, 0x01, 0x03, 0x01, // ,......4...4+... + 0x09, 0x1f, 0x1a, 0x3b, 0x0f, 0x01, 0x05, 0x0b, 0x08, 0x07, 0x04, 0x1b, 0x16, 0x1c, 0x1c, 0x07, // ...;............ + 0x06, 0x2f, 0x16, 0x06, 0x19, 0x35, 0x63, 0x46, 0x4f, 0x3a, 0x3e, 0x4a, 0x06, 0x1b, 0x10, 0x10, // ./...5cFO:>J.... + 0x11, 0x11, 0x07, 0x16, 0x1e, 0x06, 0x4a, 0x3e, 0x3a, 0x4f, 0x39, 0x57, 0x35, 0x24, 0x10, 0x04, // ......J>:O9W5$.. + 0x1f, 0x40, 0x28, 0x62, 0x02, 0x0c, 0x10, 0x03, 0x34, 0x01, 0x0b, 0x02, 0x87, 0xfc, 0x40, 0x77, // .@(b....4.....@w + 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0xa9, 0x00, 0x04, 0x00, 0x00, 0xff, 0x80, 0x06, 0x80, // ..w..w.......... + 0x05, 0xc0, 0x00, 0x07, 0x00, 0x0f, 0x00, 0x27, 0x00, 0x3f, 0x00, 0x00, 0x24, 0x34, 0x26, 0x22, // .......'.?..$4&" + 0x06, 0x14, 0x16, 0x32, 0x24, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x13, 0x11, 0x14, 0x06, // ...2$4&"...2.... + 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x1e, 0x01, 0x33, 0x21, 0x32, 0x36, // #!"&5.463!..3!26 + 0x37, 0x21, 0x32, 0x16, 0x01, 0x06, 0x23, 0x21, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, // 7!2...#!...#!"&5 + 0x11, 0x21, 0x22, 0x27, 0x26, 0x37, 0x01, 0x36, 0x32, 0x17, 0x01, 0x16, 0x05, 0x00, 0x26, 0x34, // .!"'&7.62.....&4 + 0x26, 0x26, 0x34, 0x01, 0x26, 0x26, 0x34, 0x26, 0x26, 0x34, 0xa6, 0x38, 0x28, 0xfa, 0x40, 0x28, // &&4.&&4&&4.8(.@( + 0x38, 0x38, 0x28, 0x01, 0xab, 0x15, 0x63, 0x3d, 0x01, 0x00, 0x3d, 0x63, 0x15, 0x01, 0xab, 0x28, // 88(...c=..=c...( + 0x38, 0xfe, 0xbb, 0x11, 0x2a, 0xff, 0x00, 0x26, 0x1a, 0xff, 0x00, 0x1a, 0x26, 0xff, 0x00, 0x2a, // 8...*..&....&..* + 0x11, 0x11, 0x1f, 0x01, 0xc0, 0x12, 0x36, 0x12, 0x01, 0xc0, 0x1f, 0x26, 0x34, 0x26, 0x26, 0x34, // ......6....&4&&4 + 0x26, 0x26, 0x34, 0x26, 0x26, 0x34, 0x26, 0x01, 0x20, 0xfe, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x01, // &&4&&4&. ..(88(. + 0x40, 0x28, 0x38, 0x38, 0x48, 0x48, 0x38, 0x38, 0x02, 0x60, 0x28, 0xfe, 0x40, 0x1a, 0x26, 0x26, // @(88HH88.`(.@.&& + 0x1a, 0x01, 0xc0, 0x28, 0x27, 0x1e, 0x01, 0xc0, 0x13, 0x13, 0xfe, 0x40, 0x1e, 0x00, 0x00, 0x00, // ...('......@.... + 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x05, 0xff, 0x05, 0x80, 0x00, 0x31, 0x00, 0x63, 0x00, 0x00, // ...........1.c.. + 0x01, 0x34, 0x26, 0x27, 0x2e, 0x02, 0x35, 0x34, 0x36, 0x35, 0x34, 0x27, 0x26, 0x23, 0x22, 0x06, // .4&'..54654'&#". + 0x23, 0x22, 0x26, 0x23, 0x22, 0x0e, 0x01, 0x07, 0x06, 0x07, 0x0e, 0x02, 0x15, 0x14, 0x16, 0x15, // #"&#"........... + 0x14, 0x06, 0x14, 0x16, 0x33, 0x32, 0x36, 0x33, 0x32, 0x16, 0x33, 0x32, 0x37, 0x3e, 0x01, 0x12, // ....32632.327>.. + 0x37, 0x14, 0x02, 0x06, 0x07, 0x06, 0x23, 0x22, 0x26, 0x23, 0x22, 0x06, 0x23, 0x22, 0x26, 0x35, // 7.....#"&#".#"&5 + 0x34, 0x36, 0x35, 0x34, 0x26, 0x35, 0x34, 0x3e, 0x02, 0x37, 0x36, 0x37, 0x36, 0x33, 0x32, 0x16, // 4654&54>.767632. + 0x33, 0x32, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x15, 0x14, 0x1e, 0x02, 0x17, 0x1e, 0x01, // 32632........... + 0x05, 0x7f, 0x0e, 0x0b, 0x0c, 0x0a, 0x08, 0x0a, 0x0a, 0x04, 0x09, 0x13, 0x4e, 0x14, 0x3c, 0xe8, // ............N.<. + 0x3b, 0x2b, 0x67, 0x43, 0x38, 0x89, 0x41, 0x60, 0x7f, 0x31, 0x19, 0x16, 0x18, 0x16, 0x18, 0x61, // ;+gC8.A`.1.....a + 0x19, 0x39, 0xe1, 0x39, 0xb5, 0x67, 0x81, 0xd5, 0x77, 0x80, 0x8c, 0xfc, 0x9b, 0x7c, 0xca, 0x39, // .9.9.g..w....|.9 + 0xe2, 0x38, 0x18, 0x61, 0x19, 0x49, 0x65, 0x16, 0x19, 0x24, 0x49, 0x80, 0x56, 0x4e, 0x9a, 0xc2, // .8.a.Ie..$I.VN.. + 0x7a, 0x3c, 0xe7, 0x3a, 0x13, 0x4c, 0x14, 0x51, 0x4a, 0x0a, 0x04, 0x03, 0x0c, 0x02, 0x10, 0x12, // z<.:.L.QJ....... + 0x02, 0xc6, 0x2c, 0x8b, 0x1b, 0x1e, 0x1c, 0x2d, 0x1a, 0x17, 0x5b, 0x16, 0x25, 0x12, 0x01, 0x09, // ..,....-..[.%... + 0x30, 0x17, 0x18, 0x16, 0x36, 0x31, 0x49, 0xe9, 0xef, 0x81, 0x28, 0xa0, 0x29, 0x17, 0x57, 0x2c, // 0...61I...(.).W, + 0x1d, 0x16, 0x1f, 0x24, 0x2d, 0xd7, 0x01, 0x14, 0x8b, 0xa5, 0xfe, 0xbb, 0xfb, 0x37, 0x2c, 0x1d, // ...$-........7,. + 0x1d, 0x6f, 0x49, 0x18, 0x58, 0x17, 0x28, 0xa1, 0x29, 0x6f, 0xd5, 0xce, 0xb6, 0x41, 0x3b, 0x3d, // .oI.X.(.)o...A;= + 0x4e, 0x30, 0x0a, 0x65, 0x54, 0x17, 0x5a, 0x17, 0x0d, 0x18, 0x09, 0x20, 0x04, 0x28, 0x9d, 0x00, // N0.eT.Z.... .(.. + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x05, 0x80, 0x05, 0x80, 0x00, 0x4f, 0x00, 0x00, 0x01, 0x14, // ...........O.... + 0x06, 0x07, 0x06, 0x07, 0x06, 0x23, 0x22, 0x2e, 0x03, 0x27, 0x26, 0x27, 0x26, 0x00, 0x27, 0x26, // .....#"..'&'&.'& + 0x27, 0x2e, 0x04, 0x35, 0x34, 0x37, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x32, 0x17, 0x16, 0x17, 0x1e, // '..54767>.32.... + 0x02, 0x17, 0x1e, 0x02, 0x15, 0x14, 0x0e, 0x02, 0x15, 0x14, 0x1e, 0x02, 0x17, 0x1e, 0x01, 0x17, // ................ + 0x1e, 0x03, 0x33, 0x32, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x01, 0x17, 0x1e, 0x02, 0x17, 0x16, 0x17, // ..32>.32........ + 0x16, 0x05, 0x80, 0x14, 0x0b, 0x15, 0x65, 0x5e, 0x5c, 0x1b, 0x34, 0x3f, 0x1f, 0x50, 0x09, 0x62, // ......e^..4?.P.b + 0x4d, 0x7f, 0xfe, 0xee, 0x4f, 0x30, 0x23, 0x03, 0x1e, 0x0b, 0x12, 0x07, 0x33, 0x38, 0x32, 0x19, // M...O0#.....382. + 0x57, 0x1b, 0x0e, 0x07, 0x12, 0x23, 0x0b, 0x26, 0x20, 0x0f, 0x03, 0x1d, 0x0e, 0x39, 0x43, 0x39, // W....#.& ....9C9 + 0x0a, 0x07, 0x15, 0x01, 0x4c, 0xc4, 0x89, 0x02, 0x22, 0x0e, 0x1b, 0x09, 0x12, 0x38, 0x32, 0x3c, // ....L..."....82< + 0x14, 0x0e, 0x1d, 0x2a, 0x04, 0x19, 0x39, 0x46, 0x13, 0x46, 0x06, 0x03, 0x01, 0x28, 0x1b, 0x57, // ...*..9F.F...(.W + 0x19, 0x32, 0x38, 0x33, 0x07, 0x12, 0x0b, 0x1e, 0x03, 0x23, 0x30, 0x4f, 0x01, 0x12, 0x7f, 0x4d, // .283.....#0O...M + 0x62, 0x09, 0x50, 0x1f, 0x3f, 0x34, 0x1b, 0x5c, 0x5e, 0x65, 0x15, 0x0b, 0x14, 0x03, 0x06, 0x46, // b.P.?4..^e.....F + 0x13, 0x46, 0x39, 0x19, 0x04, 0x2a, 0x1d, 0x0e, 0x14, 0x3c, 0x32, 0x38, 0x12, 0x09, 0x1b, 0x0e, // .F9..*...<28.... + 0x22, 0x02, 0x89, 0xc4, 0x4c, 0x01, 0x15, 0x07, 0x0a, 0x39, 0x43, 0x39, 0x0e, 0x1d, 0x03, 0x0f, // "...L....9C9.... + 0x20, 0x26, 0x0b, 0x23, 0x12, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x05, 0x80, // &.#............ + 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x00, 0x01, 0x21, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, // .........!"..... + 0x33, 0x21, 0x32, 0x36, 0x35, 0x11, 0x34, 0x26, 0x17, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // 3!265.4&....#!"& + 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x04, 0x60, 0xfc, 0xc0, 0x42, 0x5e, 0x5e, 0x42, // 5.463!2..`..B^^B + 0x03, 0x40, 0x42, 0x5e, 0x5e, 0xde, 0xa9, 0x77, 0xfc, 0xc0, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0x40, // .@B^^..w..w..w.@ + 0x77, 0xa9, 0x05, 0x00, 0x5e, 0x42, 0xfc, 0xc0, 0x42, 0x5e, 0x5e, 0x42, 0x03, 0x40, 0x42, 0x5e, // w...^B..B^^B.@B^ + 0xa0, 0xfc, 0xc0, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0x40, 0x77, 0xa9, 0xa9, 0x00, 0x02, 0x00, 0x00, // ...w..w.@w...... + 0xff, 0x97, 0x05, 0x00, 0x05, 0x80, 0x00, 0x06, 0x00, 0x23, 0x00, 0x00, 0x01, 0x21, 0x11, 0x01, // .........#...!.. + 0x37, 0x17, 0x01, 0x13, 0x32, 0x17, 0x1e, 0x01, 0x15, 0x11, 0x14, 0x06, 0x07, 0x06, 0x23, 0x22, // 7...2.........#" + 0x27, 0x09, 0x01, 0x06, 0x23, 0x22, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, 0x36, 0x33, // '...#"'..5.46763 + 0x04, 0x80, 0xfc, 0x00, 0x01, 0xa7, 0x59, 0x59, 0x01, 0xa7, 0x0c, 0x17, 0x15, 0x21, 0x27, 0x27, // ......YY.....!'' + 0x21, 0x13, 0x19, 0x30, 0x23, 0xfe, 0x47, 0xfe, 0x47, 0x24, 0x2f, 0x17, 0x15, 0x21, 0x27, 0x27, // !..0#.G.G$/..!'' + 0x21, 0x15, 0x17, 0x05, 0x00, 0xfb, 0x26, 0x01, 0x96, 0x55, 0x55, 0xfe, 0x6a, 0x05, 0x5a, 0x09, // !.....&..UU.j.Z. + 0x0d, 0x38, 0x22, 0xfa, 0xf7, 0x22, 0x38, 0x0d, 0x08, 0x20, 0x01, 0xa8, 0xfe, 0x58, 0x21, 0x09, // .8".."8.. ...X!. + 0x0d, 0x38, 0x22, 0x05, 0x09, 0x22, 0x38, 0x0d, 0x09, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // .8".."8......... + 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x47, 0x00, 0x57, 0x00, 0x00, 0x01, 0x34, 0x2e, 0x04, // .......G.W...4.. + 0x27, 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x02, 0x23, 0x22, 0x2e, 0x02, 0x27, 0x2e, 0x01, 0x27, 0x2e, // '..#"..#"..'..'. + 0x03, 0x35, 0x34, 0x3e, 0x02, 0x35, 0x34, 0x2e, 0x01, 0x27, 0x2e, 0x05, 0x23, 0x22, 0x07, 0x0e, // .54>.54..'..#".. + 0x01, 0x15, 0x14, 0x1e, 0x04, 0x17, 0x16, 0x00, 0x17, 0x1e, 0x05, 0x33, 0x32, 0x36, 0x37, 0x36, // ...........32676 + 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // ....#!"&5.463!2. + 0x05, 0x00, 0x04, 0x20, 0x31, 0x2e, 0x2d, 0x06, 0x05, 0x1c, 0x16, 0x0a, 0x0f, 0x2b, 0x24, 0x29, // ... 1.-......+$) + 0x0d, 0x07, 0x13, 0x0c, 0x16, 0x03, 0x63, 0x8e, 0x38, 0x02, 0x0d, 0x06, 0x07, 0x29, 0x31, 0x29, // ......c.8....)1) + 0x0a, 0x14, 0x03, 0x03, 0x18, 0x1a, 0x1b, 0x17, 0x0a, 0x0b, 0x30, 0x35, 0x2e, 0x44, 0x05, 0x05, // ..........05.D.. + 0x0d, 0x07, 0x12, 0x02, 0x3c, 0x01, 0x39, 0xa4, 0x06, 0x30, 0x12, 0x29, 0x19, 0x24, 0x10, 0x39, // ....<.9..0.).$.9 + 0x93, 0x15, 0x16, 0x01, 0x00, 0xa9, 0x77, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, // ......w.@w..w..w + 0xa9, 0x01, 0x57, 0x0b, 0x0a, 0x17, 0x1b, 0x1a, 0x18, 0x03, 0x03, 0x14, 0x0a, 0x29, 0x31, 0x29, // ..W..........)1) + 0x07, 0x06, 0x0d, 0x02, 0x37, 0x8f, 0x63, 0x03, 0x16, 0x0c, 0x13, 0x07, 0x0d, 0x29, 0x24, 0x2b, // ....7.c......)$+ + 0x0f, 0x0a, 0x16, 0x1c, 0x05, 0x06, 0x2d, 0x2e, 0x31, 0x20, 0x04, 0x16, 0x15, 0x93, 0x39, 0x10, // ......-.1 ....9. + 0x24, 0x19, 0x29, 0x12, 0x30, 0x06, 0xa4, 0xfe, 0xc7, 0x3c, 0x02, 0x12, 0x07, 0x0d, 0x05, 0x05, // $.).0....<...... + 0x44, 0x2e, 0x35, 0x03, 0x39, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0xa9, // D.5.9.@w..w..w.. + 0x00, 0x01, 0x00, 0x2c, 0x00, 0x00, 0x06, 0x54, 0x05, 0x00, 0x00, 0x31, 0x00, 0x00, 0x01, 0x06, // ...,...T...1.... + 0x07, 0x16, 0x15, 0x14, 0x02, 0x0e, 0x01, 0x04, 0x23, 0x20, 0x27, 0x16, 0x33, 0x32, 0x37, 0x2e, // ........# '.327. + 0x01, 0x27, 0x16, 0x33, 0x32, 0x37, 0x2e, 0x01, 0x3d, 0x01, 0x16, 0x17, 0x2e, 0x01, 0x35, 0x34, // .'.327..=.....54 + 0x37, 0x16, 0x04, 0x17, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x36, 0x37, 0x06, 0x07, 0x36, // 7...&54632.67..6 + 0x06, 0x54, 0x43, 0x5f, 0x01, 0x4c, 0x9b, 0xd6, 0xfe, 0xd2, 0xac, 0xfe, 0xf1, 0xe1, 0x23, 0x2b, // .TC_.L........#+ + 0xe1, 0xb0, 0x69, 0xa6, 0x1f, 0x21, 0x1c, 0x2b, 0x2a, 0x70, 0x93, 0x44, 0x4e, 0x42, 0x4e, 0x2c, // ..i..!.+*p.DNBN, + 0x79, 0x01, 0x5b, 0xc6, 0x08, 0xbd, 0x86, 0x8c, 0x60, 0x6d, 0x60, 0x25, 0x69, 0x5d, 0x04, 0x68, // y.[.....`m`%i].h + 0x62, 0x45, 0x0e, 0x1c, 0x82, 0xfe, 0xfd, 0xee, 0xb7, 0x6d, 0x91, 0x04, 0x8a, 0x02, 0x7d, 0x61, // bE.......m....}a + 0x05, 0x0b, 0x17, 0xb1, 0x75, 0x04, 0x26, 0x03, 0x2c, 0x8e, 0x53, 0x58, 0x4b, 0x95, 0xb3, 0x0a, // ....u.&.,.SXK... + 0x26, 0x24, 0x86, 0xbd, 0x66, 0x15, 0x39, 0x73, 0x3f, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x5f, // &$..f.9s?......_ + 0xff, 0x80, 0x03, 0xbf, 0x06, 0x00, 0x00, 0x14, 0x00, 0x00, 0x01, 0x11, 0x23, 0x22, 0x06, 0x1d, // ............#".. + 0x01, 0x21, 0x03, 0x23, 0x11, 0x21, 0x11, 0x23, 0x11, 0x21, 0x35, 0x34, 0x36, 0x33, 0x32, 0x03, // .!.#.!.#.!54632. + 0xbf, 0x9d, 0x56, 0x3c, 0x01, 0x25, 0x27, 0xfe, 0xfe, 0xce, 0xff, 0x00, 0xff, 0xd0, 0xad, 0x93, // ..V<.%'......... + 0x05, 0xf4, 0xfe, 0xf8, 0x48, 0x48, 0xbd, 0xfe, 0xd8, 0xfd, 0x09, 0x02, 0xf7, 0x01, 0x28, 0xda, // ....HH........(. + 0xba, 0xcd, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0xff, 0xa7, 0x06, 0x00, 0x05, 0x80, 0x00, 0x54, // ...............T + 0x00, 0x5c, 0x00, 0x64, 0x00, 0x6b, 0x00, 0x73, 0x00, 0x7a, 0x00, 0x82, 0x00, 0x88, 0x00, 0x00, // ...d.k.s.z...... + 0x00, 0x20, 0x04, 0x12, 0x15, 0x14, 0x00, 0x07, 0x06, 0x26, 0x35, 0x34, 0x36, 0x35, 0x34, 0x27, // . .......&54654' + 0x3e, 0x04, 0x35, 0x34, 0x27, 0x36, 0x27, 0x26, 0x06, 0x0f, 0x01, 0x26, 0x22, 0x07, 0x2e, 0x02, // >.54'6'&...&"... + 0x07, 0x06, 0x17, 0x06, 0x15, 0x14, 0x1e, 0x03, 0x17, 0x06, 0x07, 0x0e, 0x01, 0x22, 0x26, 0x27, // ............."&' + 0x2e, 0x01, 0x2f, 0x01, 0x22, 0x06, 0x1e, 0x01, 0x1f, 0x01, 0x1e, 0x01, 0x1f, 0x01, 0x1e, 0x03, // ../."........... + 0x3f, 0x01, 0x14, 0x16, 0x15, 0x14, 0x06, 0x27, 0x26, 0x00, 0x35, 0x34, 0x12, 0x13, 0x36, 0x27, // ?......'&.54..6' + 0x26, 0x07, 0x06, 0x17, 0x16, 0x17, 0x36, 0x27, 0x26, 0x07, 0x06, 0x17, 0x16, 0x17, 0x36, 0x27, // &.....6'&.....6' + 0x26, 0x07, 0x06, 0x16, 0x17, 0x36, 0x27, 0x26, 0x07, 0x06, 0x17, 0x16, 0x17, 0x36, 0x27, 0x26, // &....6'&.....6'& + 0x06, 0x17, 0x16, 0x37, 0x34, 0x07, 0x22, 0x15, 0x14, 0x37, 0x32, 0x37, 0x26, 0x07, 0x06, 0x16, // ...74."..727&... + 0x36, 0x02, 0x2f, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xfe, 0xdb, 0xe8, 0x1b, 0x1a, 0x01, 0x34, 0x39, // 6./...a.......49 + 0x5b, 0x61, 0x41, 0x29, 0x4f, 0x25, 0x2d, 0x1c, 0x6a, 0x27, 0x26, 0x5d, 0xc6, 0x5d, 0x10, 0x35, // [aA)O%-.j'&].].5 + 0x72, 0x1c, 0x2d, 0x25, 0x4f, 0x29, 0x40, 0x61, 0x5b, 0x39, 0x27, 0x0a, 0x15, 0x30, 0x42, 0x41, // r.-%O)@a[9'..0BA + 0x17, 0x13, 0x3b, 0x14, 0x14, 0x15, 0x10, 0x06, 0x0c, 0x07, 0x07, 0x16, 0x2b, 0x0a, 0x0a, 0x0d, // ..;.........+... + 0x3e, 0x48, 0x43, 0x16, 0x17, 0x01, 0x1a, 0x1b, 0xe8, 0xfe, 0xdb, 0xce, 0x55, 0x03, 0x0a, 0x0a, // >HC.........U... + 0x03, 0x03, 0x0a, 0x09, 0x23, 0x07, 0x09, 0x0a, 0x06, 0x07, 0x09, 0x0a, 0x24, 0x09, 0x09, 0x08, // ....#.......$... + 0x09, 0x09, 0x12, 0x32, 0x08, 0x0c, 0x0c, 0x08, 0x09, 0x0d, 0x0c, 0x41, 0x03, 0x10, 0x0f, 0x08, // ...2.......A.... + 0x11, 0x0f, 0x43, 0x11, 0x10, 0x11, 0x10, 0x3a, 0x02, 0x10, 0x10, 0x04, 0x20, 0x05, 0x80, 0xce, // ..C....:.... ... + 0xfe, 0x9f, 0xd1, 0xfb, 0xfe, 0x6f, 0x4d, 0x05, 0x18, 0x12, 0x03, 0x93, 0x3d, 0x61, 0x2d, 0x06, // .....oM.....=a-. + 0x18, 0x36, 0x4f, 0x83, 0x55, 0x77, 0x57, 0x5b, 0x71, 0x09, 0x28, 0x18, 0x18, 0x1a, 0x1a, 0x0b, // .6O.UwW[q.(..... + 0x20, 0x2d, 0x09, 0x71, 0x5b, 0x57, 0x77, 0x55, 0x82, 0x50, 0x36, 0x18, 0x06, 0x24, 0x43, 0x0a, // -.q[WwU.P6..$C. + 0x0a, 0x2b, 0x29, 0x20, 0x28, 0x04, 0x03, 0x09, 0x0e, 0x0e, 0x05, 0x05, 0x0a, 0x38, 0x17, 0x17, // .+) (........8.. + 0x26, 0x2f, 0x0d, 0x01, 0x04, 0x04, 0x26, 0x65, 0x04, 0x12, 0x18, 0x05, 0x4d, 0x01, 0x91, 0xfb, // &/....&e....M... + 0xd1, 0x01, 0x61, 0xfc, 0x7f, 0x07, 0x05, 0x03, 0x05, 0x07, 0x05, 0x06, 0x1a, 0x05, 0x0b, 0x09, // ..a............. + 0x06, 0x05, 0x0b, 0x0a, 0x26, 0x07, 0x0c, 0x0d, 0x07, 0x05, 0x1a, 0x24, 0x08, 0x0b, 0x0c, 0x09, // ....&......$.... + 0x08, 0x0b, 0x0c, 0x10, 0x0b, 0x05, 0x04, 0x16, 0x04, 0x06, 0x07, 0x0d, 0x02, 0x0b, 0x0d, 0x02, // ................ + 0x15, 0x0b, 0x02, 0x03, 0x18, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x06, 0x80, // ................ + 0x05, 0x80, 0x00, 0x25, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, // ...%......+."&5. + 0x34, 0x26, 0x22, 0x06, 0x1d, 0x01, 0x33, 0x32, 0x16, 0x15, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, // 4&"...32.....#!" + 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x35, 0x34, 0x00, 0x20, 0x00, 0x06, 0x80, 0x26, 0x1a, // &5.463!54. ...&. + 0x40, 0x1a, 0x26, 0x96, 0xd4, 0x96, 0x60, 0x28, 0x38, 0x38, 0x28, 0xfc, 0x40, 0x28, 0x38, 0x38, // @.&...`(88(.@(88 + 0x28, 0x02, 0xa0, 0x01, 0x07, 0x01, 0x72, 0x01, 0x07, 0x03, 0xc0, 0xff, 0x00, 0x1a, 0x26, 0x26, // (.....r.......&& + 0x1a, 0x01, 0x00, 0x6a, 0x96, 0x96, 0x6a, 0xc0, 0x38, 0x28, 0xfd, 0xc0, 0x28, 0x38, 0x38, 0x28, // ...j..j.8(..(88( + 0x02, 0x40, 0x28, 0x38, 0xc0, 0xb9, 0x01, 0x07, 0xfe, 0xf9, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, // .@(8............ + 0xff, 0x80, 0x07, 0x80, 0x05, 0x80, 0x00, 0x0f, 0x00, 0x19, 0x00, 0x23, 0x00, 0x27, 0x00, 0x2b, // ...........#.'.+ + 0x00, 0x00, 0x01, 0x32, 0x16, 0x15, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, // ...2.....#!"&5.4 + 0x36, 0x33, 0x15, 0x22, 0x06, 0x1d, 0x01, 0x21, 0x35, 0x34, 0x26, 0x23, 0x11, 0x32, 0x36, 0x35, // 63."...!54&#.265 + 0x11, 0x21, 0x11, 0x14, 0x16, 0x33, 0x37, 0x35, 0x21, 0x15, 0x33, 0x35, 0x21, 0x15, 0x06, 0xe0, // .!...375!.35!... + 0x42, 0x5e, 0x5e, 0x42, 0xf9, 0xc0, 0x42, 0x5e, 0x5e, 0x42, 0x0d, 0x13, 0x06, 0x80, 0x13, 0x0d, // B^^B..B^^B...... + 0x0d, 0x13, 0xf9, 0x80, 0x13, 0x0d, 0x60, 0x01, 0x00, 0x80, 0x01, 0x80, 0x05, 0x80, 0x5e, 0x42, // ......`.......^B + 0xfb, 0x40, 0x42, 0x5e, 0x5e, 0x42, 0x04, 0xc0, 0x42, 0x5e, 0x80, 0x13, 0x0d, 0xe0, 0xe0, 0x0d, // .@B^^B..B^...... + 0x13, 0xfb, 0x00, 0x13, 0x0d, 0x02, 0x60, 0xfd, 0xa0, 0x0d, 0x13, 0x80, 0x80, 0x80, 0x80, 0x80, // ......`......... + 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x05, 0x80, 0x05, 0x80, 0x00, 0x07, 0x00, 0x21, 0x00, 0x3d, // .............!.= + 0x00, 0x00, 0x00, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x01, 0x16, 0x07, 0x06, 0x2b, 0x01, // ....."&462....+. + 0x22, 0x26, 0x27, 0x26, 0x00, 0x27, 0x2e, 0x01, 0x3d, 0x01, 0x34, 0x37, 0x36, 0x3b, 0x01, 0x16, // "&'&.'..=.476;.. + 0x04, 0x17, 0x16, 0x12, 0x05, 0x16, 0x07, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x27, 0x26, 0x02, 0x00, // ........+."&'&.. + 0x24, 0x27, 0x2e, 0x01, 0x3d, 0x01, 0x34, 0x37, 0x36, 0x3b, 0x01, 0x0c, 0x01, 0x17, 0x16, 0x12, // $'..=.476;...... + 0x01, 0x80, 0x70, 0xa0, 0x70, 0x70, 0xa0, 0x02, 0x70, 0x02, 0x13, 0x12, 0x1d, 0x87, 0x19, 0x24, // ..p.pp..p......$ + 0x02, 0x16, 0xfe, 0xbb, 0xe5, 0x19, 0x21, 0x15, 0x11, 0x1a, 0x05, 0xa0, 0x01, 0x24, 0x71, 0x72, // ......!......$qr + 0x87, 0x02, 0x0d, 0x02, 0x14, 0x12, 0x1c, 0x8f, 0x1a, 0x25, 0x01, 0x0c, 0xb2, 0xfe, 0xe3, 0xfe, // .........%...... + 0x7d, 0xd7, 0x19, 0x23, 0x14, 0x12, 0x1a, 0x03, 0x01, 0x06, 0x01, 0xdf, 0xba, 0xbb, 0xd6, 0x01, // }..#............ + 0x10, 0xa0, 0x70, 0x70, 0xa0, 0x70, 0xfe, 0xc5, 0x1c, 0x14, 0x15, 0x21, 0x19, 0xe5, 0x01, 0x45, // ..pp.p.....!...E + 0x16, 0x02, 0x24, 0x19, 0x87, 0x1d, 0x12, 0x11, 0x0d, 0x87, 0x72, 0x71, 0xfe, 0xdc, 0xa2, 0x1b, // ..$.......rq.... + 0x14, 0x14, 0x23, 0x19, 0xd7, 0x01, 0x83, 0x01, 0x1d, 0xb2, 0x0d, 0x01, 0x25, 0x19, 0x8f, 0x1c, // ..#.........%... + 0x12, 0x12, 0x0d, 0xd6, 0xbb, 0xba, 0xfe, 0x21, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, // .......!........ + 0x05, 0x00, 0x00, 0x07, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x29, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x14, // .........).?.... + 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x04, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x17, 0x11, // ."&462..."&462.. + 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x01, 0x21, // 4&#!".....3!26.! + 0x03, 0x2e, 0x01, 0x23, 0x21, 0x22, 0x06, 0x07, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // ...#!"......#!"& + 0x35, 0x11, 0x34, 0x37, 0x13, 0x3e, 0x01, 0x33, 0x21, 0x32, 0x16, 0x17, 0x13, 0x16, 0x04, 0x10, // 5.47.>.3!2...... + 0x2f, 0x42, 0x2f, 0x2f, 0x42, 0x01, 0x2f, 0x2f, 0x42, 0x2f, 0x2f, 0x42, 0x9f, 0x13, 0x0d, 0xfb, // /B//B.//B//B.... + 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x04, 0xc0, 0x0d, 0x13, 0xfb, 0x32, 0x04, 0x9c, 0x9d, 0x04, 0x18, // @.........2..... + 0x0e, 0xfc, 0xf2, 0x0e, 0x18, 0x04, 0x04, 0xb1, 0x5e, 0x42, 0xfb, 0x40, 0x42, 0x5e, 0x10, 0xc5, // ........^B.@B^.. + 0x11, 0x5c, 0x37, 0x03, 0x0e, 0x37, 0x5c, 0x11, 0xc5, 0x10, 0x01, 0x61, 0x42, 0x2f, 0x2f, 0x42, // ..7..7.....aB//B + 0x2f, 0x2f, 0x42, 0x2f, 0x2f, 0x42, 0x2f, 0xf0, 0x01, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0xfe, 0xc0, // //B//B/..@...... + 0x0d, 0x13, 0x13, 0x01, 0xed, 0x01, 0xe2, 0x0d, 0x11, 0x11, 0x0d, 0xfd, 0x7e, 0xfe, 0xc0, 0x42, // ............~..B + 0x5e, 0x5e, 0x42, 0x01, 0x40, 0x19, 0x32, 0x02, 0x5e, 0x35, 0x42, 0x42, 0x35, 0xfd, 0xa2, 0x32, // ^^B.@.2.^5BB5..2 + 0x00, 0x02, 0x00, 0x00, 0xff, 0x83, 0x07, 0x00, 0x05, 0x80, 0x00, 0x2e, 0x00, 0x34, 0x00, 0x00, // .............4.. + 0x01, 0x32, 0x16, 0x14, 0x06, 0x23, 0x11, 0x14, 0x06, 0x23, 0x00, 0x25, 0x0e, 0x01, 0x16, 0x17, // .2...#...#.%.... + 0x0e, 0x01, 0x1e, 0x02, 0x17, 0x0e, 0x01, 0x26, 0x27, 0x2e, 0x04, 0x36, 0x37, 0x23, 0x22, 0x26, // .......&'..67#"& + 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x20, 0x01, 0x32, 0x16, 0x15, 0x03, 0x11, 0x00, 0x05, 0x11, // =.463! .2....... + 0x04, 0x06, 0x80, 0x35, 0x4b, 0x4b, 0x35, 0x4c, 0x34, 0xfe, 0x5f, 0xfe, 0x75, 0x3a, 0x42, 0x04, // ...5KK5L4._.u:B. + 0x26, 0x14, 0x06, 0x12, 0x31, 0x2f, 0x26, 0x1d, 0xa5, 0xac, 0x2e, 0x07, 0x2d, 0x13, 0x1b, 0x03, // &...1/&.....-... + 0x0a, 0x11, 0x7a, 0x42, 0x5e, 0x5e, 0x42, 0x01, 0xe0, 0x01, 0xb3, 0x01, 0xcd, 0x34, 0x4c, 0x80, // ..zB^^B......4L. + 0xfe, 0x76, 0xfe, 0x8a, 0x01, 0x79, 0x03, 0x80, 0x4b, 0x6a, 0x4b, 0xfe, 0x80, 0x34, 0x4c, 0x01, // .v...y..KjK..4L. + 0x5b, 0x21, 0x13, 0x5e, 0x6b, 0x27, 0x21, 0x41, 0x33, 0x3b, 0x29, 0x1e, 0x3a, 0x32, 0x1b, 0x2a, // [!.^k'!A3;).:2.* + 0x17, 0x81, 0x3c, 0x76, 0x54, 0x71, 0x36, 0x5e, 0x42, 0xc0, 0x42, 0x5e, 0x01, 0x80, 0x4c, 0x34, // ...54.7&5462. + 0x15, 0x14, 0x07, 0x16, 0x12, 0x15, 0x14, 0x1e, 0x03, 0x03, 0x90, 0x10, 0x3b, 0x55, 0x20, 0x67, // ............;U g + 0x49, 0xfd, 0x76, 0x05, 0x14, 0xfe, 0xf6, 0x30, 0x5a, 0x99, 0xba, 0x99, 0x5a, 0x30, 0x04, 0xc0, // I.v....0Z...Z0.. + 0x4c, 0x34, 0xfe, 0x40, 0x96, 0xd4, 0x96, 0xfe, 0x40, 0x34, 0x4c, 0x32, 0x52, 0x58, 0x3d, 0x27, // L4.@....@4L2RX=' + 0xea, 0xbe, 0x08, 0x38, 0x50, 0x38, 0x08, 0xbe, 0xea, 0x27, 0x3d, 0x58, 0x52, 0xb0, 0x20, 0x55, // ...8P8...'=XR. U + 0x3b, 0x10, 0x10, 0x49, 0x67, 0x01, 0x30, 0x01, 0x2c, 0x02, 0x14, 0x33, 0x6c, 0x62, 0x3f, 0x3f, // ;..Ig.0.,..3lb?? + 0x62, 0x6c, 0x33, 0xfd, 0xec, 0xfe, 0xd4, 0x34, 0x4c, 0x6a, 0x96, 0x96, 0x6a, 0x4c, 0x34, 0x2a, // bl3....4Lj..jL4* + 0x5c, 0x93, 0xaa, 0xf2, 0x8b, 0x98, 0x01, 0x05, 0x1c, 0x13, 0x14, 0x28, 0x38, 0x38, 0x28, 0x14, // ...........(88(. + 0x13, 0x1c, 0xfe, 0xfb, 0x98, 0x8b, 0xf2, 0xaa, 0x93, 0x5c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, // ................ 0xff, 0x80, 0x05, 0xfe, 0x05, 0x7d, 0x00, 0x49, 0x00, 0x00, 0x01, 0x17, 0x16, 0x07, 0x06, 0x0f, // .....}.I........ 0x01, 0x17, 0x16, 0x07, 0x06, 0x2f, 0x01, 0x07, 0x06, 0x07, 0x06, 0x23, 0x22, 0x2f, 0x01, 0x07, // ...../.....#"/.. 0x06, 0x27, 0x26, 0x2f, 0x01, 0x07, 0x06, 0x27, 0x26, 0x3f, 0x01, 0x27, 0x26, 0x27, 0x26, 0x3f, // .'&/...'&?.'&'&? @@ -1847,568 +2208,550 @@ static const uint8_t s_iconsFontAwesomeTtf[80776] = 0x4c, 0x35, 0x69, 0x98, 0x3e, 0x39, 0x15, 0x16, 0x65, 0x4d, 0x8b, 0xa1, 0x45, 0x3b, 0x4b, 0x35, // L5i.>9..eM..E;K5 0x02, 0x80, 0x35, 0x4b, 0x09, 0x13, 0x11, 0x1c, 0x0f, 0x1c, 0x03, 0x4a, 0x37, 0x15, 0x52, 0x3e, // ..5K.......J7.R> 0x40, 0x23, 0x86, 0x7a, 0x44, 0x3c, 0x98, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x07, 0x00, // @#.zD<.......... - 0x05, 0x80, 0x00, 0x37, 0x00, 0x3f, 0x00, 0x73, 0x00, 0x00, 0x25, 0x33, 0x11, 0x23, 0x22, 0x2e, // ...7.?.s..%3.#". - 0x02, 0x27, 0x2e, 0x02, 0x27, 0x26, 0x27, 0x26, 0x27, 0x2e, 0x04, 0x23, 0x22, 0x06, 0x15, 0x14, // .'..'&'&'..#"... - 0x1e, 0x02, 0x15, 0x21, 0x22, 0x06, 0x15, 0x14, 0x16, 0x33, 0x21, 0x0e, 0x01, 0x15, 0x14, 0x17, // ...!"....3!..... - 0x06, 0x14, 0x16, 0x17, 0x06, 0x15, 0x14, 0x16, 0x33, 0x32, 0x3e, 0x01, 0x24, 0x34, 0x26, 0x22, // ........32>.$4&" - 0x06, 0x14, 0x16, 0x32, 0x13, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x07, 0x06, 0x23, 0x22, 0x26, // ...2....#!"..#"& - 0x3f, 0x01, 0x26, 0x35, 0x34, 0x37, 0x26, 0x27, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x21, // ?.&547&'#"&5463! - 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x1e, 0x03, 0x17, 0x16, 0x17, 0x1e, 0x06, 0x33, 0x21, 0x32, // &54632.......3!2 - 0x16, 0x05, 0x60, 0x20, 0x20, 0x23, 0x41, 0x3c, 0x28, 0x1d, 0x02, 0x03, 0x05, 0x02, 0x48, 0x28, // ..` #A<(.....H( - 0x0e, 0x18, 0x01, 0x13, 0x12, 0x16, 0x15, 0x08, 0x47, 0x59, 0x1e, 0x24, 0x1e, 0xfd, 0xc0, 0x32, // ........GY.$...2 - 0x4e, 0x4c, 0x34, 0x01, 0x4b, 0x0f, 0x14, 0x35, 0x12, 0x23, 0x1e, 0x04, 0x61, 0x57, 0x54, 0xc6, // NL4.K..5.#..aWT. - 0xbe, 0x01, 0x68, 0x26, 0x34, 0x26, 0x26, 0x34, 0xa6, 0x4b, 0x35, 0xfe, 0xe0, 0x3b, 0xa4, 0xbe, // ..h&4&&4.K5..;.. - 0x7f, 0x8e, 0xb0, 0x01, 0x01, 0x3d, 0x03, 0x21, 0x04, 0xa9, 0x69, 0x97, 0x98, 0x68, 0x01, 0x76, // .....=.!..i..h.v - 0x16, 0xa3, 0x7d, 0x26, 0x3f, 0x2f, 0x22, 0x28, 0x0d, 0x23, 0x41, 0x02, 0x18, 0x0e, 0x1b, 0x15, // ..}&?/"(.#A..... - 0x18, 0x17, 0x0a, 0x01, 0x20, 0x35, 0x4b, 0x80, 0x02, 0x80, 0x18, 0x32, 0x2a, 0x21, 0x03, 0x03, // .... 5K....2*!.. - 0x06, 0x02, 0x51, 0x40, 0x16, 0x2e, 0x03, 0x27, 0x21, 0x26, 0x17, 0x3d, 0x43, 0x2b, 0x53, 0x35, // ..Q@...'!&.=C+S5 - 0x39, 0x14, 0x4d, 0x33, 0x34, 0x4c, 0x11, 0x3d, 0x19, 0x45, 0x32, 0x20, 0x4a, 0x49, 0x10, 0x18, // 9.M34L.=.E2 JI.. - 0x20, 0x55, 0x52, 0x40, 0x40, 0x26, 0x34, 0x26, 0x26, 0x34, 0x26, 0x02, 0x80, 0xfd, 0x80, 0x35, // UR@@&4&&4&....5 - 0x4b, 0x3b, 0x45, 0x9b, 0x8c, 0x05, 0x4c, 0x66, 0x16, 0x15, 0x39, 0x3e, 0x98, 0x69, 0x67, 0x98, // K;E...Lf..9>.ig. - 0x3c, 0x44, 0x7a, 0x86, 0x23, 0x40, 0x3e, 0x52, 0x15, 0x37, 0x4a, 0x03, 0x1c, 0x0f, 0x1c, 0x11, // R.7J..... - 0x13, 0x09, 0x4b, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x07, // ..K............. - 0x00, 0x35, 0x00, 0x68, 0x00, 0x00, 0x04, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x13, 0x34, // .5.h...4&"...2.4 - 0x23, 0x22, 0x07, 0x2e, 0x01, 0x22, 0x07, 0x26, 0x23, 0x22, 0x06, 0x07, 0x11, 0x34, 0x26, 0x23, // #"...".&#"...4&# - 0x22, 0x06, 0x15, 0x11, 0x22, 0x2e, 0x02, 0x23, 0x22, 0x06, 0x15, 0x14, 0x17, 0x16, 0x17, 0x16, // "..."..#"....... - 0x17, 0x16, 0x17, 0x16, 0x1d, 0x01, 0x21, 0x35, 0x34, 0x3e, 0x01, 0x37, 0x14, 0x07, 0x06, 0x15, // ......!54>.7.... - 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x2e, 0x05, 0x27, 0x26, 0x27, 0x2e, // ...#!"&5.4..'&'. - 0x04, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x11, 0x34, 0x36, 0x33, 0x32, 0x16, 0x1d, 0x01, 0x16, // .54632..4632.... - 0x17, 0x36, 0x33, 0x32, 0x17, 0x36, 0x16, 0x05, 0x00, 0x26, 0x34, 0x26, 0x26, 0x34, 0xa6, 0xa7, // .632.6...&4&&4.. - 0x1a, 0x1e, 0x10, 0x49, 0x4a, 0x20, 0x32, 0x45, 0x19, 0x3d, 0x11, 0x4c, 0x34, 0x33, 0x4d, 0x14, // ...IJ 2E.=.L43M. - 0x39, 0x35, 0x53, 0x2b, 0x43, 0x3d, 0x8b, 0x2c, 0x15, 0x40, 0x51, 0x51, 0x19, 0x39, 0x02, 0x80, // 95S+C=.,.@QQ.9.. - 0x40, 0x40, 0x80, 0x45, 0x3b, 0x4b, 0x35, 0xfd, 0x80, 0x35, 0x4b, 0x09, 0x13, 0x11, 0x1c, 0x0f, // @@.E;K5..5K..... - 0x1c, 0x03, 0x4a, 0x37, 0x15, 0x52, 0x3e, 0x40, 0x23, 0x86, 0x7a, 0x44, 0x3c, 0x98, 0x67, 0x69, // ..J7.R>@#.zD<.gi - 0x98, 0x3e, 0x39, 0x15, 0x16, 0x65, 0x4d, 0x8b, 0xa1, 0x5a, 0x34, 0x26, 0x26, 0x34, 0x26, 0x03, // .>9..eM..Z4&&4&. - 0x3c, 0xbd, 0x05, 0x1e, 0x23, 0x12, 0x35, 0x14, 0x0f, 0x01, 0x4b, 0x34, 0x4c, 0x4e, 0x32, 0xfd, // <...#.5...K4LN2. - 0xc0, 0x1e, 0x24, 0x1e, 0x59, 0x47, 0x18, 0x42, 0x18, 0x0d, 0x28, 0x48, 0x47, 0x1e, 0x45, 0x47, // ..$.YG.B..(HG.EG - 0x20, 0x20, 0x48, 0xbe, 0xc5, 0x56, 0x85, 0xbd, 0xa4, 0x3b, 0xfe, 0xe0, 0x35, 0x4b, 0x4b, 0x35, // H..V...;..5KK5 - 0x01, 0x20, 0x0a, 0x17, 0x18, 0x15, 0x1b, 0x0e, 0x18, 0x02, 0x41, 0x23, 0x0d, 0x28, 0x22, 0x2f, // . ........A#.("/ - 0x3f, 0x26, 0x7d, 0xa3, 0x16, 0x01, 0x76, 0x68, 0x98, 0x97, 0x69, 0xa9, 0x04, 0x21, 0x03, 0x3c, // ?&}...vh..i..!.< - 0x01, 0xac, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x34, // ...............4 - 0x00, 0x3c, 0x00, 0x70, 0x00, 0x00, 0x01, 0x34, 0x2e, 0x01, 0x3d, 0x01, 0x21, 0x15, 0x14, 0x0e, // .<.p...4..=.!... - 0x02, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x0e, 0x04, 0x15, 0x14, 0x16, 0x33, 0x32, 0x3e, // .............32> - 0x02, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x11, 0x16, 0x33, 0x32, 0x37, 0x16, 0x32, // .3...3265..327.2 - 0x36, 0x37, 0x16, 0x33, 0x32, 0x36, 0x02, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x01, 0x14, // 67.326.4&"...2.. - 0x06, 0x2f, 0x01, 0x06, 0x23, 0x22, 0x27, 0x06, 0x07, 0x15, 0x14, 0x06, 0x23, 0x22, 0x26, 0x35, // ./..#"'.....#"&5 - 0x11, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x3e, 0x03, 0x37, 0x36, 0x37, 0x3e, 0x06, 0x35, 0x11, // ..#"&54>.767>.5. - 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x15, 0x11, 0x14, 0x17, 0x16, 0x05, 0x80, 0x40, 0x40, 0xfd, // 463!2........@@. - 0x80, 0x18, 0x32, 0x2a, 0x21, 0x09, 0x05, 0x51, 0x40, 0x16, 0x2e, 0x03, 0x27, 0x21, 0x26, 0x17, // ..2*!..Q@...'!&. - 0x3d, 0x43, 0x2b, 0x53, 0x35, 0x39, 0x14, 0x4d, 0x33, 0x34, 0x4c, 0x2e, 0x39, 0x45, 0x32, 0x20, // =C+S59.M34L.9E2 - 0x4a, 0x49, 0x10, 0x18, 0x20, 0x55, 0x52, 0x80, 0x26, 0x34, 0x26, 0x26, 0x34, 0x01, 0x26, 0x9b, // JI.. UR.&4&&4.&. - 0x8c, 0x05, 0x4c, 0x66, 0x16, 0x15, 0x36, 0x41, 0x98, 0x69, 0x67, 0x98, 0x36, 0x4a, 0x79, 0x87, // ..Lf..6A.ig.6Jy. - 0x23, 0x40, 0x3e, 0x52, 0x15, 0x37, 0x4a, 0x03, 0x1c, 0x0f, 0x1c, 0x11, 0x13, 0x09, 0x4b, 0x35, // #@>R.7J.......K5 - 0x02, 0x80, 0x35, 0x4b, 0x3b, 0x45, 0x02, 0x40, 0x54, 0xc6, 0xbe, 0x48, 0x20, 0x20, 0x23, 0x41, // ..5K;E.@T..H #A - 0x3c, 0x28, 0x1d, 0x08, 0x04, 0x48, 0x28, 0x0e, 0x18, 0x01, 0x13, 0x12, 0x16, 0x15, 0x08, 0x47, // <(...H(........G - 0x59, 0x1e, 0x24, 0x1e, 0xfd, 0xc0, 0x32, 0x4e, 0x4c, 0x34, 0x01, 0x4b, 0x23, 0x35, 0x12, 0x23, // Y.$...2NL4.K#5.# - 0x1e, 0x04, 0x61, 0x03, 0x3d, 0x34, 0x26, 0x26, 0x34, 0x26, 0xfd, 0x44, 0x8e, 0xb0, 0x01, 0x01, // ..a.=4&&4&.D.... - 0x3d, 0x03, 0x1e, 0x07, 0xa9, 0x69, 0x97, 0x98, 0x68, 0x01, 0x76, 0x16, 0xa3, 0x7d, 0x26, 0x3f, // =....i..h.v..}&? - 0x2f, 0x22, 0x28, 0x0d, 0x23, 0x41, 0x02, 0x18, 0x0e, 0x1b, 0x15, 0x18, 0x17, 0x0a, 0x01, 0x20, // /"(.#A......... - 0x35, 0x4b, 0x4b, 0x35, 0xfe, 0xe0, 0x3b, 0xa4, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // 5KK5..;......... - 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x1f, 0x00, 0x2b, 0x00, 0x00, 0x01, 0x35, 0x34, 0x26, // .........+...54& - 0x23, 0x21, 0x37, 0x36, 0x34, 0x2f, 0x01, 0x26, 0x22, 0x07, 0x01, 0x07, 0x06, 0x14, 0x1f, 0x01, // #!764/.&"....... - 0x01, 0x16, 0x32, 0x3f, 0x01, 0x36, 0x34, 0x2f, 0x01, 0x21, 0x32, 0x36, 0x00, 0x10, 0x02, 0x04, // ..2?.64/.!26.... - 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, 0x05, 0x00, 0x26, 0x1a, 0xfe, 0x0a, 0xbd, 0x13, // $...$ ...&..... - 0x13, 0x5b, 0x12, 0x36, 0x12, 0xfe, 0x96, 0x5b, 0x12, 0x12, 0x5b, 0x01, 0x6a, 0x12, 0x36, 0x12, // .[.6...[..[.j.6. - 0x5b, 0x12, 0x12, 0xbd, 0x01, 0xf6, 0x1a, 0x26, 0x01, 0x00, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, // [......&......^. - 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x02, 0x40, 0x80, 0x1a, 0x26, 0xbd, 0x13, // ....a...a.@..&.. - 0x34, 0x13, 0x5b, 0x12, 0x12, 0xfe, 0x96, 0x5b, 0x12, 0x36, 0x12, 0x5b, 0xfe, 0x96, 0x12, 0x12, // 4.[....[.6.[.... - 0x5b, 0x12, 0x36, 0x12, 0xbd, 0x26, 0x01, 0x2b, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, // [.6..&.+.^.....a - 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // ...a............ - 0x05, 0x80, 0x00, 0x1f, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x34, 0x2f, 0x01, 0x01, 0x26, 0x22, 0x0f, // .....+...4/..&". - 0x01, 0x06, 0x14, 0x1f, 0x01, 0x21, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x33, 0x21, 0x07, 0x06, // .....!".....3!.. - 0x14, 0x1f, 0x01, 0x16, 0x32, 0x37, 0x01, 0x37, 0x24, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, // ....27.7$... $.. - 0x12, 0x24, 0x20, 0x04, 0x05, 0x05, 0x12, 0x5b, 0xfe, 0x96, 0x12, 0x36, 0x12, 0x5b, 0x12, 0x12, // .$ ....[...6.[.. - 0xbd, 0xfe, 0x0a, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0xf6, 0xbd, 0x13, 0x13, 0x5b, 0x12, 0x36, 0x12, // ....&&......[.6. - 0x01, 0x6a, 0x5b, 0x01, 0x0d, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, // .j[......^.....a - 0x01, 0xa2, 0x01, 0x61, 0x02, 0x65, 0x36, 0x12, 0x5b, 0x01, 0x6a, 0x12, 0x12, 0x5b, 0x12, 0x36, // ...a.e6.[.j..[.6 - 0x12, 0xbd, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0xbd, 0x13, 0x34, 0x13, 0x5b, 0x12, 0x12, 0x01, 0x6a, // ..&...&..4.[...j - 0x5b, 0xfe, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, // [..^.....a...a.. - 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x1f, 0x00, 0x2b, 0x00, 0x00, // .............+.. - 0x00, 0x34, 0x27, 0x01, 0x27, 0x26, 0x22, 0x0f, 0x01, 0x01, 0x06, 0x14, 0x1f, 0x01, 0x16, 0x32, // .4'.'&"........2 - 0x3f, 0x01, 0x11, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x35, 0x11, 0x17, 0x16, 0x32, 0x3f, 0x01, // ?....;.265...2?. - 0x24, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, 0x05, 0x04, 0x12, 0xfe, // $... $...$ ..... - 0x96, 0x5b, 0x12, 0x36, 0x12, 0x5b, 0xfe, 0x96, 0x12, 0x12, 0x5b, 0x12, 0x36, 0x12, 0xbd, 0x26, // .[.6.[....[.6..& - 0x1a, 0x80, 0x1a, 0x26, 0xbd, 0x13, 0x34, 0x13, 0x5b, 0x01, 0x0e, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, // ...&..4.[......^ - 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x02, 0x66, 0x36, 0x12, 0x01, 0x6a, // .....a...a.f6..j - 0x5b, 0x12, 0x12, 0x5b, 0xfe, 0x96, 0x12, 0x36, 0x12, 0x5b, 0x12, 0x12, 0xbd, 0xfe, 0x0a, 0x1a, // [..[...6.[...... - 0x26, 0x26, 0x1a, 0x01, 0xf6, 0xbd, 0x13, 0x13, 0x5b, 0xfd, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, // &&......[..^.... - 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // .a...a.......... - 0x05, 0x80, 0x00, 0x1f, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x34, 0x2f, 0x01, 0x26, 0x22, 0x0f, 0x01, // .....+...4/.&".. - 0x11, 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x15, 0x11, 0x27, 0x26, 0x22, 0x0f, 0x01, 0x06, 0x14, // .4&+."...'&".... - 0x17, 0x01, 0x17, 0x16, 0x32, 0x3f, 0x01, 0x01, 0x00, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, // ....2?...... $.. - 0x12, 0x24, 0x20, 0x04, 0x05, 0x04, 0x12, 0x5b, 0x12, 0x36, 0x12, 0xbd, 0x26, 0x1a, 0x80, 0x1a, // .$ ....[.6..&... - 0x26, 0xbd, 0x13, 0x34, 0x13, 0x5b, 0x12, 0x12, 0x01, 0x6a, 0x5b, 0x12, 0x36, 0x12, 0x5b, 0x01, // &..4.[...j[.6.[. - 0x6a, 0x01, 0x0e, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, // j......^.....a.. - 0x01, 0x61, 0x02, 0x64, 0x36, 0x12, 0x5b, 0x12, 0x12, 0xbd, 0x01, 0xf6, 0x1a, 0x26, 0x26, 0x1a, // .a.d6.[......&&. - 0xfe, 0x0a, 0xbd, 0x13, 0x13, 0x5b, 0x12, 0x36, 0x12, 0xfe, 0x96, 0x5b, 0x12, 0x12, 0x5b, 0x01, // .....[.6...[..[. - 0x6a, 0x00, 0xff, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, // j...^.....a...a. - 0xce, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x0b, // ................ - 0x01, 0xd8, 0x02, 0x18, 0x00, 0x00, 0x00, 0x20, 0x04, 0x12, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, // ....... ..... $. - 0x10, 0x12, 0x01, 0x0e, 0x01, 0x07, 0x32, 0x3e, 0x01, 0x37, 0x36, 0x37, 0x36, 0x37, 0x36, 0x17, // ......2>.767676. - 0x26, 0x36, 0x37, 0x3e, 0x01, 0x3f, 0x01, 0x06, 0x26, 0x27, 0x14, 0x07, 0x34, 0x26, 0x06, 0x27, // &67>.?..&'..4&.' - 0x2e, 0x02, 0x27, 0x2e, 0x01, 0x27, 0x2e, 0x03, 0x22, 0x0e, 0x01, 0x23, 0x26, 0x0e, 0x02, 0x07, // ..'..'.."..#&... - 0x0e, 0x01, 0x07, 0x36, 0x27, 0x26, 0x07, 0x36, 0x26, 0x27, 0x33, 0x2e, 0x02, 0x27, 0x2e, 0x01, // ...6'&.6&'3..'.. - 0x07, 0x06, 0x1e, 0x01, 0x15, 0x16, 0x06, 0x15, 0x14, 0x16, 0x07, 0x0e, 0x01, 0x07, 0x06, 0x16, // ................ - 0x17, 0x16, 0x0e, 0x02, 0x0f, 0x01, 0x06, 0x26, 0x27, 0x26, 0x27, 0x26, 0x07, 0x26, 0x27, 0x26, // .......&'&'&.&'& - 0x07, 0x36, 0x27, 0x26, 0x07, 0x3e, 0x01, 0x35, 0x36, 0x37, 0x3e, 0x02, 0x23, 0x16, 0x37, 0x3e, // .6'&.>.567>.#.7> - 0x01, 0x37, 0x36, 0x1e, 0x01, 0x33, 0x16, 0x36, 0x27, 0x16, 0x27, 0x26, 0x27, 0x26, 0x07, 0x06, // .76..3.6'.'&'&.. - 0x17, 0x26, 0x0e, 0x01, 0x27, 0x2e, 0x01, 0x27, 0x22, 0x07, 0x36, 0x26, 0x27, 0x36, 0x27, 0x2e, // .&..'..'".6&'6'. - 0x01, 0x07, 0x0e, 0x01, 0x1e, 0x02, 0x17, 0x16, 0x07, 0x0e, 0x02, 0x07, 0x06, 0x16, 0x07, 0x2e, // ................ - 0x01, 0x27, 0x16, 0x2f, 0x01, 0x22, 0x06, 0x26, 0x27, 0x26, 0x37, 0x36, 0x17, 0x2e, 0x01, 0x27, // .'./.".&'&76...' - 0x06, 0x07, 0x16, 0x37, 0x3e, 0x01, 0x37, 0x36, 0x17, 0x37, 0x16, 0x17, 0x26, 0x07, 0x06, 0x07, // ...7>.76.7..&... - 0x16, 0x07, 0x2e, 0x02, 0x27, 0x22, 0x07, 0x06, 0x07, 0x16, 0x17, 0x1e, 0x02, 0x37, 0x16, 0x07, // ....'".......7.. - 0x36, 0x17, 0x16, 0x17, 0x16, 0x07, 0x2e, 0x01, 0x07, 0x06, 0x16, 0x37, 0x22, 0x06, 0x14, 0x07, // 6..........7"... - 0x17, 0x06, 0x16, 0x37, 0x06, 0x17, 0x16, 0x17, 0x1e, 0x02, 0x17, 0x1e, 0x01, 0x17, 0x06, 0x16, // ...7............ - 0x07, 0x22, 0x06, 0x23, 0x1e, 0x01, 0x17, 0x1e, 0x02, 0x37, 0x36, 0x27, 0x26, 0x27, 0x2e, 0x01, // .".#.....76'&'.. - 0x27, 0x32, 0x1e, 0x02, 0x07, 0x06, 0x1e, 0x02, 0x17, 0x1e, 0x01, 0x23, 0x32, 0x16, 0x17, 0x1e, // '2.........#2... - 0x01, 0x17, 0x1e, 0x03, 0x17, 0x1e, 0x01, 0x17, 0x16, 0x32, 0x36, 0x37, 0x36, 0x16, 0x17, 0x16, // .........2676... - 0x37, 0x06, 0x1e, 0x02, 0x17, 0x1e, 0x01, 0x17, 0x36, 0x37, 0x06, 0x16, 0x37, 0x36, 0x35, 0x06, // 7.......67..765. - 0x27, 0x34, 0x2e, 0x02, 0x36, 0x33, 0x32, 0x36, 0x26, 0x27, 0x2e, 0x01, 0x27, 0x06, 0x26, 0x27, // '4..6326&'..'.&' - 0x14, 0x06, 0x15, 0x22, 0x27, 0x3e, 0x01, 0x37, 0x3e, 0x03, 0x26, 0x07, 0x06, 0x07, 0x0e, 0x02, // ..."'>.7>.&..... - 0x07, 0x06, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x34, 0x3e, 0x01, 0x27, 0x3e, 0x01, 0x37, 0x3e, 0x01, // ..&'..54>.'>.7>. - 0x16, 0x36, 0x37, 0x26, 0x27, 0x26, 0x23, 0x16, 0x36, 0x17, 0x16, 0x37, 0x34, 0x26, 0x37, 0x16, // .67&'&#.6..74&7. - 0x37, 0x1e, 0x01, 0x17, 0x1e, 0x02, 0x36, 0x37, 0x16, 0x17, 0x16, 0x17, 0x16, 0x3e, 0x01, 0x26, // 7.....67.....>.& - 0x2f, 0x01, 0x34, 0x35, 0x27, 0x2e, 0x01, 0x36, 0x37, 0x3e, 0x02, 0x37, 0x36, 0x27, 0x32, 0x37, // /.45'..67>.76'27 - 0x22, 0x2e, 0x01, 0x23, 0x36, 0x27, 0x3e, 0x01, 0x37, 0x16, 0x37, 0x36, 0x27, 0x3e, 0x01, 0x37, // "..#6'>.7.76'>.7 - 0x16, 0x36, 0x34, 0x37, 0x3e, 0x01, 0x3f, 0x01, 0x36, 0x23, 0x16, 0x37, 0x36, 0x27, 0x36, 0x26, // .647>.?.6#.76'6& - 0x27, 0x36, 0x16, 0x37, 0x36, 0x27, 0x26, 0x03, 0x36, 0x37, 0x2e, 0x01, 0x27, 0x26, 0x27, 0x36, // '6.76'&.67..'&'6 - 0x2e, 0x02, 0x27, 0x2e, 0x03, 0x06, 0x23, 0x07, 0x0e, 0x03, 0x17, 0x26, 0x27, 0x2e, 0x02, 0x06, // ..'...#....&'... - 0x07, 0x0e, 0x01, 0x07, 0x26, 0x36, 0x27, 0x26, 0x0e, 0x04, 0x07, 0x0e, 0x01, 0x07, 0x2e, 0x01, // ....&6'&........ - 0x35, 0x1e, 0x01, 0x17, 0x16, 0x07, 0x06, 0x07, 0x06, 0x17, 0x14, 0x06, 0x17, 0x14, 0x02, 0x2f, // 5............../ - 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x03, 0x44, // ...a.....^.....D - 0x02, 0x0f, 0x06, 0x02, 0x05, 0x05, 0x01, 0x06, 0x10, 0x0e, 0x26, 0x22, 0x11, 0x02, 0x17, 0x03, // ..........&".... - 0x03, 0x18, 0x03, 0x02, 0x0c, 0x0b, 0x01, 0x06, 0x09, 0x0e, 0x02, 0x0a, 0x0a, 0x06, 0x01, 0x02, // ................ - 0x0f, 0x02, 0x01, 0x03, 0x03, 0x05, 0x06, 0x08, 0x07, 0x01, 0x03, 0x06, 0x03, 0x06, 0x02, 0x03, // ................ - 0x0b, 0x03, 0x0f, 0x10, 0x0a, 0x06, 0x09, 0x03, 0x07, 0x05, 0x01, 0x0f, 0x14, 0x03, 0x08, 0x34, // ...............4 - 0x07, 0x05, 0x01, 0x07, 0x01, 0x0d, 0x1c, 0x04, 0x03, 0x1a, 0x03, 0x05, 0x07, 0x07, 0x02, 0x01, // ................ - 0x06, 0x05, 0x04, 0x03, 0x0b, 0x13, 0x04, 0x07, 0x09, 0x17, 0x06, 0x05, 0x24, 0x19, 0x21, 0x06, // ............$.!. - 0x06, 0x07, 0x0c, 0x03, 0x02, 0x03, 0x09, 0x01, 0x0c, 0x07, 0x03, 0x23, 0x0f, 0x05, 0x0d, 0x04, // ...........#.... - 0x09, 0x0a, 0x13, 0x05, 0x0e, 0x03, 0x09, 0x0c, 0x09, 0x05, 0x03, 0x0c, 0x0f, 0x08, 0x0a, 0x01, // ................ - 0x11, 0x10, 0x08, 0x01, 0x09, 0x05, 0x08, 0x08, 0x03, 0x1c, 0x0a, 0x13, 0x1b, 0x07, 0x1b, 0x06, // ................ - 0x05, 0x01, 0x0b, 0x0a, 0x0d, 0x02, 0x0e, 0x06, 0x02, 0x0d, 0x0a, 0x01, 0x03, 0x06, 0x05, 0x05, // ................ - 0x08, 0x03, 0x07, 0x20, 0x0a, 0x04, 0x18, 0x11, 0x05, 0x04, 0x04, 0x01, 0x03, 0x04, 0x0e, 0x03, // ... ............ - 0x2e, 0x30, 0x06, 0x06, 0x05, 0x10, 0x02, 0x22, 0x08, 0x05, 0x0e, 0x06, 0x07, 0x17, 0x14, 0x02, // .0....."........ - 0x07, 0x02, 0x04, 0x0f, 0x0e, 0x08, 0x10, 0x06, 0x92, 0x59, 0x07, 0x05, 0x04, 0x02, 0x03, 0x0a, // .........Y...... - 0x09, 0x06, 0x01, 0x2b, 0x13, 0x02, 0x03, 0x0d, 0x01, 0x10, 0x01, 0x03, 0x07, 0x07, 0x07, 0x05, // ...+............ - 0x01, 0x02, 0x03, 0x11, 0x0d, 0x0d, 0x21, 0x06, 0x02, 0x03, 0x12, 0x0c, 0x04, 0x04, 0x0c, 0x08, // ......!......... - 0x02, 0x17, 0x01, 0x01, 0x03, 0x01, 0x03, 0x19, 0x03, 0x01, 0x02, 0x04, 0x06, 0x02, 0x1a, 0x0f, // ................ - 0x02, 0x03, 0x05, 0x02, 0x02, 0x08, 0x09, 0x06, 0x01, 0x03, 0x0a, 0x0e, 0x14, 0x02, 0x06, 0x10, // ................ - 0x08, 0x09, 0x16, 0x06, 0x05, 0x06, 0x02, 0x02, 0x0d, 0x0c, 0x14, 0x03, 0x05, 0x1b, 0x08, 0x0a, // ................ - 0x0c, 0x11, 0x05, 0x0f, 0x1c, 0x07, 0x24, 0x13, 0x02, 0x05, 0x0b, 0x07, 0x02, 0x05, 0x1a, 0x05, // ......$......... - 0x06, 0x01, 0x03, 0x14, 0x08, 0x0e, 0x1f, 0x12, 0x05, 0x03, 0x02, 0x02, 0x04, 0x09, 0x02, 0x06, // ................ - 0x01, 0x01, 0x14, 0x02, 0x05, 0x16, 0x05, 0x03, 0x0d, 0x02, 0x01, 0x03, 0x02, 0x01, 0x09, 0x06, // ................ - 0x02, 0x0b, 0x0c, 0x13, 0x07, 0x01, 0x04, 0x06, 0x06, 0x07, 0x22, 0x07, 0x0d, 0x13, 0x05, 0x01, // .........."..... - 0x06, 0x03, 0x0c, 0x04, 0x02, 0x05, 0x04, 0x04, 0x01, 0x01, 0x03, 0x03, 0x01, 0x07, 0x2b, 0x06, // ..............+. - 0x0f, 0x07, 0x05, 0x02, 0x05, 0x18, 0x03, 0x19, 0x05, 0x03, 0x08, 0x03, 0x07, 0x05, 0x0a, 0x02, // ................ - 0x0b, 0x08, 0x07, 0x08, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0f, 0x07, 0x0a, 0x0a, 0x01, 0x0e, 0x11, // ................ - 0x04, 0x15, 0x06, 0x07, 0x04, 0x01, 0x08, 0x07, 0x01, 0x09, 0x07, 0x05, 0x05, 0x05, 0x09, 0x0c, // ................ - 0x07, 0x06, 0x05, 0x1f, 0x03, 0x07, 0x02, 0x03, 0x04, 0x16, 0x02, 0x11, 0x03, 0x03, 0x12, 0x0d, // ................ - 0x0a, 0x10, 0x03, 0x0c, 0x09, 0x03, 0x11, 0x02, 0x0f, 0x16, 0x11, 0xbd, 0xce, 0x91, 0x03, 0x13, // ................ - 0x03, 0x12, 0x06, 0x01, 0x07, 0x09, 0x10, 0x03, 0x02, 0x0a, 0x04, 0x0b, 0x06, 0x07, 0x03, 0x03, // ................ - 0x05, 0x06, 0x02, 0x01, 0x15, 0x0f, 0x05, 0x0c, 0x09, 0x0b, 0x06, 0x05, 0x02, 0x01, 0x07, 0x0e, // ................ - 0x05, 0x03, 0x0f, 0x09, 0x0e, 0x04, 0x0d, 0x02, 0x03, 0x06, 0x02, 0x02, 0x13, 0x02, 0x04, 0x03, // ................ - 0x07, 0x13, 0x1b, 0x02, 0x04, 0x10, 0x10, 0x01, 0x05, 0x80, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, // ..............^. - 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xfe, 0xc5, 0x01, 0x11, 0x01, 0x0a, 0x0c, // ....a...a....... - 0x01, 0x07, 0x08, 0x06, 0x06, 0x08, 0x13, 0x02, 0x16, 0x01, 0x02, 0x05, 0x05, 0x16, 0x01, 0x10, // ................ - 0x0d, 0x02, 0x06, 0x07, 0x02, 0x04, 0x01, 0x03, 0x09, 0x18, 0x03, 0x05, 0x0b, 0x05, 0x02, 0x07, // ................ - 0x06, 0x05, 0x0a, 0x0a, 0x02, 0x01, 0x01, 0x05, 0x01, 0x02, 0x02, 0x01, 0x05, 0x06, 0x04, 0x01, // ................ - 0x04, 0x10, 0x06, 0x04, 0x09, 0x08, 0x02, 0x05, 0x09, 0x04, 0x06, 0x09, 0x13, 0x03, 0x06, 0x0e, // ................ - 0x05, 0x07, 0x11, 0x0d, 0x08, 0x10, 0x04, 0x08, 0x15, 0x06, 0x02, 0x04, 0x05, 0x03, 0x02, 0x02, // ................ - 0x05, 0x16, 0x0f, 0x19, 0x05, 0x08, 0x09, 0x0d, 0x0d, 0x09, 0x05, 0x01, 0x0e, 0x0f, 0x03, 0x06, // ................ - 0x17, 0x02, 0x0d, 0x0a, 0x01, 0x0f, 0x0c, 0x04, 0x0f, 0x05, 0x18, 0x05, 0x06, 0x01, 0x0a, 0x01, // ................ - 0x18, 0x08, 0x01, 0x12, 0x07, 0x02, 0x04, 0x09, 0x04, 0x04, 0x01, 0x17, 0x0c, 0x0b, 0x01, 0x19, // ................ - 0x01, 0x0f, 0x08, 0x0e, 0x01, 0x0c, 0x0f, 0x04, 0x02, 0x05, 0x07, 0x09, 0x07, 0x04, 0x04, 0x01, // ................ - 0x0a, 0x04, 0x01, 0x05, 0x04, 0x02, 0x04, 0x14, 0x04, 0x05, 0x19, 0x04, 0x09, 0x03, 0x01, 0x04, // ................ - 0x02, 0x07, 0x08, 0x0c, 0x04, 0x02, 0x03, 0x0d, 0x02, 0x0f, 0x1a, 0x01, 0x02, 0x02, 0x09, 0x01, // ................ - 0x0e, 0x07, 0x05, 0x10, 0x09, 0x04, 0x03, 0x06, 0x06, 0x0c, 0x06, 0x03, 0x0e, 0x08, 0x01, 0x01, // ................ - 0x50, 0x8e, 0x07, 0x01, 0x01, 0x10, 0x06, 0x06, 0x08, 0x0b, 0x01, 0x1c, 0x11, 0x04, 0x0b, 0x07, // P............... - 0x02, 0x0e, 0x03, 0x05, 0x1b, 0x01, 0x20, 0x27, 0x04, 0x01, 0x0c, 0x2d, 0x03, 0x03, 0x28, 0x08, // ...... '...-..(. - 0x01, 0x02, 0x0b, 0x09, 0x06, 0x05, 0x23, 0x06, 0x06, 0x1c, 0x09, 0x02, 0x07, 0x0e, 0x06, 0x03, // ......#......... - 0x0e, 0x08, 0x02, 0x14, 0x2a, 0x19, 0x04, 0x05, 0x15, 0x04, 0x03, 0x04, 0x04, 0x01, 0x07, 0x15, // ....*........... - 0x10, 0x16, 0x02, 0x06, 0x1b, 0x14, 0x0a, 0x08, 0x24, 0x06, 0x07, 0x0d, 0x06, 0x0a, 0x02, 0x02, // ........$....... - 0x11, 0x03, 0x04, 0x05, 0x01, 0x02, 0x22, 0x04, 0x13, 0x08, 0x01, 0x0d, 0x12, 0x0b, 0x03, 0x06, // ......"......... - 0x12, 0x06, 0x04, 0x05, 0x08, 0x18, 0x02, 0x03, 0x1d, 0x0f, 0x21, 0x01, 0x09, 0x08, 0x09, 0x06, // ..........!..... - 0x07, 0x12, 0x04, 0x08, 0x18, 0x03, 0x09, 0x02, 0x08, 0x01, 0x09, 0x02, 0x01, 0x03, 0x1d, 0x08, // ................ - 0x04, 0x10, 0x0d, 0x0c, 0x07, 0x01, 0x01, 0x13, 0x03, 0x0f, 0x08, 0x03, 0x03, 0x02, 0x04, 0x08, // ................ - 0x2a, 0x10, 0x0a, 0x21, 0x11, 0x10, 0x02, 0x0f, 0x03, 0x01, 0x01, 0x01, 0x04, 0x04, 0x01, 0x02, // *..!............ - 0x03, 0x03, 0x09, 0x06, 0x0b, 0x0d, 0x01, 0x11, 0x05, 0x1b, 0x12, 0x03, 0x04, 0x03, 0x02, 0x07, // ................ - 0x02, 0x03, 0x05, 0x0e, 0x0a, 0x28, 0x04, 0x03, 0x02, 0x11, 0x0b, 0x07, 0x08, 0x09, 0x09, 0x08, // .....(.......... - 0x03, 0x12, 0x13, 0x09, 0x01, 0x05, 0x08, 0x04, 0x13, 0x10, 0x09, 0x06, 0x04, 0x05, 0x0b, 0x03, // ................ - 0x10, 0x02, 0x0c, 0x0a, 0x08, 0x08, 0x07, 0x07, 0x06, 0x02, 0x08, 0x10, 0x04, 0x05, 0x08, 0x01, // ................ - 0x0b, 0x04, 0x02, 0x0d, 0x0b, 0x09, 0x06, 0x07, 0x02, 0x01, 0x01, 0x02, 0x0a, 0x06, 0x05, 0xfc, // ................ - 0x82, 0x24, 0x99, 0x03, 0x03, 0x02, 0x07, 0x01, 0x07, 0x0c, 0x06, 0x0a, 0x02, 0x02, 0x08, 0x03, // .$.............. - 0x06, 0x02, 0x01, 0x01, 0x03, 0x03, 0x03, 0x01, 0x11, 0x05, 0x01, 0x09, 0x05, 0x02, 0x06, 0x05, // ................ - 0x14, 0x03, 0x05, 0x19, 0x06, 0x06, 0x03, 0x06, 0x0b, 0x02, 0x09, 0x03, 0x04, 0x10, 0x03, 0x04, // ................ - 0x05, 0x03, 0x0a, 0x32, 0x0d, 0x1f, 0x11, 0x19, 0x0f, 0x16, 0x04, 0x07, 0x1b, 0x08, 0x06, 0x00, // ...2............ - 0x00, 0x03, 0x00, 0x15, 0xff, 0x15, 0x06, 0x7e, 0x05, 0x80, 0x00, 0x07, 0x00, 0x15, 0x00, 0x2f, // .......~......./ - 0x00, 0x00, 0x24, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x09, 0x01, 0x06, 0x23, 0x22, 0x2f, // ..$4&"...2...#"/ - 0x01, 0x26, 0x35, 0x34, 0x37, 0x01, 0x1e, 0x01, 0x01, 0x14, 0x07, 0x0e, 0x01, 0x23, 0x22, 0x00, // .&547........#". - 0x10, 0x00, 0x33, 0x32, 0x16, 0x17, 0x16, 0x14, 0x07, 0x05, 0x15, 0x17, 0x3e, 0x02, 0x33, 0x32, // ..32........>.32 - 0x16, 0x01, 0x80, 0x26, 0x34, 0x26, 0x26, 0x34, 0x02, 0xaa, 0xfd, 0x56, 0x25, 0x35, 0x34, 0x27, // ...&4&&4...V%54' - 0x6a, 0x26, 0x26, 0x02, 0xa9, 0x27, 0x97, 0x02, 0xdc, 0x17, 0x2f, 0xeb, 0x8d, 0xb9, 0xfe, 0xf9, // j&&..'..../..... - 0x01, 0x07, 0xb9, 0x3a, 0x7f, 0x2c, 0x10, 0x10, 0xfe, 0xdb, 0xc1, 0x05, 0x94, 0x7b, 0x09, 0x0f, // ...:.,.......{.. - 0x11, 0x26, 0x34, 0x26, 0x26, 0x34, 0x26, 0x01, 0xe4, 0xfd, 0x56, 0x25, 0x25, 0x6c, 0x24, 0x36, // .&4&&4&...V%%l$6 - 0x35, 0x26, 0x02, 0xa9, 0x62, 0x97, 0x01, 0x8c, 0x27, 0x43, 0x86, 0xa7, 0x01, 0x07, 0x01, 0x72, // 5&..b...'C.....r - 0x01, 0x07, 0x21, 0x1e, 0x0b, 0x22, 0x0b, 0xa9, 0xe0, 0x6b, 0x03, 0x5b, 0x47, 0x14, 0x00, 0x00, // ..!.."...k.[G... - 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x05, 0x80, 0x00, 0x03, 0x00, 0x07, 0x00, 0x0b, // ................ - 0x00, 0x1b, 0x00, 0x2b, 0x00, 0x3b, 0x00, 0x00, 0x25, 0x21, 0x35, 0x21, 0x01, 0x21, 0x35, 0x21, // ...+.;..%!5!.!5! - 0x01, 0x21, 0x35, 0x21, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, // .!5!....#!"&5.46 - 0x33, 0x21, 0x32, 0x16, 0x19, 0x01, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, // 3!2.....#!"&5.46 - 0x33, 0x21, 0x32, 0x16, 0x19, 0x01, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, // 3!2.....#!"&5.46 - 0x33, 0x21, 0x32, 0x16, 0x04, 0x00, 0x02, 0x80, 0xfd, 0x80, 0xfe, 0x80, 0x04, 0x00, 0xfc, 0x00, // 3!2............. - 0x02, 0x80, 0x01, 0x80, 0xfe, 0x80, 0x02, 0x00, 0x26, 0x1a, 0xf9, 0x80, 0x1a, 0x26, 0x26, 0x1a, // ........&....&&. - 0x06, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0xf9, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x06, 0x80, 0x1a, 0x26, // ...&&....&&....& - 0x26, 0x1a, 0xf9, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x06, 0x80, 0x1a, 0x26, 0x80, 0x80, 0x01, 0x80, // &....&&....&.... - 0x80, 0x01, 0x80, 0x80, 0xfc, 0x40, 0xff, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0x00, 0x1a, 0x26, // .....@...&&....& - 0x26, 0x01, 0xe6, 0xff, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0x00, 0x1a, 0x26, 0x26, 0x01, 0xe6, // &.....&&....&&.. - 0xff, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0x00, 0x1a, 0x26, 0x26, 0x00, 0x00, 0x01, 0x00, 0x05, // ...&&....&&..... - 0xff, 0x80, 0x05, 0x7b, 0x05, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, 0x16, 0x07, 0x01, 0x11, 0x14, // ...{............ - 0x07, 0x06, 0x23, 0x22, 0x27, 0x01, 0x26, 0x35, 0x11, 0x01, 0x26, 0x37, 0x36, 0x33, 0x21, 0x32, // ..#"'.&5..&763!2 - 0x05, 0x7b, 0x11, 0x1f, 0xfe, 0x13, 0x27, 0x0d, 0x0c, 0x1b, 0x12, 0xff, 0x00, 0x13, 0xfe, 0x13, // .{....'......... - 0x1f, 0x11, 0x11, 0x2a, 0x05, 0x00, 0x2a, 0x04, 0xd9, 0x29, 0x1d, 0xfe, 0x13, 0xfd, 0x1a, 0x2a, // ...*..*..).....* - 0x11, 0x05, 0x13, 0x01, 0x00, 0x13, 0x1a, 0x01, 0xe6, 0x01, 0xed, 0x1d, 0x29, 0x27, 0x00, 0x00, // ............)'.. - 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x03, 0x00, 0x17, 0x00, 0x1b, // ................ - 0x00, 0x2f, 0x00, 0x00, 0x01, 0x21, 0x35, 0x21, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // ./...!5!....#!"& - 0x35, 0x11, 0x21, 0x15, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x3d, 0x01, 0x23, 0x15, 0x21, 0x35, // 5.!...3!26=.#.!5 - 0x01, 0x11, 0x21, 0x11, 0x34, 0x36, 0x33, 0x21, 0x35, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x1d, // ..!.463!5463!2.. - 0x01, 0x21, 0x32, 0x16, 0x02, 0x80, 0x02, 0x00, 0xfe, 0x00, 0x04, 0x80, 0x5e, 0x42, 0xfa, 0x40, // .!2.........^B.@ - 0x42, 0x5e, 0x02, 0xa0, 0x26, 0x1a, 0x01, 0x40, 0x1a, 0x26, 0x60, 0xff, 0x00, 0x04, 0x00, 0xf9, // B^..&..@.&`..... - 0x00, 0x5e, 0x42, 0x01, 0x60, 0x38, 0x28, 0x02, 0x40, 0x28, 0x38, 0x01, 0x60, 0x42, 0x5e, 0x05, // .^B.`8(.@(8.`B^. - 0x00, 0x80, 0xfd, 0x00, 0xfe, 0x20, 0x42, 0x5e, 0x5e, 0x42, 0x01, 0xe0, 0xa0, 0x1a, 0x26, 0x26, // ..... B^^B....&& - 0x1a, 0xa0, 0x80, 0x80, 0x01, 0xe0, 0xfe, 0x80, 0x01, 0x80, 0x42, 0x5e, 0xa0, 0x28, 0x38, 0x38, // ..........B^.(88 - 0x28, 0xa0, 0x5e, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x47, // (.^............G - 0x00, 0x00, 0x09, 0x02, 0x37, 0x36, 0x17, 0x16, 0x15, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x27, // ....76......#!"' - 0x26, 0x3f, 0x01, 0x09, 0x01, 0x17, 0x16, 0x07, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, // &?.......#!"&5.4 - 0x37, 0x36, 0x1f, 0x01, 0x09, 0x01, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x35, 0x11, 0x34, 0x36, // 76......#"'&5.46 - 0x33, 0x21, 0x32, 0x17, 0x16, 0x0f, 0x01, 0x09, 0x01, 0x27, 0x26, 0x37, 0x36, 0x33, 0x21, 0x32, // 3!2......'&763!2 - 0x16, 0x15, 0x11, 0x14, 0x07, 0x06, 0x23, 0x22, 0x27, 0x05, 0x03, 0xfe, 0x9d, 0x01, 0x63, 0x90, // ......#"'.....c. - 0x1d, 0x29, 0x27, 0x26, 0x1a, 0xfe, 0x40, 0x2a, 0x11, 0x11, 0x1f, 0x90, 0xfe, 0x9d, 0xfe, 0x9d, // .)'&..@*........ - 0x90, 0x1f, 0x11, 0x11, 0x2a, 0xfe, 0x40, 0x1a, 0x26, 0x28, 0x27, 0x1e, 0x90, 0x01, 0x63, 0xfe, // ....*.@.&('...c. - 0x9d, 0x90, 0x13, 0x1a, 0x0c, 0x0c, 0x28, 0x26, 0x1a, 0x01, 0xc0, 0x2a, 0x11, 0x11, 0x1f, 0x90, // ......(&...*.... - 0x01, 0x63, 0x01, 0x63, 0x90, 0x1f, 0x11, 0x11, 0x2a, 0x01, 0xc0, 0x1a, 0x26, 0x27, 0x0d, 0x0c, // .c.c....*...&'.. - 0x1a, 0x13, 0x03, 0xe3, 0xfe, 0x9d, 0xfe, 0x9d, 0x90, 0x1f, 0x11, 0x11, 0x2a, 0xfe, 0x40, 0x1a, // ............*.@. - 0x26, 0x28, 0x27, 0x1e, 0x90, 0x01, 0x63, 0xfe, 0x9d, 0x90, 0x1e, 0x27, 0x28, 0x26, 0x1a, 0x01, // &('...c....'(&.. - 0xc0, 0x2a, 0x11, 0x11, 0x1f, 0x90, 0x01, 0x63, 0x01, 0x63, 0x90, 0x13, 0x05, 0x11, 0x2a, 0x01, // .*.....c.c....*. - 0xc0, 0x1a, 0x26, 0x28, 0x27, 0x1e, 0x90, 0xfe, 0x9d, 0x01, 0x63, 0x90, 0x1e, 0x27, 0x28, 0x26, // ..&('.....c..'(& - 0x1a, 0xfe, 0x40, 0x2a, 0x11, 0x05, 0x13, 0x00, 0x00, 0x06, 0x00, 0x00, 0xff, 0x00, 0x07, 0x80, // ..@*............ - 0x06, 0x00, 0x00, 0x11, 0x00, 0x31, 0x00, 0x39, 0x00, 0x41, 0x00, 0x53, 0x00, 0x5b, 0x00, 0x00, // .....1.9.A.S.[.. - 0x01, 0x06, 0x07, 0x23, 0x22, 0x26, 0x35, 0x10, 0x33, 0x32, 0x1e, 0x01, 0x33, 0x32, 0x37, 0x06, // ...#"&5.32..327. - 0x15, 0x14, 0x01, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x34, 0x3e, 0x05, 0x33, 0x32, 0x1e, // .....#!"&54>.32. - 0x02, 0x32, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x05, 0x00, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, // .2>.32....."&462 - 0x00, 0x10, 0x06, 0x20, 0x26, 0x10, 0x36, 0x20, 0x01, 0x14, 0x06, 0x2b, 0x01, 0x26, 0x27, 0x36, // ... &.6 ...+.&'6 - 0x35, 0x34, 0x27, 0x16, 0x33, 0x32, 0x3e, 0x01, 0x33, 0x32, 0x02, 0x14, 0x06, 0x22, 0x26, 0x34, // 54'.32>.32..."&4 - 0x36, 0x32, 0x02, 0x51, 0xa2, 0x67, 0x86, 0x52, 0x70, 0x7c, 0x06, 0x4b, 0x78, 0x3b, 0x43, 0x42, // 62.Q.g.Rp|.Kx;CB - 0x05, 0x04, 0x80, 0x92, 0x79, 0xfc, 0x96, 0x79, 0x92, 0x07, 0x15, 0x20, 0x36, 0x46, 0x65, 0x3d, // ....y..y... 6Fe= - 0x0a, 0x42, 0x50, 0x86, 0x88, 0x86, 0x50, 0x42, 0x0a, 0x3d, 0x65, 0x46, 0x36, 0x20, 0x15, 0x07, // .BP...PB.=eF6 .. - 0xfc, 0x00, 0x96, 0xd4, 0x96, 0x96, 0xd4, 0x03, 0x56, 0xe1, 0xfe, 0xc2, 0xe1, 0xe1, 0x01, 0x3e, // ........V......> - 0x03, 0x21, 0x70, 0x52, 0x86, 0x67, 0xa2, 0x51, 0x05, 0x42, 0x43, 0x3b, 0x78, 0x4b, 0x06, 0x7c, // .!pR.g.Q.BC;xK.| - 0x80, 0x96, 0xd4, 0x96, 0x96, 0xd4, 0x02, 0x80, 0x05, 0x7b, 0x51, 0x4e, 0x01, 0x61, 0x2a, 0x2b, // .........{QN.a*+ - 0x17, 0x25, 0x1d, 0x8b, 0xfd, 0x0e, 0x78, 0x8b, 0x8b, 0x78, 0x35, 0x65, 0x75, 0x64, 0x5f, 0x43, // .%....x..x5eud_C - 0x28, 0x2b, 0x35, 0x2b, 0x2b, 0x35, 0x2b, 0x28, 0x43, 0x5f, 0x64, 0x75, 0x65, 0x05, 0x32, 0xd4, // (+5++5+(C_due.2. - 0x96, 0x96, 0xd4, 0x96, 0xfe, 0x1f, 0xfe, 0xc2, 0xe1, 0xe1, 0x01, 0x3e, 0xe1, 0xfd, 0x9f, 0x4e, // ...........>...N - 0x51, 0x7b, 0x05, 0x75, 0x8b, 0x1d, 0x25, 0x17, 0x2b, 0x2a, 0x01, 0x6a, 0xd4, 0x96, 0x96, 0xd4, // Q{.u..%.+*.j.... - 0x96, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x10, 0xff, 0x90, 0x06, 0x70, 0x05, 0xf0, 0x00, 0x21, // ...........p...! - 0x00, 0x43, 0x00, 0x69, 0x00, 0x00, 0x01, 0x34, 0x2f, 0x01, 0x26, 0x23, 0x22, 0x07, 0x1e, 0x04, // .C.i...4/.&#"... - 0x15, 0x14, 0x06, 0x23, 0x22, 0x2e, 0x03, 0x27, 0x06, 0x15, 0x14, 0x1f, 0x01, 0x16, 0x33, 0x32, // ...#"..'......32 - 0x3f, 0x01, 0x36, 0x01, 0x34, 0x2f, 0x01, 0x26, 0x23, 0x22, 0x0f, 0x01, 0x06, 0x15, 0x14, 0x1f, // ?.6.4/.&#"...... - 0x01, 0x16, 0x33, 0x32, 0x37, 0x2e, 0x04, 0x35, 0x34, 0x36, 0x33, 0x32, 0x1e, 0x03, 0x17, 0x36, // ..327..54632...6 - 0x00, 0x14, 0x0f, 0x01, 0x06, 0x23, 0x22, 0x2f, 0x01, 0x26, 0x35, 0x34, 0x37, 0x27, 0x06, 0x23, // .....#"/.&547'.# - 0x22, 0x2f, 0x01, 0x26, 0x34, 0x3f, 0x01, 0x36, 0x33, 0x32, 0x1f, 0x01, 0x16, 0x15, 0x14, 0x07, // "/.&4?.632...... - 0x17, 0x36, 0x33, 0x32, 0x1f, 0x01, 0x05, 0xb0, 0x1c, 0xd0, 0x1c, 0x28, 0x2a, 0x1e, 0x03, 0x20, // .632.......(*.. - 0x0b, 0x13, 0x07, 0x38, 0x28, 0x0f, 0x19, 0x1a, 0x0c, 0x1f, 0x03, 0x21, 0x1c, 0xce, 0x1b, 0x29, // ...8(......!...) - 0x28, 0x1c, 0x93, 0x1c, 0xfd, 0x41, 0x1c, 0xce, 0x1c, 0x28, 0x27, 0x1d, 0x93, 0x1c, 0x1c, 0xd0, // (....A...('..... - 0x1b, 0x29, 0x2a, 0x1e, 0x03, 0x20, 0x0b, 0x13, 0x07, 0x38, 0x28, 0x0f, 0x19, 0x1a, 0x0c, 0x1f, // .)*.. ...8(..... - 0x03, 0x21, 0x03, 0x7f, 0x55, 0x93, 0x53, 0x78, 0x79, 0x53, 0xce, 0x53, 0x58, 0x58, 0x56, 0x7a, // .!..U.SxyS.SXXVz - 0x78, 0x54, 0xd0, 0x54, 0x55, 0x93, 0x53, 0x78, 0x79, 0x53, 0xce, 0x53, 0x58, 0x58, 0x56, 0x7a, // xT.TU.SxyS.SXXVz - 0x78, 0x54, 0xd0, 0x01, 0x40, 0x28, 0x1c, 0xd0, 0x1c, 0x20, 0x03, 0x1f, 0x0c, 0x1a, 0x19, 0x0f, // xT..@(... ...... - 0x28, 0x38, 0x07, 0x13, 0x0b, 0x20, 0x03, 0x1f, 0x2a, 0x28, 0x1c, 0xcf, 0x1b, 0x1a, 0x92, 0x1c, // (8... ..*(...... - 0x02, 0xe8, 0x28, 0x1c, 0xcf, 0x1c, 0x1b, 0x92, 0x1c, 0x27, 0x28, 0x1c, 0xd0, 0x1b, 0x1f, 0x03, // ..(......'(..... - 0x1f, 0x0c, 0x1a, 0x19, 0x0f, 0x28, 0x38, 0x07, 0x13, 0x0b, 0x20, 0x03, 0x1f, 0xfd, 0xe1, 0xf0, // .....(8... ..... - 0x53, 0x92, 0x53, 0x55, 0xcf, 0x53, 0x78, 0x7b, 0x56, 0x58, 0x58, 0x54, 0xd0, 0x54, 0xf0, 0x53, // S.SU.Sx{VXXT.T.S - 0x92, 0x53, 0x55, 0xcf, 0x53, 0x78, 0x7b, 0x56, 0x58, 0x58, 0x54, 0xd0, 0x00, 0x01, 0x00, 0x00, // .SU.Sx{VXXT..... - 0x00, 0x00, 0x07, 0x80, 0x05, 0x80, 0x00, 0x1b, 0x00, 0x00, 0x01, 0x14, 0x06, 0x23, 0x21, 0x22, // .............#!" - 0x00, 0x35, 0x34, 0x36, 0x37, 0x26, 0x35, 0x34, 0x00, 0x33, 0x32, 0x04, 0x17, 0x36, 0x33, 0x32, // .5467&54.32..632 - 0x16, 0x15, 0x14, 0x07, 0x1e, 0x01, 0x07, 0x80, 0xe1, 0x9f, 0xfb, 0xc0, 0xb9, 0xfe, 0xf9, 0x8e, // ................ - 0x74, 0x02, 0x01, 0x2c, 0xd4, 0x9e, 0x01, 0x01, 0x3b, 0x46, 0x60, 0x6a, 0x96, 0x29, 0x81, 0xa8, // t..,....;F`j.).. - 0x01, 0x80, 0x9f, 0xe1, 0x01, 0x07, 0xb9, 0x84, 0xdb, 0x36, 0x1c, 0x0f, 0xd4, 0x01, 0x2c, 0xb0, // .........6....,. - 0x8e, 0x3e, 0x96, 0x6a, 0x4b, 0x3f, 0x1e, 0xd1, 0x00, 0x02, 0x00, 0x73, 0xff, 0x80, 0x06, 0x0d, // .>.jK?.....s.... - 0x05, 0x80, 0x00, 0x17, 0x00, 0x21, 0x00, 0x00, 0x25, 0x16, 0x06, 0x23, 0x21, 0x22, 0x26, 0x37, // .....!..%..#!"&7 - 0x01, 0x11, 0x23, 0x22, 0x26, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x14, 0x06, 0x2b, 0x01, 0x11, // ..#"&463!2...+.. - 0x05, 0x01, 0x21, 0x01, 0x27, 0x35, 0x11, 0x23, 0x11, 0x15, 0x05, 0xf7, 0x38, 0x45, 0x6a, 0xfb, // ..!.'5.#....8Ej. - 0x80, 0x6a, 0x45, 0x38, 0x01, 0xf7, 0x40, 0x1a, 0x26, 0x26, 0x1a, 0x02, 0x00, 0x1a, 0x26, 0x26, // .jE8..@.&&....&& - 0x1a, 0x40, 0xfe, 0xec, 0xfe, 0xf0, 0x02, 0xc8, 0xfe, 0xf0, 0x14, 0x80, 0x58, 0x59, 0x7f, 0x7f, // .@..........XY.. - 0x59, 0x03, 0x19, 0x01, 0x8f, 0x26, 0x34, 0x26, 0x26, 0x34, 0x26, 0xfe, 0x71, 0x44, 0xfe, 0x53, // Y....&4&&4&.qD.S - 0x01, 0xad, 0x1f, 0x25, 0x01, 0x8f, 0xfe, 0x71, 0x25, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x01, // ...%...q%....... - 0xff, 0x80, 0x07, 0x00, 0x05, 0x00, 0x00, 0x07, 0x00, 0x4e, 0x00, 0x5c, 0x00, 0x6a, 0x00, 0x78, // .........N...j.x - 0x00, 0x86, 0x00, 0x8c, 0x00, 0x00, 0x00, 0x32, 0x16, 0x14, 0x06, 0x22, 0x26, 0x34, 0x05, 0x01, // .......2..."&4.. - 0x16, 0x07, 0x06, 0x0f, 0x01, 0x06, 0x23, 0x22, 0x27, 0x01, 0x07, 0x06, 0x07, 0x16, 0x07, 0x0e, // ......#"'....... - 0x01, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x37, 0x3e, 0x01, 0x37, 0x36, 0x33, 0x32, 0x17, 0x36, // ...#"'&7>.7632.6 - 0x3f, 0x01, 0x27, 0x26, 0x27, 0x06, 0x23, 0x22, 0x27, 0x2e, 0x01, 0x27, 0x26, 0x36, 0x37, 0x36, // ?.'&'.#"'..'&676 - 0x33, 0x32, 0x17, 0x1e, 0x01, 0x17, 0x16, 0x07, 0x16, 0x1f, 0x01, 0x01, 0x36, 0x33, 0x32, 0x1f, // 32..........632. - 0x01, 0x16, 0x17, 0x16, 0x07, 0x05, 0x36, 0x26, 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x16, 0x17, // ......6&'&#".... - 0x16, 0x33, 0x32, 0x03, 0x3e, 0x01, 0x27, 0x26, 0x23, 0x22, 0x07, 0x0e, 0x01, 0x17, 0x16, 0x33, // .32.>.'&#".....3 - 0x32, 0x01, 0x17, 0x35, 0x34, 0x3f, 0x01, 0x27, 0x07, 0x0e, 0x01, 0x07, 0x0e, 0x01, 0x07, 0x1f, // 2..54?.'........ - 0x01, 0x01, 0x27, 0x01, 0x15, 0x07, 0x17, 0x16, 0x17, 0x1e, 0x01, 0x1f, 0x01, 0x01, 0x37, 0x01, // ..'...........7. - 0x07, 0x06, 0x07, 0x03, 0xa6, 0x34, 0x26, 0x26, 0x34, 0x26, 0x01, 0x6c, 0x01, 0xfb, 0x1c, 0x03, // .....4&&4&.l.... - 0x05, 0x1e, 0x80, 0x0d, 0x10, 0x11, 0x0e, 0xfd, 0x4e, 0x6e, 0x08, 0x04, 0x0e, 0x04, 0x07, 0x62, // ........Nn.....b - 0x53, 0x84, 0x91, 0x88, 0x56, 0x5a, 0x0b, 0x07, 0x62, 0x52, 0x84, 0x92, 0x53, 0x44, 0x09, 0x0d, // S...VZ..bR..SD.. - 0x7a, 0x7a, 0x0d, 0x09, 0x44, 0x53, 0x92, 0x84, 0x52, 0x62, 0x07, 0x05, 0x29, 0x2b, 0x55, 0x89, // zz..DS..Rb..)+U. - 0x91, 0x84, 0x53, 0x62, 0x07, 0x04, 0x0e, 0x04, 0x08, 0x6e, 0x02, 0xb2, 0x0e, 0x11, 0x10, 0x0d, // ..Sb.....n...... - 0x80, 0x1e, 0x05, 0x03, 0x1c, 0xfb, 0x5c, 0x2e, 0x32, 0x51, 0x5c, 0x64, 0x4a, 0x27, 0x2e, 0x32, // ........2Q.dJ'.2 - 0x51, 0x5c, 0x64, 0x4a, 0x2e, 0x51, 0x32, 0x2e, 0x27, 0x4a, 0x64, 0x5c, 0x51, 0x32, 0x2e, 0x27, // Q.dJ.Q2.'Jd.Q2.' - 0x4a, 0x64, 0x01, 0x0e, 0x60, 0x21, 0x0e, 0x4f, 0x1a, 0x03, 0x0e, 0x05, 0x02, 0x04, 0x01, 0xd7, // Jd..`!.O........ - 0x60, 0x02, 0xe0, 0x80, 0xfd, 0x00, 0xa0, 0x09, 0x02, 0x05, 0x04, 0x0e, 0x04, 0x1a, 0x03, 0x60, // `..............` - 0x80, 0xfd, 0xf8, 0xb1, 0x02, 0x0b, 0x02, 0x80, 0x26, 0x34, 0x26, 0x26, 0x34, 0x1a, 0xfe, 0x72, // ........&4&&4..r - 0x14, 0x24, 0x23, 0x10, 0x40, 0x07, 0x08, 0x01, 0x83, 0x42, 0x04, 0x01, 0x31, 0x30, 0x4d, 0x8d, // .$#.@....B..10M. - 0x35, 0x54, 0x4e, 0x54, 0x7b, 0x4c, 0x8e, 0x35, 0x54, 0x1f, 0x0d, 0x09, 0x49, 0x49, 0x09, 0x0d, // 5TNT{L.5T...II.. - 0x1f, 0x54, 0x35, 0x8e, 0x4c, 0x3b, 0x6c, 0x27, 0x4f, 0x54, 0x34, 0x8e, 0x4d, 0x30, 0x31, 0x01, // .T5.L;l'OT4.M01. - 0x04, 0x42, 0x01, 0x83, 0x08, 0x07, 0x40, 0x10, 0x23, 0x24, 0x14, 0x8a, 0x2a, 0x84, 0x33, 0x3b, // .B....@.#$..*.3; - 0x24, 0x2a, 0x84, 0x33, 0x3b, 0xfd, 0x3b, 0x33, 0x84, 0x2a, 0x24, 0x3b, 0x33, 0x84, 0x2a, 0x24, // $*.3;.;3.*$;3.*$ - 0x02, 0xa0, 0x3a, 0x0b, 0x24, 0x14, 0x08, 0x2f, 0x1a, 0x03, 0x10, 0x04, 0x02, 0x03, 0x01, 0xe9, // ..:.$../........ - 0x20, 0x02, 0x40, 0x40, 0xfe, 0x51, 0x71, 0x60, 0x08, 0x02, 0x04, 0x04, 0x10, 0x04, 0x1a, 0xfe, // .@@.Qq`........ - 0xc0, 0x40, 0x01, 0x98, 0x8a, 0x03, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0xff, 0x00, 0x07, 0x00, // .@.............. - 0x06, 0x00, 0x00, 0x1f, 0x00, 0x22, 0x00, 0x25, 0x00, 0x33, 0x00, 0x3c, 0x00, 0x00, 0x01, 0x32, // .....".%.3.<...2 - 0x16, 0x15, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x21, 0x22, 0x26, 0x35, 0x11, // .....#!"&5.!"&5. - 0x34, 0x36, 0x37, 0x01, 0x3e, 0x01, 0x33, 0x21, 0x32, 0x16, 0x15, 0x11, 0x36, 0x33, 0x07, 0x01, // 467.>.3!2...63.. - 0x21, 0x09, 0x01, 0x21, 0x13, 0x01, 0x11, 0x21, 0x11, 0x14, 0x06, 0x23, 0x21, 0x11, 0x21, 0x11, // !..!...!...#!.!. - 0x34, 0x36, 0x01, 0x11, 0x21, 0x11, 0x14, 0x06, 0x23, 0x21, 0x11, 0x06, 0xa0, 0x28, 0x38, 0x38, // 46..!...#!...(88 - 0x28, 0xfc, 0x40, 0x28, 0x38, 0xfd, 0xe0, 0x28, 0x38, 0x28, 0x1c, 0x01, 0x98, 0x1c, 0x60, 0x28, // (.@(8..(8(....`( - 0x01, 0xa0, 0x28, 0x38, 0x44, 0x3c, 0x80, 0xfe, 0xd5, 0x01, 0x2b, 0xfd, 0x80, 0xfe, 0xd5, 0x01, // ..(8D<....+..... - 0x2b, 0xc4, 0x01, 0x3c, 0xfe, 0x80, 0x38, 0x28, 0xfe, 0x60, 0x02, 0x00, 0x28, 0x03, 0xd8, 0xfe, // +..<..8(.`..(... - 0x80, 0x38, 0x28, 0xfe, 0x60, 0x04, 0x80, 0x38, 0x28, 0xfb, 0x40, 0x28, 0x38, 0x38, 0x28, 0x01, // .8(.`..8(.@(88(. - 0x20, 0x38, 0x28, 0x02, 0xa0, 0x28, 0x60, 0x1c, 0x01, 0x98, 0x1c, 0x28, 0x38, 0x28, 0xfe, 0xb8, // 8(..(`....(8(.. - 0x28, 0xd5, 0xfe, 0xd5, 0x02, 0xab, 0xfe, 0xd5, 0xfe, 0xa4, 0x01, 0x3c, 0x01, 0xa0, 0xfe, 0x60, // (..........<...` - 0x28, 0x38, 0xfd, 0x80, 0x01, 0x00, 0x28, 0x60, 0xfc, 0xf8, 0x04, 0x80, 0xfe, 0x60, 0x28, 0x38, // (8....(`.....`(8 - 0xfd, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x04, 0xff, 0x84, 0x05, 0x7c, 0x05, 0x7c, 0x00, 0x3f, // ...........|.|.? - 0x00, 0x00, 0x25, 0x14, 0x06, 0x23, 0x22, 0x27, 0x01, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, // ..%..#"'.&54632. - 0x01, 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x27, 0x01, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x17, // .....#"'.&#".... - 0x01, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x27, 0x01, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x17, // ..32654'.&#".... - 0x01, 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x27, 0x01, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, // .....#"'.&54632. - 0x01, 0x16, 0x05, 0x7c, 0x9e, 0x75, 0x87, 0x64, 0xfc, 0xf7, 0x71, 0xdc, 0x9f, 0x9e, 0x73, 0x02, // ...|.u.d..q...s. - 0x5d, 0x0a, 0x3d, 0x10, 0x0d, 0x0a, 0xfd, 0xa2, 0x4f, 0x66, 0x6a, 0x92, 0x4c, 0x03, 0x08, 0x3f, // ].=.....Ofj.L..? - 0x52, 0x40, 0x54, 0x3f, 0xfd, 0xbb, 0x1a, 0x22, 0x1d, 0x26, 0x19, 0x01, 0x9a, 0x0a, 0x3e, 0x10, // R@T?...".&....>. - 0x0c, 0x0a, 0xfe, 0x66, 0x3f, 0x72, 0x52, 0x58, 0x3d, 0x02, 0x45, 0x64, 0x97, 0x75, 0x9e, 0x64, // ...f?rRX=.Ed.u.d - 0x03, 0x08, 0x73, 0x9c, 0x9f, 0xde, 0x71, 0xfd, 0xa2, 0x0a, 0x0c, 0x10, 0x3d, 0x0a, 0x02, 0x5f, // ..s...q.....=.._ - 0x4d, 0x96, 0x6a, 0x69, 0x4c, 0xfc, 0xf7, 0x3f, 0x54, 0x40, 0x52, 0x3f, 0x02, 0x45, 0x18, 0x26, // M.jiL..?T@R?.E.& - 0x1d, 0x20, 0x1b, 0xfe, 0x66, 0x0a, 0x0c, 0x10, 0x3e, 0x0a, 0x01, 0x9a, 0x3d, 0x58, 0x52, 0x72, // . ..f...>...=XRr - 0x3f, 0xfd, 0xbb, 0x62, 0x00, 0x04, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x03, // ?..b............ - 0x00, 0x21, 0x00, 0x31, 0x00, 0x45, 0x00, 0x00, 0x29, 0x01, 0x11, 0x21, 0x01, 0x33, 0x11, 0x34, // .!.1.E..)..!.3.4 - 0x26, 0x27, 0x01, 0x2e, 0x01, 0x23, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x23, // &'...#...#!"&5.# - 0x11, 0x33, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x15, 0x01, 0x11, 0x34, 0x26, 0x2b, 0x01, // .3.463!2....4&+. - 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x05, 0x11, 0x14, 0x06, 0x23, 0x21, // ".....;.26....#! - 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x17, 0x01, 0x1e, 0x01, 0x01, 0x80, // "&5.463!2....... - 0x03, 0x00, 0xfd, 0x00, 0x03, 0x80, 0x80, 0x14, 0x0a, 0xfe, 0xe7, 0x0a, 0x30, 0x0f, 0x38, 0x28, // ............0.8( - 0xfd, 0xc0, 0x28, 0x38, 0x80, 0x80, 0x38, 0x28, 0x03, 0x40, 0x28, 0x38, 0xfe, 0x80, 0x13, 0x0d, // ..(8..8(.@(8.... - 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x02, 0x80, 0x38, 0x28, 0xfa, 0xc0, 0x28, 0x38, // ..........8(..(8 - 0x38, 0x28, 0x03, 0xa0, 0x28, 0x60, 0x1c, 0x01, 0x18, 0x1c, 0x28, 0x01, 0x80, 0xfe, 0x80, 0x03, // 8(..(`....(..... - 0x80, 0x0e, 0x31, 0x0a, 0x01, 0x19, 0x0a, 0x14, 0xfe, 0x60, 0x28, 0x38, 0x38, 0x28, 0x01, 0xa0, // ..1......`(88(.. - 0xfb, 0x00, 0x01, 0xa0, 0x28, 0x38, 0x38, 0x28, 0x02, 0x00, 0x01, 0x40, 0x0d, 0x13, 0x13, 0x0d, // ....(88(...@.... - 0xfe, 0xc0, 0x0d, 0x13, 0x13, 0x13, 0xfc, 0x60, 0x28, 0x38, 0x38, 0x28, 0x05, 0x40, 0x28, 0x38, // .......`(88(.@(8 - 0x28, 0x1c, 0xfe, 0xe8, 0x1c, 0x60, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // (....`.......... - 0x05, 0x80, 0x00, 0x0f, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, // ..........#!"&5. - 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x06, 0x00, 0xa9, 0x77, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, // 463!2....w.@w..w - 0x03, 0xc0, 0x77, 0xa9, 0x04, 0x60, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, // ..w..`.@w..w..w. - 0xa9, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x00, 0x0f, // ................ - 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x00, 0x25, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, // .../..%...#!"&=. - 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, // 463!2.....#!"&=. - 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, // 463!2.....#!"&=. - 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x06, 0x00, 0x26, 0x1a, 0xfa, 0x80, 0x1a, 0x26, 0x26, 0x1a, // 463!2...&....&&. - 0x05, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0xfa, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x05, 0x80, 0x1a, 0x26, // ...&&....&&....& - 0x26, 0x1a, 0xfa, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x05, 0x80, 0x1a, 0x26, 0xc0, 0x80, 0x1a, 0x26, // &....&&....&...& - 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x01, 0xe6, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, // &...&&....&&...& - 0x26, 0x01, 0xe6, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x00, 0x06, 0x00, 0x00, // &....&&...&&.... - 0xff, 0xc0, 0x07, 0x00, 0x05, 0x40, 0x00, 0x07, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x27, 0x00, 0x37, // .....@.......'.7 - 0x00, 0x47, 0x00, 0x00, 0x24, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x12, 0x14, 0x06, 0x22, // .G..$.."&462..." - 0x26, 0x34, 0x36, 0x32, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, // &462....#!"&=.46 - 0x33, 0x21, 0x32, 0x16, 0x00, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x01, 0x15, 0x14, 0x06, // 3!2...."&462.... - 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, // #!"&=.463!2..... - 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x80, 0x70, 0xa0, // #!"&=.463!2...p. - 0x70, 0x70, 0xa0, 0x70, 0x70, 0xa0, 0x70, 0x70, 0xa0, 0x05, 0xf0, 0x13, 0x0d, 0xfb, 0x40, 0x0d, // pp.pp.pp......@. - 0x13, 0x13, 0x0d, 0x04, 0xc0, 0x0d, 0x13, 0xfa, 0x80, 0x70, 0xa0, 0x70, 0x70, 0xa0, 0x05, 0xf0, // .........p.pp... - 0x13, 0x0d, 0xfb, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x04, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xfb, 0x40, // ...@...........@ - 0x0d, 0x13, 0x13, 0x0d, 0x04, 0xc0, 0x0d, 0x13, 0xd0, 0xa0, 0x70, 0x70, 0xa0, 0x70, 0x01, 0x90, // ..........pp.p.. - 0xa0, 0x70, 0x70, 0xa0, 0x70, 0xfd, 0xa0, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, // .pp.p........... - 0x03, 0xe3, 0xa0, 0x70, 0x70, 0xa0, 0x70, 0xfd, 0xa0, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, // ...pp.p......... - 0x13, 0x13, 0x01, 0xf3, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0x00, 0x00, 0x00, // ................ - 0x00, 0x06, 0x00, 0x0f, 0xff, 0x00, 0x07, 0x00, 0x05, 0xf7, 0x00, 0x1e, 0x00, 0x3c, 0x00, 0x4c, // .............<.L - 0x00, 0x5c, 0x00, 0x6c, 0x00, 0x7c, 0x00, 0x00, 0x05, 0x14, 0x06, 0x23, 0x22, 0x27, 0x37, 0x16, // ...l.|.....#"'7. - 0x33, 0x32, 0x36, 0x35, 0x34, 0x07, 0x27, 0x3e, 0x02, 0x37, 0x35, 0x22, 0x06, 0x23, 0x15, 0x23, // 32654.'>.75".#.# - 0x35, 0x21, 0x15, 0x07, 0x1e, 0x01, 0x13, 0x15, 0x21, 0x26, 0x35, 0x34, 0x3e, 0x03, 0x35, 0x34, // 5!......!&54>.54 - 0x26, 0x23, 0x22, 0x07, 0x27, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x15, 0x14, 0x0e, 0x02, 0x07, 0x33, // &#".'>.32......3 - 0x35, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, // 5....#!"&=.463!2 - 0x16, 0x01, 0x15, 0x21, 0x35, 0x33, 0x34, 0x36, 0x3d, 0x01, 0x23, 0x06, 0x07, 0x27, 0x37, 0x33, // ...!5346=.#..'73 - 0x11, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, // .....#!"&=.463!2 - 0x16, 0x11, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, // .....#!"&=.463!2 - 0x16, 0x01, 0x7d, 0x6d, 0x51, 0x6a, 0x42, 0x39, 0x31, 0x39, 0x1d, 0x2b, 0x69, 0x1a, 0x08, 0x31, // ..}mQjB919.+i..1 - 0x24, 0x13, 0x10, 0x41, 0x10, 0x6a, 0x01, 0x4d, 0x5f, 0x33, 0x3c, 0x02, 0xfe, 0x96, 0x06, 0x2f, // $..A.j.M_3<..../ - 0x42, 0x42, 0x2f, 0x1d, 0x19, 0x2e, 0x23, 0x55, 0x18, 0x5f, 0x3a, 0x49, 0x64, 0x44, 0x52, 0x45, // BB/...#U._:IdDRE - 0x01, 0x7f, 0x05, 0xea, 0x13, 0x0d, 0xfb, 0x40, 0x0d, 0x13, 0x12, 0x0e, 0x04, 0xc0, 0x0d, 0x13, // .......@........ - 0xfa, 0x80, 0xfe, 0xb1, 0x6b, 0x01, 0x02, 0x08, 0x2a, 0x47, 0x88, 0x6a, 0x05, 0xec, 0x13, 0x0d, // ....k...*G.j.... - 0xfb, 0x40, 0x0d, 0x13, 0x12, 0x0e, 0x04, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xfb, 0x40, 0x0d, 0x13, // .@...........@.. - 0x13, 0x0d, 0x04, 0xc0, 0x0d, 0x13, 0x54, 0x50, 0x5c, 0x42, 0x58, 0x2d, 0x1d, 0x1c, 0x40, 0x08, // ......TP.BX-..@. - 0x38, 0x0a, 0x43, 0x29, 0x12, 0x01, 0x02, 0x35, 0x98, 0x58, 0x73, 0x0c, 0x4a, 0x02, 0x40, 0x9f, // 8.C)...5.Xs.J.@. - 0x24, 0x12, 0x33, 0x54, 0x34, 0x2b, 0x2c, 0x17, 0x19, 0x1b, 0x3a, 0x3b, 0x33, 0x39, 0x53, 0x47, // $.3T4+,...:;39SG - 0x32, 0x53, 0x2e, 0x37, 0x19, 0x3c, 0xfe, 0xc1, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0e, 0x12, // 2S.7.<.......... - 0x13, 0x03, 0x76, 0x63, 0x63, 0x29, 0xa2, 0x28, 0x0c, 0x11, 0x25, 0x4c, 0x7f, 0xfe, 0x6c, 0xfe, // ..vcc).(..%L..l. - 0x7d, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0e, 0x12, 0x13, 0x01, 0xf3, 0xc0, 0x0d, 0x13, 0x13, // }............... - 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x07, 0x00, // ................ - 0x05, 0x80, 0x00, 0x0f, 0x00, 0x35, 0x00, 0x65, 0x00, 0x00, 0x01, 0x32, 0x16, 0x1d, 0x01, 0x14, // .....5.e...2.... - 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x25, 0x26, 0x27, 0x26, 0x35, 0x34, // .#!"&=.463%&'&54 - 0x37, 0x36, 0x21, 0x32, 0x17, 0x16, 0x17, 0x16, 0x17, 0x16, 0x15, 0x14, 0x0f, 0x01, 0x2f, 0x01, // 76!2........../. - 0x26, 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x15, 0x14, 0x17, 0x16, 0x17, 0x16, 0x17, 0x16, 0x17, // &'&#"........... - 0x03, 0x21, 0x16, 0x15, 0x14, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x23, 0x22, 0x2f, // .!...........#"/ - 0x01, 0x26, 0x27, 0x26, 0x3d, 0x01, 0x34, 0x27, 0x26, 0x3f, 0x01, 0x35, 0x37, 0x1e, 0x02, 0x17, // .&'&=.4'&?.57... - 0x16, 0x17, 0x16, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x37, 0x36, 0x35, 0x34, 0x27, 0x26, 0x06, // .....32767654'&. - 0xe0, 0x0e, 0x12, 0x12, 0x0e, 0xf9, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x01, 0xc3, 0x1c, 0x17, 0x30, // ......@........0 - 0x86, 0x85, 0x01, 0x04, 0x32, 0x75, 0x42, 0x6f, 0x0a, 0x0b, 0x0e, 0x05, 0x0c, 0x54, 0x0e, 0x32, // ....2uBo.....T.2 - 0x35, 0x58, 0x7a, 0x72, 0x44, 0x43, 0x42, 0x42, 0xd5, 0x45, 0x68, 0x3a, 0x25, 0xec, 0x01, 0x9b, // 5XzrDCBB.Eh:%... - 0x07, 0x29, 0x17, 0x30, 0x25, 0x48, 0x50, 0x49, 0x50, 0x7b, 0x72, 0x51, 0x8c, 0x39, 0x0f, 0x08, // .).0%HPIP{rQ.9.. - 0x02, 0x01, 0x01, 0x02, 0x66, 0x0f, 0x1e, 0x0f, 0x05, 0x23, 0x2d, 0x2b, 0x3e, 0x3b, 0x49, 0x40, // ....f....#-+>;I@ - 0x4b, 0x4d, 0x2d, 0x2f, 0x51, 0x22, 0x02, 0x80, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, // KM-/Q"....@....@ - 0x0e, 0x12, 0x40, 0x23, 0x2d, 0x61, 0x5b, 0xb5, 0x80, 0x7f, 0x13, 0x0c, 0x24, 0x26, 0x50, 0x7b, // ..@#-a[.....$&P{ - 0x3c, 0x12, 0x1b, 0x03, 0x06, 0x02, 0x95, 0x38, 0x5b, 0x3b, 0x3a, 0x58, 0x49, 0x43, 0x43, 0x3e, // <......8[;:XICC> - 0x14, 0x2e, 0x1c, 0x18, 0xff, 0x00, 0x27, 0x35, 0x6f, 0x65, 0x37, 0x31, 0x23, 0x2e, 0x30, 0x12, // ......'5oe71#.0. - 0x15, 0x17, 0x28, 0x10, 0x0c, 0x08, 0x0e, 0x0d, 0x6c, 0x30, 0x1e, 0x26, 0x25, 0x2c, 0x02, 0x22, // ..(.....l0.&%,." - 0x4a, 0x26, 0x08, 0x39, 0x25, 0x24, 0x15, 0x16, 0x1b, 0x1a, 0x3c, 0x3d, 0x44, 0x54, 0x49, 0x1d, // J&.9%$....<=DTI. - 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x63, 0x00, 0x73, 0x00, 0x00, // ...........c.s.. - 0x13, 0x26, 0x2f, 0x01, 0x36, 0x33, 0x32, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x37, 0x32, 0x37, // .&/.632..3276727 - 0x07, 0x17, 0x15, 0x06, 0x23, 0x22, 0x07, 0x06, 0x15, 0x14, 0x16, 0x15, 0x17, 0x13, 0x16, 0x17, // ....#".......... - 0x16, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x37, 0x36, 0x37, 0x36, 0x37, 0x36, 0x35, 0x34, 0x2e, // ...327676767654. - 0x01, 0x2f, 0x01, 0x26, 0x27, 0x26, 0x0f, 0x01, 0x27, 0x37, 0x33, 0x17, 0x16, 0x37, 0x17, 0x16, // ./.&'&..'73..7.. - 0x15, 0x14, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x15, 0x14, 0x16, 0x15, 0x16, 0x13, 0x16, 0x07, // ................ - 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x27, 0x26, 0x27, 0x26, 0x35, // .......#"'&'&'&5 - 0x11, 0x34, 0x27, 0x26, 0x01, 0x35, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, // .4'&.54&#!"..... - 0x33, 0x21, 0x32, 0x36, 0x30, 0x25, 0x08, 0x03, 0x0d, 0x1b, 0x3c, 0x34, 0x84, 0x22, 0x56, 0x52, // 3!260%....<4."VR - 0x74, 0x1e, 0x38, 0x1e, 0x01, 0x02, 0x3c, 0x40, 0x3c, 0x13, 0x0d, 0x01, 0x01, 0x0e, 0x06, 0x2d, // t.8...<@<......- - 0x23, 0x3d, 0x58, 0x59, 0x68, 0x57, 0x38, 0x2b, 0x30, 0x11, 0x24, 0x11, 0x15, 0x07, 0x0f, 0x06, // #=XYhW8+0.$..... - 0x04, 0x05, 0x13, 0x22, 0x2b, 0x64, 0x0e, 0x02, 0x54, 0xcd, 0x4c, 0x78, 0x12, 0x06, 0x04, 0x2d, // ..."+d..T.Lx...- - 0x27, 0x49, 0x06, 0x0f, 0x03, 0x08, 0x0e, 0x06, 0x15, 0x0f, 0x1a, 0x26, 0x4a, 0x4b, 0x6b, 0x6d, // 'I.........&JKkm - 0x92, 0xa7, 0x75, 0x77, 0x3c, 0x3d, 0x16, 0x10, 0x11, 0x19, 0x05, 0x56, 0x12, 0x0e, 0xfa, 0x40, // ..uw<=.....V...@ - 0x0e, 0x12, 0x12, 0x0e, 0x05, 0xc0, 0x0e, 0x12, 0x05, 0x21, 0x02, 0x02, 0x58, 0x01, 0x04, 0x07, // .........!..X... - 0x03, 0x04, 0x01, 0x02, 0x0e, 0x40, 0x09, 0x09, 0x19, 0x0e, 0x76, 0x0d, 0x27, 0x06, 0xe5, 0xfe, // .....@....v.'... - 0xe8, 0x7c, 0x4e, 0x3b, 0x21, 0x2f, 0x1c, 0x12, 0x21, 0x24, 0x1c, 0x38, 0x3a, 0x49, 0x9c, 0x4f, // .|N;!/..!$.8:I.O - 0x62, 0x93, 0x56, 0x3b, 0x43, 0x15, 0x23, 0x01, 0x02, 0x03, 0x56, 0x0a, 0x03, 0x0d, 0x02, 0x26, // b.V;C.#...V....& - 0x0d, 0x07, 0x18, 0x0c, 0x01, 0x0b, 0x06, 0x0f, 0x1a, 0x07, 0x28, 0x0b, 0x13, 0xfe, 0x87, 0xc3, // ..........(..... - 0x6d, 0x4c, 0x2e, 0x41, 0x3a, 0x39, 0x20, 0x21, 0x2e, 0x2f, 0x4b, 0x4c, 0x77, 0x50, 0x9d, 0x01, // mL.A:9 !./KLwP.. - 0x4d, 0xbc, 0x19, 0x24, 0xfa, 0x82, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x00, // M..$..@....@.... - 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x06, 0x80, 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, // .............../ - 0x00, 0x3f, 0x00, 0x4f, 0x00, 0x5f, 0x00, 0x6f, 0x00, 0x7f, 0x00, 0x8f, 0x00, 0x9f, 0x00, 0x00, // .?.O._.o........ - 0x25, 0x35, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, // %54&#!".....3!26 - 0x11, 0x35, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, // .54&#!".....3!26 + 0x05, 0x80, 0x00, 0x35, 0x00, 0x3d, 0x00, 0x71, 0x00, 0x00, 0x25, 0x33, 0x11, 0x23, 0x22, 0x2e, // ...5.=.q..%3.#". + 0x02, 0x27, 0x26, 0x27, 0x26, 0x27, 0x26, 0x27, 0x2e, 0x04, 0x23, 0x22, 0x06, 0x15, 0x14, 0x1e, // .'&'&'&'..#".... + 0x02, 0x15, 0x21, 0x22, 0x06, 0x15, 0x14, 0x16, 0x33, 0x21, 0x0e, 0x01, 0x15, 0x14, 0x17, 0x06, // ..!"....3!...... + 0x14, 0x16, 0x17, 0x06, 0x15, 0x14, 0x16, 0x33, 0x32, 0x3e, 0x01, 0x24, 0x34, 0x26, 0x22, 0x06, // .......32>.$4&". + 0x14, 0x16, 0x32, 0x13, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x07, 0x06, 0x23, 0x22, 0x26, 0x3f, // ..2....#!"..#"&? + 0x01, 0x26, 0x35, 0x34, 0x37, 0x26, 0x27, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x21, 0x26, // .&547&'#"&5463!& + 0x35, 0x34, 0x36, 0x33, 0x32, 0x1e, 0x03, 0x17, 0x16, 0x17, 0x1e, 0x06, 0x33, 0x21, 0x32, 0x16, // 54632.......3!2. + 0x05, 0x60, 0x20, 0x20, 0x23, 0x41, 0x3c, 0x28, 0x1d, 0x08, 0x04, 0x48, 0x28, 0x0e, 0x18, 0x01, // .` #A<(...H(... + 0x13, 0x12, 0x16, 0x15, 0x08, 0x47, 0x59, 0x1e, 0x24, 0x1e, 0xfd, 0xc0, 0x32, 0x4e, 0x4c, 0x34, // .....GY.$...2NL4 + 0x01, 0x4b, 0x0f, 0x14, 0x35, 0x12, 0x23, 0x1e, 0x04, 0x61, 0x57, 0x54, 0xc6, 0xbe, 0x01, 0x68, // .K..5.#..aWT...h + 0x26, 0x34, 0x26, 0x26, 0x34, 0xa6, 0x4b, 0x35, 0xfe, 0xe0, 0x3b, 0xa4, 0xbe, 0x7f, 0x8e, 0xb0, // &4&&4.K5..;..... + 0x01, 0x01, 0x3d, 0x03, 0x21, 0x04, 0xa9, 0x69, 0x97, 0x98, 0x68, 0x01, 0x76, 0x16, 0xa3, 0x7d, // ..=.!..i..h.v..} + 0x26, 0x3f, 0x2f, 0x22, 0x28, 0x0d, 0x23, 0x41, 0x02, 0x18, 0x0e, 0x1b, 0x15, 0x18, 0x17, 0x0a, // &?/"(.#A........ + 0x01, 0x20, 0x35, 0x4b, 0x80, 0x02, 0x80, 0x18, 0x32, 0x2a, 0x21, 0x09, 0x05, 0x51, 0x40, 0x16, // . 5K....2*!..Q@. + 0x2e, 0x03, 0x27, 0x21, 0x26, 0x17, 0x3d, 0x43, 0x2b, 0x53, 0x35, 0x39, 0x14, 0x4d, 0x33, 0x34, // ..'!&.=C+S59.M34 + 0x4c, 0x11, 0x3d, 0x19, 0x45, 0x32, 0x20, 0x4a, 0x49, 0x10, 0x18, 0x20, 0x55, 0x52, 0x40, 0x40, // L.=.E2 JI.. UR@@ + 0x26, 0x34, 0x26, 0x26, 0x34, 0x26, 0x02, 0x80, 0xfd, 0x80, 0x35, 0x4b, 0x3b, 0x45, 0x9b, 0x8c, // &4&&4&....5K;E.. + 0x05, 0x4c, 0x66, 0x16, 0x15, 0x39, 0x3e, 0x98, 0x69, 0x67, 0x98, 0x3c, 0x44, 0x7a, 0x86, 0x23, // .Lf..9>.ig.R.7J.......K.. + 0x00, 0x03, 0x00, 0x00, 0xff, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x35, 0x00, 0x68, // .............5.h + 0x00, 0x00, 0x04, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x13, 0x34, 0x23, 0x22, 0x07, 0x2e, // ...4&"...2.4#".. + 0x01, 0x22, 0x07, 0x26, 0x23, 0x22, 0x06, 0x07, 0x11, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x11, // .".&#"...4&#"... + 0x22, 0x2e, 0x02, 0x23, 0x22, 0x06, 0x15, 0x14, 0x17, 0x16, 0x17, 0x16, 0x17, 0x16, 0x17, 0x16, // "..#"........... + 0x1d, 0x01, 0x21, 0x35, 0x34, 0x3e, 0x01, 0x37, 0x14, 0x07, 0x06, 0x15, 0x11, 0x14, 0x06, 0x23, // ..!54>.7.......# + 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x2e, 0x05, 0x27, 0x26, 0x27, 0x2e, 0x04, 0x35, 0x34, 0x36, // !"&5.4..'&'..546 + 0x33, 0x32, 0x17, 0x11, 0x34, 0x36, 0x33, 0x32, 0x16, 0x1d, 0x01, 0x16, 0x17, 0x36, 0x33, 0x32, // 32..4632.....632 + 0x17, 0x36, 0x16, 0x05, 0x00, 0x26, 0x34, 0x26, 0x26, 0x34, 0xa6, 0xa7, 0x1a, 0x1e, 0x10, 0x49, // .6...&4&&4.....I + 0x4a, 0x20, 0x32, 0x45, 0x19, 0x3d, 0x11, 0x4c, 0x34, 0x33, 0x4d, 0x14, 0x39, 0x35, 0x53, 0x2b, // J 2E.=.L43M.95S+ + 0x43, 0x3d, 0x8b, 0x2c, 0x15, 0x40, 0x51, 0x51, 0x19, 0x39, 0x02, 0x80, 0x40, 0x40, 0x80, 0x45, // C=.,.@QQ.9..@@.E + 0x3b, 0x4b, 0x35, 0xfd, 0x80, 0x35, 0x4b, 0x09, 0x13, 0x11, 0x1c, 0x0f, 0x1c, 0x03, 0x4a, 0x37, // ;K5..5K.......J7 + 0x15, 0x52, 0x3e, 0x40, 0x23, 0x86, 0x7a, 0x44, 0x3c, 0x98, 0x67, 0x69, 0x98, 0x3e, 0x39, 0x15, // .R>@#.zD<.gi.>9. + 0x16, 0x65, 0x4d, 0x8b, 0xa1, 0x5a, 0x34, 0x26, 0x26, 0x34, 0x26, 0x03, 0x3c, 0xbd, 0x05, 0x1e, // .eM..Z4&&4&.<... + 0x23, 0x12, 0x35, 0x14, 0x0f, 0x01, 0x4b, 0x34, 0x4c, 0x4e, 0x32, 0xfd, 0xc0, 0x1e, 0x24, 0x1e, // #.5...K4LN2...$. + 0x59, 0x47, 0x18, 0x42, 0x18, 0x0d, 0x28, 0x48, 0x47, 0x1e, 0x45, 0x47, 0x20, 0x20, 0x48, 0xbe, // YG.B..(HG.EG H. + 0xc5, 0x56, 0x85, 0xbd, 0xa4, 0x3b, 0xfe, 0xe0, 0x35, 0x4b, 0x4b, 0x35, 0x01, 0x20, 0x0a, 0x17, // .V...;..5KK5. .. + 0x18, 0x15, 0x1b, 0x0e, 0x18, 0x02, 0x41, 0x23, 0x0d, 0x28, 0x22, 0x2f, 0x3f, 0x26, 0x7d, 0xa3, // ......A#.("/?&}. + 0x16, 0x01, 0x76, 0x68, 0x98, 0x97, 0x69, 0xa9, 0x04, 0x21, 0x03, 0x3c, 0x01, 0xac, 0x00, 0x00, // ..vh..i..!.<.... + 0x00, 0x03, 0x00, 0x00, 0xff, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x34, 0x00, 0x3c, 0x00, 0x70, // ...........4.<.p + 0x00, 0x00, 0x01, 0x34, 0x2e, 0x01, 0x3d, 0x01, 0x21, 0x15, 0x14, 0x0e, 0x02, 0x07, 0x06, 0x07, // ...4..=.!....... + 0x06, 0x07, 0x06, 0x07, 0x0e, 0x04, 0x15, 0x14, 0x16, 0x33, 0x32, 0x3e, 0x02, 0x33, 0x11, 0x14, // .........32>.3.. + 0x16, 0x33, 0x32, 0x36, 0x35, 0x11, 0x16, 0x33, 0x32, 0x37, 0x16, 0x32, 0x36, 0x37, 0x16, 0x33, // .3265..327.267.3 + 0x32, 0x36, 0x02, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x01, 0x14, 0x06, 0x2f, 0x01, 0x06, // 26.4&"...2.../.. + 0x23, 0x22, 0x27, 0x06, 0x07, 0x15, 0x14, 0x06, 0x23, 0x22, 0x26, 0x35, 0x11, 0x06, 0x23, 0x22, // #"'.....#"&5..#" + 0x26, 0x35, 0x34, 0x3e, 0x03, 0x37, 0x36, 0x37, 0x3e, 0x06, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, // &54>.767>.5.463! + 0x32, 0x16, 0x15, 0x11, 0x14, 0x17, 0x16, 0x05, 0x80, 0x40, 0x40, 0xfd, 0x80, 0x18, 0x32, 0x2a, // 2........@@...2* + 0x21, 0x09, 0x05, 0x51, 0x40, 0x16, 0x2e, 0x03, 0x27, 0x21, 0x26, 0x17, 0x3d, 0x43, 0x2b, 0x53, // !..Q@...'!&.=C+S + 0x35, 0x39, 0x14, 0x4d, 0x33, 0x34, 0x4c, 0x2e, 0x39, 0x45, 0x32, 0x20, 0x4a, 0x49, 0x10, 0x18, // 59.M34L.9E2 JI.. + 0x20, 0x55, 0x52, 0x80, 0x26, 0x34, 0x26, 0x26, 0x34, 0x01, 0x26, 0x9b, 0x8c, 0x05, 0x4c, 0x66, // UR.&4&&4.&...Lf + 0x16, 0x15, 0x36, 0x41, 0x98, 0x69, 0x67, 0x98, 0x36, 0x4a, 0x79, 0x87, 0x23, 0x40, 0x3e, 0x52, // ..6A.ig.6Jy.#@>R + 0x15, 0x37, 0x4a, 0x03, 0x1c, 0x0f, 0x1c, 0x11, 0x13, 0x09, 0x4b, 0x35, 0x02, 0x80, 0x35, 0x4b, // .7J.......K5..5K + 0x3b, 0x45, 0x02, 0x40, 0x54, 0xc6, 0xbe, 0x48, 0x20, 0x20, 0x23, 0x41, 0x3c, 0x28, 0x1d, 0x08, // ;E.@T..H #A<(.. + 0x04, 0x48, 0x28, 0x0e, 0x18, 0x01, 0x13, 0x12, 0x16, 0x15, 0x08, 0x47, 0x59, 0x1e, 0x24, 0x1e, // .H(........GY.$. + 0xfd, 0xc0, 0x32, 0x4e, 0x4c, 0x34, 0x01, 0x4b, 0x23, 0x35, 0x12, 0x23, 0x1e, 0x04, 0x61, 0x03, // ..2NL4.K#5.#..a. + 0x3d, 0x34, 0x26, 0x26, 0x34, 0x26, 0xfd, 0x44, 0x8e, 0xb0, 0x01, 0x01, 0x3d, 0x03, 0x1e, 0x07, // =4&&4&.D....=... + 0xa9, 0x69, 0x97, 0x98, 0x68, 0x01, 0x76, 0x16, 0xa3, 0x7d, 0x26, 0x3f, 0x2f, 0x22, 0x28, 0x0d, // .i..h.v..}&?/"(. + 0x23, 0x41, 0x02, 0x18, 0x0e, 0x1b, 0x15, 0x18, 0x17, 0x0a, 0x01, 0x20, 0x35, 0x4b, 0x4b, 0x35, // #A......... 5KK5 + 0xfe, 0xe0, 0x3b, 0xa4, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // ..;............. + 0x05, 0x80, 0x00, 0x1f, 0x00, 0x2b, 0x00, 0x00, 0x01, 0x35, 0x34, 0x26, 0x23, 0x21, 0x37, 0x36, // .....+...54&#!76 + 0x34, 0x2f, 0x01, 0x26, 0x22, 0x07, 0x01, 0x07, 0x06, 0x14, 0x1f, 0x01, 0x01, 0x16, 0x32, 0x3f, // 4/.&".........2? + 0x01, 0x36, 0x34, 0x2f, 0x01, 0x21, 0x32, 0x36, 0x00, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, // .64/.!26.... $.. + 0x12, 0x24, 0x20, 0x04, 0x05, 0x00, 0x26, 0x1a, 0xfe, 0x0a, 0xbd, 0x13, 0x13, 0x5b, 0x12, 0x36, // .$ ...&......[.6 + 0x12, 0xfe, 0x96, 0x5b, 0x12, 0x12, 0x5b, 0x01, 0x6a, 0x12, 0x36, 0x12, 0x5b, 0x12, 0x12, 0xbd, // ...[..[.j.6.[... + 0x01, 0xf6, 0x1a, 0x26, 0x01, 0x00, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, // ...&......^..... + 0x61, 0x01, 0xa2, 0x01, 0x61, 0x02, 0x40, 0x80, 0x1a, 0x26, 0xbd, 0x13, 0x34, 0x13, 0x5b, 0x12, // a...a.@..&..4.[. + 0x12, 0xfe, 0x96, 0x5b, 0x12, 0x36, 0x12, 0x5b, 0xfe, 0x96, 0x12, 0x12, 0x5b, 0x12, 0x36, 0x12, // ...[.6.[....[.6. + 0xbd, 0x26, 0x01, 0x2b, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, // .&.+.^.....a...a + 0xce, 0xce, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x1f, // ................ + 0x00, 0x2b, 0x00, 0x00, 0x00, 0x34, 0x2f, 0x01, 0x01, 0x26, 0x22, 0x0f, 0x01, 0x06, 0x14, 0x1f, // .+...4/..&"..... + 0x01, 0x21, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x33, 0x21, 0x07, 0x06, 0x14, 0x1f, 0x01, 0x16, // .!".....3!...... + 0x32, 0x37, 0x01, 0x37, 0x24, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, // 27.7$... $...$ . + 0x05, 0x05, 0x12, 0x5b, 0xfe, 0x96, 0x12, 0x36, 0x12, 0x5b, 0x12, 0x12, 0xbd, 0xfe, 0x0a, 0x1a, // ...[...6.[...... + 0x26, 0x26, 0x1a, 0x01, 0xf6, 0xbd, 0x13, 0x13, 0x5b, 0x12, 0x36, 0x12, 0x01, 0x6a, 0x5b, 0x01, // &&......[.6..j[. + 0x0d, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, // .....^.....a...a + 0x02, 0x65, 0x36, 0x12, 0x5b, 0x01, 0x6a, 0x12, 0x12, 0x5b, 0x12, 0x36, 0x12, 0xbd, 0x26, 0x1a, // .e6.[.j..[.6..&. + 0x80, 0x1a, 0x26, 0xbd, 0x13, 0x34, 0x13, 0x5b, 0x12, 0x12, 0x01, 0x6a, 0x5b, 0xfe, 0xfe, 0x5e, // ..&..4.[...j[..^ + 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x02, 0x00, 0x00, // .....a...a...... + 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x1f, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x34, 0x27, 0x01, // .........+...4'. + 0x27, 0x26, 0x22, 0x0f, 0x01, 0x01, 0x06, 0x14, 0x1f, 0x01, 0x16, 0x32, 0x3f, 0x01, 0x11, 0x14, // '&"........2?... + 0x16, 0x3b, 0x01, 0x32, 0x36, 0x35, 0x11, 0x17, 0x16, 0x32, 0x3f, 0x01, 0x24, 0x10, 0x02, 0x04, // .;.265...2?.$... + 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, 0x05, 0x04, 0x12, 0xfe, 0x96, 0x5b, 0x12, 0x36, // $...$ ......[.6 + 0x12, 0x5b, 0xfe, 0x96, 0x12, 0x12, 0x5b, 0x12, 0x36, 0x12, 0xbd, 0x26, 0x1a, 0x80, 0x1a, 0x26, // .[....[.6..&...& + 0xbd, 0x13, 0x34, 0x13, 0x5b, 0x01, 0x0e, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, // ..4.[......^.... + 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x02, 0x66, 0x36, 0x12, 0x01, 0x6a, 0x5b, 0x12, 0x12, 0x5b, // .a...a.f6..j[..[ + 0xfe, 0x96, 0x12, 0x36, 0x12, 0x5b, 0x12, 0x12, 0xbd, 0xfe, 0x0a, 0x1a, 0x26, 0x26, 0x1a, 0x01, // ...6.[......&&.. + 0xf6, 0xbd, 0x13, 0x13, 0x5b, 0xfd, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, // ....[..^.....a.. + 0x01, 0x61, 0xce, 0xce, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x1f, // .a.............. + 0x00, 0x2b, 0x00, 0x00, 0x00, 0x34, 0x2f, 0x01, 0x26, 0x22, 0x0f, 0x01, 0x11, 0x34, 0x26, 0x2b, // .+...4/.&"...4&+ + 0x01, 0x22, 0x06, 0x15, 0x11, 0x27, 0x26, 0x22, 0x0f, 0x01, 0x06, 0x14, 0x17, 0x01, 0x17, 0x16, // ."...'&"........ + 0x32, 0x3f, 0x01, 0x01, 0x00, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, // 2?...... $...$ . + 0x05, 0x04, 0x12, 0x5b, 0x12, 0x36, 0x12, 0xbd, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0xbd, 0x13, 0x34, // ...[.6..&...&..4 + 0x13, 0x5b, 0x12, 0x12, 0x01, 0x6a, 0x5b, 0x12, 0x36, 0x12, 0x5b, 0x01, 0x6a, 0x01, 0x0e, 0xce, // .[...j[.6.[.j... + 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x02, 0x64, // ...^.....a...a.d + 0x36, 0x12, 0x5b, 0x12, 0x12, 0xbd, 0x01, 0xf6, 0x1a, 0x26, 0x26, 0x1a, 0xfe, 0x0a, 0xbd, 0x13, // 6.[......&&..... + 0x13, 0x5b, 0x12, 0x36, 0x12, 0xfe, 0x96, 0x5b, 0x12, 0x12, 0x5b, 0x01, 0x6a, 0x00, 0xff, 0xfe, // .[.6...[..[.j... + 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x00, 0x00, // ^.....a...a..... + 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x0b, 0x01, 0xd8, 0x02, 0x18, // ................ + 0x00, 0x00, 0x00, 0x20, 0x04, 0x12, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, 0x01, 0x0e, // ... ..... $..... + 0x01, 0x07, 0x32, 0x3e, 0x01, 0x37, 0x36, 0x37, 0x36, 0x37, 0x36, 0x17, 0x26, 0x36, 0x37, 0x3e, // ..2>.767676.&67> + 0x01, 0x3f, 0x01, 0x06, 0x26, 0x27, 0x14, 0x07, 0x34, 0x26, 0x06, 0x27, 0x2e, 0x02, 0x27, 0x2e, // .?..&'..4&.'..'. + 0x01, 0x27, 0x2e, 0x03, 0x22, 0x0e, 0x01, 0x23, 0x26, 0x0e, 0x02, 0x07, 0x0e, 0x01, 0x07, 0x36, // .'.."..#&......6 + 0x27, 0x26, 0x07, 0x36, 0x26, 0x27, 0x33, 0x2e, 0x02, 0x27, 0x2e, 0x01, 0x07, 0x06, 0x1e, 0x01, // '&.6&'3..'...... + 0x15, 0x16, 0x06, 0x15, 0x14, 0x16, 0x07, 0x0e, 0x01, 0x07, 0x06, 0x16, 0x17, 0x16, 0x0e, 0x02, // ................ + 0x0f, 0x01, 0x06, 0x26, 0x27, 0x26, 0x27, 0x26, 0x07, 0x26, 0x27, 0x26, 0x07, 0x36, 0x27, 0x26, // ...&'&'&.&'&.6'& + 0x07, 0x3e, 0x01, 0x35, 0x36, 0x37, 0x3e, 0x02, 0x23, 0x16, 0x37, 0x3e, 0x01, 0x37, 0x36, 0x1e, // .>.567>.#.7>.76. + 0x01, 0x33, 0x16, 0x36, 0x27, 0x16, 0x27, 0x26, 0x27, 0x26, 0x07, 0x06, 0x17, 0x26, 0x0e, 0x01, // .3.6'.'&'&...&.. + 0x27, 0x2e, 0x01, 0x27, 0x22, 0x07, 0x36, 0x26, 0x27, 0x36, 0x27, 0x2e, 0x01, 0x07, 0x0e, 0x01, // '..'".6&'6'..... + 0x1e, 0x02, 0x17, 0x16, 0x07, 0x0e, 0x02, 0x07, 0x06, 0x16, 0x07, 0x2e, 0x01, 0x27, 0x16, 0x2f, // .............'./ + 0x01, 0x22, 0x06, 0x26, 0x27, 0x26, 0x37, 0x36, 0x17, 0x2e, 0x01, 0x27, 0x06, 0x07, 0x16, 0x37, // .".&'&76...'...7 + 0x3e, 0x01, 0x37, 0x36, 0x17, 0x37, 0x16, 0x17, 0x26, 0x07, 0x06, 0x07, 0x16, 0x07, 0x2e, 0x02, // >.76.7..&....... + 0x27, 0x22, 0x07, 0x06, 0x07, 0x16, 0x17, 0x1e, 0x02, 0x37, 0x16, 0x07, 0x36, 0x17, 0x16, 0x17, // '".......7..6... + 0x16, 0x07, 0x2e, 0x01, 0x07, 0x06, 0x16, 0x37, 0x22, 0x06, 0x14, 0x07, 0x17, 0x06, 0x16, 0x37, // .......7"......7 + 0x06, 0x17, 0x16, 0x17, 0x1e, 0x02, 0x17, 0x1e, 0x01, 0x17, 0x06, 0x16, 0x07, 0x22, 0x06, 0x23, // .............".# + 0x1e, 0x01, 0x17, 0x1e, 0x02, 0x37, 0x36, 0x27, 0x26, 0x27, 0x2e, 0x01, 0x27, 0x32, 0x1e, 0x02, // .....76'&'..'2.. + 0x07, 0x06, 0x1e, 0x02, 0x17, 0x1e, 0x01, 0x23, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x17, 0x1e, 0x03, // .......#2....... + 0x17, 0x1e, 0x01, 0x17, 0x16, 0x32, 0x36, 0x37, 0x36, 0x16, 0x17, 0x16, 0x37, 0x06, 0x1e, 0x02, // .....2676...7... + 0x17, 0x1e, 0x01, 0x17, 0x36, 0x37, 0x06, 0x16, 0x37, 0x36, 0x35, 0x06, 0x27, 0x34, 0x2e, 0x02, // ....67..765.'4.. + 0x36, 0x33, 0x32, 0x36, 0x26, 0x27, 0x2e, 0x01, 0x27, 0x06, 0x26, 0x27, 0x14, 0x06, 0x15, 0x22, // 6326&'..'.&'..." + 0x27, 0x3e, 0x01, 0x37, 0x3e, 0x03, 0x26, 0x07, 0x06, 0x07, 0x0e, 0x02, 0x07, 0x06, 0x26, 0x27, // '>.7>.&.......&' + 0x2e, 0x01, 0x35, 0x34, 0x3e, 0x01, 0x27, 0x3e, 0x01, 0x37, 0x3e, 0x01, 0x16, 0x36, 0x37, 0x26, // ..54>.'>.7>..67& + 0x27, 0x26, 0x23, 0x16, 0x36, 0x17, 0x16, 0x37, 0x34, 0x26, 0x37, 0x16, 0x37, 0x1e, 0x01, 0x17, // '&#.6..74&7.7... + 0x1e, 0x02, 0x36, 0x37, 0x16, 0x17, 0x16, 0x17, 0x16, 0x3e, 0x01, 0x26, 0x2f, 0x01, 0x34, 0x35, // ..67.....>.&/.45 + 0x27, 0x2e, 0x01, 0x36, 0x37, 0x3e, 0x02, 0x37, 0x36, 0x27, 0x32, 0x37, 0x22, 0x2e, 0x01, 0x23, // '..67>.76'27"..# + 0x36, 0x27, 0x3e, 0x01, 0x37, 0x16, 0x37, 0x36, 0x27, 0x3e, 0x01, 0x37, 0x16, 0x36, 0x34, 0x37, // 6'>.7.76'>.7.647 + 0x3e, 0x01, 0x3f, 0x01, 0x36, 0x23, 0x16, 0x37, 0x36, 0x27, 0x36, 0x26, 0x27, 0x36, 0x16, 0x37, // >.?.6#.76'6&'6.7 + 0x36, 0x27, 0x26, 0x03, 0x36, 0x37, 0x2e, 0x01, 0x27, 0x26, 0x27, 0x36, 0x2e, 0x02, 0x27, 0x2e, // 6'&.67..'&'6..'. + 0x03, 0x06, 0x23, 0x07, 0x0e, 0x03, 0x17, 0x26, 0x27, 0x2e, 0x02, 0x06, 0x07, 0x0e, 0x01, 0x07, // ..#....&'....... + 0x26, 0x36, 0x27, 0x26, 0x0e, 0x04, 0x07, 0x0e, 0x01, 0x07, 0x2e, 0x01, 0x35, 0x1e, 0x01, 0x17, // &6'&........5... + 0x16, 0x07, 0x06, 0x07, 0x06, 0x17, 0x14, 0x06, 0x17, 0x14, 0x02, 0x2f, 0x01, 0xa2, 0x01, 0x61, // .........../...a + 0xce, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x03, 0x44, 0x02, 0x0f, 0x06, 0x02, // .....^.....D.... + 0x05, 0x05, 0x01, 0x06, 0x10, 0x0e, 0x26, 0x22, 0x11, 0x02, 0x17, 0x03, 0x03, 0x18, 0x03, 0x02, // ......&"........ + 0x0c, 0x0b, 0x01, 0x06, 0x09, 0x0e, 0x02, 0x0a, 0x0a, 0x06, 0x01, 0x02, 0x0f, 0x02, 0x01, 0x03, // ................ + 0x03, 0x05, 0x06, 0x08, 0x07, 0x01, 0x03, 0x06, 0x03, 0x06, 0x02, 0x03, 0x0b, 0x03, 0x0f, 0x10, // ................ + 0x0a, 0x06, 0x09, 0x03, 0x07, 0x05, 0x01, 0x0f, 0x14, 0x03, 0x08, 0x34, 0x07, 0x05, 0x01, 0x07, // ...........4.... + 0x01, 0x0d, 0x1c, 0x04, 0x03, 0x1a, 0x03, 0x05, 0x07, 0x07, 0x02, 0x01, 0x06, 0x05, 0x04, 0x03, // ................ + 0x0b, 0x13, 0x04, 0x07, 0x09, 0x17, 0x06, 0x05, 0x24, 0x19, 0x21, 0x06, 0x06, 0x07, 0x0c, 0x03, // ........$.!..... + 0x02, 0x03, 0x09, 0x01, 0x0c, 0x07, 0x03, 0x23, 0x0f, 0x05, 0x0d, 0x04, 0x09, 0x0a, 0x13, 0x05, // .......#........ + 0x0e, 0x03, 0x09, 0x0c, 0x09, 0x04, 0x04, 0x0c, 0x0f, 0x08, 0x0a, 0x01, 0x11, 0x10, 0x08, 0x01, // ................ + 0x09, 0x05, 0x08, 0x08, 0x03, 0x1c, 0x0a, 0x13, 0x1b, 0x07, 0x1b, 0x06, 0x05, 0x01, 0x0b, 0x0a, // ................ + 0x0d, 0x02, 0x0e, 0x06, 0x02, 0x0d, 0x0a, 0x01, 0x03, 0x06, 0x05, 0x05, 0x08, 0x03, 0x07, 0x20, // ............... + 0x0a, 0x04, 0x18, 0x11, 0x05, 0x04, 0x04, 0x01, 0x03, 0x04, 0x0e, 0x03, 0x2e, 0x30, 0x06, 0x06, // .............0.. + 0x05, 0x10, 0x02, 0x22, 0x08, 0x05, 0x0e, 0x06, 0x07, 0x17, 0x14, 0x02, 0x07, 0x02, 0x04, 0x0f, // ..."............ + 0x0e, 0x08, 0x10, 0x06, 0x92, 0x59, 0x07, 0x05, 0x04, 0x02, 0x03, 0x0a, 0x09, 0x06, 0x01, 0x2b, // .....Y.........+ + 0x13, 0x02, 0x03, 0x0d, 0x01, 0x10, 0x01, 0x03, 0x07, 0x07, 0x07, 0x05, 0x01, 0x02, 0x03, 0x11, // ................ + 0x0d, 0x0d, 0x21, 0x06, 0x02, 0x03, 0x12, 0x0c, 0x04, 0x04, 0x0c, 0x08, 0x02, 0x17, 0x01, 0x01, // ..!............. + 0x03, 0x01, 0x03, 0x19, 0x03, 0x01, 0x02, 0x04, 0x06, 0x02, 0x1a, 0x0f, 0x02, 0x03, 0x05, 0x02, // ................ + 0x02, 0x08, 0x09, 0x06, 0x01, 0x03, 0x0a, 0x0e, 0x14, 0x02, 0x06, 0x10, 0x08, 0x09, 0x16, 0x06, // ................ + 0x05, 0x06, 0x02, 0x02, 0x0d, 0x0c, 0x14, 0x03, 0x05, 0x1b, 0x08, 0x0a, 0x0c, 0x11, 0x05, 0x0f, // ................ + 0x1c, 0x07, 0x24, 0x13, 0x02, 0x05, 0x0b, 0x07, 0x02, 0x05, 0x1a, 0x05, 0x06, 0x01, 0x03, 0x14, // ..$............. + 0x08, 0x0e, 0x1f, 0x12, 0x05, 0x03, 0x02, 0x02, 0x04, 0x09, 0x02, 0x06, 0x01, 0x01, 0x14, 0x02, // ................ + 0x05, 0x16, 0x05, 0x03, 0x0d, 0x02, 0x01, 0x03, 0x02, 0x01, 0x09, 0x06, 0x02, 0x0b, 0x0c, 0x13, // ................ + 0x07, 0x01, 0x04, 0x06, 0x06, 0x07, 0x22, 0x07, 0x0d, 0x13, 0x05, 0x01, 0x06, 0x03, 0x0c, 0x04, // ......"......... + 0x02, 0x05, 0x04, 0x04, 0x01, 0x01, 0x03, 0x03, 0x01, 0x07, 0x2b, 0x06, 0x0f, 0x07, 0x05, 0x02, // ..........+..... + 0x05, 0x18, 0x03, 0x19, 0x05, 0x03, 0x08, 0x03, 0x07, 0x05, 0x0a, 0x02, 0x0b, 0x08, 0x07, 0x08, // ................ + 0x01, 0x01, 0x01, 0x01, 0x01, 0x0f, 0x07, 0x0a, 0x0a, 0x01, 0x0e, 0x11, 0x04, 0x15, 0x06, 0x07, // ................ + 0x04, 0x01, 0x08, 0x07, 0x01, 0x09, 0x07, 0x05, 0x05, 0x05, 0x09, 0x0c, 0x08, 0x07, 0x05, 0x1f, // ................ + 0x03, 0x07, 0x02, 0x03, 0x04, 0x16, 0x02, 0x11, 0x03, 0x03, 0x12, 0x0d, 0x0a, 0x10, 0x03, 0x0c, // ................ + 0x09, 0x03, 0x11, 0x02, 0x0f, 0x16, 0x11, 0xbd, 0xce, 0x91, 0x03, 0x13, 0x03, 0x12, 0x06, 0x01, // ................ + 0x07, 0x09, 0x10, 0x03, 0x02, 0x0a, 0x04, 0x0b, 0x06, 0x07, 0x03, 0x03, 0x05, 0x06, 0x02, 0x01, // ................ + 0x15, 0x0f, 0x05, 0x0c, 0x09, 0x0b, 0x06, 0x05, 0x02, 0x01, 0x07, 0x0e, 0x05, 0x03, 0x0f, 0x09, // ................ + 0x0e, 0x04, 0x0d, 0x02, 0x03, 0x06, 0x02, 0x02, 0x13, 0x02, 0x04, 0x03, 0x07, 0x13, 0x1b, 0x02, // ................ + 0x04, 0x10, 0x10, 0x01, 0x05, 0x80, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, // ..........^..... + 0x61, 0x01, 0xa2, 0x01, 0x61, 0xfe, 0xc5, 0x01, 0x11, 0x01, 0x0a, 0x0c, 0x01, 0x07, 0x08, 0x06, // a...a........... + 0x06, 0x08, 0x13, 0x02, 0x16, 0x01, 0x02, 0x05, 0x05, 0x16, 0x01, 0x10, 0x0d, 0x02, 0x06, 0x07, // ................ + 0x02, 0x04, 0x01, 0x03, 0x09, 0x18, 0x03, 0x05, 0x0c, 0x04, 0x02, 0x07, 0x06, 0x05, 0x0a, 0x0a, // ................ + 0x02, 0x01, 0x01, 0x05, 0x01, 0x02, 0x02, 0x01, 0x05, 0x06, 0x04, 0x01, 0x04, 0x10, 0x06, 0x04, // ................ + 0x09, 0x08, 0x02, 0x05, 0x09, 0x04, 0x06, 0x09, 0x13, 0x03, 0x06, 0x0e, 0x05, 0x07, 0x11, 0x0d, // ................ + 0x08, 0x10, 0x04, 0x08, 0x15, 0x06, 0x02, 0x04, 0x05, 0x03, 0x02, 0x02, 0x05, 0x16, 0x0f, 0x19, // ................ + 0x05, 0x08, 0x09, 0x0d, 0x0d, 0x09, 0x05, 0x01, 0x0e, 0x0f, 0x03, 0x06, 0x17, 0x02, 0x0d, 0x0a, // ................ + 0x01, 0x0f, 0x0c, 0x04, 0x0f, 0x05, 0x18, 0x05, 0x06, 0x01, 0x0a, 0x01, 0x18, 0x08, 0x01, 0x12, // ................ + 0x07, 0x02, 0x04, 0x09, 0x04, 0x04, 0x01, 0x17, 0x0c, 0x0b, 0x01, 0x19, 0x01, 0x0f, 0x08, 0x0e, // ................ + 0x01, 0x0c, 0x0f, 0x04, 0x02, 0x05, 0x07, 0x09, 0x07, 0x04, 0x04, 0x01, 0x0a, 0x04, 0x01, 0x05, // ................ + 0x04, 0x02, 0x04, 0x14, 0x04, 0x05, 0x19, 0x04, 0x09, 0x03, 0x01, 0x04, 0x02, 0x07, 0x08, 0x0c, // ................ + 0x04, 0x02, 0x03, 0x0d, 0x02, 0x0f, 0x1a, 0x01, 0x02, 0x02, 0x09, 0x01, 0x0e, 0x07, 0x05, 0x10, // ................ + 0x09, 0x04, 0x03, 0x06, 0x06, 0x0c, 0x06, 0x03, 0x0e, 0x08, 0x01, 0x01, 0x50, 0x8e, 0x07, 0x01, // ............P... + 0x01, 0x10, 0x06, 0x06, 0x08, 0x0b, 0x01, 0x1c, 0x11, 0x04, 0x0b, 0x07, 0x02, 0x0e, 0x03, 0x05, // ................ + 0x1b, 0x01, 0x20, 0x27, 0x04, 0x01, 0x0c, 0x2d, 0x03, 0x03, 0x28, 0x08, 0x01, 0x02, 0x0b, 0x09, // .. '...-..(..... + 0x06, 0x05, 0x23, 0x06, 0x06, 0x1c, 0x09, 0x02, 0x07, 0x0e, 0x06, 0x03, 0x0e, 0x08, 0x02, 0x14, // ..#............. + 0x2a, 0x19, 0x04, 0x05, 0x15, 0x04, 0x03, 0x04, 0x04, 0x01, 0x07, 0x15, 0x10, 0x16, 0x02, 0x06, // *............... + 0x1b, 0x15, 0x09, 0x08, 0x24, 0x06, 0x07, 0x0d, 0x06, 0x0a, 0x02, 0x02, 0x11, 0x03, 0x04, 0x05, // ....$........... + 0x01, 0x02, 0x22, 0x04, 0x13, 0x08, 0x01, 0x0d, 0x12, 0x0b, 0x03, 0x06, 0x12, 0x06, 0x04, 0x05, // .."............. + 0x08, 0x18, 0x02, 0x03, 0x1d, 0x0f, 0x21, 0x01, 0x09, 0x08, 0x09, 0x06, 0x07, 0x12, 0x04, 0x08, // ......!......... + 0x18, 0x03, 0x09, 0x02, 0x08, 0x01, 0x09, 0x02, 0x01, 0x03, 0x1d, 0x08, 0x04, 0x10, 0x0d, 0x0c, // ................ + 0x07, 0x01, 0x01, 0x13, 0x03, 0x0f, 0x08, 0x03, 0x03, 0x02, 0x04, 0x08, 0x2a, 0x10, 0x0a, 0x21, // ............*..! + 0x11, 0x10, 0x02, 0x0f, 0x03, 0x01, 0x01, 0x01, 0x04, 0x04, 0x01, 0x02, 0x03, 0x03, 0x09, 0x06, // ................ + 0x0b, 0x0d, 0x01, 0x11, 0x05, 0x1b, 0x12, 0x03, 0x04, 0x03, 0x02, 0x07, 0x02, 0x03, 0x05, 0x0e, // ................ + 0x0a, 0x28, 0x04, 0x03, 0x02, 0x11, 0x0b, 0x07, 0x08, 0x09, 0x09, 0x08, 0x03, 0x12, 0x13, 0x09, // .(.............. + 0x01, 0x05, 0x08, 0x04, 0x13, 0x10, 0x09, 0x06, 0x04, 0x05, 0x0b, 0x03, 0x10, 0x02, 0x0c, 0x0a, // ................ + 0x08, 0x08, 0x07, 0x07, 0x06, 0x02, 0x08, 0x10, 0x04, 0x05, 0x08, 0x01, 0x0b, 0x04, 0x02, 0x0d, // ................ + 0x0b, 0x09, 0x06, 0x07, 0x02, 0x01, 0x01, 0x02, 0x0a, 0x06, 0x05, 0xfc, 0x82, 0x24, 0x99, 0x03, // .............$.. + 0x03, 0x02, 0x07, 0x01, 0x07, 0x0c, 0x06, 0x0a, 0x02, 0x02, 0x08, 0x03, 0x06, 0x02, 0x01, 0x01, // ................ + 0x03, 0x03, 0x03, 0x01, 0x11, 0x05, 0x01, 0x09, 0x05, 0x02, 0x06, 0x05, 0x14, 0x03, 0x05, 0x19, // ................ + 0x06, 0x06, 0x03, 0x06, 0x0b, 0x02, 0x09, 0x03, 0x04, 0x10, 0x03, 0x04, 0x05, 0x03, 0x0a, 0x32, // ...............2 + 0x0d, 0x1f, 0x11, 0x19, 0x0f, 0x16, 0x04, 0x07, 0x1b, 0x08, 0x06, 0x00, 0x00, 0x03, 0x00, 0x15, // ................ + 0xff, 0x15, 0x06, 0x7e, 0x05, 0x80, 0x00, 0x07, 0x00, 0x15, 0x00, 0x2f, 0x00, 0x00, 0x24, 0x34, // ...~......./..$4 + 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x09, 0x01, 0x06, 0x23, 0x22, 0x2f, 0x01, 0x26, 0x35, 0x34, // &"...2...#"/.&54 + 0x37, 0x01, 0x1e, 0x01, 0x01, 0x14, 0x07, 0x0e, 0x01, 0x23, 0x22, 0x00, 0x10, 0x00, 0x33, 0x32, // 7........#"...32 + 0x16, 0x17, 0x16, 0x14, 0x07, 0x05, 0x15, 0x17, 0x3e, 0x02, 0x33, 0x32, 0x16, 0x01, 0x80, 0x26, // ........>.32...& + 0x34, 0x26, 0x26, 0x34, 0x02, 0xaa, 0xfd, 0x56, 0x25, 0x35, 0x34, 0x27, 0x6a, 0x26, 0x26, 0x02, // 4&&4...V%54'j&&. + 0xa9, 0x27, 0x97, 0x02, 0xdc, 0x17, 0x2f, 0xeb, 0x8d, 0xb9, 0xfe, 0xf9, 0x01, 0x07, 0xb9, 0x3a, // .'..../........: + 0x7f, 0x2c, 0x10, 0x10, 0xfe, 0xdb, 0xc1, 0x05, 0x94, 0x7b, 0x09, 0x0f, 0x11, 0x26, 0x34, 0x26, // .,.......{...&4& + 0x26, 0x34, 0x26, 0x01, 0xe4, 0xfd, 0x56, 0x25, 0x25, 0x6c, 0x24, 0x36, 0x35, 0x26, 0x02, 0xa9, // &4&...V%%l$65&.. + 0x62, 0x97, 0x01, 0x8c, 0x27, 0x43, 0x86, 0xa7, 0x01, 0x07, 0x01, 0x72, 0x01, 0x07, 0x21, 0x1e, // b...'C.....r..!. + 0x0b, 0x22, 0x0b, 0xa9, 0xe0, 0x6b, 0x03, 0x5b, 0x47, 0x14, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, // ."...k.[G....... + 0x00, 0x00, 0x07, 0x00, 0x05, 0x80, 0x00, 0x03, 0x00, 0x07, 0x00, 0x0b, 0x00, 0x1b, 0x00, 0x2b, // ...............+ + 0x00, 0x3b, 0x00, 0x00, 0x25, 0x21, 0x35, 0x21, 0x01, 0x21, 0x35, 0x21, 0x01, 0x21, 0x35, 0x21, // .;..%!5!.!5!.!5! + 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // ....#!"&5.463!2. + 0x19, 0x01, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // ....#!"&5.463!2. + 0x19, 0x01, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // ....#!"&5.463!2. + 0x04, 0x00, 0x02, 0x80, 0xfd, 0x80, 0xfe, 0x80, 0x04, 0x00, 0xfc, 0x00, 0x02, 0x80, 0x01, 0x80, // ................ + 0xfe, 0x80, 0x02, 0x00, 0x26, 0x1a, 0xf9, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x06, 0x80, 0x1a, 0x26, // ....&....&&....& + 0x26, 0x1a, 0xf9, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x06, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0xf9, 0x80, // &....&&....&&... + 0x1a, 0x26, 0x26, 0x1a, 0x06, 0x80, 0x1a, 0x26, 0x80, 0x80, 0x01, 0x80, 0x80, 0x01, 0x80, 0x80, // .&&....&........ + 0xfc, 0x40, 0xff, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0x00, 0x1a, 0x26, 0x26, 0x01, 0xe6, 0xff, // .@...&&....&&... + 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0x00, 0x1a, 0x26, 0x26, 0x01, 0xe6, 0xff, 0x00, 0x1a, 0x26, // ..&&....&&.....& + 0x26, 0x1a, 0x01, 0x00, 0x1a, 0x26, 0x26, 0x00, 0x00, 0x01, 0x00, 0x05, 0xff, 0x80, 0x05, 0x7b, // &....&&........{ + 0x05, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, 0x16, 0x07, 0x01, 0x11, 0x14, 0x07, 0x06, 0x23, 0x22, // ..............#" + 0x27, 0x01, 0x26, 0x35, 0x11, 0x01, 0x26, 0x37, 0x36, 0x33, 0x21, 0x32, 0x05, 0x7b, 0x11, 0x1f, // '.&5..&763!2.{.. + 0xfe, 0x13, 0x27, 0x0d, 0x0c, 0x1b, 0x12, 0xff, 0x00, 0x13, 0xfe, 0x13, 0x1f, 0x11, 0x11, 0x2a, // ..'............* + 0x05, 0x00, 0x2a, 0x04, 0xd9, 0x29, 0x1d, 0xfe, 0x13, 0xfd, 0x1a, 0x2a, 0x11, 0x05, 0x13, 0x01, // ..*..).....*.... + 0x00, 0x13, 0x1a, 0x01, 0xe6, 0x01, 0xed, 0x1d, 0x29, 0x27, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, // ........)'...... + 0x00, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x03, 0x00, 0x17, 0x00, 0x1b, 0x00, 0x2f, 0x00, 0x00, // ............./.. + 0x01, 0x21, 0x35, 0x21, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x21, 0x15, // .!5!....#!"&5.!. + 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x3d, 0x01, 0x23, 0x15, 0x21, 0x35, 0x01, 0x11, 0x21, 0x11, // ..3!26=.#.!5..!. + 0x34, 0x36, 0x33, 0x21, 0x35, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x1d, 0x01, 0x21, 0x32, 0x16, // 463!5463!2...!2. + 0x02, 0x80, 0x02, 0x00, 0xfe, 0x00, 0x04, 0x80, 0x5e, 0x42, 0xfa, 0x40, 0x42, 0x5e, 0x02, 0xa0, // ........^B.@B^.. + 0x26, 0x1a, 0x01, 0x40, 0x1a, 0x26, 0x60, 0xff, 0x00, 0x04, 0x00, 0xf9, 0x00, 0x5e, 0x42, 0x01, // &..@.&`......^B. + 0x60, 0x38, 0x28, 0x02, 0x40, 0x28, 0x38, 0x01, 0x60, 0x42, 0x5e, 0x05, 0x00, 0x80, 0xfd, 0x00, // `8(.@(8.`B^..... + 0xfe, 0x20, 0x42, 0x5e, 0x5e, 0x42, 0x01, 0xe0, 0xa0, 0x1a, 0x26, 0x26, 0x1a, 0xa0, 0x80, 0x80, // . B^^B....&&.... + 0x01, 0xe0, 0xfe, 0x80, 0x01, 0x80, 0x42, 0x5e, 0xa0, 0x28, 0x38, 0x38, 0x28, 0xa0, 0x5e, 0x00, // ......B^.(88(.^. + 0x00, 0x01, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x47, 0x00, 0x00, 0x09, 0x02, // ...........G.... + 0x37, 0x36, 0x17, 0x16, 0x15, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x27, 0x26, 0x3f, 0x01, 0x09, // 76......#!"'&?.. + 0x01, 0x17, 0x16, 0x07, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x37, 0x36, 0x1f, 0x01, // .....#!"&5.476.. + 0x09, 0x01, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x17, // ....#"'&5.463!2. + 0x16, 0x0f, 0x01, 0x09, 0x01, 0x27, 0x26, 0x37, 0x36, 0x33, 0x21, 0x32, 0x16, 0x15, 0x11, 0x14, // .....'&763!2.... + 0x07, 0x06, 0x23, 0x22, 0x27, 0x05, 0x03, 0xfe, 0x9d, 0x01, 0x63, 0x90, 0x1d, 0x29, 0x27, 0x26, // ..#"'.....c..)'& + 0x1a, 0xfe, 0x40, 0x2a, 0x11, 0x11, 0x1f, 0x90, 0xfe, 0x9d, 0xfe, 0x9d, 0x90, 0x1f, 0x11, 0x11, // ..@*............ + 0x2a, 0xfe, 0x40, 0x1a, 0x26, 0x28, 0x27, 0x1e, 0x90, 0x01, 0x63, 0xfe, 0x9d, 0x90, 0x13, 0x1a, // *.@.&('...c..... + 0x0c, 0x0c, 0x28, 0x26, 0x1a, 0x01, 0xc0, 0x2a, 0x11, 0x11, 0x1f, 0x90, 0x01, 0x63, 0x01, 0x63, // ..(&...*.....c.c + 0x90, 0x1f, 0x11, 0x11, 0x2a, 0x01, 0xc0, 0x1a, 0x26, 0x27, 0x0d, 0x0c, 0x1a, 0x13, 0x03, 0xe3, // ....*...&'...... + 0xfe, 0x9d, 0xfe, 0x9d, 0x90, 0x1f, 0x11, 0x11, 0x2a, 0xfe, 0x40, 0x1a, 0x26, 0x28, 0x27, 0x1e, // ........*.@.&('. + 0x90, 0x01, 0x63, 0xfe, 0x9d, 0x90, 0x1e, 0x27, 0x28, 0x26, 0x1a, 0x01, 0xc0, 0x2a, 0x11, 0x11, // ..c....'(&...*.. + 0x1f, 0x90, 0x01, 0x63, 0x01, 0x63, 0x90, 0x13, 0x05, 0x11, 0x2a, 0x01, 0xc0, 0x1a, 0x26, 0x28, // ...c.c....*...&( + 0x27, 0x1e, 0x90, 0xfe, 0x9d, 0x01, 0x63, 0x90, 0x1e, 0x27, 0x28, 0x26, 0x1a, 0xfe, 0x40, 0x2a, // '.....c..'(&..@* + 0x11, 0x05, 0x13, 0x00, 0x00, 0x06, 0x00, 0x00, 0xff, 0x00, 0x07, 0x80, 0x06, 0x00, 0x00, 0x11, // ................ + 0x00, 0x31, 0x00, 0x39, 0x00, 0x41, 0x00, 0x53, 0x00, 0x5b, 0x00, 0x00, 0x01, 0x06, 0x07, 0x23, // .1.9.A.S.[.....# + 0x22, 0x26, 0x35, 0x10, 0x33, 0x32, 0x1e, 0x01, 0x33, 0x32, 0x37, 0x06, 0x15, 0x14, 0x01, 0x14, // "&5.32..327..... + 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x34, 0x3e, 0x05, 0x33, 0x32, 0x1e, 0x02, 0x32, 0x3e, 0x02, // .#!"&54>.32..2>. + 0x33, 0x32, 0x1e, 0x05, 0x00, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x00, 0x10, 0x06, 0x20, // 32....."&462... + 0x26, 0x10, 0x36, 0x20, 0x01, 0x14, 0x06, 0x2b, 0x01, 0x26, 0x27, 0x36, 0x35, 0x34, 0x27, 0x16, // &.6 ...+.&'654'. + 0x33, 0x32, 0x3e, 0x01, 0x33, 0x32, 0x02, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x02, 0x51, // 32>.32..."&462.Q + 0xa2, 0x67, 0x86, 0x52, 0x70, 0x7c, 0x06, 0x4b, 0x78, 0x3b, 0x43, 0x42, 0x05, 0x04, 0x80, 0x92, // .g.Rp|.Kx;CB.... + 0x79, 0xfc, 0x96, 0x79, 0x92, 0x07, 0x15, 0x20, 0x36, 0x46, 0x65, 0x3d, 0x0a, 0x42, 0x50, 0x86, // y..y... 6Fe=.BP. + 0x88, 0x86, 0x50, 0x42, 0x0a, 0x3d, 0x65, 0x46, 0x36, 0x20, 0x15, 0x07, 0xfc, 0x00, 0x96, 0xd4, // ..PB.=eF6 ...... + 0x96, 0x96, 0xd4, 0x03, 0x56, 0xe1, 0xfe, 0xc2, 0xe1, 0xe1, 0x01, 0x3e, 0x03, 0x21, 0x70, 0x52, // ....V......>.!pR + 0x86, 0x67, 0xa2, 0x51, 0x05, 0x42, 0x43, 0x3b, 0x78, 0x4b, 0x06, 0x7c, 0x80, 0x96, 0xd4, 0x96, // .g.Q.BC;xK.|.... + 0x96, 0xd4, 0x02, 0x80, 0x05, 0x7b, 0x51, 0x4e, 0x01, 0x61, 0x2a, 0x2b, 0x17, 0x25, 0x1d, 0x8b, // .....{QN.a*+.%.. + 0xfd, 0x0e, 0x78, 0x8b, 0x8b, 0x78, 0x35, 0x65, 0x75, 0x64, 0x5f, 0x43, 0x28, 0x2b, 0x35, 0x2b, // ..x..x5eud_C(+5+ + 0x2b, 0x35, 0x2b, 0x28, 0x43, 0x5f, 0x64, 0x75, 0x65, 0x05, 0x32, 0xd4, 0x96, 0x96, 0xd4, 0x96, // +5+(C_due.2..... + 0xfe, 0x1f, 0xfe, 0xc2, 0xe1, 0xe1, 0x01, 0x3e, 0xe1, 0xfd, 0x9f, 0x4e, 0x51, 0x7b, 0x05, 0x75, // .......>...NQ{.u + 0x8b, 0x1d, 0x25, 0x17, 0x2b, 0x2a, 0x01, 0x6a, 0xd4, 0x96, 0x96, 0xd4, 0x96, 0x00, 0x00, 0x00, // ..%.+*.j........ + 0x00, 0x03, 0x00, 0x10, 0xff, 0x90, 0x06, 0x70, 0x05, 0xf0, 0x00, 0x21, 0x00, 0x43, 0x00, 0x69, // .......p...!.C.i + 0x00, 0x00, 0x01, 0x34, 0x2f, 0x01, 0x26, 0x23, 0x22, 0x07, 0x1e, 0x04, 0x15, 0x14, 0x06, 0x23, // ...4/.&#"......# + 0x22, 0x2e, 0x03, 0x27, 0x06, 0x15, 0x14, 0x1f, 0x01, 0x16, 0x33, 0x32, 0x3f, 0x01, 0x36, 0x01, // "..'......32?.6. + 0x34, 0x2f, 0x01, 0x26, 0x23, 0x22, 0x0f, 0x01, 0x06, 0x15, 0x14, 0x1f, 0x01, 0x16, 0x33, 0x32, // 4/.&#"........32 + 0x37, 0x2e, 0x04, 0x35, 0x34, 0x36, 0x33, 0x32, 0x1e, 0x03, 0x17, 0x36, 0x00, 0x14, 0x0f, 0x01, // 7..54632...6.... + 0x06, 0x23, 0x22, 0x2f, 0x01, 0x26, 0x35, 0x34, 0x37, 0x27, 0x06, 0x23, 0x22, 0x2f, 0x01, 0x26, // .#"/.&547'.#"/.& + 0x34, 0x3f, 0x01, 0x36, 0x33, 0x32, 0x1f, 0x01, 0x16, 0x15, 0x14, 0x07, 0x17, 0x36, 0x33, 0x32, // 4?.632.......632 + 0x1f, 0x01, 0x05, 0xb0, 0x1c, 0xd0, 0x1c, 0x28, 0x2a, 0x1e, 0x03, 0x20, 0x0b, 0x13, 0x07, 0x38, // .......(*.. ...8 + 0x28, 0x0f, 0x19, 0x1a, 0x0c, 0x1f, 0x03, 0x21, 0x1c, 0xce, 0x1b, 0x29, 0x28, 0x1c, 0x93, 0x1c, // (......!...)(... + 0xfd, 0x41, 0x1c, 0xce, 0x1c, 0x28, 0x27, 0x1d, 0x93, 0x1c, 0x1c, 0xd0, 0x1b, 0x29, 0x2a, 0x1e, // .A...('......)*. + 0x03, 0x20, 0x0b, 0x13, 0x07, 0x38, 0x28, 0x0f, 0x19, 0x1a, 0x0c, 0x1f, 0x03, 0x21, 0x03, 0x7f, // . ...8(......!.. + 0x55, 0x93, 0x53, 0x78, 0x79, 0x53, 0xce, 0x53, 0x58, 0x58, 0x56, 0x7a, 0x78, 0x54, 0xd0, 0x54, // U.SxyS.SXXVzxT.T + 0x55, 0x93, 0x53, 0x78, 0x79, 0x53, 0xce, 0x53, 0x58, 0x58, 0x56, 0x7a, 0x78, 0x54, 0xd0, 0x01, // U.SxyS.SXXVzxT.. + 0x40, 0x28, 0x1c, 0xd0, 0x1c, 0x20, 0x03, 0x1f, 0x0c, 0x1a, 0x19, 0x0f, 0x28, 0x38, 0x07, 0x13, // @(... ......(8.. + 0x0b, 0x20, 0x03, 0x1f, 0x2a, 0x28, 0x1c, 0xcf, 0x1b, 0x1a, 0x92, 0x1c, 0x02, 0xe8, 0x28, 0x1c, // . ..*(........(. + 0xcf, 0x1c, 0x1b, 0x92, 0x1c, 0x27, 0x28, 0x1c, 0xd0, 0x1b, 0x1f, 0x03, 0x1f, 0x0c, 0x1a, 0x19, // .....'(......... + 0x0f, 0x28, 0x38, 0x07, 0x13, 0x0b, 0x20, 0x03, 0x1f, 0xfd, 0xe1, 0xf0, 0x53, 0x92, 0x53, 0x55, // .(8... .....S.SU + 0xcf, 0x53, 0x78, 0x7b, 0x56, 0x58, 0x58, 0x54, 0xd0, 0x54, 0xf0, 0x53, 0x92, 0x53, 0x55, 0xcf, // .Sx{VXXT.T.S.SU. + 0x53, 0x78, 0x7b, 0x56, 0x58, 0x58, 0x54, 0xd0, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, // Sx{VXXT......... + 0x05, 0x80, 0x00, 0x1b, 0x00, 0x00, 0x01, 0x14, 0x06, 0x23, 0x21, 0x22, 0x00, 0x35, 0x34, 0x36, // .........#!".546 + 0x37, 0x26, 0x35, 0x34, 0x00, 0x33, 0x32, 0x04, 0x17, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x07, // 7&54.32..632.... + 0x1e, 0x01, 0x07, 0x80, 0xe1, 0x9f, 0xfb, 0xc0, 0xb9, 0xfe, 0xf9, 0x8e, 0x74, 0x02, 0x01, 0x2c, // ............t.., + 0xd4, 0x9e, 0x01, 0x01, 0x3b, 0x46, 0x60, 0x6a, 0x96, 0x29, 0x81, 0xa8, 0x01, 0x80, 0x9f, 0xe1, // ....;F`j.)...... + 0x01, 0x07, 0xb9, 0x84, 0xdb, 0x36, 0x1c, 0x0f, 0xd4, 0x01, 0x2c, 0xb0, 0x8e, 0x3e, 0x96, 0x6a, // .....6....,..>.j + 0x4b, 0x3f, 0x1e, 0xd1, 0x00, 0x02, 0x00, 0x73, 0xff, 0x80, 0x06, 0x0d, 0x05, 0x80, 0x00, 0x17, // K?.....s........ + 0x00, 0x21, 0x00, 0x00, 0x25, 0x16, 0x06, 0x23, 0x21, 0x22, 0x26, 0x37, 0x01, 0x11, 0x23, 0x22, // .!..%..#!"&7..#" + 0x26, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x14, 0x06, 0x2b, 0x01, 0x11, 0x05, 0x01, 0x21, 0x01, // &463!2...+....!. + 0x27, 0x35, 0x11, 0x23, 0x11, 0x15, 0x05, 0xf7, 0x38, 0x45, 0x6a, 0xfb, 0x80, 0x6a, 0x45, 0x38, // '5.#....8Ej..jE8 + 0x01, 0xf7, 0x40, 0x1a, 0x26, 0x26, 0x1a, 0x02, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x40, 0xfe, 0xec, // ..@.&&....&&.@.. + 0xfe, 0xf0, 0x02, 0xc8, 0xfe, 0xf0, 0x14, 0x80, 0x58, 0x59, 0x7f, 0x7f, 0x59, 0x03, 0x19, 0x01, // ........XY..Y... + 0x8f, 0x26, 0x34, 0x26, 0x26, 0x34, 0x26, 0xfe, 0x71, 0x44, 0xfe, 0x53, 0x01, 0xad, 0x1f, 0x25, // .&4&&4&.qD.S...% + 0x01, 0x8f, 0xfe, 0x71, 0x25, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x01, 0xff, 0x80, 0x07, 0x00, // ...q%........... + 0x05, 0x00, 0x00, 0x07, 0x00, 0x4e, 0x00, 0x5c, 0x00, 0x6a, 0x00, 0x78, 0x00, 0x86, 0x00, 0x8c, // .....N...j.x.... + 0x00, 0x00, 0x00, 0x32, 0x16, 0x14, 0x06, 0x22, 0x26, 0x34, 0x05, 0x01, 0x16, 0x07, 0x06, 0x0f, // ...2..."&4...... + 0x01, 0x06, 0x23, 0x22, 0x27, 0x01, 0x07, 0x06, 0x07, 0x16, 0x07, 0x0e, 0x01, 0x07, 0x06, 0x23, // ..#"'..........# + 0x22, 0x27, 0x26, 0x37, 0x3e, 0x01, 0x37, 0x36, 0x33, 0x32, 0x17, 0x36, 0x3f, 0x01, 0x27, 0x26, // "'&7>.7632.6?.'& + 0x27, 0x06, 0x23, 0x22, 0x27, 0x2e, 0x01, 0x27, 0x26, 0x36, 0x37, 0x36, 0x33, 0x32, 0x17, 0x1e, // '.#"'..'&67632.. + 0x01, 0x17, 0x16, 0x07, 0x16, 0x1f, 0x01, 0x01, 0x36, 0x33, 0x32, 0x1f, 0x01, 0x16, 0x17, 0x16, // ........632..... + 0x07, 0x05, 0x36, 0x26, 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x16, 0x17, 0x16, 0x33, 0x32, 0x03, // ..6&'&#".....32. + 0x3e, 0x01, 0x27, 0x26, 0x23, 0x22, 0x07, 0x0e, 0x01, 0x17, 0x16, 0x33, 0x32, 0x01, 0x17, 0x35, // >.'&#".....32..5 + 0x34, 0x3f, 0x01, 0x27, 0x07, 0x0e, 0x01, 0x07, 0x0e, 0x01, 0x07, 0x1f, 0x01, 0x01, 0x27, 0x01, // 4?.'..........'. + 0x15, 0x07, 0x17, 0x16, 0x17, 0x1e, 0x01, 0x1f, 0x01, 0x01, 0x37, 0x01, 0x07, 0x06, 0x07, 0x03, // ..........7..... + 0xa6, 0x34, 0x26, 0x26, 0x34, 0x26, 0x01, 0x6c, 0x01, 0xfb, 0x1c, 0x03, 0x05, 0x1e, 0x80, 0x0d, // .4&&4&.l........ + 0x10, 0x11, 0x0e, 0xfd, 0x4e, 0x6e, 0x08, 0x04, 0x0e, 0x04, 0x07, 0x62, 0x53, 0x84, 0x91, 0x88, // ....Nn.....bS... + 0x56, 0x5a, 0x0b, 0x07, 0x62, 0x52, 0x84, 0x92, 0x53, 0x44, 0x09, 0x0d, 0x7a, 0x7a, 0x0d, 0x09, // VZ..bR..SD..zz.. + 0x44, 0x53, 0x92, 0x84, 0x52, 0x62, 0x07, 0x05, 0x29, 0x2b, 0x55, 0x89, 0x91, 0x84, 0x53, 0x62, // DS..Rb..)+U...Sb + 0x07, 0x04, 0x0e, 0x04, 0x08, 0x6e, 0x02, 0xb2, 0x0e, 0x11, 0x10, 0x0d, 0x80, 0x1e, 0x05, 0x03, // .....n.......... + 0x1c, 0xfb, 0x5c, 0x2e, 0x32, 0x51, 0x5c, 0x64, 0x4a, 0x27, 0x2e, 0x32, 0x51, 0x5c, 0x64, 0x4a, // ....2Q.dJ'.2Q.dJ + 0x2e, 0x51, 0x32, 0x2e, 0x27, 0x4a, 0x64, 0x5c, 0x51, 0x32, 0x2e, 0x27, 0x4a, 0x64, 0x01, 0x0e, // .Q2.'Jd.Q2.'Jd.. + 0x60, 0x21, 0x0e, 0x4f, 0x1a, 0x03, 0x0e, 0x05, 0x02, 0x04, 0x01, 0xd7, 0x60, 0x02, 0xe0, 0x80, // `!.O........`... + 0xfd, 0x00, 0xa0, 0x09, 0x02, 0x05, 0x04, 0x0e, 0x04, 0x1a, 0x03, 0x60, 0x80, 0xfd, 0xf8, 0xb1, // ...........`.... + 0x02, 0x0b, 0x02, 0x80, 0x26, 0x34, 0x26, 0x26, 0x34, 0x1a, 0xfe, 0x72, 0x14, 0x24, 0x23, 0x10, // ....&4&&4..r.$#. + 0x40, 0x07, 0x08, 0x01, 0x83, 0x42, 0x04, 0x01, 0x31, 0x30, 0x4d, 0x8d, 0x35, 0x54, 0x4e, 0x54, // @....B..10M.5TNT + 0x7b, 0x4c, 0x8e, 0x35, 0x54, 0x1f, 0x0d, 0x09, 0x49, 0x49, 0x09, 0x0d, 0x1f, 0x54, 0x35, 0x8e, // {L.5T...II...T5. + 0x4c, 0x3b, 0x6c, 0x27, 0x4f, 0x54, 0x34, 0x8e, 0x4d, 0x30, 0x31, 0x01, 0x04, 0x42, 0x01, 0x83, // L;l'OT4.M01..B.. + 0x08, 0x07, 0x40, 0x10, 0x23, 0x24, 0x14, 0x8a, 0x2a, 0x84, 0x33, 0x3b, 0x24, 0x2a, 0x84, 0x33, // ..@.#$..*.3;$*.3 + 0x3b, 0xfd, 0x3b, 0x33, 0x84, 0x2a, 0x24, 0x3b, 0x33, 0x84, 0x2a, 0x24, 0x02, 0xa0, 0x3a, 0x0b, // ;.;3.*$;3.*$..:. + 0x24, 0x14, 0x08, 0x2f, 0x1a, 0x03, 0x10, 0x04, 0x02, 0x03, 0x01, 0xe9, 0x20, 0x02, 0x40, 0x40, // $../........ .@@ + 0xfe, 0x51, 0x71, 0x60, 0x08, 0x02, 0x04, 0x04, 0x10, 0x04, 0x1a, 0xfe, 0xc0, 0x40, 0x01, 0x98, // .Qq`.........@.. + 0x8a, 0x03, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0xff, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x1f, // ................ + 0x00, 0x22, 0x00, 0x25, 0x00, 0x33, 0x00, 0x3c, 0x00, 0x00, 0x01, 0x32, 0x16, 0x15, 0x11, 0x14, // .".%.3.<...2.... + 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x37, 0x01, // .#!"&5.!"&5.467. + 0x3e, 0x01, 0x33, 0x21, 0x32, 0x16, 0x15, 0x11, 0x36, 0x33, 0x07, 0x01, 0x21, 0x09, 0x01, 0x21, // >.3!2...63..!..! + 0x13, 0x01, 0x11, 0x21, 0x11, 0x14, 0x06, 0x23, 0x21, 0x11, 0x21, 0x11, 0x34, 0x36, 0x01, 0x11, // ...!...#!.!.46.. + 0x21, 0x11, 0x14, 0x06, 0x23, 0x21, 0x11, 0x06, 0xa0, 0x28, 0x38, 0x38, 0x28, 0xfc, 0x40, 0x28, // !...#!...(88(.@( + 0x38, 0xfd, 0xe0, 0x28, 0x38, 0x28, 0x1c, 0x01, 0x98, 0x1c, 0x60, 0x28, 0x01, 0xa0, 0x28, 0x38, // 8..(8(....`(..(8 + 0x44, 0x3c, 0x80, 0xfe, 0xd5, 0x01, 0x2b, 0xfd, 0x80, 0xfe, 0xd5, 0x01, 0x2b, 0xc4, 0x01, 0x3c, // D<....+.....+..< + 0xfe, 0x80, 0x38, 0x28, 0xfe, 0x60, 0x02, 0x00, 0x28, 0x03, 0xd8, 0xfe, 0x80, 0x38, 0x28, 0xfe, // ..8(.`..(....8(. + 0x60, 0x04, 0x80, 0x38, 0x28, 0xfb, 0x40, 0x28, 0x38, 0x38, 0x28, 0x01, 0x20, 0x38, 0x28, 0x02, // `..8(.@(88(. 8(. + 0xa0, 0x28, 0x60, 0x1c, 0x01, 0x98, 0x1c, 0x28, 0x38, 0x28, 0xfe, 0xb8, 0x28, 0xd5, 0xfe, 0xd5, // .(`....(8(..(... + 0x02, 0xab, 0xfe, 0xd5, 0xfe, 0xa4, 0x01, 0x3c, 0x01, 0xa0, 0xfe, 0x60, 0x28, 0x38, 0xfd, 0x80, // .......<...`(8.. + 0x01, 0x00, 0x28, 0x60, 0xfc, 0xf8, 0x04, 0x80, 0xfe, 0x60, 0x28, 0x38, 0xfd, 0x80, 0x00, 0x00, // ..(`.....`(8.... + 0x00, 0x01, 0x00, 0x04, 0xff, 0x84, 0x05, 0x7c, 0x05, 0x7c, 0x00, 0x3f, 0x00, 0x00, 0x25, 0x14, // .......|.|.?..%. + 0x06, 0x23, 0x22, 0x27, 0x01, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x01, 0x16, 0x15, 0x14, // .#"'.&54632..... + 0x06, 0x23, 0x22, 0x27, 0x01, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x17, 0x01, 0x16, 0x33, 0x32, // .#"'.&#"......32 + 0x36, 0x35, 0x34, 0x27, 0x01, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x17, 0x01, 0x16, 0x15, 0x14, // 654'.&#"........ + 0x06, 0x23, 0x22, 0x27, 0x01, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x01, 0x16, 0x05, 0x7c, // .#"'.&54632....| + 0x9e, 0x75, 0x87, 0x64, 0xfc, 0xf7, 0x71, 0xdc, 0x9f, 0x9e, 0x73, 0x02, 0x5d, 0x0a, 0x3d, 0x10, // .u.d..q...s.].=. + 0x0d, 0x0a, 0xfd, 0xa2, 0x4f, 0x66, 0x6a, 0x92, 0x4c, 0x03, 0x08, 0x3f, 0x52, 0x40, 0x54, 0x3f, // ....Ofj.L..?R@T? + 0xfd, 0xbb, 0x1a, 0x22, 0x1d, 0x26, 0x19, 0x01, 0x9a, 0x0a, 0x3e, 0x10, 0x0c, 0x0a, 0xfe, 0x66, // ...".&....>....f + 0x3f, 0x72, 0x52, 0x58, 0x3d, 0x02, 0x45, 0x64, 0x97, 0x75, 0x9e, 0x64, 0x03, 0x08, 0x73, 0x9c, // ?rRX=.Ed.u.d..s. + 0x9f, 0xde, 0x71, 0xfd, 0xa2, 0x0a, 0x0c, 0x10, 0x3d, 0x0a, 0x02, 0x5f, 0x4d, 0x96, 0x6a, 0x69, // ..q.....=.._M.ji + 0x4c, 0xfc, 0xf7, 0x3f, 0x54, 0x40, 0x52, 0x3f, 0x02, 0x45, 0x18, 0x26, 0x1d, 0x20, 0x1b, 0xfe, // L..?T@R?.E.&. .. + 0x66, 0x0a, 0x0c, 0x10, 0x3e, 0x0a, 0x01, 0x9a, 0x3d, 0x58, 0x52, 0x72, 0x3f, 0xfd, 0xbb, 0x62, // f...>...=XRr?..b + 0x00, 0x04, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x03, 0x00, 0x21, 0x00, 0x31, // .............!.1 + 0x00, 0x45, 0x00, 0x00, 0x29, 0x01, 0x11, 0x21, 0x01, 0x33, 0x11, 0x34, 0x26, 0x27, 0x01, 0x2e, // .E..)..!.3.4&'.. + 0x01, 0x23, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x23, 0x11, 0x33, 0x11, 0x34, // .#...#!"&5.#.3.4 + 0x36, 0x33, 0x21, 0x32, 0x16, 0x15, 0x01, 0x11, 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x15, 0x11, // 63!2....4&+."... + 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x05, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, // ..;.26....#!"&5. + 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x17, 0x01, 0x1e, 0x01, 0x01, 0x80, 0x03, 0x00, 0xfd, 0x00, // 463!2........... + 0x03, 0x80, 0x80, 0x14, 0x0a, 0xfe, 0xe7, 0x0a, 0x30, 0x0f, 0x38, 0x28, 0xfd, 0xc0, 0x28, 0x38, // ........0.8(..(8 + 0x80, 0x80, 0x38, 0x28, 0x03, 0x40, 0x28, 0x38, 0xfe, 0x80, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, // ..8(.@(8........ + 0x0d, 0xc0, 0x0d, 0x13, 0x02, 0x80, 0x38, 0x28, 0xfa, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x03, 0xa0, // ......8(..(88(.. + 0x28, 0x60, 0x1c, 0x01, 0x18, 0x1c, 0x28, 0x01, 0x80, 0xfe, 0x80, 0x03, 0x80, 0x0e, 0x31, 0x0a, // (`....(.......1. + 0x01, 0x19, 0x0a, 0x14, 0xfe, 0x60, 0x28, 0x38, 0x38, 0x28, 0x01, 0xa0, 0xfb, 0x00, 0x01, 0xa0, // .....`(88(...... + 0x28, 0x38, 0x38, 0x28, 0x02, 0x00, 0x01, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0xfe, 0xc0, 0x0d, 0x13, // (88(...@........ + 0x13, 0x13, 0xfc, 0x60, 0x28, 0x38, 0x38, 0x28, 0x05, 0x40, 0x28, 0x38, 0x28, 0x1c, 0xfe, 0xe8, // ...`(88(.@(8(... + 0x1c, 0x60, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x0f, // .`.............. + 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, // ......#!"&5.463! + 0x32, 0x16, 0x06, 0x00, 0xa9, 0x77, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, // 2....w.@w..w..w. + 0x04, 0x60, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0xa9, 0x00, 0x00, 0x00, // .`.@w..w..w..... + 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, // .............../ + 0x00, 0x00, 0x25, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, // ..%...#!"&=.463! + 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, // 2.....#!"&=.463! + 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, // 2.....#!"&=.463! + 0x32, 0x16, 0x06, 0x00, 0x26, 0x1a, 0xfa, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x05, 0x80, 0x1a, 0x26, // 2...&....&&....& + 0x26, 0x1a, 0xfa, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x05, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0xfa, 0x80, // &....&&....&&... + 0x1a, 0x26, 0x26, 0x1a, 0x05, 0x80, 0x1a, 0x26, 0xc0, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, // .&&....&...&&... + 0x26, 0x26, 0x01, 0xe6, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x01, 0xe6, 0x80, // &&....&&...&&... + 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x00, 0x06, 0x00, 0x00, 0xff, 0xc0, 0x07, 0x00, // .&&...&&........ + 0x05, 0x40, 0x00, 0x07, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x27, 0x00, 0x37, 0x00, 0x47, 0x00, 0x00, // .@.......'.7.G.. + 0x24, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x12, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, // $.."&462..."&462 + 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // ....#!"&=.463!2. + 0x00, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // ..."&462....#!"& + 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // =.463!2.....#!"& + 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x80, 0x70, 0xa0, 0x70, 0x70, 0xa0, 0x70, // =.463!2...p.pp.p + 0x70, 0xa0, 0x70, 0x70, 0xa0, 0x05, 0xf0, 0x13, 0x0d, 0xfb, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x04, // p.pp......@..... + 0xc0, 0x0d, 0x13, 0xfa, 0x80, 0x70, 0xa0, 0x70, 0x70, 0xa0, 0x05, 0xf0, 0x13, 0x0d, 0xfb, 0x40, // .....p.pp......@ + 0x0d, 0x13, 0x13, 0x0d, 0x04, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xfb, 0x40, 0x0d, 0x13, 0x13, 0x0d, // ...........@.... + 0x04, 0xc0, 0x0d, 0x13, 0xd0, 0xa0, 0x70, 0x70, 0xa0, 0x70, 0x01, 0x90, 0xa0, 0x70, 0x70, 0xa0, // ......pp.p...pp. + 0x70, 0xfd, 0xa0, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0x03, 0xe3, 0xa0, 0x70, // p..............p + 0x70, 0xa0, 0x70, 0xfd, 0xa0, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0x01, 0xf3, // p.p............. + 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x0f, // ................ + 0xff, 0x00, 0x07, 0x00, 0x05, 0xf7, 0x00, 0x1e, 0x00, 0x3c, 0x00, 0x4c, 0x00, 0x5c, 0x00, 0x6c, // .........<.L...l + 0x00, 0x7c, 0x00, 0x00, 0x05, 0x14, 0x06, 0x23, 0x22, 0x27, 0x37, 0x16, 0x33, 0x32, 0x36, 0x35, // .|.....#"'7.3265 + 0x34, 0x07, 0x27, 0x3e, 0x02, 0x37, 0x35, 0x22, 0x06, 0x23, 0x15, 0x23, 0x35, 0x21, 0x15, 0x07, // 4.'>.75".#.#5!.. + 0x1e, 0x01, 0x13, 0x15, 0x21, 0x26, 0x35, 0x34, 0x3e, 0x03, 0x35, 0x34, 0x26, 0x23, 0x22, 0x07, // ....!&54>.54&#". + 0x27, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x15, 0x14, 0x0e, 0x02, 0x07, 0x33, 0x35, 0x01, 0x15, 0x14, // '>.32......35... + 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x15, 0x21, // .#!"&=.463!2...! + 0x35, 0x33, 0x34, 0x36, 0x3d, 0x01, 0x23, 0x06, 0x07, 0x27, 0x37, 0x33, 0x11, 0x01, 0x15, 0x14, // 5346=.#..'73.... + 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, // .#!"&=.463!2.... + 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x7d, 0x6d, // .#!"&=.463!2..}m + 0x51, 0x6a, 0x42, 0x39, 0x31, 0x39, 0x1d, 0x2b, 0x69, 0x1a, 0x08, 0x31, 0x24, 0x13, 0x10, 0x41, // QjB919.+i..1$..A + 0x10, 0x6a, 0x01, 0x4d, 0x5f, 0x33, 0x3c, 0x02, 0xfe, 0x96, 0x06, 0x2f, 0x42, 0x42, 0x2f, 0x1d, // .j.M_3<..../BB/. + 0x19, 0x2e, 0x23, 0x55, 0x18, 0x5f, 0x3a, 0x49, 0x64, 0x44, 0x52, 0x45, 0x01, 0x7f, 0x05, 0xea, // ..#U._:IdDRE.... + 0x13, 0x0d, 0xfb, 0x40, 0x0d, 0x13, 0x12, 0x0e, 0x04, 0xc0, 0x0d, 0x13, 0xfa, 0x80, 0xfe, 0xb1, // ...@............ + 0x6b, 0x01, 0x02, 0x08, 0x2a, 0x47, 0x88, 0x6a, 0x05, 0xec, 0x13, 0x0d, 0xfb, 0x40, 0x0d, 0x13, // k...*G.j.....@.. + 0x12, 0x0e, 0x04, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xfb, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x04, 0xc0, // .........@...... + 0x0d, 0x13, 0x54, 0x50, 0x5c, 0x42, 0x58, 0x2d, 0x1d, 0x1c, 0x40, 0x08, 0x38, 0x0a, 0x43, 0x29, // ..TP.BX-..@.8.C) + 0x12, 0x01, 0x02, 0x35, 0x98, 0x58, 0x73, 0x0c, 0x4a, 0x02, 0x40, 0x9f, 0x24, 0x12, 0x33, 0x54, // ...5.Xs.J.@.$.3T + 0x34, 0x2b, 0x2c, 0x17, 0x19, 0x1b, 0x3a, 0x3b, 0x33, 0x39, 0x53, 0x47, 0x32, 0x53, 0x2e, 0x37, // 4+,...:;39SG2S.7 + 0x19, 0x3c, 0xfe, 0xc1, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0e, 0x12, 0x13, 0x03, 0x76, 0x63, // .<............vc + 0x63, 0x29, 0xa1, 0x29, 0x0c, 0x11, 0x25, 0x4c, 0x7f, 0xfe, 0x6c, 0xfe, 0x7d, 0xc0, 0x0d, 0x13, // c).)..%L..l.}... + 0x13, 0x0d, 0xc0, 0x0e, 0x12, 0x13, 0x01, 0xf3, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, // ................ + 0x13, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x07, 0x00, 0x05, 0x80, 0x00, 0x0f, // ................ + 0x00, 0x35, 0x00, 0x65, 0x00, 0x00, 0x01, 0x32, 0x16, 0x1d, 0x01, 0x14, 0x06, 0x23, 0x21, 0x22, // .5.e...2.....#!" + 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x25, 0x26, 0x27, 0x26, 0x35, 0x34, 0x37, 0x36, 0x21, 0x32, // &=.463%&'&5476!2 + 0x17, 0x16, 0x17, 0x16, 0x17, 0x16, 0x15, 0x14, 0x0f, 0x01, 0x2f, 0x01, 0x26, 0x27, 0x26, 0x23, // ........../.&'&# + 0x22, 0x07, 0x06, 0x15, 0x14, 0x17, 0x16, 0x17, 0x16, 0x17, 0x16, 0x17, 0x03, 0x21, 0x16, 0x15, // "............!.. + 0x14, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x23, 0x22, 0x2f, 0x01, 0x26, 0x27, 0x26, // .........#"/.&'& + 0x3d, 0x01, 0x34, 0x27, 0x26, 0x3f, 0x01, 0x35, 0x37, 0x1e, 0x02, 0x17, 0x16, 0x17, 0x16, 0x17, // =.4'&?.57....... + 0x16, 0x33, 0x32, 0x37, 0x36, 0x37, 0x36, 0x35, 0x34, 0x27, 0x26, 0x06, 0xe0, 0x0e, 0x12, 0x12, // .32767654'&..... + 0x0e, 0xf9, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x01, 0xc3, 0x1c, 0x17, 0x30, 0x86, 0x85, 0x01, 0x04, // ..@........0.... + 0x32, 0x75, 0x42, 0x6f, 0x0a, 0x0b, 0x0e, 0x05, 0x0c, 0x54, 0x0e, 0x32, 0x35, 0x58, 0x7a, 0x72, // 2uBo.....T.25Xzr + 0x44, 0x43, 0x42, 0x42, 0xd5, 0x45, 0x68, 0x3a, 0x25, 0xec, 0x01, 0x9b, 0x07, 0x29, 0x17, 0x30, // DCBB.Eh:%....).0 + 0x25, 0x48, 0x50, 0x49, 0x50, 0x7b, 0x72, 0x51, 0x8c, 0x39, 0x0f, 0x08, 0x02, 0x01, 0x01, 0x02, // %HPIP{rQ.9...... + 0x66, 0x0f, 0x1e, 0x0f, 0x05, 0x23, 0x2d, 0x2b, 0x3e, 0x3b, 0x49, 0x40, 0x4b, 0x4d, 0x2d, 0x2f, // f....#-+>;I@KM-/ + 0x51, 0x22, 0x02, 0x80, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x40, 0x23, // Q"....@....@..@# + 0x2d, 0x62, 0x5a, 0xb5, 0x80, 0x7f, 0x13, 0x0c, 0x24, 0x26, 0x50, 0x7b, 0x3c, 0x12, 0x1b, 0x03, // -bZ.....$&P{<... + 0x06, 0x02, 0x95, 0x38, 0x5b, 0x3b, 0x3a, 0x58, 0x49, 0x43, 0x43, 0x3e, 0x14, 0x2e, 0x1c, 0x18, // ...8[;:XICC>.... + 0xff, 0x00, 0x27, 0x35, 0x6f, 0x65, 0x38, 0x30, 0x23, 0x2e, 0x30, 0x12, 0x15, 0x17, 0x28, 0x10, // ..'5oe80#.0...(. + 0x0c, 0x08, 0x0e, 0x0d, 0x6c, 0x30, 0x1e, 0x26, 0x25, 0x2c, 0x02, 0x22, 0x4a, 0x26, 0x08, 0x39, // ....l0.&%,."J&.9 + 0x25, 0x24, 0x15, 0x16, 0x1b, 0x1a, 0x3c, 0x3d, 0x44, 0x54, 0x49, 0x1d, 0x00, 0x02, 0x00, 0x00, // %$....<=DTI..... + 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x63, 0x00, 0x73, 0x00, 0x00, 0x13, 0x26, 0x2f, 0x01, // .......c.s...&/. + 0x36, 0x33, 0x32, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x37, 0x32, 0x37, 0x07, 0x17, 0x15, 0x06, // 632..3276727.... + 0x23, 0x22, 0x07, 0x06, 0x15, 0x14, 0x16, 0x15, 0x17, 0x13, 0x16, 0x17, 0x16, 0x17, 0x16, 0x33, // #".............3 + 0x32, 0x37, 0x36, 0x37, 0x36, 0x37, 0x36, 0x37, 0x36, 0x35, 0x34, 0x2e, 0x01, 0x2f, 0x01, 0x26, // 27676767654../.& + 0x27, 0x26, 0x0f, 0x01, 0x27, 0x37, 0x33, 0x17, 0x16, 0x37, 0x17, 0x16, 0x15, 0x14, 0x07, 0x06, // '&..'73..7...... + 0x07, 0x06, 0x07, 0x06, 0x15, 0x14, 0x16, 0x15, 0x16, 0x13, 0x16, 0x07, 0x06, 0x07, 0x06, 0x07, // ................ + 0x06, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x27, 0x26, 0x27, 0x26, 0x35, 0x11, 0x34, 0x27, 0x26, // ...#"'&'&'&5.4'& 0x01, 0x35, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, // .54&#!".....3!26 - 0x01, 0x35, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, // .54&#!".....3!26 - 0x01, 0x35, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, // .54&#!".....3!26 - 0x01, 0x35, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, // .54&#!".....3!26 - 0x01, 0x35, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, // .54&#!".....3!26 - 0x01, 0x35, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, // .54&#!".....3!26 - 0x11, 0x35, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, // .54&#!".....3!26 - 0x13, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // ....#!"&5.463!2. - 0x02, 0x00, 0x12, 0x0e, 0xfe, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0x01, 0x40, 0x0e, 0x12, 0x12, 0x0e, // ...........@.... - 0xfe, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0x01, 0x40, 0x0e, 0x12, 0x02, 0x00, 0x12, 0x0e, 0xfe, 0xc0, // .......@........ - 0x0e, 0x12, 0x12, 0x0e, 0x01, 0x40, 0x0e, 0x12, 0xfe, 0x00, 0x12, 0x0e, 0xfe, 0xc0, 0x0e, 0x12, // .....@.......... + 0x30, 0x25, 0x08, 0x03, 0x0d, 0x1b, 0x3c, 0x34, 0x84, 0x22, 0x56, 0x52, 0x74, 0x1e, 0x38, 0x1e, // 0%....<4."VRt.8. + 0x01, 0x02, 0x3c, 0x40, 0x3c, 0x13, 0x0d, 0x01, 0x01, 0x0e, 0x06, 0x2d, 0x23, 0x3d, 0x58, 0x59, // ..<@<......-#=XY + 0x68, 0x57, 0x38, 0x2b, 0x30, 0x11, 0x24, 0x11, 0x15, 0x07, 0x0f, 0x06, 0x04, 0x05, 0x13, 0x22, // hW8+0.$........" + 0x2b, 0x64, 0x0e, 0x02, 0x54, 0xcd, 0x4c, 0x78, 0x12, 0x06, 0x04, 0x2d, 0x27, 0x49, 0x06, 0x0f, // +d..T.Lx...-'I.. + 0x03, 0x08, 0x0e, 0x06, 0x15, 0x0f, 0x1a, 0x26, 0x4a, 0x4b, 0x6b, 0x6d, 0x92, 0xa7, 0x75, 0x77, // .......&JKkm..uw + 0x3c, 0x3d, 0x16, 0x10, 0x11, 0x19, 0x05, 0x56, 0x12, 0x0e, 0xfa, 0x40, 0x0e, 0x12, 0x12, 0x0e, // <=.....V...@.... + 0x05, 0xc0, 0x0e, 0x12, 0x05, 0x21, 0x02, 0x02, 0x58, 0x01, 0x04, 0x07, 0x03, 0x04, 0x01, 0x02, // .....!..X....... + 0x0e, 0x40, 0x09, 0x09, 0x19, 0x0e, 0x76, 0x0d, 0x27, 0x06, 0xe5, 0xfe, 0xe8, 0x7c, 0x4e, 0x3b, // .@....v.'....|N; + 0x21, 0x2f, 0x1c, 0x12, 0x21, 0x24, 0x1c, 0x38, 0x3a, 0x49, 0x9c, 0x4f, 0x62, 0x93, 0x56, 0x3b, // !/..!$.8:I.Ob.V; + 0x43, 0x15, 0x23, 0x01, 0x02, 0x03, 0x56, 0x0a, 0x03, 0x0d, 0x02, 0x26, 0x0d, 0x07, 0x18, 0x0c, // C.#...V....&.... + 0x01, 0x0b, 0x06, 0x0f, 0x1a, 0x07, 0x28, 0x0b, 0x13, 0xfe, 0x87, 0xc3, 0x6d, 0x4c, 0x2e, 0x41, // ......(.....mL.A + 0x3a, 0x39, 0x20, 0x21, 0x2e, 0x2f, 0x4b, 0x4c, 0x77, 0x50, 0x9d, 0x01, 0x4d, 0xbc, 0x19, 0x24, // :9 !./KLwP..M..$ + 0xfa, 0x82, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x00, 0x00, 0x0a, 0x00, 0x00, // ..@....@........ + 0x00, 0x00, 0x06, 0x80, 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x3f, 0x00, 0x4f, // .........../.?.O + 0x00, 0x5f, 0x00, 0x6f, 0x00, 0x7f, 0x00, 0x8f, 0x00, 0x9f, 0x00, 0x00, 0x25, 0x35, 0x34, 0x26, // ._.o........%54& + 0x23, 0x21, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x11, 0x35, 0x34, 0x26, // #!".....3!26.54& + 0x23, 0x21, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x01, 0x35, 0x34, 0x26, // #!".....3!26.54& + 0x23, 0x21, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x01, 0x35, 0x34, 0x26, // #!".....3!26.54& + 0x23, 0x21, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x01, 0x35, 0x34, 0x26, // #!".....3!26.54& + 0x23, 0x21, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x01, 0x35, 0x34, 0x26, // #!".....3!26.54& + 0x23, 0x21, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x01, 0x35, 0x34, 0x26, // #!".....3!26.54& + 0x23, 0x21, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x01, 0x35, 0x34, 0x26, // #!".....3!26.54& + 0x23, 0x21, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x11, 0x35, 0x34, 0x26, // #!".....3!26.54& + 0x23, 0x21, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x13, 0x11, 0x14, 0x06, // #!".....3!26.... + 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x02, 0x00, 0x12, 0x0e, // #!"&5.463!2..... + 0xfe, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0x01, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0xfe, 0xc0, 0x0e, 0x12, // .......@........ 0x12, 0x0e, 0x01, 0x40, 0x0e, 0x12, 0x02, 0x00, 0x12, 0x0e, 0xfe, 0xc0, 0x0e, 0x12, 0x12, 0x0e, // ...@............ - 0x01, 0x40, 0x0e, 0x12, 0x02, 0x00, 0x12, 0x0e, 0xfe, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0x01, 0x40, // .@.............@ - 0x0e, 0x12, 0xfe, 0x00, 0x12, 0x0e, 0xfe, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0x01, 0x40, 0x0e, 0x12, // .............@.. - 0x02, 0x00, 0x12, 0x0e, 0xfe, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0x01, 0x40, 0x0e, 0x12, 0x12, 0x0e, // ...........@.... - 0xfe, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0x01, 0x40, 0x0e, 0x12, 0x80, 0x5e, 0x42, 0xfa, 0xc0, 0x42, // .......@...^B..B - 0x5e, 0x5e, 0x42, 0x05, 0x40, 0x42, 0x5e, 0xa0, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, // ^^B.@B^......... - 0x12, 0x01, 0x8e, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0xfe, 0x8e, 0xc0, 0x0e, // ................ - 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x03, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, // ................ - 0x12, 0x12, 0xfe, 0x8e, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0xfe, 0x8e, 0xc0, // ................ - 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x03, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, // ................ - 0x0e, 0x12, 0x12, 0xfe, 0x8e, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x01, 0x8e, // ................ - 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x01, 0x4e, 0xfb, 0xc0, 0x42, 0x5e, 0x5e, // ..........N..B^^ - 0x42, 0x04, 0x40, 0x42, 0x5e, 0x5e, 0x00, 0x00, 0x00, 0x06, 0x00, 0x1b, 0xff, 0x9b, 0x06, 0x80, // B.@B^^.......... - 0x06, 0x00, 0x00, 0x03, 0x00, 0x13, 0x00, 0x1b, 0x00, 0x23, 0x00, 0x2b, 0x00, 0x33, 0x00, 0x00, // .........#.+.3.. - 0x09, 0x01, 0x27, 0x01, 0x24, 0x14, 0x07, 0x01, 0x06, 0x22, 0x2f, 0x01, 0x26, 0x34, 0x37, 0x01, // ..'.$...."/.&47. - 0x36, 0x32, 0x1f, 0x01, 0x25, 0x17, 0x0f, 0x01, 0x2f, 0x01, 0x3f, 0x01, 0x01, 0x17, 0x0f, 0x01, // 62..%.../.?..... - 0x2f, 0x01, 0x3f, 0x01, 0x01, 0x17, 0x0f, 0x01, 0x2f, 0x01, 0x3f, 0x01, 0x01, 0x17, 0x0f, 0x01, // /.?...../.?..... - 0x2f, 0x01, 0x3f, 0x01, 0x04, 0xa6, 0x01, 0x25, 0x6b, 0xfe, 0xdb, 0x02, 0x2a, 0x12, 0xfa, 0xfa, // /.?....%k...*... - 0x12, 0x36, 0x12, 0xc6, 0x12, 0x12, 0x05, 0x06, 0x12, 0x36, 0x12, 0xc6, 0xfa, 0xcb, 0x62, 0x62, // .6.......6....bb - 0x1e, 0x1e, 0x62, 0x62, 0x1e, 0x01, 0x7c, 0xc4, 0xc4, 0x3c, 0x3c, 0xc4, 0xc4, 0x3c, 0x03, 0xde, // ..bb..|..<<..<.. - 0x62, 0x62, 0x1e, 0x1e, 0x62, 0x62, 0x1e, 0xfd, 0x9e, 0x62, 0x62, 0x1e, 0x1e, 0x62, 0x62, 0x1e, // bb..bb...bb..bb. - 0x03, 0xbb, 0x01, 0x25, 0x6b, 0xfe, 0xdb, 0xd5, 0x36, 0x12, 0xfa, 0xfa, 0x12, 0x12, 0xc6, 0x12, // ...%k...6....... - 0x36, 0x12, 0x05, 0x06, 0x12, 0x12, 0xc6, 0x91, 0x1e, 0x1e, 0x62, 0x62, 0x1e, 0x1e, 0x62, 0xfe, // 6.........bb..b. - 0xfc, 0x3c, 0x3c, 0xc4, 0xc4, 0x3c, 0x3c, 0xc4, 0xfd, 0x5e, 0x1e, 0x1e, 0x62, 0x62, 0x1e, 0x1e, // .<<..<<..^..bb.. - 0x62, 0x02, 0x1e, 0x1e, 0x1e, 0x62, 0x62, 0x1e, 0x1e, 0x62, 0x00, 0x00, 0x00, 0x04, 0x00, 0x40, // b....bb..b.....@ - 0xff, 0x80, 0x07, 0x00, 0x05, 0x00, 0x00, 0x07, 0x00, 0x10, 0x00, 0x18, 0x00, 0x4d, 0x00, 0x00, // .............M.. - 0x24, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x01, 0x21, 0x11, 0x23, 0x22, 0x0f, 0x01, 0x06, // $4&"...2.!.#"... - 0x15, 0x00, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x01, 0x11, 0x14, 0x0e, 0x04, 0x26, 0x23, // ..4&"...2.....&# - 0x14, 0x06, 0x22, 0x26, 0x35, 0x21, 0x14, 0x06, 0x22, 0x26, 0x35, 0x23, 0x22, 0x06, 0x2e, 0x04, // .."&5!.."&5#"... - 0x35, 0x34, 0x36, 0x33, 0x11, 0x34, 0x26, 0x3e, 0x03, 0x3f, 0x01, 0x3e, 0x01, 0x3b, 0x01, 0x35, // 5463.4&>.?.>.;.5 - 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x02, 0x80, 0x4c, 0x68, 0x4c, 0x4c, 0x68, 0xfe, 0xcc, 0x01, // 463!2...LhLLh... - 0x80, 0x9e, 0x0d, 0x09, 0xc3, 0x09, 0x05, 0x00, 0x4c, 0x68, 0x4c, 0x4c, 0x68, 0x01, 0x4c, 0x08, // ........LhLLh.L. - 0x13, 0x0e, 0x21, 0x0c, 0x27, 0x03, 0x96, 0xd4, 0x96, 0xfe, 0x80, 0x96, 0xd4, 0x96, 0x40, 0x03, // ..!.'.........@. - 0x27, 0x0c, 0x21, 0x0e, 0x13, 0x08, 0x26, 0x1a, 0x01, 0x01, 0x04, 0x09, 0x13, 0x0d, 0xc6, 0x13, // '.!...&......... - 0x3f, 0x1b, 0xa0, 0x26, 0x1a, 0x04, 0x00, 0x1a, 0x26, 0x4c, 0x68, 0x4c, 0x4c, 0x68, 0x4c, 0x02, // ?..&....&LhLLhL. - 0x80, 0x01, 0x00, 0x09, 0xc3, 0x09, 0x0d, 0xfd, 0xae, 0x68, 0x4c, 0x4c, 0x68, 0x4c, 0x04, 0xc0, // .........hLLhL.. - 0xfc, 0x00, 0x0f, 0x17, 0x0e, 0x09, 0x03, 0x01, 0x01, 0x6a, 0x96, 0x96, 0x6a, 0x6a, 0x96, 0x96, // .........j..jj.. - 0x6a, 0x01, 0x01, 0x03, 0x09, 0x0e, 0x17, 0x0f, 0x1a, 0x26, 0x01, 0x40, 0x08, 0x36, 0x16, 0x2f, // j........&.@.6./ - 0x1b, 0x22, 0x0d, 0xc6, 0x13, 0x1a, 0xc0, 0x1a, 0x26, 0x26, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // ."......&&...... - 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x10, 0x02, 0x04, 0x23, 0x22, // .......J......#" - 0x27, 0x36, 0x37, 0x36, 0x37, 0x1e, 0x01, 0x33, 0x32, 0x3e, 0x01, 0x35, 0x34, 0x2e, 0x01, 0x23, // '6767..32>.54..# - 0x22, 0x0e, 0x03, 0x15, 0x14, 0x16, 0x17, 0x16, 0x37, 0x3e, 0x01, 0x37, 0x36, 0x27, 0x26, 0x35, // ".......7>.76'&5 - 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x26, 0x37, 0x3e, 0x02, 0x35, 0x34, // 4632....#"&7>.54 - 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x17, 0x03, 0x06, 0x17, 0x26, 0x02, 0x35, 0x34, 0x12, 0x24, // &#".......&.54.$ - 0x20, 0x04, 0x06, 0x00, 0xce, 0xfe, 0x9f, 0xd1, 0x6f, 0x6b, 0x3b, 0x13, 0x09, 0x2d, 0x14, 0x6a, // .......ok;..-.j - 0x3d, 0x79, 0xbe, 0x68, 0x77, 0xe2, 0x8e, 0x69, 0xb6, 0x7f, 0x5b, 0x2b, 0x50, 0x4d, 0x1e, 0x08, // =y.hw..i..[+PM.. - 0x02, 0x0c, 0x02, 0x06, 0x11, 0x33, 0xd1, 0xa9, 0x97, 0xa9, 0x89, 0x6b, 0x3d, 0x4a, 0x0e, 0x08, // .....3.....k=J.. - 0x25, 0x17, 0x36, 0x32, 0x3e, 0x56, 0x19, 0x63, 0x11, 0x04, 0xce, 0xfe, 0xce, 0x01, 0x61, 0x01, // %.62>V.c......a. - 0xa2, 0x01, 0x61, 0x03, 0x51, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0x20, 0x5d, 0x47, 0x22, 0xb1, 0x27, // ..a.Q.^... ]G".' - 0x39, 0x89, 0xf0, 0x96, 0x72, 0xc8, 0x7e, 0x3a, 0x60, 0x7d, 0x86, 0x43, 0x68, 0x9e, 0x20, 0x0c, // 9...r.~:`}.Ch. . - 0x20, 0x07, 0x30, 0x06, 0x17, 0x14, 0x3d, 0x5a, 0x97, 0xd9, 0xa4, 0x83, 0xaa, 0xee, 0x57, 0x3d, // .0...=Z......W= - 0x23, 0x75, 0x59, 0x1f, 0x32, 0x42, 0x72, 0x55, 0x49, 0x31, 0xfe, 0x5e, 0x46, 0x6b, 0x5b, 0x01, // #uY.2BrUI1.^Fk[. - 0x7c, 0xe9, 0xd1, 0x01, 0x61, 0xce, 0xce, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // |...a........... - 0x05, 0x80, 0x00, 0x4c, 0x00, 0x00, 0x01, 0x32, 0x16, 0x15, 0x11, 0x14, 0x06, 0x23, 0x21, 0x36, // ...L...2.....#!6 - 0x37, 0x36, 0x37, 0x1e, 0x01, 0x33, 0x32, 0x12, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x03, // 767..32.54..#".. - 0x15, 0x14, 0x16, 0x17, 0x16, 0x36, 0x37, 0x36, 0x37, 0x36, 0x27, 0x26, 0x35, 0x34, 0x36, 0x33, // .....67676'&5463 - 0x32, 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x26, 0x37, 0x3e, 0x02, 0x35, 0x34, 0x26, 0x23, 0x22, // 2....#"&7>.54&#" - 0x06, 0x15, 0x14, 0x17, 0x03, 0x06, 0x17, 0x23, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x04, // .......#"&5.463. - 0xe0, 0x77, 0xa9, 0xa9, 0x77, 0xfd, 0x2b, 0x55, 0x17, 0x09, 0x2c, 0x15, 0x69, 0x3c, 0xb5, 0xe5, // .w..w.+U..,.i<.. - 0x46, 0x7b, 0xb6, 0x6a, 0x68, 0xb5, 0x7d, 0x5a, 0x2b, 0x4f, 0x4d, 0x0d, 0x15, 0x04, 0x0a, 0x05, // F{.jh.}Z+OM..... - 0x06, 0x11, 0x32, 0xcf, 0xa7, 0x95, 0xa7, 0x87, 0x6a, 0x3c, 0x4a, 0x0e, 0x08, 0x25, 0x16, 0x35, // ..2.....jX......W<"uW.1A - 0x71, 0x53, 0x48, 0x31, 0xfe, 0x62, 0x64, 0x9a, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0x00, 0x00, // qSH1.bd..w..w... - 0x00, 0x04, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x17, 0x00, 0x22, 0x00, 0x33, // .............".3 - 0x00, 0x67, 0x00, 0x00, 0x05, 0x14, 0x07, 0x21, 0x22, 0x26, 0x27, 0x3e, 0x03, 0x33, 0x32, 0x17, // .g.....!"&'>.32. - 0x1e, 0x09, 0x01, 0x06, 0x07, 0x11, 0x16, 0x33, 0x32, 0x37, 0x06, 0x15, 0x14, 0x13, 0x14, 0x06, // .......327...... - 0x23, 0x22, 0x2e, 0x03, 0x35, 0x34, 0x36, 0x33, 0x32, 0x1e, 0x02, 0x25, 0x11, 0x14, 0x06, 0x23, // #"..54632..%...# - 0x21, 0x36, 0x35, 0x34, 0x2e, 0x04, 0x35, 0x34, 0x3e, 0x03, 0x34, 0x26, 0x27, 0x2e, 0x03, 0x27, // !654..54>.4&'..' - 0x33, 0x37, 0x21, 0x22, 0x06, 0x07, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x1d, 0x01, 0x21, 0x11, // 37!"..463!2...!. - 0x23, 0x11, 0x21, 0x15, 0x21, 0x11, 0x33, 0x11, 0x02, 0xa6, 0x0a, 0xfe, 0x84, 0x5f, 0x99, 0x1b, // #.!.!.3......_.. - 0x18, 0x5a, 0x6e, 0x68, 0x37, 0x20, 0x11, 0x06, 0x31, 0x11, 0x2d, 0x13, 0x24, 0x11, 0x19, 0x0a, // .Znh7 ..1.-.$... - 0x09, 0xfe, 0xdb, 0xea, 0x97, 0x67, 0xaa, 0x20, 0x26, 0x15, 0xec, 0x57, 0x61, 0x33, 0x5c, 0x40, // .....g. &..Wa3.@ - 0x30, 0x17, 0x67, 0x5d, 0x42, 0x6a, 0x3e, 0x20, 0x03, 0xd2, 0xa9, 0x77, 0xfe, 0x2c, 0x27, 0x2c, // 0.g]Bj> ...w.,', - 0x43, 0x4d, 0x43, 0x2c, 0x2e, 0x42, 0x41, 0x2e, 0x35, 0x31, 0x06, 0x10, 0x09, 0x0b, 0x05, 0x87, // CMC,.BA.51...... - 0x87, 0xfe, 0x4b, 0x8a, 0xd5, 0x4c, 0xa2, 0x7e, 0x03, 0xc0, 0x77, 0xa9, 0xff, 0x00, 0x80, 0xff, // ..K..L.~..w..... - 0x00, 0x01, 0x00, 0x80, 0x39, 0x26, 0x21, 0x71, 0x5b, 0x2d, 0x41, 0x22, 0x0e, 0x02, 0x04, 0x22, // ....9&!q[-A"..." - 0x0c, 0x22, 0x11, 0x22, 0x19, 0x24, 0x21, 0x27, 0x01, 0x4a, 0x07, 0x4e, 0x01, 0xb1, 0x76, 0x05, // .".".$!'.J.N..v. - 0x3d, 0x19, 0x43, 0x01, 0xad, 0x64, 0x79, 0x34, 0x53, 0x68, 0x68, 0x2f, 0x60, 0x8a, 0x52, 0x7e, // =.C..dy4Shh/`.R~ - 0x86, 0x1e, 0xfd, 0x20, 0x77, 0xa9, 0x49, 0x54, 0x42, 0x71, 0x49, 0x45, 0x32, 0x3b, 0x1e, 0x24, // ... w.ITBqIE2;.$ - 0x40, 0x3b, 0x46, 0x74, 0x92, 0x91, 0x2e, 0x06, 0x0a, 0x05, 0x0e, 0x0a, 0x40, 0x4d, 0x5f, 0x7e, // @;Ft........@M_~ - 0xae, 0xa9, 0x77, 0x60, 0x01, 0x00, 0xff, 0x00, 0x80, 0xff, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, // ..w`............ - 0x00, 0x04, 0x00, 0x00, 0xff, 0x00, 0x06, 0x80, 0x05, 0x80, 0x00, 0x1c, 0x00, 0x2d, 0x00, 0x63, // .............-.c - 0x00, 0x6f, 0x00, 0x00, 0x25, 0x34, 0x2e, 0x08, 0x27, 0x26, 0x23, 0x22, 0x0e, 0x03, 0x15, 0x14, // .o..%4..'&#".... - 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x02, 0x03, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x06, 0x15, 0x14, 0x1e, // ..32>..4..#".... - 0x03, 0x33, 0x32, 0x36, 0x03, 0x21, 0x07, 0x23, 0x1e, 0x01, 0x15, 0x14, 0x0e, 0x03, 0x15, 0x14, // .326.!.#........ - 0x1e, 0x05, 0x15, 0x14, 0x07, 0x06, 0x21, 0x22, 0x2e, 0x03, 0x35, 0x34, 0x37, 0x3e, 0x03, 0x37, // ......!"..547>.7 - 0x26, 0x35, 0x34, 0x3e, 0x02, 0x37, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x37, 0x36, 0x01, // &54>.7.#"&54676. - 0x15, 0x21, 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, 0x11, 0x33, 0x11, 0x03, 0x6c, 0x09, 0x0a, 0x19, // .!.#.!5!.3..l... - 0x11, 0x24, 0x13, 0x2d, 0x11, 0x31, 0x06, 0x11, 0x21, 0x36, 0x68, 0x70, 0x54, 0x36, 0x47, 0x73, // .$.-.1..!6hpT6Gs - 0x7e, 0x40, 0x3b, 0x6b, 0x5e, 0x37, 0x78, 0x21, 0x3d, 0x6b, 0x42, 0x5d, 0x66, 0x17, 0x30, 0x40, // ~@;k^7x!=kB]f.0@ - 0x5c, 0x33, 0x61, 0x57, 0x83, 0x01, 0xb5, 0x87, 0x87, 0x47, 0x4e, 0x2e, 0x42, 0x42, 0x2e, 0x21, // .3aW.....GN.BB.! - 0x35, 0x40, 0x40, 0x35, 0x21, 0x8c, 0x98, 0xfe, 0xf4, 0x3b, 0x79, 0x7b, 0x5e, 0x3c, 0x25, 0x20, // 5@@5!....;y{^<% - 0x80, 0xa2, 0x94, 0x4c, 0x40, 0x04, 0x06, 0x0a, 0x02, 0x28, 0x1e, 0x95, 0xd5, 0xbe, 0x8b, 0x5e, // ...L@....(.....^ - 0x04, 0x6c, 0xff, 0x00, 0x80, 0xff, 0x00, 0x01, 0x00, 0x80, 0x47, 0x15, 0x27, 0x21, 0x24, 0x19, // .l........G.'!$. - 0x22, 0x11, 0x22, 0x0c, 0x22, 0x04, 0x02, 0x0e, 0x24, 0x38, 0x5e, 0x3c, 0x44, 0x6b, 0x3d, 0x1e, // "."."...$8^.?.>.;.5463! + 0x32, 0x16, 0x02, 0x80, 0x4c, 0x68, 0x4c, 0x4c, 0x68, 0xfe, 0xcc, 0x01, 0x80, 0x9e, 0x0d, 0x09, // 2...LhLLh....... + 0xc3, 0x09, 0x05, 0x00, 0x4c, 0x68, 0x4c, 0x4c, 0x68, 0x01, 0x4c, 0x08, 0x13, 0x0e, 0x21, 0x0c, // ....LhLLh.L...!. + 0x27, 0x03, 0x96, 0xd4, 0x96, 0xfe, 0x80, 0x96, 0xd4, 0x96, 0x40, 0x03, 0x27, 0x0c, 0x21, 0x0e, // '.........@.'.!. + 0x13, 0x08, 0x26, 0x1a, 0x01, 0x01, 0x04, 0x09, 0x13, 0x0d, 0xc6, 0x13, 0x3f, 0x1b, 0xa0, 0x26, // ..&.........?..& + 0x1a, 0x04, 0x00, 0x1a, 0x26, 0x4c, 0x68, 0x4c, 0x4c, 0x68, 0x4c, 0x02, 0x80, 0x01, 0x00, 0x09, // ....&LhLLhL..... + 0xc3, 0x09, 0x0d, 0xfd, 0xae, 0x68, 0x4c, 0x4c, 0x68, 0x4c, 0x04, 0xc0, 0xfc, 0x00, 0x0f, 0x17, // .....hLLhL...... + 0x0e, 0x09, 0x03, 0x01, 0x01, 0x6a, 0x96, 0x96, 0x6a, 0x6a, 0x96, 0x96, 0x6a, 0x01, 0x01, 0x03, // .....j..jj..j... + 0x09, 0x0e, 0x17, 0x0f, 0x1a, 0x26, 0x01, 0x40, 0x08, 0x36, 0x16, 0x2f, 0x1b, 0x22, 0x0d, 0xc6, // .....&.@.6./.".. + 0x13, 0x1a, 0xc0, 0x1a, 0x26, 0x26, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // ....&&.......... + 0x05, 0x80, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x10, 0x02, 0x04, 0x23, 0x22, 0x27, 0x36, 0x37, 0x36, // ...J......#"'676 + 0x37, 0x1e, 0x01, 0x33, 0x32, 0x3e, 0x01, 0x35, 0x34, 0x2e, 0x01, 0x23, 0x22, 0x0e, 0x03, 0x15, // 7..32>.54..#"... + 0x14, 0x16, 0x17, 0x16, 0x37, 0x3e, 0x01, 0x37, 0x36, 0x27, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, // ....7>.76'&54632 + 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x26, 0x37, 0x3e, 0x02, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, // ....#"&7>.54&#". + 0x15, 0x14, 0x17, 0x03, 0x06, 0x17, 0x26, 0x02, 0x35, 0x34, 0x12, 0x24, 0x20, 0x04, 0x06, 0x00, // ......&.54.$ ... + 0xce, 0xfe, 0x9f, 0xd1, 0x6f, 0x6b, 0x3b, 0x13, 0x09, 0x2d, 0x14, 0x6a, 0x3d, 0x79, 0xbe, 0x68, // ....ok;..-.j=y.h + 0x77, 0xe2, 0x8e, 0x69, 0xb6, 0x7f, 0x5b, 0x2b, 0x50, 0x4d, 0x1e, 0x08, 0x02, 0x0c, 0x02, 0x06, // w..i..[+PM...... + 0x11, 0x33, 0xd1, 0xa9, 0x97, 0xa9, 0x89, 0x6b, 0x3d, 0x4a, 0x0e, 0x08, 0x25, 0x17, 0x36, 0x32, // .3.....k=J..%.62 + 0x3e, 0x56, 0x19, 0x63, 0x11, 0x04, 0xce, 0xfe, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x03, // >V.c......a...a. + 0x51, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0x20, 0x5d, 0x47, 0x22, 0xb1, 0x27, 0x39, 0x89, 0xf0, 0x96, // Q.^... ]G".'9... + 0x72, 0xc8, 0x7e, 0x3a, 0x60, 0x7d, 0x86, 0x43, 0x68, 0x9e, 0x20, 0x0c, 0x20, 0x07, 0x30, 0x06, // r.~:`}.Ch. . .0. + 0x17, 0x14, 0x3d, 0x5a, 0x97, 0xd9, 0xa4, 0x83, 0xaa, 0xee, 0x57, 0x3d, 0x23, 0x75, 0x59, 0x1f, // ..=Z......W=#uY. + 0x32, 0x42, 0x72, 0x55, 0x49, 0x31, 0xfe, 0x5e, 0x46, 0x6b, 0x5b, 0x01, 0x7c, 0xe9, 0xd1, 0x01, // 2BrUI1.^Fk[.|... + 0x61, 0xce, 0xce, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x4c, // a..............L + 0x00, 0x00, 0x01, 0x32, 0x16, 0x15, 0x11, 0x14, 0x06, 0x23, 0x21, 0x36, 0x37, 0x36, 0x37, 0x1e, // ...2.....#!6767. + 0x01, 0x33, 0x32, 0x12, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x03, 0x15, 0x14, 0x16, 0x17, // .32.54..#"...... + 0x16, 0x36, 0x37, 0x36, 0x37, 0x36, 0x27, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, // .67676'&54632... + 0x06, 0x23, 0x22, 0x26, 0x37, 0x3e, 0x02, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x17, // .#"&7>.54&#".... + 0x03, 0x06, 0x17, 0x23, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x04, 0xe0, 0x77, 0xa9, 0xa9, // ...#"&5.463..w.. + 0x77, 0xfd, 0x2b, 0x55, 0x17, 0x09, 0x2c, 0x15, 0x69, 0x3c, 0xb5, 0xe5, 0x46, 0x7b, 0xb6, 0x6a, // w.+U..,.i<..F{.j + 0x68, 0xb5, 0x7d, 0x5a, 0x2b, 0x4f, 0x4d, 0x0d, 0x15, 0x04, 0x0a, 0x05, 0x06, 0x11, 0x32, 0xcf, // h.}Z+OM.......2. + 0xa7, 0x95, 0xa7, 0x87, 0x6a, 0x3c, 0x4a, 0x0e, 0x08, 0x25, 0x16, 0x35, 0x31, 0x3d, 0x55, 0x18, // ....jX.. + 0xa2, 0x81, 0xa8, 0xec, 0x57, 0x3c, 0x22, 0x75, 0x57, 0x1f, 0x31, 0x41, 0x71, 0x53, 0x48, 0x31, // ....W<"uW.1AqSH1 + 0xfe, 0x62, 0x64, 0x9a, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // .bd..w..w....... + 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x1b, 0x00, 0x27, 0x00, 0x37, 0x00, 0x00, 0x01, 0x34, // .........'.7...4 + 0x27, 0x21, 0x15, 0x33, 0x0e, 0x03, 0x23, 0x22, 0x26, 0x34, 0x36, 0x33, 0x32, 0x17, 0x37, 0x26, // '!.3..#"&4632.7& + 0x23, 0x22, 0x06, 0x10, 0x16, 0x33, 0x32, 0x36, 0x25, 0x33, 0x35, 0x23, 0x35, 0x23, 0x15, 0x23, // #"...326%35#5#.# + 0x15, 0x33, 0x15, 0x33, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, // .3.3....#!"&5.46 + 0x33, 0x21, 0x32, 0x16, 0x03, 0x95, 0x06, 0xfe, 0x96, 0xd9, 0x03, 0x1b, 0x30, 0x55, 0x36, 0x63, // 3!2.........0U6c + 0x8c, 0x8c, 0x63, 0x5c, 0x3d, 0x68, 0x6c, 0x95, 0xa0, 0xe0, 0xe0, 0xa0, 0xa5, 0xcb, 0x01, 0x59, // ..c.=hl........Y + 0x6d, 0x6d, 0x6e, 0x6e, 0x6e, 0x6e, 0x01, 0x12, 0xa9, 0x77, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, // mmnnnn...w.@w..w + 0x03, 0xc0, 0x77, 0xa9, 0x02, 0x77, 0x1a, 0x26, 0x84, 0x18, 0x34, 0x36, 0x23, 0x8e, 0xc8, 0x8e, // ..w..w.&..46#... + 0x3b, 0x65, 0x64, 0xe1, 0xfe, 0xc2, 0xe1, 0xd2, 0x77, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x02, 0x85, // ;ed.....wnnnnn.. + 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0xa9, 0x00, 0x00, 0x02, 0x00, 0x00, // .@w..w..w....... + 0xff, 0xa3, 0x09, 0x00, 0x05, 0x5d, 0x00, 0x23, 0x00, 0x2f, 0x00, 0x00, 0x01, 0x14, 0x02, 0x04, // .....].#./...... + 0x23, 0x22, 0x24, 0x26, 0x02, 0x10, 0x12, 0x36, 0x24, 0x33, 0x20, 0x17, 0x07, 0x26, 0x23, 0x22, // #"$&...6$3 ..&#" + 0x0e, 0x01, 0x14, 0x1e, 0x01, 0x33, 0x32, 0x3e, 0x03, 0x37, 0x21, 0x35, 0x21, 0x16, 0x25, 0x15, // .....32>.7!5!.%. + 0x23, 0x15, 0x23, 0x35, 0x23, 0x35, 0x33, 0x35, 0x33, 0x15, 0x05, 0x9d, 0xae, 0xfe, 0xbe, 0xd0, // #.#5#5353....... + 0x95, 0xfe, 0xf0, 0xc4, 0x74, 0x74, 0xc4, 0x01, 0x10, 0x95, 0x01, 0x1e, 0xcd, 0xc7, 0x75, 0xaf, // ....tt........u. + 0x7b, 0xd1, 0x7a, 0x7a, 0xd1, 0x7b, 0x53, 0x8b, 0x5a, 0x43, 0x1f, 0x06, 0xfe, 0x60, 0x02, 0xb4, // {.zz.{S.ZC...`.. + 0x0c, 0x03, 0x63, 0xd1, 0xd2, 0xd1, 0xd1, 0xd2, 0x02, 0x6f, 0xd0, 0xfe, 0xbb, 0xb7, 0x74, 0xc4, // ..c......o....t. + 0x01, 0x10, 0x01, 0x2a, 0x01, 0x10, 0xc4, 0x74, 0xc0, 0xbf, 0x71, 0x7c, 0xd5, 0xfc, 0xd5, 0x7c, // ...*...t..q|...| + 0x2e, 0x45, 0x58, 0x4e, 0x23, 0xfc, 0x3f, 0x3f, 0xd2, 0xd1, 0xd1, 0xd2, 0xd1, 0xd1, 0x00, 0x00, // .EXN#.??........ 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x05, 0x00, 0x00, 0x0c, 0x00, 0x1c, 0x00, 0x2c, // ..............., 0x00, 0x3c, 0x00, 0x00, 0x01, 0x21, 0x35, 0x23, 0x11, 0x23, 0x07, 0x17, 0x36, 0x37, 0x33, 0x11, // .<...!5#.#..673. 0x23, 0x24, 0x14, 0x0e, 0x02, 0x22, 0x2e, 0x02, 0x34, 0x3e, 0x02, 0x32, 0x1e, 0x01, 0x01, 0x11, // #$..."..4>.2.... @@ -2686,47 +3029,50 @@ static const uint8_t s_iconsFontAwesomeTtf[80776] = 0xa0, 0xfc, 0x00, 0x80, 0x38, 0x28, 0x02, 0x40, 0x28, 0x38, 0x02, 0x00, 0x84, 0x5c, 0x40, 0x40, // ....8(.@(8....@@ 0x5c, 0x84, 0x04, 0x80, 0x80, 0x80, 0xfb, 0x00, 0x84, 0x5c, 0x03, 0x40, 0x5c, 0x84, 0xfb, 0x00, // ...........@.... 0x05, 0x00, 0xa0, 0x28, 0x38, 0x38, 0x28, 0xa0, 0xe0, 0xfc, 0xc0, 0x5c, 0x84, 0x05, 0x00, 0x84, // ...(88(......... - 0x00, 0x02, 0x00, 0x00, 0xff, 0x00, 0x06, 0x80, 0x06, 0x00, 0x00, 0x0b, 0x00, 0x2d, 0x00, 0x00, // .............-.. + 0x00, 0x02, 0x00, 0x40, 0xff, 0x00, 0x06, 0xc0, 0x06, 0x00, 0x00, 0x0b, 0x00, 0x33, 0x00, 0x00, // ...@.........3.. 0x04, 0x34, 0x23, 0x22, 0x26, 0x35, 0x34, 0x22, 0x15, 0x14, 0x16, 0x33, 0x01, 0x14, 0x06, 0x23, // .4#"&54"...3...# - 0x21, 0x14, 0x06, 0x22, 0x26, 0x35, 0x21, 0x22, 0x26, 0x35, 0x36, 0x12, 0x11, 0x34, 0x36, 0x37, // !.."&5!"&56..467 - 0x26, 0x35, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x07, 0x1e, 0x01, 0x15, 0x10, 0x12, 0x03, 0x50, // &5462..........P - 0x10, 0x3b, 0x55, 0x20, 0x67, 0x49, 0x03, 0x40, 0x4c, 0x34, 0xfe, 0x40, 0x96, 0xd4, 0x96, 0xfe, // .;U gI.@L4.@.... - 0x40, 0x34, 0x4c, 0xbe, 0xc2, 0xc0, 0xa8, 0x08, 0x38, 0x50, 0x38, 0x08, 0xa8, 0xc0, 0xc2, 0xb0, // @4L.....8P8..... - 0x20, 0x55, 0x3b, 0x10, 0x10, 0x49, 0x67, 0x01, 0x30, 0x34, 0x4c, 0x6a, 0x96, 0x96, 0x6a, 0x4c, // U;..Ig.04Lj..jL - 0x34, 0xa1, 0x01, 0xd9, 0x01, 0x06, 0xa5, 0xc2, 0x14, 0x12, 0x13, 0x28, 0x38, 0x38, 0x28, 0x13, // 4..........(88(. - 0x12, 0x14, 0xc2, 0xa5, 0xfe, 0xfa, 0xfe, 0x27, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x07, 0x40, // .......'.......@ - 0x05, 0x00, 0x00, 0x07, 0x00, 0x0f, 0x00, 0x22, 0x00, 0x00, 0x00, 0x34, 0x26, 0x2b, 0x01, 0x11, // ......."...4&+.. - 0x33, 0x32, 0x01, 0x21, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x00, 0x10, 0x06, 0x2b, 0x01, 0x15, // 32.!..#!"&...+.. - 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x06, 0x80, 0x70, // ..#!"&5.463!2..p - 0x50, 0x40, 0x40, 0x50, 0xf9, 0xf0, 0x07, 0x00, 0x96, 0x6a, 0xfb, 0x00, 0x6a, 0x96, 0x07, 0x40, // P@@P.....j..j..@ - 0xe1, 0x9f, 0x40, 0x84, 0x5c, 0xfd, 0x40, 0x5c, 0x84, 0x26, 0x1a, 0x04, 0x80, 0x9f, 0x03, 0x30, // ..@...@..&.....0 - 0xa0, 0x70, 0xfe, 0x80, 0xfd, 0xc0, 0x6a, 0x96, 0x96, 0x04, 0x09, 0xfe, 0xc2, 0xe1, 0x20, 0x5c, // .p....j....... . - 0x84, 0x84, 0x5c, 0x02, 0xe0, 0x1a, 0x26, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x00, 0x05, 0x80, // ......&......... - 0x06, 0x00, 0x00, 0x2d, 0x00, 0x42, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, 0x07, 0x11, 0x14, 0x06, // ...-.B.......... - 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x32, 0x16, 0x15, 0x11, // +."&5...5.462... - 0x14, 0x16, 0x32, 0x36, 0x35, 0x11, 0x34, 0x36, 0x32, 0x16, 0x15, 0x11, 0x14, 0x16, 0x32, 0x36, // ..265.462.....26 - 0x35, 0x11, 0x34, 0x36, 0x32, 0x16, 0x05, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, // 5.462.....+."&5. - 0x23, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x02, 0x80, 0x47, 0x39, 0x4c, // #"&5.463!2...G9L - 0x34, 0x80, 0x34, 0x4c, 0x39, 0x47, 0x26, 0x34, 0x26, 0x26, 0x34, 0x26, 0x26, 0x34, 0x26, 0x26, // 4.4L9G&4&&4&&4&& - 0x34, 0x26, 0x26, 0x34, 0x26, 0x03, 0x00, 0x4c, 0x34, 0x80, 0x34, 0x4c, 0xe0, 0x0d, 0x13, 0xbc, // 4&&4&..L4.4L.... - 0x84, 0x01, 0x00, 0x1a, 0x26, 0x05, 0xc0, 0xfd, 0x80, 0x3d, 0x64, 0x14, 0xfc, 0xf5, 0x34, 0x4c, // ....&....=d...4L - 0x4c, 0x34, 0x03, 0x0b, 0x14, 0x64, 0x3d, 0x02, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0xfe, 0x60, 0x1a, // L4...d=...&&..`. - 0x26, 0x26, 0x1a, 0x01, 0xa0, 0x1a, 0x26, 0x26, 0x1a, 0xfe, 0x60, 0x1a, 0x26, 0x26, 0x1a, 0x01, // &&....&&..`.&&.. - 0xa0, 0x1a, 0x26, 0x26, 0x1a, 0xf9, 0xc0, 0x34, 0x4c, 0x4c, 0x34, 0x02, 0x00, 0x13, 0x0d, 0x03, // ..&&...4LL4..... - 0x20, 0x84, 0xbc, 0x26, 0x00, 0x05, 0x00, 0x00, 0xff, 0x80, 0x05, 0x00, 0x05, 0x80, 0x00, 0x0f, // ..&............ - 0x00, 0x1f, 0x00, 0x28, 0x00, 0x2f, 0x00, 0x43, 0x00, 0x00, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, // ...(./.C......#! - 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x35, 0x15, 0x14, 0x06, 0x23, 0x21, // "&=.463!2.5...#! - 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x21, 0x11, 0x21, 0x22, 0x26, // "&=.463!2..!.!"& - 0x35, 0x11, 0x21, 0x01, 0x21, 0x26, 0x27, 0x01, 0x26, 0x27, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, // 5.!.!&'.&'....#! - 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x17, 0x01, 0x1e, 0x01, 0x04, 0x00, // "&5.463!2....... - 0x12, 0x0e, 0xfd, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x02, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xfd, 0x40, // ...@...........@ - 0x0e, 0x12, 0x12, 0x0e, 0x02, 0xc0, 0x0e, 0x12, 0xfc, 0x80, 0x04, 0x00, 0xfe, 0x60, 0x28, 0x38, // .............`(8 - 0xfe, 0x00, 0x02, 0x80, 0x01, 0x78, 0x0a, 0x0c, 0xfe, 0xc7, 0x0c, 0x1d, 0x02, 0x00, 0x38, 0x28, // .....x........8( - 0xfb, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x02, 0x80, 0x28, 0x60, 0x1c, 0x01, 0x38, 0x1c, 0x28, 0x01, // ..(88(..(`..8.(. - 0x60, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0xf2, 0x40, 0x0e, 0x12, 0x12, 0x0e, // `@....@....@.... - 0x40, 0x0e, 0x12, 0x12, 0xfd, 0x92, 0x03, 0x00, 0x38, 0x28, 0x01, 0xa0, 0xfe, 0x80, 0x1d, 0x0c, // @.......8(...... - 0x01, 0x39, 0x0c, 0x0a, 0xfe, 0x68, 0xfc, 0x80, 0x28, 0x38, 0x38, 0x28, 0x05, 0x40, 0x28, 0x38, // .9...h..(88(.@(8 - 0x28, 0x1c, 0xfe, 0xc8, 0x1c, 0x60, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0xff, 0x00, 0x05, 0x80, // (....`.......... + 0x21, 0x14, 0x06, 0x22, 0x26, 0x35, 0x21, 0x22, 0x26, 0x35, 0x3e, 0x04, 0x35, 0x34, 0x12, 0x37, // !.."&5!"&5>.54.7 + 0x26, 0x35, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x07, 0x16, 0x12, 0x15, 0x14, 0x1e, 0x03, 0x03, // &5462........... + 0x90, 0x10, 0x3b, 0x55, 0x20, 0x67, 0x49, 0x03, 0x40, 0x4c, 0x34, 0xfe, 0x40, 0x96, 0xd4, 0x96, // ..;U gI.@L4.@... + 0xfe, 0x40, 0x34, 0x4c, 0x32, 0x52, 0x58, 0x3d, 0x27, 0xea, 0xbe, 0x08, 0x38, 0x50, 0x38, 0x08, // .@4L2RX='...8P8. + 0xbe, 0xea, 0x27, 0x3d, 0x58, 0x52, 0xb0, 0x20, 0x55, 0x3b, 0x10, 0x10, 0x49, 0x67, 0x01, 0x30, // ..'=XR. U;..Ig.0 + 0x34, 0x4c, 0x6a, 0x96, 0x96, 0x6a, 0x4c, 0x34, 0x2a, 0x5c, 0x93, 0xaa, 0xf2, 0x8b, 0x98, 0x01, // 4Lj..jL4*....... + 0x05, 0x1c, 0x13, 0x14, 0x28, 0x38, 0x38, 0x28, 0x14, 0x13, 0x1c, 0xfe, 0xfb, 0x98, 0x8b, 0xf2, // ....(88(........ + 0xaa, 0x93, 0x5c, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x07, 0x40, 0x05, 0x00, 0x00, 0x07, // ...........@.... + 0x00, 0x0f, 0x00, 0x22, 0x00, 0x00, 0x00, 0x34, 0x26, 0x2b, 0x01, 0x11, 0x33, 0x32, 0x01, 0x21, // ..."...4&+..32.! + 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x00, 0x10, 0x06, 0x2b, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, // ..#!"&...+....#! + 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x06, 0x80, 0x70, 0x50, 0x40, 0x40, 0x50, // "&5.463!2..pP@@P + 0xf9, 0xf0, 0x07, 0x00, 0x96, 0x6a, 0xfb, 0x00, 0x6a, 0x96, 0x07, 0x40, 0xe1, 0x9f, 0x40, 0x84, // .....j..j..@..@. + 0x5c, 0xfd, 0x40, 0x5c, 0x84, 0x26, 0x1a, 0x04, 0x80, 0x9f, 0x03, 0x30, 0xa0, 0x70, 0xfe, 0x80, // ..@..&.....0.p.. + 0xfd, 0xc0, 0x6a, 0x96, 0x96, 0x04, 0x09, 0xfe, 0xc2, 0xe1, 0x20, 0x5c, 0x84, 0x84, 0x5c, 0x02, // ..j....... ..... + 0xe0, 0x1a, 0x26, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x00, 0x05, 0x80, 0x06, 0x00, 0x00, 0x2d, // ..&............- + 0x00, 0x42, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, 0x07, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, // .B..........+."& + 0x35, 0x11, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x32, 0x16, 0x15, 0x11, 0x14, 0x16, 0x32, 0x36, // 5...5.462.....26 + 0x35, 0x11, 0x34, 0x36, 0x32, 0x16, 0x15, 0x11, 0x14, 0x16, 0x32, 0x36, 0x35, 0x11, 0x34, 0x36, // 5.462.....265.46 + 0x32, 0x16, 0x05, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, 0x23, 0x22, 0x26, 0x35, // 2.....+."&5.#"&5 + 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x02, 0x80, 0x47, 0x39, 0x4c, 0x34, 0x80, 0x34, 0x4c, // .463!2...G9L4.4L + 0x39, 0x47, 0x26, 0x34, 0x26, 0x26, 0x34, 0x26, 0x26, 0x34, 0x26, 0x26, 0x34, 0x26, 0x26, 0x34, // 9G&4&&4&&4&&4&&4 + 0x26, 0x03, 0x00, 0x4c, 0x34, 0x80, 0x34, 0x4c, 0xe0, 0x0d, 0x13, 0xbc, 0x84, 0x01, 0x00, 0x1a, // &..L4.4L........ + 0x26, 0x05, 0xc0, 0xfd, 0x80, 0x3d, 0x64, 0x14, 0xfc, 0xf5, 0x34, 0x4c, 0x4c, 0x34, 0x03, 0x0b, // &....=d...4LL4.. + 0x14, 0x64, 0x3d, 0x02, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0xfe, 0x60, 0x1a, 0x26, 0x26, 0x1a, 0x01, // .d=...&&..`.&&.. + 0xa0, 0x1a, 0x26, 0x26, 0x1a, 0xfe, 0x60, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0xa0, 0x1a, 0x26, 0x26, // ..&&..`.&&....&& + 0x1a, 0xf9, 0xc0, 0x34, 0x4c, 0x4c, 0x34, 0x02, 0x00, 0x13, 0x0d, 0x03, 0x20, 0x84, 0xbc, 0x26, // ...4LL4..... ..& + 0x00, 0x06, 0x00, 0x00, 0xff, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x13, 0x00, 0x1a, 0x00, 0x23, // ...............# + 0x00, 0x33, 0x00, 0x43, 0x00, 0x53, 0x00, 0x00, 0x01, 0x1e, 0x01, 0x15, 0x11, 0x14, 0x06, 0x23, // .3.C.S.........# + 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x17, 0x07, 0x11, 0x21, 0x26, // !"&5.463!2....!& + 0x27, 0x01, 0x26, 0x01, 0x11, 0x21, 0x22, 0x26, 0x35, 0x11, 0x21, 0x11, 0x01, 0x34, 0x36, 0x33, // '.&..!"&5.!..463 + 0x21, 0x32, 0x16, 0x1d, 0x01, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x05, 0x32, 0x16, 0x1d, // !2.....#!"&5.2.. + 0x01, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x01, 0x32, 0x16, 0x1d, // ...#!"&=.463.2.. + 0x01, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x05, 0xbc, 0x1c, 0x28, // ...#!"&=.463...( + 0x38, 0x28, 0xfa, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x03, 0x80, 0x28, 0x60, 0x1c, 0x84, 0x01, 0x78, // 8(..(88(..(`...x + 0x0a, 0x0c, 0xfe, 0xc7, 0x0c, 0x01, 0x63, 0xfe, 0x60, 0x28, 0x38, 0xfd, 0x00, 0x01, 0x00, 0x12, // ......c.`(8..... + 0x0e, 0x02, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xfd, 0x40, 0x0e, 0x12, 0x02, 0xe0, 0x0e, 0x12, 0x12, // ........@....... + 0x0e, 0xfd, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x02, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xfd, 0x40, 0x0e, // ..@...........@. + 0x12, 0x12, 0x0e, 0x04, 0x84, 0x1c, 0x60, 0x28, 0xfb, 0x80, 0x28, 0x38, 0x38, 0x28, 0x06, 0x40, // ......`(..(88(.@ + 0x28, 0x38, 0x28, 0x1c, 0x44, 0xfe, 0x88, 0x1d, 0x0c, 0x01, 0x39, 0x0c, 0xfa, 0x12, 0x04, 0x00, // (8(.D.....9..... + 0x38, 0x28, 0x01, 0xa0, 0xfa, 0x00, 0x03, 0x60, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, // 8(.....`....@... + 0x0e, 0xa0, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0xff, 0x00, 0x12, 0x0e, // ....@....@...... + 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x00, 0x14, 0x00, 0x00, 0xff, 0x00, 0x05, 0x80, // @....@.......... 0x06, 0x00, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x3f, 0x00, 0x4f, 0x00, 0x5f, 0x00, 0x6f, // ......./.?.O._.o 0x00, 0x7f, 0x00, 0x8f, 0x00, 0x9f, 0x00, 0xaf, 0x00, 0xbf, 0x00, 0xcf, 0x00, 0xdf, 0x00, 0xef, // ................ 0x00, 0xff, 0x01, 0x0f, 0x01, 0x1f, 0x01, 0x2d, 0x01, 0x3d, 0x00, 0x00, 0x25, 0x15, 0x14, 0x06, // .......-.=..%... @@ -2851,13 +3197,13 @@ static const uint8_t s_iconsFontAwesomeTtf[80776] = 0x04, 0x80, 0x00, 0x3a, 0x00, 0x00, 0x01, 0x06, 0x0d, 0x01, 0x07, 0x23, 0x01, 0x33, 0x32, 0x16, // ...:.......#.32. 0x14, 0x06, 0x2b, 0x03, 0x35, 0x33, 0x11, 0x23, 0x07, 0x23, 0x27, 0x35, 0x33, 0x35, 0x33, 0x35, // ..+.53.#.#'53535 0x27, 0x35, 0x37, 0x35, 0x23, 0x35, 0x23, 0x35, 0x37, 0x33, 0x17, 0x33, 0x11, 0x23, 0x35, 0x3b, // '575#5#573.3.#5; - 0x02, 0x32, 0x16, 0x14, 0x06, 0x2b, 0x01, 0x01, 0x33, 0x17, 0x05, 0x04, 0x17, 0x16, 0x07, 0x80, // .2...+..3....... + 0x02, 0x32, 0x16, 0x14, 0x06, 0x2b, 0x01, 0x01, 0x33, 0x17, 0x05, 0x1e, 0x01, 0x17, 0x07, 0x80, // .2...+..3....... 0x01, 0xfe, 0xe1, 0xfe, 0xa0, 0xe0, 0x40, 0xfe, 0xdb, 0x45, 0x1a, 0x26, 0x26, 0x1a, 0x60, 0xa0, // ......@..E.&&.`. 0x40, 0x40, 0xa0, 0xc0, 0x60, 0x20, 0x20, 0x80, 0xc0, 0xc0, 0x80, 0x20, 0x20, 0x60, 0xc0, 0xa0, // @@..` .... `.. - 0x40, 0x40, 0xa0, 0x60, 0x1a, 0x26, 0x26, 0x1a, 0x45, 0x01, 0x25, 0x40, 0xe0, 0x01, 0x60, 0x01, // @@.`.&&.E.%@..`. - 0x05, 0x1a, 0x01, 0x02, 0x40, 0x20, 0x40, 0x20, 0x40, 0xfe, 0xa0, 0x09, 0x0e, 0x09, 0x20, 0x01, // ....@ @ @..... . - 0xa0, 0xe0, 0x20, 0xc0, 0x20, 0x08, 0x18, 0x80, 0x18, 0x08, 0x20, 0xc0, 0x20, 0xe0, 0x01, 0xa0, // .. . ..... . ... - 0x20, 0x09, 0x0e, 0x09, 0xfe, 0xa0, 0x40, 0x20, 0x3a, 0x23, 0x03, 0x00, 0x00, 0x02, 0x00, 0x40, // .....@ :#.....@ + 0x40, 0x40, 0xa0, 0x60, 0x1a, 0x26, 0x26, 0x1a, 0x45, 0x01, 0x25, 0x40, 0xe0, 0x01, 0x60, 0x80, // @@.`.&&.E.%@..`. + 0x90, 0x08, 0x02, 0x40, 0x20, 0x40, 0x20, 0x40, 0xfe, 0xa0, 0x09, 0x0e, 0x09, 0x20, 0x01, 0xa0, // ...@ @ @..... .. + 0xe0, 0x20, 0xc0, 0x20, 0x08, 0x18, 0x80, 0x18, 0x08, 0x20, 0xc0, 0x20, 0xe0, 0x01, 0xa0, 0x20, // . . ..... . ... + 0x09, 0x0e, 0x09, 0xfe, 0xa0, 0x40, 0x20, 0x1c, 0x30, 0x0a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x40, // .....@ .0......@ 0x00, 0x00, 0x06, 0x80, 0x05, 0x80, 0x00, 0x06, 0x00, 0x18, 0x00, 0x00, 0x01, 0x11, 0x21, 0x11, // ..............!. 0x14, 0x16, 0x33, 0x01, 0x15, 0x21, 0x35, 0x37, 0x23, 0x22, 0x26, 0x35, 0x11, 0x27, 0x37, 0x21, // ..3..!57#"&5.'7! 0x37, 0x21, 0x17, 0x07, 0x11, 0x02, 0x80, 0xff, 0x00, 0x4b, 0x35, 0x04, 0x80, 0xfb, 0x80, 0x80, // 7!.......K5..... @@ -3006,19 +3352,20 @@ static const uint8_t s_iconsFontAwesomeTtf[80776] = 0x68, 0xbd, 0x8a, 0x51, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x96, 0x6a, 0x20, 0x28, 0x38, 0x70, 0x50, // h..Q&...&.j (8pP 0x01, 0x80, 0x50, 0x70, 0x70, 0x50, 0xfd, 0x40, 0x68, 0xbd, 0x8a, 0x51, 0x26, 0x1a, 0x80, 0x1a, // ..PppP.@h..Q&... 0x26, 0x96, 0x6a, 0x20, 0x28, 0x38, 0x70, 0x50, 0x01, 0x80, 0x50, 0x70, 0x70, 0x00, 0x00, 0x00, // &.j (8pP..Ppp... - 0x00, 0x08, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0xc0, 0x00, 0x09, 0x00, 0x11, 0x00, 0x19, // ................ - 0x00, 0x21, 0x00, 0x29, 0x00, 0x31, 0x00, 0x39, 0x00, 0x41, 0x00, 0x00, 0x24, 0x14, 0x06, 0x23, // .!.).1.9.A..$..# - 0x22, 0x26, 0x34, 0x36, 0x33, 0x32, 0x00, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x00, 0x14, // "&4632..."&462.. - 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x00, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x00, 0x14, // ."&462..."&462.. - 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x24, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x00, 0x14, // ."&462$.."&462.. - 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x02, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x01, 0xf0, // ."&462..."&462.. - 0x55, 0x3b, 0x3c, 0x54, 0x54, 0x3c, 0x3b, 0x02, 0x05, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0xfd, 0xeb, // U;:..5E........ . - 0x5c, 0xa0, 0x31, 0x2e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x04, 0x80, // ..1. ........... - 0x04, 0x80, 0x00, 0x23, 0x00, 0x33, 0x00, 0x43, 0x00, 0x00, 0x01, 0x15, 0x14, 0x06, 0x2b, 0x01, // ...#.3.C......+. - 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x23, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, // ...+."&=.#"&=.46 - 0x3b, 0x01, 0x35, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x1d, 0x01, 0x33, 0x32, 0x16, 0x13, 0x11, // ;.546;.2...32... - 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x13, 0x11, // 4&#!".....3!26.. - 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x03, 0x80, // ..#!"&5.463!2... - 0x12, 0x0e, 0xe0, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0xe0, 0x0e, 0x12, 0x12, 0x0e, 0xe0, 0x12, 0x0e, // .....@.......... - 0x40, 0x0e, 0x12, 0xe0, 0x0e, 0x12, 0x80, 0x38, 0x28, 0xfd, 0x40, 0x28, 0x38, 0x38, 0x28, 0x02, // @......8(.@(88(. - 0xc0, 0x28, 0x38, 0x80, 0x83, 0x5d, 0xfd, 0x40, 0x5d, 0x83, 0x83, 0x5d, 0x02, 0xc0, 0x5d, 0x83, // .(8..].@]..]..]. - 0x02, 0x60, 0x40, 0x0e, 0x12, 0xe0, 0x0e, 0x12, 0x12, 0x0e, 0xe0, 0x12, 0x0e, 0x40, 0x0e, 0x12, // .`@..........@.. - 0xe0, 0x0e, 0x12, 0x12, 0x0e, 0xe0, 0x12, 0xfe, 0x72, 0x02, 0xc0, 0x28, 0x38, 0x38, 0x28, 0xfd, // ........r..(88(. - 0x40, 0x28, 0x38, 0x38, 0x02, 0xe8, 0xfd, 0x40, 0x5c, 0x84, 0x84, 0x5c, 0x02, 0xc0, 0x5d, 0x83, // @(88...@......]. - 0x83, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x04, 0x80, 0x04, 0x80, 0x00, 0x0f, // ................ - 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x00, 0x01, 0x32, 0x16, 0x15, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, // .../...2.....#!" - 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x01, 0x11, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x15, 0x11, // &5.463..4&#!"... - 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x03, 0x32, 0x16, 0x1d, 0x01, 0x14, 0x06, 0x23, 0x21, 0x22, // ..3!26.2.....#!" - 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x03, 0xa0, 0x5d, 0x83, 0x83, 0x5d, 0xfd, 0x40, 0x5d, 0x83, // &=.463..]..].@]. - 0x83, 0x5d, 0x03, 0x20, 0x38, 0x28, 0xfd, 0x40, 0x28, 0x38, 0x38, 0x28, 0x02, 0xc0, 0x28, 0x38, // .]. 8(.@(88(..(8 - 0xa0, 0x0e, 0x12, 0x12, 0x0e, 0xfd, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0x04, 0x80, 0x83, 0x5d, 0xfd, // ..............]. - 0x40, 0x5c, 0x84, 0x84, 0x5c, 0x02, 0xc0, 0x5d, 0x83, 0xfc, 0x60, 0x02, 0xc0, 0x28, 0x38, 0x38, // @......]..`..(88 - 0x28, 0xfd, 0x40, 0x28, 0x38, 0x38, 0x01, 0xc8, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, // (.@(88....@....@ - 0x0e, 0x12, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x14, // ................ - 0x00, 0x1c, 0x00, 0x24, 0x00, 0x34, 0x00, 0x40, 0x00, 0x00, 0x01, 0x0e, 0x01, 0x22, 0x26, 0x27, // ...$.4.@....."&' - 0x26, 0x36, 0x37, 0x36, 0x16, 0x17, 0x1e, 0x01, 0x32, 0x36, 0x37, 0x3e, 0x01, 0x1e, 0x01, 0x00, // &676....267>.... + 0x5c, 0xa0, 0x31, 0x2e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // ..1. ........... + 0x05, 0x80, 0x00, 0x14, 0x00, 0x1c, 0x00, 0x24, 0x00, 0x34, 0x00, 0x40, 0x00, 0x00, 0x01, 0x0e, // .......$.4.@.... + 0x01, 0x22, 0x26, 0x27, 0x26, 0x36, 0x37, 0x36, 0x16, 0x17, 0x1e, 0x01, 0x32, 0x36, 0x37, 0x3e, // ."&'&676....267> + 0x01, 0x1e, 0x01, 0x00, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x04, 0x14, 0x06, 0x22, 0x26, // ......"&462..."& + 0x34, 0x36, 0x32, 0x00, 0x10, 0x2e, 0x02, 0x20, 0x0e, 0x02, 0x10, 0x1e, 0x02, 0x20, 0x3e, 0x01, // 462.... ..... >. + 0x12, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, 0x04, 0x6e, 0x25, 0xca, // .... $...$ ..n%. + 0xfe, 0xca, 0x25, 0x08, 0x18, 0x1a, 0x19, 0x2f, 0x08, 0x19, 0x87, 0xa8, 0x87, 0x19, 0x08, 0x30, // ..%..../.......0 + 0x32, 0x18, 0xfe, 0x0a, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x02, 0x4b, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, // 2...KjKKj.KKjKKj + 0x01, 0x4b, 0x66, 0xab, 0xed, 0xfe, 0xfc, 0xed, 0xab, 0x66, 0x66, 0xab, 0xed, 0x01, 0x04, 0xed, // .Kf......ff..... + 0xab, 0xe6, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, // ......^.....a... + 0x61, 0x01, 0xcd, 0x79, 0x94, 0x94, 0x79, 0x19, 0x2f, 0x08, 0x08, 0x18, 0x1a, 0x50, 0x63, 0x63, // a..y..y./....Pcc + 0x50, 0x1a, 0x18, 0x10, 0x2f, 0x01, 0xcf, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0x4b, // P.../..jKKjKKjKK + 0x6a, 0x4b, 0xfd, 0xfe, 0x01, 0x04, 0xed, 0xab, 0x66, 0x66, 0xab, 0xed, 0xfe, 0xfc, 0xed, 0xab, // jK......ff...... + 0x66, 0x66, 0xab, 0x02, 0x40, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, // ff..@.^.....a... + 0x61, 0xce, 0xce, 0x00, 0x00, 0x05, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x14, // a............... + 0x00, 0x1c, 0x00, 0x24, 0x00, 0x34, 0x00, 0x40, 0x00, 0x00, 0x01, 0x16, 0x0e, 0x01, 0x26, 0x27, // ...$.4.@......&' + 0x2e, 0x01, 0x22, 0x06, 0x07, 0x0e, 0x01, 0x27, 0x2e, 0x01, 0x37, 0x3e, 0x01, 0x32, 0x16, 0x00, // .."....'..7>.2.. 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x04, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x00, // .."&462..."&462. 0x10, 0x2e, 0x02, 0x20, 0x0e, 0x02, 0x10, 0x1e, 0x02, 0x20, 0x3e, 0x01, 0x12, 0x10, 0x02, 0x04, // ... ..... >..... - 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, 0x04, 0x6e, 0x25, 0xca, 0xfe, 0xca, 0x25, 0x08, // $...$ ..n%...%. - 0x18, 0x1a, 0x19, 0x2f, 0x08, 0x19, 0x87, 0xa8, 0x87, 0x19, 0x08, 0x30, 0x32, 0x18, 0xfe, 0x0a, // .../.......02... + 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, 0x04, 0x6e, 0x08, 0x18, 0x32, 0x30, 0x08, 0x19, // $...$ ..n..20.. + 0x87, 0xa8, 0x87, 0x19, 0x08, 0x2f, 0x19, 0x1a, 0x18, 0x08, 0x25, 0xca, 0xfe, 0xca, 0xfe, 0x37, // ...../....%....7 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x02, 0x4b, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x01, 0x4b, 0x66, 0xab, // KjKKj.KKjKKj.Kf. 0xed, 0xfe, 0xfc, 0xed, 0xab, 0x66, 0x66, 0xab, 0xed, 0x01, 0x04, 0xed, 0xab, 0xe6, 0xce, 0xfe, // .....ff......... - 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x01, 0xcd, 0x79, // ..^.....a...a..y - 0x94, 0x94, 0x79, 0x19, 0x2f, 0x08, 0x08, 0x18, 0x1a, 0x50, 0x63, 0x63, 0x50, 0x1a, 0x18, 0x10, // ..y./....PccP... - 0x2f, 0x01, 0xcf, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0xfd, 0xfe, // /..jKKjKKjKKjK.. + 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x01, 0x33, 0x19, // ..^.....a...a.3. + 0x2f, 0x10, 0x18, 0x1a, 0x50, 0x63, 0x63, 0x50, 0x1a, 0x18, 0x08, 0x08, 0x2f, 0x19, 0x79, 0x94, // /...PccP..../.y. + 0x94, 0x02, 0x09, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0xfd, 0xfe, // ...jKKjKKjKKjK.. 0x01, 0x04, 0xed, 0xab, 0x66, 0x66, 0xab, 0xed, 0xfe, 0xfc, 0xed, 0xab, 0x66, 0x66, 0xab, 0x02, // ....ff......ff.. 0x40, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, // @.^.....a...a... - 0x00, 0x05, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x14, 0x00, 0x1c, 0x00, 0x24, // ...............$ - 0x00, 0x34, 0x00, 0x40, 0x00, 0x00, 0x01, 0x16, 0x0e, 0x01, 0x26, 0x27, 0x2e, 0x01, 0x22, 0x06, // .4.@......&'..". - 0x07, 0x0e, 0x01, 0x27, 0x2e, 0x01, 0x37, 0x3e, 0x01, 0x32, 0x16, 0x00, 0x14, 0x06, 0x22, 0x26, // ...'..7>.2...."& - 0x34, 0x36, 0x32, 0x04, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x00, 0x10, 0x2e, 0x02, 0x20, // 462..."&462.... - 0x0e, 0x02, 0x10, 0x1e, 0x02, 0x20, 0x3e, 0x01, 0x12, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, // ..... >..... $.. - 0x12, 0x24, 0x20, 0x04, 0x04, 0x6e, 0x08, 0x18, 0x32, 0x30, 0x08, 0x19, 0x87, 0xa8, 0x87, 0x19, // .$ ..n..20...... - 0x08, 0x2f, 0x19, 0x1a, 0x18, 0x08, 0x25, 0xca, 0xfe, 0xca, 0xfe, 0x37, 0x4b, 0x6a, 0x4b, 0x4b, // ./....%....7KjKK - 0x6a, 0x02, 0x4b, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x01, 0x4b, 0x66, 0xab, 0xed, 0xfe, 0xfc, 0xed, // j.KKjKKj.Kf..... - 0xab, 0x66, 0x66, 0xab, 0xed, 0x01, 0x04, 0xed, 0xab, 0xe6, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, // .ff...........^. - 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x01, 0x33, 0x19, 0x2f, 0x10, 0x18, 0x1a, // ....a...a.3./... - 0x50, 0x63, 0x63, 0x50, 0x1a, 0x18, 0x08, 0x08, 0x2f, 0x19, 0x79, 0x94, 0x94, 0x02, 0x09, 0x6a, // PccP..../.y....j - 0x4b, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0xfd, 0xfe, 0x01, 0x04, 0xed, 0xab, // KKjKKjKKjK...... - 0x66, 0x66, 0xab, 0xed, 0xfe, 0xfc, 0xed, 0xab, 0x66, 0x66, 0xab, 0x02, 0x40, 0xfe, 0x5e, 0xfe, // ff......ff..@.^. - 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x00, 0x05, 0x00, 0x00, // ....a...a....... - 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x0b, 0x00, 0x13, 0x00, 0x1b, 0x00, 0x2b, 0x00, 0x37, // .............+.7 - 0x00, 0x00, 0x00, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x34, 0x36, 0x33, 0x21, 0x32, 0x00, 0x14, // .....#!"&463!2.. - 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x04, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x00, 0x10, // ."&462..."&462.. - 0x2e, 0x02, 0x20, 0x0e, 0x02, 0x10, 0x1e, 0x02, 0x20, 0x3e, 0x01, 0x12, 0x10, 0x02, 0x04, 0x20, // .. ..... >..... - 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, 0x04, 0x80, 0x26, 0x1a, 0xfd, 0x80, 0x1a, 0x26, 0x26, // $...$ ...&....&& - 0x1a, 0x02, 0x80, 0x1a, 0xfe, 0x26, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x02, 0x4b, 0x4b, 0x6a, 0x4b, // .....&KjKKj.KKjK - 0x4b, 0x6a, 0x01, 0x4b, 0x66, 0xab, 0xed, 0xfe, 0xfc, 0xed, 0xab, 0x66, 0x66, 0xab, 0xed, 0x01, // Kj.Kf......ff... - 0x04, 0xed, 0xab, 0xe6, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, // ........^.....a. - 0xa2, 0x01, 0x61, 0x01, 0xda, 0x34, 0x26, 0x26, 0x34, 0x26, 0x01, 0xb5, 0x6a, 0x4b, 0x4b, 0x6a, // ..a..4&&4&..jKKj - 0x4b, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0xfd, 0xfe, 0x01, 0x04, 0xed, 0xab, 0x66, 0x66, 0xab, // KKjKKjK......ff. - 0xed, 0xfe, 0xfc, 0xed, 0xab, 0x66, 0x66, 0xab, 0x02, 0x40, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, // .....ff..@.^.... - 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, // .a...a.......... - 0x04, 0x00, 0x00, 0x23, 0x00, 0x2b, 0x00, 0x33, 0x00, 0x43, 0x00, 0x00, 0x01, 0x35, 0x34, 0x26, // ...#.+.3.C...54& - 0x2b, 0x01, 0x35, 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x23, 0x22, 0x06, 0x1d, 0x01, // +.54&+."...#"... - 0x14, 0x16, 0x3b, 0x01, 0x15, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x3d, 0x01, 0x33, 0x32, 0x36, // ..;....;.26=.326 - 0x04, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x00, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, // .4&"...2.4&"...2 - 0x24, 0x10, 0x00, 0x23, 0x22, 0x27, 0x23, 0x06, 0x23, 0x22, 0x00, 0x10, 0x00, 0x33, 0x21, 0x32, // $..#"'#.#"...3!2 - 0x03, 0x40, 0x12, 0x0e, 0xc0, 0x12, 0x0e, 0x80, 0x0e, 0x12, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, // .@.............. - 0x12, 0x0e, 0x80, 0x0e, 0x12, 0xc0, 0x0e, 0x12, 0x02, 0x40, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x01, // .........@KjKKj. - 0x4b, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x01, 0x4b, 0xfe, 0xd4, 0xd4, 0xc0, 0x92, 0xdc, 0x92, 0xc0, // KKjKKj.K........ - 0xd4, 0xfe, 0xd4, 0x01, 0x2c, 0xd4, 0x03, 0x80, 0xd4, 0x01, 0xc0, 0x80, 0x0e, 0x12, 0xc0, 0x0e, // ....,........... - 0x12, 0x12, 0x0e, 0xc0, 0x12, 0x0e, 0x80, 0x0e, 0x12, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x12, // ................ - 0x67, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0x01, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0xd4, 0xfe, 0x58, // gjKKjK.KjKKjK..X - 0xfe, 0xd4, 0x80, 0x80, 0x01, 0x2c, 0x01, 0xa8, 0x01, 0x2c, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, // .....,...,...... - 0x00, 0x00, 0x07, 0x80, 0x04, 0x80, 0x00, 0x0b, 0x00, 0x17, 0x00, 0x23, 0x00, 0x2f, 0x00, 0x3b, // ...........#./.; - 0x00, 0x47, 0x00, 0x53, 0x00, 0x5f, 0x00, 0x6b, 0x00, 0x77, 0x00, 0x83, 0x00, 0x8f, 0x00, 0x9f, // .G.S._.k.w...... - 0x00, 0xa3, 0x00, 0xb3, 0x00, 0x00, 0x01, 0x15, 0x14, 0x2b, 0x01, 0x22, 0x3d, 0x01, 0x34, 0x3b, // .........+."=.4; - 0x01, 0x32, 0x37, 0x15, 0x14, 0x2b, 0x01, 0x22, 0x3d, 0x01, 0x34, 0x3b, 0x01, 0x32, 0x27, 0x15, // .27..+."=.4;.2'. - 0x14, 0x2b, 0x01, 0x22, 0x3d, 0x01, 0x34, 0x3b, 0x01, 0x32, 0x01, 0x15, 0x14, 0x23, 0x21, 0x22, // .+."=.4;.2...#!" - 0x3d, 0x01, 0x34, 0x33, 0x21, 0x32, 0x25, 0x15, 0x14, 0x2b, 0x01, 0x22, 0x3d, 0x01, 0x34, 0x3b, // =.43!2%..+."=.4; + 0x00, 0x05, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x0b, 0x00, 0x13, 0x00, 0x1b, // ................ + 0x00, 0x2b, 0x00, 0x37, 0x00, 0x00, 0x00, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x34, 0x36, 0x33, // .+.7.....#!"&463 + 0x21, 0x32, 0x00, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x04, 0x14, 0x06, 0x22, 0x26, 0x34, // !2..."&462..."&4 + 0x36, 0x32, 0x00, 0x10, 0x2e, 0x02, 0x20, 0x0e, 0x02, 0x10, 0x1e, 0x02, 0x20, 0x3e, 0x01, 0x12, // 62.... ..... >.. + 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, 0x04, 0x80, 0x26, 0x1a, 0xfd, // ... $...$ ...&.. + 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x02, 0x80, 0x1a, 0xfe, 0x26, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x02, // ..&&.....&KjKKj. + 0x4b, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x01, 0x4b, 0x66, 0xab, 0xed, 0xfe, 0xfc, 0xed, 0xab, 0x66, // KKjKKj.Kf......f + 0x66, 0xab, 0xed, 0x01, 0x04, 0xed, 0xab, 0xe6, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, // f...........^... + 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x01, 0xda, 0x34, 0x26, 0x26, 0x34, 0x26, 0x01, 0xb5, // ..a...a..4&&4&.. + 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0xfd, 0xfe, 0x01, 0x04, 0xed, // jKKjKKjKKjK..... + 0xab, 0x66, 0x66, 0xab, 0xed, 0xfe, 0xfc, 0xed, 0xab, 0x66, 0x66, 0xab, 0x02, 0x40, 0xfe, 0x5e, // .ff......ff..@.^ + 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x04, 0x00, 0x00, // .....a...a...... + 0x00, 0x00, 0x07, 0x80, 0x04, 0x00, 0x00, 0x23, 0x00, 0x2b, 0x00, 0x33, 0x00, 0x43, 0x00, 0x00, // .......#.+.3.C.. + 0x01, 0x35, 0x34, 0x26, 0x2b, 0x01, 0x35, 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x23, // .54&+.54&+."...# + 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x15, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x3d, // ".....;....;.26= + 0x01, 0x33, 0x32, 0x36, 0x04, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x00, 0x34, 0x26, 0x22, // .326.4&"...2.4&" + 0x06, 0x14, 0x16, 0x32, 0x24, 0x10, 0x00, 0x23, 0x22, 0x27, 0x23, 0x06, 0x23, 0x22, 0x00, 0x10, // ...2$..#"'#.#".. + 0x00, 0x33, 0x21, 0x32, 0x03, 0x40, 0x12, 0x0e, 0xc0, 0x12, 0x0e, 0x80, 0x0e, 0x12, 0xc0, 0x0e, // .3!2.@.......... + 0x12, 0x12, 0x0e, 0xc0, 0x12, 0x0e, 0x80, 0x0e, 0x12, 0xc0, 0x0e, 0x12, 0x02, 0x40, 0x4b, 0x6a, // .............@Kj + 0x4b, 0x4b, 0x6a, 0x01, 0x4b, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x01, 0x4b, 0xfe, 0xd4, 0xd4, 0xc0, // KKj.KKjKKj.K.... + 0x92, 0xdc, 0x92, 0xc0, 0xd4, 0xfe, 0xd4, 0x01, 0x2c, 0xd4, 0x03, 0x80, 0xd4, 0x01, 0xc0, 0x80, // ........,....... + 0x0e, 0x12, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x12, 0x0e, 0x80, 0x0e, 0x12, 0xc0, 0x0e, 0x12, // ................ + 0x12, 0x0e, 0xc0, 0x12, 0x67, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0x01, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, // ....gjKKjK.KjKKj + 0x4b, 0xd4, 0xfe, 0x58, 0xfe, 0xd4, 0x80, 0x80, 0x01, 0x2c, 0x01, 0xa8, 0x01, 0x2c, 0x00, 0x00, // K..X.....,...,.. + 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x04, 0x80, 0x00, 0x0b, 0x00, 0x17, 0x00, 0x23, // ...............# + 0x00, 0x2f, 0x00, 0x3b, 0x00, 0x47, 0x00, 0x53, 0x00, 0x5f, 0x00, 0x6b, 0x00, 0x77, 0x00, 0x83, // ./.;.G.S._.k.w.. + 0x00, 0x8f, 0x00, 0x9f, 0x00, 0xa3, 0x00, 0xb3, 0x00, 0x00, 0x01, 0x15, 0x14, 0x2b, 0x01, 0x22, // .............+." + 0x3d, 0x01, 0x34, 0x3b, 0x01, 0x32, 0x37, 0x15, 0x14, 0x2b, 0x01, 0x22, 0x3d, 0x01, 0x34, 0x3b, // =.4;.27..+."=.4; 0x01, 0x32, 0x27, 0x15, 0x14, 0x2b, 0x01, 0x22, 0x3d, 0x01, 0x34, 0x3b, 0x01, 0x32, 0x01, 0x15, // .2'..+."=.4;.2.. - 0x14, 0x2b, 0x01, 0x22, 0x3d, 0x01, 0x34, 0x3b, 0x01, 0x32, 0x27, 0x15, 0x14, 0x2b, 0x01, 0x22, // .+."=.4;.2'..+." + 0x14, 0x23, 0x21, 0x22, 0x3d, 0x01, 0x34, 0x33, 0x21, 0x32, 0x25, 0x15, 0x14, 0x2b, 0x01, 0x22, // .#!"=.43!2%..+." + 0x3d, 0x01, 0x34, 0x3b, 0x01, 0x32, 0x27, 0x15, 0x14, 0x2b, 0x01, 0x22, 0x3d, 0x01, 0x34, 0x3b, // =.4;.2'..+."=.4; + 0x01, 0x32, 0x01, 0x15, 0x14, 0x2b, 0x01, 0x22, 0x3d, 0x01, 0x34, 0x3b, 0x01, 0x32, 0x27, 0x15, // .2...+."=.4;.2'. + 0x14, 0x2b, 0x01, 0x22, 0x3d, 0x01, 0x34, 0x3b, 0x01, 0x32, 0x01, 0x15, 0x14, 0x2b, 0x01, 0x22, // .+."=.4;.2...+." 0x3d, 0x01, 0x34, 0x3b, 0x01, 0x32, 0x01, 0x15, 0x14, 0x2b, 0x01, 0x22, 0x3d, 0x01, 0x34, 0x3b, // =.4;.2...+."=.4; - 0x01, 0x32, 0x01, 0x15, 0x14, 0x2b, 0x01, 0x22, 0x3d, 0x01, 0x34, 0x3b, 0x01, 0x32, 0x01, 0x15, // .2...+."=.4;.2.. - 0x14, 0x2b, 0x01, 0x22, 0x3d, 0x01, 0x34, 0x3b, 0x01, 0x32, 0x05, 0x15, 0x14, 0x2b, 0x01, 0x22, // .+."=.4;.2...+." - 0x3d, 0x01, 0x34, 0x3b, 0x01, 0x32, 0x05, 0x11, 0x14, 0x2b, 0x01, 0x22, 0x3d, 0x01, 0x34, 0x3b, // =.4;.2...+."=.4; - 0x01, 0x35, 0x34, 0x3b, 0x01, 0x32, 0x13, 0x11, 0x21, 0x11, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, // .54;.2..!.....#! - 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x80, 0x10, 0x60, 0x10, 0x10, // "&5.463!2....`.. - 0x60, 0x10, 0x80, 0x10, 0xe0, 0x10, 0x10, 0xe0, 0x10, 0x80, 0x10, 0x60, 0x10, 0x10, 0x60, 0x10, // `..........`..`. - 0x04, 0x00, 0x10, 0xfc, 0xa0, 0x10, 0x10, 0x03, 0x60, 0x10, 0xfd, 0x80, 0x10, 0x60, 0x10, 0x10, // ........`....`.. - 0x60, 0x10, 0x80, 0x10, 0x60, 0x10, 0x10, 0x60, 0x10, 0x01, 0x80, 0x10, 0x60, 0x10, 0x10, 0x60, // `...`..`....`..` - 0x10, 0x80, 0x10, 0x60, 0x10, 0x10, 0x60, 0x10, 0x01, 0x80, 0x10, 0x60, 0x10, 0x10, 0x60, 0x10, // ...`..`....`..`. - 0x01, 0x80, 0x10, 0x60, 0x10, 0x10, 0x60, 0x10, 0xfe, 0x00, 0x10, 0x60, 0x10, 0x10, 0x60, 0x10, // ...`..`....`..`. - 0x01, 0x00, 0x10, 0x60, 0x10, 0x10, 0x60, 0x10, 0x01, 0x00, 0x10, 0xe0, 0x10, 0x10, 0x70, 0x10, // ...`..`.......p. - 0x60, 0x10, 0x80, 0xf9, 0x80, 0x07, 0x00, 0x4b, 0x35, 0xf9, 0x80, 0x35, 0x4b, 0x4b, 0x35, 0x06, // `......K5..5KK5. - 0x80, 0x35, 0x4b, 0x01, 0x70, 0x60, 0x10, 0x10, 0x60, 0x10, 0xf0, 0x60, 0x10, 0x10, 0x60, 0x10, // .5K.p`..`..`..`. - 0xf0, 0x60, 0x10, 0x10, 0x60, 0x10, 0xfd, 0xf0, 0x60, 0x10, 0x10, 0x60, 0x10, 0xf0, 0x60, 0x10, // .`..`...`..`..`. - 0x10, 0x60, 0x10, 0xf0, 0x60, 0x10, 0x10, 0x60, 0x10, 0xfe, 0xf0, 0x60, 0x10, 0x10, 0x60, 0x10, // .`..`..`...`..`. - 0xf0, 0x60, 0x10, 0x10, 0x60, 0x10, 0xfe, 0xf0, 0x60, 0x10, 0x10, 0x60, 0x10, 0xfe, 0xf0, 0x60, // .`..`...`..`...` - 0x10, 0x10, 0x60, 0x10, 0x01, 0xf0, 0x60, 0x10, 0x10, 0x60, 0x10, 0x10, 0x60, 0x10, 0x10, 0x60, // ..`...`..`..`..` - 0x10, 0x10, 0xfe, 0xa0, 0x10, 0x10, 0x60, 0x10, 0xf0, 0x10, 0xfd, 0x00, 0x03, 0x80, 0xfc, 0x80, // ......`......... - 0x03, 0x80, 0xfc, 0x80, 0x35, 0x4b, 0x4b, 0x35, 0x03, 0x80, 0x35, 0x4b, 0x4b, 0x00, 0x00, 0x00, // ....5KK5..5KK... - 0x00, 0x03, 0x00, 0x40, 0xff, 0x80, 0x07, 0x00, 0x05, 0x80, 0x00, 0x16, 0x00, 0x2a, 0x00, 0x56, // ...@.........*.V - 0x00, 0x00, 0x01, 0x11, 0x06, 0x23, 0x22, 0x27, 0x2e, 0x01, 0x23, 0x22, 0x07, 0x11, 0x36, 0x33, // .....#"'..#"..63 - 0x32, 0x1e, 0x02, 0x1f, 0x01, 0x16, 0x33, 0x32, 0x01, 0x14, 0x06, 0x07, 0x11, 0x14, 0x06, 0x2b, // 2.....32.......+ - 0x01, 0x22, 0x26, 0x35, 0x11, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x32, 0x16, 0x05, 0x11, 0x14, 0x07, // ."&5...5462..... - 0x06, 0x07, 0x06, 0x23, 0x22, 0x2f, 0x01, 0x2e, 0x02, 0x23, 0x22, 0x04, 0x07, 0x06, 0x23, 0x22, // ...#"/...#"...#" - 0x27, 0x26, 0x35, 0x11, 0x34, 0x37, 0x3e, 0x03, 0x33, 0x32, 0x16, 0x17, 0x16, 0x33, 0x32, 0x37, // '&5.47>.32...327 - 0x36, 0x37, 0x36, 0x17, 0x16, 0x06, 0x80, 0xa9, 0x89, 0x52, 0x3f, 0x64, 0xa8, 0x5e, 0xad, 0xe6, // 676......R?d.^.. - 0xf5, 0xbc, 0x37, 0x61, 0x63, 0x37, 0x37, 0x1c, 0x2c, 0x39, 0x78, 0xfb, 0x6d, 0x23, 0x1d, 0x12, // ..7ac77.,9x.m#.. + 0x01, 0x32, 0x01, 0x15, 0x14, 0x2b, 0x01, 0x22, 0x3d, 0x01, 0x34, 0x3b, 0x01, 0x32, 0x05, 0x15, // .2...+."=.4;.2.. + 0x14, 0x2b, 0x01, 0x22, 0x3d, 0x01, 0x34, 0x3b, 0x01, 0x32, 0x05, 0x11, 0x14, 0x2b, 0x01, 0x22, // .+."=.4;.2...+." + 0x3d, 0x01, 0x34, 0x3b, 0x01, 0x35, 0x34, 0x3b, 0x01, 0x32, 0x13, 0x11, 0x21, 0x11, 0x01, 0x11, // =.4;.54;.2..!... + 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x80, // ..#!"&5.463!2... + 0x10, 0x60, 0x10, 0x10, 0x60, 0x10, 0x80, 0x10, 0xe0, 0x10, 0x10, 0xe0, 0x10, 0x80, 0x10, 0x60, // .`..`..........` + 0x10, 0x10, 0x60, 0x10, 0x04, 0x00, 0x10, 0xfc, 0xa0, 0x10, 0x10, 0x03, 0x60, 0x10, 0xfd, 0x80, // ..`.........`... + 0x10, 0x60, 0x10, 0x10, 0x60, 0x10, 0x80, 0x10, 0x60, 0x10, 0x10, 0x60, 0x10, 0x01, 0x80, 0x10, // .`..`...`..`.... + 0x60, 0x10, 0x10, 0x60, 0x10, 0x80, 0x10, 0x60, 0x10, 0x10, 0x60, 0x10, 0x01, 0x80, 0x10, 0x60, // `..`...`..`....` + 0x10, 0x10, 0x60, 0x10, 0x01, 0x80, 0x10, 0x60, 0x10, 0x10, 0x60, 0x10, 0xfe, 0x00, 0x10, 0x60, // ..`....`..`....` + 0x10, 0x10, 0x60, 0x10, 0x01, 0x00, 0x10, 0x60, 0x10, 0x10, 0x60, 0x10, 0x01, 0x00, 0x10, 0xe0, // ..`....`..`..... + 0x10, 0x10, 0x70, 0x10, 0x60, 0x10, 0x80, 0xf9, 0x80, 0x07, 0x00, 0x4b, 0x35, 0xf9, 0x80, 0x35, // ..p.`......K5..5 + 0x4b, 0x4b, 0x35, 0x06, 0x80, 0x35, 0x4b, 0x01, 0x70, 0x60, 0x10, 0x10, 0x60, 0x10, 0xf0, 0x60, // KK5..5K.p`..`..` + 0x10, 0x10, 0x60, 0x10, 0xf0, 0x60, 0x10, 0x10, 0x60, 0x10, 0xfd, 0xf0, 0x60, 0x10, 0x10, 0x60, // ..`..`..`...`..` + 0x10, 0xf0, 0x60, 0x10, 0x10, 0x60, 0x10, 0xf0, 0x60, 0x10, 0x10, 0x60, 0x10, 0xfe, 0xf0, 0x60, // ..`..`..`..`...` + 0x10, 0x10, 0x60, 0x10, 0xf0, 0x60, 0x10, 0x10, 0x60, 0x10, 0xfe, 0xf0, 0x60, 0x10, 0x10, 0x60, // ..`..`..`...`..` + 0x10, 0xfe, 0xf0, 0x60, 0x10, 0x10, 0x60, 0x10, 0x01, 0xf0, 0x60, 0x10, 0x10, 0x60, 0x10, 0x10, // ...`..`...`..`.. + 0x60, 0x10, 0x10, 0x60, 0x10, 0x10, 0xfe, 0xa0, 0x10, 0x10, 0x60, 0x10, 0xf0, 0x10, 0xfd, 0x00, // `..`......`..... + 0x03, 0x80, 0xfc, 0x80, 0x03, 0x80, 0xfc, 0x80, 0x35, 0x4b, 0x4b, 0x35, 0x03, 0x80, 0x35, 0x4b, // ........5KK5..5K + 0x4b, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x40, 0xff, 0x80, 0x07, 0x00, 0x05, 0x80, 0x00, 0x16, // K......@........ + 0x00, 0x2a, 0x00, 0x56, 0x00, 0x00, 0x01, 0x11, 0x06, 0x23, 0x22, 0x27, 0x2e, 0x01, 0x23, 0x22, // .*.V.....#"'..#" + 0x07, 0x11, 0x36, 0x33, 0x32, 0x1e, 0x02, 0x1f, 0x01, 0x16, 0x33, 0x32, 0x01, 0x14, 0x06, 0x07, // ..632.....32.... + 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x32, 0x16, // ...+."&5...5462. + 0x05, 0x11, 0x14, 0x07, 0x06, 0x07, 0x06, 0x23, 0x22, 0x2f, 0x01, 0x2e, 0x02, 0x23, 0x22, 0x04, // .......#"/...#". + 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x35, 0x11, 0x34, 0x37, 0x3e, 0x03, 0x33, 0x32, 0x16, 0x17, // ..#"'&5.47>.32.. + 0x16, 0x33, 0x32, 0x37, 0x36, 0x37, 0x36, 0x17, 0x16, 0x06, 0x80, 0xa9, 0x89, 0x52, 0x3f, 0x64, // .327676......R?d + 0xa8, 0x5e, 0xad, 0xe6, 0xf5, 0xbc, 0x37, 0x61, 0x63, 0x37, 0x37, 0x1c, 0x2c, 0x39, 0x78, 0xfb, // .^....7ac77.,9x. + 0x6d, 0x23, 0x1d, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x1d, 0x23, 0x4b, 0x6a, 0x4b, 0x05, 0xc0, 0x23, // m#...@...#KjK..# + 0x0a, 0x07, 0xda, 0x97, 0x58, 0x46, 0x1c, 0x40, 0x46, 0x70, 0x3a, 0x66, 0xfe, 0xf5, 0x5f, 0x0f, // ....XF.@Fp:f.._. + 0x12, 0x10, 0x10, 0x20, 0x1f, 0x23, 0x57, 0x8d, 0xa4, 0x49, 0x70, 0xc2, 0x70, 0x26, 0x33, 0x7a, // ... .#W..Ip.p&3z + 0xbc, 0x16, 0x09, 0x1f, 0x1f, 0x1f, 0x01, 0xeb, 0x02, 0x68, 0x5b, 0x20, 0x31, 0x37, 0x7f, 0xfd, // .........h[ 17.. + 0xa9, 0x71, 0x0f, 0x25, 0x19, 0x1b, 0x0e, 0x16, 0x03, 0x71, 0x23, 0x3a, 0x11, 0xfb, 0x0e, 0x0e, // .q.%.....q#:.... + 0x12, 0x12, 0x0e, 0x04, 0xf2, 0x11, 0x3a, 0x23, 0x35, 0x4b, 0x4b, 0x75, 0xfd, 0x05, 0x27, 0x12, // ......:#5KKu..'. + 0x05, 0x04, 0x74, 0x23, 0x0e, 0x21, 0x1e, 0x1c, 0x58, 0x3a, 0x09, 0x08, 0x13, 0x25, 0x02, 0xe6, // ..t#.!..X:...%.. + 0x23, 0x14, 0x15, 0x2b, 0x3d, 0x26, 0x3e, 0x37, 0x13, 0x70, 0x0c, 0x05, 0x10, 0x12, 0x14, 0x00, // #..+=&>7.p...... + 0x00, 0x06, 0x00, 0x40, 0xff, 0x80, 0x07, 0x00, 0x05, 0x80, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x2a, // ...@...........* + 0x00, 0x32, 0x00, 0x46, 0x00, 0x72, 0x00, 0x00, 0x01, 0x35, 0x06, 0x07, 0x15, 0x36, 0x13, 0x35, // .2.F.r...5...6.5 + 0x06, 0x07, 0x15, 0x36, 0x01, 0x35, 0x06, 0x27, 0x35, 0x26, 0x27, 0x2e, 0x09, 0x23, 0x22, 0x07, // ...6.5.'5&'..#". + 0x15, 0x33, 0x32, 0x16, 0x17, 0x16, 0x17, 0x15, 0x16, 0x33, 0x32, 0x13, 0x35, 0x06, 0x23, 0x22, // .32......32.5.#" + 0x27, 0x15, 0x16, 0x01, 0x14, 0x06, 0x07, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, // '.........+."&5. + 0x2e, 0x01, 0x35, 0x34, 0x36, 0x32, 0x16, 0x05, 0x11, 0x14, 0x07, 0x06, 0x07, 0x06, 0x23, 0x22, // ..5462........#" + 0x2f, 0x01, 0x2e, 0x02, 0x23, 0x22, 0x04, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x35, 0x11, 0x34, // /...#"...#"'&5.4 + 0x37, 0x3e, 0x03, 0x33, 0x32, 0x16, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x37, 0x36, 0x17, 0x16, // 7>.32...327676.. + 0x03, 0x40, 0xb5, 0xcb, 0xcd, 0xb3, 0xac, 0xd4, 0xd7, 0x03, 0xe9, 0xeb, 0x95, 0x14, 0x13, 0x05, // .@.............. + 0x38, 0x0d, 0x32, 0x13, 0x2e, 0x1a, 0x2c, 0x23, 0x2c, 0x16, 0x17, 0x1a, 0x13, 0x66, 0xb5, 0x6b, // 8.2...,#,....f.k + 0x13, 0x14, 0x2a, 0x31, 0x78, 0xad, 0xa9, 0x89, 0x2d, 0x21, 0x94, 0xfb, 0xac, 0x23, 0x1d, 0x12, // ..*1x...-!...#.. 0x0e, 0x40, 0x0e, 0x12, 0x1d, 0x23, 0x4b, 0x6a, 0x4b, 0x05, 0xc0, 0x23, 0x0a, 0x07, 0xda, 0x97, // .@...#KjK..#.... 0x58, 0x46, 0x1c, 0x40, 0x46, 0x70, 0x3a, 0x66, 0xfe, 0xf5, 0x5f, 0x0f, 0x12, 0x10, 0x10, 0x20, // XF.@Fp:f.._.... 0x1f, 0x23, 0x57, 0x8d, 0xa4, 0x49, 0x70, 0xc2, 0x70, 0x26, 0x33, 0x7a, 0xbc, 0x16, 0x09, 0x1f, // .#W..Ip.p&3z.... - 0x1f, 0x1f, 0x01, 0xeb, 0x02, 0x68, 0x5b, 0x20, 0x31, 0x37, 0x7f, 0xfd, 0xa9, 0x71, 0x0f, 0x25, // .....h[ 17...q.% - 0x19, 0x1b, 0x0e, 0x16, 0x03, 0x71, 0x23, 0x3a, 0x11, 0xfb, 0x0e, 0x0e, 0x12, 0x12, 0x0e, 0x04, // .....q#:........ - 0xf2, 0x11, 0x3a, 0x23, 0x35, 0x4b, 0x4b, 0x75, 0xfd, 0x05, 0x27, 0x12, 0x05, 0x04, 0x74, 0x23, // ..:#5KKu..'...t# - 0x0e, 0x21, 0x1e, 0x1c, 0x58, 0x3a, 0x09, 0x08, 0x13, 0x25, 0x02, 0xe6, 0x23, 0x14, 0x15, 0x2b, // .!..X:...%..#..+ - 0x3d, 0x26, 0x3e, 0x37, 0x13, 0x70, 0x0c, 0x05, 0x10, 0x12, 0x14, 0x00, 0x00, 0x06, 0x00, 0x40, // =&>7.p.........@ - 0xff, 0x80, 0x07, 0x00, 0x05, 0x80, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x2a, 0x00, 0x32, 0x00, 0x46, // ...........*.2.F - 0x00, 0x72, 0x00, 0x00, 0x01, 0x35, 0x06, 0x07, 0x15, 0x36, 0x13, 0x35, 0x06, 0x07, 0x15, 0x36, // .r...5...6.5...6 - 0x01, 0x35, 0x06, 0x27, 0x35, 0x26, 0x27, 0x2e, 0x09, 0x23, 0x22, 0x07, 0x15, 0x33, 0x32, 0x16, // .5.'5&'..#"..32. - 0x17, 0x16, 0x17, 0x15, 0x16, 0x33, 0x32, 0x13, 0x35, 0x06, 0x23, 0x22, 0x27, 0x15, 0x16, 0x01, // .....32.5.#"'... - 0x14, 0x06, 0x07, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, 0x2e, 0x01, 0x35, 0x34, // ......+."&5...54 - 0x36, 0x32, 0x16, 0x05, 0x11, 0x14, 0x07, 0x06, 0x07, 0x06, 0x23, 0x22, 0x2f, 0x01, 0x2e, 0x02, // 62........#"/... - 0x23, 0x22, 0x04, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x35, 0x11, 0x34, 0x37, 0x3e, 0x03, 0x33, // #"...#"'&5.47>.3 - 0x32, 0x16, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x37, 0x36, 0x17, 0x16, 0x03, 0x40, 0xb5, 0xcb, // 2...327676...@.. - 0xcd, 0xb3, 0xac, 0xd4, 0xd7, 0x03, 0xe9, 0xeb, 0x95, 0x14, 0x13, 0x05, 0x38, 0x0d, 0x32, 0x13, // ............8.2. - 0x2e, 0x1a, 0x2c, 0x23, 0x2c, 0x16, 0x17, 0x1a, 0x13, 0x66, 0xb5, 0x6b, 0x13, 0x14, 0x2a, 0x31, // ..,#,....f.k..*1 - 0x78, 0xad, 0xa9, 0x89, 0x2d, 0x21, 0x94, 0xfb, 0xac, 0x23, 0x1d, 0x12, 0x0e, 0x40, 0x0e, 0x12, // x...-!...#...@.. - 0x1d, 0x23, 0x4b, 0x6a, 0x4b, 0x05, 0xc0, 0x23, 0x0a, 0x07, 0xda, 0x97, 0x58, 0x46, 0x1c, 0x40, // .#KjK..#....XF.@ - 0x46, 0x70, 0x3a, 0x66, 0xfe, 0xf5, 0x5f, 0x0f, 0x12, 0x10, 0x10, 0x20, 0x1f, 0x23, 0x57, 0x8d, // Fp:f.._.... .#W. - 0xa4, 0x49, 0x70, 0xc2, 0x70, 0x26, 0x33, 0x7a, 0xbc, 0x16, 0x09, 0x1f, 0x1f, 0x1f, 0x02, 0x18, // .Ip.p&3z........ - 0xc0, 0x10, 0x65, 0xb9, 0x60, 0x01, 0xb0, 0xc5, 0x08, 0x76, 0xbd, 0x6f, 0xfe, 0x38, 0xb8, 0x74, // ..e.`....v.o.8.t - 0x2d, 0xe0, 0x06, 0x09, 0x03, 0x1c, 0x06, 0x18, 0x07, 0x13, 0x06, 0x0b, 0x04, 0x04, 0x03, 0xde, // -............... - 0x3a, 0x35, 0x09, 0x06, 0xbc, 0x11, 0x02, 0x07, 0xbd, 0x5b, 0x08, 0xc4, 0x2a, 0x01, 0xee, 0x23, // :5.......[..*..# - 0x3a, 0x11, 0xfb, 0x0e, 0x0e, 0x12, 0x12, 0x0e, 0x04, 0xf2, 0x11, 0x3a, 0x23, 0x35, 0x4b, 0x4b, // :..........:#5KK - 0x75, 0xfd, 0x05, 0x27, 0x12, 0x05, 0x04, 0x74, 0x23, 0x0e, 0x21, 0x1e, 0x1c, 0x58, 0x3a, 0x09, // u..'...t#.!..X:. - 0x08, 0x13, 0x25, 0x02, 0xe6, 0x23, 0x14, 0x15, 0x2b, 0x3d, 0x26, 0x3e, 0x37, 0x13, 0x70, 0x0c, // ..%..#..+=&>7.p. - 0x05, 0x10, 0x12, 0x14, 0x00, 0x02, 0x00, 0x0d, 0x00, 0x00, 0x06, 0x80, 0x04, 0x33, 0x00, 0x14, // .............3.. - 0x00, 0x24, 0x00, 0x00, 0x09, 0x01, 0x06, 0x22, 0x2f, 0x01, 0x26, 0x34, 0x37, 0x09, 0x01, 0x26, // .$....."/.&47..& - 0x34, 0x3f, 0x01, 0x36, 0x32, 0x17, 0x01, 0x16, 0x14, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, // 4?.62........#!" - 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x02, 0x49, 0xfe, 0x2e, 0x0a, 0x1a, 0x0a, // &=.463!2..I..... - 0x32, 0x0a, 0x0a, 0x01, 0x89, 0xfe, 0x77, 0x0a, 0x0a, 0x32, 0x0a, 0x1a, 0x0a, 0x01, 0xd2, 0x0a, // 2.....w..2...... - 0x04, 0x2d, 0x12, 0x0e, 0xfc, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x03, 0xc0, 0x0e, 0x12, 0x02, 0x29, // .-...@.........) - 0xfe, 0x2e, 0x0a, 0x0a, 0x32, 0x0a, 0x1a, 0x0a, 0x01, 0x89, 0x01, 0x89, 0x0a, 0x1a, 0x0a, 0x32, // ....2..........2 - 0x0a, 0x0a, 0xfe, 0x2e, 0x0a, 0x1a, 0xfe, 0x2d, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, // .......-@....@.. - 0x12, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x2d, 0xff, 0x93, 0x07, 0x53, 0x04, 0xed, 0x00, 0x14, // .......-...S.... - 0x00, 0x24, 0x00, 0x39, 0x00, 0x00, 0x25, 0x07, 0x06, 0x22, 0x27, 0x01, 0x26, 0x34, 0x37, 0x01, // .$.9..%.."'.&47. - 0x36, 0x32, 0x1f, 0x01, 0x16, 0x14, 0x07, 0x09, 0x01, 0x16, 0x14, 0x09, 0x01, 0x0e, 0x01, 0x2f, // 62............./ - 0x01, 0x2e, 0x01, 0x37, 0x01, 0x3e, 0x01, 0x1f, 0x01, 0x1e, 0x01, 0x09, 0x01, 0x06, 0x22, 0x2f, // ...7.>........"/ - 0x01, 0x26, 0x34, 0x37, 0x09, 0x01, 0x26, 0x34, 0x3f, 0x01, 0x36, 0x32, 0x17, 0x01, 0x16, 0x14, // .&47..&4?.62.... - 0x02, 0x69, 0x32, 0x0a, 0x1a, 0x0a, 0xfe, 0x2e, 0x0a, 0x0a, 0x01, 0xd2, 0x0a, 0x1a, 0x0a, 0x32, // .i2............2 - 0x0a, 0x0a, 0xfe, 0x77, 0x01, 0x89, 0x0a, 0x02, 0x45, 0xfe, 0x8b, 0x04, 0x17, 0x0c, 0x3e, 0x0d, // ...w....E.....>. - 0x0d, 0x04, 0x01, 0x75, 0x04, 0x17, 0x0c, 0x3e, 0x0d, 0x0d, 0x02, 0x8d, 0xfe, 0x2e, 0x0a, 0x1a, // ...u...>........ - 0x0a, 0x32, 0x0a, 0x0a, 0x01, 0x89, 0xfe, 0x77, 0x0a, 0x0a, 0x32, 0x0a, 0x1a, 0x0a, 0x01, 0xd2, // .2.....w..2..... - 0x0a, 0x89, 0x32, 0x0a, 0x0a, 0x01, 0xd2, 0x0a, 0x1a, 0x0a, 0x01, 0xd2, 0x0a, 0x0a, 0x32, 0x0a, // ..2...........2. - 0x1a, 0x0a, 0xfe, 0x77, 0xfe, 0x77, 0x0a, 0x1a, 0x04, 0x21, 0xfa, 0xf5, 0x0d, 0x0d, 0x04, 0x11, // ...w.w...!...... - 0x04, 0x17, 0x0d, 0x05, 0x0b, 0x0d, 0x0d, 0x04, 0x11, 0x04, 0x17, 0xfd, 0x68, 0xfe, 0x2e, 0x0a, // ............h... - 0x0a, 0x32, 0x0a, 0x1a, 0x0a, 0x01, 0x89, 0x01, 0x89, 0x0a, 0x1a, 0x0a, 0x32, 0x0a, 0x0a, 0xfe, // .2..........2... - 0x2e, 0x0a, 0x1a, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x07, 0x00, 0x05, 0xbb, 0x00, 0x15, // ................ - 0x00, 0x3b, 0x00, 0x00, 0x01, 0x15, 0x14, 0x07, 0x06, 0x23, 0x22, 0x27, 0x01, 0x26, 0x34, 0x37, // .;.......#"'.&47 - 0x01, 0x36, 0x17, 0x16, 0x1d, 0x01, 0x01, 0x06, 0x14, 0x17, 0x01, 0x14, 0x0e, 0x03, 0x07, 0x06, // .6.............. - 0x23, 0x22, 0x27, 0x26, 0x37, 0x12, 0x27, 0x2e, 0x01, 0x27, 0x15, 0x14, 0x07, 0x06, 0x23, 0x22, // #"'&7.'..'....#" - 0x27, 0x01, 0x26, 0x34, 0x37, 0x01, 0x36, 0x17, 0x16, 0x15, 0x11, 0x04, 0x17, 0x16, 0x02, 0x80, // '.&47.6......... - 0x27, 0x0d, 0x0c, 0x1b, 0x12, 0xfe, 0x00, 0x13, 0x13, 0x02, 0x00, 0x1d, 0x29, 0x27, 0xfe, 0x73, // '...........)'.s - 0x13, 0x13, 0x06, 0x0d, 0x22, 0x2b, 0x35, 0x1c, 0x06, 0x08, 0x14, 0x06, 0x03, 0x19, 0x02, 0x2b, // ...."+5........+ - 0x95, 0x40, 0xd5, 0xa1, 0x27, 0x0d, 0x0c, 0x1b, 0x12, 0xfe, 0x00, 0x13, 0x13, 0x02, 0x00, 0x1d, // .@..'........... - 0x29, 0x27, 0x01, 0x9b, 0xbc, 0xa9, 0x01, 0xc6, 0x46, 0x2a, 0x11, 0x05, 0x13, 0x02, 0x00, 0x13, // )'......F*...... - 0x34, 0x13, 0x02, 0x00, 0x1f, 0x11, 0x11, 0x2a, 0x45, 0xfe, 0x72, 0x13, 0x34, 0x13, 0xfe, 0x4d, // 4......*E.r.4..M - 0x3a, 0x97, 0x7d, 0x7d, 0x38, 0x0c, 0x11, 0x01, 0x08, 0x1a, 0x01, 0x90, 0xa5, 0x47, 0x4f, 0x0d, // :.}}8........GO. - 0xfb, 0x2a, 0x11, 0x05, 0x13, 0x02, 0x00, 0x13, 0x34, 0x13, 0x02, 0x00, 0x1f, 0x11, 0x11, 0x2a, // .*......4......* - 0xfe, 0xfa, 0x1c, 0xc1, 0xad, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0xff, 0xad, 0x06, 0x7e, // ...............~ - 0x05, 0xe0, 0x00, 0x0a, 0x00, 0x28, 0x00, 0x00, 0x01, 0x2d, 0x01, 0x2f, 0x01, 0x03, 0x11, 0x17, // .....(...-./.... - 0x05, 0x03, 0x27, 0x09, 0x01, 0x13, 0x16, 0x06, 0x23, 0x22, 0x27, 0x25, 0x05, 0x06, 0x23, 0x22, // ..'.....#"'%..#" - 0x26, 0x37, 0x13, 0x01, 0x26, 0x36, 0x37, 0x25, 0x13, 0x36, 0x33, 0x32, 0x17, 0x13, 0x05, 0x1e, // &7..&67%.632.... - 0x01, 0x04, 0xa2, 0x01, 0x01, 0xfe, 0x9c, 0x42, 0x1e, 0x9f, 0x3b, 0x01, 0x3e, 0x3c, 0x0c, 0x01, // .......B..;.><.. - 0xf5, 0xfe, 0x95, 0x56, 0x05, 0x16, 0x17, 0x11, 0x17, 0xfe, 0x3f, 0xfe, 0x3f, 0x17, 0x11, 0x17, // ...V......?.?... - 0x16, 0x05, 0x56, 0xfe, 0x94, 0x20, 0x12, 0x2d, 0x01, 0xf6, 0xe1, 0x14, 0x1d, 0x1c, 0x15, 0xe1, // ..V.. .-........ - 0x01, 0xf6, 0x2d, 0x12, 0x02, 0x43, 0xfa, 0x34, 0x0a, 0x3c, 0x01, 0x42, 0xfc, 0x3d, 0x1f, 0xa8, // ..-..C.4.<.B.=.. - 0x01, 0x63, 0x42, 0x01, 0x35, 0xfe, 0x9e, 0xfe, 0x0c, 0x21, 0x25, 0x0c, 0xec, 0xec, 0x0c, 0x25, // .cB.5....!%....% - 0x21, 0x01, 0xf4, 0x01, 0x62, 0x20, 0x37, 0x07, 0x49, 0x01, 0xc7, 0x29, 0x29, 0xfe, 0x39, 0x49, // !...b 7.I..)).9I - 0x07, 0x37, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0xff, 0x80, 0x05, 0x80, 0x05, 0x00, 0x00, 0x16, // .7.............. - 0x00, 0x00, 0x09, 0x01, 0x06, 0x23, 0x22, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x21, 0x22, 0x2e, 0x01, // .....#"'..5.!".. - 0x36, 0x37, 0x01, 0x36, 0x33, 0x32, 0x17, 0x1e, 0x01, 0x05, 0x79, 0xfd, 0x80, 0x11, 0x28, 0x05, // 67.632....y...(. - 0x0a, 0x16, 0x1b, 0xfd, 0xc0, 0x16, 0x23, 0x0a, 0x12, 0x14, 0x05, 0x00, 0x0d, 0x10, 0x1b, 0x12, // ......#......... - 0x0f, 0x07, 0x04, 0xa3, 0xfb, 0x00, 0x23, 0x02, 0x05, 0x23, 0x16, 0x02, 0x40, 0x1b, 0x2c, 0x28, // ......#..#..@.,( - 0x0a, 0x02, 0x80, 0x07, 0x13, 0x0e, 0x29, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x00, 0x06, 0x80, // ......)......... - 0x05, 0x80, 0x00, 0x02, 0x00, 0x05, 0x00, 0x38, 0x00, 0x00, 0x01, 0x21, 0x11, 0x09, 0x01, 0x21, // .......8...!...! - 0x01, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x21, // ....+....+."&=.! - 0x22, 0x26, 0x35, 0x11, 0x23, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x35, 0x34, 0x36, // "&5.#"&=.46;.546 - 0x3b, 0x01, 0x32, 0x16, 0x1d, 0x01, 0x21, 0x37, 0x36, 0x32, 0x17, 0x16, 0x14, 0x0f, 0x01, 0x11, // ;.2...!762...... - 0x33, 0x32, 0x16, 0x02, 0x2d, 0x02, 0x53, 0xfd, 0x80, 0x02, 0x53, 0xfd, 0xad, 0x04, 0x80, 0x12, // 32..-.S...S..... - 0x0e, 0xe0, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0xfc, 0xa0, 0x0e, 0x12, 0xe0, 0x0e, 0x12, 0x12, 0x0e, // ................ - 0xe0, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x03, 0x53, 0xf6, 0x0a, 0x1a, 0x0a, 0x09, 0x09, 0xf7, 0xe0, // .......S........ - 0x0e, 0x12, 0x01, 0x00, 0x02, 0x53, 0xfd, 0xda, 0x02, 0x53, 0xfd, 0x60, 0xc0, 0x0e, 0x12, 0xe0, // .....S...S.`.... - 0x0e, 0x12, 0x12, 0x0e, 0xe0, 0x12, 0x0e, 0x03, 0x60, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0xe0, 0x0e, // ........`....... - 0x12, 0x12, 0x0e, 0xe0, 0xf7, 0x09, 0x09, 0x0a, 0x1a, 0x0a, 0xf6, 0xfc, 0xad, 0x12, 0x00, 0x00, // ................ - 0x00, 0x04, 0x00, 0x00, 0xff, 0x80, 0x04, 0x00, 0x05, 0x80, 0x00, 0x07, 0x00, 0x0f, 0x00, 0x17, // ................ - 0x00, 0x4b, 0x00, 0x00, 0x24, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x12, 0x34, 0x26, 0x22, // .K..$4&"...2.4&" - 0x06, 0x14, 0x16, 0x32, 0x04, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x37, 0x14, 0x06, 0x07, // ...2.4&"...27... - 0x02, 0x07, 0x06, 0x07, 0x0e, 0x01, 0x1d, 0x01, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x22, 0x26, 0x35, // ............."&5 - 0x34, 0x36, 0x37, 0x11, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x06, 0x07, 0x11, // 467...5462...... - 0x36, 0x37, 0x3e, 0x05, 0x35, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x32, 0x16, 0x01, 0x20, 0x38, 0x50, // 67>.5..5462.. 8P - 0x38, 0x38, 0x50, 0x38, 0x38, 0x50, 0x38, 0x38, 0x50, 0x02, 0xb8, 0x38, 0x50, 0x38, 0x38, 0x50, // 88P88P88P..8P88P - 0x98, 0x34, 0x2c, 0x02, 0xe0, 0x44, 0x87, 0x80, 0x53, 0x2c, 0x34, 0x70, 0xa0, 0x70, 0x34, 0x2c, // .4,..D..S,4p.p4, - 0x2c, 0x34, 0x70, 0xa0, 0x70, 0x34, 0x2c, 0x36, 0x64, 0x37, 0x41, 0x4c, 0x2a, 0x27, 0x11, 0x2c, // ,4p.p4,6d7AL*'., - 0x34, 0x70, 0xa0, 0x70, 0x18, 0x50, 0x38, 0x38, 0x50, 0x38, 0x04, 0xb8, 0x50, 0x38, 0x38, 0x50, // 4p.p.P88P8..P88P - 0x38, 0x48, 0x50, 0x38, 0x38, 0x50, 0x38, 0x60, 0x34, 0x59, 0x19, 0xfe, 0xe1, 0x7f, 0x26, 0x2b, // 8HP88P8`4Y....&+ - 0x28, 0x3e, 0x45, 0x1a, 0x19, 0x59, 0x34, 0x50, 0x70, 0x70, 0x50, 0x34, 0x59, 0x19, 0x03, 0x34, // (>E..Y4PppP4Y..4 - 0x19, 0x59, 0x34, 0x50, 0x70, 0x70, 0x50, 0x34, 0x59, 0x19, 0xfe, 0x0f, 0x1a, 0x1f, 0x11, 0x19, // .Y4PppP4Y....... - 0x25, 0x2a, 0x3c, 0x4f, 0x34, 0x19, 0x59, 0x34, 0x50, 0x70, 0x70, 0x00, 0x00, 0x08, 0x00, 0x00, // %* + 0x37, 0x13, 0x70, 0x0c, 0x05, 0x10, 0x12, 0x14, 0x00, 0x02, 0x00, 0x0d, 0x00, 0x00, 0x06, 0x80, // 7.p............. + 0x04, 0x33, 0x00, 0x14, 0x00, 0x24, 0x00, 0x00, 0x09, 0x01, 0x06, 0x22, 0x2f, 0x01, 0x26, 0x34, // .3...$....."/.&4 + 0x37, 0x09, 0x01, 0x26, 0x34, 0x3f, 0x01, 0x36, 0x32, 0x17, 0x01, 0x16, 0x14, 0x01, 0x15, 0x14, // 7..&4?.62....... + 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x02, 0x49, 0xfe, // .#!"&=.463!2..I. + 0x2e, 0x0a, 0x1a, 0x0a, 0x32, 0x0a, 0x0a, 0x01, 0x89, 0xfe, 0x77, 0x0a, 0x0a, 0x32, 0x0a, 0x1a, // ....2.....w..2.. + 0x0a, 0x01, 0xd2, 0x0a, 0x04, 0x2d, 0x12, 0x0e, 0xfc, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x03, 0xc0, // .....-...@...... + 0x0e, 0x12, 0x02, 0x29, 0xfe, 0x2e, 0x0a, 0x0a, 0x32, 0x0a, 0x1a, 0x0a, 0x01, 0x89, 0x01, 0x89, // ...)....2....... + 0x0a, 0x1a, 0x0a, 0x32, 0x0a, 0x0a, 0xfe, 0x2e, 0x0a, 0x1a, 0xfe, 0x2d, 0x40, 0x0e, 0x12, 0x12, // ...2.......-@... + 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x2d, 0xff, 0x93, 0x07, 0x53, // .@.........-...S + 0x04, 0xed, 0x00, 0x14, 0x00, 0x24, 0x00, 0x39, 0x00, 0x00, 0x25, 0x07, 0x06, 0x22, 0x27, 0x01, // .....$.9..%.."'. + 0x26, 0x34, 0x37, 0x01, 0x36, 0x32, 0x1f, 0x01, 0x16, 0x14, 0x07, 0x09, 0x01, 0x16, 0x14, 0x09, // &47.62.......... + 0x01, 0x0e, 0x01, 0x2f, 0x01, 0x2e, 0x01, 0x37, 0x01, 0x3e, 0x01, 0x1f, 0x01, 0x1e, 0x01, 0x09, // .../...7.>...... + 0x01, 0x06, 0x22, 0x2f, 0x01, 0x26, 0x34, 0x37, 0x09, 0x01, 0x26, 0x34, 0x3f, 0x01, 0x36, 0x32, // .."/.&47..&4?.62 + 0x17, 0x01, 0x16, 0x14, 0x02, 0x69, 0x32, 0x0a, 0x1a, 0x0a, 0xfe, 0x2e, 0x0a, 0x0a, 0x01, 0xd2, // .....i2......... + 0x0a, 0x1a, 0x0a, 0x32, 0x0a, 0x0a, 0xfe, 0x77, 0x01, 0x89, 0x0a, 0x02, 0x45, 0xfe, 0x8b, 0x04, // ...2...w....E... + 0x17, 0x0c, 0x3e, 0x0d, 0x0d, 0x04, 0x01, 0x75, 0x04, 0x17, 0x0c, 0x3e, 0x0d, 0x0d, 0x02, 0x8d, // ..>....u...>.... + 0xfe, 0x2e, 0x0a, 0x1a, 0x0a, 0x32, 0x0a, 0x0a, 0x01, 0x89, 0xfe, 0x77, 0x0a, 0x0a, 0x32, 0x0a, // .....2.....w..2. + 0x1a, 0x0a, 0x01, 0xd2, 0x0a, 0x89, 0x32, 0x0a, 0x0a, 0x01, 0xd2, 0x0a, 0x1a, 0x0a, 0x01, 0xd2, // ......2......... + 0x0a, 0x0a, 0x32, 0x0a, 0x1a, 0x0a, 0xfe, 0x77, 0xfe, 0x77, 0x0a, 0x1a, 0x04, 0x21, 0xfa, 0xf5, // ..2....w.w...!.. + 0x0d, 0x0d, 0x04, 0x11, 0x04, 0x17, 0x0d, 0x05, 0x0b, 0x0d, 0x0d, 0x04, 0x11, 0x04, 0x17, 0xfd, // ................ + 0x68, 0xfe, 0x2e, 0x0a, 0x0a, 0x32, 0x0a, 0x1a, 0x0a, 0x01, 0x89, 0x01, 0x89, 0x0a, 0x1a, 0x0a, // h....2.......... + 0x32, 0x0a, 0x0a, 0xfe, 0x2e, 0x0a, 0x1a, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x07, 0x00, // 2............... + 0x05, 0xbb, 0x00, 0x15, 0x00, 0x3b, 0x00, 0x00, 0x01, 0x15, 0x14, 0x07, 0x06, 0x23, 0x22, 0x27, // .....;.......#"' + 0x01, 0x26, 0x34, 0x37, 0x01, 0x36, 0x17, 0x16, 0x1d, 0x01, 0x01, 0x06, 0x14, 0x17, 0x01, 0x14, // .&47.6.......... + 0x0e, 0x03, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x37, 0x12, 0x27, 0x2e, 0x01, 0x27, 0x15, 0x14, // ....#"'&7.'..'.. + 0x07, 0x06, 0x23, 0x22, 0x27, 0x01, 0x26, 0x34, 0x37, 0x01, 0x36, 0x17, 0x16, 0x15, 0x11, 0x04, // ..#"'.&47.6..... + 0x17, 0x16, 0x02, 0x80, 0x27, 0x0d, 0x0c, 0x1b, 0x12, 0xfe, 0x00, 0x13, 0x13, 0x02, 0x00, 0x1d, // ....'........... + 0x29, 0x27, 0xfe, 0x73, 0x13, 0x13, 0x06, 0x0d, 0x22, 0x2b, 0x35, 0x1c, 0x06, 0x08, 0x14, 0x06, // )'.s...."+5..... + 0x03, 0x19, 0x02, 0x2b, 0x95, 0x40, 0xd5, 0xa1, 0x27, 0x0d, 0x0c, 0x1b, 0x12, 0xfe, 0x00, 0x13, // ...+.@..'....... + 0x13, 0x02, 0x00, 0x1d, 0x29, 0x27, 0x01, 0x9b, 0xbc, 0xa9, 0x01, 0xc6, 0x46, 0x2a, 0x11, 0x05, // ....)'......F*.. + 0x13, 0x02, 0x00, 0x13, 0x34, 0x13, 0x02, 0x00, 0x1f, 0x11, 0x11, 0x2a, 0x45, 0xfe, 0x72, 0x13, // ....4......*E.r. + 0x34, 0x13, 0xfe, 0x4d, 0x3a, 0x97, 0x7d, 0x7d, 0x38, 0x0c, 0x11, 0x01, 0x08, 0x1a, 0x01, 0x90, // 4..M:.}}8....... + 0xa5, 0x47, 0x4f, 0x0d, 0xfb, 0x2a, 0x11, 0x05, 0x13, 0x02, 0x00, 0x13, 0x34, 0x13, 0x02, 0x00, // .GO..*......4... + 0x1f, 0x11, 0x11, 0x2a, 0xfe, 0xfa, 0x1c, 0xc1, 0xad, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02, // ...*............ + 0xff, 0xad, 0x06, 0x7e, 0x05, 0xe0, 0x00, 0x0a, 0x00, 0x28, 0x00, 0x00, 0x01, 0x2d, 0x01, 0x2f, // ...~.....(...-./ + 0x01, 0x03, 0x11, 0x17, 0x05, 0x03, 0x27, 0x09, 0x01, 0x13, 0x16, 0x06, 0x23, 0x22, 0x27, 0x25, // ......'.....#"'% + 0x05, 0x06, 0x23, 0x22, 0x26, 0x37, 0x13, 0x01, 0x26, 0x36, 0x37, 0x25, 0x13, 0x36, 0x33, 0x32, // ..#"&7..&67%.632 + 0x17, 0x13, 0x05, 0x1e, 0x01, 0x04, 0xa2, 0x01, 0x01, 0xfe, 0x9c, 0x42, 0x1e, 0x9f, 0x3b, 0x01, // ...........B..;. + 0x3e, 0x3c, 0x0c, 0x01, 0xf5, 0xfe, 0x95, 0x56, 0x05, 0x16, 0x17, 0x11, 0x17, 0xfe, 0x3f, 0xfe, // ><.....V......?. + 0x3f, 0x17, 0x11, 0x17, 0x16, 0x05, 0x56, 0xfe, 0x94, 0x20, 0x12, 0x2d, 0x01, 0xf6, 0xe1, 0x14, // ?.....V.. .-.... + 0x1d, 0x1c, 0x15, 0xe1, 0x01, 0xf6, 0x2d, 0x12, 0x02, 0x43, 0xfa, 0x34, 0x0a, 0x3c, 0x01, 0x42, // ......-..C.4.<.B + 0xfc, 0x3d, 0x1f, 0xa8, 0x01, 0x63, 0x42, 0x01, 0x35, 0xfe, 0x9e, 0xfe, 0x0c, 0x21, 0x25, 0x0c, // .=...cB.5....!%. + 0xec, 0xec, 0x0c, 0x25, 0x21, 0x01, 0xf4, 0x01, 0x62, 0x20, 0x37, 0x07, 0x49, 0x01, 0xc7, 0x29, // ...%!...b 7.I..) + 0x29, 0xfe, 0x39, 0x49, 0x07, 0x37, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0xff, 0x80, 0x05, 0x80, // ).9I.7.......... + 0x05, 0x00, 0x00, 0x16, 0x00, 0x00, 0x09, 0x01, 0x06, 0x23, 0x22, 0x27, 0x2e, 0x01, 0x35, 0x11, // .........#"'..5. + 0x21, 0x22, 0x2e, 0x01, 0x36, 0x37, 0x01, 0x36, 0x33, 0x32, 0x17, 0x1e, 0x01, 0x05, 0x79, 0xfd, // !"..67.632....y. + 0x80, 0x11, 0x28, 0x05, 0x0a, 0x16, 0x1b, 0xfd, 0xc0, 0x16, 0x23, 0x0a, 0x12, 0x14, 0x05, 0x00, // ..(.......#..... + 0x0d, 0x10, 0x1b, 0x12, 0x0f, 0x07, 0x04, 0xa3, 0xfb, 0x00, 0x23, 0x02, 0x05, 0x23, 0x16, 0x02, // ..........#..#.. + 0x40, 0x1b, 0x2c, 0x28, 0x0a, 0x02, 0x80, 0x07, 0x13, 0x0e, 0x29, 0x00, 0x00, 0x03, 0x00, 0x00, // @.,(......)..... + 0xff, 0x00, 0x06, 0x80, 0x05, 0x80, 0x00, 0x02, 0x00, 0x05, 0x00, 0x38, 0x00, 0x00, 0x01, 0x21, // ...........8...! + 0x11, 0x09, 0x01, 0x21, 0x01, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, // ...!....+....+." + 0x26, 0x3d, 0x01, 0x21, 0x22, 0x26, 0x35, 0x11, 0x23, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, // &=.!"&5.#"&=.46; + 0x01, 0x35, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x1d, 0x01, 0x21, 0x37, 0x36, 0x32, 0x17, 0x16, // .546;.2...!762.. + 0x14, 0x0f, 0x01, 0x11, 0x33, 0x32, 0x16, 0x02, 0x2d, 0x02, 0x53, 0xfd, 0x80, 0x02, 0x53, 0xfd, // ....32..-.S...S. + 0xad, 0x04, 0x80, 0x12, 0x0e, 0xe0, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0xfc, 0xa0, 0x0e, 0x12, 0xe0, // ................ + 0x0e, 0x12, 0x12, 0x0e, 0xe0, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x03, 0x53, 0xf6, 0x0a, 0x1a, 0x0a, // ...........S.... + 0x09, 0x09, 0xf7, 0xe0, 0x0e, 0x12, 0x01, 0x00, 0x02, 0x53, 0xfd, 0xda, 0x02, 0x53, 0xfd, 0x60, // .........S...S.` + 0xc0, 0x0e, 0x12, 0xe0, 0x0e, 0x12, 0x12, 0x0e, 0xe0, 0x12, 0x0e, 0x03, 0x60, 0x12, 0x0e, 0xc0, // ............`... + 0x0e, 0x12, 0xe0, 0x0e, 0x12, 0x12, 0x0e, 0xe0, 0xf7, 0x09, 0x09, 0x0a, 0x1a, 0x0a, 0xf6, 0xfc, // ................ + 0xad, 0x12, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0xff, 0x80, 0x04, 0x00, 0x05, 0x80, 0x00, 0x07, // ................ + 0x00, 0x0f, 0x00, 0x17, 0x00, 0x4b, 0x00, 0x00, 0x24, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, // .....K..$4&"...2 + 0x12, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x04, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, // .4&"...2.4&"...2 + 0x37, 0x14, 0x06, 0x07, 0x02, 0x07, 0x06, 0x07, 0x0e, 0x01, 0x1d, 0x01, 0x1e, 0x01, 0x15, 0x14, // 7............... + 0x06, 0x22, 0x26, 0x35, 0x34, 0x36, 0x37, 0x11, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x32, 0x16, 0x15, // ."&5467...5462.. + 0x14, 0x06, 0x07, 0x11, 0x36, 0x37, 0x3e, 0x05, 0x35, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x32, 0x16, // ....67>.5..5462. + 0x01, 0x20, 0x38, 0x50, 0x38, 0x38, 0x50, 0x38, 0x38, 0x50, 0x38, 0x38, 0x50, 0x02, 0xb8, 0x38, // . 8P88P88P88P..8 + 0x50, 0x38, 0x38, 0x50, 0x98, 0x34, 0x2c, 0x02, 0xe0, 0x43, 0x88, 0x80, 0x53, 0x2c, 0x34, 0x70, // P88P.4,..C..S,4p + 0xa0, 0x70, 0x34, 0x2c, 0x2c, 0x34, 0x70, 0xa0, 0x70, 0x34, 0x2c, 0x36, 0x64, 0x37, 0x41, 0x4c, // .p4,,4p.p4,6d7AL + 0x2a, 0x27, 0x11, 0x2c, 0x34, 0x70, 0xa0, 0x70, 0x18, 0x50, 0x38, 0x38, 0x50, 0x38, 0x04, 0xb8, // *'.,4p.p.P88P8.. + 0x50, 0x38, 0x38, 0x50, 0x38, 0x48, 0x50, 0x38, 0x38, 0x50, 0x38, 0x60, 0x34, 0x59, 0x19, 0xfe, // P88P8HP88P8`4Y.. + 0xe1, 0x7f, 0x26, 0x2b, 0x28, 0x3e, 0x45, 0x1a, 0x19, 0x59, 0x34, 0x50, 0x70, 0x70, 0x50, 0x34, // ..&+(>E..Y4PppP4 + 0x59, 0x19, 0x03, 0x34, 0x19, 0x59, 0x34, 0x50, 0x70, 0x70, 0x50, 0x34, 0x59, 0x19, 0xfe, 0x0f, // Y..4.Y4PppP4Y... + 0x1a, 0x1f, 0x11, 0x19, 0x25, 0x2a, 0x3c, 0x4f, 0x34, 0x19, 0x59, 0x34, 0x50, 0x70, 0x70, 0x00, // ....%* @@ -3330,29 +3656,30 @@ static const uint8_t s_iconsFontAwesomeTtf[80776] = 0x01, 0x27, 0x1a, 0xff, 0x00, 0x1a, 0x27, 0x01, 0x1c, 0x01, 0x25, 0x1a, 0x01, 0x40, 0x1a, 0x25, // .'....'...%..@.% 0x01, 0x20, 0xe0, 0x1a, 0x26, 0x26, 0x1a, 0xe0, 0x1a, 0x26, 0x26, 0x04, 0x06, 0xfd, 0x00, 0x1a, // . ..&&...&&..... 0x26, 0x26, 0x1a, 0x03, 0x00, 0x1a, 0x26, 0x26, 0x00, 0x02, 0x00, 0x05, 0x00, 0x00, 0x05, 0xfe, // &&....&&........ - 0x05, 0x6b, 0x00, 0x22, 0x00, 0x47, 0x00, 0x00, 0x25, 0x15, 0x23, 0x2f, 0x01, 0x26, 0x27, 0x23, // .k.".G..%.#/.&'# - 0x07, 0x06, 0x0f, 0x01, 0x21, 0x35, 0x33, 0x13, 0x03, 0x23, 0x35, 0x21, 0x17, 0x16, 0x17, 0x16, // ....!53..#5!.... - 0x17, 0x33, 0x36, 0x3f, 0x02, 0x21, 0x15, 0x23, 0x03, 0x13, 0x01, 0x15, 0x21, 0x27, 0x26, 0x35, // .36?.!.#....!'&5 - 0x34, 0x3e, 0x04, 0x35, 0x34, 0x26, 0x23, 0x22, 0x07, 0x06, 0x07, 0x27, 0x36, 0x37, 0x36, 0x33, // 4>.54&#"...'6763 - 0x32, 0x16, 0x15, 0x14, 0x0e, 0x04, 0x07, 0x33, 0x35, 0x03, 0x81, 0xf8, 0x9f, 0x18, 0x08, 0x03, // 2......35....... - 0x03, 0x09, 0x0a, 0x0f, 0x9b, 0xfe, 0xfe, 0x80, 0xc5, 0xb9, 0x89, 0x01, 0x14, 0x8b, 0x02, 0x15, // ................ - 0x08, 0x03, 0x03, 0x03, 0x08, 0x19, 0x8c, 0x01, 0x01, 0x7d, 0xb8, 0xcc, 0x02, 0xea, 0xfd, 0xfe, // .........}...... - 0x03, 0x04, 0x34, 0x4e, 0x5a, 0x4e, 0x34, 0x3b, 0x29, 0x33, 0x2e, 0x0e, 0x16, 0x69, 0x1a, 0x25, // ..4NZN4;)3...i.% - 0x53, 0x69, 0x6e, 0x88, 0x31, 0x4b, 0x58, 0x4c, 0x37, 0x03, 0xe8, 0xa7, 0xa7, 0xfc, 0x2a, 0x09, // Sin.1KXL7.....*. - 0x0c, 0x15, 0x14, 0x18, 0xfa, 0xa7, 0x01, 0x23, 0x01, 0x10, 0xa8, 0xe4, 0x04, 0x26, 0x09, 0x0c, // .......#.....&.. - 0x09, 0x0c, 0x2a, 0xe4, 0xa8, 0xfe, 0xf5, 0xfe, 0xd8, 0x02, 0xa7, 0xce, 0x1b, 0x1c, 0x12, 0x40, // ..*............@ - 0x6a, 0x43, 0x3f, 0x2e, 0x3e, 0x21, 0x26, 0x31, 0x27, 0x0b, 0x1b, 0x5c, 0x25, 0x1d, 0x41, 0x77, // jC?.>!&1'...%.Aw - 0x63, 0x38, 0x5e, 0x3b, 0x3a, 0x2b, 0x3c, 0x21, 0x50, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x05, // c8^;:+.54&#"...' - 0x36, 0x37, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x0e, 0x03, 0x07, 0x33, 0x35, 0x03, 0x81, 0xf8, // 67632......35... - 0x9f, 0x18, 0x08, 0x03, 0x03, 0x09, 0x0a, 0x0f, 0x9b, 0xfe, 0xfe, 0x80, 0xc5, 0xb9, 0x89, 0x01, // ................ - 0x14, 0x8b, 0x02, 0x15, 0x08, 0x03, 0x03, 0x03, 0x08, 0x19, 0x8c, 0x01, 0x01, 0x7d, 0xb8, 0xcc, // .............}.. - 0x02, 0xec, 0xfd, 0xfe, 0x04, 0x03, 0x34, 0x4e, 0x5a, 0x4e, 0x34, 0x3b, 0x29, 0x33, 0x2e, 0x0e, // ......4NZN4;)3.. - 0x16, 0x69, 0x1a, 0x25, 0x50, 0x6c, 0x6e, 0x88, 0x45, 0x63, 0x64, 0x4a, 0x04, 0xe8, 0xa7, 0xa7, // .i.%Pln.EcdJ.... - 0xfc, 0x2a, 0x09, 0x0c, 0x15, 0x14, 0x18, 0xfa, 0xa7, 0x01, 0x23, 0x01, 0x10, 0xa8, 0xe4, 0x04, // .*........#..... + 0x05, 0x6b, 0x00, 0x25, 0x00, 0x4a, 0x00, 0x00, 0x25, 0x15, 0x23, 0x2f, 0x01, 0x26, 0x27, 0x23, // .k.%.J..%.#/.&'# + 0x0e, 0x02, 0x07, 0x06, 0x0f, 0x01, 0x21, 0x35, 0x33, 0x13, 0x03, 0x23, 0x35, 0x21, 0x17, 0x16, // ......!53..#5!.. + 0x17, 0x16, 0x17, 0x33, 0x36, 0x3f, 0x02, 0x21, 0x15, 0x23, 0x03, 0x13, 0x01, 0x15, 0x21, 0x27, // ...36?.!.#....!' + 0x26, 0x35, 0x34, 0x3e, 0x04, 0x35, 0x34, 0x26, 0x23, 0x22, 0x07, 0x06, 0x07, 0x27, 0x36, 0x37, // &54>.54&#"...'67 + 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x0e, 0x04, 0x07, 0x33, 0x35, 0x03, 0x81, 0xf8, 0x9f, 0x18, // 632......35..... + 0x08, 0x03, 0x03, 0x01, 0x03, 0x04, 0x01, 0x0a, 0x0f, 0x9b, 0xfe, 0xfe, 0x80, 0xc5, 0xb9, 0x89, // ................ + 0x01, 0x14, 0x8b, 0x02, 0x15, 0x08, 0x03, 0x03, 0x03, 0x08, 0x19, 0x8c, 0x01, 0x01, 0x7d, 0xb8, // ..............}. + 0xcc, 0x02, 0xea, 0xfd, 0xfe, 0x03, 0x04, 0x34, 0x4e, 0x5a, 0x4e, 0x34, 0x3b, 0x29, 0x33, 0x2e, // .......4NZN4;)3. + 0x0e, 0x16, 0x69, 0x1a, 0x25, 0x53, 0x69, 0x6e, 0x88, 0x31, 0x4b, 0x58, 0x4c, 0x37, 0x03, 0xe8, // ..i.%Sin.1KXL7.. + 0xa7, 0xa7, 0xfc, 0x2a, 0x09, 0x0c, 0x03, 0x07, 0x09, 0x02, 0x14, 0x18, 0xfa, 0xa7, 0x01, 0x23, // ...*...........# + 0x01, 0x10, 0xa8, 0xe4, 0x04, 0x26, 0x09, 0x0c, 0x09, 0x0c, 0x2a, 0xe4, 0xa8, 0xfe, 0xf5, 0xfe, // .....&....*..... + 0xd8, 0x02, 0xa7, 0xce, 0x1b, 0x1c, 0x12, 0x40, 0x6a, 0x43, 0x3f, 0x2e, 0x3e, 0x21, 0x26, 0x31, // .......@jC?.>!&1 + 0x27, 0x0b, 0x1b, 0x5c, 0x25, 0x1d, 0x41, 0x77, 0x63, 0x38, 0x5e, 0x3b, 0x3a, 0x2b, 0x3c, 0x21, // '...%.Awc8^;:+ + 0x04, 0x35, 0x34, 0x26, 0x23, 0x22, 0x07, 0x06, 0x07, 0x27, 0x36, 0x37, 0x36, 0x33, 0x32, 0x16, // .54&#"...'67632. + 0x15, 0x14, 0x0e, 0x03, 0x07, 0x33, 0x35, 0x03, 0x81, 0xf8, 0x9f, 0x18, 0x08, 0x03, 0x03, 0x01, // .....35......... + 0x03, 0x04, 0x01, 0x0a, 0x0f, 0x9b, 0xfe, 0xfe, 0x80, 0xc5, 0xb9, 0x89, 0x01, 0x14, 0x8b, 0x02, // ................ + 0x15, 0x08, 0x03, 0x03, 0x03, 0x08, 0x19, 0x8c, 0x01, 0x01, 0x7d, 0xb8, 0xcc, 0x02, 0xec, 0xfd, // ..........}..... + 0xfe, 0x04, 0x03, 0x34, 0x4e, 0x5a, 0x4e, 0x34, 0x3b, 0x29, 0x33, 0x2e, 0x0e, 0x16, 0x69, 0x1a, // ...4NZN4;)3...i. + 0x25, 0x50, 0x6c, 0x6e, 0x88, 0x45, 0x63, 0x64, 0x4a, 0x04, 0xe8, 0xa7, 0xa7, 0xfc, 0x2a, 0x09, // %Pln.EcdJ.....*. + 0x0c, 0x03, 0x07, 0x09, 0x02, 0x14, 0x18, 0xfa, 0xa7, 0x01, 0x23, 0x01, 0x10, 0xa8, 0xe4, 0x04, // ..........#..... 0x26, 0x09, 0x0c, 0x09, 0x0c, 0x2a, 0xe4, 0xa8, 0xfe, 0xf5, 0xfe, 0xd8, 0xd9, 0xce, 0x1b, 0x2d, // &....*.........- 0x01, 0x40, 0x6a, 0x43, 0x3f, 0x2e, 0x3e, 0x21, 0x26, 0x31, 0x27, 0x0b, 0x1b, 0x5c, 0x25, 0x1d, // .@jC?.>!&1'...%. 0x41, 0x77, 0x63, 0x42, 0x69, 0x43, 0x3a, 0x44, 0x27, 0x50, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, // AwcBiC:D'P...... @@ -3502,7 +3829,7 @@ static const uint8_t s_iconsFontAwesomeTtf[80776] = 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x35, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x32, 0x16, // "&=.46;.5..5462. 0x15, 0x14, 0x06, 0x07, 0x15, 0x33, 0x32, 0x16, 0x1d, 0x01, 0x14, 0x06, 0x2b, 0x01, 0x11, 0x3e, // .....32.....+..> 0x01, 0x37, 0x27, 0x26, 0x37, 0x36, 0x33, 0x21, 0x32, 0x16, 0x03, 0xc0, 0x26, 0x34, 0x26, 0x26, // .7'&763!2...&4&& - 0x34, 0x03, 0x66, 0x14, 0x08, 0x04, 0x0d, 0x0a, 0x5d, 0x77, 0xfe, 0x71, 0xfe, 0x34, 0xfe, 0x71, // 4.f.....]w.q.4.q + 0x34, 0x03, 0x66, 0x14, 0x08, 0x04, 0x0c, 0x0b, 0x5d, 0x77, 0xfe, 0x71, 0xfe, 0x34, 0xfe, 0x71, // 4.f.....]w.q.4.q 0x77, 0x5d, 0x09, 0x0e, 0x04, 0x08, 0x14, 0x12, 0x0e, 0x01, 0x60, 0x16, 0x08, 0x08, 0x0f, 0x64, // w]........`....d 0x43, 0xf5, 0x95, 0xc0, 0x1a, 0x26, 0x26, 0x1a, 0xc0, 0x3a, 0x46, 0x96, 0xd4, 0x96, 0x46, 0x3a, // C....&&..:F...F: 0xc0, 0x1a, 0x26, 0x26, 0x1a, 0xc0, 0x95, 0xf5, 0x43, 0x64, 0x0f, 0x08, 0x08, 0x16, 0x01, 0x60, // ..&&....Cd.....` @@ -3552,11 +3879,11 @@ static const uint8_t s_iconsFontAwesomeTtf[80776] = 0x01, 0x17, 0x1e, 0x01, 0x3b, 0x01, 0x32, 0x36, 0x25, 0x26, 0x02, 0x2e, 0x01, 0x24, 0x27, 0x26, // ....;.26%&...$'& 0x07, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x17, 0x16, 0x04, 0x12, 0x17, 0x1e, 0x01, 0x3b, 0x01, 0x32, // .............;.2 0x37, 0x36, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, // 76....#!"&5.463! - 0x32, 0x16, 0x02, 0x00, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x01, 0xaa, 0x0d, 0xfe, 0xb8, 0xe8, 0x0e, // 2...KjKKj....... + 0x32, 0x16, 0x02, 0x00, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x01, 0xaa, 0x0d, 0xfe, 0xb9, 0xe9, 0x0e, // 2...KjKKj....... 0x14, 0x11, 0x0d, 0x9a, 0xdc, 0x0b, 0x01, 0x12, 0x0d, 0x80, 0x0d, 0x14, 0x01, 0x7f, 0x05, 0x66, // ...............f 0xb1, 0xe9, 0xfe, 0xe1, 0x9a, 0x0e, 0x09, 0x0a, 0x12, 0x0d, 0xcc, 0x01, 0x5c, 0xd1, 0x07, 0x01, // ................ 0x12, 0x0d, 0x80, 0x0d, 0x0a, 0x0b, 0x01, 0x1f, 0xa9, 0x77, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, // .........w.@w..w - 0x03, 0xc0, 0x77, 0xa9, 0xcb, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0x22, 0xe8, 0x01, 0x48, 0x0d, 0x01, // ..w..jKKjK"..H.. + 0x03, 0xc0, 0x77, 0xa9, 0xcb, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0x22, 0xe9, 0x01, 0x47, 0x0d, 0x01, // ..w..jKKjK"..G.. 0x14, 0x0d, 0x80, 0x0d, 0x12, 0x01, 0x0b, 0xdc, 0x9a, 0x0d, 0x11, 0x14, 0x0d, 0x9a, 0x01, 0x1f, // ................ 0xe9, 0xb1, 0x66, 0x05, 0x01, 0x0a, 0x0a, 0x0d, 0x80, 0x0d, 0x12, 0x01, 0x07, 0xd1, 0xfe, 0xa4, // ..f............. 0xcc, 0x0d, 0x12, 0x0a, 0x09, 0x03, 0xcd, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, // ........@w..w..w @@ -3637,7 +3964,7 @@ static const uint8_t s_iconsFontAwesomeTtf[80776] = 0x0e, 0x05, 0x15, 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x27, 0x02, 0x37, 0x3e, 0x01, 0x33, // ......3276'.7>.3 0x15, 0x14, 0x17, 0x16, 0x33, 0x32, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, // ....32....#!"&5. 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x03, 0xed, 0x01, 0x60, 0x13, 0x13, 0xfe, 0xa0, 0x1e, 0x27, // 463!2....`.....' - 0x28, 0x77, 0xc2, 0x83, 0x61, 0x38, 0x21, 0x0a, 0xa7, 0x0a, 0x0f, 0x07, 0x06, 0x16, 0x03, 0x2c, // (w..a8!........, + 0x28, 0x77, 0xc2, 0x83, 0x61, 0x38, 0x21, 0x0a, 0xa7, 0x0b, 0x0e, 0x07, 0x06, 0x16, 0x03, 0x2c, // (w..a8!........, 0x6a, 0x2e, 0xa8, 0x8c, 0x28, 0x0c, 0x0c, 0x1a, 0x02, 0x26, 0xa9, 0x77, 0xfc, 0x40, 0x77, 0xa9, // j...(....&.w.@w. 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0x01, 0xb3, 0x01, 0x60, 0x13, 0x34, 0x13, 0x01, 0x60, 0x1f, // .w..w....`.4..`. 0x11, 0x11, 0x2a, 0xa0, 0x27, 0x3f, 0x5f, 0x60, 0x7a, 0x65, 0x3c, 0xb5, 0xdf, 0x0c, 0x03, 0x09, // ..*.'?_`ze<..... @@ -3792,275 +4119,288 @@ static const uint8_t s_iconsFontAwesomeTtf[80776] = 0xfc, 0x07, 0x1f, 0x3b, 0x61, 0xfd, 0x9d, 0x24, 0x38, 0x24, 0x19, 0x0c, 0x06, 0x02, 0xfe, 0xae, // ...;a..$8$...... 0x01, 0x03, 0x05, 0x0c, 0x10, 0x1a, 0x22, 0x2e, 0x01, 0xf8, 0x21, 0x33, 0x21, 0x17, 0x0a, 0x06, // ......"...!3!... 0x01, 0x01, 0xfe, 0xcd, 0x01, 0x01, 0x03, 0x08, 0x0e, 0x17, 0x1f, 0x2e, 0x00, 0x02, 0x00, 0x00, // ................ - 0xff, 0x80, 0x05, 0x00, 0x05, 0x80, 0x00, 0x11, 0x00, 0x18, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, // ................ - 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x11, 0x14, 0x16, 0x33, 0x25, 0x21, // #!"&5.463!...3%! - 0x11, 0x16, 0x17, 0x01, 0x16, 0x05, 0x00, 0x38, 0x28, 0xfb, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x02, // .......8(..(88(. - 0x20, 0x38, 0x28, 0x02, 0x1d, 0xfe, 0x03, 0x52, 0x32, 0x01, 0x38, 0x32, 0x03, 0x00, 0xfc, 0xe0, // 8(....R2.82.... - 0x28, 0x38, 0x38, 0x28, 0x05, 0x40, 0x28, 0x38, 0xfd, 0xe0, 0x28, 0x38, 0x80, 0x01, 0xfd, 0x0f, // (88(.@(8..(8.... - 0x32, 0xfe, 0xc8, 0x32, 0x00, 0x04, 0x00, 0x00, 0xff, 0x80, 0x05, 0x00, 0x05, 0x80, 0x00, 0x0f, // 2..2............ - 0x00, 0x1f, 0x00, 0x31, 0x00, 0x38, 0x00, 0x00, 0x25, 0x35, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, // ...1.8..%54&#!". - 0x1d, 0x01, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x11, 0x35, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, // ....3!26.54&#!". - 0x1d, 0x01, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // ....3!26....#!"& - 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x11, 0x14, 0x16, 0x33, 0x25, 0x21, 0x11, 0x16, 0x17, 0x01, // 5.463!...3%!.... - 0x16, 0x04, 0x00, 0x12, 0x0e, 0xfd, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x02, 0xc0, 0x0e, 0x12, 0x12, // ......@......... - 0x0e, 0xfd, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x02, 0xc0, 0x0e, 0x12, 0x01, 0x00, 0x38, 0x28, 0xfb, // ..@..........8(. - 0xc0, 0x28, 0x38, 0x38, 0x28, 0x02, 0x20, 0x38, 0x28, 0x02, 0x1d, 0xfe, 0x03, 0x52, 0x32, 0x01, // .(88(. 8(....R2. - 0x38, 0x32, 0xa0, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x01, 0x0e, 0x40, 0x0e, // 82.@....@.....@. - 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x01, 0x6e, 0xfc, 0xe0, 0x28, 0x38, 0x38, 0x28, 0x05, // ...@....n..(88(. - 0x40, 0x28, 0x38, 0xfd, 0xe0, 0x28, 0x38, 0x80, 0x01, 0xfd, 0x0f, 0x32, 0xfe, 0xc8, 0x32, 0x00, // @(8..(8....2..2. - 0x00, 0x04, 0x00, 0x22, 0xff, 0x00, 0x06, 0x7d, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x24, 0x00, 0x42, // ..."...}.....$.B - 0x00, 0x52, 0x00, 0x00, 0x01, 0x33, 0x2f, 0x01, 0x26, 0x35, 0x23, 0x07, 0x14, 0x06, 0x07, 0x01, // .R...3/.&5#..... - 0x14, 0x07, 0x01, 0x06, 0x23, 0x22, 0x27, 0x01, 0x26, 0x37, 0x36, 0x3b, 0x01, 0x11, 0x34, 0x36, // ....#"'.&76;..46 - 0x3b, 0x01, 0x32, 0x16, 0x15, 0x11, 0x33, 0x32, 0x16, 0x05, 0x15, 0x21, 0x35, 0x01, 0x36, 0x3f, // ;.2...32...!5.6? - 0x01, 0x35, 0x22, 0x06, 0x23, 0x06, 0x2b, 0x01, 0x15, 0x23, 0x35, 0x21, 0x15, 0x01, 0x06, 0x0f, // .5".#.+..#5!.... - 0x01, 0x15, 0x37, 0x36, 0x3b, 0x01, 0x35, 0x13, 0x15, 0x21, 0x35, 0x33, 0x27, 0x23, 0x07, 0x33, // ..76;.5..!53'#.3 - 0x15, 0x21, 0x35, 0x33, 0x13, 0x33, 0x13, 0x04, 0xa7, 0xb1, 0x48, 0x0c, 0x02, 0x04, 0x03, 0x07, // .!53.3....H..... - 0x04, 0xfd, 0xf0, 0x0a, 0xfe, 0xc1, 0x0a, 0x0d, 0x0c, 0x0b, 0xfe, 0xc0, 0x0f, 0x08, 0x08, 0x16, // ................ - 0xc0, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0xc0, 0x0e, 0x12, 0x03, 0x44, 0xfd, 0xb8, 0x01, 0x71, 0x0c, // ..........D...q. - 0x09, 0x0b, 0x02, 0x09, 0x03, 0x0c, 0x12, 0xe8, 0x78, 0x02, 0x37, 0xfe, 0x8f, 0x06, 0x0f, 0x0b, // ........x.7..... - 0x0e, 0x09, 0x15, 0xf8, 0xd2, 0xfe, 0xe0, 0x4b, 0x2f, 0xf3, 0x2f, 0x4b, 0xfe, 0xe1, 0x46, 0xe6, // .......K/./K..F. - 0xa2, 0xe6, 0x04, 0x68, 0xda, 0x2f, 0x10, 0x04, 0x14, 0x01, 0x22, 0x0c, 0xfb, 0x1e, 0x0c, 0x0c, // ...h./...."..... - 0xfe, 0xc1, 0x09, 0x09, 0x01, 0x40, 0x10, 0x13, 0x14, 0x05, 0x60, 0x0e, 0x12, 0x12, 0x0e, 0xfa, // .....@....`..... - 0xa0, 0x12, 0x85, 0xe9, 0x5a, 0x02, 0x11, 0x12, 0x09, 0x09, 0x03, 0x01, 0x03, 0x73, 0xe5, 0x59, // ....Z........s.Y - 0xfd, 0xee, 0x08, 0x12, 0x0b, 0x02, 0x02, 0x02, 0x77, 0x03, 0x81, 0x6a, 0x6a, 0x90, 0x90, 0x6a, // ........w..jj..j - 0x6a, 0x02, 0x96, 0xfd, 0x6a, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x22, 0xff, 0x00, 0x06, 0x7d, // j...j......"...} - 0x06, 0x00, 0x00, 0x0a, 0x00, 0x24, 0x00, 0x34, 0x00, 0x52, 0x00, 0x00, 0x25, 0x33, 0x2f, 0x01, // .....$.4.R..%3/. - 0x26, 0x35, 0x23, 0x07, 0x14, 0x06, 0x07, 0x05, 0x14, 0x07, 0x01, 0x06, 0x23, 0x22, 0x27, 0x01, // &5#.........#"'. + 0xff, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x18, 0x00, 0x00, 0x01, 0x11, 0x16, 0x17, // ................ + 0x01, 0x16, 0x17, 0x05, 0x14, 0x16, 0x33, 0x21, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, // ......3!...#!"&5 + 0x11, 0x34, 0x36, 0x33, 0x21, 0x04, 0x00, 0x16, 0x0e, 0x01, 0x98, 0x0e, 0x0e, 0xfd, 0xa8, 0x38, // .463!..........8 + 0x28, 0x02, 0x20, 0x38, 0x28, 0xfa, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x03, 0x20, 0x04, 0x00, 0x01, // (. 8(..(88(. ... + 0xd8, 0x0e, 0x0e, 0xfe, 0x68, 0x0e, 0x16, 0x20, 0x28, 0x38, 0xfb, 0xe0, 0x28, 0x38, 0x38, 0x28, // ....h.. (8..(88( + 0x06, 0x40, 0x28, 0x38, 0x00, 0x05, 0x00, 0x00, 0xff, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x06, // .@(8............ + 0x00, 0x18, 0x00, 0x28, 0x00, 0x38, 0x00, 0x48, 0x00, 0x00, 0x01, 0x16, 0x17, 0x21, 0x11, 0x16, // ...(.8.H.....!.. + 0x17, 0x03, 0x21, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, // ..!...#!"&5.463! + 0x11, 0x14, 0x16, 0x13, 0x35, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x33, // ....54&#!".....3 + 0x21, 0x32, 0x36, 0x11, 0x35, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x33, // !26.54&#!".....3 + 0x21, 0x32, 0x36, 0x11, 0x35, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x33, // !26.54&#!".....3 + 0x21, 0x32, 0x36, 0x05, 0xbc, 0x0e, 0x0e, 0xfe, 0x28, 0x16, 0x0e, 0x44, 0x02, 0x20, 0x38, 0x28, // !26.....(..D. 8( + 0xfa, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x03, 0x20, 0x38, 0xc8, 0x12, 0x0e, 0xfd, 0x40, 0x0e, 0x12, // ..(88(. 8....@.. + 0x12, 0x0e, 0x02, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xfd, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x02, 0xc0, // .........@...... + 0x0e, 0x12, 0x12, 0x0e, 0xfd, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x02, 0xc0, 0x0e, 0x12, 0x04, 0x24, // .....@.........$ + 0x0e, 0x16, 0x01, 0xd8, 0x0e, 0x0e, 0xfd, 0xc4, 0xfb, 0xe0, 0x28, 0x38, 0x38, 0x28, 0x06, 0x40, // ..........(88(.@ + 0x28, 0x38, 0xfd, 0xe0, 0x28, 0x38, 0xfd, 0x20, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, // (8..(8. @....@.. + 0x12, 0x01, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x01, 0x0e, 0x40, 0x0e, // ...@....@.....@. + 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x00, 0x00, 0x04, 0x00, 0x22, 0xff, 0x00, 0x06, 0x7d, // ...@......."...} + 0x06, 0x00, 0x00, 0x0a, 0x00, 0x24, 0x00, 0x42, 0x00, 0x52, 0x00, 0x00, 0x01, 0x33, 0x2f, 0x01, // .....$.B.R...3/. + 0x26, 0x35, 0x23, 0x07, 0x14, 0x06, 0x07, 0x01, 0x14, 0x07, 0x01, 0x06, 0x23, 0x22, 0x27, 0x01, // &5#.........#"'. 0x26, 0x37, 0x36, 0x3b, 0x01, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x15, 0x11, 0x33, 0x32, // &76;..46;.2...32 - 0x16, 0x01, 0x15, 0x21, 0x35, 0x33, 0x27, 0x23, 0x07, 0x33, 0x15, 0x21, 0x35, 0x33, 0x13, 0x33, // ...!53'#.3.!53.3 - 0x13, 0x03, 0x15, 0x21, 0x35, 0x01, 0x36, 0x3f, 0x01, 0x35, 0x22, 0x06, 0x23, 0x06, 0x2b, 0x01, // ...!5.6?.5".#.+. - 0x15, 0x23, 0x35, 0x21, 0x15, 0x01, 0x06, 0x0f, 0x01, 0x15, 0x37, 0x36, 0x3b, 0x01, 0x35, 0x04, // .#5!......76;.5. + 0x16, 0x05, 0x15, 0x21, 0x35, 0x01, 0x36, 0x3f, 0x01, 0x35, 0x22, 0x06, 0x23, 0x06, 0x2b, 0x01, // ...!5.6?.5".#.+. + 0x15, 0x23, 0x35, 0x21, 0x15, 0x01, 0x06, 0x0f, 0x01, 0x15, 0x37, 0x36, 0x3b, 0x01, 0x35, 0x13, // .#5!......76;.5. + 0x15, 0x21, 0x35, 0x33, 0x27, 0x23, 0x07, 0x33, 0x15, 0x21, 0x35, 0x33, 0x13, 0x33, 0x13, 0x04, // .!53'#.3.!53.3.. 0xa7, 0xb1, 0x48, 0x0c, 0x02, 0x04, 0x03, 0x07, 0x04, 0xfd, 0xf0, 0x0a, 0xfe, 0xc1, 0x0a, 0x0d, // ..H............. 0x0c, 0x0b, 0xfe, 0xc0, 0x0f, 0x08, 0x08, 0x16, 0xc0, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0xc0, 0x0e, // ................ - 0x12, 0x03, 0x9d, 0xfe, 0xe0, 0x4b, 0x2f, 0xf3, 0x2f, 0x4b, 0xfe, 0xe1, 0x46, 0xe6, 0xa2, 0xe6, // .....K/./K..F... - 0x13, 0xfd, 0xb8, 0x01, 0x71, 0x0c, 0x09, 0x0b, 0x02, 0x09, 0x03, 0x0c, 0x12, 0xe8, 0x78, 0x02, // ....q.........x. - 0x37, 0xfe, 0x8f, 0x06, 0x0f, 0x0b, 0x0e, 0x09, 0x15, 0xf8, 0x68, 0xda, 0x2f, 0x10, 0x04, 0x14, // 7.........h./... - 0x01, 0x22, 0x0c, 0xe2, 0x0c, 0x0c, 0xfe, 0xc1, 0x09, 0x09, 0x01, 0x40, 0x10, 0x13, 0x14, 0x05, // .".........@.... - 0x60, 0x0e, 0x12, 0x12, 0x0e, 0xfa, 0xa0, 0x12, 0xfe, 0xfc, 0x6a, 0x6a, 0x90, 0x90, 0x6a, 0x6a, // `.........jj..jj - 0x02, 0x96, 0xfd, 0x6a, 0x04, 0x7f, 0xe9, 0x5a, 0x02, 0x11, 0x12, 0x09, 0x09, 0x03, 0x01, 0x03, // ...j...Z........ - 0x73, 0xe5, 0x59, 0xfd, 0xee, 0x08, 0x12, 0x0a, 0x03, 0x03, 0x01, 0x77, 0x00, 0x05, 0x00, 0x22, // s.Y........w..." - 0xff, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x19, 0x00, 0x29, 0x00, 0x39, 0x00, 0x49, 0x00, 0x59, // .........).9.I.Y - 0x00, 0x00, 0x25, 0x14, 0x07, 0x01, 0x06, 0x23, 0x22, 0x27, 0x01, 0x26, 0x37, 0x36, 0x3b, 0x01, // ..%....#"'.&76;. - 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x15, 0x11, 0x33, 0x32, 0x16, 0x05, 0x15, 0x14, 0x06, // .46;.2...32..... - 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x03, 0x15, 0x14, 0x06, // #!"&=.463!2..... - 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x03, 0x15, 0x14, 0x06, // #!"&=.463!2..... - 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x03, 0x15, 0x14, 0x06, // #!"&=.463!2..... - 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x02, 0xe0, 0x0a, 0xfe, // #!"&=.463!2..... - 0xc1, 0x0a, 0x0d, 0x0c, 0x0b, 0xfe, 0xc0, 0x0f, 0x08, 0x08, 0x16, 0xc0, 0x12, 0x0e, 0xc0, 0x0e, // ................ - 0x12, 0xc0, 0x0e, 0x12, 0x04, 0x20, 0x12, 0x0e, 0xfc, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0x03, 0x40, // ..... .........@ - 0x0e, 0x12, 0xc0, 0x12, 0x0e, 0xfd, 0x80, 0x0e, 0x12, 0x12, 0x0e, 0x02, 0x80, 0x0e, 0x12, 0xc0, // ................ - 0x12, 0x0e, 0xfe, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x01, 0xc0, 0x0e, 0x12, 0xc0, 0x12, 0x0e, 0xff, // ...@............ - 0x00, 0x0e, 0x12, 0x12, 0x0e, 0x01, 0x00, 0x0e, 0x12, 0x60, 0x0c, 0x0c, 0xfe, 0xc1, 0x09, 0x09, // .........`...... - 0x01, 0x40, 0x10, 0x13, 0x14, 0x05, 0x60, 0x0e, 0x12, 0x12, 0x0e, 0xfa, 0xa0, 0x12, 0x8e, 0xc0, // .@....`......... - 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x01, 0xf2, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, // ................ - 0x0e, 0x12, 0x12, 0x01, 0xf2, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x01, 0xf2, // ................ - 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x22, // ..............." - 0xff, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x0f, 0x00, 0x29, 0x00, 0x39, 0x00, 0x49, 0x00, 0x59, // .........).9.I.Y - 0x00, 0x00, 0x05, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, // ......#!"&=.463! - 0x32, 0x16, 0x25, 0x14, 0x07, 0x01, 0x06, 0x23, 0x22, 0x27, 0x01, 0x26, 0x37, 0x36, 0x3b, 0x01, // 2.%....#"'.&76;. - 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x15, 0x11, 0x33, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, // .46;.2...32..... - 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x13, 0x15, 0x14, 0x06, // #!"&=.463!2..... - 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x13, 0x15, 0x14, 0x06, // #!"&=.463!2..... - 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x04, 0xc0, 0x12, 0x0e, // #!"&=.463!2..... - 0xff, 0x00, 0x0e, 0x12, 0x12, 0x0e, 0x01, 0x00, 0x0e, 0x12, 0xfe, 0x20, 0x0a, 0xfe, 0xc1, 0x0a, // ........... .... - 0x0d, 0x0c, 0x0b, 0xfe, 0xc0, 0x0f, 0x08, 0x08, 0x16, 0xc0, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0xc0, // ................ - 0x0e, 0x12, 0x02, 0xa0, 0x12, 0x0e, 0xfe, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x01, 0xc0, 0x0e, 0x12, // .......@........ - 0xc0, 0x12, 0x0e, 0xfd, 0x80, 0x0e, 0x12, 0x12, 0x0e, 0x02, 0x80, 0x0e, 0x12, 0xc0, 0x12, 0x0e, // ................ - 0xfc, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0x03, 0x40, 0x0e, 0x12, 0x20, 0xc0, 0x0e, 0x12, 0x12, 0x0e, // .......@.. ..... - 0xc0, 0x0e, 0x12, 0x12, 0x72, 0x0c, 0x0c, 0xfe, 0xc1, 0x09, 0x09, 0x01, 0x40, 0x10, 0x13, 0x14, // ....r.......@... - 0x05, 0x60, 0x0e, 0x12, 0x12, 0x0e, 0xfa, 0xa0, 0x12, 0x01, 0x72, 0xc0, 0x0e, 0x12, 0x12, 0x0e, // .`........r..... - 0xc0, 0x0e, 0x12, 0x12, 0x01, 0xf2, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x01, // ................ - 0xf2, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x00, 0x00, 0x00, 0x04, 0x00, 0x22, // ..............." - 0xff, 0x00, 0x05, 0xce, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x24, 0x00, 0x43, 0x00, 0x56, 0x00, 0x00, // .........$.C.V.. - 0x25, 0x34, 0x26, 0x23, 0x22, 0x06, 0x14, 0x16, 0x33, 0x32, 0x36, 0x05, 0x14, 0x07, 0x01, 0x06, // %4&#"...326..... - 0x23, 0x22, 0x27, 0x01, 0x26, 0x37, 0x36, 0x3b, 0x01, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, // #"'.&76;..46;.2. - 0x15, 0x11, 0x33, 0x32, 0x16, 0x25, 0x14, 0x0e, 0x03, 0x23, 0x22, 0x27, 0x26, 0x27, 0x37, 0x16, // ..32.%...#"'&'7. - 0x17, 0x16, 0x33, 0x32, 0x36, 0x37, 0x23, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, // ..3267#..#"&5463 - 0x32, 0x16, 0x03, 0x15, 0x21, 0x35, 0x33, 0x11, 0x34, 0x36, 0x3d, 0x01, 0x23, 0x07, 0x06, 0x0f, // 2...!53.46=.#... - 0x01, 0x27, 0x37, 0x33, 0x11, 0x05, 0x42, 0x58, 0x3b, 0x34, 0x3e, 0x49, 0x44, 0x32, 0x46, 0xfd, // .'73..BX;4>ID2F. - 0x9e, 0x0a, 0xfe, 0xc1, 0x0a, 0x0d, 0x0c, 0x0b, 0xfe, 0xc0, 0x0f, 0x08, 0x08, 0x16, 0xc0, 0x12, // ................ - 0x0e, 0xc0, 0x0e, 0x12, 0xc0, 0x0e, 0x12, 0x02, 0xee, 0x1a, 0x38, 0x50, 0x75, 0x45, 0x3e, 0x2e, // ..........8PuE>. - 0x18, 0x12, 0x27, 0x0f, 0x10, 0x25, 0x26, 0x54, 0x65, 0x10, 0x02, 0x15, 0x51, 0x2c, 0x6a, 0x86, // ..'..%&Te...Q,j. - 0x90, 0x6d, 0x7b, 0xa4, 0x1e, 0xfe, 0x2b, 0xa7, 0x01, 0x02, 0x07, 0x08, 0x12, 0x3e, 0x52, 0xc0, // .m{...+......>R. - 0x7b, 0xdf, 0x3f, 0x6a, 0x4a, 0x72, 0x4c, 0x36, 0x56, 0x0c, 0x0c, 0xfe, 0xc1, 0x09, 0x09, 0x01, // {.?jJrL6V....... - 0x40, 0x10, 0x13, 0x14, 0x05, 0x60, 0x0e, 0x12, 0x12, 0x0e, 0xfa, 0xa0, 0x12, 0x37, 0x3e, 0x77, // @....`.......7>w - 0x6d, 0x52, 0x31, 0x10, 0x08, 0x07, 0x71, 0x07, 0x04, 0x0d, 0x75, 0x57, 0x17, 0x1c, 0x8f, 0x65, // mR1...q...uW...e - 0x69, 0x92, 0xbd, 0x02, 0x2f, 0x72, 0x72, 0x01, 0xb0, 0x07, 0x18, 0x05, 0x10, 0x0c, 0x0d, 0x12, // i.../rr......... - 0x3a, 0x56, 0xb9, 0xfd, 0x72, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x22, 0xff, 0x00, 0x05, 0xce, // :V..r......".... - 0x06, 0x00, 0x00, 0x0a, 0x00, 0x24, 0x00, 0x37, 0x00, 0x56, 0x00, 0x00, 0x01, 0x34, 0x26, 0x23, // .....$.7.V...4&# - 0x22, 0x06, 0x14, 0x16, 0x33, 0x32, 0x36, 0x01, 0x14, 0x07, 0x01, 0x06, 0x23, 0x22, 0x27, 0x01, // "...326.....#"'. - 0x26, 0x37, 0x36, 0x3b, 0x01, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x15, 0x11, 0x33, 0x32, // &76;..46;.2...32 - 0x16, 0x05, 0x15, 0x21, 0x35, 0x33, 0x11, 0x34, 0x36, 0x3d, 0x01, 0x23, 0x07, 0x06, 0x0f, 0x01, // ...!53.46=.#.... - 0x27, 0x37, 0x33, 0x11, 0x13, 0x14, 0x0e, 0x03, 0x23, 0x22, 0x27, 0x26, 0x27, 0x37, 0x16, 0x17, // '73.....#"'&'7.. - 0x16, 0x33, 0x32, 0x36, 0x37, 0x23, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, // .3267#..#"&54632 - 0x16, 0x05, 0x42, 0x58, 0x3b, 0x34, 0x3e, 0x49, 0x44, 0x32, 0x46, 0xfd, 0x9e, 0x0a, 0xfe, 0xc1, // ..BX;4>ID2F..... - 0x0a, 0x0d, 0x0c, 0x0b, 0xfe, 0xc0, 0x0f, 0x08, 0x08, 0x16, 0xc0, 0x12, 0x0e, 0xc0, 0x0e, 0x12, // ................ - 0xc0, 0x0e, 0x12, 0x02, 0xd0, 0xfe, 0x2b, 0xa7, 0x01, 0x02, 0x07, 0x08, 0x12, 0x3e, 0x52, 0xc0, // ......+......>R. - 0x7b, 0xc3, 0x1a, 0x38, 0x50, 0x75, 0x45, 0x3e, 0x2e, 0x18, 0x12, 0x27, 0x0f, 0x10, 0x25, 0x26, // {..8PuE>...'..%& - 0x54, 0x65, 0x10, 0x02, 0x15, 0x51, 0x2c, 0x6a, 0x86, 0x90, 0x6d, 0x7b, 0xa4, 0x04, 0xdf, 0x3f, // Te...Q,j..m{...? - 0x6a, 0x4a, 0x72, 0x4c, 0x36, 0xfb, 0xaa, 0x0c, 0x0c, 0xfe, 0xc1, 0x09, 0x09, 0x01, 0x40, 0x10, // jJrL6.........@. - 0x13, 0x14, 0x05, 0x60, 0x0e, 0x12, 0x12, 0x0e, 0xfa, 0xa0, 0x12, 0xfc, 0x72, 0x72, 0x01, 0xb0, // ...`........rr.. - 0x07, 0x18, 0x05, 0x10, 0x0c, 0x0d, 0x12, 0x3a, 0x56, 0xb9, 0xfd, 0x72, 0x05, 0x33, 0x3e, 0x77, // .......:V..r.3>w - 0x6d, 0x52, 0x31, 0x10, 0x08, 0x07, 0x71, 0x07, 0x04, 0x0d, 0x75, 0x57, 0x17, 0x1c, 0x8f, 0x65, // mR1...q...uW...e - 0x69, 0x92, 0xbd, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x40, 0x05, 0x80, 0x00, 0x0b, // i..........@.... - 0x00, 0x1b, 0x00, 0x5c, 0x00, 0x00, 0x25, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, 0x33, // ......%4&#"....3 - 0x32, 0x36, 0x13, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, // 26....#!"&5.463! - 0x32, 0x16, 0x05, 0x14, 0x07, 0x16, 0x15, 0x16, 0x07, 0x16, 0x07, 0x06, 0x07, 0x16, 0x07, 0x06, // 2............... - 0x07, 0x2b, 0x02, 0x22, 0x2e, 0x01, 0x27, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, // .+."..'&'..5.467 - 0x3e, 0x01, 0x37, 0x36, 0x37, 0x3e, 0x02, 0x37, 0x3e, 0x02, 0x37, 0x36, 0x33, 0x32, 0x1e, 0x05, // >.767>.7>.7632.. - 0x15, 0x14, 0x0e, 0x01, 0x07, 0x0e, 0x02, 0x07, 0x21, 0x32, 0x16, 0x01, 0x00, 0x26, 0x1a, 0x1b, // ........!2...&.. - 0x25, 0x25, 0x1b, 0x1a, 0x26, 0xa0, 0x26, 0x1a, 0xfe, 0xe0, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0x20, // %%..&.&....&&.. - 0x1a, 0x26, 0x04, 0xa0, 0x37, 0x0f, 0x03, 0x2e, 0x11, 0x11, 0x0f, 0x27, 0x09, 0x3a, 0x40, 0x85, // .&..7......'.:@. - 0x24, 0x4c, 0x11, 0x42, 0x9c, 0x57, 0x4d, 0x7b, 0x23, 0x1a, 0x26, 0x24, 0x19, 0x18, 0x68, 0x31, // $L.B.WM{#.&$..h1 - 0x44, 0x21, 0x12, 0x1a, 0x09, 0x09, 0x07, 0x0b, 0x1c, 0x14, 0x13, 0x1a, 0x2e, 0x49, 0x2f, 0x21, // D!...........I/! - 0x0f, 0x09, 0x01, 0x13, 0x13, 0x12, 0x03, 0x0e, 0x08, 0x04, 0x01, 0x15, 0x4e, 0x72, 0xc0, 0x1a, // ............Nr.. - 0x26, 0x26, 0x1a, 0x1b, 0x25, 0x25, 0x02, 0x1b, 0xfd, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x02, 0x80, // &&..%%.....&&... - 0x1a, 0x26, 0x26, 0x1a, 0x56, 0x3f, 0x2c, 0x20, 0x4c, 0x3d, 0x38, 0x3d, 0x39, 0x25, 0x70, 0x45, // .&&.V?, L=8=9%pE - 0x4c, 0x02, 0x1f, 0x1b, 0x1a, 0x2b, 0x01, 0x01, 0x25, 0x1a, 0x02, 0x81, 0x19, 0x25, 0x02, 0x02, // L....+..%....%.. - 0x72, 0x40, 0x57, 0x21, 0x12, 0x3c, 0x25, 0x2a, 0x27, 0x2c, 0x3c, 0x14, 0x13, 0x15, 0x1f, 0x32, // r@W!.<%*',<....2 - 0x28, 0x3c, 0x1e, 0x18, 0x26, 0x4c, 0x2c, 0x22, 0x06, 0x18, 0x14, 0x0e, 0x72, 0x00, 0x00, 0x00, // (<..&L,"....r... - 0x00, 0x03, 0x00, 0x00, 0xff, 0x00, 0x06, 0x40, 0x05, 0x00, 0x00, 0x0b, 0x00, 0x1b, 0x00, 0x5c, // .......@........ - 0x00, 0x00, 0x01, 0x14, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x13, 0x11, // .....#"&54632... - 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x25, 0x16, // 4&#!".....3!26%. - 0x15, 0x0e, 0x01, 0x23, 0x21, 0x1e, 0x02, 0x17, 0x1e, 0x02, 0x15, 0x14, 0x0e, 0x05, 0x23, 0x22, // ...#!.........#" - 0x27, 0x2e, 0x02, 0x27, 0x2e, 0x02, 0x27, 0x26, 0x27, 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x35, 0x11, // '..'..'&'..'..5. - 0x34, 0x36, 0x37, 0x36, 0x37, 0x3e, 0x02, 0x3b, 0x03, 0x16, 0x17, 0x16, 0x07, 0x16, 0x17, 0x16, // 46767>.;........ - 0x07, 0x16, 0x07, 0x14, 0x01, 0x00, 0x26, 0x1a, 0x1b, 0x25, 0x25, 0x1b, 0x1a, 0x26, 0xa0, 0x26, // ......&..%%..&.& - 0x1a, 0xfe, 0xe0, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0x20, 0x1a, 0x26, 0x04, 0x69, 0x37, 0x01, 0x71, // ....&&.. .&.i7.q - 0x4e, 0xfe, 0xeb, 0x04, 0x08, 0x0e, 0x03, 0x12, 0x12, 0x14, 0x01, 0x09, 0x0f, 0x21, 0x2f, 0x49, // N............!/I - 0x2e, 0x1a, 0x13, 0x14, 0x1c, 0x0b, 0x07, 0x09, 0x09, 0x1a, 0x12, 0x21, 0x44, 0x31, 0x68, 0x18, // ...........!D1h. - 0x19, 0x24, 0x26, 0x1a, 0x23, 0x7b, 0x4d, 0x57, 0x9c, 0x42, 0x11, 0x4c, 0x24, 0x85, 0x40, 0x3a, // .$&.#{MW.B.L$.@: - 0x09, 0x27, 0x0f, 0x11, 0x11, 0x2e, 0x03, 0x03, 0xc0, 0x1a, 0x26, 0x26, 0x1a, 0x1b, 0x25, 0x25, // .'........&&..%% - 0xfd, 0xe5, 0x02, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0xfd, 0x80, 0x1a, 0x26, 0x26, 0xaf, 0x3d, 0x58, // .....&&....&&.=X - 0x4e, 0x72, 0x0e, 0x14, 0x18, 0x06, 0x25, 0x28, 0x4d, 0x26, 0x18, 0x1e, 0x3c, 0x28, 0x32, 0x1f, // Nr....%(M&..<(2. - 0x15, 0x13, 0x14, 0x3c, 0x2c, 0x27, 0x2a, 0x25, 0x3c, 0x12, 0x21, 0x57, 0x40, 0x72, 0x02, 0x02, // ...<,'*%<.!W@r.. - 0x25, 0x19, 0x02, 0x81, 0x1a, 0x25, 0x01, 0x01, 0x2b, 0x1a, 0x1b, 0x1f, 0x02, 0x4c, 0x45, 0x70, // %....%..+....LEp - 0x25, 0x39, 0x3d, 0x38, 0x3d, 0x4c, 0x20, 0x00, 0x00, 0x0c, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // %9=8=L ......... - 0x05, 0x80, 0x00, 0x09, 0x00, 0x0f, 0x00, 0x17, 0x00, 0x2b, 0x00, 0x3d, 0x00, 0x5c, 0x00, 0x64, // .........+.=...d - 0x00, 0x7f, 0x00, 0x8c, 0x00, 0x9e, 0x00, 0xb2, 0x00, 0xc2, 0x00, 0x00, 0x25, 0x35, 0x34, 0x23, // ............%54# - 0x22, 0x07, 0x15, 0x16, 0x33, 0x32, 0x37, 0x33, 0x35, 0x34, 0x22, 0x15, 0x25, 0x15, 0x23, 0x11, // "...327354".%.#. - 0x23, 0x11, 0x23, 0x35, 0x05, 0x11, 0x23, 0x35, 0x06, 0x23, 0x22, 0x27, 0x26, 0x35, 0x11, 0x33, // #.#5..#5.#"'&5.3 - 0x11, 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x11, 0x05, 0x15, 0x14, 0x07, 0x06, 0x23, 0x22, 0x27, // ....327......#"' - 0x15, 0x23, 0x11, 0x33, 0x15, 0x36, 0x33, 0x32, 0x17, 0x16, 0x17, 0x15, 0x14, 0x07, 0x06, 0x07, // .#.3.632........ - 0x06, 0x23, 0x22, 0x27, 0x26, 0x3d, 0x01, 0x34, 0x37, 0x36, 0x32, 0x17, 0x16, 0x1d, 0x01, 0x23, // .#"'&=.4762....# - 0x15, 0x14, 0x33, 0x32, 0x37, 0x34, 0x36, 0x34, 0x35, 0x01, 0x15, 0x14, 0x22, 0x3d, 0x01, 0x34, // ..3274645..."=.4 - 0x32, 0x01, 0x34, 0x27, 0x2e, 0x01, 0x27, 0x26, 0x21, 0x20, 0x07, 0x0e, 0x01, 0x07, 0x06, 0x15, // 2.4'..'&! ...... - 0x14, 0x17, 0x1e, 0x01, 0x17, 0x16, 0x20, 0x37, 0x3e, 0x01, 0x37, 0x36, 0x01, 0x13, 0x23, 0x07, // ...... 7>.76..#. - 0x27, 0x23, 0x1e, 0x01, 0x17, 0x16, 0x17, 0x15, 0x33, 0x25, 0x35, 0x34, 0x27, 0x26, 0x23, 0x22, // '#......3%54'&#" - 0x07, 0x06, 0x1d, 0x01, 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x17, 0x33, 0x11, 0x23, 0x11, // .......3276.3.#. - 0x06, 0x23, 0x22, 0x27, 0x26, 0x35, 0x11, 0x23, 0x11, 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x01, // .#"'&5.#....327. - 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x03, // ...#!"&5.463!2.. - 0x97, 0x1d, 0x11, 0x10, 0x10, 0x11, 0x1d, 0xb8, 0x42, 0x42, 0xfd, 0xc5, 0x50, 0x4a, 0x4e, 0x01, // ........BB..PJN. - 0xb1, 0x43, 0x27, 0x25, 0x21, 0x09, 0x06, 0x42, 0x01, 0x01, 0x0e, 0x14, 0x16, 0x01, 0x3f, 0x07, // .C'%!..B......?. - 0x0c, 0x29, 0x23, 0x21, 0x43, 0x43, 0x20, 0x24, 0x29, 0x0c, 0x07, 0xfb, 0x02, 0x03, 0x0c, 0x1b, // .)#!CC $)....... - 0x35, 0x34, 0x1d, 0x15, 0x14, 0x1d, 0x66, 0x1b, 0x15, 0x85, 0x22, 0x18, 0x06, 0x01, 0xfe, 0x81, // 54....f..."..... - 0x40, 0x40, 0x02, 0x15, 0x13, 0x0a, 0x42, 0x2b, 0x88, 0xfe, 0xec, 0xfe, 0xed, 0x88, 0x2c, 0x41, // @@....B+......,A - 0x0a, 0x14, 0x14, 0x0a, 0x41, 0x2b, 0x89, 0x02, 0x26, 0x89, 0x2b, 0x41, 0x0a, 0x14, 0xfd, 0x0d, // ....A+..&.+A.... - 0x5a, 0x4b, 0x33, 0x35, 0x4e, 0x08, 0x20, 0x07, 0x23, 0x0b, 0x4a, 0x01, 0x21, 0x15, 0x1d, 0x31, // ZK35N. .#.J.!..1 - 0x33, 0x1b, 0x15, 0x15, 0x1b, 0x33, 0x31, 0x1d, 0x15, 0xb5, 0x43, 0x43, 0x16, 0x14, 0x0f, 0x01, // 3....31...CC.... - 0x01, 0x43, 0x06, 0x0b, 0x20, 0x24, 0x29, 0x01, 0xf7, 0xa9, 0x77, 0xfc, 0x40, 0x77, 0xa9, 0xa9, // .C.. $)...w.@w.. - 0x77, 0x03, 0xc0, 0x77, 0xa9, 0xe9, 0x9d, 0x32, 0x10, 0xe0, 0x10, 0xab, 0x22, 0x33, 0x33, 0xe8, // w..w...2...."33. - 0x46, 0xfe, 0x59, 0x01, 0xa7, 0x46, 0x7e, 0xfe, 0x91, 0x28, 0x2d, 0x1c, 0x10, 0x26, 0x01, 0x22, // F.Y..F~..(-..&." - 0xfe, 0xf2, 0x18, 0x02, 0x0f, 0x1f, 0x01, 0x18, 0x6f, 0x92, 0x34, 0x15, 0x2a, 0x29, 0x24, 0x01, // ........o.4.*)$. - 0xed, 0xa1, 0x28, 0x2a, 0x15, 0xb6, 0x09, 0x1d, 0x0e, 0x16, 0x12, 0x28, 0x26, 0x1b, 0x3b, 0x81, // ..(*.......(&.;. - 0x3b, 0x1b, 0x26, 0x26, 0x1c, 0x3a, 0x4c, 0x41, 0x33, 0x1a, 0x01, 0x0c, 0x15, 0x0b, 0x03, 0x38, // ;.&&.:LA3......8 - 0x9c, 0x33, 0x33, 0x9c, 0x34, 0xfd, 0x03, 0xb1, 0x53, 0x2c, 0x3b, 0x05, 0x0f, 0x0f, 0x05, 0x3b, // .33.4...S,;....; - 0x2c, 0x57, 0xad, 0xb0, 0x54, 0x2b, 0x3c, 0x05, 0x0f, 0x0f, 0x05, 0x3c, 0x2b, 0x54, 0x03, 0x3b, // ,W..T+<....<+T.; - 0x01, 0x28, 0xc3, 0xc3, 0x17, 0x5c, 0x17, 0x67, 0x37, 0xc9, 0x78, 0x82, 0x3a, 0x1d, 0x26, 0x26, // .(.....g7.x.:.&& - 0x1d, 0x3a, 0x82, 0x3a, 0x1d, 0x26, 0x26, 0x1b, 0x3c, 0x01, 0x72, 0xfe, 0xe5, 0x1f, 0x10, 0x02, // .:.:.&&.<.r..... - 0x18, 0x01, 0x10, 0xfe, 0xdb, 0x25, 0x12, 0x1b, 0x2d, 0x01, 0x08, 0xfc, 0x40, 0x77, 0xa9, 0xa9, // .....%..-...@w.. - 0x77, 0x03, 0xc0, 0x77, 0xa9, 0xa9, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x1b, 0xff, 0x00, 0x05, 0xe5, // w..w............ - 0x06, 0x00, 0x00, 0x09, 0x00, 0x0f, 0x00, 0x17, 0x00, 0x2b, 0x00, 0x3d, 0x00, 0x5b, 0x00, 0x63, // .........+.=.[.c - 0x00, 0x7d, 0x00, 0x89, 0x00, 0x9b, 0x00, 0xaf, 0x00, 0x00, 0x01, 0x15, 0x14, 0x23, 0x22, 0x27, // .}...........#"' - 0x11, 0x36, 0x33, 0x32, 0x05, 0x15, 0x23, 0x35, 0x34, 0x32, 0x25, 0x33, 0x35, 0x21, 0x15, 0x33, // .632..#542%35!.3 - 0x11, 0x33, 0x21, 0x33, 0x11, 0x23, 0x11, 0x06, 0x23, 0x22, 0x27, 0x26, 0x35, 0x11, 0x23, 0x11, // .3!3.#..#"'&5.#. - 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x25, 0x35, 0x34, 0x27, 0x26, 0x23, 0x22, 0x07, 0x35, 0x23, // ...327%54'&#".5# - 0x11, 0x33, 0x35, 0x16, 0x33, 0x32, 0x37, 0x36, 0x25, 0x35, 0x23, 0x14, 0x07, 0x06, 0x23, 0x22, // .35.3276%5#...#" - 0x3d, 0x01, 0x33, 0x35, 0x34, 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x1d, 0x01, 0x14, 0x17, 0x16, // =.354'&#"....... - 0x33, 0x32, 0x37, 0x36, 0x37, 0x36, 0x01, 0x35, 0x34, 0x22, 0x1d, 0x01, 0x14, 0x32, 0x01, 0x14, // 327676.54"...2.. - 0x07, 0x0e, 0x01, 0x07, 0x06, 0x20, 0x27, 0x2e, 0x01, 0x27, 0x26, 0x35, 0x34, 0x37, 0x3e, 0x01, // ..... '..'&547>. - 0x37, 0x36, 0x20, 0x17, 0x1e, 0x01, 0x17, 0x16, 0x01, 0x33, 0x03, 0x11, 0x23, 0x11, 0x26, 0x27, // 76 ......3..#.&' - 0x26, 0x27, 0x33, 0x13, 0x05, 0x15, 0x14, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x3d, 0x01, 0x34, // &'3......#"'&=.4 - 0x37, 0x36, 0x33, 0x32, 0x17, 0x16, 0x25, 0x11, 0x23, 0x35, 0x06, 0x23, 0x22, 0x27, 0x26, 0x35, // 7632..%.#5.#"'&5 - 0x11, 0x33, 0x11, 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x11, 0x03, 0xcb, 0x27, 0x17, 0x16, 0x16, // .3....327...'... - 0x17, 0x27, 0x01, 0x52, 0x5a, 0x5a, 0xfc, 0x3a, 0x6b, 0xfe, 0xc8, 0x69, 0x64, 0x01, 0x20, 0x59, // .'.RZZ.:k..id. Y - 0x59, 0x1e, 0x1b, 0x12, 0x03, 0x01, 0x59, 0x08, 0x0c, 0x2e, 0x30, 0x36, 0x01, 0xad, 0x09, 0x11, // Y.....Y...06.... - 0x36, 0x32, 0x2b, 0x59, 0x59, 0x2d, 0x30, 0x36, 0x11, 0x09, 0x01, 0x52, 0x5b, 0x02, 0x07, 0x21, // 62+YY-06...R[..! - 0x2e, 0xb3, 0x1b, 0x27, 0x43, 0x44, 0x27, 0x1c, 0x1d, 0x27, 0x45, 0x48, 0x24, 0x12, 0x03, 0x02, // ...'CD'..'EH$... - 0xfd, 0xa0, 0x56, 0x56, 0x02, 0xcf, 0x1a, 0x0e, 0x58, 0x3a, 0xb8, 0xfd, 0x1a, 0xb8, 0x3a, 0x59, // ..VV....X:....:Y - 0x0d, 0x1a, 0x1a, 0x0e, 0x58, 0x3b, 0xb7, 0x02, 0xe6, 0xb8, 0x3a, 0x59, 0x0d, 0x1a, 0xfc, 0x1a, // ....X;....:Y.... - 0x66, 0x79, 0x64, 0x0e, 0x2f, 0x25, 0x1c, 0x6a, 0x47, 0x01, 0xb6, 0x1c, 0x25, 0x45, 0x43, 0x26, // fyd./%.jG...%EC& - 0x1c, 0x1c, 0x26, 0x43, 0x45, 0x25, 0x1c, 0x01, 0x4f, 0x5b, 0x35, 0x32, 0x2e, 0x0d, 0x08, 0x5b, // ..&CE%..O[52...[ - 0x01, 0x03, 0x12, 0x1b, 0x1e, 0x01, 0x24, 0xd3, 0x43, 0x16, 0x01, 0x2d, 0x16, 0x44, 0x2e, 0x2e, // ......$.C..-.D.. - 0x44, 0x96, 0x5e, 0x5e, 0xfd, 0xc7, 0x01, 0xee, 0xfe, 0x86, 0x2a, 0x15, 0x03, 0x20, 0x01, 0x6c, // D.^^......*.. .l - 0xfe, 0x79, 0x31, 0x18, 0x25, 0x3d, 0x5e, 0xc5, 0x49, 0x1a, 0x38, 0x36, 0xd9, 0xfd, 0x69, 0x30, // .y1.%=^.I.86..i0 - 0x37, 0x37, 0x1b, 0x53, 0x0d, 0x33, 0x0a, 0x24, 0x45, 0x57, 0x67, 0x4f, 0x25, 0x33, 0x33, 0x25, // 77.S.3.$EWgO%33% - 0x4f, 0xad, 0x4f, 0x25, 0x33, 0x35, 0x1b, 0x1b, 0x09, 0x03, 0xc2, 0xd2, 0x45, 0x45, 0xd2, 0x46, // O.O%35......EE.F - 0xfd, 0x57, 0xea, 0x74, 0x3b, 0x50, 0x06, 0x15, 0x15, 0x06, 0x50, 0x3b, 0x70, 0xee, 0xea, 0x74, // .W.t;P....P;p..t - 0x3b, 0x50, 0x07, 0x14, 0x14, 0x07, 0x50, 0x3b, 0x70, 0x04, 0x0e, 0xfe, 0x71, 0xfe, 0xf1, 0x01, // ;P....P;p...q... - 0x0f, 0x4a, 0x8a, 0x67, 0x54, 0xfe, 0xf9, 0x46, 0xaf, 0x51, 0x25, 0x33, 0x33, 0x26, 0x50, 0xaf, // .J.gT..F.Q%33&P. - 0x50, 0x25, 0x33, 0x33, 0x25, 0x52, 0xfe, 0x0d, 0x37, 0x3e, 0x25, 0x18, 0x33, 0x01, 0x8a, 0xfe, // P%33%R..7>%.3... - 0x91, 0x21, 0x02, 0x16, 0x2b, 0x01, 0x7d, 0x00, 0x00, 0x02, 0x00, 0x05, 0xff, 0x80, 0x05, 0x7b, // .!..+.}........{ - 0x05, 0xf6, 0x00, 0x13, 0x00, 0x27, 0x00, 0x00, 0x01, 0x06, 0x03, 0x06, 0x2b, 0x01, 0x22, 0x26, // .....'......+."& - 0x37, 0x13, 0x32, 0x27, 0x03, 0x26, 0x37, 0x36, 0x3b, 0x01, 0x32, 0x17, 0x01, 0x16, 0x07, 0x01, // 7.2'.&76;.2..... - 0x15, 0x01, 0x16, 0x07, 0x06, 0x2b, 0x01, 0x22, 0x27, 0x01, 0x36, 0x01, 0x36, 0x3b, 0x01, 0x32, // .....+."'.6.6;.2 - 0x02, 0x55, 0x0a, 0xf7, 0x1b, 0x26, 0xef, 0x15, 0x14, 0x0a, 0xfd, 0x01, 0x01, 0xa1, 0x0c, 0x0b, // .U...&.......... - 0x09, 0x17, 0xef, 0x28, 0x1a, 0x03, 0xca, 0x0b, 0x0b, 0xfd, 0xf0, 0x01, 0x50, 0x0b, 0x0a, 0x0a, // ...(........P... - 0x16, 0xef, 0x2a, 0x18, 0xfe, 0xad, 0x12, 0x02, 0x01, 0x19, 0x27, 0xf1, 0x16, 0x03, 0x65, 0x12, // ..*.......'...e. - 0xfe, 0x4a, 0x2e, 0x22, 0x13, 0x01, 0xc0, 0x01, 0x01, 0x17, 0x16, 0x0f, 0x0f, 0x2d, 0x01, 0x64, // .J.".........-.d - 0x10, 0x15, 0xfc, 0x5a, 0x01, 0xfd, 0x99, 0x14, 0x11, 0x0f, 0x2d, 0x02, 0x6e, 0x20, 0x03, 0x8e, // ...Z......-.n .. - 0x2d, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x13, // -............... - 0x00, 0x27, 0x00, 0x37, 0x00, 0x00, 0x01, 0x34, 0x27, 0x26, 0x2b, 0x01, 0x22, 0x07, 0x06, 0x1f, // .'.7...4'&+."... - 0x01, 0x15, 0x03, 0x06, 0x17, 0x16, 0x3b, 0x01, 0x32, 0x37, 0x01, 0x26, 0x2b, 0x01, 0x22, 0x07, // ......;.27.&+.". - 0x01, 0x16, 0x01, 0x16, 0x3b, 0x01, 0x32, 0x37, 0x36, 0x27, 0x01, 0x35, 0x01, 0x36, 0x17, 0x11, // ....;.276'.5.6.. - 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x02, 0xad, // ..#!"&5.463!2... - 0x7e, 0x15, 0x1f, 0xb8, 0x12, 0x08, 0x07, 0x08, 0x7d, 0xc4, 0x09, 0x09, 0x08, 0x10, 0xb9, 0x1f, // ~.......}....... - 0x13, 0x03, 0x37, 0x07, 0x11, 0xbb, 0x1e, 0x13, 0xfe, 0x65, 0x01, 0x01, 0x05, 0x14, 0x20, 0xb8, // ..7......e.... . - 0x12, 0x07, 0x08, 0x09, 0xfe, 0xfc, 0x01, 0x99, 0x08, 0xdb, 0xa9, 0x77, 0xfc, 0x40, 0x77, 0xa9, // ...........w.@w. - 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0x03, 0x03, 0x01, 0xdd, 0x22, 0x0b, 0x0c, 0x11, 0xd8, 0x01, // .w..w....."..... - 0xfe, 0xa6, 0x0e, 0x0e, 0x0d, 0x24, 0x03, 0x51, 0x0c, 0x23, 0xfd, 0x27, 0x02, 0xfe, 0x21, 0x23, // .....$.Q.#.'..!# - 0x0c, 0x0d, 0x0f, 0x01, 0xdc, 0x01, 0x02, 0xd3, 0x10, 0x88, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, // ...........@w..w - 0x03, 0xc0, 0x77, 0xa9, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, // ..w............. - 0x05, 0x00, 0x00, 0x0f, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x34, 0x27, 0x01, 0x26, 0x07, 0x06, 0x15, // ...../...4'.&... - 0x11, 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x01, 0x24, 0x14, 0x0e, 0x01, 0x07, 0x0e, 0x01, 0x07, // ....327.$....... - 0x06, 0x20, 0x27, 0x2e, 0x01, 0x27, 0x2e, 0x02, 0x34, 0x3e, 0x01, 0x37, 0x3e, 0x01, 0x37, 0x36, // . '..'..4>.7>.76 - 0x20, 0x17, 0x1e, 0x01, 0x17, 0x1e, 0x01, 0x05, 0x00, 0x1e, 0xfe, 0x00, 0x1f, 0x22, 0x21, 0x21, // ............"!! - 0x10, 0x0f, 0x14, 0x0e, 0x02, 0x00, 0x02, 0x1e, 0x02, 0x0f, 0x0f, 0x10, 0x6a, 0x47, 0xde, 0xfc, // ............jG.. - 0x7e, 0xde, 0x47, 0x6b, 0x10, 0x0e, 0x0f, 0x02, 0x02, 0x0f, 0x0f, 0x10, 0x6a, 0x47, 0xde, 0x03, // ~.Gk........jG.. - 0x82, 0xde, 0x47, 0x6b, 0x10, 0x0e, 0x0f, 0x02, 0x5b, 0x4a, 0x11, 0x01, 0x40, 0x14, 0x12, 0x12, // ..Gk....[J..@... - 0x26, 0xfd, 0x80, 0x26, 0x12, 0x08, 0x0a, 0x01, 0x40, 0x96, 0xc0, 0x6c, 0xa5, 0x41, 0x49, 0x64, // &..&....@..l.AId - 0x08, 0x19, 0x19, 0x08, 0x64, 0x49, 0x41, 0xa5, 0x6c, 0xc0, 0x6c, 0xa5, 0x41, 0x49, 0x64, 0x08, // ....dIA.l.l.AId. - 0x19, 0x19, 0x08, 0x64, 0x49, 0x41, 0xa5, 0x00, 0x00, 0x05, 0x00, 0x40, 0xff, 0x80, 0x06, 0xc0, // ...dIA.....@.... - 0x05, 0x8a, 0x00, 0x03, 0x00, 0x13, 0x00, 0x17, 0x00, 0x1b, 0x00, 0x1f, 0x00, 0x00, 0x09, 0x04, // ................ - 0x15, 0x01, 0x15, 0x27, 0x07, 0x35, 0x01, 0x35, 0x17, 0x01, 0x35, 0x17, 0x37, 0x15, 0x09, 0x0c, // ...'.5.5..5.7... - 0x01, 0x92, 0x01, 0xee, 0xfe, 0xaa, 0xfe, 0x16, 0x05, 0x2c, 0xfe, 0x16, 0x01, 0x01, 0xfe, 0x17, // .........,...... - 0x93, 0x01, 0x56, 0x01, 0x01, 0x01, 0x57, 0xfd, 0x51, 0x01, 0x56, 0xfe, 0x12, 0xfe, 0xae, 0x05, // ..V...W.Q.V..... - 0x2e, 0x01, 0x52, 0xfe, 0x17, 0xfe, 0xa9, 0x01, 0x57, 0x01, 0xe9, 0xfe, 0xae, 0xfe, 0x12, 0x03, // ..R.....W....... - 0x3d, 0xfe, 0xcf, 0xfe, 0xe3, 0x01, 0x3f, 0xfe, 0xe4, 0x6c, 0xfe, 0xdb, 0x01, 0x01, 0x01, 0x01, // =.....?..l...... - 0x01, 0x25, 0x6c, 0x60, 0x01, 0x1c, 0x02, 0x01, 0x01, 0x02, 0xfe, 0xe4, 0x04, 0xd8, 0xfe, 0xe3, // .%l`............ - 0xfe, 0xd0, 0x01, 0x0e, 0xfe, 0xf2, 0xfe, 0xf1, 0xfe, 0xc1, 0x01, 0x1d, 0x03, 0x7e, 0xfe, 0xc1, // .............~.. - 0xfe, 0xf2, 0x01, 0x30, 0x00, 0x07, 0x00, 0x00, 0xff, 0x00, 0x05, 0x7e, 0x06, 0x00, 0x00, 0x03, // ...0.......~.... - 0x00, 0x0f, 0x00, 0x13, 0x00, 0x17, 0x00, 0x1b, 0x00, 0x1f, 0x00, 0x23, 0x00, 0x00, 0x25, 0x15, // ...........#..%. - 0x05, 0x35, 0x01, 0x11, 0x07, 0x15, 0x21, 0x27, 0x23, 0x11, 0x33, 0x11, 0x21, 0x11, 0x0d, 0x01, // .5....!'#.3.!... - 0x07, 0x25, 0x13, 0x05, 0x07, 0x25, 0x13, 0x01, 0x07, 0x09, 0x02, 0x07, 0x01, 0x25, 0x13, 0x07, // .%...%.......%.. - 0x03, 0x03, 0xa0, 0xfd, 0x3d, 0x03, 0xb4, 0x01, 0xfb, 0x94, 0x23, 0x01, 0x79, 0x03, 0xa0, 0xfc, // ....=.....#.y... - 0xd8, 0x02, 0xc0, 0x0d, 0xfd, 0x3f, 0x52, 0x02, 0xab, 0x27, 0xfd, 0x55, 0xca, 0x02, 0x61, 0x4d, // .....?R..'.U..aM - 0xfd, 0x9f, 0x01, 0xb5, 0x01, 0x8e, 0x7c, 0xfe, 0x71, 0x02, 0x42, 0x79, 0x95, 0x79, 0x87, 0x97, // ......|.q.By.y.. - 0x01, 0x97, 0x01, 0x5b, 0xfd, 0x43, 0x23, 0x01, 0x01, 0x02, 0xe0, 0xfd, 0x96, 0x02, 0x6a, 0x58, // ...[.C#.......jX - 0x41, 0x96, 0x41, 0x01, 0xd2, 0xb7, 0x92, 0xb7, 0x01, 0xef, 0xfe, 0x98, 0x82, 0x01, 0x68, 0x01, // A.A...........h. - 0xcd, 0xfd, 0xb7, 0x55, 0x02, 0x48, 0xe9, 0xfd, 0x47, 0x1a, 0x02, 0xb9, 0x00, 0x04, 0x00, 0x00, // ...U.H..G....... - 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x15, 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x3f, 0x00, 0x00, // .........../.?.. - 0x25, 0x11, 0x23, 0x16, 0x15, 0x14, 0x0e, 0x01, 0x23, 0x22, 0x00, 0x35, 0x34, 0x37, 0x23, 0x11, // %.#.....#".547#. - 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x00, 0x34, 0x26, 0x23, 0x22, 0x06, 0x14, 0x16, 0x33, 0x32, // ..3!26.4&#"...32 - 0x01, 0x35, 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, // .54&+.".....;.26 - 0x37, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // 7...#!"&5.463!2. - 0x05, 0x52, 0x87, 0x14, 0x80, 0xdc, 0x82, 0xc5, 0xfe, 0xe8, 0x14, 0x8d, 0x23, 0x1a, 0x04, 0x2d, // .R..........#..- - 0x19, 0x24, 0xfe, 0xe4, 0xb5, 0x80, 0x7f, 0xb5, 0xb5, 0x7f, 0x80, 0x01, 0xd1, 0x28, 0x1d, 0xae, // .$...........(.. - 0x1d, 0x28, 0x28, 0x1d, 0xae, 0x1d, 0x28, 0xae, 0x74, 0x51, 0xfb, 0x8a, 0x51, 0x74, 0x74, 0x51, // .((...(.tQ..QttQ - 0x04, 0x76, 0x51, 0x74, 0x6e, 0x02, 0x88, 0x3f, 0x44, 0x7e, 0xd5, 0x7c, 0x01, 0x0f, 0xc0, 0x44, // .vQtn..?D~.|...D - 0x3f, 0xfd, 0x78, 0x1a, 0x23, 0x23, 0x01, 0xb3, 0xf8, 0xaf, 0xaf, 0xf8, 0xaf, 0x02, 0x93, 0xa5, // ?.x.##.......... - 0x1c, 0x29, 0x29, 0x1c, 0xa5, 0x1d, 0x28, 0x28, 0xed, 0xfb, 0x8a, 0x51, 0x74, 0x74, 0x51, 0x04, // .))...((...QttQ. - 0x76, 0x51, 0x74, 0x74, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x0f, // vQtt............ + 0x12, 0x03, 0x44, 0xfd, 0xb8, 0x01, 0x71, 0x0c, 0x09, 0x0b, 0x02, 0x09, 0x03, 0x0c, 0x12, 0xe8, // ..D...q......... + 0x78, 0x02, 0x37, 0xfe, 0x8f, 0x06, 0x0f, 0x0b, 0x0e, 0x09, 0x15, 0xf8, 0xd2, 0xfe, 0xe0, 0x4b, // x.7............K + 0x2f, 0xf3, 0x2f, 0x4b, 0xfe, 0xe1, 0x46, 0xe6, 0xa2, 0xe6, 0x04, 0x68, 0xda, 0x2f, 0x10, 0x04, // /./K..F....h./.. + 0x14, 0x01, 0x22, 0x0c, 0xfb, 0x1e, 0x0c, 0x0c, 0xfe, 0xc1, 0x09, 0x09, 0x01, 0x40, 0x10, 0x13, // .."..........@.. + 0x14, 0x05, 0x60, 0x0e, 0x12, 0x12, 0x0e, 0xfa, 0xa0, 0x12, 0x85, 0xe9, 0x5a, 0x02, 0x11, 0x12, // ..`.........Z... + 0x09, 0x09, 0x03, 0x01, 0x03, 0x73, 0xe5, 0x59, 0xfd, 0xee, 0x08, 0x12, 0x0b, 0x02, 0x02, 0x02, // .....s.Y........ + 0x77, 0x03, 0x81, 0x6a, 0x6a, 0x90, 0x90, 0x6a, 0x6a, 0x02, 0x96, 0xfd, 0x6a, 0x00, 0x00, 0x00, // w..jj..jj...j... + 0x00, 0x04, 0x00, 0x22, 0xff, 0x00, 0x06, 0x7d, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x24, 0x00, 0x34, // ..."...}.....$.4 + 0x00, 0x52, 0x00, 0x00, 0x25, 0x33, 0x2f, 0x01, 0x26, 0x35, 0x23, 0x07, 0x14, 0x06, 0x07, 0x05, // .R..%3/.&5#..... + 0x14, 0x07, 0x01, 0x06, 0x23, 0x22, 0x27, 0x01, 0x26, 0x37, 0x36, 0x3b, 0x01, 0x11, 0x34, 0x36, // ....#"'.&76;..46 + 0x3b, 0x01, 0x32, 0x16, 0x15, 0x11, 0x33, 0x32, 0x16, 0x01, 0x15, 0x21, 0x35, 0x33, 0x27, 0x23, // ;.2...32...!53'# + 0x07, 0x33, 0x15, 0x21, 0x35, 0x33, 0x13, 0x33, 0x13, 0x03, 0x15, 0x21, 0x35, 0x01, 0x36, 0x3f, // .3.!53.3...!5.6? + 0x01, 0x35, 0x22, 0x06, 0x23, 0x06, 0x2b, 0x01, 0x15, 0x23, 0x35, 0x21, 0x15, 0x01, 0x06, 0x0f, // .5".#.+..#5!.... + 0x01, 0x15, 0x37, 0x36, 0x3b, 0x01, 0x35, 0x04, 0xa7, 0xb1, 0x48, 0x0c, 0x02, 0x04, 0x03, 0x07, // ..76;.5...H..... + 0x04, 0xfd, 0xf0, 0x0a, 0xfe, 0xc1, 0x0a, 0x0d, 0x0c, 0x0b, 0xfe, 0xc0, 0x0f, 0x08, 0x08, 0x16, // ................ + 0xc0, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0xc0, 0x0e, 0x12, 0x03, 0x9d, 0xfe, 0xe0, 0x4b, 0x2f, 0xf3, // .............K/. + 0x2f, 0x4b, 0xfe, 0xe1, 0x46, 0xe6, 0xa2, 0xe6, 0x13, 0xfd, 0xb8, 0x01, 0x71, 0x0c, 0x09, 0x0b, // /K..F.......q... + 0x02, 0x09, 0x03, 0x0c, 0x12, 0xe8, 0x78, 0x02, 0x37, 0xfe, 0x8f, 0x06, 0x0f, 0x0b, 0x0e, 0x09, // ......x.7....... + 0x15, 0xf8, 0x68, 0xda, 0x2f, 0x10, 0x04, 0x14, 0x01, 0x22, 0x0c, 0xe2, 0x0c, 0x0c, 0xfe, 0xc1, // ..h./...."...... + 0x09, 0x09, 0x01, 0x40, 0x10, 0x13, 0x14, 0x05, 0x60, 0x0e, 0x12, 0x12, 0x0e, 0xfa, 0xa0, 0x12, // ...@....`....... + 0xfe, 0xfc, 0x6a, 0x6a, 0x90, 0x90, 0x6a, 0x6a, 0x02, 0x96, 0xfd, 0x6a, 0x04, 0x7f, 0xe9, 0x5a, // ..jj..jj...j...Z + 0x02, 0x11, 0x12, 0x09, 0x09, 0x03, 0x01, 0x03, 0x73, 0xe5, 0x59, 0xfd, 0xee, 0x08, 0x12, 0x0a, // ........s.Y..... + 0x03, 0x03, 0x01, 0x77, 0x00, 0x05, 0x00, 0x22, 0xff, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x19, // ...w..."........ + 0x00, 0x29, 0x00, 0x39, 0x00, 0x49, 0x00, 0x59, 0x00, 0x00, 0x25, 0x14, 0x07, 0x01, 0x06, 0x23, // .).9.I.Y..%....# + 0x22, 0x27, 0x01, 0x26, 0x37, 0x36, 0x3b, 0x01, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x15, // "'.&76;..46;.2.. + 0x11, 0x33, 0x32, 0x16, 0x05, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, // .32.....#!"&=.46 + 0x33, 0x21, 0x32, 0x16, 0x03, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, // 3!2.....#!"&=.46 + 0x33, 0x21, 0x32, 0x16, 0x03, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, // 3!2.....#!"&=.46 + 0x33, 0x21, 0x32, 0x16, 0x03, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, // 3!2.....#!"&=.46 + 0x33, 0x21, 0x32, 0x16, 0x02, 0xe0, 0x0a, 0xfe, 0xc1, 0x0a, 0x0d, 0x0c, 0x0b, 0xfe, 0xc0, 0x0f, // 3!2............. + 0x08, 0x08, 0x16, 0xc0, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0xc0, 0x0e, 0x12, 0x04, 0x20, 0x12, 0x0e, // ............. .. + 0xfc, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0x03, 0x40, 0x0e, 0x12, 0xc0, 0x12, 0x0e, 0xfd, 0x80, 0x0e, // .......@........ + 0x12, 0x12, 0x0e, 0x02, 0x80, 0x0e, 0x12, 0xc0, 0x12, 0x0e, 0xfe, 0x40, 0x0e, 0x12, 0x12, 0x0e, // ...........@.... + 0x01, 0xc0, 0x0e, 0x12, 0xc0, 0x12, 0x0e, 0xff, 0x00, 0x0e, 0x12, 0x12, 0x0e, 0x01, 0x00, 0x0e, // ................ + 0x12, 0x60, 0x0c, 0x0c, 0xfe, 0xc1, 0x09, 0x09, 0x01, 0x40, 0x10, 0x13, 0x14, 0x05, 0x60, 0x0e, // .`.......@....`. + 0x12, 0x12, 0x0e, 0xfa, 0xa0, 0x12, 0x8e, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, // ................ + 0x01, 0xf2, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x01, 0xf2, 0xc0, 0x0e, 0x12, // ................ + 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x01, 0xf2, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, // ................ + 0x12, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x22, 0xff, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x0f, // ......."........ + 0x00, 0x29, 0x00, 0x39, 0x00, 0x49, 0x00, 0x59, 0x00, 0x00, 0x05, 0x15, 0x14, 0x06, 0x23, 0x21, // .).9.I.Y......#! + 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x25, 0x14, 0x07, 0x01, 0x06, 0x23, // "&=.463!2.%....# + 0x22, 0x27, 0x01, 0x26, 0x37, 0x36, 0x3b, 0x01, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x15, // "'.&76;..46;.2.. + 0x11, 0x33, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, // .32.....#!"&=.46 + 0x33, 0x21, 0x32, 0x16, 0x13, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, // 3!2.....#!"&=.46 + 0x33, 0x21, 0x32, 0x16, 0x13, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, // 3!2.....#!"&=.46 + 0x33, 0x21, 0x32, 0x16, 0x04, 0xc0, 0x12, 0x0e, 0xff, 0x00, 0x0e, 0x12, 0x12, 0x0e, 0x01, 0x00, // 3!2............. + 0x0e, 0x12, 0xfe, 0x20, 0x0a, 0xfe, 0xc1, 0x0a, 0x0d, 0x0c, 0x0b, 0xfe, 0xc0, 0x0f, 0x08, 0x08, // ... ............ + 0x16, 0xc0, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0xc0, 0x0e, 0x12, 0x02, 0xa0, 0x12, 0x0e, 0xfe, 0x40, // ...............@ + 0x0e, 0x12, 0x12, 0x0e, 0x01, 0xc0, 0x0e, 0x12, 0xc0, 0x12, 0x0e, 0xfd, 0x80, 0x0e, 0x12, 0x12, // ................ + 0x0e, 0x02, 0x80, 0x0e, 0x12, 0xc0, 0x12, 0x0e, 0xfc, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0x03, 0x40, // ...............@ + 0x0e, 0x12, 0x20, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x72, 0x0c, 0x0c, 0xfe, // .. .........r... + 0xc1, 0x09, 0x09, 0x01, 0x40, 0x10, 0x13, 0x14, 0x05, 0x60, 0x0e, 0x12, 0x12, 0x0e, 0xfa, 0xa0, // ....@....`...... + 0x12, 0x01, 0x72, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x01, 0xf2, 0xc0, 0x0e, // ..r............. + 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x01, 0xf2, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, // ................ + 0x12, 0x12, 0x00, 0x00, 0x00, 0x04, 0x00, 0x22, 0xff, 0x00, 0x05, 0xce, 0x06, 0x00, 0x00, 0x0a, // ......."........ + 0x00, 0x24, 0x00, 0x43, 0x00, 0x56, 0x00, 0x00, 0x25, 0x34, 0x26, 0x23, 0x22, 0x06, 0x14, 0x16, // .$.C.V..%4&#"... + 0x33, 0x32, 0x36, 0x05, 0x14, 0x07, 0x01, 0x06, 0x23, 0x22, 0x27, 0x01, 0x26, 0x37, 0x36, 0x3b, // 326.....#"'.&76; + 0x01, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x15, 0x11, 0x33, 0x32, 0x16, 0x25, 0x14, 0x0e, // ..46;.2...32.%.. + 0x03, 0x23, 0x22, 0x27, 0x26, 0x27, 0x37, 0x16, 0x17, 0x16, 0x33, 0x32, 0x36, 0x37, 0x23, 0x0e, // .#"'&'7...3267#. + 0x01, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x03, 0x15, 0x21, 0x35, 0x33, 0x11, // .#"&54632...!53. + 0x34, 0x36, 0x3d, 0x01, 0x23, 0x07, 0x06, 0x0f, 0x01, 0x27, 0x37, 0x33, 0x11, 0x05, 0x42, 0x58, // 46=.#....'73..BX + 0x3b, 0x34, 0x3e, 0x49, 0x44, 0x32, 0x46, 0xfd, 0x9e, 0x0a, 0xfe, 0xc1, 0x0a, 0x0d, 0x0c, 0x0b, // ;4>ID2F......... + 0xfe, 0xc0, 0x0f, 0x08, 0x08, 0x16, 0xc0, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0xc0, 0x0e, 0x12, 0x02, // ................ + 0xee, 0x1a, 0x38, 0x50, 0x75, 0x45, 0x3e, 0x2e, 0x18, 0x12, 0x27, 0x0f, 0x10, 0x25, 0x26, 0x54, // ..8PuE>...'..%&T + 0x65, 0x10, 0x02, 0x15, 0x51, 0x2c, 0x6a, 0x86, 0x90, 0x6d, 0x7b, 0xa4, 0x1e, 0xfe, 0x2b, 0xa7, // e...Q,j..m{...+. + 0x01, 0x02, 0x07, 0x08, 0x12, 0x3e, 0x52, 0xc0, 0x7b, 0xdf, 0x3f, 0x6a, 0x4a, 0x72, 0x4c, 0x36, // .....>R.{.?jJrL6 + 0x56, 0x0c, 0x0c, 0xfe, 0xc1, 0x09, 0x09, 0x01, 0x40, 0x10, 0x13, 0x14, 0x05, 0x60, 0x0e, 0x12, // V.......@....`.. + 0x12, 0x0e, 0xfa, 0xa0, 0x12, 0x37, 0x3e, 0x77, 0x6d, 0x52, 0x31, 0x10, 0x08, 0x07, 0x71, 0x07, // .....7>wmR1...q. + 0x04, 0x0d, 0x75, 0x57, 0x17, 0x1c, 0x8f, 0x65, 0x69, 0x92, 0xbd, 0x02, 0x2f, 0x72, 0x72, 0x01, // ..uW...ei.../rr. + 0xb0, 0x07, 0x18, 0x05, 0x10, 0x0c, 0x0d, 0x12, 0x3a, 0x56, 0xb9, 0xfd, 0x72, 0x00, 0x00, 0x00, // ........:V..r... + 0x00, 0x04, 0x00, 0x22, 0xff, 0x00, 0x05, 0xce, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x24, 0x00, 0x37, // ...".........$.7 + 0x00, 0x56, 0x00, 0x00, 0x01, 0x34, 0x26, 0x23, 0x22, 0x06, 0x14, 0x16, 0x33, 0x32, 0x36, 0x01, // .V...4&#"...326. + 0x14, 0x07, 0x01, 0x06, 0x23, 0x22, 0x27, 0x01, 0x26, 0x37, 0x36, 0x3b, 0x01, 0x11, 0x34, 0x36, // ....#"'.&76;..46 + 0x3b, 0x01, 0x32, 0x16, 0x15, 0x11, 0x33, 0x32, 0x16, 0x05, 0x15, 0x21, 0x35, 0x33, 0x11, 0x34, // ;.2...32...!53.4 + 0x36, 0x3d, 0x01, 0x23, 0x07, 0x06, 0x0f, 0x01, 0x27, 0x37, 0x33, 0x11, 0x13, 0x14, 0x0e, 0x03, // 6=.#....'73..... + 0x23, 0x22, 0x27, 0x26, 0x27, 0x37, 0x16, 0x17, 0x16, 0x33, 0x32, 0x36, 0x37, 0x23, 0x0e, 0x01, // #"'&'7...3267#.. + 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x05, 0x42, 0x58, 0x3b, 0x34, 0x3e, 0x49, // #"&54632..BX;4>I + 0x44, 0x32, 0x46, 0xfd, 0x9e, 0x0a, 0xfe, 0xc1, 0x0a, 0x0d, 0x0c, 0x0b, 0xfe, 0xc0, 0x0f, 0x08, // D2F............. + 0x08, 0x16, 0xc0, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0xc0, 0x0e, 0x12, 0x02, 0xd0, 0xfe, 0x2b, 0xa7, // ..............+. + 0x01, 0x02, 0x07, 0x08, 0x12, 0x3e, 0x52, 0xc0, 0x7b, 0xc3, 0x1a, 0x38, 0x50, 0x75, 0x45, 0x3e, // .....>R.{..8PuE> + 0x2e, 0x18, 0x12, 0x27, 0x0f, 0x10, 0x25, 0x26, 0x54, 0x65, 0x10, 0x02, 0x15, 0x51, 0x2c, 0x6a, // ...'..%&Te...Q,j + 0x86, 0x90, 0x6d, 0x7b, 0xa4, 0x04, 0xdf, 0x3f, 0x6a, 0x4a, 0x72, 0x4c, 0x36, 0xfb, 0xaa, 0x0c, // ..m{...?jJrL6... + 0x0c, 0xfe, 0xc1, 0x09, 0x09, 0x01, 0x40, 0x10, 0x13, 0x14, 0x05, 0x60, 0x0e, 0x12, 0x12, 0x0e, // ......@....`.... + 0xfa, 0xa0, 0x12, 0xfc, 0x72, 0x72, 0x01, 0xb0, 0x07, 0x18, 0x05, 0x10, 0x0c, 0x0d, 0x12, 0x3a, // ....rr.........: + 0x56, 0xb9, 0xfd, 0x72, 0x05, 0x33, 0x3e, 0x77, 0x6d, 0x52, 0x31, 0x10, 0x08, 0x07, 0x71, 0x07, // V..r.3>wmR1...q. + 0x04, 0x0d, 0x75, 0x57, 0x17, 0x1c, 0x8f, 0x65, 0x69, 0x92, 0xbd, 0x00, 0x00, 0x03, 0x00, 0x00, // ..uW...ei....... + 0xff, 0x80, 0x06, 0x40, 0x05, 0x80, 0x00, 0x0b, 0x00, 0x1b, 0x00, 0x5c, 0x00, 0x00, 0x25, 0x34, // ...@..........%4 + 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x13, 0x11, 0x14, 0x06, 0x23, 0x21, // &#"....326....#! + 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x05, 0x14, 0x07, 0x16, 0x15, 0x16, // "&5.463!2....... + 0x07, 0x16, 0x07, 0x06, 0x07, 0x16, 0x07, 0x06, 0x07, 0x2b, 0x02, 0x22, 0x2e, 0x01, 0x27, 0x26, // .........+."..'& + 0x27, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x37, 0x36, 0x37, 0x3e, 0x02, 0x37, // '..5.467>.767>.7 + 0x3e, 0x02, 0x37, 0x36, 0x33, 0x32, 0x1e, 0x05, 0x15, 0x14, 0x0e, 0x01, 0x07, 0x0e, 0x02, 0x07, // >.7632.......... + 0x21, 0x32, 0x16, 0x01, 0x00, 0x26, 0x1a, 0x1b, 0x25, 0x25, 0x1b, 0x1a, 0x26, 0xa0, 0x26, 0x1a, // !2...&..%%..&.&. + 0xfe, 0xe0, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0x20, 0x1a, 0x26, 0x04, 0xa0, 0x37, 0x0f, 0x03, 0x2e, // ...&&.. .&..7... + 0x11, 0x11, 0x0f, 0x27, 0x09, 0x3a, 0x40, 0x85, 0x24, 0x4c, 0x11, 0x42, 0x9c, 0x57, 0x4d, 0x7b, // ...'.:@.$L.B.WM{ + 0x23, 0x1a, 0x26, 0x24, 0x19, 0x18, 0x68, 0x31, 0x44, 0x21, 0x12, 0x1a, 0x09, 0x09, 0x07, 0x0b, // #.&$..h1D!...... + 0x1c, 0x14, 0x13, 0x1a, 0x2e, 0x49, 0x2f, 0x21, 0x0f, 0x09, 0x01, 0x13, 0x13, 0x12, 0x03, 0x0e, // .....I/!........ + 0x08, 0x04, 0x01, 0x15, 0x4e, 0x72, 0xc0, 0x1a, 0x26, 0x26, 0x1a, 0x1b, 0x25, 0x25, 0x02, 0x1b, // ....Nr..&&..%%.. + 0xfd, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x02, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x56, 0x3f, 0x2c, 0x20, // ...&&....&&.V?, + 0x4c, 0x3d, 0x38, 0x3d, 0x39, 0x25, 0x70, 0x45, 0x4c, 0x02, 0x1f, 0x1b, 0x1a, 0x2b, 0x01, 0x01, // L=8=9%pEL....+.. + 0x25, 0x1a, 0x02, 0x81, 0x19, 0x25, 0x02, 0x02, 0x72, 0x40, 0x57, 0x21, 0x12, 0x3c, 0x25, 0x2a, // %....%..r@W!.<%* + 0x27, 0x2c, 0x3c, 0x14, 0x13, 0x15, 0x1f, 0x32, 0x28, 0x3c, 0x1e, 0x18, 0x26, 0x4c, 0x2c, 0x22, // ',<....2(<..&L," + 0x06, 0x18, 0x14, 0x0e, 0x72, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x00, 0x06, 0x40, // ....r..........@ + 0x05, 0x00, 0x00, 0x0b, 0x00, 0x1b, 0x00, 0x5c, 0x00, 0x00, 0x01, 0x14, 0x06, 0x23, 0x22, 0x26, // .............#"& + 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x13, 0x11, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x15, 0x11, // 54632...4&#!"... + 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x25, 0x16, 0x15, 0x0e, 0x01, 0x23, 0x21, 0x1e, 0x02, 0x17, // ..3!26%....#!... + 0x1e, 0x02, 0x15, 0x14, 0x0e, 0x05, 0x23, 0x22, 0x27, 0x2e, 0x02, 0x27, 0x2e, 0x02, 0x27, 0x26, // ......#"'..'..'& + 0x27, 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, 0x36, 0x37, 0x3e, 0x02, 0x3b, // '..'..5.46767>.; + 0x03, 0x16, 0x17, 0x16, 0x07, 0x16, 0x17, 0x16, 0x07, 0x16, 0x07, 0x14, 0x01, 0x00, 0x26, 0x1a, // ..............&. + 0x1b, 0x25, 0x25, 0x1b, 0x1a, 0x26, 0xa0, 0x26, 0x1a, 0xfe, 0xe0, 0x1a, 0x26, 0x26, 0x1a, 0x01, // .%%..&.&....&&.. + 0x20, 0x1a, 0x26, 0x04, 0x69, 0x37, 0x01, 0x71, 0x4e, 0xfe, 0xeb, 0x04, 0x08, 0x0e, 0x03, 0x12, // .&.i7.qN....... + 0x12, 0x14, 0x01, 0x09, 0x0f, 0x21, 0x2f, 0x49, 0x2e, 0x1a, 0x13, 0x14, 0x1c, 0x0b, 0x07, 0x09, // .....!/I........ + 0x09, 0x1a, 0x12, 0x21, 0x44, 0x31, 0x68, 0x18, 0x19, 0x24, 0x26, 0x1a, 0x23, 0x7b, 0x4d, 0x57, // ...!D1h..$&.#{MW + 0x9c, 0x42, 0x11, 0x4c, 0x24, 0x85, 0x40, 0x3a, 0x09, 0x27, 0x0f, 0x11, 0x11, 0x2e, 0x03, 0x03, // .B.L$.@:.'...... + 0xc0, 0x1a, 0x26, 0x26, 0x1a, 0x1b, 0x25, 0x25, 0xfd, 0xe5, 0x02, 0x80, 0x1a, 0x26, 0x26, 0x1a, // ..&&..%%.....&&. + 0xfd, 0x80, 0x1a, 0x26, 0x26, 0xaf, 0x3d, 0x58, 0x4e, 0x72, 0x0e, 0x14, 0x18, 0x06, 0x25, 0x28, // ...&&.=XNr....%( + 0x4d, 0x26, 0x18, 0x1e, 0x3c, 0x28, 0x32, 0x1f, 0x15, 0x13, 0x14, 0x3c, 0x2c, 0x27, 0x2a, 0x25, // M&..<(2....<,'*% + 0x3c, 0x12, 0x21, 0x57, 0x40, 0x72, 0x02, 0x02, 0x25, 0x19, 0x02, 0x81, 0x1a, 0x25, 0x01, 0x01, // <.!W@r..%....%.. + 0x2b, 0x1a, 0x1b, 0x1f, 0x02, 0x4c, 0x45, 0x70, 0x25, 0x39, 0x3d, 0x38, 0x3d, 0x4c, 0x20, 0x00, // +....LEp%9=8=L . + 0x00, 0x0c, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x09, 0x00, 0x0f, 0x00, 0x17, // ................ + 0x00, 0x2b, 0x00, 0x3d, 0x00, 0x5c, 0x00, 0x64, 0x00, 0x7f, 0x00, 0x8c, 0x00, 0x9e, 0x00, 0xb2, // .+.=...d........ + 0x00, 0xc2, 0x00, 0x00, 0x25, 0x35, 0x34, 0x23, 0x22, 0x07, 0x15, 0x16, 0x33, 0x32, 0x37, 0x33, // ....%54#"...3273 + 0x35, 0x34, 0x22, 0x15, 0x25, 0x15, 0x23, 0x11, 0x23, 0x11, 0x23, 0x35, 0x05, 0x11, 0x23, 0x35, // 54".%.#.#.#5..#5 + 0x06, 0x23, 0x22, 0x27, 0x26, 0x35, 0x11, 0x33, 0x11, 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x11, // .#"'&5.3....327. + 0x05, 0x15, 0x14, 0x07, 0x06, 0x23, 0x22, 0x27, 0x15, 0x23, 0x11, 0x33, 0x15, 0x36, 0x33, 0x32, // .....#"'.#.3.632 + 0x17, 0x16, 0x17, 0x15, 0x14, 0x07, 0x06, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x3d, 0x01, 0x34, // .........#"'&=.4 + 0x37, 0x36, 0x32, 0x17, 0x16, 0x1d, 0x01, 0x23, 0x15, 0x14, 0x33, 0x32, 0x37, 0x34, 0x36, 0x34, // 762....#..327464 + 0x35, 0x01, 0x15, 0x14, 0x22, 0x3d, 0x01, 0x34, 0x32, 0x01, 0x34, 0x27, 0x2e, 0x01, 0x27, 0x26, // 5..."=.42.4'..'& + 0x21, 0x20, 0x07, 0x0e, 0x01, 0x07, 0x06, 0x15, 0x14, 0x17, 0x1e, 0x01, 0x17, 0x16, 0x20, 0x37, // ! ............ 7 + 0x3e, 0x01, 0x37, 0x36, 0x01, 0x13, 0x23, 0x07, 0x27, 0x23, 0x1e, 0x01, 0x17, 0x16, 0x17, 0x15, // >.76..#.'#...... + 0x33, 0x25, 0x35, 0x34, 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x1d, 0x01, 0x14, 0x17, 0x16, 0x33, // 3%54'&#".......3 + 0x32, 0x37, 0x36, 0x17, 0x33, 0x11, 0x23, 0x11, 0x06, 0x23, 0x22, 0x27, 0x26, 0x35, 0x11, 0x23, // 276.3.#..#"'&5.# + 0x11, 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, // ....327....#!"&5 + 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x03, 0x97, 0x1d, 0x11, 0x10, 0x10, 0x11, 0x1d, 0xb8, // .463!2.......... + 0x42, 0x42, 0xfd, 0xc5, 0x50, 0x4a, 0x4e, 0x01, 0xb1, 0x43, 0x27, 0x25, 0x21, 0x09, 0x06, 0x42, // BB..PJN..C'%!..B + 0x01, 0x01, 0x0e, 0x14, 0x16, 0x01, 0x3f, 0x07, 0x0c, 0x29, 0x23, 0x21, 0x43, 0x43, 0x20, 0x24, // ......?..)#!CC $ + 0x29, 0x0c, 0x07, 0xfb, 0x02, 0x03, 0x0c, 0x1b, 0x35, 0x34, 0x1d, 0x15, 0x14, 0x1d, 0x66, 0x1b, // ).......54....f. + 0x15, 0x85, 0x22, 0x18, 0x06, 0x01, 0xfe, 0x81, 0x40, 0x40, 0x02, 0x15, 0x13, 0x0a, 0x42, 0x2b, // ..".....@@....B+ + 0x88, 0xfe, 0xec, 0xfe, 0xed, 0x88, 0x2c, 0x41, 0x0a, 0x14, 0x14, 0x0a, 0x41, 0x2b, 0x89, 0x02, // ......,A....A+.. + 0x26, 0x89, 0x2b, 0x41, 0x0a, 0x14, 0xfd, 0x0d, 0x5a, 0x4b, 0x33, 0x35, 0x4e, 0x07, 0x20, 0x08, // &.+A....ZK35N. . + 0x23, 0x0b, 0x4a, 0x01, 0x21, 0x15, 0x1d, 0x31, 0x33, 0x1b, 0x15, 0x15, 0x1b, 0x33, 0x31, 0x1d, // #.J.!..13....31. + 0x15, 0xb5, 0x43, 0x43, 0x16, 0x14, 0x0f, 0x01, 0x01, 0x43, 0x06, 0x0b, 0x20, 0x24, 0x29, 0x01, // ..CC.....C.. $). + 0xf7, 0xa9, 0x77, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0xe9, 0x9d, 0x32, // ..w.@w..w..w...2 + 0x10, 0xe0, 0x10, 0xab, 0x22, 0x33, 0x33, 0xe8, 0x46, 0xfe, 0x59, 0x01, 0xa7, 0x46, 0x7e, 0xfe, // ...."33.F.Y..F~. + 0x91, 0x28, 0x2d, 0x1c, 0x11, 0x25, 0x01, 0x22, 0xfe, 0xf2, 0x18, 0x02, 0x0f, 0x1f, 0x01, 0x18, // .(-..%."........ + 0x6f, 0x92, 0x34, 0x15, 0x2a, 0x29, 0x24, 0x01, 0xed, 0xa1, 0x28, 0x2a, 0x15, 0xb6, 0x09, 0x1d, // o.4.*)$...(*.... + 0x0e, 0x16, 0x12, 0x28, 0x26, 0x1b, 0x3b, 0x81, 0x3b, 0x1b, 0x26, 0x26, 0x1d, 0x39, 0x4c, 0x41, // ...(&.;.;.&&.9LA + 0x33, 0x1a, 0x01, 0x0c, 0x15, 0x0b, 0x03, 0x38, 0x9c, 0x33, 0x33, 0x9c, 0x34, 0xfd, 0x03, 0xb1, // 3......8.33.4... + 0x53, 0x2c, 0x3b, 0x05, 0x0f, 0x0f, 0x05, 0x3b, 0x2c, 0x57, 0xad, 0xb0, 0x54, 0x2b, 0x3c, 0x05, // S,;....;,W..T+<. + 0x0f, 0x0f, 0x05, 0x3c, 0x2b, 0x54, 0x03, 0x3b, 0x01, 0x28, 0xc3, 0xc3, 0x17, 0x5c, 0x17, 0x67, // ...<+T.;.(.....g + 0x37, 0xc9, 0x78, 0x82, 0x3a, 0x1d, 0x26, 0x26, 0x1d, 0x3a, 0x82, 0x3a, 0x1d, 0x26, 0x26, 0x1b, // 7.x.:.&&.:.:.&&. + 0x3c, 0x01, 0x72, 0xfe, 0xe5, 0x1f, 0x10, 0x02, 0x18, 0x01, 0x10, 0xfe, 0xdb, 0x25, 0x12, 0x1b, // <.r..........%.. + 0x2d, 0x01, 0x08, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0xa9, 0x00, 0x00, // -...@w..w..w.... + 0x00, 0x0b, 0x00, 0x1b, 0xff, 0x00, 0x05, 0xe5, 0x06, 0x00, 0x00, 0x09, 0x00, 0x0f, 0x00, 0x17, // ................ + 0x00, 0x2b, 0x00, 0x3d, 0x00, 0x5b, 0x00, 0x63, 0x00, 0x7d, 0x00, 0x89, 0x00, 0x9b, 0x00, 0xaf, // .+.=.[.c.}...... + 0x00, 0x00, 0x01, 0x15, 0x14, 0x23, 0x22, 0x27, 0x11, 0x36, 0x33, 0x32, 0x05, 0x15, 0x23, 0x35, // .....#"'.632..#5 + 0x34, 0x32, 0x25, 0x33, 0x35, 0x21, 0x15, 0x33, 0x11, 0x33, 0x21, 0x33, 0x11, 0x23, 0x11, 0x06, // 42%35!.3.3!3.#.. + 0x23, 0x22, 0x27, 0x26, 0x35, 0x11, 0x23, 0x11, 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x25, 0x35, // #"'&5.#....327%5 + 0x34, 0x27, 0x26, 0x23, 0x22, 0x07, 0x35, 0x23, 0x11, 0x33, 0x35, 0x16, 0x33, 0x32, 0x37, 0x36, // 4'&#".5#.35.3276 + 0x25, 0x35, 0x23, 0x14, 0x07, 0x06, 0x23, 0x22, 0x3d, 0x01, 0x33, 0x35, 0x34, 0x27, 0x26, 0x23, // %5#...#"=.354'&# + 0x22, 0x07, 0x06, 0x1d, 0x01, 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x37, 0x36, 0x01, 0x35, // ".......327676.5 + 0x34, 0x22, 0x1d, 0x01, 0x14, 0x32, 0x01, 0x14, 0x07, 0x0e, 0x01, 0x07, 0x06, 0x20, 0x27, 0x2e, // 4"...2....... '. + 0x01, 0x27, 0x26, 0x35, 0x34, 0x37, 0x3e, 0x01, 0x37, 0x36, 0x20, 0x17, 0x1e, 0x01, 0x17, 0x16, // .'&547>.76 ..... + 0x01, 0x33, 0x03, 0x11, 0x23, 0x11, 0x26, 0x27, 0x26, 0x27, 0x33, 0x13, 0x05, 0x15, 0x14, 0x07, // .3..#.&'&'3..... + 0x06, 0x23, 0x22, 0x27, 0x26, 0x3d, 0x01, 0x34, 0x37, 0x36, 0x33, 0x32, 0x17, 0x16, 0x25, 0x11, // .#"'&=.47632..%. + 0x23, 0x35, 0x06, 0x23, 0x22, 0x27, 0x26, 0x35, 0x11, 0x33, 0x11, 0x14, 0x17, 0x16, 0x33, 0x32, // #5.#"'&5.3....32 + 0x37, 0x11, 0x03, 0xcb, 0x27, 0x17, 0x16, 0x16, 0x17, 0x27, 0x01, 0x52, 0x5a, 0x5a, 0xfc, 0x3a, // 7...'....'.RZZ.: + 0x6b, 0xfe, 0xc8, 0x69, 0x64, 0x01, 0x20, 0x59, 0x59, 0x1e, 0x1b, 0x12, 0x03, 0x01, 0x59, 0x08, // k..id. YY.....Y. + 0x0c, 0x2e, 0x30, 0x36, 0x01, 0xad, 0x09, 0x11, 0x36, 0x32, 0x2b, 0x59, 0x59, 0x2d, 0x30, 0x36, // ..06....62+YY-06 + 0x11, 0x09, 0x01, 0x52, 0x5b, 0x02, 0x07, 0x21, 0x2e, 0xb3, 0x1b, 0x27, 0x43, 0x44, 0x27, 0x1c, // ...R[..!...'CD'. + 0x1d, 0x27, 0x45, 0x48, 0x24, 0x12, 0x03, 0x02, 0xfd, 0xa0, 0x56, 0x56, 0x02, 0xcf, 0x1a, 0x0e, // .'EH$.....VV.... + 0x58, 0x3a, 0xb8, 0xfd, 0x1a, 0xb8, 0x3a, 0x59, 0x0d, 0x1a, 0x1a, 0x0e, 0x58, 0x3b, 0xb7, 0x02, // X:....:Y....X;.. + 0xe6, 0xb8, 0x3a, 0x59, 0x0d, 0x1a, 0xfc, 0x1a, 0x66, 0x79, 0x64, 0x0e, 0x2f, 0x25, 0x1c, 0x6a, // ..:Y....fyd./%.j + 0x47, 0x01, 0xb6, 0x1c, 0x26, 0x44, 0x43, 0x26, 0x1c, 0x1c, 0x26, 0x43, 0x44, 0x26, 0x1c, 0x01, // G...&DC&..&CD&.. + 0x4f, 0x5b, 0x35, 0x32, 0x2e, 0x0d, 0x08, 0x5b, 0x01, 0x03, 0x12, 0x1b, 0x1e, 0x01, 0x24, 0xd3, // O[52...[......$. + 0x43, 0x16, 0x01, 0x2d, 0x16, 0x44, 0x2e, 0x2e, 0x44, 0x96, 0x5e, 0x5e, 0xfd, 0xc7, 0x01, 0xee, // C..-.D..D.^^.... + 0xfe, 0x86, 0x2a, 0x15, 0x03, 0x20, 0x01, 0x6c, 0xfe, 0x79, 0x31, 0x18, 0x25, 0x3d, 0x5e, 0xc5, // ..*.. .l.y1.%=^. + 0x49, 0x1a, 0x38, 0x36, 0xd9, 0xfd, 0x69, 0x30, 0x37, 0x37, 0x1b, 0x53, 0x0d, 0x33, 0x0a, 0x24, // I.86..i077.S.3.$ + 0x45, 0x57, 0x67, 0x4f, 0x25, 0x33, 0x33, 0x25, 0x4f, 0xad, 0x4f, 0x25, 0x33, 0x35, 0x1b, 0x1b, // EWgO%33%O.O%35.. + 0x09, 0x03, 0xc2, 0xd2, 0x45, 0x45, 0xd2, 0x46, 0xfd, 0x57, 0xea, 0x74, 0x3b, 0x50, 0x06, 0x15, // ....EE.F.W.t;P.. + 0x15, 0x06, 0x50, 0x3b, 0x70, 0xee, 0xea, 0x74, 0x3b, 0x50, 0x07, 0x14, 0x14, 0x07, 0x50, 0x3b, // ..P;p..t;P....P; + 0x70, 0x04, 0x0e, 0xfe, 0x71, 0xfe, 0xf1, 0x01, 0x0f, 0x4a, 0x8a, 0x67, 0x54, 0xfe, 0xf9, 0x46, // p...q....J.gT..F + 0xaf, 0x51, 0x25, 0x33, 0x33, 0x26, 0x50, 0xaf, 0x50, 0x25, 0x33, 0x33, 0x25, 0x52, 0xfe, 0x0d, // .Q%33&P.P%33%R.. + 0x37, 0x3e, 0x25, 0x18, 0x33, 0x01, 0x8a, 0xfe, 0x91, 0x21, 0x02, 0x16, 0x2b, 0x01, 0x7d, 0x00, // 7>%.3....!..+.}. + 0x00, 0x02, 0x00, 0x05, 0xff, 0x80, 0x05, 0x7b, 0x05, 0xf6, 0x00, 0x13, 0x00, 0x27, 0x00, 0x00, // .......{.....'.. + 0x01, 0x06, 0x03, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x37, 0x13, 0x32, 0x27, 0x03, 0x26, 0x37, 0x36, // ....+."&7.2'.&76 + 0x3b, 0x01, 0x32, 0x17, 0x01, 0x16, 0x07, 0x01, 0x15, 0x01, 0x16, 0x07, 0x06, 0x2b, 0x01, 0x22, // ;.2..........+." + 0x27, 0x01, 0x36, 0x01, 0x36, 0x3b, 0x01, 0x32, 0x02, 0x55, 0x0a, 0xf7, 0x1b, 0x26, 0xef, 0x15, // '.6.6;.2.U...&.. + 0x14, 0x0a, 0xfd, 0x01, 0x01, 0xa1, 0x0c, 0x0b, 0x09, 0x17, 0xef, 0x28, 0x1a, 0x03, 0xca, 0x0b, // ...........(.... + 0x0b, 0xfd, 0xf0, 0x01, 0x50, 0x0b, 0x0a, 0x0a, 0x16, 0xef, 0x2a, 0x18, 0xfe, 0xad, 0x12, 0x02, // ....P.....*..... + 0x01, 0x19, 0x27, 0xf1, 0x16, 0x03, 0x65, 0x12, 0xfe, 0x4a, 0x2e, 0x22, 0x13, 0x01, 0xc0, 0x01, // ..'...e..J.".... + 0x01, 0x17, 0x16, 0x0f, 0x0f, 0x2d, 0x01, 0x64, 0x10, 0x15, 0xfc, 0x5a, 0x01, 0xfd, 0x99, 0x14, // .....-.d...Z.... + 0x11, 0x0f, 0x2d, 0x02, 0x6e, 0x20, 0x03, 0x8e, 0x2d, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // ..-.n ..-....... + 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x13, 0x00, 0x27, 0x00, 0x37, 0x00, 0x00, 0x01, 0x34, // .........'.7...4 + 0x27, 0x26, 0x2b, 0x01, 0x22, 0x07, 0x06, 0x1f, 0x01, 0x15, 0x03, 0x06, 0x17, 0x16, 0x3b, 0x01, // '&+.".........;. + 0x32, 0x37, 0x01, 0x26, 0x2b, 0x01, 0x22, 0x07, 0x01, 0x16, 0x01, 0x16, 0x3b, 0x01, 0x32, 0x37, // 27.&+.".....;.27 + 0x36, 0x27, 0x01, 0x35, 0x01, 0x36, 0x17, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, // 6'.5.6....#!"&5. + 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x02, 0xad, 0x7e, 0x15, 0x1f, 0xb8, 0x12, 0x08, 0x07, 0x08, // 463!2...~....... + 0x7d, 0xc4, 0x09, 0x09, 0x08, 0x10, 0xb9, 0x1f, 0x13, 0x03, 0x37, 0x07, 0x11, 0xbb, 0x1e, 0x13, // }.........7..... + 0xfe, 0x65, 0x01, 0x01, 0x05, 0x14, 0x20, 0xb8, 0x12, 0x07, 0x08, 0x09, 0xfe, 0xfc, 0x01, 0x99, // .e.... ......... + 0x08, 0xdb, 0xa9, 0x77, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0x03, 0x03, // ...w.@w..w..w... + 0x01, 0xdd, 0x22, 0x0b, 0x0c, 0x11, 0xd8, 0x01, 0xfe, 0xa6, 0x0e, 0x0e, 0x0d, 0x24, 0x03, 0x51, // .."..........$.Q + 0x0c, 0x23, 0xfd, 0x27, 0x02, 0xfe, 0x21, 0x23, 0x0c, 0x0d, 0x0f, 0x01, 0xdc, 0x01, 0x02, 0xd3, // .#.'..!#........ + 0x10, 0x88, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0xa9, 0x00, 0x00, 0x00, // ...@w..w..w..... + 0x00, 0x02, 0x00, 0x00, 0x00, 0x0a, 0x07, 0x00, 0x04, 0xf6, 0x00, 0x02, 0x00, 0x49, 0x00, 0x00, // .............I.. + 0x01, 0x2d, 0x01, 0x13, 0x32, 0x04, 0x1f, 0x01, 0x32, 0x1e, 0x05, 0x17, 0x1e, 0x02, 0x17, 0x1e, // .-..2...2....... + 0x01, 0x17, 0x1d, 0x01, 0x16, 0x07, 0x0e, 0x01, 0x0f, 0x01, 0x0e, 0x06, 0x23, 0x06, 0x21, 0x26, // ............#.!& + 0x24, 0x2f, 0x02, 0x2e, 0x02, 0x27, 0x2e, 0x02, 0x27, 0x2e, 0x01, 0x27, 0x3d, 0x01, 0x26, 0x37, // $/...'..'..'=.&7 + 0x3e, 0x01, 0x3f, 0x01, 0x3e, 0x06, 0x33, 0x36, 0x02, 0xc7, 0x01, 0xe4, 0xfe, 0x1c, 0xb9, 0xa8, // >.?.>.36........ + 0x01, 0x39, 0x49, 0x49, 0x01, 0x20, 0x0e, 0x21, 0x18, 0x20, 0x1e, 0x0e, 0x06, 0x13, 0x27, 0x07, // .9II. .!. ....'. + 0x08, 0x09, 0x01, 0x01, 0x13, 0x07, 0x24, 0x0e, 0x0e, 0x0e, 0x1e, 0x20, 0x18, 0x21, 0x0f, 0x1f, // ......$.... .!.. + 0x01, 0xfb, 0xfe, 0x88, 0xcf, 0xfe, 0xcf, 0x30, 0x31, 0x24, 0x24, 0x25, 0x41, 0x18, 0x06, 0x13, // .......01$$%A... + 0x27, 0x07, 0x08, 0x09, 0x01, 0x01, 0x13, 0x07, 0x24, 0x0e, 0x0e, 0x0e, 0x1e, 0x20, 0x18, 0x21, // '.......$.... .! + 0x0e, 0x20, 0x01, 0xfb, 0x01, 0x98, 0xfa, 0xfd, 0x01, 0x67, 0x09, 0x05, 0x04, 0x03, 0x03, 0x06, // . .......g...... + 0x0a, 0x10, 0x17, 0x0f, 0x06, 0x19, 0x5c, 0x37, 0x40, 0x91, 0x29, 0x28, 0x88, 0x91, 0x91, 0x37, // .......7@.)(...7 + 0x59, 0x11, 0x11, 0x0f, 0x17, 0x0f, 0x0a, 0x06, 0x03, 0x03, 0x13, 0x02, 0x09, 0x03, 0x04, 0x04, // Y............... + 0x05, 0x0a, 0x20, 0x19, 0x06, 0x19, 0x5c, 0x37, 0x40, 0x91, 0x29, 0x28, 0x88, 0x91, 0x91, 0x37, // .. ....7@.)(...7 + 0x59, 0x11, 0x11, 0x0f, 0x17, 0x10, 0x0a, 0x06, 0x03, 0x03, 0x12, 0x00, 0x00, 0x05, 0x00, 0x40, // Y..............@ + 0xff, 0x80, 0x06, 0xc0, 0x05, 0x8a, 0x00, 0x03, 0x00, 0x13, 0x00, 0x17, 0x00, 0x1b, 0x00, 0x1f, // ................ + 0x00, 0x00, 0x09, 0x04, 0x15, 0x01, 0x15, 0x27, 0x07, 0x35, 0x01, 0x35, 0x17, 0x01, 0x35, 0x17, // .......'.5.5..5. + 0x37, 0x15, 0x09, 0x0c, 0x01, 0x92, 0x01, 0xee, 0xfe, 0xaa, 0xfe, 0x16, 0x05, 0x2c, 0xfe, 0x16, // 7............,.. + 0x01, 0x01, 0xfe, 0x17, 0x93, 0x01, 0x56, 0x01, 0x01, 0x01, 0x57, 0xfd, 0x51, 0x01, 0x56, 0xfe, // ......V...W.Q.V. + 0x12, 0xfe, 0xae, 0x05, 0x2e, 0x01, 0x52, 0xfe, 0x17, 0xfe, 0xa9, 0x01, 0x57, 0x01, 0xe9, 0xfe, // ......R.....W... + 0xae, 0xfe, 0x12, 0x03, 0x3d, 0xfe, 0xcf, 0xfe, 0xe3, 0x01, 0x3f, 0xfe, 0xe4, 0x6c, 0xfe, 0xdb, // ....=.....?..l.. + 0x01, 0x01, 0x01, 0x01, 0x01, 0x25, 0x6c, 0x60, 0x01, 0x1c, 0x02, 0x01, 0x01, 0x02, 0xfe, 0xe4, // .....%l`........ + 0x04, 0xd8, 0xfe, 0xe3, 0xfe, 0xd0, 0x01, 0x0e, 0xfe, 0xf2, 0xfe, 0xf1, 0xfe, 0xc1, 0x01, 0x1d, // ................ + 0x03, 0x7e, 0xfe, 0xc1, 0xfe, 0xf2, 0x01, 0x30, 0x00, 0x06, 0x00, 0x0b, 0xff, 0x00, 0x05, 0xf5, // .~.....0........ + 0x06, 0x00, 0x00, 0x07, 0x00, 0x0b, 0x00, 0x0f, 0x00, 0x13, 0x00, 0x17, 0x00, 0x1b, 0x00, 0x00, // ................ + 0x05, 0x21, 0x11, 0x23, 0x11, 0x21, 0x11, 0x23, 0x25, 0x37, 0x05, 0x07, 0x01, 0x37, 0x01, 0x07, // .!.#.!.#%7...7.. + 0x01, 0x37, 0x01, 0x07, 0x03, 0x01, 0x07, 0x09, 0x01, 0x35, 0x21, 0x15, 0x05, 0x09, 0xfb, 0xa2, // .7.......5!..... + 0xa0, 0x05, 0x9e, 0xa0, 0xfc, 0x52, 0x21, 0x03, 0x0f, 0x21, 0xfd, 0x58, 0x43, 0x02, 0xd5, 0x43, // .....R!..!.XC..C + 0xfd, 0xf4, 0x66, 0x02, 0x66, 0x66, 0xd9, 0x01, 0xdd, 0x80, 0xfe, 0x23, 0xfd, 0xb2, 0x03, 0x20, // ..f.ff.....#... + 0x60, 0x01, 0xe0, 0xfd, 0x80, 0x02, 0x80, 0x2c, 0x9d, 0xa5, 0x9c, 0x02, 0x1a, 0x92, 0xfe, 0xad, // `......,........ + 0x91, 0x02, 0xb6, 0x7b, 0xfd, 0xff, 0x7b, 0x03, 0x7b, 0xfd, 0x7f, 0x60, 0x02, 0x81, 0xfa, 0xa1, // ...{..{.{..`.... + 0x9f, 0x9f, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x07, // ................ + 0x00, 0x0f, 0x00, 0x17, 0x00, 0x4f, 0x00, 0x67, 0x00, 0x00, 0x00, 0x34, 0x26, 0x22, 0x06, 0x14, // .....O.g...4&".. + 0x16, 0x32, 0x00, 0x10, 0x06, 0x20, 0x26, 0x10, 0x36, 0x20, 0x24, 0x14, 0x06, 0x22, 0x26, 0x34, // .2... &.6 $.."&4 + 0x36, 0x32, 0x24, 0x22, 0x26, 0x0e, 0x02, 0x07, 0x0e, 0x01, 0x07, 0x0e, 0x03, 0x16, 0x14, 0x06, // 62$"&........... + 0x1e, 0x02, 0x17, 0x1e, 0x01, 0x17, 0x1e, 0x03, 0x36, 0x32, 0x16, 0x3e, 0x02, 0x37, 0x3e, 0x01, // ........62.>.7>. + 0x37, 0x3e, 0x03, 0x26, 0x34, 0x36, 0x2e, 0x02, 0x27, 0x2e, 0x01, 0x27, 0x2e, 0x03, 0x00, 0x10, // 7>.&46..'..'.... + 0x07, 0x0e, 0x01, 0x07, 0x06, 0x20, 0x27, 0x2e, 0x01, 0x27, 0x26, 0x10, 0x37, 0x3e, 0x01, 0x37, // ..... '..'&.7>.7 + 0x36, 0x20, 0x17, 0x1e, 0x01, 0x17, 0x04, 0x00, 0x96, 0xd4, 0x96, 0x96, 0xd4, 0x01, 0x20, 0xe6, // 6 ............ . + 0xfe, 0xb8, 0xe6, 0xe6, 0x01, 0x48, 0x01, 0x52, 0x36, 0x4c, 0x36, 0x36, 0x4c, 0xfe, 0x47, 0x0e, // .....H.R6L66L.G. + 0x8b, 0x48, 0x79, 0x55, 0x1d, 0x32, 0x4c, 0x14, 0x0b, 0x0f, 0x05, 0x01, 0x01, 0x01, 0x01, 0x05, // .HyU.2L......... + 0x0f, 0x0b, 0x14, 0x4c, 0x32, 0x1d, 0x55, 0x79, 0x48, 0x8b, 0x0e, 0x8b, 0x48, 0x79, 0x55, 0x1d, // ...L2.UyH...HyU. + 0x32, 0x4c, 0x14, 0x0b, 0x0f, 0x05, 0x01, 0x01, 0x01, 0x01, 0x05, 0x0f, 0x0b, 0x14, 0x4c, 0x32, // 2L............L2 + 0x1d, 0x55, 0x79, 0x48, 0x02, 0x6e, 0x05, 0x0a, 0xe4, 0xd0, 0x58, 0xfe, 0x36, 0x58, 0xd0, 0xe4, // .UyH.n....X.6X.. + 0x0a, 0x05, 0x05, 0x0a, 0xe4, 0xd0, 0x58, 0x01, 0xca, 0x58, 0xd0, 0xe4, 0x0a, 0x02, 0x16, 0xd4, // ......X..X...... + 0x96, 0x96, 0xd4, 0x96, 0x01, 0xa4, 0xfe, 0xb8, 0xe6, 0xe6, 0x01, 0x48, 0xe6, 0x36, 0x4c, 0x36, // ...........H.6L6 + 0x36, 0x4c, 0x36, 0x80, 0x01, 0x01, 0x05, 0x0f, 0x0b, 0x14, 0x4c, 0x32, 0x1d, 0x55, 0x79, 0x48, // 6L6.......L2.UyH + 0x8b, 0x0e, 0x8b, 0x48, 0x79, 0x55, 0x1d, 0x32, 0x4c, 0x14, 0x0b, 0x0f, 0x05, 0x01, 0x01, 0x01, // ...HyU.2L....... + 0x01, 0x05, 0x0f, 0x0b, 0x14, 0x4c, 0x32, 0x1d, 0x55, 0x79, 0x48, 0x8b, 0x0e, 0x8b, 0x48, 0x79, // .....L2.UyH...Hy + 0x55, 0x1d, 0x32, 0x4c, 0x14, 0x0b, 0x0f, 0x05, 0x01, 0xfe, 0x6e, 0xfe, 0x36, 0x58, 0xd0, 0xe4, // U.2L......n.6X.. + 0x0a, 0x05, 0x05, 0x0a, 0xe4, 0xd0, 0x58, 0x01, 0xca, 0x58, 0xd0, 0xe4, 0x0a, 0x05, 0x05, 0x0a, // ......X..X...... + 0xe4, 0xd0, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x0f, // ................ 0x00, 0x17, 0x00, 0x1f, 0x00, 0x00, 0x01, 0x32, 0x16, 0x15, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, // .......2.....#!" 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x00, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x24, 0x34, // &5.463.4&"...2$4 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x04, 0xe0, 0x77, 0xa9, 0xa9, 0x77, 0xfc, 0x40, 0x77, 0xa9, // &"...2..w..w.@w. @@ -4114,939 +4454,5897 @@ static const uint8_t s_iconsFontAwesomeTtf[80776] = 0x51, 0x1b, 0x2e, 0x63, 0x13, 0x41, 0x6a, 0x02, 0xc7, 0x35, 0x16, 0x37, 0x21, 0x3f, 0x1b, 0x0c, // Q..c.Aj..5.7!?.. 0x22, 0x0f, 0x14, 0x30, 0x1e, 0x44, 0x8c, 0xca, 0x24, 0x05, 0x34, 0x14, 0x22, 0x0b, 0x50, 0x14, // "..0.D..$.4.".P. 0x1c, 0x5b, 0x0d, 0x14, 0x26, 0x15, 0x01, 0x0b, 0x01, 0x32, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, // .[..&....2.@w..w - 0x03, 0xc0, 0x77, 0xa9, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x4e, 0xff, 0x80, 0x04, 0x00, // ..w........N.... - 0x05, 0x80, 0x00, 0x23, 0x00, 0x00, 0x01, 0x33, 0x11, 0x21, 0x15, 0x21, 0x11, 0x14, 0x17, 0x16, // ...#...3.!.!.... - 0x17, 0x16, 0x33, 0x32, 0x37, 0x15, 0x06, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x27, 0x26, 0x27, // ..327....#"'&'&' - 0x26, 0x35, 0x11, 0x23, 0x35, 0x36, 0x37, 0x36, 0x37, 0x36, 0x01, 0x86, 0xdb, 0x01, 0x6c, 0xfe, // &5.#567676....l. - 0x94, 0x0e, 0x0d, 0x27, 0x32, 0x43, 0x75, 0x73, 0x66, 0x4c, 0x4d, 0x60, 0x69, 0x51, 0x4e, 0x3c, // ...'2CusfLM`iQN< - 0x3a, 0x15, 0x16, 0xaa, 0x5b, 0x40, 0x40, 0x27, 0x27, 0x05, 0x80, 0xfe, 0x7c, 0xf1, 0xfe, 0x76, // :...[@@''...|..v - 0x88, 0x24, 0x25, 0x17, 0x1f, 0x4c, 0xf2, 0x30, 0x11, 0x13, 0x1b, 0x19, 0x32, 0x33, 0x36, 0x36, // .$%..L.0....2366 - 0x6b, 0x02, 0x1b, 0xd9, 0x1e, 0x36, 0x37, 0x4d, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // k....67MN....... - 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x23, 0x00, 0x33, 0x00, 0x00, 0x25, 0x35, 0x06, 0x23, // .......#.3..%5.# - 0x22, 0x27, 0x26, 0x27, 0x26, 0x35, 0x11, 0x21, 0x35, 0x21, 0x11, 0x23, 0x06, 0x07, 0x06, 0x07, // "'&'&5.!5!.#.... - 0x06, 0x07, 0x15, 0x33, 0x11, 0x14, 0x17, 0x16, 0x17, 0x16, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, // ...3........3276 + 0x03, 0xc0, 0x77, 0xa9, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x44, 0xff, 0x80, 0x04, 0x00, // ..w........D.... + 0x06, 0x00, 0x00, 0x22, 0x00, 0x00, 0x25, 0x17, 0x0e, 0x01, 0x07, 0x06, 0x2e, 0x03, 0x35, 0x11, // ..."..%.......5. + 0x23, 0x35, 0x3e, 0x04, 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x11, 0x21, 0x15, 0x21, 0x11, 0x14, 0x1e, // #5>.7>.;..!.!... + 0x02, 0x37, 0x36, 0x03, 0xb0, 0x50, 0x17, 0xb0, 0x59, 0x68, 0xad, 0x70, 0x4e, 0x21, 0xa8, 0x48, // .76..P..Yh.pN!.H + 0x72, 0x44, 0x30, 0x14, 0x05, 0x01, 0x07, 0x04, 0xf4, 0x01, 0x4d, 0xfe, 0xb2, 0x0d, 0x20, 0x43, // rD0.......M... C + 0x30, 0x4e, 0xcf, 0xed, 0x23, 0x3e, 0x01, 0x02, 0x38, 0x5c, 0x78, 0x78, 0x3a, 0x02, 0x20, 0xd7, // 0N..#>..8.xx:. . + 0x1a, 0x57, 0x5d, 0x6f, 0x57, 0x2d, 0x05, 0x07, 0xfe, 0x58, 0xfc, 0xfd, 0xfa, 0x1e, 0x34, 0x35, // .W]oW-...X....45 + 0x1e, 0x01, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x1f, // ................ + 0x00, 0x2f, 0x00, 0x00, 0x25, 0x27, 0x06, 0x23, 0x06, 0x2e, 0x02, 0x35, 0x11, 0x21, 0x35, 0x21, // ./..%'.#...5.!5! + 0x11, 0x23, 0x22, 0x07, 0x0e, 0x03, 0x07, 0x15, 0x33, 0x11, 0x14, 0x1e, 0x02, 0x37, 0x3e, 0x01, // .#".....3....7>. 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // ....#!"&5.463!2. - 0x04, 0x63, 0x58, 0x56, 0x33, 0x25, 0x1d, 0x0a, 0x0b, 0x01, 0x12, 0xfe, 0xee, 0xa4, 0x0b, 0x1d, // .cXV3%.......... - 0x1d, 0x31, 0x30, 0x44, 0x7f, 0x11, 0x11, 0x2a, 0x2b, 0x3d, 0x3e, 0x4e, 0x43, 0x3e, 0x39, 0x01, // .10D...*+=>NC>9. - 0xea, 0xa9, 0x77, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0x7f, 0xb5, 0x38, // ..w.@w..w..w...8 - 0x17, 0x11, 0x1c, 0x1e, 0x63, 0x01, 0x27, 0xb5, 0x01, 0x23, 0x5a, 0x39, 0x39, 0x2a, 0x28, 0x17, // ....c.'..#Z99*(. - 0xa3, 0xfe, 0x6c, 0x4e, 0x2b, 0x2a, 0x24, 0x25, 0x14, 0x14, 0x0e, 0x0d, 0x04, 0x05, 0xfc, 0x40, // ..lN+*$%.......@ - 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, // w..w..w......... - 0xff, 0x40, 0x02, 0xfd, 0x06, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x16, 0x07, 0x01, 0x06, 0x23, // .@.............# - 0x22, 0x27, 0x01, 0x26, 0x37, 0x36, 0x3b, 0x01, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x15, // "'.&76;..46;.2.. - 0x11, 0x33, 0x02, 0xf5, 0x10, 0x0d, 0xfe, 0xa2, 0x0a, 0x0d, 0x0e, 0x0a, 0xfe, 0x9d, 0x0d, 0x08, // .3.............. - 0x09, 0x14, 0xe0, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0xe0, 0x01, 0x00, 0x26, 0x10, 0xfe, 0x80, 0x0a, // ...........&.... - 0x0a, 0x01, 0x80, 0x10, 0x13, 0x13, 0x04, 0xe0, 0x0e, 0x12, 0x12, 0x0e, 0xfb, 0x20, 0x00, 0x00, // ............. .. - 0x00, 0x01, 0x00, 0x03, 0xff, 0x00, 0x02, 0xfd, 0x05, 0xc0, 0x00, 0x17, 0x00, 0x00, 0x01, 0x06, // ................ - 0x2b, 0x01, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, 0x23, 0x22, 0x26, 0x37, 0x01, // +....+."&5.#"&7. - 0x36, 0x33, 0x32, 0x17, 0x01, 0x16, 0x02, 0xfd, 0x09, 0x14, 0xe0, 0x12, 0x0e, 0xc0, 0x0e, 0x12, // 632............. - 0xe0, 0x15, 0x10, 0x0d, 0x01, 0x5e, 0x0a, 0x0d, 0x0e, 0x0a, 0x01, 0x63, 0x0d, 0x04, 0x13, 0x13, // .....^.....c.... - 0xfb, 0x20, 0x0e, 0x12, 0x12, 0x0e, 0x04, 0xe0, 0x26, 0x10, 0x01, 0x80, 0x0a, 0x0a, 0xfe, 0x80, // . ......&....... - 0x10, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x40, 0x01, 0x03, 0x07, 0x00, 0x03, 0xfd, 0x00, 0x17, // .......@........ - 0x00, 0x00, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x15, 0x14, 0x06, 0x27, 0x01, 0x26, 0x35, 0x34, // ......#!...'.&54 - 0x37, 0x01, 0x36, 0x17, 0x16, 0x1d, 0x01, 0x21, 0x32, 0x16, 0x07, 0x00, 0x12, 0x0e, 0xfb, 0x20, // 7.6....!2...... - 0x26, 0x10, 0xfe, 0x80, 0x0a, 0x0a, 0x01, 0x80, 0x10, 0x13, 0x13, 0x04, 0xe0, 0x0e, 0x12, 0x02, // &............... - 0xe0, 0xc0, 0x0e, 0x12, 0xe0, 0x15, 0x10, 0x0d, 0x01, 0x5e, 0x0a, 0x0d, 0x0e, 0x0a, 0x01, 0x62, // .........^.....b - 0x0e, 0x08, 0x09, 0x14, 0xe0, 0x12, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x03, 0x06, 0xc0, // ................ - 0x03, 0xfd, 0x00, 0x17, 0x00, 0x00, 0x01, 0x14, 0x07, 0x01, 0x06, 0x27, 0x26, 0x3d, 0x01, 0x21, // ...........'&=.! - 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x35, 0x34, 0x36, 0x17, 0x01, 0x16, 0x06, 0xc0, // "&=.463!546..... - 0x0a, 0xfe, 0x80, 0x10, 0x13, 0x13, 0xfb, 0x20, 0x0e, 0x12, 0x12, 0x0e, 0x04, 0xe0, 0x26, 0x10, // ....... ......&. - 0x01, 0x80, 0x0a, 0x02, 0x83, 0x0e, 0x0a, 0xfe, 0x9e, 0x0e, 0x08, 0x09, 0x14, 0xe0, 0x12, 0x0e, // ................ - 0xc0, 0x0e, 0x12, 0xe0, 0x15, 0x10, 0x0d, 0xfe, 0xa2, 0x0a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // ................ - 0xff, 0x80, 0x05, 0x71, 0x06, 0x00, 0x00, 0x26, 0x00, 0x38, 0x00, 0x00, 0x01, 0x06, 0x07, 0x06, // ...q...&.8...... - 0x23, 0x22, 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x23, 0x22, 0x03, 0x02, 0x35, 0x34, 0x37, 0x36, // #"'&#"..#"..5476 - 0x33, 0x32, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x33, 0x32, 0x17, 0x16, 0x17, 0x06, 0x07, 0x06, // 32..327632...... - 0x15, 0x14, 0x16, 0x01, 0x14, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x36, 0x37, 0x36, 0x37, // ............6767 - 0x1e, 0x01, 0x17, 0x14, 0x16, 0x05, 0x71, 0x27, 0x54, 0x81, 0x80, 0x31, 0x5b, 0x56, 0x41, 0x3d, // ......q'T..1[VA= - 0x51, 0x51, 0x33, 0x98, 0x95, 0x93, 0x71, 0x70, 0xac, 0x48, 0x69, 0x68, 0x22, 0x2d, 0x62, 0x66, // QQ3...qp.Hih"-bf - 0x47, 0x77, 0x5e, 0x34, 0x34, 0x4f, 0x23, 0x41, 0x8a, 0xfe, 0xe1, 0x1d, 0x1e, 0x3f, 0x36, 0x36, // Gw^44O#A.....?66 - 0x25, 0x43, 0x03, 0x4b, 0x4a, 0xb0, 0x01, 0x03, 0x01, 0x01, 0x01, 0x41, 0x7d, 0x7d, 0xc4, 0x20, // %C.KJ......A}}. - 0x20, 0x21, 0x22, 0x01, 0x03, 0x01, 0x05, 0xf2, 0xe4, 0x92, 0x90, 0x1e, 0x1e, 0x22, 0x22, 0x41, // !"..........""A - 0x24, 0x40, 0x43, 0x33, 0x5e, 0x71, 0x7c, 0xc6, 0x04, 0x7a, 0x3d, 0x4b, 0x4b, 0x3f, 0x36, 0x12, // $@C3^q|..z=KK?6. - 0x0b, 0x06, 0x95, 0x6c, 0x6b, 0x29, 0x03, 0x10, 0x03, 0x04, 0x0c, 0x00, 0x00, 0x04, 0x00, 0x00, // ...lk).......... - 0xff, 0x00, 0x06, 0x80, 0x05, 0x80, 0x00, 0x03, 0x00, 0x07, 0x00, 0x0b, 0x00, 0x0f, 0x00, 0x00, // ................ - 0x01, 0x11, 0x25, 0x11, 0x01, 0x11, 0x21, 0x11, 0x01, 0x11, 0x25, 0x11, 0x01, 0x11, 0x21, 0x11, // ..%...!...%...!. - 0x02, 0xaa, 0xfd, 0x56, 0x02, 0xaa, 0xfd, 0x56, 0x06, 0x80, 0xfc, 0x75, 0x03, 0x8b, 0xfc, 0x75, // ...V...V...u...u - 0x02, 0x12, 0xfd, 0x75, 0x5e, 0x02, 0x2d, 0x02, 0xe7, 0xfd, 0x6d, 0x02, 0x35, 0xfd, 0x77, 0xfc, // ...u^.-...m.5.w. - 0xee, 0x7d, 0x02, 0x95, 0x03, 0x6e, 0xfc, 0xe6, 0x02, 0x9d, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, // .}...n.......... - 0xff, 0x00, 0x05, 0x80, 0x05, 0x7e, 0x00, 0x07, 0x00, 0x0f, 0x00, 0x1c, 0x00, 0x37, 0x00, 0x4d, // .....~.......7.M - 0x00, 0x5b, 0x00, 0x00, 0x00, 0x32, 0x36, 0x34, 0x26, 0x22, 0x06, 0x14, 0x04, 0x32, 0x36, 0x34, // .[...264&"...264 - 0x26, 0x22, 0x06, 0x14, 0x05, 0x32, 0x16, 0x15, 0x11, 0x14, 0x06, 0x22, 0x26, 0x35, 0x11, 0x34, // &"...2....."&5.4 - 0x36, 0x05, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x15, 0x14, 0x06, 0x22, 0x26, 0x3d, 0x01, 0x23, 0x15, // 6....+...."&=.#. - 0x14, 0x06, 0x23, 0x22, 0x26, 0x35, 0x27, 0x23, 0x22, 0x26, 0x35, 0x11, 0x01, 0x1e, 0x01, 0x15, // ..#"&5'#"&5..... - 0x21, 0x34, 0x36, 0x37, 0x27, 0x26, 0x37, 0x36, 0x1f, 0x01, 0x36, 0x32, 0x17, 0x37, 0x36, 0x17, // !467'&76..62.76. - 0x16, 0x07, 0x01, 0x11, 0x14, 0x06, 0x23, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x32, 0x16, // ......#"&5.4632. - 0x01, 0xdd, 0x20, 0x17, 0x17, 0x20, 0x16, 0x01, 0xbc, 0x20, 0x16, 0x16, 0x20, 0x17, 0xfc, 0xfb, // .. .. ... .. ... - 0x2a, 0x3c, 0x3b, 0x56, 0x3c, 0x3c, 0x04, 0x4f, 0x40, 0x2d, 0x4b, 0x3c, 0x56, 0x3c, 0x8a, 0x3c, // *<;V<<.O@-K.<.&.4'>.&4.. - 0x27, 0x2e, 0x01, 0x27, 0x16, 0x17, 0x16, 0x07, 0x06, 0x07, 0x06, 0x2e, 0x01, 0x27, 0x2e, 0x04, // '..'.........'.. - 0x27, 0x2e, 0x03, 0x27, 0x26, 0x36, 0x26, 0x27, 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x36, 0x37, 0x36, // '..'&6&'..'..676 - 0x16, 0x07, 0x06, 0x16, 0x37, 0x36, 0x34, 0x35, 0x2e, 0x03, 0x27, 0x06, 0x17, 0x14, 0x23, 0x2e, // ....7645..'...#. - 0x01, 0x06, 0x27, 0x36, 0x26, 0x27, 0x26, 0x06, 0x07, 0x06, 0x1e, 0x01, 0x37, 0x36, 0x37, 0x36, // ..'6&'&.....7676 - 0x07, 0x22, 0x26, 0x27, 0x26, 0x36, 0x17, 0x32, 0x16, 0x06, 0x07, 0x06, 0x07, 0x0e, 0x01, 0x07, // ."&'&6.2........ - 0x0e, 0x01, 0x17, 0x1e, 0x03, 0x17, 0x16, 0x37, 0x3e, 0x03, 0x37, 0x36, 0x17, 0x1e, 0x01, 0x06, // .......7>.76.... - 0x07, 0x0e, 0x01, 0x07, 0x06, 0x07, 0x06, 0x27, 0x26, 0x17, 0x16, 0x17, 0x16, 0x37, 0x3e, 0x05, // .......'&....7>. - 0x16, 0x17, 0x14, 0x0e, 0x05, 0x07, 0x0e, 0x02, 0x27, 0x26, 0x27, 0x26, 0x07, 0x06, 0x15, 0x14, // ........'&'&.... - 0x0e, 0x02, 0x17, 0x0e, 0x01, 0x07, 0x06, 0x16, 0x07, 0x06, 0x27, 0x26, 0x27, 0x26, 0x37, 0x36, // ..........'&'&76 - 0x0f, 0x01, 0x06, 0x17, 0x1e, 0x01, 0x17, 0x1e, 0x01, 0x17, 0x1e, 0x01, 0x06, 0x07, 0x1e, 0x02, // ................ - 0x15, 0x36, 0x27, 0x2e, 0x02, 0x37, 0x3e, 0x01, 0x17, 0x16, 0x37, 0x36, 0x37, 0x36, 0x17, 0x16, // .6'..7>...7676.. - 0x07, 0x06, 0x07, 0x06, 0x16, 0x17, 0x3e, 0x01, 0x37, 0x36, 0x26, 0x36, 0x37, 0x36, 0x33, 0x3e, // ......>.76&6763> - 0x01, 0x16, 0x01, 0x36, 0x26, 0x27, 0x26, 0x15, 0x16, 0x17, 0x32, 0x07, 0x06, 0x33, 0x32, 0x05, // ...6&'&...2..32. - 0x2e, 0x02, 0x27, 0x2e, 0x04, 0x07, 0x06, 0x16, 0x17, 0x16, 0x36, 0x27, 0x34, 0x2e, 0x01, 0x07, // ..'.......6'4... - 0x06, 0x17, 0x16, 0x17, 0x16, 0x17, 0x14, 0x3f, 0x01, 0x34, 0x2e, 0x01, 0x27, 0x26, 0x23, 0x0e, // .......?.4..'&#. - 0x01, 0x16, 0x07, 0x0e, 0x02, 0x17, 0x16, 0x3e, 0x01, 0x37, 0x36, 0x32, 0x36, 0x01, 0x1e, 0x02, // .......>.7626... - 0x0e, 0x05, 0x07, 0x0e, 0x01, 0x07, 0x0e, 0x01, 0x27, 0x2e, 0x03, 0x27, 0x26, 0x23, 0x22, 0x06, // ........'..'&#". - 0x07, 0x0e, 0x03, 0x27, 0x2e, 0x01, 0x27, 0x2e, 0x04, 0x27, 0x26, 0x36, 0x37, 0x36, 0x2e, 0x01, // ...'..'..'&676.. - 0x36, 0x37, 0x3e, 0x01, 0x37, 0x3e, 0x01, 0x35, 0x16, 0x07, 0x06, 0x27, 0x26, 0x07, 0x06, 0x17, // 67>.7>.5...'&... - 0x1e, 0x03, 0x07, 0x14, 0x06, 0x17, 0x16, 0x17, 0x1e, 0x01, 0x17, 0x1e, 0x02, 0x37, 0x3e, 0x02, // .............7>. - 0x2e, 0x01, 0x27, 0x26, 0x27, 0x26, 0x07, 0x06, 0x27, 0x26, 0x37, 0x3e, 0x02, 0x37, 0x3e, 0x03, // ..'&'&..'&7>.7>. - 0x37, 0x36, 0x37, 0x26, 0x27, 0x26, 0x36, 0x37, 0x36, 0x33, 0x36, 0x16, 0x17, 0x1e, 0x01, 0x07, // 767&'&67636..... - 0x06, 0x17, 0x16, 0x17, 0x1e, 0x01, 0x17, 0x16, 0x0e, 0x01, 0x07, 0x0e, 0x03, 0x27, 0x2e, 0x04, // .............'.. - 0x27, 0x26, 0x0e, 0x01, 0x17, 0x16, 0x07, 0x06, 0x16, 0x36, 0x37, 0x3e, 0x01, 0x37, 0x3e, 0x01, // '&.......67>.7>. - 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x36, 0x37, 0x1e, 0x05, 0x02, 0x97, 0x0b, 0x09, 0x04, 0x05, 0x13, // ..'..67......... - 0x05, 0x5c, 0x04, 0x0f, 0x0a, 0x18, 0x08, 0x03, 0xfe, 0x9b, 0x04, 0x04, 0x05, 0x03, 0x03, 0x07, // ................ - 0x07, 0x06, 0x04, 0x11, 0x04, 0x01, 0x02, 0x02, 0x01, 0x02, 0x03, 0x55, 0x37, 0x04, 0x07, 0x03, // ...........U7... - 0x03, 0x02, 0x07, 0x01, 0x09, 0x01, 0x0a, 0x4a, 0x23, 0x18, 0x21, 0x57, 0x21, 0x0b, 0x27, 0x1f, // .......J#.!W!.'. - 0x0f, 0x01, 0x0b, 0x09, 0x15, 0x12, 0x0d, 0x0d, 0x01, 0x0e, 0x22, 0x19, 0x16, 0x04, 0x04, 0x14, // .........."..... - 0x0b, 0x27, 0x0f, 0x3b, 0x06, 0x08, 0x06, 0x16, 0x19, 0x25, 0x1c, 0x0a, 0x0b, 0x12, 0x15, 0x0d, // .'.;.....%...... - 0x05, 0x11, 0x19, 0x16, 0x10, 0x6b, 0x12, 0x01, 0x09, 0x29, 0x19, 0x03, 0x01, 0x22, 0x1c, 0x1b, // .....k...)...".. - 0x1d, 0x02, 0x01, 0x09, 0x11, 0x07, 0x0a, 0x06, 0x04, 0x0b, 0x07, 0x11, 0x01, 0x01, 0x14, 0x18, // ................ - 0x11, 0x14, 0x01, 0x01, 0x16, 0x09, 0x08, 0x27, 0x01, 0x0d, 0x05, 0x0a, 0x0e, 0x16, 0x0a, 0x1b, // .......'........ - 0x16, 0x2f, 0x37, 0x02, 0x2a, 0x1b, 0x20, 0x05, 0x09, 0x0b, 0x05, 0x03, 0x09, 0x0c, 0x14, 0x49, // ./7.*. ........I - 0x09, 0x2c, 0x1a, 0x19, 0x36, 0x0a, 0x01, 0x01, 0x10, 0x19, 0x2a, 0x11, 0x26, 0x22, 0x21, 0x1b, // .,..6.....*.&"!. - 0x16, 0x0d, 0x02, 0x02, 0x06, 0x06, 0x0b, 0x07, 0x0d, 0x03, 0x1c, 0x4f, 0x36, 0x16, 0x15, 0x2a, // ...........O6..* - 0x16, 0x03, 0x01, 0x1e, 0x1d, 0x0d, 0x12, 0x17, 0x4f, 0x08, 0x02, 0x01, 0x06, 0x08, 0x15, 0x20, // ........O...... - 0x04, 0x02, 0x06, 0x04, 0x05, 0x04, 0x24, 0x2e, 0x05, 0x28, 0x04, 0x14, 0xa8, 0x09, 0x10, 0x03, // ......$..(...... - 0x1f, 0x1e, 0x08, 0x2a, 0x0e, 0x2e, 0x27, 0x04, 0x0d, 0x06, 0x01, 0x03, 0x14, 0x0a, 0x2e, 0x78, // ...*..'........x - 0x85, 0x2c, 0x17, 0x0b, 0x0c, 0x02, 0x01, 0x16, 0x09, 0x06, 0x15, 0x03, 0x17, 0x02, 0x02, 0x11, // .,.............. - 0x02, 0x16, 0x0f, 0x24, 0x01, 0x43, 0x4e, 0xfd, 0xa1, 0x03, 0x0b, 0x06, 0x09, 0x02, 0x03, 0x0a, // ...$.CN......... - 0x03, 0x03, 0x0b, 0x03, 0x01, 0xa3, 0x02, 0x09, 0x11, 0x06, 0x05, 0x09, 0x05, 0x06, 0x02, 0x03, // ................ - 0x0e, 0x2a, 0x12, 0x09, 0x0b, 0xb4, 0x0a, 0x0c, 0x03, 0x0e, 0x07, 0x02, 0x02, 0x0e, 0x04, 0x08, // .*.............. - 0x38, 0x05, 0x0d, 0x03, 0x0f, 0x09, 0x09, 0x05, 0x03, 0x02, 0x01, 0x0a, 0x02, 0x04, 0x04, 0x08, // 8............... - 0x0e, 0x08, 0x01, 0x10, 0x0e, 0x02, 0x37, 0x14, 0x16, 0x02, 0x07, 0x18, 0x17, 0x25, 0x1a, 0x26, // ......7......%.& - 0x08, 0x26, 0x5f, 0x1c, 0x11, 0x66, 0x26, 0x12, 0x17, 0x0a, 0x22, 0x1e, 0x2c, 0x56, 0x13, 0x4c, // .&_..f&...".,V.L - 0x14, 0x2c, 0x47, 0x24, 0x33, 0x1c, 0x1d, 0xa4, 0x40, 0x13, 0x40, 0x24, 0x2b, 0x18, 0x05, 0x0a, // .,G$3...@.@$+... - 0x22, 0x01, 0x01, 0x0a, 0x0a, 0x01, 0x0a, 0x0e, 0x56, 0x11, 0x1e, 0x18, 0x15, 0x35, 0x20, 0x33, // ".......V....5 3 - 0x22, 0x09, 0x0d, 0x12, 0x02, 0x0c, 0x05, 0x04, 0x01, 0x22, 0x03, 0x03, 0x22, 0x14, 0x81, 0x23, // "........".."..# - 0x18, 0x64, 0x41, 0x17, 0x2b, 0x2b, 0x03, 0x12, 0x14, 0x0a, 0x79, 0x30, 0x44, 0x2d, 0x0b, 0x04, // .dA.++....y0D-.. - 0x03, 0x01, 0x01, 0x12, 0x1e, 0x07, 0x08, 0x25, 0x16, 0x26, 0x14, 0x6e, 0x0e, 0x0c, 0x04, 0x02, // .......%.&.n.... - 0x34, 0x50, 0x27, 0x41, 0x35, 0x6a, 0x24, 0x39, 0x45, 0x05, 0x05, 0x23, 0x22, 0x63, 0x37, 0x59, // 4P'A5j$9E..#"c7Y - 0x0f, 0x08, 0x06, 0x12, 0x0b, 0x0a, 0x1b, 0x1b, 0x36, 0x22, 0x12, 0x1b, 0x12, 0x09, 0x0e, 0x02, // ........6"...... - 0x16, 0x26, 0x12, 0x10, 0x14, 0x13, 0x0a, 0x38, 0x5a, 0x28, 0x3b, 0x3d, 0x49, 0x35, 0x30, 0x0b, // .&.....8Z(;=I50. - 0x27, 0x20, 0x21, 0x21, 0x03, 0x0e, 0x01, 0x0e, 0x0f, 0x1a, 0x10, 0x1b, 0x04, 0x65, 0x01, 0x13, // ' !!.........e.. - 0x01, 0x06, 0x0c, 0x03, 0x0e, 0x01, 0x0f, 0x03, 0x0b, 0x0d, 0x06, 0xfe, 0x52, 0x01, 0x08, 0x11, // ............R... - 0x05, 0x05, 0x08, 0x0a, 0x02, 0x01, 0x10, 0x0a, 0x03, 0x08, 0x04, 0x05, 0x03, 0x03, 0x02, 0xfe, // ................ - 0x9a, 0x12, 0x18, 0x0f, 0x19, 0x1b, 0x10, 0x1d, 0x0a, 0x22, 0x07, 0x2b, 0x05, 0x30, 0x6e, 0x14, // .........".+.0n. - 0x14, 0x3f, 0xa2, 0x74, 0x28, 0x02, 0x04, 0x2d, 0x7a, 0x2e, 0x27, 0x3c, 0x1f, 0x12, 0x0c, 0x01, // .?.t(..-z.'<.... - 0x3e, 0x52, 0x1e, 0x24, 0x16, 0x15, 0x41, 0x22, 0x08, 0x03, 0x1e, 0x01, 0x01, 0x32, 0x34, 0x01, // >R.$..A".....24. - 0x03, 0x42, 0x19, 0x13, 0x0f, 0x07, 0x04, 0x40, 0x05, 0x1e, 0x28, 0x15, 0x09, 0x03, 0x08, 0x7e, // .B.....@..(....~ - 0x0f, 0x09, 0x03, 0x04, 0x07, 0x39, 0x42, 0x01, 0x01, 0x39, 0x1f, 0x0f, 0x2c, 0x1f, 0x02, 0x03, // .....9B..9..,... - 0x0b, 0x09, 0x01, 0x1d, 0x13, 0x16, 0x1e, 0x01, 0x2a, 0x24, 0x04, 0x0f, 0x0e, 0x0c, 0x17, 0x01, // ........*$...... - 0x0e, 0x1a, 0x05, 0x08, 0x17, 0x0f, 0x0b, 0x01, 0x02, 0x11, 0x01, 0x0c, 0x09, 0x11, 0x09, 0x0e, // ................ - 0x06, 0x03, 0x0b, 0x0d, 0x03, 0x06, 0x1f, 0x04, 0x13, 0x04, 0x05, 0x07, 0x02, 0x04, 0x04, 0x0f, // ................ - 0x17, 0x01, 0x01, 0x0c, 0x10, 0x13, 0x0f, 0x09, 0x04, 0x09, 0x02, 0x05, 0x05, 0x04, 0x06, 0x03, // ................ - 0x07, 0x01, 0x0e, 0x3c, 0x1a, 0x0c, 0x0b, 0x3e, 0x1f, 0x09, 0x03, 0x07, 0x19, 0x3f, 0x30, 0x44, // ...<...>.....?0D - 0x1d, 0x06, 0xa8, 0x39, 0x12, 0x66, 0x08, 0x18, 0x15, 0x1f, 0x3f, 0x1c, 0x1c, 0x13, 0x01, 0x05, // ...9.f....?..... - 0x41, 0x65, 0x0c, 0x20, 0x04, 0x17, 0x87, 0x09, 0x0f, 0x2e, 0x28, 0x03, 0x0f, 0x3b, 0x31, 0x2e, // Ae. ......(..;1. - 0x18, 0x44, 0x08, 0x10, 0x08, 0x02, 0x05, 0x09, 0x07, 0x34, 0x10, 0x0f, 0x48, 0x26, 0x08, 0x06, // .D.......4..H&.. - 0x2e, 0x19, 0x43, 0x17, 0x1d, 0x01, 0x13, 0x74, 0x20, 0x15, 0x69, 0x59, 0x1a, 0x12, 0x25, 0x20, // ..C....t .iY..% - 0x0b, 0x03, 0x2a, 0x11, 0x1a, 0x02, 0x02, 0x09, 0x05, 0x01, 0x0f, 0x14, 0xc2, 0x08, 0x07, 0x03, // ..*............. - 0x04, 0x03, 0x0a, 0x06, 0x07, 0x01, 0x02, 0x10, 0x37, 0x04, 0x01, 0x12, 0xe0, 0x0b, 0x11, 0x08, // ........7....... - 0x01, 0x01, 0x06, 0x01, 0x01, 0x04, 0x1b, 0x03, 0x05, 0xec, 0x02, 0x06, 0x08, 0x02, 0x0f, 0x01, // ................ - 0x0d, 0x0d, 0x06, 0x04, 0x0d, 0x05, 0x06, 0x03, 0x06, 0x0c, 0x03, 0x01, 0x04, 0xfa, 0xc8, 0x0c, // ................ - 0x19, 0x17, 0x16, 0x16, 0x11, 0x14, 0x0d, 0x12, 0x04, 0x13, 0x4a, 0x1b, 0x10, 0x07, 0x12, 0x09, // ..........J..... - 0x1d, 0x16, 0x11, 0x01, 0x01, 0x03, 0x01, 0x01, 0x1c, 0x20, 0x19, 0x01, 0x01, 0x3c, 0x0d, 0x04, // ......... ...<.. - 0x0b, 0x07, 0x0c, 0x11, 0x0b, 0x17, 0x57, 0x0b, 0x10, 0x30, 0x25, 0x24, 0x09, 0x0c, 0x04, 0x0a, // ......W..0%$.... - 0x12, 0x22, 0x22, 0x49, 0x21, 0x14, 0x05, 0x03, 0x0d, 0x0f, 0x2a, 0x06, 0x18, 0x0c, 0x16, 0x0b, // .""I!.....*..... - 0x0f, 0x44, 0x0e, 0x11, 0x09, 0x06, 0x19, 0x08, 0x06, 0x20, 0x0e, 0x03, 0x06, 0x2c, 0x34, 0x41, // .D....... ...,4A - 0x27, 0x11, 0xbe, 0x34, 0x4a, 0x22, 0x09, 0x18, 0x10, 0x16, 0x1d, 0x2e, 0x30, 0x12, 0x15, 0x66, // '..4J"......0..f - 0x36, 0x44, 0x14, 0x8f, 0x34, 0x70, 0xc6, 0x5a, 0x7b, 0x2b, 0x15, 0x01, 0x1d, 0x1b, 0x2a, 0x9f, // 6D..4p.Z{+....*. - 0x44, 0x5f, 0x77, 0x71, 0x69, 0x3b, 0xd0, 0x57, 0x31, 0x47, 0x28, 0x02, 0x02, 0x22, 0x25, 0x1e, // D_wqi;.W1G(.."%. - 0x01, 0x01, 0x08, 0x13, 0x0c, 0x1d, 0x05, 0x25, 0x0e, 0x54, 0x37, 0x46, 0x7d, 0x41, 0x47, 0x05, // .......%.T7F}AG. - 0x21, 0x31, 0x23, 0x19, 0x12, 0x25, 0x20, 0x19, 0x0b, 0x0b, 0x4a, 0x47, 0x0c, 0x1f, 0x33, 0x1e, // !1#..% ...JG..3. - 0x1b, 0x0b, 0x0f, 0x00, 0x00, 0x08, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x0e, // ................ - 0x00, 0x20, 0x00, 0x27, 0x00, 0x2e, 0x00, 0x32, 0x00, 0x3e, 0x00, 0x56, 0x00, 0x62, 0x00, 0x00, // . .'...2.>.V.b.. - 0x25, 0x26, 0x03, 0x23, 0x07, 0x0e, 0x04, 0x07, 0x27, 0x16, 0x33, 0x32, 0x03, 0x26, 0x27, 0x04, // %&.#....'.32.&'. - 0x21, 0x06, 0x15, 0x14, 0x16, 0x17, 0x3e, 0x03, 0x3f, 0x01, 0x3e, 0x01, 0x27, 0x26, 0x27, 0x0e, // !.....>.?.>.'&'. - 0x01, 0x07, 0x20, 0x05, 0x26, 0x07, 0x16, 0x17, 0x3e, 0x01, 0x01, 0x22, 0x07, 0x36, 0x05, 0x26, // .. .&...>..".6.& - 0x23, 0x22, 0x07, 0x16, 0x17, 0x3e, 0x04, 0x13, 0x26, 0x27, 0x07, 0x0e, 0x04, 0x07, 0x16, 0x17, // #"...>..&'...... - 0x1e, 0x01, 0x17, 0x3e, 0x01, 0x32, 0x1e, 0x04, 0x17, 0x36, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, // ...>.2...6... $. - 0x10, 0x12, 0x24, 0x20, 0x04, 0x04, 0x00, 0x2a, 0x62, 0x02, 0x02, 0x10, 0x36, 0x94, 0x7e, 0x88, // ..$ ...*b...6.~. - 0x23, 0x0f, 0xb8, 0xea, 0x84, 0x3d, 0x15, 0x20, 0xfe, 0xc9, 0xfe, 0x96, 0x01, 0x58, 0x50, 0x32, // #....=. .....XP2 - 0x93, 0x8a, 0x7b, 0x26, 0x25, 0x04, 0x12, 0x67, 0x78, 0x7c, 0x8a, 0xc0, 0x20, 0x01, 0x2e, 0x03, // ..{&%..gx|.. ... - 0xdc, 0xd2, 0xc7, 0x57, 0x29, 0x6f, 0x94, 0xfc, 0xf1, 0x01, 0x01, 0x01, 0x02, 0x4f, 0xb9, 0xf8, // ...W)o.......O.. - 0x4c, 0x4f, 0x83, 0x73, 0x45, 0x7a, 0x47, 0x3c, 0x0f, 0xe4, 0x03, 0x92, 0x01, 0x09, 0x14, 0x43, // LO.sEzG<.......C - 0x4b, 0x7d, 0x45, 0x19, 0x13, 0x02, 0x09, 0x03, 0x24, 0x4d, 0x46, 0x44, 0x3c, 0x35, 0x2b, 0x1e, // K}E.....$MFD<5+. - 0x0a, 0x7a, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, // .z....^.....a... - 0x61, 0x24, 0xf1, 0x01, 0x01, 0x01, 0x06, 0x15, 0x4d, 0x57, 0x8e, 0x4d, 0x0b, 0x96, 0x02, 0x93, // a$......MW.M.... - 0x31, 0x3e, 0x5d, 0x07, 0x0e, 0x7c, 0xe1, 0x59, 0x59, 0x9b, 0x5e, 0x44, 0x0e, 0x0d, 0x01, 0x05, // 1>]..|.YY.^D.... - 0xd6, 0xd5, 0xa5, 0x41, 0xf2, 0x97, 0xef, 0x3c, 0x1f, 0xef, 0xe6, 0x4b, 0xe5, 0x03, 0x6d, 0x01, // ...A...<...K..m. - 0x01, 0x91, 0xa4, 0x13, 0xaa, 0xd4, 0x1a, 0x45, 0x36, 0x3c, 0x15, 0xfe, 0x22, 0xe8, 0xb2, 0x01, // .......E6<.."... - 0x0c, 0x19, 0x40, 0x39, 0x49, 0x1c, 0x35, 0x2a, 0x06, 0x17, 0x05, 0x05, 0x04, 0x03, 0x05, 0x06, // ..@9I.5*........ - 0x07, 0x05, 0x02, 0xc8, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, // .....^.....a...a - 0xce, 0xce, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x3e, // ...............> - 0x00, 0x5e, 0x00, 0x00, 0x01, 0x34, 0x2e, 0x03, 0x2f, 0x01, 0x2e, 0x04, 0x35, 0x34, 0x33, 0x32, // .^...4../...5432 - 0x1e, 0x03, 0x33, 0x32, 0x36, 0x35, 0x34, 0x2e, 0x01, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x14, 0x1e, // ..32654..#"..... - 0x02, 0x1f, 0x01, 0x16, 0x17, 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x2e, 0x03, 0x23, 0x22, 0x06, // .........#"..#". - 0x15, 0x14, 0x16, 0x33, 0x32, 0x3e, 0x02, 0x05, 0x14, 0x06, 0x23, 0x22, 0x27, 0x06, 0x23, 0x22, // ...32>....#"'.#" - 0x24, 0x26, 0x02, 0x35, 0x34, 0x37, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x36, 0x33, 0x32, // $&.547&54632.632 - 0x04, 0x16, 0x12, 0x15, 0x14, 0x07, 0x16, 0x04, 0x95, 0x27, 0x3a, 0x58, 0x4d, 0x31, 0x68, 0x1e, // .........':XM1h. - 0x1c, 0x2a, 0x12, 0x0f, 0x90, 0x2b, 0x44, 0x28, 0x24, 0x2c, 0x1a, 0x2f, 0x39, 0x70, 0xac, 0x60, // .*...+D($,./9p.` - 0x44, 0x80, 0x6f, 0x43, 0x26, 0x4a, 0x56, 0x3c, 0x92, 0x5a, 0x16, 0x20, 0x50, 0x41, 0x33, 0x51, // D.oC&JV<.Z. PA3Q - 0x31, 0x2a, 0x32, 0x1d, 0x32, 0x33, 0xf4, 0xa9, 0x49, 0x86, 0x6f, 0x42, 0x01, 0x6b, 0xe1, 0x9f, // 1*2.23..I.oB.k.. - 0x82, 0x68, 0x4d, 0x49, 0x8f, 0xfe, 0xfb, 0xbd, 0x6f, 0x10, 0x50, 0xe1, 0x9f, 0x82, 0x68, 0x4d, // .hMI....o.P...hM - 0x49, 0x8f, 0x01, 0x05, 0xbd, 0x6f, 0x10, 0x50, 0x01, 0xd9, 0x32, 0x53, 0x36, 0x2c, 0x18, 0x0b, // I....o.P..2S6,.. - 0x18, 0x07, 0x07, 0x10, 0x10, 0x1a, 0x11, 0x4d, 0x18, 0x21, 0x22, 0x18, 0x40, 0x2d, 0x37, 0x59, // .......M.!".@-7Y - 0x2e, 0x1f, 0x3f, 0x6f, 0x49, 0x3d, 0x5b, 0x3c, 0x25, 0x0e, 0x24, 0x16, 0x0e, 0x14, 0x28, 0x27, // ..?oI=[<%.$...(' - 0x33, 0x20, 0x2d, 0x2d, 0x20, 0x3c, 0x2d, 0x5c, 0x83, 0x25, 0x46, 0x75, 0x90, 0x9f, 0xe1, 0x50, // 3 -- <-..%Fu...P - 0x10, 0x6f, 0xbd, 0x01, 0x05, 0x8f, 0x49, 0x4d, 0x68, 0x82, 0x9f, 0xe1, 0x50, 0x10, 0x6f, 0xbd, // .o....IMh...P.o. - 0xfe, 0xfb, 0x8f, 0x49, 0x4d, 0x68, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x04, // ...IMh.......... - 0x05, 0x80, 0x00, 0x23, 0x00, 0x3c, 0x00, 0x00, 0x09, 0x01, 0x06, 0x22, 0x27, 0x01, 0x26, 0x34, // ...#.<....."'.&4 - 0x37, 0x01, 0x36, 0x32, 0x17, 0x09, 0x01, 0x27, 0x26, 0x23, 0x22, 0x0f, 0x01, 0x06, 0x15, 0x14, // 7.62...'&#"..... - 0x17, 0x01, 0x16, 0x1f, 0x01, 0x33, 0x32, 0x37, 0x01, 0x17, 0x16, 0x14, 0x03, 0x17, 0x16, 0x14, // .....327........ - 0x07, 0x01, 0x06, 0x23, 0x31, 0x22, 0x27, 0x26, 0x27, 0x01, 0x26, 0x34, 0x3f, 0x01, 0x36, 0x32, // ...#1"'&'.&4?.62 - 0x1f, 0x01, 0x01, 0x36, 0x32, 0x05, 0xcb, 0xfd, 0xb5, 0x34, 0x97, 0x35, 0xfd, 0xb5, 0x35, 0x35, // ...62....4.5..55 - 0x02, 0x4b, 0x35, 0x96, 0x35, 0x01, 0x09, 0xfe, 0x72, 0xbc, 0x2a, 0x39, 0x3b, 0x29, 0x78, 0x2a, // .K5.5...r.*9;)x* - 0x2a, 0x01, 0x96, 0x1e, 0x25, 0x06, 0x1c, 0x3c, 0x27, 0x02, 0x6b, 0x02, 0x35, 0x82, 0x78, 0x0e, // *...%..<'.k.5.x. - 0x0e, 0xfd, 0x26, 0x11, 0x14, 0x04, 0x02, 0x12, 0x0c, 0xfe, 0x69, 0x0e, 0x0e, 0x79, 0x0d, 0x2c, // ..&.......i..y., - 0x0e, 0xfc, 0x02, 0x3e, 0x0f, 0x2a, 0x02, 0x00, 0xfd, 0xb5, 0x35, 0x35, 0x02, 0x4b, 0x35, 0x96, // ...>.*....55.K5. - 0x35, 0x02, 0x4b, 0x35, 0x35, 0xfe, 0xf7, 0xfe, 0x71, 0xbc, 0x2a, 0x29, 0x79, 0x28, 0x3b, 0x3a, // 5.K55...q.*)y(;: - 0x2a, 0xfe, 0x68, 0x1c, 0x09, 0x04, 0x29, 0x02, 0x6b, 0x03, 0x35, 0x96, 0x02, 0x3d, 0x78, 0x0f, // *.h...).k.5..=x. - 0x2a, 0x0f, 0xfd, 0x26, 0x0f, 0x01, 0x02, 0x0c, 0x01, 0x98, 0x0f, 0x2a, 0x0e, 0x78, 0x0f, 0x0f, // *..&.......*.x.. - 0xfc, 0x02, 0x3f, 0x0f, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x0f, // ..?............. - 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x00, 0x25, 0x11, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x15, 0x11, // .../..%.4&#!"... - 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x01, 0x11, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x15, 0x11, // ..3!26..4&#!"... - 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x13, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, // ..3!26....#!"&5. - 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x02, 0xc0, 0x12, 0x0e, 0xfe, 0x20, 0x0e, 0x12, 0x12, 0x0e, // 463!2...... .... - 0x01, 0xe0, 0x0e, 0x12, 0x02, 0xa0, 0x12, 0x0e, 0xfe, 0x20, 0x0e, 0x12, 0x12, 0x0e, 0x01, 0xe0, // ......... ...... - 0x0e, 0x12, 0xa0, 0x26, 0x1a, 0xfa, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x05, 0x80, 0x1a, 0x26, 0xc0, // ...&....&&....&. - 0x04, 0x00, 0x0e, 0x12, 0x12, 0x0e, 0xfc, 0x00, 0x0e, 0x12, 0x12, 0x01, 0x8e, 0x02, 0x80, 0x0e, // ................ - 0x12, 0x12, 0x0e, 0xfd, 0x80, 0x0e, 0x12, 0x12, 0x03, 0x0e, 0xfa, 0x80, 0x1a, 0x26, 0x26, 0x1a, // .............&&. - 0x05, 0x80, 0x1a, 0x26, 0x26, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x00, 0x05, 0x00, // ...&&........... - 0x05, 0xe0, 0x00, 0x31, 0x00, 0x39, 0x00, 0x00, 0x01, 0x14, 0x06, 0x23, 0x22, 0x27, 0x03, 0x23, // ...1.9.....#"'.# - 0x15, 0x13, 0x16, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, // ......+....+."&5 - 0x11, 0x23, 0x22, 0x26, 0x35, 0x34, 0x37, 0x13, 0x35, 0x23, 0x03, 0x06, 0x23, 0x22, 0x26, 0x35, // .#"&547.5#..#"&5 - 0x34, 0x37, 0x01, 0x36, 0x33, 0x21, 0x32, 0x17, 0x01, 0x16, 0x00, 0x14, 0x06, 0x22, 0x26, 0x34, // 47.63!2......"&4 - 0x36, 0x32, 0x05, 0x00, 0x38, 0x28, 0x33, 0x1d, 0xe3, 0x2d, 0xf7, 0x09, 0x26, 0x1a, 0xc0, 0x42, // 62..8(3..-..&..B - 0x2e, 0xa0, 0x2e, 0x42, 0xc0, 0x1a, 0x26, 0x09, 0xf7, 0x2d, 0xe3, 0x1d, 0x33, 0x28, 0x38, 0x10, // ...B..&..-..3(8. - 0x01, 0x00, 0x49, 0x67, 0x01, 0x80, 0x67, 0x49, 0x01, 0x00, 0x10, 0xfe, 0x60, 0x83, 0xba, 0x83, // ..Ig..gI....`... - 0x83, 0xba, 0x01, 0xe0, 0x28, 0x38, 0x2b, 0x01, 0x55, 0x84, 0xfe, 0x65, 0x0f, 0x12, 0x1a, 0x26, // ....(8+.U..e...& - 0xfe, 0xf0, 0x2e, 0x42, 0x42, 0x2e, 0x01, 0x10, 0x26, 0x1a, 0x12, 0x0f, 0x01, 0x9b, 0x84, 0xfe, // ...BB...&....... - 0xab, 0x2b, 0x38, 0x28, 0x1d, 0x18, 0x01, 0x80, 0x6b, 0x6b, 0xfe, 0x80, 0x18, 0x03, 0x60, 0xba, // .+8(....kk....`. - 0x83, 0x83, 0xba, 0x83, 0x00, 0x02, 0x00, 0x00, 0xff, 0x00, 0x04, 0x00, 0x05, 0xe0, 0x00, 0x25, // ...............% - 0x00, 0x2d, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, 0x22, 0x26, 0x35, 0x11, 0x23, 0x11, 0x14, 0x06, // .-......"&5.#... + 0x04, 0x70, 0x3e, 0x2c, 0x3b, 0x24, 0x34, 0x19, 0x0a, 0x01, 0x01, 0xff, 0x00, 0xbc, 0x08, 0x01, // .p>,;$4......... + 0x05, 0x19, 0x35, 0x65, 0x44, 0x82, 0x2b, 0x57, 0x9b, 0x63, 0x45, 0x87, 0x01, 0xa2, 0xa9, 0x77, // ..5eD.+W.cE....w + 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0x4b, 0xb7, 0x16, 0x01, 0x17, 0x28, // .@w..w..w.K....( + 0x29, 0x17, 0x01, 0x8e, 0xc2, 0x01, 0x46, 0x0a, 0x2c, 0x56, 0x68, 0x56, 0x19, 0xa5, 0xfe, 0x5e, // ).....F.,VhV...^ + 0x39, 0x74, 0x6a, 0x41, 0x02, 0x01, 0x30, 0x04, 0x2f, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, // 9tjA..0./.@w..w. + 0xc0, 0x77, 0xa9, 0xa9, 0x00, 0x01, 0x00, 0x03, 0xff, 0x40, 0x02, 0xfd, 0x06, 0x00, 0x00, 0x17, // .w.......@...... + 0x00, 0x00, 0x00, 0x16, 0x07, 0x01, 0x06, 0x23, 0x22, 0x27, 0x01, 0x26, 0x37, 0x36, 0x3b, 0x01, // .......#"'.&76;. + 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x15, 0x11, 0x33, 0x02, 0xf5, 0x10, 0x0d, 0xfe, 0xa2, // .46;.2...3...... + 0x0a, 0x0d, 0x0e, 0x0a, 0xfe, 0x9d, 0x0d, 0x08, 0x09, 0x14, 0xe0, 0x12, 0x0e, 0xc0, 0x0e, 0x12, // ................ + 0xe0, 0x01, 0x00, 0x26, 0x10, 0xfe, 0x80, 0x0a, 0x0a, 0x01, 0x80, 0x10, 0x13, 0x13, 0x04, 0xe0, // ...&............ + 0x0e, 0x12, 0x12, 0x0e, 0xfb, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0xff, 0x00, 0x02, 0xfd, // ..... .......... + 0x05, 0xc0, 0x00, 0x17, 0x00, 0x00, 0x01, 0x06, 0x2b, 0x01, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, // ........+....+." + 0x26, 0x35, 0x11, 0x23, 0x22, 0x26, 0x37, 0x01, 0x36, 0x33, 0x32, 0x17, 0x01, 0x16, 0x02, 0xfd, // &5.#"&7.632..... + 0x09, 0x14, 0xe0, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0xe0, 0x15, 0x10, 0x0d, 0x01, 0x5e, 0x0a, 0x0d, // .............^.. + 0x0e, 0x0a, 0x01, 0x63, 0x0d, 0x04, 0x13, 0x13, 0xfb, 0x20, 0x0e, 0x12, 0x12, 0x0e, 0x04, 0xe0, // ...c..... ...... + 0x26, 0x10, 0x01, 0x80, 0x0a, 0x0a, 0xfe, 0x80, 0x10, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x40, // &..............@ + 0x01, 0x03, 0x07, 0x00, 0x03, 0xfd, 0x00, 0x17, 0x00, 0x00, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, // ..............#! + 0x15, 0x14, 0x06, 0x27, 0x01, 0x26, 0x35, 0x34, 0x37, 0x01, 0x36, 0x17, 0x16, 0x1d, 0x01, 0x21, // ...'.&547.6....! + 0x32, 0x16, 0x07, 0x00, 0x12, 0x0e, 0xfb, 0x20, 0x26, 0x10, 0xfe, 0x80, 0x0a, 0x0a, 0x01, 0x80, // 2...... &....... + 0x10, 0x13, 0x13, 0x04, 0xe0, 0x0e, 0x12, 0x02, 0xe0, 0xc0, 0x0e, 0x12, 0xe0, 0x15, 0x10, 0x0d, // ................ + 0x01, 0x5e, 0x0a, 0x0d, 0x0e, 0x0a, 0x01, 0x62, 0x0e, 0x08, 0x09, 0x14, 0xe0, 0x12, 0x00, 0x00, // .^.....b........ + 0x00, 0x01, 0x00, 0x00, 0x01, 0x03, 0x06, 0xc0, 0x03, 0xfd, 0x00, 0x17, 0x00, 0x00, 0x01, 0x14, // ................ + 0x07, 0x01, 0x06, 0x27, 0x26, 0x3d, 0x01, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, // ...'&=.!"&=.463! + 0x35, 0x34, 0x36, 0x17, 0x01, 0x16, 0x06, 0xc0, 0x0a, 0xfe, 0x80, 0x10, 0x13, 0x13, 0xfb, 0x20, // 546............ + 0x0e, 0x12, 0x12, 0x0e, 0x04, 0xe0, 0x26, 0x10, 0x01, 0x80, 0x0a, 0x02, 0x83, 0x0e, 0x0a, 0xfe, // ......&......... + 0x9e, 0x0e, 0x08, 0x09, 0x14, 0xe0, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0xe0, 0x15, 0x10, 0x0d, 0xfe, // ................ + 0xa2, 0x0a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x05, 0x71, 0x06, 0x00, 0x00, 0x26, // ...........q...& + 0x00, 0x38, 0x00, 0x00, 0x01, 0x06, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, // .8......#"'&#".. + 0x23, 0x22, 0x03, 0x02, 0x35, 0x34, 0x37, 0x36, 0x33, 0x32, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, // #"..547632..3276 + 0x33, 0x32, 0x17, 0x16, 0x17, 0x06, 0x07, 0x06, 0x15, 0x14, 0x16, 0x01, 0x14, 0x07, 0x06, 0x07, // 32.............. + 0x06, 0x07, 0x06, 0x07, 0x36, 0x37, 0x36, 0x37, 0x1e, 0x01, 0x17, 0x14, 0x16, 0x05, 0x71, 0x27, // ....6767......q' + 0x54, 0x81, 0x80, 0x31, 0x5b, 0x56, 0x41, 0x3d, 0x51, 0x51, 0x33, 0x98, 0x95, 0x93, 0x71, 0x71, // T..1[VA=QQ3...qq + 0xab, 0x48, 0x69, 0x68, 0x22, 0x2d, 0x62, 0x66, 0x47, 0x77, 0x5e, 0x34, 0x34, 0x4f, 0x23, 0x41, // .Hih"-bfGw^44O#A + 0x8a, 0xfe, 0xe1, 0x1d, 0x1e, 0x3f, 0x36, 0x36, 0x25, 0x43, 0x03, 0x4b, 0x4a, 0xb0, 0x01, 0x03, // .....?66%C.KJ... + 0x01, 0x01, 0x01, 0x41, 0x7d, 0x7d, 0xc4, 0x20, 0x20, 0x21, 0x22, 0x01, 0x03, 0x01, 0x05, 0xf2, // ...A}}. !"..... + 0xe4, 0x92, 0x90, 0x1e, 0x1e, 0x22, 0x22, 0x41, 0x24, 0x40, 0x43, 0x33, 0x5e, 0x71, 0x7c, 0xc6, // .....""A$@C3^q|. + 0x04, 0x7a, 0x3d, 0x4b, 0x4b, 0x3f, 0x36, 0x12, 0x0b, 0x06, 0x95, 0x6c, 0x6b, 0x29, 0x03, 0x10, // .z=KK?6....lk).. + 0x03, 0x04, 0x0c, 0x00, 0x00, 0x04, 0x00, 0x00, 0xff, 0x00, 0x06, 0x80, 0x05, 0x80, 0x00, 0x03, // ................ + 0x00, 0x07, 0x00, 0x0b, 0x00, 0x0f, 0x00, 0x00, 0x01, 0x11, 0x25, 0x11, 0x01, 0x11, 0x21, 0x11, // ..........%...!. + 0x01, 0x11, 0x25, 0x11, 0x01, 0x11, 0x21, 0x11, 0x02, 0xaa, 0xfd, 0x56, 0x02, 0xaa, 0xfd, 0x56, // ..%...!....V...V + 0x06, 0x80, 0xfc, 0x75, 0x03, 0x8b, 0xfc, 0x75, 0x02, 0x12, 0xfd, 0x75, 0x5e, 0x02, 0x2d, 0x02, // ...u...u...u^.-. + 0xe7, 0xfd, 0x6d, 0x02, 0x35, 0xfd, 0x77, 0xfc, 0xee, 0x7d, 0x02, 0x95, 0x03, 0x6e, 0xfc, 0xe6, // ..m.5.w..}...n.. + 0x02, 0x9d, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0xff, 0x00, 0x05, 0x80, 0x05, 0x7e, 0x00, 0x07, // .............~.. + 0x00, 0x0f, 0x00, 0x1c, 0x00, 0x37, 0x00, 0x4d, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x32, 0x36, 0x34, // .....7.M.[...264 + 0x26, 0x22, 0x06, 0x14, 0x04, 0x32, 0x36, 0x34, 0x26, 0x22, 0x06, 0x14, 0x05, 0x32, 0x16, 0x15, // &"...264&"...2.. + 0x11, 0x14, 0x06, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x05, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x15, // ..."&5.46....+.. + 0x14, 0x06, 0x22, 0x26, 0x3d, 0x01, 0x23, 0x15, 0x14, 0x06, 0x23, 0x22, 0x26, 0x35, 0x27, 0x23, // .."&=.#...#"&5'# + 0x22, 0x26, 0x35, 0x11, 0x01, 0x1e, 0x01, 0x15, 0x21, 0x34, 0x36, 0x37, 0x27, 0x26, 0x37, 0x36, // "&5.....!467'&76 + 0x1f, 0x01, 0x36, 0x32, 0x17, 0x37, 0x36, 0x17, 0x16, 0x07, 0x01, 0x11, 0x14, 0x06, 0x23, 0x22, // ..62.76.......#" + 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x32, 0x16, 0x01, 0xdd, 0x20, 0x17, 0x17, 0x20, 0x16, 0x01, // &5.4632... .. .. + 0xbc, 0x20, 0x16, 0x16, 0x20, 0x17, 0xfc, 0xfb, 0x2a, 0x3c, 0x3b, 0x56, 0x3c, 0x3c, 0x04, 0x4f, // . .. ...*<;V<<.O + 0x40, 0x2d, 0x4b, 0x3c, 0x56, 0x3c, 0x8a, 0x3c, 0x2b, 0x2a, 0x3c, 0x01, 0x4a, 0x2e, 0x40, 0x02, // @-K.<.&. + 0x34, 0x27, 0x3e, 0x03, 0x26, 0x34, 0x2e, 0x02, 0x27, 0x2e, 0x01, 0x27, 0x16, 0x17, 0x16, 0x07, // 4'>.&4..'..'.... + 0x06, 0x07, 0x06, 0x2e, 0x01, 0x27, 0x2e, 0x04, 0x27, 0x2e, 0x03, 0x27, 0x26, 0x36, 0x26, 0x27, // .....'..'..'&6&' + 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x36, 0x37, 0x36, 0x16, 0x07, 0x06, 0x16, 0x37, 0x36, 0x34, 0x35, // ..'..676....7645 + 0x2e, 0x03, 0x27, 0x06, 0x17, 0x14, 0x23, 0x2e, 0x01, 0x06, 0x27, 0x36, 0x26, 0x27, 0x26, 0x06, // ..'...#...'6&'&. + 0x07, 0x06, 0x1e, 0x01, 0x37, 0x36, 0x37, 0x36, 0x07, 0x22, 0x26, 0x27, 0x26, 0x36, 0x17, 0x32, // ....7676."&'&6.2 + 0x16, 0x06, 0x07, 0x06, 0x07, 0x0e, 0x01, 0x07, 0x0e, 0x01, 0x17, 0x1e, 0x03, 0x17, 0x16, 0x37, // ...............7 + 0x3e, 0x03, 0x37, 0x36, 0x17, 0x1e, 0x01, 0x06, 0x07, 0x0e, 0x01, 0x07, 0x06, 0x07, 0x06, 0x27, // >.76...........' + 0x26, 0x17, 0x16, 0x17, 0x16, 0x37, 0x3e, 0x05, 0x16, 0x17, 0x14, 0x0e, 0x05, 0x07, 0x0e, 0x02, // &....7>......... + 0x27, 0x26, 0x27, 0x26, 0x07, 0x06, 0x15, 0x14, 0x0e, 0x02, 0x17, 0x0e, 0x01, 0x07, 0x06, 0x16, // '&'&............ + 0x07, 0x06, 0x27, 0x26, 0x27, 0x26, 0x37, 0x36, 0x07, 0x06, 0x07, 0x06, 0x17, 0x1e, 0x01, 0x17, // ..'&'&76........ + 0x1e, 0x01, 0x17, 0x1e, 0x01, 0x06, 0x07, 0x1e, 0x02, 0x15, 0x36, 0x27, 0x2e, 0x02, 0x37, 0x3e, // ..........6'..7> + 0x01, 0x17, 0x16, 0x37, 0x36, 0x37, 0x36, 0x17, 0x16, 0x07, 0x06, 0x07, 0x06, 0x16, 0x17, 0x3e, // ...7676........> + 0x01, 0x37, 0x36, 0x26, 0x36, 0x37, 0x36, 0x33, 0x3e, 0x01, 0x16, 0x01, 0x36, 0x26, 0x27, 0x26, // .76&6763>...6&'& + 0x15, 0x16, 0x17, 0x32, 0x07, 0x06, 0x33, 0x32, 0x05, 0x2e, 0x02, 0x27, 0x2e, 0x04, 0x07, 0x06, // ...2..32...'.... + 0x16, 0x17, 0x16, 0x36, 0x27, 0x34, 0x2e, 0x01, 0x07, 0x22, 0x06, 0x16, 0x17, 0x16, 0x17, 0x14, // ...6'4..."...... + 0x37, 0x36, 0x37, 0x34, 0x2e, 0x01, 0x27, 0x26, 0x23, 0x0e, 0x01, 0x16, 0x07, 0x0e, 0x02, 0x17, // 7674..'&#....... + 0x16, 0x3e, 0x01, 0x37, 0x36, 0x32, 0x36, 0x01, 0x1e, 0x02, 0x0e, 0x05, 0x07, 0x0e, 0x01, 0x07, // .>.7626......... + 0x0e, 0x01, 0x27, 0x2e, 0x03, 0x27, 0x26, 0x23, 0x22, 0x06, 0x07, 0x0e, 0x03, 0x27, 0x2e, 0x01, // ..'..'&#"....'.. + 0x27, 0x2e, 0x04, 0x27, 0x26, 0x36, 0x37, 0x36, 0x2e, 0x01, 0x36, 0x37, 0x3e, 0x01, 0x37, 0x3e, // '..'&676..67>.7> + 0x01, 0x35, 0x16, 0x07, 0x06, 0x27, 0x26, 0x07, 0x06, 0x17, 0x1e, 0x03, 0x07, 0x14, 0x06, 0x17, // .5...'&......... + 0x16, 0x17, 0x1e, 0x01, 0x17, 0x1e, 0x02, 0x37, 0x3e, 0x02, 0x2e, 0x01, 0x27, 0x26, 0x27, 0x26, // .......7>...'&'& + 0x07, 0x06, 0x27, 0x26, 0x37, 0x3e, 0x02, 0x37, 0x3e, 0x03, 0x37, 0x36, 0x37, 0x26, 0x27, 0x26, // ..'&7>.7>.767&'& + 0x36, 0x37, 0x36, 0x33, 0x36, 0x16, 0x17, 0x1e, 0x01, 0x07, 0x06, 0x17, 0x16, 0x17, 0x1e, 0x01, // 67636........... + 0x17, 0x16, 0x0e, 0x01, 0x07, 0x0e, 0x03, 0x27, 0x2e, 0x04, 0x27, 0x26, 0x0e, 0x01, 0x17, 0x16, // .......'..'&.... + 0x07, 0x06, 0x16, 0x36, 0x37, 0x3e, 0x01, 0x37, 0x3e, 0x01, 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x36, // ...67>.7>...'..6 + 0x37, 0x1e, 0x05, 0x02, 0x97, 0x0b, 0x09, 0x04, 0x05, 0x13, 0x05, 0x5c, 0x04, 0x0f, 0x0a, 0x18, // 7............... + 0x08, 0x03, 0xfe, 0x9b, 0x04, 0x04, 0x05, 0x03, 0x03, 0x07, 0x0a, 0x09, 0x04, 0x11, 0x04, 0x01, // ................ + 0x02, 0x02, 0x01, 0x02, 0x03, 0x55, 0x37, 0x04, 0x07, 0x03, 0x03, 0x02, 0x07, 0x01, 0x09, 0x01, // .....U7......... + 0x0a, 0x4a, 0x23, 0x18, 0x21, 0x57, 0x21, 0x0b, 0x27, 0x1f, 0x0f, 0x01, 0x0b, 0x09, 0x15, 0x12, // .J#.!W!.'....... + 0x0d, 0x0d, 0x01, 0x0e, 0x22, 0x19, 0x16, 0x04, 0x04, 0x14, 0x0b, 0x27, 0x0f, 0x3b, 0x06, 0x08, // ...."......'.;.. + 0x06, 0x16, 0x19, 0x25, 0x1c, 0x0a, 0x0b, 0x12, 0x15, 0x0d, 0x05, 0x11, 0x19, 0x16, 0x10, 0x6b, // ...%...........k + 0x12, 0x01, 0x09, 0x29, 0x19, 0x03, 0x01, 0x22, 0x1c, 0x1b, 0x1d, 0x02, 0x01, 0x09, 0x11, 0x07, // ...)..."........ + 0x0a, 0x06, 0x04, 0x0b, 0x07, 0x11, 0x01, 0x01, 0x14, 0x18, 0x11, 0x14, 0x01, 0x01, 0x16, 0x09, // ................ + 0x08, 0x27, 0x01, 0x0d, 0x05, 0x0a, 0x0e, 0x16, 0x0a, 0x1b, 0x16, 0x2f, 0x37, 0x02, 0x2a, 0x1b, // .'........./7.*. + 0x20, 0x05, 0x09, 0x0b, 0x05, 0x03, 0x09, 0x0c, 0x14, 0x49, 0x09, 0x2c, 0x1a, 0x19, 0x36, 0x0a, // ........I.,..6. + 0x01, 0x01, 0x10, 0x19, 0x2a, 0x11, 0x26, 0x22, 0x21, 0x1b, 0x16, 0x0d, 0x02, 0x02, 0x06, 0x06, // ....*.&"!....... + 0x0b, 0x07, 0x0d, 0x03, 0x1c, 0x4f, 0x36, 0x16, 0x15, 0x2a, 0x16, 0x03, 0x01, 0x1e, 0x1d, 0x0d, // .....O6..*...... + 0x12, 0x17, 0x4f, 0x08, 0x02, 0x01, 0x06, 0x08, 0x15, 0x20, 0x04, 0x02, 0x06, 0x04, 0x05, 0x02, // ..O...... ...... + 0x02, 0x24, 0x2e, 0x05, 0x28, 0x04, 0x14, 0xa8, 0x09, 0x10, 0x03, 0x1f, 0x1e, 0x08, 0x2a, 0x0e, // .$..(.........*. + 0x2e, 0x27, 0x04, 0x0d, 0x06, 0x01, 0x03, 0x14, 0x0a, 0x2e, 0x78, 0x85, 0x2c, 0x17, 0x0b, 0x0c, // .'........x.,... + 0x02, 0x01, 0x16, 0x09, 0x06, 0x15, 0x03, 0x17, 0x02, 0x02, 0x11, 0x02, 0x16, 0x0f, 0x24, 0x01, // ..............$. + 0x43, 0x4e, 0xfd, 0xa1, 0x03, 0x0b, 0x06, 0x09, 0x02, 0x03, 0x0a, 0x03, 0x03, 0x0b, 0x03, 0x01, // CN.............. + 0xa3, 0x02, 0x09, 0x11, 0x06, 0x05, 0x09, 0x05, 0x06, 0x02, 0x03, 0x0e, 0x2a, 0x12, 0x09, 0x0b, // ............*... + 0xb4, 0x0a, 0x0c, 0x03, 0x06, 0x04, 0x04, 0x03, 0x0e, 0x04, 0x08, 0x02, 0x36, 0x05, 0x0d, 0x03, // ............6... + 0x0f, 0x09, 0x09, 0x05, 0x03, 0x02, 0x01, 0x0a, 0x02, 0x04, 0x04, 0x08, 0x0e, 0x08, 0x01, 0x10, // ................ + 0x0e, 0x02, 0x37, 0x14, 0x16, 0x02, 0x07, 0x18, 0x17, 0x25, 0x1a, 0x26, 0x08, 0x26, 0x5f, 0x1c, // ..7......%.&.&_. + 0x11, 0x66, 0x26, 0x12, 0x17, 0x0a, 0x22, 0x1e, 0x2c, 0x56, 0x13, 0x4c, 0x14, 0x2c, 0x47, 0x24, // .f&...".,V.L.,G$ + 0x33, 0x1c, 0x1d, 0xa4, 0x40, 0x13, 0x40, 0x24, 0x2b, 0x18, 0x05, 0x0a, 0x22, 0x01, 0x01, 0x0a, // 3...@.@$+..."... + 0x0a, 0x01, 0x0a, 0x0e, 0x56, 0x11, 0x1e, 0x18, 0x15, 0x35, 0x20, 0x33, 0x22, 0x09, 0x0d, 0x12, // ....V....5 3"... + 0x02, 0x0c, 0x05, 0x04, 0x01, 0x22, 0x03, 0x03, 0x22, 0x14, 0x81, 0x23, 0x18, 0x64, 0x41, 0x17, // .....".."..#.dA. + 0x2b, 0x2b, 0x03, 0x12, 0x14, 0x0a, 0x79, 0x30, 0x44, 0x2d, 0x0b, 0x04, 0x03, 0x01, 0x01, 0x12, // ++....y0D-...... + 0x1e, 0x07, 0x08, 0x25, 0x16, 0x26, 0x14, 0x6e, 0x0e, 0x0c, 0x04, 0x02, 0x34, 0x50, 0x27, 0x41, // ...%.&.n....4P'A + 0x35, 0x6a, 0x24, 0x39, 0x45, 0x05, 0x05, 0x23, 0x22, 0x63, 0x37, 0x59, 0x0f, 0x08, 0x06, 0x12, // 5j$9E..#"c7Y.... + 0x0b, 0x0a, 0x1b, 0x1b, 0x36, 0x22, 0x12, 0x1b, 0x12, 0x09, 0x0e, 0x02, 0x16, 0x26, 0x12, 0x10, // ....6".......&.. + 0x14, 0x13, 0x0a, 0x38, 0x5a, 0x28, 0x3b, 0x3d, 0x49, 0x35, 0x30, 0x0b, 0x27, 0x20, 0x21, 0x21, // ...8Z(;=I50.' !! + 0x03, 0x0e, 0x01, 0x0e, 0x0f, 0x1a, 0x10, 0x1b, 0x04, 0x65, 0x01, 0x13, 0x01, 0x06, 0x0c, 0x03, // .........e...... + 0x0e, 0x01, 0x0f, 0x03, 0x0b, 0x0d, 0x06, 0xfe, 0x52, 0x01, 0x08, 0x11, 0x05, 0x05, 0x08, 0x0b, // ........R....... + 0x01, 0x01, 0x10, 0x0a, 0x03, 0x08, 0x04, 0x05, 0x03, 0x03, 0x02, 0xfe, 0x9a, 0x12, 0x18, 0x0f, // ................ + 0x19, 0x1b, 0x10, 0x1d, 0x0a, 0x22, 0x07, 0x2b, 0x05, 0x30, 0x6e, 0x14, 0x14, 0x3f, 0xa2, 0x74, // .....".+.0n..?.t + 0x28, 0x02, 0x04, 0x2d, 0x7a, 0x2e, 0x27, 0x3c, 0x1f, 0x12, 0x0c, 0x01, 0x3e, 0x52, 0x1e, 0x24, // (..-z.'<....>R.$ + 0x16, 0x15, 0x41, 0x22, 0x08, 0x03, 0x1e, 0x01, 0x01, 0x32, 0x34, 0x01, 0x03, 0x42, 0x19, 0x13, // ..A".....24..B.. + 0x0f, 0x07, 0x04, 0x40, 0x05, 0x1e, 0x28, 0x15, 0x09, 0x03, 0x08, 0x7e, 0x0f, 0x09, 0x03, 0x04, // ...@..(....~.... + 0x07, 0x39, 0x42, 0x01, 0x01, 0x39, 0x1f, 0x0f, 0x2c, 0x1f, 0x02, 0x03, 0x0b, 0x09, 0x01, 0x1d, // .9B..9..,....... + 0x13, 0x16, 0x1e, 0x01, 0x2a, 0x24, 0x04, 0x0f, 0x0e, 0x0c, 0x17, 0x01, 0x0e, 0x1a, 0x05, 0x08, // ....*$.......... + 0x17, 0x0f, 0x0b, 0x01, 0x02, 0x11, 0x01, 0x0c, 0x09, 0x11, 0x09, 0x0e, 0x06, 0x03, 0x0b, 0x0d, // ................ + 0x03, 0x06, 0x1f, 0x04, 0x13, 0x04, 0x05, 0x07, 0x02, 0x04, 0x04, 0x0f, 0x17, 0x01, 0x01, 0x0c, // ................ + 0x10, 0x13, 0x0f, 0x09, 0x04, 0x09, 0x02, 0x05, 0x05, 0x04, 0x06, 0x03, 0x07, 0x01, 0x0e, 0x3c, // ...............< + 0x1a, 0x0c, 0x0b, 0x3e, 0x1f, 0x09, 0x03, 0x07, 0x19, 0x3f, 0x30, 0x44, 0x1d, 0x06, 0xa8, 0x39, // ...>.....?0D...9 + 0x12, 0x66, 0x08, 0x18, 0x15, 0x1f, 0x3f, 0x1c, 0x1c, 0x13, 0x01, 0x01, 0x04, 0x41, 0x65, 0x0c, // .f....?......Ae. + 0x20, 0x04, 0x17, 0x87, 0x09, 0x0f, 0x2e, 0x28, 0x03, 0x0f, 0x3b, 0x31, 0x2e, 0x18, 0x44, 0x08, // ......(..;1..D. + 0x10, 0x08, 0x02, 0x05, 0x09, 0x07, 0x34, 0x10, 0x0f, 0x48, 0x26, 0x08, 0x06, 0x2e, 0x19, 0x43, // ......4..H&....C + 0x17, 0x1d, 0x01, 0x13, 0x74, 0x20, 0x15, 0x69, 0x59, 0x1a, 0x12, 0x25, 0x20, 0x0b, 0x03, 0x2a, // ....t .iY..% ..* + 0x11, 0x1a, 0x02, 0x02, 0x09, 0x05, 0x01, 0x0f, 0x14, 0xc2, 0x08, 0x07, 0x03, 0x04, 0x03, 0x0a, // ................ + 0x06, 0x07, 0x01, 0x02, 0x10, 0x37, 0x04, 0x01, 0x12, 0xe0, 0x0b, 0x11, 0x08, 0x01, 0x04, 0x04, // .....7.......... + 0x01, 0x04, 0x1b, 0x03, 0x05, 0x02, 0xea, 0x02, 0x06, 0x08, 0x02, 0x0f, 0x01, 0x0d, 0x0d, 0x06, // ................ + 0x04, 0x0d, 0x05, 0x06, 0x03, 0x06, 0x0c, 0x03, 0x01, 0x04, 0xfa, 0xc8, 0x0c, 0x19, 0x17, 0x16, // ................ + 0x16, 0x11, 0x14, 0x0d, 0x12, 0x04, 0x13, 0x4a, 0x1b, 0x10, 0x07, 0x12, 0x09, 0x1d, 0x16, 0x11, // .......J........ + 0x01, 0x01, 0x03, 0x01, 0x01, 0x1c, 0x20, 0x19, 0x01, 0x01, 0x3c, 0x0d, 0x04, 0x0b, 0x07, 0x0c, // ...... ...<..... + 0x11, 0x0b, 0x17, 0x57, 0x0b, 0x10, 0x30, 0x25, 0x24, 0x09, 0x0c, 0x04, 0x0a, 0x12, 0x22, 0x22, // ...W..0%$....."" + 0x49, 0x21, 0x14, 0x05, 0x03, 0x0d, 0x0f, 0x2a, 0x06, 0x18, 0x0c, 0x16, 0x0b, 0x0f, 0x44, 0x0e, // I!.....*......D. + 0x11, 0x09, 0x06, 0x19, 0x08, 0x06, 0x20, 0x0e, 0x03, 0x06, 0x2c, 0x34, 0x41, 0x27, 0x11, 0xbe, // ...... ...,4A'.. + 0x34, 0x4a, 0x22, 0x09, 0x18, 0x10, 0x16, 0x1d, 0x2e, 0x30, 0x12, 0x15, 0x66, 0x36, 0x44, 0x14, // 4J"......0..f6D. + 0x8f, 0x34, 0x70, 0xc6, 0x5a, 0x7b, 0x2b, 0x15, 0x01, 0x1d, 0x1b, 0x2a, 0x9f, 0x44, 0x5f, 0x77, // .4p.Z{+....*.D_w + 0x71, 0x69, 0x3b, 0xd0, 0x57, 0x31, 0x47, 0x28, 0x02, 0x02, 0x22, 0x25, 0x1e, 0x01, 0x01, 0x08, // qi;.W1G(.."%.... + 0x13, 0x0c, 0x1d, 0x05, 0x25, 0x0e, 0x54, 0x37, 0x46, 0x7d, 0x41, 0x47, 0x05, 0x21, 0x31, 0x23, // ....%.T7F}AG.!1# + 0x19, 0x12, 0x25, 0x20, 0x19, 0x0b, 0x0b, 0x4a, 0x47, 0x0c, 0x1f, 0x33, 0x1e, 0x1b, 0x0b, 0x0f, // ..% ...JG..3.... + 0x00, 0x08, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x0e, 0x00, 0x20, 0x00, 0x27, // ............. .' + 0x00, 0x2e, 0x00, 0x32, 0x00, 0x3e, 0x00, 0x56, 0x00, 0x62, 0x00, 0x00, 0x25, 0x26, 0x03, 0x23, // ...2.>.V.b..%&.# + 0x07, 0x0e, 0x04, 0x07, 0x27, 0x16, 0x33, 0x32, 0x03, 0x26, 0x27, 0x04, 0x21, 0x06, 0x15, 0x14, // ....'.32.&'.!... + 0x16, 0x17, 0x3e, 0x03, 0x3f, 0x01, 0x3e, 0x01, 0x27, 0x26, 0x27, 0x0e, 0x01, 0x07, 0x20, 0x05, // ..>.?.>.'&'... . + 0x26, 0x07, 0x16, 0x17, 0x3e, 0x01, 0x01, 0x22, 0x07, 0x36, 0x05, 0x26, 0x23, 0x22, 0x07, 0x16, // &...>..".6.&#".. + 0x17, 0x3e, 0x04, 0x13, 0x26, 0x27, 0x07, 0x0e, 0x04, 0x07, 0x16, 0x17, 0x1e, 0x01, 0x17, 0x3e, // .>..&'.........> + 0x01, 0x32, 0x1e, 0x04, 0x17, 0x36, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, // .2...6... $...$ + 0x04, 0x04, 0x00, 0x2a, 0x62, 0x02, 0x02, 0x10, 0x36, 0x94, 0x7e, 0x88, 0x23, 0x0f, 0xb8, 0xea, // ...*b...6.~.#... + 0x84, 0x3d, 0x15, 0x20, 0xfe, 0xc9, 0xfe, 0x96, 0x01, 0x58, 0x50, 0x32, 0x93, 0x8a, 0x7b, 0x26, // .=. .....XP2..{& + 0x25, 0x04, 0x12, 0x67, 0x78, 0x7c, 0x8a, 0xc0, 0x20, 0x01, 0x2e, 0x03, 0xdc, 0xd2, 0xc7, 0x57, // %..gx|.. ......W + 0x29, 0x6f, 0x94, 0xfc, 0xf1, 0x01, 0x01, 0x01, 0x02, 0x4f, 0xb9, 0xf8, 0x4c, 0x4f, 0x83, 0x73, // )o.......O..LO.s + 0x45, 0x7a, 0x47, 0x3c, 0x0f, 0xe4, 0x03, 0x92, 0x01, 0x09, 0x14, 0x43, 0x4b, 0x7d, 0x45, 0x19, // EzG<.......CK}E. + 0x13, 0x02, 0x09, 0x03, 0x24, 0x4d, 0x46, 0x44, 0x3c, 0x35, 0x2b, 0x1e, 0x0a, 0x7a, 0xce, 0xfe, // ....$MFD<5+..z.. + 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x24, 0xf1, 0x01, // ..^.....a...a$.. + 0x01, 0x01, 0x06, 0x15, 0x4d, 0x57, 0x8e, 0x4d, 0x0b, 0x96, 0x02, 0x93, 0x31, 0x3e, 0x5d, 0x07, // ....MW.M....1>]. + 0x0e, 0x7c, 0xe1, 0x59, 0x59, 0x9b, 0x5e, 0x44, 0x0e, 0x0d, 0x01, 0x05, 0xd6, 0xd5, 0xa5, 0x41, // .|.YY.^D.......A + 0xf2, 0x97, 0xef, 0x3c, 0x1f, 0xef, 0xe6, 0x4b, 0xe5, 0x03, 0x6d, 0x01, 0x01, 0x91, 0xa4, 0x13, // ...<...K..m..... + 0xaa, 0xd4, 0x1a, 0x45, 0x36, 0x3c, 0x15, 0xfe, 0x22, 0xe8, 0xb2, 0x01, 0x0c, 0x19, 0x40, 0x39, // ...E6<..".....@9 + 0x49, 0x1c, 0x35, 0x2a, 0x05, 0x18, 0x05, 0x05, 0x04, 0x03, 0x05, 0x06, 0x07, 0x05, 0x02, 0xc8, // I.5*............ + 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x00, // .^.....a...a.... + 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x3e, 0x00, 0x5e, 0x00, 0x00, // ...........>.^.. + 0x01, 0x34, 0x2e, 0x03, 0x2f, 0x01, 0x2e, 0x04, 0x35, 0x34, 0x33, 0x32, 0x1e, 0x03, 0x33, 0x32, // .4../...5432..32 + 0x36, 0x35, 0x34, 0x2e, 0x01, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x14, 0x1e, 0x02, 0x1f, 0x01, 0x16, // 654..#"......... + 0x17, 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x2e, 0x03, 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, 0x33, // .....#"..#"....3 + 0x32, 0x3e, 0x02, 0x05, 0x14, 0x06, 0x23, 0x22, 0x27, 0x06, 0x23, 0x22, 0x24, 0x26, 0x02, 0x35, // 2>....#"'.#"$&.5 + 0x34, 0x37, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x36, 0x33, 0x32, 0x04, 0x16, 0x12, 0x15, // 47&54632.632.... + 0x14, 0x07, 0x16, 0x04, 0x95, 0x27, 0x3a, 0x58, 0x4d, 0x31, 0x68, 0x1e, 0x1c, 0x2a, 0x12, 0x0f, // .....':XM1h..*.. + 0x90, 0x2b, 0x44, 0x28, 0x24, 0x2c, 0x1a, 0x2f, 0x39, 0x70, 0xac, 0x60, 0x44, 0x80, 0x6f, 0x43, // .+D($,./9p.`D.oC + 0x26, 0x4a, 0x56, 0x3c, 0x92, 0x5a, 0x16, 0x20, 0x50, 0x41, 0x33, 0x51, 0x31, 0x2a, 0x32, 0x1d, // &JV<.Z. PA3Q1*2. + 0x32, 0x33, 0xf4, 0xa9, 0x49, 0x86, 0x6f, 0x42, 0x01, 0x6b, 0xe1, 0x9f, 0x82, 0x68, 0x4d, 0x49, // 23..I.oB.k...hMI + 0x8f, 0xfe, 0xfb, 0xbd, 0x6f, 0x10, 0x50, 0xe1, 0x9f, 0x82, 0x68, 0x4d, 0x49, 0x8f, 0x01, 0x05, // ....o.P...hMI... + 0xbd, 0x6f, 0x10, 0x50, 0x01, 0xd9, 0x32, 0x53, 0x36, 0x2c, 0x18, 0x0b, 0x18, 0x07, 0x07, 0x10, // .o.P..2S6,...... + 0x10, 0x1a, 0x11, 0x4d, 0x18, 0x21, 0x22, 0x18, 0x40, 0x2d, 0x37, 0x59, 0x2e, 0x1f, 0x3f, 0x6f, // ...M.!".@-7Y..?o + 0x49, 0x3d, 0x5b, 0x3c, 0x25, 0x0e, 0x24, 0x16, 0x0e, 0x14, 0x28, 0x27, 0x33, 0x20, 0x2d, 0x2d, // I=[<%.$...('3 -- + 0x20, 0x3c, 0x2d, 0x5c, 0x83, 0x25, 0x46, 0x75, 0x90, 0x9f, 0xe1, 0x50, 0x10, 0x6f, 0xbd, 0x01, // <-..%Fu...P.o.. + 0x05, 0x8f, 0x49, 0x4d, 0x68, 0x82, 0x9f, 0xe1, 0x50, 0x10, 0x6f, 0xbd, 0xfe, 0xfb, 0x8f, 0x49, // ..IMh...P.o....I + 0x4d, 0x68, 0x00, 0x00, 0x00, 0x03, 0x00, 0x2c, 0xff, 0x80, 0x04, 0xcb, 0x06, 0x00, 0x00, 0x23, // Mh.....,.......# + 0x00, 0x3f, 0x00, 0x44, 0x00, 0x00, 0x01, 0x37, 0x36, 0x26, 0x23, 0x21, 0x22, 0x06, 0x15, 0x11, // .?.D...76&#!"... + 0x14, 0x37, 0x01, 0x3e, 0x01, 0x3b, 0x01, 0x32, 0x36, 0x37, 0x36, 0x37, 0x36, 0x26, 0x23, 0x21, // .7.>.;.267676&#! + 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x36, 0x37, 0x06, 0x0a, 0x01, 0x07, 0x0e, // "&=.463!267..... + 0x04, 0x23, 0x21, 0x22, 0x07, 0x06, 0x01, 0x0e, 0x01, 0x27, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, // .#!".....'&5.463 + 0x21, 0x32, 0x16, 0x07, 0x03, 0x36, 0x1a, 0x01, 0x03, 0xe8, 0x25, 0x05, 0x1c, 0x15, 0xfd, 0x38, // !2...6....%....8 + 0x17, 0x1f, 0x06, 0x01, 0x23, 0x17, 0x1e, 0x21, 0xef, 0x16, 0x1e, 0x03, 0x18, 0x0d, 0x04, 0x1f, // ....#..!........ + 0x15, 0xfe, 0xda, 0x1d, 0x26, 0x26, 0x1d, 0x01, 0x5a, 0x12, 0x22, 0xe6, 0x0f, 0x4d, 0x3e, 0x04, // ....&&..Z."..M>. + 0x06, 0x06, 0x16, 0x1b, 0x32, 0x21, 0xfe, 0xf1, 0x0d, 0x09, 0x08, 0xfe, 0x5e, 0x16, 0x49, 0x0c, // ....2!......^.I. + 0x37, 0x4c, 0x52, 0x03, 0x78, 0x5f, 0x40, 0x16, 0x9e, 0x04, 0x3e, 0x4d, 0x04, 0x4e, 0xc2, 0x17, // 7LR.x_@...>M.N.. + 0x22, 0x22, 0x14, 0xfb, 0xb3, 0x07, 0x06, 0x01, 0x60, 0x1a, 0x0f, 0x1d, 0x0f, 0x82, 0x3d, 0x15, // ""......`.....=. + 0x26, 0x26, 0x1d, 0x2a, 0x1d, 0x25, 0x1b, 0xee, 0x49, 0xfe, 0x7d, 0xfe, 0xc7, 0x11, 0x16, 0x15, // &&.*.%..I.}..... + 0x2c, 0x16, 0x14, 0x0a, 0x09, 0xfe, 0x1b, 0x19, 0x07, 0x09, 0x16, 0x4c, 0x05, 0x82, 0x37, 0x5f, // ,..........L..7_ + 0x6a, 0x6a, 0xfc, 0xea, 0x11, 0x01, 0x39, 0x01, 0x83, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // jj....9......... + 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x00, 0x25, 0x11, // .........../..%. + 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x01, 0x11, // 4&#!".....3!26.. + 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x13, 0x11, // 4&#!".....3!26.. + 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x02, 0xc0, // ..#!"&5.463!2... + 0x12, 0x0e, 0xfe, 0x20, 0x0e, 0x12, 0x12, 0x0e, 0x01, 0xe0, 0x0e, 0x12, 0x02, 0xa0, 0x12, 0x0e, // ... ............ + 0xfe, 0x20, 0x0e, 0x12, 0x12, 0x0e, 0x01, 0xe0, 0x0e, 0x12, 0xa0, 0x26, 0x1a, 0xfa, 0x80, 0x1a, // . .........&.... + 0x26, 0x26, 0x1a, 0x05, 0x80, 0x1a, 0x26, 0xc0, 0x04, 0x00, 0x0e, 0x12, 0x12, 0x0e, 0xfc, 0x00, // &&....&......... + 0x0e, 0x12, 0x12, 0x01, 0x8e, 0x02, 0x80, 0x0e, 0x12, 0x12, 0x0e, 0xfd, 0x80, 0x0e, 0x12, 0x12, // ................ + 0x03, 0x0e, 0xfa, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x05, 0x80, 0x1a, 0x26, 0x26, 0x00, 0x00, 0x00, // .....&&....&&... + 0x00, 0x02, 0x00, 0x00, 0xff, 0x00, 0x05, 0x00, 0x05, 0xe0, 0x00, 0x31, 0x00, 0x39, 0x00, 0x00, // ...........1.9.. + 0x01, 0x14, 0x06, 0x23, 0x22, 0x27, 0x03, 0x23, 0x15, 0x13, 0x16, 0x15, 0x14, 0x06, 0x2b, 0x01, // ...#"'.#......+. + 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, 0x23, 0x22, 0x26, 0x35, 0x34, 0x37, 0x13, // ...+."&5.#"&547. + 0x35, 0x23, 0x03, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x37, 0x01, 0x36, 0x33, 0x21, 0x32, 0x17, // 5#..#"&547.63!2. + 0x01, 0x16, 0x00, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x05, 0x00, 0x38, 0x28, 0x33, 0x1d, // ....."&462..8(3. + 0xe3, 0x2d, 0xf7, 0x09, 0x26, 0x1a, 0xc0, 0x42, 0x2e, 0xa0, 0x2e, 0x42, 0xc0, 0x1a, 0x26, 0x09, // .-..&..B...B..&. + 0xf7, 0x2d, 0xe3, 0x1d, 0x33, 0x28, 0x38, 0x10, 0x01, 0x00, 0x49, 0x67, 0x01, 0x80, 0x67, 0x49, // .-..3(8...Ig..gI + 0x01, 0x00, 0x10, 0xfe, 0x60, 0x83, 0xba, 0x83, 0x83, 0xba, 0x01, 0xe0, 0x28, 0x38, 0x2b, 0x01, // ....`.......(8+. + 0x55, 0x84, 0xfe, 0x65, 0x0f, 0x12, 0x1a, 0x26, 0xfe, 0xf0, 0x2e, 0x42, 0x42, 0x2e, 0x01, 0x10, // U..e...&...BB... + 0x26, 0x1a, 0x12, 0x0f, 0x01, 0x9b, 0x84, 0xfe, 0xab, 0x2b, 0x38, 0x28, 0x1d, 0x18, 0x01, 0x80, // &........+8(.... + 0x6b, 0x6b, 0xfe, 0x80, 0x18, 0x03, 0x60, 0xba, 0x83, 0x83, 0xba, 0x83, 0x00, 0x02, 0x00, 0x00, // kk....`......... + 0xff, 0x00, 0x04, 0x00, 0x05, 0xe0, 0x00, 0x25, 0x00, 0x2d, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, // .......%.-...... 0x22, 0x26, 0x35, 0x11, 0x23, 0x11, 0x14, 0x06, 0x22, 0x26, 0x35, 0x11, 0x23, 0x11, 0x14, 0x06, // "&5.#..."&5.#... - 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x00, 0x14, 0x06, 0x22, 0x26, 0x34, // "&5.463!2...."&4 - 0x36, 0x32, 0x04, 0x00, 0x38, 0x50, 0x38, 0x40, 0x42, 0x5c, 0x42, 0x40, 0x42, 0x5c, 0x42, 0x40, // 62..8P8@B.B@B.B@ - 0x38, 0x50, 0x38, 0x70, 0x50, 0x02, 0x80, 0x50, 0x70, 0xfe, 0xe0, 0x83, 0xba, 0x83, 0x83, 0xba, // 8P8pP..Pp....... - 0x03, 0x40, 0xfe, 0x60, 0x28, 0x38, 0x38, 0x28, 0x01, 0x60, 0xfc, 0x70, 0x2e, 0x42, 0x42, 0x2e, // .@.`(88(.`.p.BB. - 0x01, 0xd0, 0xfe, 0x30, 0x2e, 0x42, 0x42, 0x2e, 0x03, 0x90, 0xfe, 0xa0, 0x28, 0x38, 0x38, 0x28, // ...0.BB.....(88( - 0x01, 0xa0, 0x50, 0x70, 0x70, 0x01, 0xcd, 0xba, 0x83, 0x83, 0xba, 0x83, 0x00, 0x02, 0x00, 0x00, // ..Ppp........... - 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x15, 0x00, 0x21, 0x00, 0x00, 0x25, 0x01, 0x3e, 0x01, // .........!..%.>. - 0x26, 0x27, 0x26, 0x0e, 0x01, 0x07, 0x06, 0x23, 0x22, 0x27, 0x2e, 0x02, 0x07, 0x0e, 0x01, 0x16, // &'&....#"'...... - 0x17, 0x24, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, 0x03, 0x05, 0x01, // .$... $...$ .... - 0x5e, 0x10, 0x11, 0x1d, 0x2f, 0x28, 0x56, 0x3d, 0x18, 0x24, 0x3c, 0x3b, 0x24, 0x18, 0x3d, 0x56, // ^.../(V=.$<;$.=V - 0x29, 0x2e, 0x1d, 0x11, 0x10, 0x04, 0x58, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, // ).....X....^.... - 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xea, 0x01, 0xd9, 0x16, 0x4a, 0x60, 0x1f, 0x1a, 0x01, 0x22, // .a...a....J`..." - 0x1c, 0x28, 0x28, 0x1c, 0x22, 0x01, 0x1a, 0x1f, 0x60, 0x4a, 0x16, 0x8e, 0xfe, 0x5e, 0xfe, 0x9f, // .((."...`J...^.. - 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x00, 0x00, 0x02, 0x00, 0x2c, // ...a...a......., - 0xff, 0x00, 0x06, 0xd4, 0x05, 0xff, 0x00, 0x0f, 0x00, 0x49, 0x00, 0x00, 0x00, 0x34, 0x2e, 0x02, // .........I...4.. - 0x22, 0x0e, 0x02, 0x14, 0x1e, 0x02, 0x32, 0x3e, 0x01, 0x25, 0x06, 0x07, 0x05, 0x11, 0x14, 0x07, // ".....2>.%...... - 0x06, 0x27, 0x25, 0x07, 0x06, 0x22, 0x2f, 0x01, 0x05, 0x06, 0x27, 0x26, 0x35, 0x11, 0x25, 0x26, // .'%.."/...'&5.%& - 0x27, 0x26, 0x3f, 0x01, 0x27, 0x26, 0x37, 0x36, 0x37, 0x25, 0x11, 0x34, 0x37, 0x36, 0x17, 0x05, // '&?.'&767%.476.. - 0x37, 0x36, 0x32, 0x1f, 0x01, 0x25, 0x36, 0x17, 0x16, 0x15, 0x11, 0x05, 0x16, 0x17, 0x16, 0x0f, // 762..%6......... - 0x01, 0x17, 0x16, 0x05, 0xc0, 0x5b, 0x9b, 0xd5, 0xea, 0xd5, 0x9b, 0x5b, 0x5b, 0x9b, 0xd5, 0xea, // .....[.....[[... - 0xd5, 0x9b, 0x01, 0x6f, 0x04, 0x10, 0xfe, 0xdc, 0x0d, 0x0f, 0x0e, 0xfe, 0xdc, 0xb4, 0x0a, 0x20, // ...o........... - 0x0a, 0xb4, 0xfe, 0xdc, 0x0e, 0x0f, 0x0d, 0xfe, 0xdc, 0x10, 0x04, 0x05, 0x09, 0xb4, 0xb4, 0x09, // ................ - 0x05, 0x04, 0x10, 0x01, 0x24, 0x0d, 0x0f, 0x0e, 0x01, 0x24, 0xb4, 0x09, 0x22, 0x09, 0xb4, 0x01, // ....$....$.."... - 0x24, 0x0e, 0x0f, 0x0d, 0x01, 0x24, 0x10, 0x04, 0x05, 0x09, 0xb4, 0xb4, 0x09, 0x02, 0x0b, 0xea, // $....$.......... - 0xd5, 0x9b, 0x5b, 0x5b, 0x9b, 0xd5, 0xea, 0xd5, 0x9b, 0x5b, 0x5b, 0x9b, 0x35, 0x0f, 0x05, 0x60, // ..[[.....[[.5..` - 0xfe, 0xce, 0x10, 0x0a, 0x0a, 0x06, 0x5e, 0xf8, 0x0d, 0x0d, 0xf8, 0x5e, 0x06, 0x0a, 0x0a, 0x10, // ......^....^.... - 0x01, 0x32, 0x60, 0x05, 0x0f, 0x11, 0x0c, 0xf8, 0xf8, 0x0d, 0x10, 0x0f, 0x05, 0x60, 0x01, 0x32, // .2`..........`.2 - 0x10, 0x0a, 0x0a, 0x06, 0x5e, 0xf8, 0x0c, 0x0c, 0xf8, 0x5e, 0x06, 0x0a, 0x0a, 0x10, 0xfe, 0xce, // ....^....^...... - 0x60, 0x05, 0x0f, 0x10, 0x0d, 0xf8, 0xf8, 0x0c, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x05, 0xbe, // `............... - 0x05, 0x7f, 0x00, 0x12, 0x00, 0x31, 0x00, 0x00, 0x25, 0x06, 0x23, 0x22, 0x24, 0x02, 0x35, 0x34, // .....1..%.#"$.54 - 0x37, 0x06, 0x02, 0x15, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x24, 0x25, 0x06, 0x04, 0x23, 0x22, 0x24, // 7......32$%..#"$ - 0x26, 0x02, 0x35, 0x34, 0x12, 0x36, 0x24, 0x37, 0x36, 0x17, 0x16, 0x07, 0x0e, 0x01, 0x15, 0x14, // &.54.6$76....... - 0x1e, 0x01, 0x33, 0x32, 0x37, 0x36, 0x17, 0x1e, 0x01, 0x04, 0xee, 0x36, 0x38, 0xb6, 0xfe, 0xca, // ..3276.....68... - 0xb4, 0x68, 0xc9, 0xff, 0x66, 0xab, 0xed, 0x82, 0x90, 0x01, 0x03, 0x01, 0x26, 0x5e, 0xfe, 0x85, // .h..f.......&^.. - 0xe0, 0x9c, 0xfe, 0xe4, 0xce, 0x7a, 0x73, 0xc5, 0x01, 0x12, 0x99, 0x2c, 0x11, 0x12, 0x21, 0x56, // .....zs....,..!V - 0x5b, 0x92, 0xfa, 0x94, 0x76, 0x6e, 0x29, 0x1f, 0x0e, 0x07, 0xe9, 0x09, 0xb4, 0x01, 0x36, 0xb6, // [...vn).......6. - 0xc0, 0xa5, 0x3c, 0xfe, 0xae, 0xd7, 0x82, 0xed, 0xab, 0x66, 0x7b, 0xc3, 0xcb, 0xf3, 0x7a, 0xce, // ..<......f{...z. - 0x01, 0x1c, 0x9c, 0x99, 0x01, 0x17, 0xcc, 0x7d, 0x06, 0x02, 0x29, 0x29, 0x1f, 0x4e, 0xcf, 0x73, // .......}..)).N.s - 0x94, 0xfa, 0x92, 0x33, 0x12, 0x1f, 0x0e, 0x28, 0x00, 0x03, 0x00, 0x40, 0xff, 0x80, 0x06, 0xc0, // ...3...(...@.... - 0x05, 0x80, 0x00, 0x0b, 0x00, 0x1b, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x34, 0x26, 0x23, 0x21, 0x22, // .......+...4&#!" - 0x06, 0x14, 0x16, 0x33, 0x21, 0x32, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, // ...3!2....#!"&5. - 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x13, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, // 463!2.....#!"&5. - 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x04, 0x40, 0x26, 0x1a, 0xff, 0x00, 0x1a, 0x26, 0x26, 0x1a, // 463!2..@&....&&. - 0x01, 0x00, 0x1a, 0x02, 0x66, 0x26, 0x1a, 0xfa, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x05, 0x80, 0x1a, // ....f&....&&.... - 0x26, 0x40, 0x26, 0x1a, 0xfa, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x06, 0x00, 0x1a, 0x26, 0x02, 0xa6, // &@&....&&....&.. - 0x34, 0x26, 0x26, 0x34, 0x26, 0x01, 0x00, 0xfc, 0x40, 0x1a, 0x26, 0x26, 0x1a, 0x03, 0xc0, 0x1a, // 4&&4&...@.&&.... - 0x26, 0x26, 0x01, 0xa6, 0xff, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0x00, 0x1a, 0x26, 0x26, 0x00, // &&.....&&....&&. - 0x00, 0x02, 0x00, 0x20, 0xff, 0xa0, 0x06, 0x60, 0x05, 0xc0, 0x00, 0x42, 0x00, 0x48, 0x00, 0x00, // ... ...`...B.H.. - 0x00, 0x14, 0x06, 0x2b, 0x01, 0x14, 0x07, 0x17, 0x16, 0x14, 0x07, 0x06, 0x22, 0x2f, 0x01, 0x0e, // ...+........"/.. - 0x04, 0x23, 0x11, 0x23, 0x11, 0x22, 0x2e, 0x02, 0x2f, 0x01, 0x07, 0x06, 0x23, 0x22, 0x27, 0x2e, // .#.#."../...#"'. - 0x01, 0x3f, 0x01, 0x26, 0x35, 0x23, 0x22, 0x26, 0x34, 0x36, 0x3b, 0x01, 0x11, 0x27, 0x26, 0x34, // .?.&5#"&46;..'&4 - 0x36, 0x32, 0x1f, 0x01, 0x21, 0x37, 0x36, 0x32, 0x16, 0x14, 0x0f, 0x01, 0x11, 0x33, 0x32, 0x01, // 62..!762.....32. - 0x21, 0x34, 0x36, 0x20, 0x16, 0x06, 0x60, 0x26, 0x1a, 0xe0, 0x43, 0xd0, 0x13, 0x13, 0x12, 0x36, // !46 ..`&..C....6 - 0x12, 0xc6, 0x05, 0x14, 0x40, 0x42, 0x62, 0x30, 0x80, 0x33, 0x65, 0x49, 0x3b, 0x0e, 0x0f, 0xb7, // ....@Bb0.3eI;... - 0x14, 0x1c, 0x18, 0x13, 0x13, 0x03, 0x11, 0xca, 0x3a, 0xe0, 0x1a, 0x26, 0x26, 0x1a, 0xe0, 0xad, // ........:..&&... - 0x13, 0x26, 0x34, 0x13, 0xad, 0x03, 0x4c, 0xad, 0x13, 0x34, 0x26, 0x13, 0xad, 0xe0, 0x1a, 0xfe, // .&4...L..4&..... - 0x46, 0xfd, 0x80, 0xbb, 0x01, 0x0a, 0xbb, 0x02, 0x5a, 0x34, 0x26, 0xab, 0x77, 0xd1, 0x13, 0x34, // F.......Z4&.w..4 - 0x13, 0x13, 0x13, 0xc5, 0x05, 0x10, 0x29, 0x20, 0x1a, 0x03, 0x80, 0xfc, 0x80, 0x1b, 0x27, 0x27, // ......) ......'' - 0x0d, 0x0e, 0xcf, 0x15, 0x10, 0x12, 0x35, 0x14, 0xe3, 0x72, 0xa0, 0x26, 0x34, 0x26, 0x01, 0x26, // ......5..r.&4&.& - 0xad, 0x13, 0x34, 0x26, 0x13, 0xad, 0xad, 0x13, 0x26, 0x34, 0x13, 0xad, 0xfe, 0xda, 0x02, 0x00, // ..4&....&4...... - 0x85, 0xbb, 0xbb, 0x00, 0x00, 0x01, 0xff, 0xff, 0x00, 0x01, 0x07, 0x7d, 0x04, 0x47, 0x00, 0x86, // ...........}.G.. - 0x00, 0x00, 0x01, 0x16, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x17, 0x16, 0x17, 0x33, 0x1f, 0x02, // .............3.. - 0x16, 0x17, 0x1e, 0x02, 0x0e, 0x01, 0x23, 0x05, 0x06, 0x26, 0x2f, 0x01, 0x2e, 0x03, 0x07, 0x0e, // ......#..&/..... - 0x04, 0x17, 0x14, 0x06, 0x0f, 0x01, 0x06, 0x07, 0x23, 0x06, 0x2e, 0x02, 0x2f, 0x01, 0x2e, 0x03, // ........#.../... - 0x02, 0x27, 0x26, 0x34, 0x3f, 0x01, 0x36, 0x33, 0x25, 0x1e, 0x01, 0x1f, 0x01, 0x16, 0x17, 0x1e, // .'&4?.63%....... - 0x01, 0x1f, 0x01, 0x1e, 0x03, 0x32, 0x37, 0x3e, 0x04, 0x27, 0x2e, 0x01, 0x2f, 0x01, 0x26, 0x27, // .....27>.'../.&' - 0x26, 0x37, 0x36, 0x37, 0x36, 0x17, 0x16, 0x17, 0x1e, 0x03, 0x14, 0x0e, 0x01, 0x15, 0x14, 0x06, // &7676........... - 0x1e, 0x02, 0x17, 0x1e, 0x01, 0x3e, 0x02, 0x37, 0x36, 0x37, 0x3e, 0x01, 0x3f, 0x01, 0x3e, 0x02, // .....>.767>.?.>. - 0x17, 0x25, 0x36, 0x16, 0x17, 0x07, 0x7d, 0x17, 0xad, 0x18, 0x29, 0x4e, 0x0c, 0x11, 0x1f, 0x11, // .%6...}...)N.... - 0x40, 0x01, 0x01, 0x01, 0x02, 0x8d, 0x32, 0x03, 0x07, 0x07, 0x08, 0x2a, 0x26, 0xff, 0x00, 0x18, // @.....2....*&... - 0x40, 0x14, 0x14, 0x1e, 0x50, 0x39, 0x41, 0x18, 0x03, 0x0a, 0x18, 0x13, 0x0f, 0x01, 0x07, 0x04, // @...P9A......... - 0x04, 0x12, 0x23, 0x73, 0x47, 0x96, 0x71, 0x5d, 0x18, 0x19, 0x0a, 0x23, 0x6c, 0x68, 0x8d, 0x3c, // ..#sG.q]...#lh.< - 0x06, 0x03, 0x04, 0x0f, 0x2a, 0x01, 0x12, 0x0c, 0x16, 0x05, 0x05, 0x10, 0x08, 0x14, 0x34, 0x0f, // ....*.........4. - 0x10, 0x1d, 0x36, 0x2b, 0x28, 0x1c, 0x0d, 0x02, 0x06, 0x12, 0x09, 0x0a, 0x05, 0x02, 0x0e, 0x07, // ..6+(........... - 0x06, 0x19, 0x3c, 0x0d, 0x12, 0x11, 0x15, 0x35, 0xba, 0x52, 0x35, 0x14, 0x1b, 0x0e, 0x07, 0x02, // ..<....5.R5..... - 0x03, 0x02, 0x01, 0x06, 0x11, 0x0e, 0x08, 0x12, 0x22, 0x2a, 0x3e, 0x25, 0x3c, 0x2f, 0x04, 0x0c, // ........"*>%"/.....+[ - 0x3e, 0x68, 0x79, 0x0a, 0x0f, 0x03, 0x03, 0x01, 0x03, 0x03, 0x01, 0x02, 0x05, 0x0f, 0x09, 0x00, // >hy............. - 0x00, 0x07, 0x00, 0x00, 0xff, 0xaa, 0x06, 0xf7, 0x05, 0x4b, 0x00, 0x0a, 0x00, 0x15, 0x00, 0x21, // .........K.....! - 0x00, 0x2f, 0x00, 0x55, 0x00, 0x69, 0x00, 0x7f, 0x00, 0x00, 0x25, 0x36, 0x26, 0x27, 0x26, 0x06, // ./.U.i....%6&'&. - 0x07, 0x06, 0x1e, 0x01, 0x36, 0x37, 0x36, 0x26, 0x27, 0x26, 0x06, 0x07, 0x06, 0x17, 0x16, 0x36, // ....676&'&.....6 - 0x17, 0x0e, 0x01, 0x27, 0x2e, 0x01, 0x37, 0x3e, 0x01, 0x17, 0x1e, 0x01, 0x25, 0x2e, 0x01, 0x24, // ...'..7>....%..$ - 0x07, 0x06, 0x04, 0x17, 0x1e, 0x01, 0x04, 0x37, 0x36, 0x24, 0x25, 0x14, 0x0e, 0x02, 0x04, 0x20, // .......76$%.... - 0x24, 0x2e, 0x01, 0x35, 0x34, 0x12, 0x37, 0x36, 0x24, 0x17, 0x16, 0x07, 0x06, 0x1e, 0x01, 0x36, // $..54.76$......6 - 0x3f, 0x01, 0x36, 0x32, 0x17, 0x16, 0x07, 0x0e, 0x01, 0x1e, 0x01, 0x17, 0x1e, 0x02, 0x02, 0x1e, // ?.62............ - 0x01, 0x07, 0x0e, 0x01, 0x27, 0x2e, 0x01, 0x37, 0x36, 0x26, 0x07, 0x06, 0x26, 0x27, 0x26, 0x36, // ....'..76&..&'&6 - 0x37, 0x36, 0x25, 0x1e, 0x01, 0x07, 0x0e, 0x01, 0x2e, 0x01, 0x37, 0x36, 0x26, 0x27, 0x2e, 0x01, // 76%.......76&'.. - 0x07, 0x06, 0x2e, 0x01, 0x36, 0x37, 0x36, 0x16, 0x02, 0xa3, 0x15, 0x14, 0x23, 0x22, 0x4e, 0x15, // ....676.....#"N. - 0x16, 0x12, 0x44, 0x51, 0x74, 0x08, 0x09, 0x0d, 0x0e, 0x1d, 0x07, 0x11, 0x1e, 0x0e, 0x1e, 0xb5, // ..DQt........... - 0x2d, 0xe2, 0x6f, 0x6b, 0x51, 0x2f, 0x2f, 0xd1, 0x6a, 0x6f, 0x5f, 0x01, 0x0b, 0x09, 0xa0, 0xfe, // -.okQ//.jo_..... - 0xff, 0x92, 0xdf, 0xfe, 0xdb, 0x0e, 0x09, 0xa0, 0x01, 0x01, 0x92, 0xdf, 0x01, 0x25, 0x01, 0x26, // .............%.& - 0x4a, 0x90, 0xc1, 0xfe, 0xfd, 0xfe, 0xe6, 0xfe, 0xf4, 0xd5, 0x82, 0x8b, 0x80, 0xa9, 0x01, 0x59, // J..............Y - 0x4a, 0x41, 0x2d, 0x04, 0x06, 0x0e, 0x0f, 0x06, 0x06, 0x8b, 0xd6, 0x2e, 0x2d, 0x2d, 0x02, 0x05, // JA-.........--.. - 0x0e, 0x0a, 0x0c, 0x39, 0x5c, 0x44, 0x74, 0x54, 0x19, 0x13, 0x08, 0x2b, 0x17, 0x17, 0x16, 0x07, // ...9.DtT...+.... - 0x14, 0x58, 0x3f, 0x18, 0x2a, 0x04, 0x05, 0x1a, 0x18, 0x3c, 0x01, 0x55, 0x57, 0x33, 0x27, 0x09, // .X?.*....<.UW3'. - 0x32, 0x36, 0x1a, 0x08, 0x1c, 0x24, 0x3e, 0x3e, 0xac, 0x57, 0x1c, 0x30, 0x0c, 0x1f, 0x1c, 0x7b, // 26...$>>.W.0...{ - 0xf2, 0xfc, 0x22, 0x46, 0x0f, 0x0e, 0x1a, 0x21, 0x22, 0x45, 0x20, 0x1b, 0x9b, 0x0d, 0x1b, 0x05, // .."F...!"E ..... - 0x05, 0x0b, 0x0d, 0x1f, 0x0e, 0x05, 0x0b, 0x5e, 0x66, 0x60, 0x24, 0x22, 0xb9, 0x5f, 0x5d, 0x5c, // .......^f`$"._]. - 0x1b, 0x1d, 0xb5, 0x3c, 0x60, 0x94, 0x46, 0x0e, 0x17, 0xed, 0x92, 0x60, 0x94, 0x46, 0x0e, 0x17, // ...<`.F....`.F.. - 0xed, 0x8e, 0x44, 0x8f, 0x83, 0x68, 0x3e, 0x43, 0x77, 0xb7, 0x6c, 0x73, 0x01, 0x04, 0x80, 0xa9, // ..D..h>Cw.ls.... - 0x86, 0x4a, 0x40, 0x91, 0x0e, 0x0c, 0x02, 0x03, 0x02, 0x02, 0x3b, 0x3d, 0x3f, 0x73, 0x0d, 0x0e, // .J@.......;=?s.. - 0x0b, 0x04, 0x04, 0x12, 0x3a, 0x69, 0x02, 0x5f, 0x5e, 0x7b, 0x38, 0x17, 0x16, 0x07, 0x08, 0x2b, // ....:i._^{8....+ - 0x17, 0x3f, 0x60, 0x0d, 0x05, 0x1a, 0x18, 0x18, 0x29, 0x05, 0x0d, 0x4f, 0x60, 0xfd, 0x73, 0x1b, // .?`.....)..O`.s. - 0x1a, 0x12, 0x32, 0x1b, 0x52, 0xb4, 0x44, 0x45, 0x35, 0x12, 0x06, 0x1f, 0x38, 0x2f, 0x06, 0x1a, // ..2.R.DE5...8/.. - 0x4b, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x72, 0x00, 0x09, // K............r.. - 0x00, 0x13, 0x00, 0x1d, 0x00, 0x00, 0x05, 0x06, 0x23, 0x22, 0x27, 0x3e, 0x01, 0x37, 0x1e, 0x01, // ........#"'>.7.. - 0x01, 0x11, 0x14, 0x02, 0x07, 0x26, 0x11, 0x34, 0x12, 0x24, 0x01, 0x10, 0x07, 0x26, 0x02, 0x35, // .....&.4.$...&.5 - 0x11, 0x16, 0x04, 0x12, 0x04, 0x6d, 0xab, 0xc5, 0xc4, 0xab, 0x8a, 0xc3, 0x22, 0x23, 0xc3, 0xfe, // .....m......"#.. - 0x9b, 0xfd, 0xcc, 0xb5, 0xa7, 0x01, 0x24, 0x04, 0x35, 0xb5, 0xcc, 0xfd, 0xb3, 0x01, 0x24, 0xa7, // ......$.5.....$. - 0x22, 0x5e, 0x5e, 0x57, 0xf8, 0x90, 0x90, 0xf8, 0x05, 0x3d, 0xfe, 0x1b, 0xfc, 0xfe, 0x61, 0x63, // "^^W.....=....ac - 0xd7, 0x01, 0x18, 0xbb, 0x01, 0x45, 0xd6, 0xfd, 0x2a, 0xfe, 0xe8, 0xd7, 0x63, 0x01, 0x9f, 0xfc, // .....E..*...c... - 0x01, 0xe5, 0x1e, 0xd6, 0xfe, 0xbb, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0x00, 0x05, 0x7a, // ...............z - 0x06, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x01, 0x0e, 0x03, 0x2e, 0x03, 0x2f, 0x01, 0x06, 0x00, 0x07, // ...k......./.... - 0x22, 0x26, 0x34, 0x36, 0x33, 0x36, 0x24, 0x37, 0x0e, 0x02, 0x2e, 0x03, 0x27, 0x3e, 0x01, 0x1e, // "&4636$7....'>.. - 0x02, 0x17, 0x36, 0x37, 0x0e, 0x02, 0x2e, 0x05, 0x27, 0x3e, 0x01, 0x1e, 0x05, 0x1f, 0x01, 0x36, // ..67....'>.....6 - 0x35, 0x2e, 0x05, 0x36, 0x37, 0x1e, 0x04, 0x0e, 0x02, 0x0f, 0x01, 0x16, 0x14, 0x07, 0x3e, 0x05, // 5..67.........>. - 0x16, 0x17, 0x0e, 0x06, 0x26, 0x2f, 0x01, 0x06, 0x07, 0x3e, 0x05, 0x16, 0x05, 0x7a, 0x20, 0x58, // ....&/...>...z X - 0x5e, 0x68, 0x63, 0x5e, 0x4f, 0x3c, 0x10, 0x11, 0x71, 0xfe, 0x9f, 0xd0, 0x13, 0x1a, 0x1a, 0x13, // ^hc^O<..q....... - 0xad, 0x01, 0x2b, 0x66, 0x24, 0x48, 0x5e, 0x58, 0x62, 0x56, 0x53, 0x21, 0x72, 0xc8, 0x87, 0x72, // ..+f$H^XbVS!r..r - 0x3f, 0x19, 0x35, 0x1a, 0x07, 0x16, 0x47, 0x44, 0x5f, 0x52, 0x56, 0x40, 0x2d, 0x06, 0x46, 0x7f, // ?.5...GD_RV@-.F. - 0x62, 0x56, 0x3d, 0x33, 0x21, 0x16, 0x05, 0x04, 0x0c, 0x08, 0x1b, 0x47, 0x38, 0x34, 0x0e, 0x26, // bV=3!......G84.& - 0x33, 0x49, 0x6d, 0x3c, 0x24, 0x05, 0x06, 0x14, 0x12, 0x08, 0x07, 0x01, 0x01, 0x03, 0x0e, 0x2f, // 3Im<$........../ - 0x36, 0x58, 0x5f, 0x81, 0x44, 0x02, 0x27, 0x3d, 0x4e, 0x55, 0x54, 0x4c, 0x3b, 0x11, 0x11, 0x17, // 6X_.D.'=NUTL;... - 0x32, 0x06, 0x18, 0x4b, 0x50, 0x77, 0x74, 0x8e, 0x01, 0xb1, 0x50, 0x74, 0x3d, 0x20, 0x03, 0x0e, // 2..KPwt...Pt= .. - 0x1e, 0x19, 0x0a, 0x0a, 0xe4, 0xfe, 0xf9, 0x01, 0x1a, 0x26, 0x19, 0x01, 0xd5, 0xbc, 0x0e, 0x12, // .........&...... - 0x08, 0x0d, 0x2c, 0x4a, 0x7e, 0x53, 0x2f, 0x14, 0x23, 0x4e, 0x4c, 0x2c, 0x83, 0xa0, 0x01, 0x03, // ..,J~S/.#NL,.... - 0x02, 0x03, 0x11, 0x1d, 0x38, 0x4a, 0x73, 0x46, 0x1c, 0x11, 0x13, 0x29, 0x3b, 0x3f, 0x3f, 0x31, // ....8JsF...);??1 - 0x0f, 0x10, 0x7a, 0x49, 0x06, 0x14, 0x45, 0x4a, 0x70, 0x71, 0x8d, 0x44, 0x19, 0x49, 0x50, 0x5a, // ..zI..EJpq.D.IPZ - 0x58, 0x53, 0x46, 0x36, 0x0f, 0x0f, 0x05, 0x5b, 0x1a, 0x07, 0x17, 0x3f, 0x35, 0x3a, 0x1f, 0x02, // XSF6...[...?5:.. - 0x17, 0x4e, 0x7f, 0x52, 0x3d, 0x1e, 0x12, 0x01, 0x03, 0x03, 0x03, 0x93, 0x88, 0x07, 0x17, 0x3b, // .N.R=..........; - 0x2e, 0x26, 0x02, 0x31, 0x00, 0x04, 0x00, 0x15, 0xff, 0x00, 0x04, 0xeb, 0x05, 0x00, 0x00, 0x0c, // .&.1............ - 0x00, 0x10, 0x00, 0x14, 0x00, 0x1e, 0x00, 0x00, 0x01, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x01, 0x11, // ............+... - 0x21, 0x22, 0x26, 0x3d, 0x01, 0x01, 0x15, 0x21, 0x11, 0x01, 0x15, 0x21, 0x11, 0x25, 0x15, 0x21, // !"&=...!...!.%.! - 0x35, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x04, 0xeb, 0x73, 0x51, 0x39, 0xfe, 0xfc, 0xfd, 0xef, // 5463!2...sQ9.... - 0x51, 0x73, 0x04, 0xd6, 0xfb, 0x2a, 0x04, 0xd6, 0xfb, 0x2a, 0x04, 0xd6, 0xfb, 0x2a, 0x73, 0x51, // Qs...*...*...*sQ - 0x03, 0x4e, 0x51, 0x73, 0x01, 0x1b, 0x42, 0x55, 0x77, 0xfe, 0xf3, 0x01, 0x0d, 0x77, 0x55, 0x42, // .NQs..BUw....wUB - 0x01, 0x46, 0xff, 0x00, 0xff, 0x01, 0x48, 0xff, 0x00, 0xff, 0x8c, 0x43, 0x43, 0x54, 0x77, 0x77, // .F....H....CCTww + 0x22, 0x26, 0x35, 0x11, 0x23, 0x11, 0x14, 0x06, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, // "&5.#..."&5.463! + 0x32, 0x16, 0x00, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x04, 0x00, 0x38, 0x50, 0x38, 0x40, // 2...."&462..8P8@ + 0x42, 0x5c, 0x42, 0x40, 0x42, 0x5c, 0x42, 0x40, 0x38, 0x50, 0x38, 0x70, 0x50, 0x02, 0x80, 0x50, // B.B@B.B@8P8pP..P + 0x70, 0xfe, 0xe0, 0x83, 0xba, 0x83, 0x83, 0xba, 0x03, 0x40, 0xfe, 0x60, 0x28, 0x38, 0x38, 0x28, // p........@.`(88( + 0x01, 0x60, 0xfc, 0x70, 0x2e, 0x42, 0x42, 0x2e, 0x01, 0xd0, 0xfe, 0x30, 0x2e, 0x42, 0x42, 0x2e, // .`.p.BB....0.BB. + 0x03, 0x90, 0xfe, 0xa0, 0x28, 0x38, 0x38, 0x28, 0x01, 0xa0, 0x50, 0x70, 0x70, 0x01, 0xcd, 0xba, // ....(88(..Ppp... + 0x83, 0x83, 0xba, 0x83, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x15, // ................ + 0x00, 0x21, 0x00, 0x00, 0x25, 0x01, 0x3e, 0x01, 0x26, 0x27, 0x26, 0x0e, 0x01, 0x07, 0x06, 0x23, // .!..%.>.&'&....# + 0x22, 0x27, 0x2e, 0x02, 0x07, 0x0e, 0x01, 0x16, 0x17, 0x24, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, // "'.......$... $. + 0x10, 0x12, 0x24, 0x20, 0x04, 0x03, 0x05, 0x01, 0x5e, 0x10, 0x11, 0x1d, 0x2f, 0x28, 0x56, 0x3d, // ..$ ....^.../(V= + 0x18, 0x24, 0x3c, 0x3b, 0x24, 0x18, 0x3d, 0x56, 0x29, 0x2e, 0x1d, 0x11, 0x10, 0x04, 0x58, 0xce, // .$<;$.=V).....X. + 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xea, 0x01, // ...^.....a...a.. + 0xd9, 0x16, 0x4a, 0x60, 0x1f, 0x1a, 0x01, 0x22, 0x1c, 0x28, 0x28, 0x1c, 0x22, 0x01, 0x1a, 0x1f, // ..J`...".((."... + 0x60, 0x4a, 0x16, 0x8e, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, // `J...^.....a...a + 0xce, 0xce, 0x00, 0x00, 0x00, 0x02, 0x00, 0x2c, 0xff, 0x00, 0x06, 0xd4, 0x05, 0xff, 0x00, 0x0f, // .......,........ + 0x00, 0x49, 0x00, 0x00, 0x00, 0x34, 0x2e, 0x02, 0x22, 0x0e, 0x02, 0x14, 0x1e, 0x02, 0x32, 0x3e, // .I...4..".....2> + 0x01, 0x25, 0x06, 0x07, 0x05, 0x11, 0x14, 0x07, 0x06, 0x27, 0x25, 0x07, 0x06, 0x22, 0x2f, 0x01, // .%.......'%.."/. + 0x05, 0x06, 0x27, 0x26, 0x35, 0x11, 0x25, 0x26, 0x27, 0x26, 0x3f, 0x01, 0x27, 0x26, 0x37, 0x36, // ..'&5.%&'&?.'&76 + 0x37, 0x25, 0x11, 0x34, 0x37, 0x36, 0x17, 0x05, 0x37, 0x36, 0x32, 0x1f, 0x01, 0x25, 0x36, 0x17, // 7%.476..762..%6. + 0x16, 0x15, 0x11, 0x05, 0x16, 0x17, 0x16, 0x0f, 0x01, 0x17, 0x16, 0x05, 0xc0, 0x5b, 0x9b, 0xd5, // .............[.. + 0xea, 0xd5, 0x9b, 0x5b, 0x5b, 0x9b, 0xd5, 0xea, 0xd5, 0x9b, 0x01, 0x6f, 0x04, 0x10, 0xfe, 0xdc, // ...[[......o.... + 0x0d, 0x0f, 0x0e, 0xfe, 0xdc, 0xb4, 0x0a, 0x20, 0x0a, 0xb4, 0xfe, 0xdc, 0x0e, 0x0f, 0x0d, 0xfe, // ....... ........ + 0xdc, 0x10, 0x04, 0x05, 0x09, 0xb4, 0xb4, 0x09, 0x05, 0x04, 0x10, 0x01, 0x24, 0x0d, 0x0f, 0x0e, // ............$... + 0x01, 0x24, 0xb4, 0x09, 0x22, 0x09, 0xb4, 0x01, 0x24, 0x0e, 0x0f, 0x0d, 0x01, 0x24, 0x10, 0x04, // .$.."...$....$.. + 0x05, 0x09, 0xb4, 0xb4, 0x09, 0x02, 0x0b, 0xea, 0xd5, 0x9b, 0x5b, 0x5b, 0x9b, 0xd5, 0xea, 0xd5, // ..........[[.... + 0x9b, 0x5b, 0x5b, 0x9b, 0x35, 0x0f, 0x05, 0x60, 0xfe, 0xce, 0x10, 0x0a, 0x0a, 0x06, 0x5e, 0xf8, // .[[.5..`......^. + 0x0d, 0x0d, 0xf8, 0x5e, 0x06, 0x0a, 0x0a, 0x10, 0x01, 0x32, 0x60, 0x05, 0x0f, 0x11, 0x0c, 0xf8, // ...^.....2`..... + 0xf8, 0x0d, 0x10, 0x0f, 0x05, 0x60, 0x01, 0x32, 0x10, 0x0a, 0x0a, 0x06, 0x5e, 0xf8, 0x0c, 0x0c, // .....`.2....^... + 0xf8, 0x5e, 0x06, 0x0a, 0x0a, 0x10, 0xfe, 0xce, 0x60, 0x05, 0x0f, 0x10, 0x0d, 0xf8, 0xf8, 0x0c, // .^......`....... + 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x05, 0xbe, 0x05, 0x7f, 0x00, 0x12, 0x00, 0x31, 0x00, 0x00, // .............1.. + 0x25, 0x06, 0x23, 0x22, 0x24, 0x02, 0x35, 0x34, 0x37, 0x06, 0x02, 0x15, 0x14, 0x1e, 0x02, 0x33, // %.#"$.547......3 + 0x32, 0x24, 0x25, 0x06, 0x04, 0x23, 0x22, 0x24, 0x26, 0x02, 0x35, 0x34, 0x12, 0x36, 0x24, 0x37, // 2$%..#"$&.54.6$7 + 0x36, 0x17, 0x16, 0x07, 0x0e, 0x01, 0x15, 0x14, 0x1e, 0x01, 0x33, 0x32, 0x37, 0x36, 0x17, 0x1e, // 6.........3276.. + 0x01, 0x04, 0xee, 0x36, 0x38, 0xb6, 0xfe, 0xca, 0xb4, 0x68, 0xc9, 0xff, 0x66, 0xab, 0xed, 0x82, // ...68....h..f... + 0x90, 0x01, 0x03, 0x01, 0x26, 0x5e, 0xfe, 0x85, 0xe0, 0x9c, 0xfe, 0xe4, 0xce, 0x7a, 0x73, 0xc5, // ....&^.......zs. + 0x01, 0x12, 0x99, 0x2c, 0x11, 0x12, 0x21, 0x56, 0x5b, 0x92, 0xfa, 0x94, 0x76, 0x6e, 0x29, 0x1f, // ...,..!V[...vn). + 0x0e, 0x07, 0xe9, 0x09, 0xb4, 0x01, 0x36, 0xb6, 0xc0, 0xa5, 0x3c, 0xfe, 0xae, 0xd7, 0x82, 0xed, // ......6...<..... + 0xab, 0x66, 0x7b, 0xc3, 0xcb, 0xf3, 0x7a, 0xce, 0x01, 0x1c, 0x9c, 0x99, 0x01, 0x17, 0xcc, 0x7d, // .f{...z........} + 0x06, 0x02, 0x29, 0x29, 0x1f, 0x4e, 0xcf, 0x73, 0x94, 0xfa, 0x92, 0x33, 0x12, 0x1f, 0x0e, 0x28, // ..)).N.s...3...( + 0x00, 0x03, 0x00, 0x40, 0xff, 0x80, 0x06, 0xc0, 0x05, 0x80, 0x00, 0x0b, 0x00, 0x1b, 0x00, 0x2b, // ...@...........+ + 0x00, 0x00, 0x00, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x14, 0x16, 0x33, 0x21, 0x32, 0x01, 0x11, // ...4&#!"...3!2.. + 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x13, 0x11, // ..#!"&5.463!2... + 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x04, 0x40, // ..#!"&5.463!2..@ + 0x26, 0x1a, 0xff, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0x00, 0x1a, 0x02, 0x66, 0x26, 0x1a, 0xfa, // &....&&.....f&.. + 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x05, 0x80, 0x1a, 0x26, 0x40, 0x26, 0x1a, 0xfa, 0x00, 0x1a, 0x26, // ..&&....&@&....& + 0x26, 0x1a, 0x06, 0x00, 0x1a, 0x26, 0x02, 0xa6, 0x34, 0x26, 0x26, 0x34, 0x26, 0x01, 0x00, 0xfc, // &....&..4&&4&... + 0x40, 0x1a, 0x26, 0x26, 0x1a, 0x03, 0xc0, 0x1a, 0x26, 0x26, 0x01, 0xa6, 0xff, 0x00, 0x1a, 0x26, // @.&&....&&.....& + 0x26, 0x1a, 0x01, 0x00, 0x1a, 0x26, 0x26, 0x00, 0x00, 0x02, 0x00, 0x20, 0xff, 0xa0, 0x06, 0x60, // &....&&.... ...` + 0x05, 0xc0, 0x00, 0x42, 0x00, 0x48, 0x00, 0x00, 0x00, 0x14, 0x06, 0x2b, 0x01, 0x14, 0x07, 0x17, // ...B.H.....+.... + 0x16, 0x14, 0x07, 0x06, 0x22, 0x2f, 0x01, 0x0e, 0x04, 0x23, 0x11, 0x23, 0x11, 0x22, 0x2e, 0x02, // ...."/...#.#.".. + 0x2f, 0x01, 0x07, 0x06, 0x23, 0x22, 0x27, 0x2e, 0x01, 0x3f, 0x01, 0x26, 0x35, 0x23, 0x22, 0x26, // /...#"'..?.&5#"& + 0x34, 0x36, 0x3b, 0x01, 0x11, 0x27, 0x26, 0x34, 0x36, 0x32, 0x1f, 0x01, 0x21, 0x37, 0x36, 0x32, // 46;..'&462..!762 + 0x16, 0x14, 0x0f, 0x01, 0x11, 0x33, 0x32, 0x01, 0x21, 0x34, 0x36, 0x20, 0x16, 0x06, 0x60, 0x26, // .....32.!46 ..`& + 0x1a, 0xe0, 0x43, 0xd0, 0x13, 0x13, 0x12, 0x36, 0x12, 0xc6, 0x05, 0x14, 0x40, 0x42, 0x62, 0x30, // ..C....6....@Bb0 + 0x80, 0x33, 0x65, 0x49, 0x3b, 0x0e, 0x0f, 0xb7, 0x14, 0x1c, 0x18, 0x13, 0x13, 0x03, 0x11, 0xca, // .3eI;........... + 0x3a, 0xe0, 0x1a, 0x26, 0x26, 0x1a, 0xe0, 0xad, 0x13, 0x26, 0x34, 0x13, 0xad, 0x03, 0x4c, 0xad, // :..&&....&4...L. + 0x13, 0x34, 0x26, 0x13, 0xad, 0xe0, 0x1a, 0xfe, 0x46, 0xfd, 0x80, 0xbb, 0x01, 0x0a, 0xbb, 0x02, // .4&.....F....... + 0x5a, 0x34, 0x26, 0xab, 0x77, 0xd1, 0x13, 0x34, 0x13, 0x13, 0x13, 0xc5, 0x05, 0x10, 0x29, 0x20, // Z4&.w..4......) + 0x1a, 0x03, 0x80, 0xfc, 0x80, 0x1b, 0x27, 0x27, 0x0d, 0x0e, 0xcf, 0x15, 0x10, 0x12, 0x35, 0x14, // ......''......5. + 0xe3, 0x72, 0xa0, 0x26, 0x34, 0x26, 0x01, 0x26, 0xad, 0x13, 0x34, 0x26, 0x13, 0xad, 0xad, 0x13, // .r.&4&.&..4&.... + 0x26, 0x34, 0x13, 0xad, 0xfe, 0xda, 0x02, 0x00, 0x85, 0xbb, 0xbb, 0x00, 0x00, 0x01, 0xff, 0xff, // &4.............. + 0x00, 0x01, 0x07, 0x7d, 0x04, 0x47, 0x00, 0x85, 0x00, 0x00, 0x01, 0x16, 0x07, 0x06, 0x07, 0x0e, // ...}.G.......... + 0x02, 0x1e, 0x02, 0x17, 0x16, 0x17, 0x16, 0x17, 0x1e, 0x02, 0x0e, 0x01, 0x23, 0x05, 0x06, 0x26, // ............#..& + 0x2f, 0x01, 0x2e, 0x03, 0x07, 0x0e, 0x04, 0x17, 0x14, 0x06, 0x0f, 0x01, 0x06, 0x07, 0x23, 0x06, // /.............#. + 0x2e, 0x02, 0x2f, 0x01, 0x2e, 0x03, 0x02, 0x27, 0x26, 0x34, 0x3f, 0x01, 0x36, 0x33, 0x25, 0x1e, // ../....'&4?.63%. + 0x01, 0x1f, 0x01, 0x16, 0x17, 0x1e, 0x01, 0x1f, 0x01, 0x1e, 0x03, 0x32, 0x37, 0x3e, 0x04, 0x27, // ...........27>.' + 0x2e, 0x01, 0x2f, 0x01, 0x26, 0x27, 0x26, 0x37, 0x36, 0x37, 0x36, 0x17, 0x16, 0x17, 0x1e, 0x03, // ../.&'&7676..... + 0x14, 0x0e, 0x01, 0x15, 0x14, 0x06, 0x1e, 0x02, 0x17, 0x1e, 0x01, 0x3e, 0x02, 0x37, 0x36, 0x37, // ...........>.767 + 0x3e, 0x01, 0x3f, 0x01, 0x3e, 0x02, 0x17, 0x25, 0x36, 0x16, 0x17, 0x07, 0x7d, 0x17, 0xad, 0x18, // >.?.>..%6...}... + 0x29, 0x28, 0x1e, 0x1f, 0x07, 0x13, 0x2e, 0x22, 0x04, 0x01, 0x8d, 0x32, 0x03, 0x07, 0x07, 0x08, // )(....."...2.... + 0x2a, 0x26, 0xff, 0x00, 0x18, 0x40, 0x14, 0x14, 0x1e, 0x50, 0x39, 0x41, 0x18, 0x03, 0x0a, 0x18, // *&...@...P9A.... + 0x13, 0x0f, 0x01, 0x07, 0x04, 0x04, 0x12, 0x23, 0x73, 0x47, 0x96, 0x71, 0x5d, 0x18, 0x19, 0x0a, // .......#sG.q]... + 0x23, 0x6c, 0x68, 0x8d, 0x3c, 0x06, 0x03, 0x04, 0x0f, 0x2a, 0x01, 0x12, 0x0c, 0x16, 0x05, 0x05, // #lh.<....*...... + 0x10, 0x08, 0x14, 0x34, 0x0f, 0x10, 0x1d, 0x36, 0x2b, 0x28, 0x1c, 0x0d, 0x02, 0x06, 0x12, 0x09, // ...4...6+(...... + 0x0a, 0x05, 0x02, 0x0e, 0x07, 0x06, 0x19, 0x3c, 0x0d, 0x12, 0x10, 0x16, 0x35, 0xba, 0x52, 0x35, // .......<....5.R5 + 0x14, 0x1b, 0x0e, 0x07, 0x02, 0x03, 0x02, 0x01, 0x06, 0x11, 0x0e, 0x08, 0x12, 0x22, 0x2a, 0x3e, // ............."*> + 0x25, 0x3c, 0x2f, 0x04, 0x0c, 0x05, 0x04, 0x02, 0x06, 0x14, 0x0a, 0x01, 0x20, 0x27, 0x32, 0x06, // %"/.. + 0x02, 0x04, 0x1a, 0x2b, 0x5b, 0x3e, 0x68, 0x79, 0x0a, 0x0f, 0x03, 0x03, 0x01, 0x03, 0x03, 0x01, // ...+[>hy........ + 0x02, 0x05, 0x0f, 0x09, 0x00, 0x07, 0x00, 0x00, 0xff, 0xaa, 0x06, 0xf7, 0x05, 0x4b, 0x00, 0x0a, // .............K.. + 0x00, 0x15, 0x00, 0x21, 0x00, 0x2f, 0x00, 0x55, 0x00, 0x69, 0x00, 0x7f, 0x00, 0x00, 0x25, 0x36, // ...!./.U.i....%6 + 0x26, 0x27, 0x26, 0x06, 0x07, 0x06, 0x1e, 0x01, 0x36, 0x37, 0x36, 0x26, 0x27, 0x26, 0x06, 0x07, // &'&.....676&'&.. + 0x06, 0x17, 0x16, 0x36, 0x17, 0x0e, 0x01, 0x27, 0x2e, 0x01, 0x37, 0x3e, 0x01, 0x17, 0x1e, 0x01, // ...6...'..7>.... + 0x25, 0x2e, 0x01, 0x24, 0x07, 0x06, 0x04, 0x17, 0x1e, 0x01, 0x04, 0x37, 0x36, 0x24, 0x25, 0x14, // %..$.......76$%. + 0x0e, 0x02, 0x04, 0x20, 0x24, 0x2e, 0x01, 0x35, 0x34, 0x12, 0x37, 0x36, 0x24, 0x17, 0x16, 0x07, // ... $..54.76$... + 0x06, 0x1e, 0x01, 0x36, 0x3f, 0x01, 0x36, 0x32, 0x17, 0x16, 0x07, 0x0e, 0x01, 0x1e, 0x01, 0x17, // ...6?.62........ + 0x1e, 0x02, 0x02, 0x1e, 0x01, 0x07, 0x0e, 0x01, 0x27, 0x2e, 0x01, 0x37, 0x36, 0x26, 0x07, 0x06, // ........'..76&.. + 0x26, 0x27, 0x26, 0x36, 0x37, 0x36, 0x25, 0x1e, 0x01, 0x07, 0x0e, 0x01, 0x2e, 0x01, 0x37, 0x36, // &'&676%.......76 + 0x26, 0x27, 0x2e, 0x01, 0x07, 0x06, 0x2e, 0x01, 0x36, 0x37, 0x36, 0x16, 0x02, 0xa3, 0x15, 0x14, // &'......676..... + 0x23, 0x22, 0x4e, 0x15, 0x16, 0x12, 0x44, 0x51, 0x74, 0x08, 0x09, 0x0d, 0x0e, 0x1d, 0x07, 0x11, // #"N...DQt....... + 0x1e, 0x0e, 0x1e, 0xb5, 0x2d, 0xe2, 0x6f, 0x6b, 0x51, 0x2f, 0x2f, 0xd1, 0x6a, 0x6f, 0x5f, 0x01, // ....-.okQ//.jo_. + 0x0b, 0x09, 0xa0, 0xfe, 0xff, 0x92, 0xdf, 0xfe, 0xdb, 0x0e, 0x09, 0xa0, 0x01, 0x01, 0x92, 0xdf, // ................ + 0x01, 0x25, 0x01, 0x26, 0x4a, 0x90, 0xc1, 0xfe, 0xfd, 0xfe, 0xe6, 0xfe, 0xf4, 0xd5, 0x82, 0x8b, // .%.&J........... + 0x80, 0xa9, 0x01, 0x59, 0x4a, 0x41, 0x2d, 0x04, 0x06, 0x0e, 0x0f, 0x06, 0x06, 0x8b, 0xd6, 0x2e, // ...YJA-......... + 0x2d, 0x2d, 0x02, 0x05, 0x0e, 0x0a, 0x0c, 0x39, 0x5c, 0x44, 0x74, 0x54, 0x19, 0x13, 0x08, 0x2b, // --.....9.DtT...+ + 0x17, 0x17, 0x16, 0x07, 0x14, 0x58, 0x3f, 0x18, 0x2a, 0x04, 0x05, 0x1a, 0x18, 0x3c, 0x01, 0x55, // .....X?.*....<.U + 0x57, 0x33, 0x27, 0x09, 0x32, 0x36, 0x1a, 0x08, 0x1c, 0x24, 0x3e, 0x3e, 0xac, 0x57, 0x1c, 0x30, // W3'.26...$>>.W.0 + 0x0c, 0x1f, 0x1c, 0x7b, 0xf2, 0xfc, 0x22, 0x46, 0x0f, 0x0e, 0x1a, 0x21, 0x22, 0x45, 0x20, 0x1b, // ...{.."F...!"E . + 0x9b, 0x0d, 0x1b, 0x05, 0x05, 0x0b, 0x0d, 0x1f, 0x0e, 0x05, 0x0b, 0x5e, 0x66, 0x60, 0x24, 0x22, // ...........^f`$" + 0xb9, 0x5f, 0x5d, 0x5c, 0x1b, 0x1d, 0xb5, 0x3c, 0x60, 0x94, 0x46, 0x0e, 0x17, 0xed, 0x92, 0x60, // ._]....<`.F....` + 0x94, 0x46, 0x0e, 0x17, 0xed, 0x8e, 0x44, 0x8f, 0x83, 0x68, 0x3e, 0x43, 0x77, 0xb7, 0x6c, 0x73, // .F....D..h>Cw.ls + 0x01, 0x04, 0x80, 0xa9, 0x86, 0x4a, 0x40, 0x91, 0x0e, 0x0c, 0x02, 0x03, 0x02, 0x02, 0x3b, 0x3d, // .....J@.......;= + 0x3f, 0x73, 0x0d, 0x0e, 0x0b, 0x04, 0x04, 0x12, 0x3a, 0x69, 0x02, 0x5f, 0x5e, 0x7b, 0x38, 0x17, // ?s......:i._^{8. + 0x16, 0x07, 0x08, 0x2b, 0x17, 0x3f, 0x60, 0x0d, 0x05, 0x1a, 0x18, 0x18, 0x29, 0x05, 0x0d, 0x4f, // ...+.?`.....)..O + 0x60, 0xfd, 0x73, 0x1b, 0x1a, 0x12, 0x32, 0x1b, 0x52, 0xb4, 0x44, 0x45, 0x35, 0x12, 0x06, 0x1f, // `.s...2.R.DE5... + 0x38, 0x2f, 0x06, 0x1a, 0x4b, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // 8/..K........... + 0x05, 0x72, 0x00, 0x09, 0x00, 0x13, 0x00, 0x1d, 0x00, 0x00, 0x05, 0x06, 0x23, 0x22, 0x27, 0x3e, // .r..........#"'> + 0x01, 0x37, 0x1e, 0x01, 0x01, 0x11, 0x14, 0x02, 0x07, 0x26, 0x11, 0x34, 0x12, 0x24, 0x01, 0x10, // .7.......&.4.$.. + 0x07, 0x26, 0x02, 0x35, 0x11, 0x16, 0x04, 0x12, 0x04, 0x6d, 0xab, 0xc5, 0xc4, 0xab, 0x8a, 0xc3, // .&.5.....m...... + 0x22, 0x23, 0xc3, 0xfe, 0x9b, 0xfd, 0xcc, 0xb5, 0xa7, 0x01, 0x24, 0x04, 0x35, 0xb5, 0xcc, 0xfd, // "#........$.5... + 0xb3, 0x01, 0x24, 0xa7, 0x22, 0x5e, 0x5e, 0x57, 0xf8, 0x90, 0x90, 0xf8, 0x05, 0x3d, 0xfe, 0x1b, // ..$."^^W.....=.. + 0xfc, 0xfe, 0x61, 0x63, 0xd7, 0x01, 0x18, 0xbb, 0x01, 0x45, 0xd6, 0xfd, 0x2a, 0xfe, 0xe8, 0xd7, // ..ac.....E..*... + 0x63, 0x01, 0x9f, 0xfc, 0x01, 0xe5, 0x1e, 0xd6, 0xfe, 0xbb, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // c............... + 0xff, 0x00, 0x05, 0x7a, 0x06, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x01, 0x0e, 0x03, 0x2e, 0x03, 0x2f, // ...z...k......./ + 0x01, 0x06, 0x00, 0x07, 0x22, 0x26, 0x34, 0x36, 0x33, 0x36, 0x24, 0x37, 0x0e, 0x02, 0x2e, 0x03, // ...."&4636$7.... + 0x27, 0x3e, 0x01, 0x1e, 0x02, 0x17, 0x36, 0x37, 0x0e, 0x02, 0x2e, 0x05, 0x27, 0x3e, 0x01, 0x1e, // '>....67....'>.. + 0x05, 0x1f, 0x01, 0x36, 0x35, 0x2e, 0x05, 0x36, 0x37, 0x1e, 0x04, 0x0e, 0x02, 0x0f, 0x01, 0x16, // ...65..67....... + 0x14, 0x07, 0x3e, 0x05, 0x16, 0x17, 0x0e, 0x06, 0x26, 0x2f, 0x01, 0x06, 0x07, 0x3e, 0x05, 0x16, // ..>.....&/...>.. + 0x05, 0x7a, 0x20, 0x58, 0x5e, 0x68, 0x63, 0x5e, 0x4f, 0x3c, 0x10, 0x11, 0x71, 0xfe, 0x9f, 0xd0, // .z X^hc^O<..q... + 0x13, 0x1a, 0x1a, 0x13, 0xad, 0x01, 0x2b, 0x66, 0x24, 0x48, 0x5e, 0x58, 0x62, 0x56, 0x53, 0x21, // ......+f$H^XbVS! + 0x72, 0xc8, 0x87, 0x72, 0x3f, 0x19, 0x35, 0x1a, 0x07, 0x16, 0x47, 0x44, 0x5f, 0x52, 0x56, 0x40, // r..r?.5...GD_RV@ + 0x2d, 0x06, 0x46, 0x7f, 0x62, 0x56, 0x3d, 0x33, 0x21, 0x16, 0x05, 0x04, 0x0c, 0x08, 0x1b, 0x47, // -.F.bV=3!......G + 0x38, 0x34, 0x0e, 0x26, 0x33, 0x49, 0x6d, 0x3c, 0x24, 0x05, 0x06, 0x14, 0x12, 0x08, 0x07, 0x01, // 84.&3Im<$....... + 0x01, 0x03, 0x0e, 0x2f, 0x36, 0x58, 0x5f, 0x81, 0x44, 0x02, 0x27, 0x3d, 0x4e, 0x55, 0x54, 0x4c, // .../6X_.D.'=NUTL + 0x3b, 0x11, 0x11, 0x17, 0x32, 0x06, 0x18, 0x4b, 0x50, 0x77, 0x74, 0x8e, 0x01, 0xb1, 0x50, 0x74, // ;...2..KPwt...Pt + 0x3d, 0x20, 0x03, 0x0e, 0x1e, 0x19, 0x0a, 0x0a, 0xe4, 0xfe, 0xf9, 0x01, 0x1a, 0x26, 0x19, 0x01, // = ...........&.. + 0xd5, 0xbc, 0x0e, 0x12, 0x08, 0x0d, 0x2c, 0x4a, 0x7e, 0x53, 0x2f, 0x14, 0x23, 0x4e, 0x4c, 0x2c, // ......,J~S/.#NL, + 0x83, 0xa0, 0x01, 0x03, 0x02, 0x03, 0x11, 0x1d, 0x38, 0x4a, 0x73, 0x46, 0x1c, 0x11, 0x13, 0x29, // ........8JsF...) + 0x3b, 0x3f, 0x3f, 0x31, 0x0f, 0x10, 0x7a, 0x49, 0x06, 0x14, 0x45, 0x4a, 0x70, 0x71, 0x8d, 0x44, // ;??1..zI..EJpq.D + 0x19, 0x49, 0x50, 0x5a, 0x58, 0x53, 0x46, 0x36, 0x0f, 0x0f, 0x04, 0x5c, 0x1a, 0x07, 0x17, 0x3f, // .IPZXSF6.......? + 0x35, 0x3a, 0x1f, 0x02, 0x17, 0x4e, 0x7f, 0x52, 0x3d, 0x1e, 0x12, 0x01, 0x03, 0x03, 0x03, 0x93, // 5:...N.R=....... + 0x88, 0x07, 0x17, 0x3b, 0x2e, 0x26, 0x02, 0x31, 0x00, 0x04, 0x00, 0x15, 0xff, 0x00, 0x04, 0xeb, // ...;.&.1........ + 0x05, 0x00, 0x00, 0x0c, 0x00, 0x10, 0x00, 0x14, 0x00, 0x1e, 0x00, 0x00, 0x01, 0x15, 0x14, 0x06, // ................ + 0x2b, 0x01, 0x01, 0x11, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x01, 0x15, 0x21, 0x11, 0x01, 0x15, 0x21, // +...!"&=...!...! + 0x11, 0x25, 0x15, 0x21, 0x35, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x04, 0xeb, 0x73, 0x51, 0x39, // .%.!5463!2...sQ9 + 0xfe, 0xfc, 0xfd, 0xef, 0x51, 0x73, 0x04, 0xd6, 0xfb, 0x2a, 0x04, 0xd6, 0xfb, 0x2a, 0x04, 0xd6, // ....Qs...*...*.. + 0xfb, 0x2a, 0x73, 0x51, 0x03, 0x4e, 0x51, 0x73, 0x01, 0x1b, 0x42, 0x55, 0x77, 0xfe, 0xf3, 0x01, // .*sQ.NQs..BUw... + 0x0d, 0x77, 0x55, 0x42, 0x01, 0x46, 0xff, 0x00, 0xff, 0x01, 0x48, 0xff, 0x00, 0xff, 0x8c, 0x43, // .wUB.F....H....C + 0x43, 0x54, 0x77, 0x77, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x19, // CTww............ + 0x00, 0x25, 0x00, 0x31, 0x00, 0x00, 0x00, 0x14, 0x07, 0x01, 0x06, 0x23, 0x22, 0x26, 0x3d, 0x01, // .%.1.......#"&=. + 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x01, // !"&=.463!54632.. + 0x16, 0x10, 0x2e, 0x01, 0x20, 0x0e, 0x01, 0x10, 0x1e, 0x01, 0x20, 0x36, 0x00, 0x10, 0x02, 0x04, // .... ..... 6.... + 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, 0x04, 0x80, 0x09, 0xfe, 0xc0, 0x09, 0x0e, 0x0d, // $...$ ......... + 0x13, 0xfe, 0xa0, 0x0d, 0x13, 0x13, 0x0d, 0x01, 0x60, 0x12, 0x0e, 0x0c, 0x0c, 0x01, 0x3f, 0xa9, // ........`.....?. + 0x92, 0xfa, 0xfe, 0xd8, 0xfa, 0x92, 0x92, 0xfa, 0x01, 0x28, 0xfa, 0x01, 0x72, 0xce, 0xfe, 0x9f, // .........(..r... + 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x02, 0x8e, 0x1c, 0x09, // .^.....a...a.... + 0xfe, 0xc0, 0x09, 0x13, 0x0d, 0xc0, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0xc0, 0x0e, 0x12, 0x0a, 0xfe, // ................ + 0xc1, 0xab, 0x01, 0x28, 0xfa, 0x92, 0x92, 0xfa, 0xfe, 0xd8, 0xfa, 0x92, 0x92, 0x02, 0x5f, 0xfe, // ...(.........._. + 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x00, 0x00, // ^.....a...a..... 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x19, 0x00, 0x25, 0x00, 0x31, // .............%.1 - 0x00, 0x00, 0x00, 0x14, 0x07, 0x01, 0x06, 0x23, 0x22, 0x26, 0x3d, 0x01, 0x21, 0x22, 0x26, 0x3d, // .......#"&=.!"&= - 0x01, 0x34, 0x36, 0x33, 0x21, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x01, 0x16, 0x10, 0x2e, 0x01, // .463!54632...... + 0x00, 0x00, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x15, 0x14, 0x06, 0x23, 0x22, 0x27, 0x01, 0x26, // ......#!...#"'.& + 0x34, 0x37, 0x01, 0x36, 0x33, 0x32, 0x16, 0x1d, 0x01, 0x21, 0x32, 0x16, 0x12, 0x10, 0x2e, 0x01, // 47.632...!2..... 0x20, 0x0e, 0x01, 0x10, 0x1e, 0x01, 0x20, 0x36, 0x00, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, // ..... 6.... $.. - 0x12, 0x24, 0x20, 0x04, 0x04, 0x80, 0x09, 0xfe, 0xc0, 0x09, 0x0e, 0x0d, 0x13, 0xfe, 0xa0, 0x0d, // .$ ............. - 0x13, 0x13, 0x0d, 0x01, 0x60, 0x12, 0x0e, 0x0c, 0x0c, 0x01, 0x3f, 0xa9, 0x92, 0xfa, 0xfe, 0xd8, // ....`.....?..... - 0xfa, 0x92, 0x92, 0xfa, 0x01, 0x28, 0xfa, 0x01, 0x72, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, // .....(..r....^.. - 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x02, 0x8e, 0x1c, 0x09, 0xfe, 0xc0, 0x09, 0x13, // ...a...a........ - 0x0d, 0xc0, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0xc0, 0x0e, 0x12, 0x0a, 0xfe, 0xc1, 0xab, 0x01, 0x28, // ...............( - 0xfa, 0x92, 0x92, 0xfa, 0xfe, 0xd8, 0xfa, 0x92, 0x92, 0x02, 0x5f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, // .........._.^... - 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // ..a...a......... - 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x19, 0x00, 0x25, 0x00, 0x31, 0x00, 0x00, 0x01, 0x15, // .........%.1.... - 0x14, 0x06, 0x23, 0x21, 0x15, 0x14, 0x06, 0x23, 0x22, 0x27, 0x01, 0x26, 0x34, 0x37, 0x01, 0x36, // ..#!...#"'.&47.6 - 0x33, 0x32, 0x16, 0x1d, 0x01, 0x21, 0x32, 0x16, 0x12, 0x10, 0x2e, 0x01, 0x20, 0x0e, 0x01, 0x10, // 32...!2..... ... - 0x1e, 0x01, 0x20, 0x36, 0x00, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, // .. 6.... $...$ . - 0x04, 0x80, 0x13, 0x0d, 0xfe, 0xa0, 0x12, 0x0e, 0x0c, 0x0c, 0xfe, 0xc1, 0x09, 0x09, 0x01, 0x40, // ...............@ - 0x09, 0x0e, 0x0d, 0x13, 0x01, 0x60, 0x0d, 0x13, 0xa0, 0x92, 0xfa, 0xfe, 0xd8, 0xfa, 0x92, 0x92, // .....`.......... - 0xfa, 0x01, 0x28, 0xfa, 0x01, 0x72, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, // ..(..r....^..... - 0x61, 0x01, 0xa2, 0x01, 0x61, 0x02, 0xe0, 0xc0, 0x0d, 0x13, 0xc0, 0x0e, 0x12, 0x0a, 0x01, 0x3f, // a...a..........? - 0x09, 0x1c, 0x09, 0x01, 0x40, 0x09, 0x13, 0x0d, 0xc0, 0x13, 0xfe, 0xff, 0x01, 0x28, 0xfa, 0x92, // ....@........(.. - 0x92, 0xfa, 0xfe, 0xd8, 0xfa, 0x92, 0x92, 0x02, 0x5f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, // ........_.^..... - 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // a...a........... - 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, 0x23, 0x22, // ......./......#" - 0x27, 0x01, 0x26, 0x34, 0x37, 0x01, 0x36, 0x33, 0x32, 0x16, 0x01, 0x11, 0x34, 0x26, 0x23, 0x21, // '.&47.632...4&#! - 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, // ".....3!26....#! - 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x04, 0x00, 0x26, 0x1a, 0x14, 0x11, // "&5.463!2...&... - 0xfe, 0x40, 0x1b, 0x1b, 0x01, 0xc0, 0x11, 0x14, 0x1a, 0x26, 0x01, 0x00, 0x13, 0x0d, 0xfc, 0x40, // .@.......&.....@ - 0x0d, 0x13, 0x13, 0x0d, 0x03, 0xc0, 0x0d, 0x13, 0x01, 0x00, 0xa9, 0x77, 0xfc, 0x40, 0x77, 0xa9, // ...........w.@w. - 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0x03, 0xc0, 0xfd, 0x80, 0x1a, 0x26, 0x0c, 0x01, 0x40, 0x13, // .w..w......&..@. - 0x42, 0x13, 0x01, 0x40, 0x0c, 0x26, 0xfc, 0xc6, 0x03, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xfc, 0x40, // B..@.&.........@ - 0x0d, 0x13, 0x13, 0x03, 0xcd, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0xa9, // ......@w..w..w.. - 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x07, 0x00, 0x13, 0x00, 0x1f, // ................ - 0x00, 0x00, 0x00, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x12, 0x20, 0x0e, 0x01, 0x10, 0x1e, // ....."&462. .... - 0x01, 0x20, 0x3e, 0x01, 0x10, 0x26, 0x04, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, // . >..&.... $...$ - 0x20, 0x04, 0x04, 0x00, 0x96, 0xd4, 0x96, 0x96, 0xd4, 0x2a, 0xfe, 0xd8, 0xfa, 0x92, 0x92, 0xfa, // ........*...... - 0x01, 0x28, 0xfa, 0x92, 0x92, 0x01, 0x72, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, // .(....r....^.... - 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x02, 0xea, 0xd4, 0x96, 0x96, 0xd4, 0x96, 0x01, 0x20, 0x92, // .a...a........ . - 0xfa, 0xfe, 0xd8, 0xfa, 0x92, 0x92, 0xfa, 0x01, 0x28, 0xfa, 0xbd, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, // ........(...^... - 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // ..a...a......... - 0xff, 0x00, 0x06, 0x5d, 0x05, 0xe0, 0x00, 0x15, 0x00, 0x36, 0x00, 0x00, 0x01, 0x17, 0x06, 0x04, // ...].....6...... - 0x23, 0x22, 0x24, 0x02, 0x35, 0x34, 0x12, 0x37, 0x17, 0x0e, 0x01, 0x15, 0x14, 0x00, 0x33, 0x32, // #"$.54.7......32 - 0x3e, 0x01, 0x25, 0x17, 0x05, 0x06, 0x23, 0x22, 0x27, 0x03, 0x21, 0x22, 0x26, 0x27, 0x03, 0x26, // >.%...#"'.!"&'.& - 0x37, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x27, 0x13, 0x21, 0x15, 0x21, 0x17, 0x21, // 7>.32....'.!.!.! - 0x32, 0x17, 0x13, 0x03, 0xff, 0x66, 0x3a, 0xfe, 0xd0, 0xbb, 0x9c, 0xfe, 0xf7, 0x9b, 0xd1, 0xaa, // 2....f:......... - 0x11, 0x7a, 0x92, 0x01, 0x07, 0xb9, 0x7e, 0xd5, 0x75, 0x02, 0x1b, 0x3a, 0xff, 0x00, 0x0d, 0x10, // .z....~.u..:.... - 0x28, 0x11, 0xef, 0xfe, 0x28, 0x18, 0x25, 0x03, 0x60, 0x02, 0x08, 0x0e, 0x56, 0x36, 0x42, 0x5e, // (...(.%.`...V6B^ - 0x68, 0x44, 0x25, 0x01, 0xa7, 0xfe, 0x69, 0x10, 0x01, 0xc7, 0x28, 0x11, 0xe4, 0x01, 0x5d, 0xcc, // hD%...i...(...]. - 0xb3, 0xde, 0x9b, 0x01, 0x09, 0x9c, 0xb5, 0x01, 0x2a, 0x3e, 0x83, 0x36, 0xdf, 0x85, 0xb9, 0xfe, // ........*>.6.... - 0xf9, 0x82, 0xdd, 0x1a, 0x72, 0x80, 0x07, 0x23, 0x01, 0xdd, 0x21, 0x18, 0x03, 0x0b, 0x10, 0x1a, // ....r..#..!..... - 0x33, 0x3f, 0x5e, 0x42, 0x45, 0x61, 0x07, 0xfe, 0xdf, 0x80, 0x80, 0x23, 0xfe, 0x39, 0x00, 0x00, // 3?^BEa.....#.9.. - 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x3b, 0x00, 0x4b, 0x00, 0x00, // ...........;.K.. - 0x01, 0x36, 0x27, 0x26, 0x07, 0x0e, 0x04, 0x07, 0x36, 0x16, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, // .6'&....6....... - 0x27, 0x2e, 0x03, 0x27, 0x26, 0x27, 0x2e, 0x01, 0x27, 0x26, 0x07, 0x0e, 0x01, 0x07, 0x15, 0x1e, // '..'&'..'&...... - 0x01, 0x17, 0x16, 0x36, 0x16, 0x17, 0x1e, 0x02, 0x17, 0x16, 0x17, 0x16, 0x17, 0x16, 0x17, 0x16, // ...6............ - 0x36, 0x37, 0x36, 0x37, 0x36, 0x12, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, // 67676.....#!"&5. - 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x04, 0xe6, 0x10, 0x25, 0x34, 0x87, 0x11, 0x30, 0x43, 0x3e, // 463!2....%4..0C> - 0x39, 0x10, 0x50, 0x43, 0x07, 0x05, 0x2f, 0x2b, 0x1c, 0x2c, 0x2b, 0x17, 0x1d, 0x09, 0x0b, 0x03, // 9.PC../+.,+..... - 0x17, 0x0b, 0x0c, 0x2f, 0x1b, 0x39, 0x46, 0x36, 0xa5, 0x28, 0x10, 0x13, 0x0c, 0x15, 0x43, 0x31, // .../.9F6.(....C1 - 0x11, 0x0b, 0x0f, 0x0f, 0x05, 0x11, 0x24, 0x24, 0x15, 0x2a, 0x3d, 0x2b, 0x54, 0x22, 0x83, 0x77, // ......$$.*=+T".w - 0x68, 0x89, 0x01, 0x28, 0xa9, 0x77, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, // h..(.w.@w..w..w. - 0x03, 0x83, 0x55, 0x2f, 0x41, 0x14, 0x03, 0x13, 0x2a, 0x37, 0x55, 0x31, 0x07, 0x2e, 0x4c, 0x34, // ..U/A...*7U1..L4 - 0x5b, 0x4e, 0x15, 0x20, 0x2e, 0x18, 0x51, 0x41, 0x67, 0x14, 0x81, 0x23, 0x25, 0x40, 0x08, 0x10, // [N. ..QAg..#%@.. - 0x29, 0x20, 0x94, 0x1c, 0x07, 0x08, 0x24, 0x02, 0x03, 0x17, 0x02, 0x1d, 0x12, 0x29, 0x37, 0x0d, // ) ....$......)7. - 0x2e, 0x8d, 0x92, 0x33, 0x63, 0x1a, 0x0c, 0x15, 0x15, 0x4d, 0xa0, 0x8b, 0x01, 0x33, 0x01, 0x26, // ...3c....M...3.& - 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0xa9, 0x00, 0x00, 0x01, 0x00, 0x00, // .@w..w..w....... - 0x00, 0x00, 0x04, 0x80, 0x05, 0x80, 0x00, 0x44, 0x00, 0x00, 0x01, 0x14, 0x02, 0x04, 0x2b, 0x01, // .......D......+. - 0x22, 0x26, 0x35, 0x11, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x3d, 0x01, 0x34, 0x3f, 0x01, 0x35, // "&5...#"'&=.4?.5 - 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x3d, 0x01, 0x34, 0x3f, 0x01, 0x35, 0x34, 0x36, 0x3b, 0x01, // ..#"'&=.4?.546;. - 0x32, 0x16, 0x1d, 0x01, 0x25, 0x36, 0x16, 0x1d, 0x01, 0x14, 0x07, 0x05, 0x15, 0x25, 0x36, 0x16, // 2...%6.......%6. - 0x1d, 0x01, 0x14, 0x07, 0x05, 0x11, 0x36, 0x00, 0x35, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x04, // ......6.546;.2.. - 0x80, 0xbd, 0xfe, 0xbc, 0xbf, 0xa0, 0x0e, 0x12, 0xd7, 0x03, 0x06, 0x0a, 0x09, 0x0d, 0x17, 0xe9, // ................ - 0xd7, 0x03, 0x06, 0x0a, 0x09, 0x0d, 0x17, 0xe9, 0x12, 0x0e, 0xa0, 0x0e, 0x12, 0x01, 0x77, 0x0f, // ..............w. - 0x1a, 0x17, 0xfe, 0x77, 0x01, 0x77, 0x0f, 0x1a, 0x17, 0xfe, 0x77, 0xbc, 0x01, 0x04, 0x12, 0x0e, // ...w.w....w..... - 0xa0, 0x0e, 0x12, 0x02, 0xc0, 0xbf, 0xfe, 0xbc, 0xbd, 0x12, 0x0e, 0x02, 0x63, 0x42, 0x01, 0x06, // ............cB.. - 0x0a, 0x10, 0x80, 0x17, 0x08, 0x47, 0x5d, 0x42, 0x01, 0x06, 0x0a, 0x10, 0x80, 0x17, 0x08, 0x47, // .....G]B.......G - 0xfa, 0x0e, 0x12, 0x12, 0x0e, 0xb5, 0x74, 0x05, 0x14, 0x10, 0x80, 0x17, 0x08, 0x79, 0x5d, 0x74, // ......t......y]t - 0x05, 0x14, 0x10, 0x80, 0x17, 0x08, 0x79, 0xfe, 0x19, 0x0d, 0x01, 0x14, 0xbe, 0x0e, 0x12, 0x12, // ......y......... - 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x83, 0xdd, 0xb2, 0x75, 0x64, 0x5f, 0x0f, 0x3c, 0xf5, // ..........ud_.<. - 0x00, 0x0b, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xce, 0x8c, 0xf1, 0xdb, 0x00, 0x00, 0x00, 0x00, // ................ - 0xce, 0x8c, 0xf1, 0xdb, 0xff, 0xff, 0xff, 0x00, 0x07, 0x80, 0x06, 0x00, 0x00, 0x00, 0x00, 0x08, // ................ - 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x06, 0x00, 0xfe, 0xdd, // ................ - 0x00, 0x00, 0x07, 0x80, 0xff, 0xff, 0xff, 0xff, 0x07, 0x80, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, // ................ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8d, 0x03, 0x80, 0x00, 0x70, // ...............p - 0x00, 0x00, 0x00, 0x00, 0x02, 0x55, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, // .....U.......... - 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ................ - 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ................ - 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ................ - 0x01, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x01, 0x33, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, // .........3...U.. - 0x01, 0x33, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // .3.............. - 0x07, 0x00, 0x00, 0x00, 0x01, 0xf4, 0x00, 0x00, 0x07, 0x00, 0x00, 0x5d, 0x06, 0x00, 0x00, 0x00, // ...........].... - 0x06, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, // ................ - 0x06, 0x80, 0x00, 0x00, 0x05, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, // ................ - 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x79, 0x05, 0x80, 0x00, 0x6e, // ...........y...n - 0x06, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ................ - 0x06, 0x00, 0x00, 0x00, 0x05, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x1a, 0x05, 0x00, 0x00, 0x00, // ................ - 0x06, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x32, 0x06, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // .......2........ - 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ - 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x40, // ...............@ - 0x06, 0x80, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, // ................ - 0x05, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, // ................ - 0x06, 0x80, 0x00, 0x0a, 0x05, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, // ................ - 0x06, 0x80, 0x00, 0x00, 0x05, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ................ - 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ................ - 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ................ - 0x07, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // ................ - 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, // ................ - 0x06, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ................ - 0x06, 0x80, 0x00, 0x7a, 0x05, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ...z............ - 0x06, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0x02, 0x00, 0x01, // ................ - 0x04, 0x80, 0x00, 0x35, 0x04, 0x80, 0x00, 0x75, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ...5...u........ - 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ - 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ - 0x06, 0x00, 0x00, 0x40, 0x06, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x35, 0x06, 0x80, 0x00, 0x35, // ...@.......5...5 - 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0d, 0x05, 0x80, 0x00, 0x00, // ................ - 0x05, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x7a, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // .......z........ - 0x07, 0x00, 0x00, 0x00, 0x05, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ................ - 0x07, 0x00, 0x00, 0x10, 0x05, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ................ - 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x35, 0x06, 0x80, 0x00, 0x35, // ...........5...5 - 0x07, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, // ................ - 0x03, 0x00, 0x00, 0x40, 0x07, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ...@............ - 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, // ................ - 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, // ................ - 0x07, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, // ................ - 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ - 0x06, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x80, 0x00, 0x00, 0x05, 0x80, 0x00, 0x00, // ................ - 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x2c, 0x03, 0x00, 0x00, 0x00, // ...........,.... - 0x06, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x05, 0x80, 0x00, 0x00, // ................ - 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x02, // ................ - 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ - 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ - 0x06, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x15, 0x07, 0x00, 0x00, 0x00, 0x05, 0x80, 0x00, 0x05, // ................ - 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x10, // ................ - 0x07, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x73, 0x07, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x00, // .......s........ - 0x05, 0x80, 0x00, 0x04, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ - 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x0f, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ - 0x06, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x1b, 0x07, 0x00, 0x00, 0x40, 0x06, 0x00, 0x00, 0x00, // ...........@.... - 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, // ................ - 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x80, 0x00, 0x40, 0x02, 0x80, 0x00, 0x00, // ...........@.... - 0x06, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // ................ - 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x28, // ...............( - 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x01, // ................ - 0x07, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // ................ - 0x07, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x05, 0x80, 0x00, 0x00, // ................ - 0x05, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, // ................ - 0x05, 0x80, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x80, 0x00, 0x00, 0x05, 0x80, 0x00, 0x00, // ................ - 0x07, 0x80, 0x00, 0x40, 0x07, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x40, // ...@...........@ - 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x2d, 0x04, 0x00, 0x00, 0x0d, // ...........-.... - 0x04, 0x80, 0x00, 0x4d, 0x04, 0x80, 0x00, 0x4d, 0x02, 0x80, 0x00, 0x2d, 0x02, 0x80, 0x00, 0x0d, // ...M...M...-.... - 0x04, 0x80, 0x00, 0x4d, 0x04, 0x80, 0x00, 0x4d, 0x07, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, // ...M...M........ - 0x04, 0x80, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, // ................ - 0x06, 0x80, 0x00, 0x00, 0x06, 0x20, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ..... .......... - 0x06, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, // ................ - 0x04, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ - 0x07, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x40, 0x07, 0x00, 0x00, 0x40, // ...........@...@ - 0x06, 0x80, 0x00, 0x0d, 0x07, 0x80, 0x00, 0x2d, 0x07, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x02, // .......-........ - 0x05, 0x80, 0x00, 0x02, 0x06, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, // ................ - 0x04, 0x00, 0x00, 0x60, 0x02, 0x80, 0x00, 0x00, 0x02, 0x80, 0x00, 0x62, 0x06, 0x00, 0x00, 0x05, // ...`.......b.... - 0x06, 0x00, 0x00, 0x05, 0x07, 0x80, 0x00, 0x01, 0x06, 0x80, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, // ................ - 0x05, 0x80, 0x00, 0x0d, 0x05, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x05, 0x80, 0x00, 0x03, // ................ - 0x06, 0x80, 0x00, 0x24, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ...$............ - 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x0c, // ................ - 0x07, 0x00, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x80, 0x00, 0x00, // ................ - 0x01, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x36, // ...............6 - 0x06, 0x00, 0x00, 0x00, 0x05, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x03, // ................ - 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ - 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ - 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x34, 0x03, 0x82, 0x00, 0x00, // ...........4.... - 0x04, 0x03, 0x00, 0x04, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x38, // ...............8 - 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x22, 0x06, 0x80, 0x00, 0x22, // ..........."..." - 0x07, 0x00, 0x00, 0x22, 0x07, 0x00, 0x00, 0x22, 0x06, 0x00, 0x00, 0x22, 0x06, 0x00, 0x00, 0x22, // ..."..."..."..." - 0x06, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x1b, // ................ - 0x05, 0x80, 0x00, 0x05, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x40, // ...............@ - 0x05, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ - 0x05, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x4e, 0x06, 0x00, 0x00, 0x00, // ...........N.... - 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x07, 0x00, 0x00, 0x40, 0x07, 0x00, 0x00, 0x00, // ...........@.... - 0x05, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x05, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0b, // ................ - 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ - 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x2c, // ..............., - 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x40, 0x06, 0x80, 0x00, 0x20, 0x07, 0x80, 0xff, 0xff, // .......@... .... - 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x80, 0x00, 0x00, 0x05, 0x00, 0x00, 0x15, // ................ - 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ - 0x06, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ................ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x16, 0x00, 0x16, 0x00, 0x16, 0x00, 0x16, // ................ - 0x00, 0x16, 0x00, 0x16, 0x00, 0x16, 0x00, 0x16, 0x00, 0x16, 0x00, 0x16, 0x00, 0x16, 0x00, 0x16, // ................ - 0x00, 0x16, 0x00, 0x16, 0x00, 0x16, 0x00, 0x16, 0x00, 0x16, 0x00, 0x16, 0x00, 0x16, 0x00, 0x16, // ................ - 0x00, 0x16, 0x00, 0x16, 0x00, 0x16, 0x00, 0x16, 0x00, 0x16, 0x00, 0x1e, 0x00, 0x50, 0x00, 0x92, // .............P.. - 0x00, 0xd4, 0x01, 0x42, 0x01, 0x70, 0x01, 0xae, 0x02, 0x00, 0x02, 0x3c, 0x03, 0x24, 0x03, 0x82, // ...B.p.....<.$.. - 0x04, 0x48, 0x04, 0xce, 0x04, 0xfa, 0x05, 0x3c, 0x05, 0xa6, 0x05, 0xfc, 0x06, 0x54, 0x06, 0xc4, // .H.....<.....T.. - 0x07, 0x66, 0x07, 0xfc, 0x08, 0x54, 0x08, 0x92, 0x08, 0xe0, 0x09, 0x48, 0x09, 0xa8, 0x09, 0xfe, // .f...T.....H.... - 0x0a, 0x52, 0x0a, 0x90, 0x0a, 0xda, 0x0b, 0x2c, 0x0b, 0x9a, 0x0c, 0x44, 0x0c, 0x78, 0x0c, 0xca, // .R.....,...D.x.. - 0x0d, 0x36, 0x0d, 0x5c, 0x0d, 0xa4, 0x0e, 0x44, 0x0e, 0xa8, 0x0f, 0x16, 0x0f, 0x4c, 0x0f, 0xa6, // .6.....D.....L.. - 0x10, 0x58, 0x10, 0x8a, 0x10, 0xe2, 0x11, 0x2a, 0x11, 0xaa, 0x12, 0x44, 0x12, 0xb6, 0x13, 0x78, // .X.....*...D...x - 0x14, 0x38, 0x14, 0x94, 0x14, 0xf0, 0x15, 0x4a, 0x15, 0xa4, 0x16, 0x4e, 0x16, 0xc0, 0x17, 0x32, // .8.....J...N...2 - 0x17, 0x66, 0x17, 0xb2, 0x17, 0xf6, 0x18, 0x24, 0x18, 0x50, 0x18, 0x98, 0x19, 0x10, 0x19, 0x8e, // .f.....$.P...... - 0x19, 0xf8, 0x1a, 0x60, 0x1a, 0x90, 0x1a, 0xd6, 0x1b, 0x06, 0x1b, 0x22, 0x1b, 0x56, 0x1b, 0x74, // ...`.......".V.t - 0x1b, 0xa4, 0x1b, 0xea, 0x1c, 0x1a, 0x1c, 0x4c, 0x1c, 0x76, 0x1c, 0xa4, 0x1c, 0xf0, 0x1d, 0x24, // .......L.v.....$ - 0x1d, 0x7e, 0x1d, 0xc0, 0x1e, 0x2a, 0x1e, 0x82, 0x1f, 0x02, 0x1f, 0x68, 0x1f, 0xbc, 0x1f, 0xfe, // .~...*.....h.... - 0x20, 0x36, 0x20, 0x6e, 0x20, 0xa8, 0x20, 0xe2, 0x21, 0x26, 0x21, 0x76, 0x21, 0xc6, 0x21, 0xfc, // 6 n . .!&!v!.!. - 0x22, 0x18, 0x22, 0x70, 0x22, 0xbc, 0x23, 0x26, 0x23, 0x98, 0x23, 0xe2, 0x24, 0x38, 0x24, 0xc0, // "."p".#&#.#.$8$. - 0x25, 0x10, 0x25, 0x66, 0x26, 0x20, 0x26, 0xbc, 0x26, 0xfc, 0x27, 0x60, 0x27, 0x8c, 0x27, 0xbc, // %.%f& &.&.'`'.'. - 0x28, 0x2a, 0x28, 0x82, 0x28, 0xa6, 0x28, 0xec, 0x29, 0x22, 0x29, 0x58, 0x29, 0xac, 0x2a, 0x0c, // (*(.(.(.)")X).*. - 0x2a, 0x42, 0x2a, 0xa6, 0x2b, 0x0e, 0x2c, 0x6e, 0x2c, 0xe4, 0x2d, 0x7a, 0x2e, 0x14, 0x2e, 0x3a, // *B*.+.,n,.-z...: - 0x2e, 0x92, 0x2e, 0xf0, 0x2f, 0x40, 0x2f, 0x88, 0x2f, 0xe6, 0x30, 0x44, 0x30, 0xac, 0x31, 0x7e, // ..../@/./.0D0.1~ - 0x31, 0xe2, 0x32, 0x6c, 0x32, 0xe0, 0x33, 0x12, 0x33, 0x52, 0x33, 0xcc, 0x34, 0x1a, 0x34, 0x3e, // 1.2l2.3.3R3.4.4> - 0x34, 0xbc, 0x34, 0xf6, 0x35, 0x38, 0x35, 0x9c, 0x36, 0x00, 0x36, 0x56, 0x36, 0xac, 0x37, 0x22, // 4.4.585.6.6V6.7" - 0x37, 0xb2, 0x38, 0x50, 0x38, 0xe0, 0x39, 0x7c, 0x39, 0xca, 0x3a, 0x16, 0x3a, 0x62, 0x3a, 0xb0, // 7.8P8.9|9.:.:b:. - 0x3d, 0xbe, 0x3e, 0x0e, 0x3e, 0x6c, 0x3e, 0x96, 0x3e, 0xe0, 0x3f, 0x52, 0x3f, 0xd8, 0x40, 0x6c, // =.>.>l>.>.?R?.@l - 0x40, 0x9a, 0x40, 0xd4, 0x41, 0xb2, 0x42, 0x18, 0x42, 0x78, 0x42, 0xe2, 0x43, 0x00, 0x43, 0x44, // @.@.A.B.BxB.C.CD - 0x43, 0xae, 0x44, 0x5a, 0x44, 0xee, 0x45, 0x96, 0x46, 0x72, 0x46, 0xd4, 0x47, 0x44, 0x47, 0xb2, // C.DZD.E.FrF.GDG. - 0x48, 0x1e, 0x48, 0xae, 0x49, 0x46, 0x49, 0xa2, 0x49, 0xc0, 0x49, 0xde, 0x49, 0xfc, 0x4a, 0x1a, // H.H.IFI.I.I.I.J. - 0x4a, 0x4c, 0x4a, 0x80, 0x4a, 0x9e, 0x4a, 0xbc, 0x4b, 0x14, 0x4b, 0x5c, 0x4b, 0xae, 0x4c, 0x4a, // JLJ.J.J.K.K.K.LJ - 0x4c, 0xc8, 0x4d, 0x2a, 0x4d, 0xbe, 0x4d, 0xf8, 0x4e, 0x68, 0x4e, 0xec, 0x4f, 0x46, 0x4f, 0xc8, // L.M*M.M.NhN.OFO. - 0x50, 0x18, 0x50, 0x6a, 0x50, 0xbe, 0x51, 0x44, 0x51, 0xb2, 0x51, 0xee, 0x52, 0x32, 0x52, 0x6a, // P.PjP.QDQ.Q.R2Rj - 0x52, 0xc8, 0x53, 0x32, 0x54, 0xcc, 0x56, 0x08, 0x56, 0x92, 0x56, 0xfa, 0x57, 0x4c, 0x57, 0x78, // R.S2T.V.V.V.WLWx - 0x57, 0xc4, 0x58, 0x10, 0x58, 0x5c, 0x58, 0xa8, 0x58, 0xf4, 0x59, 0x40, 0x59, 0x6a, 0x59, 0x94, // W.X.X.X.X.Y@YjY. - 0x59, 0xbe, 0x59, 0xe8, 0x5a, 0x30, 0x5a, 0x7e, 0x5a, 0xbc, 0x5b, 0x04, 0x5b, 0x36, 0x5b, 0x92, // Y.Y.Z0Z~Z.[.[6[. - 0x5b, 0xee, 0x5c, 0x56, 0x5c, 0x74, 0x5c, 0xb8, 0x5d, 0x36, 0x5d, 0x78, 0x5d, 0xe2, 0x5e, 0x40, // [..V.t..]6]x].^@ - 0x5e, 0x88, 0x5e, 0xf6, 0x5f, 0x64, 0x5f, 0xc2, 0x60, 0x24, 0x61, 0x06, 0x61, 0x84, 0x62, 0x28, // ^.^._d_.`$a.a.b( - 0x62, 0x68, 0x62, 0xd0, 0x63, 0x32, 0x63, 0x80, 0x63, 0xaa, 0x63, 0xfe, 0x64, 0x6c, 0x65, 0x3c, // bhb.c2c.c.c.dle< - 0x65, 0x94, 0x65, 0xd6, 0x66, 0x0a, 0x66, 0x74, 0x66, 0xdc, 0x67, 0x0c, 0x67, 0x96, 0x67, 0xe6, // e.e.f.ftf.g.g.g. - 0x68, 0x58, 0x68, 0x90, 0x68, 0xf4, 0x69, 0x62, 0x69, 0xb2, 0x69, 0xe0, 0x6a, 0x20, 0x6a, 0x60, // hXh.h.ibi.i.j j` - 0x6a, 0xa2, 0x6a, 0xe2, 0x6b, 0x12, 0x6b, 0x38, 0x6b, 0xb2, 0x6b, 0xea, 0x6c, 0x4c, 0x6c, 0x90, // j.j.k.k8k.k.lLl. - 0x6c, 0xd2, 0x6d, 0x40, 0x6d, 0x76, 0x6d, 0xcc, 0x6d, 0xfe, 0x6e, 0x46, 0x6e, 0x78, 0x6e, 0xa8, // l.m@mvm.m.nFnxn. - 0x6e, 0xe6, 0x6f, 0x3c, 0x6f, 0x80, 0x6f, 0xd2, 0x70, 0x14, 0x70, 0x5e, 0x70, 0xa8, 0x70, 0xf2, // n.o..&.... $ + 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, 0x04, 0x00, 0x96, 0xd4, 0x96, 0x96, 0xd4, 0x2a, 0xfe, 0xd8, // ...$ ........*.. + 0xfa, 0x92, 0x92, 0xfa, 0x01, 0x28, 0xfa, 0x92, 0x92, 0x01, 0x72, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, // .....(....r....^ + 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x02, 0xea, 0xd4, 0x96, 0x96, 0xd4, // .....a...a...... + 0x96, 0x01, 0x20, 0x92, 0xfa, 0xfe, 0xd8, 0xfa, 0x92, 0x92, 0xfa, 0x01, 0x28, 0xfa, 0xbd, 0xfe, // .. .........(... + 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x00, 0x00, // ^.....a...a..... + 0x00, 0x02, 0x00, 0x00, 0xff, 0x00, 0x06, 0x5d, 0x05, 0xe0, 0x00, 0x15, 0x00, 0x36, 0x00, 0x00, // .......].....6.. + 0x01, 0x17, 0x06, 0x04, 0x23, 0x22, 0x24, 0x02, 0x35, 0x34, 0x12, 0x37, 0x17, 0x0e, 0x01, 0x15, // ....#"$.54.7.... + 0x14, 0x00, 0x33, 0x32, 0x3e, 0x01, 0x25, 0x17, 0x05, 0x06, 0x23, 0x22, 0x27, 0x03, 0x21, 0x22, // ..32>.%...#"'.!" + 0x26, 0x27, 0x03, 0x26, 0x37, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x27, 0x13, 0x21, // &'.&7>.32....'.! + 0x15, 0x21, 0x17, 0x21, 0x32, 0x17, 0x13, 0x03, 0xff, 0x66, 0x3a, 0xfe, 0xd0, 0xbb, 0x9c, 0xfe, // .!.!2....f:..... + 0xf7, 0x9b, 0xd1, 0xaa, 0x11, 0x7a, 0x92, 0x01, 0x07, 0xb9, 0x7e, 0xd5, 0x75, 0x02, 0x1b, 0x3a, // .....z....~.u..: + 0xff, 0x00, 0x0d, 0x10, 0x28, 0x11, 0xef, 0xfe, 0x28, 0x18, 0x25, 0x03, 0x60, 0x02, 0x08, 0x0e, // ....(...(.%.`... + 0x56, 0x36, 0x42, 0x5e, 0x68, 0x44, 0x25, 0x01, 0xa7, 0xfe, 0x69, 0x10, 0x01, 0xc7, 0x28, 0x11, // V6B^hD%...i...(. + 0xe4, 0x01, 0x5d, 0xcc, 0xb3, 0xde, 0x9b, 0x01, 0x09, 0x9c, 0xb5, 0x01, 0x2a, 0x3e, 0x83, 0x36, // ..].........*>.6 + 0xdf, 0x85, 0xb9, 0xfe, 0xf9, 0x82, 0xdd, 0x1a, 0x72, 0x80, 0x07, 0x23, 0x01, 0xdd, 0x21, 0x18, // ........r..#..!. + 0x03, 0x0b, 0x11, 0x19, 0x33, 0x3f, 0x5e, 0x42, 0x45, 0x61, 0x07, 0xfe, 0xdf, 0x80, 0x80, 0x23, // ....3?^BEa.....# + 0xfe, 0x39, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x23, // .9.............# + 0x00, 0x33, 0x00, 0x00, 0x01, 0x36, 0x27, 0x26, 0x03, 0x36, 0x33, 0x32, 0x07, 0x0e, 0x01, 0x23, // .3...6'&.632...# + 0x22, 0x27, 0x26, 0x27, 0x26, 0x07, 0x06, 0x07, 0x0e, 0x01, 0x07, 0x17, 0x36, 0x33, 0x32, 0x17, // "'&'&.......632. + 0x1e, 0x01, 0x17, 0x16, 0x33, 0x32, 0x13, 0x12, 0x13, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // ....32......#!"& + 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x05, 0x0c, 0x0a, 0xab, 0xe7, 0x51, 0x2c, 0x26, // 5.463!2......Q,& + 0x55, 0x0b, 0x04, 0x8c, 0x23, 0x2b, 0x27, 0x0d, 0x20, 0x1e, 0x82, 0x3b, 0x69, 0x1b, 0x6c, 0x1b, // U...#+'. ..;i.l. + 0x34, 0x4c, 0x0b, 0x39, 0x32, 0x0f, 0x3c, 0x0f, 0x44, 0x60, 0x9d, 0xe2, 0xdc, 0xfa, 0xa9, 0x77, // 4L.92.<.D`.....w + 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0x03, 0x82, 0xd8, 0x06, 0x08, 0xfe, // .@w..w..w....... + 0xf3, 0x13, 0x60, 0x39, 0xdc, 0xa9, 0x36, 0xc9, 0xbd, 0x0c, 0x07, 0x5d, 0x18, 0x60, 0x18, 0x43, // ..`9..6....].`.C + 0x34, 0xb3, 0x37, 0xdb, 0x37, 0xb3, 0x01, 0x26, 0x01, 0x1b, 0x01, 0x7f, 0xfc, 0x40, 0x77, 0xa9, // 4.7.7..&.....@w. + 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0xa9, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x04, 0x80, // .w..w........... + 0x05, 0x80, 0x00, 0x44, 0x00, 0x00, 0x01, 0x14, 0x02, 0x04, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, // ...D......+."&5. + 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x3d, 0x01, 0x34, 0x3f, 0x01, 0x35, 0x07, 0x06, 0x23, 0x22, // ..#"'&=.4?.5..#" + 0x27, 0x26, 0x3d, 0x01, 0x34, 0x3f, 0x01, 0x35, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x1d, 0x01, // '&=.4?.546;.2... + 0x25, 0x36, 0x16, 0x1d, 0x01, 0x14, 0x07, 0x05, 0x15, 0x25, 0x36, 0x16, 0x1d, 0x01, 0x14, 0x07, // %6.......%6..... + 0x05, 0x11, 0x36, 0x00, 0x35, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x04, 0x80, 0xbd, 0xfe, 0xbc, // ..6.546;.2...... + 0xbf, 0xa0, 0x0e, 0x12, 0xd7, 0x03, 0x06, 0x0a, 0x09, 0x0d, 0x17, 0xe9, 0xd7, 0x03, 0x06, 0x0a, // ................ + 0x09, 0x0d, 0x17, 0xe9, 0x12, 0x0e, 0xa0, 0x0e, 0x12, 0x01, 0x77, 0x0f, 0x1a, 0x17, 0xfe, 0x77, // ..........w....w + 0x01, 0x77, 0x0f, 0x1a, 0x17, 0xfe, 0x77, 0xbc, 0x01, 0x04, 0x12, 0x0e, 0xa0, 0x0e, 0x12, 0x02, // .w....w......... + 0xc0, 0xbf, 0xfe, 0xbc, 0xbd, 0x12, 0x0e, 0x02, 0x63, 0x42, 0x01, 0x06, 0x0a, 0x10, 0x80, 0x17, // ........cB...... + 0x08, 0x47, 0x5d, 0x42, 0x01, 0x06, 0x0a, 0x10, 0x80, 0x17, 0x08, 0x47, 0xfa, 0x0e, 0x12, 0x12, // .G]B.......G.... + 0x0e, 0xb5, 0x74, 0x05, 0x14, 0x10, 0x80, 0x17, 0x08, 0x79, 0x5d, 0x74, 0x05, 0x14, 0x10, 0x80, // ..t......y]t.... + 0x17, 0x08, 0x79, 0xfe, 0x19, 0x0d, 0x01, 0x14, 0xbe, 0x0e, 0x12, 0x12, 0x00, 0x03, 0x00, 0x00, // ..y............. + 0x00, 0x00, 0x05, 0x80, 0x05, 0x80, 0x00, 0x23, 0x00, 0x33, 0x00, 0x43, 0x00, 0x00, 0x01, 0x15, // .......#.3.C.... + 0x14, 0x06, 0x23, 0x21, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, 0x21, 0x22, 0x26, // ..#!...+."&5.!"& + 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x15, 0x11, 0x21, // =.463!.46;.2...! + 0x32, 0x16, 0x13, 0x11, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x33, 0x21, // 2...4&#!".....3! + 0x32, 0x36, 0x13, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, // 26....#!"&5.463! + 0x32, 0x16, 0x04, 0x80, 0x12, 0x0e, 0xfe, 0xa0, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0xfe, 0xa0, 0x0e, // 2.........@..... + 0x12, 0x12, 0x0e, 0x01, 0x60, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x01, 0x60, 0x0e, 0x12, 0x80, 0x5e, // ....`..@...`...^ + 0x42, 0xfc, 0xc0, 0x42, 0x5e, 0x5e, 0x42, 0x03, 0x40, 0x42, 0x5e, 0x80, 0xa9, 0x77, 0xfc, 0xc0, // B..B^^B.@B^..w.. + 0x77, 0xa9, 0xa9, 0x77, 0x03, 0x40, 0x77, 0xa9, 0x02, 0xe0, 0x40, 0x0e, 0x12, 0xfe, 0xa0, 0x0e, // w..w.@w...@..... + 0x12, 0x12, 0x0e, 0x01, 0x60, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x01, 0x60, 0x0e, 0x12, 0x12, 0x0e, // ....`..@...`.... + 0xfe, 0xa0, 0x12, 0xfe, 0x32, 0x03, 0x40, 0x42, 0x5e, 0x5e, 0x42, 0xfc, 0xc0, 0x42, 0x5e, 0x5e, // ....2.@B^^B..B^^ + 0x03, 0x82, 0xfc, 0xc0, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0x40, 0x77, 0xa9, 0xa9, 0x00, 0x00, 0x00, // ....w..w.@w..... + 0x00, 0x04, 0x00, 0x00, 0xff, 0x80, 0x08, 0x80, 0x05, 0x00, 0x00, 0x27, 0x00, 0x2f, 0x00, 0x3f, // ...........'./.? + 0x00, 0x50, 0x00, 0x00, 0x01, 0x06, 0x2b, 0x01, 0x35, 0x23, 0x22, 0x26, 0x35, 0x34, 0x37, 0x2e, // .P....+.5#"&547. + 0x01, 0x34, 0x36, 0x37, 0x26, 0x35, 0x34, 0x36, 0x3b, 0x01, 0x35, 0x33, 0x32, 0x17, 0x21, 0x1e, // .467&546;.532.!. + 0x01, 0x17, 0x1e, 0x02, 0x14, 0x0e, 0x01, 0x07, 0x0e, 0x01, 0x07, 0x37, 0x16, 0x14, 0x07, 0x17, // ...........7.... + 0x36, 0x34, 0x27, 0x01, 0x21, 0x06, 0x07, 0x22, 0x06, 0x0f, 0x01, 0x01, 0x0e, 0x01, 0x2b, 0x01, // 64'.!.."......+. + 0x03, 0x33, 0x32, 0x03, 0x23, 0x13, 0x33, 0x32, 0x16, 0x17, 0x01, 0x1e, 0x04, 0x33, 0x05, 0x21, // .32.#.32.....3.! + 0x26, 0x02, 0x6c, 0x6e, 0x9e, 0x80, 0x40, 0x0d, 0x13, 0x07, 0x3a, 0x4d, 0x4d, 0x3a, 0x07, 0x13, // &.ln..@...:MM:.. + 0x0d, 0x40, 0x80, 0x9e, 0x6e, 0x04, 0x59, 0x2a, 0x81, 0x10, 0x59, 0x7a, 0x2d, 0x2d, 0x7a, 0x59, // .@..n.Y*..Yz--zY + 0x10, 0x81, 0x2a, 0x06, 0x35, 0x35, 0x51, 0x44, 0x44, 0xfb, 0x55, 0x03, 0xf7, 0xd9, 0xef, 0x39, // ..*.55QDD.U....9 + 0x70, 0x1b, 0x1c, 0xfe, 0xe0, 0x1a, 0x59, 0x2d, 0x60, 0x5d, 0x1d, 0x9d, 0x9d, 0x1d, 0x5d, 0x60, // p.....Y-`]....]` + 0x2e, 0x58, 0x1a, 0x01, 0x20, 0x04, 0x0e, 0x2f, 0x32, 0x49, 0x24, 0x01, 0xc8, 0xfc, 0x09, 0x74, // .X.. ../2I$....t + 0x01, 0xa0, 0x40, 0x40, 0x2f, 0x21, 0x18, 0x19, 0x02, 0x11, 0x18, 0x11, 0x02, 0x19, 0x18, 0x21, // ..@@/!.........! + 0x2f, 0x40, 0x40, 0x07, 0x16, 0x03, 0x0f, 0x33, 0x2c, 0x24, 0x2c, 0x33, 0x0f, 0x03, 0x16, 0x07, // /@@....3,$,3.... + 0xfc, 0x24, 0x70, 0x24, 0x1e, 0x30, 0x94, 0x30, 0xfe, 0xd6, 0x26, 0x2a, 0x30, 0x18, 0x18, 0xfe, // .$p$.0.0..&*0... + 0xe0, 0x1a, 0x26, 0x01, 0xd0, 0x01, 0xe0, 0x01, 0xd0, 0x26, 0x1a, 0xfe, 0xe0, 0x04, 0x0d, 0x21, // ..&......&.....! + 0x19, 0x15, 0x50, 0x40, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x80, 0x06, 0x00, 0x00, 0x52, // ..P@...........R + 0x00, 0x56, 0x00, 0x00, 0x01, 0x32, 0x16, 0x15, 0x14, 0x0f, 0x01, 0x17, 0x16, 0x15, 0x14, 0x06, // .V...2.......... + 0x23, 0x22, 0x26, 0x2f, 0x01, 0x05, 0x17, 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x26, 0x2f, 0x01, // #"&/.......#"&/. + 0x07, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x3f, 0x01, 0x03, 0x07, 0x06, 0x23, 0x22, 0x26, // ..#"&546?....#"& + 0x35, 0x34, 0x36, 0x3f, 0x01, 0x27, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x1f, 0x01, 0x25, // 546?.'&54632...% + 0x27, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x1f, 0x01, 0x37, 0x36, 0x33, 0x32, 0x16, 0x15, // '&54632...7632.. + 0x14, 0x06, 0x0f, 0x01, 0x13, 0x37, 0x36, 0x01, 0x25, 0x03, 0x05, 0x05, 0xef, 0x3e, 0x53, 0x5d, // .....76.%....>S] + 0xac, 0x38, 0x07, 0x54, 0x3b, 0x2f, 0x4d, 0x0f, 0x37, 0xfe, 0xca, 0x37, 0x08, 0x54, 0x3c, 0x2f, // .8.T;/M.7..7.T.7%>...w.. + 0x77, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xe0, 0x1f, 0x21, 0x22, 0xc5, 0x35, 0x62, 0x42, // w.@w..w...!".5bB + 0x42, 0x62, 0x2f, 0xbe, 0x2f, 0x0c, 0x2a, 0x0a, 0x38, 0x28, 0x03, 0x40, 0x28, 0x38, 0x37, 0x29, // Bb/./.*.8(.@(87) + 0xfc, 0xc0, 0x28, 0x38, 0x3d, 0x25, 0x2f, 0xb5, 0x27, 0x03, 0x1c, 0x0e, 0x1c, 0x13, 0x18, 0x15, // ..(8=%/.'....... + 0x14, 0x15, 0x18, 0x13, 0x1c, 0x0e, 0x1c, 0x03, 0x01, 0x0b, 0x23, 0x3f, 0x05, 0x80, 0xa9, 0x77, // ..........#?...w + 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0xfb, 0xe0, 0x01, 0xb4, 0x23, 0x14, // .@w..w..w.....#. + 0x16, 0x7e, 0x24, 0x45, 0x45, 0x20, 0x79, 0x20, 0x08, 0x26, 0x08, 0xfe, 0x4c, 0x28, 0x38, 0x38, // .~$EE y .&..L(88 + 0x02, 0x65, 0x29, 0x3a, 0x38, 0x28, 0x25, 0x4f, 0x19, 0x20, 0x72, 0x1a, 0x02, 0x13, 0x09, 0x11, // .e):8(%O. r..... + 0x09, 0x0a, 0x05, 0x05, 0x0a, 0x09, 0x11, 0x09, 0x13, 0x02, 0xae, 0x17, 0x4f, 0x00, 0x00, 0x00, // ............O... + 0x00, 0x06, 0x00, 0x00, 0xff, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x05, 0x00, 0x3f, 0x00, 0x47, // .............?.G + 0x00, 0x51, 0x00, 0x61, 0x00, 0x71, 0x00, 0x00, 0x13, 0x34, 0x37, 0x01, 0x26, 0x02, 0x01, 0x14, // .Q.a.q...47.&... + 0x0e, 0x03, 0x07, 0x03, 0x01, 0x36, 0x37, 0x3e, 0x01, 0x26, 0x0f, 0x01, 0x26, 0x27, 0x26, 0x0e, // .....67>.&..&'&. + 0x01, 0x1e, 0x01, 0x1f, 0x01, 0x13, 0x03, 0x01, 0x36, 0x37, 0x3e, 0x01, 0x26, 0x0f, 0x01, 0x22, // ........67>.&.." + 0x26, 0x23, 0x36, 0x24, 0x33, 0x32, 0x04, 0x17, 0x23, 0x22, 0x06, 0x15, 0x14, 0x1e, 0x06, 0x17, // $32..#"...... + 0x16, 0x05, 0x13, 0x16, 0x17, 0x06, 0x23, 0x22, 0x27, 0x01, 0x16, 0x15, 0x14, 0x02, 0x07, 0x13, // ......#"'....... + 0x36, 0x35, 0x34, 0x00, 0x20, 0x04, 0x16, 0x12, 0x10, 0x02, 0x06, 0x04, 0x20, 0x24, 0x26, 0x02, // 654. ....... $&. + 0x10, 0x12, 0x36, 0x00, 0x20, 0x24, 0x36, 0x12, 0x10, 0x02, 0x26, 0x24, 0x20, 0x04, 0x06, 0x02, // ..6. $6...&$ ... + 0x10, 0x12, 0x16, 0x7f, 0x43, 0x01, 0x6f, 0xc4, 0xee, 0x05, 0x08, 0x05, 0x0f, 0x08, 0x1b, 0x04, // ....C.o......... + 0x4c, 0xfe, 0xea, 0x2e, 0x2a, 0x13, 0x0e, 0x13, 0x13, 0xcd, 0x4b, 0x7f, 0x0c, 0x11, 0x06, 0x03, // L...*.....K..... + 0x0f, 0x0c, 0x50, 0x78, 0xa8, 0xfe, 0xe8, 0x2e, 0x2a, 0x13, 0x0e, 0x13, 0x13, 0xcd, 0x07, 0x20, // ..Px....*...... + 0x0a, 0x69, 0x01, 0x53, 0xc6, 0x93, 0x01, 0x0b, 0x69, 0x0a, 0x37, 0x4a, 0x04, 0x04, 0x0c, 0x06, // .i.S....i.7J.... + 0x12, 0x07, 0x16, 0x03, 0x3f, 0xfe, 0x06, 0xed, 0x01, 0x04, 0x7e, 0x81, 0x70, 0x69, 0x03, 0x7b, // ....?.....~.pi.{ + 0x5f, 0xd0, 0xaf, 0xeb, 0x3b, 0xfc, 0xa2, 0x01, 0x6c, 0x01, 0x4c, 0xf0, 0x8e, 0x8e, 0xf0, 0xfe, // _...;...l.L..... + 0xb4, 0xfe, 0x94, 0xfe, 0xb4, 0xf0, 0x8e, 0x8e, 0xf0, 0x01, 0x55, 0x01, 0x5a, 0x01, 0x3d, 0xe5, // ..........U.Z.=. + 0x88, 0x88, 0xe5, 0xfe, 0xc3, 0xfe, 0xa6, 0xfe, 0xc3, 0xe5, 0x88, 0x88, 0xe5, 0x02, 0x80, 0xa3, // ................ + 0x96, 0xfc, 0x13, 0x5f, 0x01, 0x74, 0x01, 0x08, 0x13, 0x27, 0x3c, 0x1c, 0x5a, 0x0d, 0xff, 0x00, // ..._.t...'<.Z... + 0x03, 0x3a, 0x03, 0x05, 0x02, 0x21, 0x1d, 0x01, 0x0a, 0x01, 0x09, 0x01, 0x0c, 0x12, 0x13, 0x0e, // .:...!.......... + 0x01, 0x08, 0xfe, 0xb8, 0xfe, 0x08, 0x03, 0x40, 0x03, 0x05, 0x02, 0x21, 0x1d, 0x01, 0x0a, 0x01, // .......@...!.... + 0xa0, 0xbb, 0x6a, 0x60, 0x51, 0x37, 0x0c, 0x18, 0x13, 0x1b, 0x0f, 0x1e, 0x0c, 0x24, 0x05, 0x6b, // ..j`Q7.......$.k + 0xd3, 0xfd, 0x79, 0x06, 0x05, 0x2c, 0x20, 0x04, 0x52, 0xae, 0xc3, 0xd1, 0xfe, 0x9f, 0x66, 0x02, // ..y.., .R.....f. + 0xa6, 0xa9, 0x6b, 0x2a, 0x02, 0x34, 0x8e, 0xf0, 0xfe, 0xb4, 0xfe, 0x94, 0xfe, 0xb4, 0xf0, 0x8e, // ..k*.4.......... + 0x8e, 0xf0, 0x01, 0x4c, 0x01, 0x6c, 0x01, 0x4c, 0xf0, 0xf9, 0xb7, 0x88, 0xe5, 0x01, 0x3d, 0x01, // ...L.l.L......=. + 0x5a, 0x01, 0x3d, 0xe5, 0x88, 0x88, 0xe5, 0xfe, 0xc3, 0xfe, 0xa6, 0xfe, 0xc3, 0xe5, 0x00, 0x00, // Z.=............. + 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x07, 0x00, 0x06, 0x00, 0x00, 0x12, 0x00, 0x1b, 0x00, 0x00, // ................ + 0x01, 0x11, 0x05, 0x26, 0x24, 0x26, 0x35, 0x34, 0x36, 0x24, 0x37, 0x15, 0x06, 0x04, 0x15, 0x14, // ...&$&546$7..... + 0x04, 0x17, 0x11, 0x01, 0x13, 0x25, 0x37, 0x26, 0x27, 0x35, 0x04, 0x17, 0x04, 0x3e, 0xfe, 0xf0, // .....%7&'5...>.. + 0xe4, 0xfe, 0x8c, 0xd6, 0xc9, 0x01, 0x5d, 0xd9, 0xd9, 0xfe, 0xe9, 0x01, 0x35, 0xea, 0x03, 0xad, // ......].....5... + 0x25, 0xfd, 0xf3, 0x93, 0x77, 0xa1, 0x01, 0x15, 0xcc, 0x06, 0x00, 0xfa, 0x00, 0x80, 0x14, 0xa4, // %...w........... + 0xfd, 0x92, 0x8c, 0xf7, 0xa4, 0x1a, 0xac, 0x26, 0xe0, 0x8f, 0x98, 0xe6, 0x1e, 0x05, 0x50, 0xfe, // .......&......P. + 0x3f, 0xfe, 0x7a, 0x72, 0x53, 0x46, 0x1d, 0xac, 0x21, 0x7c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // ?.zrSF..!|...... + 0xff, 0x00, 0x07, 0x80, 0x06, 0x00, 0x00, 0x0c, 0x00, 0x26, 0x00, 0x30, 0x00, 0x00, 0x09, 0x01, // .........&.0.... + 0x15, 0x23, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x23, 0x35, 0x01, 0x21, 0x11, 0x33, 0x11, // .#..#!"&5#5.!.3. + 0x21, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x32, 0x16, 0x1d, 0x01, 0x21, // !.3.!.3.!.32...! + 0x35, 0x34, 0x36, 0x3b, 0x01, 0x05, 0x32, 0x16, 0x1d, 0x01, 0x21, 0x35, 0x34, 0x36, 0x33, 0x03, // 546;..2...!5463. + 0xc0, 0x03, 0xc0, 0x80, 0x29, 0x1c, 0xfa, 0x0a, 0x1c, 0x29, 0x80, 0x01, 0x00, 0x01, 0x00, 0x80, // ....)....)...... + 0x01, 0x00, 0x80, 0x01, 0x00, 0x80, 0x01, 0x00, 0x3b, 0x1c, 0x29, 0xf9, 0x80, 0x29, 0x1c, 0x3b, // ........;.)..).; + 0x06, 0x3b, 0x1c, 0x29, 0xf8, 0x80, 0x29, 0x1c, 0x06, 0x00, 0xfe, 0x80, 0x80, 0x1a, 0x26, 0x26, // .;.)..).......&& + 0x1a, 0x80, 0xff, 0x00, 0xfd, 0x00, 0x03, 0x00, 0xfd, 0x00, 0x03, 0x00, 0xfd, 0x00, 0x03, 0x00, // ................ + 0xfd, 0x00, 0x26, 0x1a, 0x40, 0x40, 0x1a, 0x26, 0xc0, 0x26, 0x1a, 0x80, 0x80, 0x1a, 0x26, 0x00, // ..&.@@.&.&....&. + 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x09, 0x00, 0x05, 0x80, 0x00, 0x0d, 0x00, 0x36, 0x00, 0x00, // .............6.. + 0x01, 0x13, 0x16, 0x06, 0x04, 0x20, 0x24, 0x26, 0x37, 0x13, 0x05, 0x16, 0x32, 0x37, 0x00, 0x14, // ..... $&7...27.. + 0x07, 0x01, 0x06, 0x22, 0x27, 0x25, 0x0e, 0x01, 0x07, 0x16, 0x15, 0x14, 0x07, 0x13, 0x16, 0x07, // ..."'%.......... + 0x06, 0x2b, 0x01, 0x22, 0x27, 0x26, 0x37, 0x13, 0x26, 0x35, 0x34, 0x37, 0x36, 0x37, 0x25, 0x26, // .+."'&7.&54767%& + 0x34, 0x37, 0x01, 0x36, 0x32, 0x17, 0x01, 0x06, 0xee, 0x12, 0x04, 0xac, 0xfe, 0xd6, 0xfe, 0xa4, // 47.62........... + 0xfe, 0xd6, 0xac, 0x04, 0x12, 0x02, 0x3e, 0x16, 0x34, 0x16, 0x04, 0x50, 0x16, 0xfb, 0xa0, 0x04, // ......>.4..P.... + 0x0c, 0x04, 0xfd, 0x74, 0x2b, 0x38, 0x06, 0x3f, 0x3a, 0x3a, 0x02, 0x0a, 0x09, 0x0f, 0xc0, 0x0f, // ...t+8.?::...... + 0x09, 0x0a, 0x02, 0x3a, 0x3a, 0x41, 0x0b, 0x57, 0xfe, 0xb3, 0x16, 0x16, 0x04, 0x60, 0x04, 0x0c, // ...::A.W.....`.. + 0x04, 0x04, 0x60, 0x02, 0xbc, 0xfe, 0xc4, 0x45, 0x76, 0x45, 0x45, 0x76, 0x45, 0x01, 0x3c, 0xb5, // ..`....EvEEvE.<. + 0x07, 0x07, 0x02, 0x10, 0x2e, 0x08, 0xfe, 0xa0, 0x01, 0x01, 0xce, 0x22, 0x9b, 0x65, 0x24, 0x49, // ...........".e$I + 0x45, 0x26, 0xfe, 0x4f, 0x0e, 0x0b, 0x0b, 0x0b, 0x0b, 0x0e, 0x01, 0xb1, 0x26, 0x45, 0x49, 0x26, // E&.O........&EI& + 0xcf, 0x7b, 0x68, 0x08, 0x2e, 0x08, 0x01, 0x60, 0x01, 0x01, 0xfe, 0xa0, 0x00, 0x01, 0x00, 0x6d, // .{h....`.......m + 0xff, 0x80, 0x05, 0x93, 0x06, 0x00, 0x00, 0x22, 0x00, 0x00, 0x01, 0x13, 0x26, 0x23, 0x22, 0x07, // ......."....&#". + 0x13, 0x26, 0x00, 0x02, 0x27, 0x16, 0x33, 0x32, 0x37, 0x1e, 0x01, 0x12, 0x17, 0x3e, 0x03, 0x37, // .&..'.327....>.7 + 0x16, 0x33, 0x32, 0x37, 0x31, 0x0e, 0x03, 0x07, 0x06, 0x03, 0x5b, 0x0d, 0x3e, 0x2b, 0x29, 0x40, // .3271.....[.>+)@ + 0x0d, 0x28, 0xfe, 0xff, 0xb0, 0x5d, 0x3a, 0x32, 0x2c, 0x43, 0x3f, 0x8d, 0xc1, 0x2a, 0x25, 0x91, // .(...]:2,C?..*%. + 0x5a, 0x78, 0x2f, 0x36, 0x35, 0x38, 0x3a, 0x1c, 0x40, 0x23, 0x4e, 0x0a, 0x92, 0x02, 0x43, 0xfd, // Zx/658:.@#N...C. + 0x3d, 0x0b, 0x0b, 0x02, 0xc3, 0x45, 0x01, 0xc5, 0x01, 0x28, 0x8b, 0x0f, 0x0f, 0x6f, 0xed, 0xfe, // =....E...(...o.. + 0xc4, 0x45, 0x3d, 0xe9, 0x93, 0xcd, 0x57, 0x0e, 0x0e, 0x27, 0x63, 0x3a, 0x86, 0x11, 0xf8, 0x00, // .E=...W..'c:.... + 0x00, 0x01, 0x00, 0x00, 0xff, 0x80, 0x05, 0xe1, 0x05, 0x80, 0x00, 0x23, 0x00, 0x00, 0x01, 0x21, // ...........#...! + 0x16, 0x15, 0x14, 0x02, 0x04, 0x23, 0x22, 0x24, 0x26, 0x02, 0x10, 0x12, 0x36, 0x24, 0x33, 0x20, // .....#"$&...6$3 + 0x17, 0x07, 0x26, 0x23, 0x22, 0x0e, 0x01, 0x10, 0x1e, 0x01, 0x33, 0x32, 0x3e, 0x03, 0x37, 0x21, // ..&#".....32>.7! + 0x03, 0x00, 0x02, 0xd5, 0x0c, 0xb6, 0xfe, 0xaf, 0xda, 0x9d, 0xfe, 0xe4, 0xce, 0x79, 0x79, 0xce, // .............yy. + 0x01, 0x1c, 0x9d, 0x01, 0x2c, 0xd7, 0xd1, 0x7b, 0xb7, 0x81, 0xdb, 0x80, 0x80, 0xdb, 0x81, 0x57, // ....,..{.......W + 0x92, 0x5e, 0x46, 0x21, 0x06, 0xfe, 0x4c, 0x02, 0xee, 0x43, 0x3d, 0xd9, 0xfe, 0xab, 0xc0, 0x79, // .^F!..L..C=....y + 0xce, 0x01, 0x1c, 0x01, 0x3a, 0x01, 0x1c, 0xce, 0x79, 0xc9, 0xc9, 0x77, 0x82, 0xdf, 0xfe, 0xf8, // ....:...y..w.... + 0xdf, 0x82, 0x30, 0x48, 0x5c, 0x52, 0x25, 0x00, 0x00, 0x05, 0x00, 0x00, 0xff, 0x00, 0x07, 0x00, // ..0H.R%......... + 0x06, 0x00, 0x00, 0x10, 0x00, 0x19, 0x00, 0x22, 0x00, 0x4e, 0x00, 0x5e, 0x00, 0x00, 0x01, 0x16, // .......".N.^.... + 0x07, 0x06, 0x20, 0x27, 0x26, 0x37, 0x36, 0x32, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x32, 0x24, // .. '&762..32762$ + 0x14, 0x06, 0x22, 0x26, 0x35, 0x34, 0x36, 0x32, 0x05, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, // .."&5462..."&462 + 0x16, 0x37, 0x34, 0x26, 0x22, 0x07, 0x26, 0x27, 0x13, 0x17, 0x14, 0x16, 0x32, 0x36, 0x34, 0x26, // .74&".&'....264& + 0x23, 0x22, 0x07, 0x27, 0x26, 0x07, 0x03, 0x06, 0x07, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, // #".'&....&#".... + 0x17, 0x06, 0x15, 0x14, 0x04, 0x33, 0x32, 0x24, 0x35, 0x34, 0x27, 0x3e, 0x01, 0x24, 0x10, 0x02, // .....32$54'>.$.. + 0x06, 0x04, 0x20, 0x24, 0x26, 0x02, 0x10, 0x12, 0x36, 0x24, 0x20, 0x04, 0x16, 0x04, 0x47, 0x10, // .. $&...6$ ...G. + 0x10, 0x3e, 0xfe, 0xee, 0x3e, 0x10, 0x10, 0x06, 0x12, 0x06, 0x30, 0x79, 0x78, 0x31, 0x06, 0x12, // .>..>.....0yx1.. + 0xfe, 0xd3, 0x34, 0x4a, 0x35, 0x35, 0x4a, 0x01, 0xbf, 0x35, 0x4a, 0x34, 0x34, 0x4a, 0x35, 0xfb, // ..4J55J..5J44J5. + 0x46, 0x64, 0x24, 0x82, 0xb5, 0x3f, 0xc8, 0x34, 0x4a, 0x35, 0x35, 0x25, 0x36, 0x1a, 0xdd, 0x13, // Fd$..?.4J55%6... + 0x06, 0x45, 0xb4, 0x81, 0x23, 0x34, 0x32, 0x46, 0x25, 0x1f, 0x06, 0x01, 0x18, 0xc5, 0xc6, 0x01, // .E..#42F%....... + 0x18, 0x07, 0x1e, 0x24, 0x01, 0x66, 0x8e, 0xf0, 0xfe, 0xb4, 0xfe, 0x94, 0xfe, 0xb4, 0xf0, 0x8e, // ...$.f.......... + 0x8e, 0xf0, 0x01, 0x4c, 0x01, 0x6c, 0x01, 0x4c, 0xf0, 0x01, 0x71, 0x10, 0x0f, 0x3e, 0x3e, 0x0f, // ...L.l.L..q..>>. + 0x10, 0x06, 0x06, 0x31, 0x31, 0x06, 0xd4, 0x4a, 0x34, 0x34, 0x25, 0x26, 0x34, 0x5a, 0x25, 0x34, // ...11..J44%&4Z%4 + 0x34, 0x4a, 0x35, 0x34, 0x52, 0x31, 0x46, 0x24, 0x5a, 0x06, 0x01, 0x1b, 0x2d, 0x25, 0x34, 0x35, // 4J54R1F$Z...-%45 + 0x4a, 0x35, 0x32, 0x31, 0x05, 0x15, 0xfe, 0xc8, 0x07, 0x5a, 0x25, 0x46, 0x31, 0x23, 0x3a, 0x0f, // J521.....Z%F1#:. + 0x1b, 0x1d, 0x8e, 0xca, 0xca, 0x8e, 0x20, 0x19, 0x0f, 0x39, 0xbb, 0xfe, 0x94, 0xfe, 0xb4, 0xf0, // ...... ..9...... + 0x8e, 0x8e, 0xf0, 0x01, 0x4c, 0x01, 0x6c, 0x01, 0x4c, 0xf0, 0x8e, 0x8e, 0xf0, 0x00, 0x00, 0x00, // ....L.l.L....... + 0x00, 0x05, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x0f, 0x00, 0x19, 0x00, 0x23, // ...............# + 0x00, 0x51, 0x00, 0x61, 0x00, 0x00, 0x01, 0x16, 0x07, 0x06, 0x22, 0x27, 0x26, 0x37, 0x36, 0x32, // .Q.a......"'&762 + 0x17, 0x16, 0x32, 0x37, 0x36, 0x32, 0x25, 0x14, 0x06, 0x22, 0x26, 0x35, 0x34, 0x36, 0x32, 0x16, // ..2762%.."&5462. + 0x05, 0x14, 0x06, 0x22, 0x26, 0x35, 0x34, 0x36, 0x32, 0x16, 0x37, 0x34, 0x26, 0x23, 0x22, 0x07, // ..."&5462.74&#". + 0x26, 0x27, 0x37, 0x17, 0x1e, 0x01, 0x33, 0x32, 0x36, 0x34, 0x26, 0x23, 0x22, 0x07, 0x27, 0x26, // &'7...3264&#".'& + 0x07, 0x03, 0x06, 0x07, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, 0x17, 0x06, 0x15, 0x14, 0x16, // ....&#"......... + 0x33, 0x32, 0x36, 0x35, 0x34, 0x27, 0x3e, 0x01, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // 32654'>.....#!"& + 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x03, 0xab, 0x0d, 0x0d, 0x35, 0xec, 0x35, 0x0d, // 5.463!2.....5.5. + 0x0d, 0x05, 0x10, 0x05, 0x2a, 0xce, 0x2a, 0x05, 0x10, 0xfe, 0xfe, 0x2e, 0x3e, 0x2e, 0x2d, 0x40, // ....*.*.....>.-@ + 0x2d, 0x01, 0x52, 0x2e, 0x3e, 0x2e, 0x2d, 0x40, 0x2d, 0xd7, 0x3c, 0x2b, 0x2a, 0x1f, 0x71, 0x9a, // -.R.>.-@-.<+*.q. + 0x36, 0xab, 0x01, 0x2d, 0x1f, 0x20, 0x2d, 0x2d, 0x20, 0x30, 0x15, 0xbd, 0x11, 0x04, 0x3c, 0x9a, // 6..-. -- 0....<. + 0x6f, 0x1e, 0x2c, 0x2b, 0x3c, 0x20, 0x1a, 0x05, 0xf0, 0xa9, 0xaa, 0xf0, 0x06, 0x19, 0x1f, 0x01, // o.,+< .......... + 0x33, 0xa9, 0x77, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0x01, 0x97, 0x0d, // 3.w.@w..w..w.... + 0x0d, 0x35, 0x35, 0x0d, 0x0d, 0x06, 0x06, 0x2a, 0x2a, 0x06, 0x96, 0x1f, 0x2e, 0x2e, 0x1f, 0x20, // .55....**...... + 0x2d, 0x2d, 0x20, 0x1f, 0x2e, 0x2e, 0x1f, 0x20, 0x2d, 0x2d, 0x47, 0x2a, 0x3c, 0x1f, 0x4e, 0x04, // -- .... --G*<.N. + 0xf3, 0x27, 0x20, 0x2c, 0x2d, 0x40, 0x2d, 0x2b, 0x2a, 0x05, 0x12, 0xfe, 0xf4, 0x06, 0x4d, 0x20, // .' ,-@-+*.....M + 0x3c, 0x2a, 0x1e, 0x32, 0x0d, 0x19, 0x17, 0x7a, 0xad, 0xad, 0x7a, 0x19, 0x18, 0x0d, 0x31, 0x01, // <*.2...z..z...1. + 0xe4, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0xa9, 0x00, 0x03, 0x00, 0x00, // ..@w..w..w...... + 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x1e, 0x00, 0x30, 0x00, 0x3c, 0x00, 0x00, 0x01, 0x37, // .........0.<...7 + 0x35, 0x34, 0x26, 0x22, 0x06, 0x15, 0x11, 0x14, 0x06, 0x22, 0x26, 0x3d, 0x01, 0x23, 0x15, 0x14, // 54&"....."&=.#.. + 0x16, 0x33, 0x32, 0x36, 0x35, 0x11, 0x34, 0x36, 0x33, 0x32, 0x16, 0x1d, 0x01, 0x05, 0x35, 0x23, // .3265.4632....5# + 0x15, 0x14, 0x06, 0x23, 0x22, 0x26, 0x3d, 0x01, 0x07, 0x27, 0x15, 0x14, 0x16, 0x32, 0x36, 0x00, // ...#"&=..'...26. + 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, 0x03, 0x62, 0x5a, 0x74, 0xa0, // ... $...$ ..bZt. + 0x74, 0x1c, 0x26, 0x1b, 0x97, 0x73, 0x52, 0x51, 0x73, 0x1b, 0x14, 0x13, 0x1b, 0x01, 0x89, 0x96, // t.&..sRQs....... + 0x1b, 0x14, 0x13, 0x1b, 0x5a, 0x3c, 0x74, 0xa2, 0x73, 0x01, 0x51, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, // ....ZOp + 0x6f, 0x4f, 0xfe, 0xe5, 0x14, 0x1b, 0x1b, 0x14, 0x78, 0x7a, 0x52, 0x72, 0x71, 0x50, 0x01, 0x18, // oO......xzRrqP.. + 0x13, 0x1c, 0x1c, 0x13, 0x36, 0xdf, 0x7a, 0x7e, 0x14, 0x1b, 0x1c, 0x13, 0x7b, 0x1a, 0x1c, 0x7b, // ....6.z~....{..{ + 0x50, 0x72, 0x72, 0x01, 0xad, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, // Prr...^.....a... + 0x61, 0xce, 0xce, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0xa3, 0x07, 0x80, 0x05, 0x5d, 0x00, 0x1e, // a............].. + 0x00, 0x30, 0x00, 0x00, 0x01, 0x35, 0x34, 0x26, 0x22, 0x06, 0x15, 0x11, 0x14, 0x06, 0x23, 0x22, // .0...54&".....#" + 0x26, 0x35, 0x11, 0x21, 0x11, 0x14, 0x16, 0x32, 0x36, 0x35, 0x11, 0x34, 0x36, 0x33, 0x32, 0x16, // &5.!...265.4632. + 0x1d, 0x01, 0x07, 0x05, 0x21, 0x11, 0x14, 0x06, 0x23, 0x22, 0x26, 0x35, 0x11, 0x17, 0x37, 0x11, // ....!...#"&5..7. + 0x14, 0x16, 0x32, 0x36, 0x35, 0x04, 0x26, 0x3c, 0x54, 0x3c, 0xfc, 0xb1, 0xb2, 0xfb, 0x01, 0x48, // ..265.&.'&. + 0x0e, 0x01, 0x23, 0x22, 0x2e, 0x01, 0x27, 0x26, 0x27, 0x04, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, // ..#"..'&'.#"&546 + 0x37, 0x25, 0x26, 0x34, 0x3e, 0x03, 0x37, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x17, 0x36, 0x33, 0x32, // 7%&4>.7>.32..632 + 0x16, 0x15, 0x14, 0x06, 0x0f, 0x02, 0x06, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x2e, 0x02, 0x35, // ........32654..5 + 0x34, 0x37, 0x27, 0x36, 0x35, 0x34, 0x27, 0x36, 0x33, 0x32, 0x1e, 0x05, 0x17, 0x37, 0x0e, 0x03, // 47'654'632...7.. + 0x17, 0x37, 0x2e, 0x07, 0x27, 0x2e, 0x02, 0x2a, 0x01, 0x23, 0x22, 0x07, 0x3e, 0x05, 0x37, 0x1e, // .7..'..*.#".>.7. + 0x02, 0x3f, 0x01, 0x15, 0x17, 0x36, 0x37, 0x3e, 0x08, 0x3f, 0x01, 0x06, 0x07, 0x0e, 0x01, 0x07, // .?...67>.?...... + 0x0e, 0x02, 0x07, 0x1e, 0x01, 0x15, 0x14, 0x03, 0x3e, 0x01, 0x33, 0x32, 0x1e, 0x03, 0x17, 0x06, // ........>.32.... + 0x23, 0x22, 0x27, 0x01, 0x37, 0x17, 0x07, 0x01, 0x16, 0x15, 0x14, 0x0e, 0x03, 0x07, 0x27, 0x3e, // #"'.7.........'> + 0x02, 0x33, 0x01, 0x07, 0x27, 0x3e, 0x01, 0x33, 0x32, 0x13, 0x33, 0x17, 0x07, 0x01, 0x35, 0x15, // .3..'>.32.3...5. + 0x0f, 0x01, 0x3f, 0x02, 0x04, 0xc6, 0x4b, 0x89, 0x63, 0x67, 0x41, 0x2b, 0x21, 0x5b, 0x3c, 0x45, // ..?...K.cgA+![, + 0x37, 0x2a, 0x14, 0x15, 0x0a, 0x18, 0x0c, 0x32, 0x03, 0x28, 0x2d, 0x23, 0x01, 0x3d, 0x05, 0x11, // 7*.....2.(-#.=.. + 0x07, 0x0e, 0x06, 0x0a, 0x07, 0x09, 0x04, 0x07, 0x0f, 0x1a, 0x12, 0x2f, 0x0e, 0x7e, 0x5b, 0x10, // .........../.~[. + 0x28, 0x44, 0x3f, 0x1d, 0x47, 0x08, 0x0c, 0x20, 0x20, 0x16, 0x0c, 0x16, 0xf7, 0x7c, 0x1c, 0x2c, // (D?.G.. ....|., + 0x29, 0x19, 0x22, 0x0e, 0x23, 0x0b, 0x2b, 0x08, 0x07, 0x02, 0x29, 0x4f, 0xfc, 0xb4, 0x0e, 0x38, // ).".#.+...)O...8 + 0x2c, 0x11, 0x03, 0x2b, 0xf7, 0x27, 0xb9, 0x36, 0x09, 0x1b, 0x1d, 0x17, 0x19, 0x02, 0x79, 0x7b, // ,..+.'.6......y{ + 0x3d, 0x40, 0xfe, 0xf9, 0x30, 0x6d, 0x49, 0x01, 0xa1, 0x03, 0x23, 0x39, 0x33, 0x38, 0x04, 0x07, // =@..0mI...#938.. + 0x15, 0x4f, 0x41, 0x1c, 0xfe, 0x45, 0x60, 0x06, 0x0a, 0x2d, 0x0c, 0x13, 0xd3, 0x1f, 0x0a, 0x29, // .OA..E`..-.....) + 0x03, 0x79, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x5f, 0x03, 0x2f, 0x46, 0x77, 0x61, 0x48, 0x38, // .y......_./FwaH8 + 0x6a, 0x37, 0x3d, 0x1e, 0x37, 0x3f, 0x10, 0x25, 0x9c, 0xad, 0xbc, 0x95, 0x61, 0x02, 0x04, 0x05, // j7=.7?.%....a... + 0x09, 0x05, 0x25, 0x07, 0x1d, 0x0c, 0x1e, 0x19, 0x25, 0x16, 0x21, 0x1a, 0x3f, 0x29, 0x4c, 0x0f, // ..%.....%.!.?)L. + 0x01, 0x15, 0x0a, 0x10, 0x1f, 0x4a, 0x16, 0x0d, 0x39, 0x3d, 0x15, 0x02, 0x1a, 0x35, 0x5d, 0x7e, // .....J..9=...5]~ + 0x99, 0x14, 0x04, 0x1a, 0x70, 0x16, 0x10, 0x0f, 0x17, 0x03, 0x6a, 0x0e, 0x16, 0x0d, 0x0a, 0x04, // ....p.....j..... + 0x05, 0x02, 0x01, 0x0d, 0x20, 0x11, 0x25, 0x16, 0x11, 0x0f, 0x16, 0x03, 0x28, 0x10, 0x1a, 0xb7, // .... .%.....(... + 0xa0, 0x31, 0x24, 0x22, 0x03, 0x14, 0x18, 0x10, 0x12, 0x13, 0x2c, 0x49, 0x1a, 0x20, 0x10, 0x03, // .1$"......,I. .. + 0x0e, 0x0d, 0x24, 0x1f, 0x40, 0x1c, 0x19, 0x28, 0x28, 0x02, 0x0b, 0x0f, 0xd6, 0x05, 0x15, 0x08, // ..$.@..((....... + 0x0f, 0x06, 0x0a, 0x05, 0x05, 0x02, 0x03, 0x04, 0x01, 0x2b, 0x1e, 0x21, 0x1a, 0x2e, 0x1b, 0x53, // .........+.!...S + 0x09, 0x09, 0x2d, 0x1c, 0x01, 0x01, 0x4c, 0x01, 0x5f, 0x5f, 0x15, 0x24, 0x27, 0x17, 0x2d, 0x11, // ..-...L.__.$'.-. + 0x39, 0x13, 0x4c, 0x0f, 0x09, 0x35, 0x56, 0xa5, 0xc6, 0x2b, 0x03, 0x09, 0x0a, 0x09, 0x13, 0x36, // 9.L..5V..+.....6 + 0x07, 0x0b, 0xfc, 0x54, 0x1a, 0x2b, 0x1f, 0x36, 0x2e, 0x38, 0x05, 0x2d, 0x0b, 0x03, 0x24, 0x0c, // ...T.+.6.8.-..$. + 0xb1, 0x30, 0xfe, 0xd0, 0x0f, 0x01, 0x07, 0x0f, 0x0b, 0x08, 0x07, 0x01, 0x2b, 0x02, 0x0d, 0x07, // .0..........+... + 0x02, 0x74, 0x14, 0x11, 0x01, 0x0c, 0xfd, 0x7c, 0x53, 0x0c, 0x06, 0x31, 0x01, 0x01, 0x05, 0x02, // .t.....|S..1.... + 0x03, 0x04, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0xff, 0x12, 0x06, 0x00, 0x05, 0xee, 0x00, 0x17, // ................ + 0x00, 0x36, 0x00, 0x5d, 0x00, 0x83, 0x00, 0x00, 0x05, 0x26, 0x07, 0x0e, 0x01, 0x23, 0x22, 0x27, // .6.].....&...#"' + 0x26, 0x23, 0x22, 0x07, 0x0e, 0x01, 0x17, 0x1e, 0x01, 0x36, 0x37, 0x3e, 0x02, 0x37, 0x36, 0x27, // &#"......67>.76' + 0x26, 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x07, 0x06, 0x17, 0x16, 0x36, 0x37, 0x3e, 0x07, 0x33, // &'&#"......67>.3 + 0x32, 0x1e, 0x01, 0x17, 0x1e, 0x01, 0x37, 0x36, 0x01, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x01, // 2.....76.4..#".. + 0x23, 0x06, 0x2e, 0x03, 0x07, 0x0e, 0x01, 0x07, 0x06, 0x17, 0x1e, 0x01, 0x33, 0x32, 0x3e, 0x02, // #...........32>. + 0x17, 0x1e, 0x03, 0x17, 0x16, 0x36, 0x37, 0x3e, 0x01, 0x37, 0x14, 0x02, 0x06, 0x04, 0x20, 0x24, // .....67>.7.... $ + 0x26, 0x02, 0x35, 0x34, 0x3e, 0x05, 0x37, 0x3e, 0x03, 0x37, 0x3e, 0x01, 0x37, 0x16, 0x17, 0x1e, // &.54>.7>.7>.7... + 0x01, 0x17, 0x1e, 0x06, 0x04, 0x8f, 0x05, 0x13, 0x1e, 0x72, 0x4a, 0x81, 0x40, 0x05, 0x08, 0x0b, // .........rJ.@... + 0x0f, 0x07, 0x01, 0x08, 0x22, 0x6b, 0x62, 0x32, 0x29, 0x57, 0x2b, 0x07, 0x0c, 0x2c, 0x13, 0x14, // ...."kb2)W+..,.. + 0x17, 0x35, 0x2f, 0x18, 0x1d, 0x31, 0x1a, 0x0e, 0x09, 0x11, 0x17, 0x03, 0x0f, 0x06, 0x0e, 0x09, // .5/..1.......... + 0x10, 0x0e, 0x13, 0x0b, 0x1b, 0x23, 0x0b, 0x08, 0x0a, 0x05, 0x0a, 0x17, 0x01, 0x5a, 0x0a, 0x17, // .....#.......Z.. + 0x2d, 0x1e, 0x21, 0x80, 0x82, 0x24, 0x1b, 0x49, 0x4f, 0x58, 0x70, 0x37, 0x73, 0xa4, 0x02, 0x02, // -.!..$.IOXp7s... + 0x4c, 0x1d, 0x43, 0x46, 0x39, 0x96, 0x76, 0x7a, 0x20, 0x1a, 0x4e, 0x41, 0x47, 0x14, 0x23, 0x2f, // L.CF9.vz .NAG.#/ + 0x20, 0x1c, 0x1d, 0x35, 0x7c, 0xd0, 0xfe, 0xeb, 0xfe, 0xd0, 0xfe, 0xe6, 0xd5, 0x80, 0x27, 0x3b, // ..5|.........'; + 0x52, 0x4b, 0x52, 0x2f, 0x13, 0x0e, 0x4a, 0x23, 0x3d, 0x1e, 0x24, 0x2c, 0x08, 0x81, 0x39, 0x2c, // RKR/..J#=.$,..9, + 0xac, 0x2b, 0x15, 0x24, 0x55, 0x43, 0x53, 0x37, 0x27, 0x32, 0x13, 0x0e, 0x16, 0x22, 0x31, 0x04, // .+.$UCS7'2..."1. + 0x0c, 0x06, 0x14, 0x0a, 0x20, 0x1c, 0x03, 0x03, 0x04, 0x21, 0x1b, 0x07, 0x0c, 0x84, 0x2f, 0x0e, // .... ....!..../. + 0x0f, 0x0a, 0x0c, 0x2c, 0x18, 0x14, 0x08, 0x07, 0x14, 0x02, 0x0d, 0x04, 0x0a, 0x04, 0x06, 0x03, // ...,............ + 0x02, 0x0f, 0x0e, 0x0f, 0x11, 0x06, 0x04, 0x0c, 0x01, 0x2f, 0x16, 0x2d, 0x2d, 0x1c, 0x53, 0x54, // ........./.--.ST + 0x01, 0x28, 0x3a, 0x3a, 0x28, 0x01, 0x01, 0x9b, 0x65, 0x70, 0x34, 0x14, 0x11, 0x41, 0x4d, 0x40, // .(::(...ep4..AM@ + 0x01, 0x01, 0x3d, 0x49, 0x3e, 0x01, 0x03, 0x22, 0x2e, 0x29, 0x78, 0xce, 0xa4, 0xfe, 0xe7, 0xbf, // ..=I>..".)x..... + 0x6c, 0x73, 0xc7, 0x01, 0x1c, 0xa0, 0x59, 0xa7, 0x7c, 0x71, 0x4b, 0x40, 0x1d, 0x0a, 0x08, 0x25, // ls....Y.|qK@...% + 0x14, 0x28, 0x18, 0x1c, 0x59, 0x51, 0x9b, 0x26, 0x1d, 0x4e, 0x1b, 0x0d, 0x18, 0x45, 0x48, 0x76, // .(..YQ.&.N...EHv + 0x7e, 0xab, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x1e, // ~............... + 0x00, 0x3c, 0x00, 0x5a, 0x00, 0x78, 0x00, 0x00, 0x01, 0x0f, 0x02, 0x0e, 0x01, 0x27, 0x0e, 0x01, // .<.Z.x.......'.. + 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x37, 0x26, 0x36, 0x3f, 0x01, 0x17, 0x07, 0x06, 0x14, 0x17, // #"&5467&6?...... + 0x16, 0x32, 0x3f, 0x03, 0x03, 0x17, 0x07, 0x27, 0x26, 0x22, 0x06, 0x14, 0x1f, 0x03, 0x07, 0x2f, // .2?....'&"...../ + 0x02, 0x2e, 0x01, 0x37, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x17, 0x36, 0x16, 0x01, // ...7..54632..6.. + 0x14, 0x06, 0x23, 0x22, 0x26, 0x27, 0x06, 0x26, 0x2f, 0x01, 0x37, 0x17, 0x16, 0x32, 0x36, 0x34, // ..#"&'.&/.7..264 + 0x2f, 0x03, 0x37, 0x1f, 0x02, 0x1e, 0x01, 0x07, 0x1e, 0x01, 0x03, 0x14, 0x06, 0x07, 0x16, 0x06, // /.7............. + 0x0f, 0x01, 0x27, 0x37, 0x36, 0x34, 0x26, 0x22, 0x0f, 0x03, 0x27, 0x3f, 0x02, 0x3e, 0x01, 0x17, // ..'764&"..'?.>.. + 0x3e, 0x01, 0x33, 0x32, 0x16, 0x04, 0x2e, 0xa0, 0x97, 0x1e, 0x41, 0xad, 0x55, 0x10, 0x70, 0x49, // >.32......A.U.pI + 0x55, 0x78, 0x59, 0x45, 0x16, 0x2e, 0x41, 0x0c, 0x97, 0x0b, 0x25, 0x25, 0x25, 0x68, 0x25, 0x1e, // UxYE..A...%%%h%. + 0x97, 0xa1, 0xbe, 0x0c, 0x98, 0x0c, 0x25, 0x68, 0x4a, 0x25, 0x1d, 0x98, 0xa0, 0x97, 0xa1, 0x97, // ......%hJ%...... + 0x1e, 0x44, 0x2c, 0x1b, 0x46, 0x5a, 0x78, 0x55, 0x4c, 0x73, 0x0c, 0x54, 0xab, 0x03, 0x67, 0x78, // .D,.FZxULs.T..gx + 0x55, 0x4a, 0x72, 0x0e, 0x56, 0xbb, 0x44, 0x0b, 0x97, 0x0c, 0x25, 0x68, 0x4a, 0x25, 0x1e, 0x98, // UJr.V.D...%hJ%.. + 0xa0, 0x98, 0xa0, 0x98, 0x1d, 0x40, 0x2f, 0x15, 0x4c, 0x65, 0x02, 0x66, 0x4c, 0x1a, 0x2e, 0x43, // .....@/.Le.fL..C + 0x0c, 0x97, 0x0c, 0x25, 0x4a, 0x68, 0x25, 0x1e, 0x98, 0xa0, 0x98, 0xa1, 0x98, 0x1d, 0x43, 0xb8, // ...%Jh%.......C. + 0x56, 0x0b, 0x73, 0x4e, 0x55, 0x78, 0x01, 0xcf, 0xa0, 0x98, 0x1e, 0x40, 0x2e, 0x15, 0x46, 0x5a, // V.sNUx.....@..FZ + 0x79, 0x55, 0x48, 0x70, 0x10, 0x56, 0xae, 0x41, 0x0c, 0x98, 0x0b, 0x25, 0x68, 0x26, 0x25, 0x25, // yUHp.V.A...%h&%% + 0x1e, 0x98, 0xa0, 0x02, 0x12, 0x0c, 0x98, 0x0c, 0x25, 0x4a, 0x69, 0x25, 0x1d, 0x98, 0xa0, 0x98, // ........%Ji%.... + 0xa0, 0x98, 0x1e, 0x43, 0xb9, 0x57, 0x0f, 0x70, 0x49, 0x55, 0x79, 0x62, 0x4a, 0x14, 0x2f, 0xfb, // ...C.W.pIUybJ./. + 0x95, 0x55, 0x79, 0x5e, 0x47, 0x1c, 0x2c, 0x44, 0x0c, 0x98, 0x0c, 0x25, 0x4a, 0x68, 0x25, 0x1e, // .Uy^G.,D...%Jh%. + 0x98, 0xa0, 0x98, 0xa0, 0x98, 0x1e, 0x40, 0xad, 0x55, 0x0b, 0x73, 0x04, 0x17, 0x4d, 0x74, 0x0b, // ......@.U.s..Mt. + 0x55, 0xb7, 0x43, 0x0c, 0x98, 0x0c, 0x25, 0x68, 0x4a, 0x25, 0x1e, 0x98, 0xa0, 0x98, 0xa0, 0x98, // U.C...%hJ%...... + 0x1e, 0x43, 0x2d, 0x1a, 0x4b, 0x66, 0x79, 0x00, 0x00, 0x08, 0x00, 0x00, 0xff, 0x00, 0x06, 0x00, // .C-.Kfy......... + 0x06, 0x00, 0x00, 0x45, 0x00, 0x58, 0x00, 0x5b, 0x00, 0x5f, 0x00, 0x67, 0x00, 0x6a, 0x00, 0x89, // ...E.X.[._.g.j.. + 0x00, 0xa3, 0x00, 0x00, 0x01, 0x06, 0x26, 0x2f, 0x01, 0x26, 0x27, 0x2e, 0x01, 0x27, 0x06, 0x07, // ......&/.&'..'.. + 0x06, 0x07, 0x0e, 0x01, 0x27, 0x36, 0x37, 0x3e, 0x01, 0x37, 0x3e, 0x01, 0x37, 0x26, 0x07, 0x0e, // ....'67>.7>.7&.. + 0x02, 0x07, 0x06, 0x14, 0x07, 0x06, 0x07, 0x06, 0x27, 0x26, 0x27, 0x26, 0x27, 0x3e, 0x01, 0x37, // ........'&'&'>.7 + 0x36, 0x37, 0x36, 0x33, 0x3e, 0x01, 0x37, 0x3e, 0x02, 0x17, 0x16, 0x07, 0x14, 0x0e, 0x01, 0x07, // 6763>.7>........ + 0x06, 0x07, 0x17, 0x1e, 0x01, 0x17, 0x1e, 0x01, 0x03, 0x16, 0x07, 0x06, 0x07, 0x06, 0x23, 0x26, // ..............#& + 0x27, 0x26, 0x27, 0x37, 0x1e, 0x01, 0x36, 0x37, 0x36, 0x37, 0x32, 0x05, 0x17, 0x27, 0x01, 0x25, // '&'7..67672..'.% + 0x11, 0x05, 0x01, 0x17, 0x03, 0x27, 0x03, 0x17, 0x37, 0x17, 0x01, 0x05, 0x11, 0x01, 0x17, 0x07, // .....'..7....... + 0x27, 0x06, 0x07, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x27, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x1e, // '...+."&'&54632. + 0x01, 0x17, 0x1e, 0x01, 0x33, 0x32, 0x36, 0x37, 0x3e, 0x02, 0x37, 0x01, 0x11, 0x25, 0x06, 0x04, // ....3267>.7..%.. + 0x23, 0x22, 0x27, 0x34, 0x27, 0x11, 0x36, 0x37, 0x36, 0x37, 0x36, 0x37, 0x11, 0x05, 0x32, 0x2c, // #"'4'.676767..2, + 0x01, 0x33, 0x32, 0x15, 0x11, 0x02, 0x8e, 0x01, 0x17, 0x14, 0x14, 0x2c, 0x2b, 0x07, 0x44, 0x04, // .32........,+.D. + 0x43, 0x43, 0x51, 0x18, 0x04, 0x1f, 0x03, 0x06, 0x4c, 0x15, 0x81, 0x0e, 0x11, 0x44, 0x02, 0x08, // CCQ.....L....D.. + 0x66, 0x08, 0x27, 0x1e, 0x02, 0x02, 0x01, 0x05, 0x1a, 0x17, 0x18, 0x12, 0x0a, 0x04, 0x01, 0x06, // f.'............. + 0x25, 0x0b, 0x3a, 0x2f, 0x64, 0x02, 0x0a, 0x42, 0x0b, 0x09, 0x19, 0x04, 0x04, 0x02, 0x03, 0x19, // %.:/d..B........ + 0x1c, 0x03, 0x19, 0x34, 0x40, 0x0c, 0x7d, 0x05, 0x04, 0x0d, 0xcf, 0x03, 0x07, 0x0c, 0x26, 0x1e, // ...4@.}.......&. + 0x1e, 0x1a, 0x17, 0x0e, 0x04, 0x01, 0x03, 0x21, 0x14, 0x30, 0x24, 0x13, 0x11, 0x02, 0xbe, 0x3f, // .......!.0$....? + 0x8b, 0xfb, 0xf8, 0x02, 0xb6, 0xfd, 0x4a, 0x04, 0xd9, 0x66, 0xb5, 0x64, 0xd8, 0x66, 0x2d, 0xd3, // ......J..f.d.f-. + 0xfe, 0x2e, 0x02, 0x3d, 0xfe, 0xfa, 0x9e, 0x36, 0x28, 0x82, 0x92, 0x3a, 0x21, 0x54, 0x4f, 0xf1, // ...=...6(..:!TO. + 0x3f, 0x08, 0x0a, 0x08, 0x04, 0x1c, 0x21, 0x04, 0x49, 0xad, 0x47, 0x5f, 0x90, 0x55, 0x0f, 0x1f, // ?.....!.I.G_.U.. + 0x25, 0x0a, 0x01, 0x95, 0xfc, 0xfa, 0x0e, 0xfd, 0x2e, 0x07, 0x0d, 0x05, 0x01, 0x03, 0x01, 0x05, // %............... + 0x0f, 0x6b, 0x2a, 0x02, 0x2e, 0x02, 0x01, 0x3d, 0x01, 0x3b, 0x04, 0x14, 0x01, 0xca, 0x03, 0x07, // .k*....=.;...... + 0x08, 0x09, 0x14, 0x1d, 0x05, 0x35, 0x02, 0x67, 0x4e, 0x5f, 0x0f, 0x02, 0x04, 0x02, 0x04, 0x58, // .....5.gN_.....X + 0x18, 0xb6, 0x1b, 0x1e, 0x89, 0x09, 0x01, 0x22, 0x02, 0x0b, 0x08, 0x01, 0x02, 0x11, 0x01, 0x0a, // ......."........ + 0x05, 0x07, 0x07, 0x04, 0x11, 0x06, 0x11, 0x02, 0x06, 0x03, 0x10, 0x10, 0x23, 0x02, 0x23, 0x04, // ............#.#. + 0x03, 0x0a, 0x01, 0x01, 0x0c, 0x15, 0x02, 0x32, 0x39, 0x05, 0x32, 0x51, 0x1c, 0x06, 0x34, 0x02, // .......29.2Q..4. + 0x01, 0x31, 0x01, 0xe0, 0x0f, 0x0d, 0x17, 0x0f, 0x0c, 0x03, 0x17, 0x0f, 0x1a, 0x03, 0x03, 0x04, // .1.............. + 0x04, 0x0e, 0x0c, 0x02, 0x92, 0xe3, 0x2a, 0xfd, 0x99, 0xe8, 0x04, 0x08, 0xe9, 0xfd, 0x36, 0x1f, // ......*.......6. + 0x02, 0x91, 0x1f, 0xfd, 0xe8, 0x1f, 0x6e, 0x41, 0x03, 0x3b, 0xb8, 0x01, 0x7c, 0xfa, 0x11, 0x0d, // ......nA.;..|... + 0xa0, 0x42, 0x53, 0x19, 0x0c, 0x4e, 0x2e, 0x07, 0x09, 0x08, 0x0b, 0x0f, 0x12, 0x02, 0x25, 0x31, // .BS..N........%1 + 0x1d, 0x24, 0x07, 0x11, 0x15, 0x06, 0x04, 0x80, 0xfb, 0xc9, 0xf6, 0x06, 0xf3, 0x0d, 0x01, 0x02, // .$.............. + 0x04, 0x36, 0x09, 0x01, 0x06, 0x05, 0x24, 0x0e, 0x01, 0x80, 0xc6, 0x6e, 0x6b, 0x15, 0xfe, 0x5e, // .6....$....nk..^ + 0x00, 0x0c, 0x00, 0x00, 0xff, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x0f, 0x00, 0x27, 0x00, 0x37, // .............'.7 + 0x00, 0x47, 0x00, 0x57, 0x00, 0x67, 0x00, 0x77, 0x00, 0x87, 0x00, 0x97, 0x00, 0xa7, 0x00, 0xb7, // .G.W.g.w........ + 0x00, 0xc0, 0x00, 0x00, 0x01, 0x32, 0x16, 0x15, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, // .....2.....+."&5 + 0x11, 0x34, 0x36, 0x33, 0x05, 0x1e, 0x01, 0x15, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, // .463.......#!"&5 + 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x1f, 0x01, 0x1e, 0x01, 0x15, 0x01, 0x35, 0x34, 0x26, // .463!2.......54& + 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x11, 0x35, 0x34, 0x26, // +.".....;.26.54& + 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x11, 0x35, 0x34, 0x26, // +.".....;.26.54& + 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x01, 0x35, 0x34, 0x26, // +.".....;.26.54& + 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x11, 0x35, 0x34, 0x26, // +.".....;.26.54& + 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x11, 0x35, 0x34, 0x26, // +.".....;.26.54& + 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x01, 0x35, 0x34, 0x26, // +.".....;.26.54& + 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x11, 0x35, 0x34, 0x26, // +.".....;.26.54& + 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x11, 0x35, 0x34, 0x26, // +.".....;.26.54& + 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x13, 0x11, 0x23, 0x22, // +.".....;.26..#" + 0x26, 0x3d, 0x01, 0x21, 0x11, 0x01, 0x20, 0x42, 0x5e, 0x5e, 0x42, 0x80, 0x42, 0x5e, 0x5e, 0x42, // &=.!.. B^^B.B^^B + 0x05, 0xe0, 0x3a, 0x46, 0x96, 0x6a, 0xfc, 0xa0, 0x42, 0x5e, 0x38, 0x28, 0x02, 0xa0, 0x28, 0x60, // ..:F.j..B^8(..(` + 0x1c, 0x98, 0x1c, 0x28, 0xfd, 0x20, 0x12, 0x0e, 0x80, 0x0e, 0x12, 0x12, 0x0e, 0x80, 0x0e, 0x12, // ...(. .......... + 0x12, 0x0e, 0x80, 0x0e, 0x12, 0x12, 0x0e, 0x80, 0x0e, 0x12, 0x12, 0x0e, 0x80, 0x0e, 0x12, 0x12, // ................ + 0x0e, 0x80, 0x0e, 0x12, 0x01, 0x00, 0x12, 0x0e, 0x80, 0x0e, 0x12, 0x12, 0x0e, 0x80, 0x0e, 0x12, // ................ + 0x12, 0x0e, 0x80, 0x0e, 0x12, 0x12, 0x0e, 0x80, 0x0e, 0x12, 0x12, 0x0e, 0x80, 0x0e, 0x12, 0x12, // ................ + 0x0e, 0x80, 0x0e, 0x12, 0x01, 0x00, 0x12, 0x0e, 0x80, 0x0e, 0x12, 0x12, 0x0e, 0x80, 0x0e, 0x12, // ................ + 0x12, 0x0e, 0x80, 0x0e, 0x12, 0x12, 0x0e, 0x80, 0x0e, 0x12, 0x12, 0x0e, 0x80, 0x0e, 0x12, 0x12, // ................ + 0x0e, 0x80, 0x0e, 0x12, 0x60, 0xa0, 0x28, 0x38, 0xfd, 0x80, 0x04, 0x80, 0x5e, 0x42, 0xfb, 0xc0, // ....`.(8....^B.. + 0x42, 0x5e, 0x5e, 0x42, 0x04, 0x40, 0x42, 0x5e, 0xa3, 0x22, 0x76, 0x45, 0xfd, 0x00, 0x6a, 0x96, // B^^B.@B^."vE..j. + 0x5e, 0x42, 0x06, 0x00, 0x28, 0x38, 0x28, 0x1c, 0x98, 0x1c, 0x60, 0x28, 0xfb, 0x80, 0x80, 0x0e, // ^B..(8(...`(.... + 0x12, 0x12, 0x0e, 0x80, 0x0e, 0x12, 0x12, 0x01, 0x0e, 0x80, 0x0e, 0x12, 0x12, 0x0e, 0x80, 0x0e, // ................ + 0x12, 0x12, 0x01, 0x0e, 0x80, 0x0e, 0x12, 0x12, 0x0e, 0x80, 0x0e, 0x12, 0x12, 0xfe, 0x0e, 0x80, // ................ + 0x0e, 0x12, 0x12, 0x0e, 0x80, 0x0e, 0x12, 0x12, 0x01, 0x0e, 0x80, 0x0e, 0x12, 0x12, 0x0e, 0x80, // ................ + 0x0e, 0x12, 0x12, 0x01, 0x0e, 0x80, 0x0e, 0x12, 0x12, 0x0e, 0x80, 0x0e, 0x12, 0x12, 0xfe, 0x0e, // ................ + 0x80, 0x0e, 0x12, 0x12, 0x0e, 0x80, 0x0e, 0x12, 0x12, 0x01, 0x0e, 0x80, 0x0e, 0x12, 0x12, 0x0e, // ................ + 0x80, 0x0e, 0x12, 0x12, 0x01, 0x0e, 0x80, 0x0e, 0x12, 0x12, 0x0e, 0x80, 0x0e, 0x12, 0x12, 0x01, // ................ + 0x8e, 0x01, 0x00, 0x38, 0x28, 0xa0, 0xfe, 0x00, 0x00, 0x14, 0x00, 0x00, 0xff, 0x00, 0x05, 0x80, // ...8(........... + 0x06, 0x00, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x3f, 0x00, 0x4f, 0x00, 0x5f, 0x00, 0x6f, // ......./.?.O._.o + 0x00, 0x7f, 0x00, 0x8f, 0x00, 0x9f, 0x00, 0xaf, 0x00, 0xbf, 0x00, 0xcf, 0x00, 0xdf, 0x00, 0xef, // ................ + 0x00, 0xff, 0x01, 0x0f, 0x01, 0x1f, 0x01, 0x2f, 0x01, 0x3f, 0x00, 0x00, 0x01, 0x32, 0x16, 0x15, // ......./.?...2.. + 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x01, 0x15, 0x14, 0x16, // ...#!"&5.463.... + 0x3b, 0x01, 0x32, 0x36, 0x3d, 0x01, 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x11, 0x15, 0x14, 0x16, // ;.26=.4&+."..... + 0x3b, 0x01, 0x32, 0x36, 0x3d, 0x01, 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x11, 0x15, 0x14, 0x16, // ;.26=.4&+."..... + 0x3b, 0x01, 0x32, 0x36, 0x3d, 0x01, 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x11, 0x15, 0x14, 0x16, // ;.26=.4&+."..... + 0x3b, 0x01, 0x32, 0x36, 0x3d, 0x01, 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x03, 0x35, 0x34, 0x26, // ;.26=.4&+."..54& + 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x11, 0x35, 0x34, 0x26, // +.".....;.26.54& + 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x11, 0x35, 0x34, 0x26, // +.".....;.26.54& + 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x11, 0x35, 0x34, 0x26, // +.".....;.26.54& + 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x11, 0x35, 0x34, 0x26, // +.".....;.26.54& + 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x01, 0x35, 0x34, 0x26, // +.".....;.26.54& + 0x23, 0x21, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x11, 0x35, 0x34, 0x26, // #!".....3!26.54& + 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x11, 0x35, 0x34, 0x26, // +.".....;.26.54& + 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x11, 0x35, 0x34, 0x26, // +.".....;.26.54& + 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x11, 0x35, 0x34, 0x26, // +.".....;.26.54& + 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x01, 0x35, 0x34, 0x26, // +.".....;.26.54& + 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x11, 0x35, 0x34, 0x26, // +.".....;.26.54& + 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x11, 0x35, 0x34, 0x26, // +.".....;.26.54& + 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x11, 0x35, 0x34, 0x26, // +.".....;.26.54& + 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x11, 0x35, 0x34, 0x26, // +.".....;.26.54& + 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x05, 0x40, 0x1a, 0x26, // +.".....;.26.@.& + 0x26, 0x1a, 0xfb, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0xc0, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, // &....&&.....@... + 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, // .@....@....@.... + 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, // @....@....@....@ + 0x0e, 0x12, 0x80, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, // .....@....@....@ + 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, // ....@....@....@. + 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, // ...@....@....@.. + 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x02, 0x00, 0x12, 0x0e, 0xfe, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0x01, // ..@............. + 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, // @....@....@....@ + 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, // ....@....@....@. + 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x01, 0x00, 0x12, 0x0e, 0x40, // ...@....@......@ + 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, // ....@....@....@. + 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, // ...@....@....@.. + 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x06, // ..@....@....@... + 0x00, 0x26, 0x1a, 0xf9, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x06, 0x80, 0x1a, 0x26, 0xfe, 0xe0, 0x40, // .&....&&....&..@ + 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0xfe, 0xf2, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, // ....@.....@....@ + 0x0e, 0x12, 0x12, 0xfe, 0xf2, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0xfe, 0xf2, // .....@....@..... + 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0xfe, 0xb2, 0x40, 0x0e, 0x12, 0x12, 0x0e, // @....@.....@.... + 0x40, 0x0e, 0x12, 0x12, 0x01, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x01, // @.....@....@.... + 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x01, 0x0e, 0x40, 0x0e, 0x12, 0x12, // .@....@.....@... + 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x01, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, // .@.....@....@... + 0xfb, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x02, 0x0e, 0x40, 0x0e, 0x12, // .............@.. + 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x01, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, // ..@.....@....@.. + 0x12, 0x01, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x01, 0x0e, 0x40, 0x0e, // ...@....@.....@. + 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0xfc, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, // ...@.....@....@. + 0x12, 0x12, 0x01, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x01, 0x0e, 0x40, // ....@....@.....@ + 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x01, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, // ....@.....@....@ + 0x0e, 0x12, 0x12, 0x01, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x00, 0x00, // .....@....@..... + 0x00, 0x02, 0x00, 0x40, 0xff, 0x10, 0x04, 0xc0, 0x05, 0x60, 0x00, 0x1f, 0x00, 0x27, 0x00, 0x00, // ...@.....`...'.. + 0x09, 0x01, 0x11, 0x14, 0x06, 0x22, 0x26, 0x35, 0x11, 0x23, 0x11, 0x14, 0x06, 0x22, 0x26, 0x35, // ....."&5.#..."&5 + 0x11, 0x01, 0x26, 0x34, 0x37, 0x36, 0x32, 0x1f, 0x01, 0x21, 0x37, 0x36, 0x32, 0x17, 0x16, 0x14, // ..&4762..!762... + 0x24, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x04, 0xa4, 0xfe, 0xdc, 0x42, 0x5c, 0x42, 0x40, // $.."&462....B.B@ + 0x42, 0x5c, 0x42, 0xfe, 0xdc, 0x1c, 0x1c, 0x1d, 0x4f, 0x1c, 0xe4, 0x01, 0x70, 0xe4, 0x1c, 0x50, // B.B.....O...p..P + 0x1c, 0x1c, 0xfe, 0xa0, 0x83, 0xba, 0x83, 0x83, 0xba, 0x03, 0xdc, 0xfe, 0xdc, 0xfc, 0xc8, 0x2e, // ................ + 0x42, 0x42, 0x2e, 0x01, 0x80, 0xfe, 0x80, 0x2e, 0x42, 0x42, 0x2e, 0x03, 0x38, 0x01, 0x24, 0x1c, // BB......BB..8.$. + 0x50, 0x1c, 0x1c, 0x1c, 0xe4, 0xe4, 0x1c, 0x1c, 0x1d, 0x4f, 0xe5, 0xba, 0x83, 0x83, 0xba, 0x83, // P........O...... + 0x00, 0x05, 0x00, 0x00, 0xff, 0x80, 0x06, 0x80, 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1d, 0x00, 0x33, // ...............3 + 0x00, 0x43, 0x00, 0x51, 0x00, 0x00, 0x01, 0x14, 0x0e, 0x01, 0x23, 0x22, 0x2e, 0x01, 0x35, 0x34, // .C.Q......#"..54 + 0x3e, 0x01, 0x33, 0x32, 0x1e, 0x01, 0x01, 0x14, 0x06, 0x23, 0x22, 0x2e, 0x01, 0x35, 0x34, 0x36, // >.32.....#"..546 + 0x33, 0x32, 0x1e, 0x01, 0x05, 0x32, 0x04, 0x12, 0x15, 0x14, 0x0e, 0x02, 0x23, 0x22, 0x26, 0x23, // 32...2......#"&# + 0x22, 0x06, 0x23, 0x22, 0x35, 0x34, 0x3e, 0x02, 0x25, 0x22, 0x2e, 0x01, 0x35, 0x34, 0x3e, 0x01, // ".#"54>.%"..54>. + 0x33, 0x32, 0x1e, 0x01, 0x15, 0x14, 0x0e, 0x01, 0x25, 0x32, 0x16, 0x15, 0x14, 0x0e, 0x01, 0x23, // 32......%2.....# + 0x22, 0x26, 0x35, 0x34, 0x3e, 0x01, 0x03, 0x0c, 0x26, 0x58, 0x3d, 0x4c, 0x7c, 0x3c, 0x26, 0x58, // "&54>...&X=L|<&X + 0x3d, 0x4d, 0x7b, 0x3c, 0xfe, 0xaa, 0x54, 0x4d, 0x4c, 0x83, 0x46, 0x54, 0x4d, 0x4c, 0x83, 0x46, // =M{<..TML.FTML.F + 0x01, 0x8a, 0x76, 0x01, 0x12, 0xb8, 0x22, 0x3f, 0x42, 0x2b, 0x44, 0xef, 0x3f, 0x42, 0xfd, 0x4a, // ..v..."?B+D.?B.J + 0xb7, 0x70, 0xa7, 0xd0, 0x01, 0x48, 0x3d, 0x58, 0x26, 0x3c, 0x7b, 0x4d, 0x3d, 0x58, 0x26, 0x3c, // .p...H=X&<{M=X&< + 0x7c, 0x01, 0x64, 0x4d, 0x54, 0x46, 0x83, 0x4c, 0x4d, 0x54, 0x46, 0x83, 0x04, 0x28, 0x3c, 0x6b, // |.dMTF.LMTF..(.2.. + 0x02, 0xc0, 0x72, 0x5f, 0x2d, 0x02, 0x24, 0x1a, 0xc0, 0x1a, 0x24, 0x02, 0x2d, 0x5f, 0x72, 0x55, // ..r_-.$...$.-_rU + 0x96, 0xaa, 0x96, 0x55, 0x03, 0xf0, 0x91, 0xc5, 0x25, 0xfc, 0xcb, 0x1a, 0x26, 0x26, 0x1a, 0x03, // ...U....%...&&.. + 0x35, 0x25, 0xc5, 0x91, 0x80, 0xf3, 0x9d, 0x9d, 0xf3, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // 5%.............. + 0xff, 0x00, 0x06, 0x80, 0x05, 0x80, 0x00, 0x03, 0x00, 0x07, 0x00, 0x1f, 0x00, 0x00, 0x05, 0x01, // ................ + 0x11, 0x05, 0x27, 0x2d, 0x01, 0x0d, 0x01, 0x11, 0x14, 0x06, 0x07, 0x01, 0x06, 0x22, 0x27, 0x01, // ..'-........."'. + 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, 0x01, 0x36, 0x32, 0x17, 0x01, 0x1e, 0x01, 0x03, 0x80, // ..5.467.62...... + 0x02, 0x80, 0xfd, 0x80, 0x40, 0x02, 0xba, 0xfd, 0x46, 0xfd, 0x46, 0x05, 0xfa, 0x24, 0x1f, 0xfd, // ....@...F.F..$.. + 0x40, 0x1c, 0x42, 0x1c, 0xfd, 0x40, 0x1f, 0x24, 0x2e, 0x26, 0x02, 0xc0, 0x16, 0x2c, 0x16, 0x02, // @.B..@.$.&...,.. + 0xc0, 0x26, 0x2e, 0x5d, 0x01, 0x5d, 0x02, 0x7c, 0xe9, 0x71, 0xfe, 0xfe, 0xfe, 0x02, 0xfd, 0x00, // .&.].].|.q...... + 0x23, 0x3c, 0x11, 0xfe, 0x80, 0x10, 0x10, 0x01, 0x80, 0x11, 0x3c, 0x23, 0x03, 0x00, 0x28, 0x42, // #<........<#..(B + 0x0e, 0x01, 0x00, 0x08, 0x08, 0xff, 0x00, 0x0e, 0x42, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // ........B....... + 0xff, 0x00, 0x08, 0x80, 0x06, 0x00, 0x00, 0x03, 0x00, 0x07, 0x00, 0x0b, 0x00, 0x0f, 0x00, 0x13, // ................ + 0x00, 0x17, 0x00, 0x42, 0x00, 0x00, 0x05, 0x25, 0x11, 0x05, 0x27, 0x2d, 0x01, 0x05, 0x01, 0x25, // ...B...%..'-...% + 0x11, 0x05, 0x27, 0x2d, 0x01, 0x05, 0x27, 0x25, 0x11, 0x05, 0x27, 0x2d, 0x01, 0x05, 0x01, 0x11, // ..'-..'%..'-.... + 0x14, 0x06, 0x07, 0x05, 0x06, 0x22, 0x27, 0x25, 0x26, 0x27, 0x06, 0x07, 0x05, 0x06, 0x22, 0x27, // ....."'%&'...."' + 0x25, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, 0x25, 0x11, 0x34, 0x36, 0x37, 0x25, 0x36, 0x32, // %..5.467%.467%62 + 0x17, 0x05, 0x1e, 0x01, 0x15, 0x11, 0x05, 0x1e, 0x01, 0x02, 0x80, 0x01, 0x80, 0xfe, 0x80, 0x40, // ...............@ + 0x01, 0x94, 0xfe, 0x6c, 0xfe, 0x6c, 0x05, 0xd4, 0x01, 0x80, 0xfe, 0x80, 0x40, 0x01, 0x94, 0xfe, // ...l.l......@... + 0x6c, 0xfe, 0x6c, 0x2c, 0x01, 0x80, 0xfe, 0x80, 0x40, 0x01, 0xb9, 0xfe, 0x47, 0xfe, 0x47, 0x05, // l.l,....@...G.G. + 0xf9, 0x26, 0x21, 0xfe, 0x40, 0x19, 0x40, 0x19, 0xfe, 0x40, 0x04, 0x03, 0x02, 0x05, 0xfe, 0x40, // .&!.@.@..@.....@ + 0x19, 0x40, 0x19, 0xfe, 0x40, 0x21, 0x26, 0x2b, 0x23, 0x01, 0xb2, 0x2b, 0x23, 0x01, 0xc0, 0x17, // .@..@!&+#..+#... + 0x36, 0x17, 0x01, 0xc0, 0x23, 0x2b, 0x01, 0xb2, 0x24, 0x2a, 0x60, 0xc0, 0x01, 0x3a, 0xa4, 0x70, // 6...#+..$*`..:.p + 0xad, 0xad, 0xad, 0xfd, 0x8d, 0xc0, 0x01, 0x3a, 0xa4, 0x70, 0xad, 0xad, 0xad, 0x78, 0xa5, 0x01, // .......:.p...x.. + 0x0a, 0xa4, 0x70, 0xbd, 0xbd, 0xbd, 0xfd, 0x3d, 0xfe, 0x60, 0x24, 0x3e, 0x10, 0xe0, 0x0e, 0x0e, // ..p....=.`$>.... + 0xe0, 0x02, 0x02, 0x02, 0x02, 0xe0, 0x0e, 0x0e, 0xe0, 0x10, 0x3e, 0x24, 0x01, 0xa0, 0x26, 0x40, // ..........>$..&@ + 0x10, 0xba, 0x01, 0x90, 0x26, 0x40, 0x10, 0xc0, 0x0a, 0x0a, 0xc0, 0x10, 0x40, 0x26, 0xfe, 0x70, // ....&@......@&.p + 0xba, 0x10, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0xff, 0xfe, 0x08, 0x00, 0x05, 0x02, 0x00, 0x03, // ..@............. + 0x00, 0x09, 0x00, 0x1f, 0x00, 0x26, 0x00, 0x2e, 0x00, 0x41, 0x00, 0x00, 0x01, 0x21, 0x15, 0x21, // .....&...A...!.! + 0x03, 0x22, 0x06, 0x07, 0x21, 0x26, 0x03, 0x32, 0x36, 0x37, 0x33, 0x02, 0x21, 0x22, 0x02, 0x35, // ."..!&.2673.!".5 + 0x34, 0x00, 0x33, 0x32, 0x1e, 0x01, 0x15, 0x14, 0x07, 0x21, 0x14, 0x16, 0x25, 0x21, 0x32, 0x35, // 4.32.....!..%!25 + 0x34, 0x23, 0x21, 0x35, 0x21, 0x32, 0x36, 0x35, 0x34, 0x23, 0x21, 0x25, 0x21, 0x32, 0x1e, 0x02, // 4#!5!2654#!%!2.. + 0x15, 0x14, 0x07, 0x1e, 0x01, 0x15, 0x14, 0x0e, 0x03, 0x23, 0x21, 0x07, 0x38, 0xfe, 0x01, 0x01, // .........#!.8... + 0xff, 0xfc, 0x5a, 0x70, 0x06, 0x01, 0x98, 0x12, 0xa6, 0x3f, 0x76, 0x11, 0xdd, 0x64, 0xfe, 0xb9, // ..Zp.....?v..d.. + 0xd6, 0xfd, 0x01, 0x05, 0xce, 0x8a, 0xcd, 0x65, 0x02, 0xfd, 0x6e, 0x73, 0xfb, 0x36, 0x01, 0x28, // .......e..ns.6.( + 0xcd, 0xc7, 0xfe, 0xd2, 0x01, 0x19, 0x4e, 0x5b, 0xbe, 0xfe, 0xfc, 0xfe, 0xeb, 0x02, 0x52, 0x57, // ......N[......RW + 0x88, 0x75, 0x3f, 0xac, 0x72, 0x74, 0x31, 0x53, 0x72, 0x80, 0x46, 0xfd, 0x9d, 0x04, 0xad, 0x7c, // .u?.rt1Sr.F....| + 0xfe, 0xd2, 0x69, 0x5a, 0xc3, 0xfd, 0xb7, 0x40, 0x37, 0xfe, 0xcd, 0x01, 0x08, 0xd7, 0xd0, 0x01, // ..iZ...@7....... + 0x13, 0x88, 0xde, 0x89, 0x11, 0x1e, 0x6f, 0x79, 0x32, 0xa7, 0xb4, 0xbe, 0x49, 0x4d, 0x90, 0xd7, // ......oy2...IM.. + 0x1c, 0x43, 0x7e, 0x5b, 0xb5, 0x52, 0x20, 0xa6, 0x79, 0x4b, 0x7b, 0x54, 0x3a, 0x1a, 0x00, 0x00, // .C~[.R .yK{T:... + 0x00, 0x07, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1e, 0x00, 0x25, // ...............% + 0x00, 0x2c, 0x00, 0x41, 0x00, 0x47, 0x00, 0x4b, 0x00, 0x00, 0x01, 0x32, 0x16, 0x15, 0x11, 0x14, // .,.A.G.K...2.... + 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x13, 0x21, 0x11, 0x21, 0x32, 0x36, // .#!"&5.463.!.!26 + 0x35, 0x34, 0x27, 0x36, 0x35, 0x34, 0x2e, 0x02, 0x03, 0x23, 0x35, 0x33, 0x32, 0x15, 0x14, 0x03, // 54'654...#532... + 0x23, 0x35, 0x33, 0x32, 0x15, 0x14, 0x05, 0x22, 0x26, 0x35, 0x21, 0x36, 0x35, 0x34, 0x26, 0x23, // #532..."&5!654&# + 0x22, 0x06, 0x15, 0x14, 0x16, 0x33, 0x32, 0x37, 0x23, 0x0e, 0x01, 0x03, 0x32, 0x17, 0x23, 0x3e, // "....327#...2.#> + 0x01, 0x03, 0x21, 0x15, 0x21, 0x04, 0xe0, 0x77, 0xa9, 0xa9, 0x77, 0xfc, 0x40, 0x77, 0xa9, 0xa9, // ..!.!..w..w.@w.. + 0x77, 0xd3, 0xfe, 0x8d, 0x01, 0x7e, 0x75, 0xa0, 0x8f, 0x6b, 0x27, 0x4a, 0x54, 0x4d, 0xb0, 0xa3, // w....~u..k'JTM.. + 0x77, 0x61, 0xb9, 0xbd, 0x7c, 0x02, 0x0a, 0x44, 0x48, 0x01, 0x9b, 0x01, 0x95, 0x81, 0x80, 0xa4, // wa..|..DH....... + 0x9e, 0x86, 0xcd, 0x3e, 0x8a, 0x0b, 0x49, 0x31, 0x71, 0x0b, 0xfe, 0x04, 0x46, 0x6a, 0x01, 0x3f, // ...>..I1q...Fj.? + 0xfe, 0xc1, 0x05, 0x80, 0xa9, 0x77, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, // .....w.@w..w..w. + 0xfe, 0x91, 0xfc, 0xed, 0x73, 0x71, 0x9e, 0x2a, 0x34, 0x70, 0x39, 0x4f, 0x2a, 0x11, 0xfe, 0xc2, // ....sq.*4p9O*... + 0xb8, 0x5a, 0x5e, 0xfe, 0xb1, 0xd9, 0x71, 0x68, 0x20, 0x4c, 0x45, 0x0a, 0x14, 0x84, 0xb1, 0xac, // .Z^...qh LE..... + 0x82, 0x87, 0xa4, 0xbf, 0x22, 0x28, 0x01, 0x6e, 0x7a, 0x38, 0x42, 0x01, 0x0a, 0x4d, 0x00, 0x00, // ...."(.nz8B..M.. + 0x00, 0x04, 0x00, 0x00, 0xff, 0x80, 0x07, 0x00, 0x05, 0x80, 0x00, 0x07, 0x00, 0x1b, 0x00, 0x27, // ...............' + 0x00, 0x3f, 0x00, 0x00, 0x00, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x00, 0x34, 0x26, 0x23, // .?....."&462.4&# + 0x22, 0x07, 0x17, 0x1e, 0x01, 0x07, 0x0e, 0x01, 0x27, 0x2e, 0x01, 0x27, 0x1e, 0x01, 0x33, 0x32, // ".......'..'..32 + 0x01, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x37, 0x14, 0x00, 0x23, // .4&#"....3267..# + 0x01, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x2f, 0x01, 0x11, 0x05, 0x36, 0x33, 0x32, 0x17, 0x01, 0x36, // ...#"&/...632..6 + 0x00, 0x33, 0x32, 0x00, 0x06, 0x2e, 0x8f, 0xca, 0x8f, 0x8f, 0xca, 0xfd, 0x8d, 0x92, 0x68, 0x1b, // .32...........h. + 0x1b, 0x68, 0x4d, 0x41, 0x1f, 0x1f, 0x98, 0x4c, 0x15, 0x52, 0x14, 0x20, 0x76, 0x47, 0x68, 0x03, // .hMA...L.R. vGh. + 0xd0, 0xb3, 0x7e, 0x7f, 0xb3, 0xb3, 0x7f, 0x7e, 0xb3, 0x96, 0xfe, 0xf5, 0xbc, 0xfe, 0x4b, 0x0c, // ..~....~......K. + 0xc2, 0x84, 0x79, 0xba, 0x19, 0xe6, 0x01, 0x85, 0x4f, 0x5e, 0x0d, 0x16, 0x01, 0x1c, 0x02, 0x01, // ..y.....O^...... + 0x0b, 0xbb, 0xbc, 0x01, 0x0b, 0x04, 0x1f, 0xca, 0x8f, 0x8f, 0xca, 0x8f, 0xfb, 0xbe, 0xd0, 0x92, // ................ + 0x06, 0x2a, 0x1f, 0x97, 0x4c, 0x4d, 0x40, 0x1f, 0x08, 0x21, 0x08, 0x3c, 0x49, 0x03, 0xdf, 0x7e, // .*..LM@..!....w..w + 0xa9, 0xf7, 0x8e, 0xc8, 0x8d, 0x8d, 0x64, 0x65, 0x8d, 0x03, 0x29, 0xa0, 0x71, 0x72, 0x4f, 0x50, // ......de..).qrOP + 0x71, 0xfe, 0xc8, 0xa6, 0x73, 0x3a, 0x30, 0x14, 0x14, 0x18, 0x33, 0x3d, 0x3c, 0x78, 0x18, 0x21, // q...s:0...3=.7...' + 0x0e, 0x03, 0x0f, 0x01, 0x03, 0x2e, 0x01, 0x3f, 0x01, 0x36, 0x37, 0x27, 0x01, 0x03, 0x0e, 0x01, // .......?.67'.... + 0x0f, 0x01, 0x06, 0x07, 0x17, 0x03, 0x13, 0x17, 0x16, 0x36, 0x37, 0x01, 0x06, 0x03, 0x25, 0x27, // .........67...%' + 0x13, 0x3e, 0x01, 0x17, 0x1e, 0x05, 0x01, 0x13, 0x16, 0x06, 0x07, 0x0e, 0x05, 0x07, 0x26, 0x03, // .>............&. + 0x25, 0x27, 0x37, 0x03, 0x25, 0x37, 0x2e, 0x03, 0x2f, 0x01, 0x05, 0x36, 0x16, 0x1f, 0x01, 0x16, // %'7.%7../..6.... + 0x03, 0x44, 0x0f, 0x02, 0xfe, 0x5c, 0x24, 0x3e, 0x10, 0x0b, 0x07, 0x0f, 0x09, 0x22, 0x02, 0x4e, // .D....$>.....".N + 0x2c, 0xb4, 0x93, 0x3f, 0x61, 0x30, 0x1f, 0x03, 0x04, 0xbe, 0x11, 0x02, 0x07, 0x08, 0x23, 0x4f, // ,..?a0........#O + 0x8c, 0x06, 0x80, 0xbc, 0x0c, 0x31, 0x13, 0x12, 0x47, 0x94, 0x08, 0xe6, 0xd3, 0x07, 0xaa, 0xe2, // .....1..G....... + 0x39, 0xfd, 0x27, 0x2f, 0xda, 0xfe, 0xc3, 0x13, 0xe1, 0x14, 0x50, 0x28, 0x18, 0x31, 0x23, 0x30, // 9.'/......P(.1#0 + 0x18, 0x30, 0x02, 0x97, 0xd4, 0x12, 0x0b, 0x16, 0x0d, 0x28, 0x24, 0x3d, 0x21, 0x46, 0x0b, 0x22, // .0.......($=!F." + 0xe7, 0x01, 0x39, 0x7c, 0x8e, 0xdc, 0xfe, 0x5d, 0x97, 0x22, 0x52, 0x45, 0x3c, 0x11, 0x11, 0x01, // ..9|...]."RE<... + 0x95, 0x1f, 0x36, 0x0c, 0x0b, 0x27, 0x01, 0x6f, 0xfe, 0x90, 0x16, 0x1d, 0x03, 0x39, 0x25, 0x1b, // ..6..'.o.....9%. + 0x38, 0x4a, 0x24, 0x5c, 0x07, 0x0c, 0x02, 0x3a, 0xfe, 0x85, 0x5c, 0x48, 0x91, 0x69, 0x54, 0x15, // 8J$....:...H.iT. + 0x15, 0x01, 0x65, 0x1a, 0x3c, 0x11, 0x12, 0x3f, 0x7d, 0x56, 0xfd, 0xea, 0xfe, 0x99, 0x1d, 0x23, // ..e.<..?}V.....# + 0x03, 0x04, 0x07, 0x05, 0xa4, 0x01, 0x6f, 0x01, 0x6a, 0xad, 0x10, 0x16, 0x16, 0x03, 0xb2, 0x3f, // ......o.j......? + 0xfe, 0x8c, 0xbb, 0x0c, 0x01, 0x64, 0x1f, 0x1c, 0x04, 0x02, 0x14, 0x16, 0x2c, 0x19, 0x36, 0xfe, // .....d......,.6. + 0xc5, 0xfe, 0x95, 0x25, 0x4e, 0x23, 0x14, 0x22, 0x16, 0x16, 0x0a, 0x12, 0x03, 0x48, 0x01, 0x6c, // ...%N#.".....H.l + 0xc3, 0xed, 0x53, 0xfe, 0x8b, 0x14, 0x56, 0x59, 0x9a, 0x5d, 0x43, 0x0d, 0x0d, 0x01, 0x03, 0x1b, // ..S...VY.]C..... + 0x0f, 0x0f, 0x3d, 0x00, 0x00, 0x04, 0x00, 0x00, 0xff, 0x40, 0x08, 0x00, 0x05, 0x80, 0x00, 0x07, // ..=......@...... + 0x00, 0x11, 0x00, 0x19, 0x00, 0x43, 0x00, 0x00, 0x00, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, // .....C...4&"...2 + 0x13, 0x21, 0x03, 0x2e, 0x01, 0x23, 0x21, 0x22, 0x06, 0x07, 0x00, 0x34, 0x26, 0x22, 0x06, 0x14, // .!...#!"...4&".. + 0x16, 0x32, 0x13, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x15, 0x14, 0x06, 0x22, 0x26, 0x3d, 0x01, 0x21, // .2....+...."&=.! + 0x15, 0x14, 0x06, 0x22, 0x26, 0x3d, 0x01, 0x23, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x3b, 0x01, // ..."&=.#"&5.46;. + 0x13, 0x3e, 0x01, 0x33, 0x21, 0x32, 0x16, 0x17, 0x13, 0x33, 0x32, 0x16, 0x01, 0xe0, 0x5e, 0x84, // .>.3!2...32...^. + 0x5e, 0x5e, 0x84, 0x82, 0x03, 0xf8, 0x59, 0x02, 0x18, 0x09, 0xfd, 0x00, 0x09, 0x18, 0x02, 0x05, // ^^....Y......... + 0x03, 0x5e, 0x84, 0x5e, 0x5e, 0x84, 0xfe, 0x12, 0x0e, 0x60, 0x70, 0xa0, 0x70, 0xfc, 0x00, 0x70, // .^.^^....`p.p..p + 0xa0, 0x70, 0x60, 0x0e, 0x12, 0x83, 0x5d, 0x1c, 0x69, 0x17, 0xa2, 0x62, 0x03, 0x00, 0x62, 0xa2, // .p`...].i..b..b. + 0x17, 0x69, 0x1c, 0x5d, 0x83, 0x01, 0x7e, 0x84, 0x5e, 0x5e, 0x84, 0x5e, 0x01, 0xe0, 0x01, 0x65, // .i.]..~.^^.^...e + 0x08, 0x13, 0x13, 0x08, 0xfd, 0x19, 0x84, 0x5e, 0x5e, 0x84, 0x5e, 0x01, 0x00, 0xfe, 0x80, 0x0e, // .......^^.^..... + 0x12, 0x80, 0x50, 0x70, 0x70, 0x50, 0x80, 0x80, 0x50, 0x70, 0x70, 0x50, 0x80, 0x12, 0x0e, 0x01, // ..PppP..PppP.... + 0x80, 0x5d, 0x83, 0x01, 0xa3, 0x5e, 0x7f, 0x7f, 0x5e, 0xfe, 0x5d, 0x83, 0x00, 0x04, 0x00, 0x00, // .]...^..^.]..... + 0xff, 0x00, 0x08, 0x00, 0x06, 0x00, 0x00, 0x33, 0x00, 0x3b, 0x00, 0x45, 0x00, 0x4d, 0x00, 0x00, // .......3.;.E.M.. + 0x01, 0x32, 0x16, 0x15, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x15, 0x14, 0x06, 0x22, 0x26, 0x3d, 0x01, // .2.....+...."&=. + 0x21, 0x15, 0x14, 0x06, 0x22, 0x26, 0x3d, 0x01, 0x23, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x3b, // !..."&=.#"&5.46; + 0x01, 0x13, 0x3e, 0x01, 0x3b, 0x01, 0x35, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x1d, 0x01, 0x33, // ..>.;.5463!2...3 + 0x32, 0x16, 0x17, 0x13, 0x00, 0x32, 0x36, 0x34, 0x26, 0x22, 0x06, 0x14, 0x01, 0x21, 0x03, 0x2e, // 2....264&"...!.. + 0x01, 0x23, 0x21, 0x22, 0x06, 0x07, 0x00, 0x32, 0x36, 0x34, 0x26, 0x22, 0x06, 0x14, 0x07, 0x20, // .#!"...264&"... + 0x5d, 0x83, 0x12, 0x0e, 0x60, 0x70, 0xa0, 0x70, 0xfc, 0x00, 0x70, 0xa0, 0x70, 0x60, 0x0e, 0x12, // ]...`p.p..p.p`.. + 0x83, 0x5d, 0x1c, 0x69, 0x17, 0xa2, 0x62, 0x80, 0x12, 0x0e, 0x01, 0xc0, 0x0e, 0x12, 0x80, 0x62, // .].i..b........b + 0xa2, 0x17, 0x69, 0xf9, 0xfa, 0x84, 0x5e, 0x5e, 0x84, 0x5e, 0x01, 0x64, 0x03, 0xf8, 0x59, 0x02, // ..i...^^.^.d..Y. + 0x18, 0x09, 0xfd, 0x00, 0x09, 0x18, 0x02, 0x04, 0x21, 0x84, 0x5e, 0x5e, 0x84, 0x5e, 0x02, 0x80, // ........!.^^.^.. + 0x83, 0x5d, 0xfe, 0x80, 0x0e, 0x12, 0x40, 0x50, 0x70, 0x70, 0x50, 0x40, 0x40, 0x50, 0x70, 0x70, // .]....@PppP@@Ppp + 0x50, 0x40, 0x12, 0x0e, 0x01, 0x80, 0x5d, 0x83, 0x01, 0xa3, 0x5e, 0x7f, 0xe0, 0x0e, 0x12, 0x12, // P@....]...^..... + 0x0e, 0xe0, 0x7f, 0x5e, 0xfe, 0x5d, 0xfe, 0x20, 0x5e, 0x84, 0x5e, 0x5e, 0x84, 0x01, 0x82, 0x01, // ...^.]. ^.^^.... + 0x65, 0x08, 0x13, 0x13, 0x08, 0xfc, 0xbb, 0x5e, 0x84, 0x5e, 0x5e, 0x84, 0x00, 0x01, 0x00, 0x20, // e......^.^^.... + 0xff, 0x00, 0x05, 0xe0, 0x06, 0x00, 0x00, 0x33, 0x00, 0x00, 0x24, 0x14, 0x06, 0x23, 0x21, 0x1e, // .......3..$..#!. + 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x34, 0x36, 0x37, 0x21, 0x22, 0x26, 0x34, // ....#!"&5467!"&4 + 0x37, 0x01, 0x23, 0x22, 0x26, 0x34, 0x37, 0x01, 0x23, 0x22, 0x26, 0x34, 0x37, 0x01, 0x36, 0x32, // 7.#"&47.#"&47.62 + 0x17, 0x01, 0x16, 0x14, 0x06, 0x2b, 0x01, 0x01, 0x16, 0x14, 0x06, 0x2b, 0x01, 0x01, 0x05, 0xe0, // .....+.....+.... + 0x26, 0x1a, 0xfe, 0x32, 0x01, 0x0a, 0x24, 0x19, 0xfe, 0xc0, 0x19, 0x24, 0x0a, 0x01, 0xfe, 0x32, // &..2..$....$...2 + 0x1a, 0x26, 0x13, 0x01, 0x92, 0xe5, 0x1a, 0x26, 0x13, 0x01, 0x92, 0xc5, 0x1a, 0x26, 0x13, 0x01, // .&.....&.....&.. + 0x80, 0x13, 0x34, 0x13, 0x01, 0x80, 0x13, 0x26, 0x1a, 0xc5, 0x01, 0x92, 0x13, 0x26, 0x1a, 0xe5, // ..4....&.....&.. + 0x01, 0x92, 0x5a, 0x34, 0x26, 0x11, 0x8d, 0x26, 0x19, 0x23, 0x23, 0x19, 0x26, 0x8d, 0x11, 0x26, // ..Z4&..&.##.&..& + 0x34, 0x13, 0x01, 0x93, 0x26, 0x34, 0x13, 0x01, 0x93, 0x26, 0x34, 0x13, 0x01, 0x80, 0x13, 0x13, // 4...&4...&4..... + 0xfe, 0x80, 0x13, 0x34, 0x26, 0xfe, 0x6d, 0x13, 0x34, 0x26, 0xfe, 0x6d, 0x00, 0x04, 0x00, 0x00, // ...4&.m.4&.m.... + 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x15, 0x00, 0x2b, 0x00, 0x44, 0x00, 0x50, 0x00, 0x00, // .........+.D.P.. + 0x01, 0x34, 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x15, 0x14, 0x16, 0x33, 0x32, 0x37, 0x36, 0x33, // .4'&#".....32763 + 0x32, 0x17, 0x16, 0x33, 0x32, 0x36, 0x37, 0x34, 0x27, 0x26, 0x21, 0x22, 0x07, 0x06, 0x15, 0x14, // 2..32674'&!".... + 0x16, 0x33, 0x32, 0x37, 0x36, 0x33, 0x20, 0x17, 0x16, 0x33, 0x32, 0x36, 0x13, 0x34, 0x27, 0x26, // .32763 ..326.4'& + 0x24, 0x23, 0x22, 0x07, 0x0e, 0x01, 0x15, 0x14, 0x16, 0x33, 0x32, 0x37, 0x36, 0x33, 0x32, 0x04, // $#"......327632. + 0x17, 0x16, 0x33, 0x32, 0x3e, 0x01, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, // ..32>.... $...$ + 0x04, 0x04, 0x67, 0x1e, 0xc1, 0xfe, 0x85, 0x9a, 0x2a, 0x1b, 0x16, 0x05, 0x20, 0x84, 0x6f, 0xe2, // ..g.....*... .o. + 0xab, 0x13, 0x0e, 0x13, 0x1c, 0x60, 0x23, 0xed, 0xfe, 0xc9, 0x99, 0x96, 0x30, 0x23, 0x19, 0x07, // .....`#.....0#.. + 0x1e, 0x7a, 0x81, 0x01, 0x17, 0xd1, 0x18, 0x0e, 0x19, 0x23, 0x6c, 0x28, 0x7e, 0xfe, 0xb2, 0xb0, // .z.......#l(~... + 0xcc, 0xa0, 0x17, 0x1f, 0x29, 0x1f, 0x0b, 0x1d, 0x85, 0xae, 0x9f, 0x01, 0x2d, 0x67, 0x15, 0x13, // ....).......-g.. + 0x1d, 0x2b, 0xcd, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, // .+.....^.....a.. + 0x01, 0x61, 0x01, 0x46, 0x20, 0x13, 0x73, 0x22, 0x09, 0x2b, 0x14, 0x1d, 0x08, 0x1b, 0x67, 0x0b, // .a.F .s".+....g. + 0x1b, 0xec, 0x28, 0x15, 0x8d, 0x2a, 0x0d, 0x33, 0x19, 0x23, 0x08, 0x21, 0x7c, 0x0d, 0x23, 0x01, // ..(..*.3.#.!|.#. + 0x11, 0x2f, 0x17, 0x49, 0x4b, 0x2f, 0x07, 0x25, 0x1e, 0x1f, 0x2a, 0x08, 0x25, 0x44, 0x3d, 0x0c, // ./.IK/.%..*.%D=. + 0x29, 0x5b, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, // )[.^.....a...a.. + 0x00, 0x01, 0x00, 0x00, 0xff, 0x80, 0x04, 0x00, 0x06, 0x00, 0x00, 0x13, 0x00, 0x00, 0x09, 0x01, // ................ + 0x17, 0x21, 0x11, 0x21, 0x07, 0x03, 0x07, 0x21, 0x11, 0x01, 0x27, 0x21, 0x11, 0x21, 0x37, 0x13, // .!.!...!..'!.!7. + 0x37, 0x21, 0x04, 0x00, 0xfe, 0xd1, 0x18, 0x01, 0x17, 0xfe, 0x05, 0x2c, 0x8e, 0x1e, 0xfe, 0xd3, // 7!.........,.... + 0x01, 0x2f, 0x18, 0xfe, 0xe9, 0x01, 0xfb, 0x2c, 0x8e, 0x1e, 0x01, 0x2d, 0x04, 0xd1, 0xfd, 0xba, // ./.....,...-.... + 0x1f, 0xfe, 0x61, 0x1e, 0xfe, 0xef, 0x1e, 0x01, 0x2f, 0x02, 0x47, 0x1e, 0x01, 0x9f, 0x1e, 0x01, // ..a...../.G..... + 0x11, 0x1e, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x8c, 0x09, 0x00, 0x04, 0x74, 0x00, 0x0e, // .............t.. + 0x00, 0x25, 0x00, 0x2f, 0x00, 0x3b, 0x00, 0x3c, 0x00, 0x48, 0x00, 0x54, 0x00, 0x62, 0x00, 0x63, // .%./.;.<.H.T.b.c + 0x00, 0x71, 0x00, 0x7f, 0x00, 0x8d, 0x00, 0x90, 0x00, 0x9e, 0x00, 0xac, 0x00, 0xc0, 0x00, 0xd4, // .q.............. + 0x00, 0x00, 0x25, 0x37, 0x03, 0x2e, 0x01, 0x23, 0x22, 0x06, 0x15, 0x03, 0x17, 0x1e, 0x01, 0x33, // ..%7...#"......3 + 0x32, 0x25, 0x37, 0x03, 0x34, 0x27, 0x26, 0x22, 0x07, 0x06, 0x15, 0x07, 0x03, 0x14, 0x17, 0x15, // 2%7.4'&"........ + 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x35, 0x01, 0x17, 0x07, 0x06, 0x22, 0x2f, 0x01, 0x37, // ...32765...."/.7 + 0x36, 0x32, 0x37, 0x17, 0x07, 0x06, 0x23, 0x22, 0x35, 0x27, 0x37, 0x34, 0x33, 0x32, 0x01, 0x03, // 627...#"5'7432.. + 0x17, 0x07, 0x14, 0x23, 0x22, 0x2f, 0x01, 0x37, 0x36, 0x33, 0x32, 0x1f, 0x01, 0x07, 0x06, 0x23, // ...#"/.7632....# + 0x22, 0x35, 0x27, 0x37, 0x34, 0x33, 0x32, 0x1f, 0x01, 0x07, 0x06, 0x23, 0x22, 0x26, 0x35, 0x27, // "5'7432....#"&5' + 0x37, 0x34, 0x36, 0x33, 0x32, 0x09, 0x01, 0x13, 0x07, 0x14, 0x06, 0x23, 0x22, 0x2f, 0x01, 0x13, // 74632......#"/.. + 0x36, 0x33, 0x32, 0x16, 0x37, 0x13, 0x07, 0x14, 0x06, 0x23, 0x22, 0x2f, 0x01, 0x13, 0x36, 0x33, // 632.7....#"/..63 + 0x32, 0x16, 0x37, 0x13, 0x07, 0x06, 0x23, 0x22, 0x2f, 0x01, 0x13, 0x34, 0x36, 0x33, 0x32, 0x16, // 2.7...#"/..4632. + 0x01, 0x39, 0x01, 0x03, 0x13, 0x07, 0x14, 0x06, 0x22, 0x26, 0x2f, 0x01, 0x13, 0x34, 0x36, 0x32, // .9......"&/..462 + 0x16, 0x17, 0x13, 0x07, 0x14, 0x06, 0x22, 0x26, 0x2f, 0x01, 0x13, 0x3e, 0x01, 0x32, 0x16, 0x13, // ......"&/..>.2.. + 0x07, 0x31, 0x14, 0x06, 0x22, 0x26, 0x2f, 0x02, 0x13, 0x35, 0x36, 0x37, 0x36, 0x33, 0x32, 0x17, // .1.."&/..567632. + 0x16, 0x17, 0x01, 0x14, 0x06, 0x23, 0x21, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x37, 0x36, 0x33, 0x32, // .....#!..5.47632 + 0x00, 0x17, 0x36, 0x33, 0x32, 0x16, 0x03, 0x10, 0x10, 0x10, 0x01, 0x0d, 0x0a, 0x09, 0x0e, 0x0e, // ..632........... + 0x0e, 0x01, 0x0d, 0x09, 0x16, 0x01, 0x2a, 0x0b, 0x0c, 0x0d, 0x08, 0x10, 0x08, 0x0d, 0x01, 0x0a, // ......*......... + 0x0b, 0x06, 0x09, 0x0e, 0x0b, 0x09, 0x09, 0xfb, 0xec, 0x14, 0x14, 0x02, 0x0e, 0x02, 0x11, 0x11, // ................ + 0x02, 0x0e, 0x58, 0x1a, 0x1a, 0x02, 0x08, 0x09, 0x17, 0x17, 0x09, 0x08, 0x01, 0x1a, 0xbc, 0x19, // ..X............. + 0x19, 0x0b, 0x0a, 0x02, 0x15, 0x15, 0x02, 0x0a, 0x0b, 0x5e, 0x17, 0x17, 0x02, 0x0c, 0x0d, 0x15, // .........^...... + 0x15, 0x0d, 0x0c, 0x60, 0x15, 0x15, 0x02, 0x0e, 0x06, 0x09, 0x14, 0x14, 0x09, 0x06, 0x0e, 0x01, // ...`............ + 0x81, 0xfe, 0xdf, 0x15, 0x15, 0x0a, 0x07, 0x10, 0x02, 0x12, 0x12, 0x02, 0x10, 0x07, 0x0a, 0x5e, // ...............^ + 0x13, 0x13, 0x0b, 0x08, 0x12, 0x02, 0x10, 0x10, 0x02, 0x12, 0x08, 0x0b, 0x62, 0x12, 0x12, 0x02, // ............b... + 0x14, 0x13, 0x02, 0x10, 0x10, 0x0d, 0x08, 0x09, 0x0c, 0x01, 0x89, 0xc6, 0x0f, 0x0f, 0x0f, 0x14, // ................ + 0x0e, 0x01, 0x0e, 0x0e, 0x0f, 0x14, 0x0f, 0x63, 0x0e, 0x0e, 0x10, 0x16, 0x10, 0x01, 0x0c, 0x0c, // .......c........ + 0x01, 0x10, 0x16, 0x0f, 0xd5, 0x0e, 0x12, 0x1a, 0x12, 0x01, 0x06, 0x06, 0x0c, 0x02, 0x0a, 0x09, // ................ + 0x0b, 0x08, 0x07, 0x0e, 0x02, 0x04, 0x66, 0xa6, 0x75, 0xfc, 0xee, 0x0d, 0x12, 0x1c, 0x55, 0x60, // ......f.u.....U` + 0xc3, 0x01, 0x1e, 0x11, 0x35, 0x39, 0x75, 0xa6, 0xa4, 0xf1, 0x02, 0x0b, 0x0a, 0x0e, 0x0e, 0x0a, // ....59u......... + 0xfd, 0xf5, 0xf1, 0x0a, 0x0d, 0x34, 0xd3, 0x02, 0x4a, 0x10, 0x08, 0x05, 0x05, 0x08, 0x10, 0x06, // .....4..J....... + 0xfd, 0xbd, 0x01, 0xeb, 0x01, 0x0a, 0x07, 0x0b, 0x09, 0x07, 0x0d, 0x01, 0x6c, 0x80, 0x7e, 0x09, // ............l.~. + 0x09, 0x7e, 0x80, 0x09, 0x46, 0xcf, 0xcb, 0x09, 0x0a, 0xca, 0xcf, 0x09, 0xfe, 0x32, 0x01, 0xeb, // .~..F........2.. + 0xf5, 0xed, 0x0b, 0x0b, 0xed, 0xf5, 0x0c, 0x05, 0xfc, 0xf4, 0x0d, 0x0d, 0xf4, 0xfc, 0x0d, 0x1f, // ................ + 0xea, 0xf6, 0x10, 0x09, 0x07, 0xf6, 0xea, 0x06, 0x09, 0xfe, 0x16, 0x02, 0x6d, 0xfe, 0x84, 0xf6, // ............m... + 0x07, 0x0b, 0x12, 0xf6, 0x01, 0x7c, 0x12, 0x0b, 0x4f, 0xfe, 0x2c, 0xf4, 0x08, 0x0b, 0x13, 0xf4, // .....|..O.,..... + 0x01, 0xd4, 0x13, 0x0b, 0x20, 0xfe, 0x06, 0xf2, 0x15, 0x15, 0xf2, 0x01, 0xfa, 0x09, 0x0d, 0x0d, // .... ........... + 0xfd, 0x11, 0x02, 0xea, 0xfe, 0x02, 0xef, 0x0a, 0x0f, 0x0e, 0x0b, 0xef, 0x01, 0xfe, 0x0b, 0x0e, // ................ + 0x0e, 0x1e, 0xfe, 0x14, 0xec, 0x0b, 0x10, 0x10, 0x0b, 0xec, 0x01, 0xec, 0x0c, 0x10, 0x10, 0xfe, // ................ + 0x08, 0xe7, 0x0d, 0x12, 0x12, 0x0d, 0x72, 0x75, 0x02, 0x7c, 0x03, 0x0f, 0x09, 0x07, 0x05, 0x08, // ......ru.|...... + 0x12, 0xfd, 0x94, 0x75, 0xa5, 0x02, 0x12, 0x0d, 0x03, 0x83, 0x17, 0x0a, 0x22, 0xfe, 0xf9, 0xc0, // ...u........"... + 0x16, 0xa6, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0xff, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x0d, // ................ + 0x00, 0x1b, 0x00, 0x29, 0x00, 0x39, 0x00, 0x00, 0x00, 0x20, 0x24, 0x37, 0x15, 0x14, 0x06, 0x04, // ...).9... $7.... + 0x20, 0x24, 0x26, 0x3d, 0x01, 0x16, 0x00, 0x20, 0x24, 0x37, 0x15, 0x14, 0x06, 0x04, 0x20, 0x24, // $&=... $7.... $ + 0x26, 0x3d, 0x01, 0x16, 0x00, 0x20, 0x24, 0x37, 0x15, 0x14, 0x06, 0x04, 0x20, 0x24, 0x26, 0x3d, // &=... $7.... $&= + 0x01, 0x16, 0x00, 0x20, 0x04, 0x16, 0x1d, 0x01, 0x14, 0x06, 0x04, 0x20, 0x24, 0x26, 0x3d, 0x01, // ... ....... $&=. + 0x34, 0x36, 0x02, 0x13, 0x01, 0xda, 0x01, 0x9c, 0x77, 0xce, 0xfe, 0x9e, 0xfe, 0x60, 0xfe, 0x9e, // 46......w....`.. + 0xce, 0x77, 0x01, 0x9c, 0x01, 0xda, 0x01, 0x9c, 0x77, 0xce, 0xfe, 0x9e, 0xfe, 0x60, 0xfe, 0x9e, // .w......w....`.. + 0xce, 0x77, 0x01, 0x9c, 0x01, 0xda, 0x01, 0x9c, 0x77, 0xce, 0xfe, 0x9e, 0xfe, 0x60, 0xfe, 0x9e, // .w......w....`.. + 0xce, 0x77, 0x01, 0xb9, 0x01, 0xa0, 0x01, 0x62, 0xce, 0xce, 0xfe, 0x9e, 0xfe, 0x60, 0xfe, 0x9e, // .w.....b.....`.. + 0xce, 0xce, 0x03, 0x00, 0x56, 0x54, 0xaa, 0x45, 0x76, 0x45, 0x45, 0x76, 0x45, 0xaa, 0x54, 0xfc, // ....VT.EvEEvE.T. + 0xaa, 0x56, 0x54, 0xaa, 0x45, 0x76, 0x45, 0x45, 0x76, 0x45, 0xaa, 0x54, 0x01, 0x2a, 0x56, 0x54, // .VT.EvEEvE.T.*VT + 0xaa, 0x45, 0x76, 0x45, 0x45, 0x76, 0x45, 0xaa, 0x54, 0x04, 0x2a, 0x45, 0x76, 0x45, 0x80, 0x45, // .EvEEvE.T.*EvE.E + 0x76, 0x45, 0x45, 0x76, 0x45, 0x80, 0x45, 0x76, 0x00, 0x08, 0x00, 0x00, 0xff, 0x00, 0x06, 0x00, // vEEvE.Ev........ + 0x06, 0x00, 0x00, 0x13, 0x00, 0x1a, 0x00, 0x23, 0x00, 0x5e, 0x00, 0x63, 0x00, 0x74, 0x00, 0x7f, // .......#.^.c.t.. + 0x00, 0x87, 0x00, 0x00, 0x01, 0x1e, 0x01, 0x15, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, // ...........#!"&5 + 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x17, 0x07, 0x11, 0x21, 0x26, 0x27, 0x01, 0x26, 0x01, // .463!2....!&'.&. + 0x11, 0x21, 0x22, 0x26, 0x35, 0x11, 0x21, 0x11, 0x01, 0x16, 0x17, 0x36, 0x33, 0x32, 0x17, 0x16, // .!"&5.!....632.. + 0x07, 0x14, 0x06, 0x07, 0x15, 0x06, 0x23, 0x22, 0x26, 0x27, 0x06, 0x07, 0x02, 0x23, 0x22, 0x2f, // ......#"&'...#"/ + 0x01, 0x26, 0x27, 0x26, 0x37, 0x3e, 0x01, 0x37, 0x36, 0x17, 0x16, 0x15, 0x36, 0x37, 0x36, 0x37, // .&'&7>.76...6767 + 0x2e, 0x01, 0x37, 0x36, 0x3b, 0x02, 0x32, 0x17, 0x16, 0x07, 0x06, 0x07, 0x16, 0x1d, 0x01, 0x06, // ..76;.2......... + 0x07, 0x16, 0x01, 0x36, 0x37, 0x0e, 0x01, 0x01, 0x06, 0x17, 0x36, 0x37, 0x34, 0x37, 0x36, 0x37, // ...67.....674767 + 0x26, 0x35, 0x26, 0x35, 0x26, 0x27, 0x14, 0x07, 0x03, 0x36, 0x37, 0x2e, 0x01, 0x27, 0x26, 0x27, // &5&5&'...67..'&' + 0x06, 0x07, 0x06, 0x05, 0x26, 0x23, 0x16, 0x33, 0x32, 0x37, 0x34, 0x05, 0xbc, 0x1c, 0x28, 0x38, // ....&#.3274...(8 + 0x28, 0xfa, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x03, 0x80, 0x28, 0x60, 0x1c, 0x84, 0x01, 0x78, 0x0a, // (..(88(..(`...x. + 0x0c, 0xfe, 0xc7, 0x0c, 0x01, 0x63, 0xfe, 0x60, 0x28, 0x38, 0xfd, 0x00, 0x02, 0xfe, 0x21, 0x33, // .....c.`(8....!3 + 0x3b, 0x3a, 0x93, 0x1e, 0x10, 0x0e, 0x02, 0x01, 0x06, 0x41, 0x30, 0x86, 0x3f, 0xdd, 0xab, 0x99, // ;:.......A0.?... + 0x59, 0x0f, 0x0d, 0x18, 0x01, 0x05, 0x0a, 0x04, 0x09, 0x5e, 0x55, 0x0e, 0x09, 0x02, 0x34, 0x37, // Y........^U...47 + 0x44, 0x24, 0x18, 0x0d, 0x0d, 0x0b, 0x1f, 0x15, 0x01, 0x17, 0x0c, 0x12, 0x09, 0x02, 0x02, 0x01, // D$.............. + 0x02, 0x0c, 0x37, 0xfe, 0x1b, 0x34, 0x55, 0x33, 0x49, 0x01, 0x81, 0x0f, 0x0d, 0x01, 0x06, 0x07, // ..7..4U3I....... + 0x01, 0x03, 0x01, 0x01, 0x01, 0x0c, 0x01, 0x7c, 0x87, 0x95, 0x02, 0x16, 0x05, 0x4c, 0x33, 0x1b, // .......|.....L3. + 0x38, 0x1e, 0x02, 0x77, 0x18, 0x74, 0x4c, 0x30, 0x0e, 0x04, 0x04, 0x84, 0x1c, 0x60, 0x28, 0xfb, // 8..w.tL0.....`(. + 0x80, 0x28, 0x38, 0x38, 0x28, 0x06, 0x40, 0x28, 0x38, 0x28, 0x1c, 0x44, 0xfe, 0x88, 0x1d, 0x0c, // .(88(.@(8(.D.... + 0x01, 0x39, 0x0c, 0xfa, 0x12, 0x04, 0x00, 0x38, 0x28, 0x01, 0xa0, 0xfa, 0x00, 0x02, 0x51, 0x1a, // .9.....8(.....Q. + 0x1e, 0x07, 0x31, 0x16, 0x1e, 0x01, 0x02, 0x01, 0x01, 0x26, 0x28, 0x21, 0x18, 0x3b, 0xfe, 0xfa, // ..1......&(!.;.. + 0x07, 0x0c, 0x01, 0x04, 0x0a, 0x1a, 0x28, 0x67, 0x2d, 0x09, 0x0f, 0x02, 0x02, 0x55, 0x70, 0x88, // ......(g-....Up. + 0x7e, 0x52, 0x9b, 0x32, 0x28, 0x0f, 0x15, 0x2f, 0x06, 0x02, 0x03, 0x05, 0x1e, 0x7b, 0x45, 0xa4, // ~R.2(../.....{E. + 0xfe, 0x1b, 0x18, 0x86, 0x28, 0x58, 0x03, 0x7a, 0x2a, 0x5a, 0x07, 0x25, 0x03, 0x28, 0x04, 0x04, // ....(X.z*Z.%.(.. + 0x01, 0x01, 0x02, 0x01, 0x16, 0x0e, 0x01, 0x01, 0xfd, 0x69, 0x36, 0x1b, 0x01, 0x11, 0x05, 0x43, // .........i6....C + 0x6d, 0x56, 0x6f, 0x38, 0x0b, 0x18, 0x1c, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, // mVo8............ + 0xff, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x13, 0x00, 0x1a, 0x00, 0x23, 0x00, 0x54, 0x00, 0x00, // ...........#.T.. + 0x01, 0x1e, 0x01, 0x15, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, // .......#!"&5.463 + 0x21, 0x32, 0x16, 0x17, 0x07, 0x11, 0x21, 0x26, 0x27, 0x01, 0x26, 0x01, 0x11, 0x21, 0x22, 0x26, // !2....!&'.&..!"& + 0x35, 0x11, 0x21, 0x11, 0x13, 0x15, 0x33, 0x13, 0x33, 0x13, 0x36, 0x37, 0x36, 0x35, 0x33, 0x17, // 5.!...3.3.67653. + 0x1e, 0x01, 0x17, 0x13, 0x33, 0x13, 0x33, 0x35, 0x21, 0x15, 0x33, 0x03, 0x06, 0x0f, 0x01, 0x23, // ....3.35!.3....# + 0x34, 0x2e, 0x01, 0x35, 0x2e, 0x01, 0x27, 0x03, 0x23, 0x03, 0x0e, 0x01, 0x0f, 0x01, 0x23, 0x27, // 4..5..'.#.....#' + 0x26, 0x27, 0x03, 0x33, 0x35, 0x05, 0xbc, 0x1c, 0x28, 0x38, 0x28, 0xfa, 0xc0, 0x28, 0x38, 0x38, // &'.35...(8(..(88 + 0x28, 0x03, 0x80, 0x28, 0x60, 0x1c, 0x84, 0x01, 0x78, 0x0a, 0x0c, 0xfe, 0xc7, 0x0c, 0x01, 0x63, // (..(`...x......c + 0xfe, 0x60, 0x28, 0x38, 0xfd, 0x00, 0x69, 0x46, 0xa4, 0x9f, 0x80, 0x07, 0x03, 0x02, 0x04, 0x03, // .`(8..iF........ + 0x01, 0x05, 0x03, 0x80, 0x9f, 0xa4, 0x46, 0xfe, 0xd4, 0x5a, 0x63, 0x05, 0x02, 0x02, 0x04, 0x01, // ......F..Zc..... + 0x02, 0x01, 0x06, 0x02, 0x90, 0x72, 0x90, 0x02, 0x05, 0x01, 0x04, 0x04, 0x02, 0x02, 0x05, 0x63, // .....r.........c + 0x5a, 0x04, 0x84, 0x1c, 0x60, 0x28, 0xfb, 0x80, 0x28, 0x38, 0x38, 0x28, 0x06, 0x40, 0x28, 0x38, // Z...`(..(88(.@(8 + 0x28, 0x1c, 0x44, 0xfe, 0x88, 0x1d, 0x0c, 0x01, 0x39, 0x0c, 0xfa, 0x12, 0x04, 0x00, 0x38, 0x28, // (.D.....9.....8( + 0x01, 0xa0, 0xfa, 0x00, 0x03, 0x80, 0x6b, 0xfd, 0x6b, 0x01, 0xe5, 0x14, 0x1a, 0x10, 0x08, 0x18, // ......k.k....... + 0x03, 0x22, 0x09, 0xfe, 0x1b, 0x02, 0x95, 0x6b, 0x6b, 0xfe, 0x4a, 0x14, 0x1a, 0x15, 0x03, 0x07, // .".....kk.J..... + 0x09, 0x02, 0x05, 0x20, 0x09, 0x02, 0x21, 0xfd, 0xdf, 0x09, 0x1f, 0x06, 0x15, 0x15, 0x1a, 0x14, // ... ..!......... + 0x01, 0xb6, 0x6b, 0x00, 0x00, 0x04, 0x00, 0x00, 0xff, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x13, // ..k............. + 0x00, 0x1a, 0x00, 0x23, 0x00, 0x53, 0x00, 0x00, 0x01, 0x1e, 0x01, 0x15, 0x11, 0x14, 0x06, 0x23, // ...#.S.........# + 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x17, 0x07, 0x11, 0x21, 0x26, // !"&5.463!2....!& + 0x27, 0x01, 0x26, 0x01, 0x11, 0x21, 0x22, 0x26, 0x35, 0x11, 0x21, 0x11, 0x25, 0x15, 0x21, 0x35, // '.&..!"&5.!.%.!5 + 0x23, 0x37, 0x3e, 0x02, 0x3b, 0x01, 0x16, 0x17, 0x1e, 0x02, 0x1f, 0x01, 0x23, 0x15, 0x21, 0x35, // #7>.;.......#.!5 + 0x23, 0x03, 0x13, 0x33, 0x35, 0x21, 0x15, 0x33, 0x07, 0x0e, 0x01, 0x0f, 0x01, 0x23, 0x26, 0x27, // #..35!.3.....#&' + 0x26, 0x2f, 0x01, 0x33, 0x35, 0x21, 0x15, 0x33, 0x13, 0x03, 0x05, 0xbc, 0x1c, 0x28, 0x38, 0x28, // &/.35!.3.....(8( + 0xfa, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x03, 0x80, 0x28, 0x60, 0x1c, 0x84, 0x01, 0x78, 0x0a, 0x0c, // ..(88(..(`...x.. + 0xfe, 0xc7, 0x0c, 0x01, 0x63, 0xfe, 0x60, 0x28, 0x38, 0xfd, 0x00, 0x01, 0x2d, 0x01, 0x19, 0x4b, // ....c.`(8...-..K + 0x67, 0x05, 0x0a, 0x05, 0x01, 0x02, 0x01, 0x04, 0x02, 0x05, 0x07, 0x03, 0x6b, 0x4c, 0x01, 0x23, // g...........kL.# + 0x44, 0xc0, 0xc3, 0x43, 0xfe, 0xe9, 0x4a, 0x67, 0x04, 0x0c, 0x03, 0x02, 0x02, 0x01, 0x04, 0x06, // D..C..Jg........ + 0x0b, 0x6a, 0x4c, 0xfe, 0xde, 0x44, 0xbd, 0xc2, 0x04, 0x84, 0x1c, 0x60, 0x28, 0xfb, 0x80, 0x28, // .jL..D.....`(..( + 0x38, 0x38, 0x28, 0x06, 0x40, 0x28, 0x38, 0x28, 0x1c, 0x44, 0xfe, 0x88, 0x1d, 0x0c, 0x01, 0x39, // 88(.@(8(.D.....9 + 0x0c, 0xfa, 0x12, 0x04, 0x00, 0x38, 0x28, 0x01, 0xa0, 0xfa, 0x00, 0xea, 0x6a, 0x6a, 0xa1, 0x07, // .....8(.....jj.. + 0x13, 0x08, 0x04, 0x06, 0x04, 0x07, 0x09, 0x04, 0xa1, 0x6a, 0x6a, 0x01, 0x11, 0x01, 0x1a, 0x6b, // .........jj....k + 0x6b, 0x9f, 0x07, 0x13, 0x04, 0x03, 0x04, 0x06, 0x0b, 0x0c, 0x9f, 0x6b, 0x6b, 0xfe, 0xf0, 0xfe, // k..........kk... + 0xe5, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0xff, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x13, // ................ + 0x00, 0x1a, 0x00, 0x23, 0x00, 0x38, 0x00, 0x43, 0x00, 0x00, 0x01, 0x1e, 0x01, 0x15, 0x11, 0x14, // ...#.8.C........ + 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x17, 0x07, 0x11, // .#!"&5.463!2.... + 0x21, 0x26, 0x27, 0x01, 0x26, 0x01, 0x11, 0x21, 0x22, 0x26, 0x35, 0x11, 0x21, 0x11, 0x25, 0x15, // !&'.&..!"&5.!.%. + 0x21, 0x35, 0x23, 0x35, 0x33, 0x32, 0x37, 0x3e, 0x01, 0x35, 0x34, 0x26, 0x27, 0x26, 0x23, 0x21, // !5#5327>.54&'&#! + 0x15, 0x33, 0x11, 0x01, 0x23, 0x11, 0x33, 0x32, 0x17, 0x16, 0x15, 0x14, 0x07, 0x06, 0x05, 0xbc, // .3..#.32........ + 0x1c, 0x28, 0x38, 0x28, 0xfa, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x03, 0x80, 0x28, 0x60, 0x1c, 0x84, // .(8(..(88(..(`.. + 0x01, 0x78, 0x0a, 0x0c, 0xfe, 0xc7, 0x0c, 0x01, 0x63, 0xfe, 0x60, 0x28, 0x38, 0xfd, 0x00, 0x01, // .x......c.`(8... + 0x20, 0x01, 0x47, 0x5d, 0x89, 0x4c, 0x2a, 0x43, 0x4f, 0x4a, 0x3f, 0x30, 0x52, 0xfe, 0x90, 0x5c, // .G].L*COJ?0R... + 0x01, 0x05, 0x77, 0x78, 0x34, 0x1f, 0x38, 0x3e, 0x1f, 0x04, 0x84, 0x1c, 0x60, 0x28, 0xfb, 0x80, // ..wx4.8>....`(.. + 0x28, 0x38, 0x38, 0x28, 0x06, 0x40, 0x28, 0x38, 0x28, 0x1c, 0x44, 0xfe, 0x88, 0x1d, 0x0c, 0x01, // (88(.@(8(.D..... + 0x39, 0x0c, 0xfa, 0x12, 0x04, 0x00, 0x38, 0x28, 0x01, 0xa0, 0xfa, 0x00, 0xea, 0x6a, 0x6a, 0xa7, // 9.....8(.....jj. + 0x0f, 0x17, 0x80, 0x52, 0x51, 0x78, 0x1b, 0x13, 0x6b, 0xfd, 0xd5, 0x01, 0x18, 0x01, 0x0c, 0x12, // ...RQx..k....... + 0x21, 0x52, 0x59, 0x1f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0xff, 0x00, 0x06, 0x00, // !RY............. + 0x06, 0x00, 0x00, 0x13, 0x00, 0x1a, 0x00, 0x23, 0x00, 0x2a, 0x00, 0x32, 0x00, 0x00, 0x01, 0x1e, // .......#.*.2.... + 0x01, 0x15, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, // .....#!"&5.463!2 + 0x16, 0x17, 0x07, 0x11, 0x21, 0x26, 0x27, 0x01, 0x26, 0x01, 0x11, 0x21, 0x22, 0x26, 0x35, 0x11, // ....!&'.&..!"&5. + 0x21, 0x11, 0x01, 0x11, 0x21, 0x35, 0x37, 0x17, 0x01, 0x04, 0x22, 0x26, 0x34, 0x36, 0x32, 0x16, // !...!57..."&462. + 0x14, 0x05, 0xbc, 0x1c, 0x28, 0x38, 0x28, 0xfa, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x03, 0x80, 0x28, // ....(8(..(88(..( + 0x60, 0x1c, 0x84, 0x01, 0x78, 0x0a, 0x0c, 0xfe, 0xc7, 0x0c, 0x01, 0x63, 0xfe, 0x60, 0x28, 0x38, // `...x......c.`(8 + 0xfd, 0x00, 0x04, 0x80, 0xfc, 0x00, 0xc0, 0x80, 0x01, 0x80, 0xfe, 0x50, 0xa0, 0x70, 0x70, 0xa0, // ...........P.pp. + 0x70, 0x04, 0x84, 0x1c, 0x60, 0x28, 0xfb, 0x80, 0x28, 0x38, 0x38, 0x28, 0x06, 0x40, 0x28, 0x38, // p...`(..(88(.@(8 + 0x28, 0x1c, 0x44, 0xfe, 0x88, 0x1d, 0x0c, 0x01, 0x39, 0x0c, 0xfa, 0x12, 0x04, 0x00, 0x38, 0x28, // (.D.....9.....8( + 0x01, 0xa0, 0xfa, 0x00, 0x01, 0xc0, 0xfe, 0xc0, 0xc0, 0xc0, 0x80, 0x01, 0x80, 0x80, 0x70, 0xa0, // ..............p. + 0x70, 0x70, 0xa0, 0x00, 0x00, 0x09, 0x00, 0x00, 0xff, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x03, // pp.............. + 0x00, 0x07, 0x00, 0x0b, 0x00, 0x0f, 0x00, 0x23, 0x00, 0x2a, 0x00, 0x37, 0x00, 0x4a, 0x00, 0x52, // .......#.*.7.J.R + 0x00, 0x00, 0x01, 0x35, 0x23, 0x15, 0x05, 0x35, 0x23, 0x1d, 0x01, 0x35, 0x23, 0x15, 0x05, 0x35, // ...5#..5#..5#..5 + 0x23, 0x15, 0x01, 0x1e, 0x01, 0x15, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, // #........#!"&5.4 + 0x36, 0x33, 0x21, 0x32, 0x16, 0x17, 0x07, 0x11, 0x21, 0x26, 0x27, 0x01, 0x26, 0x01, 0x11, 0x21, // 63!2....!&'.&..! + 0x22, 0x26, 0x35, 0x11, 0x23, 0x15, 0x23, 0x35, 0x21, 0x11, 0x01, 0x13, 0x16, 0x15, 0x14, 0x06, // "&5.#.#5!....... + 0x22, 0x26, 0x35, 0x34, 0x37, 0x36, 0x13, 0x35, 0x33, 0x15, 0x33, 0x32, 0x16, 0x02, 0x32, 0x36, // "&5476.53.32..26 + 0x34, 0x26, 0x22, 0x06, 0x14, 0x02, 0x80, 0x80, 0x01, 0x00, 0x80, 0x80, 0x01, 0x00, 0x80, 0x03, // 4&"............. + 0x3c, 0x1c, 0x28, 0x38, 0x28, 0xfa, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x03, 0x80, 0x28, 0x60, 0x1c, // <.(8(..(88(..(`. + 0x84, 0x01, 0x78, 0x0a, 0x0c, 0xfe, 0xc7, 0x0c, 0x01, 0x63, 0xfe, 0x60, 0x28, 0x38, 0x80, 0x80, // ..x......c.`(8.. + 0xfe, 0x00, 0x02, 0x8d, 0x6b, 0x08, 0x91, 0xde, 0x91, 0x08, 0x15, 0x63, 0x80, 0x4f, 0x16, 0x22, // ....k......c.O." + 0xbc, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0x04, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, // .jKKjK.......... + 0x80, 0x80, 0x80, 0x01, 0x84, 0x1c, 0x60, 0x28, 0xfb, 0x80, 0x28, 0x38, 0x38, 0x28, 0x06, 0x40, // ......`(..(88(.@ + 0x28, 0x38, 0x28, 0x1c, 0x44, 0xfe, 0x88, 0x1d, 0x0c, 0x01, 0x39, 0x0c, 0xfa, 0x12, 0x04, 0x00, // (8(.D.....9..... + 0x38, 0x28, 0x01, 0xa0, 0x80, 0x80, 0xfa, 0x00, 0x02, 0xd1, 0xfe, 0xa3, 0x1b, 0x19, 0x53, 0x6d, // 8(............Sm + 0x6d, 0x53, 0x19, 0x1b, 0x3f, 0x01, 0x4d, 0x80, 0x80, 0x1a, 0xfe, 0x1a, 0x26, 0x34, 0x26, 0x26, // mS..?.M.....&4&& + 0x34, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0xff, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x13, // 4............... + 0x00, 0x1a, 0x00, 0x23, 0x00, 0x39, 0x00, 0x4c, 0x00, 0x5e, 0x00, 0x00, 0x01, 0x1e, 0x01, 0x15, // ...#.9.L.^...... + 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x17, // ...#!"&5.463!2.. + 0x07, 0x11, 0x21, 0x26, 0x27, 0x01, 0x26, 0x01, 0x11, 0x21, 0x22, 0x26, 0x35, 0x11, 0x21, 0x11, // ..!&'.&..!"&5.!. + 0x01, 0x16, 0x15, 0x11, 0x14, 0x07, 0x06, 0x23, 0x22, 0x2f, 0x01, 0x23, 0x22, 0x26, 0x3d, 0x01, // .......#"/.#"&=. + 0x34, 0x36, 0x3b, 0x01, 0x37, 0x36, 0x01, 0x32, 0x37, 0x36, 0x10, 0x27, 0x2e, 0x01, 0x07, 0x0e, // 46;.76.276.'.... + 0x01, 0x17, 0x16, 0x10, 0x07, 0x06, 0x16, 0x17, 0x16, 0x27, 0x32, 0x37, 0x36, 0x34, 0x27, 0x2e, // .........'2764'. + 0x01, 0x0e, 0x01, 0x17, 0x16, 0x14, 0x07, 0x06, 0x16, 0x17, 0x16, 0x05, 0xbc, 0x1c, 0x28, 0x38, // ..............(8 + 0x28, 0xfa, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x03, 0x80, 0x28, 0x60, 0x1c, 0x84, 0x01, 0x78, 0x0a, // (..(88(..(`...x. + 0x0c, 0xfe, 0xc7, 0x0c, 0x01, 0x63, 0xfe, 0x60, 0x28, 0x38, 0xfd, 0x00, 0x01, 0xec, 0x14, 0x14, // .....c.`(8...... + 0x08, 0x04, 0x0c, 0x0b, 0xa6, 0x83, 0x0e, 0x12, 0x12, 0x0e, 0x83, 0xa6, 0x10, 0x01, 0xb4, 0x1f, // ................ + 0x13, 0x81, 0x81, 0x10, 0x36, 0x14, 0x15, 0x05, 0x11, 0x64, 0x64, 0x11, 0x05, 0x15, 0x12, 0xbd, // ....6....dd..... + 0x1b, 0x14, 0x57, 0x57, 0x12, 0x36, 0x26, 0x02, 0x13, 0x34, 0x34, 0x13, 0x02, 0x13, 0x14, 0x04, // ..WW.6&..44..... + 0x84, 0x1c, 0x60, 0x28, 0xfb, 0x80, 0x28, 0x38, 0x38, 0x28, 0x06, 0x40, 0x28, 0x38, 0x28, 0x1c, // ..`(..(88(.@(8(. + 0x44, 0xfe, 0x88, 0x1d, 0x0c, 0x01, 0x39, 0x0c, 0xfa, 0x12, 0x04, 0x00, 0x38, 0x28, 0x01, 0xa0, // D.....9.....8(.. + 0xfa, 0x00, 0x03, 0x2e, 0x08, 0x16, 0xfd, 0xe0, 0x16, 0x08, 0x02, 0x09, 0xa7, 0x12, 0x0e, 0xc0, // ................ + 0x0e, 0x12, 0xa7, 0x0f, 0xfd, 0x47, 0x18, 0x9f, 0x01, 0x98, 0x9f, 0x15, 0x06, 0x11, 0x11, 0x35, // .....G.........5 + 0x15, 0x7b, 0xfe, 0xc2, 0x7b, 0x15, 0x35, 0x10, 0x0f, 0x94, 0x14, 0x5d, 0xfc, 0x5d, 0x13, 0x02, // .{..{.5....].].. + 0x24, 0x35, 0x14, 0x39, 0x94, 0x39, 0x14, 0x35, 0x12, 0x11, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, // $5.9.9.5........ + 0xff, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x13, 0x00, 0x1a, 0x00, 0x23, 0x00, 0x33, 0x00, 0x43, // ...........#.3.C + 0x00, 0x00, 0x01, 0x1e, 0x01, 0x15, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, // .........#!"&5.4 + 0x36, 0x33, 0x21, 0x32, 0x16, 0x17, 0x07, 0x11, 0x21, 0x26, 0x27, 0x01, 0x26, 0x01, 0x11, 0x21, // 63!2....!&'.&..! + 0x22, 0x26, 0x35, 0x11, 0x21, 0x11, 0x01, 0x32, 0x16, 0x15, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, // "&5.!..2.....#!" + 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x05, 0x16, 0x15, 0x11, 0x14, 0x07, 0x06, 0x23, 0x22, 0x27, // &5.463.......#"' + 0x01, 0x35, 0x01, 0x36, 0x33, 0x32, 0x05, 0xbc, 0x1c, 0x28, 0x38, 0x28, 0xfa, 0xc0, 0x28, 0x38, // .5.632...(8(..(8 + 0x38, 0x28, 0x03, 0x80, 0x28, 0x60, 0x1c, 0x84, 0x01, 0x78, 0x0a, 0x0c, 0xfe, 0xc7, 0x0c, 0x01, // 8(..(`...x...... + 0x63, 0xfe, 0x60, 0x28, 0x38, 0xfd, 0x00, 0x02, 0x80, 0x34, 0x4c, 0x4c, 0x34, 0xfe, 0x80, 0x34, // c.`(8....4LL4..4 + 0x4c, 0x4c, 0x34, 0x03, 0x6c, 0x14, 0x14, 0x08, 0x04, 0x0e, 0x09, 0xfe, 0xf7, 0x01, 0x09, 0x09, // LL4.l........... + 0x0e, 0x04, 0x04, 0x84, 0x1c, 0x60, 0x28, 0xfb, 0x80, 0x28, 0x38, 0x38, 0x28, 0x06, 0x40, 0x28, // .....`(..(88(.@( + 0x38, 0x28, 0x1c, 0x44, 0xfe, 0x88, 0x1d, 0x0c, 0x01, 0x39, 0x0c, 0xfa, 0x12, 0x04, 0x00, 0x38, // 8(.D.....9.....8 + 0x28, 0x01, 0xa0, 0xfa, 0x00, 0x03, 0x80, 0x4c, 0x34, 0xfe, 0x80, 0x34, 0x4c, 0x4c, 0x34, 0x01, // (......L4..4LL4. + 0x80, 0x34, 0x4c, 0x02, 0x08, 0x16, 0xfd, 0xc0, 0x16, 0x08, 0x02, 0x09, 0x01, 0x0a, 0x5a, 0x01, // .4L...........Z. + 0x0a, 0x09, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0xff, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x13, // ................ + 0x00, 0x1a, 0x00, 0x23, 0x00, 0x37, 0x00, 0x4b, 0x00, 0x5b, 0x00, 0x00, 0x01, 0x1e, 0x01, 0x15, // ...#.7.K.[...... + 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x17, // ...#!"&5.463!2.. + 0x07, 0x11, 0x21, 0x26, 0x27, 0x01, 0x26, 0x01, 0x11, 0x21, 0x22, 0x26, 0x35, 0x11, 0x21, 0x11, // ..!&'.&..!"&5.!. + 0x01, 0x3e, 0x01, 0x1f, 0x01, 0x1e, 0x01, 0x0f, 0x01, 0x17, 0x16, 0x06, 0x0f, 0x01, 0x06, 0x26, // .>.............& + 0x27, 0x03, 0x26, 0x37, 0x21, 0x16, 0x07, 0x03, 0x0e, 0x01, 0x2f, 0x01, 0x2e, 0x01, 0x3f, 0x01, // '.&7!...../...?. + 0x27, 0x26, 0x36, 0x3f, 0x01, 0x36, 0x16, 0x17, 0x01, 0x2e, 0x01, 0x37, 0x13, 0x3e, 0x01, 0x1f, // '&6?.6.....7.>.. + 0x01, 0x1e, 0x01, 0x07, 0x03, 0x0e, 0x01, 0x27, 0x05, 0xbc, 0x1c, 0x28, 0x38, 0x28, 0xfa, 0xc0, // .......'...(8(.. + 0x28, 0x38, 0x38, 0x28, 0x03, 0x80, 0x28, 0x60, 0x1c, 0x84, 0x01, 0x78, 0x0a, 0x0c, 0xfe, 0xc7, // (88(..(`...x.... + 0x0c, 0x01, 0x63, 0xfe, 0x60, 0x28, 0x38, 0xfd, 0x00, 0x01, 0x60, 0x08, 0x1a, 0x0b, 0x33, 0x0b, // ..c.`(8...`...3. + 0x03, 0x08, 0xb6, 0xb6, 0x08, 0x03, 0x0b, 0x33, 0x0b, 0x1a, 0x08, 0xe2, 0x0e, 0x0e, 0x04, 0x04, // .......3........ + 0x0e, 0x0e, 0xe2, 0x08, 0x1a, 0x0b, 0x33, 0x0b, 0x03, 0x08, 0xb6, 0xb6, 0x08, 0x03, 0x0b, 0x33, // ......3........3 + 0x0b, 0x1a, 0x08, 0xfe, 0x76, 0x0d, 0x0f, 0x02, 0x8a, 0x02, 0x16, 0x0d, 0x3f, 0x0d, 0x0f, 0x02, // ....v.......?... + 0x8a, 0x02, 0x16, 0x0d, 0x04, 0x84, 0x1c, 0x60, 0x28, 0xfb, 0x80, 0x28, 0x38, 0x38, 0x28, 0x06, // .......`(..(88(. + 0x40, 0x28, 0x38, 0x28, 0x1c, 0x44, 0xfe, 0x88, 0x1d, 0x0c, 0x01, 0x39, 0x0c, 0xfa, 0x12, 0x04, // @(8(.D.....9.... + 0x00, 0x38, 0x28, 0x01, 0xa0, 0xfa, 0x00, 0x03, 0x80, 0x0b, 0x03, 0x08, 0x26, 0x08, 0x1a, 0x0b, // .8(.........&... + 0xf3, 0xf3, 0x0b, 0x1a, 0x08, 0x26, 0x08, 0x03, 0x0b, 0x01, 0x2d, 0x13, 0x13, 0x13, 0x13, 0xfe, // .....&....-..... + 0xd3, 0x0b, 0x03, 0x08, 0x26, 0x08, 0x1a, 0x0b, 0xf3, 0xf3, 0x0b, 0x1a, 0x08, 0x26, 0x08, 0x03, // ....&........&.. + 0x0b, 0xfd, 0x06, 0x02, 0x16, 0x0d, 0x03, 0x3f, 0x0d, 0x0f, 0x02, 0x0a, 0x02, 0x16, 0x0d, 0xfc, // .......?........ + 0xc1, 0x0d, 0x0f, 0x02, 0x00, 0x01, 0x00, 0x27, 0xff, 0x97, 0x05, 0xd9, 0x06, 0x00, 0x00, 0x36, // .......'.......6 + 0x00, 0x00, 0x01, 0x15, 0x06, 0x23, 0x06, 0x02, 0x06, 0x07, 0x06, 0x27, 0x2e, 0x04, 0x0a, 0x01, // .....#.....'.... + 0x27, 0x21, 0x16, 0x1a, 0x01, 0x16, 0x17, 0x36, 0x37, 0x26, 0x02, 0x35, 0x34, 0x36, 0x33, 0x32, // '!.....67&.54632 + 0x16, 0x15, 0x14, 0x07, 0x0e, 0x01, 0x22, 0x2e, 0x01, 0x27, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, // ......"..'654&#" + 0x06, 0x15, 0x14, 0x16, 0x33, 0x32, 0x05, 0xd9, 0x65, 0x61, 0x41, 0xc9, 0xa2, 0x2f, 0x50, 0x52, // ....32..eaA../PR + 0x1c, 0x41, 0x69, 0x64, 0x73, 0x60, 0x57, 0x1b, 0x01, 0x1b, 0x1a, 0x58, 0x79, 0x7a, 0x4f, 0xa9, // .Aids`W....XyzO. + 0x76, 0x8e, 0xa2, 0xd0, 0xb4, 0xb2, 0xbe, 0x3a, 0x07, 0x19, 0x43, 0x3b, 0x41, 0x12, 0x1f, 0x3a, // v......:..C;A..: + 0x32, 0x35, 0x40, 0xd2, 0xa2, 0x3e, 0x02, 0xc5, 0xc6, 0x17, 0x88, 0xfe, 0xf2, 0xa1, 0x1a, 0x2d, // 25@..>.........- + 0x30, 0x11, 0x35, 0x72, 0x8f, 0xe1, 0x01, 0x07, 0x01, 0x6e, 0xcf, 0xda, 0xfe, 0x97, 0xfe, 0xef, // 0.5r.....n...... + 0xc6, 0x60, 0xa9, 0xed, 0x48, 0x01, 0x28, 0xb9, 0xc0, 0xf5, 0xd3, 0xc0, 0x9f, 0x7f, 0x01, 0x04, // .`..H.(......... + 0x0c, 0x27, 0x20, 0x67, 0x51, 0x57, 0x5a, 0x63, 0x5b, 0xba, 0xd7, 0x00, 0x00, 0x08, 0x00, 0x00, // .' gQWZc[....... + 0xff, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x03, 0x00, 0x06, 0x00, 0x0a, 0x00, 0x0e, 0x00, 0x12, // ................ + 0x00, 0x15, 0x00, 0x19, 0x00, 0x2d, 0x00, 0x00, 0x13, 0x01, 0x11, 0x25, 0x05, 0x37, 0x27, 0x09, // .....-.....%.7'. + 0x01, 0x25, 0x05, 0x27, 0x2d, 0x01, 0x05, 0x27, 0x25, 0x11, 0x09, 0x01, 0x17, 0x11, 0x05, 0x25, // .%.'-..'%......% + 0x01, 0x11, 0x05, 0x11, 0x14, 0x07, 0x01, 0x06, 0x22, 0x27, 0x01, 0x26, 0x35, 0x11, 0x34, 0x37, // ........"'.&5.47 + 0x01, 0x36, 0x32, 0x17, 0x01, 0x16, 0xd8, 0x02, 0x5b, 0xfe, 0xb2, 0xfe, 0xb5, 0xc1, 0xc1, 0x03, // .62.....[....... + 0x33, 0x02, 0x5b, 0xfe, 0xf3, 0xfe, 0xb2, 0x4d, 0x01, 0x10, 0xfe, 0xf0, 0xfe, 0xf0, 0x8b, 0x01, // 3.[....M........ + 0x4e, 0xfd, 0xa5, 0x04, 0xcd, 0xc1, 0xfe, 0xb5, 0x01, 0x0d, 0xfd, 0xa5, 0x03, 0x33, 0x22, 0xfc, // N............3". + 0xcd, 0x15, 0x2c, 0x15, 0xfc, 0xcd, 0x22, 0x22, 0x03, 0x33, 0x15, 0x2c, 0x15, 0x03, 0x33, 0x22, // ..,..."".3.,..3" + 0x01, 0x6f, 0xfe, 0x6e, 0x01, 0x67, 0xdf, 0x24, 0x81, 0x81, 0xfc, 0xdc, 0x01, 0x92, 0xb4, 0xdf, // .o.n.g.$........ + 0x86, 0xb6, 0xb6, 0xb6, 0x5d, 0xdf, 0x01, 0x67, 0xfe, 0x6e, 0xfe, 0xef, 0x81, 0x01, 0x02, 0x24, // ....]..g.n.....$ + 0xb4, 0x01, 0x92, 0xfe, 0x99, 0x2b, 0xfd, 0xde, 0x29, 0x17, 0xfd, 0xde, 0x0d, 0x0d, 0x02, 0x22, // .....+..)......" + 0x17, 0x29, 0x02, 0x22, 0x29, 0x17, 0x02, 0x22, 0x0d, 0x0d, 0xfd, 0xde, 0x17, 0x00, 0x00, 0x00, // .).").."........ + 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x05, 0x78, 0x00, 0x23, 0x00, 0x57, 0x00, 0x00, // .........x.#.W.. + 0x01, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x23, 0x22, 0x26, 0x23, 0x21, 0x2b, 0x02, 0x2e, 0x01, 0x35, // ......#"&#!+...5 + 0x34, 0x36, 0x37, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x36, 0x24, 0x33, 0x32, 0x04, 0x12, // 467&54632.6$32.. + 0x15, 0x14, 0x06, 0x01, 0x14, 0x16, 0x33, 0x32, 0x37, 0x2e, 0x01, 0x27, 0x06, 0x23, 0x22, 0x26, // ......327..'.#"& + 0x35, 0x34, 0x36, 0x33, 0x32, 0x1e, 0x05, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x07, // 54632..32654&#". + 0x17, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x2e, 0x05, 0x23, 0x22, 0x06, 0x07, // .632....#"..#".. + 0x08, 0x6f, 0x89, 0xec, 0xa7, 0x04, 0x0f, 0x03, 0xfb, 0x47, 0x01, 0x02, 0x05, 0xaa, 0xec, 0x6e, // .o.......G.....n + 0x5c, 0x0c, 0xa4, 0x75, 0x5f, 0x4d, 0x4b, 0x01, 0x27, 0xb3, 0xa6, 0x01, 0x18, 0xa3, 0x01, 0xfa, // ...u_MK.'....... + 0xcc, 0xa8, 0x7c, 0x89, 0x67, 0x10, 0x3f, 0x0c, 0x43, 0x4d, 0x37, 0x4d, 0x4d, 0x35, 0x2c, 0x51, // ..|.g.?.CM7MM5,Q + 0x41, 0x41, 0x49, 0x51, 0x71, 0x41, 0x79, 0xa7, 0xa8, 0x7b, 0x8f, 0x62, 0x5d, 0x42, 0x4c, 0x34, // AAIQqAy..{.b]BL4 + 0x50, 0x4a, 0x39, 0x2b, 0x4f, 0x41, 0x42, 0x49, 0x52, 0x6f, 0x3f, 0x7a, 0xaa, 0x02, 0xfc, 0x2e, // PJ9+OABIRo?z.... + 0xc7, 0x7a, 0xa4, 0xe9, 0x01, 0x0a, 0xe7, 0xa5, 0x6e, 0xba, 0x36, 0x27, 0x2b, 0x73, 0xa2, 0x3a, // .z......n.6'+s.: + 0x9a, 0xbc, 0xa1, 0xfe, 0xec, 0xa3, 0x06, 0x18, 0xfe, 0xf0, 0x7a, 0x8e, 0x63, 0x14, 0x49, 0x0e, // ..........z.c.I. + 0x41, 0x43, 0x36, 0x35, 0x44, 0x2a, 0x44, 0x52, 0x52, 0x44, 0x2a, 0x8f, 0x77, 0x79, 0x8e, 0x61, // AC65D*DRRD*.wy.a + 0x6c, 0x40, 0x42, 0x33, 0x39, 0x45, 0x2a, 0x44, 0x52, 0x52, 0x44, 0x2a, 0x8d, 0x00, 0x00, 0x00, // l@B39E*DRRD*.... + 0x00, 0x06, 0x00, 0x00, 0xff, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x0f, 0x00, 0x17, 0x00, 0x1f, // ................ + 0x00, 0x27, 0x00, 0x2f, 0x00, 0x37, 0x00, 0x00, 0x00, 0x20, 0x04, 0x16, 0x12, 0x10, 0x02, 0x06, // .'./.7... ...... + 0x04, 0x20, 0x24, 0x26, 0x02, 0x10, 0x12, 0x36, 0x24, 0x20, 0x07, 0x17, 0x36, 0x32, 0x17, 0x37, // . $&...6$ ..62.7 + 0x01, 0x37, 0x26, 0x34, 0x37, 0x27, 0x06, 0x10, 0x00, 0x20, 0x37, 0x27, 0x06, 0x22, 0x27, 0x07, // .7&47'... 7'."'. + 0x12, 0x20, 0x36, 0x10, 0x26, 0x20, 0x06, 0x10, 0x05, 0x17, 0x36, 0x10, 0x27, 0x07, 0x16, 0x14, // . 6.& ....6.'... + 0x02, 0xca, 0x01, 0x6c, 0x01, 0x4c, 0xf0, 0x8e, 0x8e, 0xf0, 0xfe, 0xb4, 0xfe, 0x94, 0xfe, 0xb4, // ...l.L.......... + 0xf0, 0x8e, 0x8e, 0xf0, 0x02, 0xc0, 0xfe, 0x84, 0xab, 0xc2, 0x52, 0xaa, 0x52, 0xc2, 0xfb, 0xf1, // ..........R.R... + 0xc2, 0x1c, 0x1c, 0xc2, 0x5a, 0x02, 0x42, 0x01, 0x7c, 0xab, 0xc2, 0x52, 0xaa, 0x52, 0xc2, 0xca, // ....Z.B.|..R.R.. + 0x01, 0x3e, 0xe1, 0xe1, 0xfe, 0xc2, 0xe1, 0x03, 0x64, 0xc2, 0x5a, 0x5a, 0xc2, 0x1c, 0x06, 0x00, // .>......d.ZZ.... + 0x8e, 0xf0, 0xfe, 0xb4, 0xfe, 0x94, 0xfe, 0xb4, 0xf0, 0x8e, 0x8e, 0xf0, 0x01, 0x4c, 0x01, 0x6c, // .............L.l + 0x01, 0x4c, 0xf0, 0x0e, 0x5a, 0xc2, 0x1c, 0x1c, 0xc2, 0xfb, 0xf1, 0xc2, 0x52, 0xaa, 0x52, 0xc2, // .L..Z.......R.R. + 0xab, 0xfe, 0x84, 0xfd, 0xbe, 0x5a, 0xc2, 0x1c, 0x1c, 0xc2, 0x01, 0x26, 0xe1, 0x01, 0x3e, 0xe1, // .....Z.....&..>. + 0xe1, 0xfe, 0xc2, 0x08, 0xc2, 0xab, 0x01, 0x7c, 0xab, 0xc2, 0x52, 0xaa, 0x00, 0x01, 0x00, 0x20, // .......|..R.... + 0xff, 0x20, 0x06, 0xe0, 0x05, 0xd7, 0x00, 0x21, 0x00, 0x00, 0x01, 0x14, 0x02, 0x06, 0x04, 0x20, // . .....!....... + 0x24, 0x26, 0x02, 0x35, 0x34, 0x12, 0x24, 0x37, 0x15, 0x06, 0x00, 0x15, 0x14, 0x1e, 0x02, 0x20, // $&.54.$7....... + 0x3e, 0x02, 0x35, 0x34, 0x00, 0x27, 0x35, 0x16, 0x04, 0x12, 0x06, 0xe0, 0x89, 0xe7, 0xfe, 0xc0, // >.54.'5......... + 0xfe, 0xa0, 0xfe, 0xc0, 0xe7, 0x89, 0xc2, 0x01, 0x50, 0xce, 0xdd, 0xfe, 0xdd, 0x66, 0xab, 0xed, // ........P....f.. + 0x01, 0x04, 0xed, 0xab, 0x66, 0xfe, 0xdd, 0xdd, 0xce, 0x01, 0x50, 0xc2, 0x02, 0x80, 0xb0, 0xfe, // ....f.....P..... + 0xc0, 0xe7, 0x89, 0x89, 0xe7, 0x01, 0x40, 0xb0, 0xd5, 0x01, 0x73, 0xf0, 0x1f, 0xe4, 0x2d, 0xfe, // ......@...s...-. + 0xa0, 0xe6, 0x82, 0xed, 0xab, 0x66, 0x66, 0xab, 0xed, 0x82, 0xe6, 0x01, 0x60, 0x2d, 0xe4, 0x1f, // .....ff.....`-.. + 0xf0, 0xfe, 0x8d, 0x00, 0x00, 0x01, 0x00, 0x13, 0xff, 0x00, 0x06, 0xee, 0x06, 0x00, 0x00, 0x63, // ...............c + 0x00, 0x00, 0x13, 0x36, 0x12, 0x37, 0x32, 0x31, 0x14, 0x07, 0x0e, 0x04, 0x1e, 0x01, 0x17, 0x1e, // ...6.721........ + 0x01, 0x3e, 0x01, 0x3f, 0x01, 0x3e, 0x01, 0x2e, 0x01, 0x2f, 0x01, 0x2e, 0x03, 0x2f, 0x01, 0x37, // .>.?.>.../.../.7 + 0x1e, 0x01, 0x1f, 0x01, 0x36, 0x26, 0x2f, 0x01, 0x37, 0x17, 0x0e, 0x01, 0x0f, 0x01, 0x3e, 0x01, // ....6&/.7.....>. + 0x3f, 0x01, 0x17, 0x0e, 0x01, 0x0f, 0x01, 0x0e, 0x01, 0x16, 0x17, 0x1e, 0x01, 0x3e, 0x01, 0x3f, // ?............>.? + 0x01, 0x3e, 0x02, 0x2e, 0x04, 0x2f, 0x01, 0x26, 0x33, 0x16, 0x31, 0x1e, 0x08, 0x17, 0x12, 0x02, // .>.../.&3.1..... + 0x04, 0x23, 0x22, 0x24, 0x26, 0x02, 0x13, 0x08, 0xd8, 0xc5, 0x05, 0x01, 0x08, 0x28, 0x40, 0x38, // .#"$&........(@8 + 0x21, 0x05, 0x49, 0x48, 0x32, 0x68, 0x4d, 0x3e, 0x10, 0x10, 0x27, 0x1c, 0x0f, 0x1b, 0x0d, 0x0e, // !.IH2hM>..'..... + 0x0a, 0x29, 0x2d, 0x2a, 0x0e, 0x0d, 0x68, 0x27, 0x4e, 0x14, 0x13, 0x01, 0x27, 0x15, 0x14, 0xa1, // .)-*..h'N...'... + 0xa0, 0x21, 0x27, 0x03, 0x04, 0x16, 0x4f, 0x1c, 0x1c, 0x67, 0x2c, 0x52, 0x13, 0x13, 0x1f, 0x22, // .!'...O..g,R..." + 0x14, 0x2f, 0x21, 0x59, 0x51, 0x47, 0x16, 0x15, 0x3c, 0x49, 0x18, 0x04, 0x20, 0x2a, 0x31, 0x29, // ./!YQG...54'6. + 0x33, 0x26, 0x35, 0x11, 0x34, 0x37, 0x23, 0x16, 0x15, 0x11, 0x14, 0x05, 0x35, 0x06, 0x23, 0x22, // 3&5.47#.....5.#" + 0x3d, 0x01, 0x33, 0x32, 0x16, 0x33, 0x35, 0x23, 0x34, 0x37, 0x23, 0x16, 0x1d, 0x01, 0x23, 0x15, // =.32.35#47#...#. + 0x36, 0x33, 0x32, 0x16, 0x33, 0x15, 0x23, 0x15, 0x14, 0x1e, 0x03, 0x33, 0x32, 0x01, 0x34, 0x26, // 632.3.#....32.4& + 0x22, 0x06, 0x15, 0x14, 0x16, 0x32, 0x36, 0x25, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, // "....26%...#!"&5 + 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x02, 0x46, 0x5d, 0x6b, 0x62, 0x66, 0x24, 0x4a, 0x4d, // .463!2..F]kbf$JM + 0x4d, 0x24, 0x26, 0xa6, 0x4e, 0x39, 0x32, 0x3c, 0x56, 0x76, 0x3b, 0x2c, 0x26, 0x29, 0x71, 0x28, // M$&.N92Z2.. + 0x02, 0x07, 0x18, 0x06, 0x15, 0x26, 0x60, 0x06, 0xe3, 0x06, 0xab, 0x0f, 0x39, 0x0e, 0x55, 0x57, // .....&`.....9.UW + 0x3d, 0xfd, 0xf0, 0x4e, 0x39, 0x3a, 0x50, 0x4f, 0x3b, 0x3a, 0x16, 0x64, 0x68, 0x65, 0x03, 0x5c, // =..N9:PO;:.dhe.. + 0x3d, 0x52, 0x91, 0x87, 0x01, 0xcd, 0xca, 0x0c, 0x0a, 0x2b, 0x29, 0x7f, 0xb3, 0x17, 0x08, 0x26, // =R.......+)....& + 0x27, 0x1f, 0x29, 0x17, 0x15, 0x1e, 0x2d, 0x53, 0x39, 0xfe, 0xd0, 0x19, 0x39, 0x6b, 0x4a, 0xa5, // '.)...-S9...9kJ. + 0x3c, 0x04, 0x29, 0x55, 0x6d, 0x1c, 0x04, 0x18, 0xa9, 0x51, 0x8b, 0xb9, 0x2f, 0xfc, 0xbe, 0x2d, // <.)Um....Q../..- + 0x59, 0x02, 0x61, 0x5e, 0x22, 0x21, 0x5b, 0xfd, 0x9b, 0x59, 0xb1, 0xc4, 0x27, 0x28, 0x3c, 0x60, // Y.a^"![..Y..'(<` + 0x58, 0x3b, 0x01, 0x5f, 0x04, 0x02, 0x06, 0xbe, 0x4c, 0x36, 0x23, 0x29, 0x7c, 0xbe, 0x04, 0xfe, // X;._....L6#)|... + 0x93, 0x83, 0x04, 0x0e, 0x74, 0x57, 0x57, 0x3a, 0x3b, 0x58, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // ....tWW:;X...... + 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x0b, 0x00, 0x1b, 0x00, 0x00, 0x09, 0x01, 0x23, 0x03, // ..............#. + 0x06, 0x07, 0x27, 0x03, 0x23, 0x01, 0x11, 0x33, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // ..'.#..3....#!"& + 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x03, 0x29, 0x01, 0x0a, 0x70, 0x9d, 0x18, 0x14, // 5.463!2..)..p... + 0x2a, 0x9b, 0x78, 0x01, 0x07, 0x65, 0x02, 0xd7, 0xa9, 0x77, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, // *.x..e...w.@w..w + 0x03, 0xc0, 0x77, 0xa9, 0x02, 0x14, 0x01, 0xf3, 0xfe, 0xc8, 0x30, 0x2c, 0x5c, 0x01, 0x38, 0xfe, // ..w.......0,..8. + 0x13, 0xfe, 0xbc, 0x03, 0x8a, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0xa9, // ......@w..w..w.. + 0x00, 0x02, 0x00, 0x39, 0xff, 0x00, 0x04, 0xc7, 0x06, 0x00, 0x00, 0x1d, 0x00, 0x49, 0x00, 0x00, // ...9.........I.. + 0x00, 0x14, 0x06, 0x23, 0x22, 0x27, 0x06, 0x07, 0x02, 0x13, 0x16, 0x06, 0x07, 0x23, 0x22, 0x26, // ...#"'.......#"& + 0x27, 0x26, 0x3e, 0x03, 0x37, 0x36, 0x37, 0x26, 0x35, 0x34, 0x36, 0x32, 0x04, 0x10, 0x02, 0x04, // '&>.767&5462.... + 0x23, 0x22, 0x27, 0x2e, 0x01, 0x37, 0x3e, 0x01, 0x17, 0x16, 0x33, 0x32, 0x3e, 0x02, 0x34, 0x2e, // #"'..7>...32>.4. + 0x02, 0x22, 0x0e, 0x02, 0x15, 0x14, 0x17, 0x16, 0x0e, 0x01, 0x26, 0x27, 0x26, 0x35, 0x34, 0x3e, // ."........&'&54> + 0x02, 0x33, 0x32, 0x04, 0x03, 0x4a, 0x72, 0x4f, 0x3c, 0x33, 0x3e, 0x35, 0xf7, 0x2d, 0x01, 0x1b, // .32..JrO<3>5.-.. + 0x15, 0x05, 0x14, 0x1e, 0x02, 0x0e, 0x15, 0x26, 0x46, 0x44, 0x28, 0x3d, 0x47, 0x10, 0x71, 0xa0, // .......&FD(=G.q. + 0x01, 0xee, 0x9c, 0xfe, 0xf3, 0x9e, 0x40, 0x43, 0x15, 0x17, 0x05, 0x05, 0x24, 0x15, 0x33, 0x39, // ......@C....$.39 + 0x61, 0xb2, 0x80, 0x4c, 0x4c, 0x80, 0xb2, 0xc2, 0xb2, 0x80, 0x4c, 0x34, 0x0a, 0x0d, 0x26, 0x29, // a..LL.....L4..&) + 0x0a, 0x40, 0x5d, 0x9c, 0xd8, 0x76, 0x9e, 0x01, 0x0d, 0x04, 0x14, 0xa0, 0x71, 0x23, 0x43, 0x4f, // .@]..v......q#CO + 0xfe, 0x8d, 0xfe, 0x18, 0x16, 0x21, 0x02, 0x1b, 0x14, 0x7e, 0xf3, 0xbf, 0xb5, 0x82, 0x3c, 0x5a, // .....!...~.....72765'../.".. + 0x01, 0x07, 0x23, 0x22, 0x26, 0x27, 0x26, 0x35, 0x10, 0x01, 0x0e, 0x08, 0x16, 0x0d, 0x01, 0x11, // ..#"&'&5........ + 0x0e, 0xb9, 0x7d, 0x8b, 0xb9, 0x85, 0x85, 0x31, 0x52, 0x3c, 0x32, 0x22, 0x1f, 0x14, 0x0c, 0x01, // ..}....1R<2".... + 0x37, 0x12, 0x03, 0x04, 0x4d, 0x57, 0x27, 0x24, 0x09, 0x15, 0x11, 0x15, 0x0b, 0x10, 0x01, 0x01, // 7...MW'$........ + 0x02, 0x05, 0x3b, 0x49, 0x14, 0x53, 0x37, 0x08, 0x02, 0x04, 0x05, 0x40, 0xee, 0x35, 0x73, 0x51, // ..;I.S7....@.5sQ + 0x40, 0x0f, 0x08, 0x0e, 0x40, 0x08, 0x29, 0xad, 0x52, 0x23, 0x44, 0x76, 0x54, 0x41, 0x14, 0x1f, // @...@.).R#DvTA.. + 0x0b, 0x3b, 0x14, 0x04, 0x0a, 0x02, 0x02, 0x30, 0x78, 0x0d, 0x05, 0x04, 0x08, 0x12, 0x49, 0x29, // .;.....0x.....I) + 0x01, 0x04, 0x04, 0x03, 0x17, 0x02, 0xda, 0x13, 0x21, 0x14, 0x3a, 0x10, 0x16, 0x3e, 0x0c, 0x8b, // ........!.:..>.. + 0x01, 0x2b, 0x3c, 0x42, 0x37, 0x15, 0x36, 0x3a, 0x4e, 0x46, 0x63, 0x50, 0x3a, 0x05, 0x53, 0x43, // .+..)C.. + 0x01, 0x36, 0x2e, 0x01, 0x13, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0xff, 0x3e, 0x08, 0x00, // .6...........>.. + 0x05, 0xc2, 0x00, 0x0a, 0x00, 0x16, 0x00, 0x21, 0x00, 0x2d, 0x00, 0x49, 0x00, 0x5b, 0x00, 0x00, // .......!.-.I.[.. + 0x00, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, 0x33, 0x32, 0x01, 0x34, 0x26, 0x23, 0x22, // .4&#"....32.4&#" + 0x06, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x02, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, // ....326.4&#".... + 0x33, 0x32, 0x01, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x01, 0x26, // 32.4&#"....326.& + 0x23, 0x22, 0x04, 0x02, 0x15, 0x14, 0x17, 0x06, 0x23, 0x22, 0x2e, 0x03, 0x27, 0x07, 0x37, 0x24, // #"......#"..'.7$ + 0x11, 0x34, 0x12, 0x24, 0x33, 0x32, 0x04, 0x16, 0x01, 0x14, 0x06, 0x07, 0x17, 0x27, 0x06, 0x23, // .4.$32.......'.# + 0x22, 0x24, 0x26, 0x10, 0x36, 0x24, 0x33, 0x32, 0x04, 0x16, 0x02, 0x44, 0x32, 0x29, 0x2b, 0x42, // "$&.6$32...D2)+B + 0x42, 0x2b, 0x29, 0x03, 0x19, 0x33, 0x28, 0x1b, 0x2d, 0x2d, 0x1b, 0x28, 0x33, 0xec, 0x31, 0x29, // B+)..3(.--.(3.1) + 0x2b, 0x42, 0x42, 0x2b, 0x29, 0x02, 0xac, 0x34, 0x27, 0x1b, 0x2d, 0x2d, 0x1b, 0x27, 0x34, 0xfe, // +BB+)..4'.--.'4. + 0xf6, 0x1f, 0x27, 0xa9, 0xfe, 0xe4, 0xa3, 0x17, 0x23, 0x21, 0x1a, 0x30, 0x3e, 0x1b, 0x52, 0x09, // ..'.....#!.0>.R. + 0xfd, 0x48, 0xfe, 0xde, 0xc3, 0x01, 0x4d, 0xc5, 0xb0, 0x01, 0x39, 0xd3, 0x02, 0x6f, 0x89, 0x75, // .H....M...9..o.u + 0x37, 0xc7, 0x96, 0x44, 0xa9, 0xfe, 0xe4, 0xa3, 0xa3, 0x01, 0x1c, 0xa9, 0xa1, 0x01, 0x1c, 0xab, // 7..D............ + 0x04, 0x0a, 0x52, 0x32, 0x33, 0x28, 0x27, 0x33, 0xfe, 0x5f, 0x1c, 0x2c, 0x2d, 0x1b, 0x1c, 0x2d, // ..R23('3._.,-..- + 0x2c, 0x01, 0xef, 0x52, 0x32, 0x33, 0x28, 0x27, 0x33, 0xfe, 0x5f, 0x1c, 0x2c, 0x2d, 0x1b, 0x1c, // ,..R23('3._.,-.. + 0x2d, 0x2c, 0x01, 0xaa, 0x04, 0x9a, 0xfe, 0xf9, 0x9c, 0x4e, 0x4a, 0x03, 0x03, 0x0a, 0x04, 0x11, // -,.......NJ..... + 0x02, 0x7f, 0xda, 0xcb, 0x01, 0x1f, 0xa9, 0x01, 0x1c, 0xa3, 0x84, 0xe9, 0xfd, 0x3f, 0x75, 0xd5, // .............?u. + 0x57, 0xb5, 0x6d, 0x25, 0x8d, 0xf2, 0x01, 0x1e, 0xf2, 0x8d, 0x8d, 0xf3, 0x00, 0x01, 0x00, 0x00, // W.m%............ + 0xff, 0x00, 0x06, 0xff, 0x06, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x01, 0x16, 0x07, 0x01, 0x06, 0x07, // ................ + 0x06, 0x23, 0x22, 0x27, 0x25, 0x03, 0x06, 0x23, 0x22, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x09, 0x01, // .#"'%..#"'..5... + 0x25, 0x26, 0x27, 0x26, 0x37, 0x01, 0x36, 0x33, 0x32, 0x06, 0xe4, 0x21, 0x06, 0xff, 0x00, 0x05, // %&'&7.632..!.... + 0x1b, 0x0e, 0x11, 0x0b, 0x0d, 0xfe, 0x3b, 0xf2, 0x12, 0x1f, 0x0d, 0x09, 0x13, 0x17, 0x03, 0x60, // ......;........` + 0xfb, 0xd3, 0xfe, 0x75, 0x25, 0x03, 0x02, 0x22, 0x06, 0x80, 0x0f, 0x11, 0x14, 0x05, 0xf5, 0x18, // ...u%.."........ + 0x28, 0xfa, 0x00, 0x1d, 0x10, 0x08, 0x05, 0xb9, 0xfe, 0xd9, 0x17, 0x04, 0x07, 0x21, 0x14, 0x01, // (............!.. + 0x5d, 0x04, 0x23, 0xfc, 0x63, 0xa2, 0x0e, 0x29, 0x28, 0x13, 0x03, 0xc0, 0x09, 0x00, 0x00, 0x00, // ].#.c..)(....... + 0x00, 0x02, 0x00, 0x00, 0xff, 0x00, 0x06, 0xff, 0x05, 0xf7, 0x00, 0x1a, 0x00, 0x20, 0x00, 0x00, // ............. .. + 0x01, 0x16, 0x07, 0x01, 0x06, 0x07, 0x06, 0x23, 0x22, 0x27, 0x25, 0x01, 0x06, 0x23, 0x22, 0x27, // .......#"'%..#"' + 0x2e, 0x01, 0x35, 0x11, 0x25, 0x26, 0x27, 0x26, 0x37, 0x01, 0x36, 0x01, 0x13, 0x01, 0x05, 0x09, // ..5.%&'&7.6..... + 0x01, 0x06, 0xe4, 0x21, 0x06, 0xff, 0x00, 0x05, 0x1b, 0x0e, 0x11, 0x0b, 0x0d, 0xfd, 0xf1, 0xfe, // ...!............ + 0xd6, 0x12, 0x1d, 0x0e, 0x09, 0x13, 0x16, 0xfe, 0x28, 0x25, 0x03, 0x03, 0x23, 0x06, 0x80, 0x23, // ........(%..#..# + 0xfe, 0xcb, 0xdd, 0xfa, 0x66, 0x01, 0x50, 0x03, 0x5f, 0xfe, 0x22, 0x05, 0xf5, 0x18, 0x28, 0xfa, // ....f.P._."...(. + 0x00, 0x1d, 0x10, 0x08, 0x05, 0xd7, 0xfe, 0xb9, 0x15, 0x04, 0x07, 0x21, 0x14, 0x01, 0xc4, 0xc1, // ...........!.... + 0x0e, 0x29, 0x27, 0x14, 0x03, 0xc0, 0x15, 0xfa, 0x0e, 0x05, 0x2b, 0xfc, 0xc5, 0x89, 0x02, 0x7f, // .)'.......+..... + 0xfc, 0xe3, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x34, // ...............4 + 0x00, 0x49, 0x00, 0x00, 0x00, 0x10, 0x02, 0x06, 0x04, 0x23, 0x22, 0x24, 0x27, 0x26, 0x36, 0x3f, // .I.......#"$'&6? + 0x01, 0x36, 0x33, 0x16, 0x17, 0x1e, 0x01, 0x33, 0x32, 0x3e, 0x02, 0x34, 0x2e, 0x02, 0x23, 0x22, // .63....32>.4..#" + 0x06, 0x07, 0x17, 0x16, 0x07, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x37, 0x36, 0x1f, // ......#!"&5.476. + 0x01, 0x36, 0x24, 0x33, 0x32, 0x04, 0x16, 0x05, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, // .6$32......#!"&= + 0x01, 0x34, 0x36, 0x3b, 0x01, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x06, 0x00, 0x7a, 0xce, // .46;..46;.2...z. + 0xfe, 0xe4, 0x9c, 0xac, 0xfe, 0xca, 0x6d, 0x07, 0x01, 0x08, 0x89, 0x0a, 0x0f, 0x10, 0x07, 0x49, // ......m........I + 0xd4, 0x77, 0x68, 0xbd, 0x8a, 0x51, 0x51, 0x8a, 0xbd, 0x68, 0x62, 0xb4, 0x46, 0x89, 0x1f, 0x11, // .wh..QQ..hb.F... + 0x11, 0x2a, 0xfe, 0x40, 0x1a, 0x26, 0x28, 0x27, 0x1e, 0x82, 0x6b, 0x01, 0x13, 0x93, 0x9c, 0x01, // .*.@.&('..k..... + 0x1c, 0xce, 0xfd, 0xfa, 0x12, 0x0e, 0xfe, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xe0, 0x12, 0x0e, 0x40, // ...............@ + 0x0e, 0x12, 0x03, 0x1c, 0xfe, 0xc8, 0xfe, 0xe4, 0xce, 0x7a, 0x91, 0x84, 0x0a, 0x19, 0x08, 0x8a, // .........z...... + 0x09, 0x02, 0x0a, 0x5f, 0x68, 0x51, 0x8a, 0xbd, 0xd0, 0xbd, 0x8a, 0x51, 0x47, 0x42, 0x8a, 0x1e, // ..._hQ.....QGB.. + 0x27, 0x28, 0x26, 0x1a, 0x01, 0xc0, 0x2a, 0x11, 0x11, 0x1f, 0x81, 0x65, 0x6f, 0x7a, 0xce, 0x98, // '(&...*....eoz.. + 0xfe, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x01, 0x60, 0x0e, 0x12, 0x12, 0x00, 0x00, // .@....@...`..... + 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1b, 0x00, 0x00, // ................ + 0x00, 0x20, 0x0e, 0x02, 0x10, 0x1e, 0x02, 0x20, 0x3e, 0x02, 0x10, 0x2e, 0x01, 0x00, 0x10, 0x02, // . ..... >....... + 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, 0x03, 0x82, 0xfe, 0xfc, 0xed, 0xab, 0x66, // . $...$ .......f + 0x66, 0xab, 0xed, 0x01, 0x04, 0xed, 0xab, 0x66, 0x66, 0xab, 0x01, 0x91, 0xce, 0xfe, 0x9f, 0xfe, // f......ff....... + 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x05, 0x00, 0x66, 0xab, 0xed, // ^.....a...a..f.. + 0xfe, 0xfc, 0xed, 0xab, 0x66, 0x66, 0xab, 0xed, 0x01, 0x04, 0xed, 0xab, 0xfe, 0xb7, 0xfe, 0x5e, // ....ff.........^ + 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x01, 0x00, 0x3e, // .....a...a.....> + 0xff, 0x80, 0x06, 0xc2, 0x05, 0x80, 0x00, 0x85, 0x00, 0x00, 0x05, 0x22, 0x26, 0x23, 0x22, 0x06, // ..........."&#". + 0x23, 0x22, 0x26, 0x35, 0x34, 0x3e, 0x02, 0x37, 0x36, 0x35, 0x03, 0x34, 0x27, 0x26, 0x23, 0x21, // #"&54>.765.4'&#! + 0x22, 0x07, 0x06, 0x15, 0x03, 0x14, 0x17, 0x1e, 0x03, 0x15, 0x14, 0x06, 0x23, 0x22, 0x26, 0x23, // "...........#"&# + 0x22, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x3e, 0x02, 0x37, 0x36, 0x35, 0x27, 0x11, 0x34, 0x36, // ".#"&54>.765'.46 + 0x2e, 0x04, 0x27, 0x2e, 0x01, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x33, 0x32, 0x36, // ..'.."&54632.326 + 0x33, 0x32, 0x16, 0x15, 0x14, 0x0e, 0x02, 0x07, 0x06, 0x15, 0x13, 0x14, 0x17, 0x16, 0x33, 0x21, // 32............3! + 0x32, 0x37, 0x36, 0x35, 0x13, 0x34, 0x27, 0x2e, 0x02, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x33, // 2765.4'..54632.3 + 0x32, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x0e, 0x02, 0x07, 0x06, 0x15, 0x13, 0x14, 0x17, 0x1e, // 2632............ + 0x03, 0x15, 0x14, 0x06, 0x06, 0x92, 0x2c, 0xb1, 0x2d, 0x2c, 0xb0, 0x2c, 0x18, 0x1a, 0x22, 0x2c, // ......,.-,.,..", + 0x3a, 0x10, 0x21, 0x01, 0x01, 0x0d, 0x25, 0xfd, 0x5d, 0x26, 0x0d, 0x01, 0x01, 0x25, 0x10, 0x40, // :.!...%.]&...%.@ + 0x32, 0x28, 0x19, 0x18, 0x2f, 0xb9, 0x2e, 0x2b, 0xaa, 0x2a, 0x17, 0x19, 0x1f, 0x29, 0x36, 0x0f, // 2(../..+.*...)6. + 0x21, 0x01, 0x01, 0x01, 0x02, 0x05, 0x08, 0x0e, 0x09, 0x0f, 0x3c, 0x2e, 0x24, 0x18, 0x18, 0x2e, // !.........<.$... + 0xb9, 0x2e, 0x2a, 0xa9, 0x2a, 0x19, 0x19, 0x22, 0x2b, 0x38, 0x0f, 0x23, 0x01, 0x01, 0x0d, 0x1a, // ..*.*.."+8.#.... + 0x02, 0xbb, 0x19, 0x0d, 0x01, 0x01, 0x23, 0x12, 0x51, 0x33, 0x19, 0x19, 0x2c, 0xb0, 0x2c, 0x2b, // ......#.Q3..,.,+ + 0xac, 0x2b, 0x19, 0x19, 0x23, 0x2d, 0x3a, 0x0f, 0x23, 0x01, 0x22, 0x10, 0x3c, 0x2f, 0x24, 0x18, // .+..#-:.#."..$$..../:yu..x + 0x76, 0x29, 0x25, 0x24, 0x00, 0x09, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x00, 0x00, 0x03, // v)%$............ + 0x00, 0x13, 0x00, 0x17, 0x00, 0x1b, 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x3f, 0x00, 0x43, 0x00, 0x47, // ........./.?.C.G + 0x00, 0x00, 0x25, 0x15, 0x21, 0x35, 0x25, 0x32, 0x16, 0x15, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, // ..%.!5%2.....#!" + 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x01, 0x15, 0x21, 0x35, 0x13, 0x15, 0x23, 0x35, 0x01, 0x15, // &5.463..!5..#5.. + 0x21, 0x35, 0x03, 0x32, 0x16, 0x15, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, // !5.2.....#!"&5.4 + 0x36, 0x33, 0x01, 0x32, 0x16, 0x15, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, // 63.2.....#!"&5.4 + 0x36, 0x33, 0x05, 0x15, 0x23, 0x35, 0x13, 0x15, 0x21, 0x35, 0x01, 0x60, 0xfe, 0xa0, 0x02, 0xc0, // 63..#5..!5.`.... + 0x1a, 0x26, 0x26, 0x1a, 0xff, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0xa0, 0xfc, 0xa0, 0xe0, 0xe0, // .&&....&&....... + 0x06, 0x00, 0xfd, 0x20, 0xe0, 0x1a, 0x26, 0x26, 0x1a, 0xff, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x03, // ... ..&&....&&.. + 0x80, 0x1a, 0x26, 0x26, 0x1a, 0xff, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x02, 0x40, 0xe0, 0xe0, 0xfc, // ..&&....&&..@... + 0xa0, 0x80, 0x80, 0x80, 0x80, 0x26, 0x1a, 0xff, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0x00, 0x1a, // .....&....&&.... + 0x26, 0x01, 0x80, 0x80, 0x80, 0x02, 0x00, 0x80, 0x80, 0xfc, 0x00, 0x80, 0x80, 0x04, 0x80, 0x26, // &..............& + 0x1a, 0xff, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0x00, 0x1a, 0x26, 0xfe, 0x00, 0x26, 0x1a, 0xff, // ....&&....&..&.. + 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0x00, 0x1a, 0x26, 0x80, 0x80, 0x80, 0x02, 0x00, 0x80, 0x80, // ..&&....&....... + 0x00, 0x01, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x25, 0x00, 0x00, 0x01, 0x32, // ...........%...2 + 0x16, 0x10, 0x06, 0x20, 0x26, 0x35, 0x34, 0x37, 0x25, 0x06, 0x23, 0x22, 0x26, 0x10, 0x36, 0x33, // ... &547%.#"&.63 + 0x32, 0x17, 0x25, 0x26, 0x35, 0x34, 0x36, 0x20, 0x16, 0x10, 0x06, 0x23, 0x22, 0x27, 0x05, 0x16, // 2.%&546 ...#"'.. + 0x14, 0x07, 0x05, 0x36, 0x04, 0xc0, 0x85, 0xbb, 0xbb, 0xfe, 0xf6, 0xbb, 0x02, 0xfe, 0x98, 0x5c, // ...6............ + 0x7e, 0x85, 0xbb, 0xbb, 0x85, 0x7e, 0x5c, 0x01, 0x68, 0x02, 0xbb, 0x01, 0x0a, 0xbb, 0xbb, 0x85, // ~....~..h....... + 0x7e, 0x5c, 0xfe, 0x98, 0x02, 0x02, 0x01, 0x68, 0x5c, 0x02, 0x00, 0xbb, 0xfe, 0xf6, 0xbb, 0xbb, // ~......h........ + 0x85, 0x0c, 0x16, 0xb4, 0x56, 0xbb, 0x01, 0x0a, 0xbb, 0x56, 0xb4, 0x16, 0x0c, 0x85, 0xbb, 0xbb, // ....V....V...... + 0xfe, 0xf6, 0xbb, 0x56, 0xb4, 0x16, 0x18, 0x16, 0xb4, 0x56, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // ...V.....V...... + 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x25, 0x00, 0x35, 0x00, 0x00, 0x24, 0x34, 0x26, 0x23, // .......%.5..$4&# + 0x22, 0x07, 0x27, 0x36, 0x34, 0x27, 0x37, 0x16, 0x33, 0x32, 0x36, 0x34, 0x26, 0x22, 0x06, 0x15, // ".'64'7.3264&".. + 0x14, 0x17, 0x07, 0x26, 0x23, 0x22, 0x06, 0x14, 0x16, 0x33, 0x32, 0x37, 0x17, 0x06, 0x15, 0x14, // ...&#"...327.... + 0x16, 0x32, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, // .2....#!"&5.463! + 0x32, 0x16, 0x05, 0x00, 0x7d, 0x58, 0x54, 0x3d, 0xf1, 0x02, 0x02, 0xf1, 0x3d, 0x54, 0x58, 0x7d, // 2...}XT=....=TX} + 0x7d, 0xb0, 0x7e, 0x02, 0xf1, 0x3e, 0x53, 0x58, 0x7d, 0x7d, 0x58, 0x53, 0x3e, 0xf1, 0x02, 0x7e, // }.~..>SX}}XS>..~ + 0xb0, 0x01, 0x7d, 0xa9, 0x77, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0xfd, // ..}.w.@w..w..w.. + 0xb0, 0x7e, 0x3a, 0x78, 0x10, 0x0e, 0x10, 0x78, 0x3a, 0x7e, 0xb0, 0x7d, 0x7d, 0x58, 0x07, 0x10, // .~:x...x:~.}}X.. + 0x78, 0x39, 0x7d, 0xb0, 0x7d, 0x39, 0x78, 0x10, 0x07, 0x58, 0x7d, 0x03, 0xe0, 0xfc, 0x40, 0x77, // x9}.}9x..X}...@w + 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0xa9, 0x00, 0x07, 0x00, 0x00, 0xff, 0x00, 0x07, 0x00, // ..w..w.......... + 0x06, 0x00, 0x00, 0x11, 0x00, 0x2f, 0x00, 0x3e, 0x00, 0x4c, 0x00, 0x58, 0x00, 0x64, 0x00, 0x73, // ...../.>.L.X.d.s + 0x00, 0x00, 0x00, 0x2e, 0x01, 0x07, 0x0e, 0x01, 0x07, 0x06, 0x16, 0x17, 0x16, 0x33, 0x32, 0x37, // .............327 + 0x3e, 0x01, 0x37, 0x36, 0x01, 0x17, 0x07, 0x17, 0x16, 0x14, 0x0f, 0x01, 0x16, 0x15, 0x14, 0x02, // >.76............ + 0x06, 0x04, 0x20, 0x24, 0x26, 0x02, 0x10, 0x12, 0x36, 0x24, 0x33, 0x32, 0x17, 0x37, 0x36, 0x32, // .. $&...6$32.762 + 0x1f, 0x01, 0x13, 0x06, 0x23, 0x22, 0x2f, 0x01, 0x26, 0x34, 0x37, 0x36, 0x32, 0x1f, 0x01, 0x16, // ....#"/.&4762... + 0x14, 0x17, 0x06, 0x22, 0x2f, 0x01, 0x26, 0x34, 0x37, 0x36, 0x32, 0x1f, 0x01, 0x16, 0x14, 0x36, // ..."/.&4762....6 + 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x27, 0x15, 0x14, 0x06, 0x22, // ..+."&46;.2'..." + 0x26, 0x3d, 0x01, 0x34, 0x36, 0x32, 0x16, 0x17, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x34, 0x3f, // &=.462....#"'&4? + 0x01, 0x36, 0x32, 0x17, 0x16, 0x14, 0x02, 0x45, 0x14, 0x30, 0x19, 0x6c, 0xa6, 0x2c, 0x0a, 0x14, // .62....E.0.l.,.. + 0x19, 0x0d, 0x0b, 0x2a, 0x12, 0x22, 0x81, 0x54, 0x19, 0x03, 0xb8, 0x2e, 0xf4, 0x44, 0x13, 0x13, // ...*.".T.....D.. + 0x40, 0x59, 0x6f, 0xbd, 0xfe, 0xfb, 0xfe, 0xe2, 0xfe, 0xfb, 0xbd, 0x6f, 0x6f, 0xbd, 0x01, 0x05, // @Yo........oo... + 0x8f, 0xb6, 0xa1, 0x40, 0x13, 0x35, 0x13, 0x44, 0xfb, 0x0a, 0x0c, 0x0d, 0x0a, 0x5b, 0x09, 0x09, // ...@.5.D.....[.. + 0x0a, 0x1a, 0x0a, 0x5a, 0x0a, 0xdc, 0x0b, 0x18, 0x0b, 0x5a, 0x0a, 0x0a, 0x09, 0x1b, 0x09, 0x5b, // ...Z.....Z.....[ + 0x09, 0x20, 0x12, 0x0e, 0x60, 0x0e, 0x12, 0x12, 0x0e, 0x60, 0x0e, 0xae, 0x12, 0x1c, 0x12, 0x12, // . ..`....`...... + 0x1c, 0x12, 0x97, 0x5b, 0x0a, 0x0c, 0x0d, 0x0a, 0x0a, 0x0a, 0x5a, 0x0a, 0x1a, 0x0a, 0x09, 0x03, // ...[......Z..... + 0x9a, 0x32, 0x14, 0x0a, 0x2c, 0xa6, 0x6c, 0x19, 0x30, 0x0a, 0x05, 0x28, 0x54, 0x81, 0x22, 0x0b, // .2..,.l.0..(T.". + 0x01, 0xad, 0x2e, 0xf3, 0x44, 0x13, 0x35, 0x13, 0x40, 0xa1, 0xb6, 0x8f, 0xfe, 0xfb, 0xbd, 0x6f, // ....D.5.@......o + 0x6f, 0xbd, 0x01, 0x05, 0x01, 0x1e, 0x01, 0x05, 0xbd, 0x6f, 0x59, 0x40, 0x13, 0x13, 0x44, 0x01, // o........oY@..D. + 0x2c, 0x0a, 0x0a, 0x5a, 0x0a, 0x1a, 0x0a, 0x09, 0x09, 0x5b, 0x09, 0x1b, 0xef, 0x09, 0x09, 0x5b, // ,..Z.....[.....[ + 0x09, 0x1b, 0x09, 0x0a, 0x0a, 0x5a, 0x0a, 0x1a, 0xbb, 0x1c, 0x12, 0x12, 0x1c, 0x12, 0xa0, 0x60, // .....Z.........` + 0x0e, 0x12, 0x12, 0x0e, 0x60, 0x0e, 0x12, 0x12, 0x45, 0x5a, 0x0a, 0x0a, 0x09, 0x1b, 0x09, 0x5b, // ....`...EZ.....[ + 0x09, 0x09, 0x0a, 0x1a, 0x00, 0x03, 0x00, 0x00, 0xff, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x04, // ................ + 0x00, 0x14, 0x00, 0x35, 0x00, 0x00, 0x01, 0x25, 0x05, 0x03, 0x21, 0x02, 0x20, 0x04, 0x16, 0x12, // ...5...%..!. ... + 0x10, 0x02, 0x06, 0x04, 0x20, 0x24, 0x26, 0x02, 0x10, 0x12, 0x36, 0x01, 0x36, 0x3d, 0x01, 0x07, // .... $&...6.6=.. + 0x27, 0x13, 0x17, 0x26, 0x27, 0x17, 0x05, 0x25, 0x37, 0x06, 0x07, 0x37, 0x13, 0x07, 0x27, 0x15, // '..&'..%7..7..'. + 0x14, 0x17, 0x37, 0x05, 0x13, 0x07, 0x16, 0x32, 0x37, 0x27, 0x13, 0x25, 0x02, 0x61, 0x01, 0x1f, // ..7....27'.%.a.. + 0x01, 0x1f, 0x6d, 0xfe, 0x9d, 0x05, 0x01, 0x6c, 0x01, 0x4c, 0xf0, 0x8e, 0x8e, 0xf0, 0xfe, 0xb4, // ..m....l.L...... + 0xfe, 0x94, 0xfe, 0xb4, 0xf0, 0x8e, 0x8e, 0xf0, 0x04, 0x6d, 0x95, 0x66, 0xf0, 0x3f, 0x86, 0x96, // .........m.f.?.. + 0xef, 0x35, 0xfe, 0xe1, 0xfe, 0xe1, 0x35, 0xef, 0x96, 0x87, 0x3e, 0xf0, 0x66, 0x95, 0x1e, 0x01, // .5....5...>.f... + 0x46, 0x8b, 0x74, 0x75, 0xf6, 0x75, 0x74, 0x8b, 0x01, 0x46, 0x02, 0xd0, 0xd0, 0xd0, 0xfe, 0xb0, // F.tu.ut..F...... + 0x04, 0x80, 0x8e, 0xf0, 0xfe, 0xb4, 0xfe, 0x94, 0xfe, 0xb4, 0xf0, 0x8e, 0x8e, 0xf0, 0x01, 0x4c, // ...............L + 0x01, 0x6c, 0x01, 0x4c, 0xf0, 0xfb, 0x48, 0xcb, 0xfb, 0x03, 0x59, 0xe0, 0x01, 0x43, 0x0c, 0xce, // .l.L..H...Y..C.. + 0x4c, 0x7c, 0x9f, 0x9f, 0x7c, 0x4c, 0xce, 0x0c, 0xfe, 0xbd, 0xe0, 0x59, 0x03, 0xfb, 0xcb, 0x84, // L|..|L.....Y.... + 0x28, 0xfe, 0xd6, 0x45, 0x27, 0x27, 0x45, 0x01, 0x2a, 0x28, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, // (..E''E.*(...... + 0x00, 0x00, 0x07, 0x00, 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x3f, 0x00, 0x49, // .........../.?.I + 0x00, 0x59, 0x00, 0x69, 0x00, 0x79, 0x00, 0x89, 0x00, 0xa2, 0x00, 0xb2, 0x00, 0xbc, 0x00, 0x00, // .Y.i.y.......... + 0x25, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, // %...+."&=.46;.2. + 0x03, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, // ....+."&=.46;.2. + 0x01, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, // ....+."&=.46;.2. + 0x03, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, // ....+."&=.46;.2. + 0x25, 0x22, 0x26, 0x3d, 0x01, 0x21, 0x15, 0x14, 0x06, 0x23, 0x01, 0x15, 0x14, 0x06, 0x2b, 0x01, // %"&=.!...#....+. + 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x03, 0x15, 0x14, 0x06, 0x2b, 0x01, // "&=.46;.2.....+. + 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, 0x2b, 0x01, // "&=.46;.2.....+. + 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x03, 0x15, 0x14, 0x06, 0x2b, 0x01, // "&=.46;.2.....+. + 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x01, 0x15, 0x21, 0x35, 0x34, 0x05, // "&=.46;.2...!54. + 0x04, 0x1d, 0x01, 0x21, 0x35, 0x34, 0x3e, 0x04, 0x24, 0x20, 0x04, 0x1e, 0x04, 0x11, 0x15, 0x14, // ...!54>.$ ...... + 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x11, 0x15, 0x14, // .+."&=.46;.2.... + 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x01, 0xc0, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x0e, // .#!"&=.......... + 0xc0, 0x0e, 0x12, 0xc0, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x02, 0x40, // ...............@ + 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0xc0, 0x12, 0x0e, 0xc0, 0x0e, 0x12, // ................ + 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0xfd, 0xc2, 0x1c, 0x26, 0x02, 0x02, 0x26, 0x1b, 0x02, 0xff, 0x12, // ........&..&.... + 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0xc0, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, // ................ + 0x0e, 0xc0, 0x0e, 0x12, 0x02, 0x40, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, // .....@.......... + 0xc0, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x01, 0x80, 0xfd, 0xfe, 0xfe, // ................ + 0x82, 0xfe, 0x82, 0xfd, 0xfe, 0x11, 0x33, 0x50, 0x8d, 0xb3, 0x01, 0x0d, 0x01, 0x3e, 0x01, 0x0c, // ......3P.....>.. + 0xb4, 0x8d, 0x50, 0x33, 0x11, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x26, // ..P3...........& + 0x1b, 0xfe, 0x80, 0x1b, 0x26, 0xe0, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x01, // ....&........... + 0x72, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0xfe, 0x72, 0xc0, 0x0e, 0x12, 0x12, // r..........r.... + 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x01, 0x72, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, // ......r......... + 0x92, 0x26, 0x1b, 0x81, 0x81, 0x1b, 0x26, 0xfd, 0xe0, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, // .&....&......... + 0x12, 0x12, 0x01, 0x72, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0xfe, 0x72, 0xc0, // ...r..........r. + 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x01, 0x72, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, // .........r...... + 0x0e, 0x12, 0x12, 0x01, 0x8a, 0x0d, 0x0a, 0x68, 0x02, 0x01, 0x65, 0x0a, 0x0d, 0x11, 0x34, 0x4c, // .......h..e...4L + 0x4b, 0x4d, 0x3a, 0x25, 0x25, 0x3a, 0x4d, 0x4b, 0x4c, 0x34, 0xfe, 0x57, 0xc0, 0x0e, 0x12, 0x12, // KM:%%:MKL4.W.... + 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x01, 0x54, 0x81, 0x1b, 0x26, 0x26, 0x1b, 0x81, 0x00, 0x00, 0x00, // ......T..&&..... + 0x00, 0x05, 0x00, 0x00, 0xff, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x10, 0x00, 0x14, 0x00, 0x25, // ...............% + 0x00, 0x2f, 0x00, 0x39, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, 0x23, 0x11, 0x14, 0x06, 0x23, 0x21, // ./.9......#...#! + 0x22, 0x26, 0x35, 0x11, 0x13, 0x36, 0x33, 0x21, 0x11, 0x21, 0x11, 0x01, 0x11, 0x14, 0x06, 0x23, // "&5..63!.!.....# + 0x21, 0x22, 0x26, 0x35, 0x11, 0x22, 0x26, 0x35, 0x11, 0x21, 0x32, 0x17, 0x01, 0x15, 0x21, 0x35, // !"&5."&5.!2...!5 + 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x05, 0x15, 0x21, 0x35, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // 463!2...!5463!2. + 0x02, 0xc0, 0x26, 0x1a, 0x26, 0x1a, 0xfe, 0x00, 0x1a, 0x26, 0xf9, 0x07, 0x18, 0x02, 0xe8, 0xff, // ..&.&....&...... + 0x00, 0x04, 0x00, 0x26, 0x1a, 0xfe, 0x00, 0x1a, 0x26, 0x1a, 0x26, 0x01, 0xa8, 0x18, 0x07, 0xfc, // ...&....&.&..... + 0xd9, 0xfe, 0xa0, 0x12, 0x0e, 0x01, 0x20, 0x0e, 0x12, 0x02, 0xa0, 0xfe, 0xa0, 0x12, 0x0e, 0x01, // ...... ......... + 0x20, 0x0e, 0x12, 0x04, 0xc0, 0xfd, 0x00, 0x1a, 0x26, 0xfd, 0xc0, 0x1a, 0x26, 0x26, 0x1a, 0x02, // .......&...&&.. + 0x00, 0x03, 0x69, 0x17, 0xfd, 0x40, 0x02, 0xc0, 0xfc, 0x80, 0xfe, 0x00, 0x1a, 0x26, 0x26, 0x1a, // ..i..@.......&&. + 0x02, 0x40, 0x26, 0x1a, 0x03, 0x00, 0x17, 0x01, 0x37, 0xe0, 0xe0, 0x0e, 0x12, 0x12, 0x0e, 0xe0, // .@&.....7....... + 0xe0, 0x0e, 0x12, 0x12, 0x00, 0x01, 0x00, 0x00, 0xff, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x1d, // ................ + 0x00, 0x00, 0x01, 0x16, 0x14, 0x07, 0x01, 0x17, 0x07, 0x06, 0x04, 0x27, 0x01, 0x23, 0x35, 0x01, // ...........'.#5. + 0x26, 0x12, 0x3f, 0x01, 0x17, 0x01, 0x36, 0x32, 0x16, 0x14, 0x07, 0x01, 0x17, 0x01, 0x36, 0x32, // &.?...62......62 + 0x06, 0xdb, 0x25, 0x25, 0xfe, 0x6f, 0x96, 0xa0, 0xa3, 0xfe, 0x3b, 0xb9, 0xfe, 0x96, 0xb5, 0x01, // ..%%.o....;..... + 0x6a, 0x7c, 0x2f, 0xa3, 0xa0, 0x96, 0x01, 0x90, 0x26, 0x6a, 0x4a, 0x25, 0xfe, 0x70, 0xea, 0x01, // j|/.....&jJ%.p.. + 0x91, 0x26, 0x6a, 0x04, 0x3b, 0x26, 0x69, 0x26, 0xfe, 0x70, 0x96, 0xa0, 0xa3, 0x2f, 0x7c, 0xfe, // .&j.;&i&.p.../|. + 0x96, 0xb5, 0x01, 0x6a, 0xb9, 0x01, 0xc5, 0xa3, 0xa0, 0x96, 0x01, 0x91, 0x25, 0x4a, 0x6b, 0x25, // ...j........%Jk% + 0xfe, 0x6f, 0xea, 0x01, 0x90, 0x25, 0x00, 0x00, 0x00, 0x04, 0x00, 0x19, 0xff, 0x0c, 0x06, 0xe7, // .o...%.......... + 0x06, 0x00, 0x00, 0x09, 0x00, 0x15, 0x00, 0x3a, 0x00, 0x67, 0x00, 0x00, 0x01, 0x14, 0x06, 0x22, // .......:.g....." + 0x26, 0x35, 0x34, 0x36, 0x32, 0x16, 0x05, 0x14, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, // &5462....#"&5463 + 0x32, 0x16, 0x13, 0x11, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x15, 0x11, 0x1e, 0x05, 0x32, 0x36, // 2...4&#!".....26 + 0x33, 0x36, 0x17, 0x16, 0x17, 0x16, 0x17, 0x36, 0x17, 0x32, 0x1e, 0x02, 0x3e, 0x05, 0x37, 0x06, // 36.....6.2..>.7. + 0x07, 0x12, 0x07, 0x06, 0x07, 0x06, 0x27, 0x26, 0x37, 0x03, 0x35, 0x2e, 0x01, 0x27, 0x03, 0x16, // ......'&7.5..'.. + 0x07, 0x06, 0x27, 0x26, 0x27, 0x26, 0x13, 0x26, 0x27, 0x26, 0x36, 0x17, 0x1e, 0x01, 0x17, 0x11, // ..'&'&.&'&6..... + 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x15, 0x11, 0x37, 0x36, 0x16, 0x03, 0x69, 0x7f, 0xb2, 0x7f, // 463!2...76..i... + 0x7f, 0xb2, 0x7f, 0x01, 0xf6, 0x7e, 0x5a, 0x59, 0x7f, 0x7f, 0x59, 0x5a, 0x7e, 0xe1, 0x40, 0x4f, // .....~ZY..YZ~.@O + 0xfb, 0xa8, 0x53, 0x3b, 0x2b, 0x5b, 0x47, 0x5b, 0x33, 0x59, 0x1c, 0x55, 0x02, 0x44, 0x1b, 0x06, // ..S;+[G[3Y.U.D.. + 0x04, 0x1a, 0x23, 0x07, 0x6f, 0x05, 0x3f, 0x17, 0x44, 0x26, 0x47, 0x33, 0x49, 0x3d, 0x4a, 0xc6, // ..#.o.?.D&G3I=J. + 0x79, 0xfb, 0x54, 0x6b, 0x42, 0x75, 0x68, 0x4e, 0x56, 0x04, 0x01, 0x08, 0x21, 0x07, 0x01, 0x04, // y.TkBuhNV...!... + 0x57, 0x4f, 0x68, 0x75, 0x41, 0x69, 0x53, 0xfb, 0x79, 0x19, 0x2a, 0x27, 0x04, 0x0f, 0x03, 0x5e, // WOhuAiS.y.*'...^ + 0x43, 0x04, 0xe9, 0x43, 0x5e, 0x15, 0x27, 0x2a, 0x03, 0x1c, 0x53, 0x77, 0x77, 0x53, 0x54, 0x76, // C..C^.'*..SwwSTv + 0x76, 0x54, 0x53, 0x77, 0x77, 0x53, 0x54, 0x76, 0x76, 0xfe, 0xf8, 0x02, 0x9b, 0x57, 0x49, 0x44, // vTSwwSTvv....WID + 0x5c, 0xfd, 0x5f, 0x17, 0x22, 0x16, 0x0f, 0x07, 0x01, 0x04, 0x01, 0x1c, 0x06, 0x03, 0x19, 0x1a, // .._."........... + 0x5b, 0x04, 0x03, 0x01, 0x01, 0x03, 0x06, 0x0b, 0x10, 0x17, 0x1f, 0x18, 0x95, 0x67, 0xfe, 0xe3, // [............g.. + 0xb4, 0x71, 0x23, 0x20, 0x2f, 0x33, 0x71, 0x01, 0x46, 0x01, 0x02, 0x08, 0x01, 0xfe, 0xae, 0x72, // .q# /3q.F......r + 0x32, 0x2f, 0x20, 0x24, 0x72, 0xb4, 0x01, 0x1b, 0x67, 0x95, 0x25, 0x34, 0x1b, 0x02, 0x0a, 0x03, // 2/ $r...g.%4.... + 0x02, 0xb6, 0x48, 0x66, 0x66, 0x48, 0xfd, 0x4a, 0x0f, 0x1b, 0x34, 0x00, 0x00, 0x04, 0x00, 0x64, // ..HffH.J..4....d + 0xff, 0x80, 0x06, 0x9c, 0x06, 0x00, 0x00, 0x03, 0x00, 0x07, 0x00, 0x0f, 0x00, 0x19, 0x00, 0x00, // ................ + 0x01, 0x11, 0x23, 0x11, 0x21, 0x11, 0x23, 0x11, 0x13, 0x37, 0x11, 0x21, 0x11, 0x21, 0x15, 0x37, // ..#.!.#..7.!.!.7 + 0x01, 0x11, 0x01, 0x21, 0x07, 0x23, 0x35, 0x21, 0x11, 0x13, 0x03, 0x80, 0x91, 0x02, 0x1f, 0x91, // ...!.#5!........ + 0x91, 0xfd, 0xfb, 0x56, 0x01, 0x46, 0xd9, 0x03, 0x1c, 0xfe, 0x4e, 0xfe, 0xba, 0xd9, 0xd9, 0xfe, // ...V.F....N..... + 0x72, 0x6d, 0x04, 0x4e, 0xfe, 0x4e, 0x01, 0xb2, 0xfe, 0x4e, 0x01, 0xb2, 0xfd, 0x08, 0xfe, 0x03, // rm.N.N...N...... + 0x1b, 0xfb, 0xe7, 0xd9, 0xd9, 0x04, 0xaa, 0xfc, 0x0b, 0xfe, 0x4e, 0xd9, 0xd9, 0x04, 0x86, 0x01, // ..........N..... + 0x21, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x59, 0xff, 0x01, 0x05, 0xaa, 0x05, 0xfd, 0x00, 0x16, // !......Y........ + 0x00, 0x2b, 0x00, 0x3f, 0x00, 0x4e, 0x00, 0x65, 0x00, 0x00, 0x25, 0x15, 0x02, 0x07, 0x06, 0x07, // .+.?.N.e..%..... + 0x06, 0x26, 0x27, 0x26, 0x27, 0x26, 0x37, 0x3e, 0x01, 0x37, 0x32, 0x37, 0x3e, 0x01, 0x17, 0x1e, // .&'&'&7>.727>... + 0x01, 0x27, 0x06, 0x0f, 0x01, 0x04, 0x23, 0x26, 0x27, 0x26, 0x27, 0x26, 0x3e, 0x01, 0x17, 0x32, // .'....#&'&'&>..2 + 0x17, 0x16, 0x1f, 0x01, 0x1e, 0x01, 0x01, 0x0e, 0x01, 0x07, 0x06, 0x27, 0x26, 0x03, 0x27, 0x26, // ...........'&.'& + 0x36, 0x37, 0x36, 0x17, 0x16, 0x17, 0x1e, 0x01, 0x17, 0x16, 0x01, 0x16, 0x07, 0x06, 0x27, 0x01, // 676...........'. + 0x26, 0x37, 0x36, 0x24, 0x17, 0x16, 0x17, 0x16, 0x12, 0x05, 0x16, 0x07, 0x06, 0x05, 0x06, 0x07, // &76$............ + 0x37, 0x06, 0x26, 0x27, 0x26, 0x37, 0x36, 0x37, 0x3e, 0x01, 0x37, 0x36, 0x17, 0x1e, 0x01, 0x17, // 7.&'&767>.76.... + 0x03, 0x05, 0x01, 0x05, 0x0c, 0x27, 0x36, 0xff, 0x23, 0x0d, 0x04, 0x01, 0x05, 0x04, 0x3c, 0x97, // .....'6.#.....<. + 0x01, 0x3b, 0x0f, 0x31, 0x19, 0x18, 0x1b, 0x96, 0x03, 0x31, 0x78, 0xfe, 0xed, 0x11, 0x23, 0x13, // .;.1.....1x...#. + 0x0c, 0x05, 0x08, 0x12, 0x2a, 0x23, 0x0d, 0xbd, 0x47, 0x2c, 0x54, 0x17, 0x19, 0x03, 0x39, 0x07, // ....*#..G,T...9. + 0xa9, 0x33, 0x25, 0x1a, 0x0e, 0xaa, 0x2f, 0x0e, 0x05, 0x11, 0x23, 0x30, 0x01, 0x76, 0xcb, 0x4e, // .3%.../...#0.v.N + 0x08, 0x1c, 0xfd, 0x5a, 0x05, 0x3b, 0x3a, 0x38, 0xfe, 0x86, 0x08, 0x1b, 0x29, 0x01, 0x4d, 0x3a, // ...Z.;:8....).M: + 0x28, 0x09, 0x03, 0x26, 0x02, 0x9b, 0x03, 0x1d, 0x0f, 0xfe, 0xc6, 0x43, 0x18, 0x01, 0x17, 0x2e, // (..&.......C.... + 0x0e, 0x1e, 0x1e, 0x01, 0x4a, 0x7d, 0x32, 0x09, 0x1c, 0x25, 0x30, 0x96, 0x06, 0xd9, 0x7f, 0xfe, // ....J}2..%0..... + 0xdc, 0x0d, 0x20, 0x08, 0x09, 0x5e, 0x2a, 0x0f, 0x15, 0x0c, 0x0e, 0x0a, 0x4a, 0xb3, 0x46, 0x13, // .. ..^*.....J.F. + 0x0b, 0x09, 0x0a, 0x26, 0xe4, 0x37, 0x0f, 0x27, 0x58, 0x02, 0x22, 0x19, 0x32, 0x4c, 0xb5, 0x44, // ...&.7.'X.".2L.D + 0x02, 0x4d, 0x1d, 0x12, 0x22, 0x09, 0x2b, 0xfe, 0xbc, 0x36, 0xd6, 0x14, 0x0e, 0x15, 0x0a, 0x01, // .M..".+..6...... + 0x15, 0x4d, 0x15, 0x32, 0x15, 0x2b, 0x11, 0x01, 0x27, 0x42, 0x1b, 0x07, 0x16, 0x02, 0x51, 0x66, // .M.2.+..'B....Qf + 0x14, 0x11, 0x58, 0x02, 0x56, 0x23, 0x1b, 0x2b, 0x5d, 0x0f, 0x0a, 0x23, 0x12, 0xfd, 0xc1, 0xc8, // ..X.V#.+]..#.... + 0x27, 0x14, 0x0a, 0x4c, 0x0f, 0x08, 0x02, 0x06, 0x14, 0x16, 0x2f, 0x28, 0x01, 0x65, 0xab, 0x42, // '..L....../(.e.B + 0x06, 0x13, 0x11, 0x17, 0xdd, 0x39, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, // .....9.......... + 0x05, 0x80, 0x00, 0x03, 0x00, 0x07, 0x00, 0x0b, 0x00, 0x0f, 0x00, 0x13, 0x00, 0x17, 0x00, 0x1b, // ................ + 0x00, 0x23, 0x00, 0x2c, 0x00, 0x38, 0x00, 0x00, 0x01, 0x21, 0x11, 0x21, 0x13, 0x15, 0x21, 0x35, // .#.,.8...!.!..!5 + 0x01, 0x11, 0x21, 0x11, 0x01, 0x15, 0x21, 0x35, 0x01, 0x15, 0x21, 0x35, 0x01, 0x15, 0x21, 0x35, // ..!...!5..!5..!5 + 0x01, 0x15, 0x21, 0x35, 0x01, 0x11, 0x23, 0x11, 0x14, 0x16, 0x32, 0x36, 0x25, 0x11, 0x21, 0x11, // ..!5..#...26%.!. + 0x14, 0x07, 0x21, 0x32, 0x36, 0x13, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x21, // ..!26....#!"&5.! + 0x35, 0x04, 0x00, 0xfe, 0x80, 0x01, 0x80, 0x80, 0xfd, 0x80, 0x02, 0x80, 0xfd, 0x80, 0x05, 0x00, // 5............... + 0xfe, 0x00, 0x02, 0x00, 0xfe, 0x00, 0x02, 0x00, 0xfe, 0x00, 0x02, 0x00, 0xfe, 0x00, 0xfc, 0x00, // ................ + 0x80, 0x26, 0x34, 0x26, 0x06, 0x80, 0xfa, 0x00, 0x0b, 0x05, 0xcb, 0x1a, 0x26, 0x80, 0x70, 0x50, // .&4&........&.pP + 0xf9, 0x80, 0x50, 0x70, 0x01, 0x00, 0x04, 0x00, 0xfe, 0x80, 0xff, 0x00, 0x80, 0x80, 0x03, 0x00, // ..Pp............ + 0xfd, 0x80, 0x02, 0x80, 0xfd, 0x00, 0x80, 0x80, 0x01, 0x00, 0x80, 0x80, 0x01, 0x00, 0x80, 0x80, // ................ + 0x01, 0x00, 0x80, 0x80, 0xfc, 0x40, 0x03, 0xc0, 0xfc, 0x40, 0x1a, 0x26, 0x26, 0x1a, 0x04, 0x40, // .....@...@.&&..@ + 0xfb, 0xc0, 0x21, 0x1f, 0x26, 0x04, 0xda, 0xfb, 0x40, 0x50, 0x70, 0x70, 0x50, 0x04, 0x40, 0x80, // ..!.&...@PppP.@. + 0x00, 0x04, 0x00, 0x2a, 0x00, 0x0d, 0x07, 0xd6, 0x05, 0x80, 0x00, 0x09, 0x00, 0x1f, 0x00, 0x39, // ...*...........9 + 0x00, 0x51, 0x00, 0x00, 0x24, 0x22, 0x26, 0x35, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x37, 0x22, // .Q..$"&5462...7" + 0x2e, 0x01, 0x22, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x35, 0x34, 0x37, 0x3e, 0x01, 0x32, 0x16, 0x17, // .."..#"&547>.2.. + 0x16, 0x15, 0x14, 0x06, 0x01, 0x22, 0x27, 0x2e, 0x01, 0x23, 0x22, 0x0e, 0x03, 0x23, 0x22, 0x26, // ....."'..#"..#"& + 0x35, 0x34, 0x37, 0x36, 0x24, 0x20, 0x04, 0x17, 0x16, 0x15, 0x14, 0x06, 0x13, 0x22, 0x27, 0x26, // 5476$ ......."'& + 0x24, 0x20, 0x04, 0x07, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x37, 0x36, 0x24, 0x20, 0x04, 0x17, // $ ...#"&5476$ .. + 0x16, 0x15, 0x14, 0x06, 0x04, 0x14, 0x28, 0x92, 0x7d, 0x52, 0x7d, 0x68, 0x02, 0x4c, 0x7f, 0x82, // ......(.}R}h.L.. + 0x7f, 0x4b, 0x03, 0x12, 0x97, 0x0a, 0x4e, 0xec, 0xe6, 0xec, 0x4e, 0x0a, 0x97, 0x00, 0xff, 0x0b, // .K....N...N..... + 0x0c, 0x88, 0xe8, 0x98, 0x55, 0xab, 0x7f, 0x64, 0x3a, 0x02, 0x11, 0x96, 0x0a, 0x84, 0x01, 0x78, // ....U..d:......x + 0x01, 0x80, 0x01, 0x78, 0x84, 0x0a, 0x96, 0xfe, 0x0b, 0x0b, 0xb3, 0xfe, 0x7f, 0xfe, 0x38, 0xfe, // ...x..........8. + 0x7f, 0xb3, 0x0b, 0x0b, 0x11, 0x97, 0x0a, 0xbb, 0x02, 0x04, 0x02, 0x1a, 0x02, 0x04, 0xbb, 0x0a, // ................ + 0x97, 0x0d, 0x93, 0x14, 0x20, 0x2c, 0x2c, 0x20, 0x14, 0x7c, 0x32, 0x32, 0x32, 0x32, 0x96, 0x12, // .... ,, .|2222.. + 0x0d, 0x0a, 0x4d, 0x58, 0x58, 0x4d, 0x0a, 0x0d, 0x12, 0x96, 0x01, 0x10, 0x08, 0x69, 0x63, 0x2c, // ..MXXM.......ic, + 0x3e, 0x3e, 0x2c, 0x96, 0x12, 0x0c, 0x0a, 0x84, 0x92, 0x92, 0x84, 0x0a, 0x0c, 0x12, 0x96, 0x01, // >>,............. + 0x0f, 0x09, 0x9d, 0x9f, 0x9f, 0x9d, 0x09, 0x96, 0x12, 0x0d, 0x0a, 0xba, 0xcc, 0xcc, 0xba, 0x0a, // ................ + 0x0d, 0x12, 0x96, 0x00, 0x00, 0x0d, 0x00, 0x00, 0xff, 0x00, 0x06, 0x80, 0x06, 0x00, 0x00, 0x07, // ................ + 0x00, 0x0f, 0x00, 0x17, 0x00, 0x1f, 0x00, 0x27, 0x00, 0x2f, 0x00, 0x37, 0x00, 0x3f, 0x00, 0x4b, // .......'./.7.?.K + 0x00, 0x53, 0x00, 0x63, 0x00, 0x6b, 0x00, 0x7b, 0x00, 0x00, 0x04, 0x34, 0x26, 0x22, 0x06, 0x14, // .S.c.k.{...4&".. + 0x16, 0x32, 0x24, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x00, 0x34, 0x26, 0x22, 0x06, 0x14, // .2$4&"...2.4&".. + 0x16, 0x32, 0x00, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x00, 0x34, 0x26, 0x22, 0x06, 0x14, // .2.4&"...2.4&".. + 0x16, 0x32, 0x00, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x00, 0x34, 0x26, 0x22, 0x06, 0x14, // .2.4&"...2.4&".. + 0x16, 0x32, 0x00, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x01, 0x11, 0x34, 0x26, 0x22, 0x06, // .2.4&"...2..4&". + 0x15, 0x11, 0x14, 0x16, 0x32, 0x36, 0x00, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x01, 0x11, // ....26.4&"...2.. + 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x10, 0x34, // 4&#!".....3!26.4 + 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x13, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, // &"...2....#!"&5. + 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x80, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x01, 0xcb, 0x4b, // 463!2...KjKKj..K + 0x6a, 0x4b, 0x4b, 0x6a, 0xfe, 0xcb, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x03, 0x4b, 0x4b, 0x6a, 0x4b, // jKKj..KjKKj.KKjK + 0x4b, 0x6a, 0xfe, 0xcb, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0xfe, 0xcb, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, // Kj..KjKKj..KjKKj + 0x03, 0x4b, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0xfe, 0xcb, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x03, 0x4b, // .KKjKKj..KjKKj.K + 0x4c, 0x68, 0x4c, 0x4c, 0x68, 0x4c, 0xfe, 0x80, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x01, 0xcb, 0x26, // LhLLhL..KjKKj..& + 0x1a, 0xfb, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x05, 0x00, 0x1a, 0x26, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, // ....&&....&KjKKj + 0xcb, 0x4c, 0x34, 0xfa, 0x80, 0x34, 0x4c, 0x4c, 0x34, 0x05, 0x80, 0x34, 0x4c, 0x35, 0x6a, 0x4b, // .L4..4LL4..4L5jK + 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0x01, 0xcb, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, // KjKKjKKjK..jKKjK + 0xfe, 0xcb, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0x01, 0xcb, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0x01, 0xcb, // ..jKKjK..jKKjK.. + 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0xfe, 0xcb, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0x01, 0xcb, 0x6a, 0x4b, // jKKjK..jKKjK..jK + 0x4b, 0x6a, 0x4b, 0xfd, 0x80, 0x01, 0x80, 0x34, 0x4c, 0x4c, 0x34, 0xfe, 0x80, 0x34, 0x4c, 0x4c, // KjK....4LL4..4LL + 0x02, 0xff, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0x01, 0xc0, 0x01, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0xff, // ..jKKjK.....&&.. + 0x00, 0x1a, 0x26, 0x26, 0xfe, 0xa5, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0x03, 0x00, 0xfa, 0x00, 0x34, // ..&&..jKKjK....4 + 0x4c, 0x4c, 0x34, 0x06, 0x00, 0x34, 0x4c, 0x4c, 0x00, 0x02, 0x00, 0x09, 0xff, 0x00, 0x05, 0xef, // LL4..4LL........ + 0x06, 0x00, 0x00, 0x27, 0x00, 0x45, 0x00, 0x00, 0x01, 0x16, 0x07, 0x02, 0x21, 0x23, 0x22, 0x06, // ...'.E......!#". + 0x0f, 0x01, 0x03, 0x07, 0x0e, 0x01, 0x2b, 0x01, 0x22, 0x26, 0x37, 0x3e, 0x03, 0x37, 0x36, 0x3b, // ......+."&7>.76; + 0x01, 0x16, 0x37, 0x36, 0x37, 0x36, 0x37, 0x36, 0x37, 0x3e, 0x01, 0x16, 0x17, 0x16, 0x27, 0x14, // ..7676767>....'. + 0x07, 0x06, 0x07, 0x06, 0x07, 0x14, 0x23, 0x27, 0x22, 0x07, 0x06, 0x03, 0x06, 0x23, 0x21, 0x22, // ......#'"....#!" + 0x26, 0x37, 0x13, 0x3e, 0x01, 0x33, 0x21, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x05, 0xef, 0x12, 0x16, // &7.>.3!2........ + 0x57, 0xfe, 0x22, 0x2c, 0x19, 0x26, 0x05, 0x04, 0x37, 0x02, 0x05, 0x27, 0x19, 0xfb, 0x15, 0x18, // W.",.&..7..'.... + 0x03, 0x09, 0x23, 0x12, 0x24, 0x09, 0x05, 0x26, 0x83, 0x85, 0x67, 0xaf, 0x70, 0x66, 0x35, 0x18, // ..#.$..&..g.pf5. + 0x0b, 0x01, 0x03, 0x04, 0x04, 0x4f, 0x99, 0x2e, 0x50, 0xde, 0x71, 0x8b, 0x5a, 0x5a, 0x64, 0x12, // .....O..P.q.ZZd. + 0x02, 0x53, 0x01, 0x0b, 0xfe, 0xd9, 0x16, 0x1d, 0x03, 0xe8, 0x05, 0x2d, 0x1d, 0x02, 0x56, 0x22, // .S.........-..V" + 0x7f, 0x30, 0x6b, 0x71, 0x03, 0x7a, 0x54, 0x78, 0xfe, 0x44, 0x21, 0x1a, 0x13, 0xfe, 0xa6, 0x0f, // .0kq.zTx.D!..... + 0x1a, 0x21, 0x1e, 0x15, 0x38, 0xe0, 0x70, 0xdf, 0x38, 0x25, 0x02, 0x17, 0x27, 0x69, 0x5f, 0x97, // .!..8.p.8%..'i_. + 0x46, 0x3f, 0x06, 0x03, 0x01, 0x03, 0x3b, 0xb3, 0x6b, 0x81, 0xe9, 0x52, 0x28, 0x02, 0x01, 0x01, // F?....;.k..R(... + 0x60, 0x08, 0xfd, 0xf6, 0x0a, 0x21, 0x16, 0x05, 0xbf, 0x1d, 0x26, 0x1a, 0x13, 0x29, 0xa4, 0x00, // `....!....&..).. + 0x00, 0x04, 0x00, 0x27, 0xff, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x12, 0x00, 0x19, // ...'............ + 0x00, 0x28, 0x00, 0x00, 0x01, 0x32, 0x17, 0x00, 0x13, 0x21, 0x02, 0x03, 0x26, 0x36, 0x33, 0x01, // .(...2...!..&63. + 0x06, 0x07, 0x02, 0x03, 0x36, 0x37, 0x12, 0x13, 0x12, 0x00, 0x13, 0x21, 0x02, 0x09, 0x01, 0x10, // ....67.....!.... + 0x03, 0x02, 0x01, 0x02, 0x03, 0x26, 0x36, 0x33, 0x21, 0x32, 0x16, 0x17, 0x12, 0x01, 0xb9, 0x21, // .....&63!2.....! + 0x13, 0x01, 0x0a, 0x60, 0xfe, 0x42, 0x7f, 0xf0, 0x0c, 0x12, 0x14, 0x03, 0xa4, 0x31, 0x4c, 0x4f, // ...`.B.......1LO + 0xb1, 0x28, 0x04, 0xd3, 0xe1, 0xeb, 0x01, 0x2b, 0x23, 0xfe, 0x3d, 0x29, 0xfe, 0x00, 0x04, 0x68, // .(.....+#.=)...h + 0x65, 0x43, 0xfe, 0xdc, 0x19, 0x51, 0x04, 0x13, 0x10, 0x01, 0x67, 0x15, 0x23, 0x05, 0x73, 0x03, // eC...Q....g.#.s. + 0x60, 0x1a, 0xfe, 0x94, 0xfe, 0x66, 0x01, 0xb9, 0x01, 0x34, 0x10, 0x23, 0xfe, 0x9b, 0xc7, 0xc2, // `....f...4.#.... + 0x01, 0x36, 0x01, 0x1c, 0xdd, 0xe4, 0xfe, 0xac, 0x01, 0x8f, 0xfe, 0xbc, 0xfd, 0x13, 0xfe, 0x71, // .6.............q + 0x02, 0x99, 0x03, 0x27, 0xfd, 0xc0, 0xfe, 0x58, 0xfe, 0x7c, 0x02, 0x30, 0x02, 0x0b, 0x01, 0x2d, // ...'...X.|.0...- + 0x01, 0x1b, 0x10, 0x19, 0x1a, 0x14, 0xfe, 0x67, 0x00, 0x07, 0x00, 0x00, 0xff, 0x80, 0x09, 0x00, // .......g........ + 0x05, 0x80, 0x00, 0x08, 0x00, 0x0f, 0x00, 0x18, 0x00, 0x1c, 0x00, 0x3e, 0x00, 0x49, 0x00, 0x59, // ...........>.I.Y + 0x00, 0x00, 0x01, 0x23, 0x36, 0x3f, 0x01, 0x3e, 0x01, 0x37, 0x17, 0x05, 0x03, 0x26, 0x23, 0x21, // ...#6?.>.7...&#! + 0x07, 0x04, 0x25, 0x03, 0x27, 0x2e, 0x01, 0x27, 0x13, 0x33, 0x01, 0x03, 0x33, 0x13, 0x23, 0x05, // ..%.'..'.3..3.#. + 0x26, 0x23, 0x22, 0x06, 0x07, 0x06, 0x17, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x23, 0x22, 0x2f, 0x01, // &#".........#"/. + 0x07, 0x16, 0x33, 0x16, 0x36, 0x37, 0x34, 0x27, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x33, 0x36, 0x1f, // ..3.674'..54636. + 0x01, 0x25, 0x23, 0x22, 0x07, 0x03, 0x33, 0x37, 0x33, 0x16, 0x17, 0x33, 0x13, 0x11, 0x14, 0x06, // .%#"..373..3.... + 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x07, 0xb7, 0x8a, 0x0e, // #!"&5.463!2..... + 0x34, 0x03, 0x04, 0x0c, 0x03, 0x0c, 0xfa, 0x82, 0x3a, 0x0b, 0x40, 0xfe, 0xf4, 0x02, 0x01, 0x37, // 4.......:.@....7 + 0x01, 0x0f, 0xa2, 0x11, 0x1a, 0x76, 0x48, 0x87, 0xaf, 0x01, 0x05, 0x25, 0xa6, 0x68, 0xa6, 0x02, // .....vH....%.h.. + 0x98, 0x45, 0x50, 0x7b, 0x9c, 0x01, 0x01, 0x92, 0x30, 0x26, 0x3c, 0x27, 0x56, 0x46, 0x16, 0x17, // .EP{....0&<'VF.. + 0x4a, 0x6f, 0x82, 0x9d, 0x02, 0x8c, 0x31, 0x2c, 0x31, 0x2e, 0x46, 0x36, 0x0f, 0x01, 0xc0, 0x80, // Jo....1,1.F6.... + 0x41, 0x16, 0xf6, 0xae, 0x23, 0xd4, 0x05, 0x0f, 0x9a, 0x80, 0x4c, 0x34, 0xf8, 0x00, 0x34, 0x4c, // A...#.....L4..4L + 0x4c, 0x34, 0x08, 0x00, 0x34, 0x4c, 0x02, 0x22, 0x25, 0x8e, 0x09, 0x0a, 0x20, 0x0a, 0x37, 0x78, // L4..4L."%... .7x + 0x01, 0x27, 0x36, 0x0d, 0x4f, 0x5c, 0xfe, 0x4a, 0x59, 0x46, 0x77, 0x1d, 0xfe, 0x02, 0x02, 0x81, // .'6.O..JYFw..... + 0xfd, 0x7e, 0x02, 0x82, 0x10, 0x1b, 0x76, 0x5e, 0x66, 0x48, 0x17, 0x24, 0x15, 0x1e, 0x20, 0x21, // .~....v^fH.$.. ! + 0x0b, 0x90, 0x22, 0x01, 0x78, 0x64, 0x6a, 0x44, 0x19, 0x22, 0x15, 0x16, 0x21, 0x01, 0x19, 0x08, // ..".xdjD."..!... + 0x9b, 0x36, 0xfd, 0xb4, 0x60, 0x16, 0x4a, 0x03, 0xc2, 0xfb, 0x00, 0x34, 0x4c, 0x4c, 0x34, 0x05, // .6..`.J....4LL4. + 0x00, 0x34, 0x4c, 0x4c, 0x00, 0x18, 0x00, 0x00, 0xff, 0x80, 0x09, 0x00, 0x05, 0x80, 0x00, 0x11, // .4LL............ + 0x00, 0x19, 0x00, 0x2b, 0x00, 0x33, 0x00, 0x40, 0x00, 0x47, 0x00, 0x58, 0x00, 0x63, 0x00, 0x67, // ...+.3.@.G.X.c.g + 0x00, 0x71, 0x00, 0x7a, 0x00, 0x9c, 0x00, 0xb8, 0x00, 0xc7, 0x00, 0xe5, 0x00, 0xf9, 0x01, 0x0b, // .q.z............ + 0x01, 0x19, 0x01, 0x2d, 0x01, 0x3c, 0x01, 0x4a, 0x01, 0x58, 0x01, 0x7b, 0x01, 0x8b, 0x00, 0x00, // ...-.<.J.X.{.... + 0x01, 0x26, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x37, 0x26, 0x02, 0x12, // .&#"......327&.. + 0x37, 0x06, 0x02, 0x12, 0x17, 0x36, 0x12, 0x02, 0x27, 0x16, 0x12, 0x02, 0x07, 0x16, 0x33, 0x32, // 7....6..'.....32 + 0x3e, 0x02, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x01, 0x33, 0x35, 0x23, 0x15, 0x33, 0x15, 0x3b, // >.54..#".35#.3.; + 0x02, 0x35, 0x23, 0x07, 0x27, 0x23, 0x15, 0x33, 0x35, 0x17, 0x33, 0x37, 0x03, 0x15, 0x2b, 0x01, // .5#.'#.35.37..+. + 0x35, 0x3b, 0x01, 0x15, 0x33, 0x27, 0x32, 0x33, 0x37, 0x36, 0x34, 0x2f, 0x01, 0x22, 0x2b, 0x01, // 5;..3'23764/."+. + 0x15, 0x33, 0x35, 0x33, 0x24, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x24, // .353$4632....#"$ + 0x32, 0x17, 0x23, 0x04, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x36, 0x34, 0x36, // 2.#.462....#"646 + 0x32, 0x16, 0x15, 0x14, 0x06, 0x22, 0x17, 0x22, 0x27, 0x22, 0x26, 0x35, 0x26, 0x35, 0x34, 0x37, // 2...."."'"&5&547 + 0x34, 0x37, 0x36, 0x31, 0x32, 0x35, 0x36, 0x33, 0x32, 0x17, 0x16, 0x31, 0x17, 0x15, 0x16, 0x15, // 476125632..1.... + 0x07, 0x1c, 0x01, 0x23, 0x07, 0x06, 0x23, 0x06, 0x25, 0x33, 0x35, 0x34, 0x26, 0x27, 0x22, 0x07, // ...#..#.%354&'". + 0x26, 0x23, 0x22, 0x07, 0x35, 0x23, 0x15, 0x33, 0x35, 0x34, 0x33, 0x32, 0x1d, 0x01, 0x33, 0x35, // &#".5#.35432..35 + 0x34, 0x33, 0x32, 0x15, 0x17, 0x33, 0x3d, 0x01, 0x23, 0x15, 0x26, 0x23, 0x22, 0x06, 0x14, 0x16, // 432..3=.#.&#"... + 0x33, 0x32, 0x3f, 0x01, 0x34, 0x2f, 0x01, 0x26, 0x35, 0x34, 0x33, 0x32, 0x17, 0x37, 0x26, 0x23, // 32?.4/.&5432.7&# + 0x22, 0x06, 0x15, 0x14, 0x1f, 0x01, 0x16, 0x15, 0x14, 0x23, 0x22, 0x27, 0x07, 0x16, 0x33, 0x32, // "........#"'..32 + 0x36, 0x17, 0x27, 0x06, 0x23, 0x22, 0x3d, 0x01, 0x33, 0x35, 0x23, 0x35, 0x23, 0x15, 0x23, 0x15, // 6.'.#"=.35#5#.#. + 0x33, 0x15, 0x14, 0x33, 0x32, 0x37, 0x22, 0x06, 0x15, 0x14, 0x16, 0x33, 0x32, 0x37, 0x27, 0x06, // 3..327"....327'. + 0x23, 0x22, 0x27, 0x33, 0x35, 0x34, 0x26, 0x33, 0x22, 0x07, 0x35, 0x23, 0x15, 0x33, 0x35, 0x34, // #"'354&3".5#.354 + 0x33, 0x32, 0x17, 0x37, 0x26, 0x16, 0x14, 0x16, 0x33, 0x32, 0x37, 0x27, 0x06, 0x27, 0x22, 0x26, // 32.7&...327'.'"& + 0x34, 0x36, 0x33, 0x32, 0x17, 0x37, 0x26, 0x23, 0x22, 0x17, 0x33, 0x3d, 0x01, 0x23, 0x15, 0x26, // 4632.7&#".3=.#.& + 0x23, 0x22, 0x06, 0x14, 0x16, 0x33, 0x32, 0x3f, 0x01, 0x22, 0x07, 0x35, 0x23, 0x15, 0x33, 0x35, // #"...32?.".5#.35 + 0x34, 0x33, 0x32, 0x17, 0x37, 0x26, 0x17, 0x33, 0x3d, 0x01, 0x23, 0x15, 0x26, 0x22, 0x06, 0x14, // 432.7&.3=.#.&".. + 0x16, 0x33, 0x32, 0x3f, 0x01, 0x07, 0x22, 0x23, 0x06, 0x07, 0x06, 0x15, 0x06, 0x15, 0x14, 0x17, // .32?.."#........ + 0x14, 0x17, 0x1e, 0x01, 0x33, 0x32, 0x37, 0x34, 0x3f, 0x01, 0x36, 0x37, 0x36, 0x35, 0x34, 0x27, // ....3274?.67654' + 0x26, 0x27, 0x34, 0x2f, 0x01, 0x22, 0x26, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, // &'4/."&....#!"&5 + 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x04, 0x5f, 0x80, 0x99, 0x67, 0xbd, 0x88, 0x51, 0x51, // .463!2.._..g..QQ + 0x88, 0xbc, 0x68, 0x99, 0x80, 0x83, 0x5e, 0x5f, 0xa3, 0x7e, 0x5c, 0x5b, 0x7f, 0x7f, 0x5b, 0x5c, // ..h...^_.~.[..[. + 0x5d, 0x82, 0x5f, 0x5e, 0x83, 0x80, 0x99, 0x68, 0xbc, 0x88, 0x51, 0x51, 0x88, 0xbd, 0x67, 0x99, // ]._^...h..QQ..g. + 0x02, 0x65, 0x07, 0x11, 0x07, 0x03, 0x1d, 0x04, 0x05, 0x06, 0x06, 0x05, 0x03, 0x06, 0x04, 0x05, // .e.............. + 0x08, 0x02, 0x03, 0x03, 0x02, 0x03, 0x04, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x06, // ................ + 0x03, 0x01, 0xfb, 0x16, 0x16, 0x13, 0x12, 0x16, 0x16, 0x12, 0x13, 0x01, 0xa5, 0x3c, 0x05, 0x46, // .............<.F + 0x01, 0x87, 0x16, 0x24, 0x17, 0x16, 0x13, 0x12, 0xfa, 0x17, 0x24, 0x17, 0x17, 0x24, 0x87, 0x02, // ...$......$..$.. + 0x02, 0x01, 0x04, 0x01, 0x01, 0x02, 0x01, 0x02, 0x02, 0x02, 0x03, 0x01, 0x04, 0x02, 0x01, 0x01, // ................ + 0x01, 0x01, 0x02, 0x02, 0x01, 0xfa, 0xbc, 0x1e, 0x1d, 0x19, 0x20, 0x0f, 0x0e, 0x1f, 0x18, 0x0f, // .......... ..... + 0x1e, 0x1e, 0x21, 0x1e, 0x1d, 0x21, 0x1e, 0xa6, 0x1d, 0x1d, 0x11, 0x1a, 0x1d, 0x26, 0x26, 0x1d, // ..!..!.......&&. + 0x1c, 0x0f, 0xb2, 0x2f, 0x0e, 0x17, 0x19, 0x17, 0x14, 0x0c, 0x16, 0x21, 0x1a, 0x1e, 0x2f, 0x0d, // .../.......!../. + 0x18, 0x1f, 0x19, 0x14, 0x0d, 0x19, 0x21, 0x1d, 0x21, 0x82, 0x08, 0x0d, 0x0d, 0x13, 0x30, 0x30, // ......!.!.....00 + 0x1e, 0x1c, 0x1c, 0x2f, 0x15, 0x65, 0x1d, 0x26, 0x27, 0x1e, 0x21, 0x16, 0x0e, 0x12, 0x15, 0x22, // .../.e.&'.!...." + 0x07, 0x65, 0x24, 0x83, 0x17, 0x0c, 0x1e, 0x1e, 0x1d, 0x0a, 0x08, 0x09, 0x09, 0x12, 0x27, 0x21, // .e$...........'! + 0x1d, 0x13, 0x0e, 0x12, 0x11, 0x12, 0x17, 0x17, 0x12, 0x13, 0x10, 0x0e, 0x14, 0x1c, 0x21, 0xce, // ..............!. + 0x1e, 0x1e, 0x0f, 0x1b, 0x1d, 0x27, 0x27, 0x1d, 0x1c, 0x0e, 0x85, 0x17, 0x0c, 0x1d, 0x1d, 0x1d, // .....''......... + 0x0a, 0x08, 0x09, 0x08, 0x7f, 0x1d, 0x1d, 0x0f, 0x38, 0x27, 0x27, 0x1c, 0x1d, 0x0e, 0x4e, 0x02, // ........8''...N. + 0x02, 0x01, 0x02, 0x02, 0x03, 0x01, 0x01, 0x03, 0x02, 0x04, 0x03, 0x04, 0x02, 0x02, 0x02, 0x01, // ................ + 0x02, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x01, 0x04, 0x01, 0x67, 0x4c, 0x34, 0xf8, 0x00, 0x34, // ..........gL4..4 + 0x4c, 0x4c, 0x34, 0x08, 0x00, 0x34, 0x4c, 0x04, 0xab, 0x55, 0x51, 0x88, 0xbc, 0x67, 0x68, 0xbc, // LL4..4L..UQ..gh. + 0x88, 0x51, 0x55, 0x6b, 0x01, 0x3d, 0x01, 0x3c, 0x53, 0x63, 0xfe, 0xd3, 0xfe, 0xd4, 0x63, 0x63, // .QUk.=.(.."....... + 0x0e, 0x18, 0x14, 0x21, 0x06, 0x02, 0x04, 0x0a, 0x11, 0x0e, 0x17, 0x11, 0x18, 0x0e, 0x19, 0x07, // ...!............ + 0x16, 0x3d, 0x1b, 0x29, 0x29, 0x1b, 0x3d, 0x32, 0x8e, 0x28, 0x1f, 0x20, 0x27, 0x13, 0x16, 0x0f, // .=.)).=2.(. '... + 0x21, 0x0c, 0x20, 0x27, 0x14, 0x10, 0x87, 0x4c, 0x23, 0x04, 0x1c, 0x04, 0x28, 0x3e, 0x28, 0x10, // !. '...L#...(>(. + 0x18, 0x0d, 0x01, 0x18, 0x26, 0x18, 0x0c, 0x18, 0x10, 0x8b, 0x44, 0x43, 0x10, 0x14, 0x28, 0x3e, // ....&.....DC..(> + 0x28, 0x14, 0x7a, 0x14, 0x10, 0x87, 0x4c, 0x23, 0x04, 0x1c, 0x04, 0x8b, 0x44, 0x7a, 0x47, 0x14, // (.z...L#....DzG. + 0x29, 0x3c, 0x29, 0x14, 0x03, 0x01, 0x01, 0x02, 0x01, 0x03, 0x02, 0x04, 0x03, 0x02, 0x02, 0x02, // )<)............. + 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x02, 0x03, 0x04, 0x02, 0x01, 0x03, 0x01, 0x01, // ................ + 0x01, 0x01, 0x04, 0xe5, 0xfb, 0x00, 0x34, 0x4c, 0x4c, 0x34, 0x05, 0x00, 0x34, 0x4c, 0x4c, 0x00, // ......4LL4..4LL. + 0x00, 0x0c, 0x00, 0x00, 0xff, 0x80, 0x09, 0x00, 0x05, 0x80, 0x00, 0x0a, 0x00, 0x11, 0x00, 0x1b, // ................ + 0x00, 0x1f, 0x00, 0x42, 0x00, 0x57, 0x00, 0x62, 0x00, 0x6a, 0x00, 0x71, 0x00, 0x7d, 0x00, 0x8a, // ...B.W.b.j.q.}.. + 0x00, 0x9a, 0x00, 0x00, 0x01, 0x14, 0x07, 0x06, 0x2b, 0x01, 0x35, 0x33, 0x32, 0x17, 0x16, 0x25, // ........+.532..% + 0x14, 0x2b, 0x01, 0x35, 0x33, 0x32, 0x05, 0x34, 0x26, 0x2b, 0x01, 0x11, 0x33, 0x32, 0x37, 0x36, // .+.532.4&+..3276 + 0x17, 0x33, 0x11, 0x23, 0x05, 0x34, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, // .3.#.4&'..54632. + 0x37, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, 0x17, 0x16, 0x17, 0x16, 0x15, 0x14, 0x06, 0x23, // 7&#"...........# + 0x22, 0x27, 0x07, 0x16, 0x33, 0x32, 0x36, 0x05, 0x35, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, // "'..326.5.#"&546 + 0x33, 0x32, 0x17, 0x35, 0x26, 0x23, 0x22, 0x06, 0x14, 0x16, 0x33, 0x32, 0x01, 0x11, 0x0e, 0x01, // 32.5&#"...32.... + 0x0c, 0x02, 0x05, 0x21, 0x32, 0x36, 0x00, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x25, 0x13, // ...!26.4&"...2%. + 0x23, 0x07, 0x27, 0x23, 0x13, 0x37, 0x33, 0x35, 0x23, 0x35, 0x33, 0x35, 0x23, 0x35, 0x33, 0x35, // #.'#.735#535#535 + 0x23, 0x01, 0x33, 0x27, 0x36, 0x35, 0x34, 0x26, 0x2b, 0x01, 0x11, 0x33, 0x35, 0x33, 0x01, 0x11, // #.3'654&+..353.. + 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x39, // ..#!"&5.463!2..9 + 0x24, 0x1d, 0x3c, 0x11, 0x11, 0x3d, 0x1c, 0x24, 0x06, 0xf0, 0x40, 0x13, 0x14, 0x3f, 0xf9, 0x53, // $.<..=.$..@..?.S + 0x64, 0x4f, 0x5f, 0x5f, 0x4a, 0x2d, 0x3c, 0x1e, 0x41, 0x41, 0x01, 0x40, 0x29, 0x37, 0x1d, 0x15, // dO__J-<.AA.@)7.. + 0x1b, 0x15, 0x1d, 0x18, 0x22, 0x29, 0x39, 0x2c, 0x3c, 0x24, 0x2e, 0x25, 0x08, 0x13, 0x1c, 0x16, // ....")9,<$.%.... + 0x30, 0x17, 0x2a, 0x2c, 0x47, 0x33, 0x40, 0x01, 0x16, 0x25, 0x29, 0x31, 0x3f, 0x3f, 0x2e, 0x2b, // 0.*,G3@..%)1??.+ + 0x26, 0x28, 0x28, 0x4a, 0x67, 0x66, 0x4a, 0x2a, 0x04, 0xf7, 0x41, 0x9f, 0xfe, 0xc4, 0xfe, 0xa9, // &((JgfJ*..A..... + 0xfe, 0x14, 0xfe, 0xfe, 0x06, 0x21, 0x1a, 0x26, 0xfc, 0xad, 0x6a, 0x96, 0x6a, 0x6a, 0x96, 0x01, // .....!.&..j.jj.. + 0x02, 0x90, 0x47, 0x5a, 0x59, 0x47, 0x8e, 0xd0, 0xb8, 0x77, 0x73, 0x73, 0x77, 0xb8, 0x01, 0x87, // ..GZYG...wssw... + 0x50, 0x69, 0x4c, 0x3e, 0x38, 0x61, 0x41, 0x09, 0x01, 0x21, 0x4d, 0x37, 0xf8, 0x08, 0x37, 0x4d, // PiL>8aA..!M7..7M + 0x4d, 0x37, 0x07, 0xf8, 0x37, 0x4d, 0x02, 0xf7, 0x33, 0x21, 0x1a, 0xdc, 0x1b, 0x1f, 0x0d, 0x34, // M7..7M..3!.....4 + 0x65, 0x72, 0x4a, 0x5d, 0xfe, 0xb3, 0x26, 0x33, 0x59, 0x01, 0x4d, 0xe8, 0x28, 0x2c, 0x14, 0x0a, // erJ]..&3Y.M.(,.. + 0x12, 0x0e, 0x10, 0x15, 0x1b, 0x2c, 0x25, 0x37, 0x28, 0x23, 0x29, 0x10, 0x0d, 0x06, 0x0c, 0x16, // .....,%7(#)..... + 0x14, 0x1b, 0x2c, 0x28, 0x40, 0x3d, 0x29, 0x4d, 0x25, 0x41, 0x32, 0x30, 0x43, 0x26, 0x4d, 0x14, // ..,(@=)M%A20C&M. + 0x65, 0x92, 0x65, 0xfd, 0xb7, 0x02, 0x0f, 0x28, 0x58, 0x92, 0x81, 0x8c, 0x30, 0x26, 0x02, 0xc4, // e.e....(X...0&.. + 0x96, 0x6a, 0x6a, 0x96, 0x6a, 0x08, 0x01, 0x56, 0xe0, 0xe0, 0xfe, 0xaa, 0x09, 0x38, 0x5a, 0x38, // .jj.j..V.....8Z8 + 0x4a, 0x39, 0xfe, 0xb3, 0x8c, 0x10, 0x4e, 0x2f, 0x34, 0xfe, 0xb3, 0x85, 0x02, 0x24, 0xfb, 0x0c, // J9....N/4....$.. + 0x38, 0x4e, 0x4e, 0x38, 0x04, 0xf4, 0x38, 0x4e, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, // 8NN8..8NN....... + 0xff, 0x80, 0x09, 0x00, 0x05, 0x80, 0x00, 0x02, 0x00, 0x0b, 0x00, 0x0e, 0x00, 0x15, 0x00, 0x1c, // ................ + 0x00, 0x23, 0x00, 0x26, 0x00, 0x3a, 0x00, 0x4f, 0x00, 0x5b, 0x00, 0xce, 0x00, 0xe2, 0x00, 0xf9, // .#.&.:.O.[...... + 0x01, 0x05, 0x01, 0x09, 0x01, 0x24, 0x01, 0x3f, 0x01, 0x62, 0x00, 0x00, 0x13, 0x33, 0x27, 0x01, // .....$.?.b...3'. + 0x37, 0x27, 0x23, 0x15, 0x33, 0x15, 0x23, 0x15, 0x25, 0x17, 0x35, 0x17, 0x34, 0x2b, 0x01, 0x15, // 7'#.3.#.%.5.4+.. + 0x33, 0x32, 0x25, 0x34, 0x2b, 0x01, 0x15, 0x33, 0x32, 0x01, 0x34, 0x2b, 0x01, 0x15, 0x33, 0x32, // 32%4+..32.4+..32 + 0x05, 0x33, 0x27, 0x25, 0x11, 0x23, 0x35, 0x07, 0x23, 0x27, 0x15, 0x23, 0x27, 0x23, 0x07, 0x23, // .3'%.#5.#'.#'#.# + 0x13, 0x33, 0x13, 0x11, 0x33, 0x17, 0x37, 0x01, 0x14, 0x0e, 0x04, 0x22, 0x26, 0x23, 0x15, 0x23, // .3..3.7...."&#.# + 0x27, 0x07, 0x21, 0x11, 0x21, 0x17, 0x37, 0x33, 0x32, 0x25, 0x15, 0x23, 0x11, 0x33, 0x15, 0x23, // '.!.!.732%.#.3.# + 0x15, 0x33, 0x15, 0x23, 0x15, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x33, // .3.#.....#!"&5.3 + 0x37, 0x33, 0x17, 0x33, 0x35, 0x17, 0x33, 0x37, 0x15, 0x21, 0x35, 0x37, 0x32, 0x1d, 0x01, 0x21, // 73.35.37.!572..! + 0x35, 0x1e, 0x02, 0x36, 0x33, 0x37, 0x33, 0x17, 0x33, 0x35, 0x17, 0x33, 0x11, 0x23, 0x15, 0x27, // 5..6373.35.3.#.' + 0x23, 0x15, 0x27, 0x23, 0x22, 0x07, 0x35, 0x23, 0x15, 0x26, 0x23, 0x21, 0x07, 0x27, 0x23, 0x15, // #.'#".5#.&#!.'#. + 0x27, 0x23, 0x07, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x15, 0x11, 0x23, 0x22, 0x07, 0x35, // '#..463!2...#".5 + 0x23, 0x22, 0x07, 0x35, 0x21, 0x15, 0x26, 0x2b, 0x01, 0x15, 0x26, 0x2b, 0x01, 0x07, 0x27, 0x21, // #".5!.&+..&+..'! + 0x11, 0x21, 0x37, 0x17, 0x33, 0x35, 0x33, 0x32, 0x37, 0x15, 0x33, 0x35, 0x33, 0x32, 0x16, 0x1d, // .!7.35327.3532.. + 0x01, 0x21, 0x32, 0x37, 0x15, 0x33, 0x32, 0x25, 0x14, 0x06, 0x07, 0x1e, 0x01, 0x1d, 0x01, 0x23, // .!27.32%.......# + 0x35, 0x34, 0x26, 0x2b, 0x01, 0x15, 0x23, 0x11, 0x33, 0x32, 0x16, 0x01, 0x14, 0x06, 0x07, 0x1e, // 54&+..#.32...... + 0x01, 0x1d, 0x01, 0x23, 0x34, 0x36, 0x2e, 0x03, 0x2b, 0x01, 0x15, 0x23, 0x11, 0x17, 0x32, 0x16, // ...#46..+..#..2. + 0x01, 0x15, 0x23, 0x11, 0x33, 0x15, 0x23, 0x15, 0x33, 0x15, 0x23, 0x15, 0x01, 0x11, 0x23, 0x11, // ..#.3.#.3.#...#. + 0x01, 0x14, 0x2b, 0x01, 0x35, 0x33, 0x32, 0x35, 0x34, 0x26, 0x22, 0x2e, 0x01, 0x35, 0x34, 0x36, // ..+.53254&"..546 + 0x3b, 0x01, 0x15, 0x23, 0x22, 0x15, 0x14, 0x16, 0x36, 0x1e, 0x01, 0x37, 0x15, 0x06, 0x2b, 0x01, // ;..#"...6..7..+. + 0x35, 0x33, 0x32, 0x35, 0x34, 0x26, 0x06, 0x2e, 0x02, 0x35, 0x34, 0x36, 0x3b, 0x01, 0x15, 0x23, // 53254&...546;..# + 0x22, 0x15, 0x14, 0x1e, 0x01, 0x03, 0x11, 0x23, 0x27, 0x15, 0x23, 0x27, 0x23, 0x07, 0x23, 0x22, // "......#'.#'#.#" + 0x35, 0x34, 0x3b, 0x01, 0x15, 0x22, 0x26, 0x0e, 0x04, 0x15, 0x14, 0x16, 0x3b, 0x01, 0x37, 0x33, // 54;.."&.....;.73 + 0x13, 0x11, 0x33, 0x17, 0x35, 0x77, 0x59, 0x2d, 0x02, 0x41, 0x4a, 0x46, 0xa3, 0x8e, 0x8e, 0x01, // ..3.5wY-.AJF.... + 0x3d, 0x63, 0xbd, 0x28, 0x54, 0x53, 0x29, 0x01, 0x21, 0x2a, 0x52, 0x51, 0x2b, 0xfe, 0xea, 0x2a, // =c.(TS).!*RQ+..* + 0x52, 0x51, 0x2b, 0x01, 0xcb, 0x59, 0x2c, 0xfc, 0x16, 0x42, 0x5e, 0x39, 0x5e, 0x84, 0x19, 0x87, // RQ+..Y,..B^9^... + 0x19, 0x46, 0x74, 0x60, 0x6e, 0x6a, 0x55, 0x4d, 0x02, 0x98, 0x0b, 0x11, 0x1c, 0x18, 0x27, 0x18, // .Ft`njUM......'. + 0x29, 0x09, 0x7e, 0x50, 0x53, 0xff, 0x00, 0x01, 0x04, 0x50, 0x52, 0xcf, 0x6d, 0xfe, 0xdd, 0xd9, // ).~PS....PR.m... + 0xd9, 0x98, 0x94, 0x94, 0x05, 0xd4, 0x4d, 0x37, 0xf8, 0x08, 0x37, 0x4d, 0x6f, 0x19, 0x37, 0x19, // ......M7..7Mo.7. + 0xda, 0x13, 0x71, 0x14, 0x02, 0x1d, 0x0a, 0x0a, 0x01, 0x17, 0x17, 0x40, 0x29, 0x55, 0x09, 0x19, // ..q........@)U.. + 0x38, 0x19, 0xe3, 0x22, 0xb6, 0xb4, 0x19, 0xb9, 0x17, 0xf9, 0x45, 0x28, 0xac, 0x18, 0x31, 0xfd, // 8.."......E(..1. + 0x8c, 0x2b, 0x2b, 0xc6, 0x16, 0xa9, 0x4e, 0x4d, 0x37, 0x07, 0xf8, 0x37, 0x4d, 0x78, 0x33, 0x1e, // .++...NM7..7Mx3. + 0xb1, 0x37, 0x17, 0xfe, 0xc4, 0x1f, 0x38, 0xd1, 0x17, 0x44, 0xea, 0x36, 0x32, 0xfe, 0xa3, 0x01, // .7....8..D.62... + 0x57, 0x37, 0x34, 0xd3, 0x15, 0x3b, 0x1f, 0xae, 0x08, 0x08, 0x04, 0x02, 0x11, 0x39, 0x1f, 0xa8, // W74..;.......9.. + 0x3c, 0xfd, 0x2d, 0x18, 0x16, 0x19, 0x12, 0x41, 0x18, 0x22, 0x45, 0x41, 0x9a, 0x30, 0x3a, 0xfe, // <.-....A."EA.0:. + 0xeb, 0x19, 0x15, 0x1a, 0x11, 0x41, 0x01, 0x01, 0x05, 0x0c, 0x17, 0x12, 0x46, 0x40, 0x99, 0x31, // .....A......F@.1 + 0x3a, 0x02, 0x11, 0xd8, 0xd8, 0x97, 0x94, 0x94, 0xfe, 0xed, 0x42, 0x02, 0xf7, 0x66, 0x7e, 0x7e, // :.........B..f~~ + 0x22, 0x22, 0x31, 0x32, 0x22, 0x34, 0x28, 0x82, 0x77, 0x24, 0x23, 0x31, 0x31, 0x23, 0xef, 0x18, // ""12"4(.w$#11#.. + 0x40, 0x7d, 0x7d, 0x21, 0x19, 0x25, 0x2b, 0x25, 0x19, 0x35, 0x28, 0x81, 0x76, 0x24, 0x3a, 0x4f, // @}}!.%+%.5(.v$:O + 0x94, 0x5c, 0x7a, 0x84, 0x1a, 0x86, 0x19, 0x4b, 0x81, 0x85, 0x3f, 0x07, 0x2a, 0x0f, 0x1f, 0x0c, // ..z....K..?.*... + 0x11, 0x06, 0x1b, 0x24, 0x1d, 0x5c, 0x61, 0x6d, 0x63, 0x72, 0x03, 0x56, 0x6c, 0xfd, 0x86, 0x4f, // ...$..amcr.Vl..O + 0x4f, 0x31, 0x37, 0x36, 0x4e, 0x6e, 0xd9, 0x3c, 0x21, 0x45, 0x28, 0x1d, 0x3d, 0x01, 0xf2, 0x1d, // O176Nn..2.326..6&+.". + 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x37, 0x06, 0x15, 0x14, 0x3b, 0x01, // &#"....3267...;. + 0x32, 0x00, 0x34, 0x26, 0x2b, 0x01, 0x22, 0x0f, 0x01, 0x27, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x15, // 2.4&+."..'&+.".. + 0x14, 0x1e, 0x01, 0x17, 0x06, 0x15, 0x14, 0x3b, 0x01, 0x32, 0x37, 0x01, 0x25, 0x34, 0x26, 0x2b, // .......;.27.%4&+ + 0x01, 0x22, 0x07, 0x03, 0x06, 0x16, 0x3b, 0x01, 0x32, 0x3f, 0x01, 0x3e, 0x02, 0x32, 0x16, 0x33, // ."....;.2?.>.2.3 + 0x32, 0x36, 0x05, 0x13, 0x36, 0x26, 0x2b, 0x01, 0x22, 0x07, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, // 26..6&+.".&#"... + 0x16, 0x33, 0x32, 0x36, 0x37, 0x14, 0x06, 0x15, 0x14, 0x3b, 0x01, 0x32, 0x13, 0x35, 0x34, 0x2b, // .3267....;.2.54+ + 0x01, 0x22, 0x07, 0x03, 0x07, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x37, 0x01, 0x0e, 0x01, 0x23, 0x07, // .".....;.27...#. + 0x37, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, // 76;.2.....#!"&5. + 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x02, 0xe9, 0x33, 0x25, 0x1d, 0x23, 0x32, 0x25, 0x1c, 0x25, // 463!2...3%.#2%.% + 0x03, 0x11, 0x2c, 0x2c, 0x20, 0x11, 0x02, 0x0b, 0x12, 0x16, 0x1a, 0x18, 0x01, 0x5f, 0x33, 0x24, // ..,, ........_3$ + 0x1d, 0x24, 0x32, 0x25, 0x1c, 0x25, 0xfa, 0xa8, 0x4d, 0x3e, 0xa0, 0x13, 0x02, 0x41, 0x01, 0x08, // .$2%.%..M>...A.. + 0x06, 0x4c, 0x14, 0x02, 0x12, 0x01, 0x0c, 0x12, 0x10, 0x16, 0x03, 0x56, 0x62, 0x01, 0x35, 0x29, // .L.........Vb.5) + 0x01, 0x08, 0x06, 0x4c, 0x0e, 0x03, 0x1b, 0x44, 0x48, 0x65, 0x45, 0x3a, 0x1c, 0x3c, 0x12, 0x04, // ...L...DHeE:.<.. + 0x0d, 0x45, 0x13, 0x01, 0xc2, 0x08, 0x05, 0x4d, 0x0b, 0x07, 0x6a, 0x2c, 0x05, 0x11, 0x4b, 0x05, // .E.....M..j,..K. + 0x08, 0x27, 0x2d, 0x01, 0x52, 0x0d, 0x4d, 0x0b, 0x07, 0x00, 0xff, 0x01, 0x7e, 0x4d, 0x3e, 0x9f, // .'-.R.M.....~M>. + 0x14, 0x02, 0x41, 0x01, 0x08, 0x06, 0x52, 0x0c, 0x04, 0x12, 0x01, 0x0c, 0x12, 0x10, 0x16, 0x03, // ..A...R......... + 0x56, 0x62, 0x01, 0x35, 0x29, 0x01, 0x08, 0x06, 0x4c, 0x0e, 0x03, 0x1a, 0x45, 0x48, 0x65, 0x45, // Vb.5)...L...EHeE + 0x3a, 0x1d, 0x3c, 0x11, 0x04, 0x0d, 0x45, 0x13, 0xdd, 0x0d, 0x4a, 0x0b, 0x02, 0x41, 0x01, 0x08, // :.<...E...J..A.. + 0x06, 0x42, 0x13, 0x02, 0xf9, 0x49, 0x05, 0x2a, 0x27, 0x21, 0x11, 0x02, 0x0b, 0x13, 0x28, 0x24, // .B...I.*'!....($ + 0x07, 0x72, 0x4c, 0x34, 0xf8, 0x00, 0x34, 0x4c, 0x4c, 0x34, 0x08, 0x00, 0x34, 0x4c, 0x02, 0x76, // .rL4..4LL4..4L.v + 0x25, 0x31, 0x20, 0x1c, 0x25, 0x33, 0x21, 0x78, 0x2a, 0x1e, 0x01, 0x6b, 0x0b, 0x04, 0x15, 0xa9, // %1 .%3!x*..k.... + 0x24, 0x32, 0x20, 0x1c, 0x25, 0x33, 0x21, 0x8e, 0x3b, 0x35, 0x13, 0xfe, 0x68, 0x06, 0x0a, 0x13, // $2 .%3!.;5..h... + 0x6e, 0x08, 0x0a, 0x03, 0x02, 0x61, 0xe2, 0x01, 0x05, 0x06, 0x0a, 0x21, 0x28, 0x6c, 0x49, 0x3b, // n....a.....!(lI; + 0x46, 0x18, 0x14, 0x0c, 0x09, 0x10, 0x01, 0x15, 0x0a, 0x09, 0x0a, 0x9c, 0x96, 0x10, 0x09, 0x05, // F............... + 0x02, 0x72, 0x84, 0x04, 0x70, 0x08, 0x0d, 0x0a, 0x01, 0x70, 0x38, 0x3b, 0x35, 0x13, 0xfe, 0x68, // .r..p....p8;5..h + 0x06, 0x0a, 0x0d, 0x74, 0x08, 0x0a, 0x03, 0x02, 0x61, 0xe2, 0x01, 0x05, 0x06, 0x0a, 0x21, 0x28, // ...t....a.....!( + 0x6c, 0x49, 0x3b, 0x46, 0x18, 0x14, 0x01, 0x10, 0x04, 0x10, 0x01, 0xac, 0x01, 0x0e, 0x0b, 0xfe, // lI;F............ + 0x60, 0x02, 0x05, 0x09, 0x13, 0x01, 0x13, 0x23, 0x16, 0x01, 0x6b, 0x0b, 0x17, 0x01, 0xdf, 0xfb, // `......#..k..... + 0x00, 0x34, 0x4c, 0x4c, 0x34, 0x05, 0x00, 0x34, 0x4c, 0x4c, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, // .4LL4..4LL...... + 0xff, 0x80, 0x09, 0x00, 0x05, 0x80, 0x00, 0x0a, 0x00, 0x0f, 0x00, 0x32, 0x00, 0x48, 0x00, 0x57, // ...........2.H.W + 0x00, 0x5b, 0x00, 0x6c, 0x00, 0x74, 0x00, 0x8b, 0x00, 0x9b, 0x00, 0x00, 0x01, 0x14, 0x07, 0x06, // .[.l.t.......... + 0x23, 0x22, 0x27, 0x35, 0x36, 0x33, 0x32, 0x05, 0x23, 0x36, 0x33, 0x32, 0x05, 0x34, 0x26, 0x27, // #"'5632.#632.4&' + 0x2e, 0x01, 0x35, 0x34, 0x33, 0x32, 0x17, 0x37, 0x26, 0x23, 0x22, 0x07, 0x06, 0x15, 0x14, 0x16, // ..5432.7&#"..... + 0x17, 0x1e, 0x01, 0x15, 0x14, 0x23, 0x22, 0x26, 0x27, 0x07, 0x16, 0x33, 0x32, 0x37, 0x36, 0x01, // .....#"&'..3276. + 0x37, 0x23, 0x35, 0x0f, 0x03, 0x33, 0x15, 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x35, 0x06, 0x23, // 7#5..3....3275.# + 0x22, 0x3d, 0x01, 0x05, 0x35, 0x26, 0x23, 0x22, 0x06, 0x07, 0x27, 0x23, 0x11, 0x33, 0x11, 0x36, // "=..5&#"..'#.3.6 + 0x33, 0x32, 0x13, 0x33, 0x11, 0x23, 0x05, 0x34, 0x27, 0x26, 0x23, 0x22, 0x07, 0x27, 0x23, 0x11, // 32.3.#.4'&#".'#. + 0x37, 0x35, 0x16, 0x33, 0x32, 0x37, 0x36, 0x00, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x01, // 75.3276.4&"...2. + 0x34, 0x27, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x27, 0x06, 0x23, // 4'&#".....327'.# + 0x22, 0x27, 0x26, 0x27, 0x33, 0x36, 0x13, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, // "'&'36....#!"&5. + 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x06, 0x3d, 0x15, 0x13, 0x21, 0x17, 0x12, 0x1d, 0x1c, 0x39, // 463!2..=..!....9 + 0x01, 0xb6, 0x6e, 0x06, 0x32, 0x33, 0xf9, 0xec, 0x42, 0x44, 0x24, 0x20, 0x26, 0x3a, 0x42, 0x12, // ..n.23..BD$ &:B. + 0x43, 0x52, 0x4d, 0x2e, 0x30, 0x41, 0x43, 0x27, 0x1f, 0x30, 0x1d, 0x52, 0x1f, 0x12, 0x48, 0x60, // CRM.0AC'.0.R..H` + 0x51, 0x30, 0x33, 0x01, 0x27, 0x13, 0x60, 0x81, 0x12, 0x2e, 0x11, 0x3e, 0x2c, 0x26, 0x49, 0x20, // Q03.'.`....>,&I + 0x2f, 0x20, 0x0c, 0x2a, 0x01, 0x89, 0x0f, 0x0d, 0x20, 0x2f, 0x0a, 0x0a, 0x83, 0x96, 0x1a, 0x38, // / .*.... /.....8 + 0x10, 0x2f, 0x96, 0x96, 0x02, 0x6e, 0x2d, 0x28, 0x47, 0x40, 0x35, 0x08, 0x84, 0x96, 0x24, 0x20, // ./...n-(G@5...$ + 0x53, 0x33, 0x3d, 0xfe, 0x2c, 0x2e, 0x42, 0x2e, 0x2e, 0x42, 0x03, 0xb0, 0x30, 0x32, 0x5e, 0x60, // S3=.,.B..B..02^` + 0x6f, 0x3f, 0x37, 0x6a, 0x65, 0x3b, 0x10, 0x39, 0x47, 0x2b, 0x14, 0x17, 0x05, 0xf8, 0x02, 0x80, // o?7je;.9G+...... + 0x4c, 0x34, 0xf8, 0x00, 0x34, 0x4c, 0x4c, 0x34, 0x08, 0x00, 0x34, 0x4c, 0x02, 0x79, 0x45, 0x25, // L4..4LL4..4L.yE% + 0x23, 0x09, 0xe0, 0x1e, 0x56, 0x62, 0xe9, 0x3b, 0x41, 0x19, 0x0d, 0x16, 0x0e, 0x1a, 0x21, 0x70, // #...Vb.;A.....!p + 0x20, 0x26, 0x27, 0x46, 0x3a, 0x41, 0x18, 0x0e, 0x17, 0x10, 0x1f, 0x19, 0x12, 0x71, 0x29, 0x25, // &'F:A.......q)% + 0x29, 0x01, 0x23, 0x6f, 0x87, 0x15, 0x72, 0x08, 0x67, 0xdb, 0x54, 0x24, 0x1e, 0x0b, 0x76, 0x07, // ).#o..r.g.T$..v. + 0x32, 0xc5, 0x19, 0x8b, 0x03, 0x20, 0x1e, 0x38, 0xfe, 0x29, 0x01, 0x32, 0x1f, 0xfe, 0xaf, 0x01, // 2.... .8.).2.... + 0xd7, 0xde, 0x7a, 0x39, 0x34, 0x38, 0x2f, 0xfd, 0x7b, 0x19, 0x97, 0x0b, 0x38, 0x41, 0x01, 0xc4, // ..z948/.{...8A.. + 0x42, 0x2e, 0x2e, 0x42, 0x2f, 0xfe, 0xeb, 0x71, 0x3f, 0x40, 0x84, 0x72, 0x80, 0x3c, 0x37, 0x28, // B..B/..q?@.r.<7( + 0x67, 0x1f, 0x13, 0x13, 0x2f, 0x0e, 0x02, 0xb1, 0xfb, 0x00, 0x34, 0x4c, 0x4c, 0x34, 0x05, 0x00, // g.../.....4LL4.. + 0x34, 0x4c, 0x4c, 0x00, 0x00, 0x03, 0x00, 0x0e, 0xff, 0x00, 0x07, 0xf2, 0x06, 0x00, 0x00, 0x0b, // 4LL............. + 0x00, 0x17, 0x00, 0x3f, 0x00, 0x00, 0x01, 0x12, 0x17, 0x14, 0x06, 0x23, 0x21, 0x14, 0x06, 0x22, // ...?.......#!.." + 0x26, 0x27, 0x05, 0x32, 0x34, 0x23, 0x22, 0x26, 0x35, 0x34, 0x22, 0x15, 0x14, 0x16, 0x01, 0x16, // &'.24#"&54"..... + 0x06, 0x07, 0x01, 0x06, 0x26, 0x2f, 0x01, 0x26, 0x36, 0x3f, 0x01, 0x26, 0x35, 0x3e, 0x04, 0x35, // ....&/.&6?.&5>.5 + 0x34, 0x12, 0x37, 0x26, 0x35, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x07, 0x1e, 0x01, 0x17, 0x01, // 4.7&5462........ + 0x36, 0x16, 0x17, 0x06, 0x16, 0x3d, 0xed, 0x4c, 0x34, 0xfe, 0x40, 0x96, 0xd4, 0x95, 0x01, 0x01, // 6....=.L4.@..... + 0x00, 0x10, 0x10, 0x3b, 0x55, 0x20, 0x67, 0x04, 0x33, 0x08, 0x01, 0x0a, 0xf8, 0xb0, 0x0a, 0x1b, // ...;U g.3....... + 0x08, 0x54, 0x08, 0x01, 0x0a, 0xba, 0x13, 0x32, 0x52, 0x58, 0x3d, 0x27, 0xea, 0xbe, 0x08, 0x38, // .T.....2RX='...8 + 0x50, 0x38, 0x08, 0x7c, 0xbe, 0x35, 0x01, 0xa2, 0x0a, 0x1b, 0x08, 0x02, 0xac, 0xfe, 0x9c, 0xc8, // P8.|.5.......... + 0x34, 0x4c, 0x6a, 0x96, 0x95, 0x6a, 0xaf, 0x20, 0x55, 0x3b, 0x10, 0x10, 0x49, 0x67, 0x06, 0x40, // 4Lj..j. U;..Ig.@ + 0x0a, 0x1b, 0x09, 0xf9, 0xaa, 0x08, 0x02, 0x0a, 0x60, 0x0a, 0x1b, 0x08, 0xa1, 0x20, 0x22, 0x2a, // ........`.... "* + 0x5c, 0x93, 0xaa, 0xf2, 0x8b, 0x98, 0x01, 0x05, 0x1c, 0x13, 0x14, 0x28, 0x38, 0x38, 0x28, 0x14, // ...........(88(. + 0x13, 0x12, 0x81, 0x5d, 0x01, 0x6b, 0x08, 0x02, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x0e, // ...].k.......... + 0xff, 0x00, 0x07, 0xf2, 0x06, 0x00, 0x00, 0x0b, 0x00, 0x16, 0x00, 0x26, 0x00, 0x4e, 0x00, 0x00, // ...........&.N.. + 0x04, 0x34, 0x23, 0x22, 0x26, 0x35, 0x34, 0x22, 0x15, 0x14, 0x16, 0x33, 0x09, 0x01, 0x2e, 0x01, // .4#"&54"...3.... + 0x23, 0x22, 0x0e, 0x02, 0x15, 0x10, 0x01, 0x14, 0x06, 0x23, 0x21, 0x14, 0x06, 0x22, 0x26, 0x27, // #".......#!.."&' + 0x37, 0x21, 0x26, 0x03, 0x37, 0x12, 0x01, 0x17, 0x16, 0x06, 0x07, 0x01, 0x06, 0x26, 0x2f, 0x01, // 7!&.7........&/. + 0x26, 0x36, 0x3f, 0x01, 0x26, 0x35, 0x3e, 0x04, 0x35, 0x34, 0x12, 0x37, 0x26, 0x35, 0x34, 0x36, // &6?.&5>.54.7&546 + 0x32, 0x16, 0x15, 0x14, 0x07, 0x1e, 0x01, 0x17, 0x01, 0x36, 0x16, 0x04, 0x10, 0x10, 0x3b, 0x55, // 2........6....;U + 0x20, 0x67, 0x49, 0xfd, 0xf7, 0x03, 0x6d, 0x2a, 0xb5, 0x85, 0x5d, 0x99, 0x5a, 0x30, 0x04, 0xc0, // gI...m*..].Z0.. + 0x4c, 0x34, 0xfe, 0x40, 0x96, 0xd4, 0x95, 0x01, 0x95, 0x02, 0xf5, 0xa6, 0x3d, 0x6f, 0x3d, 0x01, // L4.@........=o=. + 0x43, 0x54, 0x08, 0x01, 0x0a, 0xf8, 0xb0, 0x0a, 0x1b, 0x08, 0x54, 0x08, 0x01, 0x0a, 0xba, 0x13, // CT........T..... + 0x32, 0x52, 0x58, 0x3d, 0x27, 0xea, 0xbe, 0x08, 0x38, 0x50, 0x38, 0x08, 0x7c, 0xbe, 0x35, 0x01, // 2RX='...8P8.|.5. + 0xa2, 0x0a, 0x1b, 0xb0, 0x20, 0x55, 0x3b, 0x10, 0x10, 0x49, 0x67, 0x01, 0xeb, 0x02, 0xf8, 0x58, // .... U;..Ig....X + 0x75, 0x3f, 0x62, 0x6c, 0x33, 0xfe, 0x80, 0xfe, 0x40, 0x34, 0x4c, 0x6a, 0x96, 0x95, 0x6a, 0x81, // u?bl3...@4Lj..j. + 0xbb, 0x01, 0x10, 0x61, 0xfe, 0x9c, 0x04, 0xa8, 0x60, 0x0a, 0x1b, 0x09, 0xf9, 0xaa, 0x08, 0x02, // ...a....`....... + 0x0a, 0x60, 0x0a, 0x1b, 0x08, 0xa1, 0x20, 0x22, 0x2a, 0x5c, 0x93, 0xaa, 0xf2, 0x8b, 0x98, 0x01, // .`.... "*....... + 0x05, 0x1c, 0x13, 0x14, 0x28, 0x38, 0x38, 0x28, 0x14, 0x13, 0x12, 0x81, 0x5d, 0x01, 0x6b, 0x08, // ....(88(....].k. + 0x02, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0xff, 0x80, 0x05, 0x80, 0x05, 0x80, 0x00, 0x0f, // ................ + 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x37, 0x00, 0x5b, 0x00, 0x00, 0x25, 0x11, 0x34, 0x26, 0x2b, 0x01, // .../.7.[..%.4&+. + 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x25, 0x11, 0x34, 0x26, 0x2b, 0x01, // ".....;.26%.4&+. + 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x25, 0x11, 0x34, 0x26, 0x2b, 0x01, // ".....;.26%.4&+. + 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x01, 0x21, 0x27, 0x26, 0x27, 0x21, // ".....;.26.!'&'! + 0x06, 0x07, 0x05, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, // ......+....#!"&5 + 0x11, 0x23, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x37, 0x3e, 0x01, 0x33, 0x21, 0x32, // .#"&=.463!7>.3!2 + 0x16, 0x1f, 0x01, 0x21, 0x32, 0x16, 0x02, 0x00, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, // ...!2.....@....@ + 0x0e, 0x12, 0x01, 0x00, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x01, 0x00, // ......@....@.... + 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0xfd, 0xe0, 0x01, 0xc0, 0x30, 0x07, // ..@....@......0. + 0x0a, 0xfe, 0xc3, 0x0a, 0x07, 0x03, 0x6f, 0x12, 0x0e, 0x60, 0x5e, 0x42, 0xfc, 0xc0, 0x42, 0x5e, // ......o..`^B..B^ + 0x60, 0x0e, 0x12, 0x12, 0x0e, 0x01, 0x35, 0x46, 0x0f, 0x4e, 0x28, 0x01, 0x40, 0x28, 0x4e, 0x0f, // `.....5F.N(.@(N. + 0x46, 0x01, 0x35, 0x0e, 0x12, 0xa0, 0x02, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xfd, 0x40, 0x0e, 0x12, // F.5..........@.. + 0x12, 0x0e, 0x02, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xfd, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x02, 0xc0, // .........@...... + 0x0e, 0x12, 0x12, 0x0e, 0xfd, 0x40, 0x0e, 0x12, 0x12, 0x03, 0xee, 0x75, 0x09, 0x02, 0x02, 0x09, // .....@.....u.... + 0x95, 0x40, 0x0e, 0x12, 0xfc, 0x4c, 0x53, 0x79, 0x75, 0x53, 0x03, 0xb8, 0x12, 0x0e, 0x40, 0x0e, // .@...LSyuS....@. + 0x12, 0xa7, 0x25, 0x34, 0x34, 0x25, 0xa7, 0x12, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // ..%44%.......... + 0x05, 0x80, 0x00, 0x2c, 0x00, 0x3c, 0x00, 0x48, 0x00, 0x00, 0x01, 0x15, 0x14, 0x0e, 0x02, 0x23, // ...,.<.H.......# + 0x22, 0x00, 0x35, 0x34, 0x00, 0x33, 0x32, 0x1e, 0x03, 0x1d, 0x01, 0x14, 0x2b, 0x01, 0x22, 0x3d, // ".54.32.....+."= + 0x01, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x3d, 0x01, 0x34, 0x36, // .4&#"....326=.46 + 0x3b, 0x01, 0x32, 0x16, 0x02, 0x20, 0x0e, 0x02, 0x10, 0x1e, 0x02, 0x20, 0x3e, 0x02, 0x10, 0x2e, // ;.2.. ..... >... + 0x01, 0x00, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, 0x04, 0x7e, 0x49, // ..... $...$ ..~I + 0x73, 0x79, 0x39, 0xcd, 0xfe, 0xed, 0x01, 0x10, 0xcb, 0x22, 0x53, 0x67, 0x52, 0x38, 0x10, 0x76, // sy9......"SgR8.v + 0x10, 0x83, 0x48, 0x8c, 0xb1, 0xb7, 0x8e, 0x44, 0x8c, 0x09, 0x06, 0x77, 0x06, 0x0a, 0xfc, 0xfe, // ..H....D...w.... + 0xfc, 0xed, 0xab, 0x66, 0x66, 0xab, 0xed, 0x01, 0x04, 0xed, 0xab, 0x66, 0x66, 0xab, 0x01, 0x91, // ...ff......ff... + 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x01, // ....^.....a...a. + 0xce, 0x6d, 0x32, 0x4e, 0x2b, 0x16, 0x01, 0x16, 0xcf, 0xcb, 0x01, 0x10, 0x09, 0x1b, 0x29, 0x48, // .m2N+.........)H + 0x2d, 0x6d, 0x10, 0x10, 0x46, 0x2b, 0x31, 0xb7, 0x92, 0x97, 0xc5, 0x30, 0x2a, 0x46, 0x07, 0x09, // -m..F+1....0*F.. + 0x09, 0x03, 0x2b, 0x66, 0xab, 0xed, 0xfe, 0xfc, 0xed, 0xab, 0x66, 0x66, 0xab, 0xed, 0x01, 0x04, // ..+f......ff.... + 0xed, 0xab, 0xfe, 0xb7, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, // .....^.....a...a + 0xce, 0xce, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x0e, // ................ + 0x00, 0x62, 0x00, 0x00, 0x01, 0x34, 0x26, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x14, 0x16, 0x33, 0x32, // .b...4&#".....32 + 0x3e, 0x01, 0x05, 0x14, 0x0e, 0x02, 0x07, 0x22, 0x06, 0x23, 0x22, 0x27, 0x26, 0x27, 0x0e, 0x01, // >......".#"'&'.. + 0x23, 0x22, 0x26, 0x35, 0x34, 0x12, 0x36, 0x33, 0x32, 0x16, 0x17, 0x3f, 0x01, 0x3e, 0x01, 0x3b, // #"&54.632..?.>.; + 0x01, 0x32, 0x17, 0x16, 0x07, 0x03, 0x06, 0x15, 0x14, 0x16, 0x33, 0x3e, 0x04, 0x35, 0x10, 0x00, // .2........3>.5.. + 0x21, 0x22, 0x0e, 0x02, 0x10, 0x1e, 0x02, 0x33, 0x32, 0x37, 0x36, 0x16, 0x1f, 0x01, 0x16, 0x07, // !".....3276..... + 0x06, 0x07, 0x0e, 0x01, 0x23, 0x22, 0x24, 0x26, 0x02, 0x10, 0x12, 0x36, 0x24, 0x33, 0x20, 0x00, // ....#"$&...6$3 . + 0x03, 0xcc, 0x6b, 0x5e, 0x3f, 0x7a, 0x62, 0x3d, 0x6b, 0x61, 0x60, 0xa0, 0x55, 0x02, 0x34, 0x4a, // ..k^?zb=ka`.U.4J + 0x7b, 0x8c, 0x4b, 0x06, 0x13, 0x07, 0x5f, 0x2f, 0x1c, 0x05, 0x34, 0x9f, 0x5e, 0xa1, 0xb1, 0x84, // {.K..._/..4.^... + 0xe2, 0x85, 0x57, 0x88, 0x26, 0x02, 0x0b, 0x01, 0x09, 0x05, 0x76, 0x05, 0x08, 0x05, 0x02, 0x78, // ..W.&.....v....x + 0x05, 0x19, 0x20, 0x1c, 0x3a, 0x58, 0x42, 0x30, 0xfe, 0xa4, 0xfe, 0xdc, 0x82, 0xed, 0xab, 0x66, // .. .:XB0.......f + 0x66, 0xab, 0xed, 0x82, 0xe4, 0xb1, 0x0b, 0x1a, 0x08, 0x29, 0x08, 0x01, 0x02, 0x0a, 0x66, 0xfb, // f........)....f. + 0x85, 0x9c, 0xfe, 0xe4, 0xce, 0x7a, 0x7a, 0xce, 0x01, 0x1c, 0x9c, 0x01, 0x58, 0x01, 0xa8, 0x02, // .....zz.....X... + 0xf9, 0x6c, 0x7a, 0x3d, 0x6c, 0xa6, 0x61, 0x70, 0x7a, 0x85, 0xc7, 0x11, 0x6f, 0xac, 0x62, 0x33, // .lz=l.apz...o.b3 + 0x02, 0x01, 0x35, 0x21, 0x32, 0x42, 0x58, 0xbf, 0xae, 0x9d, 0x01, 0x0a, 0x9b, 0x47, 0x40, 0x13, // ..5!2BX......G@. + 0x38, 0x06, 0x0c, 0x0b, 0x05, 0x0b, 0xfd, 0x9a, 0x18, 0x18, 0x27, 0x1a, 0x01, 0x09, 0x27, 0x3d, // 8.........'...'= + 0x76, 0x4e, 0x01, 0x24, 0x01, 0x5c, 0x66, 0xab, 0xed, 0xfe, 0xfc, 0xed, 0xab, 0x66, 0x90, 0x09, // vN.$..f......f.. + 0x02, 0x0b, 0x31, 0x0c, 0x0c, 0x0d, 0x09, 0x53, 0x5a, 0x7a, 0xce, 0x01, 0x1c, 0x01, 0x38, 0x01, // ..1....SZz....8. + 0x1c, 0xce, 0x7a, 0xfe, 0x58, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x00, 0x07, 0x00, // ..z.X........... + 0x06, 0x00, 0x00, 0x23, 0x00, 0x28, 0x00, 0x00, 0x00, 0x16, 0x10, 0x0f, 0x01, 0x17, 0x16, 0x14, // ...#.(.......... + 0x0f, 0x01, 0x06, 0x22, 0x2f, 0x01, 0x01, 0x06, 0x2b, 0x01, 0x05, 0x27, 0x13, 0x35, 0x34, 0x37, // ..."/...+..'.547 + 0x01, 0x27, 0x26, 0x34, 0x3f, 0x01, 0x36, 0x32, 0x1f, 0x01, 0x37, 0x36, 0x09, 0x01, 0x27, 0x01, // .'&4?.62..76..'. + 0x15, 0x06, 0x44, 0xbc, 0x5e, 0xe1, 0x68, 0x0a, 0x0a, 0xd2, 0x0a, 0x1a, 0x0a, 0x69, 0xfd, 0xa5, // ..D.^.h......i.. + 0x25, 0x35, 0xcb, 0xff, 0x00, 0x40, 0x80, 0x25, 0x02, 0x5b, 0x69, 0x0a, 0x0a, 0xd2, 0x0a, 0x1a, // %5...@.%.[i..... + 0x0a, 0x68, 0xdf, 0x5d, 0xfc, 0xc5, 0x02, 0x40, 0xc0, 0xfd, 0xc0, 0x06, 0x00, 0xbc, 0xfe, 0xf7, // .h.]...@........ + 0x5d, 0xdf, 0x68, 0x0a, 0x1a, 0x0a, 0xd2, 0x0a, 0x0a, 0x69, 0xfd, 0xa5, 0x25, 0x80, 0x40, 0x01, // ].h......i..%.@. + 0x00, 0xcb, 0x35, 0x25, 0x02, 0x5b, 0x69, 0x0a, 0x1a, 0x0a, 0xd2, 0x0a, 0x0a, 0x68, 0xe1, 0x5e, // ..5%.[i......h.^ + 0xfa, 0x40, 0x02, 0x40, 0xc0, 0xfd, 0xc0, 0xc0, 0x00, 0x02, 0x00, 0x00, 0xff, 0x00, 0x06, 0xfe, // .@.@............ + 0x06, 0x00, 0x00, 0x10, 0x00, 0x29, 0x00, 0x00, 0x01, 0x32, 0x16, 0x15, 0x14, 0x07, 0x00, 0x07, // .....)...2...... + 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x37, 0x01, 0x36, 0x01, 0x1e, 0x01, 0x1f, 0x01, 0x16, 0x00, // .#"&547.6....... + 0x23, 0x22, 0x2e, 0x02, 0x35, 0x1e, 0x03, 0x33, 0x32, 0x37, 0x3e, 0x04, 0x06, 0x4f, 0x46, 0x69, // #"..5..327>..OFi + 0x2d, 0xfe, 0xb4, 0x85, 0x61, 0x79, 0x7e, 0xb5, 0x5c, 0x02, 0x7e, 0x3b, 0xfc, 0xba, 0x27, 0x87, // -...ay~...~;..'. + 0x53, 0x01, 0x04, 0xfe, 0xf5, 0xd7, 0x7b, 0xbe, 0x73, 0x3a, 0x07, 0x44, 0x38, 0x3e, 0x0f, 0x29, // S.....{.s:.D8>.) + 0x0e, 0x19, 0x41, 0x4a, 0x66, 0x68, 0x06, 0x00, 0x5d, 0x46, 0x3f, 0x58, 0xfd, 0x8b, 0x7b, 0x5b, // ..AJfh..]F?X..{[ + 0xb9, 0x7f, 0x80, 0x54, 0x02, 0x43, 0x36, 0xfb, 0xf6, 0x4c, 0x6c, 0x16, 0x47, 0xd5, 0xfe, 0xf4, // ...T.C6..Ll.G... + 0x5d, 0xa2, 0xcc, 0x76, 0x05, 0x32, 0x27, 0x22, 0x25, 0x42, 0x5d, 0x3b, 0x24, 0x0f, 0x00, 0x00, // ]..v.2'"%B];$... + 0x00, 0x05, 0x00, 0x00, 0xff, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x2d, 0x00, 0x6f, 0x00, 0x7f, // ...........-.o.. + 0x00, 0x8f, 0x00, 0x9f, 0x00, 0x00, 0x25, 0x11, 0x21, 0x11, 0x32, 0x3e, 0x01, 0x37, 0x3e, 0x01, // ......%.!.2>.7>. + 0x33, 0x32, 0x1e, 0x01, 0x17, 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x01, 0x37, 0x3e, 0x02, 0x33, 0x32, // 32.....32>.7>.32 + 0x16, 0x17, 0x1e, 0x02, 0x32, 0x3e, 0x01, 0x37, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x17, 0x1e, 0x02, // ....2>.7>.32.... + 0x13, 0x15, 0x22, 0x2e, 0x01, 0x27, 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x01, 0x07, 0x0e, 0x02, 0x23, // .."..'..#".....# + 0x22, 0x26, 0x27, 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x01, 0x07, 0x0e, 0x02, 0x23, 0x22, 0x26, 0x27, // "&'..#".....#"&' + 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x01, 0x07, 0x0e, 0x01, 0x23, 0x35, 0x34, 0x36, 0x3b, 0x01, 0x11, // ..#".....#546;.. + 0x21, 0x11, 0x21, 0x11, 0x21, 0x11, 0x21, 0x11, 0x21, 0x11, 0x33, 0x32, 0x16, 0x01, 0x14, 0x06, // !.!.!.!.!.32.... + 0x23, 0x22, 0x26, 0x35, 0x34, 0x3e, 0x04, 0x35, 0x32, 0x16, 0x05, 0x14, 0x06, 0x23, 0x22, 0x26, // #"&54>.52....#"& + 0x35, 0x34, 0x3e, 0x04, 0x35, 0x32, 0x16, 0x05, 0x14, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x3e, // 54>.52....#"&54> + 0x04, 0x35, 0x32, 0x16, 0x07, 0x00, 0xf9, 0x00, 0x2d, 0x50, 0x26, 0x1c, 0x1e, 0x2b, 0x23, 0x18, // .52.....-P&..+#. + 0x28, 0x16, 0x16, 0x1d, 0x24, 0x50, 0x2e, 0x2d, 0x50, 0x24, 0x1e, 0x15, 0x17, 0x27, 0x18, 0x23, // (...$P.-P$...'.# + 0x2b, 0x1e, 0x1c, 0x26, 0x50, 0x5a, 0x50, 0x26, 0x1c, 0x1e, 0x2b, 0x23, 0x22, 0x2b, 0x1e, 0x1c, // +..&PZP&..+#"+.. + 0x26, 0x50, 0x2d, 0x18, 0x28, 0x16, 0x16, 0x1d, 0x24, 0x50, 0x2d, 0x2e, 0x50, 0x24, 0x1d, 0x16, // &P-.(...$P-.P$.. + 0x16, 0x28, 0x18, 0x23, 0x2b, 0x1e, 0x1d, 0x24, 0x50, 0x2e, 0x2d, 0x50, 0x24, 0x1e, 0x15, 0x17, // .(.#+..$P.-P$... + 0x27, 0x18, 0x23, 0x2b, 0x1e, 0x1c, 0x26, 0x50, 0x2d, 0x2e, 0x50, 0x24, 0x1d, 0x1e, 0x2b, 0x23, // '.#+..&P-.P$..+# + 0x70, 0x50, 0x40, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x40, 0x50, 0x70, // pP@..........@Pp + 0xfb, 0x00, 0x48, 0x38, 0x35, 0x4b, 0x13, 0x1c, 0x22, 0x1c, 0x13, 0x26, 0x5a, 0x02, 0x00, 0x48, // ..H85K.."..&Z..H + 0x38, 0x35, 0x4b, 0x13, 0x1c, 0x22, 0x1c, 0x13, 0x26, 0x5a, 0x02, 0x00, 0x48, 0x38, 0x35, 0x4b, // 85K.."..&Z..H85K + 0x13, 0x1c, 0x22, 0x1c, 0x13, 0x26, 0x5a, 0x80, 0xfe, 0x80, 0x01, 0x80, 0x1c, 0x1b, 0x18, 0x1b, // .."..&Z......... + 0x16, 0x0e, 0x10, 0x13, 0x19, 0x1a, 0x1c, 0x1d, 0x19, 0x19, 0x13, 0x10, 0x0e, 0x16, 0x1b, 0x18, // ................ + 0x1b, 0x1c, 0x1c, 0x1b, 0x18, 0x1b, 0x16, 0x16, 0x1b, 0x18, 0x1b, 0x1c, 0x01, 0x40, 0xc0, 0x0e, // .............@.. + 0x10, 0x13, 0x19, 0x1a, 0x1c, 0x1c, 0x1a, 0x19, 0x13, 0x10, 0x0e, 0x16, 0x1b, 0x19, 0x1a, 0x1c, // ................ + 0x1d, 0x19, 0x19, 0x13, 0x10, 0x0e, 0x16, 0x1b, 0x18, 0x1b, 0x1c, 0x1c, 0x1a, 0x19, 0x1b, 0x16, // ................ + 0xc0, 0x50, 0x70, 0x01, 0xc0, 0xfe, 0x40, 0x01, 0xc0, 0xfe, 0x40, 0x01, 0xc0, 0xfe, 0x40, 0x70, // .Pp...@...@...@p + 0x03, 0x10, 0x4d, 0x53, 0x4b, 0x35, 0x1d, 0x2c, 0x18, 0x20, 0x1f, 0x3a, 0x26, 0x94, 0x4c, 0x4d, // ..MSK5.,. .:&.LM + 0x53, 0x4b, 0x35, 0x1d, 0x2c, 0x18, 0x20, 0x1f, 0x3a, 0x26, 0x94, 0x4c, 0x4d, 0x53, 0x4b, 0x35, // SK5.,. .:&.LMSK5 + 0x1d, 0x2c, 0x18, 0x20, 0x1f, 0x3a, 0x26, 0x94, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x08, 0x00, // .,. .:&......... + 0x05, 0x80, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x21, 0x15, 0x21, 0x11, 0x33, 0x11, 0x09, 0x01, // ........!.!.3... + 0x21, 0x11, 0x09, 0x01, 0x08, 0x00, 0xf8, 0x00, 0x80, 0x06, 0x00, 0x01, 0x00, 0xf9, 0x80, 0x01, // !............... + 0xc0, 0x02, 0x40, 0x80, 0x06, 0x00, 0xfa, 0x80, 0x04, 0x00, 0xfc, 0x80, 0x02, 0x40, 0x02, 0x40, // ..@..........@.@ + 0xfd, 0xc0, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0xc0, 0x06, 0x00, 0x00, 0x0b, // ................ + 0x00, 0x10, 0x00, 0x16, 0x00, 0x00, 0x09, 0x01, 0x06, 0x04, 0x23, 0x22, 0x24, 0x02, 0x10, 0x12, // ..........#"$... + 0x24, 0x33, 0x13, 0x21, 0x14, 0x02, 0x07, 0x13, 0x21, 0x11, 0x32, 0x04, 0x12, 0x03, 0x00, 0x02, // $3.!....!.2..... + 0x22, 0x6a, 0xfe, 0xe5, 0x9d, 0xd1, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0xd1, 0xbb, 0x03, 0x05, // "j.........a.... + 0x78, 0x6c, 0xa4, 0xfd, 0x00, 0xd1, 0x01, 0x61, 0xce, 0x02, 0x86, 0xfd, 0xde, 0x6c, 0x78, 0xce, // xl.....a.....lx. + 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xfd, 0x00, 0x9d, 0xfe, 0xe5, 0x6a, 0x02, 0xa2, 0x03, // .a...a......j... + 0x00, 0xce, 0xfe, 0x9f, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x08, 0x00, 0x05, 0x80, 0x00, 0x05, // ................ + 0x00, 0x1f, 0x00, 0x00, 0x21, 0x15, 0x21, 0x11, 0x33, 0x11, 0x01, 0x11, 0x14, 0x06, 0x2f, 0x01, // ....!.!.3...../. + 0x01, 0x06, 0x22, 0x2f, 0x01, 0x01, 0x27, 0x01, 0x36, 0x32, 0x1f, 0x01, 0x01, 0x27, 0x26, 0x36, // .."/..'.62...'&6 + 0x33, 0x21, 0x32, 0x16, 0x08, 0x00, 0xf8, 0x00, 0x80, 0x07, 0x00, 0x27, 0x10, 0x79, 0xfd, 0x87, // 3!2........'.y.. + 0x0a, 0x1a, 0x0a, 0xe9, 0xfe, 0x60, 0xc0, 0x02, 0x49, 0x0a, 0x1a, 0x0a, 0xe9, 0x01, 0xd0, 0x79, // .....`..I......y + 0x10, 0x11, 0x15, 0x01, 0xb3, 0x0e, 0x12, 0x80, 0x06, 0x00, 0xfa, 0x80, 0x04, 0xe0, 0xfe, 0x4d, // ...............M + 0x15, 0x11, 0x10, 0x79, 0xfd, 0x87, 0x0a, 0x0a, 0xe9, 0xfe, 0x60, 0xc0, 0x02, 0x49, 0x0a, 0x0a, // ...y......`..I.. + 0xe9, 0x01, 0xd0, 0x79, 0x10, 0x27, 0x12, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, // ...y.'.......... + 0x04, 0x57, 0x00, 0x60, 0x00, 0x00, 0x01, 0x14, 0x17, 0x1e, 0x03, 0x17, 0x04, 0x15, 0x14, 0x06, // .W.`............ + 0x23, 0x22, 0x2e, 0x06, 0x27, 0x2e, 0x03, 0x23, 0x22, 0x0e, 0x01, 0x15, 0x14, 0x16, 0x33, 0x32, // #"..'..#".....32 + 0x37, 0x36, 0x37, 0x17, 0x06, 0x07, 0x17, 0x06, 0x21, 0x22, 0x26, 0x02, 0x35, 0x34, 0x3e, 0x02, // 767.....!"&.54>. + 0x33, 0x32, 0x1e, 0x06, 0x17, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x2e, 0x06, 0x27, 0x26, 0x35, // 32....32654..'&5 + 0x34, 0x36, 0x17, 0x1e, 0x01, 0x17, 0x23, 0x1e, 0x02, 0x17, 0x07, 0x26, 0x27, 0x35, 0x26, 0x23, // 46....#....&'5&# + 0x22, 0x06, 0x05, 0x0c, 0x0a, 0x0a, 0x1e, 0x34, 0x24, 0x25, 0x01, 0x45, 0xd3, 0x95, 0x3b, 0x69, // "......4$%.E..;i + 0x4e, 0x4c, 0x32, 0x39, 0x1e, 0x31, 0x0b, 0x20, 0x3b, 0x58, 0x78, 0x52, 0x60, 0xae, 0x66, 0xd5, // NL29.1. ;XxR`.f. + 0x9d, 0xb1, 0x51, 0x38, 0x1b, 0x54, 0x0f, 0x1d, 0x01, 0x83, 0xfe, 0xff, 0x93, 0xf5, 0x88, 0x57, // ..Q8.T.........W + 0x91, 0xc7, 0x69, 0x57, 0x90, 0x67, 0x57, 0x3a, 0x3b, 0x2a, 0x3a, 0x1a, 0x60, 0x89, 0x51, 0x73, // ..iW.gW:;*:.`.Qs + 0x26, 0x3f, 0x52, 0x57, 0x58, 0x4a, 0x38, 0x0b, 0x03, 0xaf, 0x6f, 0x4e, 0x55, 0x30, 0x01, 0x0c, // &?RWXJ8...oNU0.. + 0x16, 0x1e, 0x04, 0x81, 0x1a, 0x1c, 0x17, 0x4a, 0x31, 0x46, 0x03, 0x40, 0x06, 0x23, 0x1d, 0x29, // .......J1F.@.#.) + 0x1b, 0x0d, 0x0a, 0x5b, 0xf1, 0x92, 0xc1, 0x25, 0x36, 0x5f, 0x50, 0x7f, 0x4f, 0x86, 0x1c, 0x51, // ...[...%6_P.O..Q + 0x69, 0x58, 0x28, 0x6f, 0xb2, 0x60, 0xa0, 0xef, 0x5f, 0x3f, 0x35, 0x98, 0x22, 0x24, 0x01, 0x98, // iX(o.`.._?5."$.. + 0x9e, 0x01, 0x01, 0x92, 0x69, 0xca, 0x97, 0x5c, 0x26, 0x3e, 0x62, 0x64, 0x86, 0x73, 0x92, 0x36, // ....i...&>bd.s.6 + 0xc8, 0x61, 0x50, 0x2a, 0x3c, 0x20, 0x1f, 0x17, 0x2d, 0x3b, 0x69, 0x46, 0x10, 0x11, 0x6e, 0xa4, // .aP*< ..-;iF..n. + 0x04, 0x03, 0x17, 0x2a, 0x0b, 0x1b, 0x2d, 0x05, 0x63, 0x31, 0x15, 0x01, 0x15, 0x42, 0x00, 0x00, // ...*..-.c1...B.. + 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x57, 0x00, 0x67, 0x00, 0x00, // ...........W.g.. + 0x01, 0x34, 0x27, 0x2e, 0x02, 0x27, 0x34, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x23, // .4'..'4..54632.# + 0x16, 0x17, 0x37, 0x26, 0x27, 0x2e, 0x01, 0x23, 0x22, 0x06, 0x15, 0x14, 0x17, 0x1e, 0x01, 0x17, // ..7&'..#"....... + 0x1e, 0x03, 0x1d, 0x01, 0x16, 0x06, 0x23, 0x22, 0x27, 0x2e, 0x05, 0x23, 0x22, 0x0e, 0x01, 0x17, // ......#"'..#"... + 0x15, 0x1e, 0x02, 0x33, 0x32, 0x37, 0x36, 0x37, 0x27, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x35, 0x34, // ...32767'..#"&54 + 0x36, 0x33, 0x32, 0x16, 0x17, 0x1e, 0x07, 0x33, 0x32, 0x36, 0x13, 0x11, 0x14, 0x06, 0x23, 0x21, // 632....326....#! + 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x05, 0x98, 0xea, 0x23, 0x24, 0x28, // "&5.463!2....#$( + 0x09, 0x04, 0x02, 0x31, 0x24, 0x36, 0x11, 0x01, 0x14, 0x13, 0x5d, 0x27, 0x0a, 0x21, 0x45, 0x33, // ...1$6....]'.!E3 + 0x50, 0x7c, 0x02, 0x10, 0x61, 0x64, 0x1d, 0x28, 0x32, 0x1b, 0x01, 0x53, 0x3b, 0x61, 0x46, 0x17, // P|..ad.(2..S;aF. + 0x39, 0x27, 0x45, 0x4f, 0x80, 0x53, 0x65, 0xb6, 0x6a, 0x03, 0x04, 0x5d, 0xae, 0x6d, 0xba, 0x5d, // 9'EO.Se.j..].m.] + 0x14, 0x0b, 0x3c, 0x2a, 0x72, 0x59, 0x73, 0x98, 0xa4, 0x68, 0x70, 0x74, 0x2e, 0x08, 0x23, 0x16, // ..<*rYs..hpt..#. + 0x29, 0x24, 0x37, 0x38, 0x4c, 0x2a, 0x6b, 0x98, 0x68, 0xa9, 0x77, 0xfc, 0x40, 0x77, 0xa9, 0xa9, // )$78L*k.h.w.@w.. + 0x77, 0x03, 0xc0, 0x77, 0xa9, 0x01, 0xe4, 0xad, 0x42, 0x0a, 0x0d, 0x25, 0x1c, 0x02, 0x0d, 0x0b, // w..w....B..%.... + 0x02, 0x24, 0x2f, 0x0f, 0x0f, 0x24, 0x47, 0x36, 0x0a, 0x1d, 0x14, 0x73, 0x50, 0x07, 0x10, 0x60, // .$/..$G6...sP..` + 0x58, 0x1d, 0x08, 0x0f, 0x1c, 0x29, 0x1a, 0x05, 0x3a, 0x46, 0x90, 0x2f, 0x95, 0x66, 0x77, 0x48, // X....)..:F./.fwH + 0x31, 0x70, 0xb8, 0x64, 0x01, 0x6c, 0xb6, 0x71, 0x6e, 0x1b, 0x18, 0x6d, 0x50, 0x48, 0xae, 0x75, // 1p.d.l.qn..mPH.u + 0x69, 0xa8, 0x6b, 0x77, 0x15, 0x5f, 0x3a, 0x5b, 0x39, 0x44, 0x27, 0x1b, 0x8b, 0x02, 0xe5, 0xfc, // i.kw._:[9D'..... + 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0xa9, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // @w..w..w........ + 0x00, 0x00, 0x08, 0x00, 0x05, 0x00, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x33, 0x00, 0x00, 0x00, 0x34, // ...........3...4 + 0x2e, 0x02, 0x22, 0x0e, 0x02, 0x14, 0x1e, 0x02, 0x32, 0x3e, 0x01, 0x24, 0x34, 0x2e, 0x02, 0x23, // ..".....2>.$4..# + 0x21, 0x16, 0x12, 0x10, 0x02, 0x07, 0x21, 0x32, 0x3e, 0x01, 0x12, 0x10, 0x0e, 0x02, 0x23, 0x21, // !.....!2>.....#! + 0x22, 0x2e, 0x02, 0x10, 0x3e, 0x02, 0x33, 0x21, 0x32, 0x1e, 0x01, 0x04, 0x80, 0x51, 0x8a, 0xbd, // "...>.3!2....Q.. + 0xd0, 0xbd, 0x8a, 0x51, 0x51, 0x8a, 0xbd, 0xd0, 0xbd, 0x8a, 0x03, 0x51, 0x51, 0x8a, 0xbd, 0x68, // ...QQ......QQ..h + 0xfe, 0x7e, 0x77, 0x8b, 0x8b, 0x77, 0x01, 0x82, 0x68, 0xbd, 0x8a, 0xd1, 0x66, 0xab, 0xed, 0x82, // .~w..w..h...f... + 0xfd, 0x00, 0x82, 0xed, 0xab, 0x66, 0x66, 0xab, 0xed, 0x82, 0x03, 0x00, 0x82, 0xed, 0xab, 0x02, // .....ff......... + 0x18, 0xd0, 0xbd, 0x8a, 0x51, 0x51, 0x8a, 0xbd, 0xd0, 0xbd, 0x8a, 0x51, 0x51, 0x8a, 0xbd, 0xd0, // ....QQ.....QQ... + 0xbd, 0x8a, 0x51, 0x5a, 0xfe, 0xf4, 0xfe, 0xcc, 0xfe, 0xf4, 0x5a, 0x51, 0x8a, 0x01, 0xa7, 0xfe, // ..QZ......ZQ.... + 0xfc, 0xed, 0xab, 0x66, 0x66, 0xab, 0xed, 0x01, 0x04, 0xed, 0xab, 0x66, 0x66, 0xab, 0x00, 0x00, // ...ff......ff... + 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x05, 0x00, 0x00, 0x13, 0x00, 0x23, 0x00, 0x00, // .............#.. + 0x18, 0x01, 0x3e, 0x02, 0x33, 0x21, 0x32, 0x1e, 0x02, 0x10, 0x0e, 0x02, 0x23, 0x21, 0x22, 0x2e, // ..>.3!2.....#!". + 0x01, 0x04, 0x32, 0x3e, 0x02, 0x34, 0x2e, 0x02, 0x22, 0x0e, 0x02, 0x14, 0x1e, 0x01, 0x66, 0xab, // ..2>.4..".....f. + 0xed, 0x82, 0x03, 0x00, 0x82, 0xed, 0xab, 0x66, 0x66, 0xab, 0xed, 0x82, 0xfd, 0x00, 0x82, 0xed, // .......ff....... + 0xab, 0x04, 0xb2, 0xd0, 0xbd, 0x8a, 0x51, 0x51, 0x8a, 0xbd, 0xd0, 0xbd, 0x8a, 0x51, 0x51, 0x8a, // ......QQ.....QQ. + 0x01, 0xfe, 0x01, 0x04, 0xed, 0xab, 0x66, 0x66, 0xab, 0xed, 0xfe, 0xfc, 0xed, 0xab, 0x66, 0x66, // ......ff......ff + 0xab, 0x91, 0x51, 0x8a, 0xbd, 0xd0, 0xbd, 0x8a, 0x51, 0x51, 0x8a, 0xbd, 0xd0, 0xbd, 0x8a, 0x00, // ..Q.....QQ...... + 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x05, 0x00, 0x00, 0x0e, 0x00, 0x12, 0x00, 0x18, // ................ + 0x00, 0x2c, 0x00, 0x5c, 0x00, 0x00, 0x01, 0x21, 0x22, 0x26, 0x3f, 0x01, 0x26, 0x23, 0x22, 0x06, // .,.....!"&?.&#". + 0x10, 0x16, 0x33, 0x32, 0x36, 0x27, 0x33, 0x26, 0x27, 0x05, 0x01, 0x21, 0x07, 0x16, 0x17, 0x04, // ..326'3&'..!.... + 0x10, 0x26, 0x23, 0x22, 0x07, 0x13, 0x16, 0x06, 0x07, 0x06, 0x23, 0x22, 0x27, 0x03, 0x06, 0x15, // .&#"......#"'... + 0x14, 0x16, 0x20, 0x00, 0x10, 0x00, 0x20, 0x00, 0x35, 0x34, 0x36, 0x37, 0x27, 0x01, 0x06, 0x2b, // .. ... .5467'..+ + 0x01, 0x0e, 0x01, 0x23, 0x22, 0x00, 0x10, 0x00, 0x33, 0x32, 0x17, 0x37, 0x23, 0x22, 0x26, 0x34, // ...#"...32.7#"&4 + 0x36, 0x33, 0x21, 0x15, 0x21, 0x27, 0x23, 0x22, 0x26, 0x34, 0x36, 0x33, 0x21, 0x32, 0x17, 0x01, // 63!.!'#"&463!2.. + 0x36, 0x33, 0x32, 0x02, 0xfa, 0xfe, 0xc6, 0x28, 0x23, 0x18, 0xbc, 0x41, 0x48, 0x84, 0xbc, 0xbc, // 632....(#..AH... + 0x84, 0x73, 0xb0, 0xa3, 0xba, 0x12, 0x39, 0x01, 0x71, 0x01, 0x20, 0xfe, 0x20, 0x63, 0x69, 0x15, // .s....9.q. . ci. + 0x05, 0x05, 0xbc, 0x84, 0x3c, 0x3d, 0xae, 0x0f, 0x0a, 0x16, 0x0f, 0x15, 0x23, 0x12, 0xae, 0x5d, // ....<=......#..] + 0xbc, 0x01, 0x08, 0x01, 0x3c, 0xfe, 0xf9, 0xfe, 0x8e, 0xfe, 0xf9, 0x4f, 0x46, 0x41, 0xfe, 0x9f, // ....<......OFA.. + 0x12, 0x21, 0xc5, 0x17, 0xfc, 0xa8, 0xb9, 0xfe, 0xf9, 0x01, 0x07, 0xb9, 0x72, 0x65, 0x89, 0xe0, // .!..........re.. + 0x1a, 0x26, 0x26, 0x1a, 0x01, 0x80, 0x01, 0xb3, 0x55, 0xde, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0x00, // .&&.....U..&&... + 0x21, 0x14, 0x01, 0x0b, 0x5b, 0x65, 0xb9, 0x01, 0x80, 0x46, 0x20, 0xfb, 0x1f, 0xbc, 0xfe, 0xf8, // !...[e...F ..... + 0xbc, 0x91, 0xef, 0x55, 0x3f, 0x94, 0x01, 0x80, 0x84, 0x67, 0x95, 0xc4, 0x01, 0x08, 0xbc, 0x18, // ...U?....g...... + 0xfe, 0xfc, 0x17, 0x34, 0x0e, 0x0b, 0x1d, 0x01, 0x04, 0x5f, 0x82, 0x84, 0xbc, 0x01, 0xf9, 0xfe, // ...4....._...... + 0x8e, 0xfe, 0xf9, 0x01, 0x07, 0xb9, 0x61, 0xad, 0x3f, 0x62, 0xfe, 0x2b, 0x1a, 0xa4, 0xdc, 0x01, // ......a.?b.+.... + 0x07, 0x01, 0x72, 0x01, 0x07, 0x37, 0xb7, 0x26, 0x34, 0x26, 0x80, 0x80, 0x26, 0x34, 0x26, 0x1c, // ..r..7.&4&..&4&. + 0xfe, 0x70, 0x2c, 0x00, 0x00, 0x05, 0x00, 0x00, 0xff, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x07, // .p,............. + 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2b, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x34, 0x26, 0x22, 0x06, 0x14, // .....+.K...4&".. + 0x16, 0x32, 0x24, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x13, 0x03, 0x2e, 0x01, 0x23, 0x21, // .2$4&"...2....#! + 0x22, 0x06, 0x07, 0x03, 0x06, 0x16, 0x33, 0x21, 0x32, 0x36, 0x02, 0x34, 0x26, 0x23, 0x21, 0x22, // ".....3!26.4&#!" + 0x06, 0x14, 0x16, 0x33, 0x21, 0x32, 0x01, 0x11, 0x23, 0x15, 0x14, 0x06, 0x22, 0x26, 0x3d, 0x01, // ...3!2..#..."&=. + 0x21, 0x15, 0x14, 0x06, 0x22, 0x26, 0x3d, 0x01, 0x23, 0x11, 0x34, 0x37, 0x13, 0x3e, 0x01, 0x24, // !..."&=.#.47.>.$ + 0x20, 0x04, 0x16, 0x17, 0x13, 0x16, 0x01, 0x80, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x04, 0x4b, 0x4b, // .......KjKKj.KK + 0x6a, 0x4b, 0x4b, 0x6a, 0x1d, 0x48, 0x05, 0x23, 0x17, 0xfc, 0x6a, 0x17, 0x23, 0x05, 0x48, 0x05, // jKKj.H.#..j.#.H. + 0x26, 0x1e, 0x04, 0x26, 0x1e, 0x26, 0xe7, 0x1c, 0x14, 0xfd, 0x80, 0x14, 0x1c, 0x1c, 0x14, 0x02, // &..&.&.......... + 0x80, 0x14, 0x01, 0xac, 0x80, 0x4b, 0x6a, 0x4b, 0xfd, 0x00, 0x4b, 0x6a, 0x4b, 0x80, 0x19, 0x67, // .....KjK..KjK..g + 0x09, 0xb1, 0x01, 0x1b, 0x01, 0x56, 0x01, 0x1b, 0xb1, 0x09, 0x69, 0x17, 0x01, 0x0b, 0x6a, 0x4b, // .....V....i...jK + 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0x02, 0x0c, 0x01, 0x80, 0x17, 0x1d, 0x1d, // KjKKjKKjK....... + 0x17, 0xfe, 0x80, 0x1e, 0x2e, 0x2e, 0x02, 0x6e, 0x28, 0x1c, 0x1c, 0x28, 0x1c, 0xfd, 0x5b, 0xfd, // .......n(..(..[. + 0xa5, 0x80, 0x35, 0x4b, 0x4b, 0x35, 0x80, 0x80, 0x35, 0x4b, 0x4b, 0x35, 0x80, 0x02, 0x5b, 0x70, // ..5KK5..5KK5..[p + 0x6f, 0x01, 0xc6, 0x4e, 0x76, 0x3c, 0x3c, 0x76, 0x4e, 0xfe, 0x3a, 0x66, 0x00, 0x03, 0x00, 0x00, // o..Nv<....+ + 0x01, 0x16, 0x15, 0x14, 0x02, 0x06, 0x04, 0x23, 0x22, 0x00, 0x27, 0x23, 0x22, 0x26, 0x35, 0x34, // .......#".'#"&54 + 0x36, 0x3b, 0x01, 0x26, 0x35, 0x34, 0x12, 0x36, 0x24, 0x33, 0x32, 0x00, 0x17, 0x33, 0x32, 0x16, // 6;.&54.6$32..32. + 0x05, 0xb7, 0x32, 0x24, 0xfd, 0x42, 0x24, 0x32, 0x32, 0x24, 0x02, 0xbe, 0x24, 0x01, 0x08, 0x17, // ..2$.B$22$..$... + 0xfc, 0x2a, 0x24, 0x32, 0x32, 0x24, 0x03, 0x8c, 0x58, 0xfe, 0xda, 0xad, 0xb1, 0xfe, 0xd3, 0xaf, // .*$22$..X....... + 0x17, 0x03, 0xd6, 0x24, 0x32, 0x32, 0x24, 0xfc, 0x74, 0x58, 0x01, 0x27, 0xad, 0x84, 0xf2, 0xae, // ...$22$.tX.'.... + 0x68, 0x01, 0x73, 0x32, 0x24, 0x83, 0x11, 0x83, 0xdc, 0xfe, 0xcf, 0xa7, 0xf6, 0xfe, 0x6b, 0x63, // h.s2$.........kc + 0xbd, 0x24, 0x32, 0x32, 0x24, 0x84, 0x11, 0x83, 0xdc, 0x01, 0x31, 0xa8, 0xf5, 0x01, 0x95, 0x63, // .$22$.....1....c + 0xbc, 0x24, 0x32, 0x02, 0xe3, 0x46, 0x33, 0x33, 0x46, 0x33, 0x56, 0x56, 0x54, 0x32, 0x23, 0x24, // .$2..F33F3VVT2#$ + 0x32, 0x8f, 0xa8, 0xaf, 0xfe, 0xd4, 0xb1, 0x56, 0x54, 0x32, 0x23, 0x24, 0x32, 0x8f, 0xa8, 0x67, // 2......VT2#$2..g + 0xaf, 0xf1, 0x01, 0x84, 0x23, 0x32, 0x55, 0x55, 0xa7, 0xfe, 0xcf, 0xdd, 0x83, 0x01, 0x0a, 0xd9, // ....#2UU........ + 0x32, 0x24, 0x23, 0x32, 0x55, 0x55, 0xa7, 0x01, 0x31, 0xdd, 0x83, 0xfe, 0xf6, 0xd9, 0x32, 0x00, // 2$#2UU..1.....2. + 0x00, 0x06, 0x00, 0x0b, 0xff, 0x00, 0x04, 0xf5, 0x06, 0x00, 0x00, 0x07, 0x00, 0x0f, 0x00, 0x1b, // ................ + 0x00, 0x2c, 0x00, 0x75, 0x00, 0xa3, 0x00, 0x00, 0x01, 0x03, 0x17, 0x12, 0x35, 0x34, 0x23, 0x22, // .,.u........54#" + 0x01, 0x16, 0x17, 0x36, 0x37, 0x2e, 0x02, 0x01, 0x14, 0x13, 0x36, 0x33, 0x32, 0x17, 0x03, 0x26, // ...67.....632..& + 0x23, 0x22, 0x06, 0x03, 0x14, 0x1e, 0x01, 0x33, 0x32, 0x36, 0x35, 0x34, 0x27, 0x2e, 0x03, 0x23, // #".....32654'..# + 0x22, 0x06, 0x03, 0x14, 0x17, 0x1e, 0x01, 0x33, 0x32, 0x37, 0x36, 0x11, 0x34, 0x2e, 0x01, 0x27, // "......3276.4..' + 0x26, 0x24, 0x23, 0x22, 0x07, 0x06, 0x15, 0x14, 0x1e, 0x04, 0x37, 0x32, 0x33, 0x32, 0x17, 0x16, // &$#"......7232.. + 0x17, 0x06, 0x07, 0x06, 0x07, 0x0e, 0x01, 0x15, 0x14, 0x16, 0x15, 0x07, 0x06, 0x15, 0x26, 0x27, // ..............&' + 0x06, 0x23, 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x37, 0x16, 0x17, 0x16, 0x33, // .#....#"&547...3 + 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x07, 0x34, 0x36, 0x37, 0x26, 0x35, 0x34, 0x36, // 2654&#"..467&546 + 0x33, 0x32, 0x17, 0x02, 0x35, 0x34, 0x36, 0x33, 0x32, 0x13, 0x16, 0x17, 0x3e, 0x05, 0x33, 0x32, // 32..54632...>.32 + 0x16, 0x15, 0x14, 0x03, 0x1e, 0x03, 0x15, 0x14, 0x02, 0x0e, 0x01, 0x23, 0x22, 0x27, 0x26, 0x02, // ...........#"'&. + 0x03, 0xb9, 0x72, 0x75, 0xa5, 0x26, 0x39, 0xfe, 0x8c, 0x1e, 0x03, 0x25, 0x22, 0x0c, 0x2a, 0x23, // ..ru.&9....%".*# + 0xfe, 0xcd, 0x9f, 0x11, 0x20, 0x0f, 0x3c, 0x79, 0x4b, 0x30, 0x13, 0x14, 0x4f, 0x67, 0x84, 0x22, // .... .O%GR.=O + 0x26, 0x0e, 0x5e, 0xaa, 0xfc, 0x98, 0x6f, 0x70, 0x95, 0xda, 0x04, 0x86, 0xfe, 0xb8, 0x15, 0x01, // &.^...op........ + 0xc3, 0x43, 0x38, 0xfc, 0x70, 0x50, 0x08, 0x2a, 0x19, 0x02, 0x07, 0x07, 0x03, 0x85, 0x62, 0xfe, // .C8.pP.*......b. + 0x59, 0x0a, 0x05, 0x01, 0x5f, 0xdc, 0x23, 0xfc, 0xf5, 0x24, 0xa6, 0x8c, 0x1a, 0x0e, 0x18, 0x4e, // Y..._.#..$.....N + 0x20, 0x50, 0x62, 0x40, 0x36, 0xfe, 0x9d, 0x29, 0x3f, 0x91, 0xa4, 0xaa, 0xa9, 0x01, 0x02, 0x2b, // Pb@6..)?......+ + 0x30, 0x4c, 0x12, 0x31, 0x35, 0x0b, 0x05, 0x1e, 0x22, 0x34, 0x1c, 0x13, 0x04, 0x04, 0x02, 0x13, // 0L.15..."4...... + 0x13, 0x24, 0x1c, 0x1a, 0x16, 0x18, 0x2e, 0x88, 0x45, 0x1f, 0x73, 0x1e, 0x0c, 0x0c, 0x02, 0x0a, // .$......E.s..... + 0xce, 0x02, 0x07, 0x0e, 0x35, 0x49, 0x9c, 0x51, 0x22, 0x21, 0x40, 0x0c, 0x68, 0x11, 0x0c, 0x22, // ....5I.Q"!@.h.." + 0xde, 0x59, 0x37, 0x65, 0x7c, 0x1a, 0x4a, 0x1e, 0x3e, 0x7a, 0x0f, 0x01, 0xce, 0x69, 0x50, 0x65, // .Y7e|.J.>z...iPe + 0xfd, 0xbb, 0x11, 0x06, 0x10, 0x7f, 0x6e, 0x91, 0x65, 0x48, 0x62, 0x49, 0x6c, 0xfe, 0x46, 0x0f, // ......n.eHbIl.F. + 0x3e, 0x5e, 0x5d, 0x40, 0x96, 0xfe, 0xfc, 0xbe, 0x6e, 0x2a, 0x39, 0x01, 0x0d, 0x00, 0x00, 0x00, // >^]@....n*9..... + 0x00, 0x04, 0x00, 0x00, 0xff, 0x80, 0x08, 0x00, 0x05, 0x80, 0x00, 0x1a, 0x00, 0x36, 0x00, 0x5b, // .............6.[ + 0x00, 0x5f, 0x00, 0x00, 0x01, 0x33, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, // ._...3..#"&54632 + 0x16, 0x17, 0x23, 0x2e, 0x01, 0x23, 0x22, 0x06, 0x15, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x25, 0x33, // ..#..#".....32%3 + 0x0e, 0x01, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x17, 0x23, 0x2e, 0x01, 0x23, // ..#"&54632..#..# + 0x22, 0x06, 0x15, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x36, 0x25, 0x34, 0x26, 0x27, 0x2e, 0x02, 0x27, // ".....326%4&'..' + 0x26, 0x21, 0x20, 0x07, 0x0e, 0x02, 0x07, 0x0e, 0x01, 0x15, 0x14, 0x16, 0x17, 0x1e, 0x02, 0x17, // &! ............. + 0x16, 0x04, 0x21, 0x20, 0x37, 0x3e, 0x02, 0x37, 0x3e, 0x01, 0x13, 0x11, 0x21, 0x11, 0x03, 0x11, // ..! 7>.7>...!... + 0xcf, 0x0e, 0xa9, 0x82, 0xa2, 0xb9, 0xba, 0x8c, 0x94, 0xa8, 0x0d, 0xcb, 0x05, 0x3d, 0x33, 0x39, // .............=39 + 0x3f, 0x0a, 0x1a, 0x36, 0x27, 0x5f, 0x02, 0xd6, 0xce, 0x0e, 0xa8, 0x82, 0xa2, 0xb9, 0xba, 0x8c, // ?..6'_.......... + 0x94, 0xa8, 0x0d, 0xcc, 0x04, 0x3e, 0x32, 0x39, 0x3f, 0x0a, 0x1a, 0x35, 0x27, 0x31, 0x37, 0x01, // .....>29?..5'17. + 0x6d, 0x1f, 0x2d, 0x06, 0x0f, 0x1c, 0x02, 0x56, 0xfd, 0x9d, 0xfd, 0x8f, 0x55, 0x05, 0x19, 0x11, // m.-....V....U... + 0x06, 0x2d, 0x1e, 0x1e, 0x2d, 0x06, 0x12, 0x17, 0x06, 0x2c, 0x01, 0x87, 0x01, 0x13, 0x02, 0x62, // .-..-....,.....b + 0x57, 0x05, 0x18, 0x11, 0x05, 0x2e, 0x1e, 0xc0, 0xf8, 0x00, 0x02, 0x10, 0x9e, 0xb5, 0xe8, 0xc8, // W............... + 0xc2, 0xeb, 0xae, 0xa0, 0x40, 0x46, 0x79, 0x75, 0x30, 0x48, 0x43, 0x24, 0x8b, 0x9e, 0xb5, 0xe8, // ....@Fyu0HC$.... + 0xc8, 0xc2, 0xeb, 0xae, 0xa0, 0x40, 0x46, 0x79, 0x75, 0x30, 0x48, 0x43, 0x24, 0x4c, 0xb6, 0xcf, // .....@Fyu0HC$L.. + 0xc8, 0x3d, 0x08, 0x0c, 0x12, 0x02, 0x3f, 0x3f, 0x04, 0x0f, 0x0d, 0x08, 0x3c, 0xc7, 0xd1, 0xd0, // .=....??....<... + 0xc7, 0x3d, 0x08, 0x0e, 0x0e, 0x05, 0x21, 0x20, 0x41, 0x04, 0x0e, 0x0e, 0x09, 0x3c, 0xc6, 0x03, // .=....! A....<.. + 0xcb, 0xfa, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x05, 0x60, // ...............` + 0x05, 0x80, 0x00, 0x1d, 0x00, 0x3b, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, // .....;......+."& + 0x35, 0x11, 0x34, 0x26, 0x23, 0x21, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, 0x34, // 5.4&#!...+."&5.4 + 0x36, 0x33, 0x21, 0x32, 0x1e, 0x01, 0x01, 0x11, 0x14, 0x0e, 0x01, 0x23, 0x21, 0x22, 0x26, 0x35, // 63!2.......#!"&5 + 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x15, 0x11, 0x21, 0x32, 0x36, 0x35, 0x11, 0x34, 0x36, // .46;.2...!265.46 + 0x3b, 0x01, 0x32, 0x16, 0x03, 0xe0, 0x12, 0x0e, 0xa0, 0x0e, 0x12, 0xa0, 0x70, 0xfe, 0xf0, 0x12, // ;.2.........p... + 0x0e, 0xa0, 0x0e, 0x12, 0x12, 0x0e, 0x01, 0xd0, 0x87, 0xe4, 0x85, 0x01, 0x80, 0x85, 0xe4, 0x87, // ................ + 0xfe, 0x30, 0x0e, 0x12, 0x12, 0x0e, 0xa0, 0x0e, 0x12, 0x01, 0x10, 0x70, 0xa0, 0x12, 0x0e, 0xa0, // .0.........p.... + 0x0e, 0x12, 0x03, 0x90, 0xfe, 0x10, 0x0e, 0x12, 0x12, 0x0e, 0x01, 0xf0, 0x70, 0xa0, 0xfb, 0x80, // ............p... + 0x0e, 0x12, 0x12, 0x0e, 0x05, 0x40, 0x0e, 0x12, 0x85, 0xe4, 0x01, 0x49, 0xfc, 0x90, 0x87, 0xe4, // .....@.....I.... + 0x85, 0x12, 0x0e, 0x03, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xfd, 0x00, 0xa0, 0x70, 0x03, 0x70, 0x0e, // ............p.p. + 0x12, 0x12, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x0f, // ................ + 0x00, 0x3e, 0x00, 0x53, 0x00, 0x63, 0x00, 0x00, 0x01, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, // .>.S.c......+."& + 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x05, 0x35, 0x34, 0x26, 0x2b, 0x01, 0x22, 0x07, // =.46;.2..54&+.". + 0x26, 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x3b, 0x01, 0x32, 0x3d, 0x01, 0x34, 0x36, 0x3b, // &+."....;.2=.46; + 0x01, 0x32, 0x16, 0x1d, 0x01, 0x14, 0x3b, 0x01, 0x32, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, // .2....;.2=.46;.2 + 0x16, 0x1d, 0x01, 0x14, 0x3b, 0x01, 0x32, 0x25, 0x35, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x15, // ....;.2%54&#!".. + 0x11, 0x14, 0x3b, 0x01, 0x32, 0x3d, 0x01, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x13, 0x11, 0x14, 0x06, // ..;.2=..;.26.... + 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x05, 0x1f, 0x1b, 0x18, // #!"&5.463!2..... + 0xca, 0x18, 0x1c, 0x1c, 0x18, 0xca, 0x18, 0x1b, 0xfe, 0x16, 0x41, 0x35, 0x85, 0x44, 0x1c, 0x1c, // ..........A5.D.. + 0x44, 0x82, 0x35, 0x41, 0x15, 0x37, 0x16, 0x1b, 0x19, 0x5e, 0x18, 0x1c, 0x15, 0x36, 0x16, 0x1c, // D.5A.7...^...6.. + 0x18, 0x61, 0x18, 0x1b, 0x16, 0x37, 0x15, 0x02, 0x4d, 0x42, 0x35, 0xfe, 0xf8, 0x35, 0x42, 0x16, // .a...7..MB5..5B. + 0x37, 0x15, 0x1f, 0x3f, 0xbf, 0x35, 0x42, 0x7e, 0x88, 0x60, 0xfb, 0xd0, 0x60, 0x88, 0x88, 0x60, // 7..?.5B~.`..`..` + 0x04, 0x30, 0x60, 0x88, 0x02, 0xb6, 0x72, 0x18, 0x1c, 0x1c, 0x18, 0x72, 0x18, 0x1c, 0x1c, 0xfe, // .0`...r....r.... + 0xfa, 0x35, 0x41, 0x34, 0x34, 0x41, 0x35, 0xfa, 0x16, 0x16, 0xe6, 0x18, 0x1c, 0x1c, 0x18, 0xe6, // .5A44A5......... + 0x16, 0x16, 0xe6, 0x18, 0x1c, 0x1c, 0x18, 0xe6, 0x16, 0x76, 0x9a, 0x35, 0x41, 0x41, 0x35, 0xfe, // .........v.5AA5. + 0x66, 0x15, 0x15, 0xb4, 0x2a, 0x41, 0x02, 0x9d, 0xfb, 0xd0, 0x60, 0x88, 0x88, 0x60, 0x04, 0x30, // f...*A....`..`.0 + 0x60, 0x88, 0x88, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x02, // `............... + 0x00, 0x09, 0x00, 0x19, 0x00, 0x00, 0x01, 0x21, 0x1b, 0x01, 0x21, 0x01, 0x21, 0x01, 0x21, 0x09, // .......!..!.!.!. + 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // ....#!"&5.463!2. + 0x03, 0x93, 0xfe, 0xda, 0x93, 0xe9, 0x01, 0x37, 0xfe, 0xbc, 0xfe, 0x48, 0xfe, 0xbc, 0x01, 0x37, // .......7...H...7 + 0x01, 0x7f, 0x02, 0x6a, 0xaa, 0x76, 0xfc, 0x40, 0x76, 0xaa, 0xaa, 0x76, 0x03, 0xc0, 0x76, 0xaa, // ...j.v.@v..v..v. + 0x01, 0xc2, 0x02, 0x27, 0xfc, 0x97, 0x04, 0x00, 0xfc, 0x00, 0x01, 0x3a, 0x02, 0xa6, 0xfc, 0x40, // ...'.......:...@ + 0x76, 0xaa, 0xaa, 0x76, 0x03, 0xc0, 0x76, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, // v..v..v......... + 0xff, 0x00, 0x08, 0x00, 0x06, 0x00, 0x00, 0x4d, 0x00, 0x55, 0x00, 0x61, 0x00, 0x68, 0x00, 0x6d, // .......M.U.a.h.m + 0x00, 0x72, 0x00, 0x78, 0x00, 0x7f, 0x00, 0x84, 0x00, 0x89, 0x00, 0x91, 0x00, 0x96, 0x00, 0x9c, // .r.x............ + 0x00, 0xa0, 0x00, 0xa4, 0x00, 0xa7, 0x00, 0xaa, 0x00, 0xaf, 0x00, 0xb8, 0x00, 0xbb, 0x00, 0xbe, // ................ + 0x00, 0xc1, 0x00, 0xcb, 0x00, 0x00, 0x01, 0x14, 0x06, 0x07, 0x03, 0x16, 0x15, 0x14, 0x06, 0x07, // ................ + 0x03, 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x27, 0x21, 0x06, 0x22, 0x27, 0x21, 0x06, 0x23, 0x22, // .....#"'!."'!.#" + 0x26, 0x35, 0x34, 0x37, 0x03, 0x2e, 0x01, 0x35, 0x34, 0x37, 0x03, 0x2e, 0x01, 0x35, 0x34, 0x36, // &547...547...546 + 0x37, 0x13, 0x34, 0x26, 0x35, 0x34, 0x37, 0x13, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x21, // 7.4&547.&54632.! + 0x36, 0x32, 0x17, 0x21, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x07, 0x13, 0x1e, 0x01, 0x15, 0x14, // 62.!632......... + 0x07, 0x13, 0x1e, 0x01, 0x01, 0x21, 0x01, 0x23, 0x01, 0x21, 0x36, 0x32, 0x01, 0x16, 0x15, 0x14, // .....!.#.!62.... + 0x07, 0x13, 0x17, 0x37, 0x11, 0x27, 0x06, 0x07, 0x01, 0x21, 0x17, 0x25, 0x21, 0x06, 0x22, 0x01, // ...7.'...!.%!.". + 0x36, 0x37, 0x27, 0x07, 0x23, 0x37, 0x03, 0x01, 0x17, 0x01, 0x37, 0x13, 0x21, 0x01, 0x36, 0x05, // 67'.#7....7.!.6. + 0x33, 0x01, 0x21, 0x11, 0x17, 0x16, 0x03, 0x21, 0x37, 0x01, 0x0f, 0x01, 0x33, 0x35, 0x07, 0x16, // 3.!....!7...35.. + 0x11, 0x14, 0x16, 0x15, 0x14, 0x07, 0x17, 0x11, 0x37, 0x11, 0x17, 0x01, 0x2f, 0x01, 0x07, 0x11, // ........7.../... + 0x37, 0x27, 0x06, 0x25, 0x23, 0x05, 0x17, 0x15, 0x09, 0x02, 0x25, 0x27, 0x11, 0x05, 0x07, 0x33, // 7'.%#.....%'...3 + 0x01, 0x17, 0x13, 0x2f, 0x02, 0x26, 0x3d, 0x01, 0x03, 0x26, 0x27, 0x09, 0x02, 0x35, 0x03, 0x13, // .../.&=..&'..5.. + 0x23, 0x13, 0x01, 0x07, 0x3f, 0x01, 0x13, 0x26, 0x35, 0x34, 0x37, 0x0b, 0x01, 0x17, 0x36, 0x08, // #...?..&547...6. + 0x00, 0x1a, 0x14, 0xcd, 0x03, 0x19, 0x14, 0xc1, 0x03, 0x21, 0x18, 0x19, 0x10, 0xfe, 0x70, 0x11, // .........!....p. + 0x34, 0x11, 0xfe, 0x71, 0x11, 0x1a, 0x17, 0x22, 0x04, 0xc1, 0x14, 0x19, 0x03, 0xce, 0x14, 0x19, // 4..q..."........ + 0x1b, 0x14, 0xc7, 0x01, 0x22, 0xd1, 0x04, 0x22, 0x17, 0x1a, 0x12, 0x01, 0x8c, 0x10, 0x36, 0x10, // ....".."......6. + 0x01, 0x8e, 0x12, 0x1a, 0x17, 0x22, 0x04, 0xcf, 0x17, 0x20, 0x07, 0xbb, 0x13, 0x19, 0xfc, 0x27, // ....."... .....' + 0x01, 0x85, 0xfe, 0xaa, 0x8f, 0xfe, 0xaa, 0x01, 0x68, 0x12, 0x2a, 0xfc, 0x5b, 0x01, 0x02, 0xd0, // ........h.*.[... + 0x0f, 0xbc, 0xbb, 0x0d, 0x10, 0x02, 0xa8, 0xfe, 0x7c, 0xbe, 0x02, 0x2a, 0xfe, 0xe8, 0x10, 0x2c, // ........|..*..., + 0x02, 0xaf, 0x01, 0x04, 0x40, 0x11, 0x1e, 0x16, 0xfc, 0xfe, 0xd8, 0x3f, 0x01, 0x77, 0x10, 0x41, // ....@......?.w.A + 0xfe, 0x55, 0x01, 0x4d, 0x08, 0xfc, 0x70, 0x05, 0x01, 0x56, 0xfe, 0x8b, 0x04, 0x0e, 0x12, 0x01, // .U.M..p..V...... + 0x92, 0x40, 0xfe, 0xcb, 0x9d, 0xc1, 0xa3, 0xa8, 0x04, 0x01, 0x08, 0xab, 0x1e, 0x99, 0x01, 0x29, // .@.............) + 0xdf, 0xdf, 0x04, 0xcd, 0xbf, 0x06, 0x03, 0x77, 0x10, 0xfd, 0x93, 0xd5, 0xfe, 0xd7, 0x01, 0x37, // .......w.......7 + 0x01, 0x28, 0xfd, 0x7b, 0x88, 0x01, 0xe6, 0x2a, 0x55, 0x01, 0x25, 0xee, 0x84, 0x03, 0x01, 0x16, // .(.{...*U.%..... + 0x08, 0xd8, 0x05, 0x08, 0xfe, 0x4b, 0x01, 0x36, 0xfc, 0xc0, 0xa3, 0xa3, 0xa3, 0xa3, 0x04, 0x3d, // .....K.6.......= + 0x30, 0x82, 0x28, 0xcf, 0x02, 0x03, 0xab, 0x81, 0x4d, 0x05, 0x02, 0x81, 0x15, 0x1f, 0x04, 0xfe, // 0.(.....M....... + 0x9c, 0x09, 0x09, 0x14, 0x1f, 0x04, 0xfe, 0xaf, 0x08, 0x08, 0x17, 0x22, 0x12, 0x14, 0x14, 0x14, // ...........".... + 0x21, 0x18, 0x08, 0x0c, 0x01, 0x4f, 0x04, 0x1f, 0x14, 0x09, 0x09, 0x01, 0x64, 0x05, 0x1f, 0x14, // !....O......d... + 0x15, 0x1f, 0x04, 0x01, 0x58, 0x01, 0x04, 0x01, 0x24, 0x0f, 0x01, 0x6b, 0x0a, 0x08, 0x18, 0x21, // ....X...$..k...! + 0x15, 0x15, 0x15, 0x15, 0x21, 0x18, 0x06, 0x0c, 0xfe, 0x9a, 0x01, 0x21, 0x16, 0x0d, 0x0e, 0xfe, // ....!......!.... + 0xbc, 0x04, 0x1f, 0xfc, 0xcd, 0x01, 0x62, 0xfe, 0x9e, 0x10, 0x03, 0x1c, 0x04, 0x09, 0x0a, 0x05, // ......b......... + 0xfe, 0x98, 0x06, 0xc7, 0x01, 0x5b, 0xc2, 0x08, 0x02, 0x01, 0xc0, 0xc8, 0xc8, 0x10, 0xfb, 0x54, // .....[.........T + 0x06, 0x05, 0x44, 0x4f, 0x69, 0x01, 0x0a, 0xfe, 0xcd, 0x40, 0xfe, 0x90, 0x1c, 0x01, 0x36, 0xfe, // ..DOi....@....6. + 0xa9, 0x04, 0x0f, 0x01, 0x62, 0xfe, 0xb1, 0x06, 0x05, 0x01, 0x78, 0x42, 0x01, 0x41, 0xa6, 0xdd, // ....b.....xB.A.. + 0xbd, 0xb1, 0x08, 0x03, 0x35, 0x01, 0x02, 0x01, 0x10, 0x0d, 0xb1, 0x01, 0x0d, 0x0b, 0xfe, 0xc9, // ....5........... + 0x9d, 0x01, 0x3a, 0xec, 0xde, 0x08, 0xfe, 0xf8, 0x4a, 0xc9, 0x02, 0x0c, 0xe0, 0xe1, 0x2b, 0xfe, // ..:.....J.....+. + 0xc5, 0xfe, 0xc1, 0x01, 0x33, 0x0f, 0x8d, 0xfe, 0xe4, 0xdd, 0x2c, 0x01, 0x88, 0xfb, 0x02, 0x70, // ....3.....,....p + 0x05, 0x01, 0x15, 0x0d, 0x10, 0x02, 0x01, 0x78, 0x01, 0x04, 0xfe, 0x31, 0xfe, 0xb9, 0x01, 0xf6, // .......x...1.... + 0xdf, 0xfe, 0xe6, 0xfc, 0x89, 0xfe, 0xe5, 0x01, 0x1b, 0xe3, 0xe3, 0x46, 0x01, 0x69, 0x0a, 0x04, // ...........F.i.. + 0x01, 0x0f, 0x01, 0x28, 0xfd, 0x9c, 0x52, 0x03, 0x00, 0x02, 0x00, 0x00, 0xff, 0x00, 0x05, 0x80, // ...(..R......... + 0x06, 0x00, 0x00, 0x0d, 0x00, 0x1b, 0x00, 0x00, 0x11, 0x34, 0x36, 0x33, 0x21, 0x01, 0x11, 0x14, // .........463!... + 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x25, 0x27, 0x11, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x15, // .#!"&5%'.4&#!".. + 0x11, 0x14, 0x16, 0x33, 0xb7, 0x83, 0x02, 0xe6, 0x01, 0x60, 0xb7, 0x83, 0xfc, 0xf4, 0x83, 0xb7, // ...3.....`...... + 0x04, 0xd0, 0xb0, 0x40, 0x2e, 0xfe, 0x1c, 0x2e, 0x40, 0x41, 0x2d, 0x03, 0x58, 0x83, 0xbf, 0x01, // ...@....@A-.X... + 0x66, 0xfa, 0x42, 0x84, 0xbe, 0xbe, 0x84, 0x24, 0xb4, 0x01, 0xa9, 0x2e, 0x42, 0x42, 0x2e, 0xfe, // f.B....$....BB.. + 0x14, 0x2e, 0x43, 0x00, 0x00, 0x04, 0x00, 0x00, 0xff, 0x83, 0x06, 0x00, 0x05, 0x7d, 0x00, 0x0a, // ..C..........}.. + 0x00, 0x14, 0x00, 0x1e, 0x00, 0x29, 0x00, 0x00, 0x01, 0x04, 0x00, 0x03, 0x26, 0x35, 0x34, 0x12, // .....)......&54. + 0x24, 0x33, 0x32, 0x05, 0x16, 0x17, 0x04, 0x00, 0x03, 0x26, 0x27, 0x12, 0x00, 0x01, 0x12, 0x00, // $32......&'..... + 0x25, 0x16, 0x17, 0x04, 0x00, 0x03, 0x26, 0x05, 0x26, 0x27, 0x06, 0x07, 0x36, 0x00, 0x37, 0x06, // %.....&.&'..6.7. + 0x07, 0x16, 0x03, 0xa6, 0xfe, 0xc3, 0xfe, 0x22, 0x77, 0x14, 0xcd, 0x01, 0x60, 0xd0, 0x52, 0x01, // ......."w...`.R. + 0x64, 0x5d, 0x47, 0xfe, 0x7b, 0xfd, 0xc5, 0x6f, 0x5d, 0x3e, 0x70, 0x02, 0x36, 0xfe, 0xa3, 0x73, // d]G.{..o]>p.6..s + 0x02, 0x11, 0x01, 0x63, 0x28, 0x0e, 0xfe, 0xdc, 0xfe, 0x40, 0x77, 0x67, 0x03, 0xcf, 0xc1, 0xae, // ...c(....@wg.... + 0x87, 0x9b, 0x6d, 0x01, 0x4a, 0xcc, 0x15, 0x50, 0x41, 0x05, 0x6a, 0x79, 0xfe, 0x1d, 0xfe, 0xc1, // ..m.J..PA.jy.... + 0x59, 0x57, 0xd0, 0x01, 0x61, 0xcd, 0x8a, 0x41, 0x5a, 0x71, 0xfd, 0xc1, 0xfe, 0x7b, 0x48, 0x5a, // YW..a..AZq...{HZ + 0x01, 0x82, 0x02, 0x3a, 0xfb, 0x3c, 0x01, 0x64, 0x02, 0x14, 0x76, 0x5c, 0x67, 0x78, 0xfe, 0x3e, // ...:.<.d..v.gx.> + 0xfe, 0xdb, 0x0e, 0x14, 0x32, 0x41, 0x54, 0x17, 0xcd, 0x01, 0x4b, 0x6e, 0x98, 0x84, 0xaf, 0x00, // ....2AT...Kn.... + 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x08, 0x00, 0x04, 0xf7, 0x00, 0x16, 0x00, 0x2b, 0x00, 0x3b, // .............+.; + 0x00, 0x00, 0x01, 0x13, 0x22, 0x27, 0x26, 0x23, 0x22, 0x07, 0x26, 0x23, 0x22, 0x07, 0x06, 0x2b, // ...."'&#".&#"..+ + 0x01, 0x13, 0x36, 0x21, 0x32, 0x17, 0x36, 0x33, 0x20, 0x01, 0x32, 0x16, 0x17, 0x03, 0x26, 0x23, // ..6!2.63 .2...&# + 0x22, 0x07, 0x26, 0x23, 0x22, 0x07, 0x03, 0x3e, 0x02, 0x33, 0x32, 0x17, 0x36, 0x37, 0x03, 0x06, // ".&#"..>.32.67.. + 0x07, 0x26, 0x23, 0x22, 0x07, 0x03, 0x3e, 0x01, 0x33, 0x32, 0x17, 0x36, 0x17, 0x07, 0x65, 0x9b, // .&#"..>.32.6..e. + 0x83, 0x7e, 0xc8, 0xc1, 0xe2, 0x94, 0x94, 0xe2, 0xc1, 0xc8, 0x80, 0x7c, 0x05, 0x9b, 0xe0, 0x01, // .~.........|.... + 0x02, 0xe9, 0x9a, 0x9a, 0xe9, 0x01, 0x02, 0xfe, 0xf1, 0x81, 0xce, 0x9d, 0x7c, 0xab, 0xc5, 0xe0, // ............|... + 0x96, 0x96, 0xe0, 0xc5, 0xab, 0x7c, 0x69, 0x79, 0xb0, 0x5a, 0xca, 0xac, 0xac, 0xf2, 0x37, 0xd3, // .....|iy.Z....7. + 0x94, 0x98, 0xde, 0xb0, 0xa0, 0x72, 0x7c, 0xd1, 0x75, 0xd1, 0xa5, 0xac, 0xca, 0x04, 0x78, 0xfb, // .....r|.u.....x. + 0x08, 0x39, 0x5b, 0x94, 0x94, 0x5b, 0x39, 0x04, 0xf8, 0x7f, 0x6a, 0x6a, 0xfb, 0xa6, 0x39, 0x41, // .9[..[9...jj..9A + 0x03, 0xfd, 0x4e, 0x8d, 0x8d, 0x4e, 0xfc, 0x03, 0x2b, 0x2c, 0x23, 0x6c, 0x6c, 0x22, 0x03, 0x8b, // ..N..N..+,#ll".. + 0x04, 0x97, 0x9b, 0x42, 0xfc, 0x53, 0x33, 0x32, 0x66, 0x6b, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, // ...B.S32fk...... + 0xff, 0xa5, 0x08, 0x00, 0x05, 0x5b, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x3f, 0x00, 0x5c, // .....[...../.?.. + 0x00, 0x00, 0x25, 0x11, 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x3b, 0x01, // ..%.4&+.".....;. + 0x32, 0x36, 0x25, 0x11, 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x3b, 0x01, // 26%.4&+.".....;. + 0x32, 0x36, 0x25, 0x11, 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x3b, 0x01, // 26%.4&+.".....;. + 0x32, 0x36, 0x25, 0x11, 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x3b, 0x01, // 26%.4&+.".....;. + 0x32, 0x36, 0x25, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x34, 0x36, 0x37, 0x26, 0x35, 0x34, // 26%..#!"&5467&54 + 0x36, 0x33, 0x32, 0x17, 0x36, 0x24, 0x33, 0x32, 0x1e, 0x01, 0x15, 0x14, 0x07, 0x1e, 0x01, 0x05, // 632.6$32........ + 0xdc, 0x1e, 0x14, 0x5d, 0x14, 0x1e, 0x1e, 0x14, 0x5d, 0x14, 0x1e, 0xfe, 0xe4, 0x1e, 0x14, 0x65, // ...]....]......e + 0x14, 0x1e, 0x1e, 0x14, 0x65, 0x14, 0x1e, 0xfe, 0xdc, 0x1e, 0x14, 0x65, 0x14, 0x1e, 0x1e, 0x14, // ....e......e.... + 0x65, 0x14, 0x1e, 0xfe, 0xdc, 0x1e, 0x14, 0x65, 0x14, 0x1e, 0x1e, 0x14, 0x65, 0x14, 0x1e, 0x05, // e......e....e... + 0x88, 0xec, 0xa6, 0xfb, 0x24, 0xa6, 0xec, 0x7e, 0x69, 0x0a, 0xa1, 0x71, 0x66, 0x4e, 0x2d, 0x01, // ....$..~i..qfN-. + 0x2a, 0xbd, 0x95, 0xfc, 0x93, 0x0e, 0x87, 0xac, 0xa5, 0x02, 0xdd, 0x15, 0x1e, 0x1e, 0x15, 0xfd, // *............... + 0x23, 0x14, 0x1e, 0x1e, 0x14, 0x02, 0x13, 0x14, 0x1e, 0x1e, 0x14, 0xfd, 0xed, 0x14, 0x1e, 0x1e, // #............... + 0x14, 0x01, 0xad, 0x14, 0x1e, 0x1e, 0x14, 0xfe, 0x53, 0x14, 0x1e, 0x1e, 0x14, 0x01, 0x6a, 0x14, // ........S.....j. + 0x1e, 0x1e, 0x14, 0xfe, 0x96, 0x14, 0x1e, 0x1e, 0xa6, 0xa6, 0xec, 0xec, 0xa6, 0x74, 0xc5, 0x32, // .............t.2 + 0x22, 0x27, 0x71, 0xa1, 0x43, 0xb7, 0xea, 0x93, 0xfc, 0x95, 0x42, 0x38, 0x21, 0xdb, 0x00, 0x00, // "'q.C.....B8!... + 0x00, 0x27, 0x00, 0x00, 0xff, 0x3e, 0x06, 0x00, 0x06, 0x00, 0x00, 0x04, 0x00, 0x09, 0x00, 0x0d, // .'...>.......... + 0x00, 0x11, 0x00, 0x15, 0x00, 0x19, 0x00, 0x1d, 0x00, 0x21, 0x00, 0x25, 0x00, 0x29, 0x00, 0x2d, // .........!.%.).- + 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x3d, 0x00, 0x41, 0x00, 0x45, 0x00, 0x49, 0x00, 0x4d, // .1.5.9.=.A.E.I.M + 0x00, 0x51, 0x00, 0x55, 0x00, 0x59, 0x00, 0x5d, 0x00, 0x61, 0x00, 0x67, 0x00, 0x6b, 0x00, 0x6f, // .Q.U.Y.].a.g.k.o + 0x00, 0x73, 0x00, 0x77, 0x00, 0x7b, 0x00, 0x7f, 0x00, 0x85, 0x00, 0x89, 0x00, 0x8d, 0x00, 0x91, // .s.w.{.......... + 0x00, 0x95, 0x00, 0x99, 0x00, 0xa5, 0x00, 0xd5, 0x00, 0x00, 0x11, 0x21, 0x11, 0x09, 0x01, 0x25, // ...........!...% + 0x11, 0x21, 0x11, 0x09, 0x01, 0x35, 0x21, 0x15, 0x13, 0x15, 0x23, 0x35, 0x17, 0x15, 0x23, 0x35, // .!...5!...#5..#5 + 0x17, 0x15, 0x23, 0x35, 0x17, 0x15, 0x23, 0x35, 0x17, 0x15, 0x23, 0x35, 0x17, 0x37, 0x17, 0x07, // ..#5..#5..#5.7.. + 0x17, 0x37, 0x17, 0x07, 0x17, 0x37, 0x17, 0x07, 0x17, 0x37, 0x17, 0x07, 0x3f, 0x01, 0x17, 0x07, // .7...7...7..?... + 0x3f, 0x01, 0x17, 0x07, 0x3f, 0x01, 0x17, 0x07, 0x3f, 0x01, 0x17, 0x07, 0x01, 0x15, 0x23, 0x35, // ?...?...?.....#5 + 0x21, 0x15, 0x23, 0x35, 0x21, 0x15, 0x23, 0x35, 0x21, 0x15, 0x23, 0x35, 0x21, 0x15, 0x23, 0x35, // !.#5!.#5!.#5!.#5 + 0x21, 0x15, 0x23, 0x35, 0x21, 0x15, 0x23, 0x35, 0x21, 0x15, 0x23, 0x35, 0x01, 0x15, 0x23, 0x35, // !.#5!.#5!.#5..#5 + 0x33, 0x15, 0x37, 0x15, 0x23, 0x35, 0x21, 0x15, 0x23, 0x35, 0x21, 0x15, 0x23, 0x35, 0x21, 0x15, // 3.7.#5!.#5!.#5!. + 0x23, 0x35, 0x21, 0x15, 0x23, 0x35, 0x21, 0x15, 0x23, 0x35, 0x17, 0x35, 0x23, 0x35, 0x33, 0x15, // #5!.#5!.#5.5#53. + 0x07, 0x35, 0x33, 0x15, 0x07, 0x35, 0x33, 0x15, 0x07, 0x35, 0x33, 0x15, 0x07, 0x35, 0x33, 0x15, // .53..53..53..53. + 0x07, 0x35, 0x33, 0x15, 0x25, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, // .53.%"&54632.... + 0x01, 0x14, 0x1e, 0x02, 0x36, 0x16, 0x15, 0x14, 0x23, 0x22, 0x27, 0x23, 0x07, 0x16, 0x33, 0x32, // ....6...#"'#..32 + 0x3e, 0x02, 0x35, 0x34, 0x2e, 0x01, 0x06, 0x26, 0x35, 0x34, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x17, // >.54...&54>.32.. + 0x33, 0x37, 0x2e, 0x06, 0x23, 0x22, 0x0e, 0x02, 0x06, 0x00, 0xfc, 0xf8, 0xfd, 0x08, 0x05, 0x9c, // 37..#".......... + 0xfa, 0xc8, 0x02, 0x95, 0x02, 0xa3, 0xfa, 0xc8, 0x51, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, // ........Q%%%%%%% + 0x25, 0x25, 0x3f, 0x0f, 0x69, 0x0f, 0x1f, 0x0f, 0x69, 0x0f, 0x1e, 0x0f, 0x69, 0x0f, 0x1f, 0x0f, // %%?.i...i...i... + 0x68, 0x0f, 0x4f, 0x69, 0x0f, 0x69, 0x78, 0x69, 0x0f, 0x69, 0x79, 0x69, 0x0f, 0x69, 0x78, 0x69, // h.Oi.ixi.iyi.ixi + 0x0f, 0x69, 0xfc, 0x41, 0x72, 0x01, 0x14, 0x73, 0x01, 0x15, 0x73, 0x01, 0x14, 0x72, 0x01, 0x14, // .i.Ar..s..s..r.. + 0x72, 0x01, 0x14, 0x73, 0x01, 0x15, 0x73, 0x01, 0x14, 0x72, 0xfb, 0xb8, 0x25, 0x73, 0xa2, 0x73, // r..s..s..r..%s.s + 0x01, 0x15, 0x73, 0x01, 0x14, 0x72, 0x01, 0x14, 0x72, 0x01, 0x14, 0x73, 0x01, 0x15, 0x73, 0xf0, // ..s..r..r..s..s. + 0x4e, 0x73, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0xfd, 0x88, 0x81, 0xb8, // Ns%%%%%%%%%%.... + 0xb8, 0x81, 0x82, 0xb7, 0xb7, 0xfe, 0xd9, 0x27, 0x3c, 0x44, 0x3c, 0x27, 0x70, 0x61, 0x1a, 0x03, // .......'.32......# + 0x22, 0x2e, 0x01, 0x35, 0x34, 0x00, 0x33, 0x32, 0x1e, 0x05, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, // "..54.32..32654& + 0x23, 0x22, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x0e, 0x02, // #".#"&54654&#".. + 0x23, 0x22, 0x26, 0x35, 0x34, 0x37, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x15, 0x14, 0x07, 0x36, 0x05, // #"&547>.32....6. + 0x96, 0x01, 0x04, 0x94, 0xd2, 0xda, 0x9e, 0x55, 0x9a, 0x7a, 0x72, 0x68, 0x67, 0x72, 0x78, 0x98, // .......U.zrhgrx. + 0x53, 0x9a, 0xc3, 0xd0, 0x9f, 0x64, 0xd8, 0x55, 0x05, 0x20, 0x1c, 0x08, 0x0e, 0x15, 0x3c, 0x65, // S....d.U. .....7.#"&463 + 0x21, 0x32, 0x1e, 0x04, 0x17, 0x21, 0x32, 0x16, 0x04, 0xc0, 0x26, 0x1a, 0x80, 0x26, 0x34, 0x26, // !2...!2...&..&4& + 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x26, 0x34, 0x26, 0x80, 0x1a, 0xfd, 0xe6, 0x4b, 0x6a, 0x4b, // ..&&..&4&....KjK + 0x4b, 0x6a, 0x03, 0xcb, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0xcb, 0x20, 0x19, 0xfb, 0xec, 0x01, 0x07, // Kj..KjKKj. ..... + 0x05, 0x18, 0x03, 0x98, 0x1a, 0x26, 0x26, 0x1a, 0xfc, 0x00, 0x1a, 0x26, 0x16, 0x25, 0x02, 0xb1, // .....&&....&.%.. + 0xcc, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0x00, 0x10, 0x19, 0x0f, 0x0b, 0x04, 0x07, 0x01, 0x04, 0xb1, // ..&&............ + 0x1a, 0x26, 0x03, 0x26, 0x34, 0x26, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x26, 0x34, 0x26, 0x80, // .&.&4&..&&..&4&. + 0x1a, 0x26, 0x26, 0x1a, 0x80, 0xfd, 0x35, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0x4b, // .&&...5jKKjKKjKK + 0x6a, 0x4b, 0x03, 0xc0, 0xfe, 0x00, 0x18, 0x25, 0x03, 0x7a, 0x07, 0x1d, 0x18, 0x0a, 0x10, 0x30, // jK.....%.z.....0 + 0x26, 0x34, 0x26, 0x26, 0x1a, 0x0e, 0x33, 0x44, 0x04, 0x03, 0x37, 0x26, 0x34, 0x26, 0x0d, 0x12, // &4&&..3D..7&4&.. + 0x1f, 0x16, 0x25, 0x07, 0x26, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0xff, 0x80, 0x06, 0x80, // ..%.&........... + 0x05, 0x00, 0x00, 0x17, 0x00, 0x1f, 0x00, 0x27, 0x00, 0x53, 0x00, 0x00, 0x00, 0x34, 0x26, 0x22, // .......'.S...4&" + 0x0f, 0x01, 0x11, 0x34, 0x26, 0x22, 0x06, 0x15, 0x11, 0x27, 0x26, 0x22, 0x06, 0x14, 0x17, 0x01, // ...4&"...'&".... + 0x16, 0x32, 0x37, 0x01, 0x00, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x04, 0x14, 0x06, 0x22, // .27...."&462..." + 0x26, 0x34, 0x36, 0x32, 0x13, 0x11, 0x14, 0x06, 0x07, 0x05, 0x1e, 0x02, 0x15, 0x14, 0x07, 0x21, // &462...........! + 0x32, 0x16, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x34, 0x3e, 0x01, 0x37, 0x03, 0x23, 0x22, // 2...#!"&54>.7.#" + 0x26, 0x34, 0x36, 0x33, 0x21, 0x32, 0x1e, 0x04, 0x17, 0x21, 0x32, 0x16, 0x05, 0x00, 0x26, 0x34, // &463!2...!2...&4 + 0x13, 0x93, 0x26, 0x34, 0x26, 0x93, 0x13, 0x34, 0x26, 0x13, 0x01, 0x00, 0x13, 0x34, 0x13, 0x01, // ..&4&..4&....4.. + 0x00, 0xfd, 0x93, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x03, 0xcb, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0xcb, // ...KjKKj..KjKKj. + 0x20, 0x19, 0xfb, 0xec, 0x01, 0x07, 0x05, 0x18, 0x03, 0x98, 0x1a, 0x26, 0x26, 0x1a, 0xfc, 0x00, // ..........&&... + 0x1a, 0x26, 0x16, 0x25, 0x02, 0xb1, 0xcc, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0x00, 0x10, 0x19, 0x0f, // .&.%....&&...... + 0x0b, 0x04, 0x07, 0x01, 0x04, 0xb1, 0x1a, 0x26, 0x03, 0x26, 0x34, 0x26, 0x13, 0x92, 0x01, 0x25, // .......&.&4&...% + 0x1a, 0x26, 0x26, 0x1a, 0xfe, 0xdb, 0x92, 0x13, 0x26, 0x34, 0x13, 0xff, 0x00, 0x13, 0x13, 0x01, // .&&.....&4...... + 0x00, 0xfd, 0x22, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0x03, 0xc0, // .."jKKjKKjKKjK.. + 0xfe, 0x00, 0x18, 0x25, 0x03, 0x7a, 0x07, 0x1d, 0x18, 0x0a, 0x10, 0x30, 0x26, 0x34, 0x26, 0x26, // ...%.z.....0&4&& + 0x1a, 0x0e, 0x33, 0x44, 0x04, 0x03, 0x37, 0x26, 0x34, 0x26, 0x0d, 0x12, 0x1f, 0x16, 0x25, 0x07, // ..3D..7&4&....%. + 0x26, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0xff, 0x00, 0x08, 0x00, 0x05, 0x80, 0x00, 0x02, // &............... + 0x00, 0x05, 0x00, 0x09, 0x00, 0x0c, 0x00, 0x10, 0x00, 0x14, 0x00, 0x26, 0x00, 0x00, 0x13, 0x09, // ...........&.... + 0x03, 0x21, 0x27, 0x13, 0x21, 0x09, 0x02, 0x21, 0x25, 0x21, 0x03, 0x21, 0x01, 0x21, 0x01, 0x21, // .!'.!..!%!.!.!.! + 0x25, 0x01, 0x16, 0x06, 0x07, 0x01, 0x06, 0x22, 0x27, 0x01, 0x2e, 0x01, 0x37, 0x01, 0x36, 0x33, // %......"'...7.63 + 0x21, 0x32, 0xd4, 0x02, 0x6f, 0xfe, 0xd4, 0x01, 0xe9, 0x01, 0x5d, 0xfd, 0x46, 0x89, 0xcc, 0xfe, // !2..o.....].F... + 0xfa, 0xfe, 0xe0, 0x03, 0xfd, 0x02, 0x6f, 0xfe, 0xbd, 0xfc, 0xc2, 0x02, 0xaa, 0xcc, 0xfe, 0xee, // ......o......... + 0x02, 0x6f, 0x01, 0x5a, 0xfe, 0xe0, 0xfe, 0xfa, 0x01, 0x59, 0x01, 0x80, 0x0e, 0x02, 0x10, 0xfc, // .o.Z.....Y...... + 0x40, 0x12, 0x3a, 0x12, 0xfc, 0x40, 0x10, 0x02, 0x0e, 0x01, 0x80, 0x12, 0x21, 0x04, 0x80, 0x21, // @.:..@......!..! + 0x03, 0x00, 0xfd, 0x67, 0x02, 0x99, 0xfc, 0xfc, 0x03, 0x04, 0x80, 0x01, 0x80, 0xfe, 0x80, 0xfc, // ...g............ + 0xe7, 0x02, 0x99, 0x80, 0x01, 0x80, 0xfe, 0x80, 0x01, 0x80, 0x66, 0xfe, 0x00, 0x12, 0x2f, 0x11, // ..........f.../. + 0xfc, 0x00, 0x14, 0x14, 0x04, 0x00, 0x11, 0x2f, 0x12, 0x02, 0x00, 0x1a, 0x00, 0x03, 0x00, 0x13, // ......./........ + 0xff, 0x00, 0x07, 0xed, 0x06, 0x00, 0x00, 0x49, 0x00, 0x97, 0x00, 0xa0, 0x00, 0x00, 0x05, 0x36, // .......I.......6 + 0x32, 0x1f, 0x01, 0x07, 0x27, 0x07, 0x06, 0x22, 0x2f, 0x01, 0x07, 0x06, 0x22, 0x2f, 0x01, 0x07, // 2...'.."/..."/.. + 0x06, 0x22, 0x2f, 0x01, 0x07, 0x06, 0x22, 0x2f, 0x01, 0x07, 0x06, 0x22, 0x2f, 0x01, 0x07, 0x06, // ."/..."/..."/... + 0x22, 0x2f, 0x01, 0x07, 0x06, 0x22, 0x2f, 0x01, 0x37, 0x17, 0x37, 0x36, 0x32, 0x1f, 0x01, 0x37, // "/..."/.7.762..7 + 0x36, 0x32, 0x1f, 0x01, 0x37, 0x36, 0x32, 0x1f, 0x01, 0x37, 0x36, 0x32, 0x1f, 0x01, 0x37, 0x36, // 62..762..762..76 + 0x32, 0x1f, 0x01, 0x37, 0x36, 0x32, 0x1f, 0x01, 0x25, 0x06, 0x22, 0x2f, 0x01, 0x37, 0x17, 0x37, // 2..762..%."/.7.7 + 0x36, 0x32, 0x1f, 0x01, 0x37, 0x11, 0x03, 0x26, 0x36, 0x3f, 0x01, 0x11, 0x33, 0x35, 0x21, 0x35, // 62..7..&6?..35!5 + 0x21, 0x15, 0x21, 0x15, 0x33, 0x11, 0x17, 0x1e, 0x01, 0x07, 0x03, 0x11, 0x37, 0x36, 0x32, 0x1f, // !.!.3.......762. + 0x01, 0x37, 0x36, 0x32, 0x1f, 0x01, 0x07, 0x27, 0x07, 0x06, 0x22, 0x2f, 0x01, 0x07, 0x06, 0x22, // .762...'.."/..." + 0x2f, 0x01, 0x07, 0x06, 0x22, 0x2f, 0x01, 0x07, 0x06, 0x22, 0x2f, 0x01, 0x07, 0x06, 0x22, 0x2f, // /..."/..."/..."/ + 0x01, 0x07, 0x06, 0x22, 0x2f, 0x01, 0x01, 0x15, 0x25, 0x05, 0x35, 0x23, 0x35, 0x21, 0x15, 0x07, // ..."/...%.5#5!.. + 0x13, 0x13, 0x34, 0x13, 0x80, 0x5a, 0x53, 0x53, 0x12, 0x36, 0x12, 0x53, 0x53, 0x13, 0x34, 0x13, // ..4..ZSS.6.SS.4. + 0x53, 0x53, 0x13, 0x34, 0x13, 0x53, 0x53, 0x13, 0x34, 0x13, 0x53, 0x53, 0x13, 0x34, 0x13, 0x53, // SS.4.SS.4.SS.4.S + 0x53, 0x13, 0x34, 0x13, 0x53, 0x53, 0x13, 0x34, 0x13, 0x80, 0x5a, 0x53, 0x53, 0x13, 0x34, 0x13, // S.4.SS.4..ZSS.4. + 0x53, 0x53, 0x13, 0x34, 0x13, 0x53, 0x53, 0x13, 0x34, 0x13, 0x53, 0x53, 0x13, 0x34, 0x13, 0x53, // SS.4.SS.4.SS.4.S + 0x53, 0x13, 0x34, 0x13, 0x53, 0x53, 0x13, 0x34, 0x13, 0x53, 0xfa, 0x2d, 0x13, 0x34, 0x13, 0x80, // S.4.SS.4.S.-.4.. + 0x5a, 0x53, 0x53, 0x13, 0x34, 0x13, 0x53, 0x40, 0xd2, 0x11, 0x14, 0x1e, 0xb1, 0x80, 0x01, 0x00, // ZSS.4.S@........ + 0x01, 0x00, 0x01, 0x00, 0x80, 0xb1, 0x1e, 0x14, 0x11, 0xd2, 0x13, 0x13, 0x34, 0x13, 0x53, 0x53, // ............4.SS + 0x13, 0x34, 0x13, 0x80, 0x5a, 0x53, 0x53, 0x12, 0x36, 0x12, 0x53, 0x53, 0x13, 0x34, 0x13, 0x53, // .4..ZSS.6.SS.4.S + 0x53, 0x13, 0x34, 0x13, 0x53, 0x53, 0x13, 0x34, 0x13, 0x53, 0x53, 0x13, 0x34, 0x13, 0x53, 0x53, // S.4.SS.4.SS.4.SS + 0x13, 0x34, 0x13, 0x53, 0x01, 0x40, 0x01, 0x80, 0x01, 0x80, 0x80, 0xfe, 0x00, 0x13, 0x13, 0x13, // .4.S.@.......... + 0x80, 0x5a, 0x53, 0x53, 0x13, 0x13, 0x53, 0x53, 0x13, 0x13, 0x53, 0x53, 0x13, 0x13, 0x53, 0x53, // .ZSS..SS..SS..SS + 0x13, 0x13, 0x53, 0x53, 0x13, 0x13, 0x53, 0x53, 0x13, 0x13, 0x53, 0x53, 0x13, 0x13, 0x80, 0x5a, // ..SS..SS..SS...Z + 0x53, 0x53, 0x13, 0x13, 0x53, 0x53, 0x13, 0x13, 0x53, 0x53, 0x13, 0x13, 0x53, 0x53, 0x13, 0x13, // SS..SS..SS..SS.. + 0x53, 0x53, 0x13, 0x13, 0x53, 0x53, 0x13, 0x13, 0x53, 0x79, 0x13, 0x13, 0x80, 0x5a, 0x52, 0x52, // SS..SS..Sy...ZRR + 0x13, 0x13, 0x52, 0x40, 0x01, 0x25, 0x01, 0x3a, 0x1a, 0x3d, 0x0a, 0x3a, 0x01, 0x2b, 0x80, 0x80, // ..R@.%.:.=.:.+.. + 0x80, 0x80, 0xfe, 0xd5, 0x3a, 0x0a, 0x3d, 0x1a, 0xfe, 0xc6, 0xfe, 0xdb, 0x12, 0x13, 0x13, 0x52, // ....:.=........R + 0x52, 0x13, 0x13, 0x80, 0x5a, 0x53, 0x53, 0x13, 0x13, 0x53, 0x53, 0x13, 0x13, 0x53, 0x53, 0x13, // R...ZSS..SS..SS. + 0x13, 0x53, 0x53, 0x13, 0x13, 0x53, 0x53, 0x13, 0x13, 0x53, 0x53, 0x13, 0x13, 0x53, 0x04, 0x1a, // .SS..SS..SS..S.. + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0xff, 0x80, 0x05, 0x80, // ................ + 0x06, 0x00, 0x00, 0x03, 0x00, 0x07, 0x00, 0x43, 0x00, 0x76, 0x00, 0x00, 0x21, 0x13, 0x2f, 0x01, // .......C.v..!./. + 0x01, 0x13, 0x0f, 0x01, 0x01, 0x26, 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x22, 0x27, 0x26, 0x23, // .....&'&#".."'&# + 0x22, 0x07, 0x06, 0x07, 0x16, 0x17, 0x1e, 0x01, 0x17, 0x1e, 0x09, 0x33, 0x32, 0x3e, 0x03, 0x3b, // "..........32>.; + 0x01, 0x32, 0x1e, 0x03, 0x33, 0x32, 0x3e, 0x08, 0x37, 0x3e, 0x01, 0x37, 0x36, 0x01, 0x14, 0x06, // .2..32>.7>.76... + 0x23, 0x21, 0x22, 0x26, 0x35, 0x34, 0x3e, 0x03, 0x37, 0x27, 0x33, 0x26, 0x35, 0x34, 0x37, 0x26, // #!"&54>.7'3&547& + 0x35, 0x34, 0x37, 0x3e, 0x01, 0x37, 0x36, 0x33, 0x32, 0x16, 0x32, 0x36, 0x33, 0x32, 0x17, 0x1e, // 547>.7632.2632.. + 0x01, 0x17, 0x16, 0x15, 0x14, 0x07, 0x16, 0x07, 0x33, 0x07, 0x1e, 0x03, 0x02, 0x40, 0x60, 0x60, // ........3....@`` + 0x80, 0x01, 0x80, 0x80, 0x80, 0x60, 0x01, 0x00, 0x02, 0x02, 0x0a, 0x56, 0x46, 0x61, 0x07, 0x1c, // .....`.....VFa.. + 0x07, 0x61, 0x46, 0x56, 0x0a, 0x02, 0x02, 0x02, 0x02, 0x02, 0x0b, 0x02, 0x02, 0x0b, 0x03, 0x0c, // .aFV............ + 0x05, 0x0d, 0x0b, 0x11, 0x12, 0x17, 0x0d, 0x24, 0x2e, 0x13, 0x0a, 0x0d, 0x0b, 0x0c, 0x0b, 0x0d, // .......$........ + 0x0a, 0x13, 0x2e, 0x24, 0x0d, 0x17, 0x12, 0x11, 0x0b, 0x0d, 0x05, 0x0c, 0x03, 0x0b, 0x02, 0x02, // ...$............ + 0x0b, 0x02, 0x02, 0x01, 0xa2, 0x92, 0x79, 0xfc, 0x96, 0x79, 0x92, 0x09, 0x1d, 0x2e, 0x51, 0x35, // ......y..y....Q5 + 0x5a, 0xd6, 0x16, 0x02, 0xc2, 0xd2, 0x11, 0x45, 0x24, 0x20, 0x2c, 0x1e, 0x6c, 0x3c, 0x6c, 0x1e, // Z......E$ ,.l + 0x90, 0x2a, 0x25, 0x3e, 0x3e, 0x25, 0x2a, 0x90, 0x3e, 0x2a, 0x39, 0x38, 0x28, 0x51, 0x4f, 0xe1, // .*%>>%*.>*98(QO. + 0x21, 0x7f, 0xa0, 0x8f, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x08, 0xfd, 0x05, 0x00, 0x00, 0x4c, // !..............L + 0x00, 0x5c, 0x00, 0x70, 0x00, 0x00, 0x01, 0x16, 0x0e, 0x02, 0x27, 0x2e, 0x01, 0x27, 0x26, 0x36, // ...p......'..'&6 + 0x37, 0x27, 0x0e, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x23, 0x0e, 0x01, 0x23, 0x22, 0x00, 0x10, // 7'.....#!#..#".. + 0x00, 0x33, 0x32, 0x17, 0x37, 0x26, 0x2b, 0x01, 0x22, 0x26, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x1e, // .32.7&+."&46;.2. + 0x02, 0x17, 0x21, 0x33, 0x27, 0x23, 0x22, 0x26, 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x32, 0x1f, 0x01, // ..!3'#"&7>.;.2.. + 0x37, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x1d, 0x01, 0x14, 0x06, 0x2b, 0x01, 0x17, 0x36, 0x17, 0x1e, // 76;.2.....+..6.. + 0x01, 0x01, 0x32, 0x36, 0x37, 0x21, 0x22, 0x27, 0x26, 0x37, 0x13, 0x26, 0x23, 0x22, 0x06, 0x10, // ..267!"'&7.&#".. + 0x16, 0x28, 0x01, 0x36, 0x10, 0x26, 0x23, 0x22, 0x07, 0x13, 0x16, 0x06, 0x07, 0x06, 0x23, 0x22, // .(.6.&#"......#" + 0x27, 0x03, 0x06, 0x15, 0x14, 0x08, 0xfd, 0x0c, 0x44, 0x82, 0xbb, 0x67, 0xa1, 0xed, 0x10, 0x0c, // '.......D..g.... + 0x4f, 0x4f, 0x47, 0x60, 0x6e, 0x25, 0x1b, 0xff, 0x00, 0x45, 0x17, 0xfc, 0xa8, 0xb9, 0xfe, 0xf9, // OOG`n%...E...... + 0x01, 0x07, 0xb9, 0x4c, 0x4c, 0x18, 0x7b, 0xb5, 0x40, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x4e, 0x86, // ...LL.{.@.&&..N. + 0x63, 0x2c, 0x1d, 0x02, 0x00, 0x73, 0x55, 0xde, 0x1e, 0x26, 0x05, 0x04, 0x26, 0x18, 0xfd, 0x21, // c,...sU..&..&..! + 0x14, 0x46, 0x72, 0x13, 0x1b, 0x65, 0x1a, 0x26, 0x26, 0x1a, 0xb3, 0x73, 0x83, 0x90, 0x8f, 0xca, // .Fr..e.&&..s.... + 0xf8, 0xd4, 0x73, 0xb0, 0x17, 0xfe, 0xc6, 0x23, 0x14, 0x12, 0x11, 0x93, 0x2f, 0x2c, 0x84, 0xbc, // ..s....#..../,.. + 0xbc, 0x05, 0x80, 0x01, 0x08, 0xbc, 0xbc, 0x84, 0x3c, 0x3d, 0xae, 0x0f, 0x0a, 0x16, 0x0f, 0x15, // ........<=...... + 0x23, 0x12, 0xae, 0x5d, 0x01, 0xf4, 0x67, 0xbf, 0x88, 0x4c, 0x07, 0x0b, 0xe4, 0xa0, 0x6f, 0xc7, // #..]..g..L....o. + 0x47, 0x6b, 0x50, 0xe4, 0x82, 0x1b, 0x27, 0xa4, 0xdc, 0x01, 0x07, 0x01, 0x72, 0x01, 0x07, 0x1b, // GkP...'.....r... + 0x2d, 0x6e, 0x26, 0x34, 0x26, 0x1b, 0x32, 0x1d, 0x16, 0x80, 0x2d, 0x1e, 0x17, 0x1e, 0x1c, 0x69, // -n&4&.2...-....i + 0x72, 0x13, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0xac, 0x3f, 0x1b, 0x1a, 0xd9, 0xfd, 0xfb, 0x91, 0x6f, // r.&...&.?......o + 0x1f, 0x20, 0x1f, 0x01, 0x15, 0x0d, 0xbc, 0xfe, 0xf8, 0xbc, 0xbc, 0x01, 0x08, 0xbc, 0x18, 0xfe, // . .............. + 0xfc, 0x17, 0x34, 0x0e, 0x0b, 0x1d, 0x01, 0x04, 0x5f, 0x82, 0x84, 0x00, 0x00, 0x03, 0x00, 0x00, // ..4....._....... + 0xff, 0x00, 0x05, 0x80, 0x05, 0xe0, 0x00, 0x35, 0x00, 0x4f, 0x00, 0x57, 0x00, 0x00, 0x21, 0x14, // .......5.O.W..!. + 0x0e, 0x02, 0x20, 0x2e, 0x02, 0x35, 0x34, 0x3e, 0x02, 0x37, 0x36, 0x16, 0x17, 0x16, 0x06, 0x07, // .. ..54>.76..... + 0x0e, 0x04, 0x07, 0x1e, 0x04, 0x32, 0x3e, 0x03, 0x37, 0x2e, 0x04, 0x27, 0x2e, 0x01, 0x37, 0x3e, // .....2>.7..'..7> + 0x01, 0x17, 0x1e, 0x03, 0x01, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, // ........+....#!" + 0x26, 0x35, 0x11, 0x23, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x02, 0x14, // &5.#"&5.463!2... + 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x05, 0x80, 0x7b, 0xcd, 0xf5, 0xfe, 0xfa, 0xf5, 0xcd, 0x7b, // ."&462..{......{ + 0x42, 0x74, 0x78, 0x47, 0x1a, 0x2c, 0x04, 0x05, 0x1f, 0x1a, 0x3a, 0x60, 0x39, 0x28, 0x0f, 0x01, // BtxG.,....:`9(.. + 0x03, 0x30, 0x62, 0x82, 0xbf, 0xd4, 0xbf, 0x82, 0x62, 0x30, 0x03, 0x01, 0x0f, 0x28, 0x39, 0x60, // .0b.....b0...(9` + 0x3a, 0x1a, 0x1f, 0x05, 0x04, 0x2c, 0x1a, 0x47, 0x78, 0x74, 0x42, 0xfe, 0x80, 0x26, 0x1a, 0x40, // :....,.GxtB..&.@ + 0x26, 0x1a, 0xff, 0x00, 0x1a, 0x26, 0x40, 0x1a, 0x26, 0x4b, 0x35, 0x01, 0x80, 0x35, 0x4b, 0x60, // &....&@.&K5..5K` + 0x83, 0xba, 0x83, 0x83, 0xba, 0x3f, 0x65, 0x3d, 0x1f, 0x1f, 0x3d, 0x65, 0x3f, 0x31, 0x4f, 0x36, // .....?e=..=e?1O6 + 0x23, 0x0c, 0x05, 0x1f, 0x1a, 0x1a, 0x2c, 0x04, 0x0a, 0x1b, 0x18, 0x17, 0x10, 0x04, 0x0b, 0x1f, // #.....,......... + 0x23, 0x1e, 0x14, 0x14, 0x1e, 0x24, 0x1f, 0x0c, 0x04, 0x0e, 0x18, 0x17, 0x1b, 0x0a, 0x04, 0x2c, // #....$........., + 0x1a, 0x1a, 0x1f, 0x05, 0x0c, 0x23, 0x36, 0x4f, 0x03, 0x4f, 0xfe, 0x80, 0x1a, 0x26, 0xfe, 0x80, // .....#6O.O...&.. + 0x1a, 0x26, 0x26, 0x1a, 0x01, 0x80, 0x26, 0x1a, 0x01, 0x80, 0x35, 0x4b, 0x4b, 0x01, 0xa8, 0xba, // .&&...&...5KK... + 0x83, 0x83, 0xba, 0x83, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x07, 0x00, 0x05, 0x80, 0x00, 0x1b, // ................ + 0x00, 0x3f, 0x00, 0x00, 0x01, 0x21, 0x0e, 0x01, 0x0f, 0x01, 0x01, 0x06, 0x22, 0x27, 0x01, 0x26, // .?...!......"'.& + 0x27, 0x21, 0x32, 0x36, 0x37, 0x1b, 0x01, 0x1e, 0x01, 0x33, 0x32, 0x36, 0x37, 0x13, 0x17, 0x16, // '!267....3267... + 0x01, 0x14, 0x07, 0x21, 0x27, 0x2e, 0x01, 0x07, 0x06, 0x07, 0x0b, 0x01, 0x2e, 0x01, 0x22, 0x06, // ...!'.........". + 0x07, 0x03, 0x21, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x1e, 0x02, 0x17, 0x3e, 0x03, 0x33, 0x32, // ..!&54632...>.32 + 0x16, 0x05, 0x00, 0x01, 0x31, 0x05, 0x0a, 0x04, 0x03, 0xfd, 0x91, 0x12, 0x34, 0x12, 0xfd, 0x90, // ....1.......4... + 0x05, 0x10, 0x01, 0x71, 0x16, 0x23, 0x05, 0x46, 0xbe, 0x06, 0x22, 0x16, 0x15, 0x22, 0x06, 0x92, // ...q.#.F.."..".. + 0x38, 0x12, 0x02, 0x27, 0x67, 0xfe, 0x8f, 0x6f, 0x08, 0x23, 0x13, 0x2d, 0x0b, 0x81, 0xc4, 0x06, // 8..'g..o.#.-.... + 0x23, 0x2c, 0x22, 0x05, 0x74, 0xfe, 0x59, 0x67, 0xfe, 0xe0, 0x3e, 0x81, 0x6f, 0x50, 0x24, 0x24, // #,".t.Yg..>.oP$$ + 0x50, 0x6f, 0x81, 0x3e, 0xe0, 0xfe, 0x02, 0x00, 0x06, 0x09, 0x03, 0x04, 0xfd, 0xa8, 0x12, 0x12, // Po.>............ + 0x02, 0x5a, 0x02, 0x12, 0x1b, 0x15, 0x01, 0x19, 0xfd, 0x65, 0x14, 0x1a, 0x1a, 0x14, 0x01, 0xe5, // .Z.......e...... + 0x70, 0x23, 0x01, 0xac, 0x91, 0x9b, 0xdd, 0x11, 0x14, 0x02, 0x05, 0x29, 0xfe, 0x52, 0x02, 0xae, // p#.........).R.. + 0x14, 0x1a, 0x1b, 0x15, 0xfe, 0x30, 0x9b, 0x91, 0xdc, 0xf8, 0x2b, 0x49, 0x40, 0x24, 0x24, 0x40, // .....0....+I@$$@ + 0x49, 0x2b, 0xf8, 0x00, 0x00, 0x02, 0x00, 0x02, 0xff, 0x00, 0x04, 0x80, 0x05, 0xfc, 0x00, 0x2b, // I+.............+ + 0x00, 0x33, 0x00, 0x00, 0x01, 0x14, 0x00, 0x07, 0x11, 0x33, 0x32, 0x16, 0x1d, 0x01, 0x14, 0x06, // .3.......32..... + 0x2b, 0x01, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x23, 0x22, 0x26, 0x3d, 0x01, // +....+."&=.#"&=. + 0x34, 0x36, 0x3b, 0x01, 0x11, 0x2e, 0x01, 0x02, 0x37, 0x3e, 0x02, 0x37, 0x36, 0x04, 0x12, 0x24, // 46;.....7>.76..$ + 0x10, 0x00, 0x20, 0x00, 0x10, 0x00, 0x20, 0x04, 0x80, 0xfe, 0xd9, 0xd9, 0xe0, 0x0e, 0x12, 0x12, // .. ... ......... + 0x0e, 0xe0, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0xe0, 0x0e, 0x12, 0x12, 0x0e, 0xe0, 0x96, 0xf3, 0x81, // ....@........... + 0x0c, 0x0b, 0x8b, 0xe1, 0x85, 0xaa, 0x01, 0x2a, 0xae, 0xfc, 0x00, 0x01, 0x07, 0x01, 0x72, 0x01, // .......*......r. + 0x07, 0xfe, 0xf9, 0xfe, 0x8e, 0x03, 0xc0, 0xdd, 0xfe, 0xb9, 0x18, 0xfe, 0xfc, 0x12, 0x0e, 0x40, // ...............@ + 0x0e, 0x12, 0xe0, 0x0e, 0x12, 0x12, 0x0e, 0xe0, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x01, 0x04, 0x10, // ..........@..... + 0xae, 0x01, 0x12, 0x9b, 0x86, 0xe6, 0x92, 0x0f, 0x13, 0x92, 0xfe, 0xea, 0x12, 0xfe, 0x8e, 0xfe, // ................ + 0xf9, 0x01, 0x07, 0x01, 0x72, 0x01, 0x07, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // ....r........... + 0x05, 0x80, 0x00, 0x27, 0x00, 0x2f, 0x00, 0x00, 0x01, 0x32, 0x16, 0x15, 0x11, 0x14, 0x06, 0x2b, // ...'./...2.....+ + 0x01, 0x22, 0x26, 0x35, 0x11, 0x01, 0x16, 0x15, 0x14, 0x0e, 0x02, 0x22, 0x2e, 0x02, 0x34, 0x3e, // ."&5......."..4> + 0x02, 0x33, 0x32, 0x17, 0x01, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x00, 0x20, 0x00, // .32..!"&=.463. . + 0x10, 0x00, 0x20, 0x00, 0x10, 0x05, 0xc0, 0x1a, 0x26, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0xfe, 0x82, // .. .....&..@.... + 0x7e, 0x5b, 0x9b, 0xd5, 0xea, 0xd5, 0x9b, 0x5b, 0x5b, 0x9b, 0xd5, 0x75, 0xcb, 0x9c, 0x01, 0x7e, // ~[.....[[..u...~ + 0xfe, 0xfb, 0x0e, 0x12, 0x12, 0x0e, 0xfd, 0x67, 0x01, 0x72, 0x01, 0x07, 0xfe, 0xf9, 0xfe, 0x8e, // .......g.r...... + 0xfe, 0xf9, 0x05, 0x80, 0x26, 0x1a, 0xfe, 0x60, 0x0e, 0x12, 0x12, 0x0e, 0x01, 0x06, 0xfe, 0x81, // ....&..`........ + 0x9c, 0xcb, 0x75, 0xd5, 0x9b, 0x5b, 0x5b, 0x9b, 0xd5, 0xea, 0xd5, 0x9b, 0x5b, 0x7e, 0x01, 0x7e, // ..u..[[.....[~.~ + 0x12, 0x0e, 0x40, 0x0e, 0x12, 0xfa, 0x80, 0x01, 0x07, 0x01, 0x72, 0x01, 0x07, 0xfe, 0xf9, 0xfe, // ..@.......r..... + 0x8e, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x00, 0x04, 0x80, 0x06, 0x00, 0x00, 0x3d, // ...............= + 0x00, 0x45, 0x00, 0x00, 0x01, 0x16, 0x12, 0x15, 0x14, 0x00, 0x07, 0x15, 0x33, 0x32, 0x16, 0x1d, // .E..........32.. + 0x01, 0x14, 0x06, 0x2b, 0x01, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x23, 0x22, // ...+....+."&=.#" + 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x35, 0x26, 0x00, 0x35, 0x34, 0x12, 0x37, 0x26, 0x27, // &=.46;.5&.54.7&' + 0x26, 0x36, 0x3b, 0x01, 0x32, 0x17, 0x1e, 0x01, 0x32, 0x36, 0x37, 0x36, 0x3b, 0x01, 0x32, 0x16, // &6;.2...2676;.2. + 0x07, 0x06, 0x00, 0x20, 0x00, 0x10, 0x00, 0x20, 0x00, 0x10, 0x03, 0x3e, 0x91, 0xb1, 0xfe, 0xd9, // ... ... ...>.... + 0xd9, 0x60, 0x0e, 0x12, 0x12, 0x0e, 0x60, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x60, 0x0e, 0x12, 0x12, // .`....`..@..`... + 0x0e, 0x60, 0xd9, 0xfe, 0xd9, 0xb1, 0x91, 0xa5, 0x3f, 0x06, 0x13, 0x11, 0x45, 0x15, 0x08, 0x2c, // .`......?...E.., + 0xc0, 0xec, 0xc0, 0x2c, 0x08, 0x1d, 0x3d, 0x11, 0x13, 0x06, 0x3f, 0xfd, 0xa4, 0x01, 0x72, 0x01, // ...,..=...?...r. + 0x07, 0xfe, 0xf9, 0xfe, 0x8e, 0xfe, 0xf9, 0x04, 0xc4, 0x48, 0xfe, 0xeb, 0xa7, 0xdd, 0xfe, 0xb9, // .........H...... + 0x18, 0x84, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x60, 0x0e, 0x12, 0x12, 0x0e, 0x60, 0x12, 0x0e, 0x40, // ....@..`....`..@ + 0x0e, 0x12, 0x84, 0x18, 0x01, 0x47, 0xdd, 0xa7, 0x01, 0x15, 0x48, 0x60, 0xb1, 0x10, 0x1b, 0x14, // .....G....H`.... + 0x6a, 0x82, 0x82, 0x6a, 0x14, 0x1b, 0x10, 0xb1, 0xfb, 0xdc, 0x01, 0x07, 0x01, 0x72, 0x01, 0x07, // j..j.........r.. + 0xfe, 0xf9, 0xfe, 0x8e, 0x00, 0x02, 0x00, 0x02, 0xff, 0x00, 0x05, 0x80, 0x06, 0x00, 0x00, 0x42, // ...............B + 0x00, 0x4a, 0x00, 0x00, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x15, 0x11, 0x14, 0x06, 0x2b, // .J...463!2.....+ + 0x01, 0x22, 0x26, 0x3d, 0x01, 0x07, 0x16, 0x15, 0x14, 0x00, 0x07, 0x15, 0x33, 0x32, 0x16, 0x1d, // ."&=........32.. + 0x01, 0x14, 0x06, 0x2b, 0x01, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x23, 0x22, // ...+....+."&=.#" + 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x35, 0x2e, 0x01, 0x02, 0x37, 0x36, 0x00, 0x37, 0x36, // &=.46;.5...76.76 + 0x16, 0x17, 0x25, 0x23, 0x22, 0x26, 0x35, 0x00, 0x20, 0x00, 0x10, 0x00, 0x20, 0x00, 0x10, 0x04, // ..%#"&5. ... ... + 0x00, 0x12, 0x0e, 0x01, 0x20, 0x1a, 0x26, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0xfe, 0x7e, 0xfe, 0xd9, // .... .&..@...~.. + 0xd9, 0x60, 0x0e, 0x12, 0x12, 0x0e, 0x60, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x60, 0x0e, 0x12, 0x12, // .`....`..@..`... + 0x0e, 0x60, 0x95, 0xf3, 0x82, 0x0c, 0x10, 0x01, 0x20, 0xcb, 0x76, 0xdc, 0x58, 0x00, 0xff, 0x86, // .`...... .v.X... + 0x0e, 0x12, 0xfd, 0x87, 0x01, 0x72, 0x01, 0x07, 0xfe, 0xf9, 0xfe, 0x8e, 0xfe, 0xf9, 0x05, 0xe0, // .....r.......... + 0x0e, 0x12, 0x26, 0x1a, 0xfe, 0xe0, 0x0e, 0x12, 0x12, 0x0e, 0x86, 0xff, 0x9e, 0xc9, 0xdd, 0xfe, // ..&............. + 0xb9, 0x18, 0x84, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x60, 0x0e, 0x12, 0x12, 0x0e, 0x60, 0x12, 0x0e, // .....@..`....`.. + 0x40, 0x0e, 0x12, 0x84, 0x10, 0xae, 0x01, 0x11, 0x9b, 0xcc, 0x01, 0x2b, 0x17, 0x0e, 0x42, 0x46, // @..........+..BF + 0xfe, 0x12, 0x0e, 0xfb, 0x60, 0x01, 0x07, 0x01, 0x72, 0x01, 0x07, 0xfe, 0xf9, 0xfe, 0x8e, 0x00, // ....`...r....... + 0x00, 0x02, 0x00, 0x00, 0xff, 0x00, 0x06, 0x80, 0x06, 0x00, 0x00, 0x6b, 0x00, 0x73, 0x00, 0x00, // ...........k.s.. + 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x15, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, // .463!2.....+."&= + 0x01, 0x07, 0x16, 0x15, 0x14, 0x00, 0x07, 0x15, 0x33, 0x32, 0x16, 0x1d, 0x01, 0x14, 0x06, 0x2b, // ........32.....+ + 0x01, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x23, 0x22, 0x26, 0x3d, 0x01, 0x34, // ....+."&=.#"&=.4 + 0x36, 0x3b, 0x01, 0x35, 0x26, 0x00, 0x35, 0x34, 0x37, 0x27, 0x07, 0x0e, 0x01, 0x2f, 0x01, 0x2e, // 6;.5&.547'.../.. + 0x01, 0x3f, 0x01, 0x27, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, // .?.'...+."&5.463 + 0x21, 0x32, 0x16, 0x1d, 0x01, 0x14, 0x06, 0x2b, 0x01, 0x17, 0x37, 0x3e, 0x01, 0x1f, 0x01, 0x1e, // !2.....+..7>.... + 0x01, 0x0f, 0x01, 0x17, 0x36, 0x20, 0x17, 0x25, 0x23, 0x22, 0x26, 0x35, 0x00, 0x20, 0x00, 0x10, // ....6 .%#"&5. .. + 0x00, 0x20, 0x00, 0x10, 0x05, 0x00, 0x12, 0x0e, 0x01, 0x20, 0x1a, 0x26, 0x12, 0x0e, 0x40, 0x0e, // . ....... .&..@. + 0x12, 0xfe, 0x7e, 0xfe, 0xd9, 0xd9, 0x60, 0x0e, 0x12, 0x12, 0x0e, 0x60, 0x12, 0x0e, 0x40, 0x0e, // ..~...`....`..@. + 0x12, 0x60, 0x0e, 0x12, 0x12, 0x0e, 0x60, 0xd9, 0xfe, 0xd9, 0x7e, 0x34, 0x65, 0x09, 0x1a, 0x0a, // .`....`...~4e... + 0x30, 0x0a, 0x01, 0x09, 0x69, 0x6f, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x26, 0x1a, 0x01, 0x20, 0x0e, // 0...io..@..&.. . + 0x12, 0x12, 0x0e, 0x85, 0x6a, 0x56, 0x09, 0x1a, 0x0a, 0x30, 0x0a, 0x01, 0x09, 0x5a, 0x39, 0x9e, // ....jV...0...Z9. + 0x01, 0x92, 0x9e, 0x00, 0xff, 0x86, 0x0e, 0x12, 0xfd, 0x87, 0x01, 0x72, 0x01, 0x07, 0xfe, 0xf9, // ...........r.... + 0xfe, 0x8e, 0xfe, 0xf9, 0x05, 0xe0, 0x0e, 0x12, 0x26, 0x1a, 0xfe, 0xe0, 0x0e, 0x12, 0x12, 0x0e, // ........&....... + 0x86, 0xff, 0x9e, 0xc9, 0xdd, 0xfe, 0xb9, 0x18, 0x84, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x60, 0x0e, // ...........@..`. + 0x12, 0x12, 0x0e, 0x60, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x84, 0x18, 0x01, 0x47, 0xdd, 0xc9, 0x9e, // ...`..@.....G... + 0x35, 0x6f, 0x0a, 0x01, 0x08, 0x2c, 0x08, 0x1b, 0x0a, 0x73, 0x70, 0x86, 0x0e, 0x12, 0x12, 0x0e, // 5o...,...sp..... + 0x01, 0x20, 0x1a, 0x26, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x6b, 0x5e, 0x0a, 0x01, 0x08, 0x2c, 0x08, // . .&..@..k^...,. + 0x1b, 0x0a, 0x63, 0x38, 0x7e, 0x7e, 0xfe, 0x12, 0x0e, 0xfb, 0x60, 0x01, 0x07, 0x01, 0x72, 0x01, // ..c8~~....`...r. + 0x07, 0xfe, 0xf9, 0xfe, 0x8e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x02, 0xff, 0x00, 0x06, 0xfe, // ................ + 0x05, 0xfd, 0x00, 0x38, 0x00, 0x3e, 0x00, 0x4b, 0x00, 0x52, 0x00, 0x5f, 0x00, 0x00, 0x01, 0x16, // ...8.>.K.R._.... + 0x02, 0x06, 0x07, 0x11, 0x33, 0x32, 0x16, 0x1d, 0x01, 0x14, 0x06, 0x2b, 0x01, 0x15, 0x14, 0x06, // ....32.....+.... + 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x21, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, // +."&=.!...+."&=. + 0x23, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x11, 0x2e, 0x01, 0x02, 0x37, 0x36, 0x00, // #"&=.46;.....76. + 0x37, 0x36, 0x17, 0x36, 0x17, 0x16, 0x00, 0x01, 0x36, 0x10, 0x27, 0x06, 0x10, 0x03, 0x32, 0x37, // 76.6....6.'...27 + 0x26, 0x35, 0x34, 0x37, 0x26, 0x23, 0x22, 0x00, 0x10, 0x00, 0x01, 0x11, 0x26, 0x27, 0x06, 0x07, // &547&#".....&'.. + 0x11, 0x01, 0x32, 0x00, 0x10, 0x00, 0x23, 0x22, 0x07, 0x16, 0x15, 0x14, 0x07, 0x16, 0x06, 0xfe, // ..2...#"........ + 0x0c, 0x81, 0xf3, 0x96, 0xe0, 0x0e, 0x12, 0x12, 0x0e, 0xe0, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0xfe, // ............@... + 0x00, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0xe0, 0x0e, 0x12, 0x12, 0x0e, 0xe0, 0x96, 0xf3, 0x81, 0x0c, // ...@............ + 0x11, 0x01, 0x27, 0xcd, 0xce, 0xab, 0xab, 0xce, 0xcd, 0x01, 0x27, 0xfc, 0x93, 0x80, 0x80, 0x80, // ..'.......'..... + 0xc0, 0x73, 0x67, 0x9a, 0x9a, 0x67, 0x73, 0xb9, 0xfe, 0xf9, 0x01, 0x07, 0x02, 0xf9, 0x89, 0x77, // .sg..gs........w + 0x77, 0x89, 0x02, 0x40, 0xb9, 0x01, 0x07, 0xfe, 0xf9, 0xb9, 0x73, 0x67, 0x9a, 0x9a, 0x67, 0x03, // w..@......sg..g. + 0xef, 0x9b, 0xfe, 0xee, 0xae, 0x10, 0xfe, 0xfc, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0xe0, 0x0e, 0x12, // ..........@..... + 0x12, 0x0e, 0xe0, 0xe0, 0x0e, 0x12, 0x12, 0x0e, 0xe0, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x01, 0x04, // ...........@.... + 0x10, 0xae, 0x01, 0x12, 0x9b, 0xce, 0x01, 0x2d, 0x13, 0x15, 0x73, 0x73, 0x15, 0x13, 0xfe, 0xd3, // .......-..ss.... + 0xfd, 0xca, 0x83, 0x01, 0x6c, 0x83, 0x83, 0xfe, 0x94, 0xfe, 0xf6, 0x39, 0xa5, 0xe2, 0xe0, 0xa7, // ....l......9.... + 0x39, 0xfe, 0xf9, 0xfe, 0x8e, 0xfe, 0xf9, 0xfe, 0x80, 0x01, 0x04, 0x0f, 0x4f, 0x4f, 0x0f, 0xfe, // 9...........OO.. + 0xfc, 0x01, 0x80, 0x01, 0x07, 0x01, 0x72, 0x01, 0x07, 0x39, 0xa7, 0xe0, 0xe2, 0xa5, 0x39, 0x00, // ......r..9....9. + 0x00, 0x04, 0x00, 0x01, 0xff, 0x06, 0x07, 0x80, 0x06, 0x00, 0x00, 0x46, 0x00, 0x50, 0x00, 0x5e, // ...........F.P.^ + 0x00, 0x6c, 0x00, 0x00, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x15, 0x11, 0x14, 0x06, 0x2b, // .l...463!2.....+ + 0x01, 0x22, 0x26, 0x3d, 0x01, 0x07, 0x1e, 0x01, 0x07, 0x06, 0x00, 0x07, 0x06, 0x24, 0x27, 0x2e, // ."&=.........$'. + 0x03, 0x37, 0x3e, 0x02, 0x37, 0x36, 0x16, 0x17, 0x25, 0x23, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, // .7>.76..%#"&=.46 + 0x33, 0x21, 0x32, 0x16, 0x15, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x07, 0x16, // 3!2.....+."&=... + 0x17, 0x16, 0x17, 0x25, 0x23, 0x22, 0x26, 0x35, 0x01, 0x34, 0x27, 0x0e, 0x01, 0x15, 0x14, 0x17, // ...%#"&5.4'..... + 0x3e, 0x01, 0x25, 0x14, 0x16, 0x17, 0x26, 0x35, 0x34, 0x00, 0x37, 0x2e, 0x01, 0x23, 0x22, 0x00, // >.%...&54.7..#". + 0x01, 0x32, 0x00, 0x35, 0x34, 0x26, 0x27, 0x16, 0x15, 0x14, 0x00, 0x07, 0x1e, 0x01, 0x06, 0x00, // .2.54&'......... + 0x12, 0x0e, 0x01, 0x20, 0x1a, 0x26, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0xfe, 0x4c, 0x3f, 0x16, 0x1f, // ... .&..@...L?.. + 0xfe, 0xf2, 0xb7, 0xd2, 0xfe, 0xa3, 0x43, 0x75, 0xd0, 0x93, 0x50, 0x08, 0x09, 0x8a, 0xe2, 0x87, // ......Cu..P..... + 0x76, 0xdb, 0x59, 0x00, 0xff, 0x86, 0x0e, 0x12, 0x12, 0x0e, 0x01, 0x20, 0x1a, 0x26, 0x12, 0x0e, // v.Y........ .&.. + 0x40, 0x0e, 0x12, 0xfe, 0x3b, 0x22, 0xb6, 0x92, 0x00, 0xff, 0x86, 0x0e, 0x12, 0xfe, 0x00, 0x04, // @...;".......... + 0xa2, 0xda, 0x04, 0xa2, 0xda, 0xfc, 0x80, 0xde, 0xa5, 0x03, 0x01, 0x0e, 0xcb, 0x35, 0xdd, 0x87, // .............5.. + 0xb9, 0xfe, 0xf9, 0x03, 0xc0, 0xb9, 0x01, 0x07, 0xde, 0xa5, 0x03, 0xfe, 0xf2, 0xcb, 0x35, 0xdd, // ..............5. + 0x04, 0x60, 0x0e, 0x12, 0x26, 0x1a, 0xfe, 0xe0, 0x0e, 0x12, 0x12, 0x0e, 0x86, 0xff, 0x5f, 0xee, // .`..&........._. + 0x80, 0xb6, 0xfe, 0xfc, 0x1a, 0x1d, 0xda, 0xbf, 0x06, 0x67, 0xa3, 0xde, 0x77, 0x87, 0xea, 0x95, // .........g..w... + 0x0f, 0x0e, 0x42, 0x46, 0xfe, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x26, 0x1a, 0xfe, 0xe0, 0x0e, 0x12, // ..BF...@..&..... + 0x12, 0x0e, 0x86, 0xff, 0x4a, 0x5f, 0x09, 0x73, 0xfe, 0x12, 0x0e, 0xfe, 0xa0, 0x14, 0x26, 0x19, // ....J_.s......&. + 0xfa, 0xa7, 0x14, 0x26, 0x19, 0xfa, 0xa7, 0xa8, 0xfc, 0x17, 0x1d, 0x1e, 0xd2, 0x01, 0x3f, 0x25, // ...&..........?% + 0x78, 0x92, 0xfe, 0xf9, 0xfc, 0x07, 0x01, 0x07, 0xb9, 0xa8, 0xfc, 0x17, 0x1c, 0x1f, 0xd2, 0xfe, // x............... + 0xc1, 0x25, 0x78, 0x92, 0x00, 0x04, 0x00, 0x06, 0xff, 0x00, 0x08, 0x00, 0x06, 0x00, 0x00, 0x4a, // .%x............J + 0x00, 0x50, 0x00, 0x5c, 0x00, 0x68, 0x00, 0x00, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x15, // .P...h...463!2.. + 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x07, 0x1e, 0x01, 0x07, 0x06, 0x00, 0x07, // ...+."&=........ + 0x06, 0x27, 0x06, 0x07, 0x15, 0x33, 0x32, 0x16, 0x1d, 0x01, 0x14, 0x06, 0x2b, 0x01, 0x15, 0x14, // .'...32.....+... + 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x23, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, // .+."&=.#"&=.46;. + 0x35, 0x2e, 0x01, 0x02, 0x37, 0x36, 0x00, 0x37, 0x36, 0x17, 0x36, 0x33, 0x32, 0x17, 0x25, 0x23, // 5...76.76.632.%# + 0x22, 0x26, 0x35, 0x01, 0x36, 0x10, 0x27, 0x06, 0x10, 0x00, 0x10, 0x00, 0x33, 0x32, 0x37, 0x26, // "&5.6.'.....327& + 0x10, 0x37, 0x26, 0x23, 0x22, 0x01, 0x32, 0x00, 0x10, 0x00, 0x23, 0x22, 0x07, 0x16, 0x10, 0x07, // .7&#".2...#".... + 0x16, 0x06, 0x80, 0x12, 0x0e, 0x01, 0x20, 0x1a, 0x26, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0xfe, 0x4c, // ...... .&..@...L + 0x3f, 0x16, 0x20, 0xfe, 0xf7, 0xb5, 0xdf, 0xba, 0x75, 0x8b, 0x60, 0x0e, 0x12, 0x12, 0x0e, 0x60, // ?. .....u.`....` + 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x60, 0x0e, 0x12, 0x12, 0x0e, 0x60, 0x9b, 0xf9, 0x7d, 0x17, 0x19, // ..@..`....`..}.. + 0x01, 0x0d, 0xba, 0xe0, 0xba, 0x92, 0xae, 0xc9, 0x9e, 0x00, 0xff, 0x86, 0x0e, 0x12, 0xfd, 0x00, // ................ + 0x80, 0x80, 0x80, 0xfd, 0x80, 0x01, 0x07, 0xb9, 0x75, 0x65, 0x9a, 0x9a, 0x65, 0x75, 0xb9, 0x03, // ........ue..eu.. + 0x39, 0xb9, 0x01, 0x07, 0xfe, 0xf9, 0xb9, 0x75, 0x65, 0x9a, 0x9a, 0x65, 0x05, 0xe0, 0x0e, 0x12, // 9......ue..e.... + 0x26, 0x1a, 0xfe, 0xe0, 0x0e, 0x12, 0x12, 0x0e, 0x86, 0xff, 0x5f, 0xee, 0x80, 0xb4, 0xfe, 0xfc, // &........._..... + 0x1b, 0x22, 0x7c, 0x4e, 0x0f, 0x84, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x60, 0x0e, 0x12, 0x12, 0x0e, // ."|N....@..`.... + 0x60, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x84, 0x11, 0xb9, 0x01, 0x22, 0xa2, 0xbb, 0x01, 0x0f, 0x1d, // `..@......"..... + 0x22, 0x7c, 0x61, 0x7e, 0xfe, 0x12, 0x0e, 0xfb, 0xe7, 0x83, 0x01, 0x6c, 0x83, 0x83, 0xfe, 0x94, // "|a~.......l.... + 0x01, 0x6f, 0xfe, 0x8e, 0xfe, 0xf9, 0x39, 0xa7, 0x01, 0xc0, 0xa7, 0x39, 0xfc, 0x80, 0x01, 0x07, // .o....9....9.... + 0x01, 0x72, 0x01, 0x07, 0x39, 0xa7, 0xfe, 0x40, 0xa7, 0x39, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // .r..9..@.9...... + 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x3b, 0x00, 0x43, 0x00, 0x00, 0x01, 0x32, 0x16, 0x15, // .......;.C...2.. + 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, 0x07, 0x17, 0x16, 0x14, 0x0f, 0x01, 0x06, // ...+."&5........ + 0x22, 0x2f, 0x01, 0x07, 0x16, 0x15, 0x14, 0x0e, 0x02, 0x22, 0x2e, 0x02, 0x34, 0x3e, 0x02, 0x33, // "/......."..4>.3 + 0x32, 0x17, 0x37, 0x27, 0x26, 0x34, 0x3f, 0x01, 0x36, 0x32, 0x1f, 0x01, 0x37, 0x21, 0x22, 0x26, // 2.7'&4?.62..7!"& + 0x3d, 0x01, 0x34, 0x36, 0x33, 0x00, 0x20, 0x00, 0x10, 0x00, 0x20, 0x00, 0x10, 0x05, 0xc0, 0x1a, // =.463. ... ..... + 0x26, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0xd5, 0x8c, 0x09, 0x09, 0x2e, 0x09, 0x1a, 0x0a, 0x8c, 0x4e, // &..@...........N + 0x7e, 0x5b, 0x9b, 0xd5, 0xea, 0xd5, 0x9b, 0x5b, 0x5b, 0x9b, 0xd5, 0x75, 0xcb, 0x9c, 0x4e, 0xac, // ~[.....[[..u..N. + 0x09, 0x09, 0x2e, 0x09, 0x1a, 0x0a, 0xac, 0xd5, 0xfe, 0xfb, 0x0e, 0x12, 0x12, 0x0e, 0xfd, 0x67, // ...............g + 0x01, 0x72, 0x01, 0x07, 0xfe, 0xf9, 0xfe, 0x8e, 0xfe, 0xf9, 0x05, 0x80, 0x26, 0x1a, 0xfe, 0x60, // .r..........&..` + 0x0e, 0x12, 0x12, 0x0e, 0x01, 0x06, 0xd6, 0x8c, 0x0a, 0x1a, 0x09, 0x2e, 0x09, 0x09, 0x8d, 0x4f, // ...............O + 0x9c, 0xcb, 0x75, 0xd5, 0x9b, 0x5b, 0x5b, 0x9b, 0xd5, 0xea, 0xd5, 0x9b, 0x5b, 0x7e, 0x4e, 0xac, // ..u..[[.....[~N. + 0x0a, 0x1a, 0x09, 0x2e, 0x09, 0x09, 0xac, 0xd5, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0xfa, 0x80, 0x01, // ..........@..... + 0x07, 0x01, 0x72, 0x01, 0x07, 0xfe, 0xf9, 0xfe, 0x8e, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02, // ..r............. + 0xff, 0x04, 0x04, 0x80, 0x06, 0x00, 0x00, 0x39, 0x00, 0x41, 0x00, 0x00, 0x01, 0x16, 0x00, 0x15, // .......9.A...... + 0x14, 0x02, 0x04, 0x27, 0x2e, 0x02, 0x27, 0x26, 0x12, 0x36, 0x37, 0x35, 0x23, 0x22, 0x26, 0x3d, // ...'..'&.675#"&= + 0x01, 0x34, 0x36, 0x3b, 0x01, 0x35, 0x07, 0x06, 0x22, 0x2f, 0x01, 0x26, 0x34, 0x3f, 0x01, 0x36, // .46;.5.."/.&4?.6 + 0x32, 0x1f, 0x01, 0x16, 0x14, 0x0f, 0x01, 0x06, 0x22, 0x2f, 0x01, 0x15, 0x33, 0x32, 0x16, 0x1d, // 2......."/..32.. + 0x01, 0x14, 0x06, 0x2b, 0x01, 0x02, 0x20, 0x00, 0x10, 0x00, 0x20, 0x00, 0x10, 0x02, 0x80, 0xd9, // ...+.. ... ..... + 0x01, 0x27, 0xae, 0xfe, 0xd6, 0xaa, 0x85, 0xe1, 0x8b, 0x0b, 0x0c, 0x81, 0xf3, 0x96, 0xa0, 0x0e, // .'.............. + 0x12, 0x12, 0x0e, 0xa0, 0x5c, 0x0a, 0x1a, 0x09, 0x2e, 0x09, 0x09, 0xca, 0x13, 0x34, 0x13, 0xca, // .............4.. + 0x09, 0x09, 0x2e, 0x09, 0x1a, 0x0a, 0x5c, 0xa0, 0x0e, 0x12, 0x12, 0x0e, 0xa0, 0xf9, 0x01, 0x72, // ...............r + 0x01, 0x07, 0xfe, 0xf9, 0xfe, 0x8e, 0xfe, 0xf9, 0x03, 0x7c, 0x18, 0xfe, 0xb9, 0xdd, 0xa7, 0xfe, // .........|...... + 0xea, 0x92, 0x13, 0x0f, 0x92, 0xe6, 0x86, 0x9b, 0x01, 0x12, 0xae, 0x10, 0x84, 0x12, 0x0e, 0x40, // ...............@ + 0x0e, 0x12, 0xa5, 0x5c, 0x09, 0x09, 0x2e, 0x09, 0x1a, 0x0a, 0xc9, 0x13, 0x13, 0xc9, 0x0a, 0x1a, // ................ + 0x09, 0x2e, 0x09, 0x09, 0x5c, 0xa5, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0xfb, 0x80, 0x01, 0x07, 0x01, // ........@....... + 0x72, 0x01, 0x07, 0xfe, 0xf9, 0xfe, 0x8e, 0x00, 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x07, 0x80, // r............... + 0x04, 0x7e, 0x00, 0x39, 0x00, 0x41, 0x00, 0x00, 0x01, 0x16, 0x14, 0x07, 0x01, 0x06, 0x22, 0x2f, // .~.9.A........"/ + 0x01, 0x26, 0x34, 0x3f, 0x01, 0x21, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x23, // .&4?.!...+."&=.# + 0x06, 0x00, 0x23, 0x22, 0x24, 0x02, 0x37, 0x3e, 0x02, 0x37, 0x36, 0x04, 0x16, 0x17, 0x33, 0x35, // ..#"$.7>.76...35 + 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x1d, 0x01, 0x21, 0x27, 0x26, 0x34, 0x3f, 0x01, 0x36, 0x32, // 46;.2...!'&4?.62 + 0x17, 0x00, 0x20, 0x00, 0x10, 0x00, 0x20, 0x00, 0x10, 0x07, 0x6d, 0x13, 0x13, 0xfe, 0xda, 0x09, // .. ... ...m..... + 0x1b, 0x09, 0x2d, 0x0a, 0x0a, 0xb9, 0xfe, 0xda, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x84, 0x18, 0xfe, // ..-.......@..... + 0xb9, 0xdd, 0xa7, 0xfe, 0xea, 0x92, 0x13, 0x0f, 0x92, 0xe6, 0x86, 0x9b, 0x01, 0x12, 0xae, 0x10, // ................ + 0x84, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x01, 0x26, 0xb9, 0x0a, 0x0a, 0x2d, 0x09, 0x1b, 0x09, 0xfb, // ...@...&...-.... + 0x40, 0x01, 0x72, 0x01, 0x07, 0xfe, 0xf9, 0xfe, 0x8e, 0xfe, 0xf9, 0x02, 0x6d, 0x13, 0x34, 0x13, // @.r.........m.4. + 0xfe, 0xda, 0x0a, 0x0a, 0x2d, 0x09, 0x1b, 0x09, 0xb9, 0xe0, 0x0e, 0x12, 0x12, 0x0e, 0xe0, 0xd9, // ....-........... + 0xfe, 0xd9, 0xae, 0x01, 0x2a, 0xaa, 0x85, 0xe1, 0x8b, 0x0b, 0x0c, 0x81, 0xf3, 0x96, 0xe0, 0x0e, // ....*........... + 0x12, 0x12, 0x0e, 0xe0, 0xb9, 0x09, 0x1b, 0x09, 0x2d, 0x0a, 0x0a, 0xfc, 0xed, 0x01, 0x07, 0x01, // ........-....... + 0x72, 0x01, 0x07, 0xfe, 0xf9, 0xfe, 0x8e, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x00, 0x04, 0x80, // r............... + 0x06, 0x00, 0x00, 0x17, 0x00, 0x1f, 0x00, 0x00, 0x01, 0x14, 0x00, 0x07, 0x11, 0x14, 0x06, 0x2b, // ...............+ + 0x01, 0x22, 0x26, 0x35, 0x11, 0x26, 0x00, 0x35, 0x34, 0x3e, 0x02, 0x32, 0x1e, 0x02, 0x00, 0x20, // ."&5.&.54>.2... + 0x00, 0x10, 0x00, 0x20, 0x00, 0x10, 0x04, 0x80, 0xfe, 0xd9, 0xd9, 0x12, 0x0e, 0x40, 0x0e, 0x12, // ... .........@.. + 0xd9, 0xfe, 0xd9, 0x5b, 0x9b, 0xd5, 0xea, 0xd5, 0x9b, 0x5b, 0xfd, 0x07, 0x01, 0x72, 0x01, 0x07, // ...[.....[...r.. + 0xfe, 0xf9, 0xfe, 0x8e, 0xfe, 0xf9, 0x03, 0xc0, 0xdd, 0xfe, 0xb9, 0x18, 0xfd, 0x9c, 0x0e, 0x12, // ................ + 0x12, 0x0e, 0x02, 0x64, 0x18, 0x01, 0x47, 0xdd, 0x75, 0xd5, 0x9b, 0x5b, 0x5b, 0x9b, 0xd5, 0xfd, // ...d..G.u..[[... + 0xcb, 0x01, 0x07, 0x01, 0x72, 0x01, 0x07, 0xfe, 0xf9, 0xfe, 0x8e, 0x00, 0x00, 0x02, 0x00, 0x00, // ....r........... + 0x00, 0x00, 0x04, 0x80, 0x04, 0x80, 0x00, 0x07, 0x00, 0x17, 0x00, 0x00, 0x00, 0x10, 0x00, 0x20, // ............... + 0x00, 0x10, 0x00, 0x20, 0x00, 0x14, 0x0e, 0x02, 0x22, 0x2e, 0x02, 0x34, 0x3e, 0x02, 0x32, 0x1e, // ... ...."..4>.2. + 0x01, 0x04, 0x00, 0xfe, 0xf9, 0xfe, 0x8e, 0xfe, 0xf9, 0x01, 0x07, 0x01, 0x72, 0x01, 0x87, 0x5b, // ............r..[ + 0x9b, 0xd5, 0xea, 0xd5, 0x9b, 0x5b, 0x5b, 0x9b, 0xd5, 0xea, 0xd5, 0x9b, 0x01, 0x87, 0x01, 0x72, // .....[[........r + 0x01, 0x07, 0xfe, 0xf9, 0xfe, 0x8e, 0xfe, 0xf9, 0x02, 0x35, 0xea, 0xd5, 0x9b, 0x5b, 0x5b, 0x9b, // .........5...[[. + 0xd5, 0xea, 0xd5, 0x9b, 0x5b, 0x5b, 0x9b, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // ....[[.......... + 0x05, 0x80, 0x00, 0x24, 0x00, 0x00, 0x01, 0x32, 0x16, 0x15, 0x11, 0x14, 0x06, 0x23, 0x21, 0x11, // ...$...2.....#!. + 0x33, 0x37, 0x23, 0x35, 0x34, 0x36, 0x33, 0x37, 0x35, 0x26, 0x23, 0x22, 0x06, 0x1d, 0x01, 0x23, // 37#546375&#"...# + 0x15, 0x33, 0x11, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x05, 0xab, 0x23, 0x32, 0x32, // .3.!"&5.463..#22 + 0x23, 0xfe, 0x79, 0xc7, 0x1e, 0xe5, 0x2f, 0x44, 0x7a, 0x3f, 0x73, 0x88, 0xa3, 0xc8, 0xc8, 0xfd, // #.y.../Dz?s..... + 0x21, 0x23, 0x32, 0x32, 0x23, 0x05, 0x80, 0x32, 0x23, 0xfa, 0xaa, 0x23, 0x32, 0x02, 0x53, 0xe8, // !#22#..2#..#2.S. + 0x94, 0x38, 0x38, 0x01, 0xcf, 0x09, 0xa0, 0x92, 0xab, 0xe8, 0xfd, 0xad, 0x32, 0x23, 0x05, 0x56, // .88.........2#.V + 0x23, 0x32, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0x80, 0x05, 0x00, 0x06, 0x00, 0x00, 0x4c, // #2.............L + 0x00, 0x00, 0x11, 0x34, 0x3e, 0x03, 0x33, 0x32, 0x04, 0x16, 0x15, 0x14, 0x0e, 0x03, 0x23, 0x22, // ...4>.32......#" + 0x26, 0x27, 0x0e, 0x06, 0x0f, 0x01, 0x27, 0x26, 0x35, 0x34, 0x36, 0x12, 0x37, 0x26, 0x35, 0x34, // &'....'&546.7&54 + 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x15, 0x14, 0x16, 0x33, 0x32, 0x3e, 0x04, 0x35, 0x34, // 632.......32>.54 + 0x26, 0x23, 0x22, 0x00, 0x15, 0x14, 0x1e, 0x02, 0x15, 0x14, 0x06, 0x23, 0x22, 0x27, 0x2e, 0x03, // &#"........#"'.. + 0x4b, 0x84, 0xac, 0xc6, 0x67, 0x9e, 0x01, 0x10, 0xaa, 0x26, 0x52, 0x76, 0xac, 0x67, 0x44, 0x86, // K...g....&Rv.gD. + 0x1d, 0x0a, 0x24, 0x0b, 0x1e, 0x16, 0x2a, 0x32, 0x25, 0x0e, 0x09, 0x0f, 0x2b, 0x5a, 0x07, 0x20, // ..$...*2%...+Z. + 0x68, 0x50, 0x3d, 0x44, 0x58, 0x5a, 0x40, 0x37, 0x5e, 0x3f, 0x31, 0x1b, 0x0d, 0xdb, 0xb0, 0xc8, // hP=DXZ@7^?1..... + 0xfe, 0xf4, 0x19, 0x1d, 0x19, 0x1e, 0x16, 0x02, 0x0f, 0x33, 0x4f, 0x2b, 0x16, 0x03, 0xab, 0x6c, // .........3O+...l + 0xbf, 0x8e, 0x68, 0x34, 0x85, 0xfe, 0xa0, 0x60, 0xb8, 0xaa, 0x81, 0x4d, 0x40, 0x38, 0x27, 0x93, // ..h4...`...M@8'. + 0x2b, 0x63, 0x2b, 0x52, 0x49, 0x32, 0x05, 0x0a, 0x9d, 0x1f, 0x5c, 0xe5, 0x01, 0x5a, 0x1e, 0x41, // +c+RI2.......Z.A + 0x68, 0x53, 0x92, 0x51, 0x3e, 0x42, 0xfa, 0x3e, 0x3f, 0x53, 0x32, 0x56, 0x68, 0x75, 0x69, 0x2f, // hS.Q>B.>?S2Vhui/ + 0xad, 0xc1, 0xfe, 0xfd, 0xc7, 0x2c, 0x52, 0x30, 0x2b, 0x09, 0x1c, 0x5a, 0x03, 0x0f, 0x52, 0x6b, // .....,R0+..Z..Rk + 0x6d, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x7a, 0x06, 0x00, 0x05, 0x86, 0x00, 0x2b, // m........z.....+ + 0x00, 0x3e, 0x00, 0x51, 0x00, 0x00, 0x00, 0x32, 0x16, 0x17, 0x16, 0x15, 0x14, 0x07, 0x0e, 0x01, // .>.Q...2........ + 0x23, 0x22, 0x27, 0x2e, 0x01, 0x27, 0x26, 0x37, 0x35, 0x36, 0x37, 0x36, 0x33, 0x32, 0x16, 0x33, // #"'..'&7567632.3 + 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x15, 0x14, 0x17, 0x16, 0x17, 0x16, 0x17, 0x16, // 2............... + 0x33, 0x32, 0x03, 0x32, 0x3e, 0x02, 0x34, 0x2e, 0x02, 0x22, 0x0e, 0x02, 0x15, 0x14, 0x17, 0x07, // 32.2>.4.."...... + 0x37, 0x16, 0x12, 0x20, 0x04, 0x16, 0x12, 0x10, 0x02, 0x06, 0x04, 0x23, 0x22, 0x27, 0x05, 0x13, // 7.. .......#"'.. + 0x26, 0x35, 0x34, 0x12, 0x36, 0x03, 0xcc, 0x1a, 0xa9, 0x05, 0x02, 0x11, 0x10, 0x6e, 0x2f, 0x39, // &54.6........n/9 + 0x85, 0x62, 0x90, 0x4c, 0x48, 0x01, 0x03, 0x47, 0x18, 0x1c, 0x06, 0x18, 0x07, 0x13, 0x0f, 0x08, // .b.LH..G........ + 0x08, 0x32, 0x45, 0x05, 0x22, 0x44, 0x38, 0x5f, 0x0c, 0x0a, 0x0f, 0x70, 0x7f, 0xe9, 0xa8, 0x64, // .2E."D8_...p...d + 0x64, 0xa8, 0xe9, 0xfe, 0xe9, 0xa8, 0x64, 0x78, 0x4f, 0xf2, 0x9e, 0x22, 0x01, 0x32, 0x01, 0x17, // d.....dxO..".2.. + 0xca, 0x78, 0x78, 0xca, 0xfe, 0xe9, 0x99, 0xc3, 0xaa, 0xfe, 0x5f, 0x88, 0x6c, 0x78, 0xca, 0x02, // .xx......._.lx.. + 0x32, 0x58, 0x09, 0x05, 0x0a, 0x21, 0x2b, 0x27, 0x35, 0x3e, 0x2d, 0x92, 0x70, 0x6b, 0x57, 0x08, // 2X...!+'5>-.pkW. + 0x5b, 0x43, 0x16, 0x03, 0x0d, 0x15, 0x14, 0x88, 0x07, 0x15, 0x49, 0x0a, 0x07, 0x08, 0x49, 0x40, // [C........I...I@ + 0x35, 0x30, 0x07, 0xfe, 0x4f, 0x64, 0xa8, 0xe9, 0xfe, 0xe9, 0xa8, 0x64, 0x64, 0xa8, 0xe9, 0x7f, // 50..Od.....dd... + 0xcb, 0xa5, 0xe9, 0x4d, 0x68, 0x05, 0x66, 0x78, 0xca, 0xfe, 0xe9, 0xfe, 0xce, 0xfe, 0xe9, 0xca, // ...Mh.fx........ + 0x78, 0x5e, 0x86, 0x01, 0x95, 0xb2, 0xd3, 0x99, 0x01, 0x17, 0xca, 0x00, 0x00, 0x09, 0x00, 0x00, // x^.............. + 0x00, 0x00, 0x07, 0x00, 0x05, 0x80, 0x00, 0x03, 0x00, 0x07, 0x00, 0x0f, 0x00, 0x13, 0x00, 0x1b, // ................ + 0x00, 0x23, 0x00, 0x27, 0x00, 0x2b, 0x00, 0x2f, 0x00, 0x00, 0x37, 0x21, 0x35, 0x21, 0x11, 0x21, // .#.'.+./..7!5!.! + 0x35, 0x21, 0x00, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x01, 0x21, 0x35, 0x21, 0x00, 0x34, // 5!.4&"...2.!5!.4 + 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x12, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x13, 0x11, // &"...2.4&"...2.. + 0x21, 0x11, 0x01, 0x11, 0x21, 0x11, 0x01, 0x11, 0x21, 0x11, 0x80, 0x04, 0x00, 0xfc, 0x00, 0x04, // !...!...!....... + 0x00, 0xfc, 0x00, 0x06, 0x20, 0x38, 0x50, 0x38, 0x38, 0x50, 0xfa, 0x18, 0x04, 0x00, 0xfc, 0x00, // .... 8P88P...... + 0x06, 0x20, 0x38, 0x50, 0x38, 0x38, 0x50, 0x38, 0x38, 0x50, 0x38, 0x38, 0x50, 0x98, 0xf9, 0x00, // . 8P88P88P88P... + 0x07, 0x00, 0xf9, 0x00, 0x07, 0x00, 0xf9, 0x00, 0x80, 0x80, 0x01, 0x80, 0x80, 0xfd, 0x98, 0x50, // ...............P + 0x38, 0x38, 0x50, 0x38, 0x04, 0x20, 0x80, 0xfd, 0x98, 0x50, 0x38, 0x38, 0x50, 0x38, 0x02, 0x38, // 88P8. ...P88P8.8 + 0x50, 0x38, 0x38, 0x50, 0x38, 0xfd, 0x20, 0xfe, 0x80, 0x01, 0x80, 0x02, 0x00, 0xfe, 0x80, 0x01, // P88P8. ......... + 0x80, 0x02, 0x00, 0xfe, 0x80, 0x01, 0x80, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x08, 0x00, // ................ + 0x05, 0x80, 0x00, 0x07, 0x00, 0x2b, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x20, 0x26, 0x10, 0x36, 0x20, // .....+.N... &.6 + 0x16, 0x10, 0x01, 0x21, 0x32, 0x16, 0x1d, 0x01, 0x14, 0x06, 0x23, 0x21, 0x11, 0x14, 0x06, 0x2b, // ...!2.....#!...+ + 0x01, 0x22, 0x26, 0x35, 0x11, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x11, 0x34, // ."&5.!"&=.463!.4 + 0x36, 0x3b, 0x01, 0x32, 0x16, 0x15, 0x01, 0x14, 0x16, 0x33, 0x21, 0x15, 0x06, 0x23, 0x21, 0x22, // 6;.2.....3!..#!" + 0x26, 0x35, 0x34, 0x3e, 0x05, 0x33, 0x32, 0x17, 0x1e, 0x01, 0x32, 0x36, 0x37, 0x36, 0x33, 0x32, // &54>.32...267632 + 0x17, 0x23, 0x22, 0x06, 0x15, 0x03, 0x5f, 0xfe, 0xc2, 0xe1, 0xe1, 0x01, 0x3e, 0xe1, 0x02, 0x40, // .#"..._.....>..@ + 0x01, 0x60, 0x0d, 0x13, 0x13, 0x0d, 0xfe, 0xa0, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0xfe, 0xa0, 0x0d, // .`.............. + 0x13, 0x13, 0x0d, 0x01, 0x60, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0xfd, 0x20, 0x4c, 0x34, 0x01, 0x00, // ....`...... L4.. + 0x44, 0x67, 0xfc, 0x96, 0x79, 0x92, 0x07, 0x15, 0x20, 0x36, 0x46, 0x65, 0x3d, 0x13, 0x14, 0x4f, // Dg..y... 6Fe=..O + 0x97, 0xb2, 0x97, 0x4f, 0x14, 0x13, 0x84, 0x55, 0xdf, 0x34, 0x4c, 0x02, 0x80, 0xe1, 0x01, 0x3e, // ...O...U.4L....> + 0xe1, 0xe1, 0xfe, 0xc2, 0xfe, 0x9f, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0xfe, 0xa0, 0x0d, 0x13, 0x13, // ................ + 0x0d, 0x01, 0x60, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x01, 0x60, 0x0d, 0x13, 0x13, 0x0d, 0xfd, 0xc0, // ..`......`...... + 0x34, 0x4c, 0xee, 0x32, 0x8a, 0x79, 0x35, 0x65, 0x75, 0x64, 0x5f, 0x43, 0x28, 0x11, 0x3d, 0x3d, // 4L.2.y5eud_C(.== + 0x3d, 0x3d, 0x11, 0x60, 0x4c, 0x34, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x07, 0xf7, // ==.`L4.......... + 0x05, 0x80, 0x00, 0x07, 0x00, 0x33, 0x00, 0x56, 0x00, 0x00, 0x00, 0x20, 0x26, 0x10, 0x36, 0x20, // .....3.V... &.6 + 0x16, 0x10, 0x01, 0x17, 0x16, 0x15, 0x14, 0x0f, 0x01, 0x06, 0x23, 0x22, 0x2f, 0x01, 0x07, 0x06, // ..........#"/... + 0x23, 0x22, 0x2f, 0x01, 0x26, 0x35, 0x34, 0x3f, 0x01, 0x27, 0x26, 0x35, 0x34, 0x3f, 0x01, 0x36, // #"/.&54?.'&54?.6 + 0x33, 0x32, 0x1f, 0x01, 0x37, 0x36, 0x33, 0x32, 0x1f, 0x01, 0x16, 0x15, 0x14, 0x07, 0x05, 0x07, // 32..7632........ + 0x06, 0x15, 0x14, 0x1f, 0x01, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x34, 0x3e, 0x05, 0x33, 0x32, // ......#!"&54>.32 + 0x17, 0x16, 0x20, 0x37, 0x36, 0x33, 0x32, 0x17, 0x0e, 0x01, 0x15, 0x14, 0x17, 0x03, 0x5f, 0xfe, // .. 7632......._. + 0xc2, 0xe1, 0xe1, 0x01, 0x3e, 0xe1, 0x02, 0xb5, 0xf9, 0x09, 0x09, 0x88, 0x09, 0x0d, 0x0e, 0x09, // ....>........... + 0xf9, 0xf9, 0x09, 0x0e, 0x0d, 0x09, 0x88, 0x09, 0x09, 0xf9, 0xf9, 0x09, 0x09, 0x88, 0x09, 0x0d, // ................ + 0x0e, 0x09, 0xf9, 0xf9, 0x09, 0x0e, 0x0d, 0x09, 0x88, 0x09, 0x09, 0xfd, 0x15, 0xb5, 0x25, 0x25, // ..............%% + 0x53, 0x15, 0x17, 0xfc, 0x96, 0x79, 0x92, 0x07, 0x15, 0x20, 0x36, 0x46, 0x65, 0x3d, 0x13, 0x14, // S....y... 6Fe=.. + 0x9a, 0x01, 0x4a, 0x9a, 0x14, 0x13, 0x1c, 0x1d, 0x1c, 0x1a, 0x25, 0x02, 0x80, 0xe1, 0x01, 0x3e, // ..J.......%....> + 0xe1, 0xe1, 0xfe, 0xc2, 0xfd, 0xdf, 0xf9, 0x09, 0x0e, 0x0d, 0x09, 0x88, 0x09, 0x09, 0xf9, 0xf9, // ................ + 0x09, 0x09, 0x88, 0x09, 0x0d, 0x0e, 0x09, 0xf9, 0xf9, 0x09, 0x0e, 0x0d, 0x09, 0x88, 0x09, 0x09, // ................ + 0xf9, 0xf9, 0x09, 0x09, 0x88, 0x09, 0x0d, 0x0e, 0x09, 0xf9, 0xb5, 0x25, 0x36, 0x35, 0x25, 0x53, // ...........%65%S + 0x03, 0x8a, 0x79, 0x35, 0x65, 0x75, 0x64, 0x5f, 0x43, 0x28, 0x11, 0x7a, 0x7a, 0x11, 0x06, 0x1b, // ..y5eud_C(.zz... + 0x2e, 0x21, 0x36, 0x25, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x05, 0x00, 0x00, 0x12, // .!6%............ + 0x00, 0x1a, 0x00, 0x24, 0x00, 0x00, 0x01, 0x21, 0x32, 0x16, 0x15, 0x11, 0x21, 0x11, 0x21, 0x11, // ...$...!2...!.!. + 0x21, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x15, 0x00, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, // !.46;.2...4&"... + 0x32, 0x21, 0x35, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x15, 0x11, 0x01, 0x00, 0x06, 0xc0, 0x1a, // 2!54&#!"........ + 0x26, 0xff, 0x00, 0xfa, 0x00, 0xff, 0x00, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x02, 0x40, 0x96, 0xd4, // &......&...&.@.. + 0x96, 0x96, 0xd4, 0x05, 0x56, 0xe1, 0x9f, 0xfd, 0x40, 0x1a, 0x26, 0x02, 0x00, 0x26, 0x1a, 0xfe, // ....V...@.&..&.. + 0x40, 0x01, 0x00, 0xff, 0x00, 0x04, 0xc0, 0x1a, 0x26, 0x26, 0x1a, 0xfe, 0x16, 0xd4, 0x96, 0x96, // @.......&&...... + 0xd4, 0x96, 0x40, 0x9f, 0xe1, 0x26, 0x1a, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // ..@..&.......... + 0xff, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x16, 0x00, 0x19, 0x00, 0x00, 0x01, 0x03, 0x33, 0x15, // ..............3. + 0x21, 0x07, 0x21, 0x15, 0x21, 0x09, 0x01, 0x21, 0x35, 0x21, 0x27, 0x21, 0x35, 0x33, 0x03, 0x21, // !.!.!..!5!'!53.! + 0x01, 0x21, 0x09, 0x01, 0x13, 0x23, 0x06, 0x00, 0xc0, 0xc0, 0xfe, 0xee, 0x37, 0x01, 0x49, 0xfe, // .!...#......7.I. + 0x65, 0xfe, 0x9b, 0xfe, 0x9b, 0xfe, 0x65, 0x01, 0x49, 0x37, 0xfe, 0xee, 0xc0, 0xc0, 0x01, 0x00, // e.....e.I7...... + 0x01, 0x43, 0x01, 0x7a, 0x01, 0x43, 0xfe, 0x00, 0x6c, 0xd8, 0x06, 0x00, 0xfe, 0x40, 0xc0, 0x80, // .C.z.C..l....@.. + 0xc0, 0xfc, 0xc0, 0x03, 0x40, 0xc0, 0x80, 0xc0, 0x01, 0xc0, 0xfd, 0x00, 0x03, 0x00, 0xfb, 0x40, // ....@..........@ + 0x01, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x17, // ................ + 0x00, 0x1f, 0x00, 0x23, 0x00, 0x00, 0x01, 0x32, 0x04, 0x15, 0x11, 0x14, 0x06, 0x07, 0x17, 0x16, // ...#...2........ + 0x06, 0x23, 0x21, 0x22, 0x26, 0x3f, 0x01, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x24, 0x33, 0x12, 0x32, // .#!"&?...5.4$3.2 + 0x36, 0x34, 0x26, 0x22, 0x06, 0x14, 0x01, 0x11, 0x21, 0x11, 0x04, 0x40, 0xb9, 0x01, 0x07, 0xfb, // 64&"....!..@.... + 0xb4, 0xd5, 0x10, 0x10, 0x16, 0xfb, 0xe0, 0x16, 0x10, 0x10, 0xd5, 0xb4, 0xfb, 0x01, 0x07, 0xb9, // ................ + 0xf0, 0xa0, 0x70, 0x70, 0xa0, 0x70, 0x03, 0x00, 0xfb, 0x80, 0x06, 0x00, 0xbb, 0x85, 0xfc, 0x80, // ..pp.p.......... + 0x82, 0xb8, 0x05, 0xca, 0x0f, 0x28, 0x28, 0x0f, 0xca, 0x05, 0xb8, 0x82, 0x03, 0x80, 0x85, 0xbb, // .....((......... + 0xfa, 0xc0, 0x70, 0xa0, 0x70, 0x70, 0xa0, 0x01, 0xd0, 0x02, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, // ..p.pp.......... + 0x00, 0x05, 0x00, 0x00, 0xff, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x17, 0x00, 0x1f, 0x00, 0x23, // ...............# + 0x00, 0x2b, 0x00, 0x2f, 0x00, 0x00, 0x01, 0x32, 0x04, 0x15, 0x11, 0x14, 0x06, 0x07, 0x17, 0x16, // .+./...2........ + 0x06, 0x23, 0x21, 0x22, 0x26, 0x3f, 0x01, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x24, 0x33, 0x02, 0x32, // .#!"&?...5.4$3.2 + 0x36, 0x34, 0x26, 0x22, 0x06, 0x14, 0x01, 0x11, 0x21, 0x11, 0x00, 0x32, 0x36, 0x34, 0x26, 0x22, // 64&"....!..264&" + 0x06, 0x14, 0x01, 0x11, 0x21, 0x11, 0x04, 0x40, 0xb9, 0x01, 0x07, 0xfb, 0xb4, 0xd5, 0x10, 0x10, // ....!..@........ + 0x16, 0xfb, 0xe0, 0x16, 0x10, 0x10, 0xd5, 0xb4, 0xfb, 0x01, 0x07, 0xb9, 0xe2, 0x84, 0x5e, 0x5e, // ..............^^ + 0x84, 0x5e, 0x02, 0x40, 0xfd, 0xe0, 0x03, 0xfe, 0x84, 0x5e, 0x5e, 0x84, 0x5e, 0x01, 0x40, 0xfd, // .^.@.....^^.^.@. + 0xc0, 0x06, 0x00, 0xbb, 0x85, 0xfc, 0x80, 0x82, 0xb8, 0x05, 0xca, 0x0f, 0x28, 0x28, 0x0f, 0xca, // ............((.. + 0x05, 0xb8, 0x82, 0x03, 0x80, 0x85, 0xbb, 0xfa, 0xe0, 0x5e, 0x84, 0x5e, 0x5e, 0x84, 0x01, 0xc2, // .........^.^^... + 0x02, 0x00, 0xfe, 0x00, 0xfd, 0xe0, 0x5e, 0x84, 0x5e, 0x5e, 0x84, 0x01, 0xc2, 0x02, 0x00, 0xfe, // ......^.^^...... + 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0xff, 0x8a, 0x07, 0x00, 0x05, 0x76, 0x00, 0x12, // .............v.. + 0x00, 0x15, 0x00, 0x1c, 0x00, 0x28, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, 0x23, 0x22, 0x27, 0x25, // .....(......#"'% + 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x33, 0x32, 0x17, 0x01, 0x16, 0x17, 0x09, 0x02, 0x11, 0x14, // ..5.4632........ + 0x06, 0x22, 0x27, 0x25, 0x01, 0x14, 0x00, 0x07, 0x09, 0x01, 0x36, 0x33, 0x32, 0x17, 0x01, 0x16, // ."'%......632... + 0x02, 0x55, 0x19, 0x18, 0x11, 0x10, 0xfe, 0x2f, 0x15, 0x1d, 0x14, 0x13, 0x0e, 0x1e, 0x01, 0xff, // .U...../........ + 0x03, 0x40, 0x02, 0x16, 0xfd, 0xea, 0x04, 0x6b, 0x1c, 0x30, 0x17, 0xfe, 0x47, 0x02, 0x19, 0xfd, // .@.....k.0..G... + 0xff, 0x2c, 0xfe, 0x7a, 0x01, 0x44, 0x11, 0x23, 0x0e, 0x0c, 0x02, 0x1d, 0x04, 0x04, 0x5b, 0xfb, // .,.z.D.#......[. + 0x6b, 0x19, 0x23, 0x08, 0xe9, 0x0a, 0x2f, 0x17, 0x04, 0x74, 0x14, 0x1c, 0x0f, 0xff, 0x00, 0x03, // k.#.../..t...... + 0x67, 0xfc, 0x9e, 0x01, 0x0a, 0x02, 0x46, 0xfb, 0xe2, 0x19, 0x1f, 0x0d, 0xdc, 0x03, 0xe5, 0x03, // g.....F......... + 0xfc, 0xbf, 0x47, 0x02, 0x7a, 0x02, 0x0f, 0x1c, 0x06, 0xfe, 0xf2, 0x02, 0x00, 0x02, 0x00, 0x00, // ..G.z........... + 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x0b, 0x00, 0x0f, 0x00, 0x00, 0x09, 0x01, 0x23, 0x03, // ..............#. + 0x06, 0x07, 0x27, 0x03, 0x23, 0x01, 0x11, 0x33, 0x01, 0x11, 0x21, 0x11, 0x03, 0x29, 0x01, 0x0a, // ..'.#..3..!..).. + 0x70, 0x9d, 0x18, 0x14, 0x2a, 0x9b, 0x78, 0x01, 0x07, 0x65, 0x02, 0xd7, 0xfa, 0x00, 0x02, 0x14, // p...*.x..e...... + 0x01, 0xf3, 0xfe, 0xc8, 0x30, 0x2c, 0x5c, 0x01, 0x38, 0xfe, 0x13, 0xfe, 0xbc, 0x04, 0xaa, 0xfa, // ....0,..8....... + 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0x00, 0x54, 0xff, 0x06, 0x08, 0xa4, 0x05, 0xff, 0x00, 0x0b, // .......T........ + 0x00, 0x17, 0x00, 0x23, 0x00, 0x2f, 0x00, 0x44, 0x00, 0x4d, 0x00, 0xfc, 0x01, 0x06, 0x01, 0x12, // ...#./.D.M...... + 0x01, 0x1b, 0x01, 0x25, 0x01, 0x32, 0x01, 0x3c, 0x01, 0x47, 0x01, 0x51, 0x01, 0x5e, 0x01, 0x6c, // ...%.2.<.G.Q.^.l + 0x01, 0x77, 0x01, 0xb3, 0x01, 0xc2, 0x01, 0xd9, 0x01, 0xe9, 0x01, 0xfe, 0x02, 0x0d, 0x00, 0x00, // .w.............. + 0x05, 0x0e, 0x01, 0x07, 0x06, 0x26, 0x27, 0x26, 0x36, 0x37, 0x36, 0x16, 0x05, 0x1e, 0x01, 0x17, // .....&'&676..... + 0x16, 0x36, 0x37, 0x36, 0x26, 0x27, 0x26, 0x06, 0x37, 0x1e, 0x01, 0x17, 0x16, 0x36, 0x35, 0x34, // .676&'&.7....654 + 0x26, 0x27, 0x26, 0x06, 0x05, 0x0e, 0x01, 0x07, 0x06, 0x26, 0x35, 0x34, 0x36, 0x37, 0x36, 0x16, // &'&......&54676. + 0x01, 0x33, 0x22, 0x07, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x23, 0x22, 0x27, 0x06, 0x15, 0x14, 0x16, // .3"......#"'.... + 0x33, 0x32, 0x36, 0x34, 0x26, 0x37, 0x2e, 0x01, 0x07, 0x3e, 0x02, 0x1e, 0x01, 0x01, 0x16, 0x07, // 3264&7...>...... + 0x16, 0x15, 0x16, 0x0e, 0x01, 0x07, 0x06, 0x26, 0x27, 0x04, 0x25, 0x0e, 0x01, 0x27, 0x2e, 0x01, // .......&'.%..'.. + 0x37, 0x36, 0x37, 0x26, 0x37, 0x36, 0x17, 0x36, 0x37, 0x26, 0x37, 0x36, 0x17, 0x36, 0x37, 0x34, // 767&76.67&76.674 + 0x37, 0x36, 0x17, 0x36, 0x17, 0x16, 0x17, 0x35, 0x22, 0x27, 0x2e, 0x01, 0x27, 0x26, 0x37, 0x36, // 76.6...5"'..'&76 + 0x37, 0x3e, 0x02, 0x16, 0x17, 0x33, 0x16, 0x17, 0x16, 0x17, 0x3e, 0x01, 0x37, 0x26, 0x27, 0x26, // 7>...3....>.7&'& + 0x27, 0x34, 0x37, 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x37, 0x36, 0x37, 0x36, 0x16, 0x17, 0x14, 0x1e, // '47..'..7676.... + 0x03, 0x17, 0x16, 0x37, 0x36, 0x37, 0x26, 0x07, 0x37, 0x36, 0x37, 0x36, 0x37, 0x2e, 0x04, 0x27, // ...767&.76767..' + 0x24, 0x01, 0x16, 0x17, 0x16, 0x37, 0x33, 0x3e, 0x03, 0x3f, 0x01, 0x3e, 0x01, 0x17, 0x16, 0x17, // $....73>.?.>.... + 0x16, 0x06, 0x07, 0x0e, 0x01, 0x07, 0x15, 0x06, 0x07, 0x06, 0x07, 0x1e, 0x01, 0x17, 0x36, 0x37, // ..............67 + 0x36, 0x37, 0x33, 0x3e, 0x01, 0x1e, 0x01, 0x17, 0x16, 0x17, 0x16, 0x07, 0x0e, 0x01, 0x07, 0x06, // 673>............ + 0x23, 0x14, 0x07, 0x36, 0x37, 0x36, 0x17, 0x36, 0x17, 0x16, 0x15, 0x16, 0x17, 0x36, 0x17, 0x16, // #..676.6.....6.. + 0x07, 0x16, 0x17, 0x36, 0x01, 0x14, 0x07, 0x16, 0x17, 0x36, 0x26, 0x27, 0x26, 0x06, 0x07, 0x1e, // ...6.....6&'&... + 0x01, 0x07, 0x36, 0x37, 0x36, 0x37, 0x2e, 0x01, 0x27, 0x06, 0x07, 0x22, 0x27, 0x16, 0x17, 0x32, // ..6767..'.."'..2 + 0x37, 0x36, 0x26, 0x05, 0x36, 0x37, 0x26, 0x35, 0x34, 0x26, 0x07, 0x0e, 0x01, 0x17, 0x16, 0x17, // 76&.67&54&...... + 0x26, 0x36, 0x37, 0x31, 0x26, 0x27, 0x0e, 0x01, 0x07, 0x16, 0x17, 0x36, 0x37, 0x06, 0x0f, 0x01, // &671&'.....67... + 0x35, 0x06, 0x17, 0x16, 0x05, 0x1e, 0x01, 0x17, 0x1e, 0x01, 0x37, 0x3e, 0x01, 0x37, 0x26, 0x00, // 5.........7>.7&. + 0x22, 0x06, 0x15, 0x14, 0x16, 0x32, 0x36, 0x35, 0x34, 0x03, 0x26, 0x07, 0x35, 0x06, 0x16, 0x17, // "....2654.&.5... + 0x1e, 0x01, 0x37, 0x3e, 0x01, 0x26, 0x05, 0x3e, 0x01, 0x26, 0x27, 0x35, 0x06, 0x23, 0x0e, 0x01, // ..7>.&.>.&'5.#.. + 0x16, 0x17, 0x1e, 0x01, 0x25, 0x06, 0x16, 0x17, 0x16, 0x36, 0x37, 0x3e, 0x01, 0x37, 0x06, 0x07, // ....%....67>.7.. + 0x16, 0x07, 0x16, 0x04, 0x17, 0x36, 0x24, 0x37, 0x26, 0x37, 0x34, 0x3e, 0x01, 0x3d, 0x01, 0x15, // .....6$7&74>.=.. + 0x2e, 0x01, 0x27, 0x06, 0x07, 0x06, 0x27, 0x26, 0x27, 0x26, 0x27, 0x0e, 0x08, 0x23, 0x06, 0x27, // ..'...'&'&'..#.' + 0x0e, 0x03, 0x07, 0x06, 0x23, 0x06, 0x27, 0x06, 0x27, 0x26, 0x27, 0x26, 0x27, 0x26, 0x27, 0x06, // ....#.'.'&'&'&'. + 0x07, 0x16, 0x03, 0x36, 0x35, 0x2e, 0x01, 0x27, 0x26, 0x0e, 0x01, 0x17, 0x1e, 0x01, 0x17, 0x16, // ...65..'&....... + 0x36, 0x37, 0x16, 0x17, 0x36, 0x37, 0x2e, 0x01, 0x27, 0x06, 0x07, 0x14, 0x06, 0x15, 0x16, 0x07, // 67..67..'....... + 0x06, 0x07, 0x06, 0x07, 0x23, 0x06, 0x17, 0x16, 0x17, 0x04, 0x25, 0x26, 0x27, 0x06, 0x07, 0x06, // ....#.....%&'... + 0x27, 0x26, 0x27, 0x06, 0x07, 0x23, 0x15, 0x32, 0x25, 0x36, 0x37, 0x36, 0x37, 0x07, 0x36, 0x35, // '&'..#.2%6767.65 + 0x26, 0x27, 0x26, 0x27, 0x26, 0x37, 0x26, 0x35, 0x26, 0x27, 0x06, 0x07, 0x16, 0x05, 0x36, 0x2e, // &'&'&7&5&'....6. + 0x01, 0x07, 0x0e, 0x01, 0x07, 0x14, 0x17, 0x1e, 0x01, 0x37, 0x3e, 0x01, 0x01, 0xde, 0x08, 0x26, // .........7>....& + 0x12, 0x19, 0x35, 0x02, 0x01, 0x52, 0x1b, 0x17, 0x16, 0x05, 0x34, 0x07, 0x26, 0x13, 0x19, 0x35, // ..5..R....4.&..5 + 0x01, 0x02, 0x53, 0x1b, 0x16, 0x16, 0x39, 0x0d, 0x57, 0x22, 0x2d, 0x4a, 0x87, 0x30, 0x28, 0x2f, // ..S...9.W"-J.0(/ + 0xfa, 0x72, 0x0d, 0x56, 0x22, 0x2d, 0x4a, 0x87, 0x30, 0x28, 0x2e, 0x02, 0xc9, 0x01, 0x29, 0x23, // .r.V"-J.0(....)# + 0x1b, 0x22, 0x36, 0x26, 0x34, 0x1c, 0x05, 0x70, 0x4f, 0x50, 0x70, 0x70, 0xe0, 0x63, 0xf3, 0x7c, // ."6&4..pOPpp.c.| + 0x1b, 0x6f, 0x7d, 0x76, 0x51, 0x02, 0xf2, 0x08, 0x13, 0x07, 0x01, 0x5b, 0x80, 0x36, 0x30, 0x58, // .o}vQ......[.60X + 0x16, 0xfd, 0x51, 0xfd, 0xc4, 0x17, 0x57, 0x31, 0x56, 0xbb, 0x01, 0x02, 0x05, 0x13, 0x08, 0x06, // ..Q...W1V....... + 0x19, 0x0e, 0x1b, 0x07, 0x09, 0x0b, 0x1c, 0x1d, 0x1e, 0x0d, 0x17, 0x1c, 0x23, 0x1a, 0x12, 0x14, // ............#... + 0x0b, 0x07, 0x35, 0x58, 0x0b, 0x09, 0x09, 0x0f, 0x4e, 0x02, 0x22, 0x26, 0x1c, 0x05, 0x0d, 0x2e, // ..5X....N."&.... + 0x0e, 0x03, 0x02, 0x0a, 0x29, 0x0a, 0x0f, 0x0f, 0x17, 0x44, 0x01, 0x3e, 0x71, 0x1c, 0x20, 0x15, // ....)....D.>q. . + 0x08, 0x10, 0x4a, 0x17, 0x3a, 0x03, 0x03, 0x02, 0x04, 0x07, 0x05, 0x1b, 0x31, 0x30, 0x32, 0x28, // ..J.:.......102( + 0x7a, 0x2f, 0x3d, 0x66, 0x91, 0x89, 0x14, 0x2a, 0x34, 0x21, 0x3e, 0x0c, 0x02, 0x53, 0x01, 0x35, // z/=f...*4!>..S.5 + 0x62, 0x3c, 0x55, 0x24, 0x01, 0x05, 0x07, 0x04, 0x02, 0x02, 0x01, 0x03, 0x3a, 0x17, 0x49, 0x12, // b!.%......... + 0x01, 0x0b, 0x06, 0x28, 0x03, 0x06, 0x04, 0x02, 0x21, 0x1f, 0x24, 0x70, 0x38, 0x7e, 0x35, 0x10, // ...(....!.$p8~5. + 0x17, 0x1d, 0x01, 0x1a, 0x10, 0x18, 0x0e, 0x03, 0x0e, 0x02, 0x2e, 0x1c, 0x04, 0x12, 0x2e, 0x3a, // ...............: + 0x35, 0x49, 0x0d, 0x08, 0x0f, 0x0d, 0x08, 0x0e, 0x03, 0x7e, 0xfe, 0xf7, 0x54, 0x8a, 0x0a, 0x13, // 5I.......~..T... + 0x03, 0x0e, 0x18, 0x0f, 0x0e, 0x0e, 0x1c, 0x18, 0x11, 0x34, 0x7e, 0x39, 0x70, 0x23, 0x20, 0x21, // .........4~9p# ! + 0x02, 0x0a, 0x02, 0x29, 0x05, 0x0c, 0x01, 0x05, 0x01, 0x05, 0x03, 0x12, 0x05, 0x12, 0x18, 0x08, // ...)............ + 0x26, 0x11, 0x20, 0x3f, 0x28, 0x29, 0x35, 0x46, 0x09, 0x02, 0x31, 0x18, 0x0f, 0x04, 0x07, 0x05, // &. ?()5F..1..... + 0x1c, 0x0c, 0x09, 0x1c, 0x10, 0x12, 0x0d, 0x09, 0x0a, 0x1c, 0x1e, 0x15, 0x08, 0x03, 0xaf, 0x1d, // ................ + 0x19, 0x20, 0x64, 0x25, 0x7b, 0x1d, 0x13, 0x04, 0x76, 0x2a, 0x85, 0x3a, 0x0d, 0x20, 0x0e, 0x0e, // . d%{...v*.:. .. + 0x40, 0x65, 0x10, 0x0f, 0x0a, 0x01, 0x73, 0x7c, 0x03, 0x44, 0x86, 0x31, 0x64, 0x20, 0x19, 0x1d, // @e....s|.D.1d .. + 0x12, 0x04, 0x13, 0x1d, 0x7b, 0x8b, 0x1f, 0x0e, 0x3a, 0x85, 0x2a, 0x06, 0x0f, 0x10, 0x64, 0x41, // ....{...:.*...dA + 0x11, 0x41, 0x7c, 0x6f, 0x04, 0x0e, 0x13, 0x01, 0x59, 0x6b, 0x03, 0x27, 0x26, 0x8d, 0x13, 0x12, // .A|o....Yk.'&... + 0x07, 0x08, 0x14, 0x83, 0x3c, 0x02, 0x02, 0x83, 0xa5, 0x74, 0x75, 0xa5, 0xa5, 0x75, 0x74, 0xfe, // ....<....tu..ut. + 0x26, 0x02, 0x02, 0x01, 0x1b, 0x76, 0x07, 0x0e, 0x01, 0x0b, 0x03, 0x48, 0x43, 0xba, 0x04, 0x58, // &....v.....HC..X + 0x58, 0x13, 0x01, 0x03, 0x14, 0x54, 0x52, 0x05, 0x0f, 0x02, 0xc8, 0x3b, 0x77, 0x19, 0x08, 0x06, // X....TR....;w... + 0x12, 0x10, 0x94, 0x1d, 0x02, 0x82, 0x17, 0x0d, 0x8d, 0xc6, 0x37, 0x31, 0xc2, 0x99, 0x0d, 0x15, // ..........71.... + 0x02, 0x03, 0x03, 0x01, 0x01, 0x01, 0x02, 0x07, 0x01, 0x5a, 0x2a, 0x26, 0x27, 0x06, 0x08, 0x0d, // .........Z*&'... + 0x31, 0x05, 0x08, 0x06, 0x05, 0x03, 0x02, 0x02, 0x01, 0x01, 0x09, 0x14, 0x11, 0x13, 0x0b, 0x03, // 1............... + 0x02, 0x01, 0x11, 0x39, 0x3f, 0x09, 0x08, 0x2e, 0x0d, 0x0d, 0x1d, 0x24, 0x06, 0x04, 0x02, 0xfd, // ...9?......$.... + 0x84, 0x0e, 0x10, 0x47, 0x76, 0x0b, 0x0c, 0x35, 0x6b, 0x36, 0x35, 0x50, 0x02, 0x02, 0x3c, 0xdc, // ...Gv..5k65P..<. + 0x3f, 0x38, 0x71, 0x3d, 0x34, 0x88, 0x61, 0x04, 0x09, 0x01, 0x06, 0x02, 0x12, 0x13, 0x17, 0x0b, // ?8q=4.a......... + 0x0d, 0x0b, 0x53, 0x43, 0x22, 0xcd, 0x15, 0x15, 0x93, 0x31, 0x23, 0x16, 0x03, 0x03, 0x15, 0x1c, // ..SC"....1#..... + 0x3c, 0x80, 0x01, 0x2f, 0x36, 0x42, 0x26, 0x21, 0x01, 0x4d, 0x4c, 0x08, 0x11, 0x09, 0x18, 0x14, // <../6B&!.ML..... + 0x12, 0x04, 0x05, 0x04, 0x08, 0xbe, 0x5e, 0x3b, 0x8c, 0x36, 0x6b, 0x35, 0x0c, 0x0b, 0x77, 0x46, // ......^;.6k5..wF + 0x10, 0x0e, 0x31, 0x3c, 0x02, 0x02, 0x50, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x43, 0x09, 0x01, // ..1<..P......C.. + 0x05, 0xbd, 0x00, 0x07, 0x00, 0x0f, 0x00, 0x3b, 0x00, 0x00, 0x24, 0x14, 0x06, 0x22, 0x26, 0x34, // .......;..$.."&4 + 0x36, 0x32, 0x04, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x01, 0x1e, 0x05, 0x0c, 0x01, 0x33, // 62..."&462.....3 + 0x32, 0x1e, 0x04, 0x0e, 0x03, 0x07, 0x06, 0x07, 0x3e, 0x05, 0x2e, 0x03, 0x07, 0x06, 0x24, 0x2e, // 2.......>.....$. + 0x07, 0x05, 0xf4, 0x60, 0x88, 0x61, 0x61, 0x88, 0xfd, 0x73, 0x61, 0x88, 0x60, 0x60, 0x88, 0xfd, // ...`.aa..sa.``.. + 0x5a, 0x39, 0x6b, 0x87, 0x89, 0xc3, 0xcd, 0x01, 0x27, 0x01, 0x39, 0xd8, 0x8b, 0xd3, 0x97, 0x61, // Z9k.....'.9....a + 0x2d, 0x03, 0x2a, 0x47, 0x6c, 0x7c, 0x4d, 0xb9, 0x65, 0x1d, 0x5f, 0x5d, 0x60, 0x46, 0x26, 0x0c, // -.*Gl|M.e._]`F&. + 0x4f, 0x9a, 0xfe, 0xb1, 0xa8, 0xfe, 0xdc, 0xdc, 0xbd, 0x82, 0x73, 0x44, 0x44, 0x21, 0x2f, 0x2b, // O.........sDD!/+ + 0x88, 0x60, 0x60, 0x88, 0x61, 0x61, 0x88, 0x60, 0x60, 0x88, 0x61, 0x05, 0x31, 0x3c, 0x59, 0x4b, // .``.aa.``.a.1.54&'" + 0x26, 0x23, 0x21, 0x11, 0x21, 0x32, 0x36, 0x13, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, // &#!.!26....#!"&5 + 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x07, 0x9f, 0x1f, 0x17, 0x08, 0x0a, 0x99, 0x99, 0x0a, // .463!2.......... + 0x08, 0x17, 0x0d, 0x1e, 0x17, 0x03, 0x0c, 0x8b, 0x8b, 0x03, 0x0b, 0x01, 0x17, 0xfb, 0x69, 0xe4, // ..............i. + 0x4c, 0x43, 0x6c, 0x79, 0x35, 0x88, 0x29, 0x2a, 0x01, 0x48, 0x02, 0xca, 0x63, 0x65, 0x6c, 0x7a, // LCly5.)*.H..celz + 0x7a, 0x6c, 0x65, 0x63, 0x30, 0x68, 0x1c, 0x1c, 0x7f, 0xb7, 0x62, 0x2c, 0x2c, 0x62, 0xb7, 0x7f, // zlec0h....b,,b.. + 0x65, 0x03, 0x49, 0x56, 0x42, 0x39, 0x40, 0x52, 0x42, 0x03, 0x12, 0x05, 0xfe, 0x39, 0x01, 0xeb, // e.IVB9@RB....9.. + 0x4a, 0x5f, 0x80, 0x4c, 0x34, 0xf8, 0x00, 0x34, 0x4c, 0x4c, 0x34, 0x08, 0x00, 0x34, 0x4c, 0x02, // J_.L4..4LL4..4L. + 0x34, 0x34, 0x25, 0x05, 0x02, 0x8c, 0x02, 0x05, 0xaf, 0x32, 0x22, 0x04, 0x01, 0x81, 0x01, 0x04, // 44%......2"..... + 0xe0, 0x01, 0x34, 0xfe, 0xcc, 0x3a, 0x49, 0x3b, 0x70, 0x0f, 0x10, 0x01, 0x01, 0x21, 0x71, 0x34, // ..4..:I;p....!q4 + 0x07, 0x08, 0x62, 0xba, 0x62, 0x08, 0x07, 0x33, 0x70, 0x0c, 0x0f, 0x02, 0x02, 0x06, 0x28, 0x50, // ..b.b..3p.....(P + 0x60, 0x74, 0x60, 0x50, 0x28, 0x06, 0x04, 0x8e, 0x36, 0x45, 0x05, 0x03, 0x08, 0x43, 0x2e, 0x37, // `t`P(...6E...C.7 + 0x42, 0x03, 0x01, 0xfe, 0x02, 0x49, 0x03, 0x36, 0xfb, 0x00, 0x34, 0x4c, 0x4c, 0x34, 0x05, 0x00, // B....I.6..4LL4.. + 0x34, 0x4c, 0x4c, 0x00, 0x00, 0x05, 0x00, 0x00, 0xff, 0x80, 0x09, 0x00, 0x05, 0x80, 0x00, 0x05, // 4LL............. + 0x00, 0x0b, 0x00, 0x1a, 0x00, 0x2e, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x11, 0x0e, 0x01, 0x14, 0x16, // .......>........ + 0x24, 0x34, 0x26, 0x27, 0x11, 0x36, 0x00, 0x10, 0x02, 0x04, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x34, // $4&'.6....#"..54 + 0x12, 0x24, 0x20, 0x04, 0x01, 0x34, 0x2e, 0x02, 0x23, 0x21, 0x22, 0x04, 0x02, 0x15, 0x14, 0x12, // .$ ..4..#!"..... + 0x04, 0x33, 0x21, 0x32, 0x3e, 0x02, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, // .3!2>.....#!"&5. + 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x03, 0x5a, 0x6a, 0x84, 0x84, 0x02, 0x62, 0x84, 0x6a, 0x6a, // 463!2..Zj...b.jj + 0x01, 0x5b, 0x9d, 0xfe, 0xf2, 0x9f, 0x77, 0xd9, 0x9d, 0x5d, 0x9d, 0x01, 0x0e, 0x01, 0x3e, 0x01, // .[....w..]....>. + 0x0e, 0x02, 0x1c, 0x6f, 0xb8, 0xf3, 0x83, 0xfe, 0xd3, 0xb0, 0xfe, 0xd9, 0xaf, 0xae, 0x01, 0x2a, // ...o...........* + 0xae, 0x01, 0x2d, 0x81, 0xf5, 0xb8, 0x6f, 0x01, 0x58, 0x4c, 0x34, 0xf8, 0x00, 0x34, 0x4c, 0x4c, // ..-...o.XL4..4LL + 0x34, 0x08, 0x00, 0x34, 0x4c, 0x01, 0x27, 0x02, 0xb5, 0x29, 0xbd, 0xea, 0xbd, 0xbd, 0xea, 0xbd, // 4..4L.'..)...... + 0x29, 0xfd, 0x4a, 0x29, 0x01, 0xd1, 0xfe, 0xc2, 0xfe, 0xf2, 0x9d, 0x5d, 0x9d, 0xd9, 0x77, 0x9f, // ).J).......]..w. + 0x01, 0x0e, 0x9d, 0x9d, 0xfe, 0x4c, 0x8b, 0xf5, 0xa6, 0x60, 0xa2, 0xfe, 0xd6, 0xba, 0xab, 0xfe, // .....L...`...... + 0xdb, 0xaa, 0x65, 0xa9, 0xec, 0x03, 0x06, 0xfb, 0x00, 0x34, 0x4c, 0x4c, 0x34, 0x05, 0x00, 0x34, // ..e......4LL4..4 + 0x4c, 0x4c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x0f, // LL.............. + 0x00, 0x1f, 0x00, 0x3b, 0x00, 0x00, 0x05, 0x11, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x15, 0x11, // ...;....4&#!"... + 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x13, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, // ..3!26....#!"&5. + 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x15, 0x23, 0x35, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, // 463!2...#54&#!". + 0x15, 0x11, 0x14, 0x16, 0x3b, 0x01, 0x15, 0x23, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, // ....;..#"&5.463! + 0x32, 0x16, 0x06, 0x80, 0x13, 0x0d, 0xfb, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0x04, 0x40, 0x0d, 0x13, // 2............@.. + 0x80, 0x5e, 0x42, 0xfb, 0xc0, 0x42, 0x5e, 0x5e, 0x42, 0x04, 0x40, 0x42, 0x5e, 0xfe, 0x80, 0x80, // .^B..B^^B.@B^... + 0x13, 0x0d, 0xfb, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xa0, 0xa0, 0x42, 0x5e, 0x5e, 0x42, 0x04, 0x40, // ..........B^^B.@ + 0x42, 0x5e, 0x60, 0x04, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0xfb, 0xc0, 0x0d, 0x13, 0x13, 0x04, 0x4d, // B^`.@..........M + 0xfb, 0xc0, 0x42, 0x5e, 0x5e, 0x42, 0x04, 0x40, 0x42, 0x5e, 0x5e, 0x01, 0x3e, 0xa0, 0xa0, 0x0d, // ..B^^B.@B^^.>... + 0x13, 0x13, 0x0d, 0xfb, 0xc0, 0x0d, 0x13, 0x80, 0x5e, 0x42, 0x04, 0x40, 0x42, 0x5e, 0x5e, 0x00, // ........^B.@B^^. + 0x00, 0x06, 0x00, 0x00, 0xff, 0x00, 0x08, 0x80, 0x06, 0x00, 0x00, 0x02, 0x00, 0x05, 0x00, 0x35, // ...............5 + 0x00, 0x3d, 0x00, 0x55, 0x00, 0x6d, 0x00, 0x00, 0x09, 0x01, 0x21, 0x09, 0x01, 0x21, 0x01, 0x0e, // .=.U.m....!..!.. + 0x01, 0x07, 0x11, 0x21, 0x32, 0x16, 0x1d, 0x01, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, // ...!2.....#!"&=. + 0x34, 0x36, 0x33, 0x21, 0x11, 0x2e, 0x01, 0x27, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, // 463!...'!"&=.463 + 0x21, 0x3e, 0x01, 0x32, 0x16, 0x17, 0x21, 0x32, 0x16, 0x1d, 0x01, 0x14, 0x06, 0x23, 0x04, 0x32, // !>.2..!2.....#.2 + 0x36, 0x34, 0x26, 0x22, 0x06, 0x14, 0x01, 0x14, 0x0e, 0x02, 0x22, 0x2e, 0x02, 0x35, 0x34, 0x3e, // 64&"......"..54> + 0x03, 0x37, 0x36, 0x32, 0x17, 0x1e, 0x04, 0x05, 0x14, 0x0e, 0x02, 0x22, 0x2e, 0x02, 0x35, 0x34, // .762......."..54 + 0x3e, 0x03, 0x37, 0x36, 0x32, 0x17, 0x1e, 0x04, 0x06, 0xc0, 0xfe, 0x80, 0x03, 0x00, 0xf9, 0x80, // >.762........... + 0xfe, 0x80, 0x03, 0x00, 0x01, 0xb5, 0x0e, 0x3f, 0x28, 0x02, 0x60, 0x0e, 0x12, 0x12, 0x0e, 0xfa, // .......?(.`..... + 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0x02, 0x60, 0x28, 0x3f, 0x0e, 0xfe, 0x15, 0x0e, 0x12, 0x12, 0x0e, // ......`(?....... + 0x01, 0xeb, 0x15, 0x62, 0x7c, 0x62, 0x15, 0x01, 0xeb, 0x0e, 0x12, 0x12, 0x0e, 0xfd, 0x3f, 0x42, // ...b|b........?B + 0x2f, 0x2f, 0x42, 0x2f, 0x04, 0x90, 0x5d, 0x8e, 0x93, 0x84, 0x93, 0x8e, 0x5d, 0x46, 0x72, 0x64, // //B/..].....]Frd + 0x68, 0x04, 0x12, 0x4c, 0x12, 0x04, 0x68, 0x64, 0x72, 0x46, 0xfb, 0x00, 0x5d, 0x8e, 0x93, 0x84, // h..L..hdrF..]... + 0x93, 0x8e, 0x5d, 0x46, 0x72, 0x64, 0x68, 0x04, 0x12, 0x4c, 0x12, 0x04, 0x68, 0x64, 0x72, 0x46, // ..]Frdh..L..hdrF + 0x04, 0x40, 0xfd, 0x40, 0x02, 0xc0, 0xfd, 0x40, 0x03, 0x80, 0x28, 0x3f, 0x0e, 0xfa, 0xf5, 0x12, // .@.@...@..(?.... + 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x05, 0x0b, 0x0e, 0x3f, 0x28, 0x12, 0x0e, // .@....@.....?(.. + 0x40, 0x0e, 0x12, 0x39, 0x47, 0x47, 0x39, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x10, 0x2f, 0x42, 0x2f, // @..9GG9..@.../B/ + 0x2f, 0x42, 0xfc, 0x61, 0x49, 0x74, 0x42, 0x21, 0x21, 0x42, 0x74, 0x49, 0x0b, 0x8c, 0xd1, 0xb6, // /B.aItB!!BtI.... + 0xba, 0x07, 0x21, 0x21, 0x07, 0xba, 0xb6, 0xd1, 0x8c, 0x0b, 0x49, 0x74, 0x42, 0x21, 0x21, 0x42, // ..!!......ItB!!B + 0x74, 0x49, 0x0b, 0x8c, 0xd1, 0xb6, 0xba, 0x07, 0x21, 0x21, 0x07, 0xba, 0xb6, 0xd1, 0x8c, 0x00, // tI......!!...... + 0x00, 0x02, 0x00, 0x00, 0xff, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x2d, 0x00, 0x4d, 0x00, 0x00, // ...........-.M.. + 0x01, 0x10, 0x02, 0x07, 0x16, 0x12, 0x11, 0x33, 0x32, 0x16, 0x1d, 0x01, 0x14, 0x06, 0x23, 0x21, // .......32.....#! + 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x10, 0x12, 0x37, 0x26, 0x02, 0x11, 0x23, 0x22, // "&=.46;...7&..#" + 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x1d, 0x01, 0x14, 0x06, 0x23, 0x01, 0x3e, // &=.463!2.....#.> + 0x03, 0x35, 0x21, 0x14, 0x1e, 0x02, 0x17, 0x1e, 0x01, 0x14, 0x06, 0x07, 0x0e, 0x03, 0x15, 0x21, // .5!............! + 0x34, 0x2e, 0x02, 0x27, 0x2e, 0x01, 0x34, 0x36, 0x05, 0x80, 0xd5, 0xa0, 0xa0, 0xd5, 0x60, 0x0e, // 4..'..46......`. + 0x12, 0x12, 0x0e, 0xfa, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x60, 0xd5, 0xa0, 0xa0, 0xd5, 0x60, 0x0e, // ....@....`....`. + 0x12, 0x12, 0x0e, 0x05, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xfd, 0x8a, 0x4d, 0x90, 0x73, 0x46, 0xfc, // ...........M.sF. + 0x00, 0x46, 0x73, 0x90, 0x4d, 0x13, 0x17, 0x17, 0x13, 0x4d, 0x90, 0x73, 0x46, 0x04, 0x00, 0x46, // .Fs.M....M.sF..F + 0x73, 0x90, 0x4d, 0x13, 0x17, 0x17, 0x05, 0x80, 0xfe, 0xfb, 0xfe, 0x6f, 0x6a, 0x6a, 0xfe, 0x6f, // s.M........ojj.o + 0xfe, 0xfb, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x01, 0x05, 0x01, 0x91, // ....@....@...... + 0x6a, 0x6a, 0x01, 0x91, 0x01, 0x05, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, // jj......@....@.. + 0xfd, 0x3c, 0x1d, 0x7f, 0xb2, 0xf2, 0x84, 0x84, 0xf2, 0xb2, 0x7f, 0x1d, 0x07, 0x21, 0x28, 0x21, // .<...........!(! + 0x07, 0x1d, 0x7f, 0xb2, 0xf2, 0x84, 0x84, 0xf2, 0xb2, 0x7f, 0x1d, 0x07, 0x21, 0x28, 0x21, 0x00, // ............!(!. + 0x00, 0x03, 0x00, 0x00, 0xff, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x2d, 0x00, 0x33, 0x00, 0x3f, // ...........-.3.? + 0x00, 0x00, 0x01, 0x10, 0x02, 0x07, 0x16, 0x12, 0x11, 0x33, 0x32, 0x16, 0x1d, 0x01, 0x14, 0x06, // .........32..... + 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x10, 0x12, 0x37, 0x26, 0x02, 0x11, // #!"&=.46;...7&.. + 0x23, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x1d, 0x01, 0x14, 0x06, 0x2b, // #"&=.463!2.....+ + 0x01, 0x21, 0x14, 0x17, 0x21, 0x36, 0x11, 0x34, 0x2e, 0x02, 0x27, 0x23, 0x0e, 0x03, 0x15, 0x05, // .!..!6.4..'#.... + 0x80, 0xd5, 0xa0, 0xa0, 0xd5, 0x60, 0x0e, 0x12, 0x12, 0x0e, 0xfa, 0x40, 0x0e, 0x12, 0x12, 0x0e, // .....`.....@.... + 0x60, 0xd5, 0xa0, 0xa0, 0xd5, 0x60, 0x0e, 0x12, 0x12, 0x0e, 0x05, 0xc0, 0x0e, 0x12, 0x12, 0x0e, // `....`.......... + 0xe0, 0xfc, 0x00, 0x09, 0x03, 0xee, 0x09, 0x44, 0x71, 0x8c, 0x4c, 0xe6, 0x4c, 0x8c, 0x71, 0x44, // .......Dq.L.L.qD + 0x05, 0x80, 0xfe, 0xfb, 0xfe, 0x6f, 0x6a, 0x6a, 0xfe, 0x6f, 0xfe, 0xfb, 0x12, 0x0e, 0x40, 0x0e, // .....ojj.o....@. + 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x01, 0x05, 0x01, 0x91, 0x6a, 0x6a, 0x01, 0x91, 0x01, 0x05, // ...@......jj.... + 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x42, 0x3e, 0x3d, 0xfa, 0x43, 0x82, // ..@....@..B>=.C. + 0xef, 0xb1, 0x7f, 0x1f, 0x1f, 0x7f, 0xb1, 0xef, 0x82, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // ................ + 0xff, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x2d, 0x00, 0x33, 0x00, 0x3b, 0x00, 0x00, 0x01, 0x10, // .......-.3.;.... + 0x02, 0x07, 0x16, 0x12, 0x11, 0x33, 0x32, 0x16, 0x1d, 0x01, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // .....32.....#!"& + 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x10, 0x12, 0x37, 0x26, 0x02, 0x11, 0x23, 0x22, 0x26, 0x3d, // =.46;...7&..#"&= + 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x1d, 0x01, 0x14, 0x06, 0x2b, 0x01, 0x21, 0x14, 0x17, // .463!2.....+.!.. + 0x21, 0x36, 0x03, 0x2e, 0x01, 0x27, 0x23, 0x0e, 0x01, 0x07, 0x05, 0x80, 0xd5, 0xa0, 0xa0, 0xd5, // !6...'#......... + 0x60, 0x0e, 0x12, 0x12, 0x0e, 0xfa, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x60, 0xd5, 0xa0, 0xa0, 0xd5, // `.....@....`.... + 0x60, 0x0e, 0x12, 0x12, 0x0e, 0x05, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xe0, 0xfc, 0x00, 0x55, 0x03, // `.............U. + 0x56, 0x55, 0x39, 0x36, 0xb7, 0x67, 0xe6, 0x67, 0xb7, 0x36, 0x05, 0x80, 0xfe, 0xfb, 0xfe, 0x6f, // VU96.g.g.6.....o + 0x6a, 0x6a, 0xfe, 0x6f, 0xfe, 0xfb, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, // jj.o....@....@.. + 0x01, 0x05, 0x01, 0x91, 0x6a, 0x6a, 0x01, 0x91, 0x01, 0x05, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, // ....jj......@... + 0x0e, 0x40, 0x0e, 0x12, 0xce, 0xb2, 0xb2, 0xfc, 0x0e, 0x8d, 0xc9, 0x2a, 0x2a, 0xc9, 0x8d, 0x00, // .@.........**... + 0x00, 0x02, 0x00, 0x00, 0xff, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x2d, 0x00, 0x47, 0x00, 0x00, // ...........-.G.. + 0x01, 0x10, 0x02, 0x07, 0x16, 0x12, 0x11, 0x33, 0x32, 0x16, 0x1d, 0x01, 0x14, 0x06, 0x23, 0x21, // .......32.....#! + 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x10, 0x12, 0x37, 0x26, 0x02, 0x11, 0x23, 0x22, // "&=.46;...7&..#" + 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x1d, 0x01, 0x14, 0x06, 0x23, 0x01, 0x3e, // &=.463!2.....#.> + 0x03, 0x35, 0x21, 0x14, 0x1e, 0x02, 0x17, 0x1e, 0x01, 0x14, 0x06, 0x07, 0x06, 0x07, 0x21, 0x26, // .5!...........!& + 0x27, 0x2e, 0x01, 0x34, 0x36, 0x05, 0x80, 0xd5, 0xa0, 0xa0, 0xd5, 0x60, 0x0e, 0x12, 0x12, 0x0e, // '..46......`.... + 0xfa, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x60, 0xd5, 0xa0, 0xa0, 0xd5, 0x60, 0x0e, 0x12, 0x12, 0x0e, // .@....`....`.... + 0x05, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xfd, 0x8a, 0x4d, 0x90, 0x73, 0x46, 0xfc, 0x00, 0x46, 0x73, // ........M.sF..Fs + 0x90, 0x4d, 0x13, 0x17, 0x17, 0x13, 0x89, 0x6b, 0x02, 0xbc, 0x6b, 0x89, 0x13, 0x17, 0x17, 0x05, // .M.....k..k..... + 0x80, 0xfe, 0xfb, 0xfe, 0x6f, 0x6a, 0x6a, 0xfe, 0x6f, 0xfe, 0xfb, 0x12, 0x0e, 0x40, 0x0e, 0x12, // ....ojj.o....@.. + 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x01, 0x05, 0x01, 0x91, 0x6a, 0x6a, 0x01, 0x91, 0x01, 0x05, 0x12, // ..@......jj..... + 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0xfd, 0x3c, 0x1d, 0x7f, 0xb2, 0xf2, 0x84, // .@....@...<..... + 0x84, 0xf2, 0xb2, 0x7f, 0x1d, 0x07, 0x21, 0x28, 0x21, 0x07, 0x33, 0x91, 0x91, 0x33, 0x07, 0x21, // ......!(!.3..3.! + 0x28, 0x21, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x0f, // (!.............. + 0x00, 0x39, 0x00, 0x49, 0x00, 0x00, 0x05, 0x32, 0x16, 0x1d, 0x01, 0x14, 0x06, 0x23, 0x21, 0x22, // .9.I...2.....#!" + 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x37, 0x3e, 0x08, 0x37, 0x2e, 0x08, 0x27, 0x21, 0x0e, 0x08, // &=.4637>.7..'!.. + 0x07, 0x1e, 0x08, 0x17, 0x13, 0x32, 0x16, 0x1d, 0x01, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, // .....2.....#!"&= + 0x01, 0x34, 0x36, 0x33, 0x05, 0xe0, 0x0e, 0x12, 0x12, 0x0e, 0xfa, 0x40, 0x0e, 0x12, 0x12, 0x0e, // .463.......@.... + 0x62, 0x03, 0x1a, 0x22, 0x3a, 0x31, 0x50, 0x34, 0x59, 0x2c, 0x2b, 0x2b, 0x2c, 0x59, 0x34, 0x50, // b..":1P4Y,++,Y4P + 0x31, 0x3a, 0x22, 0x1a, 0x03, 0x04, 0xfc, 0x03, 0x1a, 0x22, 0x3a, 0x31, 0x50, 0x34, 0x59, 0x2c, // 1:"......":1P4Y, + 0x2b, 0x2b, 0x2c, 0x59, 0x34, 0x50, 0x31, 0x3a, 0x22, 0x1a, 0x03, 0x62, 0x0e, 0x12, 0x12, 0x0e, // ++,Y4P1:"..b.... + 0xfa, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x12, 0x0e, 0x80, 0x0e, 0x12, 0x12, 0x0e, 0x80, 0x0e, // .@....@......... + 0x12, 0x40, 0x37, 0x68, 0x56, 0x58, 0x40, 0x4b, 0x2d, 0x41, 0x1e, 0x1c, 0x1c, 0x1e, 0x41, 0x2d, // .@7hVX@K-A....A- + 0x4b, 0x40, 0x58, 0x56, 0x68, 0x37, 0x37, 0x68, 0x56, 0x58, 0x40, 0x4b, 0x2d, 0x41, 0x1e, 0x1c, // K@XVh77hVX@K-A.. + 0x1c, 0x1e, 0x41, 0x2d, 0x4b, 0x40, 0x58, 0x56, 0x68, 0x37, 0x06, 0x00, 0x12, 0x0e, 0x80, 0x0e, // ..A-K@XVh7...... + 0x12, 0x12, 0x0e, 0x80, 0x0e, 0x12, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // ................ + 0x05, 0x00, 0x00, 0x41, 0x00, 0x6a, 0x00, 0x00, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x23, 0x35, 0x34, // ...A.j..."...#54 + 0x26, 0x23, 0x22, 0x06, 0x15, 0x11, 0x27, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x1d, 0x01, 0x14, // &#"...'54&#".... + 0x17, 0x01, 0x16, 0x15, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x3d, 0x01, 0x34, 0x37, 0x13, 0x36, // ......3!26=.47.6 + 0x3d, 0x01, 0x34, 0x26, 0x23, 0x22, 0x06, 0x1d, 0x01, 0x23, 0x35, 0x34, 0x26, 0x27, 0x26, 0x23, // =.4&#"...#54&'&# + 0x22, 0x06, 0x1d, 0x01, 0x23, 0x35, 0x34, 0x26, 0x27, 0x26, 0x27, 0x32, 0x17, 0x36, 0x33, 0x32, // "...#54&'&'2.632 + 0x16, 0x17, 0x36, 0x33, 0x32, 0x16, 0x1d, 0x01, 0x14, 0x07, 0x03, 0x06, 0x15, 0x14, 0x06, 0x23, // ..632..........# + 0x21, 0x22, 0x26, 0x35, 0x01, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x32, 0x17, 0x3e, 0x01, 0x33, // !"&5.&=.4632.>.3 + 0x32, 0x17, 0x36, 0x03, 0x00, 0x35, 0x4b, 0x20, 0x40, 0x30, 0x2e, 0x42, 0x20, 0x40, 0x30, 0x2e, // 2.6..5K @0.B @0. + 0x42, 0x23, 0x01, 0x36, 0x27, 0x26, 0x1a, 0x02, 0x80, 0x1a, 0x26, 0x0a, 0x6c, 0x0a, 0x40, 0x30, // B#.6'&....&.l.@0 + 0x2e, 0x42, 0x20, 0x32, 0x27, 0x0e, 0x09, 0x2e, 0x42, 0x20, 0x41, 0x32, 0x05, 0x08, 0x54, 0x41, // .B 2'...B A2..TA + 0x39, 0x42, 0x3b, 0x68, 0x22, 0x1b, 0x20, 0x64, 0x8c, 0x0d, 0x6d, 0x06, 0x70, 0x50, 0xfd, 0x80, // 9B;h". d..m.pP.. + 0x54, 0x6c, 0xfe, 0xcc, 0x4c, 0x8d, 0x63, 0x0b, 0x05, 0x06, 0x8b, 0x5f, 0x34, 0x2e, 0x48, 0x04, // Tl..L.c...._4.H. + 0x80, 0x4b, 0x35, 0x80, 0x5d, 0x30, 0x43, 0x42, 0x2e, 0xfe, 0x53, 0x1e, 0xac, 0x30, 0x43, 0x42, // .K5.]0CB..S..0CB + 0x2e, 0xe0, 0x2f, 0x23, 0xfe, 0xd8, 0x27, 0x3f, 0x1a, 0x26, 0x26, 0x1a, 0x19, 0x29, 0x24, 0x01, // ../#..'?.&&..)$. + 0xb4, 0x24, 0x29, 0xf6, 0x30, 0x43, 0x42, 0x2e, 0x20, 0x7d, 0x28, 0x41, 0x08, 0x02, 0x42, 0x2e, // .$).0CB. }(A..B. + 0x80, 0x7a, 0x33, 0x4d, 0x05, 0x01, 0x80, 0x32, 0x22, 0x36, 0x31, 0x07, 0x8f, 0x64, 0xf6, 0x33, // .z3M...2"61..d.3 + 0x39, 0xfe, 0x4c, 0x18, 0x2f, 0x50, 0x70, 0x75, 0x54, 0x01, 0x28, 0x49, 0x66, 0xe0, 0x63, 0x8d, // 9.L./PpuT.(If.c. + 0x01, 0x5f, 0x82, 0x15, 0x45, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x00, 0x06, 0x60, // ._..E..........` + 0x06, 0x00, 0x00, 0x31, 0x00, 0x58, 0x00, 0x00, 0x00, 0x22, 0x06, 0x15, 0x11, 0x23, 0x11, 0x34, // ...1.X..."...#.4 + 0x26, 0x22, 0x06, 0x15, 0x19, 0x01, 0x27, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x17, 0x01, 0x16, // &"....'&#"...... + 0x33, 0x21, 0x32, 0x36, 0x37, 0x13, 0x36, 0x35, 0x11, 0x34, 0x26, 0x22, 0x06, 0x15, 0x11, 0x23, // 3!267.65.4&"...# + 0x11, 0x34, 0x26, 0x22, 0x06, 0x15, 0x11, 0x23, 0x11, 0x34, 0x26, 0x32, 0x16, 0x17, 0x36, 0x33, // .4&"...#.4&2..63 + 0x32, 0x16, 0x1d, 0x01, 0x36, 0x16, 0x15, 0x11, 0x14, 0x07, 0x03, 0x0e, 0x01, 0x23, 0x21, 0x22, // 2...6........#!" + 0x26, 0x27, 0x01, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x11, 0x34, 0x36, 0x33, 0x32, 0x17, // &'.&54632..4632. + 0x36, 0x03, 0x9e, 0x5c, 0x42, 0x20, 0x42, 0x5c, 0x42, 0x9a, 0x26, 0x40, 0x35, 0x4b, 0x1a, 0x01, // 6...B B.B.&@5K.. + 0x80, 0x26, 0x40, 0x02, 0xb0, 0x22, 0x36, 0x07, 0x4c, 0x05, 0x42, 0x5c, 0x42, 0x20, 0x42, 0x5c, // .&@.."6.L.B.B B. + 0x42, 0x20, 0xb4, 0x88, 0x73, 0x1f, 0x13, 0x17, 0x63, 0x8d, 0x69, 0x97, 0x08, 0x4c, 0x0e, 0x7d, // B ..s...c.i..L.} + 0x51, 0xfd, 0x50, 0x3c, 0x6d, 0x24, 0xfe, 0x80, 0x33, 0x96, 0x6a, 0x4e, 0x32, 0x8d, 0x63, 0x17, // Q.P..%&#"..... + 0x05, 0x15, 0x21, 0x22, 0x06, 0x14, 0x16, 0x33, 0x21, 0x37, 0x35, 0x34, 0x3f, 0x01, 0x03, 0x32, // ..!"...3!754?..2 + 0x37, 0x25, 0x3e, 0x01, 0x35, 0x11, 0x34, 0x26, 0x23, 0x21, 0x07, 0x06, 0x15, 0x11, 0x14, 0x16, // 7%>.5.4&#!...... + 0x32, 0x36, 0x3d, 0x01, 0x33, 0x15, 0x14, 0x07, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x07, 0x05, 0x04, // 26=.3........... + 0x31, 0xb1, 0xa3, 0x3f, 0x17, 0x3e, 0x49, 0x05, 0xfe, 0xfb, 0x6a, 0x96, 0x96, 0x6a, 0x71, 0x2c, // 1..?.>I...j..jq, + 0x4a, 0x5b, 0x96, 0x6a, 0x2e, 0x2d, 0x02, 0x74, 0x01, 0x91, 0x6a, 0x96, 0x6c, 0x56, 0xfe, 0xad, // J[.j.-.t..j.lV.. + 0x5c, 0x8f, 0x9b, 0xa3, 0x1e, 0x24, 0x42, 0x2e, 0x1a, 0x14, 0x01, 0x52, 0x31, 0x3f, 0x01, 0x40, // .....$B....R1?.@ + 0x42, 0x2e, 0x1a, 0x14, 0xfe, 0xde, 0x1c, 0x12, 0x2b, 0x10, 0x10, 0x3f, 0x32, 0x14, 0x12, 0x01, // B.......+..?2... + 0x60, 0x1e, 0x24, 0xe8, 0xfd, 0x76, 0x18, 0x16, 0x35, 0x4b, 0x2d, 0x25, 0x02, 0x0e, 0xfd, 0x80, // `.$..v..5K-%.... + 0x35, 0x4b, 0x4b, 0x35, 0x02, 0x17, 0xe9, 0x2e, 0x6f, 0x6c, 0x52, 0x49, 0x01, 0x53, 0x2b, 0x36, // 5KK5....olRI.S+6 + 0x4b, 0x35, 0xfe, 0xcc, 0x88, 0x24, 0x42, 0x5c, 0x42, 0x20, 0x39, 0x34, 0x45, 0x2e, 0x26, 0xfe, // K5...$B.B 94E.&. + 0xca, 0x80, 0x8d, 0x31, 0x35, 0x05, 0x1e, 0x75, 0x45, 0x26, 0x0a, 0x96, 0xd4, 0x96, 0x11, 0x1c, // ...15..uE&...... + 0x83, 0x50, 0x6a, 0x96, 0x11, 0xef, 0x96, 0x6a, 0xfd, 0x64, 0x58, 0x8b, 0x15, 0x55, 0x17, 0x02, // .Pj....j.dX..U.. + 0xc7, 0x47, 0x4a, 0x0e, 0x37, 0x21, 0x2e, 0x42, 0x0a, 0x9a, 0x0a, 0x50, 0x32, 0xff, 0x00, 0x2e, // .GJ.7!.B...P2... + 0x42, 0x0a, 0x84, 0x0d, 0x08, 0x1a, 0x15, 0x25, 0x16, 0x32, 0x40, 0x09, 0xa0, 0x0e, 0x37, 0x03, // B......%.2@...7. + 0x11, 0xf8, 0x08, 0x4b, 0x35, 0x28, 0x42, 0x0e, 0xc8, 0x40, 0x4b, 0x6a, 0x4b, 0x6a, 0xc6, 0x3f, // ...K5(B..@KjKj.? + 0x2b, 0x66, 0xfc, 0x00, 0x13, 0x55, 0x0b, 0x45, 0x2c, 0x02, 0x9c, 0x35, 0x4b, 0x7e, 0x21, 0x31, // +f...U.E,..5K~!1 + 0xfe, 0xd8, 0x2e, 0x3e, 0x46, 0x2e, 0xd0, 0xd0, 0x46, 0x2c, 0x08, 0x51, 0x35, 0x2a, 0x48, 0x11, // ...>F...F,.Q5*H. + 0x8d, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x00, 0x08, 0x00, 0x06, 0x00, 0x00, 0x24, // ...............$ + 0x00, 0x62, 0x00, 0x00, 0x01, 0x32, 0x16, 0x17, 0x01, 0x16, 0x15, 0x11, 0x14, 0x06, 0x23, 0x21, // .b...2........#! + 0x22, 0x26, 0x3d, 0x01, 0x25, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x37, 0x21, // "&=.%!"&=.463!7! + 0x22, 0x26, 0x27, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x01, 0x11, 0x34, 0x27, 0x01, 0x26, 0x23, // "&'&=.463..4'.&# + 0x21, 0x22, 0x06, 0x15, 0x14, 0x1e, 0x01, 0x17, 0x3e, 0x01, 0x33, 0x21, 0x15, 0x21, 0x22, 0x06, // !"......>.3!.!". + 0x15, 0x14, 0x17, 0x1e, 0x01, 0x33, 0x21, 0x33, 0x32, 0x16, 0x15, 0x14, 0x0f, 0x01, 0x0e, 0x01, // .....3!32....... + 0x23, 0x21, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x33, 0x21, 0x32, 0x17, 0x05, 0x1e, 0x01, 0x1d, // #!".....3!2..... + 0x01, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x04, 0x7f, 0x3d, 0x6e, 0x24, 0x02, 0x3c, 0x76, 0x70, // ...3!26..=n$..32. + 0x17, 0x1b, 0x01, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x14, 0x07, 0x03, 0x3e, // ...>.32........> + 0x05, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x07, 0x01, 0x06, 0x23, 0x03, 0x22, 0x06, 0x07, 0x03, // .32.......#."... + 0x23, 0x03, 0x2e, 0x01, 0x23, 0x22, 0x06, 0x15, 0x14, 0x17, 0x13, 0x23, 0x03, 0x2e, 0x01, 0x23, // #...#".....#...# + 0x22, 0x06, 0x15, 0x14, 0x17, 0x13, 0x1e, 0x01, 0x17, 0x13, 0x1e, 0x01, 0x33, 0x21, 0x32, 0x37, // "...........3!27 + 0x01, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x07, 0x05, 0x35, 0x34, 0x1a, 0x01, 0x37, 0x36, 0x35, // .654&#"..54..765 + 0x34, 0x26, 0x23, 0x22, 0x06, 0x07, 0x03, 0x23, 0x13, 0x36, 0x35, 0x34, 0x26, 0x01, 0xcb, 0x4d, // 4&#"...#.654&..M + 0x79, 0x13, 0x65, 0x0d, 0x05, 0x74, 0x07, 0x7c, 0x5d, 0x11, 0x83, 0x57, 0x53, 0x82, 0x14, 0x53, // y.e..t.|]..WS..S + 0x67, 0x14, 0x82, 0x53, 0x59, 0x85, 0x0e, 0x5c, 0x78, 0x07, 0x7b, 0x0a, 0x37, 0x16, 0x30, 0x22, // g..SY...x.{.7.0" + 0x31, 0x19, 0x69, 0x96, 0x39, 0x32, 0xfe, 0x05, 0x44, 0x55, 0x31, 0x26, 0x3d, 0x09, 0xa4, 0x7f, // 1.i.92..DU1&=... + 0x91, 0x09, 0x3d, 0x26, 0x30, 0x40, 0x03, 0x84, 0x1a, 0x63, 0x09, 0x3e, 0x26, 0x2f, 0x42, 0x03, // ..=&0@...c.>&/B. + 0x74, 0x07, 0x04, 0x08, 0x64, 0x08, 0x34, 0x21, 0x02, 0xb6, 0x2a, 0x22, 0x01, 0xfb, 0x38, 0x4b, // t...d.4!..*"..8K + 0x34, 0x2b, 0x22, 0xfe, 0xcd, 0x40, 0x48, 0x03, 0x04, 0x40, 0x2f, 0x27, 0x3d, 0x09, 0x74, 0x1a, // 4+"..@H..@/'=.t. + 0x96, 0x03, 0x3f, 0xff, 0x00, 0x5f, 0x4b, 0x01, 0x91, 0x39, 0x33, 0x2d, 0x16, 0x01, 0xdd, 0x1b, // ..?.._K..93-.... + 0x1e, 0x5d, 0x88, 0x0a, 0x55, 0x6c, 0x67, 0x51, 0xfe, 0xa4, 0x01, 0xac, 0x51, 0x67, 0x73, 0x57, // .]..UlgQ....QgsW + 0x0a, 0x8a, 0x5d, 0x18, 0x23, 0xfe, 0x00, 0x07, 0x2b, 0x10, 0x1e, 0x0b, 0x0b, 0x94, 0x69, 0x3e, // ..].#...+.....i> + 0x70, 0x26, 0xfe, 0x84, 0x33, 0x06, 0x80, 0x30, 0x26, 0xfd, 0x56, 0x02, 0x5a, 0x26, 0x30, 0x42, // p&..3..0&.V.Z&0B + 0x2f, 0x0f, 0x0d, 0xfd, 0xdd, 0x01, 0x98, 0x25, 0x33, 0x42, 0x2e, 0x0e, 0x0c, 0xfe, 0x22, 0x1c, // /......%3B....". + 0x74, 0x1e, 0xfe, 0x6f, 0x20, 0x29, 0x1a, 0x01, 0x7b, 0x2b, 0x43, 0x34, 0x49, 0x1a, 0xe6, 0xe3, // t..o )..{+C4I... + 0x04, 0x01, 0x0c, 0x01, 0x28, 0x0d, 0x12, 0x0b, 0x2f, 0x44, 0x30, 0x26, 0xfe, 0x1e, 0x02, 0x70, // ....(.../D0&...p + 0x0e, 0x0e, 0x30, 0x44, 0x00, 0x05, 0x00, 0x00, 0xff, 0x00, 0x06, 0x80, 0x06, 0x00, 0x00, 0x33, // ..0D...........3 + 0x00, 0x5b, 0x00, 0x5f, 0x00, 0x63, 0x00, 0x67, 0x00, 0x00, 0x01, 0x22, 0x06, 0x15, 0x19, 0x01, // .[._.c.g...".... + 0x27, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x17, 0x01, 0x16, 0x33, 0x21, 0x32, 0x36, 0x37, 0x13, // '&#"......3!267. + 0x36, 0x3d, 0x01, 0x34, 0x26, 0x22, 0x06, 0x15, 0x23, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x1d, // 6=.4&"..#54&#".. + 0x01, 0x23, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x1d, 0x01, 0x23, 0x11, 0x34, 0x26, 0x27, 0x32, // .#54&#"...#.4&'2 + 0x16, 0x1d, 0x01, 0x36, 0x33, 0x32, 0x17, 0x36, 0x33, 0x32, 0x17, 0x36, 0x33, 0x32, 0x16, 0x1d, // ...632.632.632.. + 0x01, 0x14, 0x07, 0x03, 0x0e, 0x01, 0x23, 0x21, 0x22, 0x26, 0x27, 0x01, 0x26, 0x35, 0x34, 0x36, // ......#!"&'.&546 + 0x33, 0x32, 0x17, 0x11, 0x34, 0x36, 0x13, 0x11, 0x23, 0x11, 0x21, 0x11, 0x23, 0x11, 0x21, 0x11, // 32..46..#.!.#.!. + 0x23, 0x11, 0x02, 0x80, 0x35, 0x4b, 0x97, 0x29, 0x42, 0x34, 0x4a, 0x1a, 0x01, 0x80, 0x26, 0x40, // #...5K.)B4J...&@ + 0x02, 0xce, 0x16, 0x23, 0x05, 0x5c, 0x18, 0x38, 0x50, 0x38, 0x20, 0x40, 0x30, 0x2e, 0x42, 0x20, // ...#...8P8 @0.B + 0x4a, 0x36, 0x35, 0x4b, 0x20, 0x4a, 0x36, 0x6b, 0x95, 0x16, 0x0a, 0x63, 0x4a, 0x2f, 0x34, 0x71, // J65K J6k...cJ/4q + 0x47, 0x1b, 0x1d, 0x5e, 0x82, 0x1c, 0x5c, 0x10, 0x68, 0x42, 0xfd, 0x32, 0x3c, 0x6d, 0x24, 0xfe, // G..^....hB.2...1!~K5.y.?..^ + 0x5c, 0xfe, 0xad, 0x56, 0x6c, 0x96, 0x6a, 0x01, 0x91, 0x02, 0x74, 0x2d, 0x2e, 0x6a, 0x96, 0x5b, // ...Vl.j...t-.j.[ + 0x4a, 0x2c, 0x71, 0x6a, 0x96, 0x96, 0x6a, 0xfe, 0xfb, 0x05, 0x49, 0x37, 0x24, 0x1e, 0xa3, 0x9b, // J,qj..j...I7$... + 0x3f, 0x31, 0x01, 0x52, 0x14, 0x1a, 0x2e, 0x42, 0x87, 0x10, 0x10, 0x2b, 0x12, 0x1c, 0xfe, 0xde, // ?1.R...B...+.... + 0x14, 0x1a, 0x2e, 0x42, 0x24, 0x1e, 0x01, 0x60, 0x12, 0x14, 0x32, 0x3f, 0x01, 0x67, 0x16, 0x18, // ...B$..`..2?.g.. + 0xfd, 0x76, 0x45, 0x6f, 0x2e, 0xe9, 0x02, 0x17, 0x35, 0x4b, 0x4b, 0x35, 0xfd, 0x80, 0x02, 0x0e, // .vEo....5KK5.... + 0x25, 0x2d, 0x4b, 0xfa, 0xeb, 0x36, 0x2b, 0x01, 0x53, 0x49, 0x52, 0x5b, 0xfe, 0xca, 0x26, 0x2e, // %-K..6+.SIR[..&. + 0x45, 0x34, 0x39, 0x20, 0x42, 0x5c, 0x42, 0x24, 0x88, 0xfe, 0xcc, 0x35, 0x4b, 0x00, 0x00, 0x00, // E49 B.B$...5K... + 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x07, 0xb4, 0x04, 0x00, 0x00, 0x19, 0x00, 0x47, 0x00, 0x00, // .............G.. + 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, 0x21, // ....#!...+."&5.! + 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x05, 0x13, 0x16, 0x07, 0x06, 0x2b, // "&=.463!2......+ + 0x01, 0x22, 0x26, 0x27, 0x0b, 0x01, 0x06, 0x2b, 0x01, 0x22, 0x27, 0x0b, 0x01, 0x0e, 0x01, 0x2b, // ."&'...+."'....+ + 0x01, 0x22, 0x27, 0x26, 0x35, 0x13, 0x3e, 0x01, 0x3b, 0x01, 0x32, 0x17, 0x13, 0x16, 0x17, 0x3e, // ."'&5.>.;.2....> + 0x01, 0x37, 0x13, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x03, 0x59, 0x13, 0x0d, 0xfe, 0xd6, 0x12, 0x0d, // .7.6;.2..Y...... + 0x87, 0x0d, 0x13, 0xfe, 0xd7, 0x0d, 0x13, 0x12, 0x0e, 0x03, 0x19, 0x0d, 0x13, 0x04, 0x0e, 0x4d, // ...............M + 0x01, 0x09, 0x0a, 0x0d, 0x86, 0x0c, 0x12, 0x01, 0x2e, 0xbd, 0x08, 0x15, 0x78, 0x14, 0x09, 0xbc, // ............x... + 0x2d, 0x01, 0x12, 0x0c, 0x87, 0x0d, 0x0a, 0x09, 0x4e, 0x01, 0x12, 0x0c, 0x8e, 0x14, 0x09, 0xdc, // -.......N....... + 0x0a, 0x0a, 0x03, 0x0d, 0x04, 0xdd, 0x09, 0x14, 0x8d, 0x0d, 0x12, 0x03, 0xe0, 0x75, 0x0d, 0x12, // .............u.. + 0xfc, 0xd4, 0x0d, 0x13, 0x12, 0x0e, 0x03, 0x2c, 0x12, 0x0d, 0x75, 0x0e, 0x12, 0x13, 0x0a, 0xfc, // .......,..u..... + 0x3f, 0x0d, 0x0b, 0x0a, 0x11, 0x0c, 0x02, 0x4c, 0xfe, 0x57, 0x13, 0x13, 0x01, 0xab, 0xfd, 0xb2, // ?......L.W...... + 0x0c, 0x11, 0x0a, 0x0a, 0x0e, 0x03, 0xc1, 0x0c, 0x11, 0x13, 0xfd, 0xf8, 0x18, 0x1b, 0x07, 0x23, // ...............# + 0x09, 0x02, 0x08, 0x13, 0x11, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0xff, 0x00, 0x07, 0x00, // ................ + 0x06, 0x00, 0x00, 0x09, 0x00, 0x2a, 0x00, 0x3a, 0x00, 0x4a, 0x00, 0x00, 0x01, 0x34, 0x27, 0x26, // .....*.:.J...4'& + 0x2b, 0x01, 0x11, 0x33, 0x32, 0x36, 0x17, 0x13, 0x16, 0x07, 0x06, 0x2b, 0x01, 0x22, 0x27, 0x03, // +..326.....+."'. + 0x23, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x17, // #...+."&5.463!2. + 0x1e, 0x01, 0x15, 0x14, 0x06, 0x07, 0x16, 0x02, 0x20, 0x04, 0x06, 0x02, 0x10, 0x12, 0x16, 0x04, // ........ ....... + 0x20, 0x24, 0x36, 0x12, 0x10, 0x02, 0x26, 0x00, 0x10, 0x02, 0x06, 0x04, 0x20, 0x24, 0x26, 0x02, // $6...&..... $&. + 0x10, 0x12, 0x36, 0x24, 0x20, 0x04, 0x16, 0x04, 0x12, 0x3c, 0x21, 0x54, 0x7b, 0xa2, 0x42, 0x48, // ..6$ ....UbUI.-.... + 0xc5, 0x75, 0x75, 0xc5, 0x01, 0x10, 0x01, 0x2c, 0x01, 0x10, 0xc5, 0x75, 0x75, 0xc5, 0x01, 0xda, // .uu....,...uu... + 0x8e, 0xf0, 0xfe, 0xb4, 0xfe, 0x94, 0xfe, 0xb4, 0xf0, 0x8e, 0x8e, 0xf0, 0x01, 0x4c, 0x01, 0x6c, // .............L.l + 0x01, 0x4c, 0xf0, 0x03, 0x41, 0x58, 0x21, 0x12, 0xfe, 0xe7, 0x4a, 0xd9, 0xfe, 0x8b, 0x11, 0x0e, // .L..AX!...J..... + 0x10, 0x11, 0x01, 0x6d, 0xfe, 0xa2, 0x0e, 0x12, 0x12, 0x0e, 0x03, 0xc0, 0x0e, 0x12, 0x18, 0x1f, // ...m............ + 0x9c, 0x66, 0x5c, 0x93, 0x24, 0x0a, 0x03, 0x36, 0x75, 0xc5, 0xfe, 0xf0, 0xfe, 0xd4, 0xfe, 0xf0, // .f..$..6u....... + 0xc5, 0x75, 0x75, 0xc5, 0x01, 0x10, 0x01, 0x2c, 0x01, 0x10, 0xc5, 0xfe, 0x4b, 0xfe, 0x94, 0xfe, // .uu....,....K... + 0xb4, 0xf0, 0x8e, 0x8e, 0xf0, 0x01, 0x4c, 0x01, 0x6c, 0x01, 0x4c, 0xf0, 0x8e, 0x8e, 0xf0, 0x00, // ......L.l.L..... + 0x00, 0x04, 0x00, 0x00, 0xff, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x2d, 0x00, 0x5b, 0x00, 0x6b, // ...........-.[.k + 0x00, 0x7b, 0x00, 0x00, 0x01, 0x32, 0x37, 0x36, 0x2f, 0x01, 0x26, 0x27, 0x26, 0x0f, 0x01, 0x0e, // .{...276/.&'&... + 0x05, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x1f, 0x01, 0x16, 0x37, 0x36, 0x3f, // .#"&54632....76? + 0x01, 0x36, 0x27, 0x2e, 0x04, 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, 0x21, 0x32, 0x37, 0x36, 0x2f, // .6'..#"....!276/ + 0x01, 0x26, 0x27, 0x26, 0x0f, 0x01, 0x0e, 0x05, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, // .&'&....#"&54632 + 0x16, 0x1f, 0x01, 0x16, 0x37, 0x36, 0x3f, 0x01, 0x36, 0x27, 0x2e, 0x04, 0x23, 0x22, 0x06, 0x15, // ....76?.6'..#".. + 0x14, 0x16, 0x02, 0x20, 0x04, 0x06, 0x02, 0x10, 0x12, 0x16, 0x04, 0x20, 0x24, 0x36, 0x12, 0x10, // ... ....... $6.. + 0x02, 0x26, 0x00, 0x20, 0x04, 0x16, 0x12, 0x10, 0x02, 0x06, 0x04, 0x20, 0x24, 0x26, 0x02, 0x10, // .&. ....... $&.. + 0x12, 0x36, 0x02, 0x5d, 0x99, 0x68, 0x0e, 0x0b, 0x2d, 0x06, 0x12, 0x10, 0x0b, 0x04, 0x04, 0x0f, // .6.].h..-....... + 0x14, 0x1b, 0x1e, 0x25, 0x13, 0x4c, 0x62, 0x60, 0x4a, 0x25, 0x45, 0x10, 0x10, 0x0b, 0x0f, 0x10, // ...%.Lb`J%E..... + 0x08, 0x35, 0x0d, 0x0f, 0x03, 0x10, 0x2c, 0x35, 0x52, 0x2d, 0x94, 0xc4, 0xc2, 0x03, 0x0c, 0x99, // .5....,5R-...... + 0x68, 0x0e, 0x0a, 0x2d, 0x08, 0x11, 0x10, 0x0b, 0x04, 0x04, 0x0f, 0x14, 0x1b, 0x1e, 0x25, 0x13, // h..-..........%. + 0x4c, 0x62, 0x60, 0x4a, 0x25, 0x45, 0x10, 0x10, 0x0b, 0x0f, 0x10, 0x08, 0x35, 0x0d, 0x0f, 0x03, // Lb`J%E......5... + 0x10, 0x2c, 0x35, 0x52, 0x2d, 0x93, 0xc5, 0xc2, 0x27, 0xfe, 0xd4, 0xfe, 0xf0, 0xc5, 0x75, 0x75, // .,5R-...'.....uu + 0xc5, 0x01, 0x10, 0x01, 0x2c, 0x01, 0x10, 0xc5, 0x75, 0x75, 0xc5, 0xfd, 0xa4, 0x01, 0x6c, 0x01, // ....,...uu....l. + 0x4c, 0xf0, 0x8e, 0x8e, 0xf0, 0xfe, 0xb4, 0xfe, 0x94, 0xfe, 0xb4, 0xf0, 0x8e, 0x8e, 0xf0, 0x01, // L............... + 0x2f, 0x68, 0x12, 0x12, 0x52, 0x0d, 0x04, 0x02, 0x0d, 0x03, 0x04, 0x0c, 0x0f, 0x0e, 0x0c, 0x07, // /h..R........... + 0x64, 0x4d, 0x4c, 0x63, 0x1c, 0x0e, 0x0e, 0x0b, 0x01, 0x02, 0x0c, 0x4e, 0x14, 0x13, 0x04, 0x10, // dMLc.......N.... + 0x1f, 0x19, 0x14, 0xc1, 0x90, 0x92, 0xbf, 0x68, 0x12, 0x12, 0x52, 0x0e, 0x03, 0x02, 0x0d, 0x03, // .......h..R..... + 0x04, 0x0c, 0x0f, 0x0e, 0x0c, 0x07, 0x64, 0x4d, 0x4c, 0x63, 0x1c, 0x0e, 0x0e, 0x0b, 0x01, 0x02, // ......dMLc...... + 0x0c, 0x4e, 0x14, 0x13, 0x04, 0x10, 0x1f, 0x19, 0x14, 0xc1, 0x90, 0x92, 0xbf, 0x04, 0x31, 0x75, // .N............1u + 0xc5, 0xfe, 0xf0, 0xfe, 0xd4, 0xfe, 0xf0, 0xc5, 0x75, 0x75, 0xc5, 0x01, 0x10, 0x01, 0x2c, 0x01, // ........uu....,. + 0x10, 0xc5, 0x01, 0x15, 0x8e, 0xf0, 0xfe, 0xb4, 0xfe, 0x94, 0xfe, 0xb4, 0xf0, 0x8e, 0x8e, 0xf0, // ................ + 0x01, 0x4c, 0x01, 0x6c, 0x01, 0x4c, 0xf0, 0x00, 0x00, 0x02, 0x00, 0x40, 0xff, 0xe0, 0x07, 0xc0, // .L.l.L.....@.... + 0x05, 0x20, 0x00, 0x0b, 0x00, 0x17, 0x00, 0x00, 0x09, 0x04, 0x17, 0x07, 0x27, 0x09, 0x01, 0x37, // . ..........'..7 + 0x09, 0x03, 0x27, 0x37, 0x17, 0x09, 0x01, 0x07, 0x01, 0x07, 0x01, 0x02, 0xe0, 0x01, 0x80, 0xfe, // ..'7............ + 0x80, 0xfd, 0x60, 0x02, 0xa0, 0xa8, 0x60, 0x48, 0xfe, 0x20, 0x01, 0xe0, 0xc1, 0xfe, 0xdf, 0x02, // ..`...`H. ...... + 0xa0, 0x02, 0xa0, 0xfd, 0x60, 0xa8, 0x60, 0x48, 0x01, 0xe0, 0xfe, 0x20, 0xc1, 0x01, 0x21, 0x60, // ....`.`H... ..!` + 0xfe, 0x80, 0x02, 0xe0, 0xfe, 0x80, 0xfe, 0x80, 0x02, 0xa0, 0x02, 0xa0, 0xa8, 0x60, 0x48, 0xfe, // .............`H. + 0x20, 0xfe, 0x20, 0xc1, 0x01, 0x1f, 0x02, 0xa0, 0xfd, 0x60, 0xfd, 0x60, 0xa8, 0x60, 0x48, 0x01, // . ......`.`.`H. + 0xe0, 0x01, 0xe0, 0xc1, 0xfe, 0xe1, 0x60, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // ......`......... + 0xff, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x0b, 0x00, 0x17, 0x00, 0x27, 0x00, 0x00, 0x25, 0x09, // ...........'..%. + 0x01, 0x07, 0x17, 0x07, 0x09, 0x01, 0x17, 0x37, 0x27, 0x09, 0x05, 0x37, 0x27, 0x37, 0x09, 0x01, // .......7'..7'7.. + 0x27, 0x07, 0x00, 0x10, 0x02, 0x06, 0x04, 0x20, 0x24, 0x26, 0x02, 0x10, 0x12, 0x36, 0x24, 0x20, // '...... $&...6$ + 0x04, 0x16, 0x02, 0xcd, 0x01, 0x0f, 0xfe, 0xe9, 0x58, 0xc0, 0x60, 0xfe, 0xe9, 0x01, 0x17, 0x28, // ........X.`....( + 0x57, 0x7f, 0xfe, 0x3a, 0x03, 0x2c, 0x01, 0xc6, 0xfe, 0x3a, 0xfe, 0xf1, 0x01, 0x17, 0x58, 0xc0, // W..:.,...:....X. + 0x60, 0x01, 0x17, 0xfe, 0xe9, 0x28, 0x57, 0x03, 0x4c, 0x8e, 0xf0, 0xfe, 0xb4, 0xfe, 0x94, 0xfe, // `....(W.L....... + 0xb4, 0xf0, 0x8e, 0x8e, 0xf0, 0x01, 0x4c, 0x01, 0x6c, 0x01, 0x4c, 0xf0, 0xb6, 0x01, 0x0f, 0x01, // ......L.l.L..... + 0x17, 0x58, 0xbf, 0x60, 0x01, 0x17, 0x01, 0x17, 0x28, 0x57, 0x80, 0xfe, 0x3a, 0xfe, 0x42, 0x01, // .X.`....(W..:.B. + 0xc6, 0x01, 0xc6, 0xfe, 0xf1, 0xfe, 0xe9, 0x58, 0xbf, 0x60, 0xfe, 0xe9, 0xfe, 0xe9, 0x28, 0x58, // .......X.`....(X + 0x01, 0xf9, 0xfe, 0x94, 0xfe, 0xb4, 0xf0, 0x8e, 0x8e, 0xf0, 0x01, 0x4c, 0x01, 0x6c, 0x01, 0x4c, // ...........L.l.L + 0xf0, 0x8e, 0x8e, 0xf0, 0x00, 0x0a, 0x00, 0x00, 0xff, 0xdc, 0x09, 0x00, 0x05, 0x24, 0x00, 0x0b, // .............$.. + 0x00, 0x13, 0x00, 0x1c, 0x00, 0x25, 0x00, 0x2f, 0x00, 0x39, 0x00, 0x45, 0x00, 0x53, 0x00, 0x5b, // .....%./.9.E.S.[ + 0x00, 0x80, 0x00, 0x00, 0x01, 0x14, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, // .......#"&54632. + 0x24, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x05, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, // $.."&462.4&"...2 + 0x36, 0x24, 0x34, 0x26, 0x23, 0x22, 0x06, 0x14, 0x16, 0x32, 0x25, 0x14, 0x06, 0x23, 0x22, 0x26, // 6$4&#"...2%..#"& + 0x34, 0x36, 0x32, 0x16, 0x24, 0x14, 0x06, 0x23, 0x22, 0x26, 0x34, 0x36, 0x33, 0x32, 0x00, 0x10, // 462.$..#"&4632.. + 0x00, 0x23, 0x22, 0x0e, 0x01, 0x14, 0x1e, 0x01, 0x33, 0x32, 0x01, 0x26, 0x21, 0x20, 0x07, 0x32, // .#".....32.&! .2 + 0x1e, 0x02, 0x15, 0x34, 0x3e, 0x02, 0x00, 0x10, 0x00, 0x20, 0x00, 0x10, 0x00, 0x20, 0x13, 0x21, // ...4>.... ... .! + 0x0e, 0x01, 0x07, 0x16, 0x15, 0x14, 0x02, 0x04, 0x23, 0x22, 0x26, 0x27, 0x06, 0x07, 0x2e, 0x01, // ........#"&'.... + 0x27, 0x0e, 0x01, 0x23, 0x22, 0x24, 0x02, 0x35, 0x34, 0x37, 0x2e, 0x01, 0x27, 0x21, 0x36, 0x24, // '..#"$.547..'!6$ + 0x33, 0x32, 0x04, 0x02, 0x8b, 0x37, 0x26, 0x27, 0x37, 0x37, 0x27, 0x26, 0x37, 0x04, 0x82, 0x37, // 32...7&'77'&7..7 + 0x4e, 0x37, 0x37, 0x4e, 0xfc, 0x27, 0x71, 0xa0, 0x71, 0x71, 0xa0, 0x71, 0x04, 0x81, 0x71, 0x50, // N77N.'q.qq.q..qP + 0x4f, 0x72, 0x71, 0xa0, 0xfc, 0x45, 0xa3, 0x73, 0x74, 0xa3, 0xa4, 0xe6, 0xa3, 0x04, 0x82, 0xa3, // Orq..E.st....... + 0x74, 0x73, 0xa3, 0xa3, 0x73, 0x74, 0xfc, 0xdf, 0xfe, 0xf1, 0xbf, 0x7d, 0xd4, 0x7c, 0x7c, 0xd4, // ts..st.....}.||. + 0x7d, 0xbf, 0x03, 0xab, 0xfe, 0xfe, 0xd2, 0xfe, 0xc1, 0xfe, 0x75, 0xd4, 0x99, 0x5b, 0x57, 0x95, // }.........u..[W. + 0xce, 0x02, 0x51, 0xfe, 0xf2, 0xfe, 0x82, 0xfe, 0xf1, 0x01, 0x0f, 0x01, 0x7e, 0x04, 0x01, 0x7f, // ..Q.........~... + 0x2c, 0x3e, 0x09, 0x6e, 0x9a, 0xfe, 0xf8, 0x9b, 0x85, 0xe8, 0x50, 0x2f, 0x52, 0x0b, 0x55, 0x20, // ,>.n......P/R.U + 0x50, 0xe9, 0x85, 0x9b, 0xfe, 0xf8, 0x9a, 0x6e, 0x09, 0x3e, 0x2c, 0x01, 0x6d, 0x95, 0x01, 0x9c, // P......n.>,.m... + 0xe2, 0xe0, 0x01, 0x8a, 0x02, 0x1b, 0x27, 0x37, 0x37, 0x27, 0x26, 0x37, 0x37, 0x02, 0x4e, 0x37, // ......'77'&77.N7 + 0x37, 0x4e, 0x36, 0x5e, 0x4f, 0x72, 0x71, 0xa0, 0x71, 0x71, 0x01, 0xa0, 0x71, 0x71, 0xa0, 0x71, // 7N6^Orq.qq..qq.q + 0xc0, 0x74, 0xa3, 0xa4, 0xe6, 0xa3, 0xa3, 0x01, 0xe6, 0xa3, 0xa3, 0xe6, 0xa3, 0xfe, 0x28, 0x01, // .t............(. + 0x7e, 0x01, 0x0f, 0x7c, 0xd5, 0xfa, 0xd5, 0x7c, 0x04, 0x0b, 0x6f, 0x6e, 0x5b, 0x9a, 0xd4, 0x75, // ~..|...|..on[..u + 0x73, 0xd1, 0x98, 0x5e, 0xfd, 0x07, 0x01, 0x7e, 0x01, 0x0f, 0xfe, 0xf1, 0xfe, 0x82, 0xfe, 0xf1, // s..^...~........ + 0x04, 0x04, 0x33, 0x7f, 0x33, 0x97, 0xba, 0x9c, 0xfe, 0xf8, 0x99, 0x70, 0x63, 0x38, 0x7b, 0x16, // ..3.3......pc8{. + 0x79, 0x25, 0x63, 0x71, 0x99, 0x01, 0x08, 0x9c, 0xba, 0x97, 0x33, 0x7f, 0x33, 0x64, 0x71, 0x70, // y%cq......3.3dqp + 0x00, 0x03, 0x00, 0x66, 0xff, 0x00, 0x04, 0x9a, 0x06, 0x00, 0x00, 0x09, 0x00, 0x13, 0x00, 0x4c, // ...f...........L + 0x00, 0x00, 0x00, 0x20, 0x00, 0x35, 0x34, 0x00, 0x20, 0x00, 0x15, 0x14, 0x00, 0x22, 0x06, 0x15, // ... .54. ....".. + 0x14, 0x16, 0x32, 0x36, 0x35, 0x34, 0x01, 0x1e, 0x01, 0x0e, 0x02, 0x07, 0x06, 0x07, 0x17, 0x01, // ..2654.......... + 0x16, 0x14, 0x0f, 0x01, 0x06, 0x22, 0x27, 0x26, 0x27, 0x01, 0x06, 0x22, 0x2f, 0x01, 0x26, 0x34, // ....."'&'.."/.&4 + 0x37, 0x01, 0x37, 0x26, 0x27, 0x2e, 0x03, 0x36, 0x37, 0x3e, 0x02, 0x16, 0x17, 0x1e, 0x04, 0x33, // 7.7&'..67>.....3 + 0x32, 0x36, 0x3f, 0x01, 0x3e, 0x01, 0x1e, 0x01, 0x03, 0x3c, 0xfe, 0x88, 0xfe, 0xf6, 0x01, 0x0a, // 26?.>....<...... + 0x01, 0x78, 0x01, 0x0a, 0xfe, 0x96, 0xb8, 0x83, 0x83, 0xb8, 0x83, 0x01, 0x2c, 0x0d, 0x04, 0x0d, // .x..........,... + 0x28, 0x2d, 0x27, 0x73, 0xc8, 0x49, 0x01, 0x0b, 0x1e, 0x1e, 0x0c, 0x1f, 0x56, 0x1f, 0x43, 0xc8, // (-'s.I......V.C. + 0xfe, 0xf5, 0x1f, 0x56, 0x1e, 0x0c, 0x1f, 0x1f, 0x01, 0x0b, 0x48, 0xcb, 0x72, 0x27, 0x2d, 0x28, // ...V......H.r'-( + 0x0d, 0x04, 0x0d, 0x0a, 0x24, 0x30, 0x40, 0x21, 0x05, 0x14, 0x42, 0x48, 0x70, 0x39, 0x5b, 0xa6, // ....$0@!..BHp9[. + 0x25, 0x26, 0x21, 0x40, 0x30, 0x24, 0x02, 0x75, 0x01, 0x0a, 0xbb, 0xbc, 0x01, 0x0a, 0xfe, 0xf6, // %&!@0$.u........ + 0xbc, 0xbb, 0x01, 0x9b, 0x83, 0x5d, 0x5c, 0x83, 0x83, 0x5c, 0x5d, 0xfd, 0xa7, 0x1b, 0x2d, 0x24, // .....]....]...-$ + 0x29, 0x21, 0x19, 0x49, 0x15, 0x48, 0xfe, 0xf5, 0x1f, 0x56, 0x1e, 0x0d, 0x1e, 0x1e, 0x44, 0xc8, // )!.I.H...V....D. + 0xfe, 0xf4, 0x1e, 0x1e, 0x0d, 0x1e, 0x56, 0x1f, 0x01, 0x0b, 0x48, 0x15, 0x49, 0x19, 0x21, 0x29, // ......V...H.I.!) + 0x24, 0x2d, 0x1b, 0x14, 0x1e, 0x0e, 0x12, 0x1a, 0x04, 0x0e, 0x23, 0x1a, 0x16, 0x33, 0x19, 0x19, // $-........#..3.. + 0x1a, 0x12, 0x0e, 0x1e, 0x00, 0x04, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x07, // ................ + 0x00, 0x36, 0x00, 0x3e, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, // .6.>.N....."&462 + 0x01, 0x2e, 0x01, 0x06, 0x07, 0x0e, 0x02, 0x22, 0x26, 0x2f, 0x01, 0x2e, 0x01, 0x06, 0x07, 0x06, // ......."&/...... + 0x16, 0x17, 0x16, 0x17, 0x07, 0x06, 0x07, 0x06, 0x14, 0x1f, 0x01, 0x16, 0x32, 0x3f, 0x01, 0x16, // ............2?.. + 0x17, 0x16, 0x32, 0x3f, 0x01, 0x36, 0x34, 0x2f, 0x02, 0x36, 0x37, 0x3e, 0x01, 0x02, 0x10, 0x26, // ..2?.64/.67>...& + 0x20, 0x06, 0x10, 0x16, 0x20, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, // ... ....#!"&5.4 + 0x36, 0x33, 0x21, 0x32, 0x16, 0x03, 0x9f, 0x5d, 0x84, 0x5d, 0x5d, 0x84, 0x01, 0x33, 0x0a, 0x24, // 63!2...].]]..3.$ + 0x3b, 0x1f, 0x0a, 0x26, 0x7c, 0x82, 0x76, 0x1b, 0x1b, 0x1f, 0x3b, 0x24, 0x0a, 0x16, 0x28, 0x43, // ;..&|.v...;$..(C + 0x53, 0x8f, 0x33, 0x8e, 0x31, 0x16, 0x16, 0x09, 0x16, 0x3d, 0x16, 0xbf, 0x72, 0x4d, 0x16, 0x3d, // S.3.1....=..rM.= + 0x16, 0x09, 0x16, 0x16, 0xbf, 0x34, 0x8d, 0x54, 0x43, 0x28, 0x47, 0xbe, 0xfe, 0xf4, 0xbe, 0xbe, // .....4.TC(G..... + 0x01, 0x0c, 0x02, 0x7a, 0xa9, 0x77, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, // ...z.w.@w..w..w. + 0x03, 0xfe, 0x84, 0x5d, 0x5d, 0x84, 0x5d, 0xfd, 0xf6, 0x14, 0x18, 0x05, 0x19, 0x08, 0x18, 0x28, // ...]].]........( + 0x24, 0x12, 0x12, 0x19, 0x05, 0x18, 0x14, 0x2d, 0x3b, 0x2c, 0x35, 0x0e, 0x34, 0x8e, 0x30, 0x16, // $......-;,5.4.0. + 0x3d, 0x16, 0x09, 0x16, 0x16, 0xbf, 0x73, 0x4c, 0x16, 0x16, 0x09, 0x16, 0x3d, 0x16, 0xbe, 0x34, // =.....sL....=..4 + 0x0e, 0x35, 0x2c, 0x3b, 0x01, 0x12, 0x01, 0x0c, 0xbe, 0xbe, 0xfe, 0xf4, 0xbe, 0x01, 0xe8, 0xfc, // .5,;............ + 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0xa9, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // @w..w..w........ + 0xff, 0x80, 0x06, 0xb8, 0x05, 0x80, 0x00, 0x12, 0x00, 0x28, 0x00, 0x00, 0x01, 0x32, 0x16, 0x15, // .........(...2.. + 0x11, 0x14, 0x02, 0x06, 0x04, 0x23, 0x22, 0x24, 0x26, 0x02, 0x35, 0x11, 0x34, 0x36, 0x33, 0x01, // .....#"$&.5.463. + 0x32, 0x37, 0x01, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x07, 0x09, 0x01, 0x26, 0x23, 0x22, 0x06, // 27.654&#"...&#". + 0x15, 0x14, 0x17, 0x01, 0x16, 0x06, 0x1d, 0x41, 0x5a, 0x88, 0xe5, 0xfe, 0xc1, 0xaf, 0xb0, 0xfe, // .......AZ....... + 0xc1, 0xe6, 0x88, 0x5c, 0x40, 0x02, 0xc1, 0x2f, 0x23, 0x01, 0x94, 0x25, 0x45, 0x31, 0x2f, 0x23, // ....@../#..%E1/# + 0xfe, 0xbd, 0xfe, 0xbd, 0x23, 0x2e, 0x31, 0x45, 0x24, 0x01, 0x95, 0x21, 0x05, 0x80, 0x5b, 0x41, // ....#.1E$..!..[A + 0xfd, 0xf9, 0xb0, 0xfe, 0xc0, 0xe6, 0x87, 0x87, 0xe6, 0x01, 0x40, 0xb0, 0x02, 0x07, 0x40, 0x5c, // ..........@...@. + 0xfb, 0xd8, 0x21, 0x01, 0x84, 0x23, 0x32, 0x31, 0x45, 0x21, 0xfe, 0xca, 0x01, 0x36, 0x21, 0x45, // ..!..#21E!...6!E + 0x31, 0x33, 0x22, 0xfe, 0x7c, 0x21, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0x98, 0x09, 0x00, // 13".|!.......... + 0x05, 0x67, 0x00, 0x4c, 0x00, 0x00, 0x05, 0x01, 0x06, 0x00, 0x07, 0x06, 0x26, 0x35, 0x26, 0x00, // .g.L........&5&. + 0x27, 0x2e, 0x02, 0x23, 0x34, 0x26, 0x35, 0x21, 0x15, 0x0e, 0x02, 0x17, 0x16, 0x00, 0x17, 0x36, // '..#4&5!.......6 + 0x12, 0x37, 0x26, 0x02, 0x27, 0x26, 0x27, 0x35, 0x05, 0x15, 0x0e, 0x01, 0x17, 0x1e, 0x01, 0x17, // .7&.'&'5........ + 0x36, 0x37, 0x36, 0x26, 0x27, 0x36, 0x34, 0x35, 0x32, 0x3e, 0x01, 0x33, 0x15, 0x0e, 0x01, 0x07, // 676&'6452>.3.... + 0x03, 0x16, 0x12, 0x17, 0x01, 0x2e, 0x02, 0x27, 0x35, 0x05, 0x17, 0x07, 0x06, 0x07, 0x00, 0x07, // .......'5....... + 0x05, 0xd6, 0xfe, 0xd9, 0x19, 0xfe, 0xf5, 0x41, 0x01, 0x35, 0x52, 0xfe, 0xa5, 0x56, 0x15, 0x5b, // .......A.5R..V.[ + 0x74, 0x2c, 0x01, 0x02, 0x47, 0x27, 0x51, 0x34, 0x10, 0x1a, 0x01, 0x7d, 0x2d, 0x1f, 0xda, 0x16, // t,..G'Q4...}-... + 0x13, 0xd6, 0x1d, 0x26, 0xa3, 0x02, 0x01, 0x3c, 0x43, 0x15, 0x21, 0x6c, 0x20, 0x6e, 0x3f, 0x18, // ...&...r!...... + 0x0e, 0x47, 0x3b, 0x1a, 0x01, 0xcc, 0x01, 0x01, 0x8b, 0x3e, 0xfd, 0xf2, 0x21, 0x67, 0x02, 0xb7, // .G;......>..!g.. + 0x31, 0xfd, 0xff, 0x85, 0x01, 0x01, 0x01, 0xc1, 0x03, 0x14, 0xca, 0x32, 0x73, 0x56, 0x05, 0x26, // 1..........2sV.& + 0x08, 0x32, 0x02, 0x1c, 0x3a, 0x23, 0x3b, 0xfc, 0x90, 0x64, 0x3d, 0x01, 0x9b, 0x2a, 0x27, 0x01, // .2..:#;..d=..*'. + 0xe4, 0x35, 0x45, 0x02, 0x32, 0x01, 0x2f, 0x02, 0x2e, 0x2e, 0x46, 0xef, 0x44, 0xd6, 0x95, 0x37, // .5E.2./...F.D..7 + 0x31, 0x02, 0x07, 0x24, 0x06, 0x01, 0x01, 0x31, 0x02, 0x3e, 0x32, 0xfe, 0x46, 0x21, 0xfd, 0xfe, // 1..$...1.>2.F!.. + 0x11, 0x03, 0xf9, 0x26, 0x31, 0x0e, 0x01, 0x32, 0x04, 0x02, 0x2c, 0x04, 0x8d, 0xfb, 0x40, 0x4b, // ...&1..2..,...@K + 0x00, 0x05, 0x00, 0x00, 0xff, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x18, 0x00, 0x72, // ...............r + 0x00, 0x82, 0x00, 0x92, 0x00, 0x00, 0x01, 0x14, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x32, // .........#"&5462 + 0x16, 0x17, 0x01, 0x0e, 0x04, 0x07, 0x01, 0x3e, 0x04, 0x25, 0x14, 0x07, 0x2e, 0x02, 0x23, 0x22, // .......>.%....#" + 0x15, 0x14, 0x17, 0x0e, 0x01, 0x07, 0x27, 0x26, 0x23, 0x22, 0x06, 0x1f, 0x01, 0x06, 0x23, 0x22, // ......'&#"....#" + 0x27, 0x3e, 0x02, 0x35, 0x34, 0x23, 0x22, 0x0e, 0x01, 0x07, 0x2e, 0x01, 0x27, 0x37, 0x36, 0x35, // '>.54#".....'765 + 0x34, 0x26, 0x0f, 0x01, 0x26, 0x35, 0x34, 0x37, 0x1e, 0x02, 0x33, 0x32, 0x35, 0x34, 0x26, 0x2f, // 4&..&547..3254&/ + 0x01, 0x3e, 0x01, 0x37, 0x17, 0x16, 0x33, 0x32, 0x36, 0x2f, 0x01, 0x36, 0x33, 0x32, 0x17, 0x06, // .>.7..326/.632.. + 0x15, 0x14, 0x33, 0x32, 0x37, 0x1e, 0x01, 0x17, 0x07, 0x06, 0x15, 0x14, 0x16, 0x3f, 0x01, 0x1e, // ..327........?.. + 0x01, 0x10, 0x02, 0x26, 0x24, 0x20, 0x04, 0x06, 0x02, 0x10, 0x12, 0x16, 0x04, 0x20, 0x24, 0x36, // ...&$ ....... $6 + 0x12, 0x10, 0x02, 0x06, 0x04, 0x20, 0x24, 0x26, 0x02, 0x10, 0x12, 0x36, 0x24, 0x20, 0x04, 0x16, // ..... $&...6$ .. + 0x03, 0xb5, 0x21, 0x19, 0x1a, 0x26, 0x22, 0x32, 0x26, 0x0f, 0x01, 0x5e, 0x09, 0x75, 0x86, 0x8b, // ..!..&"2&..^.u.. + 0x5f, 0x03, 0xfe, 0xa3, 0x07, 0x78, 0x84, 0x8c, 0x5e, 0x02, 0x8a, 0x68, 0x03, 0x1c, 0x19, 0x04, // _....x..^..h.... + 0x0d, 0x3b, 0x4a, 0xdd, 0x83, 0x10, 0x01, 0x0e, 0x05, 0x06, 0x01, 0x10, 0x48, 0x4a, 0xc7, 0xad, // .;J.........HJ.. + 0x01, 0x18, 0x13, 0x0d, 0x06, 0x16, 0x17, 0x02, 0x71, 0x9e, 0x1f, 0x45, 0x0a, 0x0b, 0x05, 0x44, // ........q..E...D + 0x0e, 0x6d, 0x02, 0x21, 0x1b, 0x04, 0x0d, 0x19, 0x14, 0x14, 0x4d, 0xe0, 0x84, 0x0f, 0x02, 0x0d, // .m.!......M..... + 0x05, 0x06, 0x01, 0x0f, 0x47, 0x3f, 0xcc, 0xaf, 0x27, 0x0c, 0x0b, 0x25, 0x6f, 0x99, 0x1f, 0x38, // ....G?..'..%o..8 + 0x0a, 0x0b, 0x04, 0x39, 0x0e, 0x55, 0x7f, 0xd6, 0xfe, 0xd8, 0xfe, 0xba, 0xfe, 0xd8, 0xd6, 0x7f, // ...9.U.......... + 0x7f, 0xd6, 0x01, 0x28, 0x01, 0x46, 0x01, 0x28, 0xd6, 0xdf, 0x8e, 0xf0, 0xfe, 0xb4, 0xfe, 0x94, // ...(.F.(........ + 0xfe, 0xb4, 0xf0, 0x8e, 0x8e, 0xf0, 0x01, 0x4c, 0x01, 0x6c, 0x01, 0x4c, 0xf0, 0x02, 0x83, 0x1a, // .......L.l.L.... + 0x26, 0x21, 0x19, 0x1a, 0x26, 0x21, 0x53, 0x02, 0x45, 0x08, 0x6d, 0x7c, 0x82, 0x5b, 0x06, 0xfd, // &!..&!S.E.m|.[.. + 0xbc, 0x07, 0x6e, 0x7b, 0x83, 0x5b, 0x3c, 0xc9, 0xaa, 0x02, 0x12, 0x0f, 0x0d, 0x0a, 0x22, 0x70, // ..n{.[<......."p + 0x9d, 0x20, 0x43, 0x0a, 0x0b, 0x04, 0x44, 0x0f, 0x69, 0x02, 0x25, 0x1e, 0x04, 0x0d, 0x1d, 0x28, // . C...D.i.%....( + 0x03, 0x4b, 0xe1, 0x84, 0x0f, 0x03, 0x0c, 0x05, 0x06, 0x01, 0x0f, 0x48, 0x43, 0xce, 0xad, 0x01, // .K.........HC... + 0x16, 0x10, 0x0c, 0x06, 0x13, 0x0c, 0x0c, 0x70, 0x9a, 0x1e, 0x43, 0x0a, 0x0b, 0x05, 0x42, 0x0d, // .......p..C...B. + 0x6d, 0x38, 0x09, 0x0d, 0x40, 0x4b, 0xde, 0x82, 0x0c, 0x02, 0x0e, 0x05, 0x06, 0x01, 0x0d, 0x48, // m8..@K.........H + 0xe7, 0x01, 0x46, 0x01, 0x28, 0xd6, 0x7f, 0x7f, 0xd6, 0xfe, 0xd8, 0xfe, 0xba, 0xfe, 0xd8, 0xd6, // ..F.(........... + 0x7f, 0x7f, 0xd6, 0x02, 0x81, 0xfe, 0x94, 0xfe, 0xb4, 0xf0, 0x8e, 0x8e, 0xf0, 0x01, 0x4c, 0x01, // ..............L. + 0x6c, 0x01, 0x4c, 0xf0, 0x8e, 0x8e, 0xf0, 0x00, 0x00, 0x04, 0x00, 0x00, 0xff, 0x01, 0x07, 0x00, // l.L............. + 0x06, 0x00, 0x00, 0x0b, 0x00, 0x16, 0x00, 0x22, 0x00, 0x2a, 0x00, 0x00, 0x01, 0x36, 0x17, 0x16, // .......".*...6.. + 0x17, 0x25, 0x26, 0x04, 0x07, 0x01, 0x36, 0x24, 0x09, 0x01, 0x16, 0x04, 0x37, 0x03, 0x26, 0x24, // .%&...6$....7.&$ + 0x02, 0x35, 0x10, 0x25, 0x16, 0x12, 0x02, 0x06, 0x07, 0x06, 0x25, 0x01, 0x36, 0x02, 0x27, 0x24, // .5.%......%.6.'$ + 0x32, 0x16, 0x14, 0x06, 0x22, 0x26, 0x34, 0x03, 0x7d, 0xf0, 0xd3, 0xe8, 0x78, 0xfd, 0x1a, 0xa0, // 2..."&4.}...x... + 0xfe, 0xf4, 0x33, 0xfe, 0xec, 0x80, 0x01, 0x6e, 0xfd, 0xdd, 0x01, 0x51, 0x48, 0x01, 0x16, 0x9a, // ..3....n...QH... + 0xe6, 0xd4, 0xfe, 0xa6, 0xc7, 0x06, 0xc4, 0x3a, 0x03, 0x64, 0xce, 0x8f, 0xe6, 0xfe, 0xf4, 0x01, // .......:.d...... + 0x95, 0x58, 0x0b, 0x65, 0xfe, 0x38, 0xfa, 0xb1, 0xb1, 0xfa, 0xb1, 0x06, 0x00, 0x02, 0x7a, 0x86, // .X.e.8........z. + 0xee, 0x27, 0x09, 0xa7, 0x92, 0x01, 0xa8, 0x9f, 0xad, 0xfe, 0x6c, 0xfd, 0x69, 0x8f, 0x94, 0x1d, // .'........l.i... + 0xfe, 0x3d, 0x21, 0xf9, 0x01, 0x7f, 0xdc, 0x01, 0x0b, 0x37, 0x96, 0xfe, 0xbf, 0xfe, 0xdd, 0xfd, // .=!......7...... + 0x53, 0x85, 0x0e, 0x02, 0x6f, 0x83, 0x01, 0x3f, 0x76, 0x06, 0xb1, 0xfa, 0xb1, 0xb1, 0xfa, 0x00, // S...o..?v....... + 0x00, 0x01, 0x00, 0x02, 0xff, 0x00, 0x07, 0x00, 0x05, 0xc9, 0x00, 0x4d, 0x00, 0x00, 0x01, 0x20, // ...........M... + 0x00, 0x27, 0x26, 0x02, 0x1a, 0x01, 0x37, 0x03, 0x3e, 0x01, 0x17, 0x3e, 0x01, 0x37, 0x0e, 0x01, // .'&...7.>..>.7.. + 0x17, 0x1e, 0x03, 0x17, 0x16, 0x06, 0x07, 0x0e, 0x02, 0x07, 0x17, 0x27, 0x06, 0x1e, 0x02, 0x37, // ...........'...7 + 0x3e, 0x02, 0x17, 0x1e, 0x01, 0x07, 0x0e, 0x04, 0x27, 0x0e, 0x01, 0x27, 0x1e, 0x01, 0x3e, 0x02, // >.......'..'..>. + 0x37, 0x36, 0x2e, 0x01, 0x27, 0x1e, 0x01, 0x17, 0x36, 0x02, 0x27, 0x04, 0x00, 0x13, 0x16, 0x02, // 76..'...6.'..... + 0x0e, 0x01, 0x04, 0x03, 0x87, 0xfe, 0xe5, 0xfe, 0x45, 0x6c, 0x3a, 0x12, 0x46, 0x98, 0x67, 0x0b, // ........El:.F.g. + 0x0b, 0x72, 0x0d, 0x2a, 0xed, 0x74, 0x36, 0x83, 0x07, 0x19, 0x4b, 0x33, 0x55, 0x08, 0x0f, 0x0b, // .r.*.t6...K3U... + 0x19, 0x05, 0x17, 0x5a, 0x38, 0x0f, 0x8b, 0x12, 0x15, 0x33, 0x50, 0x29, 0x33, 0x5e, 0x49, 0x25, // ...Z8....3P)3^I% + 0x3d, 0x39, 0x09, 0x01, 0x03, 0x0e, 0x16, 0x29, 0x1a, 0x3c, 0xa9, 0x7d, 0x4a, 0xb1, 0xa0, 0x95, // =9.....).<.}J... + 0x6b, 0x1b, 0x2b, 0x08, 0x43, 0x2d, 0x57, 0x64, 0x1b, 0x0f, 0x91, 0x89, 0x01, 0x09, 0x01, 0x26, // k.+.C-Wd.......& + 0x04, 0x02, 0x55, 0xa2, 0xd8, 0xfe, 0xe9, 0xff, 0x00, 0x01, 0x2d, 0xf8, 0x83, 0x01, 0x54, 0x01, // ..U.......-...T. + 0x45, 0x01, 0x2b, 0x5d, 0xfe, 0xe7, 0x0e, 0x03, 0x11, 0x51, 0x72, 0x02, 0x2d, 0xcf, 0x3c, 0x08, // E.+].....Qr.-.<. + 0x0b, 0x04, 0x04, 0x01, 0x05, 0x51, 0x23, 0x07, 0x17, 0x30, 0x0a, 0xbd, 0x43, 0x2b, 0x4d, 0x38, // .....Q#..0..C+M8 + 0x1b, 0x07, 0x09, 0x33, 0x27, 0x02, 0x04, 0x3a, 0x24, 0x02, 0x07, 0x12, 0x0d, 0x08, 0x03, 0x5f, // ...3'..:$......_ + 0x51, 0x0b, 0x3d, 0x2b, 0x1f, 0x49, 0x66, 0x35, 0x5b, 0xcb, 0xae, 0x26, 0x26, 0x53, 0x47, 0xaa, // Q.=+.If5[..&&SG. + 0x01, 0x5a, 0x6f, 0x4d, 0xfe, 0x6b, 0xfe, 0xc5, 0x7f, 0xff, 0x00, 0xdc, 0xac, 0x63, 0x00, 0x00, // .ZoM.k.......c.. + 0x00, 0x02, 0x00, 0x00, 0xff, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x23, 0x00, 0x37, 0x00, 0x00, // ...........#.7.. + 0x01, 0x26, 0x23, 0x22, 0x04, 0x07, 0x0e, 0x01, 0x07, 0x15, 0x1e, 0x01, 0x17, 0x16, 0x04, 0x33, // .&#"...........3 + 0x32, 0x37, 0x06, 0x04, 0x23, 0x22, 0x27, 0x26, 0x24, 0x26, 0x02, 0x35, 0x34, 0x12, 0x36, 0x24, // 27..#"'&$&.54.6$ + 0x3b, 0x01, 0x16, 0x04, 0x01, 0x14, 0x02, 0x07, 0x06, 0x23, 0x22, 0x27, 0x36, 0x12, 0x35, 0x34, // ;........#"'6.54 + 0x02, 0x27, 0x36, 0x33, 0x32, 0x17, 0x16, 0x12, 0x05, 0xd5, 0xa5, 0xc2, 0x9b, 0xfe, 0xec, 0x66, // .'632..........f + 0x4b, 0x59, 0x04, 0x04, 0x59, 0x4b, 0x66, 0x01, 0x14, 0x9b, 0xc2, 0xa5, 0x79, 0xfe, 0xcd, 0xa9, // KY..YKf.....y... + 0x1d, 0x0e, 0xaf, 0xfe, 0xc4, 0xe4, 0x86, 0x8e, 0xf0, 0x01, 0x4c, 0xb6, 0x03, 0xa8, 0x01, 0x31, // ..........L....1 + 0x01, 0xa4, 0x9a, 0x88, 0x68, 0x76, 0x89, 0x76, 0x9a, 0xc7, 0xc6, 0x9a, 0x77, 0x87, 0x77, 0x6b, // ....hv.v....w.wk + 0x87, 0x97, 0x05, 0x1c, 0x6e, 0x92, 0x7f, 0x5d, 0xfa, 0x8d, 0x2a, 0x8d, 0xfa, 0x5d, 0x7f, 0x92, // ....n..]..*..].. + 0x6e, 0x6c, 0x78, 0x01, 0x08, 0x94, 0xee, 0x01, 0x44, 0xb1, 0xb6, 0x01, 0x4c, 0xf0, 0x8e, 0x01, // nlx.....D...L... + 0x77, 0xfc, 0xf8, 0xc0, 0xfe, 0xab, 0x7e, 0x3f, 0x54, 0x38, 0x01, 0x62, 0xe4, 0xe3, 0x01, 0x62, // w.....~?T8.b...b + 0x39, 0x53, 0x41, 0x7d, 0xfe, 0xac, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0xff, 0x10, 0x07, 0x00, // 9SA}............ + 0x05, 0xf0, 0x00, 0x2b, 0x00, 0x35, 0x00, 0x3f, 0x00, 0x46, 0x00, 0x00, 0x01, 0x14, 0x07, 0x21, // ...+.5.?.F.....! + 0x14, 0x16, 0x33, 0x32, 0x36, 0x37, 0x21, 0x0e, 0x01, 0x04, 0x23, 0x22, 0x27, 0x06, 0x23, 0x22, // ..3267!...#"'.#" + 0x11, 0x34, 0x37, 0x36, 0x37, 0x12, 0x25, 0x06, 0x03, 0x12, 0x00, 0x21, 0x32, 0x17, 0x24, 0x33, // .4767.%....!2.$3 + 0x32, 0x1e, 0x02, 0x15, 0x14, 0x07, 0x16, 0x03, 0x34, 0x26, 0x23, 0x22, 0x07, 0x1e, 0x01, 0x17, // 2.......4&#".... + 0x36, 0x01, 0x14, 0x16, 0x33, 0x32, 0x37, 0x2e, 0x01, 0x27, 0x06, 0x01, 0x21, 0x2e, 0x01, 0x23, // 6...327..'..!..# + 0x22, 0x06, 0x07, 0x00, 0x07, 0xfb, 0x81, 0xdb, 0x94, 0x63, 0xad, 0x32, 0x01, 0xa7, 0x38, 0xe5, // "........c.2..8. + 0xfe, 0xce, 0xa8, 0xbb, 0xa9, 0xe4, 0xa6, 0xed, 0x2d, 0x11, 0x5c, 0xc7, 0x01, 0x14, 0xb8, 0xf3, // ........-....... + 0x3f, 0x01, 0xb9, 0x01, 0x19, 0x1e, 0x0f, 0x00, 0xff, 0xb2, 0x40, 0x68, 0x55, 0x30, 0x4b, 0x65, // ?.........@hU0Ke + 0x46, 0x6a, 0x54, 0x6c, 0x92, 0x79, 0xcb, 0x45, 0x33, 0xf9, 0xc6, 0x61, 0x56, 0x73, 0x97, 0x7a, // FjTl.y.E3..aVs.z + 0xb7, 0x2e, 0x62, 0x01, 0xf8, 0x02, 0xd8, 0x05, 0xd8, 0x8f, 0x90, 0xd7, 0x02, 0x57, 0x38, 0x30, // ..b..........W80 + 0x92, 0xc5, 0x5d, 0x54, 0x9f, 0xf4, 0x85, 0x53, 0x74, 0x01, 0x07, 0x73, 0xa0, 0x3c, 0xa9, 0x01, // ..]T...St..s.<.. + 0x68, 0xf6, 0x4f, 0xfe, 0xed, 0x01, 0x12, 0x01, 0x5f, 0x01, 0x75, 0x1a, 0x37, 0x62, 0x42, 0x74, // h.O....._.u.7bBt + 0xaa, 0xb6, 0x01, 0xb0, 0x53, 0x62, 0x46, 0x2f, 0xa9, 0x6f, 0x87, 0xfb, 0x7c, 0x56, 0x5d, 0x53, // ....SbF/.o..|V]S + 0x48, 0xde, 0x86, 0xcd, 0x02, 0x4a, 0x8e, 0xbe, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // H....J.......... + 0xff, 0x80, 0x07, 0x80, 0x05, 0x80, 0x00, 0x0f, 0x00, 0x33, 0x00, 0x00, 0x01, 0x11, 0x34, 0x26, // .........3....4& + 0x23, 0x21, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x13, 0x11, 0x14, 0x06, // #!".....3!26.... + 0x23, 0x21, 0x15, 0x21, 0x32, 0x16, 0x1d, 0x01, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, // #!.!2.....#!"&=. + 0x34, 0x36, 0x33, 0x21, 0x35, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // 463!5!"&5.463!2. + 0x07, 0x00, 0x13, 0x0d, 0xf9, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0x06, 0x40, 0x0d, 0x13, 0x80, 0x5e, // ...........@...^ + 0x42, 0xfd, 0x20, 0x01, 0x60, 0x0e, 0x12, 0x12, 0x0e, 0xfc, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0x01, // B. .`........... + 0x60, 0xfd, 0x20, 0x42, 0x5e, 0x5e, 0x42, 0x06, 0x40, 0x42, 0x5e, 0x01, 0x20, 0x03, 0xc0, 0x0d, // `. B^^B.@B^. ... + 0x13, 0x13, 0x0d, 0xfc, 0x40, 0x0d, 0x13, 0x13, 0x03, 0xcd, 0xfc, 0x40, 0x42, 0x5e, 0x80, 0x12, // ....@......@B^.. + 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x80, 0x5e, 0x42, 0x03, 0xc0, 0x42, 0x5e, // .@....@...^B..B^ + 0x5e, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x16, 0xff, 0x80, 0x06, 0xea, 0x05, 0x80, 0x00, 0x17, // ^............... + 0x00, 0x3e, 0x00, 0x00, 0x13, 0x33, 0x06, 0x07, 0x0e, 0x03, 0x1e, 0x01, 0x17, 0x16, 0x17, 0x16, // .>...3.......... + 0x17, 0x16, 0x17, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x29, 0x01, 0x32, 0x16, 0x15, 0x11, // ...!"&5.46).2... + 0x14, 0x06, 0x2b, 0x01, 0x36, 0x03, 0x05, 0x0e, 0x03, 0x07, 0x06, 0x27, 0x2e, 0x02, 0x27, 0x2e, // ..+.6......'..'. + 0x01, 0x36, 0x37, 0x3e, 0x01, 0x37, 0x36, 0x1e, 0x03, 0x17, 0x25, 0x26, 0x8a, 0xc5, 0x46, 0x38, // .67>.76...%&..F8 + 0x24, 0x2e, 0x0e, 0x03, 0x18, 0x12, 0x13, 0x04, 0x02, 0x33, 0x1e, 0x39, 0x5f, 0xfe, 0xf0, 0x30, // $........3.9_..0 + 0x44, 0x44, 0x04, 0xe8, 0x01, 0x34, 0x30, 0x44, 0x44, 0x30, 0xb2, 0xd4, 0x10, 0xfe, 0x2b, 0x02, // DD...40DD0....+. + 0x14, 0x2a, 0x4d, 0x37, 0x7b, 0x4c, 0x20, 0x2a, 0x3d, 0x22, 0x23, 0x15, 0x0a, 0x12, 0x14, 0x55, // .*M7{L *="#....U + 0x3c, 0x2d, 0x4d, 0x39, 0x33, 0x23, 0x11, 0x01, 0xd4, 0x44, 0x05, 0x80, 0x40, 0x55, 0x38, 0x76, // <-M93#...D..@U8v + 0x85, 0x6b, 0x9d, 0x5f, 0x59, 0x13, 0x09, 0xee, 0x5b, 0xab, 0x68, 0x44, 0x30, 0x05, 0x18, 0x30, // .k._Y...[.hD0..0 + 0x44, 0x44, 0x30, 0xfa, 0xe8, 0x30, 0x44, 0xd2, 0x01, 0x63, 0x65, 0x2d, 0x4a, 0x46, 0x31, 0x0c, // DD0..0D..ce-JF1. + 0x1a, 0x42, 0x1b, 0x44, 0xbe, 0xa3, 0xa3, 0xc8, 0x4e, 0x26, 0x29, 0x40, 0x0d, 0x0c, 0x0b, 0x17, // .B.D....N&)@.... + 0x2f, 0x31, 0x20, 0x64, 0xaf, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x0e, 0xff, 0x00, 0x05, 0x79, // /1 d...........y + 0x06, 0x00, 0x00, 0x25, 0x00, 0x46, 0x00, 0xab, 0x00, 0xc5, 0x00, 0x00, 0x05, 0x07, 0x06, 0x07, // ...%.F.......... + 0x06, 0x23, 0x22, 0x27, 0x26, 0x27, 0x26, 0x27, 0x26, 0x27, 0x26, 0x37, 0x36, 0x17, 0x16, 0x15, // .#"'&'&'&'&76... + 0x16, 0x17, 0x16, 0x17, 0x16, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x3f, 0x01, 0x36, 0x17, 0x16, // .......3276?.6.. + 0x17, 0x16, 0x01, 0x07, 0x17, 0x16, 0x07, 0x06, 0x23, 0x22, 0x2f, 0x01, 0x07, 0x06, 0x23, 0x22, // ........#"/...#" + 0x2f, 0x01, 0x26, 0x35, 0x34, 0x3f, 0x01, 0x27, 0x26, 0x37, 0x36, 0x33, 0x32, 0x1f, 0x01, 0x37, // /.&54?.'&7632..7 + 0x36, 0x17, 0x16, 0x05, 0x14, 0x07, 0x06, 0x07, 0x0e, 0x01, 0x22, 0x26, 0x27, 0x26, 0x27, 0x26, // 6........."&'&'& + 0x35, 0x23, 0x26, 0x37, 0x36, 0x17, 0x16, 0x17, 0x33, 0x11, 0x35, 0x36, 0x37, 0x36, 0x33, 0x32, // 5#&76...3.567632 + 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x27, 0x26, 0x37, 0x36, 0x1f, 0x01, 0x1e, 0x01, 0x33, 0x32, // ....#"'&76....32 + 0x36, 0x35, 0x34, 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x15, 0x11, 0x16, 0x33, 0x32, 0x3e, 0x02, // 654'&#".....32>. + 0x35, 0x34, 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x0f, 0x01, 0x0e, 0x02, 0x27, 0x2e, 0x01, 0x35, // 54'&#"......'..5 + 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x14, 0x23, 0x21, 0x11, 0x33, 0x3e, 0x01, 0x37, 0x36, 0x33, // .463!2.#!.3>.763 + 0x32, 0x16, 0x17, 0x16, 0x17, 0x16, 0x03, 0x16, 0x14, 0x06, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, // 2...........#"'& + 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x27, 0x26, 0x37, 0x36, 0x37, 0x36, 0x33, 0x32, 0x17, 0x16, // '&#"..'&767632.. + 0x05, 0x79, 0x06, 0x71, 0x92, 0x9a, 0xa3, 0xa5, 0x98, 0x94, 0x6f, 0x71, 0x3e, 0x2a, 0x0c, 0x04, // .y.q......oq>*.. + 0x34, 0x33, 0x05, 0x01, 0x12, 0x1c, 0x32, 0x66, 0x62, 0x80, 0x84, 0x90, 0x8f, 0x85, 0x80, 0x61, // 43....2fb......a + 0x06, 0x0a, 0x0f, 0x0c, 0x15, 0x24, 0xfe, 0x15, 0x42, 0x3f, 0x15, 0x1c, 0x11, 0x0f, 0x0a, 0x09, // .....$..B?...... + 0x3e, 0x42, 0x05, 0x0a, 0x0f, 0x10, 0x02, 0x12, 0x08, 0x42, 0x42, 0x10, 0x1e, 0x12, 0x0d, 0x06, // >B.......BB..... + 0x07, 0x41, 0x41, 0x12, 0x1e, 0x1b, 0x01, 0xc7, 0x2e, 0x2d, 0x51, 0x50, 0xd6, 0xf2, 0xd6, 0x50, // .AA......-QP...P + 0x52, 0x2b, 0x0f, 0x01, 0x09, 0x34, 0x32, 0x0a, 0x25, 0x3c, 0x01, 0x03, 0x63, 0x69, 0x94, 0x93, // R+...42.%<..ci.. + 0xd0, 0xd1, 0x92, 0x3a, 0x36, 0x1c, 0x0f, 0x10, 0x1c, 0x0e, 0x0e, 0x26, 0x0b, 0x68, 0x90, 0x48, // ...:6......&.h.H + 0x47, 0x68, 0x6b, 0x47, 0x40, 0x6e, 0x84, 0x60, 0xb2, 0x86, 0x49, 0x8d, 0x8c, 0xc7, 0xc8, 0x8c, // GhkG@n.`..I..... + 0x35, 0x18, 0x02, 0x08, 0x0a, 0x21, 0x16, 0x15, 0x1f, 0x15, 0x11, 0x03, 0x6d, 0x1e, 0x1e, 0xfc, // 5....!......m... + 0xd5, 0x01, 0x28, 0x7c, 0x2e, 0x6d, 0x7a, 0x79, 0xd6, 0x50, 0x51, 0x2d, 0x2e, 0x1f, 0x09, 0x0b, // ..(|.mzy.PQ-.... + 0x0b, 0x1a, 0x0d, 0x09, 0x07, 0x6a, 0x65, 0x80, 0x94, 0x85, 0x81, 0x1b, 0x12, 0x09, 0x01, 0x03, // .....je......... + 0x0d, 0x82, 0xa9, 0xa4, 0x98, 0x89, 0x0b, 0x06, 0x71, 0x3e, 0x40, 0x40, 0x3f, 0x70, 0x70, 0x92, // ........q>@@?pp. + 0x67, 0x56, 0x1c, 0x08, 0x08, 0x1c, 0x01, 0x03, 0x5a, 0x45, 0x7c, 0x66, 0x62, 0x36, 0x38, 0x38, // gV......ZE|fb688 + 0x37, 0x61, 0x06, 0x0a, 0x04, 0x03, 0x13, 0x25, 0x02, 0x52, 0x42, 0x3f, 0x15, 0x1c, 0x11, 0x0a, // 7a.....%.RB?.... + 0x3d, 0x42, 0x05, 0x10, 0x02, 0x0f, 0x0e, 0x07, 0x0a, 0x41, 0x42, 0x10, 0x1d, 0x12, 0x05, 0x42, // =B.......AB....B + 0x41, 0x11, 0x1e, 0x1b, 0x4a, 0x76, 0x6e, 0x69, 0x51, 0x50, 0x5c, 0x5c, 0x50, 0x52, 0x68, 0x21, // A...JvniQP..PRh! + 0x07, 0x1b, 0x11, 0x10, 0x1c, 0x63, 0x44, 0x01, 0x53, 0x02, 0x88, 0x60, 0x67, 0xce, 0x92, 0x93, // .....cD.S..`g... + 0xd0, 0x10, 0x0b, 0x32, 0x33, 0x08, 0x03, 0x03, 0x06, 0x8f, 0x67, 0x65, 0x46, 0x47, 0x50, 0x48, // ...23.....geFGPH + 0x58, 0xfe, 0x63, 0x43, 0x49, 0x86, 0xb0, 0x5f, 0xc6, 0x8d, 0x8c, 0x8c, 0x35, 0x22, 0x02, 0x0b, // X.cCI.._....5".. + 0x09, 0x0a, 0x08, 0x05, 0x17, 0x0f, 0x02, 0xa8, 0x0f, 0x17, 0x6e, 0xfe, 0x1d, 0x2a, 0x54, 0x13, // ..........n..*T. + 0x2e, 0x5c, 0x50, 0x51, 0x69, 0x70, 0x01, 0xd0, 0x08, 0x14, 0x10, 0x0d, 0x1a, 0x07, 0x5b, 0x2a, // ..PQip........[* + 0x38, 0x31, 0x0a, 0x2f, 0x19, 0x0d, 0x10, 0x04, 0x39, 0x40, 0x3a, 0x00, 0x00, 0x04, 0x00, 0x1d, // 81./....9@:..... + 0xff, 0x00, 0x06, 0xe1, 0x06, 0x00, 0x00, 0x1b, 0x00, 0x3e, 0x00, 0x74, 0x00, 0x82, 0x00, 0x00, // .........>.t.... + 0x25, 0x36, 0x16, 0x14, 0x07, 0x0e, 0x04, 0x23, 0x22, 0x2e, 0x03, 0x27, 0x2e, 0x01, 0x3e, 0x01, // %6.....#"..'..>. + 0x16, 0x17, 0x16, 0x17, 0x04, 0x25, 0x36, 0x25, 0x16, 0x06, 0x07, 0x06, 0x07, 0x06, 0x26, 0x37, // .....%6%......&7 + 0x3e, 0x01, 0x27, 0x2e, 0x03, 0x0e, 0x02, 0x23, 0x0e, 0x03, 0x2a, 0x02, 0x2e, 0x01, 0x27, 0x26, // >.'....#..*...'& + 0x36, 0x37, 0x36, 0x16, 0x01, 0x14, 0x1e, 0x02, 0x1f, 0x01, 0x07, 0x2e, 0x01, 0x2f, 0x01, 0x26, // 676........../.& + 0x27, 0x0e, 0x03, 0x2e, 0x02, 0x35, 0x34, 0x3e, 0x05, 0x37, 0x35, 0x34, 0x27, 0x26, 0x23, 0x22, // '....54>.754'&#" + 0x0e, 0x03, 0x07, 0x25, 0x34, 0x3e, 0x03, 0x33, 0x32, 0x1e, 0x03, 0x15, 0x01, 0x14, 0x17, 0x16, // ...%4>.32....... + 0x37, 0x36, 0x37, 0x36, 0x3d, 0x01, 0x0e, 0x03, 0x06, 0x0f, 0x0f, 0x16, 0x0f, 0x0d, 0x3e, 0x81, // 7676=.........>. + 0x99, 0xdf, 0x76, 0x77, 0xee, 0xb4, 0xa5, 0x64, 0x22, 0x08, 0x04, 0x06, 0x0a, 0x0d, 0x05, 0xc0, // ..vw...d"....... + 0x6c, 0x01, 0x85, 0x01, 0x9a, 0xbe, 0x01, 0x98, 0x0b, 0x11, 0x14, 0x22, 0x33, 0x11, 0x12, 0x09, // l.........."3... + 0x15, 0x2f, 0x11, 0x05, 0x15, 0x21, 0x1a, 0x2c, 0x13, 0x2b, 0x01, 0x06, 0x0e, 0x08, 0x09, 0x05, // ./...!.,.+...... + 0x06, 0x03, 0x03, 0x01, 0x01, 0x06, 0x6a, 0x32, 0x2e, 0x7c, 0xfe, 0x84, 0x1b, 0x25, 0x26, 0x0e, // ......j2.|...%&. + 0x0d, 0xe3, 0x28, 0x4e, 0x13, 0x13, 0x0b, 0x0e, 0x26, 0x77, 0x88, 0x90, 0x83, 0x68, 0x3e, 0x38, // ..(N....&w...h>8 + 0x58, 0x7d, 0x78, 0x8c, 0x63, 0x32, 0x15, 0x22, 0x57, 0x06, 0x15, 0x3c, 0x34, 0x3c, 0x12, 0xfe, // X}x.c2."W..<4<.. + 0xda, 0x2c, 0x5a, 0x7e, 0xb1, 0x66, 0x64, 0xa2, 0x61, 0x41, 0x19, 0xfd, 0x60, 0x46, 0x42, 0x49, // .,Z~.fd.aA..`FBI + 0x54, 0x1e, 0x0e, 0x3b, 0x68, 0x6d, 0x41, 0x3c, 0x06, 0x06, 0x1d, 0x13, 0x10, 0x37, 0x51, 0x43, // T..;hmA<.....7QC + 0x31, 0x3e, 0x5b, 0x75, 0x5d, 0x29, 0x09, 0x0f, 0x09, 0x05, 0x01, 0x04, 0x75, 0x31, 0xb0, 0x56, // 1>[u])......u1.V + 0x28, 0xd2, 0x10, 0x6b, 0x31, 0x53, 0x29, 0x0e, 0x0a, 0x13, 0x2d, 0x99, 0x16, 0x07, 0x09, 0x03, // (..k1S)...-..... + 0x02, 0x02, 0x02, 0x04, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x10, 0x30, 0x06, 0x07, 0x0c, // ............0... + 0x01, 0xa9, 0x1f, 0x42, 0x32, 0x2a, 0x0b, 0x0b, 0xe0, 0x25, 0x4d, 0x14, 0x14, 0x0b, 0x16, 0x3b, // ...B2*...%M....; + 0x57, 0x28, 0x06, 0x30, 0x53, 0x8f, 0x5b, 0x54, 0x8c, 0x5d, 0x49, 0x29, 0x1c, 0x09, 0x02, 0x7f, // W(.0S.[T.]I).... + 0x41, 0x20, 0x35, 0x02, 0x16, 0x25, 0x52, 0x37, 0x1b, 0x3c, 0x76, 0x6c, 0x52, 0x31, 0x32, 0x49, // A 5..%R7.&. + 0x80, 0x1a, 0x26, 0x54, 0x01, 0xa8, 0x01, 0x2c, 0xfe, 0xd4, 0xfe, 0x58, 0xfe, 0xd4, 0x02, 0x00, // ..&T...,...X.... + 0x0e, 0x12, 0x12, 0x0e, 0x92, 0xce, 0x12, 0x1c, 0x12, 0xa9, 0x01, 0xc0, 0x0f, 0xfd, 0x71, 0x1a, // ..............q. + 0x26, 0x26, 0x1a, 0x02, 0x8f, 0x04, 0x31, 0xfe, 0xd4, 0xfe, 0x58, 0xfe, 0xd4, 0x01, 0x2c, 0x01, // &&....1...X...,. + 0xa8, 0x4c, 0x12, 0x1c, 0x12, 0xce, 0x92, 0x0e, 0x12, 0x12, 0x0e, 0x77, 0xa9, 0x00, 0x00, 0x00, // .L.........w.... + 0x00, 0x03, 0x00, 0x25, 0xff, 0x00, 0x06, 0xdb, 0x06, 0x00, 0x00, 0x1b, 0x00, 0x25, 0x00, 0x3b, // ...%.........%.; + 0x00, 0x00, 0x01, 0x16, 0x14, 0x0f, 0x01, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, // ........#!"&5.46 + 0x33, 0x21, 0x35, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x1d, 0x01, 0x21, 0x32, 0x17, 0x01, 0x21, // 3!546;.2...!2..! + 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x01, 0x32, 0x16, 0x15, 0x11, 0x14, 0x06, 0x23, // ...+."&5.2.....# + 0x21, 0x22, 0x2f, 0x01, 0x26, 0x34, 0x3f, 0x01, 0x36, 0x33, 0x21, 0x35, 0x21, 0x15, 0x06, 0xd1, // !"/.&4?.63!5!... + 0x0a, 0x0a, 0x8d, 0x1c, 0x28, 0xfa, 0xc0, 0x1a, 0x26, 0x26, 0x1a, 0x02, 0x40, 0x26, 0x1a, 0x80, // ....(...&&..@&.. + 0x1a, 0x26, 0x02, 0x00, 0x28, 0x1c, 0xfc, 0xbc, 0x01, 0x00, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x03, // .&..(.....&...&. + 0x40, 0x1a, 0x26, 0x26, 0x1a, 0xfa, 0xc0, 0x28, 0x1c, 0x8d, 0x0a, 0x0a, 0x8d, 0x1c, 0x28, 0x02, // @.&&...(......(. + 0x00, 0x01, 0x00, 0x04, 0xd7, 0x0a, 0x1a, 0x0a, 0x8d, 0x1c, 0x26, 0x1a, 0x01, 0x00, 0x1a, 0x26, // ..........&....& + 0x40, 0x1a, 0x26, 0x26, 0x1a, 0x40, 0x1c, 0xfb, 0xdc, 0xfe, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x03, // @.&&.@......&&.. + 0xc0, 0x26, 0x1a, 0xff, 0x00, 0x1a, 0x26, 0x1c, 0x8d, 0x0a, 0x1a, 0x0a, 0x8d, 0x1c, 0xc0, 0xc0, // .&....&......... + 0x00, 0x04, 0x00, 0x00, 0xff, 0x00, 0x08, 0x00, 0x05, 0xfb, 0x00, 0x1b, 0x00, 0x1f, 0x00, 0x23, // ...............# + 0x00, 0x27, 0x00, 0x00, 0x01, 0x16, 0x15, 0x11, 0x14, 0x06, 0x07, 0x01, 0x06, 0x27, 0x25, 0x05, // .'...........'%. + 0x06, 0x23, 0x22, 0x27, 0x26, 0x35, 0x11, 0x34, 0x36, 0x37, 0x01, 0x36, 0x17, 0x05, 0x25, 0x36, // .#"'&5.467.6..%6 + 0x05, 0x11, 0x05, 0x11, 0x25, 0x11, 0x25, 0x11, 0x01, 0x11, 0x05, 0x11, 0x07, 0xe4, 0x1c, 0x16, // ....%.%......... + 0x12, 0xfd, 0x80, 0x18, 0x18, 0xfd, 0x98, 0xfd, 0x98, 0x0a, 0x0e, 0x13, 0x11, 0x1c, 0x16, 0x12, // ................ + 0x02, 0x80, 0x18, 0x18, 0x02, 0x68, 0x02, 0x68, 0x20, 0xfb, 0x18, 0x02, 0x40, 0xfb, 0x60, 0x02, // .....h.h ...@.`. + 0x20, 0x04, 0xe0, 0xfd, 0xe0, 0x05, 0xf5, 0x14, 0x21, 0xfa, 0x80, 0x14, 0x20, 0x07, 0xff, 0x00, // .......!... ... + 0x0b, 0x0b, 0xf6, 0xf6, 0x05, 0x0b, 0x14, 0x21, 0x05, 0x80, 0x14, 0x20, 0x07, 0x01, 0x00, 0x0b, // .......!... .... + 0x0b, 0xf6, 0xf6, 0x0d, 0x9a, 0xfb, 0x0a, 0xe6, 0x04, 0xf6, 0x0d, 0xfb, 0x0a, 0xd9, 0x04, 0xf6, // ................ + 0xfa, 0xfd, 0x04, 0xf6, 0xd9, 0xfb, 0x0a, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x00, 0x07, 0x00, // ................ + 0x06, 0x00, 0x00, 0x11, 0x00, 0x23, 0x00, 0x35, 0x00, 0x00, 0x01, 0x32, 0x16, 0x15, 0x11, 0x14, // .....#.5...2.... + 0x07, 0x01, 0x06, 0x23, 0x22, 0x26, 0x35, 0x11, 0x34, 0x37, 0x01, 0x36, 0x21, 0x32, 0x16, 0x15, // ...#"&5.47.6!2.. + 0x11, 0x14, 0x07, 0x01, 0x06, 0x23, 0x22, 0x26, 0x35, 0x11, 0x34, 0x37, 0x01, 0x36, 0x21, 0x32, // .....#"&5.47.6!2 + 0x17, 0x01, 0x16, 0x15, 0x11, 0x14, 0x06, 0x23, 0x22, 0x27, 0x01, 0x26, 0x35, 0x11, 0x34, 0x36, // .......#"'.&5.46 + 0x02, 0x00, 0x0d, 0x13, 0x11, 0xfe, 0x20, 0x07, 0x08, 0x0d, 0x13, 0x11, 0x01, 0xe0, 0x07, 0x04, // ...... ......... + 0xe8, 0x0d, 0x13, 0x11, 0xfe, 0x20, 0x07, 0x08, 0x0d, 0x13, 0x11, 0x01, 0xe0, 0x07, 0xfb, 0xa8, // ..... .......... + 0x08, 0x06, 0x02, 0x00, 0x12, 0x13, 0x0d, 0x08, 0x06, 0xfe, 0x00, 0x12, 0x13, 0x06, 0x00, 0x13, // ................ + 0x0d, 0xfa, 0x40, 0x14, 0x08, 0xff, 0x00, 0x04, 0x13, 0x0d, 0x05, 0xc0, 0x14, 0x08, 0x01, 0x00, // ..@............. + 0x04, 0x13, 0x0d, 0xfa, 0x40, 0x14, 0x08, 0xff, 0x00, 0x04, 0x13, 0x0d, 0x05, 0xc0, 0x14, 0x08, // ....@........... + 0x01, 0x00, 0x04, 0x03, 0xff, 0x00, 0x0a, 0x13, 0xfa, 0x40, 0x0d, 0x13, 0x03, 0x01, 0x00, 0x0a, // .........@...... + 0x13, 0x05, 0xc0, 0x0d, 0x13, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0xff, 0x20, 0x07, 0x00, // ............. .. + 0x05, 0x00, 0x00, 0x07, 0x00, 0x0f, 0x00, 0x17, 0x00, 0x38, 0x00, 0x00, 0x00, 0x34, 0x26, 0x22, // .........8...4&" + 0x06, 0x14, 0x16, 0x32, 0x24, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x24, 0x34, 0x26, 0x22, // ...2$4&"...2$4&" + 0x06, 0x14, 0x16, 0x32, 0x00, 0x10, 0x02, 0x04, 0x23, 0x22, 0x27, 0x06, 0x05, 0x06, 0x07, 0x06, // ...2....#"'..... + 0x26, 0x27, 0x26, 0x37, 0x3e, 0x07, 0x37, 0x2e, 0x01, 0x35, 0x34, 0x12, 0x24, 0x20, 0x04, 0x02, // &'&7>.7..54.$ .. + 0x80, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x01, 0xcb, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x01, 0xcb, 0x4b, // .KjKKj..KjKKj..K + 0x6a, 0x4b, 0x4b, 0x6a, 0x01, 0xcb, 0xf0, 0xfe, 0x64, 0xf4, 0x6e, 0x65, 0xad, 0xfe, 0xfa, 0x34, // jKKj....d.ne...4 + 0x22, 0x0c, 0x14, 0x03, 0x04, 0x18, 0x05, 0x25, 0x0e, 0x21, 0x0f, 0x1a, 0x0e, 0x0f, 0x05, 0x92, // "......%.!...... + 0xa7, 0xf0, 0x01, 0x9c, 0x01, 0xe8, 0x01, 0x9c, 0x02, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0x4b, // .........KjKKjKK + 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0x01, 0x2e, 0xfe, 0xa4, 0xfe, // jKKjKKjKKjK..... + 0xd9, 0xab, 0x12, 0xad, 0x38, 0x0a, 0x03, 0x01, 0x0e, 0x0b, 0x0f, 0x16, 0x05, 0x21, 0x0e, 0x25, // ....8........!.% + 0x1a, 0x30, 0x30, 0x43, 0x27, 0x5a, 0xfd, 0x8f, 0xae, 0x01, 0x27, 0xab, 0xab, 0x00, 0x00, 0x00, // .00C'Z....'..... + 0x00, 0x05, 0x00, 0x00, 0xff, 0x00, 0x07, 0x00, 0x05, 0x00, 0x00, 0x07, 0x00, 0x0f, 0x00, 0x17, // ................ + 0x00, 0x2e, 0x00, 0x57, 0x00, 0x00, 0x00, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x04, 0x14, // ...W....."&462.. + 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x04, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x02, 0x20, // ."&462..."&462. + 0x04, 0x06, 0x15, 0x14, 0x16, 0x1f, 0x01, 0x07, 0x06, 0x07, 0x36, 0x3f, 0x01, 0x17, 0x16, 0x33, // ..........6?...3 + 0x32, 0x24, 0x36, 0x10, 0x26, 0x01, 0x14, 0x02, 0x04, 0x23, 0x22, 0x27, 0x06, 0x05, 0x06, 0x07, // 2$6.&....#"'.... + 0x23, 0x22, 0x26, 0x27, 0x35, 0x26, 0x36, 0x26, 0x3e, 0x02, 0x37, 0x3e, 0x05, 0x37, 0x26, 0x02, // #"&'5&6&>.7>.7&. + 0x35, 0x34, 0x3e, 0x01, 0x24, 0x20, 0x04, 0x1e, 0x01, 0x02, 0x80, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, // 54>.$ .....KjKKj + 0x01, 0xcb, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x01, 0xcb, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0xe9, 0xfe, // ..KjKKj..KjKKj.. + 0x68, 0xfe, 0x9d, 0xd1, 0x8f, 0x82, 0x57, 0x1b, 0x18, 0x2e, 0x98, 0x7b, 0x2b, 0x39, 0x45, 0x3d, // h.....W....{+9E= + 0xcc, 0x01, 0x63, 0xd1, 0xd1, 0x01, 0x51, 0xf0, 0xfe, 0x64, 0xf4, 0x46, 0x4b, 0xc6, 0xfe, 0xfa, // ..c...Q..d.FK... + 0x31, 0x41, 0x05, 0x0f, 0x18, 0x04, 0x03, 0x05, 0x01, 0x0a, 0x02, 0x0c, 0x02, 0x07, 0x30, 0x15, // 1A............0. + 0x29, 0x18, 0x1e, 0x0b, 0x9d, 0xb5, 0x8e, 0xf0, 0x01, 0x4c, 0x01, 0x6c, 0x01, 0x4c, 0xf0, 0x8e, // )........L.l.L.. + 0x02, 0xb5, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, // ..jKKjKKjKKjKKjK + 0x4b, 0x6a, 0x4b, 0x01, 0x80, 0x8b, 0xec, 0x89, 0x70, 0xcb, 0x4a, 0x32, 0x60, 0x5b, 0x51, 0x3f, // KjK.....p.J2`[Q? + 0x6c, 0x26, 0x06, 0x08, 0x8b, 0xec, 0x01, 0x12, 0xec, 0xfe, 0x8b, 0xae, 0xfe, 0xd9, 0xab, 0x08, // l&.............. + 0xaf, 0x43, 0x0e, 0x08, 0x15, 0x11, 0x01, 0x04, 0x10, 0x04, 0x0f, 0x03, 0x0e, 0x02, 0x08, 0x35, // .C.............5 + 0x17, 0x38, 0x2e, 0x48, 0x28, 0x59, 0x01, 0x06, 0x96, 0x82, 0xed, 0xac, 0x65, 0x65, 0xac, 0xed, // .8.H(Y......ee.. + 0x00, 0x04, 0x00, 0x00, 0xff, 0x09, 0x04, 0x00, 0x05, 0xf7, 0x00, 0x03, 0x00, 0x06, 0x00, 0x0a, // ................ + 0x00, 0x0d, 0x00, 0x00, 0x09, 0x01, 0x11, 0x09, 0x01, 0x11, 0x01, 0x19, 0x01, 0x01, 0x11, 0x09, // ................ + 0x01, 0x11, 0x02, 0x00, 0x02, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0x02, 0x00, 0xfe, 0x00, 0x02, 0x00, // ................ + 0x02, 0x00, 0x01, 0x59, 0x01, 0x27, 0xfd, 0xb1, 0xfe, 0xd8, 0x03, 0x77, 0xfd, 0xb1, 0x01, 0x28, // ...Y.'.....w...( + 0x04, 0x9e, 0xfd, 0xb1, 0xfe, 0xd8, 0x02, 0x4f, 0xfe, 0xd9, 0x01, 0x27, 0xfd, 0xb1, 0x00, 0x00, // .......O...'.... + 0x00, 0x01, 0x00, 0x52, 0xff, 0xc0, 0x06, 0xad, 0x05, 0x40, 0x00, 0x24, 0x00, 0x00, 0x01, 0x06, // ...R.....@.$.... + 0x01, 0x00, 0x23, 0x22, 0x03, 0x26, 0x03, 0x02, 0x23, 0x22, 0x07, 0x27, 0x3e, 0x01, 0x37, 0x36, // ..#".&..#".'>.76 + 0x37, 0x36, 0x16, 0x17, 0x12, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x37, 0x36, 0x23, 0x22, 0x07, // 76.....327676#". + 0x12, 0x05, 0x16, 0x06, 0xad, 0x0a, 0xfe, 0xbe, 0xfe, 0xb3, 0xe5, 0x8e, 0x62, 0x2c, 0x58, 0x48, // ............b,XH + 0x55, 0x12, 0x6d, 0x4d, 0x18, 0xa8, 0x2e, 0x9c, 0x55, 0x5f, 0x74, 0x17, 0x2c, 0x16, 0x37, 0x41, // U.mM....U_t.,.7A + 0x33, 0x67, 0x65, 0x08, 0x0d, 0x7a, 0x39, 0x40, 0x78, 0x01, 0x53, 0xfb, 0x03, 0xfa, 0xec, 0xfe, // 3ge..z9@x.S..... + 0x61, 0xfe, 0x51, 0x01, 0x07, 0xa0, 0x01, 0x42, 0x01, 0x06, 0x4c, 0x62, 0x15, 0x97, 0x28, 0x8a, // a.Q....B..Lb..(. + 0x08, 0x09, 0x81, 0x8b, 0xfe, 0xe1, 0x56, 0xf9, 0xa1, 0xa1, 0x55, 0x8b, 0x1a, 0x01, 0x89, 0x0b, // ......V...U..... + 0x08, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x03, // ................ + 0x00, 0x0a, 0x00, 0x00, 0x11, 0x21, 0x11, 0x21, 0x01, 0x03, 0x13, 0x21, 0x13, 0x03, 0x01, 0x06, // .....!.!...!.... + 0x00, 0xfa, 0x00, 0x04, 0x3d, 0xdd, 0xdd, 0xfd, 0x86, 0xdd, 0xdd, 0x01, 0x3d, 0x05, 0x80, 0xfa, // ....=.......=... + 0x00, 0x01, 0xa5, 0x02, 0x77, 0x01, 0x29, 0xfe, 0xd7, 0xfd, 0x89, 0xfe, 0xd0, 0x00, 0x00, 0x00, // ....w.)......... + 0x00, 0x04, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x03, 0x00, 0x12, 0x00, 0x41, // ...............A + 0x00, 0x55, 0x00, 0x00, 0x11, 0x21, 0x11, 0x21, 0x01, 0x07, 0x17, 0x07, 0x17, 0x37, 0x17, 0x37, // .U...!.!.....7.7 + 0x27, 0x37, 0x27, 0x23, 0x27, 0x23, 0x07, 0x05, 0x32, 0x16, 0x07, 0x37, 0x34, 0x2e, 0x02, 0x23, // '7'#'#..2..74..# + 0x22, 0x06, 0x1d, 0x01, 0x23, 0x15, 0x33, 0x32, 0x15, 0x11, 0x14, 0x06, 0x0f, 0x01, 0x15, 0x21, // "...#.32.......! + 0x35, 0x27, 0x2e, 0x02, 0x3e, 0x01, 0x35, 0x11, 0x33, 0x37, 0x23, 0x22, 0x37, 0x36, 0x3d, 0x01, // 5'..>.5.37#"76=. + 0x34, 0x3e, 0x02, 0x01, 0x35, 0x27, 0x2e, 0x01, 0x34, 0x36, 0x35, 0x11, 0x21, 0x07, 0x17, 0x16, // 4>..5'..465.!... + 0x15, 0x11, 0x14, 0x06, 0x0f, 0x01, 0x15, 0x06, 0x00, 0xfa, 0x00, 0x03, 0x8c, 0x0c, 0x4b, 0x1f, // ..............K. + 0x19, 0x6b, 0x6b, 0x19, 0x1f, 0x4b, 0x0c, 0x5f, 0x35, 0x20, 0x35, 0xfe, 0x96, 0x20, 0x19, 0x01, // .kk..K._5 5.. .. + 0xae, 0x23, 0x42, 0x48, 0x31, 0x85, 0x84, 0x60, 0x4c, 0x14, 0x0a, 0x0d, 0x49, 0x01, 0xc0, 0x95, // .#BH1..`L...I... + 0x06, 0x05, 0x02, 0x01, 0x01, 0xbf, 0x26, 0xe7, 0x06, 0x04, 0x04, 0x03, 0x0c, 0x1b, 0x02, 0x76, // ......&........v + 0x36, 0x07, 0x05, 0x02, 0xfe, 0xed, 0x17, 0x53, 0x17, 0x0c, 0x0e, 0x46, 0x05, 0x80, 0xfa, 0x00, // 6......S...F.... + 0x04, 0xc0, 0x21, 0x53, 0x72, 0x19, 0x39, 0x39, 0x19, 0x72, 0x53, 0x21, 0x60, 0x60, 0xa3, 0x20, // ..!Sr.99.rS!``. + 0x2f, 0x15, 0x37, 0x4b, 0x25, 0x0e, 0x73, 0x7d, 0x48, 0x80, 0x08, 0xfe, 0x82, 0x0e, 0x0c, 0x01, // /.7K%.s}H....... + 0x07, 0x58, 0x56, 0x0e, 0x01, 0x01, 0x04, 0x04, 0x0a, 0x05, 0x01, 0x83, 0x80, 0x06, 0x06, 0x03, // .XV............. + 0x50, 0x1b, 0x1b, 0x1d, 0x0b, 0xfc, 0xc3, 0x56, 0x09, 0x01, 0x03, 0x03, 0x0c, 0x06, 0x02, 0x08, // P......V........ + 0x65, 0x16, 0x07, 0x14, 0xfe, 0x8e, 0x0e, 0x09, 0x02, 0x09, 0x56, 0x00, 0x00, 0x04, 0x00, 0x00, // e.........V..... + 0xff, 0x64, 0x07, 0x00, 0x06, 0x00, 0x00, 0x2f, 0x00, 0x39, 0x00, 0x51, 0x00, 0x5b, 0x00, 0x00, // .d...../.9.Q.[.. + 0x01, 0x14, 0x06, 0x07, 0x16, 0x15, 0x14, 0x02, 0x04, 0x20, 0x24, 0x02, 0x35, 0x34, 0x37, 0x2e, // ......... $.547. + 0x01, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x36, 0x25, 0x13, 0x3e, 0x01, 0x17, 0x05, 0x3e, 0x01, // .54632.6%.>...>. + 0x33, 0x32, 0x16, 0x14, 0x06, 0x22, 0x26, 0x35, 0x25, 0x03, 0x04, 0x17, 0x36, 0x33, 0x32, 0x16, // 32..."&5%...632. + 0x01, 0x14, 0x16, 0x32, 0x36, 0x34, 0x26, 0x23, 0x22, 0x06, 0x01, 0x36, 0x34, 0x27, 0x26, 0x22, // ...264&#"..64'&" + 0x07, 0x0e, 0x01, 0x22, 0x26, 0x27, 0x26, 0x22, 0x07, 0x06, 0x14, 0x17, 0x1e, 0x02, 0x32, 0x3e, // ..."&'&"......2> + 0x01, 0x26, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x14, 0x07, 0x00, 0x3b, 0x32, 0x0c, // .&2654&#"....;2. + 0xd5, 0xfe, 0x90, 0xfe, 0x50, 0xfe, 0x91, 0xd5, 0x0b, 0x33, 0x3e, 0x74, 0x53, 0x55, 0x3c, 0xda, // ....P....3>tSU<. + 0x01, 0x29, 0x74, 0x03, 0x18, 0x0e, 0x01, 0x71, 0x12, 0x48, 0x2b, 0x3e, 0x58, 0x58, 0x7c, 0x57, // .)t....q.H+>XX|W + 0xfe, 0xb2, 0x68, 0x01, 0x2c, 0xdb, 0x3a, 0x55, 0x53, 0x74, 0xfa, 0xa2, 0x57, 0x7c, 0x58, 0x58, // ..h.,.:USt..W|XX + 0x3e, 0x3d, 0x58, 0x03, 0x2a, 0x0b, 0x0b, 0x0a, 0x1e, 0x0b, 0x29, 0xa0, 0xa0, 0xa0, 0x29, 0x0b, // >=X.*.....)...). + 0x1e, 0x0a, 0x0b, 0x0b, 0x2b, 0x97, 0x5e, 0x58, 0x5e, 0x97, 0x16, 0x7c, 0x57, 0x58, 0x3d, 0x3e, // ....+.^X^..|WX=> + 0x58, 0x02, 0xb2, 0x3a, 0x5f, 0x19, 0x2e, 0x32, 0x9b, 0xfe, 0xf8, 0x99, 0x99, 0x01, 0x08, 0x9b, // X..:_..2........ + 0x2f, 0x2f, 0x19, 0x61, 0x3a, 0x52, 0x75, 0x3f, 0x98, 0x0a, 0x02, 0x09, 0x0d, 0x10, 0x03, 0x51, // //.a:Ru?.......Q + 0x25, 0x2d, 0x57, 0x7c, 0x58, 0x57, 0x3e, 0x4a, 0xfe, 0x28, 0x09, 0x97, 0x3d, 0x75, 0xfe, 0xe7, // %-W|XW>J.(..=u.. + 0x3e, 0x58, 0x58, 0x7c, 0x57, 0x58, 0xfe, 0x60, 0x0b, 0x1e, 0x0b, 0x0a, 0x0a, 0x2a, 0x28, 0x28, // >XX|WX.`.....*(( + 0x2a, 0x0a, 0x0a, 0x0a, 0x1f, 0x0b, 0x2b, 0x32, 0x09, 0x09, 0x32, 0xf8, 0x58, 0x3e, 0x3d, 0x58, // *.....+2..2.X>=X + 0x57, 0x7c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0xff, 0x02, 0x06, 0xbb, 0x06, 0x00, 0x00, 0x30, // W|.....E.......0 + 0x00, 0x00, 0x13, 0x33, 0x3e, 0x03, 0x24, 0x33, 0x32, 0x04, 0x17, 0x16, 0x1d, 0x01, 0x21, 0x1e, // ...3>.$32.....!. + 0x03, 0x3e, 0x01, 0x37, 0x11, 0x06, 0x0c, 0x01, 0x27, 0x26, 0x02, 0x27, 0x26, 0x12, 0x37, 0x0e, // .>.7....'&.'&.7. + 0x01, 0x07, 0x21, 0x36, 0x2e, 0x04, 0x2f, 0x01, 0x0e, 0x03, 0x45, 0x01, 0x10, 0x55, 0x91, 0xbe, // ..!6../...E..U.. + 0x01, 0x01, 0x94, 0xe7, 0x01, 0x6e, 0x6f, 0x68, 0xfb, 0x9b, 0x01, 0x69, 0xa8, 0xd3, 0xd7, 0xc9, // .....noh...i.... + 0x49, 0x5c, 0xfe, 0xed, 0xfe, 0xa2, 0x8d, 0xbd, 0xf5, 0x02, 0x03, 0xe4, 0xd3, 0x30, 0x3c, 0x10, // I............0<. + 0x02, 0x7b, 0x08, 0x20, 0x3e, 0x4f, 0x52, 0x44, 0x16, 0x16, 0x87, 0xf9, 0xc6, 0x9a, 0x02, 0xe5, // .{. >ORD........ + 0x7e, 0xe7, 0xcb, 0x95, 0x56, 0xd3, 0xc6, 0xbb, 0xff, 0xbc, 0x6f, 0xa3, 0x52, 0x20, 0x1a, 0x43, // ~...V.....o.R .C + 0x33, 0xfe, 0x87, 0x37, 0x4a, 0x02, 0x36, 0x49, 0x01, 0x60, 0xc4, 0xf2, 0x01, 0x54, 0x62, 0x3c, // 3..7J.6I.`...Tb< + 0x83, 0x5e, 0x4d, 0x7e, 0x4d, 0x38, 0x1a, 0x0f, 0x01, 0x01, 0x05, 0x4f, 0x82, 0x97, 0x00, 0x00, // .^M~M8.....O.... + 0x00, 0x04, 0x00, 0x00, 0xff, 0x80, 0x09, 0x00, 0x05, 0x80, 0x00, 0x09, 0x00, 0x0d, 0x00, 0x11, // ................ + 0x00, 0x1b, 0x00, 0x00, 0x35, 0x11, 0x21, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x01, 0x15, // ....5.!...#!"&.. + 0x21, 0x35, 0x21, 0x15, 0x21, 0x35, 0x01, 0x32, 0x16, 0x1d, 0x01, 0x21, 0x35, 0x34, 0x36, 0x33, // !5!.!5.2...!5463 + 0x09, 0x00, 0x5e, 0x42, 0xf8, 0x40, 0x42, 0x5e, 0x02, 0x80, 0x01, 0x80, 0xfd, 0x00, 0x01, 0x00, // ..^B.@B^........ + 0x06, 0x60, 0x42, 0x5e, 0xf7, 0x00, 0x5e, 0x42, 0x20, 0x02, 0x60, 0xfd, 0xa0, 0x42, 0x5e, 0x5e, // .`B^..^B .`..B^^ + 0x01, 0x22, 0x80, 0x80, 0x80, 0x80, 0x04, 0x80, 0x5e, 0x42, 0xe0, 0xe0, 0x42, 0x5e, 0x00, 0x00, // ."......^B..B^.. + 0x00, 0x03, 0x00, 0x00, 0xff, 0x00, 0x06, 0xbb, 0x06, 0x00, 0x00, 0x1f, 0x00, 0x30, 0x00, 0x3b, // .............0.; + 0x00, 0x00, 0x25, 0x27, 0x0e, 0x01, 0x23, 0x22, 0x2e, 0x01, 0x35, 0x34, 0x3e, 0x02, 0x33, 0x32, // ..%'..#"..54>.32 + 0x16, 0x17, 0x37, 0x26, 0x24, 0x23, 0x22, 0x04, 0x06, 0x02, 0x10, 0x12, 0x16, 0x04, 0x33, 0x32, // ..7&$#".......32 + 0x24, 0x09, 0x01, 0x06, 0x00, 0x21, 0x22, 0x24, 0x26, 0x02, 0x10, 0x12, 0x36, 0x24, 0x33, 0x20, // $....!"$&...6$3 + 0x00, 0x17, 0x03, 0x23, 0x15, 0x23, 0x11, 0x33, 0x32, 0x1e, 0x01, 0x0e, 0x01, 0x06, 0x30, 0xda, // ...#.#.32.....0. + 0x4a, 0xf5, 0x8d, 0x93, 0xf8, 0x90, 0x55, 0x91, 0xc7, 0x6e, 0x83, 0xe9, 0x4c, 0xd7, 0x6e, 0xfe, // J.....U..n..L.n. + 0x9f, 0xca, 0xa1, 0xfe, 0xda, 0xd4, 0x7e, 0x7e, 0xd4, 0x01, 0x26, 0xa1, 0xd5, 0x01, 0x71, 0xfe, // ......~~..&...q. + 0x40, 0x02, 0xb5, 0x74, 0xfe, 0x4b, 0xfe, 0xee, 0xb6, 0xfe, 0xb4, 0xf0, 0x8e, 0x8e, 0xf0, 0x01, // @..t.K.......... + 0x4c, 0xb6, 0x01, 0x04, 0x01, 0xa5, 0x7d, 0x9f, 0x27, 0x60, 0x88, 0x20, 0x2d, 0x0c, 0x0a, 0x2d, // L.....}.'`. -..- + 0xf6, 0x6f, 0x78, 0x8a, 0x90, 0xf8, 0x92, 0x6e, 0xc7, 0x91, 0x55, 0x79, 0x6c, 0x7d, 0xa9, 0xc0, // .ox....n..Uyl}.. + 0x7e, 0xd4, 0xfe, 0xda, 0xfe, 0xbe, 0xfe, 0xda, 0xd4, 0x7e, 0xd6, 0x02, 0x46, 0xfe, 0xa0, 0xfd, // ~........~..F... + 0xfe, 0xda, 0x8e, 0xf0, 0x01, 0x4c, 0x01, 0x6c, 0x01, 0x4c, 0xf0, 0x8e, 0xfe, 0xf5, 0xe9, 0xfe, // .....L.l.L...... + 0x74, 0xa0, 0x01, 0x60, 0x28, 0x38, 0x38, 0x28, 0x00, 0x04, 0x00, 0x20, 0xff, 0x00, 0x06, 0xe0, // t..`(88(... .... + 0x06, 0x00, 0x00, 0x03, 0x00, 0x07, 0x00, 0x0b, 0x00, 0x0f, 0x00, 0x00, 0x09, 0x01, 0x37, 0x21, // ..............7! + 0x01, 0x27, 0x11, 0x01, 0x1f, 0x01, 0x11, 0x09, 0x02, 0x21, 0x01, 0x05, 0x93, 0xfd, 0x9a, 0x5c, // .'.......!...... + 0x03, 0x57, 0xfa, 0xb5, 0xb8, 0x04, 0x9f, 0x14, 0x93, 0xfd, 0xec, 0x01, 0x5c, 0xfe, 0x0c, 0xfc, // .W.............. + 0xa9, 0x01, 0x64, 0x03, 0x3b, 0x01, 0x82, 0x97, 0xfc, 0xde, 0x74, 0x03, 0x5a, 0xfd, 0x19, 0x60, // ..d.;.....t.Z..` + 0x5f, 0xfc, 0xa6, 0x01, 0x4f, 0x02, 0x7f, 0xfc, 0xde, 0x02, 0x3b, 0x00, 0x00, 0x03, 0x00, 0x00, // _...O.....;..... + 0xff, 0x00, 0x06, 0x80, 0x05, 0xf0, 0x00, 0x0b, 0x00, 0x17, 0x00, 0x7d, 0x00, 0x00, 0x01, 0x35, // ...........}...5 + 0x34, 0x2b, 0x01, 0x22, 0x1d, 0x01, 0x14, 0x3b, 0x01, 0x32, 0x25, 0x35, 0x34, 0x2b, 0x01, 0x22, // 4+."...;.2%54+." + 0x1d, 0x01, 0x14, 0x3b, 0x01, 0x32, 0x05, 0x11, 0x21, 0x11, 0x34, 0x26, 0x22, 0x06, 0x15, 0x11, // ...;.2..!.4&"... + 0x21, 0x11, 0x34, 0x3b, 0x01, 0x32, 0x1d, 0x01, 0x33, 0x11, 0x34, 0x3b, 0x01, 0x32, 0x1d, 0x01, // !.4;.2..3.4;.2.. + 0x33, 0x35, 0x34, 0x3b, 0x01, 0x32, 0x1d, 0x01, 0x33, 0x35, 0x34, 0x3e, 0x02, 0x16, 0x33, 0x11, // 354;.2..354>..3. + 0x26, 0x35, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x07, 0x15, 0x36, 0x33, 0x32, 0x16, 0x33, 0x32, // &5462.....632.32 + 0x36, 0x33, 0x32, 0x1d, 0x01, 0x14, 0x06, 0x23, 0x22, 0x26, 0x23, 0x22, 0x07, 0x15, 0x32, 0x36, // 632....#"&#"..26 + 0x1e, 0x02, 0x1d, 0x01, 0x33, 0x35, 0x34, 0x3b, 0x01, 0x32, 0x1d, 0x01, 0x33, 0x35, 0x34, 0x3b, // ....354;.2..354; + 0x01, 0x32, 0x15, 0x11, 0x33, 0x35, 0x34, 0x3b, 0x01, 0x32, 0x02, 0x80, 0x10, 0x60, 0x10, 0x10, // .2..354;.2...`.. + 0x60, 0x10, 0x02, 0x00, 0x10, 0x60, 0x10, 0x10, 0x60, 0x10, 0x02, 0x00, 0xfd, 0x80, 0x70, 0xa0, // `....`..`.....p. + 0x70, 0xfd, 0x80, 0x10, 0x60, 0x10, 0x80, 0x10, 0x60, 0x10, 0x80, 0x10, 0x60, 0x10, 0x80, 0x05, // p...`...`...`... + 0x0c, 0x07, 0x10, 0x01, 0x20, 0x21, 0x2c, 0x21, 0x20, 0x2d, 0x26, 0x15, 0x4d, 0x10, 0x11, 0x3c, // .... !,! -&.M..< + 0x07, 0x10, 0x46, 0x1b, 0x12, 0x49, 0x13, 0x28, 0x32, 0x01, 0x10, 0x07, 0x0c, 0x05, 0x80, 0x10, // ..F..I.(2....... + 0x60, 0x10, 0x80, 0x10, 0x60, 0x10, 0x80, 0x10, 0x60, 0x10, 0x02, 0x10, 0xe0, 0x10, 0x10, 0xe0, // `...`...`....... + 0x10, 0x10, 0xe0, 0x10, 0x10, 0xe0, 0x10, 0x10, 0xfd, 0x10, 0x01, 0x40, 0x50, 0x70, 0x70, 0x50, // ...........@PppP + 0xfe, 0xc0, 0x02, 0xf0, 0x10, 0x10, 0x70, 0x02, 0x70, 0x10, 0x10, 0x70, 0x70, 0x10, 0x10, 0x70, // ......p.p..pp..p + 0x70, 0x06, 0x07, 0x03, 0x01, 0x01, 0x01, 0x87, 0x0f, 0x23, 0x17, 0x20, 0x20, 0x17, 0x23, 0x0f, // p........#. .#. + 0x11, 0x0a, 0x0f, 0x0f, 0x10, 0xd2, 0x0f, 0x0d, 0x0f, 0x0c, 0x85, 0x01, 0x01, 0x03, 0x07, 0x06, // ................ + 0x70, 0x70, 0x10, 0x10, 0x70, 0x70, 0x10, 0x10, 0xfd, 0x90, 0x70, 0x10, 0x00, 0x01, 0x00, 0x00, // pp..pp....p..... + 0x00, 0x00, 0x09, 0x00, 0x05, 0x80, 0x00, 0x6a, 0x00, 0x00, 0x01, 0x16, 0x14, 0x07, 0x05, 0x06, // .......j........ + 0x23, 0x22, 0x27, 0x26, 0x3d, 0x01, 0x21, 0x16, 0x17, 0x1e, 0x05, 0x3b, 0x01, 0x35, 0x34, 0x36, // #"'&=.!....;.546 + 0x33, 0x21, 0x32, 0x16, 0x15, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x23, 0x22, // 3!2.....#!"&=.#" + 0x2e, 0x05, 0x27, 0x2e, 0x03, 0x23, 0x21, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x34, 0x36, 0x33, 0x32, // ..'..#!..#"&4632 + 0x16, 0x17, 0x33, 0x32, 0x3e, 0x02, 0x37, 0x3e, 0x06, 0x3b, 0x01, 0x3e, 0x01, 0x33, 0x32, 0x16, // ..32>.7>.;.>.32. + 0x14, 0x06, 0x23, 0x22, 0x26, 0x27, 0x23, 0x22, 0x0e, 0x04, 0x07, 0x06, 0x07, 0x21, 0x35, 0x34, // ..#"&'#".....!54 + 0x36, 0x17, 0x08, 0xf0, 0x10, 0x10, 0xfe, 0xc0, 0x08, 0x08, 0x09, 0x07, 0x10, 0xfc, 0xa6, 0x25, // 6..............% + 0x2e, 0x10, 0x11, 0x1f, 0x17, 0x1f, 0x20, 0x11, 0x60, 0x12, 0x0e, 0x01, 0x40, 0x0e, 0x12, 0x12, // ...... .`...@... + 0x0e, 0xfe, 0xc0, 0x0e, 0x12, 0x60, 0x20, 0x3a, 0x2c, 0x2e, 0x1c, 0x27, 0x12, 0x13, 0x17, 0x1c, // .....` :,..'.... + 0x2c, 0x2d, 0x18, 0xfe, 0x98, 0x16, 0x8a, 0x58, 0x6a, 0x96, 0x96, 0x6a, 0x58, 0x8a, 0x16, 0x68, // ,-.....Xj..jX..h + 0x18, 0x2d, 0x2c, 0x1c, 0x17, 0x13, 0x12, 0x27, 0x1c, 0x2e, 0x2c, 0x3a, 0x20, 0x6b, 0x15, 0x62, // .-,....'..,: k.b + 0x3e, 0x50, 0x70, 0x70, 0x50, 0x3e, 0x62, 0x15, 0x6b, 0x11, 0x20, 0x1f, 0x17, 0x1f, 0x11, 0x10, // >PppP>b.k. ..... + 0x2e, 0x25, 0x04, 0x5a, 0x20, 0x10, 0x02, 0xdb, 0x08, 0x26, 0x08, 0xc0, 0x05, 0x04, 0x0a, 0x12, // .%.Z ....&...... + 0x80, 0x3a, 0x6b, 0x25, 0x24, 0x3e, 0x20, 0x24, 0x10, 0x60, 0x0e, 0x12, 0x12, 0x0e, 0xfe, 0xc0, // .:k%$> $.`...... + 0x0e, 0x12, 0x12, 0x0e, 0x60, 0x14, 0x1b, 0x36, 0x26, 0x4c, 0x27, 0x29, 0x35, 0x39, 0x49, 0x22, // ....`..6&L')59I" + 0x54, 0x6c, 0x96, 0xd4, 0x96, 0x6c, 0x54, 0x22, 0x49, 0x39, 0x35, 0x29, 0x27, 0x4c, 0x26, 0x36, // Tl...lT"I95)'L&6 + 0x1b, 0x14, 0x39, 0x47, 0x70, 0xa0, 0x70, 0x47, 0x39, 0x10, 0x24, 0x20, 0x3e, 0x24, 0x25, 0x6b, // ..9Gp.pG9.$ >$%k + 0x3a, 0x80, 0x12, 0x14, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x00, 0x07, 0x00, // :............... + 0x06, 0x00, 0x00, 0x07, 0x00, 0x11, 0x00, 0x21, 0x00, 0x00, 0x00, 0x14, 0x06, 0x2b, 0x01, 0x11, // .......!.....+.. + 0x33, 0x32, 0x00, 0x10, 0x26, 0x23, 0x21, 0x11, 0x33, 0x11, 0x33, 0x32, 0x00, 0x10, 0x02, 0x06, // 32..&#!.3.32.... + 0x04, 0x20, 0x24, 0x26, 0x02, 0x10, 0x12, 0x36, 0x24, 0x20, 0x04, 0x16, 0x04, 0x7e, 0x4f, 0x38, // . $&...6$ ...~O8 + 0xfd, 0xfd, 0x38, 0x01, 0x02, 0xb7, 0x83, 0xfe, 0x4f, 0xb4, 0xfd, 0x82, 0x02, 0x87, 0x8e, 0xf0, // ..8.....O....... + 0xfe, 0xb4, 0xfe, 0x94, 0xfe, 0xb4, 0xf0, 0x8e, 0x8e, 0xf0, 0x01, 0x4c, 0x01, 0x6c, 0x01, 0x4c, // ...........L.l.L + 0xf0, 0x03, 0x3e, 0x70, 0x4e, 0x01, 0x0d, 0xfe, 0xf7, 0x01, 0x04, 0xb8, 0xfc, 0x80, 0x01, 0x0d, // ..>pN........... + 0x01, 0x69, 0xfe, 0x94, 0xfe, 0xb4, 0xf0, 0x8e, 0x8e, 0xf0, 0x01, 0x4c, 0x01, 0x6c, 0x01, 0x4c, // .i.........L.l.L + 0xf0, 0x8e, 0x8e, 0xf0, 0x00, 0x04, 0x00, 0x00, 0xff, 0xd9, 0x09, 0x00, 0x05, 0x27, 0x00, 0x27, // .............'.' + 0x00, 0x3a, 0x00, 0x4d, 0x00, 0x61, 0x00, 0x00, 0x01, 0x34, 0x26, 0x27, 0x06, 0x07, 0x0e, 0x01, // .:.M.a...4&'.... + 0x23, 0x22, 0x27, 0x2e, 0x01, 0x37, 0x36, 0x35, 0x34, 0x2e, 0x01, 0x23, 0x22, 0x06, 0x07, 0x16, // #"'..7654..#"... + 0x17, 0x16, 0x14, 0x06, 0x22, 0x27, 0x26, 0x23, 0x22, 0x06, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, // ...."'&#"...3!26 + 0x37, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x34, 0x36, 0x37, 0x36, 0x24, 0x33, 0x32, 0x00, // 7..#!"&54676$32. + 0x17, 0x1e, 0x01, 0x17, 0x14, 0x07, 0x06, 0x23, 0x22, 0x27, 0x2e, 0x01, 0x37, 0x36, 0x10, 0x27, // .......#"'..76.' + 0x26, 0x3e, 0x01, 0x16, 0x17, 0x16, 0x24, 0x10, 0x07, 0x06, 0x23, 0x22, 0x27, 0x2e, 0x01, 0x37, // &>....$...#"'..7 + 0x36, 0x35, 0x34, 0x27, 0x26, 0x36, 0x37, 0x36, 0x16, 0x17, 0x06, 0x6d, 0x44, 0x35, 0x07, 0x10, // 654'&676...mD5.. + 0x07, 0x29, 0x18, 0x0c, 0x0c, 0x1f, 0x1c, 0x0a, 0x17, 0x7a, 0xd2, 0x7b, 0x86, 0xe2, 0x36, 0x6c, // .).......z.{..6l + 0x50, 0x16, 0x2c, 0x40, 0x17, 0x4b, 0x69, 0x6a, 0x96, 0x96, 0x6a, 0x04, 0x16, 0x4f, 0x6f, 0x99, // P.,@.Kij..j..Oo. + 0xc9, 0x8e, 0xfb, 0xea, 0xa9, 0xf0, 0xc8, 0x95, 0x3e, 0x01, 0x3e, 0xc3, 0xeb, 0x01, 0x5b, 0x17, // ........>.>...[. + 0x74, 0x99, 0xfa, 0x61, 0x17, 0x29, 0x18, 0x13, 0x1a, 0x0c, 0x12, 0x47, 0x47, 0x12, 0x0c, 0x34, // t..a.).....GG..4 + 0x3f, 0x12, 0x61, 0x01, 0x00, 0x86, 0x17, 0x29, 0x17, 0x13, 0x1a, 0x0d, 0x12, 0x6c, 0x6c, 0x12, // ?.a....).....ll. + 0x0d, 0x1a, 0x1a, 0x3e, 0x12, 0x01, 0xb6, 0x3b, 0x5f, 0x15, 0x2d, 0x2f, 0x18, 0x1c, 0x03, 0x0a, // ...>...;_.-/.... + 0x39, 0x1e, 0x47, 0x48, 0x7b, 0xd1, 0x7a, 0x92, 0x79, 0x1c, 0x4e, 0x17, 0x40, 0x2c, 0x16, 0x4b, // 9.GH{.z.y.N.@,.K + 0x95, 0xd4, 0x95, 0x6f, 0x4e, 0x8e, 0xc8, 0xef, 0xa9, 0x99, 0xe4, 0x16, 0xb8, 0xe4, 0xfe, 0xc3, // ...oN........... + 0xe7, 0x19, 0xbb, 0x79, 0xaf, 0x90, 0x21, 0x0d, 0x11, 0x3f, 0x1a, 0x68, 0x01, 0x02, 0x68, 0x1a, // ...y..!..?.h..h. + 0x3e, 0x24, 0x0d, 0x1a, 0x8e, 0x44, 0xfe, 0x18, 0xc7, 0x22, 0x0d, 0x12, 0x3e, 0x1a, 0xa4, 0xc2, // >$...D..."..>... + 0xc3, 0xa2, 0x1a, 0x3f, 0x11, 0x12, 0x0c, 0x1b, 0x00, 0x02, 0x00, 0x24, 0xff, 0x00, 0x05, 0xdc, // ...?.......$.... + 0x06, 0x00, 0x00, 0x09, 0x00, 0x6e, 0x00, 0x00, 0x05, 0x14, 0x06, 0x22, 0x26, 0x35, 0x34, 0x36, // .....n....."&546 + 0x32, 0x16, 0x27, 0x0e, 0x01, 0x15, 0x14, 0x17, 0x06, 0x23, 0x22, 0x2e, 0x05, 0x35, 0x34, 0x3e, // 2.'......#"..54> + 0x03, 0x32, 0x1e, 0x03, 0x15, 0x14, 0x07, 0x1e, 0x01, 0x1f, 0x01, 0x32, 0x36, 0x35, 0x34, 0x2e, // .2.........2654. + 0x04, 0x27, 0x26, 0x27, 0x2e, 0x03, 0x35, 0x34, 0x3e, 0x03, 0x33, 0x32, 0x1e, 0x03, 0x15, 0x14, // .'&'..54>.32.... + 0x0e, 0x03, 0x23, 0x22, 0x23, 0x2a, 0x01, 0x2e, 0x04, 0x35, 0x2e, 0x01, 0x2f, 0x01, 0x22, 0x0e, // ..#"#*...5../.". + 0x01, 0x15, 0x14, 0x1e, 0x03, 0x17, 0x1e, 0x08, 0x05, 0xdc, 0x7e, 0xb4, 0x7f, 0x7f, 0xb4, 0x7e, // ..........~....~ + 0xe9, 0x73, 0x9b, 0x21, 0x92, 0xe9, 0x6d, 0xb8, 0x7b, 0x62, 0x36, 0x23, 0x0c, 0x09, 0x1c, 0x2d, // .s.!..m.{b6#...- + 0x53, 0x6a, 0x52, 0x2c, 0x1b, 0x08, 0x17, 0x1c, 0x6c, 0x27, 0x28, 0x73, 0x96, 0x12, 0x2d, 0x36, // SjR,....l'(s..-6 + 0x5e, 0x5d, 0x49, 0x1c, 0x0f, 0x74, 0x8e, 0x67, 0x29, 0x29, 0x5b, 0x86, 0xc7, 0x7a, 0x78, 0xc8, // ^]I..t.g))[..zx. + 0x81, 0x5a, 0x26, 0x1e, 0x2b, 0x36, 0x2c, 0x11, 0x02, 0x06, 0x13, 0x1a, 0x34, 0x24, 0x2e, 0x1c, // .Z&.+6,.....4$.. + 0x14, 0x0f, 0x58, 0x25, 0x25, 0x44, 0x63, 0x2a, 0x0a, 0x26, 0x44, 0x7e, 0x57, 0x4c, 0x7d, 0x5d, // ..X%%Dc*.&D~WL}] + 0x49, 0x30, 0x22, 0x13, 0x0a, 0x02, 0x0d, 0x59, 0x7f, 0x7f, 0x59, 0x5a, 0x7f, 0x7f, 0xbf, 0x0f, // I0"....Y..YZ.... + 0xaf, 0x76, 0x4a, 0x40, 0x4e, 0x2a, 0x43, 0x56, 0x54, 0x52, 0x33, 0x0e, 0x13, 0x2f, 0x41, 0x33, // .vJ@N*CVTR3../A3 + 0x24, 0x23, 0x2f, 0x3b, 0x27, 0x0e, 0x22, 0x2f, 0x1b, 0x1e, 0x02, 0x01, 0x66, 0x52, 0x1a, 0x2d, // $#/;'."/....fR.- + 0x2c, 0x26, 0x32, 0x2d, 0x22, 0x0d, 0x07, 0x37, 0x5a, 0x72, 0x89, 0x5e, 0x4e, 0x90, 0x83, 0x61, // ,&2-"..7Zr.^N..a + 0x39, 0x34, 0x52, 0x6a, 0x69, 0x33, 0x2e, 0x49, 0x2b, 0x1d, 0x0a, 0x0a, 0x12, 0x26, 0x36, 0x57, // 94Rji3.I+....&6W + 0x36, 0x10, 0x13, 0x01, 0x01, 0x3e, 0x4e, 0x25, 0x18, 0x26, 0x36, 0x30, 0x3b, 0x1d, 0x19, 0x39, // 6....>N%.&60;..9 + 0x36, 0x40, 0x37, 0x46, 0x36, 0x49, 0x33, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // 6@7F6I3......... + 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2b, 0x00, 0x00, 0x01, 0x11, 0x34, 0x26, 0x23, 0x21, // .......+....4&#! + 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x25, 0x11, 0x34, 0x26, 0x23, 0x21, // ".....3!26%.4&#! + 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x00, 0x10, 0x02, 0x04, 0x20, 0x24, // ".....3!26.... $ + 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, 0x02, 0xc0, 0x12, 0x0e, 0xff, 0x00, 0x0e, 0x12, 0x12, 0x0e, // ...$ ........... + 0x01, 0x00, 0x0e, 0x12, 0x01, 0xc0, 0x12, 0x0e, 0xff, 0x00, 0x0e, 0x12, 0x12, 0x0e, 0x01, 0x00, // ................ + 0x0e, 0x12, 0x01, 0x80, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, // ........^.....a. + 0xa2, 0x01, 0x61, 0x01, 0x60, 0x02, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0xfd, 0xc0, 0x0e, 0x12, 0x12, // ..a.`.@......... + 0x0e, 0x02, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0xfd, 0xc0, 0x0e, 0x12, 0x12, 0x01, 0xff, 0xfe, 0x5e, // ..@............^ + 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x04, 0x00, 0x00, // .....a...a...... + 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x0b, 0x00, 0x17, 0x00, 0x27, 0x00, 0x37, 0x00, 0x00, // ...........'.7.. + 0x00, 0x20, 0x04, 0x12, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, 0x00, 0x20, 0x3e, 0x01, // . ..... $.... >. + 0x10, 0x2e, 0x01, 0x20, 0x0e, 0x01, 0x10, 0x16, 0x25, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x3b, // ... ....%"&5.46; + 0x01, 0x32, 0x16, 0x15, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x3b, // .2.....#!"&5.46; + 0x01, 0x32, 0x16, 0x15, 0x11, 0x14, 0x06, 0x23, 0x02, 0x2f, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, // .2.....#./...a.. + 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x9e, 0x01, 0x28, 0xfa, 0x92, 0x92, 0xfa, // ...^.......(.... + 0xfe, 0xd8, 0xfa, 0x92, 0x92, 0x01, 0xee, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x0e, // ................ + 0xfd, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0x05, 0x80, 0xce, 0xfe, 0x9f, // ................ + 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xfb, 0xae, 0x92, 0xfa, // .^.....a...a.... + 0x01, 0x28, 0xfa, 0x92, 0x92, 0xfa, 0xfe, 0xd8, 0xfa, 0x4e, 0x12, 0x0e, 0x02, 0x40, 0x0e, 0x12, // .(.......N...@.. + 0x12, 0x0e, 0xfd, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0x02, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0xfd, 0xc0, // .........@...... + 0x0e, 0x12, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x0f, // ................ + 0x00, 0x1b, 0x00, 0x00, 0x01, 0x11, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, // ......4&#!"..... + 0x33, 0x21, 0x32, 0x36, 0x00, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, // 3!26.... $...$ . + 0x04, 0x40, 0x12, 0x0e, 0xfd, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0x02, 0x40, 0x0e, 0x12, 0x01, 0xc0, // .@.........@.... + 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x01, // ....^.....a...a. + 0x60, 0x02, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0xfd, 0xc0, 0x0e, 0x12, 0x12, 0x01, 0xff, 0xfe, 0x5e, // `.@............^ + 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x03, 0x00, 0x00, // .....a...a...... + 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x0b, 0x00, 0x17, 0x00, 0x27, 0x00, 0x00, 0x00, 0x20, // ...........'... + 0x04, 0x12, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, 0x00, 0x20, 0x3e, 0x01, 0x10, 0x2e, // ..... $.... >... + 0x01, 0x20, 0x0e, 0x01, 0x10, 0x16, 0x37, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, // . ....7"&5.463!2 + 0x16, 0x15, 0x11, 0x14, 0x06, 0x23, 0x02, 0x2f, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0xfe, 0x9f, // .....#./...a.... + 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x9e, 0x01, 0x28, 0xfa, 0x92, 0x92, 0xfa, 0xfe, 0xd8, // .^.......(...... + 0xfa, 0x92, 0x92, 0x6e, 0x0e, 0x12, 0x12, 0x0e, 0x02, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x05, 0x80, // ...n.....@...... + 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xfb, // ....^.....a...a. + 0xae, 0x92, 0xfa, 0x01, 0x28, 0xfa, 0x92, 0x92, 0xfa, 0xfe, 0xd8, 0xfa, 0x4e, 0x12, 0x0e, 0x02, // ....(.......N... + 0x40, 0x0e, 0x12, 0x12, 0x0e, 0xfd, 0xc0, 0x0e, 0x12, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // @............... + 0xff, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x0b, 0x00, 0x25, 0x00, 0x3d, 0x00, 0x00, 0x25, 0x13, // .........%.=..%. + 0x16, 0x07, 0x06, 0x23, 0x21, 0x22, 0x27, 0x26, 0x37, 0x13, 0x01, 0x13, 0x21, 0x13, 0x3e, 0x01, // ...#!"'&7...!.>. + 0x33, 0x21, 0x15, 0x14, 0x16, 0x32, 0x36, 0x3d, 0x01, 0x21, 0x15, 0x14, 0x16, 0x32, 0x36, 0x3d, // 3!...26=.!...26= + 0x01, 0x21, 0x32, 0x16, 0x25, 0x11, 0x14, 0x06, 0x22, 0x26, 0x35, 0x11, 0x34, 0x26, 0x22, 0x06, // .!2.%..."&5.4&". + 0x15, 0x11, 0x14, 0x06, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x20, 0x16, 0x06, 0xdd, 0x23, 0x03, // ...."&5.46 ...#. + 0x13, 0x13, 0x1d, 0xf9, 0x80, 0x1d, 0x13, 0x13, 0x03, 0x23, 0x06, 0x5d, 0x56, 0xf9, 0x54, 0x56, // .........#.]V.TV + 0x03, 0x24, 0x19, 0x01, 0x00, 0x4b, 0x6a, 0x4b, 0x01, 0x80, 0x4b, 0x6a, 0x4b, 0x01, 0x00, 0x19, // .$...KjK..KjK... + 0x24, 0xfe, 0x83, 0x26, 0x34, 0x26, 0x96, 0xd4, 0x96, 0x26, 0x34, 0x26, 0xe1, 0x01, 0x3e, 0xe1, // $..&4&...&4&..>. + 0x80, 0xfe, 0xc7, 0x1c, 0x16, 0x15, 0x15, 0x16, 0x1c, 0x01, 0x39, 0x03, 0x47, 0xfc, 0xf9, 0x03, // ..........9.G... + 0x07, 0x18, 0x21, 0x80, 0x35, 0x4b, 0x4b, 0x35, 0x80, 0x80, 0x35, 0x4b, 0x4b, 0x35, 0x80, 0x21, // ..!.5KK5..5KK5.! + 0xa1, 0xff, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0x00, 0x6a, 0x96, 0x96, 0x6a, 0xff, 0x00, 0x1a, // ....&&...j..j... + 0x26, 0x26, 0x1a, 0x01, 0x00, 0x9f, 0xe1, 0xe1, 0x00, 0x06, 0x00, 0x00, 0xff, 0x00, 0x08, 0x00, // &&.............. + 0x06, 0x00, 0x00, 0x15, 0x00, 0x23, 0x00, 0x2f, 0x00, 0x3b, 0x00, 0x49, 0x00, 0x6d, 0x00, 0x00, // .....#./.;.I.m.. + 0x01, 0x32, 0x16, 0x14, 0x06, 0x2b, 0x01, 0x03, 0x0e, 0x01, 0x23, 0x21, 0x22, 0x26, 0x27, 0x03, // .2...+....#!"&'. + 0x23, 0x22, 0x26, 0x34, 0x36, 0x33, 0x01, 0x3e, 0x01, 0x27, 0x03, 0x2e, 0x01, 0x0e, 0x01, 0x17, // #"&463.>.'...... + 0x13, 0x1e, 0x01, 0x33, 0x25, 0x11, 0x34, 0x26, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x32, 0x36, // ...3%.4&".....26 + 0x25, 0x11, 0x34, 0x26, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x32, 0x36, 0x25, 0x13, 0x36, 0x2e, // %.4&".....26%.6. + 0x01, 0x06, 0x07, 0x03, 0x06, 0x16, 0x17, 0x33, 0x32, 0x36, 0x01, 0x03, 0x23, 0x13, 0x3e, 0x01, // .......326..#.>. + 0x3b, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x15, 0x33, 0x32, 0x16, 0x17, 0x13, 0x23, 0x03, // ;.463!2..32...#. + 0x2e, 0x01, 0x2b, 0x01, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x23, 0x22, 0x06, 0x07, 0x80, // ..+...#!"&5#"... + 0x35, 0x4b, 0x4b, 0x35, 0x0f, 0x73, 0x08, 0x48, 0x2e, 0xfb, 0x00, 0x2e, 0x48, 0x08, 0x73, 0x0f, // 5KK5.s.H....H.s. + 0x35, 0x4b, 0x4b, 0x35, 0x01, 0x65, 0x1a, 0x23, 0x02, 0x20, 0x02, 0x29, 0x34, 0x23, 0x02, 0x20, // 5KK5.e.#. .)4#. + 0x02, 0x25, 0x19, 0x01, 0xa0, 0x26, 0x34, 0x26, 0x26, 0x34, 0x26, 0x01, 0x80, 0x26, 0x34, 0x26, // .%...&4&&4&..&4& + 0x26, 0x34, 0x26, 0x01, 0x60, 0x20, 0x02, 0x23, 0x34, 0x29, 0x02, 0x20, 0x02, 0x23, 0x1a, 0x05, // &4&.` .#4). .#.. + 0x19, 0x25, 0xfb, 0x7e, 0x5d, 0x84, 0x65, 0x13, 0x8c, 0x5a, 0xa7, 0x26, 0x1a, 0x01, 0x80, 0x1a, // .%.~].e..Z.&.... + 0x26, 0xa7, 0x5a, 0x8c, 0x13, 0x65, 0x84, 0x5d, 0x0b, 0x45, 0x2d, 0xa7, 0x26, 0x1a, 0xfe, 0x80, // &.Z..e.].E-.&... + 0x1a, 0x26, 0xa7, 0x2d, 0x45, 0x03, 0x00, 0x4b, 0x6a, 0x4b, 0xfd, 0x6a, 0x2e, 0x3c, 0x3c, 0x2e, // .&.-E..KjK.j.<<. + 0x02, 0x96, 0x4b, 0x6a, 0x4b, 0xfc, 0xe0, 0x02, 0x29, 0x1a, 0x01, 0xa0, 0x1a, 0x23, 0x04, 0x29, // ..KjK...)....#.) + 0x1a, 0xfe, 0x60, 0x19, 0x22, 0x40, 0x01, 0xa0, 0x1a, 0x26, 0x26, 0x1a, 0xfe, 0x60, 0x1a, 0x26, // ..`."@...&&..`.& + 0x26, 0x1a, 0x01, 0xa0, 0x1a, 0x26, 0x26, 0x1a, 0xfe, 0x60, 0x1a, 0x26, 0x26, 0x15, 0x01, 0xa0, // &....&&..`.&&... + 0x1a, 0x29, 0x04, 0x23, 0x1a, 0xfe, 0x60, 0x1a, 0x29, 0x02, 0x22, 0x04, 0xda, 0xfe, 0x64, 0x01, // .).#..`.)."...d. + 0xb9, 0x58, 0x6f, 0x1a, 0x26, 0x26, 0x1a, 0x6f, 0x58, 0xfe, 0x47, 0x01, 0x9c, 0x2c, 0x38, 0x1a, // .Xo.&&.oX.G..,8. + 0x26, 0x26, 0x1a, 0x38, 0x00, 0x02, 0x00, 0x21, 0xff, 0x80, 0x06, 0xdf, 0x05, 0x80, 0x00, 0x03, // &&.8...!........ + 0x00, 0x4f, 0x00, 0x00, 0x01, 0x13, 0x23, 0x03, 0x01, 0x07, 0x06, 0x23, 0x21, 0x03, 0x21, 0x32, // .O....#....#!.!2 + 0x17, 0x16, 0x0f, 0x01, 0x06, 0x23, 0x21, 0x03, 0x06, 0x2b, 0x01, 0x22, 0x27, 0x26, 0x37, 0x13, // .....#!..+."'&7. + 0x23, 0x03, 0x06, 0x2b, 0x01, 0x22, 0x27, 0x26, 0x37, 0x13, 0x21, 0x22, 0x27, 0x26, 0x3f, 0x01, // #..+."'&7.!"'&?. + 0x36, 0x33, 0x21, 0x13, 0x21, 0x22, 0x27, 0x26, 0x3f, 0x01, 0x36, 0x33, 0x21, 0x13, 0x36, 0x3b, // 63!.!"'&?.63!.6; + 0x01, 0x32, 0x17, 0x16, 0x07, 0x03, 0x33, 0x13, 0x36, 0x3b, 0x01, 0x32, 0x17, 0x16, 0x07, 0x03, // .2....3.6;.2.... + 0x21, 0x32, 0x17, 0x16, 0x03, 0xdf, 0x40, 0xfe, 0x40, 0x03, 0xfe, 0x38, 0x07, 0x18, 0xfe, 0xb9, // !2....@.@..8.... + 0x40, 0x01, 0x37, 0x0f, 0x0a, 0x0a, 0x04, 0x38, 0x05, 0x1a, 0xfe, 0xb9, 0x51, 0x07, 0x18, 0xe0, // @.7....8....Q... + 0x10, 0x0a, 0x09, 0x03, 0x4e, 0xfe, 0x51, 0x07, 0x18, 0xe1, 0x0f, 0x0a, 0x09, 0x03, 0x4e, 0xfe, // ....N.Q.......N. + 0xc9, 0x0f, 0x0a, 0x09, 0x03, 0x38, 0x07, 0x18, 0x01, 0x47, 0x40, 0xfe, 0xc9, 0x0f, 0x0a, 0x0a, // .....8...G@..... + 0x04, 0x38, 0x05, 0x1a, 0x01, 0x47, 0x51, 0x07, 0x19, 0xe0, 0x0f, 0x0a, 0x09, 0x03, 0x4e, 0xfe, // .8...GQ.......N. + 0x51, 0x07, 0x19, 0xe0, 0x0f, 0x0a, 0x09, 0x03, 0x4e, 0x01, 0x37, 0x0f, 0x0a, 0x09, 0x02, 0x00, // Q.......N.7..... + 0x01, 0x00, 0xff, 0x00, 0x01, 0xf8, 0xe0, 0x18, 0xff, 0x00, 0x0c, 0x0e, 0x0e, 0xe0, 0x18, 0xfe, // ................ + 0xb8, 0x18, 0x0c, 0x0c, 0x10, 0x01, 0x38, 0xfe, 0xb8, 0x18, 0x0c, 0x0c, 0x10, 0x01, 0x38, 0x0c, // ......8.......8. + 0x0c, 0x10, 0xe0, 0x18, 0x01, 0x00, 0x0c, 0x0e, 0x0e, 0xe0, 0x18, 0x01, 0x48, 0x18, 0x0c, 0x0c, // ............H... + 0x10, 0xfe, 0xc8, 0x01, 0x48, 0x18, 0x0c, 0x0c, 0x10, 0xfe, 0xc8, 0x0c, 0x0c, 0x00, 0x00, 0x00, // ....H........... + 0x00, 0x04, 0x00, 0x6b, 0xff, 0x00, 0x05, 0x95, 0x06, 0x00, 0x00, 0x02, 0x00, 0x05, 0x00, 0x11, // ...k............ + 0x00, 0x25, 0x00, 0x00, 0x01, 0x17, 0x07, 0x11, 0x17, 0x07, 0x03, 0x09, 0x03, 0x11, 0x03, 0x07, // .%.............. + 0x09, 0x01, 0x17, 0x01, 0x00, 0x10, 0x02, 0x0e, 0x02, 0x22, 0x2e, 0x02, 0x02, 0x10, 0x12, 0x3e, // .........".....> + 0x02, 0x32, 0x1e, 0x02, 0x03, 0x49, 0x94, 0x95, 0x95, 0x94, 0x83, 0x01, 0xd0, 0xfe, 0xce, 0x01, // .2...I.......... + 0x32, 0xfe, 0x30, 0xff, 0x5d, 0x01, 0x40, 0xfe, 0xc0, 0x5d, 0x00, 0xff, 0x02, 0xcf, 0x40, 0x6f, // 2.0.].@..]....@o + 0xaa, 0xc1, 0xf6, 0xc1, 0xaa, 0x6f, 0x40, 0x40, 0x6f, 0xaa, 0xc1, 0xf6, 0xc1, 0xaa, 0x6f, 0x01, // .....o@@o.....o. + 0xe3, 0x94, 0x95, 0x03, 0x8c, 0x95, 0x94, 0xfc, 0x61, 0x01, 0xd0, 0x01, 0x32, 0x01, 0x32, 0x01, // ........a...2.2. + 0xd0, 0xfd, 0x9d, 0x00, 0xff, 0x5d, 0xfe, 0xbf, 0xfe, 0xbf, 0x5d, 0x00, 0xff, 0x01, 0x70, 0xfe, // .....]....]...p. + 0x5e, 0xfe, 0xc7, 0xc9, 0x7c, 0x31, 0x31, 0x7c, 0xc9, 0x01, 0x39, 0x01, 0xa2, 0x01, 0x39, 0xc9, // ^...|11|..9...9. + 0x7c, 0x31, 0x31, 0x7c, 0xc9, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x28, 0xff, 0x00, 0x03, 0xd8, // |11|.......(.... + 0x06, 0x00, 0x00, 0x02, 0x00, 0x05, 0x00, 0x11, 0x00, 0x00, 0x25, 0x37, 0x27, 0x11, 0x37, 0x27, // ..........%7'.7' + 0x13, 0x09, 0x01, 0x11, 0x01, 0x27, 0x09, 0x01, 0x37, 0x01, 0x11, 0x01, 0x02, 0x54, 0xad, 0xad, // .....'..7....T.. + 0xad, 0xad, 0x20, 0x01, 0x64, 0xfd, 0xe5, 0xfe, 0xd7, 0x6c, 0x01, 0x74, 0xfe, 0x8c, 0x6c, 0x01, // .. .d....l.t..l. + 0x29, 0x02, 0x1b, 0x71, 0xac, 0xac, 0x01, 0x6e, 0xac, 0xac, 0xfd, 0xf1, 0xfe, 0x9c, 0xfd, 0xe4, // )..q...n........ + 0x02, 0xc7, 0xfe, 0xd8, 0x6c, 0x01, 0x75, 0x01, 0x75, 0x6c, 0xfe, 0xd8, 0x02, 0xc7, 0xfd, 0xe4, // ....l.u.ul...... + 0x00, 0x05, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x07, 0x00, 0x0f, 0x00, 0x17, // ................ + 0x00, 0x29, 0x00, 0x31, 0x00, 0x00, 0x24, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x00, 0x34, // .).1..$4&"...2.4 + 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x00, 0x10, 0x06, 0x20, 0x26, 0x10, 0x36, 0x20, 0x13, 0x14, // &"...2... &.6 .. + 0x07, 0x01, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x34, 0x37, 0x01, 0x36, 0x3b, 0x01, 0x32, 0x16, // ...+."&547.6;.2. + 0x04, 0x10, 0x06, 0x20, 0x26, 0x10, 0x36, 0x20, 0x05, 0x00, 0x4c, 0x68, 0x4c, 0x4c, 0x68, 0xfd, // ... &.6 ..LhLLh. + 0x4c, 0x4c, 0x68, 0x4c, 0x4c, 0x68, 0x04, 0x4c, 0xe1, 0xfe, 0xc2, 0xe1, 0xe1, 0x01, 0x3e, 0x81, // LLhLLh.L......>. + 0x0d, 0xfb, 0xe0, 0x13, 0x20, 0xa0, 0x1a, 0x26, 0x0d, 0x04, 0x20, 0x13, 0x20, 0xa0, 0x1a, 0x26, // .... ..&.. . ..& + 0xfd, 0x60, 0xe1, 0xfe, 0xc2, 0xe1, 0xe1, 0x01, 0x3e, 0xcc, 0x68, 0x4c, 0x4c, 0x68, 0x4c, 0x03, // .`......>.hLLhL. + 0x4c, 0x68, 0x4c, 0x4c, 0x68, 0x4c, 0xfe, 0x1f, 0xfe, 0xc2, 0xe1, 0xe1, 0x01, 0x3e, 0xe1, 0x02, // LhLLhL.......>.. + 0xc0, 0x14, 0x12, 0xfa, 0x80, 0x1a, 0x26, 0x1a, 0x14, 0x12, 0x05, 0x80, 0x1a, 0x26, 0xbb, 0xfe, // ......&......&.. + 0xc2, 0xe1, 0xe1, 0x01, 0x3e, 0xe1, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0xff, 0x47, 0x06, 0xfd, // ....>........G.. + 0x05, 0xb9, 0x00, 0x06, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x17, 0x00, 0x1d, 0x00, 0x00, 0x13, 0x09, // ................ + 0x01, 0x2e, 0x01, 0x37, 0x13, 0x29, 0x01, 0x01, 0x31, 0x01, 0x13, 0x21, 0x13, 0x36, 0x32, 0x01, // ...7.)..1..!.62. + 0x13, 0x16, 0x06, 0x07, 0x09, 0x01, 0x31, 0x21, 0x13, 0x36, 0x32, 0x17, 0x68, 0x03, 0x18, 0xfc, // ......1!.62.h... + 0x9c, 0x12, 0x0e, 0x07, 0x65, 0x01, 0xce, 0x02, 0x94, 0xfe, 0xb6, 0xfd, 0xf0, 0xc6, 0xfe, 0x32, // ....e..........2 + 0xc6, 0x08, 0x32, 0x05, 0x30, 0x65, 0x07, 0x0e, 0x12, 0xfc, 0x9c, 0x03, 0x18, 0xfe, 0x32, 0xc6, // ..2.0e........2. + 0x08, 0x32, 0x08, 0x03, 0x3e, 0xfc, 0x09, 0x02, 0x76, 0x0d, 0x2b, 0x15, 0x01, 0x34, 0xfc, 0x09, // .2..>...v.+..4.. + 0x06, 0x5b, 0xfd, 0x9c, 0x02, 0x64, 0x17, 0xfd, 0x85, 0xfe, 0xcc, 0x15, 0x2b, 0x0d, 0xfd, 0x8a, // .[...d......+... + 0x03, 0xf7, 0x02, 0x64, 0x17, 0x17, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0xff, 0x20, 0x07, 0x00, // ...d......... .. + 0x05, 0xe0, 0x00, 0x03, 0x00, 0x0f, 0x00, 0x13, 0x00, 0x31, 0x00, 0x00, 0x01, 0x33, 0x35, 0x23, // .........1...35# + 0x01, 0x35, 0x06, 0x07, 0x06, 0x26, 0x27, 0x17, 0x1e, 0x01, 0x37, 0x32, 0x01, 0x21, 0x35, 0x21, // .5...&'...72.!5! + 0x05, 0x14, 0x07, 0x16, 0x15, 0x14, 0x04, 0x23, 0x22, 0x26, 0x27, 0x06, 0x22, 0x27, 0x0e, 0x01, // .......#"&'."'.. + 0x23, 0x22, 0x24, 0x35, 0x34, 0x37, 0x26, 0x35, 0x34, 0x12, 0x24, 0x20, 0x04, 0x12, 0x01, 0x80, // #"$547&54.$ .... + 0xa0, 0xa0, 0x03, 0x45, 0x68, 0x8b, 0x87, 0xf9, 0x60, 0x01, 0x58, 0xf8, 0x94, 0x81, 0xfe, 0x28, // ...Eh...`.X....( + 0x02, 0x80, 0xfd, 0x80, 0x04, 0x80, 0x63, 0x59, 0xfe, 0xfd, 0xb8, 0x7a, 0xce, 0x3a, 0x13, 0x4c, // ......cY...z.:.L + 0x13, 0x3a, 0xce, 0x7a, 0xb8, 0xfe, 0xfd, 0x59, 0x63, 0xf0, 0x01, 0x9d, 0x01, 0xe6, 0x01, 0x9d, // .:.z...Yc....... + 0xf0, 0x02, 0xc0, 0xe0, 0xfd, 0xd4, 0x5c, 0x24, 0x02, 0x01, 0x5f, 0x4b, 0x60, 0x50, 0x61, 0x01, // .......$.._K`Pa. + 0x01, 0x7d, 0xe0, 0xc0, 0xbb, 0xa5, 0x66, 0x7f, 0x9d, 0xde, 0x69, 0x58, 0x01, 0x01, 0x58, 0x69, // .}....f...iX..Xi + 0xde, 0x9d, 0x7f, 0x66, 0xa5, 0xbb, 0xd1, 0x01, 0x61, 0xce, 0xce, 0xfe, 0x9f, 0x00, 0x00, 0x00, // ...f....a....... + 0x00, 0x09, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x03, 0x00, 0x07, 0x00, 0x0b, // ................ + 0x00, 0x0f, 0x00, 0x13, 0x00, 0x28, 0x00, 0x2b, 0x00, 0x2e, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x15, // .....(.+...>.... + 0x23, 0x35, 0x13, 0x15, 0x23, 0x35, 0x01, 0x15, 0x21, 0x35, 0x01, 0x15, 0x21, 0x35, 0x01, 0x15, // #5..#5..!5..!5.. + 0x21, 0x35, 0x01, 0x11, 0x34, 0x26, 0x2b, 0x01, 0x01, 0x27, 0x07, 0x01, 0x23, 0x22, 0x06, 0x15, // !5..4&+..'..#".. + 0x11, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x01, 0x37, 0x21, 0x05, 0x37, 0x21, 0x05, 0x11, 0x14, // ...3!26.7!.7!... + 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x02, 0x03, 0xfc, // .#!"&5.463!2.... + 0xfc, 0xfc, 0x03, 0xf2, 0xfe, 0xab, 0x01, 0x55, 0xfd, 0x60, 0x02, 0xa0, 0xfd, 0x60, 0x03, 0x27, // .......U.`...`.' + 0x0c, 0x08, 0x20, 0xfe, 0x86, 0xd2, 0xd2, 0xfe, 0x86, 0x20, 0x08, 0x0c, 0x0c, 0x08, 0x04, 0xd8, // .. ...... ...... + 0x08, 0x0c, 0xfc, 0xa9, 0xb9, 0xfe, 0x6a, 0x02, 0x8b, 0xdd, 0xfe, 0x6a, 0x02, 0xe2, 0x56, 0x3e, // ......j....j..V> + 0xfb, 0x28, 0x3e, 0x56, 0x56, 0x3e, 0x04, 0xd8, 0x3e, 0x56, 0x02, 0x71, 0x80, 0x80, 0x00, 0xff, // .(>VV>..>V.q.... + 0x7f, 0x7f, 0xfe, 0x01, 0x80, 0x80, 0x01, 0x00, 0x80, 0x80, 0x00, 0xff, 0x7f, 0x7f, 0xfc, 0xa4, // ................ + 0x04, 0xd8, 0x08, 0x0c, 0xff, 0x00, 0xab, 0xab, 0x01, 0x00, 0x0c, 0x08, 0xfb, 0x28, 0x08, 0x0c, // .............(.. + 0x0c, 0x04, 0x5e, 0x96, 0x96, 0x96, 0x14, 0xfb, 0x28, 0x3e, 0x56, 0x56, 0x3e, 0x04, 0xd8, 0x3e, // ..^.....(>VV>..> + 0x56, 0x56, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x1f, // VV.............. + 0x00, 0x3d, 0x00, 0x00, 0x01, 0x26, 0x27, 0x26, 0x27, 0x26, 0x27, 0x26, 0x06, 0x1f, 0x01, 0x1e, // .=...&'&'&'&.... + 0x03, 0x17, 0x16, 0x17, 0x1e, 0x04, 0x17, 0x16, 0x37, 0x36, 0x27, 0x26, 0x27, 0x26, 0x02, 0x01, // ........76'&'&.. + 0x2e, 0x05, 0x02, 0x27, 0x20, 0x0c, 0x01, 0x1e, 0x03, 0x0e, 0x01, 0x07, 0x06, 0x15, 0x01, 0x23, // ...' ..........# + 0x01, 0x0e, 0x02, 0x2e, 0x02, 0x03, 0x80, 0x68, 0x38, 0x8b, 0xd0, 0x22, 0x24, 0x59, 0x0a, 0x27, // .......h8.."$Y.' + 0x27, 0x3e, 0x65, 0x58, 0x35, 0x2c, 0x09, 0x04, 0x2c, 0x50, 0x74, 0x73, 0x93, 0x4b, 0x99, 0x01, // '>eX5,..,Pts.K.. + 0x01, 0x32, 0x35, 0x1c, 0x4d, 0xcc, 0xfe, 0x52, 0x4c, 0x71, 0x53, 0x3b, 0x3a, 0x2e, 0x4b, 0x27, // .25.M..RLqS;:.K' + 0x01, 0x11, 0x01, 0xc1, 0x01, 0x35, 0xe9, 0x8a, 0x52, 0x1e, 0x05, 0x0e, 0x0d, 0x0d, 0x01, 0x43, // .....5..R......C + 0x68, 0xfe, 0xe7, 0x16, 0x8b, 0x68, 0xac, 0x95, 0xba, 0x02, 0xd0, 0xc4, 0x52, 0xca, 0x74, 0x13, // h....h......R.t. + 0x11, 0x28, 0x10, 0x1e, 0x1f, 0x2b, 0x65, 0x84, 0x5e, 0x54, 0x11, 0x08, 0x54, 0x8a, 0xaa, 0x82, // .(...+e.^T..T... + 0x75, 0x20, 0x42, 0x06, 0x03, 0x22, 0x24, 0x15, 0x3a, 0x01, 0x32, 0xfe, 0x7e, 0x3c, 0x82, 0x9d, // u B.."$.:.2.~<.. + 0x98, 0xdc, 0xc6, 0x01, 0x32, 0x88, 0x48, 0x70, 0xb1, 0xa8, 0xe5, 0xaa, 0xe3, 0x77, 0x54, 0x54, // ....2.Hp.....wTT + 0x17, 0xfe, 0xb9, 0x01, 0x1d, 0x02, 0x18, 0x0e, 0x02, 0x20, 0x56, 0x00, 0x00, 0x05, 0x00, 0x00, // ......... V..... + 0xff, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x2f, 0x00, 0x37, 0x00, 0x47, 0x00, 0x57, 0x00, 0x67, // ......./.7.G.W.g + 0x00, 0x00, 0x00, 0x2e, 0x01, 0x07, 0x04, 0x20, 0x25, 0x26, 0x0e, 0x01, 0x16, 0x17, 0x16, 0x17, // ....... %&...... + 0x0e, 0x02, 0x0f, 0x01, 0x06, 0x16, 0x17, 0x16, 0x33, 0x32, 0x3f, 0x01, 0x36, 0x37, 0x33, 0x16, // ........32?.673. + 0x1f, 0x01, 0x16, 0x33, 0x32, 0x37, 0x3e, 0x01, 0x2f, 0x01, 0x2e, 0x02, 0x27, 0x36, 0x37, 0x36, // ...327>./...'676 + 0x24, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x04, 0x10, 0x02, 0x06, 0x04, 0x20, 0x24, 0x26, // $4&"...2..... $& + 0x02, 0x10, 0x12, 0x36, 0x24, 0x20, 0x04, 0x16, 0x00, 0x20, 0x04, 0x06, 0x02, 0x10, 0x12, 0x16, // ...6$ ... ...... + 0x04, 0x20, 0x24, 0x36, 0x12, 0x10, 0x02, 0x26, 0x00, 0x10, 0x02, 0x06, 0x04, 0x20, 0x24, 0x26, // . $6...&..... $& + 0x02, 0x10, 0x12, 0x36, 0x24, 0x20, 0x04, 0x16, 0x05, 0x64, 0x0c, 0x2d, 0x1a, 0xfe, 0xfb, 0xfe, // ...6$ ...d.-.... + 0xe8, 0xfe, 0xfb, 0x1a, 0x2d, 0x0c, 0x1b, 0x1a, 0xc2, 0x6d, 0x02, 0x1b, 0x1a, 0x1c, 0x09, 0x0a, // ....-....m...... + 0x16, 0x19, 0x09, 0x0e, 0x2c, 0x10, 0x08, 0x36, 0x11, 0x2a, 0x11, 0x36, 0x08, 0x10, 0x2c, 0x0e, // ....,..6.*.6..,. + 0x09, 0x19, 0x16, 0x0a, 0x09, 0x1c, 0x1a, 0x1b, 0x02, 0x6d, 0xc2, 0x1a, 0xfe, 0xb7, 0x4b, 0x6a, // .........m....Kj + 0x4b, 0x4b, 0x6a, 0x02, 0x8b, 0x6f, 0xbd, 0xfe, 0xfb, 0xfe, 0xe2, 0xfe, 0xfb, 0xbd, 0x6f, 0x6f, // KKj..o........oo + 0xbd, 0x01, 0x05, 0x01, 0x1e, 0x01, 0x05, 0xbd, 0xfe, 0x4b, 0xfe, 0xc8, 0xfe, 0xe4, 0xce, 0x7a, // .........K.....z + 0x7a, 0xce, 0x01, 0x1c, 0x01, 0x38, 0x01, 0x1c, 0xce, 0x7a, 0x7a, 0xce, 0x01, 0xc8, 0x8e, 0xf0, // z....8...zz..... + 0xfe, 0xb4, 0xfe, 0x94, 0xfe, 0xb4, 0xf0, 0x8e, 0x8e, 0xf0, 0x01, 0x4c, 0x01, 0x6c, 0x01, 0x4c, // ...........L.l.L + 0xf0, 0x03, 0x55, 0x34, 0x1b, 0x06, 0x3e, 0x3e, 0x06, 0x1b, 0x34, 0x2d, 0x06, 0x2e, 0x0c, 0x9e, // ..U4..>>..4-.... + 0xde, 0x59, 0x47, 0x15, 0x19, 0x30, 0x0a, 0x04, 0x29, 0x14, 0x8b, 0x78, 0x78, 0x8b, 0x14, 0x29, // .YG..0..)..xx..) + 0x04, 0x0a, 0x30, 0x19, 0x15, 0x47, 0x59, 0xde, 0x9e, 0x0c, 0x2e, 0x06, 0xa3, 0x6a, 0x4b, 0x4b, // ..0..GY......jKK + 0x6a, 0x4b, 0x71, 0xfe, 0xe2, 0xfe, 0xfb, 0xbd, 0x6f, 0x6f, 0xbd, 0x01, 0x05, 0x01, 0x1e, 0x01, // jKq.....oo...... + 0x05, 0xbd, 0x6f, 0x6f, 0xbd, 0x01, 0x6c, 0x7a, 0xce, 0xfe, 0xe4, 0xfe, 0xc8, 0xfe, 0xe4, 0xce, // ..oo..lz........ + 0x7a, 0x7a, 0xce, 0x01, 0x1c, 0x01, 0x38, 0x01, 0x1c, 0xce, 0xfe, 0x30, 0xfe, 0x94, 0xfe, 0xb4, // zz....8....0.... + 0xf0, 0x8e, 0x8e, 0xf0, 0x01, 0x4c, 0x01, 0x6c, 0x01, 0x4c, 0xf0, 0x8e, 0x8e, 0xf0, 0x00, 0x00, // .....L.l.L...... + 0x00, 0x03, 0x00, 0x44, 0xff, 0x00, 0x05, 0xbb, 0x06, 0x00, 0x00, 0x2f, 0x00, 0x37, 0x00, 0x48, // ...D......./.7.H + 0x00, 0x00, 0x00, 0x16, 0x07, 0x03, 0x0e, 0x01, 0x23, 0x22, 0x27, 0x2e, 0x01, 0x37, 0x13, 0x07, // ........#"'..7.. + 0x16, 0x15, 0x14, 0x07, 0x27, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x07, 0x27, 0x36, 0x37, 0x01, // ....'654&#".'67. + 0x27, 0x07, 0x06, 0x2e, 0x01, 0x36, 0x3f, 0x01, 0x3e, 0x01, 0x17, 0x01, 0x16, 0x17, 0x16, 0x0f, // '....6?.>....... + 0x01, 0x25, 0x02, 0x22, 0x26, 0x34, 0x36, 0x32, 0x16, 0x14, 0x01, 0x32, 0x37, 0x17, 0x06, 0x23, // .%."&462...27..# + 0x22, 0x2e, 0x01, 0x35, 0x34, 0x37, 0x17, 0x06, 0x15, 0x14, 0x16, 0x05, 0x7c, 0x44, 0x05, 0x2c, // "..547......|D., + 0x04, 0x3d, 0x29, 0x06, 0x03, 0x2c, 0x39, 0x03, 0x23, 0x8f, 0x37, 0x94, 0x89, 0x5b, 0xcd, 0x91, // .=)..,9.#.7..[.. + 0x86, 0x66, 0x89, 0x78, 0xa4, 0x01, 0x08, 0x95, 0xb5, 0x21, 0x58, 0x3a, 0x05, 0x20, 0xef, 0x1a, // .f.x.....!X:. .. + 0x44, 0x1e, 0x01, 0xe8, 0x24, 0x0c, 0x11, 0x2b, 0xcd, 0x01, 0x73, 0x29, 0x94, 0x68, 0x68, 0x94, // D...$..+..s).hh. + 0x69, 0xfc, 0xda, 0x6a, 0x5a, 0x8b, 0x92, 0xbd, 0x94, 0xfb, 0x92, 0x74, 0x8b, 0x3c, 0xcd, 0x02, // i..jZ......t.<.. + 0xf6, 0x46, 0x2f, 0xfd, 0xd9, 0x2a, 0x38, 0x01, 0x03, 0x43, 0x2c, 0x01, 0xad, 0x08, 0x71, 0x7f, // .F/..*8..C,...q. + 0xd8, 0x9c, 0x89, 0x65, 0x86, 0x91, 0xce, 0x5c, 0x8a, 0x72, 0x1b, 0x01, 0x2c, 0x57, 0xa1, 0x1e, // ...e.....r..,W.. + 0x05, 0x42, 0x58, 0x1d, 0xd5, 0x17, 0x07, 0x12, 0xfe, 0xe5, 0x15, 0x2f, 0x43, 0x32, 0xe8, 0x14, // .BX......../C2.. + 0x01, 0xa9, 0x68, 0x94, 0x68, 0x68, 0x94, 0xfa, 0xbe, 0x3d, 0x8b, 0x74, 0x92, 0xfa, 0x94, 0xbc, // ..h.hh...=.t.... + 0x94, 0x8b, 0x58, 0x6d, 0x91, 0xcd, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // ..Xm............ + 0x05, 0x80, 0x00, 0x0f, 0x00, 0x3e, 0x00, 0x4e, 0x00, 0x5a, 0x00, 0x00, 0x01, 0x15, 0x14, 0x06, // .....>.N.Z...... + 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x01, 0x14, 0x0e, 0x02, // +."&=.46;.2..... + 0x07, 0x0e, 0x02, 0x1d, 0x01, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x3e, 0x03, // .......+."&=.4>. + 0x37, 0x3e, 0x01, 0x35, 0x34, 0x26, 0x23, 0x22, 0x07, 0x06, 0x07, 0x06, 0x23, 0x22, 0x2f, 0x01, // 7>.54&#"....#"/. + 0x2e, 0x01, 0x37, 0x36, 0x33, 0x32, 0x16, 0x02, 0x20, 0x0e, 0x02, 0x10, 0x1e, 0x02, 0x20, 0x3e, // ..7632.. ..... > + 0x02, 0x10, 0x2e, 0x01, 0x00, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, // ........ $...$ . + 0x03, 0x70, 0x12, 0x0e, 0xa0, 0x0e, 0x12, 0x12, 0x0e, 0xa0, 0x0e, 0x12, 0x01, 0x00, 0x1e, 0x3d, // .p.............= + 0x2b, 0x26, 0x20, 0x1d, 0x17, 0x12, 0x0e, 0xa0, 0x0e, 0x12, 0x15, 0x1b, 0x33, 0x1f, 0x1d, 0x35, // +& .........3..5 + 0x2c, 0x57, 0x34, 0x38, 0x27, 0x1d, 0x33, 0x09, 0x10, 0x0b, 0x08, 0x6c, 0x0a, 0x04, 0x07, 0x7a, // ,W48'.3....l...z + 0xe3, 0x81, 0xdb, 0xee, 0xfe, 0xfc, 0xed, 0xab, 0x66, 0x66, 0xab, 0xed, 0x01, 0x04, 0xed, 0xab, // ........ff...... + 0x66, 0x66, 0xab, 0x01, 0x91, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, // ff.......^.....a + 0x01, 0xa2, 0x01, 0x61, 0x01, 0x50, 0xa0, 0x0e, 0x12, 0x12, 0x0e, 0xa0, 0x0e, 0x12, 0x12, 0x01, // ...a.P.......... + 0xe2, 0x32, 0x50, 0x3a, 0x1e, 0x15, 0x12, 0x14, 0x1c, 0x0f, 0x20, 0x0e, 0x12, 0x12, 0x0e, 0x44, // .2P:...... ....D + 0x23, 0x3b, 0x24, 0x23, 0x10, 0x0d, 0x19, 0x24, 0x1f, 0x2a, 0x3b, 0x1b, 0x14, 0x3f, 0x0c, 0x06, // #;$#...$.*;..?.. + 0x52, 0x07, 0x1a, 0x0a, 0xc0, 0xb3, 0x01, 0x43, 0x66, 0xab, 0xed, 0xfe, 0xfc, 0xed, 0xab, 0x66, // R......Cf......f + 0x66, 0xab, 0xed, 0x01, 0x04, 0xed, 0xab, 0xfe, 0xb7, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, // f.........^..... + 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x00, 0x04, 0x00, 0x27, 0xff, 0x03, 0x05, 0x59, // a...a......'...Y + 0x06, 0x00, 0x00, 0x09, 0x00, 0x3e, 0x00, 0x4f, 0x00, 0x60, 0x00, 0x00, 0x00, 0x22, 0x26, 0x35, // .....>.O.`..."&5 + 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x01, 0x14, 0x06, 0x26, 0x27, 0x01, 0x2e, 0x01, 0x0f, 0x01, // 462......&'..... + 0x06, 0x1f, 0x01, 0x13, 0x03, 0x06, 0x07, 0x06, 0x07, 0x06, 0x27, 0x2e, 0x01, 0x37, 0x36, 0x1b, // ..........'..76. + 0x01, 0x07, 0x17, 0x16, 0x0e, 0x02, 0x0f, 0x01, 0x06, 0x2e, 0x03, 0x35, 0x03, 0x13, 0x36, 0x33, // ...........5..63 + 0x32, 0x17, 0x01, 0x16, 0x1f, 0x01, 0x07, 0x16, 0x05, 0x1e, 0x01, 0x1f, 0x01, 0x16, 0x17, 0x16, // 2............... + 0x07, 0x06, 0x2e, 0x01, 0x27, 0x23, 0x26, 0x27, 0x03, 0x01, 0x16, 0x15, 0x14, 0x07, 0x06, 0x2e, // ....'#&'........ + 0x01, 0x27, 0x26, 0x01, 0x16, 0x36, 0x3f, 0x01, 0x36, 0x35, 0x01, 0xae, 0x80, 0x5c, 0x5c, 0x80, // .'&..6?.65...... + 0x5b, 0x01, 0x8c, 0x3c, 0x43, 0x0e, 0xfe, 0x91, 0x07, 0x0e, 0x04, 0x03, 0x07, 0x0b, 0x7a, 0x01, // [..(....|....... + 0x06, 0x72, 0xfe, 0xcb, 0x03, 0x08, 0x03, 0x03, 0x0b, 0x04, 0xc9, 0x5b, 0x41, 0x40, 0x5b, 0x5b, // .r.........[A@[[ + 0x40, 0x41, 0xfd, 0x23, 0x32, 0x23, 0x16, 0x17, 0x01, 0xb6, 0x0c, 0x07, 0x02, 0x03, 0x08, 0x0d, // @A.#2#.......... + 0x8b, 0xfe, 0x9e, 0xfe, 0x37, 0xc0, 0x2a, 0x1a, 0x06, 0x1a, 0x19, 0x0d, 0x3c, 0x1b, 0x11, 0x02, // ....7.*.....<... + 0x59, 0x01, 0xa0, 0xa4, 0xde, 0x18, 0x24, 0x13, 0x0d, 0x01, 0x02, 0x03, 0x0c, 0x14, 0x18, 0x0f, // Y.....$......... + 0x02, 0x01, 0x2b, 0x01, 0x7d, 0x22, 0x28, 0xfd, 0xf7, 0x05, 0x0c, 0x03, 0x01, 0x0d, 0xa6, 0x71, // ..+.}"(........q + 0xe0, 0x38, 0x37, 0x5d, 0x20, 0x46, 0x1b, 0x16, 0x0c, 0x20, 0x13, 0x10, 0x09, 0x01, 0x5f, 0xfe, // .87] F... ...._. + 0xad, 0x31, 0x08, 0x05, 0x02, 0x05, 0x0b, 0x29, 0x0a, 0xac, 0x01, 0xe9, 0x01, 0x04, 0x02, 0x02, // .1.....)........ + 0x09, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x03, 0x00, 0xe3, 0x09, 0x00, 0x04, 0x1c, 0x00, 0x02, // ................ + 0x00, 0x0b, 0x00, 0x23, 0x00, 0x31, 0x00, 0x4b, 0x00, 0x65, 0x00, 0x7f, 0x00, 0x00, 0x01, 0x33, // ...#.1.K.e.....3 + 0x03, 0x05, 0x34, 0x26, 0x2b, 0x01, 0x11, 0x33, 0x32, 0x36, 0x01, 0x13, 0x14, 0x06, 0x2b, 0x01, // ..4&+..326....+. + 0x22, 0x26, 0x3d, 0x01, 0x21, 0x07, 0x06, 0x23, 0x21, 0x22, 0x26, 0x37, 0x01, 0x36, 0x33, 0x21, // "&=.!..#!"&7.63! + 0x32, 0x16, 0x04, 0x10, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, // 2....#!"&5.463!2 + 0x01, 0x14, 0x0e, 0x03, 0x07, 0x23, 0x3e, 0x03, 0x3f, 0x01, 0x34, 0x2e, 0x03, 0x27, 0x33, 0x1e, // .....#>.?.4..'3. + 0x03, 0x1f, 0x01, 0x14, 0x0e, 0x03, 0x07, 0x23, 0x3e, 0x03, 0x3f, 0x01, 0x34, 0x2e, 0x03, 0x27, // .......#>.?.4..' + 0x33, 0x1e, 0x03, 0x1f, 0x01, 0x14, 0x0e, 0x03, 0x07, 0x23, 0x3e, 0x03, 0x3f, 0x01, 0x34, 0x2e, // 3........#>.?.4. + 0x03, 0x27, 0x33, 0x1e, 0x03, 0x17, 0x01, 0xf8, 0xab, 0x01, 0x03, 0x58, 0x65, 0x60, 0x36, 0x34, // .'3........Xe`64 + 0x5b, 0x6c, 0xfd, 0xc2, 0x01, 0x13, 0x0e, 0xd8, 0x0e, 0x13, 0xfe, 0xdd, 0x37, 0x0a, 0x12, 0xfe, // [l..........7... + 0xf5, 0x15, 0x13, 0x0d, 0x02, 0x2c, 0x09, 0x12, 0x01, 0x4c, 0x0e, 0x14, 0x03, 0x3b, 0xfb, 0xc7, // .....,...L...;.. + 0xfe, 0xf2, 0x0e, 0x14, 0x14, 0x0e, 0x01, 0x0c, 0xc8, 0x01, 0x98, 0x01, 0x0f, 0x1c, 0x3d, 0x2b, // ..............=+ + 0x33, 0x26, 0x39, 0x1a, 0x10, 0x01, 0x01, 0x01, 0x0e, 0x1a, 0x38, 0x26, 0x2b, 0x29, 0x3e, 0x1d, // 3&9.......8&+)>. + 0x11, 0x02, 0xb9, 0x01, 0x0f, 0x1c, 0x3e, 0x2b, 0x33, 0x26, 0x39, 0x1a, 0x10, 0x01, 0x01, 0x01, // ......>+3&9..... + 0x0e, 0x19, 0x38, 0x26, 0x2b, 0x29, 0x3e, 0x1d, 0x11, 0x02, 0xb6, 0x01, 0x0f, 0x1c, 0x3d, 0x2b, // ..8&+)>.......=+ + 0x33, 0x26, 0x38, 0x1a, 0x10, 0x01, 0x01, 0x01, 0x0e, 0x19, 0x38, 0x26, 0x2b, 0x29, 0x3e, 0x1d, // 3&8.......8&+)>. + 0x11, 0x01, 0x02, 0x1e, 0x01, 0x09, 0xa6, 0x57, 0x6a, 0xfe, 0x7c, 0x72, 0x01, 0xca, 0xfd, 0x0c, // .......Wj.|r.... + 0x0e, 0x14, 0x14, 0x0e, 0x3e, 0x51, 0x0f, 0x24, 0x11, 0x02, 0xf5, 0x0e, 0x14, 0xc6, 0xfe, 0x7e, // ....>Q.$.......~ + 0xdc, 0x14, 0x0e, 0x02, 0xf4, 0x0e, 0x14, 0xfe, 0x64, 0x0b, 0x24, 0x6b, 0x61, 0x77, 0x2b, 0x2d, // ........d.$kaw+- + 0x77, 0x69, 0x5b, 0x1b, 0x1b, 0x08, 0x1d, 0x5b, 0x5c, 0x83, 0x3b, 0x2f, 0x78, 0x67, 0x59, 0x1a, // wi[....[..;/xgY. + 0x1a, 0x0b, 0x24, 0x6b, 0x61, 0x77, 0x2b, 0x2d, 0x77, 0x69, 0x5b, 0x1b, 0x1b, 0x08, 0x1d, 0x5b, // ..$kaw+-wi[....[ + 0x5c, 0x83, 0x3b, 0x2f, 0x78, 0x67, 0x59, 0x1a, 0x1a, 0x0b, 0x24, 0x6b, 0x61, 0x77, 0x2b, 0x2d, // ..;/xgY...$kaw+- + 0x77, 0x69, 0x5b, 0x1b, 0x1b, 0x08, 0x1d, 0x5b, 0x5c, 0x83, 0x3b, 0x2f, 0x78, 0x67, 0x59, 0x1a, // wi[....[..;/xgY. + 0x00, 0x04, 0x00, 0x00, 0xff, 0x00, 0x05, 0x80, 0x05, 0xf2, 0x00, 0x4a, 0x00, 0x5c, 0x00, 0x6d, // ...........J...m + 0x00, 0x82, 0x00, 0x00, 0x05, 0x34, 0x2e, 0x01, 0x27, 0x2e, 0x02, 0x27, 0x26, 0x23, 0x22, 0x06, // .....4..'..'&#". + 0x23, 0x22, 0x27, 0x2e, 0x03, 0x27, 0x26, 0x34, 0x37, 0x3e, 0x03, 0x37, 0x36, 0x33, 0x32, 0x16, // #"'..'&47>.7632. + 0x33, 0x32, 0x37, 0x3e, 0x02, 0x37, 0x3e, 0x02, 0x35, 0x34, 0x26, 0x27, 0x26, 0x23, 0x22, 0x07, // 327>.7>.54&'&#". + 0x0e, 0x03, 0x07, 0x06, 0x07, 0x0e, 0x01, 0x10, 0x16, 0x17, 0x16, 0x17, 0x16, 0x17, 0x16, 0x17, // ................ + 0x16, 0x33, 0x32, 0x37, 0x3e, 0x01, 0x13, 0x22, 0x26, 0x34, 0x37, 0x36, 0x35, 0x34, 0x27, 0x26, // .327>.."&47654'& + 0x34, 0x36, 0x32, 0x17, 0x16, 0x14, 0x07, 0x06, 0x16, 0x22, 0x27, 0x26, 0x34, 0x37, 0x36, 0x10, // 462......"'&476. + 0x27, 0x26, 0x34, 0x36, 0x32, 0x17, 0x16, 0x10, 0x07, 0x16, 0x22, 0x27, 0x26, 0x34, 0x37, 0x3e, // '&462....."'&47> + 0x01, 0x10, 0x26, 0x27, 0x26, 0x34, 0x36, 0x32, 0x17, 0x16, 0x12, 0x10, 0x02, 0x07, 0x02, 0x69, // ..&'&462.......i + 0x1a, 0x24, 0x02, 0x01, 0x08, 0x09, 0x09, 0x0f, 0x24, 0x17, 0x5e, 0x18, 0x22, 0x0d, 0x06, 0x0a, // .$......$.^."... + 0x05, 0x08, 0x01, 0x25, 0x25, 0x01, 0x08, 0x05, 0x0a, 0x06, 0x0d, 0x22, 0x18, 0x5e, 0x17, 0x24, // ...%%......".^.$ + 0x0f, 0x09, 0x09, 0x08, 0x01, 0x02, 0x24, 0x1a, 0x57, 0x20, 0x14, 0x19, 0x22, 0x40, 0x39, 0x4f, // ......$.W .."@9O + 0x3f, 0x1d, 0x1f, 0x06, 0x03, 0x31, 0x26, 0x26, 0x31, 0x38, 0x1b, 0x3f, 0x74, 0x03, 0x03, 0x40, // ?....1&&18.?t..@ + 0x22, 0x19, 0x14, 0x20, 0x57, 0x9f, 0x1a, 0x26, 0x13, 0x25, 0x25, 0x13, 0x26, 0x34, 0x13, 0x4b, // ".. W..&.%%.&4.K + 0x4b, 0x15, 0xb8, 0x36, 0x12, 0x13, 0x13, 0x70, 0x70, 0x13, 0x26, 0x34, 0x13, 0x96, 0x96, 0xa3, // K..6...pp.&4.... + 0x36, 0x12, 0x13, 0x13, 0x5a, 0x61, 0x61, 0x5a, 0x13, 0x26, 0x34, 0x13, 0x6d, 0x74, 0x74, 0x6d, // 6...ZaaZ.&4.mttm + 0x99, 0x0b, 0x5e, 0x78, 0x09, 0x04, 0x2d, 0x1b, 0x08, 0x0e, 0x0b, 0x0b, 0x05, 0x15, 0x13, 0x1d, // ..^x..-......... + 0x04, 0x80, 0xfe, 0x80, 0x04, 0x1d, 0x13, 0x15, 0x05, 0x0b, 0x0b, 0x0e, 0x08, 0x1b, 0x2d, 0x04, // ..............-. + 0x09, 0x78, 0x5e, 0x0b, 0x16, 0x3d, 0x0c, 0x08, 0x12, 0x11, 0x2f, 0x55, 0x37, 0x43, 0x0c, 0x07, // .x^..=..../U7C.. + 0x6b, 0xda, 0xfe, 0xf2, 0xda, 0x6b, 0x7a, 0x27, 0x5b, 0x24, 0x01, 0x01, 0x12, 0x08, 0x0c, 0x3d, // k....kz'[$.....= + 0x03, 0xa7, 0x26, 0x35, 0x13, 0x25, 0x35, 0x34, 0x27, 0x13, 0x34, 0x26, 0x13, 0x4b, 0xd4, 0x4b, // ..&5.%54'.4&.K.K + 0x13, 0xb5, 0x13, 0x13, 0x34, 0x13, 0x72, 0x01, 0x3c, 0x72, 0x13, 0x34, 0x26, 0x13, 0x96, 0xfe, // ....4.r.. + 0x37, 0x3e, 0x02, 0x35, 0x34, 0x00, 0x20, 0x00, 0x15, 0x14, 0x06, 0x22, 0x26, 0x35, 0x34, 0x3e, // 7>.54. ...."&54> + 0x02, 0x32, 0x1e, 0x02, 0x04, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x25, 0x14, 0x06, 0x22, // .2....."&462%.." + 0x26, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x06, 0x22, 0x26, 0x35, 0x34, 0x36, 0x20, // &54&#"...."&546 + 0x16, 0x25, 0x16, 0x06, 0x07, 0x06, 0x23, 0x22, 0x26, 0x27, 0x26, 0x27, 0x2e, 0x01, 0x37, 0x3e, // .%....#"&'&'..7> + 0x01, 0x17, 0x16, 0x05, 0x16, 0x06, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x27, 0x2e, 0x01, 0x37, // ........#"'&'..7 + 0x3e, 0x01, 0x17, 0x16, 0x80, 0x26, 0x34, 0x26, 0x26, 0x34, 0xe6, 0x26, 0x34, 0x26, 0x26, 0x34, // >....&4&&4.&4&&4 + 0x53, 0x01, 0x00, 0x5a, 0xff, 0x00, 0x01, 0xad, 0x26, 0x34, 0x26, 0x26, 0x34, 0x02, 0xe9, 0x17, // S..Z....&4&&4... + 0x34, 0x24, 0x23, 0x1f, 0x1d, 0x26, 0x0f, 0xe1, 0x9f, 0x1a, 0x26, 0x26, 0x1a, 0x6a, 0x96, 0x17, // 4$#..&....&&.j.. + 0x33, 0x24, 0x22, 0x28, 0x27, 0x24, 0xfe, 0xf9, 0xfe, 0x8e, 0xfe, 0xf9, 0x26, 0x34, 0x26, 0x5b, // 3$"('$......&4&[ + 0x9b, 0xd5, 0xea, 0xd5, 0x9b, 0x5b, 0xfd, 0xfd, 0x26, 0x34, 0x26, 0x26, 0x34, 0x01, 0x46, 0x26, // .....[..&4&&4.F& + 0x34, 0x26, 0x83, 0x5d, 0x5c, 0x84, 0x26, 0x34, 0x26, 0xce, 0x01, 0x24, 0xce, 0x01, 0x8a, 0x0a, // 4&.]..&4&..$.... + 0x16, 0x19, 0x09, 0x0e, 0x13, 0x21, 0x07, 0x44, 0x9c, 0x15, 0x08, 0x10, 0x11, 0x34, 0x15, 0xb7, // .....!.D.....4.. + 0x01, 0x25, 0x09, 0x15, 0x19, 0x0b, 0x0c, 0x2c, 0x10, 0x5c, 0xcd, 0x16, 0x07, 0x10, 0x10, 0x34, // .%.....,.......4 + 0x15, 0xeb, 0xa6, 0x34, 0x26, 0x26, 0x34, 0x26, 0x9a, 0x34, 0x26, 0x26, 0x34, 0x26, 0x01, 0x2d, // ...4&&4&.4&&4&.- + 0xff, 0x00, 0x5a, 0x01, 0x00, 0x87, 0x34, 0x26, 0x26, 0x34, 0x26, 0x01, 0x00, 0x3b, 0x63, 0x58, // ..Z...4&&4&..;cX + 0x2f, 0x29, 0x23, 0x26, 0x3e, 0x42, 0x29, 0x9f, 0xe1, 0x26, 0x34, 0x26, 0x96, 0x6a, 0x39, 0x61, // /)#&>B)..&4&.j9a + 0x55, 0x30, 0x27, 0x2e, 0x34, 0x61, 0x37, 0xb9, 0x01, 0x07, 0xfe, 0xf9, 0xb9, 0x1a, 0x26, 0x26, // U0'.4a7.......&& + 0x1a, 0x75, 0xd5, 0x9b, 0x5b, 0x5b, 0x9b, 0xd5, 0xdb, 0x34, 0x26, 0x26, 0x34, 0x26, 0x40, 0x1a, // .u..[[...4&&4&@. + 0x26, 0x26, 0x1a, 0x5d, 0x83, 0x83, 0x5d, 0x1a, 0x26, 0x26, 0x1a, 0x92, 0xce, 0xce, 0x8f, 0x19, // &&.]..].&&...... + 0x30, 0x0a, 0x04, 0x16, 0x13, 0xb2, 0x75, 0x10, 0x34, 0x15, 0x15, 0x08, 0x10, 0x89, 0x85, 0x19, // 0.....u.4....... + 0x30, 0x0a, 0x04, 0x29, 0xee, 0x9b, 0x10, 0x34, 0x15, 0x16, 0x07, 0x10, 0xaf, 0x00, 0x00, 0x00, // 0..)...4........ + 0x00, 0x04, 0x00, 0x03, 0xff, 0x00, 0x08, 0xfd, 0x06, 0x00, 0x00, 0x11, 0x00, 0x23, 0x00, 0x67, // .............#.g + 0x00, 0xb0, 0x00, 0x00, 0x01, 0x26, 0x27, 0x2e, 0x01, 0x23, 0x22, 0x06, 0x15, 0x14, 0x1f, 0x01, // .....&'..#"..... + 0x16, 0x33, 0x32, 0x36, 0x37, 0x36, 0x25, 0x34, 0x2f, 0x01, 0x26, 0x23, 0x22, 0x06, 0x07, 0x06, // .32676%4/.&#"... + 0x07, 0x16, 0x17, 0x1e, 0x01, 0x33, 0x32, 0x36, 0x01, 0x0e, 0x01, 0x27, 0x26, 0x23, 0x22, 0x07, // .....326...'&#". + 0x32, 0x36, 0x33, 0x32, 0x16, 0x17, 0x16, 0x06, 0x07, 0x06, 0x23, 0x32, 0x17, 0x1e, 0x01, 0x07, // 2632......#2.... + 0x0e, 0x01, 0x2b, 0x01, 0x26, 0x27, 0x25, 0x07, 0x06, 0x23, 0x22, 0x27, 0x03, 0x26, 0x36, 0x3f, // ..+.&'%..#"'.&6? + 0x01, 0x13, 0x36, 0x12, 0x37, 0x36, 0x1e, 0x01, 0x06, 0x07, 0x06, 0x07, 0x36, 0x37, 0x36, 0x16, // ..6.76......676. + 0x17, 0x16, 0x06, 0x07, 0x06, 0x07, 0x36, 0x33, 0x32, 0x17, 0x1e, 0x01, 0x25, 0x13, 0x16, 0x06, // ......632...%... + 0x0f, 0x01, 0x03, 0x06, 0x02, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x36, 0x37, 0x36, 0x37, 0x06, // .......#"'&6767. + 0x07, 0x06, 0x23, 0x22, 0x26, 0x27, 0x26, 0x36, 0x37, 0x36, 0x37, 0x06, 0x23, 0x22, 0x27, 0x2e, // ..#"&'&6767.#"'. + 0x01, 0x37, 0x3e, 0x01, 0x17, 0x16, 0x33, 0x32, 0x37, 0x22, 0x06, 0x23, 0x22, 0x26, 0x27, 0x26, // .7>...327".#"&'& + 0x36, 0x37, 0x36, 0x33, 0x22, 0x27, 0x2e, 0x01, 0x37, 0x3e, 0x01, 0x3b, 0x02, 0x16, 0x17, 0x05, // 6763"'..7>.;.... + 0x37, 0x36, 0x33, 0x32, 0x04, 0x08, 0x3b, 0x19, 0x11, 0x3e, 0x25, 0x35, 0x4b, 0x24, 0x0a, 0x22, // 7632..;..>%5K$." + 0x30, 0x25, 0x3e, 0x11, 0x19, 0x02, 0x73, 0x24, 0x0a, 0x22, 0x30, 0x25, 0x3e, 0x11, 0x19, 0x3b, // 0%>...s$."0%>..; + 0x3b, 0x19, 0x11, 0x3e, 0x25, 0x35, 0x4b, 0xfe, 0x56, 0x11, 0x4c, 0x23, 0x3e, 0x48, 0x33, 0x30, // ;..>%5K.V.L#>H30 + 0x03, 0x0d, 0x03, 0x5c, 0x9d, 0x28, 0x11, 0x1b, 0x24, 0x12, 0x15, 0x15, 0x12, 0x24, 0x1b, 0x11, // .....(..$....$.. + 0x28, 0x9d, 0x5c, 0x06, 0x10, 0x1c, 0xfe, 0xde, 0xef, 0x0e, 0x0f, 0x28, 0x11, 0xa0, 0x0b, 0x0e, // (..........(.... + 0x16, 0xd1, 0x94, 0x11, 0x95, 0x79, 0x1f, 0x4f, 0x32, 0x07, 0x1f, 0x46, 0x2f, 0x7b, 0x90, 0x28, // .....y.O2..F/{.( + 0x3f, 0x04, 0x05, 0x30, 0x28, 0x54, 0x4b, 0x2e, 0x35, 0x73, 0x67, 0x24, 0x1a, 0x03, 0xb1, 0xa0, // ?..0(TK.5sg$.... + 0x0b, 0x0e, 0x16, 0xd1, 0x94, 0x11, 0x95, 0x79, 0x1a, 0x23, 0x2d, 0x1d, 0x19, 0x07, 0x1f, 0x46, // .......y.#-....F + 0x2f, 0x7b, 0x90, 0x04, 0x08, 0x24, 0x37, 0x04, 0x05, 0x30, 0x28, 0x54, 0x4b, 0x2e, 0x35, 0x73, // /{...$7..0(TK.5s + 0x67, 0x24, 0x1a, 0x12, 0x11, 0x4c, 0x23, 0x3e, 0x48, 0x33, 0x30, 0x03, 0x0d, 0x03, 0x5c, 0x9d, // g$...L#>H30..... + 0x28, 0x11, 0x1b, 0x24, 0x12, 0x15, 0x15, 0x12, 0x24, 0x1b, 0x11, 0x28, 0x9d, 0x5c, 0x06, 0x01, // (..$....$..(.... + 0x0e, 0x1c, 0x01, 0x23, 0xef, 0x0e, 0x0f, 0x28, 0x02, 0x40, 0x02, 0x35, 0x22, 0x27, 0x4b, 0x35, // ...#...(.@.5"'K5 + 0x38, 0x21, 0x08, 0x1f, 0x27, 0x22, 0x35, 0x82, 0x38, 0x21, 0x08, 0x1f, 0x27, 0x22, 0x35, 0x02, // 8!..'"5.8!..'"5. + 0x02, 0x35, 0x22, 0x27, 0x4b, 0x01, 0x12, 0x23, 0x1a, 0x11, 0x1f, 0x11, 0x01, 0x64, 0x53, 0x24, // .5"'K..#.....dS$ + 0x4b, 0x11, 0x09, 0x09, 0x11, 0x4b, 0x24, 0x53, 0x64, 0x02, 0x02, 0x1b, 0x78, 0x07, 0x23, 0x01, // K....K$Sd...x.#. + 0x40, 0x17, 0x31, 0x0d, 0x77, 0x01, 0x0b, 0x9b, 0x01, 0x11, 0x64, 0x19, 0x07, 0x3e, 0x4e, 0x1a, // @.1.w.....d..>N. + 0x3b, 0x45, 0x54, 0x11, 0x05, 0x30, 0x28, 0x28, 0x3f, 0x04, 0x0a, 0x2d, 0x0a, 0x32, 0x12, 0x4b, // ;ET..0((?..-.2.K + 0x7c, 0xfe, 0xc0, 0x17, 0x31, 0x0d, 0x77, 0xfe, 0xf5, 0x9b, 0xfe, 0xef, 0x64, 0x16, 0x23, 0x1f, // |...1.w.....d.#. + 0x4e, 0x1a, 0x3b, 0x45, 0x54, 0x11, 0x01, 0x30, 0x24, 0x28, 0x3f, 0x04, 0x0a, 0x2d, 0x0a, 0x32, // N.;ET..0$(?..-.2 + 0x12, 0x4b, 0x24, 0x23, 0x1a, 0x11, 0x1f, 0x11, 0x01, 0x64, 0x53, 0x24, 0x4b, 0x11, 0x09, 0x09, // .K$#.....dS$K... + 0x11, 0x4b, 0x24, 0x53, 0x64, 0x02, 0x02, 0x1b, 0x78, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, // .K$Sd...x....... + 0xff, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x13, 0x00, 0x44, 0x00, 0x4e, 0x00, 0x5c, 0x00, 0x00, // .........D.N.... + 0x01, 0x14, 0x16, 0x32, 0x36, 0x35, 0x34, 0x26, 0x20, 0x06, 0x15, 0x14, 0x16, 0x32, 0x36, 0x35, // ...2654& ....265 + 0x34, 0x36, 0x32, 0x16, 0x02, 0x22, 0x0e, 0x02, 0x15, 0x14, 0x16, 0x32, 0x36, 0x35, 0x34, 0x00, // 462..".....2654. + 0x20, 0x00, 0x15, 0x14, 0x0e, 0x01, 0x07, 0x0e, 0x03, 0x15, 0x14, 0x06, 0x23, 0x22, 0x06, 0x14, // ...........#".. + 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x3e, 0x02, 0x37, 0x3e, 0x03, 0x35, 0x34, 0x2e, 0x01, 0x01, // .32654>.7>.54... + 0x17, 0x01, 0x06, 0x22, 0x2f, 0x01, 0x26, 0x34, 0x37, 0x01, 0x17, 0x16, 0x14, 0x0f, 0x03, 0x26, // ..."/.&47......& + 0x27, 0x3f, 0x01, 0x36, 0x32, 0x04, 0x20, 0x26, 0x34, 0x26, 0xce, 0xfe, 0xdc, 0xce, 0x26, 0x34, // '?.62. &4&....&4 + 0x26, 0x84, 0xb8, 0x84, 0x68, 0xea, 0xd5, 0x9b, 0x5b, 0x26, 0x34, 0x26, 0x01, 0x07, 0x01, 0x72, // &...h...[&4&...r + 0x01, 0x07, 0x24, 0x27, 0x28, 0x22, 0x24, 0x33, 0x17, 0x96, 0x6a, 0x1a, 0x26, 0x26, 0x1a, 0x9f, // ..$'("$3..j.&&.. + 0xe1, 0x0f, 0x26, 0x1d, 0x1f, 0x23, 0x24, 0x34, 0x17, 0x5b, 0x9b, 0xfd, 0xc2, 0xe2, 0xfd, 0xbd, // ..&..#$4.[...... + 0x0c, 0x22, 0x0c, 0xa8, 0x0c, 0x0c, 0x06, 0x40, 0xa8, 0x0c, 0x0c, 0xe9, 0x1a, 0x47, 0x42, 0x81, // .".....@.....GB. + 0x5b, 0xcf, 0x0d, 0x22, 0x02, 0xc0, 0x1a, 0x26, 0x26, 0x1a, 0x92, 0xce, 0xce, 0x92, 0x1a, 0x26, // [.."...&&......& + 0x26, 0x1a, 0x5d, 0x83, 0x83, 0x01, 0xe3, 0x5b, 0x9b, 0xd5, 0x75, 0x1a, 0x26, 0x26, 0x1a, 0xb9, // &.]....[..u.&&.. + 0x01, 0x07, 0xfe, 0xf9, 0xb9, 0x37, 0x61, 0x34, 0x2e, 0x27, 0x30, 0x55, 0x61, 0x39, 0x6a, 0x96, // .....7a4.'0Ua9j. + 0x26, 0x34, 0x26, 0xe1, 0x9f, 0x29, 0x42, 0x3e, 0x26, 0x23, 0x29, 0x2f, 0x58, 0x63, 0x3b, 0x75, // &4&..)B>&#)/Xc;u + 0xd5, 0x9b, 0xfd, 0x8c, 0xe2, 0xfd, 0xbd, 0x0c, 0x0c, 0xa8, 0x0c, 0x22, 0x0c, 0x06, 0x06, 0xa8, // ...........".... + 0x0c, 0x22, 0x0d, 0xe9, 0x19, 0x47, 0x99, 0x69, 0x5b, 0xcf, 0x0c, 0x00, 0x00, 0x03, 0x00, 0x00, // ."...G.i[....... + 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x14, 0x00, 0x58, 0x00, 0x68, 0x00, 0x00, 0x01, 0x14, // .........X.h.... + 0x07, 0x0e, 0x01, 0x07, 0x0e, 0x01, 0x07, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x37, 0x36, // ........#"&54676 + 0x33, 0x32, 0x16, 0x01, 0x34, 0x26, 0x27, 0x26, 0x23, 0x22, 0x07, 0x27, 0x3e, 0x01, 0x35, 0x34, // 32..4&'&#".'>.54 + 0x23, 0x22, 0x07, 0x0e, 0x02, 0x15, 0x14, 0x16, 0x33, 0x32, 0x14, 0x07, 0x06, 0x07, 0x0e, 0x01, // #"......32...... + 0x23, 0x22, 0x35, 0x34, 0x3e, 0x03, 0x35, 0x34, 0x27, 0x2e, 0x01, 0x23, 0x22, 0x0e, 0x01, 0x15, // #"54>.54'..#"... + 0x14, 0x16, 0x33, 0x32, 0x3e, 0x01, 0x37, 0x3e, 0x01, 0x37, 0x36, 0x37, 0x36, 0x33, 0x32, 0x17, // ..32>.7>.767632. + 0x16, 0x33, 0x32, 0x36, 0x13, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, // .326....#!"&5.46 + 0x33, 0x21, 0x32, 0x16, 0x03, 0x62, 0x0d, 0x0b, 0x29, 0x0a, 0x02, 0x05, 0x0b, 0x14, 0x0b, 0x3a, // 3!2..b..)......: + 0x34, 0x46, 0x44, 0x1c, 0x17, 0x1c, 0x11, 0x01, 0xe6, 0x4e, 0x0d, 0x15, 0x0d, 0x5b, 0x87, 0x02, // 4FD......N...[.. + 0x03, 0x31, 0xf2, 0x18, 0x2c, 0x5e, 0x95, 0x4a, 0xa1, 0x93, 0x19, 0x01, 0x04, 0x16, 0x0e, 0x4b, // .1..,^.J.......K + 0x2d, 0x2a, 0x15, 0x1d, 0x1e, 0x16, 0x07, 0x18, 0x45, 0x1f, 0x23, 0x39, 0x19, 0x67, 0x57, 0x52, // -*......E.#9.gWR + 0x92, 0x59, 0x15, 0x06, 0x13, 0x05, 0x03, 0x0b, 0x76, 0x6d, 0x30, 0x4f, 0x01, 0x03, 0x05, 0x09, // .Y......vm0O.... + 0xb8, 0xa9, 0x77, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0x03, 0xfd, 0x1b, // ..w.@w..w..w.... + 0x43, 0x32, 0xc8, 0x32, 0x0b, 0x03, 0x01, 0x02, 0x63, 0x40, 0x58, 0xac, 0x26, 0x0e, 0x21, 0xfe, // C2.2....c@X.&.!. + 0x39, 0x0e, 0x7b, 0x05, 0x08, 0x4d, 0x02, 0x16, 0xe2, 0x41, 0xe9, 0x06, 0x11, 0x91, 0xbc, 0x5f, // 9.{..M...A....._ + 0x92, 0x9e, 0x06, 0x02, 0x22, 0x53, 0x34, 0x62, 0x2f, 0x18, 0x2f, 0x20, 0x19, 0x0f, 0x01, 0x03, // ...."S4b/./ .... + 0x07, 0x16, 0x1d, 0x44, 0x52, 0x22, 0x58, 0x6c, 0x6a, 0x92, 0x50, 0x16, 0x59, 0x16, 0x0c, 0x06, // ...DR"Xlj.P.Y... + 0x3c, 0x12, 0x01, 0x09, 0x02, 0x0f, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, // <......@w..w..w. + 0xa9, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x25, 0xff, 0x00, 0x05, 0xda, 0x05, 0xff, 0x00, 0x19, // .......%........ + 0x00, 0x65, 0x00, 0x00, 0x01, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x07, 0x06, 0x02, 0x15, 0x14, 0x1e, // .e...4..#"...... + 0x02, 0x33, 0x32, 0x16, 0x3e, 0x02, 0x37, 0x36, 0x12, 0x37, 0x36, 0x01, 0x14, 0x06, 0x23, 0x27, // .32.>.76.76...#' + 0x2e, 0x02, 0x23, 0x22, 0x07, 0x06, 0x07, 0x0e, 0x01, 0x07, 0x0e, 0x03, 0x23, 0x22, 0x26, 0x35, // ..#"........#"&5 + 0x34, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x17, 0x14, 0x0e, 0x03, 0x15, 0x14, 0x16, 0x33, 0x32, 0x3e, // 4>.32........32> + 0x03, 0x37, 0x35, 0x34, 0x26, 0x2a, 0x01, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x3e, 0x02, 0x37, // .754&*..#"&54>.7 + 0x36, 0x33, 0x20, 0x11, 0x14, 0x02, 0x07, 0x17, 0x3e, 0x01, 0x33, 0x32, 0x17, 0x1e, 0x01, 0x02, // 63 .....>.32.... + 0xe8, 0x04, 0x0d, 0x1d, 0x17, 0x27, 0x27, 0x69, 0x6c, 0x11, 0x24, 0x45, 0x2f, 0x04, 0x1c, 0x0c, // .....''il.$E/... + 0x14, 0x0a, 0x02, 0x10, 0x40, 0x10, 0x13, 0x02, 0xf2, 0x0f, 0x08, 0x06, 0x16, 0x50, 0x40, 0x1f, // ....@........P@. + 0xa7, 0xb8, 0x0f, 0x06, 0x0a, 0x1d, 0x08, 0x17, 0x5e, 0x83, 0xb2, 0x60, 0x87, 0x9f, 0x27, 0x57, // ........^..`..'W + 0x36, 0x26, 0xa4, 0x01, 0x21, 0x2e, 0x2e, 0x20, 0x21, 0x20, 0x2d, 0x50, 0x35, 0x2b, 0x16, 0x05, // 6&..!.. ! -P5+.. + 0x07, 0x0a, 0x0a, 0x0a, 0x01, 0xe3, 0xfa, 0x45, 0x7b, 0xbd, 0x6e, 0x34, 0x36, 0x01, 0x76, 0x4c, // .......E{.n46.vL + 0x05, 0x03, 0x65, 0xa3, 0x56, 0x16, 0x1f, 0x13, 0x7a, 0x04, 0xcf, 0x18, 0x1d, 0x1f, 0x0f, 0x17, // ..e.V...z....... + 0x3a, 0xfe, 0xf7, 0x89, 0x2c, 0x53, 0x4e, 0x2f, 0x01, 0x01, 0x05, 0x0c, 0x0a, 0x4d, 0x01, 0x35, // :...,SN/.....M.5 + 0x4d, 0x5b, 0xfd, 0xa7, 0x07, 0x0d, 0x01, 0x03, 0x10, 0x09, 0x5d, 0x08, 0x13, 0x24, 0x8b, 0x1f, // M[........]..$.. + 0x5b, 0xb1, 0x98, 0x5e, 0xa7, 0x88, 0x35, 0x80, 0x69, 0x43, 0x1c, 0x01, 0x17, 0x27, 0x32, 0x48, // [..^..5.iC...'2H + 0x26, 0x21, 0x28, 0x3f, 0x5d, 0x76, 0x60, 0x2a, 0x09, 0x02, 0x03, 0x01, 0xf5, 0xe2, 0x6c, 0xe2, // &!(?]v`*......l. + 0xc2, 0x8d, 0x13, 0x09, 0xfe, 0x98, 0x62, 0xfe, 0xa2, 0x24, 0x03, 0x39, 0x3e, 0x0d, 0x07, 0xbf, // ......b..$.9>... + 0x00, 0x03, 0x00, 0x01, 0xff, 0x00, 0x06, 0x7f, 0x05, 0xfb, 0x00, 0x3d, 0x00, 0x52, 0x00, 0x87, // ...........=.R.. + 0x00, 0x00, 0x01, 0x32, 0x1f, 0x01, 0x16, 0x1f, 0x01, 0x16, 0x07, 0x03, 0x0e, 0x01, 0x07, 0x0d, // ...2............ + 0x01, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x37, 0x25, 0x21, 0x22, 0x26, 0x37, 0x3e, 0x01, 0x33, // .#"&5467%!"&7>.3 + 0x2d, 0x01, 0x2e, 0x01, 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x05, 0x25, 0x2e, 0x01, 0x37, 0x3e, 0x01, // -...7>.;..%..7>. + 0x33, 0x32, 0x17, 0x05, 0x17, 0x32, 0x16, 0x33, 0x32, 0x36, 0x2f, 0x01, 0x2e, 0x01, 0x37, 0x36, // 32...2.326/...76 + 0x07, 0x17, 0x2f, 0x02, 0x03, 0x2e, 0x01, 0x27, 0x26, 0x36, 0x37, 0x36, 0x16, 0x1f, 0x01, 0x0e, // ../....'&676.... + 0x01, 0x07, 0x06, 0x16, 0x01, 0x13, 0x16, 0x0f, 0x01, 0x06, 0x0f, 0x01, 0x36, 0x2f, 0x01, 0x26, // ............6/.& + 0x2f, 0x01, 0x26, 0x23, 0x22, 0x07, 0x03, 0x26, 0x36, 0x37, 0x36, 0x16, 0x17, 0x09, 0x01, 0x26, // /.&#"..&676....& + 0x36, 0x37, 0x36, 0x16, 0x17, 0x13, 0x03, 0x26, 0x36, 0x37, 0x36, 0x16, 0x17, 0x13, 0x17, 0x1e, // 676....&676..... + 0x01, 0x36, 0x2f, 0x01, 0x26, 0x36, 0x37, 0x32, 0x16, 0x03, 0x3f, 0x20, 0x1b, 0xde, 0x3d, 0x31, // .6/.&672..? ..=1 + 0x92, 0x28, 0x0b, 0x48, 0x06, 0x2f, 0x20, 0xfd, 0xf1, 0xfe, 0xa0, 0x09, 0x27, 0x39, 0x36, 0x26, // .(.H./ .....'96& + 0x01, 0x04, 0xfe, 0x40, 0x29, 0x39, 0x02, 0x02, 0x3c, 0x27, 0x01, 0xba, 0xfd, 0xf7, 0x29, 0x32, // ...@)9..<'....)2 + 0x06, 0x06, 0x39, 0x25, 0x0a, 0x01, 0xe1, 0xfe, 0xa1, 0x26, 0x30, 0x06, 0x06, 0x36, 0x23, 0x06, // ..9%.....&0..6#. + 0x0e, 0x01, 0xc0, 0xd9, 0x01, 0x04, 0x01, 0x17, 0x0f, 0x14, 0xba, 0x23, 0x0e, 0x19, 0x1b, 0x15, // ...........#.... + 0xba, 0xda, 0x05, 0x24, 0xee, 0x01, 0x03, 0x01, 0x18, 0x0b, 0x20, 0x1f, 0x4a, 0x1b, 0x8e, 0x02, // ...$...... .J... + 0x06, 0x01, 0x20, 0x12, 0x03, 0xa5, 0x0f, 0x04, 0x0f, 0x30, 0x0c, 0x37, 0x6a, 0x02, 0x29, 0x92, // .. ......0.7j.). + 0x35, 0x40, 0xde, 0x22, 0x2a, 0x33, 0x25, 0xeb, 0x19, 0x0e, 0x22, 0x21, 0x4d, 0x18, 0x01, 0x0a, // 5@."*3%..."!M... + 0xfe, 0xfa, 0x15, 0x15, 0x25, 0x23, 0x4b, 0x14, 0xf1, 0x88, 0x0f, 0x15, 0x22, 0x25, 0x4e, 0x11, // ....%#K....."%N. + 0xc1, 0x65, 0x08, 0x1e, 0x18, 0x01, 0x0c, 0x02, 0x38, 0x29, 0x27, 0x38, 0x03, 0x5f, 0x12, 0x94, // .e......8)'8._.. + 0x28, 0x39, 0xaa, 0x2e, 0x3c, 0xfe, 0x63, 0x20, 0x2b, 0x04, 0x38, 0x20, 0x38, 0x28, 0x25, 0x36, // (9..<.c +.8 8(%6 + 0x05, 0x20, 0x3c, 0x29, 0x27, 0x34, 0x01, 0x40, 0x05, 0x40, 0x29, 0x23, 0x2d, 0x3c, 0x5e, 0x0a, // . <)'4.@.@)#-<^. + 0x3f, 0x25, 0x24, 0x2d, 0x02, 0x60, 0x25, 0x01, 0x2e, 0x0d, 0x7d, 0x17, 0x51, 0x21, 0x26, 0xca, // ?%$-.`%...}.Q!&. + 0x7d, 0x25, 0x02, 0x26, 0x01, 0x06, 0x01, 0x05, 0x01, 0x1f, 0x4e, 0x19, 0x17, 0x0b, 0x1c, 0x93, // }%.&......N..... + 0x01, 0x05, 0x02, 0x2d, 0x6c, 0x01, 0xa7, 0xfe, 0xf6, 0x49, 0x4a, 0xdb, 0x3b, 0x1c, 0x36, 0x3e, // ...-l....IJ.;.6> + 0x2f, 0xaa, 0x3d, 0x2a, 0x94, 0x17, 0x25, 0x01, 0x38, 0x21, 0x51, 0x17, 0x16, 0x10, 0x20, 0xfe, // /.=*..%.8!Q... . + 0xa0, 0x01, 0xc7, 0x23, 0x50, 0x13, 0x12, 0x18, 0x22, 0xfe, 0x5c, 0x01, 0x51, 0x23, 0x4e, 0x11, // ...#P..."...Q#N. + 0x13, 0x1a, 0x26, 0xfe, 0x61, 0xc4, 0x0f, 0x05, 0x14, 0x10, 0xe0, 0x29, 0x3c, 0x01, 0x39, 0x00, // ..&.a......)<.9. + 0x00, 0x04, 0x00, 0x00, 0xff, 0x1e, 0x07, 0x00, 0x05, 0x62, 0x00, 0x52, 0x00, 0x5d, 0x00, 0x6d, // .........b.R.].m + 0x00, 0x70, 0x00, 0x00, 0x25, 0x22, 0x27, 0x2e, 0x01, 0x27, 0x26, 0x35, 0x34, 0x3e, 0x06, 0x37, // .p..%"'..'&54>.7 + 0x36, 0x25, 0x26, 0x35, 0x34, 0x37, 0x36, 0x33, 0x32, 0x1f, 0x01, 0x36, 0x33, 0x20, 0x00, 0x17, // 6%&547632..63 .. + 0x16, 0x14, 0x07, 0x0e, 0x01, 0x07, 0x16, 0x15, 0x14, 0x07, 0x06, 0x23, 0x22, 0x2f, 0x02, 0x01, // ...........#"/.. + 0x37, 0x06, 0x07, 0x16, 0x1a, 0x01, 0x15, 0x14, 0x07, 0x06, 0x23, 0x22, 0x27, 0x01, 0x06, 0x07, // 7.........#"'... + 0x16, 0x00, 0x15, 0x14, 0x23, 0x22, 0x26, 0x2f, 0x01, 0x03, 0x06, 0x07, 0x1e, 0x01, 0x17, 0x13, // ....#"&/........ + 0x14, 0x25, 0x17, 0x24, 0x13, 0x02, 0x25, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x00, 0x14, 0x16, 0x33, // .%.$..%........3 + 0x32, 0x16, 0x15, 0x14, 0x16, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x25, 0x27, 0x17, 0x01, // 2....2654&#"%'.. + 0x4f, 0x02, 0x04, 0x56, 0xa5, 0x39, 0x15, 0x04, 0x04, 0x0a, 0x07, 0x0e, 0x06, 0x12, 0x02, 0xb8, // O..V.9.......... + 0x01, 0x0c, 0x6e, 0x11, 0x74, 0x0c, 0x12, 0x0a, 0x7c, 0x5c, 0x64, 0x01, 0x0a, 0x01, 0xcf, 0x93, // ..n.t...|.d..... + 0x14, 0x14, 0x5b, 0xff, 0x97, 0x6e, 0x11, 0x74, 0x0b, 0x13, 0x0a, 0x7c, 0x40, 0xfe, 0x44, 0x07, // ..[..n.t...|@.D. + 0x3a, 0x29, 0x03, 0xf8, 0xee, 0x09, 0x0d, 0x3b, 0x39, 0x03, 0xfe, 0x38, 0x27, 0x2b, 0x18, 0x01, // :).....;9..8'+.. + 0x7c, 0x0b, 0x0e, 0x89, 0x04, 0x6a, 0xe0, 0x2c, 0x22, 0x02, 0x20, 0x07, 0xb0, 0x03, 0x34, 0x31, // |....j.,". ...41 + 0x01, 0x11, 0xb1, 0xb4, 0xfe, 0xe9, 0x43, 0x48, 0x5e, 0xfe, 0x6e, 0x1c, 0x14, 0x56, 0x7a, 0x1c, // ......CH^.n..Vz. + 0x28, 0x1c, 0xb2, 0x7e, 0x14, 0x01, 0x52, 0x09, 0x07, 0xb4, 0x02, 0x39, 0xb0, 0x5c, 0x1e, 0x27, // (..~..R....9...' + 0x09, 0x14, 0x10, 0x14, 0x0c, 0x16, 0x08, 0x17, 0x03, 0xfb, 0x72, 0xc6, 0x0d, 0x13, 0x0a, 0x40, // ..........r....@ + 0x10, 0xe5, 0x13, 0xfe, 0xed, 0xe8, 0x1f, 0x4c, 0x1f, 0x8e, 0xdf, 0x40, 0xc6, 0x0d, 0x14, 0x09, // .......L...@.... + 0x40, 0x10, 0xe5, 0x77, 0x03, 0x34, 0x07, 0x18, 0x17, 0x05, 0xfe, 0x36, 0xfe, 0x48, 0x03, 0x07, // @..w.4.....6.H.. + 0x02, 0x03, 0x07, 0x03, 0x49, 0x1c, 0x28, 0x2b, 0xfd, 0x43, 0x04, 0x0a, 0x2c, 0x06, 0xc5, 0x01, // ....I.(+.C..,... + 0x9d, 0x35, 0x35, 0x03, 0x2c, 0x0c, 0xfe, 0xb9, 0x0a, 0x66, 0x5b, 0x6f, 0x01, 0x12, 0x01, 0x15, // .55.,....f[o.... + 0x70, 0x40, 0xa9, 0x5c, 0x6a, 0xbd, 0x02, 0x3b, 0x28, 0x1c, 0x7a, 0x56, 0x14, 0x1c, 0x1c, 0x14, // p@..j..;(.zV.... + 0x7e, 0xb2, 0x11, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0xff, 0x97, 0x04, 0xfe, // ~............... + 0x05, 0x69, 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x35, 0x00, 0x4f, 0x00, 0x00, 0x01, 0x14, 0x07, 0x06, // .i.../.5.O...... + 0x23, 0x22, 0x27, 0x26, 0x35, 0x34, 0x3e, 0x01, 0x33, 0x32, 0x17, 0x06, 0x07, 0x26, 0x23, 0x22, // #"'&54>.32...&#" + 0x06, 0x15, 0x14, 0x16, 0x20, 0x36, 0x35, 0x34, 0x27, 0x36, 0x37, 0x16, 0x27, 0x14, 0x02, 0x0f, // .... 654'67.'... + 0x01, 0x22, 0x27, 0x3e, 0x04, 0x35, 0x34, 0x27, 0x16, 0x27, 0x15, 0x26, 0x27, 0x1e, 0x01, 0x13, // ."'>.54'.'.&'... + 0x22, 0x27, 0x36, 0x37, 0x36, 0x37, 0x0e, 0x01, 0x07, 0x26, 0x35, 0x34, 0x36, 0x37, 0x36, 0x37, // "'6767...&546767 + 0x3e, 0x01, 0x37, 0x16, 0x15, 0x14, 0x07, 0x0e, 0x01, 0x04, 0x1a, 0x93, 0x94, 0xe6, 0xe8, 0x92, // >.7............. + 0x93, 0x88, 0xf2, 0x93, 0x60, 0x56, 0x20, 0x07, 0x42, 0x4d, 0xa7, 0xe3, 0xe1, 0x01, 0x52, 0xe0, // ....`V .BM....R. + 0x20, 0x42, 0x39, 0x29, 0xcc, 0x9f, 0x9f, 0x0e, 0x1d, 0x21, 0x53, 0x7f, 0x48, 0x2d, 0x0f, 0x03, // B9).....!S.H-.. + 0x37, 0x37, 0x49, 0x85, 0x58, 0x6d, 0xfd, 0x53, 0x4d, 0xda, 0x48, 0x13, 0x02, 0x2a, 0xc3, 0x6b, // 77I.Xm.SM.H..*.k + 0x23, 0x22, 0x1a, 0x2e, 0x6f, 0x3b, 0x5e, 0x1b, 0x4a, 0x18, 0x20, 0x71, 0x01, 0xae, 0xd7, 0x9f, // #"..o;^.J. q.... + 0xa1, 0xa1, 0x9f, 0xd7, 0x93, 0xf7, 0x92, 0x1f, 0x3e, 0x40, 0x1c, 0xf6, 0xa8, 0xaa, 0xed, 0xed, // ........>@...... + 0xaa, 0x59, 0x4d, 0x0d, 0x24, 0x62, 0x4b, 0xc0, 0xfe, 0xce, 0x64, 0x01, 0x05, 0x20, 0x8d, 0xa8, // .YM.$bK...d.. .. + 0xd2, 0xaf, 0x5b, 0x45, 0x22, 0xa0, 0xa2, 0x02, 0xd6, 0xe2, 0x3b, 0xff, 0xfe, 0xb9, 0x4b, 0x78, // ..[E".....;...Kx + 0x7f, 0x25, 0x13, 0x5e, 0x91, 0x19, 0x36, 0x3b, 0x25, 0x54, 0x1a, 0x2c, 0x1e, 0x10, 0x55, 0x3a, // .%.^..6;%T.,..U: + 0x69, 0x94, 0x6d, 0x3d, 0x4d, 0x6b, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // i.m=Mk.......... + 0x05, 0x80, 0x00, 0x1a, 0x00, 0x29, 0x00, 0x2e, 0x00, 0x44, 0x00, 0x54, 0x00, 0x00, 0x01, 0x34, // .....)...D.T...4 + 0x27, 0x06, 0x07, 0x16, 0x15, 0x14, 0x06, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x36, // '......"&54632.6 + 0x37, 0x26, 0x23, 0x22, 0x06, 0x10, 0x16, 0x20, 0x36, 0x03, 0x16, 0x15, 0x14, 0x0e, 0x03, 0x07, // 7&#"... 6....... + 0x16, 0x3b, 0x01, 0x36, 0x11, 0x34, 0x27, 0x2e, 0x01, 0x27, 0x16, 0x05, 0x34, 0x27, 0x06, 0x07, // .;.6.4'..'..4'.. + 0x0e, 0x01, 0x15, 0x14, 0x17, 0x3e, 0x01, 0x37, 0x0e, 0x01, 0x07, 0x16, 0x33, 0x32, 0x36, 0x37, // .....>.7....3267 + 0x36, 0x25, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, // 6%...#!"&5.463!2 + 0x16, 0x04, 0x1a, 0x1c, 0x29, 0x2c, 0x16, 0x9a, 0xe8, 0x9b, 0x9c, 0x73, 0x35, 0x2d, 0x04, 0x17, // ....),.....s5-.. + 0x3c, 0x41, 0x9a, 0xcf, 0xcf, 0x01, 0x34, 0xcf, 0xb2, 0x02, 0x0a, 0x1f, 0x32, 0x57, 0x39, 0x15, // .54&#".#"'654' + 0x2e, 0x01, 0x23, 0x22, 0x07, 0x06, 0x15, 0x14, 0x17, 0x06, 0x23, 0x22, 0x26, 0x23, 0x22, 0x06, // ..#"......#"&#". + 0x15, 0x14, 0x1e, 0x02, 0x15, 0x14, 0x07, 0x06, 0x07, 0x06, 0x15, 0x14, 0x17, 0x1e, 0x02, 0x33, // ...............3 + 0x32, 0x36, 0x33, 0x32, 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x02, 0x33, 0x32, 0x16, 0x33, 0x32, 0x3e, // 2632..32>.32.32> + 0x01, 0x37, 0x36, 0x00, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, 0x04, // .76.... $...$ .. + 0xff, 0x16, 0x43, 0x66, 0x1d, 0x07, 0x27, 0x2f, 0x27, 0x25, 0x14, 0x0c, 0x28, 0x0b, 0x04, 0x08, // ..Cf..'/'%..(... + 0x05, 0x11, 0x24, 0x86, 0x55, 0xc7, 0x4c, 0x11, 0x05, 0x04, 0x0a, 0x0c, 0x28, 0x0a, 0x15, 0x23, // ..$.U.L.....(..# + 0x27, 0x2f, 0x27, 0x07, 0x40, 0x86, 0x16, 0x89, 0x02, 0x08, 0x0f, 0x10, 0x0c, 0x33, 0x0e, 0x23, // '/'.@........3.# + 0x40, 0x2c, 0x47, 0x29, 0x2b, 0x48, 0x2b, 0x40, 0x23, 0x0e, 0x33, 0x0d, 0x10, 0x0e, 0x08, 0x02, // @,G)+H+@#.3..... + 0x89, 0x01, 0x01, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, // .......^.....a.. + 0x01, 0x61, 0x01, 0x84, 0x16, 0x05, 0x0f, 0x58, 0x40, 0x13, 0x06, 0x0f, 0x16, 0x0c, 0x1d, 0x16, // .a.....X@....... + 0x13, 0x19, 0x10, 0x02, 0x5f, 0x13, 0x4f, 0x23, 0x4e, 0x57, 0xa5, 0x23, 0x4f, 0x13, 0x5f, 0x02, // ...._.O#NW.#O._. + 0x0f, 0x18, 0x14, 0x15, 0x1d, 0x0c, 0x16, 0x0f, 0x06, 0x13, 0x8a, 0x1d, 0x05, 0x16, 0x2e, 0x16, // ................ + 0x05, 0x2a, 0x13, 0x09, 0x1e, 0x23, 0x1e, 0x1e, 0x23, 0x1e, 0x08, 0x14, 0x28, 0x05, 0x16, 0x01, // .*...#..#...(... + 0xfb, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, // ..^.....a...a... + 0x00, 0x01, 0x00, 0x0f, 0xff, 0x80, 0x06, 0x71, 0x05, 0x80, 0x00, 0x5b, 0x00, 0x00, 0x01, 0x36, // .......q...[...6 + 0x16, 0x17, 0x16, 0x15, 0x14, 0x07, 0x16, 0x33, 0x32, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x0e, // .......32632.... + 0x02, 0x15, 0x14, 0x17, 0x1e, 0x01, 0x17, 0x16, 0x17, 0x16, 0x15, 0x14, 0x07, 0x0e, 0x02, 0x23, // ...............# + 0x22, 0x26, 0x23, 0x22, 0x07, 0x0e, 0x04, 0x23, 0x22, 0x2e, 0x03, 0x27, 0x26, 0x23, 0x22, 0x06, // "&#"...#"..'&#". + 0x23, 0x22, 0x2e, 0x01, 0x27, 0x26, 0x35, 0x34, 0x37, 0x36, 0x37, 0x3e, 0x01, 0x37, 0x36, 0x35, // #"..'&54767>.765 + 0x34, 0x2e, 0x02, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x33, 0x32, 0x37, 0x26, 0x35, 0x34, 0x37, // 4..54632.327&547 + 0x3e, 0x01, 0x03, 0x50, 0x86, 0xd5, 0x39, 0x1b, 0x09, 0x0e, 0x0e, 0x12, 0x42, 0x12, 0x1d, 0x36, // >..P..9.....B..6 + 0x3f, 0x4b, 0x3f, 0x0c, 0x25, 0x83, 0x4f, 0x1c, 0x34, 0x1c, 0xdb, 0x07, 0x08, 0x14, 0x17, 0x14, // ?K?.%.O.4....... + 0x54, 0x16, 0x25, 0x19, 0x20, 0x3e, 0x36, 0x3e, 0x5a, 0x36, 0x34, 0x59, 0x3d, 0x36, 0x3e, 0x1f, // T.%. >6>Z64Y=6>. + 0x1a, 0x25, 0x18, 0x53, 0x11, 0x19, 0x14, 0x08, 0x07, 0xdb, 0x1c, 0x34, 0x1c, 0x4e, 0x85, 0x24, // .%.S.......4.N.$ + 0x0c, 0x3f, 0x4c, 0x3f, 0x34, 0x1d, 0x0f, 0x42, 0x14, 0x12, 0x0e, 0x09, 0x1b, 0x40, 0xd8, 0x05, // .?L?4..B.....@.. + 0x80, 0x01, 0x8b, 0x7b, 0x3a, 0x79, 0x2f, 0x90, 0x07, 0x1b, 0x24, 0x1c, 0x20, 0x2c, 0x13, 0x27, // ...{:y/...$. ,.' + 0x1c, 0x0f, 0x1c, 0x52, 0x88, 0x21, 0x0c, 0x0b, 0x06, 0x1d, 0x46, 0x21, 0x0b, 0x38, 0x25, 0x0d, // ...R.!....F!.8%. + 0x05, 0x05, 0x23, 0x29, 0x28, 0x1b, 0x1b, 0x28, 0x29, 0x23, 0x05, 0x05, 0x0f, 0x25, 0x3a, 0x0b, // ..#)(..()#...%:. + 0x21, 0x46, 0x1d, 0x06, 0x0b, 0x0c, 0x20, 0x8a, 0x51, 0x1c, 0x0f, 0x1c, 0x27, 0x14, 0x2b, 0x1f, // !F.... .Q...'.+. + 0x1b, 0x25, 0x1a, 0x07, 0x8e, 0x30, 0x7a, 0x3a, 0x89, 0x7a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // .%...0z:.z...... + 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x4f, 0x00, 0x5f, 0x00, 0x00, 0x01, 0x34, 0x27, 0x2e, // .......O._...4'. + 0x01, 0x27, 0x26, 0x35, 0x34, 0x3e, 0x02, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x23, 0x22, 0x27, // .'&54>.54&#".#"' + 0x36, 0x35, 0x34, 0x27, 0x2e, 0x01, 0x23, 0x22, 0x07, 0x06, 0x15, 0x14, 0x17, 0x06, 0x23, 0x22, // 654'..#"......#" + 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x1e, 0x02, 0x15, 0x14, 0x07, 0x06, 0x07, 0x06, 0x15, 0x14, // &#"............. + 0x17, 0x1e, 0x02, 0x33, 0x32, 0x36, 0x33, 0x32, 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x02, 0x33, 0x32, // ...32632..32>.32 + 0x16, 0x33, 0x32, 0x3e, 0x01, 0x37, 0x36, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, // .32>.76....#!"&5 + 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x05, 0x00, 0x16, 0x43, 0x66, 0x1d, 0x07, 0x27, 0x2e, // .463!2....Cf..'. + 0x27, 0x25, 0x14, 0x0b, 0x28, 0x0c, 0x04, 0x08, 0x05, 0x11, 0x24, 0x85, 0x56, 0xc6, 0x4d, 0x12, // '%..(.....$.V.M. + 0x06, 0x0a, 0x05, 0x0b, 0x29, 0x0a, 0x14, 0x23, 0x27, 0x2e, 0x27, 0x07, 0x40, 0x86, 0x16, 0x8a, // ....)..#'.'.@... + 0x02, 0x08, 0x0e, 0x10, 0x0d, 0x33, 0x0d, 0x23, 0x41, 0x2c, 0x47, 0x29, 0x2b, 0x48, 0x2b, 0x41, // .....3.#A,G)+H+A + 0x23, 0x0d, 0x34, 0x0d, 0x0f, 0x0f, 0x08, 0x01, 0x8a, 0x01, 0x00, 0xa9, 0x77, 0xfc, 0x40, 0x77, // #.4.........w.@w + 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0x01, 0x84, 0x16, 0x05, 0x0e, 0x58, 0x41, 0x0e, 0x0b, // ..w..w......XA.. + 0x0f, 0x16, 0x0c, 0x1d, 0x16, 0x13, 0x19, 0x10, 0x02, 0x3f, 0x34, 0x4e, 0x24, 0x4e, 0x57, 0xa5, // .........?4N$NW. + 0x26, 0x4d, 0x26, 0x4c, 0x02, 0x10, 0x19, 0x14, 0x15, 0x1d, 0x0c, 0x16, 0x0f, 0x0b, 0x0e, 0x8a, // &M&L............ + 0x1d, 0x05, 0x16, 0x2f, 0x16, 0x05, 0x2a, 0x13, 0x0a, 0x1e, 0x23, 0x1e, 0x1e, 0x23, 0x1e, 0x09, // .../..*...#..#.. + 0x13, 0x2b, 0x03, 0x16, 0x03, 0x0b, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, // .+.....@w..w..w. + 0xa9, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0x80, 0x09, 0x00, 0x06, 0x00, 0x00, 0x4f, // ...............O + 0x00, 0x00, 0x01, 0x0e, 0x05, 0x07, 0x0e, 0x01, 0x07, 0x0e, 0x03, 0x07, 0x06, 0x07, 0x24, 0x05, // ..............$. + 0x06, 0x07, 0x3e, 0x01, 0x3f, 0x01, 0x3e, 0x03, 0x37, 0x36, 0x05, 0x32, 0x17, 0x1e, 0x01, 0x07, // ..>.?.>.76.2.... + 0x03, 0x06, 0x27, 0x26, 0x23, 0x22, 0x04, 0x07, 0x06, 0x2e, 0x02, 0x2f, 0x01, 0x34, 0x35, 0x34, // ..'&#"...../.454 + 0x33, 0x32, 0x37, 0x12, 0x00, 0x33, 0x32, 0x1e, 0x05, 0x17, 0x37, 0x3e, 0x04, 0x37, 0x3e, 0x03, // 327..32...7>.7>. + 0x09, 0x00, 0x45, 0x70, 0x42, 0x35, 0x16, 0x16, 0x03, 0x0a, 0x33, 0x17, 0x0f, 0x46, 0x41, 0x50, // ..EpB5....3..FAP + 0x08, 0x2f, 0x68, 0xfe, 0xab, 0xfe, 0xdf, 0x5c, 0xd3, 0x2f, 0x4e, 0x10, 0x0f, 0x47, 0xb8, 0x53, // ./h....../N..G.S + 0x85, 0x4c, 0xba, 0x01, 0x17, 0x01, 0x09, 0x0b, 0x06, 0x06, 0xc2, 0x0f, 0x20, 0x80, 0xe2, 0x92, // .L.......... ... + 0xfe, 0x00, 0x88, 0x52, 0x86, 0x50, 0x2a, 0x0c, 0x01, 0x06, 0x8a, 0xe9, 0xc0, 0x01, 0x6d, 0xc9, // ...R.P*.......m. + 0x05, 0x13, 0x39, 0x35, 0x46, 0x38, 0x34, 0x0e, 0x66, 0x02, 0x26, 0x33, 0x47, 0x61, 0x34, 0x42, // ..95F84.f.&3Ga4B + 0x7c, 0x77, 0x42, 0x06, 0x00, 0x2e, 0x5c, 0x46, 0x49, 0x2a, 0x2f, 0x06, 0x12, 0xed, 0x2e, 0x1d, // |wB....FI*/..... + 0x3f, 0x26, 0x2c, 0x06, 0x1f, 0xc8, 0x0e, 0xac, 0x35, 0x7e, 0x10, 0x1e, 0x07, 0x07, 0x1b, 0x4b, // ?&,.....5~.....K + 0x20, 0x25, 0x0d, 0x1f, 0x26, 0x03, 0x06, 0x16, 0x0b, 0xfe, 0xa7, 0x1d, 0x07, 0x18, 0x59, 0x02, // %..&.........Y. + 0x01, 0x1c, 0x2e, 0x22, 0x11, 0x01, 0x01, 0x01, 0x06, 0x37, 0x01, 0x6e, 0x01, 0x3c, 0x01, 0x09, // ...".....7.n.<.. + 0x0f, 0x22, 0x2d, 0x49, 0x2e, 0xb1, 0x04, 0x4d, 0x60, 0x7b, 0x90, 0x41, 0x52, 0x77, 0x4a, 0x21, // ."-I...M`{.ARwJ! + 0x00, 0x05, 0x00, 0x00, 0xff, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x46, 0x00, 0x58, 0x00, 0x5e, // ...........F.X.^ + 0x00, 0x64, 0x00, 0x6a, 0x00, 0x00, 0x01, 0x14, 0x07, 0x27, 0x17, 0x06, 0x07, 0x27, 0x17, 0x06, // .d.j.....'...'.. + 0x07, 0x27, 0x17, 0x06, 0x07, 0x27, 0x17, 0x06, 0x22, 0x27, 0x37, 0x07, 0x26, 0x27, 0x37, 0x07, // .'...'.."'7.&'7. + 0x26, 0x27, 0x37, 0x07, 0x26, 0x27, 0x37, 0x07, 0x26, 0x35, 0x34, 0x37, 0x17, 0x27, 0x36, 0x37, // &'7.&'7.&547.'67 + 0x17, 0x27, 0x36, 0x37, 0x17, 0x27, 0x36, 0x37, 0x17, 0x27, 0x36, 0x33, 0x32, 0x17, 0x07, 0x37, // .'67.'67.'632..7 + 0x16, 0x17, 0x07, 0x37, 0x16, 0x17, 0x07, 0x37, 0x16, 0x17, 0x07, 0x37, 0x16, 0x17, 0x34, 0x02, // ...7...7...7..4. + 0x24, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x24, 0x12, 0x13, 0x11, 0x09, // $#"......32$.... + 0x01, 0x11, 0x01, 0x11, 0x01, 0x11, 0x09, 0x01, 0x11, 0x01, 0x11, 0x09, 0x01, 0x11, 0x01, 0x05, // ................ + 0x2a, 0x05, 0xec, 0xe0, 0x13, 0x27, 0xd6, 0xb1, 0x2c, 0x3f, 0x9d, 0x67, 0x3d, 0x4f, 0x4f, 0x0e, // *....'..,?.g=OO. + 0x26, 0x4c, 0x26, 0x0e, 0x4e, 0x4a, 0x42, 0x67, 0x9d, 0x3b, 0x31, 0xb2, 0xd6, 0x27, 0x13, 0xe0, // &L&.NJBg.;1..'.. + 0xed, 0x05, 0x05, 0xee, 0xe1, 0x13, 0x27, 0xd6, 0xb1, 0x2e, 0x3d, 0x9e, 0x67, 0x43, 0x49, 0x4d, // ......'...=.gCIM + 0x0d, 0x24, 0x27, 0x26, 0x26, 0x0e, 0x4e, 0x4a, 0x42, 0x67, 0x9e, 0x3d, 0x2e, 0xb1, 0xd5, 0x25, // .$'&&.NJBg.=...% + 0x15, 0xe0, 0xed, 0x05, 0x1e, 0x9d, 0xfe, 0xf3, 0x9e, 0x77, 0xd8, 0x9d, 0x5c, 0x5c, 0x9d, 0xd8, // .........w...... + 0x77, 0x9e, 0x01, 0x0d, 0x9d, 0x49, 0xfd, 0x6f, 0xfd, 0x6f, 0x02, 0x91, 0x02, 0xc4, 0xfd, 0x3c, // w....I.o.o.....< + 0xfd, 0x3c, 0x05, 0xc4, 0xfd, 0x00, 0xfd, 0x00, 0x03, 0x00, 0x02, 0x80, 0x2d, 0x1f, 0x0e, 0x4e, // .<..........-..N + 0x49, 0x44, 0x67, 0x9e, 0x3d, 0x2f, 0xb2, 0xd7, 0x25, 0x16, 0xe4, 0xf0, 0x06, 0x06, 0xee, 0xe2, // IDg.=/..%....... + 0x13, 0x28, 0xd7, 0xb2, 0x2b, 0x41, 0x9e, 0x68, 0x45, 0x48, 0x4f, 0x0e, 0x2a, 0x22, 0x23, 0x2a, // .(..+A.hEHO.*"#* + 0x0e, 0x4f, 0x49, 0x43, 0x68, 0x9f, 0x3d, 0x2f, 0xb2, 0xd7, 0x27, 0x13, 0xe0, 0xec, 0x06, 0x06, // .OICh.=/..'..... + 0xed, 0xe1, 0x13, 0x28, 0xd6, 0xb2, 0x2f, 0x3d, 0x9f, 0x68, 0x3e, 0x4f, 0x4e, 0x0e, 0x1f, 0x2e, // ...(../=.h>ON... + 0xa0, 0x01, 0x0f, 0x9d, 0x5d, 0x9d, 0xda, 0x78, 0x77, 0xda, 0x9d, 0x5d, 0x9d, 0x01, 0x0f, 0x02, // ....]..xw..].... + 0x1e, 0xfd, 0x02, 0xfe, 0x81, 0x01, 0x7f, 0x02, 0xfe, 0x01, 0x7f, 0xf9, 0xcb, 0x01, 0x9c, 0x03, // ................ + 0x37, 0x01, 0x9b, 0xfe, 0x65, 0xfc, 0xc9, 0x03, 0x5b, 0xfc, 0x80, 0xfe, 0x40, 0x01, 0xc0, 0x03, // 7...e...[...@... + 0x80, 0x01, 0xc0, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x00, 0x06, 0x80, 0x06, 0x00, 0x00, 0x14, // ................ + 0x00, 0x29, 0x00, 0x36, 0x00, 0x00, 0x01, 0x21, 0x07, 0x21, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, // .).6...!.!"..... + 0x17, 0x16, 0x33, 0x15, 0x23, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x25, 0x33, 0x01, 0x0e, 0x06, // ..3.#"&5.46%3... + 0x07, 0x35, 0x36, 0x37, 0x36, 0x35, 0x34, 0x27, 0x01, 0x33, 0x13, 0x01, 0x11, 0x21, 0x36, 0x37, // .567654'.3...!67 + 0x21, 0x11, 0x34, 0x26, 0x27, 0x37, 0x1e, 0x01, 0x01, 0x53, 0x02, 0xb3, 0x1a, 0xfd, 0x67, 0x6e, // !.4&'7...S....gn + 0x9d, 0x79, 0x5d, 0x17, 0x4b, 0x2d, 0x8c, 0xc7, 0xc7, 0x03, 0xdf, 0xf7, 0xfe, 0x1e, 0x17, 0x23, // .y].K-.........# + 0x37, 0x35, 0x4c, 0x53, 0x6c, 0x3e, 0xa3, 0x39, 0x14, 0x14, 0xfe, 0xe3, 0xe4, 0xbb, 0x03, 0x56, // 75LSl>.9.......V + 0xfc, 0xe5, 0x25, 0x08, 0x02, 0xa6, 0x63, 0x50, 0x19, 0x65, 0x7d, 0x05, 0x26, 0x48, 0x9e, 0x6e, // ..%...cP.e}.&H.n + 0xfc, 0xfd, 0x5f, 0x95, 0x13, 0x05, 0x48, 0xc8, 0x8c, 0x03, 0x03, 0x8c, 0xc8, 0xda, 0xfa, 0xf2, // .._...H......... + 0x3d, 0x55, 0x6f, 0x4c, 0x51, 0x31, 0x21, 0x02, 0xc3, 0x1a, 0x9c, 0x34, 0x35, 0x36, 0x34, 0x02, // =UoLQ1!....4564. + 0xdd, 0xfd, 0xb7, 0x01, 0xf2, 0xfb, 0xa9, 0x37, 0x12, 0x04, 0x0e, 0x55, 0x8c, 0x1d, 0x43, 0x22, // .......7...U..C" + 0xb3, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0xff, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x07, // ................ + 0x00, 0x14, 0x00, 0x21, 0x00, 0x2d, 0x00, 0x39, 0x00, 0x5b, 0x00, 0x6e, 0x00, 0x78, 0x00, 0x90, // ...!.-.9.[.n.x.. + 0x00, 0xe7, 0x00, 0x00, 0x00, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x03, 0x35, 0x34, 0x26, // ......."&462.54& + 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x33, 0x32, 0x36, 0x37, 0x35, 0x34, 0x26, 0x22, 0x06, 0x1d, // ".....326754&".. + 0x01, 0x14, 0x16, 0x33, 0x32, 0x36, 0x37, 0x35, 0x34, 0x26, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, // ...326754&"..... + 0x32, 0x36, 0x37, 0x35, 0x34, 0x26, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x32, 0x36, 0x01, 0x06, // 26754&".....26.. + 0x04, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x34, 0x37, 0x06, 0x15, 0x14, 0x12, 0x17, 0x36, 0x33, 0x32, // .#"..547.....632 + 0x17, 0x36, 0x33, 0x32, 0x17, 0x36, 0x32, 0x17, 0x36, 0x33, 0x32, 0x16, 0x17, 0x36, 0x12, 0x27, // .632.62.632..6.' + 0x34, 0x23, 0x22, 0x07, 0x06, 0x23, 0x22, 0x35, 0x34, 0x37, 0x06, 0x15, 0x14, 0x16, 0x33, 0x32, // 4#"..#"547....32 + 0x37, 0x36, 0x01, 0x34, 0x26, 0x22, 0x06, 0x15, 0x14, 0x16, 0x32, 0x36, 0x01, 0x34, 0x2e, 0x01, // 76.4&"....26.4.. + 0x23, 0x22, 0x06, 0x07, 0x06, 0x15, 0x14, 0x16, 0x33, 0x32, 0x37, 0x36, 0x33, 0x32, 0x16, 0x15, // #"......327632.. + 0x14, 0x07, 0x3e, 0x01, 0x05, 0x14, 0x02, 0x07, 0x06, 0x04, 0x0f, 0x01, 0x15, 0x14, 0x06, 0x23, // ..>............# + 0x22, 0x27, 0x06, 0x22, 0x27, 0x06, 0x23, 0x22, 0x27, 0x06, 0x23, 0x22, 0x26, 0x35, 0x06, 0x23, // "'."'.#"'.#"&5.# + 0x22, 0x27, 0x36, 0x37, 0x26, 0x27, 0x16, 0x33, 0x32, 0x37, 0x26, 0x27, 0x26, 0x35, 0x34, 0x3e, // "'67&'.327&'&54> + 0x03, 0x33, 0x32, 0x17, 0x36, 0x37, 0x3e, 0x01, 0x37, 0x3e, 0x02, 0x37, 0x3e, 0x01, 0x33, 0x32, // .32.67>.7>.7>.32 + 0x17, 0x36, 0x33, 0x32, 0x17, 0x16, 0x15, 0x14, 0x0e, 0x02, 0x07, 0x1e, 0x01, 0x15, 0x14, 0x07, // .632............ + 0x16, 0x17, 0x36, 0x33, 0x32, 0x17, 0x16, 0x03, 0x54, 0x22, 0x38, 0x22, 0x22, 0x38, 0x82, 0x29, // ..632...T"8""8.) + 0x3c, 0x28, 0x29, 0x1d, 0x1e, 0x29, 0xac, 0x28, 0x3c, 0x29, 0x29, 0x1e, 0x1d, 0x29, 0xae, 0x29, // <()..).(<))..).) + 0x3c, 0x29, 0x29, 0x3c, 0x29, 0xae, 0x29, 0x3c, 0x29, 0x29, 0x3c, 0x29, 0x01, 0x0c, 0x54, 0xfe, // <))<).)<))<)..T. + 0xd8, 0xaf, 0x7b, 0xd5, 0x90, 0x52, 0x15, 0x68, 0x82, 0x78, 0x1e, 0x3d, 0x38, 0x1e, 0x20, 0x37, // ..{..R.h.x.=8. 7 + 0x38, 0x1e, 0x20, 0x6e, 0x20, 0x1e, 0x38, 0x1c, 0x31, 0x0d, 0x70, 0x82, 0x8e, 0x48, 0x11, 0x1e, // 8. n .8.1.p..H.. + 0x5f, 0x36, 0xe2, 0x1e, 0x53, 0xb2, 0x92, 0x6f, 0x63, 0x0d, 0xfe, 0x46, 0x40, 0x62, 0x40, 0x3f, // _6..S..oc..F@b@? + 0x64, 0x3f, 0x02, 0x75, 0x4b, 0x97, 0x62, 0x4d, 0x90, 0x37, 0x30, 0x5b, 0x66, 0x35, 0x59, 0x24, // d?.uK.bM.70[f5Y$ + 0x11, 0x33, 0x35, 0x04, 0x4b, 0x55, 0x01, 0x17, 0x43, 0x3c, 0x3a, 0xfe, 0xee, 0x5b, 0x04, 0x3b, // .35.KU..C<:..[.; + 0x2b, 0x38, 0x1e, 0x20, 0x6e, 0x20, 0x1e, 0x38, 0x37, 0x20, 0x1e, 0x38, 0x2f, 0x38, 0x5a, 0x6c, // +8. n .87 .8/8Zl + 0x76, 0x5d, 0x36, 0x34, 0x71, 0x45, 0x20, 0x27, 0x59, 0x4b, 0xc0, 0x30, 0x18, 0x12, 0x2d, 0x41, // v]64qE 'YK.0..-A + 0x6c, 0x42, 0x3b, 0x16, 0x13, 0x17, 0x02, 0x14, 0x03, 0x0a, 0x1a, 0x18, 0x10, 0x57, 0xf9, 0x88, // lB;..........W.. + 0x23, 0x1b, 0x3b, 0x57, 0x53, 0x39, 0x05, 0x0c, 0x0d, 0x13, 0x01, 0x11, 0x26, 0x10, 0x9d, 0x28, // #.;WS9......&..( + 0x19, 0x23, 0x2d, 0x37, 0x5a, 0x04, 0xe8, 0x3a, 0x2f, 0x2f, 0x3a, 0x2f, 0xfa, 0x54, 0x72, 0x1e, // .#-7Z..://:/.Tr. + 0x2b, 0x2b, 0x1e, 0x72, 0x1e, 0x2c, 0x2c, 0x1e, 0x72, 0x1e, 0x2b, 0x2b, 0x1e, 0x72, 0x1e, 0x2c, // ++.r.,,.r.++.r., + 0x2c, 0x1e, 0x72, 0x1e, 0x2b, 0x2b, 0x1e, 0x72, 0x1e, 0x2c, 0x2c, 0x1e, 0x72, 0x1e, 0x2b, 0x2b, // ,.r.++.r.,,.r.++ + 0x1e, 0x72, 0x1e, 0x2c, 0x2c, 0x02, 0xca, 0xa0, 0xc7, 0x67, 0xab, 0xe0, 0x78, 0x58, 0x56, 0xaf, // .r.,,....g..xXV. + 0xd7, 0xa2, 0xfe, 0xd4, 0x65, 0x39, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x1f, 0x19, 0x5e, 0x01, // ....e9222222..^. + 0x13, 0xb3, 0x4b, 0x06, 0x13, 0xf3, 0x56, 0x76, 0x7f, 0x94, 0x96, 0xdd, 0x46, 0x30, 0x02, 0xb2, // ..K...Vv....F0.. + 0x32, 0x4f, 0x4f, 0x32, 0x33, 0x4f, 0x4f, 0xfe, 0xe0, 0x60, 0xa6, 0x6c, 0x46, 0x3b, 0x9f, 0x6d, // 2OO23OO..`.lF;.m + 0x68, 0x6a, 0x13, 0x06, 0x38, 0x34, 0x1a, 0x14, 0x44, 0xc3, 0x72, 0x6f, 0xfe, 0xeb, 0x42, 0x40, // hj..84..D.ro..B@ + 0x9d, 0x1a, 0x01, 0x72, 0x2b, 0x40, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x43, 0x30, 0x44, 0x50, // ...r+@222222C0DP + 0x01, 0x13, 0x1f, 0x60, 0x07, 0x2e, 0xc0, 0x72, 0x38, 0x68, 0x39, 0x89, 0x9c, 0x7e, 0x54, 0x34, // ...`...r8h9..~T4 + 0x1d, 0x19, 0x03, 0x14, 0x06, 0x0f, 0x2e, 0x26, 0x14, 0x6f, 0x84, 0x04, 0x40, 0x39, 0x05, 0x07, // .......&.o..@9.. + 0x05, 0x11, 0x0f, 0x13, 0x01, 0x06, 0x18, 0x0c, 0x06, 0x13, 0x8a, 0xf0, 0x1e, 0x31, 0x50, 0x00, // .............1P. + 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x19, 0x00, 0x25, 0x00, 0x31, // .............%.1 + 0x00, 0x00, 0x01, 0x34, 0x27, 0x21, 0x15, 0x33, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x34, 0x36, 0x33, // ...4'!.3..#"&463 + 0x32, 0x17, 0x37, 0x26, 0x23, 0x22, 0x06, 0x10, 0x16, 0x33, 0x32, 0x36, 0x25, 0x33, 0x35, 0x23, // 2.7&#"...326%35# + 0x35, 0x23, 0x15, 0x23, 0x15, 0x33, 0x15, 0x33, 0x00, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, // 5#.#.3.3.... $.. + 0x12, 0x24, 0x20, 0x04, 0x03, 0x95, 0x06, 0xfe, 0x96, 0xd9, 0x0c, 0x7d, 0x50, 0x63, 0x8c, 0x8c, // .$ ........}Pc.. + 0x63, 0x5d, 0x3c, 0x68, 0x6c, 0x95, 0xa0, 0xe0, 0xe0, 0xa0, 0xa5, 0xcb, 0x01, 0x59, 0x6d, 0x6d, // c].32...1..I..U. + 0xce, 0xa0, 0x3f, 0x4c, 0x80, 0xb6, 0x80, 0x4c, 0x3f, 0xbe, 0x99, 0x63, 0x63, 0x0e, 0xc3, 0x34, // ..?L...L?..cc..4 + 0x4d, 0x58, 0x0b, 0x8a, 0x14, 0x1a, 0x26, 0x04, 0x00, 0xfc, 0xb9, 0x30, 0x0e, 0x34, 0x3b, 0x30, // MX....&....0.4;0 + 0xfe, 0xae, 0x05, 0x58, 0x19, 0x70, 0x44, 0x5b, 0x80, 0x80, 0x5b, 0x44, 0x70, 0x19, 0x44, 0x2c, // ...X.pD[..[Dp.D, + 0x0f, 0x02, 0x29, 0x12, 0x02, 0x26, 0x26, 0x00, 0x00, 0x05, 0x00, 0x00, 0xff, 0x51, 0x09, 0x00, // ..)..&&......Q.. + 0x05, 0x00, 0x00, 0x05, 0x00, 0x39, 0x00, 0x56, 0x00, 0x5c, 0x00, 0x94, 0x00, 0x00, 0x12, 0x32, // .....9.V.......2 + 0x36, 0x26, 0x22, 0x06, 0x05, 0x2e, 0x05, 0x27, 0x07, 0x06, 0x26, 0x27, 0x26, 0x36, 0x3f, 0x01, // 6&"....'..&'&6?. + 0x2e, 0x02, 0x06, 0x23, 0x22, 0x0f, 0x01, 0x23, 0x11, 0x32, 0x36, 0x1e, 0x03, 0x17, 0x01, 0x16, // ...#"..#.26..... + 0x33, 0x32, 0x37, 0x16, 0x36, 0x37, 0x16, 0x37, 0x3e, 0x01, 0x27, 0x16, 0x33, 0x32, 0x3e, 0x01, // 327.67.7>.'.32>. + 0x26, 0x17, 0x33, 0x11, 0x23, 0x27, 0x26, 0x2b, 0x01, 0x22, 0x0f, 0x01, 0x06, 0x14, 0x17, 0x1e, // &.3.#'&+."...... + 0x01, 0x3f, 0x01, 0x36, 0x1e, 0x01, 0x07, 0x1e, 0x01, 0x17, 0x1e, 0x01, 0x17, 0x16, 0x04, 0x32, // .?.6...........2 + 0x36, 0x26, 0x22, 0x06, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x0e, 0x01, 0x07, 0x0e, 0x01, 0x07, // 6&".....#!...... + 0x0e, 0x01, 0x27, 0x0e, 0x01, 0x2e, 0x01, 0x27, 0x01, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, // ..'....'.!"&5.46 + 0x33, 0x21, 0x3e, 0x06, 0x3b, 0x01, 0x32, 0x17, 0x36, 0x3b, 0x01, 0x32, 0x1e, 0x06, 0x17, 0x21, // 3!>.;.2.6;.2...! + 0x32, 0x16, 0x98, 0x50, 0x20, 0x20, 0x50, 0x20, 0x06, 0x09, 0x0a, 0x39, 0x1a, 0x32, 0x23, 0x2e, // 2..P P ...9.2#. + 0x16, 0x7d, 0x53, 0xfb, 0x50, 0x39, 0x01, 0x3a, 0xb1, 0x16, 0x3a, 0x25, 0x4c, 0x0b, 0x5c, 0x42, // .}S.P9.:..:%L..B + 0x9e, 0x9b, 0x05, 0x20, 0x0c, 0x1b, 0x0e, 0x15, 0x08, 0x01, 0x29, 0x73, 0x70, 0x4e, 0x2f, 0x39, // ... ......)spN/9 + 0x6f, 0x11, 0x4a, 0x35, 0x14, 0x20, 0x02, 0x0a, 0x21, 0x2b, 0x44, 0x1f, 0x07, 0x84, 0x60, 0x5d, // o.J5. ..!+D...`] + 0x9d, 0x42, 0x67, 0xa7, 0x59, 0x39, 0xd1, 0x1c, 0x1b, 0x2b, 0x86, 0x2c, 0xc1, 0x19, 0x39, 0x25, // .Bg.Y9...+.,..9% + 0x0a, 0x10, 0x50, 0x14, 0x1d, 0x6b, 0x0b, 0x34, 0x01, 0x00, 0x50, 0x20, 0x20, 0x50, 0x20, 0x01, // ..P..k.4..P P . + 0x08, 0x26, 0x1a, 0xfe, 0x4e, 0x1b, 0x6e, 0x46, 0x21, 0x5f, 0x37, 0x2a, 0x7d, 0x42, 0x3c, 0x84, // .&..N.nF!_7*}B<. + 0x7b, 0x6f, 0x30, 0xfe, 0xe1, 0xfe, 0x9a, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0xa5, 0x0e, 0x42, 0x1d, // {o0.....&&....B. + 0x3b, 0x2a, 0x3c, 0x40, 0x24, 0x75, 0x63, 0x52, 0x52, 0x63, 0xa7, 0x23, 0x40, 0x31, 0x36, 0x23, // ;*<@$ucRRc.#@16# + 0x33, 0x1b, 0x37, 0x0e, 0x01, 0x63, 0x1a, 0x26, 0x01, 0x80, 0x40, 0x40, 0x40, 0x06, 0x0d, 0x4a, // 3.7..c.&..@@@..J + 0x22, 0x40, 0x2a, 0x34, 0x17, 0x8c, 0x5e, 0x04, 0x60, 0x45, 0xb2, 0x44, 0xce, 0x0b, 0x0b, 0x01, // "@*4..^.`E.D.... + 0x02, 0x42, 0x9e, 0xfd, 0xe0, 0x01, 0x01, 0x03, 0x06, 0x0b, 0x08, 0xfe, 0xdc, 0x6f, 0x2f, 0x14, // .B...........o/. + 0x38, 0x39, 0x06, 0x32, 0x12, 0x37, 0x17, 0x0a, 0x2a, 0x40, 0x4f, 0x18, 0x02, 0x00, 0xb4, 0x4c, // 89.2.7..*@O....L + 0x43, 0xf3, 0x21, 0x54, 0x21, 0x33, 0x02, 0x32, 0xda, 0x17, 0x03, 0x33, 0x1f, 0x13, 0x58, 0x18, // C.!T!3.2...3..X. + 0x24, 0x8b, 0x0f, 0x42, 0x4a, 0x40, 0x40, 0x40, 0x02, 0x00, 0xfd, 0x80, 0x1a, 0x26, 0x41, 0x53, // $..BJ@@@.....&AS + 0x0a, 0x30, 0x43, 0x0c, 0x35, 0x39, 0x04, 0x22, 0x0b, 0x27, 0x44, 0x2f, 0x01, 0x1a, 0x26, 0x1a, // .0C.59.".'D/..&. + 0x02, 0xa0, 0x1a, 0x26, 0x0e, 0x44, 0x1c, 0x34, 0x17, 0x1c, 0x0b, 0x38, 0x38, 0x0c, 0x11, 0x24, // ...&.D.4...88..$ + 0x1a, 0x35, 0x1f, 0x41, 0x10, 0x26, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x00, 0x07, 0x00, // .5.A.&.......... + 0x06, 0x00, 0x00, 0x25, 0x00, 0x4f, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // ...%.O......#!"& + 0x35, 0x11, 0x34, 0x37, 0x3e, 0x06, 0x37, 0x3e, 0x03, 0x32, 0x1e, 0x02, 0x17, 0x1e, 0x06, 0x17, // 5.47>.7>.2...... + 0x16, 0x01, 0x24, 0x37, 0x3e, 0x01, 0x2f, 0x01, 0x2e, 0x01, 0x07, 0x06, 0x07, 0x0e, 0x03, 0x22, // ..$7>./........" + 0x2e, 0x02, 0x27, 0x26, 0x27, 0x26, 0x06, 0x0f, 0x01, 0x06, 0x16, 0x17, 0x16, 0x05, 0x1e, 0x04, // ..'&'&.......... + 0x32, 0x3e, 0x03, 0x07, 0x00, 0x5e, 0x42, 0xfa, 0x40, 0x42, 0x5e, 0x0b, 0x08, 0x3e, 0x15, 0x46, // 2>...^B.@B^..>.F + 0x46, 0x7a, 0xa5, 0x6e, 0x05, 0x5f, 0x30, 0x50, 0x3a, 0x50, 0x32, 0x5c, 0x06, 0x6e, 0xa5, 0x7a, // Fz.n._0P:P2..n.z + 0x46, 0x46, 0x15, 0x3e, 0x08, 0x0b, 0xfd, 0xcc, 0x01, 0x07, 0x52, 0x0b, 0x03, 0x08, 0x26, 0x08, // FF.>......R...&. + 0x1a, 0x0b, 0xe7, 0x70, 0x05, 0x5e, 0x31, 0x50, 0x3a, 0x50, 0x31, 0x5e, 0x05, 0xba, 0x9d, 0x0b, // ...p.^1P:P1^.... + 0x1a, 0x08, 0x26, 0x08, 0x03, 0x0b, 0x52, 0x01, 0x07, 0x0a, 0x50, 0x32, 0x4e, 0x4d, 0x4a, 0x4d, // ..&...R...P2NMJM + 0x51, 0x30, 0x52, 0x03, 0x72, 0xfc, 0x2e, 0x42, 0x5e, 0x5e, 0x42, 0x03, 0xd2, 0x0f, 0x09, 0x07, // Q0R.r..B^^B..... + 0x37, 0x11, 0x3a, 0x35, 0x5d, 0x79, 0x50, 0x04, 0x48, 0x21, 0x25, 0x25, 0x22, 0x46, 0x05, 0x50, // 7.:5]yP.H!%%"F.P + 0x79, 0x5d, 0x35, 0x3a, 0x11, 0x37, 0x07, 0x09, 0xfd, 0xa8, 0xbf, 0x3d, 0x08, 0x19, 0x0b, 0x34, // y]5:.7.....=...4 + 0x0b, 0x03, 0x08, 0xa9, 0x51, 0x03, 0x48, 0x21, 0x25, 0x25, 0x21, 0x48, 0x03, 0x86, 0x74, 0x08, // ....Q.H!%%!H..t. + 0x03, 0x0b, 0x34, 0x0b, 0x19, 0x08, 0x3d, 0xbf, 0x08, 0x3c, 0x22, 0x2d, 0x16, 0x16, 0x2f, 0x20, // ..4...=..<"-../ + 0x3f, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x31, // ?..............1 + 0x00, 0x50, 0x00, 0x70, 0x00, 0x00, 0x01, 0x17, 0x16, 0x06, 0x07, 0x0e, 0x02, 0x07, 0x0e, 0x03, // .P.p............ + 0x2b, 0x02, 0x22, 0x2e, 0x02, 0x27, 0x2e, 0x02, 0x27, 0x2e, 0x01, 0x3f, 0x01, 0x3e, 0x01, 0x17, // +."..'..'..?.>.. + 0x16, 0x17, 0x1e, 0x03, 0x3b, 0x02, 0x32, 0x3e, 0x02, 0x37, 0x24, 0x37, 0x36, 0x16, 0x13, 0x11, // ....;.2>.7$76... + 0x26, 0x27, 0x26, 0x25, 0x2e, 0x03, 0x2b, 0x02, 0x22, 0x0e, 0x02, 0x07, 0x0e, 0x02, 0x07, 0x06, // &'&%..+."....... + 0x07, 0x11, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x13, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // ....3!26....#!"& + 0x35, 0x11, 0x34, 0x37, 0x36, 0x00, 0x37, 0x3e, 0x03, 0x3b, 0x02, 0x32, 0x1e, 0x02, 0x17, 0x1e, // 5.476.7>.;.2.... + 0x02, 0x17, 0x16, 0x05, 0xc2, 0x27, 0x08, 0x03, 0x0a, 0x2b, 0xa7, 0x7e, 0x04, 0x27, 0x2a, 0x4f, // .....'...+.~.'*O + 0x4a, 0x25, 0x01, 0x01, 0x25, 0x4a, 0x4e, 0x2c, 0x26, 0x05, 0x78, 0xa7, 0x27, 0x0b, 0x03, 0x08, // J%..%JN,&.x.'... + 0x25, 0x08, 0x1b, 0x0b, 0x5e, 0xd4, 0x05, 0x4d, 0x2c, 0x45, 0x18, 0x01, 0x01, 0x18, 0x45, 0x2c, // %...^..M,E....E, + 0x4d, 0x05, 0x01, 0x02, 0x37, 0x0b, 0x1a, 0xc6, 0x5a, 0x45, 0x5b, 0xfe, 0xd6, 0x03, 0x50, 0x2a, // M...7...ZE[...P* + 0x46, 0x18, 0x01, 0x01, 0x18, 0x46, 0x2a, 0x50, 0x03, 0xd7, 0xc9, 0x3a, 0x35, 0x0e, 0x07, 0x13, // F....F*P...:5... + 0x0d, 0x05, 0xc0, 0x0d, 0x13, 0x80, 0x5e, 0x42, 0xfa, 0x40, 0x42, 0x5e, 0x29, 0x7b, 0x01, 0xc6, // ......^B.@B^){.. + 0x06, 0x24, 0x2e, 0x4d, 0x4b, 0x25, 0x01, 0x01, 0x25, 0x4b, 0x4d, 0x2e, 0x24, 0x2b, 0xe2, 0xe2, // .$.MK%..%KM.$+.. + 0x58, 0x29, 0x02, 0x6f, 0x33, 0x0b, 0x19, 0x08, 0x22, 0x81, 0x61, 0x03, 0x20, 0x20, 0x32, 0x17, // X).o3...".a. 2. + 0x17, 0x32, 0x21, 0x1f, 0x04, 0x5d, 0x81, 0x1e, 0x08, 0x19, 0x0b, 0x34, 0x0b, 0x04, 0x09, 0x49, // .2!..].....4...I + 0xa3, 0x04, 0x3e, 0x1f, 0x22, 0x22, 0x1f, 0x3e, 0x04, 0xc6, 0x2c, 0x08, 0x03, 0xfd, 0x26, 0x03, // ..>."".>..,...&. + 0xa0, 0x53, 0x38, 0x4a, 0xe6, 0x02, 0x42, 0x1e, 0x23, 0x23, 0x1e, 0x42, 0x02, 0xa6, 0x9f, 0x31, // .S8J..B.##.B...1 + 0x32, 0x0c, 0x07, 0xfc, 0x60, 0x0d, 0x13, 0x13, 0x03, 0xad, 0xfc, 0x60, 0x42, 0x5e, 0x5e, 0x42, // 2...`......`B^^B + 0x03, 0xa0, 0x38, 0x26, 0x72, 0x01, 0x61, 0x05, 0x1e, 0x23, 0x31, 0x18, 0x18, 0x31, 0x23, 0x1e, // ..8&r.a..#1..1#. + 0x24, 0xac, 0xb6, 0x52, 0x26, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x15, 0xff, 0x00, 0x05, 0xeb, // $..R&........... + 0x06, 0x00, 0x00, 0x03, 0x00, 0x07, 0x00, 0x0b, 0x00, 0x0f, 0x00, 0x1a, 0x00, 0x1e, 0x00, 0x22, // ..............." + 0x00, 0x26, 0x00, 0x2e, 0x00, 0x32, 0x00, 0x76, 0x00, 0x00, 0x25, 0x17, 0x2f, 0x01, 0x01, 0x25, // .&...2.v..%./..% + 0x27, 0x05, 0x01, 0x17, 0x03, 0x27, 0x01, 0x25, 0x03, 0x05, 0x01, 0x17, 0x2f, 0x01, 0x14, 0x16, // '....'.%..../... + 0x06, 0x0f, 0x01, 0x17, 0x16, 0x01, 0x05, 0x03, 0x25, 0x01, 0x37, 0x07, 0x17, 0x01, 0x25, 0x03, // ........%.7...%. + 0x05, 0x01, 0x37, 0x27, 0x07, 0x17, 0x16, 0x0f, 0x01, 0x25, 0x37, 0x0f, 0x02, 0x27, 0x07, 0x14, // ..7'.....%7..'.. + 0x0f, 0x01, 0x06, 0x2f, 0x01, 0x17, 0x14, 0x07, 0x05, 0x06, 0x23, 0x26, 0x35, 0x27, 0x26, 0x03, // .../......#&5'&. + 0x26, 0x3f, 0x01, 0x26, 0x27, 0x03, 0x26, 0x3f, 0x01, 0x26, 0x27, 0x03, 0x26, 0x37, 0x25, 0x32, // &?.&'.&?.&'.&7%2 + 0x17, 0x05, 0x16, 0x15, 0x13, 0x14, 0x0f, 0x01, 0x17, 0x16, 0x15, 0x17, 0x37, 0x36, 0x1f, 0x01, // ............76.. + 0x37, 0x34, 0x3f, 0x01, 0x36, 0x1f, 0x01, 0x1e, 0x01, 0x0e, 0x01, 0x15, 0x14, 0x0f, 0x01, 0x06, // 74?.6........... + 0x01, 0x4a, 0xca, 0x22, 0xd8, 0x01, 0x12, 0x01, 0x12, 0x0b, 0xfe, 0xd4, 0xfe, 0xee, 0xe3, 0x30, // .J."...........0 + 0xf5, 0x01, 0x3c, 0x01, 0x3d, 0x0e, 0xfe, 0xa0, 0x01, 0x8d, 0x5f, 0x02, 0x67, 0x02, 0x02, 0x04, // ..<.=....._.g... + 0x4e, 0x55, 0x07, 0xfd, 0x3f, 0x01, 0x00, 0x44, 0xfe, 0xe9, 0x04, 0x66, 0x0f, 0xe6, 0x02, 0xfd, // NU..?..D...f.... + 0xe1, 0x01, 0x75, 0x13, 0xfe, 0x59, 0x03, 0x9a, 0x14, 0xe2, 0x02, 0x90, 0x06, 0x02, 0x07, 0x01, // ..u..Y.......... + 0x02, 0x1e, 0xb3, 0x14, 0x13, 0x47, 0x08, 0x04, 0xea, 0x07, 0x07, 0x62, 0x07, 0x04, 0xfe, 0xdb, // .....G.....b.... + 0x04, 0x02, 0x08, 0xe4, 0x04, 0x37, 0x02, 0x07, 0x3d, 0x5e, 0x01, 0x48, 0x02, 0x08, 0x5e, 0x85, // .....7..=^.H..^. + 0x02, 0x60, 0x02, 0x09, 0x01, 0xb1, 0x05, 0x03, 0x01, 0x3d, 0x06, 0x14, 0x06, 0x76, 0x7e, 0x05, // .`.......=...v~. + 0x05, 0x79, 0x05, 0x06, 0x54, 0x03, 0x05, 0xce, 0x06, 0x05, 0xf5, 0x04, 0x02, 0x0f, 0x14, 0x04, // .y..T........... + 0xbf, 0x06, 0x01, 0xd6, 0xec, 0xd5, 0xfe, 0x33, 0xda, 0xf5, 0xd7, 0x01, 0x86, 0xd5, 0x01, 0x47, // .......3.......G + 0xcc, 0xfd, 0xe2, 0xd6, 0x01, 0x44, 0xc8, 0xfe, 0xa3, 0x50, 0xef, 0x4f, 0x01, 0x0f, 0x09, 0x03, // .....D...P.O.... + 0x34, 0x46, 0x06, 0x02, 0x9e, 0xc8, 0x01, 0xd1, 0xad, 0xfb, 0xb3, 0xea, 0xa4, 0xf0, 0x02, 0x71, // 4F.............q + 0xc2, 0x01, 0xb9, 0xa3, 0xfc, 0xbb, 0xe9, 0x8e, 0x69, 0x5f, 0x04, 0x05, 0x77, 0x5c, 0xde, 0x80, // ........i_..w... + 0xe4, 0x21, 0x31, 0x75, 0x05, 0x03, 0xbb, 0x05, 0x05, 0x53, 0xa1, 0x05, 0x03, 0xea, 0x02, 0x02, // .!1u.....S...... + 0x01, 0xf2, 0x04, 0x01, 0x11, 0x07, 0x04, 0x25, 0x56, 0x06, 0x01, 0x5f, 0x07, 0x05, 0x2d, 0x64, // .......%V.._..-d + 0x08, 0x01, 0xd2, 0x0a, 0x03, 0x87, 0x01, 0x99, 0x04, 0x05, 0xfe, 0x31, 0x07, 0x03, 0x3d, 0x55, // ...........1..=U + 0x02, 0x06, 0x7b, 0x4a, 0x04, 0x04, 0x38, 0x6e, 0x06, 0x03, 0x7e, 0x03, 0x03, 0x87, 0x04, 0x06, // ..{J..8n..~..... + 0x72, 0x87, 0x03, 0x05, 0x02, 0x99, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x00, 0x06, 0x80, // r............... + 0x06, 0x00, 0x00, 0x1d, 0x00, 0x27, 0x00, 0x55, 0x00, 0x00, 0x01, 0x34, 0x2e, 0x03, 0x23, 0x0e, // .....'.U...4..#. + 0x04, 0x22, 0x2e, 0x03, 0x27, 0x22, 0x0e, 0x03, 0x15, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x03, // ."..'".....3!26. + 0x34, 0x26, 0x22, 0x06, 0x15, 0x14, 0x16, 0x32, 0x36, 0x01, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x15, // 4&"....26....+.. + 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x1d, 0x01, // ..#!"&5.463!2... + 0x33, 0x32, 0x16, 0x1d, 0x01, 0x14, 0x06, 0x2b, 0x01, 0x15, 0x33, 0x32, 0x16, 0x1d, 0x01, 0x14, // 32.....+..32.... + 0x06, 0x2b, 0x01, 0x15, 0x33, 0x32, 0x16, 0x04, 0xb1, 0x0b, 0x1f, 0x30, 0x50, 0x33, 0x06, 0x37, // .+..32.....0P3.7 + 0x1e, 0x33, 0x2f, 0x2e, 0x2f, 0x33, 0x1e, 0x37, 0x06, 0x33, 0x50, 0x30, 0x1f, 0x0b, 0x54, 0x3d, // .3/./3.7.3P0..T= + 0x02, 0x40, 0x3d, 0x54, 0xad, 0x99, 0xd6, 0x99, 0x99, 0xd6, 0x99, 0x02, 0x7c, 0x12, 0x0e, 0x60, // .@=T........|..` + 0x5e, 0x42, 0xfb, 0x40, 0x42, 0x5e, 0x5e, 0x42, 0x04, 0xc0, 0x42, 0x5e, 0x60, 0x0e, 0x12, 0x12, // ^B.@B^^B..B^`... + 0x0e, 0x60, 0x60, 0x0e, 0x12, 0x12, 0x0e, 0x60, 0x60, 0x0e, 0x12, 0x01, 0x2a, 0x39, 0x64, 0x65, // .``....``...*9de + 0x47, 0x2d, 0x04, 0x21, 0x10, 0x18, 0x0a, 0x0a, 0x18, 0x10, 0x21, 0x04, 0x2d, 0x47, 0x65, 0x64, // G-.!......!.-Ged + 0x39, 0x49, 0x61, 0x61, 0x02, 0x9b, 0x6c, 0x98, 0x98, 0x6c, 0x6b, 0x98, 0x98, 0xfe, 0x4f, 0xc0, // 9Iaa..l..lk...O. + 0x0e, 0x12, 0xe0, 0x42, 0x5e, 0x5e, 0x42, 0x05, 0xc0, 0x42, 0x5e, 0x5e, 0x42, 0xe0, 0x12, 0x0e, // ...B^^B..B^^B... + 0xc0, 0x0e, 0x12, 0x80, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x80, 0x12, 0x00, 0x00, 0x04, 0x00, 0x00, // ................ + 0xff, 0x00, 0x06, 0x80, 0x06, 0x00, 0x00, 0x09, 0x00, 0x2b, 0x00, 0x59, 0x00, 0x69, 0x00, 0x00, // .........+.Y.i.. + 0x01, 0x14, 0x06, 0x22, 0x26, 0x35, 0x34, 0x36, 0x32, 0x16, 0x03, 0x32, 0x1e, 0x04, 0x15, 0x14, // ..."&5462..2.... + 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x34, 0x3e, 0x03, 0x3b, 0x01, 0x1e, 0x05, 0x32, 0x3e, 0x04, // .#!"&54>.;...2>. + 0x01, 0x14, 0x06, 0x2b, 0x01, 0x15, 0x33, 0x32, 0x16, 0x1d, 0x01, 0x14, 0x06, 0x2b, 0x01, 0x15, // ...+..32.....+.. + 0x33, 0x32, 0x16, 0x1d, 0x01, 0x14, 0x06, 0x2b, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // 32.....+....#!"& + 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x1d, 0x01, 0x33, 0x32, 0x16, 0x15, 0x01, 0x11, // 5.463!2...32.... + 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x04, 0x04, // 4&#!".....3!26.. + 0x99, 0xd6, 0x99, 0x99, 0xd6, 0x99, 0x30, 0x2e, 0x49, 0x2f, 0x20, 0x10, 0x07, 0x4f, 0x42, 0xfd, // ......0.I/ ..OB. + 0xc0, 0x42, 0x4f, 0x09, 0x1c, 0x2d, 0x51, 0x35, 0x05, 0x07, 0x32, 0x15, 0x2d, 0x1d, 0x29, 0x26, // .BO..-Q5..2.-.)& + 0x29, 0x1d, 0x2d, 0x15, 0x32, 0x02, 0xb3, 0x13, 0x0d, 0x60, 0x60, 0x0d, 0x13, 0x13, 0x0d, 0x60, // ).-.2....``....` + 0x60, 0x0d, 0x13, 0x13, 0x0d, 0x60, 0x5e, 0x42, 0xfb, 0x40, 0x42, 0x5e, 0x5e, 0x42, 0x04, 0xc0, // `....`^B.@B^^B.. + 0x42, 0x5e, 0x60, 0x0d, 0x13, 0xff, 0x00, 0x13, 0x0d, 0xfb, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x04, // B^`.......@..... + 0xc0, 0x0d, 0x13, 0x03, 0x7c, 0x6b, 0x98, 0x98, 0x6b, 0x6c, 0x98, 0x98, 0xfe, 0xb8, 0x22, 0x3d, // ....|k..kl...."= + 0x49, 0x59, 0x4c, 0x29, 0x43, 0x67, 0x67, 0x43, 0x30, 0x5b, 0x6a, 0x4d, 0x34, 0x04, 0x1f, 0x0b, // IYL)CggC0[jM4... + 0x17, 0x09, 0x09, 0x09, 0x09, 0x17, 0x0b, 0x1f, 0x01, 0x04, 0x0d, 0x13, 0x80, 0x13, 0x0d, 0xc0, // ................ + 0x0d, 0x13, 0x80, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0xe0, 0x42, 0x5e, 0x5e, 0x42, 0x05, 0xc0, 0x42, // .........B^^B..B + 0x5e, 0x5e, 0x42, 0xe0, 0x13, 0x0d, 0xfb, 0x40, 0x05, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xfa, 0x40, // ^^B....@.......@ + 0x0d, 0x13, 0x13, 0x00, 0x00, 0x06, 0x00, 0x00, 0xff, 0x80, 0x08, 0x00, 0x05, 0x80, 0x00, 0x19, // ................ + 0x00, 0x21, 0x00, 0x31, 0x00, 0x41, 0x00, 0x51, 0x00, 0x75, 0x00, 0x00, 0x00, 0x34, 0x2e, 0x02, // .!.1.A.Q.u...4.. + 0x23, 0x0e, 0x04, 0x22, 0x2e, 0x03, 0x27, 0x22, 0x0e, 0x02, 0x14, 0x16, 0x33, 0x21, 0x32, 0x02, // #.."..'"....3!2. + 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x01, 0x35, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x1d, // 4&"...2.54&#!".. + 0x01, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x11, 0x35, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x1d, // ...3!26.54&#!".. + 0x01, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x11, 0x35, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x1d, // ...3!26.54&#!".. + 0x01, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x35, 0x34, 0x26, // ...3!26....#!54& + 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x21, 0x35, 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, // +."...!54&+."... + 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x04, 0x00, 0x12, 0x29, 0x50, // !"&5.463!2....)P + 0x39, 0x06, 0x30, 0x1b, 0x2c, 0x2a, 0x2a, 0x2a, 0x2c, 0x1b, 0x30, 0x06, 0x39, 0x50, 0x29, 0x12, // 9.0.,***,.0.9P). + 0x4a, 0x36, 0x02, 0x00, 0x36, 0x53, 0x85, 0xbc, 0x85, 0x85, 0xbc, 0x04, 0x22, 0x12, 0x0e, 0xfd, // J6..6S......"... + 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0x02, 0x40, 0x0e, 0x12, 0x15, 0x0f, 0xfd, 0xc8, 0x0f, 0x15, 0x15, // ......@......... + 0x0f, 0x02, 0x38, 0x0f, 0x15, 0x12, 0x0e, 0xfd, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0x02, 0x40, 0x0e, // ..8...........@. + 0x12, 0x01, 0x00, 0x5e, 0x42, 0xfe, 0xa0, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0xfd, 0x00, 0x12, 0x0e, // ...^B....@...... + 0x40, 0x0e, 0x12, 0xfe, 0xa0, 0x42, 0x5e, 0x5e, 0x42, 0x06, 0xc0, 0x42, 0x5e, 0x01, 0x55, 0x80, // @....B^^B..B^.U. + 0x6b, 0x63, 0x39, 0x04, 0x1c, 0x0f, 0x14, 0x09, 0x09, 0x14, 0x0f, 0x1c, 0x04, 0x39, 0x63, 0x6b, // kc9..........9ck + 0x80, 0x55, 0x02, 0x3f, 0xbc, 0x85, 0x85, 0xbc, 0x85, 0xfe, 0xe6, 0x40, 0x0e, 0x12, 0x12, 0x0e, // .U.?.......@.... + 0x40, 0x0e, 0x12, 0x12, 0x01, 0x12, 0x38, 0x0f, 0x15, 0x15, 0x0f, 0x38, 0x0f, 0x15, 0x15, 0x01, // @.....8....8.... + 0x0b, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x01, 0x4e, 0xfb, 0x40, 0x42, 0x5e, // .@....@....N.@B^ + 0x60, 0x0e, 0x12, 0x12, 0x0e, 0x60, 0x60, 0x0e, 0x12, 0x12, 0x0e, 0x60, 0x5e, 0x42, 0x04, 0xc0, // `....``....`^B.. + 0x42, 0x5e, 0x5e, 0x00, 0x00, 0x07, 0x00, 0x00, 0xff, 0x80, 0x08, 0x00, 0x05, 0x80, 0x00, 0x19, // B^^............. + 0x00, 0x21, 0x00, 0x31, 0x00, 0x41, 0x00, 0x51, 0x00, 0x75, 0x00, 0x85, 0x00, 0x00, 0x00, 0x14, // .!.1.A.Q.u...... + 0x06, 0x23, 0x21, 0x22, 0x26, 0x34, 0x3e, 0x02, 0x33, 0x1e, 0x04, 0x32, 0x3e, 0x03, 0x37, 0x32, // .#!"&4>.3..2>.72 + 0x1e, 0x01, 0x02, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, // ....."&462....#! + 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x35, 0x15, 0x14, 0x06, 0x23, 0x21, // "&=.463!2.5...#! + 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x35, 0x15, 0x14, 0x06, 0x23, 0x21, // "&=.463!2.5...#! + 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x13, 0x11, 0x34, 0x26, 0x23, 0x21, // "&=.463!2...4&#! + 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x33, 0x21, 0x35, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x1d, // ".....3!546;.2.. + 0x01, 0x21, 0x35, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x1d, 0x01, 0x21, 0x32, 0x36, 0x13, 0x11, // .!546;.2...!26.. + 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x04, 0x00, // ..#!"&5.463!2... + 0x4a, 0x36, 0xfe, 0x00, 0x36, 0x4a, 0x12, 0x29, 0x50, 0x39, 0x06, 0x30, 0x1b, 0x2c, 0x2a, 0x2a, // J6..6J.)P9.0.,** + 0x2a, 0x2c, 0x1b, 0x30, 0x06, 0x39, 0x50, 0x29, 0x8b, 0x85, 0xbc, 0x85, 0x85, 0xbc, 0x04, 0x22, // *,.0.9P)......." + 0x12, 0x0e, 0xfd, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0x02, 0x40, 0x0e, 0x12, 0x15, 0x0f, 0xfd, 0xc8, // .........@...... + 0x0f, 0x15, 0x15, 0x0f, 0x02, 0x38, 0x0f, 0x15, 0x12, 0x0e, 0xfd, 0xc0, 0x0e, 0x12, 0x12, 0x0e, // .....8.......... + 0x02, 0x40, 0x0e, 0x12, 0x80, 0x13, 0x0d, 0xf9, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x01, 0x60, 0x12, // .@......@.....`. + 0x0e, 0x40, 0x0e, 0x12, 0x03, 0x00, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x01, 0x60, 0x0d, 0x13, 0x80, // .@......@...`... + 0x5e, 0x42, 0xf9, 0x40, 0x42, 0x5e, 0x5e, 0x42, 0x06, 0xc0, 0x42, 0x5e, 0x01, 0xd5, 0x80, 0x55, // ^B.@B^^B..B^...U + 0x55, 0x80, 0x6b, 0x63, 0x39, 0x04, 0x1c, 0x0f, 0x14, 0x09, 0x09, 0x14, 0x0f, 0x1c, 0x04, 0x39, // U.kc9..........9 + 0x63, 0x01, 0xbb, 0xbc, 0x85, 0x85, 0xbc, 0x85, 0xfd, 0x60, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, // c........`@....@ + 0x0e, 0x12, 0x12, 0xee, 0x38, 0x0f, 0x15, 0x15, 0x0f, 0x38, 0x0f, 0x15, 0x15, 0xf5, 0x40, 0x0e, // ....8....8....@. + 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0xfc, 0x32, 0x04, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xfb, // ...@....2....... + 0x40, 0x0d, 0x13, 0x60, 0x0e, 0x12, 0x12, 0x0e, 0x60, 0x60, 0x0e, 0x12, 0x12, 0x0e, 0x60, 0x13, // @..`....``....`. + 0x04, 0xcd, 0xfb, 0x40, 0x42, 0x5e, 0x5e, 0x42, 0x04, 0xc0, 0x42, 0x5e, 0x5e, 0x00, 0x00, 0x00, // ...@B^^B..B^^... + 0x00, 0x03, 0x00, 0x00, 0xff, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x0f, 0x00, 0x17, 0x00, 0x28, // ...............( + 0x00, 0x00, 0x25, 0x2e, 0x01, 0x27, 0x0e, 0x01, 0x22, 0x26, 0x27, 0x0e, 0x01, 0x07, 0x16, 0x04, // ..%..'.."&'..... + 0x20, 0x24, 0x02, 0x10, 0x26, 0x20, 0x06, 0x10, 0x16, 0x20, 0x00, 0x10, 0x02, 0x06, 0x04, 0x23, // $..& ... .....# + 0x22, 0x24, 0x26, 0x02, 0x10, 0x12, 0x36, 0x24, 0x20, 0x04, 0x16, 0x05, 0xf3, 0x16, 0x83, 0x77, // "$&...6$ ......w + 0x43, 0xb9, 0xce, 0xb9, 0x43, 0x77, 0x83, 0x16, 0x6a, 0x01, 0x4a, 0x01, 0x7e, 0x01, 0x4a, 0x89, // C...Cw..j.J.~.J. + 0xe1, 0xfe, 0xc2, 0xe1, 0xe1, 0x01, 0x3e, 0x02, 0xe1, 0x8e, 0xef, 0xfe, 0xb4, 0xb7, 0xb6, 0xfe, // ......>......... + 0xb4, 0xf0, 0x8e, 0x8e, 0xf0, 0x01, 0x4c, 0x01, 0x6c, 0x01, 0x4c, 0xf0, 0xc5, 0x9b, 0xcd, 0x10, // ......L.l.L..... + 0x4a, 0x53, 0x53, 0x4a, 0x10, 0xcd, 0x9b, 0x96, 0xaf, 0xaf, 0x02, 0xb2, 0x01, 0x3e, 0xe1, 0xe1, // JSSJ.........>.. + 0xfe, 0xc2, 0xe1, 0x01, 0x36, 0xfe, 0x94, 0xfe, 0xb5, 0xf1, 0x8e, 0x8e, 0xf0, 0x01, 0x4c, 0x01, // ....6.........L. + 0x6c, 0x01, 0x4c, 0xf0, 0x8e, 0x8e, 0xf0, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x00, 0x07, 0x00, // l.L............. + 0x06, 0x00, 0x00, 0x10, 0x00, 0x24, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x20, 0x04, 0x16, 0x12, 0x15, // .....$.,... .... + 0x14, 0x02, 0x06, 0x04, 0x20, 0x24, 0x26, 0x02, 0x10, 0x12, 0x36, 0x01, 0x36, 0x35, 0x34, 0x02, // .... $&...6.654. + 0x26, 0x24, 0x20, 0x04, 0x06, 0x02, 0x15, 0x14, 0x17, 0x12, 0x33, 0x16, 0x20, 0x37, 0x32, 0x26, // &$ .......3. 72& + 0x10, 0x26, 0x20, 0x06, 0x10, 0x16, 0x20, 0x02, 0xca, 0x01, 0x6c, 0x01, 0x4c, 0xf0, 0x8e, 0x8d, // .& ... ...l.L... + 0xf0, 0xfe, 0xb4, 0xfe, 0x92, 0xfe, 0xb4, 0xef, 0x8e, 0x8e, 0xf0, 0x04, 0x6d, 0x95, 0x7a, 0xce, // ............m.z. + 0xfe, 0xe4, 0xfe, 0xc8, 0xfe, 0xe4, 0xce, 0x7a, 0x95, 0x42, 0xf0, 0x83, 0x01, 0x6c, 0x83, 0xf0, // .......z.B...l.. + 0xa9, 0xe1, 0xfe, 0xc2, 0xe1, 0xe1, 0x01, 0x3e, 0x06, 0x00, 0x8e, 0xf0, 0xfe, 0xb4, 0xb6, 0xb5, // .......>........ + 0xfe, 0xb4, 0xf0, 0x8f, 0x8e, 0xf1, 0x01, 0x4b, 0x01, 0x6c, 0x01, 0x4c, 0xf0, 0xfb, 0x47, 0xcd, // .......K.l.L..G. + 0xfa, 0x9c, 0x01, 0x1c, 0xce, 0x7a, 0x7a, 0xce, 0xfe, 0xe4, 0x9c, 0xfa, 0xcd, 0x01, 0x47, 0x80, // .....zz.......G. + 0x80, 0xa1, 0x01, 0x3e, 0xe1, 0xe1, 0xfe, 0xc2, 0xe1, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // ...>............ + 0xff, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x1f, 0x00, 0x27, 0x00, 0x37, 0x00, 0x00, 0x01, 0x1e, // .........'.7.... + 0x04, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x34, 0x3e, 0x03, 0x37, 0x26, 0x35, 0x34, // ....#!"&54>.7&54 + 0x3e, 0x02, 0x32, 0x1e, 0x02, 0x15, 0x14, 0x00, 0x20, 0x06, 0x10, 0x16, 0x20, 0x36, 0x10, 0x13, // >.2..... ... 6.. + 0x32, 0x36, 0x35, 0x34, 0x02, 0x27, 0x06, 0x20, 0x27, 0x06, 0x02, 0x15, 0x14, 0x16, 0x33, 0x04, // 2654.'. '.....3. + 0xb1, 0x2f, 0x55, 0x5d, 0x42, 0x2c, 0xc8, 0x8d, 0xfc, 0xaa, 0x8d, 0xc8, 0x2c, 0x42, 0x5d, 0x55, // ./U]B,......,B]U + 0x2f, 0x4f, 0x51, 0x8a, 0xbd, 0xd0, 0xbd, 0x8a, 0x51, 0xfe, 0x9f, 0xfe, 0xc2, 0xe1, 0xe1, 0x01, // /OQ.....Q....... + 0x3e, 0xe1, 0x2b, 0x58, 0x7d, 0x9d, 0x93, 0x91, 0xfe, 0x82, 0x91, 0x93, 0x9d, 0x7d, 0x58, 0x02, // >.+X}........}X. + 0xf0, 0x0e, 0x30, 0x62, 0x85, 0xd3, 0x83, 0x9a, 0xdb, 0xdb, 0x9a, 0x83, 0xd3, 0x85, 0x62, 0x30, // ..0b..........b0 + 0x0e, 0x7d, 0x93, 0x68, 0xbd, 0x8a, 0x51, 0x51, 0x8a, 0xbd, 0x68, 0x93, 0x02, 0x13, 0xe1, 0xfe, // .}.h..QQ..h..... + 0xc2, 0xe1, 0xe1, 0x01, 0x3e, 0xfa, 0xe1, 0x8f, 0x66, 0xef, 0x01, 0x14, 0x07, 0x7f, 0x7f, 0x07, // ....>...f....... + 0xfe, 0xec, 0xef, 0x66, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0xff, 0x00, 0x05, 0x00, // ...f............ + 0x06, 0x00, 0x00, 0x11, 0x00, 0x19, 0x00, 0x23, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x14, 0x06, 0x23, // .......#.=.....# + 0x21, 0x22, 0x26, 0x34, 0x3e, 0x02, 0x33, 0x16, 0x32, 0x37, 0x32, 0x1e, 0x01, 0x02, 0x14, 0x06, // !"&4>.3.272..... + 0x22, 0x26, 0x34, 0x36, 0x32, 0x01, 0x11, 0x21, 0x11, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x13, // "&462..!...3!26. + 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x15, 0x14, 0x16, // ...#!"&5.463!... + 0x3b, 0x01, 0x32, 0x36, 0x3d, 0x01, 0x21, 0x32, 0x16, 0x04, 0x00, 0x4a, 0x36, 0xfe, 0x00, 0x36, // ;.26=.!2...J6..6 + 0x4a, 0x12, 0x29, 0x51, 0x38, 0x50, 0xd8, 0x50, 0x38, 0x51, 0x29, 0x88, 0x87, 0xbe, 0x87, 0x87, // J.)Q8P.P8Q)..... + 0xbe, 0x01, 0xa1, 0xfc, 0x00, 0x13, 0x0d, 0x03, 0xc0, 0x0d, 0x13, 0x80, 0x5e, 0x42, 0xfc, 0x40, // ............^B.@ + 0x42, 0x5e, 0x5e, 0x42, 0x01, 0x60, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x01, 0x60, 0x42, 0x5e, 0x01, // B^^B.`......`B^. + 0x56, 0x80, 0x56, 0x56, 0x80, 0x6c, 0x64, 0x39, 0x4b, 0x4b, 0x39, 0x64, 0x01, 0xb9, 0xbc, 0x85, // V.VV.ld9KK9d.... + 0x85, 0xbc, 0x85, 0xfb, 0xa0, 0x05, 0x60, 0xfa, 0xa0, 0x0d, 0x13, 0x13, 0x05, 0xcd, 0xfa, 0x40, // ......`........@ + 0x42, 0x5e, 0x5e, 0x42, 0x05, 0xc0, 0x42, 0x5e, 0x60, 0x0e, 0x12, 0x12, 0x0e, 0x60, 0x5e, 0x00, // B^^B..B^`....`^. + 0x00, 0x08, 0x00, 0x00, 0xff, 0x80, 0x08, 0x00, 0x05, 0x80, 0x00, 0x13, 0x00, 0x1b, 0x00, 0x2b, // ...............+ + 0x00, 0x3b, 0x00, 0x4b, 0x00, 0x5b, 0x00, 0x65, 0x00, 0x75, 0x00, 0x00, 0x01, 0x34, 0x2e, 0x02, // .;.K.[.e.u...4.. + 0x23, 0x06, 0x22, 0x27, 0x22, 0x0e, 0x02, 0x15, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x02, 0x34, // #."'".....3!26.4 + 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x01, 0x35, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x1d, 0x01, // &"...2.54&#!"... + 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x01, 0x35, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x1d, 0x01, // ..3!26.54&#!"... + 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x25, 0x35, 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, // ..3!26%54&+."... + 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x11, 0x35, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x1d, 0x01, // ..;.26.54&#!"... + 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x01, 0x21, 0x35, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x15, // ..3!26.!54&#!".. + 0x21, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // !...#!"&5.463!2. + 0x03, 0x80, 0x0f, 0x22, 0x44, 0x2f, 0x40, 0xb8, 0x40, 0x2f, 0x44, 0x22, 0x0f, 0x3f, 0x2c, 0x01, // ..."D/@.@/D".?,. + 0xaa, 0x2c, 0x3f, 0x80, 0x70, 0xa0, 0x70, 0x70, 0xa0, 0x04, 0x70, 0x12, 0x0e, 0xfd, 0x40, 0x0e, // .,?.p.pp..p...@. + 0x12, 0x12, 0x0e, 0x02, 0xc0, 0x0e, 0x12, 0xfe, 0x80, 0x12, 0x0e, 0xfe, 0xc0, 0x0e, 0x12, 0x12, // ................ + 0x0e, 0x01, 0x40, 0x0e, 0x12, 0x01, 0x80, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, // ..@............. + 0x12, 0x12, 0x0e, 0xfd, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x02, 0xc0, 0x0e, 0x12, 0xf9, 0x80, 0x07, // ....@........... + 0x00, 0x12, 0x0e, 0xf9, 0x40, 0x0e, 0x12, 0x07, 0x80, 0x5e, 0x42, 0xf9, 0x40, 0x42, 0x5e, 0x5e, // ....@....^B.@B^^ + 0x42, 0x06, 0xc0, 0x42, 0x5e, 0x01, 0x44, 0x36, 0x5d, 0x57, 0x32, 0x40, 0x40, 0x32, 0x57, 0x5d, // B..B^.D6]W2@@2W] + 0x36, 0x37, 0x4d, 0x4d, 0x01, 0xa3, 0xa0, 0x70, 0x70, 0xa0, 0x70, 0xfe, 0xe0, 0x40, 0x0e, 0x12, // 67MM...pp.p..@.. + 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x01, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, // ..@.....@....@.. + 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x01, 0x0e, 0x40, 0x0e, 0x12, // ..@....@.....@.. + 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x01, 0x6e, 0x60, 0x0e, 0x12, 0x12, 0x0e, 0xfb, 0x40, 0x42, // ..@....n`.....@B + 0x5e, 0x5e, 0x42, 0x04, 0xc0, 0x42, 0x5e, 0x5e, 0x00, 0x08, 0x00, 0x00, 0xff, 0x80, 0x08, 0x00, // ^^B..B^^........ + 0x05, 0x80, 0x00, 0x13, 0x00, 0x1b, 0x00, 0x2b, 0x00, 0x3b, 0x00, 0x4b, 0x00, 0x5b, 0x00, 0x65, // .......+.;.K.[.e + 0x00, 0x75, 0x00, 0x00, 0x01, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x34, 0x3e, 0x02, 0x33, // .u.....#!"&54>.3 + 0x16, 0x32, 0x37, 0x32, 0x1e, 0x02, 0x02, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x01, 0x15, // .272....."&462.. + 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x25, 0x15, // ..#!"&=.463!2.%. + 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x05, 0x15, // ..#!"&=.463!2... + 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x35, 0x15, // ..+."&=.46;.2.5. + 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x13, 0x11, // ..#!"&=.463!2... + 0x21, 0x11, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x13, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // !...3!26....#!"& + 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x03, 0x80, 0x3f, 0x2c, 0xfe, 0x56, 0x2c, 0x3f, // 5.463!2...?,.V,? + 0x0f, 0x22, 0x44, 0x2f, 0x40, 0xb8, 0x40, 0x2f, 0x44, 0x22, 0x0f, 0x80, 0x70, 0xa0, 0x70, 0x70, // ."D/@.@/D"..p.pp + 0xa0, 0x04, 0x70, 0x12, 0x0e, 0xfd, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x02, 0xc0, 0x0e, 0x12, 0xfe, // ..p...@......... + 0x80, 0x12, 0x0e, 0xfe, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0x01, 0x40, 0x0e, 0x12, 0x01, 0x80, 0x12, // ..........@..... + 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xfd, 0x40, 0x0e, 0x12, 0x12, // ............@... + 0x0e, 0x02, 0xc0, 0x0e, 0x12, 0x80, 0xf9, 0x00, 0x13, 0x0d, 0x06, 0xc0, 0x0d, 0x13, 0x80, 0x5e, // ...............^ + 0x42, 0xf9, 0x40, 0x42, 0x5e, 0x5e, 0x42, 0x06, 0xc0, 0x42, 0x5e, 0x01, 0x44, 0x37, 0x4d, 0x4d, // B.@B^^B..B^.D7MM + 0x37, 0x36, 0x5d, 0x57, 0x32, 0x40, 0x40, 0x32, 0x57, 0x5d, 0x01, 0xd6, 0xa0, 0x70, 0x70, 0xa0, // 76]W2@@2W]...pp. + 0x70, 0xfd, 0xa0, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0xf2, 0x40, 0x0e, 0x12, // p..@....@....@.. + 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, // ..@....@....@... + 0xf2, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0xfc, 0xb2, 0x04, 0x60, 0xfb, 0xa0, // .@....@......`.. + 0x0d, 0x13, 0x13, 0x04, 0xcd, 0xfb, 0x40, 0x42, 0x5e, 0x5e, 0x42, 0x04, 0xc0, 0x42, 0x5e, 0x5e, // ......@B^^B..B^^ + 0x00, 0x02, 0x00, 0x1d, 0xff, 0x00, 0x06, 0xe2, 0x06, 0x00, 0x00, 0x1a, 0x00, 0x41, 0x00, 0x00, // .............A.. + 0x01, 0x10, 0x02, 0x23, 0x22, 0x02, 0x11, 0x10, 0x12, 0x33, 0x32, 0x37, 0x2e, 0x04, 0x23, 0x22, // ...#"....327..#" + 0x07, 0x27, 0x36, 0x33, 0x32, 0x16, 0x17, 0x36, 0x01, 0x33, 0x16, 0x0e, 0x03, 0x23, 0x22, 0x2e, // .'632..6.3...#". + 0x02, 0x27, 0x06, 0x23, 0x22, 0x24, 0x26, 0x02, 0x35, 0x34, 0x12, 0x36, 0x24, 0x33, 0x32, 0x1e, // .'.#"$&.54.6$32. + 0x03, 0x15, 0x14, 0x02, 0x07, 0x1e, 0x01, 0x33, 0x32, 0x36, 0x04, 0xe7, 0xd2, 0xe1, 0xde, 0xd0, // .......326...... + 0xd0, 0xde, 0x4a, 0x39, 0x16, 0x22, 0x36, 0x35, 0x49, 0x29, 0x2e, 0x21, 0x31, 0x69, 0xab, 0x84, // ..J9."65I).!1i.. + 0xa7, 0x43, 0x43, 0x01, 0x86, 0x75, 0x03, 0x0a, 0x2b, 0x49, 0x8d, 0x5c, 0x47, 0x77, 0x5c, 0x42, // .CC..u..+I..Gw.B + 0x21, 0x61, 0x6c, 0x96, 0xfe, 0xe3, 0xdd, 0x87, 0x87, 0xde, 0x01, 0x1d, 0x95, 0x79, 0xeb, 0xc7, // !al..........y.. + 0x99, 0x56, 0xa1, 0x8a, 0x2f, 0x5d, 0x3a, 0x3d, 0x42, 0x02, 0xed, 0x01, 0x3e, 0x01, 0x39, 0xfe, // .V../]:=B...>.9. + 0xc6, 0xfe, 0xc3, 0xfe, 0xc4, 0xfe, 0xc9, 0x11, 0x2b, 0x3c, 0x46, 0x2b, 0x1d, 0x10, 0x61, 0x5b, // ........+.32.... + 0x06, 0x07, 0x06, 0x15, 0x10, 0x17, 0x16, 0x17, 0x1e, 0x04, 0x25, 0x14, 0x06, 0x23, 0x21, 0x22, // ..........%..#!" + 0x26, 0x35, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x03, 0x14, 0x07, 0x0e, 0x01, 0x07, 0x06, 0x23, // &5463!2........# + 0x22, 0x26, 0x35, 0x34, 0x3e, 0x02, 0x35, 0x34, 0x27, 0x26, 0x23, 0x22, 0x15, 0x14, 0x16, 0x15, // "&54>.54'&#".... + 0x14, 0x06, 0x23, 0x22, 0x35, 0x34, 0x36, 0x35, 0x34, 0x27, 0x2e, 0x01, 0x23, 0x22, 0x0e, 0x01, // ..#"54654'..#".. + 0x15, 0x14, 0x16, 0x15, 0x14, 0x0e, 0x03, 0x15, 0x14, 0x17, 0x16, 0x17, 0x16, 0x17, 0x16, 0x15, // ................ + 0x14, 0x23, 0x22, 0x27, 0x2e, 0x01, 0x35, 0x34, 0x3e, 0x03, 0x35, 0x34, 0x27, 0x26, 0x27, 0x26, // .#"'..54>.54'&'& + 0x35, 0x34, 0x33, 0x32, 0x17, 0x1e, 0x04, 0x17, 0x14, 0x1e, 0x05, 0x33, 0x32, 0x36, 0x35, 0x34, // 5432.......32654 + 0x26, 0x34, 0x33, 0x32, 0x17, 0x1e, 0x01, 0x05, 0x10, 0x07, 0x0e, 0x03, 0x23, 0x22, 0x26, 0x35, // &432........#"&5 + 0x34, 0x3e, 0x01, 0x37, 0x36, 0x11, 0x34, 0x26, 0x27, 0x26, 0x27, 0x2e, 0x05, 0x35, 0x34, 0x36, // 4>.76.4&'&'..546 + 0x33, 0x32, 0x17, 0x16, 0x12, 0x17, 0x16, 0x01, 0xc5, 0x20, 0x15, 0x01, 0x0c, 0x3f, 0x63, 0xe1, // 32....... ...?c. + 0xd5, 0x27, 0x70, 0x26, 0x13, 0x20, 0x3f, 0x62, 0x31, 0x77, 0x7b, 0x32, 0x56, 0x02, 0x19, 0x0e, // .'p&. ?b1w{2V... + 0x14, 0x09, 0x05, 0x3f, 0x23, 0x1d, 0xfb, 0xc7, 0x1a, 0x26, 0x23, 0x1d, 0x04, 0x39, 0x1a, 0x26, // ...?#....&#..9.& + 0xd7, 0x43, 0x19, 0x59, 0x27, 0x10, 0x0b, 0x07, 0x10, 0x26, 0x2e, 0x26, 0x23, 0x1d, 0x11, 0x03, // .C.Y'....&.&#... + 0x0f, 0x2b, 0x17, 0x42, 0x03, 0x0a, 0x0d, 0x3a, 0x16, 0x05, 0x04, 0x03, 0x20, 0x26, 0x36, 0x35, // .+.B...:.... &65 + 0x26, 0x2a, 0x1d, 0x32, 0x10, 0x01, 0x01, 0x12, 0x06, 0x1b, 0x77, 0x98, 0x31, 0x47, 0x46, 0x31, // &*.2......w.1GF1 + 0x19, 0x1d, 0x1b, 0x13, 0x29, 0x32, 0x3c, 0x29, 0x3c, 0x27, 0x1c, 0x10, 0x08, 0x06, 0x03, 0x08, // ....)2<)<'...... + 0x0a, 0x0c, 0x11, 0x0a, 0x17, 0x1c, 0x28, 0x0a, 0x1b, 0x42, 0x48, 0x3d, 0x02, 0xd3, 0x8a, 0x13, // ......(..BH=.... + 0x3a, 0x4e, 0x54, 0x20, 0x10, 0x1e, 0x3a, 0x4f, 0x09, 0xb7, 0x29, 0x34, 0x3a, 0x69, 0x02, 0x16, // :NT ..:O..)4:i.. + 0x0b, 0x13, 0x0b, 0x08, 0x20, 0x13, 0x46, 0x7e, 0x62, 0x60, 0x0c, 0x02, 0x65, 0x15, 0x21, 0x03, // .... .F~b`..e.!. + 0x0f, 0x7d, 0x01, 0x1c, 0x01, 0x88, 0x01, 0x55, 0x01, 0x11, 0x33, 0x69, 0x1b, 0x13, 0x1b, 0x3f, // .}.....U..3i...? + 0x66, 0x52, 0xc7, 0xfa, 0xfe, 0xe7, 0xd2, 0x55, 0x58, 0x03, 0x1a, 0x10, 0x19, 0x16, 0x7c, 0x1d, // fR.....UX.....|. + 0x27, 0x26, 0x1a, 0x1d, 0x27, 0x26, 0x02, 0x49, 0x86, 0x63, 0x26, 0x51, 0x14, 0x0a, 0x0c, 0x06, // '&..'&.I.c&Q.... + 0x09, 0x2a, 0x32, 0x55, 0x2e, 0x4c, 0x36, 0x2a, 0x05, 0x0c, 0x2f, 0x0d, 0x16, 0x1a, 0x4c, 0x0f, // .*2U.L6*../...L. + 0x3a, 0x0f, 0x19, 0x15, 0x19, 0x39, 0x01, 0x04, 0x04, 0x02, 0x30, 0x1e, 0x25, 0x3e, 0x2e, 0x2e, // :....9....0.%>.. + 0x3e, 0x25, 0x62, 0x3e, 0x2b, 0x14, 0x05, 0x05, 0x02, 0x03, 0x10, 0x0b, 0x2b, 0xc1, 0x7a, 0x37, // >%b>+.......+.z7 + 0x79, 0x6d, 0x6c, 0x77, 0x34, 0x35, 0x29, 0x30, 0x10, 0x09, 0x0c, 0x14, 0x1d, 0x13, 0x33, 0x33, // ymlw45)0......33 + 0x4a, 0x40, 0x30, 0x01, 0x21, 0x11, 0x21, 0x15, 0x16, 0x0b, 0x1c, 0x17, 0x19, 0x54, 0x14, 0x46, // J@0.!.!......T.F + 0x4c, 0xa0, 0x87, 0xfe, 0xee, 0xe5, 0x20, 0x50, 0x5d, 0x3d, 0x1f, 0x10, 0x0f, 0x47, 0x53, 0x0b, // L..... P]=...GS. + 0xe6, 0x01, 0x2d, 0x83, 0xd0, 0x6b, 0x77, 0x6d, 0x03, 0x15, 0x0c, 0x17, 0x11, 0x14, 0x09, 0x13, // ..-..kwm........ + 0x21, 0xa9, 0x83, 0xfe, 0xe4, 0xac, 0x2a, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x00, 0x07, 0x00, // !.....*......... + 0x06, 0x00, 0x00, 0x18, 0x00, 0x28, 0x00, 0x00, 0x25, 0x13, 0x36, 0x26, 0x07, 0x01, 0x0e, 0x01, // .....(..%.6&.... + 0x16, 0x1f, 0x01, 0x01, 0x36, 0x17, 0x16, 0x07, 0x01, 0x39, 0x01, 0x07, 0x32, 0x3f, 0x01, 0x17, // ....6....9..2?.. + 0x16, 0x00, 0x10, 0x02, 0x06, 0x04, 0x20, 0x24, 0x26, 0x02, 0x10, 0x12, 0x36, 0x24, 0x20, 0x04, // ...... $&...6$ . + 0x16, 0x04, 0xa5, 0x93, 0x09, 0x27, 0x20, 0xfc, 0xa0, 0x1d, 0x15, 0x10, 0x18, 0xdd, 0x02, 0x01, // .....' ......... + 0x15, 0x0b, 0x07, 0x0b, 0xfe, 0x61, 0x10, 0x17, 0x16, 0x6c, 0xe0, 0x40, 0x02, 0x6c, 0x8e, 0xf0, // .....a...l.@.l.. + 0xfe, 0xb4, 0xfe, 0x94, 0xfe, 0xb4, 0xf0, 0x8e, 0x8e, 0xf0, 0x01, 0x4c, 0x01, 0x6c, 0x01, 0x4c, // ...........L.l.L + 0xf0, 0xe5, 0x02, 0xb5, 0x2c, 0x26, 0x0c, 0xfe, 0xb3, 0x0b, 0x1c, 0x19, 0x07, 0x45, 0x01, 0x43, // ....,&.......E.C + 0x0e, 0x08, 0x05, 0x0a, 0xfe, 0x89, 0xe4, 0x16, 0x68, 0xa5, 0x24, 0x02, 0x9b, 0xfe, 0x94, 0xfe, // ........h.$..... + 0xb4, 0xf0, 0x8e, 0x8e, 0xf0, 0x01, 0x4c, 0x01, 0x6c, 0x01, 0x4c, 0xf0, 0x8e, 0x8e, 0xf0, 0x00, // ......L.l.L..... + 0x00, 0x06, 0x00, 0x00, 0xff, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x0d, 0x00, 0x1f, 0x00, 0x2f, // .............../ + 0x00, 0x33, 0x00, 0x37, 0x00, 0x3b, 0x00, 0x00, 0x25, 0x14, 0x06, 0x22, 0x26, 0x35, 0x34, 0x36, // .3.7.;..%.."&546 + 0x37, 0x11, 0x33, 0x11, 0x1e, 0x01, 0x17, 0x34, 0x26, 0x27, 0x11, 0x34, 0x26, 0x22, 0x06, 0x15, // 7.3....4&'.4&".. + 0x11, 0x0e, 0x01, 0x15, 0x14, 0x16, 0x20, 0x36, 0x37, 0x14, 0x00, 0x20, 0x00, 0x35, 0x34, 0x37, // ...... 67.. .547 + 0x11, 0x34, 0x36, 0x20, 0x16, 0x15, 0x11, 0x16, 0x13, 0x15, 0x23, 0x35, 0x13, 0x15, 0x23, 0x35, // .46 ......#5..#5 + 0x13, 0x15, 0x23, 0x35, 0x02, 0x80, 0x70, 0xa0, 0x70, 0x46, 0x3a, 0x80, 0x3a, 0x46, 0x80, 0x44, // ..#5..p.pF:.:F.D + 0x3c, 0x70, 0xa0, 0x70, 0x3c, 0x44, 0xbb, 0x01, 0x0a, 0xbb, 0x80, 0xfe, 0xf9, 0xfe, 0x8e, 0xfe, // .F.N.V.^.f.n.v + 0x00, 0x7e, 0x00, 0x86, 0x00, 0x8e, 0x00, 0x96, 0x00, 0x9e, 0x00, 0x00, 0x01, 0x16, 0x14, 0x07, // .~.............. + 0x01, 0x06, 0x22, 0x2f, 0x01, 0x26, 0x34, 0x3f, 0x01, 0x2e, 0x01, 0x37, 0x26, 0x23, 0x22, 0x06, // .."/.&4?...7&#". + 0x15, 0x11, 0x21, 0x11, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x16, 0x17, 0x36, 0x16, 0x17, 0x37, 0x36, // ..!.4>.32..6..76 + 0x32, 0x17, 0x02, 0x32, 0x16, 0x14, 0x06, 0x22, 0x26, 0x34, 0x04, 0x22, 0x26, 0x34, 0x36, 0x32, // 2..2..."&4."&462 + 0x16, 0x14, 0x36, 0x32, 0x16, 0x14, 0x06, 0x22, 0x26, 0x34, 0x04, 0x32, 0x16, 0x14, 0x06, 0x22, // ..62..."&4.2..." + 0x26, 0x34, 0x04, 0x34, 0x36, 0x32, 0x16, 0x14, 0x06, 0x22, 0x24, 0x32, 0x16, 0x14, 0x06, 0x22, // &4.462..."$2..." + 0x26, 0x34, 0x04, 0x32, 0x16, 0x14, 0x06, 0x22, 0x26, 0x34, 0x04, 0x22, 0x26, 0x34, 0x36, 0x32, // &4.2..."&4."&462 + 0x16, 0x14, 0x36, 0x32, 0x16, 0x14, 0x06, 0x22, 0x26, 0x34, 0x04, 0x22, 0x26, 0x34, 0x36, 0x32, // ..62..."&4."&462 + 0x16, 0x14, 0x36, 0x32, 0x16, 0x14, 0x06, 0x22, 0x26, 0x34, 0x04, 0x32, 0x16, 0x14, 0x06, 0x22, // ..62..."&4.2..." + 0x26, 0x34, 0x24, 0x32, 0x16, 0x14, 0x06, 0x22, 0x26, 0x34, 0x06, 0x32, 0x16, 0x14, 0x06, 0x22, // &4$2..."&4.2..." + 0x26, 0x34, 0x06, 0x32, 0x16, 0x14, 0x06, 0x22, 0x26, 0x34, 0x05, 0x99, 0x0a, 0x0a, 0xfd, 0x8e, // &4.2..."&4...... + 0x0a, 0x1a, 0x0a, 0x52, 0x0a, 0x0a, 0x2c, 0x48, 0x13, 0x38, 0x4a, 0x66, 0x6a, 0x96, 0xff, 0x00, // ...R..,H.8Jfj... + 0x51, 0x8a, 0xbd, 0x68, 0x6a, 0xbe, 0x47, 0x5e, 0xce, 0x52, 0x2c, 0x0a, 0x1a, 0x0a, 0x21, 0x34, // Q..hj.G^.R,...!4 + 0x26, 0x26, 0x34, 0x26, 0x01, 0x5a, 0x34, 0x26, 0x26, 0x34, 0x26, 0xa6, 0x34, 0x26, 0x26, 0x34, // &&4&.Z4&&4&.4&&4 + 0x26, 0xfd, 0xa6, 0x34, 0x26, 0x26, 0x34, 0x26, 0x01, 0x00, 0x26, 0x34, 0x26, 0x26, 0x34, 0x01, // &..4&&4&..&4&&4. + 0x00, 0x34, 0x26, 0x26, 0x34, 0x26, 0xfd, 0xa6, 0x34, 0x26, 0x26, 0x34, 0x26, 0x01, 0x5a, 0x34, // .4&&4&..4&&4&.Z4 + 0x26, 0x26, 0x34, 0x26, 0xa6, 0x34, 0x26, 0x26, 0x34, 0x26, 0xfe, 0xda, 0x34, 0x26, 0x26, 0x34, // &&4&.4&&4&..4&&4 + 0x26, 0xa6, 0x34, 0x26, 0x26, 0x34, 0x26, 0xfe, 0xa6, 0x34, 0x26, 0x26, 0x34, 0x26, 0x01, 0x26, // &.4&&4&..4&&4&.& + 0x34, 0x26, 0x26, 0x34, 0x26, 0x5a, 0x34, 0x26, 0x26, 0x34, 0x26, 0x5a, 0x34, 0x26, 0x26, 0x34, // 4&&4&Z4&&4&Z4&&4 + 0x26, 0x05, 0x07, 0x0a, 0x1a, 0x0a, 0xfd, 0x8e, 0x0a, 0x0a, 0x52, 0x0a, 0x1a, 0x0a, 0x2c, 0x5b, // &.........R...,[ + 0xe8, 0x63, 0x47, 0x96, 0x6a, 0xfb, 0x00, 0x05, 0x00, 0x68, 0xbd, 0x8a, 0x51, 0x52, 0x4a, 0x27, // .cG.j....h..QRJ' + 0x1d, 0x41, 0x2c, 0x0a, 0x0a, 0xfe, 0xa7, 0x26, 0x34, 0x26, 0x26, 0x34, 0x5a, 0x26, 0x34, 0x26, // .A,....&4&&4Z&4& + 0x26, 0x34, 0x5a, 0x26, 0x34, 0x26, 0x26, 0x34, 0x5a, 0x26, 0x34, 0x26, 0x26, 0x34, 0x34, 0x34, // &4Z&4&&4Z&4&&444 + 0x26, 0x26, 0x34, 0x26, 0x80, 0x26, 0x34, 0x26, 0x26, 0x34, 0x5a, 0x26, 0x34, 0x26, 0x26, 0x34, // &&4&.&4&&4Z&4&&4 + 0x5a, 0x26, 0x34, 0x26, 0x26, 0x34, 0x5a, 0x26, 0x34, 0x26, 0x26, 0x34, 0xda, 0x26, 0x34, 0x26, // Z&4&&4Z&4&&4.&4& + 0x26, 0x34, 0x5a, 0x26, 0x34, 0x26, 0x26, 0x34, 0x5a, 0x26, 0x34, 0x26, 0x26, 0x34, 0x26, 0x26, // &4Z&4&&4Z&4&&4&& + 0x34, 0x26, 0x26, 0x34, 0x5a, 0x26, 0x34, 0x26, 0x26, 0x34, 0x5a, 0x26, 0x34, 0x26, 0x26, 0x34, // 4&&4Z&4&&4Z&4&&4 + 0x00, 0x11, 0x00, 0x00, 0xff, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x1d, 0x00, 0x25, 0x00, 0x2d, // .............%.- + 0x00, 0x35, 0x00, 0x3d, 0x00, 0x45, 0x00, 0x4d, 0x00, 0x7d, 0x00, 0x85, 0x00, 0x8d, 0x00, 0x95, // .5.=.E.M.}...... + 0x00, 0x9d, 0x00, 0xa5, 0x00, 0xad, 0x00, 0xb5, 0x00, 0xbd, 0x00, 0xc5, 0x00, 0x00, 0x01, 0x15, // ................ + 0x14, 0x07, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x06, 0x23, 0x21, 0x22, 0x27, // .....+."&=..#!"' + 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x26, 0x3d, 0x01, 0x00, 0x14, 0x06, 0x22, // ...+."&=.&=...." + 0x26, 0x34, 0x36, 0x32, 0x36, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x26, 0x14, 0x06, 0x22, // &4626.."&462&.." + 0x26, 0x34, 0x36, 0x32, 0x16, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x26, 0x14, 0x06, 0x22, // &462..."&462&.." + 0x26, 0x34, 0x36, 0x32, 0x26, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x01, 0x15, 0x14, 0x06, // &462&.."&462.... + 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x11, 0x34, 0x36, 0x33, 0x32, 0x17, // #!"&=.46;..4632. + 0x36, 0x16, 0x17, 0x37, 0x36, 0x1f, 0x01, 0x16, 0x07, 0x01, 0x06, 0x2f, 0x01, 0x26, 0x3f, 0x01, // 6..76....../.&?. + 0x2e, 0x01, 0x37, 0x26, 0x23, 0x22, 0x06, 0x15, 0x11, 0x21, 0x32, 0x16, 0x00, 0x14, 0x06, 0x22, // ..7&#"...!2...." + 0x26, 0x34, 0x36, 0x32, 0x26, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x26, 0x14, 0x06, 0x22, // &462&.."&462&.." + 0x26, 0x34, 0x36, 0x32, 0x16, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x26, 0x14, 0x06, 0x22, // &462..."&462&.." + 0x26, 0x34, 0x36, 0x32, 0x26, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x16, 0x14, 0x06, 0x22, // &462&.."&462..." + 0x26, 0x34, 0x36, 0x32, 0x26, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x16, 0x14, 0x06, 0x22, // &462&.."&462..." + 0x26, 0x34, 0x36, 0x32, 0x06, 0x80, 0x80, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x3f, 0x41, 0xfd, 0x00, // &462.....@..?A.. + 0x41, 0x3f, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x80, 0x02, 0x40, 0x12, 0x1c, 0x12, 0x12, 0x1c, 0x52, // A?..@....@.....R + 0x12, 0x1c, 0x12, 0x12, 0x1c, 0x2e, 0x12, 0x1c, 0x12, 0x12, 0x1c, 0x92, 0x12, 0x1c, 0x12, 0x12, // ................ + 0x1c, 0x2e, 0x12, 0x1c, 0x12, 0x12, 0x1c, 0x2e, 0x12, 0x1c, 0x12, 0x12, 0x1c, 0x04, 0x52, 0x12, // ..............R. + 0x0e, 0xf9, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x60, 0x96, 0x6a, 0x6c, 0x4c, 0x2e, 0x68, 0x29, 0x16, // ..@....`.jlL.h). + 0x0b, 0x0b, 0x2a, 0x0b, 0x0b, 0xfe, 0xc6, 0x0b, 0x0b, 0x2a, 0x0b, 0x0b, 0x16, 0x24, 0x09, 0x1c, // ..*......*...$.. + 0x25, 0x33, 0x35, 0x4b, 0x05, 0xe0, 0x0e, 0x12, 0xfc, 0x80, 0x12, 0x1c, 0x12, 0x12, 0x1c, 0x2e, // %35K............ + 0x12, 0x1c, 0x12, 0x12, 0x1c, 0x2e, 0x12, 0x1c, 0x12, 0x12, 0x1c, 0xd2, 0x12, 0x1c, 0x12, 0x12, // ................ + 0x1c, 0x2e, 0x12, 0x1c, 0x12, 0x12, 0x1c, 0x2e, 0x12, 0x1c, 0x12, 0x12, 0x1c, 0xd2, 0x12, 0x1c, // ................ + 0x12, 0x12, 0x1c, 0x2e, 0x12, 0x1c, 0x12, 0x12, 0x1c, 0x92, 0x12, 0x1c, 0x12, 0x12, 0x1c, 0x01, // ................ + 0xc0, 0xc0, 0xa9, 0x75, 0xc2, 0x0e, 0x12, 0x12, 0x0e, 0x76, 0x16, 0x16, 0x6e, 0x11, 0x17, 0x17, // ...u.....v..n... + 0x11, 0xba, 0x75, 0xa9, 0xc0, 0x01, 0xae, 0x1c, 0x12, 0x12, 0x1c, 0x12, 0x2e, 0x1c, 0x12, 0x12, // ..u............. + 0x1c, 0x12, 0x2e, 0x1c, 0x12, 0x12, 0x1c, 0x12, 0x12, 0x1c, 0x12, 0x12, 0x1c, 0x12, 0x2e, 0x1c, // ................ + 0x12, 0x12, 0x1c, 0x12, 0x2e, 0x1c, 0x12, 0x12, 0x1c, 0x12, 0xfd, 0xe0, 0x40, 0x0e, 0x12, 0x12, // ............@... + 0x0e, 0x40, 0x0e, 0x12, 0x02, 0x80, 0x6a, 0x96, 0x4e, 0x13, 0x0e, 0x20, 0x16, 0x0b, 0x0b, 0x2a, // .@....j.N.. ...* + 0x0b, 0x0b, 0xfe, 0xc6, 0x0b, 0x0b, 0x2a, 0x0b, 0x0b, 0x16, 0x2e, 0x74, 0x32, 0x23, 0x4b, 0x35, // ......*....t2#K5 + 0xfd, 0x80, 0x12, 0x01, 0xc0, 0x1c, 0x12, 0x12, 0x1c, 0x12, 0x2e, 0x1c, 0x12, 0x12, 0x1c, 0x12, // ................ + 0x2e, 0x1c, 0x12, 0x12, 0x1c, 0x12, 0x52, 0x1c, 0x12, 0x12, 0x1c, 0x12, 0x2e, 0x1c, 0x12, 0x12, // ......R......... + 0x1c, 0x12, 0x2e, 0x1c, 0x12, 0x12, 0x1c, 0x12, 0x52, 0x1c, 0x12, 0x12, 0x1c, 0x12, 0x2e, 0x1c, // ........R....... + 0x12, 0x12, 0x1c, 0x12, 0x12, 0x1c, 0x12, 0x12, 0x1c, 0x12, 0x00, 0x00, 0x00, 0x04, 0x00, 0x01, // ................ + 0xff, 0x00, 0x06, 0x00, 0x05, 0xfe, 0x00, 0x0d, 0x00, 0x40, 0x00, 0x48, 0x00, 0x71, 0x00, 0x00, // .........@.H.q.. + 0x01, 0x14, 0x07, 0x06, 0x07, 0x06, 0x20, 0x27, 0x26, 0x27, 0x26, 0x35, 0x34, 0x20, 0x01, 0x14, // ...... '&'&54 .. + 0x00, 0x07, 0x06, 0x26, 0x37, 0x36, 0x37, 0x36, 0x37, 0x36, 0x37, 0x36, 0x12, 0x35, 0x34, 0x02, // ...&76767676.54. + 0x24, 0x07, 0x0e, 0x03, 0x17, 0x16, 0x12, 0x17, 0x16, 0x17, 0x16, 0x17, 0x1e, 0x01, 0x17, 0x16, // $............... + 0x06, 0x27, 0x2e, 0x01, 0x02, 0x37, 0x36, 0x12, 0x36, 0x24, 0x37, 0x36, 0x04, 0x16, 0x12, 0x04, // .'...76.6$76.... + 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x01, 0x14, 0x06, 0x07, 0x06, 0x26, 0x27, 0x26, 0x27, // .."&462.....&'&' + 0x26, 0x37, 0x3e, 0x01, 0x35, 0x34, 0x2e, 0x01, 0x07, 0x0e, 0x01, 0x07, 0x06, 0x16, 0x17, 0x16, // &7>.54.......... + 0x07, 0x06, 0x07, 0x0e, 0x01, 0x27, 0x2e, 0x01, 0x37, 0x3e, 0x02, 0x37, 0x36, 0x1e, 0x01, 0x03, // .....'..7>.76... + 0xe2, 0x11, 0x1f, 0x18, 0x16, 0xfe, 0xfc, 0x16, 0x18, 0x1f, 0x11, 0x01, 0xc0, 0x02, 0x1e, 0xfe, // ................ + 0xf4, 0xd8, 0x08, 0x0e, 0x01, 0x07, 0x03, 0x04, 0x02, 0x01, 0x08, 0x9f, 0xc1, 0xb6, 0xfe, 0xc8, // ................ + 0xb5, 0x7c, 0xe2, 0xa1, 0x5f, 0x01, 0x01, 0xc4, 0x9f, 0x07, 0x02, 0x03, 0x03, 0x01, 0x08, 0x02, // .|.._........... + 0x01, 0x0f, 0x08, 0x94, 0xe2, 0x79, 0x08, 0x07, 0x76, 0xbf, 0x01, 0x03, 0x8f, 0xa4, 0x01, 0x2f, // .....y..v....../ + 0xdb, 0x83, 0xfd, 0xe2, 0x83, 0xba, 0x83, 0x83, 0xba, 0x01, 0xa3, 0x6b, 0x5d, 0x08, 0x10, 0x02, // ...........k]... + 0x06, 0x17, 0x07, 0x0a, 0x3a, 0x42, 0x75, 0xc6, 0x71, 0x85, 0xc0, 0x0d, 0x0a, 0x43, 0x41, 0x0a, // ....:Bu.q....CA. + 0x07, 0x18, 0x05, 0x02, 0x10, 0x08, 0x5f, 0x6b, 0x02, 0x03, 0x84, 0xde, 0x82, 0x90, 0xf8, 0x91, // ......_k........ + 0x01, 0x58, 0x56, 0x6f, 0xd7, 0x62, 0x5a, 0x5a, 0x62, 0xd7, 0x6e, 0x57, 0xa8, 0x01, 0x00, 0xf0, // .XVo.bZZb.nW.... + 0xfe, 0x7c, 0x56, 0x03, 0x0c, 0x09, 0x30, 0x12, 0x20, 0x0f, 0x09, 0x03, 0x51, 0x01, 0x32, 0xb8, // .|V...0. ...Q.2. + 0xb4, 0x01, 0x2d, 0xa8, 0x0a, 0x07, 0x6c, 0xad, 0xe7, 0x7d, 0xb8, 0xfe, 0xcf, 0x4f, 0x03, 0x09, // ..-...l..}...O.. + 0x15, 0x18, 0x09, 0x2f, 0x0c, 0x09, 0x0c, 0x04, 0x3a, 0xdf, 0x01, 0x31, 0xa7, 0x8f, 0x01, 0x05, // .../....:..1.... + 0xc1, 0x7a, 0x09, 0x0a, 0x71, 0xd0, 0xfe, 0xdb, 0x25, 0xba, 0x83, 0x83, 0xba, 0x83, 0xff, 0x00, // .z..q...%....... + 0x7a, 0xd5, 0x47, 0x06, 0x08, 0x0a, 0x34, 0x28, 0x0a, 0x0a, 0x36, 0x92, 0x52, 0x6f, 0xba, 0x61, // z.G...4(..6.Ro.a + 0x0c, 0x0f, 0xc4, 0x85, 0x5c, 0xa8, 0x3c, 0x0a, 0x0a, 0x29, 0x34, 0x09, 0x08, 0x06, 0x4a, 0xda, // ......<..)4...J. + 0x7d, 0x83, 0xe2, 0x89, 0x06, 0x07, 0x86, 0xf1, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x07, 0x00, // }............... + 0x05, 0x80, 0x00, 0x03, 0x00, 0x13, 0x00, 0x00, 0x25, 0x21, 0x11, 0x21, 0x01, 0x11, 0x14, 0x06, // ........%!.!.... + 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x00, 0x05, 0x00, // #!"&5.463!2..... + 0xfb, 0x00, 0x06, 0x00, 0x5e, 0x42, 0xfa, 0x40, 0x42, 0x5e, 0x5e, 0x42, 0x05, 0xc0, 0x42, 0x5e, // ....^B.@B^^B..B^ + 0x80, 0x03, 0x00, 0x01, 0x60, 0xfb, 0x40, 0x42, 0x5e, 0x5e, 0x42, 0x04, 0xc0, 0x42, 0x5e, 0x5e, // ....`.@B^^B..B^^ + 0x00, 0x01, 0x00, 0x00, 0xff, 0x80, 0x07, 0x00, 0x01, 0x80, 0x00, 0x0f, 0x00, 0x00, 0x25, 0x15, // ..............%. + 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x07, 0x00, // ..#!"&=.463!2... + 0x5e, 0x42, 0xfa, 0x40, 0x42, 0x5e, 0x5e, 0x42, 0x05, 0xc0, 0x42, 0x5e, 0xe0, 0xc0, 0x42, 0x5e, // ^B.@B^^B..B^..B^ + 0x5e, 0x42, 0xc0, 0x42, 0x5e, 0x5e, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x00, 0x08, 0x00, // ^B.B^^.......... + 0x06, 0x00, 0x00, 0x03, 0x00, 0x0c, 0x00, 0x26, 0x00, 0x00, 0x29, 0x01, 0x11, 0x29, 0x02, 0x11, // .......&..)..).. + 0x21, 0x11, 0x33, 0x32, 0x16, 0x15, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x11, 0x14, 0x06, 0x23, // !.32......#!...# + 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // !"&5.463!.463!2. + 0x01, 0x00, 0x03, 0x00, 0xfd, 0x00, 0x04, 0x00, 0x02, 0x00, 0xfd, 0x00, 0x60, 0x42, 0x5e, 0x03, // ............`B^. + 0x00, 0x5e, 0x42, 0xfd, 0xa0, 0x5e, 0x42, 0xfc, 0x40, 0x42, 0x5e, 0x5e, 0x42, 0x02, 0x60, 0x5e, // .^B..^B.@B^^B.`^ + 0x42, 0x03, 0xc0, 0x42, 0x5e, 0x02, 0x00, 0x03, 0x00, 0xff, 0x00, 0x5e, 0x42, 0x02, 0x00, 0xfc, // B..B^......^B... + 0x40, 0x42, 0x5e, 0xfe, 0xa0, 0x42, 0x5e, 0x5e, 0x42, 0x03, 0xc0, 0x42, 0x5e, 0x01, 0x60, 0x42, // @B^..B^^B..B^.`B + 0x5e, 0x5e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x07, 0x00, 0x05, 0x80, 0x00, 0x23, // ^^.............# + 0x00, 0x33, 0x00, 0x00, 0x25, 0x37, 0x36, 0x34, 0x2f, 0x01, 0x37, 0x36, 0x34, 0x2f, 0x01, 0x26, // .3..%764/.764/.& + 0x22, 0x0f, 0x01, 0x27, 0x26, 0x22, 0x0f, 0x01, 0x06, 0x14, 0x1f, 0x01, 0x07, 0x06, 0x14, 0x1f, // "..'&".......... + 0x01, 0x16, 0x32, 0x3f, 0x01, 0x17, 0x16, 0x32, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // ..2?...2....#!"& + 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x04, 0x97, 0x92, 0x0a, 0x0a, 0xe9, 0xe9, 0x0a, // 5.463!2......... + 0x0a, 0x92, 0x0a, 0x1a, 0x0a, 0xe9, 0xe9, 0x0a, 0x1a, 0x0a, 0x92, 0x0a, 0x0a, 0xe9, 0xe9, 0x0a, // ................ + 0x0a, 0x92, 0x0a, 0x1a, 0x0a, 0xe9, 0xe9, 0x0a, 0x1a, 0x02, 0x73, 0x5e, 0x42, 0xfa, 0x40, 0x42, // ..........s^B.@B + 0x5e, 0x5e, 0x42, 0x05, 0xc0, 0x42, 0x5e, 0xd7, 0x92, 0x0a, 0x1a, 0x0a, 0xe9, 0xe9, 0x0a, 0x1a, // ^^B..B^......... + 0x0a, 0x92, 0x0a, 0x0a, 0xe9, 0xe9, 0x0a, 0x0a, 0x92, 0x0a, 0x1a, 0x0a, 0xe9, 0xe9, 0x0a, 0x1a, // ................ + 0x0a, 0x92, 0x0a, 0x0a, 0xe9, 0xe9, 0x0a, 0x04, 0x13, 0xfb, 0x40, 0x42, 0x5e, 0x5e, 0x42, 0x04, // ..........@B^^B. + 0xc0, 0x42, 0x5e, 0x5e, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x07, 0x00, 0x05, 0x80, 0x00, 0x23, // .B^^...........# + 0x00, 0x27, 0x00, 0x37, 0x00, 0x00, 0x01, 0x07, 0x06, 0x22, 0x2f, 0x01, 0x07, 0x06, 0x22, 0x2f, // .'.7....."/..."/ + 0x01, 0x26, 0x34, 0x3f, 0x01, 0x27, 0x26, 0x34, 0x3f, 0x01, 0x36, 0x32, 0x1f, 0x01, 0x37, 0x36, // .&4?.'&4?.62..76 + 0x32, 0x1f, 0x01, 0x16, 0x14, 0x0f, 0x01, 0x17, 0x16, 0x14, 0x01, 0x21, 0x11, 0x21, 0x25, 0x11, // 2..........!.!%. + 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x04, 0xe9, // ..#!"&5.463!2... + 0x92, 0x0a, 0x1a, 0x0a, 0xa9, 0xa9, 0x0a, 0x1a, 0x0a, 0x92, 0x0a, 0x0a, 0xa9, 0xa9, 0x0a, 0x0a, // ................ + 0x92, 0x0a, 0x1a, 0x0a, 0xa9, 0xa9, 0x0a, 0x1a, 0x0a, 0x92, 0x0a, 0x0a, 0xa9, 0xa9, 0x0a, 0xfc, // ................ + 0x0d, 0x05, 0x00, 0xfb, 0x00, 0x06, 0x00, 0x5e, 0x42, 0xfa, 0x40, 0x42, 0x5e, 0x5e, 0x42, 0x05, // .......^B.@B^^B. + 0xc0, 0x42, 0x5e, 0x01, 0xa9, 0x92, 0x0a, 0x0a, 0xa9, 0xa9, 0x0a, 0x0a, 0x92, 0x0a, 0x1a, 0x0a, // .B^............. + 0xa9, 0xa9, 0x0a, 0x1a, 0x0a, 0x92, 0x0a, 0x0a, 0xa9, 0xa9, 0x0a, 0x0a, 0x92, 0x0a, 0x1a, 0x0a, // ................ + 0xa9, 0xa9, 0x0a, 0x1a, 0xfe, 0xcd, 0x04, 0x00, 0x60, 0xfb, 0x40, 0x42, 0x5e, 0x5e, 0x42, 0x04, // ........`.@B^^B. + 0xc0, 0x42, 0x5e, 0x5e, 0x00, 0x02, 0x00, 0x00, 0xff, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x03, // .B^^............ + 0x00, 0x13, 0x00, 0x00, 0x09, 0x01, 0x21, 0x01, 0x00, 0x10, 0x02, 0x06, 0x04, 0x20, 0x24, 0x26, // ......!...... $& + 0x02, 0x10, 0x12, 0x36, 0x24, 0x20, 0x04, 0x16, 0x04, 0x2e, 0x01, 0x32, 0xfd, 0x72, 0xfe, 0xce, // ...6$ .....2.r.. + 0x05, 0x60, 0x8e, 0xf0, 0xfe, 0xb4, 0xfe, 0x94, 0xfe, 0xb4, 0xf0, 0x8e, 0x8e, 0xf0, 0x01, 0x4c, // .`.............L + 0x01, 0x6c, 0x01, 0x4c, 0xf0, 0x01, 0x66, 0x02, 0x34, 0xfd, 0xcc, 0x01, 0xd0, 0xfe, 0x94, 0xfe, // .l.L..f.4....... + 0xb4, 0xf0, 0x8e, 0x8e, 0xf0, 0x01, 0x4c, 0x01, 0x6c, 0x01, 0x4c, 0xf0, 0x8e, 0x8e, 0xf0, 0x00, // ......L.l.L..... + 0x00, 0x07, 0x00, 0x00, 0xff, 0x00, 0x07, 0x02, 0x06, 0x00, 0x00, 0x07, 0x00, 0x13, 0x00, 0x23, // ...............# + 0x00, 0x2e, 0x00, 0x43, 0x00, 0xc4, 0x00, 0xd4, 0x00, 0x00, 0x01, 0x26, 0x0e, 0x01, 0x17, 0x16, // ...C.......&.... + 0x3e, 0x01, 0x05, 0x06, 0x22, 0x27, 0x26, 0x34, 0x37, 0x36, 0x32, 0x17, 0x16, 0x14, 0x17, 0x07, // >..."'&4762..... + 0x06, 0x22, 0x2f, 0x01, 0x26, 0x34, 0x3f, 0x01, 0x36, 0x32, 0x1f, 0x01, 0x16, 0x14, 0x27, 0x06, // ."/.&4?.62....'. + 0x22, 0x27, 0x26, 0x34, 0x37, 0x36, 0x32, 0x16, 0x14, 0x25, 0x0e, 0x01, 0x27, 0x2e, 0x01, 0x3e, // "'&4762..%..'..> + 0x02, 0x16, 0x17, 0x1e, 0x07, 0x0e, 0x01, 0x13, 0x36, 0x2e, 0x02, 0x27, 0x2e, 0x01, 0x07, 0x3e, // ........6..'...> + 0x01, 0x1f, 0x01, 0x36, 0x27, 0x3e, 0x01, 0x2f, 0x01, 0x3e, 0x01, 0x37, 0x36, 0x26, 0x27, 0x26, // ...6'>./.>.76&'& + 0x06, 0x07, 0x0e, 0x01, 0x1e, 0x01, 0x17, 0x2e, 0x01, 0x27, 0x26, 0x37, 0x26, 0x27, 0x22, 0x07, // .........'&7&'". + 0x3e, 0x01, 0x3f, 0x01, 0x34, 0x27, 0x2e, 0x01, 0x06, 0x07, 0x36, 0x37, 0x06, 0x1e, 0x01, 0x17, // >.?.4'....67.... + 0x06, 0x07, 0x0e, 0x01, 0x0f, 0x01, 0x0e, 0x01, 0x17, 0x16, 0x17, 0x06, 0x07, 0x06, 0x14, 0x16, // ................ + 0x37, 0x3e, 0x01, 0x37, 0x2e, 0x02, 0x07, 0x3e, 0x04, 0x33, 0x16, 0x37, 0x36, 0x35, 0x34, 0x27, // 7>.7...>.3.7654' + 0x16, 0x07, 0x0e, 0x01, 0x0f, 0x01, 0x0e, 0x05, 0x16, 0x17, 0x26, 0x27, 0x0e, 0x04, 0x16, 0x17, // ..........&'.... + 0x16, 0x36, 0x12, 0x37, 0x3e, 0x01, 0x37, 0x16, 0x17, 0x16, 0x37, 0x36, 0x12, 0x10, 0x02, 0x06, // .6.7>.7...76.... + 0x04, 0x20, 0x24, 0x26, 0x02, 0x10, 0x12, 0x36, 0x24, 0x20, 0x04, 0x16, 0x05, 0x0b, 0x0f, 0x28, // . $&...6$ .....( + 0x0c, 0x0b, 0x0e, 0x34, 0x10, 0xfe, 0x5a, 0x08, 0x17, 0x07, 0x08, 0x08, 0x07, 0x17, 0x08, 0x07, // ...4..Z......... + 0x9e, 0x23, 0x0c, 0x23, 0x0d, 0x26, 0x0c, 0x0c, 0x23, 0x0c, 0x23, 0x0d, 0x26, 0x0c, 0x79, 0x07, // .#.#.&..#.#.&.y. + 0x17, 0x08, 0x07, 0x07, 0x08, 0x16, 0x10, 0x01, 0x8b, 0x22, 0x93, 0x36, 0x26, 0x2e, 0x04, 0x4a, // .........".6&..J + 0x4d, 0x40, 0x26, 0x02, 0x16, 0x07, 0x13, 0x06, 0x0e, 0x03, 0x05, 0x03, 0x07, 0xc3, 0x03, 0x17, // M@&............. + 0x20, 0x22, 0x06, 0x28, 0x58, 0x45, 0x13, 0x2a, 0x0c, 0x0c, 0x02, 0x24, 0x06, 0x01, 0x03, 0x03, // ".(XE.*...$.... + 0x2b, 0x38, 0x06, 0x0a, 0x6a, 0x54, 0x3c, 0x6c, 0x1c, 0x1e, 0x07, 0x24, 0x33, 0x1f, 0x2d, 0x56, // +8..jT.?.3..# + 0x27, 0x2e, 0x01, 0x27, 0x26, 0x21, 0x11, 0x14, 0x16, 0x33, 0x21, 0x32, 0x3e, 0x04, 0x3f, 0x01, // '..'&!...3!2>.?. + 0x33, 0x06, 0x02, 0x07, 0x2e, 0x01, 0x27, 0x23, 0x21, 0x05, 0x35, 0x37, 0x3e, 0x01, 0x37, 0x13, // 3.....'#!.57>.7. + 0x12, 0x27, 0x2e, 0x01, 0x2f, 0x01, 0x35, 0x05, 0x21, 0x32, 0x37, 0x0e, 0x01, 0x0f, 0x01, 0x23, // .'../.5.!27....# + 0x27, 0x2e, 0x01, 0x23, 0x21, 0x22, 0x06, 0x02, 0x06, 0x67, 0xb1, 0x25, 0x25, 0x44, 0x2d, 0x11, // '..#!"...g.%%D-. + 0x21, 0x67, 0x0e, 0x07, 0x67, 0x1d, 0x0f, 0x3c, 0x36, 0x57, 0xfe, 0xf7, 0x57, 0x5a, 0x01, 0x65, // !g..g..<6W..WZ.e + 0x23, 0x31, 0x3d, 0x2f, 0x32, 0x2a, 0x12, 0x5d, 0x59, 0x06, 0x33, 0x05, 0x92, 0xeb, 0x2d, 0x2c, // #1=/2*.]Y.3...-, + 0xfd, 0x8c, 0xfe, 0x88, 0x7f, 0x43, 0x31, 0x01, 0x08, 0x03, 0x0b, 0x02, 0x2f, 0x44, 0x7f, 0x01, // .....C1...../D.. + 0x78, 0x02, 0xbe, 0x8b, 0xeb, 0x06, 0x10, 0x04, 0x05, 0x5d, 0x20, 0x1f, 0x56, 0x46, 0xfd, 0xdc, // x........] .VF.. + 0x1c, 0x0f, 0x05, 0x49, 0xfd, 0x71, 0x01, 0x05, 0x03, 0x03, 0x02, 0x2d, 0x48, 0x8e, 0xfe, 0xbe, // ...I.q.....-H... + 0xfe, 0xc1, 0x7f, 0x44, 0x32, 0x01, 0x08, 0xfd, 0xd4, 0x4e, 0x4b, 0x04, 0x0b, 0x19, 0x27, 0x3e, // ...D2....NK...'> + 0x2a, 0xd8, 0x25, 0xfe, 0x52, 0x3d, 0x05, 0x06, 0x01, 0x0c, 0x66, 0x19, 0x0d, 0x30, 0x37, 0x02, // *.%.R=....f..07. + 0x83, 0x01, 0x92, 0xf3, 0x3d, 0x2e, 0x0d, 0x18, 0x66, 0x0c, 0x1b, 0x44, 0xfd, 0x5d, 0x5c, 0x7c, // ....=...f..D.].| + 0x79, 0x75, 0x11, 0x00, 0x00, 0x07, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x11, // yu.............. + 0x00, 0x2c, 0x00, 0x30, 0x00, 0x3e, 0x00, 0x53, 0x00, 0x65, 0x00, 0x75, 0x00, 0x00, 0x01, 0x15, // .,.0.>.S.e.u.... + 0x14, 0x16, 0x0e, 0x04, 0x23, 0x11, 0x32, 0x1e, 0x03, 0x1c, 0x01, 0x05, 0x15, 0x14, 0x16, 0x0e, // ....#.2......... + 0x02, 0x23, 0x22, 0x27, 0x26, 0x35, 0x3c, 0x03, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x03, 0x1c, 0x01, // .#"'&5<.>.32.... + 0x05, 0x33, 0x11, 0x23, 0x01, 0x33, 0x11, 0x23, 0x07, 0x26, 0x27, 0x23, 0x11, 0x33, 0x11, 0x13, // .3.#.3.#.&'#.3.. + 0x33, 0x13, 0x05, 0x34, 0x27, 0x2e, 0x05, 0x22, 0x23, 0x22, 0x2b, 0x01, 0x11, 0x32, 0x33, 0x16, // 3..4'.."#"+..23. + 0x36, 0x27, 0x26, 0x05, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x07, 0x35, 0x23, 0x11, 0x33, 0x37, // 6'&.54..#".5#.37 + 0x16, 0x33, 0x32, 0x36, 0x13, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, // .326....#!"&5.46 + 0x33, 0x21, 0x32, 0x16, 0x03, 0x9a, 0x01, 0x01, 0x02, 0x05, 0x08, 0x0e, 0x09, 0x09, 0x0e, 0x08, // 3!2............. + 0x05, 0x02, 0x01, 0x3c, 0x01, 0x01, 0x04, 0x0b, 0x08, 0x09, 0x05, 0x04, 0x03, 0x04, 0x06, 0x05, // ...<............ + 0x06, 0x08, 0x05, 0x03, 0x01, 0xfb, 0xde, 0x7a, 0x7a, 0x01, 0xb2, 0x6a, 0x9f, 0x1c, 0x14, 0x0c, // .......zz..j.... + 0x9e, 0x6b, 0x2d, 0x4c, 0x2b, 0x01, 0xa9, 0x05, 0x03, 0x10, 0x12, 0x20, 0x15, 0x29, 0x11, 0x15, // .k-L+...... .).. + 0x08, 0x04, 0x5b, 0x14, 0x24, 0xa9, 0x38, 0x03, 0x01, 0x01, 0x3d, 0x04, 0x0f, 0x22, 0x1d, 0x2e, // ..[.$.8...=..".. + 0x1f, 0x75, 0x6e, 0x07, 0x1e, 0x2f, 0x32, 0x20, 0xb4, 0x5e, 0x42, 0xfb, 0x40, 0x42, 0x5e, 0x5e, // .un../2 .^B.@B^^ + 0x42, 0x04, 0xc0, 0x42, 0x5e, 0x02, 0xe3, 0xb6, 0x04, 0x16, 0x08, 0x10, 0x07, 0x08, 0x03, 0x01, // B..B^........... + 0x35, 0x02, 0x08, 0x03, 0x10, 0x05, 0x16, 0x63, 0x79, 0x01, 0x17, 0x08, 0x0f, 0x06, 0x09, 0x0a, // 5......cy....... + 0x9b, 0x02, 0x0a, 0x07, 0x0b, 0x06, 0x08, 0x03, 0x03, 0x06, 0x06, 0x0b, 0x05, 0x0e, 0xee, 0x01, // ................ + 0xd8, 0xfe, 0x28, 0x01, 0xd8, 0xdd, 0x94, 0x49, 0xfe, 0x28, 0x01, 0x38, 0xfe, 0xc8, 0x01, 0x3f, // ..(....I.(.8...? + 0x0e, 0x43, 0x17, 0x10, 0x19, 0x10, 0x0c, 0x05, 0x03, 0xfe, 0x28, 0x01, 0x33, 0x9b, 0x3e, 0x9f, // .C........(.3.>. + 0x85, 0x1d, 0x20, 0x23, 0x0f, 0x22, 0x9a, 0xfe, 0x28, 0x1e, 0x24, 0x3d, 0x03, 0x12, 0xfb, 0x40, // .. #."..(.$=...@ + 0x42, 0x5e, 0x5e, 0x42, 0x04, 0xc0, 0x42, 0x5e, 0x5e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x30, // B^^B..B^^......0 + 0xff, 0x02, 0x08, 0x4b, 0x05, 0xf8, 0x00, 0x0c, 0x00, 0x15, 0x00, 0x1a, 0x00, 0x53, 0x00, 0x8f, // ...K.........S.. + 0x00, 0x00, 0x05, 0x26, 0x27, 0x2e, 0x04, 0x27, 0x26, 0x27, 0x16, 0x00, 0x01, 0x17, 0x2e, 0x01, // ...&'..'&'...... + 0x2f, 0x01, 0x06, 0x07, 0x16, 0x13, 0x06, 0x07, 0x36, 0x37, 0x01, 0x34, 0x02, 0x26, 0x24, 0x23, // /.......67.4.&$# + 0x22, 0x04, 0x07, 0x06, 0x07, 0x3e, 0x03, 0x1f, 0x01, 0x1e, 0x03, 0x07, 0x26, 0x0e, 0x02, 0x07, // "....>......&... + 0x1e, 0x02, 0x17, 0x16, 0x3e, 0x02, 0x3f, 0x01, 0x3e, 0x01, 0x16, 0x17, 0x16, 0x07, 0x06, 0x05, // ....>.?.>....... + 0x06, 0x27, 0x1e, 0x03, 0x1f, 0x01, 0x16, 0x37, 0x36, 0x12, 0x13, 0x06, 0x07, 0x06, 0x02, 0x07, // .'.....76....... + 0x06, 0x07, 0x06, 0x27, 0x06, 0x23, 0x20, 0x00, 0x03, 0x22, 0x26, 0x23, 0x06, 0x1e, 0x02, 0x1f, // ...'.# .."&#.... + 0x01, 0x16, 0x17, 0x2e, 0x03, 0x2f, 0x01, 0x2e, 0x06, 0x27, 0x1e, 0x02, 0x17, 0x37, 0x36, 0x37, // ...../...'...767 + 0x36, 0x37, 0x36, 0x37, 0x3e, 0x01, 0x37, 0x36, 0x24, 0x04, 0x17, 0x16, 0x12, 0x04, 0x77, 0x06, // 6767>.76$.....w. + 0x05, 0x0d, 0x2e, 0x7e, 0x6b, 0x75, 0x1f, 0x11, 0x9e, 0x42, 0x01, 0x52, 0xfe, 0x5d, 0xa8, 0x19, // ...~ku...B.R.].. + 0x20, 0x03, 0x04, 0x54, 0x25, 0x05, 0x7a, 0x2b, 0x22, 0x2c, 0x1e, 0x05, 0xa0, 0x7c, 0xd3, 0xfe, // ..T%.z+",...|.. + 0xde, 0x9f, 0x93, 0xfe, 0xf4, 0x6a, 0x1e, 0x0f, 0x3c, 0xa6, 0x97, 0x87, 0x29, 0x28, 0x21, 0x28, // .....j..<...)(!( + 0x09, 0x04, 0x03, 0x7e, 0xcb, 0xa3, 0x7a, 0x46, 0x04, 0x0f, 0x38, 0x22, 0x7b, 0xf9, 0xb4, 0x91, // ...~..zF..8"{... + 0x25, 0x25, 0x16, 0x23, 0x1a, 0x04, 0x0e, 0x35, 0xd0, 0xfe, 0xfd, 0x87, 0xb6, 0x29, 0x8a, 0x88, // %%.#...5.....).. + 0x7d, 0x27, 0x27, 0x8f, 0x78, 0xc3, 0xee, 0x4a, 0x0e, 0x1a, 0x46, 0xdf, 0xcf, 0x30, 0x22, 0x48, // }''.x..J..F..0"H + 0x5b, 0x24, 0x25, 0xfe, 0xe5, 0xfe, 0x45, 0x4a, 0x01, 0x06, 0x02, 0x06, 0x11, 0x23, 0x25, 0x0d, // [$%...EJ.....#%. + 0x0e, 0x08, 0x2e, 0x47, 0x6b, 0x32, 0x1d, 0x03, 0x02, 0x05, 0x39, 0x28, 0x42, 0x31, 0x33, 0x22, // ...Gk2....9(B13" + 0x08, 0x13, 0x3f, 0xa3, 0x40, 0x02, 0x0b, 0x53, 0x29, 0x87, 0x1c, 0x35, 0x0f, 0x22, 0x20, 0x9e, // ..?.@..S)..5." . + 0x01, 0x23, 0x01, 0x39, 0x96, 0xdc, 0xe2, 0xc5, 0x01, 0x03, 0x08, 0x1e, 0x64, 0x6d, 0xab, 0x57, // .#.9........dm.W + 0x03, 0x22, 0xd5, 0xfe, 0xd6, 0x02, 0x3b, 0x1c, 0x4c, 0xb7, 0x36, 0x35, 0x52, 0x8e, 0x41, 0x02, // ."....;.L.65R.A. + 0x30, 0x40, 0x54, 0x2e, 0x16, 0xfe, 0x9e, 0xa1, 0x01, 0x24, 0xd4, 0x7d, 0x69, 0x60, 0x3a, 0x66, // 0@T......$.}i`:f + 0x33, 0x41, 0x15, 0x06, 0x04, 0x03, 0x01, 0x1d, 0x25, 0x25, 0x0a, 0x0b, 0x15, 0x42, 0x4d, 0x3c, // 3A......%%...BM< + 0x24, 0x71, 0xf3, 0x3a, 0x06, 0x29, 0x42, 0x44, 0x19, 0x18, 0x10, 0x09, 0x13, 0x19, 0x61, 0x18, // $q.:.)BD......a. + 0x61, 0x25, 0x14, 0x04, 0x60, 0xa1, 0x5d, 0x41, 0x0b, 0x0c, 0x17, 0x26, 0x63, 0x01, 0x7c, 0x01, // a%..`.]A...&c.|. + 0x09, 0x87, 0x4d, 0xd0, 0xfe, 0xeb, 0x73, 0x21, 0x0b, 0x1a, 0x0a, 0x03, 0x01, 0x5a, 0x01, 0x0d, // ..M...s!.....Z.. + 0x01, 0x32, 0x7d, 0x69, 0x5b, 0x1a, 0x1a, 0x0c, 0x46, 0x26, 0x89, 0x8f, 0x83, 0x2a, 0x2a, 0x02, // .2}i[...F&...**. + 0x15, 0x0f, 0x1a, 0x18, 0x1b, 0x1b, 0x0c, 0x0a, 0x1f, 0x3c, 0x08, 0x20, 0x95, 0x8d, 0xca, 0xa3, // .........<. .... + 0x73, 0x63, 0x1c, 0x22, 0x0f, 0x4a, 0x3c, 0x26, 0x4e, 0x73, 0xfe, 0x46, 0x00, 0x05, 0x00, 0x25, // sc.".J<&Ns.F...% + 0xff, 0x0c, 0x06, 0xd8, 0x05, 0xf4, 0x00, 0x17, 0x00, 0x30, 0x00, 0x40, 0x00, 0x57, 0x00, 0x6d, // .........0.@.W.m + 0x00, 0x00, 0x01, 0x36, 0x26, 0x27, 0x2e, 0x01, 0x06, 0x07, 0x06, 0x16, 0x17, 0x1e, 0x02, 0x17, // ...6&'.......... + 0x1e, 0x07, 0x36, 0x01, 0x0e, 0x02, 0x04, 0x24, 0x2e, 0x01, 0x02, 0x37, 0x3e, 0x03, 0x37, 0x06, // ..6....$...7>.7. + 0x1a, 0x01, 0x0c, 0x01, 0x24, 0x37, 0x36, 0x07, 0x14, 0x02, 0x14, 0x0e, 0x02, 0x22, 0x2e, 0x02, // ....$76......".. + 0x34, 0x3e, 0x02, 0x32, 0x1e, 0x01, 0x05, 0x2e, 0x01, 0x2c, 0x01, 0x0c, 0x01, 0x06, 0x02, 0x17, // 4>.2.....,...... + 0x26, 0x02, 0x3e, 0x04, 0x1e, 0x02, 0x17, 0x1e, 0x01, 0x03, 0x36, 0x00, 0x27, 0x22, 0x27, 0x26, // &.>.......6.'"'& + 0x37, 0x1e, 0x04, 0x0e, 0x03, 0x07, 0x3e, 0x03, 0x05, 0x3d, 0x1d, 0x47, 0x56, 0x3a, 0x87, 0x65, // 7.....>..=.GV:.e + 0x12, 0x0c, 0x0f, 0x23, 0x17, 0x1f, 0x3a, 0x1b, 0x24, 0x3f, 0x2b, 0x25, 0x18, 0x14, 0x0d, 0x0b, // ...#..:.$?+%.... + 0x0a, 0x01, 0x71, 0x34, 0xc1, 0xec, 0xfe, 0xf2, 0xfe, 0xfa, 0xf0, 0xb4, 0x67, 0x05, 0x01, 0x0f, // ..q4........g... + 0x0a, 0x26, 0x04, 0x33, 0x68, 0xf2, 0x01, 0x54, 0x01, 0x60, 0x01, 0x5a, 0x74, 0x14, 0x02, 0xf3, // .&.3h..T.`.Zt... + 0x51, 0x88, 0xbc, 0xd0, 0xbc, 0x88, 0x51, 0x51, 0x88, 0xbc, 0xd0, 0xbc, 0x88, 0x01, 0x70, 0x41, // Q.....QQ......pA + 0xe7, 0xfe, 0xed, 0xfe, 0xcb, 0xfe, 0xdb, 0xfe, 0xfe, 0xb6, 0x50, 0x1e, 0x31, 0x05, 0x4c, 0x8e, // ..........P.1.L. + 0xbd, 0xe1, 0xef, 0xf6, 0xe2, 0xce, 0x4b, 0x21, 0x3a, 0x3c, 0x0c, 0xfe, 0xd7, 0xf8, 0x08, 0x02, // ......K!:<...... + 0x02, 0x1a, 0x7d, 0xd2, 0x88, 0x60, 0x15, 0x17, 0x64, 0x91, 0xe1, 0x88, 0x6c, 0xbb, 0xa1, 0x62, // ..}..`..d...l..b + 0x02, 0xf0, 0x2c, 0xab, 0x39, 0x27, 0x1d, 0x14, 0x1b, 0x17, 0x0a, 0x05, 0x03, 0x04, 0x0f, 0x0a, // ..,.9'.......... + 0x0d, 0x25, 0x25, 0x28, 0x24, 0x21, 0x18, 0x0d, 0x01, 0xfd, 0xcb, 0x7f, 0xba, 0x61, 0x18, 0x33, // .%%($!.......a.3 + 0x83, 0xc0, 0x01, 0x17, 0xa4, 0x29, 0x57, 0x29, 0x78, 0x0d, 0xd0, 0xfe, 0x86, 0xfe, 0xfe, 0x9a, // .....)W)x....... + 0x0c, 0xa1, 0xa4, 0x1b, 0x0d, 0x04, 0x02, 0x1f, 0xd0, 0xbe, 0x8a, 0x51, 0x51, 0x8a, 0xbe, 0xd0, // ...........QQ... + 0xbe, 0x8a, 0x51, 0x51, 0x8a, 0x06, 0x93, 0xd0, 0x63, 0x08, 0x51, 0xb1, 0xf6, 0xfe, 0xa4, 0xc7, // ..QQ....c.Q..... + 0xa1, 0x01, 0x2d, 0xf4, 0xd2, 0x97, 0x65, 0x29, 0x17, 0x55, 0xa4, 0x73, 0x32, 0x8e, 0xfe, 0x81, // ..-...e).U.s2... + 0xf4, 0x01, 0x58, 0x44, 0x05, 0x05, 0x03, 0x04, 0x5c, 0x94, 0xbd, 0xd1, 0xcf, 0xbc, 0x92, 0x59, // ..XD...........Y + 0x02, 0x1e, 0x64, 0x92, 0xcf, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // ..d............. + 0x06, 0x00, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x3f, 0x00, 0x4f, 0x00, 0x5f, 0x00, 0x6f, // ......./.?.O._.o + 0x00, 0x7f, 0x00, 0x8f, 0x00, 0x9f, 0x00, 0xaf, 0x00, 0x00, 0x13, 0x15, 0x23, 0x22, 0x3d, 0x01, // ............#"=. + 0x23, 0x22, 0x3d, 0x01, 0x34, 0x3b, 0x01, 0x35, 0x34, 0x33, 0x13, 0x15, 0x23, 0x22, 0x3d, 0x01, // #"=.4;.543..#"=. + 0x23, 0x22, 0x3d, 0x01, 0x34, 0x3b, 0x01, 0x35, 0x34, 0x33, 0x13, 0x15, 0x23, 0x22, 0x3d, 0x01, // #"=.4;.543..#"=. + 0x23, 0x22, 0x3d, 0x01, 0x34, 0x3b, 0x01, 0x35, 0x34, 0x33, 0x13, 0x15, 0x23, 0x22, 0x3d, 0x01, // #"=.4;.543..#"=. + 0x23, 0x22, 0x3d, 0x01, 0x34, 0x3b, 0x01, 0x35, 0x34, 0x33, 0x13, 0x15, 0x23, 0x22, 0x3d, 0x01, // #"=.4;.543..#"=. + 0x23, 0x22, 0x3d, 0x01, 0x34, 0x3b, 0x01, 0x35, 0x34, 0x33, 0x25, 0x11, 0x14, 0x06, 0x23, 0x21, // #"=.4;.543%...#! + 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x15, 0x14, 0x2b, 0x01, 0x15, // "&5.463!2....+.. + 0x14, 0x2b, 0x01, 0x35, 0x33, 0x32, 0x1d, 0x01, 0x33, 0x32, 0x35, 0x15, 0x14, 0x2b, 0x01, 0x15, // .+.532..325..+.. + 0x14, 0x2b, 0x01, 0x35, 0x33, 0x32, 0x1d, 0x01, 0x33, 0x32, 0x35, 0x15, 0x14, 0x2b, 0x01, 0x15, // .+.532..325..+.. + 0x14, 0x2b, 0x01, 0x35, 0x33, 0x32, 0x1d, 0x01, 0x33, 0x32, 0x35, 0x15, 0x14, 0x2b, 0x01, 0x15, // .+.532..325..+.. + 0x14, 0x2b, 0x01, 0x35, 0x33, 0x32, 0x1d, 0x01, 0x33, 0x32, 0x35, 0x15, 0x14, 0x2b, 0x01, 0x15, // .+.532..325..+.. + 0x14, 0x2b, 0x01, 0x35, 0x33, 0x32, 0x1d, 0x01, 0x33, 0x32, 0xc0, 0x70, 0x10, 0x30, 0x10, 0x10, // .+.532..32.p.0.. + 0x30, 0x10, 0x70, 0x70, 0x10, 0x30, 0x10, 0x10, 0x30, 0x10, 0x70, 0x70, 0x10, 0x30, 0x10, 0x10, // 0.pp.0..0.pp.0.. + 0x30, 0x10, 0x70, 0x70, 0x10, 0x30, 0x10, 0x10, 0x30, 0x10, 0x70, 0x70, 0x10, 0x30, 0x10, 0x10, // 0.pp.0..0.pp.0.. + 0x30, 0x10, 0x04, 0xb0, 0x38, 0x28, 0xfc, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x03, 0x40, 0x28, 0x38, // 0...8(..(88(.@(8 + 0x01, 0x00, 0x10, 0x30, 0x10, 0x70, 0x70, 0x10, 0x30, 0x10, 0x10, 0x30, 0x10, 0x70, 0x70, 0x10, // ...0.pp.0..0.pp. + 0x30, 0x10, 0x10, 0x30, 0x10, 0x70, 0x70, 0x10, 0x30, 0x10, 0x10, 0x30, 0x10, 0x70, 0x70, 0x10, // 0..0.pp.0..0.pp. + 0x30, 0x10, 0x10, 0x30, 0x10, 0x70, 0x70, 0x10, 0x30, 0x10, 0x01, 0x00, 0x80, 0x10, 0x10, 0x10, // 0..0.pp.0....... + 0x20, 0x10, 0x10, 0x10, 0x01, 0x00, 0x80, 0x10, 0x10, 0x10, 0x20, 0x10, 0x10, 0x10, 0x01, 0x00, // ......... ..... + 0x80, 0x10, 0x10, 0x10, 0x20, 0x10, 0x10, 0x10, 0x01, 0x00, 0x80, 0x10, 0x10, 0x10, 0x20, 0x10, // .... ......... . + 0x10, 0x10, 0x01, 0x00, 0x80, 0x10, 0x10, 0x10, 0x20, 0x10, 0x10, 0x10, 0xa0, 0xfa, 0x40, 0x28, // ........ .....@( + 0x38, 0x38, 0x28, 0x05, 0xc0, 0x28, 0x38, 0x38, 0xfb, 0x08, 0x20, 0x10, 0x10, 0x10, 0x80, 0x10, // 88(..(88.. ..... + 0x10, 0xf0, 0x20, 0x10, 0x10, 0x10, 0x80, 0x10, 0x10, 0xf0, 0x20, 0x10, 0x10, 0x10, 0x80, 0x10, // .. ....... ..... + 0x10, 0xf0, 0x20, 0x10, 0x10, 0x10, 0x80, 0x10, 0x10, 0xf0, 0x20, 0x10, 0x10, 0x10, 0x80, 0x10, // .. ....... ..... + 0x10, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x2f, 0xff, 0x00, 0x06, 0x51, 0x06, 0x00, 0x00, 0x90, // ......./...Q.... + 0x00, 0x00, 0x01, 0x07, 0x17, 0x1e, 0x01, 0x07, 0x0e, 0x01, 0x2f, 0x01, 0x17, 0x16, 0x06, 0x26, // ........../....& + 0x27, 0x03, 0x25, 0x11, 0x17, 0x1e, 0x01, 0x0e, 0x01, 0x26, 0x2f, 0x01, 0x15, 0x14, 0x06, 0x22, // '.%......&/...." + 0x26, 0x3d, 0x01, 0x07, 0x0e, 0x01, 0x2e, 0x01, 0x36, 0x3f, 0x01, 0x11, 0x05, 0x03, 0x0e, 0x01, // &=......6?...... + 0x26, 0x3f, 0x01, 0x07, 0x06, 0x26, 0x27, 0x26, 0x36, 0x3f, 0x01, 0x27, 0x2e, 0x01, 0x3e, 0x01, // &?...&'&6?.'..>. + 0x17, 0x05, 0x2d, 0x01, 0x05, 0x06, 0x23, 0x22, 0x2e, 0x01, 0x36, 0x3f, 0x01, 0x27, 0x2e, 0x01, // ..-...#"..6?.'.. + 0x3e, 0x01, 0x1f, 0x01, 0x27, 0x26, 0x36, 0x16, 0x17, 0x13, 0x05, 0x11, 0x27, 0x2e, 0x01, 0x3e, // >...'&6.....'..> + 0x01, 0x16, 0x1f, 0x01, 0x35, 0x34, 0x36, 0x32, 0x16, 0x1d, 0x01, 0x37, 0x3e, 0x01, 0x1e, 0x01, // ....5462...7>... + 0x06, 0x0f, 0x01, 0x11, 0x25, 0x13, 0x3e, 0x01, 0x16, 0x0f, 0x01, 0x37, 0x36, 0x16, 0x17, 0x16, // ....%.>....76... + 0x06, 0x0f, 0x01, 0x17, 0x1e, 0x01, 0x0e, 0x01, 0x23, 0x22, 0x27, 0x25, 0x0d, 0x01, 0x25, 0x36, // ........#"'%..%6 + 0x1e, 0x01, 0x06, 0x06, 0x1e, 0xa7, 0xba, 0x17, 0x0d, 0x0d, 0x0e, 0x32, 0x17, 0xba, 0x37, 0x0d, // ...........2..7. + 0x32, 0x47, 0x0d, 0x66, 0xfe, 0xf1, 0xd0, 0x10, 0x02, 0x18, 0x21, 0x29, 0x10, 0x70, 0x26, 0x34, // 2G.f......!).p&4 + 0x26, 0x70, 0x10, 0x29, 0x21, 0x18, 0x02, 0x10, 0xd0, 0xfe, 0xf1, 0x66, 0x0d, 0x47, 0x32, 0x0d, // &p.)!......f.G2. + 0x37, 0xba, 0x17, 0x32, 0x0e, 0x0d, 0x0d, 0x17, 0xba, 0xa7, 0x1d, 0x1a, 0x09, 0x2a, 0x1d, 0x01, // 7..2.........*.. + 0x36, 0x01, 0x0f, 0xfe, 0xf1, 0xfe, 0xca, 0x04, 0x09, 0x1b, 0x22, 0x04, 0x1a, 0x1b, 0xa7, 0xba, // 6........."..... + 0x17, 0x0d, 0x1a, 0x34, 0x16, 0xba, 0x37, 0x0d, 0x32, 0x47, 0x0d, 0x66, 0x01, 0x0f, 0xd0, 0x10, // ...4..7.2G.f.... + 0x02, 0x18, 0x21, 0x29, 0x10, 0x70, 0x26, 0x34, 0x26, 0x70, 0x10, 0x29, 0x21, 0x18, 0x02, 0x10, // ..!).p&4&p.)!... + 0xd0, 0x01, 0x0f, 0x66, 0x0d, 0x47, 0x32, 0x0d, 0x37, 0xba, 0x17, 0x32, 0x0e, 0x0d, 0x0d, 0x17, // ...f.G2.7..2.... + 0xba, 0xa7, 0x1b, 0x1a, 0x04, 0x22, 0x1b, 0x09, 0x04, 0xfe, 0xca, 0xfe, 0xf1, 0x01, 0x0f, 0x01, // .....".......... + 0x36, 0x1d, 0x2a, 0x09, 0x1a, 0x01, 0xa3, 0x21, 0x6b, 0x0d, 0x33, 0x17, 0x17, 0x0d, 0x0d, 0x6a, // 6.*....!k.3....j + 0xa0, 0x26, 0x33, 0x0a, 0x25, 0x01, 0x2c, 0x9c, 0xfe, 0xc7, 0xee, 0x12, 0x2a, 0x1f, 0x13, 0x08, // .&3.%.,.....*... + 0x12, 0x80, 0xd6, 0x1a, 0x26, 0x26, 0x1a, 0xd6, 0x80, 0x12, 0x08, 0x13, 0x1f, 0x2a, 0x12, 0xee, // ....&&.......*.. + 0x01, 0x39, 0x9c, 0xfe, 0xd4, 0x25, 0x0a, 0x33, 0x26, 0xa0, 0x6a, 0x0d, 0x0d, 0x17, 0x17, 0x33, // .9...%.3&.j....3 + 0x0d, 0x6b, 0x21, 0x06, 0x2e, 0x2f, 0x21, 0x06, 0x3e, 0x9d, 0x9d, 0x3e, 0x01, 0x24, 0x2c, 0x2a, // .k!../!.>..>.$,* + 0x05, 0x21, 0x6b, 0x0d, 0x33, 0x2e, 0x0e, 0x0e, 0x6a, 0xa0, 0x26, 0x33, 0x0a, 0x25, 0xfe, 0xd4, // .!k.3...j.&3.%.. + 0x9c, 0x01, 0x39, 0xee, 0x12, 0x2a, 0x1f, 0x13, 0x08, 0x12, 0x80, 0xd6, 0x1a, 0x26, 0x26, 0x1a, // ..9..*.......&&. + 0xd6, 0x80, 0x12, 0x08, 0x13, 0x1f, 0x2a, 0x12, 0xee, 0xfe, 0xc7, 0x9c, 0x01, 0x2c, 0x25, 0x0a, // ......*......,%. + 0x33, 0x26, 0xa0, 0x6a, 0x0d, 0x0d, 0x17, 0x17, 0x33, 0x0d, 0x6b, 0x21, 0x05, 0x2a, 0x2c, 0x24, // 3&.j....3.k!.*,$ + 0x01, 0x3e, 0x9d, 0x9d, 0x3e, 0x06, 0x21, 0x2f, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // .>..>.!/........ + 0xff, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x12, 0x00, 0x26, 0x00, 0x00, 0x01, 0x36, 0x2e, 0x02, // .........&...6.. + 0x27, 0x26, 0x0e, 0x02, 0x07, 0x06, 0x1e, 0x02, 0x17, 0x16, 0x24, 0x12, 0x09, 0x01, 0x16, 0x12, // '&........$..... + 0x07, 0x06, 0x02, 0x04, 0x07, 0x05, 0x01, 0x26, 0x02, 0x37, 0x36, 0x12, 0x24, 0x37, 0x36, 0x24, // .......&.76.$76$ + 0x05, 0xc1, 0x07, 0x50, 0x92, 0xd0, 0x75, 0x74, 0xdb, 0xa5, 0x69, 0x07, 0x07, 0x50, 0x92, 0xd1, // ...P..ut..i..P.. + 0x75, 0x9b, 0x01, 0x14, 0xac, 0x01, 0x47, 0xfe, 0xa3, 0x78, 0x79, 0x0a, 0x0b, 0xb6, 0xfe, 0xd4, // u.....G..xy..... + 0xb6, 0xfc, 0x19, 0x01, 0x5b, 0x78, 0x79, 0x0a, 0x0b, 0xb6, 0x01, 0x2d, 0xb6, 0xa7, 0x02, 0x9a, // ....[xy....-.... + 0x02, 0x5f, 0x76, 0xd9, 0xa1, 0x65, 0x07, 0x07, 0x4e, 0x8f, 0xcf, 0x75, 0x76, 0xd9, 0xa1, 0x65, // ._v..e..N..uv..e + 0x07, 0x09, 0x88, 0x00, 0xff, 0x04, 0x3d, 0xfe, 0xa4, 0x75, 0xfe, 0xca, 0xa6, 0xb7, 0xfe, 0xc8, // ......=..u...... + 0xc7, 0x19, 0x84, 0x01, 0x5b, 0x74, 0x01, 0x37, 0xa6, 0xb8, 0x01, 0x38, 0xc7, 0x19, 0x16, 0x58, // ....[t.7...8...X + 0x00, 0x06, 0x00, 0x00, 0xff, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x0e, 0x00, 0x12, // ................ + 0x00, 0x16, 0x00, 0x26, 0x00, 0x36, 0x00, 0x00, 0x01, 0x13, 0x23, 0x0b, 0x01, 0x23, 0x13, 0x27, // ...&.6....#..#.' + 0x37, 0x17, 0x07, 0x01, 0x05, 0x03, 0x2d, 0x01, 0x17, 0x07, 0x27, 0x25, 0x17, 0x07, 0x27, 0x04, // 7.....-...'%..'. + 0x10, 0x02, 0x26, 0x24, 0x20, 0x04, 0x06, 0x02, 0x10, 0x12, 0x16, 0x04, 0x20, 0x24, 0x36, 0x12, // ..&$ ....... $6. + 0x10, 0x02, 0x06, 0x04, 0x20, 0x24, 0x26, 0x02, 0x10, 0x12, 0x36, 0x24, 0x20, 0x04, 0x16, 0x03, // .... $&...6$ ... + 0xb4, 0xa3, 0x33, 0xaf, 0xab, 0x31, 0xb3, 0x4e, 0x15, 0xf0, 0x15, 0xfe, 0x45, 0x01, 0x30, 0x82, // ..3..1.N....E.0. + 0xfe, 0xd0, 0x01, 0xda, 0xf0, 0x67, 0xef, 0x01, 0x7f, 0xbf, 0x52, 0xbe, 0x02, 0x3d, 0x7c, 0xd3, // .....g....R..=|. + 0xfe, 0xde, 0xfe, 0xc2, 0xfe, 0xde, 0xd3, 0x7c, 0x7c, 0xd3, 0x01, 0x22, 0x01, 0x3e, 0x01, 0x22, // .......||..".>." + 0xd3, 0xec, 0x8e, 0xf0, 0xfe, 0xb4, 0xfe, 0x94, 0xfe, 0xb4, 0xf0, 0x8e, 0x8e, 0xf0, 0x01, 0x4c, // ...............L + 0x01, 0x6c, 0x01, 0x4c, 0xf0, 0x01, 0xfc, 0xfe, 0xb7, 0x01, 0x5e, 0xfe, 0xa2, 0x01, 0x76, 0x21, // .l.L......^...v! + 0x31, 0x66, 0x32, 0x02, 0x69, 0x82, 0xfe, 0xd0, 0x82, 0x77, 0x67, 0xef, 0x66, 0x5a, 0x51, 0xbe, // 1f2.i....wg.fZQ. + 0x51, 0x5e, 0x01, 0x3e, 0x01, 0x22, 0xd3, 0x7c, 0x7c, 0xd3, 0xfe, 0xde, 0xfe, 0xc2, 0xfe, 0xde, // Q^.>.".||....... + 0xd3, 0x7c, 0x7c, 0xd3, 0x02, 0x77, 0xfe, 0x94, 0xfe, 0xb4, 0xf0, 0x8e, 0x8e, 0xf0, 0x01, 0x4c, // .||..w.........L + 0x01, 0x6c, 0x01, 0x4c, 0xf0, 0x8e, 0x8e, 0xf0, 0x00, 0x0c, 0x00, 0x26, 0xff, 0x01, 0x07, 0x5a, // .l.L.......&...Z + 0x05, 0xff, 0x00, 0x58, 0x00, 0x62, 0x00, 0x6c, 0x00, 0x77, 0x00, 0x81, 0x00, 0xab, 0x00, 0xb7, // ...X.b.l.w...... + 0x00, 0xc2, 0x00, 0xcd, 0x00, 0xd8, 0x00, 0xe4, 0x00, 0xee, 0x00, 0x00, 0x01, 0x2e, 0x03, 0x27, // ...............' + 0x26, 0x3e, 0x01, 0x27, 0x26, 0x27, 0x26, 0x0f, 0x01, 0x0e, 0x03, 0x22, 0x2e, 0x01, 0x27, 0x2e, // &>.'&'&...."..'. + 0x06, 0x27, 0x26, 0x06, 0x07, 0x0e, 0x03, 0x26, 0x27, 0x26, 0x27, 0x26, 0x06, 0x07, 0x0e, 0x03, // .'&....&'&'&.... + 0x15, 0x06, 0x16, 0x37, 0x3e, 0x01, 0x37, 0x36, 0x12, 0x37, 0x3e, 0x01, 0x17, 0x16, 0x07, 0x0e, // ...7>.76.7>..... + 0x01, 0x07, 0x06, 0x16, 0x36, 0x37, 0x3e, 0x02, 0x37, 0x36, 0x17, 0x32, 0x07, 0x06, 0x02, 0x07, // ....67>.76.2.... + 0x06, 0x16, 0x17, 0x1e, 0x02, 0x36, 0x04, 0x16, 0x06, 0x07, 0x06, 0x26, 0x27, 0x26, 0x3e, 0x01, // .....6.....&'&>. + 0x01, 0x16, 0x0e, 0x01, 0x26, 0x27, 0x26, 0x3e, 0x01, 0x16, 0x00, 0x0e, 0x01, 0x27, 0x2e, 0x01, // ....&'&>.....'.. + 0x37, 0x3e, 0x01, 0x17, 0x16, 0x01, 0x16, 0x0e, 0x01, 0x2e, 0x01, 0x36, 0x37, 0x36, 0x16, 0x13, // 7>.........676.. + 0x16, 0x02, 0x07, 0x06, 0x27, 0x0e, 0x01, 0x26, 0x27, 0x06, 0x07, 0x06, 0x26, 0x27, 0x26, 0x27, // ....'..&'...&'&' + 0x2e, 0x02, 0x36, 0x37, 0x2e, 0x01, 0x3e, 0x01, 0x37, 0x3e, 0x02, 0x16, 0x17, 0x36, 0x1e, 0x03, // ..67..>.7>...6.. + 0x07, 0x1e, 0x02, 0x06, 0x01, 0x16, 0x06, 0x07, 0x06, 0x26, 0x27, 0x26, 0x36, 0x37, 0x36, 0x16, // .........&'&676. + 0x13, 0x16, 0x0e, 0x01, 0x26, 0x27, 0x26, 0x36, 0x37, 0x36, 0x16, 0x01, 0x16, 0x06, 0x07, 0x06, // ....&'&676...... + 0x2e, 0x01, 0x36, 0x37, 0x36, 0x16, 0x01, 0x16, 0x06, 0x07, 0x06, 0x26, 0x27, 0x26, 0x3e, 0x01, // ..676......&'&>. + 0x16, 0x01, 0x16, 0x06, 0x07, 0x06, 0x26, 0x27, 0x26, 0x36, 0x37, 0x36, 0x16, 0x27, 0x16, 0x06, // ......&'&676.'.. + 0x07, 0x06, 0x2e, 0x01, 0x3e, 0x01, 0x16, 0x05, 0x36, 0x04, 0x2f, 0x34, 0x2d, 0x03, 0x05, 0x4c, // ....>...6./4-..L + 0x4a, 0x05, 0x0e, 0x67, 0x2d, 0x1e, 0x03, 0x04, 0x02, 0x07, 0x03, 0x07, 0x05, 0x07, 0x03, 0x03, // J..g-........... + 0x0c, 0x06, 0x0b, 0x08, 0x0b, 0x0b, 0x06, 0x1e, 0x24, 0x1b, 0x01, 0x10, 0x09, 0x15, 0x0c, 0x0b, // ........$....... + 0x36, 0x1e, 0x29, 0x6a, 0x17, 0x10, 0x32, 0x25, 0x2b, 0x16, 0x51, 0x46, 0x1e, 0x29, 0x12, 0x07, // 6.)j..2%+.QF.).. + 0x90, 0x05, 0x06, 0x1f, 0x0e, 0x1b, 0x06, 0x02, 0x62, 0x01, 0x06, 0x33, 0x46, 0x14, 0x04, 0x53, // ........b..3F..S + 0x50, 0x06, 0x14, 0x15, 0x1d, 0x04, 0x02, 0x7f, 0x07, 0x0c, 0x32, 0x31, 0x11, 0x44, 0x4b, 0x32, // P.........21.DK2 + 0xfc, 0x41, 0x06, 0x10, 0x0f, 0x0e, 0x19, 0x03, 0x03, 0x10, 0x1c, 0x02, 0x57, 0x0c, 0x07, 0x22, // .A..........W.." + 0x29, 0x0c, 0x0b, 0x07, 0x22, 0x29, 0xfd, 0x15, 0x24, 0x3f, 0x1a, 0x1a, 0x0c, 0x12, 0x12, 0x3f, // )...")..$?.....? + 0x1a, 0x1a, 0x05, 0x04, 0x13, 0x0c, 0x38, 0x41, 0x26, 0x0c, 0x1b, 0x1c, 0x41, 0x84, 0x45, 0x35, // ......8A&...A.E5 + 0x6c, 0x5a, 0x6d, 0x14, 0x81, 0x9e, 0x3d, 0x0c, 0x01, 0x67, 0xf4, 0x47, 0x32, 0x03, 0x53, 0x77, // lZm...=..g.G2.Sw + 0x2a, 0x26, 0x3e, 0x24, 0x04, 0x35, 0x6a, 0x44, 0x20, 0x86, 0x9f, 0xb1, 0x47, 0x48, 0x88, 0x79, // *&>$.5jD ...GH.y + 0x58, 0x2f, 0x06, 0x34, 0x46, 0x15, 0x20, 0xfb, 0x72, 0x0e, 0x09, 0x14, 0x13, 0x31, 0x0d, 0x0e, // X/.4F. .r....1.. + 0x09, 0x14, 0x13, 0x31, 0xac, 0x04, 0x12, 0x22, 0x1c, 0x04, 0x03, 0x13, 0x10, 0x11, 0x1c, 0x04, // ...1..."........ + 0xa5, 0x04, 0x15, 0x14, 0x13, 0x22, 0x08, 0x15, 0x14, 0x14, 0x21, 0xfd, 0x6c, 0x10, 0x0f, 0x1c, // ....."....!.l... + 0x1b, 0x3d, 0x10, 0x10, 0x0f, 0x36, 0x3e, 0x02, 0xfa, 0x04, 0x10, 0x0f, 0x0f, 0x19, 0x03, 0x03, // .=...6>......... + 0x10, 0x0f, 0x0e, 0x19, 0xbc, 0x0f, 0x09, 0x16, 0x16, 0x36, 0x1e, 0x0a, 0x2c, 0x35, 0x01, 0x2e, // .........6..,5.. + 0x18, 0x14, 0x01, 0x18, 0x1a, 0x2f, 0xb9, 0xb1, 0x27, 0x65, 0x02, 0x01, 0x11, 0x02, 0x02, 0x01, // ...../..'e...... + 0x03, 0x01, 0x03, 0x04, 0x03, 0x02, 0x0d, 0x05, 0x0a, 0x05, 0x06, 0x03, 0x01, 0x05, 0x10, 0x17, // ................ + 0x01, 0x0f, 0x07, 0x0d, 0x02, 0x02, 0x1b, 0x0d, 0x12, 0x2e, 0x2a, 0x1c, 0x8d, 0x7c, 0x90, 0x01, // ..........*..|.. + 0x45, 0x64, 0x04, 0x02, 0x1a, 0x21, 0x0d, 0x01, 0x75, 0x08, 0x0b, 0x0e, 0x07, 0x0f, 0x26, 0x12, // Ed...!..u.....&. + 0xf3, 0x0b, 0x26, 0x25, 0x17, 0x26, 0x08, 0xa8, 0x9f, 0x09, 0x1d, 0x01, 0x26, 0x10, 0xfe, 0xf9, // ..&%.&......&... + 0x1c, 0x35, 0x64, 0x18, 0x09, 0x0d, 0x03, 0x1f, 0xa8, 0x1e, 0x19, 0x03, 0x03, 0x10, 0x0f, 0x0e, // .5d............. + 0x1a, 0x06, 0xfe, 0xda, 0x11, 0x29, 0x18, 0x08, 0x11, 0x11, 0x29, 0x18, 0x08, 0x03, 0x36, 0x36, // .....)....)...66 + 0x0c, 0x13, 0x12, 0x40, 0x1a, 0x1b, 0x0c, 0x12, 0x13, 0xfd, 0x01, 0x1c, 0x43, 0x26, 0x0c, 0x38, // ...@........C&.8 + 0x42, 0x14, 0x13, 0x0c, 0x02, 0x40, 0x71, 0xfe, 0xf9, 0x4c, 0x3f, 0x03, 0x50, 0x5e, 0x05, 0x37, // B....@q..L?.P^.7 + 0x09, 0x01, 0x47, 0x2d, 0x68, 0x49, 0x5b, 0x0e, 0x71, 0x8f, 0xa1, 0x3a, 0x3c, 0x88, 0x72, 0x53, // ..G-hI[.q..:<.rS + 0x09, 0x55, 0x7e, 0x39, 0x17, 0x37, 0x15, 0x07, 0x41, 0x5f, 0x87, 0x49, 0x10, 0x52, 0x60, 0x67, // .U~9.7..A_.I.R`g + 0x02, 0x70, 0x14, 0x31, 0x0e, 0x0e, 0x09, 0x14, 0x14, 0x31, 0x0e, 0x0e, 0x09, 0x01, 0x05, 0x10, // .p.1.....1...... + 0x1d, 0x08, 0x13, 0x11, 0x11, 0x1c, 0x04, 0x04, 0x13, 0xfc, 0x3b, 0x14, 0x22, 0x04, 0x04, 0x15, // ..........;."... + 0x28, 0x22, 0x05, 0x04, 0x17, 0x03, 0x6a, 0x1b, 0x3f, 0x10, 0x10, 0x0f, 0x1b, 0x1c, 0x3e, 0x22, // ("....j.?.....>" + 0x10, 0xfd, 0x54, 0x0f, 0x19, 0x04, 0x03, 0x11, 0x0e, 0x0f, 0x1a, 0x03, 0x03, 0x10, 0xe2, 0x16, // ..T............. + 0x36, 0x10, 0x0f, 0x0a, 0x2c, 0x36, 0x20, 0x0a, 0x00, 0x00, 0x00, 0x18, 0x01, 0x26, 0x00, 0x01, // 6...,6 ......&.. + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x60, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, // ......./.`...... + 0x00, 0x01, 0x00, 0x0b, 0x00, 0xa8, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x07, // ................ + 0x00, 0xc4, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x11, 0x00, 0xf0, 0x00, 0x01, // ................ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x0b, 0x01, 0x1a, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x05, 0x00, 0x12, 0x01, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x0b, // .....L.......... + 0x01, 0x77, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x51, 0x02, 0x27, 0x00, 0x01, // .w.........Q.'.. + 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x0c, 0x02, 0x93, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x09, 0x00, 0x0a, 0x02, 0xb6, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x15, // ................ + 0x02, 0xed, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x1e, 0x03, 0x41, 0x00, 0x03, // .............A.. + 0x00, 0x01, 0x04, 0x09, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, // .......^........ + 0x00, 0x01, 0x00, 0x16, 0x00, 0x90, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x02, 0x00, 0x0e, // ................ + 0x00, 0xb4, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x03, 0x00, 0x22, 0x00, 0xcc, 0x00, 0x03, // ...........".... + 0x00, 0x01, 0x04, 0x09, 0x00, 0x04, 0x00, 0x16, 0x01, 0x02, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, // ................ + 0x00, 0x05, 0x00, 0x24, 0x01, 0x26, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x06, 0x00, 0x16, // ...$.&.......... + 0x01, 0x5f, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x07, 0x00, 0xa2, 0x01, 0x83, 0x00, 0x03, // ._.............. + 0x00, 0x01, 0x04, 0x09, 0x00, 0x08, 0x00, 0x18, 0x02, 0x79, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, // .........y...... + 0x00, 0x09, 0x00, 0x14, 0x02, 0xa0, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x0b, 0x00, 0x2a, // ...............* + 0x02, 0xc1, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x0e, 0x00, 0x3c, 0x03, 0x03, 0x00, 0x43, // ...........<...C + 0x00, 0x6f, 0x00, 0x70, 0x00, 0x79, 0x00, 0x72, 0x00, 0x69, 0x00, 0x67, 0x00, 0x68, 0x00, 0x74, // .o.p.y.r.i.g.h.t + 0x00, 0x20, 0x00, 0x44, 0x00, 0x61, 0x00, 0x76, 0x00, 0x65, 0x00, 0x20, 0x00, 0x47, 0x00, 0x61, // . .D.a.v.e. .G.a + 0x00, 0x6e, 0x00, 0x64, 0x00, 0x79, 0x00, 0x20, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x36, // .n.d.y. .2.0.1.6 + 0x00, 0x2e, 0x00, 0x20, 0x00, 0x41, 0x00, 0x6c, 0x00, 0x6c, 0x00, 0x20, 0x00, 0x72, 0x00, 0x69, // ... .A.l.l. .r.i + 0x00, 0x67, 0x00, 0x68, 0x00, 0x74, 0x00, 0x73, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, // .g.h.t.s. .r.e.s + 0x00, 0x65, 0x00, 0x72, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x2e, 0x00, 0x00, 0x43, 0x6f, // .e.r.v.e.d....Co + 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x44, 0x61, 0x76, 0x65, 0x20, 0x47, 0x61, 0x6e, // pyright Dave Gan + 0x64, 0x79, 0x20, 0x32, 0x30, 0x31, 0x36, 0x2e, 0x20, 0x41, 0x6c, 0x6c, 0x20, 0x72, 0x69, 0x67, // dy 2016. All rig + 0x68, 0x74, 0x73, 0x20, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x2e, 0x00, 0x00, 0x46, // hts reserved...F 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x41, 0x00, 0x77, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6f, // .o.n.t.A.w.e.s.o - 0x00, 0x6d, 0x00, 0x65, 0x00, 0x20, 0x00, 0x52, 0x00, 0x65, 0x00, 0x67, 0x00, 0x75, 0x00, 0x6c, // .m.e. .R.e.g.u.l - 0x00, 0x61, 0x00, 0x72, 0x00, 0x56, 0x00, 0x65, 0x00, 0x72, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6f, // .a.r.V.e.r.s.i.o - 0x00, 0x6e, 0x00, 0x20, 0x00, 0x33, 0x00, 0x2e, 0x00, 0x32, 0x00, 0x2e, 0x00, 0x30, 0x00, 0x20, // .n. .3...2...0. - 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x33, 0x00, 0x46, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x74, // .2.0.1.3.F.o.n.t - 0x00, 0x41, 0x00, 0x77, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6f, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x50, // .A.w.e.s.o.m.e.P - 0x00, 0x6c, 0x00, 0x65, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, // .l.e.a.s.e. .r.e - 0x00, 0x66, 0x00, 0x65, 0x00, 0x72, 0x00, 0x20, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x74, // .f.e.r. .t.o. .t - 0x00, 0x68, 0x00, 0x65, 0x00, 0x20, 0x00, 0x43, 0x00, 0x6f, 0x00, 0x70, 0x00, 0x79, 0x00, 0x72, // .h.e. .C.o.p.y.r - 0x00, 0x69, 0x00, 0x67, 0x00, 0x68, 0x00, 0x74, 0x00, 0x20, 0x00, 0x73, 0x00, 0x65, 0x00, 0x63, // .i.g.h.t. .s.e.c - 0x00, 0x74, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x66, 0x00, 0x6f, 0x00, 0x72, // .t.i.o.n. .f.o.r - 0x00, 0x20, 0x00, 0x74, 0x00, 0x68, 0x00, 0x65, 0x00, 0x20, 0x00, 0x66, 0x00, 0x6f, 0x00, 0x6e, // . .t.h.e. .f.o.n - 0x00, 0x74, 0x00, 0x20, 0x00, 0x74, 0x00, 0x72, 0x00, 0x61, 0x00, 0x64, 0x00, 0x65, 0x00, 0x6d, // .t. .t.r.a.d.e.m - 0x00, 0x61, 0x00, 0x72, 0x00, 0x6b, 0x00, 0x20, 0x00, 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x72, // .a.r.k. .a.t.t.r - 0x00, 0x69, 0x00, 0x62, 0x00, 0x75, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x20, // .i.b.u.t.i.o.n. - 0x00, 0x6e, 0x00, 0x6f, 0x00, 0x74, 0x00, 0x69, 0x00, 0x63, 0x00, 0x65, 0x00, 0x73, 0x00, 0x2e, // .n.o.t.i.c.e.s.. - 0x00, 0x46, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x74, 0x00, 0x20, 0x00, 0x41, 0x00, 0x77, 0x00, 0x65, // .F.o.r.t. .A.w.e - 0x00, 0x73, 0x00, 0x6f, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x44, 0x00, 0x61, 0x00, 0x76, 0x00, 0x65, // .s.o.m.e.D.a.v.e - 0x00, 0x20, 0x00, 0x47, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x64, 0x00, 0x79, 0x00, 0x68, 0x00, 0x74, // . .G.a.n.d.y.h.t - 0x00, 0x74, 0x00, 0x70, 0x00, 0x3a, 0x00, 0x2f, 0x00, 0x2f, 0x00, 0x66, 0x00, 0x6f, 0x00, 0x6e, // .t.p.:././.f.o.n - 0x00, 0x74, 0x00, 0x61, 0x00, 0x77, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6f, 0x00, 0x6d, 0x00, 0x65, // .t.a.w.e.s.o.m.e - 0x00, 0x2e, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x57, 0x00, 0x65, 0x00, 0x62, 0x00, 0x66, 0x00, 0x6f, // ...i.o.W.e.b.f.o - 0x00, 0x6e, 0x00, 0x74, 0x00, 0x20, 0x00, 0x31, 0x00, 0x2e, 0x00, 0x30, 0x00, 0x54, 0x00, 0x75, // .n.t. .1...0.T.u - 0x00, 0x65, 0x00, 0x20, 0x00, 0x4f, 0x00, 0x63, 0x00, 0x74, 0x00, 0x20, 0x00, 0x32, 0x00, 0x32, // .e. .O.c.t. .2.2 - 0x00, 0x20, 0x00, 0x32, 0x00, 0x33, 0x00, 0x3a, 0x00, 0x32, 0x00, 0x34, 0x00, 0x3a, 0x00, 0x31, // . .2.3.:.2.4.:.1 - 0x00, 0x31, 0x00, 0x20, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x33, 0x00, 0x02, 0x00, 0x00, // .1. .2.0.1.3.... - 0x00, 0x00, 0x00, 0x00, 0xff, 0x7a, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .....z.Z........ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x96, 0x00, 0x00, // ................ - 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x01, 0x02, 0x00, 0x8e, 0x00, 0x8b, 0x00, 0x8a, 0x00, 0x8d, // ................ - 0x00, 0x90, 0x01, 0x03, 0x01, 0x04, 0x01, 0x05, 0x01, 0x06, 0x01, 0x07, 0x01, 0x08, 0x01, 0x09, // ................ - 0x01, 0x0a, 0x01, 0x0b, 0x01, 0x0c, 0x01, 0x0d, 0x01, 0x0e, 0x01, 0x0f, 0x00, 0x8c, 0x00, 0x92, // ................ - 0x00, 0x8f, 0x01, 0x10, 0x01, 0x11, 0x01, 0x12, 0x01, 0x13, 0x01, 0x14, 0x01, 0x15, 0x01, 0x16, // ................ - 0x01, 0x17, 0x01, 0x18, 0x01, 0x19, 0x01, 0x1a, 0x01, 0x1b, 0x01, 0x1c, 0x01, 0x1d, 0x01, 0x1e, // ................ - 0x01, 0x1f, 0x01, 0x20, 0x01, 0x21, 0x01, 0x22, 0x01, 0x23, 0x01, 0x24, 0x01, 0x25, 0x01, 0x26, // ... .!.".#.$.%.& - 0x01, 0x27, 0x01, 0x28, 0x01, 0x29, 0x01, 0x2a, 0x01, 0x2b, 0x01, 0x2c, 0x01, 0x2d, 0x01, 0x2e, // .'.(.).*.+.,.-.. - 0x01, 0x2f, 0x01, 0x30, 0x01, 0x31, 0x01, 0x32, 0x01, 0x33, 0x01, 0x34, 0x01, 0x35, 0x01, 0x36, // ./.0.1.2.3.4.5.6 - 0x01, 0x37, 0x01, 0x38, 0x01, 0x39, 0x01, 0x3a, 0x01, 0x3b, 0x01, 0x3c, 0x01, 0x3d, 0x01, 0x3e, // .7.8.9.:.;.<.=.> - 0x01, 0x3f, 0x01, 0x40, 0x01, 0x41, 0x01, 0x42, 0x01, 0x43, 0x01, 0x44, 0x01, 0x45, 0x01, 0x46, // .?.@.A.B.C.D.E.F - 0x01, 0x47, 0x01, 0x48, 0x01, 0x49, 0x01, 0x4a, 0x01, 0x4b, 0x01, 0x4c, 0x01, 0x4d, 0x01, 0x4e, // .G.H.I.J.K.L.M.N - 0x01, 0x4f, 0x01, 0x50, 0x01, 0x51, 0x01, 0x52, 0x01, 0x53, 0x01, 0x54, 0x01, 0x55, 0x01, 0x56, // .O.P.Q.R.S.T.U.V - 0x01, 0x57, 0x01, 0x58, 0x01, 0x59, 0x01, 0x5a, 0x01, 0x5b, 0x01, 0x5c, 0x01, 0x5d, 0x01, 0x5e, // .W.X.Y.Z.[...].^ - 0x01, 0x5f, 0x01, 0x60, 0x01, 0x61, 0x01, 0x62, 0x01, 0x63, 0x01, 0x64, 0x01, 0x65, 0x01, 0x66, // ._.`.a.b.c.d.e.f - 0x01, 0x67, 0x01, 0x68, 0x01, 0x69, 0x01, 0x6a, 0x01, 0x6b, 0x01, 0x6c, 0x01, 0x6d, 0x01, 0x6e, // .g.h.i.j.k.l.m.n - 0x01, 0x6f, 0x01, 0x70, 0x01, 0x71, 0x00, 0x0e, 0x00, 0xef, 0x00, 0x0d, 0x01, 0x72, 0x01, 0x73, // .o.p.q.......r.s - 0x01, 0x74, 0x01, 0x75, 0x01, 0x76, 0x01, 0x77, 0x01, 0x78, 0x01, 0x79, 0x01, 0x7a, 0x01, 0x7b, // .t.u.v.w.x.y.z.{ - 0x01, 0x7c, 0x01, 0x7d, 0x01, 0x7e, 0x01, 0x7f, 0x01, 0x80, 0x01, 0x81, 0x01, 0x82, 0x01, 0x83, // .|.}.~.......... - 0x01, 0x84, 0x01, 0x85, 0x01, 0x86, 0x01, 0x87, 0x01, 0x88, 0x01, 0x89, 0x01, 0x8a, 0x01, 0x8b, // ................ - 0x01, 0x8c, 0x01, 0x8d, 0x01, 0x8e, 0x01, 0x8f, 0x01, 0x90, 0x01, 0x91, 0x01, 0x92, 0x01, 0x93, // ................ - 0x01, 0x94, 0x01, 0x95, 0x01, 0x96, 0x01, 0x97, 0x01, 0x98, 0x01, 0x99, 0x01, 0x9a, 0x01, 0x9b, // ................ - 0x01, 0x9c, 0x01, 0x9d, 0x01, 0x9e, 0x01, 0x9f, 0x01, 0xa0, 0x01, 0xa1, 0x01, 0xa2, 0x01, 0xa3, // ................ - 0x01, 0xa4, 0x01, 0xa5, 0x01, 0xa6, 0x01, 0xa7, 0x01, 0xa8, 0x01, 0xa9, 0x01, 0xaa, 0x01, 0xab, // ................ - 0x01, 0xac, 0x01, 0xad, 0x01, 0xae, 0x01, 0xaf, 0x01, 0xb0, 0x01, 0xb1, 0x01, 0xb2, 0x01, 0xb3, // ................ - 0x01, 0xb4, 0x01, 0xb5, 0x01, 0xb6, 0x01, 0xb7, 0x01, 0xb8, 0x01, 0xb9, 0x01, 0xba, 0x01, 0xbb, // ................ - 0x01, 0xbc, 0x01, 0xbd, 0x01, 0xbe, 0x01, 0xbf, 0x01, 0xc0, 0x01, 0xc1, 0x01, 0xc2, 0x01, 0xc3, // ................ - 0x01, 0xc4, 0x01, 0xc5, 0x01, 0xc6, 0x01, 0xc7, 0x01, 0xc8, 0x01, 0xc9, 0x01, 0xca, 0x01, 0xcb, // ................ - 0x01, 0xcc, 0x01, 0xcd, 0x01, 0xce, 0x01, 0xcf, 0x01, 0xd0, 0x01, 0xd1, 0x01, 0xd2, 0x01, 0xd3, // ................ - 0x01, 0xd4, 0x01, 0xd5, 0x01, 0xd6, 0x01, 0xd7, 0x01, 0xd8, 0x01, 0xd9, 0x01, 0xda, 0x01, 0xdb, // ................ - 0x01, 0xdc, 0x01, 0xdd, 0x01, 0xde, 0x01, 0xdf, 0x01, 0xe0, 0x01, 0xe1, 0x01, 0xe2, 0x01, 0xe3, // ................ - 0x01, 0xe4, 0x01, 0xe5, 0x01, 0xe6, 0x01, 0xe7, 0x01, 0xe8, 0x01, 0xe9, 0x01, 0xea, 0x01, 0xeb, // ................ - 0x01, 0xec, 0x01, 0xed, 0x01, 0xee, 0x01, 0xef, 0x01, 0xf0, 0x01, 0xf1, 0x01, 0xf2, 0x01, 0xf3, // ................ - 0x01, 0xf4, 0x01, 0xf5, 0x01, 0xf6, 0x01, 0xf7, 0x01, 0xf8, 0x01, 0xf9, 0x01, 0xfa, 0x01, 0xfb, // ................ - 0x01, 0xfc, 0x01, 0xfd, 0x01, 0xfe, 0x01, 0xff, 0x02, 0x00, 0x02, 0x01, 0x02, 0x02, 0x02, 0x03, // ................ - 0x02, 0x04, 0x02, 0x05, 0x02, 0x06, 0x02, 0x07, 0x02, 0x08, 0x02, 0x09, 0x02, 0x0a, 0x02, 0x0b, // ................ - 0x02, 0x0c, 0x02, 0x0d, 0x02, 0x0e, 0x02, 0x0f, 0x02, 0x10, 0x02, 0x11, 0x02, 0x12, 0x02, 0x13, // ................ - 0x02, 0x14, 0x02, 0x15, 0x02, 0x16, 0x02, 0x17, 0x00, 0x22, 0x02, 0x18, 0x02, 0x19, 0x02, 0x1a, // ........."...... - 0x02, 0x1b, 0x02, 0x1c, 0x02, 0x1d, 0x02, 0x1e, 0x02, 0x1f, 0x02, 0x20, 0x02, 0x21, 0x02, 0x22, // ........... .!." - 0x02, 0x23, 0x02, 0x24, 0x02, 0x25, 0x02, 0x26, 0x02, 0x27, 0x02, 0x28, 0x02, 0x29, 0x02, 0x2a, // .#.$.%.&.'.(.).* - 0x02, 0x2b, 0x02, 0x2c, 0x02, 0x2d, 0x02, 0x2e, 0x02, 0x2f, 0x02, 0x30, 0x02, 0x31, 0x02, 0x32, // .+.,.-.../.0.1.2 - 0x02, 0x33, 0x02, 0x34, 0x02, 0x35, 0x02, 0x36, 0x02, 0x37, 0x02, 0x38, 0x02, 0x39, 0x02, 0x3a, // .3.4.5.6.7.8.9.: - 0x02, 0x3b, 0x02, 0x3c, 0x02, 0x3d, 0x02, 0x3e, 0x02, 0x3f, 0x02, 0x40, 0x02, 0x41, 0x02, 0x42, // .;.<.=.>.?.@.A.B - 0x02, 0x43, 0x02, 0x44, 0x02, 0x45, 0x02, 0x46, 0x02, 0x47, 0x02, 0x48, 0x02, 0x49, 0x02, 0x4a, // .C.D.E.F.G.H.I.J - 0x02, 0x4b, 0x02, 0x4c, 0x02, 0x4d, 0x02, 0x4e, 0x02, 0x4f, 0x02, 0x50, 0x02, 0x51, 0x02, 0x52, // .K.L.M.N.O.P.Q.R - 0x02, 0x53, 0x02, 0x54, 0x02, 0x55, 0x02, 0x56, 0x02, 0x57, 0x02, 0x58, 0x02, 0x59, 0x02, 0x5a, // .S.T.U.V.W.X.Y.Z - 0x02, 0x5b, 0x02, 0x5c, 0x02, 0x5d, 0x02, 0x5e, 0x02, 0x5f, 0x02, 0x60, 0x02, 0x61, 0x02, 0x62, // .[...].^._.`.a.b - 0x00, 0xd2, 0x02, 0x63, 0x02, 0x64, 0x02, 0x65, 0x02, 0x66, 0x02, 0x67, 0x02, 0x68, 0x02, 0x69, // ...c.d.e.f.g.h.i - 0x02, 0x6a, 0x02, 0x6b, 0x02, 0x6c, 0x02, 0x6d, 0x02, 0x6e, 0x02, 0x6f, 0x02, 0x70, 0x02, 0x71, // .j.k.l.m.n.o.p.q - 0x02, 0x72, 0x02, 0x73, 0x02, 0x74, 0x02, 0x75, 0x02, 0x76, 0x02, 0x77, 0x02, 0x78, 0x02, 0x79, // .r.s.t.u.v.w.x.y - 0x02, 0x7a, 0x02, 0x7b, 0x02, 0x7c, 0x02, 0x7d, 0x02, 0x7e, 0x02, 0x7f, 0x02, 0x80, 0x02, 0x81, // .z.{.|.}.~...... - 0x02, 0x82, 0x02, 0x83, 0x02, 0x84, 0x02, 0x85, 0x00, 0x94, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x30, // ...........uni00 - 0x41, 0x30, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x30, 0x30, 0x30, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x30, // A0.uni2000.uni20 - 0x30, 0x31, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x30, 0x30, 0x32, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x30, // 01.uni2002.uni20 - 0x30, 0x33, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x30, 0x30, 0x34, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x30, // 03.uni2004.uni20 - 0x30, 0x35, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x30, 0x30, 0x36, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x30, // 05.uni2006.uni20 - 0x30, 0x37, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x30, 0x30, 0x38, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x30, // 07.uni2008.uni20 - 0x30, 0x39, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x30, 0x30, 0x41, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x30, // 09.uni200A.uni20 - 0x32, 0x46, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x30, 0x35, 0x46, 0x07, 0x75, 0x6e, 0x69, 0x45, 0x30, // 2F.uni205F.uniE0 - 0x30, 0x30, 0x05, 0x67, 0x6c, 0x61, 0x73, 0x73, 0x05, 0x6d, 0x75, 0x73, 0x69, 0x63, 0x06, 0x73, // 00.glass.music.s - 0x65, 0x61, 0x72, 0x63, 0x68, 0x08, 0x65, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x05, 0x68, // earch.envelope.h - 0x65, 0x61, 0x72, 0x74, 0x04, 0x73, 0x74, 0x61, 0x72, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x5f, 0x65, // eart.star.star_e - 0x6d, 0x70, 0x74, 0x79, 0x04, 0x75, 0x73, 0x65, 0x72, 0x04, 0x66, 0x69, 0x6c, 0x6d, 0x08, 0x74, // mpty.user.film.t - 0x68, 0x5f, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x02, 0x74, 0x68, 0x07, 0x74, 0x68, 0x5f, 0x6c, 0x69, // h_large.th.th_li - 0x73, 0x74, 0x02, 0x6f, 0x6b, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x07, 0x7a, 0x6f, 0x6f, // st.ok.remove.zoo - 0x6d, 0x5f, 0x69, 0x6e, 0x08, 0x7a, 0x6f, 0x6f, 0x6d, 0x5f, 0x6f, 0x75, 0x74, 0x03, 0x6f, 0x66, // m_in.zoom_out.of - 0x66, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x03, 0x63, 0x6f, 0x67, 0x05, 0x74, 0x72, 0x61, // f.signal.cog.tra - 0x73, 0x68, 0x04, 0x68, 0x6f, 0x6d, 0x65, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x61, 0x6c, 0x74, // sh.home.file_alt - 0x04, 0x74, 0x69, 0x6d, 0x65, 0x04, 0x72, 0x6f, 0x61, 0x64, 0x0c, 0x64, 0x6f, 0x77, 0x6e, 0x6c, // .time.road.downl - 0x6f, 0x61, 0x64, 0x5f, 0x61, 0x6c, 0x74, 0x08, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, // oad_alt.download - 0x06, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x05, 0x69, 0x6e, 0x62, 0x6f, 0x78, 0x0b, 0x70, 0x6c, // .upload.inbox.pl - 0x61, 0x79, 0x5f, 0x63, 0x69, 0x72, 0x63, 0x6c, 0x65, 0x06, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, // ay_circle.repeat - 0x07, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x08, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x61, 0x6c, // .refresh.list_al - 0x74, 0x04, 0x6c, 0x6f, 0x63, 0x6b, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x0a, 0x68, 0x65, 0x61, 0x64, // t.lock.flag.head - 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x73, 0x0a, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x6f, 0x66, // phones.volume_of - 0x66, 0x0b, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x09, 0x76, 0x6f, // f.volume_down.vo - 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x75, 0x70, 0x06, 0x71, 0x72, 0x63, 0x6f, 0x64, 0x65, 0x07, 0x62, // lume_up.qrcode.b - 0x61, 0x72, 0x63, 0x6f, 0x64, 0x65, 0x03, 0x74, 0x61, 0x67, 0x04, 0x74, 0x61, 0x67, 0x73, 0x04, // arcode.tag.tags. - 0x62, 0x6f, 0x6f, 0x6b, 0x08, 0x62, 0x6f, 0x6f, 0x6b, 0x6d, 0x61, 0x72, 0x6b, 0x05, 0x70, 0x72, // book.bookmark.pr - 0x69, 0x6e, 0x74, 0x06, 0x63, 0x61, 0x6d, 0x65, 0x72, 0x61, 0x04, 0x66, 0x6f, 0x6e, 0x74, 0x04, // int.camera.font. - 0x62, 0x6f, 0x6c, 0x64, 0x06, 0x69, 0x74, 0x61, 0x6c, 0x69, 0x63, 0x0b, 0x74, 0x65, 0x78, 0x74, // bold.italic.text - 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x0a, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x77, 0x69, 0x64, // _height.text_wid - 0x74, 0x68, 0x0a, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x0c, 0x61, 0x6c, // th.align_left.al - 0x69, 0x67, 0x6e, 0x5f, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x0b, 0x61, 0x6c, 0x69, 0x67, 0x6e, // ign_center.align - 0x5f, 0x72, 0x69, 0x67, 0x68, 0x74, 0x0d, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x5f, 0x6a, 0x75, 0x73, // _right.align_jus - 0x74, 0x69, 0x66, 0x79, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x0b, 0x69, 0x6e, 0x64, 0x65, 0x6e, 0x74, // tify.list.indent - 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x0c, 0x69, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x69, 0x67, // _left.indent_rig - 0x68, 0x74, 0x0e, 0x66, 0x61, 0x63, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x76, 0x69, 0x64, 0x65, // ht.facetime_vide - 0x6f, 0x07, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x06, 0x70, 0x65, 0x6e, 0x63, 0x69, 0x6c, // o.picture.pencil - 0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x06, 0x61, 0x64, 0x6a, 0x75, // .map_marker.adju - 0x73, 0x74, 0x04, 0x74, 0x69, 0x6e, 0x74, 0x04, 0x65, 0x64, 0x69, 0x74, 0x05, 0x73, 0x68, 0x61, // st.tint.edit.sha - 0x72, 0x65, 0x05, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x04, 0x6d, 0x6f, 0x76, 0x65, 0x0d, 0x73, 0x74, // re.check.move.st - 0x65, 0x70, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x77, 0x61, 0x72, 0x64, 0x0d, 0x66, 0x61, 0x73, 0x74, // ep_backward.fast - 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x77, 0x61, 0x72, 0x64, 0x08, 0x62, 0x61, 0x63, 0x6b, 0x77, 0x61, // _backward.backwa - 0x72, 0x64, 0x04, 0x70, 0x6c, 0x61, 0x79, 0x05, 0x70, 0x61, 0x75, 0x73, 0x65, 0x04, 0x73, 0x74, // rd.play.pause.st - 0x6f, 0x70, 0x07, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x0c, 0x66, 0x61, 0x73, 0x74, 0x5f, // op.forward.fast_ - 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x0c, 0x73, 0x74, 0x65, 0x70, 0x5f, 0x66, 0x6f, 0x72, // forward.step_for - 0x77, 0x61, 0x72, 0x64, 0x05, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x0c, 0x63, 0x68, 0x65, 0x76, 0x72, // ward.eject.chevr - 0x6f, 0x6e, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x0d, 0x63, 0x68, 0x65, 0x76, 0x72, 0x6f, 0x6e, 0x5f, // on_left.chevron_ - 0x72, 0x69, 0x67, 0x68, 0x74, 0x09, 0x70, 0x6c, 0x75, 0x73, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x0a, // right.plus_sign. - 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x0b, 0x72, 0x65, 0x6d, 0x6f, 0x76, // minus_sign.remov - 0x65, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x07, 0x6f, 0x6b, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x0d, 0x71, // e_sign.ok_sign.q - 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x09, 0x69, 0x6e, 0x66, // uestion_sign.inf - 0x6f, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x0a, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x73, 0x68, 0x6f, // o_sign.screensho - 0x74, 0x0d, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x63, 0x69, 0x72, 0x63, 0x6c, 0x65, 0x09, // t.remove_circle. - 0x6f, 0x6b, 0x5f, 0x63, 0x69, 0x72, 0x63, 0x6c, 0x65, 0x0a, 0x62, 0x61, 0x6e, 0x5f, 0x63, 0x69, // ok_circle.ban_ci - 0x72, 0x63, 0x6c, 0x65, 0x0a, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x0b, // rcle.arrow_left. - 0x61, 0x72, 0x72, 0x6f, 0x77, 0x5f, 0x72, 0x69, 0x67, 0x68, 0x74, 0x08, 0x61, 0x72, 0x72, 0x6f, // arrow_right.arro - 0x77, 0x5f, 0x75, 0x70, 0x0a, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x09, // w_up.arrow_down. - 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x61, 0x6c, 0x74, 0x0b, 0x72, 0x65, 0x73, 0x69, 0x7a, 0x65, // share_alt.resize - 0x5f, 0x66, 0x75, 0x6c, 0x6c, 0x0c, 0x72, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x73, 0x6d, 0x61, // _full.resize_sma - 0x6c, 0x6c, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x61, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, // ll.exclamation_s - 0x69, 0x67, 0x6e, 0x04, 0x67, 0x69, 0x66, 0x74, 0x04, 0x6c, 0x65, 0x61, 0x66, 0x04, 0x66, 0x69, // ign.gift.leaf.fi - 0x72, 0x65, 0x08, 0x65, 0x79, 0x65, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x09, 0x65, 0x79, 0x65, 0x5f, // re.eye_open.eye_ - 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x0c, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x69, // close.warning_si - 0x67, 0x6e, 0x05, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x08, 0x63, 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, // gn.plane.calenda - 0x72, 0x06, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, // r.random.comment - 0x06, 0x6d, 0x61, 0x67, 0x6e, 0x65, 0x74, 0x0a, 0x63, 0x68, 0x65, 0x76, 0x72, 0x6f, 0x6e, 0x5f, // .magnet.chevron_ - 0x75, 0x70, 0x0c, 0x63, 0x68, 0x65, 0x76, 0x72, 0x6f, 0x6e, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x07, // up.chevron_down. - 0x72, 0x65, 0x74, 0x77, 0x65, 0x65, 0x74, 0x0d, 0x73, 0x68, 0x6f, 0x70, 0x70, 0x69, 0x6e, 0x67, // retweet.shopping - 0x5f, 0x63, 0x61, 0x72, 0x74, 0x0c, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x5f, 0x63, 0x6c, 0x6f, // _cart.folder_clo - 0x73, 0x65, 0x0b, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x0f, 0x72, // se.folder_open.r - 0x65, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x11, 0x72, // esize_vertical.r - 0x65, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, // esize_horizontal - 0x09, 0x62, 0x61, 0x72, 0x5f, 0x63, 0x68, 0x61, 0x72, 0x74, 0x0c, 0x74, 0x77, 0x69, 0x74, 0x74, // .bar_chart.twitt - 0x65, 0x72, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x0d, 0x66, 0x61, 0x63, 0x65, 0x62, 0x6f, 0x6f, 0x6b, // er_sign.facebook - 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x0c, 0x63, 0x61, 0x6d, 0x65, 0x72, 0x61, 0x5f, 0x72, 0x65, 0x74, // _sign.camera_ret - 0x72, 0x6f, 0x03, 0x6b, 0x65, 0x79, 0x04, 0x63, 0x6f, 0x67, 0x73, 0x08, 0x63, 0x6f, 0x6d, 0x6d, // ro.key.cogs.comm - 0x65, 0x6e, 0x74, 0x73, 0x0d, 0x74, 0x68, 0x75, 0x6d, 0x62, 0x73, 0x5f, 0x75, 0x70, 0x5f, 0x61, // ents.thumbs_up_a - 0x6c, 0x74, 0x0f, 0x74, 0x68, 0x75, 0x6d, 0x62, 0x73, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x5f, 0x61, // lt.thumbs_down_a - 0x6c, 0x74, 0x09, 0x73, 0x74, 0x61, 0x72, 0x5f, 0x68, 0x61, 0x6c, 0x66, 0x0b, 0x68, 0x65, 0x61, // lt.star_half.hea - 0x72, 0x74, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x07, 0x73, 0x69, 0x67, 0x6e, 0x6f, 0x75, 0x74, // rt_empty.signout - 0x0d, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x69, 0x6e, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x07, 0x70, // .linkedin_sign.p - 0x75, 0x73, 0x68, 0x70, 0x69, 0x6e, 0x0d, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, // ushpin.external_ - 0x6c, 0x69, 0x6e, 0x6b, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x6e, 0x06, 0x74, 0x72, 0x6f, 0x70, // link.signin.trop - 0x68, 0x79, 0x0b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x0a, 0x75, // hy.github_sign.u - 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x61, 0x6c, 0x74, 0x05, 0x6c, 0x65, 0x6d, 0x6f, 0x6e, 0x05, // pload_alt.lemon. - 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x0b, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x65, 0x6d, 0x70, 0x74, // phone.check_empt - 0x79, 0x0e, 0x62, 0x6f, 0x6f, 0x6b, 0x6d, 0x61, 0x72, 0x6b, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, // y.bookmark_empty - 0x0a, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x07, 0x74, 0x77, 0x69, 0x74, // .phone_sign.twit - 0x74, 0x65, 0x72, 0x08, 0x66, 0x61, 0x63, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x06, 0x67, 0x69, 0x74, // ter.facebook.git - 0x68, 0x75, 0x62, 0x06, 0x75, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x69, // hub.unlock.credi - 0x74, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x03, 0x72, 0x73, 0x73, 0x03, 0x68, 0x64, 0x64, 0x08, 0x62, // t_card.rss.hdd.b - 0x75, 0x6c, 0x6c, 0x68, 0x6f, 0x72, 0x6e, 0x04, 0x62, 0x65, 0x6c, 0x6c, 0x0b, 0x63, 0x65, 0x72, // ullhorn.bell.cer - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x0a, 0x68, 0x61, 0x6e, 0x64, 0x5f, 0x72, 0x69, // tificate.hand_ri - 0x67, 0x68, 0x74, 0x09, 0x68, 0x61, 0x6e, 0x64, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x07, 0x68, 0x61, // ght.hand_left.ha - 0x6e, 0x64, 0x5f, 0x75, 0x70, 0x09, 0x68, 0x61, 0x6e, 0x64, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x11, // nd_up.hand_down. - 0x63, 0x69, 0x72, 0x63, 0x6c, 0x65, 0x5f, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x5f, 0x6c, 0x65, 0x66, // circle_arrow_lef - 0x74, 0x12, 0x63, 0x69, 0x72, 0x63, 0x6c, 0x65, 0x5f, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x5f, 0x72, // t.circle_arrow_r - 0x69, 0x67, 0x68, 0x74, 0x0f, 0x63, 0x69, 0x72, 0x63, 0x6c, 0x65, 0x5f, 0x61, 0x72, 0x72, 0x6f, // ight.circle_arro - 0x77, 0x5f, 0x75, 0x70, 0x11, 0x63, 0x69, 0x72, 0x63, 0x6c, 0x65, 0x5f, 0x61, 0x72, 0x72, 0x6f, // w_up.circle_arro - 0x77, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x05, 0x67, 0x6c, 0x6f, 0x62, 0x65, 0x06, 0x77, 0x72, 0x65, // w_down.globe.wre - 0x6e, 0x63, 0x68, 0x05, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, // nch.tasks.filter - 0x09, 0x62, 0x72, 0x69, 0x65, 0x66, 0x63, 0x61, 0x73, 0x65, 0x0a, 0x66, 0x75, 0x6c, 0x6c, 0x73, // .briefcase.fulls - 0x63, 0x72, 0x65, 0x65, 0x6e, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x04, 0x6c, 0x69, 0x6e, 0x6b, // creen.group.link - 0x05, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x06, 0x62, 0x65, 0x61, 0x6b, 0x65, 0x72, 0x03, 0x63, 0x75, // .cloud.beaker.cu - 0x74, 0x04, 0x63, 0x6f, 0x70, 0x79, 0x0a, 0x70, 0x61, 0x70, 0x65, 0x72, 0x5f, 0x63, 0x6c, 0x69, // t.copy.paper_cli - 0x70, 0x04, 0x73, 0x61, 0x76, 0x65, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x5f, 0x62, 0x6c, 0x61, 0x6e, // p.save.sign_blan - 0x6b, 0x07, 0x72, 0x65, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x02, 0x75, 0x6c, 0x02, 0x6f, 0x6c, 0x0d, // k.reorder.ul.ol. - 0x73, 0x74, 0x72, 0x69, 0x6b, 0x65, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x09, 0x75, 0x6e, // strikethrough.un - 0x64, 0x65, 0x72, 0x6c, 0x69, 0x6e, 0x65, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x05, 0x6d, 0x61, // derline.table.ma - 0x67, 0x69, 0x63, 0x05, 0x74, 0x72, 0x75, 0x63, 0x6b, 0x09, 0x70, 0x69, 0x6e, 0x74, 0x65, 0x72, // gic.truck.pinter - 0x65, 0x73, 0x74, 0x0e, 0x70, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x69, // est.pinterest_si - 0x67, 0x6e, 0x10, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5f, 0x70, 0x6c, 0x75, 0x73, 0x5f, 0x73, // gn.google_plus_s - 0x69, 0x67, 0x6e, 0x0b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5f, 0x70, 0x6c, 0x75, 0x73, 0x05, // ign.google_plus. - 0x6d, 0x6f, 0x6e, 0x65, 0x79, 0x0a, 0x63, 0x61, 0x72, 0x65, 0x74, 0x5f, 0x64, 0x6f, 0x77, 0x6e, // money.caret_down - 0x08, 0x63, 0x61, 0x72, 0x65, 0x74, 0x5f, 0x75, 0x70, 0x0a, 0x63, 0x61, 0x72, 0x65, 0x74, 0x5f, // .caret_up.caret_ - 0x6c, 0x65, 0x66, 0x74, 0x0b, 0x63, 0x61, 0x72, 0x65, 0x74, 0x5f, 0x72, 0x69, 0x67, 0x68, 0x74, // left.caret_right - 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x09, 0x73, 0x6f, // .columns.sort.so - 0x72, 0x74, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x07, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x75, 0x70, 0x0c, // rt_down.sort_up. - 0x65, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x5f, 0x61, 0x6c, 0x74, 0x08, 0x6c, 0x69, 0x6e, // envelope_alt.lin - 0x6b, 0x65, 0x64, 0x69, 0x6e, 0x04, 0x75, 0x6e, 0x64, 0x6f, 0x05, 0x6c, 0x65, 0x67, 0x61, 0x6c, // kedin.undo.legal - 0x09, 0x64, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x65, // .dashboard.comme - 0x6e, 0x74, 0x5f, 0x61, 0x6c, 0x74, 0x0c, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x5f, // nt_alt.comments_ - 0x61, 0x6c, 0x74, 0x04, 0x62, 0x6f, 0x6c, 0x74, 0x07, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x61, 0x70, // alt.bolt.sitemap - 0x08, 0x75, 0x6d, 0x62, 0x72, 0x65, 0x6c, 0x6c, 0x61, 0x05, 0x70, 0x61, 0x73, 0x74, 0x65, 0x0a, // .umbrella.paste. - 0x6c, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x62, 0x75, 0x6c, 0x62, 0x08, 0x65, 0x78, 0x63, 0x68, 0x61, // light_bulb.excha - 0x6e, 0x67, 0x65, 0x0e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, // nge.cloud_downlo - 0x61, 0x64, 0x0c, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x07, // ad.cloud_upload. - 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6d, 0x64, 0x0b, 0x73, 0x74, 0x65, 0x74, 0x68, 0x6f, 0x73, 0x63, // user_md.stethosc - 0x6f, 0x70, 0x65, 0x08, 0x73, 0x75, 0x69, 0x74, 0x63, 0x61, 0x73, 0x65, 0x08, 0x62, 0x65, 0x6c, // ope.suitcase.bel - 0x6c, 0x5f, 0x61, 0x6c, 0x74, 0x06, 0x63, 0x6f, 0x66, 0x66, 0x65, 0x65, 0x04, 0x66, 0x6f, 0x6f, // l_alt.coffee.foo - 0x64, 0x0d, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x61, 0x6c, 0x74, 0x08, // d.file_text_alt. - 0x62, 0x75, 0x69, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x08, 0x68, 0x6f, 0x73, 0x70, 0x69, 0x74, 0x61, // building.hospita - 0x6c, 0x09, 0x61, 0x6d, 0x62, 0x75, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x06, 0x6d, 0x65, 0x64, 0x6b, // l.ambulance.medk - 0x69, 0x74, 0x0b, 0x66, 0x69, 0x67, 0x68, 0x74, 0x65, 0x72, 0x5f, 0x6a, 0x65, 0x74, 0x04, 0x62, // it.fighter_jet.b - 0x65, 0x65, 0x72, 0x06, 0x68, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x04, 0x66, 0x30, 0x66, 0x65, 0x11, // eer.h_sign.f0fe. - 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6c, 0x65, 0x66, // double_angle_lef - 0x74, 0x12, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x72, // t.double_angle_r - 0x69, 0x67, 0x68, 0x74, 0x0f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x6e, 0x67, 0x6c, // ight.double_angl - 0x65, 0x5f, 0x75, 0x70, 0x11, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x6e, 0x67, 0x6c, // e_up.double_angl - 0x65, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x0a, 0x61, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6c, 0x65, 0x66, // e_down.angle_lef - 0x74, 0x0b, 0x61, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x72, 0x69, 0x67, 0x68, 0x74, 0x08, 0x61, 0x6e, // t.angle_right.an - 0x67, 0x6c, 0x65, 0x5f, 0x75, 0x70, 0x0a, 0x61, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x64, 0x6f, 0x77, // gle_up.angle_dow - 0x6e, 0x07, 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x06, 0x6c, 0x61, 0x70, 0x74, 0x6f, 0x70, // n.desktop.laptop - 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x0c, 0x6d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x5f, 0x70, // .tablet.mobile_p - 0x68, 0x6f, 0x6e, 0x65, 0x0c, 0x63, 0x69, 0x72, 0x63, 0x6c, 0x65, 0x5f, 0x62, 0x6c, 0x61, 0x6e, // hone.circle_blan - 0x6b, 0x0a, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x0b, 0x71, 0x75, 0x6f, // k.quote_left.quo - 0x74, 0x65, 0x5f, 0x72, 0x69, 0x67, 0x68, 0x74, 0x07, 0x73, 0x70, 0x69, 0x6e, 0x6e, 0x65, 0x72, // te_right.spinner - 0x06, 0x63, 0x69, 0x72, 0x63, 0x6c, 0x65, 0x05, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x0a, 0x67, 0x69, // .circle.reply.gi - 0x74, 0x68, 0x75, 0x62, 0x5f, 0x61, 0x6c, 0x74, 0x10, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x5f, // thub_alt.folder_ - 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x5f, 0x61, 0x6c, 0x74, 0x0f, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, // close_alt.folder - 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x61, 0x6c, 0x74, 0x0a, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x64, // _open_alt.expand - 0x5f, 0x61, 0x6c, 0x74, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x70, 0x73, 0x65, 0x5f, 0x61, 0x6c, // _alt.collapse_al - 0x74, 0x05, 0x73, 0x6d, 0x69, 0x6c, 0x65, 0x05, 0x66, 0x72, 0x6f, 0x77, 0x6e, 0x03, 0x6d, 0x65, // t.smile.frown.me - 0x68, 0x07, 0x67, 0x61, 0x6d, 0x65, 0x70, 0x61, 0x64, 0x08, 0x6b, 0x65, 0x79, 0x62, 0x6f, 0x61, // h.gamepad.keyboa - 0x72, 0x64, 0x08, 0x66, 0x6c, 0x61, 0x67, 0x5f, 0x61, 0x6c, 0x74, 0x0e, 0x66, 0x6c, 0x61, 0x67, // rd.flag_alt.flag - 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x72, 0x65, 0x64, 0x08, 0x74, 0x65, 0x72, 0x6d, 0x69, // _checkered.termi - 0x6e, 0x61, 0x6c, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x09, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x5f, 0x61, // nal.code.reply_a - 0x6c, 0x6c, 0x0f, 0x73, 0x74, 0x61, 0x72, 0x5f, 0x68, 0x61, 0x6c, 0x66, 0x5f, 0x65, 0x6d, 0x70, // ll.star_half_emp - 0x74, 0x79, 0x0e, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x72, 0x72, 0x6f, // ty.location_arro - 0x77, 0x04, 0x63, 0x72, 0x6f, 0x70, 0x09, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x6b, // w.crop.code_fork - 0x06, 0x75, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x04, 0x5f, 0x32, 0x37, 0x39, 0x0b, 0x65, 0x78, 0x63, // .unlink._279.exc - 0x6c, 0x61, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0b, 0x73, 0x75, 0x70, 0x65, 0x72, 0x73, 0x63, // lamation.supersc - 0x72, 0x69, 0x70, 0x74, 0x09, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x04, 0x5f, // ript.subscript._ - 0x32, 0x38, 0x33, 0x0c, 0x70, 0x75, 0x7a, 0x7a, 0x6c, 0x65, 0x5f, 0x70, 0x69, 0x65, 0x63, 0x65, // 283.puzzle_piece - 0x0a, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x0e, 0x6d, 0x69, 0x63, 0x72, // .microphone.micr - 0x6f, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x5f, 0x6f, 0x66, 0x66, 0x06, 0x73, 0x68, 0x69, 0x65, 0x6c, // ophone_off.shiel - 0x64, 0x0e, 0x63, 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, // d.calendar_empty - 0x11, 0x66, 0x69, 0x72, 0x65, 0x5f, 0x65, 0x78, 0x74, 0x69, 0x6e, 0x67, 0x75, 0x69, 0x73, 0x68, // .fire_extinguish - 0x65, 0x72, 0x06, 0x72, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x06, 0x6d, 0x61, 0x78, 0x63, 0x64, 0x6e, // er.rocket.maxcdn - 0x11, 0x63, 0x68, 0x65, 0x76, 0x72, 0x6f, 0x6e, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x5f, 0x6c, 0x65, // .chevron_sign_le - 0x66, 0x74, 0x12, 0x63, 0x68, 0x65, 0x76, 0x72, 0x6f, 0x6e, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x5f, // ft.chevron_sign_ - 0x72, 0x69, 0x67, 0x68, 0x74, 0x0f, 0x63, 0x68, 0x65, 0x76, 0x72, 0x6f, 0x6e, 0x5f, 0x73, 0x69, // right.chevron_si - 0x67, 0x6e, 0x5f, 0x75, 0x70, 0x11, 0x63, 0x68, 0x65, 0x76, 0x72, 0x6f, 0x6e, 0x5f, 0x73, 0x69, // gn_up.chevron_si - 0x67, 0x6e, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x05, 0x68, 0x74, 0x6d, 0x6c, 0x35, 0x04, 0x63, 0x73, // gn_down.html5.cs - 0x73, 0x33, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x0a, 0x75, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, // s3.anchor.unlock - 0x5f, 0x61, 0x6c, 0x74, 0x08, 0x62, 0x75, 0x6c, 0x6c, 0x73, 0x65, 0x79, 0x65, 0x13, 0x65, 0x6c, // _alt.bullseye.el - 0x6c, 0x69, 0x70, 0x73, 0x69, 0x73, 0x5f, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, // lipsis_horizonta - 0x6c, 0x11, 0x65, 0x6c, 0x6c, 0x69, 0x70, 0x73, 0x69, 0x73, 0x5f, 0x76, 0x65, 0x72, 0x74, 0x69, // l.ellipsis_verti - 0x63, 0x61, 0x6c, 0x04, 0x5f, 0x33, 0x30, 0x33, 0x09, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x73, 0x69, // cal._303.play_si - 0x67, 0x6e, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x0e, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x5f, // gn.ticket.minus_ - 0x73, 0x69, 0x67, 0x6e, 0x5f, 0x61, 0x6c, 0x74, 0x0b, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x6d, // sign_alt.check_m - 0x69, 0x6e, 0x75, 0x73, 0x08, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x5f, 0x75, 0x70, 0x0a, 0x6c, 0x65, // inus.level_up.le - 0x76, 0x65, 0x6c, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x0a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x73, // vel_down.check_s - 0x69, 0x67, 0x6e, 0x09, 0x65, 0x64, 0x69, 0x74, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x04, 0x5f, 0x33, // ign.edit_sign._3 - 0x31, 0x32, 0x0a, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x07, 0x63, 0x6f, // 12.share_sign.co - 0x6d, 0x70, 0x61, 0x73, 0x73, 0x08, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x70, 0x73, 0x65, 0x0c, 0x63, // mpass.collapse.c - 0x6f, 0x6c, 0x6c, 0x61, 0x70, 0x73, 0x65, 0x5f, 0x74, 0x6f, 0x70, 0x04, 0x5f, 0x33, 0x31, 0x37, // ollapse_top._317 - 0x03, 0x65, 0x75, 0x72, 0x03, 0x67, 0x62, 0x70, 0x03, 0x75, 0x73, 0x64, 0x03, 0x69, 0x6e, 0x72, // .eur.gbp.usd.inr - 0x03, 0x6a, 0x70, 0x79, 0x03, 0x72, 0x75, 0x62, 0x03, 0x6b, 0x72, 0x77, 0x03, 0x62, 0x74, 0x63, // .jpy.rub.krw.btc - 0x04, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x10, // .file.file_text. - 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x62, 0x79, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x62, 0x65, 0x74, // sort_by_alphabet - 0x04, 0x5f, 0x33, 0x32, 0x39, 0x12, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x62, 0x79, 0x5f, 0x61, 0x74, // ._329.sort_by_at - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x16, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x62, 0x79, // tributes.sort_by - 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x5f, 0x61, 0x6c, 0x74, 0x0d, // _attributes_alt. - 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x62, 0x79, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x11, 0x73, 0x6f, // sort_by_order.so - 0x72, 0x74, 0x5f, 0x62, 0x79, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x61, 0x6c, 0x74, 0x04, // rt_by_order_alt. - 0x5f, 0x33, 0x33, 0x34, 0x04, 0x5f, 0x33, 0x33, 0x35, 0x0c, 0x79, 0x6f, 0x75, 0x74, 0x75, 0x62, // _334._335.youtub - 0x65, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x07, 0x79, 0x6f, 0x75, 0x74, 0x75, 0x62, 0x65, 0x04, 0x78, // e_sign.youtube.x - 0x69, 0x6e, 0x67, 0x09, 0x78, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x0c, 0x79, 0x6f, // ing.xing_sign.yo - 0x75, 0x74, 0x75, 0x62, 0x65, 0x5f, 0x70, 0x6c, 0x61, 0x79, 0x07, 0x64, 0x72, 0x6f, 0x70, 0x62, // utube_play.dropb - 0x6f, 0x78, 0x0d, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, // ox.stackexchange - 0x09, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x67, 0x72, 0x61, 0x6d, 0x06, 0x66, 0x6c, 0x69, 0x63, 0x6b, // .instagram.flick - 0x72, 0x03, 0x61, 0x64, 0x6e, 0x04, 0x66, 0x31, 0x37, 0x31, 0x0e, 0x62, 0x69, 0x74, 0x62, 0x75, // r.adn.f171.bitbu - 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x06, 0x74, 0x75, 0x6d, 0x62, 0x6c, 0x72, // cket_sign.tumblr - 0x0b, 0x74, 0x75, 0x6d, 0x62, 0x6c, 0x72, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x0f, 0x6c, 0x6f, 0x6e, // .tumblr_sign.lon - 0x67, 0x5f, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x0d, 0x6c, 0x6f, 0x6e, // g_arrow_down.lon - 0x67, 0x5f, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x5f, 0x75, 0x70, 0x0f, 0x6c, 0x6f, 0x6e, 0x67, 0x5f, // g_arrow_up.long_ - 0x61, 0x72, 0x72, 0x6f, 0x77, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x10, 0x6c, 0x6f, 0x6e, 0x67, 0x5f, // arrow_left.long_ - 0x61, 0x72, 0x72, 0x6f, 0x77, 0x5f, 0x72, 0x69, 0x67, 0x68, 0x74, 0x07, 0x77, 0x69, 0x6e, 0x64, // arrow_right.wind - 0x6f, 0x77, 0x73, 0x07, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x05, 0x6c, 0x69, 0x6e, 0x75, // ows.android.linu - 0x78, 0x07, 0x64, 0x72, 0x69, 0x62, 0x62, 0x6c, 0x65, 0x05, 0x73, 0x6b, 0x79, 0x70, 0x65, 0x0a, // x.dribble.skype. - 0x66, 0x6f, 0x75, 0x72, 0x73, 0x71, 0x75, 0x61, 0x72, 0x65, 0x06, 0x74, 0x72, 0x65, 0x6c, 0x6c, // foursquare.trell - 0x6f, 0x06, 0x66, 0x65, 0x6d, 0x61, 0x6c, 0x65, 0x04, 0x6d, 0x61, 0x6c, 0x65, 0x06, 0x67, 0x69, // o.female.male.gi - 0x74, 0x74, 0x69, 0x70, 0x03, 0x73, 0x75, 0x6e, 0x04, 0x5f, 0x33, 0x36, 0x36, 0x07, 0x61, 0x72, // ttip.sun._366.ar - 0x63, 0x68, 0x69, 0x76, 0x65, 0x03, 0x62, 0x75, 0x67, 0x02, 0x76, 0x6b, 0x05, 0x77, 0x65, 0x69, // chive.bug.vk.wei - 0x62, 0x6f, 0x06, 0x72, 0x65, 0x6e, 0x72, 0x65, 0x6e, 0x04, 0x5f, 0x33, 0x37, 0x32, 0x0e, 0x73, // bo.renren._372.s - 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x04, 0x5f, 0x33, // tack_exchange._3 - 0x37, 0x34, 0x15, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x5f, 0x63, 0x69, 0x72, 0x63, 0x6c, 0x65, 0x5f, // 74.arrow_circle_ - 0x61, 0x6c, 0x74, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x04, 0x5f, 0x33, 0x37, 0x36, 0x0e, 0x64, 0x6f, // alt_left._376.do - 0x74, 0x5f, 0x63, 0x69, 0x72, 0x63, 0x6c, 0x65, 0x5f, 0x61, 0x6c, 0x74, 0x04, 0x5f, 0x33, 0x37, // t_circle_alt._37 - 0x38, 0x0c, 0x76, 0x69, 0x6d, 0x65, 0x6f, 0x5f, 0x73, 0x71, 0x75, 0x61, 0x72, 0x65, 0x04, 0x5f, // 8.vimeo_square._ - 0x33, 0x38, 0x30, 0x04, 0x5f, 0x33, 0x38, 0x31, 0x04, 0x5f, 0x33, 0x38, 0x32, 0x04, 0x5f, 0x33, // 380._381._382._3 - 0x38, 0x33, 0x04, 0x5f, 0x33, 0x38, 0x34, 0x04, 0x5f, 0x33, 0x38, 0x35, 0x04, 0x5f, 0x33, 0x38, // 83._384._385._38 - 0x36, 0x04, 0x5f, 0x33, 0x38, 0x37, 0x04, 0x5f, 0x33, 0x38, 0x38, 0x04, 0x5f, 0x33, 0x38, 0x39, // 6._387._388._389 - 0x00, 0x01, 0x52, 0x67, 0x41, 0x5b, 0x00, 0x00, // ..RgA[.. + 0x00, 0x6d, 0x00, 0x65, 0x00, 0x00, 0x46, 0x6f, 0x6e, 0x74, 0x41, 0x77, 0x65, 0x73, 0x6f, 0x6d, // .m.e..FontAwesom + 0x65, 0x00, 0x00, 0x52, 0x00, 0x65, 0x00, 0x67, 0x00, 0x75, 0x00, 0x6c, 0x00, 0x61, 0x00, 0x72, // e..R.e.g.u.l.a.r + 0x00, 0x00, 0x52, 0x65, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x00, 0x00, 0x46, 0x00, 0x4f, 0x00, 0x4e, // ..Regular..F.O.N + 0x00, 0x54, 0x00, 0x4c, 0x00, 0x41, 0x00, 0x42, 0x00, 0x3a, 0x00, 0x4f, 0x00, 0x54, 0x00, 0x46, // .T.L.A.B.:.O.T.F + 0x00, 0x45, 0x00, 0x58, 0x00, 0x50, 0x00, 0x4f, 0x00, 0x52, 0x00, 0x54, 0x00, 0x00, 0x46, 0x4f, // .E.X.P.O.R.T..FO + 0x4e, 0x54, 0x4c, 0x41, 0x42, 0x3a, 0x4f, 0x54, 0x46, 0x45, 0x58, 0x50, 0x4f, 0x52, 0x54, 0x00, // NTLAB:OTFEXPORT. + 0x00, 0x46, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x41, 0x00, 0x77, 0x00, 0x65, 0x00, 0x73, // .F.o.n.t.A.w.e.s + 0x00, 0x6f, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x00, 0x46, 0x6f, 0x6e, 0x74, 0x41, 0x77, 0x65, 0x73, // .o.m.e..FontAwes + 0x6f, 0x6d, 0x65, 0x00, 0x00, 0x56, 0x00, 0x65, 0x00, 0x72, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6f, // ome..V.e.r.s.i.o + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x34, 0x00, 0x2e, 0x00, 0x37, 0x00, 0x2e, 0x00, 0x30, 0x00, 0x20, // .n. .4...7...0. + 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x36, 0x00, 0x00, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, // .2.0.1.6..Versio + 0x6e, 0x20, 0x34, 0x2e, 0x37, 0x2e, 0x30, 0x20, 0x32, 0x30, 0x31, 0x36, 0x00, 0x00, 0x46, 0x00, // n 4.7.0 2016..F. + 0x6f, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x41, 0x00, 0x77, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6f, 0x00, // o.n.t.A.w.e.s.o. + 0x6d, 0x00, 0x65, 0x00, 0x00, 0x46, 0x6f, 0x6e, 0x74, 0x41, 0x77, 0x65, 0x73, 0x6f, 0x6d, 0x65, // m.e..FontAwesome + 0x00, 0x00, 0x50, 0x00, 0x6c, 0x00, 0x65, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x20, 0x00, // ..P.l.e.a.s.e. . + 0x72, 0x00, 0x65, 0x00, 0x66, 0x00, 0x65, 0x00, 0x72, 0x00, 0x20, 0x00, 0x74, 0x00, 0x6f, 0x00, // r.e.f.e.r. .t.o. + 0x20, 0x00, 0x74, 0x00, 0x68, 0x00, 0x65, 0x00, 0x20, 0x00, 0x43, 0x00, 0x6f, 0x00, 0x70, 0x00, // .t.h.e. .C.o.p. + 0x79, 0x00, 0x72, 0x00, 0x69, 0x00, 0x67, 0x00, 0x68, 0x00, 0x74, 0x00, 0x20, 0x00, 0x73, 0x00, // y.r.i.g.h.t. .s. + 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x66, 0x00, // e.c.t.i.o.n. .f. + 0x6f, 0x00, 0x72, 0x00, 0x20, 0x00, 0x74, 0x00, 0x68, 0x00, 0x65, 0x00, 0x20, 0x00, 0x66, 0x00, // o.r. .t.h.e. .f. + 0x6f, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x20, 0x00, 0x74, 0x00, 0x72, 0x00, 0x61, 0x00, 0x64, 0x00, // o.n.t. .t.r.a.d. + 0x65, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x72, 0x00, 0x6b, 0x00, 0x20, 0x00, 0x61, 0x00, 0x74, 0x00, // e.m.a.r.k. .a.t. + 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x62, 0x00, 0x75, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6f, 0x00, // t.r.i.b.u.t.i.o. + 0x6e, 0x00, 0x20, 0x00, 0x6e, 0x00, 0x6f, 0x00, 0x74, 0x00, 0x69, 0x00, 0x63, 0x00, 0x65, 0x00, // n. .n.o.t.i.c.e. + 0x73, 0x00, 0x2e, 0x00, 0x00, 0x50, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x20, 0x72, 0x65, 0x66, 0x65, // s....Please refe + 0x72, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, // r to the Copyrig + 0x68, 0x74, 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, // ht section for t + 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x74, 0x72, 0x61, 0x64, 0x65, 0x6d, 0x61, 0x72, // he font trademar + 0x6b, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6e, 0x6f, // k attribution no + 0x74, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x00, 0x00, 0x46, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x74, 0x00, // tices...F.o.r.t. + 0x20, 0x00, 0x41, 0x00, 0x77, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6f, 0x00, 0x6d, 0x00, 0x65, 0x00, // .A.w.e.s.o.m.e. + 0x00, 0x46, 0x6f, 0x72, 0x74, 0x20, 0x41, 0x77, 0x65, 0x73, 0x6f, 0x6d, 0x65, 0x00, 0x00, 0x44, // .Fort Awesome..D + 0x00, 0x61, 0x00, 0x76, 0x00, 0x65, 0x00, 0x20, 0x00, 0x47, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x64, // .a.v.e. .G.a.n.d + 0x00, 0x79, 0x00, 0x00, 0x44, 0x61, 0x76, 0x65, 0x20, 0x47, 0x61, 0x6e, 0x64, 0x79, 0x00, 0x00, // .y..Dave Gandy.. + 0x68, 0x00, 0x74, 0x00, 0x74, 0x00, 0x70, 0x00, 0x3a, 0x00, 0x2f, 0x00, 0x2f, 0x00, 0x66, 0x00, // h.t.t.p.:././.f. + 0x6f, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x61, 0x00, 0x77, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6f, 0x00, // o.n.t.a.w.e.s.o. + 0x6d, 0x00, 0x65, 0x00, 0x2e, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x00, 0x68, 0x74, 0x74, 0x70, 0x3a, // m.e...i.o..http: + 0x2f, 0x2f, 0x66, 0x6f, 0x6e, 0x74, 0x61, 0x77, 0x65, 0x73, 0x6f, 0x6d, 0x65, 0x2e, 0x69, 0x6f, // //fontawesome.io + 0x00, 0x00, 0x68, 0x00, 0x74, 0x00, 0x74, 0x00, 0x70, 0x00, 0x3a, 0x00, 0x2f, 0x00, 0x2f, 0x00, // ..h.t.t.p.:././. + 0x66, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x61, 0x00, 0x77, 0x00, 0x65, 0x00, 0x73, 0x00, // f.o.n.t.a.w.e.s. + 0x6f, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x2e, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x2f, 0x00, 0x6c, 0x00, // o.m.e...i.o./.l. + 0x69, 0x00, 0x63, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x2f, 0x00, 0x00, 0x68, // i.c.e.n.s.e./..h + 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x66, 0x6f, 0x6e, 0x74, 0x61, 0x77, 0x65, 0x73, 0x6f, 0x6d, // ttp://fontawesom + 0x65, 0x2e, 0x69, 0x6f, 0x2f, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2f, 0x00, 0x00, 0x00, // e.io/license/... + 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x02, 0xc3, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x8e, 0x00, 0x8b, 0x00, 0x8a, // ................ + 0x00, 0x8d, 0x00, 0x90, 0x00, 0x91, 0x00, 0x8c, 0x00, 0x92, 0x00, 0x8f, 0x01, 0x02, 0x01, 0x03, // ................ + 0x01, 0x04, 0x01, 0x05, 0x01, 0x06, 0x01, 0x07, 0x01, 0x08, 0x01, 0x09, 0x01, 0x0a, 0x01, 0x0b, // ................ + 0x01, 0x0c, 0x01, 0x0d, 0x01, 0x0e, 0x01, 0x0f, 0x01, 0x10, 0x01, 0x11, 0x01, 0x12, 0x01, 0x13, // ................ + 0x01, 0x14, 0x01, 0x15, 0x01, 0x16, 0x01, 0x17, 0x01, 0x18, 0x01, 0x19, 0x01, 0x1a, 0x01, 0x1b, // ................ + 0x01, 0x1c, 0x01, 0x1d, 0x01, 0x1e, 0x01, 0x1f, 0x01, 0x20, 0x01, 0x21, 0x01, 0x22, 0x01, 0x23, // ......... .!.".# + 0x01, 0x24, 0x01, 0x25, 0x01, 0x26, 0x01, 0x27, 0x01, 0x28, 0x01, 0x29, 0x01, 0x2a, 0x01, 0x2b, // .$.%.&.'.(.).*.+ + 0x01, 0x2c, 0x01, 0x2d, 0x01, 0x2e, 0x01, 0x2f, 0x01, 0x30, 0x01, 0x31, 0x01, 0x32, 0x01, 0x33, // .,.-.../.0.1.2.3 + 0x01, 0x34, 0x01, 0x35, 0x01, 0x36, 0x01, 0x37, 0x01, 0x38, 0x01, 0x39, 0x01, 0x3a, 0x01, 0x3b, // .4.5.6.7.8.9.:.; + 0x01, 0x3c, 0x01, 0x3d, 0x01, 0x3e, 0x01, 0x3f, 0x01, 0x40, 0x01, 0x41, 0x01, 0x42, 0x01, 0x43, // .<.=.>.?.@.A.B.C + 0x01, 0x44, 0x01, 0x45, 0x01, 0x46, 0x01, 0x47, 0x01, 0x48, 0x01, 0x49, 0x01, 0x4a, 0x01, 0x4b, // .D.E.F.G.H.I.J.K + 0x01, 0x4c, 0x01, 0x4d, 0x01, 0x4e, 0x01, 0x4f, 0x01, 0x50, 0x01, 0x51, 0x01, 0x52, 0x01, 0x53, // .L.M.N.O.P.Q.R.S + 0x01, 0x54, 0x01, 0x55, 0x01, 0x56, 0x01, 0x57, 0x01, 0x58, 0x01, 0x59, 0x01, 0x5a, 0x01, 0x5b, // .T.U.V.W.X.Y.Z.[ + 0x01, 0x5c, 0x01, 0x5d, 0x01, 0x5e, 0x01, 0x5f, 0x01, 0x60, 0x01, 0x61, 0x01, 0x62, 0x00, 0x0e, // ...].^._.`.a.b.. + 0x00, 0xef, 0x00, 0x0d, 0x01, 0x63, 0x01, 0x64, 0x01, 0x65, 0x01, 0x66, 0x01, 0x67, 0x01, 0x68, // .....c.d.e.f.g.h + 0x01, 0x69, 0x01, 0x6a, 0x01, 0x6b, 0x01, 0x6c, 0x01, 0x6d, 0x01, 0x6e, 0x01, 0x6f, 0x01, 0x70, // .i.j.k.l.m.n.o.p + 0x01, 0x71, 0x01, 0x72, 0x01, 0x73, 0x01, 0x74, 0x01, 0x75, 0x01, 0x76, 0x01, 0x77, 0x01, 0x78, // .q.r.s.t.u.v.w.x + 0x01, 0x79, 0x01, 0x7a, 0x01, 0x7b, 0x01, 0x7c, 0x01, 0x7d, 0x01, 0x7e, 0x01, 0x7f, 0x01, 0x80, // .y.z.{.|.}.~.... + 0x01, 0x81, 0x01, 0x82, 0x01, 0x83, 0x01, 0x84, 0x01, 0x85, 0x01, 0x86, 0x01, 0x87, 0x01, 0x88, // ................ + 0x01, 0x89, 0x01, 0x8a, 0x01, 0x8b, 0x01, 0x8c, 0x01, 0x8d, 0x01, 0x8e, 0x01, 0x8f, 0x01, 0x90, // ................ + 0x01, 0x91, 0x01, 0x92, 0x01, 0x93, 0x01, 0x94, 0x01, 0x95, 0x01, 0x96, 0x01, 0x97, 0x01, 0x98, // ................ + 0x01, 0x99, 0x01, 0x9a, 0x01, 0x9b, 0x01, 0x9c, 0x01, 0x9d, 0x01, 0x9e, 0x01, 0x9f, 0x01, 0xa0, // ................ + 0x01, 0xa1, 0x01, 0xa2, 0x01, 0xa3, 0x01, 0xa4, 0x01, 0xa5, 0x01, 0xa6, 0x01, 0xa7, 0x01, 0xa8, // ................ + 0x01, 0xa9, 0x01, 0xaa, 0x01, 0xab, 0x01, 0xac, 0x01, 0xad, 0x01, 0xae, 0x01, 0xaf, 0x01, 0xb0, // ................ + 0x01, 0xb1, 0x01, 0xb2, 0x01, 0xb3, 0x01, 0xb4, 0x01, 0xb5, 0x01, 0xb6, 0x01, 0xb7, 0x01, 0xb8, // ................ + 0x01, 0xb9, 0x01, 0xba, 0x01, 0xbb, 0x01, 0xbc, 0x01, 0xbd, 0x01, 0xbe, 0x01, 0xbf, 0x01, 0xc0, // ................ + 0x01, 0xc1, 0x01, 0xc2, 0x01, 0xc3, 0x01, 0xc4, 0x01, 0xc5, 0x01, 0xc6, 0x01, 0xc7, 0x01, 0xc8, // ................ + 0x01, 0xc9, 0x01, 0xca, 0x01, 0xcb, 0x01, 0xcc, 0x01, 0xcd, 0x01, 0xce, 0x01, 0xcf, 0x01, 0xd0, // ................ + 0x01, 0xd1, 0x01, 0xd2, 0x01, 0xd3, 0x01, 0xd4, 0x01, 0xd5, 0x01, 0xd6, 0x01, 0xd7, 0x01, 0xd8, // ................ + 0x01, 0xd9, 0x01, 0xda, 0x01, 0xdb, 0x01, 0xdc, 0x01, 0xdd, 0x01, 0xde, 0x01, 0xdf, 0x01, 0xe0, // ................ + 0x01, 0xe1, 0x01, 0xe2, 0x01, 0xe3, 0x01, 0xe4, 0x01, 0xe5, 0x01, 0xe6, 0x01, 0xe7, 0x01, 0xe8, // ................ + 0x01, 0xe9, 0x01, 0xea, 0x01, 0xeb, 0x01, 0xec, 0x01, 0xed, 0x01, 0xee, 0x01, 0xef, 0x01, 0xf0, // ................ + 0x01, 0xf1, 0x01, 0xf2, 0x01, 0xf3, 0x01, 0xf4, 0x01, 0xf5, 0x01, 0xf6, 0x01, 0xf7, 0x01, 0xf8, // ................ + 0x01, 0xf9, 0x01, 0xfa, 0x01, 0xfb, 0x01, 0xfc, 0x01, 0xfd, 0x01, 0xfe, 0x01, 0xff, 0x02, 0x00, // ................ + 0x02, 0x01, 0x02, 0x02, 0x02, 0x03, 0x02, 0x04, 0x02, 0x05, 0x02, 0x06, 0x02, 0x07, 0x02, 0x08, // ................ + 0x00, 0x22, 0x02, 0x09, 0x02, 0x0a, 0x02, 0x0b, 0x02, 0x0c, 0x02, 0x0d, 0x02, 0x0e, 0x02, 0x0f, // .".............. + 0x02, 0x10, 0x02, 0x11, 0x02, 0x12, 0x02, 0x13, 0x02, 0x14, 0x02, 0x15, 0x02, 0x16, 0x02, 0x17, // ................ + 0x02, 0x18, 0x02, 0x19, 0x02, 0x1a, 0x02, 0x1b, 0x02, 0x1c, 0x02, 0x1d, 0x02, 0x1e, 0x02, 0x1f, // ................ + 0x02, 0x20, 0x02, 0x21, 0x02, 0x22, 0x02, 0x23, 0x02, 0x24, 0x02, 0x25, 0x02, 0x26, 0x02, 0x27, // . .!.".#.$.%.&.' + 0x02, 0x28, 0x02, 0x29, 0x02, 0x2a, 0x02, 0x2b, 0x02, 0x2c, 0x02, 0x2d, 0x02, 0x2e, 0x02, 0x2f, // .(.).*.+.,.-.../ + 0x02, 0x30, 0x02, 0x31, 0x02, 0x32, 0x02, 0x33, 0x02, 0x34, 0x02, 0x35, 0x02, 0x36, 0x02, 0x37, // .0.1.2.3.4.5.6.7 + 0x02, 0x38, 0x02, 0x39, 0x02, 0x3a, 0x02, 0x3b, 0x02, 0x3c, 0x02, 0x3d, 0x02, 0x3e, 0x02, 0x3f, // .8.9.:.;.<.=.>.? + 0x02, 0x40, 0x02, 0x41, 0x02, 0x42, 0x02, 0x43, 0x02, 0x44, 0x02, 0x45, 0x02, 0x46, 0x02, 0x47, // .@.A.B.C.D.E.F.G + 0x02, 0x48, 0x02, 0x49, 0x02, 0x4a, 0x02, 0x4b, 0x02, 0x4c, 0x02, 0x4d, 0x02, 0x4e, 0x02, 0x4f, // .H.I.J.K.L.M.N.O + 0x02, 0x50, 0x02, 0x51, 0x02, 0x52, 0x02, 0x53, 0x00, 0xd2, 0x02, 0x54, 0x02, 0x55, 0x02, 0x56, // .P.Q.R.S...T.U.V + 0x02, 0x57, 0x02, 0x58, 0x02, 0x59, 0x02, 0x5a, 0x02, 0x5b, 0x02, 0x5c, 0x02, 0x5d, 0x02, 0x5e, // .W.X.Y.Z.[...].^ + 0x02, 0x5f, 0x02, 0x60, 0x02, 0x61, 0x02, 0x62, 0x02, 0x63, 0x02, 0x64, 0x02, 0x65, 0x02, 0x66, // ._.`.a.b.c.d.e.f + 0x02, 0x67, 0x02, 0x68, 0x02, 0x69, 0x02, 0x6a, 0x02, 0x6b, 0x02, 0x6c, 0x02, 0x6d, 0x02, 0x6e, // .g.h.i.j.k.l.m.n + 0x02, 0x6f, 0x02, 0x70, 0x02, 0x71, 0x02, 0x72, 0x02, 0x73, 0x02, 0x74, 0x02, 0x75, 0x02, 0x76, // .o.p.q.r.s.t.u.v + 0x02, 0x77, 0x02, 0x78, 0x02, 0x79, 0x02, 0x7a, 0x02, 0x7b, 0x02, 0x7c, 0x02, 0x7d, 0x02, 0x7e, // .w.x.y.z.{.|.}.~ + 0x02, 0x7f, 0x02, 0x80, 0x02, 0x81, 0x02, 0x82, 0x02, 0x83, 0x02, 0x84, 0x02, 0x85, 0x02, 0x86, // ................ + 0x02, 0x87, 0x02, 0x88, 0x02, 0x89, 0x02, 0x8a, 0x02, 0x8b, 0x02, 0x8c, 0x02, 0x8d, 0x02, 0x8e, // ................ + 0x02, 0x8f, 0x02, 0x90, 0x02, 0x91, 0x02, 0x92, 0x02, 0x93, 0x02, 0x94, 0x02, 0x95, 0x02, 0x96, // ................ + 0x02, 0x97, 0x02, 0x98, 0x02, 0x99, 0x02, 0x9a, 0x02, 0x9b, 0x02, 0x9c, 0x02, 0x9d, 0x02, 0x9e, // ................ + 0x02, 0x9f, 0x02, 0xa0, 0x02, 0xa1, 0x02, 0xa2, 0x02, 0xa3, 0x02, 0xa4, 0x02, 0xa5, 0x02, 0xa6, // ................ + 0x02, 0xa7, 0x02, 0xa8, 0x02, 0xa9, 0x02, 0xaa, 0x02, 0xab, 0x02, 0xac, 0x02, 0xad, 0x02, 0xae, // ................ + 0x02, 0xaf, 0x02, 0xb0, 0x02, 0xb1, 0x02, 0xb2, 0x02, 0xb3, 0x02, 0xb4, 0x02, 0xb5, 0x02, 0xb6, // ................ + 0x02, 0xb7, 0x02, 0xb8, 0x02, 0xb9, 0x02, 0xba, 0x02, 0xbb, 0x02, 0xbc, 0x02, 0xbd, 0x02, 0xbe, // ................ + 0x02, 0xbf, 0x02, 0xc0, 0x02, 0xc1, 0x02, 0xc2, 0x02, 0xc3, 0x02, 0xc4, 0x02, 0xc5, 0x02, 0xc6, // ................ + 0x02, 0xc7, 0x02, 0xc8, 0x02, 0xc9, 0x02, 0xca, 0x02, 0xcb, 0x02, 0xcc, 0x02, 0xcd, 0x02, 0xce, // ................ + 0x02, 0xcf, 0x02, 0xd0, 0x02, 0xd1, 0x02, 0xd2, 0x02, 0xd3, 0x02, 0xd4, 0x02, 0xd5, 0x02, 0xd6, // ................ + 0x02, 0xd7, 0x02, 0xd8, 0x02, 0xd9, 0x02, 0xda, 0x02, 0xdb, 0x02, 0xdc, 0x02, 0xdd, 0x02, 0xde, // ................ + 0x02, 0xdf, 0x02, 0xe0, 0x02, 0xe1, 0x02, 0xe2, 0x02, 0xe3, 0x02, 0xe4, 0x02, 0xe5, 0x02, 0xe6, // ................ + 0x02, 0xe7, 0x02, 0xe8, 0x02, 0xe9, 0x02, 0xea, 0x02, 0xeb, 0x02, 0xec, 0x02, 0xed, 0x02, 0xee, // ................ + 0x02, 0xef, 0x02, 0xf0, 0x02, 0xf1, 0x02, 0xf2, 0x02, 0xf3, 0x02, 0xf4, 0x02, 0xf5, 0x02, 0xf6, // ................ + 0x02, 0xf7, 0x02, 0xf8, 0x02, 0xf9, 0x02, 0xfa, 0x02, 0xfb, 0x02, 0xfc, 0x02, 0xfd, 0x02, 0xfe, // ................ + 0x02, 0xff, 0x03, 0x00, 0x03, 0x01, 0x03, 0x02, 0x03, 0x03, 0x03, 0x04, 0x03, 0x05, 0x03, 0x06, // ................ + 0x03, 0x07, 0x03, 0x08, 0x03, 0x09, 0x03, 0x0a, 0x03, 0x0b, 0x03, 0x0c, 0x03, 0x0d, 0x03, 0x0e, // ................ + 0x03, 0x0f, 0x03, 0x10, 0x03, 0x11, 0x03, 0x12, 0x03, 0x13, 0x03, 0x14, 0x03, 0x15, 0x03, 0x16, // ................ + 0x03, 0x17, 0x03, 0x18, 0x03, 0x19, 0x03, 0x1a, 0x03, 0x1b, 0x03, 0x1c, 0x03, 0x1d, 0x03, 0x1e, // ................ + 0x03, 0x1f, 0x03, 0x20, 0x03, 0x21, 0x03, 0x22, 0x03, 0x23, 0x03, 0x24, 0x03, 0x25, 0x03, 0x26, // ... .!.".#.$.%.& + 0x03, 0x27, 0x03, 0x28, 0x03, 0x29, 0x03, 0x2a, 0x03, 0x2b, 0x03, 0x2c, 0x03, 0x2d, 0x03, 0x2e, // .'.(.).*.+.,.-.. + 0x03, 0x2f, 0x03, 0x30, 0x03, 0x31, 0x03, 0x32, 0x03, 0x33, 0x03, 0x34, 0x03, 0x35, 0x03, 0x36, // ./.0.1.2.3.4.5.6 + 0x03, 0x37, 0x03, 0x38, 0x03, 0x39, 0x03, 0x3a, 0x03, 0x3b, 0x03, 0x3c, 0x03, 0x3d, 0x03, 0x3e, // .7.8.9.:.;.<.=.> + 0x03, 0x3f, 0x03, 0x40, 0x03, 0x41, 0x03, 0x42, 0x03, 0x43, 0x03, 0x44, 0x03, 0x45, 0x03, 0x46, // .?.@.A.B.C.D.E.F + 0x03, 0x47, 0x03, 0x48, 0x03, 0x49, 0x03, 0x4a, 0x03, 0x4b, 0x03, 0x4c, 0x03, 0x4d, 0x03, 0x4e, // .G.H.I.J.K.L.M.N + 0x03, 0x4f, 0x03, 0x50, 0x03, 0x51, 0x03, 0x52, 0x03, 0x53, 0x03, 0x54, 0x03, 0x55, 0x03, 0x56, // .O.P.Q.R.S.T.U.V + 0x03, 0x57, 0x03, 0x58, 0x03, 0x59, 0x03, 0x5a, 0x03, 0x5b, 0x03, 0x5c, 0x03, 0x5d, 0x03, 0x5e, // .W.X.Y.Z.[...].^ + 0x03, 0x5f, 0x03, 0x60, 0x03, 0x61, 0x03, 0x62, 0x03, 0x63, 0x03, 0x64, 0x03, 0x65, 0x03, 0x66, // ._.`.a.b.c.d.e.f + 0x03, 0x67, 0x03, 0x68, 0x03, 0x69, 0x03, 0x6a, 0x03, 0x6b, 0x03, 0x6c, 0x03, 0x6d, 0x03, 0x6e, // .g.h.i.j.k.l.m.n + 0x03, 0x6f, 0x03, 0x70, 0x03, 0x71, 0x03, 0x72, 0x03, 0x73, 0x03, 0x74, 0x03, 0x75, 0x03, 0x76, // .o.p.q.r.s.t.u.v + 0x03, 0x77, 0x03, 0x78, 0x03, 0x79, 0x03, 0x7a, 0x03, 0x7b, 0x03, 0x7c, 0x03, 0x7d, 0x03, 0x7e, // .w.x.y.z.{.|.}.~ + 0x03, 0x7f, 0x03, 0x80, 0x03, 0x81, 0x03, 0x82, 0x03, 0x83, 0x03, 0x84, 0x03, 0x85, 0x03, 0x86, // ................ + 0x03, 0x87, 0x03, 0x88, 0x03, 0x89, 0x03, 0x8a, 0x03, 0x8b, 0x03, 0x8c, 0x03, 0x8d, 0x03, 0x8e, // ................ + 0x03, 0x8f, 0x03, 0x90, 0x03, 0x91, 0x03, 0x92, 0x03, 0x93, 0x03, 0x94, 0x03, 0x95, 0x03, 0x96, // ................ + 0x03, 0x97, 0x03, 0x98, 0x03, 0x99, 0x03, 0x9a, 0x03, 0x9b, 0x03, 0x9c, 0x03, 0x9d, 0x03, 0x9e, // ................ + 0x03, 0x9f, 0x03, 0xa0, 0x03, 0xa1, 0x03, 0xa2, 0x03, 0xa3, 0x03, 0xa4, 0x03, 0xa5, 0x03, 0xa6, // ................ + 0x03, 0xa7, 0x03, 0xa8, 0x03, 0xa9, 0x03, 0xaa, 0x03, 0xab, 0x03, 0xac, 0x03, 0xad, 0x03, 0xae, // ................ + 0x03, 0xaf, 0x03, 0xb0, 0x03, 0xb1, 0x00, 0x94, 0x05, 0x67, 0x6c, 0x61, 0x73, 0x73, 0x05, 0x6d, // .........glass.m + 0x75, 0x73, 0x69, 0x63, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x08, 0x65, 0x6e, 0x76, 0x65, // usic.search.enve + 0x6c, 0x6f, 0x70, 0x65, 0x05, 0x68, 0x65, 0x61, 0x72, 0x74, 0x04, 0x73, 0x74, 0x61, 0x72, 0x0a, // lope.heart.star. + 0x73, 0x74, 0x61, 0x72, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x04, 0x75, 0x73, 0x65, 0x72, 0x04, // star_empty.user. + 0x66, 0x69, 0x6c, 0x6d, 0x08, 0x74, 0x68, 0x5f, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x02, 0x74, 0x68, // film.th_large.th + 0x07, 0x74, 0x68, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x02, 0x6f, 0x6b, 0x06, 0x72, 0x65, 0x6d, 0x6f, // .th_list.ok.remo + 0x76, 0x65, 0x07, 0x7a, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x6e, 0x08, 0x7a, 0x6f, 0x6f, 0x6d, 0x5f, // ve.zoom_in.zoom_ + 0x6f, 0x75, 0x74, 0x03, 0x6f, 0x66, 0x66, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x03, 0x63, // out.off.signal.c + 0x6f, 0x67, 0x05, 0x74, 0x72, 0x61, 0x73, 0x68, 0x04, 0x68, 0x6f, 0x6d, 0x65, 0x08, 0x66, 0x69, // og.trash.home.fi + 0x6c, 0x65, 0x5f, 0x61, 0x6c, 0x74, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x04, 0x72, 0x6f, 0x61, 0x64, // le_alt.time.road + 0x0c, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x61, 0x6c, 0x74, 0x08, 0x64, 0x6f, // .download_alt.do + 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x06, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x05, 0x69, 0x6e, // wnload.upload.in + 0x62, 0x6f, 0x78, 0x0b, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x63, 0x69, 0x72, 0x63, 0x6c, 0x65, 0x06, // box.play_circle. + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x07, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x08, 0x6c, // repeat.refresh.l + 0x69, 0x73, 0x74, 0x5f, 0x61, 0x6c, 0x74, 0x04, 0x6c, 0x6f, 0x63, 0x6b, 0x04, 0x66, 0x6c, 0x61, // ist_alt.lock.fla + 0x67, 0x0a, 0x68, 0x65, 0x61, 0x64, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x73, 0x0a, 0x76, 0x6f, 0x6c, // g.headphones.vol + 0x75, 0x6d, 0x65, 0x5f, 0x6f, 0x66, 0x66, 0x0b, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x64, // ume_off.volume_d + 0x6f, 0x77, 0x6e, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x75, 0x70, 0x06, 0x71, 0x72, // own.volume_up.qr + 0x63, 0x6f, 0x64, 0x65, 0x07, 0x62, 0x61, 0x72, 0x63, 0x6f, 0x64, 0x65, 0x03, 0x74, 0x61, 0x67, // code.barcode.tag + 0x04, 0x74, 0x61, 0x67, 0x73, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x08, 0x62, 0x6f, 0x6f, 0x6b, 0x6d, // .tags.book.bookm + 0x61, 0x72, 0x6b, 0x05, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x06, 0x63, 0x61, 0x6d, 0x65, 0x72, 0x61, // ark.print.camera + 0x04, 0x66, 0x6f, 0x6e, 0x74, 0x04, 0x62, 0x6f, 0x6c, 0x64, 0x06, 0x69, 0x74, 0x61, 0x6c, 0x69, // .font.bold.itali + 0x63, 0x0b, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x0a, 0x74, 0x65, // c.text_height.te + 0x78, 0x74, 0x5f, 0x77, 0x69, 0x64, 0x74, 0x68, 0x0a, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x5f, 0x6c, // xt_width.align_l + 0x65, 0x66, 0x74, 0x0c, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x5f, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, // eft.align_center + 0x0b, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x5f, 0x72, 0x69, 0x67, 0x68, 0x74, 0x0d, 0x61, 0x6c, 0x69, // .align_right.ali + 0x67, 0x6e, 0x5f, 0x6a, 0x75, 0x73, 0x74, 0x69, 0x66, 0x79, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x0b, // gn_justify.list. + 0x69, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x0c, 0x69, 0x6e, 0x64, 0x65, // indent_left.inde + 0x6e, 0x74, 0x5f, 0x72, 0x69, 0x67, 0x68, 0x74, 0x0e, 0x66, 0x61, 0x63, 0x65, 0x74, 0x69, 0x6d, // nt_right.facetim + 0x65, 0x5f, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x07, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x06, // e_video.picture. + 0x70, 0x65, 0x6e, 0x63, 0x69, 0x6c, 0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, // pencil.map_marke + 0x72, 0x06, 0x61, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x04, 0x74, 0x69, 0x6e, 0x74, 0x04, 0x65, 0x64, // r.adjust.tint.ed + 0x69, 0x74, 0x05, 0x73, 0x68, 0x61, 0x72, 0x65, 0x05, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x04, 0x6d, // it.share.check.m + 0x6f, 0x76, 0x65, 0x0d, 0x73, 0x74, 0x65, 0x70, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x77, 0x61, 0x72, // ove.step_backwar + 0x64, 0x0d, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x77, 0x61, 0x72, 0x64, 0x08, // d.fast_backward. + 0x62, 0x61, 0x63, 0x6b, 0x77, 0x61, 0x72, 0x64, 0x04, 0x70, 0x6c, 0x61, 0x79, 0x05, 0x70, 0x61, // backward.play.pa + 0x75, 0x73, 0x65, 0x04, 0x73, 0x74, 0x6f, 0x70, 0x07, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, // use.stop.forward + 0x0c, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x0c, 0x73, 0x74, // .fast_forward.st + 0x65, 0x70, 0x5f, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x05, 0x65, 0x6a, 0x65, 0x63, 0x74, // ep_forward.eject + 0x0c, 0x63, 0x68, 0x65, 0x76, 0x72, 0x6f, 0x6e, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x0d, 0x63, 0x68, // .chevron_left.ch + 0x65, 0x76, 0x72, 0x6f, 0x6e, 0x5f, 0x72, 0x69, 0x67, 0x68, 0x74, 0x09, 0x70, 0x6c, 0x75, 0x73, // evron_right.plus + 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x0a, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x5f, 0x73, 0x69, 0x67, 0x6e, // _sign.minus_sign + 0x0b, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x07, 0x6f, 0x6b, 0x5f, // .remove_sign.ok_ + 0x73, 0x69, 0x67, 0x6e, 0x0d, 0x71, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x69, // sign.question_si + 0x67, 0x6e, 0x09, 0x69, 0x6e, 0x66, 0x6f, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x0a, 0x73, 0x63, 0x72, // gn.info_sign.scr + 0x65, 0x65, 0x6e, 0x73, 0x68, 0x6f, 0x74, 0x0d, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x63, // eenshot.remove_c + 0x69, 0x72, 0x63, 0x6c, 0x65, 0x09, 0x6f, 0x6b, 0x5f, 0x63, 0x69, 0x72, 0x63, 0x6c, 0x65, 0x0a, // ircle.ok_circle. + 0x62, 0x61, 0x6e, 0x5f, 0x63, 0x69, 0x72, 0x63, 0x6c, 0x65, 0x0a, 0x61, 0x72, 0x72, 0x6f, 0x77, // ban_circle.arrow + 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x0b, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x5f, 0x72, 0x69, 0x67, 0x68, // _left.arrow_righ + 0x74, 0x08, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x5f, 0x75, 0x70, 0x0a, 0x61, 0x72, 0x72, 0x6f, 0x77, // t.arrow_up.arrow + 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x09, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x61, 0x6c, 0x74, 0x0b, // _down.share_alt. + 0x72, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x66, 0x75, 0x6c, 0x6c, 0x0c, 0x72, 0x65, 0x73, 0x69, // resize_full.resi + 0x7a, 0x65, 0x5f, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x61, 0x6d, 0x61, // ze_small.exclama + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x04, 0x67, 0x69, 0x66, 0x74, 0x04, 0x6c, // tion_sign.gift.l + 0x65, 0x61, 0x66, 0x04, 0x66, 0x69, 0x72, 0x65, 0x08, 0x65, 0x79, 0x65, 0x5f, 0x6f, 0x70, 0x65, // eaf.fire.eye_ope + 0x6e, 0x09, 0x65, 0x79, 0x65, 0x5f, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x0c, 0x77, 0x61, 0x72, 0x6e, // n.eye_close.warn + 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x05, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x08, 0x63, // ing_sign.plane.c + 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, 0x06, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x07, 0x63, // alendar.random.c + 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x06, 0x6d, 0x61, 0x67, 0x6e, 0x65, 0x74, 0x0a, 0x63, 0x68, // omment.magnet.ch + 0x65, 0x76, 0x72, 0x6f, 0x6e, 0x5f, 0x75, 0x70, 0x0c, 0x63, 0x68, 0x65, 0x76, 0x72, 0x6f, 0x6e, // evron_up.chevron + 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x07, 0x72, 0x65, 0x74, 0x77, 0x65, 0x65, 0x74, 0x0d, 0x73, 0x68, // _down.retweet.sh + 0x6f, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x61, 0x72, 0x74, 0x0c, 0x66, 0x6f, 0x6c, 0x64, // opping_cart.fold + 0x65, 0x72, 0x5f, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x0b, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x5f, // er_close.folder_ + 0x6f, 0x70, 0x65, 0x6e, 0x0f, 0x72, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x74, // open.resize_vert + 0x69, 0x63, 0x61, 0x6c, 0x11, 0x72, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x68, 0x6f, 0x72, 0x69, // ical.resize_hori + 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x09, 0x62, 0x61, 0x72, 0x5f, 0x63, 0x68, 0x61, 0x72, 0x74, // zontal.bar_chart + 0x0c, 0x74, 0x77, 0x69, 0x74, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x0d, 0x66, 0x61, // .twitter_sign.fa + 0x63, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x0c, 0x63, 0x61, 0x6d, 0x65, // cebook_sign.came + 0x72, 0x61, 0x5f, 0x72, 0x65, 0x74, 0x72, 0x6f, 0x03, 0x6b, 0x65, 0x79, 0x04, 0x63, 0x6f, 0x67, // ra_retro.key.cog + 0x73, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x0d, 0x74, 0x68, 0x75, 0x6d, 0x62, // s.comments.thumb + 0x73, 0x5f, 0x75, 0x70, 0x5f, 0x61, 0x6c, 0x74, 0x0f, 0x74, 0x68, 0x75, 0x6d, 0x62, 0x73, 0x5f, // s_up_alt.thumbs_ + 0x64, 0x6f, 0x77, 0x6e, 0x5f, 0x61, 0x6c, 0x74, 0x09, 0x73, 0x74, 0x61, 0x72, 0x5f, 0x68, 0x61, // down_alt.star_ha + 0x6c, 0x66, 0x0b, 0x68, 0x65, 0x61, 0x72, 0x74, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x07, 0x73, // lf.heart_empty.s + 0x69, 0x67, 0x6e, 0x6f, 0x75, 0x74, 0x0d, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x69, 0x6e, 0x5f, // ignout.linkedin_ + 0x73, 0x69, 0x67, 0x6e, 0x07, 0x70, 0x75, 0x73, 0x68, 0x70, 0x69, 0x6e, 0x0d, 0x65, 0x78, 0x74, // sign.pushpin.ext + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x69, // ernal_link.signi + 0x6e, 0x06, 0x74, 0x72, 0x6f, 0x70, 0x68, 0x79, 0x0b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x5f, // n.trophy.github_ + 0x73, 0x69, 0x67, 0x6e, 0x0a, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x61, 0x6c, 0x74, 0x05, // sign.upload_alt. + 0x6c, 0x65, 0x6d, 0x6f, 0x6e, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x0b, 0x63, 0x68, 0x65, 0x63, // lemon.phone.chec + 0x6b, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x0e, 0x62, 0x6f, 0x6f, 0x6b, 0x6d, 0x61, 0x72, 0x6b, // k_empty.bookmark + 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x0a, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x5f, 0x73, 0x69, 0x67, // _empty.phone_sig + 0x6e, 0x07, 0x74, 0x77, 0x69, 0x74, 0x74, 0x65, 0x72, 0x08, 0x66, 0x61, 0x63, 0x65, 0x62, 0x6f, // n.twitter.facebo + 0x6f, 0x6b, 0x06, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x06, 0x75, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, // ok.github.unlock + 0x0b, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x03, 0x72, 0x73, 0x73, // .credit_card.rss + 0x03, 0x68, 0x64, 0x64, 0x08, 0x62, 0x75, 0x6c, 0x6c, 0x68, 0x6f, 0x72, 0x6e, 0x04, 0x62, 0x65, // .hdd.bullhorn.be + 0x6c, 0x6c, 0x0b, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x0a, 0x68, // ll.certificate.h + 0x61, 0x6e, 0x64, 0x5f, 0x72, 0x69, 0x67, 0x68, 0x74, 0x09, 0x68, 0x61, 0x6e, 0x64, 0x5f, 0x6c, // and_right.hand_l + 0x65, 0x66, 0x74, 0x07, 0x68, 0x61, 0x6e, 0x64, 0x5f, 0x75, 0x70, 0x09, 0x68, 0x61, 0x6e, 0x64, // eft.hand_up.hand + 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x11, 0x63, 0x69, 0x72, 0x63, 0x6c, 0x65, 0x5f, 0x61, 0x72, 0x72, // _down.circle_arr + 0x6f, 0x77, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x12, 0x63, 0x69, 0x72, 0x63, 0x6c, 0x65, 0x5f, 0x61, // ow_left.circle_a + 0x72, 0x72, 0x6f, 0x77, 0x5f, 0x72, 0x69, 0x67, 0x68, 0x74, 0x0f, 0x63, 0x69, 0x72, 0x63, 0x6c, // rrow_right.circl + 0x65, 0x5f, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x5f, 0x75, 0x70, 0x11, 0x63, 0x69, 0x72, 0x63, 0x6c, // e_arrow_up.circl + 0x65, 0x5f, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x05, 0x67, 0x6c, 0x6f, // e_arrow_down.glo + 0x62, 0x65, 0x06, 0x77, 0x72, 0x65, 0x6e, 0x63, 0x68, 0x05, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x06, // be.wrench.tasks. + 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x09, 0x62, 0x72, 0x69, 0x65, 0x66, 0x63, 0x61, 0x73, 0x65, // filter.briefcase + 0x0a, 0x66, 0x75, 0x6c, 0x6c, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x05, 0x67, 0x72, 0x6f, 0x75, // .fullscreen.grou + 0x70, 0x04, 0x6c, 0x69, 0x6e, 0x6b, 0x05, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x06, 0x62, 0x65, 0x61, // p.link.cloud.bea + 0x6b, 0x65, 0x72, 0x03, 0x63, 0x75, 0x74, 0x04, 0x63, 0x6f, 0x70, 0x79, 0x0a, 0x70, 0x61, 0x70, // ker.cut.copy.pap + 0x65, 0x72, 0x5f, 0x63, 0x6c, 0x69, 0x70, 0x04, 0x73, 0x61, 0x76, 0x65, 0x0a, 0x73, 0x69, 0x67, // er_clip.save.sig + 0x6e, 0x5f, 0x62, 0x6c, 0x61, 0x6e, 0x6b, 0x07, 0x72, 0x65, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x02, // n_blank.reorder. + 0x75, 0x6c, 0x02, 0x6f, 0x6c, 0x0d, 0x73, 0x74, 0x72, 0x69, 0x6b, 0x65, 0x74, 0x68, 0x72, 0x6f, // ul.ol.strikethro + 0x75, 0x67, 0x68, 0x09, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x6c, 0x69, 0x6e, 0x65, 0x05, 0x74, 0x61, // ugh.underline.ta + 0x62, 0x6c, 0x65, 0x05, 0x6d, 0x61, 0x67, 0x69, 0x63, 0x05, 0x74, 0x72, 0x75, 0x63, 0x6b, 0x09, // ble.magic.truck. + 0x70, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x0e, 0x70, 0x69, 0x6e, 0x74, 0x65, 0x72, // pinterest.pinter + 0x65, 0x73, 0x74, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x10, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5f, // est_sign.google_ + 0x70, 0x6c, 0x75, 0x73, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x0b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, // plus_sign.google + 0x5f, 0x70, 0x6c, 0x75, 0x73, 0x05, 0x6d, 0x6f, 0x6e, 0x65, 0x79, 0x0a, 0x63, 0x61, 0x72, 0x65, // _plus.money.care + 0x74, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x08, 0x63, 0x61, 0x72, 0x65, 0x74, 0x5f, 0x75, 0x70, 0x0a, // t_down.caret_up. + 0x63, 0x61, 0x72, 0x65, 0x74, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x0b, 0x63, 0x61, 0x72, 0x65, 0x74, // caret_left.caret + 0x5f, 0x72, 0x69, 0x67, 0x68, 0x74, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x04, 0x73, // _right.columns.s + 0x6f, 0x72, 0x74, 0x09, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x07, 0x73, 0x6f, // ort.sort_down.so + 0x72, 0x74, 0x5f, 0x75, 0x70, 0x0c, 0x65, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x5f, 0x61, // rt_up.envelope_a + 0x6c, 0x74, 0x08, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x69, 0x6e, 0x04, 0x75, 0x6e, 0x64, 0x6f, // lt.linkedin.undo + 0x05, 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x09, 0x64, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, // .legal.dashboard + 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x6c, 0x74, 0x0c, 0x63, 0x6f, 0x6d, // .comment_alt.com + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x61, 0x6c, 0x74, 0x04, 0x62, 0x6f, 0x6c, 0x74, 0x07, 0x73, // ments_alt.bolt.s + 0x69, 0x74, 0x65, 0x6d, 0x61, 0x70, 0x08, 0x75, 0x6d, 0x62, 0x72, 0x65, 0x6c, 0x6c, 0x61, 0x05, // itemap.umbrella. + 0x70, 0x61, 0x73, 0x74, 0x65, 0x0a, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x62, 0x75, 0x6c, 0x62, // paste.light_bulb + 0x08, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x0e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, // .exchange.cloud_ + 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x0c, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x75, // download.cloud_u + 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6d, 0x64, 0x0b, 0x73, 0x74, // pload.user_md.st + 0x65, 0x74, 0x68, 0x6f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x08, 0x73, 0x75, 0x69, 0x74, 0x63, 0x61, // ethoscope.suitca + 0x73, 0x65, 0x08, 0x62, 0x65, 0x6c, 0x6c, 0x5f, 0x61, 0x6c, 0x74, 0x06, 0x63, 0x6f, 0x66, 0x66, // se.bell_alt.coff + 0x65, 0x65, 0x04, 0x66, 0x6f, 0x6f, 0x64, 0x0d, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x65, 0x78, // ee.food.file_tex + 0x74, 0x5f, 0x61, 0x6c, 0x74, 0x08, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x08, 0x68, // t_alt.building.h + 0x6f, 0x73, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x09, 0x61, 0x6d, 0x62, 0x75, 0x6c, 0x61, 0x6e, 0x63, // ospital.ambulanc + 0x65, 0x06, 0x6d, 0x65, 0x64, 0x6b, 0x69, 0x74, 0x0b, 0x66, 0x69, 0x67, 0x68, 0x74, 0x65, 0x72, // e.medkit.fighter + 0x5f, 0x6a, 0x65, 0x74, 0x04, 0x62, 0x65, 0x65, 0x72, 0x06, 0x68, 0x5f, 0x73, 0x69, 0x67, 0x6e, // _jet.beer.h_sign + 0x04, 0x66, 0x30, 0x66, 0x65, 0x11, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x6e, 0x67, // .f0fe.double_ang + 0x6c, 0x65, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x12, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x61, // le_left.double_a + 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x72, 0x69, 0x67, 0x68, 0x74, 0x0f, 0x64, 0x6f, 0x75, 0x62, 0x6c, // ngle_right.doubl + 0x65, 0x5f, 0x61, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x75, 0x70, 0x11, 0x64, 0x6f, 0x75, 0x62, 0x6c, // e_angle_up.doubl + 0x65, 0x5f, 0x61, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x0a, 0x61, 0x6e, 0x67, // e_angle_down.ang + 0x6c, 0x65, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x0b, 0x61, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x72, 0x69, // le_left.angle_ri + 0x67, 0x68, 0x74, 0x08, 0x61, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x75, 0x70, 0x0a, 0x61, 0x6e, 0x67, // ght.angle_up.ang + 0x6c, 0x65, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x07, 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x06, // le_down.desktop. + 0x6c, 0x61, 0x70, 0x74, 0x6f, 0x70, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x0c, 0x6d, 0x6f, // laptop.tablet.mo + 0x62, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x0c, 0x63, 0x69, 0x72, 0x63, 0x6c, // bile_phone.circl + 0x65, 0x5f, 0x62, 0x6c, 0x61, 0x6e, 0x6b, 0x0a, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x5f, 0x6c, 0x65, // e_blank.quote_le + 0x66, 0x74, 0x0b, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x5f, 0x72, 0x69, 0x67, 0x68, 0x74, 0x07, 0x73, // ft.quote_right.s + 0x70, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x06, 0x63, 0x69, 0x72, 0x63, 0x6c, 0x65, 0x05, 0x72, 0x65, // pinner.circle.re + 0x70, 0x6c, 0x79, 0x0a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x5f, 0x61, 0x6c, 0x74, 0x10, 0x66, // ply.github_alt.f + 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x5f, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x5f, 0x61, 0x6c, 0x74, 0x0f, // older_close_alt. + 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x61, 0x6c, 0x74, 0x0a, // folder_open_alt. + 0x65, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x5f, 0x61, 0x6c, 0x74, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x61, // expand_alt.colla + 0x70, 0x73, 0x65, 0x5f, 0x61, 0x6c, 0x74, 0x05, 0x73, 0x6d, 0x69, 0x6c, 0x65, 0x05, 0x66, 0x72, // pse_alt.smile.fr + 0x6f, 0x77, 0x6e, 0x03, 0x6d, 0x65, 0x68, 0x07, 0x67, 0x61, 0x6d, 0x65, 0x70, 0x61, 0x64, 0x08, // own.meh.gamepad. + 0x6b, 0x65, 0x79, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x08, 0x66, 0x6c, 0x61, 0x67, 0x5f, 0x61, 0x6c, // keyboard.flag_al + 0x74, 0x0e, 0x66, 0x6c, 0x61, 0x67, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x72, 0x65, 0x64, // t.flag_checkered + 0x08, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x09, 0x72, // .terminal.code.r + 0x65, 0x70, 0x6c, 0x79, 0x5f, 0x61, 0x6c, 0x6c, 0x0f, 0x73, 0x74, 0x61, 0x72, 0x5f, 0x68, 0x61, // eply_all.star_ha + 0x6c, 0x66, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x0e, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, // lf_empty.locatio + 0x6e, 0x5f, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x04, 0x63, 0x72, 0x6f, 0x70, 0x09, 0x63, 0x6f, 0x64, // n_arrow.crop.cod + 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x6b, 0x06, 0x75, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x04, 0x5f, 0x32, // e_fork.unlink._2 + 0x37, 0x39, 0x0b, 0x65, 0x78, 0x63, 0x6c, 0x61, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0b, 0x73, // 79.exclamation.s + 0x75, 0x70, 0x65, 0x72, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x09, 0x73, 0x75, 0x62, 0x73, 0x63, // uperscript.subsc + 0x72, 0x69, 0x70, 0x74, 0x04, 0x5f, 0x32, 0x38, 0x33, 0x0c, 0x70, 0x75, 0x7a, 0x7a, 0x6c, 0x65, // ript._283.puzzle + 0x5f, 0x70, 0x69, 0x65, 0x63, 0x65, 0x0a, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x70, 0x68, 0x6f, 0x6e, // _piece.microphon + 0x65, 0x0e, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x5f, 0x6f, 0x66, 0x66, // e.microphone_off + 0x06, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x0e, 0x63, 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, // .shield.calendar + 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x11, 0x66, 0x69, 0x72, 0x65, 0x5f, 0x65, 0x78, 0x74, 0x69, // _empty.fire_exti + 0x6e, 0x67, 0x75, 0x69, 0x73, 0x68, 0x65, 0x72, 0x06, 0x72, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x06, // nguisher.rocket. + 0x6d, 0x61, 0x78, 0x63, 0x64, 0x6e, 0x11, 0x63, 0x68, 0x65, 0x76, 0x72, 0x6f, 0x6e, 0x5f, 0x73, // maxcdn.chevron_s + 0x69, 0x67, 0x6e, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x12, 0x63, 0x68, 0x65, 0x76, 0x72, 0x6f, 0x6e, // ign_left.chevron + 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x5f, 0x72, 0x69, 0x67, 0x68, 0x74, 0x0f, 0x63, 0x68, 0x65, 0x76, // _sign_right.chev + 0x72, 0x6f, 0x6e, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x5f, 0x75, 0x70, 0x11, 0x63, 0x68, 0x65, 0x76, // ron_sign_up.chev + 0x72, 0x6f, 0x6e, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x05, 0x68, 0x74, // ron_sign_down.ht + 0x6d, 0x6c, 0x35, 0x04, 0x63, 0x73, 0x73, 0x33, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x0a, // ml5.css3.anchor. + 0x75, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x61, 0x6c, 0x74, 0x08, 0x62, 0x75, 0x6c, 0x6c, 0x73, // unlock_alt.bulls + 0x65, 0x79, 0x65, 0x13, 0x65, 0x6c, 0x6c, 0x69, 0x70, 0x73, 0x69, 0x73, 0x5f, 0x68, 0x6f, 0x72, // eye.ellipsis_hor + 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x11, 0x65, 0x6c, 0x6c, 0x69, 0x70, 0x73, 0x69, 0x73, // izontal.ellipsis + 0x5f, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x04, 0x5f, 0x33, 0x30, 0x33, 0x09, 0x70, // _vertical._303.p + 0x6c, 0x61, 0x79, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x0e, // lay_sign.ticket. + 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x5f, 0x61, 0x6c, 0x74, 0x0b, 0x63, // minus_sign_alt.c + 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x08, 0x6c, 0x65, 0x76, 0x65, 0x6c, // heck_minus.level + 0x5f, 0x75, 0x70, 0x0a, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x0a, 0x63, // _up.level_down.c + 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x09, 0x65, 0x64, 0x69, 0x74, 0x5f, 0x73, // heck_sign.edit_s + 0x69, 0x67, 0x6e, 0x04, 0x5f, 0x33, 0x31, 0x32, 0x0a, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x73, // ign._312.share_s + 0x69, 0x67, 0x6e, 0x07, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x08, 0x63, 0x6f, 0x6c, 0x6c, // ign.compass.coll + 0x61, 0x70, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x70, 0x73, 0x65, 0x5f, 0x74, 0x6f, // apse.collapse_to + 0x70, 0x04, 0x5f, 0x33, 0x31, 0x37, 0x03, 0x65, 0x75, 0x72, 0x03, 0x67, 0x62, 0x70, 0x03, 0x75, // p._317.eur.gbp.u + 0x73, 0x64, 0x03, 0x69, 0x6e, 0x72, 0x03, 0x6a, 0x70, 0x79, 0x03, 0x72, 0x75, 0x62, 0x03, 0x6b, // sd.inr.jpy.rub.k + 0x72, 0x77, 0x03, 0x62, 0x74, 0x63, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x66, 0x69, 0x6c, 0x65, // rw.btc.file.file + 0x5f, 0x74, 0x65, 0x78, 0x74, 0x10, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x62, 0x79, 0x5f, 0x61, 0x6c, // _text.sort_by_al + 0x70, 0x68, 0x61, 0x62, 0x65, 0x74, 0x04, 0x5f, 0x33, 0x32, 0x39, 0x12, 0x73, 0x6f, 0x72, 0x74, // phabet._329.sort + 0x5f, 0x62, 0x79, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x16, 0x73, // _by_attributes.s + 0x6f, 0x72, 0x74, 0x5f, 0x62, 0x79, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, // ort_by_attribute + 0x73, 0x5f, 0x61, 0x6c, 0x74, 0x0d, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x62, 0x79, 0x5f, 0x6f, 0x72, // s_alt.sort_by_or + 0x64, 0x65, 0x72, 0x11, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x62, 0x79, 0x5f, 0x6f, 0x72, 0x64, 0x65, // der.sort_by_orde + 0x72, 0x5f, 0x61, 0x6c, 0x74, 0x04, 0x5f, 0x33, 0x33, 0x34, 0x04, 0x5f, 0x33, 0x33, 0x35, 0x0c, // r_alt._334._335. + 0x79, 0x6f, 0x75, 0x74, 0x75, 0x62, 0x65, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x07, 0x79, 0x6f, 0x75, // youtube_sign.you + 0x74, 0x75, 0x62, 0x65, 0x04, 0x78, 0x69, 0x6e, 0x67, 0x09, 0x78, 0x69, 0x6e, 0x67, 0x5f, 0x73, // tube.xing.xing_s + 0x69, 0x67, 0x6e, 0x0c, 0x79, 0x6f, 0x75, 0x74, 0x75, 0x62, 0x65, 0x5f, 0x70, 0x6c, 0x61, 0x79, // ign.youtube_play + 0x07, 0x64, 0x72, 0x6f, 0x70, 0x62, 0x6f, 0x78, 0x0d, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x65, 0x78, // .dropbox.stackex + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x09, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x67, 0x72, 0x61, 0x6d, // change.instagram + 0x06, 0x66, 0x6c, 0x69, 0x63, 0x6b, 0x72, 0x03, 0x61, 0x64, 0x6e, 0x04, 0x66, 0x31, 0x37, 0x31, // .flickr.adn.f171 + 0x0e, 0x62, 0x69, 0x74, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x06, // .bitbucket_sign. + 0x74, 0x75, 0x6d, 0x62, 0x6c, 0x72, 0x0b, 0x74, 0x75, 0x6d, 0x62, 0x6c, 0x72, 0x5f, 0x73, 0x69, // tumblr.tumblr_si + 0x67, 0x6e, 0x0f, 0x6c, 0x6f, 0x6e, 0x67, 0x5f, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x5f, 0x64, 0x6f, // gn.long_arrow_do + 0x77, 0x6e, 0x0d, 0x6c, 0x6f, 0x6e, 0x67, 0x5f, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x5f, 0x75, 0x70, // wn.long_arrow_up + 0x0f, 0x6c, 0x6f, 0x6e, 0x67, 0x5f, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x5f, 0x6c, 0x65, 0x66, 0x74, // .long_arrow_left + 0x10, 0x6c, 0x6f, 0x6e, 0x67, 0x5f, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x5f, 0x72, 0x69, 0x67, 0x68, // .long_arrow_righ + 0x74, 0x07, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x07, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, // t.windows.androi + 0x64, 0x05, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x07, 0x64, 0x72, 0x69, 0x62, 0x62, 0x6c, 0x65, 0x05, // d.linux.dribble. + 0x73, 0x6b, 0x79, 0x70, 0x65, 0x0a, 0x66, 0x6f, 0x75, 0x72, 0x73, 0x71, 0x75, 0x61, 0x72, 0x65, // skype.foursquare + 0x06, 0x74, 0x72, 0x65, 0x6c, 0x6c, 0x6f, 0x06, 0x66, 0x65, 0x6d, 0x61, 0x6c, 0x65, 0x04, 0x6d, // .trello.female.m + 0x61, 0x6c, 0x65, 0x06, 0x67, 0x69, 0x74, 0x74, 0x69, 0x70, 0x03, 0x73, 0x75, 0x6e, 0x04, 0x5f, // ale.gittip.sun._ + 0x33, 0x36, 0x36, 0x07, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x03, 0x62, 0x75, 0x67, 0x02, // 366.archive.bug. + 0x76, 0x6b, 0x05, 0x77, 0x65, 0x69, 0x62, 0x6f, 0x06, 0x72, 0x65, 0x6e, 0x72, 0x65, 0x6e, 0x04, // vk.weibo.renren. + 0x5f, 0x33, 0x37, 0x32, 0x0e, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, // _372.stack_excha + 0x6e, 0x67, 0x65, 0x04, 0x5f, 0x33, 0x37, 0x34, 0x15, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x5f, 0x63, // nge._374.arrow_c + 0x69, 0x72, 0x63, 0x6c, 0x65, 0x5f, 0x61, 0x6c, 0x74, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x04, 0x5f, // ircle_alt_left._ + 0x33, 0x37, 0x36, 0x0e, 0x64, 0x6f, 0x74, 0x5f, 0x63, 0x69, 0x72, 0x63, 0x6c, 0x65, 0x5f, 0x61, // 376.dot_circle_a + 0x6c, 0x74, 0x04, 0x5f, 0x33, 0x37, 0x38, 0x0c, 0x76, 0x69, 0x6d, 0x65, 0x6f, 0x5f, 0x73, 0x71, // lt._378.vimeo_sq + 0x75, 0x61, 0x72, 0x65, 0x04, 0x5f, 0x33, 0x38, 0x30, 0x0d, 0x70, 0x6c, 0x75, 0x73, 0x5f, 0x73, // uare._380.plus_s + 0x71, 0x75, 0x61, 0x72, 0x65, 0x5f, 0x6f, 0x04, 0x5f, 0x33, 0x38, 0x32, 0x04, 0x5f, 0x33, 0x38, // quare_o._382._38 + 0x33, 0x04, 0x5f, 0x33, 0x38, 0x34, 0x04, 0x5f, 0x33, 0x38, 0x35, 0x04, 0x5f, 0x33, 0x38, 0x36, // 3._384._385._386 + 0x04, 0x5f, 0x33, 0x38, 0x37, 0x04, 0x5f, 0x33, 0x38, 0x38, 0x04, 0x5f, 0x33, 0x38, 0x39, 0x07, // ._387._388._389. + 0x75, 0x6e, 0x69, 0x46, 0x31, 0x41, 0x30, 0x04, 0x66, 0x31, 0x61, 0x31, 0x04, 0x5f, 0x33, 0x39, // uniF1A0.f1a1._39 + 0x32, 0x04, 0x5f, 0x33, 0x39, 0x33, 0x04, 0x66, 0x31, 0x61, 0x34, 0x04, 0x5f, 0x33, 0x39, 0x35, // 2._393.f1a4._395 + 0x04, 0x5f, 0x33, 0x39, 0x36, 0x04, 0x5f, 0x33, 0x39, 0x37, 0x04, 0x5f, 0x33, 0x39, 0x38, 0x04, // ._396._397._398. + 0x5f, 0x33, 0x39, 0x39, 0x04, 0x5f, 0x34, 0x30, 0x30, 0x04, 0x66, 0x31, 0x61, 0x62, 0x04, 0x5f, // _399._400.f1ab._ + 0x34, 0x30, 0x32, 0x04, 0x5f, 0x34, 0x30, 0x33, 0x04, 0x5f, 0x34, 0x30, 0x34, 0x07, 0x75, 0x6e, // 402._403._404.un + 0x69, 0x46, 0x31, 0x42, 0x31, 0x04, 0x5f, 0x34, 0x30, 0x36, 0x04, 0x5f, 0x34, 0x30, 0x37, 0x04, // iF1B1._406._407. + 0x5f, 0x34, 0x30, 0x38, 0x04, 0x5f, 0x34, 0x30, 0x39, 0x04, 0x5f, 0x34, 0x31, 0x30, 0x04, 0x5f, // _408._409._410._ + 0x34, 0x31, 0x31, 0x04, 0x5f, 0x34, 0x31, 0x32, 0x04, 0x5f, 0x34, 0x31, 0x33, 0x04, 0x5f, 0x34, // 411._412._413._4 + 0x31, 0x34, 0x04, 0x5f, 0x34, 0x31, 0x35, 0x04, 0x5f, 0x34, 0x31, 0x36, 0x04, 0x5f, 0x34, 0x31, // 14._415._416._41 + 0x37, 0x04, 0x5f, 0x34, 0x31, 0x38, 0x04, 0x5f, 0x34, 0x31, 0x39, 0x07, 0x75, 0x6e, 0x69, 0x46, // 7._418._419.uniF + 0x31, 0x43, 0x30, 0x07, 0x75, 0x6e, 0x69, 0x46, 0x31, 0x43, 0x31, 0x04, 0x5f, 0x34, 0x32, 0x32, // 1C0.uniF1C1._422 + 0x04, 0x5f, 0x34, 0x32, 0x33, 0x04, 0x5f, 0x34, 0x32, 0x34, 0x04, 0x5f, 0x34, 0x32, 0x35, 0x04, // ._423._424._425. + 0x5f, 0x34, 0x32, 0x36, 0x04, 0x5f, 0x34, 0x32, 0x37, 0x04, 0x5f, 0x34, 0x32, 0x38, 0x04, 0x5f, // _426._427._428._ + 0x34, 0x32, 0x39, 0x04, 0x5f, 0x34, 0x33, 0x30, 0x04, 0x5f, 0x34, 0x33, 0x31, 0x04, 0x5f, 0x34, // 429._430._431._4 + 0x33, 0x32, 0x04, 0x5f, 0x34, 0x33, 0x33, 0x04, 0x5f, 0x34, 0x33, 0x34, 0x07, 0x75, 0x6e, 0x69, // 32._433._434.uni + 0x46, 0x31, 0x44, 0x30, 0x07, 0x75, 0x6e, 0x69, 0x46, 0x31, 0x44, 0x31, 0x07, 0x75, 0x6e, 0x69, // F1D0.uniF1D1.uni + 0x46, 0x31, 0x44, 0x32, 0x04, 0x5f, 0x34, 0x33, 0x38, 0x04, 0x5f, 0x34, 0x33, 0x39, 0x07, 0x75, // F1D2._438._439.u + 0x6e, 0x69, 0x46, 0x31, 0x44, 0x35, 0x07, 0x75, 0x6e, 0x69, 0x46, 0x31, 0x44, 0x36, 0x07, 0x75, // niF1D5.uniF1D6.u + 0x6e, 0x69, 0x46, 0x31, 0x44, 0x37, 0x04, 0x5f, 0x34, 0x34, 0x33, 0x04, 0x5f, 0x34, 0x34, 0x34, // niF1D7._443._444 + 0x04, 0x5f, 0x34, 0x34, 0x35, 0x04, 0x5f, 0x34, 0x34, 0x36, 0x04, 0x5f, 0x34, 0x34, 0x37, 0x04, // ._445._446._447. + 0x5f, 0x34, 0x34, 0x38, 0x04, 0x5f, 0x34, 0x34, 0x39, 0x07, 0x75, 0x6e, 0x69, 0x46, 0x31, 0x45, // _448._449.uniF1E + 0x30, 0x04, 0x5f, 0x34, 0x35, 0x31, 0x04, 0x5f, 0x34, 0x35, 0x32, 0x04, 0x5f, 0x34, 0x35, 0x33, // 0._451._452._453 + 0x04, 0x5f, 0x34, 0x35, 0x34, 0x04, 0x5f, 0x34, 0x35, 0x35, 0x04, 0x5f, 0x34, 0x35, 0x36, 0x04, // ._454._455._456. + 0x5f, 0x34, 0x35, 0x37, 0x04, 0x5f, 0x34, 0x35, 0x38, 0x04, 0x5f, 0x34, 0x35, 0x39, 0x04, 0x5f, // _457._458._459._ + 0x34, 0x36, 0x30, 0x04, 0x5f, 0x34, 0x36, 0x31, 0x04, 0x5f, 0x34, 0x36, 0x32, 0x04, 0x5f, 0x34, // 460._461._462._4 + 0x36, 0x33, 0x04, 0x5f, 0x34, 0x36, 0x34, 0x07, 0x75, 0x6e, 0x69, 0x46, 0x31, 0x46, 0x30, 0x04, // 63._464.uniF1F0. + 0x5f, 0x34, 0x36, 0x36, 0x04, 0x5f, 0x34, 0x36, 0x37, 0x04, 0x66, 0x31, 0x66, 0x33, 0x04, 0x5f, // _466._467.f1f3._ + 0x34, 0x36, 0x39, 0x04, 0x5f, 0x34, 0x37, 0x30, 0x04, 0x5f, 0x34, 0x37, 0x31, 0x04, 0x5f, 0x34, // 469._470._471._4 + 0x37, 0x32, 0x04, 0x5f, 0x34, 0x37, 0x33, 0x04, 0x5f, 0x34, 0x37, 0x34, 0x04, 0x5f, 0x34, 0x37, // 72._473._474._47 + 0x35, 0x04, 0x5f, 0x34, 0x37, 0x36, 0x04, 0x66, 0x31, 0x66, 0x63, 0x04, 0x5f, 0x34, 0x37, 0x38, // 5._476.f1fc._478 + 0x04, 0x5f, 0x34, 0x37, 0x39, 0x04, 0x5f, 0x34, 0x38, 0x30, 0x04, 0x5f, 0x34, 0x38, 0x31, 0x04, // ._479._480._481. + 0x5f, 0x34, 0x38, 0x32, 0x04, 0x5f, 0x34, 0x38, 0x33, 0x04, 0x5f, 0x34, 0x38, 0x34, 0x04, 0x5f, // _482._483._484._ + 0x34, 0x38, 0x35, 0x04, 0x5f, 0x34, 0x38, 0x36, 0x04, 0x5f, 0x34, 0x38, 0x37, 0x04, 0x5f, 0x34, // 485._486._487._4 + 0x38, 0x38, 0x04, 0x5f, 0x34, 0x38, 0x39, 0x04, 0x5f, 0x34, 0x39, 0x30, 0x04, 0x5f, 0x34, 0x39, // 88._489._490._49 + 0x31, 0x04, 0x5f, 0x34, 0x39, 0x32, 0x04, 0x5f, 0x34, 0x39, 0x33, 0x04, 0x5f, 0x34, 0x39, 0x34, // 1._492._493._494 + 0x04, 0x66, 0x32, 0x31, 0x30, 0x04, 0x5f, 0x34, 0x39, 0x36, 0x04, 0x66, 0x32, 0x31, 0x32, 0x04, // .f210._496.f212. + 0x5f, 0x34, 0x39, 0x38, 0x04, 0x5f, 0x34, 0x39, 0x39, 0x04, 0x5f, 0x35, 0x30, 0x30, 0x04, 0x5f, // _498._499._500._ + 0x35, 0x30, 0x31, 0x04, 0x5f, 0x35, 0x30, 0x32, 0x04, 0x5f, 0x35, 0x30, 0x33, 0x04, 0x5f, 0x35, // 501._502._503._5 + 0x30, 0x34, 0x04, 0x5f, 0x35, 0x30, 0x35, 0x04, 0x5f, 0x35, 0x30, 0x36, 0x04, 0x5f, 0x35, 0x30, // 04._505._506._50 + 0x37, 0x04, 0x5f, 0x35, 0x30, 0x38, 0x04, 0x5f, 0x35, 0x30, 0x39, 0x05, 0x76, 0x65, 0x6e, 0x75, // 7._508._509.venu + 0x73, 0x04, 0x5f, 0x35, 0x31, 0x31, 0x04, 0x5f, 0x35, 0x31, 0x32, 0x04, 0x5f, 0x35, 0x31, 0x33, // s._511._512._513 + 0x04, 0x5f, 0x35, 0x31, 0x34, 0x04, 0x5f, 0x35, 0x31, 0x35, 0x04, 0x5f, 0x35, 0x31, 0x36, 0x04, // ._514._515._516. + 0x5f, 0x35, 0x31, 0x37, 0x04, 0x5f, 0x35, 0x31, 0x38, 0x04, 0x5f, 0x35, 0x31, 0x39, 0x04, 0x5f, // _517._518._519._ + 0x35, 0x32, 0x30, 0x04, 0x5f, 0x35, 0x32, 0x31, 0x04, 0x5f, 0x35, 0x32, 0x32, 0x04, 0x5f, 0x35, // 520._521._522._5 + 0x32, 0x33, 0x04, 0x5f, 0x35, 0x32, 0x34, 0x04, 0x5f, 0x35, 0x32, 0x35, 0x04, 0x5f, 0x35, 0x32, // 23._524._525._52 + 0x36, 0x04, 0x5f, 0x35, 0x32, 0x37, 0x04, 0x5f, 0x35, 0x32, 0x38, 0x04, 0x5f, 0x35, 0x32, 0x39, // 6._527._528._529 + 0x04, 0x5f, 0x35, 0x33, 0x30, 0x04, 0x5f, 0x35, 0x33, 0x31, 0x04, 0x5f, 0x35, 0x33, 0x32, 0x04, // ._530._531._532. + 0x5f, 0x35, 0x33, 0x33, 0x04, 0x5f, 0x35, 0x33, 0x34, 0x04, 0x5f, 0x35, 0x33, 0x35, 0x04, 0x5f, // _533._534._535._ + 0x35, 0x33, 0x36, 0x04, 0x5f, 0x35, 0x33, 0x37, 0x04, 0x5f, 0x35, 0x33, 0x38, 0x04, 0x5f, 0x35, // 536._537._538._5 + 0x33, 0x39, 0x04, 0x5f, 0x35, 0x34, 0x30, 0x04, 0x5f, 0x35, 0x34, 0x31, 0x04, 0x5f, 0x35, 0x34, // 39._540._541._54 + 0x32, 0x04, 0x5f, 0x35, 0x34, 0x33, 0x04, 0x5f, 0x35, 0x34, 0x34, 0x04, 0x5f, 0x35, 0x34, 0x35, // 2._543._544._545 + 0x04, 0x5f, 0x35, 0x34, 0x36, 0x04, 0x5f, 0x35, 0x34, 0x37, 0x04, 0x5f, 0x35, 0x34, 0x38, 0x04, // ._546._547._548. + 0x5f, 0x35, 0x34, 0x39, 0x04, 0x5f, 0x35, 0x35, 0x30, 0x04, 0x5f, 0x35, 0x35, 0x31, 0x04, 0x5f, // _549._550._551._ + 0x35, 0x35, 0x32, 0x04, 0x5f, 0x35, 0x35, 0x33, 0x04, 0x5f, 0x35, 0x35, 0x34, 0x04, 0x5f, 0x35, // 552._553._554._5 + 0x35, 0x35, 0x04, 0x5f, 0x35, 0x35, 0x36, 0x04, 0x5f, 0x35, 0x35, 0x37, 0x04, 0x5f, 0x35, 0x35, // 55._556._557._55 + 0x38, 0x04, 0x5f, 0x35, 0x35, 0x39, 0x04, 0x5f, 0x35, 0x36, 0x30, 0x04, 0x5f, 0x35, 0x36, 0x31, // 8._559._560._561 + 0x04, 0x5f, 0x35, 0x36, 0x32, 0x04, 0x5f, 0x35, 0x36, 0x33, 0x04, 0x5f, 0x35, 0x36, 0x34, 0x04, // ._562._563._564. + 0x5f, 0x35, 0x36, 0x35, 0x04, 0x5f, 0x35, 0x36, 0x36, 0x04, 0x5f, 0x35, 0x36, 0x37, 0x04, 0x5f, // _565._566._567._ + 0x35, 0x36, 0x38, 0x04, 0x5f, 0x35, 0x36, 0x39, 0x04, 0x66, 0x32, 0x36, 0x30, 0x04, 0x66, 0x32, // 568._569.f260.f2 + 0x36, 0x31, 0x04, 0x5f, 0x35, 0x37, 0x32, 0x04, 0x66, 0x32, 0x36, 0x33, 0x04, 0x5f, 0x35, 0x37, // 61._572.f263._57 + 0x34, 0x04, 0x5f, 0x35, 0x37, 0x35, 0x04, 0x5f, 0x35, 0x37, 0x36, 0x04, 0x5f, 0x35, 0x37, 0x37, // 4._575._576._577 + 0x04, 0x5f, 0x35, 0x37, 0x38, 0x04, 0x5f, 0x35, 0x37, 0x39, 0x04, 0x5f, 0x35, 0x38, 0x30, 0x04, // ._578._579._580. + 0x5f, 0x35, 0x38, 0x31, 0x04, 0x5f, 0x35, 0x38, 0x32, 0x04, 0x5f, 0x35, 0x38, 0x33, 0x04, 0x5f, // _581._582._583._ + 0x35, 0x38, 0x34, 0x04, 0x5f, 0x35, 0x38, 0x35, 0x04, 0x5f, 0x35, 0x38, 0x36, 0x04, 0x5f, 0x35, // 584._585._586._5 + 0x38, 0x37, 0x04, 0x5f, 0x35, 0x38, 0x38, 0x04, 0x5f, 0x35, 0x38, 0x39, 0x04, 0x5f, 0x35, 0x39, // 87._588._589._59 + 0x30, 0x04, 0x5f, 0x35, 0x39, 0x31, 0x04, 0x5f, 0x35, 0x39, 0x32, 0x04, 0x5f, 0x35, 0x39, 0x33, // 0._591._592._593 + 0x04, 0x5f, 0x35, 0x39, 0x34, 0x04, 0x5f, 0x35, 0x39, 0x35, 0x04, 0x5f, 0x35, 0x39, 0x36, 0x04, // ._594._595._596. + 0x5f, 0x35, 0x39, 0x37, 0x04, 0x5f, 0x35, 0x39, 0x38, 0x04, 0x66, 0x32, 0x37, 0x65, 0x07, 0x75, // _597._598.f27e.u + 0x6e, 0x69, 0x46, 0x32, 0x38, 0x30, 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x38, 0x31, 0x04, 0x5f, // niF280.uniF281._ + 0x36, 0x30, 0x32, 0x04, 0x5f, 0x36, 0x30, 0x33, 0x04, 0x5f, 0x36, 0x30, 0x34, 0x07, 0x75, 0x6e, // 602._603._604.un + 0x69, 0x46, 0x32, 0x38, 0x35, 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x38, 0x36, 0x04, 0x5f, 0x36, // iF285.uniF286._6 + 0x30, 0x37, 0x04, 0x5f, 0x36, 0x30, 0x38, 0x04, 0x5f, 0x36, 0x30, 0x39, 0x04, 0x5f, 0x36, 0x31, // 07._608._609._61 + 0x30, 0x04, 0x5f, 0x36, 0x31, 0x31, 0x04, 0x5f, 0x36, 0x31, 0x32, 0x04, 0x5f, 0x36, 0x31, 0x33, // 0._611._612._613 + 0x04, 0x5f, 0x36, 0x31, 0x34, 0x04, 0x5f, 0x36, 0x31, 0x35, 0x04, 0x5f, 0x36, 0x31, 0x36, 0x04, // ._614._615._616. + 0x5f, 0x36, 0x31, 0x37, 0x04, 0x5f, 0x36, 0x31, 0x38, 0x04, 0x5f, 0x36, 0x31, 0x39, 0x04, 0x5f, // _617._618._619._ + 0x36, 0x32, 0x30, 0x04, 0x5f, 0x36, 0x32, 0x31, 0x04, 0x5f, 0x36, 0x32, 0x32, 0x04, 0x5f, 0x36, // 620._621._622._6 + 0x32, 0x33, 0x04, 0x5f, 0x36, 0x32, 0x34, 0x04, 0x5f, 0x36, 0x32, 0x35, 0x04, 0x5f, 0x36, 0x32, // 23._624._625._62 + 0x36, 0x04, 0x5f, 0x36, 0x32, 0x37, 0x04, 0x5f, 0x36, 0x32, 0x38, 0x04, 0x5f, 0x36, 0x32, 0x39, // 6._627._628._629 + 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x41, 0x30, 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x41, 0x31, // .uniF2A0.uniF2A1 + 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x41, 0x32, 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x41, 0x33, // .uniF2A2.uniF2A3 + 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x41, 0x34, 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x41, 0x35, // .uniF2A4.uniF2A5 + 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x41, 0x36, 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x41, 0x37, // .uniF2A6.uniF2A7 + 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x41, 0x38, 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x41, 0x39, // .uniF2A8.uniF2A9 + 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x41, 0x41, 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x41, 0x42, // .uniF2AA.uniF2AB + 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x41, 0x43, 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x41, 0x44, // .uniF2AC.uniF2AD + 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x41, 0x45, 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x42, 0x30, // .uniF2AE.uniF2B0 + 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x42, 0x31, 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x42, 0x32, // .uniF2B1.uniF2B2 + 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x42, 0x33, 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x42, 0x34, // .uniF2B3.uniF2B4 + 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x42, 0x35, 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x42, 0x36, // .uniF2B5.uniF2B6 + 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x42, 0x37, 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x42, 0x38, // .uniF2B7.uniF2B8 + 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x42, 0x39, 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x42, 0x41, // .uniF2B9.uniF2BA + 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x42, 0x42, 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x42, 0x43, // .uniF2BB.uniF2BC + 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x42, 0x44, 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x42, 0x45, // .uniF2BD.uniF2BE + 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x43, 0x30, 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x43, 0x31, // .uniF2C0.uniF2C1 + 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x43, 0x32, 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x43, 0x33, // .uniF2C2.uniF2C3 + 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x43, 0x34, 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x43, 0x35, // .uniF2C4.uniF2C5 + 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x43, 0x36, 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x43, 0x37, // .uniF2C6.uniF2C7 + 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x43, 0x38, 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x43, 0x39, // .uniF2C8.uniF2C9 + 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x43, 0x41, 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x43, 0x42, // .uniF2CA.uniF2CB + 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x43, 0x43, 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x43, 0x44, // .uniF2CC.uniF2CD + 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x43, 0x45, 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x44, 0x30, // .uniF2CE.uniF2D0 + 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x44, 0x31, 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x44, 0x32, // .uniF2D1.uniF2D2 + 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x44, 0x33, 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x44, 0x34, // .uniF2D3.uniF2D4 + 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x44, 0x35, 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x44, 0x36, // .uniF2D5.uniF2D6 + 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x44, 0x37, 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x44, 0x38, // .uniF2D7.uniF2D8 + 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x44, 0x39, 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x44, 0x41, // .uniF2D9.uniF2DA + 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x44, 0x42, 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x44, 0x43, // .uniF2DB.uniF2DC + 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x44, 0x44, 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x44, 0x45, // .uniF2DD.uniF2DE + 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x45, 0x30, 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x45, 0x31, // .uniF2E0.uniF2E1 + 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x45, 0x32, 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x45, 0x33, // .uniF2E2.uniF2E3 + 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x45, 0x34, 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x45, 0x35, // .uniF2E4.uniF2E5 + 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x45, 0x36, 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x45, 0x37, // .uniF2E6.uniF2E7 + 0x04, 0x5f, 0x36, 0x39, 0x38, 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x45, 0x39, 0x07, 0x75, 0x6e, // ._698.uniF2E9.un + 0x69, 0x46, 0x32, 0x45, 0x41, 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x45, 0x42, 0x07, 0x75, 0x6e, // iF2EA.uniF2EB.un + 0x69, 0x46, 0x32, 0x45, 0x43, 0x07, 0x75, 0x6e, 0x69, 0x46, 0x32, 0x45, 0x44, 0x07, 0x75, 0x6e, // iF2EC.uniF2ED.un + 0x69, 0x46, 0x32, 0x45, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0x00, 0x02, // iF2EE........... + 0x00, 0x01, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, // ................ + 0x00, 0x01, 0x00, 0x01, 0x02, 0xc2, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // ................ + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xcc, 0x3d, 0xa2, 0xcf, 0x00, 0x00, 0x00, 0x00, // .........=...... + 0xcb, 0x4f, 0x3c, 0x30, 0x00, 0x00, 0x00, 0x00, 0xd4, 0x31, 0x68, 0xb9, // .O<0.....1h. }; diff --git a/3rdparty/bgfx/examples/common/imgui/imgui.cpp b/3rdparty/bgfx/examples/common/imgui/imgui.cpp index c9a10b4..235a914 100644 --- a/3rdparty/bgfx/examples/common/imgui/imgui.cpp +++ b/3rdparty/bgfx/examples/common/imgui/imgui.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -32,8 +32,11 @@ #include "imgui.h" #include "ocornut_imgui.h" +#include "../bgfx_utils.h" #include "../nanovg/nanovg.h" +#include + // embedded shaders #include "vs_imgui_color.bin.h" #include "fs_imgui_color.bin.h" @@ -47,6 +50,23 @@ #include "fs_imgui_image.bin.h" #include "fs_imgui_image_swizz.bin.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_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" @@ -502,113 +522,41 @@ struct Imgui u_imageSwizzle = bgfx::createUniform("u_swizzle", bgfx::UniformType::Vec4); s_texColor = bgfx::createUniform("s_texColor", bgfx::UniformType::Int1); - const bgfx::Memory* vs_imgui_color; - const bgfx::Memory* fs_imgui_color; - const bgfx::Memory* vs_imgui_texture; - const bgfx::Memory* fs_imgui_texture; - const bgfx::Memory* vs_imgui_cubemap; - const bgfx::Memory* fs_imgui_cubemap; - const bgfx::Memory* vs_imgui_latlong; - const bgfx::Memory* fs_imgui_latlong; - const bgfx::Memory* vs_imgui_image; - const bgfx::Memory* fs_imgui_image; - const bgfx::Memory* fs_imgui_image_swizz; - - switch (bgfx::getRendererType() ) - { - case bgfx::RendererType::Direct3D9: - vs_imgui_color = bgfx::makeRef(vs_imgui_color_dx9, sizeof(vs_imgui_color_dx9) ); - fs_imgui_color = bgfx::makeRef(fs_imgui_color_dx9, sizeof(fs_imgui_color_dx9) ); - vs_imgui_texture = bgfx::makeRef(vs_imgui_texture_dx9, sizeof(vs_imgui_texture_dx9) ); - fs_imgui_texture = bgfx::makeRef(fs_imgui_texture_dx9, sizeof(fs_imgui_texture_dx9) ); - vs_imgui_cubemap = bgfx::makeRef(vs_imgui_cubemap_dx9, sizeof(vs_imgui_cubemap_dx9) ); - fs_imgui_cubemap = bgfx::makeRef(fs_imgui_cubemap_dx9, sizeof(fs_imgui_cubemap_dx9) ); - vs_imgui_latlong = bgfx::makeRef(vs_imgui_latlong_dx9, sizeof(vs_imgui_latlong_dx9) ); - fs_imgui_latlong = bgfx::makeRef(fs_imgui_latlong_dx9, sizeof(fs_imgui_latlong_dx9) ); - vs_imgui_image = bgfx::makeRef(vs_imgui_image_dx9, sizeof(vs_imgui_image_dx9) ); - fs_imgui_image = bgfx::makeRef(fs_imgui_image_dx9, sizeof(fs_imgui_image_dx9) ); - fs_imgui_image_swizz = bgfx::makeRef(fs_imgui_image_swizz_dx9, sizeof(fs_imgui_image_swizz_dx9) ); - m_halfTexel = 0.5f; - break; - - case bgfx::RendererType::Direct3D11: - case bgfx::RendererType::Direct3D12: - vs_imgui_color = bgfx::makeRef(vs_imgui_color_dx11, sizeof(vs_imgui_color_dx11) ); - fs_imgui_color = bgfx::makeRef(fs_imgui_color_dx11, sizeof(fs_imgui_color_dx11) ); - vs_imgui_texture = bgfx::makeRef(vs_imgui_texture_dx11, sizeof(vs_imgui_texture_dx11) ); - fs_imgui_texture = bgfx::makeRef(fs_imgui_texture_dx11, sizeof(fs_imgui_texture_dx11) ); - vs_imgui_cubemap = bgfx::makeRef(vs_imgui_cubemap_dx11, sizeof(vs_imgui_cubemap_dx11) ); - fs_imgui_cubemap = bgfx::makeRef(fs_imgui_cubemap_dx11, sizeof(fs_imgui_cubemap_dx11) ); - vs_imgui_latlong = bgfx::makeRef(vs_imgui_latlong_dx11, sizeof(vs_imgui_latlong_dx11) ); - fs_imgui_latlong = bgfx::makeRef(fs_imgui_latlong_dx11, sizeof(fs_imgui_latlong_dx11) ); - vs_imgui_image = bgfx::makeRef(vs_imgui_image_dx11, sizeof(vs_imgui_image_dx11) ); - fs_imgui_image = bgfx::makeRef(fs_imgui_image_dx11, sizeof(fs_imgui_image_dx11) ); - fs_imgui_image_swizz = bgfx::makeRef(fs_imgui_image_swizz_dx11, sizeof(fs_imgui_image_swizz_dx11) ); - break; - - case bgfx::RendererType::Metal: - vs_imgui_color = bgfx::makeRef(vs_imgui_color_mtl, sizeof(vs_imgui_color_mtl) ); - fs_imgui_color = bgfx::makeRef(fs_imgui_color_mtl, sizeof(fs_imgui_color_mtl) ); - vs_imgui_texture = bgfx::makeRef(vs_imgui_texture_mtl, sizeof(vs_imgui_texture_mtl) ); - fs_imgui_texture = bgfx::makeRef(fs_imgui_texture_mtl, sizeof(fs_imgui_texture_mtl) ); - vs_imgui_cubemap = bgfx::makeRef(vs_imgui_cubemap_mtl, sizeof(vs_imgui_cubemap_mtl) ); - fs_imgui_cubemap = bgfx::makeRef(fs_imgui_cubemap_mtl, sizeof(fs_imgui_cubemap_mtl) ); - vs_imgui_latlong = bgfx::makeRef(vs_imgui_latlong_mtl, sizeof(vs_imgui_latlong_mtl) ); - fs_imgui_latlong = bgfx::makeRef(fs_imgui_latlong_mtl, sizeof(fs_imgui_latlong_mtl) ); - vs_imgui_image = bgfx::makeRef(vs_imgui_image_mtl, sizeof(vs_imgui_image_mtl) ); - fs_imgui_image = bgfx::makeRef(fs_imgui_image_mtl, sizeof(fs_imgui_image_mtl) ); - fs_imgui_image_swizz = bgfx::makeRef(fs_imgui_image_swizz_mtl, sizeof(fs_imgui_image_swizz_mtl) ); - break; - - default: - vs_imgui_color = bgfx::makeRef(vs_imgui_color_glsl, sizeof(vs_imgui_color_glsl) ); - fs_imgui_color = bgfx::makeRef(fs_imgui_color_glsl, sizeof(fs_imgui_color_glsl) ); - vs_imgui_texture = bgfx::makeRef(vs_imgui_texture_glsl, sizeof(vs_imgui_texture_glsl) ); - fs_imgui_texture = bgfx::makeRef(fs_imgui_texture_glsl, sizeof(fs_imgui_texture_glsl) ); - vs_imgui_cubemap = bgfx::makeRef(vs_imgui_cubemap_glsl, sizeof(vs_imgui_cubemap_glsl) ); - fs_imgui_cubemap = bgfx::makeRef(fs_imgui_cubemap_glsl, sizeof(fs_imgui_cubemap_glsl) ); - vs_imgui_latlong = bgfx::makeRef(vs_imgui_latlong_glsl, sizeof(vs_imgui_latlong_glsl) ); - fs_imgui_latlong = bgfx::makeRef(fs_imgui_latlong_glsl, sizeof(fs_imgui_latlong_glsl) ); - vs_imgui_image = bgfx::makeRef(vs_imgui_image_glsl, sizeof(vs_imgui_image_glsl) ); - fs_imgui_image = bgfx::makeRef(fs_imgui_image_glsl, sizeof(fs_imgui_image_glsl) ); - fs_imgui_image_swizz = bgfx::makeRef(fs_imgui_image_swizz_glsl, sizeof(fs_imgui_image_swizz_glsl) ); - break; - } - bgfx::ShaderHandle vsh; bgfx::ShaderHandle fsh; - vsh = bgfx::createShader(vs_imgui_color); - fsh = bgfx::createShader(fs_imgui_color); + 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::createShader(vs_imgui_texture); - fsh = bgfx::createShader(fs_imgui_texture); + 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::createShader(vs_imgui_cubemap); - fsh = bgfx::createShader(fs_imgui_cubemap); + 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::createShader(vs_imgui_latlong); - fsh = bgfx::createShader(fs_imgui_latlong); + 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::createShader(vs_imgui_image); - fsh = bgfx::createShader(fs_imgui_image); + 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::createShader(fs_imgui_image_swizz); + fsh = bgfx::createEmbeddedShader(s_embeddedShaders, type, "fs_imgui_image_swizz"); m_imageSwizzProgram = bgfx::createProgram(vsh, fsh); bgfx::destroyShader(fsh); bgfx::destroyShader(vsh); @@ -864,7 +812,7 @@ struct Imgui m_surfaceWidth = _surfaceWidth / 2; float proj[16]; - bx::mtxProj(proj, hmd->eye[0].fov, 0.1f, 100.0f); + bx::mtxProj(proj, hmd->eye[0].fov, 0.1f, 100.0f, bgfx::getCaps()->homogeneousDepth); static float time = 0.0f; time += 0.05f; @@ -1853,7 +1801,7 @@ struct Imgui const uint32_t numVertices = 14; const uint32_t numIndices = 36; - if (bgfx::checkAvailTransientBuffers(numVertices, PosNormalVertex::ms_decl, numIndices) ) + if (checkAvailTransientBuffers(numVertices, PosNormalVertex::ms_decl, numIndices) ) { bgfx::TransientVertexBuffer tvb; bgfx::allocTransientVertexBuffer(&tvb, numVertices, PosNormalVertex::ms_decl); @@ -2388,7 +2336,7 @@ struct Imgui } uint32_t numVertices = _numCoords*6 + (_numCoords-2)*3; - if (bgfx::checkAvailTransientVertexBuffer(numVertices, PosColorVertex::ms_decl) ) + if (numVertices == bgfx::getAvailTransientVertexBuffer(numVertices, PosColorVertex::ms_decl) ) { bgfx::TransientVertexBuffer tvb; bgfx::allocTransientVertexBuffer(&tvb, numVertices, PosColorVertex::ms_decl); @@ -2675,7 +2623,7 @@ struct Imgui getTextLength(m_fonts[m_currentFontIdx].m_cdata, _text, numVertices); } - if (bgfx::checkAvailTransientVertexBuffer(numVertices, PosColorUvVertex::ms_decl) ) + if (numVertices == bgfx::getAvailTransientVertexBuffer(numVertices, PosColorUvVertex::ms_decl) ) { bgfx::TransientVertexBuffer tvb; bgfx::allocTransientVertexBuffer(&tvb, numVertices, PosColorUvVertex::ms_decl); @@ -2765,7 +2713,7 @@ struct Imgui bool screenQuad(int32_t _x, int32_t _y, int32_t _width, uint32_t _height, bool _originBottomLeft = false) { - if (bgfx::checkAvailTransientVertexBuffer(6, PosUvVertex::ms_decl) ) + if (6 == bgfx::getAvailTransientVertexBuffer(6, PosUvVertex::ms_decl) ) { bgfx::TransientVertexBuffer vb; bgfx::allocTransientVertexBuffer(&vb, 6, PosUvVertex::ms_decl); diff --git a/3rdparty/bgfx/examples/common/imgui/imgui.h b/3rdparty/bgfx/examples/common/imgui/imgui.h index d6602d1..8176b40 100644 --- a/3rdparty/bgfx/examples/common/imgui/imgui.h +++ b/3rdparty/bgfx/examples/common/imgui/imgui.h @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ diff --git a/3rdparty/bgfx/examples/common/imgui/makefile b/3rdparty/bgfx/examples/common/imgui/makefile index b7d3b83..b9648f1 100644 --- a/3rdparty/bgfx/examples/common/imgui/makefile +++ b/3rdparty/bgfx/examples/common/imgui/makefile @@ -1,6 +1,6 @@ # -# Copyright 2011-2016 Branimir Karadzic. All rights reserved. -# License: http://www.opensource.org/licenses/BSD-2-Clause +# Copyright 2011-2017 Branimir Karadzic. All rights reserved. +# License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause # include ../../../scripts/shader-embeded.mk diff --git a/3rdparty/bgfx/examples/common/imgui/ocornut_imgui.cpp b/3rdparty/bgfx/examples/common/imgui/ocornut_imgui.cpp index 0fee4cd..f518b65 100644 --- a/3rdparty/bgfx/examples/common/imgui/ocornut_imgui.cpp +++ b/3rdparty/bgfx/examples/common/imgui/ocornut_imgui.cpp @@ -4,12 +4,14 @@ */ #include +#include #include #include #include #include #include "imgui.h" #include "ocornut_imgui.h" +#include "../bgfx_utils.h" #ifndef USE_ENTRY # if defined(SCI_NAMESPACE) @@ -36,6 +38,14 @@ #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; @@ -67,43 +77,6 @@ struct OcornutImguiContext bgfx::setViewTransform(m_viewId, NULL, ortho); } -#if USE_ENTRY - for (uint32_t ii = 1; ii < BX_COUNTOF(m_window); ++ii) - { - Window& window = m_window[ii]; - if (bgfx::isValid(window.m_fbh) ) - { - const uint8_t viewId = window.m_viewId; - bgfx::setViewClear(viewId - , BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH - , 0x303030ff - , 1.0f - , 0 - ); - bgfx::setViewFrameBuffer(viewId, window.m_fbh); - bgfx::setViewRect(viewId - , 0 - , 0 - , window.m_state.m_width - , window.m_state.m_height - ); - float ortho[16]; - bx::mtxOrtho(ortho - , 0.0f - , float(window.m_state.m_width) - , float(window.m_state.m_height) - , 0.0f - , -1.0f - , 1.0f - ); - bgfx::setViewTransform(viewId - , NULL - , ortho - ); - } - } -#endif // USE_ENTRY - // Render command lists for (int32_t ii = 0, num = _drawData->CmdListsCount; ii < num; ++ii) { @@ -114,8 +87,7 @@ struct OcornutImguiContext uint32_t numVertices = (uint32_t)drawList->VtxBuffer.size(); uint32_t numIndices = (uint32_t)drawList->IdxBuffer.size(); - if (!bgfx::checkAvailTransientVertexBuffer(numVertices, m_decl) - || !bgfx::checkAvailTransientIndexBuffer(numIndices) ) + if (!checkAvailTransientBuffers(numVertices, m_decl, numIndices) ) { // not enough space in transient buffer just quit drawing the rest... break; @@ -125,10 +97,10 @@ struct OcornutImguiContext bgfx::allocTransientIndexBuffer(&tib, numIndices); ImDrawVert* verts = (ImDrawVert*)tvb.data; - memcpy(verts, drawList->VtxBuffer.begin(), numVertices * sizeof(ImDrawVert) ); + bx::memCopy(verts, drawList->VtxBuffer.begin(), numVertices * sizeof(ImDrawVert) ); ImDrawIdx* indices = (ImDrawIdx*)tib.data; - memcpy(indices, drawList->IdxBuffer.begin(), numIndices * sizeof(ImDrawIdx) ); + 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) @@ -227,36 +199,12 @@ struct OcornutImguiContext io.KeyMap[ImGuiKey_Z] = (int)entry::Key::KeyZ; #endif // defined(SCI_NAMESPACE) - const bgfx::Memory* vsmem; - const bgfx::Memory* fsmem; - - switch (bgfx::getRendererType() ) - { - case bgfx::RendererType::Direct3D9: - vsmem = bgfx::makeRef(vs_ocornut_imgui_dx9, sizeof(vs_ocornut_imgui_dx9) ); - fsmem = bgfx::makeRef(fs_ocornut_imgui_dx9, sizeof(fs_ocornut_imgui_dx9) ); - break; - - case bgfx::RendererType::Direct3D11: - case bgfx::RendererType::Direct3D12: - vsmem = bgfx::makeRef(vs_ocornut_imgui_dx11, sizeof(vs_ocornut_imgui_dx11) ); - fsmem = bgfx::makeRef(fs_ocornut_imgui_dx11, sizeof(fs_ocornut_imgui_dx11) ); - break; - - case bgfx::RendererType::Metal: - vsmem = bgfx::makeRef(vs_ocornut_imgui_mtl, sizeof(vs_ocornut_imgui_mtl) ); - fsmem = bgfx::makeRef(fs_ocornut_imgui_mtl, sizeof(fs_ocornut_imgui_mtl) ); - break; - - default: - vsmem = bgfx::makeRef(vs_ocornut_imgui_glsl, sizeof(vs_ocornut_imgui_glsl) ); - fsmem = bgfx::makeRef(fs_ocornut_imgui_glsl, sizeof(fs_ocornut_imgui_glsl) ); - break; - } - - bgfx::ShaderHandle vsh = bgfx::createShader(vsmem); - bgfx::ShaderHandle fsh = bgfx::createShader(fsmem); - m_program = bgfx::createProgram(vsh, fsh, true); + 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() @@ -430,8 +378,9 @@ struct OcornutImguiContext #endif // defined(SCI_NAMESPACE) ImGui::NewFrame(); - ImGuizmo::BeginFrame(); ImGui::PushStyleVar(ImGuiStyleVar_ViewId, (float)_viewId); + + ImGuizmo::BeginFrame(); } void endFrame() diff --git a/3rdparty/bgfx/examples/common/imgui/scintilla.cpp b/3rdparty/bgfx/examples/common/imgui/scintilla.cpp index 7c8e4cd..b11befe 100644 --- a/3rdparty/bgfx/examples/common/imgui/scintilla.cpp +++ b/3rdparty/bgfx/examples/common/imgui/scintilla.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx/blob/master/LICENSE */ diff --git a/3rdparty/bgfx/examples/common/imgui/scintilla.h b/3rdparty/bgfx/examples/common/imgui/scintilla.h index 2bc546f..d555d5f 100644 --- a/3rdparty/bgfx/examples/common/imgui/scintilla.h +++ b/3rdparty/bgfx/examples/common/imgui/scintilla.h @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx/blob/master/LICENSE */ 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 e754538..511d842 100644 --- a/3rdparty/bgfx/examples/common/imgui/vs_imgui_color.bin.h +++ b/3rdparty/bgfx/examples/common/imgui/vs_imgui_color.bin.h @@ -22,27 +22,203 @@ 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_dx9[294] = +static const uint8_t vs_imgui_color_spv[2782] = { 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, 0x08, 0x01, 0x00, 0x03, 0xfe, // wProj........... - 0xff, 0xfe, 0xff, 0x23, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, // ...#.CTAB....S.. + 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.... +}; +static const uint8_t vs_imgui_color_dx9[282] = +{ + 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, 0x36, // hader Compiler 6 - 0x2e, 0x33, 0x2e, 0x39, 0x36, 0x30, 0x30, 0x2e, 0x31, 0x36, 0x33, 0x38, 0x34, 0x00, 0xab, 0xab, // .3.9600.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, 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, // ...............U - 0x90, 0x04, 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, 0xff, 0xff, 0x00, 0x00, 0x00, // ...... + 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, // .......... }; static const uint8_t vs_imgui_color_dx11[465] = { @@ -123,3 +299,5 @@ static const uint8_t vs_imgui_color_mtl[674] = 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* vs_imgui_color_pssl; +extern const uint32_t vs_imgui_color_pssl_size; diff --git a/3rdparty/bgfx/examples/common/imgui/vs_imgui_color.sc b/3rdparty/bgfx/examples/common/imgui/vs_imgui_color.sc index f0886f6..f5c42aa 100644 --- a/3rdparty/bgfx/examples/common/imgui/vs_imgui_color.sc +++ b/3rdparty/bgfx/examples/common/imgui/vs_imgui_color.sc @@ -2,7 +2,7 @@ $input a_position, a_color0 $output v_color0 /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ 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 ef4eb9d..c381c7b 100644 --- a/3rdparty/bgfx/examples/common/imgui/vs_imgui_cubemap.bin.h +++ b/3rdparty/bgfx/examples/common/imgui/vs_imgui_cubemap.bin.h @@ -22,11 +22,190 @@ 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_dx9[323] = +static const uint8_t vs_imgui_cubemap_spv[2807] = +{ + 0x56, 0x53, 0x48, 0x04, 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.... +}; +static const uint8_t vs_imgui_cubemap_dx9[311] = { 0x56, 0x53, 0x48, 0x04, 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...... - 0x20, 0x01, 0x00, 0x03, 0xfe, 0xff, 0xfe, 0xff, 0x24, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, // .......$.CTAB.. + 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_ @@ -34,17 +213,16 @@ static const uint8_t vs_imgui_cubemap_dx9[323] = 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, 0x36, 0x2e, 0x33, 0x2e, 0x39, 0x36, 0x30, 0x30, // ompiler 6.3.9600 - 0x2e, 0x31, 0x36, 0x33, 0x38, 0x34, 0x00, 0xab, 0xab, 0xab, 0x1f, 0x00, 0x00, 0x02, 0x03, 0x00, // .16384.......... - 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, 0x00, 0x04, 0x00, 0x00, // ........U....... - 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, // ... + 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, // ....... }; static const uint8_t vs_imgui_cubemap_dx11[510] = { @@ -127,3 +305,5 @@ static const uint8_t vs_imgui_cubemap_mtl[677] = 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_imgui_cubemap_pssl; +extern const uint32_t vs_imgui_cubemap_pssl_size; diff --git a/3rdparty/bgfx/examples/common/imgui/vs_imgui_cubemap.sc b/3rdparty/bgfx/examples/common/imgui/vs_imgui_cubemap.sc index d270071..7f68b53 100644 --- a/3rdparty/bgfx/examples/common/imgui/vs_imgui_cubemap.sc +++ b/3rdparty/bgfx/examples/common/imgui/vs_imgui_cubemap.sc @@ -2,7 +2,7 @@ $input a_position, a_normal $output v_normal /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ 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 8200c9b..67418cd 100644 --- a/3rdparty/bgfx/examples/common/imgui/vs_imgui_image.bin.h +++ b/3rdparty/bgfx/examples/common/imgui/vs_imgui_image.bin.h @@ -22,27 +22,205 @@ 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_dx9[294] = +static const uint8_t vs_imgui_image_spv[2806] = { 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, 0x08, 0x01, 0x00, 0x03, 0xfe, // wProj........... - 0xff, 0xfe, 0xff, 0x23, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, // ...#.CTAB....S.. + 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.... +}; +static const uint8_t vs_imgui_image_dx9[282] = +{ + 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, 0x36, // hader Compiler 6 - 0x2e, 0x33, 0x2e, 0x39, 0x36, 0x30, 0x30, 0x2e, 0x31, 0x36, 0x33, 0x38, 0x34, 0x00, 0xab, 0xab, // .3.9600.16384... - 0xab, 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, // ...............U - 0x90, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x00, 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, // ...... + 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, // .......... }; static const uint8_t vs_imgui_image_dx11[473] = { @@ -123,3 +301,5 @@ static const uint8_t vs_imgui_image_mtl[686] = 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, // xcoord0;. retur 0x6e, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // n _mtl_o;.}... }; +extern const uint8_t* vs_imgui_image_pssl; +extern const uint32_t vs_imgui_image_pssl_size; 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 b3267b5..36d9fd7 100644 --- a/3rdparty/bgfx/examples/common/imgui/vs_imgui_latlong.bin.h +++ b/3rdparty/bgfx/examples/common/imgui/vs_imgui_latlong.bin.h @@ -23,11 +23,190 @@ 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_dx9[323] = +static const uint8_t vs_imgui_latlong_spv[2803] = +{ + 0x56, 0x53, 0x48, 0x04, 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, // ... +}; +static const uint8_t vs_imgui_latlong_dx9[311] = { 0x56, 0x53, 0x48, 0x04, 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...... - 0x20, 0x01, 0x00, 0x03, 0xfe, 0xff, 0xfe, 0xff, 0x24, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, // .......$.CTAB.. + 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_ @@ -35,17 +214,16 @@ static const uint8_t vs_imgui_latlong_dx9[323] = 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, 0x36, 0x2e, 0x33, 0x2e, 0x39, 0x36, 0x30, 0x30, // ompiler 6.3.9600 - 0x2e, 0x31, 0x36, 0x33, 0x38, 0x34, 0x00, 0xab, 0xab, 0xab, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, // .16384.......... - 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, 0x00, 0x04, 0x00, 0x00, // ........U....... - 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, // ... + 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, // ....... }; static const uint8_t vs_imgui_latlong_dx11[518] = { @@ -129,3 +307,5 @@ static const uint8_t vs_imgui_latlong_mtl[685] = 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, // coord0;. return 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // _mtl_o;.}... }; +extern const uint8_t* vs_imgui_latlong_pssl; +extern const uint32_t vs_imgui_latlong_pssl_size; 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 f7f9f55..d3e1829 100644 --- a/3rdparty/bgfx/examples/common/imgui/vs_imgui_texture.bin.h +++ b/3rdparty/bgfx/examples/common/imgui/vs_imgui_texture.bin.h @@ -28,29 +28,235 @@ 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_dx9[330] = +static const uint8_t vs_imgui_texture_spv[3250] = { 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.. + 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, // .. +}; +static const uint8_t vs_imgui_texture_dx9[318] = +{ + 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, 0x36, // hader Compiler 6 - 0x2e, 0x33, 0x2e, 0x39, 0x36, 0x30, 0x30, 0x2e, 0x31, 0x36, 0x33, 0x38, 0x34, 0x00, 0xab, 0xab, // .3.9600.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, // .......... + 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, // .............. }; static const uint8_t vs_imgui_texture_dx11[575] = { @@ -143,3 +349,5 @@ static const uint8_t vs_imgui_texture_mtl[778] = 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, // or0;. return _m 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // tl_o;.}... }; +extern const uint8_t* vs_imgui_texture_pssl; +extern const uint32_t vs_imgui_texture_pssl_size; diff --git a/3rdparty/bgfx/examples/common/imgui/vs_imgui_texture.sc b/3rdparty/bgfx/examples/common/imgui/vs_imgui_texture.sc index f6a3f24..b40aa9b 100644 --- a/3rdparty/bgfx/examples/common/imgui/vs_imgui_texture.sc +++ b/3rdparty/bgfx/examples/common/imgui/vs_imgui_texture.sc @@ -2,7 +2,7 @@ $input a_position, a_texcoord0, a_color0 $output v_texcoord0, v_color0 /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ 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 d339c49..e61852a 100644 --- a/3rdparty/bgfx/examples/common/imgui/vs_ocornut_imgui.bin.h +++ b/3rdparty/bgfx/examples/common/imgui/vs_ocornut_imgui.bin.h @@ -34,11 +34,231 @@ 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_dx9[371] = +static const uint8_t vs_ocornut_imgui_spv[3459] = { 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, 0x54, 0x01, 0x00, 0x03, // wTexel......T... - 0xfe, 0xff, 0xfe, 0xff, 0x23, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x53, 0x00, // ....#.CTAB....S. + 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, // ... +}; +static const uint8_t vs_ocornut_imgui_dx9[359] = +{ + 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 @@ -46,20 +266,19 @@ static const uint8_t vs_ocornut_imgui_dx9[371] = 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 - 0x36, 0x2e, 0x33, 0x2e, 0x39, 0x36, 0x30, 0x30, 0x2e, 0x31, 0x36, 0x33, 0x38, 0x34, 0x00, 0xab, // 6.3.9600.16384.. - 0xab, 0xab, 0x51, 0x00, 0x00, 0x05, 0x01, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, // ..Q..........@.. - 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, 0x02, 0xe0, 0x00, 0x00, // ....U........... - 0x55, 0x80, 0x01, 0x00, 0x00, 0xa1, 0x01, 0x00, 0xaa, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, // U............... - 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, // ... + 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, // ....... }; static const uint8_t vs_ocornut_imgui_dx11[612] = { @@ -161,3 +380,5 @@ static const uint8_t vs_ocornut_imgui_mtl[880] = 0x2e, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, // .a_color0;. ret 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // urn _mtl_o;.}... }; +extern const uint8_t* vs_ocornut_imgui_pssl; +extern const uint32_t vs_ocornut_imgui_pssl_size; diff --git a/3rdparty/bgfx/examples/common/nanovg/fontstash.h b/3rdparty/bgfx/examples/common/nanovg/fontstash.h index a6c9877..53cb4bd 100644 --- a/3rdparty/bgfx/examples/common/nanovg/fontstash.h +++ b/3rdparty/bgfx/examples/common/nanovg/fontstash.h @@ -83,7 +83,7 @@ typedef struct FONStextIter FONStextIter; typedef struct FONScontext FONScontext; -// Contructor and destructor. +// Constructor and destructor. FONScontext* fonsCreateInternal(FONSparams* params); void fonsDeleteInternal(FONScontext* s); @@ -92,7 +92,7 @@ void fonsSetErrorCallback(FONScontext* s, void (*callback)(void* uptr, int error void fonsGetAtlasSize(FONScontext* s, int* width, int* height); // Expands the atlas size. int fonsExpandAtlas(FONScontext* s, int width, int height); -// Reseta the whole stash. +// Resets the whole stash. int fonsResetAtlas(FONScontext* stash, int width, int height); // Add fonts @@ -1045,6 +1045,7 @@ static FONSglyph* fons__getGlyph(FONScontext* stash, FONSfont* font, unsigned in int pad, added; unsigned char* bdst; unsigned char* dst; + FONSfont* renderFont = font; if (isize < 2) return NULL; if (iblur > 20) iblur = 20; @@ -1063,18 +1064,23 @@ static FONSglyph* fons__getGlyph(FONScontext* stash, FONSfont* font, unsigned in } // Could not find glyph, create it. - scale = fons__tt_getPixelHeightScale(&font->font, size); g = fons__tt_getGlyphIndex(&font->font, codepoint); // Try to find the glyph in fallback fonts. if (g == 0) { for (i = 0; i < font->nfallbacks; ++i) { - FONSglyph* fallbackGlyph = fons__getGlyph(stash, stash->fonts[font->fallbacks[i]], codepoint, isize, iblur); - if (fallbackGlyph != NULL && fallbackGlyph->index != 0) { - return fallbackGlyph; + FONSfont* fallbackFont = stash->fonts[font->fallbacks[i]]; + int fallbackIndex = fons__tt_getGlyphIndex(&fallbackFont->font, codepoint); + if (fallbackIndex != 0) { + g = fallbackIndex; + renderFont = fallbackFont; + break; } } + // It is possible that we did not find a fallback glyph. + // In that case the glyph index 'g' is 0, and we'll proceed below and cache empty glyph. } - fons__tt_buildGlyphBitmap(&font->font, g, size, scale, &advance, &lsb, &x0, &y0, &x1, &y1); + scale = fons__tt_getPixelHeightScale(&renderFont->font, size); + fons__tt_buildGlyphBitmap(&renderFont->font, g, size, scale, &advance, &lsb, &x0, &y0, &x1, &y1); gw = x1-x0 + pad*2; gh = y1-y0 + pad*2; @@ -1108,7 +1114,7 @@ static FONSglyph* fons__getGlyph(FONScontext* stash, FONSfont* font, unsigned in // Rasterize dst = &stash->texData[(glyph->x0+pad) + (glyph->y0+pad) * stash->params.width]; - fons__tt_renderGlyphBitmap(&font->font, dst, gw-pad*2,gh-pad*2, stash->params.width, scale,scale, g); + fons__tt_renderGlyphBitmap(&renderFont->font, dst, gw-pad*2,gh-pad*2, stash->params.width, scale,scale, g); // Make sure there is one pixel empty border. dst = &stash->texData[glyph->x0 + glyph->y0 * stash->params.width]; 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 434376a..1a0540f 100644 --- a/3rdparty/bgfx/examples/common/nanovg/fs_nanovg_fill.bin.h +++ b/3rdparty/bgfx/examples/common/nanovg/fs_nanovg_fill.bin.h @@ -184,7 +184,623 @@ 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_dx9[1595] = +static const uint8_t fs_nanovg_fill_spv[9799] = +{ + 0x46, 0x53, 0x48, 0x04, 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....... + 0x75, 0x5f, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x43, 0x6f, 0x6c, 0x12, 0x01, 0x00, 0x00, 0x01, 0x00, // u_innerCol...... + 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.... +}; +static const uint8_t fs_nanovg_fill_dx9[1583] = { 0x46, 0x53, 0x48, 0x04, 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 @@ -195,8 +811,8 @@ static const uint8_t fs_nanovg_fill_dx9[1595] = 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, 0xa0, 0x05, 0x00, 0x03, 0xff, 0xff, 0xfe, 0xff, // at.............. - 0x64, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x57, 0x01, 0x00, 0x00, 0x00, 0x03, // d.CTAB....W..... + 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, // ................ @@ -220,72 +836,71 @@ static const uint8_t fs_nanovg_fill_dx9[1595] = 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 - 0x36, 0x2e, 0x33, 0x2e, 0x39, 0x36, 0x30, 0x30, 0x2e, 0x31, 0x36, 0x33, 0x38, 0x34, 0x00, 0xab, // 6.3.9600.16384.. - 0xab, 0xab, 0x51, 0x00, 0x00, 0x05, 0x0b, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, // ..Q..........?.. - 0x00, 0x40, 0x00, 0x00, 0x80, 0xbf, 0x00, 0x00, 0x80, 0x3f, 0x51, 0x00, 0x00, 0x05, 0x0c, 0x00, // .@.......?Q..... - 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, 0x03, 0x80, 0x00, 0x00, // ....U........... - 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, 0x00, 0x04, 0x00, 0x00, // ....U........... - 0x02, 0x80, 0x01, 0x00, 0x00, 0x90, 0x0b, 0x00, 0x55, 0xa0, 0x0b, 0x00, 0xaa, 0xa0, 0x02, 0x00, // ........U....... - 0x00, 0x03, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x55, 0x8c, 0x0b, 0x00, 0xff, 0xa0, 0x05, 0x00, // ........U....... - 0x00, 0x03, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x55, 0x80, 0x0a, 0x00, 0x55, 0xa0, 0x0a, 0x00, // ........U...U... - 0x00, 0x03, 0x01, 0x00, 0x04, 0x80, 0x00, 0x00, 0x55, 0x80, 0x0b, 0x00, 0xff, 0xa0, 0x0a, 0x00, // ........U....... - 0x00, 0x03, 0x00, 0x00, 0x02, 0x80, 0x01, 0x00, 0x55, 0x90, 0x0b, 0x00, 0xff, 0xa0, 0x05, 0x00, // ........U....... - 0x00, 0x03, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x55, 0x80, 0x01, 0x00, 0xaa, 0x80, 0x23, 0x00, // ........U.....#. - 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, 0x00, 0x04, 0x02, 0x00, // ........U....... - 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, // ............D... - 0x00, 0x03, 0x02, 0x00, 0x0c, 0x80, 0x02, 0x00, 0xe4, 0x81, 0x02, 0x00, 0x44, 0x8b, 0x0b, 0x00, // ............D... - 0x00, 0x03, 0x03, 0x00, 0x03, 0x80, 0x02, 0x00, 0xee, 0x80, 0x0c, 0x00, 0x00, 0xa0, 0x5a, 0x00, // ..............Z. - 0x00, 0x04, 0x00, 0x00, 0x08, 0x80, 0x03, 0x00, 0xe4, 0x80, 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, 0x06, 0x00, 0x00, 0x02, 0x03, 0x00, // ........U....... - 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, 0xd4, 0x80, 0x03, 0x00, // U............... - 0xd4, 0x80, 0x42, 0x00, 0x00, 0x03, 0x02, 0x00, 0x0f, 0x80, 0x01, 0x00, 0xe8, 0x80, 0x00, 0x08, // ..B............. - 0xe4, 0xa0, 0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x0d, 0x80, 0x01, 0x00, 0x77, 0x81, 0x0a, 0x00, // ............w... - 0xa7, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x03, 0x00, 0x07, 0x80, 0x02, 0x00, 0xff, 0x80, 0x02, 0x00, // ................ - 0xe4, 0x80, 0x58, 0x00, 0x00, 0x04, 0x02, 0x00, 0x07, 0x80, 0x01, 0x00, 0xaa, 0x8c, 0x03, 0x00, // ..X............. - 0xe4, 0x80, 0x02, 0x00, 0xe4, 0x80, 0x58, 0x00, 0x00, 0x04, 0x02, 0x00, 0x0e, 0x80, 0x01, 0x00, // ......X......... - 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, 0x02, 0x02, 0x0a, 0x00, // ....U.....)..... - 0xff, 0xa0, 0x01, 0x00, 0x55, 0x80, 0x01, 0x00, 0x00, 0x02, 0x03, 0x00, 0x0f, 0x80, 0x0b, 0x00, // ....U........... - 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, 0x55, 0x80, 0x42, 0x00, // U.).........U.B. - 0x00, 0x03, 0x04, 0x00, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0x90, 0x00, 0x08, 0xe4, 0xa0, 0x05, 0x00, // ................ - 0x00, 0x03, 0x05, 0x00, 0x07, 0x80, 0x04, 0x00, 0xff, 0x80, 0x04, 0x00, 0xe4, 0x80, 0x58, 0x00, // ..............X. - 0x00, 0x04, 0x04, 0x00, 0x07, 0x80, 0x01, 0x00, 0xaa, 0x8c, 0x05, 0x00, 0xe4, 0x80, 0x04, 0x00, // ................ - 0xe4, 0x80, 0x58, 0x00, 0x00, 0x04, 0x04, 0x00, 0x0e, 0x80, 0x01, 0x00, 0xff, 0x8c, 0x04, 0x00, // ..X............. - 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, // ......+...+...X. - 0x00, 0x04, 0x01, 0x00, 0x0f, 0x80, 0x01, 0x00, 0x00, 0x8c, 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, // ............U... - 0xe4, 0x80, 0x58, 0x00, 0x00, 0x04, 0x00, 0x08, 0x0f, 0x80, 0x00, 0x00, 0xaa, 0x81, 0x02, 0x00, // ..X............. - 0xe4, 0x80, 0x01, 0x00, 0xe4, 0x80, 0xff, 0xff, 0x00, 0x00, 0x00, // ........... + 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, // ............... }; static const uint8_t fs_nanovg_fill_dx11[2362] = { @@ -438,7 +1053,7 @@ static const uint8_t fs_nanovg_fill_dx11[2362] = 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[3672] = +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 0x73, 0x73, 0x6f, 0x72, 0x4d, 0x61, 0x74, 0x03, 0x01, 0x00, 0x00, 0x01, 0x00, 0x0a, 0x75, 0x5f, // ssorMat.......u_ @@ -448,7 +1063,7 @@ static const uint8_t fs_nanovg_fill_mtl[3672] = 0x11, 0x75, 0x5f, 0x73, 0x63, 0x69, 0x73, 0x73, 0x6f, 0x72, 0x45, 0x78, 0x74, 0x53, 0x63, 0x61, // .u_scissorExtSca 0x6c, 0x65, 0x02, 0x01, 0x00, 0x00, 0x01, 0x00, 0x0e, 0x75, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, // le.......u_exten 0x74, 0x52, 0x61, 0x64, 0x69, 0x75, 0x73, 0x02, 0x01, 0x00, 0x00, 0x01, 0x00, 0x08, 0x75, 0x5f, // tRadius.......u_ - 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x02, 0x01, 0x00, 0x00, 0x01, 0x00, 0xc7, 0x0d, 0x00, 0x00, // params.......... + 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x02, 0x01, 0x00, 0x00, 0x01, 0x00, 0xf5, 0x0c, 0x00, 0x00, // params.......... 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 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, // atMtlShaderInput @@ -457,217 +1072,206 @@ static const uint8_t fs_nanovg_fill_mtl[3672] = 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, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, // haderOutput {. - 0x68, 0x61, 0x6c, 0x66, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, // half4 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, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x78, 0x33, 0x20, // rm {. float3x3 - 0x75, 0x5f, 0x73, 0x63, 0x69, 0x73, 0x73, 0x6f, 0x72, 0x4d, 0x61, 0x74, 0x3b, 0x0a, 0x20, 0x20, // u_scissorMat;. - 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x78, 0x33, 0x20, 0x75, 0x5f, 0x70, 0x61, 0x69, 0x6e, 0x74, // float3x3 u_paint - 0x4d, 0x61, 0x74, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x75, 0x5f, // Mat;. float4 u_ - 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x43, 0x6f, 0x6c, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, // innerCol;. floa - 0x74, 0x34, 0x20, 0x75, 0x5f, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6c, 0x3b, 0x0a, 0x20, // t4 u_outerCol;. - 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x75, 0x5f, 0x73, 0x63, 0x69, 0x73, 0x73, 0x6f, // float4 u_scisso - 0x72, 0x45, 0x78, 0x74, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, // rExtScale;. flo - 0x61, 0x74, 0x34, 0x20, 0x75, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x61, 0x64, 0x69, // at4 u_extentRadi - 0x75, 0x73, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x75, 0x5f, 0x70, // us;. float4 u_p - 0x61, 0x72, 0x61, 0x6d, 0x73, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, // arams;.};.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, 0x0a, // u [[buffer(0)]]. - 0x20, 0x20, 0x2c, 0x20, 0x20, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x3c, // , texture2d< - 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x3e, 0x20, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x20, 0x5b, 0x5b, 0x74, // float> s_tex [[t - 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x2c, 0x20, 0x73, 0x61, 0x6d, // exture(0)]], sam - 0x70, 0x6c, 0x65, 0x72, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x73, 0x6d, 0x70, 0x5f, 0x73, 0x5f, 0x74, // pler _mtlsmp_s_t - 0x65, 0x78, 0x20, 0x5b, 0x5b, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x28, 0x30, 0x29, 0x5d, // ex [[sampler(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, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, // o;. half4 resul - 0x74, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, // t_1 = 0;. float - 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, // tmpvar_2 = 0;. - 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x20, 0x73, 0x63, 0x5f, 0x33, 0x20, 0x3d, 0x20, 0x30, // float2 sc_3 = 0 - 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // ;. float3 tmpva - 0x72, 0x5f, 0x34, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // r_4 = 0;. tmpva - 0x72, 0x5f, 0x34, 0x2e, 0x7a, 0x20, 0x3d, 0x20, 0x31, 0x2e, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, // r_4.z = 1.0;. t - 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x34, 0x2e, 0x78, 0x79, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, // mpvar_4.xy = _mt - 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0x0a, // l_i.v_position;. - 0x20, 0x20, 0x73, 0x63, 0x5f, 0x33, 0x20, 0x3d, 0x20, 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, // sc_3 = (float2 - 0x28, 0x30, 0x2e, 0x35, 0x2c, 0x20, 0x30, 0x2e, 0x35, 0x29, 0x20, 0x2d, 0x20, 0x28, 0x28, 0x0a, // (0.5, 0.5) - ((. - 0x20, 0x20, 0x20, 0x20, 0x61, 0x62, 0x73, 0x28, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, // abs((_mtl_u. - 0x75, 0x5f, 0x73, 0x63, 0x69, 0x73, 0x73, 0x6f, 0x72, 0x4d, 0x61, 0x74, 0x20, 0x2a, 0x20, 0x74, // u_scissorMat * t - 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x34, 0x29, 0x2e, 0x78, 0x79, 0x29, 0x0a, 0x20, 0x20, 0x20, // mpvar_4).xy). - 0x2d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x73, 0x63, 0x69, 0x73, 0x73, // - _mtl_u.u_sciss - 0x6f, 0x72, 0x45, 0x78, 0x74, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x78, 0x79, 0x29, 0x20, 0x2a, // orExtScale.xy) * - 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x73, 0x63, 0x69, 0x73, 0x73, 0x6f, // _mtl_u.u_scisso - 0x72, 0x45, 0x78, 0x74, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x7a, 0x77, 0x29, 0x29, 0x3b, 0x0a, // rExtScale.zw));. - 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x20, 0x3d, 0x20, 0x28, 0x63, 0x6c, // tmpvar_2 = (cl - 0x61, 0x6d, 0x70, 0x20, 0x28, 0x73, 0x63, 0x5f, 0x33, 0x2e, 0x78, 0x2c, 0x20, 0x30, 0x2e, 0x30, // amp (sc_3.x, 0.0 - 0x2c, 0x20, 0x31, 0x2e, 0x30, 0x29, 0x20, 0x2a, 0x20, 0x63, 0x6c, 0x61, 0x6d, 0x70, 0x20, 0x28, // , 1.0) * clamp ( - 0x73, 0x63, 0x5f, 0x33, 0x2e, 0x79, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x31, 0x2e, 0x30, // sc_3.y, 0.0, 1.0 - 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x74, 0x6d, 0x70, 0x76, // ));. float tmpv - 0x61, 0x72, 0x5f, 0x35, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, // ar_5 = 0;. tmpv - 0x61, 0x72, 0x5f, 0x35, 0x20, 0x3d, 0x20, 0x28, 0x6d, 0x69, 0x6e, 0x20, 0x28, 0x31, 0x2e, 0x30, // ar_5 = (min (1.0 - 0x2c, 0x20, 0x28, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x28, 0x31, 0x2e, 0x30, 0x20, 0x2d, 0x20, 0x61, // , (. (1.0 - a - 0x62, 0x73, 0x28, 0x28, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x74, 0x65, // bs(((_mtl_i.v_te - 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x2e, 0x78, 0x20, 0x2a, 0x20, 0x32, 0x2e, 0x30, 0x29, // xcoord0.x * 2.0) - 0x20, 0x2d, 0x20, 0x31, 0x2e, 0x30, 0x29, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x5f, // - 1.0))). * _ - 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x79, // mtl_u.u_params.y - 0x29, 0x29, 0x20, 0x2a, 0x20, 0x6d, 0x69, 0x6e, 0x20, 0x28, 0x31, 0x2e, 0x30, 0x2c, 0x20, 0x5f, // )) * min (1.0, _ - 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, // mtl_i.v_texcoord - 0x30, 0x2e, 0x79, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x5f, 0x6d, // 0.y));. if ((_m - 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x77, 0x20, // tl_u.u_params.w - 0x3d, 0x3d, 0x20, 0x30, 0x2e, 0x30, 0x29, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, // == 0.0)) {. f - 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x36, 0x20, 0x3d, 0x20, // loat4 color_6 = - 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x74, 0x6d, // 0;. float3 tm - 0x70, 0x76, 0x61, 0x72, 0x5f, 0x37, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, // pvar_7 = 0;. - 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x37, 0x2e, 0x7a, 0x20, 0x3d, 0x20, 0x31, 0x2e, 0x30, // tmpvar_7.z = 1.0 - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x37, 0x2e, 0x78, // ;. tmpvar_7.x - 0x79, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x70, 0x6f, 0x73, // y = _mtl_i.v_pos - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, // ition;. float - 0x32, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x38, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, // 2 tmpvar_8 = 0;. - 0x20, 0x20, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x38, 0x20, 0x3d, 0x20, 0x28, // tmpvar_8 = ( - 0x61, 0x62, 0x73, 0x28, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x70, 0x61, // abs((_mtl_u.u_pa - 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x74, 0x20, 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // intMat * tmpvar_ - 0x37, 0x29, 0x2e, 0x78, 0x79, 0x29, 0x20, 0x2d, 0x20, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, // 7).xy) - (_mtl_u - 0x2e, 0x75, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x61, 0x64, 0x69, 0x75, 0x73, 0x2e, // .u_extentRadius. - 0x78, 0x79, 0x20, 0x2d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x65, 0x78, // xy - _mtl_u.u_ex - 0x74, 0x65, 0x6e, 0x74, 0x52, 0x61, 0x64, 0x69, 0x75, 0x73, 0x2e, 0x7a, 0x7a, 0x29, 0x29, 0x3b, // tentRadius.zz)); + 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, // float4 gl_FragCo + 0x6c, 0x6f, 0x72, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, // lor;.};.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, 0x33, 0x78, 0x33, // orm {. float3x3 + 0x20, 0x75, 0x5f, 0x73, 0x63, 0x69, 0x73, 0x73, 0x6f, 0x72, 0x4d, 0x61, 0x74, 0x3b, 0x0a, 0x20, // u_scissorMat;. + 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x78, 0x33, 0x20, 0x75, 0x5f, 0x70, 0x61, 0x69, 0x6e, // float3x3 u_pain + 0x74, 0x4d, 0x61, 0x74, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x75, // tMat;. float4 u + 0x5f, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x43, 0x6f, 0x6c, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, // _innerCol;. flo + 0x61, 0x74, 0x34, 0x20, 0x75, 0x5f, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6c, 0x3b, 0x0a, // at4 u_outerCol;. + 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x75, 0x5f, 0x73, 0x63, 0x69, 0x73, 0x73, // float4 u_sciss + 0x6f, 0x72, 0x45, 0x78, 0x74, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, // orExtScale;. fl + 0x6f, 0x61, 0x74, 0x34, 0x20, 0x75, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x61, 0x64, // oat4 u_extentRad + 0x69, 0x75, 0x73, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x75, 0x5f, // ius;. float4 u_ + 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x66, 0x72, 0x61, 0x67, 0x6d, // params;.};.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)]] + 0x0a, 0x20, 0x20, 0x2c, 0x20, 0x20, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, // . , texture2d + 0x3c, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x3e, 0x20, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x20, 0x5b, 0x5b, // s_tex [[ + 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x2c, 0x20, 0x73, 0x61, // texture(0)]], sa + 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x73, 0x6d, 0x70, 0x5f, 0x73, 0x5f, // mpler _mtlsmp_s_ + 0x74, 0x65, 0x78, 0x20, 0x5b, 0x5b, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x28, 0x30, 0x29, // tex [[sampler(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, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x72, 0x65, 0x73, // _o;. float4 res + 0x75, 0x6c, 0x74, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, // ult_1 = 0;. flo + 0x61, 0x74, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x20, 0x3d, 0x20, 0x30, 0x3b, // at tmpvar_2 = 0; + 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x20, 0x73, 0x63, 0x5f, 0x33, 0x20, 0x3d, // . float2 sc_3 = + 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x74, 0x6d, 0x70, // 0;. float3 tmp + 0x76, 0x61, 0x72, 0x5f, 0x34, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, // var_4 = 0;. tmp + 0x76, 0x61, 0x72, 0x5f, 0x34, 0x2e, 0x7a, 0x20, 0x3d, 0x20, 0x31, 0x2e, 0x30, 0x3b, 0x0a, 0x20, // var_4.z = 1.0;. + 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x34, 0x2e, 0x78, 0x79, 0x20, 0x3d, 0x20, 0x5f, // tmpvar_4.xy = _ + 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, // mtl_i.v_position + 0x3b, 0x0a, 0x20, 0x20, 0x73, 0x63, 0x5f, 0x33, 0x20, 0x3d, 0x20, 0x28, 0x66, 0x6c, 0x6f, 0x61, // ;. sc_3 = (floa + 0x74, 0x32, 0x28, 0x30, 0x2e, 0x35, 0x2c, 0x20, 0x30, 0x2e, 0x35, 0x29, 0x20, 0x2d, 0x20, 0x28, // t2(0.5, 0.5) - ( + 0x28, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x61, 0x62, 0x73, 0x28, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, // (. abs((_mtl_ + 0x75, 0x2e, 0x75, 0x5f, 0x73, 0x63, 0x69, 0x73, 0x73, 0x6f, 0x72, 0x4d, 0x61, 0x74, 0x20, 0x2a, // u.u_scissorMat * + 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x34, 0x29, 0x2e, 0x78, 0x79, 0x29, 0x0a, 0x20, // tmpvar_4).xy). + 0x20, 0x20, 0x2d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x73, 0x63, 0x69, // - _mtl_u.u_sci + 0x73, 0x73, 0x6f, 0x72, 0x45, 0x78, 0x74, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x78, 0x79, 0x29, // ssorExtScale.xy) + 0x20, 0x2a, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x73, 0x63, 0x69, 0x73, // * _mtl_u.u_scis + 0x73, 0x6f, 0x72, 0x45, 0x78, 0x74, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x7a, 0x77, 0x29, 0x29, // sorExtScale.zw)) + 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x20, 0x3d, 0x20, 0x28, // ;. tmpvar_2 = ( + 0x63, 0x6c, 0x61, 0x6d, 0x70, 0x20, 0x28, 0x73, 0x63, 0x5f, 0x33, 0x2e, 0x78, 0x2c, 0x20, 0x30, // clamp (sc_3.x, 0 + 0x2e, 0x30, 0x2c, 0x20, 0x31, 0x2e, 0x30, 0x29, 0x20, 0x2a, 0x20, 0x63, 0x6c, 0x61, 0x6d, 0x70, // .0, 1.0) * clamp + 0x20, 0x28, 0x73, 0x63, 0x5f, 0x33, 0x2e, 0x79, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x31, // (sc_3.y, 0.0, 1 + 0x2e, 0x30, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x74, 0x6d, // .0));. float tm + 0x70, 0x76, 0x61, 0x72, 0x5f, 0x35, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, // pvar_5 = 0;. tm + 0x70, 0x76, 0x61, 0x72, 0x5f, 0x35, 0x20, 0x3d, 0x20, 0x28, 0x6d, 0x69, 0x6e, 0x20, 0x28, 0x31, // pvar_5 = (min (1 + 0x2e, 0x30, 0x2c, 0x20, 0x28, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x28, 0x31, 0x2e, 0x30, 0x20, 0x2d, // .0, (. (1.0 - + 0x20, 0x61, 0x62, 0x73, 0x28, 0x28, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, // abs(((_mtl_i.v_ + 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x2e, 0x78, 0x20, 0x2a, 0x20, 0x32, 0x2e, // texcoord0.x * 2. + 0x30, 0x29, 0x20, 0x2d, 0x20, 0x31, 0x2e, 0x30, 0x29, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x2a, // 0) - 1.0))). * + 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, // _mtl_u.u_params + 0x2e, 0x79, 0x29, 0x29, 0x20, 0x2a, 0x20, 0x6d, 0x69, 0x6e, 0x20, 0x28, 0x31, 0x2e, 0x30, 0x2c, // .y)) * min (1.0, + 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, // _mtl_i.v_texcoo + 0x72, 0x64, 0x30, 0x2e, 0x79, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, // rd0.y));. if (( + 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, // _mtl_u.u_params. + 0x77, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x2e, 0x30, 0x29, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, // w == 0.0)) {. + 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x36, // float3 tmpvar_6 + 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, // = 0;. tmpvar + 0x5f, 0x36, 0x2e, 0x7a, 0x20, 0x3d, 0x20, 0x31, 0x2e, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, // _6.z = 1.0;. + 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x36, 0x2e, 0x78, 0x79, 0x20, 0x3d, 0x20, 0x5f, 0x6d, // tmpvar_6.xy = _m + 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3b, // tl_i.v_position; 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x20, 0x74, 0x6d, 0x70, 0x76, // . float2 tmpv - 0x61, 0x72, 0x5f, 0x39, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x6d, // ar_9 = 0;. tm - 0x70, 0x76, 0x61, 0x72, 0x5f, 0x39, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x78, 0x20, 0x28, 0x74, 0x6d, // pvar_9 = max (tm - 0x70, 0x76, 0x61, 0x72, 0x5f, 0x38, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, // pvar_8, 0.0);. - 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x36, 0x20, 0x3d, 0x20, 0x28, 0x6d, 0x69, 0x78, // color_6 = (mix - 0x20, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x69, 0x6e, 0x6e, 0x65, 0x72, // (_mtl_u.u_inner - 0x43, 0x6f, 0x6c, 0x2c, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x6f, 0x75, // Col, _mtl_u.u_ou - 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6c, 0x2c, 0x20, 0x63, 0x6c, 0x61, 0x6d, 0x70, 0x20, 0x28, 0x0a, // terCol, clamp (. - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x28, 0x28, 0x28, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, // ((((. - 0x20, 0x20, 0x20, 0x6d, 0x69, 0x6e, 0x20, 0x28, 0x6d, 0x61, 0x78, 0x20, 0x28, 0x74, 0x6d, 0x70, // min (max (tmp - 0x76, 0x61, 0x72, 0x5f, 0x38, 0x2e, 0x78, 0x2c, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // var_8.x, tmpvar_ - 0x38, 0x2e, 0x79, 0x29, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, // 8.y), 0.0). - 0x20, 0x20, 0x2b, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x71, 0x72, // + . sqr - 0x74, 0x28, 0x64, 0x6f, 0x74, 0x20, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x39, 0x2c, // t(dot (tmpvar_9, - 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x39, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, // tmpvar_9)). - 0x20, 0x20, 0x29, 0x20, 0x2d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x65, // ) - _mtl_u.u_e - 0x78, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x61, 0x64, 0x69, 0x75, 0x73, 0x2e, 0x7a, 0x29, 0x20, 0x2b, // xtentRadius.z) + - 0x20, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, // (_mtl_u.u_param - 0x73, 0x2e, 0x78, 0x20, 0x2a, 0x20, 0x30, 0x2e, 0x35, 0x29, 0x29, 0x20, 0x2f, 0x20, 0x5f, 0x6d, // s.x * 0.5)) / _m - 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x78, 0x29, // tl_u.u_params.x) - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x31, 0x2e, 0x30, 0x29, // . , 0.0, 1.0) - 0x29, 0x20, 0x2a, 0x20, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x35, 0x20, 0x2a, 0x20, // ) * (tmpvar_5 * - 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, // tmpvar_2));. - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x34, // result_1 = half4 - 0x28, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x36, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x20, 0x65, // (color_6);. } e - 0x6c, 0x73, 0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x5f, // lse {. if ((_ - 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x77, // mtl_u.u_params.w - 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x2e, 0x30, 0x29, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, // == 1.0)) {. - 0x20, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x31, 0x30, // half4 color_10 - 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, // = 0;. floa - 0x74, 0x33, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x31, 0x20, 0x3d, 0x20, 0x30, // t3 tmpvar_11 = 0 - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, // ;. tmpvar_1 - 0x31, 0x2e, 0x7a, 0x20, 0x3d, 0x20, 0x31, 0x2e, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, // 1.z = 1.0;. - 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x31, 0x2e, 0x78, 0x79, 0x20, 0x3d, 0x20, // tmpvar_11.xy = - 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, // _mtl_i.v_positio - 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x20, // n;. float2 - 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x32, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, // tmpvar_12 = 0;. - 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x32, 0x20, 0x3d, // tmpvar_12 = - 0x20, 0x28, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x70, 0x61, 0x69, 0x6e, // ((_mtl_u.u_pain - 0x74, 0x4d, 0x61, 0x74, 0x20, 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x31, // tMat * tmpvar_11 - 0x29, 0x2e, 0x78, 0x79, 0x20, 0x2f, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, // ).xy / _mtl_u.u_ - 0x65, 0x78, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x61, 0x64, 0x69, 0x75, 0x73, 0x2e, 0x78, 0x79, 0x29, // extentRadius.xy) - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x20, 0x74, 0x6d, // ;. half4 tm - 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x33, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, // pvar_13 = 0;. - 0x20, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x33, 0x20, 0x3d, 0x20, 0x68, // tmpvar_13 = h - 0x61, 0x6c, 0x66, 0x34, 0x28, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, // alf4(s_tex.sampl - 0x65, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x73, 0x6d, 0x70, 0x5f, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x2c, // e(_mtlsmp_s_tex, - 0x20, 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x29, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, // (float2)(tmpvar - 0x5f, 0x31, 0x32, 0x29, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, // _12)));. co - 0x6c, 0x6f, 0x72, 0x5f, 0x31, 0x30, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // lor_10 = tmpvar_ - 0x31, 0x33, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x5f, // 13;. if ((_ - 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x7a, // mtl_u.u_params.z - 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x2e, 0x30, 0x29, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, // == 1.0)) {. - 0x20, 0x20, 0x20, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, // half4 tmpvar - 0x5f, 0x31, 0x34, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, // _14 = 0;. - 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x34, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, // tmpvar_14.xyz = - 0x20, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x33, 0x2e, 0x78, 0x79, 0x7a, 0x20, // (tmpvar_13.xyz - 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x33, 0x2e, 0x77, 0x29, 0x3b, 0x0a, // * tmpvar_13.w);. - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, // tmpvar_1 - 0x34, 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x33, 0x2e, // 4.w = tmpvar_13. - 0x77, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // w;. color - 0x5f, 0x31, 0x30, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x34, 0x3b, // _10 = tmpvar_14; - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, // . };. - 0x69, 0x66, 0x20, 0x28, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x70, 0x61, // if ((_mtl_u.u_pa - 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x7a, 0x20, 0x3d, 0x3d, 0x20, 0x32, 0x2e, 0x30, 0x29, 0x29, 0x20, // rams.z == 2.0)) - 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, // {. color_ - 0x31, 0x30, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x31, 0x30, 0x2e, 0x78, 0x78, // 10 = color_10.xx - 0x78, 0x78, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x20, 0x20, 0x20, // xx;. };. - 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x31, 0x30, 0x20, 0x3d, 0x20, 0x28, 0x28, // color_10 = (( - 0x68, 0x61, 0x6c, 0x66, 0x34, 0x29, 0x28, 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x29, 0x28, // half4)((float4)( - 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x31, 0x30, 0x29, 0x20, 0x2a, 0x20, 0x5f, 0x6d, 0x74, 0x6c, // color_10) * _mtl - 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x43, 0x6f, 0x6c, 0x29, 0x29, 0x3b, // _u.u_innerCol)); - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x31, 0x30, 0x20, // . color_10 - 0x3d, 0x20, 0x28, 0x28, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x29, 0x28, 0x28, 0x66, 0x6c, 0x6f, 0x61, // = ((half4)((floa - 0x74, 0x34, 0x29, 0x28, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x31, 0x30, 0x29, 0x20, 0x2a, 0x20, // t4)(color_10) * - 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x35, 0x20, 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, // (tmpvar_5 * tmpv - 0x61, 0x72, 0x5f, 0x32, 0x29, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, // ar_2)));. r + 0x61, 0x72, 0x5f, 0x37, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x6d, // ar_7 = 0;. tm + 0x70, 0x76, 0x61, 0x72, 0x5f, 0x37, 0x20, 0x3d, 0x20, 0x28, 0x61, 0x62, 0x73, 0x28, 0x28, 0x5f, // pvar_7 = (abs((_ + 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x70, 0x61, 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x74, // mtl_u.u_paintMat + 0x20, 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x36, 0x29, 0x2e, 0x78, 0x79, 0x29, // * tmpvar_6).xy) + 0x20, 0x2d, 0x20, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x65, 0x78, 0x74, // - (_mtl_u.u_ext + 0x65, 0x6e, 0x74, 0x52, 0x61, 0x64, 0x69, 0x75, 0x73, 0x2e, 0x78, 0x79, 0x20, 0x2d, 0x20, 0x5f, // entRadius.xy - _ + 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x61, // mtl_u.u_extentRa + 0x64, 0x69, 0x75, 0x73, 0x2e, 0x7a, 0x7a, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, // dius.zz));. f + 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x38, 0x20, 0x3d, // loat2 tmpvar_8 = + 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x38, // 0;. tmpvar_8 + 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x78, 0x20, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x37, // = max (tmpvar_7 + 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, // , 0.0);. resu + 0x6c, 0x74, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x28, 0x6d, 0x69, 0x78, 0x20, 0x28, 0x5f, 0x6d, 0x74, // lt_1 = (mix (_mt + 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x43, 0x6f, 0x6c, 0x2c, 0x20, // l_u.u_innerCol, + 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x43, 0x6f, // _mtl_u.u_outerCo + 0x6c, 0x2c, 0x20, 0x63, 0x6c, 0x61, 0x6d, 0x70, 0x20, 0x28, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, // l, clamp (. + 0x20, 0x28, 0x28, 0x28, 0x28, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x69, // ((((. mi + 0x6e, 0x20, 0x28, 0x6d, 0x61, 0x78, 0x20, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x37, // n (max (tmpvar_7 + 0x2e, 0x78, 0x2c, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x37, 0x2e, 0x79, 0x29, 0x2c, // .x, tmpvar_7.y), + 0x20, 0x30, 0x2e, 0x30, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2b, 0x20, 0x0a, // 0.0). + . + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x71, 0x72, 0x74, 0x28, 0x64, 0x6f, 0x74, // sqrt(dot + 0x20, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x38, 0x2c, 0x20, 0x74, 0x6d, 0x70, 0x76, // (tmpvar_8, tmpv + 0x61, 0x72, 0x5f, 0x38, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x29, 0x20, 0x2d, // ar_8)). ) - + 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x74, // _mtl_u.u_extent + 0x52, 0x61, 0x64, 0x69, 0x75, 0x73, 0x2e, 0x7a, 0x29, 0x20, 0x2b, 0x20, 0x28, 0x5f, 0x6d, 0x74, // Radius.z) + (_mt + 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x78, 0x20, 0x2a, // l_u.u_params.x * + 0x20, 0x30, 0x2e, 0x35, 0x29, 0x29, 0x20, 0x2f, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, // 0.5)) / _mtl_u. + 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x78, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, // u_params.x). + 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x31, 0x2e, 0x30, 0x29, 0x29, 0x20, 0x2a, 0x20, 0x28, // , 0.0, 1.0)) * ( + 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x35, 0x20, 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // tmpvar_5 * tmpva + 0x72, 0x5f, 0x32, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, // r_2));. } else + 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, // {. if ((_mtl_ + 0x75, 0x2e, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x77, 0x20, 0x3d, 0x3d, 0x20, // u.u_params.w == + 0x31, 0x2e, 0x30, 0x29, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, // 1.0)) {. fl + 0x6f, 0x61, 0x74, 0x34, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x39, 0x20, 0x3d, 0x20, 0x30, // oat4 color_9 = 0 + 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x74, // ;. float3 t + 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x30, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, // mpvar_10 = 0;. + 0x20, 0x20, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x30, 0x2e, 0x7a, 0x20, // tmpvar_10.z + 0x3d, 0x20, 0x31, 0x2e, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x6d, 0x70, // = 1.0;. tmp + 0x76, 0x61, 0x72, 0x5f, 0x31, 0x30, 0x2e, 0x78, 0x79, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, // var_10.xy = _mtl + 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0x0a, 0x20, // _i.v_position;. + 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, // float4 tmpv + 0x61, 0x72, 0x5f, 0x31, 0x31, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, // ar_11 = 0;. + 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x31, 0x20, 0x3d, 0x20, 0x73, 0x5f, 0x74, // tmpvar_11 = s_t + 0x65, 0x78, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x73, 0x6d, // ex.sample(_mtlsm + 0x70, 0x5f, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x2c, 0x20, 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, // p_s_tex, (float2 + 0x29, 0x28, 0x28, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x70, 0x61, 0x69, // )(((_mtl_u.u_pai + 0x6e, 0x74, 0x4d, 0x61, 0x74, 0x20, 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, // ntMat * tmpvar_1 + 0x30, 0x29, 0x2e, 0x78, 0x79, 0x20, 0x2f, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, // 0).xy / _mtl_u.u + 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x61, 0x64, 0x69, 0x75, 0x73, 0x2e, 0x78, 0x79, // _extentRadius.xy + 0x29, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // )));. color + 0x5f, 0x39, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x31, 0x3b, 0x0a, // _9 = tmpvar_11;. + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, // if ((_mtl_ + 0x75, 0x2e, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x7a, 0x20, 0x3d, 0x3d, 0x20, // u.u_params.z == + 0x31, 0x2e, 0x30, 0x29, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, // 1.0)) {. + 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x32, // float4 tmpvar_12 + 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x6d, // = 0;. tm + 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x32, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x28, 0x74, // pvar_12.xyz = (t + 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x31, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x2a, 0x20, 0x74, // mpvar_11.xyz * t + 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x31, 0x2e, 0x77, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, // mpvar_11.w);. + 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x32, 0x2e, 0x77, // tmpvar_12.w + 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x31, 0x2e, 0x77, 0x3b, 0x0a, // = tmpvar_11.w;. + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x39, 0x20, // color_9 + 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x20, // = tmpvar_12;. + 0x20, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, // };. if ( + 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, // (_mtl_u.u_params + 0x2e, 0x7a, 0x20, 0x3d, 0x3d, 0x20, 0x32, 0x2e, 0x30, 0x29, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, // .z == 2.0)) {. + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x39, 0x20, 0x3d, 0x20, // color_9 = + 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x39, 0x2e, 0x78, 0x78, 0x78, 0x78, 0x3b, 0x0a, 0x20, 0x20, // color_9.xxxx;. + 0x20, 0x20, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6c, // };. col + 0x6f, 0x72, 0x5f, 0x39, 0x20, 0x3d, 0x20, 0x28, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x39, 0x20, // or_9 = (color_9 + 0x2a, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x69, 0x6e, 0x6e, 0x65, 0x72, // * _mtl_u.u_inner + 0x43, 0x6f, 0x6c, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, // Col);. colo + 0x72, 0x5f, 0x39, 0x20, 0x3d, 0x20, 0x28, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x39, 0x20, 0x2a, // r_9 = (color_9 * + 0x20, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x35, 0x20, 0x2a, 0x20, 0x74, 0x6d, 0x70, // (tmpvar_5 * tmp + 0x76, 0x61, 0x72, 0x5f, 0x32, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, // var_2));. r 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, // esult_1 = color_ - 0x31, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, // 10;. } else { - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x5f, 0x6d, 0x74, 0x6c, // . if ((_mtl - 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x77, 0x20, 0x3d, 0x3d, // _u.u_params.w == - 0x20, 0x32, 0x2e, 0x30, 0x29, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, // 2.0)) {. - 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x68, 0x61, 0x6c, 0x66, // result_1 = half - 0x34, 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x28, 0x31, 0x2e, 0x30, 0x2c, 0x20, 0x31, 0x2e, // 4(float4(1.0, 1. - 0x30, 0x2c, 0x20, 0x31, 0x2e, 0x30, 0x2c, 0x20, 0x31, 0x2e, 0x30, 0x29, 0x29, 0x3b, 0x0a, 0x20, // 0, 1.0, 1.0));. - 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, // } else {. + 0x39, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0x0a, // 9;. } else {. 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, // if ((_mtl_ 0x75, 0x2e, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x77, 0x20, 0x3d, 0x3d, 0x20, // u.u_params.w == - 0x33, 0x2e, 0x30, 0x29, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, // 3.0)) {. - 0x20, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x31, 0x35, // half4 color_15 - 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, // = 0;. - 0x68, 0x61, 0x6c, 0x66, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x36, 0x20, // half4 tmpvar_16 - 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, // = 0;. t - 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x36, 0x20, 0x3d, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x34, // mpvar_16 = half4 - 0x28, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x28, 0x5f, 0x6d, // (s_tex.sample(_m - 0x74, 0x6c, 0x73, 0x6d, 0x70, 0x5f, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x2c, 0x20, 0x28, 0x66, 0x6c, // tlsmp_s_tex, (fl - 0x6f, 0x61, 0x74, 0x32, 0x29, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x74, // oat2)(_mtl_i.v_t - 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x29, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, // excoord0)));. - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x31, 0x35, 0x20, // color_15 - 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x36, 0x3b, 0x0a, 0x20, 0x20, 0x20, // = tmpvar_16;. - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x5f, 0x6d, 0x74, 0x6c, // if ((_mtl - 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x7a, 0x20, 0x3d, 0x3d, // _u.u_params.z == - 0x20, 0x31, 0x2e, 0x30, 0x29, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, // 1.0)) {. - 0x20, 0x20, 0x20, 0x20, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // half4 tmpva - 0x72, 0x5f, 0x31, 0x37, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, // r_17 = 0;. - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x37, 0x2e, // tmpvar_17. - 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x36, // xyz = (tmpvar_16 - 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x36, // .xyz * tmpvar_16 - 0x2e, 0x77, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, // .w);. - 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x37, 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x74, // tmpvar_17.w = t - 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x36, 0x2e, 0x77, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, // mpvar_16.w;. - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x31, 0x35, // color_15 - 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x37, 0x3b, 0x0a, 0x20, 0x20, // = tmpvar_17;. - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, // };. - 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, // if ((_mtl_u - 0x2e, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x7a, 0x20, 0x3d, 0x3d, 0x20, 0x32, // .u_params.z == 2 - 0x2e, 0x30, 0x29, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, // .0)) {. - 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x31, 0x35, 0x20, 0x3d, 0x20, 0x63, 0x6f, // color_15 = co - 0x6c, 0x6f, 0x72, 0x5f, 0x31, 0x35, 0x2e, 0x78, 0x78, 0x78, 0x78, 0x3b, 0x0a, 0x20, 0x20, 0x20, // lor_15.xxxx;. + 0x32, 0x2e, 0x30, 0x29, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, // 2.0)) {. + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, // result_1 = float + 0x34, 0x28, 0x31, 0x2e, 0x30, 0x2c, 0x20, 0x31, 0x2e, 0x30, 0x2c, 0x20, 0x31, 0x2e, 0x30, 0x2c, // 4(1.0, 1.0, 1.0, + 0x20, 0x31, 0x2e, 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, // 1.0);. } e + 0x6c, 0x73, 0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, // lse {. if + 0x20, 0x28, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, // ((_mtl_u.u_para + 0x6d, 0x73, 0x2e, 0x77, 0x20, 0x3d, 0x3d, 0x20, 0x33, 0x2e, 0x30, 0x29, 0x29, 0x20, 0x7b, 0x0a, // ms.w == 3.0)) {. + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, // float4 + 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x31, 0x33, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, // color_13 = 0;. + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, // float4 + 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x34, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, // tmpvar_14 = 0;. + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // tmpvar_ + 0x31, 0x34, 0x20, 0x3d, 0x20, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, // 14 = s_tex.sampl + 0x65, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x73, 0x6d, 0x70, 0x5f, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x2c, // e(_mtlsmp_s_tex, + 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, 0x29, 0x29, 0x3b, 0x0a, // .v_texcoord0));. + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, // color_ + 0x31, 0x33, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x34, 0x3b, 0x0a, // 13 = tmpvar_14;. + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x5f, // if ((_ + 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x7a, // mtl_u.u_params.z + 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x2e, 0x30, 0x29, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, // == 1.0)) {. + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x74, // float4 t + 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x35, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, // mpvar_15 = 0;. + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, // tmpvar + 0x5f, 0x31, 0x35, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, // _15.xyz = (tmpva + 0x72, 0x5f, 0x31, 0x34, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // r_14.xyz * tmpva + 0x72, 0x5f, 0x31, 0x34, 0x2e, 0x77, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, // r_14.w);. + 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x35, 0x2e, 0x77, // tmpvar_15.w + 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x34, 0x2e, 0x77, 0x3b, 0x0a, // = tmpvar_14.w;. + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, // colo + 0x72, 0x5f, 0x31, 0x33, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x35, // r_13 = tmpvar_15 + 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x20, // ;. };. + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x5f, 0x6d, // if ((_m + 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x7a, 0x20, // tl_u.u_params.z + 0x3d, 0x3d, 0x20, 0x32, 0x2e, 0x30, 0x29, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, // == 2.0)) {. + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x31, 0x33, 0x20, // color_13 + 0x3d, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x31, 0x33, 0x2e, 0x78, 0x78, 0x78, 0x78, 0x3b, // = color_13.xxxx; + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x20, 0x20, // . };. + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x31, 0x33, // color_13 + 0x20, 0x3d, 0x20, 0x28, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x31, 0x33, 0x20, 0x2a, 0x20, 0x74, // = (color_13 * t + 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, // mpvar_2);. + 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x28, // result_1 = ( + 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x31, 0x33, 0x20, 0x2a, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, // color_13 * _mtl_ + 0x75, 0x2e, 0x75, 0x5f, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x43, 0x6f, 0x6c, 0x29, 0x3b, 0x0a, 0x20, // u.u_innerCol);. 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, // };. - 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x31, 0x35, 0x20, 0x3d, 0x20, 0x28, // color_15 = ( - 0x28, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x29, 0x28, 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x29, // (half4)((float4) - 0x28, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x31, 0x35, 0x29, 0x20, 0x2a, 0x20, 0x74, 0x6d, 0x70, // (color_15) * tmp - 0x76, 0x61, 0x72, 0x5f, 0x32, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, // var_2));. - 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x28, 0x28, // result_1 = (( - 0x68, 0x61, 0x6c, 0x66, 0x34, 0x29, 0x28, 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x29, 0x28, // half4)((float4)( - 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x31, 0x35, 0x29, 0x20, 0x2a, 0x20, 0x5f, 0x6d, 0x74, 0x6c, // color_15) * _mtl - 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x43, 0x6f, 0x6c, 0x29, 0x29, 0x3b, // _u.u_innerCol)); - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, // . };. - 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x3b, // };. };. }; - 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, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, // gColor = result_ - 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, 0x6c, // 1;. return _mtl - 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // _o;.}... + 0x7d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x20, // };. };. };. + 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, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x31, 0x3b, // olor = result_1; + 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_nanovg_fill_pssl; +extern const uint32_t fs_nanovg_fill_pssl_size; diff --git a/3rdparty/bgfx/examples/common/nanovg/makefile b/3rdparty/bgfx/examples/common/nanovg/makefile index 38f4d0d..928467d 100644 --- a/3rdparty/bgfx/examples/common/nanovg/makefile +++ b/3rdparty/bgfx/examples/common/nanovg/makefile @@ -1,6 +1,6 @@ # -# Copyright 2011-2016 Branimir Karadzic. All rights reserved. -# License: http://www.opensource.org/licenses/BSD-2-Clause +# Copyright 2011-2017 Branimir Karadzic. All rights reserved. +# License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause # include ../../../scripts/shader-embeded.mk diff --git a/3rdparty/bgfx/examples/common/nanovg/nanovg.cpp b/3rdparty/bgfx/examples/common/nanovg/nanovg.cpp index ae696b3..36a87ff 100644 --- a/3rdparty/bgfx/examples/common/nanovg/nanovg.cpp +++ b/3rdparty/bgfx/examples/common/nanovg/nanovg.cpp @@ -257,10 +257,14 @@ static void nvg__setDevicePixelRatio(NVGcontext* ctx, float ratio) static NVGcompositeOperationState nvg__compositeOperationState(int op) { - int sfactor = NVG_ONE; - int dfactor = NVG_ONE_MINUS_SRC_ALPHA; + int sfactor, dfactor; - if (op == NVG_SOURCE_IN) + if (op == NVG_SOURCE_OVER) + { + sfactor = NVG_ONE; + dfactor = NVG_ONE_MINUS_SRC_ALPHA; + } + else if (op == NVG_SOURCE_IN) { sfactor = NVG_DST_ALPHA; dfactor = NVG_ZERO; @@ -310,6 +314,11 @@ static NVGcompositeOperationState nvg__compositeOperationState(int op) sfactor = NVG_ONE_MINUS_DST_ALPHA; dfactor = NVG_ONE_MINUS_SRC_ALPHA; } + else + { + sfactor = NVG_ONE; + dfactor = NVG_ZERO; + } NVGcompositeOperationState state; state.srcRGB = sfactor; @@ -431,8 +440,7 @@ void nvgCancelFrame(NVGcontext* ctx) void nvgEndFrame(NVGcontext* ctx) { - NVGstate* state = nvg__getState(ctx); - ctx->params.renderFlush(ctx->params.userPtr, state->compositeOperation); + ctx->params.renderFlush(ctx->params.userPtr); if (ctx->fontImageIdx != 0) { int fontImage = ctx->fontImages[ctx->fontImageIdx]; int i, j, iw, ih; @@ -508,7 +516,7 @@ NVGcolor nvgLerpRGBA(NVGcolor c0, NVGcolor c1, float u) { int i; float oneminu; - NVGcolor cint; + NVGcolor cint = {{{0}}}; u = nvg__clampf(u, 0.0f, 1.0f); oneminu = 1.0f - u; @@ -2166,22 +2174,31 @@ void nvgRect(NVGcontext* ctx, float x, float y, float w, float h) void nvgRoundedRect(NVGcontext* ctx, float x, float y, float w, float h, float r) { - if (r < 0.1f) { - nvgRect(ctx, x,y,w,h); + nvgRoundedRectVarying(ctx, x, y, w, h, r, r, r, r); +} + +void nvgRoundedRectVarying(NVGcontext* ctx, float x, float y, float w, float h, float radTopLeft, float radTopRight, float radBottomRight, float radBottomLeft) +{ + if(radTopLeft < 0.1f && radTopRight < 0.1f && radBottomRight < 0.1f && radBottomLeft < 0.1f) { + nvgRect(ctx, x, y, w, h); return; - } - else { - float rx = nvg__minf(r, nvg__absf(w)*0.5f) * nvg__signf(w), ry = nvg__minf(r, nvg__absf(h)*0.5f) * nvg__signf(h); + } else { + float halfw = nvg__absf(w)*0.5f; + float halfh = nvg__absf(h)*0.5f; + float rxBL = nvg__minf(radBottomLeft, halfw) * nvg__signf(w), ryBL = nvg__minf(radBottomLeft, halfh) * nvg__signf(h); + float rxBR = nvg__minf(radBottomRight, halfw) * nvg__signf(w), ryBR = nvg__minf(radBottomRight, halfh) * nvg__signf(h); + float rxTR = nvg__minf(radTopRight, halfw) * nvg__signf(w), ryTR = nvg__minf(radTopRight, halfh) * nvg__signf(h); + float rxTL = nvg__minf(radTopLeft, halfw) * nvg__signf(w), ryTL = nvg__minf(radTopLeft, halfh) * nvg__signf(h); float vals[] = { - NVG_MOVETO, x, y+ry, - NVG_LINETO, x, y+h-ry, - NVG_BEZIERTO, x, y+h-ry*(1-NVG_KAPPA90), x+rx*(1-NVG_KAPPA90), y+h, x+rx, y+h, - NVG_LINETO, x+w-rx, y+h, - NVG_BEZIERTO, x+w-rx*(1-NVG_KAPPA90), y+h, x+w, y+h-ry*(1-NVG_KAPPA90), x+w, y+h-ry, - NVG_LINETO, x+w, y+ry, - NVG_BEZIERTO, x+w, y+ry*(1-NVG_KAPPA90), x+w-rx*(1-NVG_KAPPA90), y, x+w-rx, y, - NVG_LINETO, x+rx, y, - NVG_BEZIERTO, x+rx*(1-NVG_KAPPA90), y, x, y+ry*(1-NVG_KAPPA90), x, y+ry, + NVG_MOVETO, x, y + ryTL, + NVG_LINETO, x, y + h - ryBL, + NVG_BEZIERTO, x, y + h - ryBL*(1 - NVG_KAPPA90), x + rxBL*(1 - NVG_KAPPA90), y + h, x + rxBL, y + h, + NVG_LINETO, x + w - rxBR, y + h, + NVG_BEZIERTO, x + w - rxBR*(1 - NVG_KAPPA90), y + h, x + w, y + h - ryBR*(1 - NVG_KAPPA90), x + w, y + h - ryBR, + NVG_LINETO, x + w, y + ryTR, + NVG_BEZIERTO, x + w, y + ryTR*(1 - NVG_KAPPA90), x + w - rxTR*(1 - NVG_KAPPA90), y, x + w - rxTR, y, + NVG_LINETO, x + rxTL, y, + NVG_BEZIERTO, x + rxTL*(1 - NVG_KAPPA90), y, x, y + ryTL*(1 - NVG_KAPPA90), x, y + ryTL, NVG_CLOSE }; nvg__appendCommands(ctx, vals, NVG_COUNTOF(vals)); @@ -2245,7 +2262,7 @@ void nvgFill(NVGcontext* ctx) fillPaint.innerColor.a *= state->alpha; fillPaint.outerColor.a *= state->alpha; - ctx->params.renderFill(ctx->params.userPtr, &fillPaint, &state->scissor, ctx->fringeWidth, + ctx->params.renderFill(ctx->params.userPtr, &fillPaint, state->compositeOperation, &state->scissor, ctx->fringeWidth, ctx->cache->bounds, ctx->cache->paths, ctx->cache->npaths); // Count triangles @@ -2286,7 +2303,7 @@ void nvgStroke(NVGcontext* ctx) else nvg__expandStroke(ctx, strokeWidth*0.5f, state->lineCap, state->lineJoin, state->miterLimit); - ctx->params.renderStroke(ctx->params.userPtr, &strokePaint, &state->scissor, ctx->fringeWidth, + ctx->params.renderStroke(ctx->params.userPtr, &strokePaint, state->compositeOperation, &state->scissor, ctx->fringeWidth, strokeWidth, ctx->cache->paths, ctx->cache->npaths); // Count triangles @@ -2434,7 +2451,7 @@ static void nvg__renderText(NVGcontext* ctx, NVGvertex* verts, int nverts) paint.innerColor.a *= state->alpha; paint.outerColor.a *= state->alpha; - ctx->params.renderTriangles(ctx->params.userPtr, &paint, &state->scissor, verts, nverts); + ctx->params.renderTriangles(ctx->params.userPtr, &paint, state->compositeOperation, &state->scissor, verts, nverts); ctx->drawCallCount++; ctx->textTriCount += nverts/3; @@ -2587,6 +2604,7 @@ enum NVGcodepointType { NVG_SPACE, NVG_NEWLINE, NVG_CHAR, + NVG_CJK_CHAR, }; int nvgTextBreakLines(NVGcontext* ctx, const char* string, const char* end, float breakRowWidth, NVGtextRow* rows, int maxRows) @@ -2654,7 +2672,15 @@ int nvgTextBreakLines(NVGcontext* ctx, const char* string, const char* end, floa type = NVG_NEWLINE; break; default: - type = NVG_CHAR; + if ((iter.codepoint >= 0x4E00 && iter.codepoint <= 0x9FFF) || + (iter.codepoint >= 0x3000 && iter.codepoint <= 0x30FF) || + (iter.codepoint >= 0xFF00 && iter.codepoint <= 0xFFEF) || + (iter.codepoint >= 0x1100 && iter.codepoint <= 0x11FF) || + (iter.codepoint >= 0x3130 && iter.codepoint <= 0x318F) || + (iter.codepoint >= 0xAC00 && iter.codepoint <= 0xD7AF)) + type = NVG_CJK_CHAR; + else + type = NVG_CHAR; break; } @@ -2681,7 +2707,7 @@ int nvgTextBreakLines(NVGcontext* ctx, const char* string, const char* end, floa } else { if (rowStart == NULL) { // Skip white space until the beginning of the line - if (type == NVG_CHAR) { + if (type == NVG_CHAR || type == NVG_CJK_CHAR) { // The current char is the row so far rowStartX = iter.x; rowStart = iter.str; @@ -2701,26 +2727,26 @@ int nvgTextBreakLines(NVGcontext* ctx, const char* string, const char* end, floa float nextWidth = iter.nextx - rowStartX; // track last non-white space character - if (type == NVG_CHAR) { + if (type == NVG_CHAR || type == NVG_CJK_CHAR) { rowEnd = iter.next; rowWidth = iter.nextx - rowStartX; rowMaxX = q.x1 - rowStartX; } // track last end of a word - if (ptype == NVG_CHAR && type == NVG_SPACE) { + if (((ptype == NVG_CHAR || ptype == NVG_CJK_CHAR) && type == NVG_SPACE) || type == NVG_CJK_CHAR) { breakEnd = iter.str; breakWidth = rowWidth; breakMaxX = rowMaxX; } // track last beginning of a word - if (ptype == NVG_SPACE && type == NVG_CHAR) { + if ((ptype == NVG_SPACE && (type == NVG_CHAR || type == NVG_CJK_CHAR)) || type == NVG_CJK_CHAR) { wordStart = iter.str; wordStartX = iter.x; wordMinX = q.x0 - rowStartX; } // Break to new line when a character is beyond break width. - if (type == NVG_CHAR && nextWidth > breakRowWidth) { + if ((type == NVG_CHAR || type == NVG_CJK_CHAR) && nextWidth > breakRowWidth) { // The run length is too long, need to break to new line. if (breakEnd == rowStart) { // The current word is longer than the row length, just break it from here. diff --git a/3rdparty/bgfx/examples/common/nanovg/nanovg.h b/3rdparty/bgfx/examples/common/nanovg/nanovg.h index 31109ef..7881043 100644 --- a/3rdparty/bgfx/examples/common/nanovg/nanovg.h +++ b/3rdparty/bgfx/examples/common/nanovg/nanovg.h @@ -143,6 +143,7 @@ enum NVGimageFlags { NVG_IMAGE_REPEATY = 1<<2, // Repeat image in Y direction. NVG_IMAGE_FLIPY = 1<<3, // Flips (inverses) image in Y direction when rendered. NVG_IMAGE_PREMULTIPLIED = 1<<4, // Image data has premultiplied alpha. + NVG_IMAGE_NEAREST = 1<<5, // Image interpolation is Nearest instead Linear }; // Begin drawing a new frame @@ -267,7 +268,7 @@ void nvgLineCap(NVGcontext* ctx, int cap); void nvgLineJoin(NVGcontext* ctx, int join); // Sets the transparency applied to all rendered shapes. -// Alreade transparent paths will get proportionally more transparent as well. +// Already transparent paths will get proportionally more transparent as well. void nvgGlobalAlpha(NVGcontext* ctx, float alpha); // @@ -399,7 +400,7 @@ NVGpaint nvgLinearGradient(NVGcontext* ctx, float sx, float sy, float ex, float NVGcolor icol, NVGcolor ocol); // Creates and returns a box gradient. Box gradient is a feathered rounded rectangle, it is useful for rendering -// drop shadows or hilights for boxes. Parameters (x,y) define the top-left corner of the rectangle, +// drop shadows or highlights for boxes. Parameters (x,y) define the top-left corner of the rectangle, // (w,h) define the size of the rectangle, r defines the corner radius, and f feather. Feather defines how blurry // the border of the rectangle is. Parameter icol specifies the inner color and ocol the outer color of the gradient. // The gradient is transformed by the current transform when it is passed to nvgFillPaint() or nvgStrokePaint(). @@ -491,6 +492,9 @@ void nvgRect(NVGcontext* ctx, float x, float y, float w, float h); // Creates new rounded rectangle shaped sub-path. void nvgRoundedRect(NVGcontext* ctx, float x, float y, float w, float h, float r); +// Creates new rounded rectangle shaped sub-path with varying radii for each corner. +void nvgRoundedRectVarying(NVGcontext* ctx, float x, float y, float w, float h, float radTopLeft, float radTopRight, float radBottomRight, float radBottomLeft); + // Creates new ellipse shaped sub-path. void nvgEllipse(NVGcontext* ctx, float cx, float cy, float rx, float ry); @@ -650,10 +654,10 @@ struct NVGparams { int (*renderGetTextureSize)(void* uptr, int image, int* w, int* h); void (*renderViewport)(void* uptr, int width, int height, float devicePixelRatio); void (*renderCancel)(void* uptr); - void (*renderFlush)(void* uptr, NVGcompositeOperationState compositeOperation); - void (*renderFill)(void* uptr, NVGpaint* paint, NVGscissor* scissor, float fringe, const float* bounds, const NVGpath* paths, int npaths); - void (*renderStroke)(void* uptr, NVGpaint* paint, NVGscissor* scissor, float fringe, float strokeWidth, const NVGpath* paths, int npaths); - void (*renderTriangles)(void* uptr, NVGpaint* paint, NVGscissor* scissor, const NVGvertex* verts, int nverts); + void (*renderFlush)(void* uptr); + void (*renderFill)(void* uptr, NVGpaint* paint, NVGcompositeOperationState compositeOperation, NVGscissor* scissor, float fringe, const float* bounds, const NVGpath* paths, int npaths); + void (*renderStroke)(void* uptr, NVGpaint* paint, NVGcompositeOperationState compositeOperation, NVGscissor* scissor, float fringe, float strokeWidth, const NVGpath* paths, int npaths); + void (*renderTriangles)(void* uptr, NVGpaint* paint, NVGcompositeOperationState compositeOperation, NVGscissor* scissor, const NVGvertex* verts, int nverts); void (*renderDelete)(void* uptr); }; typedef struct NVGparams NVGparams; diff --git a/3rdparty/bgfx/examples/common/nanovg/nanovg_bgfx.cpp b/3rdparty/bgfx/examples/common/nanovg/nanovg_bgfx.cpp index f64baa5..78d854b 100644 --- a/3rdparty/bgfx/examples/common/nanovg/nanovg_bgfx.cpp +++ b/3rdparty/bgfx/examples/common/nanovg/nanovg_bgfx.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -27,6 +27,7 @@ #include "nanovg.h" #include +#include #include #include @@ -35,11 +36,19 @@ BX_PRAGMA_DIAGNOSTIC_IGNORED_MSVC(4244); // warning C4244: '=' : conversion from '' to '', possible loss of data -namespace -{ #include "vs_nanovg_fill.bin.h" #include "fs_nanovg_fill.bin.h" +static const bgfx::EmbeddedShader s_embeddedShaders[] = +{ + BGFX_EMBEDDED_SHADER(vs_nanovg_fill), + BGFX_EMBEDDED_SHADER(fs_nanovg_fill), + + BGFX_EMBEDDED_SHADER_END() +}; + +namespace +{ static bgfx::VertexDecl s_nvgDecl; enum GLNVGshaderType @@ -63,6 +72,14 @@ namespace int flags; }; + struct GLNVGblend + { + uint64_t srcRGB; + uint64_t dstRGB; + uint64_t srcAlpha; + uint64_t dstAlpha; + }; + enum GLNVGcallType { GLNVG_FILL, @@ -80,6 +97,7 @@ namespace int vertexOffset; int vertexCount; int uniformOffset; + GLNVGblend blendFunc; }; struct GLNVGpath @@ -181,7 +199,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); - memset(&gl->textures[old], 0xff, (gl->ctextures-old)*sizeof(struct GLNVGtexture) ); + bx::memSet(&gl->textures[old], 0xff, (gl->ctextures-old)*sizeof(struct GLNVGtexture) ); if (gl->textures == NULL) { @@ -191,7 +209,7 @@ namespace tex = &gl->textures[gl->ntextures++]; } - memset(tex, 0, sizeof(*tex) ); + bx::memSet(tex, 0, sizeof(*tex) ); return tex; } @@ -221,7 +239,7 @@ namespace { bgfx::destroyTexture(gl->textures[ii].id); } - memset(&gl->textures[ii], 0, sizeof(gl->textures[ii]) ); + bx::memSet(&gl->textures[ii], 0, sizeof(gl->textures[ii]) ); gl->textures[ii].id.idx = bgfx::invalidHandle; return 1; } @@ -234,42 +252,16 @@ namespace { struct GLNVGcontext* gl = (struct GLNVGcontext*)_userPtr; - const bgfx::Memory* vs_nanovg_fill; - const bgfx::Memory* fs_nanovg_fill; - - switch (bgfx::getRendererType() ) - { - case bgfx::RendererType::Direct3D9: - vs_nanovg_fill = bgfx::makeRef(vs_nanovg_fill_dx9, sizeof(vs_nanovg_fill_dx9) ); - fs_nanovg_fill = bgfx::makeRef(fs_nanovg_fill_dx9, sizeof(fs_nanovg_fill_dx9) ); - break; - - case bgfx::RendererType::Direct3D11: - case bgfx::RendererType::Direct3D12: - vs_nanovg_fill = bgfx::makeRef(vs_nanovg_fill_dx11, sizeof(vs_nanovg_fill_dx11) ); - fs_nanovg_fill = bgfx::makeRef(fs_nanovg_fill_dx11, sizeof(fs_nanovg_fill_dx11) ); - break; - - case bgfx::RendererType::Metal: - vs_nanovg_fill = bgfx::makeRef(vs_nanovg_fill_mtl, sizeof(vs_nanovg_fill_mtl) ); - fs_nanovg_fill = bgfx::makeRef(fs_nanovg_fill_mtl, sizeof(fs_nanovg_fill_mtl) ); - break; - - default: - vs_nanovg_fill = bgfx::makeRef(vs_nanovg_fill_glsl, sizeof(vs_nanovg_fill_glsl) ); - fs_nanovg_fill = bgfx::makeRef(fs_nanovg_fill_glsl, sizeof(fs_nanovg_fill_glsl) ); - break; - } - + bgfx::RendererType::Enum type = bgfx::getRendererType(); gl->prog = bgfx::createProgram( - bgfx::createShader(vs_nanovg_fill) - , bgfx::createShader(fs_nanovg_fill) + bgfx::createEmbeddedShader(s_embeddedShaders, type, "vs_nanovg_fill") + , bgfx::createEmbeddedShader(s_embeddedShaders, type, "fs_nanovg_fill") , true ); const bgfx::Memory* mem = bgfx::alloc(4*4*4); uint32_t* bgra8 = (uint32_t*)mem->data; - memset(bgra8, 0, 4*4*4); + bx::memSet(bgra8, 0, 4*4*4); gl->texMissing = bgfx::createTexture2D(4, 4, false, 1, bgfx::TextureFormat::BGRA8, 0, mem); gl->u_scissorMat = bgfx::createUniform("u_scissorMat", bgfx::UniformType::Mat3); @@ -371,6 +363,9 @@ namespace uint32_t bytesPerPixel = NVG_TEXTURE_RGBA == tex->type ? 4 : 1; uint32_t pitch = tex->width * bytesPerPixel; + const bgfx::Memory* mem = bgfx::alloc(w * h * bytesPerPixel); + bx::gather(mem->data, data + y * pitch + x * bytesPerPixel, w * bytesPerPixel, h, pitch); + bgfx::updateTexture2D( tex->id , 0 @@ -379,8 +374,8 @@ namespace , y , w , h - , bgfx::copy(data + y*pitch + x*bytesPerPixel, h*pitch) - , pitch + , mem + , UINT16_MAX ); return 1; @@ -432,14 +427,14 @@ namespace struct GLNVGtexture* tex = NULL; float invxform[6] = {}; - memset(frag, 0, sizeof(*frag) ); + bx::memSet(frag, 0, sizeof(*frag) ); frag->innerCol = glnvg__premulColor(paint->innerColor); frag->outerCol = glnvg__premulColor(paint->outerColor); if (scissor->extent[0] < -0.5f || scissor->extent[1] < -0.5f) { - memset(frag->scissorMat, 0, sizeof(frag->scissorMat) ); + bx::memSet(frag->scissorMat, 0, sizeof(frag->scissorMat) ); frag->scissorExt[0] = 1.0f; frag->scissorExt[1] = 1.0f; frag->scissorScale[0] = 1.0f; @@ -454,7 +449,7 @@ namespace frag->scissorScale[0] = sqrtf(scissor->xform[0]*scissor->xform[0] + scissor->xform[2]*scissor->xform[2]) / fringe; frag->scissorScale[1] = sqrtf(scissor->xform[1]*scissor->xform[1] + scissor->xform[3]*scissor->xform[3]) / fringe; } - memcpy(frag->extent, paint->extent, sizeof(frag->extent) ); + bx::memCopy(frag->extent, paint->extent, sizeof(frag->extent) ); frag->strokeMult = (width*0.5f + fringe*0.5f) / fringe; gl->th = gl->texMissing; @@ -722,16 +717,24 @@ namespace return s_blend[idx]; } - static uint64_t glnvg__blendCompositeOperation(NVGcompositeOperationState op) + static GLNVGblend glnvg__blendCompositeOperation(NVGcompositeOperationState op) { - return BGFX_STATE_BLEND_FUNC_SEPARATE( - glnvg_convertBlendFuncFactor(op.srcRGB), - glnvg_convertBlendFuncFactor(op.dstRGB), - glnvg_convertBlendFuncFactor(op.srcAlpha), - glnvg_convertBlendFuncFactor(op.dstAlpha)); + GLNVGblend blend; + blend.srcRGB = glnvg_convertBlendFuncFactor(op.srcRGB); + blend.dstRGB = glnvg_convertBlendFuncFactor(op.dstRGB); + blend.srcAlpha = glnvg_convertBlendFuncFactor(op.srcAlpha); + blend.dstAlpha = glnvg_convertBlendFuncFactor(op.dstAlpha); + if (blend.srcRGB == BGFX_STATE_NONE || blend.dstRGB == BGFX_STATE_NONE || blend.srcAlpha == BGFX_STATE_NONE || blend.dstAlpha == BGFX_STATE_NONE) + { + blend.srcRGB = BGFX_STATE_BLEND_ONE; + blend.dstRGB = BGFX_STATE_BLEND_INV_SRC_ALPHA; + blend.srcAlpha = BGFX_STATE_BLEND_ONE; + blend.dstAlpha = BGFX_STATE_BLEND_INV_SRC_ALPHA; + } + return blend; } - static void nvgRenderFlush(void* _userPtr, NVGcompositeOperationState compositeOperation) + static void nvgRenderFlush(void* _userPtr) { struct GLNVGcontext* gl = (struct GLNVGcontext*)_userPtr; @@ -747,18 +750,18 @@ namespace BX_WARN(true, "Vertex number truncated due to transient vertex buffer overflow"); } - memcpy(gl->tvb.data, gl->verts, gl->nverts * sizeof(struct NVGvertex) ); - - gl->state = glnvg__blendCompositeOperation(compositeOperation) - | BGFX_STATE_RGB_WRITE - | BGFX_STATE_ALPHA_WRITE - ; + bx::memCopy(gl->tvb.data, gl->verts, gl->nverts * sizeof(struct NVGvertex) ); bgfx::setUniform(gl->u_viewSize, gl->view); for (uint32_t ii = 0, num = gl->ncalls; ii < num; ++ii) { struct GLNVGcall* call = &gl->calls[ii]; + const GLNVGblend* blend = &call->blendFunc; + gl->state = BGFX_STATE_BLEND_FUNC_SEPARATE(blend->srcRGB, blend->dstRGB, blend->srcAlpha, blend->dstAlpha) + | BGFX_STATE_RGB_WRITE + | BGFX_STATE_ALPHA_WRITE + ; switch (call->type) { case GLNVG_FILL: @@ -809,7 +812,7 @@ namespace gl->calls = (struct GLNVGcall*)BX_REALLOC(gl->m_allocator, gl->calls, sizeof(struct GLNVGcall) * gl->ccalls); } ret = &gl->calls[gl->ncalls++]; - memset(ret, 0, sizeof(struct GLNVGcall) ); + bx::memSet(ret, 0, sizeof(struct GLNVGcall) ); return ret; } @@ -867,8 +870,8 @@ namespace vtx->v = v; } - static void nvgRenderFill(void* _userPtr, struct NVGpaint* paint, struct NVGscissor* scissor, float fringe, - const float* bounds, const struct 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; @@ -881,6 +884,7 @@ namespace call->pathOffset = glnvg__allocPaths(gl, npaths); call->pathCount = npaths; call->image = paint->image; + call->blendFunc = glnvg__blendCompositeOperation(compositeOperation); if (npaths == 1 && paths[0].convex) { @@ -895,12 +899,12 @@ namespace { struct GLNVGpath* copy = &gl->paths[call->pathOffset + i]; const struct NVGpath* path = &paths[i]; - memset(copy, 0, sizeof(struct GLNVGpath) ); + bx::memSet(copy, 0, sizeof(struct GLNVGpath) ); if (path->nfill > 0) { copy->fillOffset = offset; copy->fillCount = path->nfill; - memcpy(&gl->verts[offset], path->fill, sizeof(struct NVGvertex) * path->nfill); + bx::memCopy(&gl->verts[offset], path->fill, sizeof(struct NVGvertex) * path->nfill); offset += path->nfill; } @@ -908,7 +912,7 @@ namespace { copy->strokeOffset = offset; copy->strokeCount = path->nstroke; - memcpy(&gl->verts[offset], path->stroke, sizeof(struct NVGvertex) * path->nstroke); + bx::memCopy(&gl->verts[offset], path->stroke, sizeof(struct NVGvertex) * path->nstroke); offset += path->nstroke; } } @@ -931,7 +935,7 @@ namespace call->uniformOffset = glnvg__allocFragUniforms(gl, 2); // Simple shader for stencil frag = nvg__fragUniformPtr(gl, call->uniformOffset); - memset(frag, 0, sizeof(*frag) ); + bx::memSet(frag, 0, sizeof(*frag) ); frag->type = NSVG_SHADER_SIMPLE; // Fill shader glnvg__convertPaint(gl, nvg__fragUniformPtr(gl, call->uniformOffset + gl->fragSize), paint, scissor, fringe, fringe); @@ -944,7 +948,7 @@ namespace } } - static void nvgRenderStroke(void* _userPtr, struct NVGpaint* paint, struct NVGscissor* scissor, float fringe, + 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; @@ -956,6 +960,7 @@ namespace call->pathOffset = glnvg__allocPaths(gl, npaths); call->pathCount = npaths; call->image = paint->image; + call->blendFunc = glnvg__blendCompositeOperation(compositeOperation); // Allocate vertices for all the paths. maxverts = glnvg__maxVertCount(paths, npaths); @@ -965,12 +970,12 @@ namespace { struct GLNVGpath* copy = &gl->paths[call->pathOffset + i]; const struct NVGpath* path = &paths[i]; - memset(copy, 0, sizeof(struct GLNVGpath) ); + bx::memSet(copy, 0, sizeof(struct GLNVGpath) ); if (path->nstroke) { copy->strokeOffset = offset; copy->strokeCount = path->nstroke; - memcpy(&gl->verts[offset], path->stroke, sizeof(struct NVGvertex) * path->nstroke); + bx::memCopy(&gl->verts[offset], path->stroke, sizeof(struct NVGvertex) * path->nstroke); offset += path->nstroke; } } @@ -980,7 +985,7 @@ namespace glnvg__convertPaint(gl, nvg__fragUniformPtr(gl, call->uniformOffset), paint, scissor, strokeWidth, fringe); } - static void nvgRenderTriangles(void* _userPtr, struct NVGpaint* paint, struct NVGscissor* scissor, + static void nvgRenderTriangles(void* _userPtr, struct NVGpaint* paint, NVGcompositeOperationState compositeOperation, struct NVGscissor* scissor, const struct NVGvertex* verts, int nverts) { struct GLNVGcontext* gl = (struct GLNVGcontext*)_userPtr; @@ -989,11 +994,12 @@ namespace call->type = GLNVG_TRIANGLES; call->image = paint->image; + call->blendFunc = glnvg__blendCompositeOperation(compositeOperation); // Allocate vertices for all the paths. call->vertexOffset = glnvg__allocVerts(gl, nverts); call->vertexCount = nverts; - memcpy(&gl->verts[call->vertexOffset], verts, sizeof(struct NVGvertex) * nverts); + bx::memCopy(&gl->verts[call->vertexOffset], verts, sizeof(struct NVGvertex) * nverts); // Fill shader call->uniformOffset = glnvg__allocFragUniforms(gl, 1); @@ -1065,9 +1071,9 @@ NVGcontext* nvgCreate(int edgeaa, unsigned char _viewId, bx::AllocatorI* _alloca struct NVGcontext* ctx = NULL; struct GLNVGcontext* gl = (struct GLNVGcontext*)BX_ALLOC(_allocator, sizeof(struct GLNVGcontext) ); if (gl == NULL) goto error; - memset(gl, 0, sizeof(struct GLNVGcontext) ); + bx::memSet(gl, 0, sizeof(struct GLNVGcontext) ); - memset(¶ms, 0, sizeof(params) ); + bx::memSet(¶ms, 0, sizeof(params) ); params.renderCreate = nvgRenderCreate; params.renderCreateTexture = nvgRenderCreateTexture; params.renderDeleteTexture = nvgRenderDeleteTexture; @@ -1131,13 +1137,24 @@ bgfx::TextureHandle nvglImageHandle(NVGcontext* ctx, int image) return tex->id; } -NVGLUframebuffer* nvgluCreateFramebuffer(NVGcontext* ctx, int width, - int height, int imageFlags) { +NVGLUframebuffer* nvgluCreateFramebuffer(NVGcontext* ctx, int width, int height, int imageFlags, uint8_t viewId) +{ + 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* 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)) { + if (!bgfx::isValid(texture)) + { nvgluDeleteFramebuffer(framebuffer); return NULL; } @@ -1147,17 +1164,15 @@ NVGLUframebuffer* nvgluCreateFramebuffer(NVGcontext* ctx, int width, nvgluDeleteFramebuffer(framebuffer); return NULL; } - static uint8_t s_ViewId = 1; // may have a better way to assign new view id - framebuffer->viewId = s_ViewId++; - bgfx::setViewFrameBuffer(framebuffer->viewId, framebuffer->handle); - bgfx::setViewSeq(framebuffer->viewId, true); return framebuffer; } -void nvgluBindFramebuffer(NVGLUframebuffer* framebuffer) { +void nvgluBindFramebuffer(NVGLUframebuffer* framebuffer) +{ static NVGcontext* s_prevCtx = NULL; static uint8_t s_prevViewId; - if (framebuffer != NULL) { + if (framebuffer != NULL) + { s_prevCtx = framebuffer->ctx; s_prevViewId = nvgViewId(framebuffer->ctx); nvgViewId(framebuffer->ctx, framebuffer->viewId); @@ -1166,12 +1181,24 @@ void nvgluBindFramebuffer(NVGLUframebuffer* framebuffer) { } } -void nvgluDeleteFramebuffer(NVGLUframebuffer* framebuffer) { +void nvgluDeleteFramebuffer(NVGLUframebuffer* framebuffer) +{ if (framebuffer == NULL) return; if (bgfx::isValid(framebuffer->handle)) + { bgfx::destroyFrameBuffer(framebuffer->handle); + } if (framebuffer->image > 0) + { nvgDeleteImage(framebuffer->ctx, framebuffer->image); + } delete framebuffer; } + +void nvgluSetViewFramebuffer(uint8_t viewId, NVGLUframebuffer* framebuffer) +{ + framebuffer->viewId = viewId; + bgfx::setViewFrameBuffer(viewId, framebuffer->handle); + bgfx::setViewSeq(viewId, true); +} diff --git a/3rdparty/bgfx/examples/common/nanovg/nanovg_bgfx.h b/3rdparty/bgfx/examples/common/nanovg/nanovg_bgfx.h index 61b0e3e..36ba0dd 100644 --- a/3rdparty/bgfx/examples/common/nanovg/nanovg_bgfx.h +++ b/3rdparty/bgfx/examples/common/nanovg/nanovg_bgfx.h @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -30,6 +30,7 @@ void nvgViewId(struct NVGcontext* ctx, unsigned char _viewId); // Example: // float scale = 2; // NVGLUframebuffer* fb = nvgluCreateFramebuffer(ctx, 100 * scale, 100 * scale, 0); +// nvgluSetViewFramebuffer(VIEW_ID, fb); // nvgluBindFramebuffer(fb); // nvgBeginFrame(ctx, 100, 100, scale); // // renders anything offscreen @@ -44,8 +45,10 @@ 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); #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 8c283b2..dcd5297 100644 --- a/3rdparty/bgfx/examples/common/nanovg/vs_nanovg_fill.bin.h +++ b/3rdparty/bgfx/examples/common/nanovg/vs_nanovg_fill.bin.h @@ -35,12 +35,229 @@ 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_dx9[432] = +static const uint8_t vs_nanovg_fill_spv[3412] = +{ + 0x56, 0x53, 0x48, 0x04, 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, // .... +}; +static const uint8_t vs_nanovg_fill_dx9[424] = { 0x56, 0x53, 0x48, 0x04, 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, 0x80, 0x01, 0x00, // iewSize......... - 0x03, 0xfe, 0xff, 0xfe, 0xff, 0x2a, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x72, // .....*.CTAB....r + 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.......`.... @@ -50,20 +267,20 @@ static const uint8_t vs_nanovg_fill_dx9[432] = 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 - 0x36, 0x2e, 0x33, 0x2e, 0x39, 0x36, 0x30, 0x30, 0x2e, 0x31, 0x36, 0x33, 0x38, 0x34, 0x00, 0x51, // 6.3.9600.16384.Q - 0x00, 0x00, 0x05, 0x02, 0x00, 0x0f, 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, // .........U...... - 0x00, 0x00, 0xa0, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x55, 0xa0, 0x04, // .............U.. - 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0xe0, 0x00, 0x00, 0xaa, 0x80, 0x00, 0x00, 0x00, 0x81, 0x02, // ................ - 0x00, 0x55, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x0c, 0xe0, 0x02, 0x00, 0x64, 0xa0, 0x01, // .U...........d.. - 0x00, 0x00, 0x02, 0x01, 0x00, 0x03, 0xe0, 0x00, 0x00, 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // ................ + 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, // ........ }; static const uint8_t vs_nanovg_fill_dx11[577] = { @@ -165,3 +382,5 @@ static const uint8_t vs_nanovg_fill_mtl[904] = 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, 0x6c, // 1;. return _mtl 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // _o;.}... }; +extern const uint8_t* vs_nanovg_fill_pssl; +extern const uint32_t vs_nanovg_fill_pssl_size; diff --git a/3rdparty/bgfx/examples/common/packrect.h b/3rdparty/bgfx/examples/common/packrect.h index 86e6e9f..fa6ebeb 100644 --- a/3rdparty/bgfx/examples/common/packrect.h +++ b/3rdparty/bgfx/examples/common/packrect.h @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -38,7 +38,7 @@ public: { m_bw = _width/64; m_bh = _height/numBlocks; - memset(m_mem, 0xff, sizeof(m_mem) ); + bx::memSet(m_mem, 0xff, sizeof(m_mem) ); } bool find(uint16_t _width, uint16_t _height, Pack2D& _pack) diff --git a/3rdparty/bgfx/examples/common/shaderlib.sh b/3rdparty/bgfx/examples/common/shaderlib.sh index 51f9b6a..5871aaf 100644 --- a/3rdparty/bgfx/examples/common/shaderlib.sh +++ b/3rdparty/bgfx/examples/common/shaderlib.sh @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ diff --git a/3rdparty/bgfx/examples/makefile b/3rdparty/bgfx/examples/makefile index 13ce9f3..f39a5d4 100644 --- a/3rdparty/bgfx/examples/makefile +++ b/3rdparty/bgfx/examples/makefile @@ -1,6 +1,6 @@ # -# Copyright 2011-2016 Branimir Karadzic. All rights reserved. -# License: http://www.opensource.org/licenses/BSD-2-Clause +# Copyright 2011-2017 Branimir Karadzic. All rights reserved. +# License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause # rebuild: @@ -31,6 +31,10 @@ rebuild: # @make -s --no-print-directory rebuild -C 26-occlusion @make -s --no-print-directory rebuild -C 27-terrain @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 common/debugdraw @make -s --no-print-directory rebuild -C common/font @make -s --no-print-directory rebuild -C common/imgui @make -s --no-print-directory rebuild -C common/nanovg + @make -s --no-print-directory rebuild -C common/ps diff --git a/3rdparty/bgfx/include/bgfx/bgfx.h b/3rdparty/bgfx/include/bgfx/bgfx.h index 2ba1417..32db928 100644 --- a/3rdparty/bgfx/include/bgfx/bgfx.h +++ b/3rdparty/bgfx/include/bgfx/bgfx.h @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx/blob/master/LICENSE */ @@ -10,7 +10,7 @@ #include // uint32_t #include // NULL -#include +#include /// #define BGFX_HANDLE(_name) \ @@ -562,7 +562,7 @@ namespace bgfx Limits limits; - /// Supported texture formats. + /// Supported texture format capabilities flags: /// - `BGFX_CAPS_FORMAT_TEXTURE_NONE` - Texture format is not supported. /// - `BGFX_CAPS_FORMAT_TEXTURE_2D` - Texture format is supported. /// - `BGFX_CAPS_FORMAT_TEXTURE_2D_SRGB` - Texture as sRGB format is supported. @@ -581,6 +581,8 @@ namespace bgfx /// - `BGFX_CAPS_FORMAT_TEXTURE_FRAMEBUFFER_MSAA` - Texture format can be used as MSAA /// frame buffer. /// - `BGFX_CAPS_FORMAT_TEXTURE_MSAA` - Texture can be sampled as MSAA. + /// - `BGFX_CAPS_FORMAT_TEXTURE_MIP_AUTOGEN` - Texture format supports auto-generated + /// mips. uint16_t formats[TextureFormat::Count]; }; @@ -669,7 +671,7 @@ namespace bgfx /// struct Transform { - float* data; //!< Pointer to first matrix. + float* data; //!< Pointer to first 4x4 matrix. uint16_t num; //!< Number of matrices. }; @@ -690,7 +692,7 @@ namespace bgfx 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 pixelsPerTanAngle[2]; //!< + float pixelsPerTanAngle[2]; //!< Number of pixels that fit in tan(angle) = 1. }; Eye eye[2]; @@ -707,17 +709,26 @@ 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 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. + 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. + 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. }; /// Vertex declaration. @@ -868,7 +879,7 @@ namespace bgfx /// Convert index buffer for use with different primitive topologies. /// /// @param[in] _conversion Conversion type, see `TopologyConvert::Enum`. - /// @param[in] _dst Destination index buffer. If this argument it NULL + /// @param[in] _dst Destination index buffer. If this argument is NULL /// function will return number of indices after conversion. /// @param[in] _dstSize Destination index buffer in bytes. It must be /// large enough to contain output indices. If destination size is @@ -924,40 +935,40 @@ namespace bgfx /// 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. - /// @param[in] _dst Destination image. Must be the same size as input image. - /// _dst might be pointer to the same memory as _src. /// /// @attention C99 equivalent is `bgfx_image_swizzle_bgra8`. /// void imageSwizzleBgra8( - uint32_t _width + void* _dst + , uint32_t _width , uint32_t _height , uint32_t _pitch , const void* _src - , void* _dst ); /// 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. - /// @param[in] _dst Destination image. Must be at least quarter size of - /// input image. _dst might be pointer to the same memory as _src. /// /// @attention C99 equivalent is `bgfx_image_rgba8_downsample_2x2`. /// void imageRgba8Downsample2x2( - uint32_t _width + void* _dst + , uint32_t _width , uint32_t _height , uint32_t _pitch , const void* _src - , void* _dst ); /// Returns supported backend API renderers. @@ -1204,6 +1215,8 @@ namespace bgfx /// Destroy static index buffer. /// + /// @param[in] _handle Static index buffer handle. + /// /// @attention C99 equivalent is `bgfx_destroy_index_buffer`. /// void destroyIndexBuffer(IndexBufferHandle _handle); @@ -1257,6 +1270,7 @@ namespace bgfx /// buffers. /// - `BGFX_BUFFER_INDEX32` - Buffer is using 32-bit indices. This flag has effect only on /// index buffers. + /// @returns Dynamic index buffer handle. /// /// @attention C99 equivalent is `bgfx_create_dynamic_index_buffer`. /// @@ -1280,6 +1294,7 @@ namespace bgfx /// buffers. /// - `BGFX_BUFFER_INDEX32` - Buffer is using 32-bit indices. This flag has effect only on /// index buffers. + /// @returns Dynamic index buffer handle. /// /// @attention C99 equivalent is `bgfx_create_dynamic_index_buffer_mem`. /// @@ -1326,6 +1341,7 @@ namespace bgfx /// buffers. /// - `BGFX_BUFFER_INDEX32` - Buffer is using 32-bit indices. This flag has effect only on /// index buffers. + /// @returns Dynamic vertex buffer handle. /// /// @attention C99 equivalent is `bgfx_create_dynamic_vertex_buffer`. /// @@ -1351,6 +1367,7 @@ namespace bgfx /// buffers. /// - `BGFX_BUFFER_INDEX32` - Buffer is using 32-bit indices. This flag has effect only on /// index buffers. + /// @returns Dynamic vertex buffer handle. /// /// @attention C99 equivalent is `bgfx_create_dynamic_vertex_buffer_mem`. /// @@ -1376,50 +1393,37 @@ namespace bgfx /// Destroy dynamic vertex buffer. /// + /// @param[in] _handle Dynamic vertex buffer handle. + /// /// @attention C99 equivalent is `bgfx_destroy_dynamic_vertex_buffer`. /// void destroyDynamicVertexBuffer(DynamicVertexBufferHandle _handle); - /// Returns true if internal transient index buffer has enough space. + /// Returns number of available indices. /// - /// @param[in] _num Number of indices. + /// @param[in] _num Number of required indices. /// - /// @attention C99 equivalent is `bgfx_check_avail_transient_index_buffer`. + /// @attention C99 equivalent is `bgfx_get_avail_transient_index_buffer`. /// - bool checkAvailTransientIndexBuffer(uint32_t _num); + uint32_t getAvailTransientIndexBuffer(uint32_t _num); - /// Returns true if internal transient vertex buffer has enough space. + /// Returns number of available vertices. /// - /// @param[in] _num Number of vertices. + /// @param[in] _num Number of required vertices. /// @param[in] _decl Vertex declaration. /// /// @attention C99 equivalent is `bgfx_check_avail_transient_vertex_buffer`. /// - bool checkAvailTransientVertexBuffer(uint32_t _num, const VertexDecl& _decl); + uint32_t getAvailTransientVertexBuffer(uint32_t _num, const VertexDecl& _decl); - /// Returns true if internal instance data buffer has enough space. + /// Returns number of available instance buffer slots. /// - /// @param[in] _num Number of instances. + /// @param[in] _num Number of required instances. /// @param[in] _stride Stride per instance. /// /// @attention C99 equivalent is `bgfx_check_avail_instance_data_buffer`. /// - bool checkAvailInstanceDataBuffer(uint32_t _num, uint16_t _stride); - - /// Returns true if both internal transient index and vertex buffer have - /// enough space. - /// - /// @param[in] _numVertices Number of vertices. - /// @param[in] _decl Vertex declaration. - /// @param[in] _numIndices Number of indices. - /// - /// @attention C99 equivalent is `bgfx_check_avail_transient_buffers`. - /// - bool checkAvailTransientBuffers( - uint32_t _numVertices - , const VertexDecl& _decl - , uint32_t _numIndices - ); + uint32_t getAvailInstanceDataBuffer(uint32_t _num, uint16_t _stride); /// Allocate transient index buffer. /// @@ -1484,12 +1488,17 @@ namespace bgfx /// Create draw indirect buffer. /// + /// @param[in] _num Number of indirect calls. + /// @returns Indirect buffer handle. + /// /// @attention C99 equivalent is `bgfx_create_indirect_buffer`. /// IndirectBufferHandle createIndirectBuffer(uint32_t _num); /// Destroy draw indirect buffer. /// + /// @param[in] _handle Indirect buffer handle. + /// /// @attention C99 equivalent is `bgfx_destroy_indirect_buffer`. /// void destroyIndirectBuffer(IndirectBufferHandle _handle); @@ -1562,12 +1571,31 @@ namespace bgfx /// void destroyProgram(ProgramHandle _handle); + /// Validate texture parameters. + /// + /// @param[in] _depth Depth dimension of volume texture. + /// @param[in] _cubeMap Indicates that texture contains cubemap. + /// @param[in] _numLayers Number of layers in texture array. + /// @param[in] _format Texture format. See: `TextureFormat::Enum`. + /// @param[in] _flags Texture flags. See `BGFX_TEXTURE_*`. + /// @returns True if texture can be successfully created. + /// + /// @attention C99 equivalent is `bgfx_is_texture_valid`. + /// + bool isTextureValid( + uint16_t _depth + , bool _cubeMap + , uint16_t _numLayers + , TextureFormat::Enum _format + , uint32_t _flags + ); + /// Calculate amount of memory required for texture. /// /// @param[out] _info Resulting texture info structure. /// @param[in] _width Width. /// @param[in] _height Height. - /// @param[in] _depth Depth. + /// @param[in] _depth Depth dimension of volume texture. /// @param[in] _cubeMap Indicates that texture contains cubemap. /// @param[in] _hasMips Indicates that texture contains full mip-map chain. /// @param[in] _numLayers Number of layers in texture array. @@ -1624,9 +1652,9 @@ namespace bgfx /// - `BGFX_TEXTURE_[MIN/MAG/MIP]_[POINT/ANISOTROPIC]` - Point or anisotropic /// sampling. /// - /// @param[in] _mem Texture data. If `_mem` is non-NULL, created texture will be immutable. - /// When `_numLayers` is more than 1, expected memory layout is texture and all mips together - /// for each array element. + /// @param[in] _mem Texture data. If `_mem` is non-NULL, created texture will be immutable. If + /// `_mem` is NULL content of the texture is uninitialized. When `_numLayers` is more than + /// 1, expected memory layout is texture and all mips together for each array element. /// /// @attention C99 equivalent is `bgfx_create_texture_2d`. /// @@ -1680,7 +1708,8 @@ namespace bgfx /// - `BGFX_TEXTURE_[MIN/MAG/MIP]_[POINT/ANISOTROPIC]` - Point or anisotropic /// sampling. /// - /// @param[in] _mem Texture data. If `_mem` is non-NULL, created texture will be immutable. + /// @param[in] _mem Texture data. If `_mem` is non-NULL, created texture will be immutable. If + /// `_mem` is NULL content of the texture is uninitialized. /// /// @attention C99 equivalent is `bgfx_create_texture_3d`. /// @@ -1708,9 +1737,9 @@ namespace bgfx /// - `BGFX_TEXTURE_[MIN/MAG/MIP]_[POINT/ANISOTROPIC]` - Point or anisotropic /// sampling. /// - /// @param[in] _mem Texture data. If `_mem` is non-NULL, created texture will be immutable. - /// When `_numLayers` is more than 1, expected memory layout is cubemap texture and all mips - /// together for each array element. + /// @param[in] _mem Texture data. If `_mem` is non-NULL, created texture will be immutable. If + /// `_mem` is NULL content of the texture is uninitialized. When `_numLayers` is more than + /// 1, expected memory layout is texture and all mips together for each array element. /// /// @attention C99 equivalent is `bgfx_create_texture_cube`. /// @@ -1838,20 +1867,6 @@ namespace bgfx /// uint32_t readTexture(TextureHandle _handle, void* _data, uint8_t _mip = 0); - /// Read back texture content. - /// - /// @param[in] _handle Frame buffer handle. - /// @param[in] _attachment Frame buffer attachment index. - /// @param[in] _data Destination buffer. - /// - /// @returns Frame number when the result will be available. See: `bgfx::frame`. - /// - /// @attention Texture must be created with `BGFX_TEXTURE_READ_BACK` flag. - /// @attention Availability depends on: `BGFX_CAPS_TEXTURE_READ_BACK`. - /// @attention C99 equivalent is `bgfx_read_frame_buffer`. - /// - uint32_t readTexture(FrameBufferHandle _handle, uint8_t _attachment, void* _data); - /// Destroy texture. /// /// @param[in] _handle Texture handle. @@ -1906,7 +1921,7 @@ namespace bgfx , uint32_t _textureFlags = BGFX_TEXTURE_U_CLAMP|BGFX_TEXTURE_V_CLAMP ); - /// Create frame buffer. + /// Create MRT frame buffer from texture handles (simple). /// /// @param[in] _num Number of texture attachments. /// @param[in] _handles Texture attachments. @@ -1923,7 +1938,8 @@ namespace bgfx , bool _destroyTextures = false ); - /// Create frame buffer. + /// Create MRT frame buffer from texture handles with specific layer and + /// mip level. /// /// @param[in] _num Number of texture attachments. /// @param[in] _attachment Attachment texture info. See: `Attachment`. @@ -1961,6 +1977,16 @@ namespace bgfx , TextureFormat::Enum _depthFormat = TextureFormat::UnknownDepth ); + /// Obtain texture handle of frame buffer attachment. + /// + /// @param[in] _handle Frame buffer handle. + /// @param[in] _attachment Frame buffer attachment index. + /// + /// @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); + /// Destroy frame buffer. /// /// @attention C99 equivalent is `bgfx_destroy_frame_buffer`. @@ -1976,22 +2002,28 @@ namespace bgfx /// @returns Handle to uniform object. /// /// @remarks - /// Predefined uniforms (declared in `bgfx_shader.sh`): - /// - `u_viewRect vec4(x, y, width, height)` - view rectangle for current - /// view. - /// - `u_viewTexel vec4(1.0/width, 1.0/height, undef, undef)` - inverse - /// width and height - /// - `u_view mat4` - view matrix - /// - `u_invView mat4` - inverted view matrix - /// - `u_proj mat4` - projection matrix - /// - `u_invProj mat4` - inverted projection matrix - /// - `u_viewProj mat4` - concatenated view projection matrix - /// - `u_invViewProj mat4` - concatenated inverted view projection matrix - /// - `u_model mat4[BGFX_CONFIG_MAX_BONES]` - array of model matrices. - /// - `u_modelView mat4` - concatenated model view matrix, only first - /// model matrix from array is used. - /// - `u_modelViewProj mat4` - concatenated model view projection matrix. - /// - `u_alphaRef float` - alpha reference value for alpha test. + /// 1. Uniform names are unique. It's valid to call `bgfx::createUniform` + /// multiple times with the same uniform name. The library will always + /// return the same handle, but the handle reference count will be + /// incremented. This means that the same number of `bgfx::destroyUniform` + /// must be called to properly destroy the uniform. + /// + /// 2. Predefined uniforms (declared in `bgfx_shader.sh`): + /// - `u_viewRect vec4(x, y, width, height)` - view rectangle for current + /// view. + /// - `u_viewTexel vec4(1.0/width, 1.0/height, undef, undef)` - inverse + /// width and height + /// - `u_view mat4` - view matrix + /// - `u_invView mat4` - inverted view matrix + /// - `u_proj mat4` - projection matrix + /// - `u_invProj mat4` - inverted projection matrix + /// - `u_viewProj mat4` - concatenated view projection matrix + /// - `u_invViewProj mat4` - concatenated inverted view projection matrix + /// - `u_model mat4[BGFX_CONFIG_MAX_BONES]` - array of model matrices. + /// - `u_modelView mat4` - concatenated model view matrix, only first + /// model matrix from array is used. + /// - `u_modelViewProj mat4` - concatenated model view projection matrix. + /// - `u_alphaRef float` - alpha reference value for alpha test. /// /// @attention C99 equivalent is `bgfx_create_uniform`. /// @@ -2025,11 +2057,13 @@ namespace bgfx /// Retrieve occlusion query result from previous frame. /// /// @param[in] _handle Handle to occlusion query object. + /// @param[out] _result Number of pixels that passed test. This argument + /// can be `NULL` if result of occlusion query is not needed. /// @returns Occlusion query result. /// /// @attention C99 equivalent is `bgfx_get_result`. /// - OcclusionQueryResult::Enum getResult(OcclusionQueryHandle _handle); + OcclusionQueryResult::Enum getResult(OcclusionQueryHandle _handle, int32_t* _result = NULL); /// Destroy occlusion query. /// @@ -2228,7 +2262,7 @@ namespace bgfx /// /// @attention C99 equivalent is `bgfx_set_view_remap`. /// - void setViewRemap(uint8_t _id = 0, uint8_t _num = UINT8_MAX, const void* _remap = NULL); + void setViewOrder(uint8_t _id = 0, uint8_t _num = UINT8_MAX, const void* _remap = NULL); /// Reset all view settings to default. /// @@ -2525,29 +2559,6 @@ namespace bgfx , uint32_t _flags = UINT32_MAX ); - /// Set texture stage for draw primitive. - /// - /// @param[in] _stage Texture unit. - /// @param[in] _sampler Program sampler. - /// @param[in] _handle Frame buffer handle. - /// @param[in] _attachment Frame buffer attachment index. - /// @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_from_frame_buffer`. - /// - void setTexture( - uint8_t _stage - , UniformHandle _sampler - , FrameBufferHandle _handle - , uint8_t _attachment = 0 - , uint32_t _flags = UINT32_MAX - ); - /// Submit an empty primitive for rendering. Uniforms and draw state /// will be applied but no geometry will be submitted. /// @@ -2691,26 +2702,6 @@ namespace bgfx , TextureFormat::Enum _format = TextureFormat::Count ); - /// Set compute image from frame buffer texture. - /// - /// @param[in] _stage Texture unit. - /// @param[in] _sampler Program sampler. - /// @param[in] _handle Frame buffer handle. - /// @param[in] _attachment Frame buffer attachment index. - /// @param[in] _access Texture access. See `Access::Enum`. - /// @param[in] _format Texture format. See: `TextureFormat::Enum`. - /// - /// @attention C99 equivalent is `bgfx_set_image_from_frame_buffer`. - /// - void setImage( - uint8_t _stage - , UniformHandle _sampler - , FrameBufferHandle _handle - , uint8_t _attachment - , Access::Enum _access - , TextureFormat::Enum _format = TextureFormat::Count - ); - /// Dispatch compute. /// /// @param[in] _id View id. @@ -2791,36 +2782,6 @@ namespace bgfx , uint16_t _height = UINT16_MAX ); - /// Blit texture 2D region between 2D frame buffer and 2D texture. - /// - /// @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 frame buffer handle. - /// @param[in] _attachment Source frame buffer attachment index. - /// @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( - uint8_t _id - , TextureHandle _dst - , uint16_t _dstX - , uint16_t _dstY - , FrameBufferHandle _src - , uint8_t _attachment = 0 - , 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. @@ -2864,61 +2825,19 @@ namespace bgfx , uint16_t _depth = UINT16_MAX ); - /// Blit texture region between frame buffer and texture. - /// - /// @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 frame buffer handle. - /// @param[in] _attachment Source frame buffer attachment index. - /// @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( - uint8_t _id - , TextureHandle _dst - , uint8_t _dstMip - , uint16_t _dstX - , uint16_t _dstY - , uint16_t _dstZ - , FrameBufferHandle _src - , uint8_t _attachment = 0 - , 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 - ); - - /// Request screen shot. + /// Request screen shot of window back buffer. /// + /// @param[in] _handle Frame buffer handle. If handle is `BGFX_INVALID_HANDLE` request will be + /// made for main window back buffer. /// @param[in] _filePath Will be passed to `bgfx::CallbackI::screenShot` callback. /// /// @remarks /// `bgfx::CallbackI::screenShot` must be implemented. /// - /// @attention C99 equivalent is `bgfx_save_screen_shot`. + /// @attention Frame buffer handle must be created with OS' target native window handle. + /// @attention C99 equivalent is `bgfx_request_screen_shot`. /// - void saveScreenShot(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 fdf7f52..d329437 100644 --- a/3rdparty/bgfx/include/bgfx/c99/bgfx.h +++ b/3rdparty/bgfx/include/bgfx/c99/bgfx.h @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx/blob/master/LICENSE * * vim: set tabstop=4 expandtab: @@ -39,7 +39,7 @@ # define BGFX_C_API BGFX_SHARED_LIB_API #endif // defined(__cplusplus) -#include +#include typedef enum bgfx_renderer_type { @@ -329,6 +329,16 @@ typedef struct bgfx_stats int64_t waitRender; int64_t waitSubmit; + + uint32_t numDraw; + uint32_t numCompute; + uint32_t maxGpuLatency; + + uint16_t width; + uint16_t height; + uint16_t textWidth; + uint16_t textHeight; + } bgfx_stats_t; /**/ @@ -539,10 +549,10 @@ 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(uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src, void* _dst); +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(uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src, void* _dst); +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); @@ -638,16 +648,13 @@ 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); /**/ -BGFX_C_API bool bgfx_check_avail_transient_index_buffer(uint32_t _num); +BGFX_C_API uint32_t bgfx_get_avail_transient_index_buffer(uint32_t _num); /**/ -BGFX_C_API bool bgfx_check_avail_transient_vertex_buffer(uint32_t _num, const bgfx_vertex_decl_t* _decl); +BGFX_C_API uint32_t bgfx_get_avail_transient_vertex_buffer(uint32_t _num, const bgfx_vertex_decl_t* _decl); /**/ -BGFX_C_API bool bgfx_check_avail_instance_data_buffer(uint32_t _num, uint16_t _stride); - -/**/ -BGFX_C_API bool bgfx_check_avail_transient_buffers(uint32_t _numVertices, const bgfx_vertex_decl_t* _decl, uint32_t _numIndices); +BGFX_C_API uint32_t bgfx_get_avail_instance_data_buffer(uint32_t _num, uint16_t _stride); /**/ BGFX_C_API void bgfx_alloc_transient_index_buffer(bgfx_transient_index_buffer_t* _tib, uint32_t _num); @@ -673,6 +680,9 @@ BGFX_C_API bgfx_shader_handle_t bgfx_create_shader(const bgfx_memory_t* _mem); /**/ BGFX_C_API uint16_t bgfx_get_shader_uniforms(bgfx_shader_handle_t _handle, bgfx_uniform_handle_t* _uniforms, uint16_t _max); +/**/ +BGFX_C_API void bgfx_get_uniform_info(bgfx_uniform_handle_t _handle, bgfx_uniform_info_t* _info); + /**/ BGFX_C_API void bgfx_destroy_shader(bgfx_shader_handle_t _handle); @@ -685,6 +695,9 @@ 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); +/**/ +BGFX_C_API bool bgfx_is_texture_valid(uint16_t _depth, bool _cubeMap, uint16_t _numLayers, bgfx_texture_format_t _format, uint32_t _flags); + /**/ BGFX_C_API void bgfx_calc_texture_size(bgfx_texture_info_t* _info, uint16_t _width, uint16_t _height, uint16_t _depth, bool _cubeMap, bool _hasMips, uint16_t _numLayers, bgfx_texture_format_t _format); @@ -715,9 +728,6 @@ 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 uint32_t bgfx_read_frame_buffer(bgfx_frame_buffer_handle_t _handle, uint8_t _attachment, void* _data); - /**/ BGFX_C_API void bgfx_destroy_texture(bgfx_texture_handle_t _handle); @@ -736,6 +746,9 @@ BGFX_C_API bgfx_frame_buffer_handle_t bgfx_create_frame_buffer_from_attachment(u /**/ BGFX_C_API bgfx_frame_buffer_handle_t bgfx_create_frame_buffer_from_nwh(void* _nwh, uint16_t _width, uint16_t _height, bgfx_texture_format_t _depthFormat); +/**/ +BGFX_C_API bgfx_texture_handle_t bgfx_get_texture(bgfx_frame_buffer_handle_t _handle, uint8_t _attachment); + /**/ BGFX_C_API void bgfx_destroy_frame_buffer(bgfx_frame_buffer_handle_t _handle); @@ -749,7 +762,7 @@ BGFX_C_API void bgfx_destroy_uniform(bgfx_uniform_handle_t _handle); BGFX_C_API bgfx_occlusion_query_handle_t bgfx_create_occlusion_query(); /**/ -BGFX_C_API bgfx_occlusion_query_result_t bgfx_get_result(bgfx_occlusion_query_handle_t _handle); +BGFX_C_API bgfx_occlusion_query_result_t bgfx_get_result(bgfx_occlusion_query_handle_t _handle, int32_t* _result); /**/ BGFX_C_API void bgfx_destroy_occlusion_query(bgfx_occlusion_query_handle_t _handle); @@ -788,7 +801,7 @@ BGFX_C_API void bgfx_set_view_transform(uint8_t _id, const void* _view, const vo 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_remap(uint8_t _id, uint8_t _num, const void* _remap); +BGFX_C_API void bgfx_set_view_order(uint8_t _id, uint8_t _num, const void* _order); /**/ BGFX_C_API void bgfx_reset_view(uint8_t _id); @@ -853,9 +866,6 @@ 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 void bgfx_set_texture_from_frame_buffer(uint8_t _stage, bgfx_uniform_handle_t _sampler, bgfx_frame_buffer_handle_t _handle, uint8_t _attachment, uint32_t _flags); - /**/ BGFX_C_API uint32_t bgfx_touch(uint8_t _id); @@ -871,9 +881,6 @@ BGFX_C_API uint32_t bgfx_submit_indirect(uint8_t _id, bgfx_program_handle_t _han /**/ 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); -/**/ -BGFX_C_API void bgfx_set_image_from_frame_buffer(uint8_t _stage, bgfx_uniform_handle_t _sampler, bgfx_frame_buffer_handle_t _handle, uint8_t _attachment, bgfx_access_t _access, bgfx_texture_format_t _format); - /**/ BGFX_C_API void bgfx_set_compute_index_buffer(uint8_t _stage, bgfx_index_buffer_handle_t _handle, bgfx_access_t _access); @@ -902,9 +909,6 @@ 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_frame_buffer(uint8_t _id, bgfx_texture_handle_t _dst, uint8_t _dstMip, uint16_t _dstX, uint16_t _dstY, uint16_t _dstZ, bgfx_frame_buffer_handle_t _src, uint8_t _attachment, 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_save_screen_shot(const char* _filePath); +BGFX_C_API void bgfx_request_screen_shot(bgfx_frame_buffer_handle_t _handle, const char* _filePath); #endif // BGFX_C99_H_HEADER_GUARD diff --git a/3rdparty/bgfx/include/bgfx/c99/platform.h b/3rdparty/bgfx/include/bgfx/c99/platform.h new file mode 100644 index 0000000..78b7791 --- /dev/null +++ b/3rdparty/bgfx/include/bgfx/c99/platform.h @@ -0,0 +1,207 @@ +/* + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bgfx/blob/master/LICENSE + * + * vim: set tabstop=4 expandtab: + */ + +#ifndef BGFX_PLATFORM_C99_H_HEADER_GUARD +#define BGFX_PLATFORM_C99_H_HEADER_GUARD + +// NOTICE: +// This header file contains platform specific interfaces. It is only +// necessary to use this header in conjunction with creating windows. + +#include +#include + +typedef enum bgfx_render_frame +{ + BGFX_RENDER_FRAME_NO_CONTEXT, + BGFX_RENDER_FRAME_RENDER, + BGFX_RENDER_FRAME_TIMEOUT, + BGFX_RENDER_FRAME_EXITING, + + BGFX_RENDER_FRAME_COUNT + +} bgfx_render_frame_t; + +/** + * 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. + */ +BGFX_C_API bgfx_render_frame_t bgfx_render_frame(); + +typedef struct bgfx_platform_data +{ + void* ndt; + void* nwh; + void* context; + void* backBuffer; + void* backBufferDS; + void* session; + +} bgfx_platform_data_t; + +/**/ +BGFX_C_API void bgfx_set_platform_data(const bgfx_platform_data_t* _data); + +typedef struct bgfx_internal_data +{ + const struct bgfx_caps* caps; + void* context; + +} bgfx_internal_data_t; + +/**/ +BGFX_C_API const bgfx_internal_data_t* bgfx_get_internal_data(); + +/**/ +BGFX_C_API uintptr_t bgfx_override_internal_texture_ptr(bgfx_texture_handle_t _handle, uintptr_t _ptr); + +/**/ +BGFX_C_API uintptr_t bgfx_override_internal_texture(bgfx_texture_handle_t _handle, uint16_t _width, uint16_t _height, uint8_t _numMips, bgfx_texture_format_t _format, uint32_t _flags); + +/**/ +typedef struct bgfx_interface_vtbl +{ + bgfx_render_frame_t (*render_frame)(); + 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); + uintptr_t (*override_internal_texture)(bgfx_texture_handle_t _handle, uint16_t _width, uint16_t _height, uint8_t _numMips, bgfx_texture_format_t _format, uint32_t _flags); + void (*vertex_decl_begin)(bgfx_vertex_decl_t* _decl, bgfx_renderer_type_t _renderer); + void (*vertex_decl_add)(bgfx_vertex_decl_t* _decl, bgfx_attrib_t _attrib, uint8_t _num, bgfx_attrib_type_t _type, bool _normalized, bool _asInt); + void (*vertex_decl_skip)(bgfx_vertex_decl_t* _decl, uint8_t _num); + void (*vertex_decl_end)(bgfx_vertex_decl_t* _decl); + void (*vertex_pack)(const float _input[4], bool _inputNormalized, bgfx_attrib_t _attr, const bgfx_vertex_decl_t* _decl, void* _data, uint32_t _index); + void (*vertex_unpack)(float _output[4], bgfx_attrib_t _attr, const bgfx_vertex_decl_t* _decl, const void* _data, uint32_t _index); + void (*vertex_convert)(const bgfx_vertex_decl_t* _destDecl, void* _destData, const bgfx_vertex_decl_t* _srcDecl, const void* _srcData, uint32_t _num); + 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); + void (*shutdown)(); + void (*reset)(uint32_t _width, uint32_t _height, uint32_t _flags); + uint32_t (*frame)(bool _capture); + bgfx_renderer_type_t (*get_renderer_type)(); + const bgfx_caps_t* (*get_caps)(); + const bgfx_hmd_t* (*get_hmd)(); + const bgfx_stats_t* (*get_stats)(); + const bgfx_memory_t* (*alloc)(uint32_t _size); + const bgfx_memory_t* (*copy)(const void* _data, uint32_t _size); + const bgfx_memory_t* (*make_ref)(const void* _data, uint32_t _size); + const bgfx_memory_t* (*make_ref_release)(const void* _data, uint32_t _size, bgfx_release_fn_t _releaseFn, void* _userData); + void (*set_debug)(uint32_t _debug); + void (*dbg_text_clear)(uint8_t _attr, bool _small); + void (*dbg_text_printf)(uint16_t _x, uint16_t _y, uint8_t _attr, const char* _format, ...); + void (*dbg_text_vprintf)(uint16_t _x, uint16_t _y, uint8_t _attr, const char* _format, va_list _argList); + void (*dbg_text_image)(uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height, const void* _data, uint16_t _pitch); + bgfx_index_buffer_handle_t (*create_index_buffer)(const bgfx_memory_t* _mem, uint16_t _flags); + void (*destroy_index_buffer)(bgfx_index_buffer_handle_t _handle); + bgfx_vertex_buffer_handle_t (*create_vertex_buffer)(const bgfx_memory_t* _mem, const bgfx_vertex_decl_t* _decl, uint16_t _flags); + void (*destroy_vertex_buffer)(bgfx_vertex_buffer_handle_t _handle); + bgfx_dynamic_index_buffer_handle_t (*create_dynamic_index_buffer)(uint32_t _num, uint16_t _flags); + bgfx_dynamic_index_buffer_handle_t (*create_dynamic_index_buffer_mem)(const bgfx_memory_t* _mem, uint16_t _flags); + void (*update_dynamic_index_buffer)(bgfx_dynamic_index_buffer_handle_t _handle, uint32_t _startIndex, const bgfx_memory_t* _mem); + void (*destroy_dynamic_index_buffer)(bgfx_dynamic_index_buffer_handle_t _handle); + bgfx_dynamic_vertex_buffer_handle_t (*create_dynamic_vertex_buffer)(uint32_t _num, const bgfx_vertex_decl_t* _decl, uint16_t _flags); + bgfx_dynamic_vertex_buffer_handle_t (*create_dynamic_vertex_buffer_mem)(const bgfx_memory_t* _mem, const bgfx_vertex_decl_t* _decl, uint16_t _flags); + void (*update_dynamic_vertex_buffer)(bgfx_dynamic_vertex_buffer_handle_t _handle, uint32_t _startVertex, const bgfx_memory_t* _mem); + void (*destroy_dynamic_vertex_buffer)(bgfx_dynamic_vertex_buffer_handle_t _handle); + uint32_t (*get_avail_transient_index_buffer)(uint32_t _num); + uint32_t (*get_avail_transient_vertex_buffer)(uint32_t _num, const bgfx_vertex_decl_t* _decl); + uint32_t (*get_avail_instance_data_buffer)(uint32_t _num, uint16_t _stride); + 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); + 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 (*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); + void (*destroy_program)(bgfx_program_handle_t _handle); + bool (*is_texture_valid)(uint16_t _depth, bool _cubeMap, uint16_t _numLayers, bgfx_texture_format_t _format, uint32_t _flags); + void (*calc_texture_size)(bgfx_texture_info_t* _info, uint16_t _width, uint16_t _height, uint16_t _depth, bool _cubeMap, bool _hasMips, uint16_t _numLayers, bgfx_texture_format_t _format); + bgfx_texture_handle_t (*create_texture)(const bgfx_memory_t* _mem, uint32_t _flags, uint8_t _skip, bgfx_texture_info_t* _info); + bgfx_texture_handle_t (*create_texture_2d)(uint16_t _width, uint16_t _height, bool _hasMips, uint16_t _numLayers, bgfx_texture_format_t _format, uint32_t _flags, const bgfx_memory_t* _mem); + bgfx_texture_handle_t (*create_texture_2d_scaled)(bgfx_backbuffer_ratio_t _ratio, bool _hasMips, uint16_t _numLayers, bgfx_texture_format_t _format, uint32_t _flags); + bgfx_texture_handle_t (*create_texture_3d)(uint16_t _width, uint16_t _height, uint16_t _depth, bool _hasMips, bgfx_texture_format_t _format, uint32_t _flags, const bgfx_memory_t* _mem); + bgfx_texture_handle_t (*create_texture_cube)(uint16_t _size, bool _hasMips, uint16_t _numLayers, bgfx_texture_format_t _format, uint32_t _flags, const bgfx_memory_t* _mem); + void (*update_texture_2d)(bgfx_texture_handle_t _handle, uint16_t _layer, uint8_t _mip, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height, const bgfx_memory_t* _mem, uint16_t _pitch); + 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 (*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); + bgfx_frame_buffer_handle_t (*create_frame_buffer_from_attachment)(uint8_t _num, const bgfx_attachment_t* _attachment, bool _destroyTextures); + bgfx_frame_buffer_handle_t (*create_frame_buffer_from_nwh)(void* _nwh, uint16_t _width, uint16_t _height, bgfx_texture_format_t _depthFormat); + bgfx_texture_handle_t (*get_texture)(bgfx_frame_buffer_handle_t _handle, uint8_t _attachment); + void (*destroy_frame_buffer)(bgfx_frame_buffer_handle_t _handle); + bgfx_uniform_handle_t (*create_uniform)(const char* _name, bgfx_uniform_type_t _type, uint16_t _num); + void (*get_uniform_info)(bgfx_uniform_handle_t _handle, bgfx_uniform_info_t* _info); + void (*destroy_uniform)(bgfx_uniform_handle_t _handle); + bgfx_occlusion_query_handle_t (*create_occlusion_query)(); + 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 (*request_screen_shot)(bgfx_frame_buffer_handle_t _handle, const char* _filePath); + +} bgfx_interface_vtbl_t; + +typedef bgfx_interface_vtbl_t* (*PFN_BGFX_GET_INTERFACE)(uint32_t _version); + +#endif // BGFX_PLATFORM_C99_H_HEADER_GUARD diff --git a/3rdparty/bgfx/include/bgfx/defines.h b/3rdparty/bgfx/include/bgfx/defines.h new file mode 100644 index 0000000..98b9ac8 --- /dev/null +++ b/3rdparty/bgfx/include/bgfx/defines.h @@ -0,0 +1,444 @@ +/* + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause + */ + +#ifndef BGFX_DEFINES_H_HEADER_GUARD +#define BGFX_DEFINES_H_HEADER_GUARD + +#define BGFX_API_VERSION UINT32_C(39) + +/// +#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. + +#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_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_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. +#define BGFX_STATE_DEPTH_TEST_ALWAYS UINT64_C(0x0000000000000080) //!< Enable depth test, always. +#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) //!< +#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) //!< +#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. + +#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. +#define BGFX_STATE_CULL_MASK UINT64_C(0x0000003000000000) //!< Culling mode bit mask. + +/// See BGFX_STATE_ALPHA_REF(_ref) helper macro. +#define BGFX_STATE_ALPHA_REF_SHIFT 40 //!< Alpha reference bit shift. +#define BGFX_STATE_ALPHA_REF_MASK UINT64_C(0x0000ff0000000000) //!< Alpha reference bit mask. + +#define BGFX_STATE_PT_TRISTRIP UINT64_C(0x0001000000000000) //!< Tristrip. +#define BGFX_STATE_PT_LINES UINT64_C(0x0002000000000000) //!< Lines. +#define BGFX_STATE_PT_LINESTRIP UINT64_C(0x0003000000000000) //!< Line strip. +#define BGFX_STATE_PT_POINTS UINT64_C(0x0004000000000000) //!< Points. +#define BGFX_STATE_PT_SHIFT 48 //!< Primitive type bit shift. +#define BGFX_STATE_PT_MASK UINT64_C(0x0007000000000000) //!< Primitive type bit mask. + +#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. +#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. + +/// Do not use! +#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_ALPHA_REF(_ref) ( ( (uint64_t)(_ref )<>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_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) +#define BGFX_STATE_BLEND_FUNC_RT_3(_src, _dst) (BGFX_STATE_BLEND_FUNC_RT_x(_src, _dst)<<22) + +#define BGFX_STATE_BLEND_FUNC_RT_1E(_src, _dst, _equation) (BGFX_STATE_BLEND_FUNC_RT_xE(_src, _dst, _equation)<< 0) +#define BGFX_STATE_BLEND_FUNC_RT_2E(_src, _dst, _equation) (BGFX_STATE_BLEND_FUNC_RT_xE(_src, _dst, _equation)<<11) +#define BGFX_STATE_BLEND_FUNC_RT_3E(_src, _dst, _equation) (BGFX_STATE_BLEND_FUNC_RT_xE(_src, _dst, _equation)<<22) + +/// +#define BGFX_STENCIL_FUNC_REF_SHIFT 0 //!< +#define BGFX_STENCIL_FUNC_REF_MASK UINT32_C(0x000000ff) //!< +#define BGFX_STENCIL_FUNC_RMASK_SHIFT 8 //!< +#define BGFX_STENCIL_FUNC_RMASK_MASK UINT32_C(0x0000ff00) //!< + +#define BGFX_STENCIL_TEST_LESS UINT32_C(0x00010000) //!< Enable stencil test, less. +#define BGFX_STENCIL_TEST_LEQUAL UINT32_C(0x00020000) //!< Enable stencil test, less or equal. +#define BGFX_STENCIL_TEST_EQUAL UINT32_C(0x00030000) //!< Enable stencil test, equal. +#define BGFX_STENCIL_TEST_GEQUAL UINT32_C(0x00040000) //!< Enable stencil test, greater or equal. +#define BGFX_STENCIL_TEST_GREATER UINT32_C(0x00050000) //!< Enable stencil test, greater. +#define BGFX_STENCIL_TEST_NOTEQUAL UINT32_C(0x00060000) //!< Enable stencil test, not equal. +#define BGFX_STENCIL_TEST_NEVER UINT32_C(0x00070000) //!< Enable stencil test, never. +#define BGFX_STENCIL_TEST_ALWAYS UINT32_C(0x00080000) //!< Enable stencil test, always. +#define BGFX_STENCIL_TEST_SHIFT 16 //!< Stencil test bit shift. +#define BGFX_STENCIL_TEST_MASK UINT32_C(0x000f0000) //!< Stencil test bit mask. + +#define BGFX_STENCIL_OP_FAIL_S_ZERO UINT32_C(0x00000000) //!< Zero. +#define BGFX_STENCIL_OP_FAIL_S_KEEP UINT32_C(0x00100000) //!< Keep. +#define BGFX_STENCIL_OP_FAIL_S_REPLACE UINT32_C(0x00200000) //!< Replace. +#define BGFX_STENCIL_OP_FAIL_S_INCR UINT32_C(0x00300000) //!< Increment and wrap. +#define BGFX_STENCIL_OP_FAIL_S_INCRSAT UINT32_C(0x00400000) //!< Increment and clamp. +#define BGFX_STENCIL_OP_FAIL_S_DECR UINT32_C(0x00500000) //!< Decrement and wrap. +#define BGFX_STENCIL_OP_FAIL_S_DECRSAT UINT32_C(0x00600000) //!< Decrement and clamp. +#define BGFX_STENCIL_OP_FAIL_S_INVERT UINT32_C(0x00700000) //!< Invert. +#define BGFX_STENCIL_OP_FAIL_S_SHIFT 20 //!< Stencil operation fail bit shift. +#define BGFX_STENCIL_OP_FAIL_S_MASK UINT32_C(0x00f00000) //!< Stencil operation fail bit mask. + +#define BGFX_STENCIL_OP_FAIL_Z_ZERO UINT32_C(0x00000000) //!< Zero. +#define BGFX_STENCIL_OP_FAIL_Z_KEEP UINT32_C(0x01000000) //!< Keep. +#define BGFX_STENCIL_OP_FAIL_Z_REPLACE UINT32_C(0x02000000) //!< Replace. +#define BGFX_STENCIL_OP_FAIL_Z_INCR UINT32_C(0x03000000) //!< Increment and wrap. +#define BGFX_STENCIL_OP_FAIL_Z_INCRSAT UINT32_C(0x04000000) //!< Increment and clamp. +#define BGFX_STENCIL_OP_FAIL_Z_DECR UINT32_C(0x05000000) //!< Decrement and wrap. +#define BGFX_STENCIL_OP_FAIL_Z_DECRSAT UINT32_C(0x06000000) //!< Decrement and clamp. +#define BGFX_STENCIL_OP_FAIL_Z_INVERT UINT32_C(0x07000000) //!< Invert. +#define BGFX_STENCIL_OP_FAIL_Z_SHIFT 24 //!< Stencil operation depth fail bit shift +#define BGFX_STENCIL_OP_FAIL_Z_MASK UINT32_C(0x0f000000) //!< Stencil operation depth fail bit mask. + +#define BGFX_STENCIL_OP_PASS_Z_ZERO UINT32_C(0x00000000) //!< Zero. +#define BGFX_STENCIL_OP_PASS_Z_KEEP UINT32_C(0x10000000) //!< Keep. +#define BGFX_STENCIL_OP_PASS_Z_REPLACE UINT32_C(0x20000000) //!< Replace. +#define BGFX_STENCIL_OP_PASS_Z_INCR UINT32_C(0x30000000) //!< Increment and wrap. +#define BGFX_STENCIL_OP_PASS_Z_INCRSAT UINT32_C(0x40000000) //!< Increment and clamp. +#define BGFX_STENCIL_OP_PASS_Z_DECR UINT32_C(0x50000000) //!< Decrement and wrap. +#define BGFX_STENCIL_OP_PASS_Z_DECRSAT UINT32_C(0x60000000) //!< Decrement and clamp. +#define BGFX_STENCIL_OP_PASS_Z_INVERT UINT32_C(0x70000000) //!< Invert. +#define BGFX_STENCIL_OP_PASS_Z_SHIFT 28 //!< Stencil operation depth pass bit shift +#define BGFX_STENCIL_OP_PASS_Z_MASK UINT32_C(0xf0000000) //!< Stencil operation depth pass bit mask. + +#define BGFX_STENCIL_NONE UINT32_C(0x00000000) //!< +#define BGFX_STENCIL_MASK UINT32_C(0xffffffff) //!< +#define BGFX_STENCIL_DEFAULT UINT32_C(0x00000000) //!< + +/// Set stencil ref value. +#define BGFX_STENCIL_FUNC_REF(_ref) ( (uint32_t(_ref)< +#include "bgfx.h" + +#define BGFX_EMBEDDED_SHADER_DXBC(...) +#define BGFX_EMBEDDED_SHADER_DX9BC(...) +#define BGFX_EMBEDDED_SHADER_PSSL(...) +#define BGFX_EMBEDDED_SHADER_ESSL(...) +#define BGFX_EMBEDDED_SHADER_GLSL(...) +#define BGFX_EMBEDDED_SHADER_SPIRV(...) +#define BGFX_EMBEDDED_SHADER_METAL(...) + +#define BGFX_PLATFORM_SUPPORTS_DX9BC (0 \ + || BX_PLATFORM_WINDOWS \ + || BX_PLATFORM_XBOX360 \ + ) +#define BGFX_PLATFORM_SUPPORTS_DXBC (0 \ + || BX_PLATFORM_WINDOWS \ + || BX_PLATFORM_WINRT \ + || BX_PLATFORM_XBOXONE \ + ) +#define BGFX_PLATFORM_SUPPORTS_PSSL (0 \ + || BX_PLATFORM_PS4 \ + ) +#define BGFX_PLATFORM_SUPPORTS_ESSL (0 \ + || BX_PLATFORM_ANDROID \ + || BX_PLATFORM_EMSCRIPTEN \ + || BX_PLATFORM_IOS \ + || BX_PLATFORM_LINUX \ + || BX_PLATFORM_NACL \ + || BX_PLATFORM_OSX \ + || BX_PLATFORM_QNX \ + || BX_PLATFORM_RPI \ + || BX_PLATFORM_STEAMLINK \ + || BX_PLATFORM_WINDOWS \ + ) +#define BGFX_PLATFORM_SUPPORTS_GLSL (0 \ + || BX_PLATFORM_BSD \ + || BX_PLATFORM_LINUX \ + || BX_PLATFORM_OSX \ + || BX_PLATFORM_WINDOWS \ + ) +#define BGFX_PLATFORM_SUPPORTS_METAL (0 \ + || BX_PLATFORM_IOS \ + || BX_PLATFORM_OSX \ + ) +#define BGFX_PLATFORM_SUPPORTS_SPIRV (0 \ + || BX_PLATFORM_ANDROID \ + || BX_PLATFORM_LINUX \ + || BX_PLATFORM_WINDOWS \ + ) + +#if BGFX_PLATFORM_SUPPORTS_DX9BC +# undef BGFX_EMBEDDED_SHADER_DX9BC +# define BGFX_EMBEDDED_SHADER_DX9BC(_renderer, _name) { _renderer, BX_CONCATENATE(_name, _dx9 ), sizeof(BX_CONCATENATE(_name, _dx9 ) ) }, +#endif // BGFX_PLATFORM_SUPPORTS_DX9BC + +#if BGFX_PLATFORM_SUPPORTS_DXBC +# undef BGFX_EMBEDDED_SHADER_DXBC +# define BGFX_EMBEDDED_SHADER_DXBC(_renderer, _name) { _renderer, BX_CONCATENATE(_name, _dx11), sizeof(BX_CONCATENATE(_name, _dx11) ) }, +#endif // BGFX_PLATFORM_SUPPORTS_DXBC + +#if BGFX_PLATFORM_SUPPORTS_PSSL +# undef BGFX_EMBEDDED_SHADER_PSSL +# define BGFX_EMBEDDED_SHADER_PSSL(_renderer, _name) { _renderer, BX_CONCATENATE(_name, _pssl), BX_CONCATENATE(_name, _pssl_size) }, +#endif // BGFX_PLATFORM_SUPPORTS_PSSL + +#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 + +#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 + +#if 0 // 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 + +#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 + +#define BGFX_EMBEDDED_SHADER(_name) \ + { \ + #_name, \ + { \ + BGFX_EMBEDDED_SHADER_DX9BC(bgfx::RendererType::Direct3D9, _name) \ + BGFX_EMBEDDED_SHADER_DXBC (bgfx::RendererType::Direct3D11, _name) \ + BGFX_EMBEDDED_SHADER_DXBC (bgfx::RendererType::Direct3D12, _name) \ + BGFX_EMBEDDED_SHADER_PSSL (bgfx::RendererType::Gnm, _name) \ + BGFX_EMBEDDED_SHADER_METAL(bgfx::RendererType::Metal, _name) \ + 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::Count, NULL, 0 } \ + } \ + } + +#define BGFX_EMBEDDED_SHADER_END() \ + { \ + NULL, \ + { \ + { bgfx::RendererType::Count, NULL, 0 } \ + } \ + } + +namespace bgfx +{ + struct EmbeddedShader + { + struct Data + { + RendererType::Enum type; + const uint8_t* data; + uint32_t size; + }; + + const char* name; + Data data[RendererType::Count]; + }; + + ShaderHandle createEmbeddedShader(const bgfx::EmbeddedShader* _es, RendererType::Enum _type, const char* _name); + +} // namespace bgfx + +#endif // BGFX_EMBEDDED_SHADER_H_HEADER_GUARD diff --git a/3rdparty/bgfx/include/bgfx/platform.h b/3rdparty/bgfx/include/bgfx/platform.h new file mode 100644 index 0000000..1c9b3c7 --- /dev/null +++ b/3rdparty/bgfx/include/bgfx/platform.h @@ -0,0 +1,149 @@ +/* + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bgfx/blob/master/LICENSE + */ + +#ifndef BGFX_PLATFORM_H_HEADER_GUARD +#define BGFX_PLATFORM_H_HEADER_GUARD + +// NOTICE: +// This header file contains platform specific interfaces. It is only +// necessary to use this header in conjunction with creating windows. + +#include +#include + +namespace bgfx +{ + /// Render frame enum. + /// + /// @attention C99 equivalent is `bgfx_render_frame_t`. + /// + struct RenderFrame + { + enum Enum + { + NoContext, + Render, + Timeout, + Exiting, + + Count + }; + }; + + /// Render frame. + /// + /// @returns Current renderer state. See: `bgfx::RenderFrame`. + /// + /// @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(); + + /// Platform data. + /// + /// @attention C99 equivalent is `bgfx_platform_data_t`. + /// + struct PlatformData + { + void* ndt; //!< Native display type. + void* nwh; //!< Native window handle. + void* context; //!< GL context, or D3D device. + void* backBuffer; //!< GL backbuffer, or D3D render target view. + void* backBufferDS; //!< Backbuffer depth/stencil. + void* session; //!< ovrSession, for Oculus SDK + }; + + /// Set platform data. + /// + /// @warning Must be called before `bgfx::init`. + /// + /// @attention C99 equivalent is `bgfx_set_platform_data`. + /// + void setPlatformData(const PlatformData& _data); + + /// Internal data. + /// + /// @attention C99 equivalent is `bgfx_internal_data_t`. + /// + struct InternalData + { + const struct Caps* caps; //!< Renderer capabilities. + void* context; //!< GL context, or D3D device. + }; + + /// Get internal data for interop. + /// + /// @attention It's expected you understand some bgfx internals before you + /// use this call. + /// + /// @warning Must be called only on render thread. + /// + /// @attention C99 equivalent is `bgfx_get_internal_data`. + /// + const InternalData* getInternalData(); + + /// Override internal texture with externally created texture. Previously + /// created internal texture will released. + /// + /// @attention It's expected you understand some bgfx internals before you + /// use this call. + /// + /// @param[in] _handle Texture handle. + /// @param[in] _ptr Native API pointer to texture. + /// + /// @returns Native API pointer to texture. If result is 0, texture is not created yet from the + /// main thread. + /// + /// @warning Must be called only on render thread. + /// + /// @attention C99 equivalent is `bgfx_override_internal_texture_ptr`. + /// + uintptr_t overrideInternal(TextureHandle _handle, uintptr_t _ptr); + + /// Override internal texture by creating new texture. Previously created + /// internal texture will released. + /// + /// @attention It's expected you understand some bgfx internals before you + /// use this call. + /// + /// @param[in] _handle Texture handle. + /// @param[in] _width Width. + /// @param[in] _height Height. + /// @param[in] _numMips Number of mip-maps. + /// @param[in] _format Texture format. See: `TextureFormat::Enum`. + /// @param[in] _flags Default texture sampling mode is linear, and wrap mode + /// is repeat. + /// - `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. + /// + /// @returns Native API pointer to texture. If result is 0, texture is not created yet from the + /// main thread. + /// + /// @warning Must be called only on render thread. + /// + /// @attention C99 equivalent is `bgfx_override_internal_texture`. + /// + uintptr_t overrideInternal(TextureHandle _handle, uint16_t _width, uint16_t _height, uint8_t _numMips, TextureFormat::Enum _format, uint32_t _flags = BGFX_TEXTURE_NONE); + +} // namespace bgfx + +#if BX_PLATFORM_NACL +# include +# include + +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 33bf1e3..d755a10 100644 --- a/3rdparty/bgfx/makefile +++ b/3rdparty/bgfx/makefile @@ -1,6 +1,6 @@ # -# Copyright 2011-2016 Branimir Karadzic. All rights reserved. -# License: http://www.opensource.org/licenses/BSD-2-Clause +# Copyright 2011-2017 Branimir Karadzic. All rights reserved. +# License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause # UNAME := $(shell uname) @@ -42,6 +42,7 @@ 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 @@ -176,6 +177,18 @@ vs2015-release64: .build/projects/vs2015 ## Build - VS2015 x64 Release devenv .build/projects/vs2015/bgfx.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 --with-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 + devenv .build/projects/vs2017/bgfx.sln /Build "Release|Win32" +vs2017-debug64: .build/projects/vs2017 ## Build - vs2017 x64 Debug + devenv .build/projects/vs2017/bgfx.sln /Build "Debug|x64" +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 @@ -327,6 +340,9 @@ texturev: .build/projects/$(BUILD_PROJECT_DIR) ## Build texturev tool. 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 diff --git a/3rdparty/bgfx/scripts/bgfx.lua b/3rdparty/bgfx/scripts/bgfx.lua index a3716b9..f95e99f 100644 --- a/3rdparty/bgfx/scripts/bgfx.lua +++ b/3rdparty/bgfx/scripts/bgfx.lua @@ -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/bgfx#license-bsd-2-clause -- @@ -46,6 +46,10 @@ function bgfxProject(_name, _kind, _defines) "BGFX_SHARED_LIB_BUILD=1", } + links { + "bx", + } + configuration { "vs20* or mingw*" } links { "gdi32", @@ -75,6 +79,10 @@ function bgfxProject(_name, _kind, _defines) _defines, } + links { + "bx", + } + if _OPTIONS["with-glfw"] then defines { "BGFX_CONFIG_MULTITHREADED=0", @@ -161,11 +169,6 @@ function bgfxProject(_name, _kind, _defines) path.join(BGFX_DIR, "src/**.bin.h"), } - overridefiles(BGFX_DIR, path.join(BGFX_DIR, "../bgfx-ext"), { - path.join(BGFX_DIR, "src/renderer_vk.cpp"), - path.join(BGFX_DIR, "src/renderer_vk.h"), - }) - overridefiles(BGFX_DIR, path.join(BGFX_DIR, "../bgfx-ext"), { path.join(BGFX_DIR, "src/renderer_gnm.cpp"), path.join(BGFX_DIR, "src/renderer_gnm.h"), diff --git a/3rdparty/bgfx/scripts/example-common.lua b/3rdparty/bgfx/scripts/example-common.lua index 078877f..f87849f 100644 --- a/3rdparty/bgfx/scripts/example-common.lua +++ b/3rdparty/bgfx/scripts/example-common.lua @@ -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/bgfx#license-bsd-2-clause -- diff --git a/3rdparty/bgfx/scripts/genie.lua b/3rdparty/bgfx/scripts/genie.lua index 2e91560..a01d7fe 100644 --- a/3rdparty/bgfx/scripts/genie.lua +++ b/3rdparty/bgfx/scripts/genie.lua @@ -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/bgfx#license-bsd-2-clause -- @@ -86,10 +86,6 @@ if not os.isdir(BX_DIR) then os.exit() end -defines { - "BX_CONFIG_ENABLE_MSVC_LEVEL4_WARNINGS=1" -} - dofile (path.join(BX_DIR, "scripts/toolchain.lua")) if not toolchain(BGFX_BUILD_DIR, BGFX_THIRD_PARTY_DIR) then return -- no action specified @@ -141,9 +137,14 @@ function exampleProject(_name) path.join(BGFX_DIR, "examples", _name, "**.bin.h"), } + flags { + "FatalWarnings", + } + links { - "bgfx", "example-common", + "bgfx", + "bx", } if _OPTIONS["with-sdl"] then @@ -363,6 +364,8 @@ dofile "bgfx.lua" group "libs" bgfxProject("", "StaticLib", {}) +dofile(path.join(BX_DIR, "scripts/bx.lua")) + if _OPTIONS["with-examples"] or _OPTIONS["with-tools"] then group "examples" dofile "example-common.lua" @@ -401,6 +404,7 @@ if _OPTIONS["with-examples"] then exampleProject("29-debugdraw") exampleProject("30-picking") exampleProject("31-rsm") + exampleProject("32-particles") -- C99 source doesn't compile under WinRT settings if not premake.vstudio.iswinrt() then diff --git a/3rdparty/bgfx/scripts/geometryc.lua b/3rdparty/bgfx/scripts/geometryc.lua index 47b2ee0..902b310 100644 --- a/3rdparty/bgfx/scripts/geometryc.lua +++ b/3rdparty/bgfx/scripts/geometryc.lua @@ -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/bgfx#license-bsd-2-clause -- @@ -25,6 +25,10 @@ project "geometryc" path.join(BGFX_DIR, "examples/common/bounds.**"), } + links { + "bx", + } + configuration { "mingw-*" } targetextension ".exe" diff --git a/3rdparty/bgfx/scripts/shader-embeded.mk b/3rdparty/bgfx/scripts/shader-embeded.mk index 14cc9c2..ac9d4d6 100644 --- a/3rdparty/bgfx/scripts/shader-embeded.mk +++ b/3rdparty/bgfx/scripts/shader-embeded.mk @@ -1,6 +1,6 @@ # -# Copyright 2011-2016 Branimir Karadzic. All rights reserved. -# License: http://www.opensource.org/licenses/BSD-2-Clause +# Copyright 2011-2017 Branimir Karadzic. All rights reserved. +# License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause # THISDIR:=$(dir $(lastword $(MAKEFILE_LIST))) @@ -26,30 +26,42 @@ vs_%.bin.h : vs_%.sc @echo [$(<)] $(SILENT) $(SHADERC) $(VS_FLAGS) --platform linux -f $(<) -o $(SHADER_TMP) --bin2c $(basename $(<))_glsl @cat $(SHADER_TMP) > $(@) + -$(SILENT) $(SHADERC) $(VS_FLAGS) --platform linux -p spirv -f $(<) -o $(SHADER_TMP) --bin2c $(basename $(<))_spv + -@cat $(SHADER_TMP) >> $(@) -$(SILENT) $(SHADERC) $(VS_FLAGS) --platform windows -p vs_3_0 -O 3 -f $(<) -o $(SHADER_TMP) --bin2c $(basename $(<))_dx9 -@cat $(SHADER_TMP) >> $(@) -$(SILENT) $(SHADERC) $(VS_FLAGS) --platform windows -p vs_4_0 -O 3 -f $(<) -o $(SHADER_TMP) --bin2c $(basename $(<))_dx11 -@cat $(SHADER_TMP) >> $(@) -$(SILENT) $(SHADERC) $(VS_FLAGS) --platform ios -p metal -O 3 -f $(<) -o $(SHADER_TMP) --bin2c $(basename $(<))_mtl -@cat $(SHADER_TMP) >> $(@) + -@echo extern const uint8_t* $(basename $(<))_pssl;>> $(@) + -@echo extern const uint32_t $(basename $(<))_pssl_size;>> $(@) fs_%.bin.h : fs_%.sc @echo [$(<)] $(SILENT) $(SHADERC) $(FS_FLAGS) --platform linux -f $(<) -o $(SHADER_TMP) --bin2c $(basename $(<))_glsl @cat $(SHADER_TMP) > $(@) + -$(SILENT) $(SHADERC) $(FS_FLAGS) --platform linux -p spirv -f $(<) -o $(SHADER_TMP) --bin2c $(basename $(<))_spv + -@cat $(SHADER_TMP) >> $(@) -$(SILENT) $(SHADERC) $(FS_FLAGS) --platform windows -p ps_3_0 -O 3 -f $(<) -o $(SHADER_TMP) --bin2c $(basename $(<))_dx9 -@cat $(SHADER_TMP) >> $(@) -$(SILENT) $(SHADERC) $(FS_FLAGS) --platform windows -p ps_4_0 -O 3 -f $(<) -o $(SHADER_TMP) --bin2c $(basename $(<))_dx11 -@cat $(SHADER_TMP) >> $(@) -$(SILENT) $(SHADERC) $(FS_FLAGS) --platform ios -p metal -O 3 -f $(<) -o $(SHADER_TMP) --bin2c $(basename $(<))_mtl -@cat $(SHADER_TMP) >> $(@) + -@echo extern const uint8_t* $(basename $(<))_pssl;>> $(@) + -@echo extern const uint32_t $(basename $(<))_pssl_size;>> $(@) cs_%.bin.h : cs_%.sc @echo [$(<)] $(SILENT) $(SHADERC) $(CS_FLAGS) --platform linux -p 430 -f $(<) -o $(SHADER_TMP) --bin2c $(basename $(<))_glsl @cat $(SHADER_TMP) > $(@) +# -$(SILENT) $(SHADERC) $(CS_FLAGS) --platform linux -p spirv -f $(<) -o $(SHADER_TMP) --bin2c $(basename $(<))_spv +# -@cat $(SHADER_TMP) >> $(@) -$(SILENT) $(SHADERC) $(CS_FLAGS) --platform windows -p cs_5_0 -O 1 -f $(<) -o $(SHADER_TMP) --bin2c $(basename $(<))_dx11 -@cat $(SHADER_TMP) >> $(@) + -@echo extern const uint8_t* $(basename $(<))_pssl;>> $(@) + -@echo extern const uint32_t $(basename $(<))_pssl_size;>> $(@) .PHONY: all all: $(BIN) diff --git a/3rdparty/bgfx/scripts/shader.mk b/3rdparty/bgfx/scripts/shader.mk index 56937fb..897b280 100644 --- a/3rdparty/bgfx/scripts/shader.mk +++ b/3rdparty/bgfx/scripts/shader.mk @@ -1,6 +1,6 @@ # -# Copyright 2011-2016 Branimir Karadzic. All rights reserved. -# License: http://www.opensource.org/licenses/BSD-2-Clause +# Copyright 2011-2017 Branimir Karadzic. All rights reserved. +# License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause # THISDIR:=$(dir $(lastword $(MAKEFILE_LIST))) @@ -23,6 +23,17 @@ all: @echo " TARGET=5 (metal)" @echo " TARGET=6 (pssl)" @echo " TARGET=7 (spriv)" + +.PHONY: rebuild +rebuild: + @make -s --no-print-directory TARGET=0 clean all + @make -s --no-print-directory TARGET=1 clean all + @make -s --no-print-directory TARGET=2 clean all + @make -s --no-print-directory TARGET=3 clean all + @make -s --no-print-directory TARGET=4 clean all + @make -s --no-print-directory TARGET=5 clean all + @make -s --no-print-directory TARGET=7 clean all + else ADDITIONAL_INCLUDES?= diff --git a/3rdparty/bgfx/scripts/shaderc.lua b/3rdparty/bgfx/scripts/shaderc.lua index 3942b69..300c4c6 100644 --- a/3rdparty/bgfx/scripts/shaderc.lua +++ b/3rdparty/bgfx/scripts/shaderc.lua @@ -1,79 +1,111 @@ -- --- Copyright 2010-2016 Branimir Karadzic. All rights reserved. +-- Copyright 2010-2017 Branimir Karadzic. All rights reserved. -- License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause -- -project "shaderc" - uuid "f3cd2e90-52a4-11e1-b86c-0800200c9a66" - kind "ConsoleApp" +group "tools/shaderc" - local GLSL_OPTIMIZER = path.join(BGFX_DIR, "3rdparty/glsl-optimizer") - local FCPP_DIR = path.join(BGFX_DIR, "3rdparty/fcpp") +local GLSL_OPTIMIZER = path.join(BGFX_DIR, "3rdparty/glsl-optimizer") +local FCPP_DIR = path.join(BGFX_DIR, "3rdparty/fcpp") - includedirs { - path.join(GLSL_OPTIMIZER, "src"), - } +project "glslang" + kind "StaticLib" - removeflags { - -- GCC 4.9 -O2 + -fno-strict-aliasing don't work together... - "OptimizeSpeed", - } + local GLSLANG = path.join(BGFX_DIR, "3rdparty/glslang") + + configuration { "vs2012" } + defines { + "atoll=_atoi64", + "strtoll=_strtoi64", + "strtoull=_strtoui64", + } configuration { "vs*" } - includedirs { - path.join(GLSL_OPTIMIZER, "src/glsl/msvc"), - } - - defines { -- glsl-optimizer - "__STDC__", - "__STDC_VERSION__=199901L", - "strdup=_strdup", - "alloca=_alloca", - "isascii=__isascii", - } - buildoptions { - "/wd4996" -- warning C4996: 'strdup': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _strdup. + "/wd4005", -- warning C4005: '_CRT_SECURE_NO_WARNINGS': macro redefinition + "/wd4100", -- error C4100: 'inclusionDepth' : unreferenced formal parameter + "/wd4127", -- warning C4127: conditional expression is constant + "/wd4244", -- warning C4244: '=': conversion from 'int' to 'char', possible loss of data + "/wd4456", -- warning C4456: declaration of 'feature' hides previous local declaration + "/wd4457", -- warning C4457: declaration of 'token' hides function parameter + "/wd4458", -- warning C4458: declaration of 'language' hides class member + "/wd4702", -- warning C4702: unreachable code } - configuration { "mingw-*" } - targetextension ".exe" - - configuration { "mingw* or linux or osx" } + configuration { "not vs*" } buildoptions { - "-fno-strict-aliasing", -- glsl-optimizer has bugs if strict aliasing is used. + "-Wno-deprecated-register", + "-Wno-ignored-qualifiers", + "-Wno-inconsistent-missing-override", + "-Wno-missing-field-initializers", + "-Wno-reorder", + "-Wno-return-type", + "-Wno-shadow", + "-Wno-sign-compare", + "-Wno-undef", + "-Wno-unknown-pragmas", "-Wno-unused-parameter", - } - removebuildoptions { - "-Wshadow", -- glsl-optimizer is full of -Wshadow warnings ignore it. + "-Wno-unused-variable", } configuration { "osx" } - links { - "Cocoa.framework", + buildoptions { + "-Wno-c++11-extensions", + "-Wno-unused-const-variable", } - configuration { "vs*" } - includedirs { - path.join(GLSL_OPTIMIZER, "include/c99"), + configuration { "linux-*" } + buildoptions { + "-Wno-unused-but-set-variable", + } + + configuration {} + defines { + "ENABLE_HLSL=1", + } + + includedirs { + GLSLANG, + } + + files { + path.join(GLSLANG, "glslang/**.cpp"), + path.join(GLSLANG, "glslang/**.h"), + + path.join(GLSLANG, "hlsl/**.cpp"), + path.join(GLSLANG, "hlsl/**.h"), + + path.join(GLSLANG, "SPIRV/**.cpp"), + path.join(GLSLANG, "SPIRV/**.h"), + + path.join(GLSLANG, "OGLCompilersDLL/**.cpp"), + path.join(GLSLANG, "OGLCompilersDLL/**.h"), + } + + removefiles { + path.join(GLSLANG, "glslang/OSDependent/Unix/main.cpp"), + path.join(GLSLANG, "glslang/OSDependent/Windows/main.cpp"), + } + + configuration { "windows" } + removefiles { + path.join(GLSLANG, "glslang/OSDependent/Unix/**.cpp"), + path.join(GLSLANG, "glslang/OSDependent/Unix/**.h"), + } + + configuration { "not windows" } + removefiles { + path.join(GLSLANG, "glslang/OSDependent/Windows/**.cpp"), + path.join(GLSLANG, "glslang/OSDependent/Windows/**.h"), } configuration {} - defines { -- fcpp - "NINCLUDE=64", - "NWORK=65536", - "NBUFF=65536", - "OLD_PREPROCESSOR=0", - } +project "glsl-optimizer" + kind "StaticLib" includedirs { - path.join(BX_DIR, "include"), - path.join(BGFX_DIR, "include"), - - path.join(BGFX_DIR, "3rdparty/dxsdk/include"), - FCPP_DIR, - + path.join(GLSL_OPTIMIZER, "src"), path.join(GLSL_OPTIMIZER, "include"), path.join(GLSL_OPTIMIZER, "src/mesa"), path.join(GLSL_OPTIMIZER, "src/mapi"), @@ -81,19 +113,6 @@ project "shaderc" } files { - path.join(BGFX_DIR, "tools/shaderc/**.cpp"), - path.join(BGFX_DIR, "tools/shaderc/**.h"), - path.join(BGFX_DIR, "src/vertexdecl.**"), - - path.join(FCPP_DIR, "**.h"), - path.join(FCPP_DIR, "cpp1.c"), - path.join(FCPP_DIR, "cpp2.c"), - path.join(FCPP_DIR, "cpp3.c"), - path.join(FCPP_DIR, "cpp4.c"), - path.join(FCPP_DIR, "cpp5.c"), - path.join(FCPP_DIR, "cpp6.c"), - path.join(FCPP_DIR, "cpp6.c"), - path.join(GLSL_OPTIMIZER, "src/mesa/**.c"), path.join(GLSL_OPTIMIZER, "src/glsl/**.cpp"), path.join(GLSL_OPTIMIZER, "src/mesa/**.h"), @@ -114,6 +133,140 @@ project "shaderc" path.join(GLSL_OPTIMIZER, "src/glsl/builtin_stubs.cpp"), } + configuration { "Release" } + flags { + "Optimize", + } + + removeflags { + -- GCC 4.9 -O2 + -fno-strict-aliasing don't work together... + "OptimizeSpeed", + } + + configuration { "vs*" } + includedirs { + path.join(GLSL_OPTIMIZER, "src/glsl/msvc"), + } + + defines { -- glsl-optimizer + "__STDC__", + "__STDC_VERSION__=199901L", + "strdup=_strdup", + "alloca=_alloca", + "isascii=__isascii", + } + + buildoptions { + "/wd4100", -- error C4100: '' : unreferenced formal parameter + "/wd4127", -- warning C4127: conditional expression is constant + "/wd4132", -- warning C4132: 'deleted_key_value': const object should be initialized + "/wd4189", -- warning C4189: 'interface_type': local variable is initialized but not referenced + "/wd4204", -- warning C4204: nonstandard extension used: non-constant aggregate initializer + "/wd4244", -- warning C4244: '=': conversion from 'const flex_int32_t' to 'YY_CHAR', possible loss of data + "/wd4389", -- warning C4389: '!=': signed/unsigned mismatch + "/wd4245", -- warning C4245: 'return': conversion from 'int' to 'unsigned int', signed/unsigned mismatch + "/wd4701", -- warning C4701: potentially uninitialized local variable 'lower' used + "/wd4702", -- warning C4702: unreachable code + "/wd4706", -- warning C4706: assignment within conditional expression + "/wd4996" -- warning C4996: 'strdup': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _strdup. + } + + configuration { "mingw* or linux or osx" } + buildoptions { + "-fno-strict-aliasing", -- glsl-optimizer has bugs if strict aliasing is used. + "-Wno-unused-parameter", + } + + removebuildoptions { + "-Wshadow", -- glsl-optimizer is full of -Wshadow warnings ignore it. + } + + configuration {} + +project "fcpp" + kind "StaticLib" + + defines { -- fcpp + "NINCLUDE=64", + "NWORK=65536", + "NBUFF=65536", + "OLD_PREPROCESSOR=0", + } + + files { + path.join(FCPP_DIR, "**.h"), + path.join(FCPP_DIR, "cpp1.c"), + path.join(FCPP_DIR, "cpp2.c"), + path.join(FCPP_DIR, "cpp3.c"), + path.join(FCPP_DIR, "cpp4.c"), + path.join(FCPP_DIR, "cpp5.c"), + path.join(FCPP_DIR, "cpp6.c"), + path.join(FCPP_DIR, "cpp6.c"), + } + + configuration { "vs*" } + + buildoptions { + "/wd4055", -- warning C4055: 'type cast': from data pointer 'void *' to function pointer 'void (__cdecl *)(char *,void *)' + "/wd4244", -- warning C4244: '=': conversion from 'const flex_int32_t' to 'YY_CHAR', possible loss of data + "/wd4701", -- warning C4701: potentially uninitialized local variable 'lower' used + "/wd4706", -- warning C4706: assignment within conditional expression + } + + configuration {} + +project "shaderc" + kind "ConsoleApp" + + includedirs { + path.join(BX_DIR, "include"), + path.join(BGFX_DIR, "include"), + + path.join(BGFX_DIR, "3rdparty/dxsdk/include"), + FCPP_DIR, + + path.join(BGFX_DIR, "3rdparty/glslang/glslang/Public"), + path.join(BGFX_DIR, "3rdparty/glslang/glslang/Include"), + path.join(BGFX_DIR, "3rdparty/glslang"), + + path.join(GLSL_OPTIMIZER, "include"), + path.join(GLSL_OPTIMIZER, "src/glsl"), + } + + links { + "bx", + "fcpp", + "glslang", + "glsl-optimizer", + } + + files { + path.join(BGFX_DIR, "tools/shaderc/**.cpp"), + path.join(BGFX_DIR, "tools/shaderc/**.h"), + path.join(BGFX_DIR, "src/vertexdecl.**"), + path.join(BGFX_DIR, "src/shader_spirv.**"), + } + + configuration { "mingw-*" } + targetextension ".exe" + + configuration { "osx" } + links { + "Cocoa.framework", + } + + configuration { "vs*" } + includedirs { + path.join(GLSL_OPTIMIZER, "include/c99"), + } + + configuration { "vs20* or mingw*" } + links { + "psapi", + } + + configuration {} + if filesexist(BGFX_DIR, path.join(BGFX_DIR, "../bgfx-ext"), { path.join(BGFX_DIR, "scripts/shaderc.lua"), }) then @@ -125,15 +278,16 @@ project "shaderc" } end - if filesexist(BGFX_DIR, path.join(BGFX_DIR, "../bgfx-ext"), { - path.join(BGFX_DIR, "tools/shaderc/shaderc_spirv.cpp"), }) then - - removefiles { - path.join(BGFX_DIR, "tools/shaderc/shaderc_spirv.cpp"), - } - end - dofile(path.join(BGFX_DIR, "../bgfx-ext/scripts/shaderc.lua") ) end + configuration { "osx or linux*" } + links { + "pthread", + } + + configuration {} + strip() + +group "tools" diff --git a/3rdparty/bgfx/scripts/texturec.lua b/3rdparty/bgfx/scripts/texturec.lua index 36a01b1..07184ed 100644 --- a/3rdparty/bgfx/scripts/texturec.lua +++ b/3rdparty/bgfx/scripts/texturec.lua @@ -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/bgfx#license-bsd-2-clause -- @@ -30,7 +30,6 @@ project "texturec" 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/**.cc"), path.join(BGFX_DIR, "3rdparty/tinyexr/**.h"), path.join(BGFX_DIR, "3rdparty/iqa/include/**.h"), path.join(BGFX_DIR, "3rdparty/iqa/source/**.c"), @@ -38,6 +37,10 @@ project "texturec" path.join(BGFX_DIR, "tools/texturec/**.h"), } + links { + "bx", + } + configuration { "mingw-*" } targetextension ".exe" @@ -46,4 +49,9 @@ project "texturec" "Cocoa.framework", } + configuration { "vs20* or mingw*" } + links { + "psapi", + } + configuration {} diff --git a/3rdparty/bgfx/scripts/texturev.lua b/3rdparty/bgfx/scripts/texturev.lua index 2cfd106..fe08f59 100644 --- a/3rdparty/bgfx/scripts/texturev.lua +++ b/3rdparty/bgfx/scripts/texturev.lua @@ -11,7 +11,6 @@ project ("texturev") path.join(BGFX_DIR, "examples/common"), path.join(MODULE_DIR, "include"), path.join(MODULE_DIR, "3rdparty"), - path.join(MODULE_DIR, "src"), } files { @@ -21,6 +20,7 @@ project ("texturev") links { "example-common", "bgfx", + "bx", } if _OPTIONS["with-sdl"] then diff --git a/3rdparty/bgfx/scripts/tools.mk b/3rdparty/bgfx/scripts/tools.mk index 1c810c0..0cda8ba 100644 --- a/3rdparty/bgfx/scripts/tools.mk +++ b/3rdparty/bgfx/scripts/tools.mk @@ -1,6 +1,6 @@ # -# Copyright 2011-2016 Branimir Karadzic. All rights reserved. -# License: http://www.opensource.org/licenses/BSD-2-Clause +# Copyright 2011-2017 Branimir Karadzic. All rights reserved. +# License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause # SILENT?=@ diff --git a/3rdparty/bgfx/src/amalgamated.cpp b/3rdparty/bgfx/src/amalgamated.cpp index 9e5de6e..860f448 100644 --- a/3rdparty/bgfx/src/amalgamated.cpp +++ b/3rdparty/bgfx/src/amalgamated.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ diff --git a/3rdparty/bgfx/src/amalgamated.mm b/3rdparty/bgfx/src/amalgamated.mm index 7e0534b..7d3cb5b 100644 --- a/3rdparty/bgfx/src/amalgamated.mm +++ b/3rdparty/bgfx/src/amalgamated.mm @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ diff --git a/3rdparty/bgfx/src/bgfx.cpp b/3rdparty/bgfx/src/bgfx.cpp index c831219..5886e84 100644 --- a/3rdparty/bgfx/src/bgfx.cpp +++ b/3rdparty/bgfx/src/bgfx.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -11,6 +11,7 @@ #endif // BX_PLATFORM_WINDOWS #include "bgfx_p.h" +#include #if BGFX_CONFIG_PROFILER_REMOTERY_BUILD_LIB # define RMT_USE_D3D11 BGFX_CONFIG_RENDERER_DIRECT3D11 @@ -19,8 +20,12 @@ #endif // BGFX_CONFIG_PROFILER_REMOTERY_BUILD_LIB #include +#include + #include "topology.h" +BX_ERROR_RESULT(BGFX_ERROR_TEXTURE_VALIDATION, BX_MAKEFOURCC('b', 'g', 0, 1) ); + namespace bgfx { #define BGFX_MAIN_THREAD_MAGIC UINT32_C(0x78666762) @@ -73,7 +78,7 @@ namespace bgfx if ( (int32_t)sizeof(temp) < total) { out = (char*)alloca(total+1); - memcpy(out, temp, len); + bx::memCopy(out, temp, len); bx::vsnprintf(out + len, total-len, _format, _argList); } out[total] = '\0'; @@ -113,9 +118,10 @@ namespace bgfx BX_UNUSED(_filePath, _width, _height, _pitch, _data, _size, _yflip); #if BX_CONFIG_CRT_FILE_READER_WRITER - char* filePath = (char*)alloca(strlen(_filePath)+5); - strcpy(filePath, _filePath); - strcat(filePath, ".tga"); + const int32_t len = bx::strnlen(_filePath)+5; + char* filePath = (char*)alloca(len); + bx::strlncpy(filePath, len, _filePath); + bx::strlncat(filePath, len, ".tga"); bx::CrtFileWriter writer; if (bx::open(&writer, filePath) ) @@ -165,7 +171,7 @@ namespace bgfx { #if BGFX_CONFIG_MEMORY_TRACKING { - bx::LwMutexScope scope(m_mutex); + bx::MutexScope scope(m_mutex); BX_CHECK(m_numBlocks > 0, "Number of blocks is 0. Possible alloc/free mismatch?"); --m_numBlocks; } @@ -187,7 +193,7 @@ namespace bgfx { #if BGFX_CONFIG_MEMORY_TRACKING { - bx::LwMutexScope scope(m_mutex); + bx::MutexScope scope(m_mutex); ++m_numBlocks; m_maxBlocks = bx::uint32_max(m_maxBlocks, m_numBlocks); } @@ -204,7 +210,7 @@ namespace bgfx #if BGFX_CONFIG_MEMORY_TRACKING if (NULL == _ptr) { - bx::LwMutexScope scope(m_mutex); + bx::MutexScope scope(m_mutex); ++m_numBlocks; m_maxBlocks = bx::uint32_max(m_maxBlocks, m_numBlocks); } @@ -220,7 +226,7 @@ namespace bgfx protected: #if BGFX_CONFIG_MEMORY_TRACKING - bx::LwMutex m_mutex; + bx::Mutex m_mutex; uint32_t m_numBlocks; uint32_t m_maxBlocks; #endif // BGFX_CONFIG_MEMORY_TRACKING @@ -311,7 +317,7 @@ namespace bgfx , "Only backbuffer pointer and native window handle can be changed after initialization!" ); } - memcpy(&g_platformData, &_data, sizeof(PlatformData) ); + bx::memCopy(&g_platformData, &_data, sizeof(PlatformData) ); g_platformDataChangedSinceReset = true; } @@ -388,7 +394,7 @@ namespace bgfx if (BX_UNLIKELY(NULL == g_callback) ) { - dbgPrintfVargs(_format, argList); + bx::debugPrintfVargs(_format, argList); abort(); } else @@ -416,7 +422,7 @@ namespace bgfx if (BX_UNLIKELY(NULL == g_callback) ) { - dbgPrintfVargs(_format, argList); + bx::debugPrintfVargs(_format, argList); } else { @@ -438,63 +444,33 @@ namespace bgfx #include "fs_clear6.bin.h" #include "fs_clear7.bin.h" - struct EmbeddedShader - { - struct Data - { - bgfx::RendererType::Enum type; - const uint8_t* data; - uint32_t size; - }; - - const char* name; - Data data[RendererType::Count]; - }; - -#define BGFX_DECLARE_SHADER_EMBEDDED(_name) \ - { \ - #_name, \ - { \ - { bgfx::RendererType::Direct3D9, BX_CONCATENATE(_name, _dx9 ), sizeof(BX_CONCATENATE(_name, _dx9 ) ) }, \ - { bgfx::RendererType::Direct3D11, BX_CONCATENATE(_name, _dx11), sizeof(BX_CONCATENATE(_name, _dx11) ) }, \ - { bgfx::RendererType::Direct3D12, BX_CONCATENATE(_name, _dx11), sizeof(BX_CONCATENATE(_name, _dx11) ) }, \ - { bgfx::RendererType::Gnm, BX_CONCATENATE(_name, _pssl), BX_CONCATENATE(_name, _pssl_size) }, \ - { bgfx::RendererType::Metal, BX_CONCATENATE(_name, _mtl ), sizeof(BX_CONCATENATE(_name, _mtl ) ) }, \ - { bgfx::RendererType::OpenGL, BX_CONCATENATE(_name, _glsl), sizeof(BX_CONCATENATE(_name, _glsl) ) }, \ - { bgfx::RendererType::OpenGLES, BX_CONCATENATE(_name, _glsl), sizeof(BX_CONCATENATE(_name, _glsl) ) }, \ - { bgfx::RendererType::Vulkan, BX_CONCATENATE(_name, _glsl), sizeof(BX_CONCATENATE(_name, _glsl) ) }, \ - { bgfx::RendererType::Count, NULL, 0 }, \ - } \ - } - static const EmbeddedShader s_embeddedShaders[] = { - BGFX_DECLARE_SHADER_EMBEDDED(vs_debugfont), - BGFX_DECLARE_SHADER_EMBEDDED(fs_debugfont), + BGFX_EMBEDDED_SHADER(vs_debugfont), + BGFX_EMBEDDED_SHADER(fs_debugfont), + BGFX_EMBEDDED_SHADER(vs_clear), + BGFX_EMBEDDED_SHADER(fs_clear0), + BGFX_EMBEDDED_SHADER(fs_clear1), + BGFX_EMBEDDED_SHADER(fs_clear2), + BGFX_EMBEDDED_SHADER(fs_clear3), + BGFX_EMBEDDED_SHADER(fs_clear4), + BGFX_EMBEDDED_SHADER(fs_clear5), + BGFX_EMBEDDED_SHADER(fs_clear6), + BGFX_EMBEDDED_SHADER(fs_clear7), - BGFX_DECLARE_SHADER_EMBEDDED(vs_clear), - - BGFX_DECLARE_SHADER_EMBEDDED(fs_clear0), - BGFX_DECLARE_SHADER_EMBEDDED(fs_clear1), - BGFX_DECLARE_SHADER_EMBEDDED(fs_clear2), - BGFX_DECLARE_SHADER_EMBEDDED(fs_clear3), - BGFX_DECLARE_SHADER_EMBEDDED(fs_clear4), - BGFX_DECLARE_SHADER_EMBEDDED(fs_clear5), - BGFX_DECLARE_SHADER_EMBEDDED(fs_clear6), - BGFX_DECLARE_SHADER_EMBEDDED(fs_clear7), - - { NULL, { { bgfx::RendererType::Count, NULL, 0 } } } + BGFX_EMBEDDED_SHADER_END() }; - static ShaderHandle createEmbeddedShader(RendererType::Enum _type, const char* _name) + ShaderHandle createEmbeddedShader(const EmbeddedShader* _es, RendererType::Enum _type, const char* _name) { - for (const EmbeddedShader* es = s_embeddedShaders; NULL != es->name; ++es) + for (const EmbeddedShader* es = _es; NULL != es->name; ++es) { - if (0 == strcmp(_name, es->name) ) + if (0 == bx::strncmp(_name, es->name) ) { for (const EmbeddedShader::Data* esd = es->data; RendererType::Count != esd->type; ++esd) { - if (_type == esd->type) + if (_type == esd->type + && 1 < esd->size) { return createShader(makeRef(esd->data, esd->size) ); } @@ -506,7 +482,6 @@ namespace bgfx return handle; } - #include "charset.h" void charsetFillTexture(const uint8_t* _charset, uint8_t* _rgba, uint32_t _height, uint32_t _pitch, uint32_t _bpp) @@ -519,7 +494,7 @@ namespace bgfx for (uint32_t xx = 0; xx < 8; ++xx) { uint8_t bit = 1<<(7-xx); - memset(&pix[xx*_bpp], _charset[ii*_height+yy]&bit ? 255 : 0, _bpp); + bx::memSet(&pix[xx*_bpp], _charset[ii*_height+yy]&bit ? 255 : 0, _bpp); } pix += _pitch; @@ -527,6 +502,80 @@ namespace bgfx } } + static uint8_t parseAttrTo(char*& _ptr, char _to, uint8_t _default) + { + const char* str = bx::strnchr(_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); + + uint8_t attr = uint8_t(atoi(tmp) ); + _ptr += len+1; + return attr; + } + + return _default; + } + + static uint8_t parseAttr(char*& _ptr, uint8_t _default) + { + char* ptr = _ptr; + if (*ptr++ != '[') + { + return _default; + } + + if (0 == bx::strncmp(ptr, "0m", 2) ) + { + _ptr = ptr + 2; + return _default; + } + + uint8_t fg = parseAttrTo(ptr, ';', _default & 0xf); + uint8_t bg = parseAttrTo(ptr, 'm', _default >> 4); + + uint8_t attr = (bg<<4) | fg; + _ptr = ptr; + return attr; + } + + void TextVideoMem::printfVargs(uint16_t _x, uint16_t _y, uint8_t _attr, const char* _format, va_list _argList) + { + if (_x < m_width && _y < m_height) + { + va_list argListCopy; + va_copy(argListCopy, _argList); + uint32_t num = bx::vsnprintf(NULL, 0, _format, argListCopy) + 1; + char* temp = (char*)alloca(num); + va_copy(argListCopy, _argList); + num = bx::vsnprintf(temp, num, _format, argListCopy); + + uint8_t attr = _attr; + uint8_t* mem = &m_mem[(_y*m_width+_x)*2]; + for (uint32_t ii = 0, xx = _x; ii < num && xx < m_width; ++ii) + { + char ch = temp[ii]; + if (BX_UNLIKELY(ch == '\x1b') ) + { + char* ptr = &temp[ii+1]; + attr = parseAttr(ptr, _attr); + ii += uint32_t(ptr - &temp[ii+1]); + } + else + { + mem[0] = ch; + mem[1] = attr; + mem += 2; + ++xx; + } + } + } + } + static const uint32_t numCharsPerBatch = 1024; static const uint32_t numBatchVertices = numCharsPerBatch*4; static const uint32_t numBatchIndices = numCharsPerBatch*6; @@ -562,8 +611,8 @@ namespace bgfx , mem ); - ShaderHandle vsh = createEmbeddedShader(g_caps.rendererType, "vs_debugfont"); - ShaderHandle fsh = createEmbeddedShader(g_caps.rendererType, "fs_debugfont"); + ShaderHandle vsh = createEmbeddedShader(s_embeddedShaders, g_caps.rendererType, "vs_debugfont"); + ShaderHandle fsh = createEmbeddedShader(s_embeddedShaders, g_caps.rendererType, "fs_debugfont"); m_program = createProgram(vsh, fsh, true); @@ -662,7 +711,7 @@ namespace bgfx { (xx )*8.0f, (yy+1)*fontHeight, 0.0f, fg, bg, (ch )*8.0f*texelWidth - texelWidthHalf, ubottom }, }; - memcpy(vertex, vert, sizeof(vert) ); + bx::memCopy(vertex, vert, sizeof(vert) ); vertex += 4; indices[0] = uint16_t(startVertex+0); @@ -702,13 +751,13 @@ namespace bgfx .add(Attrib::Position, 3, AttribType::Float) .end(); - ShaderHandle vsh = createEmbeddedShader(g_caps.rendererType, "vs_clear"); + ShaderHandle vsh = createEmbeddedShader(s_embeddedShaders, g_caps.rendererType, "vs_clear"); for (uint32_t ii = 0, num = g_caps.limits.maxFBAttachments; ii < num; ++ii) { char name[32]; bx::snprintf(name, BX_COUNTOF(name), "fs_clear%d", ii); - ShaderHandle fsh = createEmbeddedShader(g_caps.rendererType, name); + ShaderHandle fsh = createEmbeddedShader(s_embeddedShaders, g_caps.rendererType, name); m_program[ii] = createProgram(vsh, fsh); BX_CHECK(isValid(m_program[ii]), "Failed to create clear quad program."); @@ -761,7 +810,7 @@ namespace bgfx for (uint32_t ii = 0; ii < UniformType::Count; ++ii) { if (NULL != s_uniformTypeName[ii] - && 0 == strcmp(_name, s_uniformTypeName[ii]) ) + && 0 == bx::strncmp(_name, s_uniformTypeName[ii]) ) { return UniformType::Enum(ii); } @@ -795,7 +844,7 @@ namespace bgfx { for (uint32_t ii = 0; ii < PredefinedUniform::Count; ++ii) { - if (0 == strcmp(_name, s_predefinedName[ii]) ) + if (0 == bx::strncmp(_name, s_predefinedName[ii]) ) { return PredefinedUniform::Enum(ii); } @@ -952,15 +1001,21 @@ namespace bgfx void Frame::sort() { - for (uint32_t ii = 0, num = m_num; ii < num; ++ii) + uint8_t viewRemap[BGFX_CONFIG_MAX_VIEWS]; + for (uint32_t ii = 0; ii < BGFX_CONFIG_MAX_VIEWS; ++ii) { - m_sortKeys[ii] = SortKey::remapView(m_sortKeys[ii], m_viewRemap); + viewRemap[m_viewRemap[ii] ] = uint8_t(ii); } - bx::radixSort(m_sortKeys, s_ctx->m_tempKeys, m_sortValues, s_ctx->m_tempValues, m_num); for (uint32_t ii = 0, num = m_num; ii < num; ++ii) { - m_blitKeys[ii] = BlitKey::remapView(m_blitKeys[ii], m_viewRemap); + 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); + + for (uint32_t ii = 0, num = m_numBlitItems; ii < num; ++ii) + { + m_blitKeys[ii] = BlitKey::remapView(m_blitKeys[ii], viewRemap); } bx::radixSort(m_blitKeys, (uint32_t*)&s_ctx->m_tempKeys, m_numBlitItems); } @@ -977,16 +1032,16 @@ namespace bgfx } BGFX_CHECK_RENDER_THREAD(); - if (s_ctx->renderFrame() ) + RenderFrame::Enum result = s_ctx->renderFrame(BGFX_CONFIG_API_SEMAPHORE_TIMEOUT); + if (RenderFrame::Exiting == result) { Context* ctx = s_ctx; ctx->apiSemWait(); s_ctx = NULL; ctx->renderSemPost(); - return RenderFrame::Exiting; } - return RenderFrame::Render; + return result; } BX_CHECK(false, "This call only makes sense if used with multi-threaded renderer."); @@ -1019,7 +1074,7 @@ namespace bgfx void UniformBuffer::writeMarker(const char* _marker) { - uint16_t num = (uint16_t)strlen(_marker)+1; + uint16_t num = (uint16_t)bx::strnlen(_marker)+1; uint32_t opcode = encodeOpcode(bgfx::UniformType::Count, 0, num, true); write(opcode); write(_marker, num); @@ -1065,6 +1120,27 @@ namespace bgfx { BX_TRACE(""); + if (0 < g_caps.numGPUs) + { + BX_TRACE("Detected GPUs (%d):", g_caps.numGPUs); + BX_TRACE("\t +---------------- Index"); + BX_TRACE("\t | +------------- Device ID"); + BX_TRACE("\t | | +-------- Vendor ID"); + for (uint32_t ii = 0; ii < g_caps.numGPUs; ++ii) + { + const Caps::GPU& gpu = g_caps.gpu[ii]; + BX_UNUSED(gpu); + + BX_TRACE("\t %d: %04x %04x" + , ii + , gpu.deviceId + , gpu.vendorId + ); + } + + BX_TRACE(""); + } + RendererType::Enum renderers[RendererType::Count]; uint8_t num = getSupportedRenderers(BX_COUNTOF(renderers), renderers); @@ -1213,8 +1289,12 @@ namespace bgfx TextureFormat::ETC2, TextureFormat::ETC2A, TextureFormat::ETC2A1, + TextureFormat::PTC12, TextureFormat::PTC14, + TextureFormat::PTC12A, TextureFormat::PTC14A, + TextureFormat::PTC22, + TextureFormat::PTC24, TextureFormat::BGRA8, // GL doesn't support BGRA8 without extensions. TextureFormat::RGBA8, // D3D9 doesn't support RGBA8 }; @@ -1381,7 +1461,7 @@ namespace bgfx #if BGFX_CONFIG_MULTITHREADED // Render thread shutdown sequence. renderSemWait(); // Wait for previous frame. - gameSemPost(); // OK to set context to NULL. + apiSemPost(); // OK to set context to NULL. // s_ctx is NULL here. renderSemWait(); // In RenderFrame::Exiting state. @@ -1393,7 +1473,7 @@ namespace bgfx m_render->destroy(); #endif // BGFX_CONFIG_MULTITHREADED - memset(&g_internalData, 0, sizeof(InternalData) ); + bx::memSet(&g_internalData, 0, sizeof(InternalData) ); s_ctx = NULL; m_submit->destroy(); @@ -1437,6 +1517,12 @@ namespace bgfx destroyDynamicVertexBufferInternal(m_freeDynamicVertexBufferHandle[ii]); } m_numFreeDynamicVertexBufferHandles = 0; + + for (uint16_t ii = 0, num = m_numFreeOcclusionQueryHandles; ii < num; ++ii) + { + m_occlusionQueryHandle.free(m_freeOcclusionQueryHandle[ii].idx); + } + m_numFreeOcclusionQueryHandles = 0; } void Context::freeAllHandles(Frame* _frame) @@ -1511,7 +1597,7 @@ namespace bgfx swap(); // release render thread - gameSemPost(); + apiSemPost(); } void Context::swap() @@ -1521,24 +1607,24 @@ namespace bgfx m_resolution.m_flags &= ~BGFX_RESET_INTERNAL_FORCE; m_submit->m_debug = m_debug; - memcpy(m_submit->m_viewRemap, m_viewRemap, sizeof(m_viewRemap) ); - memcpy(m_submit->m_fb, m_fb, sizeof(m_fb) ); - memcpy(m_submit->m_clear, m_clear, sizeof(m_clear) ); - memcpy(m_submit->m_rect, m_rect, sizeof(m_rect) ); - memcpy(m_submit->m_scissor, m_scissor, sizeof(m_scissor) ); - memcpy(m_submit->m_view, m_view, sizeof(m_view) ); - memcpy(m_submit->m_proj, m_proj, sizeof(m_proj) ); - memcpy(m_submit->m_viewFlags, m_viewFlags, sizeof(m_viewFlags) ); + 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; - memcpy(m_submit->m_colorPalette, m_clearColor, sizeof(m_clearColor) ); + bx::memCopy(m_submit->m_colorPalette, m_clearColor, sizeof(m_clearColor) ); } m_submit->finish(); bx::xchg(m_render, m_submit); - memcpy(m_render->m_occlusion, m_submit->m_occlusion, sizeof(m_submit->m_occlusion) ); + bx::memCopy(m_render->m_occlusion, m_submit->m_occlusion, sizeof(m_submit->m_occlusion) ); if (!BX_ENABLED(BGFX_CONFIG_MULTITHREADED) || m_singleThreaded) @@ -1549,7 +1635,7 @@ namespace bgfx m_frames++; m_submit->start(); - memset(m_seq, 0, sizeof(m_seq) ); + bx::memSet(m_seq, 0, sizeof(m_seq) ); freeAllHandles(m_submit); m_submit->resetFreeHandles(); @@ -1564,7 +1650,7 @@ namespace bgfx return m_uniformRef[_handle.idx].m_name.getPtr(); } - bool Context::renderFrame() + RenderFrame::Enum Context::renderFrame(int32_t _msecs) { BGFX_PROFILER_SCOPE(bgfx, render_frame, 0xff2040ff); @@ -1576,7 +1662,7 @@ namespace bgfx m_flipped = true; } - if (apiSemWait(BGFX_CONFIG_API_SEMAPHORE_TIMEOUT) ) + if (apiSemWait(_msecs) ) { rendererExecCommands(m_render->m_cmdPre); if (m_rendererInitialized) @@ -1596,8 +1682,15 @@ namespace bgfx m_flipped = true; } } + else + { + return RenderFrame::Timeout; + } - return m_exit; + return m_exit + ? RenderFrame::Exiting + : RenderFrame::Render + ; } void rendererUpdateUniforms(RendererContextI* _renderCtx, UniformBuffer* _uniformBuffer, uint32_t _begin, uint32_t _end) @@ -1769,7 +1862,7 @@ namespace bgfx }; OSVERSIONINFOEXA ovi; - memset(&ovi, 0, sizeof(ovi) ); + bx::memSet(&ovi, 0, sizeof(ovi) ); ovi.dwOSVersionInfoSize = sizeof(ovi); // _WIN32_WINNT_WINBLUE 0x0603 // _WIN32_WINNT_WIN8 0x0602 @@ -1863,7 +1956,7 @@ namespace bgfx } } - qsort(scores, numScores, sizeof(int32_t), compareDescending); + bx::quickSort(scores, numScores, sizeof(int32_t), compareDescending); RendererContextI* renderCtx = NULL; for (uint32_t ii = 0; ii < numScores; ++ii) @@ -2358,14 +2451,17 @@ namespace bgfx } break; - case CommandBuffer::SaveScreenShot: + case CommandBuffer::RequestScreenShot: { + FrameBufferHandle handle; + _cmdbuf.read(handle); + uint16_t len; _cmdbuf.read(len); const char* filePath = (const char*)_cmdbuf.skip(len); - m_renderCtx->saveScreenShot(filePath); + m_renderCtx->requestScreenShot(handle, filePath); } break; @@ -2383,6 +2479,15 @@ namespace bgfx } break; + case CommandBuffer::InvalidateOcclusionQuery: + { + OcclusionQueryHandle handle; + _cmdbuf.read(handle); + + m_renderCtx->invalidateOcclusionQuery(handle); + } + break; + default: BX_CHECK(false, "Invalid command: %d", command); break; @@ -2492,7 +2597,7 @@ namespace bgfx goto error; } - memset(&g_caps, 0, sizeof(g_caps) ); + bx::memSet(&g_caps, 0, sizeof(g_caps) ); g_caps.limits.maxDrawCalls = BGFX_CONFIG_MAX_DRAW_CALLS; g_caps.limits.maxBlits = BGFX_CONFIG_MAX_BLIT_ITEMS; g_caps.limits.maxViews = BGFX_CONFIG_MAX_VIEWS; @@ -2508,7 +2613,7 @@ namespace bgfx g_caps.limits.maxDynamicIndexBuffers = BGFX_CONFIG_MAX_DYNAMIC_INDEX_BUFFERS; g_caps.limits.maxDynamicVertexBuffers = BGFX_CONFIG_MAX_DYNAMIC_VERTEX_BUFFERS; g_caps.limits.maxUniforms = BGFX_CONFIG_MAX_UNIFORMS; - g_caps.limits.maxOcclusionQueries = BGFX_CONFIG_MAX_OCCUSION_QUERIES; + g_caps.limits.maxOcclusionQueries = BGFX_CONFIG_MAX_OCCLUSION_QUERIES; g_caps.limits.maxFBAttachments = 1; g_caps.vendorId = _vendorId; @@ -2639,7 +2744,7 @@ error: { BX_CHECK(0 < _size, "Invalid memory operation. _size is 0."); const Memory* mem = alloc(_size); - memcpy(mem->data, _data, _size); + bx::memCopy(mem->data, _data, _size); return mem; } @@ -2793,34 +2898,26 @@ error: s_ctx->destroyDynamicVertexBuffer(_handle); } - bool checkAvailTransientIndexBuffer(uint32_t _num) + uint32_t getAvailTransientIndexBuffer(uint32_t _num) { BGFX_CHECK_MAIN_THREAD(); BX_CHECK(0 < _num, "Requesting 0 indices."); - return s_ctx->checkAvailTransientIndexBuffer(_num); + return s_ctx->getAvailTransientIndexBuffer(_num); } - bool checkAvailTransientVertexBuffer(uint32_t _num, const VertexDecl& _decl) + 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."); - return s_ctx->checkAvailTransientVertexBuffer(_num, _decl.m_stride); + return s_ctx->getAvailTransientVertexBuffer(_num, _decl.m_stride); } - bool checkAvailInstanceDataBuffer(uint32_t _num, uint16_t _stride) + uint32_t getAvailInstanceDataBuffer(uint32_t _num, uint16_t _stride) { BGFX_CHECK_MAIN_THREAD(); BX_CHECK(0 < _num, "Requesting 0 instances."); - return s_ctx->checkAvailTransientVertexBuffer(_num, _stride); - } - - bool checkAvailTransientBuffers(uint32_t _numVertices, const VertexDecl& _decl, uint32_t _numIndices) - { - BX_CHECK(0 != _decl.m_stride, "Invalid VertexDecl."); - return checkAvailTransientVertexBuffer(_numVertices, _decl) - && checkAvailTransientIndexBuffer(_numIndices) - ; + return s_ctx->getAvailTransientVertexBuffer(_num, _stride); } void allocTransientIndexBuffer(TransientIndexBuffer* _tib, uint32_t _num) @@ -2851,7 +2948,8 @@ error: bool allocTransientBuffers(bgfx::TransientVertexBuffer* _tvb, const bgfx::VertexDecl& _decl, uint32_t _numVertices, bgfx::TransientIndexBuffer* _tib, uint32_t _numIndices) { - if (checkAvailTransientBuffers(_numVertices, _decl, _numIndices) ) + if (_numVertices == getAvailTransientVertexBuffer(_numVertices, _decl) + && _numIndices == getAvailTransientIndexBuffer(_numIndices) ) { allocTransientVertexBuffer(_tvb, _numVertices, _decl); allocTransientIndexBuffer(_tib, _numIndices); @@ -2928,50 +3026,117 @@ error: s_ctx->destroyProgram(_handle); } - void calcTextureSize(TextureInfo& _info, uint16_t _width, uint16_t _height, uint16_t _depth, bool _cubeMap, bool _hasMips, uint16_t _numLayers, TextureFormat::Enum _format) + static void isTextureValid(uint16_t _depth, bool _cubeMap, uint16_t _numLayers, TextureFormat::Enum _format, uint32_t _flags, bx::Error* _err) { - const ImageBlockInfo& blockInfo = getBlockInfo(_format); - const uint8_t bpp = blockInfo.bitsPerPixel; - const uint16_t blockWidth = blockInfo.blockWidth; - const uint16_t blockHeight = blockInfo.blockHeight; - const uint16_t minBlockX = blockInfo.minBlockX; - const uint16_t minBlockY = blockInfo.minBlockY; + BX_ERROR_SCOPE(_err); - _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); - const uint8_t numMips = calcNumMips(_hasMips, _width, _height, _depth); - const uint32_t sides = _cubeMap ? 6 : 1; + const bool is3DTexture = 1 < _depth; - uint32_t width = _width; - uint32_t height = _height; - uint32_t depth = _depth; - uint32_t size = 0; - - for (uint32_t lod = 0; lod < numMips; ++lod) + if (_cubeMap && is3DTexture) { - 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); - - size += width*height*depth*bpp/8 * sides; - - width >>= 1; - height >>= 1; - depth >>= 1; + _err->setError(BGFX_ERROR_TEXTURE_VALIDATION + , "Texture can't be depth and cube map at the same time." + ); + return; } - size *= _numLayers; + if (is3DTexture + && 0 == (g_caps.supported & BGFX_CAPS_TEXTURE_3D) ) + { + _err->setError(BGFX_ERROR_TEXTURE_VALIDATION + , "Texture3D is not supported! " + "Use bgfx::getCaps to check BGFX_CAPS_TEXTURE_3D backend renderer capabilities." + ); + return; + } - _info.format = _format; - _info.width = _width; - _info.height = _height; - _info.depth = _depth; - _info.numMips = numMips; - _info.numLayers = _numLayers; - _info.cubeMap = _cubeMap; - _info.storageSize = size; - _info.bitsPerPixel = bpp; + if (0 != (_flags & BGFX_TEXTURE_RT_MASK) + && 0 != (_flags & BGFX_TEXTURE_READ_BACK) ) + { + _err->setError(BGFX_ERROR_TEXTURE_VALIDATION + , "Can't create render target with BGFX_TEXTURE_READ_BACK flag." + ); + return; + } + + if (1 < _numLayers + && 0 == (g_caps.supported & BGFX_CAPS_TEXTURE_2D_ARRAY) ) + { + _err->setError(BGFX_ERROR_TEXTURE_VALIDATION + , "Texture array is not supported! " + "Use bgfx::getCaps to check BGFX_CAPS_TEXTURE_2D_ARRAY backend renderer capabilities." + ); + return; + } + + bool formatSupported = 0 != (g_caps.formats[_format] & (0 + | BGFX_CAPS_FORMAT_TEXTURE_2D + | BGFX_CAPS_FORMAT_TEXTURE_2D_EMULATED + | BGFX_CAPS_FORMAT_TEXTURE_2D_SRGB + ) ); + uint16_t srgbCaps = BGFX_CAPS_FORMAT_TEXTURE_2D_SRGB; + + if (_cubeMap) + { + formatSupported = 0 != (g_caps.formats[_format] & (0 + | BGFX_CAPS_FORMAT_TEXTURE_CUBE + | BGFX_CAPS_FORMAT_TEXTURE_CUBE_EMULATED + | BGFX_CAPS_FORMAT_TEXTURE_CUBE_SRGB + ) ); + srgbCaps = BGFX_CAPS_FORMAT_TEXTURE_CUBE_SRGB; + } + else if (is3DTexture) + { + formatSupported = 0 != (g_caps.formats[_format] & (0 + | BGFX_CAPS_FORMAT_TEXTURE_3D + | BGFX_CAPS_FORMAT_TEXTURE_3D_EMULATED + | BGFX_CAPS_FORMAT_TEXTURE_3D_SRGB + ) ); + srgbCaps = BGFX_CAPS_FORMAT_TEXTURE_3D_SRGB; + } + + if (!formatSupported) + { + _err->setError(BGFX_ERROR_TEXTURE_VALIDATION + , "Texture format is not supported! " + "Use bgfx::isTextureValid to check support for texture format before creating it." + ); + return; + } + + if (0 != (_flags & BGFX_TEXTURE_MSAA_SAMPLE) + && 0 == (g_caps.supported & BGFX_CAPS_FORMAT_TEXTURE_MSAA) ) + { + _err->setError(BGFX_ERROR_TEXTURE_VALIDATION + , "MSAA sampling for this texture format is not supported." + ); + return; + } + + if (0 != (_flags & BGFX_TEXTURE_SRGB) + && 0 == (g_caps.supported & srgbCaps & (0 + | BGFX_CAPS_FORMAT_TEXTURE_2D_SRGB + | BGFX_CAPS_FORMAT_TEXTURE_3D_SRGB + | BGFX_CAPS_FORMAT_TEXTURE_CUBE_SRGB + ) ) ) + { + _err->setError(BGFX_ERROR_TEXTURE_VALIDATION + , "sRGB sampling for this texture format is not supported." + ); + return; + } + } + + bool isTextureValid(uint16_t _depth, bool _cubeMap, uint16_t _numLayers, TextureFormat::Enum _format, uint32_t _flags) + { + bx::Error err; + isTextureValid(_depth, _cubeMap, _numLayers, _format, _flags, &err); + return err.isOk(); + } + + 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); } TextureHandle createTexture(const Memory* _mem, uint32_t _flags, uint8_t _skip, TextureInfo* _info) @@ -3003,18 +3168,12 @@ error: { BGFX_CHECK_MAIN_THREAD(); - BX_CHECK(0 == (_flags & BGFX_TEXTURE_RT_MASK) || 0 == (_flags & BGFX_TEXTURE_READ_BACK) - , "Can't create render target with BGFX_TEXTURE_READ_BACK flag." - ); - BX_CHECK(0 != (g_caps.formats[_format] & (BGFX_CAPS_FORMAT_TEXTURE_2D|BGFX_CAPS_FORMAT_TEXTURE_2D_EMULATED|BGFX_CAPS_FORMAT_TEXTURE_2D_SRGB) ) - , "Format %s is not supported for 2D texture. Use bgfx::getCaps to check available texture formats." - , getName(_format) - ); - BX_CHECK(false - || 1 >= _numLayers - || 0 != (g_caps.supported & BGFX_CAPS_TEXTURE_2D_ARRAY) - , "_numLayers is %d. Texture 2D array is not supported! Use bgfx::getCaps to check BGFX_CAPS_TEXTURE_2D_ARRAY backend renderer capabilities." + bx::Error err; + isTextureValid(0, false, _numLayers, _format, _flags, &err); + BX_CHECK(err.isOk(), "%s (layers %d, format %s)" + , err.getMessage().getPtr() , _numLayers + , getName(_format) ); if (BackbufferRatio::Count != _ratio) @@ -3075,11 +3234,10 @@ 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(); - BGFX_CHECK_CAPS(BGFX_CAPS_TEXTURE_3D, "Texture3D is not supported!"); - BX_CHECK(0 != (g_caps.formats[_format] & (BGFX_CAPS_FORMAT_TEXTURE_3D|BGFX_CAPS_FORMAT_TEXTURE_3D_EMULATED|BGFX_CAPS_FORMAT_TEXTURE_3D_SRGB) ) - , "Format %s is not supported for 3D texture. Use bgfx::getCaps to check available texture formats." - , getName(_format) - ); + + bx::Error err; + isTextureValid(_depth, false, 1, _format, _flags, &err); + BX_CHECK(err.isOk(), "%s", err.getMessage().getPtr() ); const uint8_t numMips = calcNumMips(_hasMips, _width, _height, _depth); @@ -3119,16 +3277,10 @@ 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_CHECK(0 != (g_caps.formats[_format] & (BGFX_CAPS_FORMAT_TEXTURE_CUBE|BGFX_CAPS_FORMAT_TEXTURE_CUBE_EMULATED|BGFX_CAPS_FORMAT_TEXTURE_CUBE_SRGB) ) - , "Format %s is not supported for cube texture. Use bgfx::getCaps to check available texture formats." - , getName(_format) - ); - BX_CHECK(false - || 1 >= _numLayers - || 0 != (g_caps.supported & BGFX_CAPS_TEXTURE_CUBE_ARRAY) - , "_numLayers is %d. Texture cube array is not supported! Use bgfx::getCaps to check BGFX_CAPS_TEXTURE_CUBE_ARRAY backend renderer capabilities." - , _numLayers - ); + + bx::Error err; + isTextureValid(0, true, _numLayers, _format, _flags, &err); + BX_CHECK(err.isOk(), "%s", err.getMessage().getPtr() ); const uint8_t numMips = calcNumMips(_hasMips, _size, _size); _numLayers = bx::uint16_max(_numLayers, 1); @@ -3229,14 +3381,6 @@ error: return s_ctx->readTexture(_handle, _data, _mip); } - uint32_t readTexture(FrameBufferHandle _handle, uint8_t _attachment, void* _data) - { - 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, _attachment, _data); - } - FrameBufferHandle createFrameBuffer(uint16_t _width, uint16_t _height, TextureFormat::Enum _format, uint32_t _textureFlags) { _textureFlags |= _textureFlags&BGFX_TEXTURE_RT_MSAA_MASK ? 0 : BGFX_TEXTURE_RT; @@ -3283,6 +3427,12 @@ error: return s_ctx->createFrameBuffer(_nwh, _width, _height, _depthFormat); } + TextureHandle getTexture(FrameBufferHandle _handle, uint8_t _attachment) + { + BGFX_CHECK_MAIN_THREAD(); + return s_ctx->getTexture(_handle, _attachment); + } + void destroyFrameBuffer(FrameBufferHandle _handle) { BGFX_CHECK_MAIN_THREAD(); @@ -3314,11 +3464,11 @@ error: return s_ctx->createOcclusionQuery(); } - OcclusionQueryResult::Enum getResult(OcclusionQueryHandle _handle) + 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); + return s_ctx->getResult(_handle, _result); } void destroyOcclusionQuery(OcclusionQueryHandle _handle) @@ -3434,11 +3584,11 @@ error: s_ctx->setViewTransform(_id, _view, _projL, _flags, _projR); } - void setViewRemap(uint8_t _id, uint8_t _num, const void* _remap) + void setViewOrder(uint8_t _id, uint8_t _num, const void* _order) { BGFX_CHECK_MAIN_THREAD(); BX_CHECK(checkView(_id), "Invalid view id: %d", _id); - s_ctx->setViewRemap(_id, _num, _remap); + s_ctx->setViewOrder(_id, _num, _order); } void resetView(uint8_t _id) @@ -3605,14 +3755,6 @@ error: s_ctx->setTexture(_stage, _sampler, _handle, _flags); } - void setTexture(uint8_t _stage, UniformHandle _sampler, FrameBufferHandle _handle, uint8_t _attachment, 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); - BX_CHECK(_attachment < g_caps.limits.maxFBAttachments, "Frame buffer attachment index %d is invalid.", _attachment); - s_ctx->setTexture(_stage, _sampler, _handle, _attachment, _flags); - } - uint32_t touch(uint8_t _id) { ProgramHandle handle = BGFX_INVALID_HANDLE; @@ -3639,6 +3781,7 @@ error: uint32_t submit(uint8_t _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); } @@ -3684,23 +3827,18 @@ error: s_ctx->setImage(_stage, _sampler, _handle, _mip, _access, _format); } - void setImage(uint8_t _stage, UniformHandle _sampler, FrameBufferHandle _handle, uint8_t _attachment, 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); - BX_CHECK(_attachment < g_caps.limits.maxFBAttachments, "Frame buffer attachment index %d is invalid.", _attachment); - s_ctx->setImage(_stage, _sampler, _handle, _attachment, _access, _format); - } - uint32_t dispatch(uint8_t _id, ProgramHandle _handle, uint16_t _numX, uint16_t _numY, uint16_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); } uint32_t dispatch(uint8_t _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); } @@ -3715,11 +3853,6 @@ error: blit(_id, _dst, 0, _dstX, _dstY, 0, _src, 0, _srcX, _srcY, 0, _width, _height, 0); } - void blit(uint8_t _id, TextureHandle _dst, uint16_t _dstX, uint16_t _dstY, FrameBufferHandle _src, uint8_t _attachment, uint16_t _srcX, uint16_t _srcY, uint16_t _width, uint16_t _height) - { - blit(_id, _dst, 0, _dstX, _dstY, 0, _src, _attachment, 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) { BGFX_CHECK_MAIN_THREAD(); @@ -3727,23 +3860,15 @@ error: s_ctx->blit(_id, _dst, _dstMip, _dstX, _dstY, _dstZ, _src, _srcMip, _srcX, _srcY, _srcZ, _width, _height, _depth); } - void blit(uint8_t _id, TextureHandle _dst, uint8_t _dstMip, uint16_t _dstX, uint16_t _dstY, uint16_t _dstZ, FrameBufferHandle _src, uint8_t _attachment, uint8_t _srcMip, uint16_t _srcX, uint16_t _srcY, uint16_t _srcZ, uint16_t _width, uint16_t _height, uint16_t _depth) + void requestScreenShot(FrameBufferHandle _handle, const char* _filePath) { BGFX_CHECK_MAIN_THREAD(); - BGFX_CHECK_CAPS(BGFX_CAPS_TEXTURE_BLIT, "Texture blit is not supported!"); - BX_CHECK(_attachment < g_caps.limits.maxFBAttachments, "Frame buffer attachment index %d is invalid.", _attachment); - s_ctx->blit(_id, _dst, _dstMip, _dstX, _dstY, _dstZ, _src, _attachment, _srcMip, _srcX, _srcY, _srcZ, _width, _height, _depth); - } - - void saveScreenShot(const char* _filePath) - { - BGFX_CHECK_MAIN_THREAD(); - s_ctx->saveScreenShot(_filePath); + s_ctx->requestScreenShot(_handle, _filePath); } } // namespace bgfx #include -#include +#include #define FLAGS_MASK_TEST(_flags, _mask) ( (_flags) == ( (_flags) & (_mask) ) ) @@ -3945,14 +4070,14 @@ 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(uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src, void* _dst) +BGFX_C_API void bgfx_image_swizzle_bgra8(void* _dst, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src) { - bgfx::imageSwizzleBgra8(_width, _height, _pitch, _src, _dst); + bgfx::imageSwizzleBgra8(_dst, _width, _height, _pitch, _src); } -BGFX_C_API void bgfx_image_rgba8_downsample_2x2(uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src, void* _dst) +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(_width, _height, _pitch, _src, _dst); + bgfx::imageRgba8Downsample2x2(_dst, _width, _height, _pitch, _src); } BGFX_C_API uint8_t bgfx_get_supported_renderers(uint8_t _max, bgfx_renderer_type_t* _enum) @@ -4145,26 +4270,20 @@ BGFX_C_API void bgfx_destroy_dynamic_vertex_buffer(bgfx_dynamic_vertex_buffer_ha bgfx::destroyDynamicVertexBuffer(handle.cpp); } -BGFX_C_API bool bgfx_check_avail_transient_index_buffer(uint32_t _num) +BGFX_C_API uint32_t bgfx_get_avail_transient_index_buffer(uint32_t _num) { - return bgfx::checkAvailTransientIndexBuffer(_num); + return bgfx::getAvailTransientIndexBuffer(_num); } -BGFX_C_API bool bgfx_check_avail_transient_vertex_buffer(uint32_t _num, const bgfx_vertex_decl_t* _decl) +BGFX_C_API uint32_t bgfx_get_avail_transient_vertex_buffer(uint32_t _num, const bgfx_vertex_decl_t* _decl) { const bgfx::VertexDecl& decl = *(const bgfx::VertexDecl*)_decl; - return bgfx::checkAvailTransientVertexBuffer(_num, decl); + return bgfx::getAvailTransientVertexBuffer(_num, decl); } -BGFX_C_API bool bgfx_check_avail_instance_data_buffer(uint32_t _num, uint16_t _stride) +BGFX_C_API uint32_t bgfx_get_avail_instance_data_buffer(uint32_t _num, uint16_t _stride) { - return bgfx::checkAvailInstanceDataBuffer(_num, _stride); -} - -BGFX_C_API bool bgfx_check_avail_transient_buffers(uint32_t _numVertices, const bgfx_vertex_decl_t* _decl, uint32_t _numIndices) -{ - const bgfx::VertexDecl& decl = *(const bgfx::VertexDecl*)_decl; - return bgfx::checkAvailTransientBuffers(_numVertices, decl, _numIndices); + return bgfx::getAvailInstanceDataBuffer(_num, _stride); } BGFX_C_API void bgfx_alloc_transient_index_buffer(bgfx_transient_index_buffer_t* _tib, uint32_t _num) @@ -4244,6 +4363,11 @@ BGFX_C_API void bgfx_destroy_program(bgfx_program_handle_t _handle) bgfx::destroyProgram(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) +{ + return bgfx::isTextureValid(_depth, _cubeMap, _numLayers, bgfx::TextureFormat::Enum(_format), _flags); +} + BGFX_C_API void bgfx_calc_texture_size(bgfx_texture_info_t* _info, uint16_t _width, uint16_t _height, uint16_t _depth, bool _cubeMap, bool _hasMips, uint16_t _numLayers, bgfx_texture_format_t _format) { bgfx::TextureInfo& info = *(bgfx::TextureInfo*)_info; @@ -4310,12 +4434,6 @@ 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 uint32_t bgfx_read_frame_buffer(bgfx_frame_buffer_handle_t _handle, uint8_t _attachment, void* _data) -{ - union { bgfx_frame_buffer_handle_t c; bgfx::FrameBufferHandle cpp; } handle = { _handle }; - return bgfx::readTexture(handle.cpp, _attachment, _data); -} - BGFX_C_API void bgfx_destroy_texture(bgfx_texture_handle_t _handle) { union { bgfx_texture_handle_t c; bgfx::TextureHandle cpp; } handle = { _handle }; @@ -4357,6 +4475,14 @@ BGFX_C_API bgfx_frame_buffer_handle_t bgfx_create_frame_buffer_from_nwh(void* _n return handle.c; } +BGFX_C_API bgfx_texture_handle_t bgfx_get_texture(bgfx_frame_buffer_handle_t _handle, uint8_t _attachment) +{ + union { bgfx_frame_buffer_handle_t c; bgfx::FrameBufferHandle cpp; } handle = { _handle }; + union { bgfx_texture_handle_t c; bgfx::TextureHandle cpp; } textureHandle; + textureHandle.cpp = bgfx::getTexture(handle.cpp, _attachment); + return textureHandle.c; +} + 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 }; @@ -4390,10 +4516,10 @@ BGFX_C_API bgfx_occlusion_query_handle_t bgfx_create_occlusion_query() return handle.c; } -BGFX_C_API bgfx_occlusion_query_result_t bgfx_get_result(bgfx_occlusion_query_handle_t _handle) +BGFX_C_API bgfx_occlusion_query_result_t bgfx_get_result(bgfx_occlusion_query_handle_t _handle, int32_t* _result) { union { bgfx_occlusion_query_handle_t c; bgfx::OcclusionQueryHandle cpp; } handle = { _handle }; - return bgfx_occlusion_query_result_t(bgfx::getResult(handle.cpp) ); + return bgfx_occlusion_query_result_t(bgfx::getResult(handle.cpp, _result) ); } BGFX_C_API void bgfx_destroy_occlusion_query(bgfx_occlusion_query_handle_t _handle) @@ -4458,9 +4584,9 @@ BGFX_C_API void bgfx_set_view_transform_stereo(uint8_t _id, const void* _view, c bgfx::setViewTransform(_id, _view, _projL, _flags, _projR); } -BGFX_C_API void bgfx_set_view_remap(uint8_t _id, uint8_t _num, const void* _remap) +BGFX_C_API void bgfx_set_view_order(uint8_t _id, uint8_t _num, const void* _order) { - bgfx::setViewRemap(_id, _num, _remap); + bgfx::setViewOrder(_id, _num, _order); } BGFX_C_API void bgfx_reset_view(uint8_t _id) @@ -4578,13 +4704,6 @@ 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 void bgfx_set_texture_from_frame_buffer(uint8_t _stage, bgfx_uniform_handle_t _sampler, bgfx_frame_buffer_handle_t _handle, uint8_t _attachment, uint32_t _flags) -{ - union { bgfx_uniform_handle_t c; bgfx::UniformHandle cpp; } sampler = { _sampler }; - union { bgfx_frame_buffer_handle_t c; bgfx::FrameBufferHandle cpp; } handle = { _handle }; - bgfx::setTexture(_stage, sampler.cpp, handle.cpp, _attachment, _flags); -} - BGFX_C_API uint32_t bgfx_touch(uint8_t _id) { return bgfx::touch(_id); @@ -4617,13 +4736,6 @@ BGFX_C_API void bgfx_set_image(uint8_t _stage, bgfx_uniform_handle_t _sampler, b bgfx::setImage(_stage, sampler.cpp, handle.cpp, _mip, bgfx::Access::Enum(_access), bgfx::TextureFormat::Enum(_format) ); } -BGFX_C_API void bgfx_set_image_from_frame_buffer(uint8_t _stage, bgfx_uniform_handle_t _sampler, bgfx_frame_buffer_handle_t _handle, uint8_t _attachment, bgfx_access_t _access, bgfx_texture_format_t _format) -{ - union { bgfx_uniform_handle_t c; bgfx::UniformHandle cpp; } sampler = { _sampler }; - union { bgfx_frame_buffer_handle_t c; bgfx::FrameBufferHandle cpp; } handle = { _handle }; - bgfx::setImage(_stage, sampler.cpp, handle.cpp, _attachment, bgfx::Access::Enum(_access), bgfx::TextureFormat::Enum(_format) ); -} - BGFX_C_API void bgfx_set_compute_index_buffer(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 }; @@ -4679,16 +4791,10 @@ BGFX_C_API void bgfx_blit(uint8_t _id, bgfx_texture_handle_t _dst, uint8_t _dstM bgfx::blit(_id, dst.cpp, _dstMip, _dstX, _dstY, _dstZ, src.cpp, _srcMip, _srcX, _srcY, _srcZ, _width, _height, _depth); } -BGFX_C_API void bgfx_blit_frame_buffer(uint8_t _id, bgfx_texture_handle_t _dst, uint8_t _dstMip, uint16_t _dstX, uint16_t _dstY, uint16_t _dstZ, bgfx_frame_buffer_handle_t _src, uint8_t _attachment, 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 _handle, const char* _filePath) { - union { bgfx_texture_handle_t c; bgfx::TextureHandle cpp; } dst = { _dst }; - union { bgfx_frame_buffer_handle_t c; bgfx::FrameBufferHandle cpp; } src = { _src }; - bgfx::blit(_id, dst.cpp, _dstMip, _dstX, _dstY, _dstZ, src.cpp, _attachment, _srcMip, _srcX, _srcY, _srcZ, _width, _height, _depth); -} - -BGFX_C_API void bgfx_save_screen_shot(const char* _filePath) -{ - bgfx::saveScreenShot(_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() @@ -4771,10 +4877,9 @@ BGFX_C_API bgfx_interface_vtbl_t* bgfx_get_interface(uint32_t _version) 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(check_avail_transient_index_buffer) \ - BGFX_IMPORT_FUNC(check_avail_transient_vertex_buffer) \ - BGFX_IMPORT_FUNC(check_avail_instance_data_buffer) \ - BGFX_IMPORT_FUNC(check_avail_transient_buffers) \ + 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) \ @@ -4787,6 +4892,7 @@ BGFX_C_API bgfx_interface_vtbl_t* bgfx_get_interface(uint32_t _version) 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) \ @@ -4797,12 +4903,12 @@ BGFX_C_API bgfx_interface_vtbl_t* bgfx_get_interface(uint32_t _version) BGFX_IMPORT_FUNC(update_texture_3d) \ BGFX_IMPORT_FUNC(update_texture_cube) \ BGFX_IMPORT_FUNC(read_texture) \ - BGFX_IMPORT_FUNC(read_frame_buffer) \ 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) \ @@ -4820,7 +4926,7 @@ BGFX_C_API bgfx_interface_vtbl_t* bgfx_get_interface(uint32_t _version) 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_remap) \ + BGFX_IMPORT_FUNC(set_view_order) \ BGFX_IMPORT_FUNC(set_marker) \ BGFX_IMPORT_FUNC(set_state) \ BGFX_IMPORT_FUNC(set_condition) \ @@ -4841,13 +4947,11 @@ BGFX_C_API bgfx_interface_vtbl_t* bgfx_get_interface(uint32_t _version) 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(set_texture_from_frame_buffer) \ 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_image_from_frame_buffer) \ BGFX_IMPORT_FUNC(set_compute_index_buffer) \ BGFX_IMPORT_FUNC(set_compute_vertex_buffer) \ BGFX_IMPORT_FUNC(set_compute_dynamic_index_buffer) \ @@ -4857,7 +4961,7 @@ BGFX_C_API bgfx_interface_vtbl_t* bgfx_get_interface(uint32_t _version) BGFX_IMPORT_FUNC(dispatch_indirect) \ BGFX_IMPORT_FUNC(discard) \ BGFX_IMPORT_FUNC(blit) \ - BGFX_IMPORT_FUNC(save_screen_shot) + 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 f6dd754..641dda8 100644 --- a/3rdparty/bgfx/src/bgfx_compute.sh +++ b/3rdparty/bgfx/src/bgfx_compute.sh @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -57,7 +57,7 @@ _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; } + 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) @@ -188,31 +188,31 @@ uint atomicCompSwap(uint _mem, uint _compare, uint _data) #endif // BGFX_SHADER_LANGUAGE_HLSL #define dispatchIndirect(_buffer \ - , _offset \ - , _numX \ - , _numY \ - , _numZ \ - ) \ + , _offset \ + , _numX \ + , _numY \ + , _numZ \ + ) \ _buffer[_offset*2+0] = uvec4(_numX, _numY, _numZ, 0u) #define drawIndirect(_buffer \ - , _offset \ - , _numVertices \ - , _numInstances \ - , _startVertex \ + , _offset \ + , _numVertices \ + , _numInstances \ + , _startVertex \ , _startInstance \ - ) \ + ) \ _buffer[_offset*2+0] = uvec4(_numVertices, _numInstances, _startVertex, _startInstance) #define drawIndexedIndirect(_buffer \ - , _offset \ - , _numIndices \ - , _numInstances \ - , _startIndex \ - , _startVertex \ - , _startInstance \ - ) \ - _buffer[_offset*2+0] = uvec4(_numIndices, _numInstances, _startIndex, _startInstance); \ + , _offset \ + , _numIndices \ + , _numInstances \ + , _startIndex \ + , _startVertex \ + , _startInstance \ + ) \ + _buffer[_offset*2+0] = uvec4(_numIndices, _numInstances, _startIndex, _startVertex); \ _buffer[_offset*2+1] = uvec4(_startInstance, 0u, 0u, 0u) #endif // __cplusplus diff --git a/3rdparty/bgfx/src/bgfx_p.h b/3rdparty/bgfx/src/bgfx_p.h index 070f921..1ac2e15 100644 --- a/3rdparty/bgfx/src/bgfx_p.h +++ b/3rdparty/bgfx/src/bgfx_p.h @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -23,11 +23,6 @@ #include "config.h" #include -#include // va_list -#include -#include -#include -#include // Check handle, cannot be bgfx::invalidHandle and must be valid. #define BGFX_CHECK_HANDLE(_desc, _handleAlloc, _handle) \ @@ -86,9 +81,6 @@ namespace bgfx void trace(const char* _filePath, uint16_t _line, const char* _format, ...); - void dbgPrintfVargs(const char* _format, va_list _argList); - void dbgPrintf(const char* _format, ...); - inline bool operator==(const VertexDeclHandle& _lhs, const VertexDeclHandle& _rhs) { return _lhs.idx == _rhs.idx; } inline bool operator==(const UniformHandle& _lhs, const UniformHandle& _rhs) { return _lhs.idx == _rhs.idx; } } @@ -130,7 +122,7 @@ namespace bgfx #include #include #include -#include +#include #include #include #include @@ -139,7 +131,7 @@ namespace bgfx #include #include -#include +#include #include "image.h" #include "shader.h" @@ -178,6 +170,7 @@ namespace stl = tinystl; # include # include # include +namespace stl = std; #endif // BGFX_CONFIG_USE_TINYSTL #if BX_PLATFORM_ANDROID @@ -278,6 +271,18 @@ namespace bgfx struct Rect { + Rect() + { + } + + Rect(uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height) + : m_x(_x) + , m_y(_y) + , m_width(_width) + , m_height(_height) + { + } + void clear() { m_x = @@ -292,7 +297,22 @@ namespace bgfx return UINT64_C(0) == ui64; } - void intersect(const Rect& _a, const Rect& _b) + bool isZeroArea() const + { + return 0 == m_width + || 0 == m_height + ; + } + + void set(uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height) + { + m_x = _x; + m_y = _y; + m_width = _width; + m_height = _height; + } + + void setIntersect(const Rect& _a, const Rect& _b) { using namespace bx; const uint16_t sx = uint16_max(_a.m_x, _b.m_x); @@ -305,6 +325,11 @@ namespace bgfx m_height = (uint16_t)uint32_satsub(ey, sy); } + void intersect(const Rect& _a) + { + setIntersect(*this, _a); + } + uint16_t m_x; uint16_t m_y; uint16_t m_width; @@ -416,7 +441,7 @@ namespace bgfx if (size < m_size) { - memset(&m_mem[size], 0, m_size-size); + bx::memSet(&m_mem[size], 0, m_size-size); } } } @@ -432,23 +457,7 @@ namespace bgfx } } - void printfVargs(uint16_t _x, uint16_t _y, uint8_t _attr, const char* _format, va_list _argList) - { - if (_x < m_width && _y < m_height) - { - char* temp = (char*)alloca(m_width); - - uint32_t num = bx::vsnprintf(temp, m_width, _format, _argList); - - uint8_t* mem = &m_mem[(_y*m_width+_x)*2]; - for (uint32_t ii = 0, xx = _x; ii < num && xx < m_width; ++ii, ++xx) - { - mem[0] = temp[ii]; - mem[1] = _attr; - mem += 2; - } - } - } + void printfVargs(uint16_t _x, uint16_t _y, uint8_t _attr, const char* _format, va_list _argList); void printf(uint16_t _x, uint16_t _y, uint8_t _attr, const char* _format, ...) { @@ -488,7 +497,6 @@ namespace bgfx TransientIndexBuffer* m_ib; VertexDecl m_decl; ProgramHandle m_program; - bool m_init; }; struct RendererContextI; @@ -624,6 +632,7 @@ namespace bgfx CreateFrameBuffer, CreateUniform, UpdateViewName, + InvalidateOcclusionQuery, End, RendererShutdownEnd, DestroyVertexDecl, @@ -637,14 +646,14 @@ namespace bgfx DestroyFrameBuffer, DestroyUniform, ReadTexture, - SaveScreenShot, + RequestScreenShot, }; void write(const void* _data, uint32_t _size) { BX_CHECK(m_size == BGFX_CONFIG_MAX_COMMAND_BUFFER_SIZE, "Called write outside start/finish?"); BX_CHECK(m_pos < m_size, "CommandBuffer::write error (pos: %d, size: %d).", m_pos, m_size); - memcpy(&m_buffer[m_pos], _data, _size); + bx::memCopy(&m_buffer[m_pos], _data, _size); m_pos += _size; } @@ -658,7 +667,7 @@ namespace bgfx void read(void* _data, uint32_t _size) { BX_CHECK(m_pos < m_size, "CommandBuffer::read error (pos: %d, size: %d).", m_pos, m_size); - memcpy(_data, &m_buffer[m_pos], _size); + bx::memCopy(_data, &m_buffer[m_pos], _size); m_pos += _size; } @@ -814,11 +823,11 @@ namespace bgfx return key; } - /// Returns true if item is command. - bool decode(uint64_t _key) + /// Returns true if item is compute command. + bool decode(uint64_t _key, uint8_t _viewRemap[BGFX_CONFIG_MAX_VIEWS]) { m_seq = uint32_t( (_key & SORT_KEY_SEQ_MASK ) >> SORT_KEY_SEQ_SHIFT); - m_view = uint8_t( (_key & SORT_KEY_VIEW_MASK) >> SORT_KEY_VIEW_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); @@ -831,11 +840,9 @@ namespace bgfx return true; // compute } - bool decode(uint64_t _key, uint8_t _viewRemap[BGFX_CONFIG_MAX_VIEWS]) + static uint8_t decodeView(uint64_t _key) { - bool compute = decode(_key); - m_view = _viewRemap[m_view]; - return compute; + return uint8_t( (_key & SORT_KEY_VIEW_MASK) >> SORT_KEY_VIEW_SHIFT); } static uint64_t remapView(uint64_t _key, uint8_t _viewRemap[BGFX_CONFIG_MAX_VIEWS]) @@ -901,7 +908,7 @@ namespace bgfx void setIdentity() { - memset(un.val, 0, sizeof(un.val) ); + bx::memSet(un.val, 0, sizeof(un.val) ); un.val[0] = un.val[5] = un.val[10] = un.val[15] = 1.0f; } }; @@ -924,7 +931,10 @@ namespace bgfx 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; + uint32_t first = m_num < BGFX_CONFIG_MAX_MATRIX_CACHE + ? m_num + : BGFX_CONFIG_MAX_MATRIX_CACHE - 1 + ; m_num += num; *_num = (uint16_t)num; return first; @@ -935,7 +945,7 @@ namespace bgfx if (NULL != _mtx) { uint32_t first = reserve(&_num); - memcpy(&m_cache[first], _mtx, sizeof(Matrix4)*_num); + bx::memCopy(&m_cache[first], _mtx, sizeof(Matrix4)*_num); return first; } @@ -1060,7 +1070,7 @@ namespace bgfx if (m_pos + _size < m_size) { - memcpy(&m_buffer[m_pos], _data, _size); + bx::memCopy(&m_buffer[m_pos], _data, _size); m_pos += _size; } } @@ -1081,7 +1091,7 @@ namespace bgfx uint32_t read() { uint32_t result; - memcpy(&result, read(sizeof(uint32_t) ), sizeof(uint32_t) ); + bx::memCopy(&result, read(sizeof(uint32_t) ), sizeof(uint32_t) ); return result; } @@ -1133,8 +1143,8 @@ namespace bgfx UniformHandle m_handle; }; - class UniformRegistry - { + class UniformRegistry + { public: UniformRegistry() { @@ -1415,7 +1425,7 @@ namespace bgfx term.m_program = invalidHandle; m_sortKeys[BGFX_CONFIG_MAX_DRAW_CALLS] = term.encodeDraw(); m_sortValues[BGFX_CONFIG_MAX_DRAW_CALLS] = BGFX_CONFIG_MAX_DRAW_CALLS; - memset(m_occlusion, 0xff, sizeof(m_occlusion) ); + bx::memSet(m_occlusion, 0xff, sizeof(m_occlusion) ); } ~Frame() @@ -1614,7 +1624,7 @@ namespace bgfx void setInstanceDataBuffer(const InstanceDataBuffer* _idb, uint32_t _num) { - m_draw.m_instanceDataOffset = _idb->offset; + m_draw.m_instanceDataOffset = _idb->offset; m_draw.m_instanceDataStride = _idb->stride; m_draw.m_numInstances = bx::uint32_min(_idb->num, _num); m_draw.m_instanceDataBuffer = _idb->handle; @@ -1715,39 +1725,41 @@ namespace bgfx void sort(); - bool checkAvailTransientIndexBuffer(uint32_t _num) + uint32_t getAvailTransientIndexBuffer(uint32_t _num) { - uint32_t offset = m_iboffset; + 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 == _num; + return num; } uint32_t allocTransientIndexBuffer(uint32_t& _num) { uint32_t offset = bx::strideAlign(m_iboffset, sizeof(uint16_t) ); - m_iboffset = offset + _num*sizeof(uint16_t); - m_iboffset = bx::uint32_min(m_iboffset, BGFX_CONFIG_TRANSIENT_INDEX_BUFFER_SIZE); - _num = (m_iboffset-offset)/sizeof(uint16_t); + uint32_t num = getAvailTransientIndexBuffer(_num); + m_iboffset = offset + num*sizeof(uint16_t); + _num = num; + return offset; } - bool checkAvailTransientVertexBuffer(uint32_t _num, uint16_t _stride) + uint32_t getAvailTransientVertexBuffer(uint32_t _num, uint16_t _stride) { - uint32_t offset = bx::strideAlign(m_vboffset, _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 == _num; + return num; } uint32_t allocTransientVertexBuffer(uint32_t& _num, uint16_t _stride) { uint32_t offset = bx::strideAlign(m_vboffset, _stride); - m_vboffset = offset + _num * _stride; - m_vboffset = bx::uint32_min(m_vboffset, BGFX_CONFIG_TRANSIENT_VERTEX_BUFFER_SIZE); - _num = (m_vboffset-offset)/_stride; + uint32_t num = getAvailTransientVertexBuffer(_num, _stride); + m_vboffset = offset + num * _stride; + _num = num; + return offset; } @@ -1820,7 +1832,7 @@ namespace bgfx Matrix4 m_view[BGFX_CONFIG_MAX_VIEWS]; Matrix4 m_proj[2][BGFX_CONFIG_MAX_VIEWS]; uint8_t m_viewFlags[BGFX_CONFIG_MAX_VIEWS]; - uint8_t m_occlusion[BGFX_CONFIG_MAX_OCCUSION_QUERIES]; + 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]; @@ -1941,8 +1953,8 @@ namespace bgfx void init() { - memset(m_vertexDeclRef, 0, sizeof(m_vertexDeclRef) ); - memset(m_vertexBufferRef, 0xff, sizeof(m_vertexBufferRef) ); + bx::memSet(m_vertexDeclRef, 0, sizeof(m_vertexDeclRef) ); + bx::memSet(m_vertexBufferRef, 0xff, sizeof(m_vertexBufferRef) ); } template @@ -2154,10 +2166,11 @@ namespace bgfx virtual void destroyFrameBuffer(FrameBufferHandle _handle) = 0; virtual void createUniform(UniformHandle _handle, UniformType::Enum _type, uint16_t _num, const char* _name) = 0; virtual void destroyUniform(UniformHandle _handle) = 0; - virtual void saveScreenShot(const char* _filePath) = 0; + virtual void requestScreenShot(FrameBufferHandle _handle, const char* _filePath) = 0; virtual void updateViewName(uint8_t _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 submit(Frame* _render, ClearQuad& _clearQuad, TextVideoMemBlitter& _textVideoMemBlitter) = 0; virtual void blitSetup(TextVideoMemBlitter& _blitter) = 0; virtual void blitRender(TextVideoMemBlitter& _blitter, uint32_t _numIndices) = 0; @@ -2182,6 +2195,7 @@ namespace bgfx , m_submit(&m_frame[BGFX_CONFIG_MULTITHREADED ? 1 : 0]) , m_numFreeDynamicIndexBufferHandles(0) , m_numFreeDynamicVertexBufferHandles(0) + , m_numFreeOcclusionQueryHandles(0) , m_colorPaletteDirty(0) , m_instBufferCount(0) , m_frames(0) @@ -2221,14 +2235,15 @@ namespace bgfx BGFX_API_FUNC(void reset(uint32_t _width, uint32_t _height, uint32_t _flags) ) { - BX_WARN(1 <= int32_t(_width) - && 1 <= int32_t(_height) - , "Frame buffer resolution width or height must be larger than 0 (width %d, height %d)." + BX_WARN(g_caps.limits.maxTextureSize >= _width + && g_caps.limits.maxTextureSize >= _height + , "Frame buffer resolution width or height can't be larger than limits.maxTextureSize %d (width %d, height %d)." + , g_caps.limits.maxTextureSize , _width , _height ); - m_resolution.m_width = bx::uint32_imax(1, _width); - m_resolution.m_height = bx::uint32_imax(1, _height); + m_resolution.m_width = bx::uint32_clamp(_width, 1, g_caps.limits.maxTextureSize); + m_resolution.m_height = bx::uint32_clamp(_height, 1, g_caps.limits.maxTextureSize); m_resolution.m_flags = 0 | _flags | (g_platformDataChangedSinceReset ? BGFX_RESET_INTERNAL_FORCE : 0) @@ -2237,7 +2252,7 @@ namespace bgfx m_flipAfterRender = !!(_flags & BGFX_RESET_FLIP_AFTER_RENDER); - memset(m_fb, 0xff, sizeof(m_fb) ); + bx::memSet(m_fb, 0xff, sizeof(m_fb) ); for (uint16_t ii = 0, num = m_textureHandle.getNumHandles(); ii < num; ++ii) { @@ -2289,7 +2304,14 @@ namespace bgfx BGFX_API_FUNC(const Stats* getPerfStats() ) { - return &m_submit->m_perfStats; + Stats& stats = m_submit->m_perfStats; + const Resolution& resolution = m_submit->m_resolution; + stats.width = uint16_t(resolution.m_width); + stats.height = uint16_t(resolution.m_height); + const TextVideoMem* tvm = m_submit->m_textVideoMem; + stats.textWidth = tvm->m_width; + stats.textHeight = tvm->m_height; + return &stats; } BGFX_API_FUNC(IndexBufferHandle createIndexBuffer(const Memory* _mem, uint16_t _flags) ) @@ -2695,14 +2717,14 @@ namespace bgfx m_dynamicVertexBufferHandle.free(_handle.idx); } - BGFX_API_FUNC(bool checkAvailTransientIndexBuffer(uint32_t _num) const) + BGFX_API_FUNC(uint32_t getAvailTransientIndexBuffer(uint32_t _num) const) { - return m_submit->checkAvailTransientIndexBuffer(_num); + return m_submit->getAvailTransientIndexBuffer(_num); } - BGFX_API_FUNC(bool checkAvailTransientVertexBuffer(uint32_t _num, uint16_t _stride) const) + BGFX_API_FUNC(uint32_t getAvailTransientVertexBuffer(uint32_t _num, uint16_t _stride) const) { - return m_submit->checkAvailTransientVertexBuffer(_num, _stride); + return m_submit->getAvailTransientVertexBuffer(_num, _stride); } TransientIndexBuffer* createTransientIndexBuffer(uint32_t _size) @@ -2956,7 +2978,7 @@ namespace bgfx { uint32_t size = sr.m_num*sizeof(UniformHandle); sr.m_uniforms = (UniformHandle*)BX_ALLOC(g_allocator, size); - memcpy(sr.m_uniforms, uniforms, size); + bx::memCopy(sr.m_uniforms, uniforms, size); } CommandBuffer& cmdbuf = getCommandBuffer(CommandBuffer::CreateShader); @@ -2978,7 +3000,7 @@ namespace bgfx ShaderRef& sr = m_shaderRef[_handle.idx]; if (NULL != _uniforms) { - memcpy(_uniforms, sr.m_uniforms, bx::uint16_min(_max, sr.m_num)*sizeof(UniformHandle) ); + bx::memCopy(_uniforms, sr.m_uniforms, bx::uint16_min(_max, sr.m_num)*sizeof(UniformHandle) ); } return sr.m_num; @@ -3068,7 +3090,7 @@ namespace bgfx } ProgramHandle handle; - handle.idx = m_programHandle.alloc(); + handle.idx = m_programHandle.alloc(); BX_WARN(isValid(handle), "Failed to allocate program handle."); if (isValid(handle) ) @@ -3256,17 +3278,6 @@ namespace bgfx return m_frames + 2; } - BGFX_API_FUNC(uint32_t readTexture(FrameBufferHandle _handle, uint8_t _attachment, void* _data) ) - { - const FrameBufferRef& ref = m_frameBufferRef[_handle.idx]; - BX_CHECK(!ref.m_window, "Can't sample window frame buffer."); - - TextureHandle textureHandle = ref.un.m_th[_attachment]; - BGFX_CHECK_HANDLE("readTexture", m_textureHandle, textureHandle); - - return readTexture(textureHandle, _data,0); - } - void resizeTexture(TextureHandle _handle, uint16_t _width, uint16_t _height, uint8_t _numMips) { const TextureRef& textureRef = m_textureRef[_handle.idx]; @@ -3392,7 +3403,7 @@ namespace bgfx FrameBufferRef& ref = m_frameBufferRef[handle.idx]; ref.m_window = false; - memset(ref.un.m_th, 0xff, sizeof(ref.un.m_th) ); + bx::memSet(ref.un.m_th, 0xff, sizeof(ref.un.m_th) ); BackbufferRatio::Enum bbRatio = BackbufferRatio::Enum(m_textureRef[_attachment[0].handle.idx].m_bbRatio); for (uint32_t ii = 0; ii < _num; ++ii) { @@ -3442,6 +3453,21 @@ namespace bgfx return handle; } + BGFX_API_FUNC(TextureHandle getTexture(FrameBufferHandle _handle, uint8_t _attachment) ) + { + BGFX_CHECK_HANDLE("getTexture", m_frameBufferHandle, _handle); + + const FrameBufferRef& ref = m_frameBufferRef[_handle.idx]; + if (!ref.m_window) + { + uint32_t attachment = bx::uint32_min(_attachment, BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS); + return ref.un.m_th[attachment]; + } + + TextureHandle invalid = BGFX_INVALID_HANDLE; + return invalid; + } + BGFX_API_FUNC(void destroyFrameBuffer(FrameBufferHandle _handle) ) { BGFX_CHECK_HANDLE("destroyFrameBuffer", m_frameBufferHandle, _handle); @@ -3498,7 +3524,7 @@ namespace bgfx cmdbuf.write(handle); cmdbuf.write(uniform.m_type); cmdbuf.write(uniform.m_num); - uint8_t len = (uint8_t)strlen(_name)+1; + uint8_t len = (uint8_t)bx::strnlen(_name)+1; cmdbuf.write(len); cmdbuf.write(_name, len); } @@ -3526,7 +3552,7 @@ namespace bgfx cmdbuf.write(handle); cmdbuf.write(_type); cmdbuf.write(_num); - uint8_t len = (uint8_t)strlen(_name)+1; + uint8_t len = (uint8_t)bx::strnlen(_name)+1; cmdbuf.write(len); cmdbuf.write(_name, len); } @@ -3574,20 +3600,29 @@ namespace bgfx OcclusionQueryHandle handle = { m_occlusionQueryHandle.alloc() }; if (isValid(handle) ) { - m_submit->m_occlusion[handle.idx] = UINT8_MAX; + m_submit->m_occlusion[handle.idx] = INT32_MIN; + + CommandBuffer& cmdbuf = getCommandBuffer(CommandBuffer::InvalidateOcclusionQuery); + cmdbuf.write(handle); } + return handle; } - BGFX_API_FUNC(OcclusionQueryResult::Enum getResult(OcclusionQueryHandle _handle) ) + BGFX_API_FUNC(OcclusionQueryResult::Enum getResult(OcclusionQueryHandle _handle, int32_t* _result) ) { - BGFX_CHECK_HANDLE("destroyOcclusionQuery", m_occlusionQueryHandle, _handle); + BGFX_CHECK_HANDLE("getResult", m_occlusionQueryHandle, _handle); switch (m_submit->m_occlusion[_handle.idx]) { case 0: return OcclusionQueryResult::Invisible; - case UINT8_MAX: return OcclusionQueryResult::NoResult; - default:; + case INT32_MIN: return OcclusionQueryResult::NoResult; + default: break; + } + + if (NULL != _result) + { + *_result = m_submit->m_occlusion[_handle.idx]; } return OcclusionQueryResult::Visible; @@ -3596,13 +3631,27 @@ namespace bgfx BGFX_API_FUNC(void destroyOcclusionQuery(OcclusionQueryHandle _handle) ) { BGFX_CHECK_HANDLE("destroyOcclusionQuery", m_occlusionQueryHandle, _handle); - m_occlusionQueryHandle.free(_handle.idx); + + m_freeOcclusionQueryHandle[m_numFreeOcclusionQueryHandles++] = _handle; } - BGFX_API_FUNC(void saveScreenShot(const char* _filePath) ) + BGFX_API_FUNC(void requestScreenShot(FrameBufferHandle _handle, const char* _filePath) ) { - CommandBuffer& cmdbuf = getCommandBuffer(CommandBuffer::SaveScreenShot); - uint16_t len = (uint16_t)strlen(_filePath)+1; + BGFX_CHECK_HANDLE_INVALID_OK("requestScreenShot", m_frameBufferHandle, _handle); + + if (isValid(_handle) ) + { + FrameBufferRef& ref = m_frameBufferRef[_handle.idx]; + if (!ref.m_window) + { + BX_TRACE("requestScreenShot can be done only for window frame buffer handles (handle: %d).", _handle.idx); + return; + } + } + + CommandBuffer& cmdbuf = getCommandBuffer(CommandBuffer::RequestScreenShot); + uint16_t len = (uint16_t)bx::strnlen(_filePath)+1; + cmdbuf.write(_handle); cmdbuf.write(len); cmdbuf.write(_filePath, len); } @@ -3613,7 +3662,7 @@ namespace bgfx , _index , BGFX_CONFIG_MAX_COLOR_PALETTE ); - memcpy(&m_clearColor[_index][0], _rgba, 16); + bx::memCopy(&m_clearColor[_index][0], _rgba, 16); m_colorPaletteDirty = 2; } @@ -3621,7 +3670,7 @@ namespace bgfx { CommandBuffer& cmdbuf = getCommandBuffer(CommandBuffer::UpdateViewName); cmdbuf.write(_id); - uint16_t len = (uint16_t)strlen(_name)+1; + uint16_t len = (uint16_t)bx::strnlen(_name)+1; cmdbuf.write(len); cmdbuf.write(_name, len); } @@ -3629,8 +3678,8 @@ namespace bgfx BGFX_API_FUNC(void setViewRect(uint8_t _id, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height) ) { Rect& rect = m_rect[_id]; - rect.m_x = _x; - rect.m_y = _y; + 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); } @@ -3646,6 +3695,11 @@ namespace bgfx BGFX_API_FUNC(void setViewClear(uint8_t _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); @@ -3658,6 +3712,11 @@ namespace bgfx 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) ) { + 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) @@ -3691,7 +3750,7 @@ namespace bgfx if (NULL != _view) { - memcpy(m_view[_id].un.val, _view, sizeof(Matrix4) ); + bx::memCopy(m_view[_id].un.val, _view, sizeof(Matrix4) ); } else { @@ -3700,7 +3759,7 @@ namespace bgfx if (NULL != _proj) { - memcpy(m_proj[0][_id].un.val, _proj, sizeof(Matrix4) ); + bx::memCopy(m_proj[0][_id].un.val, _proj, sizeof(Matrix4) ); } else { @@ -3709,11 +3768,11 @@ namespace bgfx if (NULL != _proj1) { - memcpy(m_proj[1][_id].un.val, _proj1, sizeof(Matrix4) ); + bx::memCopy(m_proj[1][_id].un.val, _proj1, sizeof(Matrix4) ); } else { - memcpy(m_proj[1][_id].un.val, m_proj[0][_id].un.val, sizeof(Matrix4) ); + bx::memCopy(m_proj[1][_id].un.val, m_proj[0][_id].un.val, sizeof(Matrix4) ); } } @@ -3728,10 +3787,10 @@ namespace bgfx setViewTransform(_id, NULL, NULL, BGFX_VIEW_NONE, NULL); } - BGFX_API_FUNC(void setViewRemap(uint8_t _id, uint8_t _num, const void* _remap) ) + BGFX_API_FUNC(void setViewOrder(uint8_t _id, uint8_t _num, const void* _order) ) { const uint32_t num = bx::uint32_min(_id + _num, BGFX_CONFIG_MAX_VIEWS) - _id; - if (NULL == _remap) + if (NULL == _order) { for (uint32_t ii = 0; ii < num; ++ii) { @@ -3741,7 +3800,7 @@ namespace bgfx } else { - memcpy(&m_viewRemap[_id], _remap, num); + bx::memCopy(&m_viewRemap[_id], _order, num); } } @@ -3878,21 +3937,6 @@ namespace bgfx m_submit->setTexture(_stage, _sampler, _handle, _flags); } - BGFX_API_FUNC(void setTexture(uint8_t _stage, UniformHandle _sampler, FrameBufferHandle _handle, uint8_t _attachment, uint32_t _flags) ) - { - BGFX_CHECK_HANDLE_INVALID_OK("setTexture/FrameBufferHandle", m_frameBufferHandle, _handle); - TextureHandle textureHandle = BGFX_INVALID_HANDLE; - if (isValid(_handle) ) - { - const FrameBufferRef& ref = m_frameBufferRef[_handle.idx]; - BX_CHECK(!ref.m_window, "Can't sample window frame buffer."); - textureHandle = ref.un.m_th[_attachment]; - BX_CHECK(isValid(textureHandle), "Frame buffer texture %d is invalid.", _attachment); - } - - m_submit->setTexture(_stage, _sampler, textureHandle, _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); @@ -3970,20 +4014,6 @@ namespace bgfx m_submit->setImage(_stage, _sampler, _handle, _mip, _access, _format); } - BGFX_API_FUNC(void setImage(uint8_t _stage, UniformHandle _sampler, FrameBufferHandle _handle, uint8_t _attachment, Access::Enum _access, TextureFormat::Enum _format) ) - { - TextureHandle textureHandle = BGFX_INVALID_HANDLE; - if (isValid(_handle) ) - { - const FrameBufferRef& ref = m_frameBufferRef[_handle.idx]; - BX_CHECK(!ref.m_window, "Can't sample window frame buffer."); - textureHandle = ref.un.m_th[_attachment]; - BX_CHECK(isValid(textureHandle), "Frame buffer texture %d is invalid.", _attachment); - } - - setImage(_stage, _sampler, textureHandle, 0, _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) ) @@ -4024,15 +4054,6 @@ namespace bgfx m_submit->blit(_id, _dst, _dstMip, _dstX, _dstY, _dstZ, _src, _srcMip, _srcX, _srcY, _srcZ, _width, _height, _depth); } - BGFX_API_FUNC(void blit(uint8_t _id, TextureHandle _dst, uint8_t _dstMip, uint16_t _dstX, uint16_t _dstY, uint16_t _dstZ, FrameBufferHandle _src, uint8_t _attachment, uint8_t _srcMip, uint16_t _srcX, uint16_t _srcY, uint16_t _srcZ, uint16_t _width, uint16_t _height, uint16_t _depth) ) - { - const FrameBufferRef& ref = m_frameBufferRef[_src.idx]; - BX_CHECK(!ref.m_window, "Can't sample window frame buffer."); - TextureHandle textureHandle = ref.un.m_th[_attachment]; - BX_CHECK(isValid(textureHandle), "Frame buffer texture %d is invalid.", _attachment); - blit(_id, _dst, _dstMip, _dstX, _dstY, _dstZ, textureHandle, _srcMip, _srcX, _srcY, _srcZ, _width, _height, _depth); - } - BGFX_API_FUNC(uint32_t frame(bool _capture = false) ); void dumpViewStats(); @@ -4043,12 +4064,12 @@ namespace bgfx const char* getName(UniformHandle _handle) const; // render thread - bool renderFrame(); + RenderFrame::Enum renderFrame(int32_t _msecs = -1); void flushTextureUpdateBatch(CommandBuffer& _cmdbuf); void rendererExecCommands(CommandBuffer& _cmdbuf); #if BGFX_CONFIG_MULTITHREADED - void gameSemPost() + void apiSemPost() { if (!m_singleThreaded) { @@ -4101,7 +4122,7 @@ namespace bgfx bx::Semaphore m_apiSem; bx::Thread m_thread; #else - void gameSemPost() + void apiSemPost() { } @@ -4134,8 +4155,10 @@ namespace bgfx uint16_t m_numFreeDynamicIndexBufferHandles; uint16_t m_numFreeDynamicVertexBufferHandles; - DynamicIndexBufferHandle m_freeDynamicIndexBufferHandle[BGFX_CONFIG_MAX_DYNAMIC_INDEX_BUFFERS]; + uint16_t m_numFreeOcclusionQueryHandles; + DynamicIndexBufferHandle m_freeDynamicIndexBufferHandle[BGFX_CONFIG_MAX_DYNAMIC_INDEX_BUFFERS]; DynamicVertexBufferHandle m_freeDynamicVertexBufferHandle[BGFX_CONFIG_MAX_DYNAMIC_VERTEX_BUFFERS]; + OcclusionQueryHandle m_freeOcclusionQueryHandle[BGFX_CONFIG_MAX_OCCLUSION_QUERIES]; NonLocalAllocator m_dynIndexBufferAllocator; bx::HandleAllocT m_dynamicIndexBufferHandle; @@ -4151,7 +4174,7 @@ namespace bgfx bx::HandleAllocT m_textureHandle; bx::HandleAllocT m_frameBufferHandle; bx::HandleAllocT m_uniformHandle; - bx::HandleAllocT m_occlusionQueryHandle; + bx::HandleAllocT m_occlusionQueryHandle; struct ShaderRef { diff --git a/3rdparty/bgfx/src/bgfx_shader.sh b/3rdparty/bgfx/src/bgfx_shader.sh index 17a07d6..3ee69e8 100644 --- a/3rdparty/bgfx/src/bgfx_shader.sh +++ b/3rdparty/bgfx/src/bgfx_shader.sh @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -53,12 +53,12 @@ # define dFdyFine(_y) ddy_fine(-_y) # endif // BGFX_SHADER_LANGUAGE_HLSL > 4 -# if BGFX_SHADER_LANGUAGE_HLSL +# if BGFX_SHADER_LANGUAGE_HLSL float intBitsToFloat(int _x) { return asfloat(_x); } vec2 intBitsToFloat(uint2 _x) { return asfloat(_x); } vec3 intBitsToFloat(uint3 _x) { return asfloat(_x); } vec4 intBitsToFloat(uint4 _x) { return asfloat(_x); } -# endif // BGFX_SHADER_LANGUAGE_HLSL +# endif // BGFX_SHADER_LANGUAGE_HLSL float uintBitsToFloat(uint _x) { return asfloat(_x); } vec2 uintBitsToFloat(uint2 _x) { return asfloat(_x); } @@ -80,7 +80,7 @@ uint2 bitfieldReverse(uint2 _x) { return reversebits(_x); } uint3 bitfieldReverse(uint3 _x) { return reversebits(_x); } uint4 bitfieldReverse(uint4 _x) { return reversebits(_x); } -#if !BGFX_SHADER_LANGUAGE_SPIRV +# if !BGFX_SHADER_LANGUAGE_SPIRV uint packHalf2x16(vec2 _x) { return (f32tof16(_x.x)<<16) | f32tof16(_x.y); @@ -90,7 +90,7 @@ vec2 unpackHalf2x16(uint _x) { return vec2(f16tof32(_x >> 16), f16tof32(_x) ); } -#endif // !BGFX_SHADER_LANGUAGE_SPIRV +# endif // !BGFX_SHADER_LANGUAGE_SPIRV struct BgfxSampler2D { @@ -169,6 +169,11 @@ vec4 bgfxTexture2DProj(BgfxSampler2D _sampler, vec4 _coord) return _sampler.m_texture.Sample(_sampler.m_sampler, coord); } +vec4 bgfxTexture2DGrad(BgfxSampler2D _sampler, vec2 _coord, vec2 _dPdx, vec2 _dPdy) +{ + return _sampler.m_texture.SampleGrad(_sampler.m_sampler, _coord, _dPdx, _dPdy); +} + vec4 bgfxTexture2DArray(BgfxSampler2DArray _sampler, vec3 _coord) { return _sampler.m_texture.Sample(_sampler.m_sampler, _coord); @@ -263,6 +268,7 @@ vec4 bgfxTexelFetch(BgfxSampler3D _sampler, ivec3 _coord, int _lod) # define texture2D(_sampler, _coord) bgfxTexture2D(_sampler, _coord) # define texture2DLod(_sampler, _coord, _level) bgfxTexture2DLod(_sampler, _coord, _level) # define texture2DProj(_sampler, _coord) bgfxTexture2DProj(_sampler, _coord) +# define texture2DGrad(_sampler, _coord, _dPdx, _dPdy) bgfxTexture2DGrad(_sampler, _coord, _dPdx, _dPdy) # define SAMPLER2DARRAY(_name, _reg) \ uniform SamplerState _name ## Sampler : REGISTER(s, _reg); \ @@ -278,9 +284,9 @@ vec4 bgfxTexelFetch(BgfxSampler3D _sampler, ivec3 _coord, int _lod) # define sampler2DMS BgfxSampler2DMS # define SAMPLER2DSHADOW(_name, _reg) \ - uniform SamplerComparisonState _name ## Sampler : REGISTER(s, _reg); \ + uniform SamplerComparisonState _name ## SamplerComparison : REGISTER(s, _reg); \ uniform Texture2D _name ## Texture : REGISTER(t, _reg); \ - static BgfxSampler2DShadow _name = { _name ## Sampler, _name ## Texture } + static BgfxSampler2DShadow _name = { _name ## SamplerComparison, _name ## Texture } # define sampler2DShadow BgfxSampler2DShadow # define shadow2D(_sampler, _coord) bgfxShadow2D(_sampler, _coord) # define shadow2DProj(_sampler, _coord) bgfxShadow2DProj(_sampler, _coord) @@ -360,10 +366,12 @@ float bgfxShadow2DProj(sampler2DShadow _sampler, vec4 _coord) # if BGFX_SHADER_LANGUAGE_HLSL == 2 # define texture2DLod(_sampler, _coord, _level) tex2D(_sampler, (_coord).xy) +# define texture2DGrad(_sampler, _coord, _dPdx, _dPdy) tex2D(_sampler, _coord) # define texture3DLod(_sampler, _coord, _level) tex3D(_sampler, (_coord).xyz) # define textureCubeLod(_sampler, _coord, _level) texCUBE(_sampler, (_coord).xyz) # else # define texture2DLod(_sampler, _coord, _level) tex2Dlod(_sampler, vec4( (_coord).xy, 0.0, _level) ) +# define texture2DGrad(_sampler, _coord, _dPdx, _dPdy) tex2Dgrad(_sampler, _coord, _dPdx, _dPdy) # define texture3DLod(_sampler, _coord, _level) tex3Dlod(_sampler, vec4( (_coord).xyz, _level) ) # define textureCubeLod(_sampler, _coord, _level) texCUBElod(_sampler, vec4( (_coord).xyz, _level) ) # endif // BGFX_SHADER_LANGUAGE_HLSL == 2 diff --git a/3rdparty/bgfx/src/charset.h b/3rdparty/bgfx/src/charset.h index 32938ae..e186730 100644 --- a/3rdparty/bgfx/src/charset.h +++ b/3rdparty/bgfx/src/charset.h @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ diff --git a/3rdparty/bgfx/src/config.h b/3rdparty/bgfx/src/config.h index 6ef37b4..6ee6822 100644 --- a/3rdparty/bgfx/src/config.h +++ b/3rdparty/bgfx/src/config.h @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -297,9 +297,9 @@ # define BGFX_CONFIG_MAX_UNIFORMS 512 #endif // BGFX_CONFIG_MAX_UNIFORMS -#ifndef BGFX_CONFIG_MAX_OCCUSION_QUERIES -# define BGFX_CONFIG_MAX_OCCUSION_QUERIES 256 -#endif // BGFX_CONFIG_MAX_OCCUSION_QUERIES +#ifndef BGFX_CONFIG_MAX_OCCLUSION_QUERIES +# define BGFX_CONFIG_MAX_OCCLUSION_QUERIES 256 +#endif // BGFX_CONFIG_MAX_OCCLUSION_QUERIES #ifndef BGFX_CONFIG_MAX_COMMAND_BUFFER_SIZE # define BGFX_CONFIG_MAX_COMMAND_BUFFER_SIZE (64<<10) diff --git a/3rdparty/bgfx/src/debug_renderdoc.cpp b/3rdparty/bgfx/src/debug_renderdoc.cpp index db1fabb..a51206b 100644 --- a/3rdparty/bgfx/src/debug_renderdoc.cpp +++ b/3rdparty/bgfx/src/debug_renderdoc.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -43,7 +43,7 @@ namespace bgfx , BX_COUNTOF(moduleName) ); if (0 != result - && 0 == bx::stricmp(_name, moduleName) ) + && 0 == bx::strincmp(_name, moduleName) ) { return true; } diff --git a/3rdparty/bgfx/src/debug_renderdoc.h b/3rdparty/bgfx/src/debug_renderdoc.h index 92111d1..b696a7e 100644 --- a/3rdparty/bgfx/src/debug_renderdoc.h +++ b/3rdparty/bgfx/src/debug_renderdoc.h @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ diff --git a/3rdparty/bgfx/src/fs_clear0.sc b/3rdparty/bgfx/src/fs_clear0.sc index cedd5a6..7f7025d 100644 --- a/3rdparty/bgfx/src/fs_clear0.sc +++ b/3rdparty/bgfx/src/fs_clear0.sc @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ diff --git a/3rdparty/bgfx/src/fs_clear1.sc b/3rdparty/bgfx/src/fs_clear1.sc index 277a455..921c19f 100644 --- a/3rdparty/bgfx/src/fs_clear1.sc +++ b/3rdparty/bgfx/src/fs_clear1.sc @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ diff --git a/3rdparty/bgfx/src/fs_clear2.sc b/3rdparty/bgfx/src/fs_clear2.sc index bfab0e8..163430f 100644 --- a/3rdparty/bgfx/src/fs_clear2.sc +++ b/3rdparty/bgfx/src/fs_clear2.sc @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ diff --git a/3rdparty/bgfx/src/fs_clear3.sc b/3rdparty/bgfx/src/fs_clear3.sc index de4c072..96b8293 100644 --- a/3rdparty/bgfx/src/fs_clear3.sc +++ b/3rdparty/bgfx/src/fs_clear3.sc @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ diff --git a/3rdparty/bgfx/src/fs_clear4.sc b/3rdparty/bgfx/src/fs_clear4.sc index 725ada0..6e62276 100644 --- a/3rdparty/bgfx/src/fs_clear4.sc +++ b/3rdparty/bgfx/src/fs_clear4.sc @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ diff --git a/3rdparty/bgfx/src/fs_clear5.sc b/3rdparty/bgfx/src/fs_clear5.sc index 7444467..b2157bf 100644 --- a/3rdparty/bgfx/src/fs_clear5.sc +++ b/3rdparty/bgfx/src/fs_clear5.sc @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ diff --git a/3rdparty/bgfx/src/fs_clear6.sc b/3rdparty/bgfx/src/fs_clear6.sc index c5843fd..32bcb0c 100644 --- a/3rdparty/bgfx/src/fs_clear6.sc +++ b/3rdparty/bgfx/src/fs_clear6.sc @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ diff --git a/3rdparty/bgfx/src/fs_clear7.sc b/3rdparty/bgfx/src/fs_clear7.sc index 4c58ba9..78ee8d0 100644 --- a/3rdparty/bgfx/src/fs_clear7.sc +++ b/3rdparty/bgfx/src/fs_clear7.sc @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ diff --git a/3rdparty/bgfx/src/fs_debugfont.sc b/3rdparty/bgfx/src/fs_debugfont.sc index 5a765db..bccdd01 100644 --- a/3rdparty/bgfx/src/fs_debugfont.sc +++ b/3rdparty/bgfx/src/fs_debugfont.sc @@ -1,7 +1,7 @@ $input v_color0, v_color1, v_texcoord0 /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ diff --git a/3rdparty/bgfx/src/glcontext_eagl.h b/3rdparty/bgfx/src/glcontext_eagl.h index 33099ea..31a1576 100644 --- a/3rdparty/bgfx/src/glcontext_eagl.h +++ b/3rdparty/bgfx/src/glcontext_eagl.h @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ diff --git a/3rdparty/bgfx/src/glcontext_eagl.mm b/3rdparty/bgfx/src/glcontext_eagl.mm index 24c6ec0..ff54674 100644 --- a/3rdparty/bgfx/src/glcontext_eagl.mm +++ b/3rdparty/bgfx/src/glcontext_eagl.mm @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -122,7 +122,8 @@ namespace bgfx { namespace gl void resize(GLint _width, GLint _height) { - if(m_width == _width && m_height == _height) + if (m_width == _width + && m_height == _height) { return; } diff --git a/3rdparty/bgfx/src/glcontext_egl.cpp b/3rdparty/bgfx/src/glcontext_egl.cpp index b150733..ef03ec5 100644 --- a/3rdparty/bgfx/src/glcontext_egl.cpp +++ b/3rdparty/bgfx/src/glcontext_egl.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -195,6 +195,9 @@ EGL_IMPORT BX_TRACE("Supported EGL extensions:"); dumpExtensions(extensions); + // https://www.khronos.org/registry/EGL/extensions/ANDROID/EGL_ANDROID_recordable.txt + const bool hasEglAndroidRecordable = !!bx::findIdentifierMatch(extensions, "EGL_ANDROID_recordable"); + EGLint attrs[] = { EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, @@ -206,6 +209,10 @@ EGL_IMPORT # endif // BX_PLATFORM_ EGL_STENCIL_SIZE, 8, + // Android Recordable surface + hasEglAndroidRecordable ? 0x3142 : EGL_NONE, + hasEglAndroidRecordable ? 1 : EGL_NONE, + EGL_NONE }; @@ -262,7 +269,7 @@ EGL_IMPORT # if BX_PLATFORM_RPI BX_UNUSED(hasEglKhrCreateContext, hasEglKhrNoError); -#else +# else if (hasEglKhrCreateContext) { bx::write(&writer, EGLint(EGL_CONTEXT_MAJOR_VERSION_KHR) ); diff --git a/3rdparty/bgfx/src/glcontext_egl.h b/3rdparty/bgfx/src/glcontext_egl.h index 767879c..79082ec 100644 --- a/3rdparty/bgfx/src/glcontext_egl.h +++ b/3rdparty/bgfx/src/glcontext_egl.h @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ diff --git a/3rdparty/bgfx/src/glcontext_glx.cpp b/3rdparty/bgfx/src/glcontext_glx.cpp index 20de9d7..7afd3ec 100644 --- a/3rdparty/bgfx/src/glcontext_glx.cpp +++ b/3rdparty/bgfx/src/glcontext_glx.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -155,10 +155,12 @@ namespace bgfx { namespace gl if (NULL != glXCreateContextAttribsARB) { BX_TRACE("Create GL 3.1 context."); + int32_t flags = BGFX_CONFIG_DEBUG ? GLX_CONTEXT_DEBUG_BIT_ARB : 0; const int contextAttrs[] = { GLX_CONTEXT_MAJOR_VERSION_ARB, 3, GLX_CONTEXT_MINOR_VERSION_ARB, 1, + GLX_CONTEXT_FLAGS_ARB, flags, GLX_CONTEXT_PROFILE_MASK_ARB, GLX_CONTEXT_CORE_PROFILE_BIT_ARB, 0, }; @@ -259,6 +261,7 @@ namespace bgfx { namespace gl void GlContext::destroySwapChain(SwapChainGL* _swapChain) { BX_DELETE(g_allocator, _swapChain); + glXMakeCurrent( (::Display*)g_platformData.ndt, (::Window)g_platformData.nwh, m_context); } void GlContext::swap(SwapChainGL* _swapChain) diff --git a/3rdparty/bgfx/src/glcontext_glx.h b/3rdparty/bgfx/src/glcontext_glx.h index 97cfc6d..6b93cb9 100644 --- a/3rdparty/bgfx/src/glcontext_glx.h +++ b/3rdparty/bgfx/src/glcontext_glx.h @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ diff --git a/3rdparty/bgfx/src/glcontext_nsgl.h b/3rdparty/bgfx/src/glcontext_nsgl.h index 94e15bf..00e07de 100644 --- a/3rdparty/bgfx/src/glcontext_nsgl.h +++ b/3rdparty/bgfx/src/glcontext_nsgl.h @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ diff --git a/3rdparty/bgfx/src/glcontext_nsgl.mm b/3rdparty/bgfx/src/glcontext_nsgl.mm index 50f35e4..1bef5ca 100644 --- a/3rdparty/bgfx/src/glcontext_nsgl.mm +++ b/3rdparty/bgfx/src/glcontext_nsgl.mm @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -101,24 +101,24 @@ namespace bgfx { namespace gl NSOpenGLView* glView = [[NSOpenGLView alloc] initWithFrame:glViewRect pixelFormat:pixelFormat]; [pixelFormat release]; - // GLFW creates a helper contentView that handles things like keyboard and drag and - // drop events. We don't want to clobber that view if it exists. Instead we just - // add ourselves as a subview and make the view resize automatically. - NSView *contentView = [nsWindow contentView]; - if( contentView != nil ) - { - [glView setAutoresizingMask:( NSViewHeightSizable | - NSViewWidthSizable | - NSViewMinXMargin | - NSViewMaxXMargin | - NSViewMinYMargin | - NSViewMaxYMargin )]; - [contentView addSubview:glView]; - } - else - { - [nsWindow setContentView:glView]; - } + // GLFW creates a helper contentView that handles things like keyboard and drag and + // drop events. We don't want to clobber that view if it exists. Instead we just + // add ourselves as a subview and make the view resize automatically. + NSView *contentView = [nsWindow contentView]; + if (nil != contentView) + { + [glView setAutoresizingMask:( NSViewHeightSizable | + NSViewWidthSizable | + NSViewMinXMargin | + NSViewMaxXMargin | + NSViewMinYMargin | + NSViewMaxYMargin )]; + [contentView addSubview:glView]; + } + else + { + [nsWindow setContentView:glView]; + } NSOpenGLContext* glContext = [glView openGLContext]; BGFX_FATAL(NULL != glContext, Fatal::UnableToInitialize, "Failed to initialize GL context."); @@ -127,11 +127,11 @@ namespace bgfx { namespace gl GLint interval = 0; [glContext setValues:&interval forParameter:NSOpenGLCPSwapInterval]; - // When initializing NSOpenGLView programatically (as we are), this sometimes doesn't - // get hooked up properly (especially when there are existing window elements). This ensures - // we are valid. Otherwise, you'll probably get a GL_INVALID_FRAMEBUFFER_OPERATION when - // trying to glClear() for the first time. - [glContext setView:glView]; + // When initializing NSOpenGLView programatically (as we are), this sometimes doesn't + // get hooked up properly (especially when there are existing window elements). This ensures + // we are valid. Otherwise, you'll probably get a GL_INVALID_FRAMEBUFFER_OPERATION when + // trying to glClear() for the first time. + [glContext setView:glView]; m_view = glView; m_context = glContext; diff --git a/3rdparty/bgfx/src/glcontext_ppapi.cpp b/3rdparty/bgfx/src/glcontext_ppapi.cpp index c0c2c45..b23d92b 100644 --- a/3rdparty/bgfx/src/glcontext_ppapi.cpp +++ b/3rdparty/bgfx/src/glcontext_ppapi.cpp @@ -1,12 +1,12 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * 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 +# include # include "renderer_gl.h" namespace bgfx { namespace gl diff --git a/3rdparty/bgfx/src/glcontext_ppapi.h b/3rdparty/bgfx/src/glcontext_ppapi.h index 0ff7674..59da455 100644 --- a/3rdparty/bgfx/src/glcontext_ppapi.h +++ b/3rdparty/bgfx/src/glcontext_ppapi.h @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ diff --git a/3rdparty/bgfx/src/glcontext_wgl.cpp b/3rdparty/bgfx/src/glcontext_wgl.cpp index eafee4f..d20b844 100644 --- a/3rdparty/bgfx/src/glcontext_wgl.cpp +++ b/3rdparty/bgfx/src/glcontext_wgl.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -59,7 +59,7 @@ namespace bgfx { namespace gl static HGLRC createContext(HDC _hdc) { PIXELFORMATDESCRIPTOR pfd; - memset(&pfd, 0, sizeof(pfd) ); + bx::memSet(&pfd, 0, sizeof(pfd) ); pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR); pfd.nVersion = 1; pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER; @@ -245,7 +245,7 @@ namespace bgfx { namespace gl BGFX_FATAL(NULL != m_context, Fatal::UnableToInitialize, "Failed to create context 0x%08x.", GetLastError() ); BX_STATIC_ASSERT(sizeof(contextAttrs) == sizeof(m_contextAttrs) ); - memcpy(m_contextAttrs, contextAttrs, sizeof(contextAttrs) ); + bx::memCopy(m_contextAttrs, contextAttrs, sizeof(contextAttrs) ); } wglMakeCurrent(NULL, NULL); @@ -318,6 +318,7 @@ namespace bgfx { namespace gl void GlContext::destroySwapChain(SwapChainGL* _swapChain) { BX_DELETE(g_allocator, _swapChain); + wglMakeCurrent(m_hdc, m_context); } void GlContext::swap(SwapChainGL* _swapChain) diff --git a/3rdparty/bgfx/src/glcontext_wgl.h b/3rdparty/bgfx/src/glcontext_wgl.h index c7e5151..0b5f340 100644 --- a/3rdparty/bgfx/src/glcontext_wgl.h +++ b/3rdparty/bgfx/src/glcontext_wgl.h @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ diff --git a/3rdparty/bgfx/src/glimports.h b/3rdparty/bgfx/src/glimports.h index dfc345a..2ee0336 100644 --- a/3rdparty/bgfx/src/glimports.h +++ b/3rdparty/bgfx/src/glimports.h @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ diff --git a/3rdparty/bgfx/src/hmd.cpp b/3rdparty/bgfx/src/hmd.cpp index fa23c38..b224a57 100644 --- a/3rdparty/bgfx/src/hmd.cpp +++ b/3rdparty/bgfx/src/hmd.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -58,16 +58,22 @@ namespace bgfx m_enabled = false; } - void VR::renderEyeStart(uint8_t _eye, Rect* _viewport) + void VR::getViewport(uint8_t _eye, Rect* _viewport) const { - BX_CHECK(m_enabled, "VR::renderEyeStart called while not enabled - render usage error"); - - _viewport->m_x = 0; + _viewport->m_x = uint16_t(_eye * (m_desc.m_eyeSize[_eye].m_w + 1) ); _viewport->m_y = 0; _viewport->m_width = uint16_t(m_desc.m_eyeSize[_eye].m_w); _viewport->m_height = uint16_t(m_desc.m_eyeSize[_eye].m_h); + } - m_impl->renderEyeStart(m_desc, _eye); + void VR::makeRenderTargetActive() + { + BX_CHECK(m_enabled, "VR::renderEyeStart called while not enabled - render usage error"); + + if (NULL != m_impl) + { + m_impl->makeRenderTargetActive(m_desc); + } } void VR::recenter() diff --git a/3rdparty/bgfx/src/hmd.h b/3rdparty/bgfx/src/hmd.h index 5832909..6a68819 100644 --- a/3rdparty/bgfx/src/hmd.h +++ b/3rdparty/bgfx/src/hmd.h @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -51,7 +51,7 @@ namespace bgfx virtual bool createSwapChain(const VRDesc& _desc, int _msaaSamples, int _mirrorWidth, int _mirrorHeight); virtual void destroySwapChain() = 0; virtual void destroyMirror() = 0; - virtual void renderEyeStart(const VRDesc& _desc, uint8_t _eye) = 0; + virtual void makeRenderTargetActive(const VRDesc& _desc) = 0; virtual bool submitSwapChain(const VRDesc& _desc) = 0; }; @@ -77,7 +77,8 @@ namespace bgfx return m_enabled; } - void renderEyeStart(uint8_t _eye, Rect* _viewport); + void getViewport(uint8_t _eye, Rect* _viewport) const; + void makeRenderTargetActive(); void recenter(); void preReset(); diff --git a/3rdparty/bgfx/src/hmd_openvr.cpp b/3rdparty/bgfx/src/hmd_openvr.cpp index 9e360cb..54d86de 100644 --- a/3rdparty/bgfx/src/hmd_openvr.cpp +++ b/3rdparty/bgfx/src/hmd_openvr.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ diff --git a/3rdparty/bgfx/src/hmd_openvr.h b/3rdparty/bgfx/src/hmd_openvr.h index 262f8c9..897a122 100644 --- a/3rdparty/bgfx/src/hmd_openvr.h +++ b/3rdparty/bgfx/src/hmd_openvr.h @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ diff --git a/3rdparty/bgfx/src/hmd_ovr.cpp b/3rdparty/bgfx/src/hmd_ovr.cpp index 648f563..0898d9d 100644 --- a/3rdparty/bgfx/src/hmd_ovr.cpp +++ b/3rdparty/bgfx/src/hmd_ovr.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -104,7 +104,7 @@ namespace bgfx for (int eye = 0; eye < 2; ++eye) { BX_STATIC_ASSERT(sizeof(_desc->m_eyeFov[eye]) == sizeof(hmdDesc.DefaultEyeFov[eye])); - memcpy(&_desc->m_eyeFov[eye], &hmdDesc.DefaultEyeFov[eye], sizeof(_desc->m_eyeFov[eye])); + bx::memCopy(&_desc->m_eyeFov[eye], &hmdDesc.DefaultEyeFov[eye], sizeof(_desc->m_eyeFov[eye])); _desc->m_eyeSize[eye].m_w = eyeSize[eye].w; _desc->m_eyeSize[eye].m_h = eyeSize[eye].h; } @@ -117,13 +117,16 @@ namespace bgfx // build constant layer settings m_renderLayer.Header.Type = ovrLayerType_EyeFov; m_renderLayer.Header.Flags = 0; - for (int eye = 0; eye < 2; ++eye) - { - m_renderLayer.Fov[eye] = hmdDesc.DefaultEyeFov[eye]; - m_renderLayer.Viewport[eye].Pos.x = 0; - m_renderLayer.Viewport[eye].Pos.y = 0; - m_renderLayer.Viewport[eye].Size = eyeSize[eye]; - } + m_renderLayer.Fov[0] = hmdDesc.DefaultEyeFov[0]; + m_renderLayer.Fov[1] = hmdDesc.DefaultEyeFov[1]; + m_renderLayer.Viewport[0].Pos.x = 0; + m_renderLayer.Viewport[0].Pos.y = 0; + m_renderLayer.Viewport[0].Size.w = _desc->m_eyeSize[0].m_w; + m_renderLayer.Viewport[0].Size.h = _desc->m_eyeSize[0].m_h; + m_renderLayer.Viewport[1].Pos.x = _desc->m_eyeSize[0].m_w+1; + m_renderLayer.Viewport[1].Pos.y = 0; + m_renderLayer.Viewport[1].Size.w = _desc->m_eyeSize[1].m_w; + m_renderLayer.Viewport[1].Size.h = _desc->m_eyeSize[1].m_h; m_viewScale.HmdSpaceToWorldScaleInMeters = 1.0f; for (int eye = 0; eye < 2; ++eye) diff --git a/3rdparty/bgfx/src/hmd_ovr.h b/3rdparty/bgfx/src/hmd_ovr.h index a2a2d34..7a0f482 100644 --- a/3rdparty/bgfx/src/hmd_ovr.h +++ b/3rdparty/bgfx/src/hmd_ovr.h @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -52,7 +52,7 @@ namespace bgfx 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 renderEyeStart(const VRDesc& _desc, uint8_t _eye) BX_OVERRIDE = 0; + virtual void makeRenderTargetActive(const VRDesc& _desc) BX_OVERRIDE = 0; virtual bool submitSwapChain(const VRDesc& _desc) BX_OVERRIDE = 0; protected: diff --git a/3rdparty/bgfx/src/image.cpp b/3rdparty/bgfx/src/image.cpp index 9284aad..e6c9e07 100644 --- a/3rdparty/bgfx/src/image.cpp +++ b/3rdparty/bgfx/src/image.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -21,82 +21,82 @@ namespace bgfx // | | | | | | | | +---+---+---+----- r, g, b, a bits // | | | | | | | | r g b a +-- encoding type // | | | | | | | | | | | | | - { 4, 4, 4, 8, 1, 1, 0, 0, 0, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // BC1 - { 8, 4, 4, 16, 1, 1, 0, 0, 0, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // BC2 - { 8, 4, 4, 16, 1, 1, 0, 0, 0, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // BC3 - { 4, 4, 4, 8, 1, 1, 0, 0, 0, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // BC4 - { 8, 4, 4, 16, 1, 1, 0, 0, 0, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // BC5 - { 8, 4, 4, 16, 1, 1, 0, 0, 0, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // BC6H - { 8, 4, 4, 16, 1, 1, 0, 0, 0, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // BC7 - { 4, 4, 4, 8, 1, 1, 0, 0, 0, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // ETC1 - { 4, 4, 4, 8, 1, 1, 0, 0, 0, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // ETC2 - { 8, 4, 4, 16, 1, 1, 0, 0, 0, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // ETC2A - { 4, 4, 4, 8, 1, 1, 0, 0, 0, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // ETC2A1 - { 2, 8, 4, 8, 2, 2, 0, 0, 0, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // PTC12 - { 4, 4, 4, 8, 2, 2, 0, 0, 0, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // PTC14 - { 2, 8, 4, 8, 2, 2, 0, 0, 0, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // PTC12A - { 4, 4, 4, 8, 2, 2, 0, 0, 0, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // PTC14A - { 2, 8, 4, 8, 2, 2, 0, 0, 0, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // PTC22 - { 4, 4, 4, 8, 2, 2, 0, 0, 0, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // PTC24 - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, uint8_t(EncodingType::Count) }, // Unknown - { 1, 8, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // R1 - { 8, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 8, uint8_t(EncodingType::Unorm) }, // A8 - { 8, 1, 1, 1, 1, 1, 0, 0, 8, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // R8 - { 8, 1, 1, 1, 1, 1, 0, 0, 8, 0, 0, 0, uint8_t(EncodingType::Int ) }, // R8I - { 8, 1, 1, 1, 1, 1, 0, 0, 8, 0, 0, 0, uint8_t(EncodingType::Uint ) }, // R8U - { 8, 1, 1, 1, 1, 1, 0, 0, 8, 0, 0, 0, uint8_t(EncodingType::Snorm) }, // R8S - { 16, 1, 1, 2, 1, 1, 0, 0, 16, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // R16 - { 16, 1, 1, 2, 1, 1, 0, 0, 16, 0, 0, 0, uint8_t(EncodingType::Int ) }, // R16I - { 16, 1, 1, 2, 1, 1, 0, 0, 16, 0, 0, 0, uint8_t(EncodingType::Uint ) }, // R16U - { 16, 1, 1, 2, 1, 1, 0, 0, 16, 0, 0, 0, uint8_t(EncodingType::Float) }, // R16F - { 16, 1, 1, 2, 1, 1, 0, 0, 16, 0, 0, 0, uint8_t(EncodingType::Snorm) }, // R16S - { 32, 1, 1, 4, 1, 1, 0, 0, 32, 0, 0, 0, uint8_t(EncodingType::Int ) }, // R32I - { 32, 1, 1, 4, 1, 1, 0, 0, 32, 0, 0, 0, uint8_t(EncodingType::Uint ) }, // R32U - { 32, 1, 1, 4, 1, 1, 0, 0, 32, 0, 0, 0, uint8_t(EncodingType::Float) }, // R32F - { 16, 1, 1, 2, 1, 1, 0, 0, 8, 8, 0, 0, uint8_t(EncodingType::Unorm) }, // RG8 - { 16, 1, 1, 2, 1, 1, 0, 0, 8, 8, 0, 0, uint8_t(EncodingType::Int ) }, // RG8I - { 16, 1, 1, 2, 1, 1, 0, 0, 8, 8, 0, 0, uint8_t(EncodingType::Uint ) }, // RG8U - { 16, 1, 1, 2, 1, 1, 0, 0, 8, 8, 0, 0, uint8_t(EncodingType::Snorm) }, // RG8S - { 32, 1, 1, 4, 1, 1, 0, 0, 16, 16, 0, 0, uint8_t(EncodingType::Unorm) }, // RG16 - { 32, 1, 1, 4, 1, 1, 0, 0, 16, 16, 0, 0, uint8_t(EncodingType::Int ) }, // RG16I - { 32, 1, 1, 4, 1, 1, 0, 0, 16, 16, 0, 0, uint8_t(EncodingType::Uint ) }, // RG16U - { 32, 1, 1, 4, 1, 1, 0, 0, 16, 16, 0, 0, uint8_t(EncodingType::Float) }, // RG16F - { 32, 1, 1, 4, 1, 1, 0, 0, 16, 16, 0, 0, uint8_t(EncodingType::Snorm) }, // RG16S - { 64, 1, 1, 8, 1, 1, 0, 0, 32, 32, 0, 0, uint8_t(EncodingType::Int ) }, // RG32I - { 64, 1, 1, 8, 1, 1, 0, 0, 32, 32, 0, 0, uint8_t(EncodingType::Uint ) }, // RG32U - { 64, 1, 1, 8, 1, 1, 0, 0, 32, 32, 0, 0, uint8_t(EncodingType::Float) }, // RG32F - { 24, 1, 1, 3, 1, 1, 0, 0, 8, 8, 8, 0, uint8_t(EncodingType::Unorm) }, // RGB8 - { 24, 1, 1, 3, 1, 1, 0, 0, 8, 8, 8, 0, uint8_t(EncodingType::Int ) }, // RGB8I - { 24, 1, 1, 3, 1, 1, 0, 0, 8, 8, 8, 0, uint8_t(EncodingType::Uint ) }, // RGB8U - { 24, 1, 1, 3, 1, 1, 0, 0, 8, 8, 8, 0, uint8_t(EncodingType::Snorm) }, // RGB8S - { 32, 1, 1, 4, 1, 1, 0, 0, 9, 9, 9, 5, uint8_t(EncodingType::Float) }, // RGB9E5F - { 32, 1, 1, 4, 1, 1, 0, 0, 8, 8, 8, 8, uint8_t(EncodingType::Unorm) }, // BGRA8 - { 32, 1, 1, 4, 1, 1, 0, 0, 8, 8, 8, 8, uint8_t(EncodingType::Unorm) }, // RGBA8 - { 32, 1, 1, 4, 1, 1, 0, 0, 8, 8, 8, 8, uint8_t(EncodingType::Int ) }, // RGBA8I - { 32, 1, 1, 4, 1, 1, 0, 0, 8, 8, 8, 8, uint8_t(EncodingType::Uint ) }, // RGBA8U - { 32, 1, 1, 4, 1, 1, 0, 0, 8, 8, 8, 8, uint8_t(EncodingType::Snorm) }, // RGBA8S - { 64, 1, 1, 8, 1, 1, 0, 0, 16, 16, 16, 16, uint8_t(EncodingType::Unorm) }, // RGBA16 - { 64, 1, 1, 8, 1, 1, 0, 0, 16, 16, 16, 16, uint8_t(EncodingType::Int ) }, // RGBA16I - { 64, 1, 1, 8, 1, 1, 0, 0, 16, 16, 16, 16, uint8_t(EncodingType::Uint ) }, // RGBA16U - { 64, 1, 1, 8, 1, 1, 0, 0, 16, 16, 16, 16, uint8_t(EncodingType::Float) }, // RGBA16F - { 64, 1, 1, 8, 1, 1, 0, 0, 16, 16, 16, 16, uint8_t(EncodingType::Snorm) }, // RGBA16S - { 128, 1, 1, 16, 1, 1, 0, 0, 32, 32, 32, 32, uint8_t(EncodingType::Int ) }, // RGBA32I - { 128, 1, 1, 16, 1, 1, 0, 0, 32, 32, 32, 32, uint8_t(EncodingType::Uint ) }, // RGBA32U - { 128, 1, 1, 16, 1, 1, 0, 0, 32, 32, 32, 32, uint8_t(EncodingType::Float) }, // RGBA32F - { 16, 1, 1, 2, 1, 1, 0, 0, 5, 6, 5, 0, uint8_t(EncodingType::Unorm) }, // R5G6B5 - { 16, 1, 1, 2, 1, 1, 0, 0, 4, 4, 4, 4, uint8_t(EncodingType::Unorm) }, // RGBA4 - { 16, 1, 1, 2, 1, 1, 0, 0, 5, 5, 5, 1, uint8_t(EncodingType::Unorm) }, // RGB5A1 - { 32, 1, 1, 4, 1, 1, 0, 0, 10, 10, 10, 2, uint8_t(EncodingType::Unorm) }, // RGB10A2 - { 32, 1, 1, 4, 1, 1, 0, 0, 11, 11, 10, 0, uint8_t(EncodingType::Unorm) }, // R11G11B10F - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, uint8_t(EncodingType::Count) }, // UnknownDepth - { 16, 1, 1, 2, 1, 1, 16, 0, 0, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // D16 - { 24, 1, 1, 3, 1, 1, 24, 0, 0, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // D24 - { 32, 1, 1, 4, 1, 1, 24, 8, 0, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // D24S8 - { 32, 1, 1, 4, 1, 1, 32, 0, 0, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // D32 - { 16, 1, 1, 2, 1, 1, 16, 0, 0, 0, 0, 0, uint8_t(EncodingType::Float) }, // D16F - { 24, 1, 1, 3, 1, 1, 24, 0, 0, 0, 0, 0, uint8_t(EncodingType::Float) }, // D24F - { 32, 1, 1, 4, 1, 1, 32, 0, 0, 0, 0, 0, uint8_t(EncodingType::Float) }, // D32F - { 8, 1, 1, 1, 1, 1, 0, 8, 0, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // D0S8 + { 4, 4, 4, 8, 1, 1, 0, 0, 0, 0, 0, 0, uint8_t(bx::EncodingType::Unorm) }, // BC1 + { 8, 4, 4, 16, 1, 1, 0, 0, 0, 0, 0, 0, uint8_t(bx::EncodingType::Unorm) }, // BC2 + { 8, 4, 4, 16, 1, 1, 0, 0, 0, 0, 0, 0, uint8_t(bx::EncodingType::Unorm) }, // BC3 + { 4, 4, 4, 8, 1, 1, 0, 0, 0, 0, 0, 0, uint8_t(bx::EncodingType::Unorm) }, // BC4 + { 8, 4, 4, 16, 1, 1, 0, 0, 0, 0, 0, 0, uint8_t(bx::EncodingType::Unorm) }, // BC5 + { 8, 4, 4, 16, 1, 1, 0, 0, 0, 0, 0, 0, uint8_t(bx::EncodingType::Unorm) }, // BC6H + { 8, 4, 4, 16, 1, 1, 0, 0, 0, 0, 0, 0, uint8_t(bx::EncodingType::Unorm) }, // BC7 + { 4, 4, 4, 8, 1, 1, 0, 0, 0, 0, 0, 0, uint8_t(bx::EncodingType::Unorm) }, // ETC1 + { 4, 4, 4, 8, 1, 1, 0, 0, 0, 0, 0, 0, uint8_t(bx::EncodingType::Unorm) }, // ETC2 + { 8, 4, 4, 16, 1, 1, 0, 0, 0, 0, 0, 0, uint8_t(bx::EncodingType::Unorm) }, // ETC2A + { 4, 4, 4, 8, 1, 1, 0, 0, 0, 0, 0, 0, uint8_t(bx::EncodingType::Unorm) }, // ETC2A1 + { 2, 8, 4, 8, 2, 2, 0, 0, 0, 0, 0, 0, uint8_t(bx::EncodingType::Unorm) }, // PTC12 + { 4, 4, 4, 8, 2, 2, 0, 0, 0, 0, 0, 0, uint8_t(bx::EncodingType::Unorm) }, // PTC14 + { 2, 8, 4, 8, 2, 2, 0, 0, 0, 0, 0, 0, uint8_t(bx::EncodingType::Unorm) }, // PTC12A + { 4, 4, 4, 8, 2, 2, 0, 0, 0, 0, 0, 0, uint8_t(bx::EncodingType::Unorm) }, // PTC14A + { 2, 8, 4, 8, 2, 2, 0, 0, 0, 0, 0, 0, uint8_t(bx::EncodingType::Unorm) }, // PTC22 + { 4, 4, 4, 8, 2, 2, 0, 0, 0, 0, 0, 0, uint8_t(bx::EncodingType::Unorm) }, // PTC24 + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, uint8_t(bx::EncodingType::Count) }, // Unknown + { 1, 8, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, uint8_t(bx::EncodingType::Unorm) }, // R1 + { 8, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 8, uint8_t(bx::EncodingType::Unorm) }, // A8 + { 8, 1, 1, 1, 1, 1, 0, 0, 8, 0, 0, 0, uint8_t(bx::EncodingType::Unorm) }, // R8 + { 8, 1, 1, 1, 1, 1, 0, 0, 8, 0, 0, 0, uint8_t(bx::EncodingType::Int ) }, // R8I + { 8, 1, 1, 1, 1, 1, 0, 0, 8, 0, 0, 0, uint8_t(bx::EncodingType::Uint ) }, // R8U + { 8, 1, 1, 1, 1, 1, 0, 0, 8, 0, 0, 0, uint8_t(bx::EncodingType::Snorm) }, // R8S + { 16, 1, 1, 2, 1, 1, 0, 0, 16, 0, 0, 0, uint8_t(bx::EncodingType::Unorm) }, // R16 + { 16, 1, 1, 2, 1, 1, 0, 0, 16, 0, 0, 0, uint8_t(bx::EncodingType::Int ) }, // R16I + { 16, 1, 1, 2, 1, 1, 0, 0, 16, 0, 0, 0, uint8_t(bx::EncodingType::Uint ) }, // R16U + { 16, 1, 1, 2, 1, 1, 0, 0, 16, 0, 0, 0, uint8_t(bx::EncodingType::Float) }, // R16F + { 16, 1, 1, 2, 1, 1, 0, 0, 16, 0, 0, 0, uint8_t(bx::EncodingType::Snorm) }, // R16S + { 32, 1, 1, 4, 1, 1, 0, 0, 32, 0, 0, 0, uint8_t(bx::EncodingType::Int ) }, // R32I + { 32, 1, 1, 4, 1, 1, 0, 0, 32, 0, 0, 0, uint8_t(bx::EncodingType::Uint ) }, // R32U + { 32, 1, 1, 4, 1, 1, 0, 0, 32, 0, 0, 0, uint8_t(bx::EncodingType::Float) }, // R32F + { 16, 1, 1, 2, 1, 1, 0, 0, 8, 8, 0, 0, uint8_t(bx::EncodingType::Unorm) }, // RG8 + { 16, 1, 1, 2, 1, 1, 0, 0, 8, 8, 0, 0, uint8_t(bx::EncodingType::Int ) }, // RG8I + { 16, 1, 1, 2, 1, 1, 0, 0, 8, 8, 0, 0, uint8_t(bx::EncodingType::Uint ) }, // RG8U + { 16, 1, 1, 2, 1, 1, 0, 0, 8, 8, 0, 0, uint8_t(bx::EncodingType::Snorm) }, // RG8S + { 32, 1, 1, 4, 1, 1, 0, 0, 16, 16, 0, 0, uint8_t(bx::EncodingType::Unorm) }, // RG16 + { 32, 1, 1, 4, 1, 1, 0, 0, 16, 16, 0, 0, uint8_t(bx::EncodingType::Int ) }, // RG16I + { 32, 1, 1, 4, 1, 1, 0, 0, 16, 16, 0, 0, uint8_t(bx::EncodingType::Uint ) }, // RG16U + { 32, 1, 1, 4, 1, 1, 0, 0, 16, 16, 0, 0, uint8_t(bx::EncodingType::Float) }, // RG16F + { 32, 1, 1, 4, 1, 1, 0, 0, 16, 16, 0, 0, uint8_t(bx::EncodingType::Snorm) }, // RG16S + { 64, 1, 1, 8, 1, 1, 0, 0, 32, 32, 0, 0, uint8_t(bx::EncodingType::Int ) }, // RG32I + { 64, 1, 1, 8, 1, 1, 0, 0, 32, 32, 0, 0, uint8_t(bx::EncodingType::Uint ) }, // RG32U + { 64, 1, 1, 8, 1, 1, 0, 0, 32, 32, 0, 0, uint8_t(bx::EncodingType::Float) }, // RG32F + { 24, 1, 1, 3, 1, 1, 0, 0, 8, 8, 8, 0, uint8_t(bx::EncodingType::Unorm) }, // RGB8 + { 24, 1, 1, 3, 1, 1, 0, 0, 8, 8, 8, 0, uint8_t(bx::EncodingType::Int ) }, // RGB8I + { 24, 1, 1, 3, 1, 1, 0, 0, 8, 8, 8, 0, uint8_t(bx::EncodingType::Uint ) }, // RGB8U + { 24, 1, 1, 3, 1, 1, 0, 0, 8, 8, 8, 0, uint8_t(bx::EncodingType::Snorm) }, // RGB8S + { 32, 1, 1, 4, 1, 1, 0, 0, 9, 9, 9, 5, uint8_t(bx::EncodingType::Float) }, // RGB9E5F + { 32, 1, 1, 4, 1, 1, 0, 0, 8, 8, 8, 8, uint8_t(bx::EncodingType::Unorm) }, // BGRA8 + { 32, 1, 1, 4, 1, 1, 0, 0, 8, 8, 8, 8, uint8_t(bx::EncodingType::Unorm) }, // RGBA8 + { 32, 1, 1, 4, 1, 1, 0, 0, 8, 8, 8, 8, uint8_t(bx::EncodingType::Int ) }, // RGBA8I + { 32, 1, 1, 4, 1, 1, 0, 0, 8, 8, 8, 8, uint8_t(bx::EncodingType::Uint ) }, // RGBA8U + { 32, 1, 1, 4, 1, 1, 0, 0, 8, 8, 8, 8, uint8_t(bx::EncodingType::Snorm) }, // RGBA8S + { 64, 1, 1, 8, 1, 1, 0, 0, 16, 16, 16, 16, uint8_t(bx::EncodingType::Unorm) }, // RGBA16 + { 64, 1, 1, 8, 1, 1, 0, 0, 16, 16, 16, 16, uint8_t(bx::EncodingType::Int ) }, // RGBA16I + { 64, 1, 1, 8, 1, 1, 0, 0, 16, 16, 16, 16, uint8_t(bx::EncodingType::Uint ) }, // RGBA16U + { 64, 1, 1, 8, 1, 1, 0, 0, 16, 16, 16, 16, uint8_t(bx::EncodingType::Float) }, // RGBA16F + { 64, 1, 1, 8, 1, 1, 0, 0, 16, 16, 16, 16, uint8_t(bx::EncodingType::Snorm) }, // RGBA16S + { 128, 1, 1, 16, 1, 1, 0, 0, 32, 32, 32, 32, uint8_t(bx::EncodingType::Int ) }, // RGBA32I + { 128, 1, 1, 16, 1, 1, 0, 0, 32, 32, 32, 32, uint8_t(bx::EncodingType::Uint ) }, // RGBA32U + { 128, 1, 1, 16, 1, 1, 0, 0, 32, 32, 32, 32, uint8_t(bx::EncodingType::Float) }, // RGBA32F + { 16, 1, 1, 2, 1, 1, 0, 0, 5, 6, 5, 0, uint8_t(bx::EncodingType::Unorm) }, // R5G6B5 + { 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 + { 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 + { 32, 1, 1, 4, 1, 1, 24, 8, 0, 0, 0, 0, uint8_t(bx::EncodingType::Unorm) }, // D24S8 + { 32, 1, 1, 4, 1, 1, 32, 0, 0, 0, 0, 0, uint8_t(bx::EncodingType::Unorm) }, // D32 + { 16, 1, 1, 2, 1, 1, 16, 0, 0, 0, 0, 0, uint8_t(bx::EncodingType::Float) }, // D16F + { 24, 1, 1, 3, 1, 1, 24, 0, 0, 0, 0, 0, uint8_t(bx::EncodingType::Float) }, // D24F + { 32, 1, 1, 4, 1, 1, 32, 0, 0, 0, 0, 0, uint8_t(bx::EncodingType::Float) }, // D32F + { 8, 1, 1, 1, 1, 1, 0, 8, 0, 0, 0, 0, uint8_t(bx::EncodingType::Unorm) }, // D0S8 }; BX_STATIC_ASSERT(TextureFormat::Count == BX_COUNTOF(s_imageBlockInfo) ); @@ -235,7 +235,7 @@ namespace bgfx const TextureFormat::Enum fmt = TextureFormat::Enum(ii); if (isValid(fmt) ) { - if (0 == bx::stricmp(s_textureFormatName[ii], _name) ) + if (0 == bx::strincmp(s_textureFormatName[ii], _name) ) { return fmt; } @@ -263,7 +263,7 @@ namespace bgfx return uint8_t(numMips); } - uint32_t imageGetSize(TextureFormat::Enum _format, uint16_t _width, uint16_t _height, uint16_t _depth, uint16_t _numLayers, bool _cubeMap, uint8_t _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) { const ImageBlockInfo& blockInfo = getBlockInfo(_format); const uint8_t bpp = blockInfo.bitsPerPixel; @@ -272,17 +272,18 @@ 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); - _height = bx::uint16_max(blockHeight * minBlockY, ( (_height + blockHeight - 1) / blockHeight)*blockHeight); - _depth = bx::uint16_max(1, _depth); + _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); + const uint8_t numMips = calcNumMips(_hasMips, _width, _height, _depth); + const uint32_t sides = _cubeMap ? 6 : 1; uint32_t width = _width; uint32_t height = _height; uint32_t depth = _depth; - uint32_t sides = _cubeMap ? 6 : 1; uint32_t size = 0; - for (uint32_t lod = 0; lod < _numMips; ++lod) + for (uint32_t lod = 0; lod < numMips; ++lod) { width = bx::uint32_max(blockWidth * minBlockX, ( (width + blockWidth - 1) / blockWidth )*blockWidth); height = bx::uint32_max(blockHeight * minBlockY, ( (height + blockHeight - 1) / blockHeight)*blockHeight); @@ -295,10 +296,25 @@ namespace bgfx depth >>= 1; } - return size * _numLayers; + size *= _numLayers; + + if (NULL != _info) + { + _info->format = _format; + _info->width = _width; + _info->height = _height; + _info->depth = _depth; + _info->numMips = numMips; + _info->numLayers = _numLayers; + _info->cubeMap = _cubeMap; + _info->storageSize = size; + _info->bitsPerPixel = bpp; + } + + return size; } - void imageSolid(uint32_t _width, uint32_t _height, uint32_t _solid, void* _dst) + void imageSolid(void* _dst, uint32_t _width, uint32_t _height, uint32_t _solid) { uint32_t* dst = (uint32_t*)_dst; for (uint32_t ii = 0, num = _width*_height; ii < num; ++ii) @@ -307,7 +323,7 @@ namespace bgfx } } - void imageCheckerboard(uint32_t _width, uint32_t _height, uint32_t _step, uint32_t _0, uint32_t _1, void* _dst) + 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; for (uint32_t yy = 0; yy < _height; ++yy) @@ -320,7 +336,7 @@ namespace bgfx } } - void imageRgba8Downsample2x2Ref(uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src, void* _dst) + void imageRgba8Downsample2x2Ref(void* _dst, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src) { const uint32_t dstwidth = _width/2; const uint32_t dstheight = _height/2; @@ -371,7 +387,7 @@ namespace bgfx } } - void imageRgba8Downsample2x2(uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src, void* _dst) + void imageRgba8Downsample2x2(void* _dst, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src) { const uint32_t dstwidth = _width/2; const uint32_t dstheight = _height/2; @@ -492,7 +508,7 @@ namespace bgfx } } - void imageRgba32fLinearDownsample2x2Ref(uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src, void* _dst) + void imageRgba32fLinearDownsample2x2Ref(void* _dst, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src) { const uint32_t dstwidth = _width/2; const uint32_t dstheight = _height/2; @@ -541,12 +557,12 @@ namespace bgfx } } - void imageRgba32fLinearDownsample2x2(uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src, void* _dst) + void imageRgba32fLinearDownsample2x2(void* _dst, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src) { - imageRgba32fLinearDownsample2x2Ref(_width, _height, _pitch, _src, _dst); + imageRgba32fLinearDownsample2x2Ref(_dst, _width, _height, _pitch, _src); } - void imageRgba32fDownsample2x2NormalMapRef(uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src, void* _dst) + void imageRgba32fDownsample2x2NormalMapRef(void* _dst, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src) { const uint32_t dstwidth = _width/2; const uint32_t dstheight = _height/2; @@ -584,12 +600,12 @@ namespace bgfx } } - void imageRgba32fDownsample2x2NormalMap(uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src, void* _dst) + void imageRgba32fDownsample2x2NormalMap(void* _dst, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src) { - imageRgba32fDownsample2x2NormalMapRef(_width, _height, _pitch, _src, _dst); + imageRgba32fDownsample2x2NormalMapRef(_dst, _width, _height, _pitch, _src); } - void imageSwizzleBgra8Ref(uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src, void* _dst) + void imageSwizzleBgra8Ref(void* _dst, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src) { const uint8_t* src = (uint8_t*) _src; const uint8_t* next = src + _pitch; @@ -611,19 +627,19 @@ namespace bgfx } } - void imageSwizzleBgra8(uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src, void* _dst) + void imageSwizzleBgra8(void* _dst, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src) { // Test can we do four 4-byte pixels at the time. if (0 != (_width&0x3) || _width < 4 - || !bx::isPtrAligned(_src, 16) - || !bx::isPtrAligned(_dst, 16) ) + || !bx::isAligned(_src, 16) + || !bx::isAligned(_dst, 16) ) { BX_WARN(false, "Image swizzle is taking slow path."); - BX_WARN(bx::isPtrAligned(_src, 16), "Source %p is not 16-byte aligned.", _src); - BX_WARN(bx::isPtrAligned(_dst, 16), "Destination %p is not 16-byte aligned.", _dst); + 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(_width, _height, _pitch, _src, _dst); + imageSwizzleBgra8Ref(_dst, _width, _height, _pitch, _src); return; } @@ -653,7 +669,7 @@ namespace bgfx } } - void imageCopy(uint32_t _height, uint32_t _srcPitch, const void* _src, uint32_t _dstPitch, void* _dst) + void imageCopy(void* _dst, uint32_t _height, uint32_t _srcPitch, const void* _src, uint32_t _dstPitch) { const uint32_t pitch = bx::uint32_min(_srcPitch, _dstPitch); const uint8_t* src = (uint8_t*)_src; @@ -661,1049 +677,113 @@ namespace bgfx for (uint32_t yy = 0; yy < _height; ++yy, src += _srcPitch, dst += _dstPitch) { - memcpy(dst, src, pitch); + bx::memCopy(dst, src, pitch); } } - void imageCopy(uint32_t _width, uint32_t _height, uint32_t _bpp, uint32_t _pitch, const void* _src, void* _dst) + void imageCopy(void* _dst, uint32_t _width, uint32_t _height, uint32_t _bpp, uint32_t _pitch, const void* _src) { const uint32_t dstPitch = _width*_bpp/8; - imageCopy(_height, _pitch, _src, dstPitch, _dst); - } - - uint32_t toUnorm(float _value, float _scale) - { - return uint32_t(bx::fround( - bx::fsaturate(_value) * _scale) - ); - } - - float fromUnorm(uint32_t _value, float _scale) - { - return float(_value) / _scale; - } - - int32_t toSnorm(float _value, float _scale) - { - return int32_t(bx::fround( - bx::fclamp(_value, -1.0f, 1.0f) * _scale) - ); - } - - float fromSnorm(int32_t _value, float _scale) - { - return bx::fmax(-1.0f, float(_value) / _scale); - } - - // R8 - void packR8(void* _dst, const float* _src) - { - uint8_t* dst = (uint8_t*)_dst; - dst[0] = uint8_t(toUnorm(_src[0], 255.0f) ); - } - - void unpackR8(float* _dst, const void* _src) - { - const uint8_t* src = (const uint8_t*)_src; - _dst[0] = fromUnorm(src[0], 255.0f); - _dst[1] = 0.0f; - _dst[2] = 0.0f; - _dst[3] = 1.0f; - } - - // R8S - void packR8S(void* _dst, const float* _src) - { - int8_t* dst = (int8_t*)_dst; - dst[0] = int8_t(toSnorm(_src[0], 127.0f) ); - } - - void unpackR8S(float* _dst, const void* _src) - { - const int8_t* src = (const int8_t*)_src; - _dst[0] = fromSnorm(src[0], 127.0f); - _dst[1] = 0.0f; - _dst[2] = 0.0f; - _dst[3] = 1.0f; - } - - // R8I - void packR8I(void* _dst, const float* _src) - { - int8_t* dst = (int8_t*)_dst; - dst[0] = int8_t(_src[0]); - } - - void unpackR8I(float* _dst, const void* _src) - { - const int8_t* src = (const int8_t*)_src; - _dst[0] = float(src[0]); - _dst[1] = 0.0f; - _dst[2] = 0.0f; - _dst[3] = 1.0f; - } - - // R8U - void packR8U(void* _dst, const float* _src) - { - uint8_t* dst = (uint8_t*)_dst; - dst[0] = uint8_t(_src[0]); - } - - void unpackR8U(float* _dst, const void* _src) - { - const uint8_t* src = (const uint8_t*)_src; - _dst[0] = float(src[0]); - _dst[1] = 0.0f; - _dst[2] = 0.0f; - _dst[3] = 1.0f; - } - - // RG8 - void packRg8(void* _dst, const float* _src) - { - uint8_t* dst = (uint8_t*)_dst; - dst[0] = uint8_t(toUnorm(_src[0], 255.0f) ); - dst[1] = uint8_t(toUnorm(_src[1], 255.0f) ); - } - - void unpackRg8(float* _dst, const void* _src) - { - const uint8_t* src = (const uint8_t*)_src; - _dst[0] = fromUnorm(src[0], 255.0f); - _dst[1] = fromUnorm(src[1], 255.0f); - _dst[2] = 0.0f; - _dst[3] = 1.0f; - } - - // RG8S - void packRg8S(void* _dst, const float* _src) - { - int8_t* dst = (int8_t*)_dst; - dst[0] = int8_t(toSnorm(_src[0], 127.0f) ); - dst[1] = int8_t(toSnorm(_src[1], 127.0f) ); - } - - void unpackRg8S(float* _dst, const void* _src) - { - const int8_t* src = (const int8_t*)_src; - _dst[0] = fromSnorm(src[0], 127.0f); - _dst[1] = fromSnorm(src[1], 127.0f); - _dst[2] = 0.0f; - _dst[3] = 1.0f; - } - - // RG8I - void packRg8I(void* _dst, const float* _src) - { - int8_t* dst = (int8_t*)_dst; - dst[0] = int8_t(_src[0]); - dst[1] = int8_t(_src[1]); - } - - void unpackRg8I(float* _dst, const void* _src) - { - const int8_t* src = (const int8_t*)_src; - _dst[0] = float(src[0]); - _dst[1] = float(src[1]); - _dst[2] = 0.0f; - _dst[3] = 1.0f; - } - - // RG8U - void packRg8U(void* _dst, const float* _src) - { - uint8_t* dst = (uint8_t*)_dst; - dst[0] = uint8_t(_src[0]); - dst[1] = uint8_t(_src[1]); - } - - void unpackRg8U(float* _dst, const void* _src) - { - const uint8_t* src = (const uint8_t*)_src; - _dst[0] = float(src[0]); - _dst[1] = float(src[1]); - _dst[2] = 0.0f; - _dst[3] = 1.0f; - } - - // RGB8 - void packRgb8(void* _dst, const float* _src) - { - uint8_t* dst = (uint8_t*)_dst; - dst[0] = uint8_t(toUnorm(_src[0], 255.0f) ); - dst[1] = uint8_t(toUnorm(_src[1], 255.0f) ); - dst[2] = uint8_t(toUnorm(_src[2], 255.0f) ); - } - - void unpackRgb8(float* _dst, const void* _src) - { - const uint8_t* src = (const uint8_t*)_src; - _dst[0] = fromUnorm(src[0], 255.0f); - _dst[1] = fromUnorm(src[1], 255.0f); - _dst[2] = fromUnorm(src[2], 255.0f); - _dst[3] = 1.0f; - } - - // RGB8S - void packRgb8S(void* _dst, const float* _src) - { - int8_t* dst = (int8_t*)_dst; - dst[0] = int8_t(toSnorm(_src[0], 127.0f) ); - dst[1] = int8_t(toSnorm(_src[1], 127.0f) ); - dst[2] = int8_t(toSnorm(_src[2], 127.0f) ); - } - - void unpackRgb8S(float* _dst, const void* _src) - { - const int8_t* src = (const int8_t*)_src; - _dst[0] = fromSnorm(src[0], 127.0f); - _dst[1] = fromSnorm(src[1], 127.0f); - _dst[2] = fromSnorm(src[2], 127.0f); - _dst[3] = 1.0f; - } - - // RGB8I - void packRgb8I(void* _dst, const float* _src) - { - int8_t* dst = (int8_t*)_dst; - dst[0] = int8_t(_src[0]); - dst[1] = int8_t(_src[1]); - dst[2] = int8_t(_src[2]); - } - - void unpackRgb8I(float* _dst, const void* _src) - { - const int8_t* src = (const int8_t*)_src; - _dst[0] = float(src[0]); - _dst[1] = float(src[1]); - _dst[2] = float(src[2]); - _dst[3] = 1.0f; - } - - // RGB8U - void packRgb8U(void* _dst, const float* _src) - { - uint8_t* dst = (uint8_t*)_dst; - dst[0] = uint8_t(_src[0]); - dst[1] = uint8_t(_src[1]); - dst[2] = uint8_t(_src[2]); - } - - void unpackRgb8U(float* _dst, const void* _src) - { - const uint8_t* src = (const uint8_t*)_src; - _dst[0] = float(src[0]); - _dst[1] = float(src[1]); - _dst[2] = float(src[2]); - _dst[3] = 1.0f; - } - - // BGRA8 - void packBgra8(void* _dst, const float* _src) - { - uint8_t* dst = (uint8_t*)_dst; - dst[2] = uint8_t(toUnorm(_src[0], 255.0f) ); - dst[1] = uint8_t(toUnorm(_src[1], 255.0f) ); - dst[0] = uint8_t(toUnorm(_src[2], 255.0f) ); - dst[3] = uint8_t(toUnorm(_src[3], 255.0f) ); - } - - void unpackBgra8(float* _dst, const void* _src) - { - const uint8_t* src = (const uint8_t*)_src; - _dst[0] = fromUnorm(src[2], 255.0f); - _dst[1] = fromUnorm(src[1], 255.0f); - _dst[2] = fromUnorm(src[0], 255.0f); - _dst[3] = fromUnorm(src[3], 255.0f); - } - - // RGBA8 - void packRgba8(void* _dst, const float* _src) - { - uint8_t* dst = (uint8_t*)_dst; - dst[0] = uint8_t(toUnorm(_src[0], 255.0f) ); - dst[1] = uint8_t(toUnorm(_src[1], 255.0f) ); - dst[2] = uint8_t(toUnorm(_src[2], 255.0f) ); - dst[3] = uint8_t(toUnorm(_src[3], 255.0f) ); - } - - void unpackRgba8(float* _dst, const void* _src) - { - const uint8_t* src = (const uint8_t*)_src; - _dst[0] = fromUnorm(src[0], 255.0f); - _dst[1] = fromUnorm(src[1], 255.0f); - _dst[2] = fromUnorm(src[2], 255.0f); - _dst[3] = fromUnorm(src[3], 255.0f); - } - - // RGBA8S - void packRgba8S(void* _dst, const float* _src) - { - int8_t* dst = (int8_t*)_dst; - dst[0] = int8_t(toSnorm(_src[0], 127.0f) ); - dst[1] = int8_t(toSnorm(_src[1], 127.0f) ); - dst[2] = int8_t(toSnorm(_src[2], 127.0f) ); - dst[3] = int8_t(toSnorm(_src[3], 127.0f) ); - } - - void unpackRgba8S(float* _dst, const void* _src) - { - const int8_t* src = (const int8_t*)_src; - _dst[0] = fromSnorm(src[0], 127.0f); - _dst[1] = fromSnorm(src[1], 127.0f); - _dst[2] = fromSnorm(src[2], 127.0f); - _dst[3] = fromSnorm(src[3], 127.0f); - } - - // RGBA8I - void packRgba8I(void* _dst, const float* _src) - { - int8_t* dst = (int8_t*)_dst; - dst[0] = int8_t(_src[0]); - dst[1] = int8_t(_src[1]); - dst[2] = int8_t(_src[2]); - dst[3] = int8_t(_src[3]); - } - - void unpackRgba8I(float* _dst, const void* _src) - { - const int8_t* src = (const int8_t*)_src; - _dst[0] = float(src[0]); - _dst[1] = float(src[1]); - _dst[2] = float(src[2]); - _dst[3] = float(src[3]); - } - - // RGBA8U - void packRgba8U(void* _dst, const float* _src) - { - uint8_t* dst = (uint8_t*)_dst; - dst[0] = uint8_t(_src[0]); - dst[1] = uint8_t(_src[1]); - dst[2] = uint8_t(_src[2]); - dst[3] = uint8_t(_src[3]); - } - - void unpackRgba8U(float* _dst, const void* _src) - { - const uint8_t* src = (const uint8_t*)_src; - _dst[0] = float(src[0]); - _dst[1] = float(src[1]); - _dst[2] = float(src[2]); - _dst[3] = float(src[3]); - } - - // R16 - void packR16(void* _dst, const float* _src) - { - uint16_t* dst = (uint16_t*)_dst; - dst[0] = uint16_t(toUnorm(_src[0], 65535.0f) ); - } - - void unpackR16(float* _dst, const void* _src) - { - const uint16_t* src = (const uint16_t*)_src; - _dst[0] = fromUnorm(src[0], 65535.0f); - _dst[1] = 0.0f; - _dst[2] = 0.0f; - _dst[3] = 1.0f; - } - - // R16S - void packR16S(void* _dst, const float* _src) - { - int16_t* dst = (int16_t*)_dst; - dst[0] = int16_t(toSnorm(_src[0], 32767.0f) ); - } - - void unpackR16S(float* _dst, const void* _src) - { - const int16_t* src = (const int16_t*)_src; - _dst[0] = fromSnorm(src[0], 32767.0f); - _dst[1] = 0.0f; - _dst[2] = 0.0f; - _dst[3] = 1.0f; - } - - // R16I - void packR16I(void* _dst, const float* _src) - { - int16_t* dst = (int16_t*)_dst; - dst[0] = int16_t(_src[0]); - } - - void unpackR16I(float* _dst, const void* _src) - { - const int16_t* src = (const int16_t*)_src; - _dst[0] = float(src[0]); - _dst[1] = 0.0f; - _dst[2] = 0.0f; - _dst[3] = 1.0f; - } - - // R16U - void packR16U(void* _dst, const float* _src) - { - uint16_t* dst = (uint16_t*)_dst; - dst[0] = uint16_t(_src[0]); - } - - void unpackR16U(float* _dst, const void* _src) - { - const uint16_t* src = (const uint16_t*)_src; - _dst[0] = float(src[0]); - } - - // R16F - void packR16F(void* _dst, const float* _src) - { - uint16_t* dst = (uint16_t*)_dst; - dst[0] = bx::halfFromFloat(_src[0]); - } - - void unpackR16F(float* _dst, const void* _src) - { - const uint16_t* src = (const uint16_t*)_src; - _dst[0] = bx::halfToFloat(src[0]); - _dst[1] = 0.0f; - _dst[2] = 0.0f; - _dst[3] = 1.0f; - } - - // RG16 - void packRg16(void* _dst, const float* _src) - { - uint16_t* dst = (uint16_t*)_dst; - dst[0] = uint16_t(toUnorm(_src[0], 65535.0f) ); - dst[1] = uint16_t(toUnorm(_src[1], 65535.0f) ); - } - - void unpackRg16(float* _dst, const void* _src) - { - const uint16_t* src = (const uint16_t*)_src; - _dst[0] = fromUnorm(src[0], 65535.0f); - _dst[1] = fromUnorm(src[1], 65535.0f); - _dst[2] = 0.0f; - _dst[3] = 1.0f; - } - - // RG16S - void packRg16S(void* _dst, const float* _src) - { - int16_t* dst = (int16_t*)_dst; - dst[0] = int16_t(toSnorm(_src[0], 32767.0f) ); - dst[1] = int16_t(toSnorm(_src[1], 32767.0f) ); - } - - void unpackRg16S(float* _dst, const void* _src) - { - const int16_t* src = (const int16_t*)_src; - _dst[0] = fromSnorm(src[0], 32767.0f); - _dst[1] = fromSnorm(src[1], 32767.0f); - _dst[2] = 0.0f; - _dst[3] = 1.0f; - } - - // RG16I - void packRg16I(void* _dst, const float* _src) - { - int16_t* dst = (int16_t*)_dst; - dst[0] = int16_t(_src[0]); - dst[1] = int16_t(_src[1]); - } - - void unpackRg16I(float* _dst, const void* _src) - { - const int16_t* src = (const int16_t*)_src; - _dst[0] = float(src[0]); - _dst[1] = float(src[1]); - _dst[2] = 0.0f; - _dst[3] = 1.0f; - } - - // RG16U - void packRg16U(void* _dst, const float* _src) - { - uint16_t* dst = (uint16_t*)_dst; - dst[0] = uint16_t(_src[0]); - dst[1] = uint16_t(_src[1]); - } - - void unpackRg16U(float* _dst, const void* _src) - { - const uint16_t* src = (const uint16_t*)_src; - _dst[0] = float(src[0]); - _dst[1] = float(src[1]); - _dst[2] = 0.0f; - _dst[3] = 1.0f; - } - - // RG16F - void packRg16F(void* _dst, const float* _src) - { - uint16_t* dst = (uint16_t*)_dst; - dst[0] = bx::halfFromFloat(_src[0]); - dst[1] = bx::halfFromFloat(_src[1]); - } - - void unpackRg16F(float* _dst, const void* _src) - { - const uint16_t* src = (const uint16_t*)_src; - _dst[0] = bx::halfToFloat(src[0]); - _dst[1] = bx::halfToFloat(src[1]); - _dst[2] = 0.0f; - _dst[3] = 1.0f; - } - - // RGBA16 - void packRgba16(void* _dst, const float* _src) - { - uint16_t* dst = (uint16_t*)_dst; - dst[0] = uint16_t(toUnorm(_src[0], 65535.0f) ); - dst[1] = uint16_t(toUnorm(_src[1], 65535.0f) ); - dst[2] = uint16_t(toUnorm(_src[2], 65535.0f) ); - dst[3] = uint16_t(toUnorm(_src[3], 65535.0f) ); - } - - void unpackRgba16(float* _dst, const void* _src) - { - const uint16_t* src = (const uint16_t*)_src; - _dst[0] = fromUnorm(src[0], 65535.0f); - _dst[1] = fromUnorm(src[1], 65535.0f); - _dst[2] = fromUnorm(src[2], 65535.0f); - _dst[3] = fromUnorm(src[3], 65535.0f); - } - - // RGBA16S - void packRgba16S(void* _dst, const float* _src) - { - int16_t* dst = (int16_t*)_dst; - dst[0] = int16_t(toSnorm(_src[0], 32767.0f) ); - dst[1] = int16_t(toSnorm(_src[1], 32767.0f) ); - dst[2] = int16_t(toSnorm(_src[2], 32767.0f) ); - dst[3] = int16_t(toSnorm(_src[3], 32767.0f) ); - } - - void unpackRgba16S(float* _dst, const void* _src) - { - const int16_t* src = (const int16_t*)_src; - _dst[0] = fromSnorm(src[0], 32767.0f); - _dst[1] = fromSnorm(src[1], 32767.0f); - _dst[2] = fromSnorm(src[2], 32767.0f); - _dst[3] = fromSnorm(src[3], 32767.0f); - } - - // RGBA16I - void packRgba16I(void* _dst, const float* _src) - { - int16_t* dst = (int16_t*)_dst; - dst[0] = int16_t(_src[0]); - dst[1] = int16_t(_src[1]); - dst[2] = int16_t(_src[2]); - dst[3] = int16_t(_src[3]); - } - - void unpackRgba16I(float* _dst, const void* _src) - { - const int16_t* src = (const int16_t*)_src; - _dst[0] = float(src[0]); - _dst[1] = float(src[1]); - _dst[2] = float(src[2]); - _dst[3] = float(src[3]); - } - - // RGBA16U - void packRgba16U(void* _dst, const float* _src) - { - uint16_t* dst = (uint16_t*)_dst; - dst[0] = uint16_t(_src[0]); - dst[1] = uint16_t(_src[1]); - dst[2] = uint16_t(_src[2]); - dst[3] = uint16_t(_src[3]); - } - - void unpackRgba16U(float* _dst, const void* _src) - { - const uint16_t* src = (const uint16_t*)_src; - _dst[0] = float(src[0]); - _dst[1] = float(src[1]); - _dst[2] = float(src[2]); - _dst[3] = float(src[3]); - } - - // RGBA16F - void packRgba16F(void* _dst, const float* _src) - { - uint16_t* dst = (uint16_t*)_dst; - dst[0] = bx::halfFromFloat(_src[0]); - dst[1] = bx::halfFromFloat(_src[1]); - dst[2] = bx::halfFromFloat(_src[2]); - dst[3] = bx::halfFromFloat(_src[3]); - } - - void unpackRgba16F(float* _dst, const void* _src) - { - const uint16_t* src = (const uint16_t*)_src; - _dst[0] = bx::halfToFloat(src[0]); - _dst[1] = bx::halfToFloat(src[1]); - _dst[2] = bx::halfToFloat(src[2]); - _dst[3] = bx::halfToFloat(src[3]); - } - - // R24 - void packR24(void* _dst, const float* _src) - { - uint8_t* dst = (uint8_t*)_dst; - const uint32_t rr = uint32_t(toUnorm(_src[0], 16777216.0f) ); - dst[0] = uint8_t(rr ); - dst[1] = uint8_t(rr>> 8); - dst[2] = uint8_t(rr>>16); - } - - void unpackR24(float* _dst, const void* _src) - { - const uint8_t* src = (const uint8_t*)_src; - const uint32_t rr = 0 - | (src[0] ) - | (src[1]<< 8) - | (src[2]<<16) - ; - - _dst[0] = fromUnorm(rr, 16777216.0f); - _dst[1] = 0.0f; - _dst[2] = 0.0f; - _dst[3] = 1.0f; - } - - // R24G8 - void packR24G8(void* _dst, const float* _src) - { - uint8_t* dst = (uint8_t*)_dst; - const uint32_t rr = uint32_t(toUnorm(_src[0], 16777216.0f) ); - dst[0] = uint8_t(rr ); - dst[1] = uint8_t(rr>> 8); - dst[2] = uint8_t(rr>>16); - dst[3] = uint8_t(toUnorm(_src[1], 255.0f) ); - } - - void unpackR24G8(float* _dst, const void* _src) - { - const uint8_t* src = (const uint8_t*)_src; - const uint32_t rr = 0 - | (src[0] ) - | (src[1]<< 8) - | (src[2]<<16) - ; - - _dst[0] = fromUnorm(rr, 16777216.0f); - _dst[1] = fromUnorm(src[3], 255.0f); - _dst[2] = 0.0f; - _dst[3] = 1.0f; - } - - // R32I - void packR32I(void* _dst, const float* _src) - { - memcpy(_dst, _src, 4); - } - - void unpackR32I(float* _dst, const void* _src) - { - memcpy(_dst, _src, 4); - } - - // R32U - void packR32U(void* _dst, const float* _src) - { - memcpy(_dst, _src, 4); - } - - void unpackR32U(float* _dst, const void* _src) - { - memcpy(_dst, _src, 4); - } - - // R32F - void packR32F(void* _dst, const float* _src) - { - memcpy(_dst, _src, 4); - } - - void unpackR32F(float* _dst, const void* _src) - { - memcpy(_dst, _src, 4); - } - - // RG32I - void packRg32I(void* _dst, const float* _src) - { - memcpy(_dst, _src, 8); - } - - void unpackRg32I(float* _dst, const void* _src) - { - memcpy(_dst, _src, 8); - } - - // RG32U - void packRg32U(void* _dst, const float* _src) - { - memcpy(_dst, _src, 8); - } - - void unpackRg32U(float* _dst, const void* _src) - { - memcpy(_dst, _src, 8); - } - - // RG32F - void packRg32F(void* _dst, const float* _src) - { - memcpy(_dst, _src, 8); - } - - void unpackRg32F(float* _dst, const void* _src) - { - memcpy(_dst, _src, 8); - } - - template - void encodeRgbE(float* _dst, const float* _src) - { - // Reference: - // https://www.opengl.org/registry/specs/EXT/texture_shared_exponent.txt - const int32_t expMax = (1<>23) & 0xff) - 127) ) ) + 1 + expBias; - float denom = bx::fpow(2.0f, float(expShared - expBias - MantissaBits) ); - - if ( (1< - void decodeRgbE(float* _dst, const float* _src) - { - const int32_t expBias = (1<<(ExpBits - 1) ) - 1; - const float exponent = _src[3]-float(expBias-MantissaBits); - const float scale = bx::fpow(2.0f, exponent); - _dst[0] = _src[0] * scale; - _dst[1] = _src[1] * scale; - _dst[2] = _src[2] * scale; - } - - // RGB9E5F - void packRgb9E5F(void* _dst, const float* _src) - { - float tmp[4]; - encodeRgbE<9, 5>(tmp, _src); - - *( (uint32_t*)_dst) = 0 - | (uint32_t(tmp[0]) ) - | (uint32_t(tmp[1]) << 9) - | (uint32_t(tmp[2]) <<18) - | (uint32_t(tmp[3]) <<27) - ; - } - - void unpackRgb9E5F(float* _dst, const void* _src) - { - uint32_t packed = *( (const uint32_t*)_src); - - float tmp[4]; - tmp[0] = float( ( (packed ) & 0x1ff) ) / 511.0f; - tmp[1] = float( ( (packed>> 9) & 0x1ff) ) / 511.0f; - tmp[2] = float( ( (packed>>18) & 0x1ff) ) / 511.0f; - tmp[3] = float( ( (packed>>27) & 0x1f) ); - - decodeRgbE<9, 5>(_dst, tmp); - } - - // RGBA32I - void packRgba32I(void* _dst, const float* _src) - { - memcpy(_dst, _src, 16); - } - - void unpackRgba32I(float* _dst, const void* _src) - { - memcpy(_dst, _src, 16); - } - - // RGBA32U - void packRgba32U(void* _dst, const float* _src) - { - memcpy(_dst, _src, 16); - } - - void unpackRgba32U(float* _dst, const void* _src) - { - memcpy(_dst, _src, 16); - } - - // RGBA32F - void packRgba32F(void* _dst, const float* _src) - { - memcpy(_dst, _src, 16); - } - - void unpackRgba32F(float* _dst, const void* _src) - { - memcpy(_dst, _src, 16); - } - - // R5G6B5 - void packR5G6B5(void* _dst, const float* _src) - { - *( (uint16_t*)_dst) = 0 - | uint16_t(toUnorm(_src[0], 31.0f)<<11) - | uint16_t(toUnorm(_src[1], 63.0f)<< 5) - | uint16_t(toUnorm(_src[2], 31.0f) ) - ; - } - - void unpackR5G6B5(float* _dst, const void* _src) - { - uint16_t packed = *( (const uint16_t*)_src); - _dst[0] = float( ( (packed>>11) & 0x1f) ) / 31.0f; - _dst[1] = float( ( (packed>> 5) & 0x3f) ) / 63.0f; - _dst[2] = float( ( (packed ) & 0x1f) ) / 31.0f; - _dst[3] = 1.0f; - } - - // RGBA4 - void packRgba4(void* _dst, const float* _src) - { - *( (uint16_t*)_dst) = 0 - | uint16_t(toUnorm(_src[0], 15.0f) ) - | uint16_t(toUnorm(_src[1], 15.0f)<< 4) - | uint16_t(toUnorm(_src[2], 15.0f)<< 8) - | uint16_t(toUnorm(_src[3], 15.0f)<<12) - ; - } - - void unpackRgba4(float* _dst, const void* _src) - { - uint16_t packed = *( (const uint16_t*)_src); - _dst[0] = float( ( (packed ) & 0xf) ) / 15.0f; - _dst[1] = float( ( (packed>> 4) & 0xf) ) / 15.0f; - _dst[2] = float( ( (packed>> 8) & 0xf) ) / 15.0f; - _dst[3] = float( ( (packed>>12) & 0xf) ) / 15.0f; - } - - // RGBA4 - void packBgra4(void* _dst, const float* _src) - { - *( (uint16_t*)_dst) = 0 - | uint16_t(toUnorm(_src[0], 15.0f)<< 8) - | uint16_t(toUnorm(_src[1], 15.0f)<< 4) - | uint16_t(toUnorm(_src[2], 15.0f) ) - | uint16_t(toUnorm(_src[3], 15.0f)<<12) - ; - } - - void unpackBgra4(float* _dst, const void* _src) - { - uint16_t packed = *( (const uint16_t*)_src); - _dst[0] = float( ( (packed>> 8) & 0xf) ) / 15.0f; - _dst[1] = float( ( (packed>> 4) & 0xf) ) / 15.0f; - _dst[2] = float( ( (packed ) & 0xf) ) / 15.0f; - _dst[3] = float( ( (packed>>12) & 0xf) ) / 15.0f; - } - - // RGB5A1 - void packRgb5a1(void* _dst, const float* _src) - { - *( (uint16_t*)_dst) = 0 - | uint16_t(toUnorm(_src[0], 31.0f) ) - | uint16_t(toUnorm(_src[1], 31.0f)<< 5) - | uint16_t(toUnorm(_src[2], 31.0f)<<10) - | uint16_t(toUnorm(_src[3], 1.0f)<<15) - ; - } - - void unpackRgb5a1(float* _dst, const void* _src) - { - uint16_t packed = *( (const uint16_t*)_src); - _dst[0] = float( ( (packed ) & 0x1f) ) / 31.0f; - _dst[1] = float( ( (packed>> 5) & 0x1f) ) / 31.0f; - _dst[2] = float( ( (packed>>10) & 0x1f) ) / 31.0f; - _dst[3] = float( ( (packed>>14) & 0x1) ); - } - - // BGR5A1 - void packBgr5a1(void* _dst, const float* _src) - { - *( (uint16_t*)_dst) = 0 - | uint16_t(toUnorm(_src[0], 31.0f)<<10) - | uint16_t(toUnorm(_src[1], 31.0f)<< 5) - | uint16_t(toUnorm(_src[2], 31.0f) ) - | uint16_t(toUnorm(_src[3], 1.0f)<<15) - ; - } - - void unpackBgr5a1(float* _dst, const void* _src) - { - uint16_t packed = *( (const uint16_t*)_src); - _dst[0] = float( ( (packed>>10) & 0x1f) ) / 31.0f; - _dst[1] = float( ( (packed>> 5) & 0x1f) ) / 31.0f; - _dst[2] = float( ( (packed ) & 0x1f) ) / 31.0f; - _dst[3] = float( ( (packed>>14) & 0x1) ); - } - - // RGB10A2 - void packRgb10A2(void* _dst, const float* _src) - { - *( (uint32_t*)_dst) = 0 - | (toUnorm(_src[0], 1023.0f) ) - | (toUnorm(_src[1], 1023.0f)<<10) - | (toUnorm(_src[2], 1023.0f)<<20) - | (toUnorm(_src[3], 3.0f)<<30) - ; - } - - void unpackRgb10A2(float* _dst, const void* _src) - { - uint32_t packed = *( (const uint32_t*)_src); - _dst[0] = float( ( (packed ) & 0x3ff) ) / 1023.0f; - _dst[1] = float( ( (packed>>10) & 0x3ff) ) / 1023.0f; - _dst[2] = float( ( (packed>>20) & 0x3ff) ) / 1023.0f; - _dst[3] = float( ( (packed>>30) & 0x3) ) / 3.0f; - } - - // R11G11B10F - void packR11G11B10F(void* _dst, const float* _src) - { - *( (uint32_t*)_dst) = 0 - | ( (bx::halfFromFloat(_src[0])>> 4) & 0x7ff) - | ( (bx::halfFromFloat(_src[0])<< 7) & 0x3ff800) - | ( (bx::halfFromFloat(_src[0])<<17) & 0xffc00000) - ; - } - - void unpackR11G11B10F(float* _dst, const void* _src) - { - uint32_t packed = *( (const uint32_t*)_src); - _dst[0] = bx::halfToFloat( (packed<< 4) & 0x7ff0); - _dst[1] = bx::halfToFloat( (packed>> 7) & 0x7ff0); - _dst[2] = bx::halfToFloat( (packed>>17) & 0x7fe0); - _dst[3] = 1.0f; + imageCopy(_dst, _height, _pitch, _src, dstPitch); } struct PackUnpack { - PackFn pack; - UnpackFn unpack; + bx::PackFn pack; + bx::UnpackFn unpack; }; static const PackUnpack s_packUnpack[] = { - { NULL, NULL }, // BC1 - { NULL, NULL }, // BC2 - { NULL, NULL }, // BC3 - { NULL, NULL }, // BC4 - { NULL, NULL }, // BC5 - { NULL, NULL }, // BC6H - { NULL, NULL }, // BC7 - { NULL, NULL }, // ETC1 - { NULL, NULL }, // ETC2 - { NULL, NULL }, // ETC2A - { NULL, NULL }, // ETC2A1 - { NULL, NULL }, // PTC12 - { NULL, NULL }, // PTC14 - { NULL, NULL }, // PTC12A - { NULL, NULL }, // PTC14A - { NULL, NULL }, // PTC22 - { NULL, NULL }, // PTC24 - { NULL, NULL }, // Unknown - { NULL, NULL }, // R1 - { packR8, unpackR8 }, // A8 - { packR8, unpackR8 }, // R8 - { packR8I, unpackR8I }, // R8I - { packR8U, unpackR8U }, // R8U - { packR8S, unpackR8S }, // R8S - { packR16, unpackR16 }, // R16 - { packR16I, unpackR16I }, // R16I - { packR16U, unpackR16U }, // R16U - { packR16F, unpackR16F }, // R16F - { packR16S, unpackR16S }, // R16S - { packR32I, unpackR32I }, // R32I - { packR32U, unpackR32U }, // R32U - { packR32F, unpackR32F }, // R32F - { packRg8, unpackRg8 }, // RG8 - { packRg8I, unpackRg8I }, // RG8I - { packRg8U, unpackRg8U }, // RG8U - { packRg8S, unpackRg8S }, // RG8S - { packRg16, unpackRg16 }, // RG16 - { packRg16I, unpackRg16I }, // RG16I - { packRg16U, unpackRg16U }, // RG16U - { packRg16F, unpackRg16F }, // RG16F - { packRg16S, unpackRg16S }, // RG16S - { packRg32I, unpackRg32I }, // RG32I - { packRg32U, unpackRg32U }, // RG32U - { packRg32F, unpackRg32F }, // RG32F - { packRgb8, unpackRgb8 }, // RGB8 - { packRgb8S, unpackRgb8S }, // RGB8S - { packRgb8I, unpackRgb8I }, // RGB8I - { packRgb8U, unpackRgb8U }, // RGB8U - { packRgb9E5F, unpackRgb9E5F }, // RGB9E5F - { packBgra8, unpackBgra8 }, // BGRA8 - { packRgba8, unpackRgba8 }, // RGBA8 - { packRgba8I, unpackRgba8I }, // RGBA8I - { packRgba8U, unpackRgba8U }, // RGBA8U - { packRgba8S, unpackRgba8S }, // RGBA8S - { packRgba16, unpackRgba16 }, // RGBA16 - { packRgba16I, unpackRgba16I }, // RGBA16I - { packRgba16U, unpackRgba16U }, // RGBA16U - { packRgba16F, unpackRgba16F }, // RGBA16F - { packRgba16S, unpackRgba16S }, // RGBA16S - { packRgba32I, unpackRgba32I }, // RGBA32I - { packRgba32U, unpackRgba32U }, // RGBA32U - { packRgba32F, unpackRgba32F }, // RGBA32F - { packR5G6B5, unpackR5G6B5 }, // R5G6B5 - { packRgba4, unpackRgba4 }, // RGBA4 - { packRgb5a1, unpackRgb5a1 }, // RGB5A1 - { packRgb10A2, unpackRgb10A2 }, // RGB10A2 - { packR11G11B10F, unpackR11G11B10F }, // R11G11B10F - { NULL, NULL }, // UnknownDepth - { packR16, unpackR16 }, // D16 - { packR24, unpackR24 }, // D24 - { packR24G8, unpackR24G8 }, // D24S8 - { NULL, NULL }, // D32 - { packR16F, unpackR16F }, // D16F - { NULL, NULL }, // D24F - { packR32F, unpackR32F }, // D32F - { packR8, unpackR8 }, // D0S8 + { NULL, NULL }, // BC1 + { NULL, NULL }, // BC2 + { NULL, NULL }, // BC3 + { NULL, NULL }, // BC4 + { NULL, NULL }, // BC5 + { NULL, NULL }, // BC6H + { NULL, NULL }, // BC7 + { NULL, NULL }, // ETC1 + { NULL, NULL }, // ETC2 + { NULL, NULL }, // ETC2A + { NULL, NULL }, // ETC2A1 + { NULL, NULL }, // PTC12 + { NULL, NULL }, // PTC14 + { NULL, NULL }, // PTC12A + { NULL, NULL }, // PTC14A + { NULL, NULL }, // PTC22 + { NULL, NULL }, // PTC24 + { NULL, NULL }, // Unknown + { NULL, NULL }, // R1 + { bx::packR8, bx::unpackR8 }, // A8 + { bx::packR8, bx::unpackR8 }, // R8 + { bx::packR8I, bx::unpackR8I }, // R8I + { bx::packR8U, bx::unpackR8U }, // R8U + { bx::packR8S, bx::unpackR8S }, // R8S + { bx::packR16, bx::unpackR16 }, // R16 + { bx::packR16I, bx::unpackR16I }, // R16I + { bx::packR16U, bx::unpackR16U }, // R16U + { bx::packR16F, bx::unpackR16F }, // R16F + { bx::packR16S, bx::unpackR16S }, // R16S + { bx::packR32I, bx::unpackR32I }, // R32I + { bx::packR32U, bx::unpackR32U }, // R32U + { bx::packR32F, bx::unpackR32F }, // R32F + { bx::packRg8, bx::unpackRg8 }, // RG8 + { bx::packRg8I, bx::unpackRg8I }, // RG8I + { bx::packRg8U, bx::unpackRg8U }, // RG8U + { bx::packRg8S, bx::unpackRg8S }, // RG8S + { bx::packRg16, bx::unpackRg16 }, // RG16 + { bx::packRg16I, bx::unpackRg16I }, // RG16I + { bx::packRg16U, bx::unpackRg16U }, // RG16U + { bx::packRg16F, bx::unpackRg16F }, // RG16F + { bx::packRg16S, bx::unpackRg16S }, // RG16S + { bx::packRg32I, bx::unpackRg32I }, // RG32I + { bx::packRg32U, bx::unpackRg32U }, // RG32U + { bx::packRg32F, bx::unpackRg32F }, // RG32F + { bx::packRgb8, bx::unpackRgb8 }, // RGB8 + { bx::packRgb8S, bx::unpackRgb8S }, // RGB8S + { bx::packRgb8I, bx::unpackRgb8I }, // RGB8I + { bx::packRgb8U, bx::unpackRgb8U }, // RGB8U + { bx::packRgb9E5F, bx::unpackRgb9E5F }, // RGB9E5F + { bx::packBgra8, bx::unpackBgra8 }, // BGRA8 + { bx::packRgba8, bx::unpackRgba8 }, // RGBA8 + { bx::packRgba8I, bx::unpackRgba8I }, // RGBA8I + { bx::packRgba8U, bx::unpackRgba8U }, // RGBA8U + { bx::packRgba8S, bx::unpackRgba8S }, // RGBA8S + { bx::packRgba16, bx::unpackRgba16 }, // RGBA16 + { bx::packRgba16I, bx::unpackRgba16I }, // RGBA16I + { bx::packRgba16U, bx::unpackRgba16U }, // RGBA16U + { bx::packRgba16F, bx::unpackRgba16F }, // RGBA16F + { bx::packRgba16S, bx::unpackRgba16S }, // RGBA16S + { bx::packRgba32I, bx::unpackRgba32I }, // RGBA32I + { bx::packRgba32U, bx::unpackRgba32U }, // RGBA32U + { bx::packRgba32F, bx::unpackRgba32F }, // RGBA32F + { bx::packR5G6B5, bx::unpackR5G6B5 }, // R5G6B5 + { bx::packRgba4, bx::unpackRgba4 }, // RGBA4 + { bx::packRgb5a1, bx::unpackRgb5a1 }, // RGB5A1 + { bx::packRgb10A2, bx::unpackRgb10A2 }, // RGB10A2 + { bx::packR11G11B10F, bx::unpackR11G11B10F }, // R11G11B10F + { NULL, NULL }, // UnknownDepth + { bx::packR16, bx::unpackR16 }, // D16 + { bx::packR24, bx::unpackR24 }, // D24 + { bx::packR24G8, bx::unpackR24G8 }, // D24S8 + { NULL, NULL }, // D32 + { bx::packR16F, bx::unpackR16F }, // D16F + { NULL, NULL }, // D24F + { bx::packR32F, bx::unpackR32F }, // D32F + { bx::packR8, bx::unpackR8 }, // D0S8 }; - BX_STATIC_ASSERT(TextureFormat::Count == BX_COUNTOF(s_packUnpack) ); + BX_STATIC_ASSERT(TextureFormat::Count == BX_COUNTOF(s_packUnpack) ); bool imageConvert(TextureFormat::Enum _dstFormat, TextureFormat::Enum _srcFormat) { - UnpackFn unpack = s_packUnpack[_srcFormat].unpack; - PackFn pack = s_packUnpack[_dstFormat].pack; + bx::UnpackFn unpack = s_packUnpack[_srcFormat].unpack; + bx::PackFn pack = s_packUnpack[_dstFormat].pack; return NULL != pack && NULL != unpack ; } - void imageConvert(void* _dst, uint32_t _bpp, PackFn _pack, const void* _src, UnpackFn _unpack, uint32_t _size) + void imageConvert(void* _dst, uint32_t _bpp, bx::PackFn _pack, const void* _src, bx::UnpackFn _unpack, uint32_t _size) { const uint8_t* src = (uint8_t*)_src; uint8_t* dst = (uint8_t*)_dst; @@ -1718,7 +798,7 @@ namespace bgfx } } - 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 _srcPitch) + 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) { const uint8_t* src = (uint8_t*)_src; uint8_t* dst = (uint8_t*)_dst; @@ -1738,8 +818,8 @@ namespace bgfx bool imageConvert(void* _dst, TextureFormat::Enum _dstFormat, const void* _src, TextureFormat::Enum _srcFormat, uint32_t _width, uint32_t _height, uint32_t _srcPitch) { - UnpackFn unpack = s_packUnpack[_srcFormat].unpack; - PackFn pack = s_packUnpack[_dstFormat].pack; + bx::UnpackFn unpack = s_packUnpack[_srcFormat].unpack; + bx::PackFn pack = s_packUnpack[_dstFormat].pack; if (NULL == pack || NULL == unpack) { @@ -1756,9 +836,97 @@ namespace bgfx bool imageConvert(void* _dst, TextureFormat::Enum _dstFormat, const void* _src, TextureFormat::Enum _srcFormat, uint32_t _width, uint32_t _height) { const uint32_t srcBpp = s_imageBlockInfo[_srcFormat].bitsPerPixel; + + if (_dstFormat == _srcFormat) + { + bx::memCopy(_dst, _src, _width*_height*srcBpp/8); + return true; + } + return imageConvert(_dst, _dstFormat, _src, _srcFormat, _width, _height, _width*srcBpp/8); } + ImageContainer* imageConvert(bx::AllocatorI* _allocator, TextureFormat::Enum _dstFormat, 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 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) + { + ImageMip mip; + if (imageGetRawData(_input, side, lod, _input.m_data, _input.m_size, mip) ) + { + bool ok = imageConvert(dst + , _dstFormat + , mip.m_data + , mip.m_format + , mip.m_width + , mip.m_height + ); + 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; + } + } + } + + return output; + } + + ImageContainer* imageParseBgfx(bx::AllocatorI* _allocator, const void* _src, uint32_t _size) + { + ImageContainer imageContainer; + if (!imageParse(imageContainer, _src, _size) ) + { + return NULL; + } + + ImageContainer* output = imageAlloc(_allocator + , imageContainer.m_format + , uint16_t(imageContainer.m_width) + , uint16_t(imageContainer.m_height) + , uint16_t(imageContainer.m_depth) + , imageContainer.m_numLayers + , imageContainer.m_cubeMap + , 1 < imageContainer.m_numMips + ); + + 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) ) + { + bx::memCopy(dst, mip.m_data, mip.m_size); + dst += mip.m_size; + } + } + } + + return output; + } + uint8_t bitRangeConvert(uint32_t _in, uint32_t _from, uint32_t _to) { using namespace bx; @@ -2543,7 +1711,7 @@ namespace bgfx } } - const Memory* imageAlloc(ImageContainer& _imageContainer, TextureFormat::Enum _format, uint16_t _width, uint16_t _height, uint16_t _depth, uint16_t _numLayers, bool _cubeMap, bool _generateMips) + 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) { const ImageBlockInfo& blockInfo = getBlockInfo(_format); const uint16_t blockWidth = blockInfo.blockWidth; @@ -2556,31 +1724,38 @@ namespace bgfx _depth = bx::uint16_max(1, _depth); _numLayers = bx::uint16_max(1, _numLayers); - const uint8_t numMips = _generateMips ? imageGetNumMips(_format, _width, _height) : 1; - uint32_t size = imageGetSize(_format, _width, _height, _depth, _numLayers, _cubeMap, numMips); - const Memory* image = alloc(size); + const uint8_t numMips = _hasMips ? imageGetNumMips(_format, _width, _height) : 1; + uint32_t size = imageGetSize(NULL, _width, _height, _depth, _cubeMap, _hasMips, _numLayers, _format); - _imageContainer.m_data = image->data; - _imageContainer.m_format = _format; - _imageContainer.m_size = image->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* imageContainer = (ImageContainer*)BX_ALLOC(_allocator, size + sizeof(ImageContainer) ); - return image; + 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; + + if (NULL != _data) + { + bx::memCopy(imageContainer->m_data, _data, imageContainer->m_size); + } + + return imageContainer; } - void imageFree(const Memory* _memory) + void imageFree(ImageContainer* _imageContainer) { - release(_memory); + BX_FREE(_imageContainer->m_allocator, _imageContainer); } // DDS @@ -2924,6 +2099,7 @@ namespace bgfx } } + _imageContainer.m_allocator = NULL; _imageContainer.m_data = NULL; _imageContainer.m_size = 0; _imageContainer.m_offset = (uint32_t)bx::seek(_reader); @@ -2980,6 +2156,7 @@ namespace bgfx #define KTX_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT 0x8A56 #define KTX_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT 0x8A57 +#define KTX_A8 0x803C #define KTX_R8 0x8229 #define KTX_R16 0x822A #define KTX_RG8 0x822B @@ -3148,6 +2325,7 @@ namespace bgfx static const KtxFormatInfo2 s_translateKtxFormat2[] = { + { KTX_A8, TextureFormat::A8 }, { KTX_RED, TextureFormat::R8 }, { KTX_RGB, TextureFormat::RGB8 }, }; @@ -3231,6 +2409,7 @@ namespace bgfx } } + _imageContainer.m_allocator = NULL; _imageContainer.m_data = NULL; _imageContainer.m_size = 0; _imageContainer.m_offset = (uint32_t)offset; @@ -3381,6 +2560,7 @@ namespace bgfx } } + _imageContainer.m_allocator = NULL; _imageContainer.m_data = NULL; _imageContainer.m_size = 0; _imageContainer.m_offset = (uint32_t)offset; @@ -3423,6 +2603,7 @@ namespace bgfx _imageContainer.m_format = tc.m_format; _imageContainer.m_offset = UINT32_MAX; + _imageContainer.m_allocator = NULL; if (NULL == tc.m_mem) { _imageContainer.m_data = NULL; @@ -3478,10 +2659,10 @@ namespace bgfx src += 8; uint8_t* block = &dst[(yy*_pitch+xx*4)*4]; - memcpy(&block[0*_pitch], &temp[ 0], 16); - memcpy(&block[1*_pitch], &temp[16], 16); - memcpy(&block[2*_pitch], &temp[32], 16); - memcpy(&block[3*_pitch], &temp[48], 16); + 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); } } break; @@ -3497,10 +2678,10 @@ namespace bgfx src += 8; uint8_t* block = &dst[(yy*_pitch+xx*4)*4]; - memcpy(&block[0*_pitch], &temp[ 0], 16); - memcpy(&block[1*_pitch], &temp[16], 16); - memcpy(&block[2*_pitch], &temp[32], 16); - memcpy(&block[3*_pitch], &temp[48], 16); + 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); } } break; @@ -3516,10 +2697,10 @@ namespace bgfx src += 8; uint8_t* block = &dst[(yy*_pitch+xx*4)*4]; - memcpy(&block[0*_pitch], &temp[ 0], 16); - memcpy(&block[1*_pitch], &temp[16], 16); - memcpy(&block[2*_pitch], &temp[32], 16); - memcpy(&block[3*_pitch], &temp[48], 16); + 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); } } break; @@ -3533,10 +2714,10 @@ namespace bgfx src += 8; uint8_t* block = &dst[(yy*_pitch+xx*4)*4]; - memcpy(&block[0*_pitch], &temp[ 0], 16); - memcpy(&block[1*_pitch], &temp[16], 16); - memcpy(&block[2*_pitch], &temp[32], 16); - memcpy(&block[3*_pitch], &temp[48], 16); + 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); } } break; @@ -3561,10 +2742,10 @@ namespace bgfx } uint8_t* block = &dst[(yy*_pitch+xx*4)*4]; - memcpy(&block[0*_pitch], &temp[ 0], 16); - memcpy(&block[1*_pitch], &temp[16], 16); - memcpy(&block[2*_pitch], &temp[32], 16); - memcpy(&block[3*_pitch], &temp[48], 16); + 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); } } break; @@ -3579,32 +2760,32 @@ namespace bgfx src += 8; uint8_t* block = &dst[(yy*_pitch+xx*4)*4]; - memcpy(&block[0*_pitch], &temp[ 0], 16); - memcpy(&block[1*_pitch], &temp[16], 16); - memcpy(&block[2*_pitch], &temp[32], 16); - memcpy(&block[3*_pitch], &temp[48], 16); + 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); } } break; case TextureFormat::ETC2A: BX_WARN(false, "ETC2A decoder is not implemented."); - imageCheckerboard(_width, _height, 16, UINT32_C(0xff000000), UINT32_C(0xff00ff00), _dst); + imageCheckerboard(_dst, _width, _height, 16, UINT32_C(0xff000000), UINT32_C(0xff00ff00) ); break; case TextureFormat::ETC2A1: BX_WARN(false, "ETC2A1 decoder is not implemented."); - imageCheckerboard(_width, _height, 16, UINT32_C(0xff000000), UINT32_C(0xffff0000), _dst); + imageCheckerboard(_dst, _width, _height, 16, UINT32_C(0xff000000), UINT32_C(0xffff0000) ); break; case TextureFormat::PTC12: BX_WARN(false, "PTC12 decoder is not implemented."); - imageCheckerboard(_width, _height, 16, UINT32_C(0xff000000), UINT32_C(0xffff00ff), _dst); + imageCheckerboard(_dst, _width, _height, 16, UINT32_C(0xff000000), UINT32_C(0xffff00ff) ); break; case TextureFormat::PTC12A: BX_WARN(false, "PTC12A decoder is not implemented."); - imageCheckerboard(_width, _height, 16, UINT32_C(0xff000000), UINT32_C(0xffffff00), _dst); + imageCheckerboard(_dst, _width, _height, 16, UINT32_C(0xff000000), UINT32_C(0xffffff00) ); break; case TextureFormat::PTC14: @@ -3615,10 +2796,10 @@ namespace bgfx decodeBlockPtc14(temp, src, xx, yy, width, height); uint8_t* block = &dst[(yy*_pitch+xx*4)*4]; - memcpy(&block[0*_pitch], &temp[ 0], 16); - memcpy(&block[1*_pitch], &temp[16], 16); - memcpy(&block[2*_pitch], &temp[32], 16); - memcpy(&block[3*_pitch], &temp[48], 16); + 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); } } break; @@ -3631,30 +2812,30 @@ namespace bgfx decodeBlockPtc14A(temp, src, xx, yy, width, height); uint8_t* block = &dst[(yy*_pitch+xx*4)*4]; - memcpy(&block[0*_pitch], &temp[ 0], 16); - memcpy(&block[1*_pitch], &temp[16], 16); - memcpy(&block[2*_pitch], &temp[32], 16); - memcpy(&block[3*_pitch], &temp[48], 16); + 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); } } break; case TextureFormat::PTC22: BX_WARN(false, "PTC22 decoder is not implemented."); - imageCheckerboard(_width, _height, 16, UINT32_C(0xff00ff00), UINT32_C(0xff0000ff), _dst); + imageCheckerboard(_dst, _width, _height, 16, UINT32_C(0xff00ff00), UINT32_C(0xff0000ff) ); break; case TextureFormat::PTC24: BX_WARN(false, "PTC24 decoder is not implemented."); - imageCheckerboard(_width, _height, 16, UINT32_C(0xff000000), UINT32_C(0xffffffff), _dst); + imageCheckerboard(_dst, _width, _height, 16, UINT32_C(0xff000000), UINT32_C(0xffffffff) ); break; case TextureFormat::RGBA8: - imageSwizzleBgra8(_width, _height, _pitch, _src, _dst); + imageSwizzleBgra8(_dst, _width, _height, _pitch, _src); break; case TextureFormat::BGRA8: - memcpy(_dst, _src, _pitch*_height); + bx::memCopy(_dst, _src, _pitch*_height); break; default: @@ -3664,7 +2845,7 @@ namespace bgfx if (!imageConvert(_dst, TextureFormat::BGRA8, _src, _format, _width, _height, srcPitch) ) { // Failed to convert, just make ugly red-yellow checkerboard texture. - imageCheckerboard(_width, _height, 16, UINT32_C(0xffff0000), UINT32_C(0xffffff00), _dst); + imageCheckerboard(_dst, _width, _height, 16, UINT32_C(0xffff0000), UINT32_C(0xffffff00) ); } } break; @@ -3676,16 +2857,16 @@ namespace bgfx switch (_format) { case TextureFormat::RGBA8: - memcpy(_dst, _src, _pitch*_height); + bx::memCopy(_dst, _src, _pitch*_height); break; case TextureFormat::BGRA8: - imageSwizzleBgra8(_width, _height, _pitch, _src, _dst); + imageSwizzleBgra8(_dst, _width, _height, _pitch, _src); break; default: imageDecodeToBgra8(_dst, _src, _width, _height, _pitch, _format); - imageSwizzleBgra8(_width, _height, _width*4, _dst, _dst); + imageSwizzleBgra8(_dst, _width, _height, _width*4, _dst); break; } } @@ -3796,7 +2977,7 @@ namespace bgfx break; case TextureFormat::RGBA32F: - memcpy(_dst, _src, _pitch*_height); + bx::memCopy(_dst, _src, _pitch*_height); break; case TextureFormat::RGBA8: @@ -3806,7 +2987,8 @@ namespace bgfx default: if (isCompressed(_format) ) { - void* temp = BX_ALLOC(_allocator, imageGetSize(_format, uint16_t(_pitch/4), uint16_t(_height) ) ); + 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); diff --git a/3rdparty/bgfx/src/image.h b/3rdparty/bgfx/src/image.h index 4fce6d7..ef05a1f 100644 --- a/3rdparty/bgfx/src/image.h +++ b/3rdparty/bgfx/src/image.h @@ -1,19 +1,22 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * 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 +#include namespace bgfx { struct ImageContainer { - void* m_data; + bx::AllocatorI* m_allocator; + void* m_data; + TextureFormat::Enum m_format; + uint32_t m_size; uint32_t m_offset; uint32_t m_width; @@ -40,20 +43,6 @@ namespace bgfx const uint8_t* m_data; }; - struct EncodingType - { - enum Enum - { - Unorm, - Int, - Uint, - Float, - Snorm, - - Count - }; - }; - struct ImageBlockInfo { uint8_t bitsPerPixel; @@ -71,205 +60,6 @@ namespace bgfx uint8_t encoding; }; - typedef void (*PackFn)(void*, const float*); - typedef void (*UnpackFn)(float*, const void*); - - // R8 - void packR8(void* _dst, const float* _src); - void unpackR8(float* _dst, const void* _src); - - // R8S - void packR8S(void* _dst, const float* _src); - void unpackR8S(float* _dst, const void* _src); - - // R8I - void packR8I(void* _dst, const float* _src); - void unpackR8I(float* _dst, const void* _src); - - // R8U - void packR8U(void* _dst, const float* _src); - void unpackR8U(float* _dst, const void* _src); - - // RG8 - void packRg8(void* _dst, const float* _src); - void unpackRg8(float* _dst, const void* _src); - - // RG8S - void packRg8S(void* _dst, const float* _src); - void unpackRg8S(float* _dst, const void* _src); - - // RG8I - void packRg8I(void* _dst, const float* _src); - void unpackRg8I(float* _dst, const void* _src); - - // RG8U - void packRg8U(void* _dst, const float* _src); - void unpackRg8U(float* _dst, const void* _src); - - // RGB8 - void packRgb8(void* _dst, const float* _src); - void unpackRgb8(float* _dst, const void* _src); - - // RGB8S - void packRgb8S(void* _dst, const float* _src); - void unpackRgb8S(float* _dst, const void* _src); - - // RGB8I - void packRgb8I(void* _dst, const float* _src); - void unpackRgb8I(float* _dst, const void* _src); - - // RGB8U - void packRgb8U(void* _dst, const float* _src); - void unpackRgb8U(float* _dst, const void* _src); - - // RGBA8 - void packRgba8(void* _dst, const float* _src); - void unpackRgba8(float* _dst, const void* _src); - - // BGRA8 - void packBgra8(void* _dst, const float* _src); - void unpackBgra8(float* _dst, const void* _src); - - // RGBA8S - void packRgba8S(void* _dst, const float* _src); - void unpackRgba8S(float* _dst, const void* _src); - - // RGBA8I - void packRgba8I(void* _dst, const float* _src); - void unpackRgba8I(float* _dst, const void* _src); - - // RGBA8U - void packRgba8U(void* _dst, const float* _src); - void unpackRgba8U(float* _dst, const void* _src); - - // R16 - void packR16(void* _dst, const float* _src); - void unpackR16(float* _dst, const void* _src); - - // R16S - void packR16S(void* _dst, const float* _src); - void unpackR16S(float* _dst, const void* _src); - - // R16I - void packR16I(void* _dst, const float* _src); - void unpackR16I(float* _dst, const void* _src); - - // R16U - void packR16U(void* _dst, const float* _src); - void unpackR16U(float* _dst, const void* _src); - - // R16F - void packR16F(void* _dst, const float* _src); - void unpackR16F(float* _dst, const void* _src); - - // RG16 - void packRg16(void* _dst, const float* _src); - void unpackRg16(float* _dst, const void* _src); - - // RG16S - void packRg16S(void* _dst, const float* _src); - void unpackRg16S(float* _dst, const void* _src); - - // RG16I - void packRg16I(void* _dst, const float* _src); - void unpackRg16I(float* _dst, const void* _src); - - // RG16U - void packRg16U(void* _dst, const float* _src); - void unpackRg16U(float* _dst, const void* _src); - - // RG16F - void packRg16F(void* _dst, const float* _src); - void unpackRg16F(float* _dst, const void* _src); - - // RGBA16 - void packRgba16(void* _dst, const float* _src); - void unpackRgba16(float* _dst, const void* _src); - - // RGBA16S - void packRgba16S(void* _dst, const float* _src); - void unpackRgba16S(float* _dst, const void* _src); - - // RGBA16I - void packRgba16I(void* _dst, const float* _src); - void unpackRgba16I(float* _dst, const void* _src); - - // RGBA16U - void packRgba16U(void* _dst, const float* _src); - void unpackRgba16U(float* _dst, const void* _src); - - // RGBA16F - void packRgba16F(void* _dst, const float* _src); - void unpackRgba16F(float* _dst, const void* _src); - - // R32I - void packR32I(void* _dst, const float* _src); - void unpackR32I(float* _dst, const void* _src); - - // R32U - void packR32U(void* _dst, const float* _src); - void unpackR32U(float* _dst, const void* _src); - - // R32F - void packR32F(void* _dst, const float* _src); - void unpackR32F(float* _dst, const void* _src); - - // RG32I - void packRg32I(void* _dst, const float* _src); - void unpackRg32I(float* _dst, const void* _src); - - // RG32U - void packRg32U(void* _dst, const float* _src); - void unpackRg32U(float* _dst, const void* _src); - - // RGB9E5F - void packRgb9E5F(void* _dst, const float* _src); - void unpackRgb9E5F(float* _dst, const void* _src); - - // RGBA32I - void packRgba32I(void* _dst, const float* _src); - void unpackRgba32I(float* _dst, const void* _src); - - // RGBA32U - void packRgba32U(void* _dst, const float* _src); - void unpackRgba32U(float* _dst, const void* _src); - - // RGBA32F - void packRgba32F(void* _dst, const float* _src); - void unpackRgba32F(float* _dst, const void* _src); - - // R5G6B5 - void packR5G6B5(void* _dst, const float* _src); - void unpackR5G6B5(float* _dst, const void* _src); - - // RGBA4 - void packRgba4(void* _dst, const float* _src); - void unpackRgba4(float* _dst, const void* _src); - - // RGBA4 - void packBgra4(void* _dst, const float* _src); - void unpackBgra4(float* _dst, const void* _src); - - // RGB5A1 - void packRgb5a1(void* _dst, const float* _src); - void unpackRgb5a1(float* _dst, const void* _src); - - // BGR5A1 - void packBgr5a1(void* _dst, const float* _src); - void unpackBgr5a1(float* _dst, const void* _src); - - // RGB10A2 - 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); - - // RG32F - void packRg32F(void* _dst, const float* _src); - void unpackRg32F(float* _dst, const void* _src); - /// Returns true if texture format is compressed. bool isCompressed(TextureFormat::Enum _format); @@ -300,27 +90,28 @@ namespace bgfx , uint16_t _width , uint16_t _height , uint16_t _depth = 0 - ); + ); /// Returns image size. uint32_t imageGetSize( - TextureFormat::Enum _format + TextureInfo* _info , uint16_t _width , uint16_t _height - , uint16_t _depth = 0 - , uint16_t _numLayers = 1 - , bool _cubeMap = false - , uint8_t _numMips = 1 - ); + , uint16_t _depth + , bool _cubeMap + , bool _hasMips + , uint16_t _numLayers + , TextureFormat::Enum _format + ); /// - void imageSolid(uint32_t _width, uint32_t _height, uint32_t _solid, void* _dst); + void imageSolid(void* _dst, uint32_t _width, uint32_t _height, uint32_t _solid); /// - void imageCheckerboard(uint32_t _width, uint32_t _height, uint32_t _step, uint32_t _0, uint32_t _1, void* _dst); + void imageCheckerboard(void* _dst, uint32_t _width, uint32_t _height, uint32_t _step, uint32_t _0, uint32_t _1); /// - void imageRgba8Downsample2x2(uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src, void* _dst); + 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); @@ -329,55 +120,113 @@ namespace bgfx void imageRgba32fToGamma(void* _dst, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src); /// - void imageRgba32fLinearDownsample2x2(uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src, void* _dst); + void imageRgba32fLinearDownsample2x2(void* _dst, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src); /// - void imageRgba32fDownsample2x2NormalMap(uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src, void* _dst); + void imageRgba32fDownsample2x2NormalMap(void* _dst, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src); /// - void imageSwizzleBgra8(uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src, void* _dst); + void imageSwizzleBgra8(void* _dst, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src); /// - void imageCopy(uint32_t _height, uint32_t _srcPitch, const void* _src, uint32_t _dstPitch, void* _dst); + void imageCopy(void* _dst, uint32_t _height, uint32_t _srcPitch, const void* _src, uint32_t _dstPitch); /// - void imageCopy(uint32_t _width, uint32_t _height, uint32_t _bpp, uint32_t _pitch, const void* _src, void* _dst); + 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, PackFn _pack, const void* _src, UnpackFn _unpack, uint32_t _size); + 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, PackFn _pack, const void* _src, uint32_t _srcBpp, UnpackFn _unpack, uint32_t _width, uint32_t _height, uint32_t _srcPitch); + 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); + bool imageConvert( + void* _dst + , TextureFormat::Enum _dstFormat + , const void* _src + , TextureFormat::Enum _srcFormat + , uint32_t _width + , uint32_t _height + ); /// - const Memory* imageAlloc( - ImageContainer& _imageContainer + 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 = 0 - , uint16_t _numLayers = 1 - , bool _cubeMap = false - , bool _generateMips = false - ); + , uint16_t _depth + , uint16_t _numLayers + , bool _cubeMap + , bool _hasMips + , const void* _data = NULL + ); /// - void imageFree(const Memory* _memory); + 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 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 + , 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); + void imageWriteKtx( + bx::WriterI* _writer + , ImageContainer& _imageContainer + , const void* _data + , uint32_t _size + , bx::Error* _err = NULL + ); /// bool imageParse(ImageContainer& _imageContainer, bx::ReaderSeekerI* _reader); diff --git a/3rdparty/bgfx/src/makefile b/3rdparty/bgfx/src/makefile index 3fade99..8f017d2 100644 --- a/3rdparty/bgfx/src/makefile +++ b/3rdparty/bgfx/src/makefile @@ -1,6 +1,6 @@ # -# Copyright 2011-2016 Branimir Karadzic. All rights reserved. -# License: http://www.opensource.org/licenses/BSD-2-Clause +# Copyright 2011-2017 Branimir Karadzic. All rights reserved. +# License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause # THISDIR:=$(dir $(lastword $(MAKEFILE_LIST))) @@ -27,6 +27,8 @@ define shader-embedded @echo [$(<)] $(SILENT) $(SHADERC) --type $(1) --platform linux -f $(<) -o $(SHADER_TMP) --bin2c $(basename $(<))_glsl @cat $(SHADER_TMP) > $(@) + -$(SILENT) $(SHADERC) --type $(1) --platform linux -p spirv -f $(<) -o $(SHADER_TMP) --bin2c $(basename $(<))_spv + -@cat $(SHADER_TMP) >> $(@) -$(SILENT) $(SHADERC) --type $(1) --platform windows -p $(2) -O 3 -f $(<) -o $(SHADER_TMP) --bin2c $(basename $(<))_dx9 -@cat $(SHADER_TMP) >> $(@) -$(SILENT) $(SHADERC) --type $(1) --platform windows -p $(3) -O 3 -f $(<) -o $(SHADER_TMP) --bin2c $(basename $(<))_dx11 diff --git a/3rdparty/bgfx/src/renderer.h b/3rdparty/bgfx/src/renderer.h index 77406e9..1bf8fbb 100644 --- a/3rdparty/bgfx/src/renderer.h +++ b/3rdparty/bgfx/src/renderer.h @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -16,24 +16,24 @@ namespace bgfx { } - ViewState(Frame* _render, bool _hmdEnabled) + ViewState(Frame* _frame, bool _hmdEnabled) { - reset(_render, _hmdEnabled); + reset(_frame, _hmdEnabled); } - void reset(Frame* _render, bool _hmdEnabled) + void reset(Frame* _frame, bool _hmdEnabled) { m_alphaRef = 0.0f; m_invViewCached = UINT16_MAX; m_invProjCached = UINT16_MAX; m_invViewProjCached = UINT16_MAX; - m_view[0] = _render->m_view; + m_view[0] = _frame->m_view; m_view[1] = m_viewTmp[1]; if (_hmdEnabled) { - HMD& hmd = _render->m_hmd; + HMD& hmd = _frame->m_hmd; m_view[0] = m_viewTmp[0]; Matrix4 viewAdjust; @@ -48,16 +48,16 @@ namespace bgfx for (uint32_t ii = 0; ii < BGFX_CONFIG_MAX_VIEWS; ++ii) { - if (BGFX_VIEW_STEREO == (_render->m_viewFlags[ii] & BGFX_VIEW_STEREO) ) + if (BGFX_VIEW_STEREO == (_frame->m_viewFlags[ii] & BGFX_VIEW_STEREO) ) { bx::float4x4_mul(&m_view[eye][ii].un.f4x4 - , &_render->m_view[ii].un.f4x4 + , &_frame->m_view[ii].un.f4x4 , &viewAdjust.un.f4x4 ); } else { - memcpy(&m_view[0][ii].un.f4x4, &_render->m_view[ii].un.f4x4, sizeof(Matrix4) ); + bx::memCopy(&m_view[0][ii].un.f4x4, &_frame->m_view[ii].un.f4x4, sizeof(Matrix4) ); } } } @@ -69,14 +69,14 @@ namespace bgfx { bx::float4x4_mul(&m_viewProj[eye][ii].un.f4x4 , &m_view[eye][ii].un.f4x4 - , &_render->m_proj[eye][ii].un.f4x4 + , &_frame->m_proj[eye][ii].un.f4x4 ); } } } template - void setPredefined(RendererContext* _renderer, uint16_t view, uint8_t eye, Program& _program, Frame* _render, const Draw& _draw) + void setPredefined(RendererContext* _renderer, uint16_t _view, uint8_t _eye, Program& _program, Frame* _frame, const Draw& _draw) { for (uint32_t ii = 0, num = _program.m_numPredefined; ii < num; ++ii) { @@ -118,7 +118,7 @@ namespace bgfx { _renderer->setShaderUniform4x4f(flags , predefined.m_loc - , m_view[eye][view].un.val + , m_view[_eye][_view].un.val , bx::uint32_min(mtxRegs, predefined.m_count) ); } @@ -126,12 +126,12 @@ namespace bgfx case PredefinedUniform::InvView: { - uint16_t viewEye = (view << 1) | eye; + uint16_t viewEye = (_view << 1) | _eye; if (viewEye != m_invViewCached) { m_invViewCached = viewEye; bx::float4x4_inverse(&m_invView.un.f4x4 - , &m_view[eye][view].un.f4x4 + , &m_view[_eye][_view].un.f4x4 ); } @@ -147,7 +147,7 @@ namespace bgfx { _renderer->setShaderUniform4x4f(flags , predefined.m_loc - , _render->m_proj[eye][view].un.val + , _frame->m_proj[_eye][_view].un.val , bx::uint32_min(mtxRegs, predefined.m_count) ); } @@ -155,12 +155,12 @@ namespace bgfx case PredefinedUniform::InvProj: { - uint16_t viewEye = (view << 1) | eye; + uint16_t viewEye = (_view << 1) | _eye; if (viewEye != m_invProjCached) { m_invProjCached = viewEye; bx::float4x4_inverse(&m_invProj.un.f4x4 - , &_render->m_proj[eye][view].un.f4x4 + , &_frame->m_proj[_eye][_view].un.f4x4 ); } @@ -176,7 +176,7 @@ namespace bgfx { _renderer->setShaderUniform4x4f(flags , predefined.m_loc - , m_viewProj[eye][view].un.val + , m_viewProj[_eye][_view].un.val , bx::uint32_min(mtxRegs, predefined.m_count) ); } @@ -184,12 +184,12 @@ namespace bgfx case PredefinedUniform::InvViewProj: { - uint16_t viewEye = (view << 1) | eye; + uint16_t viewEye = (_view << 1) | _eye; if (viewEye != m_invViewProjCached) { m_invViewProjCached = viewEye; bx::float4x4_inverse(&m_invViewProj.un.f4x4 - , &m_viewProj[eye][view].un.f4x4 + , &m_viewProj[_eye][_view].un.f4x4 ); } @@ -203,7 +203,7 @@ namespace bgfx case PredefinedUniform::Model: { - const Matrix4& model = _render->m_matrixCache.m_cache[_draw.m_matrix]; + const Matrix4& model = _frame->m_matrixCache.m_cache[_draw.m_matrix]; _renderer->setShaderUniform4x4f(flags , predefined.m_loc , model.un.val @@ -215,10 +215,10 @@ namespace bgfx case PredefinedUniform::ModelView: { Matrix4 modelView; - const Matrix4& model = _render->m_matrixCache.m_cache[_draw.m_matrix]; + const Matrix4& model = _frame->m_matrixCache.m_cache[_draw.m_matrix]; bx::float4x4_mul(&modelView.un.f4x4 , &model.un.f4x4 - , &m_view[eye][view].un.f4x4 + , &m_view[_eye][_view].un.f4x4 ); _renderer->setShaderUniform4x4f(flags , predefined.m_loc @@ -231,10 +231,10 @@ namespace bgfx case PredefinedUniform::ModelViewProj: { Matrix4 modelViewProj; - const Matrix4& model = _render->m_matrixCache.m_cache[_draw.m_matrix]; + const Matrix4& model = _frame->m_matrixCache.m_cache[_draw.m_matrix]; bx::float4x4_mul(&modelViewProj.un.f4x4 , &model.un.f4x4 - , &m_viewProj[eye][view].un.f4x4 + , &m_viewProj[_eye][_view].un.f4x4 ); _renderer->setShaderUniform4x4f(flags , predefined.m_loc @@ -283,7 +283,7 @@ namespace bgfx class StateCacheLru { public: - void add(uint64_t _key, Ty _value, uint16_t _parent) + Ty* add(uint64_t _key, const Ty& _value, uint16_t _parent) { uint16_t handle = m_alloc.alloc(); if (UINT16_MAX == handle) @@ -300,6 +300,8 @@ namespace bgfx data.m_value = _value; data.m_parent = _parent; m_hashMap.insert(stl::make_pair(_key, handle) ); + + return &m_data[handle].m_value; } Ty* find(uint64_t _key) @@ -390,6 +392,50 @@ namespace bgfx Data m_data[MaxHandleT]; }; + class StateCache + { + public: + void add(uint64_t _key, uint16_t _value) + { + invalidate(_key); + m_hashMap.insert(stl::make_pair(_key, _value) ); + } + + uint16_t find(uint64_t _key) + { + HashMap::iterator it = m_hashMap.find(_key); + if (it != m_hashMap.end() ) + { + return it->second; + } + + return UINT16_MAX; + } + + void invalidate(uint64_t _key) + { + HashMap::iterator it = m_hashMap.find(_key); + if (it != m_hashMap.end() ) + { + m_hashMap.erase(it); + } + } + + void invalidate() + { + m_hashMap.clear(); + } + + uint32_t getCount() const + { + return uint32_t(m_hashMap.size() ); + } + + private: + typedef stl::unordered_map HashMap; + HashMap m_hashMap; + }; + } // 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 1572669..3b0f48a 100644 --- a/3rdparty/bgfx/src/renderer_d3d.h +++ b/3rdparty/bgfx/src/renderer_d3d.h @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -167,50 +167,6 @@ namespace bgfx HashMap m_hashMap; }; - class StateCache - { - public: - void add(uint64_t _key, uint16_t _value) - { - invalidate(_key); - m_hashMap.insert(stl::make_pair(_key, _value) ); - } - - uint16_t find(uint64_t _key) - { - HashMap::iterator it = m_hashMap.find(_key); - if (it != m_hashMap.end() ) - { - return it->second; - } - - return UINT16_MAX; - } - - void invalidate(uint64_t _key) - { - HashMap::iterator it = m_hashMap.find(_key); - if (it != m_hashMap.end() ) - { - m_hashMap.erase(it); - } - } - - void invalidate() - { - m_hashMap.clear(); - } - - uint32_t getCount() const - { - return uint32_t(m_hashMap.size() ); - } - - private: - typedef stl::unordered_map HashMap; - HashMap m_hashMap; - }; - template<> inline void release(IUnknown* _ptr) { diff --git a/3rdparty/bgfx/src/renderer_d3d11.cpp b/3rdparty/bgfx/src/renderer_d3d11.cpp index 7f61195..2a65c2a 100644 --- a/3rdparty/bgfx/src/renderer_d3d11.cpp +++ b/3rdparty/bgfx/src/renderer_d3d11.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -70,7 +70,7 @@ namespace bgfx { namespace d3d11 { Zero() { - memset(this, 0, sizeof(Zero) ); + bx::memSet(this, 0, sizeof(Zero) ); } ID3D11Buffer* m_buffer[D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT]; @@ -364,7 +364,7 @@ namespace bgfx { namespace d3d11 { if (UINT16_MAX != _decl.m_attributes[attr]) { - memcpy(elem, &s_attrib[attr], sizeof(D3D11_INPUT_ELEMENT_DESC) ); + bx::memCopy(elem, &s_attrib[attr], sizeof(D3D11_INPUT_ELEMENT_DESC) ); if (0 == _decl.m_attributes[attr]) { @@ -397,8 +397,8 @@ namespace bgfx { namespace d3d11 void clear() { - memset(m_srv, 0, sizeof(m_srv) ); - memset(m_sampler, 0, sizeof(m_sampler) ); + bx::memSet(m_srv, 0, sizeof(m_srv) ); + bx::memSet(m_sampler, 0, sizeof(m_sampler) ); } ID3D11ShaderResourceView* m_srv[BGFX_CONFIG_MAX_TEXTURE_SAMPLERS]; @@ -444,6 +444,17 @@ namespace bgfx { namespace d3d11 IID_IDXGIDevice0, }; + 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 + ; + } + template static BX_NO_INLINE void setDebugObjectName(Ty* _interface, const char* _format, ...) { @@ -452,7 +463,7 @@ namespace bgfx { namespace d3d11 char temp[2048]; va_list argList; va_start(argList, _format); - int size = bx::uint32_min(sizeof(temp)-1, vsnprintf(temp, sizeof(temp), _format, argList) ); + int size = bx::uint32_min(sizeof(temp)-1, bx::vsnprintf(temp, sizeof(temp), _format, argList) ); va_end(argList); temp[size] = '\0'; @@ -614,17 +625,16 @@ namespace bgfx { namespace d3d11 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 renderEyeStart(const VRDesc& _desc, uint8_t _eye) BX_OVERRIDE; + virtual void makeRenderTargetActive(const VRDesc& _desc) BX_OVERRIDE; virtual bool submitSwapChain(const VRDesc& _desc) BX_OVERRIDE; private: - ID3D11RenderTargetView* m_eyeRtv[2][4]; - ID3D11DepthStencilView* m_depthBuffer[2]; - ID3D11Texture2D* m_msaaTexture[2]; - ID3D11ShaderResourceView* m_msaaSv[2]; - ID3D11RenderTargetView* m_msaaRtv[2]; + ID3D11DepthStencilView* m_depthBuffer; + ID3D11RenderTargetView* m_eyeRtv[4]; + ID3D11RenderTargetView* m_msaaRtv; + ID3D11Texture2D* m_msaaTexture; - ovrTextureSwapChain m_textureSwapChain[2]; + ovrTextureSwapChain m_textureSwapChain; ovrMirrorTexture m_mirrorTexture; }; #endif // BGFX_CONFIG_USE_OVR @@ -665,9 +675,9 @@ namespace bgfx { namespace d3d11 , m_timerQuerySupport(false) { m_fbh.idx = invalidHandle; - memset(&m_adapterDesc, 0, sizeof(m_adapterDesc) ); - memset(&m_scd, 0, sizeof(m_scd) ); - memset(&m_windows, 0xff, sizeof(m_windows) ); + bx::memSet(&m_adapterDesc, 0, sizeof(m_adapterDesc) ); + bx::memSet(&m_scd, 0, sizeof(m_scd) ); + bx::memSet(&m_windows, 0xff, sizeof(m_windows) ); } ~RendererContextD3D11() @@ -702,8 +712,8 @@ namespace bgfx { namespace d3d11 } m_fbh.idx = invalidHandle; - memset(m_uniforms, 0, sizeof(m_uniforms) ); - memset(&m_resolution, 0, sizeof(m_resolution) ); + bx::memSet(m_uniforms, 0, sizeof(m_uniforms) ); + bx::memSet(&m_resolution, 0, sizeof(m_resolution) ); m_ags = NULL; m_agsdll = bx::dlopen( @@ -1114,7 +1124,7 @@ BX_PRAGMA_DIAGNOSTIC_POP(); DX_RELEASE(device, 2); } - memset(&m_adapterDesc, 0, sizeof(m_adapterDesc) ); + bx::memSet(&m_adapterDesc, 0, sizeof(m_adapterDesc) ); hr = adapter->GetDesc(&m_adapterDesc); BX_WARN(SUCCEEDED(hr), "Adapter GetDesc failed 0x%08x.", hr); @@ -1135,7 +1145,7 @@ BX_PRAGMA_DIAGNOSTIC_POP(); goto error; } - memset(&m_scd, 0, sizeof(m_scd) ); + bx::memSet(&m_scd, 0, sizeof(m_scd) ); m_scd.Width = BGFX_DEFAULT_WIDTH; m_scd.Height = BGFX_DEFAULT_HEIGHT; m_scd.Format = DXGI_FORMAT_R8G8B8A8_UNORM; @@ -1195,7 +1205,7 @@ BX_PRAGMA_DIAGNOSTIC_POP(); goto error; } - memset(&m_scd, 0, sizeof(m_scd) ); + bx::memSet(&m_scd, 0, sizeof(m_scd) ); m_scd.BufferDesc.Width = BGFX_DEFAULT_WIDTH; m_scd.BufferDesc.Height = BGFX_DEFAULT_HEIGHT; m_scd.BufferDesc.RefreshRate.Numerator = 60; @@ -1226,7 +1236,7 @@ BX_PRAGMA_DIAGNOSTIC_POP(); } else { - memset(&m_scd, 0, sizeof(m_scd) ); + bx::memSet(&m_scd, 0, sizeof(m_scd) ); m_scd.SampleDesc.Count = 1; m_scd.SampleDesc.Quality = 0; setBufferSize(BGFX_DEFAULT_WIDTH, BGFX_DEFAULT_HEIGHT); @@ -1248,7 +1258,7 @@ BX_PRAGMA_DIAGNOSTIC_POP(); m_infoQueue->SetBreakOnSeverity(D3D11_MESSAGE_SEVERITY_WARNING, false); D3D11_INFO_QUEUE_FILTER filter; - memset(&filter, 0, sizeof(filter) ); + bx::memSet(&filter, 0, sizeof(filter) ); D3D11_MESSAGE_CATEGORY catlist[] = { @@ -1753,7 +1763,7 @@ BX_PRAGMA_DIAGNOSTIC_POP(); void createVertexDecl(VertexDeclHandle _handle, const VertexDecl& _decl) BX_OVERRIDE { VertexDecl& decl = m_vertexDecls[_handle.idx]; - memcpy(&decl, &_decl, sizeof(VertexDecl) ); + bx::memCopy(&decl, &_decl, sizeof(VertexDecl) ); dump(decl); } @@ -1859,7 +1869,7 @@ BX_PRAGMA_DIAGNOSTIC_POP(); for (uint32_t yy = 0, height = srcHeight; yy < height; ++yy) { - memcpy(dst, src, pitch); + bx::memCopy(dst, src, pitch); src += srcPitch; dst += dstPitch; @@ -1953,7 +1963,7 @@ BX_PRAGMA_DIAGNOSTIC_POP(); uint32_t size = BX_ALIGN_16(g_uniformTypeSize[_type]*_num); void* data = BX_ALLOC(g_allocator, size); - memset(data, 0, size); + bx::memSet(data, 0, size); m_uniforms[_handle.idx] = data; m_uniformReg.add(_handle, _name, data); } @@ -1965,22 +1975,27 @@ BX_PRAGMA_DIAGNOSTIC_POP(); m_uniformReg.remove(_handle); } - void saveScreenShot(const char* _filePath) BX_OVERRIDE + void requestScreenShot(FrameBufferHandle _handle, const char* _filePath) BX_OVERRIDE { - if (NULL == m_swapChain) + IDXGISwapChain* swapChain = isValid(_handle) + ? m_frameBuffers[_handle.idx].m_swapChain + : m_swapChain + ; + + if (NULL == swapChain) { BX_TRACE("Unable to capture screenshot %s.", _filePath); return; } ID3D11Texture2D* backBuffer; - DX_CHECK(m_swapChain->GetBuffer(0, IID_ID3D11Texture2D, (void**)&backBuffer) ); + DX_CHECK(swapChain->GetBuffer(0, IID_ID3D11Texture2D, (void**)&backBuffer) ); D3D11_TEXTURE2D_DESC backBufferDesc; backBuffer->GetDesc(&backBufferDesc); D3D11_TEXTURE2D_DESC desc; - memcpy(&desc, &backBufferDesc, sizeof(desc) ); + bx::memCopy(&desc, &backBufferDesc, sizeof(desc) ); desc.SampleDesc.Count = 1; desc.SampleDesc.Quality = 0; desc.Usage = D3D11_USAGE_STAGING; @@ -2011,11 +2026,12 @@ BX_PRAGMA_DIAGNOSTIC_POP(); D3D11_MAPPED_SUBRESOURCE mapped; DX_CHECK(m_deviceCtx->Map(texture, 0, D3D11_MAP_READ, 0, &mapped) ); - imageSwizzleBgra8(backBufferDesc.Width + imageSwizzleBgra8( + mapped.pData + , backBufferDesc.Width , backBufferDesc.Height , mapped.RowPitch , mapped.pData - , mapped.pData ); g_callback->screenShot(_filePath , backBufferDesc.Width @@ -2051,7 +2067,7 @@ BX_PRAGMA_DIAGNOSTIC_POP(); void updateUniform(uint16_t _loc, const void* _data, uint32_t _size) BX_OVERRIDE { - memcpy(m_uniforms[_loc], _data, _size); + bx::memCopy(m_uniforms[_loc], _data, _size); } void setMarker(const char* _marker, uint32_t _size) BX_OVERRIDE @@ -2065,6 +2081,11 @@ BX_PRAGMA_DIAGNOSTIC_POP(); } } + void invalidateOcclusionQuery(OcclusionQueryHandle _handle) BX_OVERRIDE + { + m_occlusionQuery.invalidate(_handle); + } + void submit(Frame* _render, ClearQuad& _clearQuad, TextVideoMemBlitter& _textVideoMemBlitter) BX_OVERRIDE; void blitSetup(TextVideoMemBlitter& _blitter) BX_OVERRIDE @@ -2075,7 +2096,7 @@ BX_PRAGMA_DIAGNOSTIC_POP(); uint32_t height = getBufferHeight(); FrameBufferHandle fbh = BGFX_INVALID_HANDLE; - setFrameBuffer(fbh, false); + setFrameBuffer(fbh, false, false); D3D11_VIEWPORT vp; vp.TopLeftX = 0; @@ -2141,6 +2162,8 @@ BX_PRAGMA_DIAGNOSTIC_POP(); void preReset() { + m_needPresent = false; + ovrPreReset(); if (m_timerQuerySupport) @@ -2220,7 +2243,14 @@ BX_PRAGMA_DIAGNOSTIC_POP(); DX_RELEASE(depthStencil, 0); } - m_deviceCtx->OMSetRenderTargets(1, &m_backBufferColor, m_backBufferDepthStencil); + if (m_ovr.isEnabled() ) + { + m_ovr.makeRenderTargetActive(); + } + else + { + m_deviceCtx->OMSetRenderTargets(1, &m_backBufferColor, m_backBufferDepthStencil); + } m_currentColor = m_backBufferColor; m_currentDepthStencil = m_backBufferDepthStencil; @@ -2233,16 +2263,6 @@ BX_PRAGMA_DIAGNOSTIC_POP(); capturePostReset(); } - static bool isLost(HRESULT _hr) - { - 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 - ; - } - void flip(HMD& _hmd) BX_OVERRIDE { if (NULL != m_swapChain) @@ -2260,17 +2280,25 @@ BX_PRAGMA_DIAGNOSTIC_POP(); if (SUCCEEDED(hr) ) { - m_ovr.flip(); - m_ovr.swap(_hmd); - - if (!m_ovr.isEnabled()) + if (m_needPresent) { - hr = m_swapChain->Present(syncInterval, 0); + m_ovr.flip(); + m_ovr.swap(_hmd); + + if (!m_ovr.isEnabled() ) + { + hr = m_swapChain->Present(syncInterval, 0); + } + + m_needPresent = false; + } + else + { + m_deviceCtx->Flush(); } } - if (FAILED(hr) - && isLost(hr) ) + if (isLost(hr) ) { ++m_lost; BGFX_FATAL(10 > m_lost, bgfx::Fatal::DeviceLost, "Device is lost. FAILED 0x%08x", hr); @@ -2509,12 +2537,12 @@ BX_PRAGMA_DIAGNOSTIC_POP(); { if (_flags&BGFX_UNIFORM_FRAGMENTBIT) { - memcpy(&m_fsScratch[_regIndex], _val, _numRegs*16); + bx::memCopy(&m_fsScratch[_regIndex], _val, _numRegs*16); m_fsChanges += _numRegs; } else { - memcpy(&m_vsScratch[_regIndex], _val, _numRegs*16); + bx::memCopy(&m_vsScratch[_regIndex], _val, _numRegs*16); m_vsChanges += _numRegs; } } @@ -2552,7 +2580,7 @@ BX_PRAGMA_DIAGNOSTIC_POP(); } } - void setFrameBuffer(FrameBufferHandle _fbh, bool _msaa = true) + void setFrameBuffer(FrameBufferHandle _fbh, bool _msaa = true, bool _needPresent = true) { if (isValid(m_fbh) && m_fbh.idx != _fbh.idx @@ -2564,10 +2592,18 @@ BX_PRAGMA_DIAGNOSTIC_POP(); if (!isValid(_fbh) ) { - m_deviceCtx->OMSetRenderTargets(1, &m_backBufferColor, m_backBufferDepthStencil); + if (m_ovr.isEnabled() ) + { + m_ovr.makeRenderTargetActive(); + } + else + { + m_currentColor = m_backBufferColor; + m_currentDepthStencil = m_backBufferDepthStencil; + } - m_currentColor = m_backBufferColor; - m_currentDepthStencil = m_backBufferDepthStencil; + m_deviceCtx->OMSetRenderTargets(1, &m_currentColor, m_currentDepthStencil); + m_needPresent |= _needPresent; } else { @@ -2635,7 +2671,7 @@ BX_PRAGMA_DIAGNOSTIC_POP(); D3D11_INPUT_ELEMENT_DESC vertexElements[Attrib::Count+1+BGFX_CONFIG_MAX_INSTANCE_DATA_COUNT]; VertexDecl decl; - memcpy(&decl, &_vertexDecl, sizeof(VertexDecl) ); + bx::memCopy(&decl, &_vertexDecl, sizeof(VertexDecl) ); const uint16_t* attrMask = _program.m_vsh->m_attrMask; for (uint32_t ii = 0; ii < Attrib::Count; ++ii) @@ -2659,7 +2695,7 @@ BX_PRAGMA_DIAGNOSTIC_POP(); for (jj = 0; jj < num; ++jj) { curr = &vertexElements[jj]; - if (0 == strcmp(curr->SemanticName, "TEXCOORD") + if (0 == bx::strncmp(curr->SemanticName, "TEXCOORD") && curr->SemanticIndex == index) { break; @@ -2672,7 +2708,7 @@ BX_PRAGMA_DIAGNOSTIC_POP(); ++elem; } - memcpy(curr, &inst, sizeof(D3D11_INPUT_ELEMENT_DESC) ); + bx::memCopy(curr, &inst, sizeof(D3D11_INPUT_ELEMENT_DESC) ); curr->InputSlot = 1; curr->SemanticIndex = index; curr->AlignedByteOffset = ii*16; @@ -2772,7 +2808,7 @@ BX_PRAGMA_DIAGNOSTIC_POP(); { for (uint32_t ii = 1; ii < BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS; ++ii) { - memcpy(&desc.RenderTarget[ii], drt, sizeof(D3D11_RENDER_TARGET_BLEND_DESC) ); + bx::memCopy(&desc.RenderTarget[ii], drt, sizeof(D3D11_RENDER_TARGET_BLEND_DESC) ); } } @@ -2823,7 +2859,7 @@ BX_PRAGMA_DIAGNOSTIC_POP(); if (NULL == dss) { D3D11_DEPTH_STENCIL_DESC desc; - memset(&desc, 0, sizeof(desc) ); + bx::memSet(&desc, 0, sizeof(desc) ); desc.DepthEnable = 0 != func; desc.DepthWriteMask = !!(BGFX_STATE_DEPTH_WRITE & _state) ? D3D11_DEPTH_WRITE_MASK_ALL : D3D11_DEPTH_WRITE_MASK_ZERO; desc.DepthFunc = s_cmpFunc[func]; @@ -2963,7 +2999,7 @@ BX_PRAGMA_DIAGNOSTIC_POP(); { D3D11_SAMPLER_DESC sd; sampler->GetDesc(&sd); - if (0 != memcmp(_rgba, sd.BorderColor, 16) ) + if (0 != bx::memCmp(_rgba, sd.BorderColor, 16) ) { // Sampler will be released when updated sampler // is added to cache. @@ -3203,7 +3239,7 @@ BX_PRAGMA_DIAGNOSTIC_POP(); backBuffer->GetDesc(&backBufferDesc); D3D11_TEXTURE2D_DESC desc; - memcpy(&desc, &backBufferDesc, sizeof(desc) ); + bx::memCopy(&desc, &backBufferDesc, sizeof(desc) ); desc.SampleDesc.Count = 1; desc.SampleDesc.Quality = 0; desc.Usage = D3D11_USAGE_STAGING; @@ -3258,11 +3294,12 @@ BX_PRAGMA_DIAGNOSTIC_POP(); D3D11_MAPPED_SUBRESOURCE mapped; DX_CHECK(m_deviceCtx->Map(m_captureTexture, 0, D3D11_MAP_READ, 0, &mapped) ); - imageSwizzleBgra8(getBufferWidth() + imageSwizzleBgra8( + mapped.pData + , getBufferWidth() , getBufferHeight() , mapped.RowPitch , mapped.pData - , mapped.pData ); g_callback->captureFrame(mapped.pData, getBufferHeight()*mapped.RowPitch); @@ -3300,7 +3337,7 @@ BX_PRAGMA_DIAGNOSTIC_POP(); else { UniformHandle handle; - memcpy(&handle, _uniformBuffer.read(sizeof(UniformHandle) ), sizeof(UniformHandle) ); + bx::memCopy(&handle, _uniformBuffer.read(sizeof(UniformHandle) ), sizeof(UniformHandle) ); data = (const char*)m_uniforms[handle.idx]; } @@ -3424,7 +3461,7 @@ BX_PRAGMA_DIAGNOSTIC_POP(); for (uint32_t ii = 0; ii < numMrt; ++ii) { uint8_t index = (uint8_t)bx::uint32_min(BGFX_CONFIG_MAX_COLOR_PALETTE-1, _clear.m_index[ii]); - memcpy(mrtClear[ii], _palette[index], 16); + bx::memCopy(mrtClear[ii], _palette[index], 16); } deviceCtx->UpdateSubresource(fsh->m_buffer, 0, 0, mrtClear, 0, 0); @@ -3513,6 +3550,7 @@ BX_PRAGMA_DIAGNOSTIC_POP(); IDXGISwapChain1* m_swapChain; #endif // BX_PLATFORM_WINDOWS + bool m_needPresent; uint16_t m_lost; uint16_t m_numWindows; FrameBufferHandle m_windows[BGFX_CONFIG_MAX_FRAME_BUFFERS]; @@ -3638,99 +3676,109 @@ BX_PRAGMA_DIAGNOSTIC_POP(); #if BGFX_CONFIG_USE_OVR VRImplOVRD3D11::VRImplOVRD3D11() - : m_mirrorTexture(NULL) + : m_depthBuffer(NULL) + , m_msaaRtv(NULL) + , m_msaaTexture(NULL) + , m_textureSwapChain(NULL) + , m_mirrorTexture(NULL) { - memset(m_textureSwapChain, 0, sizeof(m_textureSwapChain)); + bx::memSet(m_eyeRtv, 0, sizeof(m_eyeRtv)); } bool VRImplOVRD3D11::createSwapChain(const VRDesc& _desc, int _msaaSamples, int _mirrorWidth, int _mirrorHeight) { + if (!m_session) + { + return false; + } + ID3D11Device* device = s_renderD3D11->m_device; - for (int eye = 0; eye < 2; ++eye) + if (NULL == m_textureSwapChain) { - if (NULL == m_textureSwapChain[eye]) + ovrTextureSwapChainDesc swapchainDesc = {}; + swapchainDesc.Type = ovrTexture_2D; + swapchainDesc.Width = _desc.m_eyeSize[0].m_w + _desc.m_eyeSize[1].m_w; + swapchainDesc.Height = bx::uint32_max(_desc.m_eyeSize[0].m_h, _desc.m_eyeSize[1].m_h); + swapchainDesc.MipLevels = 1; + swapchainDesc.ArraySize = 1; + swapchainDesc.SampleCount = 1; + swapchainDesc.MiscFlags = ovrTextureMisc_DX_Typeless; + swapchainDesc.BindFlags = ovrTextureBind_DX_RenderTarget; + swapchainDesc.StaticImage = ovrFalse; + swapchainDesc.Format = OVR_FORMAT_R8G8B8A8_UNORM_SRGB; + + ovrResult result = ovr_CreateTextureSwapChainDX(m_session, device, &swapchainDesc, &m_textureSwapChain); + if (!OVR_SUCCESS(result) ) { - m_msaaTexture[eye] = NULL; - m_msaaRtv[eye] = NULL; - m_msaaSv[eye] = NULL; + return false; + } - ovrTextureSwapChainDesc swapchainDesc = {}; - swapchainDesc.Type = ovrTexture_2D; - swapchainDesc.ArraySize = 1; - swapchainDesc.Format = OVR_FORMAT_R8G8B8A8_UNORM_SRGB; - swapchainDesc.Width = _desc.m_eyeSize[eye].m_w; - swapchainDesc.Height = _desc.m_eyeSize[eye].m_h; - swapchainDesc.MipLevels = 1; - swapchainDesc.SampleCount = 1; - swapchainDesc.MiscFlags = ovrTextureMisc_DX_Typeless; - swapchainDesc.BindFlags = ovrTextureBind_DX_RenderTarget; - swapchainDesc.StaticImage = ovrFalse; + for (int eye = 0; eye < 2; ++eye) + { + m_renderLayer.ColorTexture[eye] = m_textureSwapChain; + } - ovrResult result = ovr_CreateTextureSwapChainDX(m_session, device, &swapchainDesc, &m_textureSwapChain[eye]); - if (!OVR_SUCCESS(result)) + // create MSAA target + if (_msaaSamples > 1) + { + D3D11_TEXTURE2D_DESC msDesc; + msDesc.Width = swapchainDesc.Width; + msDesc.Height = swapchainDesc.Height; + msDesc.MipLevels = 1; + msDesc.ArraySize = 1; + msDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; + msDesc.SampleDesc.Count = _msaaSamples; + msDesc.SampleDesc.Quality = 0; + msDesc.Usage = D3D11_USAGE_DEFAULT; + msDesc.CPUAccessFlags = 0; + msDesc.MiscFlags = 0; + msDesc.BindFlags = D3D11_BIND_RENDER_TARGET; + DX_CHECK(device->CreateTexture2D(&msDesc, NULL, &m_msaaTexture) ); + DX_CHECK(device->CreateRenderTargetView(m_msaaTexture, NULL, &m_msaaRtv) ); + } + else + { + int swapchainSize; + result = ovr_GetTextureSwapChainLength(m_session, m_textureSwapChain, &swapchainSize); + if (!OVR_SUCCESS(result) ) { destroySwapChain(); return false; } - memset(m_eyeRtv[eye], 0, sizeof(m_eyeRtv[eye])); - int textureCount; - ovr_GetTextureSwapChainLength(m_session, m_textureSwapChain[eye], &textureCount); - - for (int ii = 0; ii < textureCount; ++ii) + BX_CHECK(swapchainSize <= BX_COUNTOF(m_eyeRtv), "Too many OVR swap chain entries %d", swapchainSize); + for (int ii = 0; ii < swapchainSize; ++ii) { - ID3D11Texture2D* tex = NULL; - ovr_GetTextureSwapChainBufferDX(m_session, m_textureSwapChain[eye], ii, IID_PPV_ARGS(&tex)); - D3D11_RENDER_TARGET_VIEW_DESC rtvd = {}; - rtvd.Format = DXGI_FORMAT_R8G8B8A8_UNORM; - rtvd.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D; + ID3D11Texture2D* texture; + ovr_GetTextureSwapChainBufferDX(m_session, m_textureSwapChain, ii, IID_PPV_ARGS(&texture) ); - ID3D11RenderTargetView* rtv; - DX_CHECK(device->CreateRenderTargetView(tex, &rtvd, &rtv)); - m_eyeRtv[eye][ii] = rtv; - DX_RELEASE(tex, 1); - } - - // setup depth buffer - D3D11_TEXTURE2D_DESC dbDesc; - dbDesc.Width = _desc.m_eyeSize[eye].m_w; - dbDesc.Height = _desc.m_eyeSize[eye].m_h; - dbDesc.MipLevels = 1; - dbDesc.ArraySize = 1; - dbDesc.Format = DXGI_FORMAT_D32_FLOAT; - dbDesc.SampleDesc.Count = _msaaSamples; - dbDesc.SampleDesc.Quality = 0; - dbDesc.Usage = D3D11_USAGE_DEFAULT; - dbDesc.CPUAccessFlags = 0; - dbDesc.MiscFlags = 0; - dbDesc.BindFlags = D3D11_BIND_DEPTH_STENCIL; - ID3D11Texture2D* tex; - DX_CHECK(device->CreateTexture2D(&dbDesc, NULL, &tex)); - DX_CHECK(device->CreateDepthStencilView(tex, NULL, &m_depthBuffer[eye])); - DX_RELEASE(tex, 0); - - // create MSAA render target - if (_msaaSamples > 1) - { - D3D11_TEXTURE2D_DESC dsDesc; - dsDesc.Width = _desc.m_eyeSize[eye].m_w; - dsDesc.Height = _desc.m_eyeSize[eye].m_h; - dsDesc.MipLevels = 1; - dsDesc.ArraySize = 1; - dsDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; - dsDesc.SampleDesc.Count = _msaaSamples; - dsDesc.SampleDesc.Quality = 0; - dsDesc.Usage = D3D11_USAGE_DEFAULT; - dsDesc.CPUAccessFlags = 0; - dsDesc.MiscFlags = 0; - dsDesc.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET; - - DX_CHECK(device->CreateTexture2D(&dsDesc, NULL, &m_msaaTexture[eye])); - DX_CHECK(device->CreateShaderResourceView(m_msaaTexture[eye], NULL, &m_msaaSv[eye])); - DX_CHECK(device->CreateRenderTargetView(m_msaaTexture[eye], NULL, &m_msaaRtv[eye])); + D3D11_RENDER_TARGET_VIEW_DESC viewDesc; + viewDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; + viewDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D; + viewDesc.Texture2D.MipSlice = 0; + DX_CHECK(device->CreateRenderTargetView(texture, &viewDesc, &m_eyeRtv[ii]) ); + DX_RELEASE(texture, 1); } } + + // create depth buffer + D3D11_TEXTURE2D_DESC dbDesc = {}; + dbDesc.Width = swapchainDesc.Width; + dbDesc.Height = swapchainDesc.Height; + dbDesc.MipLevels = 1; + dbDesc.ArraySize = 1; + dbDesc.Format = DXGI_FORMAT_D32_FLOAT; + dbDesc.SampleDesc.Count = _msaaSamples; + dbDesc.SampleDesc.Quality = 0; + dbDesc.Usage = D3D11_USAGE_DEFAULT; + dbDesc.CPUAccessFlags = 0; + dbDesc.MiscFlags = 0; + dbDesc.BindFlags = D3D11_BIND_DEPTH_STENCIL; + ID3D11Texture2D* depthTexture; + DX_CHECK(device->CreateTexture2D(&dbDesc, NULL, &depthTexture) ); + DX_CHECK(device->CreateDepthStencilView(depthTexture, NULL, &m_depthBuffer) ); + DX_RELEASE(depthTexture, 0); } if (NULL == m_mirrorTexture) @@ -3744,46 +3792,27 @@ BX_PRAGMA_DIAGNOSTIC_POP(); BX_UNUSED(result); } - m_renderLayer.ColorTexture[0] = m_textureSwapChain[0]; - m_renderLayer.ColorTexture[1] = m_textureSwapChain[1]; return true; } void VRImplOVRD3D11::destroySwapChain() { - for (int eye = 0; eye < 2; ++eye) + if (NULL != m_textureSwapChain) { - if (m_textureSwapChain[eye]) - { - for (uint32_t ii = 0; ii < BX_COUNTOF(m_eyeRtv[eye]); ++ii) - { - DX_RELEASE(m_eyeRtv[eye][ii], 0); - } - - ovr_DestroyTextureSwapChain(m_session, m_textureSwapChain[eye]); - m_textureSwapChain[eye] = NULL; - m_depthBuffer[eye]->Release(); - - if (NULL != m_msaaTexture[eye]) - { - m_msaaTexture[eye]->Release(); - m_msaaTexture[eye] = NULL; - } - - if (NULL != m_msaaSv[eye]) - { - m_msaaSv[eye]->Release(); - m_msaaSv[eye] = NULL; - } - - if (NULL != m_msaaRtv[eye]) - { - m_msaaRtv[eye]->Release(); - m_msaaRtv[eye] = NULL; - } - } + BX_CHECK(m_session, "VRSWapChain destroyed without valid OVR session"); + ovr_DestroyTextureSwapChain(m_session, m_textureSwapChain); + m_textureSwapChain = NULL; } + for (int ii = 0, nn = BX_COUNTOF(m_eyeRtv); ii < nn; ++ii) + { + DX_RELEASE(m_eyeRtv[ii], 0); + } + + DX_RELEASE(m_msaaRtv, 0); + DX_RELEASE(m_msaaTexture, 0); + DX_RELEASE(m_depthBuffer, 0); + destroyMirror(); } @@ -3796,59 +3825,60 @@ BX_PRAGMA_DIAGNOSTIC_POP(); } } - void VRImplOVRD3D11::renderEyeStart(const VRDesc& _desc, uint8_t _eye) + void VRImplOVRD3D11::makeRenderTargetActive(const VRDesc& /*_desc*/) { - ID3D11DeviceContext* deviceCtx = s_renderD3D11->m_deviceCtx; - float black[] = { 0.0f, 0.0f, 0.0f, 0.0f }; // Important that alpha=0, if want pixels to be transparent, for manual layers + if (NULL != m_msaaRtv) + { + s_renderD3D11->m_currentColor = m_msaaRtv; + } + else + { + int index; + ovr_GetTextureSwapChainCurrentIndex(m_session, m_textureSwapChain, &index); + s_renderD3D11->m_currentColor = m_eyeRtv[index]; + } - // render to MSAA target - if (NULL != m_msaaTexture[_eye]) - { - deviceCtx->OMSetRenderTargets(1, &m_msaaRtv[_eye], m_depthBuffer[_eye]); - } - else // MSAA disabled? render directly to eye buffer - { - int texIndex = 0; - ovr_GetTextureSwapChainCurrentIndex(m_session, m_textureSwapChain[_eye], &texIndex); - deviceCtx->OMSetRenderTargets(1, &m_eyeRtv[_eye][texIndex], m_depthBuffer[_eye]); - } + s_renderD3D11->m_currentDepthStencil = m_depthBuffer; } bool VRImplOVRD3D11::submitSwapChain(const VRDesc& /* _desc */) { + BX_CHECK(NULL != m_session, "No session in VRImplOVRD3D11::submitSwapChain. Usage error"); + BX_CHECK(NULL != m_textureSwapChain, "VRImplOVRD3D11 submitted without a valid swap chain"); + ID3D11DeviceContext* deviceCtx = s_renderD3D11->m_deviceCtx; - IDXGISwapChain* swapChain = s_renderD3D11->m_swapChain; - // resolve MSAA render targets - for (int eye = 0; eye < 2; ++eye) + int index; + ovr_GetTextureSwapChainCurrentIndex(m_session, m_textureSwapChain, &index); + + ID3D11Texture2D* eyeTexture; + ovr_GetTextureSwapChainBufferDX(m_session, m_textureSwapChain, index, IID_PPV_ARGS(&eyeTexture)); + + // resolve MSAA + if (NULL != m_msaaRtv) { - if (NULL != m_msaaTexture[eye]) - { - int destIndex = 0; - ovr_GetTextureSwapChainCurrentIndex(m_session, m_textureSwapChain[eye], &destIndex); + deviceCtx->ResolveSubresource(eyeTexture, 0, m_msaaTexture, 0, DXGI_FORMAT_R8G8B8A8_UNORM); + } - ID3D11Resource* dstTex = NULL; - ovr_GetTextureSwapChainBufferDX(m_session, m_textureSwapChain[eye], destIndex, IID_PPV_ARGS(&dstTex)); - deviceCtx->ResolveSubresource(dstTex, 0, m_msaaTexture[eye], 0, DXGI_FORMAT_R8G8B8A8_UNORM); - dstTex->Release(); - } - - ovrResult result = ovr_CommitTextureSwapChain(m_session, m_textureSwapChain[eye]); - if (!OVR_SUCCESS(result)) - { - return false; - } + ovrResult result = ovr_CommitTextureSwapChain(m_session, m_textureSwapChain); + if (!OVR_SUCCESS(result) ) + { + return false; + DX_RELEASE(eyeTexture, 1); } ovrLayerHeader* layerList = &m_renderLayer.Header; - ovrResult result = ovr_SubmitFrame(m_session, 0, NULL, &layerList, 1); - if (!OVR_SUCCESS(result)) + result = ovr_SubmitFrame(m_session, 0, NULL, &layerList, 1); + if (!OVR_SUCCESS(result) ) { + DX_RELEASE(eyeTexture, 1); return false; } if (result != ovrSuccess_NotVisible && NULL != m_mirrorTexture) { + IDXGISwapChain* swapChain = s_renderD3D11->m_swapChain; + ID3D11Texture2D* tex = NULL; ovr_GetMirrorTextureBufferDX(m_session, m_mirrorTexture, IID_PPV_ARGS(&tex)); ID3D11Texture2D* backBuffer; @@ -3861,6 +3891,7 @@ BX_PRAGMA_DIAGNOSTIC_POP(); DX_RELEASE(backBuffer, 0); } + DX_RELEASE(eyeTexture, 1); return true; } @@ -4064,7 +4095,7 @@ BX_PRAGMA_DIAGNOSTIC_POP(); : D3D11_MAP_WRITE_NO_OVERWRITE ; DX_CHECK(deviceCtx->Map(m_ptr, 0, type, 0, &mapped) ); - memcpy( (uint8_t*)mapped.pData + _offset, _data, _size); + bx::memCopy( (uint8_t*)mapped.pData + _offset, _data, _size); deviceCtx->Unmap(m_ptr, 0); #endif // 0 } @@ -4255,7 +4286,7 @@ BX_PRAGMA_DIAGNOSTIC_POP(); uint8_t numAttrs = 0; bx::read(&reader, numAttrs); - memset(m_attrMask, 0, sizeof(m_attrMask) ); + bx::memSet(m_attrMask, 0, sizeof(m_attrMask) ); for (uint32_t ii = 0; ii < numAttrs; ++ii) { @@ -4383,7 +4414,7 @@ BX_PRAGMA_DIAGNOSTIC_POP(); if (swizzle) { -// imageSwizzleBgra8(width, height, mip.m_width*4, data, temp); +// imageSwizzleBgra8(temp, width, height, mip.m_width*4, data); } srd[kk].SysMemSlicePitch = mip.m_height*srd[kk].SysMemPitch; @@ -4416,7 +4447,7 @@ BX_PRAGMA_DIAGNOSTIC_POP(); ; D3D11_SHADER_RESOURCE_VIEW_DESC srvd; - memset(&srvd, 0, sizeof(srvd) ); + bx::memSet(&srvd, 0, sizeof(srvd) ); DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN; if (swizzle) @@ -4551,12 +4582,28 @@ BX_PRAGMA_DIAGNOSTIC_POP(); desc.CPUAccessFlags = 0; desc.MiscFlags = 0; + if (renderTarget) + { + desc.BindFlags |= D3D11_BIND_RENDER_TARGET; + desc.Usage = D3D11_USAGE_DEFAULT; + desc.MiscFlags |= 0 + | (1 < numMips ? D3D11_RESOURCE_MISC_GENERATE_MIPS : 0) + ; + } + if (computeWrite) { desc.BindFlags |= D3D11_BIND_UNORDERED_ACCESS; desc.Usage = D3D11_USAGE_DEFAULT; } + if (readBack) + { + desc.BindFlags = 0; + desc.Usage = D3D11_USAGE_STAGING; + desc.CPUAccessFlags = D3D11_CPU_ACCESS_READ; + } + srvd.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE3D; srvd.Texture3D.MipLevels = numMips; @@ -4638,8 +4685,9 @@ 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 rectpitch = _rect.m_width*bpp/8; - const uint32_t srcpitch = UINT16_MAX == _pitch ? rectpitch : _pitch; + 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; const bool convert = m_textureFormat != m_requestedFormat; @@ -4648,12 +4696,19 @@ BX_PRAGMA_DIAGNOSTIC_POP(); if (convert) { - temp = (uint8_t*)BX_ALLOC(g_allocator, rectpitch*_rect.m_height); + temp = (uint8_t*)BX_ALLOC(g_allocator, slicepitch); imageDecodeToBgra8(temp, data, _rect.m_width, _rect.m_height, srcpitch, TextureFormat::Enum(m_requestedFormat) ); data = temp; } - deviceCtx->UpdateSubresource(m_ptr, subres, &box, data, srcpitch, 0); + deviceCtx->UpdateSubresource( + m_ptr + , subres + , &box + , data + , srcpitch + , TextureD3D11::Texture3D == m_type ? slicepitch : 0 + ); if (NULL != temp) { @@ -4708,9 +4763,10 @@ BX_PRAGMA_DIAGNOSTIC_POP(); m_dsv = NULL; m_swapChain = NULL; - m_numTh = _num; + m_denseIdx = UINT16_MAX; + m_numTh = _num; m_needPresent = false; - memcpy(m_attachment, _attachment, _num*sizeof(Attachment) ); + bx::memCopy(m_attachment, _attachment, _num*sizeof(Attachment) ); postReset(); } @@ -4718,7 +4774,7 @@ BX_PRAGMA_DIAGNOSTIC_POP(); void FrameBufferD3D11::create(uint16_t _denseIdx, void* _nwh, uint32_t _width, uint32_t _height, TextureFormat::Enum _depthFormat) { DXGI_SWAP_CHAIN_DESC scd; - memcpy(&scd, &s_renderD3D11->m_scd, sizeof(DXGI_SWAP_CHAIN_DESC) ); + bx::memCopy(&scd, &s_renderD3D11->m_scd, sizeof(DXGI_SWAP_CHAIN_DESC) ); scd.BufferDesc.Width = _width; scd.BufferDesc.Height = _height; scd.OutputWindow = (HWND)_nwh; @@ -5030,6 +5086,7 @@ BX_PRAGMA_DIAGNOSTIC_POP(); if (m_needPresent) { HRESULT hr = m_swapChain->Present(_syncInterval, 0); + hr = !isLost(hr) ? S_OK : hr; m_needPresent = false; return hr; } @@ -5103,7 +5160,8 @@ BX_PRAGMA_DIAGNOSTIC_POP(); uint64_t timeEnd; HRESULT hr = deviceCtx->GetData(frame.m_end, &timeEnd, sizeof(timeEnd), D3D11_ASYNC_GETDATA_DONOTFLUSH); - if (S_OK == hr) + if (S_OK == hr + || isLost(hr) ) { m_control.consume(1); @@ -5183,18 +5241,36 @@ BX_PRAGMA_DIAGNOSTIC_POP(); { Query& query = m_query[m_control.m_read]; - uint64_t result = 0; - HRESULT hr = deviceCtx->GetData(query.m_ptr, &result, sizeof(result), _wait ? 0 : D3D11_ASYNC_GETDATA_DONOTFLUSH); - if (S_FALSE == hr) + if (isValid(query.m_handle) ) { - break; + uint64_t result = 0; + HRESULT hr = deviceCtx->GetData(query.m_ptr, &result, sizeof(result), _wait ? 0 : D3D11_ASYNC_GETDATA_DONOTFLUSH); + if (S_FALSE == hr) + { + break; + } + + _render->m_occlusion[query.m_handle.idx] = int32_t(result); } - _render->m_occlusion[query.m_handle.idx] = 0 < result; m_control.consume(1); } } + void OcclusionQueryD3D11::invalidate(OcclusionQueryHandle _handle) + { + const uint32_t size = m_control.m_size; + + for (uint32_t ii = 0, num = m_control.available(); ii < num; ++ii) + { + Query& query = m_query[(m_control.m_read + ii) % size]; + if (query.m_handle.idx == _handle.idx) + { + query.m_handle.idx = bgfx::invalidHandle; + } + } + } + void RendererContextD3D11::submit(Frame* _render, ClearQuad& _clearQuad, TextVideoMemBlitter& _textVideoMemBlitter) { if (updateResolution(_render->m_resolution) ) @@ -5283,7 +5359,7 @@ BX_PRAGMA_DIAGNOSTIC_POP(); // reset the framebuffer to be the backbuffer; depending on the swap effect, // if we don't do this we'll only see one frame of output and then nothing FrameBufferHandle invalid = BGFX_INVALID_HANDLE; - setFrameBuffer(invalid); + setFrameBuffer(invalid, true, false); bool viewRestart = false; uint8_t eye = 0; @@ -5293,7 +5369,8 @@ BX_PRAGMA_DIAGNOSTIC_POP(); int32_t numItems = _render->m_num; for (int32_t item = 0, restartItem = numItems; item < numItems || restartItem < numItems;) { - const bool isCompute = key.decode(_render->m_sortKeys[item], _render->m_viewRemap); + const uint64_t encodedKey = _render->m_sortKeys[item]; + const bool isCompute = key.decode(encodedKey, _render->m_viewRemap); statsKeyType[isCompute]++; const bool viewChanged = 0 @@ -5368,7 +5445,7 @@ BX_PRAGMA_DIAGNOSTIC_POP(); if (m_ovr.isEnabled() ) { - m_ovr.renderEyeStart(eye, &viewState.m_rect); + m_ovr.getViewport(eye, &viewState.m_rect); } else { @@ -5407,7 +5484,8 @@ BX_PRAGMA_DIAGNOSTIC_POP(); prim = s_primInfo[BX_COUNTOF(s_primName)]; // Force primitive type update after clear quad. } - for (; blitItem < numBlitItems && blitKey.m_view <= view; blitItem++) + 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]); @@ -5720,7 +5798,12 @@ BX_PRAGMA_DIAGNOSTIC_POP(); else { Rect scissorRect; - scissorRect.intersect(viewScissorRect, _render->m_rectCache.m_cache[scissor]); + scissorRect.setIntersect(viewScissorRect, _render->m_rectCache.m_cache[scissor]); + if (scissorRect.isZeroArea() ) + { + continue; + } + scissorEnabled = true; D3D11_RECT rc; rc.left = scissorRect.m_x; @@ -6159,16 +6242,20 @@ BX_PRAGMA_DIAGNOSTIC_POP(); const int64_t timerFreq = bx::getHPFrequency(); - perfStats.cpuTimeEnd = now; - perfStats.cpuTimerFreq = timerFreq; - perfStats.gpuTimeBegin = m_gpuTimer.m_begin; - perfStats.gpuTimeEnd = m_gpuTimer.m_end; - perfStats.gpuTimerFreq = m_gpuTimer.m_frequency; + perfStats.cpuTimeEnd = now; + perfStats.cpuTimerFreq = timerFreq; + perfStats.gpuTimeBegin = m_gpuTimer.m_begin; + perfStats.gpuTimeEnd = m_gpuTimer.m_end; + perfStats.gpuTimerFreq = m_gpuTimer.m_frequency; + perfStats.numDraw = statsKeyType[0]; + perfStats.numCompute = statsKeyType[1]; + perfStats.maxGpuLatency = maxGpuLatency; if (_render->m_debug & (BGFX_DEBUG_IFH|BGFX_DEBUG_STATS) ) { PIX_BEGINEVENT(D3DCOLOR_FRAME, L"debugstats"); + m_needPresent = true; TextVideoMem& tvm = m_textVideoMem; static int64_t next = now; diff --git a/3rdparty/bgfx/src/renderer_d3d11.h b/3rdparty/bgfx/src/renderer_d3d11.h index 5c47fb5..852a69e 100644 --- a/3rdparty/bgfx/src/renderer_d3d11.h +++ b/3rdparty/bgfx/src/renderer_d3d11.h @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -182,14 +182,14 @@ namespace bgfx { namespace d3d11 { BX_CHECK(NULL != _vsh->m_ptr, "Vertex shader doesn't exist."); m_vsh = _vsh; - memcpy(&m_predefined[0], _vsh->m_predefined, _vsh->m_numPredefined*sizeof(PredefinedUniform) ); + bx::memCopy(&m_predefined[0], _vsh->m_predefined, _vsh->m_numPredefined*sizeof(PredefinedUniform) ); m_numPredefined = _vsh->m_numPredefined; if (NULL != _fsh) { BX_CHECK(NULL != _fsh->m_ptr, "Fragment shader doesn't exist."); m_fsh = _fsh; - memcpy(&m_predefined[m_numPredefined], _fsh->m_predefined, _fsh->m_numPredefined*sizeof(PredefinedUniform) ); + bx::memCopy(&m_predefined[m_numPredefined], _fsh->m_predefined, _fsh->m_numPredefined*sizeof(PredefinedUniform) ); m_numPredefined += _fsh->m_numPredefined; } } @@ -338,6 +338,7 @@ namespace bgfx { namespace d3d11 void begin(Frame* _render, OcclusionQueryHandle _handle); void end(); void resolve(Frame* _render, bool _wait = false); + void invalidate(OcclusionQueryHandle _handle); struct Query { @@ -345,7 +346,7 @@ namespace bgfx { namespace d3d11 OcclusionQueryHandle m_handle; }; - Query m_query[BGFX_CONFIG_MAX_OCCUSION_QUERIES]; + Query m_query[BGFX_CONFIG_MAX_OCCLUSION_QUERIES]; bx::RingBufferControl m_control; }; diff --git a/3rdparty/bgfx/src/renderer_d3d12.cpp b/3rdparty/bgfx/src/renderer_d3d12.cpp index 4092f62..b5c30cb 100644 --- a/3rdparty/bgfx/src/renderer_d3d12.cpp +++ b/3rdparty/bgfx/src/renderer_d3d12.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -316,7 +316,7 @@ namespace bgfx { namespace d3d12 { if (UINT16_MAX != _decl.m_attributes[attr]) { - memcpy(elem, &s_attrib[attr], sizeof(D3D12_INPUT_ELEMENT_DESC) ); + bx::memCopy(elem, &s_attrib[attr], sizeof(D3D12_INPUT_ELEMENT_DESC) ); if (0 == _decl.m_attributes[attr]) { @@ -439,7 +439,7 @@ namespace bgfx { namespace d3d12 char temp[2048]; va_list argList; va_start(argList, _format); - int size = bx::uint32_min(sizeof(temp)-1, vsnprintf(temp, sizeof(temp), _format, argList) ); + int size = bx::uint32_min(sizeof(temp)-1, bx::vsnprintf(temp, sizeof(temp), _format, argList) ); va_end(argList); temp[size] = '\0'; @@ -498,9 +498,11 @@ namespace bgfx { namespace d3d12 ErrorState::Enum errorState = ErrorState::Default; LUID luid; + m_renderdocdll = loadRenderDoc(); + m_fbh.idx = invalidHandle; - memset(m_uniforms, 0, sizeof(m_uniforms) ); - memset(&m_resolution, 0, sizeof(m_resolution) ); + 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"); @@ -682,7 +684,7 @@ namespace bgfx { namespace d3d12 if (NULL != m_factory) { - memset(&m_adapterDesc, 0, sizeof(m_adapterDesc) ); + bx::memSet(&m_adapterDesc, 0, sizeof(m_adapterDesc) ); luid = m_device->GetAdapterLuid(); #if BX_PLATFORM_WINDOWS IDXGIAdapter3* adapter; @@ -728,7 +730,7 @@ namespace bgfx { namespace d3d12 ); if (0 == ii) { - memcpy(&m_architecture, &architecture, sizeof(architecture) ); + bx::memCopy(&m_architecture, &architecture, sizeof(architecture) ); } } } @@ -893,7 +895,7 @@ namespace bgfx { namespace d3d12 m_infoQueue->SetBreakOnSeverity(D3D12_MESSAGE_SEVERITY_WARNING, false); D3D12_INFO_QUEUE_FILTER filter; - memset(&filter, 0, sizeof(filter) ); + bx::memSet(&filter, 0, sizeof(filter) ); D3D12_MESSAGE_CATEGORY catlist[] = { @@ -1181,6 +1183,7 @@ namespace bgfx { namespace d3d12 #endif // USE_D3D12_DYNAMIC_LIB case ErrorState::Default: default: + unloadRenderDoc(m_renderdocdll); break; } @@ -1238,6 +1241,8 @@ namespace bgfx { namespace d3d12 DX_RELEASE(m_adapter, 0); DX_RELEASE(m_factory, 0); + unloadRenderDoc(m_renderdocdll); + #if USE_D3D12_DYNAMIC_LIB bx::dlclose(m_dxgidll); bx::dlclose(m_d3d12dll); @@ -1314,7 +1319,7 @@ namespace bgfx { namespace d3d12 void createVertexDecl(VertexDeclHandle _handle, const VertexDecl& _decl) BX_OVERRIDE { VertexDecl& decl = m_vertexDecls[_handle.idx]; - memcpy(&decl, &_decl, sizeof(VertexDecl) ); + bx::memCopy(&decl, &_decl, sizeof(VertexDecl) ); dump(decl); } @@ -1451,7 +1456,7 @@ namespace bgfx { namespace d3d12 for (uint32_t yy = 0, height = srcHeight; yy < height; ++yy) { - memcpy(dst, src, pitch); + bx::memCopy(dst, src, pitch); src += srcPitch; dst += dstPitch; @@ -1542,7 +1547,7 @@ namespace bgfx { namespace d3d12 uint32_t size = BX_ALIGN_16(g_uniformTypeSize[_type] * _num); void* data = BX_ALLOC(g_allocator, size); - memset(data, 0, size); + bx::memSet(data, 0, size); m_uniforms[_handle.idx] = data; m_uniformReg.add(_handle, _name, data); } @@ -1554,8 +1559,10 @@ namespace bgfx { namespace d3d12 m_uniformReg.remove(_handle); } - void saveScreenShot(const char* _filePath) BX_OVERRIDE + void requestScreenShot(FrameBufferHandle _handle, const char* _filePath) BX_OVERRIDE { + BX_UNUSED(_handle); + uint32_t idx = (m_backBufferColorIdx-1) % m_scd.BufferCount; m_cmd.finish(m_backBufferColorFence[idx]); ID3D12Resource* backBuffer = m_backBufferColor[idx]; @@ -1599,11 +1606,12 @@ namespace bgfx { namespace d3d12 void* data; readback->Map(0, NULL, (void**)&data); - imageSwizzleBgra8(width + imageSwizzleBgra8( + data + , width , height , (uint32_t)pitch , data - , data ); g_callback->screenShot(_filePath , width @@ -1624,13 +1632,18 @@ namespace bgfx { namespace d3d12 void updateUniform(uint16_t _loc, const void* _data, uint32_t _size) BX_OVERRIDE { - memcpy(m_uniforms[_loc], _data, _size); + bx::memCopy(m_uniforms[_loc], _data, _size); } void setMarker(const char* /*_marker*/, uint32_t /*_size*/) BX_OVERRIDE { } + void invalidateOcclusionQuery(OcclusionQueryHandle _handle) BX_OVERRIDE + { + m_occlusionQuery.invalidate(_handle); + } + void submit(Frame* _render, ClearQuad& _clearQuad, TextVideoMemBlitter& _textVideoMemBlitter) BX_OVERRIDE; void blitSetup(TextVideoMemBlitter& _blitter) BX_OVERRIDE @@ -1756,7 +1769,7 @@ namespace bgfx { namespace d3d12 void postReset() { - memset(m_backBufferColorFence, 0, sizeof(m_backBufferColorFence) ); + bx::memSet(m_backBufferColorFence, 0, sizeof(m_backBufferColorFence) ); uint32_t rtvDescriptorSize = m_device->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_RTV); @@ -1829,7 +1842,7 @@ namespace bgfx { namespace d3d12 uint32_t msaa = s_checkMsaa[ii]; D3D12_FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS data; - memset(&data, 0, sizeof(msaa) ); + bx::memSet(&data, 0, sizeof(msaa) ); data.Format = getBufferFormat(); data.SampleCount = msaa; data.Flags = D3D12_MULTISAMPLE_QUALITY_LEVELS_FLAG_NONE; @@ -1939,12 +1952,12 @@ data.NumQualityLevels = 0; { if (_flags&BGFX_UNIFORM_FRAGMENTBIT) { - memcpy(&m_fsScratch[_regIndex], _val, _numRegs*16); + bx::memCopy(&m_fsScratch[_regIndex], _val, _numRegs*16); m_fsChanges += _numRegs; } else { - memcpy(&m_vsScratch[_regIndex], _val, _numRegs*16); + bx::memCopy(&m_vsScratch[_regIndex], _val, _numRegs*16); m_vsChanges += _numRegs; } } @@ -1971,7 +1984,7 @@ data.NumQualityLevels = 0; { uint32_t size = program.m_vsh->m_size; - memcpy(data, m_vsScratch, size); + bx::memCopy(data, m_vsScratch, size); data += size; m_vsChanges = 0; @@ -1979,7 +1992,7 @@ data.NumQualityLevels = 0; if (NULL != program.m_fsh) { - memcpy(data, m_fsScratch, program.m_fsh->m_size); + bx::memCopy(data, m_fsScratch, program.m_fsh->m_size); m_fsChanges = 0; } @@ -2143,7 +2156,7 @@ data.NumQualityLevels = 0; { for (uint32_t ii = 1; ii < BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS; ++ii) { - memcpy(&_desc.RenderTarget[ii], drt, sizeof(D3D12_RENDER_TARGET_BLEND_DESC) ); + bx::memCopy(&_desc.RenderTarget[ii], drt, sizeof(D3D12_RENDER_TARGET_BLEND_DESC) ); } } } @@ -2175,7 +2188,7 @@ data.NumQualityLevels = 0; { const uint32_t fstencil = unpackStencil(0, _stencil); - memset(&_desc, 0, sizeof(_desc) ); + bx::memSet(&_desc, 0, sizeof(_desc) ); uint32_t func = (_state&BGFX_STATE_DEPTH_TEST_MASK)>>BGFX_STATE_DEPTH_TEST_SHIFT; _desc.DepthEnable = 0 != func; _desc.DepthWriteMask = !!(BGFX_STATE_DEPTH_WRITE & _state) @@ -2206,7 +2219,7 @@ data.NumQualityLevels = 0; uint32_t setInputLayout(D3D12_INPUT_ELEMENT_DESC* _vertexElements, const VertexDecl& _vertexDecl, const ProgramD3D12& _program, uint8_t _numInstanceData) { VertexDecl decl; - memcpy(&decl, &_vertexDecl, sizeof(VertexDecl) ); + bx::memCopy(&decl, &_vertexDecl, sizeof(VertexDecl) ); const uint16_t* attrMask = _program.m_vsh->m_attrMask; for (uint32_t ii = 0; ii < Attrib::Count; ++ii) @@ -2230,7 +2243,7 @@ data.NumQualityLevels = 0; for (jj = 0; jj < num; ++jj) { curr = &_vertexElements[jj]; - if (0 == strcmp(curr->SemanticName, "TEXCOORD") + if (0 == bx::strncmp(curr->SemanticName, "TEXCOORD") && curr->SemanticIndex == index) { break; @@ -2243,7 +2256,7 @@ data.NumQualityLevels = 0; ++elem; } - memcpy(curr, &inst, sizeof(D3D12_INPUT_ELEMENT_DESC) ); + bx::memCopy(curr, &inst, sizeof(D3D12_INPUT_ELEMENT_DESC) ); curr->InputSlot = 1; curr->SemanticIndex = index; curr->AlignedByteOffset = ii*16; @@ -2285,7 +2298,7 @@ data.NumQualityLevels = 0; } D3D12_COMPUTE_PIPELINE_STATE_DESC desc; - memset(&desc, 0, sizeof(desc) ); + bx::memSet(&desc, 0, sizeof(desc) ); desc.pRootSignature = m_rootSignature; @@ -2324,7 +2337,7 @@ data.NumQualityLevels = 0; _stencil &= packStencil(~BGFX_STENCIL_FUNC_REF_MASK, BGFX_STENCIL_MASK); VertexDecl decl; - memcpy(&decl, &m_vertexDecls[_declIdx], sizeof(VertexDecl) ); + bx::memCopy(&decl, &m_vertexDecls[_declIdx], sizeof(VertexDecl) ); const uint16_t* attrMask = program.m_vsh->m_attrMask; for (uint32_t ii = 0; ii < Attrib::Count; ++ii) @@ -2355,7 +2368,7 @@ data.NumQualityLevels = 0; } D3D12_GRAPHICS_PIPELINE_STATE_DESC desc; - memset(&desc, 0, sizeof(desc) ); + bx::memSet(&desc, 0, sizeof(desc) ); desc.pRootSignature = m_rootSignature; @@ -2363,7 +2376,7 @@ data.NumQualityLevels = 0; desc.VS.BytecodeLength = program.m_vsh->m_code->size; const Memory* temp = alloc(program.m_fsh->m_code->size); - memset(temp->data, 0, temp->size); + bx::memSet(temp->data, 0, temp->size); bx::MemoryReader rd(program.m_fsh->m_code->data, program.m_fsh->m_code->size); bx::StaticMemoryBlockWriter wr(temp->data, temp->size); @@ -2382,17 +2395,17 @@ data.NumQualityLevels = 0; dxbcHash(temp->data + 20, temp->size - 20, temp->data + 4); - patchShader = 0 == memcmp(program.m_fsh->m_code->data, temp->data, 16); + patchShader = 0 == bx::memCmp(program.m_fsh->m_code->data, temp->data, 16); BX_CHECK(patchShader, "DXBC fragment shader patching error (ShaderHandle: %d).", program.m_fsh - m_shaders); if (!patchShader) { for (uint32_t ii = 20; ii < temp->size; ii += 16) { - if (0 != memcmp(&program.m_fsh->m_code->data[ii], &temp->data[ii], 16) ) + if (0 != bx::memCmp(&program.m_fsh->m_code->data[ii], &temp->data[ii], 16) ) { -// dbgPrintfData(&program.m_fsh->m_code->data[ii], temp->size-ii, ""); -// dbgPrintfData(&temp->data[ii], temp->size-ii, ""); +// bx::debugPrintfData(&program.m_fsh->m_code->data[ii], temp->size-ii, ""); +// bx::debugPrintfData(&temp->data[ii], temp->size-ii, ""); break; } } @@ -2404,7 +2417,7 @@ data.NumQualityLevels = 0; if (patchShader) { - memcpy(temp->data, program.m_fsh->m_code->data, program.m_fsh->m_code->size); + bx::memCopy(temp->data, program.m_fsh->m_code->data, program.m_fsh->m_code->size); bx::seek(&wr, 0, bx::Whence::Begin); union { uint32_t offset; void* ptr; } cast = @@ -2503,7 +2516,7 @@ data.NumQualityLevels = 0; if (FAILED(hr) ) { BX_TRACE("Failed to load cached PSO (HRESULT 0x%08x).", hr); - memset(&desc.CachedPSO, 0, sizeof(desc.CachedPSO) ); + bx::memSet(&desc.CachedPSO, 0, sizeof(desc.CachedPSO) ); } } } @@ -2626,7 +2639,7 @@ data.NumQualityLevels = 0; else { UniformHandle handle; - memcpy(&handle, _uniformBuffer.read(sizeof(UniformHandle) ), sizeof(UniformHandle) ); + bx::memCopy(&handle, _uniformBuffer.read(sizeof(UniformHandle) ), sizeof(UniformHandle) ); data = (const char*)m_uniforms[handle.idx]; } @@ -2971,7 +2984,7 @@ data.NumQualityLevels = 0; D3D12_SHADER_RESOURCE_VIEW_DESC* srvd = &_texture.m_srvd; if (0 != _mip) { - memcpy(&tmpSrvd, srvd, sizeof(tmpSrvd) ); + bx::memCopy(&tmpSrvd, srvd, sizeof(tmpSrvd) ); srvd = &tmpSrvd; switch (_texture.m_srvd.ViewDimension) @@ -3017,7 +3030,7 @@ data.NumQualityLevels = 0; if (0 != _mip) { - memcpy(&tmpUavd, uavd, sizeof(tmpUavd) ); + bx::memCopy(&tmpUavd, uavd, sizeof(tmpUavd) ); uavd = &tmpUavd; switch (_texture.m_uavd.ViewDimension) @@ -3467,7 +3480,7 @@ data.NumQualityLevels = 0; } else { - memset(&cmd.vbv[1], 0, sizeof(cmd.vbv[1]) ); + bx::memSet(&cmd.vbv[1], 0, sizeof(cmd.vbv[1]) ); } cmd.draw.InstanceCount = _draw.m_numInstances; cmd.draw.VertexCountPerInstance = numVertices; @@ -3508,7 +3521,7 @@ data.NumQualityLevels = 0; } else { - memset(&cmd.vbv[1], 0, sizeof(cmd.vbv[1]) ); + bx::memSet(&cmd.vbv[1], 0, sizeof(cmd.vbv[1]) ); } cmd.drawIndexed.IndexCountPerInstance = numIndices; cmd.drawIndexed.InstanceCount = _draw.m_numInstances; @@ -3573,9 +3586,9 @@ data.NumQualityLevels = 0; _commandList->SetGraphicsRootConstantBufferView(Rdt::CBV, cmd.cbv); } - if (0 != memcmp(m_current.vbv, cmd.vbv, sizeof(cmd.vbv) ) ) + if (0 != bx::memCmp(m_current.vbv, cmd.vbv, sizeof(cmd.vbv) ) ) { - memcpy(m_current.vbv, cmd.vbv, sizeof(cmd.vbv) ); + bx::memCopy(m_current.vbv, cmd.vbv, sizeof(cmd.vbv) ); _commandList->IASetVertexBuffers(0 , 0 == cmd.vbv[1].BufferLocation ? 1 : 2 , cmd.vbv @@ -3603,18 +3616,18 @@ data.NumQualityLevels = 0; _commandList->SetGraphicsRootConstantBufferView(Rdt::CBV, cmd.cbv); } - if (0 != memcmp(m_current.vbv, cmd.vbv, sizeof(cmd.vbv) ) ) + if (0 != bx::memCmp(m_current.vbv, cmd.vbv, sizeof(cmd.vbv) ) ) { - memcpy(m_current.vbv, cmd.vbv, sizeof(cmd.vbv) ); + bx::memCopy(m_current.vbv, cmd.vbv, sizeof(cmd.vbv) ); _commandList->IASetVertexBuffers(0 , 0 == cmd.vbv[1].BufferLocation ? 1 : 2 , cmd.vbv ); } - if (0 != memcmp(&m_current.ibv, &cmd.ibv, sizeof(cmd.ibv) ) ) + if (0 != bx::memCmp(&m_current.ibv, &cmd.ibv, sizeof(cmd.ibv) ) ) { - memcpy(&m_current.ibv, &cmd.ibv, sizeof(cmd.ibv) ); + bx::memCopy(&m_current.ibv, &cmd.ibv, sizeof(cmd.ibv) ); _commandList->IASetIndexBuffer(&cmd.ibv); } @@ -3638,14 +3651,14 @@ data.NumQualityLevels = 0; if (_clean) { - memset(&m_current, 0, sizeof(m_current) ); + bx::memSet(&m_current, 0, sizeof(m_current) ); } } void BatchD3D12::begin() { - memset(&m_stats, 0, sizeof(m_stats) ); - memset(&m_current, 0, sizeof(m_current) ); + bx::memSet(&m_stats, 0, sizeof(m_stats) ); + bx::memSet(&m_current, 0, sizeof(m_current) ); } void BatchD3D12::end(ID3D12GraphicsCommandList* _commandList) @@ -3766,7 +3779,7 @@ data.NumQualityLevels = 0; ID3D12Resource* staging = createCommittedResource(s_renderD3D12->m_device, HeapProperty::Upload, _size); uint8_t* data; DX_CHECK(staging->Map(0, NULL, (void**)&data) ); - memcpy(data, _data, _size); + bx::memCopy(data, _data, _size); staging->Unmap(0, NULL); D3D12_RESOURCE_STATES state = setState(_commandList, D3D12_RESOURCE_STATE_COPY_DEST); @@ -3927,7 +3940,7 @@ data.NumQualityLevels = 0; uint8_t numAttrs = 0; bx::read(&reader, numAttrs); - memset(m_attrMask, 0, sizeof(m_attrMask) ); + bx::memSet(m_attrMask, 0, sizeof(m_attrMask) ); for (uint32_t ii = 0; ii < numAttrs; ++ii) { @@ -4065,11 +4078,11 @@ 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(mip.m_height/blockInfo.blockHeight + imageCopy(temp + , mip.m_height/blockInfo.blockHeight , (mip.m_width /blockInfo.blockWidth )*mip.m_blockSize , mip.m_data , pitch - , temp ); srd[kk].pData = temp; @@ -4083,11 +4096,11 @@ 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(mip.m_height + imageCopy(temp + , mip.m_height , mip.m_width*mip.m_bpp / 8 , mip.m_data , pitch - , temp ); srd[kk].pData = temp; @@ -4098,7 +4111,7 @@ data.NumQualityLevels = 0; if (swizzle) { -// imageSwizzleBgra8(width, height, mip.m_width*4, data, temp); +// imageSwizzleBgra8(temp, width, height, mip.m_width*4, data); } srd[kk].SlicePitch = mip.m_height*srd[kk].RowPitch; @@ -4122,7 +4135,7 @@ data.NumQualityLevels = 0; const uint32_t msaaQuality = bx::uint32_satsub( (m_flags&BGFX_TEXTURE_RT_MSAA_MASK)>>BGFX_TEXTURE_RT_MSAA_SHIFT, 1); const DXGI_SAMPLE_DESC& msaa = s_msaa[msaaQuality]; - memset(&m_srvd, 0, sizeof(m_srvd) ); + bx::memSet(&m_srvd, 0, sizeof(m_srvd) ); m_srvd.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; m_srvd.Format = s_textureFormat[m_textureFormat].m_fmtSrv; DXGI_FORMAT format = s_textureFormat[m_textureFormat].m_fmt; @@ -4247,7 +4260,7 @@ data.NumQualityLevels = 0; m_uavd.Texture2D.PlaneSlice = 0; } - if( m_type==TextureCube ) + if (TextureCube == m_type) { m_uavd.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2DARRAY; m_uavd.Texture2DArray.MipSlice = 0; @@ -4257,7 +4270,8 @@ data.NumQualityLevels = 0; break; case Texture3D: - resourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE3D; + resourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE3D; + resourceDesc.DepthOrArraySize = m_depth; m_srvd.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE3D; m_srvd.Texture3D.MostDetailedMip = 0; m_srvd.Texture3D.MipLevels = numMips; @@ -4359,7 +4373,6 @@ data.NumQualityLevels = 0; desc.Height = _rect.m_height; uint32_t numRows; - uint64_t rowPitch; uint64_t totalBytes; D3D12_PLACED_SUBRESOURCE_FOOTPRINT layout; s_renderD3D12->m_device->GetCopyableFootprints(&desc @@ -4368,18 +4381,19 @@ data.NumQualityLevels = 0; , 0 , &layout , &numRows - , &rowPitch + , NULL , &totalBytes ); - ID3D12Resource* staging = createCommittedResource(s_renderD3D12->m_device, HeapProperty::Upload, totalBytes); + const uint32_t rowPitch = layout.Footprint.RowPitch; + ID3D12Resource* staging = createCommittedResource(s_renderD3D12->m_device, HeapProperty::Upload, totalBytes); uint8_t* data; DX_CHECK(staging->Map(0, NULL, (void**)&data) ); for (uint32_t ii = 0, height = _rect.m_height; ii < height; ++ii) { - memcpy(&data[ii*rowPitch], &_mem->data[ii*srcpitch], srcpitch); + bx::memCopy(&data[ii*rowPitch], &_mem->data[ii*srcpitch], srcpitch); } staging->Unmap(0, NULL); @@ -4423,8 +4437,9 @@ data.NumQualityLevels = 0; void FrameBufferD3D12::create(uint8_t _num, const Attachment* _attachment) { + m_denseIdx = UINT16_MAX; m_numTh = _num; - memcpy(m_attachment, _attachment, _num*sizeof(Attachment) ); + bx::memCopy(m_attachment, _attachment, _num*sizeof(Attachment) ); postReset(); } @@ -4709,7 +4724,10 @@ data.NumQualityLevels = 0; while (0 == m_control.reserve(1) ) { OcclusionQueryHandle handle = m_handle[m_control.m_read]; - _render->m_occlusion[handle.idx] = 0 < m_result[handle.idx]; + if (isValid(handle) ) + { + _render->m_occlusion[handle.idx] = int32_t(m_result[handle.idx]); + } m_control.consume(1); } @@ -4737,6 +4755,20 @@ data.NumQualityLevels = 0; m_control.commit(1); } + void OcclusionQueryD3D12::invalidate(OcclusionQueryHandle _handle) + { + const uint32_t size = m_control.m_size; + + for (uint32_t ii = 0, num = m_control.available(); ii < num; ++ii) + { + OcclusionQueryHandle& handle = m_handle[(m_control.m_read + ii) % size]; + if (handle.idx == _handle.idx) + { + handle.idx = bgfx::invalidHandle; + } + } + } + struct Bind { D3D12_GPU_DESCRIPTOR_HANDLE m_srvHandle; @@ -4849,7 +4881,8 @@ data.NumQualityLevels = 0; int32_t numItems = _render->m_num; for (int32_t item = 0, restartItem = numItems; item < numItems || restartItem < numItems;) { - const bool isCompute = key.decode(_render->m_sortKeys[item], _render->m_viewRemap); + const uint64_t encodedKey = _render->m_sortKeys[item]; + const bool isCompute = key.decode(encodedKey, _render->m_viewRemap); statsKeyType[isCompute]++; const bool viewChanged = 0 @@ -4901,13 +4934,14 @@ data.NumQualityLevels = 0; if (BGFX_CLEAR_NONE != clr.m_flags) { Rect clearRect = rect; - clearRect.intersect(rect, viewScissorRect); + clearRect.setIntersect(rect, viewScissorRect); clearQuad(clearRect, clr, _render->m_colorPalette); } prim = s_primInfo[BX_COUNTOF(s_primName)]; // Force primitive type update. - for (; blitItem < numBlitItems && blitKey.m_view <= view; blitItem++) + 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]); @@ -5277,7 +5311,7 @@ data.NumQualityLevels = 0; } else { - memcpy(&srvHandle[stage], &srvHandle[0], sizeof(D3D12_GPU_DESCRIPTOR_HANDLE) ); + bx::memCopy(&srvHandle[stage], &srvHandle[0], sizeof(D3D12_GPU_DESCRIPTOR_HANDLE) ); samplerFlags[stage] = 0; } } @@ -5363,7 +5397,12 @@ data.NumQualityLevels = 0; { restoreScissor = true; Rect scissorRect; - scissorRect.intersect(viewScissorRect,_render->m_rectCache.m_cache[scissor]); + scissorRect.setIntersect(viewScissorRect,_render->m_rectCache.m_cache[scissor]); + if (scissorRect.isZeroArea() ) + { + continue; + } + D3D12_RECT rc; rc.left = scissorRect.m_x; rc.top = scissorRect.m_y; @@ -5473,16 +5512,20 @@ data.NumQualityLevels = 0; const int64_t timerFreq = bx::getHPFrequency(); - perfStats.cpuTimeEnd = now; - perfStats.cpuTimerFreq = timerFreq; - perfStats.gpuTimeBegin = m_gpuTimer.m_begin; - perfStats.gpuTimeEnd = m_gpuTimer.m_end; - perfStats.gpuTimerFreq = m_gpuTimer.m_frequency; + perfStats.cpuTimeEnd = now; + perfStats.cpuTimerFreq = timerFreq; + perfStats.gpuTimeBegin = m_gpuTimer.m_begin; + perfStats.gpuTimeEnd = m_gpuTimer.m_end; + perfStats.gpuTimerFreq = m_gpuTimer.m_frequency; + perfStats.numDraw = statsKeyType[0]; + perfStats.numCompute = statsKeyType[1]; + perfStats.maxGpuLatency = maxGpuLatency; - if (_render->m_debug & (BGFX_DEBUG_IFH | BGFX_DEBUG_STATS) ) + if (_render->m_debug & (BGFX_DEBUG_IFH|BGFX_DEBUG_STATS) ) { // PIX_BEGINEVENT(D3DCOLOR_FRAME, L"debugstats"); +// m_needPresent = true; TextVideoMem& tvm = m_textVideoMem; static int64_t next = now; @@ -5527,27 +5570,34 @@ data.NumQualityLevels = 0; ); #if BX_PLATFORM_WINDOWS - DXGI_QUERY_VIDEO_MEMORY_INFO memInfo; - DX_CHECK(m_adapter->QueryVideoMemoryInfo(0, DXGI_MEMORY_SEGMENT_GROUP_LOCAL, &memInfo) ); + 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]) ); - char budget[16]; - bx::prettify(budget, BX_COUNTOF(budget), memInfo.Budget); + for (uint32_t ii = 0; ii < BX_COUNTOF(vmi); ++ii) + { + const DXGI_QUERY_VIDEO_MEMORY_INFO& memInfo = vmi[ii]; - char currentUsage[16]; - bx::prettify(currentUsage, BX_COUNTOF(currentUsage), memInfo.CurrentUsage); + char budget[16]; + bx::prettify(budget, BX_COUNTOF(budget), memInfo.Budget); - char availableForReservation[16]; - bx::prettify(availableForReservation, BX_COUNTOF(currentUsage), memInfo.AvailableForReservation); + char currentUsage[16]; + bx::prettify(currentUsage, BX_COUNTOF(currentUsage), memInfo.CurrentUsage); - char currentReservation[16]; - bx::prettify(currentReservation, BX_COUNTOF(currentReservation), memInfo.CurrentReservation); + char availableForReservation[16]; + bx::prettify(availableForReservation, BX_COUNTOF(currentUsage), memInfo.AvailableForReservation); - tvm.printf(0, pos++, 0x8f, " Budget: %s, Usage: %s, AvailRes: %s, CurrRes: %s " - , budget - , currentUsage - , availableForReservation - , currentReservation - ); + char currentReservation[16]; + bx::prettify(currentReservation, BX_COUNTOF(currentReservation), memInfo.CurrentReservation); + + tvm.printf(0, pos++, 0x8f, " %s - Budget: %10s, Usage: %10s, AvailRes: %10s, CurrRes: %10s " + , 0 == ii ? "Local " : "Non-local" + , budget + , currentUsage + , availableForReservation + , currentReservation + ); + } #endif // BX_PLATFORM_WINDOWS pos = 10; @@ -5605,10 +5655,10 @@ data.NumQualityLevels = 0; , m_batch.m_stats.m_numImmediate[BatchD3D12::DrawIndexed] ); -// if (NULL != m_renderdocdll) -// { -// tvm.printf(tvm.m_width-27, 0, 0x1f, " [F11 - RenderDoc capture] "); -// } + if (NULL != m_renderdocdll) + { + tvm.printf(tvm.m_width-27, 0, 0x1f, " [F11 - RenderDoc capture] "); + } tvm.printf(10, pos++, 0x8e, " Indices: %7d ", statsNumIndices); tvm.printf(10, pos++, 0x8e, " Uniform size: %7d, Max: %7d ", _render->m_uniformEnd, _render->m_uniformMax); diff --git a/3rdparty/bgfx/src/renderer_d3d12.h b/3rdparty/bgfx/src/renderer_d3d12.h index e4eb6da..25de46c 100644 --- a/3rdparty/bgfx/src/renderer_d3d12.h +++ b/3rdparty/bgfx/src/renderer_d3d12.h @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -49,6 +49,7 @@ BX_PRAGMA_DIAGNOSTIC_POP(); #include "renderer.h" #include "renderer_d3d.h" #include "shader_dxbc.h" +#include "debug_renderdoc.h" namespace bgfx { namespace d3d12 { @@ -230,14 +231,14 @@ namespace bgfx { namespace d3d12 { BX_CHECK(NULL != _vsh->m_code, "Vertex shader doesn't exist."); m_vsh = _vsh; - memcpy(&m_predefined[0], _vsh->m_predefined, _vsh->m_numPredefined*sizeof(PredefinedUniform)); + bx::memCopy(&m_predefined[0], _vsh->m_predefined, _vsh->m_numPredefined*sizeof(PredefinedUniform)); m_numPredefined = _vsh->m_numPredefined; if (NULL != _fsh) { BX_CHECK(NULL != _fsh->m_code, "Fragment shader doesn't exist."); m_fsh = _fsh; - memcpy(&m_predefined[m_numPredefined], _fsh->m_predefined, _fsh->m_numPredefined*sizeof(PredefinedUniform)); + bx::memCopy(&m_predefined[m_numPredefined], _fsh->m_predefined, _fsh->m_numPredefined*sizeof(PredefinedUniform)); m_numPredefined += _fsh->m_numPredefined; } } @@ -270,8 +271,8 @@ namespace bgfx { namespace d3d12 , m_state(D3D12_RESOURCE_STATE_COMMON) , m_numMips(0) { - memset(&m_srvd, 0, sizeof(m_srvd) ); - memset(&m_uavd, 0, sizeof(m_uavd) ); + bx::memSet(&m_srvd, 0, sizeof(m_srvd) ); + bx::memSet(&m_uavd, 0, sizeof(m_uavd) ); } void create(const Memory* _mem, uint32_t _flags, uint8_t _skip); @@ -379,7 +380,7 @@ namespace bgfx { namespace d3d12 , m_minIndirect(0) , m_flushPerBatch(0) { - memset(m_num, 0, sizeof(m_num) ); + bx::memSet(m_num, 0, sizeof(m_num) ); } ~BatchD3D12() @@ -480,10 +481,11 @@ namespace bgfx { namespace d3d12 void shutdown(); void begin(ID3D12GraphicsCommandList* _commandList, Frame* _render, OcclusionQueryHandle _handle); void end(ID3D12GraphicsCommandList* _commandList); + void invalidate(OcclusionQueryHandle _handle); ID3D12Resource* m_readback; ID3D12QueryHeap* m_queryHeap; - OcclusionQueryHandle m_handle[BGFX_CONFIG_MAX_OCCUSION_QUERIES]; + OcclusionQueryHandle m_handle[BGFX_CONFIG_MAX_OCCLUSION_QUERIES]; uint64_t* m_result; bx::RingBufferControl m_control; }; diff --git a/3rdparty/bgfx/src/renderer_d3d9.cpp b/3rdparty/bgfx/src/renderer_d3d9.cpp index 2c662ad..4f4267b 100644 --- a/3rdparty/bgfx/src/renderer_d3d9.cpp +++ b/3rdparty/bgfx/src/renderer_d3d9.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -275,6 +275,18 @@ namespace bgfx { namespace d3d9 static PFN_D3DPERF_BEGIN_EVENT D3DPERF_BeginEvent; static PFN_D3DPERF_END_EVENT D3DPERF_EndEvent; + inline bool isLost(HRESULT _hr) + { + return false + || _hr == D3DERR_DEVICELOST + || _hr == D3DERR_DRIVERINTERNALERROR +#if !defined(D3D_DISABLE_9EX) + || _hr == D3DERR_DEVICEHUNG + || _hr == D3DERR_DEVICEREMOVED +#endif // !defined(D3D_DISABLE_9EX) + ; + } + struct RendererContextD3D9 : public RendererContextI { RendererContextD3D9() @@ -317,13 +329,13 @@ namespace bgfx { namespace d3d9 ErrorState::Enum errorState = ErrorState::Default; m_fbh.idx = invalidHandle; - memset(m_uniforms, 0, sizeof(m_uniforms) ); - memset(&m_resolution, 0, sizeof(m_resolution) ); + bx::memSet(m_uniforms, 0, sizeof(m_uniforms) ); + bx::memSet(&m_resolution, 0, sizeof(m_resolution) ); D3DFORMAT adapterFormat = D3DFMT_X8R8G8B8; // http://msdn.microsoft.com/en-us/library/windows/desktop/bb172588%28v=vs.85%29.aspx - memset(&m_params, 0, sizeof(m_params) ); + bx::memSet(&m_params, 0, sizeof(m_params) ); m_params.BackBufferWidth = BGFX_DEFAULT_WIDTH; m_params.BackBufferHeight = BGFX_DEFAULT_HEIGHT; m_params.BackBufferFormat = adapterFormat; @@ -1011,7 +1023,7 @@ namespace bgfx { namespace d3d9 for (uint32_t yy = 0, height = srcHeight; yy < height; ++yy) { - memcpy(dst, src, pitch); + bx::memCopy(dst, src, pitch); src += srcPitch; dst += dstPitch; @@ -1105,7 +1117,7 @@ namespace bgfx { namespace d3d9 uint32_t size = BX_ALIGN_16(g_uniformTypeSize[_type]*_num); void* data = BX_ALLOC(g_allocator, size); - memset(data, 0, size); + bx::memSet(data, 0, size); m_uniforms[_handle.idx] = data; m_uniformReg.add(_handle, _name, data); } @@ -1117,9 +1129,23 @@ namespace bgfx { namespace d3d9 m_uniformReg.remove(_handle); } - void saveScreenShot(const char* _filePath) BX_OVERRIDE + void requestScreenShot(FrameBufferHandle _handle, const char* _filePath) BX_OVERRIDE { #if BX_PLATFORM_WINDOWS + IDirect3DSwapChain9* swapChain = isValid(_handle) + ? m_frameBuffers[_handle.idx].m_swapChain + : m_swapChain + ; + + if (NULL == swapChain) + { + BX_TRACE("Unable to capture screenshot %s.", _filePath); + return; + } + + D3DPRESENT_PARAMETERS params; + DX_CHECK(swapChain->GetPresentParameters(¶ms)); + IDirect3DSurface9* surface; D3DDEVICE_CREATION_PARAMETERS dcp; DX_CHECK(m_device->GetCreationParameters(&dcp) ); @@ -1135,8 +1161,14 @@ namespace bgfx { namespace d3d9 , NULL ) ); + HWND nwh = params.hDeviceWindow; + + SetWindowPos(nwh, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE); + DX_CHECK(m_device->GetFrontBufferData(0, surface) ); + SetWindowPos(nwh, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE); + D3DLOCKED_RECT rect; DX_CHECK(surface->LockRect(&rect , NULL @@ -1144,25 +1176,27 @@ namespace bgfx { namespace d3d9 ) ); RECT rc; - GetClientRect( (HWND)g_platformData.nwh, &rc); + GetClientRect(nwh, &rc); POINT point; point.x = rc.left; point.y = rc.top; - ClientToScreen( (HWND)g_platformData.nwh, &point); + ClientToScreen(nwh, &point); uint8_t* data = (uint8_t*)rect.pBits; uint32_t bytesPerPixel = rect.Pitch/dm.Width; g_callback->screenShot(_filePath - , m_params.BackBufferWidth - , m_params.BackBufferHeight + , params.BackBufferWidth + , params.BackBufferHeight , rect.Pitch , &data[point.y*rect.Pitch+point.x*bytesPerPixel] - , m_params.BackBufferHeight*rect.Pitch + , params.BackBufferHeight*rect.Pitch , false ); DX_CHECK(surface->UnlockRect() ); DX_RELEASE(surface, 0); +#else + BX_UNUSED(_handle, _filePath); #endif // BX_PLATFORM_WINDOWS } @@ -1184,7 +1218,7 @@ namespace bgfx { namespace d3d9 void updateUniform(uint16_t _loc, const void* _data, uint32_t _size) BX_OVERRIDE { - memcpy(m_uniforms[_loc], _data, _size); + bx::memCopy(m_uniforms[_loc], _data, _size); } void setMarker(const char* _marker, uint32_t _size) BX_OVERRIDE @@ -1198,6 +1232,11 @@ namespace bgfx { namespace d3d9 BX_UNUSED(_marker, _size); } + void invalidateOcclusionQuery(OcclusionQueryHandle _handle) BX_OVERRIDE + { + m_occlusionQuery.invalidate(_handle); + } + void submit(Frame* _render, ClearQuad& _clearQuad, TextVideoMemBlitter& _textVideoMemBlitter) BX_OVERRIDE; void blitSetup(TextVideoMemBlitter& _blitter) BX_OVERRIDE @@ -1206,7 +1245,7 @@ namespace bgfx { namespace d3d9 uint32_t height = m_params.BackBufferHeight; FrameBufferHandle fbh = BGFX_INVALID_HANDLE; - setFrameBuffer(fbh, false); + setFrameBuffer(fbh, false, false); D3DVIEWPORT9 vp; vp.X = 0; @@ -1347,7 +1386,7 @@ namespace bgfx { namespace d3d9 } } - void setFrameBuffer(FrameBufferHandle _fbh, bool _msaa = true) + void setFrameBuffer(FrameBufferHandle _fbh, bool _msaa = true, bool _needPresent = true) { if (isValid(m_fbh) && m_fbh.idx != _fbh.idx) @@ -1358,6 +1397,7 @@ namespace bgfx { namespace d3d9 if (!isValid(_fbh) ) { + m_needPresent |= _needPresent; DX_CHECK(m_device->SetRenderTarget(0, m_backBufferColor) ); for (uint32_t ii = 1, num = g_caps.limits.maxFBAttachments; ii < num; ++ii) { @@ -1412,15 +1452,10 @@ namespace bgfx { namespace d3d9 postReset(); } - static bool isLost(HRESULT _hr) + void flush() { - return D3DERR_DEVICELOST == _hr - || D3DERR_DRIVERINTERNALERROR == _hr -#if !defined(D3D_DISABLE_9EX) - || D3DERR_DEVICEHUNG == _hr - || D3DERR_DEVICEREMOVED == _hr -#endif // !defined(D3D_DISABLE_9EX) - ; + m_flushQuery->Issue(D3DISSUE_END); + m_flushQuery->GetData(NULL, 0, D3DGETDATA_FLUSH); } void flip(HMD& /*_hmd*/) BX_OVERRIDE @@ -1434,10 +1469,18 @@ namespace bgfx { namespace d3d9 for (uint32_t ii = 0, num = m_numWindows; ii < num; ++ii) { - HRESULT hr; + HRESULT hr = S_OK; if (0 == ii) { - hr = m_swapChain->Present(NULL, NULL, (HWND)g_platformData.nwh, NULL, 0); + if (m_needPresent) + { + hr = m_swapChain->Present(NULL, NULL, (HWND)g_platformData.nwh, NULL, 0); + m_needPresent = false; + } + else + { + flush(); + } } else { @@ -1473,6 +1516,8 @@ namespace bgfx { namespace d3d9 void preReset() { + m_needPresent = false; + invalidateSamplerState(); for (uint32_t stage = 0; stage < BGFX_CONFIG_MAX_TEXTURE_SAMPLERS; ++stage) @@ -1742,7 +1787,7 @@ namespace bgfx { namespace d3d9 else { UniformHandle handle; - memcpy(&handle, _uniformBuffer.read(sizeof(UniformHandle) ), sizeof(UniformHandle) ); + bx::memCopy(&handle, _uniformBuffer.read(sizeof(UniformHandle) ), sizeof(UniformHandle) ); data = (const char*)m_uniforms[handle.idx]; } @@ -1986,7 +2031,7 @@ namespace bgfx { namespace d3d9 for (uint32_t ii = 0; ii < numMrt; ++ii) { uint8_t index = (uint8_t)bx::uint32_min(BGFX_CONFIG_MAX_COLOR_PALETTE - 1, _clear.m_index[ii]); - memcpy(mrtClear[ii], _palette[index], 16); + bx::memCopy(mrtClear[ii], _palette[index], 16); } } else @@ -2001,7 +2046,7 @@ namespace bgfx { namespace d3d9 for (uint32_t ii = 0; ii < numMrt; ++ii) { - memcpy(mrtClear[ii], rgba, 16); + bx::memCopy(mrtClear[ii], rgba, 16); } } @@ -2034,6 +2079,8 @@ namespace bgfx { namespace d3d9 D3DPOOL m_pool; IDirect3DSwapChain9* m_swapChain; + + bool m_needPresent; uint16_t m_numWindows; FrameBufferHandle m_windows[BGFX_CONFIG_MAX_FRAME_BUFFERS]; @@ -2291,7 +2338,7 @@ namespace bgfx { namespace d3d9 bool asInt; _decl.decode(Attrib::Enum(attr), num, type, normalized, asInt); - memcpy(elem, &s_attrib[attr], sizeof(D3DVERTEXELEMENT9) ); + bx::memCopy(elem, &s_attrib[attr], sizeof(D3DVERTEXELEMENT9) ); elem->Type = s_attribType[type][num-1][normalized]; elem->Offset = _decl.m_offset[attr]; @@ -2311,13 +2358,13 @@ namespace bgfx { namespace d3d9 for (uint8_t ii = 0; ii < _numInstanceData; ++ii) { - memcpy(elem, &inst, sizeof(D3DVERTEXELEMENT9) ); + bx::memCopy(elem, &inst, sizeof(D3DVERTEXELEMENT9) ); elem->UsageIndex = uint8_t(7-ii); // TEXCOORD7 = i_data0, TEXCOORD6 = i_data1, etc. elem->Offset = ii*16; ++elem; } - memcpy(elem, &s_attrib[Attrib::Count], sizeof(D3DVERTEXELEMENT9) ); + bx::memCopy(elem, &s_attrib[Attrib::Count], sizeof(D3DVERTEXELEMENT9) ); IDirect3DVertexDeclaration9* ptr; DX_CHECK(s_renderD3D9->m_device->CreateVertexDeclaration(vertexElements, &ptr) ); @@ -2326,7 +2373,7 @@ namespace bgfx { namespace d3d9 void VertexDeclD3D9::create(const VertexDecl& _decl) { - memcpy(&m_decl, &_decl, sizeof(VertexDecl) ); + bx::memCopy(&m_decl, &_decl, sizeof(VertexDecl) ); dump(m_decl); m_ptr = createVertexDeclaration(_decl, 0); } @@ -2962,15 +3009,15 @@ namespace bgfx { namespace d3d9 switch (m_textureFormat) { case TextureFormat::RGB5A1: - imageConvert(bits, 16, packBgr5a1, mip.m_data, unpackRgb5a1, size); + imageConvert(bits, 16, bx::packBgr5a1, mip.m_data, bx::unpackRgb5a1, size); break; case TextureFormat::RGBA4: - imageConvert(bits, 16, packBgra4, mip.m_data, unpackRgba4, size); + imageConvert(bits, 16, bx::packBgra4, mip.m_data, bx::unpackRgba4, size); break; default: - memcpy(bits, mip.m_data, size); + bx::memCopy(bits, mip.m_data, size); break; } } @@ -3024,15 +3071,15 @@ namespace bgfx { namespace d3d9 switch (m_textureFormat) { case TextureFormat::RGB5A1: - imageConvert(dst, 16, packBgr5a1, src, unpackRgb5a1, rectpitch); + imageConvert(dst, 16, bx::packBgr5a1, src, bx::unpackRgb5a1, rectpitch); break; case TextureFormat::RGBA4: - imageConvert(dst, 16, packBgra4, src, unpackRgba4, rectpitch); + imageConvert(dst, 16, bx::packBgra4, src, bx::unpackRgba4, rectpitch); break; default: - memcpy(dst, src, rectpitch); + bx::memCopy(dst, src, rectpitch); break; } src += srcpitch; @@ -3134,11 +3181,12 @@ namespace bgfx { namespace d3d9 m_surface[ii] = NULL; } + m_denseIdx = UINT16_MAX; m_dsIdx = UINT8_MAX; m_num = 0; m_numTh = _num; m_needResolve = false; - memcpy(m_attachment, _attachment, _num*sizeof(Attachment) ); + bx::memCopy(m_attachment, _attachment, _num*sizeof(Attachment) ); for (uint32_t ii = 0; ii < _num; ++ii) { @@ -3195,7 +3243,7 @@ namespace bgfx { namespace d3d9 m_height = bx::uint32_max(_height, 16); D3DPRESENT_PARAMETERS params; - memcpy(¶ms, &s_renderD3D9->m_params, sizeof(D3DPRESENT_PARAMETERS) ); + bx::memCopy(¶ms, &s_renderD3D9->m_params, sizeof(D3DPRESENT_PARAMETERS) ); params.BackBufferWidth = m_width; params.BackBufferHeight = m_height; @@ -3305,7 +3353,7 @@ namespace bgfx { namespace d3d9 if (NULL != m_hwnd) { D3DPRESENT_PARAMETERS params; - memcpy(¶ms, &s_renderD3D9->m_params, sizeof(D3DPRESENT_PARAMETERS) ); + bx::memCopy(¶ms, &s_renderD3D9->m_params, sizeof(D3DPRESENT_PARAMETERS) ); params.BackBufferWidth = m_width; params.BackBufferHeight = m_height; @@ -3456,8 +3504,10 @@ namespace bgfx { namespace d3d9 Frame& frame = m_frame[m_control.m_read]; uint64_t timeEnd; - HRESULT hr = frame.m_end->GetData(&timeEnd, sizeof(timeEnd), 0); - if (S_OK == hr) + const bool flush = BX_COUNTOF(m_frame)-1 == m_control.available(); + HRESULT hr = frame.m_end->GetData(&timeEnd, sizeof(timeEnd), flush ? D3DGETDATA_FLUSH : 0); + if (S_OK == hr + || isLost(hr) ) { m_control.consume(1); @@ -3524,18 +3574,36 @@ namespace bgfx { namespace d3d9 { Query& query = m_query[m_control.m_read]; - uint32_t result; - HRESULT hr = query.m_ptr->GetData(&result, sizeof(result), 0); - if (S_FALSE == hr) + if (isValid(query.m_handle) ) { - break; + uint32_t result; + HRESULT hr = query.m_ptr->GetData(&result, sizeof(result), 0); + if (S_FALSE == hr) + { + break; + } + + _render->m_occlusion[query.m_handle.idx] = int32_t(result); } - _render->m_occlusion[query.m_handle.idx] = 0 < result; m_control.consume(1); } } + void OcclusionQueryD3D9::invalidate(OcclusionQueryHandle _handle) + { + const uint32_t size = m_control.m_size; + + for (uint32_t ii = 0, num = m_control.available(); ii < num; ++ii) + { + Query& query = m_query[(m_control.m_read + ii) % size]; + if (query.m_handle.idx == _handle.idx) + { + query.m_handle.idx = bgfx::invalidHandle; + } + } + } + void RendererContextD3D9::submit(Frame* _render, ClearQuad& _clearQuad, TextVideoMemBlitter& _textVideoMemBlitter) { IDirect3DDevice9* device = m_device; @@ -3614,7 +3682,8 @@ namespace bgfx { namespace d3d9 { for (uint32_t item = 0, numItems = _render->m_num; item < numItems; ++item) { - const bool isCompute = key.decode(_render->m_sortKeys[item], _render->m_viewRemap); + const uint64_t encodedKey = _render->m_sortKeys[item]; + const bool isCompute = key.decode(encodedKey, _render->m_viewRemap); statsKeyType[isCompute]++; if (isCompute) @@ -3696,7 +3765,8 @@ namespace bgfx { namespace d3d9 DX_CHECK(device->SetRenderState(D3DRS_ALPHABLENDENABLE, FALSE) ); DX_CHECK(device->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_GREATER) ); - for (; blitItem < numBlitItems && blitKey.m_view <= view; blitItem++) + 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]); @@ -3770,7 +3840,12 @@ namespace bgfx { namespace d3d9 else { Rect scissorRect; - scissorRect.intersect(viewScissorRect, _render->m_rectCache.m_cache[scissor]); + scissorRect.setIntersect(viewScissorRect, _render->m_rectCache.m_cache[scissor]); + if (scissorRect.isZeroArea() ) + { + continue; + } + DX_CHECK(device->SetRenderState(D3DRS_SCISSORTESTENABLE, true) ); RECT rc; rc.left = scissorRect.m_x; @@ -4185,8 +4260,7 @@ namespace bgfx { namespace d3d9 { if (0 != (m_resolution.m_flags & BGFX_RESET_FLUSH_AFTER_RENDER) ) { - m_flushQuery->Issue(D3DISSUE_END); - m_flushQuery->GetData(NULL, 0, D3DGETDATA_FLUSH); + flush(); } captureElapsed = -bx::getHPCounter(); @@ -4236,16 +4310,20 @@ namespace bgfx { namespace d3d9 const int64_t timerFreq = bx::getHPFrequency(); - perfStats.cpuTimeEnd = now; - perfStats.cpuTimerFreq = timerFreq; - perfStats.gpuTimeBegin = m_gpuTimer.m_begin; - perfStats.gpuTimeEnd = m_gpuTimer.m_end; - perfStats.gpuTimerFreq = m_gpuTimer.m_frequency; + perfStats.cpuTimeEnd = now; + perfStats.cpuTimerFreq = timerFreq; + perfStats.gpuTimeBegin = m_gpuTimer.m_begin; + perfStats.gpuTimeEnd = m_gpuTimer.m_end; + perfStats.gpuTimerFreq = m_gpuTimer.m_frequency; + perfStats.numDraw = statsKeyType[0]; + perfStats.numCompute = statsKeyType[1]; + perfStats.maxGpuLatency = maxGpuLatency; if (_render->m_debug & (BGFX_DEBUG_IFH|BGFX_DEBUG_STATS) ) { PIX_BEGINEVENT(D3DCOLOR_FRAME, L"debugstats"); + m_needPresent = true; TextVideoMem& tvm = m_textVideoMem; static int64_t next = now; diff --git a/3rdparty/bgfx/src/renderer_d3d9.h b/3rdparty/bgfx/src/renderer_d3d9.h index c85cddc..2aa9b64 100644 --- a/3rdparty/bgfx/src/renderer_d3d9.h +++ b/3rdparty/bgfx/src/renderer_d3d9.h @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -144,7 +144,7 @@ namespace bgfx { namespace d3d9 , _discard || (m_dynamic && 0 == _offset && m_size == _size) ? D3DLOCK_DISCARD : 0 ) ); - memcpy(buffer, _data, _size); + bx::memCopy(buffer, _data, _size); DX_CHECK(m_ptr->Unlock() ); } @@ -185,7 +185,7 @@ namespace bgfx { namespace d3d9 , _discard || (m_dynamic && 0 == _offset && m_size == _size) ? D3DLOCK_DISCARD : 0 ) ); - memcpy(buffer, _data, _size); + bx::memCopy(buffer, _data, _size); DX_CHECK(m_ptr->Unlock() ); } @@ -276,8 +276,8 @@ namespace bgfx { namespace d3d9 BX_CHECK(NULL != _fsh.m_pixelShader, "Fragment shader doesn't exist."); m_fsh = &_fsh; - memcpy(&m_predefined[0], _vsh.m_predefined, _vsh.m_numPredefined*sizeof(PredefinedUniform) ); - memcpy(&m_predefined[_vsh.m_numPredefined], _fsh.m_predefined, _fsh.m_numPredefined*sizeof(PredefinedUniform) ); + bx::memCopy(&m_predefined[0], _vsh.m_predefined, _vsh.m_numPredefined*sizeof(PredefinedUniform) ); + bx::memCopy(&m_predefined[_vsh.m_numPredefined], _fsh.m_predefined, _fsh.m_numPredefined*sizeof(PredefinedUniform) ); m_numPredefined = _vsh.m_numPredefined + _fsh.m_numPredefined; } @@ -468,6 +468,7 @@ namespace bgfx { namespace d3d9 void begin(Frame* _render, OcclusionQueryHandle _handle); void end(); void resolve(Frame* _render, bool _wait = false); + void invalidate(OcclusionQueryHandle _handle); struct Query { @@ -475,7 +476,7 @@ namespace bgfx { namespace d3d9 OcclusionQueryHandle m_handle; }; - Query m_query[BGFX_CONFIG_MAX_OCCUSION_QUERIES]; + Query m_query[BGFX_CONFIG_MAX_OCCLUSION_QUERIES]; bx::RingBufferControl m_control; }; diff --git a/3rdparty/bgfx/src/renderer_gl.cpp b/3rdparty/bgfx/src/renderer_gl.cpp index 333cc5d..8f4903a 100644 --- a/3rdparty/bgfx/src/renderer_gl.cpp +++ b/3rdparty/bgfx/src/renderer_gl.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -851,10 +851,16 @@ namespace bgfx { namespace gl static const char* s_ARB_shader_texture_lod[] = { "texture2DLod", + "texture2DArrayLod", // BK - interacts with ARB_texture_array. "texture2DProjLod", + "texture2DGrad", + "texture2DProjGrad", "texture3DLod", "texture3DProjLod", + "texture3DGrad", + "texture3DProjGrad", "textureCubeLod", + "textureCubeGrad", "shadow2DLod", "shadow2DProjLod", NULL @@ -869,10 +875,10 @@ namespace bgfx { namespace gl "texture2DLod", "texture2DProjLod", "textureCubeLod", + "texture2DGrad", + "texture2DProjGrad", + "textureCubeGrad", NULL - // "texture2DGrad", - // "texture2DProjGrad", - // "textureCubeGrad", }; static const char* s_EXT_shadow_samplers[] = @@ -980,7 +986,7 @@ namespace bgfx { namespace gl // // If is 0 then is assumed to be null-terminated. - uint32_t size = (0 == _length ? (uint32_t)strlen(_marker) : _length) + 1; + uint32_t size = (0 == _length ? (uint32_t)bx::strnlen(_marker) : _length) + 1; size *= sizeof(wchar_t); wchar_t* name = (wchar_t*)alloca(size); mbstowcs(name, _marker, size-2); @@ -1039,7 +1045,7 @@ namespace bgfx { namespace gl glGetError(); // ignore error if glGetString returns NULL. if (NULL != str) { - return bx::hashMurmur2A(str, (uint32_t)strlen(str) ); + return bx::hashMurmur2A(str, (uint32_t)bx::strnlen(str) ); } return 0; @@ -1051,21 +1057,21 @@ namespace bgfx { namespace gl { char name[1024]; const char* pos = _extensions; - const char* end = _extensions + strlen(_extensions); + const char* end = _extensions + bx::strnlen(_extensions); while (pos < end) { uint32_t len; - const char* space = strchr(pos, ' '); + const char* space = bx::strnchr(pos, ' '); if (NULL != space) { len = bx::uint32_min(sizeof(name), (uint32_t)(space - pos) ); } else { - len = bx::uint32_min(sizeof(name), (uint32_t)strlen(pos) ); + len = bx::uint32_min(sizeof(name), (uint32_t)bx::strnlen(pos) ); } - strncpy(name, pos, len); + bx::strlncpy(name, BX_COUNTOF(name), pos, len); name[len] = '\0'; BX_TRACE("\t%s", name); @@ -1349,12 +1355,12 @@ namespace bgfx { namespace gl && extension.m_initialize) { const char* ext = _name; - if (0 == strncmp(ext, "GL_", 3) ) // skip GL_ + if (0 == bx::strncmp(ext, "GL_", 3) ) // skip GL_ { ext += 3; } - if (0 == strcmp(ext, extension.m_name) ) + if (0 == bx::strncmp(ext, extension.m_name) ) { extension.m_supported = true; supported = true; @@ -1376,21 +1382,19 @@ namespace bgfx { namespace gl 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 renderEyeStart(const VRDesc& _desc, uint8_t _eye) BX_OVERRIDE; + virtual void makeRenderTargetActive(const VRDesc& _desc) BX_OVERRIDE; virtual bool submitSwapChain(const VRDesc& _desc) BX_OVERRIDE; private: - GLuint m_eyeFbo[2]; - GLuint m_eyeTexId[2][4]; - GLuint m_depthBuffer[2]; - GLuint m_msaaEyeFbo[2]; - GLuint m_msaaEyeTexId[2]; - GLuint m_msaaDepthBuffer[2]; + GLuint m_eyeTarget[4]; + GLuint m_depthRbo; + GLuint m_msaaTexture; + GLuint m_msaaTarget; GLuint m_mirrorFbo; GLint m_mirrorWidth; GLint m_mirrorHeight; - ovrTextureSwapChain m_textureSwapChain[2]; + ovrTextureSwapChain m_textureSwapChain; ovrMirrorTexture m_mirrorTexture; }; #endif // BGFX_CONFIG_USE_OVR @@ -1439,7 +1443,7 @@ namespace bgfx { namespace gl , m_backBufferFbo(0) , m_msaaBackBufferFbo(0) { - memset(m_msaaBackBufferRbos, 0, sizeof(m_msaaBackBufferRbos) ); + bx::memSet(m_msaaBackBufferRbos, 0, sizeof(m_msaaBackBufferRbos) ); } ~RendererContextGL() @@ -1451,8 +1455,8 @@ namespace bgfx { namespace gl m_renderdocdll = loadRenderDoc(); m_fbh.idx = invalidHandle; - memset(m_uniforms, 0, sizeof(m_uniforms) ); - memset(&m_resolution, 0, sizeof(m_resolution) ); + bx::memSet(m_uniforms, 0, sizeof(m_uniforms) ); + bx::memSet(&m_resolution, 0, sizeof(m_resolution) ); setRenderContextSize(BGFX_DEFAULT_WIDTH, BGFX_DEFAULT_HEIGHT); @@ -1471,7 +1475,7 @@ namespace bgfx { namespace gl for (uint32_t ii = 0; ii < BX_COUNTOF(s_vendorIds); ++ii) { const VendorId& vendorId = s_vendorIds[ii]; - if (0 == strncmp(vendorId.name, m_vendor, strlen(vendorId.name) ) ) + if (0 == bx::strncmp(vendorId.name, m_vendor, bx::strnlen(vendorId.name) ) ) { g_caps.vendorId = vendorId.id; break; @@ -1545,8 +1549,8 @@ namespace bgfx { namespace gl ; if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGLES >= 31) - && 0 == strcmp(m_vendor, "Imagination Technologies") - && NULL != strstr(m_version, "(SDK 3.5@3510720)") ) + && 0 == bx::strncmp(m_vendor, "Imagination Technologies") + && NULL != bx::strnstr(m_version, "(SDK 3.5@3510720)") ) { // Skip initializing extensions that are broken in emulator. s_extension[Extension::ARB_program_interface_query ].m_initialize = @@ -1561,22 +1565,22 @@ namespace bgfx { namespace gl { char name[1024]; const char* pos = extensions; - const char* end = extensions + strlen(extensions); + const char* end = extensions + bx::strnlen(extensions); uint32_t index = 0; while (pos < end) { uint32_t len; - const char* space = strchr(pos, ' '); + const char* space = bx::strnchr(pos, ' '); if (NULL != space) { len = bx::uint32_min(sizeof(name), (uint32_t)(space - pos) ); } else { - len = bx::uint32_min(sizeof(name), (uint32_t)strlen(pos) ); + len = bx::uint32_min(sizeof(name), (uint32_t)bx::strnlen(pos) ); } - strncpy(name, pos, len); + bx::strlncpy(name, BX_COUNTOF(name), pos, len); name[len] = '\0'; updateExtension(name); @@ -1609,7 +1613,7 @@ namespace bgfx { namespace gl } // Allow all texture filters. - memset(s_textureFilter, true, BX_COUNTOF(s_textureFilter) ); + bx::memSet(s_textureFilter, true, BX_COUNTOF(s_textureFilter) ); bool bc123Supported = 0 || s_extension[Extension::EXT_texture_compression_s3tc ].m_supported @@ -2217,6 +2221,8 @@ namespace bgfx { namespace gl ovrPostReset(); + m_needPresent = false; + BGFX_GPU_PROFILER_BIND(); } @@ -2285,11 +2291,19 @@ namespace bgfx { namespace gl } } - m_ovr.flip(); - m_ovr.swap(_hmd); + if (m_needPresent) + { + m_ovr.flip(); + m_ovr.swap(_hmd); - // need to swap GL render context even if OVR is enabled to get the mirror texture in the output - m_glctx.swap(); + // Ensure the back buffer is bound as the source of the flip + GL_CHECK(glBindFramebuffer(GL_FRAMEBUFFER, m_backBufferFbo)); + + // need to swap GL render context even if OVR is enabled to get + // the mirror texture in the output + m_glctx.swap(); + m_needPresent = false; + } } } @@ -2306,7 +2320,7 @@ namespace bgfx { namespace gl void createVertexDecl(VertexDeclHandle _handle, const VertexDecl& _decl) BX_OVERRIDE { VertexDecl& decl = m_vertexDecls[_handle.idx]; - memcpy(&decl, &_decl, sizeof(VertexDecl) ); + bx::memCopy(&decl, &_decl, sizeof(VertexDecl) ); dump(decl); } @@ -2503,7 +2517,7 @@ namespace bgfx { namespace gl uint32_t size = g_uniformTypeSize[_type]*_num; void* data = BX_ALLOC(g_allocator, size); - memset(data, 0, size); + bx::memSet(data, 0, size); m_uniforms[_handle.idx] = data; m_uniformReg.add(_handle, _name, m_uniforms[_handle.idx]); } @@ -2515,14 +2529,24 @@ namespace bgfx { namespace gl m_uniformReg.remove(_handle); } - void saveScreenShot(const char* _filePath) BX_OVERRIDE + void requestScreenShot(FrameBufferHandle _handle, const char* _filePath) BX_OVERRIDE { - uint32_t length = m_resolution.m_width*m_resolution.m_height*4; - uint8_t* data = (uint8_t*)BX_ALLOC(g_allocator, length); - + SwapChainGL* swapChain = NULL; uint32_t width = m_resolution.m_width; uint32_t height = m_resolution.m_height; + if (isValid(_handle) ) + { + const FrameBufferGL& frameBuffer = m_frameBuffers[_handle.idx]; + swapChain = frameBuffer.m_swapChain; + width = frameBuffer.m_width; + height = frameBuffer.m_height; + } + m_glctx.makeCurrent(swapChain); + + uint32_t length = width*height*4; + uint8_t* data = (uint8_t*)BX_ALLOC(g_allocator, length); + GL_CHECK(glReadPixels(0 , 0 , width @@ -2534,7 +2558,7 @@ namespace bgfx { namespace gl if (GL_RGBA == m_readPixelsFmt) { - imageSwizzleBgra8(width, height, width*4, data, data); + imageSwizzleBgra8(data, width, height, width*4, data); } g_callback->screenShot(_filePath @@ -2558,7 +2582,7 @@ namespace bgfx { namespace gl void updateUniform(uint16_t _loc, const void* _data, uint32_t _size) BX_OVERRIDE { - memcpy(m_uniforms[_loc], _data, _size); + bx::memCopy(m_uniforms[_loc], _data, _size); } void setMarker(const char* _marker, uint32_t _size) BX_OVERRIDE @@ -2566,6 +2590,11 @@ namespace bgfx { namespace gl GL_CHECK(glInsertEventMarker(_size, _marker) ); } + void invalidateOcclusionQuery(OcclusionQueryHandle _handle) BX_OVERRIDE + { + m_occlusionQuery.invalidate(_handle); + } + void submit(Frame* _render, ClearQuad& _clearQuad, TextVideoMemBlitter& _textVideoMemBlitter) BX_OVERRIDE; void blitSetup(TextVideoMemBlitter& _blitter) BX_OVERRIDE @@ -2633,7 +2662,9 @@ namespace bgfx { namespace gl GL_CHECK(glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ib.m_id) ); ProgramGL& program = m_program[_blitter.m_program.idx]; + program.bindAttributesBegin(); program.bindAttributes(_blitter.m_decl, 0); + program.bindAttributesEnd(); GL_CHECK(glDrawElements(GL_TRIANGLES , _numIndices @@ -2701,6 +2732,17 @@ namespace bgfx { namespace gl ovrPreReset(); ovrPostReset(); + + if (m_ovr.isEnabled() ) + { + m_ovr.makeRenderTargetActive(); + } + else + { + m_currentFbo = 0; + } + + GL_CHECK(glBindFramebuffer(GL_FRAMEBUFFER, m_currentFbo) ); } if (recenter) @@ -2745,7 +2787,16 @@ namespace bgfx { namespace gl if (!isValid(_fbh) ) { - GL_CHECK(glBindFramebuffer(GL_FRAMEBUFFER, m_msaaBackBufferFbo) ); + m_needPresent |= true; + + if (m_ovr.isEnabled() ) + { + m_ovr.makeRenderTargetActive(); + } + else + { + m_currentFbo = m_msaaBackBufferFbo; + } if (m_srgbWriteControlSupport) { @@ -2767,14 +2818,17 @@ namespace bgfx { namespace gl { m_glctx.makeCurrent(frameBuffer.m_swapChain); frameBuffer.m_needPresent = true; + m_currentFbo = 0; } else { m_glctx.makeCurrent(NULL); - GL_CHECK(glBindFramebuffer(GL_FRAMEBUFFER, frameBuffer.m_fbo[0]) ); + m_currentFbo = frameBuffer.m_fbo[0]; } } + GL_CHECK(glBindFramebuffer(GL_FRAMEBUFFER, m_currentFbo) ); + m_fbh = _fbh; m_fbDiscard = _discard; m_rtMsaa = _msaa; @@ -3073,7 +3127,7 @@ namespace bgfx { namespace gl if (GL_RGBA == m_readPixelsFmt) { - imageSwizzleBgra8(m_resolution.m_width, m_resolution.m_height, m_resolution.m_width*4, m_capture, m_capture); + imageSwizzleBgra8(m_capture, m_resolution.m_width, m_resolution.m_height, m_resolution.m_width*4, m_capture); } g_callback->captureFrame(m_capture, m_captureSize); @@ -3177,7 +3231,7 @@ namespace bgfx { namespace gl else { UniformHandle handle; - memcpy(&handle, _uniformBuffer.read(sizeof(UniformHandle) ), sizeof(UniformHandle) ); + bx::memCopy(&handle, _uniformBuffer.read(sizeof(UniformHandle) ), sizeof(UniformHandle) ); data = (const char*)m_uniforms[handle.idx]; } @@ -3363,7 +3417,9 @@ namespace bgfx { namespace gl ProgramGL& program = m_program[_clearQuad.m_program[numMrt-1].idx]; GL_CHECK(glUseProgram(program.m_id) ); + program.bindAttributesBegin(); program.bindAttributes(vertexDecl, 0); + program.bindAttributesEnd(); float mrtClear[BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS][4]; @@ -3372,7 +3428,7 @@ namespace bgfx { namespace gl for (uint32_t ii = 0; ii < numMrt; ++ii) { uint8_t index = (uint8_t)bx::uint32_min(BGFX_CONFIG_MAX_COLOR_PALETTE-1, _clear.m_index[ii]); - memcpy(mrtClear[ii], _palette[index], 16); + bx::memCopy(mrtClear[ii], _palette[index], 16); } } else @@ -3387,7 +3443,7 @@ namespace bgfx { namespace gl for (uint32_t ii = 0; ii < numMrt; ++ii) { - memcpy(mrtClear[ii], rgba, 16); + bx::memCopy(mrtClear[ii], rgba, 16); } } @@ -3457,12 +3513,15 @@ namespace bgfx { namespace gl GLuint m_msaaBackBufferFbo; GLuint m_msaaBackBufferRbos[2]; GlContext m_glctx; + bool m_needPresent; const char* m_vendor; const char* m_renderer; const char* m_version; const char* m_glslVersion; + GLuint m_currentFbo; + VR m_ovr; #if BGFX_CONFIG_USE_OVR VRImplOVRGL m_ovrRender; @@ -3485,12 +3544,27 @@ namespace bgfx { namespace gl s_renderGL = NULL; } + static void frameBufferValidate() + { + GLenum complete = glCheckFramebufferStatus(GL_FRAMEBUFFER); + BX_CHECK(GL_FRAMEBUFFER_COMPLETE == complete + , "glCheckFramebufferStatus failed 0x%08x: %s" + , complete + , glEnumName(complete) + ); + BX_UNUSED(complete); + } + #if BGFX_CONFIG_USE_OVR VRImplOVRGL::VRImplOVRGL() - : m_mirrorTexture(NULL) + : m_depthRbo(0) + , m_msaaTexture(0) + , m_msaaTarget(0) + , m_textureSwapChain(NULL) + , m_mirrorTexture(NULL) { - memset(&m_textureSwapChain, 0, sizeof(m_textureSwapChain) ); + bx::memSet(&m_eyeTarget, 0, sizeof(m_eyeTarget) ); } static void setDefaultSamplerState() @@ -3503,84 +3577,97 @@ namespace bgfx { namespace gl bool VRImplOVRGL::createSwapChain(const VRDesc& _desc, int _msaaSamples, int _mirrorWidth, int _mirrorHeight) { - for (int eye = 0; eye < 2; ++eye) + if (!m_session) { - if (NULL == m_textureSwapChain[eye]) - { - m_eyeFbo[eye] = 0; - m_depthBuffer[eye] = 0; - m_msaaEyeFbo[eye] = 0; - m_msaaEyeTexId[eye] = 0; - m_msaaDepthBuffer[eye] = 0; - memset(&m_eyeTexId[eye], 0, sizeof(m_eyeTexId[eye]) ); - - ovrTextureSwapChainDesc swapchainDesc = {}; - swapchainDesc.Type = ovrTexture_2D; - swapchainDesc.ArraySize = 1; - swapchainDesc.Width = _desc.m_eyeSize[eye].m_w; - swapchainDesc.Height = _desc.m_eyeSize[eye].m_h; - swapchainDesc.MipLevels = 1; - swapchainDesc.Format = OVR_FORMAT_R8G8B8A8_UNORM_SRGB; - swapchainDesc.SampleCount = 1; - swapchainDesc.StaticImage = ovrFalse; - - ovrResult result = ovr_CreateTextureSwapChainGL(m_session, &swapchainDesc, &m_textureSwapChain[eye]); - if (!OVR_SUCCESS(result) ) - { - destroySwapChain(); - return false; - } - - int textureCount = 0; - ovr_GetTextureSwapChainLength(m_session, m_textureSwapChain[eye], &textureCount); - for (int ii = 0; ii < textureCount; ++ii) - { - ovr_GetTextureSwapChainBufferGL(m_session, m_textureSwapChain[eye], ii, &m_eyeTexId[eye][ii]); - GL_CHECK(glBindTexture(GL_TEXTURE_2D, m_eyeTexId[eye][ii]) ); - setDefaultSamplerState(); - } - - GL_CHECK(glGenFramebuffers(1, &m_eyeFbo[eye]) ); - - // create depth buffer - GL_CHECK(glGenTextures(1, &m_depthBuffer[eye]) ); - GL_CHECK(glBindTexture(GL_TEXTURE_2D, m_depthBuffer[eye]) ); - setDefaultSamplerState(); - - GL_CHECK(glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, _desc.m_eyeSize[eye].m_w, _desc.m_eyeSize[eye].m_h, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, NULL) ); - - GL_CHECK(glBindFramebuffer(GL_READ_FRAMEBUFFER, m_eyeFbo[eye]) ); - GL_CHECK(glFramebufferTexture2D(GL_READ_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, m_depthBuffer[eye], 0) ); - GL_CHECK(glBindFramebuffer(GL_READ_FRAMEBUFFER, 0) ); - - // create MSAA targets if needed - if (_msaaSamples > 1) - { - GL_CHECK(glGenFramebuffers(1, &m_msaaEyeFbo[eye]) ); - - // create color MSAA texture - GL_CHECK(glGenTextures(1, &m_msaaEyeTexId[eye]) ); - GL_CHECK(glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, m_msaaEyeTexId[eye]) ); - GL_CHECK(glTexImage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, _msaaSamples, GL_RGBA, _desc.m_eyeSize[eye].m_w, _desc.m_eyeSize[eye].m_h, false) ); - setDefaultSamplerState(); - - // create MSAA depth buffer - GL_CHECK(glGenTextures(1, &m_msaaDepthBuffer[eye]) ); - GL_CHECK(glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, m_depthBuffer[eye]) ); - GL_CHECK(glTexImage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, _msaaSamples, GL_DEPTH_COMPONENT, _desc.m_eyeSize[eye].m_w, _desc.m_eyeSize[eye].m_h, false) ); - setDefaultSamplerState(); - - GL_CHECK(glBindFramebuffer(GL_READ_FRAMEBUFFER, m_msaaEyeFbo[eye]) ); - GL_CHECK(glFramebufferTexture2D(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D_MULTISAMPLE, m_msaaEyeTexId[eye], 0) ); - GL_CHECK(glFramebufferRenderbuffer(GL_READ_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, 0) ); - GL_CHECK(glBindFramebuffer(GL_READ_FRAMEBUFFER, 0) ); - } - - m_renderLayer.ColorTexture[eye] = m_textureSwapChain[eye]; - } + return false; } - m_renderLayer.Header.Flags |= ovrLayerFlag_TextureOriginAtBottomLeft; + if (NULL == m_textureSwapChain) + { + const GLsizei width = _desc.m_eyeSize[0].m_w + _desc.m_eyeSize[1].m_w; + const GLsizei height = bx::uint16_max(_desc.m_eyeSize[0].m_h, _desc.m_eyeSize[1].m_h); + + ovrTextureSwapChainDesc swapchainDesc = {}; + swapchainDesc.Type = ovrTexture_2D; + swapchainDesc.Width = width; + swapchainDesc.Height = height; + swapchainDesc.MipLevels = 1; + swapchainDesc.ArraySize = 1; + swapchainDesc.Format = OVR_FORMAT_R8G8B8A8_UNORM_SRGB; + swapchainDesc.SampleCount = 1; + swapchainDesc.StaticImage = ovrFalse; + + ovrResult result = ovr_CreateTextureSwapChainGL(m_session, &swapchainDesc, &m_textureSwapChain); + if (!OVR_SUCCESS(result) ) + { + destroySwapChain(); + return false; + } + + m_renderLayer.Header.Flags |= ovrLayerFlag_TextureOriginAtBottomLeft; + for (int eye = 0; eye < 2; ++eye) + { + m_renderLayer.ColorTexture[eye] = m_textureSwapChain; + } + + // create depth buffer + GL_CHECK(glGenRenderbuffers(1, &m_depthRbo)); + GL_CHECK(glBindRenderbuffer(GL_RENDERBUFFER, m_depthRbo)); + if (_msaaSamples > 1) + { + GL_CHECK(glRenderbufferStorageMultisample(GL_RENDERBUFFER, _msaaSamples, GL_DEPTH_COMPONENT32F, width, height)); + } + else + { + GL_CHECK(glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT32F, width, height)); + } + GL_CHECK(glBindRenderbuffer(GL_RENDERBUFFER, 0)); + + int count; + result = ovr_GetTextureSwapChainLength(m_session, m_textureSwapChain, &count); + if (!OVR_SUCCESS(result) ) + { + destroySwapChain(); + return false; + } + + BX_CHECK(count <= BX_COUNTOF(m_eyeTarget), "Too many OVR swap chain textures. %d", count); + for (int ii = 0; ii < count; ++ii) + { + GLuint texture; + ovr_GetTextureSwapChainBufferGL(m_session, m_textureSwapChain, ii, &texture); + + // create eye target + GL_CHECK(glGenFramebuffers(1, &m_eyeTarget[ii]) ); + GL_CHECK(glBindFramebuffer(GL_FRAMEBUFFER, m_eyeTarget[ii]) ); + GL_CHECK(glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0) ); + if (2 > _msaaSamples && 0 != m_depthRbo) + { + GL_CHECK(glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, m_depthRbo) ); + } + frameBufferValidate(); + GL_CHECK(glBindFramebuffer(GL_FRAMEBUFFER, 0) ); + } + + // create MSAA target + if (1 < _msaaSamples) + { + GL_CHECK(glGenTextures(1, &m_msaaTexture) ); + GL_CHECK(glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, m_msaaTexture) ); + GL_CHECK(glTexImage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, _msaaSamples, GL_RGBA, width, height, GL_TRUE) ); + setDefaultSamplerState(); + + GL_CHECK(glGenFramebuffers(1, &m_msaaTarget) ); + GL_CHECK(glBindFramebuffer(GL_FRAMEBUFFER, m_msaaTarget) ); + GL_CHECK(glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D_MULTISAMPLE, m_msaaTexture, 0) ); + if (0 != m_depthRbo) + { + GL_CHECK(glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, m_depthRbo) ); + } + frameBufferValidate(); + GL_CHECK(glBindFramebuffer(GL_FRAMEBUFFER, 0) ); + } + } if (NULL == m_mirrorTexture) { @@ -3602,18 +3689,11 @@ namespace bgfx { namespace gl GLuint texId; ovr_GetMirrorTextureBufferGL(m_session, m_mirrorTexture, &texId); GL_CHECK(glGenFramebuffers(1, &m_mirrorFbo) ); - GL_CHECK(glBindFramebuffer(GL_READ_FRAMEBUFFER, m_mirrorFbo) ); - GL_CHECK(glFramebufferTexture2D(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texId, 0) ); - GL_CHECK(glFramebufferRenderbuffer(GL_READ_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, 0) ); - GL_CHECK(glBindFramebuffer(GL_READ_FRAMEBUFFER, 0) ); - - if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) - { - GL_CHECK(glDeleteFramebuffers(1, &m_mirrorFbo) ); - ovr_DestroyMirrorTexture(m_session, m_mirrorTexture); - m_mirrorTexture = NULL; - BX_CHECK(false, "Could not initialize VR mirror buffers!"); - } + GL_CHECK(glBindFramebuffer(GL_FRAMEBUFFER, m_mirrorFbo) ); + GL_CHECK(glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texId, 0) ); + GL_CHECK(glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, 0) ); + frameBufferValidate(); + GL_CHECK(glBindFramebuffer(GL_FRAMEBUFFER, 0) ); } } @@ -3622,27 +3702,40 @@ namespace bgfx { namespace gl void VRImplOVRGL::destroySwapChain() { - for (int eye = 0; eye < 2; ++eye) + destroyMirror(); + + if (0 != m_msaaTarget) { - if (NULL != m_textureSwapChain[eye]) + GL_CHECK(glDeleteFramebuffers(1, &m_msaaTarget) ); + m_msaaTarget = 0; + } + + if (0 != m_msaaTexture) + { + GL_CHECK(glDeleteTextures(1, &m_msaaTexture) ); + m_msaaTexture = 0; + } + + if (0 != m_depthRbo) + { + GL_CHECK(glDeleteRenderbuffers(1, &m_depthRbo) ); + m_depthRbo = 0; + } + + for (int ii = 0, nn = BX_COUNTOF(m_eyeTarget); ii < nn; ++ii) + { + if (0 != m_eyeTarget[ii]) { - GL_CHECK(glDeleteFramebuffers(1, &m_eyeFbo[eye]) ); - GL_CHECK(glDeleteTextures(1, &m_depthBuffer[eye]) ); - - ovr_DestroyTextureSwapChain(m_session, m_textureSwapChain[eye]); - m_textureSwapChain[eye] = NULL; - - if (0 != m_msaaEyeFbo[eye]) - { - GL_CHECK(glDeleteFramebuffers(1, &m_msaaEyeFbo[eye]) ); - GL_CHECK(glDeleteTextures(1, &m_msaaEyeTexId[eye]) ); - GL_CHECK(glDeleteTextures(1, &m_msaaDepthBuffer[eye]) ); - m_msaaEyeFbo[eye] = 0; - } + GL_CHECK(glDeleteFramebuffers(1, &m_eyeTarget[ii]) ); + m_eyeTarget[ii] = 0; } } - destroyMirror(); + if (NULL != m_textureSwapChain) + { + ovr_DestroyTextureSwapChain(m_session, m_textureSwapChain); + m_textureSwapChain = NULL; + } } void VRImplOVRGL::destroyMirror() @@ -3655,59 +3748,47 @@ namespace bgfx { namespace gl } } - void VRImplOVRGL::renderEyeStart(const VRDesc& _desc, uint8_t _eye) + void VRImplOVRGL::makeRenderTargetActive(const VRDesc& /*_desc*/) { - // set the current eye texture in the swap chain - if (0 != m_msaaEyeFbo[_eye]) + if (0 != m_msaaTarget) { - GL_CHECK(glBindFramebuffer(GL_FRAMEBUFFER, m_msaaEyeFbo[_eye]) ); + s_renderGL->m_currentFbo = m_msaaTarget; } else { - int texIndex; - ovr_GetTextureSwapChainCurrentIndex(m_session, m_textureSwapChain[_eye], &texIndex); - - GL_CHECK(glBindFramebuffer(GL_FRAMEBUFFER, m_eyeFbo[_eye]) ); - GL_CHECK(glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_eyeTexId[_eye][texIndex], 0) ); + int index; + ovr_GetTextureSwapChainCurrentIndex(m_session, m_textureSwapChain, &index); + s_renderGL->m_currentFbo = m_eyeTarget[index]; } } bool VRImplOVRGL::submitSwapChain(const VRDesc& _desc) { - for (int eye = 0; eye < 2; ++eye) + BX_CHECK(NULL != m_textureSwapChain, "VRImplOVRGL submitted without a valid swap chain"); + + if (0 != m_msaaTarget) { - if (0 != m_msaaEyeFbo[eye]) - { - // blit the contents of MSAA FBO to the regulare eye buffer "connected" to the HMD - int destIndex; - ovr_GetTextureSwapChainCurrentIndex(m_session, m_textureSwapChain[eye], &destIndex); + const uint32_t width = _desc.m_eyeSize[0].m_w+_desc.m_eyeSize[1].m_w; + const uint32_t height = _desc.m_eyeSize[0].m_h; - GL_CHECK(glBindFramebuffer(GL_READ_FRAMEBUFFER, m_msaaEyeFbo[eye]) ); - BX_CHECK(GL_FRAMEBUFFER_COMPLETE == glCheckFramebufferStatus(GL_READ_FRAMEBUFFER) - , "glCheckFramebufferStatus failed 0x%08x" - , glCheckFramebufferStatus(GL_READ_FRAMEBUFFER) - ); + int index; + ovr_GetTextureSwapChainCurrentIndex(m_session, m_textureSwapChain, &index); - GL_CHECK(glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_eyeFbo[eye]) ); - GL_CHECK(glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_eyeTexId[eye][destIndex], 0) ); - BX_CHECK(GL_FRAMEBUFFER_COMPLETE == glCheckFramebufferStatus(GL_DRAW_FRAMEBUFFER) - , "glCheckFramebufferStatus failed 0x%08x" - , glCheckFramebufferStatus(GL_DRAW_FRAMEBUFFER) - ); + // resolve MSAA + GL_CHECK(glBindFramebuffer(GL_READ_FRAMEBUFFER, m_msaaTarget) ); + GL_CHECK(glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_eyeTarget[index]) ); + GL_CHECK(glBlitFramebuffer(0, 0, width, height, 0, 0, width, height, GL_COLOR_BUFFER_BIT, GL_NEAREST) ); + GL_CHECK(glBindFramebuffer(GL_READ_FRAMEBUFFER, 0) ); + } - GL_CHECK(glBlitFramebuffer(0, 0, _desc.m_eyeSize[eye].m_w, _desc.m_eyeSize[eye].m_h, 0, 0, _desc.m_eyeSize[eye].m_w, _desc.m_eyeSize[eye].m_h, GL_COLOR_BUFFER_BIT, GL_NEAREST) ); - GL_CHECK(glBindFramebuffer(GL_READ_FRAMEBUFFER, 0) ); - } - - ovrResult result = ovr_CommitTextureSwapChain(m_session, m_textureSwapChain[eye]); - if (!OVR_SUCCESS(result) ) - { - return false; - } + ovrResult result = ovr_CommitTextureSwapChain(m_session, m_textureSwapChain); + if (!OVR_SUCCESS(result) ) + { + return false; } ovrLayerHeader* layerList = &m_renderLayer.Header; - ovrResult result = ovr_SubmitFrame(m_session, 0, &m_viewScale, &layerList, 1); + result = ovr_SubmitFrame(m_session, 0, &m_viewScale, &layerList, 1); if (!OVR_SUCCESS(result) ) { return false; @@ -3927,7 +4008,7 @@ namespace bgfx { namespace gl { BX_WARN(0 != _vsh.m_id, "Invalid vertex/compute shader."); GL_CHECK(glDeleteProgram(m_id) ); - m_used[0] = Attrib::Count; + m_usedCount = 0; m_id = 0; return; } @@ -4052,7 +4133,7 @@ namespace bgfx { namespace gl GLint num; }; VariableInfo vi; - GLenum props[] ={ GL_TYPE, GL_LOCATION, GL_ARRAY_SIZE }; + GLenum props[] = { GL_TYPE, GL_LOCATION, GL_ARRAY_SIZE }; GLenum gltype; GLint num; @@ -4091,13 +4172,13 @@ namespace bgfx { namespace gl num = bx::uint32_max(num, 1); int offset = 0; - char* array = strchr(name, '['); + char* array = const_cast(bx::strnchr(name, '[') ); if (NULL != array) { BX_TRACE("--- %s", name); *array = '\0'; array++; - char* end = strchr(array, ']'); + char* end = const_cast(bx::strnchr(array, ']') ); if (NULL != end) { // Some devices (Amazon Fire) might not return terminating brace. *end = '\0'; @@ -4245,7 +4326,7 @@ namespace bgfx { namespace gl } } - memset(m_attributes, 0xff, sizeof(m_attributes) ); + bx::memSet(m_attributes, 0xff, sizeof(m_attributes) ); uint32_t used = 0; for (uint8_t ii = 0; ii < Attrib::Count; ++ii) { @@ -4257,11 +4338,8 @@ namespace bgfx { namespace gl m_used[used++] = ii; } } - BX_CHECK(used < BX_COUNTOF(m_used), "Out of bounds %d > array size %d." - , used - , BX_COUNTOF(m_used) - ); - m_used[used] = Attrib::Count; + BX_CHECK(used < BX_COUNTOF(m_used), "Out of bounds %d > array size %d.", used, Attrib::Count); + m_usedCount = (uint8_t)used; used = 0; for (uint32_t ii = 0; ii < BX_COUNTOF(s_instanceDataName); ++ii) @@ -4280,9 +4358,9 @@ namespace bgfx { namespace gl m_instanceData[used] = 0xffff; } - void ProgramGL::bindAttributes(const VertexDecl& _vertexDecl, uint32_t _baseVertex) const + void ProgramGL::bindAttributes(const VertexDecl& _vertexDecl, uint32_t _baseVertex) { - for (uint32_t ii = 0; Attrib::Count != m_used[ii]; ++ii) + for (uint32_t ii = 0, iiEnd = m_usedCount; ii < iiEnd; ++ii) { Attrib::Enum attr = Attrib::Enum(m_used[ii]); GLint loc = m_attributes[attr]; @@ -4322,10 +4400,8 @@ namespace bgfx { namespace gl , (void*)(uintptr_t)baseVertex) ); } - } - else - { - GL_CHECK(glDisableVertexAttribArray(loc) ); + + m_unboundUsedAttrib[ii] = Attrib::Count; } } } @@ -4614,6 +4690,7 @@ namespace bgfx { namespace gl GL_CHECK(glGenTextures(1, &m_id) ); BX_CHECK(0 != m_id, "Failed to generate texture id."); GL_CHECK(glBindTexture(_target, m_id) ); + GL_CHECK(glPixelStorei(GL_UNPACK_ALIGNMENT, 1) ); const TextureFormatInfo& tfi = s_textureFormat[m_textureFormat]; m_fmt = tfi.m_fmt; @@ -5033,7 +5110,7 @@ namespace bgfx { namespace gl if (!unpackRowLength) { - imageCopy(width, height, bpp, srcpitch, data, temp); + imageCopy(temp, width, height, bpp, srcpitch, data); data = temp; } @@ -5064,7 +5141,7 @@ namespace bgfx { namespace gl if (!unpackRowLength && !convert) { - imageCopy(width, height, bpp, srcpitch, data, temp); + imageCopy(temp, width, height, bpp, srcpitch, data); data = temp; } @@ -5241,7 +5318,7 @@ namespace bgfx { namespace gl void writeString(bx::WriterI* _writer, const char* _str) { - bx::write(_writer, _str, (int32_t)strlen(_str) ); + bx::write(_writer, _str, (int32_t)bx::strnlen(_str) ); } void writeStringf(bx::WriterI* _writer, const char* _format, ...) @@ -5258,9 +5335,9 @@ namespace bgfx { namespace gl void strins(char* _str, const char* _insert) { - size_t len = strlen(_insert); - memmove(&_str[len], _str, strlen(_str)+1); - memcpy(_str, _insert, len); + size_t len = bx::strnlen(_insert); + bx::memMove(&_str[len], _str, bx::strnlen(_str)+1); + bx::memCopy(_str, _insert, len); } void ShaderGL::create(Memory* _mem) @@ -5329,7 +5406,7 @@ namespace bgfx { namespace gl { if (GL_COMPUTE_SHADER != m_type) { - int32_t codeLen = (int32_t)strlen(code); + int32_t codeLen = (int32_t)bx::strnlen(code); int32_t tempLen = codeLen + (4<<10); char* temp = (char*)alloca(tempLen); bx::StaticMemoryBlockWriter writer(temp, tempLen); @@ -5428,15 +5505,20 @@ namespace bgfx { namespace gl if (usesTextureLod) { - BX_WARN(s_extension[Extension::EXT_shader_texture_lod].m_supported, "EXT_shader_texture_lod is used but not supported by GLES2 driver."); - if (s_extension[Extension::EXT_shader_texture_lod].m_supported - /*&& GL_VERTEX_SHADER == m_type*/) + BX_WARN(s_extension[Extension::ARB_shader_texture_lod].m_supported + , "ARB_shader_texture_lod is used but not supported by GLES2 driver." + ); + + if (s_extension[Extension::ARB_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" + , "#extension GL_ARB_shader_texture_lod : enable\n" + "#define texture2DLod texture2DLodARB\n" + "#define texture2DProjLod texture2DProjLodARB\n" + "#define textureCubeLod textureCubeLodARB\n" + "#define texture2DGrad texture2DGradARB\n" + "#define texture2DProjGrad texture2DProjGradARB\n" + "#define textureCubeGrad textureCubeGradARB\n" ); } else @@ -5470,10 +5552,10 @@ namespace bgfx { namespace gl if (insertFragDepth) { - char* entry = strstr(temp, "void main ()"); + const char* entry = bx::strnstr(temp, "void main ()"); if (NULL != entry) { - char* brace = strstr(entry, "{"); + char* brace = const_cast(bx::strnstr(entry, "{") ); if (NULL != brace) { const char* end = bx::strmb(brace, '{', '}'); @@ -5490,7 +5572,7 @@ namespace bgfx { namespace gl { char* insert = const_cast(fragDepth); strins(insert, "bg"); - memcpy(insert + 2, "fx", 2); + bx::memCopy(insert + 2, "fx", 2); } } else if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL) @@ -5508,7 +5590,7 @@ namespace bgfx { namespace gl const bool usesPacking = !!bx::findIdentifierMatch(code, s_ARB_shading_language_packing); uint32_t version = - usesIUsamplers || usesTexelFetch ? 130 + usesIUsamplers || usesTexelFetch || usesGpuShader5 ? 130 : usesTextureLod ? 120 : 120 ; @@ -5522,7 +5604,12 @@ namespace bgfx { namespace gl { if (m_type == GL_FRAGMENT_SHADER) { - writeString(&writer, "#extension GL_ARB_shader_texture_lod : enable\n"); + writeString(&writer + , "#extension GL_ARB_shader_texture_lod : enable\n" + "#define texture2DGrad texture2DGradARB\n" + "#define texture2DProjGrad texture2DProjGradARB\n" + "#define textureCubeGrad textureCubeGradARB\n" + ); } } @@ -5566,7 +5653,7 @@ namespace bgfx { namespace gl { char tmpFragData[16]; bx::snprintf(tmpFragData, BX_COUNTOF(tmpFragData), "gl_FragData[%d]", ii); - fragData = bx::uint32_max(fragData, NULL == strstr(code, tmpFragData) ? 0 : ii+1); + fragData = bx::uint32_max(fragData, NULL == bx::strnstr(code, tmpFragData) ? 0 : ii+1); } BGFX_FATAL(0 != fragData, Fatal::InvalidShader, "Unable to find and patch gl_FragData!"); @@ -5624,9 +5711,12 @@ namespace bgfx { namespace gl writeString(&writer, "#version 140\n"); } - writeString(&writer, "#define texture2DLod textureLod\n"); - writeString(&writer, "#define texture3DLod textureLod\n"); - writeString(&writer, "#define textureCubeLod textureLod\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"); if (m_type == GL_FRAGMENT_SHADER) { @@ -5656,7 +5746,7 @@ namespace bgfx { namespace gl { char tmpFragData[16]; bx::snprintf(tmpFragData, BX_COUNTOF(tmpFragData), "gl_FragData[%d]", ii); - fragData = bx::uint32_max(fragData, NULL == strstr(code, tmpFragData) ? 0 : ii+1); + fragData = bx::uint32_max(fragData, NULL == bx::strnstr(code, tmpFragData) ? 0 : ii+1); } BGFX_FATAL(0 != fragData, Fatal::InvalidShader, "Unable to find and patch gl_FragData!"); @@ -5755,23 +5845,13 @@ namespace bgfx { namespace gl } } - static void frameBufferValidate() - { - GLenum complete = glCheckFramebufferStatus(GL_FRAMEBUFFER); - BX_CHECK(GL_FRAMEBUFFER_COMPLETE == complete - , "glCheckFramebufferStatus failed 0x%08x: %s" - , complete - , glEnumName(complete) - ); - BX_UNUSED(complete); - } - void FrameBufferGL::create(uint8_t _num, const Attachment* _attachment) { GL_CHECK(glGenFramebuffers(1, &m_fbo[0]) ); + m_denseIdx = UINT16_MAX; m_numTh = _num; - memcpy(m_attachment, _attachment, _num*sizeof(Attachment) ); + bx::memCopy(m_attachment, _attachment, _num*sizeof(Attachment) ); m_needPresent = false; @@ -5945,7 +6025,7 @@ namespace bgfx { namespace gl m_swapChain = NULL; } - memset(m_fbo, 0, sizeof(m_fbo) ); + bx::memSet(m_fbo, 0, sizeof(m_fbo) ); uint16_t denseIdx = m_denseIdx; m_denseIdx = UINT16_MAX; m_needPresent = false; @@ -6069,24 +6149,43 @@ namespace bgfx { namespace gl while (0 != m_control.available() ) { Query& query = m_query[m_control.m_read]; - int32_t result; - if (!_wait) + if (isValid(query.m_handle) ) { - GL_CHECK(glGetQueryObjectiv(query.m_id, GL_QUERY_RESULT_AVAILABLE, &result) ); + int32_t result; - if (!result) + if (!_wait) { - break; + GL_CHECK(glGetQueryObjectiv(query.m_id, GL_QUERY_RESULT_AVAILABLE, &result) ); + + if (!result) + { + break; + } } + + GL_CHECK(glGetQueryObjectiv(query.m_id, GL_QUERY_RESULT, &result) ); + _render->m_occlusion[query.m_handle.idx] = int32_t(result); } - GL_CHECK(glGetQueryObjectiv(query.m_id, GL_QUERY_RESULT, &result) ); - _render->m_occlusion[query.m_handle.idx] = 0 < result; m_control.consume(1); } } + void OcclusionQueryGL::invalidate(OcclusionQueryHandle _handle) + { + const uint32_t size = m_control.m_size; + + for (uint32_t ii = 0, num = m_control.available(); ii < num; ++ii) + { + Query& query = m_query[(m_control.m_read + ii) % size]; + if (query.m_handle.idx == _handle.idx) + { + query.m_handle.idx = bgfx::invalidHandle; + } + } + } + void RendererContextGL::submit(Frame* _render, ClearQuad& _clearQuad, TextVideoMemBlitter& _textVideoMemBlitter) { BGFX_GPU_PROFILER_BEGIN_DYNAMIC("rendererSubmit"); @@ -6180,7 +6279,6 @@ namespace bgfx { namespace gl : GL_FILL ) ); - uint32_t baseVertex = 0; GLuint currentVao = 0; bool wasCompute = false; bool viewHasScissor = false; @@ -6217,7 +6315,8 @@ namespace bgfx { namespace gl int32_t numItems = _render->m_num; for (int32_t item = 0, restartItem = numItems; item < numItems || restartItem < numItems;) { - const bool isCompute = key.decode(_render->m_sortKeys[item], _render->m_viewRemap); + const uint64_t encodedKey = _render->m_sortKeys[item]; + const bool isCompute = key.decode(encodedKey, _render->m_viewRemap); statsKeyType[isCompute]++; const bool viewChanged = 0 @@ -6291,7 +6390,7 @@ namespace bgfx { namespace gl if (m_ovr.isEnabled() ) { - m_ovr.renderEyeStart(eye, &viewState.m_rect); + m_ovr.getViewport(eye, &viewState.m_rect); } else { @@ -6337,7 +6436,8 @@ namespace bgfx { namespace gl if (m_blitSupported) { - for (; blitItem < numBlitItems && blitKey.m_view <= view; blitItem++) + 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]); @@ -6556,7 +6656,12 @@ namespace bgfx { namespace gl else { Rect scissorRect; - scissorRect.intersect(viewScissorRect, _render->m_rectCache.m_cache[scissor]); + scissorRect.setIntersect(viewScissorRect, _render->m_rectCache.m_cache[scissor]); + if (scissorRect.isZeroArea() ) + { + continue; + } + GL_CHECK(glEnable(GL_SCISSOR_TEST) ); GL_CHECK(glScissor(scissorRect.m_x , resolutionHeight-scissorRect.m_height-scissorRect.m_y @@ -6901,27 +7006,63 @@ namespace bgfx { namespace gl && 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 - || baseVertex != draw.m_stream[0].m_startVertex || currentState.m_streamMask != draw.m_streamMask - || currentState.m_stream[0].m_handle.idx != draw.m_stream[0].m_handle.idx || 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) + || currentState.m_instanceDataBuffer.idx != draw.m_instanceDataBuffer.idx + || diffStartVertex + || diffStreamHandles) { bx::HashMurmur2A murmur; murmur.begin(); - const Stream& stream = draw.m_stream[0]; - murmur.add(stream.m_handle.idx); - - if (isValid(stream.m_handle) ) + 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) + ) { - 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); + 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); @@ -6930,11 +7071,7 @@ namespace bgfx { namespace gl murmur.add(programIdx); uint32_t hash = murmur.end(); - currentState.m_streamMask = draw.m_streamMask; - currentState.m_stream[0].m_handle = stream.m_handle; - baseVertex = stream.m_startVertex; - - currentState.m_indexBuffer = draw.m_indexBuffer; + currentState.m_indexBuffer = draw.m_indexBuffer; currentState.m_instanceDataOffset = draw.m_instanceDataOffset; currentState.m_instanceDataStride = draw.m_instanceDataStride; @@ -6952,14 +7089,26 @@ namespace bgfx { namespace gl program.add(hash); - if (isValid(stream.m_handle) ) + 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) + ) { - VertexBufferGL& vb = m_vertexBuffers[stream.m_handle.idx]; - vb.add(hash); - GL_CHECK(glBindBuffer(GL_ARRAY_BUFFER, vb.m_id) ); + streamMask >>= ntz; + idx += ntz; - uint16_t decl = !isValid(vb.m_decl) ? stream.m_decl.idx : vb.m_decl.idx; - program.bindAttributes(m_vertexDecls[decl], stream.m_startVertex); + 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) ) { @@ -6969,10 +7118,7 @@ namespace bgfx { namespace gl program.bindInstanceData(draw.m_instanceDataStride, draw.m_instanceDataOffset); } } - else - { - GL_CHECK(glBindBuffer(GL_ARRAY_BUFFER, 0) ); - } + program.bindAttributesEnd(); if (isValid(draw.m_indexBuffer) ) { @@ -6993,37 +7139,56 @@ namespace bgfx { namespace gl && 0 != currentVao) { GL_CHECK(glBindVertexArray(defaultVao) ); - currentState.m_streamMask = 0; - currentState.m_stream[0].m_handle.idx = invalidHandle; - currentState.m_indexBuffer.idx = invalidHandle; + 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 + ; 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 (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) + || currentState.m_instanceDataStride != draw.m_instanceDataStride + || diffStreamHandles) { currentState.m_streamMask = draw.m_streamMask; - 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) + 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) + ) { - VertexBufferGL& vb = m_vertexBuffers[handle]; - GL_CHECK(glBindBuffer(GL_ARRAY_BUFFER, vb.m_id) ); - bindAttribs = true; - } - else - { - GL_CHECK(glBindBuffer(GL_ARRAY_BUFFER, 0) ); + streamMask >>= ntz; + idx += ntz; + + currentState.m_stream[idx].m_handle = draw.m_stream[idx].m_handle; } + + bindAttribs = true; } if (currentState.m_indexBuffer.idx != draw.m_indexBuffer.idx) @@ -7044,13 +7209,41 @@ namespace bgfx { namespace gl if (0 != currentState.m_streamMask) { - if (baseVertex != draw.m_stream[0].m_startVertex - || bindAttribs) + bool diffStartVertex = 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) + ) { - baseVertex = draw.m_stream[0].m_startVertex; - const VertexBufferGL& vb = m_vertexBuffers[draw.m_stream[0].m_handle.idx]; - uint16_t decl = !isValid(vb.m_decl) ? draw.m_stream[0].m_decl.idx : vb.m_decl.idx; - program.bindAttributes(m_vertexDecls[decl], draw.m_stream[0].m_startVertex); + streamMask >>= ntz; + idx += ntz; + + if (currentState.m_stream[idx].m_startVertex != draw.m_stream[idx].m_startVertex) + { + diffStartVertex = true; + break; + } + } + + if (bindAttribs || diffStartVertex) + { + 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; + + currentState.m_stream[idx].m_startVertex = draw.m_stream[idx].m_startVertex; + + const VertexBufferGL& vb = m_vertexBuffers[draw.m_stream[idx].m_handle.idx]; + uint16_t decl = !isValid(vb.m_decl) ? draw.m_stream[idx].m_decl.idx : vb.m_decl.idx; + GL_CHECK(glBindBuffer(GL_ARRAY_BUFFER, vb.m_id) ); + program.bindAttributes(m_vertexDecls[decl], draw.m_stream[idx].m_startVertex); + } + program.bindAttributesEnd(); if (isValid(draw.m_instanceDataBuffer) ) { @@ -7066,10 +7259,20 @@ namespace bgfx { namespace gl uint32_t numVertices = draw.m_numVertices; if (UINT32_MAX == numVertices) { - const VertexBufferGL& 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; + 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 VertexBufferGL& vb = m_vertexBuffers[draw.m_stream[idx].m_handle.idx]; + uint16_t decl = !isValid(vb.m_decl) ? draw.m_stream[idx].m_decl.idx : vb.m_decl.idx; + const VertexDecl& vertexDecl = m_vertexDecls[decl]; + + numVertices = bx::uint32_min(numVertices, vb.m_size/vertexDecl.m_stride); + } } uint32_t numIndices = 0; @@ -7265,14 +7468,18 @@ namespace bgfx { namespace gl const int64_t timerFreq = bx::getHPFrequency(); - perfStats.cpuTimeEnd = now; - perfStats.cpuTimerFreq = timerFreq; - perfStats.gpuTimeBegin = m_gpuTimer.m_begin; - perfStats.gpuTimeEnd = m_gpuTimer.m_end; - perfStats.gpuTimerFreq = 1000000000; + perfStats.cpuTimeEnd = now; + perfStats.cpuTimerFreq = timerFreq; + perfStats.gpuTimeBegin = m_gpuTimer.m_begin; + perfStats.gpuTimeEnd = m_gpuTimer.m_end; + perfStats.gpuTimerFreq = 1000000000; + perfStats.numDraw = statsKeyType[0]; + perfStats.numCompute = statsKeyType[1]; + perfStats.maxGpuLatency = maxGpuLatency; if (_render->m_debug & (BGFX_DEBUG_IFH|BGFX_DEBUG_STATS) ) { + m_needPresent = true; TextVideoMem& tvm = m_textVideoMem; static int64_t next = now; diff --git a/3rdparty/bgfx/src/renderer_gl.h b/3rdparty/bgfx/src/renderer_gl.h index b95e285..4d9778a 100644 --- a/3rdparty/bgfx/src/renderer_gl.h +++ b/3rdparty/bgfx/src/renderer_gl.h @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -1310,7 +1310,7 @@ namespace bgfx { namespace gl , m_num(0) , m_needPresent(false) { - memset(m_fbo, 0, sizeof(m_fbo) ); + bx::memSet(m_fbo, 0, sizeof(m_fbo) ); } void create(uint8_t _num, const Attachment* _attachment); @@ -1343,9 +1343,28 @@ namespace bgfx { namespace gl void create(const ShaderGL& _vsh, const ShaderGL& _fsh); void destroy(); void init(); - void bindAttributes(const VertexDecl& _vertexDecl, uint32_t _baseVertex = 0) const; void bindInstanceData(uint32_t _stride, uint32_t _baseVertex = 0) const; + void bindAttributesBegin() + { + bx::memCopy(m_unboundUsedAttrib, m_used, sizeof(m_unboundUsedAttrib) ); + } + + void bindAttributes(const VertexDecl& _vertexDecl, uint32_t _baseVertex = 0); + + void bindAttributesEnd() + { + for (uint32_t ii = 0, iiEnd = m_usedCount; ii < iiEnd; ++ii) + { + if (Attrib::Count != m_unboundUsedAttrib[ii]) + { + Attrib::Enum attr = Attrib::Enum(m_unboundUsedAttrib[ii]); + GLint loc = m_attributes[attr]; + GL_CHECK(glDisableVertexAttribArray(loc) ); + } + } + } + void add(uint32_t _hash) { m_vcref.add(_hash); @@ -1353,8 +1372,10 @@ namespace bgfx { namespace gl GLuint m_id; - uint8_t m_used[Attrib::Count+1]; // dense - GLint m_attributes[Attrib::Count]; // sparse + uint8_t m_unboundUsedAttrib[Attrib::Count]; // For tracking unbound used attributes between begin()/end(). + uint8_t m_usedCount; + uint8_t m_used[Attrib::Count]; // Dense. + GLint m_attributes[Attrib::Count]; // Sparse. GLint m_instanceData[BGFX_CONFIG_MAX_INSTANCE_DATA_COUNT+1]; GLint m_sampler[BGFX_CONFIG_MAX_TEXTURE_SAMPLERS]; @@ -1484,6 +1505,7 @@ namespace bgfx { namespace gl void begin(Frame* _render, OcclusionQueryHandle _handle); void end(); void resolve(Frame* _render, bool _wait = false); + void invalidate(OcclusionQueryHandle _handle); struct Query { @@ -1491,7 +1513,7 @@ namespace bgfx { namespace gl OcclusionQueryHandle m_handle; }; - Query m_query[BGFX_CONFIG_MAX_OCCUSION_QUERIES]; + Query m_query[BGFX_CONFIG_MAX_OCCLUSION_QUERIES]; bx::RingBufferControl m_control; }; diff --git a/3rdparty/bgfx/src/renderer_gnm.cpp b/3rdparty/bgfx/src/renderer_gnm.cpp index 66e7fd3..5d7b107 100644 --- a/3rdparty/bgfx/src/renderer_gnm.cpp +++ b/3rdparty/bgfx/src/renderer_gnm.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ diff --git a/3rdparty/bgfx/src/renderer_mtl.h b/3rdparty/bgfx/src/renderer_mtl.h index 7936d1b..86893f7 100644 --- a/3rdparty/bgfx/src/renderer_mtl.h +++ b/3rdparty/bgfx/src/renderer_mtl.h @@ -768,6 +768,13 @@ namespace bgfx { namespace mtl struct TextureMtl { + enum Enum + { + Texture2D, + Texture3D, + TextureCube, + }; + TextureMtl() : m_ptr(NULL) , m_ptrMSAA(NULL) @@ -795,11 +802,12 @@ namespace bgfx { namespace mtl Texture m_ptrStencil; // for emulating packed depth/stencil formats - only for iOS8... SamplerState m_sampler; uint32_t m_flags; - uint8_t m_requestedFormat; - uint8_t m_textureFormat; uint32_t m_width; uint32_t m_height; uint32_t m_depth; + uint8_t m_type; + uint8_t m_requestedFormat; + uint8_t m_textureFormat; uint8_t m_numMips; }; @@ -830,6 +838,31 @@ namespace bgfx { namespace mtl uint8_t m_num; // number of color handles }; + struct CommandQueueMtl + { + CommandQueueMtl() : m_releaseWriteIndex(0), m_releaseReadIndex(0) + { + } + + void init(Device _device); + void shutdown(); + CommandBuffer alloc(); + void kick(bool _endFrame, bool _waitForFinish = false); + void finish(bool _finishAll = false); + void release(NSObject* _ptr); + void consume(); + + bx::Semaphore m_framesSemaphore; + + CommandQueue m_commandQueue; + CommandBuffer m_activeCommandBuffer; + + int m_releaseWriteIndex; + int m_releaseReadIndex; + typedef stl::vector ResourceArray; + ResourceArray m_release[MTL_MAX_FRAMES_IN_FLIGHT]; + }; + struct TimerQueryMtl { TimerQueryMtl() @@ -863,6 +896,7 @@ namespace bgfx { namespace mtl void begin(RenderCommandEncoder& _rce, Frame* _render, OcclusionQueryHandle _handle); void end(RenderCommandEncoder& _rce); void resolve(Frame* _render, bool _wait = false); + void invalidate(OcclusionQueryHandle _handle); struct Query { @@ -870,7 +904,7 @@ namespace bgfx { namespace mtl }; Buffer m_buffer; - Query m_query[BGFX_CONFIG_MAX_OCCUSION_QUERIES]; + Query m_query[BGFX_CONFIG_MAX_OCCLUSION_QUERIES]; bx::RingBufferControl m_control; }; diff --git a/3rdparty/bgfx/src/renderer_mtl.mm b/3rdparty/bgfx/src/renderer_mtl.mm index e69fc59..fbfcdf2 100644 --- a/3rdparty/bgfx/src/renderer_mtl.mm +++ b/3rdparty/bgfx/src/renderer_mtl.mm @@ -9,7 +9,6 @@ #include "renderer_mtl.h" #include "renderer.h" -#include "bx/bx.h" #if BX_PLATFORM_OSX # include @@ -44,7 +43,6 @@ Known issues(driver problems??): Only on this device ( no problem on iPad Air 2 with iOS9.3.1) TODOs: - - remove sync points at mesh update. clearquad: 13-stencil, 26-occlusion, 30-picking - framebufferMtl and TextureMtl resolve - FrameBufferMtl::postReset recreate framebuffer??? @@ -65,9 +63,6 @@ Known issues(driver problems??): INFO: - 15-shadowmaps-simple (example needs modification mtxCrop znew = z * 0.5 + 0.5 is not needed ) could be hacked in shader too - ASK: - BGFX_RESET_FLIP_AFTER_RENDER on low level renderers should be true? - Do I have absolutely need to send result to screen at flip or can I do it in submit? */ namespace bgfx { namespace mtl @@ -375,8 +370,8 @@ namespace bgfx { namespace mtl BX_TRACE("Init."); m_fbh.idx = invalidHandle; - memset(m_uniforms, 0, sizeof(m_uniforms) ); - memset(&m_resolution, 0, sizeof(m_resolution) ); + bx::memSet(m_uniforms, 0, sizeof(m_uniforms) ); + bx::memSet(&m_resolution, 0, sizeof(m_resolution) ); if (NULL != NSClassFromString(@"MTKView") ) { @@ -429,8 +424,8 @@ namespace bgfx { namespace mtl m_metalLayer.device = m_device; m_metalLayer.pixelFormat = MTLPixelFormatBGRA8Unorm; - m_commandQueue = m_device.newCommandQueue(); - BGFX_FATAL(NULL != m_commandQueue, Fatal::UnableToInitialize, "Unable to create Metal device."); + m_cmd.init(m_device); + BGFX_FATAL(NULL != m_cmd.m_commandQueue, Fatal::UnableToInitialize, "Unable to create Metal device."); m_renderPipelineDescriptor = newRenderPipelineDescriptor(); m_depthStencilDescriptor = newDepthStencilDescriptor(); @@ -440,7 +435,6 @@ namespace bgfx { namespace mtl m_textureDescriptor = newTextureDescriptor(); m_samplerDescriptor = newSamplerDescriptor(); - m_framesSemaphore.post(MTL_MAX_FRAMES_IN_FLIGHT); for (uint8_t i=0; i < MTL_MAX_FRAMES_IN_FLIGHT; ++i) { m_uniformBuffers[i] = m_device.newBufferWithLength(UNIFORM_BUFFER_SIZE, 0); @@ -684,7 +678,7 @@ namespace bgfx { namespace mtl { MTL_RELEASE(m_uniformBuffers[i]); } - MTL_RELEASE(m_commandQueue); + m_cmd.shutdown(); MTL_RELEASE(m_device); } @@ -711,7 +705,7 @@ namespace bgfx { namespace mtl void createVertexDecl(VertexDeclHandle _handle, const VertexDecl& _decl) BX_OVERRIDE { VertexDecl& decl = m_vertexDecls[_handle.idx]; - memcpy(&decl, &_decl, sizeof(VertexDecl) ); + bx::memCopy(&decl, &_decl, sizeof(VertexDecl) ); dump(decl); } @@ -800,9 +794,8 @@ namespace bgfx { namespace mtl void readTexture(TextureHandle _handle, void* _data, uint8_t _mip) BX_OVERRIDE { - m_commandBuffer.commit(); - m_commandBuffer.waitUntilCompleted(); - MTL_RELEASE(m_commandBuffer) + m_cmd.kick(false, true); + m_commandBuffer = m_cmd.alloc(); const TextureMtl& texture = m_textures[_handle.idx]; @@ -816,8 +809,6 @@ namespace bgfx { namespace mtl texture.m_ptr.getBytes(_data, srcWidth*bpp/8, 0, region, _mip, 0); - m_commandBuffer = m_commandQueue.commandBuffer(); - retain(m_commandBuffer); //NOTE: keep alive to be useable at 'flip' } void resizeTexture(TextureHandle _handle, uint16_t _width, uint16_t _height, uint8_t _numMips) BX_OVERRIDE @@ -900,7 +891,7 @@ namespace bgfx { namespace mtl uint32_t size = BX_ALIGN_16(g_uniformTypeSize[_type]*_num); void* data = BX_ALLOC(g_allocator, size); - memset(data, 0, size); + bx::memSet(data, 0, size); m_uniforms[_handle.idx] = data; m_uniformReg.add(_handle, _name, data); } @@ -913,21 +904,24 @@ namespace bgfx { namespace mtl } //cmdPre - void saveScreenShotPre(const char* _filePath) BX_OVERRIDE + void requestScreenShotPre(const char* _filePath) BX_OVERRIDE { BX_UNUSED(_filePath); m_saveScreenshot = true; } //cmdPost - void saveScreenShot(const char* _filePath) BX_OVERRIDE + void requestScreenShot(FrameBufferHandle _handle, const char* _filePath) BX_OVERRIDE { - if (NULL == m_screenshotTarget) - return; + BX_UNUSED(_handle); - m_commandBuffer.commit(); - m_commandBuffer.waitUntilCompleted(); - MTL_RELEASE(m_commandBuffer) + if (NULL == m_screenshotTarget) + { + return; + } + + m_cmd.kick(false, true); + m_commandBuffer = 0; uint32_t width = m_screenshotTarget.width(); uint32_t height = m_screenshotTarget.height(); @@ -949,8 +943,7 @@ namespace bgfx { namespace mtl BX_FREE(g_allocator, data); - m_commandBuffer = m_commandQueue.commandBuffer(); - retain(m_commandBuffer); //NOTE: keep alive to be useable at 'flip' + m_commandBuffer = m_cmd.alloc(); } void updateViewName(uint8_t _id, const char* _name) BX_OVERRIDE @@ -966,7 +959,7 @@ namespace bgfx { namespace mtl void updateUniform(uint16_t _loc, const void* _data, uint32_t _size) BX_OVERRIDE { - memcpy(m_uniforms[_loc], _data, _size); + bx::memCopy(m_uniforms[_loc], _data, _size); } void setMarker(const char* _marker, uint32_t /*_size*/) BX_OVERRIDE @@ -977,6 +970,11 @@ namespace bgfx { namespace mtl } } + void invalidateOcclusionQuery(OcclusionQueryHandle _handle) BX_OVERRIDE + { + m_occlusionQuery.invalidate(_handle); + } + void submit(Frame* _render, ClearQuad& _clearQuad, TextVideoMemBlitter& _textVideoMemBlitter) BX_OVERRIDE; void blitSetup(TextVideoMemBlitter& _blitter) BX_OVERRIDE @@ -1071,13 +1069,6 @@ namespace bgfx { namespace mtl } } - static void commandBufferFinishedCallback(void* _data) - { - RendererContextMtl* renderer = (RendererContextMtl*)_data; - if ( renderer ) - renderer->m_framesSemaphore.post(); - } - void flip(HMD& /*_hmd*/) BX_OVERRIDE { if (NULL == m_commandBuffer) @@ -1092,15 +1083,8 @@ namespace bgfx { namespace mtl MTL_RELEASE(m_drawable); } - m_commandBuffer.addCompletedHandler(commandBufferFinishedCallback, this); - - m_commandBuffer.commit(); - - MTL_RELEASE(m_prevCommandBuffer); - m_prevCommandBuffer = m_commandBuffer; - retain(m_prevCommandBuffer); - - MTL_RELEASE(m_commandBuffer); + m_cmd.kick(true); + m_commandBuffer = 0; //TODO: support multiple windows on OSX /* @@ -1247,25 +1231,31 @@ namespace bgfx { namespace mtl if (NULL != m_capture) { if (NULL == m_screenshotTarget) + { return; + } m_renderCommandEncoder.endEncoding(); - m_commandBuffer.commit(); - m_commandBuffer.waitUntilCompleted(); - MTL_RELEASE(m_commandBuffer) + m_cmd.kick(false, true); + m_commandBuffer = 0; 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_commandQueue.commandBuffer(); - retain(m_commandBuffer); //NOTE: keep alive to be useable at 'flip' + m_commandBuffer = m_cmd.alloc(); if (m_screenshotTarget.pixelFormat() == MTLPixelFormatRGBA8Uint) { - imageSwizzleBgra8(m_resolution.m_width, m_resolution.m_height, m_resolution.m_width*4, m_capture, m_capture); + imageSwizzleBgra8( + m_capture + , m_resolution.m_width + , m_resolution.m_height + , m_resolution.m_width*4 + , m_capture + ); } g_callback->captureFrame(m_capture, m_captureSize); @@ -1273,11 +1263,13 @@ namespace bgfx { namespace mtl RenderPassDescriptor renderPassDescriptor = newRenderPassDescriptor(); setFrameBuffer(renderPassDescriptor, m_renderCommandEncoderFrameBufferHandle); - 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 (NULL != desc.texture) + { desc.loadAction = MTLLoadActionLoad; + } } RenderPassDepthAttachmentDescriptor depthAttachment = renderPassDescriptor.depthAttachment; @@ -1318,7 +1310,7 @@ namespace bgfx { namespace mtl : m_uniformBufferVertexOffset ; uint8_t* dst = (uint8_t*)m_uniformBuffer.contents(); - memcpy(&dst[offset + _loc], _val, _numRegs*16); + bx::memCopy(&dst[offset + _loc], _val, _numRegs*16); } void setShaderUniform4f(uint8_t _flags, uint32_t _loc, const void* _val, uint32_t _numRegs) @@ -1358,7 +1350,7 @@ namespace bgfx { namespace mtl else { UniformHandle handle; - memcpy(&handle, _uniformBuffer.read(sizeof(UniformHandle) ), sizeof(UniformHandle) ); + bx::memCopy(&handle, _uniformBuffer.read(sizeof(UniformHandle) ), sizeof(UniformHandle) ); data = (const char*)m_uniforms[handle.idx]; } @@ -1474,10 +1466,10 @@ namespace bgfx { namespace mtl for (uint32_t ii = 0; ii < numMrt; ++ii) { uint8_t index = (uint8_t)bx::uint32_min(BGFX_CONFIG_MAX_COLOR_PALETTE-1, _clear.m_index[ii]); - memcpy(mrtClear[ii], _palette[index], 16); + bx::memCopy(mrtClear[ii], _palette[index], 16); } - memcpy((uint8_t*)m_uniformBuffer.contents() + m_uniformBufferFragmentOffset, + bx::memCopy((uint8_t*)m_uniformBuffer.contents() + m_uniformBufferFragmentOffset, mrtClear, bx::uint32_min(fragmentUniformBufferSize, sizeof(mrtClear))); } @@ -1491,7 +1483,7 @@ namespace bgfx { namespace mtl _clear.m_index[3]*1.0f/255.0f, }; - memcpy((uint8_t*)m_uniformBuffer.contents() + m_uniformBufferFragmentOffset, + bx::memCopy((uint8_t*)m_uniformBuffer.contents() + m_uniformBufferFragmentOffset, rgba, bx::uint32_min(fragmentUniformBufferSize, sizeof(rgba))); } @@ -1705,20 +1697,13 @@ namespace bgfx { namespace mtl return _visible == (0 != _render->m_occlusion[_handle.idx]); } - void sync() - { - if ( m_prevCommandBuffer ) - m_prevCommandBuffer.waitUntilCompleted(); - } - BlitCommandEncoder getBlitCommandEncoder() { if ( m_blitCommandEncoder == NULL) { if ( m_commandBuffer == NULL ) { - m_commandBuffer = m_commandQueue.commandBuffer(); - retain(m_commandBuffer); + m_commandBuffer = m_cmd.alloc(); } m_blitCommandEncoder = m_commandBuffer.blitCommandEncoder(); @@ -1732,10 +1717,7 @@ namespace bgfx { namespace mtl if (m_drawable == nil) { m_drawable = m_metalLayer.nextDrawable; - if (BX_ENABLED(BX_PLATFORM_IOS) ) - { - retain(m_drawable); // keep alive to be useable at 'flip' - } + retain(m_drawable); // keep alive to be useable at 'flip' } return m_drawable; @@ -1745,8 +1727,8 @@ namespace bgfx { namespace mtl Device m_device; OcclusionQueryMTL m_occlusionQuery; TimerQueryMtl m_gpuTimer; + CommandQueueMtl m_cmd; - CommandQueue m_commandQueue; CAMetalLayer* m_metalLayer; Texture m_backBufferColorMSAA; Texture m_backBufferDepth; @@ -1758,10 +1740,6 @@ namespace bgfx { namespace mtl bool m_macOS11Runtime; bool m_hasPixelFormatDepth32Float_Stencil8; - - - bx::Semaphore m_framesSemaphore; - Buffer m_uniformBuffer; Buffer m_uniformBuffers[MTL_MAX_FRAMES_IN_FLIGHT]; uint32_t m_uniformBufferVertexOffset; @@ -1841,7 +1819,7 @@ namespace bgfx { namespace mtl void writeString(bx::WriterI* _writer, const char* _str) { - bx::write(_writer, _str, (int32_t)strlen(_str) ); + bx::write(_writer, _str, (int32_t)bx::strnlen(_str) ); } void ShaderMtl::create(const Memory* _mem) @@ -1928,7 +1906,7 @@ namespace bgfx { namespace mtl } // get attributes - memset(m_attributes, 0xff, sizeof(m_attributes) ); + bx::memSet(m_attributes, 0xff, sizeof(m_attributes) ); uint32_t used = 0; uint32_t instUsed = 0; if (NULL != _vsh->m_function.m_obj ) @@ -1943,7 +1921,7 @@ namespace bgfx { namespace mtl for (uint8_t ii = 0; ii < Attrib::Count; ++ii) { - if (!strcmp(s_attribName[ii],name)) + if (0 == bx::strncmp(s_attribName[ii],name)) { m_attributes[ii] = loc; m_used[used++] = ii; @@ -1953,7 +1931,7 @@ namespace bgfx { namespace mtl for (uint32_t ii = 0; ii < BX_COUNTOF(s_instanceDataName); ++ii) { - if (!strcmp(s_instanceDataName[ii],name)) + if (0 == bx::strncmp(s_instanceDataName[ii],name)) { m_instanceData[instUsed++] = loc; } @@ -2228,7 +2206,7 @@ namespace bgfx { namespace mtl if (arg.active) { if (arg.type == MTLArgumentTypeBuffer - && 0 == strcmp(utf8String(arg.name), SHADER_UNIFORM_NAME) ) + && 0 == bx::strncmp(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 ); @@ -2362,13 +2340,20 @@ namespace bgfx { namespace mtl if ( m_dynamic && _discard ) { m_bufferIndex = (m_bufferIndex + 1) % MTL_MAX_FRAMES_IN_FLIGHT; - memcpy( (uint8_t*)getBuffer().contents() + _offset, _data, _size); + bx::memCopy( (uint8_t*)getBuffer().contents() + _offset, _data, _size); } else if ( NULL != s_renderMtl->m_renderCommandEncoder ) - { // NOTE: cannot blit while rendercommander is active. have to sync. slow. remove these. - // ClearQuad triggers this now - s_renderMtl->sync(); - memcpy( (uint8_t*)getBuffer().contents() + _offset, _data, _size); + { + s_renderMtl->m_cmd.release(m_buffers[m_bufferIndex]); + + 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(); + m_buffers[m_bufferIndex] = s_renderMtl->m_device.newBufferWithBytes(oldContent, m_size, 0); + bx::memCopy( (uint8_t*)m_buffers[m_bufferIndex].contents() + _offset, _data, _size); + } } else { @@ -2423,10 +2408,12 @@ namespace bgfx { namespace mtl if (imageContainer.m_cubeMap) { desc.textureType = MTLTextureType(6); // MTLTextureTypeCubeArray + m_type = TextureCube; } else { desc.textureType = MTLTextureType2DArray; + m_type = Texture2D; } desc.arrayLength = numLayers; @@ -2434,14 +2421,17 @@ namespace bgfx { namespace mtl else if (imageContainer.m_cubeMap) { desc.textureType = MTLTextureTypeCube; + m_type = TextureCube; } else if (imageContainer.m_depth > 1) { desc.textureType = MTLTextureType3D; + m_type = Texture3D; } else { desc.textureType = MTLTextureType2D; + m_type = Texture2D; } m_numMips = numMips; @@ -2614,6 +2604,8 @@ namespace bgfx { namespace mtl const uint32_t bpp = getBitsPerPixel(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 uint16_t z = (m_type == Texture3D) ? _z : 0 ; const bool convert = m_textureFormat != m_requestedFormat; @@ -2635,15 +2627,15 @@ namespace bgfx { namespace mtl if ( NULL != s_renderMtl->m_renderCommandEncoder ) { - s_renderMtl->sync(); + 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 }, }; - m_ptr.replaceRegion(region, _mip, _side, data, srcpitch, srcpitch * _rect.m_height); + m_ptr.replaceRegion(region, _mip, slice, data, srcpitch, srcpitch * _rect.m_height); } else { @@ -2658,11 +2650,20 @@ namespace bgfx { namespace mtl for (uint32_t yy = 0; yy < _rect.m_height; ++yy, src += srcpitch, dst += dstpitch) { - memcpy(dst, src, rectpitch); + bx::memCopy(dst, src, rectpitch); } - bce.copyFromBuffer(tempBuffer, 0, dstpitch, dstpitch * _rect.m_height, MTLSizeMake(_rect.m_width, _rect.m_height, _depth), - m_ptr, _side, _mip, MTLOriginMake(_rect.m_x, _rect.m_y, _z)); + bce.copyFromBuffer( + tempBuffer + , 0 + , dstpitch + , dstpitch * _rect.m_height + , MTLSizeMake(_rect.m_width, _rect.m_height, _depth) + , m_ptr + , slice + , _mip + , MTLOriginMake(_rect.m_x, _rect.m_y, z) + ); release(tempBuffer); } @@ -2677,22 +2678,25 @@ namespace bgfx { namespace mtl if (_vertex) { s_renderMtl->m_renderCommandEncoder.setVertexTexture(m_ptr, _stage); - s_renderMtl->m_renderCommandEncoder.setVertexSamplerState(0 == (BGFX_TEXTURE_INTERNAL_DEFAULT_SAMPLER & _flags) - ? s_renderMtl->getSamplerState(_flags) - : m_sampler, _stage); + s_renderMtl->m_renderCommandEncoder.setVertexSamplerState( + 0 == (BGFX_TEXTURE_INTERNAL_DEFAULT_SAMPLER & _flags) + ? s_renderMtl->getSamplerState(_flags) + : m_sampler, _stage); } if (_fragment) { s_renderMtl->m_renderCommandEncoder.setFragmentTexture(m_ptr, _stage); - s_renderMtl->m_renderCommandEncoder.setFragmentSamplerState(0 == (BGFX_TEXTURE_INTERNAL_DEFAULT_SAMPLER & _flags) - ? s_renderMtl->getSamplerState(_flags) - : m_sampler, _stage); + s_renderMtl->m_renderCommandEncoder.setFragmentSamplerState( + 0 == (BGFX_TEXTURE_INTERNAL_DEFAULT_SAMPLER & _flags) + ? s_renderMtl->getSamplerState(_flags) + : m_sampler, _stage); } } void FrameBufferMtl::create(uint8_t _num, const Attachment* _attachment) { + m_denseIdx = UINT16_MAX; m_num = 0; m_width = 0; m_height = 0; @@ -2770,6 +2774,85 @@ namespace bgfx { namespace mtl return denseIdx; } + void CommandQueueMtl::init(Device _device) + { + m_commandQueue = _device.newCommandQueue(); + m_framesSemaphore.post(MTL_MAX_FRAMES_IN_FLIGHT); + } + + void CommandQueueMtl::shutdown() + { + MTL_RELEASE(m_commandQueue); + } + + CommandBuffer CommandQueueMtl::alloc() + { + m_activeCommandBuffer = m_commandQueue.commandBuffer(); + retain(m_activeCommandBuffer); + return m_activeCommandBuffer; + } + + static void commandBufferFinishedCallback(void* _data) + { + CommandQueueMtl* queue = (CommandQueueMtl*)_data; + if ( queue ) + queue->m_framesSemaphore.post(); + } + + void CommandQueueMtl::kick(bool _endFrame, bool _waitForFinish) + { + if ( m_activeCommandBuffer ) + { + if ( _endFrame ) + { + m_releaseWriteIndex = (m_releaseWriteIndex + 1) % MTL_MAX_FRAMES_IN_FLIGHT; + m_activeCommandBuffer.addCompletedHandler(commandBufferFinishedCallback, this); + } + + m_activeCommandBuffer.commit(); + if ( _waitForFinish ) + m_activeCommandBuffer.waitUntilCompleted(); + MTL_RELEASE(m_activeCommandBuffer); + } + } + + void CommandQueueMtl::finish(bool _finishAll) + { + if ( _finishAll) + { + int count = m_activeCommandBuffer != NULL ? 2 : 3; + + for( int i=0; i< count; ++i) + { + consume(); + } + + m_framesSemaphore.post(count); + } + else + { + consume(); + } + } + + void CommandQueueMtl::release(NSObject* _ptr) + { + m_release[m_releaseWriteIndex].push_back(_ptr); + } + + void CommandQueueMtl::consume() + { + m_framesSemaphore.wait(); + m_releaseReadIndex = (m_releaseReadIndex + 1) % MTL_MAX_FRAMES_IN_FLIGHT; + + ResourceArray& ra = m_release[m_releaseReadIndex]; + for (ResourceArray::iterator it = ra.begin(), itEnd = ra.end(); it != itEnd; ++it) + { + bgfx::mtl::release(*it); + } + ra.clear(); + } + void TimerQueryMtl::init() { m_frequency = bx::getHPFrequency(); @@ -2853,20 +2936,37 @@ namespace bgfx { namespace mtl { Query& query = m_query[m_control.m_read]; - uint64_t result = ( (uint64_t*)m_buffer.contents() )[query.m_handle.idx]; - _render->m_occlusion[query.m_handle.idx] = 0 < result; + if (isValid(query.m_handle) ) + { + uint64_t result = ( (uint64_t*)m_buffer.contents() )[query.m_handle.idx]; + _render->m_occlusion[query.m_handle.idx] = int32_t(result); + } + m_control.consume(1); } } + void OcclusionQueryMTL::invalidate(OcclusionQueryHandle _handle) + { + const uint32_t size = m_control.m_size; + + for (uint32_t ii = 0, num = m_control.available(); ii < num; ++ii) + { + Query& query = m_query[(m_control.m_read + ii) % size]; + if (query.m_handle.idx == _handle.idx) + { + query.m_handle.idx = bgfx::invalidHandle; + } + } + } + void RendererContextMtl::submit(Frame* _render, ClearQuad& _clearQuad, TextVideoMemBlitter& _textVideoMemBlitter) BX_OVERRIDE { - m_framesSemaphore.wait(); + m_cmd.finish(false); - if ( m_commandBuffer == NULL ) + if (m_commandBuffer == NULL) { - m_commandBuffer = m_commandQueue.commandBuffer(); - retain(m_commandBuffer); // keep alive to be useable at 'flip' + m_commandBuffer = m_cmd.alloc(); } int64_t elapsed = -bx::getHPCounter(); @@ -2874,7 +2974,7 @@ namespace bgfx { namespace mtl m_gpuTimer.addHandlers(m_commandBuffer); - if ( m_blitCommandEncoder ) + if (m_blitCommandEncoder) { m_blitCommandEncoder.endEncoding(); m_blitCommandEncoder = 0; @@ -2882,18 +2982,19 @@ namespace bgfx { namespace mtl updateResolution(_render->m_resolution); - if ( m_saveScreenshot || NULL != m_capture ) + if (m_saveScreenshot + || NULL != m_capture) { - if ( m_screenshotTarget ) + if (m_screenshotTarget) { - if ( m_screenshotTarget.width() != m_resolution.m_width || - m_screenshotTarget.height() != m_resolution.m_height ) + if (m_screenshotTarget.width() != m_resolution.m_width + || m_screenshotTarget.height() != m_resolution.m_height) { MTL_RELEASE(m_screenshotTarget); } } - if ( NULL == m_screenshotTarget) + if (NULL == m_screenshotTarget) { m_textureDescriptor.textureType = MTLTextureType2D; m_textureDescriptor.pixelFormat = m_metalLayer.pixelFormat; @@ -2906,13 +3007,16 @@ namespace bgfx { namespace mtl 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 = (MTLStorageMode)(BX_ENABLED(BX_PLATFORM_IOS) + ? 0 /* MTLStorageModeShared */ + : 1 /*MTLStorageModeManaged*/ + ); + m_textureDescriptor.usage = MTLTextureUsageRenderTarget | MTLTextureUsageShaderRead; } - m_screenshotTarget = m_device.newTextureWithDescriptor(m_textureDescriptor); + m_screenshotTarget = m_device.newTextureWithDescriptor(m_textureDescriptor); } + m_saveScreenshot = false; } else @@ -2925,8 +3029,6 @@ namespace bgfx { namespace mtl m_uniformBufferVertexOffset = 0; m_uniformBufferFragmentOffset = 0; - - if (0 < _render->m_iboffset) { TransientIndexBuffer* ib = _render->m_transientIb; @@ -2996,7 +3098,8 @@ namespace bgfx { namespace mtl int32_t numItems = _render->m_num; for (int32_t item = 0, restartItem = numItems; item < numItems || restartItem < numItems;) { - const bool isCompute = key.decode(_render->m_sortKeys[item], _render->m_viewRemap); + const uint64_t encodedKey = _render->m_sortKeys[item]; + const bool isCompute = key.decode(encodedKey, _render->m_viewRemap); statsKeyType[isCompute]++; const bool viewChanged = 0 @@ -3047,8 +3150,8 @@ namespace bgfx { namespace mtl viewState.m_rect.m_width /= 2; } - - for (; blitItem < numBlitItems && blitKey.m_view <= view; blitItem++) + const uint8_t blitView = SortKey::decodeView(encodedKey); + for (; blitItem < numBlitItems && blitKey.m_view <= blitView; blitItem++) { if (0 != m_renderCommandEncoder) { @@ -3341,15 +3444,18 @@ namespace bgfx { namespace mtl else { Rect scissorRect; - scissorRect.intersect(viewScissorRect, _render->m_rectCache.m_cache[scissor]); - rc.x = scissorRect.m_x; - rc.y = scissorRect.m_y; + scissorRect.setIntersect(viewScissorRect, _render->m_rectCache.m_cache[scissor]); + if (scissorRect.isZeroArea() ) + { + continue; + } + + rc.x = scissorRect.m_x; + rc.y = scissorRect.m_y; rc.width = scissorRect.m_width; rc.height = scissorRect.m_height; - - if ( rc.width == 0 || rc.height == 0 ) - continue; } + rce.setScissorRect(rc); } @@ -3686,11 +3792,14 @@ namespace bgfx { namespace mtl const int64_t timerFreq = bx::getHPFrequency(); - perfStats.cpuTimeEnd = now; - perfStats.cpuTimerFreq = timerFreq; - perfStats.gpuTimeBegin = m_gpuTimer.m_begin; - perfStats.gpuTimeEnd = m_gpuTimer.m_end; - perfStats.gpuTimerFreq = m_gpuTimer.m_frequency; + perfStats.cpuTimeEnd = now; + perfStats.cpuTimerFreq = timerFreq; + perfStats.gpuTimeBegin = m_gpuTimer.m_begin; + perfStats.gpuTimeEnd = m_gpuTimer.m_end; + perfStats.gpuTimerFreq = m_gpuTimer.m_frequency; + perfStats.numDraw = statsKeyType[0]; + perfStats.numCompute = statsKeyType[1]; + perfStats.maxGpuLatency = maxGpuLatency; rce.setTriangleFillMode(MTLTriangleFillModeFill); if (_render->m_debug & (BGFX_DEBUG_IFH|BGFX_DEBUG_STATS) ) diff --git a/3rdparty/bgfx/src/renderer_noop.cpp b/3rdparty/bgfx/src/renderer_noop.cpp index 34a198d..24fbfb4 100644 --- a/3rdparty/bgfx/src/renderer_noop.cpp +++ b/3rdparty/bgfx/src/renderer_noop.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -177,7 +177,7 @@ namespace bgfx { namespace noop { } - void saveScreenShot(const char* /*_filePath*/) BX_OVERRIDE + void requestScreenShot(FrameBufferHandle /*_handle*/, const char* /*_filePath*/) BX_OVERRIDE { } @@ -193,6 +193,10 @@ namespace bgfx { namespace noop { } + void invalidateOcclusionQuery(OcclusionQueryHandle /*_handle*/) BX_OVERRIDE + { + } + void submit(Frame* /*_render*/, ClearQuad& /*_clearQuad*/, TextVideoMemBlitter& /*_textVideoMemBlitter*/) BX_OVERRIDE { } diff --git a/3rdparty/bgfx/src/renderer_vk.cpp b/3rdparty/bgfx/src/renderer_vk.cpp index 252cd2d..8e2f66c 100644 --- a/3rdparty/bgfx/src/renderer_vk.cpp +++ b/3rdparty/bgfx/src/renderer_vk.cpp @@ -1,10 +1,4645 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ #include "bgfx_p.h" +#if BGFX_CONFIG_RENDERER_VULKAN +# include "renderer_vk.h" + +namespace bgfx { namespace vk +{ + static char s_viewName[BGFX_CONFIG_MAX_VIEWS][256]; + + struct PrimInfo + { + VkPrimitiveTopology m_topology; + uint32_t m_min; + uint32_t m_div; + uint32_t m_sub; + }; + + static const PrimInfo s_primInfo[] = + { + { VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, 3, 3, 0 }, + { VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP, 3, 1, 2 }, + { VK_PRIMITIVE_TOPOLOGY_LINE_LIST, 2, 2, 0 }, + { VK_PRIMITIVE_TOPOLOGY_POINT_LIST, 1, 1, 0 }, + { VK_PRIMITIVE_TOPOLOGY_MAX_ENUM, 0, 0, 0 }, + }; + + static const char* s_primName[] = + { + "TriList", + "TriStrip", + "Line", + "Point", + }; + BX_STATIC_ASSERT(BX_COUNTOF(s_primInfo) == BX_COUNTOF(s_primName)+1); + + static const uint32_t s_checkMsaa[] = + { + 0, + 2, + 4, + 8, + 16, + }; + +// static DXGI_SAMPLE_DESC s_msaa[] = +// { +// { 1, 0 }, +// { 2, 0 }, +// { 4, 0 }, +// { 8, 0 }, +// { 16, 0 }, +// }; + + static const VkBlendFactor s_blendFactor[][2] = + { + { VkBlendFactor(0), VkBlendFactor(0) }, // ignored + { VK_BLEND_FACTOR_ZERO, VK_BLEND_FACTOR_ZERO }, // ZERO + { VK_BLEND_FACTOR_ONE, VK_BLEND_FACTOR_ONE }, // ONE + { VK_BLEND_FACTOR_SRC_COLOR, VK_BLEND_FACTOR_SRC_ALPHA }, // SRC_COLOR + { VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR, VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA }, // INV_SRC_COLOR + { VK_BLEND_FACTOR_SRC_ALPHA, VK_BLEND_FACTOR_SRC_ALPHA }, // SRC_ALPHA + { VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA, VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA }, // INV_SRC_ALPHA + { VK_BLEND_FACTOR_DST_ALPHA, VK_BLEND_FACTOR_DST_ALPHA }, // DST_ALPHA + { VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA, VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA }, // INV_DST_ALPHA + { VK_BLEND_FACTOR_DST_COLOR, VK_BLEND_FACTOR_DST_ALPHA }, // DST_COLOR + { VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR, VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA }, // INV_DST_COLOR + { VK_BLEND_FACTOR_SRC_ALPHA, VK_BLEND_FACTOR_ONE }, // SRC_ALPHA_SAT + { VK_BLEND_FACTOR_CONSTANT_COLOR, VK_BLEND_FACTOR_CONSTANT_COLOR }, // FACTOR + { VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR, VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR }, // INV_FACTOR + }; + + static const VkBlendOp s_blendEquation[] = + { + VK_BLEND_OP_ADD, + VK_BLEND_OP_SUBTRACT, + VK_BLEND_OP_REVERSE_SUBTRACT, + VK_BLEND_OP_MIN, + VK_BLEND_OP_MAX, + }; + + static const VkCompareOp s_cmpFunc[] = + { + VkCompareOp(0), // ignored + VK_COMPARE_OP_LESS, + VK_COMPARE_OP_LESS_OR_EQUAL, + VK_COMPARE_OP_EQUAL, + VK_COMPARE_OP_GREATER_OR_EQUAL, + VK_COMPARE_OP_GREATER, + VK_COMPARE_OP_NOT_EQUAL, + VK_COMPARE_OP_NEVER, + VK_COMPARE_OP_ALWAYS, + }; + + static const VkStencilOp s_stencilOp[] = + { + VK_STENCIL_OP_ZERO, + VK_STENCIL_OP_KEEP, + VK_STENCIL_OP_REPLACE, + VK_STENCIL_OP_INCREMENT_AND_WRAP, + VK_STENCIL_OP_INCREMENT_AND_CLAMP, + VK_STENCIL_OP_DECREMENT_AND_WRAP, + VK_STENCIL_OP_DECREMENT_AND_CLAMP, + VK_STENCIL_OP_INVERT, + }; + + static const VkCullModeFlagBits s_cullMode[] = + { + VK_CULL_MODE_NONE, + VK_CULL_MODE_FRONT_BIT, + VK_CULL_MODE_BACK_BIT, + }; + + static const VkSamplerAddressMode s_textureAddress[] = + { + VK_SAMPLER_ADDRESS_MODE_REPEAT, + VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT, + VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, + VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, + }; + +#define VK_IMPORT_FUNC(_optional, _func) PFN_##_func _func +#define VK_IMPORT_INSTANCE_FUNC VK_IMPORT_FUNC +#define VK_IMPORT_DEVICE_FUNC VK_IMPORT_FUNC +VK_IMPORT +VK_IMPORT_INSTANCE +VK_IMPORT_DEVICE +#undef VK_IMPORT_DEVICE_FUNC +#undef VK_IMPORT_INSTANCE_FUNC +#undef VK_IMPORT_FUNC + + struct TextureFormatInfo + { + VkFormat m_fmt; + VkFormat m_fmtSrv; + VkFormat m_fmtDsv; + VkFormat m_fmtSrgb; + }; + + static const TextureFormatInfo s_textureFormat[] = + { + { VK_FORMAT_BC1_RGB_UNORM_BLOCK, VK_FORMAT_BC1_RGB_UNORM_BLOCK, VK_FORMAT_UNDEFINED, VK_FORMAT_BC1_RGB_SRGB_BLOCK }, // BC1 + { VK_FORMAT_BC2_UNORM_BLOCK, VK_FORMAT_BC2_UNORM_BLOCK, VK_FORMAT_UNDEFINED, VK_FORMAT_BC2_SRGB_BLOCK }, // BC2 + { VK_FORMAT_BC3_UNORM_BLOCK, VK_FORMAT_BC3_UNORM_BLOCK, VK_FORMAT_UNDEFINED, VK_FORMAT_BC3_SRGB_BLOCK }, // BC3 + { VK_FORMAT_BC4_UNORM_BLOCK, VK_FORMAT_BC4_UNORM_BLOCK, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // BC4 + { VK_FORMAT_BC5_UNORM_BLOCK, VK_FORMAT_BC5_UNORM_BLOCK, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // BC5 + { VK_FORMAT_BC6H_SFLOAT_BLOCK, VK_FORMAT_BC6H_SFLOAT_BLOCK, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // BC6H + { VK_FORMAT_BC7_UNORM_BLOCK, VK_FORMAT_BC7_UNORM_BLOCK, VK_FORMAT_UNDEFINED, VK_FORMAT_BC7_SRGB_BLOCK }, // BC7 + { VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // ETC1 + { VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED, VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK }, // ETC2 + { VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED, VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK }, // ETC2A + { VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED, VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK }, // ETC2A1 + { VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // PTC12 + { VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // PTC14 + { VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // PTC12A + { VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // PTC14A + { VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // PTC22 + { VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // PTC24 + { VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // Unknown + { VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // R1 + { VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // A8 + { VK_FORMAT_R8_UNORM, VK_FORMAT_R8_UNORM, VK_FORMAT_UNDEFINED, VK_FORMAT_R8_SRGB }, // R8 + { VK_FORMAT_R8_SINT, VK_FORMAT_R8_SINT, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // R8I + { VK_FORMAT_R8_UINT, VK_FORMAT_R8_UINT, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // R8U + { VK_FORMAT_R8_SNORM, VK_FORMAT_R8_SNORM, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // R8S + { VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // R16 + { VK_FORMAT_R16_SINT, VK_FORMAT_R16_SINT, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // R16I + { VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // R16U + { VK_FORMAT_R16_SFLOAT, VK_FORMAT_R16_SFLOAT, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // R16F + { VK_FORMAT_R16_SNORM, VK_FORMAT_R16_SNORM, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // R16S + { VK_FORMAT_R32_SINT, VK_FORMAT_R32_SINT, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // R32I + { VK_FORMAT_R32_UINT, VK_FORMAT_R32_UINT, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // R32U + { VK_FORMAT_R32_SFLOAT, VK_FORMAT_R32_SFLOAT, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // R32F + { VK_FORMAT_R8G8_UNORM, VK_FORMAT_R8G8_UNORM, VK_FORMAT_UNDEFINED, VK_FORMAT_R8G8_SRGB }, // RG8 + { VK_FORMAT_R8G8_SINT, VK_FORMAT_R8G8_SINT, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // RG8I + { VK_FORMAT_R8G8_UINT, VK_FORMAT_R8G8_UINT, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // RG8U + { VK_FORMAT_R8G8_SNORM, VK_FORMAT_R8G8_SNORM, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // RG8S + { VK_FORMAT_R16G16_UNORM, VK_FORMAT_R16G16_UNORM, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // RG16 + { VK_FORMAT_R16G16_SINT, VK_FORMAT_R16G16_SINT, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // RG16I + { VK_FORMAT_R16G16_UINT, VK_FORMAT_R16G16_UINT, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // RG16U + { VK_FORMAT_R16G16_SFLOAT, VK_FORMAT_R16G16_SFLOAT, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // RG16F + { VK_FORMAT_R16G16_SNORM, VK_FORMAT_R16G16_SNORM, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // RG16S + { VK_FORMAT_R32G32_SINT, VK_FORMAT_R32G32_SINT, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // RG32I + { VK_FORMAT_R32G32_UINT, VK_FORMAT_R32G32_UINT, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // RG32U + { VK_FORMAT_R32G32_SFLOAT, VK_FORMAT_R32G32_SFLOAT, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // RG32F + { VK_FORMAT_R8G8B8_UNORM, VK_FORMAT_R8G8B8_UNORM, VK_FORMAT_UNDEFINED, VK_FORMAT_R8G8B8_SRGB }, // RGB8 + { VK_FORMAT_R8G8B8_SINT, VK_FORMAT_R8G8B8_SINT, VK_FORMAT_UNDEFINED, VK_FORMAT_R8G8B8_SRGB }, // RGB8I + { VK_FORMAT_R8G8B8_UINT, VK_FORMAT_R8G8B8_UINT, VK_FORMAT_UNDEFINED, VK_FORMAT_R8G8B8_SRGB }, // RGB8U + { VK_FORMAT_R8G8B8_SNORM, VK_FORMAT_R8G8B8_SNORM, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // RGB8S + { VK_FORMAT_E5B9G9R9_UFLOAT_PACK32, VK_FORMAT_E5B9G9R9_UFLOAT_PACK32, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // RGB9E5F + { VK_FORMAT_B8G8R8A8_UNORM, VK_FORMAT_B8G8R8A8_UNORM, VK_FORMAT_UNDEFINED, VK_FORMAT_B8G8R8A8_SRGB }, // BGRA8 + { VK_FORMAT_R8G8B8A8_UNORM, VK_FORMAT_R8G8B8A8_UNORM, VK_FORMAT_UNDEFINED, VK_FORMAT_R8G8B8A8_SRGB }, // RGBA8 + { VK_FORMAT_R8G8B8A8_SINT, VK_FORMAT_R8G8B8A8_SINT, VK_FORMAT_UNDEFINED, VK_FORMAT_R8G8B8A8_SRGB }, // RGBA8I + { VK_FORMAT_R8G8B8A8_UINT, VK_FORMAT_R8G8B8A8_UINT, VK_FORMAT_UNDEFINED, VK_FORMAT_R8G8B8A8_SRGB }, // RGBA8U + { VK_FORMAT_R8G8B8A8_SNORM, VK_FORMAT_R8G8B8A8_SNORM, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // RGBA8S + { VK_FORMAT_R16G16B16A16_UNORM, VK_FORMAT_R16G16B16A16_UNORM, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // RGBA16 + { VK_FORMAT_R16G16B16A16_SINT, VK_FORMAT_R16G16B16A16_SINT, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // RGBA16I + { VK_FORMAT_R16G16B16A16_UINT, VK_FORMAT_R16G16B16A16_UINT, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // RGBA16U + { VK_FORMAT_R16G16B16A16_SFLOAT, VK_FORMAT_R16G16B16A16_SFLOAT, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // RGBA16F + { VK_FORMAT_R16G16B16A16_SNORM, VK_FORMAT_R16G16B16A16_SNORM, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // RGBA16S + { VK_FORMAT_R32G32B32A32_SINT, VK_FORMAT_R32G32B32A32_SINT, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // RGBA32I + { VK_FORMAT_R32G32B32A32_UINT, VK_FORMAT_R32G32B32A32_UINT, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // RGBA32U + { VK_FORMAT_R32G32B32A32_SFLOAT, VK_FORMAT_R32G32B32A32_SFLOAT, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // RGBA32F + { VK_FORMAT_B5G6R5_UNORM_PACK16, VK_FORMAT_B5G6R5_UNORM_PACK16, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // R5G6B5 + { 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_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 + { VK_FORMAT_UNDEFINED, VK_FORMAT_X8_D24_UNORM_PACK32, VK_FORMAT_D24_UNORM_S8_UINT, VK_FORMAT_UNDEFINED }, // D24S8 + { VK_FORMAT_UNDEFINED, VK_FORMAT_X8_D24_UNORM_PACK32, VK_FORMAT_D24_UNORM_S8_UINT, VK_FORMAT_UNDEFINED }, // D32 + { VK_FORMAT_UNDEFINED, VK_FORMAT_R32_SFLOAT, VK_FORMAT_D32_SFLOAT, VK_FORMAT_UNDEFINED }, // D16F + { VK_FORMAT_UNDEFINED, VK_FORMAT_R32_SFLOAT, VK_FORMAT_D32_SFLOAT, VK_FORMAT_UNDEFINED }, // D24F + { VK_FORMAT_UNDEFINED, VK_FORMAT_R32_SFLOAT, VK_FORMAT_D32_SFLOAT, VK_FORMAT_UNDEFINED }, // D32F + { VK_FORMAT_UNDEFINED, VK_FORMAT_X8_D24_UNORM_PACK32, VK_FORMAT_D24_UNORM_S8_UINT, VK_FORMAT_UNDEFINED }, // D0S8 + }; + BX_STATIC_ASSERT(TextureFormat::Count == BX_COUNTOF(s_textureFormat) ); + + static const VkFormat s_attribType[][4][2] = + { + { // Uint8 + { VK_FORMAT_R8_UINT, VK_FORMAT_R8_UNORM }, + { VK_FORMAT_R8G8_UINT, VK_FORMAT_R8G8_UNORM }, + { VK_FORMAT_R8G8B8A8_UINT, VK_FORMAT_R8G8B8A8_UNORM }, + { VK_FORMAT_R8G8B8A8_UINT, VK_FORMAT_R8G8B8A8_UNORM }, + }, + { // Uint10 + { VK_FORMAT_A2R10G10B10_UINT_PACK32, VK_FORMAT_A2R10G10B10_UNORM_PACK32 }, + { VK_FORMAT_A2R10G10B10_UINT_PACK32, VK_FORMAT_A2R10G10B10_UNORM_PACK32 }, + { VK_FORMAT_A2R10G10B10_UINT_PACK32, VK_FORMAT_A2R10G10B10_UNORM_PACK32 }, + { VK_FORMAT_A2R10G10B10_UINT_PACK32, VK_FORMAT_A2R10G10B10_UNORM_PACK32 }, + }, + { // Int16 + { VK_FORMAT_R16_SINT, VK_FORMAT_R16_SNORM }, + { VK_FORMAT_R16G16_SINT, VK_FORMAT_R16G16_SNORM }, + { VK_FORMAT_R16G16B16_SINT, VK_FORMAT_R16G16B16_SNORM }, + { VK_FORMAT_R16G16B16A16_SINT, VK_FORMAT_R16G16B16A16_SNORM }, + }, + { // Half + { VK_FORMAT_R16_SFLOAT, VK_FORMAT_R16_SFLOAT }, + { VK_FORMAT_R16G16_SFLOAT, VK_FORMAT_R16G16_SFLOAT }, + { VK_FORMAT_R16G16B16_SFLOAT, VK_FORMAT_R16G16B16_SFLOAT }, + { VK_FORMAT_R16G16B16A16_SFLOAT, VK_FORMAT_R16G16B16A16_SFLOAT }, + }, + { // Float + { VK_FORMAT_R32_SFLOAT, VK_FORMAT_R32_SFLOAT }, + { VK_FORMAT_R32G32_SFLOAT, VK_FORMAT_R32G32_SFLOAT }, + { VK_FORMAT_R32G32B32_SFLOAT, VK_FORMAT_R32G32B32_SFLOAT }, + { VK_FORMAT_R32G32B32A32_SFLOAT, VK_FORMAT_R32G32B32A32_SFLOAT }, + }, + }; + BX_STATIC_ASSERT(AttribType::Count == BX_COUNTOF(s_attribType) ); + + uint32_t fillVertexDecl(VkPipelineVertexInputStateCreateInfo& _vertexInputState, const VertexDecl& _decl) + { + VkVertexInputBindingDescription* inputBinding = const_cast(_vertexInputState.pVertexBindingDescriptions); + VkVertexInputAttributeDescription* inputAttrib = const_cast(_vertexInputState.pVertexAttributeDescriptions); + + inputBinding->binding = 0; + inputBinding->stride = _decl.m_stride; + inputBinding->inputRate = VK_VERTEX_INPUT_RATE_VERTEX; + _vertexInputState.vertexBindingDescriptionCount = 1; + + uint32_t numAttribs = 0; + for (uint32_t attr = 0; attr < Attrib::Count; ++attr) + { + if (UINT16_MAX != _decl.m_attributes[attr]) + { + inputAttrib->location = numAttribs; + inputAttrib->binding = 0; + + if (0 == _decl.m_attributes[attr]) + { + inputAttrib->format = VK_FORMAT_R32G32B32_SFLOAT; + inputAttrib->offset = 0; + } + else + { + uint8_t num; + AttribType::Enum type; + bool normalized; + bool asInt; + _decl.decode(Attrib::Enum(attr), num, type, normalized, asInt); + inputAttrib->format = s_attribType[type][num-1][normalized]; + inputAttrib->offset = _decl.m_offset[attr]; + } + + ++inputAttrib; + ++numAttribs; + } + } + + _vertexInputState.vertexAttributeDescriptionCount = numAttribs; + + return numAttribs; + } + + static const char* s_allocScopeName[] = + { + "vkCommand", + "vkObject", + "vkCache", + "vkDevice", + "vkInstance", + }; + BX_STATIC_ASSERT(VK_SYSTEM_ALLOCATION_SCOPE_RANGE_SIZE == BX_COUNTOF(s_allocScopeName) ); + + static void* VKAPI_PTR allocationFunction(void* _userData, size_t _size, size_t _alignment, VkSystemAllocationScope _allocationScope) + { + BX_UNUSED(_userData, _allocationScope); + return bx::alignedAlloc(g_allocator, _size, _alignment, s_allocScopeName[_allocationScope]); + } + + static void* VKAPI_PTR reallocationFunction(void* _userData, void* _original, size_t _size, size_t _alignment, VkSystemAllocationScope _allocationScope) + { + BX_UNUSED(_userData, _allocationScope); + return bx::alignedRealloc(g_allocator, _original, _size, _alignment, s_allocScopeName[_allocationScope]); + } + + static void VKAPI_PTR freeFunction(void* _userData, void* _memory) + { + BX_UNUSED(_userData); + + if (NULL == _memory) + { + return; + } + + bx::alignedFree(g_allocator, _memory, BX_CONFIG_ALLOCATOR_NATURAL_ALIGNMENT); + } + + static void VKAPI_PTR internalAllocationNotification(void* _userData, size_t _size, VkInternalAllocationType _allocationType, VkSystemAllocationScope _allocationScope) + { + BX_UNUSED(_userData, _size, _allocationType, _allocationScope); + } + + static void VKAPI_PTR internalFreeNotification(void* _userData, size_t _size, VkInternalAllocationType _allocationType, VkSystemAllocationScope _allocationScope) + { + BX_UNUSED(_userData, _size, _allocationType, _allocationScope); + } + + static VkAllocationCallbacks s_allocationCb = + { + NULL, + allocationFunction, + reallocationFunction, + freeFunction, + internalAllocationNotification, + internalFreeNotification, + }; + + static const char* s_debugReportObjectType[] = + { + "Unknown", + "Instance", + "PhysicalDevice", + "Device", + "Queue", + "Semaphore", + "CommandBuffer", + "Fence", + "DeviceMemory", + "Buffer", + "Image", + "Event", + "QueryPool", + "BufferView", + "ImageView", + "ShaderModule", + "PipelineCache", + "PipelineLayout", + "RenderPass", + "Pipeline", + "DescriptorSetLayout", + "Sampler", + "DescriptorPool", + "DescriptorSet", + "Framebuffer", + "CommandPool", + "SurfaceKHR", + "SwapchainKHR", + "DebugReport", + }; + + VkBool32 VKAPI_PTR debugReportCb( + VkDebugReportFlagsEXT _flags, + VkDebugReportObjectTypeEXT _objectType, + uint64_t _object, + size_t _location, + int32_t _messageCode, + const char* _layerPrefix, + const char* _message, + void* _userData + ) + { + BX_UNUSED(_flags + , _objectType + , _object + , _location + , _messageCode + , _layerPrefix + , _message + , _userData + , s_debugReportObjectType + ); + BX_TRACE("%c%c%c%c%c %19s, %s, %d: %s" + , 0 != (_flags & VK_DEBUG_REPORT_INFORMATION_BIT_EXT ) ? 'I' : '-' + , 0 != (_flags & VK_DEBUG_REPORT_WARNING_BIT_EXT ) ? 'W' : '-' + , 0 != (_flags & VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT) ? 'P' : '-' + , 0 != (_flags & VK_DEBUG_REPORT_ERROR_BIT_EXT ) ? 'E' : '-' + , 0 != (_flags & VK_DEBUG_REPORT_DEBUG_BIT_EXT ) ? 'D' : '-' + , s_debugReportObjectType[_objectType] + , _layerPrefix + , _messageCode + , _message + ); + return VK_TRUE; + } + + VkResult enumerateLayerProperties(VkPhysicalDevice _physicalDevice, uint32_t* _propertyCount, VkLayerProperties* _properties) + { + return (VK_NULL_HANDLE == _physicalDevice) + ? vkEnumerateInstanceLayerProperties(_propertyCount, _properties) + : vkEnumerateDeviceLayerProperties(_physicalDevice, _propertyCount, _properties) + ; + } + + VkResult enumerateExtensionProperties(VkPhysicalDevice _physicalDevice, const char* _layerName, uint32_t* _propertyCount, VkExtensionProperties* _properties) + { + return (VK_NULL_HANDLE == _physicalDevice) + ? vkEnumerateInstanceExtensionProperties(_layerName, _propertyCount, _properties) + : vkEnumerateDeviceExtensionProperties(_physicalDevice, _layerName, _propertyCount, _properties) + ; + } + + void dumpExtensions(VkPhysicalDevice _physicalDevice = VK_NULL_HANDLE) + { + { // Global extensions. + uint32_t numExtensionProperties; + VkResult result = enumerateExtensionProperties(_physicalDevice + , NULL + , &numExtensionProperties + , NULL + ); + + if (VK_SUCCESS == result + && 0 < numExtensionProperties) + { + VkExtensionProperties extensionProperties[64]; + numExtensionProperties = bx::uint32_min(numExtensionProperties, BX_COUNTOF(extensionProperties) ); + result = enumerateExtensionProperties(_physicalDevice + , NULL + , &numExtensionProperties + , extensionProperties + ); + + BX_TRACE("\tGlobal extensions (%d):" + , numExtensionProperties + ); + + for (uint32_t extension = 0; extension < numExtensionProperties; ++extension) + { + BX_TRACE("\t\t%s (s: 0x%08x)" + , extensionProperties[extension].extensionName + , extensionProperties[extension].specVersion + ); + } + } + } + + // Layer extensions. + uint32_t numLayerProperties; + VkResult result = enumerateLayerProperties(_physicalDevice, &numLayerProperties, NULL); + + if (VK_SUCCESS == result + && 0 < numLayerProperties) + { + VkLayerProperties layerProperties[64]; + numLayerProperties = bx::uint32_min(numLayerProperties, BX_COUNTOF(layerProperties) ); + result = enumerateLayerProperties(_physicalDevice, &numLayerProperties, layerProperties); + + char indent = VK_NULL_HANDLE == _physicalDevice ? ' ' : '\t'; + BX_UNUSED(indent); + + BX_TRACE("%cLayer extensions (%d):" + , indent + , numLayerProperties + ); + for (uint32_t layer = 0; layer < numLayerProperties; ++layer) + { + BX_TRACE("%c\t%s (s: 0x%08x, i: 0x%08x), %s" + , indent + , layerProperties[layer].layerName + , layerProperties[layer].specVersion + , layerProperties[layer].implementationVersion + , layerProperties[layer].description + ); + uint32_t numExtensionProperties; + result = enumerateExtensionProperties(_physicalDevice + , layerProperties[layer].layerName + , &numExtensionProperties + , NULL + ); + + if (VK_SUCCESS == result + && 0 < numExtensionProperties) + { + VkExtensionProperties extensionProperties[64]; + numExtensionProperties = bx::uint32_min(numExtensionProperties, BX_COUNTOF(extensionProperties) ); + result = enumerateExtensionProperties(_physicalDevice + , layerProperties[layer].layerName + , &numExtensionProperties + , extensionProperties + ); + + for (uint32_t extension = 0; extension < numExtensionProperties; ++extension) + { + BX_TRACE("%c\t\t%s (s: 0x%08x)" + , indent + , extensionProperties[extension].extensionName + , extensionProperties[extension].specVersion + ); + } + } + } + } + } + + const char* getName(VkResult _result) + { + switch (_result) + { +#define VKENUM(_ty) case _ty: return #_ty + VKENUM(VK_SUCCESS); + VKENUM(VK_NOT_READY); + VKENUM(VK_TIMEOUT); + VKENUM(VK_EVENT_SET); + VKENUM(VK_EVENT_RESET); + VKENUM(VK_INCOMPLETE); + VKENUM(VK_ERROR_OUT_OF_HOST_MEMORY); + VKENUM(VK_ERROR_OUT_OF_DEVICE_MEMORY); + VKENUM(VK_ERROR_INITIALIZATION_FAILED); + VKENUM(VK_ERROR_DEVICE_LOST); + VKENUM(VK_ERROR_MEMORY_MAP_FAILED); + VKENUM(VK_ERROR_LAYER_NOT_PRESENT); + VKENUM(VK_ERROR_EXTENSION_NOT_PRESENT); + VKENUM(VK_ERROR_FEATURE_NOT_PRESENT); + VKENUM(VK_ERROR_INCOMPATIBLE_DRIVER); + VKENUM(VK_ERROR_TOO_MANY_OBJECTS); + VKENUM(VK_ERROR_FORMAT_NOT_SUPPORTED); + VKENUM(VK_ERROR_SURFACE_LOST_KHR); + VKENUM(VK_ERROR_NATIVE_WINDOW_IN_USE_KHR); + VKENUM(VK_SUBOPTIMAL_KHR); + VKENUM(VK_ERROR_OUT_OF_DATE_KHR); + VKENUM(VK_ERROR_INCOMPATIBLE_DISPLAY_KHR); + VKENUM(VK_ERROR_VALIDATION_FAILED_EXT); +#undef VKENUM + default: break; + } + + BX_WARN(false, "Unknown VkResult? %x", _result); + return ""; + } + + void setImageMemoryBarrier(VkCommandBuffer _commandBuffer, VkImage _image, VkImageLayout _oldLayout, VkImageLayout _newLayout) + { + VkAccessFlags srcAccessMask = 0; + VkAccessFlags dstAccessMask = 0; + VkImageAspectFlags aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; + + switch (_oldLayout) + { + case VK_IMAGE_LAYOUT_UNDEFINED: +// srcAccessMask |= VK_ACCESS_HOST_WRITE_BIT | VK_ACCESS_TRANSFER_WRITE_BIT; + break; + + case VK_IMAGE_LAYOUT_GENERAL: + break; + + case VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL: + srcAccessMask |= VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT; + break; + + case VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL: + srcAccessMask |= VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT; + break; + + case VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL: + break; + + case VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL: + srcAccessMask |= VK_ACCESS_SHADER_READ_BIT; + break; + + case VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL: + srcAccessMask |= VK_ACCESS_TRANSFER_READ_BIT; + break; + + case VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL: + break; + + case VK_IMAGE_LAYOUT_PREINITIALIZED: + break; + + case VK_IMAGE_LAYOUT_PRESENT_SRC_KHR: + srcAccessMask |= VK_ACCESS_MEMORY_READ_BIT; + break; + + default: + break; + } + + switch (_newLayout) + { + case VK_IMAGE_LAYOUT_UNDEFINED: + break; + + case VK_IMAGE_LAYOUT_GENERAL: + break; + + case VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL: + dstAccessMask |= VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT; + break; + + case VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL: + dstAccessMask |= VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT; + aspectMask = VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT; + break; + + case VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL: + break; + + case VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL: + dstAccessMask |= VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_INPUT_ATTACHMENT_READ_BIT; + break; + + case VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL: + dstAccessMask |= VK_ACCESS_SHADER_READ_BIT; + break; + + case VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL: + dstAccessMask |= VK_ACCESS_TRANSFER_READ_BIT; + break; + + case VK_IMAGE_LAYOUT_PREINITIALIZED: + break; + + case VK_IMAGE_LAYOUT_PRESENT_SRC_KHR: + dstAccessMask |= VK_ACCESS_MEMORY_READ_BIT; + break; + + default: + break; + } + + VkImageMemoryBarrier imb; + imb.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; + imb.pNext = NULL; + imb.srcAccessMask = srcAccessMask; + imb.dstAccessMask = dstAccessMask; + imb.oldLayout = _oldLayout; + imb.newLayout = _newLayout; + imb.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; + imb.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; + imb.image = _image; + imb.subresourceRange.aspectMask = aspectMask; + imb.subresourceRange.baseMipLevel = 0; + imb.subresourceRange.levelCount = 1; + imb.subresourceRange.baseArrayLayer = 0; + imb.subresourceRange.layerCount = 1; + vkCmdPipelineBarrier(_commandBuffer + , VK_PIPELINE_STAGE_ALL_COMMANDS_BIT + , VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT + , 0 + , 0 + , NULL + , 0 + , NULL + , 1 + , &imb + ); + } + + struct RendererContextVK : public RendererContextI + { + RendererContextVK() + : m_allocatorCb(NULL) + , m_renderdocdll(NULL) + , m_vulkan1dll(NULL) + , m_maxAnisotropy(1) + , m_depthClamp(false) + , m_wireframe(false) + { + } + + ~RendererContextVK() + { + } + + bool init() + { + BX_UNUSED(s_checkMsaa, s_textureAddress); + + struct ErrorState + { + enum Enum + { + Default, + LoadedVulkan1, + InstanceCreated, + DeviceCreated, + RenderPassCreated, + SurfaceCreated, + SwapchainCreated, + CommandBuffersCreated, + DescriptorCreated, + }; + }; + + ErrorState::Enum errorState = ErrorState::Default; + + m_fbh.idx = invalidHandle; + bx::memSet(m_uniforms, 0, sizeof(m_uniforms) ); + bx::memSet(&m_resolution, 0, sizeof(m_resolution) ); + + bool imported = true; + VkResult result; + m_qfiGraphics = UINT32_MAX; + m_qfiCompute = UINT32_MAX; + + m_renderdocdll = loadRenderDoc(); + m_vulkan1dll = bx::dlopen( +#if BX_PLATFORM_WINDOWS + "vulkan-1.dll" +#elif BX_PLATFORM_ANDROID + "libvulkan.so" +#else + "libvulkan.so.1" +#endif // BX_PLATFORM_* + ); + + if (NULL == m_vulkan1dll) + { + BX_TRACE("Failed to load vulkan dynamic library."); + goto error; + } + + errorState = ErrorState::LoadedVulkan1; + + BX_TRACE("Shared library functions:"); +#define VK_IMPORT_FUNC(_optional, _func) \ + _func = (PFN_##_func)bx::dlsym(m_vulkan1dll, #_func); \ + BX_TRACE("\t%p " #_func, _func); \ + imported &= _optional || NULL != _func +VK_IMPORT +#undef VK_IMPORT_FUNC + + if (!imported) + { + BX_TRACE("Failed to load shared library functions."); + goto error; + } + + { + dumpExtensions(); + + VkApplicationInfo appInfo; + appInfo.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO; + appInfo.pNext = NULL; + appInfo.pApplicationName = "bgfx"; + appInfo.applicationVersion = BGFX_API_VERSION; + appInfo.pEngineName = "bgfx"; + appInfo.engineVersion = BGFX_API_VERSION; + appInfo.apiVersion = VK_MAKE_VERSION(1, 0, 0); //VK_HEADER_VERSION); + + const char* enabledLayerNames[] = + { +#if BGFX_CONFIG_DEBUG +// "VK_LAYER_GOOGLE_threading", +// "VK_LAYER_GOOGLE_unique_objects", +// "VK_LAYER_LUNARG_device_limits", +// "VK_LAYER_LUNARG_standard_validation", +// "VK_LAYER_LUNARG_image", +// "VK_LAYER_LUNARG_mem_tracker", +// "VK_LAYER_LUNARG_object_tracker", +// "VK_LAYER_LUNARG_parameter_validation", +// "VK_LAYER_LUNARG_swapchain", +// "VK_LAYER_LUNARG_vktrace", +// "VK_LAYER_RENDERDOC_Capture", +#endif // BGFX_CONFIG_DEBUG + /*not used*/ "" + }; + + const char* enabledExtension[] = + { + VK_KHR_SURFACE_EXTENSION_NAME, + KHR_SURFACE_EXTENSION_NAME, +#if BGFX_CONFIG_DEBUG + VK_EXT_DEBUG_REPORT_EXTENSION_NAME, +#endif // BGFX_CONFIG_DEBUG + /*not used*/ "" + }; + + VkInstanceCreateInfo ici; + ici.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO; + ici.pNext = NULL; + ici.flags = 0; + ici.pApplicationInfo = &appInfo; + ici.enabledLayerCount = BX_COUNTOF(enabledLayerNames) - 1; + ici.ppEnabledLayerNames = enabledLayerNames; + ici.enabledExtensionCount = BX_COUNTOF(enabledExtension) - 1; + ici.ppEnabledExtensionNames = enabledExtension; + + if (BX_ENABLED(BGFX_CONFIG_DEBUG) ) + { + m_allocatorCb = &s_allocationCb; + BX_UNUSED(s_allocationCb); + } + + result = vkCreateInstance(&ici + , m_allocatorCb + , &m_instance + ); + } + + if (VK_SUCCESS != result) + { + BX_TRACE("vkCreateInstance failed %d: %s.", result, getName(result) ); + goto error; + } + + errorState = ErrorState::InstanceCreated; + + BX_TRACE("Instance functions:"); +#define VK_IMPORT_INSTANCE_FUNC(_optional, _func) \ + _func = (PFN_##_func)vkGetInstanceProcAddr(m_instance, #_func); \ + BX_TRACE("\t%p " #_func, _func); \ + imported &= _optional || NULL != _func +VK_IMPORT_INSTANCE +#undef VK_IMPORT_INSTANCE_FUNC + + if (!imported) + { + BX_TRACE("Failed to load instance functions."); + goto error; + } + + m_debugReportCallback = VK_NULL_HANDLE; + if (BX_ENABLED(BGFX_CONFIG_DEBUG) ) + { + VkDebugReportCallbackCreateInfoEXT drcb; + drcb.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT; + drcb.pNext = NULL; + drcb.pfnCallback = debugReportCb; + drcb.pUserData = NULL; + drcb.flags = 0 + | VK_DEBUG_REPORT_ERROR_BIT_EXT + | VK_DEBUG_REPORT_WARNING_BIT_EXT + ; + result = vkCreateDebugReportCallbackEXT(m_instance + , &drcb + , m_allocatorCb + , &m_debugReportCallback + ); + BX_WARN(VK_SUCCESS == result, "vkCreateDebugReportCallbackEXT failed %d: %s.", result, getName(result) ); + } + + { + BX_TRACE("---"); + + uint32_t numPhysicalDevices; + result = vkEnumeratePhysicalDevices(m_instance + , &numPhysicalDevices + , NULL + ); + + if (VK_SUCCESS != result) + { + BX_TRACE("vkEnumeratePhysicalDevices failed %d: %s.", result, getName(result) ); + goto error; + } + + VkPhysicalDevice physicalDevices[4]; + numPhysicalDevices = bx::uint32_min(numPhysicalDevices, BX_COUNTOF(physicalDevices) ); + result = vkEnumeratePhysicalDevices(m_instance + , &numPhysicalDevices + , physicalDevices + ); + + if (VK_SUCCESS != result) + { + BX_TRACE("vkEnumeratePhysicalDevices failed %d: %s.", result, getName(result) ); + goto error; + } + + m_physicalDevice = VK_NULL_HANDLE; + + for (uint32_t ii = 0; ii < numPhysicalDevices; ++ii) + { + VkPhysicalDeviceProperties pdp; + vkGetPhysicalDeviceProperties(physicalDevices[ii], &pdp); + BX_TRACE("Physical device %d:", ii); + BX_TRACE("\t Name: %s", pdp.deviceName); + BX_TRACE("\t API version: %x", pdp.apiVersion); + BX_TRACE("\tDriver version: %x", pdp.driverVersion); + BX_TRACE("\t VendorId: %x", pdp.vendorID); + BX_TRACE("\t DeviceId: %x", pdp.deviceID); + BX_TRACE("\t Type: %d", pdp.deviceType); + + g_caps.gpu[ii].vendorId = uint16_t(pdp.vendorID); + g_caps.gpu[ii].deviceId = uint16_t(pdp.deviceID); + ++g_caps.numGPUs; + + if ( (BGFX_PCI_ID_NONE != g_caps.vendorId || 0 != g_caps.deviceId) + && (BGFX_PCI_ID_NONE == g_caps.vendorId || pdp.vendorID == g_caps.vendorId) + && (0 == g_caps.deviceId || pdp.deviceID == g_caps.deviceId) ) + { + m_physicalDevice = physicalDevices[ii]; + } + + VkPhysicalDeviceMemoryProperties pdmp; + vkGetPhysicalDeviceMemoryProperties(physicalDevices[ii], &pdmp); + + BX_TRACE("\tMemory type count: %d", pdmp.memoryTypeCount); + for (uint32_t jj = 0; jj < pdmp.memoryTypeCount; ++jj) + { + BX_TRACE("\t%3d: flags 0x%08x, index %d" + , jj + , pdmp.memoryTypes[jj].propertyFlags + , pdmp.memoryTypes[jj].heapIndex + ); + } + + BX_TRACE("\tMemory heap count: %d", pdmp.memoryHeapCount); + for (uint32_t jj = 0; jj < pdmp.memoryHeapCount; ++jj) + { + char size[16]; + bx::prettify(size, BX_COUNTOF(size), pdmp.memoryHeaps[jj].size); + BX_TRACE("\t%3d: flags 0x%08x, size %10s" + , jj + , pdmp.memoryHeaps[jj].flags + , size + ); + } + + dumpExtensions(physicalDevices[ii]); + } + + if (VK_NULL_HANDLE == m_physicalDevice) + { + m_physicalDevice = physicalDevices[0]; + } + + vkGetPhysicalDeviceProperties(m_physicalDevice, &m_deviceProperties); + g_caps.vendorId = uint16_t(m_deviceProperties.vendorID); + g_caps.deviceId = uint16_t(m_deviceProperties.deviceID); + + + { +// VkFormatProperties fp; +// vkGetPhysicalDeviceFormatProperties(m_physicalDevice, fmt, &fp); + + struct ImageTest + { + VkImageType type; + VkImageUsageFlags usage; + VkImageCreateFlags flags; + uint32_t formatCaps[2]; + }; + + const ImageTest imageTest[] = + { + { VK_IMAGE_TYPE_2D, VK_IMAGE_USAGE_SAMPLED_BIT, 0, { BGFX_CAPS_FORMAT_TEXTURE_2D, BGFX_CAPS_FORMAT_TEXTURE_2D_SRGB } }, + { VK_IMAGE_TYPE_3D, VK_IMAGE_USAGE_SAMPLED_BIT, 0, { BGFX_CAPS_FORMAT_TEXTURE_3D, BGFX_CAPS_FORMAT_TEXTURE_3D_SRGB } }, + { VK_IMAGE_TYPE_2D, VK_IMAGE_USAGE_SAMPLED_BIT, VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT, { BGFX_CAPS_FORMAT_TEXTURE_CUBE, BGFX_CAPS_FORMAT_TEXTURE_CUBE_SRGB } }, + { VK_IMAGE_TYPE_2D, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, 0, { BGFX_CAPS_FORMAT_TEXTURE_FRAMEBUFFER, BGFX_CAPS_FORMAT_TEXTURE_FRAMEBUFFER } }, + }; + + for (uint32_t ii = 0; ii < TextureFormat::Count; ++ii) + { + uint8_t support = BGFX_CAPS_FORMAT_TEXTURE_NONE; + + const bool depth = isDepth(TextureFormat::Enum(ii) ); + VkFormat fmt = depth + ? s_textureFormat[ii].m_fmtDsv + : s_textureFormat[ii].m_fmt + ; + + for (uint32_t jj = 0, num = depth ? 1 : 2; jj < num; ++jj) + { + if (VK_FORMAT_UNDEFINED != fmt) + { + for (uint32_t test = 0; test < BX_COUNTOF(imageTest); ++test) + { + const ImageTest& it = imageTest[test]; + + VkImageFormatProperties ifp; + result = vkGetPhysicalDeviceImageFormatProperties(m_physicalDevice + , fmt + , it.type + , VK_IMAGE_TILING_OPTIMAL + , it.usage + , it.flags + , &ifp + ); + + if (VK_SUCCESS == result) + { + support |= it.formatCaps[jj]; + if (VK_SAMPLE_COUNT_1_BIT < ifp.sampleCounts) + { + support |= BGFX_CAPS_FORMAT_TEXTURE_MSAA; + } + } + } + } + + fmt = s_textureFormat[ii].m_fmtSrgb; + } + + g_caps.formats[ii] = support; + } + } + + vkGetPhysicalDeviceMemoryProperties(m_physicalDevice, &m_memoryProperties); + } + + { + BX_TRACE("---"); + + uint32_t queueFamilyPropertyCount = 0; + vkGetPhysicalDeviceQueueFamilyProperties(m_physicalDevice + , &queueFamilyPropertyCount + , NULL + ); + + VkQueueFamilyProperties queueFamilyPropertices[10] = {}; + queueFamilyPropertyCount = bx::uint32_min(queueFamilyPropertyCount, BX_COUNTOF(queueFamilyPropertices) ); + vkGetPhysicalDeviceQueueFamilyProperties(m_physicalDevice + , &queueFamilyPropertyCount + , queueFamilyPropertices + ); + + for (uint32_t ii = 0; ii < queueFamilyPropertyCount; ++ii) + { + const VkQueueFamilyProperties& qfp = queueFamilyPropertices[ii]; + BX_UNUSED(qfp); + BX_TRACE("Queue family property %d:", ii); + BX_TRACE("\t Queue flags: 0x%08x", qfp.queueFlags); + BX_TRACE("\t Queue count: %d", qfp.queueCount); + BX_TRACE("\tTS valid bits: 0x%08x", qfp.timestampValidBits); + BX_TRACE("\t Min image: %d x %d x %d" + , qfp.minImageTransferGranularity.width + , qfp.minImageTransferGranularity.height + , qfp.minImageTransferGranularity.depth + ); + } + + for (uint32_t ii = 0; ii < queueFamilyPropertyCount; ++ii) + { + const VkQueueFamilyProperties& qfp = queueFamilyPropertices[ii]; + if (UINT32_MAX == m_qfiGraphics + && VK_QUEUE_GRAPHICS_BIT & qfp.queueFlags) + { + m_qfiGraphics = ii; + } + + if (UINT32_MAX == m_qfiCompute + && VK_QUEUE_COMPUTE_BIT & qfp.queueFlags) + { + m_qfiCompute = ii; + } + + if (UINT32_MAX != m_qfiGraphics + && UINT32_MAX != m_qfiCompute) + { + break; + } + } + + if (UINT32_MAX == m_qfiGraphics) + { + BX_TRACE("Unable to find graphics queue."); + goto error; + } + } + + { + const char* enabledLayerNames[] = + { +#if BGFX_CONFIG_DEBUG + "VK_LAYER_GOOGLE_threading", +// "VK_LAYER_GOOGLE_unique_objects", + "VK_LAYER_LUNARG_device_limits", +// "VK_LAYER_LUNARG_standard_validation", + "VK_LAYER_LUNARG_image", + "VK_LAYER_LUNARG_object_tracker", + "VK_LAYER_LUNARG_parameter_validation", + "VK_LAYER_LUNARG_swapchain", +// "VK_LAYER_LUNARG_vktrace", +// "VK_LAYER_RENDERDOC_Capture", +#endif // BGFX_CONFIG_DEBUG + /*not used*/ "" + }; + + const char* enabledExtension[] = + { + VK_KHR_SWAPCHAIN_EXTENSION_NAME, +// "VK_LUNARG_DEBUG_MARKER", + /*not used*/ "" + }; + + float queuePriorities[1] = { 0.0f }; + VkDeviceQueueCreateInfo dcqi; + dcqi.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO; + dcqi.pNext = NULL; + dcqi.flags = 0; + dcqi.queueFamilyIndex = m_qfiGraphics; + dcqi.queueCount = 1; + dcqi.pQueuePriorities = queuePriorities; + + VkDeviceCreateInfo dci; + dci.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO; + dci.pNext = NULL; + dci.flags = 0; + dci.queueCreateInfoCount = 1; + dci.pQueueCreateInfos = &dcqi; + dci.enabledLayerCount = BX_COUNTOF(enabledLayerNames) - 1; + dci.ppEnabledLayerNames = enabledLayerNames; + dci.enabledExtensionCount = BX_COUNTOF(enabledExtension) - 1; + dci.ppEnabledExtensionNames = enabledExtension; + dci.pEnabledFeatures = NULL; + + result = vkCreateDevice(m_physicalDevice + , &dci + , m_allocatorCb + , &m_device + ); + + if (VK_SUCCESS != result) + { + BX_TRACE("vkCreateDevice failed %d: %s.", result, getName(result) ); + goto error; + } + } + + errorState = ErrorState::DeviceCreated; + + BX_TRACE("Device functions:"); +#define VK_IMPORT_DEVICE_FUNC(_optional, _func) \ + _func = (PFN_##_func)vkGetDeviceProcAddr(m_device, #_func); \ + BX_TRACE("\t%p " #_func, _func); \ + imported &= _optional || NULL != _func +VK_IMPORT_DEVICE +#undef VK_IMPORT_DEVICE_FUNC + + if (!imported) + { + BX_TRACE("Failed to load device functions."); + goto error; + } + + vkGetDeviceQueue(m_device, m_qfiGraphics, 0, &m_queueGraphics); + vkGetDeviceQueue(m_device, m_qfiCompute, 0, &m_queueCompute); + + m_backBufferDepthStencilFormat = + VK_FORMAT_D32_SFLOAT_S8_UINT + // VK_FORMAT_D24_UNORM_S8_UINT + ; + + { + m_sci.imageFormat = VK_FORMAT_B8G8R8A8_UNORM; + + VkAttachmentDescription ad[2]; + ad[0].flags = 0; + ad[0].format = m_sci.imageFormat; + ad[0].samples = VK_SAMPLE_COUNT_1_BIT; + ad[0].loadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE; + ad[0].storeOp = VK_ATTACHMENT_STORE_OP_STORE; + ad[0].stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE; + ad[0].stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE; + ad[0].initialLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; + ad[0].finalLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; + ad[1].flags = 0; + ad[1].format = m_backBufferDepthStencilFormat; + ad[1].samples = VK_SAMPLE_COUNT_1_BIT; + ad[1].loadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE; + ad[1].storeOp = VK_ATTACHMENT_STORE_OP_STORE; + ad[1].stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE; + ad[1].stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE; + ad[1].initialLayout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL; + ad[1].finalLayout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL; + + VkAttachmentReference colorAr[1]; + colorAr[0].attachment = 0; + colorAr[0].layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; + + VkAttachmentReference resolveAr[1]; + resolveAr[0].attachment = VK_ATTACHMENT_UNUSED; + resolveAr[0].layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; + + VkAttachmentReference depthAr[1]; + depthAr[0].attachment = 1; + depthAr[0].layout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL; + + VkSubpassDescription sd[1]; + sd[0].flags = 0; + sd[0].pipelineBindPoint = VK_PIPELINE_BIND_POINT_GRAPHICS; + sd[0].inputAttachmentCount = 0; + sd[0].pInputAttachments = NULL; + sd[0].colorAttachmentCount = BX_COUNTOF(colorAr); + sd[0].pColorAttachments = colorAr; + sd[0].pResolveAttachments = resolveAr; + sd[0].pDepthStencilAttachment = depthAr; + sd[0].preserveAttachmentCount = 0; + sd[0].pPreserveAttachments = NULL; + + VkRenderPassCreateInfo rpi; + rpi.sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO; + rpi.pNext = NULL; + rpi.flags = 0; + rpi.attachmentCount = BX_COUNTOF(ad); + rpi.pAttachments = ad; + rpi.subpassCount = BX_COUNTOF(sd); + rpi.pSubpasses = sd; + rpi.dependencyCount = 0; + rpi.pDependencies = NULL; + + result = vkCreateRenderPass(m_device, &rpi, m_allocatorCb, &m_renderPass); + + if (VK_SUCCESS != result) + { + BX_TRACE("vkCreateRenderPass failed %d: %s.", result, getName(result) ); + goto error; + } + } + + errorState = ErrorState::RenderPassCreated; + +#if BX_PLATFORM_WINDOWS + { + VkWin32SurfaceCreateInfoKHR sci; + sci.sType = VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR; + sci.pNext = NULL; + sci.flags = 0; + sci.hinstance = (HINSTANCE)GetModuleHandle(NULL); + sci.hwnd = (HWND)g_platformData.nwh; + result = vkCreateWin32SurfaceKHR(m_instance, &sci, m_allocatorCb, &m_surface); + } +#elif BX_PLATFORM_ANDROID + { + VkAndroidSurfaceCreateInfoKHR sci; + sci.sType = VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR; + sci.pNext = NULL; + sci.flags = 0; + result = vkCreateAndroidSurfaceKHR(m_instance, &sci, m_allocatorCb, &m_surface); + } +#elif BX_PLATFORM_LINUX + { + if (NULL != vkCreateXlibSurfaceKHR) + { + VkXlibSurfaceCreateInfoKHR sci; + sci.sType = VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR; + sci.pNext = NULL; + sci.flags = 0; + sci.dpy = (Display*)g_platformData.ndt; + sci.window = (Window)g_platformData.nwh; + result = vkCreateXlibSurfaceKHR(m_instance, &sci, m_allocatorCb, &m_surface); + } + else + { + result = VK_RESULT_MAX_ENUM; + } + + if (VK_SUCCESS != result) + { + VkXcbSurfaceCreateInfoKHR sci; + sci.sType = VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR; + sci.pNext = NULL; + sci.flags = 0; + sci.connection = (xcb_connection_t*)g_platformData.ndt; + union { void* ptr; xcb_window_t window; } cast = { g_platformData.nwh }; + sci.window = cast.window; + result = vkCreateXcbSurfaceKHR(m_instance, &sci, m_allocatorCb, &m_surface); + } + } +#else +# error "Figure out KHR surface..." +#endif // BX_PLATFORM_ + + if (VK_SUCCESS != result) + { + BX_TRACE("vkCreateSurfaceKHR failed %d: %s.", result, getName(result) ); + goto error; + } + + errorState = ErrorState::SurfaceCreated; + + { + VkBool32 surfaceSupported; + result = vkGetPhysicalDeviceSurfaceSupportKHR(m_physicalDevice, m_qfiGraphics, m_surface, &surfaceSupported); + + if (VK_SUCCESS != result) + { + BX_TRACE("vkGetPhysicalDeviceSurfaceSupportKHR failed %d: %s.", result, getName(result) ); + goto error; + } + + VkSurfaceCapabilitiesKHR surfaceCapabilities; + result = vkGetPhysicalDeviceSurfaceCapabilitiesKHR(m_physicalDevice, m_surface, &surfaceCapabilities); + + if (VK_SUCCESS != result) + { + BX_TRACE("vkGetPhysicalDeviceSurfaceCapabilitiesKHR failed %d: %s.", result, getName(result) ); + goto error; + } + + uint32_t numSurfaceFormats; + result = vkGetPhysicalDeviceSurfaceFormatsKHR(m_physicalDevice, m_surface, &numSurfaceFormats, NULL); + + if (VK_SUCCESS != result) + { + BX_TRACE("vkGetPhysicalDeviceSurfaceFormatsKHR failed %d: %s.", result, getName(result) ); + goto error; + } + + VkSurfaceFormatKHR surfaceFormats[10]; + numSurfaceFormats = bx::uint32_min(numSurfaceFormats, BX_COUNTOF(surfaceFormats) ); + vkGetPhysicalDeviceSurfaceFormatsKHR(m_physicalDevice, m_surface, &numSurfaceFormats, surfaceFormats); + + // find the best match... + uint32_t surfaceFormatIdx = 0; + + uint32_t numPresentModes; + result = vkGetPhysicalDeviceSurfacePresentModesKHR(m_physicalDevice, m_surface, &numPresentModes, NULL); + if (VK_SUCCESS != result) + { + BX_TRACE("vkGetPhysicalDeviceSurfacePresentModesKHR failed %d: %s.", result, getName(result) ); + goto error; + } + + VkPresentModeKHR presentModes[10]; + numPresentModes = bx::uint32_min(numPresentModes, BX_COUNTOF(presentModes) ); + vkGetPhysicalDeviceSurfacePresentModesKHR(m_physicalDevice, m_surface, &numPresentModes, presentModes); + + // find the best match... + uint32_t presentModeIdx = 0; + + m_sci.sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR; + m_sci.pNext = NULL; + m_sci.flags = 0; + m_sci.surface = m_surface; + m_sci.minImageCount = BX_COUNTOF(m_backBufferColorImage); + m_sci.imageFormat = surfaceFormats[surfaceFormatIdx].format; + m_sci.imageColorSpace = surfaceFormats[surfaceFormatIdx].colorSpace; + m_sci.imageExtent.width = 1280; + m_sci.imageExtent.height = 720; + m_sci.imageArrayLayers = 1; + m_sci.imageUsage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT; + m_sci.imageSharingMode = VK_SHARING_MODE_EXCLUSIVE; + m_sci.queueFamilyIndexCount = 0; + m_sci.pQueueFamilyIndices = NULL; + m_sci.preTransform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR; + m_sci.compositeAlpha = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR; + m_sci.presentMode = presentModes[presentModeIdx]; + m_sci.clipped = VK_TRUE; + m_sci.oldSwapchain = VK_NULL_HANDLE; + result = vkCreateSwapchainKHR(m_device, &m_sci, m_allocatorCb, &m_swapchain); + + if (VK_SUCCESS != result) + { + BX_TRACE("vkCreateSwapchainKHR failed %d: %s.", result, getName(result) ); + goto error; + } + + uint32_t numSwapchainImages; + result = vkGetSwapchainImagesKHR(m_device, m_swapchain, &numSwapchainImages, NULL); + + if (VK_SUCCESS != result) + { + BX_TRACE("vkGetSwapchainImagesKHR failed %d: %s.", result, getName(result) ); + goto error; + } + + if (numSwapchainImages < m_sci.minImageCount) + { + BX_TRACE("vkGetSwapchainImagesKHR: numSwapchainImages %d, minImageCount %d." + , numSwapchainImages + , m_sci.minImageCount + ); + goto error; + } + + numSwapchainImages = m_sci.minImageCount; + result = vkGetSwapchainImagesKHR(m_device, m_swapchain, &numSwapchainImages, &m_backBufferColorImage[0]); + + if (VK_SUCCESS != result) + { + BX_TRACE("vkGetSwapchainImagesKHR failed %d: %s.", result, getName(result) ); + goto error; + } + + for (uint32_t ii = 0; ii < BX_COUNTOF(m_backBufferColorImageView); ++ii) + { + m_backBufferColorImageView[ii] = VK_NULL_HANDLE; + m_backBufferColor[ii] = VK_NULL_HANDLE; + } + + VkImageCreateInfo ici; + ici.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO; + ici.pNext = NULL; + ici.flags = 0; + ici.imageType = VK_IMAGE_TYPE_2D; + ici.format = m_backBufferDepthStencilFormat; + ici.extent.width = m_sci.imageExtent.width; + ici.extent.height = m_sci.imageExtent.height; + ici.extent.depth = 1; + ici.mipLevels = 1; + ici.arrayLayers = 1; + ici.samples = VK_SAMPLE_COUNT_1_BIT; + ici.tiling = VK_IMAGE_TILING_OPTIMAL; + ici.usage = 0 + | VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT + | VK_IMAGE_USAGE_TRANSFER_SRC_BIT + ; + ici.sharingMode = VK_SHARING_MODE_EXCLUSIVE; + ici.queueFamilyIndexCount = 0; //m_sci.queueFamilyIndexCount; + ici.pQueueFamilyIndices = NULL; //m_sci.pQueueFamilyIndices; + ici.initialLayout = VK_IMAGE_LAYOUT_PREINITIALIZED; + result = vkCreateImage(m_device, &ici, m_allocatorCb, &m_backBufferDepthStencilImage); + + if (VK_SUCCESS != result) + { + BX_TRACE("vkCreateImage failed %d: %s.", result, getName(result) ); + goto error; + } + + VkMemoryRequirements mr; + vkGetImageMemoryRequirements(m_device, m_backBufferDepthStencilImage, &mr); + + VkMemoryAllocateInfo ma; + ma.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO; + ma.pNext = NULL; + ma.allocationSize = mr.size; + ma.memoryTypeIndex = selectMemoryType(mr.memoryTypeBits + , VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT + ); + result = vkAllocateMemory(m_device + , &ma + , m_allocatorCb + , &m_backBufferDepthStencilMemory + ); + + if (VK_SUCCESS != result) + { + BX_TRACE("vkAllocateMemory failed %d: %s.", result, getName(result) ); + goto error; + } + + result = vkBindImageMemory(m_device, m_backBufferDepthStencilImage, m_backBufferDepthStencilMemory, 0); + + if (VK_SUCCESS != result) + { + BX_TRACE("vkBindImageMemory failed %d: %s.", result, getName(result) ); + goto error; + } + + VkImageViewCreateInfo ivci; + ivci.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO; + ivci.pNext = NULL; + ivci.flags = 0; + ivci.image = m_backBufferDepthStencilImage; + ivci.viewType = VK_IMAGE_VIEW_TYPE_2D; + ivci.format = m_backBufferDepthStencilFormat; + ivci.components.r = VK_COMPONENT_SWIZZLE_IDENTITY; + ivci.components.g = VK_COMPONENT_SWIZZLE_IDENTITY; + ivci.components.b = VK_COMPONENT_SWIZZLE_IDENTITY; + ivci.components.a = VK_COMPONENT_SWIZZLE_IDENTITY; + ivci.subresourceRange.aspectMask = 0 + | VK_IMAGE_ASPECT_DEPTH_BIT + | VK_IMAGE_ASPECT_STENCIL_BIT + ; + ivci.subresourceRange.baseMipLevel = 0; + ivci.subresourceRange.levelCount = 1; + ivci.subresourceRange.baseArrayLayer = 0; + ivci.subresourceRange.layerCount = 1; + result = vkCreateImageView(m_device, &ivci, m_allocatorCb, &m_backBufferDepthStencilImageView); + + if (VK_SUCCESS != result) + { + BX_TRACE("vkCreateImageView failed %d: %s.", result, getName(result) ); + goto error; + } + + ::VkImageView attachments[] = + { + VK_NULL_HANDLE, + m_backBufferDepthStencilImageView, + }; + + VkFramebufferCreateInfo fci; + fci.sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO; + fci.pNext = NULL; + fci.flags = 0; + fci.renderPass = m_renderPass; + fci.attachmentCount = BX_COUNTOF(attachments); + fci.pAttachments = attachments; + fci.width = m_sci.imageExtent.width; + fci.height = m_sci.imageExtent.height; + fci.layers = 1; + + VkSemaphoreCreateInfo sci; + sci.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO; + sci.pNext = NULL; + sci.flags = 0; + + for (uint32_t ii = 0; ii < numSwapchainImages; ++ii) + { + ivci.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO; + ivci.pNext = NULL; + ivci.flags = 0; + ivci.image = m_backBufferColorImage[ii]; + ivci.viewType = VK_IMAGE_VIEW_TYPE_2D; + ivci.format = m_sci.imageFormat; + ivci.components.r = VK_COMPONENT_SWIZZLE_IDENTITY; + ivci.components.g = VK_COMPONENT_SWIZZLE_IDENTITY; + ivci.components.b = VK_COMPONENT_SWIZZLE_IDENTITY; + ivci.components.a = VK_COMPONENT_SWIZZLE_IDENTITY; + ivci.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; + ivci.subresourceRange.baseMipLevel = 0; + ivci.subresourceRange.levelCount = 1; + ivci.subresourceRange.baseArrayLayer = 0; + ivci.subresourceRange.layerCount = 1; + + result = vkCreateImageView(m_device, &ivci, m_allocatorCb, &m_backBufferColorImageView[ii]); + + if (VK_SUCCESS != result) + { + BX_TRACE("vkCreateImageView failed %d: %s.", result, getName(result) ); + goto error; + } + + attachments[0] = m_backBufferColorImageView[ii]; + result = vkCreateFramebuffer(m_device, &fci, m_allocatorCb, &m_backBufferColor[ii]); + + if (VK_SUCCESS != result) + { + BX_TRACE("vkCreateFramebuffer failed %d: %s.", result, getName(result) ); + goto error; + } + + result = vkCreateSemaphore(m_device, &sci, m_allocatorCb, &m_presentDone[ii]); + + if (VK_SUCCESS != result) + { + BX_TRACE("vkCreateSemaphore failed %d: %s.", result, getName(result) ); + goto error; + } + + sci.flags = 0; + } + } + + errorState = ErrorState::SwapchainCreated; + + { + VkFenceCreateInfo fci; + fci.sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO; + fci.pNext = NULL; + fci.flags = 0; + result = vkCreateFence(m_device, &fci, m_allocatorCb, &m_fence); + + if (VK_SUCCESS != result) + { + BX_TRACE("vkCreateFence failed %d: %s.", result, getName(result) ); + goto error; + } + + VkCommandPoolCreateInfo cpci; + cpci.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO; + cpci.pNext = NULL; + cpci.flags = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT; + cpci.queueFamilyIndex = m_qfiGraphics; + result = vkCreateCommandPool(m_device, &cpci, m_allocatorCb, &m_commandPool); + + if (VK_SUCCESS != result) + { + vkDestroy(m_fence); + BX_TRACE("vkCreateCommandPool failed %d: %s.", result, getName(result) ); + goto error; + } + + VkCommandBufferAllocateInfo cbai; + cbai.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO; + cbai.pNext = NULL; + cbai.commandPool = m_commandPool; + cbai.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY; + cbai.commandBufferCount = BX_COUNTOF(m_commandBuffers); + + result = vkAllocateCommandBuffers(m_device, &cbai, m_commandBuffers); + + if (VK_SUCCESS != result) + { + vkDestroy(m_commandPool); + vkDestroy(m_fence); + BX_TRACE("vkAllocateCommandBuffers failed %d: %s.", result, getName(result) ); + goto error; + } + + VkCommandBufferBeginInfo cbbi; + cbbi.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO; + cbbi.pNext = NULL; + cbbi.flags = 0; + cbbi.pInheritanceInfo = NULL; + + VkCommandBuffer commandBuffer = m_commandBuffers[0]; + VK_CHECK(vkBeginCommandBuffer(commandBuffer, &cbbi) ); + + VkRenderPassBeginInfo rpbi; + rpbi.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO; + rpbi.pNext = NULL; + rpbi.renderPass = m_renderPass; + rpbi.renderArea.offset.x = 0; + rpbi.renderArea.offset.y = 0; + rpbi.renderArea.extent = m_sci.imageExtent; + rpbi.clearValueCount = 0; + rpbi.pClearValues = NULL; + + setImageMemoryBarrier(commandBuffer + , m_backBufferDepthStencilImage + , VK_IMAGE_LAYOUT_UNDEFINED + , VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL + ); + + for (uint32_t ii = 0; ii < BX_COUNTOF(m_backBufferColorImage); ++ii) + { + setImageMemoryBarrier(commandBuffer + , m_backBufferColorImage[ii] + , VK_IMAGE_LAYOUT_UNDEFINED + , VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL + ); + + rpbi.framebuffer = m_backBufferColor[ii]; + vkCmdBeginRenderPass(commandBuffer, &rpbi, VK_SUBPASS_CONTENTS_INLINE); + vkCmdEndRenderPass(commandBuffer); + + setImageMemoryBarrier(commandBuffer + , m_backBufferColorImage[ii] + , VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL + , VK_IMAGE_LAYOUT_PRESENT_SRC_KHR + ); + } + + VK_CHECK(vkEndCommandBuffer(commandBuffer) ); + m_backBufferColorIdx = 0; + + kick(); + finishAll(); + + VK_CHECK(vkResetCommandPool(m_device, m_commandPool, 0) ); + } + + errorState = ErrorState::CommandBuffersCreated; + + { + VkDescriptorPoolSize dps[] = + { +// { VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, BGFX_CONFIG_MAX_TEXTURE_SAMPLERS }, + { VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 10<<10 }, +// { VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BGFX_CONFIG_MAX_TEXTURE_SAMPLERS }, + }; + + VkDescriptorSetLayoutBinding dslb[] = + { +// { DslBinding::CombinedImageSampler, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, BGFX_CONFIG_MAX_TEXTURE_SAMPLERS, VK_SHADER_STAGE_ALL, NULL }, + { DslBinding::UniformBuffer, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 1, VK_SHADER_STAGE_ALL, NULL }, +// { DslBinding::StorageBuffer, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BGFX_CONFIG_MAX_TEXTURE_SAMPLERS, VK_SHADER_STAGE_ALL, NULL }, + }; + + VkDescriptorPoolCreateInfo dpci; + dpci.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO; + dpci.pNext = NULL; + dpci.flags = VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT; + dpci.maxSets = 10<<10; + dpci.poolSizeCount = BX_COUNTOF(dps); + dpci.pPoolSizes = dps; + + result = vkCreateDescriptorPool(m_device, &dpci, m_allocatorCb, &m_descriptorPool); + + if (VK_SUCCESS != result) + { + BX_TRACE("vkCreateDescriptorPool failed %d: %s.", result, getName(result) ); + goto error; + } + + VkDescriptorSetLayoutCreateInfo dsl; + dsl.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO; + dsl.pNext = NULL; + dsl.flags = 0; + dsl.bindingCount = BX_COUNTOF(dslb); + dsl.pBindings = dslb; + result = vkCreateDescriptorSetLayout(m_device, &dsl, m_allocatorCb, &m_descriptorSetLayout); + + if (VK_SUCCESS != result) + { + BX_TRACE("vkCreateDescriptorSetLayout failed %d: %s.", result, getName(result) ); + goto error; + } + + VkPipelineLayoutCreateInfo pl; + pl.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO; + pl.pNext = NULL; + pl.flags = 0; + pl.setLayoutCount = 1; + pl.pSetLayouts = &m_descriptorSetLayout; + pl.pushConstantRangeCount = 0; + pl.pPushConstantRanges = NULL; + result = vkCreatePipelineLayout(m_device, &pl, m_allocatorCb, &m_pipelineLayout); + + if (VK_SUCCESS != result) + { + BX_TRACE("vkCreatePipelineLayout failed %d: %s.", result, getName(result) ); + goto error; + } + + VkPipelineCacheCreateInfo pcci; + pcci.sType = VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO; + pcci.pNext = NULL; + pcci.flags = 0; + pcci.initialDataSize = 0; + pcci.pInitialData = NULL; + result = vkCreatePipelineCache(m_device, &pcci, m_allocatorCb, &m_pipelineCache); + + if (VK_SUCCESS != result) + { + BX_TRACE("vkCreatePipelineCache failed %d: %s.", result, getName(result) ); + goto error; + } + } + + for (uint32_t ii = 0; ii < BX_COUNTOF(m_scratchBuffer); ++ii) + { + m_scratchBuffer[ii].create(BGFX_CONFIG_MAX_DRAW_CALLS*1024 + , 1024 //BGFX_CONFIG_MAX_TEXTURES + BGFX_CONFIG_MAX_SHADERS + BGFX_CONFIG_MAX_DRAW_CALLS + ); + } + + errorState = ErrorState::DescriptorCreated; + + return true; + + error: + BX_TRACE("errorState %d", errorState); + switch (errorState) + { + case ErrorState::DescriptorCreated: + vkDestroy(m_pipelineCache); + vkDestroy(m_pipelineLayout); + vkDestroy(m_descriptorSetLayout); + vkDestroy(m_descriptorPool); + + case ErrorState::CommandBuffersCreated: + vkFreeCommandBuffers(m_device, m_commandPool, BX_COUNTOF(m_commandBuffers), m_commandBuffers); + vkDestroy(m_commandPool); + vkDestroy(m_fence); + + case ErrorState::SwapchainCreated: + for (uint32_t ii = 0; ii < BX_COUNTOF(m_backBufferColorImageView); ++ii) + { + if (VK_NULL_HANDLE != m_backBufferColorImageView[ii]) + { + vkDestroy(m_backBufferColorImageView[ii]); + } + + if (VK_NULL_HANDLE != m_backBufferColor[ii]) + { + vkDestroy(m_backBufferColor[ii]); + } + + if (VK_NULL_HANDLE != m_presentDone[ii]) + { + vkDestroy(m_presentDone[ii]); + } + } + vkDestroy(m_swapchain); + + case ErrorState::SurfaceCreated: + vkDestroySurfaceKHR(m_instance, m_surface, m_allocatorCb); + + case ErrorState::RenderPassCreated: + vkDestroy(m_renderPass); + + case ErrorState::DeviceCreated: + vkDestroyDevice(m_device, m_allocatorCb); + + case ErrorState::InstanceCreated: + if (VK_NULL_HANDLE != m_debugReportCallback) + { + vkDestroyDebugReportCallbackEXT(m_instance, m_debugReportCallback, m_allocatorCb); + } + + vkDestroyInstance(m_instance, m_allocatorCb); + + case ErrorState::LoadedVulkan1: + bx::dlclose(m_vulkan1dll); + m_vulkan1dll = NULL; + m_allocatorCb = NULL; + unloadRenderDoc(m_renderdocdll); + + case ErrorState::Default: + break; + }; + + BX_CHECK(false, "Failed to initialize Vulkan."); + return false; + } + + void shutdown() + { + VK_CHECK(vkQueueWaitIdle(m_queueGraphics) ); + VK_CHECK(vkDeviceWaitIdle(m_device) ); + + m_pipelineStateCache.invalidate(); + + for (uint32_t ii = 0; ii < BX_COUNTOF(m_scratchBuffer); ++ii) + { + m_scratchBuffer[ii].destroy(); + } + + for (uint32_t ii = 0; ii < BX_COUNTOF(m_frameBuffers); ++ii) + { + m_frameBuffers[ii].destroy(); + } + + for (uint32_t ii = 0; ii < BX_COUNTOF(m_indexBuffers); ++ii) + { + m_indexBuffers[ii].destroy(); + } + + for (uint32_t ii = 0; ii < BX_COUNTOF(m_vertexBuffers); ++ii) + { + m_vertexBuffers[ii].destroy(); + } + + for (uint32_t ii = 0; ii < BX_COUNTOF(m_shaders); ++ii) + { + m_shaders[ii].destroy(); + } + + for (uint32_t ii = 0; ii < BX_COUNTOF(m_textures); ++ii) + { + m_textures[ii].destroy(); + } + + vkDestroy(m_pipelineCache); + vkDestroy(m_pipelineLayout); + vkDestroy(m_descriptorSetLayout); + vkDestroy(m_descriptorPool); + + vkFreeCommandBuffers(m_device, m_commandPool, BX_COUNTOF(m_commandBuffers), m_commandBuffers); + vkDestroy(m_commandPool); + vkDestroy(m_fence); + + for (uint32_t ii = 0; ii < BX_COUNTOF(m_backBufferColorImageView); ++ii) + { + if (VK_NULL_HANDLE != m_backBufferColorImageView[ii]) + { + vkDestroy(m_backBufferColorImageView[ii]); + } + + if (VK_NULL_HANDLE != m_backBufferColor[ii]) + { + vkDestroy(m_backBufferColor[ii]); + } + + if (VK_NULL_HANDLE != m_presentDone[ii]) + { + vkDestroy(m_presentDone[ii]); + } + } + vkDestroy(m_swapchain); + + vkDestroy(m_backBufferDepthStencilImageView); + vkFreeMemory(m_device, m_backBufferDepthStencilMemory, m_allocatorCb); + vkDestroy(m_backBufferDepthStencilImage); + + vkDestroySurfaceKHR(m_instance, m_surface, m_allocatorCb); + + vkDestroy(m_renderPass); + + vkDestroyDevice(m_device, m_allocatorCb); + + if (VK_NULL_HANDLE != m_debugReportCallback) + { + vkDestroyDebugReportCallbackEXT(m_instance, m_debugReportCallback, m_allocatorCb); + } + + vkDestroyInstance(m_instance, m_allocatorCb); + + bx::dlclose(m_vulkan1dll); + m_vulkan1dll = NULL; + m_allocatorCb = NULL; + unloadRenderDoc(m_renderdocdll); + } + + RendererType::Enum getRendererType() const BX_OVERRIDE + { + return RendererType::Vulkan; + } + + const char* getRendererName() const BX_OVERRIDE + { + return BGFX_RENDERER_VULKAN_NAME; + } + + void flip(HMD& /*_hmd*/) BX_OVERRIDE + { + if (VK_NULL_HANDLE != m_swapchain) + { + VkPresentInfoKHR pi; + pi.sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR; + pi.pNext = NULL; + pi.waitSemaphoreCount = 0; + pi.pWaitSemaphores = NULL; //&m_presentDone[0]; + pi.swapchainCount = 1; + pi.pSwapchains = &m_swapchain; + pi.pImageIndices = &m_backBufferColorIdx; + pi.pResults = NULL; + VK_CHECK(vkQueuePresentKHR(m_queueGraphics, &pi) ); + } + } + + void createIndexBuffer(IndexBufferHandle _handle, Memory* _mem, uint16_t _flags) BX_OVERRIDE + { + m_indexBuffers[_handle.idx].create(_mem->size, _mem->data, _flags, false); + } + + void destroyIndexBuffer(IndexBufferHandle _handle) BX_OVERRIDE + { + m_indexBuffers[_handle.idx].destroy(); + } + + void createVertexDecl(VertexDeclHandle _handle, const VertexDecl& _decl) BX_OVERRIDE + { + VertexDecl& decl = m_vertexDecls[_handle.idx]; + bx::memCopy(&decl, &_decl, sizeof(VertexDecl) ); + dump(decl); + } + + void destroyVertexDecl(VertexDeclHandle /*_handle*/) BX_OVERRIDE + { + } + + void createVertexBuffer(VertexBufferHandle _handle, Memory* _mem, VertexDeclHandle _declHandle, uint16_t _flags) BX_OVERRIDE + { + m_vertexBuffers[_handle.idx].create(_mem->size, _mem->data, _declHandle, _flags); + } + + void destroyVertexBuffer(VertexBufferHandle _handle) BX_OVERRIDE + { + m_vertexBuffers[_handle.idx].destroy(); + } + + void createDynamicIndexBuffer(IndexBufferHandle _handle, uint32_t _size, uint16_t _flags) BX_OVERRIDE + { + m_indexBuffers[_handle.idx].create(_size, NULL, _flags, false); + } + + void updateDynamicIndexBuffer(IndexBufferHandle _handle, uint32_t _offset, uint32_t _size, Memory* _mem) BX_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 + { + m_indexBuffers[_handle.idx].destroy(); + } + + void createDynamicVertexBuffer(VertexBufferHandle _handle, uint32_t _size, uint16_t _flags) BX_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 + { + 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 + { + m_vertexBuffers[_handle.idx].destroy(); + } + + void createShader(ShaderHandle _handle, Memory* _mem) BX_OVERRIDE + { + m_shaders[_handle.idx].create(_mem); + } + + void destroyShader(ShaderHandle _handle) BX_OVERRIDE + { + m_shaders[_handle.idx].destroy(); + } + + void createProgram(ProgramHandle _handle, ShaderHandle _vsh, ShaderHandle _fsh) BX_OVERRIDE + { + m_program[_handle.idx].create(&m_shaders[_vsh.idx], isValid(_fsh) ? &m_shaders[_fsh.idx] : NULL); + } + + void destroyProgram(ProgramHandle _handle) BX_OVERRIDE + { + m_program[_handle.idx].destroy(); + } + + void createTexture(TextureHandle /*_handle*/, Memory* /*_mem*/, uint32_t /*_flags*/, uint8_t /*_skip*/) BX_OVERRIDE + { + } + + void updateTextureBegin(TextureHandle /*_handle*/, uint8_t /*_side*/, uint8_t /*_mip*/) 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*/) BX_OVERRIDE + { + } + + void updateTextureEnd() BX_OVERRIDE + { + } + + void readTexture(TextureHandle /*_handle*/, void* /*_data*/, uint8_t /*_mip*/) BX_OVERRIDE + { + } + + void resizeTexture(TextureHandle /*_handle*/, uint16_t /*_width*/, uint16_t /*_height*/, uint8_t /*_numMips*/) BX_OVERRIDE + { + } + + void overrideInternal(TextureHandle /*_handle*/, uintptr_t /*_ptr*/) BX_OVERRIDE + { + } + + uintptr_t getInternal(TextureHandle /*_handle*/) BX_OVERRIDE + { + return 0; + } + + void destroyTexture(TextureHandle /*_handle*/) BX_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*/) BX_OVERRIDE + { + } + + void destroyFrameBuffer(FrameBufferHandle /*_handle*/) BX_OVERRIDE + { + } + + void createUniform(UniformHandle _handle, UniformType::Enum _type, uint16_t _num, const char* _name) BX_OVERRIDE + { + if (NULL != m_uniforms[_handle.idx]) + { + BX_FREE(g_allocator, m_uniforms[_handle.idx]); + } + + uint32_t size = BX_ALIGN_16(g_uniformTypeSize[_type] * _num); + void* data = BX_ALLOC(g_allocator, size); + bx::memSet(data, 0, size); + m_uniforms[_handle.idx] = data; + m_uniformReg.add(_handle, _name, data); + } + + void destroyUniform(UniformHandle _handle) BX_OVERRIDE + { + BX_FREE(g_allocator, m_uniforms[_handle.idx]); + m_uniforms[_handle.idx] = NULL; + } + + void requestScreenShot(FrameBufferHandle /*_handle*/, const char* /*_filePath*/) BX_OVERRIDE + { + } + + void updateViewName(uint8_t _id, const char* _name) BX_OVERRIDE + { + bx::strlcpy(&s_viewName[_id][BGFX_CONFIG_MAX_VIEW_NAME_RESERVED] + , _name + , BX_COUNTOF(s_viewName[0]) - BGFX_CONFIG_MAX_VIEW_NAME_RESERVED + ); + } + + void updateUniform(uint16_t _loc, const void* _data, uint32_t _size) BX_OVERRIDE + { + bx::memCopy(m_uniforms[_loc], _data, _size); + } + + void setMarker(const char* /*_marker*/, uint32_t /*_size*/) BX_OVERRIDE + { + } + + void invalidateOcclusionQuery(OcclusionQueryHandle _handle) BX_OVERRIDE + { + BX_UNUSED(_handle); + } + + void submit(Frame* _render, ClearQuad& _clearQuad, TextVideoMemBlitter& _textVideoMemBlitter) BX_OVERRIDE; + + void blitSetup(TextVideoMemBlitter& /*_blitter*/) BX_OVERRIDE + { + } + + void blitRender(TextVideoMemBlitter& /*_blitter*/, uint32_t /*_numIndices*/) BX_OVERRIDE + { + } + + void updateResolution(const Resolution& _resolution) + { + if (!!(_resolution.m_flags & BGFX_RESET_MAXANISOTROPY) ) + { + m_maxAnisotropy = UINT32_MAX; + } + else + { + m_maxAnisotropy = 1; + } + + bool depthClamp = !!(_resolution.m_flags & BGFX_RESET_DEPTH_CLAMP); + + if (m_depthClamp != depthClamp) + { + m_depthClamp = depthClamp; + m_pipelineStateCache.invalidate(); + } + + uint32_t flags = _resolution.m_flags & ~(BGFX_RESET_HMD_RECENTER | BGFX_RESET_MAXANISOTROPY | BGFX_RESET_DEPTH_CLAMP); + + if (m_resolution.m_width != _resolution.m_width + || m_resolution.m_height != _resolution.m_height + || m_resolution.m_flags != flags) + { + flags &= ~BGFX_RESET_INTERNAL_FORCE; + + bool resize = (m_resolution.m_flags&BGFX_RESET_MSAA_MASK) == (_resolution.m_flags&BGFX_RESET_MSAA_MASK); + + m_resolution = _resolution; + m_resolution.m_flags = flags; + + m_textVideoMem.resize(false, _resolution.m_width, _resolution.m_height); + m_textVideoMem.clear(); + +#if 1 + BX_UNUSED(resize); +#else + m_scd.BufferDesc.Width = _resolution.m_width; + m_scd.BufferDesc.Height = _resolution.m_height; + + preReset(); + + if (resize) + { + uint32_t nodeMask[] = { 1, 1, 1, 1 }; + BX_STATIC_ASSERT(BX_COUNTOF(m_backBufferColor) == BX_COUNTOF(nodeMask) ); + IUnknown* presentQueue[] ={ m_cmd.m_commandQueue, m_cmd.m_commandQueue, m_cmd.m_commandQueue, m_cmd.m_commandQueue }; + BX_STATIC_ASSERT(BX_COUNTOF(m_backBufferColor) == BX_COUNTOF(presentQueue) ); + + DX_CHECK(m_swapChain->ResizeBuffers1(m_scd.BufferCount + , m_scd.BufferDesc.Width + , m_scd.BufferDesc.Height + , m_scd.BufferDesc.Format + , m_scd.Flags + , nodeMask + , presentQueue + ) ); + } + else + { + updateMsaa(); + m_scd.SampleDesc = s_msaa[(m_resolution.m_flags&BGFX_RESET_MSAA_MASK)>>BGFX_RESET_MSAA_SHIFT]; + + DX_RELEASE(m_swapChain, 0); + + HRESULT hr; + hr = m_factory->CreateSwapChain(m_cmd.m_commandQueue + , &m_scd + , reinterpret_cast(&m_swapChain) + ); + BGFX_FATAL(SUCCEEDED(hr), bgfx::Fatal::UnableToInitialize, "Failed to create swap chain."); + } + + postReset(); +#endif // 0 + } + } + + void setShaderUniform(uint8_t _flags, uint32_t _regIndex, const void* _val, uint32_t _numRegs) + { + BX_UNUSED(_flags, _regIndex, _val, _numRegs); + if (_flags&BGFX_UNIFORM_FRAGMENTBIT) + { + bx::memCopy(&m_fsScratch[_regIndex], _val, _numRegs*16); + m_fsChanges += _numRegs; + } + else + { + bx::memCopy(&m_vsScratch[_regIndex], _val, _numRegs*16); + m_vsChanges += _numRegs; + } + } + + void setShaderUniform4f(uint8_t _flags, uint32_t _regIndex, const void* _val, uint32_t _numRegs) + { + setShaderUniform(_flags, _regIndex, _val, _numRegs); + } + + void setShaderUniform4x4f(uint8_t _flags, uint32_t _regIndex, const void* _val, uint32_t _numRegs) + { + setShaderUniform(_flags, _regIndex, _val, _numRegs); + } + + void commitShaderUniforms(VkCommandBuffer _commandBuffer, uint16_t _programIdx) + { + const ProgramVK& program = m_program[_programIdx]; + VkDescriptorBufferInfo descriptorBufferInfo; + uint32_t total = 0 + + program.m_vsh->m_size + + (NULL != program.m_fsh ? program.m_fsh->m_size : 0) + ; + if (0 < total) + { + uint8_t* data = (uint8_t*)m_scratchBuffer[m_backBufferColorIdx].allocUbv(descriptorBufferInfo, total); + + uint32_t size = program.m_vsh->m_size; + bx::memCopy(data, m_vsScratch, size); + data += size; + + if (NULL != program.m_fsh) + { + bx::memCopy(data, m_fsScratch, program.m_fsh->m_size); + } + + vkCmdBindDescriptorSets(_commandBuffer + , VK_PIPELINE_BIND_POINT_GRAPHICS + , m_pipelineLayout + , 0 + , 1 + , &m_scratchBuffer[m_backBufferColorIdx].m_descriptorSet + [m_scratchBuffer[m_backBufferColorIdx].m_currentDs - 1] + , 0 + , NULL + ); + } + + m_vsChanges = 0; + m_fsChanges = 0; + } + + void setFrameBuffer(FrameBufferHandle _fbh, bool _msaa = true) + { + BX_UNUSED(_msaa); + + if (isValid(m_fbh) + && m_fbh.idx != _fbh.idx) + { + const FrameBufferVK& frameBuffer = m_frameBuffers[m_fbh.idx]; + BX_UNUSED(frameBuffer); + +// for (uint8_t ii = 0, num = frameBuffer.m_num; ii < num; ++ii) +// { +// TextureVK& texture = m_textures[frameBuffer.m_texture[ii].idx]; +// texture.setState(m_commandList, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); +// } +// +// if (isValid(frameBuffer.m_depth) ) +// { +// TextureVK& texture = m_textures[frameBuffer.m_depth.idx]; +// const bool writeOnly = 0 != (texture.m_flags&BGFX_TEXTURE_RT_WRITE_ONLY); +// if (!writeOnly) +// { +// texture.setState(m_commandList, D3D12_RESOURCE_STATE_DEPTH_READ); +// } +// } + } + + if (!isValid(_fbh) ) + { +// m_rtvHandle = m_rtvDescriptorHeap->GetCPUDescriptorHandleForHeapStart(); +// uint32_t rtvDescriptorSize = m_device->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_RTV); +// m_rtvHandle.ptr += m_backBufferColorIdx * rtvDescriptorSize; +// m_dsvHandle = m_dsvDescriptorHeap->GetCPUDescriptorHandleForHeapStart(); +// +// m_currentColor = &m_rtvHandle; +// m_currentDepthStencil = &m_dsvHandle; +// m_commandList->OMSetRenderTargets(1, m_currentColor, true, m_currentDepthStencil); + } + else + { + const FrameBufferVK& frameBuffer = m_frameBuffers[_fbh.idx]; + BX_UNUSED(frameBuffer); + + if (0 < frameBuffer.m_num) + { +// D3D12_CPU_DESCRIPTOR_HANDLE rtvDescriptor = m_rtvDescriptorHeap->GetCPUDescriptorHandleForHeapStart(); +// 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; + } + else + { +// m_currentColor = NULL; + } + + if (isValid(frameBuffer.m_depth) ) + { +// D3D12_CPU_DESCRIPTOR_HANDLE dsvDescriptor = m_dsvDescriptorHeap->GetCPUDescriptorHandleForHeapStart(); +// uint32_t dsvDescriptorSize = m_device->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_DSV); +// m_dsvHandle.ptr = dsvDescriptor.ptr + (1 + _fbh.idx) * dsvDescriptorSize; +// m_currentDepthStencil = &m_dsvHandle; + } + else + { +// m_currentDepthStencil = NULL; + } + + for (uint8_t ii = 0, num = frameBuffer.m_num; ii < num; ++ii) + { + TextureVK& texture = m_textures[frameBuffer.m_texture[ii].idx]; + BX_UNUSED(texture); +// texture.setState(m_commandList, D3D12_RESOURCE_STATE_RENDER_TARGET); + } + + if (isValid(frameBuffer.m_depth) ) + { + TextureVK& texture = m_textures[frameBuffer.m_depth.idx]; + BX_UNUSED(texture); +// texture.setState(m_commandList, D3D12_RESOURCE_STATE_DEPTH_WRITE); + } + +// m_commandList->OMSetRenderTargets(frameBuffer.m_num +// , m_currentColor +// , true +// , m_currentDepthStencil +// ); + } + + m_fbh = _fbh; +// m_rtMsaa = _msaa; + } + + void setBlendState(VkPipelineColorBlendStateCreateInfo& _desc, uint64_t _state, uint32_t _rgba = 0) + { + VkPipelineColorBlendAttachmentState* bas = const_cast(_desc.pAttachments); + + uint8_t writeMask = (_state & BGFX_STATE_ALPHA_WRITE) + ? VK_COLOR_COMPONENT_A_BIT + : 0 + ; + writeMask |= (_state & BGFX_STATE_RGB_WRITE) + ? VK_COLOR_COMPONENT_R_BIT + | VK_COLOR_COMPONENT_G_BIT + | VK_COLOR_COMPONENT_B_BIT + : 0 + ; + + bas->blendEnable = !!(BGFX_STATE_BLEND_MASK & _state); + + { + const uint32_t blend = uint32_t( (_state & BGFX_STATE_BLEND_MASK ) >> BGFX_STATE_BLEND_SHIFT); + const uint32_t equation = uint32_t( (_state & BGFX_STATE_BLEND_EQUATION_MASK) >> BGFX_STATE_BLEND_EQUATION_SHIFT); + + const uint32_t srcRGB = (blend ) & 0xf; + const uint32_t dstRGB = (blend >> 4) & 0xf; + const uint32_t srcA = (blend >> 8) & 0xf; + const uint32_t dstA = (blend >> 12) & 0xf; + + const uint32_t equRGB = (equation ) & 0x7; + const uint32_t equA = (equation >> 3) & 0x7; + + bas->srcColorBlendFactor = s_blendFactor[srcRGB][0]; + bas->dstColorBlendFactor = s_blendFactor[dstRGB][0]; + bas->colorBlendOp = s_blendEquation[equRGB]; + + bas->srcAlphaBlendFactor = s_blendFactor[srcA][1]; + bas->dstAlphaBlendFactor = s_blendFactor[dstA][1]; + bas->alphaBlendOp = s_blendEquation[equA]; + + bas->colorWriteMask = writeMask; + } + + uint32_t numAttachments = 1; + if (isValid(m_fbh) ) + { + const FrameBufferVK& frameBuffer = m_frameBuffers[m_fbh.idx]; + numAttachments = frameBuffer.m_num; + } + + if (!!(BGFX_STATE_BLEND_INDEPENDENT & _state) ) + { + for (uint32_t ii = 1, rgba = _rgba; ii < numAttachments; ++ii, rgba >>= 11) + { + ++bas; + bas->blendEnable = 0 != (rgba & 0x7ff); + + const uint32_t src = (rgba ) & 0xf; + const uint32_t dst = (rgba >> 4) & 0xf; + const uint32_t equation = (rgba >> 8) & 0x7; + + bas->srcColorBlendFactor = s_blendFactor[src][0]; + bas->dstColorBlendFactor = s_blendFactor[dst][0]; + bas->colorBlendOp = s_blendEquation[equation]; + + bas->srcAlphaBlendFactor = s_blendFactor[src][1]; + bas->dstAlphaBlendFactor = s_blendFactor[dst][1]; + bas->alphaBlendOp = s_blendEquation[equation]; + + bas->colorWriteMask = writeMask; + } + } + else + { + for (uint32_t ii = 1; ii < numAttachments; ++ii) + { + bx::memCopy(&bas[ii], bas, sizeof(VkPipelineColorBlendAttachmentState) ); + } + } + + _desc.sType = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO; + _desc.pNext = NULL; + _desc.flags = 0; + _desc.logicOpEnable = VK_FALSE; + _desc.logicOp = VK_LOGIC_OP_CLEAR; + _desc.attachmentCount = numAttachments; + _desc.blendConstants[0] = 0.0f; + _desc.blendConstants[1] = 0.0f; + _desc.blendConstants[2] = 0.0f; + _desc.blendConstants[3] = 0.0f; + } + + void setRasterizerState(VkPipelineRasterizationStateCreateInfo& _desc, uint64_t _state, bool _wireframe = false) + { + const uint32_t cull = (_state&BGFX_STATE_CULL_MASK) >> BGFX_STATE_CULL_SHIFT; + + _desc.sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO; + _desc.pNext = NULL; + _desc.flags = 0; + _desc.depthClampEnable = m_depthClamp; + _desc.rasterizerDiscardEnable = VK_FALSE; + _desc.polygonMode = _wireframe + ? VK_POLYGON_MODE_LINE + : VK_POLYGON_MODE_FILL + ; + _desc.cullMode = s_cullMode[cull]; + _desc.frontFace = VK_FRONT_FACE_CLOCKWISE; + _desc.depthBiasEnable = VK_FALSE; + _desc.depthBiasConstantFactor = 0.0f; + _desc.depthBiasClamp = 0.0f; + _desc.depthBiasSlopeFactor = 0.0f; + _desc.lineWidth = 1.0f; + } + + void setDepthStencilState(VkPipelineDepthStencilStateCreateInfo& _desc, uint64_t _state, uint64_t _stencil = 0) + { + const uint32_t fstencil = unpackStencil(0, _stencil); + uint32_t func = (_state&BGFX_STATE_DEPTH_TEST_MASK)>>BGFX_STATE_DEPTH_TEST_SHIFT; + + _desc.sType = VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO; + _desc.pNext = NULL; + _desc.flags = 0; + _desc.depthTestEnable = 0 != func; + _desc.depthWriteEnable = !!(BGFX_STATE_DEPTH_WRITE & _state); + _desc.depthCompareOp = s_cmpFunc[func]; + _desc.depthBoundsTestEnable = VK_FALSE; + + _desc.stencilTestEnable = 0 != _stencil; + + uint32_t bstencil = unpackStencil(1, _stencil); + uint32_t frontAndBack = bstencil != BGFX_STENCIL_NONE && bstencil != fstencil; + bstencil = frontAndBack ? bstencil : fstencil; + + _desc.front.failOp = s_stencilOp[(fstencil & BGFX_STENCIL_OP_FAIL_S_MASK) >> BGFX_STENCIL_OP_FAIL_S_SHIFT]; + _desc.front.passOp = s_stencilOp[(fstencil & BGFX_STENCIL_OP_PASS_Z_MASK) >> BGFX_STENCIL_OP_PASS_Z_SHIFT]; + _desc.front.depthFailOp = s_stencilOp[(fstencil & BGFX_STENCIL_OP_FAIL_Z_MASK) >> BGFX_STENCIL_OP_FAIL_Z_SHIFT]; + _desc.front.compareOp = s_cmpFunc[(fstencil & BGFX_STENCIL_TEST_MASK) >> BGFX_STENCIL_TEST_SHIFT]; + _desc.front.compareMask = UINT32_MAX; + _desc.front.writeMask = UINT32_MAX; + _desc.front.reference = 0; + + _desc.back.failOp = s_stencilOp[(bstencil & BGFX_STENCIL_OP_FAIL_S_MASK) >> BGFX_STENCIL_OP_FAIL_S_SHIFT]; + _desc.back.passOp = s_stencilOp[(bstencil & BGFX_STENCIL_OP_PASS_Z_MASK) >> BGFX_STENCIL_OP_PASS_Z_SHIFT]; + _desc.back.depthFailOp = s_stencilOp[(bstencil & BGFX_STENCIL_OP_FAIL_Z_MASK) >> BGFX_STENCIL_OP_FAIL_Z_SHIFT]; + _desc.back.compareOp = s_cmpFunc[(bstencil&BGFX_STENCIL_TEST_MASK) >> BGFX_STENCIL_TEST_SHIFT]; + _desc.back.compareMask = UINT32_MAX; + _desc.back.writeMask = UINT32_MAX; + _desc.back.reference = 0; + + _desc.minDepthBounds = 0.0f; + _desc.maxDepthBounds = 1.0f; + } + + uint32_t setInputLayout(VkPipelineVertexInputStateCreateInfo& _vertexInputState, const VertexDecl& _vertexDecl, const ProgramVK& _program, uint8_t _numInstanceData) + { + _vertexInputState.sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO; + _vertexInputState.pNext = NULL; + _vertexInputState.flags = 0; + + VertexDecl decl; + bx::memCopy(&decl, &_vertexDecl, sizeof(VertexDecl) ); + const uint16_t* attrMask = _program.m_vsh->m_attrMask; + + for (uint32_t ii = 0; ii < Attrib::Count; ++ii) + { + 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; + } + + uint32_t num = fillVertexDecl(_vertexInputState, decl); + +// const D3D12_INPUT_ELEMENT_DESC inst = { "TEXCOORD", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, D3D12_APPEND_ALIGNED_ELEMENT, D3D12_INPUT_CLASSIFICATION_PER_INSTANCE_DATA, 1 }; + + // VK_VERTEX_INPUT_RATE_INSTANCE + + for (uint32_t ii = 0; ii < _numInstanceData; ++ii) + { + uint32_t index = 7 - ii; // TEXCOORD7 = i_data0, TEXCOORD6 = i_data1, etc. + + BX_UNUSED(index); +// bx::memCopy(curr, &inst, sizeof(D3D12_INPUT_ELEMENT_DESC) ); +// curr->InputSlot = 1; +// curr->SemanticIndex = index; +// curr->AlignedByteOffset = ii*16; + } + + _vertexInputState.vertexAttributeDescriptionCount = num; + return num; + } + + VkPipeline getPipeline(uint16_t _programIdx) + { + BX_UNUSED(_programIdx); + // vkCreateComputePipelines + return VK_NULL_HANDLE; + } + + VkPipeline getPipeline(uint64_t _state, uint64_t _stencil, uint16_t _declIdx, uint16_t _programIdx, uint8_t _numInstanceData) + { + ProgramVK& program = m_program[_programIdx]; + + _state &= 0 + | BGFX_STATE_RGB_WRITE + | BGFX_STATE_ALPHA_WRITE + | BGFX_STATE_DEPTH_WRITE + | BGFX_STATE_DEPTH_TEST_MASK + | BGFX_STATE_BLEND_MASK + | BGFX_STATE_BLEND_EQUATION_MASK + | BGFX_STATE_BLEND_INDEPENDENT + | BGFX_STATE_BLEND_ALPHA_TO_COVERAGE + | BGFX_STATE_CULL_MASK + | BGFX_STATE_MSAA + | BGFX_STATE_LINEAA + | BGFX_STATE_CONSERVATIVE_RASTER + | BGFX_STATE_PT_MASK + ; + + _stencil &= packStencil(~BGFX_STENCIL_FUNC_REF_MASK, BGFX_STENCIL_MASK); + + VertexDecl decl; + bx::memCopy(&decl, &m_vertexDecls[_declIdx], sizeof(VertexDecl) ); + const uint16_t* attrMask = program.m_vsh->m_attrMask; + + for (uint32_t ii = 0; ii < Attrib::Count; ++ii) + { + 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; + } + + bx::HashMurmur2A murmur; + murmur.begin(); + murmur.add(_state); + murmur.add(_stencil); + murmur.add(program.m_vsh->m_hash); + murmur.add(program.m_vsh->m_attrMask, sizeof(program.m_vsh->m_attrMask) ); + murmur.add(program.m_fsh->m_hash); + murmur.add(m_vertexDecls[_declIdx].m_hash); + murmur.add(decl.m_attributes, sizeof(decl.m_attributes) ); + murmur.add(m_fbh.idx); + murmur.add(_numInstanceData); + const uint32_t hash = murmur.end(); + + VkPipeline pipeline = m_pipelineStateCache.find(hash); + + if (VK_NULL_HANDLE != pipeline) + { + return pipeline; + } + + VkPipelineColorBlendAttachmentState blendAttachmentState[BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS]; + VkPipelineColorBlendStateCreateInfo colorBlendState; + colorBlendState.pAttachments = blendAttachmentState; + setBlendState(colorBlendState, _state); + + VkPipelineInputAssemblyStateCreateInfo inputAssemblyState; + inputAssemblyState.sType = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO; + inputAssemblyState.pNext = NULL; + inputAssemblyState.flags = 0; + inputAssemblyState.topology = s_primInfo[(_state&BGFX_STATE_PT_MASK) >> BGFX_STATE_PT_SHIFT].m_topology; + inputAssemblyState.primitiveRestartEnable = VK_FALSE; + + VkPipelineRasterizationStateCreateInfo rasterizationState; + setRasterizerState(rasterizationState, _state); + + VkPipelineDepthStencilStateCreateInfo depthStencilState; + setDepthStencilState(depthStencilState, _state, _stencil); + + VkVertexInputBindingDescription inputBinding[Attrib::Count + 1 + BGFX_CONFIG_MAX_INSTANCE_DATA_COUNT]; + VkVertexInputAttributeDescription inputAttrib[Attrib::Count + 1 + BGFX_CONFIG_MAX_INSTANCE_DATA_COUNT]; + + VkPipelineVertexInputStateCreateInfo vertexInputState; + vertexInputState.pVertexBindingDescriptions = inputBinding; + vertexInputState.pVertexAttributeDescriptions = inputAttrib; + setInputLayout(vertexInputState, m_vertexDecls[_declIdx], program, _numInstanceData); + + const VkDynamicState dynamicStates[] = + { + VK_DYNAMIC_STATE_VIEWPORT, + VK_DYNAMIC_STATE_SCISSOR, + VK_DYNAMIC_STATE_BLEND_CONSTANTS, + VK_DYNAMIC_STATE_STENCIL_REFERENCE, + }; + VkPipelineDynamicStateCreateInfo dynamicState; + dynamicState.sType = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO; + dynamicState.pNext = NULL; + dynamicState.flags = 0; + dynamicState.dynamicStateCount = BX_COUNTOF(dynamicStates); + dynamicState.pDynamicStates = dynamicStates; + + VkPipelineShaderStageCreateInfo shaderStages[2]; + shaderStages[0].sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO; + shaderStages[0].pNext = NULL; + shaderStages[0].flags = 0; + shaderStages[0].stage = VK_SHADER_STAGE_VERTEX_BIT; + shaderStages[0].module = program.m_vsh->m_module; + shaderStages[0].pName = "main"; + shaderStages[0].pSpecializationInfo = NULL; + shaderStages[1].sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO; + shaderStages[1].pNext = NULL; + shaderStages[1].flags = 0; + shaderStages[1].stage = VK_SHADER_STAGE_FRAGMENT_BIT; + shaderStages[1].module = program.m_fsh->m_module; + shaderStages[1].pName = "main"; + shaderStages[1].pSpecializationInfo = NULL; + + VkPipelineViewportStateCreateInfo viewportState; + viewportState.sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO; + viewportState.pNext = NULL; + viewportState.flags = 0; + viewportState.viewportCount = 1; + viewportState.pViewports = NULL; + viewportState.scissorCount = 1; + viewportState.pScissors = NULL; + + VkPipelineMultisampleStateCreateInfo multisampleState; + multisampleState.sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO; + multisampleState.pNext = NULL; + multisampleState.flags = 0; + multisampleState.rasterizationSamples = VK_SAMPLE_COUNT_1_BIT; + multisampleState.sampleShadingEnable = VK_FALSE; + multisampleState.minSampleShading = !!(BGFX_STATE_CONSERVATIVE_RASTER & _state) ? 1.0f : 0.0f; + multisampleState.pSampleMask = NULL; + multisampleState.alphaToCoverageEnable = !!(BGFX_STATE_BLEND_ALPHA_TO_COVERAGE & _state); + multisampleState.alphaToOneEnable = VK_FALSE; + + VkGraphicsPipelineCreateInfo graphicsPipeline; + graphicsPipeline.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO; + graphicsPipeline.pNext = NULL; + graphicsPipeline.flags = 0; + graphicsPipeline.stageCount = BX_COUNTOF(shaderStages); + graphicsPipeline.pStages = shaderStages; + graphicsPipeline.pVertexInputState = &vertexInputState; + graphicsPipeline.pInputAssemblyState = &inputAssemblyState; + graphicsPipeline.pTessellationState = NULL; + graphicsPipeline.pViewportState = &viewportState; + graphicsPipeline.pRasterizationState = &rasterizationState; + graphicsPipeline.pMultisampleState = &multisampleState; + graphicsPipeline.pDepthStencilState = &depthStencilState; + graphicsPipeline.pColorBlendState = &colorBlendState; + graphicsPipeline.pDynamicState = &dynamicState; + graphicsPipeline.layout = m_pipelineLayout; + graphicsPipeline.renderPass = m_renderPass; + graphicsPipeline.subpass = 0; + graphicsPipeline.basePipelineHandle = VK_NULL_HANDLE; + graphicsPipeline.basePipelineIndex = 0; + + uint32_t length = g_callback->cacheReadSize(hash); + bool cached = length > 0; + + void* cachedData = NULL; + + VkPipelineCacheCreateInfo pcci; + pcci.sType = VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO; + pcci.pNext = NULL; + pcci.flags = 0; + pcci.initialDataSize = 0; + pcci.pInitialData = NULL; + + if (cached) + { + cachedData = BX_ALLOC(g_allocator, length); + if (g_callback->cacheRead(hash, cachedData, length) ) + { + BX_TRACE("Loading cached pipeline state (size %d).", length); + bx::MemoryReader reader(cachedData, length); + + pcci.initialDataSize = (size_t)reader.remaining(); + pcci.pInitialData = reader.getDataPtr(); + } + } + + VkPipelineCache cache; + VK_CHECK(vkCreatePipelineCache(m_device, &pcci, m_allocatorCb, &cache) ); + + VK_CHECK(vkCreateGraphicsPipelines(m_device + , cache + , 1 + , &graphicsPipeline + , m_allocatorCb + , &pipeline + ) ); + m_pipelineStateCache.add(hash, pipeline); + + size_t dataSize; + VK_CHECK(vkGetPipelineCacheData(m_device, cache, &dataSize, NULL) ); + + if (0 < dataSize) + { + if (length < dataSize) + { + cachedData = BX_REALLOC(g_allocator, cachedData, dataSize); + } + VK_CHECK(vkGetPipelineCacheData(m_device, cache, &dataSize, cachedData) ); + g_callback->cacheWrite(hash, cachedData, (uint32_t)dataSize); + } + + VK_CHECK(vkMergePipelineCaches(m_device, m_pipelineCache, 1, &cache) ); + vkDestroy(cache); + + if (NULL != cachedData) + { + BX_FREE(g_allocator, cachedData); + } + + return pipeline; + } + + void commit(UniformBuffer& _uniformBuffer) + { + _uniformBuffer.reset(); + + for (;;) + { + uint32_t opcode = _uniformBuffer.read(); + + if (UniformType::End == opcode) + { + break; + } + + UniformType::Enum type; + uint16_t loc; + uint16_t num; + uint16_t copy; + UniformBuffer::decodeOpcode(opcode, type, loc, num, copy); + + const char* data; + if (copy) + { + data = _uniformBuffer.read(g_uniformTypeSize[type]*num); + } + else + { + UniformHandle handle; + bx::memCopy(&handle, _uniformBuffer.read(sizeof(UniformHandle) ), sizeof(UniformHandle) ); + data = (const char*)m_uniforms[handle.idx]; + } + +#define CASE_IMPLEMENT_UNIFORM(_uniform, _dxsuffix, _type) \ + case UniformType::_uniform: \ + case UniformType::_uniform|BGFX_UNIFORM_FRAGMENTBIT: \ + { \ + setShaderUniform(uint8_t(type), loc, data, num); \ + } \ + break; + + switch ( (uint32_t)type) + { + case UniformType::Mat3: + case UniformType::Mat3|BGFX_UNIFORM_FRAGMENTBIT: + { + float* value = (float*)data; + for (uint32_t ii = 0, count = num/3; ii < count; ++ii, loc += 3*16, value += 9) + { + Matrix4 mtx; + mtx.un.val[ 0] = value[0]; + mtx.un.val[ 1] = value[1]; + mtx.un.val[ 2] = value[2]; + mtx.un.val[ 3] = 0.0f; + mtx.un.val[ 4] = value[3]; + mtx.un.val[ 5] = value[4]; + mtx.un.val[ 6] = value[5]; + mtx.un.val[ 7] = 0.0f; + mtx.un.val[ 8] = value[6]; + mtx.un.val[ 9] = value[7]; + mtx.un.val[10] = value[8]; + mtx.un.val[11] = 0.0f; + setShaderUniform(uint8_t(type), loc, &mtx.un.val[0], 3); + } + } + break; + + CASE_IMPLEMENT_UNIFORM(Int1, I, int); + CASE_IMPLEMENT_UNIFORM(Vec4, F, float); + CASE_IMPLEMENT_UNIFORM(Mat4, F, float); + + case UniformType::End: + break; + + default: + BX_TRACE("%4d: INVALID 0x%08x, t %d, l %d, n %d, c %d", _uniformBuffer.getPos(), opcode, type, loc, num, copy); + break; + } +#undef CASE_IMPLEMENT_UNIFORM + } + } + + void clearQuad(const Rect& _rect, const Clear& _clear, const float _palette[][4]) + { + VkClearRect rect[1]; + rect[0].rect.offset.x = _rect.m_x; + rect[0].rect.offset.y = _rect.m_y; + rect[0].rect.extent.width = _rect.m_width; + rect[0].rect.extent.height = _rect.m_height; + rect[0].baseArrayLayer = 0; + rect[0].layerCount = 1; + + uint32_t numMrt = 1; +// FrameBufferHandle fbh = m_fbh; +// if (isValid(fbh) ) +// { +// const FrameBufferVK& fb = m_frameBuffers[fbh.idx]; +// numMrt = bx::uint32_max(1, fb.m_num); +// } + + VkClearAttachment attachments[BGFX_CONFIG_MAX_FRAME_BUFFERS]; + uint32_t mrt = 0; + + if (true //NULL != m_currentColor + && BGFX_CLEAR_COLOR & _clear.m_flags) + { + if (BGFX_CLEAR_COLOR_USE_PALETTE & _clear.m_flags) + { + for (uint32_t ii = 0; ii < numMrt; ++ii) + { + attachments[mrt].colorAttachment = mrt; + attachments[mrt].aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; + uint8_t index = (uint8_t)bx::uint32_min(BGFX_CONFIG_MAX_COLOR_PALETTE-1, _clear.m_index[ii]); + bx::memCopy(&attachments[mrt].clearValue.color.float32, _palette[index], 16); + ++mrt; + } + } + else + { + float frgba[4] = + { + _clear.m_index[0] * 1.0f / 255.0f, + _clear.m_index[1] * 1.0f / 255.0f, + _clear.m_index[2] * 1.0f / 255.0f, + _clear.m_index[3] * 1.0f / 255.0f, + }; + + for (uint32_t ii = 0; ii < numMrt; ++ii) + { + attachments[mrt].colorAttachment = mrt; + attachments[mrt].aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; + bx::memCopy(&attachments[mrt].clearValue.color.float32, frgba, 16); + ++mrt; + } + } + } + + if (true //NULL != m_currentDepthStencil + && (BGFX_CLEAR_DEPTH | BGFX_CLEAR_STENCIL) & _clear.m_flags) + { + attachments[mrt].colorAttachment = mrt; + attachments[mrt].aspectMask = 0; + attachments[mrt].aspectMask |= (_clear.m_flags & BGFX_CLEAR_DEPTH ) ? VK_IMAGE_ASPECT_DEPTH_BIT : 0; + attachments[mrt].aspectMask |= (_clear.m_flags & BGFX_CLEAR_STENCIL) ? VK_IMAGE_ASPECT_STENCIL_BIT : 0; + + attachments[mrt].clearValue.depthStencil.stencil = _clear.m_stencil; + attachments[mrt].clearValue.depthStencil.depth = _clear.m_depth; + ++mrt; + } + + vkCmdClearAttachments(m_commandBuffer + , mrt + , attachments + , BX_COUNTOF(rect) + , rect + ); + } + + uint64_t kick(VkSemaphore _wait = VK_NULL_HANDLE, VkSemaphore _signal = VK_NULL_HANDLE) + { + VkPipelineStageFlags stageFlags = 0 + | VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT + ; + + VkSubmitInfo si; + si.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO; + si.pNext = NULL; + si.waitSemaphoreCount = VK_NULL_HANDLE != _wait; + si.pWaitSemaphores = &_wait; + si.pWaitDstStageMask = &stageFlags; + si.commandBufferCount = 1; + si.pCommandBuffers = &m_commandBuffers[m_backBufferColorIdx]; + si.signalSemaphoreCount = VK_NULL_HANDLE != _signal; + si.pSignalSemaphores = &_signal; + +// VK_CHECK(vkResetFences(m_device, 1, &m_fence) ); + VK_CHECK(vkQueueSubmit(m_queueGraphics, 1, &si, VK_NULL_HANDLE) ); + return 0; + } + + void finish() + { + finishAll(); + } + + void finishAll() + { + VK_CHECK(vkQueueWaitIdle(m_queueGraphics) ); +// VK_CHECK(vkWaitForFences(m_device, 1, &m_fence, true, INT64_MAX) ); + } + + uint32_t selectMemoryType(uint32_t memoryTypeBits, uint32_t propertyFlags) + { + for (uint32_t ii = 0; ii < m_memoryProperties.memoryTypeCount; ++ii) + { + if ( ( ((1< m_pipelineStateCache; + + Resolution m_resolution; + uint32_t m_maxAnisotropy; + bool m_depthClamp; + bool m_wireframe; + + TextVideoMem m_textVideoMem; + + uint8_t m_fsScratch[64<<10]; + uint8_t m_vsScratch[64<<10]; + uint32_t m_fsChanges; + uint32_t m_vsChanges; + + uint32_t m_backBufferColorIdx; + FrameBufferHandle m_fbh; + }; + + static RendererContextVK* s_renderVK; + + RendererContextI* rendererCreate() + { + s_renderVK = BX_NEW(g_allocator, RendererContextVK); + if (!s_renderVK->init() ) + { + BX_DELETE(g_allocator, s_renderVK); + s_renderVK = NULL; + } + return s_renderVK; + } + + void rendererDestroy() + { + s_renderVK->shutdown(); + BX_DELETE(g_allocator, s_renderVK); + s_renderVK = NULL; + } + +#define VK_DESTROY_FUNC(_name) \ + void vkDestroy(Vk##_name& _obj) \ + { \ + if (VK_NULL_HANDLE != _obj) \ + { \ + vkDestroy##_name(s_renderVK->m_device, _obj, s_renderVK->m_allocatorCb); \ + _obj = VK_NULL_HANDLE; \ + } \ + } +VK_DESTROY +#undef VK_DESTROY_FUNC + + void ScratchBufferVK::create(uint32_t _size, uint32_t _maxDescriptors) + { + m_maxDescriptors = _maxDescriptors; + m_descriptorSet = (VkDescriptorSet*)BX_ALLOC(g_allocator, _maxDescriptors * sizeof(VkDescriptorSet) ); + + VkAllocationCallbacks* allocatorCb = s_renderVK->m_allocatorCb; + VkDevice device = s_renderVK->m_device; + + VkDescriptorSetAllocateInfo dsai; + dsai.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO; + dsai.pNext = NULL; + dsai.descriptorPool = s_renderVK->m_descriptorPool; + dsai.descriptorSetCount = 1; + dsai.pSetLayouts = &s_renderVK->m_descriptorSetLayout; + for (uint32_t ii = 0, num = m_maxDescriptors; ii < num; ++ii) + { + VK_CHECK(vkAllocateDescriptorSets(device, &dsai, &m_descriptorSet[ii]) ); + } + + VkBufferCreateInfo bci; + bci.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO; + bci.pNext = NULL; + bci.flags = 0; + bci.size = _size; + bci.usage = 0 + | VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT +// | VK_BUFFER_USAGE_TRANSFER_DST_BIT + ; + bci.sharingMode = VK_SHARING_MODE_EXCLUSIVE; + bci.queueFamilyIndexCount = 0; + bci.pQueueFamilyIndices = NULL; + + VK_CHECK(vkCreateBuffer(device + , &bci + , allocatorCb + , &m_buffer + ) ); + + VkMemoryRequirements mr; + vkGetBufferMemoryRequirements(device + , m_buffer + , &mr + ); + + VkMemoryAllocateInfo ma; + ma.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO; + ma.pNext = NULL; + ma.allocationSize = mr.size; + ma.memoryTypeIndex = s_renderVK->selectMemoryType(mr.memoryTypeBits + , VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT + ); + VK_CHECK(vkAllocateMemory(device + , &ma + , allocatorCb + , &m_deviceMem + ) ); + + m_size = (uint32_t)mr.size; + m_pos = 0; + + VK_CHECK(vkBindBufferMemory(device, m_buffer, m_deviceMem, 0) ); + + VK_CHECK(vkMapMemory(device, m_deviceMem, 0, ma.allocationSize, 0, (void**)&m_data) ); + } + + void ScratchBufferVK::destroy() + { + VkAllocationCallbacks* allocatorCb = s_renderVK->m_allocatorCb; + VkDevice device = s_renderVK->m_device; + + vkFreeDescriptorSets(device, s_renderVK->m_descriptorPool, m_maxDescriptors, m_descriptorSet); + BX_FREE(g_allocator, m_descriptorSet); + + vkUnmapMemory(device, m_deviceMem); + + vkDestroy(m_buffer); + + vkFreeMemory(device + , m_deviceMem + , allocatorCb + ); + } + + void ScratchBufferVK::reset(VkDescriptorBufferInfo& /*_descriptorBufferInfo*/) + { + m_pos = 0; + m_currentDs = 0; + } + + void* ScratchBufferVK::allocUbv(VkDescriptorBufferInfo& _descriptorBufferInfo, uint32_t _size) + { + uint32_t total = bx::strideAlign(_size + , uint32_t(s_renderVK->m_deviceProperties.limits.minUniformBufferOffsetAlignment) + ); + _descriptorBufferInfo.buffer = m_buffer; + _descriptorBufferInfo.offset = m_pos; + _descriptorBufferInfo.range = total; + + VkWriteDescriptorSet wds[1]; + wds[0].sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET; + wds[0].pNext = NULL; + wds[0].dstSet = m_descriptorSet[m_currentDs]; + wds[0].dstBinding = DslBinding::UniformBuffer; + wds[0].dstArrayElement = 0; + wds[0].descriptorCount = 1; + wds[0].descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; + wds[0].pImageInfo = NULL; + wds[0].pBufferInfo = &_descriptorBufferInfo; + wds[0].pTexelBufferView = NULL; + vkUpdateDescriptorSets(s_renderVK->m_device, BX_COUNTOF(wds), wds, 0, NULL); + + void* data = &m_data[m_pos]; + m_pos += total; + ++m_currentDs; + + return data; + } + + VkResult ImageVK::create(VkFormat _format, const VkExtent3D& _extent) + { + VkResult result; + + VkAllocationCallbacks* allocatorCb = s_renderVK->m_allocatorCb; + VkDevice device = s_renderVK->m_device; + + VkImageCreateInfo ici; + ici.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO; + ici.pNext = NULL; + ici.flags = 0; + ici.imageType = VK_IMAGE_TYPE_2D; + ici.format = _format; + ici.extent = _extent; + ici.mipLevels = 1; + ici.arrayLayers = 1; + ici.samples = VK_SAMPLE_COUNT_1_BIT; + ici.tiling = VK_IMAGE_TILING_OPTIMAL; + ici.usage = 0 + | VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT + | VK_IMAGE_USAGE_TRANSFER_SRC_BIT + ; + ici.sharingMode = VK_SHARING_MODE_EXCLUSIVE; + ici.queueFamilyIndexCount = 0; + ici.pQueueFamilyIndices = 0; + ici.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; + result = vkCreateImage(device, &ici, allocatorCb, &m_image); + + if (VK_SUCCESS != result) + { + BX_TRACE("vkCreateImage failed %d: %s.", result, getName(result) ); + return result; + } + + VkMemoryRequirements mr; + vkGetImageMemoryRequirements(device, m_image, &mr); + + VkMemoryAllocateInfo ma; + ma.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO; + ma.pNext = NULL; + ma.allocationSize = mr.size; + ma.memoryTypeIndex = s_renderVK->selectMemoryType(mr.memoryTypeBits + , VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT + ); + result = vkAllocateMemory(device + , &ma + , allocatorCb + , &m_memory + ); + + if (VK_SUCCESS != result) + { + BX_TRACE("vkAllocateMemory failed %d: %s.", result, getName(result) ); + destroy(); + return result; + } + + result = vkBindImageMemory(device, m_image, m_memory, 0); + + if (VK_SUCCESS != result) + { + BX_TRACE("vkBindImageMemory failed %d: %s.", result, getName(result) ); + destroy(); + return result; + } + + VkImageViewCreateInfo ivci; + ivci.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO; + ivci.pNext = NULL; + ivci.flags = 0; + ivci.image = m_image; + ivci.viewType = VK_IMAGE_VIEW_TYPE_2D; + ivci.format = _format; + ivci.components.r = VK_COMPONENT_SWIZZLE_IDENTITY; + ivci.components.g = VK_COMPONENT_SWIZZLE_IDENTITY; + ivci.components.b = VK_COMPONENT_SWIZZLE_IDENTITY; + ivci.components.a = VK_COMPONENT_SWIZZLE_IDENTITY; + ivci.subresourceRange.aspectMask = 0 + | VK_IMAGE_ASPECT_DEPTH_BIT + | VK_IMAGE_ASPECT_STENCIL_BIT + ; + ivci.subresourceRange.baseMipLevel = 0; + ivci.subresourceRange.levelCount = 1; + ivci.subresourceRange.baseArrayLayer = 0; + ivci.subresourceRange.layerCount = 1; + result = vkCreateImageView(device, &ivci, allocatorCb, &m_imageView); + + if (VK_SUCCESS != result) + { + BX_TRACE("vkCreateImageView failed %d: %s.", result, getName(result) ); + destroy(); + return result; + } + + return VK_SUCCESS; + } + + void ImageVK::destroy() + { + vkDestroy(m_imageView); + vkDestroy(m_image); + if (VK_NULL_HANDLE != m_memory) + { + vkFreeMemory(s_renderVK->m_device, m_memory, s_renderVK->m_allocatorCb); + m_memory = VK_NULL_HANDLE; + } + } + + void BufferVK::create(uint32_t _size, void* _data, uint16_t _flags, bool _vertex, uint32_t _stride) + { + BX_UNUSED(_stride); + + m_size = _size; + m_flags = _flags; + m_dynamic = NULL == _data; + + VkBufferCreateInfo bci; + bci.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO; + bci.pNext = NULL; + bci.flags = 0; + bci.size = _size; + bci.usage = 0 + | (_vertex ? VK_BUFFER_USAGE_VERTEX_BUFFER_BIT : VK_BUFFER_USAGE_INDEX_BUFFER_BIT) + ; + bci.sharingMode = VK_SHARING_MODE_EXCLUSIVE; + bci.queueFamilyIndexCount = 0; + bci.pQueueFamilyIndices = NULL; + + VkAllocationCallbacks* allocatorCb = s_renderVK->m_allocatorCb; + VkDevice device = s_renderVK->m_device; + VK_CHECK(vkCreateBuffer(device + , &bci + , allocatorCb + , &m_buffer + ) ); + + VkMemoryRequirements mr; + vkGetBufferMemoryRequirements(device + , m_buffer + , &mr + ); + + VkMemoryAllocateInfo ma; + ma.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO; + ma.pNext = NULL; + ma.allocationSize = mr.size; + ma.memoryTypeIndex = s_renderVK->selectMemoryType(mr.memoryTypeBits + , VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT + ); + VK_CHECK(vkAllocateMemory(device + , &ma + , allocatorCb + , &m_deviceMem + ) ); + + if (!m_dynamic) + { + void* dst; + VK_CHECK(vkMapMemory(device, m_deviceMem, 0, ma.allocationSize, 0, &dst) ); + bx::memCopy(dst, _data, _size); + vkUnmapMemory(device, m_deviceMem); + } + + VK_CHECK(vkBindBufferMemory(device, m_buffer, m_deviceMem, 0) ); + } + + void BufferVK::update(VkCommandBuffer _commandBuffer, uint32_t _offset, uint32_t _size, void* _data, bool _discard) + { + BX_UNUSED(_commandBuffer, _offset, _size, _data, _discard); + } + + void BufferVK::destroy() + { + if (VK_NULL_HANDLE != m_buffer) + { + VkAllocationCallbacks* allocatorCb = s_renderVK->m_allocatorCb; + VkDevice device = s_renderVK->m_device; + + vkDestroy(m_buffer); + vkFreeMemory(device + , m_deviceMem + , allocatorCb + ); + m_dynamic = false; + } + } + + void VertexBufferVK::create(uint32_t _size, void* _data, VertexDeclHandle _declHandle, uint16_t _flags) + { + BufferVK::create(_size, _data, _flags, true); + m_decl = _declHandle; + } + + void ShaderVK::create(const Memory* _mem) + { + bx::MemoryReader reader(_mem->data, _mem->size); + + uint32_t magic; + bx::read(&reader, magic); + + VkShaderStageFlagBits shaderStage; + BX_UNUSED(shaderStage); + switch (magic) + { + case BGFX_CHUNK_MAGIC_CSH: shaderStage = VK_SHADER_STAGE_COMPUTE_BIT; break; + case BGFX_CHUNK_MAGIC_FSH: shaderStage = VK_SHADER_STAGE_FRAGMENT_BIT; break; + case BGFX_CHUNK_MAGIC_VSH: shaderStage = VK_SHADER_STAGE_VERTEX_BIT; break; + + default: + BGFX_FATAL(false, Fatal::InvalidShader, "Unknown shader format %x.", magic); + break; + } + + bool fragment = BGFX_CHUNK_MAGIC_FSH == magic; + + uint32_t iohash; + bx::read(&reader, iohash); + + uint16_t count; + bx::read(&reader, count); + + m_numPredefined = 0; + m_numUniforms = count; + + BX_TRACE("%s Shader consts %d" + , BGFX_CHUNK_MAGIC_FSH == magic ? "Fragment" : BGFX_CHUNK_MAGIC_VSH == magic ? "Vertex" : "Compute" + , count + ); + + uint8_t fragmentBit = fragment ? BGFX_UNIFORM_FRAGMENTBIT : 0; + + if (0 < count) + { + for (uint32_t ii = 0; ii < count; ++ii) + { + uint8_t nameSize = 0; + bx::read(&reader, nameSize); + + char name[256]; + bx::read(&reader, &name, nameSize); + name[nameSize] = '\0'; + + uint8_t type = 0; + bx::read(&reader, type); + + uint8_t num; + bx::read(&reader, num); + + uint16_t regIndex; + bx::read(&reader, regIndex); + + uint16_t regCount; + bx::read(&reader, regCount); + + const char* kind = "invalid"; + + PredefinedUniform::Enum predefined = nameToPredefinedUniformEnum(name); + if (PredefinedUniform::Count != predefined) + { + kind = "predefined"; + m_predefined[m_numPredefined].m_loc = regIndex; + m_predefined[m_numPredefined].m_count = regCount; + m_predefined[m_numPredefined].m_type = uint8_t(predefined|fragmentBit); + m_numPredefined++; + } + else if (0 == (BGFX_UNIFORM_SAMPLERBIT & type) ) + { + const UniformRegInfo* info = s_renderVK->m_uniformReg.find(name); + BX_CHECK(NULL != info, "User defined uniform '%s' is not found, it won't be set.", name); + + if (NULL != info) + { + if (NULL == m_constantBuffer) + { + m_constantBuffer = UniformBuffer::create(1024); + } + + kind = "user"; + m_constantBuffer->writeUniformHandle( (UniformType::Enum)(type|fragmentBit), regIndex, info->m_handle, regCount); + } + } + else + { + kind = "sampler"; + } + + BX_TRACE("\t%s: %s (%s), num %2d, r.index %3d, r.count %2d" + , kind + , name + , getUniformTypeName(UniformType::Enum(type&~BGFX_UNIFORM_MASK) ) + , num + , regIndex + , regCount + ); + BX_UNUSED(kind); + } + + if (NULL != m_constantBuffer) + { + m_constantBuffer->finish(); + } + } + + uint16_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); + bx::memSet(m_code->data, 0, m_code->size); + bx::memCopy(m_code->data + , code + , shaderSize+1 + ); +#else +#include "../examples/runtime/shaders/spv/vert.spv.h" +#include "../examples/runtime/shaders/spv/frag.spv.h" + + shaderSize = BGFX_CHUNK_MAGIC_VSH == magic + ? sizeof(vs_cubes_spv) + : sizeof(fs_cubes_spv) + ; + m_code = alloc(shaderSize); + bx::memCopy(m_code->data + , BGFX_CHUNK_MAGIC_VSH == magic + ? vs_cubes_spv + : fs_cubes_spv + , shaderSize + ); +#endif // 0 + + VkShaderModuleCreateInfo smci; + smci.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO; + smci.pNext = NULL; + 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) ); + + bx::memSet(m_attrMask, 0, sizeof(m_attrMask) ); + m_attrMask[Attrib::Position] = UINT16_MAX; + m_attrMask[Attrib::Color0] = UINT16_MAX; + iohash = 0; + + if (BGFX_CHUNK_MAGIC_VSH == magic) + { + m_predefined[0].m_loc = 0; + m_predefined[0].m_count = 4; + m_predefined[0].m_type = uint8_t(PredefinedUniform::ModelViewProj); + m_numPredefined = 1; + m_size = 64; + } + else + { + m_size = 0; + m_numPredefined = 0; + } + + uint8_t numAttrs = 0; +// bx::read(&reader, numAttrs); +// +// for (uint32_t ii = 0; ii < numAttrs; ++ii) +// { +// uint16_t id; +// bx::read(&reader, id); +// +// Attrib::Enum attr = idToAttrib(id); +// +// if (Attrib::Count != attr) +// { +// m_attrMask[attr] = UINT16_MAX; +// } +// } + + bx::HashMurmur2A murmur; + murmur.begin(); + murmur.add(iohash); + murmur.add(m_code->data, m_code->size); + murmur.add(numAttrs); + murmur.add(m_attrMask, numAttrs); + m_hash = murmur.end(); + } + + void ShaderVK::destroy() + { + if (NULL != m_constantBuffer) + { + UniformBuffer::destroy(m_constantBuffer); + m_constantBuffer = NULL; + } + + m_numPredefined = 0; + + if (NULL != m_code) + { + release(m_code); + m_code = NULL; + m_hash = 0; + } + + if (VK_NULL_HANDLE != m_module) + { + vkDestroy(m_module); + } + } + + void TextureVK::destroy() + { + } + + void FrameBufferVK::destroy() + { + } + + 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 captureElapsed = 0; + +// m_gpuTimer.begin(m_commandList); + + if (0 < _render->m_iboffset) + { +// TransientIndexBuffer* ib = _render->m_transientIb; +// m_indexBuffers[ib->handle.idx].update(m_commandList, 0, _render->m_iboffset, ib->data); + } + + if (0 < _render->m_vboffset) + { +// TransientVertexBuffer* vb = _render->m_transientVb; +// m_vertexBuffers[vb->handle.idx].update(m_commandList, 0, _render->m_vboffset, vb->data); + } + + _render->sort(); + + RenderDraw currentState; + currentState.clear(); + currentState.m_stateFlags = BGFX_STATE_NONE; + currentState.m_stencil = packStencil(BGFX_STENCIL_NONE, BGFX_STENCIL_NONE); + + _render->m_hmdInitialized = false; + + const bool hmdEnabled = false; + ViewState viewState(_render, hmdEnabled); + viewState.reset(_render, hmdEnabled); + +// bool wireframe = !!(_render->m_debug&BGFX_DEBUG_WIREFRAME); +// setDebugWireframe(wireframe); + + uint16_t currentSamplerStateIdx = invalidHandle; + uint16_t currentProgramIdx = invalidHandle; + uint32_t currentBindHash = 0; + bool hasPredefined = false; + bool commandListChanged = false; + VkPipeline currentPipeline = VK_NULL_HANDLE; + 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; + + uint32_t blendFactor = 0; + + 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); + PrimInfo prim = s_primInfo[primIndex]; + + bool wasCompute = false; + bool viewHasScissor = false; + bool restoreScissor = false; + Rect viewScissorRect; + viewScissorRect.clear(); + + uint32_t statsNumPrimsSubmitted[BX_COUNTOF(s_primInfo)] = {}; + uint32_t statsNumPrimsRendered[BX_COUNTOF(s_primInfo)] = {}; + uint32_t statsNumInstances[BX_COUNTOF(s_primInfo)] = {}; + uint32_t statsNumIndices = 0; + uint32_t statsKeyType[2] = {}; + + VkSemaphore renderWait = m_presentDone[m_backBufferColorIdx]; + VK_CHECK(vkAcquireNextImageKHR(m_device + , m_swapchain + , UINT64_MAX + , renderWait + , VK_NULL_HANDLE + , &m_backBufferColorIdx + ) ); + + const uint64_t f0 = BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_FACTOR, BGFX_STATE_BLEND_FACTOR); + const uint64_t f1 = BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_INV_FACTOR, BGFX_STATE_BLEND_INV_FACTOR); + + + ScratchBufferVK& scratchBuffer = m_scratchBuffer[m_backBufferColorIdx]; + VkDescriptorBufferInfo descriptorBufferInfo; + scratchBuffer.reset(descriptorBufferInfo); + + VkCommandBufferBeginInfo cbbi; + cbbi.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO; + cbbi.pNext = NULL; + cbbi.flags = 0 + | VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT +// | VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT + ; + cbbi.pInheritanceInfo = NULL; + + m_commandBuffer = m_commandBuffers[m_backBufferColorIdx]; + VK_CHECK(vkBeginCommandBuffer(m_commandBuffer, &cbbi) ); + + setImageMemoryBarrier(m_commandBuffer + , m_backBufferColorImage[m_backBufferColorIdx] + , VK_IMAGE_LAYOUT_PRESENT_SRC_KHR + , VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL + ); + + VkRenderPassBeginInfo rpbi; + rpbi.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO; + rpbi.pNext = NULL; + rpbi.renderPass = m_renderPass; + rpbi.framebuffer = m_backBufferColor[m_backBufferColorIdx]; + rpbi.renderArea.offset.x = 0; + rpbi.renderArea.offset.y = 0; + rpbi.renderArea.extent = m_sci.imageExtent; + rpbi.clearValueCount = 0; + rpbi.pClearValues = NULL; + + bool beginRenderPass = false; + + if (0 == (_render->m_debug&BGFX_DEBUG_IFH) ) + { +// m_batch.begin(); + +// uint8_t eye = 0; +// uint8_t restartState = 0; + viewState.m_rect = _render->m_rect[0]; + + int32_t numItems = _render->m_num; + for (int32_t item = 0, restartItem = numItems; item < numItems || restartItem < numItems;) + { + const uint64_t encodedKey = _render->m_sortKeys[item]; + const bool isCompute = key.decode(encodedKey, _render->m_viewRemap); + statsKeyType[isCompute]++; + + const bool viewChanged = 0 + || key.m_view != view + || item == numItems + ; + + const RenderItem& renderItem = _render->m_renderItem[_render->m_sortValues[item] ]; + ++item; + + if (viewChanged) + { + if (beginRenderPass) + { + vkCmdEndRenderPass(m_commandBuffer); + beginRenderPass = false; + } + + VK_CHECK(vkEndCommandBuffer(m_commandBuffer) ); + +// m_batch.flush(m_commandList, true); + kick(renderWait); + renderWait = VK_NULL_HANDLE; +finishAll(); + + view = key.m_view; + currentPipeline = VK_NULL_HANDLE; + currentSamplerStateIdx = invalidHandle; +BX_UNUSED(currentSamplerStateIdx); + currentProgramIdx = invalidHandle; + hasPredefined = false; + + fbh = _render->m_fb[view]; + setFrameBuffer(fbh); + + viewState.m_rect = _render->m_rect[view]; + const Rect& rect = _render->m_rect[view]; + const Rect& scissorRect = _render->m_scissor[view]; + viewHasScissor = !scissorRect.isZero(); + viewScissorRect = viewHasScissor ? scissorRect : rect; + + rpbi.renderArea.offset.x = rect.m_x; + rpbi.renderArea.offset.y = rect.m_y; + rpbi.renderArea.extent.width = rect.m_width; + rpbi.renderArea.extent.height = rect.m_height; + VK_CHECK(vkBeginCommandBuffer(m_commandBuffer, &cbbi) ); + vkCmdBeginRenderPass(m_commandBuffer, &rpbi, VK_SUBPASS_CONTENTS_INLINE); + beginRenderPass = true; + + VkViewport vp; + vp.x = rect.m_x; + vp.y = rect.m_y; + vp.width = rect.m_width; + vp.height = rect.m_height; + vp.minDepth = 0.0f; + vp.maxDepth = 1.0f; + vkCmdSetViewport(m_commandBuffer, 0, 1, &vp); + + VkRect2D rc; + rc.offset.x = viewScissorRect.m_x; + 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); + + restoreScissor = false; + + Clear& clr = _render->m_clear[view]; + if (BGFX_CLEAR_NONE != clr.m_flags) + { + Rect clearRect = rect; + clearRect.setIntersect(rect, viewScissorRect); + clearQuad(clearRect, clr, _render->m_colorPalette); + } + + 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 +// ); +// } + } + } + + if (isCompute) + { + if (!wasCompute) + { + wasCompute = true; + +// m_commandList->SetComputeRootSignature(m_rootSignature); +// ID3D12DescriptorHeap* heaps[] = { +// m_samplerAllocator.getHeap(), +// scratchBuffer.getHeap(), +// }; +// m_commandList->SetDescriptorHeaps(BX_COUNTOF(heaps), heaps); + } + + const RenderCompute& compute = renderItem.compute; + + VkPipeline pipeline = getPipeline(key.m_program); + if (pipeline != currentPipeline) + { + currentPipeline = pipeline; + vkCmdBindPipeline(m_commandBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, pipeline); + currentBindHash = 0; + } + +// uint32_t bindHash = bx::hashMurmur2A(compute.m_bind, sizeof(compute.m_bind) ); +// if (currentBindHash != bindHash) +// { +// currentBindHash = bindHash; +// +// Bind* bindCached = bindLru.find(bindHash); +// if (NULL == bindCached) +// { +// D3D12_GPU_DESCRIPTOR_HANDLE srvHandle[BGFX_MAX_COMPUTE_BINDINGS] = {}; +// uint32_t samplerFlags[BGFX_MAX_COMPUTE_BINDINGS] = {}; +// +// for (uint32_t ii = 0; ii < BGFX_MAX_COMPUTE_BINDINGS; ++ii) +// { +// const Binding& bind = compute.m_bind[ii]; +// if (invalidHandle != bind.m_idx) +// { +// switch (bind.m_type) +// { +// case Binding::Image: +// { +// TextureD3D12& texture = m_textures[bind.m_idx]; +// +// if (Access::Read != bind.m_un.m_compute.m_access) +// { +// texture.setState(m_commandList, D3D12_RESOURCE_STATE_UNORDERED_ACCESS); +// scratchBuffer.allocUav(srvHandle[ii], texture, bind.m_un.m_compute.m_mip); +// } +// else +// { +// texture.setState(m_commandList, D3D12_RESOURCE_STATE_GENERIC_READ); +// scratchBuffer.allocSrv(srvHandle[ii], texture, bind.m_un.m_compute.m_mip); +// samplerFlags[ii] = texture.m_flags; +// } +// } +// 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) +// { +// buffer.setState(m_commandList, D3D12_RESOURCE_STATE_UNORDERED_ACCESS); +// scratchBuffer.allocUav(srvHandle[ii], buffer); +// } +// else +// { +// buffer.setState(m_commandList, D3D12_RESOURCE_STATE_GENERIC_READ); +// scratchBuffer.allocSrv(srvHandle[ii], buffer); +// } +// } +// break; +// } +// } +// } +// +// uint16_t samplerStateIdx = getSamplerState(samplerFlags, BGFX_MAX_COMPUTE_BINDINGS, _render->m_colorPalette); +// if (samplerStateIdx != currentSamplerStateIdx) +// { +// currentSamplerStateIdx = samplerStateIdx; +// m_commandList->SetComputeRootDescriptorTable(Rdt::Sampler, m_samplerAllocator.get(samplerStateIdx) ); +// } +// +// m_commandList->SetComputeRootDescriptorTable(Rdt::SRV, srvHandle[0]); +// m_commandList->SetComputeRootDescriptorTable(Rdt::UAV, srvHandle[0]); +// +// Bind bind; +// bind.m_srvHandle = srvHandle[0]; +// bind.m_samplerStateIdx = samplerStateIdx; +// bindLru.add(bindHash, bind, 0); +// } +// else +// { +// uint16_t samplerStateIdx = bindCached->m_samplerStateIdx; +// if (samplerStateIdx != currentSamplerStateIdx) +// { +// currentSamplerStateIdx = samplerStateIdx; +// m_commandList->SetComputeRootDescriptorTable(Rdt::Sampler, m_samplerAllocator.get(samplerStateIdx) ); +// } +// m_commandList->SetComputeRootDescriptorTable(Rdt::SRV, bindCached->m_srvHandle); +// m_commandList->SetComputeRootDescriptorTable(Rdt::UAV, bindCached->m_srvHandle); +// } +// } + + bool constantsChanged = false; + if (compute.m_constBegin < compute.m_constEnd + || currentProgramIdx != key.m_program) + { + rendererUpdateUniforms(this, _render->m_uniformBuffer, compute.m_constBegin, compute.m_constEnd); + + currentProgramIdx = key.m_program; + ProgramVK& program = m_program[currentProgramIdx]; + + UniformBuffer* vcb = program.m_vsh->m_constantBuffer; + if (NULL != vcb) + { + commit(*vcb); + } + + hasPredefined = 0 < program.m_numPredefined; + constantsChanged = true; + } + + if (constantsChanged + || hasPredefined) + { + ProgramVK& program = m_program[currentProgramIdx]; + viewState.setPredefined<4>(this, view, 0, program, _render, compute); +// commitShaderConstants(key.m_program, gpuAddress); +// m_commandList->SetComputeRootConstantBufferView(Rdt::CBV, gpuAddress); + } + + if (isValid(compute.m_indirectBuffer) ) + { + const VertexBufferVK& vb = m_vertexBuffers[compute.m_indirectBuffer.idx]; + + uint32_t numDrawIndirect = UINT16_MAX == compute.m_numIndirect + ? vb.m_size/BGFX_CONFIG_DRAW_INDIRECT_STRIDE + : compute.m_numIndirect + ; + + uint32_t args = compute.m_startIndirect * BGFX_CONFIG_DRAW_INDIRECT_STRIDE; + for (uint32_t ii = 0; ii < numDrawIndirect; ++ii) + { +// m_commandList->ExecuteIndirect(ptr, args); + args += BGFX_CONFIG_DRAW_INDIRECT_STRIDE; + } + } + else + { +// m_commandList->Dispatch(compute.m_numX, compute.m_numY, compute.m_numZ); + } + + continue; + } + + const RenderDraw& draw = renderItem.draw; + + const bool hasOcclusionQuery = false; //0 != (draw.m_stateFlags & BGFX_STATE_INTERNAL_OCCLUSION_QUERY); +// if (isValid(draw.m_occlusionQuery) +// && !hasOcclusionQuery +// && !isVisible(_render, draw.m_occlusionQuery, 0 != (draw.m_submitFlags&BGFX_SUBMIT_INTERNAL_OCCLUSION_VISIBLE) ) ) +// { +// continue; +// } + + 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) & BGFX_STENCIL_FUNC_REF_MASK; + currentState.m_stencil = newStencil; + + if (viewChanged + || wasCompute) + { + if (wasCompute) + { + wasCompute = false; + } + + if (BX_ENABLED(BGFX_CONFIG_DEBUG_PIX) ) + { + BX_UNUSED(s_viewName); +// wchar_t* viewNameW = s_viewNameW[view]; +// viewNameW[3] = L' '; +// PIX_ENDEVENT(); +// PIX_BEGINEVENT(D3DCOLOR_RGBA(0xff, 0x00, 0x00, 0xff), viewNameW); + } + + commandListChanged = true; + } + + if (commandListChanged) + { + commandListChanged = false; + +// m_commandList->SetGraphicsRootSignature(m_rootSignature); +// ID3D12DescriptorHeap* heaps[] = { +// m_samplerAllocator.getHeap(), +// scratchBuffer.getHeap(), +// }; +// m_commandList->SetDescriptorHeaps(BX_COUNTOF(heaps), heaps); + + currentPipeline = VK_NULL_HANDLE; + currentBindHash = 0; + currentSamplerStateIdx = invalidHandle; + currentProgramIdx = invalidHandle; + currentState.clear(); + 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; + + 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); + + if (isValid(draw.m_stream[0].m_handle) ) + { + const uint64_t state = draw.m_stateFlags; + bool hasFactor = 0 + || f0 == (state & f0) + || f1 == (state & f1) + ; + + const VertexBufferVK& vb = m_vertexBuffers[draw.m_stream[0].m_handle.idx]; + uint16_t declIdx = !isValid(vb.m_decl) ? draw.m_stream[0].m_decl.idx : vb.m_decl.idx; + + VkPipeline pipeline = + getPipeline(state + , draw.m_stencil + , declIdx + , key.m_program + , uint8_t(draw.m_instanceDataStride/16) + ); + + uint16_t scissor = draw.m_scissor; + uint32_t bindHash = bx::hashMurmur2A(draw.m_bind, sizeof(draw.m_bind) ); + if (currentBindHash != bindHash + || 0 != changedStencil + || (hasFactor && blendFactor != draw.m_rgba) + || (0 != (BGFX_STATE_PT_MASK & changedFlags) + || prim.m_topology != s_primInfo[primIndex].m_topology) + || currentState.m_scissor != scissor + || pipeline != currentPipeline + || hasOcclusionQuery) + { +// m_batch.flush(m_commandList); + } + +// if (currentBindHash != bindHash) +// { +// currentBindHash = bindHash; +// +// Bind* bindCached = bindLru.find(bindHash); +// if (NULL == bindCached) +// { +// D3D12_GPU_DESCRIPTOR_HANDLE srvHandle[BGFX_CONFIG_MAX_TEXTURE_SAMPLERS]; +// uint32_t samplerFlags[BGFX_CONFIG_MAX_TEXTURE_SAMPLERS]; +// { +// 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) +// { +// 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) +// ; +// } +// else +// { +// bx::memCopy(&srvHandle[stage], &srvHandle[0], sizeof(D3D12_GPU_DESCRIPTOR_HANDLE) ); +// samplerFlags[stage] = 0; +// } +// } +// } +// +// if (srvHandle[0].ptr != 0) +// { +// uint16_t samplerStateIdx = getSamplerState(samplerFlags, BGFX_CONFIG_MAX_TEXTURE_SAMPLERS, _render->m_colorPalette); +// if (samplerStateIdx != currentSamplerStateIdx) +// { +// currentSamplerStateIdx = samplerStateIdx; +// m_commandList->SetGraphicsRootDescriptorTable(Rdt::Sampler, m_samplerAllocator.get(samplerStateIdx) ); +// } +// +// m_commandList->SetGraphicsRootDescriptorTable(Rdt::SRV, srvHandle[0]); +// +// Bind bind; +// bind.m_srvHandle = srvHandle[0]; +// bind.m_samplerStateIdx = samplerStateIdx; +// bindLru.add(bindHash, bind, 0); +// } +// } +// else +// { +// uint16_t samplerStateIdx = bindCached->m_samplerStateIdx; +// if (samplerStateIdx != currentSamplerStateIdx) +// { +// currentSamplerStateIdx = samplerStateIdx; +// m_commandList->SetGraphicsRootDescriptorTable(Rdt::Sampler, m_samplerAllocator.get(samplerStateIdx) ); +// } +// m_commandList->SetGraphicsRootDescriptorTable(Rdt::SRV, bindCached->m_srvHandle); +// } +// } + + if (pipeline != currentPipeline + || 0 != changedStencil) + { + const uint32_t fstencil = unpackStencil(0, draw.m_stencil); + const uint32_t ref = (fstencil&BGFX_STENCIL_FUNC_REF_MASK)>>BGFX_STENCIL_FUNC_REF_SHIFT; + vkCmdSetStencilReference(m_commandBuffer, VK_STENCIL_FRONT_AND_BACK, ref); + } + + if (pipeline != currentPipeline + || (hasFactor && blendFactor != draw.m_rgba) ) + { + blendFactor = draw.m_rgba; + + float bf[4]; + bf[0] = ( (draw.m_rgba>>24) )/255.0f; + bf[1] = ( (draw.m_rgba>>16)&0xff)/255.0f; + bf[2] = ( (draw.m_rgba>> 8)&0xff)/255.0f; + bf[3] = ( (draw.m_rgba )&0xff)/255.0f; + vkCmdSetBlendConstants(m_commandBuffer, bf); + } + + if (0 != (BGFX_STATE_PT_MASK & changedFlags) + || prim.m_topology != s_primInfo[primIndex].m_topology) + { + const uint64_t pt = newFlags&BGFX_STATE_PT_MASK; + primIndex = uint8_t(pt>>BGFX_STATE_PT_SHIFT); + prim = s_primInfo[primIndex]; +// m_commandList->IASetPrimitiveTopology(prim.m_topology); + } + + if (currentState.m_scissor != scissor) + { + currentState.m_scissor = scissor; + + if (UINT16_MAX == scissor) + { + if (restoreScissor + || viewHasScissor) + { + restoreScissor = false; + VkRect2D rc; + rc.offset.x = viewScissorRect.m_x; + rc.offset.x = 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); + } + } + else + { + restoreScissor = true; + Rect scissorRect; + scissorRect.setIntersect(viewScissorRect,_render->m_rectCache.m_cache[scissor]); + if (scissorRect.isZeroArea() ) + { + continue; + } + + VkRect2D rc; + rc.offset.x = scissorRect.m_x; + rc.offset.x = 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); + } + } + + if (pipeline != currentPipeline) + { + currentPipeline = pipeline; + vkCmdBindPipeline(m_commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline); + } + + bool constantsChanged = false; + if (draw.m_constBegin < draw.m_constEnd + || currentProgramIdx != key.m_program + || BGFX_STATE_ALPHA_REF_MASK & changedFlags) + { + currentProgramIdx = key.m_program; + ProgramVK& program = m_program[currentProgramIdx]; + + UniformBuffer* vcb = program.m_vsh->m_constantBuffer; + if (NULL != vcb) + { + commit(*vcb); + } + + UniformBuffer* fcb = program.m_fsh->m_constantBuffer; + if (NULL != fcb) + { + commit(*fcb); + } + + hasPredefined = 0 < program.m_numPredefined; + constantsChanged = true; + } + + if (constantsChanged + || hasPredefined) + { + ProgramVK& program = m_program[currentProgramIdx]; + uint32_t ref = (newFlags&BGFX_STATE_ALPHA_REF_MASK)>>BGFX_STATE_ALPHA_REF_SHIFT; + viewState.m_alphaRef = ref/255.0f; + viewState.setPredefined<4>(this, view, 0, program, _render, draw); + commitShaderUniforms(m_commandBuffer, key.m_program); //, gpuAddress); + } + + +// vb.setState(_commandList, D3D12_RESOURCE_STATE_GENERIC_READ); + + const VertexDecl& vertexDecl = m_vertexDecls[declIdx]; + uint32_t numIndices = 0; + + VkDeviceSize offset = 0; + vkCmdBindVertexBuffers(m_commandBuffer + , 0 + , 1 + , &vb.m_buffer + , &offset + ); + + if (!isValid(draw.m_indexBuffer) ) + { + const uint32_t numVertices = UINT32_MAX == draw.m_numVertices + ? vb.m_size / vertexDecl.m_stride + : draw.m_numVertices + ; + vkCmdDraw(m_commandBuffer + , numVertices + , draw.m_numInstances + , draw.m_stream[0].m_startVertex + , 0 + ); + } + else + { + BufferVK& ib = m_indexBuffers[draw.m_indexBuffer.idx]; +// ib.setState(_commandList, D3D12_RESOURCE_STATE_GENERIC_READ); + + const bool hasIndex16 = 0 == (ib.m_flags & BGFX_BUFFER_INDEX32); + const uint32_t indexSize = hasIndex16 ? 2 : 4; + + numIndices = UINT32_MAX == draw.m_numIndices + ? ib.m_size / indexSize + : draw.m_numIndices + ; + + vkCmdBindIndexBuffer(m_commandBuffer + , ib.m_buffer + , 0 + , hasIndex16 + ? VK_INDEX_TYPE_UINT16 + : VK_INDEX_TYPE_UINT32 + ); + vkCmdDrawIndexed(m_commandBuffer + , numIndices + , draw.m_numInstances + , draw.m_startIndex + , draw.m_stream[0].m_startVertex + , 0 + ); + } + + uint32_t numPrimsSubmitted = numIndices / prim.m_div - prim.m_sub; + uint32_t numPrimsRendered = numPrimsSubmitted*draw.m_numInstances; + + statsNumPrimsSubmitted[primIndex] += numPrimsSubmitted; + statsNumPrimsRendered[primIndex] += numPrimsRendered; + statsNumInstances[primIndex] += draw.m_numInstances; + statsNumIndices += numIndices; + + if (hasOcclusionQuery) + { +// m_occlusionQuery.begin(m_commandList, _render, draw.m_occlusionQuery); +// m_batch.flush(m_commandList); +// m_occlusionQuery.end(m_commandList); + } + } + } + +// 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; + + static int64_t min = frameTime; + static int64_t max = frameTime; + min = bx::int64_min(min, frameTime); + max = bx::int64_max(max, frameTime); + + static uint32_t maxGpuLatency = 0; + static double maxGpuElapsed = 0.0f; + double elapsedGpuMs = 0.0; +BX_UNUSED(maxGpuLatency, maxGpuElapsed, elapsedGpuMs); + + static int64_t presentMin = 0; //m_presentElapsed; + static int64_t presentMax = 0; //m_presentElapsed; +BX_UNUSED(presentMin, presentMax); +// presentMin = bx::int64_min(presentMin, m_presentElapsed); +// presentMax = bx::int64_max(presentMax, m_presentElapsed); + +// m_gpuTimer.end(m_commandList); + +// while (m_gpuTimer.get() ) +// { +// double toGpuMs = 1000.0 / double(m_gpuTimer.m_frequency); +// elapsedGpuMs = m_gpuTimer.m_elapsed * toGpuMs; +// maxGpuElapsed = elapsedGpuMs > maxGpuElapsed ? elapsedGpuMs : maxGpuElapsed; +// } +// maxGpuLatency = bx::uint32_imax(maxGpuLatency, m_gpuTimer.m_control.available()-1); + + const int64_t timerFreq = bx::getHPFrequency(); + + perfStats.cpuTimeEnd = now; + perfStats.cpuTimerFreq = timerFreq; +// perfStats.gpuTimeBegin = m_gpuTimer.m_begin; +// perfStats.gpuTimeEnd = m_gpuTimer.m_end; +// perfStats.gpuTimerFreq = m_gpuTimer.m_frequency; +// perfStats.numDraw = statsKeyType[0]; +// perfStats.numCompute = statsKeyType[1]; +// perfStats.maxGpuLatency = maxGpuLatency; + + if (_render->m_debug & (BGFX_DEBUG_IFH|BGFX_DEBUG_STATS) ) + { +// PIX_BEGINEVENT(D3DCOLOR_RGBA(0x40, 0x40, 0x40, 0xff), L"debugstats"); + +// m_needPresent = true; + TextVideoMem& tvm = m_textVideoMem; + + static int64_t next = now; + + if (now >= next) + { + next = now + bx::getHPFrequency(); + double freq = double(bx::getHPFrequency() ); + double toMs = 1000.0 / freq; + + tvm.clear(); + uint16_t pos = 0; + tvm.printf(0, pos++, BGFX_CONFIG_DEBUG ? 0x89 : 0x8f + , " %s / " BX_COMPILER_NAME " / " BX_CPU_NAME " / " BX_ARCH_NAME " / " BX_PLATFORM_NAME " " + , getRendererName() + ); + +// const DXGI_ADAPTER_DESC& desc = m_adapterDesc; +// char description[BX_COUNTOF(desc.Description)]; +// wcstombs(description, desc.Description, BX_COUNTOF(desc.Description) ); +// tvm.printf(0, pos++, 0x8f, " Device: %s", description); +// +// char dedicatedVideo[16]; +// bx::prettify(dedicatedVideo, BX_COUNTOF(dedicatedVideo), desc.DedicatedVideoMemory); +// +// char dedicatedSystem[16]; +// bx::prettify(dedicatedSystem, BX_COUNTOF(dedicatedSystem), desc.DedicatedSystemMemory); +// +// char sharedSystem[16]; +// bx::prettify(sharedSystem, BX_COUNTOF(sharedSystem), desc.SharedSystemMemory); +// +// char processMemoryUsed[16]; +// bx::prettify(processMemoryUsed, BX_COUNTOF(processMemoryUsed), bx::getProcessMemoryUsed() ); +// +// tvm.printf(0, pos++, 0x8f, " Memory: %s (video), %s (system), %s (shared), %s (process) " +// , dedicatedVideo +// , dedicatedSystem +// , sharedSystem +// , processMemoryUsed +// ); + +// DXGI_QUERY_VIDEO_MEMORY_INFO memInfo; +// DX_CHECK(m_adapter->QueryVideoMemoryInfo(0, DXGI_MEMORY_SEGMENT_GROUP_LOCAL, &memInfo) ); +// +// char budget[16]; +// bx::prettify(budget, BX_COUNTOF(budget), memInfo.Budget); +// +// char currentUsage[16]; +// bx::prettify(currentUsage, BX_COUNTOF(currentUsage), memInfo.CurrentUsage); +// +// char availableForReservation[16]; +// bx::prettify(availableForReservation, BX_COUNTOF(currentUsage), memInfo.AvailableForReservation); +// +// char currentReservation[16]; +// bx::prettify(currentReservation, BX_COUNTOF(currentReservation), memInfo.CurrentReservation); +// +// tvm.printf(0, pos++, 0x8f, " Budget: %s, Usage: %s, AvailRes: %s, CurrRes: %s " +// , budget +// , currentUsage +// , availableForReservation +// , currentReservation +// ); + + pos = 10; + tvm.printf(10, pos++, 0x8e, " Frame: % 7.3f, % 7.3f \x1f, % 7.3f \x1e [ms] / % 6.2f FPS " + , double(frameTime)*toMs + , double(min)*toMs + , double(max)*toMs + , freq/frameTime + ); +// tvm.printf(10, pos++, 0x8e, " Present: % 7.3f, % 7.3f \x1f, % 7.3f \x1e [ms] " +// , double(m_presentElapsed)*toMs +// , double(presentMin)*toMs +// , double(presentMax)*toMs +// ); + + char hmd[16]; + bx::snprintf(hmd, BX_COUNTOF(hmd), ", [%c] HMD ", hmdEnabled ? '\xfe' : ' '); + + const uint32_t msaa = (m_resolution.m_flags&BGFX_RESET_MSAA_MASK)>>BGFX_RESET_MSAA_SHIFT; + tvm.printf(10, pos++, 0x8e, " Reset flags: [%c] vsync, [%c] MSAAx%d%s, [%c] MaxAnisotropy " + , !!(m_resolution.m_flags&BGFX_RESET_VSYNC) ? '\xfe' : ' ' + , 0 != msaa ? '\xfe' : ' ' + , 1<m_num + , statsKeyType[0] + , statsKeyType[1] + , elapsedCpuMs + ); + + for (uint32_t ii = 0; ii < BX_COUNTOF(s_primName); ++ii) + { + tvm.printf(10, pos++, 0x8e, " %9s: %7d (#inst: %5d), submitted: %7d " + , s_primName[ii] + , statsNumPrimsRendered[ii] + , statsNumInstances[ii] + , statsNumPrimsSubmitted[ii] + ); + } + +// tvm.printf(10, pos++, 0x8e, " Batch: %7dx%d indirect, %7d immediate " +// , m_batch.m_stats.m_numIndirect[BatchD3D12::Draw] +// , m_batch.m_maxDrawPerBatch +// , m_batch.m_stats.m_numImmediate[BatchD3D12::Draw] +// ); + +// tvm.printf(10, pos++, 0x8e, " %7dx%d indirect, %7d immediate " +// , m_batch.m_stats.m_numIndirect[BatchD3D12::DrawIndexed] +// , m_batch.m_maxDrawPerBatch +// , m_batch.m_stats.m_numImmediate[BatchD3D12::DrawIndexed] +// ); + + if (NULL != m_renderdocdll) + { + tvm.printf(tvm.m_width-27, 0, 0x1f, " [F11 - RenderDoc capture] "); + } + + 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, " 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, " PSO | Sampler | Bind | Queued "); + tvm.printf(10, pos++, 0x8e, " %6d " //| %6d | %6d | %6d " + , m_pipelineStateCache.getCount() +// , m_samplerStateCache.getCount() +// , bindLru.getCount() +// , m_cmd.m_control.available() + ); + pos++; + + double captureMs = double(captureElapsed)*toMs; + tvm.printf(10, pos++, 0x8e, " Capture: %7.4f [ms] ", captureMs); + + uint8_t attr[2] = { 0x89, 0x8a }; + uint8_t attrIndex = _render->m_waitSubmit < _render->m_waitRender; + + tvm.printf(10, pos++, attr[attrIndex&1], " Submit wait: %7.4f [ms] ", _render->m_waitSubmit*toMs); + tvm.printf(10, pos++, attr[(attrIndex+1)&1], " Render wait: %7.4f [ms] ", _render->m_waitRender*toMs); + + min = frameTime; + max = frameTime; +// presentMin = m_presentElapsed; +// presentMax = m_presentElapsed; + } + + blit(this, _textVideoMemBlitter, tvm); + +// PIX_ENDEVENT(); + } + else if (_render->m_debug & BGFX_DEBUG_TEXT) + { +// PIX_BEGINEVENT(D3DCOLOR_RGBA(0x40, 0x40, 0x40, 0xff), L"debugtext"); + + blit(this, _textVideoMemBlitter, _render->m_textVideoMem); + +// PIX_ENDEVENT(); + } + + if (beginRenderPass) + { + vkCmdEndRenderPass(m_commandBuffer); + beginRenderPass = false; + } + + setImageMemoryBarrier(m_commandBuffer + , m_backBufferColorImage[m_backBufferColorIdx] + , VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL + , VK_IMAGE_LAYOUT_PRESENT_SRC_KHR + ); + + VK_CHECK(vkEndCommandBuffer(m_commandBuffer) ); + + kick(renderWait); //, m_presentDone[m_backBufferColorIdx]); + finishAll(); + + VK_CHECK(vkResetCommandPool(m_device, m_commandPool, 0) ); + } + +} /* namespace vk */ } // namespace bgfx + +#else + namespace bgfx { namespace vk { RendererContextI* rendererCreate() @@ -16,3 +4651,5 @@ namespace bgfx { namespace vk { } } /* namespace vk */ } // namespace bgfx + +#endif // BGFX_CONFIG_RENDERER_VULKAN diff --git a/3rdparty/bgfx/src/renderer_vk.h b/3rdparty/bgfx/src/renderer_vk.h new file mode 100644 index 0000000..90c352b --- /dev/null +++ b/3rdparty/bgfx/src/renderer_vk.h @@ -0,0 +1,449 @@ +/* + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause + */ + +#ifndef BGFX_RENDERER_VK_H_HEADER_GUARD +#define BGFX_RENDERER_VK_H_HEADER_GUARD + +#if BX_PLATFORM_ANDROID +# define VK_USE_PLATFORM_ANDROID_KHR +# define KHR_SURFACE_EXTENSION_NAME VK_KHR_ANDROID_SURFACE_EXTENSION_NAME +# define VK_IMPORT_INSTANCE_PLATFORM VK_IMPORT_INSTANCE_ANDROID +#elif BX_PLATFORM_LINUX +//# define VK_USE_PLATFORM_MIR_KHR +# define VK_USE_PLATFORM_XLIB_KHR +# define VK_USE_PLATFORM_XCB_KHR +//# define VK_USE_PLATFORM_WAYLAND_KHR +# define KHR_SURFACE_EXTENSION_NAME VK_KHR_XCB_SURFACE_EXTENSION_NAME +# define VK_IMPORT_INSTANCE_PLATFORM VK_IMPORT_INSTANCE_LINUX +#elif BX_PLATFORM_WINDOWS +# define VK_USE_PLATFORM_WIN32_KHR +# define KHR_SURFACE_EXTENSION_NAME VK_KHR_WIN32_SURFACE_EXTENSION_NAME +# define VK_IMPORT_INSTANCE_PLATFORM VK_IMPORT_INSTANCE_WINDOWS +#else +# define KHR_SURFACE_EXTENSION_NAME "" +# define VK_IMPORT_INSTANCE_PLATFORM +#endif // BX_PLATFORM_* + +#define VK_NO_STDINT_H +#define VK_NO_PROTOTYPES +#include +#include "renderer.h" +#include "debug_renderdoc.h" + +#define VK_IMPORT \ + VK_IMPORT_FUNC(false, vkCreateInstance); \ + VK_IMPORT_FUNC(false, vkGetInstanceProcAddr); \ + VK_IMPORT_FUNC(false, vkGetDeviceProcAddr); \ + VK_IMPORT_FUNC(false, vkEnumerateInstanceExtensionProperties); \ + VK_IMPORT_FUNC(false, vkEnumerateInstanceLayerProperties); \ + +#define VK_IMPORT_INSTANCE_ANDROID \ + VK_IMPORT_INSTANCE_FUNC(true, vkCreateAndroidSurfaceKHR); + +#define VK_IMPORT_INSTANCE_LINUX \ + VK_IMPORT_INSTANCE_FUNC(true, vkCreateXlibSurfaceKHR); \ + VK_IMPORT_INSTANCE_FUNC(true, vkGetPhysicalDeviceXlibPresentationSupportKHR); \ + VK_IMPORT_INSTANCE_FUNC(true, vkCreateXcbSurfaceKHR); \ + VK_IMPORT_INSTANCE_FUNC(true, vkGetPhysicalDeviceXcbPresentationSupportKHR); \ + +// VK_IMPORT_INSTANCE_FUNC(true, vkCreateWaylandSurfaceKHR); +// VK_IMPORT_INSTANCE_FUNC(true, vkGetPhysicalDeviceWaylandPresentationSupportKHR); +// VK_IMPORT_INSTANCE_FUNC(true, vkCreateMirSurfaceKHR); +// VK_IMPORT_INSTANCE_FUNC(true, vkGetPhysicalDeviceMirPresentationSupportKHR); + +#define VK_IMPORT_INSTANCE_WINDOWS \ + VK_IMPORT_INSTANCE_FUNC(true, vkCreateWin32SurfaceKHR); \ + VK_IMPORT_INSTANCE_FUNC(true, vkGetPhysicalDeviceWin32PresentationSupportKHR); + +#define VK_IMPORT_INSTANCE \ + VK_IMPORT_INSTANCE_FUNC(false, vkDestroyInstance); \ + VK_IMPORT_INSTANCE_FUNC(false, vkEnumeratePhysicalDevices); \ + VK_IMPORT_INSTANCE_FUNC(false, vkEnumerateDeviceExtensionProperties); \ + VK_IMPORT_INSTANCE_FUNC(false, vkEnumerateDeviceLayerProperties); \ + VK_IMPORT_INSTANCE_FUNC(false, vkGetPhysicalDeviceProperties); \ + VK_IMPORT_INSTANCE_FUNC(false, vkGetPhysicalDeviceFormatProperties); \ + VK_IMPORT_INSTANCE_FUNC(false, vkGetPhysicalDeviceImageFormatProperties); \ + VK_IMPORT_INSTANCE_FUNC(false, vkGetPhysicalDeviceMemoryProperties); \ + VK_IMPORT_INSTANCE_FUNC(false, vkGetPhysicalDeviceQueueFamilyProperties); \ + VK_IMPORT_INSTANCE_FUNC(false, vkGetPhysicalDeviceSurfaceCapabilitiesKHR); \ + VK_IMPORT_INSTANCE_FUNC(false, vkGetPhysicalDeviceSurfaceFormatsKHR); \ + VK_IMPORT_INSTANCE_FUNC(false, vkGetPhysicalDeviceSurfacePresentModesKHR); \ + VK_IMPORT_INSTANCE_FUNC(false, vkGetPhysicalDeviceSurfaceSupportKHR); \ + VK_IMPORT_INSTANCE_FUNC(false, vkCreateDevice); \ + VK_IMPORT_INSTANCE_FUNC(false, vkDestroyDevice); \ + VK_IMPORT_INSTANCE_FUNC(false, vkDestroySurfaceKHR); \ + /* VK_EXT_debug_report */ \ + VK_IMPORT_INSTANCE_FUNC(true, vkCreateDebugReportCallbackEXT); \ + VK_IMPORT_INSTANCE_FUNC(true, vkDestroyDebugReportCallbackEXT); \ + VK_IMPORT_INSTANCE_FUNC(true, vkDebugReportMessageEXT); \ + VK_IMPORT_INSTANCE_PLATFORM + +#define VK_IMPORT_DEVICE \ + VK_IMPORT_DEVICE_FUNC(false, vkGetDeviceQueue); \ + VK_IMPORT_DEVICE_FUNC(false, vkCreateSwapchainKHR); \ + VK_IMPORT_DEVICE_FUNC(false, vkDestroySwapchainKHR); \ + VK_IMPORT_DEVICE_FUNC(false, vkGetSwapchainImagesKHR); \ + VK_IMPORT_DEVICE_FUNC(false, vkAcquireNextImageKHR); \ + VK_IMPORT_DEVICE_FUNC(false, vkQueuePresentKHR); \ + VK_IMPORT_DEVICE_FUNC(false, vkCreateFence); \ + VK_IMPORT_DEVICE_FUNC(false, vkDestroyFence); \ + VK_IMPORT_DEVICE_FUNC(false, vkCreateSemaphore); \ + VK_IMPORT_DEVICE_FUNC(false, vkDestroySemaphore); \ + VK_IMPORT_DEVICE_FUNC(false, vkResetFences); \ + VK_IMPORT_DEVICE_FUNC(false, vkCreateCommandPool); \ + VK_IMPORT_DEVICE_FUNC(false, vkDestroyCommandPool); \ + VK_IMPORT_DEVICE_FUNC(false, vkResetCommandPool); \ + VK_IMPORT_DEVICE_FUNC(false, vkAllocateCommandBuffers); \ + VK_IMPORT_DEVICE_FUNC(false, vkFreeCommandBuffers); \ + VK_IMPORT_DEVICE_FUNC(false, vkGetBufferMemoryRequirements); \ + VK_IMPORT_DEVICE_FUNC(false, vkGetImageMemoryRequirements); \ + VK_IMPORT_DEVICE_FUNC(false, vkAllocateMemory); \ + VK_IMPORT_DEVICE_FUNC(false, vkFreeMemory); \ + VK_IMPORT_DEVICE_FUNC(false, vkCreateImage); \ + VK_IMPORT_DEVICE_FUNC(false, vkDestroyImage); \ + VK_IMPORT_DEVICE_FUNC(false, vkCreateImageView); \ + VK_IMPORT_DEVICE_FUNC(false, vkDestroyImageView); \ + VK_IMPORT_DEVICE_FUNC(false, vkCreateBuffer); \ + VK_IMPORT_DEVICE_FUNC(false, vkDestroyBuffer); \ + VK_IMPORT_DEVICE_FUNC(false, vkCreateFramebuffer); \ + VK_IMPORT_DEVICE_FUNC(false, vkDestroyFramebuffer); \ + VK_IMPORT_DEVICE_FUNC(false, vkCreateRenderPass); \ + VK_IMPORT_DEVICE_FUNC(false, vkDestroyRenderPass); \ + VK_IMPORT_DEVICE_FUNC(false, vkCreateShaderModule); \ + VK_IMPORT_DEVICE_FUNC(false, vkDestroyShaderModule); \ + VK_IMPORT_DEVICE_FUNC(false, vkCreatePipelineCache); \ + VK_IMPORT_DEVICE_FUNC(false, vkDestroyPipelineCache); \ + VK_IMPORT_DEVICE_FUNC(false, vkGetPipelineCacheData); \ + VK_IMPORT_DEVICE_FUNC(false, vkMergePipelineCaches); \ + VK_IMPORT_DEVICE_FUNC(false, vkCreateGraphicsPipelines); \ + VK_IMPORT_DEVICE_FUNC(false, vkCreateComputePipelines); \ + VK_IMPORT_DEVICE_FUNC(false, vkDestroyPipeline); \ + VK_IMPORT_DEVICE_FUNC(false, vkCreatePipelineLayout); \ + VK_IMPORT_DEVICE_FUNC(false, vkDestroyPipelineLayout); \ + VK_IMPORT_DEVICE_FUNC(false, vkCreateSampler); \ + VK_IMPORT_DEVICE_FUNC(false, vkDestroySampler); \ + VK_IMPORT_DEVICE_FUNC(false, vkCreateDescriptorSetLayout); \ + VK_IMPORT_DEVICE_FUNC(false, vkDestroyDescriptorSetLayout); \ + VK_IMPORT_DEVICE_FUNC(false, vkCreateDescriptorPool); \ + VK_IMPORT_DEVICE_FUNC(false, vkDestroyDescriptorPool); \ + VK_IMPORT_DEVICE_FUNC(false, vkResetDescriptorPool); \ + VK_IMPORT_DEVICE_FUNC(false, vkAllocateDescriptorSets); \ + VK_IMPORT_DEVICE_FUNC(false, vkFreeDescriptorSets); \ + VK_IMPORT_DEVICE_FUNC(false, vkUpdateDescriptorSets); \ + VK_IMPORT_DEVICE_FUNC(false, vkQueueSubmit); \ + VK_IMPORT_DEVICE_FUNC(false, vkQueueWaitIdle); \ + VK_IMPORT_DEVICE_FUNC(false, vkDeviceWaitIdle); \ + VK_IMPORT_DEVICE_FUNC(false, vkWaitForFences); \ + VK_IMPORT_DEVICE_FUNC(false, vkBeginCommandBuffer); \ + VK_IMPORT_DEVICE_FUNC(false, vkEndCommandBuffer); \ + VK_IMPORT_DEVICE_FUNC(false, vkCmdPipelineBarrier); \ + VK_IMPORT_DEVICE_FUNC(false, vkCmdBeginRenderPass); \ + VK_IMPORT_DEVICE_FUNC(false, vkCmdEndRenderPass); \ + VK_IMPORT_DEVICE_FUNC(false, vkCmdSetViewport); \ + VK_IMPORT_DEVICE_FUNC(false, vkCmdDraw); \ + VK_IMPORT_DEVICE_FUNC(false, vkCmdDrawIndexed); \ + VK_IMPORT_DEVICE_FUNC(false, vkCmdDrawIndirect); \ + VK_IMPORT_DEVICE_FUNC(false, vkCmdDrawIndexedIndirect); \ + VK_IMPORT_DEVICE_FUNC(false, vkCmdDispatch); \ + VK_IMPORT_DEVICE_FUNC(false, vkCmdDispatchIndirect); \ + VK_IMPORT_DEVICE_FUNC(false, vkCmdBindPipeline); \ + VK_IMPORT_DEVICE_FUNC(false, vkCmdSetStencilReference); \ + VK_IMPORT_DEVICE_FUNC(false, vkCmdSetBlendConstants); \ + VK_IMPORT_DEVICE_FUNC(false, vkCmdSetScissor); \ + VK_IMPORT_DEVICE_FUNC(false, vkCmdBindDescriptorSets); \ + VK_IMPORT_DEVICE_FUNC(false, vkCmdBindIndexBuffer); \ + VK_IMPORT_DEVICE_FUNC(false, vkCmdBindVertexBuffers); \ + VK_IMPORT_DEVICE_FUNC(false, vkCmdUpdateBuffer); \ + VK_IMPORT_DEVICE_FUNC(false, vkCmdClearColorImage); \ + VK_IMPORT_DEVICE_FUNC(false, vkCmdClearDepthStencilImage); \ + VK_IMPORT_DEVICE_FUNC(false, vkCmdClearAttachments); \ + VK_IMPORT_DEVICE_FUNC(false, vkCmdResolveImage); \ + VK_IMPORT_DEVICE_FUNC(false, vkMapMemory); \ + VK_IMPORT_DEVICE_FUNC(false, vkUnmapMemory); \ + VK_IMPORT_DEVICE_FUNC(false, vkFlushMappedMemoryRanges); \ + VK_IMPORT_DEVICE_FUNC(false, vkInvalidateMappedMemoryRanges); \ + VK_IMPORT_DEVICE_FUNC(false, vkBindBufferMemory); \ + VK_IMPORT_DEVICE_FUNC(false, vkBindImageMemory); \ + /* VK_EXT_debug_marker */ \ + VK_IMPORT_DEVICE_FUNC(true, vkDebugMarkerSetObjectTagEXT); \ + VK_IMPORT_DEVICE_FUNC(true, vkDebugMarkerSetObjectNameEXT); \ + VK_IMPORT_DEVICE_FUNC(true, vkCmdDebugMarkerBeginEXT); \ + VK_IMPORT_DEVICE_FUNC(true, vkCmdDebugMarkerEndEXT); \ + VK_IMPORT_DEVICE_FUNC(true, vkCmdDebugMarkerInsertEXT); \ + +#define VK_DESTROY \ + VK_DESTROY_FUNC(Buffer); \ + VK_DESTROY_FUNC(CommandPool); \ + VK_DESTROY_FUNC(DescriptorPool); \ + VK_DESTROY_FUNC(DescriptorSetLayout); \ + VK_DESTROY_FUNC(Fence); \ + VK_DESTROY_FUNC(Framebuffer); \ + VK_DESTROY_FUNC(Image); \ + VK_DESTROY_FUNC(ImageView); \ + VK_DESTROY_FUNC(Pipeline); \ + VK_DESTROY_FUNC(PipelineCache); \ + VK_DESTROY_FUNC(PipelineLayout); \ + VK_DESTROY_FUNC(RenderPass); \ + VK_DESTROY_FUNC(Semaphore); \ + VK_DESTROY_FUNC(ShaderModule); \ + VK_DESTROY_FUNC(SwapchainKHR); \ + +#define _VK_CHECK(_check, _call) \ + BX_MACRO_BLOCK_BEGIN \ + /*BX_TRACE(#_call);*/ \ + VkResult vkresult = _call; \ + _check(VK_SUCCESS == vkresult, #_call "; VK error 0x%x: %s", vkresult, getName(vkresult) ); \ + BX_MACRO_BLOCK_END + +#if BGFX_CONFIG_DEBUG +# define VK_CHECK(_call) _VK_CHECK(BX_CHECK, _call) +#else +# define VK_CHECK(_call) _call +#endif // BGFX_CONFIG_DEBUG + +namespace bgfx { namespace vk +{ +#define VK_DESTROY_FUNC(_name) \ + struct Vk##_name \ + { \ + ::Vk##_name vk; \ + Vk##_name() {} \ + Vk##_name(::Vk##_name _vk) : vk(_vk) {} \ + operator ::Vk##_name() { return vk; } \ + operator ::Vk##_name() const { return vk; } \ + ::Vk##_name* operator &() { return &vk; } \ + const ::Vk##_name* operator &() const { return &vk; } \ + }; \ + BX_STATIC_ASSERT(sizeof(::Vk##_name) == sizeof(Vk##_name) ); \ + void vkDestroy(Vk##_name&) +VK_DESTROY +#undef VK_DESTROY_FUNC + + struct DslBinding + { + enum Enum + { +// CombinedImageSampler, + UniformBuffer, +// StorageBuffer, + + Count + }; + }; + + template + class StateCacheT + { + public: + void add(uint64_t _key, Ty _value) + { + invalidate(_key); + m_hashMap.insert(stl::make_pair(_key, _value) ); + } + + Ty find(uint64_t _key) + { + typename HashMap::iterator it = m_hashMap.find(_key); + if (it != m_hashMap.end() ) + { + return it->second; + } + + return 0; + } + + void invalidate(uint64_t _key) + { + typename HashMap::iterator it = m_hashMap.find(_key); + if (it != m_hashMap.end() ) + { + vkDestroy(it->second); + m_hashMap.erase(it); + } + } + + void invalidate() + { + for (typename HashMap::iterator it = m_hashMap.begin(), itEnd = m_hashMap.end(); it != itEnd; ++it) + { + vkDestroy(it->second); + } + + m_hashMap.clear(); + } + + uint32_t getCount() const + { + return uint32_t(m_hashMap.size() ); + } + + private: + typedef stl::unordered_map HashMap; + HashMap m_hashMap; + }; + + class ScratchBufferVK + { + public: + ScratchBufferVK() + { + } + + ~ScratchBufferVK() + { + } + + void create(uint32_t _size, uint32_t _maxDescriptors); + void destroy(); + void reset(VkDescriptorBufferInfo& _gpuAddress); + void* allocUbv(VkDescriptorBufferInfo& _gpuAddress, uint32_t _size); + + VkDescriptorSet* m_descriptorSet; + VkBuffer m_buffer; + VkDeviceMemory m_deviceMem; + uint8_t* m_data; + uint32_t m_size; + uint32_t m_pos; + uint32_t m_currentDs; + uint32_t m_maxDescriptors; + }; + + struct ImageVK + { + ImageVK() + : m_memory(VK_NULL_HANDLE) + , m_image(VK_NULL_HANDLE) + , m_imageView(VK_NULL_HANDLE) + { + } + + VkResult create(VkFormat _format, const VkExtent3D& _extent); + void destroy(); + + VkDeviceMemory m_memory; + VkImage m_image; + VkImageView m_imageView; + }; + + struct BufferVK + { + BufferVK() + : m_buffer(VK_NULL_HANDLE) + , m_deviceMem(VK_NULL_HANDLE) + , m_size(0) + , m_flags(BGFX_BUFFER_NONE) + , m_dynamic(false) + { + } + + void create(uint32_t _size, void* _data, uint16_t _flags, bool _vertex, uint32_t _stride = 0); + void update(VkCommandBuffer _commandBuffer, uint32_t _offset, uint32_t _size, void* _data, bool _discard = false); + void destroy(); + + VkBuffer m_buffer; + VkDeviceMemory m_deviceMem; + uint32_t m_size; + uint16_t m_flags; + bool m_dynamic; + }; + + typedef BufferVK IndexBufferVK; + + struct VertexBufferVK : public BufferVK + { + void create(uint32_t _size, void* _data, VertexDeclHandle _declHandle, uint16_t _flags); + + VertexDeclHandle m_decl; + }; + + struct ShaderVK + { + ShaderVK() + : m_code(NULL) + , m_module(VK_NULL_HANDLE) + , m_constantBuffer(NULL) + , m_hash(0) + , m_numUniforms(0) + , m_numPredefined(0) + { + } + + void create(const Memory* _mem); + void destroy(); + + const Memory* m_code; + VkShaderModule m_module; + UniformBuffer* m_constantBuffer; + + PredefinedUniform m_predefined[PredefinedUniform::Count]; + uint16_t m_attrMask[Attrib::Count]; + + uint32_t m_hash; + uint16_t m_numUniforms; + uint16_t m_size; + uint8_t m_numPredefined; + }; + + struct ProgramVK + { + ProgramVK() + : m_vsh(NULL) + , m_fsh(NULL) + { + } + + void create(const ShaderVK* _vsh, const ShaderVK* _fsh) + { + BX_CHECK(NULL != _vsh->m_code, "Vertex shader doesn't exist."); + m_vsh = _vsh; + bx::memCopy(&m_predefined[0], _vsh->m_predefined, _vsh->m_numPredefined*sizeof(PredefinedUniform)); + m_numPredefined = _vsh->m_numPredefined; + + if (NULL != _fsh) + { + BX_CHECK(NULL != _fsh->m_code, "Fragment shader doesn't exist."); + m_fsh = _fsh; + bx::memCopy(&m_predefined[m_numPredefined], _fsh->m_predefined, _fsh->m_numPredefined*sizeof(PredefinedUniform)); + m_numPredefined += _fsh->m_numPredefined; + } + } + + void destroy() + { + m_numPredefined = 0; + m_vsh = NULL; + m_fsh = NULL; + } + + const ShaderVK* m_vsh; + const ShaderVK* m_fsh; + + PredefinedUniform m_predefined[PredefinedUniform::Count * 2]; + uint8_t m_numPredefined; + }; + + struct TextureVK + { + void destroy(); + }; + + struct FrameBufferVK + { + void destroy(); + + TextureHandle m_texture[BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS]; + TextureHandle m_depth; +// IDXGISwapChain* m_swapChain; + uint32_t m_width; + uint32_t m_height; + uint16_t m_denseIdx; + uint8_t m_num; + uint8_t m_numTh; + Attachment m_attachment[BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS]; + }; + +} /* namespace bgfx */ } // namespace vk + +#endif // BGFX_RENDERER_VK_H_HEADER_GUARD diff --git a/3rdparty/bgfx/src/shader.cpp b/3rdparty/bgfx/src/shader.cpp index 54c08ae..7649322 100644 --- a/3rdparty/bgfx/src/shader.cpp +++ b/3rdparty/bgfx/src/shader.cpp @@ -1,6 +1,6 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. - * License: http://www.opensource.org/licenses/BSD-2-Clause + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ #include "bgfx_p.h" @@ -15,7 +15,7 @@ namespace bgfx bx::WriterI* writer = reinterpret_cast(_userData); char temp[512]; toString(temp, sizeof(temp), _instruction); - bx::write(writer, temp, (int32_t)strlen(temp) ); + bx::write(writer, temp, (int32_t)bx::strnlen(temp) ); return true; } @@ -24,7 +24,7 @@ namespace bgfx bx::WriterI* writer = reinterpret_cast(_userData); char temp[512]; toString(temp, sizeof(temp), _instruction); - bx::write(writer, temp, (int32_t)strlen(temp) ); + bx::write(writer, temp, (int32_t)bx::strnlen(temp) ); return true; } @@ -33,7 +33,7 @@ namespace bgfx bx::WriterI* writer = reinterpret_cast(_userData); char temp[512]; toString(temp, sizeof(temp), _instruction); - bx::write(writer, temp, (int32_t)strlen(temp) ); + bx::write(writer, temp, (int32_t)bx::strnlen(temp) ); return true; } @@ -85,7 +85,7 @@ namespace bgfx for (uint32_t ii = 0; ii < count; ++ii) { - uint8_t nameSize; + uint8_t nameSize = 0; bx::read(_reader, nameSize, _err); if (!_err->isOk() ) { return; } diff --git a/3rdparty/bgfx/src/shader.h b/3rdparty/bgfx/src/shader.h index 5ddde58..8d1fcc1 100644 --- a/3rdparty/bgfx/src/shader.h +++ b/3rdparty/bgfx/src/shader.h @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ diff --git a/3rdparty/bgfx/src/shader_dx9bc.cpp b/3rdparty/bgfx/src/shader_dx9bc.cpp index 122ff3a..b3f7c43 100644 --- a/3rdparty/bgfx/src/shader_dx9bc.cpp +++ b/3rdparty/bgfx/src/shader_dx9bc.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -749,7 +749,7 @@ namespace bgfx uint8_t* data = (uint8_t*)mb.more(); uint32_t size = uint32_t(bx::getSize(&writer) ); _dst.byteCode.reserve(size); - memcpy(_dst.byteCode.data(), data, size); + bx::memCopy(_dst.byteCode.data(), data, size); } } // namespace bgfx diff --git a/3rdparty/bgfx/src/shader_dx9bc.h b/3rdparty/bgfx/src/shader_dx9bc.h index 95338c8..f549c98 100644 --- a/3rdparty/bgfx/src/shader_dx9bc.h +++ b/3rdparty/bgfx/src/shader_dx9bc.h @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ diff --git a/3rdparty/bgfx/src/shader_dxbc.cpp b/3rdparty/bgfx/src/shader_dxbc.cpp index 0ad82cc..b73b215 100644 --- a/3rdparty/bgfx/src/shader_dxbc.cpp +++ b/3rdparty/bgfx/src/shader_dxbc.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -730,21 +730,21 @@ namespace bgfx } uint32_t last[16]; - memset(last, 0, sizeof(last) ); + bx::memSet(last, 0, sizeof(last) ); const uint32_t remaining = _size & 0x3f; if (remaining >= 56) { - memcpy(&last[0], data, remaining); + bx::memCopy(&last[0], data, remaining); last[remaining/4] = 0x80; dxbcHashBlock(last, hash); - memset(&last[1], 0, 56); + bx::memSet(&last[1], 0, 56); } else { - memcpy(&last[1], data, remaining); + bx::memCopy(&last[1], data, remaining); last[1 + remaining/4] = 0x80; } @@ -752,7 +752,7 @@ namespace bgfx last[15] = _size * 2 + 1; dxbcHashBlock(last, hash); - memcpy(_digest, hash, 16); + bx::memCopy(_digest, hash, 16); } int32_t read(bx::ReaderI* _reader, DxbcSubOperand& _subOperand, bx::Error* _err) @@ -1928,7 +1928,7 @@ namespace bgfx uint8_t* data = (uint8_t*)mb.more(); uint32_t size = uint32_t(bx::getSize(&writer) ); _dst.byteCode.reserve(size); - memcpy(_dst.byteCode.data(), data, size); + bx::memCopy(_dst.byteCode.data(), data, size); } } // namespace bgfx diff --git a/3rdparty/bgfx/src/shader_dxbc.h b/3rdparty/bgfx/src/shader_dxbc.h index db90e3e..04c9603 100644 --- a/3rdparty/bgfx/src/shader_dxbc.h +++ b/3rdparty/bgfx/src/shader_dxbc.h @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ diff --git a/3rdparty/bgfx/src/shader_spirv.cpp b/3rdparty/bgfx/src/shader_spirv.cpp index a5809ae..b859dbb 100644 --- a/3rdparty/bgfx/src/shader_spirv.cpp +++ b/3rdparty/bgfx/src/shader_spirv.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -990,7 +990,11 @@ namespace bgfx break; default: - for (;size/4 != _instruction.length && _err->isOk(); ++currOp) + for ( + ; size/4 != _instruction.length + && _err->isOk() + && currOp < BX_COUNTOF(_instruction.operand) + ; ++currOp) { _instruction.operand[currOp].type = info.operands[currOp]; size += read(_reader, _instruction.operand[currOp], _err); diff --git a/3rdparty/bgfx/src/shader_spirv.h b/3rdparty/bgfx/src/shader_spirv.h index 9a7f4cc..e0f6807 100644 --- a/3rdparty/bgfx/src/shader_spirv.h +++ b/3rdparty/bgfx/src/shader_spirv.h @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -601,7 +601,7 @@ namespace bgfx bool hasType; bool hasResult; - SpvOperand operand[8]; + SpvOperand operand[10]; }; int32_t read(bx::ReaderI* _reader, SpvInstruction& _instruction, bx::Error* _err); diff --git a/3rdparty/bgfx/src/topology.cpp b/3rdparty/bgfx/src/topology.cpp index da46097..2804bc7 100644 --- a/3rdparty/bgfx/src/topology.cpp +++ b/3rdparty/bgfx/src/topology.cpp @@ -1,12 +1,12 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ #include #include #include -#include +#include #include #include "config.h" diff --git a/3rdparty/bgfx/src/topology.h b/3rdparty/bgfx/src/topology.h index a0a1be5..156a6ca 100644 --- a/3rdparty/bgfx/src/topology.h +++ b/3rdparty/bgfx/src/topology.h @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ diff --git a/3rdparty/bgfx/src/vertexdecl.cpp b/3rdparty/bgfx/src/vertexdecl.cpp index 49fb683..a2d88a4 100644 --- a/3rdparty/bgfx/src/vertexdecl.cpp +++ b/3rdparty/bgfx/src/vertexdecl.cpp @@ -1,13 +1,12 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ -#include #include #include #include -#include +#include #include #include @@ -16,7 +15,7 @@ namespace bgfx { - static const uint8_t s_attribTypeSizeDx9[AttribType::Count][4] = + static const uint8_t s_attribTypeSizeD3D9[AttribType::Count][4] = { { 4, 4, 4, 4 }, // Uint8 { 4, 4, 4, 4 }, // Uint10 @@ -25,7 +24,7 @@ namespace bgfx { 4, 8, 12, 16 }, // Float }; - static const uint8_t s_attribTypeSizeDx1x[AttribType::Count][4] = + static const uint8_t s_attribTypeSizeD3D1x[AttribType::Count][4] = { { 1, 2, 4, 4 }, // Uint8 { 4, 4, 4, 4 }, // Uint10 @@ -45,16 +44,16 @@ namespace bgfx static const uint8_t (*s_attribTypeSize[])[AttribType::Count][4] = { - &s_attribTypeSizeDx9, // Null - &s_attribTypeSizeDx9, // Direct3D9 - &s_attribTypeSizeDx1x, // Direct3D11 - &s_attribTypeSizeDx1x, // Direct3D12 - &s_attribTypeSizeGl, // Gnm - &s_attribTypeSizeGl, // Metal - &s_attribTypeSizeGl, // OpenGLES - &s_attribTypeSizeGl, // OpenGL - &s_attribTypeSizeGl, // Vulkan - &s_attribTypeSizeDx9, // Count + &s_attribTypeSizeD3D9, // Noop + &s_attribTypeSizeD3D9, // Direct3D9 + &s_attribTypeSizeD3D1x, // Direct3D11 + &s_attribTypeSizeD3D1x, // Direct3D12 + &s_attribTypeSizeD3D1x, // Gnm + &s_attribTypeSizeGl, // Metal + &s_attribTypeSizeGl, // OpenGLES + &s_attribTypeSizeGl, // OpenGL + &s_attribTypeSizeD3D1x, // Vulkan + &s_attribTypeSizeD3D9, // Count }; BX_STATIC_ASSERT(BX_COUNTOF(s_attribTypeSize) == RendererType::Count+1); @@ -64,28 +63,6 @@ namespace bgfx s_attribTypeSize[RendererType::Count] = s_attribTypeSize[_type]; } - void dbgPrintfVargs(const char* _format, va_list _argList) - { - 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'; - bx::debugOutput(out); - } - - void dbgPrintf(const char* _format, ...) - { - va_list argList; - va_start(argList, _format); - dbgPrintfVargs(_format, argList); - va_end(argList); - } - VertexDecl::VertexDecl() { // BK - struct need to have ctor to qualify as non-POD data. @@ -96,8 +73,8 @@ namespace bgfx { m_hash = _renderer; // use hash to store renderer type while building VertexDecl. m_stride = 0; - memset(m_attributes, 0xff, sizeof(m_attributes) ); - memset(m_offset, 0, sizeof(m_offset) ); + bx::memSet(m_attributes, 0xff, sizeof(m_attributes) ); + bx::memSet(m_offset, 0, sizeof(m_offset) ); return *this; } @@ -172,7 +149,7 @@ namespace bgfx { if (BX_ENABLED(BGFX_CONFIG_DEBUG) ) { - dbgPrintf("vertexdecl %08x (%08x), stride %d\n" + bx::debugPrintf("vertexdecl %08x (%08x), stride %d\n" , _decl.m_hash , bx::hashMurmur2A(_decl.m_attributes) , _decl.m_stride @@ -188,7 +165,7 @@ namespace bgfx bool asInt; _decl.decode(Attrib::Enum(attr), num, type, normalized, asInt); - dbgPrintf("\tattr %d - %s, num %d, type %d, norm %d, asint %d, offset %d\n" + bx::debugPrintf("\tattr %d - %s, num %d, type %d, norm %d, asint %d, offset %d\n" , attr , getAttribName(Attrib::Enum(attr) ) , num @@ -535,7 +512,7 @@ namespace bgfx break; case AttribType::Float: - memcpy(data, _input, num*sizeof(float) ); + bx::memCopy(data, _input, num*sizeof(float) ); break; } } @@ -544,7 +521,7 @@ namespace bgfx { if (!_decl.has(_attr) ) { - memset(_output, 0, 4*sizeof(float) ); + bx::memSet(_output, 0, 4*sizeof(float) ); return; } @@ -652,7 +629,7 @@ namespace bgfx break; case AttribType::Float: - memcpy(_output, data, num*sizeof(float) ); + bx::memCopy(_output, data, num*sizeof(float) ); _output += num; break; } @@ -670,7 +647,7 @@ namespace bgfx { if (_destDecl.m_hash == _srcDecl.m_hash) { - memcpy(_destData, _srcData, _srcDecl.getSize(_num) ); + bx::memCopy(_destData, _srcData, _srcDecl.getSize(_num) ); return; } @@ -743,11 +720,11 @@ namespace bgfx switch (cop.op) { case ConvertOp::Set: - memset(dest + cop.dest, 0, cop.size); + bx::memSet(dest + cop.dest, 0, cop.size); break; case ConvertOp::Copy: - memcpy(dest + cop.dest, src + cop.src, cop.size); + bx::memCopy(dest + cop.dest, src + cop.src, cop.size); break; case ConvertOp::Convert: @@ -777,7 +754,7 @@ namespace bgfx const float epsilonSq = _epsilon*_epsilon; uint32_t numVertices = 0; - memset(_output, 0xff, _num*sizeof(uint16_t) ); + bx::memSet(_output, 0xff, _num*sizeof(uint16_t) ); for (uint32_t ii = 0; ii < _num; ++ii) { @@ -822,7 +799,7 @@ namespace bgfx const uint32_t size = sizeof(uint16_t)*(hashSize + _num); uint16_t* hashTable = (uint16_t*)alloca(size); - memset(hashTable, 0xff, size); + bx::memSet(hashTable, 0xff, size); uint16_t* next = hashTable + hashSize; diff --git a/3rdparty/bgfx/src/vertexdecl.h b/3rdparty/bgfx/src/vertexdecl.h index 866c53a..f046184 100644 --- a/3rdparty/bgfx/src/vertexdecl.h +++ b/3rdparty/bgfx/src/vertexdecl.h @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ diff --git a/3rdparty/bgfx/src/vs_clear.sc b/3rdparty/bgfx/src/vs_clear.sc index 83eace1..2cd4aef 100644 --- a/3rdparty/bgfx/src/vs_clear.sc +++ b/3rdparty/bgfx/src/vs_clear.sc @@ -1,7 +1,7 @@ $input a_position /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ diff --git a/3rdparty/bgfx/src/vs_debugfont.sc b/3rdparty/bgfx/src/vs_debugfont.sc index 2647102..17ae521 100644 --- a/3rdparty/bgfx/src/vs_debugfont.sc +++ b/3rdparty/bgfx/src/vs_debugfont.sc @@ -2,7 +2,7 @@ $input a_position, a_color0, a_color1, a_texcoord0 $output v_color0, v_color1, v_texcoord0 /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ diff --git a/3rdparty/bgfx/tools/geometryc/geometryc.cpp b/3rdparty/bgfx/tools/geometryc/geometryc.cpp index fe4de46..c18a397 100644 --- a/3rdparty/bgfx/tools/geometryc/geometryc.cpp +++ b/3rdparty/bgfx/tools/geometryc/geometryc.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -61,7 +61,6 @@ namespace stl = tinystl; #include #include #include -#include #include #include "bounds.h" @@ -286,7 +285,7 @@ void write(bx::WriterI* _writer, const void* _vertices, uint32_t _numVertices, u } Aabb aabb; - calcAabb(aabb, _vertices, _numVertices, _stride); + toAabb(aabb, _vertices, _numVertices, _stride); bx::write(_writer, aabb); Obb obb; @@ -360,7 +359,7 @@ void help(const char* _error = NULL) fprintf(stderr , "geometryc, bgfx geometry compiler tool\n" - "Copyright 2011-2016 Branimir Karadzic. All rights reserved.\n" + "Copyright 2011-2017 Branimir Karadzic. All rights reserved.\n" "License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause\n\n" ); diff --git a/3rdparty/bgfx/tools/shaderc/shaderc.cpp b/3rdparty/bgfx/tools/shaderc/shaderc.cpp index e3cf25f..57934b5 100644 --- a/3rdparty/bgfx/tools/shaderc/shaderc.cpp +++ b/3rdparty/bgfx/tools/shaderc/shaderc.cpp @@ -1,10 +1,10 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ #include "shaderc.h" -#include +#include #define MAX_TAGS 256 extern "C" @@ -25,9 +25,14 @@ namespace bgfx "texture2DLod", "texture2DArrayLod", // BK - interacts with ARB_texture_array. "texture2DProjLod", + "texture2DGrad", + "texture2DProjGrad", "texture3DLod", "texture3DProjLod", + "texture3DGrad", + "texture3DProjGrad", "textureCubeLod", + "textureCubeGrad", "shadow2DLod", "shadow2DProjLod", NULL @@ -37,6 +42,17 @@ namespace bgfx // "shadow1DProjLod", }; + static const char* s_EXT_shader_texture_lod[] = + { + "texture2DLod", + "texture2DProjLod", + "textureCubeLod", + "texture2DGrad", + "texture2DProjGrad", + "textureCubeGrad", + NULL + }; + static const char* s_EXT_shadow_samplers[] = { "shadow2D", @@ -347,28 +363,28 @@ namespace bgfx char* strInsert(char* _str, const char* _insert) { - size_t len = strlen(_insert); - memmove(&_str[len], _str, strlen(_str) ); - memcpy(_str, _insert, len); + uint32_t len = bx::strnlen(_insert); + bx::memMove(&_str[len], _str, bx::strnlen(_str) ); + bx::memCopy(_str, _insert, len); return _str + len; } void strReplace(char* _str, const char* _find, const char* _replace) { - const size_t len = strlen(_find); + const int32_t len = bx::strnlen(_find); char* replace = (char*)alloca(len+1); bx::strlcpy(replace, _replace, len+1); - for (size_t ii = strlen(replace); ii < len; ++ii) + for (int32_t ii = bx::strnlen(replace); ii < len; ++ii) { replace[ii] = ' '; } replace[len] = '\0'; - BX_CHECK(len >= strlen(_replace), ""); - for (char* ptr = strstr(_str, _find); NULL != ptr; ptr = strstr(ptr + len, _find) ) + BX_CHECK(len >= bx::strnlen(_replace), ""); + for (const char* ptr = bx::strnstr(_str, _find); NULL != ptr; ptr = bx::strnstr(ptr + len, _find) ) { - memcpy(ptr, replace, len); + bx::memCopy(const_cast(ptr), replace, len); } } @@ -529,7 +545,7 @@ namespace bgfx m_input = m_default; m_input += "\n\n"; - size_t len = strlen(_input)+1; + int32_t len = bx::strnlen(_input)+1; char* temp = new char[len]; bx::eolLF(temp, len, _input); m_input += temp; @@ -579,7 +595,7 @@ namespace bgfx static void fppOutput(int _ch, void* _userData) { Preprocessor* thisClass = (Preprocessor*)_userData; - thisClass->m_preprocessed += _ch; + thisClass->m_preprocessed += char(_ch); } static void fppError(void* /*_userData*/, char* _format, va_list _vargs) @@ -700,7 +716,7 @@ namespace bgfx fprintf(stderr , "shaderc, bgfx shader compiler tool\n" - "Copyright 2011-2016 Branimir Karadzic. All rights reserved.\n" + "Copyright 2011-2017 Branimir Karadzic. All rights reserved.\n" "License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause\n\n" ); @@ -710,7 +726,7 @@ namespace bgfx "\n" "Options:\n" " -f Input file path.\n" - " -i Include path (for multiple paths use semicolon).\n" + " -i Include path (for multiple paths use use -i multiple times).\n" " -o Output file path.\n" " --bin2c Generate C header file.\n" " --depends Generate makefile style depends file.\n" @@ -865,6 +881,10 @@ namespace bgfx 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); for (int ii = 1; NULL != includeDir; ++ii) @@ -927,22 +947,22 @@ namespace bgfx , essl ? 1 : glsl ); - if (0 == bx::stricmp(platform, "android") ) + if (0 == bx::strincmp(platform, "android") ) { preprocessor.setDefine("BX_PLATFORM_ANDROID=1"); preprocessor.setDefine("BGFX_SHADER_LANGUAGE_GLSL=1"); } - else if (0 == bx::stricmp(platform, "asm.js") ) + else if (0 == bx::strincmp(platform, "asm.js") ) { preprocessor.setDefine("BX_PLATFORM_EMSCRIPTEN=1"); preprocessor.setDefine("BGFX_SHADER_LANGUAGE_GLSL=1"); } - else if (0 == bx::stricmp(platform, "ios") ) + else if (0 == bx::strincmp(platform, "ios") ) { preprocessor.setDefine("BX_PLATFORM_IOS=1"); preprocessor.setDefine("BGFX_SHADER_LANGUAGE_GLSL=1"); } - else if (0 == bx::stricmp(platform, "linux") ) + else if (0 == bx::strincmp(platform, "linux") ) { preprocessor.setDefine("BX_PLATFORM_LINUX=1"); if (0 != spirv) @@ -954,12 +974,12 @@ namespace bgfx preprocessor.setDefine(glslDefine); } } - else if (0 == bx::stricmp(platform, "nacl") ) + else if (0 == bx::strincmp(platform, "nacl") ) { preprocessor.setDefine("BX_PLATFORM_NACL=1"); preprocessor.setDefine("BGFX_SHADER_LANGUAGE_GLSL=1"); } - else if (0 == bx::stricmp(platform, "osx") ) + else if (0 == bx::strincmp(platform, "osx") ) { preprocessor.setDefine("BX_PLATFORM_OSX=1"); preprocessor.setDefine(glslDefine); @@ -967,19 +987,19 @@ namespace bgfx bx::snprintf(temp, sizeof(temp), "BGFX_SHADER_LANGUAGE_METAL=%d", metal); preprocessor.setDefine(temp); } - else if (0 == bx::stricmp(platform, "windows") ) + else if (0 == bx::strincmp(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::stricmp(platform, "xbox360") ) + else if (0 == bx::strincmp(platform, "xbox360") ) { preprocessor.setDefine("BX_PLATFORM_XBOX360=1"); preprocessor.setDefine("BGFX_SHADER_LANGUAGE_HLSL=3"); } - else if (0 == bx::stricmp(platform, "orbis") ) + else if (0 == bx::strincmp(platform, "orbis") ) { preprocessor.setDefine("BX_PLATFORM_PS4=1"); preprocessor.setDefine("BGFX_SHADER_LANGUAGE_PSSL=1"); @@ -988,7 +1008,7 @@ namespace bgfx preprocessor.setDefine("M_PI=3.1415926535897932384626433832795"); - char shaderType = tolower(type[0]); + char shaderType = bx::toLower(type[0]); switch (shaderType) { case 'c': @@ -1830,9 +1850,12 @@ namespace bgfx { 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 usesGpuShader5 = !!bx::findIdentifierMatch(input, s_ARB_gpu_shader5); const bool usesTexelFetch = !!bx::findIdentifierMatch(input, s_texelFetch); - const bool usesTextureLod = !!bx::findIdentifierMatch(input, s_ARB_shader_texture_lod /*EXT_shader_texture_lod*/); const bool usesTextureMS = !!bx::findIdentifierMatch(input, s_ARB_texture_multisample); const bool usesTextureArray = !!bx::findIdentifierMatch(input, s_textureArray); const bool usesPacking = !!bx::findIdentifierMatch(input, s_ARB_shading_language_packing); @@ -1867,12 +1890,26 @@ namespace bgfx ); } - if (usesTextureLod - && 130 > glsl) + bool ARB_shader_texture_lod = false; + bool EXT_shader_texture_lod = false; + + if (usesTextureLod) { - bx::stringPrintf(code - , "#extension GL_ARB_shader_texture_lod : enable\n" - ); + if ( (0 != metal || 130 > glsl) + && 'f' == shaderType) + { + ARB_shader_texture_lod = true; + bx::stringPrintf(code + , "#extension GL_ARB_shader_texture_lod : enable\n" + ); + } + else + { + EXT_shader_texture_lod = true; + bx::stringPrintf(code + , "#extension GL_EXT_shader_texture_lod : enable\n" + ); + } } if (usesTextureMS) @@ -1892,10 +1929,29 @@ namespace bgfx if (130 > glsl) { bx::stringPrintf(code, - "#define ivec2 vec2\n" - "#define ivec3 vec3\n" - "#define ivec4 vec4\n" - ); + "#define ivec2 vec2\n" + "#define ivec3 vec3\n" + "#define ivec4 vec4\n" + ); + } + + if (ARB_shader_texture_lod) + { + bx::stringPrintf(code, + "#define texture2DProjLod texture2DProjLodARB\n" + "#define texture2DGrad texture2DGradARB\n" + "#define texture2DProjGrad texture2DProjGradARB\n" + "#define textureCubeGrad textureCubeGradARB\n" + ); + } + else if (EXT_shader_texture_lod) + { + bx::stringPrintf(code, + "#define texture2DProjLod texture2DProjLodEXT\n" + "#define texture2DGrad texture2DGradEXT\n" + "#define texture2DProjGrad texture2DProjGradEXT\n" + "#define textureCubeGrad textureCubeGradEXT\n" + ); } bx::stringPrintf(code @@ -1911,12 +1967,12 @@ namespace bgfx { bx::stringPrintf(code , "#extension GL_EXT_shader_texture_lod : enable\n" - "#define texture2DLod texture2DLodEXT\n" - "#define texture2DProjLod texture2DProjLodEXT\n" - "#define textureCubeLod textureCubeLodEXT\n" - // "#define texture2DGrad texture2DGradEXT\n" - // "#define texture2DProjGrad texture2DProjGradEXT\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" ); } diff --git a/3rdparty/bgfx/tools/shaderc/shaderc.h b/3rdparty/bgfx/tools/shaderc/shaderc.h index c773226..f709529 100644 --- a/3rdparty/bgfx/tools/shaderc/shaderc.h +++ b/3rdparty/bgfx/tools/shaderc/shaderc.h @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ diff --git a/3rdparty/bgfx/tools/shaderc/shaderc_glsl.cpp b/3rdparty/bgfx/tools/shaderc/shaderc_glsl.cpp index 9fe67e6..10ab449 100644 --- a/3rdparty/bgfx/tools/shaderc/shaderc_glsl.cpp +++ b/3rdparty/bgfx/tools/shaderc/shaderc_glsl.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -73,19 +73,28 @@ namespace bgfx { namespace glsl optimizedShader = bx::strnl(optimizedShader); } - if (0 != _version) { char* code = const_cast(optimizedShader); strReplace(code, "gl_FragDepthEXT", "gl_FragDepth"); + strReplace(code, "texture2DLodARB", "texture2DLod"); strReplace(code, "texture2DLodEXT", "texture2DLod"); - strReplace(code, "texture2DProjLodEXT", "texture2DProjLod"); - strReplace(code, "textureCubeLodEXT", "textureCubeLod"); + strReplace(code, "texture2DGradARB", "texture2DGrad"); strReplace(code, "texture2DGradEXT", "texture2DGrad"); - strReplace(code, "texture2DProjGradEXT", "texture2DProjGrad"); + + strReplace(code, "textureCubeLodARB", "textureCubeLod"); + strReplace(code, "textureCubeLodEXT", "textureCubeLod"); + strReplace(code, "textureCubeGradARB", "textureCubeGrad"); strReplace(code, "textureCubeGradEXT", "textureCubeGrad"); + strReplace(code, "texture2DProjLodARB", "texture2DProjLod"); + strReplace(code, "texture2DProjLodEXT", "texture2DProjLod"); + strReplace(code, "texture2DProjGradARB", "texture2DProjGrad"); + strReplace(code, "texture2DProjGradEXT", "texture2DProjGrad"); + + strReplace(code, "shadow2DARB", "shadow2D"); strReplace(code, "shadow2DEXT", "shadow2D"); + strReplace(code, "shadow2DProjARB", "shadow2DProj"); strReplace(code, "shadow2DProjEXT", "shadow2DProj"); } @@ -214,8 +223,8 @@ namespace bgfx { namespace glsl bx::strlcpy(uniformName, name, array-name+1); char arraySize[32]; - const char* end = bx::strnstr(array, "]", eol-array); - bx::strlcpy(arraySize, array+1, end-array); + const char* arrayEnd = bx::strnstr(array, "]", eol-array); + bx::strlcpy(arraySize, array+1, arrayEnd-array); num = uint8_t(atoi(arraySize) ); } else @@ -251,7 +260,7 @@ namespace bgfx { namespace glsl uint8_t nameSize = (uint8_t)un.name.size(); bx::write(_writer, nameSize); bx::write(_writer, un.name.c_str(), nameSize); - uint8_t uniformType = un.type; + uint8_t uniformType = uint8_t(un.type); bx::write(_writer, uniformType); bx::write(_writer, un.num); bx::write(_writer, un.regIndex); diff --git a/3rdparty/bgfx/tools/shaderc/shaderc_hlsl.cpp b/3rdparty/bgfx/tools/shaderc/shaderc_hlsl.cpp index 08067cc..24bf9dc 100644 --- a/3rdparty/bgfx/tools/shaderc/shaderc_hlsl.cpp +++ b/3rdparty/bgfx/tools/shaderc/shaderc_hlsl.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -421,7 +421,7 @@ namespace bgfx { namespace hlsl , spd.Register ); - const RemapInputSemantic& ris = findInputSemantic(spd.SemanticName, spd.SemanticIndex); + const RemapInputSemantic& ris = findInputSemantic(spd.SemanticName, uint8_t(spd.SemanticIndex) ); if (ris.m_attr != bgfx::Attrib::Count) { _attrs[_numAttrs] = bgfx::attribToId(ris.m_attr); @@ -475,8 +475,8 @@ namespace bgfx { namespace hlsl Uniform un; un.name = varDesc.Name; un.type = uniformType; - un.num = constDesc.Elements; - un.regIndex = varDesc.StartOffset; + un.num = uint8_t(constDesc.Elements); + un.regIndex = uint16_t(varDesc.StartOffset); un.regCount = BX_ALIGN_16(varDesc.Size) / 16; _uniforms.push_back(un); @@ -527,8 +527,8 @@ namespace bgfx { namespace hlsl un.name.assign(bindDesc.Name, (end - bindDesc.Name) ); un.type = UniformType::Enum(BGFX_UNIFORM_SAMPLERBIT | UniformType::Int1); un.num = 1; - un.regIndex = bindDesc.BindPoint; - un.regCount = bindDesc.BindCount; + un.regIndex = uint16_t(bindDesc.BindPoint); + un.regCount = uint16_t(bindDesc.BindCount); _uniforms.push_back(un); } } @@ -714,7 +714,7 @@ namespace bgfx { namespace hlsl uint8_t nameSize = (uint8_t)un.name.size(); bx::write(_writer, nameSize); bx::write(_writer, un.name.c_str(), nameSize); - uint8_t type = un.type | fragmentBit; + uint8_t type = uint8_t(un.type | fragmentBit); bx::write(_writer, type); bx::write(_writer, un.num); bx::write(_writer, un.regIndex); diff --git a/3rdparty/bgfx/tools/shaderc/shaderc_pssl.cpp b/3rdparty/bgfx/tools/shaderc/shaderc_pssl.cpp index a6a6461..fbfe492 100644 --- a/3rdparty/bgfx/tools/shaderc/shaderc_pssl.cpp +++ b/3rdparty/bgfx/tools/shaderc/shaderc_pssl.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ diff --git a/3rdparty/bgfx/tools/shaderc/shaderc_spirv.cpp b/3rdparty/bgfx/tools/shaderc/shaderc_spirv.cpp index 768ec54..517192e 100644 --- a/3rdparty/bgfx/tools/shaderc/shaderc_spirv.cpp +++ b/3rdparty/bgfx/tools/shaderc/shaderc_spirv.cpp @@ -1,17 +1,779 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ #include "shaderc.h" +BX_PRAGMA_DIAGNOSTIC_PUSH() +BX_PRAGMA_DIAGNOSTIC_IGNORED_MSVC(4100) // error C4100: 'inclusionDepth' : unreferenced formal parameter +BX_PRAGMA_DIAGNOSTIC_IGNORED_MSVC(4265) // error C4265: 'spv::spirvbin_t': class has virtual functions, but destructor is not virtual +BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wshadow") // warning: declaration of 'userData' shadows a member of 'glslang::TShader::Includer::IncludeResult' +#include +#include +#include +//#include +//#include +BX_PRAGMA_DIAGNOSTIC_POP() + namespace bgfx { - bool compileSPIRVShader(bx::CommandLine& _cmdLine, uint32_t _version, const std::string& _code, bx::WriterI* _writer) + static bx::CrtAllocator s_allocator; + bx::AllocatorI* g_allocator = &s_allocator; + + struct TinyStlAllocator + { + static void* static_allocate(size_t _bytes); + static void static_deallocate(void* _ptr, size_t /*_bytes*/); + }; + + void* TinyStlAllocator::static_allocate(size_t _bytes) + { + return BX_ALLOC(g_allocator, _bytes); + } + + void TinyStlAllocator::static_deallocate(void* _ptr, size_t /*_bytes*/) + { + if (NULL != _ptr) + { + BX_FREE(g_allocator, _ptr); + } + } +} // namespace bgfx + +#define TINYSTL_ALLOCATOR bgfx::TinyStlAllocator +#include +#include +#include +#include +namespace stl = tinystl; + +#include "../../src/shader_spirv.h" + +namespace glslang +{ + void GlslangToSpv(const glslang::TIntermediate& _intermediate, std::vector& _spirv); + +} // namespace glslang + +namespace bgfx { namespace spirv +{ + const TBuiltInResource resourceLimits = + { + 32, // MaxLights + 6, // MaxClipPlanes + 32, // MaxTextureUnits + 32, // MaxTextureCoords + 64, // MaxVertexAttribs + 4096, // MaxVertexUniformComponents + 64, // MaxVaryingFloats + 32, // MaxVertexTextureImageUnits + 80, // MaxCombinedTextureImageUnits + 32, // MaxTextureImageUnits + 4096, // MaxFragmentUniformComponents + 32, // MaxDrawBuffers + 128, // MaxVertexUniformVectors + 8, // MaxVaryingVectors + 16, // MaxFragmentUniformVectors + 16, // MaxVertexOutputVectors + 15, // MaxFragmentInputVectors + -8, // MinProgramTexelOffset + 7, // MaxProgramTexelOffset + 8, // MaxClipDistances + 65535, // MaxComputeWorkGroupCountX + 65535, // MaxComputeWorkGroupCountY + 65535, // MaxComputeWorkGroupCountZ + 1024, // MaxComputeWorkGroupSizeX + 1024, // MaxComputeWorkGroupSizeY + 64, // MaxComputeWorkGroupSizeZ + 1024, // MaxComputeUniformComponents + 16, // MaxComputeTextureImageUnits + 8, // MaxComputeImageUniforms + 8, // MaxComputeAtomicCounters + 1, // MaxComputeAtomicCounterBuffers + 60, // MaxVaryingComponents + 64, // MaxVertexOutputComponents + 64, // MaxGeometryInputComponents + 128, // MaxGeometryOutputComponents + 128, // MaxFragmentInputComponents + 8, // MaxImageUnits + 8, // MaxCombinedImageUnitsAndFragmentOutputs + 8, // MaxCombinedShaderOutputResources + 0, // MaxImageSamples + 0, // MaxVertexImageUniforms + 0, // MaxTessControlImageUniforms + 0, // MaxTessEvaluationImageUniforms + 0, // MaxGeometryImageUniforms + 8, // MaxFragmentImageUniforms + 8, // MaxCombinedImageUniforms + 16, // MaxGeometryTextureImageUnits + 256, // MaxGeometryOutputVertices + 1024, // MaxGeometryTotalOutputComponents + 1024, // MaxGeometryUniformComponents + 64, // MaxGeometryVaryingComponents + 128, // MaxTessControlInputComponents + 128, // MaxTessControlOutputComponents + 16, // MaxTessControlTextureImageUnits + 1024, // MaxTessControlUniformComponents + 4096, // MaxTessControlTotalOutputComponents + 128, // MaxTessEvaluationInputComponents + 128, // MaxTessEvaluationOutputComponents + 16, // MaxTessEvaluationTextureImageUnits + 1024, // MaxTessEvaluationUniformComponents + 120, // MaxTessPatchComponents + 32, // MaxPatchVertices + 64, // MaxTessGenLevel + 16, // MaxViewports + 0, // MaxVertexAtomicCounters + 0, // MaxTessControlAtomicCounters + 0, // MaxTessEvaluationAtomicCounters + 0, // MaxGeometryAtomicCounters + 8, // MaxFragmentAtomicCounters + 8, // MaxCombinedAtomicCounters + 1, // MaxAtomicCounterBindings + 0, // MaxVertexAtomicCounterBuffers + 0, // MaxTessControlAtomicCounterBuffers + 0, // MaxTessEvaluationAtomicCounterBuffers + 0, // MaxGeometryAtomicCounterBuffers + 1, // MaxFragmentAtomicCounterBuffers + 1, // MaxCombinedAtomicCounterBuffers + 16384, // MaxAtomicCounterBufferSize + 4, // MaxTransformFeedbackBuffers + 64, // MaxTransformFeedbackInterleavedComponents + 8, // MaxCullDistances + 8, // MaxCombinedClipAndCullDistances + 4, // MaxSamples + { // limits + 1, // nonInductiveForLoops + 1, // whileLoops + 1, // doWhileLoops + 1, // generalUniformIndexing + 1, // generalAttributeMatrixVectorIndexing + 1, // generalVaryingIndexing + 1, // generalSamplerIndexing + 1, // generalVariableIndexing + 1, // generalConstantMatrixVectorIndexing + }, + }; + + bool printAsm(uint32_t _offset, const SpvInstruction& _instruction, void* _userData) + { + BX_UNUSED(_userData); + char temp[512]; + toString(temp, sizeof(temp), _instruction); + BX_TRACE("%5d: %s", _offset, temp); + return true; + } + + struct SpvReflection + { + struct TypeId + { + enum Enum + { + Void, + Bool, + Int32, + Int64, + Uint32, + Uint64, + Float, + Double, + + Vector, + Matrix, + + Count + }; + + TypeId() + : baseType(Enum::Count) + , type(Enum::Count) + , numComponents(0) + { + } + + Enum baseType; + Enum type; + uint32_t numComponents; + + stl::string toString() + { + stl::string result; + + switch (type) + { + case Float: + result.append("float"); + break; + + case Vector: + bx::stringPrintf(result, "vec%d" + , numComponents + ); + break; + + case Matrix: + bx::stringPrintf(result, "mat%d" + , numComponents + ); + + default: + break; + } + + return result; + } + }; + + struct Id + { + struct Variable + { + Variable() + : decoration(SpvDecoration::Count) + , builtin(SpvBuiltin::Count) + , storageClass(SpvStorageClass::Count) + , location(UINT32_MAX) + , offset(UINT32_MAX) + , type(UINT32_MAX) + { + } + + stl::string name; + SpvDecoration::Enum decoration; + SpvBuiltin::Enum builtin; + SpvStorageClass::Enum storageClass; + uint32_t location; + uint32_t offset; + uint32_t type; + }; + + typedef stl::vector MemberArray; + + Variable var; + MemberArray members; + }; + + typedef stl::unordered_map TypeIdMap; + typedef stl::unordered_map IdMap; + + TypeIdMap typeIdMap; + IdMap idMap; + + stl::string getTypeName(uint32_t _typeId) + { + return getTypeId(_typeId).toString(); + } + + Id& getId(uint32_t _id) + { + IdMap::iterator it = idMap.find(_id); + if (it == idMap.end() ) + { + Id id; + stl::pair result = idMap.insert(stl::make_pair(_id, id) ); + it = result.first; + } + + return it->second; + } + + Id::Variable& get(uint32_t _id, uint32_t _idx) + { + Id& id = getId(_id); + id.members.resize(bx::uint32_max(_idx+1, uint32_t(id.members.size() ) ) ); + return id.members[_idx]; + } + + TypeId& getTypeId(uint32_t _id) + { + TypeIdMap::iterator it = typeIdMap.find(_id); + if (it == typeIdMap.end() ) + { + TypeId id; + stl::pair result = typeIdMap.insert(stl::make_pair(_id, id) ); + it = result.first; + } + + return it->second; + } + + void update(uint32_t _id, const stl::string& _name) + { + getId(_id).var.name = _name; + } + + BX_NO_INLINE void update(Id::Variable& _variable, SpvDecoration::Enum _decoration, uint32_t _literal) + { + _variable.decoration = _decoration; + switch (_decoration) + { + case SpvDecoration::Location: + _variable.location = _literal; + break; + + case SpvDecoration::Offset: + _variable.offset = _literal; + break; + + case SpvDecoration::BuiltIn: + _variable.builtin = SpvBuiltin::Enum(_literal); + break; + + default: + break; + } + } + + BX_NO_INLINE void update(Id::Variable& _variable, uint32_t _type, SpvStorageClass::Enum _storageClass) + { + _variable.type = _type; + _variable.storageClass = _storageClass; + } + + void update(uint32_t _id, SpvDecoration::Enum _decoration, uint32_t _literal) + { + update(getId(_id).var, _decoration, _literal); + } + + void update(uint32_t _id, uint32_t _type, SpvStorageClass::Enum _storageClass) + { + update(getId(_id).var, _type, _storageClass); + } + + void update(uint32_t _id, uint32_t _idx, const stl::string& _name) + { + Id::Variable& var = get(_id, _idx); + var.name = _name; + } + + BX_NO_INLINE void update(uint32_t _id, uint32_t _idx, SpvDecoration::Enum _decoration, uint32_t _literal) + { + update(get(_id, _idx), _decoration, _literal); + } + + void update(uint32_t _id, TypeId::Enum _type) + { + TypeId& type = getTypeId(_id); + type.type = _type; + } + + void update(uint32_t _id, TypeId::Enum _type, uint32_t _baseTypeId, uint32_t _numComonents) + { + TypeId& type = getTypeId(_id); + type.type = _type; + + type.baseType = getTypeId(_baseTypeId).type; + type.numComponents = _numComonents; + } + }; + + bool spvParse(uint32_t _offset, const SpvInstruction& _instruction, void* _userData) + { + BX_UNUSED(_offset); + SpvReflection* spv = (SpvReflection*)_userData; + + switch (_instruction.opcode) + { + case SpvOpcode::Name: + spv->update(_instruction.result + , _instruction.operand[0].literalString + ); + break; + + case SpvOpcode::Decorate: + spv->update(_instruction.operand[0].data + , SpvDecoration::Enum(_instruction.operand[1].data) + , _instruction.operand[2].data + ); + break; + + case SpvOpcode::MemberName: + spv->update(_instruction.result + , _instruction.operand[0].data + , _instruction.operand[1].literalString + ); + break; + + case SpvOpcode::MemberDecorate: + spv->update(_instruction.operand[0].data + , _instruction.operand[1].data + , SpvDecoration::Enum(_instruction.operand[2].data) + , _instruction.operand[3].data + ); + break; + + case SpvOpcode::Variable: + spv->update(_instruction.result + , _instruction.type + , SpvStorageClass::Enum(_instruction.operand[0].data) + ); + break; + + case SpvOpcode::TypeVoid: + spv->update(_instruction.result, SpvReflection::TypeId::Void); + break; + + case SpvOpcode::TypeBool: + spv->update(_instruction.result, SpvReflection::TypeId::Bool); + break; + + case SpvOpcode::TypeInt: + spv->update(_instruction.result + , 32 == _instruction.operand[0].data + ? 0 == _instruction.operand[1].data + ? SpvReflection::TypeId::Uint32 + : SpvReflection::TypeId::Int32 + : 0 == _instruction.operand[1].data + ? SpvReflection::TypeId::Uint64 + : SpvReflection::TypeId::Int64 + ); + break; + + case SpvOpcode::TypeFloat: + spv->update(_instruction.result + , 32 == _instruction.operand[0].data + ? SpvReflection::TypeId::Float + : SpvReflection::TypeId::Double + ); + break; + + case SpvOpcode::TypeVector: + spv->update(_instruction.result + , SpvReflection::TypeId::Vector + , _instruction.operand[0].data + , _instruction.operand[1].data + ); + break; + + case SpvOpcode::TypeMatrix: + spv->update(_instruction.result + , SpvReflection::TypeId::Matrix + , _instruction.operand[0].data + , _instruction.operand[1].data + ); + break; + + case SpvOpcode::TypeImage: + case SpvOpcode::TypeSampler: + case SpvOpcode::TypeSampledImage: + break; + + case SpvOpcode::TypeStruct: + for (uint32_t ii = 0, num = _instruction.numOperands; ii < num; ++ii) + { + SpvReflection::Id::Variable& var = spv->get(_instruction.result, ii); + var.type = _instruction.operand[ii].data; + } + break; + + default: + break; + } + + return true; + } + + void disassemble(bx::WriterI* _writer, bx::ReaderSeekerI* _reader, bx::Error* _err) + { + BX_UNUSED(_writer); + + uint32_t magic; + bx::peek(_reader, magic); + + SpvReflection spvx; + + if (magic == SPV_CHUNK_HEADER) + { + SpirV spirv; + read(_reader, spirv, _err); + parse(spirv.shader, spvParse, &spvx, _err); + + for (SpvReflection::IdMap::const_iterator it = spvx.idMap.begin(), itEnd = spvx.idMap.end(); it != itEnd; ++it) + { + 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") ) + { + printf("%3d: %s %d %s\n" + , it->first + , id.var.name.c_str() + , id.var.location + , getName(id.var.storageClass) + ); + printf("{\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" + , spvx.getTypeName(var.type).c_str() + , var.name.c_str() + , var.offset + , getName(var.storageClass) + ); + } + printf("}\n"); + } + } + + } + } + + struct DebugOutputWriter : public bx::WriterI + { + virtual int32_t write(const void* _data, int32_t _size, bx::Error*) BX_OVERRIDE + { + char* out = (char*)alloca(_size + 1); + memcpy(out, _data, _size); + out[_size] = '\0'; + printf("%s", out); + return _size; + } + }; + + static EShLanguage getLang(char _p) + { + switch (_p) + { + case 'c': return EShLangCompute; + case 'f': return EShLangFragment; + case 'v': return EShLangVertex; + default: return EShLangCount; + } + } + +// static void printError(spv_message_level_t, const char*, const spv_position_t&, const char* _message) +// { +// fprintf(stderr, "%s\n", _message); +// } + + static bool compile(bx::CommandLine& _cmdLine, uint32_t _version, const std::string& _code, bx::WriterI* _writer) { BX_UNUSED(_cmdLine, _version, _code, _writer); - fprintf(stderr, "SPIR-V compiler is not supported.\n"); - return false; + + const char* type = _cmdLine.findOption('\0', "type"); + if (NULL == type) + { + fprintf(stderr, "Error: Shader type must be specified.\n"); + return false; + } + + glslang::InitializeProcess(); + + glslang::TProgram* program = new glslang::TProgram; + + EShLanguage stage = getLang(type[0]); + if (EShLangCount == stage) + { + fprintf(stderr, "Error: Unknown shader type %s.\n", type); + return false; + } + glslang::TShader* shader = new glslang::TShader(stage); + + EShMessages messages = EShMessages(0 + | EShMsgDefault + | EShMsgReadHlsl + | EShMsgVulkanRules + | EShMsgSpvRules + ); + + shader->setEntryPoint("main"); + + const char* shaderStrings[] = { _code.c_str() }; + shader->setStrings( + shaderStrings + , BX_COUNTOF(shaderStrings) + ); + bool compiled = shader->parse(&resourceLimits + , 110 + , false + , messages + ); + bool linked = false; + bool validated = true; + bool optimized = true; + + if (!compiled) + { + const char* log = shader->getInfoLog(); + if (NULL != log) + { + int32_t source = 0; + int32_t line = 0; + int32_t column = 0; + int32_t start = 0; + int32_t end = INT32_MAX; + + const char* err = strstr(log, "ERROR:"); + + bool found = false; + + if (NULL != err) + { + found = 2 == sscanf(err, "ERROR: %u:%u: '", &source, &line); + if (found) + { + ++line; + } + } + + if (found) + { + start = bx::uint32_imax(1, line-10); + end = start + 20; + } + + printCode(_code.c_str(), line, start, end, column); + + fprintf(stderr, "%s\n", log); + } + } + else + { + program->addShader(shader); + linked = true + && program->link(messages) + && program->mapIO() + ; + + if (!linked) + { + const char* log = program->getInfoLog(); + if (NULL != log) + { + fprintf(stderr, "%s\n", log); + } + } + else + { + program->buildReflection(); + { + uint16_t count = (uint16_t)program->getNumLiveUniformVariables(); + bx::write(_writer, count); + + uint32_t fragmentBit = type[0] == 'f' ? BGFX_UNIFORM_FRAGMENTBIT : 0; + for (uint16_t ii = 0; ii < count; ++ii) + { + Uniform un; + un.name = program->getUniformName(ii); + switch (program->getUniformType(ii)) + { + case 0x1404: // GL_INT: + un.type = UniformType::Int1; + break; + case 0x8B52: // GL_FLOAT_VEC4: + un.type = UniformType::Vec4; + break; + case 0x8B5B: // GL_FLOAT_MAT3: + un.type = UniformType::Mat3; + break; + case 0x8B5C: // GL_FLOAT_MAT4: + un.type = UniformType::Mat4; + break; + default: + un.type = UniformType::End; + break; + } + un.num = uint8_t(program->getUniformArraySize(ii) ); + un.regIndex = 0; + un.regCount = un.num; + + uint8_t nameSize = (uint8_t)un.name.size(); + bx::write(_writer, nameSize); + bx::write(_writer, un.name.c_str(), nameSize); + bx::write(_writer, uint8_t(un.type | fragmentBit)); + bx::write(_writer, un.num); + bx::write(_writer, un.regIndex); + bx::write(_writer, un.regCount); + + BX_TRACE("%s, %s, %d, %d, %d" + , un.name.c_str() + , getUniformTypeName(un.type) + , un.num + , un.regIndex + , un.regCount + ); + } + } + if (g_verbose) + { + program->dumpReflection(); + } + + BX_UNUSED(spv::MemorySemanticsAllMemory); + + glslang::TIntermediate* intermediate = program->getIntermediate(stage); + std::vector spirv; + glslang::GlslangToSpv(*intermediate, spirv); + spv::spirvbin_t spvBin; + spvBin.remap( + spirv + , 0 + | spv::spirvbin_t::DCE_ALL + | spv::spirvbin_t::OPT_ALL + | spv::spirvbin_t::MAP_ALL +// | spv::spirvbin_t::STRIP + ); + + bx::Error err; + DebugOutputWriter writer; + bx::MemoryReader reader(spirv.data(), uint32_t(spirv.size()*4) ); + disassemble(&writer, &reader, &err); + +#if 0 + spvtools::SpirvTools tools(SPV_ENV_VULKAN_1_0); + tools.SetMessageConsumer(printError); + validated = tools.Validate(spirv); + + if (!validated) + { + std::string out; + tools.Disassemble(spirv, &out); + printf("%s\n", out.c_str()); + } + + if (validated) + { + spvtools::Optimizer optm(SPV_ENV_VULKAN_1_0); + optm.SetMessageConsumer(printError); + optm + .RegisterPass(spvtools::CreateStripDebugInfoPass() ) +// .RegisterPass(spvtools::CreateSetSpecConstantDefaultValuePass({ {1, "42" } }) ) + .RegisterPass(spvtools::CreateFreezeSpecConstantValuePass() ) + .RegisterPass(spvtools::CreateFoldSpecConstantOpAndCompositePass() ) + .RegisterPass(spvtools::CreateEliminateDeadConstantPass() ) + .RegisterPass(spvtools::CreateUnifyConstantPass() ) + ; + optimized = optm.Run(spirv.data(), spirv.size(), &spirv); + } +#endif // 0 + + if (optimized) + { + uint16_t shaderSize = (uint16_t)spirv.size()*sizeof(uint32_t); + bx::write(_writer, shaderSize); + bx::write(_writer, spirv.data(), shaderSize); + uint8_t nul = 0; + bx::write(_writer, nul); + } + } + } + + delete program; + delete shader; + + glslang::FinalizeProcess(); + + return compiled && linked && validated && optimized; + } + +} // namespace spirv + + bool compileSPIRVShader(bx::CommandLine& _cmdLine, uint32_t _version, const std::string& _code, bx::WriterI* _writer) + { + return spirv::compile(_cmdLine, _version, _code, _writer); } } // namespace bgfx diff --git a/3rdparty/bgfx/tools/texturec/texturec.cpp b/3rdparty/bgfx/tools/texturec/texturec.cpp index e950ab8..3dd106a 100644 --- a/3rdparty/bgfx/tools/texturec/texturec.cpp +++ b/3rdparty/bgfx/tools/texturec/texturec.cpp @@ -1,22 +1,22 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ -#include -#include -#include +#include +#include +#include -// Just hacking DDS loading code in here. -#include "bgfx_p.h" +#include #include "image.h" + #include #include #include #include #include -#include + #include extern "C" { @@ -57,6 +57,16 @@ BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wint-to-pointer-cast") #include 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 +BX_PRAGMA_DIAGNOSTIC_POP() + #if 0 # define BX_TRACE(_format, ...) fprintf(stderr, "" _format "\n", ##__VA_ARGS__) #endif // DEBUG @@ -68,29 +78,6 @@ BX_PRAGMA_DIAGNOSTIC_POP(); namespace bgfx { - const Memory* alloc(uint32_t _size) - { - Memory* mem = (Memory*)::realloc(NULL, sizeof(Memory) + _size); - mem->size = _size; - mem->data = (uint8_t*)mem + sizeof(Memory); - return mem; - } - - const Memory* makeRef(const void* _data, uint32_t _size, ReleaseFn _releaseFn, void* _userData) - { - BX_UNUSED(_releaseFn, _userData); - Memory* mem = (Memory*)::realloc(NULL, sizeof(Memory) ); - mem->size = _size; - mem->data = (uint8_t*)_data; - return mem; - } - - void release(const Memory* _mem) - { - Memory* mem = const_cast(_mem); - ::free(mem); - } - bool imageParse(ImageContainer& _imageContainer, const void* _data, uint32_t _size, void** _out) { *_out = NULL; @@ -310,7 +297,7 @@ namespace bgfx return true; case TextureFormat::BGRA8: - imageSwizzleBgra8(_width, _height, _width*4, _src, _dst); + imageSwizzleBgra8(_dst, _width, _height, _width*4, _src); return true; case TextureFormat::RGBA8: @@ -496,7 +483,7 @@ void help(const char* _error = NULL) fprintf(stderr , "texturec, bgfx texture compiler tool\n" - "Copyright 2011-2016 Branimir Karadzic. All rights reserved.\n" + "Copyright 2011-2017 Branimir Karadzic. All rights reserved.\n" "License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause\n\n" ); @@ -560,6 +547,10 @@ int main(int _argc, const char* _argv[]) } 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) ) { @@ -567,35 +558,33 @@ int main(int _argc, const char* _argv[]) return EXIT_FAILURE; } - const bool mips = cmdLine.hasArg('m', "mips"); - const bool normalMap = cmdLine.hasArg('n', "normalmap"); - const bool iqa = cmdLine.hasArg('\0', "iqa"); + bx::CrtAllocator allocator; - const bgfx::Memory* mem; - { - uint32_t size = (uint32_t)bx::getSize(&reader); - mem = bgfx::alloc(size); - bx::read(&reader, mem->data, mem->size); - bx::close(&reader); - } + 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 imageContainer; + ImageContainer input; - bool loaded = imageParse(imageContainer, mem->data, mem->size, (void**)&decodedImage); + bool loaded = imageParse(input, inputData, inputSize, (void**)&decodedImage); if (NULL != decodedImage) { - release(mem); - mem = makeRef(imageContainer.m_data, imageContainer.m_size); + 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 = imageContainer.m_format; + bgfx::TextureFormat::Enum format = input.m_format; if (NULL != type) { @@ -608,11 +597,10 @@ int main(int _argc, const char* _argv[]) } } - bx::CrtAllocator allocator; - const Memory* output = NULL; + ImageContainer* output = NULL; ImageMip mip; - if (imageGetRawData(imageContainer, 0, 0, mem->data, mem->size, mip) ) + if (imageGetRawData(input, 0, 0, inputData, inputSize, mip) ) { uint8_t numMips = mips ? imageGetNumMips(format, mip.m_width, mip.m_height) @@ -623,10 +611,10 @@ int main(int _argc, const char* _argv[]) if (normalMap) { - output = imageAlloc(imageContainer, format, mip.m_width, mip.m_height, 0, 1, false, mips); + output = imageAlloc(&allocator, format, mip.m_width, mip.m_height, 0, 1, false, mips); ImageMip dstMip; - imageGetRawData(imageContainer, 0, 0, NULL, 0, dstMip); + imageGetRawData(*output, 0, 0, NULL, 0, dstMip); if (mip.m_width != dstMip.m_width && mip.m_height != dstMip.m_height) @@ -641,7 +629,16 @@ int main(int _argc, const char* _argv[]) return EXIT_FAILURE; } - uint32_t size = imageGetSize(TextureFormat::RGBA32F, dstMip.m_width, dstMip.m_height); + 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); @@ -672,25 +669,25 @@ int main(int _argc, const char* _argv[]) } imageRgba32f11to01(rgbaDst, dstMip.m_width, dstMip.m_height, dstMip.m_width*16, rgba); - imageEncodeFromRgba32f(&allocator, output->data, rgbaDst, dstMip.m_width, dstMip.m_height, format); + imageEncodeFromRgba32f(&allocator, output->m_data, rgbaDst, dstMip.m_width, dstMip.m_height, format); for (uint8_t lod = 1; lod < numMips; ++lod) { - imageRgba32fDownsample2x2NormalMap(dstMip.m_width, dstMip.m_height, dstMip.m_width*16, rgba, rgba); + 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(imageContainer, 0, lod, output->data, output->size, dstMip); + imageGetRawData(*output, 0, lod, output->m_data, output->m_size, dstMip); uint8_t* data = const_cast(dstMip.m_data); imageEncodeFromRgba32f(&allocator, data, rgbaDst, dstMip.m_width, dstMip.m_height, format); } BX_FREE(&allocator, rgbaDst); } - else if (8 != getBlockInfo(imageContainer.m_format).rBits) + else if (8 != getBlockInfo(input.m_format).rBits) { - output = imageAlloc(imageContainer, format, mip.m_width, mip.m_height, 0, 1, false, mips); + output = imageAlloc(&allocator, format, mip.m_width, mip.m_height, 0, 1, false, mips); ImageMip dstMip; - imageGetRawData(imageContainer, 0, 0, NULL, 0, dstMip); + imageGetRawData(*output, 0, 0, NULL, 0, dstMip); if (mip.m_width != dstMip.m_width && mip.m_height != dstMip.m_height) @@ -705,7 +702,16 @@ int main(int _argc, const char* _argv[]) return EXIT_FAILURE; } - uint32_t size = imageGetSize(TextureFormat::RGBA32F, dstMip.m_width, dstMip.m_height); + 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); @@ -718,7 +724,7 @@ int main(int _argc, const char* _argv[]) , mip.m_width*mip.m_bpp/8 , mip.m_format ); - imageEncodeFromRgba32f(&allocator, output->data, rgba, dstMip.m_width, dstMip.m_height, format); + imageEncodeFromRgba32f(&allocator, output->m_data, rgba, dstMip.m_width, dstMip.m_height, format); imageRgba32fToLinear(rgba , mip.m_width @@ -729,8 +735,8 @@ int main(int _argc, const char* _argv[]) for (uint8_t lod = 1; lod < numMips; ++lod) { - imageRgba32fLinearDownsample2x2(dstMip.m_width, dstMip.m_height, dstMip.m_width*16, rgba, rgba); - imageGetRawData(imageContainer, 0, lod, output->data, output->size, dstMip); + 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(dstMip.m_data); imageRgba32fToGamma(rgbaDst @@ -747,10 +753,10 @@ int main(int _argc, const char* _argv[]) } else { - output = imageAlloc(imageContainer, format, mip.m_width, mip.m_height, 0, 1, false, mips); + output = imageAlloc(&allocator, format, mip.m_width, mip.m_height, 0, 1, false, mips); ImageMip dstMip; - imageGetRawData(imageContainer, 0, 0, NULL, 0, dstMip); + imageGetRawData(*output, 0, 0, NULL, 0, dstMip); if (mip.m_width != dstMip.m_width && mip.m_height != dstMip.m_height) @@ -765,7 +771,16 @@ int main(int _argc, const char* _argv[]) return EXIT_FAILURE; } - uint32_t size = imageGetSize(TextureFormat::RGBA8, dstMip.m_width, dstMip.m_height); + 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; @@ -785,12 +800,12 @@ int main(int _argc, const char* _argv[]) memcpy(ref, rgba, size); } - imageEncodeFromRgba8(output->data, rgba, dstMip.m_width, dstMip.m_height, format); + imageEncodeFromRgba8(output->m_data, rgba, dstMip.m_width, dstMip.m_height, format); for (uint8_t lod = 1; lod < numMips; ++lod) { - imageRgba8Downsample2x2(dstMip.m_width, dstMip.m_height, dstMip.m_width*4, rgba, rgba); - imageGetRawData(imageContainer, 0, lod, output->data, output->size, dstMip); + 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(dstMip.m_data); imageEncodeFromRgba8(data, rgba, dstMip.m_width, dstMip.m_height, format); } @@ -798,7 +813,7 @@ int main(int _argc, const char* _argv[]) if (NULL != ref) { imageDecodeToRgba8(rgba - , output->data + , output->m_data , mip.m_width , mip.m_height , mip.m_width*mip.m_bpp/8 @@ -840,7 +855,7 @@ int main(int _argc, const char* _argv[]) { if (NULL != bx::stristr(outputFileName, ".ktx") ) { - imageWriteKtx(&writer, imageContainer, output->data, output->size); + imageWriteKtx(&writer, *output, output->m_data, output->m_size); } bx::close(&writer); @@ -865,7 +880,7 @@ int main(int _argc, const char* _argv[]) return EXIT_FAILURE; } - release(mem); + BX_FREE(&allocator, inputData); } return EXIT_SUCCESS; diff --git a/3rdparty/bgfx/tools/texturev/fs_texture.sc b/3rdparty/bgfx/tools/texturev/fs_texture.sc index d1f69c0..380888e 100644 --- a/3rdparty/bgfx/tools/texturev/fs_texture.sc +++ b/3rdparty/bgfx/tools/texturev/fs_texture.sc @@ -1,8 +1,8 @@ $input v_texcoord0, v_color0 /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. - * License: http://www.opensource.org/licenses/BSD-2-Clause + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ #include diff --git a/3rdparty/bgfx/tools/texturev/fs_texture_array.bin.h b/3rdparty/bgfx/tools/texturev/fs_texture_array.bin.h index 27c6ec9..ad7cfa7 100644 --- a/3rdparty/bgfx/tools/texturev/fs_texture_array.bin.h +++ b/3rdparty/bgfx/tools/texturev/fs_texture_array.bin.h @@ -15,13 +15,14 @@ static const uint8_t fs_texture_array_glsl[329] = 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 + 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);.}... }; +static const uint8_t fs_texture_array_dx9[] = { 0 }; static const uint8_t fs_texture_array_dx11[488] = { 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x02, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH........u_par @@ -71,9 +72,9 @@ static const uint8_t fs_texture_array_mtl[811] = 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 @@ -84,7 +85,7 @@ 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 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;. @@ -102,7 +103,7 @@ static const uint8_t fs_texture_array_mtl[811] = 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)));. + 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 diff --git a/3rdparty/bgfx/tools/texturev/fs_texture_array.sc b/3rdparty/bgfx/tools/texturev/fs_texture_array.sc index 4059652..4129bed 100644 --- a/3rdparty/bgfx/tools/texturev/fs_texture_array.sc +++ b/3rdparty/bgfx/tools/texturev/fs_texture_array.sc @@ -1,8 +1,8 @@ $input v_texcoord0, v_color0 /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. - * License: http://www.opensource.org/licenses/BSD-2-Clause + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ #include diff --git a/3rdparty/bgfx/tools/texturev/fs_texture_cube.sc b/3rdparty/bgfx/tools/texturev/fs_texture_cube.sc index d15b23c..7948e7b 100644 --- a/3rdparty/bgfx/tools/texturev/fs_texture_cube.sc +++ b/3rdparty/bgfx/tools/texturev/fs_texture_cube.sc @@ -1,8 +1,8 @@ $input v_texcoord0, v_color0 /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. - * License: http://www.opensource.org/licenses/BSD-2-Clause + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ #include diff --git a/3rdparty/bgfx/tools/texturev/makefile b/3rdparty/bgfx/tools/texturev/makefile index 31820c5..733ae65 100644 --- a/3rdparty/bgfx/tools/texturev/makefile +++ b/3rdparty/bgfx/tools/texturev/makefile @@ -1,6 +1,6 @@ # -# Copyright 2011-2015 Branimir Karadzic. All rights reserved. -# License: http://www.opensource.org/licenses/BSD-2-Clause +# Copyright 2011-2017 Branimir Karadzic. All rights reserved. +# License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause # include ../../../bgfx/scripts/shader-embeded.mk diff --git a/3rdparty/bgfx/tools/texturev/texturev.cpp b/3rdparty/bgfx/tools/texturev/texturev.cpp index 0ea30e5..bd582c8 100644 --- a/3rdparty/bgfx/tools/texturev/texturev.cpp +++ b/3rdparty/bgfx/tools/texturev/texturev.cpp @@ -1,6 +1,6 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. - * License: http://www.opensource.org/licenses/BSD-2-Clause + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ #include "common.h" @@ -17,12 +17,6 @@ #include -#include "vs_texture.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 #include @@ -32,10 +26,33 @@ namespace stl = tinystl; #include "image.h" +#include + +#include "vs_texture.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_sdf.bin.h" + +static const bgfx::EmbeddedShader s_embeddedShaders[] = +{ + BGFX_EMBEDDED_SHADER(vs_texture), + BGFX_EMBEDDED_SHADER(fs_texture), + BGFX_EMBEDDED_SHADER(fs_texture_array), + BGFX_EMBEDDED_SHADER(vs_texture_cube), + BGFX_EMBEDDED_SHADER(fs_texture_cube), + BGFX_EMBEDDED_SHADER(fs_texture_sdf), + + BGFX_EMBEDDED_SHADER_END() +}; + static const char* s_supportedExt[] = { "bmp", "dds", + "exr", + "gif", "jpg", "jpeg", "hdr", @@ -93,6 +110,8 @@ static const InputBinding s_bindingView[] = { entry::Key::KeyH, entry::Modifier::None, 1, NULL, "view help" }, + { entry::Key::KeyS, entry::Modifier::None, 1, NULL, "view sdf" }, + INPUT_BINDING_END }; @@ -122,6 +141,7 @@ struct View , m_filter(true) , m_alpha(false) , m_help(false) + , m_sdf(false) { } @@ -261,6 +281,10 @@ struct View m_alpha = false; } } + else if (0 == strcmp(_argv[1], "sdf") ) + { + m_sdf ^= true; + } else if (0 == strcmp(_argv[1], "help") ) { m_help ^= true; @@ -295,7 +319,7 @@ struct View bool supported = false; for (uint32_t ii = 0; ii < BX_COUNTOF(s_supportedExt); ++ii) { - if (0 == bx::stricmp(ext, s_supportedExt[ii]) ) + if (0 == bx::strincmp(ext, s_supportedExt[ii]) ) { supported = true; break; @@ -336,6 +360,7 @@ struct View bool m_filter; bool m_alpha; bool m_help; + bool m_sdf; }; int cmdView(CmdContext* /*_context*/, void* _userData, int _argc, char const* const* _argv) @@ -369,7 +394,7 @@ bgfx::VertexDecl PosUvColorVertex::ms_decl; bool screenQuad(int32_t _x, int32_t _y, int32_t _width, uint32_t _height, uint32_t _abgr, bool _originBottomLeft = false) { - if (bgfx::checkAvailTransientVertexBuffer(6, PosUvColorVertex::ms_decl) ) + if (6 == bgfx::getAvailTransientVertexBuffer(6, PosUvColorVertex::ms_decl) ) { bgfx::TransientVertexBuffer vb; bgfx::allocTransientVertexBuffer(&vb, 6, PosUvColorVertex::ms_decl); @@ -493,7 +518,7 @@ void help(const char* _error = NULL) fprintf(stderr , "texturev, bgfx texture viewer tool\n" - "Copyright 2011-2016 Branimir Karadzic. All rights reserved.\n" + "Copyright 2011-2017 Branimir Karadzic. All rights reserved.\n" "License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause\n\n" ); @@ -644,43 +669,11 @@ int _main_(int _argc, char** _argv) PosUvColorVertex::init(); - const bgfx::Memory* vs_texture; - const bgfx::Memory* fs_texture; - const bgfx::Memory* fs_texture_array; - const bgfx::Memory* vs_texture_cube; - const bgfx::Memory* fs_texture_cube; + bgfx::RendererType::Enum type = bgfx::getRendererType(); - switch (bgfx::getRendererType()) - { - case bgfx::RendererType::Direct3D9: - vs_texture = bgfx::makeRef(vs_texture_dx9, sizeof(vs_texture_dx9) ); - fs_texture = bgfx::makeRef(fs_texture_dx9, sizeof(fs_texture_dx9) ); - fs_texture_array = NULL; - vs_texture_cube = bgfx::makeRef(vs_texture_cube_dx9, sizeof(vs_texture_cube_dx9) ); - fs_texture_cube = bgfx::makeRef(fs_texture_cube_dx9, sizeof(fs_texture_cube_dx9) ); - break; - - case bgfx::RendererType::Direct3D11: - case bgfx::RendererType::Direct3D12: - vs_texture = bgfx::makeRef(vs_texture_dx11, sizeof(vs_texture_dx11) ); - fs_texture = bgfx::makeRef(fs_texture_dx11, sizeof(fs_texture_dx11) ); - fs_texture_array = bgfx::makeRef(fs_texture_array_dx11, sizeof(fs_texture_dx11) ); - vs_texture_cube = bgfx::makeRef(vs_texture_cube_dx11, sizeof(vs_texture_cube_dx11) ); - fs_texture_cube = bgfx::makeRef(fs_texture_cube_dx11, sizeof(fs_texture_cube_dx11) ); - break; - - default: - vs_texture = bgfx::makeRef(vs_texture_glsl, sizeof(vs_texture_glsl) ); - fs_texture = bgfx::makeRef(fs_texture_glsl, sizeof(fs_texture_glsl) ); - fs_texture_array = bgfx::makeRef(fs_texture_array_glsl, sizeof(fs_texture_array_glsl) ); - fs_texture = bgfx::makeRef(fs_texture_glsl, sizeof(fs_texture_glsl) ); - vs_texture_cube = bgfx::makeRef(vs_texture_cube_glsl, sizeof(vs_texture_cube_glsl) ); - fs_texture_cube = bgfx::makeRef(fs_texture_cube_glsl, sizeof(fs_texture_cube_glsl) ); - break; - } - - bgfx::ShaderHandle vsTexture = bgfx::createShader(vs_texture); - bgfx::ShaderHandle fsTexture = bgfx::createShader(fs_texture); + 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 @@ -690,18 +683,23 @@ int _main_(int _argc, char** _argv) bgfx::ProgramHandle textureArrayProgram = bgfx::createProgram( vsTexture - , NULL != fs_texture_array - ? bgfx::createShader(fs_texture_array) + , bgfx::isValid(fsTextureArray) + ? fsTextureArray : fsTexture , true ); bgfx::ProgramHandle textureCubeProgram = bgfx::createProgram( - bgfx::createShader(vs_texture_cube) - , bgfx::createShader(fs_texture_cube) + 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::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); @@ -761,8 +759,8 @@ int _main_(int _argc, char** _argv) | (mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0) | (mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0) , mouseState.m_mz - , width - , height + , uint16_t(width) + , uint16_t(height) ); static bool help = false; @@ -779,7 +777,7 @@ int _main_(int _argc, char** _argv) ImGui::Text( "texturev, bgfx texture viewer tool " ICON_KI_WRENCH "\n" - "Copyright 2011-2016 Branimir Karadzic. All rights reserved.\n" + "Copyright 2011-2017 Branimir Karadzic. All rights reserved.\n" "License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause\n" ); ImGui::Separator(); @@ -812,6 +810,10 @@ int _main_(int _argc, char** _argv) 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."); + ImGui::NextLine(); + + ImGui::TextColored(ImVec4(1.0f, 1.0f, 0.0f, 1.0f), "s"); ImGui::SameLine(64); ImGui::Text("Toggle Multi-channel SDF rendering"); + ImGui::PopFont(); ImGui::NextLine(); @@ -830,9 +832,6 @@ int _main_(int _argc, char** _argv) help = view.m_help; -// bool b; -// ImGui::ShowTestWindow(&b); - imguiEndFrame(); if (!bgfx::isValid(texture) @@ -879,7 +878,7 @@ int _main_(int _argc, char** _argv) 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, width, height); + bgfx::setViewRect(0, 0, 0, uint16_t(width), uint16_t(height) ); bgfx::touch(0); bgfx::dbgTextClear(); @@ -926,9 +925,11 @@ int _main_(int _argc, char** _argv) | BGFX_STATE_ALPHA_WRITE | (view.m_alpha ? BGFX_STATE_BLEND_ALPHA : BGFX_STATE_NONE) ); - bgfx::submit(0, view.m_info.cubeMap ? textureCubeProgram + bgfx::submit(0 + , view.m_info.cubeMap ? textureCubeProgram : 1 < view.m_info.numLayers ? textureArrayProgram - : textureProgram + : view.m_sdf ? textureSDFProgram + : textureProgram ); bgfx::frame(); diff --git a/3rdparty/bgfx/tools/texturev/vs_texture.sc b/3rdparty/bgfx/tools/texturev/vs_texture.sc index bb589ef..ccc4946 100644 --- a/3rdparty/bgfx/tools/texturev/vs_texture.sc +++ b/3rdparty/bgfx/tools/texturev/vs_texture.sc @@ -2,8 +2,8 @@ $input a_position, a_texcoord0, a_color0 $output v_texcoord0, v_color0 /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. - * License: http://www.opensource.org/licenses/BSD-2-Clause + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ #include diff --git a/3rdparty/bgfx/tools/texturev/vs_texture_cube.sc b/3rdparty/bgfx/tools/texturev/vs_texture_cube.sc index 51155fa..fa08155 100644 --- a/3rdparty/bgfx/tools/texturev/vs_texture_cube.sc +++ b/3rdparty/bgfx/tools/texturev/vs_texture_cube.sc @@ -2,8 +2,8 @@ $input a_position, a_texcoord0, a_color0 $output v_texcoord0, v_color0 /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. - * License: http://www.opensource.org/licenses/BSD-2-Clause + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ #include diff --git a/3rdparty/bx/3rdparty/catch/catch.hpp b/3rdparty/bx/3rdparty/catch/catch.hpp index 7df2fd0..2a09fd1 100644 --- a/3rdparty/bx/3rdparty/catch/catch.hpp +++ b/3rdparty/bx/3rdparty/catch/catch.hpp @@ -1,6 +1,6 @@ /* - * Catch v1.5.4 - * Generated: 2016-05-12 19:16:01.957320 + * Catch v1.7.2 + * Generated: 2017-02-13 15:57:33.350226 * ---------------------------------------------------------- * This file has been merged from multiple headers. Please don't edit it directly * Copyright (c) 2012 Two Blue Cubes Ltd. All rights reserved. @@ -60,21 +60,6 @@ // #included from: catch_common.h #define TWOBLUECUBES_CATCH_COMMON_H_INCLUDED -#define INTERNAL_CATCH_UNIQUE_NAME_LINE2( name, line ) name##line -#define INTERNAL_CATCH_UNIQUE_NAME_LINE( name, line ) INTERNAL_CATCH_UNIQUE_NAME_LINE2( name, line ) -#ifdef CATCH_CONFIG_COUNTER -# define INTERNAL_CATCH_UNIQUE_NAME( name ) INTERNAL_CATCH_UNIQUE_NAME_LINE( name, __COUNTER__ ) -#else -# define INTERNAL_CATCH_UNIQUE_NAME( name ) INTERNAL_CATCH_UNIQUE_NAME_LINE( name, __LINE__ ) -#endif - -#define INTERNAL_CATCH_STRINGIFY2( expr ) #expr -#define INTERNAL_CATCH_STRINGIFY( expr ) INTERNAL_CATCH_STRINGIFY2( expr ) - -#include -#include -#include - // #included from: catch_compiler_capabilities.h #define TWOBLUECUBES_CATCH_COMPILER_CAPABILITIES_HPP_INCLUDED @@ -89,11 +74,14 @@ // CATCH_CONFIG_CPP11_LONG_LONG : is long long supported? // CATCH_CONFIG_CPP11_OVERRIDE : is override supported? // CATCH_CONFIG_CPP11_UNIQUE_PTR : is unique_ptr supported (otherwise use auto_ptr) +// CATCH_CONFIG_CPP11_SHUFFLE : is std::shuffle supported? +// CATCH_CONFIG_CPP11_TYPE_TRAITS : are type_traits and enable_if supported? // CATCH_CONFIG_CPP11_OR_GREATER : Is C++11 supported? // CATCH_CONFIG_VARIADIC_MACROS : are variadic macros supported? // CATCH_CONFIG_COUNTER : is the __COUNTER__ macro supported? +// CATCH_CONFIG_WINDOWS_SEH : is Windows SEH supported? // **************** // Note to maintainers: if new toggles are added please document them // in configuration.md, too @@ -106,8 +94,16 @@ // All the C++11 features can be disabled with CATCH_CONFIG_NO_CPP11 -#if defined(__cplusplus) && __cplusplus >= 201103L -# define CATCH_CPP11_OR_GREATER +#ifdef __cplusplus + +# if __cplusplus >= 201103L +# define CATCH_CPP11_OR_GREATER +# endif + +# if __cplusplus >= 201402L +# define CATCH_CPP14_OR_GREATER +# endif + #endif #ifdef __clang__ @@ -165,6 +161,8 @@ // Visual C++ #ifdef _MSC_VER +#define CATCH_INTERNAL_CONFIG_WINDOWS_SEH + #if (_MSC_VER >= 1600) # define CATCH_INTERNAL_CONFIG_CPP11_NULLPTR # define CATCH_INTERNAL_CONFIG_CPP11_UNIQUE_PTR @@ -173,6 +171,8 @@ #if (_MSC_VER >= 1900 ) // (VC++ 13 (VS2015)) #define CATCH_INTERNAL_CONFIG_CPP11_NOEXCEPT #define CATCH_INTERNAL_CONFIG_CPP11_GENERATED_METHODS +#define CATCH_INTERNAL_CONFIG_CPP11_SHUFFLE +#define CATCH_INTERNAL_CONFIG_CPP11_TYPE_TRAITS #endif #endif // _MSC_VER @@ -238,6 +238,12 @@ # if !defined(CATCH_INTERNAL_CONFIG_CPP11_UNIQUE_PTR) # define CATCH_INTERNAL_CONFIG_CPP11_UNIQUE_PTR # endif +# if !defined(CATCH_INTERNAL_CONFIG_CPP11_SHUFFLE) +# define CATCH_INTERNAL_CONFIG_CPP11_SHUFFLE +# endif +# if !defined(CATCH_INTERNAL_CONFIG_CPP11_TYPE_TRAITS) +# define CATCH_INTERNAL_CONFIG_CPP11_TYPE_TRAITS +# endif #endif // __cplusplus >= 201103L @@ -260,18 +266,30 @@ #if defined(CATCH_INTERNAL_CONFIG_VARIADIC_MACROS) && !defined(CATCH_CONFIG_NO_VARIADIC_MACROS) && !defined(CATCH_CONFIG_VARIADIC_MACROS) # define CATCH_CONFIG_VARIADIC_MACROS #endif -#if defined(CATCH_INTERNAL_CONFIG_CPP11_LONG_LONG) && !defined(CATCH_CONFIG_NO_LONG_LONG) && !defined(CATCH_CONFIG_CPP11_LONG_LONG) && !defined(CATCH_CONFIG_NO_CPP11) +#if defined(CATCH_INTERNAL_CONFIG_CPP11_LONG_LONG) && !defined(CATCH_CONFIG_CPP11_NO_LONG_LONG) && !defined(CATCH_CONFIG_CPP11_LONG_LONG) && !defined(CATCH_CONFIG_NO_CPP11) # define CATCH_CONFIG_CPP11_LONG_LONG #endif -#if defined(CATCH_INTERNAL_CONFIG_CPP11_OVERRIDE) && !defined(CATCH_CONFIG_NO_OVERRIDE) && !defined(CATCH_CONFIG_CPP11_OVERRIDE) && !defined(CATCH_CONFIG_NO_CPP11) +#if defined(CATCH_INTERNAL_CONFIG_CPP11_OVERRIDE) && !defined(CATCH_CONFIG_CPP11_NO_OVERRIDE) && !defined(CATCH_CONFIG_CPP11_OVERRIDE) && !defined(CATCH_CONFIG_NO_CPP11) # define CATCH_CONFIG_CPP11_OVERRIDE #endif -#if defined(CATCH_INTERNAL_CONFIG_CPP11_UNIQUE_PTR) && !defined(CATCH_CONFIG_NO_UNIQUE_PTR) && !defined(CATCH_CONFIG_CPP11_UNIQUE_PTR) && !defined(CATCH_CONFIG_NO_CPP11) +#if defined(CATCH_INTERNAL_CONFIG_CPP11_UNIQUE_PTR) && !defined(CATCH_CONFIG_CPP11_NO_UNIQUE_PTR) && !defined(CATCH_CONFIG_CPP11_UNIQUE_PTR) && !defined(CATCH_CONFIG_NO_CPP11) # define CATCH_CONFIG_CPP11_UNIQUE_PTR #endif -#if defined(CATCH_INTERNAL_CONFIG_COUNTER) && !defined(CATCH_CONFIG_NO_COUNTER) && !defined(CATCH_CONFIG_COUNTER) +// Use of __COUNTER__ is suppressed if __JETBRAINS_IDE__ is #defined (meaning we're being parsed by a JetBrains IDE for +// analytics) because, at time of writing, __COUNTER__ is not properly handled by it. +// This does not affect compilation +#if defined(CATCH_INTERNAL_CONFIG_COUNTER) && !defined(CATCH_CONFIG_NO_COUNTER) && !defined(CATCH_CONFIG_COUNTER) && !defined(__JETBRAINS_IDE__) # define CATCH_CONFIG_COUNTER #endif +#if defined(CATCH_INTERNAL_CONFIG_CPP11_SHUFFLE) && !defined(CATCH_CONFIG_CPP11_NO_SHUFFLE) && !defined(CATCH_CONFIG_CPP11_SHUFFLE) && !defined(CATCH_CONFIG_NO_CPP11) +# define CATCH_CONFIG_CPP11_SHUFFLE +#endif +# if defined(CATCH_INTERNAL_CONFIG_CPP11_TYPE_TRAITS) && !defined(CATCH_CONFIG_CPP11_NO_TYPE_TRAITS) && !defined(CATCH_CONFIG_CPP11_TYPE_TRAITS) && !defined(CATCH_CONFIG_NO_CPP11) +# define CATCH_CONFIG_CPP11_TYPE_TRAITS +# endif +#if defined(CATCH_INTERNAL_CONFIG_WINDOWS_SEH) && !defined(CATCH_CONFIG_NO_WINDOWS_SEH) && !defined(CATCH_CONFIG_WINDOWS_SEH) +# define CATCH_CONFIG_WINDOWS_SEH +#endif #if !defined(CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS) # define CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS @@ -307,6 +325,20 @@ # define CATCH_AUTO_PTR( T ) std::auto_ptr #endif +#define INTERNAL_CATCH_UNIQUE_NAME_LINE2( name, line ) name##line +#define INTERNAL_CATCH_UNIQUE_NAME_LINE( name, line ) INTERNAL_CATCH_UNIQUE_NAME_LINE2( name, line ) +#ifdef CATCH_CONFIG_COUNTER +# define INTERNAL_CATCH_UNIQUE_NAME( name ) INTERNAL_CATCH_UNIQUE_NAME_LINE( name, __COUNTER__ ) +#else +# define INTERNAL_CATCH_UNIQUE_NAME( name ) INTERNAL_CATCH_UNIQUE_NAME_LINE( name, __LINE__ ) +#endif + +#define INTERNAL_CATCH_STRINGIFY2( expr ) #expr +#define INTERNAL_CATCH_STRINGIFY( expr ) INTERNAL_CATCH_STRINGIFY2( expr ) + +#include +#include + namespace Catch { struct IConfig; @@ -359,7 +391,9 @@ namespace Catch { } bool startsWith( std::string const& s, std::string const& prefix ); + bool startsWith( std::string const& s, char prefix ); bool endsWith( std::string const& s, std::string const& suffix ); + bool endsWith( std::string const& s, char suffix ); bool contains( std::string const& s, std::string const& infix ); void toLowerInPlace( std::string& s ); std::string toLower( std::string const& s ); @@ -379,8 +413,8 @@ namespace Catch { SourceLineInfo(); SourceLineInfo( char const* _file, std::size_t _line ); - SourceLineInfo( SourceLineInfo const& other ); # ifdef CATCH_CONFIG_CPP11_GENERATED_METHODS + SourceLineInfo(SourceLineInfo const& other) = default; SourceLineInfo( SourceLineInfo && ) = default; SourceLineInfo& operator = ( SourceLineInfo const& ) = default; SourceLineInfo& operator = ( SourceLineInfo && ) = default; @@ -389,7 +423,7 @@ namespace Catch { bool operator == ( SourceLineInfo const& other ) const; bool operator < ( SourceLineInfo const& other ) const; - std::string file; + char const* file; std::size_t line; }; @@ -423,8 +457,6 @@ namespace Catch { #define CATCH_INTERNAL_LINEINFO ::Catch::SourceLineInfo( __FILE__, static_cast( __LINE__ ) ) #define CATCH_INTERNAL_ERROR( msg ) ::Catch::throwLogicError( msg, CATCH_INTERNAL_LINEINFO ); -#include - namespace Catch { class NotImplementedException : public std::exception @@ -557,10 +589,6 @@ namespace Catch { #pragma clang diagnostic pop #endif -#include -#include -#include - namespace Catch { class TestCase; @@ -824,6 +852,27 @@ namespace Catch { namespace Catch { + struct STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison; + + struct DecomposedExpression + { + virtual ~DecomposedExpression() {} + virtual bool isBinaryExpression() const { + return false; + } + virtual void reconstructExpression( std::string& dest ) const = 0; + + // Only simple binary comparisons can be decomposed. + // If more complex check is required then wrap sub-expressions in parentheses. + template STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator + ( T const& ); + template STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator - ( T const& ); + template STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator * ( T const& ); + template STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator / ( T const& ); + template STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator % ( T const& ); + template STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator && ( T const& ); + template STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator || ( T const& ); + }; + struct AssertionInfo { AssertionInfo() {} @@ -840,11 +889,41 @@ namespace Catch { struct AssertionResultData { - AssertionResultData() : resultType( ResultWas::Unknown ) {} + AssertionResultData() : decomposedExpression( CATCH_NULL ) + , resultType( ResultWas::Unknown ) + , negated( false ) + , parenthesized( false ) {} - std::string reconstructedExpression; + void negate( bool parenthesize ) { + negated = !negated; + parenthesized = parenthesize; + if( resultType == ResultWas::Ok ) + resultType = ResultWas::ExpressionFailed; + else if( resultType == ResultWas::ExpressionFailed ) + resultType = ResultWas::Ok; + } + + std::string const& reconstructExpression() const { + if( decomposedExpression != CATCH_NULL ) { + decomposedExpression->reconstructExpression( reconstructedExpression ); + if( parenthesized ) { + reconstructedExpression.insert( 0, 1, '(' ); + reconstructedExpression.append( 1, ')' ); + } + if( negated ) { + reconstructedExpression.insert( 0, 1, '!' ); + } + decomposedExpression = CATCH_NULL; + } + return reconstructedExpression; + } + + mutable DecomposedExpression const* decomposedExpression; + mutable std::string reconstructedExpression; std::string message; ResultWas::OfType resultType; + bool negated; + bool parenthesized; }; class AssertionResult { @@ -871,6 +950,8 @@ namespace Catch { std::string getMessage() const; SourceLineInfo getSourceInfo() const; std::string getTestMacroName() const; + void discardDecomposedExpression() const; + void expandDecomposedExpression() const; protected: AssertionInfo m_info; @@ -1057,7 +1138,7 @@ namespace Matchers { { return m_caseSensitivity == CaseSensitive::No ? " (case insensitive)" - : ""; + : std::string(); } CaseSensitive::Choice m_caseSensitivity; std::string m_str; @@ -1075,7 +1156,7 @@ namespace Matchers { return m_data.m_str == m_data.adjustString( expr );; } virtual std::string toString() const { - return "equals: \"" + m_data.m_str + "\"" + m_data.toStringSuffix(); + return "equals: \"" + m_data.m_str + '"' + m_data.toStringSuffix(); } CasedString m_data; @@ -1092,7 +1173,7 @@ namespace Matchers { return m_data.adjustString( expr ).find( m_data.m_str ) != std::string::npos; } virtual std::string toString() const { - return "contains: \"" + m_data.m_str + "\"" + m_data.toStringSuffix(); + return "contains: \"" + m_data.m_str + '"' + m_data.toStringSuffix(); } CasedString m_data; @@ -1110,7 +1191,7 @@ namespace Matchers { return startsWith( m_data.adjustString( expr ), m_data.m_str ); } virtual std::string toString() const { - return "starts with: \"" + m_data.m_str + "\"" + m_data.toStringSuffix(); + return "starts with: \"" + m_data.m_str + '"' + m_data.toStringSuffix(); } CasedString m_data; @@ -1127,7 +1208,7 @@ namespace Matchers { return endsWith( m_data.adjustString( expr ), m_data.m_str ); } virtual std::string toString() const { - return "ends with: \"" + m_data.m_str + "\"" + m_data.toStringSuffix(); + return "ends with: \"" + m_data.m_str + '"' + m_data.toStringSuffix(); } CasedString m_data; @@ -1202,22 +1283,20 @@ namespace Catch { template class ExpressionLhs; - struct STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison; - struct CopyableStream { CopyableStream() {} CopyableStream( CopyableStream const& other ) { oss << other.oss.str(); } CopyableStream& operator=( CopyableStream const& other ) { - oss.str(""); + oss.str(std::string()); oss << other.oss.str(); return *this; } std::ostringstream oss; }; - class ResultBuilder { + class ResultBuilder : public DecomposedExpression { public: ResultBuilder( char const* macroName, SourceLineInfo const& lineInfo, @@ -1235,19 +1314,15 @@ namespace Catch { return *this; } - template STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator && ( RhsT const& ); - template STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator || ( RhsT const& ); - ResultBuilder& setResultType( ResultWas::OfType result ); ResultBuilder& setResultType( bool result ); - ResultBuilder& setLhs( std::string const& lhs ); - ResultBuilder& setRhs( std::string const& rhs ); - ResultBuilder& setOp( std::string const& op ); - void endExpression(); + void endExpression( DecomposedExpression const& expr ); + + virtual void reconstructExpression( std::string& dest ) const CATCH_OVERRIDE; - std::string reconstructExpression() const; AssertionResult build() const; + AssertionResult build( DecomposedExpression const& expr ) const; void useActiveException( ResultDisposition::Flags resultDisposition = ResultDisposition::Normal ); void captureResult( ResultWas::OfType resultType ); @@ -1259,14 +1334,12 @@ namespace Catch { bool shouldDebugBreak() const; bool allowThrows() const; + template + void captureMatch( ArgT const& arg, MatcherT const& matcher, char const* matcherString ); + private: AssertionInfo m_assertionInfo; AssertionResultData m_data; - struct ExprComponents { - ExprComponents() : testFalse( false ) {} - bool testFalse; - std::string lhs, rhs, op; - } m_exprComponents; CopyableStream m_stream; bool m_shouldDebugBreak; @@ -1788,90 +1861,155 @@ std::string toString( T const& value ) { namespace Catch { -// Wraps the LHS of an expression and captures the operator and RHS (if any) - -// wrapping them all in a ResultBuilder object -template -class ExpressionLhs { - ExpressionLhs& operator = ( ExpressionLhs const& ); -# ifdef CATCH_CONFIG_CPP11_GENERATED_METHODS - ExpressionLhs& operator = ( ExpressionLhs && ) = delete; -# endif +template +class BinaryExpression; +template +class MatchExpression; + +// Wraps the LHS of an expression and overloads comparison operators +// for also capturing those and RHS (if any) +template +class ExpressionLhs : public DecomposedExpression { public: - ExpressionLhs( ResultBuilder& rb, T lhs ) : m_rb( rb ), m_lhs( lhs ) {} -# ifdef CATCH_CONFIG_CPP11_GENERATED_METHODS - ExpressionLhs( ExpressionLhs const& ) = default; - ExpressionLhs( ExpressionLhs && ) = default; -# endif + ExpressionLhs( ResultBuilder& rb, T lhs ) : m_rb( rb ), m_lhs( lhs ), m_truthy(false) {} template - ResultBuilder& operator == ( RhsT const& rhs ) { + BinaryExpression + operator == ( RhsT const& rhs ) { return captureExpression( rhs ); } template - ResultBuilder& operator != ( RhsT const& rhs ) { + BinaryExpression + operator != ( RhsT const& rhs ) { return captureExpression( rhs ); } template - ResultBuilder& operator < ( RhsT const& rhs ) { + BinaryExpression + operator < ( RhsT const& rhs ) { return captureExpression( rhs ); } template - ResultBuilder& operator > ( RhsT const& rhs ) { + BinaryExpression + operator > ( RhsT const& rhs ) { return captureExpression( rhs ); } template - ResultBuilder& operator <= ( RhsT const& rhs ) { + BinaryExpression + operator <= ( RhsT const& rhs ) { return captureExpression( rhs ); } template - ResultBuilder& operator >= ( RhsT const& rhs ) { + BinaryExpression + operator >= ( RhsT const& rhs ) { return captureExpression( rhs ); } - ResultBuilder& operator == ( bool rhs ) { + BinaryExpression operator == ( bool rhs ) { return captureExpression( rhs ); } - ResultBuilder& operator != ( bool rhs ) { + BinaryExpression operator != ( bool rhs ) { return captureExpression( rhs ); } void endExpression() { - bool value = m_lhs ? true : false; + m_truthy = m_lhs ? true : false; m_rb - .setLhs( Catch::toString( value ) ) - .setResultType( value ) - .endExpression(); + .setResultType( m_truthy ) + .endExpression( *this ); } - // Only simple binary expressions are allowed on the LHS. - // If more complex compositions are required then place the sub expression in parentheses - template STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator + ( RhsT const& ); - template STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator - ( RhsT const& ); - template STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator / ( RhsT const& ); - template STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator * ( RhsT const& ); - template STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator && ( RhsT const& ); - template STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator || ( RhsT const& ); + virtual void reconstructExpression( std::string& dest ) const CATCH_OVERRIDE { + dest = Catch::toString( m_truthy ); + } private: template - ResultBuilder& captureExpression( RhsT const& rhs ) { - return m_rb - .setResultType( Internal::compare( m_lhs, rhs ) ) - .setLhs( Catch::toString( m_lhs ) ) - .setRhs( Catch::toString( rhs ) ) - .setOp( Internal::OperatorTraits::getName() ); + BinaryExpression captureExpression( RhsT& rhs ) const { + return BinaryExpression( m_rb, m_lhs, rhs ); + } + + template + BinaryExpression captureExpression( bool rhs ) const { + return BinaryExpression( m_rb, m_lhs, rhs ); } private: ResultBuilder& m_rb; T m_lhs; + bool m_truthy; +}; + +template +class BinaryExpression : public DecomposedExpression { +public: + BinaryExpression( ResultBuilder& rb, LhsT lhs, RhsT rhs ) + : m_rb( rb ), m_lhs( lhs ), m_rhs( rhs ) {} + + void endExpression() const { + m_rb + .setResultType( Internal::compare( m_lhs, m_rhs ) ) + .endExpression( *this ); + } + + virtual bool isBinaryExpression() const CATCH_OVERRIDE { + return true; + } + + virtual void reconstructExpression( std::string& dest ) const CATCH_OVERRIDE { + std::string lhs = Catch::toString( m_lhs ); + std::string rhs = Catch::toString( m_rhs ); + char delim = lhs.size() + rhs.size() < 40 && + lhs.find('\n') == std::string::npos && + rhs.find('\n') == std::string::npos ? ' ' : '\n'; + dest.reserve( 7 + lhs.size() + rhs.size() ); + // 2 for spaces around operator + // 2 for operator + // 2 for parentheses (conditionally added later) + // 1 for negation (conditionally added later) + dest = lhs; + dest += delim; + dest += Internal::OperatorTraits::getName(); + dest += delim; + dest += rhs; + } + +private: + ResultBuilder& m_rb; + LhsT m_lhs; + RhsT m_rhs; +}; + +template +class MatchExpression : public DecomposedExpression { +public: + MatchExpression( ArgT arg, MatcherT matcher, char const* matcherString ) + : m_arg( arg ), m_matcher( matcher ), m_matcherString( matcherString ) {} + + virtual bool isBinaryExpression() const CATCH_OVERRIDE { + return true; + } + + virtual void reconstructExpression( std::string& dest ) const CATCH_OVERRIDE { + std::string matcherAsString = m_matcher.toString(); + dest = Catch::toString( m_arg ); + dest += ' '; + if( matcherAsString == Detail::unprintableString ) + dest += m_matcherString; + else + dest += matcherAsString; + } + +private: + ArgT m_arg; + MatcherT m_matcher; + char const* m_matcherString; }; } // end namespace Catch @@ -1888,6 +2026,14 @@ namespace Catch { return ExpressionLhs( *this, value ); } + template + inline void ResultBuilder::captureMatch( ArgT const& arg, MatcherT const& matcher, + char const* matcherString ) { + MatchExpression expr( arg, matcher, matcherString ); + setResultType( matcher.match( arg ) ); + endExpression( expr ); + } + } // namespace Catch // #included from: catch_message.h @@ -1990,11 +2136,19 @@ namespace Catch { #define TWOBLUECUBES_CATCH_PLATFORM_H_INCLUDED #if defined(__MAC_OS_X_VERSION_MIN_REQUIRED) -#define CATCH_PLATFORM_MAC +# define CATCH_PLATFORM_MAC #elif defined(__IPHONE_OS_VERSION_MIN_REQUIRED) -#define CATCH_PLATFORM_IPHONE +# define CATCH_PLATFORM_IPHONE +#elif defined(linux) || defined(__linux) || defined(__linux__) +# define CATCH_PLATFORM_LINUX #elif defined(WIN32) || defined(__WIN32__) || defined(_WIN32) || defined(_MSC_VER) -#define CATCH_PLATFORM_WINDOWS +# define CATCH_PLATFORM_WINDOWS +# if !defined(NOMINMAX) && !defined(CATCH_CONFIG_NO_NOMINMAX) +# define CATCH_DEFINES_NOMINMAX +# endif +# if !defined(WIN32_LEAN_AND_MEAN) && !defined(CATCH_CONFIG_NO_WIN32_LEAN_AND_MEAN) +# define CATCH_DEFINES_WIN32_LEAN_AND_MEAN +# endif #endif #include @@ -2009,27 +2163,36 @@ namespace Catch{ // The following code snippet based on: // http://cocoawithlove.com/2008/03/break-into-debugger.html - #ifdef DEBUG - #if defined(__ppc64__) || defined(__ppc__) - #define CATCH_BREAK_INTO_DEBUGGER() \ - if( Catch::isDebuggerActive() ) { \ - __asm__("li r0, 20\nsc\nnop\nli r0, 37\nli r4, 2\nsc\nnop\n" \ - : : : "memory","r0","r3","r4" ); \ - } - #else - #define CATCH_BREAK_INTO_DEBUGGER() if( Catch::isDebuggerActive() ) {__asm__("int $3\n" : : );} - #endif + #if defined(__ppc64__) || defined(__ppc__) + #define CATCH_TRAP() \ + __asm__("li r0, 20\nsc\nnop\nli r0, 37\nli r4, 2\nsc\nnop\n" \ + : : : "memory","r0","r3","r4" ) + #else + #define CATCH_TRAP() __asm__("int $3\n" : : ) #endif +#elif defined(CATCH_PLATFORM_LINUX) + // If we can use inline assembler, do it because this allows us to break + // directly at the location of the failing check instead of breaking inside + // raise() called from it, i.e. one stack frame below. + #if defined(__GNUC__) && (defined(__i386) || defined(__x86_64)) + #define CATCH_TRAP() asm volatile ("int $3") + #else // Fall back to the generic way. + #include + + #define CATCH_TRAP() raise(SIGTRAP) + #endif #elif defined(_MSC_VER) - #define CATCH_BREAK_INTO_DEBUGGER() if( Catch::isDebuggerActive() ) { __debugbreak(); } + #define CATCH_TRAP() __debugbreak() #elif defined(__MINGW32__) extern "C" __declspec(dllimport) void __stdcall DebugBreak(); - #define CATCH_BREAK_INTO_DEBUGGER() if( Catch::isDebuggerActive() ) { DebugBreak(); } + #define CATCH_TRAP() DebugBreak() #endif -#ifndef CATCH_BREAK_INTO_DEBUGGER -#define CATCH_BREAK_INTO_DEBUGGER() Catch::alwaysTrue(); +#ifdef CATCH_TRAP + #define CATCH_BREAK_INTO_DEBUGGER() if( Catch::isDebuggerActive() ) { CATCH_TRAP(); } +#else + #define CATCH_BREAK_INTO_DEBUGGER() Catch::alwaysTrue(); #endif // #included from: catch_interfaces_runner.h @@ -2044,6 +2207,45 @@ namespace Catch { }; } +// #included from: catch_type_traits.hpp +#define TWOBLUECUBES_CATCH_TYPE_TRAITS_HPP_INCLUDED + +#if defined(CATCH_CONFIG_CPP11_TYPE_TRAITS) +#include +#endif + +namespace Catch { + +#if defined(CATCH_CONFIG_CPP11_TYPE_TRAITS) + + template + using add_lvalue_reference = std::add_lvalue_reference; + + template + using add_const = std::add_const; + +#else + + template + struct add_const { + typedef const T type; + }; + + template + struct add_lvalue_reference { + typedef T& type; + }; + template + struct add_lvalue_reference { + typedef T& type; + }; + // No && overload, because that is C++11, in which case we have + // proper type_traits implementation from the standard library + +#endif + +} + /////////////////////////////////////////////////////////////////////////////// // In the event of a failure works out if the debugger needs to be invoked // and/or an exception thrown and takes appropriate action. @@ -2062,10 +2264,11 @@ namespace Catch { ( __catchResult <= expr ).endExpression(); \ } \ catch( ... ) { \ - __catchResult.useActiveException( Catch::ResultDisposition::Normal ); \ + __catchResult.useActiveException( resultDisposition ); \ } \ INTERNAL_CATCH_REACT( __catchResult ) \ - } while( Catch::isTrue( false && !!(expr) ) ) // expr here is never evaluated at runtime but it forces the compiler to give it a look + } while( Catch::isTrue( false && static_cast( !!(expr) ) ) ) // expr here is never evaluated at runtime but it forces the compiler to give it a look + // The double negation silences MSVC's C4800 warning, the static_cast forces short-circuit evaluation if the type has overloaded &&. /////////////////////////////////////////////////////////////////////////////// #define INTERNAL_CATCH_IF( expr, resultDisposition, macroName ) \ @@ -2082,7 +2285,7 @@ namespace Catch { do { \ Catch::ResultBuilder __catchResult( macroName, CATCH_INTERNAL_LINEINFO, #expr, resultDisposition ); \ try { \ - expr; \ + static_cast(expr); \ __catchResult.captureResult( Catch::ResultWas::Ok ); \ } \ catch( ... ) { \ @@ -2097,7 +2300,7 @@ namespace Catch { Catch::ResultBuilder __catchResult( macroName, CATCH_INTERNAL_LINEINFO, #expr, resultDisposition, #matcher ); \ if( __catchResult.allowThrows() ) \ try { \ - expr; \ + static_cast(expr); \ __catchResult.captureResult( Catch::ResultWas::DidntThrowException ); \ } \ catch( ... ) { \ @@ -2111,13 +2314,13 @@ namespace Catch { /////////////////////////////////////////////////////////////////////////////// #define INTERNAL_CATCH_THROWS_AS( expr, exceptionType, resultDisposition, macroName ) \ do { \ - Catch::ResultBuilder __catchResult( macroName, CATCH_INTERNAL_LINEINFO, #expr, resultDisposition ); \ + Catch::ResultBuilder __catchResult( macroName, CATCH_INTERNAL_LINEINFO, #expr ", " #exceptionType, resultDisposition ); \ if( __catchResult.allowThrows() ) \ try { \ - expr; \ + static_cast(expr); \ __catchResult.captureResult( Catch::ResultWas::DidntThrowException ); \ } \ - catch( exceptionType ) { \ + catch( Catch::add_const::type>::type ) { \ __catchResult.captureResult( Catch::ResultWas::Ok ); \ } \ catch( ... ) { \ @@ -2156,13 +2359,7 @@ namespace Catch { do { \ Catch::ResultBuilder __catchResult( macroName, CATCH_INTERNAL_LINEINFO, #arg ", " #matcher, resultDisposition ); \ try { \ - std::string matcherAsString = (matcher).toString(); \ - __catchResult \ - .setLhs( Catch::toString( arg ) ) \ - .setRhs( matcherAsString == Catch::Detail::unprintableString ? #matcher : matcherAsString ) \ - .setOp( "matches" ) \ - .setResultType( (matcher).match( arg ) ); \ - __catchResult.captureExpression(); \ + __catchResult.captureMatch( arg, matcher, #matcher ); \ } catch( ... ) { \ __catchResult.useActiveException( resultDisposition | Catch::ResultDisposition::ContinueOnFailure ); \ } \ @@ -2245,6 +2442,8 @@ namespace Catch { }; } +#include + namespace Catch { struct SectionInfo { @@ -2615,6 +2814,10 @@ namespace Catch { #include #include +#if defined(CATCH_CONFIG_CPP11_TYPE_TRAITS) +#include +#endif + namespace Catch { namespace Detail { @@ -2643,9 +2846,56 @@ namespace Detail { return approx; } +#if defined(CATCH_CONFIG_CPP11_TYPE_TRAITS) + template ::value>::type> + friend bool operator == ( const T& lhs, Approx const& rhs ) { + // Thanks to Richard Harris for his help refining this formula + auto lhs_v = double(lhs); + return std::fabs( lhs_v - rhs.m_value ) < rhs.m_epsilon * (rhs.m_scale + (std::max)( std::fabs(lhs_v), std::fabs(rhs.m_value) ) ); + } + + template ::value>::type> + friend bool operator == ( Approx const& lhs, const T& rhs ) { + return operator==( rhs, lhs ); + } + + template ::value>::type> + friend bool operator != ( T lhs, Approx const& rhs ) { + return !operator==( lhs, rhs ); + } + + template ::value>::type> + friend bool operator != ( Approx const& lhs, T rhs ) { + return !operator==( rhs, lhs ); + } + + template ::value>::type> + friend bool operator <= ( T lhs, Approx const& rhs ) + { + return double(lhs) < rhs.m_value || lhs == rhs; + } + + template ::value>::type> + friend bool operator <= ( Approx const& lhs, T rhs ) + { + return lhs.m_value < double(rhs) || lhs == rhs; + } + + template ::value>::type> + friend bool operator >= ( T lhs, Approx const& rhs ) + { + return double(lhs) > rhs.m_value || lhs == rhs; + } + + template ::value>::type> + friend bool operator >= ( Approx const& lhs, T rhs ) + { + return lhs.m_value > double(rhs) || lhs == rhs; + } +#else friend bool operator == ( double lhs, Approx const& rhs ) { // Thanks to Richard Harris for his help refining this formula - return fabs( lhs - rhs.m_value ) < rhs.m_epsilon * (rhs.m_scale + (std::max)( fabs(lhs), fabs(rhs.m_value) ) ); + return std::fabs( lhs - rhs.m_value ) < rhs.m_epsilon * (rhs.m_scale + (std::max)( std::fabs(lhs), std::fabs(rhs.m_value) ) ); } friend bool operator == ( Approx const& lhs, double rhs ) { @@ -2660,6 +2910,27 @@ namespace Detail { return !operator==( rhs, lhs ); } + friend bool operator <= ( double lhs, Approx const& rhs ) + { + return lhs < rhs.m_value || lhs == rhs; + } + + friend bool operator <= ( Approx const& lhs, double rhs ) + { + return lhs.m_value < rhs || lhs == rhs; + } + + friend bool operator >= ( double lhs, Approx const& rhs ) + { + return lhs > rhs.m_value || lhs == rhs; + } + + friend bool operator >= ( Approx const& lhs, double rhs ) + { + return lhs.m_value > rhs || lhs == rhs; + } +#endif + Approx& epsilon( double newEpsilon ) { m_epsilon = newEpsilon; return *this; @@ -2814,7 +3085,8 @@ namespace Catch { IsHidden = 1 << 1, ShouldFail = 1 << 2, MayFail = 1 << 3, - Throws = 1 << 4 + Throws = 1 << 4, + NonPortable = 1 << 5 }; TestCaseInfo( std::string const& _name, @@ -3109,6 +3381,8 @@ return @ desc; \ // #included from: catch_wildcard_pattern.hpp #define TWOBLUECUBES_CATCH_WILDCARD_PATTERN_HPP_INCLUDED +#include + namespace Catch { class WildcardPattern { @@ -3126,11 +3400,11 @@ namespace Catch m_wildcard( NoWildcard ), m_pattern( adjustCase( pattern ) ) { - if( startsWith( m_pattern, "*" ) ) { + if( startsWith( m_pattern, '*' ) ) { m_pattern = m_pattern.substr( 1 ); m_wildcard = WildcardAtStart; } - if( endsWith( m_pattern, "*" ) ) { + if( endsWith( m_pattern, '*' ) ) { m_pattern = m_pattern.substr( 0, m_pattern.size()-1 ); m_wildcard = static_cast( m_wildcard | WildcardAtEnd ); } @@ -3215,10 +3489,11 @@ namespace Catch { bool matches( TestCaseInfo const& testCase ) const { // All patterns in a filter must match for the filter to be a match - for( std::vector >::const_iterator it = m_patterns.begin(), itEnd = m_patterns.end(); it != itEnd; ++it ) + for( std::vector >::const_iterator it = m_patterns.begin(), itEnd = m_patterns.end(); it != itEnd; ++it ) { if( !(*it)->matches( testCase ) ) return false; - return true; + } + return true; } }; @@ -3248,11 +3523,12 @@ namespace Catch { namespace Catch { class TestSpecParser { - enum Mode{ None, Name, QuotedName, Tag }; + enum Mode{ None, Name, QuotedName, Tag, EscapedName }; Mode m_mode; bool m_exclusion; std::size_t m_start, m_pos; std::string m_arg; + std::vector m_escapeChars; TestSpec::Filter m_currentFilter; TestSpec m_testSpec; ITagAliasRegistry const* m_tagAliases; @@ -3265,6 +3541,7 @@ namespace Catch { m_exclusion = false; m_start = std::string::npos; m_arg = m_tagAliases->expandAliases( arg ); + m_escapeChars.clear(); for( m_pos = 0; m_pos < m_arg.size(); ++m_pos ) visitChar( m_arg[m_pos] ); if( m_mode == Name ) @@ -3283,6 +3560,7 @@ namespace Catch { case '~': m_exclusion = true; return; case '[': return startNewMode( Tag, ++m_pos ); case '"': return startNewMode( QuotedName, ++m_pos ); + case '\\': return escape(); default: startNewMode( Name, m_pos ); break; } } @@ -3298,7 +3576,11 @@ namespace Catch { addPattern(); startNewMode( Tag, ++m_pos ); } + else if( c == '\\' ) + escape(); } + else if( m_mode == EscapedName ) + m_mode = Name; else if( m_mode == QuotedName && c == '"' ) addPattern(); else if( m_mode == Tag && c == ']' ) @@ -3308,10 +3590,19 @@ namespace Catch { m_mode = mode; m_start = start; } + void escape() { + if( m_mode == None ) + m_start = m_pos; + m_mode = EscapedName; + m_escapeChars.push_back( m_pos ); + } std::string subString() const { return m_arg.substr( m_start, m_pos - m_start ); } template void addPattern() { std::string token = subString(); + for( size_t i = 0; i < m_escapeChars.size(); ++i ) + token = token.substr( 0, m_escapeChars[i]-i ) + token.substr( m_escapeChars[i]+1-i ); + m_escapeChars.clear(); if( startsWith( token, "exclude:" ) ) { m_exclusion = true; token = token.substr( 8 ); @@ -3345,7 +3636,7 @@ namespace Catch { // #included from: catch_interfaces_config.h #define TWOBLUECUBES_CATCH_INTERFACES_CONFIG_H_INCLUDED -#include +#include #include #include @@ -3397,6 +3688,8 @@ namespace Catch { virtual RunTests::InWhatOrder runOrder() const = 0; virtual unsigned int rngSeed() const = 0; virtual UseColour::YesOrNo useColour() const = 0; + virtual std::vector const& getSectionsToRun() const = 0; + }; } @@ -3419,6 +3712,7 @@ namespace Catch { #include #include #include +#include namespace Catch { @@ -3450,7 +3744,7 @@ namespace Catch { }; class DebugOutStream : public IStream { - std::auto_ptr m_streamBuf; + CATCH_AUTO_PTR( StreamBufBase ) m_streamBuf; mutable std::ostream m_os; public: DebugOutStream(); @@ -3464,8 +3758,7 @@ namespace Catch { #include #include #include -#include -#include +#include #ifndef CATCH_CONFIG_CONSOLE_WIDTH #define CATCH_CONFIG_CONSOLE_WIDTH 80 @@ -3522,6 +3815,7 @@ namespace Catch { std::vector reporterNames; std::vector testsOrTags; + std::vector sectionsToRun; }; class Config : public SharedImpl { @@ -3546,8 +3840,7 @@ namespace Catch { } } - virtual ~Config() { - } + virtual ~Config() {} std::string const& getFilename() const { return m_data.outputFilename ; @@ -3560,27 +3853,26 @@ namespace Catch { std::string getProcessName() const { return m_data.processName; } - bool shouldDebugBreak() const { return m_data.shouldDebugBreak; } + std::vector const& getReporterNames() const { return m_data.reporterNames; } + std::vector const& getSectionsToRun() const CATCH_OVERRIDE { return m_data.sectionsToRun; } - std::vector getReporterNames() const { return m_data.reporterNames; } - - int abortAfter() const { return m_data.abortAfter; } - - TestSpec const& testSpec() const { return m_testSpec; } + virtual TestSpec const& testSpec() const CATCH_OVERRIDE { return m_testSpec; } bool showHelp() const { return m_data.showHelp; } - bool showInvisibles() const { return m_data.showInvisibles; } // IConfig interface - virtual bool allowThrows() const { return !m_data.noThrow; } - virtual std::ostream& stream() const { return m_stream->stream(); } - virtual std::string name() const { return m_data.name.empty() ? m_data.processName : m_data.name; } - virtual bool includeSuccessfulResults() const { return m_data.showSuccessfulTests; } - virtual bool warnAboutMissingAssertions() const { return m_data.warnings & WarnAbout::NoAssertions; } - virtual ShowDurations::OrNot showDurations() const { return m_data.showDurations; } - virtual RunTests::InWhatOrder runOrder() const { return m_data.runOrder; } - virtual unsigned int rngSeed() const { return m_data.rngSeed; } - virtual UseColour::YesOrNo useColour() const { return m_data.useColour; } + virtual bool allowThrows() const CATCH_OVERRIDE { return !m_data.noThrow; } + virtual std::ostream& stream() const CATCH_OVERRIDE { return m_stream->stream(); } + virtual std::string name() const CATCH_OVERRIDE { return m_data.name.empty() ? m_data.processName : m_data.name; } + virtual bool includeSuccessfulResults() const CATCH_OVERRIDE { return m_data.showSuccessfulTests; } + virtual bool warnAboutMissingAssertions() const CATCH_OVERRIDE { return m_data.warnings & WarnAbout::NoAssertions; } + virtual ShowDurations::OrNot showDurations() const CATCH_OVERRIDE { return m_data.showDurations; } + virtual RunTests::InWhatOrder runOrder() const CATCH_OVERRIDE { return m_data.runOrder; } + virtual unsigned int rngSeed() const CATCH_OVERRIDE { return m_data.rngSeed; } + virtual UseColour::YesOrNo useColour() const CATCH_OVERRIDE { return m_data.useColour; } + virtual bool shouldDebugBreak() const CATCH_OVERRIDE { return m_data.shouldDebugBreak; } + virtual int abortAfter() const CATCH_OVERRIDE { return m_data.abortAfter; } + virtual bool showInvisibles() const CATCH_OVERRIDE { return m_data.showInvisibles; } private: @@ -3598,7 +3890,7 @@ namespace Catch { } ConfigData m_data; - std::auto_ptr m_stream; + CATCH_AUTO_PTR( IStream const ) m_stream; TestSpec m_testSpec; }; @@ -3986,9 +4278,12 @@ namespace Clara { inline void convertInto( std::string const& _source, std::string& _dest ) { _dest = _source; } + char toLowerCh(char c) { + return static_cast( ::tolower( c ) ); + } inline void convertInto( std::string const& _source, bool& _dest ) { std::string sourceLC = _source; - std::transform( sourceLC.begin(), sourceLC.end(), sourceLC.begin(), ::tolower ); + std::transform( sourceLC.begin(), sourceLC.end(), sourceLC.begin(), toLowerCh ); if( sourceLC == "y" || sourceLC == "1" || sourceLC == "true" || sourceLC == "yes" || sourceLC == "on" ) _dest = true; else if( sourceLC == "n" || sourceLC == "0" || sourceLC == "false" || sourceLC == "no" || sourceLC == "off" ) @@ -4177,7 +4472,7 @@ namespace Clara { } } Mode handleOpt( std::size_t i, char c, std::string const& arg, std::vector& tokens ) { - if( std::string( ":=\0", 5 ).find( c ) == std::string::npos ) + if( std::string( ":=\0", 3 ).find( c ) == std::string::npos ) return mode; std::string optName = arg.substr( from, i-from ); @@ -4191,7 +4486,7 @@ namespace Clara { return None; } Mode handlePositional( std::size_t i, char c, std::string const& arg, std::vector& tokens ) { - if( inQuotes || std::string( "\0", 3 ).find( c ) == std::string::npos ) + if( inQuotes || std::string( "\0", 1 ).find( c ) == std::string::npos ) return mode; std::string data = arg.substr( from, i-from ); @@ -4639,6 +4934,7 @@ STITCH_CLARA_CLOSE_NAMESPACE #endif #include +#include namespace Catch { @@ -4649,13 +4945,14 @@ namespace Catch { config.abortAfter = x; } inline void addTestOrTags( ConfigData& config, std::string const& _testSpec ) { config.testsOrTags.push_back( _testSpec ); } + inline void addSectionToRun( ConfigData& config, std::string const& sectionName ) { config.sectionsToRun.push_back( sectionName ); } inline void addReporterName( ConfigData& config, std::string const& _reporterName ) { config.reporterNames.push_back( _reporterName ); } inline void addWarning( ConfigData& config, std::string const& _warning ) { if( _warning == "NoAssertions" ) config.warnings = static_cast( config.warnings | WarnAbout::NoAssertions ); else - throw std::runtime_error( "Unrecognised warning: '" + _warning + "'" ); + throw std::runtime_error( "Unrecognised warning: '" + _warning + '\'' ); } inline void setOrder( ConfigData& config, std::string const& order ) { if( startsWith( "declared", order ) ) @@ -4665,7 +4962,7 @@ namespace Catch { else if( startsWith( "random", order ) ) config.runOrder = RunTests::InRandomOrder; else - throw std::runtime_error( "Unrecognised ordering: '" + order + "'" ); + throw std::runtime_error( "Unrecognised ordering: '" + order + '\'' ); } inline void setRngSeed( ConfigData& config, std::string const& seed ) { if( seed == "time" ) { @@ -4676,7 +4973,7 @@ namespace Catch { ss << seed; ss >> config.rngSeed; if( ss.fail() ) - throw std::runtime_error( "Argment to --rng-seed should be the word 'time' or a number" ); + throw std::runtime_error( "Argument to --rng-seed should be the word 'time' or a number" ); } } inline void setVerbosity( ConfigData& config, int level ) { @@ -4711,8 +5008,11 @@ namespace Catch { std::string line; while( std::getline( f, line ) ) { line = trim(line); - if( !line.empty() && !startsWith( line, "#" ) ) - addTestOrTags( config, "\"" + line + "\"," ); + if( !line.empty() && !startsWith( line, '#' ) ) { + if( !startsWith( line, '"' ) ) + line = '"' + line + '"'; + addTestOrTags( config, line + ',' ); + } } } @@ -4799,6 +5099,10 @@ namespace Catch { .describe( "adds a tag for the filename" ) .bind( &ConfigData::filenamesAsTags ); + cli["-c"]["--section"] + .describe( "specify section to run" ) + .bind( &addSectionToRun, "section name" ); + // Less common commands which don't have a short form cli["--list-test-names-only"] .describe( "list all/matching test cases names only" ) @@ -4871,19 +5175,16 @@ namespace Tbc { TextAttributes() : initialIndent( std::string::npos ), indent( 0 ), - width( consoleWidth-1 ), - tabChar( '\t' ) + width( consoleWidth-1 ) {} TextAttributes& setInitialIndent( std::size_t _value ) { initialIndent = _value; return *this; } TextAttributes& setIndent( std::size_t _value ) { indent = _value; return *this; } TextAttributes& setWidth( std::size_t _value ) { width = _value; return *this; } - TextAttributes& setTabChar( char _value ) { tabChar = _value; return *this; } std::size_t initialIndent; // indent of first line, or npos std::size_t indent; // indent of subsequent lines, or all if initialIndent is npos std::size_t width; // maximum width of text, including indent. Longer text will wrap - char tabChar; // If this char is seen the indent is changed to current pos }; class Text { @@ -4891,62 +5192,76 @@ namespace Tbc { Text( std::string const& _str, TextAttributes const& _attr = TextAttributes() ) : attr( _attr ) { - std::string wrappableChars = " [({.,/|\\-"; - std::size_t indent = _attr.initialIndent != std::string::npos - ? _attr.initialIndent - : _attr.indent; - std::string remainder = _str; + const std::string wrappableBeforeChars = "[({<\t"; + const std::string wrappableAfterChars = "])}>-,./|\\"; + const std::string wrappableInsteadOfChars = " \n\r"; + std::string indent = _attr.initialIndent != std::string::npos + ? std::string( _attr.initialIndent, ' ' ) + : std::string( _attr.indent, ' ' ); + + typedef std::string::const_iterator iterator; + iterator it = _str.begin(); + const iterator strEnd = _str.end(); + + while( it != strEnd ) { - while( !remainder.empty() ) { if( lines.size() >= 1000 ) { lines.push_back( "... message truncated due to excessive size" ); return; } - std::size_t tabPos = std::string::npos; - std::size_t width = (std::min)( remainder.size(), _attr.width - indent ); - std::size_t pos = remainder.find_first_of( '\n' ); - if( pos <= width ) { - width = pos; - } - pos = remainder.find_last_of( _attr.tabChar, width ); - if( pos != std::string::npos ) { - tabPos = pos; - if( remainder[width] == '\n' ) - width--; - remainder = remainder.substr( 0, tabPos ) + remainder.substr( tabPos+1 ); - } - if( width == remainder.size() ) { - spliceLine( indent, remainder, width ); - } - else if( remainder[width] == '\n' ) { - spliceLine( indent, remainder, width ); - if( width <= 1 || remainder.size() != 1 ) - remainder = remainder.substr( 1 ); - indent = _attr.indent; - } - else { - pos = remainder.find_last_of( wrappableChars, width ); - if( pos != std::string::npos && pos > 0 ) { - spliceLine( indent, remainder, pos ); - if( remainder[0] == ' ' ) - remainder = remainder.substr( 1 ); + std::string suffix; + std::size_t width = (std::min)( static_cast( strEnd-it ), _attr.width-static_cast( indent.size() ) ); + iterator itEnd = it+width; + iterator itNext = _str.end(); + + iterator itNewLine = std::find( it, itEnd, '\n' ); + if( itNewLine != itEnd ) + itEnd = itNewLine; + + if( itEnd != strEnd ) { + bool foundWrapPoint = false; + iterator findIt = itEnd; + do { + if( wrappableAfterChars.find( *findIt ) != std::string::npos && findIt != itEnd ) { + itEnd = findIt+1; + itNext = findIt+1; + foundWrapPoint = true; + } + else if( findIt > it && wrappableBeforeChars.find( *findIt ) != std::string::npos ) { + itEnd = findIt; + itNext = findIt; + foundWrapPoint = true; + } + else if( wrappableInsteadOfChars.find( *findIt ) != std::string::npos ) { + itNext = findIt+1; + itEnd = findIt; + foundWrapPoint = true; + } + if( findIt == it ) + break; + else + --findIt; + } + while( !foundWrapPoint ); + + if( !foundWrapPoint ) { + // No good wrap char, so we'll break mid word and add a hyphen + --itEnd; + itNext = itEnd; + suffix = "-"; } else { - spliceLine( indent, remainder, width-1 ); - lines.back() += "-"; + while( itEnd > it && wrappableInsteadOfChars.find( *(itEnd-1) ) != std::string::npos ) + --itEnd; } - if( lines.size() == 1 ) - indent = _attr.indent; - if( tabPos != std::string::npos ) - indent += tabPos; } - } - } + lines.push_back( indent + std::string( it, itEnd ) + suffix ); - void spliceLine( std::size_t _indent, std::string& _remainder, std::size_t _pos ) { - lines.push_back( std::string( _indent, ' ' ) + _remainder.substr( 0, _pos ) ); - _remainder = _remainder.substr( _pos ); + if( indent.size() != _attr.indent ) + indent = std::string( _attr.indent, ' ' ); + it = itNext; + } } typedef std::vector::const_iterator const_iterator; @@ -5055,7 +5370,6 @@ namespace Catch { #include #include #include -#include namespace Catch { @@ -5343,9 +5657,9 @@ namespace Catch { } if( !config.testSpec().hasFilters() ) - Catch::cout() << pluralise( matchedTests, "test case" ) << "\n" << std::endl; + Catch::cout() << pluralise( matchedTests, "test case" ) << '\n' << std::endl; else - Catch::cout() << pluralise( matchedTests, "matching test case" ) << "\n" << std::endl; + Catch::cout() << pluralise( matchedTests, "matching test case" ) << '\n' << std::endl; return matchedTests; } @@ -5360,7 +5674,10 @@ namespace Catch { ++it ) { matchedTests++; TestCaseInfo const& testCaseInfo = it->getTestCaseInfo(); - Catch::cout() << testCaseInfo.name << std::endl; + if( startsWith( testCaseInfo.name, '#' ) ) + Catch::cout() << '"' << testCaseInfo.name << '"' << std::endl; + else + Catch::cout() << testCaseInfo.name << std::endl; } return matchedTests; } @@ -5421,9 +5738,9 @@ namespace Catch { .setInitialIndent( 0 ) .setIndent( oss.str().size() ) .setWidth( CATCH_CONFIG_CONSOLE_WIDTH-10 ) ); - Catch::cout() << oss.str() << wrapper << "\n"; + Catch::cout() << oss.str() << wrapper << '\n'; } - Catch::cout() << pluralise( tagCounts.size(), "tag" ) << "\n" << std::endl; + Catch::cout() << pluralise( tagCounts.size(), "tag" ) << '\n' << std::endl; return tagCounts.size(); } @@ -5442,9 +5759,9 @@ namespace Catch { .setWidth( CATCH_CONFIG_CONSOLE_WIDTH - maxNameLen-8 ) ); Catch::cout() << " " << it->first - << ":" + << ':' << std::string( maxNameLen - it->first.size() + 2, ' ' ) - << wrapper << "\n"; + << wrapper << '\n'; } Catch::cout() << std::endl; return factories.size(); @@ -5475,15 +5792,27 @@ namespace Catch { #include #include #include +#include +#include namespace Catch { namespace TestCaseTracking { + struct NameAndLocation { + std::string name; + SourceLineInfo location; + + NameAndLocation( std::string const& _name, SourceLineInfo const& _location ) + : name( _name ), + location( _location ) + {} + }; + struct ITracker : SharedImpl<> { virtual ~ITracker(); // static queries - virtual std::string name() const = 0; + virtual NameAndLocation const& nameAndLocation() const = 0; // dynamic queries virtual bool isComplete() const = 0; // Successfully completed or failed @@ -5499,7 +5828,7 @@ namespace TestCaseTracking { virtual void markAsNeedingAnotherRun() = 0; virtual void addChild( Ptr const& child ) = 0; - virtual ITracker* findChild( std::string const& name ) = 0; + virtual ITracker* findChild( NameAndLocation const& nameAndLocation ) = 0; virtual void openChild() = 0; // Debug/ checking @@ -5507,7 +5836,7 @@ namespace TestCaseTracking { virtual bool isIndexTracker() const = 0; }; - class TrackerContext { + class TrackerContext { enum RunState { NotStarted, @@ -5569,30 +5898,32 @@ namespace TestCaseTracking { Failed }; class TrackerHasName { - std::string m_name; + NameAndLocation m_nameAndLocation; public: - TrackerHasName( std::string const& name ) : m_name( name ) {} + TrackerHasName( NameAndLocation const& nameAndLocation ) : m_nameAndLocation( nameAndLocation ) {} bool operator ()( Ptr const& tracker ) { - return tracker->name() == m_name; + return + tracker->nameAndLocation().name == m_nameAndLocation.name && + tracker->nameAndLocation().location == m_nameAndLocation.location; } }; typedef std::vector > Children; - std::string m_name; + NameAndLocation m_nameAndLocation; TrackerContext& m_ctx; ITracker* m_parent; Children m_children; CycleState m_runState; public: - TrackerBase( std::string const& name, TrackerContext& ctx, ITracker* parent ) - : m_name( name ), + TrackerBase( NameAndLocation const& nameAndLocation, TrackerContext& ctx, ITracker* parent ) + : m_nameAndLocation( nameAndLocation ), m_ctx( ctx ), m_parent( parent ), m_runState( NotStarted ) {} virtual ~TrackerBase(); - virtual std::string name() const CATCH_OVERRIDE { - return m_name; + virtual NameAndLocation const& nameAndLocation() const CATCH_OVERRIDE { + return m_nameAndLocation; } virtual bool isComplete() const CATCH_OVERRIDE { return m_runState == CompletedSuccessfully || m_runState == Failed; @@ -5611,8 +5942,8 @@ namespace TestCaseTracking { m_children.push_back( child ); } - virtual ITracker* findChild( std::string const& name ) CATCH_OVERRIDE { - Children::const_iterator it = std::find_if( m_children.begin(), m_children.end(), TrackerHasName( name ) ); + virtual ITracker* findChild( NameAndLocation const& nameAndLocation ) CATCH_OVERRIDE { + Children::const_iterator it = std::find_if( m_children.begin(), m_children.end(), TrackerHasName( nameAndLocation ) ); return( it != m_children.end() ) ? it->get() : CATCH_NULL; @@ -5690,41 +6021,65 @@ namespace TestCaseTracking { }; class SectionTracker : public TrackerBase { + std::vector m_filters; public: - SectionTracker( std::string const& name, TrackerContext& ctx, ITracker* parent ) - : TrackerBase( name, ctx, parent ) - {} + SectionTracker( NameAndLocation const& nameAndLocation, TrackerContext& ctx, ITracker* parent ) + : TrackerBase( nameAndLocation, ctx, parent ) + { + if( parent ) { + while( !parent->isSectionTracker() ) + parent = &parent->parent(); + + SectionTracker& parentSection = static_cast( *parent ); + addNextFilters( parentSection.m_filters ); + } + } virtual ~SectionTracker(); virtual bool isSectionTracker() const CATCH_OVERRIDE { return true; } - static SectionTracker& acquire( TrackerContext& ctx, std::string const& name ) { + static SectionTracker& acquire( TrackerContext& ctx, NameAndLocation const& nameAndLocation ) { SectionTracker* section = CATCH_NULL; ITracker& currentTracker = ctx.currentTracker(); - if( ITracker* childTracker = currentTracker.findChild( name ) ) { + if( ITracker* childTracker = currentTracker.findChild( nameAndLocation ) ) { assert( childTracker ); assert( childTracker->isSectionTracker() ); section = static_cast( childTracker ); } else { - section = new SectionTracker( name, ctx, ¤tTracker ); + section = new SectionTracker( nameAndLocation, ctx, ¤tTracker ); currentTracker.addChild( section ); } - if( !ctx.completedCycle() && !section->isComplete() ) { - - section->open(); - } + if( !ctx.completedCycle() ) + section->tryOpen(); return *section; } + + void tryOpen() { + if( !isComplete() && (m_filters.empty() || m_filters[0].empty() || m_filters[0] == m_nameAndLocation.name ) ) + open(); + } + + void addInitialFilters( std::vector const& filters ) { + if( !filters.empty() ) { + m_filters.push_back(""); // Root - should never be consulted + m_filters.push_back(""); // Test Case - not a section filter + std::copy( filters.begin(), filters.end(), std::back_inserter( m_filters ) ); + } + } + void addNextFilters( std::vector const& filters ) { + if( filters.size() > 1 ) + std::copy( filters.begin()+1, filters.end(), std::back_inserter( m_filters ) ); + } }; class IndexTracker : public TrackerBase { int m_size; int m_index; public: - IndexTracker( std::string const& name, TrackerContext& ctx, ITracker* parent, int size ) - : TrackerBase( name, ctx, parent ), + IndexTracker( NameAndLocation const& nameAndLocation, TrackerContext& ctx, ITracker* parent, int size ) + : TrackerBase( nameAndLocation, ctx, parent ), m_size( size ), m_index( -1 ) {} @@ -5732,17 +6087,17 @@ namespace TestCaseTracking { virtual bool isIndexTracker() const CATCH_OVERRIDE { return true; } - static IndexTracker& acquire( TrackerContext& ctx, std::string const& name, int size ) { + static IndexTracker& acquire( TrackerContext& ctx, NameAndLocation const& nameAndLocation, int size ) { IndexTracker* tracker = CATCH_NULL; ITracker& currentTracker = ctx.currentTracker(); - if( ITracker* childTracker = currentTracker.findChild( name ) ) { + if( ITracker* childTracker = currentTracker.findChild( nameAndLocation ) ) { assert( childTracker ); assert( childTracker->isIndexTracker() ); tracker = static_cast( childTracker ); } else { - tracker = new IndexTracker( name, ctx, ¤tTracker, size ); + tracker = new IndexTracker( nameAndLocation, ctx, ¤tTracker, size ); currentTracker.addChild( tracker ); } @@ -5770,7 +6125,7 @@ namespace TestCaseTracking { }; inline ITracker& TrackerContext::startRun() { - m_rootTracker = new SectionTracker( "{root}", *this, CATCH_NULL ); + m_rootTracker = new SectionTracker( NameAndLocation( "{root}", CATCH_INTERNAL_LINEINFO ), *this, CATCH_NULL ); m_currentTracker = CATCH_NULL; m_runState = Executing; return *m_rootTracker; @@ -5790,35 +6145,128 @@ using TestCaseTracking::IndexTracker; namespace Catch { - // Report the error condition then exit the process - inline void fatal( std::string const& message, int exitCode ) { + // Report the error condition + inline void reportFatal( std::string const& message ) { IContext& context = Catch::getCurrentContext(); IResultCapture* resultCapture = context.getResultCapture(); resultCapture->handleFatalErrorCondition( message ); - - if( Catch::alwaysTrue() ) // avoids "no return" warnings - exit( exitCode ); } } // namespace Catch #if defined ( CATCH_PLATFORM_WINDOWS ) ///////////////////////////////////////// +// #included from: catch_windows_h_proxy.h + +#define TWOBLUECUBES_CATCH_WINDOWS_H_PROXY_H_INCLUDED + +#ifdef CATCH_DEFINES_NOMINMAX +# define NOMINMAX +#endif +#ifdef CATCH_DEFINES_WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +#endif + +#ifdef __AFXDLL +#include +#else +#include +#endif + +#ifdef CATCH_DEFINES_NOMINMAX +# undef NOMINMAX +#endif +#ifdef CATCH_DEFINES_WIN32_LEAN_AND_MEAN +# undef WIN32_LEAN_AND_MEAN +#endif + + +# if !defined ( CATCH_CONFIG_WINDOWS_SEH ) + +namespace Catch { + struct FatalConditionHandler { + void reset() {} + }; +} + +# else // CATCH_CONFIG_WINDOWS_SEH is defined namespace Catch { + struct SignalDefs { DWORD id; const char* name; }; + extern SignalDefs signalDefs[]; + // There is no 1-1 mapping between signals and windows exceptions. + // Windows can easily distinguish between SO and SigSegV, + // but SigInt, SigTerm, etc are handled differently. + SignalDefs signalDefs[] = { + { EXCEPTION_ILLEGAL_INSTRUCTION, "SIGILL - Illegal instruction signal" }, + { EXCEPTION_STACK_OVERFLOW, "SIGSEGV - Stack overflow" }, + { EXCEPTION_ACCESS_VIOLATION, "SIGSEGV - Segmentation violation signal" }, + { EXCEPTION_INT_DIVIDE_BY_ZERO, "Divide by zero error" }, + }; + struct FatalConditionHandler { - void reset() {} - }; + + static LONG CALLBACK handleVectoredException(PEXCEPTION_POINTERS ExceptionInfo) { + for (int i = 0; i < sizeof(signalDefs) / sizeof(SignalDefs); ++i) { + if (ExceptionInfo->ExceptionRecord->ExceptionCode == signalDefs[i].id) { + reset(); + reportFatal(signalDefs[i].name); + } + } + // If its not an exception we care about, pass it along. + // This stops us from eating debugger breaks etc. + return EXCEPTION_CONTINUE_SEARCH; + } + + FatalConditionHandler() { + isSet = true; + // 32k seems enough for Catch to handle stack overflow, + // but the value was found experimentally, so there is no strong guarantee + guaranteeSize = 32 * 1024; + exceptionHandlerHandle = CATCH_NULL; + // Register as first handler in current chain + exceptionHandlerHandle = AddVectoredExceptionHandler(1, handleVectoredException); + // Pass in guarantee size to be filled + SetThreadStackGuarantee(&guaranteeSize); + } + + static void reset() { + if (isSet) { + // Unregister handler and restore the old guarantee + RemoveVectoredExceptionHandler(exceptionHandlerHandle); + SetThreadStackGuarantee(&guaranteeSize); + exceptionHandlerHandle = CATCH_NULL; + isSet = false; + } + } + + ~FatalConditionHandler() { + reset(); + } + private: + static bool isSet; + static ULONG guaranteeSize; + static PVOID exceptionHandlerHandle; + }; + + bool FatalConditionHandler::isSet = false; + ULONG FatalConditionHandler::guaranteeSize = 0; + PVOID FatalConditionHandler::exceptionHandlerHandle = CATCH_NULL; } // namespace Catch +# endif // CATCH_CONFIG_WINDOWS_SEH + #else // Not Windows - assumed to be POSIX compatible ////////////////////////// #include namespace Catch { - struct SignalDefs { int id; const char* name; }; + struct SignalDefs { + int id; + const char* name; + }; extern SignalDefs signalDefs[]; SignalDefs signalDefs[] = { { SIGINT, "SIGINT - Terminal interrupt signal" }, @@ -5827,35 +6275,66 @@ namespace Catch { { SIGSEGV, "SIGSEGV - Segmentation violation signal" }, { SIGTERM, "SIGTERM - Termination request signal" }, { SIGABRT, "SIGABRT - Abort (abnormal termination) signal" } - }; + }; struct FatalConditionHandler { + static bool isSet; + static struct sigaction oldSigActions [sizeof(signalDefs)/sizeof(SignalDefs)]; + static stack_t oldSigStack; + static char altStackMem[SIGSTKSZ]; + static void handleSignal( int sig ) { - for( std::size_t i = 0; i < sizeof(signalDefs)/sizeof(SignalDefs); ++i ) - if( sig == signalDefs[i].id ) - fatal( signalDefs[i].name, -sig ); - fatal( "", -sig ); + std::string name = ""; + for (std::size_t i = 0; i < sizeof(signalDefs) / sizeof(SignalDefs); ++i) { + SignalDefs &def = signalDefs[i]; + if (sig == def.id) { + name = def.name; + break; + } + } + reset(); + reportFatal(name); + raise( sig ); } - FatalConditionHandler() : m_isSet( true ) { - for( std::size_t i = 0; i < sizeof(signalDefs)/sizeof(SignalDefs); ++i ) - signal( signalDefs[i].id, handleSignal ); - } - ~FatalConditionHandler() { - reset(); - } - void reset() { - if( m_isSet ) { - for( std::size_t i = 0; i < sizeof(signalDefs)/sizeof(SignalDefs); ++i ) - signal( signalDefs[i].id, SIG_DFL ); - m_isSet = false; + FatalConditionHandler() { + isSet = true; + stack_t sigStack; + sigStack.ss_sp = altStackMem; + sigStack.ss_size = SIGSTKSZ; + sigStack.ss_flags = 0; + sigaltstack(&sigStack, &oldSigStack); + struct sigaction sa = { 0 }; + + sa.sa_handler = handleSignal; + sa.sa_flags = SA_ONSTACK; + for (std::size_t i = 0; i < sizeof(signalDefs)/sizeof(SignalDefs); ++i) { + sigaction(signalDefs[i].id, &sa, &oldSigActions[i]); } } - bool m_isSet; + ~FatalConditionHandler() { + reset(); + } + static void reset() { + if( isSet ) { + // Set signals back to previous values -- hopefully nobody overwrote them in the meantime + for( std::size_t i = 0; i < sizeof(signalDefs)/sizeof(SignalDefs); ++i ) { + sigaction(signalDefs[i].id, &oldSigActions[i], CATCH_NULL); + } + // Return the old stack + sigaltstack(&oldSigStack, CATCH_NULL); + isSet = false; + } + } }; + bool FatalConditionHandler::isSet = false; + struct sigaction FatalConditionHandler::oldSigActions[sizeof(signalDefs)/sizeof(SignalDefs)] = {}; + stack_t FatalConditionHandler::oldSigStack = {}; + char FatalConditionHandler::altStackMem[SIGSTKSZ] = {}; + } // namespace Catch #endif // not Windows @@ -5934,10 +6413,12 @@ namespace Catch { m_activeTestCase = &testCase; do { - m_trackerContext.startRun(); + ITracker& rootTracker = m_trackerContext.startRun(); + assert( rootTracker.isSectionTracker() ); + static_cast( rootTracker ).addInitialFilters( m_config->getSectionsToRun() ); do { m_trackerContext.startCycle(); - m_testCaseTracker = &SectionTracker::acquire( m_trackerContext, testInfo.name ); + m_testCaseTracker = &SectionTracker::acquire( m_trackerContext, TestCaseTracking::NameAndLocation( testInfo.name, testInfo.lineInfo ) ); runCurrentTest( redirectedCout, redirectedCerr ); } while( !m_testCaseTracker->isSuccessfullyCompleted() && !aborting() ); @@ -5982,7 +6463,7 @@ namespace Catch { m_messages.clear(); // Reset working state - m_lastAssertionInfo = AssertionInfo( "", m_lastAssertionInfo.lineInfo, "{Unknown expression after the reported line}" , m_lastAssertionInfo.resultDisposition ); + m_lastAssertionInfo = AssertionInfo( std::string(), m_lastAssertionInfo.lineInfo, "{Unknown expression after the reported line}" , m_lastAssertionInfo.resultDisposition ); m_lastResult = result; } @@ -5991,10 +6472,7 @@ namespace Catch { Counts& assertions ) { - std::ostringstream oss; - oss << sectionInfo.name << "@" << sectionInfo.lineInfo; - - ITracker& sectionTracker = SectionTracker::acquire( m_trackerContext, oss.str() ); + ITracker& sectionTracker = SectionTracker::acquire( m_trackerContext, TestCaseTracking::NameAndLocation( sectionInfo.name, sectionInfo.lineInfo ) ); if( !sectionTracker.isOpen() ) return false; m_activeSections.push_back( §ionTracker ); @@ -6053,7 +6531,7 @@ namespace Catch { virtual std::string getCurrentTestName() const { return m_activeTestCase ? m_activeTestCase->getTestCaseInfo().name - : ""; + : std::string(); } virtual const AssertionResult* getLastResult() const { @@ -6083,11 +6561,11 @@ namespace Catch { deltaTotals.testCases.failed = 1; m_reporter->testCaseEnded( TestCaseStats( testInfo, deltaTotals, - "", - "", + std::string(), + std::string(), false ) ); m_totals.testCases.failed++; - testGroupEnded( "", m_totals, 1, 1 ); + testGroupEnded( std::string(), m_totals, 1, 1 ); m_reporter->testRunEnded( TestRunStats( m_runInfo, m_totals, false ) ); } @@ -6106,7 +6584,7 @@ namespace Catch { Counts prevAssertions = m_totals.assertions; double duration = 0; try { - m_lastAssertionInfo = AssertionInfo( "TEST_CASE", testCaseInfo.lineInfo, "", ResultDisposition::Normal ); + m_lastAssertionInfo = AssertionInfo( "TEST_CASE", testCaseInfo.lineInfo, std::string(), ResultDisposition::Normal ); seedRng( *m_config ); @@ -6436,16 +6914,29 @@ namespace Catch { #include #include #include -#include #include namespace Catch { - struct LexSort { - bool operator() (TestCase i,TestCase j) const { return (i + static void shuffle( V& vector ) { + RandomNumberGenerator rng; +#ifdef CATCH_CONFIG_CPP11_SHUFFLE + std::shuffle( vector.begin(), vector.end(), rng ); +#else + std::random_shuffle( vector.begin(), vector.end(), rng ); +#endif + } }; inline std::vector sortTests( IConfig const& config, std::vector const& unsortedTestCases ) { @@ -6454,14 +6945,12 @@ namespace Catch { switch( config.runOrder() ) { case RunTests::InLexicographicalOrder: - std::sort( sorted.begin(), sorted.end(), LexSort() ); + std::sort( sorted.begin(), sorted.end() ); break; case RunTests::InRandomOrder: { seedRng( config ); - - RandomNumberGenerator rng; - std::random_shuffle( sorted.begin(), sorted.end(), rng ); + RandomNumberGenerator::shuffle( sorted ); } break; case RunTests::InDeclarationOrder: @@ -6485,7 +6974,7 @@ namespace Catch { ss << Colour( Colour::Red ) << "error: TEST_CASE( \"" << it->name << "\" ) already defined.\n" - << "\tFirst seen at " << prev.first->getTestCaseInfo().lineInfo << "\n" + << "\tFirst seen at " << prev.first->getTestCaseInfo().lineInfo << '\n' << "\tRedefined at " << it->getTestCaseInfo().lineInfo << std::endl; throw std::runtime_error(ss.str()); @@ -6517,7 +7006,7 @@ namespace Catch { virtual void registerTest( TestCase const& testCase ) { std::string name = testCase.getTestCaseInfo().name; - if( name == "" ) { + if( name.empty() ) { std::ostringstream oss; oss << "Anonymous test case " << ++m_unnamedCount; return registerTest( testCase.withName( oss.str() ) ); @@ -6566,7 +7055,7 @@ namespace Catch { inline std::string extractClassName( std::string const& classOrQualifiedMethodName ) { std::string className = classOrQualifiedMethodName; - if( startsWith( className, "&" ) ) + if( startsWith( className, '&' ) ) { std::size_t lastColons = className.rfind( "::" ); std::size_t penultimateColons = className.rfind( "::", lastColons-1 ); @@ -6784,7 +7273,7 @@ namespace Catch { // #included from: catch_notimplemented_exception.hpp #define TWOBLUECUBES_CATCH_NOTIMPLEMENTED_EXCEPTION_HPP_INCLUDED -#include +#include namespace Catch { @@ -6856,7 +7345,7 @@ namespace Catch { m_ofs.open( filename.c_str() ); if( m_ofs.fail() ) { std::ostringstream oss; - oss << "Unable to open file: '" << filename << "'"; + oss << "Unable to open file: '" << filename << '\''; throw std::domain_error( oss.str() ); } } @@ -6909,6 +7398,11 @@ namespace Catch { Context( Context const& ); void operator=( Context const& ); + public: + virtual ~Context() { + deleteAllValues( m_generatorsByTestName ); + } + public: // IContext virtual IResultCapture* getResultCapture() { return m_resultCapture; @@ -7022,16 +7516,6 @@ namespace Catch { #if defined ( CATCH_CONFIG_COLOUR_WINDOWS ) ///////////////////////////////////////// -#ifndef NOMINMAX -#define NOMINMAX -#endif - -#ifdef __AFXDLL -#include -#else -#include -#endif - namespace Catch { namespace { @@ -7112,7 +7596,7 @@ namespace { case Colour::White: return setColour( "[0m" ); case Colour::Red: return setColour( "[0;31m" ); case Colour::Green: return setColour( "[0;32m" ); - case Colour::Blue: return setColour( "[0:34m" ); + case Colour::Blue: return setColour( "[0;34m" ); case Colour::Cyan: return setColour( "[0;36m" ); case Colour::Yellow: return setColour( "[0;33m" ); case Colour::Grey: return setColour( "[1;30m" ); @@ -7298,7 +7782,7 @@ namespace Catch { std::string AssertionResult::getExpression() const { if( isFalseTest( m_info.resultDisposition ) ) - return "!" + m_info.capturedExpression; + return '!' + m_info.capturedExpression; else return m_info.capturedExpression; } @@ -7314,7 +7798,7 @@ namespace Catch { } std::string AssertionResult::getExpandedExpression() const { - return m_resultData.reconstructedExpression; + return m_resultData.reconstructExpression(); } std::string AssertionResult::getMessage() const { @@ -7328,15 +7812,25 @@ namespace Catch { return m_info.macroName; } + void AssertionResult::discardDecomposedExpression() const { + m_resultData.decomposedExpression = CATCH_NULL; + } + + void AssertionResult::expandDecomposedExpression() const { + m_resultData.reconstructExpression(); + } + } // end namespace Catch // #included from: catch_test_case_info.hpp #define TWOBLUECUBES_CATCH_TEST_CASE_INFO_HPP_INCLUDED +#include + namespace Catch { inline TestCaseInfo::SpecialProperties parseSpecialTag( std::string const& tag ) { - if( startsWith( tag, "." ) || + if( startsWith( tag, '.' ) || tag == "hide" || tag == "!hide" ) return TestCaseInfo::IsHidden; @@ -7346,11 +7840,13 @@ namespace Catch { return TestCaseInfo::ShouldFail; else if( tag == "!mayfail" ) return TestCaseInfo::MayFail; + else if( tag == "!nonportable" ) + return TestCaseInfo::NonPortable; else return TestCaseInfo::None; } inline bool isReservedTag( std::string const& tag ) { - return parseSpecialTag( tag ) == TestCaseInfo::None && tag.size() > 0 && !isalnum( tag[0] ); + return parseSpecialTag( tag ) == TestCaseInfo::None && tag.size() > 0 && !std::isalnum( tag[0] ); } inline void enforceNotReservedTag( std::string const& tag, SourceLineInfo const& _lineInfo ) { if( isReservedTag( tag ) ) { @@ -7420,7 +7916,7 @@ namespace Catch { std::ostringstream oss; for( std::set::const_iterator it = tags.begin(), itEnd = tags.end(); it != itEnd; ++it ) { - oss << "[" << *it << "]"; + oss << '[' << *it << ']'; std::string lcaseTag = toLower( *it ); testCaseInfo.properties = static_cast( testCaseInfo.properties | parseSpecialTag( lcaseTag ) ); testCaseInfo.lcaseTags.insert( lcaseTag ); @@ -7536,18 +8032,18 @@ namespace Catch { {} std::ostream& operator << ( std::ostream& os, Version const& version ) { - os << version.majorVersion << "." - << version.minorVersion << "." + os << version.majorVersion << '.' + << version.minorVersion << '.' << version.patchNumber; if( !version.branchName.empty() ) { - os << "-" << version.branchName - << "." << version.buildNumber; + os << '-' << version.branchName + << '.' << version.buildNumber; } return os; } - Version libraryVersion( 1, 5, 4, "", 0 ); + Version libraryVersion( 1, 7, 2, "", 0 ); } @@ -7718,7 +8214,6 @@ namespace Catch #endif #ifdef CATCH_PLATFORM_WINDOWS -#include #else #include #endif @@ -7767,19 +8262,31 @@ namespace Catch { // #included from: catch_common.hpp #define TWOBLUECUBES_CATCH_COMMON_HPP_INCLUDED +#include +#include + namespace Catch { bool startsWith( std::string const& s, std::string const& prefix ) { - return s.size() >= prefix.size() && s.substr( 0, prefix.size() ) == prefix; + return s.size() >= prefix.size() && std::equal(prefix.begin(), prefix.end(), s.begin()); + } + bool startsWith( std::string const& s, char prefix ) { + return !s.empty() && s[0] == prefix; } bool endsWith( std::string const& s, std::string const& suffix ) { - return s.size() >= suffix.size() && s.substr( s.size()-suffix.size(), suffix.size() ) == suffix; + return s.size() >= suffix.size() && std::equal(suffix.rbegin(), suffix.rend(), s.rbegin()); + } + bool endsWith( std::string const& s, char suffix ) { + return !s.empty() && s[s.size()-1] == suffix; } bool contains( std::string const& s, std::string const& infix ) { return s.find( infix ) != std::string::npos; } + char toLowerCh(char c) { + return static_cast( std::tolower( c ) ); + } void toLowerInPlace( std::string& s ) { - std::transform( s.begin(), s.end(), s.begin(), ::tolower ); + std::transform( s.begin(), s.end(), s.begin(), toLowerCh ); } std::string toLower( std::string const& s ) { std::string lc = s; @@ -7791,7 +8298,7 @@ namespace Catch { std::string::size_type start = str.find_first_not_of( whitespaceChars ); std::string::size_type end = str.find_last_not_of( whitespaceChars ); - return start != std::string::npos ? str.substr( start, 1+end-start ) : ""; + return start != std::string::npos ? str.substr( start, 1+end-start ) : std::string(); } bool replaceInPlace( std::string& str, std::string const& replaceThis, std::string const& withThis ) { @@ -7814,29 +8321,25 @@ namespace Catch { {} std::ostream& operator << ( std::ostream& os, pluralise const& pluraliser ) { - os << pluraliser.m_count << " " << pluraliser.m_label; + os << pluraliser.m_count << ' ' << pluraliser.m_label; if( pluraliser.m_count != 1 ) - os << "s"; + os << 's'; return os; } - SourceLineInfo::SourceLineInfo() : line( 0 ){} + SourceLineInfo::SourceLineInfo() : file(""), line( 0 ){} SourceLineInfo::SourceLineInfo( char const* _file, std::size_t _line ) : file( _file ), line( _line ) {} - SourceLineInfo::SourceLineInfo( SourceLineInfo const& other ) - : file( other.file ), - line( other.line ) - {} bool SourceLineInfo::empty() const { - return file.empty(); + return file[0] == '\0'; } bool SourceLineInfo::operator == ( SourceLineInfo const& other ) const { - return line == other.line && file == other.file; + return line == other.line && (file == other.file || std::strcmp(file, other.file) == 0); } bool SourceLineInfo::operator < ( SourceLineInfo const& other ) const { - return line < other.line || ( line == other.line && file < other.file ); + return line < other.line || ( line == other.line && (std::strcmp(file, other.file) < 0)); } void seedRng( IConfig const& config ) { @@ -7849,16 +8352,16 @@ namespace Catch { std::ostream& operator << ( std::ostream& os, SourceLineInfo const& info ) { #ifndef __GNUG__ - os << info.file << "(" << info.line << ")"; + os << info.file << '(' << info.line << ')'; #else - os << info.file << ":" << info.line; + os << info.file << ':' << info.line; #endif return os; } void throwLogicError( std::string const& message, SourceLineInfo const& locationInfo ) { std::ostringstream oss; - oss << locationInfo << ": Internal Catch error: '" << message << "'"; + oss << locationInfo << ": Internal Catch error: '" << message << '\''; if( alwaysTrue() ) throw std::logic_error( oss.str() ); } @@ -7905,8 +8408,6 @@ namespace Catch { // #included from: catch_debugger.hpp #define TWOBLUECUBES_CATCH_DEBUGGER_HPP_INCLUDED -#include - #ifdef CATCH_PLATFORM_MAC #include @@ -7955,6 +8456,33 @@ namespace Catch { } } // namespace Catch +#elif defined(CATCH_PLATFORM_LINUX) + #include + #include + + namespace Catch{ + // The standard POSIX way of detecting a debugger is to attempt to + // ptrace() the process, but this needs to be done from a child and not + // this process itself to still allow attaching to this process later + // if wanted, so is rather heavy. Under Linux we have the PID of the + // "debugger" (which doesn't need to be gdb, of course, it could also + // be strace, for example) in /proc/$PID/status, so just get it from + // there instead. + bool isDebuggerActive(){ + std::ifstream in("/proc/self/status"); + for( std::string line; std::getline(in, line); ) { + static const int PREFIX_LEN = 11; + if( line.compare(0, PREFIX_LEN, "TracerPid:\t") == 0 ) { + // We're traced if the PID is not 0 and no other PID starts + // with 0 digit, so it's enough to check for just a single + // character. + return line.length() > PREFIX_LEN && line[PREFIX_LEN] != '0'; + } + } + + return false; + } + } // namespace Catch #elif defined(_MSC_VER) extern "C" __declspec(dllimport) int __stdcall IsDebuggerPresent(); namespace Catch { @@ -7976,7 +8504,7 @@ namespace Catch { #endif // Platform #ifdef CATCH_PLATFORM_WINDOWS - extern "C" __declspec(dllimport) void __stdcall OutputDebugStringA( const char* ); + namespace Catch { void writeToDebugConsole( std::string const& text ) { ::OutputDebugStringA( text.c_str() ); @@ -8052,7 +8580,7 @@ std::string toString( std::string const& value ) { } } } - return "\"" + s + "\""; + return '"' + s + '"'; } std::string toString( std::wstring const& value ) { @@ -8073,19 +8601,19 @@ std::string toString( char* const value ) { std::string toString( const wchar_t* const value ) { - return value ? Catch::toString( std::wstring(value) ) : std::string( "{null string}" ); + return value ? Catch::toString( std::wstring(value) ) : std::string( "{null string}" ); } std::string toString( wchar_t* const value ) { - return Catch::toString( static_cast( value ) ); + return Catch::toString( static_cast( value ) ); } std::string toString( int value ) { std::ostringstream oss; oss << value; if( value > Detail::hexThreshold ) - oss << " (0x" << std::hex << value << ")"; + oss << " (0x" << std::hex << value << ')'; return oss.str(); } @@ -8093,7 +8621,7 @@ std::string toString( unsigned long value ) { std::ostringstream oss; oss << value; if( value > Detail::hexThreshold ) - oss << " (0x" << std::hex << value << ")"; + oss << " (0x" << std::hex << value << ')'; return oss.str(); } @@ -8121,7 +8649,7 @@ std::string toString( const double value ) { return fpToString( value, 10 ); } std::string toString( const float value ) { - return fpToString( value, 5 ) + "f"; + return fpToString( value, 5 ) + 'f'; } std::string toString( bool value ) { @@ -8129,9 +8657,19 @@ std::string toString( bool value ) { } std::string toString( char value ) { - return value < ' ' - ? toString( static_cast( value ) ) - : Detail::makeString( value ); + if ( value == '\r' ) + return "'\\r'"; + if ( value == '\f' ) + return "'\\f'"; + if ( value == '\n' ) + return "'\\n'"; + if ( value == '\t' ) + return "'\\t'"; + if ( '\0' <= value && value < ' ' ) + return toString( static_cast( value ) ); + char chstr[] = "' '"; + chstr[1] = value; + return chstr; } std::string toString( signed char value ) { @@ -8147,14 +8685,14 @@ std::string toString( long long value ) { std::ostringstream oss; oss << value; if( value > Detail::hexThreshold ) - oss << " (0x" << std::hex << value << ")"; + oss << " (0x" << std::hex << value << ')'; return oss.str(); } std::string toString( unsigned long long value ) { std::ostringstream oss; oss << value; if( value > Detail::hexThreshold ) - oss << " (0x" << std::hex << value << ")"; + oss << " (0x" << std::hex << value << ')'; return oss.str(); } #endif @@ -8211,22 +8749,10 @@ namespace Catch { m_data.resultType = result ? ResultWas::Ok : ResultWas::ExpressionFailed; return *this; } - ResultBuilder& ResultBuilder::setLhs( std::string const& lhs ) { - m_exprComponents.lhs = lhs; - return *this; - } - ResultBuilder& ResultBuilder::setRhs( std::string const& rhs ) { - m_exprComponents.rhs = rhs; - return *this; - } - ResultBuilder& ResultBuilder::setOp( std::string const& op ) { - m_exprComponents.op = op; - return *this; - } - void ResultBuilder::endExpression() { - m_exprComponents.testFalse = isFalseTest( m_assertionInfo.resultDisposition ); - captureExpression(); + void ResultBuilder::endExpression( DecomposedExpression const& expr ) { + AssertionResult result = build( expr ); + handleResult( result ); } void ResultBuilder::useActiveException( ResultDisposition::Flags resultDisposition ) { @@ -8239,6 +8765,7 @@ namespace Catch { setResultType( resultType ); captureExpression(); } + void ResultBuilder::captureExpectedException( std::string const& expectedMessage ) { if( expectedMessage.empty() ) captureExpectedException( Matchers::Impl::Generic::AllOf() ); @@ -8248,7 +8775,7 @@ namespace Catch { void ResultBuilder::captureExpectedException( Matchers::Impl::Matcher const& matcher ) { - assert( m_exprComponents.testFalse == false ); + assert( !isFalseTest( m_assertionInfo.resultDisposition ) ); AssertionResultData data = m_data; data.resultType = ResultWas::Ok; data.reconstructedExpression = m_assertionInfo.capturedExpression; @@ -8266,6 +8793,7 @@ namespace Catch { AssertionResult result = build(); handleResult( result ); } + void ResultBuilder::handleResult( AssertionResult const& result ) { getResultCapture().assertionEnded( result ); @@ -8277,6 +8805,7 @@ namespace Catch { m_shouldThrow = true; } } + void ResultBuilder::react() { if( m_shouldThrow ) throw Catch::TestFailureException(); @@ -8287,43 +8816,32 @@ namespace Catch { AssertionResult ResultBuilder::build() const { - assert( m_data.resultType != ResultWas::Unknown ); + return build( *this ); + } + // CAVEAT: The returned AssertionResult stores a pointer to the argument expr, + // a temporary DecomposedExpression, which in turn holds references to + // operands, possibly temporary as well. + // It should immediately be passed to handleResult; if the expression + // needs to be reported, its string expansion must be composed before + // the temporaries are destroyed. + AssertionResult ResultBuilder::build( DecomposedExpression const& expr ) const + { + assert( m_data.resultType != ResultWas::Unknown ); AssertionResultData data = m_data; - // Flip bool results if testFalse is set - if( m_exprComponents.testFalse ) { - if( data.resultType == ResultWas::Ok ) - data.resultType = ResultWas::ExpressionFailed; - else if( data.resultType == ResultWas::ExpressionFailed ) - data.resultType = ResultWas::Ok; + // Flip bool results if FalseTest flag is set + if( isFalseTest( m_assertionInfo.resultDisposition ) ) { + data.negate( expr.isBinaryExpression() ); } data.message = m_stream.oss.str(); - data.reconstructedExpression = reconstructExpression(); - if( m_exprComponents.testFalse ) { - if( m_exprComponents.op == "" ) - data.reconstructedExpression = "!" + data.reconstructedExpression; - else - data.reconstructedExpression = "!(" + data.reconstructedExpression + ")"; - } + data.decomposedExpression = &expr; // for lazy reconstruction return AssertionResult( m_assertionInfo, data ); } - std::string ResultBuilder::reconstructExpression() const { - if( m_exprComponents.op == "" ) - return m_exprComponents.lhs.empty() ? m_assertionInfo.capturedExpression : m_exprComponents.op + m_exprComponents.lhs; - else if( m_exprComponents.op == "matches" ) - return m_exprComponents.lhs + " " + m_exprComponents.rhs; - else if( m_exprComponents.op != "!" ) { - if( m_exprComponents.lhs.size() + m_exprComponents.rhs.size() < 40 && - m_exprComponents.lhs.find("\n") == std::string::npos && - m_exprComponents.rhs.find("\n") == std::string::npos ) - return m_exprComponents.lhs + " " + m_exprComponents.op + " " + m_exprComponents.rhs; - else - return m_exprComponents.lhs + "\n" + m_exprComponents.op + "\n" + m_exprComponents.rhs; - } - else - return "{can't expand - use " + m_assertionInfo.macroName + "_FALSE( " + m_assertionInfo.capturedExpression.substr(1) + " ) instead of " + m_assertionInfo.macroName + "( " + m_assertionInfo.capturedExpression + " ) for better diagnostics}"; + + void ResultBuilder::reconstructExpression( std::string& dest ) const { + dest = m_assertionInfo.capturedExpression; } } // end namespace Catch @@ -8352,9 +8870,6 @@ namespace Catch { } // end namespace Catch -#include -#include - namespace Catch { TagAliasRegistry::~TagAliasRegistry() {} @@ -8384,7 +8899,7 @@ namespace Catch { void TagAliasRegistry::add( char const* alias, char const* tag, SourceLineInfo const& lineInfo ) { - if( !startsWith( alias, "[@" ) || !endsWith( alias, "]" ) ) { + if( !startsWith( alias, "[@" ) || !endsWith( alias, ']' ) ) { std::ostringstream oss; oss << "error: tag alias, \"" << alias << "\" is not of the form [@alias name].\n" << lineInfo; throw std::domain_error( oss.str().c_str() ); @@ -8392,7 +8907,7 @@ namespace Catch { if( !m_registry.insert( std::make_pair( alias, TagAlias( tag, lineInfo ) ) ).second ) { std::ostringstream oss; oss << "error: tag alias, \"" << alias << "\" already registered.\n" - << "\tFirst seen at " << find(alias)->lineInfo << "\n" + << "\tFirst seen at " << find(alias)->lineInfo << '\n' << "\tRedefined at " << lineInfo; throw std::domain_error( oss.str().c_str() ); } @@ -8660,12 +9175,12 @@ namespace Catch { struct BySectionInfo { BySectionInfo( SectionInfo const& other ) : m_other( other ) {} - BySectionInfo( BySectionInfo const& other ) : m_other( other.m_other ) {} + BySectionInfo( BySectionInfo const& other ) : m_other( other.m_other ) {} bool operator() ( Ptr const& node ) const { return node->stats.sectionInfo.lineInfo == m_other.lineInfo; } private: - void operator=( BySectionInfo const& ); + void operator=( BySectionInfo const& ); SectionInfo const& m_other; }; @@ -8721,6 +9236,12 @@ namespace Catch { assert( !m_sectionStack.empty() ); SectionNode& sectionNode = *m_sectionStack.back(); sectionNode.assertions.push_back( assertionStats ); + // AssertionResult holds a pointer to a temporary DecomposedExpression, + // which getExpandedExpression() calls to build the expression string. + // Our section stack copy of the assertionResult will likely outlive the + // temporary, so it must be expanded or discarded now to avoid calling + // a destroyed object later. + prepareExpandedExpression( sectionNode.assertions.back().assertionResult ); return true; } virtual void sectionEnded( SectionStats const& sectionStats ) CATCH_OVERRIDE { @@ -8755,6 +9276,13 @@ namespace Catch { virtual void skipTest( TestCaseInfo const& ) CATCH_OVERRIDE {} + virtual void prepareExpandedExpression( AssertionResult& result ) const { + if( result.isOk() ) + result.discardDecomposedExpression(); + else + result.expandDecomposedExpression(); + } + Ptr m_config; std::ostream& stream; std::vector m_assertions; @@ -8775,7 +9303,7 @@ namespace Catch { char const* getLineOfChars() { static char line[CATCH_CONFIG_CONSOLE_WIDTH] = {0}; if( !*line ) { - memset( line, C, CATCH_CONFIG_CONSOLE_WIDTH-1 ); + std::memset( line, C, CATCH_CONFIG_CONSOLE_WIDTH-1 ); line[CATCH_CONFIG_CONSOLE_WIDTH-1] = 0; } return line; @@ -8860,7 +9388,7 @@ namespace Catch { return new T( config ); } virtual std::string getDescription() const { - return ""; + return std::string(); } }; @@ -8927,9 +9455,13 @@ namespace Catch { break; default: - // Escape control chars - based on contribution by @espenalb in PR #465 - if ( ( c < '\x09' ) || ( c > '\x0D' && c < '\x20') || c=='\x7F' ) - os << "&#x" << std::uppercase << std::hex << static_cast( c ); + // Escape control chars - based on contribution by @espenalb in PR #465 and + // by @mrpi PR #588 + if ( ( c >= 0 && c < '\x09' ) || ( c > '\x0D' && c < '\x20') || c=='\x7F' ) { + // see http://stackoverflow.com/questions/404107/why-are-control-characters-illegal-in-xml-1-0 + os << "\\x" << std::uppercase << std::hex << std::setfill('0') << std::setw(2) + << static_cast( c ); + } else os << c; } @@ -8983,14 +9515,18 @@ namespace Catch { XmlWriter() : m_tagIsOpen( false ), m_needsNewline( false ), - m_os( &Catch::cout() ) - {} + m_os( Catch::cout() ) + { + writeDeclaration(); + } XmlWriter( std::ostream& os ) : m_tagIsOpen( false ), m_needsNewline( false ), - m_os( &os ) - {} + m_os( os ) + { + writeDeclaration(); + } ~XmlWriter() { while( !m_tags.empty() ) @@ -9000,7 +9536,7 @@ namespace Catch { XmlWriter& startElement( std::string const& name ) { ensureTagClosed(); newlineIfNecessary(); - stream() << m_indent << "<" << name; + m_os << m_indent << '<' << name; m_tags.push_back( name ); m_indent += " "; m_tagIsOpen = true; @@ -9017,24 +9553,25 @@ namespace Catch { newlineIfNecessary(); m_indent = m_indent.substr( 0, m_indent.size()-2 ); if( m_tagIsOpen ) { - stream() << "/>\n"; + m_os << "/>"; m_tagIsOpen = false; } else { - stream() << m_indent << "\n"; + m_os << m_indent << ""; } + m_os << std::endl; m_tags.pop_back(); return *this; } XmlWriter& writeAttribute( std::string const& name, std::string const& attribute ) { if( !name.empty() && !attribute.empty() ) - stream() << " " << name << "=\"" << XmlEncode( attribute, XmlEncode::ForAttributes ) << "\""; + m_os << ' ' << name << "=\"" << XmlEncode( attribute, XmlEncode::ForAttributes ) << '"'; return *this; } XmlWriter& writeAttribute( std::string const& name, bool attribute ) { - stream() << " " << name << "=\"" << ( attribute ? "true" : "false" ) << "\""; + m_os << ' ' << name << "=\"" << ( attribute ? "true" : "false" ) << '"'; return *this; } @@ -9050,8 +9587,8 @@ namespace Catch { bool tagWasOpen = m_tagIsOpen; ensureTagClosed(); if( tagWasOpen && indent ) - stream() << m_indent; - stream() << XmlEncode( text ); + m_os << m_indent; + m_os << XmlEncode( text ); m_needsNewline = true; } return *this; @@ -9059,39 +9596,39 @@ namespace Catch { XmlWriter& writeComment( std::string const& text ) { ensureTagClosed(); - stream() << m_indent << ""; + m_os << m_indent << ""; m_needsNewline = true; return *this; } + void writeStylesheetRef( std::string const& url ) { + m_os << "\n"; + } + XmlWriter& writeBlankLine() { ensureTagClosed(); - stream() << "\n"; + m_os << '\n'; return *this; } - void setStream( std::ostream& os ) { - m_os = &os; + void ensureTagClosed() { + if( m_tagIsOpen ) { + m_os << ">" << std::endl; + m_tagIsOpen = false; + } } private: XmlWriter( XmlWriter const& ); void operator=( XmlWriter const& ); - std::ostream& stream() { - return *m_os; - } - - void ensureTagClosed() { - if( m_tagIsOpen ) { - stream() << ">\n"; - m_tagIsOpen = false; - } + void writeDeclaration() { + m_os << "\n"; } void newlineIfNecessary() { if( m_needsNewline ) { - stream() << "\n"; + m_os << std::endl; m_needsNewline = false; } } @@ -9100,7 +9637,7 @@ namespace Catch { bool m_needsNewline; std::vector m_tags; std::string m_indent; - std::ostream* m_os; + std::ostream& m_os; }; } @@ -9124,6 +9661,7 @@ namespace Catch { public: XmlReporter( ReporterConfig const& _config ) : StreamingReporterBase( _config ), + m_xml(_config.stream()), m_sectionDepth( 0 ) { m_reporterPrefs.shouldRedirectStdOut = true; @@ -9135,6 +9673,10 @@ namespace Catch { return "Reports test results as an XML document"; } + virtual std::string getStylesheetRef() const { + return std::string(); + } + public: // StreamingReporterBase virtual void noMatchingTestCases( std::string const& s ) CATCH_OVERRIDE { @@ -9143,7 +9685,9 @@ namespace Catch { virtual void testRunStarting( TestRunInfo const& testInfo ) CATCH_OVERRIDE { StreamingReporterBase::testRunStarting( testInfo ); - m_xml.setStream( stream ); + std::string stylesheetRef = getStylesheetRef(); + if( !stylesheetRef.empty() ) + m_xml.writeStylesheetRef( stylesheetRef ); m_xml.startElement( "Catch" ); if( !m_config->name().empty() ) m_xml.writeAttribute( "name", m_config->name() ); @@ -9157,10 +9701,14 @@ namespace Catch { virtual void testCaseStarting( TestCaseInfo const& testInfo ) CATCH_OVERRIDE { StreamingReporterBase::testCaseStarting(testInfo); - m_xml.startElement( "TestCase" ).writeAttribute( "name", trim( testInfo.name ) ); + m_xml.startElement( "TestCase" ) + .writeAttribute( "name", trim( testInfo.name ) ) + .writeAttribute( "description", testInfo.description ) + .writeAttribute( "tags", testInfo.tagsAsString ); if ( m_config->showDurations() == ShowDurations::Always ) m_testCaseTimer.start(); + m_xml.ensureTagClosed(); } virtual void sectionStarting( SectionInfo const& sectionInfo ) CATCH_OVERRIDE { @@ -9169,6 +9717,7 @@ namespace Catch { m_xml.startElement( "Section" ) .writeAttribute( "name", trim( sectionInfo.name ) ) .writeAttribute( "description", sectionInfo.description ); + m_xml.ensureTagClosed(); } } @@ -9200,7 +9749,7 @@ namespace Catch { if( assertionResult.hasExpression() ) { m_xml.startElement( "Expression" ) .writeAttribute( "success", assertionResult.succeeded() ) - .writeAttribute( "type", assertionResult.getTestMacroName() ) + .writeAttribute( "type", assertionResult.getTestMacroName() ) .writeAttribute( "filename", assertionResult.getSourceInfo().file ) .writeAttribute( "line", assertionResult.getSourceInfo().line ); @@ -9219,7 +9768,7 @@ namespace Catch { .writeText( assertionResult.getMessage() ); break; case ResultWas::FatalErrorCondition: - m_xml.scopedElement( "Fatal Error Condition" ) + m_xml.scopedElement( "FatalErrorCondition" ) .writeAttribute( "filename", assertionResult.getSourceInfo().file ) .writeAttribute( "line", assertionResult.getSourceInfo().line ) .writeText( assertionResult.getMessage() ); @@ -9268,6 +9817,11 @@ namespace Catch { if ( m_config->showDurations() == ShowDurations::Always ) e.writeAttribute( "durationInSeconds", m_testCaseTimer.getElapsedSeconds() ); + if( !testCaseStats.stdOut.empty() ) + m_xml.scopedElement( "StdOut" ).writeText( trim( testCaseStats.stdOut ), false ); + if( !testCaseStats.stdErr.empty() ) + m_xml.scopedElement( "StdErr" ).writeText( trim( testCaseStats.stdErr ), false ); + m_xml.endElement(); } @@ -9307,6 +9861,35 @@ namespace Catch { namespace Catch { + namespace { + std::string getCurrentTimestamp() { + // Beware, this is not reentrant because of backward compatibility issues + // Also, UTC only, again because of backward compatibility (%z is C++11) + time_t rawtime; + std::time(&rawtime); + const size_t timeStampSize = sizeof("2017-01-16T17:06:45Z"); + +#ifdef _MSC_VER + std::tm timeInfo = {}; + gmtime_s(&timeInfo, &rawtime); +#else + std::tm* timeInfo; + timeInfo = std::gmtime(&rawtime); +#endif + + char timeStamp[timeStampSize]; + const char * const fmt = "%Y-%m-%dT%H:%M:%SZ"; + +#ifdef _MSC_VER + std::strftime(timeStamp, timeStampSize, fmt, &timeInfo); +#else + std::strftime(timeStamp, timeStampSize, fmt, timeInfo); +#endif + return std::string(timeStamp); + } + + } + class JunitReporter : public CumulativeReporterBase { public: JunitReporter( ReporterConfig const& _config ) @@ -9371,7 +9954,7 @@ namespace Catch { xml.writeAttribute( "time", "" ); else xml.writeAttribute( "time", suiteTime ); - xml.writeAttribute( "timestamp", "tbd" ); // !TBD + xml.writeAttribute( "timestamp", getCurrentTimestamp() ); // Write test cases for( TestGroupNode::ChildNodes::const_iterator @@ -9406,7 +9989,7 @@ namespace Catch { SectionNode const& sectionNode ) { std::string name = trim( sectionNode.stats.sectionInfo.name ); if( !rootName.empty() ) - name = rootName + "/" + name; + name = rootName + '/' + name; if( !sectionNode.assertions.empty() || !sectionNode.stdOut.empty() || @@ -9484,14 +10067,14 @@ namespace Catch { std::ostringstream oss; if( !result.getMessage().empty() ) - oss << result.getMessage() << "\n"; + oss << result.getMessage() << '\n'; for( std::vector::const_iterator it = stats.infoMessages.begin(), itEnd = stats.infoMessages.end(); it != itEnd; ++it ) if( it->type == ResultWas::Info ) - oss << it->message << "\n"; + oss << it->message << '\n'; oss << "at " << result.getSourceInfo(); xml.writeText( oss.str(), false ); @@ -9526,7 +10109,7 @@ namespace Catch { } virtual void noMatchingTestCases( std::string const& spec ) CATCH_OVERRIDE { - stream << "No test cases matched '" << spec << "'" << std::endl; + stream << "No test cases matched '" << spec << '\'' << std::endl; } virtual void assertionStarting( AssertionInfo const& ) CATCH_OVERRIDE { @@ -9568,12 +10151,12 @@ namespace Catch { } if( m_headerPrinted ) { if( m_config->showDurations() == ShowDurations::Always ) - stream << "Completed in " << _sectionStats.durationInSeconds << "s" << std::endl; + stream << "Completed in " << _sectionStats.durationInSeconds << 's' << std::endl; m_headerPrinted = false; } else { if( m_config->showDurations() == ShowDurations::Always ) - stream << _sectionStats.sectionInfo.name << " completed in " << _sectionStats.durationInSeconds << "s" << std::endl; + stream << _sectionStats.sectionInfo.name << " completed in " << _sectionStats.durationInSeconds << 's' << std::endl; } StreamingReporterBase::sectionEnded( _sectionStats ); } @@ -9587,7 +10170,7 @@ namespace Catch { printSummaryDivider(); stream << "Summary for group '" << _testGroupStats.groupInfo.name << "':\n"; printTotals( _testGroupStats.totals ); - stream << "\n" << std::endl; + stream << '\n' << std::endl; } StreamingReporterBase::testGroupEnded( _testGroupStats ); } @@ -9679,13 +10262,13 @@ namespace Catch { printSourceInfo(); if( stats.totals.assertions.total() > 0 ) { if( result.isOk() ) - stream << "\n"; + stream << '\n'; printResultType(); printOriginalExpression(); printReconstructedExpression(); } else { - stream << "\n"; + stream << '\n'; } printMessage(); } @@ -9702,25 +10285,25 @@ namespace Catch { Colour colourGuard( Colour::OriginalExpression ); stream << " "; stream << result.getExpressionInMacro(); - stream << "\n"; + stream << '\n'; } } void printReconstructedExpression() const { if( result.hasExpandedExpression() ) { stream << "with expansion:\n"; Colour colourGuard( Colour::ReconstructedExpression ); - stream << Text( result.getExpandedExpression(), TextAttributes().setIndent(2) ) << "\n"; + stream << Text( result.getExpandedExpression(), TextAttributes().setIndent(2) ) << '\n'; } } void printMessage() const { if( !messageLabel.empty() ) - stream << messageLabel << ":" << "\n"; + stream << messageLabel << ':' << '\n'; for( std::vector::const_iterator it = messages.begin(), itEnd = messages.end(); it != itEnd; ++it ) { // If this assertion is a warning ignore any INFO messages if( printInfoMessages || it->type != ResultWas::Info ) - stream << Text( it->message, TextAttributes().setIndent(2) ) << "\n"; + stream << Text( it->message, TextAttributes().setIndent(2) ) << '\n'; } } void printSourceInfo() const { @@ -9752,7 +10335,7 @@ namespace Catch { } } void lazyPrintRunInfo() { - stream << "\n" << getLineOfChars<'~'>() << "\n"; + stream << '\n' << getLineOfChars<'~'>() << '\n'; Colour colour( Colour::SecondaryText ); stream << currentTestRunInfo->name << " is a Catch v" << libraryVersion << " host application.\n" @@ -9783,22 +10366,22 @@ namespace Catch { printHeaderString( it->name, 2 ); } - SourceLineInfo lineInfo = m_sectionStack.front().lineInfo; + SourceLineInfo lineInfo = m_sectionStack.back().lineInfo; if( !lineInfo.empty() ){ - stream << getLineOfChars<'-'>() << "\n"; + stream << getLineOfChars<'-'>() << '\n'; Colour colourGuard( Colour::FileName ); - stream << lineInfo << "\n"; + stream << lineInfo << '\n'; } - stream << getLineOfChars<'.'>() << "\n" << std::endl; + stream << getLineOfChars<'.'>() << '\n' << std::endl; } void printClosedHeader( std::string const& _name ) { printOpenHeader( _name ); - stream << getLineOfChars<'.'>() << "\n"; + stream << getLineOfChars<'.'>() << '\n'; } void printOpenHeader( std::string const& _name ) { - stream << getLineOfChars<'-'>() << "\n"; + stream << getLineOfChars<'-'>() << '\n'; { Colour colourGuard( Colour::Headers ); printHeaderString( _name ); @@ -9815,7 +10398,7 @@ namespace Catch { i = 0; stream << Text( _string, TextAttributes() .setIndent( indent+i) - .setInitialIndent( indent ) ) << "\n"; + .setInitialIndent( indent ) ) << '\n'; } struct SummaryColumn { @@ -9830,9 +10413,9 @@ namespace Catch { std::string row = oss.str(); for( std::vector::iterator it = rows.begin(); it != rows.end(); ++it ) { while( it->size() < row.size() ) - *it = " " + *it; + *it = ' ' + *it; while( it->size() > row.size() ) - row = " " + row; + row = ' ' + row; } rows.push_back( row ); return *this; @@ -9852,8 +10435,8 @@ namespace Catch { stream << Colour( Colour::ResultSuccess ) << "All tests passed"; stream << " (" << pluralise( totals.assertions.passed, "assertion" ) << " in " - << pluralise( totals.testCases.passed, "test case" ) << ")" - << "\n"; + << pluralise( totals.testCases.passed, "test case" ) << ')' + << '\n'; } else { @@ -9888,10 +10471,10 @@ namespace Catch { else if( value != "0" ) { stream << Colour( Colour::LightGrey ) << " | "; stream << Colour( it->colour ) - << value << " " << it->label; + << value << ' ' << it->label; } } - stream << "\n"; + stream << '\n'; } static std::size_t makeRatio( std::size_t number, std::size_t total ) { @@ -9927,10 +10510,10 @@ namespace Catch { else { stream << Colour( Colour::Warning ) << std::string( CATCH_CONFIG_CONSOLE_WIDTH-1, '=' ); } - stream << "\n"; + stream << '\n'; } void printSummaryDivider() { - stream << getLineOfChars<'-'>() << "\n"; + stream << getLineOfChars<'-'>() << '\n'; } private: @@ -9965,7 +10548,7 @@ namespace Catch { } virtual void noMatchingTestCases( std::string const& spec ) { - stream << "No test cases matched '" << spec << "'" << std::endl; + stream << "No test cases matched '" << spec << '\'' << std::endl; } virtual void assertionStarting( AssertionInfo const& ) { @@ -9992,7 +10575,7 @@ namespace Catch { virtual void testRunEnded( TestRunStats const& _testRunStats ) { printTotals( _testRunStats.totals ); - stream << "\n" << std::endl; + stream << '\n' << std::endl; StreamingReporterBase::testRunEnded( _testRunStats ); } @@ -10092,26 +10675,26 @@ namespace Catch { void printSourceInfo() const { Colour colourGuard( Colour::FileName ); - stream << result.getSourceInfo() << ":"; + stream << result.getSourceInfo() << ':'; } void printResultType( Colour::Code colour, std::string passOrFail ) const { if( !passOrFail.empty() ) { { Colour colourGuard( colour ); - stream << " " << passOrFail; + stream << ' ' << passOrFail; } - stream << ":"; + stream << ':'; } } void printIssue( std::string issue ) const { - stream << " " << issue; + stream << ' ' << issue; } void printExpressionWas() { if( result.hasExpression() ) { - stream << ";"; + stream << ';'; { Colour colour( dimColour() ); stream << " expression was:"; @@ -10122,7 +10705,7 @@ namespace Catch { void printOriginalExpression() const { if( result.hasExpression() ) { - stream << " " << result.getExpression(); + stream << ' ' << result.getExpression(); } } @@ -10138,7 +10721,7 @@ namespace Catch { void printMessage() { if ( itMessage != messages.end() ) { - stream << " '" << itMessage->message << "'"; + stream << " '" << itMessage->message << '\''; ++itMessage; } } @@ -10153,13 +10736,13 @@ namespace Catch { { Colour colourGuard( colour ); - stream << " with " << pluralise( N, "message" ) << ":"; + stream << " with " << pluralise( N, "message" ) << ':'; } for(; itMessage != itEnd; ) { // If this assertion is a warning ignore any INFO messages if( printInfoMessages || itMessage->type != ResultWas::Info ) { - stream << " '" << itMessage->message << "'"; + stream << " '" << itMessage->message << '\''; if ( ++itMessage != itEnd ) { Colour colourGuard( dimColour() ); stream << " and"; @@ -10185,7 +10768,7 @@ namespace Catch { // - green: Passed [both/all] N tests cases with M assertions. std::string bothOrAll( std::size_t count ) const { - return count == 1 ? "" : count == 2 ? "both " : "all " ; + return count == 1 ? std::string() : count == 2 ? "both " : "all " ; } void printTotals( const Totals& totals ) const { @@ -10196,12 +10779,12 @@ namespace Catch { Colour colour( Colour::ResultError ); const std::string qualify_assertions_failed = totals.assertions.failed == totals.assertions.total() ? - bothOrAll( totals.assertions.failed ) : ""; + bothOrAll( totals.assertions.failed ) : std::string(); stream << "Failed " << bothOrAll( totals.testCases.failed ) << pluralise( totals.testCases.failed, "test case" ) << ", " "failed " << qualify_assertions_failed << - pluralise( totals.assertions.failed, "assertion" ) << "."; + pluralise( totals.assertions.failed, "assertion" ) << '.'; } else if( totals.assertions.total() == 0 ) { stream << @@ -10213,14 +10796,14 @@ namespace Catch { Colour colour( Colour::ResultError ); stream << "Failed " << pluralise( totals.testCases.failed, "test case" ) << ", " - "failed " << pluralise( totals.assertions.failed, "assertion" ) << "."; + "failed " << pluralise( totals.assertions.failed, "assertion" ) << '.'; } else { Colour colour( Colour::ResultSuccess ); stream << "Passed " << bothOrAll( totals.testCases.passed ) << pluralise( totals.testCases.passed, "test case" ) << - " with " << pluralise( totals.assertions.passed, "assertion" ) << "."; + " with " << pluralise( totals.assertions.passed, "assertion" ) << '.'; } } }; @@ -10306,7 +10889,8 @@ namespace Catch { // Standard C/C++ main entry point int main (int argc, char * argv[]) { - return Catch::Session().run( argc, argv ); + int result = Catch::Session().run( argc, argv ); + return ( result < 0xff ? result : 0xff ); } #else // __OBJC__ @@ -10324,7 +10908,7 @@ int main (int argc, char * const argv[]) { [pool drain]; #endif - return result; + return ( result < 0xff ? result : 0xff ); } #endif // __OBJC__ @@ -10354,12 +10938,12 @@ int main (int argc, char * const argv[]) { #define CATCH_CHECKED_ELSE( expr ) INTERNAL_CATCH_ELSE( expr, Catch::ResultDisposition::ContinueOnFailure, "CATCH_CHECKED_ELSE" ) #define CATCH_CHECK_NOFAIL( expr ) INTERNAL_CATCH_TEST( expr, Catch::ResultDisposition::ContinueOnFailure | Catch::ResultDisposition::SuppressFail, "CATCH_CHECK_NOFAIL" ) -#define CATCH_CHECK_THROWS( expr ) INTERNAL_CATCH_THROWS( expr, Catch::ResultDisposition::ContinueOnFailure, "CATCH_CHECK_THROWS" ) +#define CATCH_CHECK_THROWS( expr ) INTERNAL_CATCH_THROWS( expr, Catch::ResultDisposition::ContinueOnFailure, "", "CATCH_CHECK_THROWS" ) #define CATCH_CHECK_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( expr, exceptionType, Catch::ResultDisposition::ContinueOnFailure, "CATCH_CHECK_THROWS_AS" ) #define CATCH_CHECK_THROWS_WITH( expr, matcher ) INTERNAL_CATCH_THROWS( expr, Catch::ResultDisposition::ContinueOnFailure, matcher, "CATCH_CHECK_THROWS_WITH" ) #define CATCH_CHECK_NOTHROW( expr ) INTERNAL_CATCH_NO_THROW( expr, Catch::ResultDisposition::ContinueOnFailure, "CATCH_CHECK_NOTHROW" ) -#define CHECK_THAT( arg, matcher ) INTERNAL_CHECK_THAT( arg, matcher, Catch::ResultDisposition::ContinueOnFailure, "CATCH_CHECK_THAT" ) +#define CATCH_CHECK_THAT( arg, matcher ) INTERNAL_CHECK_THAT( arg, matcher, Catch::ResultDisposition::ContinueOnFailure, "CATCH_CHECK_THAT" ) #define CATCH_REQUIRE_THAT( arg, matcher ) INTERNAL_CHECK_THAT( arg, matcher, Catch::ResultDisposition::Normal, "CATCH_REQUIRE_THAT" ) #define CATCH_INFO( msg ) INTERNAL_CATCH_INFO( msg, "CATCH_INFO" ) diff --git a/3rdparty/bx/LICENSE b/3rdparty/bx/LICENSE index c80afb7..f184463 100644 --- a/3rdparty/bx/LICENSE +++ b/3rdparty/bx/LICENSE @@ -1,4 +1,4 @@ -Copyright 2010-2016 Branimir Karadzic. All rights reserved. +Copyright 2010-2017 Branimir Karadzic. All rights reserved. https://github.com/bkaradzic/bx diff --git a/3rdparty/bx/README.md b/3rdparty/bx/README.md index 0e17833..3da618f 100644 --- a/3rdparty/bx/README.md +++ b/3rdparty/bx/README.md @@ -19,7 +19,7 @@ https://github.com/bkaradzic/bx [License (BSD 2-clause)](https://github.com/bkaradzic/bx/blob/master/LICENSE) ----------------------------------------------------------------------------- - Copyright 2010-2016 Branimir Karadzic. All rights reserved. + 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 6135632..77646a5 100644 --- a/3rdparty/bx/include/bx/allocator.h +++ b/3rdparty/bx/include/bx/allocator.h @@ -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 */ @@ -8,8 +8,6 @@ #include "bx.h" -#include -#include //::memmove #include #if BX_CONFIG_ALLOCATOR_DEBUG @@ -42,23 +40,14 @@ namespace bx { - /// Aligns pointer to nearest next aligned address. _align must be power of two. - inline void* alignPtr(void* _ptr, size_t _extra, size_t _align = BX_CONFIG_ALLOCATOR_NATURAL_ALIGNMENT) - { - union { void* ptr; size_t addr; } un; - un.ptr = _ptr; - size_t unaligned = un.addr + _extra; // space for header - size_t mask = _align-1; - size_t aligned = BX_ALIGN_MASK(unaligned, mask); - un.addr = aligned; - return un.ptr; - } - + /// Abstract allocator interface. + /// struct BX_NO_VTABLE AllocatorI { + /// virtual ~AllocatorI() = 0; - /// Allocated, resizes memory block or frees memory. + /// Allocates, resizes memory block, or frees memory. /// /// @param[in] _ptr If _ptr is NULL new block will be allocated. /// @param[in] _size If _ptr is set, and _size is 0, memory will be freed. @@ -68,79 +57,84 @@ namespace bx virtual void* realloc(void* _ptr, size_t _size, size_t _align, const char* _file, uint32_t _line) = 0; }; - inline AllocatorI::~AllocatorI() - { - } + /// Check if pointer is aligned. _align must be power of two. + bool isAligned(const void* _ptr, size_t _align); - inline void* alloc(AllocatorI* _allocator, size_t _size, size_t _align = 0, const char* _file = NULL, uint32_t _line = 0) - { - return _allocator->realloc(NULL, _size, _align, _file, _line); - } + /// Aligns pointer to nearest next aligned address. _align must be power of two. + void* alignPtr( + void* _ptr + , size_t _extra + , size_t _align = BX_CONFIG_ALLOCATOR_NATURAL_ALIGNMENT + ); - inline void free(AllocatorI* _allocator, void* _ptr, size_t _align = 0, const char* _file = NULL, uint32_t _line = 0) - { - _allocator->realloc(_ptr, 0, _align, _file, _line); - } + /// Allocate memory. + void* alloc( + AllocatorI* _allocator + , size_t _size + , size_t _align = 0 + , const char* _file = NULL + , uint32_t _line = 0 + ); - inline void* realloc(AllocatorI* _allocator, void* _ptr, size_t _size, size_t _align = 0, const char* _file = NULL, uint32_t _line = 0) - { - return _allocator->realloc(_ptr, _size, _align, _file, _line); - } + /// Free memory. + void free( + AllocatorI* _allocator + , void* _ptr + , size_t _align = 0 + , const char* _file = NULL + , uint32_t _line = 0 + ); - static inline void* alignedAlloc(AllocatorI* _allocator, size_t _size, size_t _align, const char* _file = NULL, uint32_t _line = 0) - { - size_t total = _size + _align; - uint8_t* ptr = (uint8_t*)alloc(_allocator, total, 0, _file, _line); - uint8_t* aligned = (uint8_t*)alignPtr(ptr, sizeof(uint32_t), _align); - uint32_t* header = (uint32_t*)aligned - 1; - *header = uint32_t(aligned - ptr); - return aligned; - } + /// Resize memory block. + void* realloc( + AllocatorI* _allocator + , void* _ptr + , size_t _size + , size_t _align = 0 + , const char* _file = NULL + , uint32_t _line = 0 + ); - static inline void alignedFree(AllocatorI* _allocator, void* _ptr, size_t /*_align*/, const char* _file = NULL, uint32_t _line = 0) - { - uint8_t* aligned = (uint8_t*)_ptr; - uint32_t* header = (uint32_t*)aligned - 1; - uint8_t* ptr = aligned - *header; - free(_allocator, ptr, 0, _file, _line); - } + /// Allocate memory with specific alignment. + void* alignedAlloc( + AllocatorI* _allocator + , size_t _size + , size_t _align + , const char* _file = NULL + , uint32_t _line = 0 + ); - static inline void* alignedRealloc(AllocatorI* _allocator, void* _ptr, size_t _size, size_t _align, const char* _file = NULL, uint32_t _line = 0) - { - if (NULL == _ptr) - { - return alignedAlloc(_allocator, _size, _align, _file, _line); - } + /// Free memory that was allocated with aligned allocator. + void alignedFree( + AllocatorI* _allocator + , void* _ptr + , size_t /*_align*/ + , const char* _file = NULL + , uint32_t _line = 0 + ); - uint8_t* aligned = (uint8_t*)_ptr; - uint32_t offset = *( (uint32_t*)aligned - 1); - uint8_t* ptr = aligned - offset; - size_t total = _size + _align; - ptr = (uint8_t*)realloc(_allocator, ptr, total, 0, _file, _line); - uint8_t* newAligned = (uint8_t*)alignPtr(ptr, sizeof(uint32_t), _align); - - if (newAligned == aligned) - { - return aligned; - } - - aligned = ptr + offset; - ::memmove(newAligned, aligned, _size); - uint32_t* header = (uint32_t*)newAligned - 1; - *header = uint32_t(newAligned - ptr); - return newAligned; - } + /// Resize memory block that was allocated with aligned allocator. + void* alignedRealloc( + AllocatorI* _allocator + , void* _ptr + , size_t _size + , size_t _align + , const char* _file = NULL + , uint32_t _line = 0 + ); + /// Delete object with specific allocator. template - inline void deleteObject(AllocatorI* _allocator, ObjectT* _object, size_t _align = 0, const char* _file = NULL, uint32_t _line = 0) - { - if (NULL != _object) - { - _object->~ObjectT(); - free(_allocator, _object, _align, _file, _line); - } - } + void deleteObject( + AllocatorI* _allocator + , ObjectT* _object + , size_t _align = 0 + , const char* _file = NULL + , uint32_t _line = 0 + ); } // namespace bx +#include "inline/allocator.inl" + #endif // BX_ALLOCATOR_H_HEADER_GUARD diff --git a/3rdparty/bx/include/bx/bx.h b/3rdparty/bx/include/bx/bx.h index 35c0207..838c429 100644 --- a/3rdparty/bx/include/bx/bx.h +++ b/3rdparty/bx/include/bx/bx.h @@ -1,84 +1,73 @@ /* - * 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_H_HEADER_GUARD #define BX_H_HEADER_GUARD +#include // alloca +#include // va_list #include // uint32_t #include // size_t -#include // memcpy +#include // ptrdiff_t +#include "platform.h" #include "config.h" #include "macros.h" -namespace bx -{ - // http://cnicholson.net/2011/01/stupid-c-tricks-a-better-sizeof_array/ - template char (&COUNTOF_REQUIRES_ARRAY_ARGUMENT(const T(&)[N]) )[N]; +/// #define BX_COUNTOF(_x) sizeof(bx::COUNTOF_REQUIRES_ARRAY_ARGUMENT(_x) ) - // Template for avoiding MSVC: C4127: conditional expression is constant - template - inline bool isEnabled() - { - return true; - } - - template<> - inline bool isEnabled() - { - return false; - } -#define BX_ENABLED(_x) bx::isEnabled() - - inline bool ignoreC4127(bool _x) - { - return _x; - } +/// #define BX_IGNORE_C4127(_x) bx::ignoreC4127(!!(_x) ) +/// +#define BX_ENABLED(_x) bx::isEnabled() + +namespace bx +{ + /// Template for avoiding MSVC: C4127: conditional expression is constant + template + bool isEnabled(); + + /// + bool ignoreC4127(bool _x); + + /// template - inline void xchg(Ty& _a, Ty& _b) - { - Ty tmp = _a; _a = _b; _b = tmp; - } - - /// Check if pointer is aligned. _align must be power of two. - inline bool isPtrAligned(const void* _ptr, size_t _align) - { - union { const void* ptr; size_t addr; } un; - un.ptr = _ptr; - return 0 == (un.addr & (_align-1) ); - } - - /// Scatter/gather memcpy. - inline void memCopy(void* _dst, const void* _src, uint32_t _size, uint32_t _num, uint32_t _srcPitch, uint32_t _dstPitch) - { - const uint8_t* src = (const uint8_t*)_src; - uint8_t* dst = (uint8_t*)_dst; - - for (uint32_t ii = 0; ii < _num; ++ii) - { - memcpy(dst, src, _size); - src += _srcPitch; - dst += _dstPitch; - } - } + void xchg(Ty& _a, Ty& _b); /// - inline void gather(void* _dst, const void* _src, uint32_t _size, uint32_t _num, uint32_t _srcPitch) - { - memCopy(_dst, _src, _size, _num, _srcPitch, _size); - } + void xchg(void* _a, void* _b, size_t _numBytes); + + // http://cnicholson.net/2011/01/stupid-c-tricks-a-better-sizeof_array/ + template + char (&COUNTOF_REQUIRES_ARRAY_ARGUMENT(const T(&)[N]) )[N]; /// - inline void scatter(void* _dst, const void* _src, uint32_t _size, uint32_t _num, uint32_t _dstPitch) - { - memCopy(_dst, _src, _size, _num, _size, _dstPitch); - } + void memCopy(void* _dst, const void* _src, size_t _numBytes); + + /// + void memCopy(void* _dst, const void* _src, uint32_t _size, uint32_t _num, uint32_t _srcPitch, uint32_t _dstPitch); + + /// + void gather(void* _dst, const void* _src, uint32_t _size, uint32_t _num, uint32_t _srcPitch); + + /// + void scatter(void* _dst, const void* _src, uint32_t _size, uint32_t _num, uint32_t _dstPitch); + + /// + void memMove(void* _dst, const void* _src, size_t _numBytes); + + /// + void memSet(void* _dst, uint8_t _ch, size_t _numBytes); + + /// + int32_t memCmp(const void* _lhs, const void* _rhs, size_t _numBytes); } // namespace bx +#include "inline/bx.inl" + #endif // BX_H_HEADER_GUARD diff --git a/3rdparty/bx/include/bx/commandline.h b/3rdparty/bx/include/bx/commandline.h index d35843f..9b9a397 100644 --- a/3rdparty/bx/include/bx/commandline.h +++ b/3rdparty/bx/include/bx/commandline.h @@ -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 */ @@ -7,197 +7,64 @@ #define BX_COMMANDLINE_H_HEADER_GUARD #include "bx.h" -#include "string.h" namespace bx { + /// Reference: + /// http://msdn.microsoft.com/en-us/library/a1y7w461.aspx + const char* tokenizeCommandLine(const char* _commandLine, char* _buffer, uint32_t& _bufferSize, int32_t& _argc, char* _argv[], int32_t _maxArgvs, char _term = '\0'); + + /// class CommandLine { public: - CommandLine(int _argc, char const* const* _argv) - : m_argc(_argc) - , m_argv(_argv) - { - } + /// + CommandLine(int32_t _argc, char const* const* _argv); - const char* findOption(const char* _long, const char* _default) const - { - const char* result = find(0, '\0', _long, 1); - return result == NULL ? _default : result; - } + /// + const char* findOption(const char* _long, const char* _default) const; - const char* findOption(const char _short, const char* _long, const char* _default) const - { - const char* result = find(0, _short, _long, 1); - return result == NULL ? _default : result; - } + /// + const char* findOption(const char _short, const char* _long, const char* _default) const; - const char* findOption(const char* _long, int _numParams = 1) const - { - const char* result = find(0, '\0', _long, _numParams); - return result; - } + /// + const char* findOption(const char* _long, int32_t _numParams = 1) const; - const char* findOption(const char _short, const char* _long = NULL, int _numParams = 1) const - { - const char* result = find(0, _short, _long, _numParams); - return result; - } + /// + const char* findOption(const char _short, const char* _long = NULL, int32_t _numParams = 1) const; - const char* findOption(int _skip, const char _short, const char* _long = NULL, int _numParams = 1) const - { - const char* result = find(_skip, _short, _long, _numParams); - return result; - } + /// + const char* findOption(int32_t _skip, const char _short, const char* _long = NULL, int32_t _numParams = 1) const; - bool hasArg(const char _short, const char* _long = NULL) const - { - const char* arg = findOption(_short, _long, 0); - return NULL != arg; - } + /// + bool hasArg(const char _short, const char* _long = NULL) const; - bool hasArg(const char* _long) const - { - const char* arg = findOption('\0', _long, 0); - return NULL != arg; - } + /// + bool hasArg(const char* _long) const; - bool hasArg(const char*& _value, const char _short, const char* _long = NULL) const - { - const char* arg = findOption(_short, _long, 1); - _value = arg; - return NULL != arg; - } + /// + bool hasArg(const char*& _value, const char _short, const char* _long = NULL) const; - bool hasArg(int& _value, const char _short, const char* _long = NULL) const - { - const char* arg = findOption(_short, _long, 1); - if (NULL != arg) - { - _value = atoi(arg); - return true; - } + /// + bool hasArg(int32_t& _value, const char _short, const char* _long = NULL) const; - return false; - } + /// + bool hasArg(uint32_t& _value, const char _short, const char* _long = NULL) const; - bool hasArg(unsigned int& _value, const char _short, const char* _long = NULL) const - { - const char* arg = findOption(_short, _long, 1); - if (NULL != arg) - { - _value = atoi(arg); - return true; - } + /// + bool hasArg(float& _value, const char _short, const char* _long = NULL) const; - return false; - } + /// + bool hasArg(double& _value, const char _short, const char* _long = NULL) const; - bool hasArg(float& _value, const char _short, const char* _long = NULL) const - { - const char* arg = findOption(_short, _long, 1); - if (NULL != arg) - { - _value = float(atof(arg)); - return true; - } - - return false; - } - - bool hasArg(double& _value, const char _short, const char* _long = NULL) const - { - const char* arg = findOption(_short, _long, 1); - if (NULL != arg) - { - _value = atof(arg); - return true; - } - - return false; - } - - bool hasArg(bool& _value, const char _short, const char* _long = NULL) const - { - const char* arg = findOption(_short, _long, 1); - if (NULL != arg) - { - if ('0' == *arg || (0 == stricmp(arg, "false") ) ) - { - _value = false; - } - else if ('0' != *arg || (0 == stricmp(arg, "true") ) ) - { - _value = true; - } - - return true; - } - - return false; - } + /// + bool hasArg(bool& _value, const char _short, const char* _long = NULL) const; private: - const char* find(int _skip, const char _short, const char* _long, int _numParams) const - { - for (int ii = 0; ii < m_argc; ++ii) - { - const char* arg = m_argv[ii]; - if ('-' == *arg) - { - ++arg; - if (_short == *arg) - { - if (1 == strlen(arg) ) - { - if (0 == _skip) - { - if (0 == _numParams) - { - return ""; - } - else if (ii+_numParams < m_argc - && '-' != *m_argv[ii+1] ) - { - return m_argv[ii+1]; - } + /// + const char* find(int32_t _skip, const char _short, const char* _long, int32_t _numParams) const; - return NULL; - } - - --_skip; - ii += _numParams; - } - } - else if (NULL != _long - && '-' == *arg - && 0 == stricmp(arg+1, _long) ) - { - if (0 == _skip) - { - if (0 == _numParams) - { - return ""; - } - else if (ii+_numParams < m_argc - && '-' != *m_argv[ii+1] ) - { - return m_argv[ii+1]; - } - - return NULL; - } - - --_skip; - ii += _numParams; - } - } - } - - return NULL; - } - - int m_argc; + int32_t m_argc; char const* const* m_argv; }; diff --git a/3rdparty/bx/include/bx/config.h b/3rdparty/bx/include/bx/config.h index 43c08ec..2f7264f 100644 --- a/3rdparty/bx/include/bx/config.h +++ b/3rdparty/bx/include/bx/config.h @@ -1,12 +1,12 @@ /* - * 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_CONFIG_H_HEADER_GUARD #define BX_CONFIG_H_HEADER_GUARD -#include "platform.h" +#include "bx.h" #ifndef BX_CONFIG_ALLOCATOR_DEBUG # define BX_CONFIG_ALLOCATOR_DEBUG 0 @@ -16,30 +16,29 @@ # define BX_CONFIG_ALLOCATOR_CRT 1 #endif // BX_CONFIG_ALLOCATOR_CRT -#ifndef BX_CONFIG_SPSCQUEUE_USE_MUTEX -# define BX_CONFIG_SPSCQUEUE_USE_MUTEX 0 -#endif // BX_CONFIG_SPSCQUEUE_USE_MUTEX - #ifndef BX_CONFIG_CRT_FILE_READER_WRITER -# define BX_CONFIG_CRT_FILE_READER_WRITER !(BX_PLATFORM_NACL) +# 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 \ +# define BX_CONFIG_CRT_PROCESS !(0 \ + || BX_CRT_NONE \ || BX_PLATFORM_EMSCRIPTEN \ - || BX_PLATFORM_NACL \ - || BX_PLATFORM_PS4 \ - || BX_PLATFORM_WINRT \ - || BX_PLATFORM_XBOXONE \ + || BX_PLATFORM_NACL \ + || BX_PLATFORM_PS4 \ + || BX_PLATFORM_WINRT \ + || BX_PLATFORM_XBOXONE \ ) #endif // BX_CONFIG_CRT_PROCESS -#ifndef BX_CONFIG_SEMAPHORE_PTHREAD -# define BX_CONFIG_SEMAPHORE_PTHREAD (BX_PLATFORM_OSX || BX_PLATFORM_IOS) -#endif // BX_CONFIG_SEMAPHORE_PTHREAD - #ifndef BX_CONFIG_SUPPORTS_THREADING -# define BX_CONFIG_SUPPORTS_THREADING !(BX_PLATFORM_EMSCRIPTEN) +# define BX_CONFIG_SUPPORTS_THREADING !(0 \ + || BX_PLATFORM_EMSCRIPTEN \ + || BX_CRT_NONE \ + ) #endif // BX_CONFIG_SUPPORTS_THREADING #endif // BX_CONFIG_H_HEADER_GUARD diff --git a/3rdparty/bx/include/bx/cpu.h b/3rdparty/bx/include/bx/cpu.h index a4d5c65..91ab437 100644 --- a/3rdparty/bx/include/bx/cpu.h +++ b/3rdparty/bx/include/bx/cpu.h @@ -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 */ diff --git a/3rdparty/bx/include/bx/crtimpl.h b/3rdparty/bx/include/bx/crtimpl.h index dff0120..8176c6b 100644 --- a/3rdparty/bx/include/bx/crtimpl.h +++ b/3rdparty/bx/include/bx/crtimpl.h @@ -1,13 +1,14 @@ /* - * 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_CRTIMPL_H_HEADER_GUARD #define BX_CRTIMPL_H_HEADER_GUARD +#include "bx.h" + #if BX_CONFIG_ALLOCATOR_CRT -# include # include "allocator.h" #endif // BX_CONFIG_ALLOCATOR_CRT @@ -18,328 +19,129 @@ namespace bx { #if BX_CONFIG_ALLOCATOR_CRT + /// class CrtAllocator : public AllocatorI { public: - CrtAllocator() - { - } + /// + CrtAllocator(); - virtual ~CrtAllocator() - { - } + /// + virtual ~CrtAllocator(); - virtual void* realloc(void* _ptr, size_t _size, size_t _align, const char* _file, uint32_t _line) BX_OVERRIDE - { - 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_ - } + /// + 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 - -# 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 CrtFileReader : public FileReaderI { public: - CrtFileReader() - : m_file(NULL) - { - } + /// + CrtFileReader(); - virtual ~CrtFileReader() - { - } + /// + virtual ~CrtFileReader(); - virtual bool open(const char* _filePath, Error* _err) BX_OVERRIDE - { - BX_CHECK(NULL != _err, "Reader/Writer interface calling functions must handle errors."); + /// + virtual bool open(const char* _filePath, Error* _err) BX_OVERRIDE; - m_file = fopen(_filePath, "rb"); - if (NULL == m_file) - { - BX_ERROR_SET(_err, BX_ERROR_READERWRITER_OPEN, "CrtFileReader: Failed to open file."); - return false; - } + /// + virtual void close() BX_OVERRIDE; - return true; - } + /// + virtual int64_t seek(int64_t _offset = 0, Whence::Enum _whence = Whence::Current) BX_OVERRIDE; - virtual void close() BX_OVERRIDE - { - fclose(m_file); - } - - virtual int64_t seek(int64_t _offset = 0, Whence::Enum _whence = Whence::Current) BX_OVERRIDE - { - fseeko64(m_file, _offset, _whence); - return ftello64(m_file); - } - - virtual int32_t read(void* _data, int32_t _size, Error* _err) BX_OVERRIDE - { - 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, "CrtFileWriter: EOF."); - } - else if (0 != ferror(m_file) ) - { - BX_ERROR_SET(_err, BX_ERROR_READERWRITER_READ, "CrtFileWriter: read error."); - } - - return size >= 0 ? size : 0; - } - - return size; - } + /// + virtual int32_t read(void* _data, int32_t _size, Error* _err) BX_OVERRIDE; private: - FILE* m_file; + void* m_file; }; + /// class CrtFileWriter : public FileWriterI { public: - CrtFileWriter() - : m_file(NULL) - { - } + /// + CrtFileWriter(); - virtual ~CrtFileWriter() - { - } + /// + virtual ~CrtFileWriter(); - virtual bool open(const char* _filePath, bool _append, Error* _err) BX_OVERRIDE - { - m_file = fopen(_filePath, _append ? "ab" : "wb"); + /// + virtual bool open(const char* _filePath, bool _append, Error* _err) BX_OVERRIDE; - if (NULL == m_file) - { - BX_ERROR_SET(_err, BX_ERROR_READERWRITER_OPEN, "CrtFileWriter: Failed to open file."); - return false; - } + /// + virtual void close() BX_OVERRIDE; - return true; - } + /// + virtual int64_t seek(int64_t _offset = 0, Whence::Enum _whence = Whence::Current) BX_OVERRIDE; - virtual void close() BX_OVERRIDE - { - fclose(m_file); - } - - virtual int64_t seek(int64_t _offset = 0, Whence::Enum _whence = Whence::Current) BX_OVERRIDE - { - fseeko64(m_file, _offset, _whence); - return ftello64(m_file); - } - - virtual int32_t write(const void* _data, int32_t _size, Error* _err) BX_OVERRIDE - { - 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, "CrtFileWriter: write failed."); - return size >= 0 ? size : 0; - } - - return size; - } + /// + virtual int32_t write(const void* _data, int32_t _size, Error* _err) BX_OVERRIDE; private: - FILE* m_file; + void* m_file; }; #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 - + /// class ProcessReader : public ReaderOpenI, public CloserI, public ReaderI { public: - ProcessReader() - : m_file(NULL) - { - } + /// + ProcessReader(); - ~ProcessReader() - { - BX_CHECK(NULL == m_file, "Process not closed!"); - } + /// + ~ProcessReader(); - virtual bool open(const char* _command, Error* _err) BX_OVERRIDE - { - BX_CHECK(NULL != _err, "Reader/Writer interface calling functions must handle errors."); + /// + virtual bool open(const char* _command, Error* _err) BX_OVERRIDE; - m_file = popen(_command, "r"); - if (NULL == m_file) - { - BX_ERROR_SET(_err, BX_ERROR_READERWRITER_OPEN, "ProcessReader: Failed to open process."); - return false; - } + /// + virtual void close() BX_OVERRIDE; - return true; - } + /// + virtual int32_t read(void* _data, int32_t _size, Error* _err) BX_OVERRIDE; - virtual void close() BX_OVERRIDE - { - BX_CHECK(NULL != m_file, "Process not open!"); - pclose(m_file); - m_file = NULL; - } - - virtual int32_t read(void* _data, int32_t _size, Error* _err) BX_OVERRIDE - { - BX_CHECK(NULL != _err, "Reader/Writer interface calling functions must handle errors."); BX_UNUSED(_err); - - 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, "CrtFileWriter: EOF."); - } - else if (0 != ferror(m_file) ) - { - BX_ERROR_SET(_err, BX_ERROR_READERWRITER_READ, "CrtFileWriter: read error."); - } - - return size >= 0 ? size : 0; - } - - return size; - } + /// + int32_t getExitCode() const; private: - FILE* m_file; + void* m_file; + int32_t m_exitCode; }; + /// class ProcessWriter : public WriterOpenI, public CloserI, public WriterI { public: - ProcessWriter() - : m_file(NULL) - { - } + /// + ProcessWriter(); - ~ProcessWriter() - { - BX_CHECK(NULL == m_file, "Process not closed!"); - } + /// + ~ProcessWriter(); - virtual bool open(const char* _command, bool, Error* _err) BX_OVERRIDE - { - BX_CHECK(NULL != _err, "Reader/Writer interface calling functions must handle errors."); + /// + virtual bool open(const char* _command, bool, Error* _err) BX_OVERRIDE; - m_file = popen(_command, "w"); - if (NULL == m_file) - { - BX_ERROR_SET(_err, BX_ERROR_READERWRITER_OPEN, "ProcessWriter: Failed to open process."); - return false; - } + /// + virtual void close() BX_OVERRIDE; - return true; - } + /// + virtual int32_t write(const void* _data, int32_t _size, Error* _err) BX_OVERRIDE; - virtual void close() BX_OVERRIDE - { - BX_CHECK(NULL != m_file, "Process not open!"); - pclose(m_file); - m_file = NULL; - } - - virtual int32_t write(const void* _data, int32_t _size, Error* _err) BX_OVERRIDE - { - BX_CHECK(NULL != _err, "Reader/Writer interface calling functions must handle errors."); BX_UNUSED(_err); - - int32_t size = (int32_t)fwrite(_data, 1, _size, m_file); - if (size != _size) - { - if (0 != ferror(m_file) ) - { - BX_ERROR_SET(_err, BX_ERROR_READERWRITER_WRITE, "CrtFileWriter: write error."); - } - - return size >= 0 ? size : 0; - } - - return size; - } + /// + int32_t getExitCode() const; private: - FILE* m_file; + void* m_file; + int32_t m_exitCode; }; - #endif // BX_CONFIG_CRT_PROCESS } // namespace bx diff --git a/3rdparty/bx/include/bx/debug.h b/3rdparty/bx/include/bx/debug.h index 1154ab7..7c2ca86 100644 --- a/3rdparty/bx/include/bx/debug.h +++ b/3rdparty/bx/include/bx/debug.h @@ -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 */ @@ -8,68 +8,22 @@ #include "bx.h" -#if BX_PLATFORM_ANDROID -# include -#elif BX_PLATFORM_WINDOWS || BX_PLATFORM_WINRT || BX_PLATFORM_XBOX360 || BX_PLATFORM_XBOXONE -extern "C" __declspec(dllimport) void __stdcall OutputDebugStringA(const char* _str); -#elif BX_PLATFORM_IOS || BX_PLATFORM_OSX -# if defined(__OBJC__) -# import -# else -# include -extern "C" void NSLog(CFStringRef _format, ...); -# endif // defined(__OBJC__) -#elif 0 // BX_PLATFORM_EMSCRIPTEN -# include -#else -# include -#endif // BX_PLATFORM_WINDOWS - namespace bx { -#if BX_COMPILER_CLANG_ANALYZER - inline __attribute__((analyzer_noreturn)) void debugBreak(); -#endif // BX_COMPILER_CLANG_ANALYZER + /// + void debugBreak(); - inline void debugBreak() - { -#if BX_COMPILER_MSVC - __debugbreak(); -#elif BX_CPU_ARM - __builtin_trap(); -// asm("bkpt 0"); -#elif !BX_PLATFORM_NACL && 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"); -#else // cross platform implementation - int* int3 = (int*)3L; - *int3 = 3; -#endif // BX - } + /// + void debugOutput(const char* _out); - inline void debugOutput(const char* _out) - { -#if BX_PLATFORM_ANDROID -# ifndef BX_ANDROID_LOG_TAG -# 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 - OutputDebugStringA(_out); -#elif BX_PLATFORM_IOS || BX_PLATFORM_OSX -# if defined(__OBJC__) - NSLog(@"%s", _out); -# else - NSLog(__CFStringMakeConstantString("%s"), _out); -# endif // defined(__OBJC__) -#elif 0 // BX_PLATFORM_EMSCRIPTEN - emscripten_log(EM_LOG_CONSOLE, "%s", _out); -#else - fputs(_out, stdout); - fflush(stdout); -#endif // BX_PLATFORM_ - } + /// + void debugPrintfVargs(const char* _format, va_list _argList); + + /// + void debugPrintf(const char* _format, ...); + + /// + void debugPrintfData(const void* _data, uint32_t _size, const char* _format, ...); } // namespace bx diff --git a/3rdparty/bx/include/bx/easing.h b/3rdparty/bx/include/bx/easing.h new file mode 100644 index 0000000..6213157 --- /dev/null +++ b/3rdparty/bx/include/bx/easing.h @@ -0,0 +1,198 @@ +/* + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bx#license-bsd-2-clause + */ + +#ifndef BX_EASING_H_HEADER_GUARD +#define BX_EASING_H_HEADER_GUARD + +#include "fpumath.h" + +// Reference: +// http://easings.net/ +// http://robertpenner.com/easing/ + +namespace bx +{ + /// + struct Easing + { + enum Enum + { + Linear, + InQuad, + OutQuad, + InOutQuad, + OutInQuad, + InCubic, + OutCubic, + InOutCubic, + OutInCubic, + InQuart, + OutQuart, + InOutQuart, + OutInQuart, + InQuint, + OutQuint, + InOutQuint, + OutInQuint, + InSine, + OutSine, + InOutSine, + OutInSine, + InExpo, + OutExpo, + InOutExpo, + OutInExpo, + InCirc, + OutCirc, + InOutCirc, + OutInCirc, + InElastic, + OutElastic, + InOutElastic, + OutInElastic, + InBack, + OutBack, + InOutBack, + OutInBack, + InBounce, + OutBounce, + InOutBounce, + OutInBounce, + + Count + }; + }; + + /// + typedef float (*EaseFn)(float _t); + + /// + float easeLinear(float _t); + + /// + float easeInQuad(float _t); + + /// + float easeOutQuad(float _t); + + /// + float easeInOutQuad(float _t); + + /// + float easeOutInQuad(float _t); + + /// + float easeInCubic(float _t); + + /// + float easeOutCubic(float _t); + + /// + float easeInOutCubic(float _t); + + /// + float easeOutInCubic(float _t); + + /// + float easeInQuart(float _t); + + /// + float easeOutQuart(float _t); + + /// + float easeInOutQuart(float _t); + + /// + float easeOutInQuart(float _t); + + /// + float easeInQuint(float _t); + + /// + float easeOutQuint(float _t); + + /// + float easeInOutQuint(float _t); + + /// + float easeOutInQuint(float _t); + + /// + float easeInSine(float _t); + + /// + float easeOutSine(float _t); + + /// + float easeInOutSine(float _t); + + /// + float easeOutInSine(float _t); + + /// + float easeInExpo(float _t); + + /// + float easeOutExpo(float _t); + + /// + float easeInOutExpo(float _t); + + /// + float easeOutInExpo(float _t); + + /// + float easeInCirc(float _t); + + /// + float easeOutCirc(float _t); + + /// + float easeInOutCirc(float _t); + + /// + float easeOutInCirc(float _t); + + /// + float easeOutElastic(float _t); + + /// + float easeInElastic(float _t); + + /// + float easeInOutElastic(float _t); + + /// + float easeOutInElastic(float _t); + + /// + float easeInBack(float _t); + + /// + float easeOutBack(float _t); + + /// + float easeInOutBack(float _t); + + /// + float easeOutInBack(float _t); + + /// + float easeOutBounce(float _t); + + /// + float easeInBounce(float _t); + + /// + float easeInOutBounce(float _t); + + /// + float easeOutInBounce(float _t); + +} // namespace bx + +#include "inline/easing.inl" + +#endif // BX_EASING_H_HEADER_GUARD diff --git a/3rdparty/bx/include/bx/endian.h b/3rdparty/bx/include/bx/endian.h index 0781ade..fdc1933 100644 --- a/3rdparty/bx/include/bx/endian.h +++ b/3rdparty/bx/include/bx/endian.h @@ -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 */ @@ -10,78 +10,41 @@ namespace bx { - inline uint16_t endianSwap(uint16_t _in) - { - return (_in>>8) | (_in<<8); - } - - inline uint32_t endianSwap(uint32_t _in) - { - return (_in>>24) | (_in<<24) - | ( (_in&0x00ff0000)>>8) | ( (_in&0x0000ff00)<<8) - ; - } + /// + int16_t endianSwap(int16_t _in); - inline uint64_t endianSwap(uint64_t _in) - { - return (_in>>56) | (_in<<56) - | ( (_in&UINT64_C(0x00ff000000000000) )>>40) | ( (_in&UINT64_C(0x000000000000ff00) )<<40) - | ( (_in&UINT64_C(0x0000ff0000000000) )>>24) | ( (_in&UINT64_C(0x0000000000ff0000) )<<24) - | ( (_in&UINT64_C(0x000000ff00000000) )>>8) | ( (_in&UINT64_C(0x00000000ff000000) )<<8) - ; - } + /// + uint16_t endianSwap(uint16_t _in); - inline int16_t endianSwap(int16_t _in) - { - return (int16_t)endianSwap( (uint16_t)_in); - } + /// + int32_t endianSwap(int32_t _in); - inline int32_t endianSwap(int32_t _in) - { - return (int32_t)endianSwap( (uint32_t)_in); - } + /// + uint32_t endianSwap(uint32_t _in); - inline int64_t endianSwap(int64_t _in) - { - return (int64_t)endianSwap( (uint64_t)_in); - } + /// + int64_t endianSwap(int64_t _in); + + /// + uint64_t endianSwap(uint64_t _in); /// Input argument is encoded as little endian, convert it if neccessary /// depending on host CPU endianess. template - inline Ty toLittleEndian(const Ty _in) - { -#if BX_CPU_ENDIAN_BIG - return endianSwap(_in); -#else - return _in; -#endif // BX_CPU_ENDIAN_BIG - } + Ty toLittleEndian(const Ty _in); /// Input argument is encoded as big endian, convert it if neccessary /// depending on host CPU endianess. template - inline Ty toBigEndian(const Ty _in) - { -#if BX_CPU_ENDIAN_LITTLE - return endianSwap(_in); -#else - return _in; -#endif // BX_CPU_ENDIAN_LITTLE - } + Ty toBigEndian(const Ty _in); /// If _littleEndian is true, converts input argument to from little endian /// to host CPU endiness. template - inline Ty toHostEndian(const Ty _in, bool _fromLittleEndian) - { -#if BX_CPU_ENDIAN_LITTLE - return _fromLittleEndian ? _in : endianSwap(_in); -#else - return _fromLittleEndian ? endianSwap(_in) : _in; -#endif // BX_CPU_ENDIAN_LITTLE - } + Ty toHostEndian(const Ty _in, bool _fromLittleEndian); } // namespace bx +#include "inline/endian.inl" + #endif // BX_ENDIAN_H_HEADER_GUARD diff --git a/3rdparty/bx/include/bx/error.h b/3rdparty/bx/include/bx/error.h index 66132a9..47d6d82 100644 --- a/3rdparty/bx/include/bx/error.h +++ b/3rdparty/bx/include/bx/error.h @@ -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_ERROR_H_HEADER_GUARD #define BX_ERROR_H_HEADER_GUARD -#include "bx.h" #include "string.h" #define BX_ERROR_SET(_ptr, _result, _msg) \ @@ -44,50 +43,29 @@ namespace bx ); public: - Error() - : m_code(0) - { - } + /// + Error(); - void reset() - { - m_code = 0; - m_msg.clear(); - } + /// + void reset(); - void setError(ErrorResult _errorResult, const StringView& _msg) - { - BX_CHECK(0 != _errorResult.code, "Invalid ErrorResult passed to setError!"); + /// + void setError(ErrorResult _errorResult, const StringView& _msg); - if (!isOk() ) - { - return; - } + /// + bool isOk() const; - m_code = _errorResult.code; - m_msg = _msg; - } + /// + ErrorResult get() const; - bool isOk() const - { - return 0 == m_code; - } + /// + const StringView& getMessage() const; - ErrorResult get() const - { - ErrorResult result = { m_code }; - return result; - } + /// + bool operator==(const ErrorResult& _rhs) const; - bool operator==(const ErrorResult& _rhs) const - { - return _rhs.code == m_code; - } - - bool operator!=(const ErrorResult& _rhs) const - { - return _rhs.code != m_code; - } + /// + bool operator!=(const ErrorResult& _rhs) const; private: StringView m_msg; @@ -103,16 +81,11 @@ namespace bx ); public: - ErrorScope(Error* _err) - : m_err(_err) - { - BX_CHECK(NULL != _err, "_err can't be NULL"); - } + /// + ErrorScope(Error* _err); - ~ErrorScope() - { - BX_CHECK(m_err->isOk(), "Error: %d", m_err->get().code); - } + /// + ~ErrorScope(); private: Error* m_err; @@ -120,4 +93,6 @@ namespace bx } // namespace bx +#include "inline/error.inl" + #endif // BX_ERROR_H_HEADER_GUARD diff --git a/3rdparty/bx/include/bx/float4x4_t.h b/3rdparty/bx/include/bx/float4x4_t.h index 269dd63..44569b9 100644 --- a/3rdparty/bx/include/bx/float4x4_t.h +++ b/3rdparty/bx/include/bx/float4x4_t.h @@ -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 */ @@ -44,7 +44,7 @@ namespace bx return result; } - BX_SIMD_INLINE void float4x4_mul(float4x4_t* __restrict _result, const float4x4_t* __restrict _a, const float4x4_t* __restrict _b) + 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); @@ -52,7 +52,7 @@ namespace bx _result->col[3] = simd_mul(_a->col[3], _b); } - BX_SIMD_FORCE_INLINE void float4x4_transpose(float4x4_t* __restrict _result, const float4x4_t* __restrict _mtx) + 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 @@ -64,7 +64,7 @@ namespace bx _result->col[3] = simd_shuf_zCwD(ckdl, gohp); // dhlp } - BX_SIMD_INLINE void float4x4_inverse(float4x4_t* __restrict _result, const float4x4_t* __restrict _a) + 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]); diff --git a/3rdparty/bx/include/bx/fpumath.h b/3rdparty/bx/include/bx/fpumath.h index 7d7a267..b5b319c 100644 --- a/3rdparty/bx/include/bx/fpumath.h +++ b/3rdparty/bx/include/bx/fpumath.h @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bx#license-bsd-2-clause */ @@ -9,16 +9,16 @@ #define BX_FPU_MATH_H_HEADER_GUARD #include "bx.h" -#include -#include namespace bx { - static const float pi = 3.14159265358979323846f; - static const float invPi = 1.0f/3.14159265358979323846f; - static const float piHalf = 1.57079632679489661923f; - static const float sqrt2 = 1.41421356237309504880f; + extern const float pi; + extern const float invPi; + extern const float piHalf; + extern const float sqrt2; + extern const float huge; + /// struct Handness { enum Enum @@ -28,6 +28,7 @@ namespace bx }; }; + /// struct NearFar { enum Enum @@ -37,1375 +38,439 @@ namespace bx }; }; - inline float toRad(float _deg) - { - return _deg * pi / 180.0f; - } + /// + float toRad(float _deg); - inline float toDeg(float _rad) - { - return _rad * 180.0f / pi; - } + /// + float toDeg(float _rad); - inline float ffloor(float _f) - { - return floorf(_f); - } + /// + uint32_t floatToBits(float _a); - inline float fceil(float _f) - { - return ceilf(_f); - } + /// + float bitsToFloat(uint32_t _a); - inline float fround(float _f) - { - return ffloor(_f + 0.5f); - } + /// + uint64_t doubleToBits(double _a); - inline float fmin(float _a, float _b) - { - return _a < _b ? _a : _b; - } + /// + double bitsToDouble(uint64_t _a); - inline float fmax(float _a, float _b) - { - return _a > _b ? _a : _b; - } + /// + bool isNan(float _f); - inline float fmin3(float _a, float _b, float _c) - { - return fmin(_a, fmin(_b, _c) ); - } + /// + bool isNan(double _f); - inline float fmax3(float _a, float _b, float _c) - { - return fmax(_a, fmax(_b, _c) ); - } + /// + bool isFinite(float _f); - inline float fclamp(float _a, float _min, float _max) - { - return fmin(fmax(_a, _min), _max); - } + /// + bool isFinite(double _f); - inline float fsaturate(float _a) - { - return fclamp(_a, 0.0f, 1.0f); - } + /// + bool isInfinite(float _f); - inline float flerp(float _a, float _b, float _t) - { - return _a + (_b - _a) * _t; - } + /// + bool isInfinite(double _f); - inline float fsign(float _a) - { - return _a < 0.0f ? -1.0f : 1.0f; - } + /// + float ffloor(float _f); - inline float fstep(float _edge, float _a) - { - return _a < _edge ? 0.0f : 1.0f; - } + /// + float fceil(float _f); - inline float fpulse(float _a, float _start, float _end) - { - return fstep(_a, _start) - fstep(_a, _end); - } + /// + float fround(float _f); - inline float fabsolute(float _a) - { - return fabsf(_a); - } + /// + float fmin(float _a, float _b); - inline float fsq(float _a) - { - return _a * _a; - } + /// + float fmax(float _a, float _b); - inline float fsin(float _a) - { - return sinf(_a); - } + /// + float fmin3(float _a, float _b, float _c); - inline float fcos(float _a) - { - return cosf(_a); - } + /// + float fmax3(float _a, float _b, float _c); - inline float fpow(float _a, float _b) - { - return powf(_a, _b); - } + /// + float fclamp(float _a, float _min, float _max); - inline float fexp2(float _a) - { - return fpow(2.0f, _a); - } + /// + float fsaturate(float _a); - inline float flog(float _a) - { - return logf(_a); - } + /// + float flerp(float _a, float _b, float _t); - inline float flog2(float _a) - { - return flog(_a) * 1.442695041f; - } + /// + float fsign(float _a); - inline float fsqrt(float _a) - { - return sqrtf(_a); - } + /// + float fabsolute(float _a); - inline float frsqrt(float _a) - { - return 1.0f/fsqrt(_a); - } + /// + float fsq(float _a); - inline float ffract(float _a) - { - return _a - floorf(_a); - } + /// + float fsin(float _a); - inline float fmod(float _a, float _b) - { - return fmodf(_a, _b); - } + /// + float fasin(float _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; - } + /// + float fcos(float _a); - inline bool fequal(const float* __restrict _a, const float* __restrict _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; - } + /// + float ftan(float _a); - inline float fwrap(float _a, float _wrap) - { - const float mod = fmod(_a, _wrap); - const float result = mod < 0.0f ? _wrap + mod : mod; - return result; - } + /// + float facos(float _a); + + /// + float fatan2(float _y, float _x); + + /// + float fpow(float _a, float _b); + + /// + float fexp2(float _a); + + /// + float flog(float _a); + + /// + float flog2(float _a); + + /// + float fsqrt(float _a); + + /// + float frsqrt(float _a); + + /// + float ffract(float _a); + + /// + float fmod(float _a, float _b); + + /// + bool fequal(float _a, float _b, float _epsilon); + + /// + bool fequal(const float* _a, const float* _b, uint32_t _num, float _epsilon); + + /// + float fwrap(float _a, float _wrap); + + /// + float fstep(float _edge, float _a); + + /// + float fpulse(float _a, float _start, float _end); + + /// + float fsmoothstep(float _a); // References: // - Bias And Gain Are Your Friend // http://blog.demofox.org/2012/09/24/bias-and-gain-are-your-friend/ // - http://demofox.org/biasgain.html - 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* __restrict _result, const float* __restrict _a) - { - _result[0] = _a[0]; - _result[1] = _a[1]; - _result[2] = _a[2]; - } - - inline void vec3Abs(float* __restrict _result, const float* __restrict _a) - { - _result[0] = fabsolute(_a[0]); - _result[1] = fabsolute(_a[1]); - _result[2] = fabsolute(_a[2]); - } - - inline void vec3Neg(float* __restrict _result, const float* __restrict _a) - { - _result[0] = -_a[0]; - _result[1] = -_a[1]; - _result[2] = -_a[2]; - } - - inline void vec3Add(float* __restrict _result, const float* __restrict _a, const float* __restrict _b) - { - _result[0] = _a[0] + _b[0]; - _result[1] = _a[1] + _b[1]; - _result[2] = _a[2] + _b[2]; - } - - inline void vec3Add(float* __restrict _result, const float* __restrict _a, float _b) - { - _result[0] = _a[0] + _b; - _result[1] = _a[1] + _b; - _result[2] = _a[2] + _b; - } - - inline void vec3Sub(float* __restrict _result, const float* __restrict _a, const float* __restrict _b) - { - _result[0] = _a[0] - _b[0]; - _result[1] = _a[1] - _b[1]; - _result[2] = _a[2] - _b[2]; - } - - inline void vec3Sub(float* __restrict _result, const float* __restrict _a, float _b) - { - _result[0] = _a[0] - _b; - _result[1] = _a[1] - _b; - _result[2] = _a[2] - _b; - } - - inline void vec3Mul(float* __restrict _result, const float* __restrict _a, const float* __restrict _b) - { - _result[0] = _a[0] * _b[0]; - _result[1] = _a[1] * _b[1]; - _result[2] = _a[2] * _b[2]; - } - - inline void vec3Mul(float* __restrict _result, const float* __restrict _a, float _b) - { - _result[0] = _a[0] * _b; - _result[1] = _a[1] * _b; - _result[2] = _a[2] * _b; - } - - inline float vec3Dot(const float* __restrict _a, const float* __restrict _b) - { - return _a[0]*_b[0] + _a[1]*_b[1] + _a[2]*_b[2]; - } - - inline void vec3Cross(float* __restrict _result, const float* __restrict _a, const float* __restrict _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* __restrict _result, const float* __restrict _a, const float* __restrict _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* __restrict _result, const float* __restrict _a, const float* __restrict _b, const float* __restrict _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* __restrict _result, const float* __restrict _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* __restrict _result, const float* __restrict _a, const float* __restrict _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* __restrict _result, const float* __restrict _a, const float* __restrict _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* __restrict _result, const float* __restrict _a) - { - _result[0] = 1.0f / _a[0]; - _result[1] = 1.0f / _a[1]; - _result[2] = 1.0f / _a[2]; - } - - inline void vec3TangentFrame(const float* __restrict _n, float* __restrict _t, float* __restrict _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 quatIdentity(float* _result) - { - _result[0] = 0.0f; - _result[1] = 0.0f; - _result[2] = 0.0f; - _result[3] = 1.0f; - } - - inline void quatMove(float* __restrict _result, const float* __restrict _a) - { - _result[0] = _a[0]; - _result[1] = _a[1]; - _result[2] = _a[2]; - _result[3] = _a[3]; - } - - inline void quatMulXYZ(float* __restrict _result, const float* __restrict _qa, const float* __restrict _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* __restrict _result, const float* __restrict _qa, const float* __restrict _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* __restrict _result, const float* __restrict _quat) - { - _result[0] = -_quat[0]; - _result[1] = -_quat[1]; - _result[2] = -_quat[2]; - _result[3] = _quat[3]; - } - - inline float quatDot(const float* __restrict _a, const float* __restrict _b) - { - return _a[0]*_b[0] - + _a[1]*_b[1] - + _a[2]*_b[2] - + _a[3]*_b[3] - ; - } - - inline void quatNorm(float* __restrict _result, const float* __restrict _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* __restrict _result, const float* __restrict _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] = atan2f(2.0f * (x * w - y * z), 1.0f - 2.0f * (xx + zz) ); - _result[1] = atan2f(2.0f * (y * w + x * z), 1.0f - 2.0f * (yy + zz) ); - _result[2] = asinf (2.0f * (x * y + z * w) ); - } - - inline void quatRotateAxis(float* __restrict _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* __restrict _result, const float* __restrict _vec, const float* __restrict _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* __restrict _result, const float* __restrict _normal, float _scale, const float* __restrict _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 mtxQuat(float* __restrict _result, const float* __restrict _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* __restrict _result, const float* __restrict _quat, const float* __restrict _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* __restrict _result, const float* __restrict _quat, const float* __restrict _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* __restrict _result, const float* __restrict _eye, const float* __restrict _view, const float* __restrict _up = NULL) - { - 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* __restrict _result, const float* __restrict _eye, const float* __restrict _at, const float* __restrict _up = NULL) - { - float tmp[4]; - vec3Sub(tmp, _at, _eye); - - float view[4]; - vec3Norm(view, tmp); - - mtxLookAt_Impl(_result, _eye, view, _up); - } - - inline void mtxLookAtRh(float* __restrict _result, const float* __restrict _eye, const float* __restrict _at, const float* __restrict _up = NULL) - { - float tmp[4]; - vec3Sub(tmp, _eye, _at); - - float view[4]; - vec3Norm(view, tmp); - - mtxLookAt_Impl(_result, _eye, view, _up); - } - - inline void mtxLookAt(float* __restrict _result, const float* __restrict _eye, const float* __restrict _at, const float* __restrict _up = NULL) - { - mtxLookAtLh(_result, _eye, _at, _up); - } - - template - inline void mtxProjXYWH(float* _result, float _x, float _y, float _width, float _height, float _near, float _far, bool _oglNdc = false) - { - 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 - inline void mtxProj_impl(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, float _far, bool _oglNdc = false) - { - 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(_result, xx, yy, width, height, _near, _far, _oglNdc); - } - - template - inline void mtxProj_impl(float* _result, const float _fov[4], float _near, float _far, bool _oglNdc = false) - { - mtxProj_impl(_result, _fov[0], _fov[1], _fov[2], _fov[3], _near, _far, _oglNdc); - } - - template - inline void mtxProj_impl(float* _result, float _fovy, float _aspect, float _near, float _far, bool _oglNdc = false) - { - const float height = 1.0f/tanf(toRad(_fovy)*0.5f); - const float width = height * 1.0f/_aspect; - mtxProjXYWH(_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 = false) - { - mtxProj_impl(_result, _ut, _dt, _lt, _rt, _near, _far, _oglNdc); - } - - inline void mtxProj(float* _result, const float _fov[4], float _near, float _far, bool _oglNdc = false) - { - mtxProj_impl(_result, _fov, _near, _far, _oglNdc); - } - - inline void mtxProj(float* _result, float _fovy, float _aspect, float _near, float _far, bool _oglNdc = false) - { - mtxProj_impl(_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 = false) - { - mtxProj_impl(_result, _ut, _dt, _lt, _rt, _near, _far, _oglNdc); - } - - inline void mtxProjLh(float* _result, const float _fov[4], float _near, float _far, bool _oglNdc = false) - { - mtxProj_impl(_result, _fov, _near, _far, _oglNdc); - } - - inline void mtxProjLh(float* _result, float _fovy, float _aspect, float _near, float _far, bool _oglNdc = false) - { - mtxProj_impl(_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 = false) - { - mtxProj_impl(_result, _ut, _dt, _lt, _rt, _near, _far, _oglNdc); - } - - inline void mtxProjRh(float* _result, const float _fov[4], float _near, float _far, bool _oglNdc = false) - { - mtxProj_impl(_result, _fov, _near, _far, _oglNdc); - } - - inline void mtxProjRh(float* _result, float _fovy, float _aspect, float _near, float _far, bool _oglNdc = false) - { - mtxProj_impl(_result, _fovy, _aspect, _near, _far, _oglNdc); - } - - template - inline void mtxProjInfXYWH(float* _result, float _x, float _y, float _width, float _height, float _near, bool _oglNdc = false) - { - 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 - inline void mtxProjInf_impl(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, bool _oglNdc = false) - { - 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(_result, xx, yy, width, height, _near, _oglNdc); - } - - template - inline void mtxProjInf_impl(float* _result, const float _fov[4], float _near, bool _oglNdc = false) - { - mtxProjInf_impl(_result, _fov[0], _fov[1], _fov[2], _fov[3], _near, _oglNdc); - } - - template - inline void mtxProjInf_impl(float* _result, float _fovy, float _aspect, float _near, bool _oglNdc = false) - { - const float height = 1.0f/tanf(toRad(_fovy)*0.5f); - const float width = height * 1.0f/_aspect; - mtxProjInfXYWH(_result, 0.0f, 0.0f, width, height, _near, _oglNdc); - } - - inline void mtxProjInf(float* _result, const float _fov[4], float _near, bool _oglNdc = false) - { - mtxProjInf_impl(_result, _fov, _near, _oglNdc); - } - - inline void mtxProjInf(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, bool _oglNdc = false) - { - mtxProjInf_impl(_result, _ut, _dt, _lt, _rt, _near, _oglNdc); - } - - inline void mtxProjInf(float* _result, float _fovy, float _aspect, float _near, bool _oglNdc = false) - { - mtxProjInf_impl(_result, _fovy, _aspect, _near, _oglNdc); - } - - inline void mtxProjInfLh(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, bool _oglNdc = false) - { - mtxProjInf_impl(_result, _ut, _dt, _lt, _rt, _near, _oglNdc); - } - - inline void mtxProjInfLh(float* _result, const float _fov[4], float _near, bool _oglNdc = false) - { - mtxProjInf_impl(_result, _fov, _near, _oglNdc); - } - - inline void mtxProjInfLh(float* _result, float _fovy, float _aspect, float _near, bool _oglNdc = false) - { - mtxProjInf_impl(_result, _fovy, _aspect, _near, _oglNdc); - } - - inline void mtxProjInfRh(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, bool _oglNdc = false) - { - mtxProjInf_impl(_result, _ut, _dt, _lt, _rt, _near, _oglNdc); - } - - inline void mtxProjInfRh(float* _result, const float _fov[4], float _near, bool _oglNdc = false) - { - mtxProjInf_impl(_result, _fov, _near, _oglNdc); - } - - inline void mtxProjInfRh(float* _result, float _fovy, float _aspect, float _near, bool _oglNdc = false) - { - mtxProjInf_impl(_result, _fovy, _aspect, _near, _oglNdc); - } - - inline void mtxProjRevInfLh(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, bool _oglNdc = false) - { - mtxProjInf_impl(_result, _ut, _dt, _lt, _rt, _near, _oglNdc); - } - - inline void mtxProjRevInfLh(float* _result, const float _fov[4], float _near, bool _oglNdc = false) - { - mtxProjInf_impl(_result, _fov, _near, _oglNdc); - } - - inline void mtxProjRevInfLh(float* _result, float _fovy, float _aspect, float _near, bool _oglNdc = false) - { - mtxProjInf_impl(_result, _fovy, _aspect, _near, _oglNdc); - } - - inline void mtxProjRevInfRh(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, bool _oglNdc = false) - { - mtxProjInf_impl(_result, _ut, _dt, _lt, _rt, _near, _oglNdc); - } - - inline void mtxProjRevInfRh(float* _result, const float _fov[4], float _near, bool _oglNdc = false) - { - mtxProjInf_impl(_result, _fov, _near, _oglNdc); - } - - inline void mtxProjRevInfRh(float* _result, float _fovy, float _aspect, float _near, bool _oglNdc = false) - { - mtxProjInf_impl(_result, _fovy, _aspect, _near, _oglNdc); - } - - template - inline void mtxOrtho_impl(float* _result, float _left, float _right, float _bottom, float _top, float _near, float _far, float _offset = 0.0f, bool _oglNdc = false) - { - 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 = 0.0f, bool _oglNdc = false) - { - mtxOrtho_impl(_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 = 0.0f, bool _oglNdc = false) - { - mtxOrtho_impl(_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 = 0.0f, bool _oglNdc = false) - { - mtxOrtho_impl(_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* __restrict _result, const float* __restrict _vec, const float* __restrict _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* __restrict _result, const float* __restrict _vec, const float* __restrict _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* __restrict _result, const float* __restrict _vec, const float* __restrict _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* __restrict _result, const float* __restrict _a, const float* __restrict _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* __restrict _result, const float* __restrict _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]; - } - - inline void mtx3Inverse(float* __restrict _result, const float* __restrict _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; - } - - inline void mtxInverse(float* __restrict _result, const float* __restrict _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; - } + /// + float fbias(float _time, float _bias); + + /// + float fgain(float _time, float _gain); + + /// + void vec3Move(float* _result, const float* _a); + + /// + void vec3Abs(float* _result, const float* _a); + + /// + void vec3Neg(float* _result, const float* _a); + + /// + void vec3Add(float* _result, const float* _a, const float* _b); + + /// + void vec3Add(float* _result, const float* _a, float _b); + + /// + void vec3Sub(float* _result, const float* _a, const float* _b); + + /// + void vec3Sub(float* _result, const float* _a, float _b); + + /// + void vec3Mul(float* _result, const float* _a, const float* _b); + + /// + void vec3Mul(float* _result, const float* _a, float _b); + + /// + float vec3Dot(const float* _a, const float* _b); + + /// + void vec3Cross(float* _result, const float* _a, const float* _b); + + /// + float vec3Length(const float* _a); + + /// + void vec3Lerp(float* _result, const float* _a, const float* _b, float _t); + + /// + void vec3Lerp(float* _result, const float* _a, const float* _b, const float* _c); + + /// + float vec3Norm(float* _result, const float* _a); + + /// + void vec3Min(float* _result, const float* _a, const float* _b); + + /// + void vec3Max(float* _result, const float* _a, const float* _b); + + /// + void vec3Rcp(float* _result, const float* _a); + + /// Calculate tangent frame from normal. + /// + void vec3TangentFrame(const float* _n, float* _t, float* _b); + + /// Calculate tangent frame from normal and angle. + /// + void vec3TangentFrame(const float* _n, float* _t, float* _b, float _angle); + + /// + void quatIdentity(float* _result); + + /// + void quatMove(float* _result, const float* _a); + + /// + void quatMulXYZ(float* _result, const float* _qa, const float* _qb); + + /// + void quatMul(float* _result, const float* _qa, const float* _qb); + + /// + void quatInvert(float* _result, const float* _quat); + + /// + float quatDot(const float* _a, const float* _b); + + /// + void quatNorm(float* _result, const float* _quat); + + /// + void quatToEuler(float* _result, const float* _quat); + + /// + void quatRotateAxis(float* _result, const float* _axis, float _angle); + + /// + void quatRotateX(float* _result, float _ax); + + /// + void quatRotateY(float* _result, float _ay); + + /// + void quatRotateZ(float* _result, float _az); + + /// + void vec3MulQuat(float* _result, const float* _vec, const float* _quat); + + /// + void mtxIdentity(float* _result); + + /// + void mtxTranslate(float* _result, float _tx, float _ty, float _tz); + + /// + void mtxScale(float* _result, float _sx, float _sy, float _sz); + + /// + void mtxScale(float* _result, float _scale); + + /// + void mtxFromNormal(float* _result, const float* _normal, float _scale, const float* _pos); + + /// + void mtxFromNormal(float* _result, const float* _normal, float _scale, const float* _pos, float _angle); + + /// + void mtxQuat(float* _result, const float* _quat); + + /// + void mtxQuatTranslation(float* _result, const float* _quat, const float* _translation); + + /// + 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 mtxLookAtRh(float* _result, const float* _eye, const float* _at, const float* _up = NULL); + + /// + 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, const float _fov[4], float _near, float _far, bool _oglNdc = false); + + /// + void mtxProj(float* _result, float _fovy, float _aspect, 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 = false); + + /// + void mtxProjLh(float* _result, const float _fov[4], float _near, float _far, bool _oglNdc = false); + + /// + void mtxProjLh(float* _result, float _fovy, float _aspect, 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 = false); + + /// + void mtxProjRh(float* _result, const float _fov[4], float _near, float _far, bool _oglNdc = false); + + /// + void mtxProjRh(float* _result, float _fovy, float _aspect, float _near, float _far, bool _oglNdc = false); + + /// + void mtxProjInf(float* _result, const float _fov[4], float _near, bool _oglNdc = false); + + /// + void mtxProjInf(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, bool _oglNdc = false); + + /// + void mtxProjInf(float* _result, float _fovy, float _aspect, float _near, bool _oglNdc = false); + + /// + void mtxProjInfLh(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, bool _oglNdc = false); + + /// + void mtxProjInfLh(float* _result, const float _fov[4], float _near, bool _oglNdc = false); + + /// + void mtxProjInfLh(float* _result, float _fovy, float _aspect, float _near, bool _oglNdc = false); + + /// + void mtxProjInfRh(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, bool _oglNdc = false); + + /// + void mtxProjInfRh(float* _result, const float _fov[4], float _near, bool _oglNdc = false); + + /// + void mtxProjInfRh(float* _result, float _fovy, float _aspect, float _near, bool _oglNdc = false); + + /// + void mtxProjRevInfLh(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, bool _oglNdc = false); + + /// + void mtxProjRevInfLh(float* _result, const float _fov[4], float _near, bool _oglNdc = false); + + /// + void mtxProjRevInfLh(float* _result, float _fovy, float _aspect, float _near, bool _oglNdc = false); + + /// + void mtxProjRevInfRh(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, bool _oglNdc = false); + + /// + void mtxProjRevInfRh(float* _result, const float _fov[4], float _near, bool _oglNdc = false); + + /// + void mtxProjRevInfRh(float* _result, float _fovy, float _aspect, float _near, bool _oglNdc = false); + + /// + void mtxOrtho(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 = 0.0f, bool _oglNdc = false); + + /// + void mtxOrthoRh(float* _result, float _left, float _right, float _bottom, float _top, float _near, float _far, float _offset = 0.0f, bool _oglNdc = false); + + /// + void mtxRotateX(float* _result, float _ax); + + /// + void mtxRotateY(float* _result, float _ay); + + /// + void mtxRotateZ(float* _result, float _az); + + /// + void mtxRotateXY(float* _result, float _ax, float _ay); + + /// + void mtxRotateXYZ(float* _result, float _ax, float _ay, float _az); + + /// + void mtxRotateZYX(float* _result, float _ax, float _ay, float _az); + + /// + void mtxSRT(float* _result, float _sx, float _sy, float _sz, float _ax, float _ay, float _az, float _tx, float _ty, float _tz); + + /// + void vec3MulMtx(float* _result, const float* _vec, const float* _mat); + + /// + void vec3MulMtxH(float* _result, const float* _vec, const float* _mat); + + /// + void vec4MulMtx(float* _result, const float* _vec, const float* _mat); + + /// + void mtxMul(float* _result, const float* _a, const float* _b); + + /// + void mtxTranspose(float* _result, const float* _a); + + /// + void mtx3Inverse(float* _result, const float* _a); + + /// + void mtxInverse(float* _result, const float* _a); /// Convert LH to RH projection matrix and vice versa. - inline void mtxProjFlipHandedness(float* __restrict _dst, const float* __restrict _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]; - } + /// + void mtxProjFlipHandedness(float* _dst, const float* _src); /// Convert LH to RH view matrix and vice versa. - inline void mtxViewFlipHandedness(float* __restrict _dst, const float* __restrict _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]; - } + /// + void mtxViewFlipHandedness(float* _dst, const float* _src); - inline void calcNormal(float _result[3], float _va[3], float _vb[3], float _vc[3]) - { - float ba[3]; - vec3Sub(ba, _vb, _va); + /// + void calcNormal(float _result[3], float _va[3], float _vb[3], float _vc[3]); - float ca[3]; - vec3Sub(ca, _vc, _va); + /// + void calcPlane(float _result[4], float _va[3], float _vb[3], float _vc[3]); - float baxca[3]; - vec3Cross(baxca, ba, ca); + /// + void calcLinearFit2D(float _result[2], const void* _points, uint32_t _stride, uint32_t _numPoints); - vec3Norm(_result, baxca); - } + /// + void calcLinearFit3D(float _result[3], const void* _points, uint32_t _stride, uint32_t _numPoints); - inline void calcPlane(float _result[4], float _va[3], float _vb[3], float _vc[3]) - { - float normal[3]; - calcNormal(normal, _va, _vb, _vc); + /// + void rgbToHsv(float _hsv[3], const float _rgb[3]); - _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); - } + /// + void hsvToRgb(float _rgb[3], const float _hsv[3]); } // namespace bx +#include "inline/fpumath.inl" + #endif // BX_FPU_MATH_H_HEADER_GUARD diff --git a/3rdparty/bx/include/bx/handlealloc.h b/3rdparty/bx/include/bx/handlealloc.h index bc8b42f..eb98cac 100644 --- a/3rdparty/bx/include/bx/handlealloc.h +++ b/3rdparty/bx/include/bx/handlealloc.h @@ -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 */ @@ -18,130 +18,65 @@ namespace bx public: static const uint16_t invalid = UINT16_MAX; - HandleAlloc(uint16_t _maxHandles) - : m_numHandles(0) - , m_maxHandles(_maxHandles) - { - reset(); - } + /// + HandleAlloc(uint16_t _maxHandles); - ~HandleAlloc() - { - } + /// + ~HandleAlloc(); - const uint16_t* getHandles() const - { - return getDensePtr(); - } + /// + const uint16_t* getHandles() const; - uint16_t getHandleAt(uint16_t _at) const - { - return getDensePtr()[_at]; - } + /// + uint16_t getHandleAt(uint16_t _at) const; - uint16_t getNumHandles() const - { - return m_numHandles; - } + /// + uint16_t getNumHandles() const; - uint16_t getMaxHandles() const - { - return m_maxHandles; - } + /// + uint16_t getMaxHandles() const; - uint16_t alloc() - { - if (m_numHandles < m_maxHandles) - { - uint16_t index = m_numHandles; - ++m_numHandles; + /// + uint16_t alloc(); - uint16_t* dense = getDensePtr(); - uint16_t handle = dense[index]; - uint16_t* sparse = getSparsePtr(); - sparse[handle] = index; - return handle; - } + /// + bool isValid(uint16_t _handle) const; - return invalid; - } + /// + void free(uint16_t _handle); - bool isValid(uint16_t _handle) const - { - uint16_t* dense = getDensePtr(); - uint16_t* sparse = getSparsePtr(); - uint16_t index = sparse[_handle]; - - return index < m_numHandles - && dense[index] == _handle - ; - } - - void free(uint16_t _handle) - { - uint16_t* dense = getDensePtr(); - uint16_t* sparse = getSparsePtr(); - uint16_t index = sparse[_handle]; - --m_numHandles; - uint16_t temp = dense[m_numHandles]; - dense[m_numHandles] = _handle; - sparse[temp] = index; - dense[index] = temp; - } - - void reset() - { - m_numHandles = 0; - uint16_t* dense = getDensePtr(); - for (uint16_t ii = 0, num = m_maxHandles; ii < num; ++ii) - { - dense[ii] = ii; - } - } + /// + void reset(); private: HandleAlloc(); - uint16_t* getDensePtr() const - { - uint8_t* ptr = (uint8_t*)reinterpret_cast(this); - return (uint16_t*)&ptr[sizeof(HandleAlloc)]; - } + /// + uint16_t* getDensePtr() const; - uint16_t* getSparsePtr() const - { - return &getDensePtr()[m_maxHandles]; - } + /// + uint16_t* getSparsePtr() const; uint16_t m_numHandles; uint16_t m_maxHandles; }; - 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); - } + /// + HandleAlloc* createHandleAlloc(AllocatorI* _allocator, uint16_t _maxHandles); - inline void destroyHandleAlloc(AllocatorI* _allocator, HandleAlloc* _handleAlloc) - { - _handleAlloc->~HandleAlloc(); - BX_FREE(_allocator, _handleAlloc); - } + /// + void destroyHandleAlloc(AllocatorI* _allocator, HandleAlloc* _handleAlloc); /// template class HandleAllocT : public HandleAlloc { public: - HandleAllocT() - : HandleAlloc(MaxHandlesT) - { - } + /// + HandleAllocT(); - ~HandleAllocT() - { - } + /// + ~HandleAllocT(); private: uint16_t m_padding[2*MaxHandlesT]; @@ -154,170 +89,51 @@ namespace bx public: static const uint16_t invalid = UINT16_MAX; - HandleListT() - { - reset(); - } + /// + HandleListT(); - void pushBack(uint16_t _handle) - { - insertAfter(m_back, _handle); - } + /// + void pushBack(uint16_t _handle); - uint16_t popBack() - { - uint16_t last = invalid != m_back - ? m_back - : m_front - ; + /// + uint16_t popBack(); - if (invalid != last) - { - remove(last); - } + /// + void pushFront(uint16_t _handle); - return last; - } + /// + uint16_t popFront(); - void pushFront(uint16_t _handle) - { - insertBefore(m_front, _handle); - } + /// + uint16_t getFront() const; - uint16_t popFront() - { - uint16_t front = m_front; + /// + uint16_t getBack() const; - if (invalid != front) - { - remove(front); - } + /// + uint16_t getNext(uint16_t _handle) const; - return front; - } + /// + uint16_t getPrev(uint16_t _handle) const; - uint16_t getFront() const - { - return m_front; - } + /// + void remove(uint16_t _handle); - uint16_t getBack() const - { - return m_back; - } - - uint16_t getNext(uint16_t _handle) const - { - BX_CHECK(isValid(_handle), "Invalid handle %d!", _handle); - const Link& curr = m_links[_handle]; - return curr.m_next; - } - - uint16_t getPrev(uint16_t _handle) const - { - BX_CHECK(isValid(_handle), "Invalid handle %d!", _handle); - const Link& curr = m_links[_handle]; - return curr.m_prev; - } - - void remove(uint16_t _handle) - { - BX_CHECK(isValid(_handle), "Invalid handle %d!", _handle); - Link& curr = m_links[_handle]; - - if (invalid != curr.m_prev) - { - Link& prev = m_links[curr.m_prev]; - prev.m_next = curr.m_next; - } - else - { - m_front = curr.m_next; - } - - if (invalid != curr.m_next) - { - Link& next = m_links[curr.m_next]; - next.m_prev = curr.m_prev; - } - else - { - m_back = curr.m_prev; - } - - curr.m_prev = invalid; - curr.m_next = invalid; - } - - void reset() - { - memset(m_links, 0xff, sizeof(m_links) ); - m_front = invalid; - m_back = invalid; - } + /// + void reset(); private: - void insertBefore(uint16_t _before, uint16_t _handle) - { - Link& curr = m_links[_handle]; - curr.m_next = _before; + /// + void insertBefore(uint16_t _before, uint16_t _handle); - if (invalid != _before) - { - Link& link = m_links[_before]; - if (invalid != link.m_prev) - { - Link& prev = m_links[link.m_prev]; - prev.m_next = _handle; - } + /// + void insertAfter(uint16_t _after, uint16_t _handle); - curr.m_prev = link.m_prev; - link.m_prev = _handle; - } + /// + bool isValid(uint16_t _handle) const; - updateFrontBack(_handle); - } - - void insertAfter(uint16_t _after, uint16_t _handle) - { - Link& curr = m_links[_handle]; - curr.m_prev = _after; - - if (invalid != _after) - { - Link& link = m_links[_after]; - if (invalid != link.m_next) - { - Link& next = m_links[link.m_next]; - next.m_prev = _handle; - } - - curr.m_next = link.m_next; - link.m_next = _handle; - } - - updateFrontBack(_handle); - } - - bool isValid(uint16_t _handle) const - { - return _handle < MaxHandlesT; - } - - void updateFrontBack(uint16_t _handle) - { - Link& curr = m_links[_handle]; - - if (invalid == curr.m_prev) - { - m_front = _handle; - } - - if (invalid == curr.m_next) - { - m_back = _handle; - } - } + /// + void updateFrontBack(uint16_t _handle); uint16_t m_front; uint16_t m_back; @@ -338,89 +154,50 @@ namespace bx public: static const uint16_t invalid = UINT16_MAX; - HandleAllocLruT() - { - reset(); - } + /// + HandleAllocLruT(); - ~HandleAllocLruT() - { - } + /// + ~HandleAllocLruT(); - const uint16_t* getHandles() const - { - return m_alloc.getHandles(); - } + /// + const uint16_t* getHandles() const; - uint16_t getHandleAt(uint16_t _at) const - { - return m_alloc.getHandleAt(_at); - } + /// + uint16_t getHandleAt(uint16_t _at) const; - uint16_t getNumHandles() const - { - return m_alloc.getNumHandles(); - } + /// + uint16_t getNumHandles() const; - uint16_t getMaxHandles() const - { - return m_alloc.getMaxHandles(); - } + /// + uint16_t getMaxHandles() const; - uint16_t alloc() - { - uint16_t handle = m_alloc.alloc(); - if (invalid != handle) - { - m_list.pushFront(handle); - } - return handle; - } + /// + uint16_t alloc(); - bool isValid(uint16_t _handle) const - { - return m_alloc.isValid(_handle); - } + /// + bool isValid(uint16_t _handle) const; - void free(uint16_t _handle) - { - BX_CHECK(isValid(_handle), "Invalid handle %d!", _handle); - m_list.remove(_handle); - m_alloc.free(_handle); - } + /// + void free(uint16_t _handle); - void touch(uint16_t _handle) - { - BX_CHECK(isValid(_handle), "Invalid handle %d!", _handle); - m_list.remove(_handle); - m_list.pushFront(_handle); - } + /// + void touch(uint16_t _handle); - uint16_t getFront() const - { - return m_list.getFront(); - } + /// + uint16_t getFront() const; - uint16_t getBack() const - { - return m_list.getBack(); - } + /// + uint16_t getBack() const; - uint16_t getNext(uint16_t _handle) const - { - return m_list.getNext(_handle); - } + /// + uint16_t getNext(uint16_t _handle) const; - uint16_t getPrev(uint16_t _handle) const - { - return m_list.getPrev(_handle); - } + /// + uint16_t getPrev(uint16_t _handle) const; - void reset() - { - m_list.reset(); - m_alloc.reset(); - } + /// + void reset(); private: HandleListT m_list; @@ -434,103 +211,34 @@ namespace bx public: static const uint16_t invalid = UINT16_MAX; - HandleHashMapT() - : m_maxCapacity(MaxCapacityT) - { - reset(); - } + /// + HandleHashMapT(); - ~HandleHashMapT() - { - } + /// + ~HandleHashMapT(); - bool insert(KeyT _key, uint16_t _handle) - { - if (invalid == _handle) - { - return false; - } + /// + bool insert(KeyT _key, uint16_t _handle); - const KeyT hash = mix(_key); - const uint32_t firstIdx = hash % MaxCapacityT; - uint32_t idx = firstIdx; - do - { - if (m_handle[idx] == invalid) - { - m_key[idx] = _key; - m_handle[idx] = _handle; - ++m_numElements; - return true; - } + /// + bool removeByKey(KeyT _key); - if (m_key[idx] == _key) - { - return false; - } + /// + bool removeByHandle(uint16_t _handle); - idx = (idx + 1) % MaxCapacityT; + /// + uint16_t find(KeyT _key) const; - } while (idx != firstIdx); + /// + void reset(); - return false; - } + /// + uint32_t getNumElements() const; - bool removeByKey(KeyT _key) - { - uint32_t idx = findIndex(_key); - if (UINT32_MAX != idx) - { - removeIndex(idx); - return true; - } - - return false; - } - - bool removeByHandle(uint16_t _handle) - { - if (invalid != _handle) - { - for (uint32_t idx = 0; idx < MaxCapacityT; ++idx) - { - if (m_handle[idx] == _handle) - { - removeIndex(idx); - } - } - } - - return false; - } - - uint16_t find(KeyT _key) const - { - uint32_t idx = findIndex(_key); - if (UINT32_MAX != idx) - { - return m_handle[idx]; - } - - return invalid; - } - - void reset() - { - memset(m_handle, 0xff, sizeof(m_handle) ); - m_numElements = 0; - } - - uint32_t getNumElements() const - { - return m_numElements; - } - - uint32_t getMaxCapacity() const - { - return m_maxCapacity; - } + /// + uint32_t getMaxCapacity() const; + /// struct Iterator { uint16_t handle; @@ -541,104 +249,24 @@ namespace bx uint32_t num; }; - Iterator first() const - { - Iterator it; - it.handle = invalid; - it.pos = 0; - it.num = m_numElements; + /// + Iterator first() const; - if (0 == it.num) - { - return it; - } - - ++it.num; - next(it); - return it; - } - - bool next(Iterator& _it) const - { - if (0 == _it.num) - { - return false; - } - - for ( - ;_it.pos < MaxCapacityT && invalid == m_handle[_it.pos] - ; ++_it.pos - ); - _it.handle = m_handle[_it.pos]; - ++_it.pos; - --_it.num; - return true; - } + /// + bool next(Iterator& _it) const; private: - uint32_t findIndex(KeyT _key) const - { - const KeyT hash = mix(_key); + /// + uint32_t findIndex(KeyT _key) const; - const uint32_t firstIdx = hash % MaxCapacityT; - uint32_t idx = firstIdx; - do - { - if (m_handle[idx] == invalid) - { - return UINT32_MAX; - } + /// + void removeIndex(uint32_t _idx); - if (m_key[idx] == _key) - { - return idx; - } + /// + uint32_t mix(uint32_t _x) const; - idx = (idx + 1) % MaxCapacityT; - - } while (idx != firstIdx); - - return UINT32_MAX; - } - - void removeIndex(uint32_t _idx) - { - m_handle[_idx] = invalid; - --m_numElements; - - for (uint32_t idx = (_idx + 1) % MaxCapacityT - ; m_handle[idx] != invalid - ; idx = (idx + 1) % MaxCapacityT) - { - if (m_handle[idx] != invalid) - { - const KeyT key = m_key[idx]; - if (idx != findIndex(key) ) - { - const uint16_t handle = m_handle[idx]; - m_handle[idx] = invalid; - --m_numElements; - insert(key, handle); - } - } - } - } - - uint32_t mix(uint32_t _x) const - { - const uint32_t tmp0 = uint32_mul(_x, UINT32_C(2246822519) ); - const uint32_t tmp1 = uint32_rol(tmp0, 13); - const uint32_t result = uint32_mul(tmp1, UINT32_C(2654435761) ); - return result; - } - - uint64_t mix(uint64_t _x) const - { - const uint64_t tmp0 = uint64_mul(_x, UINT64_C(14029467366897019727) ); - const uint64_t tmp1 = uint64_rol(tmp0, 31); - const uint64_t result = uint64_mul(tmp1, UINT64_C(11400714785074694791) ); - return result; - } + /// + uint64_t mix(uint64_t _x) const; uint32_t m_maxCapacity; uint32_t m_numElements; @@ -654,86 +282,41 @@ namespace bx public: static const uint16_t invalid = UINT16_MAX; - HandleHashMapAllocT() - { - reset(); - } + /// + HandleHashMapAllocT(); - ~HandleHashMapAllocT() - { - } + /// + ~HandleHashMapAllocT(); - uint16_t alloc(KeyT _key) - { - uint16_t handle = m_alloc.alloc(); - if (invalid == handle) - { - return invalid; - } + /// + uint16_t alloc(KeyT _key); - bool ok = m_table.insert(_key, handle); - if (!ok) - { - m_alloc.free(handle); - return invalid; - } + /// + void free(KeyT _key); - return handle; - } + /// + void free(uint16_t _handle); - void free(KeyT _key) - { - uint16_t handle = m_table.find(_key); - if (invalid == handle) - { - return; - } + /// + uint16_t find(KeyT _key) const; - m_table.removeByKey(_key); - m_alloc.free(handle); - } + /// + const uint16_t* getHandles() const; - void free(uint16_t _handle) - { - m_table.removeByHandle(_handle); - m_alloc.free(_handle); - } + /// + uint16_t getHandleAt(uint16_t _at) const; - uint16_t find(KeyT _key) const - { - return m_table.find(_key); - } + /// + uint16_t getNumHandles() const; - const uint16_t* getHandles() const - { - return m_alloc.getHandles(); - } + /// + uint16_t getMaxHandles() const; - uint16_t getHandleAt(uint16_t _at) const - { - return m_alloc.getHandleAt(_at); - } + /// + bool isValid(uint16_t _handle) const; - uint16_t getNumHandles() const - { - return m_alloc.getNumHandles(); - } - - uint16_t getMaxHandles() const - { - return m_alloc.getMaxHandles(); - } - - bool isValid(uint16_t _handle) const - { - return m_alloc.isValid(_handle); - } - - void reset() - { - m_table.reset(); - m_alloc.reset(); - } + /// + void reset(); private: HandleHashMapT m_table; @@ -742,4 +325,6 @@ namespace bx } // namespace bx +#include "inline/handlealloc.inl" + #endif // BX_HANDLE_ALLOC_H_HEADER_GUARD diff --git a/3rdparty/bx/include/bx/hash.h b/3rdparty/bx/include/bx/hash.h index 6e2f084..feade56 100644 --- a/3rdparty/bx/include/bx/hash.h +++ b/3rdparty/bx/include/bx/hash.h @@ -1,145 +1,47 @@ /* - * 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_HASH_H_HEADER_GUARD #define BX_HASH_H_HEADER_GUARD -#include "bx.h" +#include "allocator.h" // isAligned +#include "string.h" // StringView namespace bx { -// MurmurHash2 was written by Austin Appleby, and is placed in the public -// domain. The author hereby disclaims copyright to this source code. - -#define MURMUR_M 0x5bd1e995 -#define MURMUR_R 24 -#define mmix(_h, _k) { _k *= MURMUR_M; _k ^= _k >> MURMUR_R; _k *= MURMUR_M; _h *= MURMUR_M; _h ^= _k; } - + /// MurmurHash2 was written by Austin Appleby, and is placed in the public + /// domain. The author hereby disclaims copyright to this source code. + /// class HashMurmur2A { public: - void begin(uint32_t _seed = 0) - { - m_hash = _seed; - m_tail = 0; - m_count = 0; - m_size = 0; - } + /// + void begin(uint32_t _seed = 0); - void add(const void* _data, int _len) - { - if (BX_ENABLED(BX_PLATFORM_EMSCRIPTEN) - && BX_UNLIKELY(!isPtrAligned(_data, 4) ) ) - { - addUnaligned(_data, _len); - return; - } + /// + void add(const void* _data, int _len); - addAligned(_data, _len); - } + /// + void addAligned(const void* _data, int _len); - void addAligned(const void* _data, int _len) - { - const uint8_t* data = (const uint8_t*)_data; - m_size += _len; - - mixTail(data, _len); - - while(_len >= 4) - { - uint32_t kk = *(uint32_t*)data; - - mmix(m_hash, kk); - - data += 4; - _len -= 4; - } - - mixTail(data, _len); - } - - void addUnaligned(const void* _data, int _len) - { - const uint8_t* data = (const uint8_t*)_data; - m_size += _len; - - mixTail(data, _len); - - while(_len >= 4) - { - uint32_t kk; - readUnaligned(data, kk); - - mmix(m_hash, kk); - - data += 4; - _len -= 4; - } - - mixTail(data, _len); - } + /// + void addUnaligned(const void* _data, int _len); + /// template - void add(Ty _value) - { - add(&_value, sizeof(Ty) ); - } + void add(Ty _value); - uint32_t end() - { - mmix(m_hash, m_tail); - mmix(m_hash, m_size); - - m_hash ^= m_hash >> 13; - m_hash *= MURMUR_M; - m_hash ^= m_hash >> 15; - - return m_hash; - } + /// + uint32_t end(); private: - static void readUnaligned(const void* _data, uint32_t& _out) - { - const uint8_t* data = (const uint8_t*)_data; - if (BX_ENABLED(BX_CPU_ENDIAN_BIG) ) - { - _out = 0 - | data[0]<<24 - | data[1]<<16 - | data[2]<<8 - | data[3] - ; - } - else - { - _out = 0 - | data[0] - | data[1]<<8 - | data[2]<<16 - | data[3]<<24 - ; - } - } + /// + static void readUnaligned(const void* _data, uint32_t& _out); - void mixTail(const uint8_t*& _data, int& _len) - { - while( _len && ((_len<4) || m_count) ) - { - m_tail |= (*_data++) << (m_count * 8); - - m_count++; - _len--; - - if(m_count == 4) - { - mmix(m_hash, m_tail); - m_tail = 0; - m_count = 0; - } - } - } + /// + void mixTail(const uint8_t*& _data, int& _len); uint32_t m_hash; uint32_t m_tail; @@ -147,25 +49,21 @@ namespace bx uint32_t m_size; }; -#undef MURMUR_M -#undef MURMUR_R -#undef mmix - - inline uint32_t hashMurmur2A(const void* _data, uint32_t _size) - { - HashMurmur2A murmur; - murmur.begin(); - murmur.add(_data, (int)_size); - return murmur.end(); - } + /// + uint32_t hashMurmur2A(const void* _data, uint32_t _size); + /// template - inline uint32_t hashMurmur2A(const Ty& _data) - { - BX_STATIC_ASSERT(BX_TYPE_IS_POD(Ty) ); - return hashMurmur2A(&_data, sizeof(Ty) ); - } + uint32_t hashMurmur2A(const Ty& _data); + + /// + uint32_t hashMurmur2A(const StringView& _data); + + /// + uint32_t hashMurmur2A(const char* _data); } // namespace bx +#include "inline/hash.inl" + #endif // BX_HASH_H_HEADER_GUARD diff --git a/3rdparty/bx/include/bx/inline/allocator.inl b/3rdparty/bx/include/bx/inline/allocator.inl new file mode 100644 index 0000000..8a4898d --- /dev/null +++ b/3rdparty/bx/include/bx/inline/allocator.inl @@ -0,0 +1,104 @@ +/* + * Copyright 2010-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bx#license-bsd-2-clause + */ + +#ifndef BX_ALLOCATOR_H_HEADER_GUARD +# error "Must be included from bx/allocator.h" +#endif // BX_ALLOCATOR_H_HEADER_GUARD + +namespace bx +{ + inline AllocatorI::~AllocatorI() + { + } + + inline bool isAligned(const void* _ptr, size_t _align) + { + union { const void* ptr; uintptr_t addr; } un; + un.ptr = _ptr; + return 0 == (un.addr & (_align-1) ); + } + + inline void* alignPtr(void* _ptr, size_t _extra, size_t _align) + { + union { void* ptr; uintptr_t addr; } un; + un.ptr = _ptr; + uintptr_t unaligned = un.addr + _extra; // space for header + uintptr_t mask = _align-1; + uintptr_t aligned = BX_ALIGN_MASK(unaligned, mask); + un.addr = aligned; + return un.ptr; + } + + inline void* alloc(AllocatorI* _allocator, size_t _size, size_t _align, const char* _file, uint32_t _line) + { + return _allocator->realloc(NULL, _size, _align, _file, _line); + } + + inline void free(AllocatorI* _allocator, void* _ptr, size_t _align, const char* _file, uint32_t _line) + { + _allocator->realloc(_ptr, 0, _align, _file, _line); + } + + inline void* realloc(AllocatorI* _allocator, void* _ptr, size_t _size, size_t _align, const char* _file, uint32_t _line) + { + return _allocator->realloc(_ptr, _size, _align, _file, _line); + } + + inline void* alignedAlloc(AllocatorI* _allocator, size_t _size, size_t _align, const char* _file, uint32_t _line) + { + size_t total = _size + _align; + uint8_t* ptr = (uint8_t*)alloc(_allocator, total, 0, _file, _line); + uint8_t* aligned = (uint8_t*)alignPtr(ptr, sizeof(uint32_t), _align); + uint32_t* header = (uint32_t*)aligned - 1; + *header = uint32_t(aligned - ptr); + return aligned; + } + + inline void alignedFree(AllocatorI* _allocator, void* _ptr, size_t _align, const char* _file, uint32_t _line) + { + BX_UNUSED(_align); + uint8_t* aligned = (uint8_t*)_ptr; + uint32_t* header = (uint32_t*)aligned - 1; + uint8_t* ptr = aligned - *header; + free(_allocator, ptr, 0, _file, _line); + } + + inline void* alignedRealloc(AllocatorI* _allocator, void* _ptr, size_t _size, size_t _align, const char* _file, uint32_t _line) + { + if (NULL == _ptr) + { + return alignedAlloc(_allocator, _size, _align, _file, _line); + } + + uint8_t* aligned = (uint8_t*)_ptr; + uint32_t offset = *( (uint32_t*)aligned - 1); + uint8_t* ptr = aligned - offset; + size_t total = _size + _align; + ptr = (uint8_t*)realloc(_allocator, ptr, total, 0, _file, _line); + uint8_t* newAligned = (uint8_t*)alignPtr(ptr, sizeof(uint32_t), _align); + + if (newAligned == aligned) + { + return aligned; + } + + aligned = ptr + offset; + memMove(newAligned, aligned, _size); + uint32_t* header = (uint32_t*)newAligned - 1; + *header = uint32_t(newAligned - ptr); + return newAligned; + } + + template + inline void deleteObject(AllocatorI* _allocator, ObjectT* _object, size_t _align, const char* _file, uint32_t _line) + { + if (NULL != _object) + { + _object->~ObjectT(); + free(_allocator, _object, _align, _file, _line); + } + } + +} // namespace bx diff --git a/3rdparty/bx/include/bx/inline/bx.inl b/3rdparty/bx/include/bx/inline/bx.inl new file mode 100644 index 0000000..f8e9c63 --- /dev/null +++ b/3rdparty/bx/include/bx/inline/bx.inl @@ -0,0 +1,35 @@ +/* + * Copyright 2010-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bx#license-bsd-2-clause + */ + +#ifndef BX_H_HEADER_GUARD +# error "Must be included from bx/bx.h!" +#endif // BX_H_HEADER_GUARD + +namespace bx +{ + template + inline bool isEnabled() + { + return true; + } + + template<> + inline bool isEnabled() + { + return false; + } + + inline bool ignoreC4127(bool _x) + { + return _x; + } + + template + inline void xchg(Ty& _a, Ty& _b) + { + Ty tmp = _a; _a = _b; _b = tmp; + } + +} // namespace bx diff --git a/3rdparty/bx/include/bx/inline/easing.inl b/3rdparty/bx/include/bx/inline/easing.inl new file mode 100644 index 0000000..b23edb1 --- /dev/null +++ b/3rdparty/bx/include/bx/inline/easing.inl @@ -0,0 +1,256 @@ +/* + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bx#license-bsd-2-clause + */ + +#ifndef BX_EASING_H_HEADER_GUARD +# error "Must be included from bx/easing.h!" +#endif // BX_EASING_H_HEADER_GUARD + +namespace bx +{ + template + float easeOut(float _t) + { + return 1.0f - ease(1.0f - _t); + } + + template + float easeMix(float _t) + { + return _t < 0.5f + ? easeFrom0toH(2.0f*_t)*0.5f + : easeFromHto1(2.0f*_t - 1.0f)*0.5f + 0.5f + ; + } + + inline float easeLinear(float _t) + { + return _t; + } + + inline float easeInQuad(float _t) + { + return fsq(_t); + } + + inline float easeOutQuad(float _t) + { + return easeOut(_t); + } + + inline float easeInOutQuad(float _t) + { + return easeMix(_t); + } + + inline float easeOutInQuad(float _t) + { + return easeMix(_t); + } + + inline float easeInCubic(float _t) + { + return _t*_t*_t; + } + + inline float easeOutCubic(float _t) + { + return easeOut(_t); + } + + inline float easeInOutCubic(float _t) + { + return easeMix(_t); + } + + inline float easeOutInCubic(float _t) + { + return easeMix(_t); + } + + inline float easeInQuart(float _t) + { + return _t*_t*_t*_t; + } + + inline float easeOutQuart(float _t) + { + return easeOut(_t); + } + + inline float easeInOutQuart(float _t) + { + return easeMix(_t); + } + + inline float easeOutInQuart(float _t) + { + return easeMix(_t); + } + + inline float easeInQuint(float _t) + { + return _t*_t*_t*_t*_t; + } + + inline float easeOutQuint(float _t) + { + return easeOut(_t); + } + + inline float easeInOutQuint(float _t) + { + return easeMix(_t); + } + + inline float easeOutInQuint(float _t) + { + return easeMix(_t); + } + + inline float easeInSine(float _t) + { + return 1.0f - fcos(_t*piHalf); + } + + inline float easeOutSine(float _t) + { + return easeOut(_t); + } + + inline float easeInOutSine(float _t) + { + return easeMix(_t); + } + + inline float easeOutInSine(float _t) + { + return easeMix(_t); + } + + inline float easeInExpo(float _t) + { + return fpow(2.0f, 10.0f * (_t - 1.0f) ) - 0.001f; + } + + inline float easeOutExpo(float _t) + { + return easeOut(_t); + } + + inline float easeInOutExpo(float _t) + { + return easeMix(_t); + } + + inline float easeOutInExpo(float _t) + { + return easeMix(_t); + } + + inline float easeInCirc(float _t) + { + return -(fsqrt(1.0f - _t*_t) - 1.0f); + } + + inline float easeOutCirc(float _t) + { + return easeOut(_t); + } + + inline float easeInOutCirc(float _t) + { + return easeMix(_t); + } + + inline float easeOutInCirc(float _t) + { + return easeMix(_t); + } + + 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; + } + + inline float easeInElastic(float _t) + { + return easeOut(_t); + } + + inline float easeInOutElastic(float _t) + { + return easeMix(_t); + } + + inline float easeOutInElastic(float _t) + { + return easeMix(_t); + } + + inline float easeInBack(float _t) + { + return easeInCubic(_t) - _t*fsin(_t*pi); + } + + inline float easeOutBack(float _t) + { + return easeOut(_t); + } + + inline float easeInOutBack(float _t) + { + return easeMix(_t); + } + + inline float easeOutInBack(float _t) + { + return easeMix(_t); + } + + inline float easeOutBounce(float _t) + { + if (4.0f/11.0f > _t) + { + return 121.0f/16.0f*_t*_t; + } + + if (8.0f/11.0f > _t) + { + return 363.0f/40.0f*_t*_t + - 99.0f/10.0f*_t + + 17.0f/ 5.0f + ; + } + + if (9.0f/10.0f > _t) + { + return 4356.0f/ 361.0f*_t*_t + - 35442.0f/1805.0f*_t + + 16061.0f/1805.0f + ; + } + + return 54.0f/ 5.0f*_t*_t + - 513.0f/25.0f*_t + + 268.0f/25.0f + ; + } + + inline float easeInBounce(float _t) + { + return easeOut(_t); + } + + inline float easeInOutBounce(float _t) + { + return easeMix(_t); + } + + inline float easeOutInBounce(float _t) + { + return easeMix(_t); + } + +} // namespace bx diff --git a/3rdparty/bx/include/bx/inline/endian.inl b/3rdparty/bx/include/bx/inline/endian.inl new file mode 100644 index 0000000..6ec7572 --- /dev/null +++ b/3rdparty/bx/include/bx/inline/endian.inl @@ -0,0 +1,78 @@ +/* + * Copyright 2010-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bx#license-bsd-2-clause + */ + +#ifndef BX_ENDIAN_H_HEADER_GUARD +# error "Must be included from bx/endian.h!" +#endif // BX_ENDIAN_H_HEADER_GUARD + +namespace bx +{ + inline int16_t endianSwap(int16_t _in) + { + return (int16_t)endianSwap( (uint16_t)_in); + } + + inline uint16_t endianSwap(uint16_t _in) + { + return (_in>>8) | (_in<<8); + } + + inline int32_t endianSwap(int32_t _in) + { + return (int32_t)endianSwap( (uint32_t)_in); + } + + inline uint32_t endianSwap(uint32_t _in) + { + return ( _in >>24) | ( _in <<24) + | ( (_in&0x00ff0000)>> 8) | ( (_in&0x0000ff00)<< 8) + ; + } + + inline int64_t endianSwap(int64_t _in) + { + return (int64_t)endianSwap( (uint64_t)_in); + } + + inline uint64_t endianSwap(uint64_t _in) + { + return (_in >>56) | ( _in <<56) + | ( (_in&UINT64_C(0x00ff000000000000) )>>40) | ( (_in&UINT64_C(0x000000000000ff00) )<<40) + | ( (_in&UINT64_C(0x0000ff0000000000) )>>24) | ( (_in&UINT64_C(0x0000000000ff0000) )<<24) + | ( (_in&UINT64_C(0x000000ff00000000) )>> 8) | ( (_in&UINT64_C(0x00000000ff000000) )<< 8) + ; + } + + template + inline Ty toLittleEndian(const Ty _in) + { +#if BX_CPU_ENDIAN_BIG + return endianSwap(_in); +#else + return _in; +#endif // BX_CPU_ENDIAN_BIG + } + + template + inline Ty toBigEndian(const Ty _in) + { +#if BX_CPU_ENDIAN_LITTLE + return endianSwap(_in); +#else + return _in; +#endif // BX_CPU_ENDIAN_LITTLE + } + + template + inline Ty toHostEndian(const Ty _in, bool _fromLittleEndian) + { +#if BX_CPU_ENDIAN_LITTLE + return _fromLittleEndian ? _in : endianSwap(_in); +#else + return _fromLittleEndian ? endianSwap(_in) : _in; +#endif // BX_CPU_ENDIAN_LITTLE + } + +} // namespace bx diff --git a/3rdparty/bx/include/bx/inline/error.inl b/3rdparty/bx/include/bx/inline/error.inl new file mode 100644 index 0000000..ac16c6f --- /dev/null +++ b/3rdparty/bx/include/bx/inline/error.inl @@ -0,0 +1,73 @@ +/* + * Copyright 2010-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bx#license-bsd-2-clause + */ + +#ifndef BX_ERROR_H_HEADER_GUARD +# error "Must be included from bx/error!" +#endif // BX_ERROR_H_HEADER_GUARD + +namespace bx +{ + inline Error::Error() + : m_code(0) + { + } + + inline void Error::reset() + { + m_code = 0; + m_msg.clear(); + } + + inline void Error::setError(ErrorResult _errorResult, const StringView& _msg) + { + BX_CHECK(0 != _errorResult.code, "Invalid ErrorResult passed to setError!"); + + if (!isOk() ) + { + return; + } + + m_code = _errorResult.code; + m_msg = _msg; + } + + inline bool Error::isOk() const + { + return 0 == m_code; + } + + inline ErrorResult Error::get() const + { + ErrorResult result = { m_code }; + return result; + } + + inline const StringView& Error::getMessage() const + { + return m_msg; + } + + inline bool Error::operator==(const ErrorResult& _rhs) const + { + return _rhs.code == m_code; + } + + inline bool Error::operator!=(const ErrorResult& _rhs) const + { + return _rhs.code != m_code; + } + + inline ErrorScope::ErrorScope(Error* _err) + : m_err(_err) + { + BX_CHECK(NULL != _err, "_err can't be NULL"); + } + + inline ErrorScope::~ErrorScope() + { + BX_CHECK(m_err->isOk(), "Error: %d", m_err->get().code); + } + +} // namespace bx diff --git a/3rdparty/bx/include/bx/inline/fpumath.inl b/3rdparty/bx/include/bx/inline/fpumath.inl new file mode 100644 index 0000000..e87b827 --- /dev/null +++ b/3rdparty/bx/include/bx/inline/fpumath.inl @@ -0,0 +1,1352 @@ +/* + * 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 + 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 + 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(_result, xx, yy, width, height, _near, _far, _oglNdc); + } + + template + inline void mtxProj_impl(float* _result, const float _fov[4], float _near, float _far, bool _oglNdc) + { + mtxProj_impl(_result, _fov[0], _fov[1], _fov[2], _fov[3], _near, _far, _oglNdc); + } + + template + 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(_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(_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(_result, _fov, _near, _far, _oglNdc); + } + + inline void mtxProj(float* _result, float _fovy, float _aspect, float _near, float _far, bool _oglNdc) + { + mtxProj_impl(_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(_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(_result, _fov, _near, _far, _oglNdc); + } + + inline void mtxProjLh(float* _result, float _fovy, float _aspect, float _near, float _far, bool _oglNdc) + { + mtxProj_impl(_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(_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(_result, _fov, _near, _far, _oglNdc); + } + + inline void mtxProjRh(float* _result, float _fovy, float _aspect, float _near, float _far, bool _oglNdc) + { + mtxProj_impl(_result, _fovy, _aspect, _near, _far, _oglNdc); + } + + template + 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 + 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(_result, xx, yy, width, height, _near, _oglNdc); + } + + template + inline void mtxProjInf_impl(float* _result, const float _fov[4], float _near, bool _oglNdc) + { + mtxProjInf_impl(_result, _fov[0], _fov[1], _fov[2], _fov[3], _near, _oglNdc); + } + + template + 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(_result, 0.0f, 0.0f, width, height, _near, _oglNdc); + } + + inline void mtxProjInf(float* _result, const float _fov[4], float _near, bool _oglNdc) + { + mtxProjInf_impl(_result, _fov, _near, _oglNdc); + } + + inline void mtxProjInf(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, bool _oglNdc) + { + mtxProjInf_impl(_result, _ut, _dt, _lt, _rt, _near, _oglNdc); + } + + inline void mtxProjInf(float* _result, float _fovy, float _aspect, float _near, bool _oglNdc) + { + mtxProjInf_impl(_result, _fovy, _aspect, _near, _oglNdc); + } + + inline void mtxProjInfLh(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, bool _oglNdc) + { + mtxProjInf_impl(_result, _ut, _dt, _lt, _rt, _near, _oglNdc); + } + + inline void mtxProjInfLh(float* _result, const float _fov[4], float _near, bool _oglNdc) + { + mtxProjInf_impl(_result, _fov, _near, _oglNdc); + } + + inline void mtxProjInfLh(float* _result, float _fovy, float _aspect, float _near, bool _oglNdc) + { + mtxProjInf_impl(_result, _fovy, _aspect, _near, _oglNdc); + } + + inline void mtxProjInfRh(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, bool _oglNdc) + { + mtxProjInf_impl(_result, _ut, _dt, _lt, _rt, _near, _oglNdc); + } + + inline void mtxProjInfRh(float* _result, const float _fov[4], float _near, bool _oglNdc) + { + mtxProjInf_impl(_result, _fov, _near, _oglNdc); + } + + inline void mtxProjInfRh(float* _result, float _fovy, float _aspect, float _near, bool _oglNdc) + { + mtxProjInf_impl(_result, _fovy, _aspect, _near, _oglNdc); + } + + inline void mtxProjRevInfLh(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, bool _oglNdc) + { + mtxProjInf_impl(_result, _ut, _dt, _lt, _rt, _near, _oglNdc); + } + + inline void mtxProjRevInfLh(float* _result, const float _fov[4], float _near, bool _oglNdc) + { + mtxProjInf_impl(_result, _fov, _near, _oglNdc); + } + + inline void mtxProjRevInfLh(float* _result, float _fovy, float _aspect, float _near, bool _oglNdc) + { + mtxProjInf_impl(_result, _fovy, _aspect, _near, _oglNdc); + } + + inline void mtxProjRevInfRh(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, bool _oglNdc) + { + mtxProjInf_impl(_result, _ut, _dt, _lt, _rt, _near, _oglNdc); + } + + inline void mtxProjRevInfRh(float* _result, const float _fov[4], float _near, bool _oglNdc) + { + mtxProjInf_impl(_result, _fov, _near, _oglNdc); + } + + inline void mtxProjRevInfRh(float* _result, float _fovy, float _aspect, float _near, bool _oglNdc) + { + mtxProjInf_impl(_result, _fovy, _aspect, _near, _oglNdc); + } + + template + 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(_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(_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(_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 new file mode 100644 index 0000000..8738c3d --- /dev/null +++ b/3rdparty/bx/include/bx/inline/handlealloc.inl @@ -0,0 +1,708 @@ +/* + * Copyright 2010-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bx#license-bsd-2-clause + */ + +#ifndef BX_HANDLE_ALLOC_H_HEADER_GUARD +# error "Must be included from bx/handlealloc.h!" +#endif // BX_HANDLE_ALLOC_H_HEADER_GUARD + +namespace bx +{ + inline HandleAlloc::HandleAlloc(uint16_t _maxHandles) + : m_numHandles(0) + , m_maxHandles(_maxHandles) + { + reset(); + } + + inline HandleAlloc::~HandleAlloc() + { + } + + inline const uint16_t* HandleAlloc::getHandles() const + { + return getDensePtr(); + } + + inline uint16_t HandleAlloc::getHandleAt(uint16_t _at) const + { + return getDensePtr()[_at]; + } + + inline uint16_t HandleAlloc::getNumHandles() const + { + return m_numHandles; + } + + inline uint16_t HandleAlloc::getMaxHandles() const + { + return m_maxHandles; + } + + inline uint16_t HandleAlloc::alloc() + { + if (m_numHandles < m_maxHandles) + { + uint16_t index = m_numHandles; + ++m_numHandles; + + uint16_t* dense = getDensePtr(); + uint16_t handle = dense[index]; + uint16_t* sparse = getSparsePtr(); + sparse[handle] = index; + return handle; + } + + return invalid; + } + + inline bool HandleAlloc::isValid(uint16_t _handle) const + { + uint16_t* dense = getDensePtr(); + uint16_t* sparse = getSparsePtr(); + uint16_t index = sparse[_handle]; + + return index < m_numHandles + && dense[index] == _handle + ; + } + + inline void HandleAlloc::free(uint16_t _handle) + { + uint16_t* dense = getDensePtr(); + uint16_t* sparse = getSparsePtr(); + uint16_t index = sparse[_handle]; + --m_numHandles; + uint16_t temp = dense[m_numHandles]; + dense[m_numHandles] = _handle; + sparse[temp] = index; + dense[index] = temp; + } + + inline void HandleAlloc::reset() + { + m_numHandles = 0; + uint16_t* dense = getDensePtr(); + for (uint16_t ii = 0, num = m_maxHandles; ii < num; ++ii) + { + dense[ii] = ii; + } + } + + inline uint16_t* HandleAlloc::getDensePtr() const + { + uint8_t* ptr = (uint8_t*)reinterpret_cast(this); + return (uint16_t*)&ptr[sizeof(HandleAlloc)]; + } + + inline uint16_t* HandleAlloc::getSparsePtr() const + { + return &getDensePtr()[m_maxHandles]; + } + + 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); + } + + inline void destroyHandleAlloc(AllocatorI* _allocator, HandleAlloc* _handleAlloc) + { + _handleAlloc->~HandleAlloc(); + BX_FREE(_allocator, _handleAlloc); + } + + template + inline HandleAllocT::HandleAllocT() + : HandleAlloc(MaxHandlesT) + { + } + + template + inline HandleAllocT::~HandleAllocT() + { + } + + template + inline HandleListT::HandleListT() + { + reset(); + } + + template + inline void HandleListT::pushBack(uint16_t _handle) + { + insertAfter(m_back, _handle); + } + + template + inline uint16_t HandleListT::popBack() + { + uint16_t last = invalid != m_back + ? m_back + : m_front + ; + + if (invalid != last) + { + remove(last); + } + + return last; + } + + template + inline void HandleListT::pushFront(uint16_t _handle) + { + insertBefore(m_front, _handle); + } + + template + inline uint16_t HandleListT::popFront() + { + uint16_t front = m_front; + + if (invalid != front) + { + remove(front); + } + + return front; + } + + template + inline uint16_t HandleListT::getFront() const + { + return m_front; + } + + template + inline uint16_t HandleListT::getBack() const + { + return m_back; + } + + template + inline uint16_t HandleListT::getNext(uint16_t _handle) const + { + BX_CHECK(isValid(_handle), "Invalid handle %d!", _handle); + const Link& curr = m_links[_handle]; + return curr.m_next; + } + + template + inline uint16_t HandleListT::getPrev(uint16_t _handle) const + { + BX_CHECK(isValid(_handle), "Invalid handle %d!", _handle); + const Link& curr = m_links[_handle]; + return curr.m_prev; + } + + template + inline void HandleListT::remove(uint16_t _handle) + { + BX_CHECK(isValid(_handle), "Invalid handle %d!", _handle); + Link& curr = m_links[_handle]; + + if (invalid != curr.m_prev) + { + Link& prev = m_links[curr.m_prev]; + prev.m_next = curr.m_next; + } + else + { + m_front = curr.m_next; + } + + if (invalid != curr.m_next) + { + Link& next = m_links[curr.m_next]; + next.m_prev = curr.m_prev; + } + else + { + m_back = curr.m_prev; + } + + curr.m_prev = invalid; + curr.m_next = invalid; + } + + template + inline void HandleListT::reset() + { + memSet(m_links, 0xff, sizeof(m_links) ); + m_front = invalid; + m_back = invalid; + } + + template + inline void HandleListT::insertBefore(uint16_t _before, uint16_t _handle) + { + Link& curr = m_links[_handle]; + curr.m_next = _before; + + if (invalid != _before) + { + Link& link = m_links[_before]; + if (invalid != link.m_prev) + { + Link& prev = m_links[link.m_prev]; + prev.m_next = _handle; + } + + curr.m_prev = link.m_prev; + link.m_prev = _handle; + } + + updateFrontBack(_handle); + } + + template + inline void HandleListT::insertAfter(uint16_t _after, uint16_t _handle) + { + Link& curr = m_links[_handle]; + curr.m_prev = _after; + + if (invalid != _after) + { + Link& link = m_links[_after]; + if (invalid != link.m_next) + { + Link& next = m_links[link.m_next]; + next.m_prev = _handle; + } + + curr.m_next = link.m_next; + link.m_next = _handle; + } + + updateFrontBack(_handle); + } + + template + inline bool HandleListT::isValid(uint16_t _handle) const + { + return _handle < MaxHandlesT; + } + + template + inline void HandleListT::updateFrontBack(uint16_t _handle) + { + Link& curr = m_links[_handle]; + + if (invalid == curr.m_prev) + { + m_front = _handle; + } + + if (invalid == curr.m_next) + { + m_back = _handle; + } + } + + template + inline HandleAllocLruT::HandleAllocLruT() + { + reset(); + } + + template + inline HandleAllocLruT::~HandleAllocLruT() + { + } + + template + inline const uint16_t* HandleAllocLruT::getHandles() const + { + return m_alloc.getHandles(); + } + + template + inline uint16_t HandleAllocLruT::getHandleAt(uint16_t _at) const + { + return m_alloc.getHandleAt(_at); + } + + template + inline uint16_t HandleAllocLruT::getNumHandles() const + { + return m_alloc.getNumHandles(); + } + + template + inline uint16_t HandleAllocLruT::getMaxHandles() const + { + return m_alloc.getMaxHandles(); + } + + template + inline uint16_t HandleAllocLruT::alloc() + { + uint16_t handle = m_alloc.alloc(); + if (invalid != handle) + { + m_list.pushFront(handle); + } + return handle; + } + + template + inline bool HandleAllocLruT::isValid(uint16_t _handle) const + { + return m_alloc.isValid(_handle); + } + + template + inline void HandleAllocLruT::free(uint16_t _handle) + { + BX_CHECK(isValid(_handle), "Invalid handle %d!", _handle); + m_list.remove(_handle); + m_alloc.free(_handle); + } + + template + inline void HandleAllocLruT::touch(uint16_t _handle) + { + BX_CHECK(isValid(_handle), "Invalid handle %d!", _handle); + m_list.remove(_handle); + m_list.pushFront(_handle); + } + + template + inline uint16_t HandleAllocLruT::getFront() const + { + return m_list.getFront(); + } + + template + inline uint16_t HandleAllocLruT::getBack() const + { + return m_list.getBack(); + } + + template + inline uint16_t HandleAllocLruT::getNext(uint16_t _handle) const + { + return m_list.getNext(_handle); + } + + template + inline uint16_t HandleAllocLruT::getPrev(uint16_t _handle) const + { + return m_list.getPrev(_handle); + } + + template + inline void HandleAllocLruT::reset() + { + m_list.reset(); + m_alloc.reset(); + } + + template + inline HandleHashMapT::HandleHashMapT() + : m_maxCapacity(MaxCapacityT) + { + reset(); + } + + template + inline HandleHashMapT::~HandleHashMapT() + { + } + + template + inline bool HandleHashMapT::insert(KeyT _key, uint16_t _handle) + { + if (invalid == _handle) + { + return false; + } + + const KeyT hash = mix(_key); + const uint32_t firstIdx = hash % MaxCapacityT; + uint32_t idx = firstIdx; + do + { + if (m_handle[idx] == invalid) + { + m_key[idx] = _key; + m_handle[idx] = _handle; + ++m_numElements; + return true; + } + + if (m_key[idx] == _key) + { + return false; + } + + idx = (idx + 1) % MaxCapacityT; + + } while (idx != firstIdx); + + return false; + } + + template + inline bool HandleHashMapT::removeByKey(KeyT _key) + { + uint32_t idx = findIndex(_key); + if (UINT32_MAX != idx) + { + removeIndex(idx); + return true; + } + + return false; + } + + template + inline bool HandleHashMapT::removeByHandle(uint16_t _handle) + { + if (invalid != _handle) + { + for (uint32_t idx = 0; idx < MaxCapacityT; ++idx) + { + if (m_handle[idx] == _handle) + { + removeIndex(idx); + } + } + } + + return false; + } + + template + inline uint16_t HandleHashMapT::find(KeyT _key) const + { + uint32_t idx = findIndex(_key); + if (UINT32_MAX != idx) + { + return m_handle[idx]; + } + + return invalid; + } + + template + inline void HandleHashMapT::reset() + { + memSet(m_handle, 0xff, sizeof(m_handle) ); + m_numElements = 0; + } + + template + inline uint32_t HandleHashMapT::getNumElements() const + { + return m_numElements; + } + + template + inline uint32_t HandleHashMapT::getMaxCapacity() const + { + return m_maxCapacity; + } + + template + inline typename HandleHashMapT::Iterator HandleHashMapT::first() const + { + Iterator it; + it.handle = invalid; + it.pos = 0; + it.num = m_numElements; + + if (0 == it.num) + { + return it; + } + + ++it.num; + next(it); + return it; + } + + template + inline bool HandleHashMapT::next(Iterator& _it) const + { + if (0 == _it.num) + { + return false; + } + + for ( + ;_it.pos < MaxCapacityT && invalid == m_handle[_it.pos] + ; ++_it.pos + ); + _it.handle = m_handle[_it.pos]; + ++_it.pos; + --_it.num; + return true; + } + + template + inline uint32_t HandleHashMapT::findIndex(KeyT _key) const + { + const KeyT hash = mix(_key); + + const uint32_t firstIdx = hash % MaxCapacityT; + uint32_t idx = firstIdx; + do + { + if (m_handle[idx] == invalid) + { + return UINT32_MAX; + } + + if (m_key[idx] == _key) + { + return idx; + } + + idx = (idx + 1) % MaxCapacityT; + + } while (idx != firstIdx); + + return UINT32_MAX; + } + + template + inline void HandleHashMapT::removeIndex(uint32_t _idx) + { + m_handle[_idx] = invalid; + --m_numElements; + + for (uint32_t idx = (_idx + 1) % MaxCapacityT + ; m_handle[idx] != invalid + ; idx = (idx + 1) % MaxCapacityT) + { + if (m_handle[idx] != invalid) + { + const KeyT key = m_key[idx]; + if (idx != findIndex(key) ) + { + const uint16_t handle = m_handle[idx]; + m_handle[idx] = invalid; + --m_numElements; + insert(key, handle); + } + } + } + } + + template + inline uint32_t HandleHashMapT::mix(uint32_t _x) const + { + const uint32_t tmp0 = uint32_mul(_x, UINT32_C(2246822519) ); + const uint32_t tmp1 = uint32_rol(tmp0, 13); + const uint32_t result = uint32_mul(tmp1, UINT32_C(2654435761) ); + return result; + } + + template + inline uint64_t HandleHashMapT::mix(uint64_t _x) const + { + const uint64_t tmp0 = uint64_mul(_x, UINT64_C(14029467366897019727) ); + const uint64_t tmp1 = uint64_rol(tmp0, 31); + const uint64_t result = uint64_mul(tmp1, UINT64_C(11400714785074694791) ); + return result; + } + + template + inline HandleHashMapAllocT::HandleHashMapAllocT() + { + reset(); + } + + template + inline HandleHashMapAllocT::~HandleHashMapAllocT() + { + } + + template + inline uint16_t HandleHashMapAllocT::alloc(KeyT _key) + { + uint16_t handle = m_alloc.alloc(); + if (invalid == handle) + { + return invalid; + } + + bool ok = m_table.insert(_key, handle); + if (!ok) + { + m_alloc.free(handle); + return invalid; + } + + return handle; + } + + template + inline void HandleHashMapAllocT::free(KeyT _key) + { + uint16_t handle = m_table.find(_key); + if (invalid == handle) + { + return; + } + + m_table.removeByKey(_key); + m_alloc.free(handle); + } + + template + inline void HandleHashMapAllocT::free(uint16_t _handle) + { + m_table.removeByHandle(_handle); + m_alloc.free(_handle); + } + + template + inline uint16_t HandleHashMapAllocT::find(KeyT _key) const + { + return m_table.find(_key); + } + + template + inline const uint16_t* HandleHashMapAllocT::getHandles() const + { + return m_alloc.getHandles(); + } + + template + inline uint16_t HandleHashMapAllocT::getHandleAt(uint16_t _at) const + { + return m_alloc.getHandleAt(_at); + } + + template + inline uint16_t HandleHashMapAllocT::getNumHandles() const + { + return m_alloc.getNumHandles(); + } + + template + inline uint16_t HandleHashMapAllocT::getMaxHandles() const + { + return m_alloc.getMaxHandles(); + } + + template + inline bool HandleHashMapAllocT::isValid(uint16_t _handle) const + { + return m_alloc.isValid(_handle); + } + + template + inline void HandleHashMapAllocT::reset() + { + m_table.reset(); + m_alloc.reset(); + } + +} // namespace bx diff --git a/3rdparty/bx/include/bx/inline/hash.inl b/3rdparty/bx/include/bx/inline/hash.inl new file mode 100644 index 0000000..50da33f --- /dev/null +++ b/3rdparty/bx/include/bx/inline/hash.inl @@ -0,0 +1,164 @@ +/* + * Copyright 2010-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bx#license-bsd-2-clause + */ + +#ifndef BX_HASH_H_HEADER_GUARD +# error "Must be included from bx/hash.h!" +#endif // BX_HASH_H_HEADER_GUARD + +namespace bx +{ +#define MURMUR_M 0x5bd1e995 +#define MURMUR_R 24 +#define mmix(_h, _k) { _k *= MURMUR_M; _k ^= _k >> MURMUR_R; _k *= MURMUR_M; _h *= MURMUR_M; _h ^= _k; } + + inline void HashMurmur2A::begin(uint32_t _seed) + { + m_hash = _seed; + m_tail = 0; + m_count = 0; + m_size = 0; + } + + inline void HashMurmur2A::add(const void* _data, int _len) + { + if (BX_UNLIKELY(!isAligned(_data, 4) ) ) + { + addUnaligned(_data, _len); + return; + } + + addAligned(_data, _len); + } + + inline void HashMurmur2A::addAligned(const void* _data, int _len) + { + const uint8_t* data = (const uint8_t*)_data; + m_size += _len; + + mixTail(data, _len); + + while(_len >= 4) + { + uint32_t kk = *(uint32_t*)data; + + mmix(m_hash, kk); + + data += 4; + _len -= 4; + } + + mixTail(data, _len); + } + + inline void HashMurmur2A::addUnaligned(const void* _data, int _len) + { + const uint8_t* data = (const uint8_t*)_data; + m_size += _len; + + mixTail(data, _len); + + while(_len >= 4) + { + uint32_t kk; + readUnaligned(data, kk); + + mmix(m_hash, kk); + + data += 4; + _len -= 4; + } + + mixTail(data, _len); + } + + template + inline void HashMurmur2A::add(Ty _value) + { + add(&_value, sizeof(Ty) ); + } + + inline uint32_t HashMurmur2A::end() + { + mmix(m_hash, m_tail); + mmix(m_hash, m_size); + + m_hash ^= m_hash >> 13; + m_hash *= MURMUR_M; + m_hash ^= m_hash >> 15; + + return m_hash; + } + + inline void HashMurmur2A::readUnaligned(const void* _data, uint32_t& _out) + { + const uint8_t* data = (const uint8_t*)_data; + if (BX_ENABLED(BX_CPU_ENDIAN_BIG) ) + { + _out = 0 + | data[0]<<24 + | data[1]<<16 + | data[2]<<8 + | data[3] + ; + } + else + { + _out = 0 + | data[0] + | data[1]<<8 + | data[2]<<16 + | data[3]<<24 + ; + } + } + + inline void HashMurmur2A::mixTail(const uint8_t*& _data, int& _len) + { + while( _len && ((_len<4) || m_count) ) + { + m_tail |= (*_data++) << (m_count * 8); + + m_count++; + _len--; + + if(m_count == 4) + { + mmix(m_hash, m_tail); + m_tail = 0; + m_count = 0; + } + } + } + +#undef MURMUR_M +#undef MURMUR_R +#undef mmix + + inline uint32_t hashMurmur2A(const void* _data, uint32_t _size) + { + HashMurmur2A murmur; + murmur.begin(); + murmur.add(_data, (int)_size); + return murmur.end(); + } + + template + inline uint32_t hashMurmur2A(const Ty& _data) + { + BX_STATIC_ASSERT(BX_TYPE_IS_POD(Ty) ); + return hashMurmur2A(&_data, sizeof(Ty) ); + } + + inline uint32_t hashMurmur2A(const StringView& _data) + { + return hashMurmur2A(_data.getPtr(), _data.getLength() ); + } + + inline uint32_t hashMurmur2A(const char* _data) + { + return hashMurmur2A(StringView(_data) ); + } + +} // namespace bx diff --git a/3rdparty/bx/include/bx/inline/mpscqueue.inl b/3rdparty/bx/include/bx/inline/mpscqueue.inl new file mode 100644 index 0000000..0216b50 --- /dev/null +++ b/3rdparty/bx/include/bx/inline/mpscqueue.inl @@ -0,0 +1,65 @@ +/* + * Copyright 2010-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bx#license-bsd-2-clause + */ + +#ifndef BX_MPSCQUEUE_H_HEADER_GUARD +# error "Must be included from bx/mpscqueue.h!" +#endif // BX_MPSCQUEUE_H_HEADER_GUARD + +namespace bx +{ + template + inline MpScUnboundedQueueT::MpScUnboundedQueueT() + { + } + + template + inline MpScUnboundedQueueT::~MpScUnboundedQueueT() + { + } + + template + inline void MpScUnboundedQueueT::push(Ty* _ptr) + { + MutexScope lock(m_write); + m_queue.push(_ptr); + } + + template + inline Ty* MpScUnboundedQueueT::peek() + { + return m_queue.peek(); + } + + template + inline Ty* MpScUnboundedQueueT::pop() + { + return m_queue.pop(); + } + + template + inline MpScUnboundedBlockingQueue::MpScUnboundedBlockingQueue() + { + } + + template + inline MpScUnboundedBlockingQueue::~MpScUnboundedBlockingQueue() + { + } + + template + inline void MpScUnboundedBlockingQueue::push(Ty* _ptr) + { + m_queue.push(_ptr); + m_sem.post(); + } + + template + inline Ty* MpScUnboundedBlockingQueue::pop() + { + m_sem.wait(); + return m_queue.pop(); + } + +} // namespace bx diff --git a/3rdparty/bx/include/bx/inline/mutex.inl b/3rdparty/bx/include/bx/inline/mutex.inl new file mode 100644 index 0000000..0d086bd --- /dev/null +++ b/3rdparty/bx/include/bx/inline/mutex.inl @@ -0,0 +1,23 @@ +/* + * Copyright 2010-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bx#license-bsd-2-clause + */ + +#ifndef BX_MUTEX_H_HEADER_GUARD +# error "Must be included from bx/mutex.h!" +#endif // BX_MUTEX_H_HEADER_GUARD + +namespace bx +{ + inline MutexScope::MutexScope(Mutex& _mutex) + : m_mutex(_mutex) + { + m_mutex.lock(); + } + + inline MutexScope::~MutexScope() + { + m_mutex.unlock(); + } + +} // namespace bx diff --git a/3rdparty/bx/include/bx/inline/pixelformat.inl b/3rdparty/bx/include/bx/inline/pixelformat.inl new file mode 100644 index 0000000..cd46892 --- /dev/null +++ b/3rdparty/bx/include/bx/inline/pixelformat.inl @@ -0,0 +1,945 @@ +/* + * Copyright 2010-2016 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bx#license-bsd-2-clause + */ + +#ifndef BX_PIXEL_FORMAT_H_HEADER_GUARD +# error "Must be included from bx/pixelformat.h" +#endif // BX_PIXEL_FORMAT_H_HEADER_GUARD + +namespace bx +{ + inline uint32_t toUnorm(float _value, float _scale) + { + return uint32_t(fround(fsaturate(_value) * _scale) ); + } + + inline float fromUnorm(uint32_t _value, float _scale) + { + return float(_value) / _scale; + } + + inline int32_t toSnorm(float _value, float _scale) + { + return int32_t(fround( + fclamp(_value, -1.0f, 1.0f) * _scale) + ); + } + + inline float fromSnorm(int32_t _value, float _scale) + { + return fmax(-1.0f, float(_value) / _scale); + } + + // R8 + inline void packR8(void* _dst, const float* _src) + { + uint8_t* dst = (uint8_t*)_dst; + dst[0] = uint8_t(toUnorm(_src[0], 255.0f) ); + } + + inline void unpackR8(float* _dst, const void* _src) + { + const uint8_t* src = (const uint8_t*)_src; + _dst[0] = fromUnorm(src[0], 255.0f); + _dst[1] = 0.0f; + _dst[2] = 0.0f; + _dst[3] = 1.0f; + } + + // R8S + inline void packR8S(void* _dst, const float* _src) + { + int8_t* dst = (int8_t*)_dst; + dst[0] = int8_t(toSnorm(_src[0], 127.0f) ); + } + + inline void unpackR8S(float* _dst, const void* _src) + { + const int8_t* src = (const int8_t*)_src; + _dst[0] = fromSnorm(src[0], 127.0f); + _dst[1] = 0.0f; + _dst[2] = 0.0f; + _dst[3] = 1.0f; + } + + // R8I + inline void packR8I(void* _dst, const float* _src) + { + int8_t* dst = (int8_t*)_dst; + dst[0] = int8_t(_src[0]); + } + + inline void unpackR8I(float* _dst, const void* _src) + { + const int8_t* src = (const int8_t*)_src; + _dst[0] = float(src[0]); + _dst[1] = 0.0f; + _dst[2] = 0.0f; + _dst[3] = 1.0f; + } + + // R8U + inline void packR8U(void* _dst, const float* _src) + { + uint8_t* dst = (uint8_t*)_dst; + dst[0] = uint8_t(_src[0]); + } + + inline void unpackR8U(float* _dst, const void* _src) + { + const uint8_t* src = (const uint8_t*)_src; + _dst[0] = float(src[0]); + _dst[1] = 0.0f; + _dst[2] = 0.0f; + _dst[3] = 1.0f; + } + + // RG8 + inline void packRg8(void* _dst, const float* _src) + { + uint8_t* dst = (uint8_t*)_dst; + dst[0] = uint8_t(toUnorm(_src[0], 255.0f) ); + dst[1] = uint8_t(toUnorm(_src[1], 255.0f) ); + } + + inline void unpackRg8(float* _dst, const void* _src) + { + const uint8_t* src = (const uint8_t*)_src; + _dst[0] = fromUnorm(src[0], 255.0f); + _dst[1] = fromUnorm(src[1], 255.0f); + _dst[2] = 0.0f; + _dst[3] = 1.0f; + } + + // RG8S + inline void packRg8S(void* _dst, const float* _src) + { + int8_t* dst = (int8_t*)_dst; + dst[0] = int8_t(toSnorm(_src[0], 127.0f) ); + dst[1] = int8_t(toSnorm(_src[1], 127.0f) ); + } + + inline void unpackRg8S(float* _dst, const void* _src) + { + const int8_t* src = (const int8_t*)_src; + _dst[0] = fromSnorm(src[0], 127.0f); + _dst[1] = fromSnorm(src[1], 127.0f); + _dst[2] = 0.0f; + _dst[3] = 1.0f; + } + + // RG8I + inline void packRg8I(void* _dst, const float* _src) + { + int8_t* dst = (int8_t*)_dst; + dst[0] = int8_t(_src[0]); + dst[1] = int8_t(_src[1]); + } + + inline void unpackRg8I(float* _dst, const void* _src) + { + const int8_t* src = (const int8_t*)_src; + _dst[0] = float(src[0]); + _dst[1] = float(src[1]); + _dst[2] = 0.0f; + _dst[3] = 1.0f; + } + + // RG8U + inline void packRg8U(void* _dst, const float* _src) + { + uint8_t* dst = (uint8_t*)_dst; + dst[0] = uint8_t(_src[0]); + dst[1] = uint8_t(_src[1]); + } + + inline void unpackRg8U(float* _dst, const void* _src) + { + const uint8_t* src = (const uint8_t*)_src; + _dst[0] = float(src[0]); + _dst[1] = float(src[1]); + _dst[2] = 0.0f; + _dst[3] = 1.0f; + } + + // RGB8 + inline void packRgb8(void* _dst, const float* _src) + { + uint8_t* dst = (uint8_t*)_dst; + dst[0] = uint8_t(toUnorm(_src[0], 255.0f) ); + dst[1] = uint8_t(toUnorm(_src[1], 255.0f) ); + dst[2] = uint8_t(toUnorm(_src[2], 255.0f) ); + } + + inline void unpackRgb8(float* _dst, const void* _src) + { + const uint8_t* src = (const uint8_t*)_src; + _dst[0] = fromUnorm(src[0], 255.0f); + _dst[1] = fromUnorm(src[1], 255.0f); + _dst[2] = fromUnorm(src[2], 255.0f); + _dst[3] = 1.0f; + } + + // RGB8S + inline void packRgb8S(void* _dst, const float* _src) + { + int8_t* dst = (int8_t*)_dst; + dst[0] = int8_t(toSnorm(_src[0], 127.0f) ); + dst[1] = int8_t(toSnorm(_src[1], 127.0f) ); + dst[2] = int8_t(toSnorm(_src[2], 127.0f) ); + } + + inline void unpackRgb8S(float* _dst, const void* _src) + { + const int8_t* src = (const int8_t*)_src; + _dst[0] = fromSnorm(src[0], 127.0f); + _dst[1] = fromSnorm(src[1], 127.0f); + _dst[2] = fromSnorm(src[2], 127.0f); + _dst[3] = 1.0f; + } + + // RGB8I + inline void packRgb8I(void* _dst, const float* _src) + { + int8_t* dst = (int8_t*)_dst; + dst[0] = int8_t(_src[0]); + dst[1] = int8_t(_src[1]); + dst[2] = int8_t(_src[2]); + } + + inline void unpackRgb8I(float* _dst, const void* _src) + { + const int8_t* src = (const int8_t*)_src; + _dst[0] = float(src[0]); + _dst[1] = float(src[1]); + _dst[2] = float(src[2]); + _dst[3] = 1.0f; + } + + // RGB8U + inline void packRgb8U(void* _dst, const float* _src) + { + uint8_t* dst = (uint8_t*)_dst; + dst[0] = uint8_t(_src[0]); + dst[1] = uint8_t(_src[1]); + dst[2] = uint8_t(_src[2]); + } + + inline void unpackRgb8U(float* _dst, const void* _src) + { + const uint8_t* src = (const uint8_t*)_src; + _dst[0] = float(src[0]); + _dst[1] = float(src[1]); + _dst[2] = float(src[2]); + _dst[3] = 1.0f; + } + + // BGRA8 + inline void packBgra8(void* _dst, const float* _src) + { + uint8_t* dst = (uint8_t*)_dst; + dst[2] = uint8_t(toUnorm(_src[0], 255.0f) ); + dst[1] = uint8_t(toUnorm(_src[1], 255.0f) ); + dst[0] = uint8_t(toUnorm(_src[2], 255.0f) ); + dst[3] = uint8_t(toUnorm(_src[3], 255.0f) ); + } + + inline void unpackBgra8(float* _dst, const void* _src) + { + const uint8_t* src = (const uint8_t*)_src; + _dst[0] = fromUnorm(src[2], 255.0f); + _dst[1] = fromUnorm(src[1], 255.0f); + _dst[2] = fromUnorm(src[0], 255.0f); + _dst[3] = fromUnorm(src[3], 255.0f); + } + + // RGBA8 + inline void packRgba8(void* _dst, const float* _src) + { + uint8_t* dst = (uint8_t*)_dst; + dst[0] = uint8_t(toUnorm(_src[0], 255.0f) ); + dst[1] = uint8_t(toUnorm(_src[1], 255.0f) ); + dst[2] = uint8_t(toUnorm(_src[2], 255.0f) ); + dst[3] = uint8_t(toUnorm(_src[3], 255.0f) ); + } + + inline void unpackRgba8(float* _dst, const void* _src) + { + const uint8_t* src = (const uint8_t*)_src; + _dst[0] = fromUnorm(src[0], 255.0f); + _dst[1] = fromUnorm(src[1], 255.0f); + _dst[2] = fromUnorm(src[2], 255.0f); + _dst[3] = fromUnorm(src[3], 255.0f); + } + + // RGBA8S + inline void packRgba8S(void* _dst, const float* _src) + { + int8_t* dst = (int8_t*)_dst; + dst[0] = int8_t(toSnorm(_src[0], 127.0f) ); + dst[1] = int8_t(toSnorm(_src[1], 127.0f) ); + dst[2] = int8_t(toSnorm(_src[2], 127.0f) ); + dst[3] = int8_t(toSnorm(_src[3], 127.0f) ); + } + + inline void unpackRgba8S(float* _dst, const void* _src) + { + const int8_t* src = (const int8_t*)_src; + _dst[0] = fromSnorm(src[0], 127.0f); + _dst[1] = fromSnorm(src[1], 127.0f); + _dst[2] = fromSnorm(src[2], 127.0f); + _dst[3] = fromSnorm(src[3], 127.0f); + } + + // RGBA8I + inline void packRgba8I(void* _dst, const float* _src) + { + int8_t* dst = (int8_t*)_dst; + dst[0] = int8_t(_src[0]); + dst[1] = int8_t(_src[1]); + dst[2] = int8_t(_src[2]); + dst[3] = int8_t(_src[3]); + } + + inline void unpackRgba8I(float* _dst, const void* _src) + { + const int8_t* src = (const int8_t*)_src; + _dst[0] = float(src[0]); + _dst[1] = float(src[1]); + _dst[2] = float(src[2]); + _dst[3] = float(src[3]); + } + + // RGBA8U + inline void packRgba8U(void* _dst, const float* _src) + { + uint8_t* dst = (uint8_t*)_dst; + dst[0] = uint8_t(_src[0]); + dst[1] = uint8_t(_src[1]); + dst[2] = uint8_t(_src[2]); + dst[3] = uint8_t(_src[3]); + } + + inline void unpackRgba8U(float* _dst, const void* _src) + { + const uint8_t* src = (const uint8_t*)_src; + _dst[0] = float(src[0]); + _dst[1] = float(src[1]); + _dst[2] = float(src[2]); + _dst[3] = float(src[3]); + } + + // R16 + inline void packR16(void* _dst, const float* _src) + { + uint16_t* dst = (uint16_t*)_dst; + dst[0] = uint16_t(toUnorm(_src[0], 65535.0f) ); + } + + inline void unpackR16(float* _dst, const void* _src) + { + const uint16_t* src = (const uint16_t*)_src; + _dst[0] = fromUnorm(src[0], 65535.0f); + _dst[1] = 0.0f; + _dst[2] = 0.0f; + _dst[3] = 1.0f; + } + + // R16S + inline void packR16S(void* _dst, const float* _src) + { + int16_t* dst = (int16_t*)_dst; + dst[0] = int16_t(toSnorm(_src[0], 32767.0f) ); + } + + inline void unpackR16S(float* _dst, const void* _src) + { + const int16_t* src = (const int16_t*)_src; + _dst[0] = fromSnorm(src[0], 32767.0f); + _dst[1] = 0.0f; + _dst[2] = 0.0f; + _dst[3] = 1.0f; + } + + // R16I + inline void packR16I(void* _dst, const float* _src) + { + int16_t* dst = (int16_t*)_dst; + dst[0] = int16_t(_src[0]); + } + + inline void unpackR16I(float* _dst, const void* _src) + { + const int16_t* src = (const int16_t*)_src; + _dst[0] = float(src[0]); + _dst[1] = 0.0f; + _dst[2] = 0.0f; + _dst[3] = 1.0f; + } + + // R16U + inline void packR16U(void* _dst, const float* _src) + { + uint16_t* dst = (uint16_t*)_dst; + dst[0] = uint16_t(_src[0]); + } + + inline void unpackR16U(float* _dst, const void* _src) + { + const uint16_t* src = (const uint16_t*)_src; + _dst[0] = float(src[0]); + } + + // R16F + inline void packR16F(void* _dst, const float* _src) + { + uint16_t* dst = (uint16_t*)_dst; + dst[0] = halfFromFloat(_src[0]); + } + + inline void unpackR16F(float* _dst, const void* _src) + { + const uint16_t* src = (const uint16_t*)_src; + _dst[0] = halfToFloat(src[0]); + _dst[1] = 0.0f; + _dst[2] = 0.0f; + _dst[3] = 1.0f; + } + + // RG16 + inline void packRg16(void* _dst, const float* _src) + { + uint16_t* dst = (uint16_t*)_dst; + dst[0] = uint16_t(toUnorm(_src[0], 65535.0f) ); + dst[1] = uint16_t(toUnorm(_src[1], 65535.0f) ); + } + + inline void unpackRg16(float* _dst, const void* _src) + { + const uint16_t* src = (const uint16_t*)_src; + _dst[0] = fromUnorm(src[0], 65535.0f); + _dst[1] = fromUnorm(src[1], 65535.0f); + _dst[2] = 0.0f; + _dst[3] = 1.0f; + } + + // RG16S + inline void packRg16S(void* _dst, const float* _src) + { + int16_t* dst = (int16_t*)_dst; + dst[0] = int16_t(toSnorm(_src[0], 32767.0f) ); + dst[1] = int16_t(toSnorm(_src[1], 32767.0f) ); + } + + inline void unpackRg16S(float* _dst, const void* _src) + { + const int16_t* src = (const int16_t*)_src; + _dst[0] = fromSnorm(src[0], 32767.0f); + _dst[1] = fromSnorm(src[1], 32767.0f); + _dst[2] = 0.0f; + _dst[3] = 1.0f; + } + + // RG16I + inline void packRg16I(void* _dst, const float* _src) + { + int16_t* dst = (int16_t*)_dst; + dst[0] = int16_t(_src[0]); + dst[1] = int16_t(_src[1]); + } + + inline void unpackRg16I(float* _dst, const void* _src) + { + const int16_t* src = (const int16_t*)_src; + _dst[0] = float(src[0]); + _dst[1] = float(src[1]); + _dst[2] = 0.0f; + _dst[3] = 1.0f; + } + + // RG16U + inline void packRg16U(void* _dst, const float* _src) + { + uint16_t* dst = (uint16_t*)_dst; + dst[0] = uint16_t(_src[0]); + dst[1] = uint16_t(_src[1]); + } + + inline void unpackRg16U(float* _dst, const void* _src) + { + const uint16_t* src = (const uint16_t*)_src; + _dst[0] = float(src[0]); + _dst[1] = float(src[1]); + _dst[2] = 0.0f; + _dst[3] = 1.0f; + } + + // RG16F + inline void packRg16F(void* _dst, const float* _src) + { + uint16_t* dst = (uint16_t*)_dst; + dst[0] = halfFromFloat(_src[0]); + dst[1] = halfFromFloat(_src[1]); + } + + inline void unpackRg16F(float* _dst, const void* _src) + { + const uint16_t* src = (const uint16_t*)_src; + _dst[0] = halfToFloat(src[0]); + _dst[1] = halfToFloat(src[1]); + _dst[2] = 0.0f; + _dst[3] = 1.0f; + } + + // RGBA16 + inline void packRgba16(void* _dst, const float* _src) + { + uint16_t* dst = (uint16_t*)_dst; + dst[0] = uint16_t(toUnorm(_src[0], 65535.0f) ); + dst[1] = uint16_t(toUnorm(_src[1], 65535.0f) ); + dst[2] = uint16_t(toUnorm(_src[2], 65535.0f) ); + dst[3] = uint16_t(toUnorm(_src[3], 65535.0f) ); + } + + inline void unpackRgba16(float* _dst, const void* _src) + { + const uint16_t* src = (const uint16_t*)_src; + _dst[0] = fromUnorm(src[0], 65535.0f); + _dst[1] = fromUnorm(src[1], 65535.0f); + _dst[2] = fromUnorm(src[2], 65535.0f); + _dst[3] = fromUnorm(src[3], 65535.0f); + } + + // RGBA16S + inline void packRgba16S(void* _dst, const float* _src) + { + int16_t* dst = (int16_t*)_dst; + dst[0] = int16_t(toSnorm(_src[0], 32767.0f) ); + dst[1] = int16_t(toSnorm(_src[1], 32767.0f) ); + dst[2] = int16_t(toSnorm(_src[2], 32767.0f) ); + dst[3] = int16_t(toSnorm(_src[3], 32767.0f) ); + } + + inline void unpackRgba16S(float* _dst, const void* _src) + { + const int16_t* src = (const int16_t*)_src; + _dst[0] = fromSnorm(src[0], 32767.0f); + _dst[1] = fromSnorm(src[1], 32767.0f); + _dst[2] = fromSnorm(src[2], 32767.0f); + _dst[3] = fromSnorm(src[3], 32767.0f); + } + + // RGBA16I + inline void packRgba16I(void* _dst, const float* _src) + { + int16_t* dst = (int16_t*)_dst; + dst[0] = int16_t(_src[0]); + dst[1] = int16_t(_src[1]); + dst[2] = int16_t(_src[2]); + dst[3] = int16_t(_src[3]); + } + + inline void unpackRgba16I(float* _dst, const void* _src) + { + const int16_t* src = (const int16_t*)_src; + _dst[0] = float(src[0]); + _dst[1] = float(src[1]); + _dst[2] = float(src[2]); + _dst[3] = float(src[3]); + } + + // RGBA16U + inline void packRgba16U(void* _dst, const float* _src) + { + uint16_t* dst = (uint16_t*)_dst; + dst[0] = uint16_t(_src[0]); + dst[1] = uint16_t(_src[1]); + dst[2] = uint16_t(_src[2]); + dst[3] = uint16_t(_src[3]); + } + + inline void unpackRgba16U(float* _dst, const void* _src) + { + const uint16_t* src = (const uint16_t*)_src; + _dst[0] = float(src[0]); + _dst[1] = float(src[1]); + _dst[2] = float(src[2]); + _dst[3] = float(src[3]); + } + + // RGBA16F + inline void packRgba16F(void* _dst, const float* _src) + { + uint16_t* dst = (uint16_t*)_dst; + dst[0] = halfFromFloat(_src[0]); + dst[1] = halfFromFloat(_src[1]); + dst[2] = halfFromFloat(_src[2]); + dst[3] = halfFromFloat(_src[3]); + } + + inline void unpackRgba16F(float* _dst, const void* _src) + { + const uint16_t* src = (const uint16_t*)_src; + _dst[0] = halfToFloat(src[0]); + _dst[1] = halfToFloat(src[1]); + _dst[2] = halfToFloat(src[2]); + _dst[3] = halfToFloat(src[3]); + } + + // R24 + inline void packR24(void* _dst, const float* _src) + { + uint8_t* dst = (uint8_t*)_dst; + const uint32_t rr = uint32_t(toUnorm(_src[0], 16777216.0f) ); + dst[0] = uint8_t(rr ); + dst[1] = uint8_t(rr>> 8); + dst[2] = uint8_t(rr>>16); + } + + inline void unpackR24(float* _dst, const void* _src) + { + const uint8_t* src = (const uint8_t*)_src; + const uint32_t rr = 0 + | (src[0] ) + | (src[1]<< 8) + | (src[2]<<16) + ; + + _dst[0] = fromUnorm(rr, 16777216.0f); + _dst[1] = 0.0f; + _dst[2] = 0.0f; + _dst[3] = 1.0f; + } + + // R24G8 + inline void packR24G8(void* _dst, const float* _src) + { + uint8_t* dst = (uint8_t*)_dst; + const uint32_t rr = uint32_t(toUnorm(_src[0], 16777216.0f) ); + dst[0] = uint8_t(rr ); + dst[1] = uint8_t(rr>> 8); + dst[2] = uint8_t(rr>>16); + dst[3] = uint8_t(toUnorm(_src[1], 255.0f) ); + } + + inline void unpackR24G8(float* _dst, const void* _src) + { + const uint8_t* src = (const uint8_t*)_src; + const uint32_t rr = 0 + | (src[0] ) + | (src[1]<< 8) + | (src[2]<<16) + ; + + _dst[0] = fromUnorm(rr, 16777216.0f); + _dst[1] = fromUnorm(src[3], 255.0f); + _dst[2] = 0.0f; + _dst[3] = 1.0f; + } + + // R32I + inline void packR32I(void* _dst, const float* _src) + { + memCopy(_dst, _src, 4); + } + + inline void unpackR32I(float* _dst, const void* _src) + { + memCopy(_dst, _src, 4); + } + + // R32U + inline void packR32U(void* _dst, const float* _src) + { + memCopy(_dst, _src, 4); + } + + inline void unpackR32U(float* _dst, const void* _src) + { + memCopy(_dst, _src, 4); + } + + // R32F + inline void packR32F(void* _dst, const float* _src) + { + memCopy(_dst, _src, 4); + } + + inline void unpackR32F(float* _dst, const void* _src) + { + memCopy(_dst, _src, 4); + } + + // RG32I + inline void packRg32I(void* _dst, const float* _src) + { + memCopy(_dst, _src, 8); + } + + inline void unpackRg32I(float* _dst, const void* _src) + { + memCopy(_dst, _src, 8); + } + + // RG32U + inline void packRg32U(void* _dst, const float* _src) + { + memCopy(_dst, _src, 8); + } + + inline void unpackRg32U(float* _dst, const void* _src) + { + memCopy(_dst, _src, 8); + } + + // RG32F + inline void packRg32F(void* _dst, const float* _src) + { + memCopy(_dst, _src, 8); + } + + inline void unpackRg32F(float* _dst, const void* _src) + { + memCopy(_dst, _src, 8); + } + + template + inline void encodeRgbE(float* _dst, const float* _src) + { + // Reference: + // https://www.opengl.org/registry/specs/EXT/texture_shared_exponent.txt + const int32_t expMax = (1<>23) & 0xff) - 127) ) ) + 1 + expBias; + float denom = fpow(2.0f, float(expShared - expBias - MantissaBits) ); + + if ( (1< + inline void decodeRgbE(float* _dst, const float* _src) + { + const int32_t expBias = (1<<(ExpBits - 1) ) - 1; + const float exponent = _src[3]-float(expBias-MantissaBits); + const float scale = fpow(2.0f, exponent); + _dst[0] = _src[0] * scale; + _dst[1] = _src[1] * scale; + _dst[2] = _src[2] * scale; + } + + // RGB9E5F + inline void packRgb9E5F(void* _dst, const float* _src) + { + float tmp[4]; + encodeRgbE<9, 5>(tmp, _src); + + *( (uint32_t*)_dst) = 0 + | (uint32_t(tmp[0]) ) + | (uint32_t(tmp[1]) << 9) + | (uint32_t(tmp[2]) <<18) + | (uint32_t(tmp[3]) <<27) + ; + } + + inline void unpackRgb9E5F(float* _dst, const void* _src) + { + uint32_t packed = *( (const uint32_t*)_src); + + float tmp[4]; + tmp[0] = float( ( (packed ) & 0x1ff) ) / 511.0f; + tmp[1] = float( ( (packed>> 9) & 0x1ff) ) / 511.0f; + tmp[2] = float( ( (packed>>18) & 0x1ff) ) / 511.0f; + tmp[3] = float( ( (packed>>27) & 0x1f) ); + + decodeRgbE<9, 5>(_dst, tmp); + } + + // RGBA32I + inline void packRgba32I(void* _dst, const float* _src) + { + memCopy(_dst, _src, 16); + } + + inline void unpackRgba32I(float* _dst, const void* _src) + { + memCopy(_dst, _src, 16); + } + + // RGBA32U + inline void packRgba32U(void* _dst, const float* _src) + { + memCopy(_dst, _src, 16); + } + + inline void unpackRgba32U(float* _dst, const void* _src) + { + memCopy(_dst, _src, 16); + } + + // RGBA32F + inline void packRgba32F(void* _dst, const float* _src) + { + memCopy(_dst, _src, 16); + } + + inline void unpackRgba32F(float* _dst, const void* _src) + { + memCopy(_dst, _src, 16); + } + + // R5G6B5 + inline void packR5G6B5(void* _dst, const float* _src) + { + *( (uint16_t*)_dst) = 0 + | uint16_t(toUnorm(_src[0], 31.0f)<<11) + | uint16_t(toUnorm(_src[1], 63.0f)<< 5) + | uint16_t(toUnorm(_src[2], 31.0f) ) + ; + } + + inline void unpackR5G6B5(float* _dst, const void* _src) + { + uint16_t packed = *( (const uint16_t*)_src); + _dst[0] = float( ( (packed>>11) & 0x1f) ) / 31.0f; + _dst[1] = float( ( (packed>> 5) & 0x3f) ) / 63.0f; + _dst[2] = float( ( (packed ) & 0x1f) ) / 31.0f; + _dst[3] = 1.0f; + } + + // RGBA4 + inline void packRgba4(void* _dst, const float* _src) + { + *( (uint16_t*)_dst) = 0 + | uint16_t(toUnorm(_src[0], 15.0f) ) + | uint16_t(toUnorm(_src[1], 15.0f)<< 4) + | uint16_t(toUnorm(_src[2], 15.0f)<< 8) + | uint16_t(toUnorm(_src[3], 15.0f)<<12) + ; + } + + inline void unpackRgba4(float* _dst, const void* _src) + { + uint16_t packed = *( (const uint16_t*)_src); + _dst[0] = float( ( (packed ) & 0xf) ) / 15.0f; + _dst[1] = float( ( (packed>> 4) & 0xf) ) / 15.0f; + _dst[2] = float( ( (packed>> 8) & 0xf) ) / 15.0f; + _dst[3] = float( ( (packed>>12) & 0xf) ) / 15.0f; + } + + // RGBA4 + inline void packBgra4(void* _dst, const float* _src) + { + *( (uint16_t*)_dst) = 0 + | uint16_t(toUnorm(_src[0], 15.0f)<< 8) + | uint16_t(toUnorm(_src[1], 15.0f)<< 4) + | uint16_t(toUnorm(_src[2], 15.0f) ) + | uint16_t(toUnorm(_src[3], 15.0f)<<12) + ; + } + + inline void unpackBgra4(float* _dst, const void* _src) + { + uint16_t packed = *( (const uint16_t*)_src); + _dst[0] = float( ( (packed>> 8) & 0xf) ) / 15.0f; + _dst[1] = float( ( (packed>> 4) & 0xf) ) / 15.0f; + _dst[2] = float( ( (packed ) & 0xf) ) / 15.0f; + _dst[3] = float( ( (packed>>12) & 0xf) ) / 15.0f; + } + + // RGB5A1 + inline void packRgb5a1(void* _dst, const float* _src) + { + *( (uint16_t*)_dst) = 0 + | uint16_t(toUnorm(_src[0], 31.0f) ) + | uint16_t(toUnorm(_src[1], 31.0f)<< 5) + | uint16_t(toUnorm(_src[2], 31.0f)<<10) + | uint16_t(toUnorm(_src[3], 1.0f)<<15) + ; + } + + inline void unpackRgb5a1(float* _dst, const void* _src) + { + uint16_t packed = *( (const uint16_t*)_src); + _dst[0] = float( ( (packed ) & 0x1f) ) / 31.0f; + _dst[1] = float( ( (packed>> 5) & 0x1f) ) / 31.0f; + _dst[2] = float( ( (packed>>10) & 0x1f) ) / 31.0f; + _dst[3] = float( ( (packed>>14) & 0x1) ); + } + + // BGR5A1 + inline void packBgr5a1(void* _dst, const float* _src) + { + *( (uint16_t*)_dst) = 0 + | uint16_t(toUnorm(_src[0], 31.0f)<<10) + | uint16_t(toUnorm(_src[1], 31.0f)<< 5) + | uint16_t(toUnorm(_src[2], 31.0f) ) + | uint16_t(toUnorm(_src[3], 1.0f)<<15) + ; + } + + inline void unpackBgr5a1(float* _dst, const void* _src) + { + uint16_t packed = *( (const uint16_t*)_src); + _dst[0] = float( ( (packed>>10) & 0x1f) ) / 31.0f; + _dst[1] = float( ( (packed>> 5) & 0x1f) ) / 31.0f; + _dst[2] = float( ( (packed ) & 0x1f) ) / 31.0f; + _dst[3] = float( ( (packed>>14) & 0x1) ); + } + + // RGB10A2 + inline void packRgb10A2(void* _dst, const float* _src) + { + *( (uint32_t*)_dst) = 0 + | (toUnorm(_src[0], 1023.0f) ) + | (toUnorm(_src[1], 1023.0f)<<10) + | (toUnorm(_src[2], 1023.0f)<<20) + | (toUnorm(_src[3], 3.0f)<<30) + ; + } + + inline void unpackRgb10A2(float* _dst, const void* _src) + { + uint32_t packed = *( (const uint32_t*)_src); + _dst[0] = float( ( (packed ) & 0x3ff) ) / 1023.0f; + _dst[1] = float( ( (packed>>10) & 0x3ff) ) / 1023.0f; + _dst[2] = float( ( (packed>>20) & 0x3ff) ) / 1023.0f; + _dst[3] = float( ( (packed>>30) & 0x3) ) / 3.0f; + } + + // R11G11B10F + inline void packR11G11B10F(void* _dst, const float* _src) + { + *( (uint32_t*)_dst) = 0 + | ( (halfFromFloat(_src[0])>> 4) & 0x7ff) + | ( (halfFromFloat(_src[0])<< 7) & 0x3ff800) + | ( (halfFromFloat(_src[0])<<17) & 0xffc00000) + ; + } + + inline void unpackR11G11B10F(float* _dst, const void* _src) + { + uint32_t packed = *( (const uint32_t*)_src); + _dst[0] = halfToFloat( (packed<< 4) & 0x7ff0); + _dst[1] = halfToFloat( (packed>> 7) & 0x7ff0); + _dst[2] = halfToFloat( (packed>>17) & 0x7fe0); + _dst[3] = 1.0f; + } +} // namespace bx diff --git a/3rdparty/bx/include/bx/inline/readerwriter.inl b/3rdparty/bx/include/bx/inline/readerwriter.inl new file mode 100644 index 0000000..c2eb72a --- /dev/null +++ b/3rdparty/bx/include/bx/inline/readerwriter.inl @@ -0,0 +1,452 @@ +/* + * Copyright 2010-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bx#license-bsd-2-clause + */ + +#ifndef BX_READERWRITER_H_HEADER_GUARD +# error "Must be included from bx/readerwriter!" +#endif // BX_READERWRITER_H_HEADER_GUARD + +namespace bx +{ + inline ReaderI::~ReaderI() + { + } + + inline WriterI::~WriterI() + { + } + + inline SeekerI::~SeekerI() + { + } + + inline ReaderOpenI::~ReaderOpenI() + { + } + + inline WriterOpenI::~WriterOpenI() + { + } + + inline CloserI::~CloserI() + { + } + + inline StaticMemoryBlock::StaticMemoryBlock(void* _data, uint32_t _size) + : m_data(_data) + , m_size(_size) + { + } + + inline StaticMemoryBlock::~StaticMemoryBlock() + { + } + + inline void* StaticMemoryBlock::more(uint32_t _size) + { + BX_UNUSED(_size); + return m_data; + } + + inline uint32_t StaticMemoryBlock::getSize() + { + return m_size; + } + + inline MemoryBlock::MemoryBlock(AllocatorI* _allocator) + : m_allocator(_allocator) + , m_data(NULL) + , m_size(0) + { + } + + inline MemoryBlock::~MemoryBlock() + { + BX_FREE(m_allocator, m_data); + } + + inline void* MemoryBlock::more(uint32_t _size) + { + if (0 < _size) + { + m_size += _size; + m_data = BX_REALLOC(m_allocator, m_data, m_size); + } + + return m_data; + } + + inline uint32_t MemoryBlock::getSize() + { + return m_size; + } + + inline SizerWriter::SizerWriter() + : m_pos(0) + , m_top(0) + { + } + + inline SizerWriter::~SizerWriter() + { + } + + inline int64_t SizerWriter::seek(int64_t _offset, Whence::Enum _whence) + { + switch (_whence) + { + case Whence::Begin: + m_pos = int64_clamp(_offset, 0, m_top); + break; + + case Whence::Current: + m_pos = int64_clamp(m_pos + _offset, 0, m_top); + break; + + case Whence::End: + m_pos = int64_clamp(m_top - _offset, 0, m_top); + break; + } + + return m_pos; + } + + inline int32_t SizerWriter::write(const void* /*_data*/, int32_t _size, Error* _err) + { + BX_CHECK(NULL != _err, "Reader/Writer interface calling functions must handle errors."); + + int32_t morecore = int32_t(m_pos - m_top) + _size; + + if (0 < morecore) + { + m_top += morecore; + } + + int64_t remainder = m_top-m_pos; + int32_t size = uint32_min(_size, uint32_t(int64_min(remainder, INT32_MAX) ) ); + m_pos += size; + if (size != _size) + { + BX_ERROR_SET(_err, BX_ERROR_READERWRITER_WRITE, "SizerWriter: write truncated."); + } + return size; + } + + inline MemoryReader::MemoryReader(const void* _data, uint32_t _size) + : m_data( (const uint8_t*)_data) + , m_pos(0) + , m_top(_size) + { + } + + inline MemoryReader::~MemoryReader() + { + } + + inline int64_t MemoryReader::seek(int64_t _offset, Whence::Enum _whence) + { + switch (_whence) + { + case Whence::Begin: + m_pos = int64_clamp(_offset, 0, m_top); + break; + + case Whence::Current: + m_pos = int64_clamp(m_pos + _offset, 0, m_top); + break; + + case Whence::End: + m_pos = int64_clamp(m_top - _offset, 0, m_top); + break; + } + + return m_pos; + } + + inline int32_t MemoryReader::read(void* _data, int32_t _size, Error* _err) + { + BX_CHECK(NULL != _err, "Reader/Writer interface calling functions must handle errors."); + + int64_t remainder = m_top-m_pos; + int32_t size = uint32_min(_size, uint32_t(int64_min(remainder, INT32_MAX) ) ); + memCopy(_data, &m_data[m_pos], size); + m_pos += size; + if (size != _size) + { + BX_ERROR_SET(_err, BX_ERROR_READERWRITER_READ, "MemoryReader: read truncated."); + } + return size; + } + + inline const uint8_t* MemoryReader::getDataPtr() const + { + return &m_data[m_pos]; + } + + inline int64_t MemoryReader::getPos() const + { + return m_pos; + } + + inline int64_t MemoryReader::remaining() const + { + return m_top-m_pos; + } + + inline MemoryWriter::MemoryWriter(MemoryBlockI* _memBlock) + : m_memBlock(_memBlock) + , m_data(NULL) + , m_pos(0) + , m_top(0) + , m_size(0) + { + } + + inline MemoryWriter::~MemoryWriter() + { + } + + inline int64_t MemoryWriter::seek(int64_t _offset, Whence::Enum _whence) + { + switch (_whence) + { + case Whence::Begin: + m_pos = int64_clamp(_offset, 0, m_top); + break; + + case Whence::Current: + m_pos = int64_clamp(m_pos + _offset, 0, m_top); + break; + + case Whence::End: + m_pos = int64_clamp(m_top - _offset, 0, m_top); + break; + } + + return m_pos; + } + + inline int32_t MemoryWriter::write(const void* _data, int32_t _size, Error* _err) + { + BX_CHECK(NULL != _err, "Reader/Writer interface calling functions must handle errors."); + + int32_t morecore = int32_t(m_pos - m_size) + _size; + + if (0 < morecore) + { + morecore = BX_ALIGN_MASK(morecore, 0xfff); + m_data = (uint8_t*)m_memBlock->more(morecore); + m_size = m_memBlock->getSize(); + } + + int64_t remainder = m_size-m_pos; + int32_t size = uint32_min(_size, uint32_t(int64_min(remainder, INT32_MAX) ) ); + memCopy(&m_data[m_pos], _data, size); + m_pos += size; + m_top = int64_max(m_top, m_pos); + if (size != _size) + { + BX_ERROR_SET(_err, BX_ERROR_READERWRITER_WRITE, "MemoryWriter: write truncated."); + } + return size; + } + + inline StaticMemoryBlockWriter::StaticMemoryBlockWriter(void* _data, uint32_t _size) + : MemoryWriter(&m_smb) + , m_smb(_data, _size) + { + } + + inline StaticMemoryBlockWriter::~StaticMemoryBlockWriter() + { + } + + inline int32_t read(ReaderI* _reader, void* _data, int32_t _size, Error* _err) + { + BX_ERROR_SCOPE(_err); + return _reader->read(_data, _size, _err); + } + + template + int32_t read(ReaderI* _reader, Ty& _value, Error* _err) + { + BX_ERROR_SCOPE(_err); + BX_STATIC_ASSERT(BX_TYPE_IS_POD(Ty) ); + return _reader->read(&_value, sizeof(Ty), _err); + } + + template + int32_t readHE(ReaderI* _reader, Ty& _value, bool _fromLittleEndian, Error* _err) + { + BX_ERROR_SCOPE(_err); + BX_STATIC_ASSERT(BX_TYPE_IS_POD(Ty) ); + Ty value; + int32_t result = _reader->read(&value, sizeof(Ty), _err); + _value = toHostEndian(value, _fromLittleEndian); + return result; + } + + inline int32_t write(WriterI* _writer, const void* _data, int32_t _size, Error* _err) + { + BX_ERROR_SCOPE(_err); + return _writer->write(_data, _size, _err); + } + + inline int32_t writeRep(WriterI* _writer, uint8_t _byte, int32_t _size, Error* _err) + { + BX_ERROR_SCOPE(_err); + + const uint32_t tmp0 = uint32_sels(64 - _size, 64, _size); + const uint32_t tmp1 = uint32_sels(256 - _size, 256, tmp0); + const uint32_t blockSize = uint32_sels(1024 - _size, 1024, tmp1); + uint8_t* temp = (uint8_t*)alloca(blockSize); + memSet(temp, _byte, blockSize); + + int32_t size = 0; + while (0 < _size) + { + int32_t bytes = write(_writer, temp, uint32_min(blockSize, _size), _err); + size += bytes; + _size -= bytes; + } + + return size; + } + + template + int32_t write(WriterI* _writer, const Ty& _value, Error* _err) + { + BX_ERROR_SCOPE(_err); + BX_STATIC_ASSERT(BX_TYPE_IS_POD(Ty) ); + return _writer->write(&_value, sizeof(Ty), _err); + } + + template + int32_t writeLE(WriterI* _writer, const Ty& _value, Error* _err) + { + BX_ERROR_SCOPE(_err); + BX_STATIC_ASSERT(BX_TYPE_IS_POD(Ty) ); + Ty value = toLittleEndian(_value); + int32_t result = _writer->write(&value, sizeof(Ty), _err); + return result; + } + + template + int32_t writeBE(WriterI* _writer, const Ty& _value, Error* _err) + { + BX_ERROR_SCOPE(_err); + BX_STATIC_ASSERT(BX_TYPE_IS_POD(Ty) ); + Ty value = toBigEndian(_value); + int32_t result = _writer->write(&value, sizeof(Ty), _err); + return result; + } + + inline int32_t writePrintf(WriterI* _writer, const char* _format, ...) + { + va_list argList; + va_start(argList, _format); + + char temp[2048]; + char* out = temp; + int32_t max = sizeof(temp); + int32_t len = vsnprintf(out, max, _format, argList); + if (len > max) + { + out = (char*)alloca(len); + len = vsnprintf(out, len, _format, argList); + } + + int32_t size = write(_writer, out, len); + + va_end(argList); + + return size; + } + + inline int64_t skip(SeekerI* _seeker, int64_t _offset) + { + return _seeker->seek(_offset, Whence::Current); + } + + inline int64_t seek(SeekerI* _seeker, int64_t _offset, Whence::Enum _whence) + { + return _seeker->seek(_offset, _whence); + } + + inline int64_t getSize(SeekerI* _seeker) + { + int64_t offset = _seeker->seek(); + int64_t size = _seeker->seek(0, Whence::End); + _seeker->seek(offset, Whence::Begin); + return size; + } + + inline int32_t peek(ReaderSeekerI* _reader, void* _data, int32_t _size, Error* _err) + { + BX_ERROR_SCOPE(_err); + int64_t offset = bx::seek(_reader); + int32_t size = _reader->read(_data, _size, _err); + bx::seek(_reader, offset, bx::Whence::Begin); + return size; + } + + template + int32_t peek(ReaderSeekerI* _reader, Ty& _value, Error* _err) + { + BX_ERROR_SCOPE(_err); + BX_STATIC_ASSERT(BX_TYPE_IS_POD(Ty) ); + return peek(_reader, &_value, sizeof(Ty), _err); + } + + inline int32_t align(ReaderSeekerI* _reader, uint32_t _alignment, Error* _err) + { + BX_ERROR_SCOPE(_err); + const int64_t current = bx::seek(_reader); + const int64_t aligned = ( (current + _alignment-1)/_alignment) * _alignment; + const int32_t size = int32_t(aligned - current); + if (0 != size) + { + const int64_t offset = bx::seek(_reader, size); + if (offset != aligned) + { + BX_ERROR_SET(_err, BX_ERROR_READERWRITER_WRITE, "Align: read truncated."); + } + return int32_t(offset - current); + } + + return 0; + } + + inline int32_t align(WriterSeekerI* _writer, uint32_t _alignment, Error* _err) + { + BX_ERROR_SCOPE(_err); + const int64_t current = bx::seek(_writer); + const int64_t aligned = ( (current + _alignment-1)/_alignment) * _alignment; + const int32_t size = int32_t(aligned - current); + if (0 != size) + { + return writeRep(_writer, 0, size, _err); + } + + return 0; + } + + inline bool open(ReaderOpenI* _reader, const char* _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) + { + BX_ERROR_USE_TEMP_WHEN_NULL(_err); + return _writer->open(_filePath, _append, _err); + } + + inline void close(CloserI* _reader) + { + _reader->close(); + } + +} // namespace bx diff --git a/3rdparty/bx/include/bx/inline/ringbuffer.inl b/3rdparty/bx/include/bx/inline/ringbuffer.inl new file mode 100644 index 0000000..9d8ab94 --- /dev/null +++ b/3rdparty/bx/include/bx/inline/ringbuffer.inl @@ -0,0 +1,275 @@ +/* + * Copyright 2010-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bx#license-bsd-2-clause + */ + +#ifndef BX_RINGBUFFER_H_HEADER_GUARD +# error "Must be included from bx/ringbuffer.h!" +#endif // BX_RINGBUFFER_H_HEADER_GUARD + +namespace bx +{ + inline RingBufferControl::RingBufferControl(uint32_t _size) + : m_size(_size) + , m_current(0) + , m_write(0) + , m_read(0) + { + } + + inline RingBufferControl::~RingBufferControl() + { + } + + inline uint32_t RingBufferControl::available() const + { + return distance(m_read, m_current); + } + + inline uint32_t RingBufferControl::consume(uint32_t _size) + { + const uint32_t maxSize = distance(m_read, m_current); + const uint32_t sizeNoSign = uint32_and(_size, 0x7fffffff); + const uint32_t test = uint32_sub(sizeNoSign, maxSize); + const uint32_t size = uint32_sels(test, _size, maxSize); + const uint32_t advance = uint32_add(m_read, size); + const uint32_t read = uint32_mod(advance, m_size); + m_read = read; + return size; + } + + inline uint32_t RingBufferControl::reserve(uint32_t _size, bool _mustSucceed) + { + const uint32_t dist = distance(m_write, m_read)-1; + const uint32_t maxSize = uint32_sels(dist, m_size-1, dist); + const uint32_t sizeNoSign = uint32_and(_size, 0x7fffffff); + const uint32_t test = uint32_sub(sizeNoSign, maxSize); + const uint32_t size = uint32_sels(test, _size, _mustSucceed ? 0 : maxSize); + const uint32_t advance = uint32_add(m_write, size); + const uint32_t write = uint32_mod(advance, m_size); + m_write = write; + return size; + } + + inline uint32_t RingBufferControl::commit(uint32_t _size) + { + const uint32_t maxSize = distance(m_current, m_write); + const uint32_t sizeNoSign = uint32_and(_size, 0x7fffffff); + const uint32_t test = uint32_sub(sizeNoSign, maxSize); + const uint32_t size = uint32_sels(test, _size, maxSize); + const uint32_t advance = uint32_add(m_current, size); + const uint32_t current = uint32_mod(advance, m_size); + m_current = current; + return size; + } + + inline uint32_t RingBufferControl::distance(uint32_t _from, uint32_t _to) const + { + const uint32_t diff = uint32_sub(_to, _from); + const uint32_t le = uint32_add(m_size, diff); + const uint32_t result = uint32_sels(diff, le, diff); + + return result; + } + + inline void RingBufferControl::reset() + { + m_current = 0; + m_write = 0; + m_read = 0; + } + + inline SpScRingBufferControl::SpScRingBufferControl(uint32_t _size) + : m_size(_size) + , m_current(0) + , m_write(0) + , m_read(0) + { + } + + inline SpScRingBufferControl::~SpScRingBufferControl() + { + } + + inline uint32_t SpScRingBufferControl::available() const + { + return distance(m_read, m_current); + } + + inline uint32_t SpScRingBufferControl::consume(uint32_t _size) + { + const uint32_t maxSize = distance(m_read, m_current); + const uint32_t sizeNoSign = uint32_and(_size, 0x7fffffff); + const uint32_t test = uint32_sub(sizeNoSign, maxSize); + const uint32_t size = uint32_sels(test, _size, maxSize); + const uint32_t advance = uint32_add(m_read, size); + const uint32_t read = uint32_mod(advance, m_size); + m_read = read; + return size; + } + + inline uint32_t SpScRingBufferControl::reserve(uint32_t _size) + { + const uint32_t dist = distance(m_write, m_read)-1; + const uint32_t maxSize = uint32_sels(dist, m_size-1, dist); + const uint32_t sizeNoSign = uint32_and(_size, 0x7fffffff); + const uint32_t test = uint32_sub(sizeNoSign, maxSize); + const uint32_t size = uint32_sels(test, _size, maxSize); + const uint32_t advance = uint32_add(m_write, size); + const uint32_t write = uint32_mod(advance, m_size); + m_write = write; + return size; + } + + inline uint32_t SpScRingBufferControl::commit(uint32_t _size) + { + const uint32_t maxSize = distance(m_current, m_write); + const uint32_t sizeNoSign = uint32_and(_size, 0x7fffffff); + const uint32_t test = uint32_sub(sizeNoSign, maxSize); + const uint32_t size = uint32_sels(test, _size, maxSize); + const uint32_t advance = uint32_add(m_current, size); + const uint32_t current = uint32_mod(advance, m_size); + + // must commit all memory writes before moving m_current pointer + // once m_current pointer moves data is used by consumer thread + memoryBarrier(); + m_current = current; + return size; + } + + inline uint32_t SpScRingBufferControl::distance(uint32_t _from, uint32_t _to) const + { + const uint32_t diff = uint32_sub(_to, _from); + const uint32_t le = uint32_add(m_size, diff); + const uint32_t result = uint32_sels(diff, le, diff); + + return result; + } + + inline void SpScRingBufferControl::reset() + { + m_current = 0; + m_write = 0; + m_read = 0; + } + + template + inline ReadRingBufferT::ReadRingBufferT(ControlT& _control, const char* _buffer, uint32_t _size) + : m_control(_control) + , m_read(_control.m_read) + , m_end(m_read+_size) + , m_size(_size) + , m_buffer(_buffer) + { + BX_CHECK(_control.available() >= _size, "%d >= %d", _control.available(), _size); + } + + template + inline ReadRingBufferT::~ReadRingBufferT() + { + } + + template + inline void ReadRingBufferT::end() + { + m_control.consume(m_size); + } + + template + inline void ReadRingBufferT::read(char* _data, uint32_t _len) + { + const uint32_t eof = (m_read + _len) % m_control.m_size; + uint32_t wrap = 0; + const char* from = &m_buffer[m_read]; + + if (eof < m_read) + { + wrap = m_control.m_size - m_read; + memCopy(_data, from, wrap); + _data += wrap; + from = (const char*)&m_buffer[0]; + } + + memCopy(_data, from, _len-wrap); + + m_read = eof; + } + + template + inline void ReadRingBufferT::skip(uint32_t _len) + { + m_read += _len; + m_read %= m_control.m_size; + } + + template + inline WriteRingBufferT::WriteRingBufferT(ControlT& _control, char* _buffer, uint32_t _size) + : m_control(_control) + , m_size(_size) + , m_buffer(_buffer) + { + uint32_t size = m_control.reserve(_size); + BX_UNUSED(size); + BX_CHECK(size == _size, "%d == %d", size, _size); + m_write = m_control.m_current; + m_end = m_write+_size; + } + + template + inline WriteRingBufferT::~WriteRingBufferT() + { + } + + template + inline void WriteRingBufferT::end() + { + m_control.commit(m_size); + } + + template + inline void WriteRingBufferT::write(const char* _data, uint32_t _len) + { + const uint32_t eof = (m_write + _len) % m_control.m_size; + uint32_t wrap = 0; + char* to = &m_buffer[m_write]; + + if (eof < m_write) + { + wrap = m_control.m_size - m_write; + memCopy(to, _data, wrap); + _data += wrap; + to = (char*)&m_buffer[0]; + } + + memCopy(to, _data, _len-wrap); + + m_write = eof; + } + + template + inline void WriteRingBufferT::write(ReadRingBufferT& _read, uint32_t _len) + { + const uint32_t eof = (_read.m_read + _len) % _read.m_control.m_size; + uint32_t wrap = 0; + const char* from = &_read.m_buffer[_read.m_read]; + + if (eof < _read.m_read) + { + wrap = _read.m_control.m_size - _read.m_read; + write(from, wrap); + from = (const char*)&_read.m_buffer[0]; + } + + write(from, _len-wrap); + + _read.m_read = eof; + } + + template + inline void WriteRingBufferT::skip(uint32_t _len) + { + m_write += _len; + m_write %= m_control.m_size; + } + +} // namespace bx diff --git a/3rdparty/bx/include/bx/inline/rng.inl b/3rdparty/bx/include/bx/inline/rng.inl new file mode 100644 index 0000000..11b466d --- /dev/null +++ b/3rdparty/bx/include/bx/inline/rng.inl @@ -0,0 +1,167 @@ +/* + * Copyright 2010-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bx#license-bsd-2-clause + */ + +#ifndef BX_RNG_H_HEADER_GUARD +# error "Must be included from bx/rng.h!" +#endif // BX_RNG_H_HEADER_GUARD + +namespace bx +{ + inline RngMwc::RngMwc(uint32_t _z, uint32_t _w) + : m_z(_z) + , m_w(_w) + { + } + + inline void RngMwc::reset(uint32_t _z, uint32_t _w) + { + m_z = _z; + m_w = _w; + } + + inline uint32_t RngMwc::gen() + { + m_z = 36969*(m_z&65535)+(m_z>>16); + m_w = 18000*(m_w&65535)+(m_w>>16); + 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) + { + } + + inline void RngShr3::reset(uint32_t _jsr) + { + m_jsr = _jsr; + } + + inline uint32_t RngShr3::gen() + { + m_jsr ^= m_jsr<<17; + m_jsr ^= m_jsr>>13; + m_jsr ^= m_jsr<<5; + return m_jsr; + } + + template + inline float frnd(Rng* _rng) + { + uint32_t rnd = _rng->gen() & UINT16_MAX; + return float(rnd) * 1.0f/float(UINT16_MAX); + } + + template + inline float frndh(Rng* _rng) + { + return 2.0f * bx::frnd(_rng) - 1.0f; + } + + template + inline void randUnitCircle(float _result[3], Rng* _rng) + { + const float angle = frnd(_rng) * pi * 2.0f; + + _result[0] = fcos(angle); + _result[1] = 0.0f; + _result[2] = fsin(angle); + } + + template + 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 sqrtf1 = fsqrt(1.0f - rand0*rand0); + + _result[0] = sqrtf1 * fcos(rand1); + _result[1] = sqrtf1 * fsin(rand1); + _result[2] = rand0; + } + + template + inline void randUnitHemisphere(float _result[3], Ty* _rng, const float _normal[3]) + { + float dir[3]; + randUnitSphere(dir, _rng); + + float DdotN = dir[0]*_normal[0] + + dir[1]*_normal[1] + + dir[2]*_normal[2] + ; + + if (0.0f > DdotN) + { + dir[0] = -dir[0]; + dir[1] = -dir[1]; + dir[2] = -dir[2]; + } + + _result[0] = dir[0]; + _result[1] = dir[1]; + _result[2] = dir[2]; + } + + inline void generateSphereHammersley(void* _data, uint32_t _stride, uint32_t _num, float _scale) + { + uint8_t* data = (uint8_t*)_data; + + for (uint32_t ii = 0; ii < _num; ii++) + { + float tt = 0.0f; + float pp = 0.5; + for (uint32_t jj = ii; jj; jj >>= 1) + { + tt += (jj & 1) ? pp : 0.0f; + pp *= 0.5f; + } + + tt = 2.0f * tt - 1.0f; + + const float phi = (ii + 0.5f) / _num; + const float phirad = phi * 2.0f * pi; + const float st = fsqrt(1.0f-tt*tt) * _scale; + + float* xyz = (float*)data; + data += _stride; + + xyz[0] = st * fcos(phirad); + xyz[1] = st * fsin(phirad); + xyz[2] = tt * _scale; + } + } + + template + inline void shuffle(Rng* _rng, Ty* _array, uint32_t _num) + { + BX_CHECK(_num != 0, "Number of elements can't be 0!"); + + for (uint32_t ii = 0, num = _num-1; ii < num; ++ii) + { + uint32_t jj = ii + 1 + _rng->gen() % (num - ii); + bx::xchg(_array[ii], _array[jj]); + } + } + +} // namespace bx diff --git a/3rdparty/bx/include/bx/inline/simd128_langext.inl b/3rdparty/bx/include/bx/inline/simd128_langext.inl new file mode 100644 index 0000000..c89e612 --- /dev/null +++ b/3rdparty/bx/include/bx/inline/simd128_langext.inl @@ -0,0 +1,515 @@ +/* + * Copyright 2010-2016 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" + +namespace bx +{ +#define ELEMx 0 +#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; \ + result.vf = __builtin_shufflevector(_a.vf, _a.vf, ELEM##_x, ELEM##_y, ELEM##_z, ELEM##_w); \ + return result; \ + } + +#include "simd128_swizzle.inl" + +#undef BX_SIMD128_IMPLEMENT_SWIZZLE +#undef ELEMw +#undef ELEMz +#undef ELEMy +#undef ELEMx + +#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<> \ + 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) ); \ + } + +BX_SIMD128_IMPLEMENT_TEST(x , 0x1); +BX_SIMD128_IMPLEMENT_TEST(y , 0x2); +BX_SIMD128_IMPLEMENT_TEST(xy , 0x3); +BX_SIMD128_IMPLEMENT_TEST(z , 0x4); +BX_SIMD128_IMPLEMENT_TEST(xz , 0x5); +BX_SIMD128_IMPLEMENT_TEST(yz , 0x6); +BX_SIMD128_IMPLEMENT_TEST(xyz , 0x7); +BX_SIMD128_IMPLEMENT_TEST(w , 0x8); +BX_SIMD128_IMPLEMENT_TEST(xw , 0x9); +BX_SIMD128_IMPLEMENT_TEST(yw , 0xa); +BX_SIMD128_IMPLEMENT_TEST(xyw , 0xb); +BX_SIMD128_IMPLEMENT_TEST(zw , 0xc); +BX_SIMD128_IMPLEMENT_TEST(xzw , 0xd); +BX_SIMD128_IMPLEMENT_TEST(yzw , 0xe); +BX_SIMD128_IMPLEMENT_TEST(xyzw , 0xf); + +#undef BX_SIMD128_IMPLEMENT_TEST + + template<> + BX_SIMD_FORCE_INLINE simd128_langext_t simd_shuf_xyAB(simd128_langext_t _a, simd128_langext_t _b) + { + simd128_langext_t result; + result.vf = __builtin_shufflevector(_a.vf, _b.vf, 0, 1, 4, 5); + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_langext_t simd_shuf_ABxy(simd128_langext_t _a, simd128_langext_t _b) + { + simd128_langext_t result; + result.vf = __builtin_shufflevector(_a.vf, _b.vf, 4, 5, 0, 1); + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_langext_t simd_shuf_CDzw(simd128_langext_t _a, simd128_langext_t _b) + { + simd128_langext_t result; + result.vf = __builtin_shufflevector(_a.vf, _b.vf, 6, 7, 2, 3); + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_langext_t simd_shuf_zwCD(simd128_langext_t _a, simd128_langext_t _b) + { + simd128_langext_t result; + result.vf = __builtin_shufflevector(_a.vf, _b.vf, 2, 3, 6, 7); + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_langext_t simd_shuf_xAyB(simd128_langext_t _a, simd128_langext_t _b) + { + simd128_langext_t result; + result.vf = __builtin_shufflevector(_a.vf, _b.vf, 0, 4, 1, 5); + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_langext_t simd_shuf_yBxA(simd128_langext_t _a, simd128_langext_t _b) + { + simd128_langext_t result; + result.vf = __builtin_shufflevector(_a.vf, _b.vf, 1, 5, 0, 4); + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_langext_t simd_shuf_zCwD(simd128_langext_t _a, simd128_langext_t _b) + { + simd128_langext_t result; + result.vf = __builtin_shufflevector(_a.vf, _b.vf, 2, 6, 3, 7); + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_langext_t simd_shuf_CzDw(simd128_langext_t _a, simd128_langext_t _b) + { + simd128_langext_t result; + result.vf = __builtin_shufflevector(_a.vf, _b.vf, 6, 2, 7, 3); + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_langext_t simd_shuf_xAzC(simd128_langext_t _a, simd128_langext_t _b) + { + simd128_langext_t result; + result.vf = __builtin_shufflevector(_a.vf, _b.vf, 0, 4, 2, 6); + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_langext_t simd_shuf_yBwD(simd128_langext_t _a, simd128_langext_t _b) + { + simd128_langext_t result; + result.vf = __builtin_shufflevector(_a.vf, _b.vf, 1, 5, 3, 7); + return result; + } + + template<> + BX_SIMD_FORCE_INLINE float simd_x(simd128_langext_t _a) + { + return _a.fxyzw[0]; + } + + template<> + BX_SIMD_FORCE_INLINE float simd_y(simd128_langext_t _a) + { + return _a.fxyzw[1]; + } + + template<> + BX_SIMD_FORCE_INLINE float simd_z(simd128_langext_t _a) + { + return _a.fxyzw[2]; + } + + template<> + BX_SIMD_FORCE_INLINE float simd_w(simd128_langext_t _a) + { + return _a.fxyzw[3]; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_langext_t simd_ld(const void* _ptr) + { + const uint32_t* input = reinterpret_cast(_ptr); + simd128_langext_t result; + result.uxyzw[0] = input[0]; + result.uxyzw[1] = input[1]; + result.uxyzw[2] = input[2]; + result.uxyzw[3] = input[3]; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE void simd_st(void* _ptr, simd128_langext_t _a) + { + uint32_t* result = reinterpret_cast(_ptr); + result[0] = _a.uxyzw[0]; + result[1] = _a.uxyzw[1]; + result[2] = _a.uxyzw[2]; + result[3] = _a.uxyzw[3]; + } + + template<> + BX_SIMD_FORCE_INLINE void simd_stx(void* _ptr, simd128_langext_t _a) + { + uint32_t* result = reinterpret_cast(_ptr); + result[0] = _a.uxyzw[0]; + } + + template<> + BX_SIMD_FORCE_INLINE void simd_stream(void* _ptr, simd128_langext_t _a) + { + uint32_t* result = reinterpret_cast(_ptr); + result[0] = _a.uxyzw[0]; + result[1] = _a.uxyzw[1]; + result[2] = _a.uxyzw[2]; + result[3] = _a.uxyzw[3]; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_langext_t simd_ld(float _x, float _y, float _z, float _w) + { + simd128_langext_t result; + result.vf = (float __attribute__((vector_size(16)))){ _x, _y, _z, _w }; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_langext_t simd_ild(uint32_t _x, uint32_t _y, uint32_t _z, uint32_t _w) + { + simd128_langext_t result; + result.vu = (uint32_t __attribute__((vector_size(16)))){ _x, _y, _z, _w }; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_langext_t simd_splat(const void* _ptr) + { + const uint32_t val = *reinterpret_cast(_ptr); + simd128_langext_t result; + result.vu = (uint32_t __attribute__((vector_size(16)))){ val, val, val, val }; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_langext_t simd_splat(float _a) + { + return simd_ld(_a, _a, _a, _a); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_langext_t simd_isplat(uint32_t _a) + { + return simd_ild(_a, _a, _a, _a); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_langext_t simd_zero() + { + return simd_ild(0, 0, 0, 0); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_langext_t simd_itof(simd128_langext_t _a) + { + simd128_langext_t result; + result.vf = __builtin_convertvector(_a.vi, float __attribute__((vector_size(16))) ); + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_langext_t simd_ftoi(simd128_langext_t _a) + { + simd128_langext_t result; + result.vi = __builtin_convertvector(_a.vf, int32_t __attribute__((vector_size(16))) ); + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_langext_t simd_round(simd128_langext_t _a) + { + const simd128_langext_t tmp = simd_ftoi(_a); + const simd128_langext_t result = simd_itof(tmp); + + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_langext_t simd_add(simd128_langext_t _a, simd128_langext_t _b) + { + simd128_langext_t result; + result.vf = _a.vf + _b.vf; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_langext_t simd_sub(simd128_langext_t _a, simd128_langext_t _b) + { + simd128_langext_t result; + result.vf = _a.vf - _b.vf; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_langext_t simd_mul(simd128_langext_t _a, simd128_langext_t _b) + { + simd128_langext_t result; + result.vf = _a.vf * _b.vf; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_langext_t simd_div(simd128_langext_t _a, simd128_langext_t _b) + { + simd128_langext_t result; + result.vf = _a.vf / _b.vf; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_langext_t simd_sqrt(simd128_langext_t _a) + { + simd128_langext_t result; + result.vf[0] = sqrtf(_a.vf[0]); + result.vf[1] = sqrtf(_a.vf[1]); + result.vf[2] = sqrtf(_a.vf[2]); + result.vf[3] = sqrtf(_a.vf[3]); + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_langext_t simd_rsqrt_est(simd128_langext_t _a) + { + simd128_langext_t result; + result.vf[0] = 1.0f / sqrtf(_a.vf[0]); + result.vf[1] = 1.0f / sqrtf(_a.vf[1]); + result.vf[2] = 1.0f / sqrtf(_a.vf[2]); + result.vf[3] = 1.0f / sqrtf(_a.vf[3]); + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_langext_t simd_cmpeq(simd128_langext_t _a, simd128_langext_t _b) + { + simd128_langext_t result; + result.vi = _a.vf == _b.vf; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_langext_t simd_cmplt(simd128_langext_t _a, simd128_langext_t _b) + { + simd128_langext_t result; + result.vi = _a.vf < _b.vf; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_langext_t simd_cmple(simd128_langext_t _a, simd128_langext_t _b) + { + simd128_langext_t result; + result.vi = _a.vf <= _b.vf; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_langext_t simd_cmpgt(simd128_langext_t _a, simd128_langext_t _b) + { + simd128_langext_t result; + result.vi = _a.vf > _b.vf; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_langext_t simd_cmpge(simd128_langext_t _a, simd128_langext_t _b) + { + simd128_langext_t result; + result.vi = _a.vf >= _b.vf; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_langext_t simd_and(simd128_langext_t _a, simd128_langext_t _b) + { + simd128_langext_t result; + result.vu = _a.vu & _b.vu; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_langext_t simd_andc(simd128_langext_t _a, simd128_langext_t _b) + { + simd128_langext_t result; + result.vu = _a.vu & ~_b.vu; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_langext_t simd_or(simd128_langext_t _a, simd128_langext_t _b) + { + simd128_langext_t result; + result.vu = _a.vu | _b.vu; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_langext_t simd_xor(simd128_langext_t _a, simd128_langext_t _b) + { + simd128_langext_t result; + result.vu = _a.vu ^ _b.vu; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_langext_t simd_sll(simd128_langext_t _a, int _count) + { + simd128_langext_t result; + const simd128_langext_t count = simd_isplat(_count); + result.vu = _a.vu << count.vi; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_langext_t simd_srl(simd128_langext_t _a, int _count) + { + simd128_langext_t result; + const simd128_langext_t count = simd_isplat(_count); + result.vu = _a.vu >> count.vi; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_langext_t simd_sra(simd128_langext_t _a, int _count) + { + simd128_langext_t result; + const simd128_langext_t count = simd_isplat(_count); + result.vi = _a.vi >> count.vi; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_langext_t simd_icmpeq(simd128_langext_t _a, simd128_langext_t _b) + { + simd128_langext_t result; + result.vi = _a.vi == _b.vi; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_langext_t simd_icmplt(simd128_langext_t _a, simd128_langext_t _b) + { + simd128_langext_t result; + result.vi = _a.vi < _b.vi; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_langext_t simd_icmpgt(simd128_langext_t _a, simd128_langext_t _b) + { + simd128_langext_t result; + result.vi = _a.vi > _b.vi; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_langext_t simd_iadd(simd128_langext_t _a, simd128_langext_t _b) + { + simd128_langext_t result; + result.vi = _a.vi + _b.vi; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_langext_t simd_isub(simd128_langext_t _a, simd128_langext_t _b) + { + simd128_langext_t result; + result.vi = _a.vi - _b.vi; + return result; + } + + 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 new file mode 100644 index 0000000..1dd0d1f --- /dev/null +++ b/3rdparty/bx/include/bx/inline/simd128_neon.inl @@ -0,0 +1,562 @@ +/* + * Copyright 2010-2016 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" + +namespace bx +{ +#define ELEMx 0 +#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) \ + { \ + return __builtin_shuffle(_a, (uint32x4_t){ ELEM##_x, ELEM##_y, ELEM##_z, ELEM##_w }); \ + } + +#include "simd128_swizzle.inl" + +#undef BX_SIMD128_IMPLEMENT_SWIZZLE +#undef ELEMw +#undef ELEMz +#undef ELEMy +#undef ELEMx + +#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<> \ + 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); \ + } + +BX_SIMD128_IMPLEMENT_TEST(x, xxxx); +BX_SIMD128_IMPLEMENT_TEST(y, yyyy); +BX_SIMD128_IMPLEMENT_TEST(xy, xyyy); +BX_SIMD128_IMPLEMENT_TEST(z, zzzz); +BX_SIMD128_IMPLEMENT_TEST(xz, xzzz); +BX_SIMD128_IMPLEMENT_TEST(yz, yzzz); +BX_SIMD128_IMPLEMENT_TEST(xyz, xyzz); +BX_SIMD128_IMPLEMENT_TEST(w, wwww); +BX_SIMD128_IMPLEMENT_TEST(xw, xwww); +BX_SIMD128_IMPLEMENT_TEST(yw, ywww); +BX_SIMD128_IMPLEMENT_TEST(xyw, xyww); +BX_SIMD128_IMPLEMENT_TEST(zw, zwww); +BX_SIMD128_IMPLEMENT_TEST(xzw, xzww); +BX_SIMD128_IMPLEMENT_TEST(yzw, yzww); +#undef BX_SIMD128_IMPLEMENT_TEST + + template<> + BX_SIMD_FORCE_INLINE bool simd_test_any_xyzw(simd128_neon_t _test) + { + return simd_test_any_ni(_test); + } + + template<> + BX_SIMD_FORCE_INLINE bool simd_test_all_xyzw(simd128_neon_t _test) + { + return simd_test_all_ni(_test); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_neon_t simd_shuf_xyAB(simd128_neon_t _a, simd128_neon_t _b) + { + return __builtin_shuffle(_a, _b, (uint32x4_t){ 0, 1, 4, 5 }); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_neon_t simd_shuf_ABxy(simd128_neon_t _a, simd128_neon_t _b) + { + return __builtin_shuffle(_a, _b, (uint32x4_t){ 4, 5, 0, 1 }); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_neon_t simd_shuf_CDzw(simd128_neon_t _a, simd128_neon_t _b) + { + return __builtin_shuffle(_a, _b, (uint32x4_t){ 6, 7, 2, 3 }); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_neon_t simd_shuf_zwCD(simd128_neon_t _a, simd128_neon_t _b) + { + return __builtin_shuffle(_a, _b, (uint32x4_t){ 2, 3, 6, 7 }); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_neon_t simd_shuf_xAyB(simd128_neon_t _a, simd128_neon_t _b) + { + return __builtin_shuffle(_a, _b, (uint32x4_t){ 0, 4, 1, 5 }); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_neon_t simd_shuf_yBxA(simd128_neon_t _a, simd128_neon_t _b) + { + return __builtin_shuffle(_a, _b, (uint32x4_t){ 1, 5, 0, 4 }); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_neon_t simd_shuf_zCwD(simd128_neon_t _a, simd128_neon_t _b) + { + return __builtin_shuffle(_a, _b, (uint32x4_t){ 2, 6, 3, 7 }); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_neon_t simd_shuf_CzDw(simd128_neon_t _a, simd128_neon_t _b) + { + return __builtin_shuffle(_a, _b, (uint32x4_t){ 6, 2, 7, 3 }); + } + + template<> + BX_SIMD_FORCE_INLINE float simd_x(simd128_neon_t _a) + { + return vgetq_lane_f32(_a, 0); + } + + template<> + BX_SIMD_FORCE_INLINE float simd_y(simd128_neon_t _a) + { + return vgetq_lane_f32(_a, 1); + } + + template<> + BX_SIMD_FORCE_INLINE float simd_z(simd128_neon_t _a) + { + return vgetq_lane_f32(_a, 2); + } + + template<> + BX_SIMD_FORCE_INLINE float simd_w(simd128_neon_t _a) + { + return vgetq_lane_f32(_a, 3); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_neon_t simd_ld(const void* _ptr) + { + return vld1q_f32( (const float32_t*)_ptr); + } + + template<> + BX_SIMD_FORCE_INLINE void simd_st(void* _ptr, simd128_neon_t _a) + { + vst1q_f32( (float32_t*)_ptr, _a); + } + + template<> + BX_SIMD_FORCE_INLINE void simd_stx(void* _ptr, simd128_neon_t _a) + { + vst1q_lane_f32( (float32_t*)_ptr, _a, 0); + } + + template<> + BX_SIMD_FORCE_INLINE void simd_stream(void* _ptr, simd128_neon_t _a) + { + vst1q_f32( (float32_t*)_ptr, _a); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_neon_t simd_ld(float _x, float _y, float _z, float _w) + { + const float32_t val[4] = {_x, _y, _z, _w}; + return simd_ld(val); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_neon_t simd_ild(uint32_t _x, uint32_t _y, uint32_t _z, uint32_t _w) + { + const uint32_t val[4] = {_x, _y, _z, _w}; + const uint32x4_t tmp = vld1q_u32(val); + const simd128_neon_t result = vreinterpretq_f32_u32(tmp); + + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_neon_t simd_splat(const void* _ptr) + { + const simd128_neon_t tmp0 = vld1q_f32( (const float32_t*)_ptr); + const float32x2_t tmp1 = vget_low_f32(tmp0); + const simd128_neon_t result = vdupq_lane_f32(tmp1, 0); + + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_neon_t simd_splat(float _a) + { + return vdupq_n_f32(_a); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_neon_t simd_isplat(uint32_t _a) + { + const int32x4_t tmp = vdupq_n_s32(_a); + const simd128_neon_t result = vreinterpretq_f32_s32(tmp); + + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_neon_t simd_zero() + { + return simd_isplat(0); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_neon_t simd_itof(simd128_neon_t _a) + { + const int32x4_t itof = vreinterpretq_s32_f32(_a); + const simd128_neon_t result = vcvtq_f32_s32(itof); + + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_neon_t simd_ftoi(simd128_neon_t _a) + { + const int32x4_t ftoi = vcvtq_s32_f32(_a); + const simd128_neon_t result = vreinterpretq_f32_s32(ftoi); + + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_neon_t simd_add(simd128_neon_t _a, simd128_neon_t _b) + { + return vaddq_f32(_a, _b); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_neon_t simd_sub(simd128_neon_t _a, simd128_neon_t _b) + { + return vsubq_f32(_a, _b); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_neon_t simd_mul(simd128_neon_t _a, simd128_neon_t _b) + { + return vmulq_f32(_a, _b); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_neon_t simd_rcp_est(simd128_neon_t _a) + { + return vrecpeq_f32(_a); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_neon_t simd_rsqrt_est(simd128_neon_t _a) + { + return vrsqrteq_f32(_a); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_neon_t simd_cmpeq(simd128_neon_t _a, simd128_neon_t _b) + { + const uint32x4_t tmp = vceqq_f32(_a, _b); + const simd128_neon_t result = vreinterpretq_f32_u32(tmp); + + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_neon_t simd_cmplt(simd128_neon_t _a, simd128_neon_t _b) + { + const uint32x4_t tmp = vcltq_f32(_a, _b); + const simd128_neon_t result = vreinterpretq_f32_u32(tmp); + + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_neon_t simd_cmple(simd128_neon_t _a, simd128_neon_t _b) + { + const uint32x4_t tmp = vcleq_f32(_a, _b); + const simd128_neon_t result = vreinterpretq_f32_u32(tmp); + + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_neon_t simd_cmpgt(simd128_neon_t _a, simd128_neon_t _b) + { + const uint32x4_t tmp = vcgtq_f32(_a, _b); + const simd128_neon_t result = vreinterpretq_f32_u32(tmp); + + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_neon_t simd_cmpge(simd128_neon_t _a, simd128_neon_t _b) + { + const uint32x4_t tmp = vcgeq_f32(_a, _b); + const simd128_neon_t result = vreinterpretq_f32_u32(tmp); + + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_neon_t simd_min(simd128_neon_t _a, simd128_neon_t _b) + { + return vminq_f32(_a, _b); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_neon_t simd_max(simd128_neon_t _a, simd128_neon_t _b) + { + return vmaxq_f32(_a, _b); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_neon_t simd_and(simd128_neon_t _a, simd128_neon_t _b) + { + const int32x4_t tmp0 = vreinterpretq_s32_f32(_a); + const int32x4_t tmp1 = vreinterpretq_s32_f32(_b); + const int32x4_t tmp2 = vandq_s32(tmp0, tmp1); + const simd128_neon_t result = vreinterpretq_f32_s32(tmp2); + + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_neon_t simd_andc(simd128_neon_t _a, simd128_neon_t _b) + { + const int32x4_t tmp0 = vreinterpretq_s32_f32(_a); + const int32x4_t tmp1 = vreinterpretq_s32_f32(_b); + const int32x4_t tmp2 = vbicq_s32(tmp0, tmp1); + const simd128_neon_t result = vreinterpretq_f32_s32(tmp2); + + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_neon_t simd_or(simd128_neon_t _a, simd128_neon_t _b) + { + const int32x4_t tmp0 = vreinterpretq_s32_f32(_a); + const int32x4_t tmp1 = vreinterpretq_s32_f32(_b); + const int32x4_t tmp2 = vorrq_s32(tmp0, tmp1); + const simd128_neon_t result = vreinterpretq_f32_s32(tmp2); + + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_neon_t simd_xor(simd128_neon_t _a, simd128_neon_t _b) + { + const int32x4_t tmp0 = vreinterpretq_s32_f32(_a); + const int32x4_t tmp1 = vreinterpretq_s32_f32(_b); + const int32x4_t tmp2 = veorq_s32(tmp0, tmp1); + const simd128_neon_t result = vreinterpretq_f32_s32(tmp2); + + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_neon_t simd_sll(simd128_neon_t _a, int _count) + { + if (__builtin_constant_p(_count) ) + { + const uint32x4_t tmp0 = vreinterpretq_u32_f32(_a); + const uint32x4_t tmp1 = vshlq_n_u32(tmp0, _count); + const simd128_neon_t result = vreinterpretq_f32_u32(tmp1); + + return result; + } + + const uint32x4_t tmp0 = vreinterpretq_u32_f32(_a); + const int32x4_t shift = vdupq_n_s32(_count); + const uint32x4_t tmp1 = vshlq_u32(tmp0, shift); + const simd128_neon_t result = vreinterpretq_f32_u32(tmp1); + + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_neon_t simd_srl(simd128_neon_t _a, int _count) + { + if (__builtin_constant_p(_count) ) + { + const uint32x4_t tmp0 = vreinterpretq_u32_f32(_a); + const uint32x4_t tmp1 = vshrq_n_u32(tmp0, _count); + const simd128_neon_t result = vreinterpretq_f32_u32(tmp1); + + return result; + } + + const uint32x4_t tmp0 = vreinterpretq_u32_f32(_a); + const int32x4_t shift = vdupq_n_s32(-_count); + const uint32x4_t tmp1 = vshlq_u32(tmp0, shift); + const simd128_neon_t result = vreinterpretq_f32_u32(tmp1); + + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_neon_t simd_sra(simd128_neon_t _a, int _count) + { + if (__builtin_constant_p(_count) ) + { + const int32x4_t tmp0 = vreinterpretq_s32_f32(_a); + const int32x4_t tmp1 = vshrq_n_s32(tmp0, _count); + const simd128_neon_t result = vreinterpretq_f32_s32(tmp1); + + return result; + } + + const int32x4_t tmp0 = vreinterpretq_s32_f32(_a); + const int32x4_t shift = vdupq_n_s32(-_count); + const int32x4_t tmp1 = vshlq_s32(tmp0, shift); + const simd128_neon_t result = vreinterpretq_f32_s32(tmp1); + + return result; + } + + 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); + const int32x4_t tmp1 = vreinterpretq_s32_f32(_b); + const uint32x4_t tmp2 = vceqq_s32(tmp0, tmp1); + const simd128_neon_t result = vreinterpretq_f32_u32(tmp2); + + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_neon_t simd_icmplt(simd128_neon_t _a, simd128_neon_t _b) + { + const int32x4_t tmp0 = vreinterpretq_s32_f32(_a); + const int32x4_t tmp1 = vreinterpretq_s32_f32(_b); + const uint32x4_t tmp2 = vcltq_s32(tmp0, tmp1); + const simd128_neon_t result = vreinterpretq_f32_u32(tmp2); + + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_neon_t simd_icmpgt(simd128_neon_t _a, simd128_neon_t _b) + { + const int32x4_t tmp0 = vreinterpretq_s32_f32(_a); + const int32x4_t tmp1 = vreinterpretq_s32_f32(_b); + const uint32x4_t tmp2 = vcgtq_s32(tmp0, tmp1); + const simd128_neon_t result = vreinterpretq_f32_u32(tmp2); + + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_neon_t simd_imin(simd128_neon_t _a, simd128_neon_t _b) + { + const int32x4_t tmp0 = vreinterpretq_s32_f32(_a); + const int32x4_t tmp1 = vreinterpretq_s32_f32(_b); + const int32x4_t tmp2 = vminq_s32(tmp0, tmp1); + const simd128_neon_t result = vreinterpretq_f32_s32(tmp2); + + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_neon_t simd_imax(simd128_neon_t _a, simd128_neon_t _b) + { + const int32x4_t tmp0 = vreinterpretq_s32_f32(_a); + const int32x4_t tmp1 = vreinterpretq_s32_f32(_b); + const int32x4_t tmp2 = vmaxq_s32(tmp0, tmp1); + const simd128_neon_t result = vreinterpretq_f32_s32(tmp2); + + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_neon_t simd_iadd(simd128_neon_t _a, simd128_neon_t _b) + { + const int32x4_t tmp0 = vreinterpretq_s32_f32(_a); + const int32x4_t tmp1 = vreinterpretq_s32_f32(_b); + const int32x4_t tmp2 = vaddq_s32(tmp0, tmp1); + const simd128_neon_t result = vreinterpretq_f32_s32(tmp2); + + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_neon_t simd_isub(simd128_neon_t _a, simd128_neon_t _b) + { + const int32x4_t tmp0 = vreinterpretq_s32_f32(_a); + const int32x4_t tmp1 = vreinterpretq_s32_f32(_b); + const int32x4_t tmp2 = vsubq_s32(tmp0, tmp1); + const simd128_neon_t result = vreinterpretq_f32_s32(tmp2); + + return result; + } + + template<> + BX_SIMD_INLINE simd128_neon_t simd_shuf_xAzC(simd128_neon_t _a, simd128_neon_t _b) + { + return simd_shuf_xAzC_ni(_a, _b); + } + + template<> + BX_SIMD_INLINE simd128_neon_t simd_shuf_yBwD(simd128_neon_t _a, simd128_neon_t _b) + { + return simd_shuf_yBwD_ni(_a, _b); + } + + 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 new file mode 100644 index 0000000..e85ae14 --- /dev/null +++ b/3rdparty/bx/include/bx/inline/simd128_ref.inl @@ -0,0 +1,648 @@ +/* + * Copyright 2010-2016 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" + +namespace bx +{ +#define ELEMx 0 +#define ELEMy 1 +#define ELEMz 2 +#define ELEMw 3 +#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; \ + } + +#include "simd128_swizzle.inl" + +#undef BX_SIMD128_IMPLEMENT_SWIZZLE +#undef ELEMw +#undef ELEMz +#undef ELEMy +#undef ELEMx + +#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<> \ + 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) ); \ + } + +BX_SIMD128_IMPLEMENT_TEST(x , 0x1); +BX_SIMD128_IMPLEMENT_TEST(y , 0x2); +BX_SIMD128_IMPLEMENT_TEST(xy , 0x3); +BX_SIMD128_IMPLEMENT_TEST(z , 0x4); +BX_SIMD128_IMPLEMENT_TEST(xz , 0x5); +BX_SIMD128_IMPLEMENT_TEST(yz , 0x6); +BX_SIMD128_IMPLEMENT_TEST(xyz , 0x7); +BX_SIMD128_IMPLEMENT_TEST(w , 0x8); +BX_SIMD128_IMPLEMENT_TEST(xw , 0x9); +BX_SIMD128_IMPLEMENT_TEST(yw , 0xa); +BX_SIMD128_IMPLEMENT_TEST(xyw , 0xb); +BX_SIMD128_IMPLEMENT_TEST(zw , 0xc); +BX_SIMD128_IMPLEMENT_TEST(xzw , 0xd); +BX_SIMD128_IMPLEMENT_TEST(yzw , 0xe); +BX_SIMD128_IMPLEMENT_TEST(xyzw , 0xf); + +#undef BX_SIMD128_IMPLEMENT_TEST + + template<> + BX_SIMD_FORCE_INLINE simd128_ref_t simd_shuf_xyAB(simd128_ref_t _a, simd128_ref_t _b) + { + simd128_ref_t result; + result.uxyzw[0] = _a.uxyzw[0]; + result.uxyzw[1] = _a.uxyzw[1]; + result.uxyzw[2] = _b.uxyzw[0]; + result.uxyzw[3] = _b.uxyzw[1]; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_ref_t simd_shuf_ABxy(simd128_ref_t _a, simd128_ref_t _b) + { + simd128_ref_t result; + result.uxyzw[0] = _b.uxyzw[0]; + result.uxyzw[1] = _b.uxyzw[1]; + result.uxyzw[2] = _a.uxyzw[0]; + result.uxyzw[3] = _a.uxyzw[1]; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_ref_t simd_shuf_CDzw(simd128_ref_t _a, simd128_ref_t _b) + { + simd128_ref_t result; + result.uxyzw[0] = _b.uxyzw[2]; + result.uxyzw[1] = _b.uxyzw[3]; + result.uxyzw[2] = _a.uxyzw[2]; + result.uxyzw[3] = _a.uxyzw[3]; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_ref_t simd_shuf_zwCD(simd128_ref_t _a, simd128_ref_t _b) + { + simd128_ref_t result; + result.uxyzw[0] = _a.uxyzw[2]; + result.uxyzw[1] = _a.uxyzw[3]; + result.uxyzw[2] = _b.uxyzw[2]; + result.uxyzw[3] = _b.uxyzw[3]; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_ref_t simd_shuf_xAyB(simd128_ref_t _a, simd128_ref_t _b) + { + simd128_ref_t result; + result.uxyzw[0] = _a.uxyzw[0]; + result.uxyzw[1] = _b.uxyzw[0]; + result.uxyzw[2] = _a.uxyzw[1]; + result.uxyzw[3] = _b.uxyzw[1]; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_ref_t simd_shuf_yBxA(simd128_ref_t _a, simd128_ref_t _b) + { + simd128_ref_t result; + result.uxyzw[0] = _a.uxyzw[1]; + result.uxyzw[1] = _b.uxyzw[1]; + result.uxyzw[2] = _a.uxyzw[0]; + result.uxyzw[3] = _b.uxyzw[0]; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_ref_t simd_shuf_zCwD(simd128_ref_t _a, simd128_ref_t _b) + { + simd128_ref_t result; + result.uxyzw[0] = _a.uxyzw[2]; + result.uxyzw[1] = _b.uxyzw[2]; + result.uxyzw[2] = _a.uxyzw[3]; + result.uxyzw[3] = _b.uxyzw[3]; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_ref_t simd_shuf_CzDw(simd128_ref_t _a, simd128_ref_t _b) + { + simd128_ref_t result; + result.uxyzw[0] = _b.uxyzw[2]; + result.uxyzw[1] = _a.uxyzw[2]; + result.uxyzw[2] = _b.uxyzw[3]; + result.uxyzw[3] = _a.uxyzw[3]; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE float simd_x(simd128_ref_t _a) + { + return _a.fxyzw[0]; + } + + template<> + BX_SIMD_FORCE_INLINE float simd_y(simd128_ref_t _a) + { + return _a.fxyzw[1]; + } + + template<> + BX_SIMD_FORCE_INLINE float simd_z(simd128_ref_t _a) + { + return _a.fxyzw[2]; + } + + template<> + BX_SIMD_FORCE_INLINE float simd_w(simd128_ref_t _a) + { + return _a.fxyzw[3]; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_ref_t simd_ld(const void* _ptr) + { + const uint32_t* input = reinterpret_cast(_ptr); + simd128_ref_t result; + result.uxyzw[0] = input[0]; + result.uxyzw[1] = input[1]; + result.uxyzw[2] = input[2]; + result.uxyzw[3] = input[3]; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE void simd_st(void* _ptr, simd128_ref_t _a) + { + uint32_t* result = reinterpret_cast(_ptr); + result[0] = _a.uxyzw[0]; + result[1] = _a.uxyzw[1]; + result[2] = _a.uxyzw[2]; + result[3] = _a.uxyzw[3]; + } + + template<> + BX_SIMD_FORCE_INLINE void simd_stx(void* _ptr, simd128_ref_t _a) + { + uint32_t* result = reinterpret_cast(_ptr); + result[0] = _a.uxyzw[0]; + } + + template<> + BX_SIMD_FORCE_INLINE void simd_stream(void* _ptr, simd128_ref_t _a) + { + uint32_t* result = reinterpret_cast(_ptr); + result[0] = _a.uxyzw[0]; + result[1] = _a.uxyzw[1]; + result[2] = _a.uxyzw[2]; + result[3] = _a.uxyzw[3]; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_ref_t simd_ld(float _x, float _y, float _z, float _w) + { + simd128_ref_t result; + result.fxyzw[0] = _x; + result.fxyzw[1] = _y; + result.fxyzw[2] = _z; + result.fxyzw[3] = _w; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_ref_t simd_ild(uint32_t _x, uint32_t _y, uint32_t _z, uint32_t _w) + { + simd128_ref_t result; + result.uxyzw[0] = _x; + result.uxyzw[1] = _y; + result.uxyzw[2] = _z; + result.uxyzw[3] = _w; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_ref_t simd_splat(const void* _ptr) + { + const uint32_t val = *reinterpret_cast(_ptr); + simd128_ref_t result; + result.uxyzw[0] = val; + result.uxyzw[1] = val; + result.uxyzw[2] = val; + result.uxyzw[3] = val; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_ref_t simd_splat(float _a) + { + return simd_ld(_a, _a, _a, _a); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_ref_t simd_isplat(uint32_t _a) + { + return simd_ild(_a, _a, _a, _a); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_ref_t simd_zero() + { + return simd_ild(0, 0, 0, 0); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_ref_t simd_itof(simd128_ref_t _a) + { + simd128_ref_t result; + result.fxyzw[0] = (float)_a.ixyzw[0]; + result.fxyzw[1] = (float)_a.ixyzw[1]; + result.fxyzw[2] = (float)_a.ixyzw[2]; + result.fxyzw[3] = (float)_a.ixyzw[3]; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_ref_t simd_ftoi(simd128_ref_t _a) + { + simd128_ref_t result; + result.ixyzw[0] = (int)_a.fxyzw[0]; + result.ixyzw[1] = (int)_a.fxyzw[1]; + result.ixyzw[2] = (int)_a.fxyzw[2]; + result.ixyzw[3] = (int)_a.fxyzw[3]; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_ref_t simd_round(simd128_ref_t _a) + { + return simd_round_ni(_a); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_ref_t simd_add(simd128_ref_t _a, simd128_ref_t _b) + { + simd128_ref_t result; + result.fxyzw[0] = _a.fxyzw[0] + _b.fxyzw[0]; + result.fxyzw[1] = _a.fxyzw[1] + _b.fxyzw[1]; + result.fxyzw[2] = _a.fxyzw[2] + _b.fxyzw[2]; + result.fxyzw[3] = _a.fxyzw[3] + _b.fxyzw[3]; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_ref_t simd_sub(simd128_ref_t _a, simd128_ref_t _b) + { + simd128_ref_t result; + result.fxyzw[0] = _a.fxyzw[0] - _b.fxyzw[0]; + result.fxyzw[1] = _a.fxyzw[1] - _b.fxyzw[1]; + result.fxyzw[2] = _a.fxyzw[2] - _b.fxyzw[2]; + result.fxyzw[3] = _a.fxyzw[3] - _b.fxyzw[3]; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_ref_t simd_mul(simd128_ref_t _a, simd128_ref_t _b) + { + simd128_ref_t result; + result.fxyzw[0] = _a.fxyzw[0] * _b.fxyzw[0]; + result.fxyzw[1] = _a.fxyzw[1] * _b.fxyzw[1]; + result.fxyzw[2] = _a.fxyzw[2] * _b.fxyzw[2]; + result.fxyzw[3] = _a.fxyzw[3] * _b.fxyzw[3]; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_ref_t simd_div(simd128_ref_t _a, simd128_ref_t _b) + { + simd128_ref_t result; + result.fxyzw[0] = _a.fxyzw[0] / _b.fxyzw[0]; + result.fxyzw[1] = _a.fxyzw[1] / _b.fxyzw[1]; + result.fxyzw[2] = _a.fxyzw[2] / _b.fxyzw[2]; + result.fxyzw[3] = _a.fxyzw[3] / _b.fxyzw[3]; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_ref_t simd_rcp_est(simd128_ref_t _a) + { + simd128_ref_t result; + result.fxyzw[0] = 1.0f / _a.fxyzw[0]; + result.fxyzw[1] = 1.0f / _a.fxyzw[1]; + result.fxyzw[2] = 1.0f / _a.fxyzw[2]; + result.fxyzw[3] = 1.0f / _a.fxyzw[3]; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_ref_t simd_sqrt(simd128_ref_t _a) + { + simd128_ref_t result; + result.fxyzw[0] = fsqrt(_a.fxyzw[0]); + result.fxyzw[1] = fsqrt(_a.fxyzw[1]); + result.fxyzw[2] = fsqrt(_a.fxyzw[2]); + result.fxyzw[3] = fsqrt(_a.fxyzw[3]); + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_ref_t simd_rsqrt_est(simd128_ref_t _a) + { + simd128_ref_t result; + result.fxyzw[0] = 1.0f / fsqrt(_a.fxyzw[0]); + result.fxyzw[1] = 1.0f / fsqrt(_a.fxyzw[1]); + result.fxyzw[2] = 1.0f / fsqrt(_a.fxyzw[2]); + result.fxyzw[3] = 1.0f / fsqrt(_a.fxyzw[3]); + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_ref_t simd_cmpeq(simd128_ref_t _a, simd128_ref_t _b) + { + simd128_ref_t result; + result.ixyzw[0] = _a.fxyzw[0] == _b.fxyzw[0] ? 0xffffffff : 0x0; + result.ixyzw[1] = _a.fxyzw[1] == _b.fxyzw[1] ? 0xffffffff : 0x0; + result.ixyzw[2] = _a.fxyzw[2] == _b.fxyzw[2] ? 0xffffffff : 0x0; + result.ixyzw[3] = _a.fxyzw[3] == _b.fxyzw[3] ? 0xffffffff : 0x0; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_ref_t simd_cmplt(simd128_ref_t _a, simd128_ref_t _b) + { + simd128_ref_t result; + result.ixyzw[0] = _a.fxyzw[0] < _b.fxyzw[0] ? 0xffffffff : 0x0; + result.ixyzw[1] = _a.fxyzw[1] < _b.fxyzw[1] ? 0xffffffff : 0x0; + result.ixyzw[2] = _a.fxyzw[2] < _b.fxyzw[2] ? 0xffffffff : 0x0; + result.ixyzw[3] = _a.fxyzw[3] < _b.fxyzw[3] ? 0xffffffff : 0x0; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_ref_t simd_cmple(simd128_ref_t _a, simd128_ref_t _b) + { + simd128_ref_t result; + result.ixyzw[0] = _a.fxyzw[0] <= _b.fxyzw[0] ? 0xffffffff : 0x0; + result.ixyzw[1] = _a.fxyzw[1] <= _b.fxyzw[1] ? 0xffffffff : 0x0; + result.ixyzw[2] = _a.fxyzw[2] <= _b.fxyzw[2] ? 0xffffffff : 0x0; + result.ixyzw[3] = _a.fxyzw[3] <= _b.fxyzw[3] ? 0xffffffff : 0x0; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_ref_t simd_cmpgt(simd128_ref_t _a, simd128_ref_t _b) + { + simd128_ref_t result; + result.ixyzw[0] = _a.fxyzw[0] > _b.fxyzw[0] ? 0xffffffff : 0x0; + result.ixyzw[1] = _a.fxyzw[1] > _b.fxyzw[1] ? 0xffffffff : 0x0; + result.ixyzw[2] = _a.fxyzw[2] > _b.fxyzw[2] ? 0xffffffff : 0x0; + result.ixyzw[3] = _a.fxyzw[3] > _b.fxyzw[3] ? 0xffffffff : 0x0; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_ref_t simd_cmpge(simd128_ref_t _a, simd128_ref_t _b) + { + simd128_ref_t result; + result.ixyzw[0] = _a.fxyzw[0] >= _b.fxyzw[0] ? 0xffffffff : 0x0; + result.ixyzw[1] = _a.fxyzw[1] >= _b.fxyzw[1] ? 0xffffffff : 0x0; + result.ixyzw[2] = _a.fxyzw[2] >= _b.fxyzw[2] ? 0xffffffff : 0x0; + result.ixyzw[3] = _a.fxyzw[3] >= _b.fxyzw[3] ? 0xffffffff : 0x0; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_ref_t simd_min(simd128_ref_t _a, simd128_ref_t _b) + { + simd128_ref_t result; + result.fxyzw[0] = _a.fxyzw[0] < _b.fxyzw[0] ? _a.fxyzw[0] : _b.fxyzw[0]; + result.fxyzw[1] = _a.fxyzw[1] < _b.fxyzw[1] ? _a.fxyzw[1] : _b.fxyzw[1]; + result.fxyzw[2] = _a.fxyzw[2] < _b.fxyzw[2] ? _a.fxyzw[2] : _b.fxyzw[2]; + result.fxyzw[3] = _a.fxyzw[3] < _b.fxyzw[3] ? _a.fxyzw[3] : _b.fxyzw[3]; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_ref_t simd_max(simd128_ref_t _a, simd128_ref_t _b) + { + simd128_ref_t result; + result.fxyzw[0] = _a.fxyzw[0] > _b.fxyzw[0] ? _a.fxyzw[0] : _b.fxyzw[0]; + result.fxyzw[1] = _a.fxyzw[1] > _b.fxyzw[1] ? _a.fxyzw[1] : _b.fxyzw[1]; + result.fxyzw[2] = _a.fxyzw[2] > _b.fxyzw[2] ? _a.fxyzw[2] : _b.fxyzw[2]; + result.fxyzw[3] = _a.fxyzw[3] > _b.fxyzw[3] ? _a.fxyzw[3] : _b.fxyzw[3]; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_ref_t simd_and(simd128_ref_t _a, simd128_ref_t _b) + { + simd128_ref_t result; + result.uxyzw[0] = _a.uxyzw[0] & _b.uxyzw[0]; + result.uxyzw[1] = _a.uxyzw[1] & _b.uxyzw[1]; + result.uxyzw[2] = _a.uxyzw[2] & _b.uxyzw[2]; + result.uxyzw[3] = _a.uxyzw[3] & _b.uxyzw[3]; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_ref_t simd_andc(simd128_ref_t _a, simd128_ref_t _b) + { + simd128_ref_t result; + result.uxyzw[0] = _a.uxyzw[0] & ~_b.uxyzw[0]; + result.uxyzw[1] = _a.uxyzw[1] & ~_b.uxyzw[1]; + result.uxyzw[2] = _a.uxyzw[2] & ~_b.uxyzw[2]; + result.uxyzw[3] = _a.uxyzw[3] & ~_b.uxyzw[3]; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_ref_t simd_or(simd128_ref_t _a, simd128_ref_t _b) + { + simd128_ref_t result; + result.uxyzw[0] = _a.uxyzw[0] | _b.uxyzw[0]; + result.uxyzw[1] = _a.uxyzw[1] | _b.uxyzw[1]; + result.uxyzw[2] = _a.uxyzw[2] | _b.uxyzw[2]; + result.uxyzw[3] = _a.uxyzw[3] | _b.uxyzw[3]; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_ref_t simd_xor(simd128_ref_t _a, simd128_ref_t _b) + { + simd128_ref_t result; + result.uxyzw[0] = _a.uxyzw[0] ^ _b.uxyzw[0]; + result.uxyzw[1] = _a.uxyzw[1] ^ _b.uxyzw[1]; + result.uxyzw[2] = _a.uxyzw[2] ^ _b.uxyzw[2]; + result.uxyzw[3] = _a.uxyzw[3] ^ _b.uxyzw[3]; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_ref_t simd_sll(simd128_ref_t _a, int _count) + { + simd128_ref_t result; + result.uxyzw[0] = _a.uxyzw[0] << _count; + result.uxyzw[1] = _a.uxyzw[1] << _count; + result.uxyzw[2] = _a.uxyzw[2] << _count; + result.uxyzw[3] = _a.uxyzw[3] << _count; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_ref_t simd_srl(simd128_ref_t _a, int _count) + { + simd128_ref_t result; + result.uxyzw[0] = _a.uxyzw[0] >> _count; + result.uxyzw[1] = _a.uxyzw[1] >> _count; + result.uxyzw[2] = _a.uxyzw[2] >> _count; + result.uxyzw[3] = _a.uxyzw[3] >> _count; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_ref_t simd_sra(simd128_ref_t _a, int _count) + { + simd128_ref_t result; + result.ixyzw[0] = _a.ixyzw[0] >> _count; + result.ixyzw[1] = _a.ixyzw[1] >> _count; + result.ixyzw[2] = _a.ixyzw[2] >> _count; + result.ixyzw[3] = _a.ixyzw[3] >> _count; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_ref_t simd_icmpeq(simd128_ref_t _a, simd128_ref_t _b) + { + simd128_ref_t result; + result.ixyzw[0] = _a.ixyzw[0] == _b.ixyzw[0] ? 0xffffffff : 0x0; + result.ixyzw[1] = _a.ixyzw[1] == _b.ixyzw[1] ? 0xffffffff : 0x0; + result.ixyzw[2] = _a.ixyzw[2] == _b.ixyzw[2] ? 0xffffffff : 0x0; + result.ixyzw[3] = _a.ixyzw[3] == _b.ixyzw[3] ? 0xffffffff : 0x0; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_ref_t simd_icmplt(simd128_ref_t _a, simd128_ref_t _b) + { + simd128_ref_t result; + result.ixyzw[0] = _a.ixyzw[0] < _b.ixyzw[0] ? 0xffffffff : 0x0; + result.ixyzw[1] = _a.ixyzw[1] < _b.ixyzw[1] ? 0xffffffff : 0x0; + result.ixyzw[2] = _a.ixyzw[2] < _b.ixyzw[2] ? 0xffffffff : 0x0; + result.ixyzw[3] = _a.ixyzw[3] < _b.ixyzw[3] ? 0xffffffff : 0x0; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_ref_t simd_icmpgt(simd128_ref_t _a, simd128_ref_t _b) + { + simd128_ref_t result; + result.ixyzw[0] = _a.ixyzw[0] > _b.ixyzw[0] ? 0xffffffff : 0x0; + result.ixyzw[1] = _a.ixyzw[1] > _b.ixyzw[1] ? 0xffffffff : 0x0; + result.ixyzw[2] = _a.ixyzw[2] > _b.ixyzw[2] ? 0xffffffff : 0x0; + result.ixyzw[3] = _a.ixyzw[3] > _b.ixyzw[3] ? 0xffffffff : 0x0; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_ref_t simd_imin(simd128_ref_t _a, simd128_ref_t _b) + { + simd128_ref_t result; + result.ixyzw[0] = _a.ixyzw[0] < _b.ixyzw[0] ? _a.ixyzw[0] : _b.ixyzw[0]; + result.ixyzw[1] = _a.ixyzw[1] < _b.ixyzw[1] ? _a.ixyzw[1] : _b.ixyzw[1]; + result.ixyzw[2] = _a.ixyzw[2] < _b.ixyzw[2] ? _a.ixyzw[2] : _b.ixyzw[2]; + result.ixyzw[3] = _a.ixyzw[3] < _b.ixyzw[3] ? _a.ixyzw[3] : _b.ixyzw[3]; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_ref_t simd_imax(simd128_ref_t _a, simd128_ref_t _b) + { + simd128_ref_t result; + result.ixyzw[0] = _a.ixyzw[0] > _b.ixyzw[0] ? _a.ixyzw[0] : _b.ixyzw[0]; + result.ixyzw[1] = _a.ixyzw[1] > _b.ixyzw[1] ? _a.ixyzw[1] : _b.ixyzw[1]; + result.ixyzw[2] = _a.ixyzw[2] > _b.ixyzw[2] ? _a.ixyzw[2] : _b.ixyzw[2]; + result.ixyzw[3] = _a.ixyzw[3] > _b.ixyzw[3] ? _a.ixyzw[3] : _b.ixyzw[3]; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_ref_t simd_iadd(simd128_ref_t _a, simd128_ref_t _b) + { + simd128_ref_t result; + result.ixyzw[0] = _a.ixyzw[0] + _b.ixyzw[0]; + result.ixyzw[1] = _a.ixyzw[1] + _b.ixyzw[1]; + result.ixyzw[2] = _a.ixyzw[2] + _b.ixyzw[2]; + result.ixyzw[3] = _a.ixyzw[3] + _b.ixyzw[3]; + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_ref_t simd_isub(simd128_ref_t _a, simd128_ref_t _b) + { + simd128_ref_t result; + result.ixyzw[0] = _a.ixyzw[0] - _b.ixyzw[0]; + result.ixyzw[1] = _a.ixyzw[1] - _b.ixyzw[1]; + result.ixyzw[2] = _a.ixyzw[2] - _b.ixyzw[2]; + result.ixyzw[3] = _a.ixyzw[3] - _b.ixyzw[3]; + return result; + } + +} // namespace bx + +#endif // BX_SIMD128_REF_H_HEADER_GUARD diff --git a/3rdparty/bx/include/bx/inline/simd128_sse.inl b/3rdparty/bx/include/bx/inline/simd128_sse.inl new file mode 100644 index 0000000..b0ed852 --- /dev/null +++ b/3rdparty/bx/include/bx/inline/simd128_sse.inl @@ -0,0 +1,647 @@ +/* + * Copyright 2010-2016 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" + +namespace bx +{ +#define ELEMx 0 +#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) \ + { \ + return _mm_shuffle_ps( _a, _a, _MM_SHUFFLE(ELEM##_w, ELEM##_z, ELEM##_y, ELEM##_x ) ); \ + } + +#include "simd128_swizzle.inl" + +#undef BX_SIMD128_IMPLEMENT_SWIZZLE +#undef ELEMw +#undef ELEMz +#undef ELEMy +#undef ELEMx + +#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<> \ + BX_SIMD_FORCE_INLINE bool simd_test_all_##_xyzw(simd128_sse_t _test) \ + { \ + return (_mask) == (_mm_movemask_ps(_test)&(_mask) ); \ + } + +BX_SIMD128_IMPLEMENT_TEST(x , 0x1); +BX_SIMD128_IMPLEMENT_TEST(y , 0x2); +BX_SIMD128_IMPLEMENT_TEST(xy , 0x3); +BX_SIMD128_IMPLEMENT_TEST(z , 0x4); +BX_SIMD128_IMPLEMENT_TEST(xz , 0x5); +BX_SIMD128_IMPLEMENT_TEST(yz , 0x6); +BX_SIMD128_IMPLEMENT_TEST(xyz , 0x7); +BX_SIMD128_IMPLEMENT_TEST(w , 0x8); +BX_SIMD128_IMPLEMENT_TEST(xw , 0x9); +BX_SIMD128_IMPLEMENT_TEST(yw , 0xa); +BX_SIMD128_IMPLEMENT_TEST(xyw , 0xb); +BX_SIMD128_IMPLEMENT_TEST(zw , 0xc); +BX_SIMD128_IMPLEMENT_TEST(xzw , 0xd); +BX_SIMD128_IMPLEMENT_TEST(yzw , 0xe); +BX_SIMD128_IMPLEMENT_TEST(xyzw , 0xf); + +#undef BX_SIMD128_IMPLEMENT_TEST + + template<> + BX_SIMD_FORCE_INLINE simd128_sse_t simd_shuf_xyAB(simd128_sse_t _a, simd128_sse_t _b) + { + return _mm_movelh_ps(_a, _b); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_sse_t simd_shuf_ABxy(simd128_sse_t _a, simd128_sse_t _b) + { + return _mm_movelh_ps(_b, _a); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_sse_t simd_shuf_CDzw(simd128_sse_t _a, simd128_sse_t _b) + { + return _mm_movehl_ps(_a, _b); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_sse_t simd_shuf_zwCD(simd128_sse_t _a, simd128_sse_t _b) + { + return _mm_movehl_ps(_b, _a); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_sse_t simd_shuf_xAyB(simd128_sse_t _a, simd128_sse_t _b) + { + return _mm_unpacklo_ps(_a, _b); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_sse_t simd_shuf_yBxA(simd128_sse_t _a, simd128_sse_t _b) + { + return _mm_unpacklo_ps(_b, _a); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_sse_t simd_shuf_zCwD(simd128_sse_t _a, simd128_sse_t _b) + { + return _mm_unpackhi_ps(_a, _b); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_sse_t simd_shuf_CzDw(simd128_sse_t _a, simd128_sse_t _b) + { + return _mm_unpackhi_ps(_b, _a); + } + + template<> + BX_SIMD_FORCE_INLINE float simd_x(simd128_sse_t _a) + { + return _mm_cvtss_f32(_a); + } + + template<> + BX_SIMD_FORCE_INLINE float simd_y(simd128_sse_t _a) + { + const simd128_sse_t yyyy = simd_swiz_yyyy(_a); + const float result = _mm_cvtss_f32(yyyy); + + return result; + } + + template<> + BX_SIMD_FORCE_INLINE float simd_z(simd128_sse_t _a) + { + const simd128_sse_t zzzz = simd_swiz_zzzz(_a); + const float result = _mm_cvtss_f32(zzzz); + + return result; + } + + template<> + BX_SIMD_FORCE_INLINE float simd_w(simd128_sse_t _a) + { + const simd128_sse_t wwww = simd_swiz_wwww(_a); + const float result = _mm_cvtss_f32(wwww); + + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_sse_t simd_ld(const void* _ptr) + { + return _mm_load_ps(reinterpret_cast(_ptr) ); + } + + template<> + BX_SIMD_FORCE_INLINE void simd_st(void* _ptr, simd128_sse_t _a) + { + _mm_store_ps(reinterpret_cast(_ptr), _a); + } + + template<> + BX_SIMD_FORCE_INLINE void simd_stx(void* _ptr, simd128_sse_t _a) + { + _mm_store_ss(reinterpret_cast(_ptr), _a); + } + + template<> + BX_SIMD_FORCE_INLINE void simd_stream(void* _ptr, simd128_sse_t _a) + { + _mm_stream_ps(reinterpret_cast(_ptr), _a); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_sse_t simd_ld(float _x, float _y, float _z, float _w) + { + return _mm_set_ps(_w, _z, _y, _x); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_sse_t simd_ild(uint32_t _x, uint32_t _y, uint32_t _z, uint32_t _w) + { + const __m128i set = _mm_set_epi32(_w, _z, _y, _x); + const simd128_sse_t result = _mm_castsi128_ps(set); + + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_sse_t simd_splat(const void* _ptr) + { + const simd128_sse_t x___ = _mm_load_ss(reinterpret_cast(_ptr) ); + const simd128_sse_t result = simd_swiz_xxxx(x___); + + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_sse_t simd_splat(float _a) + { + return _mm_set1_ps(_a); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_sse_t simd_isplat(uint32_t _a) + { + const __m128i splat = _mm_set1_epi32(_a); + const simd128_sse_t result = _mm_castsi128_ps(splat); + + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_sse_t simd_zero() + { + return _mm_setzero_ps(); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_sse_t simd_itof(simd128_sse_t _a) + { + const __m128i itof = _mm_castps_si128(_a); + const simd128_sse_t result = _mm_cvtepi32_ps(itof); + + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_sse_t simd_ftoi(simd128_sse_t _a) + { + const __m128i ftoi = _mm_cvtps_epi32(_a); + const simd128_sse_t result = _mm_castsi128_ps(ftoi); + + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_sse_t simd_round(simd128_sse_t _a) + { +#if defined(__SSE4_1__) + return _mm_round_ps(_a, _MM_FROUND_NINT); +#else + const __m128i round = _mm_cvtps_epi32(_a); + const simd128_sse_t result = _mm_cvtepi32_ps(round); + + return result; +#endif // defined(__SSE4_1__) + } + + template<> + BX_SIMD_FORCE_INLINE simd128_sse_t simd_add(simd128_sse_t _a, simd128_sse_t _b) + { + return _mm_add_ps(_a, _b); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_sse_t simd_sub(simd128_sse_t _a, simd128_sse_t _b) + { + return _mm_sub_ps(_a, _b); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_sse_t simd_mul(simd128_sse_t _a, simd128_sse_t _b) + { + return _mm_mul_ps(_a, _b); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_sse_t simd_div(simd128_sse_t _a, simd128_sse_t _b) + { + return _mm_div_ps(_a, _b); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_sse_t simd_rcp_est(simd128_sse_t _a) + { + return _mm_rcp_ps(_a); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_sse_t simd_sqrt(simd128_sse_t _a) + { + return _mm_sqrt_ps(_a); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_sse_t simd_rsqrt_est(simd128_sse_t _a) + { + return _mm_rsqrt_ps(_a); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_sse_t simd_dot3(simd128_sse_t _a, simd128_sse_t _b) + { +#if defined(__SSE4_1__) + return _mm_dp_ps(_a, _b, 0x77); +#else + return simd_dot3_ni(_a, _b); +#endif // defined(__SSE4__) + } + + template<> + BX_SIMD_FORCE_INLINE simd128_sse_t simd_dot(simd128_sse_t _a, simd128_sse_t _b) + { +#if defined(__SSE4_1__) + return _mm_dp_ps(_a, _b, 0xFF); +#else + return simd_dot_ni(_a, _b); +#endif // defined(__SSE4__) + } + + template<> + BX_SIMD_FORCE_INLINE simd128_sse_t simd_cmpeq(simd128_sse_t _a, simd128_sse_t _b) + { + return _mm_cmpeq_ps(_a, _b); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_sse_t simd_cmplt(simd128_sse_t _a, simd128_sse_t _b) + { + return _mm_cmplt_ps(_a, _b); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_sse_t simd_cmple(simd128_sse_t _a, simd128_sse_t _b) + { + return _mm_cmple_ps(_a, _b); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_sse_t simd_cmpgt(simd128_sse_t _a, simd128_sse_t _b) + { + return _mm_cmpgt_ps(_a, _b); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_sse_t simd_cmpge(simd128_sse_t _a, simd128_sse_t _b) + { + return _mm_cmpge_ps(_a, _b); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_sse_t simd_min(simd128_sse_t _a, simd128_sse_t _b) + { + return _mm_min_ps(_a, _b); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_sse_t simd_max(simd128_sse_t _a, simd128_sse_t _b) + { + return _mm_max_ps(_a, _b); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_sse_t simd_and(simd128_sse_t _a, simd128_sse_t _b) + { + return _mm_and_ps(_a, _b); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_sse_t simd_andc(simd128_sse_t _a, simd128_sse_t _b) + { + return _mm_andnot_ps(_b, _a); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_sse_t simd_or(simd128_sse_t _a, simd128_sse_t _b) + { + return _mm_or_ps(_a, _b); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_sse_t simd_xor(simd128_sse_t _a, simd128_sse_t _b) + { + return _mm_xor_ps(_a, _b); + } + + template<> + BX_SIMD_FORCE_INLINE simd128_sse_t simd_sll(simd128_sse_t _a, int _count) + { + const __m128i a = _mm_castps_si128(_a); + const __m128i shift = _mm_slli_epi32(a, _count); + const simd128_sse_t result = _mm_castsi128_ps(shift); + + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_sse_t simd_srl(simd128_sse_t _a, int _count) + { + const __m128i a = _mm_castps_si128(_a); + const __m128i shift = _mm_srli_epi32(a, _count); + const simd128_sse_t result = _mm_castsi128_ps(shift); + + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_sse_t simd_sra(simd128_sse_t _a, int _count) + { + const __m128i a = _mm_castps_si128(_a); + const __m128i shift = _mm_srai_epi32(a, _count); + const simd128_sse_t result = _mm_castsi128_ps(shift); + + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_sse_t simd_icmpeq(simd128_sse_t _a, simd128_sse_t _b) + { + const __m128i tmp0 = _mm_castps_si128(_a); + const __m128i tmp1 = _mm_castps_si128(_b); + const __m128i tmp2 = _mm_cmpeq_epi32(tmp0, tmp1); + const simd128_sse_t result = _mm_castsi128_ps(tmp2); + + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_sse_t simd_icmplt(simd128_sse_t _a, simd128_sse_t _b) + { + const __m128i tmp0 = _mm_castps_si128(_a); + const __m128i tmp1 = _mm_castps_si128(_b); + const __m128i tmp2 = _mm_cmplt_epi32(tmp0, tmp1); + const simd128_sse_t result = _mm_castsi128_ps(tmp2); + + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_sse_t simd_icmpgt(simd128_sse_t _a, simd128_sse_t _b) + { + const __m128i tmp0 = _mm_castps_si128(_a); + const __m128i tmp1 = _mm_castps_si128(_b); + const __m128i tmp2 = _mm_cmpgt_epi32(tmp0, tmp1); + const simd128_sse_t result = _mm_castsi128_ps(tmp2); + + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_sse_t simd_imin(simd128_sse_t _a, simd128_sse_t _b) + { +#if defined(__SSE4_1__) + const __m128i tmp0 = _mm_castps_si128(_a); + const __m128i tmp1 = _mm_castps_si128(_b); + const __m128i tmp2 = _mm_min_epi32(tmp0, tmp1); + const simd128_sse_t result = _mm_castsi128_ps(tmp2); + + return result; +#else + return simd_imin_ni(_a, _b); +#endif // defined(__SSE4_1__) + } + + template<> + BX_SIMD_FORCE_INLINE simd128_sse_t simd_imax(simd128_sse_t _a, simd128_sse_t _b) + { +#if defined(__SSE4_1__) + const __m128i tmp0 = _mm_castps_si128(_a); + const __m128i tmp1 = _mm_castps_si128(_b); + const __m128i tmp2 = _mm_max_epi32(tmp0, tmp1); + const simd128_sse_t result = _mm_castsi128_ps(tmp2); + + return result; +#else + return simd_imax_ni(_a, _b); +#endif // defined(__SSE4_1__) + } + + template<> + BX_SIMD_FORCE_INLINE simd128_sse_t simd_iadd(simd128_sse_t _a, simd128_sse_t _b) + { + const __m128i a = _mm_castps_si128(_a); + const __m128i b = _mm_castps_si128(_b); + const __m128i add = _mm_add_epi32(a, b); + const simd128_sse_t result = _mm_castsi128_ps(add); + + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd128_sse_t simd_isub(simd128_sse_t _a, simd128_sse_t _b) + { + const __m128i a = _mm_castps_si128(_a); + const __m128i b = _mm_castps_si128(_b); + const __m128i sub = _mm_sub_epi32(a, b); + const simd128_sse_t result = _mm_castsi128_ps(sub); + + return result; + } + + template<> + BX_SIMD_INLINE simd128_sse_t simd_shuf_xAzC(simd128_sse_t _a, simd128_sse_t _b) + { + return simd_shuf_xAzC_ni(_a, _b); + } + + template<> + BX_SIMD_INLINE simd128_sse_t simd_shuf_yBwD(simd128_sse_t _a, simd128_sse_t _b) + { + return simd_shuf_yBwD_ni(_a, _b); + } + + template<> + BX_SIMD_INLINE simd128_sse_t simd_rcp(simd128_sse_t _a) + { + return simd_rcp_ni(_a); + } + + template<> + BX_SIMD_INLINE simd128_sse_t simd_orx(simd128_sse_t _a) + { + return simd_orx_ni(_a); + } + + template<> + BX_SIMD_INLINE simd128_sse_t simd_orc(simd128_sse_t _a, simd128_sse_t _b) + { + return simd_orc_ni(_a, _b); + } + + template<> + BX_SIMD_INLINE simd128_sse_t simd_neg(simd128_sse_t _a) + { + return simd_neg_ni(_a); + } + + template<> + BX_SIMD_INLINE simd128_sse_t simd_madd(simd128_sse_t _a, simd128_sse_t _b, simd128_sse_t _c) + { + return simd_madd_ni(_a, _b, _c); + } + + template<> + BX_SIMD_INLINE simd128_sse_t simd_nmsub(simd128_sse_t _a, simd128_sse_t _b, simd128_sse_t _c) + { + return simd_nmsub_ni(_a, _b, _c); + } + + template<> + BX_SIMD_INLINE simd128_sse_t simd_div_nr(simd128_sse_t _a, simd128_sse_t _b) + { + return simd_div_nr_ni(_a, _b); + } + + template<> + BX_SIMD_INLINE simd128_sse_t simd_selb(simd128_sse_t _mask, simd128_sse_t _a, simd128_sse_t _b) + { + return simd_selb_ni(_mask, _a, _b); + } + + template<> + BX_SIMD_INLINE simd128_sse_t simd_sels(simd128_sse_t _test, simd128_sse_t _a, simd128_sse_t _b) + { + return simd_sels_ni(_test, _a, _b); + } + + template<> + BX_SIMD_INLINE simd128_sse_t simd_not(simd128_sse_t _a) + { + return simd_not_ni(_a); + } + + template<> + BX_SIMD_INLINE simd128_sse_t simd_abs(simd128_sse_t _a) + { + return simd_abs_ni(_a); + } + + template<> + BX_SIMD_INLINE simd128_sse_t simd_clamp(simd128_sse_t _a, simd128_sse_t _min, simd128_sse_t _max) + { + return simd_clamp_ni(_a, _min, _max); + } + + template<> + BX_SIMD_INLINE simd128_sse_t simd_lerp(simd128_sse_t _a, simd128_sse_t _b, simd128_sse_t _s) + { + return simd_lerp_ni(_a, _b, _s); + } + + template<> + BX_SIMD_INLINE simd128_sse_t simd_rsqrt(simd128_sse_t _a) + { + return simd_rsqrt_ni(_a); + } + + template<> + BX_SIMD_INLINE simd128_sse_t simd_rsqrt_nr(simd128_sse_t _a) + { + return simd_rsqrt_nr_ni(_a); + } + + template<> + BX_SIMD_INLINE simd128_sse_t simd_rsqrt_carmack(simd128_sse_t _a) + { + return simd_rsqrt_carmack_ni(_a); + } + + template<> + BX_SIMD_INLINE simd128_sse_t simd_sqrt_nr(simd128_sse_t _a) + { + return simd_sqrt_nr_ni(_a); + } + + template<> + BX_SIMD_INLINE simd128_sse_t simd_log2(simd128_sse_t _a) + { + return simd_log2_ni(_a); + } + + template<> + BX_SIMD_INLINE simd128_sse_t simd_exp2(simd128_sse_t _a) + { + return simd_exp2_ni(_a); + } + + template<> + BX_SIMD_INLINE simd128_sse_t simd_pow(simd128_sse_t _a, simd128_sse_t _b) + { + return simd_pow_ni(_a, _b); + } + + template<> + BX_SIMD_INLINE simd128_sse_t simd_cross3(simd128_sse_t _a, simd128_sse_t _b) + { + return simd_cross3_ni(_a, _b); + } + + template<> + BX_SIMD_INLINE simd128_sse_t simd_normalize3(simd128_sse_t _a) + { + return simd_normalize3_ni(_a); + } + + template<> + BX_SIMD_INLINE simd128_sse_t simd_ceil(simd128_sse_t _a) + { + return simd_ceil_ni(_a); + } + + template<> + BX_SIMD_INLINE simd128_sse_t simd_floor(simd128_sse_t _a) + { + return simd_floor_ni(_a); + } + + 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 new file mode 100644 index 0000000..4185be8 --- /dev/null +++ b/3rdparty/bx/include/bx/inline/simd128_swizzle.inl @@ -0,0 +1,266 @@ +/* + * Copyright 2010-2015 Branimir Karadzic. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#ifndef BX_SIMD_T_H_HEADER_GUARD +# error "xmacro file, must be included from simd_*.h" +#endif // BX_FLOAT4_T_H_HEADER_GUARD + +// included from float4_t.h +BX_SIMD128_IMPLEMENT_SWIZZLE(x, x, x, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, x, x, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, x, x, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, x, x, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, x, y, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, x, y, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, x, y, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, x, y, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, x, z, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, x, z, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, x, z, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, x, z, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, x, w, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, x, w, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, x, w, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, x, w, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, y, x, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, y, x, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, y, x, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, y, x, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, y, y, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, y, y, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, y, y, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, y, y, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, y, z, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, y, z, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, y, z, z) +// BX_SIMD128_IMPLEMENT_SWIZZLE(x, y, z, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, y, w, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, y, w, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, y, w, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, y, w, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, z, x, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, z, x, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, z, x, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, z, x, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, z, y, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, z, y, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, z, y, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, z, y, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, z, z, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, z, z, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, z, z, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, z, z, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, z, w, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, z, w, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, z, w, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, z, w, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, w, x, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, w, x, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, w, x, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, w, x, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, w, y, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, w, y, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, w, y, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, w, y, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, w, z, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, w, z, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, w, z, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, w, z, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, w, w, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, w, w, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, w, w, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(x, w, w, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, x, x, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, x, x, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, x, x, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, x, x, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, x, y, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, x, y, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, x, y, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, x, y, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, x, z, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, x, z, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, x, z, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, x, z, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, x, w, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, x, w, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, x, w, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, x, w, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, y, x, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, y, x, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, y, x, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, y, x, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, y, y, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, y, y, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, y, y, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, y, y, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, y, z, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, y, z, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, y, z, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, y, z, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, y, w, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, y, w, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, y, w, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, y, w, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, z, x, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, z, x, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, z, x, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, z, x, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, z, y, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, z, y, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, z, y, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, z, y, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, z, z, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, z, z, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, z, z, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, z, z, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, z, w, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, z, w, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, z, w, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, z, w, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, w, x, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, w, x, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, w, x, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, w, x, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, w, y, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, w, y, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, w, y, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, w, y, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, w, z, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, w, z, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, w, z, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, w, z, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, w, w, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, w, w, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, w, w, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(y, w, w, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, x, x, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, x, x, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, x, x, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, x, x, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, x, y, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, x, y, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, x, y, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, x, y, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, x, z, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, x, z, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, x, z, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, x, z, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, x, w, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, x, w, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, x, w, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, x, w, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, y, x, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, y, x, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, y, x, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, y, x, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, y, y, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, y, y, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, y, y, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, y, y, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, y, z, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, y, z, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, y, z, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, y, z, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, y, w, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, y, w, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, y, w, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, y, w, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, z, x, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, z, x, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, z, x, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, z, x, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, z, y, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, z, y, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, z, y, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, z, y, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, z, z, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, z, z, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, z, z, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, z, z, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, z, w, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, z, w, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, z, w, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, z, w, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, w, x, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, w, x, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, w, x, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, w, x, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, w, y, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, w, y, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, w, y, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, w, y, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, w, z, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, w, z, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, w, z, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, w, z, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, w, w, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, w, w, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, w, w, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(z, w, w, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, x, x, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, x, x, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, x, x, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, x, x, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, x, y, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, x, y, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, x, y, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, x, y, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, x, z, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, x, z, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, x, z, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, x, z, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, x, w, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, x, w, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, x, w, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, x, w, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, y, x, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, y, x, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, y, x, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, y, x, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, y, y, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, y, y, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, y, y, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, y, y, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, y, z, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, y, z, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, y, z, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, y, z, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, y, w, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, y, w, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, y, w, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, y, w, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, z, x, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, z, x, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, z, x, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, z, x, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, z, y, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, z, y, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, z, y, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, z, y, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, z, z, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, z, z, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, z, z, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, z, z, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, z, w, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, z, w, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, z, w, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, z, w, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, w, x, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, w, x, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, w, x, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, w, x, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, w, y, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, w, y, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, w, y, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, w, y, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, w, z, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, w, z, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, w, z, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, w, z, w) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, w, w, x) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, w, w, y) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, w, w, z) +BX_SIMD128_IMPLEMENT_SWIZZLE(w, w, w, w) diff --git a/3rdparty/bx/include/bx/inline/simd256_avx.inl b/3rdparty/bx/include/bx/inline/simd256_avx.inl new file mode 100644 index 0000000..5eed77b --- /dev/null +++ b/3rdparty/bx/include/bx/inline/simd256_avx.inl @@ -0,0 +1,77 @@ +/* + * Copyright 2010-2016 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" + +namespace bx +{ + template<> + BX_SIMD_FORCE_INLINE simd256_avx_t simd_ld(const void* _ptr) + { + return _mm256_load_ps(reinterpret_cast(_ptr) ); + } + + template<> + BX_SIMD_FORCE_INLINE void simd_st(void* _ptr, simd256_avx_t _a) + { + _mm256_store_ps(reinterpret_cast(_ptr), _a); + } + + template<> + BX_SIMD_FORCE_INLINE simd256_avx_t simd_ld(float _x, float _y, float _z, float _w, float _A, float _B, float _C, float _D) + { + return _mm256_set_ps(_D, _C, _B, _A, _w, _z, _y, _x); + } + + template<> + BX_SIMD_FORCE_INLINE simd256_avx_t 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) + { + const __m256i set = _mm256_set_epi32(_D, _C, _B, _A, _w, _z, _y, _x); + const simd256_avx_t result = _mm256_castsi256_ps(set); + + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd256_avx_t simd_splat(float _a) + { + return _mm256_set1_ps(_a); + } + + template<> + BX_SIMD_FORCE_INLINE simd256_avx_t simd_isplat(uint32_t _a) + { + const __m256i splat = _mm256_set1_epi32(_a); + const simd256_avx_t result = _mm256_castsi256_ps(splat); + + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd256_avx_t simd_itof(simd256_avx_t _a) + { + const __m256i itof = _mm256_castps_si256(_a); + const simd256_avx_t result = _mm256_cvtepi32_ps(itof); + + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd256_avx_t simd_ftoi(simd256_avx_t _a) + { + const __m256i ftoi = _mm256_cvtps_epi32(_a); + const simd256_avx_t result = _mm256_castsi256_ps(ftoi); + + return result; + } + + 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 new file mode 100644 index 0000000..6d9a5a3 --- /dev/null +++ b/3rdparty/bx/include/bx/inline/simd256_ref.inl @@ -0,0 +1,87 @@ +/* + * Copyright 2010-2016 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" + +namespace bx +{ + template<> + BX_SIMD_FORCE_INLINE simd256_ref_t simd_ld(const void* _ptr) + { + const simd256_ref_t::type* ptr = reinterpret_cast(_ptr); + simd256_ref_t result; + result.simd128_0 = simd_ld(&ptr[0]); + result.simd128_1 = simd_ld(&ptr[1]); + return result; + } + + template<> + BX_SIMD_FORCE_INLINE void simd_st(void* _ptr, simd256_ref_t& _a) + { + simd256_ref_t* result = reinterpret_cast(_ptr); + simd_st(&result[0], _a.simd128_0); + simd_st(&result[1], _a.simd128_1); + } + + template<> + BX_SIMD_FORCE_INLINE simd256_ref_t simd_ld(float _x, float _y, float _z, float _w, float _a, float _b, float _c, float _d) + { + simd256_ref_t result; + result.simd128_0 = simd_ld(_x, _y, _z, _w); + result.simd128_1 = simd_ld(_a, _b, _c, _d); + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd256_ref_t 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) + { + simd256_ref_t result; + result.simd128_0 = simd_ild(_x, _y, _z, _w); + result.simd128_1 = simd_ild(_a, _b, _c, _d); + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd256_ref_t simd_splat(float _a) + { + simd256_ref_t result; + result.simd128_0 = simd_splat(_a); + result.simd128_1 = simd_splat(_a); + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd256_ref_t simd_isplat(uint32_t _a) + { + simd256_ref_t result; + result.simd128_0 = simd_isplat(_a); + result.simd128_1 = simd_isplat(_a); + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd256_ref_t simd_itof(simd256_ref_t _a) + { + simd256_ref_t result; + result.simd128_0 = simd_itof(_a.simd128_0); + result.simd128_1 = simd_itof(_a.simd128_1); + return result; + } + + template<> + BX_SIMD_FORCE_INLINE simd256_ref_t simd_ftoi(simd256_ref_t _a) + { + simd256_ref_t result; + result.simd128_0 = simd_ftoi(_a.simd128_0); + result.simd128_1 = simd_ftoi(_a.simd128_1); + return result; + } + +} // 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 new file mode 100644 index 0000000..95767f2 --- /dev/null +++ b/3rdparty/bx/include/bx/inline/simd_ni.inl @@ -0,0 +1,558 @@ +/* + * Copyright 2010-2016 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 + BX_SIMD_INLINE Ty simd_shuf_xAzC_ni(Ty _a, Ty _b) + { + const Ty xAyB = simd_shuf_xAyB(_a, _b); + const Ty zCwD = simd_shuf_zCwD(_a, _b); + const Ty result = simd_shuf_xyAB(xAyB, zCwD); + + return result; + } + + template + BX_SIMD_INLINE Ty simd_shuf_yBwD_ni(Ty _a, Ty _b) + { + const Ty xAyB = simd_shuf_xAyB(_a, _b); + const Ty zCwD = simd_shuf_zCwD(_a, _b); + const Ty result = simd_shuf_zwCD(xAyB, zCwD); + + return result; + } + + template + BX_SIMD_INLINE Ty simd_madd_ni(Ty _a, Ty _b, Ty _c) + { + const Ty mul = simd_mul(_a, _b); + const Ty result = simd_add(mul, _c); + + return result; + } + + template + BX_SIMD_INLINE Ty simd_nmsub_ni(Ty _a, Ty _b, Ty _c) + { + const Ty mul = simd_mul(_a, _b); + const Ty result = simd_sub(_c, mul); + + return result; + } + + template + BX_SIMD_INLINE Ty simd_div_nr_ni(Ty _a, Ty _b) + { + const Ty oneish = simd_isplat(0x3f800001); + const Ty est = simd_rcp_est(_b); + const Ty iter0 = simd_mul(_a, est); + const Ty tmp1 = simd_nmsub(_b, est, oneish); + const Ty result = simd_madd(tmp1, iter0, iter0); + + return result; + } + + template + BX_SIMD_INLINE Ty simd_rcp_ni(Ty _a) + { + const Ty one = simd_splat(1.0f); + const Ty result = simd_div(one, _a); + + return result; + } + + template + BX_SIMD_INLINE Ty simd_orx_ni(Ty _a) + { + const Ty zwxy = simd_swiz_zwxy(_a); + const Ty tmp0 = simd_or(_a, zwxy); + const Ty tmp1 = simd_swiz_yyyy(_a); + const Ty tmp2 = simd_or(tmp0, tmp1); + const Ty mf000 = simd_ild(UINT32_MAX, 0, 0, 0); + const Ty result = simd_and(tmp2, mf000); + + return result; + } + + template + BX_SIMD_INLINE Ty simd_orc_ni(Ty _a, Ty _b) + { + const Ty aorb = simd_or(_a, _b); + const Ty mffff = simd_isplat(UINT32_MAX); + const Ty result = simd_xor(aorb, mffff); + + return result; + } + + template + BX_SIMD_INLINE Ty simd_neg_ni(Ty _a) + { + const Ty zero = simd_zero(); + const Ty result = simd_sub(zero, _a); + + return result; + } + + template + BX_SIMD_INLINE Ty simd_selb_ni(Ty _mask, Ty _a, Ty _b) + { + const Ty sel_a = simd_and(_a, _mask); + const Ty sel_b = simd_andc(_b, _mask); + const Ty result = simd_or(sel_a, sel_b); + + return result; + } + + template + BX_SIMD_INLINE Ty simd_sels_ni(Ty _test, Ty _a, Ty _b) + { + const Ty mask = simd_sra(_test, 31); + const Ty result = simd_selb(mask, _a, _b); + + return result; + } + + template + BX_SIMD_INLINE Ty simd_not_ni(Ty _a) + { + const Ty mffff = simd_isplat(UINT32_MAX); + const Ty result = simd_xor(_a, mffff); + + return result; + } + + template + BX_SIMD_INLINE Ty simd_min_ni(Ty _a, Ty _b) + { + const Ty mask = simd_cmplt(_a, _b); + const Ty result = simd_selb(mask, _a, _b); + + return result; + } + + template + BX_SIMD_INLINE Ty simd_max_ni(Ty _a, Ty _b) + { + const Ty mask = simd_cmpgt(_a, _b); + const Ty result = simd_selb(mask, _a, _b); + + return result; + } + + template + BX_SIMD_INLINE Ty simd_abs_ni(Ty _a) + { + const Ty a_neg = simd_neg(_a); + const Ty result = simd_max(a_neg, _a); + + return result; + } + + template + BX_SIMD_INLINE Ty simd_imin_ni(Ty _a, Ty _b) + { + const Ty mask = simd_icmplt(_a, _b); + const Ty result = simd_selb(mask, _a, _b); + + return result; + } + + template + BX_SIMD_INLINE Ty simd_imax_ni(Ty _a, Ty _b) + { + const Ty mask = simd_icmpgt(_a, _b); + const Ty result = simd_selb(mask, _a, _b); + + return result; + } + + template + BX_SIMD_INLINE Ty simd_clamp_ni(Ty _a, Ty _min, Ty _max) + { + const Ty tmp = simd_min(_a, _max); + const Ty result = simd_max(tmp, _min); + + return result; + } + + template + BX_SIMD_INLINE Ty simd_lerp_ni(Ty _a, Ty _b, Ty _s) + { + const Ty ba = simd_sub(_b, _a); + const Ty result = simd_madd(_s, ba, _a); + + return result; + } + + template + BX_SIMD_INLINE Ty simd_sqrt_nr_ni(Ty _a) + { + const Ty half = simd_splat(0.5f); + const Ty one = simd_splat(1.0f); + const Ty tmp0 = simd_rsqrt_est(_a); + const Ty tmp1 = simd_mul(tmp0, _a); + const Ty tmp2 = simd_mul(tmp1, half); + const Ty tmp3 = simd_nmsub(tmp0, tmp1, one); + const Ty result = simd_madd(tmp3, tmp2, tmp1); + + return result; + } + + template + BX_SIMD_INLINE Ty simd_sqrt_nr1_ni(Ty _a) + { + const Ty half = simd_splat(0.5f); + + Ty result = _a; + for (uint32_t ii = 0; ii < 11; ++ii) + { + const Ty tmp1 = simd_div(_a, result); + const Ty tmp2 = simd_add(tmp1, result); + result = simd_mul(tmp2, half); + } + + return result; + } + + template + BX_SIMD_INLINE Ty simd_rsqrt_ni(Ty _a) + { + const Ty one = simd_splat(1.0f); + const Ty sqrt = simd_sqrt(_a); + const Ty result = simd_div(one, sqrt); + + return result; + } + + template + BX_SIMD_INLINE Ty simd_rsqrt_nr_ni(Ty _a) + { + const Ty rsqrt = simd_rsqrt_est(_a); + const Ty iter0 = simd_mul(_a, rsqrt); + const Ty iter1 = simd_mul(iter0, rsqrt); + const Ty half = simd_splat(0.5f); + const Ty half_rsqrt = simd_mul(half, rsqrt); + const Ty three = simd_splat(3.0f); + const Ty three_sub_iter1 = simd_sub(three, iter1); + const Ty result = simd_mul(half_rsqrt, three_sub_iter1); + + return result; + } + + template + BX_SIMD_INLINE Ty simd_rsqrt_carmack_ni(Ty _a) + { + const Ty half = simd_splat(0.5f); + const Ty ah = simd_mul(half, _a); + const Ty ashift = simd_sra(_a, 1); + const Ty magic = simd_isplat(0x5f3759df); + const Ty msuba = simd_isub(magic, ashift); + const Ty msubasq = simd_mul(msuba, msuba); + const Ty tmp0 = simd_splat(1.5f); + const Ty tmp1 = simd_mul(ah, msubasq); + const Ty tmp2 = simd_sub(tmp0, tmp1); + const Ty result = simd_mul(msuba, tmp2); + + return result; + } + + namespace simd_logexp_detail + { + template + BX_SIMD_INLINE Ty simd_poly1(Ty _a, float _b, float _c) + { + const Ty bbbb = simd_splat(_b); + const Ty cccc = simd_splat(_c); + const Ty result = simd_madd(cccc, _a, bbbb); + + return result; + } + + template + BX_SIMD_INLINE Ty simd_poly2(Ty _a, float _b, float _c, float _d) + { + const Ty bbbb = simd_splat(_b); + const Ty poly = simd_poly1(_a, _c, _d); + const Ty result = simd_madd(poly, _a, bbbb); + + return result; + } + + template + BX_SIMD_INLINE Ty simd_poly3(Ty _a, float _b, float _c, float _d, float _e) + { + const Ty bbbb = simd_splat(_b); + const Ty poly = simd_poly2(_a, _c, _d, _e); + const Ty result = simd_madd(poly, _a, bbbb); + + return result; + } + + template + BX_SIMD_INLINE Ty simd_poly4(Ty _a, float _b, float _c, float _d, float _e, float _f) + { + const Ty bbbb = simd_splat(_b); + const Ty poly = simd_poly3(_a, _c, _d, _e, _f); + const Ty result = simd_madd(poly, _a, bbbb); + + return result; + } + + template + BX_SIMD_INLINE Ty simd_poly5(Ty _a, float _b, float _c, float _d, float _e, float _f, float _g) + { + const Ty bbbb = simd_splat(_b); + const Ty poly = simd_poly4(_a, _c, _d, _e, _f, _g); + const Ty result = simd_madd(poly, _a, bbbb); + + return result; + } + + template + BX_SIMD_INLINE Ty simd_logpoly(Ty _a) + { +#if 1 + const Ty result = simd_poly5(_a + , 3.11578814719469302614f, -3.32419399085241980044f + , 2.59883907202499966007f, -1.23152682416275988241f + , 0.318212422185251071475f, -0.0344359067839062357313f + ); +#elif 0 + const Ty result = simd_poly4(_a + , 2.8882704548164776201f, -2.52074962577807006663f + , 1.48116647521213171641f, -0.465725644288844778798f + , 0.0596515482674574969533f + ); +#elif 0 + const Ty result = simd_poly3(_a + , 2.61761038894603480148f, -1.75647175389045657003f + , 0.688243882994381274313f, -0.107254423828329604454f + ); +#else + const Ty result = simd_poly2(_a + , 2.28330284476918490682f, -1.04913055217340124191f + , 0.204446009836232697516f + ); +#endif + + return result; + } + + template + BX_SIMD_INLINE Ty simd_exppoly(Ty _a) + { +#if 1 + const Ty result = simd_poly5(_a + , 9.9999994e-1f, 6.9315308e-1f + , 2.4015361e-1f, 5.5826318e-2f + , 8.9893397e-3f, 1.8775767e-3f + ); +#elif 0 + const Ty result = simd_poly4(_a + , 1.0000026f, 6.9300383e-1f + , 2.4144275e-1f, 5.2011464e-2f + , 1.3534167e-2f + ); +#elif 0 + const Ty result = simd_poly3(_a + , 9.9992520e-1f, 6.9583356e-1f + , 2.2606716e-1f, 7.8024521e-2f + ); +#else + const Ty result = simd_poly2(_a + , 1.0017247f, 6.5763628e-1f + , 3.3718944e-1f + ); +#endif // 0 + + return result; + } + } // namespace simd_internal + + template + BX_SIMD_INLINE Ty simd_log2_ni(Ty _a) + { + const Ty expmask = simd_isplat(0x7f800000); + const Ty mantmask = simd_isplat(0x007fffff); + const Ty one = simd_splat(1.0f); + + const Ty c127 = simd_isplat(127); + const Ty aexp = simd_and(_a, expmask); + const Ty aexpsr = simd_srl(aexp, 23); + const Ty tmp0 = simd_isub(aexpsr, c127); + const Ty exp = simd_itof(tmp0); + + const Ty amask = simd_and(_a, mantmask); + const Ty mant = simd_or(amask, one); + + const Ty poly = simd_logexp_detail::simd_logpoly(mant); + + const Ty mandiff = simd_sub(mant, one); + const Ty result = simd_madd(poly, mandiff, exp); + + return result; + } + + template + BX_SIMD_INLINE Ty simd_exp2_ni(Ty _a) + { + const Ty min = simd_splat( 129.0f); + const Ty max = simd_splat(-126.99999f); + const Ty tmp0 = simd_min(_a, min); + const Ty aaaa = simd_max(tmp0, max); + + const Ty half = simd_splat(0.5f); + const Ty tmp2 = simd_sub(aaaa, half); + const Ty ipart = simd_ftoi(tmp2); + const Ty iround = simd_itof(ipart); + const Ty fpart = simd_sub(aaaa, iround); + + const Ty c127 = simd_isplat(127); + const Ty tmp5 = simd_iadd(ipart, c127); + const Ty expipart = simd_sll(tmp5, 23); + + const Ty expfpart = simd_logexp_detail::simd_exppoly(fpart); + + const Ty result = simd_mul(expipart, expfpart); + + return result; + } + + template + BX_SIMD_INLINE Ty simd_pow_ni(Ty _a, Ty _b) + { + const Ty alog2 = simd_log2(_a); + const Ty alog2b = simd_mul(alog2, _b); + const Ty result = simd_exp2(alog2b); + + return result; + } + + template + BX_SIMD_INLINE Ty simd_dot3_ni(Ty _a, Ty _b) + { + const Ty xyzw = simd_mul(_a, _b); + const Ty xxxx = simd_swiz_xxxx(xyzw); + const Ty yyyy = simd_swiz_yyyy(xyzw); + const Ty zzzz = simd_swiz_zzzz(xyzw); + const Ty tmp1 = simd_add(xxxx, yyyy); + const Ty result = simd_add(zzzz, tmp1); + return result; + } + + template + BX_SIMD_INLINE Ty simd_cross3_ni(Ty _a, Ty _b) + { + // a.yzx * b.zxy - a.zxy * b.yzx == (a * b.yzx - a.yzx * b).yzx +#if 0 + const Ty a_yzxw = simd_swiz_yzxw(_a); + const Ty a_zxyw = simd_swiz_zxyw(_a); + const Ty b_zxyw = simd_swiz_zxyw(_b); + const Ty b_yzxw = simd_swiz_yzxw(_b); + const Ty tmp = simd_mul(a_yzxw, b_zxyw); + const Ty result = simd_nmsub(a_zxyw, b_yzxw, tmp); +#else + const Ty a_yzxw = simd_swiz_yzxw(_a); + const Ty b_yzxw = simd_swiz_yzxw(_b); + const Ty tmp0 = simd_mul(_a, b_yzxw); + const Ty tmp1 = simd_nmsub(a_yzxw, _b, tmp0); + const Ty result = simd_swiz_yzxw(tmp1); +#endif + + return result; + } + + template + BX_SIMD_INLINE Ty simd_normalize3_ni(Ty _a) + { + const Ty dot3 = simd_dot3(_a, _a); + const Ty invSqrt = simd_rsqrt(dot3); + const Ty result = simd_mul(_a, invSqrt); + + return result; + } + + template + BX_SIMD_INLINE Ty simd_dot_ni(Ty _a, Ty _b) + { + const Ty xyzw = simd_mul(_a, _b); + const Ty yzwx = simd_swiz_yzwx(xyzw); + const Ty tmp0 = simd_add(xyzw, yzwx); + const Ty zwxy = simd_swiz_zwxy(tmp0); + const Ty result = simd_add(tmp0, zwxy); + + return result; + } + + template + BX_SIMD_INLINE Ty simd_ceil_ni(Ty _a) + { + const Ty tmp0 = simd_ftoi(_a); + const Ty tmp1 = simd_itof(tmp0); + const Ty mask = simd_cmplt(tmp1, _a); + const Ty one = simd_splat(1.0f); + const Ty tmp2 = simd_and(one, mask); + const Ty result = simd_add(tmp1, tmp2); + + return result; + } + + template + BX_SIMD_INLINE Ty simd_floor_ni(Ty _a) + { + const Ty tmp0 = simd_ftoi(_a); + const Ty tmp1 = simd_itof(tmp0); + const Ty mask = simd_cmpgt(tmp1, _a); + const Ty one = simd_splat(1.0f); + const Ty tmp2 = simd_and(one, mask); + const Ty result = simd_sub(tmp1, tmp2); + + return result; + } + + template + BX_SIMD_FORCE_INLINE Ty simd_round_ni(Ty _a) + { + const Ty tmp = simd_ftoi(_a); + const Ty result = simd_itof(tmp); + + return result; + } + + template + BX_SIMD_INLINE bool simd_test_any_ni(Ty _a) + { + const Ty mask = simd_sra(_a, 31); + const Ty zwxy = simd_swiz_zwxy(mask); + const Ty tmp0 = simd_or(mask, zwxy); + const Ty tmp1 = simd_swiz_yyyy(tmp0); + const Ty tmp2 = simd_or(tmp0, tmp1); + int res; + simd_stx(&res, tmp2); + return 0 != res; + } + + template + BX_SIMD_INLINE bool simd_test_all_ni(Ty _a) + { + const Ty bits = simd_sra(_a, 31); + const Ty m1248 = simd_ild(1, 2, 4, 8); + const Ty mask = simd_and(bits, m1248); + const Ty zwxy = simd_swiz_zwxy(mask); + const Ty tmp0 = simd_or(mask, zwxy); + const Ty tmp1 = simd_swiz_yyyy(tmp0); + const Ty tmp2 = simd_or(tmp0, tmp1); + int res; + simd_stx(&res, tmp2); + return 0xf == res; + } + +} // namespace bx + +#endif // BX_SIMD_NI_H_HEADER_GUARD diff --git a/3rdparty/bx/include/bx/inline/sort.inl b/3rdparty/bx/include/bx/inline/sort.inl new file mode 100644 index 0000000..1f5dcf2 --- /dev/null +++ b/3rdparty/bx/include/bx/inline/sort.inl @@ -0,0 +1,288 @@ +/* + * Copyright 2010-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bx#license-bsd-2-clause + */ + +#ifndef BX_SORT_H_HEADER_GUARD +# error "Must be included from bx/sort.h!" +#endif // BX_SORT_H_HEADER_GUARD + +namespace bx +{ +#define BX_RADIXSORT_BITS 11 +#define BX_RADIXSORT_HISTOGRAM_SIZE (1<>shift)&BX_RADIXSORT_BIT_MASK; + ++histogram[index]; + sorted &= prevKey <= key; + } + } + + if (sorted) + { + goto done; + } + + uint32_t offset = 0; + for (uint32_t ii = 0; ii < BX_RADIXSORT_HISTOGRAM_SIZE; ++ii) + { + uint32_t count = histogram[ii]; + histogram[ii] = offset; + offset += count; + } + + for (uint32_t ii = 0; ii < _size; ++ii) + { + uint32_t key = keys[ii]; + uint16_t index = (key>>shift)&BX_RADIXSORT_BIT_MASK; + uint32_t dest = histogram[index]++; + tempKeys[dest] = key; + } + + uint32_t* swapKeys = tempKeys; + tempKeys = keys; + keys = swapKeys; + + shift += BX_RADIXSORT_BITS; + } + +done: + if (0 != (pass&1) ) + { + // Odd number of passes needs to do copy to the destination. + memCopy(_keys, _tempKeys, _size*sizeof(uint32_t) ); + } + } + + template + inline void radixSort(uint32_t* _keys, uint32_t* _tempKeys, Ty* _values, Ty* _tempValues, uint32_t _size) + { + uint32_t* keys = _keys; + uint32_t* tempKeys = _tempKeys; + Ty* values = _values; + Ty* tempValues = _tempValues; + + uint32_t histogram[BX_RADIXSORT_HISTOGRAM_SIZE]; + uint16_t shift = 0; + uint32_t pass = 0; + for (; pass < 3; ++pass) + { + memSet(histogram, 0, sizeof(uint32_t)*BX_RADIXSORT_HISTOGRAM_SIZE); + + bool sorted = true; + { + uint32_t key = keys[0]; + uint32_t prevKey = key; + for (uint32_t ii = 0; ii < _size; ++ii, prevKey = key) + { + key = keys[ii]; + uint16_t index = (key>>shift)&BX_RADIXSORT_BIT_MASK; + ++histogram[index]; + sorted &= prevKey <= key; + } + } + + if (sorted) + { + goto done; + } + + uint32_t offset = 0; + for (uint32_t ii = 0; ii < BX_RADIXSORT_HISTOGRAM_SIZE; ++ii) + { + uint32_t count = histogram[ii]; + histogram[ii] = offset; + offset += count; + } + + for (uint32_t ii = 0; ii < _size; ++ii) + { + uint32_t key = keys[ii]; + uint16_t index = (key>>shift)&BX_RADIXSORT_BIT_MASK; + uint32_t dest = histogram[index]++; + tempKeys[dest] = key; + tempValues[dest] = values[ii]; + } + + uint32_t* swapKeys = tempKeys; + tempKeys = keys; + keys = swapKeys; + + Ty* swapValues = tempValues; + tempValues = values; + values = swapValues; + + shift += BX_RADIXSORT_BITS; + } + +done: + if (0 != (pass&1) ) + { + // Odd number of passes needs to do copy to the destination. + memCopy(_keys, _tempKeys, _size*sizeof(uint32_t) ); + for (uint32_t ii = 0; ii < _size; ++ii) + { + _values[ii] = _tempValues[ii]; + } + } + } + + inline void radixSort(uint64_t* _keys, uint64_t* _tempKeys, uint32_t _size) + { + uint64_t* keys = _keys; + uint64_t* tempKeys = _tempKeys; + + uint32_t histogram[BX_RADIXSORT_HISTOGRAM_SIZE]; + uint16_t shift = 0; + uint32_t pass = 0; + for (; pass < 6; ++pass) + { + memSet(histogram, 0, sizeof(uint32_t)*BX_RADIXSORT_HISTOGRAM_SIZE); + + bool sorted = true; + { + uint64_t key = keys[0]; + uint64_t prevKey = key; + for (uint32_t ii = 0; ii < _size; ++ii, prevKey = key) + { + key = keys[ii]; + uint16_t index = (key>>shift)&BX_RADIXSORT_BIT_MASK; + ++histogram[index]; + sorted &= prevKey <= key; + } + } + + if (sorted) + { + goto done; + } + + uint32_t offset = 0; + for (uint32_t ii = 0; ii < BX_RADIXSORT_HISTOGRAM_SIZE; ++ii) + { + uint32_t count = histogram[ii]; + histogram[ii] = offset; + offset += count; + } + + for (uint32_t ii = 0; ii < _size; ++ii) + { + uint64_t key = keys[ii]; + uint16_t index = (key>>shift)&BX_RADIXSORT_BIT_MASK; + uint32_t dest = histogram[index]++; + tempKeys[dest] = key; + } + + uint64_t* swapKeys = tempKeys; + tempKeys = keys; + keys = swapKeys; + + shift += BX_RADIXSORT_BITS; + } + +done: + if (0 != (pass&1) ) + { + // Odd number of passes needs to do copy to the destination. + memCopy(_keys, _tempKeys, _size*sizeof(uint64_t) ); + } + } + + template + inline void radixSort(uint64_t* _keys, uint64_t* _tempKeys, Ty* _values, Ty* _tempValues, uint32_t _size) + { + uint64_t* keys = _keys; + uint64_t* tempKeys = _tempKeys; + Ty* values = _values; + Ty* tempValues = _tempValues; + + uint32_t histogram[BX_RADIXSORT_HISTOGRAM_SIZE]; + uint16_t shift = 0; + uint32_t pass = 0; + for (; pass < 6; ++pass) + { + memSet(histogram, 0, sizeof(uint32_t)*BX_RADIXSORT_HISTOGRAM_SIZE); + + bool sorted = true; + { + uint64_t key = keys[0]; + uint64_t prevKey = key; + for (uint32_t ii = 0; ii < _size; ++ii, prevKey = key) + { + key = keys[ii]; + uint16_t index = (key>>shift)&BX_RADIXSORT_BIT_MASK; + ++histogram[index]; + sorted &= prevKey <= key; + } + } + + if (sorted) + { + goto done; + } + + uint32_t offset = 0; + for (uint32_t ii = 0; ii < BX_RADIXSORT_HISTOGRAM_SIZE; ++ii) + { + uint32_t count = histogram[ii]; + histogram[ii] = offset; + offset += count; + } + + for (uint32_t ii = 0; ii < _size; ++ii) + { + uint64_t key = keys[ii]; + uint16_t index = (key>>shift)&BX_RADIXSORT_BIT_MASK; + uint32_t dest = histogram[index]++; + tempKeys[dest] = key; + tempValues[dest] = values[ii]; + } + + uint64_t* swapKeys = tempKeys; + tempKeys = keys; + keys = swapKeys; + + Ty* swapValues = tempValues; + tempValues = values; + values = swapValues; + + shift += BX_RADIXSORT_BITS; + } + +done: + if (0 != (pass&1) ) + { + // Odd number of passes needs to do copy to the destination. + memCopy(_keys, _tempKeys, _size*sizeof(uint64_t) ); + for (uint32_t ii = 0; ii < _size; ++ii) + { + _values[ii] = _tempValues[ii]; + } + } + } + +#undef BX_RADIXSORT_BITS +#undef BX_RADIXSORT_HISTOGRAM_SIZE +#undef BX_RADIXSORT_BIT_MASK + +} // namespace bx diff --git a/3rdparty/bx/include/bx/inline/spscqueue.inl b/3rdparty/bx/include/bx/inline/spscqueue.inl new file mode 100644 index 0000000..7d80f07 --- /dev/null +++ b/3rdparty/bx/include/bx/inline/spscqueue.inl @@ -0,0 +1,158 @@ +/* + * Copyright 2010-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bx#license-bsd-2-clause + */ + +#ifndef BX_SPSCQUEUE_H_HEADER_GUARD +# error "Must be included from bx/spscqueue.h!" +#endif // BX_SPSCQUEUE_H_HEADER_GUARD + +namespace bx +{ + // http://drdobbs.com/article/print?articleId=210604448&siteSectionName= + inline SpScUnboundedQueue::SpScUnboundedQueue() + : m_first(new Node(NULL) ) + , m_divider(m_first) + , m_last(m_first) + { + } + + inline SpScUnboundedQueue::~SpScUnboundedQueue() + { + while (NULL != m_first) + { + Node* node = m_first; + m_first = node->m_next; + delete node; + } + } + + inline void SpScUnboundedQueue::push(void* _ptr) + { + m_last->m_next = new Node( (void*)_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; + } + } + + inline void* SpScUnboundedQueue::peek() + { + if (m_divider != m_last) + { + return m_divider->m_next->m_ptr; + } + + return NULL; + } + + inline void* SpScUnboundedQueue::pop() + { + if (m_divider != m_last) + { + void* ptr = m_divider->m_next->m_ptr; + atomicExchangePtr( (void**)&m_divider, m_divider->m_next); + return ptr; + } + + return NULL; + } + + inline SpScUnboundedQueue::Node::Node(void* _ptr) + : m_ptr(_ptr) + , m_next(NULL) + { + } + + template + inline SpScUnboundedQueueT::SpScUnboundedQueueT() + { + } + + template + inline SpScUnboundedQueueT::~SpScUnboundedQueueT() + { + } + + template + inline void SpScUnboundedQueueT::push(Ty* _ptr) + { + m_queue.push(_ptr); + } + + template + inline Ty* SpScUnboundedQueueT::peek() + { + return (Ty*)m_queue.peek(); + } + + template + inline Ty* SpScUnboundedQueueT::pop() + { + return (Ty*)m_queue.pop(); + } + +#if BX_CONFIG_SUPPORTS_THREADING + inline SpScBlockingUnboundedQueue::SpScBlockingUnboundedQueue() + { + } + + inline SpScBlockingUnboundedQueue::~SpScBlockingUnboundedQueue() + { + } + + inline void SpScBlockingUnboundedQueue::push(void* _ptr) + { + m_queue.push( (void*)_ptr); + m_count.post(); + } + + inline void* SpScBlockingUnboundedQueue::peek() + { + return m_queue.peek(); + } + + inline void* SpScBlockingUnboundedQueue::pop(int32_t _msecs) + { + if (m_count.wait(_msecs) ) + { + return m_queue.pop(); + } + + return NULL; + } + + template + inline SpScBlockingUnboundedQueueT::SpScBlockingUnboundedQueueT() + { + } + + template + inline SpScBlockingUnboundedQueueT::~SpScBlockingUnboundedQueueT() + { + } + + template + inline void SpScBlockingUnboundedQueueT::push(Ty* _ptr) + { + m_queue.push(_ptr); + } + + template + inline Ty* SpScBlockingUnboundedQueueT::peek() + { + return (Ty*)m_queue.peek(); + } + + template + inline Ty* SpScBlockingUnboundedQueueT::pop(int32_t _msecs) + { + return (Ty*)m_queue.pop(_msecs); + } + +#endif // BX_CONFIG_SUPPORTS_THREADING + +} // namespace bx diff --git a/3rdparty/bx/include/bx/inline/string.inl b/3rdparty/bx/include/bx/inline/string.inl new file mode 100644 index 0000000..7b6f650 --- /dev/null +++ b/3rdparty/bx/include/bx/inline/string.inl @@ -0,0 +1,190 @@ +/* + * Copyright 2010-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bx#license-bsd-2-clause + */ + +#ifndef BX_STRING_H_HEADER_GUARD +# error "Must be included from bx/string.h!" +#endif // BX_STRING_H_HEADER_GUARD + +#if BX_CRT_MSVC && !defined(va_copy) +# define va_copy(_a, _b) (_a) = (_b) +#endif // BX_CRT_MSVC && !defined(va_copy) + +namespace bx +{ + template + inline void stringPrintfVargs(Ty& _out, const char* _format, va_list _argList) + { + char temp[2048]; + + 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'; + _out.append(out); + } + + template + inline void stringPrintf(Ty& _out, const char* _format, ...) + { + va_list argList; + va_start(argList, _format); + stringPrintfVargs(_out, _format, argList); + va_end(argList); + } + + template + inline Ty replaceAll(const Ty& _str, const char* _from, const char* _to) + { + 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); + while ( (startPos = str.find(_from, startPos) ) != Ty::npos) + { + str.replace(startPos, fromLen, _to); + startPos += toLen; + } + + return str; + } + + inline StringView::StringView() + { + clear(); + } + + inline StringView::StringView(const StringView& _rhs) + { + set(_rhs.m_ptr, _rhs.m_len); + } + + inline StringView& StringView::operator=(const StringView& _rhs) + { + set(_rhs.m_ptr, _rhs.m_len); + return *this; + } + + inline StringView::StringView(const char* _ptr, int32_t _len) + { + set(_ptr, _len); + } + + inline void StringView::set(const char* _ptr, int32_t _len) + { + clear(); + + if (NULL != _ptr) + { + int32_t len = strnlen(_ptr, _len); + if (0 != len) + { + m_len = len; + m_ptr = _ptr; + } + } + } + + inline void StringView::clear() + { + m_ptr = ""; + m_len = 0; + } + + inline const char* StringView::getPtr() const + { + return m_ptr; + } + + inline const char* StringView::getTerm() const + { + return m_ptr + m_len; + } + + inline bool StringView::isEmpty() const + { + return 0 == m_len; + } + + inline int32_t StringView::getLength() const + { + return m_len; + } + + template + inline StringT::StringT() + : StringView() + { + } + + template + inline StringT::StringT(const StringT& _rhs) + : StringView() + { + set(_rhs.m_ptr, _rhs.m_len); + } + + template + inline StringT& StringT::operator=(const StringT& _rhs) + { + set(_rhs.m_ptr, _rhs.m_len); + return *this; + } + + template + inline StringT::StringT(const char* _ptr, int32_t _len) + { + set(_ptr, _len); + } + + template + inline StringT::StringT(const StringView& _rhs) + { + set(_rhs.getPtr(), _rhs.getLength() ); + } + + template + inline StringT::~StringT() + { + clear(); + } + + template + inline void StringT::set(const char* _ptr, int32_t _len) + { + clear(); + append(_ptr, _len); + } + + template + inline void StringT::append(const char* _ptr, int32_t _len) + { + if (0 != _len) + { + int32_t old = m_len; + int32_t len = m_len + strnlen(_ptr, _len); + char* ptr = (char*)BX_REALLOC(*AllocatorT, 0 != m_len ? const_cast(m_ptr) : NULL, len+1); + m_len = len; + strlncpy(ptr + old, len-old+1, _ptr, _len); + + *const_cast(&m_ptr) = ptr; + } + } + + template + inline void StringT::clear() + { + if (0 != m_len) + { + BX_FREE(*AllocatorT, const_cast(m_ptr) ); + + StringView::clear(); + } + } + +} // namespace bx diff --git a/3rdparty/bx/include/bx/inline/uint32_t.inl b/3rdparty/bx/include/bx/inline/uint32_t.inl new file mode 100644 index 0000000..8a66a07 --- /dev/null +++ b/3rdparty/bx/include/bx/inline/uint32_t.inl @@ -0,0 +1,781 @@ +/* + * Copyright 2010-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bx#license-bsd-2-clause + */ + +// Copyright 2006 Mike Acton +// +// 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 + +#ifndef BX_UINT32_T_H_HEADER_GUARD +# error "Must be included from bx/uint32_t.h" +#endif // BX_UINT32_T_H_HEADER_GUARD + +namespace bx +{ + inline uint32_t uint32_li(uint32_t _a) + { + return _a; + } + + inline uint32_t uint32_dec(uint32_t _a) + { + return _a - 1; + } + + inline uint32_t uint32_inc(uint32_t _a) + { + return _a + 1; + } + + inline uint32_t uint32_not(uint32_t _a) + { + return ~_a; + } + + inline uint32_t uint32_neg(uint32_t _a) + { + return -(int32_t)_a; + } + + inline uint32_t uint32_ext(uint32_t _a) + { + return ( (int32_t)_a)>>31; + } + + inline uint32_t uint32_and(uint32_t _a, uint32_t _b) + { + return _a & _b; + } + + inline uint32_t uint32_andc(uint32_t _a, uint32_t _b) + { + return _a & ~_b; + } + + inline uint32_t uint32_xor(uint32_t _a, uint32_t _b) + { + return _a ^ _b; + } + + inline uint32_t uint32_xorl(uint32_t _a, uint32_t _b) + { + return !_a != !_b; + } + + inline uint32_t uint32_or(uint32_t _a, uint32_t _b) + { + return _a | _b; + } + + inline uint32_t uint32_orc(uint32_t _a, uint32_t _b) + { + return _a | ~_b; + } + + inline uint32_t uint32_sll(uint32_t _a, int _sa) + { + return _a << _sa; + } + + inline uint32_t uint32_srl(uint32_t _a, int _sa) + { + return _a >> _sa; + } + + inline uint32_t uint32_sra(uint32_t _a, int _sa) + { + return ( (int32_t)_a) >> _sa; + } + + inline uint32_t uint32_rol(uint32_t _a, int _sa) + { + return ( _a << _sa) | (_a >> (32-_sa) ); + } + + inline uint32_t uint32_ror(uint32_t _a, int _sa) + { + return ( _a >> _sa) | (_a << (32-_sa) ); + } + + inline uint32_t uint32_add(uint32_t _a, uint32_t _b) + { + return _a + _b; + } + + inline uint32_t uint32_sub(uint32_t _a, uint32_t _b) + { + return _a - _b; + } + + inline uint32_t uint32_mul(uint32_t _a, uint32_t _b) + { + return _a * _b; + } + + inline uint32_t uint32_div(uint32_t _a, uint32_t _b) + { + return (_a / _b); + } + + inline uint32_t uint32_mod(uint32_t _a, uint32_t _b) + { + return (_a % _b); + } + + inline uint32_t uint32_cmpeq(uint32_t _a, uint32_t _b) + { + return -(_a == _b); + } + + inline uint32_t uint32_cmpneq(uint32_t _a, uint32_t _b) + { + return -(_a != _b); + } + + inline uint32_t uint32_cmplt(uint32_t _a, uint32_t _b) + { + return -(_a < _b); + } + + inline uint32_t uint32_cmple(uint32_t _a, uint32_t _b) + { + return -(_a <= _b); + } + + inline uint32_t uint32_cmpgt(uint32_t _a, uint32_t _b) + { + return -(_a > _b); + } + + inline uint32_t uint32_cmpge(uint32_t _a, uint32_t _b) + { + return -(_a >= _b); + } + + inline uint32_t uint32_setnz(uint32_t _a) + { + return -!!_a; + } + + inline uint32_t uint32_satadd(uint32_t _a, uint32_t _b) + { + const uint32_t add = uint32_add(_a, _b); + const uint32_t lt = uint32_cmplt(add, _a); + const uint32_t result = uint32_or(add, lt); + + return result; + } + + inline uint32_t uint32_satsub(uint32_t _a, uint32_t _b) + { + const uint32_t sub = uint32_sub(_a, _b); + const uint32_t le = uint32_cmple(sub, _a); + const uint32_t result = uint32_and(sub, le); + + return result; + } + + inline uint32_t uint32_satmul(uint32_t _a, uint32_t _b) + { + const uint64_t mul = (uint64_t)_a * (uint64_t)_b; + const uint32_t hi = mul >> 32; + const uint32_t nz = uint32_setnz(hi); + const uint32_t result = uint32_or(uint32_t(mul), nz); + + return result; + } + + inline uint32_t uint32_sels(uint32_t test, uint32_t _a, uint32_t _b) + { + const uint32_t mask = uint32_ext(test); + const uint32_t sel_a = uint32_and(_a, mask); + const uint32_t sel_b = uint32_andc(_b, mask); + const uint32_t result = uint32_or(sel_a, sel_b); + + return (result); + } + + inline uint32_t uint32_selb(uint32_t _mask, uint32_t _a, uint32_t _b) + { + const uint32_t sel_a = uint32_and(_a, _mask); + const uint32_t sel_b = uint32_andc(_b, _mask); + const uint32_t result = uint32_or(sel_a, sel_b); + + return (result); + } + + inline uint32_t uint32_imin(uint32_t _a, uint32_t _b) + { + const uint32_t a_sub_b = uint32_sub(_a, _b); + const uint32_t result = uint32_sels(a_sub_b, _a, _b); + + return result; + } + + inline uint32_t uint32_imax(uint32_t _a, uint32_t _b) + { + const uint32_t b_sub_a = uint32_sub(_b, _a); + const uint32_t result = uint32_sels(b_sub_a, _a, _b); + + return result; + } + + inline uint32_t uint32_min(uint32_t _a, uint32_t _b) + { + return _a > _b ? _b : _a; + } + + inline uint32_t uint32_min(uint32_t _a, uint32_t _b, uint32_t _c) + { + return uint32_min(_a, uint32_min(_b, _c) ); + } + + inline uint32_t uint32_max(uint32_t _a, uint32_t _b) + { + return _a > _b ? _a : _b; + } + + inline uint32_t uint32_max(uint32_t _a, uint32_t _b, uint32_t _c) + { + return uint32_max(_a, uint32_max(_b, _c) ); + } + + inline uint32_t uint32_clamp(uint32_t _a, uint32_t _min, uint32_t _max) + { + const uint32_t tmp = uint32_max(_a, _min); + const uint32_t result = uint32_min(tmp, _max); + + return result; + } + + inline uint32_t uint32_iclamp(uint32_t _a, uint32_t _min, uint32_t _max) + { + const uint32_t tmp = uint32_imax(_a, _min); + const uint32_t result = uint32_imin(tmp, _max); + + return result; + } + + inline uint32_t uint32_incwrap(uint32_t _val, uint32_t _min, uint32_t _max) + { + const uint32_t inc = uint32_inc(_val); + const uint32_t max_diff = uint32_sub(_max, _val); + const uint32_t neg_max_diff = uint32_neg(max_diff); + const uint32_t max_or = uint32_or(max_diff, neg_max_diff); + const uint32_t max_diff_nz = uint32_ext(max_or); + const uint32_t result = uint32_selb(max_diff_nz, inc, _min); + + return result; + } + + inline uint32_t uint32_decwrap(uint32_t _val, uint32_t _min, uint32_t _max) + { + const uint32_t dec = uint32_dec(_val); + const uint32_t min_diff = uint32_sub(_min, _val); + const uint32_t neg_min_diff = uint32_neg(min_diff); + const uint32_t min_or = uint32_or(min_diff, neg_min_diff); + const uint32_t min_diff_nz = uint32_ext(min_or); + const uint32_t result = uint32_selb(min_diff_nz, dec, _max); + + return result; + } + + inline uint32_t uint32_cntbits_ref(uint32_t _val) + { + const uint32_t tmp0 = uint32_srl(_val, 1); + const uint32_t tmp1 = uint32_and(tmp0, 0x55555555); + const uint32_t tmp2 = uint32_sub(_val, tmp1); + const uint32_t tmp3 = uint32_and(tmp2, 0xc30c30c3); + const uint32_t tmp4 = uint32_srl(tmp2, 2); + const uint32_t tmp5 = uint32_and(tmp4, 0xc30c30c3); + const uint32_t tmp6 = uint32_srl(tmp2, 4); + const uint32_t tmp7 = uint32_and(tmp6, 0xc30c30c3); + const uint32_t tmp8 = uint32_add(tmp3, tmp5); + const uint32_t tmp9 = uint32_add(tmp7, tmp8); + const uint32_t tmpA = uint32_srl(tmp9, 6); + const uint32_t tmpB = uint32_add(tmp9, tmpA); + const uint32_t tmpC = uint32_srl(tmpB, 12); + const uint32_t tmpD = uint32_srl(tmpB, 24); + const uint32_t tmpE = uint32_add(tmpB, tmpC); + const uint32_t tmpF = uint32_add(tmpD, tmpE); + const uint32_t result = uint32_and(tmpF, 0x3f); + + return result; + } + + /// Count number of bits set. + inline uint32_t uint32_cntbits(uint32_t _val) + { +#if BX_COMPILER_GCC || BX_COMPILER_CLANG + return __builtin_popcount(_val); +#elif BX_COMPILER_MSVC && BX_PLATFORM_WINDOWS + return __popcnt(_val); +#else + return uint32_cntbits_ref(_val); +#endif // BX_COMPILER_ + } + + inline uint32_t uint32_cntlz_ref(uint32_t _val) + { + const uint32_t tmp0 = uint32_srl(_val, 1); + const uint32_t tmp1 = uint32_or(tmp0, _val); + const uint32_t tmp2 = uint32_srl(tmp1, 2); + const uint32_t tmp3 = uint32_or(tmp2, tmp1); + const uint32_t tmp4 = uint32_srl(tmp3, 4); + const uint32_t tmp5 = uint32_or(tmp4, tmp3); + const uint32_t tmp6 = uint32_srl(tmp5, 8); + const uint32_t tmp7 = uint32_or(tmp6, tmp5); + const uint32_t tmp8 = uint32_srl(tmp7, 16); + const uint32_t tmp9 = uint32_or(tmp8, tmp7); + const uint32_t tmpA = uint32_not(tmp9); + const uint32_t result = uint32_cntbits(tmpA); + + return result; + } + + /// Count number of leading zeros. + inline uint32_t uint32_cntlz(uint32_t _val) + { +#if BX_COMPILER_GCC || BX_COMPILER_CLANG + return __builtin_clz(_val); +#elif BX_COMPILER_MSVC && BX_PLATFORM_WINDOWS + unsigned long index; + _BitScanReverse(&index, _val); + return 31 - index; +#else + return uint32_cntlz_ref(_val); +#endif // BX_COMPILER_ + } + + inline uint32_t uint32_cnttz_ref(uint32_t _val) + { + const uint32_t tmp0 = uint32_not(_val); + const uint32_t tmp1 = uint32_dec(_val); + const uint32_t tmp2 = uint32_and(tmp0, tmp1); + const uint32_t result = uint32_cntbits(tmp2); + + return result; + } + + inline uint32_t uint32_cnttz(uint32_t _val) + { +#if BX_COMPILER_GCC || BX_COMPILER_CLANG + return __builtin_ctz(_val); +#elif BX_COMPILER_MSVC && BX_PLATFORM_WINDOWS + unsigned long index; + _BitScanForward(&index, _val); + return index; +#else + return uint32_cnttz_ref(_val); +#endif // BX_COMPILER_ + } + + // shuffle: + // ---- ---- ---- ---- fedc ba98 7654 3210 + // to: + // -f-e -d-c -b-a -9-8 -7-6 -5-4 -3-2 -1-0 + inline uint32_t uint32_part1by1(uint32_t _a) + { + const uint32_t val = uint32_and(_a, 0xffff); + + const uint32_t tmp0 = uint32_sll(val, 8); + const uint32_t tmp1 = uint32_xor(val, tmp0); + const uint32_t tmp2 = uint32_and(tmp1, 0x00ff00ff); + + const uint32_t tmp3 = uint32_sll(tmp2, 4); + const uint32_t tmp4 = uint32_xor(tmp2, tmp3); + const uint32_t tmp5 = uint32_and(tmp4, 0x0f0f0f0f); + + const uint32_t tmp6 = uint32_sll(tmp5, 2); + const uint32_t tmp7 = uint32_xor(tmp5, tmp6); + const uint32_t tmp8 = uint32_and(tmp7, 0x33333333); + + const uint32_t tmp9 = uint32_sll(tmp8, 1); + const uint32_t tmpA = uint32_xor(tmp8, tmp9); + const uint32_t result = uint32_and(tmpA, 0x55555555); + + return result; + } + + // shuffle: + // ---- ---- ---- ---- ---- --98 7654 3210 + // to: + // ---- 9--8 --7- -6-- 5--4 --3- -2-- 1--0 + inline uint32_t uint32_part1by2(uint32_t _a) + { + const uint32_t val = uint32_and(_a, 0x3ff); + + const uint32_t tmp0 = uint32_sll(val, 16); + const uint32_t tmp1 = uint32_xor(val, tmp0); + const uint32_t tmp2 = uint32_and(tmp1, 0xff0000ff); + + const uint32_t tmp3 = uint32_sll(tmp2, 8); + const uint32_t tmp4 = uint32_xor(tmp2, tmp3); + const uint32_t tmp5 = uint32_and(tmp4, 0x0300f00f); + + const uint32_t tmp6 = uint32_sll(tmp5, 4); + const uint32_t tmp7 = uint32_xor(tmp5, tmp6); + const uint32_t tmp8 = uint32_and(tmp7, 0x030c30c3); + + const uint32_t tmp9 = uint32_sll(tmp8, 2); + const uint32_t tmpA = uint32_xor(tmp8, tmp9); + const uint32_t result = uint32_and(tmpA, 0x09249249); + + return result; + } + + inline uint32_t uint32_testpow2(uint32_t _a) + { + const uint32_t tmp0 = uint32_not(_a); + const uint32_t tmp1 = uint32_inc(tmp0); + const uint32_t tmp2 = uint32_and(_a, tmp1); + const uint32_t tmp3 = uint32_cmpeq(tmp2, _a); + const uint32_t tmp4 = uint32_cmpneq(_a, 0); + const uint32_t result = uint32_and(tmp3, tmp4); + + return result; + } + + inline uint32_t uint32_nextpow2(uint32_t _a) + { + const uint32_t tmp0 = uint32_dec(_a); + const uint32_t tmp1 = uint32_srl(tmp0, 1); + const uint32_t tmp2 = uint32_or(tmp0, tmp1); + const uint32_t tmp3 = uint32_srl(tmp2, 2); + const uint32_t tmp4 = uint32_or(tmp2, tmp3); + const uint32_t tmp5 = uint32_srl(tmp4, 4); + const uint32_t tmp6 = uint32_or(tmp4, tmp5); + const uint32_t tmp7 = uint32_srl(tmp6, 8); + const uint32_t tmp8 = uint32_or(tmp6, tmp7); + const uint32_t tmp9 = uint32_srl(tmp8, 16); + const uint32_t tmpA = uint32_or(tmp8, tmp9); + const uint32_t result = uint32_inc(tmpA); + + return result; + } + + inline uint16_t halfFromFloat(float _a) + { + union { uint32_t ui; float flt; } ftou; + ftou.flt = _a; + + const uint32_t one = uint32_li(0x00000001); + const uint32_t f_s_mask = uint32_li(0x80000000); + const uint32_t f_e_mask = uint32_li(0x7f800000); + const uint32_t f_m_mask = uint32_li(0x007fffff); + const uint32_t f_m_hidden_bit = uint32_li(0x00800000); + const uint32_t f_m_round_bit = uint32_li(0x00001000); + const uint32_t f_snan_mask = uint32_li(0x7fc00000); + const uint32_t f_e_pos = uint32_li(0x00000017); + const uint32_t h_e_pos = uint32_li(0x0000000a); + const uint32_t h_e_mask = uint32_li(0x00007c00); + const uint32_t h_snan_mask = uint32_li(0x00007e00); + const uint32_t h_e_mask_value = uint32_li(0x0000001f); + const uint32_t f_h_s_pos_offset = uint32_li(0x00000010); + const uint32_t f_h_bias_offset = uint32_li(0x00000070); + const uint32_t f_h_m_pos_offset = uint32_li(0x0000000d); + const uint32_t h_nan_min = uint32_li(0x00007c01); + const uint32_t f_h_e_biased_flag = uint32_li(0x0000008f); + const uint32_t f_s = uint32_and(ftou.ui, f_s_mask); + const uint32_t f_e = uint32_and(ftou.ui, f_e_mask); + const uint16_t h_s = (uint16_t)uint32_srl(f_s, f_h_s_pos_offset); + const uint32_t f_m = uint32_and(ftou.ui, f_m_mask); + const uint16_t f_e_amount = (uint16_t)uint32_srl(f_e, f_e_pos); + const uint32_t f_e_half_bias = uint32_sub(f_e_amount, f_h_bias_offset); + const uint32_t f_snan = uint32_and(ftou.ui, f_snan_mask); + const uint32_t f_m_round_mask = uint32_and(f_m, f_m_round_bit); + const uint32_t f_m_round_offset = uint32_sll(f_m_round_mask, one); + const uint32_t f_m_rounded = uint32_add(f_m, f_m_round_offset); + const uint32_t f_m_denorm_sa = uint32_sub(one, f_e_half_bias); + const uint32_t f_m_with_hidden = uint32_or(f_m_rounded, f_m_hidden_bit); + const uint32_t f_m_denorm = uint32_srl(f_m_with_hidden, f_m_denorm_sa); + const uint32_t h_m_denorm = uint32_srl(f_m_denorm, f_h_m_pos_offset); + const uint32_t f_m_rounded_overflow = uint32_and(f_m_rounded, f_m_hidden_bit); + const uint32_t m_nan = uint32_srl(f_m, f_h_m_pos_offset); + const uint32_t h_em_nan = uint32_or(h_e_mask, m_nan); + const uint32_t h_e_norm_overflow_offset = uint32_inc(f_e_half_bias); + const uint32_t h_e_norm_overflow = uint32_sll(h_e_norm_overflow_offset, h_e_pos); + const uint32_t h_e_norm = uint32_sll(f_e_half_bias, h_e_pos); + const uint32_t h_m_norm = uint32_srl(f_m_rounded, f_h_m_pos_offset); + const uint32_t h_em_norm = uint32_or(h_e_norm, h_m_norm); + const uint32_t is_h_ndenorm_msb = uint32_sub(f_h_bias_offset, f_e_amount); + const uint32_t is_f_e_flagged_msb = uint32_sub(f_h_e_biased_flag, f_e_half_bias); + const uint32_t is_h_denorm_msb = uint32_not(is_h_ndenorm_msb); + const uint32_t is_f_m_eqz_msb = uint32_dec(f_m); + const uint32_t is_h_nan_eqz_msb = uint32_dec(m_nan); + const uint32_t is_f_inf_msb = uint32_and(is_f_e_flagged_msb, is_f_m_eqz_msb); + const uint32_t is_f_nan_underflow_msb = uint32_and(is_f_e_flagged_msb, is_h_nan_eqz_msb); + const uint32_t is_e_overflow_msb = uint32_sub(h_e_mask_value, f_e_half_bias); + const uint32_t is_h_inf_msb = uint32_or(is_e_overflow_msb, is_f_inf_msb); + const uint32_t is_f_nsnan_msb = uint32_sub(f_snan, f_snan_mask); + const uint32_t is_m_norm_overflow_msb = uint32_neg(f_m_rounded_overflow); + const uint32_t is_f_snan_msb = uint32_not(is_f_nsnan_msb); + const uint32_t h_em_overflow_result = uint32_sels(is_m_norm_overflow_msb, h_e_norm_overflow, h_em_norm); + const uint32_t h_em_nan_result = uint32_sels(is_f_e_flagged_msb, h_em_nan, h_em_overflow_result); + const uint32_t h_em_nan_underflow_result = uint32_sels(is_f_nan_underflow_msb, h_nan_min, h_em_nan_result); + const uint32_t h_em_inf_result = uint32_sels(is_h_inf_msb, h_e_mask, h_em_nan_underflow_result); + const uint32_t h_em_denorm_result = uint32_sels(is_h_denorm_msb, h_m_denorm, h_em_inf_result); + const uint32_t h_em_snan_result = uint32_sels(is_f_snan_msb, h_snan_mask, h_em_denorm_result); + const uint32_t h_result = uint32_or(h_s, h_em_snan_result); + + return (uint16_t)(h_result); + } + + inline float halfToFloat(uint16_t _a) + { + const uint32_t h_e_mask = uint32_li(0x00007c00); + const uint32_t h_m_mask = uint32_li(0x000003ff); + const uint32_t h_s_mask = uint32_li(0x00008000); + const uint32_t h_f_s_pos_offset = uint32_li(0x00000010); + const uint32_t h_f_e_pos_offset = uint32_li(0x0000000d); + const uint32_t h_f_bias_offset = uint32_li(0x0001c000); + const uint32_t f_e_mask = uint32_li(0x7f800000); + const uint32_t f_m_mask = uint32_li(0x007fffff); + const uint32_t h_f_e_denorm_bias = uint32_li(0x0000007e); + const uint32_t h_f_m_denorm_sa_bias = uint32_li(0x00000008); + const uint32_t f_e_pos = uint32_li(0x00000017); + const uint32_t h_e_mask_minus_one = uint32_li(0x00007bff); + const uint32_t h_e = uint32_and(_a, h_e_mask); + const uint32_t h_m = uint32_and(_a, h_m_mask); + const uint32_t h_s = uint32_and(_a, h_s_mask); + const uint32_t h_e_f_bias = uint32_add(h_e, h_f_bias_offset); + const uint32_t h_m_nlz = uint32_cntlz(h_m); + const uint32_t f_s = uint32_sll(h_s, h_f_s_pos_offset); + const uint32_t f_e = uint32_sll(h_e_f_bias, h_f_e_pos_offset); + const uint32_t f_m = uint32_sll(h_m, h_f_e_pos_offset); + const uint32_t f_em = uint32_or(f_e, f_m); + const uint32_t h_f_m_sa = uint32_sub(h_m_nlz, h_f_m_denorm_sa_bias); + const uint32_t f_e_denorm_unpacked = uint32_sub(h_f_e_denorm_bias, h_f_m_sa); + const uint32_t h_f_m = uint32_sll(h_m, h_f_m_sa); + const uint32_t f_m_denorm = uint32_and(h_f_m, f_m_mask); + const uint32_t f_e_denorm = uint32_sll(f_e_denorm_unpacked, f_e_pos); + const uint32_t f_em_denorm = uint32_or(f_e_denorm, f_m_denorm); + const uint32_t f_em_nan = uint32_or(f_e_mask, f_m); + const uint32_t is_e_eqz_msb = uint32_dec(h_e); + const uint32_t is_m_nez_msb = uint32_neg(h_m); + const uint32_t is_e_flagged_msb = uint32_sub(h_e_mask_minus_one, h_e); + const uint32_t is_zero_msb = uint32_andc(is_e_eqz_msb, is_m_nez_msb); + const uint32_t is_inf_msb = uint32_andc(is_e_flagged_msb, is_m_nez_msb); + const uint32_t is_denorm_msb = uint32_and(is_m_nez_msb, is_e_eqz_msb); + const uint32_t is_nan_msb = uint32_and(is_e_flagged_msb, is_m_nez_msb); + const uint32_t is_zero = uint32_ext(is_zero_msb); + const uint32_t f_zero_result = uint32_andc(f_em, is_zero); + const uint32_t f_denorm_result = uint32_sels(is_denorm_msb, f_em_denorm, f_zero_result); + const uint32_t f_inf_result = uint32_sels(is_inf_msb, f_e_mask, f_denorm_result); + const uint32_t f_nan_result = uint32_sels(is_nan_msb, f_em_nan, f_inf_result); + const uint32_t f_result = uint32_or(f_s, f_nan_result); + + union { uint32_t ui; float flt; } utof; + utof.ui = f_result; + return utof.flt; + } + + inline uint16_t uint16_min(uint16_t _a, uint16_t _b) + { + return _a > _b ? _b : _a; + } + + inline uint16_t uint16_max(uint16_t _a, uint16_t _b) + { + return _a < _b ? _b : _a; + } + + inline int64_t int64_min(int64_t _a, int64_t _b) + { + return _a < _b ? _a : _b; + } + + inline int64_t int64_max(int64_t _a, int64_t _b) + { + return _a > _b ? _a : _b; + } + + inline int64_t int64_clamp(int64_t _a, int64_t _min, int64_t _max) + { + const int64_t min = int64_min(_a, _max); + const int64_t result = int64_max(_min, min); + + return result; + } + + inline uint32_t uint64_cntbits_ref(uint64_t _val) + { + const uint32_t lo = uint32_t(_val&UINT32_MAX); + const uint32_t hi = uint32_t(_val>>32); + + const uint32_t total = bx::uint32_cntbits(lo) + + bx::uint32_cntbits(hi); + return total; + } + + /// Count number of bits set. + inline uint32_t uint64_cntbits(uint64_t _val) + { +#if BX_COMPILER_GCC || BX_COMPILER_CLANG + return __builtin_popcountll(_val); +#elif BX_COMPILER_MSVC && BX_ARCH_64BIT + return uint32_t(__popcnt64(_val) ); +#else + return uint64_cntbits_ref(_val); +#endif // BX_COMPILER_ + } + + inline uint32_t uint64_cntlz_ref(uint64_t _val) + { + return _val & UINT64_C(0xffffffff00000000) + ? uint32_cntlz(uint32_t(_val>>32) ) + : uint32_cntlz(uint32_t(_val) ) + 32 + ; + } + + /// Count number of leading zeros. + inline uint32_t uint64_cntlz(uint64_t _val) + { +#if BX_COMPILER_GCC || BX_COMPILER_CLANG + return __builtin_clzll(_val); +#elif BX_COMPILER_MSVC && BX_PLATFORM_WINDOWS && BX_ARCH_64BIT + unsigned long index; + _BitScanReverse64(&index, _val); + return uint32_t(63 - index); +#else + return uint64_cntlz_ref(_val); +#endif // BX_COMPILER_ + } + + inline uint32_t uint64_cnttz_ref(uint64_t _val) + { + return _val & UINT64_C(0xffffffff) + ? uint32_cnttz(uint32_t(_val) ) + : uint32_cnttz(uint32_t(_val>>32) ) + 32 + ; + } + + inline uint32_t uint64_cnttz(uint64_t _val) + { +#if BX_COMPILER_GCC || BX_COMPILER_CLANG + return __builtin_ctzll(_val); +#elif BX_COMPILER_MSVC && BX_PLATFORM_WINDOWS && BX_ARCH_64BIT + unsigned long index; + _BitScanForward64(&index, _val); + return uint32_t(index); +#else + return uint64_cnttz_ref(_val); +#endif // BX_COMPILER_ + } + + inline uint64_t uint64_sll(uint64_t _a, int _sa) + { + return _a << _sa; + } + + inline uint64_t uint64_srl(uint64_t _a, int _sa) + { + return _a >> _sa; + } + + inline uint64_t uint64_sra(uint64_t _a, int _sa) + { + return ( (int64_t)_a) >> _sa; + } + + inline uint64_t uint64_rol(uint64_t _a, int _sa) + { + return ( _a << _sa) | (_a >> (32-_sa) ); + } + + inline uint64_t uint64_ror(uint64_t _a, int _sa) + { + return ( _a >> _sa) | (_a << (32-_sa) ); + } + + inline uint64_t uint64_add(uint64_t _a, uint64_t _b) + { + return _a + _b; + } + + inline uint64_t uint64_sub(uint64_t _a, uint64_t _b) + { + return _a - _b; + } + + inline uint64_t uint64_mul(uint64_t _a, uint64_t _b) + { + return _a * _b; + } + + /// Greatest common divisor. + inline uint32_t uint32_gcd(uint32_t _a, uint32_t _b) + { + do + { + uint32_t tmp = _a % _b; + _a = _b; + _b = tmp; + } + while (_b); + + return _a; + } + + /// Least common multiple. + inline uint32_t uint32_lcm(uint32_t _a, uint32_t _b) + { + return _a * (_b / uint32_gcd(_a, _b) ); + } + + /// Align to arbitrary stride. + inline uint32_t strideAlign(uint32_t _offset, uint32_t _stride) + { + const uint32_t mod = uint32_mod(_offset, _stride); + const uint32_t add = uint32_sub(_stride, mod); + const uint32_t mask = uint32_cmpeq(mod, 0); + const uint32_t tmp = uint32_selb(mask, 0, add); + const uint32_t result = uint32_add(_offset, tmp); + + return result; + } + + /// Align to arbitrary stride and 16-bytes. + inline uint32_t strideAlign16(uint32_t _offset, uint32_t _stride) + { + const uint32_t align = uint32_lcm(16, _stride); + const uint32_t mod = uint32_mod(_offset, align); + const uint32_t mask = uint32_cmpeq(mod, 0); + const uint32_t tmp0 = uint32_selb(mask, 0, align); + const uint32_t tmp1 = uint32_add(_offset, tmp0); + const uint32_t result = uint32_sub(tmp1, mod); + + return result; + } + + /// Align to arbitrary stride and 256-bytes. + inline uint32_t strideAlign256(uint32_t _offset, uint32_t _stride) + { + const uint32_t align = uint32_lcm(256, _stride); + const uint32_t mod = uint32_mod(_offset, align); + const uint32_t mask = uint32_cmpeq(mod, 0); + const uint32_t tmp0 = uint32_selb(mask, 0, align); + const uint32_t tmp1 = uint32_add(_offset, tmp0); + const uint32_t result = uint32_sub(tmp1, mod); + + return result; + } + +} // namespace bx diff --git a/3rdparty/bx/include/bx/macros.h b/3rdparty/bx/include/bx/macros.h index d565fca..1358507 100644 --- a/3rdparty/bx/include/bx/macros.h +++ b/3rdparty/bx/include/bx/macros.h @@ -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 */ @@ -101,8 +101,7 @@ # error "Unknown BX_COMPILER_?" #endif -// #define BX_STATIC_ASSERT(_condition, ...) static_assert(_condition, "" __VA_ARGS__) -#define BX_STATIC_ASSERT(_condition, ...) typedef char BX_CONCATENATE(BX_STATIC_ASSERT_, __LINE__)[1][(_condition)] BX_ATTRIBUTE(unused) +#define BX_STATIC_ASSERT(_condition, ...) static_assert(_condition, "" __VA_ARGS__) /// #define BX_ALIGN_DECL_16(_decl) BX_ALIGN_DECL(16, _decl) @@ -225,4 +224,7 @@ # define BX_WARN(_condition, ...) BX_NOOP() #endif // BX_CHECK +// static_assert sometimes causes unused-local-typedef... +BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG("-Wunused-local-typedef") + #endif // BX_MACROS_H_HEADER_GUARD diff --git a/3rdparty/bx/include/bx/maputil.h b/3rdparty/bx/include/bx/maputil.h index 21e6067..4c7e4aa 100644 --- a/3rdparty/bx/include/bx/maputil.h +++ b/3rdparty/bx/include/bx/maputil.h @@ -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 */ diff --git a/3rdparty/bx/include/bx/mpscqueue.h b/3rdparty/bx/include/bx/mpscqueue.h index 5a3db68..0ac8f82 100644 --- a/3rdparty/bx/include/bx/mpscqueue.h +++ b/3rdparty/bx/include/bx/mpscqueue.h @@ -1,53 +1,47 @@ /* - * 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_MPSCQUEUE_H_HEADER_GUARD #define BX_MPSCQUEUE_H_HEADER_GUARD +#include "mutex.h" #include "spscqueue.h" namespace bx { + /// template - class MpScUnboundedQueue + class MpScUnboundedQueueT { - BX_CLASS(MpScUnboundedQueue + BX_CLASS(MpScUnboundedQueueT , NO_COPY , NO_ASSIGNMENT ); public: - MpScUnboundedQueue() - { - } + /// + MpScUnboundedQueueT(); - ~MpScUnboundedQueue() - { - } + /// + ~MpScUnboundedQueueT(); - void push(Ty* _ptr) // producer only - { - LwMutexScope lock(m_write); - m_queue.push(_ptr); - } + /// + void push(Ty* _ptr); // producer only - Ty* peek() // consumer only - { - return m_queue.peek(); - } + /// + Ty* peek(); // consumer only - Ty* pop() // consumer only - { - return m_queue.pop(); - } + /// + Ty* pop(); // consumer only private: - LwMutex m_write; - SpScUnboundedQueue m_queue; + Mutex m_write; + SpScUnboundedQueueT m_queue; }; + /// template class MpScUnboundedBlockingQueue { @@ -57,31 +51,25 @@ namespace bx ); public: - MpScUnboundedBlockingQueue() - { - } + /// + MpScUnboundedBlockingQueue(); - ~MpScUnboundedBlockingQueue() - { - } + /// + ~MpScUnboundedBlockingQueue(); - void push(Ty* _ptr) // producer only - { - m_queue.push(_ptr); - m_sem.post(); - } + /// + void push(Ty* _ptr); // producer only - Ty* pop() // consumer only - { - m_sem.wait(); - return m_queue.pop(); - } + /// + Ty* pop(); // consumer only private: - MpScUnboundedQueue m_queue; + MpScUnboundedQueueT m_queue; Semaphore m_sem; }; } // namespace bx +#include "inline/mpscqueue.inl" + #endif // BX_MPSCQUEUE_H_HEADER_GUARD diff --git a/3rdparty/bx/include/bx/mutex.h b/3rdparty/bx/include/bx/mutex.h index b01be03..ac8ea7f 100644 --- a/3rdparty/bx/include/bx/mutex.h +++ b/3rdparty/bx/include/bx/mutex.h @@ -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 */ @@ -7,58 +7,10 @@ #define BX_MUTEX_H_HEADER_GUARD #include "bx.h" -#include "cpu.h" -#include "os.h" -#include "sem.h" - -#if BX_CONFIG_SUPPORTS_THREADING - -#if BX_PLATFORM_NACL || BX_PLATFORM_LINUX || BX_PLATFORM_ANDROID || BX_PLATFORM_OSX -# include -#elif BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360 || BX_PLATFORM_WINRT -# include -#endif // BX_PLATFORM_ namespace bx { -#if BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360 || BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT - typedef CRITICAL_SECTION pthread_mutex_t; - typedef unsigned pthread_mutexattr_t; - - inline int pthread_mutex_lock(pthread_mutex_t* _mutex) - { - EnterCriticalSection(_mutex); - return 0; - } - - inline int pthread_mutex_unlock(pthread_mutex_t* _mutex) - { - LeaveCriticalSection(_mutex); - return 0; - } - - inline int pthread_mutex_trylock(pthread_mutex_t* _mutex) - { - return TryEnterCriticalSection(_mutex) ? 0 : EBUSY; - } - - inline int pthread_mutex_init(pthread_mutex_t* _mutex, pthread_mutexattr_t* /*_attr*/) - { -#if BX_PLATFORM_WINRT - InitializeCriticalSectionEx(_mutex, 4000, 0); // docs recommend 4000 spincount as sane default -#else - InitializeCriticalSection(_mutex); -#endif - return 0; - } - - inline int pthread_mutex_destroy(pthread_mutex_t* _mutex) - { - DeleteCriticalSection(_mutex); - return 0; - } -#endif // BX_PLATFORM_ - + /// class Mutex { BX_CLASS(Mutex @@ -67,36 +19,23 @@ namespace bx ); public: - Mutex() - { - pthread_mutexattr_t attr; -#if BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360 || BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT -#else - pthread_mutexattr_init(&attr); - pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); -#endif // BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360 || BX_PLATFORM_WINRT - pthread_mutex_init(&m_handle, &attr); - } + /// + Mutex(); - ~Mutex() - { - pthread_mutex_destroy(&m_handle); - } + /// + ~Mutex(); - void lock() - { - pthread_mutex_lock(&m_handle); - } + /// + void lock(); - void unlock() - { - pthread_mutex_unlock(&m_handle); - } + /// + void unlock(); private: - pthread_mutex_t m_handle; + BX_ALIGN_DECL(16, uint8_t) m_internal[64]; }; + /// class MutexScope { BX_CLASS(MutexScope @@ -106,49 +45,18 @@ namespace bx ); public: - MutexScope(Mutex& _mutex) - : m_mutex(_mutex) - { - m_mutex.lock(); - } + /// + MutexScope(Mutex& _mutex); - ~MutexScope() - { - m_mutex.unlock(); - } + /// + ~MutexScope(); private: Mutex& m_mutex; }; - typedef Mutex LwMutex; - - class LwMutexScope - { - BX_CLASS(LwMutexScope - , NO_DEFAULT_CTOR - , NO_COPY - , NO_ASSIGNMENT - ); - - public: - LwMutexScope(LwMutex& _mutex) - : m_mutex(_mutex) - { - m_mutex.lock(); - } - - ~LwMutexScope() - { - m_mutex.unlock(); - } - - private: - LwMutex& m_mutex; - }; - } // namespace bx -#endif // BX_CONFIG_SUPPORTS_THREADING +#include "inline/mutex.inl" #endif // BX_MUTEX_H_HEADER_GUARD diff --git a/3rdparty/bx/include/bx/os.h b/3rdparty/bx/include/bx/os.h index 58c315a..56781b2 100644 --- a/3rdparty/bx/include/bx/os.h +++ b/3rdparty/bx/include/bx/os.h @@ -1,65 +1,12 @@ /* - * 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_OS_H_HEADER_GUARD #define BX_OS_H_HEADER_GUARD -#include "bx.h" #include "debug.h" -#include - -#if BX_PLATFORM_WINDOWS || BX_PLATFORM_WINRT -# include -# include -#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 -# include // sched_yield -# if BX_PLATFORM_BSD \ - || BX_PLATFORM_IOS \ - || BX_PLATFORM_NACL \ - || BX_PLATFORM_OSX \ - || BX_PLATFORM_PS4 \ - || BX_PLATFORM_STEAMLINK -# include // mach_port_t -# endif // BX_PLATFORM_* - -# include // nanosleep -# if !BX_PLATFORM_PS4 && !BX_PLATFORM_NACL -# include // dlopen, dlclose, dlsym -# endif // !BX_PLATFORM_PS4 && !BX_PLATFORM_NACL - -# if BX_PLATFORM_ANDROID -# include // mallinfo -# elif BX_PLATFORM_LINUX \ - || BX_PLATFORM_RPI \ - || BX_PLATFORM_STEAMLINK -# include // syscall -# include -# elif BX_PLATFORM_OSX -# include // mach_task_basic_info -# elif BX_PLATFORM_HURD -# include // pthread_self -# elif BX_PLATFORM_ANDROID -# include "debug.h" // getTid is not implemented... -# endif // BX_PLATFORM_ANDROID -#endif // BX_PLATFORM_ - -#if BX_CRT_MSVC -# include // _getcwd -#else -# include // getcwd -#endif // BX_CRT_MSVC #if BX_PLATFORM_OSX # define BX_DL_EXT "dylib" @@ -71,241 +18,6 @@ namespace bx { - inline void sleep(uint32_t _ms) - { -#if BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360 - ::Sleep(_ms); -#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}; - ::nanosleep(&req, &rem); -#endif // BX_PLATFORM_ - } - - inline void yield() - { -#if BX_PLATFORM_WINDOWS - ::SwitchToThread(); -#elif BX_PLATFORM_XBOX360 - ::Sleep(0); -#elif BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT - debugOutput("yield is not implemented"); debugBreak(); -#else - ::sched_yield(); -#endif // BX_PLATFORM_ - } - - inline uint32_t getTid() - { -#if BX_PLATFORM_WINDOWS - return ::GetCurrentThreadId(); -#elif BX_PLATFORM_LINUX || BX_PLATFORM_RPI || BX_PLATFORM_STEAMLINK - return (pid_t)::syscall(SYS_gettid); -#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. - 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 // - } - - inline size_t getProcessMemoryUsed() - { -#if BX_PLATFORM_ANDROID - struct mallinfo mi = mallinfo(); - return mi.uordblks; -#elif BX_PLATFORM_LINUX || BX_PLATFORM_HURD - FILE* file = fopen("/proc/self/statm", "r"); - if (NULL == file) - { - return 0; - } - - long pages = 0; - int items = fscanf(file, "%*s%ld", &pages); - fclose(file); - return 1 == items - ? pages * sysconf(_SC_PAGESIZE) - : 0 - ; -#elif BX_PLATFORM_OSX -# if defined(MACH_TASK_BASIC_INFO) - mach_task_basic_info info; - mach_msg_type_number_t infoCount = MACH_TASK_BASIC_INFO_COUNT; - - int const result = task_info(mach_task_self() - , MACH_TASK_BASIC_INFO - , (task_info_t)&info - , &infoCount - ); -# else // MACH_TASK_BASIC_INFO - task_basic_info info; - mach_msg_type_number_t infoCount = TASK_BASIC_INFO_COUNT; - - int const result = task_info(mach_task_self() - , TASK_BASIC_INFO - , (task_info_t)&info - , &infoCount - ); -# endif // MACH_TASK_BASIC_INFO - if (KERN_SUCCESS != result) - { - return 0; - } - - return info.resident_size; -#elif BX_PLATFORM_WINDOWS - PROCESS_MEMORY_COUNTERS pmc; - GetProcessMemoryInfo(GetCurrentProcess() - , &pmc - , sizeof(pmc) - ); - return pmc.WorkingSetSize; -#else - return 0; -#endif // BX_PLATFORM_* - } - - inline void* dlopen(const char* _filePath) - { -#if BX_PLATFORM_WINDOWS - return (void*)::LoadLibraryA(_filePath); -#elif BX_PLATFORM_EMSCRIPTEN \ - || BX_PLATFORM_NACL \ - || BX_PLATFORM_PS4 \ - || BX_PLATFORM_XBOXONE \ - || BX_PLATFORM_WINRT - BX_UNUSED(_filePath); - return NULL; -#else - return ::dlopen(_filePath, RTLD_LOCAL|RTLD_LAZY); -#endif // BX_PLATFORM_ - } - - inline void dlclose(void* _handle) - { -#if BX_PLATFORM_WINDOWS - ::FreeLibrary( (HMODULE)_handle); -#elif BX_PLATFORM_EMSCRIPTEN \ - || BX_PLATFORM_NACL \ - || BX_PLATFORM_PS4 \ - || BX_PLATFORM_XBOXONE \ - || BX_PLATFORM_WINRT - BX_UNUSED(_handle); -#else - ::dlclose(_handle); -#endif // BX_PLATFORM_ - } - - inline void* dlsym(void* _handle, const char* _symbol) - { -#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_WINRT - BX_UNUSED(_handle, _symbol); - return NULL; -#else - return ::dlsym(_handle, _symbol); -#endif // BX_PLATFORM_ - } - - inline bool getenv(const char* _name, char* _out, uint32_t* _inOutSize) - { -#if BX_PLATFORM_WINDOWS - DWORD len = ::GetEnvironmentVariableA(_name, _out, *_inOutSize); - bool result = len != 0 && len < *_inOutSize; - *_inOutSize = len; - return result; -#elif BX_PLATFORM_PS4 \ - || BX_PLATFORM_XBOXONE \ - || BX_PLATFORM_WINRT - BX_UNUSED(_name, _out, _inOutSize); - return false; -#else - const char* ptr = ::getenv(_name); - uint32_t len = 0; - if (NULL != ptr) - { - len = (uint32_t)strlen(ptr); - } - bool result = len != 0 && len < *_inOutSize; - if (len < *_inOutSize) - { - strcpy(_out, ptr); - } - - *_inOutSize = len; - return result; -#endif // BX_PLATFORM_ - } - - inline void setenv(const char* _name, const char* _value) - { -#if BX_PLATFORM_WINDOWS - ::SetEnvironmentVariableA(_name, _value); -#elif BX_PLATFORM_PS4 \ - || BX_PLATFORM_XBOXONE \ - || BX_PLATFORM_WINRT - BX_UNUSED(_name, _value); -#else - ::setenv(_name, _value, 1); -#endif // BX_PLATFORM_ - } - - inline void unsetenv(const char* _name) - { -#if BX_PLATFORM_WINDOWS - ::SetEnvironmentVariableA(_name, NULL); -#elif BX_PLATFORM_PS4 \ - || BX_PLATFORM_XBOXONE \ - || BX_PLATFORM_WINRT - BX_UNUSED(_name); -#else - ::unsetenv(_name); -#endif // BX_PLATFORM_ - } - - inline int chdir(const char* _path) - { -#if BX_PLATFORM_PS4 \ - || BX_PLATFORM_XBOXONE \ - || BX_PLATFORM_WINRT - BX_UNUSED(_path); - return -1; -#elif BX_CRT_MSVC - return ::_chdir(_path); -#else - return ::chdir(_path); -#endif // BX_COMPILER_ - } - - inline 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_ - } - struct FileInfo { enum Enum @@ -320,50 +32,50 @@ namespace bx Enum m_type; }; - inline bool stat(const char* _filePath, FileInfo& _fileInfo) - { - _fileInfo.m_size = 0; - _fileInfo.m_type = FileInfo::Count; + /// + void sleep(uint32_t _ms); -#if BX_COMPILER_MSVC - struct ::_stat64 st; - int32_t result = ::_stat64(_filePath, &st); + /// + void yield(); - if (0 != result) - { - return false; - } + /// + uint32_t getTid(); - 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; - } + /// + size_t getProcessMemoryUsed(); - 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 + /// + void* dlopen(const char* _filePath); - _fileInfo.m_size = st.st_size; + /// + void dlclose(void* _handle); - return true; - } + /// + void* dlsym(void* _handle, const char* _symbol); + + /// + bool getenv(const char* _name, char* _out, uint32_t* _inOutSize); + + /// + void setenv(const char* _name, const char* _value); + + /// + void unsetenv(const char* _name); + + /// + 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 new file mode 100644 index 0000000..78354e4 --- /dev/null +++ b/3rdparty/bx/include/bx/pixelformat.h @@ -0,0 +1,243 @@ +/* + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bx#license-bsd-2-clause + */ + +#ifndef BX_PIXEL_FORMAT_H_HEADER_GUARD +#define BX_PIXEL_FORMAT_H_HEADER_GUARD + +#include "fpumath.h" +#include "uint32_t.h" + +namespace bx +{ + struct EncodingType + { + enum Enum + { + Unorm, + Int, + Uint, + Float, + Snorm, + + Count + }; + }; + + typedef void (*PackFn)(void*, const float*); + typedef void (*UnpackFn)(float*, const void*); + + /// + uint32_t toUnorm(float _value, float _scale); + + /// + float fromUnorm(uint32_t _value, float _scale); + + /// + int32_t toSnorm(float _value, float _scale); + + /// + float fromSnorm(int32_t _value, float _scale); + + // R8 + void packR8(void* _dst, const float* _src); + void unpackR8(float* _dst, const void* _src); + + // R8S + void packR8S(void* _dst, const float* _src); + void unpackR8S(float* _dst, const void* _src); + + // R8I + void packR8I(void* _dst, const float* _src); + void unpackR8I(float* _dst, const void* _src); + + // R8U + void packR8U(void* _dst, const float* _src); + void unpackR8U(float* _dst, const void* _src); + + // RG8 + void packRg8(void* _dst, const float* _src); + void unpackRg8(float* _dst, const void* _src); + + // RG8S + void packRg8S(void* _dst, const float* _src); + void unpackRg8S(float* _dst, const void* _src); + + // RG8I + void packRg8I(void* _dst, const float* _src); + void unpackRg8I(float* _dst, const void* _src); + + // RG8U + void packRg8U(void* _dst, const float* _src); + void unpackRg8U(float* _dst, const void* _src); + + // RGB8 + void packRgb8(void* _dst, const float* _src); + void unpackRgb8(float* _dst, const void* _src); + + // RGB8S + void packRgb8S(void* _dst, const float* _src); + void unpackRgb8S(float* _dst, const void* _src); + + // RGB8I + void packRgb8I(void* _dst, const float* _src); + void unpackRgb8I(float* _dst, const void* _src); + + // RGB8U + void packRgb8U(void* _dst, const float* _src); + void unpackRgb8U(float* _dst, const void* _src); + + // RGBA8 + void packRgba8(void* _dst, const float* _src); + void unpackRgba8(float* _dst, const void* _src); + + // BGRA8 + void packBgra8(void* _dst, const float* _src); + void unpackBgra8(float* _dst, const void* _src); + + // RGBA8S + void packRgba8S(void* _dst, const float* _src); + void unpackRgba8S(float* _dst, const void* _src); + + // RGBA8I + void packRgba8I(void* _dst, const float* _src); + void unpackRgba8I(float* _dst, const void* _src); + + // RGBA8U + void packRgba8U(void* _dst, const float* _src); + void unpackRgba8U(float* _dst, const void* _src); + + // R16 + void packR16(void* _dst, const float* _src); + void unpackR16(float* _dst, const void* _src); + + // R16S + void packR16S(void* _dst, const float* _src); + void unpackR16S(float* _dst, const void* _src); + + // R16I + void packR16I(void* _dst, const float* _src); + void unpackR16I(float* _dst, const void* _src); + + // R16U + void packR16U(void* _dst, const float* _src); + void unpackR16U(float* _dst, const void* _src); + + // R16F + void packR16F(void* _dst, const float* _src); + void unpackR16F(float* _dst, const void* _src); + + // RG16 + void packRg16(void* _dst, const float* _src); + void unpackRg16(float* _dst, const void* _src); + + // RG16S + void packRg16S(void* _dst, const float* _src); + void unpackRg16S(float* _dst, const void* _src); + + // RG16I + void packRg16I(void* _dst, const float* _src); + void unpackRg16I(float* _dst, const void* _src); + + // RG16U + void packRg16U(void* _dst, const float* _src); + void unpackRg16U(float* _dst, const void* _src); + + // RG16F + void packRg16F(void* _dst, const float* _src); + void unpackRg16F(float* _dst, const void* _src); + + // RGBA16 + void packRgba16(void* _dst, const float* _src); + void unpackRgba16(float* _dst, const void* _src); + + // RGBA16S + void packRgba16S(void* _dst, const float* _src); + void unpackRgba16S(float* _dst, const void* _src); + + // RGBA16I + void packRgba16I(void* _dst, const float* _src); + void unpackRgba16I(float* _dst, const void* _src); + + // RGBA16U + void packRgba16U(void* _dst, const float* _src); + void unpackRgba16U(float* _dst, const void* _src); + + // RGBA16F + void packRgba16F(void* _dst, const float* _src); + void unpackRgba16F(float* _dst, const void* _src); + + // R32I + void packR32I(void* _dst, const float* _src); + void unpackR32I(float* _dst, const void* _src); + + // R32U + void packR32U(void* _dst, const float* _src); + void unpackR32U(float* _dst, const void* _src); + + // R32F + void packR32F(void* _dst, const float* _src); + void unpackR32F(float* _dst, const void* _src); + + // RG32I + void packRg32I(void* _dst, const float* _src); + void unpackRg32I(float* _dst, const void* _src); + + // RG32U + void packRg32U(void* _dst, const float* _src); + void unpackRg32U(float* _dst, const void* _src); + + // RGB9E5F + void packRgb9E5F(void* _dst, const float* _src); + void unpackRgb9E5F(float* _dst, const void* _src); + + // RGBA32I + void packRgba32I(void* _dst, const float* _src); + void unpackRgba32I(float* _dst, const void* _src); + + // RGBA32U + void packRgba32U(void* _dst, const float* _src); + void unpackRgba32U(float* _dst, const void* _src); + + // RGBA32F + void packRgba32F(void* _dst, const float* _src); + void unpackRgba32F(float* _dst, const void* _src); + + // R5G6B5 + void packR5G6B5(void* _dst, const float* _src); + void unpackR5G6B5(float* _dst, const void* _src); + + // RGBA4 + void packRgba4(void* _dst, const float* _src); + void unpackRgba4(float* _dst, const void* _src); + + // RGBA4 + void packBgra4(void* _dst, const float* _src); + void unpackBgra4(float* _dst, const void* _src); + + // RGB5A1 + void packRgb5a1(void* _dst, const float* _src); + void unpackRgb5a1(float* _dst, const void* _src); + + // BGR5A1 + void packBgr5a1(void* _dst, const float* _src); + void unpackBgr5a1(float* _dst, const void* _src); + + // RGB10A2 + 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); + + // RG32F + void packRg32F(void* _dst, const float* _src); + void unpackRg32F(float* _dst, const void* _src); + +} // namespace bx + +#include "inline/pixelformat.inl" + +#endif // BX_PIXEL_FORMAT_H_HEADER_GUARD diff --git a/3rdparty/bx/include/bx/platform.h b/3rdparty/bx/include/bx/platform.h index d917d07..8d8c340 100644 --- a/3rdparty/bx/include/bx/platform.h +++ b/3rdparty/bx/include/bx/platform.h @@ -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 */ @@ -29,11 +29,20 @@ #define BX_CPU_X86 0 // C Runtime -#define BX_CRT_MSVC 0 +#define BX_CRT_BIONIC 0 #define BX_CRT_GLIBC 0 -#define BX_CRT_NEWLIB 0 +#define BX_CRT_LIBCXX 0 #define BX_CRT_MINGW 0 -#define BX_CRT_MUSL 0 +#define BX_CRT_MSVC 0 +#define BX_CRT_NEWLIB 0 + +#ifndef BX_CRT_MUSL +# define BX_CRT_MUSL 0 +#endif // BX_CRT_MUSL + +#ifndef BX_CRT_NONE +# define BX_CRT_NONE 0 +#endif // BX_CRT_NONE // Platform #define BX_PLATFORM_ANDROID 0 @@ -62,28 +71,12 @@ # undef BX_COMPILER_CLANG_ANALYZER # define BX_COMPILER_CLANG_ANALYZER 1 # endif // defined(__clang_analyzer__) -# if defined(_MSC_VER) -# undef BX_CRT_MSVC -# define BX_CRT_MSVC 1 -# elif defined(__GLIBC__) -# undef BX_CRT_GLIBC -# define BX_CRT_GLIBC (__GLIBC__ * 10000 + __GLIBC_MINOR__ * 100) -# endif // defined(__GLIBC__) #elif defined(_MSC_VER) # undef BX_COMPILER_MSVC # define BX_COMPILER_MSVC _MSC_VER -# undef BX_CRT_MSVC -# define BX_CRT_MSVC 1 #elif defined(__GNUC__) # undef BX_COMPILER_GCC # define BX_COMPILER_GCC (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) -# if defined(__GLIBC__) -# undef BX_CRT_GLIBC -# define BX_CRT_GLIBC (__GLIBC__ * 10000 + __GLIBC_MINOR__ * 100) -# elif defined(__MINGW32__) || defined(__MINGW64__) -# undef BX_CRT_MINGW -# define BX_CRT_MINGW 1 -# endif // #else # error "BX_COMPILER_* is not defined!" #endif // @@ -185,7 +178,7 @@ # endif #elif defined(__ANDROID__) // Android compiler defines __linux__ -# include +# include // Defines __BIONIC__ and includes android/api-level.h # undef BX_PLATFORM_ANDROID # define BX_PLATFORM_ANDROID __ANDROID_API__ #elif defined(__native_client__) @@ -201,8 +194,7 @@ // RaspberryPi compiler defines __linux__ # undef BX_PLATFORM_RPI # define BX_PLATFORM_RPI 1 -#elif defined(__linux__) \ - || defined(__riscv__) +#elif defined(__linux__) # undef BX_PLATFORM_LINUX # define BX_PLATFORM_LINUX 1 #elif defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) \ @@ -211,11 +203,7 @@ # define BX_PLATFORM_IOS 1 #elif defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) # undef BX_PLATFORM_OSX -# if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) -# define BX_PLATFORM_OSX __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ -# else -# define BX_PLATFORM_OSX 1 -# endif // defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) +# define BX_PLATFORM_OSX __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ #elif defined(__EMSCRIPTEN__) # undef BX_PLATFORM_EMSCRIPTEN # define BX_PLATFORM_EMSCRIPTEN 1 @@ -225,34 +213,82 @@ #elif defined(__QNX__) # undef BX_PLATFORM_QNX # define BX_PLATFORM_QNX 1 -#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) +#elif defined(__FreeBSD__) \ + || defined(__FreeBSD_kernel__) \ + || defined(__NetBSD__) \ + || defined(__OpenBSD__) \ + || defined(__DragonFly__) # undef BX_PLATFORM_BSD # define BX_PLATFORM_BSD 1 #elif defined(__GNU__) # undef BX_PLATFORM_HURD # define BX_PLATFORM_HURD 1 -#else -# error "BX_PLATFORM_* is not defined!" #endif // -#define BX_PLATFORM_POSIX (0 \ - || 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_QNX \ - || BX_PLATFORM_STEAMLINK \ - || BX_PLATFORM_PS4 \ - || BX_PLATFORM_RPI \ - ) +#if !BX_CRT_NONE +// https://sourceforge.net/p/predef/wiki/Libraries/ +# if defined(__BIONIC__) +# undef BX_CRT_BIONIC +# define BX_CRT_BIONIC 1 +# elif defined(_MSC_VER) +# undef BX_CRT_MSVC +# define BX_CRT_MSVC 1 +# elif defined(__GLIBC__) +# undef BX_CRT_GLIBC +# define BX_CRT_GLIBC (__GLIBC__ * 10000 + __GLIBC_MINOR__ * 100) +# elif defined(__MINGW32__) || defined(__MINGW64__) +# undef BX_CRT_MINGW +# define BX_CRT_MINGW 1 +# elif defined(__apple_build_version__) || defined(__ORBIS__) || defined(__EMSCRIPTEN__) +# undef BX_CRT_LIBCXX +# define BX_CRT_LIBCXX 1 +# endif // -#ifndef BX_CONFIG_ENABLE_MSVC_LEVEL4_WARNINGS -# define BX_CONFIG_ENABLE_MSVC_LEVEL4_WARNINGS 0 -#endif // BX_CONFIG_ENABLE_MSVC_LEVEL4_WARNINGS +# if !BX_CRT_BIONIC \ + && !BX_CRT_GLIBC \ + && !BX_CRT_LIBCXX \ + && !BX_CRT_MINGW \ + && !BX_CRT_MSVC \ + && !BX_CRT_MUSL \ + && !BX_CRT_NEWLIB +# undef BX_CRT_NONE +# define BX_CRT_NONE 1 +# endif // BX_CRT_* +#endif // !BX_CRT_NONE + +#define BX_PLATFORM_POSIX (0 \ + || 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_QNX \ + || BX_PLATFORM_STEAMLINK \ + || BX_PLATFORM_PS4 \ + || BX_PLATFORM_RPI \ + ) + +#define BX_PLATFORM_NONE !(0 \ + || 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_QNX \ + || BX_PLATFORM_RPI \ + || BX_PLATFORM_STEAMLINK \ + || BX_PLATFORM_WINDOWS \ + || BX_PLATFORM_WINRT \ + || BX_PLATFORM_XBOX360 \ + || BX_PLATFORM_XBOXONE \ + ) #if BX_COMPILER_GCC # define BX_COMPILER_NAME "GCC " \ @@ -265,7 +301,9 @@ BX_STRINGIZE(__clang_minor__) "." \ BX_STRINGIZE(__clang_patchlevel__) #elif BX_COMPILER_MSVC -# if BX_COMPILER_MSVC >= 1900 // Visual Studio 2015 +# if BX_COMPILER_MSVC >= 1910 // Visual Studio 2017 +# define BX_COMPILER_NAME "MSVC 15.0" +# elif BX_COMPILER_MSVC >= 1900 // Visual Studio 2015 # define BX_COMPILER_NAME "MSVC 14.0" # elif BX_COMPILER_MSVC >= 1800 // Visual Studio 2013 # define BX_COMPILER_NAME "MSVC 12.0" @@ -317,6 +355,10 @@ # 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_ #if BX_CPU_ARM @@ -333,31 +375,30 @@ # define BX_CPU_NAME "x86" #endif // BX_CPU_ +#if BX_CRT_BIONIC +# define BX_CRT_NAME "Bionic libc" +#elif BX_CRT_GLIBC +# define BX_CRT_NAME "GNU C Library" +#elif BX_CRT_MSVC +# define BX_CRT_NAME "MSVC C Runtime" +#elif BX_CRT_MINGW +# define BX_CRT_NAME "MinGW C Runtime" +#elif BX_CRT_LIBCXX +# define BX_CRT_NAME "Clang C Library" +#elif BX_CRT_NEWLIB +# define BX_CRT_NAME "Newlib" +#elif BX_CRT_MUSL +# define BX_CRT_NAME "musl libc" +#elif BX_CRT_NONE +# define BX_CRT_NAME "None" +#else +# error "Unknown BX_CRT!" +#endif // BX_CRT_ + #if BX_ARCH_32BIT # define BX_ARCH_NAME "32-bit" #elif BX_ARCH_64BIT # define BX_ARCH_NAME "64-bit" #endif // BX_ARCH_ -#if BX_CONFIG_ENABLE_MSVC_LEVEL4_WARNINGS && BX_COMPILER_MSVC -# pragma warning(error:4062) // ENABLE warning C4062: enumerator'...' in switch of enum '...' is not handled -# pragma warning(error:4100) // ENABLE warning C4100: '' : unreferenced formal parameter -# pragma warning(error:4189) // ENABLE warning C4189: '' : local variable is initialized but not referenced -# pragma warning(error:4121) // ENABLE warning C4121: 'symbol' : alignment of a member was sensitive to packing -//# pragma warning(error:4127) // ENABLE warning C4127: conditional expression is constant -# pragma warning(error:4130) // ENABLE warning C4130: 'operator' : logical operation on address of string constant -# pragma warning(error:4239) // ENABLE warning C4239: nonstandard extension used : 'argument' : conversion from '*' to '* &' A non-const reference may only be bound to an lvalue -//# pragma warning(error:4244) // ENABLE warning C4244: 'argument' : conversion from 'type1' to 'type2', possible loss of data -# pragma warning(error:4245) // ENABLE warning C4245: 'conversion' : conversion from 'type1' to 'type2', signed/unsigned mismatch -# pragma warning(error:4263) // ENABLE warning C4263: 'function' : member function does not override any base class virtual member function -# pragma warning(error:4265) // ENABLE warning C4265: class has virtual functions, but destructor is not virtual -# pragma warning(error:4431) // ENABLE warning C4431: missing type specifier - int assumed. Note: C no longer supports default-int -# pragma warning(error:4505) // ENABLE warning C4505: '' : unreferenced local function has been removed -# pragma warning(error:4545) // ENABLE warning C4545: expression before comma evaluates to a function which is missing an argument list -# pragma warning(error:4549) // ENABLE warning C4549: 'operator' : operator before comma has no effect; did you intend 'operator'? -# pragma warning(error:4701) // ENABLE warning C4701: potentially uninitialized local variable 'name' used -# pragma warning(error:4706) // ENABLE warning C4706: assignment within conditional expression -# pragma warning(error:4800) // ENABLE warning C4800: '': forcing value to bool 'true' or 'false' (performance warning) -#endif // BX_CONFIG_ENABLE_MSVC_LEVEL4_WARNINGS && BX_COMPILER_MSVC - #endif // BX_PLATFORM_H_HEADER_GUARD diff --git a/3rdparty/bx/include/bx/readerwriter.h b/3rdparty/bx/include/bx/readerwriter.h index 2d89081..7fda6f0 100644 --- a/3rdparty/bx/include/bx/readerwriter.h +++ b/3rdparty/bx/include/bx/readerwriter.h @@ -1,28 +1,24 @@ /* - * 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_READERWRITER_H_HEADER_GUARD #define BX_READERWRITER_H_HEADER_GUARD -#include -#include // va_list -#include -#include - -#include "bx.h" #include "allocator.h" #include "error.h" #include "uint32_t.h" -BX_ERROR_RESULT(BX_ERROR_READERWRITER_OPEN, BX_MAKEFOURCC('R', 'W', 0, 1) ); -BX_ERROR_RESULT(BX_ERROR_READERWRITER_READ, BX_MAKEFOURCC('R', 'W', 0, 2) ); -BX_ERROR_RESULT(BX_ERROR_READERWRITER_WRITE, BX_MAKEFOURCC('R', 'W', 0, 3) ); -BX_ERROR_RESULT(BX_ERROR_READERWRITER_EOF, BX_MAKEFOURCC('R', 'W', 0, 4) ); +BX_ERROR_RESULT(BX_ERROR_READERWRITER_OPEN, BX_MAKEFOURCC('R', 'W', 0, 1) ); +BX_ERROR_RESULT(BX_ERROR_READERWRITER_READ, BX_MAKEFOURCC('R', 'W', 0, 2) ); +BX_ERROR_RESULT(BX_ERROR_READERWRITER_WRITE, BX_MAKEFOURCC('R', 'W', 0, 3) ); +BX_ERROR_RESULT(BX_ERROR_READERWRITER_EOF, BX_MAKEFOURCC('R', 'W', 0, 4) ); +BX_ERROR_RESULT(BX_ERROR_READERWRITER_ALREADY_OPEN, BX_MAKEFOURCC('R', 'W', 0, 5) ); namespace bx { + /// struct Whence { enum Enum @@ -33,350 +29,111 @@ namespace bx }; }; + /// struct BX_NO_VTABLE ReaderI { virtual ~ReaderI() = 0; virtual int32_t read(void* _data, int32_t _size, Error* _err) = 0; }; - inline ReaderI::~ReaderI() - { - } - + /// struct BX_NO_VTABLE WriterI { virtual ~WriterI() = 0; virtual int32_t write(const void* _data, int32_t _size, Error* _err) = 0; }; - inline WriterI::~WriterI() - { - } - + /// struct BX_NO_VTABLE SeekerI { virtual ~SeekerI() = 0; virtual int64_t seek(int64_t _offset = 0, Whence::Enum _whence = Whence::Current) = 0; }; - inline SeekerI::~SeekerI() - { - } - - /// Read data. - inline int32_t read(ReaderI* _reader, void* _data, int32_t _size, Error* _err = NULL) - { - BX_ERROR_SCOPE(_err); - return _reader->read(_data, _size, _err); - } - - /// Read value. - template - inline int32_t read(ReaderI* _reader, Ty& _value, Error* _err = NULL) - { - BX_ERROR_SCOPE(_err); - BX_STATIC_ASSERT(BX_TYPE_IS_POD(Ty) ); - return _reader->read(&_value, sizeof(Ty), _err); - } - - /// Read value and converts it to host endianess. _fromLittleEndian specifies - /// underlying stream endianess. - template - inline int32_t readHE(ReaderI* _reader, Ty& _value, bool _fromLittleEndian, Error* _err = NULL) - { - BX_ERROR_SCOPE(_err); - BX_STATIC_ASSERT(BX_TYPE_IS_POD(Ty) ); - Ty value; - int32_t result = _reader->read(&value, sizeof(Ty), _err); - _value = toHostEndian(value, _fromLittleEndian); - return result; - } - - /// Write data. - inline int32_t write(WriterI* _writer, const void* _data, int32_t _size, Error* _err = NULL) - { - BX_ERROR_SCOPE(_err); - return _writer->write(_data, _size, _err); - } - - /// Write repeat the same value. - inline int32_t writeRep(WriterI* _writer, uint8_t _byte, int32_t _size, Error* _err = NULL) - { - BX_ERROR_SCOPE(_err); - - const uint32_t tmp0 = uint32_sels(64 - _size, 64, _size); - const uint32_t tmp1 = uint32_sels(256 - _size, 256, tmp0); - const uint32_t blockSize = uint32_sels(1024 - _size, 1024, tmp1); - uint8_t* temp = (uint8_t*)alloca(blockSize); - memset(temp, _byte, blockSize); - - int32_t size = 0; - while (0 < _size) - { - int32_t bytes = write(_writer, temp, uint32_min(blockSize, _size), _err); - size += bytes; - _size -= bytes; - } - - return size; - } - - /// Write value. - template - inline int32_t write(WriterI* _writer, const Ty& _value, Error* _err = NULL) - { - BX_ERROR_SCOPE(_err); - BX_STATIC_ASSERT(BX_TYPE_IS_POD(Ty) ); - return _writer->write(&_value, sizeof(Ty), _err); - } - - /// Write value as little endian. - template - inline int32_t writeLE(WriterI* _writer, const Ty& _value, Error* _err = NULL) - { - BX_ERROR_SCOPE(_err); - BX_STATIC_ASSERT(BX_TYPE_IS_POD(Ty) ); - Ty value = toLittleEndian(_value); - int32_t result = _writer->write(&value, sizeof(Ty), _err); - return result; - } - - /// Write value as big endian. - template - inline int32_t writeBE(WriterI* _writer, const Ty& _value, Error* _err = NULL) - { - BX_ERROR_SCOPE(_err); - BX_STATIC_ASSERT(BX_TYPE_IS_POD(Ty) ); - Ty value = toBigEndian(_value); - int32_t result = _writer->write(&value, sizeof(Ty), _err); - return result; - } - - /// Write formated string. - inline int32_t writePrintf(WriterI* _writer, const char* _format, ...) - { - va_list argList; - va_start(argList, _format); - - char temp[2048]; - char* out = temp; - int32_t max = sizeof(temp); - int32_t len = vsnprintf(out, max, _format, argList); - if (len > max) - { - out = (char*)alloca(len); - len = vsnprintf(out, len, _format, argList); - } - - int32_t size = write(_writer, out, len); - - va_end(argList); - - return size; - } - - /// Skip _offset bytes forward. - inline int64_t skip(SeekerI* _seeker, int64_t _offset) - { - return _seeker->seek(_offset, Whence::Current); - } - - /// Seek to any position in file. - inline int64_t seek(SeekerI* _seeker, int64_t _offset = 0, Whence::Enum _whence = Whence::Current) - { - return _seeker->seek(_offset, _whence); - } - - /// Returns size of file. - inline int64_t getSize(SeekerI* _seeker) - { - int64_t offset = _seeker->seek(); - int64_t size = _seeker->seek(0, Whence::End); - _seeker->seek(offset, Whence::Begin); - return size; - } - + /// struct BX_NO_VTABLE ReaderSeekerI : public ReaderI, public SeekerI { }; - /// Peek data. - inline int32_t peek(ReaderSeekerI* _reader, void* _data, int32_t _size, Error* _err = NULL) - { - BX_ERROR_SCOPE(_err); - int64_t offset = bx::seek(_reader); - int32_t size = _reader->read(_data, _size, _err); - bx::seek(_reader, offset, bx::Whence::Begin); - return size; - } - - /// Peek value. - template - inline int32_t peek(ReaderSeekerI* _reader, Ty& _value, Error* _err = NULL) - { - BX_ERROR_SCOPE(_err); - BX_STATIC_ASSERT(BX_TYPE_IS_POD(Ty) ); - return peek(_reader, &_value, sizeof(Ty), _err); - } - + /// struct BX_NO_VTABLE WriterSeekerI : public WriterI, public SeekerI { }; - /// Align reader stream. - inline int32_t align(ReaderSeekerI* _reader, uint32_t _alignment, Error* _err = NULL) - { - BX_ERROR_SCOPE(_err); - const int64_t current = bx::seek(_reader); - const int64_t aligned = ( (current + _alignment-1)/_alignment) * _alignment; - const int32_t size = int32_t(aligned - current); - if (0 != size) - { - const int64_t offset = bx::seek(_reader, size); - if (offset != aligned) - { - BX_ERROR_SET(_err, BX_ERROR_READERWRITER_WRITE, "Align: read truncated."); - } - return int32_t(offset - current); - } - - return 0; - } - - /// Align writer stream (pads stream with zeros). - inline int32_t align(WriterSeekerI* _writer, uint32_t _alignment, Error* _err = NULL) - { - BX_ERROR_SCOPE(_err); - const int64_t current = bx::seek(_writer); - const int64_t aligned = ( (current + _alignment-1)/_alignment) * _alignment; - const int32_t size = int32_t(aligned - current); - if (0 != size) - { - return writeRep(_writer, 0, size, _err); - } - - return 0; - } - + /// struct BX_NO_VTABLE ReaderOpenI { virtual ~ReaderOpenI() = 0; virtual bool open(const char* _filePath, Error* _err) = 0; }; - inline ReaderOpenI::~ReaderOpenI() - { - } - + /// struct BX_NO_VTABLE WriterOpenI { virtual ~WriterOpenI() = 0; virtual bool open(const char* _filePath, bool _append, Error* _err) = 0; }; - inline WriterOpenI::~WriterOpenI() - { - } - + /// struct BX_NO_VTABLE CloserI { virtual ~CloserI() = 0; virtual void close() = 0; }; - inline CloserI::~CloserI() - { - } - + /// struct BX_NO_VTABLE FileReaderI : public ReaderOpenI, public CloserI, public ReaderSeekerI { }; + /// struct BX_NO_VTABLE FileWriterI : public WriterOpenI, public CloserI, public WriterSeekerI { }; - inline bool open(ReaderOpenI* _reader, const char* _filePath, Error* _err = NULL) - { - BX_ERROR_USE_TEMP_WHEN_NULL(_err); - return _reader->open(_filePath, _err); - } - - inline bool open(WriterOpenI* _writer, const char* _filePath, bool _append = false, Error* _err = NULL) - { - BX_ERROR_USE_TEMP_WHEN_NULL(_err); - return _writer->open(_filePath, _append, _err); - } - - inline void close(CloserI* _reader) - { - _reader->close(); - } - + /// struct BX_NO_VTABLE MemoryBlockI { virtual void* more(uint32_t _size = 0) = 0; virtual uint32_t getSize() = 0; }; + /// class StaticMemoryBlock : public MemoryBlockI { public: - StaticMemoryBlock(void* _data, uint32_t _size) - : m_data(_data) - , m_size(_size) - { - } + /// + StaticMemoryBlock(void* _data, uint32_t _size); - virtual ~StaticMemoryBlock() - { - } + /// + virtual ~StaticMemoryBlock(); - virtual void* more(uint32_t /*_size*/ = 0) BX_OVERRIDE - { - return m_data; - } + /// + virtual void* more(uint32_t _size = 0); - virtual uint32_t getSize() BX_OVERRIDE - { - return m_size; - } + /// + virtual uint32_t getSize() BX_OVERRIDE; private: void* m_data; uint32_t m_size; }; + /// class MemoryBlock : public MemoryBlockI { public: - MemoryBlock(AllocatorI* _allocator) - : m_allocator(_allocator) - , m_data(NULL) - , m_size(0) - { - } + /// + MemoryBlock(AllocatorI* _allocator); - virtual ~MemoryBlock() - { - BX_FREE(m_allocator, m_data); - } + /// + virtual ~MemoryBlock(); - virtual void* more(uint32_t _size = 0) BX_OVERRIDE - { - if (0 < _size) - { - m_size += _size; - m_data = BX_REALLOC(m_allocator, m_data, m_size); - } + /// + virtual void* more(uint32_t _size = 0) BX_OVERRIDE; - return m_data; - } - - virtual uint32_t getSize() BX_OVERRIDE - { - return m_size; - } + /// + virtual uint32_t getSize() BX_OVERRIDE; private: AllocatorI* m_allocator; @@ -384,128 +141,51 @@ namespace bx uint32_t m_size; }; + /// class SizerWriter : public WriterSeekerI { public: - SizerWriter() - : m_pos(0) - , m_top(0) - { - } + /// + SizerWriter(); - virtual ~SizerWriter() - { - } + /// + virtual ~SizerWriter(); - virtual int64_t seek(int64_t _offset = 0, Whence::Enum _whence = Whence::Current) BX_OVERRIDE - { - switch (_whence) - { - case Whence::Begin: - m_pos = int64_clamp(_offset, 0, m_top); - break; + /// + virtual int64_t seek(int64_t _offset = 0, Whence::Enum _whence = Whence::Current) BX_OVERRIDE; - case Whence::Current: - m_pos = int64_clamp(m_pos + _offset, 0, m_top); - break; - - case Whence::End: - m_pos = int64_clamp(m_top - _offset, 0, m_top); - break; - } - - return m_pos; - } - - virtual int32_t write(const void* /*_data*/, int32_t _size, Error* _err) BX_OVERRIDE - { - BX_CHECK(NULL != _err, "Reader/Writer interface calling functions must handle errors."); - - int32_t morecore = int32_t(m_pos - m_top) + _size; - - if (0 < morecore) - { - m_top += morecore; - } - - int64_t remainder = m_top-m_pos; - int32_t size = uint32_min(_size, uint32_t(int64_min(remainder, INT32_MAX) ) ); - m_pos += size; - if (size != _size) - { - BX_ERROR_SET(_err, BX_ERROR_READERWRITER_WRITE, "SizerWriter: write truncated."); - } - return size; - } + /// + virtual int32_t write(const void* /*_data*/, int32_t _size, Error* _err) BX_OVERRIDE; private: int64_t m_pos; int64_t m_top; }; + /// class MemoryReader : public ReaderSeekerI { public: - MemoryReader(const void* _data, uint32_t _size) - : m_data( (const uint8_t*)_data) - , m_pos(0) - , m_top(_size) - { - } + /// + MemoryReader(const void* _data, uint32_t _size); - virtual ~MemoryReader() - { - } + /// + virtual ~MemoryReader(); - virtual int64_t seek(int64_t _offset, Whence::Enum _whence) BX_OVERRIDE - { - switch (_whence) - { - case Whence::Begin: - m_pos = int64_clamp(_offset, 0, m_top); - break; + /// + virtual int64_t seek(int64_t _offset, Whence::Enum _whence) BX_OVERRIDE; - case Whence::Current: - m_pos = int64_clamp(m_pos + _offset, 0, m_top); - break; + /// + virtual int32_t read(void* _data, int32_t _size, Error* _err) BX_OVERRIDE; - case Whence::End: - m_pos = int64_clamp(m_top - _offset, 0, m_top); - break; - } + /// + const uint8_t* getDataPtr() const; - return m_pos; - } + /// + int64_t getPos() const; - virtual int32_t read(void* _data, int32_t _size, Error* _err) BX_OVERRIDE - { - BX_CHECK(NULL != _err, "Reader/Writer interface calling functions must handle errors."); - - int64_t remainder = m_top-m_pos; - int32_t size = uint32_min(_size, uint32_t(int64_min(remainder, INT32_MAX) ) ); - memcpy(_data, &m_data[m_pos], size); - m_pos += size; - if (size != _size) - { - BX_ERROR_SET(_err, BX_ERROR_READERWRITER_READ, "MemoryReader: read truncated."); - } - return size; - } - - const uint8_t* getDataPtr() const - { - return &m_data[m_pos]; - } - - int64_t getPos() const - { - return m_pos; - } - - int64_t remaining() const - { - return m_top-m_pos; - } + /// + int64_t remaining() const; private: const uint8_t* m_data; @@ -513,66 +193,21 @@ namespace bx int64_t m_top; }; + /// class MemoryWriter : public WriterSeekerI { public: - MemoryWriter(MemoryBlockI* _memBlock) - : m_memBlock(_memBlock) - , m_data(NULL) - , m_pos(0) - , m_top(0) - , m_size(0) - { - } + /// + MemoryWriter(MemoryBlockI* _memBlock); - virtual ~MemoryWriter() - { - } + /// + virtual ~MemoryWriter(); - virtual int64_t seek(int64_t _offset = 0, Whence::Enum _whence = Whence::Current) BX_OVERRIDE - { - switch (_whence) - { - case Whence::Begin: - m_pos = int64_clamp(_offset, 0, m_top); - break; + /// + virtual int64_t seek(int64_t _offset = 0, Whence::Enum _whence = Whence::Current) BX_OVERRIDE; - case Whence::Current: - m_pos = int64_clamp(m_pos + _offset, 0, m_top); - break; - - case Whence::End: - m_pos = int64_clamp(m_top - _offset, 0, m_top); - break; - } - - return m_pos; - } - - virtual int32_t write(const void* _data, int32_t _size, Error* _err) BX_OVERRIDE - { - BX_CHECK(NULL != _err, "Reader/Writer interface calling functions must handle errors."); - - int32_t morecore = int32_t(m_pos - m_size) + _size; - - if (0 < morecore) - { - morecore = BX_ALIGN_MASK(morecore, 0xfff); - m_data = (uint8_t*)m_memBlock->more(morecore); - m_size = m_memBlock->getSize(); - } - - int64_t remainder = m_size-m_pos; - int32_t size = uint32_min(_size, uint32_t(int64_min(remainder, INT32_MAX) ) ); - memcpy(&m_data[m_pos], _data, size); - m_pos += size; - m_top = int64_max(m_top, m_pos); - if (size != _size) - { - BX_ERROR_SET(_err, BX_ERROR_READERWRITER_WRITE, "MemoryWriter: write truncated."); - } - return size; - } + /// + virtual int32_t write(const void* _data, int32_t _size, Error* _err) BX_OVERRIDE; private: MemoryBlockI* m_memBlock; @@ -582,23 +217,86 @@ namespace bx int64_t m_size; }; + /// class StaticMemoryBlockWriter : public MemoryWriter { public: - StaticMemoryBlockWriter(void* _data, uint32_t _size) - : MemoryWriter(&m_smb) - , m_smb(_data, _size) - { - } + /// + StaticMemoryBlockWriter(void* _data, uint32_t _size); - ~StaticMemoryBlockWriter() - { - } + /// + virtual ~StaticMemoryBlockWriter(); private: StaticMemoryBlock m_smb; }; + /// Read data. + int32_t read(ReaderI* _reader, void* _data, int32_t _size, Error* _err = NULL); + + /// Read value. + template + int32_t read(ReaderI* _reader, Ty& _value, Error* _err = NULL); + + /// Read value and converts it to host endianess. _fromLittleEndian specifies + /// underlying stream endianess. + template + int32_t readHE(ReaderI* _reader, Ty& _value, bool _fromLittleEndian, Error* _err = NULL); + + /// Write data. + int32_t write(WriterI* _writer, const void* _data, int32_t _size, Error* _err = NULL); + + /// Write repeat the same value. + int32_t writeRep(WriterI* _writer, uint8_t _byte, int32_t _size, Error* _err = NULL); + + /// Write value. + template + int32_t write(WriterI* _writer, const Ty& _value, Error* _err = NULL); + + /// Write value as little endian. + template + int32_t writeLE(WriterI* _writer, const Ty& _value, Error* _err = NULL); + + /// Write value as big endian. + template + int32_t writeBE(WriterI* _writer, const Ty& _value, Error* _err = NULL); + + /// Write formated string. + int32_t writePrintf(WriterI* _writer, const char* _format, ...); + + /// Skip _offset bytes forward. + int64_t skip(SeekerI* _seeker, int64_t _offset); + + /// Seek to any position in file. + int64_t seek(SeekerI* _seeker, int64_t _offset = 0, Whence::Enum _whence = Whence::Current); + + /// Returns size of file. + int64_t getSize(SeekerI* _seeker); + + /// Peek data. + int32_t peek(ReaderSeekerI* _reader, void* _data, int32_t _size, Error* _err = NULL); + + /// Peek value. + template + int32_t peek(ReaderSeekerI* _reader, Ty& _value, Error* _err = NULL); + + /// Align reader stream. + int32_t align(ReaderSeekerI* _reader, uint32_t _alignment, Error* _err = NULL); + + /// 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); + + /// + bool open(WriterOpenI* _writer, const char* _filePath, bool _append = false, Error* _err = NULL); + + /// + void close(CloserI* _reader); + } // namespace bx +#include "inline/readerwriter.inl" + #endif // BX_READERWRITER_H_HEADER_GUARD diff --git a/3rdparty/bx/include/bx/ringbuffer.h b/3rdparty/bx/include/bx/ringbuffer.h index f3904f4..fd74250 100644 --- a/3rdparty/bx/include/bx/ringbuffer.h +++ b/3rdparty/bx/include/bx/ringbuffer.h @@ -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 */ @@ -12,6 +12,7 @@ namespace bx { + /// class RingBufferControl { BX_CLASS(RingBufferControl @@ -20,75 +21,29 @@ namespace bx ); public: - RingBufferControl(uint32_t _size) - : m_size(_size) - , m_current(0) - , m_write(0) - , m_read(0) - { - } + /// + RingBufferControl(uint32_t _size); - ~RingBufferControl() - { - } + /// + ~RingBufferControl(); - uint32_t available() const - { - return distance(m_read, m_current); - } + /// + uint32_t available() const; - uint32_t consume(uint32_t _size) // consumer only - { - const uint32_t maxSize = distance(m_read, m_current); - const uint32_t sizeNoSign = uint32_and(_size, 0x7fffffff); - const uint32_t test = uint32_sub(sizeNoSign, maxSize); - const uint32_t size = uint32_sels(test, _size, maxSize); - const uint32_t advance = uint32_add(m_read, size); - const uint32_t read = uint32_mod(advance, m_size); - m_read = read; - return size; - } + /// + uint32_t consume(uint32_t _size); // consumer only - uint32_t reserve(uint32_t _size) // producer only - { - const uint32_t dist = distance(m_write, m_read)-1; - const uint32_t maxSize = uint32_sels(dist, m_size-1, dist); - const uint32_t sizeNoSign = uint32_and(_size, 0x7fffffff); - const uint32_t test = uint32_sub(sizeNoSign, maxSize); - const uint32_t size = uint32_sels(test, _size, maxSize); - const uint32_t advance = uint32_add(m_write, size); - const uint32_t write = uint32_mod(advance, m_size); - m_write = write; - return size; - } + /// + uint32_t reserve(uint32_t _size, bool _mustSucceed = false); // producer only - uint32_t commit(uint32_t _size) // producer only - { - const uint32_t maxSize = distance(m_current, m_write); - const uint32_t sizeNoSign = uint32_and(_size, 0x7fffffff); - const uint32_t test = uint32_sub(sizeNoSign, maxSize); - const uint32_t size = uint32_sels(test, _size, maxSize); - const uint32_t advance = uint32_add(m_current, size); - const uint32_t current = uint32_mod(advance, m_size); - m_current = current; - return size; - } + /// + uint32_t commit(uint32_t _size); // producer only - uint32_t distance(uint32_t _from, uint32_t _to) const // both - { - const uint32_t diff = uint32_sub(_to, _from); - const uint32_t le = uint32_add(m_size, diff); - const uint32_t result = uint32_sels(diff, le, diff); + /// + uint32_t distance(uint32_t _from, uint32_t _to) const; // both - return result; - } - - void reset() - { - m_current = 0; - m_write = 0; - m_read = 0; - } + /// + void reset(); const uint32_t m_size; uint32_t m_current; @@ -96,6 +51,7 @@ namespace bx uint32_t m_read; }; + /// class SpScRingBufferControl { BX_CLASS(SpScRingBufferControl @@ -104,79 +60,29 @@ namespace bx ); public: - SpScRingBufferControl(uint32_t _size) - : m_size(_size) - , m_current(0) - , m_write(0) - , m_read(0) - { - } + /// + SpScRingBufferControl(uint32_t _size); - ~SpScRingBufferControl() - { - } + /// + ~SpScRingBufferControl(); - uint32_t available() const - { - return distance(m_read, m_current); - } + /// + uint32_t available() const; - uint32_t consume(uint32_t _size) // consumer only - { - const uint32_t maxSize = distance(m_read, m_current); - const uint32_t sizeNoSign = uint32_and(_size, 0x7fffffff); - const uint32_t test = uint32_sub(sizeNoSign, maxSize); - const uint32_t size = uint32_sels(test, _size, maxSize); - const uint32_t advance = uint32_add(m_read, size); - const uint32_t read = uint32_mod(advance, m_size); - m_read = read; - return size; - } + /// + uint32_t consume(uint32_t _size); // consumer only - uint32_t reserve(uint32_t _size) // producer only - { - const uint32_t dist = distance(m_write, m_read)-1; - const uint32_t maxSize = uint32_sels(dist, m_size-1, dist); - const uint32_t sizeNoSign = uint32_and(_size, 0x7fffffff); - const uint32_t test = uint32_sub(sizeNoSign, maxSize); - const uint32_t size = uint32_sels(test, _size, maxSize); - const uint32_t advance = uint32_add(m_write, size); - const uint32_t write = uint32_mod(advance, m_size); - m_write = write; - return size; - } + /// + uint32_t reserve(uint32_t _size); // producer only - uint32_t commit(uint32_t _size) // producer only - { - const uint32_t maxSize = distance(m_current, m_write); - const uint32_t sizeNoSign = uint32_and(_size, 0x7fffffff); - const uint32_t test = uint32_sub(sizeNoSign, maxSize); - const uint32_t size = uint32_sels(test, _size, maxSize); - const uint32_t advance = uint32_add(m_current, size); - const uint32_t current = uint32_mod(advance, m_size); + /// + uint32_t commit(uint32_t _size); // producer only - // must commit all memory writes before moving m_current pointer - // once m_current pointer moves data is used by consumer thread - memoryBarrier(); - m_current = current; - return size; - } + /// + uint32_t distance(uint32_t _from, uint32_t _to) const; // both - uint32_t distance(uint32_t _from, uint32_t _to) const // both - { - const uint32_t diff = uint32_sub(_to, _from); - const uint32_t le = uint32_add(m_size, diff); - const uint32_t result = uint32_sels(diff, le, diff); - - return result; - } - - void reset() - { - m_current = 0; - m_write = 0; - m_read = 0; - } + /// + void reset(); const uint32_t m_size; uint32_t m_current; @@ -184,7 +90,8 @@ namespace bx uint32_t m_read; }; - template + /// + template class ReadRingBufferT { BX_CLASS(ReadRingBufferT @@ -194,65 +101,40 @@ namespace bx ); public: - ReadRingBufferT(Control& _control, const char* _buffer, uint32_t _size) - : m_control(_control) - , m_read(_control.m_read) - , m_end(m_read+_size) - , m_size(_size) - , m_buffer(_buffer) - { - BX_CHECK(_control.available() >= _size, "%d >= %d", _control.available(), _size); - } + /// + ReadRingBufferT(ControlT& _control, const char* _buffer, uint32_t _size); - ~ReadRingBufferT() - { - } + /// + ~ReadRingBufferT(); - void end() - { - m_control.consume(m_size); - } + /// + void end(); - void read(char* _data, uint32_t _len) - { - const uint32_t eof = (m_read + _len) % m_control.m_size; - uint32_t wrap = 0; - const char* from = &m_buffer[m_read]; + /// + void read(char* _data, uint32_t _len); - if (eof < m_read) - { - wrap = m_control.m_size - m_read; - memcpy(_data, from, wrap); - _data += wrap; - from = (const char*)&m_buffer[0]; - } - - memcpy(_data, from, _len-wrap); - - m_read = eof; - } - - void skip(uint32_t _len) - { - m_read += _len; - m_read %= m_control.m_size; - } + /// + void skip(uint32_t _len); private: template friend class WriteRingBufferT; - Control& m_control; + ControlT& m_control; uint32_t m_read; uint32_t m_end; const uint32_t m_size; const char* m_buffer; }; + /// typedef ReadRingBufferT ReadRingBuffer; + + /// typedef ReadRingBufferT SpScReadRingBuffer; - template + /// + template class WriteRingBufferT { BX_CLASS(WriteRingBufferT @@ -262,81 +144,40 @@ namespace bx ); public: - WriteRingBufferT(Control& _control, char* _buffer, uint32_t _size) - : m_control(_control) - , m_size(_size) - , m_buffer(_buffer) - { - uint32_t size = m_control.reserve(_size); - BX_UNUSED(size); - BX_CHECK(size == _size, "%d == %d", size, _size); - m_write = m_control.m_current; - m_end = m_write+_size; - } + /// + WriteRingBufferT(ControlT& _control, char* _buffer, uint32_t _size); - ~WriteRingBufferT() - { - } + /// + ~WriteRingBufferT(); - void end() - { - m_control.commit(m_size); - } + /// + void end(); - void write(const char* _data, uint32_t _len) - { - const uint32_t eof = (m_write + _len) % m_control.m_size; - uint32_t wrap = 0; - char* to = &m_buffer[m_write]; + /// + void write(const char* _data, uint32_t _len); - if (eof < m_write) - { - wrap = m_control.m_size - m_write; - memcpy(to, _data, wrap); - _data += wrap; - to = (char*)&m_buffer[0]; - } + /// + void write(ReadRingBufferT& _read, uint32_t _len); - memcpy(to, _data, _len-wrap); - - m_write = eof; - } - - void write(ReadRingBufferT& _read, uint32_t _len) - { - const uint32_t eof = (_read.m_read + _len) % _read.m_control.m_size; - uint32_t wrap = 0; - const char* from = &_read.m_buffer[_read.m_read]; - - if (eof < _read.m_read) - { - wrap = _read.m_control.m_size - _read.m_read; - write(from, wrap); - from = (const char*)&_read.m_buffer[0]; - } - - write(from, _len-wrap); - - _read.m_read = eof; - } - - void skip(uint32_t _len) - { - m_write += _len; - m_write %= m_control.m_size; - } + /// + void skip(uint32_t _len); private: - Control& m_control; + ControlT& m_control; uint32_t m_write; uint32_t m_end; const uint32_t m_size; char* m_buffer; }; + /// typedef WriteRingBufferT WriteRingBuffer; + + /// typedef WriteRingBufferT SpScWriteRingBuffer; } // namespace bx +#include "inline/ringbuffer.inl" + #endif // BX_RINGBUFFER_H_HEADER_GUARD diff --git a/3rdparty/bx/include/bx/rng.h b/3rdparty/bx/include/bx/rng.h index 0a1976d..56d7674 100644 --- a/3rdparty/bx/include/bx/rng.h +++ b/3rdparty/bx/include/bx/rng.h @@ -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 */ @@ -8,175 +8,94 @@ #include "bx.h" #include "fpumath.h" +#include "uint32_t.h" namespace bx { - // George Marsaglia's MWC + /// George Marsaglia's MWC class RngMwc { public: - RngMwc(uint32_t _z = 12345, uint32_t _w = 65435) - : m_z(_z) - , m_w(_w) - { - } + /// + RngMwc(uint32_t _z = 12345, uint32_t _w = 65435); - void reset(uint32_t _z = 12345, uint32_t _w = 65435) - { - m_z = _z; - m_w = _w; - } + /// + void reset(uint32_t _z = 12345, uint32_t _w = 65435); - uint32_t gen() - { - m_z = 36969*(m_z&65535)+(m_z>>16); - m_w = 18000*(m_w&65535)+(m_w>>16); - return (m_z<<16)+m_w; - } + /// + uint32_t gen(); private: uint32_t m_z; uint32_t m_w; }; - // George Marsaglia's FIB + /// George Marsaglia's FIB class RngFib { public: - RngFib() - : m_a(9983651) - , m_b(95746118) - { - } + /// + RngFib(uint32_t _a = 9983651, uint32_t _b = 95746118); - void reset() - { - m_a = 9983651; - m_b = 95746118; - } + /// + void reset(uint32_t _a = 9983651, uint32_t _b = 95746118); - uint32_t gen() - { - m_b = m_a+m_b; - m_a = m_b-m_a; - return m_a; - } + /// + uint32_t gen(); private: uint32_t m_a; uint32_t m_b; }; - // George Marsaglia's SHR3 + /// George Marsaglia's SHR3 class RngShr3 { public: - RngShr3(uint32_t _jsr = 34221) - : m_jsr(_jsr) - { - } + /// + RngShr3(uint32_t _jsr = 34221); - void reset(uint32_t _jsr = 34221) - { - m_jsr = _jsr; - } + /// + void reset(uint32_t _jsr = 34221); - uint32_t gen() - { - m_jsr ^= m_jsr<<17; - m_jsr ^= m_jsr>>13; - m_jsr ^= m_jsr<<5; - return m_jsr; - } + /// + uint32_t gen(); private: uint32_t m_jsr; }; /// Returns random number between 0.0f and 1.0f. - template - inline float frnd(Ty* _rng) - { - uint32_t rnd = _rng->gen() & UINT16_MAX; - return float(rnd) * 1.0f/float(UINT16_MAX); - } + template + float frnd(Rng* _rng); /// Returns random number between -1.0f and 1.0f. - template - inline float frndh(Ty* _rng) - { - return 2.0f * bx::frnd(_rng) - 1.0f; - } + template + float frndh(Rng* _rng); + + /// Generate random point on unit circle. + template + void randUnitCircle(float _result[3], Rng* _rng); /// Generate random point on unit sphere. - template - static inline void randUnitSphere(float _result[3], Ty* _rng) - { - float rand0 = frnd(_rng) * 2.0f - 1.0f; - float rand1 = frnd(_rng) * pi * 2.0f; - - float sqrtf1 = sqrtf(1.0f - rand0*rand0); - _result[0] = sqrtf1 * cosf(rand1); - _result[1] = sqrtf1 * sinf(rand1); - _result[2] = rand0; - } + template + void randUnitSphere(float _result[3], Rng* _rng); /// Generate random point on unit hemisphere. template - static inline void randUnitHemisphere(float _result[3], Ty* _rng, const float _normal[3]) - { - float dir[3]; - randUnitSphere(dir, _rng); - - float DdotN = dir[0]*_normal[0] - + dir[1]*_normal[1] - + dir[2]*_normal[2] - ; - - if (0.0f > DdotN) - { - dir[0] = -dir[0]; - dir[1] = -dir[1]; - dir[2] = -dir[2]; - } - - _result[0] = dir[0]; - _result[1] = dir[1]; - _result[2] = dir[2]; - } + void randUnitHemisphere(float _result[3], Ty* _rng, const float _normal[3]); /// Sampling with Hammersley and Halton Points /// http://www.cse.cuhk.edu.hk/~ttwong/papers/udpoint/udpoints.html /// - static inline void generateSphereHammersley(void* _data, uint32_t _stride, uint32_t _num, float _scale = 1.0f) - { - uint8_t* data = (uint8_t*)_data; + void generateSphereHammersley(void* _data, uint32_t _stride, uint32_t _num, float _scale = 1.0f); - for (uint32_t ii = 0; ii < _num; ii++) - { - float tt = 0.0f; - float pp = 0.5; - for (uint32_t jj = ii; jj; jj >>= 1) - { - tt += (jj & 1) ? pp : 0.0f; - pp *= 0.5f; - } - - tt = 2.0f * tt - 1.0f; - - const float phi = (ii + 0.5f) / _num; - const float phirad = phi * 2.0f * pi; - const float st = sqrtf(1.0f-tt*tt) * _scale; - - float* xyz = (float*)data; - data += _stride; - - xyz[0] = st * cosf(phirad); - xyz[1] = st * sinf(phirad); - xyz[2] = tt * _scale; - } - } + /// Fisher-Yates shuffle. + template + void shuffle(Rng* _rng, Ty* _array, uint32_t _num); } // namespace bx +#include "inline/rng.inl" + #endif // BX_RNG_H_HEADER_GUARD diff --git a/3rdparty/bx/include/bx/semaphore.h b/3rdparty/bx/include/bx/semaphore.h new file mode 100644 index 0000000..867fa9e --- /dev/null +++ b/3rdparty/bx/include/bx/semaphore.h @@ -0,0 +1,40 @@ +/* + * Copyright 2010-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bx#license-bsd-2-clause + */ + +#ifndef BX_SEM_H_HEADER_GUARD +#define BX_SEM_H_HEADER_GUARD + +#include "bx.h" + +namespace bx +{ + /// + class Semaphore + { + BX_CLASS(Semaphore + , NO_COPY + , NO_ASSIGNMENT + ); + + public: + /// + Semaphore(); + + /// + ~Semaphore(); + + /// + void post(uint32_t _count = 1); + + /// + bool wait(int32_t _msecs = -1); + + private: + BX_ALIGN_DECL(16, uint8_t) m_internal[128]; + }; + +} // namespace bx + +#endif // BX_SEM_H_HEADER_GUARD diff --git a/3rdparty/bx/include/bx/simd_t.h b/3rdparty/bx/include/bx/simd_t.h index 5e1fa55..d3befc4 100644 --- a/3rdparty/bx/include/bx/simd_t.h +++ b/3rdparty/bx/include/bx/simd_t.h @@ -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 */ @@ -7,6 +7,7 @@ #define BX_SIMD_T_H_HEADER_GUARD #include "bx.h" +#include "fpumath.h" #define BX_SIMD_FORCE_INLINE BX_FORCE_INLINE #define BX_SIMD_INLINE inline @@ -52,7 +53,7 @@ namespace bx #define BX_SIMD128_IMPLEMENT_SWIZZLE(_x, _y, _z, _w) \ template \ BX_SIMD_FORCE_INLINE Ty simd_swiz_##_x##_y##_z##_w(Ty _a); -#include "simd128_swizzle.inl" +#include "inline/simd128_swizzle.inl" #undef BX_SIMD128_IMPLEMENT_SWIZZLE #undef ELEMw @@ -361,19 +362,19 @@ BX_SIMD128_IMPLEMENT_TEST(xyzw); } // namespace bx #if BX_SIMD_AVX -# include "simd256_avx.inl" +# include "inline/simd256_avx.inl" #endif // BX_SIMD_AVX #if BX_SIMD_LANGEXT -# include "simd128_langext.inl" +# include "inline/simd128_langext.inl" #endif // BX_SIMD_LANGEXT #if BX_SIMD_NEON -# include "simd128_neon.inl" +# include "inline/simd128_neon.inl" #endif // BX_SIMD_NEON #if BX_SIMD_SSE -# include "simd128_sse.inl" +# include "inline/simd128_sse.inl" #endif // BX_SIMD_SSE namespace bx @@ -402,8 +403,14 @@ namespace bx struct simd256_ref_t { - simd128_t simd128_0; - simd128_t simd128_1; +#if BX_COMPILER_MSVC + typedef simd128_ref_t type; +#else + typedef simd128_t type; +#endif // BX_COMPILER_MSVC + + type simd128_0; + type simd128_1; }; #if !BX_SIMD_AVX @@ -416,8 +423,8 @@ namespace bx } // namespace bx -#include "simd128_ref.inl" -#include "simd256_ref.inl" +#include "inline/simd128_ref.inl" +#include "inline/simd256_ref.inl" namespace bx { diff --git a/3rdparty/bx/include/bx/sort.h b/3rdparty/bx/include/bx/sort.h new file mode 100644 index 0000000..2f1511b --- /dev/null +++ b/3rdparty/bx/include/bx/sort.h @@ -0,0 +1,62 @@ +/* + * Copyright 2010-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bx#license-bsd-2-clause + */ + +#ifndef BX_SORT_H_HEADER_GUARD +#define BX_SORT_H_HEADER_GUARD + +#include "bx.h" + +namespace bx +{ + /// + typedef int32_t (*ComparisonFn)(const void* _lhs, const void* _rhs); + + /// + void quickSort( + void* _data + , uint32_t _num + , uint32_t _stride + , const ComparisonFn _fn + ); + + /// + void radixSort( + uint32_t* _keys + , uint32_t* _tempKeys + , uint32_t _size + ); + + /// + template + void radixSort( + uint32_t* _keys + , uint32_t* _tempKeys + , Ty* _values + , Ty* _tempValues + , uint32_t _size + ); + + /// + void radixSort( + uint64_t* _keys + , uint64_t* _tempKeys + , uint32_t _size + ); + + /// + template + void radixSort( + uint64_t* _keys + , uint64_t* _tempKeys + , Ty* _values + , Ty* _tempValues + , uint32_t _size + ); + +} // namespace bx + +#include "inline/sort.inl" + +#endif // BX_SORT_H_HEADER_GUARD diff --git a/3rdparty/bx/include/bx/spscqueue.h b/3rdparty/bx/include/bx/spscqueue.h index 0e2ceac..4d37d63 100644 --- a/3rdparty/bx/include/bx/spscqueue.h +++ b/3rdparty/bx/include/bx/spscqueue.h @@ -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 */ @@ -8,83 +8,39 @@ #include "bx.h" #include "cpu.h" -#include "mutex.h" -#include "uint32_t.h" - -#include +#include "semaphore.h" namespace bx { - // http://drdobbs.com/article/print?articleId=210604448&siteSectionName= - template - class SpScUnboundedQueueLf + /// + class SpScUnboundedQueue { - BX_CLASS(SpScUnboundedQueueLf + BX_CLASS(SpScUnboundedQueue , NO_COPY , NO_ASSIGNMENT ); public: - SpScUnboundedQueueLf() - : m_first(new Node(NULL) ) - , m_divider(m_first) - , m_last(m_first) - { - } + /// + SpScUnboundedQueue(); - ~SpScUnboundedQueueLf() - { - while (NULL != m_first) - { - Node* node = m_first; - m_first = node->m_next; - delete node; - } - } + /// + ~SpScUnboundedQueue(); - void push(Ty* _ptr) // producer only - { - m_last->m_next = new Node( (void*)_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; - } - } + /// + void push(void* _ptr); - Ty* peek() // consumer only - { - if (m_divider != m_last) - { - Ty* ptr = (Ty*)m_divider->m_next->m_ptr; - return ptr; - } + /// + void* peek(); - return NULL; - } - - Ty* pop() // consumer only - { - if (m_divider != m_last) - { - Ty* ptr = (Ty*)m_divider->m_next->m_ptr; - atomicExchangePtr( (void**)&m_divider, m_divider->m_next); - return ptr; - } - - return NULL; - } + /// + void* pop(); private: struct Node { - Node(void* _ptr) - : m_ptr(_ptr) - , m_next(NULL) - { - } + /// + Node(void* _ptr); void* m_ptr; Node* m_next; @@ -95,69 +51,38 @@ namespace bx Node* m_last; }; -#if BX_CONFIG_SUPPORTS_THREADING + /// template - class SpScUnboundedQueueMutex + class SpScUnboundedQueueT { - BX_CLASS(SpScUnboundedQueueMutex + BX_CLASS(SpScUnboundedQueueT , NO_COPY , NO_ASSIGNMENT ); public: - SpScUnboundedQueueMutex() - { - } + /// + SpScUnboundedQueueT(); - ~SpScUnboundedQueueMutex() - { - BX_CHECK(m_queue.empty(), "Queue is not empty!"); - } + /// + ~SpScUnboundedQueueT(); - void push(Ty* _item) - { - bx::LwMutexScope lock(m_mutex); - m_queue.push_back(_item); - } + /// + void push(Ty* _ptr); - Ty* peek() - { - bx::LwMutexScope lock(m_mutex); - if (!m_queue.empty() ) - { - return m_queue.front(); - } + /// + Ty* peek(); - return NULL; - } - - Ty* pop() - { - bx::LwMutexScope lock(m_mutex); - if (!m_queue.empty() ) - { - Ty* item = m_queue.front(); - m_queue.pop_front(); - return item; - } - - return NULL; - } + /// + Ty* pop(); private: - bx::LwMutex m_mutex; - std::list m_queue; + SpScUnboundedQueue m_queue; }; -#endif // BX_CONFIG_SUPPORTS_THREADING -#if BX_CONFIG_SPSCQUEUE_USE_MUTEX && BX_CONFIG_SUPPORTS_THREADING -# define SpScUnboundedQueue SpScUnboundedQueueMutex -#else -# define SpScUnboundedQueue SpScUnboundedQueueLf -#endif // BX_CONFIG_SPSCQUEUE_USE_MUTEX #if BX_CONFIG_SUPPORTS_THREADING - template + /// class SpScBlockingUnboundedQueue { BX_CLASS(SpScBlockingUnboundedQueue @@ -166,41 +91,58 @@ namespace bx ); public: - SpScBlockingUnboundedQueue() - { - } + /// + SpScBlockingUnboundedQueue(); - ~SpScBlockingUnboundedQueue() - { - } + /// + ~SpScBlockingUnboundedQueue(); - void push(Ty* _ptr) // producer only - { - m_queue.push( (void*)_ptr); - m_count.post(); - } + /// + void push(void* _ptr); // producer only - Ty* peek() // consumer only - { - return (Ty*)m_queue.peek(); - } + /// + void* peek(); // consumer only - Ty* pop(int32_t _msecs = -1) // consumer only - { - if (m_count.wait(_msecs) ) - { - return (Ty*)m_queue.pop(); - } - - return NULL; - } + /// + void* pop(int32_t _msecs = -1); // consumer only private: Semaphore m_count; - SpScUnboundedQueue m_queue; + SpScUnboundedQueue m_queue; + }; + + /// + template + class SpScBlockingUnboundedQueueT + { + BX_CLASS(SpScBlockingUnboundedQueueT + , NO_COPY + , NO_ASSIGNMENT + ); + + public: + /// + SpScBlockingUnboundedQueueT(); + + /// + ~SpScBlockingUnboundedQueueT(); + + /// + void push(Ty* _ptr); // producer only + + /// + Ty* peek(); // consumer only + + /// + Ty* pop(int32_t _msecs = -1); // consumer only + + private: + SpScBlockingUnboundedQueue m_queue; }; #endif // BX_CONFIG_SUPPORTS_THREADING } // namespace bx +#include "inline/spscqueue.inl" + #endif // BX_SPSCQUEUE_H_HEADER_GUARD diff --git a/3rdparty/bx/include/bx/string.h b/3rdparty/bx/include/bx/string.h index 5913043..440cbe1 100644 --- a/3rdparty/bx/include/bx/string.h +++ b/3rdparty/bx/include/bx/string.h @@ -1,682 +1,249 @@ /* - * 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_STRING_H_HEADER_GUARD #define BX_STRING_H_HEADER_GUARD -#include "bx.h" -#include -#include // tolower -#include // va_list -#include // vsnprintf, vsnwprintf -#include -#include // wchar_t +#include "allocator.h" -#include -#include - -#ifndef va_copy -# define va_copy(_a, _b) (_a) = (_b) -#endif // va_copy +#include // wchar_t namespace bx { - /// - inline bool toBool(const char* _str) - { - char ch = (char)::tolower(_str[0]); - return ch == 't' || ch == '1'; - } - - /// Case insensitive string compare. - inline int32_t stricmp(const char* _a, const char* _b) - { -#if BX_CRT_MSVC - return ::_stricmp(_a, _b); -#else - return ::strcasecmp(_a, _b); -#endif // BX_COMPILER_ - } - - /// - inline size_t strnlen(const char* _str, size_t _max) - { - const char* ptr; - for (ptr = _str; 0 < _max && *ptr != '\0'; ++ptr, --_max) {}; - return ptr - _str; - } - - /// Find substring in string. Limit search to _size. - inline const char* strnstr(const char* _str, const char* _find, size_t _size) - { - char first = *_find; - if ('\0' == first) - { - return _str; - } - - const char* cmp = _find + 1; - size_t len = strlen(cmp); - do - { - for (char match = *_str++; match != first && 0 < _size; match = *_str++, --_size) - { - if ('\0' == match) - { - return NULL; - } - } - - if (0 == _size) - { - return NULL; - } - - } while (0 != strncmp(_str, cmp, len) ); - - return --_str; - } - - /// Find substring in string. Case insensitive. - inline const char* stristr(const char* _str, const char* _find) - { - const char* ptr = _str; - - for (size_t len = strlen(_str), searchLen = strlen(_find) - ; len >= searchLen - ; ++ptr, --len) - { - // Find start of the string. - while (tolower(*ptr) != tolower(*_find) ) - { - ++ptr; - --len; - - // Search pattern lenght can't be longer than the string. - if (searchLen > len) - { - return NULL; - } - } - - // Set pointers. - const char* string = ptr; - const char* search = _find; - - // Start comparing. - while (tolower(*string++) == tolower(*search++) ) - { - // If end of the 'search' string is reached, all characters match. - if ('\0' == *search) - { - return ptr; - } - } - } - - return NULL; - } - - /// Find substring in string. Case insensitive. Limit search to _max. - inline const char* stristr(const char* _str, const char* _find, size_t _max) - { - const char* ptr = _str; - - size_t stringLen = strnlen(_str, _max); - const size_t findLen = strlen(_find); - - for (; stringLen >= findLen; ++ptr, --stringLen) - { - // Find start of the string. - while (tolower(*ptr) != tolower(*_find) ) - { - ++ptr; - --stringLen; - - // Search pattern lenght can't be longer than the string. - if (findLen > stringLen) - { - return NULL; - } - } - - // Set pointers. - const char* string = ptr; - const char* search = _find; - - // Start comparing. - while (tolower(*string++) == tolower(*search++) ) - { - // If end of the 'search' string is reached, all characters match. - if ('\0' == *search) - { - return ptr; - } - } - } - - return NULL; - } - - /// Find new line. Returns pointer after new line terminator. - inline const char* strnl(const char* _str) - { - for (; '\0' != *_str; _str += strnlen(_str, 1024) ) - { - const char* eol = strnstr(_str, "\r\n", 1024); - if (NULL != eol) - { - return eol + 2; - } - - eol = strnstr(_str, "\n", 1024); - if (NULL != eol) - { - return eol + 1; - } - } - - return _str; - } - - /// Find end of line. Retuns pointer to new line terminator. - inline const char* streol(const char* _str) - { - for (; '\0' != *_str; _str += strnlen(_str, 1024) ) - { - const char* eol = strnstr(_str, "\r\n", 1024); - if (NULL != eol) - { - return eol; - } - - eol = strnstr(_str, "\n", 1024); - if (NULL != eol) - { - return eol; - } - } - - return _str; - } - - /// Skip whitespace. - inline const char* strws(const char* _str) - { - for (; isspace(*_str); ++_str) {}; - return _str; - } - - /// Skip non-whitespace. - inline const char* strnws(const char* _str) - { - for (; !isspace(*_str); ++_str) {}; - return _str; - } - - /// Skip word. - inline const char* strword(const char* _str) - { - for (char ch = *_str++; isalnum(ch) || '_' == ch; ch = *_str++) {}; - return _str-1; - } - - /// Find matching block. - inline const char* strmb(const char* _str, char _open, char _close) - { - int count = 0; - for (char ch = *_str++; ch != '\0' && count >= 0; ch = *_str++) - { - if (ch == _open) - { - count++; - } - else if (ch == _close) - { - count--; - if (0 == count) - { - return _str-1; - } - } - } - - return NULL; - } - - // Normalize string to sane line endings. - inline void eolLF(char* _out, size_t _size, const char* _str) - { - if (0 < _size) - { - char* end = _out + _size - 1; - for (char ch = *_str++; ch != '\0' && _out < end; ch = *_str++) - { - if ('\r' != ch) - { - *_out++ = ch; - } - } - - *_out = '\0'; - } - } - - // Finds identifier. - inline const char* findIdentifierMatch(const char* _str, const char* _word) - { - size_t len = strlen(_word); - const char* ptr = strstr(_str, _word); - for (; NULL != ptr; ptr = strstr(ptr + len, _word) ) - { - if (ptr != _str) - { - char ch = *(ptr - 1); - if (isalnum(ch) || '_' == ch) - { - continue; - } - } - - char ch = ptr[len]; - if (isalnum(ch) || '_' == ch) - { - continue; - } - - return ptr; - } - - return ptr; - } - - // Finds any identifier from NULL terminated array of identifiers. - inline const char* findIdentifierMatch(const char* _str, const char* _words[]) - { - for (const char* word = *_words; NULL != word; ++_words, word = *_words) - { - const char* match = findIdentifierMatch(_str, word); - if (NULL != match) - { - return match; - } - } - - return NULL; - } - - /// Cross platform implementation of vsnprintf that returns number of - /// characters which would have been written to the final string if - /// enough space had been available. - inline int32_t vsnprintf(char* _str, size_t _count, const char* _format, va_list _argList) - { -#if BX_COMPILER_MSVC - va_list argListCopy; - va_copy(argListCopy, _argList); - int32_t len = ::vsnprintf_s(_str, _count, size_t(-1), _format, argListCopy); - va_end(argListCopy); - return -1 == len ? ::_vscprintf(_format, _argList) : len; -#else - return ::vsnprintf(_str, _count, _format, _argList); -#endif // BX_COMPILER_MSVC - } - - /// Cross platform implementation of vsnwprintf that returns number of - /// characters which would have been written to the final string if - /// enough space had been available. - inline int32_t vsnwprintf(wchar_t* _str, size_t _count, const wchar_t* _format, va_list _argList) - { -#if BX_COMPILER_MSVC - va_list argListCopy; - va_copy(argListCopy, _argList); - int32_t len = ::_vsnwprintf_s(_str, _count, size_t(-1), _format, argListCopy); - va_end(argListCopy); - return -1 == len ? ::_vscwprintf(_format, _argList) : len; -#elif defined(__MINGW32__) - return ::vsnwprintf(_str, _count, _format, _argList); -#else - return ::vswprintf(_str, _count, _format, _argList); -#endif // BX_COMPILER_MSVC - } - - /// - inline int32_t snprintf(char* _str, size_t _count, const char* _format, ...) // BX_PRINTF_ARGS(3, 4) - { - va_list argList; - va_start(argList, _format); - int32_t len = vsnprintf(_str, _count, _format, argList); - va_end(argList); - return len; - } - - /// - inline int32_t swnprintf(wchar_t* _out, size_t _count, const wchar_t* _format, ...) - { - va_list argList; - va_start(argList, _format); - int32_t len = vsnwprintf(_out, _count, _format, argList); - va_end(argList); - return len; - } - - /// - template - inline void stringPrintfVargs(Ty& _out, const char* _format, va_list _argList) - { - char temp[2048]; - - 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'; - _out.append(out); - } - - /// - template - inline void stringPrintf(Ty& _out, const char* _format, ...) - { - va_list argList; - va_start(argList, _format); - stringPrintfVargs(_out, _format, argList); - va_end(argList); - } - - /// Replace all instances of substring. - template - inline Ty replaceAll(const Ty& _str, const char* _from, const char* _to) - { - Ty str = _str; - size_t startPos = 0; - const size_t fromLen = strlen(_from); - const size_t toLen = strlen(_to); - while ( (startPos = str.find(_from, startPos) ) != Ty::npos) - { - str.replace(startPos, fromLen, _to); - startPos += toLen; - } - - return str; - } - - /// Extract base file name from file path. - inline const char* baseName(const char* _filePath) - { - const char* bs = strrchr(_filePath, '\\'); - const char* fs = strrchr(_filePath, '/'); - const char* slash = (bs > fs ? bs : fs); - const char* colon = strrchr(_filePath, ':'); - const char* basename = slash > colon ? slash : colon; - if (NULL != basename) - { - return basename+1; - } - - return _filePath; - } - - /// Convert size in bytes to human readable string. - inline void prettify(char* _out, size_t _count, uint64_t _size) - { - uint8_t idx = 0; - double size = double(_size); - while (_size != (_size&0x7ff) - && idx < 9) - { - _size >>= 10; - size *= 1.0/1024.0; - ++idx; - } - - snprintf(_out, _count, "%0.2f %c%c", size, "BkMGTPEZY"[idx], idx > 0 ? 'B' : '\0'); - } - - /* - * Copyright (c) 1998 Todd C. Miller - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - - /// 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. - inline size_t strlcpy(char* _dst, const char* _src, size_t _siz) - { - char* dd = _dst; - const char* ss = _src; - size_t nn = _siz; - - /* Copy as many bytes as will fit */ - if (nn != 0) - { - while (--nn != 0) - { - if ( (*dd++ = *ss++) == '\0') - { - break; - } - } - } - - /* Not enough room in dst, add NUL and traverse rest of src */ - if (nn == 0) - { - if (_siz != 0) - { - *dd = '\0'; /* NUL-terminate dst */ - } - - while (*ss++) - { - } - } - - return(ss - _src - 1); /* count does not include NUL */ - } - - /// 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. - inline size_t strlcat(char* _dst, const char* _src, size_t _siz) - { - char* dd = _dst; - const char *s = _src; - size_t nn = _siz; - size_t dlen; - - /* Find the end of dst and adjust bytes left but don't go past end */ - while (nn-- != 0 && *dd != '\0') - { - dd++; - } - - dlen = dd - _dst; - nn = _siz - dlen; - - if (nn == 0) - { - return(dlen + strlen(s)); - } - - while (*s != '\0') - { - if (nn != 1) - { - *dd++ = *s; - nn--; - } - s++; - } - *dd = '\0'; - - return(dlen + (s - _src)); /* count does not include NUL */ - } - /// Non-zero-terminated string view. class StringView { public: - StringView() - { - clear(); - } + /// + StringView(); - StringView(const StringView& _rhs) - { - set(_rhs.m_ptr, _rhs.m_len); - } + /// + StringView(const StringView& _rhs); - StringView& operator=(const StringView& _rhs) - { - set(_rhs.m_ptr, _rhs.m_len); - return *this; - } + /// + StringView& operator=(const StringView& _rhs); - StringView(const char* _ptr, uint32_t _len = UINT16_MAX) - { - set(_ptr, _len); - } + /// + StringView(const char* _ptr, int32_t _len = INT32_MAX); - void set(const char* _ptr, uint32_t _len = UINT16_MAX) - { - clear(); + /// + void set(const char* _ptr, int32_t _len = INT32_MAX); - if (NULL != _ptr) - { - uint32_t len = uint32_t(strnlen(_ptr, _len) ); - if (0 != len) - { - m_len = len; - m_ptr = _ptr; - } - } - } + /// + void clear(); - void clear() - { - m_ptr = ""; - m_len = 0; - } + /// + const char* getPtr() const; - const char* getPtr() const - { - return m_ptr; - } + /// + const char* getTerm() const; - const char* getTerm() const - { - return m_ptr + m_len; - } + /// + bool isEmpty() const; - bool isEmpty() const - { - return 0 == m_len; - } - - uint32_t getLength() const - { - return m_len; - } + /// + int32_t getLength() const; protected: - friend uint32_t hashMurmur2A(const StringView& _data); - const char* m_ptr; - uint32_t m_len; + int32_t m_len; }; - inline uint32_t hashMurmur2A(const StringView& _data) - { - return hashMurmur2A(_data.m_ptr, _data.m_len); - } - - inline uint32_t hashMurmur2A(const char* _data) - { - return hashMurmur2A(StringView(_data) ); - } - /// ASCII string template class StringT : public StringView { public: - StringT() - : StringView("", 0) - { - } + /// + StringT(); - StringT(const StringT& _rhs) - { - set(_rhs.m_ptr, _rhs.m_len); - } + /// + StringT(const StringT& _rhs); - StringT& operator=(const StringT& _rhs) - { - set(_rhs.m_ptr, _rhs.m_len); - return *this; - } + /// + StringT& operator=(const StringT& _rhs); - StringT(const char* _ptr, uint32_t _len = UINT32_MAX) - { - set(_ptr, _len); - } + /// + StringT(const char* _ptr, int32_t _len = INT32_MAX); - StringT(const StringView& _rhs) - { - set(_rhs.getPtr(), _rhs.getLength() ); - } + /// + StringT(const StringView& _rhs); - ~StringT() - { - clear(); - } + /// + ~StringT(); - void set(const char* _ptr, uint32_t _len = UINT32_MAX) - { - clear(); + /// + void set(const char* _ptr, int32_t _len = INT32_MAX); - if (0 != _len) - { - uint32_t len = uint32_t(strnlen(_ptr, _len) ); - m_len = len; - char* ptr = (char*)BX_ALLOC(*AllocatorT, len+1); + /// + void append(const char* _ptr, int32_t _len = INT32_MAX); - memcpy(ptr, _ptr, len); - ptr[len] = '\0'; - - *const_cast(&m_ptr) = ptr; - } - } - - void clear() - { - if (0 != m_len) - { - BX_FREE(*AllocatorT, const_cast(m_ptr) ); - - StringView::clear(); - } - } + /// + void clear(); }; + /// + bool isSpace(char _ch); + + /// + bool isUpper(char _ch); + + /// + bool isLower(char _ch); + + /// + bool isAlpha(char _ch); + + /// + bool isNumeric(char _ch); + + /// + bool isAlphaNum(char _ch); + + /// + bool isPrint(char _ch); + + /// + char toLower(char _ch); + + /// + void toLowerUnsafe(char* _inOutStr, int32_t _len); + + /// + void toLower(char* _inOutStr, int32_t _max = INT32_MAX); + + /// + char toUpper(char _ch); + + /// + void toUpperUnsafe(char* _inOutStr, int32_t _len); + + /// + 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); + + /// Case insensitive string compare. + int32_t strincmp(const char* _lhs, const char* _rhs, int32_t _max = INT32_MAX); + + /// + int32_t strnlen(const char* _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 strlncat(char* _dst, int32_t _dstSize, const char* _src, int32_t _num = INT32_MAX); + + /// + const char* strnchr(const char* _str, char _ch, int32_t _max = INT32_MAX); + + /// + const char* strnrchr(const char* _str, char _ch, int32_t _max = INT32_MAX); + + /// Find substring in string. Limit search to _size. + const char* strnstr(const char* _str, const char* _find, int32_t _max = INT32_MAX); + + /// Find substring in string. Case insensitive. Limit search to _max. + const char* stristr(const char* _str, const char* _find, int32_t _max = INT32_MAX); + + /// Find new line. Returns pointer after new line terminator. + const char* strnl(const char* _str); + + /// Find end of line. Retuns pointer to new line terminator. + const char* streol(const char* _str); + + /// Skip whitespace. + const char* strws(const char* _str); + + /// Skip non-whitespace. + const char* strnws(const char* _str); + + /// Skip word. + const char* strword(const char* _str); + + /// Find matching block. + const char* strmb(const char* _str, char _open, char _close); + + // Normalize string to sane line endings. + void eolLF(char* _out, int32_t _size, const char* _str); + + // Finds identifier. + const char* findIdentifierMatch(const char* _str, const char* _word); + + /// Finds any identifier from NULL terminated array of identifiers. + const char* findIdentifierMatch(const char* _str, const char* _words[]); + + /// Cross platform implementation of vsnprintf that returns number of + /// characters which would have been written to the final string if + /// enough space had been available. + int32_t vsnprintf(char* _out, int32_t _max, const char* _format, va_list _argList); + + /// Cross platform implementation of vsnwprintf that returns number of + /// characters which would have been written to the final string if + /// enough space had been available. + int32_t vsnwprintf(wchar_t* _out, int32_t _max, const wchar_t* _format, va_list _argList); + + /// + int32_t snprintf(char* _out, int32_t _max, const char* _format, ...); + + /// + int32_t swnprintf(wchar_t* _out, int32_t _max, const wchar_t* _format, ...); + + /// + template + void stringPrintfVargs(Ty& _out, const char* _format, va_list _argList); + + /// + template + void stringPrintf(Ty& _out, const char* _format, ...); + + /// Replace all instances of substring. + template + 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. + 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, double _value); + + /// + int32_t toString(char* _out, int32_t _max, int32_t _value, uint32_t _base = 10); + + /// + int32_t toString(char* _out, int32_t _max, int64_t _value, uint32_t _base = 10); + + /// + int32_t toString(char* _out, int32_t _max, uint32_t _value, uint32_t _base = 10); + + /// + int32_t toString(char* _out, int32_t _max, uint64_t _value, uint32_t _base = 10); + } // namespace bx +#include "inline/string.inl" + #endif // BX_STRING_H_HEADER_GUARD diff --git a/3rdparty/bx/include/bx/thread.h b/3rdparty/bx/include/bx/thread.h index 155e9f5..72a072e 100644 --- a/3rdparty/bx/include/bx/thread.h +++ b/3rdparty/bx/include/bx/thread.h @@ -1,33 +1,20 @@ /* - * 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_THREAD_H_HEADER_GUARD #define BX_THREAD_H_HEADER_GUARD -#if BX_PLATFORM_POSIX -# include -# if defined(__FreeBSD__) -# include -# endif -# if BX_PLATFORM_LINUX && (BX_CRT_GLIBC < 21200) -# include -# endif // BX_PLATFORM_ -#elif BX_PLATFORM_WINRT -using namespace Platform; -using namespace Windows::Foundation; -using namespace Windows::System::Threading; -#endif // BX_PLATFORM_ - -#include "sem.h" - -#if BX_CONFIG_SUPPORTS_THREADING +#include "bx.h" +#include "semaphore.h" namespace bx { + /// typedef int32_t (*ThreadFn)(void* _userData); + /// class Thread { BX_CLASS(Thread @@ -36,207 +23,32 @@ namespace bx ); public: - Thread() -#if BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360 || BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT - : m_handle(INVALID_HANDLE_VALUE) - , m_threadId(UINT32_MAX) -#elif BX_PLATFORM_POSIX - : m_handle(0) -#endif // BX_PLATFORM_ - , m_fn(NULL) - , m_userData(NULL) - , m_stackSize(0) - , m_exitCode(0 /*EXIT_SUCCESS*/) - , m_running(false) - { - } + /// + Thread(); - virtual ~Thread() - { - if (m_running) - { - shutdown(); - } - } + /// + virtual ~Thread(); - void init(ThreadFn _fn, void* _userData = NULL, uint32_t _stackSize = 0, const char* _name = NULL) - { - BX_CHECK(!m_running, "Already running!"); + /// + void init(ThreadFn _fn, void* _userData = NULL, uint32_t _stackSize = 0, const char* _name = NULL); - m_fn = _fn; - m_userData = _userData; - m_stackSize = _stackSize; - m_running = true; + /// + void shutdown(); -#if BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360 || BX_PLATFORM_XBOXONE - m_handle = ::CreateThread(NULL - , m_stackSize - , (LPTHREAD_START_ROUTINE)threadFunc - , this - , 0 - , NULL - ); -#elif BX_PLATFORM_WINRT - m_handle = CreateEventEx(nullptr, nullptr, CREATE_EVENT_MANUAL_RESET, EVENT_ALL_ACCESS); - auto workItemHandler = ref new WorkItemHandler([=](IAsyncAction^) - { - m_exitCode = threadFunc(this); - SetEvent(m_handle); - }, CallbackContext::Any); + /// + bool isRunning() const; - ThreadPool::RunAsync(workItemHandler, WorkItemPriority::Normal, WorkItemOptions::TimeSliced); -#elif BX_PLATFORM_POSIX - int result; - BX_UNUSED(result); + /// + int32_t getExitCode() const; - pthread_attr_t attr; - result = pthread_attr_init(&attr); - BX_CHECK(0 == result, "pthread_attr_init failed! %d", result); - - if (0 != m_stackSize) - { - result = pthread_attr_setstacksize(&attr, m_stackSize); - BX_CHECK(0 == result, "pthread_attr_setstacksize failed! %d", result); - } - -// sched_param sched; -// sched.sched_priority = 0; -// result = pthread_attr_setschedparam(&attr, &sched); -// BX_CHECK(0 == result, "pthread_attr_setschedparam failed! %d", result); - - result = pthread_create(&m_handle, &attr, &threadFunc, this); - BX_CHECK(0 == result, "pthread_attr_setschedparam failed! %d", result); -#else -# error "Not implemented!" -#endif // BX_PLATFORM_ - - m_sem.wait(); - - if (NULL != _name) - { - setThreadName(_name); - } - } - - void shutdown() - { - BX_CHECK(m_running, "Not running!"); -#if BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360 - WaitForSingleObject(m_handle, INFINITE); - GetExitCodeThread(m_handle, (DWORD*)&m_exitCode); - CloseHandle(m_handle); - m_handle = INVALID_HANDLE_VALUE; -#elif BX_PLATFORM_WINRT - WaitForSingleObjectEx(m_handle, INFINITE, FALSE); - CloseHandle(m_handle); - m_handle = INVALID_HANDLE_VALUE; -#elif BX_PLATFORM_POSIX - union - { - void* ptr; - int32_t i; - } cast; - pthread_join(m_handle, &cast.ptr); - m_exitCode = cast.i; - m_handle = 0; -#endif // BX_PLATFORM_ - m_running = false; - } - - bool isRunning() const - { - return m_running; - } - - int32_t getExitCode() const - { - return m_exitCode; - } - - void setThreadName(const char* _name) - { -#if BX_PLATFORM_OSX || BX_PLATFORM_IOS - pthread_setname_np(_name); -#elif (BX_CRT_GLIBC >= 21200) && ! BX_PLATFORM_HURD - pthread_setname_np(m_handle, _name); -#elif BX_PLATFORM_LINUX - prctl(PR_SET_NAME,_name, 0, 0, 0); -#elif BX_PLATFORM_BSD -# ifdef __NetBSD__ - pthread_setname_np(m_handle, "%s", (void*)_name); -# else - pthread_set_name_np(m_handle, _name); -# endif // __NetBSD__ -#elif BX_PLATFORM_WINDOWS && BX_COMPILER_MSVC -# pragma pack(push, 8) - struct ThreadName - { - DWORD type; - LPCSTR name; - DWORD id; - DWORD flags; - }; -# pragma pack(pop) - ThreadName tn; - tn.type = 0x1000; - tn.name = _name; - tn.id = m_threadId; - tn.flags = 0; - - __try - { - RaiseException(0x406d1388 - , 0 - , sizeof(tn)/4 - , reinterpret_cast(&tn) - ); - } - __except(EXCEPTION_EXECUTE_HANDLER) - { - } -#else - BX_UNUSED(_name); -#endif // BX_PLATFORM_ - } + /// + void setThreadName(const char* _name); private: - int32_t entry() - { -#if BX_PLATFORM_WINDOWS - m_threadId = ::GetCurrentThreadId(); -#endif // BX_PLATFORM_WINDOWS + friend struct ThreadInternal; + int32_t entry(); - m_sem.post(); - return m_fn(m_userData); - } - -#if BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360 || BX_PLATFORM_WINRT - static DWORD WINAPI threadFunc(LPVOID _arg) - { - Thread* thread = (Thread*)_arg; - int32_t result = thread->entry(); - return result; - } -#else - static void* threadFunc(void* _arg) - { - Thread* thread = (Thread*)_arg; - union - { - void* ptr; - int32_t i; - } cast; - cast.i = thread->entry(); - return cast.ptr; - } -#endif // BX_PLATFORM_ - -#if BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360 || BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT - HANDLE m_handle; - DWORD m_threadId; -#elif BX_PLATFORM_POSIX - pthread_t m_handle; -#endif // BX_PLATFORM_ + BX_ALIGN_DECL(16, uint8_t) m_internal[64]; ThreadFn m_fn; void* m_userData; @@ -246,71 +58,26 @@ namespace bx bool m_running; }; -#if BX_PLATFORM_WINDOWS + /// class TlsData { public: - TlsData() - { - m_id = TlsAlloc(); - BX_CHECK(TLS_OUT_OF_INDEXES != m_id, "Failed to allocated TLS index (err: 0x%08x).", GetLastError() ); - } + /// + TlsData(); - ~TlsData() - { - BOOL result = TlsFree(m_id); - BX_CHECK(0 != result, "Failed to free TLS index (err: 0x%08x).", GetLastError() ); BX_UNUSED(result); - } + /// + ~TlsData(); - void* get() const - { - return TlsGetValue(m_id); - } + /// + void* get() const; - void set(void* _ptr) - { - TlsSetValue(m_id, _ptr); - } + /// + void set(void* _ptr); private: - uint32_t m_id; + BX_ALIGN_DECL(16, uint8_t) m_internal[64]; }; -#elif !(BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT) - - class TlsData - { - public: - TlsData() - { - int result = pthread_key_create(&m_id, NULL); - BX_CHECK(0 == result, "pthread_key_create failed %d.", result); BX_UNUSED(result); - } - - ~TlsData() - { - int result = pthread_key_delete(m_id); - BX_CHECK(0 == result, "pthread_key_delete failed %d.", result); BX_UNUSED(result); - } - - void* get() const - { - return pthread_getspecific(m_id); - } - - void set(void* _ptr) - { - int result = pthread_setspecific(m_id, _ptr); - BX_CHECK(0 == result, "pthread_setspecific failed %d.", result); BX_UNUSED(result); - } - - private: - pthread_key_t m_id; - }; -#endif // BX_PLATFORM_* - } // namespace bx -#endif // BX_CONFIG_SUPPORTS_THREADING - #endif // BX_THREAD_H_HEADER_GUARD diff --git a/3rdparty/bx/include/bx/timer.h b/3rdparty/bx/include/bx/timer.h index 462d975..31a1096 100644 --- a/3rdparty/bx/include/bx/timer.h +++ b/3rdparty/bx/include/bx/timer.h @@ -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 */ @@ -8,54 +8,13 @@ #include "bx.h" -#if BX_PLATFORM_ANDROID -# include // clock, clock_gettime -#elif BX_PLATFORM_EMSCRIPTEN -# include -#elif BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT -# include -#else -# include // gettimeofday -#endif // BX_PLATFORM_ - namespace bx { - inline int64_t getHPCounter() - { -#if BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360 || BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT - LARGE_INTEGER li; - // Performance counter value may unexpectedly leap forward - // http://support.microsoft.com/kb/274323 - QueryPerformanceCounter(&li); - int64_t i64 = li.QuadPart; -#elif BX_PLATFORM_ANDROID - struct timespec now; - clock_gettime(CLOCK_MONOTONIC, &now); - int64_t i64 = now.tv_sec*INT64_C(1000000000) + now.tv_nsec; -#elif BX_PLATFORM_EMSCRIPTEN - int64_t i64 = int64_t(1000.0f * emscripten_get_now() ); -#else - struct timeval now; - gettimeofday(&now, 0); - int64_t i64 = now.tv_sec*INT64_C(1000000) + now.tv_usec; -#endif // BX_PLATFORM_ - return i64; - } + /// + int64_t getHPCounter(); - inline int64_t getHPFrequency() - { -#if BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360 || BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT - LARGE_INTEGER li; - QueryPerformanceFrequency(&li); - return li.QuadPart; -#elif BX_PLATFORM_ANDROID - return INT64_C(1000000000); -#elif BX_PLATFORM_EMSCRIPTEN - return INT64_C(1000000); -#else - return INT64_C(1000000); -#endif // BX_PLATFORM_ - } + /// + int64_t getHPFrequency(); } // namespace bx diff --git a/3rdparty/bx/include/bx/uint32_t.h b/3rdparty/bx/include/bx/uint32_t.h index 2f78ac3..622e49e 100644 --- a/3rdparty/bx/include/bx/uint32_t.h +++ b/3rdparty/bx/include/bx/uint32_t.h @@ -1,28 +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 */ -// Copyright 2006 Mike Acton -// -// 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 - #ifndef BX_UINT32_T_H_HEADER_GUARD #define BX_UINT32_T_H_HEADER_GUARD @@ -30,9 +10,6 @@ #if BX_COMPILER_MSVC # if BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT -# include // math.h is included because VS bitches: - // warning C4985: 'ceil': attributes not present on previous declaration. - // must be included before intrin.h. # include # pragma intrinsic(_BitScanForward) # pragma intrinsic(_BitScanReverse) @@ -50,756 +27,264 @@ namespace bx { - inline uint32_t uint32_li(uint32_t _a) - { - return _a; - } + /// + uint32_t uint32_li(uint32_t _a); - inline uint32_t uint32_dec(uint32_t _a) - { - return _a - 1; - } + /// + uint32_t uint32_dec(uint32_t _a); - inline uint32_t uint32_inc(uint32_t _a) - { - return _a + 1; - } + /// + uint32_t uint32_inc(uint32_t _a); - inline uint32_t uint32_not(uint32_t _a) - { - return ~_a; - } + /// + uint32_t uint32_not(uint32_t _a); - inline uint32_t uint32_neg(uint32_t _a) - { - return -(int32_t)_a; - } + /// + uint32_t uint32_neg(uint32_t _a); - inline uint32_t uint32_ext(uint32_t _a) - { - return ( (int32_t)_a)>>31; - } + /// + uint32_t uint32_ext(uint32_t _a); - inline uint32_t uint32_and(uint32_t _a, uint32_t _b) - { - return _a & _b; - } + /// + uint32_t uint32_and(uint32_t _a, uint32_t _b); - inline uint32_t uint32_andc(uint32_t _a, uint32_t _b) - { - return _a & ~_b; - } + /// + uint32_t uint32_andc(uint32_t _a, uint32_t _b); - inline uint32_t uint32_xor(uint32_t _a, uint32_t _b) - { - return _a ^ _b; - } + /// + uint32_t uint32_xor(uint32_t _a, uint32_t _b); - inline uint32_t uint32_xorl(uint32_t _a, uint32_t _b) - { - return !_a != !_b; - } + /// + uint32_t uint32_xorl(uint32_t _a, uint32_t _b); - inline uint32_t uint32_or(uint32_t _a, uint32_t _b) - { - return _a | _b; - } + /// + uint32_t uint32_or(uint32_t _a, uint32_t _b); - inline uint32_t uint32_orc(uint32_t _a, uint32_t _b) - { - return _a | ~_b; - } + /// + uint32_t uint32_orc(uint32_t _a, uint32_t _b); - inline uint32_t uint32_sll(uint32_t _a, int _sa) - { - return _a << _sa; - } + /// + uint32_t uint32_sll(uint32_t _a, int _sa); - inline uint32_t uint32_srl(uint32_t _a, int _sa) - { - return _a >> _sa; - } + /// + uint32_t uint32_srl(uint32_t _a, int _sa); - inline uint32_t uint32_sra(uint32_t _a, int _sa) - { - return ( (int32_t)_a) >> _sa; - } + /// + uint32_t uint32_sra(uint32_t _a, int _sa); - inline uint32_t uint32_rol(uint32_t _a, int _sa) - { - return ( _a << _sa) | (_a >> (32-_sa) ); - } + /// + uint32_t uint32_rol(uint32_t _a, int _sa); - inline uint32_t uint32_ror(uint32_t _a, int _sa) - { - return ( _a >> _sa) | (_a << (32-_sa) ); - } + /// + uint32_t uint32_ror(uint32_t _a, int _sa); - inline uint32_t uint32_add(uint32_t _a, uint32_t _b) - { - return _a + _b; - } + /// + uint32_t uint32_add(uint32_t _a, uint32_t _b); - inline uint32_t uint32_sub(uint32_t _a, uint32_t _b) - { - return _a - _b; - } + /// + uint32_t uint32_sub(uint32_t _a, uint32_t _b); - inline uint32_t uint32_mul(uint32_t _a, uint32_t _b) - { - return _a * _b; - } + /// + uint32_t uint32_mul(uint32_t _a, uint32_t _b); - inline uint32_t uint32_div(uint32_t _a, uint32_t _b) - { - return (_a / _b); - } + /// + uint32_t uint32_div(uint32_t _a, uint32_t _b); - inline uint32_t uint32_mod(uint32_t _a, uint32_t _b) - { - return (_a % _b); - } + /// + uint32_t uint32_mod(uint32_t _a, uint32_t _b); - inline uint32_t uint32_cmpeq(uint32_t _a, uint32_t _b) - { - return -(_a == _b); - } + /// + uint32_t uint32_cmpeq(uint32_t _a, uint32_t _b); - inline uint32_t uint32_cmpneq(uint32_t _a, uint32_t _b) - { - return -(_a != _b); - } + /// + uint32_t uint32_cmpneq(uint32_t _a, uint32_t _b); - inline uint32_t uint32_cmplt(uint32_t _a, uint32_t _b) - { - return -(_a < _b); - } + /// + uint32_t uint32_cmplt(uint32_t _a, uint32_t _b); - inline uint32_t uint32_cmple(uint32_t _a, uint32_t _b) - { - return -(_a <= _b); - } + /// + uint32_t uint32_cmple(uint32_t _a, uint32_t _b); - inline uint32_t uint32_cmpgt(uint32_t _a, uint32_t _b) - { - return -(_a > _b); - } + /// + uint32_t uint32_cmpgt(uint32_t _a, uint32_t _b); - inline uint32_t uint32_cmpge(uint32_t _a, uint32_t _b) - { - return -(_a >= _b); - } + /// + uint32_t uint32_cmpge(uint32_t _a, uint32_t _b); - inline uint32_t uint32_setnz(uint32_t _a) - { - return -!!_a; - } + /// + uint32_t uint32_setnz(uint32_t _a); - inline uint32_t uint32_satadd(uint32_t _a, uint32_t _b) - { - const uint32_t add = uint32_add(_a, _b); - const uint32_t lt = uint32_cmplt(add, _a); - const uint32_t result = uint32_or(add, lt); + /// + uint32_t uint32_satadd(uint32_t _a, uint32_t _b); - return result; - } + /// + uint32_t uint32_satsub(uint32_t _a, uint32_t _b); - inline uint32_t uint32_satsub(uint32_t _a, uint32_t _b) - { - const uint32_t sub = uint32_sub(_a, _b); - const uint32_t le = uint32_cmple(sub, _a); - const uint32_t result = uint32_and(sub, le); + /// + uint32_t uint32_satmul(uint32_t _a, uint32_t _b); - return result; - } + /// + uint32_t uint32_sels(uint32_t test, uint32_t _a, uint32_t _b); - inline uint32_t uint32_satmul(uint32_t _a, uint32_t _b) - { - const uint64_t mul = (uint64_t)_a * (uint64_t)_b; - const uint32_t hi = mul >> 32; - const uint32_t nz = uint32_setnz(hi); - const uint32_t result = uint32_or(uint32_t(mul), nz); + /// + uint32_t uint32_selb(uint32_t _mask, uint32_t _a, uint32_t _b); - return result; - } + /// + uint32_t uint32_imin(uint32_t _a, uint32_t _b); - inline uint32_t uint32_sels(uint32_t test, uint32_t _a, uint32_t _b) - { - const uint32_t mask = uint32_ext(test); - const uint32_t sel_a = uint32_and(_a, mask); - const uint32_t sel_b = uint32_andc(_b, mask); - const uint32_t result = uint32_or(sel_a, sel_b); + /// + uint32_t uint32_imax(uint32_t _a, uint32_t _b); - return (result); - } + /// + uint32_t uint32_min(uint32_t _a, uint32_t _b); - inline uint32_t uint32_selb(uint32_t _mask, uint32_t _a, uint32_t _b) - { - const uint32_t sel_a = uint32_and(_a, _mask); - const uint32_t sel_b = uint32_andc(_b, _mask); - const uint32_t result = uint32_or(sel_a, sel_b); + /// + uint32_t uint32_min(uint32_t _a, uint32_t _b, uint32_t _c); - return (result); - } + /// + uint32_t uint32_max(uint32_t _a, uint32_t _b); - inline uint32_t uint32_imin(uint32_t _a, uint32_t _b) - { - const uint32_t a_sub_b = uint32_sub(_a, _b); - const uint32_t result = uint32_sels(a_sub_b, _a, _b); + /// + uint32_t uint32_max(uint32_t _a, uint32_t _b, uint32_t _c); - return result; - } + /// + uint32_t uint32_clamp(uint32_t _a, uint32_t _min, uint32_t _max); - inline uint32_t uint32_imax(uint32_t _a, uint32_t _b) - { - const uint32_t b_sub_a = uint32_sub(_b, _a); - const uint32_t result = uint32_sels(b_sub_a, _a, _b); + /// + uint32_t uint32_iclamp(uint32_t _a, uint32_t _min, uint32_t _max); - return result; - } + /// + uint32_t uint32_incwrap(uint32_t _val, uint32_t _min, uint32_t _max); - inline uint32_t uint32_min(uint32_t _a, uint32_t _b) - { - return _a > _b ? _b : _a; - } + /// + uint32_t uint32_decwrap(uint32_t _val, uint32_t _min, uint32_t _max); - inline uint32_t uint32_min(uint32_t _a, uint32_t _b, uint32_t _c) - { - return uint32_min(_a, uint32_min(_b, _c) ); - } - - inline uint32_t uint32_max(uint32_t _a, uint32_t _b) - { - return _a > _b ? _a : _b; - } - - inline uint32_t uint32_max(uint32_t _a, uint32_t _b, uint32_t _c) - { - return uint32_max(_a, uint32_max(_b, _c) ); - } - - inline uint32_t uint32_clamp(uint32_t _a, uint32_t _min, uint32_t _max) - { - const uint32_t tmp = uint32_max(_a, _min); - const uint32_t result = uint32_min(tmp, _max); - - return result; - } - - inline uint32_t uint32_iclamp(uint32_t _a, uint32_t _min, uint32_t _max) - { - const uint32_t tmp = uint32_imax(_a, _min); - const uint32_t result = uint32_imin(tmp, _max); - - return result; - } - - inline uint32_t uint32_incwrap(uint32_t _val, uint32_t _min, uint32_t _max) - { - const uint32_t inc = uint32_inc(_val); - const uint32_t max_diff = uint32_sub(_max, _val); - const uint32_t neg_max_diff = uint32_neg(max_diff); - const uint32_t max_or = uint32_or(max_diff, neg_max_diff); - const uint32_t max_diff_nz = uint32_ext(max_or); - const uint32_t result = uint32_selb(max_diff_nz, inc, _min); - - return result; - } - - inline uint32_t uint32_decwrap(uint32_t _val, uint32_t _min, uint32_t _max) - { - const uint32_t dec = uint32_dec(_val); - const uint32_t min_diff = uint32_sub(_min, _val); - const uint32_t neg_min_diff = uint32_neg(min_diff); - const uint32_t min_or = uint32_or(min_diff, neg_min_diff); - const uint32_t min_diff_nz = uint32_ext(min_or); - const uint32_t result = uint32_selb(min_diff_nz, dec, _max); - - return result; - } - - inline uint32_t uint32_cntbits_ref(uint32_t _val) - { - const uint32_t tmp0 = uint32_srl(_val, 1); - const uint32_t tmp1 = uint32_and(tmp0, 0x55555555); - const uint32_t tmp2 = uint32_sub(_val, tmp1); - const uint32_t tmp3 = uint32_and(tmp2, 0xc30c30c3); - const uint32_t tmp4 = uint32_srl(tmp2, 2); - const uint32_t tmp5 = uint32_and(tmp4, 0xc30c30c3); - const uint32_t tmp6 = uint32_srl(tmp2, 4); - const uint32_t tmp7 = uint32_and(tmp6, 0xc30c30c3); - const uint32_t tmp8 = uint32_add(tmp3, tmp5); - const uint32_t tmp9 = uint32_add(tmp7, tmp8); - const uint32_t tmpA = uint32_srl(tmp9, 6); - const uint32_t tmpB = uint32_add(tmp9, tmpA); - const uint32_t tmpC = uint32_srl(tmpB, 12); - const uint32_t tmpD = uint32_srl(tmpB, 24); - const uint32_t tmpE = uint32_add(tmpB, tmpC); - const uint32_t tmpF = uint32_add(tmpD, tmpE); - const uint32_t result = uint32_and(tmpF, 0x3f); - - return result; - } + /// + uint32_t uint32_cntbits_ref(uint32_t _val); /// Count number of bits set. - inline uint32_t uint32_cntbits(uint32_t _val) - { -#if BX_COMPILER_GCC || BX_COMPILER_CLANG - return __builtin_popcount(_val); -#elif BX_COMPILER_MSVC && BX_PLATFORM_WINDOWS - return __popcnt(_val); -#else - return uint32_cntbits_ref(_val); -#endif // BX_COMPILER_ - } + /// + uint32_t uint32_cntbits(uint32_t _val); - inline uint32_t uint32_cntlz_ref(uint32_t _val) - { - const uint32_t tmp0 = uint32_srl(_val, 1); - const uint32_t tmp1 = uint32_or(tmp0, _val); - const uint32_t tmp2 = uint32_srl(tmp1, 2); - const uint32_t tmp3 = uint32_or(tmp2, tmp1); - const uint32_t tmp4 = uint32_srl(tmp3, 4); - const uint32_t tmp5 = uint32_or(tmp4, tmp3); - const uint32_t tmp6 = uint32_srl(tmp5, 8); - const uint32_t tmp7 = uint32_or(tmp6, tmp5); - const uint32_t tmp8 = uint32_srl(tmp7, 16); - const uint32_t tmp9 = uint32_or(tmp8, tmp7); - const uint32_t tmpA = uint32_not(tmp9); - const uint32_t result = uint32_cntbits(tmpA); - - return result; - } + /// + uint32_t uint32_cntlz_ref(uint32_t _val); /// Count number of leading zeros. - inline uint32_t uint32_cntlz(uint32_t _val) - { -#if BX_COMPILER_GCC || BX_COMPILER_CLANG - return __builtin_clz(_val); -#elif BX_COMPILER_MSVC && BX_PLATFORM_WINDOWS - unsigned long index; - _BitScanReverse(&index, _val); - return 31 - index; -#else - return uint32_cntlz_ref(_val); -#endif // BX_COMPILER_ - } + /// + uint32_t uint32_cntlz(uint32_t _val); - inline uint32_t uint32_cnttz_ref(uint32_t _val) - { - const uint32_t tmp0 = uint32_not(_val); - const uint32_t tmp1 = uint32_dec(_val); - const uint32_t tmp2 = uint32_and(tmp0, tmp1); - const uint32_t result = uint32_cntbits(tmp2); + /// + uint32_t uint32_cnttz_ref(uint32_t _val); - return result; - } - - inline uint32_t uint32_cnttz(uint32_t _val) - { -#if BX_COMPILER_GCC || BX_COMPILER_CLANG - return __builtin_ctz(_val); -#elif BX_COMPILER_MSVC && BX_PLATFORM_WINDOWS - unsigned long index; - _BitScanForward(&index, _val); - return index; -#else - return uint32_cnttz_ref(_val); -#endif // BX_COMPILER_ - } + /// + uint32_t uint32_cnttz(uint32_t _val); // shuffle: // ---- ---- ---- ---- fedc ba98 7654 3210 // to: // -f-e -d-c -b-a -9-8 -7-6 -5-4 -3-2 -1-0 - inline uint32_t uint32_part1by1(uint32_t _a) - { - const uint32_t val = uint32_and(_a, 0xffff); - - const uint32_t tmp0 = uint32_sll(val, 8); - const uint32_t tmp1 = uint32_xor(val, tmp0); - const uint32_t tmp2 = uint32_and(tmp1, 0x00ff00ff); - - const uint32_t tmp3 = uint32_sll(tmp2, 4); - const uint32_t tmp4 = uint32_xor(tmp2, tmp3); - const uint32_t tmp5 = uint32_and(tmp4, 0x0f0f0f0f); - - const uint32_t tmp6 = uint32_sll(tmp5, 2); - const uint32_t tmp7 = uint32_xor(tmp5, tmp6); - const uint32_t tmp8 = uint32_and(tmp7, 0x33333333); - - const uint32_t tmp9 = uint32_sll(tmp8, 1); - const uint32_t tmpA = uint32_xor(tmp8, tmp9); - const uint32_t result = uint32_and(tmpA, 0x55555555); - - return result; - } + uint32_t uint32_part1by1(uint32_t _a); // shuffle: // ---- ---- ---- ---- ---- --98 7654 3210 // to: // ---- 9--8 --7- -6-- 5--4 --3- -2-- 1--0 - inline uint32_t uint32_part1by2(uint32_t _a) - { - const uint32_t val = uint32_and(_a, 0x3ff); + /// + uint32_t uint32_part1by2(uint32_t _a); - const uint32_t tmp0 = uint32_sll(val, 16); - const uint32_t tmp1 = uint32_xor(val, tmp0); - const uint32_t tmp2 = uint32_and(tmp1, 0xff0000ff); + /// + uint32_t uint32_testpow2(uint32_t _a); - const uint32_t tmp3 = uint32_sll(tmp2, 8); - const uint32_t tmp4 = uint32_xor(tmp2, tmp3); - const uint32_t tmp5 = uint32_and(tmp4, 0x0300f00f); + /// + uint32_t uint32_nextpow2(uint32_t _a); - const uint32_t tmp6 = uint32_sll(tmp5, 4); - const uint32_t tmp7 = uint32_xor(tmp5, tmp6); - const uint32_t tmp8 = uint32_and(tmp7, 0x030c30c3); + /// + uint16_t halfFromFloat(float _a); - const uint32_t tmp9 = uint32_sll(tmp8, 2); - const uint32_t tmpA = uint32_xor(tmp8, tmp9); - const uint32_t result = uint32_and(tmpA, 0x09249249); + /// + float halfToFloat(uint16_t _a); - return result; - } + /// + uint16_t uint16_min(uint16_t _a, uint16_t _b); - inline uint32_t uint32_testpow2(uint32_t _a) - { - const uint32_t tmp0 = uint32_not(_a); - const uint32_t tmp1 = uint32_inc(tmp0); - const uint32_t tmp2 = uint32_and(_a, tmp1); - const uint32_t tmp3 = uint32_cmpeq(tmp2, _a); - const uint32_t tmp4 = uint32_cmpneq(_a, 0); - const uint32_t result = uint32_and(tmp3, tmp4); + /// + uint16_t uint16_max(uint16_t _a, uint16_t _b); - return result; - } + /// + int64_t int64_min(int64_t _a, int64_t _b); - inline uint32_t uint32_nextpow2(uint32_t _a) - { - const uint32_t tmp0 = uint32_dec(_a); - const uint32_t tmp1 = uint32_srl(tmp0, 1); - const uint32_t tmp2 = uint32_or(tmp0, tmp1); - const uint32_t tmp3 = uint32_srl(tmp2, 2); - const uint32_t tmp4 = uint32_or(tmp2, tmp3); - const uint32_t tmp5 = uint32_srl(tmp4, 4); - const uint32_t tmp6 = uint32_or(tmp4, tmp5); - const uint32_t tmp7 = uint32_srl(tmp6, 8); - const uint32_t tmp8 = uint32_or(tmp6, tmp7); - const uint32_t tmp9 = uint32_srl(tmp8, 16); - const uint32_t tmpA = uint32_or(tmp8, tmp9); - const uint32_t result = uint32_inc(tmpA); + /// + int64_t int64_max(int64_t _a, int64_t _b); - return result; - } + /// + int64_t int64_clamp(int64_t _a, int64_t _min, int64_t _max); - inline uint16_t halfFromFloat(float _a) - { - union { uint32_t ui; float flt; } ftou; - ftou.flt = _a; - - const uint32_t one = uint32_li(0x00000001); - const uint32_t f_s_mask = uint32_li(0x80000000); - const uint32_t f_e_mask = uint32_li(0x7f800000); - const uint32_t f_m_mask = uint32_li(0x007fffff); - const uint32_t f_m_hidden_bit = uint32_li(0x00800000); - const uint32_t f_m_round_bit = uint32_li(0x00001000); - const uint32_t f_snan_mask = uint32_li(0x7fc00000); - const uint32_t f_e_pos = uint32_li(0x00000017); - const uint32_t h_e_pos = uint32_li(0x0000000a); - const uint32_t h_e_mask = uint32_li(0x00007c00); - const uint32_t h_snan_mask = uint32_li(0x00007e00); - const uint32_t h_e_mask_value = uint32_li(0x0000001f); - const uint32_t f_h_s_pos_offset = uint32_li(0x00000010); - const uint32_t f_h_bias_offset = uint32_li(0x00000070); - const uint32_t f_h_m_pos_offset = uint32_li(0x0000000d); - const uint32_t h_nan_min = uint32_li(0x00007c01); - const uint32_t f_h_e_biased_flag = uint32_li(0x0000008f); - const uint32_t f_s = uint32_and(ftou.ui, f_s_mask); - const uint32_t f_e = uint32_and(ftou.ui, f_e_mask); - const uint16_t h_s = (uint16_t)uint32_srl(f_s, f_h_s_pos_offset); - const uint32_t f_m = uint32_and(ftou.ui, f_m_mask); - const uint16_t f_e_amount = (uint16_t)uint32_srl(f_e, f_e_pos); - const uint32_t f_e_half_bias = uint32_sub(f_e_amount, f_h_bias_offset); - const uint32_t f_snan = uint32_and(ftou.ui, f_snan_mask); - const uint32_t f_m_round_mask = uint32_and(f_m, f_m_round_bit); - const uint32_t f_m_round_offset = uint32_sll(f_m_round_mask, one); - const uint32_t f_m_rounded = uint32_add(f_m, f_m_round_offset); - const uint32_t f_m_denorm_sa = uint32_sub(one, f_e_half_bias); - const uint32_t f_m_with_hidden = uint32_or(f_m_rounded, f_m_hidden_bit); - const uint32_t f_m_denorm = uint32_srl(f_m_with_hidden, f_m_denorm_sa); - const uint32_t h_m_denorm = uint32_srl(f_m_denorm, f_h_m_pos_offset); - const uint32_t f_m_rounded_overflow = uint32_and(f_m_rounded, f_m_hidden_bit); - const uint32_t m_nan = uint32_srl(f_m, f_h_m_pos_offset); - const uint32_t h_em_nan = uint32_or(h_e_mask, m_nan); - const uint32_t h_e_norm_overflow_offset = uint32_inc(f_e_half_bias); - const uint32_t h_e_norm_overflow = uint32_sll(h_e_norm_overflow_offset, h_e_pos); - const uint32_t h_e_norm = uint32_sll(f_e_half_bias, h_e_pos); - const uint32_t h_m_norm = uint32_srl(f_m_rounded, f_h_m_pos_offset); - const uint32_t h_em_norm = uint32_or(h_e_norm, h_m_norm); - const uint32_t is_h_ndenorm_msb = uint32_sub(f_h_bias_offset, f_e_amount); - const uint32_t is_f_e_flagged_msb = uint32_sub(f_h_e_biased_flag, f_e_half_bias); - const uint32_t is_h_denorm_msb = uint32_not(is_h_ndenorm_msb); - const uint32_t is_f_m_eqz_msb = uint32_dec(f_m); - const uint32_t is_h_nan_eqz_msb = uint32_dec(m_nan); - const uint32_t is_f_inf_msb = uint32_and(is_f_e_flagged_msb, is_f_m_eqz_msb); - const uint32_t is_f_nan_underflow_msb = uint32_and(is_f_e_flagged_msb, is_h_nan_eqz_msb); - const uint32_t is_e_overflow_msb = uint32_sub(h_e_mask_value, f_e_half_bias); - const uint32_t is_h_inf_msb = uint32_or(is_e_overflow_msb, is_f_inf_msb); - const uint32_t is_f_nsnan_msb = uint32_sub(f_snan, f_snan_mask); - const uint32_t is_m_norm_overflow_msb = uint32_neg(f_m_rounded_overflow); - const uint32_t is_f_snan_msb = uint32_not(is_f_nsnan_msb); - const uint32_t h_em_overflow_result = uint32_sels(is_m_norm_overflow_msb, h_e_norm_overflow, h_em_norm); - const uint32_t h_em_nan_result = uint32_sels(is_f_e_flagged_msb, h_em_nan, h_em_overflow_result); - const uint32_t h_em_nan_underflow_result = uint32_sels(is_f_nan_underflow_msb, h_nan_min, h_em_nan_result); - const uint32_t h_em_inf_result = uint32_sels(is_h_inf_msb, h_e_mask, h_em_nan_underflow_result); - const uint32_t h_em_denorm_result = uint32_sels(is_h_denorm_msb, h_m_denorm, h_em_inf_result); - const uint32_t h_em_snan_result = uint32_sels(is_f_snan_msb, h_snan_mask, h_em_denorm_result); - const uint32_t h_result = uint32_or(h_s, h_em_snan_result); - - return (uint16_t)(h_result); - } - - inline float halfToFloat(uint16_t _a) - { - const uint32_t h_e_mask = uint32_li(0x00007c00); - const uint32_t h_m_mask = uint32_li(0x000003ff); - const uint32_t h_s_mask = uint32_li(0x00008000); - const uint32_t h_f_s_pos_offset = uint32_li(0x00000010); - const uint32_t h_f_e_pos_offset = uint32_li(0x0000000d); - const uint32_t h_f_bias_offset = uint32_li(0x0001c000); - const uint32_t f_e_mask = uint32_li(0x7f800000); - const uint32_t f_m_mask = uint32_li(0x007fffff); - const uint32_t h_f_e_denorm_bias = uint32_li(0x0000007e); - const uint32_t h_f_m_denorm_sa_bias = uint32_li(0x00000008); - const uint32_t f_e_pos = uint32_li(0x00000017); - const uint32_t h_e_mask_minus_one = uint32_li(0x00007bff); - const uint32_t h_e = uint32_and(_a, h_e_mask); - const uint32_t h_m = uint32_and(_a, h_m_mask); - const uint32_t h_s = uint32_and(_a, h_s_mask); - const uint32_t h_e_f_bias = uint32_add(h_e, h_f_bias_offset); - const uint32_t h_m_nlz = uint32_cntlz(h_m); - const uint32_t f_s = uint32_sll(h_s, h_f_s_pos_offset); - const uint32_t f_e = uint32_sll(h_e_f_bias, h_f_e_pos_offset); - const uint32_t f_m = uint32_sll(h_m, h_f_e_pos_offset); - const uint32_t f_em = uint32_or(f_e, f_m); - const uint32_t h_f_m_sa = uint32_sub(h_m_nlz, h_f_m_denorm_sa_bias); - const uint32_t f_e_denorm_unpacked = uint32_sub(h_f_e_denorm_bias, h_f_m_sa); - const uint32_t h_f_m = uint32_sll(h_m, h_f_m_sa); - const uint32_t f_m_denorm = uint32_and(h_f_m, f_m_mask); - const uint32_t f_e_denorm = uint32_sll(f_e_denorm_unpacked, f_e_pos); - const uint32_t f_em_denorm = uint32_or(f_e_denorm, f_m_denorm); - const uint32_t f_em_nan = uint32_or(f_e_mask, f_m); - const uint32_t is_e_eqz_msb = uint32_dec(h_e); - const uint32_t is_m_nez_msb = uint32_neg(h_m); - const uint32_t is_e_flagged_msb = uint32_sub(h_e_mask_minus_one, h_e); - const uint32_t is_zero_msb = uint32_andc(is_e_eqz_msb, is_m_nez_msb); - const uint32_t is_inf_msb = uint32_andc(is_e_flagged_msb, is_m_nez_msb); - const uint32_t is_denorm_msb = uint32_and(is_m_nez_msb, is_e_eqz_msb); - const uint32_t is_nan_msb = uint32_and(is_e_flagged_msb, is_m_nez_msb); - const uint32_t is_zero = uint32_ext(is_zero_msb); - const uint32_t f_zero_result = uint32_andc(f_em, is_zero); - const uint32_t f_denorm_result = uint32_sels(is_denorm_msb, f_em_denorm, f_zero_result); - const uint32_t f_inf_result = uint32_sels(is_inf_msb, f_e_mask, f_denorm_result); - const uint32_t f_nan_result = uint32_sels(is_nan_msb, f_em_nan, f_inf_result); - const uint32_t f_result = uint32_or(f_s, f_nan_result); - - union { uint32_t ui; float flt; } utof; - utof.ui = f_result; - return utof.flt; - } - - inline uint16_t uint16_min(uint16_t _a, uint16_t _b) - { - return _a > _b ? _b : _a; - } - - inline uint16_t uint16_max(uint16_t _a, uint16_t _b) - { - return _a < _b ? _b : _a; - } - - inline int64_t int64_min(int64_t _a, int64_t _b) - { - return _a < _b ? _a : _b; - } - - inline int64_t int64_max(int64_t _a, int64_t _b) - { - return _a > _b ? _a : _b; - } - - inline int64_t int64_clamp(int64_t _a, int64_t _min, int64_t _max) - { - const int64_t min = int64_min(_a, _max); - const int64_t result = int64_max(_min, min); - - return result; - } - - inline uint64_t uint64_cntbits_ref(uint64_t _val) - { - const uint32_t lo = uint32_t(_val&UINT32_MAX); - const uint32_t hi = uint32_t(_val>>32); - - const uint32_t total = bx::uint32_cntbits(lo) - + bx::uint32_cntbits(hi); - - return total; - } + /// + uint32_t uint64_cntbits_ref(uint64_t _val); /// Count number of bits set. - inline uint64_t uint64_cntbits(uint64_t _val) - { -#if BX_COMPILER_GCC || BX_COMPILER_CLANG - return __builtin_popcountll(_val); -#elif BX_COMPILER_MSVC && BX_ARCH_64BIT - return __popcnt64(_val); -#else - return uint64_cntbits_ref(_val); -#endif // BX_COMPILER_ - } + /// + uint32_t uint64_cntbits(uint64_t _val); - inline uint64_t uint64_cntlz_ref(uint64_t _val) - { - return _val & UINT64_C(0xffffffff00000000) - ? uint32_cntlz(uint32_t(_val>>32) ) - : uint32_cntlz(uint32_t(_val) ) + 32 - ; - } + /// + uint32_t uint64_cntlz_ref(uint64_t _val); /// Count number of leading zeros. - inline uint64_t uint64_cntlz(uint64_t _val) - { -#if BX_COMPILER_GCC || BX_COMPILER_CLANG - return __builtin_clzll(_val); -#elif BX_COMPILER_MSVC && BX_PLATFORM_WINDOWS && BX_ARCH_64BIT - unsigned long index; - _BitScanReverse64(&index, _val); - return 63 - index; -#else - return uint64_cntlz_ref(_val); -#endif // BX_COMPILER_ - } + /// + uint32_t uint64_cntlz(uint64_t _val); - inline uint64_t uint64_cnttz_ref(uint64_t _val) - { - return _val & UINT64_C(0xffffffff) - ? uint32_cnttz(uint32_t(_val) ) - : uint32_cnttz(uint32_t(_val>>32) ) + 32 - ; - } + /// + uint32_t uint64_cnttz_ref(uint64_t _val); - inline uint64_t uint64_cnttz(uint64_t _val) - { -#if BX_COMPILER_GCC || BX_COMPILER_CLANG - return __builtin_ctzll(_val); -#elif BX_COMPILER_MSVC && BX_PLATFORM_WINDOWS && BX_ARCH_64BIT - unsigned long index; - _BitScanForward64(&index, _val); - return index; -#else - return uint64_cnttz_ref(_val); -#endif // BX_COMPILER_ - } + /// + uint32_t uint64_cnttz(uint64_t _val); - inline uint64_t uint64_sll(uint64_t _a, int _sa) - { - return _a << _sa; - } + /// + uint64_t uint64_sll(uint64_t _a, int _sa); - inline uint64_t uint64_srl(uint64_t _a, int _sa) - { - return _a >> _sa; - } + /// + uint64_t uint64_srl(uint64_t _a, int _sa); - inline uint64_t uint64_sra(uint64_t _a, int _sa) - { - return ( (int64_t)_a) >> _sa; - } + /// + uint64_t uint64_sra(uint64_t _a, int _sa); - inline uint64_t uint64_rol(uint64_t _a, int _sa) - { - return ( _a << _sa) | (_a >> (32-_sa) ); - } + /// + uint64_t uint64_rol(uint64_t _a, int _sa); - inline uint64_t uint64_ror(uint64_t _a, int _sa) - { - return ( _a >> _sa) | (_a << (32-_sa) ); - } + /// + uint64_t uint64_ror(uint64_t _a, int _sa); - inline uint64_t uint64_add(uint64_t _a, uint64_t _b) - { - return _a + _b; - } + /// + uint64_t uint64_add(uint64_t _a, uint64_t _b); - inline uint64_t uint64_sub(uint64_t _a, uint64_t _b) - { - return _a - _b; - } + /// + uint64_t uint64_sub(uint64_t _a, uint64_t _b); - inline uint64_t uint64_mul(uint64_t _a, uint64_t _b) - { - return _a * _b; - } + /// + uint64_t uint64_mul(uint64_t _a, uint64_t _b); /// Greatest common divisor. - inline uint32_t uint32_gcd(uint32_t _a, uint32_t _b) - { - do - { - uint32_t tmp = _a % _b; - _a = _b; - _b = tmp; - } - while (_b); - - return _a; - } + /// + uint32_t uint32_gcd(uint32_t _a, uint32_t _b); /// Least common multiple. - inline uint32_t uint32_lcm(uint32_t _a, uint32_t _b) - { - return _a * (_b / uint32_gcd(_a, _b) ); - } + /// + uint32_t uint32_lcm(uint32_t _a, uint32_t _b); /// Align to arbitrary stride. - inline uint32_t strideAlign(uint32_t _offset, uint32_t _stride) - { - const uint32_t mod = uint32_mod(_offset, _stride); - const uint32_t add = uint32_sub(_stride, mod); - const uint32_t mask = uint32_cmpeq(mod, 0); - const uint32_t tmp = uint32_selb(mask, 0, add); - const uint32_t result = uint32_add(_offset, tmp); - - return result; - } + /// + uint32_t strideAlign(uint32_t _offset, uint32_t _stride); /// Align to arbitrary stride and 16-bytes. - inline uint32_t strideAlign16(uint32_t _offset, uint32_t _stride) - { - const uint32_t align = uint32_lcm(16, _stride); - const uint32_t mod = uint32_mod(_offset, align); - const uint32_t mask = uint32_cmpeq(mod, 0); - const uint32_t tmp0 = uint32_selb(mask, 0, align); - const uint32_t tmp1 = uint32_add(_offset, tmp0); - const uint32_t result = uint32_sub(tmp1, mod); - - return result; - } + /// + uint32_t strideAlign16(uint32_t _offset, uint32_t _stride); /// Align to arbitrary stride and 256-bytes. - inline uint32_t strideAlign256(uint32_t _offset, uint32_t _stride) - { - const uint32_t align = uint32_lcm(256, _stride); - const uint32_t mod = uint32_mod(_offset, align); - const uint32_t mask = uint32_cmpeq(mod, 0); - const uint32_t tmp0 = uint32_selb(mask, 0, align); - const uint32_t tmp1 = uint32_add(_offset, tmp0); - const uint32_t result = uint32_sub(tmp1, mod); - - return result; - } + /// + uint32_t strideAlign256(uint32_t _offset, uint32_t _stride); } // namespace bx +#include "inline/uint32_t.inl" + #endif // BX_UINT32_T_H_HEADER_GUARD diff --git a/3rdparty/bx/makefile b/3rdparty/bx/makefile index 6a6598f..bf8d911 100644 --- a/3rdparty/bx/makefile +++ b/3rdparty/bx/makefile @@ -1,6 +1,6 @@ # -# Copyright 2011-2015 Branimir Karadzic. All rights reserved. -# License: http://www.opensource.org/licenses/BSD-2-Clause +# Copyright 2011-2017 Branimir Karadzic. All rights reserved. +# License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause # GENIE=../bx/tools/bin/$(OS)/genie diff --git a/3rdparty/bx/scripts/bin2c.lua b/3rdparty/bx/scripts/bin2c.lua index 82b3a7a..daa7b09 100644 --- a/3rdparty/bx/scripts/bin2c.lua +++ b/3rdparty/bx/scripts/bin2c.lua @@ -1,10 +1,9 @@ -- --- 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 -- project "bin2c" - uuid "60eaa654-7d06-11e4-be8e-880965202986" kind "ConsoleApp" includedirs { @@ -16,9 +15,18 @@ project "bin2c" "../tools/bin2c/**.h", } + links { + "bx", + } + configuration { "mingw-*" } targetextension ".exe" + configuration { "linux-*" } + links { + "pthread", + } + configuration {} strip() diff --git a/3rdparty/bx/scripts/bx.lua b/3rdparty/bx/scripts/bx.lua index 8cae8b4..a84eec4 100644 --- a/3rdparty/bx/scripts/bx.lua +++ b/3rdparty/bx/scripts/bx.lua @@ -1,25 +1,48 @@ -- --- 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 -- - + project "bx" - uuid "4db0b09e-d6df-11e1-a0ec-65ccdd6a022f" kind "StaticLib" - configuration { "osx or ios" } - -- OSX ar doesn't like creating archive without object files - -- here is object file... - prebuildcommands { - "@echo \"void dummy() {}\" > /tmp/dummy.cpp", - } - files { - "/tmp/dummy.cpp", + includedirs { + path.join(BX_DIR, "include"), + } + + files { + path.join(BX_DIR, "include/**.h"), + path.join(BX_DIR, "include/**.inl"), + path.join(BX_DIR, "src/**.cpp"), + } + + configuration { "linux-*" } + buildoptions { + "-fPIC", } configuration {} - files { - "../include/**.h", - "../include/**.inl", - } + if _OPTIONS["with-amalgamated"] then + excludes { + 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/debug.cpp"), + path.join(BX_DIR, "src/dtoa.cpp"), + path.join(BX_DIR, "src/fpumath.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/sort.cpp"), + path.join(BX_DIR, "src/string.cpp"), + path.join(BX_DIR, "src/thread.cpp"), + path.join(BX_DIR, "src/timer.cpp"), + } + else + excludes { + path.join(BX_DIR, "src/amalgamated.**"), + } + end + + configuration {} diff --git a/3rdparty/bx/scripts/genie.lua b/3rdparty/bx/scripts/genie.lua index edc86a7..9919b8c 100644 --- a/3rdparty/bx/scripts/genie.lua +++ b/3rdparty/bx/scripts/genie.lua @@ -1,8 +1,18 @@ -- --- 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 -- +newoption { + trigger = "with-amalgamated", + description = "Enable amalgamated build.", +} + +newoption { + trigger = "with-crtnone", + description = "Enable build without CRT.", +} + solution "bx" configurations { "Debug", @@ -21,10 +31,6 @@ BX_DIR = path.getabsolute("..") local BX_BUILD_DIR = path.join(BX_DIR, ".build") local BX_THIRD_PARTY_DIR = path.join(BX_DIR, "3rdparty") -defines { - "BX_CONFIG_ENABLE_MSVC_LEVEL4_WARNINGS=1" -} - dofile "toolchain.lua" toolchain(BX_BUILD_DIR, BX_THIRD_PARTY_DIR) @@ -50,10 +56,14 @@ project "bx.test" files { path.join(BX_DIR, "tests/*_test.cpp"), - path.join(BX_DIR, "tests/*_test.H"), + path.join(BX_DIR, "tests/*.h"), path.join(BX_DIR, "tests/dbg.*"), } + links { + "bx", + } + configuration { "vs* or mingw*" } links { "psapi", @@ -109,6 +119,10 @@ project "bx.bench" path.join(BX_DIR, "tests/dbg.*"), } + links { + "bx", + } + configuration { "vs* or mingw*" } links { "psapi", diff --git a/3rdparty/bx/scripts/toolchain.lua b/3rdparty/bx/scripts/toolchain.lua index 34e1750..ee461ed 100644 --- a/3rdparty/bx/scripts/toolchain.lua +++ b/3rdparty/bx/scripts/toolchain.lua @@ -1,11 +1,48 @@ -- --- 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 -- local bxDir = path.getabsolute("..") local naclToolchain = "" +local function crtNone() + + defines { + "BX_CRT_NONE=1", + } + + buildoptions { + "-nostdlib", + "-nodefaultlibs", + "-nostartfiles", + "-Wa,--noexecstack", + "-ffreestanding", + } + + linkoptions { + "-nostdlib", + "-nodefaultlibs", + "-nostartfiles", + "-Wa,--noexecstack", + "-ffreestanding", + } + + configuration { "linux-*" } + + buildoptions { + "-mpreferred-stack-boundary=4", + "-mstackrealign", + } + + linkoptions { + "-mpreferred-stack-boundary=4", + "-mstackrealign", + } + + configuration {} +end + function toolchain(_buildDir, _libDir) newoption { @@ -39,6 +76,7 @@ function toolchain(_buildDir, _libDir) { "pnacl", "Native Client - PNaCl" }, { "orbis", "Orbis" }, { "qnx-arm", "QNX/Blackberry - ARM" }, + { "riscv", "RISC-V" }, { "rpi", "RaspberryPi" }, }, } @@ -51,9 +89,11 @@ function toolchain(_buildDir, _libDir) { "vs2012-clang", "Clang 3.6" }, { "vs2013-clang", "Clang 3.6" }, { "vs2015-clang", "Clang 3.9" }, + { "vs2017-clang", "Clang with MS CodeGen" }, { "vs2012-xp", "Visual Studio 2012 targeting XP" }, { "vs2013-xp", "Visual Studio 2013 targeting XP" }, { "vs2015-xp", "Visual Studio 2015 targeting XP" }, + { "vs2017-xp", "Visual Studio 2017 targeting XP" }, { "winphone8", "Windows Phone 8.0" }, { "winphone81", "Windows Phone 8.1" }, { "winstore81", "Windows Store 8.1" }, @@ -92,6 +132,12 @@ function toolchain(_buildDir, _libDir) description = "Set tvOS target version (default: 9.0).", } + newoption { + trigger = "with-windows", + value = "#", + description = "Set the Windows target platform version (default: 10.0.10240.0).", + } + newoption { trigger = "with-dynamic-runtime", description = "Dynamically link with the runtime rather than statically", @@ -118,7 +164,7 @@ function toolchain(_buildDir, _libDir) os.exit(1) end - local androidPlatform = "android-14" + local androidPlatform = "android-24" if _OPTIONS["with-android"] then androidPlatform = "android-" .. _OPTIONS["with-android"] end @@ -133,11 +179,20 @@ function toolchain(_buildDir, _libDir) tvosPlatform = _OPTIONS["with-tvos"] end + local windowsPlatform = "10.0.10240.0" + if _OPTIONS["with-windows"] then + windowsPlatform = _OPTIONS["with-windows"] + end + local compiler32bit = false if _OPTIONS["with-32bit-compiler"] then compiler32bit = true end + flags { + "ExtraWarnings", + } + if _ACTION == "gmake" or _ACTION == "ninja" then if nil == _OPTIONS["gcc"] then @@ -145,41 +200,45 @@ function toolchain(_buildDir, _libDir) os.exit(1) end - flags { - "ExtraWarnings", - } - if "android-arm" == _OPTIONS["gcc"] then - if not os.getenv("ANDROID_NDK_ARM") or not os.getenv("ANDROID_NDK_ROOT") then - print("Set ANDROID_NDK_ARM and ANDROID_NDK_ROOT envrionment variables.") + 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.") end - premake.gcc.cc = "$(ANDROID_NDK_ARM)/bin/arm-linux-androideabi-gcc" - premake.gcc.cxx = "$(ANDROID_NDK_ARM)/bin/arm-linux-androideabi-g++" - premake.gcc.ar = "$(ANDROID_NDK_ARM)/bin/arm-linux-androideabi-ar" + premake.gcc.cc = "$(ANDROID_NDK_CLANG)/bin/clang" + premake.gcc.cxx = "$(ANDROID_NDK_CLANG)/bin/clang++" + premake.gcc.ar = "$(ANDROID_NDK_ARM)/bin/arm-linux-androideabi-ar" + + premake.gcc.llvm = true location (path.join(_buildDir, "projects", _ACTION .. "-android-arm")) elseif "android-mips" == _OPTIONS["gcc"] then - if not os.getenv("ANDROID_NDK_MIPS") or not os.getenv("ANDROID_NDK_ROOT") then - print("Set ANDROID_NDK_MIPS and ANDROID_NDK_ROOT envrionment variables.") + 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.") end - premake.gcc.cc = "$(ANDROID_NDK_MIPS)/bin/mipsel-linux-android-gcc" - premake.gcc.cxx = "$(ANDROID_NDK_MIPS)/bin/mipsel-linux-android-g++" - premake.gcc.ar = "$(ANDROID_NDK_MIPS)/bin/mipsel-linux-android-ar" + premake.gcc.cc = "$(ANDROID_NDK_CLANG)/bin/clang" + premake.gcc.cxx = "$(ANDROID_NDK_CLANG)/bin/clang++" + premake.gcc.llvm = true location (path.join(_buildDir, "projects", _ACTION .. "-android-mips")) elseif "android-x86" == _OPTIONS["gcc"] then - if not os.getenv("ANDROID_NDK_X86") or not os.getenv("ANDROID_NDK_ROOT") then - print("Set ANDROID_NDK_X86 and ANDROID_NDK_ROOT envrionment variables.") + 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.") end - premake.gcc.cc = "$(ANDROID_NDK_X86)/bin/i686-linux-android-gcc" - premake.gcc.cxx = "$(ANDROID_NDK_X86)/bin/i686-linux-android-g++" - premake.gcc.ar = "$(ANDROID_NDK_X86)/bin/i686-linux-android-ar" + premake.gcc.cc = "$(ANDROID_NDK_CLANG)/bin/clang" + premake.gcc.cxx = "$(ANDROID_NDK_CLANG)/bin/clang++" + premake.gcc.llvm = true location (path.join(_buildDir, "projects", _ACTION .. "-android-x86")) elseif "asmjs" == _OPTIONS["gcc"] then @@ -387,17 +446,23 @@ function toolchain(_buildDir, _libDir) location (path.join(_buildDir, "projects", _ACTION .. "-rpi")) elseif "riscv" == _OPTIONS["gcc"] then - premake.gcc.cc = "$(RISCV_DIR)/bin/riscv64-unknown-elf-gcc" - premake.gcc.cxx = "$(RISCV_DIR)/bin/riscv64-unknown-elf-g++" - premake.gcc.ar = "$(RISCV_DIR)/bin/riscv64-unknown-elf-ar" + premake.gcc.cc = "$(FREEDOM_E_SDK)/toolchain/bin/riscv32-unknown-elf-gcc" + premake.gcc.cxx = "$(FREEDOM_E_SDK)/toolchain/bin/riscv32-unknown-elf-g++" + premake.gcc.ar = "$(FREEDOM_E_SDK)/toolchain/bin/riscv32-unknown-elf-ar" location (path.join(_buildDir, "projects", _ACTION .. "-riscv")) end - elseif _ACTION == "vs2012" or _ACTION == "vs2013" or _ACTION == "vs2015" then + elseif _ACTION == "vs2012" + or _ACTION == "vs2013" + or _ACTION == "vs2015" + or _ACTION == "vs2017" + then if (_ACTION .. "-clang") == _OPTIONS["vs"] then - if "vs2015-clang" == _OPTIONS["vs"] then - premake.vstudio.toolset = ("LLVM-vs2014") + if "vs2017-clang" == _OPTIONS["vs"] then + premake.vstudio.toolset = "v141_clang_c2" + elseif "vs2015-clang" == _OPTIONS["vs"] then + premake.vstudio.toolset = "LLVM-vs2014" else premake.vstudio.toolset = ("LLVM-" .. _ACTION) end @@ -422,6 +487,11 @@ function toolchain(_buildDir, _libDir) elseif "winstore82" == _OPTIONS["vs"] then 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")) @@ -457,6 +527,10 @@ function toolchain(_buildDir, _libDir) premake.vstudio.toolset = ("v140_xp") location (path.join(_buildDir, "projects", _ACTION .. "-xp")) + elseif "vs2015-xp" == _OPTIONS["vs"] then + premake.vstudio.toolset = ("v141_xp") + location (path.join(_buildDir, "projects", _ACTION .. "-xp")) + elseif _ACTION == "xcode4" then if "osx" == _OPTIONS["xcode"] then @@ -481,6 +555,10 @@ function toolchain(_buildDir, _libDir) flags { "EnableAVX" } end + if _OPTIONS["with-crtnone"] then + crtNone() + end + flags { "NoPCH", "NativeWChar", @@ -497,21 +575,27 @@ function toolchain(_buildDir, _libDir) "__STDC_CONSTANT_MACROS", } - configuration { "qbs" } - flags { - "ExtraWarnings", - } - configuration { "Debug" } targetsuffix "Debug" + defines { + "_DEBUG", + } configuration { "Release" } flags { "NoBufferSecurityCheck", "OptimizeSpeed", } + defines { + "NDEBUG", + } targetsuffix "Release" + configuration { "qbs" } + flags { + "ExtraWarnings", + } + configuration { "vs*", "x32" } flags { "EnableSSE2", @@ -557,6 +641,21 @@ function toolchain(_buildDir, _libDir) path.join(_libDir, "lib/win64_" .. _ACTION), } + configuration { "x32", "vs2017" } + targetdir (path.join(_buildDir, "win32_" .. _ACTION, "bin")) + objdir (path.join(_buildDir, "win32_" .. _ACTION, "obj")) + libdirs { + path.join(_libDir, "lib/win32_" .. _ACTION), + } + + configuration { "x64", "vs2017" } + defines { "_WIN64" } + targetdir (path.join(_buildDir, "win64_" .. _ACTION, "bin")) + objdir (path.join(_buildDir, "win64_" .. _ACTION, "obj")) + libdirs { + path.join(_libDir, "lib/win64_" .. _ACTION), + } + configuration { "ARM", "vs*" } targetdir (path.join(_buildDir, "arm_" .. _ACTION, "bin")) objdir (path.join(_buildDir, "arm_" .. _ACTION, "obj")) @@ -588,6 +687,9 @@ function toolchain(_buildDir, _libDir) configuration { "mingw-*" } defines { "WIN32" } includedirs { path.join(bxDir, "include/compat/mingw") } + defines { + "MINGW_HAS_SECURE_API=1", + } buildoptions { "-Wunused-value", "-fdata-sections", @@ -687,6 +789,7 @@ function toolchain(_buildDir, _libDir) } linkoptions { "-Wl,--gc-sections", + "-Wl,--as-needed", } configuration { "linux-gcc*", "x32" } @@ -765,12 +868,11 @@ function toolchain(_buildDir, _libDir) "NoImportLib", } includedirs { - "$(ANDROID_NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/4.9/include", + "$(ANDROID_NDK_ROOT)/sources/cxx-stl/llvm-libc++/include", "$(ANDROID_NDK_ROOT)/sources/android/native_app_glue", } linkoptions { "-nostdlib", - "-static-libgcc", } links { "c", @@ -778,16 +880,15 @@ function toolchain(_buildDir, _libDir) "m", "android", "log", - "gnustl_static", + "c++", "gcc", } buildoptions { "-fPIC", "-no-canonical-prefixes", "-Wa,--noexecstack", - "-fstack-protector", + "-fstack-protector-strong", "-ffunction-sections", - "-Wno-psabi", -- note: the mangling of 'va_list' has changed in GCC 4.4.0 "-Wunused-value", "-Wundef", } @@ -831,14 +932,16 @@ function toolchain(_buildDir, _libDir) objdir (path.join(_buildDir, "android-arm/obj")) libdirs { path.join(_libDir, "lib/android-arm"), - "$(ANDROID_NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a", + "$(ANDROID_NDK_ROOT)/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a", } includedirs { - "$(ANDROID_NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include", - "$(ANDROID_NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/4.9/include", + "$(ANDROID_NDK_ROOT)/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/include", + "$(ANDROID_NDK_ROOT)/sources/cxx-stl/llvm-libc++/include", } buildoptions { + "-gcc-toolchain $(ANDROID_NDK_ARM)", "--sysroot=" .. path.join("$(ANDROID_NDK_ROOT)/platforms", androidPlatform, "arch-arm"), + "-target armv7-none-linux-androideabi", "-mthumb", "-march=armv7-a", "-mfloat-abi=softfp", @@ -847,9 +950,11 @@ function toolchain(_buildDir, _libDir) "-Wundef", } linkoptions { + "-gcc-toolchain $(ANDROID_NDK_ARM)", "--sysroot=" .. path.join("$(ANDROID_NDK_ROOT)/platforms", androidPlatform, "arch-arm"), path.join("$(ANDROID_NDK_ROOT)/platforms", androidPlatform, "arch-arm/usr/lib/crtbegin_so.o"), path.join("$(ANDROID_NDK_ROOT)/platforms", androidPlatform, "arch-arm/usr/lib/crtend_so.o"), + "-target armv7-none-linux-androideabi", "-march=armv7-a", "-Wl,--fix-cortex-a8", } @@ -859,20 +964,26 @@ function toolchain(_buildDir, _libDir) objdir (path.join(_buildDir, "android-mips/obj")) libdirs { path.join(_libDir, "lib/android-mips"), - "$(ANDROID_NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/4.9/libs/mips", + "$(ANDROID_NDK_ROOT)/sources/cxx-stl/llvm-libc++/libs/mips", } includedirs { - "$(ANDROID_NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/4.9/libs/mips/include", + "$(ANDROID_NDK_ROOT)/sources/cxx-stl/llvm-libc++/libs/mips/include", } buildoptions { + "-gcc-toolchain $(ANDROID_NDK_MIPS)", "--sysroot=" .. path.join("$(ANDROID_NDK_ROOT)/platforms", androidPlatform, "arch-mips"), + "-target mipsel-none-linux-android", + "-mips32", "-Wunused-value", "-Wundef", } linkoptions { + "-gcc-toolchain $(ANDROID_NDK_MIPS)", "--sysroot=" .. path.join("$(ANDROID_NDK_ROOT)/platforms", androidPlatform, "arch-mips"), path.join("$(ANDROID_NDK_ROOT)/platforms", androidPlatform, "arch-mips/usr/lib/crtbegin_so.o"), path.join("$(ANDROID_NDK_ROOT)/platforms", androidPlatform, "arch-mips/usr/lib/crtend_so.o"), + "-target mipsel-none-linux-android", + "-mips32", } configuration { "android-x86" } @@ -880,13 +991,15 @@ function toolchain(_buildDir, _libDir) objdir (path.join(_buildDir, "android-x86/obj")) libdirs { path.join(_libDir, "lib/android-x86"), - "$(ANDROID_NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/4.9/libs/x86", + "$(ANDROID_NDK_ROOT)/sources/cxx-stl/llvm-libc++/libs/x86", } includedirs { - "$(ANDROID_NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/4.9/libs/x86/include", + "$(ANDROID_NDK_ROOT)/sources/cxx-stl/llvm-libc++/libs/x86/include", } buildoptions { + "-gcc-toolchain $(ANDROID_NDK_X86)", "--sysroot=" .. path.join("$(ANDROID_NDK_ROOT)/platforms", androidPlatform, "arch-x86"), + "-target i686-none-linux-android", "-march=i686", "-mtune=atom", "-mstackrealign", @@ -896,9 +1009,11 @@ function toolchain(_buildDir, _libDir) "-Wundef", } linkoptions { + "-gcc-toolchain $(ANDROID_NDK_X86)", "--sysroot=" .. path.join("$(ANDROID_NDK_ROOT)/platforms", androidPlatform, "arch-x86"), path.join("$(ANDROID_NDK_ROOT)/platforms", androidPlatform, "arch-x86/usr/lib/crtbegin_so.o"), path.join("$(ANDROID_NDK_ROOT)/platforms", androidPlatform, "arch-x86/usr/lib/crtend_so.o"), + "-target i686-none-linux-android", } configuration { "asmjs" } @@ -1045,6 +1160,9 @@ function toolchain(_buildDir, _libDir) objdir (path.join(_buildDir, "osx_universal/bin")) configuration { "osx" } + buildoptions_cpp { + "-std=c++11", + } buildoptions { "-Wfatal-errors", "-msse2", @@ -1057,6 +1175,9 @@ function toolchain(_buildDir, _libDir) linkoptions { "-lc++", } + buildoptions_cpp { + "-std=c++11", + } buildoptions { "-Wfatal-errors", "-Wunused-value", @@ -1228,6 +1349,7 @@ function toolchain(_buildDir, _libDir) } links { "rt", + "dl", } linkoptions { "-Wl,--gc-sections", @@ -1236,13 +1358,18 @@ function toolchain(_buildDir, _libDir) configuration { "riscv" } targetdir (path.join(_buildDir, "riscv/bin")) objdir (path.join(_buildDir, "riscv/obj")) + defines { + "__BSD_VISIBLE", + "__MISC_VISIBLE", + } includedirs { - "$(RISCV_DIR)/sysroot/usr/include", + "$(FREEDOM_E_SDK)/toolchain/riscv32-unknown-elf/include", + path.join(bxDir, "include/compat/riscv"), } buildoptions { "-Wunused-value", "-Wundef", - "--sysroot=$(RISCV_DIR)/sysroot", + "--sysroot=$(FREEDOM_E_SDK)/toolchain/riscv32-unknown-elf", } buildoptions_cpp { "-std=c++11", diff --git a/3rdparty/bx/src/amalgamated.cpp b/3rdparty/bx/src/amalgamated.cpp new file mode 100644 index 0000000..1aeb2bb --- /dev/null +++ b/3rdparty/bx/src/amalgamated.cpp @@ -0,0 +1,19 @@ +/* + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause + */ + +#include "bx.cpp" +#include "commandline.cpp" +#include "crtimpl.cpp" +#include "crtnone.cpp" +#include "debug.cpp" +#include "dtoa.cpp" +#include "fpumath.cpp" +#include "mutex.cpp" +#include "os.cpp" +#include "semaphore.cpp" +#include "sort.cpp" +#include "string.cpp" +#include "thread.cpp" +#include "timer.cpp" diff --git a/3rdparty/bx/src/bx.cpp b/3rdparty/bx/src/bx.cpp new file mode 100644 index 0000000..8a063c5 --- /dev/null +++ b/3rdparty/bx/src/bx.cpp @@ -0,0 +1,146 @@ +/* + * Copyright 2010-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bx#license-bsd-2-clause + */ + +#include +#include + +#if !BX_CRT_NONE +# include // memcpy, memmove, memset +#endif // !BX_CRT_NONE + +namespace bx +{ + void xchg(void* _a, void* _b, size_t _numBytes) + { + uint8_t* lhs = (uint8_t*)_a; + uint8_t* rhs = (uint8_t*)_b; + const uint8_t* end = rhs + _numBytes; + while (rhs != end) + { + xchg(*lhs++, *rhs++); + } + } + + void memCopyRef(void* _dst, const void* _src, size_t _numBytes) + { + uint8_t* dst = (uint8_t*)_dst; + const uint8_t* end = dst + _numBytes; + const uint8_t* src = (const uint8_t*)_src; + while (dst != end) + { + *dst++ = *src++; + } + } + + void memCopy(void* _dst, const void* _src, size_t _numBytes) + { +#if BX_CRT_NONE + memCopyRef(_dst, _src, _numBytes); +#else + ::memcpy(_dst, _src, _numBytes); +#endif // BX_CRT_NONE + } + + void memCopy(void* _dst, const void* _src, uint32_t _size, uint32_t _num, uint32_t _srcPitch, uint32_t _dstPitch) + { + const uint8_t* src = (const uint8_t*)_src; + uint8_t* dst = (uint8_t*)_dst; + + for (uint32_t ii = 0; ii < _num; ++ii) + { + memCopy(dst, src, _size); + src += _srcPitch; + dst += _dstPitch; + } + } + + /// + void gather(void* _dst, const void* _src, uint32_t _size, uint32_t _num, uint32_t _srcPitch) + { + memCopy(_dst, _src, _size, _num, _srcPitch, _size); + } + + /// + void scatter(void* _dst, const void* _src, uint32_t _size, uint32_t _num, uint32_t _dstPitch) + { + memCopy(_dst, _src, _size, _num, _size, _dstPitch); + } + + void memMoveRef(void* _dst, const void* _src, size_t _numBytes) + { + uint8_t* dst = (uint8_t*)_dst; + const uint8_t* src = (const uint8_t*)_src; + + if (_numBytes == 0 + || dst == src) + { + return; + } + + // if (src+_numBytes <= dst || end <= src) + if (dst < src) + { + memCopy(_dst, _src, _numBytes); + return; + } + + for (intptr_t ii = _numBytes-1; ii >= 0; --ii) + { + dst[ii] = src[ii]; + } + } + + void memMove(void* _dst, const void* _src, size_t _numBytes) + { +#if BX_CRT_NONE + memMoveRef(_dst, _src, _numBytes); +#else + ::memmove(_dst, _src, _numBytes); +#endif // BX_CRT_NONE + } + + void memSetRef(void* _dst, uint8_t _ch, size_t _numBytes) + { + uint8_t* dst = (uint8_t*)_dst; + const uint8_t* end = dst + _numBytes; + while (dst != end) + { + *dst++ = char(_ch); + } + } + + void memSet(void* _dst, uint8_t _ch, size_t _numBytes) + { +#if BX_CRT_NONE + memSetRef(_dst, _ch, _numBytes); +#else + ::memset(_dst, _ch, _numBytes); +#endif // BX_CRT_NONE + } + + int32_t memCmpRef(const void* _lhs, const void* _rhs, size_t _numBytes) + { + const char* lhs = (const char*)_lhs; + const char* rhs = (const char*)_rhs; + for ( + ; 0 < _numBytes && *lhs == *rhs + ; ++lhs, ++rhs, --_numBytes + ) + { + } + + return 0 == _numBytes ? 0 : *lhs - *rhs; + } + + int32_t memCmp(const void* _lhs, const void* _rhs, size_t _numBytes) + { +#if BX_CRT_NONE + return memCmpRef(_lhs, _rhs, _numBytes); +#else + return ::memcmp(_lhs, _rhs, _numBytes); +#endif // BX_CRT_NONE + } + +} // namespace bx diff --git a/3rdparty/bx/src/commandline.cpp b/3rdparty/bx/src/commandline.cpp new file mode 100644 index 0000000..6ec2aad --- /dev/null +++ b/3rdparty/bx/src/commandline.cpp @@ -0,0 +1,322 @@ +/* + * Copyright 2010-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bx#license-bsd-2-clause + */ + +#include +#include + +namespace bx +{ + // Reference: + // http://msdn.microsoft.com/en-us/library/a1y7w461.aspx + const char* tokenizeCommandLine(const char* _commandLine, char* _buffer, uint32_t& _bufferSize, int32_t& _argc, char* _argv[], int32_t _maxArgvs, char _term) + { + int32_t argc = 0; + const char* curr = _commandLine; + char* currOut = _buffer; + char term = ' '; + bool sub = false; + + enum ParserState + { + SkipWhitespace, + SetTerm, + Copy, + Escape, + End, + }; + + ParserState state = SkipWhitespace; + + while ('\0' != *curr + && _term != *curr + && argc < _maxArgvs) + { + switch (state) + { + case SkipWhitespace: + for (; isSpace(*curr); ++curr) {}; // skip whitespace + state = SetTerm; + break; + + case SetTerm: + if ('"' == *curr) + { + term = '"'; + ++curr; // skip begining quote + } + else + { + term = ' '; + } + + _argv[argc] = currOut; + ++argc; + + state = Copy; + break; + + case Copy: + if ('\\' == *curr) + { + state = Escape; + } + else if ('"' == *curr + && '"' != term) + { + sub = !sub; + } + else if (isSpace(*curr) && !sub) + { + state = End; + } + else if (term != *curr || sub) + { + *currOut = *curr; + ++currOut; + } + else + { + state = End; + } + ++curr; + break; + + case Escape: + { + const char* start = --curr; + for (; '\\' == *curr; ++curr) {}; + + if ('"' != *curr) + { + int32_t count = (int32_t)(curr-start); + + curr = start; + for (int32_t ii = 0; ii < count; ++ii) + { + *currOut = *curr; + ++currOut; + ++curr; + } + } + else + { + curr = start+1; + *currOut = *curr; + ++currOut; + ++curr; + } + } + state = Copy; + break; + + case End: + *currOut = '\0'; + ++currOut; + state = SkipWhitespace; + break; + } + } + + *currOut = '\0'; + if (0 < argc + && '\0' == _argv[argc-1][0]) + { + --argc; + } + + _bufferSize = (uint32_t)(currOut - _buffer); + _argc = argc; + + if ('\0' != *curr) + { + ++curr; + } + + return curr; + } + + CommandLine::CommandLine(int32_t _argc, char const* const* _argv) + : m_argc(_argc) + , m_argv(_argv) + { + } + + const char* CommandLine::findOption(const char* _long, const char* _default) const + { + const char* result = find(0, '\0', _long, 1); + return result == NULL ? _default : result; + } + + const char* CommandLine::findOption(const char _short, const char* _long, const char* _default) const + { + const char* result = find(0, _short, _long, 1); + return result == NULL ? _default : result; + } + + const char* CommandLine::findOption(const char* _long, int32_t _numParams) const + { + const char* result = find(0, '\0', _long, _numParams); + return result; + } + + const char* CommandLine::findOption(const char _short, const char* _long, int32_t _numParams) const + { + const char* result = find(0, _short, _long, _numParams); + return result; + } + + const char* CommandLine::findOption(int32_t _skip, const char _short, const char* _long, int32_t _numParams) const + { + const char* result = find(_skip, _short, _long, _numParams); + return result; + } + + bool CommandLine::hasArg(const char _short, const char* _long) const + { + const char* arg = findOption(_short, _long, int32_t(0) ); + return NULL != arg; + } + + bool CommandLine::hasArg(const char* _long) const + { + const char* arg = findOption('\0', _long, int32_t(0) ); + return NULL != arg; + } + + bool CommandLine::hasArg(const char*& _value, const char _short, const char* _long) const + { + const char* arg = findOption(_short, _long, 1); + _value = arg; + return NULL != arg; + } + + bool CommandLine::hasArg(int32_t& _value, const char _short, const char* _long) const + { + const char* arg = findOption(_short, _long, 1); + if (NULL != arg) + { + _value = atoi(arg); + return true; + } + + return false; + } + + bool CommandLine::hasArg(uint32_t& _value, const char _short, const char* _long) const + { + const char* arg = findOption(_short, _long, 1); + if (NULL != arg) + { + _value = atoi(arg); + return true; + } + + return false; + } + + bool CommandLine::hasArg(float& _value, const char _short, const char* _long) const + { + const char* arg = findOption(_short, _long, 1); + if (NULL != arg) + { + _value = float(atof(arg)); + return true; + } + + return false; + } + + bool CommandLine::hasArg(double& _value, const char _short, const char* _long) const + { + const char* arg = findOption(_short, _long, 1); + if (NULL != arg) + { + _value = atof(arg); + return true; + } + + return false; + } + + bool CommandLine::hasArg(bool& _value, const char _short, const char* _long) const + { + const char* arg = findOption(_short, _long, 1); + if (NULL != arg) + { + if ('0' == *arg || (0 == strincmp(arg, "false") ) ) + { + _value = false; + } + else if ('0' != *arg || (0 == strincmp(arg, "true") ) ) + { + _value = true; + } + + return true; + } + + return false; + } + + 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) + { + const char* arg = m_argv[ii]; + if ('-' == *arg) + { + ++arg; + if (_short == *arg) + { + if (1 == strnlen(arg) ) + { + if (0 == _skip) + { + if (0 == _numParams) + { + return ""; + } + else if (ii+_numParams < m_argc + && '-' != *m_argv[ii+1] ) + { + return m_argv[ii+1]; + } + + return NULL; + } + + --_skip; + ii += _numParams; + } + } + else if (NULL != _long + && '-' == *arg + && 0 == strincmp(arg+1, _long) ) + { + if (0 == _skip) + { + if (0 == _numParams) + { + return ""; + } + else if (ii+_numParams < m_argc + && '-' != *m_argv[ii+1] ) + { + return m_argv[ii+1]; + } + + return NULL; + } + + --_skip; + ii += _numParams; + } + } + } + + return NULL; + } + +} // namespace bx diff --git a/3rdparty/bx/src/crtimpl.cpp b/3rdparty/bx/src/crtimpl.cpp new file mode 100644 index 0000000..064b9f6 --- /dev/null +++ b/3rdparty/bx/src/crtimpl.cpp @@ -0,0 +1,361 @@ +/* + * Copyright 2010-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bx#license-bsd-2-clause + */ + +#include +#include + +#if BX_CONFIG_ALLOCATOR_CRT +# include +#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 new file mode 100644 index 0000000..0e88551 --- /dev/null +++ b/3rdparty/bx/src/crtnone.cpp @@ -0,0 +1,590 @@ +/* + * Copyright 2010-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bx#license-bsd-2-clause + */ + +#include +#include +#include + +#if BX_CRT_NONE + +extern "C" void* memcpy(void* _dst, const void* _src, size_t _numBytes) +{ + bx::memCopy(_dst, _src, _numBytes); + return _dst; +} + +extern "C" void* memmove(void* _dst, const void* _src, size_t _numBytes) +{ + bx::memMove(_dst, _src, _numBytes); + return _dst; +} + +extern "C" void* memset(void* _dst, int _ch, size_t _numBytes) +{ + bx::memSet(_dst, uint8_t(_ch), _numBytes); + return _dst; +} + +#if !BX_PLATFORM_NONE + +typedef int64_t off64_t; +typedef int32_t pid_t; + +extern "C" int32_t memcmp(const void* _lhs, const void* _rhs, size_t _numBytes) +{ + return bx::memCmp(_lhs, _rhs, _numBytes); +} + +extern "C" size_t strlen(const char* _str) +{ + return bx::strnlen(_str); +} + +extern "C" size_t strnlen(const char* _str, size_t _max) +{ + return bx::strnlen(_str, _max); +} + +extern "C" void* strcpy(char* _dst, const char* _src) +{ + bx::strlncpy(_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); + return _dst; +} + +extern "C" char* strcat(char* _dst, const char* _src) +{ + bx::strlncat(_dst, INT32_MAX, _src, INT32_MAX); + return _dst; +} + +extern "C" const char* strchr(const char* _str, int _ch) +{ + return bx::strnchr(_str, _ch); +} + +extern "C" int32_t strcmp(const char* _lhs, const char* _rhs) +{ + return bx::strncmp(_lhs, _rhs); +} + +extern "C" int32_t strncmp(const char* _lhs, const char* _rhs, size_t _max) +{ + return bx::strncmp(_lhs, _rhs, _max); +} + +extern "C" const char* strstr(const char* _str, const char* _find) +{ + return bx::strnstr(_str, _find); +} + +extern "C" void qsort(void* _base, size_t _num, size_t _size, bx::ComparisonFn _fn) +{ + BX_CHECK(_num <= UINT32_MAX && _size <= UINT32_MAX, ""); + return bx::quickSort(_base, _num, _size, _fn); +} + +extern "C" int isprint(int _ch) +{ + return bx::isPrint(_ch); +} + +extern "C" int toupper (int _ch) +{ + return bx::toUpper(_ch); +} + +extern "C" size_t mbstowcs(wchar_t* _dst, const char* _src, size_t _max) +{ + BX_UNUSED(_dst, _src, _max); + return 0; +} + +extern "C" char* strdup(const char* _src) +{ + BX_UNUSED(_src); + return NULL; +} + +extern "C" long int strtol(const char* _str, char** _end, int _base) +{ + BX_UNUSED(_str, _end, _base); + return -1; +} + +extern "C" int abs(int _value) +{ + return _value >= 0 ? _value : -_value; +} + +extern "C" float fabsf(float _value) +{ + return _value >= 0.0f ? _value : -_value; +} + +extern "C" double fabs(double _value) +{ + return _value >= 0.0 ? _value : -_value; +} + +extern "C" double ldexp(double _x, int _exp) +{ + BX_UNUSED(_x, _exp); + return 0.0; +} + +extern "C" float expf(float _x) +{ + BX_UNUSED(_x); + return 0.0f; +} + +extern "C" float logf(float _x) +{ + BX_UNUSED(_x); + return 0.0f; +} + +extern "C" float log10f(float _x) +{ + BX_UNUSED(_x); + return 0.0f; +} + +extern "C" float powf(float _x) +{ + BX_UNUSED(_x); + return 0.0f; +} + +extern "C" double pow(double _x) +{ + BX_UNUSED(_x); + return 0.0; +} + +extern "C" float sinf(float _x) +{ + BX_UNUSED(_x); + return 0.0f; +} + +extern "C" float cosf(float _x) +{ + BX_UNUSED(_x); + return 0.0f; +} + +extern "C" float tanf(float _x) +{ + BX_UNUSED(_x); + return 0.0f; +} + +extern "C" float atan2f(float _y, float _x) +{ + BX_UNUSED(_y, _x); + return 0.0f; +} + +extern "C" float sqrtf(float _x) +{ + BX_UNUSED(_x); + return 0.0f; +} + +extern "C" double sqrt(double _x) +{ + BX_UNUSED(_x); + return 0.0; +} + +extern "C" float ceilf(float _x) +{ + BX_UNUSED(_x); + return 0.0f; +} + +extern "C" double ceil(double _x) +{ + BX_UNUSED(_x); + return 0.0; +} + +extern "C" float floorf(float _x) +{ + BX_UNUSED(_x); + return 0.0f; +} + +extern "C" double floor(double _x) +{ + BX_UNUSED(_x); + return 0.0; +} + +extern "C" float acosf(float _x) +{ + BX_UNUSED(_x); + return 0.0f; +} + +extern "C" float fmodf(float _numer, float _denom) +{ + BX_UNUSED(_numer, _denom); + return 0.0f; +} + +extern "C" int atoi(const char* _str) +{ + BX_UNUSED(_str); + return 0; +} + +extern "C" double atof(const char* _str) +{ + BX_UNUSED(_str); + return 0.0; +} + +extern "C" struct DIR* opendir(const char* dirname) +{ + BX_UNUSED(dirname); + return NULL; +} + +extern "C" struct dirent* readdir(struct DIR* dirp) +{ + BX_UNUSED(dirp); + return NULL; +} + +extern "C" int closedir (struct DIR* dirp) +{ + BX_UNUSED(dirp); + return 0; +} + +extern "C" int vsnprintf(char* _out, size_t _max, const char* _format, va_list _argList) +{ + return bx::vsnprintf(_out, _max, _format, _argList); +} + +extern "C" int sprintf(char* _out, const char* _format, ...) +{ + va_list argList; + va_start(argList, _format); + int32_t len = bx::vsnprintf(_out, INT32_MAX, _format, argList); + va_end(argList); + return len; +} + +extern "C" int snprintf(char* _out, size_t _max, const char* _format, ...) +{ + va_list argList; + va_start(argList, _format); + int32_t len = bx::vsnprintf(_out, _max, _format, argList); + va_end(argList); + return len; +} + +extern "C" int printf(const char* _format, ...) +{ + BX_UNUSED(_format); + return -1; +} + +extern "C" int fprintf(FILE* _stream, const char* _format, ...) +{ + BX_UNUSED(_stream, _format); + return -1; +} + +extern "C" int vfprintf(FILE* _stream, const char* _format, va_list _argList) +{ + BX_UNUSED(_stream, _format, _argList); + return -1; +} + +extern "C" int sscanf(const char* _str, const char* _format, ...) +{ + BX_UNUSED(_str, _format); + return -1; +} + +extern "C" int fscanf(FILE* _stream, const char* _format, ...) +{ + BX_UNUSED(_stream, _format); + return -1; +} + +FILE * stdout; + +extern "C" FILE* fopen(const char* _filename, const char* _mode) +{ + BX_UNUSED(_filename, _mode); + return NULL; +} + +extern "C" int fclose(FILE* _stream) +{ + BX_UNUSED(_stream); + return -1; +} + +extern "C" size_t fread(void* _ptr, size_t _size, size_t _count, FILE* _stream) +{ + BX_UNUSED(_ptr, _size, _count, _stream); + return -1; +} + +extern "C" size_t fwrite(const void* _ptr, size_t _size, size_t _count, FILE* _stream) +{ + BX_UNUSED(_ptr, _size, _count, _stream); + return -1; +} + +extern "C" int fseek(FILE* _stream, long int _offset, int _origin) +{ + BX_UNUSED(_stream, _offset, _origin); + return -1; +} + +extern "C" int fseeko64(FILE* _stream, off64_t _offset, int _whence) +{ + BX_UNUSED(_stream, _offset, _whence); + return -1; +} + +extern "C" long int ftell(FILE* _stream) +{ + BX_UNUSED(_stream); + return -1; +} + +extern "C" off64_t ftello64(FILE* _stream) +{ + BX_UNUSED(_stream); + return -1; +} + +extern "C" int feof(FILE* _stream) +{ + BX_UNUSED(_stream); + return -1; +} + +extern "C" int ferror(FILE* _stream) +{ + BX_UNUSED(_stream); + return -1; +} + +extern "C" FILE* popen(const char* _command, const char* _type) +{ + BX_UNUSED(_command, _type); + return NULL; +} + +extern "C" int pclose(FILE* _stream) +{ + BX_UNUSED(_stream); + return -1; +} + +extern "C" int execvp(const char* _file, char* const _argv[]) +{ + BX_UNUSED(_file, _argv); + return -1; +} + +extern "C" long syscall(long _num, ...) +{ + BX_UNUSED(_num); + return -1; +} + +extern "C" long sysconf(int name) +{ + BX_UNUSED(name); + return -1; +} + +extern "C" pid_t fork() +{ + return -1; +} + +extern "C" int sched_yield() +{ + return -1; +} + +extern "C" int prctl(int _option, unsigned long _arg2, unsigned long _arg3, unsigned long _arg4, unsigned long _arg5) +{ + BX_UNUSED(_option, _arg2, _arg3, _arg4, _arg5); + return -1; +} + +extern "C" int chdir(const char* _path) +{ + BX_UNUSED(_path); + return -1; +} + +extern "C" char* getcwd(char* _buf, size_t _size) +{ + BX_UNUSED(_buf, _size); + return NULL; +} + +extern "C" char* getenv(const char* _name) +{ + BX_UNUSED(_name); + return NULL; +} + +extern "C" int setenv(const char* _name, const char* _value, int _overwrite) +{ + BX_UNUSED(_name, _value, _overwrite); + return -1; +} + +extern "C" int unsetenv(const char* _name) +{ + BX_UNUSED(_name); + return -1; +} + +extern "C" time_t time(time_t* _arg) +{ + BX_UNUSED(_arg); + return -1; +} + +extern "C" int gettimeofday(struct timeval* _tv, struct timezone* _tz) +{ + BX_UNUSED(_tv, _tz); + return -1; +} + +extern "C" void* realloc(void* _ptr, size_t _size) +{ + BX_UNUSED(_ptr, _size); + return NULL; +} + +extern "C" void* malloc(size_t _size) +{ + return ::realloc(NULL, _size); +} + +extern "C" void free(void* _ptr) +{ + BX_UNUSED(_ptr); +} + +#endif // BX_PLATFORM_* + +extern "C" void abort() +{ + while (true) {}; +} + +extern "C" void __assert_fail(const char* _assertion, const char* _file, uint32_t _line, const char* _function) +{ + BX_UNUSED(_assertion, _file, _line, _function); + abort(); +} + +void* __dso_handle = (void*)&__dso_handle; + +void operator delete(void*) +{ +} + +extern "C" void __cxa_pure_virtual() +{ +} + +extern "C" int __cxa_atexit(void (*_dtorFn)(void*), void* _arg, void* _dsoHandle) +{ + BX_UNUSED(_dtorFn, _arg, _dsoHandle); + return 0; +} + +extern "C" void __gxx_personality_v0() +{ +} + +extern "C" void _Unwind_Resume(void*) +{ +} + +extern "C" int __gcc_personality_v0(int _version, ...) +{ + BX_UNUSED(_version); + return 0; +} + +namespace __cxxabiv1 +{ + class __class_type_info + { + public: + virtual ~__class_type_info(); + + const char* m_name; + }; + + __class_type_info::~__class_type_info() + { + } + + class __si_class_type_info : public __class_type_info + { + public: + virtual ~__si_class_type_info(); + }; + + __si_class_type_info::~__si_class_type_info() + { + } + + class __vmi_class_type_info : public __class_type_info + { + public: + virtual ~__vmi_class_type_info(); + }; + + __vmi_class_type_info::~__vmi_class_type_info() + { + } + + __extension__ typedef int __guard __attribute__( (mode(__DI__) ) ); + + extern "C" int __cxa_guard_acquire (__guard* _g) + { + return !*(char*)(_g); + } + + extern "C" void __cxa_guard_release (__guard* _g) + { + *(char*)_g = 1; + } + + extern "C" void __cxa_guard_abort (__guard* _g) + { + BX_UNUSED(_g); + } + +} // namespace __cxxabiv1 + +#endif // BX_CRT_NONE diff --git a/3rdparty/bx/src/debug.cpp b/3rdparty/bx/src/debug.cpp new file mode 100644 index 0000000..5e52be8 --- /dev/null +++ b/3rdparty/bx/src/debug.cpp @@ -0,0 +1,145 @@ +/* + * Copyright 2010-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bx#license-bsd-2-clause + */ + +#include +#include // isPrint +#include // PRIx* + +#if BX_PLATFORM_ANDROID +# include +#elif BX_PLATFORM_WINDOWS || BX_PLATFORM_WINRT || BX_PLATFORM_XBOX360 || BX_PLATFORM_XBOXONE +extern "C" __declspec(dllimport) void __stdcall OutputDebugStringA(const char* _str); +#elif BX_PLATFORM_IOS || BX_PLATFORM_OSX +# if defined(__OBJC__) +# import +# else +# include +extern "C" void NSLog(CFStringRef _format, ...); +# endif // defined(__OBJC__) +#elif 0 // BX_PLATFORM_EMSCRIPTEN +# include +#else +# include // fputs, fflush +#endif // BX_PLATFORM_WINDOWS + +namespace bx +{ + void debugBreak() + { +#if BX_COMPILER_MSVC + __debugbreak(); +#elif BX_CPU_ARM + __builtin_trap(); +// asm("bkpt 0"); +#elif !BX_PLATFORM_NACL && 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"); +#else // cross platform implementation + int* int3 = (int*)3L; + *int3 = 3; +#endif // BX + } + + void debugOutput(const char* _out) + { +#if BX_PLATFORM_ANDROID +# ifndef BX_ANDROID_LOG_TAG +# 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 + OutputDebugStringA(_out); +#elif BX_PLATFORM_IOS || BX_PLATFORM_OSX +# if defined(__OBJC__) + NSLog(@"%s", _out); +# else + NSLog(__CFStringMakeConstantString("%s"), _out); +# endif // defined(__OBJC__) +#elif 0 // BX_PLATFORM_EMSCRIPTEN + emscripten_log(EM_LOG_CONSOLE, "%s", _out); +#elif !BX_CRT_NONE + fputs(_out, stdout); + fflush(stdout); +#else + BX_UNUSED(_out); +#endif // BX_PLATFORM_ + } + + void debugPrintfVargs(const char* _format, va_list _argList) + { + char temp[8192]; + char* out = temp; + int32_t len = vsnprintf(out, sizeof(temp), _format, _argList); + if ( (int32_t)sizeof(temp) < len) + { + out = (char*)alloca(len+1); + len = vsnprintf(out, len, _format, _argList); + } + out[len] = '\0'; + debugOutput(out); + } + + void debugPrintf(const char* _format, ...) + { + va_list argList; + va_start(argList, _format); + debugPrintfVargs(_format, argList); + va_end(argList); + } + +#define DBG_ADDRESS "%" PRIxPTR + + void debugPrintfData(const void* _data, uint32_t _size, const char* _format, ...) + { +#define HEX_DUMP_WIDTH 16 +#define HEX_DUMP_SPACE_WIDTH 48 +#define HEX_DUMP_FORMAT "%-" BX_STRINGIZE(HEX_DUMP_SPACE_WIDTH) "." BX_STRINGIZE(HEX_DUMP_SPACE_WIDTH) "s" + + va_list argList; + va_start(argList, _format); + debugPrintfVargs(_format, argList); + va_end(argList); + + debugPrintf("\ndata: " DBG_ADDRESS ", size: %d\n", _data, _size); + + if (NULL != _data) + { + const uint8_t* data = reinterpret_cast(_data); + char hex[HEX_DUMP_WIDTH*3+1]; + char ascii[HEX_DUMP_WIDTH+1]; + uint32_t hexPos = 0; + uint32_t asciiPos = 0; + for (uint32_t ii = 0; ii < _size; ++ii) + { + snprintf(&hex[hexPos], sizeof(hex)-hexPos, "%02x ", data[asciiPos]); + hexPos += 3; + + ascii[asciiPos] = isPrint(data[asciiPos]) ? data[asciiPos] : '.'; + asciiPos++; + + if (HEX_DUMP_WIDTH == asciiPos) + { + ascii[asciiPos] = '\0'; + debugPrintf("\t" DBG_ADDRESS "\t" HEX_DUMP_FORMAT "\t%s\n", data, hex, ascii); + data += asciiPos; + hexPos = 0; + asciiPos = 0; + } + } + + if (0 != asciiPos) + { + ascii[asciiPos] = '\0'; + debugPrintf("\t" DBG_ADDRESS "\t" HEX_DUMP_FORMAT "\t%s\n", data, hex, ascii); + } + } + +#undef HEX_DUMP_WIDTH +#undef HEX_DUMP_SPACE_WIDTH +#undef HEX_DUMP_FORMAT + } + +} // namespace bx diff --git a/3rdparty/bx/src/dtoa.cpp b/3rdparty/bx/src/dtoa.cpp new file mode 100644 index 0000000..98640ed --- /dev/null +++ b/3rdparty/bx/src/dtoa.cpp @@ -0,0 +1,560 @@ +/* + * Copyright 2010-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bx#license-bsd-2-clause + */ + +#include +#include +#include +#include + +#include + +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. + // + struct DiyFp + { + DiyFp() + { + } + + DiyFp(uint64_t _f, int32_t _e) + : f(_f) + , e(_e) + { + } + + DiyFp(double d) + { + union + { + double d; + uint64_t u64; + } u = { d }; + + int32_t biased_e = (u.u64 & kDpExponentMask) >> kDpSignificandSize; + uint64_t significand = (u.u64 & kDpSignificandMask); + if (biased_e != 0) + { + f = significand + kDpHiddenBit; + e = biased_e - kDpExponentBias; + } + else + { + f = significand; + e = kDpMinExponent + 1; + } + } + + DiyFp operator-(const DiyFp& rhs) const + { + BX_CHECK(e == rhs.e, ""); + BX_CHECK(f >= rhs.f, ""); + return DiyFp(f - rhs.f, e); + } + + DiyFp operator*(const DiyFp& rhs) const + { + const uint64_t M32 = 0xFFFFFFFF; + const uint64_t a = f >> 32; + const uint64_t b = f & M32; + const uint64_t c = rhs.f >> 32; + const uint64_t d = rhs.f & M32; + const uint64_t ac = a * c; + const uint64_t bc = b * c; + const uint64_t ad = a * d; + const uint64_t bd = b * d; + uint64_t tmp = (bd >> 32) + (ad & M32) + (bc & M32); + tmp += 1U << 31; /// mult_round + return DiyFp(ac + (ad >> 32) + (bc >> 32) + (tmp >> 32), e + rhs.e + 64); + } + + DiyFp Normalize() const + { + uint32_t s = uint64_cntlz(f); + return DiyFp(f << s, e - s); + } + + DiyFp NormalizeBoundary() const + { + uint32_t index = uint64_cntlz(f); + return DiyFp (f << index, e - index); + } + + 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); + mi.f <<= mi.e - pl.e; + mi.e = pl.e; + *plus = pl; + *minus = mi; + } + +#define UINT64_C2(h, l) ((static_cast(h) << 32) | static_cast(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); + + uint64_t f; + int32_t e; + }; + + // 10^-348, 10^-340, ..., 10^340 + static const uint64_t s_kCachedPowers_F[] = + { + UINT64_C2(0xfa8fd5a0, 0x081c0288), UINT64_C2(0xbaaee17f, 0xa23ebf76), + UINT64_C2(0x8b16fb20, 0x3055ac76), UINT64_C2(0xcf42894a, 0x5dce35ea), + UINT64_C2(0x9a6bb0aa, 0x55653b2d), UINT64_C2(0xe61acf03, 0x3d1a45df), + UINT64_C2(0xab70fe17, 0xc79ac6ca), UINT64_C2(0xff77b1fc, 0xbebcdc4f), + UINT64_C2(0xbe5691ef, 0x416bd60c), UINT64_C2(0x8dd01fad, 0x907ffc3c), + UINT64_C2(0xd3515c28, 0x31559a83), UINT64_C2(0x9d71ac8f, 0xada6c9b5), + UINT64_C2(0xea9c2277, 0x23ee8bcb), UINT64_C2(0xaecc4991, 0x4078536d), + UINT64_C2(0x823c1279, 0x5db6ce57), UINT64_C2(0xc2109436, 0x4dfb5637), + UINT64_C2(0x9096ea6f, 0x3848984f), UINT64_C2(0xd77485cb, 0x25823ac7), + UINT64_C2(0xa086cfcd, 0x97bf97f4), UINT64_C2(0xef340a98, 0x172aace5), + UINT64_C2(0xb23867fb, 0x2a35b28e), UINT64_C2(0x84c8d4df, 0xd2c63f3b), + UINT64_C2(0xc5dd4427, 0x1ad3cdba), UINT64_C2(0x936b9fce, 0xbb25c996), + UINT64_C2(0xdbac6c24, 0x7d62a584), UINT64_C2(0xa3ab6658, 0x0d5fdaf6), + UINT64_C2(0xf3e2f893, 0xdec3f126), UINT64_C2(0xb5b5ada8, 0xaaff80b8), + UINT64_C2(0x87625f05, 0x6c7c4a8b), UINT64_C2(0xc9bcff60, 0x34c13053), + UINT64_C2(0x964e858c, 0x91ba2655), UINT64_C2(0xdff97724, 0x70297ebd), + UINT64_C2(0xa6dfbd9f, 0xb8e5b88f), UINT64_C2(0xf8a95fcf, 0x88747d94), + UINT64_C2(0xb9447093, 0x8fa89bcf), UINT64_C2(0x8a08f0f8, 0xbf0f156b), + UINT64_C2(0xcdb02555, 0x653131b6), UINT64_C2(0x993fe2c6, 0xd07b7fac), + UINT64_C2(0xe45c10c4, 0x2a2b3b06), UINT64_C2(0xaa242499, 0x697392d3), + UINT64_C2(0xfd87b5f2, 0x8300ca0e), UINT64_C2(0xbce50864, 0x92111aeb), + UINT64_C2(0x8cbccc09, 0x6f5088cc), UINT64_C2(0xd1b71758, 0xe219652c), + UINT64_C2(0x9c400000, 0x00000000), UINT64_C2(0xe8d4a510, 0x00000000), + UINT64_C2(0xad78ebc5, 0xac620000), UINT64_C2(0x813f3978, 0xf8940984), + UINT64_C2(0xc097ce7b, 0xc90715b3), UINT64_C2(0x8f7e32ce, 0x7bea5c70), + UINT64_C2(0xd5d238a4, 0xabe98068), UINT64_C2(0x9f4f2726, 0x179a2245), + UINT64_C2(0xed63a231, 0xd4c4fb27), UINT64_C2(0xb0de6538, 0x8cc8ada8), + UINT64_C2(0x83c7088e, 0x1aab65db), UINT64_C2(0xc45d1df9, 0x42711d9a), + UINT64_C2(0x924d692c, 0xa61be758), UINT64_C2(0xda01ee64, 0x1a708dea), + UINT64_C2(0xa26da399, 0x9aef774a), UINT64_C2(0xf209787b, 0xb47d6b85), + UINT64_C2(0xb454e4a1, 0x79dd1877), UINT64_C2(0x865b8692, 0x5b9bc5c2), + UINT64_C2(0xc83553c5, 0xc8965d3d), UINT64_C2(0x952ab45c, 0xfa97a0b3), + UINT64_C2(0xde469fbd, 0x99a05fe3), UINT64_C2(0xa59bc234, 0xdb398c25), + UINT64_C2(0xf6c69a72, 0xa3989f5c), UINT64_C2(0xb7dcbf53, 0x54e9bece), + UINT64_C2(0x88fcf317, 0xf22241e2), UINT64_C2(0xcc20ce9b, 0xd35c78a5), + UINT64_C2(0x98165af3, 0x7b2153df), UINT64_C2(0xe2a0b5dc, 0x971f303a), + UINT64_C2(0xa8d9d153, 0x5ce3b396), UINT64_C2(0xfb9b7cd9, 0xa4a7443c), + UINT64_C2(0xbb764c4c, 0xa7a44410), UINT64_C2(0x8bab8eef, 0xb6409c1a), + UINT64_C2(0xd01fef10, 0xa657842c), UINT64_C2(0x9b10a4e5, 0xe9913129), + UINT64_C2(0xe7109bfb, 0xa19c0c9d), UINT64_C2(0xac2820d9, 0x623bf429), + UINT64_C2(0x80444b5e, 0x7aa7cf85), UINT64_C2(0xbf21e440, 0x03acdd2d), + UINT64_C2(0x8e679c2f, 0x5e44ff8f), UINT64_C2(0xd433179d, 0x9c8cb841), + UINT64_C2(0x9e19db92, 0xb4e31ba9), UINT64_C2(0xeb96bf6e, 0xbadf77d9), + UINT64_C2(0xaf87023b, 0x9bf0ee6b) + }; + + static const int16_t s_kCachedPowers_E[] = + { + -1220, -1193, -1166, -1140, -1113, -1087, -1060, -1034, -1007, -980, + -954, -927, -901, -874, -847, -821, -794, -768, -741, -715, + -688, -661, -635, -608, -582, -555, -529, -502, -475, -449, + -422, -396, -369, -343, -316, -289, -263, -236, -210, -183, + -157, -130, -103, -77, -50, -24, 3, 30, 56, 83, + 109, 136, 162, 189, 216, 242, 269, 295, 322, 348, + 375, 402, 428, 455, 481, 508, 534, 561, 588, 614, + 641, 667, 694, 720, 747, 774, 800, 827, 853, 880, + 907, 933, 960, 986, 1013, 1039, 1066 + }; + + static const char s_cDigitsLut[200] = + { + '0', '0', '0', '1', '0', '2', '0', '3', '0', '4', '0', '5', '0', '6', '0', '7', '0', '8', '0', '9', + '1', '0', '1', '1', '1', '2', '1', '3', '1', '4', '1', '5', '1', '6', '1', '7', '1', '8', '1', '9', + '2', '0', '2', '1', '2', '2', '2', '3', '2', '4', '2', '5', '2', '6', '2', '7', '2', '8', '2', '9', + '3', '0', '3', '1', '3', '2', '3', '3', '3', '4', '3', '5', '3', '6', '3', '7', '3', '8', '3', '9', + '4', '0', '4', '1', '4', '2', '4', '3', '4', '4', '4', '5', '4', '6', '4', '7', '4', '8', '4', '9', + '5', '0', '5', '1', '5', '2', '5', '3', '5', '4', '5', '5', '5', '6', '5', '7', '5', '8', '5', '9', + '6', '0', '6', '1', '6', '2', '6', '3', '6', '4', '6', '5', '6', '6', '6', '7', '6', '8', '6', '9', + '7', '0', '7', '1', '7', '2', '7', '3', '7', '4', '7', '5', '7', '6', '7', '7', '7', '8', '7', '9', + '8', '0', '8', '1', '8', '2', '8', '3', '8', '4', '8', '5', '8', '6', '8', '7', '8', '8', '8', '9', + '9', '0', '9', '1', '9', '2', '9', '3', '9', '4', '9', '5', '9', '6', '9', '7', '9', '8', '9', '9' + }; + + static const uint32_t s_kPow10[] = + { + 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000 + }; + + DiyFp GetCachedPower(int32_t e, int32_t* K) + { + double dk = (-61 - e) * 0.30102999566398114 + 347; // dk must be positive, so can do ceiling in positive + int32_t k = static_cast(dk); + if (k != dk) + { + k++; + } + + uint32_t index = static_cast((k >> 3) + 1); + *K = -(-348 + static_cast(index << 3)); // decimal exponent no need lookup table + + BX_CHECK(index < sizeof(s_kCachedPowers_F) / sizeof(s_kCachedPowers_F[0])); + return DiyFp(s_kCachedPowers_F[index], s_kCachedPowers_E[index]); + } + + void GrisuRound(char* buffer, int32_t len, uint64_t delta, uint64_t rest, uint64_t ten_kappa, uint64_t wp_w) + { + while (rest < wp_w + && delta - rest >= ten_kappa + && (rest + ten_kappa < wp_w || wp_w - rest > rest + ten_kappa - wp_w)) + { + buffer[len - 1]--; + rest += ten_kappa; + } + } + + uint32_t CountDecimalDigit32(uint32_t n) + { + // Simple pure C++ implementation was faster than __builtin_clz version in this situation. + if (n < 10) return 1; + if (n < 100) return 2; + if (n < 1000) return 3; + if (n < 10000) return 4; + if (n < 100000) return 5; + if (n < 1000000) return 6; + if (n < 10000000) return 7; + if (n < 100000000) return 8; + if (n < 1000000000) return 9; + return 10; + } + + void DigitGen(const DiyFp& W, const DiyFp& Mp, uint64_t delta, char* buffer, int32_t* len, int32_t* K) + { + const DiyFp one(uint64_t(1) << -Mp.e, Mp.e); + const DiyFp wp_w = Mp - W; + uint32_t p1 = static_cast(Mp.f >> -one.e); + uint64_t p2 = Mp.f & (one.f - 1); + int32_t kappa = static_cast(CountDecimalDigit32(p1)); + *len = 0; + + while (kappa > 0) + { + uint32_t d; + switch (kappa) + { + case 10: d = p1 / 1000000000; p1 %= 1000000000; break; + case 9: d = p1 / 100000000; p1 %= 100000000; break; + case 8: d = p1 / 10000000; p1 %= 10000000; break; + case 7: d = p1 / 1000000; p1 %= 1000000; break; + case 6: d = p1 / 100000; p1 %= 100000; break; + case 5: d = p1 / 10000; p1 %= 10000; break; + case 4: d = p1 / 1000; p1 %= 1000; break; + case 3: d = p1 / 100; p1 %= 100; break; + case 2: d = p1 / 10; p1 %= 10; break; + case 1: d = p1; p1 = 0; break; + default: + d = 0; + break; + } + + if (d || *len) + { + buffer[(*len)++] = '0' + static_cast(d); + } + + kappa--; + uint64_t tmp = (static_cast(p1) << -one.e) + p2; + if (tmp <= delta) + { + *K += kappa; + GrisuRound(buffer, *len, delta, tmp, static_cast(s_kPow10[kappa]) << -one.e, wp_w.f); + return; + } + } + + // kappa = 0 + for (;;) + { + p2 *= 10; + delta *= 10; + char d = static_cast(p2 >> -one.e); + if (d || *len) + { + buffer[(*len)++] = '0' + d; + } + + p2 &= one.f - 1; + kappa--; + if (p2 < delta) + { + *K += kappa; + GrisuRound(buffer, *len, delta, p2, one.f, wp_w.f * s_kPow10[-kappa]); + return; + } + } + } + + void Grisu2(double value, char* buffer, int32_t* length, int32_t* K) + { + const DiyFp v(value); + DiyFp w_m, w_p; + v.NormalizedBoundaries(&w_m, &w_p); + + const DiyFp c_mk = GetCachedPower(w_p.e, K); + const DiyFp W = v.Normalize() * c_mk; + DiyFp Wp = w_p * c_mk; + DiyFp Wm = w_m * c_mk; + Wm.f++; + Wp.f--; + DigitGen(W, Wp, Wp.f - Wm.f, buffer, length, K); + } + + int32_t WriteExponent(int32_t K, char* buffer) + { + const char* ptr = buffer; + + if (K < 0) + { + *buffer++ = '-'; + K = -K; + } + + if (K >= 100) + { + *buffer++ = '0' + static_cast(K / 100); + K %= 100; + const char* d = s_cDigitsLut + K * 2; + *buffer++ = d[0]; + *buffer++ = d[1]; + } + else if (K >= 10) + { + const char* d = s_cDigitsLut + K * 2; + *buffer++ = d[0]; + *buffer++ = d[1]; + } + else + { + *buffer++ = '0' + static_cast(K); + } + + *buffer = '\0'; + + return int32_t(buffer - ptr); + } + + int32_t Prettify(char* buffer, int32_t length, int32_t k) + { + const int32_t kk = length + k; // 10^(kk-1) <= v < 10^kk + + if (length <= kk && kk <= 21) + { + // 1234e7 -> 12340000000 + for (int32_t i = length; i < kk; i++) + { + buffer[i] = '0'; + } + + buffer[kk] = '.'; + buffer[kk + 1] = '0'; + buffer[kk + 2] = '\0'; + return kk + 2; + } + + if (0 < kk && kk <= 21) + { + // 1234e-2 -> 12.34 + memMove(&buffer[kk + 1], &buffer[kk], length - kk); + buffer[kk] = '.'; + buffer[length + 1] = '\0'; + return length + 1; + } + + if (-6 < kk && kk <= 0) + { + // 1234e-6 -> 0.001234 + const int32_t offset = 2 - kk; + memMove(&buffer[offset], &buffer[0], length); + buffer[0] = '0'; + buffer[1] = '.'; + for (int32_t i = 2; i < offset; i++) + { + buffer[i] = '0'; + } + + buffer[length + offset] = '\0'; + return length + offset; + } + + if (length == 1) + { + // 1e30 + buffer[1] = 'e'; + int32_t exp = WriteExponent(kk - 1, &buffer[2]); + return 2 + exp; + } + + // 1234e30 -> 1.234e33 + memMove(&buffer[2], &buffer[1], length - 1); + buffer[1] = '.'; + buffer[length + 1] = 'e'; + int32_t exp = WriteExponent(kk - 1, &buffer[length + 2]); + return length + 2 + exp; + } + + int32_t toString(char* _dst, int32_t _max, double _value) + { + int32_t sign = 0 != (doubleToBits(_value) & (UINT64_C(1)<<63) ) ? 1 : 0; + if (1 == sign) + { + *_dst++ = '-'; + --_max; + _value = -_value; + } + + if (isNan(_value) ) + { + return (int32_t)strlncpy(_dst, _max, "nan") + sign; + } + else if (isInfinite(_value) ) + { + return (int32_t)strlncpy(_dst, _max, "inf") + sign; + } + + int32_t len; + if (0.0 == _value) + { + len = (int32_t)strlncpy(_dst, _max, "0.0"); + } + else + { + int32_t kk; + Grisu2(_value, _dst, &len, &kk); + len = Prettify(_dst, len, kk); + } + + return len + sign; + } + + static void reverse(char* _dst, int32_t _len) + { + for (int32_t ii = 0, jj = _len - 1; ii < jj; ++ii, --jj) + { + xchg(_dst[ii], _dst[jj]); + } + } + + template + int32_t toStringSigned(char* _dst, int32_t _max, Ty _value, uint32_t _base) + { + if (_base == 10 + && _value < 0) + { + if (_max < 1) + { + return 0; + } + + _max = toString(_dst + 1 + , _max - 1 + , typename std::make_unsigned::type(-_value) + , _base + ); + if (_max == 0) + { + return 0; + } + + *_dst = '-'; + return int32_t(_max + 1); + } + + return toString(_dst + , _max + , typename std::make_unsigned::type(_value) + , _base + ); + } + + int32_t toString(char* _dst, int32_t _max, int32_t _value, uint32_t _base) + { + return toStringSigned(_dst, _max, _value, _base); + } + + int32_t toString(char* _dst, int32_t _max, int64_t _value, uint32_t _base) + { + return toStringSigned(_dst, _max, _value, _base); + } + + template + int32_t toStringUnsigned(char* _dst, int32_t _max, Ty _value, uint32_t _base) + { + char data[32]; + int32_t len = 0; + + if (_base > 16 + || _base < 2) + { + return 0; + } + + do + { + const Ty rem = _value % _base; + _value /= _base; + if (rem < 10) + { + data[len++] = char('0' + rem); + } + else + { + data[len++] = char('a' + rem - 10); + } + + } while (_value != 0); + + if (_max < len + 1) + { + return 0; + } + + reverse(data, len); + + memCopy(_dst, data, len); + _dst[len] = '\0'; + return int32_t(len); + } + + int32_t toString(char* _dst, int32_t _max, uint32_t _value, uint32_t _base) + { + return toStringUnsigned(_dst, _max, _value, _base); + } + + int32_t toString(char* _dst, int32_t _max, uint64_t _value, uint32_t _base) + { + return toStringUnsigned(_dst, _max, _value, _base); + } + +} // namespace bx diff --git a/3rdparty/bx/src/fpumath.cpp b/3rdparty/bx/src/fpumath.cpp new file mode 100644 index 0000000..e957ef9 --- /dev/null +++ b/3rdparty/bx/src/fpumath.cpp @@ -0,0 +1,166 @@ +/* + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bx#license-bsd-2-clause + */ + +#include +#include + +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/mutex.cpp b/3rdparty/bx/src/mutex.cpp new file mode 100644 index 0000000..988084b --- /dev/null +++ b/3rdparty/bx/src/mutex.cpp @@ -0,0 +1,102 @@ +/* + * Copyright 2010-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bx#license-bsd-2-clause + */ + +#include + +#if BX_CONFIG_SUPPORTS_THREADING + +#if BX_PLATFORM_ANDROID \ + || BX_PLATFORM_LINUX \ + || BX_PLATFORM_NACL \ + || BX_PLATFORM_IOS \ + || BX_PLATFORM_OSX \ + || BX_PLATFORM_PS4 \ + || BX_PLATFORM_RPI +# include +#elif BX_PLATFORM_WINDOWS \ + || BX_PLATFORM_WINRT \ + || BX_PLATFORM_XBOX360 \ + || BX_PLATFORM_XBOXONE +# include +# include +#endif // BX_PLATFORM_ + +namespace bx +{ +#if BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360 || BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT + typedef CRITICAL_SECTION pthread_mutex_t; + typedef unsigned pthread_mutexattr_t; + + inline int pthread_mutex_lock(pthread_mutex_t* _mutex) + { + EnterCriticalSection(_mutex); + return 0; + } + + inline int pthread_mutex_unlock(pthread_mutex_t* _mutex) + { + LeaveCriticalSection(_mutex); + return 0; + } + + inline int pthread_mutex_trylock(pthread_mutex_t* _mutex) + { + return TryEnterCriticalSection(_mutex) ? 0 : EBUSY; + } + + inline int pthread_mutex_init(pthread_mutex_t* _mutex, pthread_mutexattr_t* /*_attr*/) + { +#if BX_PLATFORM_WINRT + InitializeCriticalSectionEx(_mutex, 4000, 0); // docs recommend 4000 spincount as sane default +#else + InitializeCriticalSection(_mutex); +#endif // BX_PLATFORM_ + return 0; + } + + inline int pthread_mutex_destroy(pthread_mutex_t* _mutex) + { + DeleteCriticalSection(_mutex); + return 0; + } +#endif // BX_PLATFORM_ + + Mutex::Mutex() + { + BX_STATIC_ASSERT(sizeof(pthread_mutex_t) <= sizeof(m_internal) ); + + pthread_mutexattr_t attr; + +#if BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360 || BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT +#else + pthread_mutexattr_init(&attr); + pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); +#endif // BX_PLATFORM_ + + pthread_mutex_t* handle = (pthread_mutex_t*)m_internal; + pthread_mutex_init(handle, &attr); + } + + Mutex::~Mutex() + { + pthread_mutex_t* handle = (pthread_mutex_t*)m_internal; + pthread_mutex_destroy(handle); + } + + void Mutex::lock() + { + pthread_mutex_t* handle = (pthread_mutex_t*)m_internal; + pthread_mutex_lock(handle); + } + + void Mutex::unlock() + { + pthread_mutex_t* handle = (pthread_mutex_t*)m_internal; + pthread_mutex_unlock(handle); + } + +} // namespace bx + +#endif // BX_MUTEX_H_HEADER_GUARD diff --git a/3rdparty/bx/src/os.cpp b/3rdparty/bx/src/os.cpp new file mode 100644 index 0000000..0c7e9dc --- /dev/null +++ b/3rdparty/bx/src/os.cpp @@ -0,0 +1,459 @@ +/* + * Copyright 2010-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bx#license-bsd-2-clause + */ + +#include +#include +#include + +#if !BX_PLATFORM_NONE + +#include +#include + +#if BX_PLATFORM_WINDOWS || BX_PLATFORM_WINRT +# include +# include +#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 +# include // sched_yield +# if BX_PLATFORM_BSD \ + || BX_PLATFORM_IOS \ + || BX_PLATFORM_NACL \ + || BX_PLATFORM_OSX \ + || BX_PLATFORM_PS4 \ + || BX_PLATFORM_STEAMLINK +# include // mach_port_t +# endif // BX_PLATFORM_* + +# include // nanosleep +# if !BX_PLATFORM_PS4 && !BX_PLATFORM_NACL +# include // dlopen, dlclose, dlsym +# endif // !BX_PLATFORM_PS4 && !BX_PLATFORM_NACL + +# if BX_PLATFORM_ANDROID +# include // mallinfo +# elif BX_PLATFORM_LINUX \ + || BX_PLATFORM_RPI \ + || BX_PLATFORM_STEAMLINK +# include // syscall +# include +# elif BX_PLATFORM_OSX +# include // mach_task_basic_info +# elif BX_PLATFORM_HURD +# include // pthread_self +# elif BX_PLATFORM_ANDROID +# include "debug.h" // getTid is not implemented... +# endif // BX_PLATFORM_ANDROID +#endif // BX_PLATFORM_ + +#if BX_CRT_MSVC +# include // _getcwd +#else +# include // getcwd +#endif // BX_CRT_MSVC + +namespace bx +{ + + void sleep(uint32_t _ms) + { +#if BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360 + ::Sleep(_ms); +#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}; + ::nanosleep(&req, &rem); +#endif // BX_PLATFORM_ + } + + void yield() + { +#if BX_PLATFORM_WINDOWS + ::SwitchToThread(); +#elif BX_PLATFORM_XBOX360 + ::Sleep(0); +#elif BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT + debugOutput("yield is not implemented"); debugBreak(); +#else + ::sched_yield(); +#endif // BX_PLATFORM_ + } + + uint32_t getTid() + { +#if BX_PLATFORM_WINDOWS + return ::GetCurrentThreadId(); +#elif BX_PLATFORM_LINUX || BX_PLATFORM_RPI || BX_PLATFORM_STEAMLINK + return (pid_t)::syscall(SYS_gettid); +#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. + 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 // + } + + size_t getProcessMemoryUsed() + { +#if BX_PLATFORM_ANDROID + struct mallinfo mi = mallinfo(); + return mi.uordblks; +#elif BX_PLATFORM_LINUX || BX_PLATFORM_HURD + FILE* file = fopen("/proc/self/statm", "r"); + if (NULL == file) + { + return 0; + } + + long pages = 0; + int items = fscanf(file, "%*s%ld", &pages); + fclose(file); + return 1 == items + ? pages * sysconf(_SC_PAGESIZE) + : 0 + ; +#elif BX_PLATFORM_OSX +# if defined(MACH_TASK_BASIC_INFO) + mach_task_basic_info info; + mach_msg_type_number_t infoCount = MACH_TASK_BASIC_INFO_COUNT; + + int const result = task_info(mach_task_self() + , MACH_TASK_BASIC_INFO + , (task_info_t)&info + , &infoCount + ); +# else // MACH_TASK_BASIC_INFO + task_basic_info info; + mach_msg_type_number_t infoCount = TASK_BASIC_INFO_COUNT; + + int const result = task_info(mach_task_self() + , TASK_BASIC_INFO + , (task_info_t)&info + , &infoCount + ); +# endif // MACH_TASK_BASIC_INFO + if (KERN_SUCCESS != result) + { + return 0; + } + + return info.resident_size; +#elif BX_PLATFORM_WINDOWS + PROCESS_MEMORY_COUNTERS pmc; + GetProcessMemoryInfo(GetCurrentProcess() + , &pmc + , sizeof(pmc) + ); + return pmc.WorkingSetSize; +#else + return 0; +#endif // BX_PLATFORM_* + } + + void* dlopen(const char* _filePath) + { +#if BX_PLATFORM_WINDOWS + return (void*)::LoadLibraryA(_filePath); +#elif BX_PLATFORM_EMSCRIPTEN \ + || BX_PLATFORM_NACL \ + || BX_PLATFORM_PS4 \ + || BX_PLATFORM_XBOXONE \ + || BX_PLATFORM_WINRT + BX_UNUSED(_filePath); + return NULL; +#else + return ::dlopen(_filePath, RTLD_LOCAL|RTLD_LAZY); +#endif // BX_PLATFORM_ + } + + void dlclose(void* _handle) + { +#if BX_PLATFORM_WINDOWS + ::FreeLibrary( (HMODULE)_handle); +#elif BX_PLATFORM_EMSCRIPTEN \ + || BX_PLATFORM_NACL \ + || BX_PLATFORM_PS4 \ + || BX_PLATFORM_XBOXONE \ + || BX_PLATFORM_WINRT + BX_UNUSED(_handle); +#else + ::dlclose(_handle); +#endif // BX_PLATFORM_ + } + + void* dlsym(void* _handle, const char* _symbol) + { +#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_WINRT + BX_UNUSED(_handle, _symbol); + return NULL; +#else + return ::dlsym(_handle, _symbol); +#endif // BX_PLATFORM_ + } + + bool getenv(const char* _name, char* _out, uint32_t* _inOutSize) + { +#if BX_PLATFORM_WINDOWS + DWORD len = ::GetEnvironmentVariableA(_name, _out, *_inOutSize); + bool result = len != 0 && len < *_inOutSize; + *_inOutSize = len; + return result; +#elif BX_PLATFORM_PS4 \ + || BX_PLATFORM_XBOXONE \ + || BX_PLATFORM_WINRT + BX_UNUSED(_name, _out, _inOutSize); + return false; +#else + const char* ptr = ::getenv(_name); + uint32_t len = 0; + bool result = false; + if (NULL != ptr) + { + len = (uint32_t)strnlen(ptr); + + result = len != 0 && len < *_inOutSize; + if (len < *_inOutSize) + { + strlncpy(_out, len, ptr); + } + } + + *_inOutSize = len; + return result; +#endif // BX_PLATFORM_ + } + + void setenv(const char* _name, const char* _value) + { +#if BX_PLATFORM_WINDOWS + ::SetEnvironmentVariableA(_name, _value); +#elif BX_PLATFORM_PS4 \ + || BX_PLATFORM_XBOXONE \ + || BX_PLATFORM_WINRT + BX_UNUSED(_name, _value); +#else + ::setenv(_name, _value, 1); +#endif // BX_PLATFORM_ + } + + void unsetenv(const char* _name) + { +#if BX_PLATFORM_WINDOWS + ::SetEnvironmentVariableA(_name, NULL); +#elif BX_PLATFORM_PS4 \ + || BX_PLATFORM_XBOXONE \ + || BX_PLATFORM_WINRT + BX_UNUSED(_name); +#else + ::unsetenv(_name); +#endif // BX_PLATFORM_ + } + + int chdir(const char* _path) + { +#if BX_PLATFORM_PS4 \ + || BX_PLATFORM_XBOXONE \ + || BX_PLATFORM_WINRT + BX_UNUSED(_path); + return -1; +#elif BX_CRT_MSVC + return ::_chdir(_path); +#else + return ::chdir(_path); +#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 + pid_t pid = fork(); + + if (0 == pid) + { + int result = execvp(_argv[0], const_cast(&_argv[1]) ); + BX_UNUSED(result); + return NULL; + } + + return (void*)uintptr_t(pid); +#elif BX_PLATFORM_WINDOWS + STARTUPINFO si; + memSet(&si, 0, sizeof(STARTUPINFO) ); + si.cb = sizeof(STARTUPINFO); + + PROCESS_INFORMATION pi; + memSet(&pi, 0, sizeof(PROCESS_INFORMATION) ); + + int32_t total = 0; + for (uint32_t ii = 0; NULL != _argv[ii]; ++ii) + { + total += (int32_t)strnlen(_argv[ii]) + 1; + } + + char* temp = (char*)alloca(total); + int32_t len = 0; + for(uint32_t ii = 0; NULL != _argv[ii]; ++ii) + { + len += snprintf(&temp[len], bx::uint32_imax(0, total-len) + , "%s " + , _argv[ii] + ); + } + + bool ok = !!CreateProcessA(_argv[0] + , temp + , NULL + , NULL + , false + , 0 + , NULL + , NULL + , &si + , &pi + ); + if (ok) + { + return pi.hProcess; + } + + return NULL; +#else + BX_UNUSED(_argv); + return NULL; +#endif // BX_PLATFORM_LINUX || BX_PLATFORM_HURD + } + +} // namespace bx + +#endif // !BX_PLATFORM_NONE diff --git a/3rdparty/bx/src/semaphore.cpp b/3rdparty/bx/src/semaphore.cpp new file mode 100644 index 0000000..b4369ff --- /dev/null +++ b/3rdparty/bx/src/semaphore.cpp @@ -0,0 +1,282 @@ +/* + * Copyright 2010-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bx#license-bsd-2-clause + */ + +#include + +#if BX_CONFIG_SUPPORTS_THREADING + +#if BX_PLATFORM_POSIX +# include +# include +# include +# include +#elif BX_PLATFORM_WINDOWS \ + || BX_PLATFORM_WINRT \ + || BX_PLATFORM_XBOX360 \ + || BX_PLATFORM_XBOXONE +# include +# include +# if BX_PLATFORM_XBOXONE +# include +# 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 + 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_CONFIG_SEMAPHORE_PTHREAD + Semaphore::Semaphore() + { + BX_STATIC_ASSERT(sizeof(SemaphoreInternal) <= sizeof(m_internal) ); + + SemaphoreInternal* si = (SemaphoreInternal*)m_internal; + si->m_count = 0; + + int result; + + result = pthread_mutex_init(&si->m_mutex, NULL); + BX_CHECK(0 == result, "pthread_mutex_init %d", result); + + result = pthread_cond_init(&si->m_cond, NULL); + BX_CHECK(0 == result, "pthread_cond_init %d", result); + + BX_UNUSED(result); + } + + Semaphore::~Semaphore() + { + SemaphoreInternal* si = (SemaphoreInternal*)m_internal; + + int result; + result = pthread_cond_destroy(&si->m_cond); + BX_CHECK(0 == result, "pthread_cond_destroy %d", result); + + result = pthread_mutex_destroy(&si->m_mutex); + BX_CHECK(0 == result, "pthread_mutex_destroy %d", result); + + BX_UNUSED(result); + } + + void Semaphore::post(uint32_t _count) + { + SemaphoreInternal* si = (SemaphoreInternal*)m_internal; + + int result = pthread_mutex_lock(&si->m_mutex); + BX_CHECK(0 == result, "pthread_mutex_lock %d", result); + + for (uint32_t ii = 0; ii < _count; ++ii) + { + result = pthread_cond_signal(&si->m_cond); + BX_CHECK(0 == result, "pthread_cond_signal %d", result); + } + + si->m_count += _count; + + result = pthread_mutex_unlock(&si->m_mutex); + BX_CHECK(0 == result, "pthread_mutex_unlock %d", result); + + BX_UNUSED(result); + } + + bool Semaphore::wait(int32_t _msecs) + { + SemaphoreInternal* si = (SemaphoreInternal*)m_internal; + + 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 + && 0 >= si->m_count) + { + result = pthread_cond_wait(&si->m_cond, &si->m_mutex); + } + } + else + { + timespec ts; + ts.tv_sec = _msecs/1000; + ts.tv_nsec = (_msecs%1000)*1000; + + while (0 == result + && 0 >= si->m_count) + { + result = pthread_cond_timedwait_relative_np(&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) + { + --si->m_count; + } + + result = pthread_mutex_unlock(&si->m_mutex); + BX_CHECK(0 == result, "pthread_mutex_unlock %d", result); + + BX_UNUSED(result); + + 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 + si->m_handle = CreateSemaphoreExW(NULL, 0, LONG_MAX, NULL, 0, SEMAPHORE_ALL_ACCESS); +#else + si->m_handle = CreateSemaphoreA(NULL, 0, LONG_MAX, NULL); +#endif + BX_CHECK(NULL != si->m_handle, "Failed to create Semaphore!"); + } + + Semaphore::~Semaphore() + { + SemaphoreInternal* si = (SemaphoreInternal*)m_internal; + + CloseHandle(si->m_handle); + } + + void Semaphore::post(uint32_t _count) + { + SemaphoreInternal* si = (SemaphoreInternal*)m_internal; + + ReleaseSemaphore(si->m_handle, _count, NULL); + } + + bool Semaphore::wait(int32_t _msecs) + { + SemaphoreInternal* si = (SemaphoreInternal*)m_internal; + + DWORD milliseconds = (0 > _msecs) ? INFINITE : _msecs; +#if BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT + return WAIT_OBJECT_0 == WaitForSingleObjectEx(si->m_handle, milliseconds, FALSE); +#else + return WAIT_OBJECT_0 == WaitForSingleObject(si->m_handle, milliseconds); +#endif + } +#endif // BX_PLATFORM_ + +} // namespace bx + +#endif // BX_CONFIG_SUPPORTS_THREADING diff --git a/3rdparty/bx/src/sort.cpp b/3rdparty/bx/src/sort.cpp new file mode 100644 index 0000000..3b7485f --- /dev/null +++ b/3rdparty/bx/src/sort.cpp @@ -0,0 +1,55 @@ +/* + * Copyright 2010-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bx#license-bsd-2-clause + */ + +#include + +namespace bx +{ + static void quickSortR(void* _pivot, void* _data, uint32_t _num, uint32_t _stride, const ComparisonFn _fn) + { + if (2 > _num) + { + return; + } + + memCopy(_pivot, _data, _stride); + + uint8_t* data = (uint8_t*)_data; + + uint32_t ll = 0; + uint32_t gg = 1; + + for (uint32_t ii = 1; ii < _num;) + { + int32_t result = _fn(&data[ii*_stride], _pivot); + if (0 > result) + { + xchg(&data[ll*_stride], &data[ii*_stride], _stride); + ++ll; + } + else if (0 == result) + { + xchg(&data[gg*_stride], &data[ii*_stride], _stride); + ++gg; + ++ii; + } + else + { + ++ii; + } + } + + quickSortR(_pivot, &data[0 ], ll, _stride, _fn); + quickSortR(_pivot, &data[gg*_stride], _num-gg, _stride, _fn); + } + + void quickSort(void* _data, uint32_t _num, uint32_t _stride, const ComparisonFn _fn) + { + uint8_t* pivot = (uint8_t*)alloca(_stride); + quickSortR(pivot, _data, _num, _stride, _fn); + } + +} // namespace bx + diff --git a/3rdparty/bx/src/string.cpp b/3rdparty/bx/src/string.cpp new file mode 100644 index 0000000..dbb59e5 --- /dev/null +++ b/3rdparty/bx/src/string.cpp @@ -0,0 +1,929 @@ +/* + * Copyright 2010-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bx#license-bsd-2-clause + */ + +#include +#include +#include +#include + +#if !BX_CRT_NONE +# include // vsnprintf, vsnwprintf +#endif // !BX_CRT_NONE + +namespace bx +{ + bool isSpace(char _ch) + { + return ' ' == _ch + || '\t' == _ch + || '\n' == _ch + || '\v' == _ch + || '\f' == _ch + || '\r' == _ch + ; + } + + bool isUpper(char _ch) + { + return _ch >= 'A' && _ch <= 'Z'; + } + + bool isLower(char _ch) + { + return _ch >= 'a' && _ch <= 'z'; + } + + bool isAlpha(char _ch) + { + return isLower(_ch) || isUpper(_ch); + } + + bool isNumeric(char _ch) + { + return _ch >= '0' && _ch <= '9'; + } + + bool isAlphaNum(char _ch) + { + return isAlpha(_ch) || isNumeric(_ch); + } + + bool isPrint(char _ch) + { + return isAlphaNum(_ch) || isSpace(_ch); + } + + char toLower(char _ch) + { + return _ch + (isUpper(_ch) ? 0x20 : 0); + } + + void toLowerUnsafe(char* _inOutStr, int32_t _len) + { + for (int32_t ii = 0; ii < _len; ++ii) + { + *_inOutStr = toLower(*_inOutStr); + } + } + + void toLower(char* _inOutStr, int32_t _max) + { + const int32_t len = strnlen(_inOutStr, _max); + toLowerUnsafe(_inOutStr, len); + } + + char toUpper(char _ch) + { + return _ch - (isLower(_ch) ? 0x20 : 0); + } + + void toUpperUnsafe(char* _inOutStr, int32_t _len) + { + for (int32_t ii = 0; ii < _len; ++ii) + { + *_inOutStr = toUpper(*_inOutStr); + } + } + + void toUpper(char* _inOutStr, int32_t _max) + { + const int32_t len = strnlen(_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) + { + return _ch; + } + + template + int32_t strCmp(const char* _lhs, const char* _rhs, int32_t _max) + { + for ( + ; 0 < _max && fn(*_lhs) == fn(*_rhs) + ; ++_lhs, ++_rhs, --_max + ) + { + if (*_lhs == '\0' + || *_rhs == '\0') + { + break; + } + } + + return 0 == _max ? 0 : fn(*_lhs) - fn(*_rhs); + } + + int32_t strncmp(const char* _lhs, const char* _rhs, int32_t _max) + { + return strCmp(_lhs, _rhs, _max); + } + + int32_t strincmp(const char* _lhs, const char* _rhs, int32_t _max) + { + return strCmp(_lhs, _rhs, _max); + } + + int32_t strnlen(const char* _str, int32_t _max) + { + if (NULL == _str) + { + return 0; + } + + const char* ptr = _str; + for (; 0 < _max && *ptr != '\0'; ++ptr, --_max) {}; + return int32_t(ptr - _str); + } + + int32_t strlncpy(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 max = _dstSize-1; + const int32_t num = (len < max ? len : max); + memCopy(_dst, _src, num); + _dst[num] = '\0'; + + return num; + } + + int32_t strlncat(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 char* strnchr(const char* _str, char _ch, int32_t _max) + { + for (int32_t ii = 0, len = strnlen(_str, _max); ii < len; ++ii) + { + if (_str[ii] == _ch) + { + return &_str[ii]; + } + } + + return NULL; + } + + const char* strnrchr(const char* _str, char _ch, int32_t _max) + { + for (int32_t ii = strnlen(_str, _max); 0 < ii; --ii) + { + if (_str[ii] == _ch) + { + return &_str[ii]; + } + } + + return NULL; + } + + template + static const char* strStr(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); + + for (; stringLen >= findLen; ++ptr, --stringLen) + { + // Find start of the string. + while (fn(*ptr) != fn(*_find) ) + { + ++ptr; + --stringLen; + + // Search pattern lenght can't be longer than the string. + if (findLen > stringLen) + { + return NULL; + } + } + + // Set pointers. + const char* string = ptr; + const char* search = _find; + + // Start comparing. + while (fn(*string++) == fn(*search++) ) + { + // If end of the 'search' string is reached, all characters match. + if ('\0' == *search) + { + return ptr; + } + } + } + + return NULL; + } + + const char* strnstr(const char* _str, const char* _find, int32_t _max) + { + return strStr(_str, _max, _find, INT32_MAX); + } + + const char* stristr(const char* _str, const char* _find, int32_t _max) + { + return strStr(_str, _max, _find, INT32_MAX); + } + + const char* strnl(const char* _str) + { + for (; '\0' != *_str; _str += strnlen(_str, 1024) ) + { + const char* eol = strnstr(_str, "\r\n", 1024); + if (NULL != eol) + { + return eol + 2; + } + + eol = strnstr(_str, "\n", 1024); + if (NULL != eol) + { + return eol + 1; + } + } + + return _str; + } + + const char* streol(const char* _str) + { + for (; '\0' != *_str; _str += strnlen(_str, 1024) ) + { + const char* eol = strnstr(_str, "\r\n", 1024); + if (NULL != eol) + { + return eol; + } + + eol = strnstr(_str, "\n", 1024); + if (NULL != eol) + { + return eol; + } + } + + return _str; + } + + const char* strws(const char* _str) + { + for (; isSpace(*_str); ++_str) {}; + return _str; + } + + const char* strnws(const char* _str) + { + for (; !isSpace(*_str); ++_str) {}; + return _str; + } + + const char* strword(const char* _str) + { + for (char ch = *_str++; isAlphaNum(ch) || '_' == ch; ch = *_str++) {}; + return _str-1; + } + + const char* strmb(const char* _str, char _open, char _close) + { + int count = 0; + for (char ch = *_str++; ch != '\0' && count >= 0; ch = *_str++) + { + if (ch == _open) + { + count++; + } + else if (ch == _close) + { + count--; + if (0 == count) + { + return _str-1; + } + } + } + + return NULL; + } + + void eolLF(char* _out, int32_t _size, const char* _str) + { + if (0 < _size) + { + char* end = _out + _size - 1; + for (char ch = *_str++; ch != '\0' && _out < end; ch = *_str++) + { + if ('\r' != ch) + { + *_out++ = ch; + } + } + + *_out = '\0'; + } + } + + 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) ) + { + if (ptr != _str) + { + char ch = *(ptr - 1); + if (isAlphaNum(ch) || '_' == ch) + { + continue; + } + } + + char ch = ptr[len]; + if (isAlphaNum(ch) || '_' == ch) + { + continue; + } + + return ptr; + } + + return ptr; + } + + const char* findIdentifierMatch(const char* _str, const char* _words[]) + { + for (const char* word = *_words; NULL != word; ++_words, word = *_words) + { + const char* match = findIdentifierMatch(_str, word); + if (NULL != match) + { + return match; + } + } + + return NULL; + } + + namespace + { + struct Param + { + Param() + : width(0) + , base(10) + , prec(6) + , fill(' ') + , bits(0) + , left(false) + , upper(false) + , spec(false) + , sign(false) + { + } + + int32_t width; + uint32_t base; + uint32_t prec; + char fill; + uint8_t bits; + bool left; + bool upper; + bool spec; + bool sign; + }; + + 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 padding = _param.width > len ? _param.width - len : 0; + bool sign = _param.sign && len > 1 && _str[0] != '-'; + padding = padding > 0 ? padding - sign : 0; + + if (!_param.left) + { + size += writeRep(_writer, _param.fill, padding, _err); + } + + if (NULL == _str) + { + size += write(_writer, "(null)", 6, _err); + } + else if (_param.upper) + { + for (int32_t ii = 0; ii < len; ++ii) + { + size += write(_writer, toUpper(_str[ii]), _err); + } + } + else if (sign) + { + size += write(_writer, '+', _err); + size += write(_writer, _str, len, _err); + } + else + { + size += write(_writer, _str, len, _err); + } + + if (_param.left) + { + size += writeRep(_writer, _param.fill, padding, _err); + } + + return size; + } + + static int32_t write(WriterI* _writer, char _ch, const Param& _param, Error* _err) + { + return write(_writer, &_ch, 1, _param, _err); + } + + static int32_t write(WriterI* _writer, const char* _str, const Param& _param, Error* _err) + { + return write(_writer, _str, INT32_MAX, _param, _err); + } + + static int32_t write(WriterI* _writer, int32_t _i, const Param& _param, Error* _err) + { + char str[33]; + int32_t len = toString(str, sizeof(str), _i, _param.base); + + if (len == 0) + { + return 0; + } + + return write(_writer, str, len, _param, _err); + } + + static int32_t write(WriterI* _writer, int64_t _i, const Param& _param, Error* _err) + { + char str[33]; + int32_t len = toString(str, sizeof(str), _i, _param.base); + + if (len == 0) + { + return 0; + } + + return write(_writer, str, len, _param, _err); + } + + static int32_t write(WriterI* _writer, uint32_t _u, const Param& _param, Error* _err) + { + char str[33]; + int32_t len = toString(str, sizeof(str), _u, _param.base); + + if (len == 0) + { + return 0; + } + + return write(_writer, str, len, _param, _err); + } + + static int32_t write(WriterI* _writer, uint64_t _u, const Param& _param, Error* _err) + { + char str[33]; + int32_t len = toString(str, sizeof(str), _u, _param.base); + + if (len == 0) + { + return 0; + } + + return write(_writer, str, len, _param, _err); + } + + static int32_t write(WriterI* _writer, double _d, const Param& _param, Error* _err) + { + char str[1024]; + int32_t len = toString(str, sizeof(str), _d); + + if (len == 0) + { + return 0; + } + + if (_param.upper) + { + toUpperUnsafe(str, len); + } + + const char* dot = strnchr(str, '.'); + if (NULL != dot) + { + const int32_t precLen = int32_t( + dot + + uint32_min(_param.prec + _param.spec, 1) + + _param.prec + - str + ); + if (precLen > len) + { + for (int32_t ii = len; ii < precLen; ++ii) + { + str[ii] = '0'; + } + str[precLen] = '\0'; + } + len = precLen; + } + + return write(_writer, str, len, _param, _err); + } + + static int32_t write(WriterI* _writer, const void* _ptr, const Param& _param, Error* _err) + { + char str[35] = "0x"; + int32_t len = toString(str + 2, sizeof(str) - 2, uint32_t(uintptr_t(_ptr) ), 16); + + if (len == 0) + { + return 0; + } + + len += 2; + return write(_writer, str, len, _param, _err); + } + } // anonymous namespace + + int32_t write(WriterI* _writer, const char* _format, va_list _argList, Error* _err) + { + MemoryReader reader(_format, uint32_t(strnlen(_format) ) ); + + int32_t size = 0; + + while (_err->isOk() ) + { + char ch = '\0'; + + Error err; + read(&reader, ch, &err); + + if (!_err->isOk() + || !err.isOk() ) + { + break; + } + else if ('%' == ch) + { + // %[flags][width][.precision][length sub-specifier]specifier + read(&reader, ch); + + Param param; + + // flags + while (' ' == ch + || '-' == ch + || '+' == ch + || '0' == ch + || '#' == ch) + { + switch (ch) + { + default: + case ' ': param.fill = ' '; break; + case '-': param.left = true; break; + case '+': param.sign = true; break; + case '0': param.fill = '0'; break; + case '#': param.spec = true; break; + } + + read(&reader, ch); + } + + if (param.left) + { + param.fill = ' '; + } + + // width + if ('*' == ch) + { + read(&reader, ch); + param.width = va_arg(_argList, int32_t); + + if (0 > param.width) + { + param.left = true; + param.width = -param.width; + } + + } + else + { + while (isNumeric(ch) ) + { + param.width = param.width * 10 + ch - '0'; + read(&reader, ch); + } + } + + // .precision + if ('.' == ch) + { + read(&reader, ch); + + if ('*' == ch) + { + read(&reader, ch); + param.prec = va_arg(_argList, int32_t); + } + else + { + param.prec = 0; + while (isNumeric(ch) ) + { + param.prec = param.prec * 10 + ch - '0'; + read(&reader, ch); + } + } + } + + // length sub-specifier + while ('h' == ch + || 'I' == ch + || 'l' == ch + || 'j' == ch + || 't' == ch + || 'z' == ch) + { + switch (ch) + { + default: break; + + case 'j': param.bits = sizeof(intmax_t )*8; break; + case 't': param.bits = sizeof(size_t )*8; break; + case 'z': param.bits = sizeof(ptrdiff_t)*8; break; + + case 'h': case 'I': case 'l': + switch (ch) + { + case 'h': param.bits = sizeof(short int)*8; break; + case 'l': param.bits = sizeof(long int )*8; break; + default: break; + } + + read(&reader, ch); + switch (ch) + { + case 'h': param.bits = sizeof(signed char )*8; break; + case 'l': param.bits = sizeof(long long int)*8; break; + case '3': + case '6': + read(&reader, ch); + switch (ch) + { + case '2': param.bits = sizeof(int32_t)*8; break; + case '4': param.bits = sizeof(int64_t)*8; break; + default: break; + } + break; + + default: seek(&reader, -1); break; + } + break; + } + + read(&reader, ch); + } + + // specifier + switch (toLower(ch) ) + { + case 'c': + size += write(_writer, char(va_arg(_argList, int32_t) ), param, _err); + break; + + case 's': + size += write(_writer, va_arg(_argList, const char*), param, _err); + break; + + case 'o': + param.base = 8; + switch (param.bits) + { + default: size += write(_writer, va_arg(_argList, int32_t), param, _err); break; + case 64: size += write(_writer, va_arg(_argList, int64_t), param, _err); break; + } + break; + + case 'i': + case 'd': + param.base = 10; + switch (param.bits) + { + default: size += write(_writer, va_arg(_argList, int32_t), param, _err); break; + case 64: size += write(_writer, va_arg(_argList, int64_t), param, _err); break; + }; + break; + + case 'e': + case 'f': + case 'g': + param.upper = isUpper(ch); + size += write(_writer, va_arg(_argList, double), param, _err); + break; + + case 'p': + size += write(_writer, va_arg(_argList, void*), param, _err); + break; + + case 'x': + param.base = 16; + param.upper = isUpper(ch); + switch (param.bits) + { + default: size += write(_writer, va_arg(_argList, uint32_t), param, _err); break; + case 64: size += write(_writer, va_arg(_argList, uint64_t), param, _err); break; + } + break; + + case 'u': + param.base = 10; + switch (param.bits) + { + default: size += write(_writer, va_arg(_argList, uint32_t), param, _err); break; + case 64: size += write(_writer, va_arg(_argList, uint64_t), param, _err); break; + } + break; + + default: + size += write(_writer, ch, _err); + break; + } + } + else + { + size += write(_writer, ch, _err); + } + } + + size += write(_writer, '\0', _err); + + return size; + } + + int32_t write(WriterI* _writer, Error* _err, const char* _format, ...) + { + va_list argList; + va_start(argList, _format); + int32_t size = write(_writer, _format, argList, _err); + va_end(argList); + return size; + } + + int32_t vsnprintfRef(char* _out, int32_t _max, const char* _format, va_list _argList) + { + if (1 < _max) + { + StaticMemoryBlockWriter writer(_out, uint32_t(_max-1) ); + _out[_max-1] = '\0'; + + Error err; + va_list argListCopy; + va_copy(argListCopy, _argList); + int32_t size = write(&writer, _format, argListCopy, &err); + va_end(argListCopy); + + if (err.isOk() ) + { + return size; + } + } + + Error err; + SizerWriter sizer; + va_list argListCopy; + va_copy(argListCopy, _argList); + int32_t size = write(&sizer, _format, argListCopy, &err); + va_end(argListCopy); + + return size - 1 /* size without '\0' terminator */; + } + + int32_t vsnprintf(char* _out, int32_t _max, const char* _format, va_list _argList) + { +#if BX_CRT_NONE + return vsnprintfRef(_out, _max, _format, _argList); +#elif BX_CRT_MSVC + int32_t len = -1; + if (NULL != _out) + { + va_list argListCopy; + va_copy(argListCopy, _argList); + len = ::vsnprintf_s(_out, _max, size_t(-1), _format, argListCopy); + va_end(argListCopy); + } + return -1 == len ? ::_vscprintf(_format, _argList) : len; +#else + return ::vsnprintf(_out, _max, _format, _argList); +#endif // BX_COMPILER_MSVC + } + + 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); + va_end(argList); + return len; + } + + int32_t vsnwprintf(wchar_t* _out, int32_t _max, const wchar_t* _format, va_list _argList) + { +#if BX_CRT_NONE + BX_UNUSED(_out, _max, _format, _argList); + return 0; +#elif BX_CRT_MSVC + int32_t len = -1; + if (NULL != _out) + { + va_list argListCopy; + va_copy(argListCopy, _argList); + len = ::_vsnwprintf_s(_out, _max, size_t(-1), _format, argListCopy); + va_end(argListCopy); + } + return -1 == len ? ::_vscwprintf(_format, _argList) : len; +#elif BX_CRT_MINGW + return ::vsnwprintf(_out, _max, _format, _argList); +#else + return ::vswprintf(_out, _max, _format, _argList); +#endif // BX_COMPILER_MSVC + } + + int32_t swnprintf(wchar_t* _out, int32_t _max, const wchar_t* _format, ...) + { + va_list argList; + va_start(argList, _format); + int32_t len = vsnwprintf(_out, _max, _format, argList); + va_end(argList); + 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; + } + + void prettify(char* _out, int32_t _count, uint64_t _size) + { + uint8_t idx = 0; + double size = double(_size); + while (_size != (_size&0x7ff) + && idx < 9) + { + _size >>= 10; + size *= 1.0/1024.0; + ++idx; + } + + snprintf(_out, _count, "%0.2f %c%c", size, "BkMGTPEZY"[idx], idx > 0 ? 'B' : '\0'); + } + + int32_t strlcpy(char* _dst, const char* _src, int32_t _max) + { + return strlncpy(_dst, _max, _src); + } + + int32_t strlcat(char* _dst, const char* _src, int32_t _max) + { + return strlncat(_dst, _max, _src); + } + +} // namespace bx diff --git a/3rdparty/bx/src/thread.cpp b/3rdparty/bx/src/thread.cpp new file mode 100644 index 0000000..70ea4a0 --- /dev/null +++ b/3rdparty/bx/src/thread.cpp @@ -0,0 +1,330 @@ +/* + * Copyright 2010-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bx#license-bsd-2-clause + */ + +#include + +#if BX_PLATFORM_ANDROID \ + || BX_PLATFORM_LINUX \ + || BX_PLATFORM_NACL \ + || BX_PLATFORM_IOS \ + || BX_PLATFORM_OSX \ + || BX_PLATFORM_PS4 \ + || BX_PLATFORM_RPI +# include +# if defined(__FreeBSD__) +# include +# endif +# if BX_PLATFORM_LINUX && (BX_CRT_GLIBC < 21200) +# include +# endif // BX_PLATFORM_ +#elif BX_PLATFORM_WINDOWS \ + || BX_PLATFORM_WINRT \ + || BX_PLATFORM_XBOX360 \ + || BX_PLATFORM_XBOXONE +# include +# include +# include +# if BX_PLATFORM_WINRT +using namespace Platform; +using namespace Windows::Foundation; +using namespace Windows::System::Threading; +# endif // BX_PLATFORM_WINRT +#endif // BX_PLATFORM_ + +#if BX_CONFIG_SUPPORTS_THREADING + +namespace bx +{ + struct ThreadInternal + { +#if BX_PLATFORM_WINDOWS \ + || BX_PLATFORM_WINRT \ + || BX_PLATFORM_XBOX360 \ + || BX_PLATFORM_XBOXONE + static DWORD WINAPI threadFunc(LPVOID _arg); + HANDLE m_handle; + DWORD m_threadId; +#elif BX_PLATFORM_POSIX + static void* threadFunc(void* _arg); + pthread_t m_handle; +#endif // BX_PLATFORM_ + }; + +#if BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360 || BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT + DWORD WINAPI ThreadInternal::threadFunc(LPVOID _arg) + { + Thread* thread = (Thread*)_arg; + int32_t result = thread->entry(); + return result; + } +#else + void* ThreadInternal::threadFunc(void* _arg) + { + Thread* thread = (Thread*)_arg; + union + { + void* ptr; + int32_t i; + } cast; + cast.i = thread->entry(); + return cast.ptr; + } +#endif // BX_PLATFORM_ + + Thread::Thread() + : m_fn(NULL) + , m_userData(NULL) + , m_stackSize(0) + , m_exitCode(0 /*EXIT_SUCCESS*/) + , m_running(false) + { + BX_STATIC_ASSERT(sizeof(ThreadInternal) <= sizeof(m_internal) ); + + 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; +#elif BX_PLATFORM_POSIX + ti->m_handle = 0; +#endif // BX_PLATFORM_ + } + + Thread::~Thread() + { + if (m_running) + { + shutdown(); + } + } + + void Thread::init(ThreadFn _fn, void* _userData, uint32_t _stackSize, const char* _name) + { + BX_CHECK(!m_running, "Already running!"); + + m_fn = _fn; + m_userData = _userData; + m_stackSize = _stackSize; + m_running = true; + + ThreadInternal* ti = (ThreadInternal*)m_internal; +#if BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360 || BX_PLATFORM_XBOXONE + ti->m_handle = ::CreateThread(NULL + , m_stackSize + , (LPTHREAD_START_ROUTINE)ti->threadFunc + , this + , 0 + , NULL + ); +#elif BX_PLATFORM_WINRT + ti->m_handle = CreateEventEx(nullptr, nullptr, CREATE_EVENT_MANUAL_RESET, EVENT_ALL_ACCESS); + auto workItemHandler = ref new WorkItemHandler([=](IAsyncAction^) + { + m_exitCode = ti->threadFunc(this); + SetEvent(ti->m_handle); + } + , CallbackContext::Any + ); + + ThreadPool::RunAsync(workItemHandler, WorkItemPriority::Normal, WorkItemOptions::TimeSliced); +#elif BX_PLATFORM_POSIX + int result; + BX_UNUSED(result); + + pthread_attr_t attr; + result = pthread_attr_init(&attr); + BX_CHECK(0 == result, "pthread_attr_init failed! %d", result); + + if (0 != m_stackSize) + { + result = pthread_attr_setstacksize(&attr, m_stackSize); + BX_CHECK(0 == result, "pthread_attr_setstacksize failed! %d", result); + } + + result = pthread_create(&ti->m_handle, &attr, &ti->threadFunc, this); + BX_CHECK(0 == result, "pthread_attr_setschedparam failed! %d", result); +#else +# error "Not implemented!" +#endif // BX_PLATFORM_ + + m_sem.wait(); + + if (NULL != _name) + { + setThreadName(_name); + } + } + + void Thread::shutdown() + { + BX_CHECK(m_running, "Not running!"); + ThreadInternal* ti = (ThreadInternal*)m_internal; +#if BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360 + WaitForSingleObject(ti->m_handle, INFINITE); + GetExitCodeThread(ti->m_handle, (DWORD*)&m_exitCode); + CloseHandle(ti->m_handle); + ti->m_handle = INVALID_HANDLE_VALUE; +#elif BX_PLATFORM_WINRT || BX_PLATFORM_XBOXONE + WaitForSingleObjectEx(ti->m_handle, INFINITE, FALSE); + CloseHandle(ti->m_handle); + ti->m_handle = INVALID_HANDLE_VALUE; +#elif BX_PLATFORM_POSIX + union + { + void* ptr; + int32_t i; + } cast; + pthread_join(ti->m_handle, &cast.ptr); + m_exitCode = cast.i; + ti->m_handle = 0; +#endif // BX_PLATFORM_ + + m_running = false; + } + + bool Thread::isRunning() const + { + return m_running; + } + + int32_t Thread::getExitCode() const + { + return m_exitCode; + } + + void Thread::setThreadName(const char* _name) + { + ThreadInternal* ti = (ThreadInternal*)m_internal; + BX_UNUSED(ti); +#if BX_PLATFORM_OSX || BX_PLATFORM_IOS + pthread_setname_np(_name); +#elif (BX_CRT_GLIBC >= 21200) && ! BX_PLATFORM_HURD + pthread_setname_np(ti->m_handle, _name); +#elif BX_PLATFORM_LINUX + prctl(PR_SET_NAME,_name, 0, 0, 0); +#elif BX_PLATFORM_BSD +# ifdef __NetBSD__ + pthread_setname_np(ti->m_handle, "%s", (void*)_name); +# else + pthread_set_name_np(ti->m_handle, _name); +# endif // __NetBSD__ +#elif BX_PLATFORM_WINDOWS && BX_COMPILER_MSVC +# pragma pack(push, 8) + struct ThreadName + { + DWORD type; + LPCSTR name; + DWORD id; + DWORD flags; + }; +# pragma pack(pop) + ThreadName tn; + tn.type = 0x1000; + tn.name = _name; + tn.id = ti->m_threadId; + tn.flags = 0; + + __try + { + RaiseException(0x406d1388 + , 0 + , sizeof(tn)/4 + , reinterpret_cast(&tn) + ); + } + __except(EXCEPTION_EXECUTE_HANDLER) + { + } +#else + BX_UNUSED(_name); +#endif // BX_PLATFORM_ + } + + int32_t Thread::entry() + { +#if BX_PLATFORM_WINDOWS + ThreadInternal* ti = (ThreadInternal*)m_internal; + ti->m_threadId = ::GetCurrentThreadId(); +#endif // BX_PLATFORM_WINDOWS + + m_sem.post(); + return m_fn(m_userData); + } + + struct TlsDataInternal + { +#if BX_PLATFORM_WINDOWS + uint32_t m_id; +#elif !(BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT) + pthread_key_t m_id; +#endif // BX_PLATFORM_* + }; + +#if BX_PLATFORM_WINDOWS + TlsData::TlsData() + { + BX_STATIC_ASSERT(sizeof(TlsDataInternal) <= sizeof(m_internal) ); + + TlsDataInternal* ti = (TlsDataInternal*)m_internal; + ti->m_id = TlsAlloc(); + BX_CHECK(TLS_OUT_OF_INDEXES != ti->m_id, "Failed to allocated TLS index (err: 0x%08x).", GetLastError() ); + } + + TlsData::~TlsData() + { + TlsDataInternal* ti = (TlsDataInternal*)m_internal; + BOOL result = TlsFree(ti->m_id); + BX_CHECK(0 != result, "Failed to free TLS index (err: 0x%08x).", GetLastError() ); BX_UNUSED(result); + } + + void* TlsData::get() const + { + TlsDataInternal* ti = (TlsDataInternal*)m_internal; + return TlsGetValue(ti->m_id); + } + + void TlsData::set(void* _ptr) + { + TlsDataInternal* ti = (TlsDataInternal*)m_internal; + TlsSetValue(ti->m_id, _ptr); + } + +#elif !(BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT) + + TlsData::TlsData() + { + BX_STATIC_ASSERT(sizeof(TlsDataInternal) <= sizeof(m_internal) ); + + TlsDataInternal* ti = (TlsDataInternal*)m_internal; + int result = pthread_key_create(&ti->m_id, NULL); + BX_CHECK(0 == result, "pthread_key_create failed %d.", result); BX_UNUSED(result); + } + + TlsData::~TlsData() + { + TlsDataInternal* ti = (TlsDataInternal*)m_internal; + int result = pthread_key_delete(ti->m_id); + BX_CHECK(0 == result, "pthread_key_delete failed %d.", result); BX_UNUSED(result); + } + + void* TlsData::get() const + { + TlsDataInternal* ti = (TlsDataInternal*)m_internal; + return pthread_getspecific(ti->m_id); + } + + void TlsData::set(void* _ptr) + { + TlsDataInternal* ti = (TlsDataInternal*)m_internal; + int result = pthread_setspecific(ti->m_id, _ptr); + BX_CHECK(0 == result, "pthread_setspecific failed %d.", result); BX_UNUSED(result); + } +#endif // BX_PLATFORM_* + +} // namespace bx + +#endif // BX_CONFIG_SUPPORTS_THREADING diff --git a/3rdparty/bx/src/timer.cpp b/3rdparty/bx/src/timer.cpp new file mode 100644 index 0000000..7f54037 --- /dev/null +++ b/3rdparty/bx/src/timer.cpp @@ -0,0 +1,60 @@ +/* + * Copyright 2010-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bx#license-bsd-2-clause + */ + +#include + +#if BX_PLATFORM_ANDROID +# include // clock, clock_gettime +#elif BX_PLATFORM_EMSCRIPTEN +# include +#elif BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT +# include +#else +# include // gettimeofday +#endif // BX_PLATFORM_ + +namespace bx +{ + int64_t getHPCounter() + { +#if BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360 || BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT + LARGE_INTEGER li; + // Performance counter value may unexpectedly leap forward + // http://support.microsoft.com/kb/274323 + QueryPerformanceCounter(&li); + int64_t i64 = li.QuadPart; +#elif BX_PLATFORM_ANDROID + struct timespec now; + clock_gettime(CLOCK_MONOTONIC, &now); + int64_t i64 = now.tv_sec*INT64_C(1000000000) + now.tv_nsec; +#elif BX_PLATFORM_EMSCRIPTEN + int64_t i64 = int64_t(1000.0f * emscripten_get_now() ); +#elif !BX_PLATFORM_NONE + struct timeval now; + gettimeofday(&now, 0); + int64_t i64 = now.tv_sec*INT64_C(1000000) + now.tv_usec; +#else + BX_CHECK(false, "Not implemented!"); + int64_t i64 = UINT64_MAX; +#endif // BX_PLATFORM_ + return i64; + } + + int64_t getHPFrequency() + { +#if BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360 || BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT + LARGE_INTEGER li; + QueryPerformanceFrequency(&li); + return li.QuadPart; +#elif BX_PLATFORM_ANDROID + return INT64_C(1000000000); +#elif BX_PLATFORM_EMSCRIPTEN + return INT64_C(1000000); +#else + return INT64_C(1000000); +#endif // BX_PLATFORM_ + } + +} // namespace bx diff --git a/3rdparty/bx/tests/dbg.h b/3rdparty/bx/tests/dbg.h index b1f2391..9ae46b3 100644 --- a/3rdparty/bx/tests/dbg.h +++ b/3rdparty/bx/tests/dbg.h @@ -1,21 +1,16 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bx#license-bsd-2-clause */ #ifndef DBG_H_HEADER_GUARD #define DBG_H_HEADER_GUARD -#include // va_list -#include +#include #define DBG_STRINGIZE(_x) DBG_STRINGIZE_(_x) #define DBG_STRINGIZE_(_x) #_x #define DBG_FILE_LINE_LITERAL "" __FILE__ "(" DBG_STRINGIZE(__LINE__) "): " -#define DBG(_format, ...) dbgPrintf(DBG_FILE_LINE_LITERAL "" _format "\n", ##__VA_ARGS__) - -extern void dbgPrintfVargs(const char* _format, va_list _argList); -extern void dbgPrintf(const char* _format, ...); -extern void dbgPrintfData(const void* _data, uint32_t _size, const char* _format, ...); +#define DBG(_format, ...) bx::debugPrintf(DBG_FILE_LINE_LITERAL "" _format "\n", ##__VA_ARGS__) #endif // DBG_H_HEADER_GUARD diff --git a/3rdparty/bx/tests/fpumath_test.cpp b/3rdparty/bx/tests/fpumath_test.cpp index 8f98ea2..ae84387 100644 --- a/3rdparty/bx/tests/fpumath_test.cpp +++ b/3rdparty/bx/tests/fpumath_test.cpp @@ -1,11 +1,31 @@ /* - * 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 */ #include "test.h" #include +#if !BX_COMPILER_MSVC || BX_COMPILER_MSVC >= 1800 +#include +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::isfinite(u.f) == bx::isFinite(u.f) ); + REQUIRE(std::isinf(u.f) == bx::isInfinite(u.f) ); + } +} +#endif // !BX_COMPILER_MSVC || BX_COMPILER_MSVC >= 1800 + +TEST_CASE("ToBits", "") +{ + REQUIRE(UINT32_C(0x12345678) == bx::floatToBits( bx::bitsToFloat( UINT32_C(0x12345678) ) ) ); + REQUIRE(UINT64_C(0x123456789abcdef0) == bx::doubleToBits(bx::bitsToDouble(UINT32_C(0x123456789abcdef0) ) ) ); +} + void mtxCheck(const float* _a, const float* _b) { if (!bx::fequal(_a, _b, 16, 0.01f) ) @@ -35,7 +55,7 @@ void mtxCheck(const float* _a, const float* _b) } } -TEST(Quaternion) +TEST_CASE("quaternion", "") { float mtxQ[16]; float mtx[16]; diff --git a/3rdparty/bx/tests/handle_bench.cpp b/3rdparty/bx/tests/handle_bench.cpp index a882cbe..e8d8bee 100644 --- a/3rdparty/bx/tests/handle_bench.cpp +++ b/3rdparty/bx/tests/handle_bench.cpp @@ -1,4 +1,8 @@ -#include +/* + * Copyright 2010-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bx#license-bsd-2-clause + */ + #include #include #include @@ -28,13 +32,13 @@ int main() for (uint32_t jj = 0; jj < numElements; ++jj) { tinystl::pair ok = map.insert(tinystl::make_pair(uint64_t(jj), uint16_t(jj) ) ); - assert(ok.second); + assert(ok.second); BX_UNUSED(ok); } for (uint32_t jj = 0; jj < numElements; ++jj) { bool ok = bx::mapRemove(map, uint64_t(jj) ); - assert(ok); + assert(ok); BX_UNUSED(ok); } assert(map.size() == 0); @@ -56,13 +60,13 @@ int main() for (uint32_t jj = 0; jj < numElements; ++jj) { std::pair ok = map.insert(std::make_pair(uint64_t(jj), uint16_t(jj) ) ); - assert(ok.second); + assert(ok.second); BX_UNUSED(ok); } for (uint32_t jj = 0; jj < numElements; ++jj) { bool ok = bx::mapRemove(map, uint64_t(jj) ); - assert(ok); + assert(ok); BX_UNUSED(ok); } assert(map.size() == 0); @@ -83,13 +87,13 @@ int main() for (uint32_t jj = 0; jj < numElements; ++jj) { bool ok = map.insert(jj, uint16_t(jj) ); - assert(ok); + assert(ok); BX_UNUSED(ok); } for (uint32_t jj = 0; jj < numElements; ++jj) { bool ok = map.removeByKey(uint64_t(jj) ); - assert(ok); + assert(ok); BX_UNUSED(ok); } assert(map.getNumElements() == 0); @@ -99,5 +103,8 @@ int main() printf("HandleHashMap: %15f\n", double(elapsed) ); } + extern void simd_bench(); + simd_bench(); + return EXIT_SUCCESS; } diff --git a/3rdparty/bx/tests/handle_test.cpp b/3rdparty/bx/tests/handle_test.cpp index 29019e3..b82e1da 100644 --- a/3rdparty/bx/tests/handle_test.cpp +++ b/3rdparty/bx/tests/handle_test.cpp @@ -1,11 +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 */ #include "test.h" #include -#include +#include TEST_CASE("HandleListT", "") { diff --git a/3rdparty/bx/tests/macros_test.cpp b/3rdparty/bx/tests/macros_test.cpp index 321bc67..bae4bb8 100644 --- a/3rdparty/bx/tests/macros_test.cpp +++ b/3rdparty/bx/tests/macros_test.cpp @@ -1,11 +1,21 @@ /* - * 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 */ #include "test.h" -#include #include +#include + +BX_STATIC_ASSERT(false + || BX_CRT_BIONIC + || BX_CRT_GLIBC + || BX_CRT_LIBCXX + || BX_CRT_MINGW + || BX_CRT_MSVC + || BX_CRT_MUSL + || BX_CRT_NEWLIB + ); BX_STATIC_ASSERT(1 == BX_VA_ARGS_COUNT(1) ); BX_STATIC_ASSERT(2 == BX_VA_ARGS_COUNT(1, 2) ); @@ -51,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, strcmp(BX_STRINGIZE(TEST 1234 %^&*), "TEST 1234 %^&*") ); + CHECK_EQUAL(0, bx::strncmp(BX_STRINGIZE(TEST 1234 %^&*), "TEST 1234 %^&*") ); } diff --git a/3rdparty/bx/tests/main_test.cpp b/3rdparty/bx/tests/main_test.cpp index f6aaa90..b9d66db 100644 --- a/3rdparty/bx/tests/main_test.cpp +++ b/3rdparty/bx/tests/main_test.cpp @@ -1,18 +1,13 @@ /* - * 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 */ -#define CATCH_CONFIG_RUNNER #include "test.h" static const char* s_argv[] = { "bx.test" }; -int runAllTests(int _argc, const char* _argv[]) -{ - DBG(BX_COMPILER_NAME " / " BX_CPU_NAME " / " BX_ARCH_NAME " / " BX_PLATFORM_NAME); - return Catch::Session().run(_argc, _argv); -} +int runAllTests(int _argc, const char* _argv[]); #if BX_PLATFORM_ANDROID # include diff --git a/3rdparty/bx/tests/simd_test.cpp b/3rdparty/bx/tests/simd_test.cpp index f40b009..ca46fd0 100644 --- a/3rdparty/bx/tests/simd_test.cpp +++ b/3rdparty/bx/tests/simd_test.cpp @@ -1,21 +1,23 @@ /* - * 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 */ #include "test.h" #include #include -#include +#include #if 0 # define SIMD_DBG DBG #else -# define SIMD_DBG(_fmt, ...) BX_UNUSED(__VA_ARGS__); +# define SIMD_DBG unused #endif // 0 using namespace bx; +inline void unused(...) {} + union simd_cast { bx::simd256_t simd256; @@ -59,7 +61,6 @@ void simd_check_int32( REQUIRE(c.i[3] == _3); } -#if 0 void simd_check_int32( const char* _str , bx::simd256_t _a @@ -89,7 +90,6 @@ void simd_check_int32( REQUIRE(c.i[6] == _6); REQUIRE(c.i[7] == _7); } -#endif // 0 void simd_check_uint32( const char* _str @@ -114,7 +114,6 @@ void simd_check_uint32( REQUIRE(c.ui[3] == _3); } -#if 0 void simd_check_uint32( const char* _str , bx::simd256_t _a @@ -145,7 +144,6 @@ void simd_check_uint32( REQUIRE(c.ui[6] == _6); REQUIRE(c.ui[7] == _7); } -#endif // 0 void simd_check_float( const char* _str @@ -170,7 +168,6 @@ void simd_check_float( CHECK(bx::fequal(c.f[3], _3, 0.0001f) ); } -#if 0 void simd_check_float( const char* _str , bx::simd256_t _a @@ -201,7 +198,6 @@ void simd_check_float( CHECK(bx::fequal(c.f[6], _6, 0.0001f) ); CHECK(bx::fequal(c.f[7], _7, 0.0001f) ); } -#endif // 0 void simd_check_string(const char* _str, bx::simd128_t _a) { @@ -210,7 +206,7 @@ void simd_check_string(const char* _str, bx::simd128_t _a) SIMD_DBG("%s %s", _str, test); - CHECK(0 == strcmp(_str, test) ); + CHECK(0 == bx::strncmp(_str, test) ); } TEST_CASE("simd_swizzle", "") @@ -224,7 +220,7 @@ TEST_CASE("simd_swizzle", "") #define BX_SIMD128_IMPLEMENT_SWIZZLE(_x, _y, _z, _w) \ simd_check_string("" #_x #_y #_z #_w "", simd_swiz_##_x##_y##_z##_w(xyzw) ); \ -#include +#include #undef BX_SIMD128_IMPLEMENT_SWIZZLE #undef ELEMw @@ -326,20 +322,20 @@ TEST_CASE("simd_load", "") , 0.0f, 1.0f, 2.0f, 3.0f ); -// simd_check_float("ld" -// , simd_ld(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f) -// , 0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f -// ); + simd_check_float("ld" + , simd_ld(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f) + , 0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f + ); simd_check_int32("ild" , simd_ild(uint32_t(-1), 0, 1, 2) , uint32_t(-1), 0, 1, 2 ); -// simd_check_int32("ild" -// , simd_ild(uint32_t(-1), 0, 1, 2, 3, 4, 5, 6) -// , uint32_t(-1), 0, 1, 2, 3, 4, 5, 6 -// ); + simd_check_int32("ild" + , simd_ild(uint32_t(-1), 0, 1, 2, 3, 4, 5, 6) + , uint32_t(-1), 0, 1, 2, 3, 4, 5, 6 + ); simd_check_int32("ild" , simd_ild(uint32_t(-1), uint32_t(-2), uint32_t(-3), uint32_t(-4) ) @@ -350,13 +346,21 @@ TEST_CASE("simd_load", "") , 0, 0, 0, 0 ); - simd_check_uint32("isplat", simd_isplat(0x80000001) + simd_check_uint32("isplat", simd_isplat(0x80000001) , 0x80000001, 0x80000001, 0x80000001, 0x80000001 ); - simd_check_float("isplat", simd_splat(1.0f) + simd_check_float("splat", simd_splat(1.0f) , 1.0f, 1.0f, 1.0f, 1.0f ); + + simd_check_uint32("isplat", simd_isplat(0x80000001) + , 0x80000001, 0x80000001, 0x80000001, 0x80000001, 0x80000001, 0x80000001, 0x80000001, 0x80000001 + ); + + simd_check_float("splat", simd_splat(1.0f) + , 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f + ); } TEST_CASE("simd_arithmetic", "") @@ -390,7 +394,7 @@ TEST_CASE("simd_sqrt", "") ); } -TEST_CASE("float4", "") +TEST_CASE("simd", "") { const simd128_t isplat = simd_isplat(0x80000001); simd_check_uint32("sll" diff --git a/3rdparty/bx/tests/string_test.cpp b/3rdparty/bx/tests/string_test.cpp index 3d98e38..35e1dac 100644 --- a/3rdparty/bx/tests/string_test.cpp +++ b/3rdparty/bx/tests/string_test.cpp @@ -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 */ @@ -10,13 +10,174 @@ bx::AllocatorI* g_allocator; +TEST_CASE("chars", "") +{ + for (char ch = 'A'; ch <= 'Z'; ++ch) + { + REQUIRE(!bx::isLower(ch) ); + REQUIRE(!bx::isNumeric(ch) ); + REQUIRE(bx::isUpper(ch) ); + REQUIRE(bx::isAlpha(ch) ); + REQUIRE(bx::isAlphaNum(ch) ); + REQUIRE(bx::isLower(bx::toLower(ch) ) ); + } +} + TEST_CASE("strnlen", "") { const char* test = "test"; REQUIRE(0 == bx::strnlen(test, 0) ); REQUIRE(2 == bx::strnlen(test, 2) ); - REQUIRE(4 == bx::strnlen(test, UINT32_MAX) ); + REQUIRE(4 == bx::strnlen(test, INT32_MAX) ); +} + +TEST_CASE("strlncpy", "") +{ + char dst[128]; + size_t num; + + num = bx::strlncpy(dst, 1, "blah"); + REQUIRE(num == 0); + + num = bx::strlncpy(dst, 3, "blah", 3); + REQUIRE(0 == bx::strncmp(dst, "bl") ); + REQUIRE(num == 2); + + num = bx::strlncpy(dst, sizeof(dst), "blah", 3); + REQUIRE(0 == bx::strncmp(dst, "bla") ); + REQUIRE(num == 3); + + num = bx::strlncpy(dst, sizeof(dst), "blah"); + REQUIRE(0 == bx::strncmp(dst, "blah") ); + REQUIRE(num == 4); +} + +TEST_CASE("strlncat", "") +{ + char dst[128] = { '\0' }; + + REQUIRE(0 == bx::strlncat(dst, 1, "cat") ); + + REQUIRE(4 == bx::strlncpy(dst, 5, "copy") ); + REQUIRE(3 == bx::strlncat(dst, 8, "cat") ); + REQUIRE(0 == bx::strncmp(dst, "copycat") ); + + 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") ); +} + +TEST_CASE("strincmp", "") +{ + 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") ); + + 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::strincmp(abvgd, abvgx) ); + REQUIRE(0 > bx::strincmp(empty, abvgd) ); + + REQUIRE(0 < bx::strincmp(abvgx, abvgd) ); + REQUIRE(0 < bx::strincmp(abvgd, empty) ); +} + +TEST_CASE("strnchr", "") +{ + 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') ); +} + +TEST_CASE("strnrchr", "") +{ + 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') ); +} + +TEST_CASE("stristr", "") +{ + 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") ); +} + +TEST_CASE("strnstr", "") +{ + const char* test = "The Quick Brown Fox Jumps Over The Lazy Dog."; + + 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::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") ); +} + +template +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) + && num == len) + { + return true; + } + + printf("result '%s' (%d), expected '%s' (%d)\n", tmp, num, _expected, len); + return false; +} + +TEST_CASE("toString int32_t/uint32_t", "") +{ + REQUIRE(testToString(0, "0") ); + REQUIRE(testToString(-256, "-256") ); + REQUIRE(testToString(INT32_MAX, "2147483647") ); + REQUIRE(testToString(UINT32_MAX, "4294967295") ); +} + +TEST_CASE("toString double", "") +{ + REQUIRE(testToString(0.0, "0.0") ); + REQUIRE(testToString(-0.0, "-0.0") ); + REQUIRE(testToString(1.0, "1.0") ); + REQUIRE(testToString(-1.0, "-1.0") ); + REQUIRE(testToString(1.2345, "1.2345") ); + REQUIRE(testToString(1.2345678, "1.2345678") ); + REQUIRE(testToString(0.123456789012, "0.123456789012") ); + REQUIRE(testToString(1234567.8, "1234567.8") ); + REQUIRE(testToString(-79.39773355813419, "-79.39773355813419") ); + REQUIRE(testToString(0.000001, "0.000001") ); + REQUIRE(testToString(0.0000001, "1e-7") ); + REQUIRE(testToString(1e30, "1e30") ); + REQUIRE(testToString(1.234567890123456e30, "1.234567890123456e30") ); + REQUIRE(testToString(-5e-324, "-5e-324") ); + REQUIRE(testToString(2.225073858507201e-308, "2.225073858507201e-308") ); + REQUIRE(testToString(2.2250738585072014e-308, "2.2250738585072014e-308") ); + REQUIRE(testToString(1.7976931348623157e308, "1.7976931348623157e308") ); + REQUIRE(testToString(0.00000123123123, "0.00000123123123") ); + REQUIRE(testToString(0.000000123123123, "1.23123123e-7") ); + REQUIRE(testToString(123123.123, "123123.123") ); + REQUIRE(testToString(1231231.23, "1231231.23") ); + REQUIRE(testToString(0.000000000123123, "1.23123e-10") ); + REQUIRE(testToString(0.0000000001, "1e-10") ); } TEST_CASE("StringView", "") @@ -32,10 +193,21 @@ TEST_CASE("StringView", "") String st(sv); REQUIRE(4 == st.getLength() ); + st.append("test"); + REQUIRE(8 == st.getLength() ); + + st.append("test", 2); + REQUIRE(10 == st.getLength() ); + + REQUIRE(0 == bx::strncmp(st.getPtr(), "testtestte") ); + st.clear(); REQUIRE(0 == st.getLength() ); REQUIRE(4 == sv.getLength() ); + st.append("test"); + REQUIRE(4 == st.getLength() ); + sv.clear(); REQUIRE(0 == sv.getLength() ); } diff --git a/3rdparty/bx/tests/test.h b/3rdparty/bx/tests/test.h index 8fb79c2..c4f0dce 100644 --- a/3rdparty/bx/tests/test.h +++ b/3rdparty/bx/tests/test.h @@ -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 */ @@ -7,14 +7,15 @@ #define __TEST_H__ #include + +BX_PRAGMA_DIAGNOSTIC_PUSH(); +BX_PRAGMA_DIAGNOSTIC_IGNORED_MSVC(4312); // warning C4312 : 'reinterpret_cast' : conversion from 'int' to 'const char *' of greater size #include +BX_PRAGMA_DIAGNOSTIC_POP(); + #define TEST(_x) TEST_CASE(#_x, "") #define CHECK_EQUAL(_x, _y) REQUIRE(_x == _y) #include "dbg.h" -#if !BX_COMPILER_MSVC -# define _strdup strdup -#endif // !BX_COMPILER_MSVC - #endif // __TEST_H__ diff --git a/3rdparty/bx/tests/thread_test.cpp b/3rdparty/bx/tests/thread_test.cpp index f0ee772..8d09931 100644 --- a/3rdparty/bx/tests/thread_test.cpp +++ b/3rdparty/bx/tests/thread_test.cpp @@ -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 */ @@ -16,23 +16,23 @@ int32_t threadExit1(void*) return 1; } -TEST(thread) +TEST_CASE("thread", "") { bx::Thread th; - CHECK_EQUAL(th.isRunning(), false); + REQUIRE(!th.isRunning() ); th.init(threadExit0); - CHECK_EQUAL(th.isRunning(), true); + REQUIRE(th.isRunning() ); th.shutdown(); - CHECK_EQUAL(th.isRunning(), false); - CHECK_EQUAL(th.getExitCode(), 0); + REQUIRE(!th.isRunning() ); + REQUIRE(th.getExitCode() == 0); th.init(threadExit1); - CHECK_EQUAL(th.isRunning(), true); + REQUIRE(th.isRunning() ); th.shutdown(); - CHECK_EQUAL(th.isRunning(), false); - CHECK_EQUAL(th.getExitCode(), 1); + REQUIRE(!th.isRunning() ); + REQUIRE(th.getExitCode() == 1); } diff --git a/3rdparty/bx/tests/tokenizecmd_test.cpp b/3rdparty/bx/tests/tokenizecmd_test.cpp index 32e927b..d1495b2 100644 --- a/3rdparty/bx/tests/tokenizecmd_test.cpp +++ b/3rdparty/bx/tests/tokenizecmd_test.cpp @@ -1,92 +1,70 @@ /* - * Copyright 2012-2016 Branimir Karadzic. All rights reserved. + * Copyright 2012-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bx#license-bsd-2-clause */ #include "test.h" -#include #include -#include +#include -TEST(commandLine) +TEST_CASE("commandLine", "") { const char* args[] = { "-s", "--long", + "--platform", + "x", }; bx::CommandLine cmdLine(BX_COUNTOF(args), args); - CHECK(cmdLine.hasArg("long") ); - CHECK(cmdLine.hasArg('s') ); + REQUIRE(cmdLine.hasArg("long") ); + REQUIRE(cmdLine.hasArg('s') ); // non-existing argument - CHECK(!cmdLine.hasArg('x') ); + REQUIRE(!cmdLine.hasArg('x') ); + REQUIRE(!cmdLine.hasArg("preprocess") ); } -TEST(tokenizeCommandLine) +static bool test(const char* _input, int32_t _argc, ...) { -#if 0 - const char* input[] = - { - " ", - "\\", -// "\"a b c\" d e", - "\"ab\\\"c\" \"\\\\\" d", - "a\\\\\\b d\"e f\"g h", - "a\\\\\\\"b c d", - "a\\\\\\\\\"b c\" d e", - }; + char buffer[1024]; + uint32_t len = sizeof(buffer); + char* argv[32]; + int32_t argc; + bx::tokenizeCommandLine(_input, buffer, len, argc, argv, BX_COUNTOF(argv) ); - const int expected_argc[] = + if (_argc != argc) { - 0, - 0, -// 3, - 3, - 3, - 3, - 3 - }; + return false; + } - const char* expected_results[] = - { - "a b c", "d", "e", - "ab\"c", "\\", "d", - "a\\\\\\b", "de fg", "h", - "a\\\"b", "c", "d", - "a\\\\b c", "d", "e", - }; + va_list argList; + va_start(argList, _argc); - const char** expected_argv[] = + for (int32_t ii = 0; ii < _argc; ++ii) { - NULL, - NULL, -// &expected_results[0], - &expected_results[3], - &expected_results[6], - &expected_results[9], - &expected_results[12], - }; - - for (uint32_t ii = 0; ii < BX_COUNTOF(exptected_argv); ++ii) - { - printf("x\n"); - char commandLine[1024]; - uint32_t size = BX_COUNTOF(commandLine); - char* argv[50]; - int32_t argc; - bx::tokenizeCommandLine(input[ii], commandLine, size, argc, argv, BX_COUNTOF(argv) ); - printf("\n%d (%d): %s %s\n", ii, argc, input[ii], expected_argc[ii] == argc ? "" : "FAILED!"); - for (uint32_t jj = 0; jj < argc; ++jj) + const char* arg = va_arg(argList, const char*); + if (0 != bx::strncmp(argv[ii], arg) ) { - printf("\t%d: {%s} %s\n" - , jj - , argv[jj] - , jj < argc ? (0==strcmp(argv[jj], expected_argv[ii][jj]) ? "" : "FAILED!") : "FAILED!" - ); + return false; } } -#endif // 0 + + va_end(argList); + + return true; +} + +TEST_CASE("tokenizeCommandLine", "") +{ + REQUIRE(test(" ", 0, NULL) ); + REQUIRE(test("\\", 0, NULL) ); + + REQUIRE(test("a b v g d", 5, "a", "b", "v", "g", "d") ); + + REQUIRE(test("\"ab\\\"v\" \"\\\\\" g", 3, "ab\"v", "\\", "g") ); + REQUIRE(test("a\\\\\\\"b v g", 3, "a\\\"b", "v", "g") ); + REQUIRE(test("a\\\\\\\\\"b v\" g d", 3, "a\\\\b v", "g", "d") ); } diff --git a/3rdparty/bx/tests/uint32_test.cpp b/3rdparty/bx/tests/uint32_test.cpp index 3fe0044..ae214b8 100644 --- a/3rdparty/bx/tests/uint32_test.cpp +++ b/3rdparty/bx/tests/uint32_test.cpp @@ -1,52 +1,71 @@ /* - * 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 */ #include "test.h" #include -TEST(StrideAlign) +TEST_CASE("StrideAlign") { - CHECK(0 == bx::strideAlign(0, 12) ); + REQUIRE(0 == bx::strideAlign(0, 12) ); for (uint32_t ii = 0; ii < 12; ++ii) { - CHECK(12 == bx::strideAlign(ii+1, 12) ); + REQUIRE(12 == bx::strideAlign(ii+1, 12) ); } - CHECK(0 == bx::strideAlign16(0, 12) ); + REQUIRE(0 == bx::strideAlign16(0, 12) ); for (uint32_t ii = 0; ii < 12; ++ii) { - CHECK(48 == bx::strideAlign16(ii+1, 12) ); + REQUIRE(48 == bx::strideAlign16(ii+1, 12) ); } } -TEST(uint32_cnt) +TEST_CASE("uint32_cnt") { - CHECK( 0 == bx::uint32_cnttz(UINT32_C(1) ) ); - CHECK( 0 == bx::uint32_cnttz_ref(UINT32_C(1) ) ); + REQUIRE( 0 == bx::uint32_cnttz(UINT32_C(1) ) ); + REQUIRE( 0 == bx::uint32_cnttz_ref(UINT32_C(1) ) ); - CHECK(31 == bx::uint32_cntlz(UINT32_C(1) ) ); - CHECK(31 == bx::uint32_cntlz_ref(UINT32_C(1) ) ); + REQUIRE(31 == bx::uint32_cntlz(UINT32_C(1) ) ); + REQUIRE(31 == bx::uint32_cntlz_ref(UINT32_C(1) ) ); - CHECK( 0 == bx::uint64_cnttz(UINT64_C(1) ) ); - CHECK( 0 == bx::uint64_cnttz_ref(UINT64_C(1) ) ); + REQUIRE( 0 == bx::uint64_cnttz(UINT64_C(1) ) ); + REQUIRE( 0 == bx::uint64_cnttz_ref(UINT64_C(1) ) ); - CHECK(63 == bx::uint64_cntlz(UINT64_C(1) ) ); - CHECK(63 == bx::uint64_cntlz_ref(UINT64_C(1) ) ); + REQUIRE(63 == bx::uint64_cntlz(UINT64_C(1) ) ); + REQUIRE(63 == bx::uint64_cntlz_ref(UINT64_C(1) ) ); - CHECK( 1 == bx::uint32_cntbits(1) ); - CHECK( 1 == bx::uint32_cntbits_ref(1) ); + REQUIRE( 1 == bx::uint32_cntbits(1) ); + REQUIRE( 1 == bx::uint32_cntbits_ref(1) ); - CHECK(16 == bx::uint32_cntbits(UINT16_MAX) ); - CHECK(16 == bx::uint32_cntbits_ref(UINT16_MAX) ); + REQUIRE(16 == bx::uint32_cntbits(UINT16_MAX) ); + REQUIRE(16 == bx::uint32_cntbits_ref(UINT16_MAX) ); - CHECK(32 == bx::uint32_cntbits(UINT32_MAX) ); - CHECK(32 == bx::uint32_cntbits_ref(UINT32_MAX) ); + REQUIRE(32 == bx::uint32_cntbits(UINT32_MAX) ); + REQUIRE(32 == bx::uint32_cntbits_ref(UINT32_MAX) ); } -TEST(uint32_part) +TEST_CASE("uint32_part") { - CHECK(UINT32_C(0x55555555) == bx::uint32_part1by1(UINT16_MAX) ); - CHECK(UINT32_C(0x09249249) == bx::uint32_part1by2(0x3ff) ); + REQUIRE(UINT32_C(0x55555555) == bx::uint32_part1by1(UINT16_MAX) ); + REQUIRE(UINT32_C(0x09249249) == bx::uint32_part1by2(0x3ff) ); +} + +TEST_CASE("halfTo/FromFloat", "") +{ + for (uint32_t ii = 0; ii < 0x7c00; ++ii) + { + const uint16_t orig = uint16_t(ii); + const float htf = bx::halfToFloat(orig); + const uint16_t hff = bx::halfFromFloat(htf); + REQUIRE(orig == hff); + } + + for (uint32_t ii = 0x8000; ii < 0xfc00; ++ii) + { + const uint16_t orig = uint16_t(ii); + const float htf = bx::halfToFloat(orig); + const uint16_t hff = bx::halfFromFloat(htf); + REQUIRE(orig == hff); + } } diff --git a/3rdparty/bx/tests/vector_complex_test.cpp b/3rdparty/bx/tests/vector_complex_test.cpp index 8deaa3f..17f5119 100644 --- a/3rdparty/bx/tests/vector_complex_test.cpp +++ b/3rdparty/bx/tests/vector_complex_test.cpp @@ -33,6 +33,12 @@ #include #include +#if !BX_COMPILER_MSVC +# define _strdup strdup +#endif // !BX_COMPILER_MSVC + +BX_PRAGMA_DIAGNOSTIC_IGNORED_MSVC(4996) // warning C4996: 'strdup': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _strdup. See online help for details. + struct complex { complex() {data = 0;} complex(const char* s) { data = strdup(s); } @@ -156,7 +162,7 @@ TEST(vector_complex_popback) { v.push_back("24"); CHECK(v.back() == "24"); - + v.pop_back(); CHECK(v.back() == "12"); diff --git a/3rdparty/bx/tools/bin/darwin/genie b/3rdparty/bx/tools/bin/darwin/genie index 22f35af09cf2c495e1d78edefd2215b961fb27f0..48552bab3e7f0af0e67f9792dcaa4e6ff3852328 100755 GIT binary patch delta 50161 zcmaHU2V9iL^Y`su0~8Ms5Rh^-0Y&f>tbm{p55%?WXrjgv zjY(A0Q)3hpOEmW0Vu|e(dl!xO&K8X3m;cKr?lb$H+1c6I+1Y*e4l?yGuWjFY&NbTG zsb!!1*v(tq(!pROlOcdB@6b{vGuX`gE6O48DPm|YW}qzasni@rIV^h4;cE&GFM2Lb z19;pU4u>!1__#OHNfhO@K~ga#%Y-zoE2I=vLn#_-oq8}%Q08?PR1w2H0hb5x2}EmN}D1ULCsTB+la1N5~FvFZ0^yQIp59y=exOpJ-Z0U0xpkxl6H|qh?mrg#fpKdWI%?`9d zsq&OUEjs`VnJm_5Nig0{Fg^{`8!wn2-$XLw0dqT$nj6zQq1+??xy2IG+u}b88fd&^ z7XOio$`X4AglBwFxya!K!URck9CbMC3+Y$KKk;;#wA{%V|7kC6cREpbu|*{_X!Y%s z^DHW%)xw$#IGFI2wq{}$t_vz1>54ncVEnfZ+qakn#-eH+il z^$(szGF?@I@sWAULyJXU9=`LW^eVVl)A4|t`#rE&;*9U^X26{3jaPv?0$>=4xemC2 zH3O{wNoh<|t#c%8VFgNd&;&^*($o+i-1daDGNjz^>~T5;3rBze7-MeHpL+e5akN?< z{xdMms}4zhLSyj2yJpAo9pnDBhsDb3-QCll~YT$;0|aqACgMLr(x^8 zlBVTk{N|uEyQMRJaZp;_asr-tQ1WSY3imuDy=t`=zdIoP(%K)-sFH5B&bD%{Lb7<2 zY)3YZM2=E+n>u)Dl{B%98$PvLB5e*~_3p~lw&zi=1<)^@0tnlC=7Cq4e@g(PQBuB> z4r==Gw}8Up(t$anfOWS&4UzKjUO?|q34i%s0ijamgbOOEJR;HN&2L;q{hd;E#Eg*m zpOGxaxWDW42L>xTpG~12H~po-6*?|mS_K^#ubA~`Snr*FlfH=z!cMF!UT>T4-fnvO}5?)jV(n2*nsxx`V~9eG5Vvrw>5IuWby< z;@6gf2Mp@4L%J5#1sk_ZP1|enx7(%e?T6zbJ1V!eZ;SA&-O}^ucKG6MNf*-s@7XO4 zi}AIdw;LQ#9zJKcG(V;-PTDOUjnQGJ-4g2HkDu(40y}iWJ9bIqIwaxLUDCM@MGlL% zQjfvpT`H)TV7z1gackwsjtJrHeWa||HC~C}Q0nYg=8N|r@-61XBNj`1n*)Z1(94LO zQj54IxX(^$NL)Mo^Usw_<7^N%?xfW-)KFiZ|{WC@FRy+;9$>Puy8E8ljg3+U}lVaz{u9y#X`^<51AK2yZF*5 zbLvl0a{NPl+9Y-FJV<`R|Ay;rmK=M$!F@JKnw~E5TYFVf-^v;N)F&v!%m5eUS}!E;xxbF(-Y@Y!6 ztKF*keH|MrRv=kd^d2$@tk|WXcioRPB(Iv)D=S0$PR2O=d+Eo1z3|(067IhoxA?wt zRsTA2JncJa)1baM?mNjQsRKseN!^n6;Of=i+7CuJc6DX_PFOxl%;II z^}w()%CQFLRKuEhVtg^!ogNCkb7B_OhpIQ zIKdV=r+O|dgY9Q1r6yCVAFQ8o-qK&=tFddDbZkN+{JKA)2iPWt8p6*?VS5g_At->RHk^@R&VI+C9m|qoEM~OkcWX2ulVZ4ui1cw@H$2vU6a=j|E>Q8<5Ns~s zEm&8r0KZ{mJ5hr1rMWv~o@!sfIvFe1Pqs$*;7rLhZ<{Ub+ol&{DNRRNe66yW4SR7MS8Cx8Q@HuCxxFi^dFRI*F(hK30MU~1K2N3>Z zs&w>=9=O9)Njviv{(Ow2HWs<6Awa5~^rdmzAlB-P0rQMjaMHapMOtp0fd@{h44UPN zTmq@9Axj&(X!Qp=27|Mqdu4;k(ty%nTs=veS*o=@K|NM(yKj=Tv9u+wlP%pX4aFC; zD&5Mmkdy6Vl`Nq&Vvo5!I56H=1!D=GP`RYM0m2O@NLyw{;*q)1^VthrTyjB+Chm8= zvFkM$VMFS$@^Jt0(y}>W*mj(Bc1{H@8Y^Yb^~Opf&713Hmob*6O7rV?%tMpLR{lJf zV7$p%N|eUpV+QGnG!K+IEZgpLc^kTVn2QH0V}?% z$cIXy6^VF9o;1B;25yp4X-k$O{AhUP`bF;)*f*nc-O>nzpJr5=zmCU_Ylg!#Kne+; z0i9K=fp8ch#Vy~0U588WmbbCqJd6!8yP9l_LQa*vR~&*9c)H}Z(g(++OC49fblsi^ z#zA1#(HHNv8W=M;COPRhP}3?+>b0sXc1V+!ulgN#O|2ZY`cD;Zlu+6EhhOciH+Eqo z-O@#J+EwlFv@PA%59}Hv!t$@Sl@7aSS>thu($~LtmPedWO4Yx6)Zdw?lIc#;G%{)u zY{BK>{bHns2R)oCpt)G}7PG1!n~v6fq;3b@J1kD1`KK97=<;aVqwPv~Pz{rr-;~on z@aJ*!DbgrpXeaPF|8ZeNk3YVPz=!b`eOF4h&a6y!`;*V_nTbSf7^fctksC_tD09W;?0+s4LEIC#jBg z$L-rmpC3Dfd$g5&kNXCF9mq_jA!0o+W)Ke$^M(L+23`|Hne-Iap{_c}f^iEygX+tdZle$O_E^6qOl~wdh*#CLs)K5r4o*C~VA^B`PtJN6 zE_t0vvz{GJr$t#3E|r~e!9&BP)n{7TOoMJ|E^X#3-9FR7?zInlkBBwCN-#b&2l`2^ z&-TPRAF1?g7wjD-oj*GSU-p*To@=Zg;Z1jGi!}GNhqX(!4IRQ9tu*i4Z9F+r8h^f2 z?dAn3p`(>l)WxX*1Y9>=trHs!V(wVb>nlet9YE14Bjy5 zK_>hqu-G}o?9v|20*(Nk36Ux;2jI<3rQMf(@Ujr;#$}yn8N{-A5A_+l}vy3#d{h{nk&(`S5v9y z6?c51sg!f&2JRMAnRqn|%cX6~%Dva?VtL6{W#y?GgOJ>Ri&AQSD-tgYkVfBXhjRj? zA8#e$MgfxT?L7IJN@eA=+r5#S+8->dgfn1FsaKrtK^&ZwQXwDO4u{k9o#C!`VDin) zfgPW^KfbiPULO==1(^&E**WH82>ba+(f53vheJ&407WcS4Sq($Fub=<<@kF?5SD8t z{r&lPwO8fk`;D>7dp9~oPGuhO(7^6eIs1>15Z6W{nV7FhijC~{5g#z`>F1B=H?wO7Ra}JOsNdCGOH-) zrjVLFZ|>m(4OqIQgRTdRVVc0-!J@dw<`Z(M@OfO_3OR3G1uyxqP8w=rJ3#Z<0xj^T z9n~?r0QgkXUzxR9@_x}+o+L+7w-y%>hKHjwl$W911@o%6CXve!zbtiWx8 z3-3sVVIytD>4ymDCQmi?ab^zu2>`7=rd6}~C_+-8jkCa+ z&W4GZZ(5|sulv}1zJhx~>n)w=Ti@gJn7%QIz4gWS?c$B^%xz_$RIh1VMNJM^Ar-zE zgBv+YuigZ?+d7J+M)!e}VK6F?`|YWwpR)6EDWawsURYnst_fBrK$m8vMOt11@7fmW zmzqA-Z2_Wg>@5|&tuI}BUPo&4*2C+b14Jf$+pTVB{;C~JFG$?;tX--OQo&o_x{k|~ zvOHH9p{>I*Y31ADxTAw)`;Oqf_R{Ki9q@>H(!Fff=2F<{Jxz#_hEnVhzR35M;MJ#5dzBcWV* zkv^dLeNY6eW2iloNnsD$5%2(+QS<>azjK-8P~8Ey@eHeQXMwy3un+wO_(FU^PfCcL z597GpiD6?u7PNrPAUBd?wd38)<&y2CjQ2X+*-u*XzO(md@CFxe+}m~f%>p}`+*^LA z8(M;bmG+X_64S6B=z)BaNFVfW@V40#d<6W@?4?x8EWGr!^vE*PdN2e94Ar1nI29$y zV-Z?-4LM_^S@;_LCa;eX*@aLDHh)PVMh7@`ds*AHrer5`fYbOdNfJgSo5PJBTc$k7)LiA>D_xH6=7MUTuQUXl%R)D~}jOYX~2 zbC)geAk6kWX9^2Gr`JaGK5$7znL9=)x_=8<5mF*^lOr`Wc73o}@*R9TZ} zDwK_HTai>XYGyqfTnpSwR%D49x#GyD#H2>v_!}#7QH`45JS(EMLbW~!aHg7!v_^m6w=YR68`K*QR+2Is zXxCdszPCaBvAfEos)N2oc;Fn<_jOSQ#(VD)XANqh?S4-NiDB>wNLatZ`sBpj{JS#Q zFwN&qlgmhk2F1a9DA}Na5f{udUDqIc)Nm=xGCj_QfFMj#K?L0KpQk|hU1DpGZbg3f zh7NS{GI&wBaR*$H`noy_R;C=>-V9g?<>|{dAetQZaW3GFu<$9OHj_{XaC^!fljML# zBi!?EqH;u=T^CPR%3j7|q|i)P!XCx0TA|&Wsd}NB<(78=zqP^g0>W0DXqT{vuTk zP%}L4I(gav`QXIs#MuRDar5h>wF`>GKNXR&E-(wBbqR4nKE9P#!CQJwcGWP=Q00^o zCAe;oat3=&g4{S*IiQ4Gb^(P?-jI5(D6F&Hb+FVJcU-d-{4x1B_-;}0YwrSE^Pivz zUP$1^soKhXnO72wzbv|9u|RBVO5nPLF0LumxiHG?YoyE-ec3v>j!M?KG~#tEyqNES zR&?1kj-6Ss5O&^uCoshtFZr9K z{D|t4xgHSlj+eTV zV$whQR=j&puDgT6d{5LirY~dxmQKw5!I?&S4G^w*RExziY$ssNL2gG~(E}XmK(q>A z?Q`I=0N{9!{7s+ep2rGQ z4)G2}?)I~8(>43ZJo!hO^}^+MOx;3JJi?Zn&5=tC3tioN=mUL)7TAWgYkHARG@WI2A5MwYflOR@JQQ$!ndAL9w~z+&HVO?w`1om}jz)p_^V38ZjpA|L)22z$XaT}YP7;R>Xg02U zlC0*z~;~sSvg~Y^sb$?=b%M0NI#; z4&ZaYnmw;$?&rz|In`+;Tl9m%bJU}=LGqUn!3?v>%AJWArnr8HkSKz@_By zAXMQ!WeG&=Z+ADq5eD9CN`DzaUna}9Ooa#i95Q){sW=J2rzziTCo=}4VK{v|c{mu2 z#dWun;mODsU-{BhmW+~+Yn?5yree26Y?r}u^ZvcsW)~&QE`;C|KZH}f22Sz2-#XO6g9vH32_~YI^knmOhbnvTZG$e zF^x_|6A`{tNgk%5d)ThhbTOTJGi)wVk3ycrZUjojcPmK22o&iyWCQoeBXh)o_ZArE za#$nK_xuWScm#x7zq!OA1Nl4Y<^n8F`dwcNpFGn;%S*H8TvI{@iiUt$KxU7G5&M^$ zpo8rQXRRl{W}=n&-uGlg7R1=h@5#9=WW-n2k)heBqxnszFz|U!mauAO>~fu6%Lk=?gg-kuPi1z z3LxRmC^lUwK&xOfzai7df|vjJ#WOfZuZit=2w(57$=UJHMejmlKLJ(Y#Y;@5 zCZHY&xBQCuPeSSV*kV#P363~FE+(qUklWWSHZ`4$5)uA(JSm=nLi{=srED8)`ZC|x zSrP1m?U-Uqq2>#?WPw-8WBO7jZ$i#YfiuG63Zg26ZRKbM38c^U6{ItL&Z;1p^f{t} z%q|2Ub*>=m3t?Mn40Be91~q>?mcA>(O|fR{`IzGOg=3xKQ;&k)%?oMI@Wln%bG7X* zO2VauxoRvKFcn?WR#nhgFkbxU8u0FhAK$|#1ch3Nh+is5pCT0NGkF}_S?NJL4@mf6 zvD2)~2uqjpNfEFhUYfg%GyPnIenz-a1sPY2+TpqtrY*(j4Z=wa$cE`~DtIcHUQb7@ z;N#8tCfygP1;WYmO~YoQEeOAxYx0@UvEcz%29Vb(2nGnL%wcqN0yYM3HVYOahZ*@ev3!aQ<+_PYYTmq4B1oA zYCzGc?Lq4!K zSd*9YQP(;ft>9Izw5LmPO)Rm@M**ZjLhcIg77#6`Eeo4t9~9ix)9E= zgECCG0(C*S6ND`RC*TtDJwe6z!f?`T5!#P0O(U-t(Si zF^a&`rkYMKMonNQQVCjuN^ytbWcCu&6n{B|{IUcc#%Cv+N|&My7@wL*BA3B|uF*u( zy=4e)jH9QMtt-$8dDd%%Y1X&s9&+sqQC95)$4t16q>1pGd++ISeb87^z6#CK-iE7S zIGJ5bFc!d#Jl%x*oQEhXNd>sv>FgNNYBlPT8OEzWQQ>mPF0dw#DVfA-fY@sz#o&&Y zwyL0*l~}v2IcEG=&W~e7AIsTsZ2TDVa5ajz-S<)}ofXcx^`O z@T3gWADihp=t2kbb_?=$8F5PiH85?#kSl7Sji$M&pl5vPAV0gVrG@M@**BWJ z*bWKrVtZ4g9jKKO*J(?VccaDl)L`;67WioA^4C_H|O65jd^2)ct$o@>_rz(#!}$|PMw z^AYaYfCT)77CU|8M6EOU(U|+96_fcXf}H&e&LG1gNQWD+5ngp>BJ`Hne7z+T36CI? zZa^6HcOu7bpow^e6G^xUhpRv9kQFog8668up4$j76R@3ADKr&Lw)%;WL_@X@IK7Ztb;;3^Y;4W*ew*T&2Rw0 z(usEFE1YmKpP>Yd`3O99RT6sPOyX|C87#65nR^>HMBn=4kK1Ul-50 zk9Qz#?!bf<*^}fusE5-&`+pq#Wpm~|O>46E4jPQl1Q0(n3UOElBJd57U2S0qw8Odf zrZh90Y@9xa?W%Ti&NX9gvs#iFchS)H3eI95<_`guxjwA1QpmvAkXQWLRx^D%RaPF3 zT0$%g7q=khf^eoJp(P2p2bUF%TaxbgP-Fkfa26-@kW*v!(7m_Bu%%V)Z5|IFc(Y6H zZ^Oyg_uy7!Ks|Et9?Hj4>yqx(uu@a&lFVv2f5z4&rSJ^$hu0q6!I`nP>-Brg@CB+p z#cvb^kE^5Mivioim_>FFab_o5a-teFu(bmHaD7DI{(r7ZUR0y~u18x?v7`;UsyO2{ za7SsM1*Ki*n(Nt;)Avzmc+q`XG!5xPk1gFS>6f+P~-Rx9VZTH|`hesQ*_20$)S81{$|hjgVsC{)qYpzHmZk zh<+S3w5fQ#(iiQe8pWrG^t(H=G`gy(doF9X9xQ&-daRRv2cj9g5WXd=*L-^@U&-Fe z#MgYNO+Dg`@a2TJx~k$Dg{BNXMS`3Er(Me@wY1EVD?m+E@$1%O>+82OHC)S{1moj8 zFPi%>eANOzje=!9{h+}{Z#-tcMv+Ac=y5`u*P7ye&~?}H&ycPV?!m6is#kK*V9P8E zh3{m&8C2kDd=+%H*n$mi#TH~}2e)ADr=KjCyk8cow^UUZ=q>xJCu_FWDSi`D&`7hj z3!;RF-tv1wo5y3iX|`GwzX>gPydQ$BGnX=Spd5{6tKI@EgNiHCw|O=!KL`xU_k#xVvgQLd-eWkiwx|NdVblk&}ym-zKC`#-gp|?>#E?m364z#$HJ{i@oT?= zW-*py@u>$k`RNYE%yfkBy^KcsHv1>nnUz=vm4Kg~6qw`76=5;^6=AZw@Uaa9C$X1b2<35nSs>xV<*jnCuD4SsTvF4SyoTWkq6sH00Pu=v#aHb?XCR-cS-b2wi& zYl)KTEV*Q8)VVyi8P=VQnd$BrUp~nZ>C5xL4af3rX1UvyT+$n#7Tk3k6s(vtQ^vwC?dIe)&3}ozl!Bzqr(j~3-q^-O0)++@2P6%VK7S(2) zYiP#1I>@=>MAdB6AEksU3@}yFL%I_pm#I--<=U9ytD12mQk} zFZF}*K$yU%Z8EO0+Qz)k7v?Wk6Z|;V_!zD+8jxX+Q9{U6_?(e@^i%+|i{|@r%wdri zn}SEbgaa+~Nbmns8j)*{kxQWkrWy`p-9LV@yLp~T^Pyx-THWwgw!3XAS zki%PiJPz|rFiL#SbP$M}7xM3O|LMl1|MdT$J~E8a%3*w=iR%|#yXE%0hu+k@)U z9s+m|YzSA(<^E*z6SSb?E9#;0rPuz351QZ~*aSYXAJ&Z0Km`iBlc9N1;&0p6*A~Wu#@dGsp`T*xt z1#`Xjjmi0^$X(rGFulaMCcRI0^|R1rPG?v8N$kDtZdH8Fjlr?WouTpWn}~_qgWZu$_}iIW#wnA)U&cPD-#OYqZ=!G zu(B5`6It1pmHk*bfR%$-Ihd70SUHrHX{;Q^$`Py_$;wPtX0tMvm3gc*uyTwiTvA*7 z$Fa%;R!(B&6jn}Uk@E6Z3po0W4}IiHmaSXsf!MXX%R$|bD)nw85u zm4(p#3RYRk%GIp=j+N_Jxt^6jvT_3}H?eXvE4Q+88!LCPawjWyv9gMlzp`>KEBCYV zcUB&Pve4pxm{pFl@;EC`vhp-5&$9A7D=)J0GApmJ@)|4uV&zR%-e#qlmG@YApOp_; z`4~$0b&-t?m9o3noMAB+mV5j_E2n9t++!`Jf9LcnO7G_k{(UjJ5I*Zbd zoX()M6{piF{SJ;WFt8L#Kjw52rEhY&us^Mw=aoK`KFsN!l&<1*S4wZ@bUdZM<8&OQ zmvB0U(sMZ-N$CI0#+Jn-5 zoOY$O3#XkZU6<4Ll$LSYmeS81Szp$aHgj6p5Z2$_%e;ap<2a}Pb_04Zr{7R|8>e4T zdOfF~PG70q&FKP42XlHfrL~;SqO>EYGbnAv>2ylJbKt9h(vLZvMCqG_ywaam&U3mC zr4MtuC#9=6-IdatIUP^w?>HSt=_Q|k&g8Ui0Idw+m8O(V zrsn7nMMs%P5W63dn3rwAOW4A%OD^d^=z*i|tm zB{PK#jKm>IO8Jm^ZLl*@MB?tD`8fr7sp-QqGSdTxWv67N2ifGM8w&EWwYe#V5g{4* zsUNd)^2j%Ba05~tfnCCL@@i#L^0Pjbs%6m5KIM>i5!jV{6@eY={?qfAe6qVO4kj1D zRIHs$iXw0bvHnY5kEBH6_RTW#GqO^Ke_~^1PHIY~Hhr8SJv%=mCp%voshtR;&CMR} z1MR&=%C%(b5+!`uqBXYm7Xt$SWu}Lu=42aEGP3gn|7jdd6;YQsnwCZ4L+W6z-H@J_ z1$whHGQlOe=_v*qj%R~(u$Goof=rCV%{^>V3-a=)FrYTI4TXda*%60ZsDiajeBLfa z{jHzj$3rsm(z9~Lq=SnJ(gO`cGlR7p2(lRlp3TTkOCJ}k%`l{A0jcm^VVn~gDH>@FBhs^N_z1Zgu9B%Cx~&RFGV+C7Lt1=?=LGzR+^8U%^vwKp8|Yx* zs3bmW^58ohN?xqSPW6MeS?PJh(^GSDGt%=7IpDxdVzUO5|70v*gM-^sMb!8tZW$Q- zKN>jaf4o3j1(B<3pzl>(AWEOE!7=3VYOFN5ufjyFsjz;~TJdG*m){7Gz|m!LSW^ z1?gg%xnVT2Xav9js9Y^Lg`s=|q);JuDjevO3o8M|CPVkga_>@zeuk)ma?n@_&htJ?B&|#N!-}aOMjlB{TDXdUPlG=dk^dk69o3 z_{eu3T=YS~e@XqP7G|mG&vUq|x_(-EZf4H-temuTZKTaan^6$%`3PlX za&BM%U9SN_HveXk6M>4xWKL^Ekn6u$tW|be#xOE3K~bM*&2k%4zuWS$^)&wZ0m0hT z)DW;2Vl%*W?73X4#DS^2R70jFIbzOnGMRR^@ zDxzY%E3vUq#)qXyIwUKi$&D0+n`v3HVuYMTr7B`f#iu_7vCSYUEY$He&V z-P-0C3=M1%M0NXsE5m)L^R@rYY~>Tg`XrCGD%?oUVMRj?Ypx4!9>jAu<%Ey}U9c@_ zzfECf3Na~8DfN7XvhNiaHJ zYTPHQIbR#4ZN@F(j!A=E6(aI~1=%K?9IOR_kMcAXr|FZ-y{~Xl`se#-LrKp+6!mR^ zL8pPIV^hKd#X(e<0W+PFY5>=UjLA0?q-ErUWMms+GxB1@InE}SpOXxEDcSk3d87w| z57@D5WKKqQAYC=JlM_PCrK-5cbB5B1%%{DAl7K;jAQAkVgKdILzK;~o6i(m@IzV=a z`VhRt>AAwM{wKJIBVdHM(V>WTpJu*vvizFD(W?if!>&9Xeg?Zulz)Ci=tmfN{0MT_ z)RPK@)4!T?H<>y-SCpu%Sz=CxVGyKLI$N3@I+xx zrfZd69CgPLp~T)>=}exyP&72fc`M)IIv*WS$s>Pd6Vn(!_-?oLhr=j&?5}K0mIf-- z#HW$c$uz-V8RRR^Pa9<_(<`qj+W^%|Yz^u8bUK4R94&^?sACiS&-Rg?Pd)Any9uct zrEElIom13<4IMt(p+`PQ-pzvpB6`PmAvuu9Y_y?Kkh6guM3!eMo0H6L%6dsmNE;9l zn?AH)`0(_+&oWcS|DJs=w=_E36r0T)u%LuspIHj(Q+U=!KULm7y)o%@1<5|W+WK^xoj6&9&zMxY@sgPF;3b;(FjTy9m2s#Q*?2(wfjxH6_wI+ApWT5R#XlOWx+I+}i^|2MzOHi-UjQbdVe9 zqtyy#GJTm%&!)$GKR6>NgM!=w18tU1HjaiY_kD$`zI$qJZb)hYytZYr4cU;AKZ+(J zwiJl&zT8#KNLbg)3seosr3#fJxi>=J70semeff4>eG+X&)WCsx2M{?IfhDHk%Tm%`6$0RkFb>6h8 zHh)A;9=I|+O)D(ZQVtFEPlhlM+Q3`VM{h7(6`T~{KQWSgLms>(gwXg7OwB4x18V{Y zhWL+7Y7zto?I0T=767^ev>_o{Y6o{5R05J2CUgv^F;C?|$H2j$f(|Vibo`f9+KIKQ zSqsP{aEG8RgyT(Z2f;RzZ9Y`Mwg1qtq!>roMj!l$PDKRxzkP;qIXEkDH`Gr5$C8El z%xQ4;0c+Tqf`>ygo8N&9{?w(lvGJ(@jU9R_`DgC((`n@Ym$bOyfNP%gyg~y^LRvBi z2ZMt?EP;W#q~MQg%|EHNfZE4n5JRA&1s4X{{8yjCozTw*HVf{;taR!C=0y5}4Rq~6 zkv-{(_SN#m#n0T@yaHIku-w^I1@{)5MBxH3BQu|#M)_sXCkED@5qxM{tq%<=(V&n` zQV=~r=-@`MHoW1TgT)?K&(E%`zYnoOErrpr9>x9BC*x*a^1BQn`q4>Qv;`SWj+in! zoe<{)t;UWduncQln0}au+6BoZV1@o8(wd7j{~!WeH_amf0sNMXy5-}G6yEK?7D=R; zR_RFK7gn|D>A694qygH15B_FRz#UNAClhH4QhY(ezz2pUiFWiMtmnuiE=P@Fj`i^& zPwFcglAaEV`tBl|@;HS%z`T@XVfDnxB;7$VggA~-1rl^#;YAYaE3E8=e?SQ08}1Rt ze;9wgLI4NS(L*BoN7X<$|5JNtJbt=#{!f|O)x)m{*}^c;D^OwFCmNYkxhajte|W30 zp(m$*TEHayQz4!Os?gZ$CaRu)71&elh&=oyQnelhl6{fHwBF_7MU* zhBiPr`oq;Nyacf$>pyazSWaJ{Cr*YGsSOBXHyHsWW{fJm9-Xy+nvm81fz=tSD*U(H ztg))_e_^KGV^#gIhgeMi+H_$QbWxFnZ&dC|e%@_wRC$})O;D*3dE7&xcK-jgFhx&P zDc!k`VAl;Z%^|9ZnBTW(7ps1W=H#=Bs(o_u^IxhVrfpYLas_F4LlsSI|AK9L;!V{} zGVq2flN`CB@`YnUdM@m0T0;)37q;4I(Db0!7vK+{08;0ssv~?#0Jj08>rH5%d`mUY z^yrqVLV;Tw$rtxj-tfoz*4|Tj`OrUH*aNyJ{K1qKlO}|)CS9T7KP@7)fQ-!Ds zM^8fd=SfK3crrrtZ|LZX5FRoO$(@RkQZ*eZW=%)3kzXME>A9@Dq4?E=6eNQn>N_8Y!25 z1HV+g3@HuEQK9Us6-aS&1(KJ-FID=l0%fa^Y|MA?H%itb*}b(0-&%*1gML7=^*)4DM#FfzsPw9DGKf&IegO!zD5Jz83{yct@W^xZ{RB@7Rv+jrjFW+Q=|f&t0|C|f|C$h@IyFY9tqb>R~5n@Y0D0`g*z>Lx&jQDgvCH?kfh zSngap3}$$wfC@M?2q4o3olhF68<59XZDqYClN&dYi>(K-8Uc;r_JYG?`YbNhgq+ZT zz3%|(A|M}bjURk%CN7ICmV-6T1P9w3f~hc*uGxI3jfl<@+JynsKtQGNHlg-ar2&+eO)e^7sHK7x#7D6iSY-kV z=Fnw;<_gG_LkjrrR*`^mxkrNmGJh(S2+#!qdGLnt`vbD00^&|m!JjIS{hCcZ(#ZOm zU=8Csp94#m!$%Xv=h7X1`=OJ7){_{27+@?we+Xy=m&ybvE|)j-rQzsa7m#Ryh(YWG zNGG7i%vY+L0JX>^1FXRP69g-q&5UgX{E2}t1eDI)XqySpP65S{7$4{bkP8Bd$Z0gUZU9Mff=I5iS1WAm!WW4<34AmYRfPdGcQjdN4bC|xSP|Ty5@6jB zP(C+kGeC{@7SKQ*n(qM87`Rj>+0z#Jz*$b*?~{P# zTtJ>u)?&d5;SqBhSjz-t!z20~K+`@*jZRei+6Ke7qQ4u%by~BAsziW{W5}VpVDC4A zHI&430;d4yfhXm;p^|)1k{P>Vn7uj=L9nFqp8dU+-5Ad zXC(_jB_K1#5}SHpPQW528%^O&m-1kU1?a0OcekS#Y0=v(fF-0qOz1E%tp{YlSob%1pbQT>c;?4@>BLZj@d zq_I61QXx29h%ODL1~}UV(ws-NJB;!-0d@N@TUOS01s44QQ`lyLEGiQI;)7lQP^Ti| z<^X*S7OdTTIQN0|KtQeeqHu(?`L}>Nawq~ImuXyQH*OM5#ZdyP$HTh}AU^>urhf3X z-3ica0rAb#mi{i+bOEv4?OqqMaUz-54t%%-plf9u z3TJswwHKfVW$;%c!2DZ+)sg2vM@WgXadpyPngZC?RfIcq=EvP z%JnV)=+>W{@pCQKbtA zLI75(stll2b4f2(@Mr2gF5O#n1FYEsD&~g`SYdYsGJ>C9!T<`IPimk&c92M8H!!!k zRI7&>vKd5@1k{Dwb{U|l0_w-JhyoVW1_7<$6B-7P&jPNiLW}^QxdPIW(a|)n0h(9A zr9!yxHUmT|$b^Pq%nQM?<&mp^Rdi86Vs{P(2obIzorh^6Kv4o3!@V&HpfUkfv0X(4 zh~J_&A^0Hnfs{A;vqLXc0L{HW}Dmu%hi%4TnFk_++E8=NoGq4T|D3R$_T?Xhi z7*C~LzvMb{XEXp#k z;H>F9s2w3GMy}#eD)(jtK!;Zm8(;8d#2U_e$ftD)uxbP(-dEs{EX(c)Xbqpv`v495 zjyIgjr@;~O<1PVt6Z(o(;itC3=C#De4~+6%$EC%wu?(am1T={1Y(R1|;n>noV4e8l zj)iC)E1)jqi4LN5v8Ybxme8nwB_KcH3xJ-jBW?Ym+syBIx3HS&8x90$oa0q zg;;wgG(rfq=Ce}*LgNH40S7(~}gc^tL_8Tppvu=1WVcq)*%wp6MBq=6?b|wnI8x- zB5mQV`tmgdoIL{Z%;80rK3++jSH{4$G>IfQtDM7?1@5>CBg7CO}&S zG?i~GO8`=t$h{!g{In*n5)y6;h=xw0DpE4djlmxvc9mc+s^YSNrob*0)bUo$2L?uWcGYR|V9UPhc59w!68mPRw={-4KI!lS9GK z^=QG0C)b@o0ZnzYs<`y`JQdJOgNWZaltixgRkyP4FRI`2!^CM(9nL00Mg3WSFZrt} zjBw~);t&GC&~zVHFp*r3g(U?NQw6e;pR3%#E${Y``5=rJ?~Mz0R?MnABFH+Ao% zLmXMkr~NQMPXv@g;15swvU?Vv!(8eyk5@k!?!CigaVQMe?FeT%ez<2*31k}2a`c{M z$PohnqmmHo(}MMwZ%bgm?kdsB@VUVF?Jsy_)B2-!XU<`UL$Vd@Em`g zbcUz(_t&}T4SsN631KkoFAfdh3Qq$x_XdZYd9b_#Xvz&zLlv~XTPsa(yle+SUso>(XYP@UEy1aG?{P(Ndjjw3_2}s^pqfKBWn^R^+~W-b z?2^FB$de#-duy-zT%;4-RzgWMf;ed;un^)M4)-wNZ@&jzDviF`GNhkCM(|BxB?v7N z5P!k2Jq*w)0eSKSLid`l9*`Za!QAMFTqWYKObOs)`$rt|pd`MG4FG9gleQ5s5ZBjS!F#@q90t}M0fq1k z3djS2_;J_30packgt;^ppj!eWVu=Ej_=YPNm(>dZS|Oko+yV4p_=A9ib@aXbuQy~} zBv@x(!xeO;yMc%`t-wZ;jicbsBt=x=SW54+Azo$+q%L1NO90BNA@ifaUGD^I2E9h{ zvL5i3tDi*2 z_)bBWerqc(wVCG(di%3eKwpdC1*owNm*U&C+5nK=2KtFsH?fGzTR+!paFydHRs1SAg7rvZu+&`Exk(h<_hBLVSb zt)|JA&6-?KrQT+)aRmPV?v#0fn+Nk(%bw>2@`w zPArH|vFGC6{GgQx>ujumg2{=xd@)WGh)5nQL8!JJcc}U>K-27N$fZ~?uS$qFW&4-) z52BjPgCiEadQ(8+Mb!XMxC1xDfi;q=9Y9$eD0^L>jC=P4T44wCVb^y zL%!0hBduq8@^;PnQF^|p@@ob)4eS}75cKh2?LxupFE(W0?egNS`RkwhK0rORHRO9L zuJGnOUzQ-$^yq8>-rIPHi5wr!8%cEWJe)WB)R5ktf#u=LSrPoqL_H7`z@ZYZi7xc% z0pQfm>Nx9hft>fzyCM-#M>YrSlf_K}f)6JK!)8wB^JNp>P`r!M`P2k+D2~rM9Zj%+ zMlne32-f5T*N}z@Fu;j|C*BX~F{V^N@mxb0KLrJ|Epc|m!XV4&j*R+P*psFH5 zc+Uki;j!bS+z?Vjx^xAHkY=3smPVNueAQoVB_FB-Cj(Pn)ExXkiC=-J(@ovfW@Q8y zFO`wTI{FzQbZ8M+ArI6{fVxF;v5)TDdkH9$2O7<~vjw!0O}Uy*25w(Ne7l4352C=p z?$Gu2=o&JS5<}v^DoV8K1XfYvQao7I0|@Ib5b`~sl?xE5fLI^z!VQQJu7c%#Q$RiV zHcM~a>Lze0ab~*-P|L0y8c9$cc)4oU6Z|o*E2!@Yqc82onMOW(HNA|v*$rYHnAR7& zbEf#zgx<#3_uxheaqJN`J*_*4H!!RBHpS`DAK<#-Sbnn4^c%%M&@zd~b(gzlQB20#VUvNkw*fysx7mDTkY%EOg_X6VE zr7aDWg918DHg;G0s+Rzi)xU;x>;o=sHGpd<=CeoxWWIo$c$ytP0AisJbe1Dr(X&L`El*8p>Lk&RGL_0!f5^&Izc9 zq_nI3B&`JSz>!>(?aK{Sbn^`zN!Im)Q`HxOB@RgMfHi6)sp$tDl#Jr7Ch!m2X#PGc zp#5wrR5X7ZGN~d@`(QAQzP}vKQ1qoG zqJRtl7RKYqEGm*ViHqd(baHI~+|R9m=Jn^&_k$35HTRdS44`S^rA!oDWOS?6p<2v6Y1fK6oH`$L4g3G zfPhp5LPuT{2qh4Tyh;<0UM+X+S^w>Y`Ec)t%kvzUzqR-5nKSjAb>`&gn}@lQdTN9_ z`yF}CO_H>?yqh+cuPf5DpH!UAFHbv}-;E@R4v_G%<oEc(RVP zT9@Q{dwC7CfLvFv-V&NAtNKW?TfT$L_#RDV^>s@H*?zZ4HR7d=qzX*XLA!W|Ug$7M zwVdGY>mc*pInjM+2HO9Lc6nE)GCM-HNt$Y|+sRzhD@}3-bd;sML(`vno*6AoX_K{g zO3XnTg6(IqS6Ukz zb~~&`R6ALYwbL~{<2I74%pdPtjH`Ug__;vzI%QUzUiUndzfc8>O5=3Tk8 zemk2SZ`W(c{ydV1LcKXEIWPw~urq895QjkIvOP*T-X-MZam){|4UDMl+= zA+r4AmT0P>p2N+)wS-ja|Lj{aOSM-^&I!`1#ZtG(yK=tEq-nUh2TT& zBTEoT>VV@Gi3=+&hmNy)nS0`0*(pBx(#_Ug7H;2io$8_Rg5%QN;NCJ=Z_;hJO-SZ5msBNlanrZT z!4uQnWxZupHa?;=dQ~^7*(=^9CGU&O=T4GIATwV#+zv_oLMrL8L#WJA9c#ek^)heW7^!H(vWr-E*aT=KDmS^vXN>TvVipA*7r1s~32-Dhh0ns<-{&pPE! zcu#hS5og?u@5v6a?W}w5Jz1D~KWn#sW_wh3OY{v3&q`{RcV?c^SQh0wQUi5mnsZ3_ zIi2tobA%L}(J!oaAkPf_5pQYr{>_vZAhNqU3yCXBO_dE5!T6kUKg~9%3=# zGsG$y15RxcO^B_DU5WjO!-(UF(}*d=<;3;G9mJoAnZ%34+g_Bv8R^{BCCx!BL@Yy$ zCB95-Kx{>fC-xx@A&w?aCe9@;A+9lTUDJMHhl2taq3X`Gzpf5A2_)X4!%+MHkHXaxb%4ouB%XHND9Ix>_ z<&C_73uLYkZxQWAyN_is@1NZbQss1L<`5jBt8n*SbvArFL7gA3o21*e2)>r)wKsF3 zNF>RxPMHBq;6iVzWAKkxbifL>eTlZ)ZMeO^w406E)($8aHZx#6zKGw&Q9HH053Yf4 zJk)`+?$Y)Fw1@9j55+Oqd8GaKt1CJII^3g!J(4=?(E-NMzSsDFTjGxCI)PoniP+9@ z749fE5SnLt1b4-KjyyTTbGQ%fkw?AuTuxb@!T^&nOVpnp9}tHUWhUOg;W&wC_Zr)t zMt&D@Kk-LmI?;|>g9SLL`G9kV4i|}6iPwqW2J2Ie<;pD z%u9^)qMS|(ktjxtCYBzH(g~cbx{BuAR%gdsaBln?&W{V+(f;;0tc#Nw z-)@4B|FQguRr7DkKMD0*<4-$<77bhu*F}kWs6*ex8}XmG&m(4ybsV{O(C05%RNEes zO~e|JL{c@w|!VF#kHc&So`n z192;HFYzGp1o1z_E5tj*zldS-p{iM;Jj6(1VPcfVfK!r0Szckqv+QfRq z2E-=Bmc%$>8)7`Ms~6=k>rSE)3)g*1JrB3Ui}0Fu+P)m;Zm(X2CwKB3aMqI8q6udcuGLv5*oGV9op_r3{dTiT z|BZ8XRUgFZ_!w^0P1`eZ3;Ch)ASbtc!cOAp-ja}2lF&L*SIJ+zit31;nxZ4v5l>?~ zK=-NIZubKDQlPhl?=pRnY3kni>U6Q$2DS3)4DI!`X#sWCnfh)w4%=62_GO;EZrgtC z=+}kl?f3GZ%e*q~$BgYul9Td_KC%h}PERK2OB_f{BqkBZ5cv z!@16BdvV<5Kk730CtMC^{9@W=w|<_4e0kGbB{{2*$h@wJxW5bPB8=n3eP|(d#;&f$GqW|0J+84v(JbB)v@hkwfK$4rCN_50I7n_VHH-LmlE%mh8XFPM zPg1v^sc}z=#zk_2mzgf*8;wiXYW!-G#;%(+cHXA(`gRlLQnP7?CK}2gT{i=qO4ryX zQ{#&KAzr?1tj3`=HQsqcV`LYN`{e@|Gkt2%Q(laa@9Y@oh|m~PK;r`W>%%7By`)5Q zsjC=6;(3i-Cu%%3TjTKg8Y_IGG3#oLyW}_e%s@L%X$-!pF>puY3qg8L%AZ@~h4LEj zRM*(Cd8kv;3=sQ8=!$hh!u(U}rk~SYAB{FRQ5j2#3F@o`8p97Z>@Lwtt3a<1cW%n%chFoPo^( zM7^qs&2*@Vx8o#y0QaK&mVs?K?mV{TIC)vD&zN#tR+*QXpDoAbH#>|;*m_(H9c(?W z3bysQS26WCrx~{8IP+_$W;|PtlPj-hTaN3GZ8>hZc?)DFu=Ti)v8~6=!nPi_7;8OF zKIFi*9JdwQa@=8T%W-l}_2y^Gae*5oY(4HTJiMiD5_z%jO)vq=h17EfE`wirL;K6e zBwqU(EayMZ1K-qkIsbWHEqkBLD&VvsG5#&>&>0`Z33yOzZGRs}v{Mhmtvad4ycq0Is;peEQD=6 zvJAHM$V%AOBkN*Yk8Fvx9w~Rf;@3vV`Zuer7m4H%>i#$f?W6EpcoIH}=ip8s>Gbkj z9o`!HZM=E~p8BzR6CN0tq=__}n5_O0C(c$M!@cIH&)_R^jx|r<5}r0seGl)$Ay4T7 zRhqBuxp83T0!>7bsJK{N4%c3$u7Q_)rG5=>U!i^jFI}tdhOd3A?u{F)R}WGLoDL-9 zXUV-)*5G^XFd2W2XX2xHF%I9N{Wsw0Th%-8L3|un-=^)qdY0{1G))uN=}>Hk`fr?s z!$WleZGkr*wguiOYzw?G*cNzWu`Te{FgC}Zt?<^T0~KDU8MX!9w%8VUyI`-tEBinK zzD)u616+BpKA|N1F`gjyuKzjrX@}`_n1>hObZowYY>xX}KWP7TxGy%}oHOm|`?Y;P zjy$M7hFcv{pAO~vKZL|(Ivm0`@biatfVOzm2h;0Qs8ruqXOqgtc zv&6Q9U6~HHgk1wu!glIluYxVByeZy$R2Q%fzI;sG1z(p}Dl!|Vr}eMuz5x%mS| zU4ynBoE_VGa3r?%;Al)eIN+2cVG6=#6;;Ky9$W|8dT%nhfTMv%MwjSII+j{Uo z+kVr`Pqu%6gcO9m1xUuW9y|lvdT=VX_25<5)`K@=TMyoaZ9VuPUSjIQGJoe3iL>{0 z0nXz+57bw%tpeZ2wh9~;&Q44fI4{16qj9r8b-ZV>soQ$j|C%Ih0k<)>h1|EXSJ0IO z?vB5e^<_3$e_T39Jq){eEVdQoDOf7Vdj0>5#MANu-3*wD&*D|sRxdYUTfN+YZT0dX zw$;m1*j6vk0cgKD5BF> z!S{-(YvY@NC`~jWQ72m68h?Yk;2q_(y%%m?UOgBez+>@4JQ=_HtoC1k1KFO_#Bvf* zcs(xsytZ${*I!T{!1t=E&EK9eYwU*?)j#8MFR8EKczjnKkROBB4u8>MG|rt}2TaFN zxMEH1AA@J&O8Dd}+Ws=`T1(vsPpGYa)3Y3Zmq>J`L!gd!NWd5I5PYnzwvWUY@I?H9 zyh$|s%%^xI{sRAsmmACe=hUpP6KtZxe!LqmYN+jp@rRAnr}6Zr>PvW1Gxc3;3*7R@ z-@Hv^3*6bn-u2&BxbxG&R=A5}Tj4f^1+$H9g}XAg74DZY6>g_Kwgv7M*cQ0o$-(vC zR=B&;!B)8YV_V@)#J0jc2HOhvB&-!~$N3C<1#a0SOL3p~bPcUCukXz>8b)FZ9R|o7 zb+Zk3;gCVHtjHMSoaY{vE@ zgEY)X1_5Uu3HzDBVQfD$IDx&-3}lm>#e-+)0$s*$y6W3_H~tgnnXBztr5a{7dG61R zW&0N(ktDShv(3xk|KMkFM5?w|$K7yUJQX*?wz%9D+v0LJ>=l>I_5VE*wz@nB+v@U2 z+?s0hB>Xp?i(7oH3%D3BTA^Nx4@t4eJi#q^!SC|?P2xwBkas&TPSZl=FSrE`lA^k4 zA1H4SO#f_n2rh_6;~0D$SHvZ_hw)XMU&Ot!{kSI)$MP}JC&qHN zo18DqTfo`4M5KBR?uWm}*CXZiw|Pc8NjUP3!T2bS#pm!@dI#EXQBmB~47A z!+tu<#rc=%0(^<%zf^yZ%P&_S#tUgbg@330CeBVp1G zoxUD!u|#Lk0`E;#$K%+g>VElT`GDB? z*~Ec9B!+*YiNW|KCK!!dG2kaSXuS5HgIA7JFUEC8t5@UanSLk!b*$GOaDF85ktUo> z?6lTrcol!rO8p4`hQlLujitP;?UDFz+DqXpZMD4`F51CZw*RXn#<$lFt#BspjyJ!f z?L+Y&w2#A$dTIM~+$~PM5HIhnUV}5@#pe3IokX!N+TkF6s=N9WKG{Zn5ijEz-oks{ z)b>Ad6+S`9RY2EJ|2SwheX&CIYSZq5QV!m(_UcDNA(zKf&HGmexEVA24%dG{+YjL3_%tq7Mcc39qUF?o;BRTqUQpM_ zkt(wO%>ooBG596*bGUFN^~*Q|H^(o=YI|qgnD&AA<>$41EFM9B7as_aNF~v?qE4_L zXQ`#$kMoyTAID!;P+!6^_#yt|U)r9tkUrzs+UjT=m{vy<y@>`I(&vzxChT-6(7fA>HixZ^0H3< z2j0p)lC!X`fn4kZr98{_|BFNgIxJ!p)xfjZ1dZ^1o?&}@A1B~SHFN=nBiEFkW|jDZ920!T~(Gh`IjD3`+1if2!$_ zT|U9&Rc;Cs#5C6dR^YesMm+xwZQp_SwNM|zyJ-IzPpAD_5!wFc8Bb)uM|4>9nGTS( zsJ4%pr!Iuo&R3Vm`RQK`H^i^wjlB7M1K(%7P63mUXS|Y^;REQ9JYTo@aO|Y$3@6~9 z)~Q{5ZlihuZnIXs5-<5q{XJf~Ngen%iT77(A`^F5qrQSKf1`ect1`e-#dHmoU;*;t z5v#O+N&F%GE8~;`CqDz3{^0>O{OaLp=tU$J6j>##@Y& zJQ zxOOOuQ)Iu8ebcFm^RkoH#!p9Rds95Pl)4QL&aLi(SIF^i#v6z~FTwSH1c_J%NX93m zgPC9o4lb=u!R8`j+P}u{%SFfdJ3KB)y$>(InRr?f*Z->|Ml;|&JZYp35F%?Pw~Ty| z0rKJ!a=4lqmcd`qUKw9zfokK^Y?3B;aA{fpW`K4i#xdY~#&Tj>`KcBphSGk5RXPDb zz_V~Jws9)1gV*BrcqdK^%+UonN+N?za0XwC*7i$y8}Eef;SYJ|6Ds}88j58T6~zBy zyps5^OlO|(b2yNbRrCsp-ttn(bZCLMM5;Ss^ZMSj55TcZpN!LJpN;$BRGf_0sRK?? zX0V$M4H@tl9>OXMxFx=dJK(~zw0|$$H>Y|Kj%JgL!QJHyYR3Q6*j)d&v(tS}hZmEy!wPIp(Pn}T zxFJWyZahGa7So=A%|*!g0)EI|e+v&PqwQHra{bT2P7x^yvlIO!9nAnG@g`0*Rk5iP znD%=3eb!(ceu4IGI28}XzcAjYlIHp!4w^noc{%KV+&B+TzNN#2Rn<1-eU>ltv>H{A8ZMW4xIL-FZq1i=f8a}phw|9%T>bX zaz4jCY4_OHu!z9RPbQsLeQxY?OP^c&+}Y=zKKFal0VnavgcI;N+2^S~&++*SpO^W( z>IuvKvhIn5{3S@Aclf-|=R-c9@cCz-uRLzEzutO0A%5Utv4nATcW;{PpG|z}RzA1&xwFr`d>-QSNS{A>(s`XZPbQocH+g$lbjyvt zbehlmd_Ls!37^log?EHSN8I$KAG!@CT`7BvcNY0)?dSEmpwCfmvP@RzSzo$}&ozCn z?{ic4k_;2*=u7wTIl<>aJ_mdr-QX zmq&&?PRQe=+jLi0_n^D(s$F6E+&#O(QreWs;y7jH@w7Z* zQnR!&GqJ|X*R0%A)6()SO-<8LT+3Y28er@K>u+8Q zjw9V$?7l0|=OlsNeOI0b=(P_8df-)oU;9x0j&%3D^_!MAvQ{aL&yt*_Z6)`lI?rWS zMeb@Z(H1^ap1TZk!-)g0d#Xs};Bm7WU5MJCv^`G1q%Zb|KM3vDOU$t ztMpXzTubEl)IDriwLoW-$bUgY2GRUlrKM%?Ea;vj={#dz5V>0w*5I?qy+tH>r{qV^ zEtG$f22#}`xvi$3_cDdn5~XK&=KtghP3wr&vV$rFI`4eYL3JQZrD_UU8A`#)Fhu;n zKm7l(d|cC7b84@H>eTYV?s5}txNGR;9zhTGbXdRa$ZSi%Gbc*rp4znev>VjIM#xeveRBCF*JE-dy>e7u8m9A_jWwD;BcGwpK#P!7cvRjK7DERdlkbM5QP*Q~a(FxU8tAgdtR1tEkrzxqn0}hlhuu)!+8Xg%Qd0wZrn(hyeQPVfk2u zhpPwVq*hdw)N-;{9+vM!-1Vq9g2=N-;;NBAbd~3l!}8;{i7wqB<1+XgC5u`ca8m?F5f4+#O*F) z`B7XE9kEj`=nxukW+x8k>-36ysTIFiE<8r!_NP}oPObRK;=WV&7NH4TWa;wNAct(HFA0Qv@CUh5T!$ z#E`z95LIPoOA_>&RM84m-KRx)d+^36(|`EJ3E$3KVhS0#M=x%^(Yu5``k@}+LEbol48Phu#I z{ao&uIFSDJnY=7<9DVCE`DWtW7C&v{d{15Qb6NBBip!Q8+p6a!5klS8%L}@1q$_vG zQ9WAGO*`cNJ=)QicgW>Ey3vQ`>W_Ok5qj{G>Mwh02;HJ>;`KajWenl|va%|ylRO~pNn55Tdzh5bn$F*Ln0;kPzuaszgO^3}$EXBqG< zwu*9H{;?vSsTGGTC*Q}Z=x%xIeR*2%8`NXFJTWEnne*Wes@R`nzXJiZ?E9;>mN$YA zs}JE^dWLN$s$C$JK=D0`;RnPecmeJ+^gf9D4125cblNUE_vuByt(FJ(*+h?5%Mbf> z_1j*Jv*LUo`q+gQ#`3!b3aZsi=$rK|9R@SF;I7Nk*P+4KpVKQt{|<1Fd-b2-=lCI5 zr*GbZE-Qy0ORH=a!uv$+_~b2lSN~Q~IRWTznu7m01dZ`rZul&7c%^QZ0QimF&5h2? zEwV%UTpG5edU5)2La%I=&kqBGJ>uPFi!Gw4MmtNW| z=MG#K;A&q*!>c4T2ON%N$~rlC&~xf#z78@QpZ#%UJOreRaFh8BOSexz)3? z<~Y*wWpeH0NSan&-G0h0LMx`q*9-2`4@>3Cg#l_4aj0%m)PvCHm&j?wf%MiAxuDqF z_3#pq2}j^e4LJRTZv8|N;$1$18rU@-z*7r4XlJBzSbgl7t0~fZI0Yiq*d*D z5s;S9BOtwZKg0L}hx64&E^8i-wJL63EUz7r-HP00mr_qtllxi_<>oMvdlm!pG1w6k znJ`<(`1i9=3N)5`TKI8It@_t75aC^aVK=)lYr$@p7yb=T=^`h+s{Kr82&M#RpAC@Z z5Hy5^wqqffsZ;RWhx;W^R&MpbqqX zgX?LSeT_dhK#ek`#*yi=X{r|`i)1!6fL>ZCo2Lf&9bIVG!CWkkaWoEK>~#6|R3Ey2 zq196in3S8eUpWmnlt*y~4c@?OU-l(VLJ_di}Ph-v`_qbIZsCBQUV%E6ZG z%2V3?0Lp+d2O$7G>I4OY>k1Bnf;GW_TeP5h&ooCu9T&*omVZn8zaX!j9!%T3P`!70 zHxm0y8SlpB<=rVRpICO4@|G`KIsiJkY8-`zlU-8ID6G0{X;mi2&g?~p=gDO=<3a=T zKp;gszPva>g92?vL{BwwYyU*o9#>Oa;OXxGvQqWno`UCN1TB>4b|T-W|TUOkPE7& zQJ3fB->T-&4@%^TO9MShCMrEv_Bkd7Us58!zBGicn<#&^G@+Yw2?R2iLCRAqE>--L zS~=jDg$qkn`^$NpxO2r^lq@k>sI6Mz8roG6y#URq8Q^5nfQO`;RW%hAicXz%fI zzh%SdUq$koWee$)an+&A*TCH6R_|HyNTNCV>aSQLp>cWJUP+@KmvdlpzPV()oByt$!`vzLng?dzIlLFJzG70?HMi2ORdh{_?4^U?S6bLfA*8x@2F`J*9nYC z#r|DW71<5yRNeN|#g25@7WtE}o-wWTw_43VXL75FCJ?o9#R$&t6I;+~B4WxcaNSi2 ztCP5SLv3q18MGJ$2(#OzbBX?;qfO0gE!t7Mjf@YiZG=G^ij}Fg%uECS3$}IJJ2?3< zAR^}zk#gsY@PkdxM%}H{ylTroF7i(*`Qt?X}pr=Gq~)rgh$9r_r?2e0fgeUFI!Txc`So5S9Z93dSAR_VHe(VURT*? ze-ynKEvM~|_8SaHj0;oqfWNht1AoZ#fV~H+7PKJkZwv0L(ED94r&`!10Q& zQ|HfYqAJ5BPjx3b;NT!?>LeE*JVcjul)D`YroV*96ApQ}-wNij_vKKann!u_I?9U< zb%}R`IYc9+%E87?;c|qpQHN%vRy+jGT}iNZHy2Al`0f!R-#N6OKA#}}>zh*QpCHE` z4xr!1%YzT6(dc;j^}|{8%RssIa2HDA<*rBO)5<{kiz73rOQ78CXsW+^AW%@La@nP- zSg_$Na`mRAN{2ZAg|EqLk4Dn>TFXa|2GY5$<=aPn-G;`&toDRuAMgam*e_1@`__j> z#mSw%%?&;pi<6+)gFh~PZXw&&L!bp(6d{VQkCk_Q+tKMO=m1Aq(prA}Z7Y&bA;;U&P5$!p$0O*se)7A=FVUBoy!^XL zI;NEz@V&ps()L!?v>7W{!~Eny-Cd+pJOg7ch|JDoK32& z-AX{@VK6U3K}$?4+2h1Gy3toQoS5ObClW{GJmC%b?ujth51VOKl^%0HUU)LHMH^8h_AW2;kis14{?bUtdG@UisDid$qN59{|%;Cim1zQ)d`! zWLx>$A4gCUCWoEsNmoS3`KSD-TU&Y2sS9*zXm!EA3#qzB(pI1TxfxZTrrPS7Gnqs^ zn`q@{&L+`w!E(jfZuG-odEeP_4tXHVmf1~Z|6jx8!RPv_+pDzIubvx9Xum-D=6Nsr z#bepw*NHSNP%in^llFLAz3A6(3C#_VM_ml|+86+825JBTQEM6h2Qa59K@O;1e(?yQ zz5V0~msZeAt*Y-_YD>Mlx5UZtJnREMF5qS=XW~fq`p6xx>_{lXOc1zfT;Mhp-C;};H$f7wIu&`wVL{Q%dgga=r;3?M&RAMll+Q`W_ z{pG?N&UD5f@~j&^j&4ehMRvOxAn&}PQ~yw_lF#0VP#=ZgrZ*!U_x`TojOdFcnqNt- zt+lMF<@##z1(dh^!p-N@2~ha{%{+S7U7m0&MZM&)O5S*@I_bSz8daI^3~v}&pIerm zk0Da)B;Y87+x_n1*2f|c{(!*8Tli?PG=~=0?NWMAlAHeiJe?-VmA@A^-|-M?Iq_na zkVkTpKZer}Z^+O75#ci95mZlgX}kM(m(d#24VnEhmFBt1E_WjQ2DmD^f~Nbsc;F$F z`}%j6QJVGFKHiF`k|X!+sX>P$a;DAs7FGsxuzS zk$?80ZC&J&KU+~x7rE-s;AREaG^$b`7>D!ZYx2%NC(`-N<WK$6t{<-wUMeO!C-!0rVS_Jo8?PX>N17rdTi+b`NJR z)h+msvp4*tS806l2gK?c`q`?4^`gu=QD&1U^S)B%fGBew9zSye80)R_R5)&_Chdx*0J(c4A2H=X6V_hV`H^YZrl&jc>Ki(%-V0Shjc zxuWBkYI`azg7mtkq15=Oeexl;^Pi9*+Kr{ zaT}WJAU}Q_N6i{Jt~Q%$wDPLja+-MSWmnRcKC5{-kwnvC?aPH^uD`5N%zS#qUlz{@ zT2oR&Dv?Jk95{B%M;}5{q&q9ds{ULfbO_ zc%Do6SD^R;xKjO_N|om_((~jgHrJ8#p^txH2ONQ)M}9Cra3pS|)ftc=^dd!25N9e8 zUO1dWMA>gFv?=*5Y2ly9$JuLPO%r?(%I4g!=?-eI1_DbUE4@m;7Gr_S7LCXS{4lT~ zi0OBc^=n45>ADN%_nVRD2wnbw1vDqyeSSZ#QQb|UL~>aG(*w3h#1fz1XEn`9VDsf5 zI;k!xr;sfp&NE*ZvfAN3%(7+fIrgawnL^u~V{KeXJoPxoGF{0?`sgnE*p<9bo1bOb zZX}Y%{lb>Hk-pUU3p?dTV(5-D%&7$lqASm^s1`&=OV6;379@!}9Az)HfQjmt$3BGo zc7OZ~+)8yR+MVZ;t@+`Y23VJ=`Gx<^0;4-#vkhRRs*>QA40CZOo;3C@YvWGhpUF6b zVg)hMC%~K8$AFKk=id)3bGG=OMm^gP8&@?=EPmo4z2aZ1f2pkn-EnzgF0cT&whI{z zZErcvHn@{lI#1JURnJr=-p9Rr0<~~q)i&kDvX{Y6kL7u@?l+m!LuDM4?6PZ|YQfLO zX0Y-4FZk{I2aETD zDG2+6jq)OcX@^tneJ|31?*2DB=S3>%OFy#0mZTMZ^dno`l60iQPO-0Al2qz?iZ$~l z9oud|OH$?hS{AJTa32ym^{W>sB5tadeWOuTCeFo0-p(Icfj1f5cGWGAE8L#9j0W~r z;3h-Dpc*T#56A5UTOcR>(R`xz!!(Tx|{1BLoQrVWjoX|)F`V56Wa zA^sLi^dY`9>=qm4L%KBW_XGHD2Us?_{>WbUA;X)WKZ*KWYxITn+>sNk7Irjf@Ga)! zOG@eUH_cVPB%4sp0rTxvB#O|U*IA%H$Zw15=0W}>jJE#$Dzt|SsCxi#8)}KajaGd( z$FY}NlcDshtLCe%39Q|l*Rb$F;!hu5W&QBia@Cv{NR~=HbHFxy=EAMhP0O3x_=*Ls z`W{bYYQiwg77OW{mN|9VZ;R~YOXm1CM6IUJTwq-yh@ab`Us1nrT4rxSLzvL}f;lgO zq!HTVJo~6EnM;rTV2*D`QYc+~!aSor$tPa_Liw#qIE6nheeUrMg>O!?2T@?&M*VCa z7EPX2)4?CHkK@Q1n)Rc3SO;>A($7w?ULDE1)bRs$y(1~4uYGUM>_l=19sZs9%g!W| zP}k$EbypHj*)f*Zm88-1W9F4z$x1>`A7yP5$x@nrlzo;6mcr|(`Box1OK8bq^YQLv z9Hs3KnPZa4azZyAFn`^PXbFAhfccx=NuYX8 zfY$tDe{d1Ba2HD(2xZIGn)?kRUXQXj$q|n504L*~FowH=Xqk+dP!~NZ;PU77PPRJ$?r}Jd9M( zD`qxwIQf(&n^}tyhpOu$eJr`^;V7B4dM^e z^)_HEzpiAX#*$om{}r}tEHpQACA%<|bZAwy4Kio9MzKt-{MV$js58Id8&AiTEH;z$ zqb}RbGct)Yq0>JySBxVw32n8NX`dxm9Wy?Js;v$^u4Oe7h`-ru0{NX#;}X_dPXbtY zHp!t8GONlaNxo}03$edxN!rnNp624o(E@p#-tzN>~=8#a&=av9kJ?;R$ z00G+35R6}9&dnh`K}MFdcXELr`U*32@F}4mY+^scJp4AhGns6s z?cZkaO(C+Ec>|O_x$|+Yb>{`je7eCrv;f>KUG^5sDFqM?k8>?8rG%(dy zSDE`vBf|*2P{v*>CsB0lZT3w$_>eBQ+4XV=7Mk2<0n_36(k<2#ena-aif4yPr&0x{ zEKa=g9Z;G)zt-fk=mUV#a=uNi^jv?7y#OV9&fz8JC?%IFC8y04rLuW0yxYNcY7DVI zC(o^gI9oNXBrRuuYNd0pTkPU=k{K6c#QhN1)pq&hRPy}CrfHsOIY*(F!#9x*cyGe% zJMTgeHbg8cBP*Rjex|Ux8Z?vm(Z5%)!kHu`=wHwdIAZi#+W>@Eu;1c>#M=H*#8_DUt`=QJY+tB%&Bk1}7aBte9Z z8qS(mkpa|kI2%_5;p6AS*!xvP7x-)z?_?@M z-n^7}6M8Iz?R$v?G@Ag+IN@eDe#pSc1hD4Ih!cHXZ}weA`V+cn4x6}~jA`BrWB~ow zJxia}p!e(Mk(TVzax#JXGP~YCb#G}v)Rm*B$m$5vn?x0BK>NX z`Pxd-4yNK+=CcX{hIu*comHeg{r3!ZauqpDy=Iu-Vq`0&?&WOws}Kz4O*7Ni$RQZ> zS$6bwa$LPPMPpvShFm2+s|;Z3JViKgmg9avToVP?S>O)ZmkSZNFYU{@ z3f!mmxJSH?G7IxrM>;zD_lDgDIup0%7nHKhb!1_?MbBY}vkzGA011Gvv_4-H&-<*; zCnR~<5>Io`dNNC*$I{r^cOWo(kjlP(2V}>wkUe|{0<&)m*uagXGc7G(FK#4j)Ww}O zEPNC3534k=N-nQ<&4cAj_Smm^-{nib?Am z`M?eg+;Cwq>3Jv&uQSrR9DN?58_(nU?92CH1(ul2ZoEhOH2o8#k;e#G`R4BLqY)pO z%jRr`@X&jbdCg|ho2WN*)UXR5ke(i`a8~ey%VW!x8Jw<}d92eG@*dr(H(%I-VU#C1TWiLd8#5}EUMFq*!J=I+}` zCk^f2kxl!Qyh`22GWXBG9#0y>PJTv))7E2H=E zVeL+m?`fRRsvjW0`_bDx{0GuS^1s}T#9hh7#4_w&gv!ti)T@X>&_H?xb zKtTY!EuIL#n4RG_cDGChc(TlMoCJSb&XHB_zjz zEKH2OE39u>0&iqV9P4qBw4syZ*u;yZZRj7dTuv||`pe=U3lWUi!wIx}3P%?3fIz~9 zSoX<9(v`mI#D2d>45r;+vtCT`UyH}UzO*!%|4=HswJV)ZbFJkq$c#PsVv6$y%uB8P za{dF%E>p5!ux4+nmkrtsb5?87TeCOYXV>(E;|vdC_@FY};H0HxIM9X*X4rMu1+yuR zIHXrRu%z;gJ=oU6Cd~N~+2_-oR~)xBc6XnObHKC8;VUZ#EVB%BWY;c{X!h_baZYZQ z_PBO&lNS%o`RcUGC*RHgtMfG1)LjIKfqx{`<*gq|onJU;^mF;7Cz*f0Yngj8kM4Ma zv#>szMbr>~)A*Oc03NjbID)f!uQyWcna`0}>omtuh`W{#uI_hRE)~ez`_k$45d7Sb7FD0&*9uJWhc}cuzYT z_?TANF?GRRV~@1?`(W##*3vhF#a@RcPI3avxK08G?&5>@i~+O7SL#@1M3mAuU!Nmp zWw0GJE#Lu>H-d2a0Nqvss}NDzo_%qhwDSBo9!leipAQ`LIm$9MoZY-mTDBY)4urzG zeG@ofArduCmIYzV{{|^+*%Mw530}$Vco!Hzc5cho-5{Q(K;QvaG=4ZI_8=Uf=@WYp zyZxfWV>l*NHpoW*^C5^Zc1Mo15~N*-ur+uJK)$1kb;H1l*O6*T4MXzatme;UnV3EN zcfJ}wHbn~YJl>vdy#?Vp&1Oe$kw~v~y?9a1xY+Lmzp8pM*W0jsE{R}cZ$pGo)Qi1% z8+JQC{Zrzbb6@h`S-WeRpb}Ny6-rdlhW&h-3^M&SQv+w4AMx}tPgS!JLwPFkRLj#Q zJayt}GoCi*sVh%g@YI8+UOe^YsV`6ccpAV{9Z!RJ8e-x<(}A;0IMxjQFodVWcshcoqj)-o zriKml!TENpHo|f>ml&40XPUUI&ER6}epTQqy@$`9~&f)1i zp1#1-g*<(cr;B;Igr`e+x{RkQc)F6Ot9ZJar?2w#b)LS#)3rQZ52>j(bOV2Qho_r( z`W{a=^K=VOxAJrwPq*{*6Q1ti>1RCM$*FmCnnFk2p67Zi0Ulj0dgii_hI>Ltqd&D6Y#qTs|5Tu!gpG7POL-NBH%R$pBC^d2p<#h z%Lwlg@N$HA2)GL2%>u3f*mPyBcvyfLD+N3k;THuw8{t_3o{n&dfXfih74UNij}mYp z!s!CeN4Tee^$5ocI1Ax$4x9YP;e(&Z7>%&2fQKV233xEV_q~J`Abd^0X$YSaa36$E z2sjzx0|HJ$c&C87AiPz;2?%d6iHBHxSS{f82rm(E1j2I!9Ez|}z<~%)60kqQnF97f zI77gm2&V|x4dKoLc1Ac-z>Z_^K_?zG2zv;aAlyX2e@_GWk*ClCgl`G>PlPWD_%_0) z1biLg!=C1;56Gdw_)f9$y6~Lh!oqx`E+!@`KBt2|M<1il&dJT{kQ1Aeoeh}y4sr2$ z*&P$Ib35jCiiz)HHnyTVV&3dWhq1kuH|9*s4UdR$$}29_6-7d?r6!{;zetx~l9gX-2rucXFE1%5 z&eexQ?~yuVX_-DELYG@C=*TLCUXT=BR#C352;o>km6MGIsOO|FFz5v-N`h5EX3 ze7rzUE{kkK9aBX8i27BZ=Oa~mur}D$U<5i0)AEgz!h=GfT|rBC2-*w#P+t=epo@ya zkr{bw4Z56MoL>|!dgH@4LZ84%>;JZK056qdT_I2D4rU}$VRu(US$24Aq^^CO4HW@h z8QIF2YM+e{BB|P|R1Z^`KUE)YD9wq~GBAfulpG-Ut2MB27Dn9es z#um#;i*Uj@iBJaeo?rnAhP5c<^P;>d9j3qyoE69b8NpOR2N)m&5nUfl!y_-G$KKQFt#Oz_BQ2#v|w}gl_GU9ipZe2K)brcB%LVOfIvIu)u)wb zV9jPWpqL4l(TphH1Xg(4L{Q?m-P z_%n!9o{^;|P@iT>WgvINQ1(#=>fxAgur`?3kp{DICNg7WHL4-=d6NeTzmq7Zn?I#_WQz`9^)=ICkDh-Py|I;iOvY}k0Zc2oXYZ~N1wJGDUxBLRY73DIw_0)aUTh!ZpZUfa2^W(Q^uON++ z4*r?D9iXLZc3q~9?1OLUy(Wmnf9#7R>M*8Ttks&29i}IU0Gk}6`_-(&37{W>GLPnh zfIQ%tAySveZtar1+20PDChUz9G@f1jp0;G^;gR~W^9V4}Ahb8R)<(HIB zjw;A1npl=KQIDX@-IA4zl{~uEYX~eAN=cq# zr0nw$)|ZwRmxe?5*om>y*eLsQU`cpa#bw}f zxEZm}MVKXLO6k0l<(X1dGy7~7FiuMHwqnr6BW(R;Ipd`Gxet>oPSW{VYg>O6 zLx9Z0p?R}^cUCt;8oZdxc&V+JmqA&Qr+MIbsZiYx2Jmch?_p_!26Epy)exHyBnAR5 z(5MIF4l@xN8Z|YioNdjL($%OoU*6Otu$XM=A}cwjZmpeah>MAV?dw2I8w$S}ewr@u zYaSe=@utk#L*wCDQd&G2%*s@Qu`D;g7#f2LDQ34`@B7G?Y z9M58Q1S|H{__0`>CW5)SYQkBvt0vyDOH@o$Tx?8S9DCkX(~`un^E!=}x3mz*iI8biy11W)x!)G@N-^5M4lIgtKU?E1HigE-~g8=Fb4HTU^Al zrl>uE+JV#6-pt)3C6Eqmph=1$vH0W1Hkc$&635O@SBH2i)hFq*a`hm%1^PmLk&$_v zmEy;Y1dmue&CotJE+HOg@J`ceZ>mJ|dmjR|7QXGSi5eQzPJ~tm`{%M7I<3L7KaW;<1kego$-H15@v=K(hqeAAkQr)tJVhNNC znEE&tJ5cMzu5VI9ge&B|E;C+4W_5^IKAmC=_1GbpDMqan7eO&RMCBD^O*BLe=-XTA zfY;ZB4L9fqP7o!4hE z^CZ7scC{2DCuNmpWx+|qqNqMHM}T42Lfqpk8JBaDIgShKOn0J%x`X=a-+To zrNNLC6pJE)6p6Os?YrbDfnfAyWUtzo1=w7DiE&b-E-bNcegSkUgu;rx!d?jyW1bLw5bN6f0pZHn&Vl z^n#fLdbmH%Hq(GtkJCP^1itHYsl|<>e7(;1A#?Wrdv6LY~#J?%X13Ka`m}7=to3# z`8n*$Pf{~hdq!$%;^li8z2VdZgW(2ae0T1G3WqB^zNNL3Si_ZFt8L`wBqaGBAgniK&EjJ zw`Djw(PRVRG7D>RLUK2WSQ7$hWoBW;$7L1Thsm-{ zu$bS5lay)9G%92zgRToxhC^&b3arM$YMz7~j24q1gxsDf8ACfLp@dLSbbnw_K*Yp! z^0ltjR~U+N`1+sAJld&>xF{#f7_Oj! zL%N`dZg!=t!y`s_^T6zc8(E}zL|Qd?(5LWBuq$EQNXLBxUc->^osGCr%?BZbj661f-a30`dI^up}o0s|L0?sGAo$M%HvRk9Tq ztVGu_V%qZa*wxp;{ep$U$i0y$kGBfOQx~I@scTqqv;xnfXKDRlM~3gFbP%m8Px0)$ zI|T2?ewHK?kc;NU-i!#kVFG|7cGfGtene*V{Z<|!NkI*amVK*MgH_*t z8ZTS5s1YW!-5Y>GA8e95+hHZx?(AC%3Yr01X%LLqj2aK%#g-w81Us}<$_}kZT3QkJ zIM$FeU$4|&&6ch}l z2ILpz7iJX<(R15mEnP|DMIofMu=fkUXy}N&`7T=Lw?SXvLaxrzV{@3&J-A4hySJ(F28n@In-DR z1ZIF^<8%t2Q8y}KLxjyQ72P?pk`o#a)_%Umg?;l9guB&qB_9t6TRSKgP${QNVq4}) z0Vdd~Q%n&^Hju7Rot~dvnpL-MP%3c~flMmGy`R3yf-PM?RbP;vUo_<@G%D7pQH|)# z!!3KG!WE{xW4zc~ej+CYmPbVsi-TCty&At}_JYsazasfbXua8zy&8Y#xF<4Ql7eh= ziL%fBepPDi1LNsiPz-A>WHbo!0Ep%auq3;&OB3oR*wR=D=;+oa;PBE_QUr>(!a7{3 zq`{6*Jt5>)KZ4yhX+6UX#@?_GWltSGL-!EDO@;L)h$bIJE|WsMq1{GufjHjvpG@-L zO5(g)@@Y}8N3MS?b+r`nlmeV2w(C2MH`6^?&g?4>P8Q6ich5%0~0Xw25ZA3REH`&k!x38>SG}JnfYU_4RBJ9WUjhP^B0Y*Rr zDS9KUl{?1w$~R^dmqHYlUyyH{4jTiYH-+^LWqmI=u$Wg8Rzq2z3g)r)o1~VW7$m{s z-WINwO7t z2X+~EO|2%kZZyj9pY)yFyFd6|a$(0lqEgF({OsKPQrHv^%ghXemv=yDHw-Gaey`~f zA-D>ruBk^Jh1j87GNYsl!#Zhj&)4YkU-qLLyw%F4~PE)sDeHJb%)fStAS z4&X=ey;h)IKB!6bfaKn(X#@Lo9o4xbZZN}wjRh{2JR}TDcm>nbDnJ3D0ColHFT?FJ z#Ci;^k9C#GIc`^?p;1a!mb@+v*1SBj54NjV&nzjX3DzybtT(p0c^38%8Zqy<-~^eo zN=W?`5lW`uul*ShiBR5Q<`=;`4`aCfAi!$2Z;u;=|Ha0HkPwAa{}|#l8sXR*P3s(I6?8*O!#9S7 zNw)G5_cg@Ej#WZ>2lF^HA_kXI*!Pqn-C!wu6@!VP64)=1z#1`cA-5F}58 zU4@h^5b-R7Uc@AI@-hTg?ZvQHq0fa?wjSt&lNjKDO+0`VEnw9?<@%g5)E-!^*cMfM zfd7r-`yX1hf?T+3B}uLRe=j=!x4pA(1Ml3pXBwgxFJA2T$^O|lHC7A7#;Rf;`iKW}(ESRNS2yR4?V^t8ZQr$Z{%kEhed?^$&|ZiI zc9#Y($m_XGTZ@V>vpF*xBf4_uGaxM`y^aZjQBR>;DG4<5@UjEn#Il=q5tsKVnwno) zT!iaByG=p+8Nl$2yB~PzRbt2n#!pcW18@Xi5dxKsQ6b_4!E2OFUZEk+K&@c(xnTZn zuLSEw7Oe7p$=SrK0&{S+i~nbqW)^|Zug53rzQ1BFk=1ohN-v!y**TWY8A}KYIWY;dNikgt-AdBrIq%vl3gE4X%h&(wF9eYp&Zz{u&ZL9 zk6l=0##XjL7uI|%JERd?hvc;82Y28lL}LZuMG{*Vu6A#2fK4Wh5W}a66D1IW*xu&A z{IkI?f>TmnZ_IRpH>ThXd*R!=KIjwqGA|O*y~_+n_;JV)2ps z?4kP7srfnZ_N=&kdLt#QLkx;^GVvF+_O=|5fCH}K`G>~FCki}02S$O@)L;;G^DOEo zBVt%FNRoKQJ*Kom=(BE!y$m@6;QUM-0?VZ6;pFplRM0wnMzO*8B;)wL#zgCzXQ$ab zAO^l$CxO4QHr2hI{l793CaYZ%GhOeU7E1X4_H3BA9@U!?>x|edjxt9nAQ$!%^27}F zE$>}iQa3TlB_(j0DnBpZHVZ;N>n71uSGbW`R3`0zab`^ajgtH?>WHbHAU{P({ugJ& z#N`f5M%|SBH#5@k&GruQIS2himgL+}&klj#z=21C)Cl;9SD%w$OUVv+4h5OY0 zCO|1g`VCJ@NeY@7YM3p~(!trtviw}`U!l;D;$nXMz)+HvW9KL**PW??LjCpArxlmN z$rs^y`Ed^0c_PKaf%8-#Fu%nnJf0Z@rwKd6AsM)g2Imh=p)*y6l~Ml`fXL_mo<}!W zQo%(dD;px~odhyq>AE8V`D|&K6#X9$N=-N~#SDZPq+T-^1oCrL7+mo9)7C1FQ0(rG zz-EihFDb7`*p`J-OE~@~E|BmF5Gai0z&PSFE5WPkJy>UtwLt zz{##gGdq8wW6!-Od5nf=rqLeidzb&BgZdR<7xSZsYIiup)mZaSx{`nF;K?dt2~YwV ze8f2-rZd#*(KLlSpb@%VcZA+C;r&mmpglJ9%>c>ihZsZlHB>0gN#}uZtK794VNn|34i=gnjLLp=NCV_d!J>(;n%im&d(7fOADJbwOz zn~jDU4bC;yTQ>`DYv8A2q9)?iG~43dgoh6s=?I)|o8a=8WZ1Zl3e&T%I1_@0$i@ICo?tU-7uP{J zFOEk}3@{~1|JJhhJ&i0b#bY(rm%Y}5{A~9}aHVNfjpULf7UXrd7p4_?{**;O4594S_pgXbsU zZWElMR<1NyZ?K3QzT7n__bm9~$VeR=yN9)}ZEp!!ATZqNDeFyfiiqz%*CL^7~W`cR=Y=? z*u<)TEaN4O7aNlb$+4+$IO4!0IK6GX=3$ixE>_$sA=BzEs#qK0_pb1s4f+pcD8_ks zdqq(QtHFX>-!@H#DFE(UbA6Gn#z5>-j zK=y=P z;U&dIz~sc}dKfm?QR8m1*OR)otV$xfu`(_(Iut^6tN4mMB*S`VLSP!2fD&=nQkfuO z3xvG~onrr<3I}`@-vk>a$}Tx*U|1LoZ`C=;ucKg{v0kncSc>y%pg6e6Vz6D>#Ndd(dT8smpQ}>APBwqPBQz~S*aJk zW>Bd5kK;2a(V`fjU>SB$0tZ*7_k-iNCH6XySZ~FpgC}uQCMigl85R<5mm5=D6pWOZw8Bca#&B3)E9WWl}M16}3;MOweIF|~zQvo*Fmg`=sWCL+F!bVR6A^yIN)H;}ZlVpQIUzlAm zeIU32PEb7rJKjd}cM-~zhu1z}<8umJn}*fSpVK6lc5qq|Xyg|{FbB526=-r<`9dUy*8jN~tbo$9!Nm&5CsVXHEME_H9nch2@iag
9oiZ+Q`(HR&FWoFv4>}@gN2ju6J78{E5jIdo@SXf*Xh4WzuvS)Xn z@_d8Q5RR75uK9m#y%$)@q62e=b1@@Mjkqw$~pSpZ*t?LAZO_-|<5aEup zCm?Rfb;r9K=ucrSubkYkXWe-Qw;Fg1T`9<)ks@UqPnd_gqHs~5xTs)y!_r0J!dr0z zfV;7Hv`Sbb>jMY~KbIc5n)d4q@hwt^?=bjzZ{_`ky*dMaEkOC=$htW+mo-FJ)*a+!fu6AKP(xeui;@b+qOngORC72anmV71Lc;(R) z>wXAqPx@ua6JF`(@nb=@i}Ji1VRKNGy5mbNxPvJa3*9W#sC&C*Ep0RO9B5!=um)e! z*l|#4k@d4kJ`M%&dL0U|+Y8`)JB-4Cz2+-9wzMuO8xH2B-@xX_T!Q=e_EDkI2z*_P zI|4EE#OO4*@7*A*NvwxclnOn7a#yy|s={3r8u&{Ruv#d{eXQ=F&clN=_sYl3k05Sd zVEv}F_EZZM%Fdq$8#xp{|4T z@(Py+;B-`0Zmz%^vkX(`arnFjjq+8%hrSR@f}mRdI#nXY$SZN z%@}1Tf-wnx)QwIW&i}3!$_S$uh%_cJe7{>8cY;ULWcqZ zajPCeVsU^Zh+Cu#VaF8@TxX=}S4+-=+o9a9i&{^q)V@7@X5v9pO+bX0T$nDaq*#MM zkx{oV&*lVZJc2|}+|V=O3|eDww(G3a9X>In%qr+b{lHm>2}nGw|0WsOM=z+|8TFMy z*~BF3+!w!=1RvPL-A3h;Y4|fW0zV*RZ4-2Fi1j{*%>dTJ2pxvIte$av|v-$lh=>@Gh^kwOYvsv?&w83c@ zntu3)QVO!B+*JnFbEgd7Z37L{WtHl6a73sSE~3Ln0<+-G8p>En0lXSV1PZBrg(&l; z52S2o62h8(E+w<=t0gb-)rK#-oAEh=PnKo;q)!Ynp#}ioqcpw@@S#BxjJ+hn^YsU)(Stx zw$y+neXjy;++M%TO)O#VTo+(HL&L?*Q7ua$&S?klb^pP zIkP3#q#o?>H7SPueND<>SKR?O;aS=Q{#2W$Ih*65(U|vLmwbpTZmq}0MA;fQ|NDm2 zy@lDAXzn>N&m8asFxeV&pqpkd|7w!2*~d#WS%V)?@-=_bO7o(|89wCzZWj)I!G9|D z?NCX_irh4TG&TXh1{J~v;-{cu6Yx_|u9Rhc1)`+$(VRlahs_Sv1h5{yn)LdgbP8nC z+i0rHfnl01gV?HR@WrQD8#K=Bt7)1A0($;W_)u9%xkm18`wW?rS@TMe^@;iKmIBS+ z{9E&Ul2-_bK?q#_c@_>s_AFZ=_L?3Mtwf1KIrl0n3PutTQ zFKSPy&EGB2s^QYs672+ba+$U#TfRiwiS=8dP0*CK&(4~{X0FhNv?>MHiqQvL0|cXh z+JfrO?F9Q`g|@dhd?5pN2LNyT&>60Hil?v=s`g}&%e5C-fUI3^-YRQfmT1O8)^D{o zkf>SyYHjPNOjngE6TZ)n{~uXGR3-4Y$PmuBLm(9}{;A7ms!GyXYkqIFHcAVBQbHw} z&$n@C?P$K$#^FPo+ARr;<`8s?^MNtybsQ(d7Yt3%~X{OWvVv%|;>azJgoK zmT%GeH3OcHaTTSSvFFxlTR9g1s=I>fCr~Q^HBLc!v$@}CTRRR=9$SkN7okLof@;fA z+Ga2*ec_X^>$GhgyDC{_?DkG=Yr4pleTL|1ZldRzqLIx|H$P(F4Tow1OIqJ4}H z)7wDa3METn%3;X*T0!NBCgHC=tB8l7xVvDTAN(z(mI`V!d(P3J<*F@O$vFkkuPNyD zqGSP}JUvC_U_tdtK)EU?9~3~pW`H3I1_W*cOwL6>sTI^T!8s2HmFgJfax$Gy1FBX*<%v?wz@jCz zw2A>&hIl{?R8U4iaVDT%RZvqn#o8ADb*3fz^<9wnuHMY)J)mH-w`gcAC(ij16gjJ) z3fS_$VNfCPhiZa-L@6zs`vpk$FhD&}P@aP6vjBBTL2XAf6YRVhP?LQ{#V9dI|DEB!bB7>mm5|t@R$`Xed+!xW?9`}HTexFu zN^Pe!S}Lj^rG(f~LX6s*+EFz^%@`s0z0dV}9p(Px_xSelNZ)zB-tRN6bDis4=X&4Q z9i#KA=-;GMo%5np4Rk6}mhQondaB?ZGOVKfkBa;`1y6^itfqpg>X#}(KT+~W`+A+5 zL8+l0r+`eNtfJBdXK|oN7b(SJ)-MpLLx6g+Mn>*MfXcI0I$0(kI{AZYeMuJ8>lq!n zRn%I$kLQ$pDtfKVs`5byNK>u-9J$o`7c$M|->0*A7l6LQ%zhuIqLhLYl_XJ}3#yRc zrJ0`!B6_-Y^6mN-_q?Er)~*4C;F^dtK2TgqluBXtED-4+rBSN&ZhK+9l4dE4a@8=O z^sP4!rFp8rS~=$dvIhZzzQzDnORV`IK5<^y`VVjZ!V15Rpz&`U-XFwKZ2!v{=*XvpqqiGDTI%I2rn# zbX7rgc3J<9QmP9nRHQqUq-A|a(aUS*VyH7SX0={kQyH~Hk3%891d+Ni%G~rsYEKD^ zuwAd59g3;38)Rfs=o)~2b`@9Y;_A=_>1T2YG&cliB0*dQN7^yBcz-G#^^oUM;qfw& z7k{Su$4f8QmqPRrOpbQ4@U<%qsjx~uEQ2ydq()^R{eWYM7ilAU|BRC`fv%vx!nX1};IQ+7(bx zw)*;1+!SdlCEi8#1$LB@+|gyl_p2b%Q%e2O%dR3-tcbdX;BaS(G@_!ax>XLhd?mQr zvKeu8qcqvtCFuRlHYyRg)+>mVM(I-(d`wPDZ;@_PMpcc_mzg4YRx!0(-HR8gG^M6i zl>M?ut*WT#Z8BC-bp4F;T0t(eCzKXh2V?IlQuyb}cf0hwM>W)42F=Bbs~@FlIGD>K z?W5#}W!YOUpw*OkcP%B-NlJY%{_RA{9E$2kT6NhYMd})=O74(;rqU(PHRtSQ)v_mc zrw^r1)Z@SHl|2uJs#6l_*|$3Odiu17RY!%jvDE0({xzlS*x`03Hbq}=O2i~ec_Haj zK7x|9c@FgKTwSFkNT<3`&W-hCibOW0G!g4byht&W+FAA4FN<`rx|+9BD!5D6ag0GJ zIWco;pv&QwWN#c% zwW!POSWI$T@}D8;L|1G0LE5?UKU?J*&eMEbI}8oNthxpm-bhqE6bXY4X1 z`P&$ON_kPvP{D#~A1Kn{I;!AqIaw#_swTUoo>BEs&vp!({zoxA>O&gGs%5EcN2$G4 zbp}x;)>p5j9%t7E2i1I~Pv!Iy>xdUiPFKAU5RRzuJ$=-<4 zKNx^DB4uceswdz&)$6iX-PUR9^;>%p&z`N-*nM)gC$&LPHTBq6p8FRP^Qpw;a?FqR z$yy%WR=tu?&mTLelKaID>!_dniaNV@MA0hf*l=lbFr_TkW1qfUJ5X7HekF-?k`gza z_eHu*sVN>Avdfj?+etM!U@zkv+ZnAqw5hQd?FH?_#n&rLtv(<ULPAuP;E;+jcm z9%rve4=B~;?3HWA*#!kBYstE>dQ)kF+r~f%nno$gx^4Kyh;)upxL%?^yx%?QqVoJH zJ<8P;6?47S6C#~uDCr52Oeqr&Wb(A|-cKRS!w4 z@93(hYM+p+W`VepdY~h9Fbxw#y4pi+*U^`H!i7DspT5H_?FC7`-4ZL~A<9B3P4I}J zZ*c1VUwzP(Tek@^o%tB*>@4t%999+i=4HW;OrqSYf3k~mnEJSMF^83NZMw4pN~+lNBx zgn89Wq!dcoaVGU#Jx6I0?h7#@l^bR{r;k7($ibBxsj7-~E*guNz1Vn0c{zeSKOLu5pOAKQ zkAsi*4n5rUD1Cvh=xIBK(sW3An|6Ux1p1<#dhIaXU2Ui#>(mTKq zN)>QyQ$(sksXSJ%H6k^pG!r{iy%}6N8+Cc<1(|zrGI7daFv)Ax^K1UroCtXgRi@@GIb{WFr^B_f_gDPSSmn}`ui5NQOZxhgmg*Y~-F zYRO;H-<$MQMZ2MLQl3-lf%3gYD!T|(_E9IjWQOTS@ZJhiZ8i6$tnhl@H{u6KHC3`a z#QCL)G$jU7VXQTJ3m8R-^QW0et0~Dp&7%)~xJcJ1g<#Q+5$SG>YH~@==9Z#yfv5Y`ni1kkE;J=8LJI+ zb;NU+?C6rIG=G2JKqAQbh>oGS={J+f6Z{j}YR{Eeq;8bt$w9K0_85`s{G`TSk%K%! z*EDoi&%Tn&P(dW8h|HP^l$t1yck<*f%Ccpu;8iK#ZViG1uu&IJBPwH1qu%!{rlfF@ z-WSPdEy~4P%Z)?N!k#Cx{I|=A)(c14dPw0|0*;6j z90!S)SgJ@vDRp~4UO~>;)c(>X1D&-tpj0;;rCw-9QYr;WFSKLdOOjjnp=9MKS-%8>gy`f@sFdXh;*6~o{Rm~i1eINLlitCQjU%2?kPM( zri-+T60TB*zA>NOn5OdHklr+oM>uzIk>XqYUa~$qSR>M1O0!gf8?qhQeM7e8EjFQK zS?hwZ9^Kkgl11Lj5xD3#Sr$vlHP>P@A`2)hkuOR^DjdK_k(yHa42Kf?LAg>`r$lMP zpuSd+LtoHyHm9k3f7`1&$J5sxbElq+c|0XP-VPTj!xr=WeLZl~lT%S90nz=j zB1MW6vC}kTWs^nuiApz4U6IaG8j6PX0-gU4lslpPALEYt2bDqAQtxOdC+_tha;e;s zt~A_*=*_s1>yvtv(lHe*pHew4i!>lHO-;TngV|{>!b7ahhG);c|79sU&{f%5BOH42 z_t~4Ks@<`dc7B(HVtAl*+!tTazBD!ej`ZNnKKKf$lZn_|9H+AEzv(hi4y@(@1omeG zB27FX4cwJ0{$KfJfc)Z2JB*+yT*syJ?TenPI`6giTbClM}x)L!2mLZyREDe-Yr?~}SvYK*fu zQ=~{rm{E>+kv5)8Q!DOCrAJPo(unt$n75y|995>%&`0Q1GMCc(R%bnGZPnbhvj13i z)Se-e^tsUKkh>|Z%=r~Xb;86U`D?))3Y z(vhrfCP(nmR1uzV;^w?{8BV_u2FK>8wyA zYIRlX1A0(I>hcs}-(Z|{q9~qHQENwO*PDdZsrnKS|wu}^C!xA~gSA!Wr4I#Q%!l)h7s*U3dB$}B3?KA1Q9)6ZqpD`GtKr=M$| zOIuImY@B@|m(vqD8=)`Jf~+Cw^8SU+e>juUpyj}GMjTQ86)!#6^>wp@QcbM1dIdN| zsWU#<5#=?Nk~;4#doPimy+Y0NP*s3TknXP`)zhE+2Rg?Q8}K5Ph{dn1^IqDk`dhi# zr^-k<-l2?@naJy>*TSBZa$r@j{7zQ&RDGpVuY^@XcfL6#AM{JF>P2j?tXC2$T2b~S zkwR>$|1;UOocDmM7-o*{@;ORvKG-tcp_ZVxJ%OH)o~q?BlHW6RJ^aj5|*$xr*9lMbua%+seI^Ox7=1Rn?cWwXEk4A8U=$z8HTM{Zcv+ zkrTdic>KApeVKEq6zwaV2R@mz`txu7FqVnZbF5a6HrO*{5cyPq8kQy{DilD8uRmC| z?u&mE^^sU}^iF*zC8R9;>WTDuL6o*W87ySiJM}dMRoE*@oSrSHCW&MeRA^~&nx2AQ+XL^@a$g)e^asHZQ)Va1@YMeo*#^pMga<&h|denzCw zl8EBMlP*##N;Prb3(MZHUrFVgZg1c$_Zgz)`p_R_HIpeZuN0)2Sa$Sk{-89ZjURMg zFX=X9NH z(z9)02&4cWq)0L4A@xO-=^|aEB->v-3-pfDqXME*v0CcQ$v#SNu;fhP7VmrRzA91d$fjM)e3uTy>M zAhgj3Lph|5>gnky>e;cLiuRO){k{=mdRgOVtxty=sT2uuo}{ZC=8j&!-%u+3-}>#@ z7!}CpY5JpDoiTGZqBa9z8>jp_1D zTLk4+{yNjFr^|`ZC#(a$svasW7q5!<`T!@2lvC zaeaB5?4(vZWGt73sf!Lr182}^gm8~rlUM+kogRWJl&m*H3i-u|w1N^poV0HGMjQ0O zF7pKAVs#fk%;c9Eqxw4?HJok7pmjV;Ig1cGU?<|^D|4Y5wa(`K5_!8yx-gJ(u)bfH zwO&go6wi>T53aXVYQz3J7|){P z)b@-rV&x-IB@fiPKEtUw@rh1Q2I+W-@raXjub$Y;GKp55+AWprCl45xCLkpIzYmX` zuc(G?_F5K9OPU;Z86q(d7mf9 z`46?>_*^Y`3X0Xx>qV|bSsk_fTHUeRWNP8REj#@kr#)Pw(>yF~3hf-)7}{TH<7s!( z9-+NJdz1DNZ91*bE7YHzHi)(qtjkt~LOt46v|VW5#=nkKJl= z8*&`^Jb4@WHF-BVW(3ObBOf9kCg0aA4Z7NRqQNJlP@ogJ&KPhX@_6zf@{+Oek04(i z51v52F#&95(+hGm{bglp$^p7;3n|oqU|UX3CjUkbj6#K5$^FT@$rUESZ%%fh$>2Zf zA45Jvj?UZTq#fngrGrDryT1m9l7Cu=X;X)M z?x5vwVXIFeA~ymWk!_v9Ey-J+pu%>>|2zEV9R8-yp+2dTOofL~U?F@5x4ZOlgNMiq=zjywY-`R#2$KgFt4E6&v6OZ>t(gTY$-mN?S!4Vu z)F05M(!QWgr#1EVVh6l@tRr#R7Y80{EZGh)Y`IG{OC1vo2tIXOGIz)SdZ8$UT8xlEcYjJg8_D14EI0>#PGUV+P#SCK1|Pm@E* zZ^`C5EcqJc<9LA5l=WZyd(H)6+j{|=q>=+1fv#-wz@YmlUm~(>9`euRBII@+@cWWc zi99%GM0vxf*-yiz+~Qw-96x`6-9O(8##Hn{8*j;8zQVGmP6?AA9`_#HktMg?PJd)hGC z?zFvVBWMTG4xt@RJBD^V?L^ucv@q|V1!aCmi-jSb>y|ZA*`$|edpF2PDD)P_i(C?FT(BCm1^Z@d=8sDQ?%!3uhQP6{g>8iSkKB0 z*>K1Sy!&q<9}hzh6UdXhfD_3jyMp(VKPMk0$Ml5%4EY85FY@SqmfvN&LSYpI+u!73 z5vbrUxjgw_a^#orKO;XUr;!u-!~c#PIsokb2@bf*5Y1WSBvZ&dR0J84K~cF7af>^s z>EwSGeO%*y1vVA5{2pv(!KaJC-?6;s67YQT*&l@UIp~)i4VruFh}_^tDR{&kZ4UFj?vd`b(!{kqHg3pkP zkS~(gFg}?)j{ZC3r~jb*6LOzh7Q1Y3DO7@B^9e)`y>FvHHgX15kdHit{zByEtsvPUt_)iEv>vQ#06V)C?5y^%d%MEc>5w=Hwm$e>GE@WA`mDPaoJOXyZAlTs(VMD%!?MLf17d&<`>_5w4_pF88xe<2% zX4pdsuoHK}y7s{O?bB9nB^Rt;*srU?#1IijAXu zQ_}%m#Pc@MskM6+&7@%RZgTUq3YfgxFJzN<+entYo7I8cWRrF~O*Uya zxlvg4nY7zuvdiS%B+X_8^y!ESzrQTa0gQq(4Ep%ouPu0ihF8UCi^ zAG&}$gI%^ET_MQgXjQO{Jc!&){@j3WKo&{MpVkAc-yP9&CbS=T26--d0Xd>S{IaN8 z@%09SS6eLS|G^LlTN&`xQ1Air?qT55`Jhy#;-M zpRR;I3pr{P*p-h$&NUE9kc+PeS0m4nMO*5zH6Z`C3EYM}cL!MR)K-J%WKGxc1IXq6 z0FNX$0K05*$F>TTOG3aLay0pS@*m`1$dAd}$m92;d=hyZ`2soc0Q~=uy{wF|oc~7@ zyqU0lM~)yn<+TkxgeIZ;3E3oc^N~$Lw;0(Zbjy)VLbn>(O6W@al9EOP%;?%=?_o7) z61rhzlhEx&wi3Eheh~SxPVfqkAm=#_jv@~y%a+Be|Cz9rdRs_g+6fepy^Ix*K-OQ~ z)+6woyoKEHB;u1y{3-Ae@|$zu^W@MA;H%{D3%vi!lb+SUb_P5q=aL(}KB9DTV{!%u z;!VanGudRUbCFHPI*@EK*2T!}F3I@o20|#9lyx;SQ`WZHWGiDW@y*F`mr=em`P3C~ zFY<+J;4cl|0}m#*cHM_Cfx;c~406oB@Gl`(eF$Dfjv{X&&wUL4F7jjYL2~CO@Si2S ztOT$e(KQMt|C>TK`QK+`lmE5JSK;-XF!|q%WRw5RK{ol{K(fjImH@kKIsvRtK}80b z{BLct$^SMZoBVGFvdRC3lTH4&KiTAeha3M(wCA!|&c7sptqy#{0F(b+L^k=~Rb-R@ zjU$`3lX`gh>_WRv)PN&Z=i>k1t5CkON? zFp1x6fuZD#4sayd zMV>}BS>w56D{Cy}mpXa>&n$tFl1;|)3fW{VZ;?&L z^08CSzaB!9vebWvMzc;?>JB-4!6svwgKRRE`N>wsQsPUJvj?Gk1@g6m;9BI1g}}{R z6iO6<(22Z++>5-XEd2e+mCJ!gkvEg4k#CUakXr;JemVI`2-v0nT8=*A4CNtgC3{o^ zCz3D7W3L{OW8`bq!1_Vun*hcy7VC7-ld&VNq|{Td=*5cvdoGR!vdL=CCL^mY3k%swYRicHkKArJMktQld$=6G9FZr@73IU}kOqmF-O#X{p zmz;Gn{4L2TGMGr)XKaFJ|%P9Q^io!mVJ9ZDfrTMAAkuOq)9zg!N# zPiCBw7puTIEtcyqLSEa{=d3UT4wFA4r;#g@o3BND9r9Rm3$jT#hmlRfxewVSoWIhn zuRoJ<9?1Zcah^o3CCMJ$!P(^7y&B!6^$$Aw*)Hy(6WREQ1_}lRNlDCp`k(0>9$mRHQVi|Hcxh{G4UDVe;i@yI$gO4b5XFzd& z^fQ2LKH?cm9zy?jnq{?{^R>e|q9x>@5#V_85b_`7N9283^!;Bdu#G~2a||d)zCpfD zzDr&<8u1UwwZ?!wvZB6la!zs-xe$5%Sj3ldQ5X^lp%U3P9$brDjvP+DE)NX)97d3r zxxnMeC&&xPS)<^OA(xv7cC9i2lOQCT3dkqPkI2_dy!`Dg-GRrNW%VmZeyLgJk!?Es zc7J(u!7r=r`ZRE6@*QwSTTTiur>Xu;9Qj?#SW!c*OAG#~n60hIXZRUa7nXa(ihI+a zz7D(RugQ(#z|+XtHh_O1&!m4P*kwD`Mc zvf+Rpk#muI|A_d47R!XJ{yl^c26SBvu1>D?Gq^E%i{#t&spv>9xdhyYe3S9x$a|S< znoF*u5Fe{qFGyS2fz1rqX0lb}#m#X_PLdCkuaX0~QF%z7LjN1GZwr*q^a)0!%J1kv zZef=`=W%Nx6lXwgp3^Gi1aebyJH~e<|Fs6?zarb{k0LK)gR{vyXCr?3C$b>v4kXQi zu$}=|7?4OFPyZ?M@3Rn}OfE+M6LRoe_&wz#8D0NC#%Ci>n}rd{mtD@k4j4KgLNNv; z%mY^-_gMh0NiN9vX5>&-*nxbP+>8AE43z(hTrwIw&P5>?3(O+xznU!lvMKVHGGvTP0CEz!EIGCZ{I$t9 z>2FC683O+oaW z|wmD0D`TY`4gh$uG&VgHS<+oEVYH>`*px?r!iGCWo+m8M1>1^f|eq9uaBZ z){w$Po`R0#R31?Txm+JKFp6A>4NfJO{v7^AMLtjwJcm57GI$yJE5>gm zhu48WiR}87ljJOg=j0UfEzW^d@+^*!*QYq*iS*S>?!B5EPKZDxE*@UI^0|FgFprklbZ6IF{UCJ2;+vYAbjz zIUma(CHt@g7s-9MApWk4LN6A0PM*kzN=E=X=uOT=wq3yp6eK6y1BZ}jUIo`7e|HVs zoScp9>PlfhEBuN)lsthvGYCEYmfR^Byomf0c{#a@yaJ)GnmF=q`V+`8vN;vM%XWyu zPPwV*0%ys3JFWQ!xn*JSzvLPI;5Xz~?a-i4K8#pqS)z6M9OUlB!3D^A<72&D^%(^f zh=5RXbWv~va&A`8n!Jbp&g2yOBgl^YC_j?iMXc`7RPx|y!ZQDC^C*0y1>sn7BzY5g zAS>KO9yJ5;N604_f067H1pj^VLi%5kPl?s*kIhFa)>pxP4taKR_Y$a}FnKU5tfW~M zrbquEu~3`-J+f2M^|c` zh0|P>oLh!ib8GTy`g@W)xhM>#FqG^fd$EDpcC@Vo#x6S;pu@TcUns6r=&ZaNgC2~rVB?fA2~1mr8Vp8Z#IQc1{`69P04?< zf-v%Was+t_c{Eu+F?mP_CXv^Y=a7qi2LDgO*8P7Ph4l;=&k@;4&QCr_{$n{RIHOtC zf%QyaCev@eJ@}9u(;4w^$>!UG{snpex4zvcJr0t|qlb)NAGDPsn{NkJC7W*(HXxg? zCw3&8Zx{9>o3AI1H2&Xlub5I$&cAMO!4nA43@~qcFCd#Yy_b{Co7`*2=FRV|Wb@|t z93zvXfvrnf^TqwcVI(>o{Gyy+c8Hg9^DC7Ua3R?a9{5@WOq`jUQmdMv=Sx3!X~u_6WR?Y`rKh<$obBeQNn# zwv80@zZoS5X4@t#)?0qH{yXEw_uTlM8|TIn?rF-Ga^s30v7G--9|`i;F5P&L8;^G5 zNp3vLjlXx}6(6$vZrlE$Ae`jJN7c#h^2M}^Zt`_EzU{^j-T0Xsr@OHoH`Dh6=l3y( z*s^~t*z&t^AvZ3qdW1{AYr4q|-MEDtw|C<%ZXE8$5pMj|$Lz9={8+F}aO0_NJjacd z8!vU^U)*@@M=UdJ^GAZbPVdHh-S~(bpLXL*Zv3|!Kl+e+%Zz&Yp&u~ zn;h)MpSy7#HQ z{iXb*$TQ4hAv`qB~Mzoqmz$8-NJ4QDw9dH+B4;&?y+ diff --git a/3rdparty/bx/tools/bin/linux/genie b/3rdparty/bx/tools/bin/linux/genie index 6ec91b62d57f750701aec8a3e2106a631b53f9ec..021bc6ea4d21c1514b94ff40d15c735469e8e523 100755 GIT binary patch delta 50935 zcmcG%2UrwW8#X*=wty5tK|w@a5CjA%g1s$>x+q3$(O4n~i=qffvBkI;H4#yxS(7n| zF~(?Oj7fYYaTOJ@YpOA(nPN$C*B)a5Ec@SQ=2@Kh=Ka3wzpnqEWcHr>KF>MlIsMG+ zI&9z9cI_K&Rs}ZSZZZn|P(B4=?4Z>h-|6vrcQ;vep&%G!&hV+nd83aKexuJ6S$AP~ zYZGQ@)>jF1@2dp5_qFz9Plx1x$YTmZ{)Yqqf%99)RG4qw%`%$(SHjjHahhew?WeQd z{`fBQROh3Ay^@vIt7z@XA&U^L0H*<`Cr+av_@sn*w5+j4Q(`f|Y+?s&Lo4lj@2z?v`A zFhN`>7`1{C*<}RXGW6EkT4V*LxC`f`jC4^%8nqr>+8Y+9YL>@q!ph5ihZ`0OOfQHFCC&e=Gh!MOk@lKscA1nha7FW{`eS&0*l2rIeai#T7x$&WQSU>X6CAJM zd;{kOoEvd&#`zA;cX4jP`998VIQj9R0`lia`1}v?D#DL}J8|y9xtlc09$f6hSwq4B z;6a>+a2_Fz!%@0E20V`Q1kTTJevb1CocuV6^BbJs;rt%w8Js`k`~~N)IM3na$8R`) zm#>7L!XLP}h|_`dGS2HbZ{qwL=WU#KaMt6zhm#-oaX!T9v>wpzV>X9UhjoE>rUBO2HVXDrUO^FQ5t=sUCb+`h~0 zpSCMmSbbn(yU*N$tb=rOwKujm8)mK5WomtnI1gG4dVlSefz7|QCh2c!W8V7mVpXJD zFsm}TcV{fUYGIRZO!u@my1Dgh=2vyn!=35cyQuYsC;YW8Y!Xmq@S3W(1k5(dj<_5S za6>$ysqkR9qVu}t#}N-j-}gtd%zMb6f{>zD^sK9j9#8r>bZDN=cefQil5{`r2=w$( zMy^Q89 z|9P-c<~`+4jE(oH1WQLM0pW6hAiPZ(ANyS?0q-RI5HUUR5)7YjlsO+`{5VTB;kBdqM6Dh(^WpJ17-jBini+gZnkV#BfS0M}VikLf;Gh!xRiY%+g%Y|+8L!At^e0FUCw=`!MejxW zf5;)Xaf&{T^eZ$U^dm<@N#7**6-!g0+YO~{$Ri<~N-&o)_NNF12pTj=g|KI6i7bKP=xu^dt*p{otmZt^@*XRA1C|O zH1(#EL(j=2Ybv-lhaJhDQNeBvGs;RIeDeH-cuHt)zL8U*ME(?n{*>`+=|)*;Mfw8L zFHBeTIiydgjDMltzL@k@WPga-K8N%n-pHR%rOTmo+eNegi(YaDWMRmq4A`@ zL2ZBZH>D}%QXy;^RdwcL!}}LXzo^(^l#?*XpV-b&z?e`ap$k-{Uyy$DFGc^0^j%t| zjei`Wq_dFHd7El9pE`9{($7%m{qB;I&TAG*=o9Khiyy0rp%fu#vJznjO2m&>N&gS# zaDKcke`32t>2xSH%1S2btH?fsGImWwmRG3F*3--tK@kp6iGO-*6lkfccg{1)mUgmV z4c!+rX(UxO$-+ZQzvo!Rei8-TS85LHf38w8Ukb2L)s@n6>>7S4lyO3Vl28!Y|3n#V zDpT}w(qE;T_?c$dr%C^jnk=fA+oPupqJT{l!GjXYCVdDwG_sIK5QHfCQxHC)i6zFN z6d;V6@+#HbTkk2lYl7wsU}|H>F}P~Kp6*)HgZYmEq`KbOB2r8mz0FIk=~IK znn^QVC}q5zM#lx3!d-2AgxWrW`bs-W=N;6jg%3X)4I3W{@T7z!s_G4--y?n0B%`df zql}Bmp`U1;a5ZHP=|9X>?0=LP-mP&HQ`!p`jP#0vtrLDCVup=P=x7E7-eCm{D~Vl((llAJDl{L)Rxz2 zShgTNoBGiFLZhr~C4D%Jnk^TUnp;WwEYd9=W+k94Q$otA&621S1yY1dRDy4>DfW}e zejyyf0swCs3roa&9W%McVy@%J$$WF4<0ahQUA$CYbiXi)^e3oq4W_ zG^4CML%M-#t}D&33rQbI_OmV9l?bjG&4VIrLEG>{`4og=cg4}x;yq<2$qsXDr zRDg2Yo};DYBZB%?HVyC1qss#wu;NWVulVatTh$KNZi0Lu7jnpjXE`IwIq@cBSBY-If^l`NW?M&3{$ zWIAQs{!^oDH%tB$gvFF`I!*1oMxW$i3n^nQ4I6)o(3wj1I<0aEq`ywOo!asN>HTQ9 zwj5HG5>}^eHpN^zso0#KRhl=;JgF$FbZS+PC{O0guO=ZZYjR0pep#v6+P`CrZ(hkH z7gtORI<|Ub>Pn^R`RJjdobEr3Pj$Mlsrn+J6|=@CcC`j323c!6Yh}zxJdJC8YyQBP z|HrG6&q8>n8k7fr-Gp`4{1x zf($C%wLb8$NR^HO*LcLMbggSQ#6!EQ0$f9h>qeFC>gilJsdVm?>&Q^)7(k83Se1^d zRt`QIGF1WS$c@KTmF^lDJg`WmQ|-%f=BRYn?8gJjRl1LCseCMjF0Y2%d)^0J$0}8X zW-bx9R;4#r=^IqKpGx1N(p@8r2XB9*TLjmBjtA^|6d<(Z0v)v~-L)a*LB~~k9H!kT&2e~>S+I^s(|>$06|!#(p~ES z4_>R%JFDzBsPsgYzD1=csr2n!=lzd2K^IlPE>(oCD!o>vcT?%dReE=oep03PQ0YIY zbW2ZFz&TZbYY)JK?JB*G%KnB*@2k@5RC+&^E~KEuICz1L{KD1#?y3M~Po#wUs`L~^ zl0O4gdViH}Q0b{EJyN9)Q0eh0mPZ~9R0VWbMHr;gjVj%w(oHHoO{Hh3^ua29tV`$Z zKSULf=?Z|BuF|Kf^r0%fNTola(&wo3VJf{`rDs6r`OC*rRlsnU2wbJoN2v6*Dt)9% z-=NY*sq`%>ee@&UB5YR$$a^yi+@;dTJc=OHs&v=RnFk+N>8_0}*H5bSaa^F|2U$n? zd2gKHQi11G5hkj1yGnmrrQcBLlT>=0O3zg3LjOm7E~~NrVc@O`n5>H6tI~5+dZ0=- zt8{}(&sFJ>DqV4b+CN?uFjW=k_oWmQzQ7-eIob#^YD3W<+&fPiB zlzB(a`L@oHA@fkq`EJf(lz9;6o}9I4x`Lp|saem_guYqFD4V<5o`83Y?X323< z=94)O<-Atr<2dJ=Bgb}`kKi1eB77saK^6vcfp3N!t7M+Sc?ZtRW!{tX2+oUS-kI}A z&NF4+k@G0dGh`mhIW{?{0htGJ&i6Ksc$qinJciG~4udRsaDi`T9KJFaIp>=ghamHY z2jG13;<#~N?gO0jJ&WU<%r9}y_bQH)GQYq%-=jEcWqyWpzBh4fm-#8qllUCu*dPm^ za)Iwf9IIr0kaNBVag@uvnsdJQa1_aW2j_gx;mDNvR?hie!;vBLjhyo>hQlcH*Er`} z3rD=nU*g=t?-v~gSy;vezQ=I*%KSOb`QE}I$b25>{W!mIPwoSp8#zBG^J$#(ErjEw z%qMfsw+@b4nUCX~Zy6lhWj+GjGL`QY92;a|FgM_P1jj0wr*J-y^KzN@qHDU*epv;Et0rzrZ*_>~e`N$Dm;47kRWeWEJeTuwnfK(Jub_@1nRn)# zuSSkcnIEj{U_CP6?T8kJ6v0$EwY#a(tuiBW$*I!jHSM`naXq2d{>gbkNUNx=>1MFL zI518OiM7@a>=Jiq3lq{Rlfq0DXDg1_^WSGeO=Nc-<*Ypni@}nsWxnYZ7g8&(ab?1L z*04dbdHm_P>DU4O8xzy9WBj?O{TM3hR<2JwbnIPm_}*c(sT2R2(zK|qsj1?RS*>@$ zS$WBAHgP`>aGrzlVlE035AhW?H`c{#c=%}3!fTNOt$PNAB`M}U?O>>6P~L~3iwb4U zMk8r^0a|3@QQb9E3Hw`4YQNCe>Su}*g&-?@0tj^jdtEw3ty>CFaC1aa5f(-W(u~t+S??6UDqb>jHDDK81*vUUAXB z8RIv-q9LKSrW6Wq${#K{ot2})j7v@}@Tr-nh)DbZuAg%bJ(;N*8MBa5~H9hYb@-n^*It zzvh!V>sz_6iJ#V4`%DRJ@kL|gjxfCJlW?l0U5lz|QwFo>Z!*hC7HO9kCN`yhg{LWW~{iV-dZy=RD7wv>cY%5Onj%_I;Z5mSY28a zOA$R9tW{-6VrfUKqpZK!qQM$FDl8uy&q3S?tqbeP#CV5Ub|T*~$EenKAea|CGnJsp3$ncTFp^ zb>O@%;;;tmv-1pMd4u)Md9mVa4c4y!lNMAt=XGad;Iq~q^Cxk5ZT<)14-Hjm&!#f} z%gDWkZ=rc@ojlU;>o2Dh4!^V5df4)( z=ylJ!t$dB>)nH9o_*B<$m?I_B{FOgY&ay=h*n-xkO7B*OI$*f*&d5LZXTZ$f z?}rCFSifEv)%MiEf0(@ABt@`aJIGD?*kBU)++1~jUFTmBdb>< zDe~`uJ>)v<*P=)B5~Ws#Ejf4Js$HBW#?7@3TRg%4Rc`Al?B3rn>OQ(>-M=_c+;h+R z2td)C?)+KKn!!VA&j z_C?mFOSAiC!V_M953V_#i@tR7%W`;Lt-X)@_^y^KUA}$GFR>&g_4nE{b*^D z*Dv!?v(Fxf(50>Q`qEZn-9xKK#WXS4Sv9Mo2@}hMsunKm$HWd!>%qz@G1+OIy}UP| z>XYTmL@~`-mHgsnCKfrZ_Ej6iEzYWCt0!nQ?m|kHW6ch|rn``0UH^KmW-WxQbw`=T z$Wp8w*N12(0-snvS~Cy$&ieJ@;SJV-Z@!^<8T8LLH_5nSLo2b*ee0GDaSndR6nAp_thLKqVVZNG6W+S2$KP7uimSg zzp;R6W`kdS+aROwrXB4%Zs;KFU!g&pm#>rCycGodruF=~#e+Ak=Qp*`yoxyWn+ElK zlbaQNCVS8|;S|;QhAncu7vEH7?@^e`PRetYIVB)|J ztTVT?6*KhK)mvgiGcbSF{IL6m+*(h4h@mjjN16EAy^D4^gjnadB*@XNEw+B&X5a@# zq13;c-_6y03YU13ZrX%iKdKrjHhKRfPxzPhJY1q((}jhj|U|2akIUZWvlCXWLXLro8DigoJ;28|!^ ziw{EL+L1*dEPQs33hPr7Mv9&*HKk#FxyN6>jk3icPMZ%qwCF<9>cm@0s)03K5Hj|| zC{17B;txYKX}~QXMrcL@Pkq=^%ouEK`car@)LD~0S|euZt)G7MlsHOn4c~qpeb(CY zKWSoyn>Fh{WB4jj{hyGKV$`zF;!V8L7UGi6#OqhV1+HUOnXb3q|4)dIyq5W-9yC?3 zUGE^Pm>pdr=D^}|=z(k4+?=hrnOgDZ!V6B!CU$-|x@$8J)a_ag+od}ad1m`|$ol}F zsubTxscFOH=`6{_$K>V)5U99;#e|6`1?)nBT zJi-LrR*dh6Kg82{s)(CLRG0&i`1zNg%$x2~-Y5r5EI_f&5cf7e^5>}k`1n^h*eFFNOA zs`NU-nW@L8WnML&@Bky>L)>B3#JE*$-P41K$K9=e?7bwObGLrIue6;9pKzb%lT~G6 zdW8cUP(ILi-h|UJ)y?T#GkGErD_Wr8dCu~~r zttQqFzswfjX=3&Jszlt`y=v)K1v+ui_tv`8{eyNPYGraA3bm+CTjp-69Dc*J=%AtI zP?M_B-){F5?MbZHA5VOTE?9VpHRHxlJT$Tzp&RUjxUIw9j@x=TI`$2bZSTpGiQTpo<`rj6 z$Bgb9FJa1VnJe>Z{s^Qd6_)m7D7*L~GhRus*kM9SReK#9MV@fxmB}JDB!{o`6<@t( z)n1L^*>t{IAa1;5-FS5r539S{-tSi=o>p<#r>0CWF1}M5yML0WHTGJJnC)quaP0+g z{B7$W*E)+EysWLR$B5-#)a**?{zVk_ z3BoQnH&y!9Ebz46yZ(o`(zEKqjc6A37B9}HyvwbaALd&V*&cKcC?@_eMcU+PO}LrW zeklxVDtU6;(Bw1VhP|6&*IKcA%hUSF%|+t7p4Og!&l7igT6g|ERjl>28g6w$Zq{M9 z%;Jz1)}6O<#a}O3+unYHL&5Dt@q16}+qYM>oD`1qTOxf&3HoPsRU1$wl6EJNr?udY ziPzfkJ44(uy;6kgo1WI7yAh(%%i8~Lf6aG{Su5_gw`6+5`y;%uv8m)uYTsTg6D%M0 zUL%!O*;ZJyQ3SI48_%sBh(a4l9qv z&s1sYZmKv~Q`y3rRzHT%1RLvPM6i?f?L|XV>+SkfF}i70uZHzZOl@lY>0Y`=rkEo5 zmU-7qY-&xoUohaArsxX+HJjiBT(ysc|7g97$$RG@Aid&GF7{PK?;76TT<8R$GI7N~ zW?Flv90^)~zh5mbXj--5K|1p?w?Ls@MC=-=X;t0BG>uy=h-0QGZP2p_TcOBIqWEi5 z+iop;l8HB(O3n0av<9h2d3qMo>^?WnMo(N+_iU+0O>-aVbv;`vhj(>jX$BYyVwqb_ zTU5a1ya5S!1|)3>a$QMsEVg2NbRZZ9#aiLzy_h98- zMmHuD2j2AY_3rB?)p@X}Cat0Ha*mK@dNO~huP1YF@=&j6ofIwGlf5F2)Jyj~*}UfN z%~FK%6O$(-)H<4tNB;|LCcWUrBE+O-(snP_R(xJ3o%CWoagQQ-d9!I8=XkTX#Qs{T zbyMcl^wcn^jSqXR>0R^`j7%M$D+V>Q9r0n`FwO4*lU{GeCW?{qQbRK~N4)f>RN9<{ zB%edJ+|3_zoKCo}+wW9%>0kDS4?_{yxV7}^uUKp*i*4K@qnY$wa~3L&ZYDJ}XW?RI zGbzN6wGah=skL%KTY|Sm-Yu^JhnK z^I?0j1xsS$Qh(`4OBUU3C69-mB5#+zL_CvnQ*)y`GKY~*0P8BQ_Ll|)u!O+ZV2rY0 zzV*q#Y!j~BSbo`HTNS`sGf{g_`XG?C7Z3VNrvh1|_?f?SKakn6j7xvEVzC(BQp+IL zL%iZI4G&^ZioSu;dqM0Opshn|)|9y|K+V?N^Ot%Bv*2a|y6EVUX%)AVGfWlVRnMrC zrUtVlQEVZt4@P3ZFN4`0(Yu9I*@ndj1@Io-8Xr`E*=XbRiu2WNTS(uwVU}0}g2qoo z<0qwIhcIe%!ika9&&xZ*do}#7-L&Y6uf4}8%oitkUeC2NxXXx|^CCqh_=SRNqF3}FVbuBBuRVLdH!Tk1&Yf3p**wW^N;={)&=19-yGwxpVei zqhS+;Xxkc%ipl68?rre( zNG9eZZE1jMMQNCid;<&r z+R3#`_nb%U>jxmiwdiM+y_cM9YkRH}`;`U7T*oH1rGXY`JogAZgf-z_&5$ zIKGW^hGTgfsb@TU+42^aKkkJe+8MXH+mvadLK|jhP^$UYO*NYp8$1%x+ApKY7Jcfh zIoPPV+rKAmYoq36Kcr~R<2BnGRbTrDT>aA7DId44)t?|hdLn_%7x%Q0K2KmTi8XDc z%+9Psqf;yK06!T!RISS|`+QQ|T~67jk>cfY$v#$A@cgER99ogV?EOjfclono6?eiO zO?qI>0mV-kd)r%*8eDU{; zn8enIs}DhOj)X)WUc(%dzMpw3#iLV=^wC?ObVy!{C z-yO5{Fdu1r4^|g=nLq2*jP*5D`jyXf*Oqyg&+`y=oiNy@_hjEPF(5=r>CFl`R`q5f zK-+h{Sy#s6H|@)Yhyxp>@qO7;pzTOs7OYJz4Z#i4k~gqOIKDtrrdO84SM#qFYa$SU zb|2ugb3t$W13ZIP@kgz#!;jouE=+= zxgoYY{n=SjtO&7vKahRE#E(L3&zpGPo_x=?Dve+44Ut|O%<{zpAvX6RY_BL9L#3lb zStl_$)OLF)%Vpx35ZlCI%%Br>p*G7X=E1~}P^oe>yM)xF*-x^cQGd44W7r>V;=*b`ZnvSK08G^Cb;Pz;xmDPI z`=Rr)|NgM{(oZwl5^->Q+vH-VW16Yj6lq!smZx?tq|GJlZqwO_awj!|xtHp8Khxf} zwUh-habbJg(K6PI`Mr%$JRindxcvqajH`aTy>w|7`_q$q&F{HB|NfyA-;4!FH)pf= z#oh2@4ht4fx0m+KVUxv+?WK^pY`>o-Us)~goqNdlbj@n&+e?4XWkq5@n9V$oU0`Cr zFez<5ixww`Nwem&DdMwX(%JcJg18|}>hmo7LOc;Bc`d*W;e41Bzkq!#)`dxbE@02J z3gFvq*JCohp}XMy?l2x+~AZ5IQ=Z5ibZk3s7qq(2v;`um1UhUZvs zaag$Y^mFV@F)LhhKF5ZO1>w?&MQnyBg-Zt(vAg02;ZpTtj0uz^dI^i;IAICP6%T|< zhnKMR;*a4{&hso=bnhUYc%IEg4cJm&K*`1E4z?{7OcKSe9c;&|;&dw~yWa5Ie4?bb@4S`x0BhL}N$k11mcmX6TqA95s5PyBZDrdfXwtegAue zsd82zw(+Kg4-Flqm)Eeh_yRdGQ<6TD5#j#OseQIUjw)`&#mT{xklvKxHFKVafaXzw@%!oPOx6 zu10crKEq=?tHh|`|CXYxr5r;ENv`4lbk4pK_UY2$H`w3ecQLlz>)B3GJkn8``4-Cr z+P-;BL;@K-xU3Euk_}i?VxNeM8{5I>>miu5@^o+ZJrv%6P zyYno@;?6#Kbn>X`b}ekj-exnI*d|))xf%Peq-g2c&FqjkE?P=?ht+aj`!2KbVZ85M z^t%qjrS4m>Hf)HNp5B7}o6t#mW()fewP%Zdj~!u64ESQ?vTk>u7^!|M7Mh;1wzBux zSGX68wGI4$HE7z6jYYTeNj=WHmbzs>wGYELe~MNR2aWGS?W6g=O}1Oc?cBMR+^DVQ znrzppQF}wS;}fgBRipS`tmL%=H#Z;0N?mra_MX4vOX7JVZq+`Em9lrRbKbH3nsQW*z4I%IGCEG0znc~M=iysy3=dro zVDTRq9^T!?+MK(w=hMv8q)6lTvZ3OJIO)B;Y&;()`hDyjIpCvxY_NDN&USAf=2&q{ zylqA;?nK3Fakhg8Q9w}_FZmv3X`)}eH2yH_EOv^wy?7Y6b7E$Kt;sPq!&{t{YMXPK zHR#1b@lxqeNG&H`s{IK&*7A6p@6YUkRy^5R@;T2&i+^{Pa?fL#y5Ct^cOEn5iRRMF z7ce5GG?(sPKuzI};^uGcvKW{so&6oRS%Z9~fIrypV%tRN!5{1g@p&KV`#)K=*f&wK zUc}5f#ap_2k+pC6bRu72_-&YZDwdu|JmjmHn<&NGF>@|Ylm^;yFHw^yO|`R*;!EMS zHFk!t9*%fOZ#r0z_@0Nf$HCf&%RHnrKm-5x7`(%Y{1FA;b=r;Ce_rla!@ptMe>hPJ zxP-O%>qP0vORUObT6o3RC?`Bl#nnd&*tu!YhFYaph-GXXtpIuLH{W z1}1z1|0B43N4i^a;3!{(@g4mmA3FaJAFhp(ec(AMK1@8c%qO9C@rlxiMUJrTth~Pa z>;Tg)#{WSU4rcnszUUk?ExN$~`1ILXdnloHQG>>3Wq0I{e6@Pm%AU; z#2xLAhbSwCu*=b=9zV_sDWB_%D{ZZ$X1VN_*5mLjKa;c8xU9&D^o>hrI!!&km~D3+ zOfK&oCZw%M4P&M5Y0kqAJkCJSkF&fIYIz!P+Z1&GK^Wu7MX z!%=LyZ=gPU99i(!QhyDcy?kEjna+NEip9NJEZyI|=W>5{ixH2#L(1#pO8pm~DDyk2iB&4AKXbrY!IXW_M>;QGN~pDzKSLFH2qq=&M>VLJA1=F_R`hos?eE0*`g_CN;Ryy4-$o%nFGM|^CnkNwc$ ziffP?T|0rHUwy6{mKpgWhi@hK@GKt6)OLk76Sv9s`^%8viRujy5L9E~4>Rp{h@7=d z0=Y8@9=+H_4!4J!`99EB_wqnKE#ap)2;`Q7xurV-IeChc{S+c`a*aeJS@7=iXO;P3?y2my^N3?C3~RP2NhDmgA3-iPJ1E6nAg1gi zrplxv{GT_PmfR`r%oCkzk*;4wE2U52yFQ;Ki_uXXuj8X;I(?H^fF{E0av?Jp1$Gj&7B-FZ|uv9qg-}AQTbM%t1T9}pj*=xt~ z)`+RS+}<^J+qaG9NglIr9V&fr4fmlZx=24?W1)SI4douoBiHA}SKu*j{rEpe=J{#X&dNpO(!q4>o>V~VpLr8r%_ z#B`5+8JzHGO#MB+ZhJRY@USOUnI(;r+T36vEx%a6dpQ<1lo|s>F7@sO(x@A3aPvV= z@Y?3f$5|``NA0U8O51N>&-L50((M~8A>~6jOslEuw_(X+lAlbjaPrZdz9M|(pm6+9 zY(*!I7}$5xD!xsR`UB5E-AxA`XzUl$q{6@0MDOjqfL!Fi^TzwS0;F?)F~i`^6O3>O zFQ+1`B|JfRhVU}sn2CzLnQ$@Tf{C`lH`yz?UOxAeXZNqZ}`t_~0c9A5Z*Q3g3wbC;T|SSP7r(N{_+|iMLp&gwG;=>IH@GL~rBA zH_yx5B1B^@;>Y$yvLHO90t~HC_yJ1b__GSP5MTP7!j}*qOnfDA4e^(WA0&s?5igaw z1+Q2kVGw@X!;h`RuTl-zh_~fS7!I!nrH0#+eJzEjlY?FGm`#1~AHk@P49tp+hxI4c zO8Tyz&9jVq$tbIn35yB$Jcc`nyYN2oW>zJ>3p)^xCY(rUCEWQ>v_;s>(p)34<;rA5p)-EOe(YqBSZV_C93xmnv|1S)q^rL0O$a7`fnF4wcx^yG) zL4;2{7VfgUMsnmnZuWMg98dYM{>(gVCv{>G zYo3FrHvG7Wuj}~n(F|#Xn;2`+;)fXga3gdLY+1yI7wM^&jIz|6`0c9-AJbHcpLs*! zXJQndd|TmxWIwA;;cbY|Q|x1ea1!=kQw*YA5hz0sS{b|j#pk0ImjC6@=j2c|74ScI zmGoQ=))MDmYV*T%T?r2&`;8PHPx-eZe_RC$RSFb?w3fQsr>|`(=LQkiMJx&s5@Bgro7akstVpo{Xh< zNX(BNl%G{Wi!g&CxF+yY;!diLxx_7mO9=DvWi&sg6D}pal5i#AYQi;y65(qyhT)~b zB)m?xQ5QiFhyKTZn(vR0-!_E%PIr_;%ti z$_``V{DcGxdH5-wFY;rkx01ka3XdaRM%KKM^5REPA%0~TT#8m1&ZoNzSZ zIKtJB;bh{|2nz^{31<;LLs&t$g7668rwWb~z9Qjo!XF7w6aGrrE?jZ+|ArUCY^VIh zFPX&{tQ2qDZp^5|>;aw*c}ww1QF61zt8-?{K3hV&%Do`n4g z$F=3#?iQ9I#6OOweoQ}@iOAx3Xc)y zlTaP2Bml?c1TQ8i{CVQP#q&|$%JzGZ__N*;Td0KA6Q&Z5eN1@mZQkMU0)d@kXOgqLMR=WO|$65(+iyGYSD6W%3! zVzHvXM5tY&@D+snAH$3|r5)axt=MhoKXi`G1y8xV1>dzqV3V`nZzl4 zEl&W)PU0bCKbkfkYx0!vJrrJ8pz!U)ePLh76F5LZ&l!rr5#rnO6`o58ZkeO-FI)*w zcu}-cq6t)!-%$9?1&VzEg`c(Xp4YGh^g!A+ua8&4UAJ4V+cagn?Tf@dG&S){wd{T|~k{r@Feg#TLv@qc9W%yGrhm4urKPY_-q z^f;l|MG?**{76Pj9iE>m25E$w2t7Vi^bv&JK390s7YZIerQosC3by}J!Ee7&@H+7w zUnzXfNdfK&B@M6 z%udYinwUK~soUh7gvm)cSy|mDcT3Fa(z$E*q=eia@$t5@IPnJ-pnCP8fNR&g4KbAk zd;ZWx>AiT}zC5*^C+>Rn>P6zN_xau+?s|oDJ#p8Y(4E9xFCcBvRY~9V_Dnr-*Pr$9 zB~I@dwFto^xL!oufw=39sqw^Je-^kA6S zM;BuVjU6cse?n}fot2fJ^-6{q;}#mrFGHn_p<+vEM20v_Us70BoNY#6pjTc=c5Yt2 zIWo5(Yld{=ioT`vFkRG3Uk?)lQwoa>{Joa3c_mpTGa9YTQ67&1c*_4CQZhR)w^aIN zm}u})vg2m6N+jG$H?5uo) zc}}Uhpd_!bpv2I}@C?dWR4^qJ@n<}%F(korb5zg#!rA8H$S99ub7@&|fdOyg%s0no z7Z#Le`3Rl~dbJqSk0-``oG3fM{rayIl#u@_ERPi>b=o7wNq;|$E@<2% zCfm$=MGw|0#*mw5&d-VcucT~+`^1z`+n%%H42_iVn|Sx#gx^I`O87(U=*cTBJ9o+x zXm;uRF)_pf5<9spFFyxGEiEoHQ_Cri@E*e(6%KPdm$*Py)gE(0mBskbBE01ldCe#Z zo!H9*)yI=~EV>+jgxrjiVv1DFM|Q3zEHa?|c;c=!m5kMn=VtLHkZ(S1GbW(|O@+!`a#`BSE=B>`FLi*bw_6_`BCQ@dUK2Vx|N$lNR>Fing z`Txi*Aych1CatQw#yV+?_itAJnu_e8E&8%J)Xgu)T$EopcSd23+0e)18IS4c+EV5{ zG1NBarr6v=S5}f&Fh%O4)5J=#H^mmVW%tDZvDtt3nzawbDSGds;=&?xap~NWsb+Jj zWJIi{MP>Qil4BL*8`CTUb_*qYM#gRk60EG_Oe8Rm;bQ^m&nXg}a;?_83y(B&6LZQ{U8E$sdbF zDOL&T{3wl|lvyge^8&a_*D`h9(z%)1rb|A?(L2~SjdUqig& zg;FCqSSwKx|7}QfvH=FFX_=ezNmKgOsSOMcF9|io^~Io(cR8iSSp_AS^39R3ijo#S zt@Hb2lWsq=trN@L z=1D2FUO1VzWC_m@i9}48fVtrD5YZ#bHdEC7t!;rS;RTiVNIZF^Pi4F5!u!K~6bCZcx+rpckoG&vBfPT%m7-f@p>yuPrYWKB26noF`H<*NV3 z>}uwH8rkwRZ7;j&Eczz${5=W9l!gWBTDr@WvwLB>5Z!2ba?kVD1=HnnZ(Sf=zVEH; zCK=*&+DCD&2kIhi{!MjXcq_|-?VHxR9Uitb9dudVEL`fHq)V1+&g-$!Nz%FNlsft< zQP*Ax3l@9FNndZnoU*}F*V<-H(%ln1RU1^PPY+$R?Ql1phBay2j7oib=sIfCus5}B z@2*R3uPMoyZaXtxcTU$AS0h{tNC|K1sK(t#F7KIg@(SAmrvW68;&MOH;pBpwJC2gcD7TPvq4A!^8*(K?G*W*$=VWL+3w^JHB+U1ucGTe>n?*H*Gm*0q;5Md^Gck0V+? zJ(A$Ve{{Akkr||=*}7gDcqbjsM%x&qi`lw=9A5B8F&`}qwmmtz7$$AFqz$pP&D8}om;Nf%b++Zq(H-}Y zd=6-_(#+9?O5d;0^|eLM*Oq8~{yF9iQuzv9m@Rpc?#TZLGAz|i(>)%`hFIHlL2z5y zpT&6mTe5z9Eq>-%>PfS*`RXivIY$@Bx=ANj=mr3sziV1bF)MY=aBcWb(@vVWQrDVw zv(22N4HRu&mAbyTqhG6=^nb|8HfgP{=P-+TPIi7-j{L_AaLZB<$v1LxW4rGCXqHm~ zl*yMCPi`s?b!9RxDa|Uzy%OCJ@xY$B=uG)pC8d#}apAGyv2met%Cd#rh{a~9d!gQE zNN7j&ML7mvR^{+$Ljp}C|0CVVP*sw$4e!|rQhcF4pzHrJL301m6z#H>;sP}R(rXv7 zKtEP3(t(S*=Y1a&Bc)&5u|GO{QP;xuoL#q|uN%!IHn#}9MTQy-6gY|By_yU7LLY_=^duxugdcYxT8ZRb zj0vv(J-uIWc2QAmb{X#BX2?r*X;#T}J`Kq|U$Qtgt=!~G?69sc)whl_c@Tl!d%)ICSo3)4Xa0kzI%*B>cG(yfK7{{Q38i&C6go!aK*7+YS5lmeMDgrMp zsxZpq-}0pDL_Uqda_6?pF!KtKE0N!H<615UFAG2Uh;DCC2A8rGHx!p)1Y@|%&oPwR ziZSHiZ^z{2m+-x+@&M=`4!Sl5p**f3ly@tNV38XsiszGnhkvf_jhhm=?6z0%$}MNfqoC(2rmB53#f6PeAvGCqPV{qW=1kn_4Lc?_ZKW8YC0rv? zHo*{mWRp%dof~biR`Z!8B0_mK#w$ksT!ritC(7=Tu?(@X@>F3q7e(=sM;Ia+>tF5_ zN`<&wkWG5RN*SQ2i1A4iDINzZjiSs~?07bEMTdq;=gKjcz8S9d3#Qps>9=?WSe!M9 z+M@l1@{f~&0zf}KSh|-G(rlk+)`KTV% zn*`;7!io>{O{D1+`snOO2_QB3K2D`zwJ=0br8YjN#ch$iOMPVb&w`^TKJzT5M?*xE z{CFcmda*)pZpvHeQ55Oczi3Y_(_0?5`(c^B%VV0&yHY<^Y(oR-u>}{U-~&o}ZHGQs zS{;d%^Nn@-X10nIdN(HZ&C$BG{69pntz4egLLd;5D1C)jQX~zUS-p z&MUx=f!daWum>0nJPu3(UI(TFi`LaUOMzQ~%YpmWS?ZmeaPbX_Z`L~} z0B2cnF&`Jd0k;92z|Vn2cv18f;IBY0yk+nqFbuf#t$ODu;1OUx&;eWw^xjzSTn7vR zehe%G{tjFOyboLp^bZn*ZNM0y@HT1$Xc>o#d|a#sE(gxogam-sfWHIXHzNUHFwnm> z{zWG+2KWgu2Y3#+7})zA!~@O;o(66M-Ur%&F~Rr)81KSy;3vT4K;JDWa4^21?2U`V z5VisD1HSfct@0fWzO1eOp0z9oQSF+Xlyg5g(vw zftP`&f&L%D9@q+~Z6^rrKZ1Qbd_x+Ai%}59084>;fZKp)fS&_z0)GcS1l|V@z)QV@ z4Ja8f73j7D@qj~sYk=p0r-Ao?SAe&xU>}0N6Y?<%1T=nvCI_wpZnEIwgPkx0{sz>B z3c>?mFmRC#5rE#+Xj|Z`z{9}#d(gRnbN8ZZ+Y7=i-~`~TeQ*GH4Y(KRU4zaDEC>4I z7mHs3(}8z^i-GI**E=nHad89}SAb`M+Hm~2rdm`DFd8@t_!)3H@FH*%(Dwi`09FHU z0o@LwbK<++eTUFgK^kD_ zhXW@72Y-$x26q0!f;Pp)Q(vIUqXpp)U_Nl>mnb1{Bk*V7HsCGbIbd)Mdh=Ikd!P-N z1N;fN7-&9;jDb6VKLg)8g^W946nz5+flmTUff8^H@K*~iKE_4xX>=N3>bGdCSV5=+ zCINeX2Zw-Vz%{^MfqQ`qzeke+J%2#e#|gp|U@9>8N7MlDE8xe#W@nHtuoUPOkIo5< z0gnF(eF13k{23nMA^^A?IN%p}4m1OA0apOM5(ME>U>Gp!SM&|wlfY5HX~2A78E`T1 zHQ+kn1>ncP-e-{x@NZyPXUu@W-oT;fkZ)&<{}s4c4&im+Cg4ZFy+EJyXggpy@IG)a z&>w$V;!9u*@E2ezFzf;n0uBc*2j&7l237$-2YUR5bbyP1_krI4{gVV?)bFSP{--IX z{(&lkVEGfB3)u1^JO*X}gS%kZ0aJnR0Ve==0ZW0$?Qj@4!GR2b*MUi01tIGaY6SQN za1Ai(G71D73H%xOBJdXQO`w;h8%lT$2?P6IM+tx>H;^FkN1%UqR2?u0==m3_9QYk@ zG4KX(6R_(|loU7?cm?<+Fsuh0`x_+$cE+1M<^yK{*8wfSkAYW#mfvxqzm4J66XO~f z49o?N0&WME0#5_i0bAZd4FP)suK=F`di6q+0b_v1yC?{-05~7`CU6~aR~;M#-T`WR ziR;lp+W(0MmgU{%{0X2mBoPb_;v2S9e6l zzk4X_CO5*cLT%Hv0MYwfxUYo zUkfhM|DV3j1TL#8{o^k$$R(mTRB{1SM8pkI5z!D05m6Dz1yd1o!wqr69Z6is1((d6 z9&^i4+fY-Wy?76V)OpL&%GB?X1Sk_e$V|q=bU@?d(OE> z-|nOoPJ`ue7xWp(EEh&V{{-p|#=&fu2aDh?xEFp5&%m)g$SJIVq3KLgdy-%{_5m6j zTm$#R1Moa-&(Eb4hCWEna3sKGFdLS`?Qm}|at?oip@SR_R}%i$`Bd$LY!9H*=%z$OkKa~=JkHVm# z4oCU`B8H1#8axVfVcj&s!QrqB1`Z@4a3KuJa5(Ntrv%|hm<_*!`(fV)>Hp_({5*&v zA4cnip>XkF9suhPC1J4RXi^SefVbdf82S*65+=a<50g{a4bFw5;bvF}kH9~|58!F| z3;Y5G3}+lD9K(ZfOc+a@!gpaAEEq@5;Zf)_g0=u7pc^K`f#b;uoC%BI<8Uwh7M_7E zCQt%!AM_bXV}%iLST^BdDa?k2vnP^69Ni{SB(M)W1OEgAGU;xU>DO?^6av6`Q}GYe zr{NEtf)%iSF8)U`1W%_V;FTGa0DNdB8G^sUfGlRov#3HCGMkdhqW@3Cu^quLkE(!E zq0eZBPM84K&%q=7JKPU1%%fyr>-iKV8~}qJW_|!;VL42LKf`QTcLCiD7B3{ha1Shp zVfmEE82bM_90_9_j-Kx`>>>bE~ME@vLB0^8nZi7QhU+8BT@!;oo8C z1iIZC9suKE8q9{-&{a%ZfRkW3^uVBO+R9q|!7Fexyk{N#e?N{r>*?pPd;>Y0NUMe! zFkmAQ!RGJ`>9Mfd=s9BhKCHnH8AuMx;4M|R+x-qB92_x*r&=<27jzm<+%>W z_*Qv*me3nu1e|A7dD7s^umEQGRe6rU+3-Ak?5-+SG>oAB_=B+lRi4f833vp~zo*Jm z0k6TRrSt+R$By2hB`vz5> z4A{FN35Sc}2k>Qh9acb}6|9c=KL(TG1^$ES%`m1j34-aJ3yBa%3BoN{0V9fN^|9mt zo`VH&K$j}dUYH5X;3u#G#>DY}M_Eq82spSa35LaR9Xts4!ztaWJmv5L^jYa}w7s7a zfKv+N34r4y+zczalOQ-afgHdb=(CFHc~AVo*>E%b2Rs8?K0w59Y9d9ynkgCo?P40N zgt_o!5($7SdlN5Q(5K21x`qs-RC$VEWKLf^;MfGuzzSFaGy0LjV*Q`5D7s?V;4;FU z&lgFl%ZPT4D3GfzBXWGoqm>@oZOs*gD~mtRqZ>6UTW`4O$qqrkr(iyK3p7=xfk} zYw5A*YtaL1>1pUI(EF>N>zeYVYL=T)t9EL9DVeE(0@UnimraDFMUpc4bd9zwft-06rnF%Evfa% z{QlLFqx@>M6f1vQEhY7hNax`-a;d%%o$4(9_u9*-LtjO|Jrm~h&>iS4?KCK2`BQ{` zPqCy18F6*`V{a!1mKY6v%aJpRWp|Jf9ljJfQTxOc3Ty!&XJ&DToFeMZwJS!>y)vBN6#@u76nS?IH5V2}|iUJZ*;Os+i;_a>_)G%cmta}GJ1s3P|6z`K{59}R_SSTTY9vZlJ8>DhOVVmeQ7$g(C>Ln z!W$WJ@qfimw$1WTXtnLfegQpN1+$!TYsyK(pU3{`W3q|xPGh5-Yh*Ny@!e>48VzAy z`uqfc-s9*2wx-bdGtk|SNpNHG*LyF;0T7()th|w}_n_MP-=j+>~UNa-Q&Zqc0D(y39f8(1Okum*u zRC@YqxMWvHttE}GoNx=#!&J8~?N`5`FWn)>3Fj=^Ay+j%pPiJyrY}S~h8c~V&YhAP zhP`r!zMFPcde%5(Mu^c|TD35mJKx_WsV#`W z?~jt-f(m}}k8(~Ky<37KsJJe>B|d`t*}J7!d0@9(Mh|{{ccq7RX*Q%38jNOGzm6W- zE%jRR;4;F&q`*Cuo>8{H6;9`{>V~bAq902KVArr#!yjL5HXC3$_6PUK?v|wQg*|df z<9%n3xLcBrdCy2{q!Agu{~3Eww>nN*bp#s!dEUpDpAr99BRKUs?kfD6m1p_wbGu*t zz#9H+rKe|2S_-PoW+#loo`}7*mt1Me=yOjiqlL5eb5hdZ2=-lv@xkY0NGnSE&F7@J z6$$<1IVn{JKQEVCk%9Hki+^h)uH|2!XMbBC(pyJj=ZNa3XbaSjuOWP*^vL=&TJR&S zjS%P67i25p!t0k*dXj1q=S;jkoPLb$QX)U$&pEb4+P0zM4wOi$(%2_CZH&m^$M)Sh zBBc?Rew$sfPfFSt>4oF?4pXy6nb5IlgW-OQ6F`sMk;=fNMGq5*Dm+C+ohClj^dKY@VT6z)sR&++L znoEc1?dXrAo2`17D{!4oYgT&qc7?6*$vN$6)ay-`6h;|!gP+HfS^Ak);bjZM zQW8ZXORx{rsC8W91)zzEXv)VA^x>AC=p16{`hmRZ!AcLy(V9#BXP_6N52{hEaWxnH z74&7Qr`628box2LpERC!1r-XW+6Objj~}KjE;3) z;y%xs#mw%&+vvNOq__hQ?sP=*A0W_s9SlF`#3THi4X^&0NB9VNTUNCQ^wazk=#2a| zmv*#l^tDH%ZAV6~Q%5DgBe^>Gij;IT9&)aFRh*rS=%m+PwO@JW=u|TU-B_|qZ64Le@w1*Vt~j#CjK!D9J`N6 zQVhD^amk4xeJ>uDtuc)BZymSWBk9toYP$;{veU=q68_@7PT1=eGu=aL(xv5*g+Djp z%{K-2dd2c*F8cN365pBU`k&A#U$F0awAd4}sWWNlctVaVQ%}fMWy%R1#hW@OpOCi7 z#U~^+mNb^1kbJ$rc0#r)s|crhMVVZSCGKlw65fTHpZZ#*$LS?6#v6@gW*4KmZ@bqk zJ@0tQk{-MVU+H4B@qOX{Dm@*%WJ4Td`)^$scXyqX;5ee#c}j*TKR+eK$}wlOSc2n2 z85Hw5lTdr97K^?Zof@yXw3(!#7ondr8(^r!bTyj#*7;MVXQWeh_Tj11yBh7B4bI9| z49=cs<#<=tM0fwW(sO@JJk}tQz{DjA-LICehZjQsgPw~XfPVX+rZC`1v&icAKS~*^aznRz><;@2w zH2hxlybF>;c;~JQvI#c*2!B1)0|`@T*$1$wtwL|;CI8AYg5}2jMws)`J5n#6fL`xP zd^|N`ZZl&k2#?;rf(dm4lrhO-CFO+*BUlHv)Uo$byAIJzG*r(< z?@}EOJ(ECM1$s^-;S)*fNrLx&A~`*IPC&Vo>V31%`z^*GhCU4c4R*1Qy;55<2yFK(!>^{gfut@EZMt@P>T zYQ3UPvP;JF;-%RBs^s@#`qKDoIo^vx4E$Oy_hKAc@wL=TqL5F2E%8Z4^!O{BDA9tc zzBEx~o!KWvuf1{c0s7bIw~tZk|2q1OTDr#RLy9ZEmUBEW*zcP=S5#V%$=CzF5&zz_ z=6k=D%-*#6C{D8UkRF{`!5r$%N~hDea;~>A$=Uh3#3YlS!`CG*nMUyQb=j@Fc3mzd zQ}{!^li)t&YyEeUq}=tLUXlW58+mSFPHmJ4y(QwH}=BK-&cCNkp^oZ8te+A zkQt}U*JeRiR)yFpYui2(i*=bJ9ro9;(~E6;&K>qL?B}rS7-Gere}}!itE0E$D?HH2 zY!AP$VDtgEh~O9Oz_zEk!lqaW)Q5(W^1FYKt0`nK`v!{1i)|RW+oT$;`s8zR#~d!q zp?>5YC9t0%dl7bXt!~;gYV28LP*3d4!5$*h7c%~prc#5^H|3{PT5z|U(slp|%(yA} z1B~dH-JAfrefp*?QV;SxRZG``4PuDjcvCJ9AmNe!6!!r3bf$7r=q+qkO*zk2Cq&~} zhyQw<9Qu8C)7q2K13@i+m7FxZ_UxaH?`qowyVI6@vYns^_@ z(H%$O^M?D5U2rX{{fSH-(alAZnZ^m#Ni=)OdF*BX!+st6DeTN0?Xn$vNBDqVOa?7` z#((q>g@-@=mk6|S(y*V!&N{&ipGEZ4yCWO@0y%3p$mrp{$ImU(1{qzvKein0<-I|M zpZDE&x#iPA6u}l8RfCL{g(Y|W_oNmi={Dbgw{OS(BKDznN>(`OuZ7mAtwmXe{fqw* zzMNk@c6|9iJlrCJzhNIy^8n{V)rF}K2<^?+Q-8PhrNXSM-}h?Oo`Ah8_SH4vNuYDC znL@Q^^)BSS_dg;iAcAAqXWbFOxSF}$cIhWu{%dqC(vxr*i*3opKZ6NYH2JR zUvM=_VJWv`h;g^~XLq}0-w>lolcE5(^|{7w+sT9r<*!BPOXWffwmE(qVzl!<96&t} zr5=C7F<>b5>~y(h#ZX%L7dZBzv{)YK_RRS`U9)dbR{}5O4+Gso=V zJwBPs^mJxUk7pRoyp!s?P(KW0X4THo&twy5e~IA)|faw+-Fa#+N3TOKT^s zADz3A+tWe?vv$W-=fSk+V()-`w%VC_@v87+uEj?hdmfB^DfTe6+n08rz38ja8&-=t zJywIBU0a30>{+%^Yv2R)^^M%JZMe}V=FYgxrsyVBW#8b_A6-hM$q$H-ciF)r_zsD36#hw{#v!DUQZ5N*#-EtWZZ0j(sBu zwE@T5s$9VF^GHH{fTLX|$~QQM;^UJp^ zckIXKM)WW_(8dTCdDv*vdu&^~G|bFBh)?U%TGB&*!?2sB+fP><%2m}fc>)5n%cZImVe*exU1V!-$!?ZLZ#j~BQm5S-hIb9Sre#- z3g3^X9gZV`pW|3Oj^vE%&Zsbs);k2pr{j!1-g9~|DvUSU`xf`0zj#S{kgn>-8!ddF z?&h-fquSY2VS{H(9fdR*^gVxIHUt9_TEpjv)%|JQ4V$a1O;wqQ@8wWPi316!JNO zIlIw7T-r2(9%7Qi4+wvnO*!I0sn^e@>+ZPcm8#_#pMp#|9CJo{>C{ZqC|=TN|RPZ%4n1ZY~$N z*Guzr1pO8fE}mqxZ@OWC-FZwiiG;WC@C^~M_SvV-f4p5Pv<^*vYdl4yQbdR`OSomVc0bNF$VR2Q&TSi)Eed4@P=QlKBrl=zvX^UIl%Ig^jNZ_ILgnChD03JIhQ{W|{t zK1)hxvfmRr+wGy<*Ib&esBs)5LTCL_b7_SnqZiH=|5>aTTzQf@ixu6FJh$f@!_Np- zbT7;@9%y=G&Ye>N%}~O4j!>a@^VY2_z7Ec&3GALPLuMOsP4{sQ_H4~_tVUl>fXoGM z&rC+T8M@0i+h|p1(L#=yS>JQ(=COnRr-jlskD`BLp=9Qfq-Kj`YaT^*Zn0cby>hVx z&tZ>iO92Bh<4qd9XY?GSMV)DnxIN#>YjYTw|2T(;LYK(#Ih5VoCZi>6E?e>Wh0=De z5!s@W6PPSC?SfxaUG8S*-9M3WW+?+jAETwemTWmf)Kb|^z~J^v-5%ZxHJ92$Cvoa^ zsa(bG{AQ{6&to&A$uds8$@Kf#%osb5we?%eB!8aKw6J{>`_PeD<5nNPPWV6Lzq!V0 z>iQMQy0qp3CbJ`l-K=qDclw=C^$7HzYUyUnK@VB(_AJ*Ze%~n~}7g&rwjBKACkvlSM|mCP%q9w|DGxssHWx{|J4H zv>!uzDOh9#1^3)=XWz}nUj_c!Z;+Bj#w6d@u#fYS8M*AzcF#8kI-h+^iu1`(`bIgf zyzg}Q9icnM?O&BIcntU4^`mXMC3QgJUKk*7)}yb#_jmDEDo%P)L#)BA`c zQd&rV4}4j!k%{2ZFW)Gg zu;%kCU2}zxceI!F0X8t{yhf(=pG|;auev?st+`BSb{iO*AMSl}LRV6b4`eoR% zYc(fe{}ua0YZ>2TxzVb55n9;m%m*xQ=HEg5y&b&~df+RMFE={Z@n70M(X@^2FYfh5 zO45`>>;4{7<)HOVb9i)Ae_gxLgHezx#J1bXaG3j!XutN5eYv>7=;)Ow&c}@CdK=>`t6^I^#z_)-i;Z0@o!=a#DRW%hw%@StqdF(*{}(^q z+pp(j{m+kId2ge!(OLLrA1l~LHovlY)245VWp7|J(q^2^6q^s(oMdyp&6PHvwE3*f zqZVTwZ`#5~HovlY)244V&9KBX5Cl+ltJ^O)_wIa z4}50d_qJYUj<=84b~#+>)$)nYz5EOB@0Mg1-hsXrM~}1^kY&+ll11k#p6|Hc%N9~C zhCgp{+shWaAGdhzyu~*!SS)(a;__cDo(!;N>pcQ3{upBMQX7lU^s)HT5Q|N6QXJ;S z)AzZS@bYwv-)^+%+4D-wlN@Suw)T}xTa4(s)xGtk-MzQS#VtmMy49U}L`yT{j`yYR zQ^@o}^IrcUw_f9AFtUGj=iS&vik~v#{5#s6oX&kt@2flg#yIic%6;|FGbK?{^?qYw zq8Z)BL@Cz$j(x5Bj(z1E_w^F(`^3JcH^;7nQg53P?O#1)eST9?w{b+#@lUHWIR5En zdYtx(j}<`we&XUi_2tkuBd~7ni&kOezUXV33*_Q9GWX4COaA7xC09t@?MBDD>|yXm z4@uo_bgjN+^efieo|CO7^ptbA-TL(u{~cH#u&lp6AgOwrXnQ7`+y?fxZpZdE%sBom f7kBWy6iaQLBK|vhJHu3XS7wUk>y}&;quKuh38+z4 delta 64638 zcmdqK3tUx2*FSz{&N+yPf{Kb4h#`w3|hFl*f+R&C2RAyI;l9I!DvIYgY1KYi4cO5I#@u`+ML2@ALWX&u6<>-&r%W zX3fl+HM93VKJ;kNj@Nr`2<(tLD%F6O`qyA66ZiFbdf)@Mx00wv4F-$k8T{)7_nGx7 z{mlA8iEA{=(VAJ>-=h+}?@@`~_c#WzSs{ae!<+`g;NM0zq1l}zYshx&W?Ak3Qm~^N zpJ(r3`Qo+h&pukRHs$#D->j~CH|Xs(HLD<73Ecj0`@o&kv+7WGmBkQvd)+{j{}xN2 zvGq!CNAAjfF}WpaIp*xULc?60gI8NtjPCRKzTR1x-bQnn_r7g$ql=!N%wHao(EExp zDq;1S4y#s92g zGD08mJ@o3D&gr0oR0wGq+za8ZKn5-w+?8-If_oXwdT$aBoBgu7}`$81Bd5-VFDXa6bk2R=A&r8?SAO7@i}Fp9$JAl3d_p5NfMwk=oH|&PHmVnoRy5Qam_kO~Vyg`4z3G^+v--i1D-0#Bu9^80+ z0QbM(J`DFKaDNW>mvDat_t$WL3pZXz;I6|z;Ibcue}07fINU$OeG=|daG!?z4BTho zz5w?nxbeCS_iu1th5L87|AgBBgO|f?hPxHqt>M-&4&{M_1h>5#kKj2dg%u&ZoHD7uUU~EuLd!HMaxm8<(p@ZXN z*0Cn1jW;uY;7hEd$~Vw_+N34!@SW>rf2J~3st`n~{0P&ngQ1;aeU`#C!clXGYXF+d=FL%^50HW<;);_ky+tWRQYzp4V2*3MkTzpNM+bb_?ML7 zn_`74Hvl8VsN`2(R=74&ULyJ8422J(au!p=0!g88iNhGpq>69;QMEuD4IB*xEjYSN z6?8WhbQf9TAyO!c@PX9g$p@5t7FqNLQs}+os{ENG{~qFYsNl~El|i#aU()nnlNGLI zm`V784yquWBX})or4(&doho_ILtb|fesxBwR%vqC z+^uj!K4}_ErUT2%>nFk|Hy;z!;%7;r2$C1nWyaD}iR=VL@CuGQ37D{-#FZ+PuF&eIHI1iq+()0V~Uud@|uLP{l#i#p4uiH`Gy|#Xg}j+(;Rw zQN?1a!sikG3(fm~Whgw9@Yz(3;iMXLRDt0mDyKD796<7eq@wnAhECH}K|a(s)2MHz zW-I&_$`C;oIzlGxL3j_Y23Kmc!L^FyeQ8X@ko<7!nw=$3K92vfl#oI#(1NQzgm0%7 ztR4p$;7XDI!g59?Z9P9#B3jh&3yqaNV-((%+#zf6{!PWVV_z?2_U*T_mCZ7qlTabD&$Gu<6jfni~)EW#rH zH5jH5{V0QvM6!5S6o&W=D=@iZPU-&aDbsKp7@zvx6K? z1mW|j#q*nu>KCYGBbTO1NjJ$4f-dj}OKXFaV1s=(Rq*~4m0>oeoFLQvlCKo<*9xKv zOcRy7Hl0oqzQ0)E-AH~Tm7io&copGyDofZ6#Z>VuO8AN@-d(0Lj3WGgGTkOxE%ONX zqKbc9pyZq!7!et%_y2SeuTeDEr_5N zZzlXHs^HknREY#r#ogN~*FJxY!nLk!3%DH@mAOk)!uK*8tkclq_Ap#>&Z(BIBs`5; z{4*^cqY3|p6n!U2$!iu}PhGieu`0is`_(=N>4%hXVqPk;2F(&>RL~I` zM3ZHz!EluN_-sb1M7j_jPVzHox@r}FMh);LON3(o<8>2du;-^r9z2u0%rts`r#@S# zV8d|2@1STnobZLzm3Eqzod};mW5~B8RU+F7ziMx-`ewjUWx9JPA(%|MDNo_JbHFQ# z`tmJmL7;*SgP~&VvN{U6pgr>XhRUBn^4hdq0XX^tdl|W2k~gd%OB^4UDxok+D4~M3 zzN_$dg!@vQq5f z3AfN-j3G~|av2QEsp3wwD!xPV13}&b4a;#9YU5v}lu|*xrl}&{q6`Pgq_@sj_;|wa zpuRMc|FCNE)PQGc7Gx7Xj>gv4G*&DWe;CeD#rd>F(hB;MG89vW5-KQ_Ox>B*g4Kjy zAiT0DRU*p?e~&!lJ2cBy5+3XY{f{27)k`Xa=DBJp!vN|Ul?tAbEb$!8``uK~Jv1gh z9jPP>2>*?`VAvRiYqQ2iuP?`fdK`n@- zU2_zbbB!wSpROu^9+B618Y|~%3~g1g-S9TG>@!;BZlMhADZ^_&rAkEWnmke{Wun4u zBtHXMj9nQ*7KQBcdWgEfLa}5%;ZI3LA^smlTc?ebaDXa4O^yW`Dz6(rQS=8mZS>c( z)PR3BiyH!{;+l6;rT8Ms)R!#uEslwq0BR;3OBFvr($x-!yKj2(KXLS2eO(^V={S7V%+b>n%I7U%yDZ{PlqKb z0BAS)_l~4bnZdC>xjP%-*p?g&|Gt+TY@Yzb%pZ!kbuDU*XSp+o4=5^vzs!cY#8-C1 zbfaMe@f~G4H z&?g3(3NqEA!!?JE36VM+W$HC$75 zIG9ph7^URs5@2LCTyu4}HdHaOOox;8Wu7HETysa5P^H8Dq@?=iF2J#V18R?BK)W{R zGPKt~pbzQr4my0Z4)3VLpVi^okjLa5jkw*Q1yY!>t1-c#EwYI3)8Seqi1@oYT#FJA zKcvIKQ#M>*>ToqTW&7b^S(nhgLEK<)>u}AHWAYgt9;B1MqQiUYaKn9#gEv@*d)svh z7F~kB4iC}cfjT@?hg)=bFC8AK!^3oVJmGfi`*2;t09}UOIy_Z}N9gc$9UiH}vvhcr z4xg&S`)E-DrswDqqIDVO>hKsHUZ%tQ>hL8xJXVKS>F~G)9Qyw*U4j;v_%<{-8wu)Cx1qV57FUQbofm=+;Bg%7%psZD*mDMzqc+yMLR0hUxyD> zko-4LhY!=?79BoZhezu05js5netV-vBXtP_bQwnJ@Khb1uEW!Hc!mzo(&3|Z_*4zY z{vV@D$k7r2%hcg>b@*5vUZ%sx>F^~we7p{?(&1TvWBu~FOP4S~1A%VP;S+WELppqt z4&SW9vvv5hI(%{?Za3`EB}{2dFznLdH|y|yI$R57G5K8`u0@)NAJXB|5TNTzi9`Ew zG|tdapmn+o7{qCpTZhlmK%i%I_-q}1MTh6;a05k|SZ{8F{ekh;CCt%f@Ymt_Iy_K^ zTXncahZpGZNFA<*J@tRQE@7@N!vGy#q{CBn_&gn+uEXc+@GKo(tiz`|3RU~j6bp0- z>8pP6PG4s}l@(z~U$f6*DB>z705Ej}Eo*fc+0|5xT4W7-CuSFiiK+gurzk)nyVenK*emnB0 zx2H_(F*@^XkbENY7?pXdB;N;ljK(}=k`F~5qcBg78F{<(yB!2?=VC2vIi5B<)c?b1_=-?2y14D1cFtXS3vMk;mZ3vqAE&Am1DLD#>q0J_7kN z$!|eE68Rj-Z$dr_`7Fubk30lDU;)Xm9Uoyg%*9~G6EA_=Q2>J+k45s!kjLQ0<1hJg zCug1}mN&5*UgC z7^HYMOMVdY7@K%DNInsHj7dCIlJA2&#v-0F$%i73F^DHe^4*Zf*u#@0`3}fq$l*zq zypJ6Lj5R#*65z<={?TKR{MB*5W6a_4m;5>8G1l-HB!2?=n~*>AyBq_^ry^e``LB`3 zkiv6F@`sVfP{OlM^7i);z!<`_LjrFgkFkSiv*c@$$C$yhLGrI4KN9&W$!|w~6!K+~ z--3KP@;Q><4WvFy$bc$ zhx;Hf9f5c$z>&ul*<+FX)v>_iO6>8M{5j-t1@;&ue**d0$e;O5jsfIzkgt>c*U0B0 ze@OC&k;etrv+p;kzdrnZ1o9BrAqCz*9#>k=X35tgk1MQagXCX9z5w|u$!|x#5cx96 zZ$TbcBTtUx6GulF3N`>QugR0rtAEc*ul_8(dXm3m?5K4S7rPBLq_3MhAbnk{by<;X z4%<4ojNJjM{xxBr`?aG6Lq_#JSC{UN`cZM5MLFWrljC}9WrmD(Nnz>LN2=d;zx@m| zxZX{~EJxg7ut=;qRq3Bu{loC;(}=vb)$u@jY!M!7rytml?{1_YIDiM5?gL=J3k80` zFyMEMg69R3)BECqP5P=U?b54{FY3MvHO3{l{mi|XP+teat7S80zKJVuL9E8RFnx0R z%G0SE9nl$KNlM%=*f8@=RY6tCLg-jSW&6ocw7UchKl2^)EP&W~S=3&`J&siwal9_T z@oGjYl1mvc@Ez%nt)uVaS?6lv##FLybpb;SHm`MA-m8A_t3LE*{X6M-m(tgnE^dx= zxH8}Ik;$FYQy}v_V=EOq6xo`#<39K0&UDA|Y2Wa2=6GZJ5pFnF^W==#jMw`)OtX$4 zIX=tEkDYa7&dx&avDxc@tBKAz!T8wojxKZZI=*-jY*&3`_?xtis9&$FIe6CrS^-d}qS9<#X^m<#$b?Pz^{`nr_0i4l$w)@UAozNXw7 z!+6qp$L4}Ae873f?t*?i(^z6 zrLH-=!p}8Lfl&Brjgkf$PEZj`njm@$KgwFU$?>^g=`C zJ|K9~FX6DO-mm8CxuaS1Ybwe88LZHryCG}(`s^@o*Uku4@Ir8G>FaI{3v{hvj`8yX z`N8v!qIqH1BliOFoOir7ZxO$I&e3=Nv_9=Fq#4$HQyDESn6?L5_dkDz3PaWpWodg_ z0e|Sq>V3P~U2wcSznpix;0P~17tjsh>7HZY8zEry2b;OB7#-0IqIm2D$CL#lc*=#E zM;8PbZs!~9PsW>%kYO;)L3S_|}>%Ms|PE9=5%U2yzXHmLh8 zkeFHhtGoRtkaf*InXNJaa?QBl7`HHs51!-LyzoX|8{znFVGjRpw&SMq*HOJ|<*_{P zf+Myfl$T$qnON}v<9A$exNU#%O&1(LRbJ+MFF1}Y8p=;xaP(T7#IwU4w=5pUFJ5pw zwzx~!3u@@?VD3R*gAJysslEIQ(C!%Mvu59}BNrTBEgrzHTyS(;GLXZ_9Jgd5ufO2f zvSbbqy6Es)dJMptUzYA<0Y~y+@|XT3=XQGao3^&DZF!EJ%aeKBMaQY-7M^p_;dg5+ zUv|-P6Ofmd)s)^kfbnOSJGR|68;Q?~7x=D=HM>^~X8{L6F&Bo`Xw9!-K)AlU=xAT{ z7zgrlRbh`~ke(&`5d7Zjxwk>hxo7L^LE-+Z97!vG;=f#U^tk;2{>uf&E4Sa$-+W2- z3t0Y_|=??i7|HY>U@6LKjotGj%({CoIpXdJ5KFD{3_UdAh!S)kpPc z$|}&j_88WO(Jms%9|F<}^m6?SFd~1v14w+FBY16+?}FuE+1uU)pi@`J?6qC_m%lld zt)0jJ_^sxrwXGS?=~Q!e-A#;pU3Da`ui+tA9Y3!h45TLfp0%7uU9EX}!&b(#t~#dP zznR~4wdU&mGmJ*})wG&hHooFz4E#OK(eBZG#wEX})qMQuJIrYLBh9ht@epGQP}k#= zjnja3-uxKPe%!Hh^P|Q}V5dCsl%#(?(Uk{Xb_8yTi@5g>@I;}ovblY?;TW*_*5W3~ zwFYq?<-#^X){-sBd}+30>y|L%K43rCa>|%?EzPm#$ymPhQq3<- zE5V!2_BQNYa1Dk<)g!Xcs{wF7^%(x$X~9{?gr_?hmqMPRr$-I4qgdHNsX_mQ!({Qz z&&quDXL^Hi_tz$YFO%Z}#^S?|%cNsxYEC@8kr_8!ORHJ+>~f6j4qTTdR(9Bg}R zXgv5&*O$A`$lki;MVJcxe3au0eg^vGNys%}dxFgFSo7Q$L7zXDYOn>=;x5m%9aO?D zed;L~_1U#h;?n02VZmcw7-+1kPjlS)LWyw~=zryfKE}O3!(X%+-vs)|i^&;>Df3Mi zK~3Q(af`w6)Q$&u8gmSK`4*nU91p(yD~wsk9j|2Yc<%W4m78&u z=u;CCG7+roxB4kGS}y#Fp7^m1paSCHRmLz!aZQMyT+951zmZIW8J90^mXZT)7MY1q_25z_d-C^ z{f2*>Q9aoL;oiE`m^Fvfswcm{W4h(v} zlQYs`5f9vd!pm>xVfU6RFk14UGH)A7+n6J8cQ#+i93{KELkv^1ZugCxJDB6$f5rqn z8wvh!0%XA6_QsgIE5@2{_a8DDN7ko3`O-U#UotvgKG2=FGC4jv&|7+w%Li58^=w}&9>y0k0Ms8v@?m2kK;;Y|9fH!Q9vO*LX-)4gjeFPzyJp&RVj zV&k;wGvAz43#tAmMxpF2CxTIS*@-?wn3VlpIup0^E)cIil71l7JJAC!yK{l$Yw>8r z6$X;-G(dLYA~RhT_``{GD5)mqUUzy*ida;ThF$`MD|$sjDy9V)x$U<#_DZ7(UF)@xiZm@{{Kslg}jbs#cEbGci1; zmBV=^2@5)PCc0N3XrX!IV5$2Nw|h1yg#(b3y76p}fGkRT4bo0_NMGmgn&st~fA%;p z@v514E}Dg{#OAz@LvH=8Vg4@fp1}SSSaAGd3R>;uc;b9+uel)TnvcbyV7lLkGwvId zTz4h6(#sKkVHLmA%d!2!GQQEv(fi_DzS+yM;bLE?&9V2Ql}GzKdS5EwB_78;m&PIa z{!%~g^m25(yrJ_=7AXIcd8olt0pqjQ5eO_4viovBEbH{;bhO%lD`Q%vwi;@vJ?!OJ zdnJNfS~+U23^Vq=W^nv=rI$U`8?=8LI~#&Z>{9oRa>>B*;l6Q_>P3uphBDoEQ$}3O-EAj=^t$A6kKsylWcPS*nzb9T#3Jd8lfx_{BvU3o_#)!@jp?rQCf@?ujMKh#>RY{e!U zp%n2|D;CoJTNKWNk+|y0Z8jg*xz++cg?UJ(KkdyjET})PY~{KJawm&MBwQMia7?d@ z@N3N`@yWLwVpiKmWG(7{y#) z7S(z_AlS@_;;1hR5HI>N@7Ci8>#ML&eA!0+Bp37BvSl6IZH5}A&rF+&QaV_W7#b_$t4?9@IDc{h@;N zj|PJdeIcFH740XEcVbz5yq~zCGkXX29?tsCEQ#^Cej+)LMF*E) zJ{Tx6TKWj`rK>&7nE_Ba2-yQ!f4_I=-PuV2kP9| zgSBI=W`SW{-}s5=f>@9Cbx_yjNg34_)8Lrq^V+fJ#g{=WiT~gy+VzCOfDY-&{>e}I ziQjv&_->a$y!LmgpFD0^3|*XAeYEzPpBNF$?6C$I@6%^O-zQ~2e2_gk;k`+<1u`!D z-GzI0c-rCb9+(Z@;ytYETrhi$$NGzH7S^*B%Iya5BMa-!GyTO$3)_VB&JZ?~PxKcD zLs%Lg>o3}cvITw@dZ_4ZB19myZCZ)7p)9D&nGRrOEhashtok|UQ{f6_Av~vpI2y_< z{LA*j*ozIa%dW&OabM^s`z38x8EC(|ReNZnKm6kw3#@xQ?5@*x1p&W%4*UcCQd^9P znV6V}TW>({VTWrO!0wfO6|x3pWa%4K>2Q1kW=G}RyC#E76lA-*L8zRBwt#7s&;uw0 zGLH7*crWM?O9#WRF4=ApE14CFl(J;aWUBm+Lre z#J>pwbzr^na-9!wj*VhFAs7i1=4dvR*9VB%(QIM}IwO;#d>g}V=DwYr$$i--)@u|*+PmwzO5@Uo^KJKIBcQ^EV4AEOykVty;G1~D=!y;$C*s*Geq*2*od7f^P{7{fLHkNr`%sIH z(9N*Vy<0hnYEzh-0aELW4P2vS;5@|SJ_$Xx>iv4xmIln*{RLrb8!%t@n+mIc*R`Pm z^>@F3=tuQ^i(%hd`yeC;S0cNWKO86q_ha|-#{$Kneyn$cQun~Aej0?QCQUE*t%P`M zO1b9|;;X6To+=SIym662>$8}97=ZzrKI=E267Fci16@xjJwdpwyECCZTu%pz+mpbT zJQygRNn*=*Raem~nN|AjfX>Jqc%^c6X7xGObC8(K9^gm!iIn~fb}!vTUVpZQySs^2 zH?UlOLw7On2Jqm+x;xtrVA~mA-d*e-$X@1~yNlvM;H%?&#KA%AO5i~}=rvCDPhZ!u zYMHmGvTfBeAH%L~-JRdu$UbBIa(D4c3M)n0YY0r(%iWzLhp_$(^RKvxjp4m7ii0!CsjP=-cy(3P3%D&lL~V4t>v1nBn>emhqTcK-kRUmgR+uaOVE)CCO-Zt~@={=p@7O`%O=k|2=U(DLGj;kOQ&W2$j+;Ij9 zjH_MMQ%qaJerkhS<9_RdFRqEr9atAJXDNG*|D&hyTgH0uS9^-S%h()#pr^QR8Qa^@ zF;A@(zt>&Ec&@$ctDYinIV3Gk8_7 zcwq(mkZ%hXx7r~**dHu5+u5u9%V063iY@PYIT);`9g%r?uGOdK*}{Bl+giklDiGfg zD%!1NJNV^b=f0H;jzGT*6;oD$`FmQ#hE;4ZkF$u6RLi=`K=TRndQY8aRv76KDQSzhj`JFY>vb&EO6;k?Je)-!Gi z7eNoQx55nJLk;hwwt?ZAYQev!y@{dw`HAW476n2GpT6>%AzYX@vWMW|hj@G=yAkQP z8=?1rUfswh_&%}3U?}g2vE1WJ#La?bV#-zlRs;H@U^QK_+z|xCV zM+N=Eoi9BE!-qo+Z~OzS4fKzHun~MjxEQvH-4HYt^1+x&g>|GduD~z0ZEhu06^>QS zt`uSuONK1Yk2XR0fpyJ$loeqapFPUz>`NeTLyw0ZyjGtv@RZ-ZpMceB<#q_|hbzuY zpWs+a+l%ksR|cvmmeSJp;zw9+*QeL&Yd1l0a5jTEZc{m2_yI&^XPHB#q`C03HupUs zpDB_aXXp9O2xru0wv+R%;o|5PmIKr|>`CU!_`Bg^!c%NG_Lg{x_4LK+m8aVjF7`jg zf_cmo@xxQ>hMuTH`l{vL1~?%&Fw7gPmS^{SAJkjC@(kODxb0cy#A)1j8;rX}W5u)EU}>o8Ek4=?(OX@FIJu3z2-b5xyq&$x zS{vY@$Vv0=pa@a)JghU_qMXN{Xa9nISd??;i|nc~ct8{kE5G6I;?VL=ueQO)xH=o2 zo!~)H?Z_zcuUA-4dnO1~c9bIS3*e4d?}OO;Wz31W+-)C(F^qrJ<^blp1G2iu!&5(n zjq3v##-Q%W7_~{cc_@c(vbfV4u!V?8xxNk9ZBh;$tGjChSREy9t%04*15sjY4eQk= z37#}Bw@&R-7K;-dd`y>=r8-!Li7wZm(;Qw_~OChnOYW(Z%w&7LwJfa9^bQZ<$!VA zi5nG?+(-OU%Sr=wXB!MKJyRG>{+fBdXqJ8T@=7aqw-H$lFFc z>)(dG98ZmLE`66RXv^P8b-F)eSG{;dv^e%Hlr}tC#D50?YfiMY>O1zQiSOtu>_4!{ z{FA=o^B-WD`nIp|{SiE7l%FskgBfw4ohUp8mV*7noa5{yztUHX{|WY3&-jWve`3e@ zwZ3A(&+JQH;3G!4SuO7wD~ujoGg^y659`%=NGz@}xCgV&g{3DF4)|QR#EQ)x@SMf5 zVy6do5|71-FFmXeFSj^NCm1|-=-Ep6on+lOZzZBnvLODWmlzGy@|G7k1sHG~k0&tb zbf-f2dGaO~K3&`URIIr3B&@|R$BK7OvYKJ;iaW2>uk~L)`rE4C1}u(AuVpww;Y)yY zzbD@>_f9xmwS*0->?R{~bQ~`ffFnWQa?)${;mW#%!_|jG-Wis_ODBtsXIQMgbn3PG zcZS37x}>kKWG5j&hbfX-eY(~FE0?<*65)}iTxi`P`8b2{DJGnJ!p81r_YXy|5bR4| zcXyaKNav^b^9_%Ls^C4f_p(8De%VhTlV10DVneZM8Hr5DOP zvrvSbW25|@nFC6#CZ#?v6pPQXX!`;LA?QaX-0mDu2IA`mAP7u%^5DASFz?~)V*T5m zsUYaOTNROT%3Tb#xbCMCX9JU-_jdZaq_^>7r}Q8N?-zr>2{MI}HHXo7j-iU;K z3GcxMMd_Avex6EQ4XK`o;UCu+dT7xJIuf=bwI34y6!NgK(UdjJ&}m*XU7FGT08rP% zpi%YPSogbquuo$4o$S@{IBC*sEaHHB!UXZwdDge} zHf-0*UjqFdStkQTy9=z9y<`F^i@QT_zk4@=vJhnA*NRxx7%(KAh$ma#5Y z`DU@SkUX_?&x97qr`zw?!ZC3?=E5-#F27;S%RQ%Uw%ZFDf=xS(mXl0i}@GX z=nki$=7dYK8&drqc*i{;R~)zq%fQ-|!uJwO$e0YxpmXcSmsR8&FKIWYO-ZY+$JIS^ zefVRKgv0AA>-!>wv!6>D)t_ZX9hYyS?*G&1zIUv!Ut%-cW?@6|^;CQtRs42|MT}0K zo(ej_=jKGSh~7eU9?|7Qe=?Cvn^5co$YFGRe z;^$EMMi`lR<*kwFc0(KRV|b7r;F@!g#b0}ZMBVrKaPtSk&4>eSNc}yu>Lj3!WD?W&Z z&S6U5Lg`aCtMqNeCzAY&#Q#e5ze@aPkEX(84tCDtd?W7#PfMXK2E!ntSK-k-UYbit zgQwOXvmiUJb$C7eRH~#Ch@VINEaEqBSLp@BXFad@655 zomYrje^h)K(G^4=A==}ZN^ec_Wx09ta|^A81-Z7lhDuujzFLl#=6|&x&GI%Y|Ev9c z&|=u;!euvTzde=Vrv%h*!x#(^FYSj;FapO*`w19-szCdNwob%rKmDN1 zJMHHNWM+foTjt|DSVv3LNiFAO;kbJC6!-OFpGG6(uUWURNqyyWFn>eQ~lehJgq^ms0PIt zI%^7ER267zbFpesLxa-YQemg19pA_7#SyBRaXyMB6CFS_g=kj6aH$@?Q;FAb!v8@7 zD4qB;qRDUyf)~6tBx!cI;_s*WDipOF#!?2&gJ%3fNvO#Gw7KSlg<;-?XR z3-Q{BT~8LmNAV3;Z}=--4*;Lsj8F9)3UjfS^XZO!nz8%qfvO$V7DcVWioPE#w*%cD zrto}WXN7MeeqJZFUD!_i*WFe6E5zsaRQ&72kEVJY#A_Ed3_bAkLLX18=vO%5j-O*E0{jYNkL%_KUR=q#dzM9YXSC3-v2 zJBh9%dat5(gM$D;^bw*D6WvU7E75I4UnKep(VawViT;!5UZQUjeV^z@lER$&n1Ja- zKPCDV(c?sq5YiynJc*7eKTd(OyIcb;aq}$sSGo@Hmw(f%v@%itkVSu~^05MEq9b z@e2pMh7doB(gTPeNBq&gN^Uaok19UKFoS^6Bmj!Z0vE@t3NHvSw_bMF z0+m`_qUfi@yPM%!`tR4lwRDZPqw+MqISosG~=fdU(^h@6TjK68lusI z#J8?ecrelBlEUD8nt;s+Byk_sHKSf#(96#$Qs@yhD0TJ#H9vWC)czfGl&qx8}hIPyB# zpS)k;JBj)bUEd7X(*K8PjG=jfnnHPhRX`l&JlUDrhv%^QTgVRko>clzrgnYuR8u=l zc&ur=_iQDeX5f=glRWW1Jfip+RNmTWq@9E%hS%BgAu3+@U=%McM2GJQB;Sve8c1{q z(cwf#6U`zzh3E{TbBGoZEhD-}QM=(b0#*^NCVDT?jYJRzxeR?YgwxnhLrD;Mb){a2I9V8{zB_3+E#C?faDps`n{cKzwO4{%kY;$!5Hk z@4raxhX0h|{_9lK=73VTC(&f0w-CLR=q94OiT+9Srgt$v_>PC=AMktmM3dfA1#cqy z1JMKTEBvj4ie`VT=*^!fTJwRT*29Y0KU8$+M~Zs?OVNWws}BK>zAN%mm2fA~I-*@Z zQ+P7bSBah{n)SI#-%51+7mD9VbkLWIznkdLuN40{(OF-o88BEjBz~(Bwh%o?bklbV z-}=4t{X{NU(hUhomdL!)1q+I7miYMGq`ZFCJZrplPF{X)zr2LJIdcF>>X(>QFsFa= zoc#XzH^e6mbUv8GzhsWXtYe#9@cafZ_=Roh!}b%e{c7U@;--!8mJy!OL;KM}9}F#j3i=_d;9hCc|aXkG-I@+)@$) z)t1{VMJ1M^vfQHbipa7-)+J@drTNxKs6EDFE3dRhMOpGol^!T7Rk7rj|FepuF zFvOA|qH}mRJ5+0ljg`%jr8QKf3_Gv1s3cO=rrHd3g8j6+L3^+ui4B4@st)=ghKxL@ zqH<1TLX4$vVgnQfRoTRvdyQSij?ui8(>03!#ygi=p&N@9StBdT^I|Od6}BiJ_)FZE z%>%sQk0>92Bxjdt*i3-YqR7jh#&RpmOR%%0q96lle=!6O3QZK!rKl{*g8za|uty*P z#s~gOfEqbP`AdZV7#`vaqJs*GO7gMW#f@XQr4u5mu{KmlDJF`?@L~1>7%5nsK2wY( zo`wq!6)4v-IK`p_n<=O>VN+dY0_Kc{QPrq%QyBCXKh5TTp(xl?g(#oJbBl_tmPkm# zF)I>s;Eklv*jQ-)U!`NDlCmo3X(`(s%|}L8Bcf4PF<~4JaK1X42bfz;Dy=NfvyK!m zkL8(R6);UgV;87@6%WassvoB=>6{k!Rxnp@i>!J#+sH0iDv+$q5 z+lpT%@Bs1dc%H&3pD2S51~yLQW1Yt)^7mV{FSnLib8R&BORP(5;_GQVv8^Sqvb-ED zf`~;#P3Qf@!fdaO&dTZhOpdsBKR1idU+0~~wb!{2&$@U_+mce7#WtsSdXde#V5Ug> zm3I`A_VSV9>>hqEvxq8??qrdZ$>M`@^Jil5Ma35J%H`-dfE6iC^|c5HDx$&zy1Rz7zaIqd0pSG&4S64ro_yT~NBnS^)N_h_Mui zg%`|$BKuc9Sp0FCcNga!=CC%o#l>3s#;;AGEoE`0o#8jNa=vz%ckprgabp+mOf?y2 zd5I2fj88dFwK0BE(OnMuROuj!N(xG2D`W@Cris%lj3Lg`cH^t9ocr%IZds`Hu5;dR z#!4^oWgk-qv5%X)U%O;l+|GHcpUGnOY3xanyT$7U=XU|7b{!iso{KQ;iEJj*(Rnb- zbaRkzLNeF`{M(|0q^#VN4Sph9-_-4Q}iG$w-g5FgoCAk z{E|Km|CWz8BH`Z{oVcox{6(g)P`zNmpuFPJ3TtFk6J5mpi%ipF^>W}nWL>3|u*68$ zp-;uXMg1aErmAK9V$=GjHu`q431*IEA|W|cH4N&p zS;4^r8Xg|IC~t`#;<@$zm{qZnYq{xI&ygYU<<{ zza+M_%vQ9ZXc?@vr6uCb4kK#0;|XY6&SPFN;?IAW;EOilyU7&K5|H!|b2gbeu|%0jjyzoRoaFZm4lk4Y1SIgBch`7IHXE3D%S0EM>Zqiw|5M_`Em>mOdN+JlFR zu_Qt}up3}zMv7-1F@<$+AwRqUCG(5ZkC=Ll(B&c}=jN8@=7HfRS#4S$;9zZ3YjR0Z z9t6@2H5L_!gq^0IH;#q=Ewtv3SYor5;LxZ@2~E%jhAJCJTuZ}bq}Y4JXv+nmd~2C) zZj2>j@W`TK&_Rs|4V+=q4~!DfAy$qE91x8%DrZV44b{ekArT^>&KT24Cp|b$Nkh`~ zI%97;&08!LdRo?i?M7Z-32J9;uG>TkjI+S$YKB9HtK0h&U_mg^XUqsy!&t8zM27y@ zdZ<{!7%htDE}Ifem`mKW!8EutbS&s2m-?cLax2V9^yZ@d4s)>Z`@)n!4XCWJW(`Y+ zg5>Ik>!=z~<4O_64F+Omd2>~~fbP3VTeaDsg>l2c)KHpijfSBKB4vX#=@P3oJilUC z>4GvyN~^%?DMwyGqp)Q~irBt`TkLYQlcum`)5?`~$u&yfPgq-%>C@c$I(1Izl79W;aVeNGY*^-0_?xU* zjwNb%6D-O{`oqS`XV}I|w}uu=2@Q(`CkVbTYQ~K4idb-Xp%GAd!>||jluo$ZOm!B@zf1L|P z%jrLyVFI zM+tCTvjC1~%I9fr1cpXFbT|fBpe{rjgB!%4Xz|1rb7#@!pXRpWyU$GlZIwraVu9sz<3cC@4JtFb71HmSYf3(G+&S781(R z!IxU%!Ks0aSoo-^qgnlVYNJ;VIH!?kEd5l$#3c#%8n3gR%0nlkcP2_>XeU@h=fjek z24q?=pcxmH2yN!N^rdQUtI?gcwkm%X6(x3mZI1QUW}!I!wYl@)Ud?BvWe7A`k6&@%5!P&0P!^Cl`AS* ztpsBQadxjMApWmCAeTrSt1V6hvGQG0XVa4YNulyD@8PfsDk&@t71xfKd-&>yvp88} z>S01hEz0&oIR99Usdd}LmLw8Gh5xs3mh|pxrVd>}zmdhIu(3i5!uT8uFhW-l!SS2{e`mJ9B~iovOh*ux@WAKwt5mgO7gfESN_ z)6{2x$~YVxU?C34a(FKo2H8mYht@uFT>2F^N^IY4vP?;WO{6Y3ZMG3@SlFAd-BX5T z7M09b>r)HMp@`mQ3Y!caqLkNl{`LHTjO824REr@lg*pr@1$*c*_ZfS{t43!OmXwxT zGZvJA^_#hZ~nYu!wdM z>1kemV)Geu`#2T#ssW_*Q%5h_4nx<0@=zk}O;e{(jNL#jY-L6XgvEFWm8*??ADk~@ z>8m_E(E`yS_;0lxZqg2FxOQ+;WTla()_CV>lV3NSti?rh-~a~>+9PJnh=50WpzV#J zQKIg!X_#~ysh^kv%yPVlk59u?S?e3gP}uF5oO2R1f0Z*EZu9u&a&nHXX=cNvdM zG+5^bH3)S+S50wr2pA(2<(9}jIBXaGf1OBzeQXNC6}oYPUw2|a$k|7{@Uf|lg=Rq% z`Czq~&dtx)HkaawjmA#mSC`3bTG9^|Wqd{!qDzNK6gM_)SbD~|5rd`<=ns$U(J-P8 zLx%c|UhvKMue`1OdKti?YS!oknr`8B32LW?PD$I{N(1X8n)|9W+A8}s+bc`QpjQe{ zGhn~2bfNtKY;FFH^KZHznhnPhEi3}$+O+Y}G|w0egq6MZCksuRukGnuIKj}LT!>S# zUcERxczWzPINF0T@P8cL$deg3i70_xjhvlu7(t;EZIOEA!MFD9YlrRg z-#FM%BZW-Vvc64MP2~gh5tHgKHEp%N&Mm$Xy^%arR{1p>;<<>@oX%>RYAy$WxbvVX zPp$@kXNRU+2D^_&Hd*ySwM+xmLbwAn0e`b6hH^_((x z3m(@8Uk*{0`k#(nMqDp;(fZ--j8F(*<7T~`*k>zqb0mpV@)+Q^i zHfza!%3|RGjNF7k7Co#B{RAG8>0PiGd(h+;M$#%;Xv`g@cglDWm)K2-6qTq)K5}b7 zN{amlO;If_1L+M;{ongoZGK`XsBEsL!UEbqREQ&Ic~3EK4m=^8H zv+Np+F9+d5tmDq8vNwCE-oynrlt^pc-?dA| z@XSV=fSb9_2{JSzqqP#n5dMe@PUtY6q-9YB=_5)O6_uBk;Eqvuu&4^XZtNykB6yNk zRxt;SmYHU@F|! z<2|E%MhQd+En1D7CTh1J7v6RCS?<&P03M%Q!Ih%z5}T*TG|OQxEylI}-(|sc%+|Qh z%PQ1Ax{4apn@UspDF0V!J4^$u0&Sq-FleYkmqnkBRg9$}(;(Zd3N0OFC$`}7P@M_# zU7*;O1>gY`1>y~dJP`R-z{wVdk&%nk`zsKR&_g0QrG(#;rtWrnTC&^+p2NZdITRle zj=*J7ZUJKu9#&alqesJy;MB31c)~@ic_}@$Me&=hb0%5K7Zv5fBf8QhOIwi8+8Y|< zW0#MA_5K||z`%s~f<;T#Py*LafmUD-H)}*=r>p#F2xOPSuu?ppQ)MiGIvblfv?6aT zypGcdpv-V9yjr~!Cu}30Ra#;DtKnqeTS(7;u!qp?!MxKtK|Tk!H$DdbztR(S8k))o zP4{;=+!g-6*Bf>@shV_&)+72^M13?I#)ZB^{?bDumkcW{YwVb`vNCvgtEix;p%>Kn zZ0tmPqi_qoNS*e-*faLOGfDmz=ZL+@K)%i-`Csf2yPWOdG8((&@AOE6o1+uRLOR@3 z57!B#*8(HdD}9sXJC)#)@I^QXDqxX?2kyRVbEwuvVL4{(g6nhROM#;%XADmXT^?R> zn|eWSUTkG$QNEUYVri*-)1d->(4%3w#P^Le{5X*>*Qd`*dF7ObcA z*DyP(hzl&774}P%3@oy$D0~c0jmv8KK7mS?%f1YMP?E4XG-z|M$qPpE@jg6uu*`;l zQe7}2beqe@2Um?Q4&T%WlE#rG zW6qW$_~!O#63H~wft{{TQ61Z`sf0q%1O0Vq*ugny&QMNK>8Tp>(c4#$6<=M7YvN$E z*N|ufi7!kw6_B0`vSLc(qa3|6oM^RcPk3~2gL@=@AbGWzP-*z~tW{t9sN&K&@XD92 zkhrE0=+?r@1Fzq{+uPh8U!TX<=e ztUP{-e9_*Dn`qSzox0Mpt+hASD@4i$(~$q<_mg`4jW^ka-&s>nTt=Z!u|BeCK0e-t z=a&r!IR6Lz+sw9_4X`#G8xS7Y)#nIQx3zJf4X-CQzOROps9BnPML_zX<_XQ-&1$lD zS8IEPe9I@c5WcyyH$ACup(0q~d-qxrp9bgbF%b}5MD$)*S!%lx9_->S0W+xQ1-g3D zK=8rW9v>cvs7HZF_)rSZXf_a(4Zc>(S^xx3gXzJ^nFF;EwaT7%kx?!w1hqsw7ngm+~@A%GI1&{9TTyF|=-m}W|fmxiWHcb$d*P3REooh{F z<)=AWgW!Scm*1KqMNgBdwV1ZfG+Im=1t(cmt4!^jht`?iH}bp+_zwb139a(*)sbY2 zm|!$_9H^KUHrw<~iF~~?#sXgzz|Onj&Q)&8?D#}j9)#(>OpVQ}&_1jMxxb_i zw^kGt!lQeg7#**`p*IFva5|tesV_Y(eG}mQFePGx=lmps2k0e!D2^YGVqwtH;_L?A zWuhk4^fk>;Sf61o!L#tC5RGawa(ZbD)GUi_C>0JXmo$`X*TkBYn^tKng+qbnh04SD z|Io6e>ou%F1D&-@4VuJXM-zC50N(<`CsOL`T=X4yi+TM_76`~&=q%YpYSDktw!dCm zacC3|=+x9)*zsB~v~Q*(b&kDh4qfxKF+-bE=q@!*utiO5iwkk1(DnLMnqSiaI+h-v zitk5pub%%#2~Ge1(A)CWll-PuhS9F(iHtB|If9RA;7eN>!)OY_c7EwN>tYzkDzAo* zD=o1qgtmhHODt+`#^#pi%~h+WCY)BXbXeBpCgPg3c>RcRus6i?^1~~^X2BcRfqC%H zCkKsP#2u@Qo$cD^B3f_C$%aRS(nPwi{qhQZ!I^1{DxL44Oz{&pg9Q)(If`PX$S@=D!guD7QH8GGzxyVfjz2aMo0A@i-O}% zhzJ*1Y1TBBMup*w$}Uy5X;{dIG|h!kHAqeVix|aMFgSE$SKD-G=GPVu+vKv+5-|VZ zxF(3$e-gH}+LXh08XC*eriuzCG>Z<73x_yc8=@)=-L&@Ag+dz6gvbw+siPjUv+@Ya zW5ZAv-ySpuccoPl&PV8o9Ohv}1iCcWRa1}t%67IU$rR$ju?D=P39|_gS1KAl5XCT1 zynfZxs~ea|d;N4sR15fG^@&bOsAWb( zSfp+f7GGKtH6sF@&x{D5p|XE<>Cod%r<7RH#uPkV9bqZwqa9uSr5Y{auN7!1Sax$a zFFrnK>`U%0R{L}sIzPWM&qf{7bP}K$bcwPB&7g+CcAWy1>2-aaLGKtRBsTK~gD2(9 zg~f#w8Il+q4>Pz4L~}|T?Be)+rjU5~)nda@qq3Wtv$(!Xm33?ceB6D9F>o|~S|oRR zDgzvUYaR$+TC|qKG?xPaUN8k${g+hGq(O@=_nUf&`_fFoy`&3DtEjLpm{YtI&k|(q zO#pFknki_8noR}x83`PC!nu)bL?aIejB1f-Fe<#^2+N-Q@Z|q%>`maRD%!yR%jMp4 z6p>JI0TEFF6%iGY3K0=;2lqB53q{;;38_peG|9?rGx905GNZ*UOD*2aatX@?OU)J) zd(-HxOihi_d&BPkJLep(K>dHe-}!v>JLj2a_L*nq%$a*oA=LDCUA>N3kzK`(6tx$| zSgBR*bilw%|-ok zS(d9unB-nP;>@3eT^E_L$?AsAu(W@%OU59aq6VS&VVD-HJ3Q-*4jK8PBm4$))J4uM zh@7j2o}|3x2r_@nSa(#g@Gu`Dy+x^OfxNBk{biV0DdtG9HkK_>y#Z%Nty)3-qi9pi z=WJ_GPN}mG&nFBf^M;gqG+q|_{T~c-tv0pH<@IVeYF&Ih%o-VE3`=O-b?76dZ^7(oG%$c)i#m->>%xz!0ZU@YpHaCB6CuQdTud!$RKSj^k z?DpZ_xA%1mUE3_n&X1j)g0A~t?-kNc{Tw7_wH9bDhOB3F^T&3{>K7wwPUT_Q`ZYiu zQ*L+|RwC!#++0i1xL3W>+Lkj7#C6p<*%N2a%6*`|_N-3k)MVHIbt+LEw=%6y%?%yI zIO4u=rL(I9ZncNp#Bx_}bwQ{T$=8koU*;M%GLVqh5a{s~1{H-7t#A9Zg7x>umjhYz6>FW&Eb9upzf{c2{w~Z=n{nLH@N1@O*}|)MrtWBAP3+0$|!2!DVt z8HJnKp?~tz15QhECftyy3HR=x~MfIx~UriIeG8#-1f#V8O;Q zA%#!NkFC|I8M`BxOY_3#GJ12f^1}JJl=;<)@Hy(&baN440y#l6d2)EIf|v%=O6Pin zNlXld%-Z3qQ?N3f%u?7qHq!pO8LF9PYe@)pJygFOeq?Hx^8aI?u3c*)sOehyN-$Xt zMmha7v%!shxj@r>eJfp_?d%L{Z!Ui8PeZC9Yu4IQ;C3YQJtM2DFe2(Mkj>sgU!Q}; znkzk)_%@SW@s7wbl;!%@`PA2&_==y}^RvFqrf^?p^?kpZxaq^AYkpkfHGg#^#)FZp z+3slEye2`qpV}Ta_YY)MLuYH5;^83K?(WVOrLR2gIP0kM<)qTbiyh4y$w-f*W$DN@ zj(2?ml(oA4?HBoSr6WP6HRKZ-eOEd3((l$f#36g$baXA9{+460R{Fzc$DzihpM2yf z@f&MCFY-(O@Uc@Thg-jT#snBPgU`Y-%)+zsCUfwN4v?+h?Pl>4In~j4cROja5^z^1 zKx}EwKF7qyJ`uA2D@Q*mdDqdR^wqB&f7$DPSM9qKj_A^(#~r>tr5#Q>qC1pM`P;GI z>0h%Wt=3Gk#OaLJOp7b0oz5^h<#cwCPkwbYk*1onSxT*HH)c5w;tb5qx^H$~vh`)4 zboJTA8ZT?!yROtxqBLjQngnt+5}2wvJJ_v_>ZbqPsFqPLIGP6-dE~```HDfdY0jSZ zj!800=ZBki-Pz73#@OhVn{{WP4Aq@|WvTA$E+6X7k+PwS)_BEz_68Ch?QB+B)W8|+ z6R38-dvuTWMq4TkoykpQMTj$~^jvG_4}P+zyR&)ef4eyM8lP+mDgCCqbGoyXuQ#oA zHs)IrOvLK!(Sv?Ac{Rb=&)%b#`T$jgA|If-5vmVR1==O+X6NtfzhLQ|LTR&7oaz7m zZK;0FRi*#!=e&7@j9u;wmBgKVpJ3r~=Od;oDbNvI8vC5{xn%FR)b<^5zSzFzPEMY1 z@K^8=pm@8YL8<9lke z zWxl2z^DTYmP0iOK-QU#imghETDKg?s?M88K(t0`bx=zfRAvbT*B3kD$*Q&J$uQ;#~ zY8WYNV3-YgaFf=*DPQJba{#&bV{3AHz1CXJZqO>FVw3iCp-*ey-XojaZ0qd&$(R8y z&uZMo=`K$Y-!J_XW{9&l`d&GrIJdyGF^HQeRNMc)m}VEzb~rvfg3 zRq!$B-@<0w3?pFokuFaDT2-6YS;~KgMDE+d<<5?HLx0Phe56QRx*r-31bQ=5suf!5E0x7OJMi0WB|Sl zE8)km8V<^E@+u=Ew3mqXg+b$RZLke#r zA{?V&Htc#k5x}?M4!92*!X&r`X2NQ?3?_}E24OBd2H%2?P@64u zJQ;`g!fbdL7Qw=59IJ8UW)c8C2dm&k7}18BxRVURr(iBT4~t>p1ZoI2xeI+b9tMTk zYENE9~v(222 zB7)ao1^ftB!TvJ{(4MxPN!!9ZW>HfxX*Qh;-aLn@?O?NQgYhuo9x?#mhQ;s@+y+zf zXgc^bjNp&Vl)_AyITyV`9FO4OFJIeUffeva7!=9hWrZ>DiG11&z6lH9VOR|3-%Cc| zXRsPRct1_W=bp=8Cai?{aPT}b4tK$F_$PF9WYj$1@)XA47=R-i&WFq330MIq%%?5+ zv#q;fHoOW~!+8sc2)+g#osq*BIHQ27g^xW*JTUnonht&j9nm&h45KX``Yoi1;pK&l z|6@3U7g6Q#b(q$LKk@l6C4>{`;Tl*4Ll@KbF*e)%FbS@LnJ}`5gkc`s2B$3{ z;jWA#7z0~8N?(Du!Cd(AqvU8AjtT@Dq2qDd3J!z*u~;^k274_f0DKu1!+uZDWbh!Y zh8>rYp>8%?)RWWzd>Sr;N8m;n{}grvz6u@PZMN1=(-+{uLLBKhzJb}$`7Akyk+2+Q zz)H9jR>NOlP!CG7oD#ukmvM#M+hI@~U#2c5U09fbBOAwf zSO90kV)zBz0e^(YV8Qd$415YYdfIF+!BAKU(_xbp!~>(?GB_8Ozyojx>@UOvpM&RM z&2$?0&p|*Pq5kA zy-bb3Ct)u91s20*uTZma1T2Sl!O8^2|BtT{@r^c{?`xC*_ADVn_#!+9w?hA$Xe$^4 zSG-PD!*^f-{1cYIR&UTJ;8U;~hQ3J&Z>E>Sv9Rk~G!5(vm%&YNM8a2rg4<Nr@JCn$=af-H{V>5W8|LgSq(nGceo7AEDX9J~ z-k{Hj7#@I`@IU(~37oW_62SCw{QL7)QD7Rp2y@|Uhv;lD_;cce)4m|SG%^H3;dvMj z7ayiZ;p>G*C?SqASPmN=rA=WcSPlOJBL>)PQ@txIve~Y{2zYA+3BpxyHQWfd!Ar0l zHatZ}VP9AcM}0@agPDYWAVF9Ri(%hN^x>PZ3SNd0Loi@J($qs3|6Op5MUW12;Y?Tr zOW;Ph3zorVKVi9sQWG#8z7C7v4ZqSS;2{_@j0De7a+m{`!4~JKA@~5ShTC97I+hWR zO)sRg{YFj^bb;I8-LL|_0IT5v7@EO2he5|VF47l8irq@q_6~5!3!{GIP%}= zY;XuHf-_+WJP)f1aWtz!aRieJOoFRnKFt1ulEZDV3VsfQMluTiq|?DCU^YAoi(vmN zbUJvSo2DGa-)Ms|a5GGY2mYc)p?@_^2j{`U_|cRMM>cd`qeL(W7Q+K@8yxUARSW|> zL_CI-4~&5K!8CXT7QmJ^x2G5$hCAR*K5oxBxF3d&WmMSRo+P*l7D3(DUFa#nvDM-B zRKOju3ifuoJrTFqY+q__Pd2<5==N-c)0((F$KXm>1vkQ=ThW6t@G4A)ZJN40xv(!> z2D9KsxEPkhS79YAZB|G^x7lnRg4~`=_%tkrNzL7!ZSX!=0bhXCa61gWo$0d$C4t>w zCL9F|;5xV({s4Et87&D9Ux(GOc`L%-!2$&)!5)Rdln}>NSOlFRL;xRwmGBaDjKijf z5&-sUgFXysiymAAcfc=UB^=j|ni$VQr9CwOTXdj6@ISB;Hi~e2{4;H~lQ10?Mn<|l z`8f8$64*J49K)wz(48zmI-&?Sz#{l$XKDui49j7oXxbPSK>rDJUKjzl!X$VEj)g;G z$S|A)x54kbQX>->|Gi>K=q{Vh-p%bvgIi%X4C;v@42UNIm<5CGrYd0){1#?IdoMBu zr@@WzEm#RFp?{Xm)*!*{iHA4BbhriP!rnKMp{znW#Z8n1!P4He%|xDHU=sWZj)g%< z1c04k5!?W);8Ey5iRlD4d>miH$jcp9#TzG<{Iya`sqS7A_&&E|n=@Zta>gkKCKVYpxr3B&ax$k-Ix z9A?7zMpIL8->q&>VHJ)qaQIJU^?Mst1@}V!n5^w{cji)MM;GGOF z_{#)p5ca!^1mQC1KbLYB*{l@xkrcjQ^M!EF>lqAxzIf5oW?-SOmAh z4`Bto0IT7wDO6=Hrgb`f08W6#uwVu?3EzR|;4bKxNjMk^!*eMhJOi^~lbMAih-2|A zN&wfuO87H$%)-*mCL!2k4s8bChpXXj_n-%}VKubn5%FwB4a|n0%%zIqUHRz2S@+UZ zbNExWFdg>3kNDspg*bNL7;-Z}1%KMaCU@R3S`< z%@)!WZ~!cUf5KxhVG;4d5sN9vT$^oR5edVdj}R{`eCJUj#Bs|LlpvqA+tYL+n7y0` z;0$;U-U}V~QnD3{3V2S40KV`71%TUMBq8_{47!iC;wtpuAeal+z+(6(+z5NFrm5~@ z{M%n5;`{jnS1<_L%>C)x;>z-m|xBZ@G|KT}fJ=of}5 z41vY)MYscAh83{&S;E04zmnlcm~3D+oDGX$r*qg5_#~`=XQ5*W@(T=~G#m>rkTY2F z8zqEIE>Z#*4J%;TCG;M(*_vJ^Vt5>uz*l}p4?gn;o$oO+^d}jGi?84hH^3dxag}&r zK8$#r&IprWko@wA*4F;aP2yLk#oAN4OJbQ8RTz7-%R^7}UO~7r`S%QR-76(HZpNmq z5P9Qz@@2{odBdE7g&qW?s zPo9o^2J#_Fo)!>pPYYSD6l+gClHFf82QTtNLJdZ0f9680vcpA z>L1X6TjjqE{~a~{X#s(Y?GG4!N?ldJG5k;9&*Wr;w+|tL0gVRx1&H>U7E;)VPVA~VA)|7^qGC@lV4@DEr1)}``P zfP6dhrC8NhKGQl+3`%l&`X~i5v4AY7z-1`ij9m4-noG$mkPrA5c@^?e$dyjbr4sXZ zuoz8}=zUsj;f#9zN_Q;&Q;;{W2?Uiq7kPF)eO2fp< z$A6^q?_$(i8491HaAR$SoPa=jh%EwHCH_AqiG9BoWq+}cMDN#PGtTz;XV)9+WHv=! zyTC@qk^hW5QpImw@vsQ_AIS5i&q3aI?cT4owD(As6Z^F=ds4EvNyk1lS)vbc|5&mN zJwW=;Bum}_b~5)vEsb$Q0CxQz<1-%-oS!QL%YHIq`9+b5+;$RRB@?n1|#Wc%k-$lL*P_H!~P1H|tOEji@;fVv$^HCkFD){6sV;uq+D zFi@5&W)G4*iY0^O@)uNM`5*~7tPPBNb+F5mpb{f9`4mlMK9gMUL~fX}Q2~L2k*j#~ zk?$TX%MWX@TFW5}f4fZhR%<6e9o9PAM-7vvM~L{nVUl=+gr=s;^dlJSt{Jjc-OtOA zqw0Q7hWH)Tq9U6PuU)I&4ro)Y6p!_8f#JaCajQ zx6)8hBcTfU)KSv(E9$Rglq7ydJm*Hq^sgx2*-^4q$xn}x1M2?xD6xOd{r^Tu^w-*O z`=6s^{@2bri4P#uMHa?Pk zP-`iTzoh_GVcx%qGdfda!toYdsR5N61Vt$!V#TYs%JvhCiJrH~3B?<46ZZ*9^6YIAeNu~Z zzJHs`b49L2>8)huNv)^-&O2l+a(nR|a^NKTd+w04ia*>TeihJfoJ1>j8Ye?5Ff@VV zWvRNqalEXrpeo-UFJ~$Uzk9s+or3mEi91Dl_h!n(Q}}66tyqXG9^-zNUZxdwC zcUn}~{dciFr}V5#ReUA>GmyvnsFvy=o&T$KEF8kS+3*@I7{tHy)=ay|JJpkCBhNx^ zOzW1P(l0>11o>U{^ox-nLf*BWT)mV&gPgGAyOXWXtzj!q5-!PeEoI z9T0dI@u>JK@js2c{>rf$`8UXwPR*rSAgB$yZ&?y|T8o<4XyQMYz+>@mh+Jv{sWALg zFVi1G-n5>)2>HXvu{qu=2G?rj4@{KprzzJn_!|{G&Md#mM8`# z9n7{$FCvUbP~^9n@)Y}MQ?6dtYm;0a9*w=1(jSX_3i6R&sc9^8k-suYmY$&}|2#?d zoM9Fy&t@r454)&EO6woAHuhDMCGiJ_f;~s3|G>})%8}(Tu2;@Km)P5wRJ$UtU*K}& z5jk>J#p9SFA(b@j?Nel2CDv}$6j@(M2ELjiXDW$5c&hmQs72k9G1cXXRv9*i($t!f zVpMp1JN9kxPpVZQRnTk+cZDIj4n$RiX3lEUVKH$4FvOox`6Vuwj-&|BUW0 zvt-=QT3DMi=ox0yDwRqjAH8G9Z zOQK>d@{?LflsbYiVm5DiRD4GM^St?2c__kv(rj7#ix!(&hF+{!FW0Nb7_uEh?hQTNFDv-E>zd2;qF{ovWTlK3nBkL63A;*xu1 zJ=FHy>++P^CHYq-r)$45s|}i`DljZ=B4;1!KP$##^Clsuy}g&}BZ2$Lsm&dR?#v_{De11dM$T<2@3#93Jo=|>Y;PTw;jm;eKNvt1&3S6EB_2lZv zgyUc2xyY-ChxM`dQXRGk`47mA3bcGw#jZwPjr?)e-8;{-Se#rSC(hHdZxx99yf!?f z^+K0ts0v`Tp1I~oW4L52l!+H;>7+%n^a4HSwnZ)vR@Tr{Q0Aosy>ZBIm6xLR*7E%Y zt%3cqMRJyKAs-{}qZEl(K~qJN|Ewm&S>f77B;e|gyDc|s|mXKg$1NNui& z)p3t`ja;6%fALq9tB!%hFP5XfVQz*kc6m12S^(-qD}N?S^udB+4)&~ z{Q=N;3X1Pe$Hd?0$b*&toSF(SI{aAt+dM0IRb=qyXJxJ8!e^Bw4wH*jT7!^n1YV&c zr@`&T0S#2Hst6RfT$=tt$63GJGABxhOZmsstv_8Zqwyb}_nbA)5q<_qtKP3pw>*lR z!DhspW69NN7eSt`? zw)~V_9hYhI{6C-Z)ae-|Pf)sSny4kJ>S*dTP4DMr<)7H2<|}xPcA6Qu{HGQc>9fk( z{Gw!w?YDTVRRs*{$@{>SF3$$@v1im39(!i2lId5-_=Z)o{0jEvQ^Kp-s<~7K)iIl+ z$m{QbsAD%@Ag^uTl)gHK^KCu3iqk0jyfgirS52Wj3!v~ zDl@sfbd2Y*#(!xY+Rs`0@6VS;SEGcp*UIR>h_PU;%>N4$QoL4HD!#E+wkvK~D<>2` zUn_3KinS6_4S!!NiPhvR{WY0htwlw>^_pc{XQ&1p|4B`YsyZpYiH5;H&RB%ElW(fE z&Z*l#iH&f>eugk>0*_!#!>(&Evy>wz!_(V4TUY9LOuM)lS z-gK^83YA}V3aRZI>ggz?p*o2)@C`N_%_T;PhxRUfL&kYXbK*K#@1gRt*2w|I@$2NQ zhlkb{>z^O0Cpg17$dqezljqmy-R(*1pFgU{j$Vqi_S#T&-D;+oMfKz=BSB0<^N_!P zJ)_%dYL1R+i^o4;gN*jk6YQfl$Wk9YtdDzx%fsa2y;M9U=r!JG&1wTwi{^VDE%<)c&dv}-yQlY2YO>Mjag7KYs-xiXV;_b{+nc+U5~Y=ZIY#muWyp=c0J7g z)h0QCf9klaSIxyX4N-q~REMP6yTg~urTo8mURo?45VmujKn6kb>0-_epOsBjxoczhs%gATooZwZcH zm4ky{(#VNp1CB1ru?fd89IZDK36C5`BAFzSgj1c}dJl!gPQ8!s6FXe;ms9U57oB5ar~tmhj6skaX3GANpIz7i(|ZUJc?t1a=eOTm2zCd@u70W?j#;vkL-nI3SgO+tsW#dv^C4Ddhy4)o*{K<4n z98cgFKDGRxn-?W$&OzSN2y6bQs&ohP*~pFlWBI8nJ%;>VCE@qfP6JC@F&G~~wCgi3%*HN!dNYmgfY zlYs$&!$?%su7f>_mykbfY$LXlK~3~_zNu%g%8Vv@n9P`#5#nRyomAA; zrBWzC{yB0UQoNTk6g!ZAPnJ(Mp{EW#!Psr8_tK`HaCu&|N$hW0h|FoKxAHxR&lC9g z`kr*jCr$MMVbLe8IvO7kIEL)1$Q&auLdaKGE6LPmdYG?NxMWf@J)`x)Q`Qy&1sp&K z%52+6hsNOy}dMig?9OHu+i0K@joW`<0SZ^V#gY+QZNATGi#8}#j z&n3Bbki<@kK->T@%fd$ z&_W;3y8J@jr%BaomW^g}`~qF01;c$G3cKZ06TOXGZlQ-o4f)Ml9~*5jf?}DMYQ3N_ zysE{28qe8n^e`FQ5(_f^5@Wq3JthywhL*}cT&7nkN5Suy_EtEW|3PPJMFul)JfR%( zaBNVHjW`arBFoSJNo55iDaO$|m{2pX5OXkIOI+wEuX8wl4c5E%-si5nd!stEIu^JK zxzSUM+^Yu#^HRl*$DeRACWN8!4UPpNM0pm+DkNI!UoOuU-fMJWlls3QbjxkmFr%$0 z*d81`mE)biY5CT4)E$4sE`rJ&L?JwlD*J!HXMaVlhmbKyfKzmMOIUBAghZHt; z|D%Z_?&RP}V@YkN$F>g%aC=e+YgXj-_nE3G^U+HTkmcxU9Rl5+D>j+cjYpJU+v#oW zM+3#LJvI7t6G?1ONq6v<_1fzLwcwU+Plm&MWOB9FJ8CUjyFGj8fX3^U4tmdo$J)66 zu@jVg7e~vH`>Cv0m+CA<$fqG6PK;4ZFZ(;_9i3C!xjmibT3g0;(+Jk1gWF4D1eJcQ zy^M>{6CywE;5IGy9jfz;@vin%9T(rtLp1(v&2{6E2)%8{`Utm&b(m2Hg>(irs?MSJ zWrX-e>QQlyNVkVU=Dk!K#ALDMft=;D_fqkvA)gW{6C-KEKO<#rB%LKON=`)TIU%b% zy6a5fs(|Wz=Gu-jE{ZB#8ZGOiSob~`?Kam|R?JGT0=?8O;#PWDF*39x@otKdhda^) z>tkd~M?G27If?ogH65$-2CS3b)4rvfq;^8#bT`TCL`5y^E-O2cu`xa5L?O}) zNsQK`oQLtBX)c-`WP{D_>?JFs^@PNCImUXU3S;cQ%<>LtRh!2M-~7ncIeV@MeU6)s{5XG!YGwD(DrxEMV)mhP?S3O*tl+2MUORxrk^U=PPNX~nh63=v1&BK|2 zSW?=VBGIv=kk?Pf#bT^p?&tRK;O)KC*j&x7;K%)BJ9=SJsdWcbHvX0PH%ETe7_$)) z-HmpCJyoW6)9@szVKw`Q7PYeuL#ecRgq5l)+ZQ45W0c z%424-YlWN#WzJd#1P-<2X~@?huWjztfXGC?Yp~4kLHfQ!WqS|e51u4`ae7$Dgh?Ey zQ}I}rDwsN?I&qSu#*we5CP`i#6|-iNtW-SATN)*g&6dmDhdi3?HXo?5;%Y}zb;Y3B zoWRVMxSr^Ll`Z3XQlSBpWxis|$+EJiJ}`3cWVg8$Xv`k>6Vkj?UMdOy9sZGWit{L% zV-Cy7$&0S~vUbUGzCOdGN%ISF4>&xsf$OF~aA$q{wNzeWq`Nr=~o2 z#HV>-f|dP&7H_qfWAQ$VODwLi_=d&zEq-e8Ym5K0_@_lJ#mra>i%}-yZ3&iOpv7A) z=2*PX;u4E1Qc_BrrRdMwpZnS;d`!RSRHKAXyl>X}VC(+3QuBUcJJbK&ZRUNij^_Q$ z_sshaZj_gs(!i_9*;8>Gg3`Xxy|H{cbGgi$>hnYCY#JL`Q*JO{pOn-{;h=+3K*#FDxGV%Df-{tzscB*^ZlnZQq$3{ENx5izWj)r5PFdpufp) zN17a)WAe3yCU4kna>QPf+rKio^Mc6*7ftS&XTA%FSqw?v*61-)@br@=Z+_0?%oj|) zvBqT9HIpa&1{xWfe}l=+?M*s6nEWKtB!_m*M% z{*sRoK2vwff?;~sCP^-{_(?9!@E9u}45K*D1Pn56p9wIHltWy@^zIEUb9nJdiA&dS zthvPs=BeAKrWj#tPsx^Aw+)_>%j))N)A#Dr5|_d4GnVo*lE-b}bLQ>c&*?@S-^&LX jq_@J9rmT?58O(<;Zn&P@ByWYORc)rnTdhU@_Ll!2B>w_- diff --git a/3rdparty/bx/tools/bin/windows/genie.exe b/3rdparty/bx/tools/bin/windows/genie.exe index 881672893579e3daa877897d1cbe14751103a113..b70a00cb408bd28105cb95d897bae81162d9f0be 100644 GIT binary patch delta 19144 zcmc(H3s{uZ*8jWr%sYcz98^G5)Zr$eh@hmRsN6AcX_|QyL@t9;+=2l$#X*sD95HmL ztz{iZE9+E8qk64liDG!E%zD6F!sA_GF!pw{6N zBg|uL3%T{=OQ&=~_~Si@-FPPM3UM%mWs zs6n_~n^(VtZX%|NWPzY>ueh?Uw7jhpQ10k8&fDaKV%>W5R5lpL?NtYGhPKkBR6yB| zkL}U#iD2>E0*XzwRruPBueum(vS4<%^*cg@icxRX#RzSZmcz zG<2!;P4!>2F+ar$wt!<+XK}y~u-Tgs;4VNau#>w3t35bY2Y3T*;(c{`e3=shTy3T0 z)_GzeedN6LS#fMnuIF`KCAVKzoj2q}T(`_nTSi@5XT2i!jeu&E4JD`Q-a;Ybc*RYk zTmA>EAlEA!bjv4V++I-)-rP25w#I5a=;S%p$2I;#emzFG4*FkW1-s|vb;&}-MfIk) zxWeiH!97N>rJJZ=yMrm$g=6}A#f??gw>4Q>$g=caUt#su_BL^?6RXWlRq9GCAIhuE z>Hu3#8HL*B#2U*eK2hD81c;9~ZoX?#zs&pJSWJbg1;iX3U>glm%fuS9dV|IF<%&jP zUL4>A67z%rwapoQQK{7>`z?v9D{N{@NzGoh22up`L!7Pcz}F_|<^$a*>ul^=id{yq(E&l+lES}stm4{25Z95>Yj`vj=uFaaAmf9$r z@gLlB+_IIbyLLNF(-(EydQSURl?g`UU7dLsq&d|(tOsP94U)>^dquuB+{tv6m;bQa zSM=V3`i1i-R+~Kn?4ElZhQE-G76&mG$eDRNn7MLhUBK+Z3m}PTxNsf9_>5j%Os(%a zc{pRm_z>Hr!`4GiUcAabwu6VQmz_e$I&05PK7C~&PUhW}hmD;u2k%$n1p8qW=6GVA z&0p0&*6ID8l+Llb2GqE4d&(wTlxF=~z_ZkOjx{>4AAK{;niUvDU!Pt7*T8 ziH6O#e%UXOHm6#z_Zt|w4XrI=#Q}Q@HSfj-x#e&6Dhaa0tGU88=&ZPDH;NTEol9Dj zMpLTw@t}cp#%I=Nf(8U|Kf}}$x5Wt+4KaLB9rk41ShOqk^wj!qgSx2c^chy$fQ`gz ztqhHz`Hx$-hxVqAJYIh!^ppmT9}MYF6Q)?t4tauZoot;HxzX#<$yg4%xyjhsQh5%B z%sx$uBsJDsNip6~ z1N&{GCGi`srQy9e*#sM->mN<_QGv2xoUikQ5pcA}4nb$@3*&nG1ft4`v1oR)Pk`-% z2D|-&w_{SE_q5u^xpuWh!JQnF)N{qcN7QS^-wie$T|$KYjgOhnKR$hG)%%ygW9h|E zEVd=pNhSwlr&srXG~rc#ZgwEnlHABc3r9qZdG!s*;Q^`}>CQB&tE zt9f-MwOzMfTCJx;Z`8Y2=?TrfQ9pQ1u$G>^R-f|Rq%NK>oJ0VGMy1>$(E;YfbG8*H z>vz7^uQRpNqECEo-Ml@VIt{jdw>_R-{mk0y!!T-%u#W#Qm4<#+|K^8I1nyG*Q3|ov zyZ^(F(60Nekvrn)+xx5wcO0ST_Cj7yYwpK==^KvX>mM(su}yO8m``4$U7M^YJ_({{ zKCKsb_U5eo8zO1h9_wEk9-`mvu~s*{<-WcV${GXs&NJ_|J-XXEVb@>zVp@b%!ph3d za1l$TJ9kR>+u_}yt@Loz?4He5Yq#B(=!*?jRilY~WIg^#ulko8PZApOiM8z0RPS*+ z3Eal4DhalGM$0TYlgLl%fBp0s+5-*dqlhhY8{>oz`{2uV@K@PktZVo6#C+e{=b@%M zKDO@u+>YArFE(|e-RtY;9{EVs*}8=YCsUv^Hp-Zx*1BeY=MAZL`$<&0dRSAA52I#( z>vP8^`^*KQ?G=1QG_>xIii;DlEo@a=>dA>$DIMx<-Eu12|JF1KJyPoIP)Ga@$#Pws(TT3qWL*U+c zX(+zGzVr;fXa4dSzPJA3LxXFq2Y<12E3T2(ps6I#lE_a?TSiTN?&T^9s$0MAC+q6> zTonmj^lbfS*ESH^TveZaJx8PyZ&<&&9q!k1TM$nDelpc*|Ap|Yf^hQavF4V+C#MBC zal2qrF1PCa@9b0c?6O=|trCWocglo=h!4>Lw%;q>7fCAV_R}?N1YK2PGv7YgNwy6a zSqULF`s`AcM#)N=x>UMA$!nCpzl5z7i9`dIuyGoaMn5a#zRW(=kVsll#%^m!a_3cL z@IoI4qrW*@)2Db?L-U+iu9g(gg=OrdmPFG{i&!rwGLr_`*nB54i>_MCzHuT$=?hOY z*G}XMTEB=L??f)rkDq4yok4%(G}F3}L>luno8&@5T>n@|ge3Fc7Om~}LRR5IeChfH z(rYf{2|^?1v#xHWh^{Y{o^d00)ihy&^h{Thtfse%r7yim1EEnx(pqnFwmW@nrc@G6 zp6x_ej+Zne$TSrlmn@}>BIgOsOqAlskfCat`8w;8K>XRu@ni(4VaMX3<`=K=HWQuj z8e5k@&e7*zWeXC?m-M;K4%*x#nfCQ05^bu%nP*F{xY?;?~@uG)Z+{cTZ zQCyH09)n3NNGcepfmJb9NA>+82C5<(w-Ncv+E$*1(G4N~3|@^dG; z>{%&g7CEn_nZ8ndCaI;gM;~_H0Beoy!?Lr<5bDxLdNG^4M(B&nr1*JcftE&jN*@=H zMQW;EB#khV<0=|7U+TVqyzNH44N_Ajp`GZwJM6$3Qq*PMZvyt2(FKPy4shG~+ic>q z(bI1k}uMqCrej0kT=z|ZZdo6WvtG=b5j0a$?;CKF_w*ggM`qd zajf(W@-$6}lYV`JeC$fg#;|Q4ke_JXF!qu}UZHP~kz%)#Tdrgsi~f|n0CeP2GL^m? zz(SjdH>!zEWO6XFvMKxkdh9&b71s~X2DDT*OrLJ-Z*JO~h|Ps%_uRaWecVLm(=8!v z=w6aU=Y+5&d&z2#H+R6uja4yD%I33sR(y#->m7t#R8CmGjH&C|Gd_LNec-L-0e3!oZjA%H;(a%XJ zb?U=3Uyu^o!47!yVC_)?W#)L{gErQw?*SjX>mhUo?mSZ zyY>ZHM-RTwRvsk1yKl!e1CBC%s%@Z;AcX8e0Iz!g=1yx}q?hTdd3Wvn{DOg;1Wtw+ z_fN2t&oro~jlXMOx`#86&*NFMQyZ(Rs~_9$BeO)pWZT!Pji+s=oS-{lyd20{v$0$* z1R-ayEJf*r%66OSQHOkPU39w2D)12Jfn>f_hvjix2QE?30k;OOL_`Chl%>RJmDlpa z#_;l6gRqCnZ>8vJb~$}k(yRPdfYGbs?CFZ1V#{y!nC~9ZP`-qW(A6}wh;4H*$xJYf zii@F^GIvXfYlU5`OMVBlf8k61?jX5X&;5_k% z5~t-2y2>g?XUNSGXWY3;n^c41TMBW7D$$mY2`fox$*QI;25?T_XN0eL~nR=q+N5~%3l%#?hs+O=O4ax*%(&86&wX{e1BKsg?H<`U# zRGCw$Tk@)8d;H3HdsOPV`In$xT={T*1vNU^6P+$3!i2g{G_s2>N7#+Jx>92*b-}WL z4VERO5i={+LcaNEOSh(YyHFKxZ*gwY2iT`rrq(nA%~@=H~v&E#-YyJ-vm~w zuwg0NQD{m-HUh#(FyBmW`OZ?}QS~vWjUju0s%os}4hZ9c|IV%G}sX_i(GqSMqAsc`Wg==Kbar`f3)o zE@Hy6JKX<`o;;Aky!?Q)jflBxmv@pQL$7AeUy>DGV@JyoMcL76*voEnO<=EoNdmhz zTyWf?(*G$Rv9_ss?9`W}4;_-n?gE>-<;j793n>JN?d?%*_07D#6OrJU*bFX^&r?|2 z-RL%ozjKP0K!HBa;S*kevYo>nUN39!*Zqk4`1bybKL(;9wVlAu2?n$iXlwpBfX`!NWLZt`B2B9VUb6hT*Kw z*CY{#QP$TauwRdnV8HJ<7?LmoOw<8!;9+xlTlNDvB@G?H{{A%yOUlG~fjF7cQL$Gb z7!w-H+hUYyeiPNsb05mQPo?!p5SmxfjGq_`vtbM;I_Wn0y7(FtZUHXRj(|2dHZr_rL^qVM_ z@hzE68&lctZ%Gi%9L8F{CA~-$(|!kc#v2pg8-Ky09N2i*)mE|5-;ohL_}g7VfDiBM zfj-!aABlMAWNW`8J&2Y4?K|?MNm!4kgxhwbZ{=~LtKH)zx!yubu7O_o5s#adSlEg^ z-m@Abj^m-H5wXDHQOT(g)GxQ}uPPO)b_9VjUgyerMq|`oZLF>`_QNA0Z{XXsr3MFO zwLMUeG?SMcpNIyWpX|9KBsl_y4jv>eDFN<7QUW~eo?Fmh{?zXI7RP&$19RL|h1p>? zcF%L`nA=e@fxiQHQVR{1M0M3;>b+us@;b&f$H(lcUWymMn^0m?D7p|`H(f-f&K)me z=ETc&9x}ex_8^LJW9K9z3lpFx^x^54gx z;rKTGm|bmA!2r~LsG?EL8=2`CNg@@j=@^+D2o)}@Lom*+uDBTe;WS9HBm~4*+$(+} z6}QCsT8ry*h3RbM_r%X73!PX?SG>HidEb*sQBVlpkoWww_oa1C*XKtAUZ~k;( z_jIzd&BsXqy7nI@J|@`=?wFBhg;)zZQn4o-p}8^Q`h{_Pzk6=w_E87igbrMu?RmI& z-R4$~P}q{}g#JCP{iW!Ka%!|~Mw=}g^(y`}E7Wb|I>LDx9d-T=)`=%X6Yv&Y!SYTJ z|8!9BPskoPLf?w!%bU2Q?ZG9n>Ungu8N)od$9LUk`QdT(l~^rH@2x2F%{K53ua4Tfj_qwGgZZxyxa`U9t;TO1@(GN+ zUH4uE>vo0=;cA;zaIOG6iaA)-DV)qQO9ZmnRu z&X54DB8^=F&_&&^oE*EQ!_9@(d~L zC$gFNZh<@Cu-5~EZSOyamlW)@y@D^71fy@vU{_nn7`i!wMP4M~o^OG?WxFHN!C%#l z_Q3Tu(!z_RtIGX7^tF%Nn!#TDg-oEp7k(itJQ~n@Z2$2KCy(h?G=uv|abE^oewi$! zJ2II4GOncCGg$vCB-VY0%*RjB0IiFzkX-ai7p{;2By}5 z*%^`kg=Ddj8u}2)mY&j3BU+_@YUweRTNaiyAz;q2hNFR5S<>e&^jkvau~*#a^JFfI z>P#qa^x8N&3h3N88qgU$TEY;1j_o=+aAmgS zHJ+yN0i_eDAJB#gvhdg_0Q67_eFUg7g+>5LDX>8m`y~ZRRxy`U z`aP+V{+SA=LNz9h1_R}!VIo!1)-+nL_D0?%m=EZdITs3K8Ph1yGg|^vb>?>;)kzunx32{9bXS5scj>P1xb4n#);Xq zxp1T^wrDP01+6smXg8HVq~N}7EXEld%EP6vrS~;NLxgRpDcHZR3$9|(Ptx8d5F&M+ zZ0UW-(H(;Z``0)zKsuvCSy+tZd+3w=m&{-^lTze}&yG>dGD2?A1a#wJ%N^sN$!nqO0`899xaX zwdnp74dtoWUYH6=@wUBUbA|NiQ?$tmcbpzi(>S1%r|By|_NTE!tn8^p)DwEISVRW` zz0Z+V`e6|~5uNtMvD0qj0w=4KP1#eaG zTMFJHW0O5_v(iwj;Ef7iuizR5S1Wk6f>$bdxq{0TyjZ~t6l_#*p@MT2Jda}&W|*Zk z%u#TPf+r|ALBY`q91&1m)Si#;3_KrEA!e7ci(&Ke~86EH^s)z5Pa$m<*ETbc_EgF~6 z>AoFVBJhnhH*&^Bjvuj8kd@65Y#x7$<$l`9W#Z(bKClzg-OGIH4p zI*8Orn=7c5(rfRtsAs62o+WG+egIXu#oV>7{noeZ*eIOEst*Hs(ErtZ)aE&cz4;6s z8vfFJyrfJ#$4^N7y^AaU*u{zKp!)`QQ2hG71l>Gmx5Udo?1}NreFg0|ESZl|aYFey z0$2E}!d<)Lj{_>sU9Pz3j%P-jFd45}^!-2V=0+IGwl=aKQkADQvOg1PZR-&f;>Z+?syu3w55c63S* zrbZ?Rx~K%<@`ME8o#_d}4**k2f^a=6K}gR_5JoRd5TZ;8Lfo_Rf1ry zPB016)+PvNpHC1<>k@=tw8#gP<|sxSffrBZuSaD7WVhS2I`wE?1@VjzJJVdjgYOSe7Ub@%gi*4 zHs4|InrX7<@?_!iTG$g#Qw|8{V3j(rqT7c@4i6uu56&#e%gZt9hYvAiXJw`j$sCe7 zbVz1KXar^z`8w!-ix%G35vpe6f1p#? z%RkUQ>YU=tY_{tx^->iU$_0P+`C01BIqBq*$a%;;o?`L*oNOaIdY0;4iwjDMG7Z@| zxrWkW_S6{~%)-xrv41n|LG@+qz*!o`HvT{-hUXOLA8CR z*`Xo7IHw@LSU*a?2s#($&-KI5dG2aGJ9LV6?pI_mmK5ddVX|C9SY|=KF+C^0IJkXW zDCZHvrW~Q&qzgaL1KLmrXQQDg4?Od8a-E9|g@$yaA~7H2p?dz!DcGJCI=HuUW=T;I zCq}Dt>p+FVnW-+)A(~J%ldGY9X+E)DTDOJd4_yv$HW|L94uuvAuQrN?Z(2UsB~Q1 zvjZML_+*H)A-CAz3<NEqq0z=Hors=!q)NZlU@-L(yDAW0X6IJYi9Y0M}g^uBD`CL*RibDTCad7lFl!uFy7?c@cR0z9r1rr!KN#(;5_R%iP zeuav>8Y|6tMCD9+gzB?%47pihe_|>Qq>JMZJN3t+d5ONk!H+S zeM4C20#$z(Zt=|Qxs%{c?34K_UlS@}86`QnS+In$sKlTwxI;VcU)&ck3r^SCxI}L4 zI1NtNfnt_lA+{%ET_NrL!VwHJ*CJcsxeyUEJI;#!NR#F`<+odQ|&p)H|e)F*hiwwomED!b8r?g6#le#{m zF3~VXM0XakN3D04sXKhJ@>6R60Ua9TVp?Hv5Z|UjA^myX>I&z{FEHw}3rg~{9Giossl*9tdBk3oSjFb3#Zl}|smh6s+^p`zs=K4qq!#@h z3JwrOy@zr-aBXB!@?fy>Vs)a}U;0uMm#Nr_PWVmDJx=4xe(ogRVEw!_U8I>a#MA2O zIoZK!vGLO$eq_>!;*yNuAt8L%`oTC4`EldwAKW?2FT|lRUnGD1^qk@n9A#6DC0RKI zdMpo1X%TztWR4M`gF_rqnhj5dRfla>yGaG9;&E}TW9P{MD-Hhpgdx+Y>|h>YxZ&j- z0cWGWW0c~Ka?c=k=DgT5m%$!?I4qKdLlcJhGocb+^&seQymE3mC}J@N zGvA-ZZen1upMDTK^sDIMlvBjbk0bHWFQSk1wpH9lOgUKf^h_fR8&+B@FIremzA+)E zC|1eJoI~}6>Bf0s#-jB6VnlyKFf1UqJW-I7AKYn(Sqmz{hW({|e~I*X6Vk-cuW=;J3BVSN~` zpa{81Nc5oCtgIYv)bv~j-D|btuuj|tGA9-uD0(yd-^6Z`u1@^I&2daf2j3Cjb(X&U zP)v6tfo#}bF;>OT*Vrb}gPmkz7k02o?Atpqct%FSg2cA8GXc3FS2>eQW>=cTo+O0% zPE>hIYxat_sY{0xmks}193bsHAgYKcFA}ReEqbzXpCe?}9)jDy^O-o>Usas-r1b42 zv002q=}|+rp$Oa!#oTRLv)&>@Hg|E^k+PmdO`(x3CU>^(3HH<}(T6>8S?nCi+uIx+ zi#au6{G+WS^$+J~=9Xj`My2=#7N@}bM`IZ=fRP`?Au(BojFP#qKVQrcdEMZf(FweD zuAwL?H@&o=NcM&Mnu6fFe6z46Z;9OpV9Xl?W1o9>;PQ%rBn6bNRM*1o&Oo z#7J>4m%@7gCiY=HeiQwPGmHLB3;?SAP3)`m{>XcOK(7k2*v{(++?{8L&KhUOuAO{c z976Q0;<`ApmB1hMv)9EjK)yG`aG)tS#L458P0*f9v`1(jurOPmWlThtq0F?cig|F? zY9GlWHsi#VPn+r%v9q-2hS-O&7t2InsmJeP_pa=sRx?;ibJ6T`X3o<@XSUZx3e9L zq}BeK(UjfkuSxqiVx^e_G$S4{85YQ{mxhpqD^h+i&$i^fFGtLr;?}#aqrDZaZZ`cUnoQQJ*+rknfA6D$gPDN`&Mr0Ni zhGmxE2AL-(5ytf5CwXX-H&KW)@5N4Xgw%zPmS9|4FEjPjrgaFY!A$=d0{N^KwKH?+ zrOh|}Yqk#m$jr-13I(i`S;9W7G{a7T!&khgH>9n9{(v* zDK-}2UK7T5M{s7IDGS;J&k75ipE@7}`Dci;LKXyGLHe*TeY@pQ2}+aO6drT=HsSQ( zF>5wh@TsMN$Ah%eFKT5ik3b;et6@U6*19yI&SlPR71*}Dj9n=AD7tavxJqymrSZ=) z!yI%-a~x)9UH^`hrefJ>$l{=loDMnsAx&Q3S#tBeCT(?&dkMJn@Pw*;?TQV2Cp?H+ zd5*zbl%dFE#3E#+fjATfYTFjGB2q&;)CS*E8-iNLIVe-$vxNz8RGNdJKSII*j1$(-C`o?JVguI^E= zHTUr2WA%RAt&{;Kd6DEW6M=WfR`M zcaU~S{FSkw(G@65#+MTjf^F-f@nH6M)SY`ch_Di^J5naW7Hy{)tI!N?qd@@Up(H3s zRyT(mrtnXKXAMb})l-OpSlCgdFI;RkY9V~?LHZzhCHM-+e&H}ls}eHF2v9k;C`>Uc zGF2JJkuo1g%VGx|m*Z1*2 zPyH(P?ST$%kXDPJs)Xxyn;s7Fbk<5UCFek>6i}*eV~bp)+5j_95(-2eeJ=tu=Yv zOQ&4r8ho^a?&Bai_0i6t-k2@lQuiIj`cbU2uhthgm6+aYFV>u(oz6bfYa9MO`SVHI ze$wB4wWoXii$l0-ptd)29j$ef&X3aO)3(%OW{mdpnAX%|n~%1eG-j!Gw~DFF+Bp)b z)T-1h%dCxIZ?DqcX8vaFFm~LmeTaFj()uIoFcjk4(;Ex0pX7MJJ!mq&-oj#jL2TM8 zZG0~zeR#PHamL2v-EA*L@Cf$0MZ4BT(BsGUm~#9BnF~_fYHc6lRgJ%^{5#-tz(qg+ z{s?hwIxDTx-s)LNbA-<>2U7_9DH4Z=i_%e01cArWANSsisfS};X3Xbg1HwWeB zNe*BsMDSeWFzx!Fx9tR3P!ZIes-X(wub*tHB4J-w8DFUeSl`bO@R72t>6Xd2N(`W0?Y;! z0agND2D}5<12_t}2)GMye_ku}2aEtr2Rs2-2B-nN3D^TT3b+jD%piklO+tSZh6APn zvH_(4{#gzD0^m)+2Y@EPcK{pU4nVUW^8)k%1Oo;GMgx)nlK?XS8Gu~C0zf%nC14%k zWxy7|yX#F_;S&^^00#j_0nLD)0M`I_0O}3U7T^Ww1Ly|`2Mh=|d zuo&)FPz!t!}fE|D)z#+i*fOCLLfa`#}0L_b#12B2xs}CR;Fc=UGNCHd-qyVx3 z{8Oml|FXYe{oxG%fy4Zl{RQj)pE=Bb*ij=vkeyxt delta 32784 zcmd6Q3tUu1`~Nw!dv*~)P(e{qR|Em&?%ja6qlSu?EE7|NMOR^$b{EA=S3^@G4O?rv zSV`JjZ*TRcm}_?m^U~GQQZo~8h0(<>Z`tLQ|99q`vlqnb{r!LM=l|#PnVoZHo|$>( znddgonR8fmr2nec0rl(q=3F=EMnU;&5rQ;bMbcMTLj>WuO^+q|2m1+vRuC+Y`fWNf zL~79s2Lhd&$T&$W_z7W~2KCh4c1AD6kxhg8_DHZBtL^CM#~L&a#>E=vo#L?A^|x5+lXxHX$u1jMR4ceH4;ge6)Uar$V!s=_QiLjwstWAw<9RSd} zNtR?^&T{W%Rx~k3lwK|L<)Q)7`wm$W~ z1Gt3)x4KY9*xKL*o`KE{3;^`hHZT&iF&8;7P#|0VZ2|aMdoXCtZgf=_%BZvU!z%yQ zEkLD#)on2TIQ!M)SKUQx92d zIwQh~{SsRn#$-WjFaEo|eO>=2aev`FF6(PUBHKgv%7njAj1n1`4ahnRlRFDwoqY#V zTzC*5$xRo2!eDGhYpaQKr(cLaR*W@ieeXTzA-`Vimi@Ip`=0ZnU#xh>*|$shKt70H z?Hg-9w0FTA!XC>K+CRj_yilyO>D|WbyFA~QoSE$mh}_(j(UX&G_H5@rBJU<&&UU6o z4Iy{Vc9uqsCF^c#d^Bo^=>O;}!hw3<=SR~^!Og(o;mQd4_!5TF{ zCL6}1T)EGj)%a0#cP$w;!`V7)i+I+#HZGY=p6=We*PkR#Z#)|JnGS`!hYux@lbmOU zFCz5?&dDRT^hznfa+#?K25@}vMC>TI1D(Br^Ju#-GV14Ar$RHN>? z%Q22Uw~E5S=Id+E-!OCfhUdRQAFIEL!(!LX@#Em=*zd8IviJbcB3EeiR0oB$9ur@zlB}wdBjW&f2?5$bs*j-`r&&y?$s6-e3?(!4Hio z8)Nk3jf;&%_fGB}dh2m0Kwz|lQ6x38HuqfXg5!;^{cT7$a&)Zoi(MZP;qAs(pKlS# z#)HnSuB}n_1ENryt=+@Kt&K4KA2NH6vOI-*VqouDXC*j|d(z0n1J3Pxl1OX3^W#0) zGzkequ6_;3+9R3d)$VUidDU6)`lDx4Un^=rF=7o98KoD((_T5)Ytt)?obJv5c~$$ANSvGMyi z?;w3pP+dGCqB@O%Ka-j1K-CRIRc zzAAuRv{r0y6hD2OkX|9qCqGLXythFV+9Hl0Y$L}Ho}AOlditOz2AOm5WG=sJ?&vaySE-s#frFf_ibIz>GgaK_EkmIKba&F|AX^`-;yHU{#g({`{m>uzk?TozZHa&$BwtOrJS4*>Bs1TNwxi}aq#a4 zG=0B=g#~JBp9IS@Q7L#23L-VK^|<4CNt`40eCr}4A!tKx3zHwzw=Qd?RifBREGy_- zBCaQCD_j?d_%}lCy_If~L>JNCN+;^Xx#Saw8vW)(w6Z5+*S_U=@mpl50 zzq5F1h%>IjkCy923z@Zyp45w}q-H7Y=O^Ao^ylbOKXEo$R85cgiKED^OK3nB@m=Cv zN>6kVzakGWp$Gi|?>a&CUBz5tSVAXv6=MTVR*6Dh?fy1>>xn8_(^VWqs_m}7brlzh zB*aF01d3KtZFSudC|=f*NW1Hf9%8gq>tIPDNH=mn~a?4s!9^??m`yk zyL98k85%M)+f|e%o)<}WrYrkeag>&1Z=>CF#KH8DY;l};jvmhjn$JAO${Zx_F?vsq zc#bS-pw+qJ`=n~C3|pSZVV}qoQyu4E^jeE+F7*jow;CF!J#uZ*QIJ0zUc)<(v9@A< zd5B%ktZ7TC`K?RPea&q%c6y>lwY>6%Yppz9J>tRmj~Eo7k=5w z9IM*qwr*=r1Z{2(+I^x;JNC1-Aee{t&|_y^EAz!cBI*AKZ5S_}BpXN3RTIRNkcp2A z%wX-g4Z4t9t=3ChT>B=7t3>kI2-o=Q#GOPu`^0aPM3KZMyZ${{G!ruQURT9b@#`*R zex0jmws>AovirNTOT?{&{L+V>H-cI*eQ8;lIGnWgaXnNf{!JvySGuwniq(43r@QMF zi@01%&Mk3`vx_G*L~nETt`?sOB$wv7_N^637c%}5eQTp=?LPiH0nBXg3hN9D-umXx zbkg183&j6tmtVcOR7*B}?^?ZCG)v^&0@rsBh)-$B>H_-kBUqg$TU_Qx#S>k~wlsR( z-^Ez6C!H?&yLc-}O?Q3&ckz_~GUpn)W4HJvSv{OS>=GX%8?JF>?h$_t5YN!mH^m2$ z9eq=rPVO<#xP2lxi01AS3uEAxO=V(r{due__8*~5C|TPybEbW0?Y{lFKVsG4n{Piu zU)d)vCF`T;sQqFd$%vvW_ltLh+_?utZr+gLrwCtrX#E*F;D9)#2YM;QBDPupk=#@_ z=l6ro?q_<_`woas3_bLqXhOF6px8jZecmw~vN9fLUbju=N;`%vAxVioyCPglGv_9Z9v^nrK9{^V6X-GhAKqu8a@zP=&%jTZxe zeQPR=N?Raq`TVw?qd&eY-b0?w-m`KucY4?xBUL-1) z#(pGb^>{YpGT)kX1rS@*rd+z>BQd3P=EQzf+L$KqHrVgjA~u^86x7GT6yF$OJIOTLPL>zQ@gxg$0-E@!OV zqdMZxV>n4#k0NLADQu*DtmodD^o@_jp=9%T`pw5+v0kav|EQQkUPz_sN5x!l;+msk z)R3{)q66mPph;;uI?+aEp^w(C&wvvYGg6RF-#;oQ9ZBrtWLu?3uD+P(jCXdUN>&JhWE9Il^y*~-ubERw|lj}pIrlH^snt~>>l2I zg-yKN-WJSCRC0VXiuc|v0lll(=cUn)j)|km&+}=w-ww|One7K?s2rFxhO|T#vu@ zCGLPV{A9ji)z%e71`jWa3~3L25(Twywue5=^8GM?EZ?^Qv*UW@ z+!-4GsaU|GKwY##Q(dlh!}Z$zQlzps2IdT(+EDEW*#BPw65HZX1;=UISGZ{i#(uaq z_hLf`&wq4>L(p!_bNNug0`Nq5gy~{=hss9bBVR&6%~yV{r~f7h_4LxGVqN&fd|~x( zN%*yYQC4540Rc$+p_*nbE2NK}6!XNx^z)NqVH8lfaL*HhP*z{_Rq6{l7^yBNGNUfI z=1Z~WS81ufF5upIJLv4s#E7mlP>Hn+z`l#F|4f`b76^fR{Q6;9jEfjiHxxxi0^{l( z@@5&(tu3&}=+jVJ1jPq1);#ExI5Y@DBe1mbIGWX^Z9h!MpAs{GR_!SKPy^e+`pBINSv}-kBu1IW&<*pi(o@#lQ7<3PV$@XL2(9P$?2(Xdsyx2dG zcg+V6eeN(leO`>zE2GhX&&44j$_+=W?Sr~3zij}^`&^7nLJeEKhuNa;4dXlU+0FI9 zNiKJ?Wo0)A%ONg`Ru6tI_8p4?_P1YRRs2fEtvz&&JioR_+$2`|viD}t^y|;X-ZE~7 z&bYdMA!h1HlNF!lzdnAYd-#Wo6(wqF>;Mgr0A+DUs}6t5+lchVUb z#iYdM6$DFZiQR?xYj{C1wUc&HIT^FhJ=;{}Rhl>+158I82N_ zfa;pP13ZpBaezo#chVD= z#9zplm7CHXd*{;($ZhWmE_z`dhSr)$dZ*zyHmMDeK$LAPH6gL+)Lw3EJYS$r&5+vttG&`1}zgLXor z>xFi4ha@(-7E2^rgWTyyDnxNN75&L9aTlHKPezKnU7P%g9i=W^06DG++=V60iJW)5 z=~z_hF4tE<fRu6I!?I-pm6UAMwdwY@u4f@&Ji^L-PrWbh)rO);z z3kiUF_a#wilGc}OLH0>s(&WE8Ux{h|$l#boH< z+T$;7*+pwoF|A$nQYvW&R+rMqWeNGu*<_iB;#+db7~DRUOX|e{VM>;8yy^JqPy72# zp?UcvhNMoRmHDJM$(iD+&1b~hO?ONrUm$znIx-sB2iK9|$fN>Nl8R}48aNNXC#8k> z{p|GEPnlN*QhCEE^BaKA&EftLLsptiagU2^~jG&n}N?9 zGJwFH3Z6%DkX=8IOhNYeJd%v;=seKiBn>JCk|*h~V)BW2(xsaZro!#K5)y-~wgeM7 z={i(G8nt2YyM)@eg4P7WsMP)dV-U2v>#7%;PP!giNS2cM81zNsn1KD3zJ39N>clb)Kv z7^UVCvD;u{0=?P=Q9 z+!n}{CB0-J!I2ycEZqzbAgr!G)7u!{7Zn;;NfH?3+IG98CXFLe*Sj|4c>!frSt>lU zMk_19DJSVul_XO{J?&!V%eDL#@)Cjl8f_=#5e&3y zhcf-zpWSA%?NQLZPP_Ky-Ska6nLZHK2B<_Rs06JI#T-?lF)T(`kvQgx?FXsg6z|wC zwH$U?tH?e->~Y4fBw5IATS*>6HqZeHIZHP=NGR}r!a?GZeZ;b}F3l=%A}R;2CVfyk zb~V(+S^C9ll8Y?`8*{r zQt}&>e1?)2DtUpDJH{&)IZB?PNM=H5N$-|XAOvyu(JXpyC zl^Aj1K@?+6X4)0wcsT7zkC7N)@#YhH+AO8@)XW33~z>05V_QAw{X zM@i`8*~JFP{gkuK{fN)>#})NKPsOl)sZ2i7qC_u2FSw^*kbjR zF1O2%25Zh;WI?nQ0j)wIqFNCz{JXuj8H8%x5l1)Fkpccqa%8G?{oVBWIx>*l^gR6- zdB5n@|8AEZ(t2p7_Cwgivp;rC@hG9vaRd#=|B@xl@0KmJ1ZNA!`eq9s56l(ulj3zZ~J(;W@%@qjQ8;uFDaY zU!Nm9hg2{-M`$j|5faLCgs#;&f^KDw5VSf+=(#ROcnj&kT{*(cyK@}Ep!yu)pZDen z*;{jj*Ph4`x}3@pcKw;-Zt@em6-V zO_%7-yGefN5mar+5?YYvfnS1Iy4%&Qp6nSjVs!EdLrjUKqQYc1BqbG(C>d@nF(w)3 zmy{L{FG(($KOZF{hNp}un?Gvg{L)dSqmxFAb^UsP+$55{Ev}hwL7#^T^;nYapD-J* z{H;pKab0|y{5^=?Ia}jDF4n)&kY=bXwl7SuTZ_%M@?yI&rZUbDkr)x{Zz?mypgPSE z5fN*!FEpAB3^*bo!eBI)(m_Kty&Y(0vK7y_S<0(e!`L{3*;F29u-Fn780{rXOJibV z{mU#?gEkmE(-nmF1RFV+_WMGuW+F#@JXxsYM=@!SaC(#pY6j znO!H#IQUzQwyJW}G8`lPjpa5Y$5U;Qkf0!|0MgUV+E9nwDApHzC7+Dat=h>rn;l)* zmYVDfVWd+-U@eDX-932v7MEK}9L43z+AxNU@MleYk%{$R zy3kZ^G{m5a^S67ol?yiYgoMP-+QxC@ISPzlI%(OD(N4&4!{?MV}+Yw~DDp{6T6TBung8tA4%P0xOdV+~vo4gL&#@f`(8L(sz|Pvb!q;f7)w>W7?&0tH@?K4E;_7$5=4KuJ`Vq}` z*MUbhCv5$=&}4AUV=|Xn5^Q{p`Mhaxh<2#!!=BoI=v`a-X&<{qWdK+125ps&&fBEb z(hIL>yV1b=w0hT}&D!d2t{b*#4IWOZKd0?Qr;O4^y7oM&?bg%X!MiVMUygC#0ji>Z zK=MdX3;e$%c|?+{3z1^$t0kpP@G?I?5)&v)rDy@qW z%8Shls)`pFSr^%ZBRK8lHU+^r;>uRThDG?(9o3p}x_W`OH|^ptg^W|X;4Pra z826MZ+TOd4T^p@di!}znaZKLjp04$mA|t#3%f^+ITWrRdSRaIFg}*dA!5a=rhmU2c zg6-lO$GetY(@*@R0(q37U8N1(z3chp=*mk{KRRzcR_J_JDJV<@U}}I}t2rZaA9^j7 z0(*gy%-X~mY~^MThF(;^IY2Ums~xGiqC422eA;33>uQakynOcrNE!0gbAeJ{`f#)4 z=lU@~nx`3t8P3hjo-tv{WNxLG*pf#^$TI~Bb|dTqmNF_TVM$3foe(S)xHbh#;Uewg z&<@lsv85y>jiIl;Q=605zzC{~G>zk!m`g*ezL%(a52GQSM zm3np^n~;={lAM&15)ntc@0CKuB$}~T>ZKW;Fp?I(CJoW7@LxfT4@pt3ke4Kzmj3p> z)F(8FY53)a6^bfT5F2z*>PcH(le7d_T5Q^Wsj{Xkt1_3^O%}6ZzQs}=1MLboM^)I& z-18D>VdnoZy<1ichL50Aol;N#r0N7qrQK9vx|LSOOMQXeyp`H;`dqw}EDooG5~Ogd zNsvOsWOkh_robiBM$%OYlD0dVE;JUG8o|@$#tNg^PM_HzjkxIsm{rSCTYPfL$drg{ z)1zbk=T^okz@IrEg#?xWno?!2tg`2rtia1+U3Mir{qWz~9(3!cI{!Ge%>*;pvBFqt z0!v)2C4J;^ZLc2kdI42Crp&!iI$$t#N&U+@e?L}+Wly2+_eIgSjoK~_MUyBEP&q>O z{X7N9+^3Ln_nEd#RC%@vxa@7?CZVjnc!4cpQeL()0B>)IzTRe>Qif8@x|C5#%eaT0 z9HHyo9Xcz{kODF>tpL%Cp|>YVk^MSppE;v|x2Fe_r0`s?Rtk~}i><{aAlP)HU8OD? z#)H=NW>X1#cK3*;G8!;Z8W1t5*bD_;npt1yh@zUdUF6siS-go%osF*F%w@`4~*P0Eka>SPepn(4X|tD`gsqN zC_^*02VQaX;!p4d675(^MON7WSV%q?n=`v-=&Ri_M2#KMoTfP3g;2gK(YV|1*-(|S zjv(AcMG-PHs~r~E88W58j1U-@7c-ZWK6{6htYxie{URx~7Zw%xa4T=JS&a}yW>#p% z6kRmEyb6kK-a1L=fW|A#9*=&wsbiK^=B3FNR?PM>tgNzRq3kIz)$KFYSVg6&-d#3` zj^6lW)G|ha7(O2r+H5qI+OjPbl>9K zx0M~~?ISrIi9Z=6Qi-lmh`zT@>P4;Vq!3!UUE9^csOS*|59M>KOUkQCjiq^3OGQ?d zsk}5zR>CrOcrUxWN?v#s*;8jgop(gWn`QmsyK~8LEJ&~|v%z8Imh#5=mg?c7l9;BS znVns5Bd!_gKqo8fQ7!i=i}mlo^hNe5^O$)fQV+6lF`W%wH4{jlta< zNNambUFqL$m%7oWmsN6L`^cFQJu_!TT|s#PJFY^Jy~wU0lnJ?()fSsvC(G^*1uy9B^Gl@u{}m9#sqgvh%}wf!;GD z8DtoSm}1>!b19e814H%Uy_C*}%bhECBk1bBnqD+%rKC**dQ4?_s|FcQOa~P3(nuqG z{VDD!6cw-YBSx)Okc+2p)M(U6XL ztEvPTbt)f*#7TwBnW4e6rT!9cPLpR#A)_!Sv|*A2@0U|k6{o8anxRW8Q*?bsc#k>- z(bGID#I_Kc1U`mae{pwQ4mvW~pe1vq`5FvK6SJgni4R6Ej)o0!WJ#mw`V1+Y*QRGm zz5P^F?#q-C2-;?(OHp)nfi##V=4ulG{<;IM7hblAT0v!bW0w_e%h|+_{>EmP3) zYJFwX1?%M1QmaxTXr&$MZ`%Z^M;~CES8f3_Gs=M*C&9fcPm2HyU+jk}blt<{=AD6I zl+1WtKh9!WI##b1_ z84InJss*x_O}l4EeaBw48;_Ub(Yo9ZR(OqePteCQ@w=heY6e+2_oyh3U{mQy=Uy*` zjk^j6qC~0*zX}8bnKz)5hZFR@u2DcTZMiJYqz=g8Mf(=feK%}#-dN&)8>t2fmdWxVbgDCO1(pwr-QAv+l8zw zogWcRyWAiR9V3I~K#eV6OlGa%syL5dsIyR1kGJWJrE4cihJhnsBfK2P4jaNmZgnHL zSz}@=d%&HTG^$IJB71@Y-p;<;s14;t&C`Kw(3m;%DpQPE;TWmcNG~-uVS(9VHBP9g z1U);bnhtA2AHPW&6b>9ZHDjs?8`)pAgpjnwwvHx{&NE59+}4BHyimIMye^1N$+y}=#w0yD@)R&D?Zkk_evLe78T~ri}r*%N|nuu8X zQkj%J1cO1LRh1ia5Cu1LS6IeZmc&wHSs8p&CKI9bfi$Um3L4}qu{uN#Ol3x!JLbTN z@1-(S+%`>-!ltNv$ALOwKJIbJ3x2g)A1(gJGLWF?#pzY^r}J%`Iy`5Bv9IeXfS>FhaYRV75dAxk@iW{i>abp9ME znkmIjMS}iwjx?{2%qH@FXi{;>LX(+oz!8$7hvrHBCnS%Sxyeg8%3?b+Tb3|Wv6=65 z;X3}$g=N(LOjzjNQfVZ&P>jnvczL~(yjWae?N~($Wml%Sv{c>PvE9xJ+7K>m%t5RAl0nc3qfOwJv5Z5>^T_<)JvcjI)$v$K*_VJx4ZbfX>_4nPo zFt<}CE1gn^rweS8FUHaLGPV6_+v~a>Gr{+U1Gt?kvNDlQLVYJx{o<@VTd^y%q~ zB{vncAyb-3_so?7W&i81?_v1Pt1q-O57>z zZl)U2!3($wLvc?4ZiV6rFqNYE4ISC(nk>YMj_=g=7{>*}n`T#&j4K3#QG1kkOT{qD z^!cA_FUS8(d;O=TUZpbV<>4r%glU3N>eh*k=i#)@ZM^Cp{3VMmvjjZT1=xA#;KM!h zi)}{P8St>fG#D!jHuuI->`IM5&}zKF1|!J5M1`r)G`HGVQpIEdn*sN}h0pA-SQu{w z^ZzqP{8#K*)Ya`-N2Sgl+|A6MW|SWcc*lqST&;K3iY>D$A2^nx*r=-uUPnF0wUP!c zc{FIC+LfZFct3b{z++Afs6Imq;fl{EJj3l8jhQP2MJf$ttBDq>zVlXiECiI&R|YYe z?T-9FIy z)AoHjKRWg|DUg19TpQr0!g24yq296MCCrk^O31U2oyGrVW_#nHE{eOStFMRJj0vs0 zwbVfSFn!qH-CD5~Ze!t|{aAVS6LJbXGnc7z6&w{vxR9quA=>!KP`!VwtN~;W34R{KVsOe>}2-70P1In{t^g;`^95R-9dBvnx*#J%u+;DqzM>F_{+S0Urau z!8m`q(YnM`g6BP!>SdiksPm18^LMcReZu}IL>WlP9=Uf$4H@9-HJAlkvksH+EV|r2 zlNHRcfUV?v7E_r}fiXQ(%(9hC!ch%R0fWgg;#}`CCas?GLW|9QCE<8rX@UCa6D!2j z8H7+>1pdg>;dw~-|70Z`s(O-F+GiygyZ^UW!@-5hXGzo*@s=WGjdH*j-V1WY3guO2 zTPi&ZlUZ4bgFL1(lY13p{`4%O!voyODk_WiUtAf-UlEf3qKr6v82Ktf@?TsL2j@Ge z49}AMl@)QTIVA|TK#8@<&ux`L<&0Rge7+^m+zXGlro>3dz@D; zkFPcVYxDA0e@uzt&Cte!?ghq9Fz(MDI(h;RouMr8w(=8ybm#7kMeJA@pPkwF3T1nq zg1A+Z`x(7I4_@&8SnJNb?v6C@@jl$+u!Z%mkr&UKkW6b_x%>_Yw5q_kpmFWuZU@Ik z*{iYhD~Uczfv=DUfSsT51>o98(N&%Y2Hpy6n$e*?NAN0kt29Nb`Mr-eZx4kHJXNRBNC!w(^^S_!E;-|C!)D$6Z*#lBM8FL3q{x8w=k@NLFOAWoHc=}VQ)SbTHN7B1Yy`^^~`euJ=Doq+7&7qqHNRu?^lzw*@ zM~MDC0KmxurODLx9v=C&hf03D8BI4xUFi9~Qa{)G1Es%dNQsTU-d#%8m9S$6Bk9zG zQmBJpDo<(Lj0e9&c~yX)0gN-?#5nfQ?ywXHESK=zn-WWu57+R(mDj6{2_-i5WlglY zqSldPw3!y*bq+5$C2oR{G4r6X?U!50ZwDIUlZUHMmF#$)tbnlaGr#1o+F?w-$5h@j zU~d|hLB}v9_>{*%d%_|v(26ZFrC(AW3eV+5Xov*SkW_y>)ji}xTV@7MOuWap`_ zSUNs=rTL#=J&LyM#``%1-8Fs=UkWnr_;W0kQNTczoi3?wpWYPcFufdOp3H7+l0M4} z&p~}>=MOl6FA-x0n$cYoGV2e<{mYY5w$%{|SMV2`N@dzVuwUC#4NXO0OTTQgaVf@@ z-^x|nO}3bga*11fW%*7hww5fE?XL=(XvtlAR`s zx?c3%F#PoFg#(Voy|ukU)fWs@*5sT*zf0Bhbg1q4dp_*_4rUh^!?UP7dsRZwJgTZ4jW#0lS_<>n0PIOybjq8$j}Un zJZrZLknY=z`Q@EKDb5*I-HS!lor_9W)rQ!wue6v!*VIIx5;&AzuWcw_V(@wu&eO9h zAF}VDu77G`6dYZZbLBebTd1e_<&utipi+L#4_xNQ92BM!X!l;y&_1%(wj(g2#Ks|V z(b147`oKmhe3VQ--)hB0M3@BU1R*Lcs$z4$Cdk}KdjCe8l0Gcq-PYGONb#`@KZbv* z5=(+8<`~P0@qGvR$q)P`9yN}jA8f-J>)SB0mSIHyxe@M(qRNyh*c2a6)@m|USihAx z*|97i2S+Qt`P}zCL<2Sq^6MLE5r(4Z$QYmfS!_`>(;h|9$Rqf|@oM@~q|`OQZFQi= zXyw=1fwSdUl&mS#7}OO5s1;ZCt=6!$?5M2y($M$PG+p5vRI&GBG5OM}61zfWU#@1e z_p0QWcPMi6OM?2Mt#5}i(}1r#9868lOz9wxsnbgq;=N4;k@S>=B#5L>ks>52ztW~C zX^_J=U?>w!mO*BPIm%wQOhOcqD7DzlIP3^3z)r#OMdv$ixeJ7~Rc*tL&l#-{WX=gD zBjnCg+taF4135Qh-$#K-lRwt>i&2YGGi^3w#r*PRlVP4XQa%OIH0fh)c#$kJW$bkW zgfka23(2CG?t6p}WzX16Y#hPE1o#UItOc`I9&jK1K_7~dGFX@j663WTV9RKBP&hd$ zy2IMb0_5%*(`QCJJvH$v6&@9)E_FHrg>v8OQYWegkXe(=a`@&JsLWRW6SUm^`xm4Gnx)>K))Mesoy8gl!ZTxG39gQ8q4hUMtW11us{@ zTSidKx0tj=FZD@xubwJW^3-KHP@eNCMIB^~^+UV=i}X}=%mSb2IpofW=bE4of5hwW znH+m9PqEmt9`ahN^p51@)J&DnS{krGtT8)`J!!i9s0=UDI^?%$3t3332wx6Ws=PHT z$|sphtQMQ4%#OFOD=I8zrWGn}5#CBCx7uX0+hUk*^XmRjd(SpswR@ZZj$po$%#*$( z@X^I|(8p4AhzG#K0QAwBcritm*c=u^Q4W!(v-b&@dGsps5>Pol$Mpj{Nu>btdxj13 z*4<0b``}eL)^0JEFY5?xj*(3ecLiCHlATGC^^ST2=HRD&U(M6xkAZK>uw#!O_z7j@ zjb3lf#a7EpbMf0~y6J+>5U>*-kVib{KGqIa1$#k}8gNFR}!=yMN1uqhKMIVy9#*;ZVp#$b|EnMd5svQ)0h zf~H$+Q&y>CIZd9ALmce22Z_)2zWLHPTK%vzh`>WVwGzj_o19WG9dHoe7diE_w(AhQ zvI@or9ocgY_v{pTaECi-(k?Vz(_1p!_lDM=x_V0?VOC>Vtj8Hrn_`$L_ep(oQR{gW z#ZiG*>{j6XqJvgpEo48|jR!q;pEO8Yjwj(X@Srw{797Gmv_6QsG3;a)p&BcuvREHV z=c?NSd=e+%)!+`^NvcnoA~;@KFc#Uzd^)t1txtuGKe~Z#Vl1nwa^-cBWPIqt5RqkK z;e`mUL$JwGI=iYGin1x%$E{@?3E9)}rGUx=J2ziYGnKK}!95dIUn&E6 zI!u-Af`M@fd{85NTKV8d1QcGON;Acldi+Y?W|?Jp<52cry+E#L6dzC1ol>6wL0&<= z-n95FDI`W-dQZ$(VFlF~xr6BJ;~u^Bip02GQimscj37iP8g#oazp7LcbmMw{8pPfvX`OPC5XXG`JH>Nv6r!>{{8 z2%L>o?C4mhG(Z&SromD#*Yd&A1#JM|n<+o8(ikbUD^1!Y^>z&#A?*<9vt@Ymp*{-g z=FJ3YAkBFgKd+=9Ci=oCiE8P?*GTcM+*GMX=Xy0;dN&{|u!&#+~3X<&Au} zYTW+fJ7EZQ7>cb%1CI1q@m@1NSyzk~su*uomg6BdD`3p&-5|l0StQL56eDT;B7Bvl z$%M^{9j}VIRxFZ!CB7ffDmF_)UC&fV8qswbmxEnd_ecjNdg^|>pw0Y?gypewE02l8XzS;1n{Vbq-&}1 zAt{MOr_xs*LNB{G=8pvEmE8q%mUoWNpggq_2#lZET#9L_x(c(aqa)7 zbk?6OdZ_Eg*Q7W3XLkC!cJ7rHN$iU|eO*)DlGaOs_$C1CE<4Ay!e5|=UX(KFYwR0B z$s^e}ghsPm{f5v2kv_6t`horQp@r`OsnjF*-jdfRfR0Gdx?cQ98ast14$+0v{O+1S zI(vw2t$Za$>HE04MC+XC?hjpUGwL3QQ19q#7HN>HbiHn6nkLd@rfqMckBi^y2GPoW zIxT%}pKg{L^p>-_A^1-`Iy0SdNVk`r@$`4sWqhE^reA-cyP3}VP-mp?e5iBiWCw=U zf2bQwul-OL;M#IncO#+Ovb3S>yE8%bmtS@H^udpHO*G(lT_k&NN9TI&sP1?_cefZa z+jZs#-EyK9xk`W1y_4a-8$DWoMB`d~jb5XrU9Zv4qvmV%8Fc71`q8u{LqAfo#?LQa zOhYpDk^QXrydCo}@Jbp~022-->|86*8#DFUc=JHti(MzZ;(=971Ac z&mrfXqP!5P68EfggIbQkN1$Cxu3X*`0alLpR%PCqTs&F8H`8zIK0QltPLtDKT-Q%` z-85c5%FnfRx;}}x>I?O2$nL57LXoyigjB@bpg-o^N@iSB*rHcIqAG-Zr5D)$F>duL zd-`j=5OP*8*io+jy^ON0=h%NJc074bFYH1(fYgF?2}yfiFZ4nhf;0vx59wwkE7E$T zN06RH+KY4y=_{nmNWq`$g`r5}kY*w+Lb@GkGtyH?dy$SIT}0~k1;+S7?+}LKVhqv@ zq%x!>NbK(}f$k03pXw6oQr7hc81KBV`Mjv=)meTnoV((g#x3&0ks7t#QvAxKF`V~{eC#v@Hb zx(TTi$&6HubUV^rNcSOaMS2Qp7g7__dq^K6wK(weCDM;bmyvW|VlbpIqzI%qq%lZY zNCikUk#0s>h-5{&4e1V~dypPMdJ<_T(#uHukPabzf^-h)8>F9*E+gsMFbOdKVEz9yhWTIS7q=z9F zUz*up>o@H`ByELlNr}}iFHB4eebK1DspqP*o-c(bozH}w%5-(Vi<}Yz#|z=Yc%dGC Mo#A3WEBjjfKkMku8UO$Q diff --git a/3rdparty/bx/tools/bin2c/bin2c.cpp b/3rdparty/bx/tools/bin2c/bin2c.cpp index 8aa1b9f..d33d920 100644 --- a/3rdparty/bx/tools/bin2c/bin2c.cpp +++ b/3rdparty/bx/tools/bin2c/bin2c.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bx#license-bsd-2-clause */ @@ -95,7 +95,7 @@ void help(const char* _error = NULL) fprintf(stderr , "bin2c, binary to C\n" - "Copyright 2011-2016 Branimir Karadzic. All rights reserved.\n" + "Copyright 2011-2017 Branimir Karadzic. All rights reserved.\n" "License: https://github.com/bkaradzic/bx#license-bsd-2-clause\n\n" ); @@ -145,12 +145,12 @@ int main(int _argc, const char* _argv[]) } void* data = NULL; - size_t size = 0; + uint32_t size = 0; bx::CrtFileReader fr; if (bx::open(&fr, filePath) ) { - size = (size_t)bx::getSize(&fr); + size = uint32_t(bx::getSize(&fr) ); data = malloc(size); bx::read(&fr, data, size); diff --git a/src/modules/RenderModule.cc b/src/modules/RenderModule.cc index b044e10..bec7a85 100644 --- a/src/modules/RenderModule.cc +++ b/src/modules/RenderModule.cc @@ -694,7 +694,7 @@ static float s_texelHalf = 0.0f; void screenSpaceQuad(float _textureWidth, float _textureHeight, bool _originBottomLeft = false, float _width = 1.0f, float _height = 1.0f) { - if (bgfx::checkAvailTransientVertexBuffer(3, PosColorTexCoord0Vertex::ms_decl) ) + if (bgfx::getAvailTransientVertexBuffer(3, PosColorTexCoord0Vertex::ms_decl) ) { bgfx::TransientVertexBuffer vb; bgfx::allocTransientVertexBuffer(&vb, 3, PosColorTexCoord0Vertex::ms_decl); @@ -1336,7 +1336,7 @@ void Renderer::paintGL() { // lights: update view and projection matrices and shadow map parameters for (uint32_t i = 0; i < lights.size(); i++) { - bgfx::setUniform(lights[i].u_lightPos, lights[i].pos); + bgfx::setUniform(lights[i].u_lightPos, lights[i].pos.data()); float shadow_map_params[4]; shadow_map_params[0] = static_cast(lights[i].shadowMapSize); shadow_map_params[1] = lights[0].shadowMapBias; @@ -1427,7 +1427,7 @@ void Renderer::paintGL() { // Floor. bx::mtxMul(lightMtx, mtxFloor, lights[0].mtxShadow); bgfx::setUniform(lights[0].u_lightMtx, lightMtx); - bgfx::setUniform(lights[0].u_lightPos, lights[0].pos); + bgfx::setUniform(lights[0].u_lightPos, lights[0].pos.data()); // Clear backbuffer and shadowmap framebuffer at beginning. bgfx::setViewClear(RenderState::Skybox @@ -1505,7 +1505,7 @@ void Renderer::paintGL() { } bgfx::setUniform(lights[0].u_lightMtx, lightMtx); - bgfx::setUniform(lights[0].u_lightPos, lights[0].pos); + bgfx::setUniform(lights[0].u_lightPos, lights[0].pos.data()); bgfx::setUniform(u_color, Vector4f(1.f, 1.f, 1.f, 1.f).data(), 4); bgfx::setIndexBuffer(plane_ibh); bgfx::setVertexBuffer(plane_vbh); @@ -1546,9 +1546,15 @@ void Renderer::paintGL() { ); // compute world position of the light + Vector4f light_pos4 ( + lights[0].pos[0], + lights[0].pos[1], + lights[0].pos[2], + 1.0f + ); Vector4f light_pos = entities[i]->mSkeletonMeshes.GetBoneMatrix(j) - * SimpleMath::Map(lights[0].pos, 4, 1); + * light_pos4; bgfx::setUniform(lights[0].u_lightPos, light_pos.data()); bgfx::setUniform(u_color, entities[i]->mColor.data()); diff --git a/src/modules/RenderModule.h b/src/modules/RenderModule.h index d79330b..fab9c4d 100644 --- a/src/modules/RenderModule.h +++ b/src/modules/RenderModule.h @@ -69,8 +69,8 @@ struct Light { bgfx::TextureHandle shadowMapTexture; bgfx::FrameBufferHandle shadowMapFB; - float pos[4]; - float dir[3]; + Vector3f pos; + Vector3f dir; float mtxView[16]; float mtxProj[16]; @@ -91,8 +91,8 @@ struct Light { u_lightMtx (BGFX_INVALID_HANDLE), shadowMapTexture (BGFX_INVALID_HANDLE), shadowMapFB (BGFX_INVALID_HANDLE), - pos {0.f, 10.f, 10.f, 1.0f}, - dir {-1.f, -1.f, -1.f}, + pos (Vector3f(0.f, 10.f, 10.f)), + dir (Vector3f(-1.f, -1.f, -1.f)), mtxView { 1.f, 0.f, 0.f, 0.f, 0.f, 1.f, 0.f, 0.f, @@ -398,8 +398,8 @@ struct Renderer { Renderer() : initialized(false), drawDebug(false), - width (0), - height (0) + view_width (0), + view_height (0) {} // initialize simple geometries (cube, sphere, ...) diff --git a/src/shaderc_compile.cpp b/src/shaderc_compile.cpp index 053ce91..4a3cc50 100644 --- a/src/shaderc_compile.cpp +++ b/src/shaderc_compile.cpp @@ -621,32 +621,32 @@ int compileShader(bx::CommandLine& _cmdLine, bx::ReaderSeekerI* _reader, bx::Wri char glslDefine[128]; bx::snprintf(glslDefine, BX_COUNTOF(glslDefine), "BGFX_SHADER_LANGUAGE_GLSL=%d", essl ? 1 : glsl); - if (0 == bx::stricmp(platform, "android") ) + if (0 == bx::strincmp(platform, "android") ) { preprocessor.setDefine("BX_PLATFORM_ANDROID=1"); preprocessor.setDefine("BGFX_SHADER_LANGUAGE_GLSL=1"); } - else if (0 == bx::stricmp(platform, "asm.js") ) + else if (0 == bx::strincmp(platform, "asm.js") ) { preprocessor.setDefine("BX_PLATFORM_EMSCRIPTEN=1"); preprocessor.setDefine("BGFX_SHADER_LANGUAGE_GLSL=1"); } - else if (0 == bx::stricmp(platform, "ios") ) + else if (0 == bx::strincmp(platform, "ios") ) { preprocessor.setDefine("BX_PLATFORM_IOS=1"); preprocessor.setDefine("BGFX_SHADER_LANGUAGE_GLSL=1"); } - else if (0 == bx::stricmp(platform, "linux") ) + else if (0 == bx::strincmp(platform, "linux") ) { preprocessor.setDefine("BX_PLATFORM_LINUX=1"); preprocessor.setDefine(glslDefine); } - else if (0 == bx::stricmp(platform, "nacl") ) + else if (0 == bx::strincmp(platform, "nacl") ) { preprocessor.setDefine("BX_PLATFORM_NACL=1"); preprocessor.setDefine("BGFX_SHADER_LANGUAGE_GLSL=1"); } - else if (0 == bx::stricmp(platform, "osx") ) + else if (0 == bx::strincmp(platform, "osx") ) { preprocessor.setDefine("BX_PLATFORM_OSX=1"); preprocessor.setDefine(glslDefine); @@ -654,14 +654,14 @@ int compileShader(bx::CommandLine& _cmdLine, bx::ReaderSeekerI* _reader, bx::Wri bx::snprintf(temp, sizeof(temp), "BGFX_SHADER_LANGUAGE_METAL=%d", metal); preprocessor.setDefine(temp); } - else if (0 == bx::stricmp(platform, "windows") ) + else if (0 == bx::strincmp(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::stricmp(platform, "xbox360") ) + else if (0 == bx::strincmp(platform, "xbox360") ) { preprocessor.setDefine("BX_PLATFORM_XBOX360=1"); preprocessor.setDefine("BGFX_SHADER_LANGUAGE_HLSL=3"); diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index eb6d69d..05b90a1 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -10,6 +10,7 @@ include_directories ( set (TEST_SRCS RenderModuleTests.cc ${GOOGLETEST_DIR}/src/gtest_main.cc + ${CMAKE_SOURCE_DIR}/3rdparty/bx/src/fpumath.cpp ) add_executable ( runtests ${TEST_SRCS} )